diff --git a/ADD-LANGUAGES.md b/ADD-LANGUAGES.md index cd5ab8e..0f35696 100755 --- a/ADD-LANGUAGES.md +++ b/ADD-LANGUAGES.md @@ -30,12 +30,12 @@ On this page, I will tell you how to add languages to pmt. This is not a difficu ~ $ C / C++ - const char* _Nonnull missing_operand = "missing operand."; - const std::string missing_operand = "missing operand."; + const char* _Nonnull missing_operand = "missing operand."; // C - + const std::string missing_operand = "missing operand."; // C++ - (not necessarily using 'string' type) APPLYING (C / C++): - printf("%s\n", missing_operand); // Move to new line with '\n' character - std::cout << missing_operand << std::endl; // Move to new line with std::endl + printf("%s\n", missing_operand); // C - Move to new line with '\n' character + std::cout << missing_operand << std::endl; // C++ - Move to new line with std::endl ``` For example, let's take the output directly in pmt without any arguments and process the variables and structures behind the work. @@ -48,7 +48,7 @@ On this page, I will tell you how to add languages to pmt. This is not a difficu ~ $ Code pieces (C++) - struct pmt_langdb_general en = { + struct langdb_general en = { // other translations .missing_operand = "missing operand", .try_h = "Try", @@ -64,8 +64,8 @@ In short, there are variables for texts. And I made these dynamic by using [stru ##### Translating main program texts (relevant part) - - Let's open our jni/Languages.cpp source file. - - Now, let's create the translation with the ready-made struct structure (see include/pmt/StringKeys.h for the structure). + - Let's open our jni/PartitionManager/Languages.cpp source file. + - Now, let's create the translation with the ready-made struct structure (see include/PartitionManager/StringKeys.h for the structure). ``` // Main struct langdb_general Lang = { // LANGUAGE_PREFIX must be the corresponding abbreviation of the language in English. For example, it's like En in English. @@ -79,8 +79,6 @@ In short, there are variables for texts. And I made these dynamic by using [stru ``` - We need to add some information about the language. ``` - VERY IMPORTANT NOTE: You should do your translations from within the function called WCHAR_T! - struct langdb_general Lang = { .lang_by_s = // Names of those who made the translation. It's up to you. Do you use & between more than one person? .language = // Language name. For example English @@ -90,11 +88,11 @@ In short, there are variables for texts. And I made these dynamic by using [stru // Example struct langdb_general LangEn = { - .lang_by_s = WCHAR_T("YZBruh & r0manas"), - .language = WCHAR_T("English"), - .lang_prefix = WCHAR_T("en"), + .lang_by_s = "YZBruh & r0manas", + .language = "English", + .lang_prefix = "en", // other translations - .by_str = WCHAR_T("By") // Example for end translate + .by_str = "By" // Example for end translate } // CRITIC WARNING: Do not add ',' to the end of the last translation text. But others always... @@ -104,15 +102,15 @@ In short, there are variables for texts. And I made these dynamic by using [stru ##### Document texts translation (relevant part) - - Let's open our jni/Languages.cpp source file. - - Now, let's create the translation with the ready-made struct structure (see include/pmt/StringKeys.h for the structure). + - Let's open our jni/PartitionManager/Languages.cpp source file. + - Now, let's create the translation with the ready-made struct structure (see include/PartitionManager/StringKeys.h for the structure). ``` struct langdb_docs LangDoc = { // translations } // Example - struct pmt_langdb_docs LangDocEn = { + struct langdb_docs LangDocEn = { // translations } @@ -122,24 +120,20 @@ In short, there are variables for texts. And I made these dynamic by using [stru ##### General things to do in translation - - Open jni/LanguageTools.cpp -``` -string supp_langs[] = { - "en", - "tr", - // language prefix. "", - "" // PLEASE DO NOT ADD IT UNDER `""`! -}; + - Open include/PartitionManager/LanguageConfigs.h + ``` + // Example + struct LanguageConfigs LanguageConfig[] { + {"en", "English", Display::LangEn, Display::LangDocEn}, + {"tr", "Türkçe", Display::LangTr, Display::LangDocTr} + }; -// Example -string supp_langs[] = { - "en", - "tr", - "az", - "" -}; - -// Add the language you are translating into these existing language prefixes. I will fix the errors here (if there is an error) + // Add the language you are translating into these existing language prefixes. I will fix the errors here (if there is an error) + struct LanguageConfigs LanguageConfig[] { + {"en", "English", Display::LangEn, Display::LangDocEn}, + {"tr", "Türkçe", Display::LangTr, Display::LangDocTr}, + {"az", "Azərbaycan", Display::LangAz, Display::LangDocAz} + }; ``` ##### Notes diff --git a/CHANGELOG.md b/CHANGELOG.md index a54ce78..5f27612 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,11 @@ -### Version 2.9.6 Changelog +### Version 3.0.2 Changelog - - Improved verbose logging. - - Some adjustments were made to increase performance. - - Cleaned up unnecessary e2fsprog sources. - - Code simplified. - - And some minor changes... + - The parted terminal has been added + - Compatibility has been achieved with versions below Android 10 (since e2fsprogs, android 10+ was required) + - Language loader functions improved and dynamized. Adding languages will be easier now + - Unnecessary code cleaned up + - Minor bug fixes ``` -END OF 2.9.6 UPDATE CHANGELOG +END OF 3.0.2 UPDATE CHANGELOG ``` diff --git a/README.md b/README.md index fa2abb4..f93f84b 100755 --- a/README.md +++ b/README.md @@ -2,22 +2,24 @@ [![Commit reviewed](https://github.com/ShawkTeam/pmt/actions/workflows/check_commits.yml/badge.svg)](https://github.com/ShawkTeam/pmt/actions/workflows/check_commits.yml) -This is a binary written with C++ and it is for writing/reading, formatting and getting size on Android partitions. +This binary, written with C++, is for managing (partition) table, writing/reading, formatting and getting size on Android partitions. ``` -Usage: pmt [OPTIONS] backup PARTITION [OUTPUT] [OPTIONS]... +Usage: pmt [OPTIONS] start-parted [DEVICE]... + or: pmt [OPTIONS] backup PARTITION [OUTPUT] [OPTIONS]... or: pmt [OPTIONS] flash PARTITION FILE [OPTIONS]... or: pmt [OPTIONS] format PARTITION FILE_SYSTEM[ext/2/3/4] [OPTIONS]... or: pmt [OPTIONS] partition-size PARTITION [OPTIONS]... Options: -l, --logical It is meant to determine whether the target partition is logical. - -P, --search-path It is meant to specify a custom partition search path. Only classic partitions (default: /dev/block/by-name). + -P, --search-path It is meant to specify a custom partition search path. Only normal partitions (default: /dev/block/by-name). -p, --list List partitions. -s, --silent Information and warning messages are silenced in normal work. -f, --force Force mode. Some things are ignored. -V, --verbose Verbose mode. Print detailed informations etc. -S, --set-lang Set current language. + -U, --view-langs See supported languages. -v, --version See version. --help See this help message. @@ -39,41 +41,46 @@ Examples: Report bugs and suggestions to ``` -### Notes +#### Some notes -- pmt now supports multiple languages. [See languages.](https://github.com/ShawkTeam/pmt/blob/2.9.6/LANGUAGES.md) -- [Add a language.](https://github.com/ShawkTeam/pmt/blob/2.9.6/ADD-LANGUAGES.md) +- pmt supports multiple languages. [See languages.](https://github.com/ShawkTeam/pmt/blob/3.0.2/LANGUAGES.md) +- [Add language.](https://github.com/ShawkTeam/pmt/blob/3.0.2/ADD-LANGUAGES.md) - Feel free to ask any questions you want. - Packages are available in publications. - If the logical partition flag is not used, a classic partition is tried to be processing by default. -- [Click to see special version changes.](https://github.com/ShawkTeam/pmt/blob/2.9.6/CHANGELOG.md) -- We are always open to your suggestions and support _(developing)_! +- [Click to see special version changes.](https://github.com/ShawkTeam/pmt/blob/3.0.2/CHANGELOG.md) +- We are always open to your suggestions and support (developing)! -## How to build? -Partition Manager only buildable with Android NDK (make compilation system deprecated). +### How is it built? +Make or Android NDK is required to build. +##### Build with NDK - [Download Android NDK](https://developer.android.com/ndk/downloads) and extract the NDK package. - Clone this repository. And get access to it. ``` -git clone https://github.com/ShawkTeam/pmt -b 2.9.6 +git clone https://github.com/ShawkTeam/pmt -b 3.0.2 cd pmt ``` - Set the NDK working directory variable. ``` -export NDK_PROJECT_PATH="${PWD}" # or where the source directory is everywhere -export NDK_ROOT_DIR= # Note that if the NDK is in the directory +make gen-ndk-makefiles +# If you fail the audit etc, use FORCE_GEN. +# Example: + make gen-ndk-makefiles FORCE_GEN=true -# Generate clang version header -bash build/bash/gen-header +# Required by Android NDK +export NDK_PROJECT_PATH="${PWD}" ``` - Go to the NDK directory and start the build ``` -./ndk-build +# Required for creating clang version information and directory access +export NDK_ROOT_DIR="${PWD}" +cd "${NDK_PROJECT_PATH}" \ +&& bash build/bash/gen-header \ +&& cd "${NDK_ROOT_DIR}" -# Permission denied? Change mode and retry -(sudo) chmod +x ndk-build -# OR -(sudo) chmod 755 ndk-build +# Start build +./ndk-build ``` - The output files will be inside the `pmt` folder. Binaries are available in two architectures within the `libs` folder. `arm64-v8a` (64-bit) and `armeabi-v7a` (32-bit). ``` @@ -90,40 +97,30 @@ bash build/bash/gen-header pmt pmt ``` -### Manage pmt with termux script - - Download script. +``` +# Manage pmt with termux script +## Download script +curl -LSs https://github.com/ShawkTeam/pmt/raw/3.0.2/pmt-termux.sh > pmt-termux.sh -``` -curl -LSs https://github.com/ShawkTeam/pmt/raw/2.9.6/pmt-termux.sh > pmt-termux.sh -``` - - Some informations... -``` ## View script help bash pmt-termux.sh # --help (optional) ## The commands will be told to you anyway. Ask your questions from the telegram group. -``` ### How to use ``` -# Directly access root shell +# Run /system/bin/su - -# If you are using termux, use with -# tsu (sudo) will be a better choice -pkg install -y tsu # install tsu (sudo) - -sudo ``` - If you have installed the deb package of pmt, installed it with a makefile, or installed it to `$PATH` using any path, just the name of the pmt is enough (or the file name if you did it manually) ``` -(sudo) pmt +pmt <...> ``` -- If you have not done this type of institution, pmt is in the directory where you are present you can run with `(sudo) ./`. +- If you have not done this type of institution, pmt is in the directory where you are present you can run with `./`. ``` -(sudo) ./pmt # or whatever the file name is +./pmt <...> # or whatever the file name is ``` ### Notes diff --git a/build/bash/gen-header b/build/bash/gen-header index 233382c..24ade04 100755 --- a/build/bash/gen-header +++ b/build/bash/gen-header @@ -14,19 +14,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -[ -z ${NDK_ROOT_DIR} ] && \ - { - echo "Please set NDK_ROOT_DIR variable!" - exit 1 - } +[ -z ${NDK_ROOT_DIR} ] \ +&& echo "Please set NDK_ROOT_DIR variable!" \ +&& exit 1 -[ -z ${NDK_PROJECT_PATH} ] && \ - { - echo "Please set NDK_PROJECT_PATH variable!" - exit 1 - } +[ -z ${NDK_PROJECT_PATH} ] \ +&& echo "Please set NDK_PROJECT_PATH variable!" \ +&& exit 1 -CXX_IS="${NDK_ROOT_DIR}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang++" +CXX_IS="${NDK_ROOT_DIR}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++" CXX_VERS=$(${CXX_IS} --version | head -n 1) mkdir -p ${NDK_PROJECT_PATH}/include/PartitionManager/generated diff --git a/build/mandoc/mandoc b/build/mandoc/mandoc index 19e3f2c..cd42a68 100755 --- a/build/mandoc/mandoc +++ b/build/mandoc/mandoc @@ -14,7 +14,7 @@ .\" See the License for the specific language governing permissions and .\" limitations under the License. .\" -.TH "PMT" "8" "October 2024" "PMT 2.9.6" "Partition Manager" +.TH "PMT" "8" "December 2024" "PMT 3.0.2" "Partition Manager" .SH NAME .B pmt \- Android Partition Manager Tool @@ -41,6 +41,11 @@ .I PARTITION {OPTIONS}... ] [ +.I {OPTIONS} +.B start-parted +.I \[DEVICE\] {OPTIONS} +] +[ .B \-l | .B \-\-logical @@ -86,7 +91,7 @@ ] .SH DESCRIPTION .B pmt -is a tool made to read android parts, make flash and format. Written with C++ language. It was first created as only a hobby but subsequently serialized +is a tool made to professionaly manage with parted, read android parts, make flash and format. Written with C++ language. It was first created as only a hobby but subsequently serialized .PP .SH OPTIONS .sp diff --git a/build/workflow/build.config b/build/workflow/build.config index 3da624f..425b72c 100755 --- a/build/workflow/build.config +++ b/build/workflow/build.config @@ -1,5 +1,5 @@ -export PMT_VERSION="2.9.6" -export PMT_VERSION_CODE=296 -export NDK_VERSION="r27" +export PMT_VERSION="3.0.2" +export PMT_VERSION_CODE=302 +export NDK_VERSION="r27c" export NDK_IS="android-ndk" export NDK_LINK="https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux.zip" diff --git a/build/workflow/relnotes b/build/workflow/relnotes index e407dec..5717335 100755 --- a/build/workflow/relnotes +++ b/build/workflow/relnotes @@ -1,4 +1,4 @@ -echo -e "\`${CXX_VERSION}\` +echo -e "\`${CC_VERSION}\` Version and code: \`${PMT_VERSION}\`/\`${PMT_VERSION_CODE}\` Supported architectures: \`arm64-v8a\` (64-bit), \`armeabi-v7a\` (32-bit) diff --git a/include/PartitionManager/Alternatives.h b/include/PartitionManager/Alternatives.h new file mode 100755 index 0000000..86a5aef --- /dev/null +++ b/include/PartitionManager/Alternatives.h @@ -0,0 +1,36 @@ +/* By YZBruh */ + +/** + * Copyright 2024 Partition Manager + * + * 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. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if __has_include("config.h") +#include "config.h" +#endif +#include +#include + +ssize_t getrandom(void* buf, size_t buflen, unsigned int flags); +int getentropy(void* buf, size_t buflen); +char* _Nullable hasmntopt(const struct mntent* mnt, const char* opt); +void* _Nullable reallocarray(void* ptr, size_t count, size_t size); + +#ifdef __cplusplus +} +#endif diff --git a/include/PartitionManager/Deprecates.h b/include/PartitionManager/Deprecates.h index afb71c2..c3d9ac4 100755 --- a/include/PartitionManager/Deprecates.h +++ b/include/PartitionManager/Deprecates.h @@ -7,7 +7,7 @@ * 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 + * 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, @@ -19,81 +19,84 @@ #pragma once /* annotated macros */ -#define DeprecatedOption 1 -#define ChangedOption 2 -#define EndDeprcationPoint 0 -#define NotChanged 0 -#define NotChangedLong nullptr +#define DeprecatedOption 1 +#define ChangedOption 2 +#define EndDeprcationPoint 0 +#define NotChanged 0 +#define NotChangedLong nullptr -/* versions */ -#define v150 "1.5.0" -#define v160 "1.6.0" -#define v170 "1.7.0" -#define v180 "1.8.0" -#define v190 "1.9.0" -#define v200 "2.0.0" -#define v210 "2.1.0" -#define v220 "2.2.0" -#define v230 "2.3.0" -#define v240 "2.4.0" -#define v250 "2.5.0" -#define v260 "2.6.0" -#define v270 "2.7.0" -#define v280 "2.8.0" -#define v290 "2.9.0" -#define v291 "2.9.1" -#define v296 "2.9.6" +/* version table */ +#define v150 "1.5.0" +#define v160 "1.6.0" +#define v170 "1.7.0" +#define v180 "1.8.0" +#define v190 "1.9.0" +#define v200 "2.0.0" +#define v210 "2.1.0" +#define v220 "2.2.0" +#define v230 "2.3.0" +#define v240 "2.4.0" +#define v250 "2.5.0" +#define v260 "2.6.0" +#define v270 "2.7.0" +#define v280 "2.8.0" +#define v290 "2.9.0" +#define v291 "2.9.1" +#define v296 "2.9.6" +#define v302 "3.0.2" #define vUNKNOWN nullptr struct DeprecationVarTab { - const int DeprecationType; - const int Option; - const int Option_new; - const char* Option_long; - const char* Option_long_new; - const char* DeprecatedOnVersion; + const int DeprecationType; + const int Option; + const int Option_new; + const char* Option_long; + const char* Option_long_new; + const char* DeprecatedOnVersion; }; static struct DeprecationVarTab DeprecationTable[] = { - {DeprecatedOption, 'b', NotChanged, "backup", NotChangedLong, v210}, - {DeprecatedOption, 'F', NotChanged, "flash", NotChangedLong, v210}, - {DeprecatedOption, 'r', NotChanged, "format", NotChangedLong, v210}, - {DeprecatedOption, 'L', NotChanged, "license", NotChangedLong, v250}, - {ChangedOption, 'D', 'p', "list", NotChangedLong, v210}, - {ChangedOption, 'c', 'P', "context", "search-path", v290}, - {EndDeprcationPoint, NotChanged, NotChanged, NotChangedLong, NotChanged, vUNKNOWN} + {DeprecatedOption, 'b', NotChanged, "backup", NotChangedLong, v210}, + {DeprecatedOption, 'F', NotChanged, "flash", NotChangedLong, v210}, + {DeprecatedOption, 'r', NotChanged, "format", NotChangedLong, v210}, + {DeprecatedOption, 'L', NotChanged, "license", NotChangedLong, v250}, + {ChangedOption, 'D', 'p', "list", NotChangedLong, v210}, + {ChangedOption, 'c', 'P', "context", "search-path", v290}, + {EndDeprcationPoint, NotChanged, NotChanged, NotChangedLong, NotChanged, vUNKNOWN} }; static void __process_deprecated_opts(int Opt, const string& OptionLong, const char* DeprecationMsg) { - string LongErrMsg = (OptionLong.empty()) ? PartitionManager::Display::UsingDispString->not_changed_opt : OptionLong; + string LongErrMsg = (OptionLong.empty()) ? PartitionManager::Display::UsingDispString->not_changed_opt : OptionLong; - for (int optctrl = 0; DeprecationTable[optctrl].DeprecationType != 0; optctrl++) - { + for (int optctrl = 0; DeprecationTable[optctrl].DeprecationType != 0; optctrl++) + { - if (DeprecationTable[optctrl].DeprecationType == 1) - { - if (Opt == DeprecationTable[optctrl].Option || strcmp(OptionLong.c_str(), DeprecationTable[optctrl].Option_long) == 0) - LOGD("%s [%s]: -%c (%s): %s\n", - PartitionManager::Display::UsingDispString->depr_opt_str, - DeprecationTable[optctrl].DeprecatedOnVersion, - (char)DeprecationTable[optctrl].Option, - DeprecationTable[optctrl].Option_long, - DeprecationMsg); exit(1); - } - else if (DeprecationTable[optctrl].DeprecationType == 2) - { - if (Opt == DeprecationTable[optctrl].Option || strcmp(OptionLong.c_str(), DeprecationTable[optctrl].Option_long) == 0) - LOGD("%s [%s]: -%c (%s): %s\n", - PartitionManager::Display::UsingDispString->switched_opt_str, - DeprecationTable[optctrl].DeprecatedOnVersion, - (char)DeprecationTable[optctrl].Option, - LongErrMsg.c_str(), - DeprecationMsg); exit(1); - } + if (DeprecationTable[optctrl].DeprecationType == 1) + { + if (Opt == DeprecationTable[optctrl].Option + || strcmp(OptionLong.c_str(), DeprecationTable[optctrl].Option_long) == 0) + LOGD("%s [%s]: -%c (%s): %s\n", + PartitionManager::Display::UsingDispString->depr_opt_str, + DeprecationTable[optctrl].DeprecatedOnVersion, + (char)DeprecationTable[optctrl].Option, + DeprecationTable[optctrl].Option_long, + DeprecationMsg); exit(1); + } + else if (DeprecationTable[optctrl].DeprecationType == 2) + { + if (Opt == DeprecationTable[optctrl].Option + || strcmp(OptionLong.c_str(), DeprecationTable[optctrl].Option_long) == 0) + LOGD("%s [%s]: -%c (%s): %s\n", + PartitionManager::Display::UsingDispString->switched_opt_str, + DeprecationTable[optctrl].DeprecatedOnVersion, + (char)DeprecationTable[optctrl].Option, + LongErrMsg.c_str(), + DeprecationMsg); exit(1); + } - } + } } #define DEPR_HANDLE __process_deprecated_opts diff --git a/include/PartitionManager/FileSystemUtils.h b/include/PartitionManager/FileSystemUtils.h index 31eb6ee..ad5d584 100755 --- a/include/PartitionManager/FileSystemUtils.h +++ b/include/PartitionManager/FileSystemUtils.h @@ -7,7 +7,7 @@ * 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 + * 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, diff --git a/include/PartitionManager/LanguageConfigs.h b/include/PartitionManager/LanguageConfigs.h new file mode 100755 index 0000000..ebec70d --- /dev/null +++ b/include/PartitionManager/LanguageConfigs.h @@ -0,0 +1,40 @@ +/* By YZBruh */ + +/** + * Copyright 2024 Partition Manager + * + * 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. + */ + +#pragma once + +namespace PartitionManager { + // Config base + struct LanguageConfigs { + string Name; // name of language. e.g.: "en" + string ExName; + struct langdb_general* LanguageStructure; // structure of language + struct langdb_docs* LanguageDocStructure; // structure of language (for docs) + }; + + // Used config by pmt + struct LanguageConfigs LanguageConfig[] { + {"en", "English", &Display::LangEn, &Display::LangDocEn}, + {"tr", "Türkçe", &Display::LangTr, &Display::LangDocTr} + }; + + // Default + struct langdb_general* Display::UsingDispString = nullptr; +} + +/* end of code */ \ No newline at end of file diff --git a/include/PartitionManager/Parted.h b/include/PartitionManager/Parted.h new file mode 100755 index 0000000..97adb83 --- /dev/null +++ b/include/PartitionManager/Parted.h @@ -0,0 +1,25 @@ +/* By YZBruh */ + +/** + * Copyright 2024 Partition Manager + * + * 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. + */ + +#pragma once + +extern "C" int parted_main(int argc, char* argv[]); +extern volatile int set_ret; +extern volatile int parted_ret; + +/* end of code */ \ No newline at end of file diff --git a/include/PartitionManager/PartitionManager.h b/include/PartitionManager/PartitionManager.h index e651525..a823f16 100755 --- a/include/PartitionManager/PartitionManager.h +++ b/include/PartitionManager/PartitionManager.h @@ -7,7 +7,7 @@ * 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 + * 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, @@ -18,71 +18,75 @@ #pragma once -#if !defined(__clang__) && !defined(__NDK_BUILD) - #error "Your compiler is NOT clang. Please build with (LLVM) clang." +#if INC_MAIN_LIBS + #include + #include + #include + #include + #include + #include + #if IS_MAIN + #include + #endif + #if !defined(HELP_CPP) || !defined(VERSION_CPP) + #include + #include + #include + #include + #endif #endif - -#ifdef INC_MAIN_LIBS - #include - #include - #include - #include - #include - #include - #ifdef IS_MAIN - #include - #endif - #if !defined(HELP) || !defined(VERSIONING) - #include - #include - #include - #include - #endif +#if INC_STRINGKEYS + #include #endif -#ifdef INC_STRINGKEYS - #include +#if INC_DIRENT + #include #endif -#ifdef INC_DIRENT - #include +#if INC_STAT + #include #endif -#ifdef INC_STAT - #include +#if INC_DEBUGERS + #include #endif -#ifdef INC_DEBUGERS - #include +#if INC_TOOLS_REQS + #include #endif -#ifdef INC_TOOLS_REQS - #include +#if INC_LIBGEN + #include #endif -#ifdef INC_LIBGEN - #include +#if INC_PTHREAD + #include #endif using namespace std; /* logging levels */ typedef enum { - LOG_LEVEL_FATAL, - LOG_LEVEL_ERROR, - LOG_LEVEL_WARN, - LOG_LEVEL_DEBUG + LOG_LEVEL_FATAL, + LOG_LEVEL_ERROR, + LOG_LEVEL_WARN, + LOG_LEVEL_DEBUG } LogLevel; /* config structure */ struct Configuration { - bool UseLogical; - bool UseCustomSearchPath; - bool UsesSlots; - bool UsesLogical; - bool OnlyViewSize; - bool SilentEnabled; - bool FlashMode; - bool BackupMode; - bool FormatMode; - bool PartSizeViewMode; - bool ForceMode; - bool VerboseMode; - bool InstalledOnTermux; + /* general boolean tab */ + bool UseLogical; + bool UseCustomSearchPath; + bool UsesSlots; + bool UsesLogical; + bool SilentEnabled; + bool FlashMode; + bool BackupMode; + bool FormatMode; + bool PartedMode; + bool PartSizeViewMode; + bool PartUtilMode; + bool ForceMode; + bool VerboseMode; + bool InstalledOnTermux; + + /* part-size argument bools */ + bool OnlyViewSize; }; /** @@ -103,61 +107,66 @@ extern struct Configuration Config; /* create a special namespace */ namespace PartitionManager { - namespace Strings { - extern string OutputName; - extern string CustomSearchPath; - extern string TargetPartition; - extern string TargetFlashFile; - extern string TargetFormatFS; - extern string PartitionType; - extern string ExecutingName; - extern string CurrentLanguage; - } /* namespace Strings */ + namespace Strings { + extern string OutputName; + extern string CustomSearchPath; + extern string TargetPartition; + extern string TargetFlashFile; + extern string TargetFormatFS; + extern string PartitionType; + extern string Device; + extern string ExecutingName; + extern string CurrentLanguage; + } /* namespace Strings */ - namespace Integers { - extern int PartSizeViewType; - } /* namespace Integers */ + namespace Integers { + extern int PartSizeViewType; + } /* namespace Integers */ - namespace Display { - extern struct langdb_general* UsingDispString; - extern struct langdb_docs* UsingDocDispString; - extern struct langdb_general LangEn; - extern struct langdb_general LangTr; - extern struct langdb_docs LangDocEn; - extern struct langdb_docs LangDocTr; - } /* namespace Display */ + namespace Display { + extern struct langdb_general* UsingDispString; + extern struct langdb_docs* UsingDocDispString; + extern struct langdb_general LangEn; + extern struct langdb_general LangTr; + extern struct langdb_docs LangDocEn; + extern struct langdb_docs LangDocTr; + } /* namespace Display */ - /* functions */ - int ListPartitions(void); - int GetState(const string& filepath, const string& stype = "file"); - int PartitionManagerMain(const ushort_t& progress_code); - void SetLanguage(const string& lang, ushort_t null_conf_stat); - void DisplayLog(LogLevel LogPriority, const char* fmt, ...); - void DisplayVerboseLog(LogLevel LogPriority, const char* func, const int& line, const char* fmt, ...); - void CheckDevPoint(void); - void CheckRoot(void); - bool CleanSWPoint(void); - bool LoadLanguage(void); + /* functions */ + int ListPartitions(void); + int GetState(const string& filepath, const string& stype = "file"); + int PartitionManagerMain(const ushort_t& progress_code); + int StartParted(void); + void SetLanguage(const string& lang, ushort_t null_conf_stat); + void DisplaySupportedLanguages(void); + void DisplayLog(LogLevel LogPriority, const char* fmt, ...); + void DisplayVerboseLog(LogLevel LogPriority, const char* func, const int& line, const char* fmt, ...); + void CheckDevPoint(void); + void CheckRoot(void); + bool CleanSWPoint(void); + bool LoadLanguage(void); + bool SearchDevice(const string& DevicePath); + bool SearchDefaultDevices(void); } /* namespace PartitionManager */ /* logging macros */ #define LOGF(fmt, ...) \ - ((void)PartitionManager::DisplayLog(LOG_LEVEL_FATAL, (fmt)__VA_OPT__(, ) __VA_ARGS__)) + ((void)PartitionManager::DisplayLog(LOG_LEVEL_FATAL, (fmt)__VA_OPT__(, ) __VA_ARGS__)) #define LOGE(fmt, ...) \ - ((void)PartitionManager::DisplayLog(LOG_LEVEL_ERROR, (fmt)__VA_OPT__(, ) __VA_ARGS__)) + ((void)PartitionManager::DisplayLog(LOG_LEVEL_ERROR, (fmt)__VA_OPT__(, ) __VA_ARGS__)) #define LOGW(fmt, ...) \ - ((void)PartitionManager::DisplayLog(LOG_LEVEL_WARN, (fmt)__VA_OPT__(, ) __VA_ARGS__)) + ((void)PartitionManager::DisplayLog(LOG_LEVEL_WARN, (fmt)__VA_OPT__(, ) __VA_ARGS__)) #define LOGD(fmt, ...) \ - ((void)PartitionManager::DisplayLog(LOG_LEVEL_DEBUG, (fmt)__VA_OPT__(, ) __VA_ARGS__)) + ((void)PartitionManager::DisplayLog(LOG_LEVEL_DEBUG, (fmt)__VA_OPT__(, ) __VA_ARGS__)) /* verbose logging macros */ #define VLOGF(fmt, ...) \ - ((void)PartitionManager::DisplayVerboseLog(LOG_LEVEL_FATAL, __func__, __LINE__, (fmt)__VA_OPT__(, ) __VA_ARGS__)) + ((void)PartitionManager::DisplayVerboseLog(LOG_LEVEL_FATAL, __func__, __LINE__, (fmt)__VA_OPT__(, ) __VA_ARGS__)) #define VLOGE(fmt, ...) \ - ((void)PartitionManager::DisplayVerboseLog(LOG_LEVEL_ERROR, __func__, __LINE__, (fmt)__VA_OPT__(, ) __VA_ARGS__)) + ((void)PartitionManager::DisplayVerboseLog(LOG_LEVEL_ERROR, __func__, __LINE__, (fmt)__VA_OPT__(, ) __VA_ARGS__)) #define VLOGW(fmt, ...) \ - ((void)PartitionManager::DisplayVerboseLog(LOG_LEVEL_WARN, __func__, __LINE__, (fmt)__VA_OPT__(, ) __VA_ARGS__)) + ((void)PartitionManager::DisplayVerboseLog(LOG_LEVEL_WARN, __func__, __LINE__, (fmt)__VA_OPT__(, ) __VA_ARGS__)) #define VLOGD(fmt, ...) \ - ((void)PartitionManager::DisplayVerboseLog(LOG_LEVEL_DEBUG, __func__, __LINE__, (fmt)__VA_OPT__(, ) __VA_ARGS__)) + ((void)PartitionManager::DisplayVerboseLog(LOG_LEVEL_DEBUG, __func__, __LINE__, (fmt)__VA_OPT__(, ) __VA_ARGS__)) /* end of code */ diff --git a/include/PartitionManager/StringKeys.h b/include/PartitionManager/StringKeys.h index 4146427..1fd8d63 100755 --- a/include/PartitionManager/StringKeys.h +++ b/include/PartitionManager/StringKeys.h @@ -7,7 +7,7 @@ * 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 + * 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, @@ -20,113 +20,122 @@ /* The struct is a very good option for setting the languages of texts etc. */ struct langdb_general { - const char* _Nonnull lang_by_s; - const char* _Nonnull language; - const char* _Nonnull lang_prefix; - const char* _Nonnull not_logical; - const char* _Nonnull not_file; - const char* _Nonnull not_dir; - const char* _Nonnull not_in_dev; - const char* _Nonnull not_open; - const char* _Nonnull not_block; - const char* _Nonnull not_read; - const char* _Nonnull not_readdir; - const char* _Nonnull not_write; - const char* _Nonnull not_gen; - const char* _Nonnull no_root; - const char* _Nonnull expected_backup_arg; - const char* _Nonnull expected_flash_arg; - const char* _Nonnull expected_format_arg; - const char* _Nonnull expected_partsz_arg; - const char* _Nonnull missing_operand; - const char* _Nonnull multiple_wiewers; - const char* _Nonnull symbol_rule; - const char* _Nonnull req_part_name; - const char* _Nonnull part_not_found; - const char* _Nonnull unsupported_fs; - const char* _Nonnull cannot_stat; - const char* _Nonnull ffile_more_part; - const char* _Nonnull cannot_get_bsz; - const char* _Nonnull format_fail; - const char* _Nonnull fail_get_psize; - const char* _Nonnull depr_backup_opt; - const char* _Nonnull depr_flash_opt; - const char* _Nonnull depr_format_opt; - const char* _Nonnull depr_Vlicense_opt; - const char* _Nonnull depr_ch_list_opt; - const char* _Nonnull depr_ch_sp_opt; - const char* _Nonnull not_spec_opt; - const char* _Nonnull some_spec; - const char* _Nonnull logical_warn; - const char* _Nonnull ab_warn; - const char* _Nonnull out_not_spec; - const char* _Nonnull no_found_on_process; - const char* _Nonnull please_rerun; - const char* _Nonnull part_disk_sz; - const char* _Nonnull flash_file_sz; - const char* _Nonnull part_disk_sz_fail; - const char* _Nonnull flash_file_sz_fail; - const char* _Nonnull unknown_opr; - const char* _Nonnull req_an_arg; - const char* _Nonnull list_of_general; - const char* _Nonnull list_of_logc; - const char* _Nonnull success_backup; - const char* _Nonnull success_flash; - const char* _Nonnull success_format; - const char* _Nonnull formatting; - const char* _Nonnull warn; - const char* _Nonnull fatal; - const char* _Nonnull is_requires_arg; - const char* _Nonnull only_partsz_args; - const char* _Nonnull unknw_arg; - const char* _Nonnull switching_lang; - const char* _Nonnull welcome; - const char* _Nullable welcome_; - const char* _Nonnull for_more; - const char* _Nonnull s_and_v; - const char* _Nonnull try_h; - const char* _Nonnull usage_head; - const char* _Nonnull depr_opt_str; - const char* _Nonnull switched_opt_str; - const char* _Nonnull not_changed_opt; - const char* _Nonnull compiler_str; - const char* _Nonnull version_str; - const char* _Nonnull bin_str; - const char* _Nonnull part_name; - const char* _Nonnull part_type; - const char* _Nonnull fs_str; - const char* _Nonnull unknw_str; - const char* _Nonnull by_str; - const char* _Nonnull yes; - const char* _Nonnull no; + const char* _Nonnull lang_by_s; + const char* _Nonnull language; + const char* _Nonnull lang_prefix; + const char* _Nonnull not_logical; + const char* _Nonnull not_file; + const char* _Nonnull not_dir; + const char* _Nonnull not_in_dev; + const char* _Nonnull not_open; + const char* _Nonnull not_block; + const char* _Nonnull not_read; + const char* _Nonnull not_readdir; + const char* _Nonnull not_write; + const char* _Nonnull not_gen; + const char* _Nonnull no_root; + const char* _Nonnull expected_backup_arg; + const char* _Nonnull expected_flash_arg; + const char* _Nonnull expected_format_arg; + const char* _Nonnull expected_partsz_arg; + const char* _Nonnull missing_operand; + const char* _Nonnull multiple_wiewers; + const char* _Nonnull symbol_rule; + const char* _Nonnull req_part_name; + const char* _Nonnull part_not_found; + const char* _Nonnull unsupported_fs; + const char* _Nonnull cannot_stat; + const char* _Nonnull ffile_more_part; + const char* _Nonnull cannot_get_bsz; + const char* _Nonnull format_fail; + const char* _Nonnull fail_get_psize; + const char* _Nonnull depr_backup_opt; + const char* _Nonnull depr_flash_opt; + const char* _Nonnull depr_format_opt; + const char* _Nonnull depr_Vlicense_opt; + const char* _Nonnull depr_ch_list_opt; + const char* _Nonnull depr_ch_sp_opt; + const char* _Nonnull not_spec_opt; + const char* _Nonnull some_spec; + const char* _Nonnull logical_warn; + const char* _Nonnull ab_warn; + const char* _Nonnull out_not_spec; + const char* _Nonnull no_found_on_process; + const char* _Nonnull please_rerun; + const char* _Nonnull part_disk_sz; + const char* _Nonnull flash_file_sz; + const char* _Nonnull part_disk_sz_fail; + const char* _Nonnull flash_file_sz_fail; + const char* _Nonnull found_defdevice; + const char* _Nonnull cannot_find_any_defdevice; + const char* _Nonnull cannot_find_device; + const char* _Nonnull not_spec_device_on_args; + const char* _Nonnull starting_parted; + const char* _Nonnull exited_with; + const char* _Nonnull unknown_opr; + const char* _Nonnull req_an_arg; + const char* _Nonnull list_of_general; + const char* _Nonnull list_of_logc; + const char* _Nonnull success_backup; + const char* _Nonnull success_flash; + const char* _Nonnull success_format; + const char* _Nonnull formatting; + const char* _Nonnull warn; + const char* _Nonnull fatal; + const char* _Nonnull is_requires_arg; + const char* _Nonnull list_of_supported; + const char* _Nonnull only_partsz_args; + const char* _Nonnull unknw_arg; + const char* _Nonnull switching_lang; + const char* _Nonnull welcome; + const char* _Nullable welcome_; + const char* _Nonnull for_more; + const char* _Nonnull s_and_v; + const char* _Nonnull try_h; + const char* _Nonnull usage_head; + const char* _Nonnull depr_opt_str; + const char* _Nonnull switched_opt_str; + const char* _Nonnull not_changed_opt; + const char* _Nonnull compiler_str; + const char* _Nonnull version_str; + const char* _Nonnull bin_str; + const char* _Nonnull part_name; + const char* _Nonnull part_type; + const char* _Nonnull fs_str; + const char* _Nonnull unknw_str; + const char* _Nonnull by_str; + const char* _Nonnull yes; + const char* _Nonnull no; }; /* docs etc. */ struct langdb_docs { - const char* _Nonnull docs_strs_l1; - const char* _Nonnull docs_strs_l2; - const char* _Nonnull docs_strs_l3; - const char* _Nonnull docs_strs_l4; - const char* _Nonnull docs_strs_l5; - const char* _Nonnull docs_strs_l6; - const char* _Nonnull docs_strs_l7; - const char* _Nonnull docs_strs_l8; - const char* _Nonnull docs_strs_l9; - const char* _Nonnull docs_strs_l10; - const char* _Nonnull docs_strs_l11; - const char* _Nonnull docs_strs_l12; - const char* _Nonnull docs_strs_l13; - const char* _Nonnull docs_strs_l14; - const char* _Nonnull docs_strs_l15; - const char* _Nonnull docs_strs_l16; - const char* _Nonnull docs_strs_l17; - const char* _Nonnull docs_strs_l18; - const char* _Nonnull docs_strs_l19; - const char* _Nonnull docs_strs_l20; - const char* _Nonnull docs_strs_l21; - const char* _Nonnull docs_strs_l22; - const char* _Nonnull or_str; - const char* _Nonnull usage_docstr; + const char* _Nonnull docs_strs_l1; + const char* _Nonnull docs_strs_l2; + const char* _Nonnull docs_strs_l3; + const char* _Nonnull docs_strs_l4; + const char* _Nonnull docs_strs_l5; + const char* _Nonnull docs_strs_l6; + const char* _Nonnull docs_strs_l7; + const char* _Nonnull docs_strs_l8; + const char* _Nonnull docs_strs_l9; + const char* _Nonnull docs_strs_l10; + const char* _Nonnull docs_strs_l11; + const char* _Nonnull docs_strs_l12; + const char* _Nonnull docs_strs_l13; + const char* _Nonnull docs_strs_l14; + const char* _Nonnull docs_strs_l15; + const char* _Nonnull docs_strs_l16; + const char* _Nonnull docs_strs_l17; + const char* _Nonnull docs_strs_l18; + const char* _Nonnull docs_strs_l19; + const char* _Nonnull docs_strs_l20; + const char* _Nonnull docs_strs_l21; + const char* _Nonnull docs_strs_l22; + const char* _Nonnull docs_strs_l23; + const char* _Nonnull docs_strs_l24; + const char* _Nonnull or_str; + const char* _Nonnull usage_docstr; }; /* end of code */ diff --git a/include/PartitionManager/VersionFnVars.h b/include/PartitionManager/VersionFnVars.h index 50fe7b6..e121daa 100755 --- a/include/PartitionManager/VersionFnVars.h +++ b/include/PartitionManager/VersionFnVars.h @@ -7,7 +7,7 @@ * 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 + * 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, @@ -23,12 +23,10 @@ #include /* versioning */ -#define PMT_MAJOR 2 -#define PMT_MINOR 9 -#define PMT_PATCHLEVEL 6 +#define PMT_MAJOR 3 +#define PMT_MINOR 0 +#define PMT_PATCHLEVEL 2 -namespace PartitionManager { - void DisplayVersion(void); -} +namespace PartitionManager { void DisplayVersion(void); } /* end */ diff --git a/include/e2fsprogs/blkid/blkid.h b/include/e2fsprogs/blkid/blkid.h deleted file mode 100755 index 0eb0770..0000000 --- a/include/e2fsprogs/blkid/blkid.h +++ /dev/null @@ -1,496 +0,0 @@ -/* - * blkid.h - Interface for libblkid, a library to identify block devices - * - * Copyright (C) 2001 Andreas Dilger - * Copyright (C) 2003 Theodore Ts'o - * Copyright (C) 2008 Karel Zak - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef _BLKID_BLKID_H -#define _BLKID_BLKID_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * blkid_dev: - * - * The device object keeps information about one device - */ -typedef struct blkid_struct_dev *blkid_dev; - -/** - * blkid_cache: - * - * information about all system devices - */ -typedef struct blkid_struct_cache *blkid_cache; - -/** - * blkid_probe: - * - * low-level probing setting - */ -typedef struct blkid_struct_probe *blkid_probe; - -/** - * blkid_topology: - * - * device topology information - */ -typedef struct blkid_struct_topology *blkid_topology; - -/** - * blkid_partlist - * - * list of all detected partitions and partitions tables - */ -typedef struct blkid_struct_partlist *blkid_partlist; - -/** - * blkid_partition: - * - * information about a partition - */ -typedef struct blkid_struct_partition *blkid_partition; - -/** - * blkid_parttable: - * - * information about a partition table - */ -typedef struct blkid_struct_parttable *blkid_parttable; - -/** - * blkid_loff_t: - * - * 64-bit signed number for offsets and sizes - */ -typedef int64_t blkid_loff_t; - -/** - * blkid_tag_iterate: - * - * tags iterator for high-level (blkid_cache) API - */ -typedef struct blkid_struct_tag_iterate *blkid_tag_iterate; - -/** - * blkid_dev_iterate: - * - * devices iterator for high-level (blkid_cache) API - */ -typedef struct blkid_struct_dev_iterate *blkid_dev_iterate; - -/* - * Flags for blkid_get_dev - * - * BLKID_DEV_CREATE Create an empty device structure if not found - * in the cache. - * BLKID_DEV_VERIFY Make sure the device structure corresponds - * with reality. - * BLKID_DEV_FIND Just look up a device entry, and return NULL - * if it is not found. - * BLKID_DEV_NORMAL Get a valid device structure, either from the - * cache or by probing the device. - */ -#define BLKID_DEV_FIND 0x0000 -#define BLKID_DEV_CREATE 0x0001 -#define BLKID_DEV_VERIFY 0x0002 -#define BLKID_DEV_NORMAL (BLKID_DEV_CREATE | BLKID_DEV_VERIFY) - - -#ifndef __GNUC_PREREQ -# if defined __GNUC__ && defined __GNUC_MINOR__ -# define __GNUC_PREREQ(maj, min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) -# else -# define __GNUC_PREREQ(maj, min) 0 -# endif -#endif - -#ifndef __ul_attribute__ -# if __GNUC_PREREQ (3, 4) -# define __ul_attribute__(_a_) __attribute__(_a_) -# else -# define __ul_attribute__(_a_) -# endif -#endif - -/* init.c */ -extern void blkid_init_debug(int mask); - -/* cache.c */ -extern void blkid_put_cache(blkid_cache cache); -extern int blkid_get_cache(blkid_cache *cache, const char *filename); -extern void blkid_gc_cache(blkid_cache cache); - -/* dev.c */ -extern const char *blkid_dev_devname(blkid_dev dev) - __ul_attribute__((warn_unused_result)); - -extern blkid_dev_iterate blkid_dev_iterate_begin(blkid_cache cache); -extern int blkid_dev_set_search(blkid_dev_iterate iter, - const char *search_type, const char *search_value); -extern int blkid_dev_next(blkid_dev_iterate iterate, blkid_dev *dev); -extern void blkid_dev_iterate_end(blkid_dev_iterate iterate); - -/* devno.c */ -extern char *blkid_devno_to_devname(dev_t devno) - __ul_attribute__((warn_unused_result)); -extern int blkid_devno_to_wholedisk(dev_t dev, char *diskname, - size_t len, dev_t *diskdevno) - __ul_attribute__((warn_unused_result)); - -/* devname.c */ -extern int blkid_probe_all(blkid_cache cache); -extern int blkid_probe_all_new(blkid_cache cache); -extern int blkid_probe_all_removable(blkid_cache cache); - -extern blkid_dev blkid_get_dev(blkid_cache cache, const char *devname, int flags); - -/* getsize.c */ -extern blkid_loff_t blkid_get_dev_size(int fd); - -/* verify.c */ -extern blkid_dev blkid_verify(blkid_cache cache, blkid_dev dev); - -/* read.c */ - -/* resolve.c */ -extern char *blkid_get_tag_value(blkid_cache cache, const char *tagname, - const char *devname) - __ul_attribute__((warn_unused_result)); -extern char *blkid_get_devname(blkid_cache cache, const char *token, - const char *value) - __ul_attribute__((warn_unused_result)); - -/* tag.c */ -extern blkid_tag_iterate blkid_tag_iterate_begin(blkid_dev dev); -extern int blkid_tag_next(blkid_tag_iterate iterate, - const char **type, const char **value); -extern void blkid_tag_iterate_end(blkid_tag_iterate iterate); -extern int blkid_dev_has_tag(blkid_dev dev, const char *type, const char *value); - -extern blkid_dev blkid_find_dev_with_tag(blkid_cache cache, - const char *type, - const char *value); - -extern int blkid_parse_tag_string(const char *token, char **ret_type, char **ret_val); - -/* version.c */ -extern int blkid_parse_version_string(const char *ver_string) - __ul_attribute__((nonnull)); -extern int blkid_get_library_version(const char **ver_string, - const char **date_string); - -/* encode.c */ -extern int blkid_encode_string(const char *str, char *str_enc, size_t len); -extern int blkid_safe_string(const char *str, char *str_safe, size_t len); - -/* evaluate.c */ -extern int blkid_send_uevent(const char *devname, const char *action); -extern char *blkid_evaluate_tag(const char *token, const char *value, - blkid_cache *cache) - __ul_attribute__((warn_unused_result)); -extern char *blkid_evaluate_spec(const char *spec, blkid_cache *cache) - __ul_attribute__((warn_unused_result)); - -/* probe.c */ -extern blkid_probe blkid_new_probe(void) - __ul_attribute__((warn_unused_result)); -extern blkid_probe blkid_new_probe_from_filename(const char *filename) - __ul_attribute__((warn_unused_result)) - __ul_attribute__((nonnull)); -extern void blkid_free_probe(blkid_probe pr); - -extern void blkid_reset_probe(blkid_probe pr); -extern int blkid_probe_reset_buffers(blkid_probe pr); -extern int blkid_probe_hide_range(blkid_probe pr, uint64_t off, uint64_t len); - -extern int blkid_probe_set_device(blkid_probe pr, int fd, - blkid_loff_t off, blkid_loff_t size) - __ul_attribute__((nonnull)); - -extern dev_t blkid_probe_get_devno(blkid_probe pr) - __ul_attribute__((nonnull)); - -extern dev_t blkid_probe_get_wholedisk_devno(blkid_probe pr) - __ul_attribute__((nonnull)); - -extern int blkid_probe_is_wholedisk(blkid_probe pr) - __ul_attribute__((nonnull)); - -extern blkid_loff_t blkid_probe_get_size(blkid_probe pr) - __ul_attribute__((nonnull)); -extern blkid_loff_t blkid_probe_get_offset(blkid_probe pr) - __ul_attribute__((nonnull)); -extern unsigned int blkid_probe_get_sectorsize(blkid_probe pr) - __ul_attribute__((nonnull)); -extern int blkid_probe_set_sectorsize(blkid_probe pr, unsigned int sz) - __ul_attribute__((nonnull)); -extern blkid_loff_t blkid_probe_get_sectors(blkid_probe pr) - __ul_attribute__((nonnull)); - -extern int blkid_probe_get_fd(blkid_probe pr) - __ul_attribute__((nonnull)); - -extern int blkid_probe_set_hint(blkid_probe pr, const char *name, uint64_t value) - __ul_attribute__((nonnull)); -extern void blkid_probe_reset_hints(blkid_probe pr) - __ul_attribute__((nonnull)); - -/* - * superblocks probing - */ -extern int blkid_known_fstype(const char *fstype) - __ul_attribute__((nonnull)); - -extern int blkid_superblocks_get_name(size_t idx, const char **name, int *usage); - -extern int blkid_probe_enable_superblocks(blkid_probe pr, int enable) - __ul_attribute__((nonnull)); - -#define BLKID_SUBLKS_LABEL (1 << 1) /* read LABEL from superblock */ -#define BLKID_SUBLKS_LABELRAW (1 << 2) /* read and define LABEL_RAW result value*/ -#define BLKID_SUBLKS_UUID (1 << 3) /* read UUID from superblock */ -#define BLKID_SUBLKS_UUIDRAW (1 << 4) /* read and define UUID_RAW result value */ -#define BLKID_SUBLKS_TYPE (1 << 5) /* define TYPE result value */ -#define BLKID_SUBLKS_SECTYPE (1 << 6) /* define compatible fs type (second type) */ -#define BLKID_SUBLKS_USAGE (1 << 7) /* define USAGE result value */ -#define BLKID_SUBLKS_VERSION (1 << 8) /* read FS type from superblock */ -#define BLKID_SUBLKS_MAGIC (1 << 9) /* define SBMAGIC and SBMAGIC_OFFSET */ -#define BLKID_SUBLKS_BADCSUM (1 << 10) /* allow a bad checksum */ -#define BLKID_SUBLKS_FSINFO (1 << 11) /* read and define fs properties from superblock */ - -#define BLKID_SUBLKS_DEFAULT (BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | \ - BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE) - -extern int blkid_probe_set_superblocks_flags(blkid_probe pr, int flags) - __ul_attribute__((nonnull)); -extern int blkid_probe_reset_superblocks_filter(blkid_probe pr) - __ul_attribute__((nonnull)); -extern int blkid_probe_invert_superblocks_filter(blkid_probe pr) - __ul_attribute__((nonnull)); - -/** - * BLKID_FLTR_NOTIN - */ -#define BLKID_FLTR_NOTIN 1 -/** - * BLKID_FLTR_ONLYIN - */ -#define BLKID_FLTR_ONLYIN 2 -extern int blkid_probe_filter_superblocks_type(blkid_probe pr, int flag, char *names[]) - __ul_attribute__((nonnull)); - -#define BLKID_USAGE_FILESYSTEM (1 << 1) -#define BLKID_USAGE_RAID (1 << 2) -#define BLKID_USAGE_CRYPTO (1 << 3) -#define BLKID_USAGE_OTHER (1 << 4) -extern int blkid_probe_filter_superblocks_usage(blkid_probe pr, int flag, int usage) - __ul_attribute__((nonnull)); - -/* - * topology probing - */ -extern int blkid_probe_enable_topology(blkid_probe pr, int enable) - __ul_attribute__((nonnull)); - -/* binary interface */ -extern blkid_topology blkid_probe_get_topology(blkid_probe pr) - __ul_attribute__((nonnull)); - -extern unsigned long blkid_topology_get_alignment_offset(blkid_topology tp) - __ul_attribute__((nonnull)); -extern unsigned long blkid_topology_get_minimum_io_size(blkid_topology tp) - __ul_attribute__((nonnull)); -extern unsigned long blkid_topology_get_optimal_io_size(blkid_topology tp) - __ul_attribute__((nonnull)); -extern unsigned long blkid_topology_get_logical_sector_size(blkid_topology tp) - __ul_attribute__((nonnull)); -extern unsigned long blkid_topology_get_physical_sector_size(blkid_topology tp) - __ul_attribute__((nonnull)); -extern unsigned long blkid_topology_get_dax(blkid_topology tp) - __ul_attribute__((nonnull)); -extern uint64_t blkid_topology_get_diskseq(blkid_topology tp) - __ul_attribute__((nonnull)); - -/* - * partitions probing - */ -extern int blkid_known_pttype(const char *pttype); -extern int blkid_partitions_get_name(const size_t idx, const char **name); - -extern int blkid_probe_enable_partitions(blkid_probe pr, int enable) - __ul_attribute__((nonnull)); - -extern int blkid_probe_reset_partitions_filter(blkid_probe pr) - __ul_attribute__((nonnull)); -extern int blkid_probe_invert_partitions_filter(blkid_probe pr) - __ul_attribute__((nonnull)); -extern int blkid_probe_filter_partitions_type(blkid_probe pr, int flag, char *names[]) - __ul_attribute__((nonnull)); - -/* partitions probing flags */ -#define BLKID_PARTS_FORCE_GPT (1 << 1) -#define BLKID_PARTS_ENTRY_DETAILS (1 << 2) -#define BLKID_PARTS_MAGIC (1 << 3) -extern int blkid_probe_set_partitions_flags(blkid_probe pr, int flags) - __ul_attribute__((nonnull)); - -/* binary interface */ -extern blkid_partlist blkid_probe_get_partitions(blkid_probe pr) - __ul_attribute__((nonnull)); - -extern int blkid_partlist_numof_partitions(blkid_partlist ls) - __ul_attribute__((nonnull)); -extern blkid_parttable blkid_partlist_get_table(blkid_partlist ls) - __ul_attribute__((nonnull)); -extern blkid_partition blkid_partlist_get_partition(blkid_partlist ls, int n) - __ul_attribute__((nonnull)); -extern blkid_partition blkid_partlist_get_partition_by_partno(blkid_partlist ls, int n) - __ul_attribute__((nonnull)); -extern blkid_partition blkid_partlist_devno_to_partition(blkid_partlist ls, dev_t devno) - __ul_attribute__((nonnull)); -extern blkid_parttable blkid_partition_get_table(blkid_partition par) - __ul_attribute__((nonnull)); - -extern const char *blkid_partition_get_name(blkid_partition par) - __ul_attribute__((nonnull)); -extern const char *blkid_partition_get_uuid(blkid_partition par) - __ul_attribute__((nonnull)); -extern int blkid_partition_get_partno(blkid_partition par) - __ul_attribute__((nonnull)); -extern blkid_loff_t blkid_partition_get_start(blkid_partition par) - __ul_attribute__((nonnull)); -extern blkid_loff_t blkid_partition_get_size(blkid_partition par) - __ul_attribute__((nonnull)); - -extern int blkid_partition_get_type(blkid_partition par) - __ul_attribute__((nonnull)); -extern const char *blkid_partition_get_type_string(blkid_partition par) - __ul_attribute__((nonnull)); -extern unsigned long long blkid_partition_get_flags(blkid_partition par) - __ul_attribute__((nonnull)); - -extern int blkid_partition_is_logical(blkid_partition par) - __ul_attribute__((nonnull)); -extern int blkid_partition_is_extended(blkid_partition par) - __ul_attribute__((nonnull)); -extern int blkid_partition_is_primary(blkid_partition par) - __ul_attribute__((nonnull)); - -extern const char *blkid_parttable_get_type(blkid_parttable tab) - __ul_attribute__((nonnull)); -extern const char *blkid_parttable_get_id(blkid_parttable tab) - __ul_attribute__((nonnull)); -extern blkid_loff_t blkid_parttable_get_offset(blkid_parttable tab) - __ul_attribute__((nonnull)); -extern blkid_partition blkid_parttable_get_parent(blkid_parttable tab) - __ul_attribute__((nonnull)); - -/* - * NAME=value low-level interface - */ -extern int blkid_do_probe(blkid_probe pr) - __ul_attribute__((nonnull)); -extern int blkid_do_safeprobe(blkid_probe pr) - __ul_attribute__((nonnull)); -extern int blkid_do_fullprobe(blkid_probe pr) - __ul_attribute__((nonnull)); - -/** - * BLKID_PROBE_OK: - * - * probing return value; superblock (RAID, partiton table, ...) succesfully detected - */ -#define BLKID_PROBE_OK 0 -/** - * BLKID_PROBE_NONE: - * - * probing return value; found nothing - */ -#define BLKID_PROBE_NONE 1 -/** - * BLKID_PROBE_ERROR: - * - * probing return value; probing ends with en error (see errno for more details) - */ -#define BLKID_PROBE_ERROR -1 -/** - * BLKID_PROBE_AMBIGUOUS: - * - * probing return value; more than one probing result, in this case, it's not - * safe to use the device automaticaly and user intervention is recommended - */ -#define BLKID_PROBE_AMBIGUOUS -2 - -extern int blkid_probe_numof_values(blkid_probe pr) - __ul_attribute__((nonnull)); -extern int blkid_probe_get_value(blkid_probe pr, int num, const char **name, - const char **data, size_t *len) - __ul_attribute__((nonnull(1))); -extern int blkid_probe_lookup_value(blkid_probe pr, const char *name, - const char **data, size_t *len) - __ul_attribute__((nonnull(1, 2))); -extern int blkid_probe_has_value(blkid_probe pr, const char *name) - __ul_attribute__((nonnull)); -extern int blkid_do_wipe(blkid_probe pr, int dryrun) - __ul_attribute__((nonnull)); -extern int blkid_probe_step_back(blkid_probe pr) - __ul_attribute__((nonnull)); - -/* - * Deprecated functions/macros - */ -#ifndef BLKID_DISABLE_DEPRECATED - -#define BLKID_PROBREQ_LABEL BLKID_SUBLKS_LABEL -#define BLKID_PROBREQ_LABELRAW BLKID_SUBLKS_LABELRAW -#define BLKID_PROBREQ_UUID BLKID_SUBLKS_UUID -#define BLKID_PROBREQ_UUIDRAW BLKID_SUBLKS_UUIDRAW -#define BLKID_PROBREQ_TYPE BLKID_SUBLKS_TYPE -#define BLKID_PROBREQ_SECTYPE BLKID_SUBLKS_SECTYPE -#define BLKID_PROBREQ_USAGE BLKID_SUBLKS_USAGE -#define BLKID_PROBREQ_VERSION BLKID_SUBLKS_VERSION - -extern int blkid_probe_set_request(blkid_probe pr, int flags) - __ul_attribute__((deprecated)); - -extern int blkid_probe_filter_usage(blkid_probe pr, int flag, int usage) - __ul_attribute__((deprecated)); - -extern int blkid_probe_filter_types(blkid_probe pr, int flag, char *names[]) - __ul_attribute__((deprecated)); - -extern int blkid_probe_invert_filter(blkid_probe pr) - __ul_attribute__((deprecated)); - -extern int blkid_probe_reset_filter(blkid_probe pr) - __ul_attribute__((deprecated)); - -#endif /* BLKID_DISABLE_DEPRECATED */ - -#ifdef __cplusplus -} -#endif - -#endif /* _BLKID_BLKID_H */ diff --git a/include/e2fsprogs/blkid/blkid_local.h b/include/e2fsprogs/blkid/blkid_local.h index 7a20ef8..81f3098 100755 --- a/include/e2fsprogs/blkid/blkid_local.h +++ b/include/e2fsprogs/blkid/blkid_local.h @@ -20,8 +20,8 @@ extern "C" { #endif -#define BLKID_VERSION "2.40.2" -#define BLKID_DATE "04-Jul-2024" +#define BLKID_VERSION "1.0.0" +#define BLKID_DATE "12-Feb-2003" typedef struct blkid_struct_dev *blkid_dev; typedef struct blkid_struct_cache *blkid_cache; diff --git a/include/libcharset/config.h b/include/libcharset/config.h new file mode 100755 index 0000000..fe7f108 --- /dev/null +++ b/include/libcharset/config.h @@ -0,0 +1,186 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if the package shall run at any location in the file system. */ +/* #undef ENABLE_RELOCATABLE */ + +/* Define to 1 if you have the `copy_file_range' function. */ +/* #undef HAVE_COPY_FILE_RANGE */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define if you have and nl_langinfo(CODESET). */ +#define HAVE_LANGINFO_CODESET 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MACH_O_DYLD_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MINIX_CONFIG_H */ + +/* Define to 1 if you have the `setlocale' function. */ +#define HAVE_SETLOCALE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `symlink' function. */ +#define HAVE_SYMLINK 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#define HAVE_VISIBILITY 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_WCHAR_H 1 + +/* Define to 1 if O_NOATIME works. */ +#define HAVE_WORKING_O_NOATIME 0 + +/* Define to 1 if O_NOFOLLOW works. */ +#define HAVE_WORKING_O_NOFOLLOW 0 + +/* Define to 1 if you have the `_NSGetExecutablePath' function. */ +/* #undef HAVE__NSGETEXECUTABLEPATH */ + +/* Define to the value of ${prefix}, as a string. */ +#define INSTALLPREFIX "/usr/local" + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libcharset" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libcharset 1.5" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libcharset" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.5" + +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#define STDC_HEADERS 1 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# define _DARWIN_C_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# define _HPUX_ALT_XOPEN_SOCKET_API 1 +#endif +/* Identify the host operating system as Minix. + This macro does not affect the system headers' behavior. + A future release of Autoconf may stop defining this macro. */ +#ifndef _MINIX +/* # undef _MINIX */ +#endif +/* Enable general extensions on NetBSD. + Enable NetBSD compatibility extensions on Minix. */ +#ifndef _NETBSD_SOURCE +# define _NETBSD_SOURCE 1 +#endif +/* Enable OpenBSD compatibility extensions on NetBSD. + Oddly enough, this does nothing on OpenBSD. */ +#ifndef _OPENBSD_SOURCE +# define _OPENBSD_SOURCE 1 +#endif +/* Define to 1 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_SOURCE +/* # undef _POSIX_SOURCE */ +#endif +/* Define to 2 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_1_SOURCE +/* # undef _POSIX_1_SOURCE */ +#endif +/* Enable POSIX-compatible threading on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# define __STDC_WANT_LIB_EXT2__ 1 +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable X/Open extensions. Define to 500 only if necessary + to make mbstate_t available. */ +#ifndef _XOPEN_SOURCE +/* # undef _XOPEN_SOURCE */ +#endif + diff --git a/include/libcharset/export.h b/include/libcharset/export.h new file mode 100755 index 0000000..413f3ae --- /dev/null +++ b/include/libcharset/export.h @@ -0,0 +1,8 @@ + +#if @HAVE_VISIBILITY@ && BUILDING_LIBCHARSET +#define LIBCHARSET_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_LIBCHARSET +#define LIBCHARSET_DLL_EXPORTED __declspec(dllexport) +#else +#define LIBCHARSET_DLL_EXPORTED +#endif diff --git a/include/libcharset/libcharset.h b/include/libcharset/libcharset.h new file mode 100755 index 0000000..39cd877 --- /dev/null +++ b/include/libcharset/libcharset.h @@ -0,0 +1,53 @@ +/* Copyright (C) 2003 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + The GNU CHARSET Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU CHARSET Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with the GNU CHARSET Library; see the file COPYING.LIB. If not, + see . */ + +#ifndef _LIBCHARSET_H +#define _LIBCHARSET_H + +#if 1 && BUILDING_LIBCHARSET +#define LIBCHARSET_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_LIBCHARSET +#define LIBCHARSET_DLL_EXPORTED __declspec(dllexport) +#else +#define LIBCHARSET_DLL_EXPORTED +#endif + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Support for relocatable packages. */ + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +extern LIBCHARSET_DLL_EXPORTED void libcharset_set_relocation_prefix (const char *orig_prefix, + const char *curr_prefix); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LIBCHARSET_H */ diff --git a/include/libcharset/localcharset.h b/include/libcharset/localcharset.h new file mode 100755 index 0000000..58d3e6a --- /dev/null +++ b/include/libcharset/localcharset.h @@ -0,0 +1,145 @@ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2, 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . */ + +#ifndef _LOCALCHARSET_H +#define _LOCALCHARSET_H + +#if 1 && BUILDING_LIBCHARSET +#define LIBCHARSET_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_LIBCHARSET +#define LIBCHARSET_DLL_EXPORTED __declspec(dllexport) +#else +#define LIBCHARSET_DLL_EXPORTED +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. + If the canonical name cannot be determined, the result is a non-canonical + name. */ +extern LIBCHARSET_DLL_EXPORTED const char * locale_charset (void); + +/* About GNU canonical names for character encodings: + + Every canonical name must be supported by GNU libiconv. Support by GNU libc + is also desirable. + + The name is case insensitive. Usually an upper case MIME charset name is + preferred. + + The current list of these GNU canonical names is: + + name MIME? used by which systems + (darwin = Mac OS X, windows = native Windows) + + ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin + ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-3 Y glibc solaris cygwin + ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin + ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-6 Y glibc aix hpux solaris cygwin + ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos + ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos + ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-14 glibc cygwin + ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin + KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin + KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin + KOI8-T glibc + CP437 dos + CP775 dos + CP850 aix osf dos + CP852 dos + CP855 dos + CP856 aix + CP857 dos + CP861 dos + CP862 dos + CP864 dos + CP865 dos + CP866 freebsd netbsd openbsd darwin dos + CP869 dos + CP874 windows dos + CP922 aix + CP932 aix cygwin windows dos + CP943 aix zos + CP949 osf darwin windows dos + CP950 windows dos + CP1046 aix + CP1124 aix + CP1125 dos + CP1129 aix + CP1131 freebsd darwin + CP1250 windows + CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows + CP1252 aix windows + CP1253 windows + CP1254 windows + CP1255 glibc windows + CP1256 windows + CP1257 windows + GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos + EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin + EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos + EUC-TW glibc aix hpux irix osf solaris netbsd + BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos + BIG5-HKSCS glibc hpux solaris netbsd darwin + GBK glibc aix osf solaris freebsd darwin cygwin windows dos + GB18030 glibc hpux solaris freebsd netbsd darwin + SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin + JOHAB glibc solaris windows + TIS-620 glibc aix hpux osf solaris cygwin zos + VISCII Y glibc + TCVN5712-1 glibc + ARMSCII-8 glibc freebsd netbsd darwin + GEORGIAN-PS glibc cygwin + PT154 glibc netbsd cygwin + HP-ROMAN8 hpux + HP-ARABIC8 hpux + HP-GREEK8 hpux + HP-HEBREW8 hpux + HP-TURKISH8 hpux + HP-KANA8 hpux + DEC-KANJI osf + DEC-HANYU osf + UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos + + Note: Names which are not marked as being a MIME name should not be used in + Internet protocols for information interchange (mail, news, etc.). + + Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications + must understand both names and treat them as equivalent. + */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/include/libgnulib/Makefile b/include/libgnulib/Makefile new file mode 100755 index 0000000..2e10203 --- /dev/null +++ b/include/libgnulib/Makefile @@ -0,0 +1,6 @@ +# Run "make check" to ensure that the code passes some simple tests, +# usually (always?) not involving compilation. +all: + +check: + ./t-idcache diff --git a/include/libgnulib/README b/include/libgnulib/README new file mode 100755 index 0000000..100b99d --- /dev/null +++ b/include/libgnulib/README @@ -0,0 +1,3 @@ +The files in this directory are used in many GNU packages, +including coreutils, diffutils, and tar. +The autoconf tests required for these files are in ../m4. diff --git a/include/libgnulib/_Noreturn.h b/include/libgnulib/_Noreturn.h new file mode 100755 index 0000000..9806f2b --- /dev/null +++ b/include/libgnulib/_Noreturn.h @@ -0,0 +1,50 @@ +/* A C macro for declaring that a function does not return. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif (defined __clang__ && __clang_major__ < 16 \ + && defined _GL_WORK_AROUND_LLVM_BUG_59792) + /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around + that rare LLVM bug, though you may get many false-alarm warnings. */ +# define _Noreturn +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || (!defined __STRICT_ANSI__ \ + && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __clang__ \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))))) + /* _Noreturn works as-is. */ +# elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ + || 0x5110 <= __SUNPRO_C) +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif diff --git a/include/libgnulib/acl-internal.h b/include/libgnulib/acl-internal.h new file mode 100755 index 0000000..ef1f84d --- /dev/null +++ b/include/libgnulib/acl-internal.h @@ -0,0 +1,300 @@ +/* Internal implementation of access control lists. -*- coding: utf-8 -*- + + Copyright (C) 2002-2003, 2005-2024 Free Software Foundation, Inc. + + 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 3 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, see . + + Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "acl.h" + +#include + +/* All systems define the ACL related API in . */ +#if HAVE_SYS_ACL_H +# include +#endif +#if defined HAVE_FACL && ! defined GETACLCNT && defined ACL_CNT +# define GETACLCNT ACL_CNT +#endif + +/* On Linux and Cygwin >= 2.5, additional ACL related API is available in + . */ +#ifdef HAVE_ACL_LIBACL_H +# include +#endif + +/* On HP-UX >= 11.11, additional ACL API is available in . */ +#if HAVE_ACLV_H +# include +# include +/* HP-UX 11.11 lacks these declarations. */ +extern int acl (char *, int, int, struct acl *); +extern int aclsort (int, int, struct acl *); +#endif + +#include + +#include + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +#ifndef HAVE_FCHMOD +# define HAVE_FCHMOD false +# define fchmod(fd, mode) (-1) +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef ACL_INTERNAL_INLINE +# define ACL_INTERNAL_INLINE _GL_INLINE +#endif + +#if USE_ACL + +# if HAVE_ACL_GET_FILE +/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ +/* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ + +# ifndef MIN_ACL_ENTRIES +# define MIN_ACL_ENTRIES 4 +# endif + +/* POSIX 1003.1e (draft 17) */ +# ifdef HAVE_ACL_GET_FD +/* Most platforms have a 1-argument acl_get_fd, only OSF/1 has a 2-argument + macro(!). */ +# if HAVE_ACL_FREE_TEXT /* OSF/1 */ +ACL_INTERNAL_INLINE acl_t +rpl_acl_get_fd (int fd) +{ + return acl_get_fd (fd, ACL_TYPE_ACCESS); +} +# undef acl_get_fd +# define acl_get_fd rpl_acl_get_fd +# endif +# else +# define HAVE_ACL_GET_FD false +# undef acl_get_fd +# define acl_get_fd(fd) (NULL) +# endif + +/* POSIX 1003.1e (draft 17) */ +# ifdef HAVE_ACL_SET_FD +/* Most platforms have a 2-argument acl_set_fd, only OSF/1 has a 3-argument + macro(!). */ +# if HAVE_ACL_FREE_TEXT /* OSF/1 */ +ACL_INTERNAL_INLINE int +rpl_acl_set_fd (int fd, acl_t acl) +{ + return acl_set_fd (fd, ACL_TYPE_ACCESS, acl); +} +# undef acl_set_fd +# define acl_set_fd rpl_acl_set_fd +# endif +# else +# define HAVE_ACL_SET_FD false +# undef acl_set_fd +# define acl_set_fd(fd, acl) (-1) +# endif + +/* POSIX 1003.1e (draft 13) */ +# if ! HAVE_ACL_FREE_TEXT +# define acl_free_text(buf) acl_free (buf) +# endif + +/* Linux-specific */ +/* Cygwin >= 2.5 implements this function, but it returns 1 for all + directories, thus is unusable. */ +# if !defined HAVE_ACL_EXTENDED_FILE || defined __CYGWIN__ +# undef HAVE_ACL_EXTENDED_FILE +# define HAVE_ACL_EXTENDED_FILE false +# define acl_extended_file(name) (-1) +# endif + +# if ! defined HAVE_ACL_FROM_MODE && ! defined HAVE_ACL_FROM_TEXT +# define acl_from_mode (NULL) +# endif + +/* Set to 0 if a file's mode is stored independently from the ACL. */ +# if (HAVE_ACL_COPY_EXT_NATIVE && HAVE_ACL_CREATE_ENTRY_NP) || defined __sgi /* Mac OS X, IRIX */ +# define MODE_INSIDE_ACL 0 +# endif + +/* Return the number of entries in ACL. + Return -1 and set errno upon failure to determine it. */ +/* Define a replacement for acl_entries if needed. (Only Linux has it.) */ +# if !HAVE_ACL_ENTRIES +# define acl_entries rpl_acl_entries +extern int acl_entries (acl_t); +# endif + +# if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ +/* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. + Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial. */ +extern int acl_extended_nontrivial (acl_t); +# else +/* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS. + Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. + Return -1 and set errno upon failure to determine it. */ +extern int acl_access_nontrivial (acl_t); + +/* ACL is an ACL, from a file, stored as type ACL_TYPE_DEFAULT. + Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. + Return -1 and set errno upon failure to determine it. */ +extern int acl_default_nontrivial (acl_t); +# endif + +# elif HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ + +/* Set to 0 if a file's mode is stored independently from the ACL. */ +# if defined __CYGWIN__ /* Cygwin */ +# define MODE_INSIDE_ACL 0 +# endif + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_nontrivial (int count, aclent_t *entries) _GL_ATTRIBUTE_PURE; + +# ifdef ACE_GETACL /* Solaris 10 */ + +/* Test an ACL retrieved with ACE_GETACL. + Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_ace_nontrivial (int count, ace_t *entries) _GL_ATTRIBUTE_PURE; + +/* Definitions for when the built executable is executed on Solaris 10 + (newer version) or Solaris 11. */ +/* For a_type. */ +# define OLD_ALLOW 0 +# define OLD_DENY 1 +# define NEW_ACE_ACCESS_ALLOWED_ACE_TYPE 0 /* replaces ALLOW */ +# define NEW_ACE_ACCESS_DENIED_ACE_TYPE 1 /* replaces DENY */ +/* For a_flags. */ +# define OLD_ACE_OWNER 0x0100 +# define OLD_ACE_GROUP 0x0200 +# define OLD_ACE_OTHER 0x0400 +# define NEW_ACE_OWNER 0x1000 +# define NEW_ACE_GROUP 0x2000 +# define NEW_ACE_IDENTIFIER_GROUP 0x0040 +# define NEW_ACE_EVERYONE 0x4000 +/* For a_access_mask. */ +# define NEW_ACE_READ_DATA 0x001 /* corresponds to 'r' */ +# define NEW_ACE_WRITE_DATA 0x002 /* corresponds to 'w' */ +# define NEW_ACE_APPEND_DATA 0x004 +# define NEW_ACE_READ_NAMED_ATTRS 0x008 +# define NEW_ACE_WRITE_NAMED_ATTRS 0x010 +# define NEW_ACE_EXECUTE 0x020 +# define NEW_ACE_DELETE_CHILD 0x040 +# define NEW_ACE_READ_ATTRIBUTES 0x080 +# define NEW_ACE_WRITE_ATTRIBUTES 0x100 +# define NEW_ACE_DELETE 0x10000 +# define NEW_ACE_READ_ACL 0x20000 +# define NEW_ACE_WRITE_ACL 0x40000 +# define NEW_ACE_WRITE_OWNER 0x80000 +# define NEW_ACE_SYNCHRONIZE 0x100000 + +# endif + +# elif HAVE_GETACL /* HP-UX */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_nontrivial (int count, struct acl_entry *entries); + +# if HAVE_ACLV_H /* HP-UX >= 11.11 */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int aclv_nontrivial (int count, struct acl *entries); + +# endif + +# elif HAVE_ACLX_GET && 0 /* AIX */ + +/* TODO */ + +# elif HAVE_STATACL /* older AIX */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_nontrivial (struct acl *a); + +# elif HAVE_ACLSORT /* NonStop Kernel */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_nontrivial (int count, struct acl *entries); + +# endif + +/* Set to 1 if a file's mode is implicit by the ACL. */ +# ifndef MODE_INSIDE_ACL +# define MODE_INSIDE_ACL 1 +# endif + +#endif + +struct permission_context { + mode_t mode; +#if USE_ACL +# if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ + acl_t acl; +# if !HAVE_ACL_TYPE_EXTENDED + acl_t default_acl; +# endif + bool acls_not_supported; + +# elif defined GETACL /* Solaris, Cygwin < 2.5 */ + int count; + aclent_t *entries; +# ifdef ACE_GETACL + int ace_count; + ace_t *ace_entries; +# endif + +# elif HAVE_GETACL /* HP-UX */ + struct acl_entry entries[NACLENTRIES]; + int count; +# if HAVE_ACLV_H + struct acl aclv_entries[NACLVENTRIES]; + int aclv_count; +# endif + +# elif HAVE_STATACL /* older AIX */ + union { struct acl a; char room[4096]; } u; + bool have_u; + +# elif HAVE_ACLSORT /* NonStop Kernel */ + struct acl entries[NACLENTRIES]; + int count; + +# endif +#endif +}; + +int get_permissions (const char *, int, mode_t, struct permission_context *); +int set_permissions (struct permission_context *, const char *, int); +void free_permission_context (struct permission_context *); + +_GL_INLINE_HEADER_END diff --git a/include/libgnulib/acl.h b/include/libgnulib/acl.h new file mode 100755 index 0000000..68a421a --- /dev/null +++ b/include/libgnulib/acl.h @@ -0,0 +1,114 @@ +/* acl.c - access control lists + + Copyright (C) 2002, 2008-2024 Free Software Foundation, Inc. + + 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 3 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, see . + + Written by Paul Eggert. */ + +#ifndef _GL_ACL_H +#define _GL_ACL_H 1 + +/* This file uses _GL_ATTRIBUTE_CONST, _GL_ATTRIBUTE_DEPRECATED. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Follow symlinks when getting an ACL. This is a bitmask that is guaranteed + not to collide with any DT_* or _GL_DT_* value. */ +enum { ACL_SYMLINK_FOLLOW = 0x10000 }; + +/* Information about an ACL. */ +struct aclinfo +{ + /* If 'size' is nonnegative, a buffer holding the concatenation + of extended attribute names, each terminated by NUL + (either u.__gl_acl_ch, or heap-allocated). */ + char *buf; + + /* The number of useful bytes at the start of buf, counting trailing NULs. + If negative, there was an error in getting the ACL info, + and u.err is the corresponding errno. */ + ssize_t size; + + /* The allocated size of buf. This is sizeof u.__gl_acl_ch if the + buffer is not heap-allocated, and is larger otherwise. + For internal use only. */ + ssize_t __gl_acl_alloc; + + /* Security context string. Do not modify its contents. */ + char *scontext; + /* Security context errno value. It is zero if there was no + error getting the security context. When nonzero, scontext is "?". */ + int scontext_err; + + union + { + /* An errno value, when there was an error getting the ACL info. */ + int err; + + /* A small array of char, big enough for most listxattr results. + The size is somewhat arbitrary; it equals the max length of a + trivial NFSv4 ACL (a size used by file-has-acl.c in 2023-2024 + but no longer relevant now), and a different value might be + better once experience is gained. For internal use only. */ + char __gl_acl_ch[152]; + } u; +}; + +bool acl_errno_valid (int) _GL_ATTRIBUTE_CONST; +int file_has_acl (char const *, struct stat const *); +int file_has_aclinfo (char const *restrict, struct aclinfo *restrict, int); + +#if USE_ACL && HAVE_LINUX_XATTR_H && HAVE_LISTXATTR +bool aclinfo_has_xattr (struct aclinfo const *, char const *) + _GL_ATTRIBUTE_PURE; +void aclinfo_free (struct aclinfo *); +#else +# define aclinfo_has_xattr(ai, xattr) false +# define aclinfo_free(ai) ((void) 0) +#endif +#if (USE_ACL && HAVE_LINUX_XATTR_H && HAVE_LISTXATTR \ + && (HAVE_SMACK || USE_SELINUX_SELINUX_H)) +void aclinfo_scontext_free (char *); +#else +# define aclinfo_scontext_free(s) ((void) 0) +#endif + +int qset_acl (char const *, int, mode_t); +int xset_acl (char const *, int, mode_t); +/* Old name of xset_acl. */ +_GL_ATTRIBUTE_DEPRECATED int set_acl (char const *, int, mode_t); + +int qcopy_acl (char const *, int, char const *, int, mode_t); +int xcopy_acl (char const *, int, char const *, int, mode_t); +/* Old name of xcopy_acl. */ +_GL_ATTRIBUTE_DEPRECATED int copy_acl (char const *, int, char const *, int, + mode_t); + +int chmod_or_fchmod (char const *, int, mode_t); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/af_alg.h b/include/libgnulib/af_alg.h new file mode 100755 index 0000000..ed933e1 --- /dev/null +++ b/include/libgnulib/af_alg.h @@ -0,0 +1,115 @@ +/* af_alg.h - Compute message digests from file streams and buffers. + Copyright (C) 2018-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Matteo Croce , 2018. + Documentation by Bruno Haible , 2018. */ + +/* Declare specific functions for computing message digests + using the Linux kernel crypto API, if available. This kernel API gives + access to specialized crypto instructions (that would also be available + in user space) or to crypto devices (not directly available in user space). + + For a more complete set of facilities that use the Linux kernel crypto API, + look at libkcapi. */ + +#ifndef AF_ALG_H +# define AF_ALG_H 1 + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# if USE_LINUX_CRYPTO_API + +/* Compute a message digest of a memory region. + + The memory region starts at BUFFER and is LEN bytes long. + + ALG is the message digest algorithm; see the file /proc/crypto. + + RESBLOCK points to a block of HASHLEN bytes, for the result. + HASHLEN must be the length of the message digest, in bytes, in particular: + + alg | hashlen + -------+-------- + md5 | 16 + sha1 | 20 + sha224 | 28 + sha256 | 32 + sha384 | 48 + sha512 | 64 + + If successful, fill RESBLOCK and return 0. + Upon failure, return a negated error number. */ +int +afalg_buffer (const char *buffer, size_t len, const char *alg, + void *resblock, ssize_t hashlen); + +/* Compute a message digest of data read from STREAM. + + STREAM is an open file stream. The last operation on STREAM should + not be 'ungetc', and if STREAM is also open for writing it should + have been fflushed since its last write. Read from the current + position to the end of STREAM. Handle regular files efficiently. + + ALG is the message digest algorithm; see the file /proc/crypto. + + RESBLOCK points to a block of HASHLEN bytes, for the result. + HASHLEN must be the length of the message digest, in bytes, in particular: + + alg | hashlen + -------+-------- + md5 | 16 + sha1 | 20 + sha224 | 28 + sha256 | 32 + sha384 | 48 + sha512 | 64 + + If successful, fill RESBLOCK and return 0. + Upon failure, return a negated error number. + Unless returning 0 or -EIO, restore STREAM's file position so that + the caller can fall back on some other method. */ +int +afalg_stream (FILE *stream, const char *alg, + void *resblock, ssize_t hashlen); + +# else + +static inline int +afalg_buffer (const char *buffer, size_t len, const char *alg, + void *resblock, ssize_t hashlen) +{ + return -EAFNOSUPPORT; +} + +static inline int +afalg_stream (FILE *stream, const char *alg, + void *resblock, ssize_t hashlen) +{ + return -EAFNOSUPPORT; +} + +# endif + +# ifdef __cplusplus +} +# endif + +#endif /* AF_ALG_H */ diff --git a/include/libgnulib/alignalloc.h b/include/libgnulib/alignalloc.h new file mode 100755 index 0000000..0c73bfc --- /dev/null +++ b/include/libgnulib/alignalloc.h @@ -0,0 +1,133 @@ +/* aligned memory allocation + + Copyright 2022-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef ALIGNALLOC_H_ +#define ALIGNALLOC_H_ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_ALLOC_SIZE, + _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL, HAVE_POSIX_MEMALIGN. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include "idx.h" +#if defined __CHERI_PURE_CAPABILITY__ +# include +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef ALIGNALLOC_INLINE +# define ALIGNALLOC_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Whether aligned_alloc supports any power-of-two alignment, + returns a nonnull pointer for size-zero allocations, + and sets errno on failure. */ +#if 2 < __GLIBC__ + (16 <= __GLIBC_MINOR__) +# define ALIGNALLOC_VIA_ALIGNED_ALLOC 1 +#else +# define ALIGNALLOC_VIA_ALIGNED_ALLOC 0 +#endif + +/* Work around AddressSanitizer bug. + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104262 + https://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20220124/1001910.html + */ +#ifdef __SANITIZE_ADDRESS__ +# undef ALIGNALLOC_VIA_ALIGNED_ALLOC +# define ALIGNALLOC_VIA_ALIGNED_ALLOC 0 +#endif +#ifdef __has_feature +# if __has_feature (address_sanitizer) +# undef ALIGNALLOC_VIA_ALIGNED_ALLOC +# define ALIGNALLOC_VIA_ALIGNED_ALLOC 0 +# endif +#endif + +#if ALIGNALLOC_VIA_ALIGNED_ALLOC || HAVE_POSIX_MEMALIGN + +/* Free storage allocated via alignalloc. Do nothing if PTR is null. */ + +ALIGNALLOC_INLINE void +alignfree (void *ptr) +{ + free (ptr); +} + +/* Return an ALIGNMENT-aligned pointer to new storage of size SIZE, + or a null pointer (setting errno) if memory is exhausted. + ALIGNMENT must be a power of two. + If SIZE is zero, on success return a unique pointer each time. + To free storage later, call alignfree. */ + +ALIGNALLOC_INLINE +_GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((2)) +/* _GL_ATTRIBUTE_DEALLOC (alignfree, 1) */ +void * +alignalloc (idx_t alignment, idx_t size) +{ + if ((size_t) -1 < alignment) + alignment = (size_t) -1; + if ((size_t) -1 < size) + size = (size_t) -1; + +# if ALIGNALLOC_VIA_ALIGNED_ALLOC + return aligned_alloc (alignment, size); +# else + void *ptr = NULL; + if (alignment < sizeof (void *)) + alignment = sizeof (void *); + errno = posix_memalign (&ptr, alignment, size | !size); +# if defined __CHERI_PURE_CAPABILITY__ + if (ptr != NULL) + ptr = cheri_bounds_set (ptr, size); +# endif + return ptr; +# endif +} + +#else /* ! (ALIGNALLOC_VIA_ALIGNED_ALLOC || HAVE_POSIX_MEMALIGN) */ + +void alignfree (void *); +void *alignalloc (idx_t, idx_t) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((2)) + _GL_ATTRIBUTE_DEALLOC (alignfree, 1); + +#endif + +/* Like alignalloc, but die instead of returning a null pointer. */ +void *xalignalloc (idx_t, idx_t) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((2)) + _GL_ATTRIBUTE_RETURNS_NONNULL /* _GL_ATTRIBUTE_DEALLOC (alignfree, 1) */; + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* !ALIGNALLOC_H_ */ diff --git a/include/libgnulib/aligned-malloc.h b/include/libgnulib/aligned-malloc.h new file mode 100755 index 0000000..87d1ec1 --- /dev/null +++ b/include/libgnulib/aligned-malloc.h @@ -0,0 +1,197 @@ +/* Allocate memory with indefinite extent and specified alignment. + + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +/* Before including this file, you need to define the following macro: + + ALIGNMENT A constant expression that evaluates to the desired alignment + (a power of 2). + + And you also need to #include and . */ + +/* aligned_malloc allocates a block of memory of SIZE bytes, aligned on a + boundary of ALIGNMENT bytes. + The block can be freed through aligned_free(), NOT through free(). + Upon failure, it returns NULL. */ + +/* This module exists instead of a posix_memalign(), aligned_alloc(), or + memalign() emulation, because we can't reasonably emulate posix_memalign(), + aligned_alloc(), or memalign(): + If malloc() returned p, only free (p) is allowed, not free (p + 1), + free (p + 2), free (p + 4), free (p + 8), or similar. + + We can use posix_memalign(), a POSIX function. + + We can also use aligned_alloc(), an ISO C11 and POSIX function. But it's + a bit more awkward to use. + + On older systems, we can alternatively use memalign() instead. In the + Solaris documentation of memalign() it is not specified how a memory block + returned by memalign() can be freed, but it actually can be freed with + free(). */ + +/* This file uses MALLOC_ALIGNMENT, HAVE_POSIX_MEMALIGN, HAVE_ALIGNED_ALLOC, + HAVE_MEMALIGN. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#if !defined ALIGNMENT +# error "ALIGNMENT is not defined" +#endif +#if !((ALIGNMENT) > 0 && ((ALIGNMENT) & ((ALIGNMENT) - 1)) == 0) +# error "ALIGNMENT is not a power of 2" +#endif +#if ((ALIGNMENT) <= MALLOC_ALIGNMENT) || HAVE_POSIX_MEMALIGN || HAVE_ALIGNED_ALLOC || HAVE_MEMALIGN + +# if defined aligned_free || (__GNUC__ >= 11 && !defined __clang__) + /* The caller wants an inline function, not a macro, + or we can use GCC's -Wmismatched-dealloc warning. */ +static inline void +aligned_free (void *q) +{ + free (q); +} +# else +# define aligned_free free +# endif + +# if (ALIGNMENT) <= MALLOC_ALIGNMENT +/* Simply use malloc. */ + +# if defined aligned_malloc || (__GNUC__ >= 11 && !defined __clang__) + /* The caller wants an inline function, not a macro, + or GCC's -Wmismatched-dealloc warning might be in effect. */ +static inline +/*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ +void * +aligned_malloc (size_t size) +{ + return malloc (size); +} +# else +# define aligned_malloc malloc +# endif + +# elif HAVE_POSIX_MEMALIGN +/* Use posix_memalign. + This is OK since ALIGNMENT > MALLOC_ALIGNMENT >= sizeof (void *). */ + +static inline +/*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ +void * +aligned_malloc (size_t size) +{ + void *p; + int ret = posix_memalign (&p, (ALIGNMENT), size); + if (ret == 0) + return p; + else + return NULL; +} + +# elif HAVE_ALIGNED_ALLOC +/* Use aligned_alloc. */ + +static inline +/*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ +void * +aligned_malloc (size_t size) +{ + /* Round up SIZE to the next multiple of ALIGNMENT, + namely (SIZE + ALIGNMENT - 1) & ~(ALIGNMENT - 1). */ + size += (ALIGNMENT) - 1; + if (size >= (ALIGNMENT) - 1) /* no overflow? */ + { + size &= ~(size_t)((ALIGNMENT) - 1); + return aligned_alloc ((ALIGNMENT), size); + } + return NULL; +} + +# elif HAVE_MEMALIGN /* HP-UX, IRIX, Solaris <= 10 */ +/* Use memalign. */ + +static inline +/*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ +void * +aligned_malloc (size_t size) +{ + return memalign ((ALIGNMENT), size); +} + +# endif + +#else +/* Use malloc and waste a bit of memory. */ + +static inline void +aligned_free (void *q) +{ + if (q != NULL) + { + if ((uintptr_t) q & ((ALIGNMENT) - 1)) + /* Argument not aligned as expected. */ + abort (); + else + { + void *p = ((void **) q)[-1]; + if (!((uintptr_t) p <= (uintptr_t) q + && (uintptr_t) q - (uintptr_t) p >= MALLOC_ALIGNMENT + && (uintptr_t) q - (uintptr_t) p <= (ALIGNMENT))) + abort (); + free (p); + } + } +} + +static inline +/*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ +void * +aligned_malloc (size_t size) +{ + size += (ALIGNMENT); + if (size >= (ALIGNMENT)) /* no overflow? */ + { + void *p = malloc (size); + if (p != NULL) + { + /* Go to the next multiple of ALIGNMENT. */ + void *q = + (void *) (((uintptr_t) p + (ALIGNMENT)) & -(intptr_t)(ALIGNMENT)); + /* Now q - p <= ALIGNMENT and + q - p >= MALLOC_ALIGNMENT >= sizeof (void *). + This is enough to store a back pointer to p. */ + ((void **) q)[-1] = p; + return q; + } + } + return NULL; +} + +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/alignof.h b/include/libgnulib/alignof.h new file mode 100755 index 0000000..581aaee --- /dev/null +++ b/include/libgnulib/alignof.h @@ -0,0 +1,56 @@ +/* Determine alignment of types. + Copyright (C) 2003-2004, 2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _ALIGNOF_H +#define _ALIGNOF_H + +/* This file uses alignof. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* alignof_slot (TYPE) + Determine the alignment of a structure slot (field) of a given type, + at compile time. Note that the result depends on the ABI. + This is the same as alignof (TYPE). + Note: The result cannot be used as a value for an 'enum' constant, + due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */ +#if defined __cplusplus + template struct alignof_helper { char __slot1; type __slot2; }; +# define alignof_slot(type) offsetof (alignof_helper, __slot2) +#else +# define alignof_slot(type) alignof (type) +#endif + +/* alignof_type (TYPE) + Determine the good alignment of an object of the given type at compile time. + Note that this is not necessarily the same as alignof_slot(type). + For example, with GNU C on x86 platforms and with clang on Linux/x86: + alignof_type(long long) = 8, but alignof_slot(long long) = 4. + And alignof_type(double) = 8, but + - when -malign-double is not specified: alignof_slot(double) = 4, + - when -malign-double is specified: alignof_slot(double) = 8. + Note: The result cannot be used as a value for an 'enum' constant, + due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */ +#if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ +# define alignof_type __alignof__ +#else +# define alignof_type alignof_slot +#endif + +#endif /* _ALIGNOF_H */ diff --git a/include/libgnulib/allocator.h b/include/libgnulib/allocator.h new file mode 100755 index 0000000..53c8dfc --- /dev/null +++ b/include/libgnulib/allocator.h @@ -0,0 +1,68 @@ +/* Memory allocators such as malloc+free. + + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef _GL_ALLOCATOR_H +#define _GL_ALLOCATOR_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* An object describing a memory allocator family. */ + +struct allocator +{ + /* Do not use GCC attributes such as __attribute__ ((malloc)) with + the function types pointed at by these members, because these + attributes do not work with pointers to functions. See + . */ + + /* Call ALLOCATE to allocate memory, like 'malloc'. On failure ALLOCATE + should return NULL, though not necessarily set errno. When given + a zero size it may return NULL even if successful. */ + void *(*allocate) (size_t); + + /* If nonnull, call REALLOCATE to reallocate memory, like 'realloc'. + On failure REALLOCATE should return NULL, though not necessarily set + errno. When given a zero size it may return NULL even if + successful. */ + void *(*reallocate) (void *, size_t); + + /* Call FREE to free memory, like 'free'. */ + void (*free) (void *); + + /* If nonnull, call DIE (SIZE) if MALLOC (SIZE) or REALLOC (..., + SIZE) fails. DIE should not return. SIZE should equal SIZE_MAX + if size_t overflow was detected while calculating sizes to be + passed to MALLOC or REALLOC. */ + void (*die) (size_t); +}; + +/* An allocator using the stdlib functions and a null DIE function. */ +extern struct allocator const stdlib_allocator; + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ALLOCATOR_H */ diff --git a/include/libgnulib/amemxfrm.h b/include/libgnulib/amemxfrm.h new file mode 100755 index 0000000..1617a12 --- /dev/null +++ b/include/libgnulib/amemxfrm.h @@ -0,0 +1,49 @@ +/* Locale dependent memory area transformation for comparison. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef AMEMXFRM_H +#define AMEMXFRM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Generalization of strxfrm() to strings with embedded NUL bytes. */ + +/* Transform the memory area [S..S+N-1] to a memory area, in such a way that + comparing (S1,N1) and (S2,N2) with memcoll() is equivalent to comparing + amemxfrm(S1,N1) and amemxfrm(S2,N2) with memcmp2(). + The byte S[N] may be temporarily overwritten by this function, but will be + restored before this function returns. + The result of this function depends on the LC_COLLATE category of the + current locale. + If successful: If resultbuf is not NULL and the result fits into *lengthp + bytes, it is put in resultbuf, and resultbuf is returned. Otherwise, a + freshly allocated string is returned. In both cases, *lengthp is set to the + length of the returned string. + Upon failure, return NULL, with errno set. */ +extern char * amemxfrm (char *restrict s, size_t n, + char *restrict resultbuf, size_t *lengthp); + + +#ifdef __cplusplus +} +#endif + +#endif /* AMEMXFRM_H */ diff --git a/include/libgnulib/arcfour.h b/include/libgnulib/arcfour.h new file mode 100755 index 0000000..613a68c --- /dev/null +++ b/include/libgnulib/arcfour.h @@ -0,0 +1,58 @@ +/* arcfour.h --- The arcfour stream cipher + * Copyright (C) 2000-2005, 2009-2024 Free Software Foundation, Inc. + * + * This file is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. + * + * This file 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + */ + +/* Code from Libgcrypt adapted for gnulib by Simon Josefsson. */ + +#ifndef ARCFOUR_H +#define ARCFOUR_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define ARCFOUR_SBOX_SIZE 256 + +typedef struct +{ + char sbox[ARCFOUR_SBOX_SIZE]; + uint8_t idx_i, idx_j; +} arcfour_context; + +/* Apply ARCFOUR stream to INBUF placing the result in OUTBUF, both of + LENGTH size. CONTEXT must be initialized with arcfour_setkey + before this function is called. */ +extern void +arcfour_stream (arcfour_context * context, + const char *inbuf, char *restrict outbuf, size_t length); + +/* Initialize CONTEXT using encryption KEY of KEYLEN bytes. KEY + should be 40 bits (5 bytes) or longer. The KEY cannot be zero + length. */ +extern void +arcfour_setkey (arcfour_context * context, const char *key, size_t keylen); + + +#ifdef __cplusplus +} +#endif + +#endif /* ARCFOUR_H */ diff --git a/include/libgnulib/arctwo.h b/include/libgnulib/arctwo.h new file mode 100755 index 0000000..27453c3 --- /dev/null +++ b/include/libgnulib/arctwo.h @@ -0,0 +1,71 @@ +/* arctwo.h --- The arctwo block cipher + * Copyright (C) 2000-2003, 2005, 2009-2024 Free Software Foundation, Inc. + * + * This file is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. + * + * This file 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + */ + +/* Code from Libgcrypt adapted for gnulib by Simon Josefsson. */ + +#ifndef ARCTWO_H +#define ARCTWO_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct +{ + uint16_t S[64]; +} arctwo_context; + +#define ARCTWO_BLOCK_SIZE 8 + +/* Initialize CONTEXT using KEY of KEYLEN length. If + EFFECTIVE_KEYLEN, truncate the key (using a special algorithm) to + only be of EFFECTIVE_KEYLEN bits. Normally, you use + EFFECTIVE_KEYLEN of 0, but see RFC 2268 for more information. */ +void +arctwo_setkey_ekb (arctwo_context *context, + size_t keylen, const char *key, size_t effective_keylen); + +#define arctwo_setkey(context,keylen,key) \ + arctwo_setkey_ekb (context, keylen, key, 8 * (keylen)) + +/* Encrypt INBUF of size LENGTH into OUTBUF. LENGTH must be a + multiple of ARCTWO_BLOCK_SIZE. CONTEXT hold the encryption key, + and must have been initialized with arctwo_setkey or + arctwo_setkey_ekb. */ +extern void +arctwo_encrypt (arctwo_context *context, const char *inbuf, + char *restrict outbuf, size_t length); + +/* Decrypt INBUF of size LENGTH into OUTBUF. LENGTH must be a + multiple of ARCTWO_BLOCK_SIZE. CONTEXT hold the decryption key, + and must have been initialized with arctwo_setkey or + arctwo_setkey_ekb. */ +extern void +arctwo_decrypt (arctwo_context *context, const char *inbuf, + char *restrict outbuf, size_t length); + + +#ifdef __cplusplus +} +#endif + +#endif /* ARCTWO_H */ diff --git a/include/libgnulib/areadlink.h b/include/libgnulib/areadlink.h new file mode 100755 index 0000000..88ad14e --- /dev/null +++ b/include/libgnulib/areadlink.h @@ -0,0 +1,47 @@ +/* Read symbolic links without size limitation. + + Copyright (C) 2001, 2003-2004, 2007, 2009-2024 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +extern char *areadlink (char const *filename) + _GL_ATTRIBUTE_DEALLOC_FREE; +extern char *areadlink_with_size (char const *filename, size_t size_hint) + _GL_ATTRIBUTE_DEALLOC_FREE; + +#if GNULIB_AREADLINKAT +extern char *areadlinkat (int fd, char const *filename) + _GL_ATTRIBUTE_DEALLOC_FREE; +#endif + +#if GNULIB_AREADLINKAT_WITH_SIZE +extern char *areadlinkat_with_size (int fd, char const *filename, + size_t size_hint) + _GL_ATTRIBUTE_DEALLOC_FREE; +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/arg-nonnull.h b/include/libgnulib/arg-nonnull.h new file mode 100755 index 0000000..46c711c --- /dev/null +++ b/include/libgnulib/arg-nonnull.h @@ -0,0 +1,26 @@ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif diff --git a/include/libgnulib/argmatch.h b/include/libgnulib/argmatch.h new file mode 100755 index 0000000..ca60dfe --- /dev/null +++ b/include/libgnulib/argmatch.h @@ -0,0 +1,350 @@ +/* argmatch.h -- definitions and prototypes for argmatch.c + + Copyright (C) 1990, 1998-1999, 2001-2002, 2004-2005, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* Written by David MacKenzie + Modified by Akim Demaille */ + +#ifndef ARGMATCH_H_ +# define ARGMATCH_H_ 1 + +/* This file uses _GL_ATTRIBUTE_PURE. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include +# include +# include +# include /* memcmp */ + +# include "gettext.h" +# include "quote.h" + +# ifdef __cplusplus +extern "C" { +# endif + +# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) + +/* Assert there are as many real arguments as there are values + (argument list ends with a NULL guard). */ + +# define ARGMATCH_VERIFY(Arglist, Vallist) \ + static_assert (ARRAY_CARDINALITY (Arglist) \ + == ARRAY_CARDINALITY (Vallist) + 1) + +/* Return the index of the element of ARGLIST (NULL terminated) that + matches with ARG. If VALLIST is not NULL, then use it to resolve + false ambiguities (i.e., different matches of ARG but corresponding + to the same values in VALLIST). */ + +ptrdiff_t argmatch (char const *arg, char const *const *arglist, + void const *vallist, size_t valsize) _GL_ATTRIBUTE_PURE; + +ptrdiff_t argmatch_exact (char const *arg, char const *const *arglist) + _GL_ATTRIBUTE_PURE; + +# define ARGMATCH(Arg, Arglist, Vallist) \ + argmatch (Arg, Arglist, (void const *) (Vallist), sizeof *(Vallist)) + +# define ARGMATCH_EXACT(Arg, Arglist) \ + argmatch_exact (Arg, Arglist) + +/* xargmatch calls this function when it fails. This function should not + return. By default, this is a function that calls ARGMATCH_DIE which + in turn defaults to 'exit (exit_failure)'. */ +typedef void (*argmatch_exit_fn) (void); +extern argmatch_exit_fn argmatch_die; + +/* Report on stderr why argmatch failed. Report correct values. */ + +void argmatch_invalid (char const *context, char const *value, + ptrdiff_t problem); + +/* Left for compatibility with the old name invalid_arg */ + +# define invalid_arg(Context, Value, Problem) \ + argmatch_invalid (Context, Value, Problem) + + + +/* Report on stderr the list of possible arguments. */ + +void argmatch_valid (char const *const *arglist, + void const *vallist, size_t valsize); + +# define ARGMATCH_VALID(Arglist, Vallist) \ + argmatch_valid (Arglist, (void const *) (Vallist), sizeof *(Vallist)) + + + +/* Like argmatch/argmatch_exact, but upon failure, report an explanation + of the failure, and exit using the function EXIT_FN. */ + +ptrdiff_t __xargmatch_internal (char const *context, + char const *arg, char const *const *arglist, + void const *vallist, size_t valsize, + argmatch_exit_fn exit_fn, + bool allow_abbreviation); + +/* Programmer friendly interface to __xargmatch_internal. */ + +# define XARGMATCH(Context, Arg, Arglist, Vallist) \ + ((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \ + (void const *) (Vallist), \ + sizeof *(Vallist), \ + argmatch_die, \ + true)]) + +# define XARGMATCH_EXACT(Context, Arg, Arglist, Vallist) \ + ((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \ + (void const *) (Vallist), \ + sizeof *(Vallist), \ + argmatch_die, \ + false)]) + +/* Convert a value into a corresponding argument. */ + +char const *argmatch_to_argument (void const *value, + char const *const *arglist, + void const *vallist, size_t valsize) + _GL_ATTRIBUTE_PURE; + +# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \ + argmatch_to_argument (Value, Arglist, \ + (void const *) (Vallist), sizeof *(Vallist)) + +# define ARGMATCH_DEFINE_GROUP(Name, Type) \ + /* The type of the values of this group. */ \ + typedef Type argmatch_##Name##_type; \ + \ + /* The size of the type of the values of this group. */ \ + enum argmatch_##Name##_size_enum \ + { \ + argmatch_##Name##_size = sizeof (argmatch_##Name##_type) \ + }; \ + \ + /* Argument mapping of this group. */ \ + typedef struct \ + { \ + /* Argument (e.g., "simple"). */ \ + const char *arg; \ + /* Value (e.g., simple_backups). */ \ + const argmatch_##Name##_type val; \ + } argmatch_##Name##_arg; \ + \ + /* Documentation of this group. */ \ + typedef struct \ + { \ + /* Argument (e.g., "simple"). */ \ + const char *arg; \ + /* Documentation (e.g., N_("always make simple backups")). */ \ + const char *doc; \ + } argmatch_##Name##_doc; \ + \ + /* All the features of an argmatch group. */ \ + typedef struct \ + { \ + const argmatch_##Name##_arg* args; \ + const argmatch_##Name##_doc* docs; \ + \ + /* Printed before the usage message. */ \ + const char *doc_pre; \ + /* Printed after the usage message. */ \ + const char *doc_post; \ + } argmatch_##Name##_group_type; \ + \ + /* The structure the user must build. */ \ + extern const argmatch_##Name##_group_type argmatch_##Name##_group; \ + \ + /* Print the documentation of this group. */ \ + void argmatch_##Name##_usage (FILE *out); \ + \ + /* If nonnegative, the index I of ARG in ARGS, i.e, \ + ARGS[I] == ARG. \ + Return -1 for invalid argument, -2 for ambiguous argument. */ \ + ptrdiff_t argmatch_##Name##_choice (const char *arg); \ + \ + /* A pointer to the corresponding value if it exists, or \ + report an error and exit with failure if the argument was \ + not recognized. */ \ + const argmatch_##Name##_type* \ + argmatch_##Name##_value (const char *context, const char *arg); \ + \ + /* The first argument in ARGS that matches this value, or NULL. */ \ + const char * \ + argmatch_##Name##_argument (const argmatch_##Name##_type *val); \ + \ + ptrdiff_t \ + argmatch_##Name##_choice (const char *arg) \ + { \ + const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ + size_t size = argmatch_##Name##_size; \ + ptrdiff_t res = -1; /* Index of first nonexact match. */ \ + bool ambiguous = false; /* Whether multiple nonexact match(es). */ \ + size_t arglen = strlen (arg); \ + \ + /* Test all elements for either exact match or abbreviated \ + matches. */ \ + for (size_t i = 0; g->args[i].arg; i++) \ + if (!strncmp (g->args[i].arg, arg, arglen)) \ + { \ + if (strlen (g->args[i].arg) == arglen) \ + /* Exact match found. */ \ + return i; \ + else if (res == -1) \ + /* First nonexact match found. */ \ + res = i; \ + else if (memcmp (&g->args[res].val, &g->args[i].val, size)) \ + /* Second nonexact match found. */ \ + /* There is a real ambiguity, or we could not \ + disambiguate. */ \ + ambiguous = true; \ + } \ + return ambiguous ? -2 : res; \ + } \ + \ + const char * \ + argmatch_##Name##_argument (const argmatch_##Name##_type *val) \ + { \ + const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ + size_t size = argmatch_##Name##_size; \ + for (size_t i = 0; g->args[i].arg; i++) \ + if (!memcmp (val, &g->args[i].val, size)) \ + return g->args[i].arg; \ + return NULL; \ + } \ + \ + /* List the valid values of this group. */ \ + static void \ + argmatch_##Name##_valid (FILE *out) \ + { \ + const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ + size_t size = argmatch_##Name##_size; \ + \ + /* Try to put synonyms on the same line. Synonyms are expected \ + to follow each other. */ \ + fputs (gettext ("Valid arguments are:"), out); \ + for (int i = 0; g->args[i].arg; i++) \ + if (i == 0 \ + || memcmp (&g->args[i-1].val, &g->args[i].val, size)) \ + fprintf (out, "\n - %s", quote (g->args[i].arg)); \ + else \ + fprintf (out, ", %s", quote (g->args[i].arg)); \ + putc ('\n', out); \ + } \ + \ + const argmatch_##Name##_type* \ + argmatch_##Name##_value (const char *context, const char *arg) \ + { \ + const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ + ptrdiff_t res = argmatch_##Name##_choice (arg); \ + if (res < 0) \ + { \ + argmatch_invalid (context, arg, res); \ + argmatch_##Name##_valid (stderr); \ + argmatch_die (); \ + } \ + return &g->args[res].val; \ + } \ + \ + /* The column in which the documentation is displayed. \ + The leftmost possible, but no more than 20. */ \ + static int \ + argmatch_##Name##_doc_col (void) \ + { \ + const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ + size_t size = argmatch_##Name##_size; \ + int res = 0; \ + for (int i = 0; g->docs[i].arg; ++i) \ + { \ + int col = 4; \ + int ival = argmatch_##Name##_choice (g->docs[i].arg); \ + if (ival < 0) \ + /* Pseudo argument, display it. */ \ + col += strlen (g->docs[i].arg); \ + else \ + /* Genuine argument, display it with its synonyms. */ \ + for (int j = 0; g->args[j].arg; ++j) \ + if (! memcmp (&g->args[ival].val, &g->args[j].val, size)) \ + col += (col == 4 ? 0 : 2) + strlen (g->args[j].arg); \ + if (res <= col) \ + res = col <= 20 ? col : 20; \ + } \ + return res ? res : 20; \ + } \ + \ + void \ + argmatch_##Name##_usage (FILE *out) \ + { \ + const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ + size_t size = argmatch_##Name##_size; \ + /* Width of the screen. Help2man does not seem to support \ + arguments on several lines, so in that case pretend a very \ + large width. */ \ + const int screen_width = getenv ("HELP2MAN") ? INT_MAX : 80; \ + if (g->doc_pre) \ + fprintf (out, "%s\n", gettext (g->doc_pre)); \ + int doc_col = argmatch_##Name##_doc_col (); \ + for (int i = 0; g->docs[i].arg; ++i) \ + { \ + int col = 0; \ + bool first = true; \ + int ival = argmatch_##Name##_choice (g->docs[i].arg); \ + if (ival < 0) \ + /* Pseudo argument, display it. */ \ + col += fprintf (out, " %s", g->docs[i].arg); \ + else \ + /* Genuine argument, display it with its synonyms. */ \ + for (int j = 0; g->args[j].arg; ++j) \ + if (! memcmp (&g->args[ival].val, &g->args[j].val, size)) \ + { \ + if (!first \ + && screen_width < col + 2 + strlen (g->args[j].arg)) \ + { \ + fprintf (out, ",\n"); \ + col = 0; \ + first = true; \ + } \ + if (first) \ + { \ + col += fprintf (out, " "); \ + first = false; \ + } \ + else \ + col += fprintf (out, ","); \ + col += fprintf (out, " %s", g->args[j].arg); \ + } \ + /* The doc. Separated by at least two spaces. */ \ + if (doc_col < col + 2) \ + { \ + fprintf (out, "\n"); \ + col = 0; \ + } \ + fprintf (out, "%*s%s\n", \ + doc_col - col, "", gettext (g->docs[i].doc)); \ + } \ + if (g->doc_post) \ + fprintf (out, "%s\n", gettext (g->doc_post)); \ + } + +# ifdef __cplusplus +} +# endif + +#endif /* ARGMATCH_H_ */ diff --git a/include/libgnulib/argp-fmtstream.h b/include/libgnulib/argp-fmtstream.h new file mode 100755 index 0000000..67b9c06 --- /dev/null +++ b/include/libgnulib/argp-fmtstream.h @@ -0,0 +1,303 @@ +/* Word-wrapping and line-truncating streams. + Copyright (C) 1997-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This package emulates glibc 'line_wrap_stream' semantics for systems that + don't have that. If the system does have it, it is just a wrapper for + that. This header file is only used internally while compiling argp, and + shouldn't be installed. */ + +#ifndef _ARGP_FMTSTREAM_H +#define _ARGP_FMTSTREAM_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, __GL_INLINE, _GL_ATTRIBUTE_DEALLOC, + _GL_ATTRIBUTE_FORMAT. */ +#if !_LIBC && !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include + +#if defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H) +/* line_wrap_stream is available, so use that. */ +#define ARGP_FMTSTREAM_USE_LINEWRAP +#endif + +#ifdef ARGP_FMTSTREAM_USE_LINEWRAP +/* Just be a simple wrapper for line_wrap_stream; the semantics are + *slightly* different, as line_wrap_stream doesn't actually make a new + object, it just modifies the given stream (reversibly) to do + line-wrapping. Since we control who uses this code, it doesn't matter. */ + +#include + +typedef FILE *argp_fmtstream_t; + +#define argp_make_fmtstream line_wrap_stream +#define __argp_make_fmtstream line_wrap_stream +#define argp_fmtstream_free line_unwrap_stream +#define __argp_fmtstream_free line_unwrap_stream + +#define __argp_fmtstream_putc(fs,ch) putc(ch,fs) +#define argp_fmtstream_putc(fs,ch) putc(ch,fs) +#define __argp_fmtstream_puts(fs,str) fputs(str,fs) +#define argp_fmtstream_puts(fs,str) fputs(str,fs) +#define __argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) +#define argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) +#define __argp_fmtstream_printf fprintf +#define argp_fmtstream_printf fprintf + +#define __argp_fmtstream_lmargin line_wrap_lmargin +#define argp_fmtstream_lmargin line_wrap_lmargin +#define __argp_fmtstream_set_lmargin line_wrap_set_lmargin +#define argp_fmtstream_set_lmargin line_wrap_set_lmargin +#define __argp_fmtstream_rmargin line_wrap_rmargin +#define argp_fmtstream_rmargin line_wrap_rmargin +#define __argp_fmtstream_set_rmargin line_wrap_set_rmargin +#define argp_fmtstream_set_rmargin line_wrap_set_rmargin +#define __argp_fmtstream_wmargin line_wrap_wmargin +#define argp_fmtstream_wmargin line_wrap_wmargin +#define __argp_fmtstream_set_wmargin line_wrap_set_wmargin +#define argp_fmtstream_set_wmargin line_wrap_set_wmargin +#define __argp_fmtstream_point line_wrap_point +#define argp_fmtstream_point line_wrap_point + +#else /* !ARGP_FMTSTREAM_USE_LINEWRAP */ +/* Guess we have to define our own version. */ + + +struct argp_fmtstream +{ + FILE *stream; /* The stream we're outputting to. */ + + size_t lmargin, rmargin; /* Left and right margins. */ + ssize_t wmargin; /* Margin to wrap to, or -1 to truncate. */ + + /* Point in buffer to which we've processed for wrapping, but not output. */ + size_t point_offs; + /* Output column at POINT_OFFS, or -1 meaning 0 but don't add lmargin. */ + ssize_t point_col; + + char *buf; /* Output buffer. */ + char *p; /* Current end of text in BUF. */ + char *end; /* Absolute end of BUF. */ +}; + +typedef struct argp_fmtstream *argp_fmtstream_t; + +/* Flush __FS to its stream, and free it (but don't close the stream). */ +extern void __argp_fmtstream_free (argp_fmtstream_t __fs); +extern void argp_fmtstream_free (argp_fmtstream_t __fs); + +/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines + written on it with LMARGIN spaces and limits them to RMARGIN columns + total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by + replacing the whitespace before them with a newline and WMARGIN spaces. + Otherwise, chars beyond RMARGIN are simply dropped until a newline. + Returns NULL if there was an error. */ +extern argp_fmtstream_t __argp_make_fmtstream (FILE *__stream, + size_t __lmargin, + size_t __rmargin, + ssize_t __wmargin) + _GL_ATTRIBUTE_DEALLOC (__argp_fmtstream_free, 1); +extern argp_fmtstream_t argp_make_fmtstream (FILE *__stream, + size_t __lmargin, + size_t __rmargin, + ssize_t __wmargin) + _GL_ATTRIBUTE_DEALLOC (argp_fmtstream_free, 1); + +extern ssize_t __argp_fmtstream_printf (argp_fmtstream_t __fs, + const char *__fmt, ...) + _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); +extern ssize_t argp_fmtstream_printf (argp_fmtstream_t __fs, + const char *__fmt, ...) + _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); + +#if _LIBC +extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); +extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); + +extern int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); +extern int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); + +extern size_t __argp_fmtstream_write (argp_fmtstream_t __fs, + const char *__str, size_t __len); +extern size_t argp_fmtstream_write (argp_fmtstream_t __fs, + const char *__str, size_t __len); +#endif + +/* Access macros for various bits of state. */ +#define argp_fmtstream_lmargin(__fs) ((__fs)->lmargin) +#define argp_fmtstream_rmargin(__fs) ((__fs)->rmargin) +#define argp_fmtstream_wmargin(__fs) ((__fs)->wmargin) +#define __argp_fmtstream_lmargin argp_fmtstream_lmargin +#define __argp_fmtstream_rmargin argp_fmtstream_rmargin +#define __argp_fmtstream_wmargin argp_fmtstream_wmargin + +#if _LIBC +/* Set __FS's left margin to LMARGIN and return the old value. */ +extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, + size_t __lmargin); +extern size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, + size_t __lmargin); + +/* Set __FS's right margin to __RMARGIN and return the old value. */ +extern size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, + size_t __rmargin); +extern size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, + size_t __rmargin); + +/* Set __FS's wrap margin to __WMARGIN and return the old value. */ +extern size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, + size_t __wmargin); +extern size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, + size_t __wmargin); + +/* Return the column number of the current output point in __FS. */ +extern size_t argp_fmtstream_point (argp_fmtstream_t __fs); +extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs); +#endif + +/* Internal routines. */ +extern void _argp_fmtstream_update (argp_fmtstream_t __fs); +extern void __argp_fmtstream_update (argp_fmtstream_t __fs); +extern int _argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); +extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); + +#if !_LIBC || defined __OPTIMIZE__ +/* Inline versions of above routines. */ + +#if !_LIBC +#define __argp_fmtstream_putc argp_fmtstream_putc +#define __argp_fmtstream_puts argp_fmtstream_puts +#define __argp_fmtstream_write argp_fmtstream_write +#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin +#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin +#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin +#define __argp_fmtstream_point argp_fmtstream_point +#define __argp_fmtstream_update _argp_fmtstream_update +#define __argp_fmtstream_ensure _argp_fmtstream_ensure +_GL_INLINE_HEADER_BEGIN +#ifndef ARGP_FS_EI +# define ARGP_FS_EI _GL_INLINE +#endif +#endif + +#ifndef ARGP_FS_EI +#define ARGP_FS_EI extern inline +#endif + +ARGP_FS_EI size_t +__argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len) +{ + if (__fs->p + __len <= __fs->end || __argp_fmtstream_ensure (__fs, __len)) + { + memcpy (__fs->p, __str, __len); + __fs->p += __len; + return __len; + } + else + return 0; +} + +ARGP_FS_EI int +__argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str) +{ + size_t __len = strlen (__str); + if (__len) + { + size_t __wrote = __argp_fmtstream_write (__fs, __str, __len); + return __wrote == __len ? 0 : -1; + } + else + return 0; +} + +ARGP_FS_EI int +__argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch) +{ + if (__fs->p < __fs->end || __argp_fmtstream_ensure (__fs, 1)) + return *__fs->p++ = __ch; + else + return EOF; +} + +/* Set __FS's left margin to __LMARGIN and return the old value. */ +ARGP_FS_EI size_t +__argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin) +{ + size_t __old; + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + __old = __fs->lmargin; + __fs->lmargin = __lmargin; + return __old; +} + +/* Set __FS's right margin to __RMARGIN and return the old value. */ +ARGP_FS_EI size_t +__argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin) +{ + size_t __old; + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + __old = __fs->rmargin; + __fs->rmargin = __rmargin; + return __old; +} + +/* Set FS's wrap margin to __WMARGIN and return the old value. */ +ARGP_FS_EI size_t +__argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin) +{ + size_t __old; + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + __old = __fs->wmargin; + __fs->wmargin = __wmargin; + return __old; +} + +/* Return the column number of the current output point in __FS. */ +ARGP_FS_EI size_t +__argp_fmtstream_point (argp_fmtstream_t __fs) +{ + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + return __fs->point_col >= 0 ? __fs->point_col : 0; +} + +#if !_LIBC +#undef __argp_fmtstream_putc +#undef __argp_fmtstream_puts +#undef __argp_fmtstream_write +#undef __argp_fmtstream_set_lmargin +#undef __argp_fmtstream_set_rmargin +#undef __argp_fmtstream_set_wmargin +#undef __argp_fmtstream_point +#undef __argp_fmtstream_update +#undef __argp_fmtstream_ensure +_GL_INLINE_HEADER_END +#endif + +#endif /* !_LIBC || __OPTIMIZE__ */ + +#endif /* ARGP_FMTSTREAM_USE_LINEWRAP */ + +#endif /* argp-fmtstream.h */ diff --git a/include/libgnulib/argp-namefrob.h b/include/libgnulib/argp-namefrob.h new file mode 100755 index 0000000..fce7922 --- /dev/null +++ b/include/libgnulib/argp-namefrob.h @@ -0,0 +1,170 @@ +/* Name frobnication for compiling argp outside of glibc + Copyright (C) 1997-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if !_LIBC +/* This code is written for inclusion in gnu-libc, and uses names in the + namespace reserved for libc. If we're not compiling in libc, define those + names to be the normal ones instead. */ + +/* argp-parse functions */ +#undef __argp_parse +#define __argp_parse argp_parse +#undef __option_is_end +#define __option_is_end _option_is_end +#undef __option_is_short +#define __option_is_short _option_is_short +#undef __argp_input +#define __argp_input _argp_input + +/* argp-help functions */ +#undef __argp_help +#define __argp_help argp_help +#undef __argp_error +#define __argp_error argp_error +#undef __argp_failure +#define __argp_failure argp_failure +#undef __argp_state_help +#define __argp_state_help argp_state_help +#undef __argp_usage +#define __argp_usage argp_usage + +/* argp-fmtstream functions */ +#undef __argp_make_fmtstream +#define __argp_make_fmtstream argp_make_fmtstream +#undef __argp_fmtstream_free +#define __argp_fmtstream_free argp_fmtstream_free +#undef __argp_fmtstream_putc +#define __argp_fmtstream_putc argp_fmtstream_putc +#undef __argp_fmtstream_puts +#define __argp_fmtstream_puts argp_fmtstream_puts +#undef __argp_fmtstream_write +#define __argp_fmtstream_write argp_fmtstream_write +#undef __argp_fmtstream_printf +#define __argp_fmtstream_printf argp_fmtstream_printf +#undef __argp_fmtstream_set_lmargin +#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin +#undef __argp_fmtstream_set_rmargin +#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin +#undef __argp_fmtstream_set_wmargin +#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin +#undef __argp_fmtstream_point +#define __argp_fmtstream_point argp_fmtstream_point +#undef __argp_fmtstream_update +#define __argp_fmtstream_update _argp_fmtstream_update +#undef __argp_fmtstream_ensure +#define __argp_fmtstream_ensure _argp_fmtstream_ensure +#undef __argp_fmtstream_lmargin +#define __argp_fmtstream_lmargin argp_fmtstream_lmargin +#undef __argp_fmtstream_rmargin +#define __argp_fmtstream_rmargin argp_fmtstream_rmargin +#undef __argp_fmtstream_wmargin +#define __argp_fmtstream_wmargin argp_fmtstream_wmargin + +/* normal libc functions we call */ +#undef __flockfile +#define __flockfile flockfile +#undef __funlockfile +#define __funlockfile funlockfile +#undef __mempcpy +#define __mempcpy mempcpy +#undef __sleep +#define __sleep sleep +#undef __strcasecmp +#define __strcasecmp strcasecmp +#undef __strchrnul +#define __strchrnul strchrnul +#undef __strerror_r +#define __strerror_r strerror_r +#undef __strndup +#define __strndup strndup +#undef __vsnprintf +#define __vsnprintf vsnprintf + +#if (defined HAVE_DECL_CLEARERR_UNLOCKED && !HAVE_DECL_CLEARERR_UNLOCKED \ + && !defined clearerr_unlocked) +# define clearerr_unlocked(x) clearerr (x) +#endif +#if (defined HAVE_DECL_FEOF_UNLOCKED && !HAVE_DECL_FEOF_UNLOCKED \ + && !defined feof_unlocked) +# define feof_unlocked(x) feof (x) +#endif +#if (defined HAVE_DECL_FERROR_UNLOCKED && !HAVE_DECL_FERROR_UNLOCKED \ + && !defined ferror_unlocked) +# define ferror_unlocked(x) ferror (x) +#endif +#if (defined HAVE_DECL_FFLUSH_UNLOCKED && !HAVE_DECL_FFLUSH_UNLOCKED \ + && !defined fflush_unlocked) +# define fflush_unlocked(x) fflush (x) +#endif +#if (defined HAVE_DECL_FGETS_UNLOCKED && !HAVE_DECL_FGETS_UNLOCKED \ + && !defined fgets_unlocked) +# define fgets_unlocked(x,y,z) fgets (x,y,z) +#endif +#if (defined HAVE_DECL_FPUTC_UNLOCKED && !HAVE_DECL_FPUTC_UNLOCKED \ + && !defined fputc_unlocked) +# define fputc_unlocked(x,y) fputc (x,y) +#endif +#if (defined HAVE_DECL_FPUTS_UNLOCKED && !HAVE_DECL_FPUTS_UNLOCKED \ + && !defined fputs_unlocked) +# define fputs_unlocked(x,y) fputs (x,y) +#endif +#if (defined HAVE_DECL_FREAD_UNLOCKED && !HAVE_DECL_FREAD_UNLOCKED \ + && !defined fread_unlocked) +# define fread_unlocked(w,x,y,z) fread (w,x,y,z) +#endif +#if (defined HAVE_DECL_FWRITE_UNLOCKED && !HAVE_DECL_FWRITE_UNLOCKED \ + && !defined fwrite_unlocked) +# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) +#endif +#if (defined HAVE_DECL_GETC_UNLOCKED && !HAVE_DECL_GETC_UNLOCKED \ + && !defined getc_unlocked) +# define getc_unlocked(x) getc (x) +#endif +#if (defined HAVE_DECL_GETCHAR_UNLOCKED && !HAVE_DECL_GETCHAR_UNLOCKED \ + && !defined getchar_unlocked) +# define getchar_unlocked() getchar () +#endif +#if (defined HAVE_DECL_PUTC_UNLOCKED && !HAVE_DECL_PUTC_UNLOCKED \ + && !defined putc_unlocked) +# define putc_unlocked(x,y) putc (x,y) +#endif +#if (defined HAVE_DECL_PUTCHAR_UNLOCKED && !HAVE_DECL_PUTCHAR_UNLOCKED \ + && !defined putchar_unlocked) +# define putchar_unlocked(x) putchar (x) +#endif + +#endif /* !_LIBC */ + +#ifndef __set_errno +#define __set_errno(e) (errno = (e)) +#endif + +#if defined GNULIB_ARGP_DISABLE_DIRNAME +# define __argp_base_name(arg) arg +#elif defined GNULIB_ARGP_EXTERN_BASENAME +extern char *__argp_base_name (const char *arg); +#else +# include "basename-lgpl.h" +# define __argp_base_name last_component +#endif + +#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME +# define __argp_short_program_name() (program_invocation_short_name) +#else +extern char *__argp_short_program_name (void); +#endif diff --git a/include/libgnulib/argp-version-etc.h b/include/libgnulib/argp-version-etc.h new file mode 100755 index 0000000..4952333 --- /dev/null +++ b/include/libgnulib/argp-version-etc.h @@ -0,0 +1,40 @@ +/* Version hook for Argp. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef _ARGP_VERSION_ETC_H +#define _ARGP_VERSION_ETC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Setup standard display of the version information for the '--version' + option. NAME is the canonical program name, and AUTHORS is a NULL- + terminated array of author names. At least one author name must be + given. + + If NAME is NULL, the package name (as given by the PACKAGE macro) + is assumed to be the name of the program. + + This function is intended to be called before argp_parse(). +*/ +extern void argp_version_setup (const char *name, const char * const *authors); + +#ifdef __cplusplus +} +#endif + +#endif /* _ARGP_VERSION_ETC_H */ diff --git a/include/libgnulib/argp.h b/include/libgnulib/argp.h new file mode 100755 index 0000000..6cf72e4 --- /dev/null +++ b/include/libgnulib/argp.h @@ -0,0 +1,645 @@ +/* Hierarchical argument parsing, layered over getopt. + Copyright (C) 1995-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _ARGP_H +#define _ARGP_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_FORMAT. */ +#if !_LIBC && !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include +#include + +#define __need_error_t +#include + +#ifndef __THROW +# define __THROW +#endif +#ifndef __NTH +# define __NTH(fct) fct __THROW +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words. */ +#ifndef __restrict +# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) \ + || __clang_major__ >= 3) +# if 199901L <= __STDC_VERSION__ +# define __restrict restrict +# else +# define __restrict +# endif +# endif +#endif + +#ifndef __error_t_defined +typedef int error_t; +# define __error_t_defined +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Glibc documentation: + https://www.gnu.org/software/libc/manual/html_node/Argp.html */ + +/* A description of a particular option. A pointer to an array of + these is passed in the OPTIONS field of an argp structure. Each option + entry can correspond to one long option and/or one short option; more + names for the same option can be added by following an entry in an option + array with options having the OPTION_ALIAS flag set. */ +struct argp_option +{ + /* The long option name. For more than one name for the same option, you + can use following options with the OPTION_ALIAS flag set. */ + const char *name; + + /* What key is returned for this option. If > 0 and printable, then it's + also accepted as a short option. */ + int key; + + /* If non-NULL, this is the name of the argument associated with this + option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */ + const char *arg; + + /* OPTION_ flags. */ + int flags; + + /* The doc string for this option. If both NAME and KEY are 0, This string + will be printed outdented from the normal option column, making it + useful as a group header (it will be the first thing printed in its + group); in this usage, it's conventional to end the string with a ':'. + + Write the initial value as N_("TEXT") if you want xgettext to collect + it into a POT file. */ + const char *doc; + + /* The group this option is in. In a long help message, options are sorted + alphabetically within each group, and the groups presented in the order + 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with + if this field 0 will inherit the group number of the previous entry, or + zero if it's the first one, unless its a group header (NAME and KEY both + 0), in which case, the previous entry + 1 is the default. Automagic + options such as --help are put into group -1. */ + int group; +}; + +/* The argument associated with this option is optional. */ +#define OPTION_ARG_OPTIONAL 0x1 + +/* This option isn't displayed in any help messages. */ +#define OPTION_HIDDEN 0x2 + +/* This option is an alias for the closest previous non-alias option. This + means that it will be displayed in the same help entry, and will inherit + fields other than NAME and KEY from the aliased option. */ +#define OPTION_ALIAS 0x4 + +/* This option isn't actually an option (and so should be ignored by the + actual option parser), but rather an arbitrary piece of documentation that + should be displayed in much the same manner as the options. If this flag + is set, then the option NAME field is displayed unmodified (e.g., no '--' + prefix is added) at the left-margin (where a *short* option would normally + be displayed), and the documentation string in the normal place. The NAME + field will be translated using gettext, unless OPTION_NO_TRANS is set (see + below). For purposes of sorting, any leading whitespace and punctuation is + ignored, except that if the first non-whitespace character is not '-', this + entry is displayed after all options (and OPTION_DOC entries with a leading + '-') in the same group. */ +#define OPTION_DOC 0x8 + +/* This option shouldn't be included in "long" usage messages (but is still + included in help messages). This is mainly intended for options that are + completely documented in an argp's ARGS_DOC field, in which case including + the option in the generic usage list would be redundant. For instance, + if ARGS_DOC is "FOO BAR\n-x BLAH", and the '-x' option's purpose is to + distinguish these two cases, -x should probably be marked + OPTION_NO_USAGE. */ +#define OPTION_NO_USAGE 0x10 + +/* Valid only in conjunction with OPTION_DOC. This option disables translation + of option name. */ +#define OPTION_NO_TRANS 0x20 + +struct argp; /* fwd declare this type */ +struct argp_state; /* " */ +struct argp_child; /* " */ + +/* The type of a pointer to an argp parsing function. */ +typedef error_t (*argp_parser_t) (int __key, char *__arg, + struct argp_state *__state); + +/* What to return for unrecognized keys. For special ARGP_KEY_ keys, such + returns will simply be ignored. For user keys, this error will be turned + into EINVAL (if the call to argp_parse is such that errors are propagated + back to the user instead of exiting); returning EINVAL itself would result + in an immediate stop to parsing in *all* cases. */ +#define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */ + +/* Special values for the KEY argument to an argument parsing function. + ARGP_ERR_UNKNOWN should be returned if they aren't understood. + + The sequence of keys to a parsing function is either (where each + uppercased word should be prefixed by 'ARGP_KEY_' and opt is a user key): + + INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all + or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed + or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized + + The third case is where every parser returned ARGP_KEY_UNKNOWN for an + argument, in which case parsing stops at that argument (returning the + unparsed arguments to the caller of argp_parse if requested, or stopping + with an error message if not). + + If an error occurs (either detected by argp, or because the parsing + function returned an error value), then the parser is called with + ARGP_KEY_ERROR, and no further calls are made. */ + +/* This is not an option at all, but rather a command line argument. If a + parser receiving this key returns success, the fact is recorded, and the + ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the + argument, a parser function decrements the NEXT field of the state it's + passed, the option won't be considered processed; this is to allow you to + actually modify the argument (perhaps into an option), and have it + processed again. */ +#define ARGP_KEY_ARG 0 +/* There are remaining arguments not parsed by any parser, which may be found + starting at (STATE->argv + STATE->next). If success is returned, but + STATE->next left untouched, it's assumed that all arguments were consume, + otherwise, the parser should adjust STATE->next to reflect any arguments + consumed. */ +#define ARGP_KEY_ARGS 0x1000006 +/* There are no more command line arguments at all. */ +#define ARGP_KEY_END 0x1000001 +/* Because it's common to want to do some special processing if there aren't + any non-option args, user parsers are called with this key if they didn't + successfully process any non-option arguments. Called just before + ARGP_KEY_END (where more general validity checks on previously parsed + arguments can take place). */ +#define ARGP_KEY_NO_ARGS 0x1000002 +/* Passed in before any parsing is done. Afterwards, the values of each + element of the CHILD_INPUT field, if any, in the state structure is + copied to each child's state to be the initial value of the INPUT field. */ +#define ARGP_KEY_INIT 0x1000003 +/* Use after all other keys, including SUCCESS & END. */ +#define ARGP_KEY_FINI 0x1000007 +/* Passed in when parsing has successfully been completed (even if there are + still arguments remaining). */ +#define ARGP_KEY_SUCCESS 0x1000004 +/* Passed in if an error occurs. */ +#define ARGP_KEY_ERROR 0x1000005 + +/* An argp structure contains a set of options declarations, a function to + deal with parsing one, documentation string, a possible vector of child + argp's, and perhaps a function to filter help output. When actually + parsing options, getopt is called with the union of all the argp + structures chained together through their CHILD pointers, with conflicts + being resolved in favor of the first occurrence in the chain. */ +struct argp +{ + /* An array of argp_option structures, terminated by an entry with both + NAME and KEY having a value of 0. */ + const struct argp_option *options; + + /* What to do with an option from this structure. KEY is the key + associated with the option, and ARG is any associated argument (NULL if + none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be + returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then + parsing is stopped immediately, and that value is returned from + argp_parse(). For special (non-user-supplied) values of KEY, see the + ARGP_KEY_ definitions below. */ + argp_parser_t parser; + + /* If non-NULL, a string describing what other arguments are wanted by this + program. It is only used by argp_usage to print the "Usage:" message. + If it contains newlines, the strings separated by them are considered + alternative usage patterns, and printed on separate lines (lines after + the first are prefix by " or: " instead of "Usage:"). */ + const char *args_doc; + + /* If non-NULL, a string containing extra text to be printed before and + after the options in a long help message (separated by a vertical tab + '\v' character). + Write the initial value as N_("BEFORE-TEXT") "\v" N_("AFTER-TEXT") if + you want xgettext to collect the two pieces of text into a POT file. */ + const char *doc; + + /* A vector of argp_children structures, terminated by a member with a 0 + argp field, pointing to child argps should be parsed with this one. Any + conflicts are resolved in favor of this argp, or early argps in the + CHILDREN list. This field is useful if you use libraries that supply + their own argp structure, which you want to use in conjunction with your + own. */ + const struct argp_child *children; + + /* If non-zero, this should be a function to filter the output of help + messages. KEY is either a key from an option, in which case TEXT is + that option's help text, or a special key from the ARGP_KEY_HELP_ + defines, below, describing which other help text TEXT is. The function + should return either TEXT, if it should be used as-is, a replacement + string, which should be malloced, and will be freed by argp, or NULL, + meaning "print nothing". The value for TEXT is *after* any translation + has been done, so if any of the replacement text also needs translation, + that should be done by the filter function. INPUT is either the input + supplied to argp_parse, or NULL, if argp_help was called directly. */ + char *(*help_filter) (int __key, const char *__text, void *__input); + + /* If non-zero the strings used in the argp library are translated using + the domain described by this string. Otherwise the currently installed + default domain is used. */ + const char *argp_domain; +}; + +/* Possible KEY arguments to a help filter function. */ +#define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceding options. */ +#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */ +#define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */ +#define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation; + TEXT is NULL for this key. */ +/* Explanatory note emitted when duplicate option arguments have been + suppressed. */ +#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005 +#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */ + +/* When an argp has a non-zero CHILDREN field, it should point to a vector of + argp_child structures, each of which describes a subsidiary argp. */ +struct argp_child +{ + /* The child parser. */ + const struct argp *argp; + + /* Flags for this child. */ + int flags; + + /* If non-zero, an optional header to be printed in help output before the + child options. As a side-effect, a non-zero value forces the child + options to be grouped together; to achieve this effect without actually + printing a header string, use a value of "". */ + const char *header; + + /* Where to group the child options relative to the other ("consolidated") + options in the parent argp; the values are the same as the GROUP field + in argp_option structs, but all child-groupings follow parent options at + a particular group level. If both this field and HEADER are zero, then + they aren't grouped at all, but rather merged with the parent options + (merging the child's grouping levels with the parents). */ + int group; +}; + +/* Parsing state. This is provided to parsing functions called by argp, + which may examine and, as noted, modify fields. */ +struct argp_state +{ + /* The top level ARGP being parsed. */ + const struct argp *root_argp; + + /* The argument vector being parsed. May be modified. */ + int argc; + char **argv; + + /* The index in ARGV of the next arg that to be parsed. May be modified. */ + int next; + + /* The flags supplied to argp_parse. May be modified. */ + unsigned flags; + + /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the + number of the current arg, starting at zero, and incremented after each + such call returns. At all other times, this is the number of such + arguments that have been processed. */ + unsigned arg_num; + + /* If non-zero, the index in ARGV of the first argument following a special + '--' argument (which prevents anything following being interpreted as an + option). Only set once argument parsing has proceeded past this point. */ + int quoted; + + /* An arbitrary pointer passed in from the user. */ + void *input; + /* Values to pass to child parsers. This vector will be the same length as + the number of children for the current parser. */ + void **child_inputs; + + /* For the parser's use. Initialized to 0. */ + void *hook; + + /* The name used when printing messages. This is initialized to ARGV[0], + or PROGRAM_INVOCATION_NAME if that is unavailable. */ + char *name; + + /* Streams used when argp prints something. */ + FILE *err_stream; /* For errors; initialized to stderr. */ + FILE *out_stream; /* For information; initialized to stdout. */ + + void *pstate; /* Private, for use by argp. */ +}; + +/* Flags for argp_parse (note that the defaults are those that are + convenient for program command line parsing): */ + +/* Don't ignore the first element of ARGV. Normally (and always unless + ARGP_NO_ERRS is set) the first element of the argument vector is + skipped for option parsing purposes, as it corresponds to the program name + in a command line. */ +#define ARGP_PARSE_ARGV0 0x01 + +/* Don't print error messages for unknown options to stderr; unless this flag + is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program + name in the error messages. This flag implies ARGP_NO_EXIT (on the + assumption that silent exiting upon errors is bad behaviour). */ +#define ARGP_NO_ERRS 0x02 + +/* Don't parse any non-option args. Normally non-option args are parsed by + calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg + as the value. Since it's impossible to know which parse function wants to + handle it, each one is called in turn, until one returns 0 or an error + other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the + argp_parse returns prematurely (but with a return value of 0). If all + args have been parsed without error, all parsing functions are called one + last time with a key of ARGP_KEY_END. This flag needn't normally be set, + as the normal behavior is to stop parsing as soon as some argument can't + be handled. */ +#define ARGP_NO_ARGS 0x04 + +/* Parse options and arguments in the same order they occur on the command + line -- normally they're rearranged so that all options come first. */ +#define ARGP_IN_ORDER 0x08 + +/* Don't provide the standard long option --help, which causes usage and + option help information to be output to stdout, and exit (0) called. */ +#define ARGP_NO_HELP 0x10 + +/* Don't exit on errors (they may still result in error messages). */ +#define ARGP_NO_EXIT 0x20 + +/* Use the gnu getopt "long-only" rules for parsing arguments. */ +#define ARGP_LONG_ONLY 0x40 + +/* Turns off any message-printing/exiting options. */ +#define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP) + +/* Parse the options strings in ARGC & ARGV according to the options in ARGP. + FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the + index in ARGV of the first unparsed option is returned in it. If an + unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser + routine returned a non-zero value, it is returned; otherwise 0 is + returned. This function may also call exit unless the ARGP_NO_HELP flag + is set. INPUT is a pointer to a value to be passed to the parser. */ +extern error_t argp_parse (const struct argp *__restrict __argp, + int /*argc*/, char **__restrict /*argv*/, + unsigned __flags, int *__restrict __arg_index, + void *__restrict __input); +extern error_t __argp_parse (const struct argp *__restrict __argp, + int /*argc*/, char **__restrict /*argv*/, + unsigned __flags, int *__restrict __arg_index, + void *__restrict __input); + +/* Global variables. */ + +/* GNULIB makes sure both program_invocation_name and + program_invocation_short_name are available */ +#ifdef GNULIB_PROGRAM_INVOCATION_NAME +extern char *program_invocation_name; +# undef HAVE_DECL_PROGRAM_INVOCATION_NAME +# define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +#endif + +#ifdef GNULIB_PROGRAM_INVOCATION_SHORT_NAME +extern char *program_invocation_short_name; +# undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME +# define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +#endif + +/* If defined or set by the user program to a non-zero value, then a default + option --version is added (unless the ARGP_NO_HELP flag is used), which + will print this string followed by a newline and exit (unless the + ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ +extern const char *argp_program_version; + +/* If defined or set by the user program to a non-zero value, then a default + option --version is added (unless the ARGP_NO_HELP flag is used), which + calls this function with a stream to print the version to and a pointer to + the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is + used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ +extern void (*argp_program_version_hook) (FILE *__restrict __stream, + struct argp_state *__restrict + __state); + +/* If defined or set by the user program, it should point to string that is + the bug-reporting address for the program. It will be printed by + argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various + standard help messages), embedded in a sentence that says something like + "Report bugs to ADDR." */ +extern const char *argp_program_bug_address; + +/* The exit status that argp will use when exiting due to a parsing error. + If not defined or set by the user program, this defaults to EX_USAGE from + . */ +extern error_t argp_err_exit_status; + +/* Flags for argp_help. */ +#define ARGP_HELP_USAGE 0x01 /* a Usage: message. */ +#define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */ +#define ARGP_HELP_SEE 0x04 /* a "Try ... for more help" message. */ +#define ARGP_HELP_LONG 0x08 /* a long help message. */ +#define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */ +#define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */ +#define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC) +#define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */ +#define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to + reflect ARGP_LONG_ONLY mode. */ + +/* These ARGP_HELP flags are only understood by argp_state_help. */ +#define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */ +#define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */ + +/* The standard thing to do after a program command line parsing error, if an + error message has already been printed. */ +#define ARGP_HELP_STD_ERR \ + (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) +/* The standard thing to do after a program command line parsing error, if no + more specific error message has been printed. */ +#define ARGP_HELP_STD_USAGE \ + (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) +/* The standard thing to do in response to a --help option. */ +#define ARGP_HELP_STD_HELP \ + (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \ + | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR) + +/* Output a usage message for ARGP to STREAM. FLAGS are from the set + ARGP_HELP_*. */ +extern void argp_help (const struct argp *__restrict __argp, + FILE *__restrict __stream, + unsigned __flags, char *__restrict __name); +extern void __argp_help (const struct argp *__restrict __argp, + FILE *__restrict __stream, unsigned __flags, + char *__name); + +/* The following routines are intended to be called from within an argp + parsing routine (thus taking an argp_state structure as the first + argument). They may or may not print an error message and exit, depending + on the flags in STATE -- in any case, the caller should be prepared for + them *not* to exit, and should return an appropriate error after calling + them. [argp_usage & argp_error should probably be called argp_state_..., + but they're used often enough that they should be short] */ + +/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are + from the set ARGP_HELP_*. */ +extern void argp_state_help (const struct argp_state *__restrict __state, + FILE *__restrict __stream, + unsigned int __flags); +extern void __argp_state_help (const struct argp_state *__restrict __state, + FILE *__restrict __stream, + unsigned int __flags); + +#if _LIBC +/* Possibly output the standard usage message for ARGP to stderr and exit. */ +extern void argp_usage (const struct argp_state *__state); +extern void __argp_usage (const struct argp_state *__state); +#endif + +/* If appropriate, print the printf string FMT and following args, preceded + by the program name and ':', to stderr, and followed by a "Try ... --help" + message, then exit (1). */ +extern void argp_error (const struct argp_state *__restrict __state, + const char *__restrict __fmt, ...) +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) +#endif + ; +extern void __argp_error (const struct argp_state *__restrict __state, + const char *__restrict __fmt, ...) +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) +#endif + ; + +/* Similar to the standard gnu error-reporting function error(), but will + respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print + to STATE->err_stream. This is useful for argument parsing code that is + shared between program startup (when exiting is desired) and runtime + option parsing (when typically an error code is returned instead). The + difference between this function and argp_error is that the latter is for + *parsing errors*, and the former is for other problems that occur during + parsing but don't reflect a (syntactic) problem with the input. */ +extern void argp_failure (const struct argp_state *__restrict __state, + int __status, int __errnum, + const char *__restrict __fmt, ...) +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 4, 5)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 4, 5)) +#endif + ; +extern void __argp_failure (const struct argp_state *__restrict __state, + int __status, int __errnum, + const char *__restrict __fmt, ...) +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 4, 5)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 4, 5)) +#endif + ; + +#if _LIBC +/* Returns true if the option OPT is a valid short option. */ +extern int _option_is_short (const struct argp_option *__opt) __THROW; +extern int __option_is_short (const struct argp_option *__opt) __THROW; + +/* Returns true if the option OPT is in fact the last (unused) entry in an + options array. */ +extern int _option_is_end (const struct argp_option *__opt) __THROW; +extern int __option_is_end (const struct argp_option *__opt) __THROW; +#endif + +/* Return the input field for ARGP in the parser corresponding to STATE; used + by the help routines. */ +extern void *_argp_input (const struct argp *__restrict __argp, + const struct argp_state *__restrict __state) + __THROW; +extern void *__argp_input (const struct argp *__restrict __argp, + const struct argp_state *__restrict __state) + __THROW; + +#if !_LIBC || defined __USE_EXTERN_INLINES + +# if !_LIBC +# define __argp_usage argp_usage +# define __argp_state_help argp_state_help +# define __option_is_short _option_is_short +# define __option_is_end _option_is_end +_GL_INLINE_HEADER_BEGIN +# ifndef ARGP_EI +# define ARGP_EI _GL_INLINE +# endif +# endif + +# ifndef ARGP_EI +# define ARGP_EI __extern_inline +# endif + +ARGP_EI void +__argp_usage (const struct argp_state *__state) +{ + __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); +} + +ARGP_EI int +__NTH (__option_is_short (const struct argp_option *__opt)) +{ + if (__opt->flags & OPTION_DOC) + return 0; + else + { + int __key = __opt->key; + return __key > 0 && __key <= UCHAR_MAX && isprint (__key); + } +} + +ARGP_EI int +__NTH (__option_is_end (const struct argp_option *__opt)) +{ + return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; +} + +# if !_LIBC +# undef __argp_usage +# undef __argp_state_help +# undef __option_is_short +# undef __option_is_end +_GL_INLINE_HEADER_END +# endif +#endif /* Use extern inlines. */ + +#ifdef __cplusplus +} +#endif + +#endif /* argp.h */ diff --git a/include/libgnulib/argv-iter.h b/include/libgnulib/argv-iter.h new file mode 100755 index 0000000..8f8823a --- /dev/null +++ b/include/libgnulib/argv-iter.h @@ -0,0 +1,57 @@ +/* Iterate over arguments from argv or --files0-from=FILE + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Definition of _GL_ARG_NONNULL. */ +#include "arg-nonnull.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +struct argv_iterator; + +enum argv_iter_err +{ + AI_ERR_OK = 1, + AI_ERR_EOF, + AI_ERR_MEM, + AI_ERR_READ +}; + +void argv_iter_free (struct argv_iterator *) + _GL_ARG_NONNULL ((1)); + +struct argv_iterator *argv_iter_init_argv (char **argv) + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_DEALLOC (argv_iter_free, 1); +struct argv_iterator *argv_iter_init_stream (FILE *fp) + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_DEALLOC (argv_iter_free, 1); +char *argv_iter (struct argv_iterator *, enum argv_iter_err *) + _GL_ARG_NONNULL ((1, 2)); +size_t argv_iter_n_args (struct argv_iterator const *) + _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/array-mergesort.h b/include/libgnulib/array-mergesort.h new file mode 100755 index 0000000..43be96f --- /dev/null +++ b/include/libgnulib/array-mergesort.h @@ -0,0 +1,281 @@ +/* Stable-sorting of an array using mergesort. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file implements stable sorting of an array, using the mergesort + algorithm. + Worst-case running time for an array of length N is O(N log N). + Unlike the mpsort module, the algorithm here attempts to minimize not + only the number of comparisons, but also the number of copying operations. + + Before including this file, you need to define + ELEMENT The type of every array element. + COMPARE A two-argument macro that takes two 'const ELEMENT *' + pointers and returns a negative, zero, or positive 'int' + value if the element pointed to by the first argument is, + respectively, less, equal, or greater than the element + pointed to by the second argument. + STATIC The storage class of the functions being defined. + STATIC_FROMTO (Optional.) Overrides STATIC for the 'merge_sort_fromto' + function. + Before including this file, you also need to include: + #include + */ + +/* Merge the sorted arrays src1[0..n1-1] and src2[0..n2-1] into + dst[0..n1+n2-1]. In case of ambiguity, put the elements of src1 + before the elements of src2. + n1 and n2 must be > 0. + The arrays src1 and src2 must not overlap the dst array, except that + src1 may be dst[n2..n1+n2-1], or src2 may be dst[n1..n1+n2-1]. */ +static void +merge (const ELEMENT *src1, size_t n1, + const ELEMENT *src2, size_t n2, + ELEMENT *dst) +{ + for (;;) /* while (n1 > 0 && n2 > 0) */ + { + if (COMPARE (src1, src2) <= 0) + { + *dst++ = *src1++; + n1--; + if (n1 == 0) + break; + } + else + { + *dst++ = *src2++; + n2--; + if (n2 == 0) + break; + } + } + /* Here n1 == 0 || n2 == 0 but also n1 > 0 || n2 > 0. */ + if (n1 > 0) + { + if (dst != src1) + do + { + *dst++ = *src1++; + n1--; + } + while (n1 > 0); + } + else /* n2 > 0 */ + { + if (dst != src2) + do + { + *dst++ = *src2++; + n2--; + } + while (n2 > 0); + } +} + +/* Sort src[0..n-1] into dst[0..n-1], using tmp[0..n/2-1] as temporary + (scratch) storage. + The arrays src, dst, tmp must not overlap. */ +#ifdef STATIC_FROMTO +STATIC_FROMTO +#else +STATIC +#endif +void +merge_sort_fromto (const ELEMENT *src, ELEMENT *dst, size_t n, ELEMENT *tmp) +{ + switch (n) + { + case 0: + return; + case 1: + /* Nothing to do. */ + dst[0] = src[0]; + return; + case 2: + /* Trivial case. */ + if (COMPARE (&src[0], &src[1]) <= 0) + { + /* src[0] <= src[1] */ + dst[0] = src[0]; + dst[1] = src[1]; + } + else + { + dst[0] = src[1]; + dst[1] = src[0]; + } + break; + case 3: + /* Simple case. */ + if (COMPARE (&src[0], &src[1]) <= 0) + { + if (COMPARE (&src[1], &src[2]) <= 0) + { + /* src[0] <= src[1] <= src[2] */ + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + } + else if (COMPARE (&src[0], &src[2]) <= 0) + { + /* src[0] <= src[2] < src[1] */ + dst[0] = src[0]; + dst[1] = src[2]; + dst[2] = src[1]; + } + else + { + /* src[2] < src[0] <= src[1] */ + dst[0] = src[2]; + dst[1] = src[0]; + dst[2] = src[1]; + } + } + else + { + if (COMPARE (&src[0], &src[2]) <= 0) + { + /* src[1] < src[0] <= src[2] */ + dst[0] = src[1]; + dst[1] = src[0]; + dst[2] = src[2]; + } + else if (COMPARE (&src[1], &src[2]) <= 0) + { + /* src[1] <= src[2] < src[0] */ + dst[0] = src[1]; + dst[1] = src[2]; + dst[2] = src[0]; + } + else + { + /* src[2] < src[1] < src[0] */ + dst[0] = src[2]; + dst[1] = src[1]; + dst[2] = src[0]; + } + } + break; + default: + { + size_t n1 = n / 2; + size_t n2 = (n + 1) / 2; + /* Note: n1 + n2 = n, n1 <= n2. */ + /* Sort src[n1..n-1] into dst[n1..n-1], scratching tmp[0..n2/2-1]. */ + merge_sort_fromto (src + n1, dst + n1, n2, tmp); + /* Sort src[0..n1-1] into tmp[0..n1-1], scratching dst[0..n1-1]. */ + merge_sort_fromto (src, tmp, n1, dst); + /* Merge the two half results. */ + merge (tmp, n1, dst + n1, n2, dst); + } + break; + } +} + +/* Sort src[0..n-1], using tmp[0..n-1] as temporary (scratch) storage. + The arrays src, tmp must not overlap. */ +STATIC void +merge_sort_inplace (ELEMENT *src, size_t n, ELEMENT *tmp) +{ + switch (n) + { + case 0: + case 1: + /* Nothing to do. */ + return; + case 2: + /* Trivial case. */ + if (COMPARE (&src[0], &src[1]) <= 0) + { + /* src[0] <= src[1] */ + } + else + { + ELEMENT t = src[0]; + src[0] = src[1]; + src[1] = t; + } + break; + case 3: + /* Simple case. */ + if (COMPARE (&src[0], &src[1]) <= 0) + { + if (COMPARE (&src[1], &src[2]) <= 0) + { + /* src[0] <= src[1] <= src[2] */ + } + else if (COMPARE (&src[0], &src[2]) <= 0) + { + /* src[0] <= src[2] < src[1] */ + ELEMENT t = src[1]; + src[1] = src[2]; + src[2] = t; + } + else + { + /* src[2] < src[0] <= src[1] */ + ELEMENT t = src[0]; + src[0] = src[2]; + src[2] = src[1]; + src[1] = t; + } + } + else + { + if (COMPARE (&src[0], &src[2]) <= 0) + { + /* src[1] < src[0] <= src[2] */ + ELEMENT t = src[0]; + src[0] = src[1]; + src[1] = t; + } + else if (COMPARE (&src[1], &src[2]) <= 0) + { + /* src[1] <= src[2] < src[0] */ + ELEMENT t = src[0]; + src[0] = src[1]; + src[1] = src[2]; + src[2] = t; + } + else + { + /* src[2] < src[1] < src[0] */ + ELEMENT t = src[0]; + src[0] = src[2]; + src[2] = t; + } + } + break; + default: + { + size_t n1 = n / 2; + size_t n2 = (n + 1) / 2; + /* Note: n1 + n2 = n, n1 <= n2. */ + /* Sort src[n1..n-1], scratching tmp[0..n2-1]. */ + merge_sort_inplace (src + n1, n2, tmp); + /* Sort src[0..n1-1] into tmp[0..n1-1], scratching tmp[n1..2*n1-1]. */ + merge_sort_fromto (src, tmp, n1, tmp + n1); + /* Merge the two half results. */ + merge (tmp, n1, src + n1, n2, src); + } + break; + } +} + +#undef ELEMENT +#undef COMPARE +#undef STATIC diff --git a/include/libgnulib/assure.h b/include/libgnulib/assure.h new file mode 100755 index 0000000..d650ca1 --- /dev/null +++ b/include/libgnulib/assure.h @@ -0,0 +1,57 @@ +/* Run-time assert-like macros. + + Copyright (C) 2014-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef _GL_ASSURE_H +#define _GL_ASSURE_H + +#include +#include "verify.h" + +/* Evaluate an assertion E that is guaranteed to be true. + If NDEBUG is not defined, abort the program if E is false. + If NDEBUG is defined, the compiler can assume E and behavior is + undefined if E is false, fails to evaluate, or has side effects. + + Unlike standard 'assert', this macro evaluates E even when NDEBUG + is defined, so as to catch typos, avoid some GCC warnings, and + improve performance when E is simple enough. + + Also see the documentation for 'assume' in verify.h. */ + +#ifdef NDEBUG +# define affirm(E) assume (E) +#else +# define affirm(E) assert (E) +#endif + +/* Check E's value at runtime, and report an error and abort if not. + However, do nothing if NDEBUG is defined. + + Unlike standard 'assert', this macro compiles E even when NDEBUG + is defined, so as to catch typos and avoid some GCC warnings. + Unlike 'affirm', it is OK for E to use hard-to-optimize features, + since E is not executed if NDEBUG is defined. */ + +#ifdef NDEBUG +# define assure(E) ((void) (0 && (E))) +#else +# define assure(E) assert (E) +#endif + +#endif diff --git a/include/libgnulib/astrxfrm.h b/include/libgnulib/astrxfrm.h new file mode 100755 index 0000000..e932818 --- /dev/null +++ b/include/libgnulib/astrxfrm.h @@ -0,0 +1,48 @@ +/* Locale dependent string transformation for comparison. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef ASTRXFRM_H +#define ASTRXFRM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Variant of strxfrm() with a calling convention that reduces the number + of strxfrm calls. */ + +/* Transform the string starting at S to a string, in such a way that + comparing S1 and S2 with strcoll() is equivalent to comparing astrxfrm(S1) + and astrxfrm(S2) with strcmp(). + The result of this function depends on the LC_COLLATE category of the + current locale. + If successful: If resultbuf is not NULL and the result fits into *lengthp + bytes, it is put in resultbuf, and resultbuf is returned. Otherwise, a + freshly allocated string is returned. In both cases, *lengthp is set to the + length of the returned string. + Upon failure, return NULL, with errno set. */ +extern char * astrxfrm (const char *s, + char *restrict resultbuf, size_t *lengthp); + + +#ifdef __cplusplus +} +#endif + +#endif /* ASTRXFRM_H */ diff --git a/include/libgnulib/asyncsafe-spin.h b/include/libgnulib/asyncsafe-spin.h new file mode 100755 index 0000000..61cb1b7 --- /dev/null +++ b/include/libgnulib/asyncsafe-spin.h @@ -0,0 +1,69 @@ +/* Spin locks for communication between threads and signal handlers. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +#ifndef _ASYNCSAFE_SPIN_H +#define _ASYNCSAFE_SPIN_H + +/* Usual spin locks are not allowed for communication between threads and signal + handlers, because the pthread_spin_* functions are not async-safe; see + + section 2.4.3 Signal Actions. + + This module provides spin locks with a similar API. It can be used like this, + both in regular multithreaded code and in signal handlers: + + sigset_t saved_mask; + asyncsafe_spin_lock (&lock, &mask, &saved_mask); + do_something_contentious (); + asyncsafe_spin_unlock (&lock, &saved_mask); + + The mask you specify here is the set of signals whose handlers might want to + take the same lock. + + asyncsafe_spin_lock/unlock use pthread_sigmask, to ensure that while a thread + is executing such code, no signal handler will start such code for the same + lock *in the same thread* (because if this happened, the signal handler would + hang!). */ + +#include + +#if defined _WIN32 && ! defined __CYGWIN__ +# include "windows-spin.h" +typedef glwthread_spinlock_t asyncsafe_spinlock_t; +# define ASYNCSAFE_SPIN_INIT GLWTHREAD_SPIN_INIT +#else +typedef unsigned int asyncsafe_spinlock_t; +# define ASYNCSAFE_SPIN_INIT 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +extern void asyncsafe_spin_init (asyncsafe_spinlock_t *lock); +extern void asyncsafe_spin_lock (asyncsafe_spinlock_t *lock, + const sigset_t *mask, sigset_t *saved_mask); +extern void asyncsafe_spin_unlock (asyncsafe_spinlock_t *lock, + const sigset_t *saved_mask); +extern void asyncsafe_spin_destroy (asyncsafe_spinlock_t *lock); + +#ifdef __cplusplus +} +#endif + +#endif /* _ASYNCSAFE_SPIN_H */ diff --git a/include/libgnulib/attribute.h b/include/libgnulib/attribute.h new file mode 100755 index 0000000..186faa5 --- /dev/null +++ b/include/libgnulib/attribute.h @@ -0,0 +1,320 @@ +/* ATTRIBUTE_* macros for using attributes in GCC and similar compilers + + Copyright 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +/* Provide public ATTRIBUTE_* names for the private _GL_ATTRIBUTE_* + macros used within Gnulib. */ + +/* The placement of these attributes depends on the kind of declaration + and, in some cases, also on the programming language (C vs. C++). + + In function declarations and function definitions: + + * ATTRIBUTE_NOTHROW must come after the parameter list. + + * The macros + ATTRIBUTE_CONST + ATTRIBUTE_PURE + DEPRECATED + MAYBE_UNUSED + NODISCARD + REPRODUCIBLE + UNSEQUENCED + must come before the return type, and more precisely: + - In a function declaration/definition without a storage-class + specifier: at the beginning of the declaration/definition. + - In a function declaration/definition with a storage-class + specifier: + - In C: before the storage-class specifier. + - In C++: between the storage-class specifier and the return type. + + * The other macros can be placed + - Either + - In a function declaration/definition without a storage-class + specifier: at the beginning of the declaration/definition. + - In a function declaration/definition with a storage-class + specifier: between the storage-class specifier and the return + type. + - Or after the parameter list, + ∙ but after ATTRIBUTE_NOTHROW if present. + + In other declarations, such as variable declarations: + + * Either + - In C: before the storage-class specifier. + - In C++: between the storage-class specifier and the return type. + Then they apply to all entities that are declared by the declaration. + + * Or immediately after the name of an entity being declared by the + declaration. Then they apply to that entity only. + */ + +#ifndef _GL_ATTRIBUTE_H +#define _GL_ATTRIBUTE_H + + +/* This file defines two types of attributes: + * C23 standard attributes. These have macro names that do not begin with + 'ATTRIBUTE_'. + * Selected GCC attributes; see: + https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html + https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html + https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html + These names begin with 'ATTRIBUTE_' to avoid name clashes. */ + + +/* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_ALWAYS_INLINE, + _GL_ATTRIBUTE_ARTIFICIAL, _GL_ATTRIBUTE_COLD, _GL_ATTRIBUTE_CONST, + _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEPRECATED, _GL_ATTRIBUTE_ERROR, + _GL_ATTRIBUTE_WARNING, _GL_ATTRIBUTE_EXTERNALLY_VISIBLE, + _GL_ATTRIBUTE_FALLTHROUGH, _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_LEAF, + _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_MAY_ALIAS, _GL_ATTRIBUTE_MAYBE_UNUSED, + _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOINLINE, _GL_ATTRIBUTE_NONNULL, + _GL_ATTRIBUTE_NONSTRING, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PACKED, + _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_REPRODUCIBLE, + _GL_ATTRIBUTE_RETURNS_NONNULL, _GL_ATTRIBUTE_SENTINEL, + _GL_ATTRIBUTE_UNSEQUENCED. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + + +/* =============== Attributes for specific kinds of functions =============== */ + +/* Attributes for functions that should not be used. */ + +/* Warn if the entity is used. */ +/* Applies to: + - function, variable, + - struct, union, struct/union member, + - enumeration, enumeration item, + - typedef, + in C++ also: namespace, class, template specialization. */ +#define DEPRECATED _GL_ATTRIBUTE_DEPRECATED + +/* If a function call is not optimized way, warn with MSG. */ +/* Applies to: functions. */ +#define ATTRIBUTE_WARNING(msg) _GL_ATTRIBUTE_WARNING (msg) + +/* If a function call is not optimized way, report an error with MSG. */ +/* Applies to: functions. */ +#define ATTRIBUTE_ERROR(msg) _GL_ATTRIBUTE_ERROR (msg) + + +/* Attributes for memory-allocating functions. */ + +/* The function returns a pointer to freshly allocated memory. */ +/* Applies to: functions. */ +#define ATTRIBUTE_MALLOC _GL_ATTRIBUTE_MALLOC + +/* ATTRIBUTE_ALLOC_SIZE ((N)) - The Nth argument of the function + is the size of the returned memory block. + ATTRIBUTE_ALLOC_SIZE ((M, N)) - Multiply the Mth and Nth arguments + to determine the size of the returned memory block. */ +/* Applies to: functions, pointer to functions, function types. */ +#define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args) + +/* ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. + ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that + can be freed via 'free'; it can be used only after declaring 'free'. */ +/* Applies to: functions. Cannot be used on inline functions. */ +#define ATTRIBUTE_DEALLOC(f, i) _GL_ATTRIBUTE_DEALLOC(f, i) +#define ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC_FREE + +/* Attributes for variadic functions. */ + +/* The variadic function expects a trailing NULL argument. + ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). + ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ +/* Applies to: functions. */ +#define ATTRIBUTE_SENTINEL(pos) _GL_ATTRIBUTE_SENTINEL (pos) + + +/* ================== Attributes for compiler diagnostics ================== */ + +/* Attributes that help the compiler diagnose programmer mistakes. + Some of them may also help for some compiler optimizations. */ + +/* ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) - + The STRING-INDEXth function argument is a format string of style + ARCHETYPE, which is one of: + printf, gnu_printf + scanf, gnu_scanf, + strftime, gnu_strftime, + strfmon, + or the same thing prefixed and suffixed with '__'. + If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK + are suitable for the format string. */ +/* Applies to: functions. */ +#define ATTRIBUTE_FORMAT(spec) _GL_ATTRIBUTE_FORMAT (spec) + +/* ATTRIBUTE_NONNULL ((N1, N2,...)) - Arguments N1, N2,... must not be NULL. + ATTRIBUTE_NONNULL () - All pointer arguments must not be null. */ +/* Applies to: functions. */ +#define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args) + +/* The function's return value is a non-NULL pointer. */ +/* Applies to: functions. */ +#define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL + +/* Warn if the caller does not use the return value, + unless the caller uses something like ignore_value. */ +/* Applies to: function, enumeration, class. */ +#define NODISCARD _GL_ATTRIBUTE_NODISCARD + + +/* Attributes that disable false alarms when the compiler diagnoses + programmer "mistakes". */ + +/* Do not warn if the entity is not used. */ +/* Applies to: + - function, variable, + - struct, union, struct/union member, + - enumeration, enumeration item, + - typedef, + in C++ also: class. */ +#define MAYBE_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED + +/* The contents of a character array is not meant to be NUL-terminated. */ +/* Applies to: struct/union members and variables that are arrays of element + type '[[un]signed] char'. */ +#define ATTRIBUTE_NONSTRING _GL_ATTRIBUTE_NONSTRING + +/* Do not warn if control flow falls through to the immediately + following 'case' or 'default' label. */ +/* Applies to: Empty statement (;), inside a 'switch' statement. */ +#define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH + + +/* ================== Attributes for debugging information ================== */ + +/* Attributes regarding debugging information emitted by the compiler. */ + +/* Omit the function from stack traces when debugging. */ +/* Applies to: functions. */ +#define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL + +/* Make the entity visible to debuggers etc., even with '-fwhole-program'. */ +/* Applies to: functions, variables. */ +#define ATTRIBUTE_EXTERNALLY_VISIBLE _GL_ATTRIBUTE_EXTERNALLY_VISIBLE + + +/* ========== Attributes that mainly direct compiler optimizations ========== */ + +/* The function does not throw exceptions. */ +/* Applies to: functions. */ +/* After a function's parameter list, this attribute must come first, before + other attributes. */ +#define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW + +/* Do not inline the function. */ +/* Applies to: functions. */ +#define ATTRIBUTE_NOINLINE _GL_ATTRIBUTE_NOINLINE + +/* Always inline the function, and report an error if the compiler + cannot inline. */ +/* Applies to: functions. */ +#define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE + +/* It is OK for a compiler to move calls to the function and to omit + calls to the function if another call has the same arguments or the + result is not used. + This attribute is safe for a function that neither depends on + nor affects state, and always returns exactly once - + e.g., does not raise an exception, call longjmp, or loop forever. + (This attribute is stricter than ATTRIBUTE_PURE because the + function cannot observe state. It is stricter than UNSEQUENCED + because the function must return exactly once and cannot depend on + state addressed by its arguments.) */ +/* Applies to: functions. */ +#define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST + +/* It is OK for a compiler to move calls to the function and to omit duplicate + calls to the function with the same arguments, so long as the state + addressed by its arguments is the same. + This attribute is safe for a function that is effectless, idempotent, + stateless, and independent; see ISO C 23 § 6.7.12.7 for a definition of + these terms. + (This attribute is stricter than REPRODUCIBLE because the function + must be stateless and independent. It is looser than ATTRIBUTE_CONST + because the function need not return exactly once and can depend + on state addressed by its arguments.) + See also and + . */ +/* Applies to: functions, pointer to functions, function type. */ +#define UNSEQUENCED _GL_ATTRIBUTE_UNSEQUENCED + +/* It is OK for a compiler to move calls to the function and to omit + calls to the function if another call has the same arguments or the + result is not used, and if observable state is the same. + This attribute is safe for a function that does not affect observable state + and always returns exactly once. + (This attribute is looser than ATTRIBUTE_CONST because the function + can depend on observable state. It is stricter than REPRODUCIBLE + because the function must return exactly once and cannot affect + state addressed by its arguments.) */ +/* Applies to: functions. */ +#define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE + +/* It is OK for a compiler to move calls to the function and to omit duplicate + calls to the function with the same arguments, so long as the state + addressed by its arguments is the same and is updated in time for + the rest of the program. + This attribute is safe for a function that is effectless and idempotent; see + ISO C 23 § 6.7.12.7 for a definition of these terms. + (This attribute is looser than UNSEQUENCED because the function need + not be stateless and idempotent. It is looser than ATTRIBUTE_PURE + because the function need not return exactly once and can affect + state addressed by its arguments.) + See also and + . */ +/* Applies to: functions, pointer to functions, function type. */ +#define REPRODUCIBLE _GL_ATTRIBUTE_REPRODUCIBLE + +/* The function is rarely executed. */ +/* Applies to: functions. */ +#define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD + +/* If called from some other compilation unit, the function executes + code from that unit only by return or by exception handling, + letting the compiler optimize that unit more aggressively. */ +/* Applies to: functions. */ +#define ATTRIBUTE_LEAF _GL_ATTRIBUTE_LEAF + +/* For struct members: The member has the smallest possible alignment. + For struct, union, class: All members have the smallest possible alignment, + minimizing the memory required. */ +/* Applies to: struct members, struct, union, + in C++ also: class. */ +#define ATTRIBUTE_PACKED _GL_ATTRIBUTE_PACKED + + +/* ================ Attributes that make invalid code valid ================ */ + +/* Attributes that prevent fatal compiler optimizations for code that is not + fully ISO C compliant. */ + +/* Pointers to the type may point to the same storage as pointers to + other types, thus disabling strict aliasing optimization. */ +/* Applies to: types. */ +#define ATTRIBUTE_MAY_ALIAS _GL_ATTRIBUTE_MAY_ALIAS + + +#endif /* _GL_ATTRIBUTE_H */ diff --git a/include/libgnulib/backup-internal.h b/include/libgnulib/backup-internal.h new file mode 100755 index 0000000..1769702 --- /dev/null +++ b/include/libgnulib/backup-internal.h @@ -0,0 +1,22 @@ +/* Backup files. + + Copyright (C) 2017-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "backupfile.h" +#include + +extern char *backupfile_internal (int, char const *, enum backup_type, bool) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; diff --git a/include/libgnulib/backupfile.h b/include/libgnulib/backupfile.h new file mode 100755 index 0000000..228b049 --- /dev/null +++ b/include/libgnulib/backupfile.h @@ -0,0 +1,73 @@ +/* backupfile.h -- declarations for making Emacs style backup file names + + Copyright (C) 1990-1992, 1997-1999, 2003-2004, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#ifndef BACKUPFILE_H_ +#define BACKUPFILE_H_ + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get AT_FDCWD, as a convenience for users of this file. */ +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* When to make backup files. */ +enum backup_type +{ + /* Never make backups. */ + no_backups, + + /* Make simple backups of every file. */ + simple_backups, + + /* Make numbered backups of files that already have numbered backups, + and simple backups of the others. */ + numbered_existing_backups, + + /* Make numbered backups of every file. */ + numbered_backups +}; + +#define VALID_BACKUP_TYPE(Type) \ + ((unsigned int) (Type) <= numbered_backups) + +extern char const *simple_backup_suffix; + +void set_simple_backup_suffix (char const *); +char *backup_file_rename (int, char const *, enum backup_type) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; +char *find_backup_file_name (int, char const *, enum backup_type) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; +enum backup_type get_version (char const *context, char const *arg); +enum backup_type xget_version (char const *context, char const *arg); + + +#ifdef __cplusplus +} +#endif + +#endif /* ! BACKUPFILE_H_ */ diff --git a/include/libgnulib/base32.h b/include/libgnulib/base32.h new file mode 100755 index 0000000..8c10948 --- /dev/null +++ b/include/libgnulib/base32.h @@ -0,0 +1,99 @@ +/* base32.h -- Encode binary data using printable characters. + Copyright (C) 2004-2006, 2009-2024 Free Software Foundation, Inc. + Adapted from Simon Josefsson's base64 code by Gijs van Tulder. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef BASE32_H +#define BASE32_H + +/* This file uses _GL_INLINE_HEADER_BEGIN. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get idx_t. */ +#include + +/* Pacify GCC in isubase32. */ +#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) && !defined __clang__ +# pragma GCC diagnostic ignored "-Wtype-limits" +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef BASE32_INLINE +# define BASE32_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* This uses that the expression (n+(k-1))/k means the smallest + integer >= n/k, i.e., the ceiling of n/k. */ +#define BASE32_LENGTH(inlen) ((((inlen) + 4) / 5) * 8) + +struct base32_decode_context +{ + int i; + char buf[8]; +}; + +extern signed char const base32_to_int[256]; + +BASE32_INLINE bool +isubase32 (unsigned char ch) +{ + return ch < sizeof base32_to_int && 0 <= base32_to_int[ch]; +} + +BASE32_INLINE bool +isbase32 (char ch) +{ + return isubase32 (ch); +} + +extern void base32_encode (const char *restrict in, idx_t inlen, + char *restrict out, idx_t outlen); + +extern idx_t base32_encode_alloc (const char *in, idx_t inlen, char **out); + +/* Initialize decode-context buffer, CTX. */ +BASE32_INLINE void +base32_decode_ctx_init (struct base32_decode_context *ctx) +{ + ctx->i = 0; +} + +extern bool base32_decode_ctx (struct base32_decode_context *ctx, + const char *restrict in, idx_t inlen, + char *restrict out, idx_t *outlen); + +extern bool base32_decode_alloc_ctx (struct base32_decode_context *ctx, + const char *in, idx_t inlen, + char **out, idx_t *outlen); + +#define base32_decode(in, inlen, out, outlen) \ + base32_decode_ctx (NULL, in, inlen, out, outlen) + +#define base32_decode_alloc(in, inlen, out, outlen) \ + base32_decode_alloc_ctx (NULL, in, inlen, out, outlen) + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* BASE32_H */ diff --git a/include/libgnulib/base64.h b/include/libgnulib/base64.h new file mode 100755 index 0000000..562ba97 --- /dev/null +++ b/include/libgnulib/base64.h @@ -0,0 +1,99 @@ +/* base64.h -- Encode binary data using printable characters. + Copyright (C) 2004-2006, 2009-2024 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef BASE64_H +#define BASE64_H + +/* This file uses _GL_INLINE_HEADER_BEGIN. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get idx_t. */ +#include + +/* Pacify GCC in isubase64. */ +#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) && !defined __clang__ +# pragma GCC diagnostic ignored "-Wtype-limits" +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef BASE64_INLINE +# define BASE64_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* This uses that the expression (n+(k-1))/k means the smallest + integer >= n/k, i.e., the ceiling of n/k. */ +#define BASE64_LENGTH(inlen) ((((inlen) + 2) / 3) * 4) + +struct base64_decode_context +{ + int i; + char buf[4]; +}; + +extern signed char const base64_to_int[256]; + +BASE64_INLINE bool +isubase64 (unsigned char ch) +{ + return ch < sizeof base64_to_int && 0 <= base64_to_int[ch]; +} + +BASE64_INLINE bool +isbase64 (char ch) +{ + return isubase64 (ch); +} + +extern void base64_encode (const char *restrict in, idx_t inlen, + char *restrict out, idx_t outlen); + +extern idx_t base64_encode_alloc (const char *in, idx_t inlen, char **out); + +/* Initialize decode-context buffer, CTX. */ +BASE64_INLINE void +base64_decode_ctx_init (struct base64_decode_context *ctx) +{ + ctx->i = 0; +} + +extern bool base64_decode_ctx (struct base64_decode_context *ctx, + const char *restrict in, idx_t inlen, + char *restrict out, idx_t *outlen); + +extern bool base64_decode_alloc_ctx (struct base64_decode_context *ctx, + const char *in, idx_t inlen, + char **out, idx_t *outlen); + +#define base64_decode(in, inlen, out, outlen) \ + base64_decode_ctx (NULL, in, inlen, out, outlen) + +#define base64_decode_alloc(in, inlen, out, outlen) \ + base64_decode_alloc_ctx (NULL, in, inlen, out, outlen) + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* BASE64_H */ diff --git a/include/libgnulib/basename-lgpl.h b/include/libgnulib/basename-lgpl.h new file mode 100755 index 0000000..2a56be9 --- /dev/null +++ b/include/libgnulib/basename-lgpl.h @@ -0,0 +1,83 @@ +/* Extract the last component (base name) of a file name. + + Copyright (C) 1998, 2001, 2003-2006, 2009-2024 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _BASENAME_LGPL_H +#define _BASENAME_LGPL_H + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT +# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return the address of the last file name component of FILENAME. + If FILENAME has some trailing slash(es), they are considered to be + part of the last component. + If FILENAME has no relative file name components because it is a file + system root, return the empty string. + Examples: + FILENAME RESULT + "foo.c" "foo.c" + "foo/bar.c" "bar.c" + "/foo/bar.c" "bar.c" + "foo/bar/" "bar/" + "foo/bar//" "bar//" + "/" "" + "//" "" + "" "" + The return value is a tail of the given FILENAME; do NOT free() it! */ + +/* This function was traditionally called 'basename', but we avoid this + function name because + * Various platforms have different functions in their libc. + In particular, the glibc basename(), defined in , does + not consider trailing slashes to be part of the component: + FILENAME RESULT + "foo/bar/" "" + "foo/bar//" "" + * The 'basename' command eliminates trailing slashes and for a root + produces a non-empty result: + FILENAME RESULT + "foo/bar/" "bar" + "foo/bar//" "bar" + "/" "/" + "//" "/" + */ +extern char *last_component (char const *filename) _GL_ATTRIBUTE_PURE; + +/* Return the length of the basename FILENAME. + Typically FILENAME is the value returned by base_name or last_component. + Act like strlen (FILENAME), except omit all trailing slashes. */ +extern size_t base_len (char const *filename) _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _BASENAME_LGPL_H */ diff --git a/include/libgnulib/bcp47.h b/include/libgnulib/bcp47.h new file mode 100755 index 0000000..3a044df --- /dev/null +++ b/include/libgnulib/bcp47.h @@ -0,0 +1,75 @@ +/* Support for locale names in BCP 47 syntax. + Copyright (C) 2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2024. */ + +#ifndef _BCP47_H +#define _BCP47_H + +/* A locale name can exist in three possible forms: + + * The XPG syntax + language[_territory][.codeset][@modifier] + where + - The language is an ISO 639 (two-letter) language code. + - The territory is an ISO 3166 (two-letter) country code. + - The codeset is typically UTF-8. + - The supported @modifiers are usually something like + @euro + a script indicator, such as: @latin, @cyrillic, @devanagari + + * The locale name understood by setlocale(). + On glibc and many other Unix-like systems, this is the XPG syntax. + On native Windows, it is similar to XPG syntax, with English names + (instead of ISO codes) for the language and territory and with a + number for the codeset (e.g. 65001 for UTF-8). + + * The BCP 47 syntax + language[-script][-region]{-variant}*{-extension}* + defined in + + = + which consists of RFC 5646 and RFC 4647. + See also . + Note: The BCP 47 syntax does not include a codeset. + + This file provides conversions between the XPG syntax and the BCP 47 + syntax. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Required size of buffer for a locale name. */ +#define BCP47_MAX 100 + +/* Converts a locale name in XPG syntax to a locale name in BCP 47 syntax. + Returns the result in bcp47, which must be at least BCP47_MAX bytes + large. */ +extern void xpg_to_bcp47 (char *bcp47, const char *xpg); + +/* Converts a locale name in BCP 47 syntax (optionally with a codeset) + to a locale name in XPG syntax. + The specified codeset may be NULL. + Returns the result in xpg, which must be at least BCP47_MAX bytes + large. */ +extern void bcp47_to_xpg (char *xpg, const char *bcp47, const char *codeset); + +#ifdef __cplusplus +} +#endif + +#endif /* _BCP47_H */ diff --git a/include/libgnulib/binary-io.h b/include/libgnulib/binary-io.h new file mode 100755 index 0000000..1da018f --- /dev/null +++ b/include/libgnulib/binary-io.h @@ -0,0 +1,89 @@ +/* Binary mode I/O. + Copyright (C) 2001, 2003, 2005, 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _BINARY_H +#define _BINARY_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* For systems that distinguish between text and binary I/O. + O_BINARY is guaranteed by the gnulib . */ +#include + +/* The MSVC7 doesn't like to be included after '#define fileno ...', + so we include it here first. */ +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef BINARY_IO_INLINE +# define BINARY_IO_INLINE _GL_INLINE +#endif + +#if O_BINARY +# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ +# include /* declares setmode() */ +# define __gl_setmode setmode +# else +# define __gl_setmode _setmode +# undef fileno +# define fileno _fileno +# endif +#else + /* On reasonable systems, binary I/O is the only choice. */ + /* Use a function rather than a macro, to avoid gcc warnings + "warning: statement with no effect". */ +BINARY_IO_INLINE int +__gl_setmode (_GL_UNUSED int fd, _GL_UNUSED int mode) +{ + return O_BINARY; +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Set FD's mode to MODE, which should be either O_TEXT or O_BINARY. + Return the old mode if successful, -1 (setting errno) on failure. + Ordinarily this function would be called 'setmode', since that is + its old name on MS-Windows, but it is called 'set_binary_mode' here + to avoid colliding with a BSD function of another name. */ + +#if defined __DJGPP__ || defined __EMX__ +extern int set_binary_mode (int fd, int mode); +#else +BINARY_IO_INLINE int +set_binary_mode (int fd, int mode) +{ + return __gl_setmode (fd, mode); +} +#endif + +/* This macro is obsolescent. */ +#define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY)) + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _BINARY_H */ diff --git a/include/libgnulib/bitrotate.h b/include/libgnulib/bitrotate.h new file mode 100755 index 0000000..dd3afa6 --- /dev/null +++ b/include/libgnulib/bitrotate.h @@ -0,0 +1,150 @@ +/* bitrotate.h - Rotate bits in integers + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Simon Josefsson , 2008. */ + +#ifndef _GL_BITROTATE_H +#define _GL_BITROTATE_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef BITROTATE_INLINE +# define BITROTATE_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef UINT64_MAX +/* Given an unsigned 64-bit argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 and + 63 inclusive. */ +BITROTATE_INLINE uint64_t +rotl64 (uint64_t x, int n) +{ + return ((x << n) | (x >> (64 - n))) & UINT64_MAX; +} + +/* Given an unsigned 64-bit argument X, return the value corresponding + to rotating the bits N steps to the right. N must be between 1 to + 63 inclusive.*/ +BITROTATE_INLINE uint64_t +rotr64 (uint64_t x, int n) +{ + return ((x >> n) | (x << (64 - n))) & UINT64_MAX; +} +#endif + +/* Given an unsigned 32-bit argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 and + 31 inclusive. */ +BITROTATE_INLINE uint32_t +rotl32 (uint32_t x, int n) +{ + return ((x << n) | (x >> (32 - n))) & UINT32_MAX; +} + +/* Given an unsigned 32-bit argument X, return the value corresponding + to rotating the bits N steps to the right. N must be between 1 to + 31 inclusive.*/ +BITROTATE_INLINE uint32_t +rotr32 (uint32_t x, int n) +{ + return ((x >> n) | (x << (32 - n))) & UINT32_MAX; +} + +/* Given a size_t argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 and + (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ +BITROTATE_INLINE size_t +rotl_sz (size_t x, int n) +{ + return ((x << n) | (x >> ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; +} + +/* Given a size_t argument X, return the value corresponding + to rotating the bits N steps to the right. N must be between 1 to + (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ +BITROTATE_INLINE size_t +rotr_sz (size_t x, int n) +{ + return ((x >> n) | (x << ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; +} + +/* Given an unsigned 16-bit argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 to + 15 inclusive, but on most relevant targets N can also be 0 and 16 + because 'int' is at least 32 bits and the arguments must widen + before shifting. */ +BITROTATE_INLINE uint16_t +rotl16 (uint16_t x, int n) +{ + return (((unsigned int) x << n) | ((unsigned int) x >> (16 - n))) + & UINT16_MAX; +} + +/* Given an unsigned 16-bit argument X, return the value corresponding + to rotating the bits N steps to the right. N must be in 1 to 15 + inclusive, but on most relevant targets N can also be 0 and 16 + because 'int' is at least 32 bits and the arguments must widen + before shifting. */ +BITROTATE_INLINE uint16_t +rotr16 (uint16_t x, int n) +{ + return (((unsigned int) x >> n) | ((unsigned int) x << (16 - n))) + & UINT16_MAX; +} + +/* Given an unsigned 8-bit argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 to 7 + inclusive, but on most relevant targets N can also be 0 and 8 + because 'int' is at least 32 bits and the arguments must widen + before shifting. */ +BITROTATE_INLINE uint8_t +rotl8 (uint8_t x, int n) +{ + return (((unsigned int) x << n) | ((unsigned int) x >> (8 - n))) & UINT8_MAX; +} + +/* Given an unsigned 8-bit argument X, return the value corresponding + to rotating the bits N steps to the right. N must be in 1 to 7 + inclusive, but on most relevant targets N can also be 0 and 8 + because 'int' is at least 32 bits and the arguments must widen + before shifting. */ +BITROTATE_INLINE uint8_t +rotr8 (uint8_t x, int n) +{ + return (((unsigned int) x >> n) | ((unsigned int) x << (8 - n))) & UINT8_MAX; +} + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_BITROTATE_H */ diff --git a/include/libgnulib/bitset.h b/include/libgnulib/bitset.h new file mode 100755 index 0000000..975f31d --- /dev/null +++ b/include/libgnulib/bitset.h @@ -0,0 +1,411 @@ +/* Generic bitsets. + + Copyright (C) 2002-2004, 2009-2015, 2018-2024 Free Software Foundation, Inc. + + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). + + 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 3 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, see . */ + +#ifndef _GL_BITSET_H +#define _GL_BITSET_H + +/* This file is the public interface to the bitset abstract data type. + Only use the functions and macros defined in this file. */ + +/* This file uses _GL_ATTRIBUTE_DEALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#include "bitset/base.h" +#include "obstack.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Attributes used to select a bitset implementation. */ +enum bitset_attr {BITSET_FIXED = 1, /* Bitset size fixed. */ + BITSET_VARIABLE = 2, /* Bitset size variable. */ + BITSET_DENSE = 4, /* Bitset dense. */ + BITSET_SPARSE = 8, /* Bitset sparse. */ + BITSET_FRUGAL = 16, /* Prefer most compact. */ + BITSET_GREEDY = 32}; /* Prefer fastest at memory expense. */ + +typedef unsigned bitset_attrs; + +/* The contents of the union should be considered to be private. + While I would like to make this union opaque, it needs to be + visible for the inline bit set/test functions, and for delegation + to the proper implementation. */ +union bitset_union +{ + /* This must be the first member of every other structure that is a + member of this union. */ + struct bbitset_struct b; /* Base bitset data. */ + + struct abitset_struct + { + struct bbitset_struct b; + bitset_word words[1]; /* The array of bits. */ + } a; + + struct tbitset_struct + { + struct bbitset_struct b; + bitset_windex size; /* Number of elements. */ + struct tbitset_elt_struct **elts; /* Expanding array of ptrs to elts. */ + } e; + + struct lbitset_struct + { + struct bbitset_struct b; + struct lbitset_elt_struct *head; /* First element in linked list. */ + struct lbitset_elt_struct *tail; /* Last element in linked list. */ + } l; + + struct bitset_stats_struct + { + struct bbitset_struct b; + bitset bset; + } s; + + struct vbitset_struct + { + struct bbitset_struct b; + bitset_windex size; /* Allocated size of array. */ + } v; +}; + + +/* The contents of this structure should be considered private. + It is used for iterating over set bits. */ +typedef struct +{ + bitset_bindex list[BITSET_LIST_SIZE]; + bitset_bindex next; + bitset_bindex num; + bitset_bindex i; +} bitset_iterator; + + +/* Free bitset. Do nothing if NULL. */ +void bitset_free (bitset); + +/* Return bytes required for bitset of desired type and size. */ +size_t bitset_bytes (enum bitset_type, bitset_bindex); + +/* Initialise a bitset with desired type and size. */ +bitset bitset_init (bitset, bitset_bindex, enum bitset_type); + +/* Select an implementation type based on the desired bitset size + and attributes. */ +enum bitset_type bitset_type_choose (bitset_bindex, bitset_attrs); + +/* Create a bitset of desired type and size. The bitset is zeroed. */ +bitset bitset_alloc (bitset_bindex, enum bitset_type) + _GL_ATTRIBUTE_DEALLOC (bitset_free, 1); + +/* Free bitset allocated on obstack. Do nothing if NULL. */ +void bitset_obstack_free (bitset); + +/* Create a bitset of desired type and size using an obstack. The + bitset is zeroed. */ +bitset bitset_obstack_alloc (struct obstack *bobstack, + bitset_bindex, enum bitset_type) + _GL_ATTRIBUTE_DEALLOC (bitset_obstack_free, 1); + +/* Create a bitset of desired size and attributes. The bitset is zeroed. */ +bitset bitset_create (bitset_bindex, bitset_attrs) + _GL_ATTRIBUTE_DEALLOC (bitset_free, 1); + +/* Return bitset type. */ +enum bitset_type bitset_type_get (bitset); + +/* Return bitset type name. */ +const char *bitset_type_name_get (bitset); + + +/* Set bit BITNO in bitset BSET. */ +static inline void +bitset_set (bitset bset, bitset_bindex bitno) +{ + bitset_windex windex = bitno / BITSET_WORD_BITS; + bitset_windex offset = windex - bset->b.cindex; + + if (offset < bset->b.csize) + bset->b.cdata[offset] |= ((bitset_word) 1 << (bitno % BITSET_WORD_BITS)); + else + BITSET_SET_ (bset, bitno); +} + + +/* Reset bit BITNO in bitset BSET. */ +static inline void +bitset_reset (bitset bset, bitset_bindex bitno) +{ + bitset_windex windex = bitno / BITSET_WORD_BITS; + bitset_windex offset = windex - bset->b.cindex; + + if (offset < bset->b.csize) + bset->b.cdata[offset] &= ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS)); + else + BITSET_RESET_ (bset, bitno); +} + + +/* Test bit BITNO in bitset BSET. */ +static inline bool +bitset_test (bitset bset, bitset_bindex bitno) +{ + bitset_windex windex = bitno / BITSET_WORD_BITS; + bitset_windex offset = windex - bset->b.cindex; + + if (offset < bset->b.csize) + return (bset->b.cdata[offset] >> (bitno % BITSET_WORD_BITS)) & 1; + else + return BITSET_TEST_ (bset, bitno); +} + + +/* Toggle bit BITNO in bitset BSET and return non-zero if now set. */ +#define bitset_toggle(bset, bitno) BITSET_TOGGLE_ (bset, bitno) + +/* Return size in bits of bitset SRC. */ +#define bitset_size(SRC) BITSET_SIZE_ (SRC) + +/* Change size in bits of bitset. New bits are zeroed. Return + SIZE. */ +#define bitset_resize(DST, SIZE) BITSET_RESIZE_ (DST, SIZE) + +/* Return number of bits set in bitset SRC. */ +#define bitset_count(SRC) BITSET_COUNT_ (SRC) + + +/* Return SRC == 0. */ +#define bitset_empty_p(SRC) BITSET_EMPTY_P_ (SRC) + +/* DST = ~0. */ +#define bitset_ones(DST) BITSET_ONES_ (DST) + +/* DST = 0. */ +#define bitset_zero(DST) BITSET_ZERO_ (DST) + + + +/* DST = SRC. */ +#define bitset_copy(DST, SRC) BITSET_COPY_ (DST, SRC) + +/* Return DST & SRC == 0. */ +#define bitset_disjoint_p(DST, SRC) BITSET_DISJOINT_P_ (DST, SRC) + +/* Return DST == SRC. */ +#define bitset_equal_p(DST, SRC) BITSET_EQUAL_P_ (DST, SRC) + +/* DST = ~SRC. */ +#define bitset_not(DST, SRC) BITSET_NOT_ (DST, SRC) + +/* Return DST == DST | SRC. */ +#define bitset_subset_p(DST, SRC) BITSET_SUBSET_P_ (DST, SRC) + + + +/* DST = SRC1 & SRC2. */ +#define bitset_and(DST, SRC1, SRC2) BITSET_AND_ (DST, SRC1, SRC2) + +/* DST = SRC1 & SRC2. Return non-zero if DST != SRC1 & SRC2. */ +#define bitset_and_cmp(DST, SRC1, SRC2) BITSET_AND_CMP_ (DST, SRC1, SRC2) + +/* DST = SRC1 & ~SRC2. */ +#define bitset_andn(DST, SRC1, SRC2) BITSET_ANDN_ (DST, SRC1, SRC2) + +/* DST = SRC1 & ~SRC2. Return non-zero if DST != SRC1 & ~SRC2. */ +#define bitset_andn_cmp(DST, SRC1, SRC2) BITSET_ANDN_CMP_ (DST, SRC1, SRC2) + +/* DST = SRC1 | SRC2. */ +#define bitset_or(DST, SRC1, SRC2) BITSET_OR_ (DST, SRC1, SRC2) + +/* DST = SRC1 | SRC2. Return non-zero if DST != SRC1 | SRC2. */ +#define bitset_or_cmp(DST, SRC1, SRC2) BITSET_OR_CMP_ (DST, SRC1, SRC2) + +/* DST = SRC1 ^ SRC2. */ +#define bitset_xor(DST, SRC1, SRC2) BITSET_XOR_ (DST, SRC1, SRC2) + +/* DST = SRC1 ^ SRC2. Return non-zero if DST != SRC1 ^ SRC2. */ +#define bitset_xor_cmp(DST, SRC1, SRC2) BITSET_XOR_CMP_ (DST, SRC1, SRC2) + + + +/* DST = (SRC1 & SRC2) | SRC3. */ +#define bitset_and_or(DST, SRC1, SRC2, SRC3) \ + BITSET_AND_OR_ (DST, SRC1, SRC2, SRC3) + +/* DST = (SRC1 & SRC2) | SRC3. Return non-zero if + DST != (SRC1 & SRC2) | SRC3. */ +#define bitset_and_or_cmp(DST, SRC1, SRC2, SRC3) \ + BITSET_AND_OR_CMP_ (DST, SRC1, SRC2, SRC3) + +/* DST = (SRC1 & ~SRC2) | SRC3. */ +#define bitset_andn_or(DST, SRC1, SRC2, SRC3) \ + BITSET_ANDN_OR_ (DST, SRC1, SRC2, SRC3) + +/* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if + DST != (SRC1 & ~SRC2) | SRC3. */ +#define bitset_andn_or_cmp(DST, SRC1, SRC2, SRC3) \ + BITSET_ANDN_OR_CMP_ (DST, SRC1, SRC2, SRC3) + +/* DST = (SRC1 | SRC2) & SRC3. */ +#define bitset_or_and(DST, SRC1, SRC2, SRC3)\ + BITSET_OR_AND_ (DST, SRC1, SRC2, SRC3) + +/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if + DST != (SRC1 | SRC2) & SRC3. */ +#define bitset_or_and_cmp(DST, SRC1, SRC2, SRC3)\ + BITSET_OR_AND_CMP_ (DST, SRC1, SRC2, SRC3) + +/* Find list of up to NUM bits set in BSET starting from and including + *NEXT. Return with actual number of bits found and with *NEXT + indicating where search stopped. */ +#define bitset_list(BSET, LIST, NUM, NEXT) \ + BITSET_LIST_ (BSET, LIST, NUM, NEXT) + +/* Find reverse list of up to NUM bits set in BSET starting from and + including NEXT. Return with actual number of bits found and with + *NEXT indicating where search stopped. */ +#define bitset_list_reverse(BSET, LIST, NUM, NEXT) \ + BITSET_LIST_REVERSE_ (BSET, LIST, NUM, NEXT) + +/* Return true if both bitsets are of the same type and size. */ +bool bitset_compatible_p (bitset bset1, bitset bset2); + +/* Find next bit set in SRC starting from and including BITNO. + Return BITSET_BINDEX_MAX if SRC empty. */ +bitset_bindex bitset_next (bitset src, bitset_bindex bitno); + +/* Find previous bit set in SRC starting from and including BITNO. + Return BITSET_BINDEX_MAX if SRC empty. */ +bitset_bindex bitset_prev (bitset src, bitset_bindex bitno); + +/* Find first set bit. + Return BITSET_BINDEX_MAX if SRC empty. */ +bitset_bindex bitset_first (bitset src); + +/* Find last set bit. + Return BITSET_BINDEX_MAX if SRC empty. */ +bitset_bindex bitset_last (bitset src); + +/* Return nonzero if this is the only set bit. */ +bool bitset_only_set_p (bitset, bitset_bindex); + +/* Dump bitset. */ +void bitset_dump (FILE *, bitset); + +/* Loop over all elements of BSET, starting with MIN, setting INDEX + to the index of each set bit. For example, the following will print + the bits set in a bitset: + + bitset_bindex i; + bitset_iterator iter; + + BITSET_FOR_EACH (iter, src, i, 0) + printf ("%lu ", (unsigned long) i); +*/ +#define BITSET_FOR_EACH(ITER, BSET, INDEX, MIN) \ + for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \ + (ITER.num == BITSET_LIST_SIZE) \ + && (ITER.num = bitset_list (BSET, ITER.list, \ + BITSET_LIST_SIZE, &ITER.next));) \ + for (ITER.i = 0; \ + ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1); \ + ITER.i++) + + +/* Loop over all elements of BSET, in reverse order starting with + MIN, setting INDEX to the index of each set bit. For example, the + following will print the bits set in a bitset in reverse order: + + bitset_bindex i; + bitset_iterator iter; + + BITSET_FOR_EACH_REVERSE (iter, src, i, 0) + printf ("%lu ", (unsigned long) i); +*/ +#define BITSET_FOR_EACH_REVERSE(ITER, BSET, INDEX, MIN) \ + for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \ + (ITER.num == BITSET_LIST_SIZE) \ + && (ITER.num = bitset_list_reverse (BSET, ITER.list, \ + BITSET_LIST_SIZE, &ITER.next));) \ + for (ITER.i = 0; \ + ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1); \ + ITER.i++) + + +/* Define set operations in terms of logical operations. */ + +#define bitset_diff(DST, SRC1, SRC2) bitset_andn (DST, SRC1, SRC2) +#define bitset_diff_cmp(DST, SRC1, SRC2) bitset_andn_cmp (DST, SRC1, SRC2) + +#define bitset_intersection(DST, SRC1, SRC2) bitset_and (DST, SRC1, SRC2) +#define bitset_intersection_cmp(DST, SRC1, SRC2) bitset_and_cmp (DST, SRC1, SRC2) + +#define bitset_union(DST, SRC1, SRC2) bitset_or (DST, SRC1, SRC2) +#define bitset_union_cmp(DST, SRC1, SRC2) bitset_or_cmp (DST, SRC1, SRC2) + +/* Symmetrical difference. */ +#define bitset_symdiff(DST, SRC1, SRC2) bitset_xor (DST, SRC1, SRC2) +#define bitset_symdiff_cmp(DST, SRC1, SRC2) bitset_xor_cmp (DST, SRC1, SRC2) + +/* Union of difference. */ +#define bitset_diff_union(DST, SRC1, SRC2, SRC3) \ + bitset_andn_or (DST, SRC1, SRC2, SRC3) +#define bitset_diff_union_cmp(DST, SRC1, SRC2, SRC3) \ + bitset_andn_or_cmp (DST, SRC1, SRC2, SRC3) + + +/* Release any memory tied up with bitsets. */ +void bitset_release_memory (void); + +/* Enable bitset stats gathering. */ +void bitset_stats_enable (void); + +/* Disable bitset stats gathering. */ +void bitset_stats_disable (void); + +/* Read bitset stats file of accumulated stats. */ +void bitset_stats_read (const char *file_name); + +/* Write bitset stats file of accumulated stats. */ +void bitset_stats_write (const char *file_name); + +/* Dump bitset stats. */ +void bitset_stats_dump (FILE *); + +/* Function to debug bitset from debugger. */ +void debug_bitset (bitset); + +/* Function to debug bitset stats from debugger. */ +void debug_bitset_stats (void); + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_BITSET_H */ diff --git a/include/libgnulib/bitset/array.h b/include/libgnulib/bitset/array.h new file mode 100755 index 0000000..e6d3f1e --- /dev/null +++ b/include/libgnulib/bitset/array.h @@ -0,0 +1,30 @@ +/* Functions to support abitsets. + + Copyright (C) 2002, 2004, 2009-2015, 2018-2024 Free Software Foundation, + Inc. + + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). + + 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 3 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, see . */ + +#ifndef _BITSET_ARRAY_H +#define _BITSET_ARRAY_H + +#include "bitset.h" + +size_t abitset_bytes (bitset_bindex); + +bitset abitset_init (bitset, bitset_bindex); + +#endif diff --git a/include/libgnulib/bitset/base.h b/include/libgnulib/bitset/base.h new file mode 100755 index 0000000..7424cb1 --- /dev/null +++ b/include/libgnulib/bitset/base.h @@ -0,0 +1,336 @@ +/* Base bitset stuff. + + Copyright (C) 2002-2004, 2006, 2009-2015, 2018-2024 Free Software + Foundation, Inc. + + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). + + 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 3 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, see . */ + +#ifndef _BITSET_BASE_H +#define _BITSET_BASE_H + +#include +#include +#include /* because Gnulib's may '#define free ...' */ +#include /* ffsl */ + +#include "attribute.h" +#include "integer_length.h" +#include "xalloc.h" + +/* Currently we support five flavours of bitsets: + BITSET_ARRAY: Array of bits (fixed size, fast for dense bitsets). + Memory for bit array and bitset structure allocated + contiguously. + BITSET_LIST: Linked list of arrays of bits (variable size, least storage + for large very sparse sets). + BITSET_TABLE: Expandable table of pointers to arrays of bits + (variable size, less storage for large sparse sets). + Faster than BITSET_LIST for random access. + BITSET_VECTOR: Variable array of bits (variable size, fast for + dense bitsets). + BITSET_STATS: Wrapper bitset for internal use only. Used for gathering + statistics and/or better run-time checking. +*/ +enum bitset_type {BITSET_ARRAY, BITSET_LIST, BITSET_TABLE, BITSET_VECTOR, + BITSET_TYPE_NUM, BITSET_STATS}; +#define BITSET_TYPE_NAMES {"abitset", "lbitset", "tbitset", "vbitset"} + +extern const char * const bitset_type_names[]; + +/* Data type used to store a word of bits. */ +typedef unsigned long bitset_word; +#define BITSET_WORD_BITS ((unsigned) (CHAR_BIT * sizeof (bitset_word))) + +/* Bit index. In theory we might need a type wider than size_t, but + in practice we lose at most a factor of CHAR_BIT by going with + size_t, and that is good enough. If this type is changed to be + wider than size_t, the code needs to be modified to check for + overflow when converting bit counts to byte or word counts. + The bit and word index types must be unsigned. */ +typedef size_t bitset_bindex; + +/* Word index. */ +typedef size_t bitset_windex; + +/* Maximum values for commonly-used unsigned types. BITSET_SIZE_MAX + always equals SIZE_MAX, but some older systems lack SIZE_MAX. */ +#define BITSET_BINDEX_MAX ((bitset_bindex) -1) + +/* Limit max word index to the maximum value of a signed integer + to simplify cache disabling. */ +#define BITSET_WINDEX_MAX (((bitset_windex) -1) >> 1) +#define BITSET_SIZE_MAX ((size_t) -1) + +#define BITSET_MSB ((bitset_word) 1 << (BITSET_WORD_BITS - 1)) + +#define BITSET_LIST_SIZE 1024 + +enum bitset_ops {BITSET_OP_ZERO, BITSET_OP_ONES, + BITSET_OP_COPY, BITSET_OP_NOT, + BITSET_OP_EMPTY_P, BITSET_OP_EQUAL_P, + BITSET_OP_SUBSET_P, BITSET_OP_DISJOINT_P, + BITSET_OP_AND, BITSET_OP_OR, BITSET_OP_XOR, BITSET_OP_ANDN, + BITSET_OP_OR_AND, BITSET_OP_AND_OR, BITSET_OP_ANDN_OR}; + +struct bbitset_struct +{ + const struct bitset_vtable *vtable; + bitset_windex cindex; /* Cache word index. */ + bitset_windex csize; /* Cache size in words. */ + bitset_word *cdata; /* Cache data pointer. */ + bitset_bindex n_bits; /* Number of bits. */ + /* Perhaps we could sacrifice another word to indicate + that the bitset is known to be zero, that a bit has been set + in the cache, and that a bit has been cleared in the cache. + This would speed up some of the searches but slightly slow down + bit set/reset operations of cached bits. */ +}; + + +typedef union bitset_union *bitset; + + +/* Private accessor macros to bitset structure. */ +#define BITSET_VTABLE_(SRC) (SRC)->b.vtable +#define BITSET_CINDEX_(SRC) (SRC)->b.cindex +#define BITSET_CDATA_(SRC) (SRC)->b.cdata +#define BITSET_CSIZE_(SRC) (SRC)->b.csize +#define BITSET_NBITS_(SRC) (SRC)->b.n_bits + + +/* The contents of this structure should be considered private. */ +struct bitset_vtable +{ + void (*set) (bitset, bitset_bindex); + void (*reset) (bitset, bitset_bindex); + bool (*toggle) (bitset, bitset_bindex); + bool (*test) (bitset, bitset_bindex); + bitset_bindex (*resize) (bitset, bitset_bindex); + bitset_bindex (*size) (bitset); + bitset_bindex (*count) (bitset); + + bool (*empty_p) (bitset); + void (*ones) (bitset); + void (*zero) (bitset); + + void (*copy) (bitset, bitset); + bool (*disjoint_p) (bitset, bitset); + bool (*equal_p) (bitset, bitset); + void (*not_) (bitset, bitset); + bool (*subset_p) (bitset, bitset); + + void (*and_) (bitset, bitset, bitset); + bool (*and_cmp) (bitset, bitset, bitset); + void (*andn) (bitset, bitset, bitset); + bool (*andn_cmp) (bitset, bitset, bitset); + void (*or_) (bitset, bitset, bitset); + bool (*or_cmp) (bitset, bitset, bitset); + void (*xor_) (bitset, bitset, bitset); + bool (*xor_cmp) (bitset, bitset, bitset); + + void (*and_or) (bitset, bitset, bitset, bitset); + bool (*and_or_cmp) (bitset, bitset, bitset, bitset); + void (*andn_or) (bitset, bitset, bitset, bitset); + bool (*andn_or_cmp) (bitset, bitset, bitset, bitset); + void (*or_and) (bitset, bitset, bitset, bitset); + bool (*or_and_cmp) (bitset, bitset, bitset, bitset); + + bitset_bindex (*list) (bitset, bitset_bindex *, bitset_bindex, + bitset_bindex *); + bitset_bindex (*list_reverse) (bitset, bitset_bindex *, bitset_bindex, + bitset_bindex *); + void (*free) (bitset); + enum bitset_type type; +}; + +#define BITSET_COMPATIBLE_(BSET1, BSET2) \ +((BSET1)->b.vtable == (BSET2)->b.vtable) + +#define BITSET_CHECK2_(DST, SRC) \ +if (!BITSET_COMPATIBLE_ (DST, SRC)) abort (); + +#define BITSET_CHECK3_(DST, SRC1, SRC2) \ +if (!BITSET_COMPATIBLE_ (DST, SRC1) \ + || !BITSET_COMPATIBLE_ (DST, SRC2)) abort (); + +#define BITSET_CHECK4_(DST, SRC1, SRC2, SRC3) \ +if (!BITSET_COMPATIBLE_ (DST, SRC1) || !BITSET_COMPATIBLE_ (DST, SRC2) \ + || !BITSET_COMPATIBLE_ (DST, SRC3)) abort (); + + +/* Redefine number of bits in bitset DST. */ +#define BITSET_RESIZE_(DST, SIZE) (DST)->b.vtable->resize (DST, SIZE) + +/* Return size in bits of bitset SRC. */ +#define BITSET_SIZE_(SRC) (SRC)->b.vtable->size (SRC) + +/* Return number of bits set in bitset SRC. */ +#define BITSET_COUNT_(SRC) (SRC)->b.vtable->count (SRC) + +/* Return type of bitset SRC. */ +#define BITSET_TYPE_(DST) (DST)->b.vtable->type + +/* Set bit BITNO in bitset DST. */ +#define BITSET_SET_(DST, BITNO) (DST)->b.vtable->set (DST, BITNO) + +/* Reset bit BITNO in bitset DST. */ +#define BITSET_RESET_(DST, BITNO) (DST)->b.vtable->reset (DST, BITNO) + +/* Toggle bit BITNO in bitset DST. */ +#define BITSET_TOGGLE_(DST, BITNO) (DST)->b.vtable->toggle (DST, BITNO) + +/* Return non-zero if bit BITNO in bitset SRC is set. */ +#define BITSET_TEST_(SRC, BITNO) (SRC)->b.vtable->test (SRC, BITNO) + +/* Free bitset SRC. */ +#define BITSET_FREE_(SRC)\ + ((SRC)->b.vtable->free ? (SRC)->b.vtable->free (SRC) :(void)0) + + +/* Return SRC == 0. */ +#define BITSET_EMPTY_P_(SRC) (SRC)->b.vtable->empty_p (SRC) + +/* DST = ~0. */ +#define BITSET_ONES_(DST) (DST)->b.vtable->ones (DST) + +/* DST = 0. */ +#define BITSET_ZERO_(DST) (DST)->b.vtable->zero (DST) + + + +/* DST = SRC. */ +#define BITSET_COPY_(DST, SRC) (SRC)->b.vtable->copy (DST, SRC) + +/* Return DST & SRC == 0. */ +#define BITSET_DISJOINT_P_(DST, SRC) (SRC)->b.vtable->disjoint_p (DST, SRC) + +/* Return DST == SRC. */ +#define BITSET_EQUAL_P_(DST, SRC) (SRC)->b.vtable->equal_p (DST, SRC) + +/* DST = ~SRC. */ +#define BITSET_NOT_(DST, SRC) (SRC)->b.vtable->not_ (DST, SRC) + +/* Return DST == DST | SRC. */ +#define BITSET_SUBSET_P_(DST, SRC) (SRC)->b.vtable->subset_p (DST, SRC) + + +/* DST = SRC1 & SRC2. */ +#define BITSET_AND_(DST, SRC1, SRC2) (SRC1)->b.vtable->and_ (DST, SRC1, SRC2) +#define BITSET_AND_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->and_cmp (DST, SRC1, SRC2) + +/* DST = SRC1 & ~SRC2. */ +#define BITSET_ANDN_(DST, SRC1, SRC2) (SRC1)->b.vtable->andn (DST, SRC1, SRC2) +#define BITSET_ANDN_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->andn_cmp (DST, SRC1, SRC2) + +/* DST = SRC1 | SRC2. */ +#define BITSET_OR_(DST, SRC1, SRC2) (SRC1)->b.vtable->or_ (DST, SRC1, SRC2) +#define BITSET_OR_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->or_cmp (DST, SRC1, SRC2) + +/* DST = SRC1 ^ SRC2. */ +#define BITSET_XOR_(DST, SRC1, SRC2) (SRC1)->b.vtable->xor_ (DST, SRC1, SRC2) +#define BITSET_XOR_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->xor_cmp (DST, SRC1, SRC2) + + + +/* DST = (SRC1 & SRC2) | SRC3. Return non-zero if + DST != (SRC1 & SRC2) | SRC3. */ +#define BITSET_AND_OR_(DST, SRC1, SRC2, SRC3) \ + (SRC1)->b.vtable->and_or (DST, SRC1, SRC2, SRC3) +#define BITSET_AND_OR_CMP_(DST, SRC1, SRC2, SRC3) \ + (SRC1)->b.vtable->and_or_cmp (DST, SRC1, SRC2, SRC3) + +/* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if + DST != (SRC1 & ~SRC2) | SRC3. */ +#define BITSET_ANDN_OR_(DST, SRC1, SRC2, SRC3) \ + (SRC1)->b.vtable->andn_or (DST, SRC1, SRC2, SRC3) +#define BITSET_ANDN_OR_CMP_(DST, SRC1, SRC2, SRC3) \ + (SRC1)->b.vtable->andn_or_cmp (DST, SRC1, SRC2, SRC3) + +/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if + DST != (SRC1 | SRC2) & SRC3. */ +#define BITSET_OR_AND_(DST, SRC1, SRC2, SRC3) \ + (SRC1)->b.vtable->or_and (DST, SRC1, SRC2, SRC3) +#define BITSET_OR_AND_CMP_(DST, SRC1, SRC2, SRC3) \ + (SRC1)->b.vtable->or_and_cmp (DST, SRC1, SRC2, SRC3) + + +/* Find list of up to NUM bits set in BSET starting from and including + *NEXT. Return with actual number of bits found and with *NEXT + indicating where search stopped. */ +#define BITSET_LIST_(BSET, LIST, NUM, NEXT) \ + (BSET)->b.vtable->list (BSET, LIST, NUM, NEXT) + +/* Find reverse list of up to NUM bits set in BSET starting from and + including NEXT. Return with actual number of bits found and with + *NEXT indicating where search stopped. */ +#define BITSET_LIST_REVERSE_(BSET, LIST, NUM, NEXT) \ + (BSET)->b.vtable->list_reverse (BSET, LIST, NUM, NEXT) + +/* Iterate left to right over each set bit of WORD. + Each iteration sets POS to the 0-based index of the next set bit in WORD. + Repeatedly resets bits in WORD in place until it's null. */ +#define BITSET_FOR_EACH_BIT(Pos, Word) \ + for (int Pos = bitset_ffs_ (Word); \ + 0 <= Pos; \ + Word ^= 1UL << Pos, Pos = bitset_ffs_ (Word)) + +/* Iterate right to left over each set bit of WORD. + Each iteration sets POS to the 0-based index of the next set bit in WORD. + Repeatedly resets bits in WORD in place until it's null. */ +#define BITSET_FOR_EACH_BIT_REVERSE(Pos, Word) \ + for (int Pos = bitset_fls_ (Word); \ + 0 <= Pos; \ + Word ^= 1UL << Pos, Pos = bitset_fls_ (Word)) + +/* Private functions for bitset implementations. */ + +bool bitset_toggle_ (bitset, bitset_bindex); + +bitset_bindex bitset_count_ (bitset); + +bitset_bindex bitset_size_ (bitset); + +bool bitset_copy_ (bitset, bitset); + +void bitset_and_or_ (bitset, bitset, bitset, bitset); + +bool bitset_and_or_cmp_ (bitset, bitset, bitset, bitset); + +void bitset_andn_or_ (bitset, bitset, bitset, bitset); + +bool bitset_andn_or_cmp_ (bitset, bitset, bitset, bitset); + +void bitset_or_and_ (bitset, bitset, bitset, bitset); + +bool bitset_or_and_cmp_ (bitset, bitset, bitset, bitset); + +/* First set bit in WORD. + Indexes start at 0, return -1 if WORD is null. */ +static inline +int bitset_ffs_ (bitset_word word) +{ + return ffsl ((long) word) - 1; +} + +/* Last set bit in WORD. + Indexes start at 0, return -1 if WORD is null. */ +static inline +int bitset_fls_ (bitset_word word) +{ + return integer_length_l (word) - 1; +} + +#endif /* _BBITSET_H */ diff --git a/include/libgnulib/bitset/list.h b/include/libgnulib/bitset/list.h new file mode 100755 index 0000000..9b52c33 --- /dev/null +++ b/include/libgnulib/bitset/list.h @@ -0,0 +1,32 @@ +/* Functions to support lbitsets. + + Copyright (C) 2002, 2004, 2009-2015, 2018-2024 Free Software Foundation, + Inc. + + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). + + 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 3 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, see . */ + +#ifndef _BITSET_LIST_H +#define _BITSET_LIST_H + +#include "bitset.h" + +size_t lbitset_bytes (bitset_bindex); + +bitset lbitset_init (bitset, bitset_bindex); + +void lbitset_release_memory (void); + +#endif diff --git a/include/libgnulib/bitset/stats.h b/include/libgnulib/bitset/stats.h new file mode 100755 index 0000000..d389c5d --- /dev/null +++ b/include/libgnulib/bitset/stats.h @@ -0,0 +1,33 @@ +/* Functions to support bitset statistics. + + Copyright (C) 2002-2004, 2009-2015, 2018-2024 Free Software Foundation, Inc. + + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). + + 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 3 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, see . */ + +#ifndef _BITSET_STATS_H +#define _BITSET_STATS_H + +#include "bitset/base.h" + +extern bool bitset_stats_enabled; + +enum bitset_type bitset_stats_type_get (bitset); + +size_t bitset_stats_bytes (void); + +bitset bitset_stats_init (bitset, bitset_bindex, enum bitset_type); + +#endif diff --git a/include/libgnulib/bitset/table.h b/include/libgnulib/bitset/table.h new file mode 100755 index 0000000..7a99c47 --- /dev/null +++ b/include/libgnulib/bitset/table.h @@ -0,0 +1,32 @@ +/* Functions to support tbitsets. + + Copyright (C) 2002, 2004, 2009-2015, 2018-2024 Free Software Foundation, + Inc. + + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). + + 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 3 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, see . */ + +#ifndef _BITSET_TABLE_H +#define _BITSET_TABLE_H + +#include "bitset.h" + +size_t tbitset_bytes (bitset_bindex); + +bitset tbitset_init (bitset, bitset_bindex); + +void tbitset_release_memory (void); + +#endif diff --git a/include/libgnulib/bitset/vector.h b/include/libgnulib/bitset/vector.h new file mode 100755 index 0000000..a2de4e9 --- /dev/null +++ b/include/libgnulib/bitset/vector.h @@ -0,0 +1,30 @@ +/* Functions to support vbitsets. + + Copyright (C) 2002, 2004, 2009-2015, 2018-2024 Free Software Foundation, + Inc. + + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). + + 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 3 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, see . */ + +#ifndef _BITSET_VECTOR_H +#define _BITSET_VECTOR_H + +#include "bitset.h" + +size_t vbitset_bytes (bitset_bindex); + +bitset vbitset_init (bitset, bitset_bindex); + +#endif diff --git a/include/libgnulib/bitsetv.h b/include/libgnulib/bitsetv.h new file mode 100755 index 0000000..3be6157 --- /dev/null +++ b/include/libgnulib/bitsetv.h @@ -0,0 +1,81 @@ +/* Bitset vectors. + + Copyright (C) 2002, 2004, 2009-2015, 2018-2024 Free Software Foundation, + Inc. + + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). + + 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 3 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, see . */ + +#ifndef _BITSETV_H +#define _BITSETV_H + +/* This file uses _GL_ATTRIBUTE_DEALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "bitset.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef bitset * bitsetv; + +/* Free vector of bitsets. Do nothing if NULL. */ +void bitsetv_free (bitsetv); + +/* Create a vector of N_VECS bitsets, each of N_BITS, and of + type TYPE. */ +bitsetv bitsetv_alloc (bitset_bindex, bitset_bindex, enum bitset_type) + _GL_ATTRIBUTE_DEALLOC (bitsetv_free, 1); + +/* Create a vector of N_VECS bitsets, each of N_BITS, and with + attribute hints specified by ATTR. */ +bitsetv bitsetv_create (bitset_bindex, bitset_bindex, unsigned) + _GL_ATTRIBUTE_DEALLOC (bitsetv_free, 1); + +/* Zero vector of bitsets. */ +void bitsetv_zero (bitsetv); + +/* Set vector of bitsets. */ +void bitsetv_ones (bitsetv); + +/* Given a vector BSETV of N bitsets of size N, modify its contents to + be the transitive closure of what was given. */ +void bitsetv_transitive_closure (bitsetv); + +/* Given a vector BSETV of N bitsets of size N, modify its contents to + be the reflexive transitive closure of what was given. This is + the same as transitive closure but with all bits on the diagonal + of the bit matrix set. */ +void bitsetv_reflexive_transitive_closure (bitsetv); + +/* Dump vector of bitsets. */ +void bitsetv_dump (FILE *, const char *, const char *, bitsetv); + +/* Function to debug vector of bitsets from debugger. */ +void debug_bitsetv (bitsetv); + +/* Dump vector of bitsets as a matrix. */ +void bitsetv_matrix_dump (FILE *, const char *, bitsetv); + + +#ifdef __cplusplus +} +#endif + +#endif /* _BITSETV_H */ diff --git a/include/libgnulib/boot-time-aux.h b/include/libgnulib/boot-time-aux.h new file mode 100755 index 0000000..8b98c4e --- /dev/null +++ b/include/libgnulib/boot-time-aux.h @@ -0,0 +1,422 @@ +/* Auxiliary functions for determining the time when the machine last booted. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#define SIZEOF(a) (sizeof(a)/sizeof(a[0])) + +#if defined __linux__ || defined __ANDROID__ + +/* Store the uptime counter, as managed by the Linux kernel, in *P_UPTIME. + Return 0 upon success, -1 upon failure. */ +_GL_ATTRIBUTE_MAYBE_UNUSED +static int +get_linux_uptime (struct timespec *p_uptime) +{ + /* The clock_gettime facility returns the uptime with a resolution of 1 µsec. + It is available with glibc >= 2.14, Android, or musl libc. + In glibc < 2.17 it required linking with librt. */ +# if !defined __GLIBC__ || 2 < __GLIBC__ + (17 <= __GLIBC_MINOR__) + if (clock_gettime (CLOCK_BOOTTIME, p_uptime) >= 0) + return 0; +# endif + + /* /proc/uptime contains the uptime with a resolution of 0.01 sec. + But it does not have read permissions on Android. */ +# if !defined __ANDROID__ + FILE *fp = fopen ("/proc/uptime", "re"); + if (fp != NULL) + { + char buf[32 + 1]; + size_t n = fread (buf, 1, sizeof (buf) - 1, fp); + fclose (fp); + if (n > 0) + { + buf[n] = '\0'; + /* buf now contains two values: the uptime and the idle time. */ + time_t s = 0; + char *p; + for (p = buf; '0' <= *p && *p <= '9'; p++) + s = 10 * s + (*p - '0'); + if (buf < p) + { + long ns = 0; + if (*p++ == '.') + for (int i = 0; i < 9; i++) + ns = 10 * ns + ('0' <= *p && *p <= '9' ? *p++ - '0' : 0); + p_uptime->tv_sec = s; + p_uptime->tv_nsec = ns; + return 0; + } + } + } +# endif + +# if HAVE_DECL_SYSINFO /* not available in Android API < 9 */ + /* The sysinfo call returns the uptime with a resolution of 1 sec only. */ + struct sysinfo info; + if (sysinfo (&info) >= 0) + { + p_uptime->tv_sec = info.uptime; + p_uptime->tv_nsec = 0; + return 0; + } +# endif + + return -1; +} + +#endif + +#if defined __linux__ && !defined __ANDROID__ + +static int +get_linux_boot_time_fallback (struct timespec *p_boot_time) +{ + /* On Devuan with the 'runit' init system and on Artix with the 's6' init + system, UTMP_FILE contains USER_PROCESS and other entries, but no + BOOT_TIME entry. + On Alpine Linux, UTMP_FILE is not filled. It is always empty. + So, in both cases, get the time stamp of a file that gets touched only + during the boot process. */ + + const char * const boot_touched_files[] = + { + "/var/lib/systemd/random-seed", /* seen on distros with systemd */ + "/var/lib/urandom/random-seed", /* seen on Devuan with runit */ + "/var/lib/random-seed", /* seen on Artix with s6 */ + /* This must come last, since on several distros /var/run/utmp is + modified when a user logs in, i.e. long after boot. */ + "/var/run/utmp" /* seen on Alpine Linux with OpenRC */ + }; + for (idx_t i = 0; i < SIZEOF (boot_touched_files); i++) + { + const char *filename = boot_touched_files[i]; + struct stat statbuf; + if (stat (filename, &statbuf) >= 0) + { + struct timespec boot_time = get_stat_mtime (&statbuf); + /* On Alpine 3.20.0_rc2 /var/run/utmp was observed with bogus + timestamps of ~10 s. Reject timestamps before + 2005-07-25 23:34:15 UTC (1122334455), as neither Alpine + nor Devuan existed then. */ + if (boot_time.tv_sec >= 1122334455) + { + *p_boot_time = boot_time; + return 0; + } + } + } + return -1; +} + +/* The following approach is only usable as a fallback, because it is of + the form + boot_time = (time now) - (kernel's ktime_get_boottime[_ts64] ()) + and therefore produces wrong values after the date has been bumped in the + running system, which happens frequently if the system is running in a + virtual machine and this VM has been put into "saved" or "sleep" state + and then resumed. */ +static int +get_linux_boot_time_final_fallback (struct timespec *p_boot_time) +{ + struct timespec uptime; + if (get_linux_uptime (&uptime) >= 0) + { + struct timespec result; +# if !defined __GLIBC__ || 2 < __GLIBC__ + (16 <= __GLIBC_MINOR__) + /* Better than: + if (0 <= clock_gettime (CLOCK_REALTIME, &result)) + because timespec_get does not need -lrt in glibc 2.16. + */ + if (! timespec_get (&result, TIME_UTC)) + return -1; +# else + /* Fall back on lower-res approach that does not need -lrt. + This is good enough; on these hosts UPTIME is even lower-res. */ + struct timeval tv; + int r = gettimeofday (&tv, NULL); + if (r < 0) + return r; + result.tv_sec = tv.tv_sec; + result.tv_nsec = tv.tv_usec * 1000; +# endif + + if (result.tv_nsec < uptime.tv_nsec) + { + result.tv_nsec += 1000000000; + result.tv_sec -= 1; + } + result.tv_sec -= uptime.tv_sec; + result.tv_nsec -= uptime.tv_nsec; + *p_boot_time = result; + return 0; + } + return -1; +} + +#endif + +#if defined __ANDROID__ + +static int +get_android_boot_time (struct timespec *p_boot_time) +{ + /* On Android, there is no /var, and normal processes don't have access + to system files. Therefore use the kernel's uptime counter, although + it produces wrong values after the date has been bumped in the running + system. */ + struct timespec uptime; + if (get_linux_uptime (&uptime) >= 0) + { + struct timespec result; + if (clock_gettime (CLOCK_REALTIME, &result) >= 0) + { + if (result.tv_nsec < uptime.tv_nsec) + { + result.tv_nsec += 1000000000; + result.tv_sec -= 1; + } + result.tv_sec -= uptime.tv_sec; + result.tv_nsec -= uptime.tv_nsec; + *p_boot_time = result; + return 0; + } + } + return -1; +} + +#endif + +#if defined __OpenBSD__ + +static int +get_openbsd_boot_time (struct timespec *p_boot_time) +{ + /* On OpenBSD, UTMP_FILE is not filled. It contains only dummy entries. + So, get the time stamp of a file that gets touched only during the + boot process. */ + const char * const boot_touched_files[] = + { + "/var/db/host.random", + "/var/run/utmp" + }; + for (idx_t i = 0; i < SIZEOF (boot_touched_files); i++) + { + const char *filename = boot_touched_files[i]; + struct stat statbuf; + if (stat (filename, &statbuf) >= 0) + { + *p_boot_time = get_stat_mtime (&statbuf); + return 0; + } + } + return -1; +} + +#endif + +#if HAVE_SYS_SYSCTL_H && HAVE_SYSCTL \ + && defined CTL_KERN && defined KERN_BOOTTIME \ + && !defined __minix +/* macOS, FreeBSD, GNU/kFreeBSD, NetBSD, OpenBSD */ +/* On Minix 3.3 this sysctl produces garbage results. Therefore avoid it. */ + +/* The following approach is only usable as a fallback, because it produces + wrong values after the date has been bumped in the running system, which + happens frequently if the system is running in a virtual machine and this + VM has been put into "saved" or "sleep" state and then resumed. */ +static int +get_bsd_boot_time_final_fallback (struct timespec *p_boot_time) +{ + static int request[2] = { CTL_KERN, KERN_BOOTTIME }; + struct timeval result; + size_t result_len = sizeof result; + + if (sysctl (request, 2, &result, &result_len, NULL, 0) >= 0) + { + p_boot_time->tv_sec = result.tv_sec; + p_boot_time->tv_nsec = result.tv_usec * 1000; + return 0; + } + return -1; +} + +#endif + +#if defined __HAIKU__ + +static int +get_haiku_boot_time (struct timespec *p_boot_time) +{ + /* On Haiku, /etc/utmp does not exist. During boot, + 1. the current time is restored, but possibly with a wrong time zone, + that is, with an offset of a few hours, + 2. some symlinks and files get created, + 3. the various devices are brought up, in particular the network device, + 4. the correct date and time is set, + 5. some more device nodes get created. + The boot time can be retrieved by looking at a directory created during + phase 5, such as /dev/input. */ + const char * const boot_touched_file = "/dev/input"; + struct stat statbuf; + if (stat (boot_touched_file, &statbuf) >= 0) + { + *p_boot_time = get_stat_mtime (&statbuf); + return 0; + } + return -1; +} + +#endif + +#if HAVE_OS_H /* BeOS, Haiku */ + +/* The following approach is only usable as a fallback, because it produces + wrong values after the date has been bumped in the running system, which + happens frequently if the system is running in a virtual machine and this + VM has been put into "saved" or "sleep" state and then resumed. */ +static int +get_haiku_boot_time_final_fallback (struct timespec *p_boot_time) +{ + system_info si; + + get_system_info (&si); + p_boot_time->tv_sec = si.boot_time / 1000000; + p_boot_time->tv_nsec = (si.boot_time % 1000000) * 1000; + return 0; +} + +#endif + +#if defined __CYGWIN__ || defined _WIN32 + +static int +get_windows_boot_time (struct timespec *p_boot_time) +{ + /* On Cygwin, /var/run/utmp is empty. + On native Windows, and don't exist. + Instead, on Windows, the boot time can be retrieved by looking at the + time stamp of a file that (normally) gets touched only during the boot + process, namely C:\pagefile.sys. */ + const char * const boot_touched_files[] = + { + #if defined __CYGWIN__ && !defined _WIN32 + /* It is more portable to use /proc/cygdrive/c than /cygdrive/c. */ + "/proc/cygdrive/c/pagefile.sys", + /* A fallback, working around a Cygwin 3.5.3 bug. It has a modification + time about 1.5 minutes after the last boot; but that's better than + nothing. */ + "/proc/cygdrive/c/ProgramData/Microsoft/Windows/DeviceMetadataCache/dmrc.idx" + #else + "C:\\pagefile.sys" + #endif + }; + for (idx_t i = 0; i < SIZEOF (boot_touched_files); i++) + { + const char *filename = boot_touched_files[i]; + struct stat statbuf; + if (stat (filename, &statbuf) >= 0) + { +# if defined __CYGWIN__ && !defined _WIN32 + /* Work around a Cygwin 3.5.3 bug. + */ + if (!S_ISDIR (statbuf.st_mode)) +# endif + { + *p_boot_time = get_stat_mtime (&statbuf); + return 0; + } + } + } + return -1; +} + +# ifndef __CYGWIN__ +# if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA) + +/* Don't assume that UNICODE is not defined. */ +# undef LoadLibrary +# define LoadLibrary LoadLibraryA + +/* Avoid warnings from gcc -Wcast-function-type. */ +# define GetProcAddress \ + (void *) GetProcAddress + +/* GetTickCount64 is only available on Windows Vista and later. */ +typedef ULONGLONG (WINAPI * GetTickCount64FuncType) (void); + +static GetTickCount64FuncType GetTickCount64Func = NULL; +static BOOL initialized = FALSE; + +static void +initialize (void) +{ + HMODULE kernel32 = LoadLibrary ("kernel32.dll"); + if (kernel32 != NULL) + { + GetTickCount64Func = + (GetTickCount64FuncType) GetProcAddress (kernel32, "GetTickCount64"); + } + initialized = TRUE; +} + +# else + +# define GetTickCount64Func GetTickCount64 + +# endif + +/* Fallback for Windows in the form: + boot time = current time - uptime + This uses the GetTickCount64 function which is only available on Windows + Vista and later. See: + . */ +static int +get_windows_boot_time_fallback (struct timespec *p_boot_time) +{ +# if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA) + if (! initialized) + initialize (); +# endif + if (GetTickCount64Func != NULL) + { + ULONGLONG uptime_ms = GetTickCount64Func (); + struct timespec uptime; + struct timespec result; + struct timeval tv; + if (gettimeofday (&tv, NULL) >= 0) + { + uptime.tv_sec = uptime_ms / 1000; + uptime.tv_nsec = (uptime_ms % 1000) * 1000000; + result.tv_sec = tv.tv_sec; + result.tv_nsec = tv.tv_usec * 1000; + if (result.tv_nsec < uptime.tv_nsec) + { + result.tv_nsec += 1000000000; + result.tv_sec -= 1; + } + result.tv_sec -= uptime.tv_sec; + result.tv_nsec -= uptime.tv_nsec; + *p_boot_time = result; + return 0; + } + } + return -1; +} + +# endif +#endif diff --git a/include/libgnulib/boot-time.h b/include/libgnulib/boot-time.h new file mode 100755 index 0000000..9968432 --- /dev/null +++ b/include/libgnulib/boot-time.h @@ -0,0 +1,44 @@ +/* Determine the time when the machine last booted. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#ifndef _BOOT_TIME_H +#define _BOOT_TIME_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Store the approximate time when the machine last booted in *P_BOOT_TIME, + and return 0. If it cannot be determined, return -1. + + This function is not multithread-safe, since on many platforms it + invokes the functions setutxent, getutxent, endutxent. These + functions are needed because they may lock FILE (so that we don't + read garbage when a concurrent process writes to FILE), but their + drawback is that they have a common global state. */ +extern int get_boot_time (struct timespec *p_boot_time); + + +#ifdef __cplusplus +} +#endif + +#endif /* _BOOT_TIME_H */ diff --git a/include/libgnulib/c++defs.h b/include/libgnulib/c++defs.h new file mode 100755 index 0000000..7843359 --- /dev/null +++ b/include/libgnulib/c++defs.h @@ -0,0 +1,357 @@ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ diff --git a/include/libgnulib/c-ctype.h b/include/libgnulib/c-ctype.h new file mode 100755 index 0000000..b582de4 --- /dev/null +++ b/include/libgnulib/c-ctype.h @@ -0,0 +1,366 @@ +/* Character handling in C locale. + + These functions work like the corresponding functions in , + except that they have the C (POSIX) locale hardwired, whereas the + functions' behaviour depends on the current locale set via + setlocale. + + Copyright (C) 2000-2003, 2006, 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef C_CTYPE_H +#define C_CTYPE_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef C_CTYPE_INLINE +# define C_CTYPE_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII + character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it + is ISO-8859-1), the functions in this file recognize only the ASCII + characters. */ + + +#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) +/* The character set is ASCII or one of its variants or extensions, not EBCDIC. + Testing the value of '\n' and '\r' is not relevant. */ +# define C_CTYPE_ASCII 1 +#elif ! (' ' == '\x40' && '0' == '\xf0' \ + && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ + && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') +# error "Only ASCII and EBCDIC are supported" +#endif + +#if 'A' < 0 +# error "EBCDIC and char is signed -- not supported" +#endif + +/* Cases for control characters. */ + +#define _C_CTYPE_CNTRL \ + case '\a': case '\b': case '\f': case '\n': \ + case '\r': case '\t': case '\v': \ + _C_CTYPE_OTHER_CNTRL + +/* ASCII control characters other than those with \-letter escapes. */ + +#if C_CTYPE_ASCII +# define _C_CTYPE_OTHER_CNTRL \ + case '\x00': case '\x01': case '\x02': case '\x03': \ + case '\x04': case '\x05': case '\x06': case '\x0e': \ + case '\x0f': case '\x10': case '\x11': case '\x12': \ + case '\x13': case '\x14': case '\x15': case '\x16': \ + case '\x17': case '\x18': case '\x19': case '\x1a': \ + case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ + case '\x1f': case '\x7f' +#else + /* Use EBCDIC code page 1047's assignments for ASCII control chars; + assume all EBCDIC code pages agree about these assignments. */ +# define _C_CTYPE_OTHER_CNTRL \ + case '\x00': case '\x01': case '\x02': case '\x03': \ + case '\x07': case '\x0e': case '\x0f': case '\x10': \ + case '\x11': case '\x12': case '\x13': case '\x18': \ + case '\x19': case '\x1c': case '\x1d': case '\x1e': \ + case '\x1f': case '\x26': case '\x27': case '\x2d': \ + case '\x2e': case '\x32': case '\x37': case '\x3c': \ + case '\x3d': case '\x3f' +#endif + +/* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ + +#define _C_CTYPE_LOWER_A_THRU_F_N(N) \ + case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ + case 'e' + (N): case 'f' + (N) +#define _C_CTYPE_LOWER_N(N) \ + _C_CTYPE_LOWER_A_THRU_F_N(N): \ + case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ + case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ + case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ + case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ + case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) + +/* Cases for hex letters, digits, lower, punct, and upper. */ + +#define _C_CTYPE_A_THRU_F \ + _C_CTYPE_LOWER_A_THRU_F_N (0): \ + _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') +#define _C_CTYPE_DIGIT \ + case '0': case '1': case '2': case '3': \ + case '4': case '5': case '6': case '7': \ + case '8': case '9' +#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) +#define _C_CTYPE_PUNCT \ + case '!': case '"': case '#': case '$': \ + case '%': case '&': case '\'': case '(': \ + case ')': case '*': case '+': case ',': \ + case '-': case '.': case '/': case ':': \ + case ';': case '<': case '=': case '>': \ + case '?': case '@': case '[': case '\\': \ + case ']': case '^': case '_': case '`': \ + case '{': case '|': case '}': case '~' +#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') + + +/* Function definitions. */ + +/* Unlike the functions in , which require an argument in the range + of the 'unsigned char' type, the functions here operate on values that are + in the 'unsigned char' range or in the 'char' range. In other words, + when you have a 'char' value, you need to cast it before using it as + argument to a function: + + const char *s = ...; + if (isalpha ((unsigned char) *s)) ... + + but you don't need to cast it for the functions defined in this file: + + const char *s = ...; + if (c_isalpha (*s)) ... + */ + +C_CTYPE_INLINE bool +c_isalnum (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isalpha (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +/* The function isascii is not locale dependent. + Its use in EBCDIC is questionable. */ +C_CTYPE_INLINE bool +c_isascii (int c) +{ + switch (c) + { + case ' ': + _C_CTYPE_CNTRL: + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isblank (int c) +{ + return c == ' ' || c == '\t'; +} + +C_CTYPE_INLINE bool +c_iscntrl (int c) +{ + switch (c) + { + _C_CTYPE_CNTRL: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isdigit (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isgraph (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_islower (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isprint (int c) +{ + switch (c) + { + case ' ': + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_ispunct (int c) +{ + switch (c) + { + _C_CTYPE_PUNCT: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isspace (int c) +{ + switch (c) + { + case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isupper (int c) +{ + switch (c) + { + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isxdigit (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_A_THRU_F: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE int +c_tolower (int c) +{ + switch (c) + { + _C_CTYPE_UPPER: + return c - 'A' + 'a'; + default: + return c; + } +} + +C_CTYPE_INLINE int +c_toupper (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + return c - 'a' + 'A'; + default: + return c; + } +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* C_CTYPE_H */ diff --git a/include/libgnulib/c-snprintf.h b/include/libgnulib/c-snprintf.h new file mode 100755 index 0000000..8cd637d --- /dev/null +++ b/include/libgnulib/c-snprintf.h @@ -0,0 +1,67 @@ +/* snprintf in C locale. + Copyright (C) 2012-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _C_SNPRINTF_H +#define _C_SNPRINTF_H + +/* This file uses _GL_ATTRIBUTE_FORMAT. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get size_t, ptrdiff_t. */ +#include + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prints formatted output to string STR. Similar to sprintf, but the + additional parameter SIZE limits how much is written into STR. + STR may be NULL, in which case nothing will be written. + Returns the string length of the formatted string (which may be larger + than SIZE). Upon failure, returns -1 with errno set. + + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure code is ENOMEM. + + Formatting takes place in the C locale, that is, the decimal point + used in floating-point formatting directives is always '.'. */ +extern ptrdiff_t c_snzprintf (char *restrict str, size_t size, + const char *format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); + +/* Prints formatted output to string STR. Similar to sprintf, but the + additional parameter SIZE limits how much is written into STR. + STR may be NULL, in which case nothing will be written. + Returns the string length of the formatted string (which may be larger + than SIZE). Upon failure, returns -1 with errno set. + + Formatting takes place in the C locale, that is, the decimal point + used in floating-point formatting directives is always '.'. */ +extern int c_snprintf (char *restrict str, size_t size, + const char *format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); + +#ifdef __cplusplus +} +#endif + +#endif /* _C_SNPRINTF_H */ diff --git a/include/libgnulib/c-stack.h b/include/libgnulib/c-stack.h new file mode 100755 index 0000000..4db4519 --- /dev/null +++ b/include/libgnulib/c-stack.h @@ -0,0 +1,62 @@ +/* Stack overflow handling. + + Copyright (C) 2002, 2004, 2008-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* This file uses _GL_ASYNC_SAFE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* Set up ACTION so that it is invoked on C stack overflow and on other, + stack-unrelated, segmentation violation. + Return -1 (setting errno) if this cannot be done. + + When a stack overflow or segmentation violation occurs: + 1) ACTION is called. It is passed an argument equal to + - 0, for a stack overflow, + - SIGSEGV, for a segmentation violation that does not appear related + to stack overflow. + On many platforms the two cases are hard to distinguish; when in doubt, + zero is passed. + 2) If ACTION returns, a message is written to standard error, and the + program is terminated: in the case of stack overflow, with exit code + exit_failure (see "exitfail.h"), otherwise through a signal SIGSEGV. + + A null ACTION acts like an action that does nothing. + + Restrictions: + - ACTION must be async-signal-safe. + - ACTION together with its callees must not require more than 64 KiB of + stack space. + - ACTION must not create and then invoke nested functions + , because + this implementation does not guarantee an executable stack. + - ACTION should not call longjmp, because this implementation does not + guarantee that it is safe to return to the original stack. + + This function may install a handler for the SIGSEGV signal or for the SIGBUS + signal or exercise other system dependent exception handling APIs. */ + +extern int c_stack_action (_GL_ASYNC_SAFE void (* /*action*/) (int)); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/c-strcase.h b/include/libgnulib/c-strcase.h new file mode 100755 index 0000000..b75e8dd --- /dev/null +++ b/include/libgnulib/c-strcase.h @@ -0,0 +1,61 @@ +/* Case-insensitive string comparison functions in C locale. + Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef C_STRCASE_H +#define C_STRCASE_H + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + + +/* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII + character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it + is ISO-8859-1), the functions in this file recognize only the ASCII + characters. More precisely, one of the string arguments must be an ASCII + string; the other one can also contain non-ASCII characters (but then + the comparison result will be nonzero). */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. */ +extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE; + +/* Compare no more than N characters of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. */ +extern int c_strncasecmp (const char *s1, const char *s2, size_t n) + _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + + +#endif /* C_STRCASE_H */ diff --git a/include/libgnulib/c-strcaseeq.h b/include/libgnulib/c-strcaseeq.h new file mode 100755 index 0000000..0348c55 --- /dev/null +++ b/include/libgnulib/c-strcaseeq.h @@ -0,0 +1,191 @@ +/* Optimized case-insensitive string comparison in C locale. + Copyright (C) 2001-2002, 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include "c-strcase.h" +#include "c-ctype.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* STRCASEEQ allows to optimize string comparison with a small literal string. + STRCASEEQ (s, "UTF-8", 'U','T','F','-','8',0,0,0,0) + is semantically equivalent to + c_strcasecmp (s, "UTF-8") == 0 + just faster. */ + +/* Help GCC to generate good code for string comparisons with + immediate strings. */ +#if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__ + +/* Case insensitive comparison of ASCII characters. */ +# if C_CTYPE_ASCII +# define CASEEQ(other,upper) \ + (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper)) +# else +# define CASEEQ(other,upper) \ + (c_toupper (other) == (upper)) +# endif + +static inline int +strcaseeq9 (const char *s1, const char *s2) +{ + return c_strcasecmp (s1 + 9, s2 + 9) == 0; +} + +static inline int +strcaseeq8 (const char *s1, const char *s2, char s28) +{ + if (CASEEQ (s1[8], s28)) + { + if (s28 == 0) + return 1; + else + return strcaseeq9 (s1, s2); + } + else + return 0; +} + +static inline int +strcaseeq7 (const char *s1, const char *s2, char s27, char s28) +{ + if (CASEEQ (s1[7], s27)) + { + if (s27 == 0) + return 1; + else + return strcaseeq8 (s1, s2, s28); + } + else + return 0; +} + +static inline int +strcaseeq6 (const char *s1, const char *s2, char s26, char s27, char s28) +{ + if (CASEEQ (s1[6], s26)) + { + if (s26 == 0) + return 1; + else + return strcaseeq7 (s1, s2, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[5], s25)) + { + if (s25 == 0) + return 1; + else + return strcaseeq6 (s1, s2, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[4], s24)) + { + if (s24 == 0) + return 1; + else + return strcaseeq5 (s1, s2, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[3], s23)) + { + if (s23 == 0) + return 1; + else + return strcaseeq4 (s1, s2, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[2], s22)) + { + if (s22 == 0) + return 1; + else + return strcaseeq3 (s1, s2, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[1], s21)) + { + if (s21 == 0) + return 1; + else + return strcaseeq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[0], s20)) + { + if (s20 == 0) + return 1; + else + return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) + +#else + +#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (c_strcasecmp (s1, s2) == 0) + +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/c-strcasestr.h b/include/libgnulib/c-strcasestr.h new file mode 100755 index 0000000..7f3ef1d --- /dev/null +++ b/include/libgnulib/c-strcasestr.h @@ -0,0 +1,36 @@ +/* Case-insensitive searching in a string in C locale. + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef C_STRCASESTR_H +#define C_STRCASESTR_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +extern char *c_strcasestr (const char *haystack, const char *needle); + + +#ifdef __cplusplus +} +#endif + + +#endif /* C_STRCASESTR_H */ diff --git a/include/libgnulib/c-strstr.h b/include/libgnulib/c-strstr.h new file mode 100755 index 0000000..550b5d2 --- /dev/null +++ b/include/libgnulib/c-strstr.h @@ -0,0 +1,44 @@ +/* Searching in a string. + Copyright (C) 2001-2003, 2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +/* The functions defined in this file assume a nearly ASCII compatible + character set. */ + + +#ifdef __cplusplus +extern "C" { +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK. + This function is safe to be called, even in a multibyte locale, if NEEDLE + 1. consists solely of printable ASCII characters excluding '\\' and '~' + [this restriction is needed because of Shift_JIS and JOHAB] + or of the control ASCII characters '\a' '\b' '\f' '\n' '\r' '\t' '\v' + [this restriction is needed because of VISCII], and + 2. has at least length 2 + [this restriction is needed because of BIG5, BIG5-HKSCS, GBK, GB18030, + Shift_JIS, JOHAB], and + 3. does not consist entirely of decimal digits, or has at least length 4 + [this restriction is needed because of GB18030]. + This function is also safe to be called, even in a multibyte locale, if + HAYSTACK and NEEDLE are known to both consist solely of printable ASCII + characters excluding '\\' and '~'. */ +extern char *c_strstr (const char *haystack, const char *needle); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/c-strtod.h b/include/libgnulib/c-strtod.h new file mode 100755 index 0000000..c269080 --- /dev/null +++ b/include/libgnulib/c-strtod.h @@ -0,0 +1,53 @@ +/* Convert string to floating-point number, using the C locale. + + Copyright (C) 2003-2004, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Parse the initial portion of the string pointed to by NPTR as a floating- + point number (in decimal or hexadecimal notation), like in the C locale: + accepting only the ASCII digits '0'..'9', and only '.' as decimal point + character. + If ENDPTR is not NULL, set *ENDPTR to point to the first byte beyond the + parsed number or to NPTR if the string does not start with a parsable + number. + Return value: + - If successful, return the value as a float, double, or 'long double', + respectively, and don't modify errno. + - In case of overflow, return ±HUGE_VAL or ±HUGE_VALL, respectively, and + set errno to ERANGE. + - In case of underflow, return a value very near to 0 and set errno to + ERANGE. + - If the string does not start with a number at all, return 0 (and recall + that if ENDPTR != NULL, *ENDPTR is set to NPTR), and maybe set errno to + EINVAL. + - In case of other error, return 0 and set errno, for example to ENOMEM. */ +extern float c_strtof (char const *nptr, char **endptr); +extern double c_strtod (char const *nptr, char **endptr); +extern long double c_strtold (char const *nptr, char **endptr); + +#ifdef __cplusplus +} +#endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/include/libgnulib/c-vasnprintf.h b/include/libgnulib/c-vasnprintf.h new file mode 100755 index 0000000..3908a36 --- /dev/null +++ b/include/libgnulib/c-vasnprintf.h @@ -0,0 +1,73 @@ +/* vsprintf with automatic memory allocation in C locale. + Copyright (C) 2002-2004, 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _C_VASNPRINTF_H +#define _C_VASNPRINTF_H + +/* This file uses _GL_ATTRIBUTE_FORMAT. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get va_list. */ +#include + +/* Get size_t. */ +#include + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Write formatted output to a string dynamically allocated with malloc(). + You can pass a preallocated buffer for the result in RESULTBUF and its + size in *LENGTHP; otherwise you pass RESULTBUF = NULL. + If successful, return the address of the string (this may be = RESULTBUF + if no dynamic memory allocation was necessary) and set *LENGTHP to the + number of resulting bytes, excluding the trailing NUL. Upon error, set + errno and return NULL. + + When dynamic memory allocation occurs, the preallocated buffer is left + alone (with possibly modified contents). This makes it possible to use + a statically allocated or stack-allocated buffer, like this: + + char buf[100]; + size_t len = sizeof (buf); + char *output = vasnprintf (buf, &len, format, args); + if (output == NULL) + ... error handling ...; + else + { + ... use the output string ...; + if (output != buf) + free (output); + } + + Formatting takes place in the C locale, that is, the decimal point used in + floating-point formatting directives is always '.'. + */ +extern char *c_vasnprintf (char *restrict resultbuf, size_t *lengthp, + const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); + +#ifdef __cplusplus +} +#endif + +#endif /* _C_VASNPRINTF_H */ diff --git a/include/libgnulib/c-vasprintf.h b/include/libgnulib/c-vasprintf.h new file mode 100755 index 0000000..628d04f --- /dev/null +++ b/include/libgnulib/c-vasprintf.h @@ -0,0 +1,75 @@ +/* vasprintf and asprintf, in C locale. + Copyright (C) 2002-2004, 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _C_VASPRINTF_H +#define _C_VASPRINTF_H + +/* This file uses _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get va_list. */ +#include + +/* Get ptrdiff_t. */ +#include + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prints formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, it stores the address of the string in + *RESULT and returns the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, it returns -1 + with errno set. + + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure code is ENOMEM. + + Formatting takes place in the C locale, that is, the decimal point + used in floating-point formatting directives is always '.'. */ +_GL_ATTRIBUTE_NODISCARD +ptrdiff_t c_aszprintf (char **resultp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)); +_GL_ATTRIBUTE_NODISCARD +ptrdiff_t c_vaszprintf (char **resultp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0)); + +/* Prints formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, it stores the address of the string in + *RESULT and returns the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, it returns -1. + + Formatting takes place in the C locale, that is, the decimal point + used in floating-point formatting directives is always '.'. */ +_GL_ATTRIBUTE_NODISCARD +int c_asprintf (char **resultp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)); +_GL_ATTRIBUTE_NODISCARD +int c_vasprintf (char **resultp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0)); + +#ifdef __cplusplus +} +#endif + +#endif /* _C_VASPRINTF_H */ diff --git a/include/libgnulib/c-vsnprintf.h b/include/libgnulib/c-vsnprintf.h new file mode 100755 index 0000000..2615118 --- /dev/null +++ b/include/libgnulib/c-vsnprintf.h @@ -0,0 +1,70 @@ +/* vsnprintf in C locale. + Copyright (C) 2012-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _C_VSNPRINTF_H +#define _C_VSNPRINTF_H + +/* This file uses _GL_ATTRIBUTE_FORMAT. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get size_t, ptrdiff_t. */ +#include + +/* Get va_list. */ +#include + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prints formatted output to string STR. Similar to vsprintf, but the + additional parameter SIZE limits how much is written into STR. + STR may be NULL, in which case nothing will be written. + Returns the string length of the formatted string (which may be larger + than SIZE). Upon failure, returns -1 with errno set. + + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure code is ENOMEM. + + Formatting takes place in the C locale, that is, the decimal point + used in floating-point formatting directives is always '.'. */ +extern ptrdiff_t c_vsnzprintf (char *restrict str, size_t size, + const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); + +/* Prints formatted output to string STR. Similar to sprintf, but the + additional parameter SIZE limits how much is written into STR. + STR may be NULL, in which case nothing will be written. + Returns the string length of the formatted string (which may be larger + than SIZE). Upon failure, returns -1 with errno set. + + Formatting takes place in the C locale, that is, the decimal point + used in floating-point formatting directives is always '.'. */ +extern int c_vsnprintf (char *restrict str, size_t size, + const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); + +#ifdef __cplusplus +} +#endif + +#endif /* _C_VSNPRINTF_H */ diff --git a/include/libgnulib/c-xvasprintf.h b/include/libgnulib/c-xvasprintf.h new file mode 100755 index 0000000..897ecfd --- /dev/null +++ b/include/libgnulib/c-xvasprintf.h @@ -0,0 +1,67 @@ +/* vasprintf and asprintf, with out-of-memory checking, in C locale. + Copyright (C) 2002-2004, 2006-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef _C_XVASPRINTF_H +#define _C_XVASPRINTF_H + +/* This file uses _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get va_list. */ +#include + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prints formatted output to a string dynamically allocated with malloc(), + and returns it. Upon [ENOMEM] memory allocation error, it calls xalloc_die. + + It is the responsibility of the programmer to ensure that + - the format string is valid, + - the format string does not use %ls or %lc directives, and + - all widths in the format string and passed as arguments are >= -INT_MAX + and <= INT_MAX, + so that other errors + - [EINVAL] invalid format string, + - [EILSEQ] error during conversion between wide and multibyte characters, + - [EOVERFLOW] some specified width is > INT_MAX, + cannot occur. + + Formatting takes place in the C locale, that is, the decimal point + used in floating-point formatting directives is always '.'. */ +extern char *c_xasprintf (const char *format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; +extern char *c_xvasprintf (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +#ifdef __cplusplus +} +#endif + +#endif /* _C_XVASPRINTF_H */ diff --git a/include/libgnulib/c32is-impl.h b/include/libgnulib/c32is-impl.h new file mode 100755 index 0000000..9e98025 --- /dev/null +++ b/include/libgnulib/c32is-impl.h @@ -0,0 +1,105 @@ +/* Test whether a 32-bit wide character belongs to a specific character class. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +#include +#include + +#ifdef __CYGWIN__ +# include +#endif + +#if GNULIB_defined_mbstate_t +# include "localcharset.h" +# include "streq.h" +#endif + +#if GL_CHAR32_T_IS_UNICODE +# include "lc-charset-unicode.h" +#endif + +#include "unictype.h" + +#if _GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t +_GL_EXTERN_INLINE +#endif +int +FUNC (wint_t wc) +{ + /* The char32_t encoding of a multibyte character is defined by the way + mbrtoc32() is defined. */ + +#if GNULIB_defined_mbstate_t /* AIX, IRIX */ + /* mbrtoc32() is defined on top of mbtowc() for the non-UTF-8 locales + and directly for the UTF-8 locales. */ + if (wc != WEOF) + { + const char *encoding = locale_charset (); + if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + return UCS_FUNC (wc); + else + return WCHAR_FUNC (wc); + } + else + return 0; + +#elif HAVE_WORKING_MBRTOC32 && HAVE_WORKING_C32RTOMB /* glibc, Android */ + /* mbrtoc32() is essentially defined by the system libc. */ + +# if _GL_WCHAR_T_IS_UCS4 + /* The char32_t encoding of a multibyte character is known to be the same as + the wchar_t encoding. */ + return WCHAR_FUNC (wc); +# else + /* The char32_t encoding of a multibyte character is known to be UCS-4, + different from the wchar_t encoding. */ + if (wc != WEOF) + return UCS_FUNC (wc); + else + return 0; +# endif + +#elif _GL_SMALL_WCHAR_T /* Cygwin, mingw, MSVC */ + /* The wchar_t encoding is UTF-16. + The char32_t encoding is UCS-4. */ + +# if defined __CYGWIN__ && CYGWIN_VERSION_DLL_MAJOR >= 1007 + /* As an extension to POSIX, the iswalnum() function of Cygwin >= 1.7 + supports also wc arguments outside the Unicode BMP, that is, outside + the 'wchar_t' range. See + + = . */ + return WCHAR_FUNC (wc); +# else + if (wc == WEOF || wc == (wchar_t) wc) + /* wc is in the range for the isw* functions. */ + return WCHAR_FUNC (wc); + else + return UCS_FUNC (wc); +# endif + +#else /* macOS, FreeBSD, NetBSD, OpenBSD, HP-UX, Solaris, Minix, Android */ + /* char32_t and wchar_t are equivalent. */ + static_assert (sizeof (char32_t) == sizeof (wchar_t)); + +# if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION + return UCS_FUNC (wc); +# else + return WCHAR_FUNC (wc); +# endif +#endif +} diff --git a/include/libgnulib/c32to-impl.h b/include/libgnulib/c32to-impl.h new file mode 100755 index 0000000..2299ab7 --- /dev/null +++ b/include/libgnulib/c32to-impl.h @@ -0,0 +1,103 @@ +/* Case mapping of a 32-bit wide character. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2023. */ + +#include +#include + +#if GNULIB_defined_mbstate_t +# include "localcharset.h" +# include "streq.h" +#endif + +#if GL_CHAR32_T_IS_UNICODE +# include "lc-charset-unicode.h" +#endif + +#include "unicase.h" + +#if _GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t +_GL_EXTERN_INLINE +#endif +wint_t +FUNC (wint_t wc) +{ + /* The char32_t encoding of a multibyte character is defined by the way + mbrtoc32() is defined. */ + +#if GNULIB_defined_mbstate_t /* AIX, IRIX */ + /* mbrtoc32() is defined on top of mbtowc() for the non-UTF-8 locales + and directly for the UTF-8 locales. */ + if (wc != WEOF) + { + const char *encoding = locale_charset (); + if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + return UCS_FUNC (wc); + else + return WCHAR_FUNC (wc); + } + else + return wc; + +#elif HAVE_WORKING_MBRTOC32 && HAVE_WORKING_C32RTOMB /* glibc, Android */ + /* mbrtoc32() is essentially defined by the system libc. */ + +# if _GL_WCHAR_T_IS_UCS4 + /* The char32_t encoding of a multibyte character is known to be the same as + the wchar_t encoding. */ + return WCHAR_FUNC (wc); +# else + /* The char32_t encoding of a multibyte character is known to be UCS-4, + different from the wchar_t encoding. */ + if (wc != WEOF) + return UCS_FUNC (wc); + else + return wc; +# endif + +#elif _GL_SMALL_WCHAR_T /* Cygwin, mingw, MSVC */ + /* The wchar_t encoding is UTF-16. + The char32_t encoding is UCS-4. */ + +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, in the UTF-8 locale, towlower and towupper are + lacking (at least) the mappings for ISO-8859-1 characters, such as + 0x00C9 <-> 0x00E9. Since it is expensive to test whether the locale + encoding is UTF-8, ignore the system's WCHAR_FUNC altogether. */ + if (wc != WEOF) + return UCS_FUNC (wc); + else + return wc; +# else + if (wc == WEOF || wc == (wchar_t) wc) + /* wc is in the range for the tow* functions. */ + return WCHAR_FUNC (wc); + else + return UCS_FUNC (wc); +# endif + +#else /* macOS, FreeBSD, NetBSD, OpenBSD, HP-UX, Solaris, Minix, Android */ + /* char32_t and wchar_t are equivalent. */ + static_assert (sizeof (char32_t) == sizeof (wchar_t)); + +# if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION + return UCS_FUNC (wc); +# else + return WCHAR_FUNC (wc); +# endif +#endif +} diff --git a/include/libgnulib/canon-host.h b/include/libgnulib/canon-host.h new file mode 100755 index 0000000..5565bd8 --- /dev/null +++ b/include/libgnulib/canon-host.h @@ -0,0 +1,48 @@ +/* Host name canonicalization + + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + Written by Derek Price + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef CANON_HOST_H +#define CANON_HOST_H 1 + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +char *canon_host (char const *host) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; +char *canon_host_r (char const *host, int *cherror) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +const char *ch_strerror (void); +#define ch_strerror_r(cherror) gai_strerror (cherror); + + +#ifdef __cplusplus +} +#endif + +#endif /* !CANON_HOST_H */ diff --git a/include/libgnulib/canonicalize.h b/include/libgnulib/canonicalize.h new file mode 100755 index 0000000..fed0148 --- /dev/null +++ b/include/libgnulib/canonicalize.h @@ -0,0 +1,63 @@ +/* Return the canonical absolute name of a given file. + Copyright (C) 1996-2007, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef CANONICALIZE_H_ +# define CANONICALIZE_H_ + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include /* for canonicalize_file_name */ + +#define CAN_MODE_MASK (CAN_EXISTING | CAN_ALL_BUT_LAST | CAN_MISSING) + +#ifdef __cplusplus +extern "C" { +#endif + +enum canonicalize_mode_t + { + /* All components must exist. */ + CAN_EXISTING = 0, + + /* All components excluding last one must exist. */ + CAN_ALL_BUT_LAST = 1, + + /* No requirements on components existence. */ + CAN_MISSING = 2, + + /* Don't expand symlinks. */ + CAN_NOLINKS = 4 + }; +typedef enum canonicalize_mode_t canonicalize_mode_t; + +/* Return the canonical absolute name of file NAME, while treating + missing elements according to CAN_MODE. A canonical name + does not contain any `.', `..' components nor any repeated file name + separators ('/') or, depending on other CAN_MODE flags, symlinks. + Whether components must exist or not depends on canonicalize mode. + The result is malloc'd. + Upon failure, return NULL with errno set. */ +char *canonicalize_filename_mode (const char *, canonicalize_mode_t) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#ifdef __cplusplus +} +#endif + +#endif /* !CANONICALIZE_H_ */ diff --git a/include/libgnulib/careadlinkat.h b/include/libgnulib/careadlinkat.h new file mode 100755 index 0000000..2c552b6 --- /dev/null +++ b/include/libgnulib/careadlinkat.h @@ -0,0 +1,82 @@ +/* Read symbolic links into a buffer without size limitation, relative to fd. + + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef _GL_CAREADLINKAT_H +#define _GL_CAREADLINKAT_H + +/* This file uses HAVE_READLINKAT. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +struct allocator; + +/* Assuming the current directory is FD, get the symbolic link value + of FILENAME as a null-terminated string and put it into a buffer. + If FD is AT_FDCWD, FILENAME is interpreted relative to the current + working directory, as in openat. + + If the link is small enough to fit into BUFFER put it there. + BUFFER's size is BUFFER_SIZE, and BUFFER can be null + if BUFFER_SIZE is zero. + + If the link is not small, put it into a dynamically allocated + buffer managed by ALLOC. It is the caller's responsibility to free + the returned value if it is nonnull and is not BUFFER. + + The PREADLINKAT function specifies how to read links. It operates + like POSIX readlinkat() + + but can assume that its first argument is the same as FD. + + If successful, return the buffer address; otherwise return NULL and + set errno. */ + +char *careadlinkat (int fd, char const *filename, + char *restrict buffer, size_t buffer_size, + struct allocator const *alloc, + ssize_t (*preadlinkat) (int, char const *, + char *, size_t)); + +/* Suitable value for careadlinkat's FD argument. */ +#if HAVE_READLINKAT +/* AT_FDCWD is declared in . */ +#else +/* Define AT_FDCWD independently, so that the careadlinkat module does + not depend on the fcntl-h module. We might as well use the same value + as fcntl-h. */ +# ifndef AT_FDCWD +# define AT_FDCWD (-3041965) +# endif +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_CAREADLINKAT_H */ diff --git a/include/libgnulib/cdefs.h b/include/libgnulib/cdefs.h new file mode 100755 index 0000000..9c49eeb --- /dev/null +++ b/include/libgnulib/cdefs.h @@ -0,0 +1,715 @@ +/* Copyright (C) 1992-2024 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_CDEFS_H +#define _SYS_CDEFS_H 1 + +/* We are almost always included from features.h. */ +#ifndef _FEATURES_H +# include +#endif + +/* The GNU libc does not support any K&R compilers or the traditional mode + of ISO C compilers anymore. Check for some of the combinations not + supported anymore. */ +#if defined __GNUC__ && !defined __STDC__ +# error "You need a ISO C conforming compiler to use the glibc headers" +#endif + +/* Some user header file might have defined this before. */ +#undef __P +#undef __PMT + +/* Compilers that lack __has_attribute may object to + #if defined __has_attribute && __has_attribute (...) + even though they do not need to evaluate the right-hand side of the &&. + Similarly for __has_builtin, etc. */ +#if (defined __has_attribute \ + && (!defined __clang_minor__ \ + || (defined __apple_build_version__ \ + ? 7000000 <= __apple_build_version__ \ + : 5 <= __clang_major__))) +# define __glibc_has_attribute(attr) __has_attribute (attr) +#else +# define __glibc_has_attribute(attr) 0 +#endif +#ifdef __has_builtin +# define __glibc_has_builtin(name) __has_builtin (name) +#else +# define __glibc_has_builtin(name) 0 +#endif +#ifdef __has_extension +# define __glibc_has_extension(ext) __has_extension (ext) +#else +# define __glibc_has_extension(ext) 0 +#endif + +#if defined __GNUC__ || defined __clang__ + +/* All functions, except those with callbacks or those that + synchronize memory, are leaf functions. */ +# if __GNUC_PREREQ (4, 6) && !defined _LIBC +# define __LEAF , __leaf__ +# define __LEAF_ATTR __attribute__ ((__leaf__)) +# else +# define __LEAF +# define __LEAF_ATTR +# endif + +/* GCC can always grok prototypes. For C++ programs we add throw() + to help it optimize the function calls. But this only works with + gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions + as non-throwing using a function attribute since programs can use + the -fexceptions options for C code as well. */ +# if !defined __cplusplus \ + && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__)) +# define __THROW __attribute__ ((__nothrow__ __LEAF)) +# define __THROWNL __attribute__ ((__nothrow__)) +# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct +# define __NTHNL(fct) __attribute__ ((__nothrow__)) fct +# else +# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4) +# if __cplusplus >= 201103L +# define __THROW noexcept (true) +# else +# define __THROW throw () +# endif +# define __THROWNL __THROW +# define __NTH(fct) __LEAF_ATTR fct __THROW +# define __NTHNL(fct) fct __THROW +# else +# define __THROW +# define __THROWNL +# define __NTH(fct) fct +# define __NTHNL(fct) fct +# endif +# endif + +#else /* Not GCC or clang. */ + +# if (defined __cplusplus \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) +# define __inline inline +# else +# define __inline /* No inline functions. */ +# endif + +# define __THROW +# define __THROWNL +# define __NTH(fct) fct + +#endif /* GCC || clang. */ + +/* These two macros are not used in glibc anymore. They are kept here + only because some other projects expect the macros to be defined. */ +#define __P(args) args +#define __PMT(args) args + +/* For these things, GCC behaves the ANSI way normally, + and the non-ANSI way under -traditional. */ + +#define __CONCAT(x,y) x ## y +#define __STRING(x) #x + +/* This is not a typedef so `const __ptr_t' does the right thing. */ +#define __ptr_t void * + + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + + +/* Gnulib avoids these definitions, as they don't work on non-glibc platforms. + In particular, __bos and __bos0 are defined differently in the Android libc. + */ +#ifndef __GNULIB_CDEFS + +/* Fortify support. */ +# define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) +# define __bos0(ptr) __builtin_object_size (ptr, 0) + +/* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */ +# if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \ + || __GNUC_PREREQ (12, 0)) +# define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0) +# define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1) +# else +# define __glibc_objsize0(__o) __bos0 (__o) +# define __glibc_objsize(__o) __bos (__o) +# endif + +/* Compile time conditions to choose between the regular, _chk and _chk_warn + variants. These conditions should get evaluated to constant and optimized + away. */ + +# define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s)) +# define __glibc_unsigned_or_positive(__l) \ + ((__typeof (__l)) 0 < (__typeof (__l)) -1 \ + || (__builtin_constant_p (__l) && (__l) > 0)) + +/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ + condition can be folded to a constant and if it is true, or unknown (-1) */ +# define __glibc_safe_or_unknown_len(__l, __s, __osz) \ + ((__osz) == (__SIZE_TYPE__) -1 \ + || (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + (__s), (__osz))) \ + && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz)))) + +/* Conversely, we know at compile time that the length is unsafe if the + __L * __S <= __OBJSZ condition can be folded to a constant and if it is + false. */ +# define __glibc_unsafe_len(__l, __s, __osz) \ + (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + __s, __osz)) \ + && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) + +/* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be + declared. */ + +# define __glibc_fortify(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \ + : __ ## f ## _chk (__VA_ARGS__, __osz))) \ + +/* Fortify function f, where object size argument passed to f is the number of + elements and not total size. */ + +# define __glibc_fortify_n(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \ + : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \ + +#endif + + +#if __GNUC_PREREQ (4,3) +# define __warnattr(msg) __attribute__((__warning__ (msg))) +# define __errordecl(name, msg) \ + extern void name (void) __attribute__((__error__ (msg))) +#else +# define __warnattr(msg) +# define __errordecl(name, msg) extern void name (void) +#endif + +/* Support for flexible arrays. + Headers that should use flexible arrays only if they're "real" + (e.g. only if they won't affect sizeof()) should test + #if __glibc_c99_flexarr_available. */ +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif __GNUC_PREREQ (2,97) || defined __clang__ +/* GCC 2.97 and clang support C99 flexible array members as an extension, + even when in C89 mode or compiling C++ (any version). */ +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif defined __GNUC__ +/* Pre-2.97 GCC did not support C99 flexible arrays but did have + an equivalent extension with slightly different notation. */ +# define __flexarr [0] +# define __glibc_c99_flexarr_available 1 +#else +/* Some other non-C99 compiler. Approximate with [1]. */ +# define __flexarr [1] +# define __glibc_c99_flexarr_available 0 +#endif + + +/* __asm__ ("xyz") is used throughout the headers to rename functions + at the assembly language level. This is wrapped by the __REDIRECT + macro, in order to support compilers that can do this some other + way. When compilers don't support asm-names at all, we have to do + preprocessor tricks instead (which don't have exactly the right + semantics, but it's the best we can do). + + Example: + int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ + +#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4) + +# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) +# ifdef __cplusplus +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __THROW __asm__ (__ASMNAME (#alias)) +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __THROWNL __asm__ (__ASMNAME (#alias)) +# else +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROW +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROWNL +# endif +# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) +# define __ASMNAME2(prefix, cname) __STRING (prefix) cname + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __REDIRECT(name, proto, alias) name proto; \ + _Pragma("let " #name " = " #alias) +*/ +#endif + +/* GCC and clang have various useful declarations that can be made with + the '__attribute__' syntax. All of the ways we use this do fine if + they are omitted for compilers that don't understand it. */ +#if !(defined __GNUC__ || defined __clang__) +# define __attribute__(xyz) /* Ignore */ +#endif + +/* At some point during the gcc 2.96 development the `malloc' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__) +# define __attribute_malloc__ __attribute__ ((__malloc__)) +#else +# define __attribute_malloc__ /* Ignore */ +#endif + +/* Tell the compiler which arguments to an allocation function + indicate the size of the allocation. */ +#if __GNUC_PREREQ (4, 3) +# define __attribute_alloc_size__(params) \ + __attribute__ ((__alloc_size__ params)) +#else +# define __attribute_alloc_size__(params) /* Ignore. */ +#endif + +/* Tell the compiler which argument to an allocation function + indicates the alignment of the allocation. */ +#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__) +# define __attribute_alloc_align__(param) \ + __attribute__ ((__alloc_align__ param)) +#else +# define __attribute_alloc_align__(param) /* Ignore. */ +#endif + +/* At some point during the gcc 2.96 development the `pure' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__) +# define __attribute_pure__ __attribute__ ((__pure__)) +#else +# define __attribute_pure__ /* Ignore */ +#endif + +/* This declaration tells the compiler that the value is constant. */ +#if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__) +# define __attribute_const__ __attribute__ ((__const__)) +#else +# define __attribute_const__ /* Ignore */ +#endif + +#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__) +# define __attribute_maybe_unused__ __attribute__ ((__unused__)) +#else +# define __attribute_maybe_unused__ /* Ignore */ +#endif + +/* At some point during the gcc 3.1 development the `used' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__) +# define __attribute_used__ __attribute__ ((__used__)) +# define __attribute_noinline__ __attribute__ ((__noinline__)) +#else +# define __attribute_used__ __attribute__ ((__unused__)) +# define __attribute_noinline__ /* Ignore */ +#endif + +/* Since version 3.2, gcc allows marking deprecated functions. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__) +# define __attribute_deprecated__ __attribute__ ((__deprecated__)) +#else +# define __attribute_deprecated__ /* Ignore */ +#endif + +/* Since version 4.5, gcc also allows one to specify the message printed + when a deprecated function is used. clang claims to be gcc 4.2, but + may also support this feature. */ +#if __GNUC_PREREQ (4,5) \ + || __glibc_has_extension (__attribute_deprecated_with_message__) +# define __attribute_deprecated_msg__(msg) \ + __attribute__ ((__deprecated__ (msg))) +#else +# define __attribute_deprecated_msg__(msg) __attribute_deprecated__ +#endif + +/* At some point during the gcc 2.8 development the `format_arg' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. + If several `format_arg' attributes are given for the same function, in + gcc-3.0 and older, all but the last one are ignored. In newer gccs, + all designated arguments are considered. */ +#if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__) +# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) +#else +# define __attribute_format_arg__(x) /* Ignore */ +#endif + +/* At some point during the gcc 2.97 development the `strfmon' format + attribute for functions was introduced. We don't want to use it + unconditionally (although this would be possible) since it + generates warnings. */ +#if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__) +# define __attribute_format_strfmon__(a,b) \ + __attribute__ ((__format__ (__strfmon__, a, b))) +#else +# define __attribute_format_strfmon__(a,b) /* Ignore */ +#endif + +/* The nonnull function attribute marks pointer parameters that + must not be NULL. This has the name __nonnull in glibc, + and __attribute_nonnull__ in files shared with Gnulib to avoid + collision with a different __nonnull in DragonFlyBSD 5.9. */ +#ifndef __attribute_nonnull__ +# if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__) +# define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params)) +# else +# define __attribute_nonnull__(params) +# endif +#endif +#ifndef __nonnull +# define __nonnull(params) __attribute_nonnull__ (params) +#endif + +/* The returns_nonnull function attribute marks the return type of the function + as always being non-null. */ +#ifndef __returns_nonnull +# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__) +# define __returns_nonnull __attribute__ ((__returns_nonnull__)) +# else +# define __returns_nonnull +# endif +#endif + +/* If fortification mode, we warn about unused results of certain + function calls which can lead to problems. */ +#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__) +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 +# define __wur __attribute_warn_unused_result__ +# endif +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif +#ifndef __wur +# define __wur /* Ignore */ +#endif + +/* Forces a function to be always inlined. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__) +/* The Linux kernel defines __always_inline in stddef.h (283d7573), and + it conflicts with this definition. Therefore undefine it first to + allow either header to be included first. */ +# undef __always_inline +# define __always_inline __inline __attribute__ ((__always_inline__)) +#else +# undef __always_inline +# define __always_inline __inline +#endif + +/* Associate error messages with the source location of the call site rather + than with the source location inside the function. */ +#if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__) +# define __attribute_artificial__ __attribute__ ((__artificial__)) +#else +# define __attribute_artificial__ /* Ignore */ +#endif + +/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ + or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions + older than 4.3 may define these macros and still not guarantee GNU inlining + semantics. + + clang++ identifies itself as gcc-4.2, but has support for GNU inlining + semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and + __GNUC_GNU_INLINE__ macro definitions. */ +#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ + || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ + || defined __GNUC_GNU_INLINE__))) +# if defined __GNUC_STDC_INLINE__ || defined __cplusplus +# define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) +# define __extern_always_inline \ + extern __always_inline __attribute__ ((__gnu_inline__)) +# else +# define __extern_inline extern __inline +# define __extern_always_inline extern __always_inline +# endif +#endif + +#ifdef __extern_always_inline +# define __fortify_function __extern_always_inline __attribute_artificial__ +#endif + +/* GCC 4.3 and above allow passing all anonymous arguments of an + __extern_always_inline function to some other vararg function. */ +#if __GNUC_PREREQ (4,3) +# define __va_arg_pack() __builtin_va_arg_pack () +# define __va_arg_pack_len() __builtin_va_arg_pack_len () +#endif + +/* It is possible to compile containing GCC extensions even if GCC is + run in pedantic mode if the uses are carefully marked using the + `__extension__' keyword. But this is not generally available before + version 2.8. */ +#if !(__GNUC_PREREQ (2,8) || defined __clang__) +# define __extension__ /* Ignore */ +#endif + +/* __restrict is known in EGCS 1.2 and above, and in clang. + It works also in C++ mode (outside of arrays), but only when spelled + as '__restrict', not 'restrict'. */ +#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3) +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict restrict +# else +# define __restrict /* Ignore */ +# endif +#endif + +/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is + array_name[restrict] + GCC 3.1 and clang support this. + This syntax is not usable in C++ mode. */ +#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus +# define __restrict_arr __restrict +#else +# ifdef __GNUC__ +# define __restrict_arr /* Not supported in old GCC. */ +# else +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict_arr restrict +# else +/* Some other non-C99 compiler. */ +# define __restrict_arr /* Not supported. */ +# endif +# endif +#endif + +#if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect) +# define __glibc_unlikely(cond) __builtin_expect ((cond), 0) +# define __glibc_likely(cond) __builtin_expect ((cond), 1) +#else +# define __glibc_unlikely(cond) (cond) +# define __glibc_likely(cond) (cond) +#endif + +#if (!defined _Noreturn \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && !(__GNUC_PREREQ (4,7) \ + || (3 < __clang_major__ + (5 <= __clang_minor__)))) +# if __GNUC_PREREQ (2,8) +# define _Noreturn __attribute__ ((__noreturn__)) +# else +# define _Noreturn +# endif +#endif + +#if __GNUC_PREREQ (8, 0) +/* Describes a char array whose address can safely be passed as the first + argument to strncpy and strncat, as the char array is not necessarily + a NUL-terminated string. */ +# define __attribute_nonstring__ __attribute__ ((__nonstring__)) +#else +# define __attribute_nonstring__ +#endif + +/* Undefine (also defined in libc-symbols.h). */ +#undef __attribute_copy__ +#if __GNUC_PREREQ (9, 0) +/* Copies attributes from the declaration or type referenced by + the argument. */ +# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) +#else +# define __attribute_copy__(arg) +#endif + +#if (!defined _Static_assert && !defined __cplusplus \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \ + || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ + extern int (*__Static_assert_function (void)) \ + [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + +/* Gnulib avoids including these, as they don't work on non-glibc or + older glibc platforms. */ +#ifndef __GNULIB_CDEFS +# include +# include +#endif + +#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# ifdef __REDIRECT + +/* Alias name defined automatically. */ +# define __LDBL_REDIR(name, proto) ... unused__ldbl_redir +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined automatically, with leading underscores. */ +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name \ + __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined manually. */ +# define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); + +# define __LDBL_REDIR1_NTH(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) + +/* Unused. */ +# define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl +# define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth + +# else +_Static_assert (0, "IEEE 128-bits long double requires redirection on this platform"); +# endif +#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH +# define __LDBL_COMPAT 1 +# ifdef __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) +# define __LDBL_REDIR(name, proto) \ + __LDBL_REDIR1 (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) +# define __LDBL_REDIR_NTH(name, proto) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name)); +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); +# define __REDIRECT_LDBL(name, proto, alias) \ + __LDBL_REDIR1 (name, proto, __nldbl_##alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) +# endif +#endif +#if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \ + || !defined __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) name proto +# define __LDBL_REDIR(name, proto) name proto +# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW +# define __LDBL_REDIR_NTH(name, proto) name proto __THROW +# define __LDBL_REDIR2_DECL(name) +# define __LDBL_REDIR_DECL(name) +# ifdef __REDIRECT +# define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# endif +#endif + +/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is + intended for use in preprocessor macros. + + Note: MESSAGE must be a _single_ string; concatenation of string + literals is not supported. */ +#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) +# define __glibc_macro_warning1(message) _Pragma (#message) +# define __glibc_macro_warning(message) \ + __glibc_macro_warning1 (GCC warning message) +#else +# define __glibc_macro_warning(msg) +#endif + +/* Generic selection (ISO C11) is a C-only feature, available in GCC + since version 4.9. Previous versions do not provide generic + selection, even though they might set __STDC_VERSION__ to 201112L, + when in -std=c11 mode. Thus, we must check for !defined __GNUC__ + when testing __STDC_VERSION__ for generic selection support. + On the other hand, Clang also defines __GNUC__, so a clang-specific + check is required to enable the use of generic selection. */ +#if !defined __cplusplus \ + && (__GNUC_PREREQ (4, 9) \ + || __glibc_has_extension (c_generic_selections) \ + || (!defined __GNUC__ && defined __STDC_VERSION__ \ + && __STDC_VERSION__ >= 201112L)) +# define __HAVE_GENERIC_SELECTION 1 +#else +# define __HAVE_GENERIC_SELECTION 0 +#endif + +#if __GNUC_PREREQ (10, 0) +/* Designates a 1-based positional argument ref-index of pointer type + that can be used to access size-index elements of the pointed-to + array according to access mode, or at least one element when + size-index is not provided: + access (access-mode, [, ]) */ +# define __attr_access(x) __attribute__ ((__access__ x)) +/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may + use the access attribute to get object sizes from function definition + arguments, so we can't use them on functions we fortify. Drop the object + size hints for such functions. */ +# if __USE_FORTIFY_LEVEL == 3 +# define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o))) +# else +# define __fortified_attr_access(a, o, s) __attr_access ((a, o, s)) +# endif +# if __GNUC_PREREQ (11, 0) +# define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) +# else +# define __attr_access_none(argno) +# endif +#else +# define __fortified_attr_access(a, o, s) +# define __attr_access(x) +# define __attr_access_none(argno) +#endif + +#if __GNUC_PREREQ (11, 0) +/* Designates dealloc as a function to call to deallocate objects + allocated by the declared function. */ +# define __attr_dealloc(dealloc, argno) \ + __attribute__ ((__malloc__ (dealloc, argno))) +# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1) +#else +# define __attr_dealloc(dealloc, argno) +# define __attr_dealloc_free +#endif + +/* Specify that a function such as setjmp or vfork may return + twice. */ +#if __GNUC_PREREQ (4, 1) +# define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) +#else +# define __attribute_returns_twice__ /* Ignore. */ +#endif + +#endif /* sys/cdefs.h */ diff --git a/include/libgnulib/chdir-long.h b/include/libgnulib/chdir-long.h new file mode 100755 index 0000000..c679d11 --- /dev/null +++ b/include/libgnulib/chdir-long.h @@ -0,0 +1,40 @@ +/* provide a chdir function that tries not to fail due to ENAMETOOLONG + Copyright (C) 2004-2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering. */ + +#include +#include + +#include "pathmax.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* On systems without PATH_MAX, presume that chdir accepts + arbitrarily long directory names. */ +#ifndef PATH_MAX +# define chdir_long(Dir) chdir (Dir) +#else +int chdir_long (char *dir); +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/check-version.h b/include/libgnulib/check-version.h new file mode 100755 index 0000000..01750ea --- /dev/null +++ b/include/libgnulib/check-version.h @@ -0,0 +1,35 @@ +/* check-version.h --- Check version string compatibility. + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Simon Josefsson. */ + +#ifndef CHECK_VERSION_H +# define CHECK_VERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + + +extern const char * +check_version (const char *req_version); + + +#ifdef __cplusplus +} +#endif + +#endif /* CHECK_VERSION_H */ diff --git a/include/libgnulib/classpath.h b/include/libgnulib/classpath.h new file mode 100755 index 0000000..d4c199b --- /dev/null +++ b/include/libgnulib/classpath.h @@ -0,0 +1,47 @@ +/* Java CLASSPATH handling. + Copyright (C) 2003, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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 3 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, see . */ + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return the new CLASSPATH value. The given classpaths are prepended to + the current CLASSPATH value. If use_minimal_classpath, the current + CLASSPATH is ignored. */ +extern char * new_classpath (const char * const *classpaths, + unsigned int classpaths_count, + bool use_minimal_classpath); + +/* Set CLASSPATH and returns a safe copy of its old value. */ +extern char * set_classpath (const char * const *classpaths, + unsigned int classpaths_count, + bool use_minimal_classpath, bool verbose) + _GL_ATTRIBUTE_MALLOC; + +/* Restore CLASSPATH to its previous value. */ +extern void reset_classpath (char *old_classpath); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/clean-temp-private.h b/include/libgnulib/clean-temp-private.h new file mode 100755 index 0000000..8be031a --- /dev/null +++ b/include/libgnulib/clean-temp-private.h @@ -0,0 +1,81 @@ +/* Private interface between modules 'clean-temp-simple' and 'clean-temp'. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _CLEAN_TEMP_PRIVATE_H +#define _CLEAN_TEMP_PRIVATE_H + +#include +#include "gl_list.h" +#include "asyncsafe-spin.h" + +/* The use of 'volatile' in the types below (and ISO C 99 section 5.1.2.3.(5)) + ensure that while constructing or modifying the data structures, the field + values are written to memory in the order of the C statements. So the + signal handler can rely on these field values to be up to date. */ + +/* Registry for a single temporary directory. + 'struct temp_dir' from the public header file overlaps with this. */ +struct tempdir +{ + /* The absolute pathname of the directory. */ + char * volatile dirname; + /* Whether errors during explicit cleanup are reported to standard error. */ + bool cleanup_verbose; + /* Absolute pathnames of subdirectories. */ + gl_list_t /* */ volatile subdirs; + /* Absolute pathnames of files. */ + gl_list_t /* */ volatile files; +}; + +/* List of all temporary directories. */ +struct all_tempdirs +{ + struct tempdir * volatile * volatile tempdir_list; + size_t volatile tempdir_count; + size_t tempdir_allocated; +}; +#define dir_cleanup_list clean_temp_dir_cleanup_list +extern struct all_tempdirs dir_cleanup_list; + +/* A file descriptor to be closed. + In multithreaded programs, it is forbidden to close the same fd twice, + because you never know what unrelated open() calls are being executed in + other threads. So, the 'close (fd)' must be guarded by a once-only guard. */ +struct closeable_fd +{ + /* The file descriptor to close. */ + int volatile fd; + /* Set to true when it has been closed. */ + bool volatile closed; + /* Lock that protects the fd from being closed twice. */ + asyncsafe_spinlock_t lock; + /* Tells whether this list element has been done and can be freed. */ + bool volatile done; +}; +#define descriptors clean_temp_descriptors +extern gl_list_t /* */ volatile descriptors; + +extern bool clean_temp_string_equals (const void *x1, const void *x2); +extern size_t clean_temp_string_hash (const void *x); + +extern _GL_ASYNC_SAFE int clean_temp_asyncsafe_close (struct closeable_fd *element); +extern void clean_temp_init_asyncsafe_close (void); + +extern int clean_temp_init (void); + +extern int clean_temp_unlink (const char *absolute_file_name, bool cleanup_verbose); + +#endif /* _CLEAN_TEMP_PRIVATE_H */ diff --git a/include/libgnulib/clean-temp-simple.h b/include/libgnulib/clean-temp-simple.h new file mode 100755 index 0000000..b9b93af --- /dev/null +++ b/include/libgnulib/clean-temp-simple.h @@ -0,0 +1,50 @@ +/* Temporary files with automatic cleanup. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _CLEAN_TEMP_SIMPLE_H +#define _CLEAN_TEMP_SIMPLE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* See clean-temp.h for a general discussion of this module. */ + +/* Register the given ABSOLUTE_FILE_NAME as being a file that needs to be + removed. + Should be called before the file ABSOLUTE_FILE_NAME is created. + Return 0 upon success, or -1 if there was a memory allocation problem. */ +extern int register_temporary_file (const char *absolute_file_name); + +/* Unregister the given ABSOLUTE_FILE_NAME as being a file that needs to be + removed. + Should be called when the file ABSOLUTE_FILE_NAME could not be created. */ +extern void unregister_temporary_file (const char *absolute_file_name); + +/* Remove the given ABSOLUTE_FILE_NAME and unregister it. + CLEANUP_VERBOSE determines whether errors are reported to standard error. + Return 0 upon success, or -1 if there was some problem. */ +extern int cleanup_temporary_file (const char *absolute_file_name, + bool cleanup_verbose); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CLEAN_TEMP_SIMPLE_H */ diff --git a/include/libgnulib/clean-temp.h b/include/libgnulib/clean-temp.h new file mode 100755 index 0000000..8a5aecc --- /dev/null +++ b/include/libgnulib/clean-temp.h @@ -0,0 +1,194 @@ +/* Temporary directories and temporary files with automatic cleanup. + Copyright (C) 2006, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +#ifndef _CLEAN_TEMP_H +#define _CLEAN_TEMP_H + +/* This file uses _GL_ATTRIBUTE_DEALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Temporary directories and temporary files should be automatically removed + when the program exits either normally or through a fatal signal. We can't + rely on the "unlink before close" idiom, because it works only on Unix and + also - if no signal blocking is used - leaves a time window where a fatal + signal would not clean up the temporary file. + + Also, open file descriptors need to be closed before the temporary files + and the temporary directories can be removed, because only on Unix + (excluding Cygwin) can one remove directories containing open files. + + There are two modules: + - 'clean-temp' provides support for temporary directories and temporary + files inside these temporary directories, + - 'clean-temp-simple' provides support for temporary files without + temporary directories. + The temporary directories and files are automatically cleaned up (at the + latest) when the program exits or dies from a fatal signal such as SIGINT, + SIGTERM, SIGHUP, but not if it dies from a fatal signal such as SIGQUIT, + SIGKILL, or SIGABRT, SIGSEGV, SIGBUS, SIGILL, SIGFPE. + + For the cleanup in the normal case, programs that use this module need to + call 'cleanup_temp_dir' for each successful return of 'create_temp_dir'. + The cleanup in the case of a fatal signal such as SIGINT, SIGTERM, SIGHUP, + is done entirely automatically by the functions of this module. + + Limitations: Files or directories can still be left over if + - the program is dies from a fatal signal such as SIGQUIT, SIGKILL, or + SIGABRT, SIGSEGV, SIGBUS, SIGILL, SIGFPE, or + - in a multithreaded program, the fatal signal handler is already running + while another thread of the program creates a new temporary directory + or temporary file, or + - on native Windows, some temporary files are used by a subprocess while + the fatal signal interrupts the program. + */ + + +/* ============= Temporary files without temporary directories ============= */ + +#include "clean-temp-simple.h" + +/* ========= Temporary directories and temporary files inside them ========= */ + +struct temp_dir +{ + /* The absolute pathname of the directory. */ + const char * const dir_name; + /* Whether errors during explicit cleanup are reported to standard error. */ + bool cleanup_verbose; + /* More fields are present here, but not public. */ +}; + +/* Remove all registered files and subdirectories inside DIR and DIR itself. + DIR cannot be used any more after this call. + Return 0 upon success, or -1 if there was some problem. */ +extern int cleanup_temp_dir (struct temp_dir *dir); + +/* Create a temporary directory. + PREFIX is used as a prefix for the name of the temporary directory. It + should be short and still give an indication about the program. + PARENTDIR can be used to specify the parent directory; if NULL, a default + parent directory is used (either $TMPDIR or /tmp or similar). + CLEANUP_VERBOSE determines whether errors during explicit cleanup are + reported to standard error. + Return a fresh 'struct temp_dir' on success. Upon error, an error message + is shown and NULL is returned. */ +extern struct temp_dir * create_temp_dir (const char *prefix, + const char *parentdir, + bool cleanup_verbose) + _GL_ATTRIBUTE_DEALLOC (cleanup_temp_dir, 1); + +/* Register the given ABSOLUTE_FILE_NAME as being a file inside DIR, that + needs to be removed before DIR can be removed. + Should be called before the file ABSOLUTE_FILE_NAME is created. */ +extern void register_temp_file (struct temp_dir *dir, + const char *absolute_file_name); + +/* Unregister the given ABSOLUTE_FILE_NAME as being a file inside DIR, that + needs to be removed before DIR can be removed. + Should be called when the file ABSOLUTE_FILE_NAME could not be created. */ +extern void unregister_temp_file (struct temp_dir *dir, + const char *absolute_file_name); + +/* Register the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, + that needs to be removed before DIR can be removed. + Should be called before the subdirectory ABSOLUTE_DIR_NAME is created. */ +extern void register_temp_subdir (struct temp_dir *dir, + const char *absolute_dir_name); + +/* Unregister the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, + that needs to be removed before DIR can be removed. + Should be called when the subdirectory ABSOLUTE_DIR_NAME could not be + created. */ +extern void unregister_temp_subdir (struct temp_dir *dir, + const char *absolute_dir_name); + +/* Remove the given ABSOLUTE_FILE_NAME and unregister it. + Return 0 upon success, or -1 if there was some problem. */ +extern int cleanup_temp_file (struct temp_dir *dir, + const char *absolute_file_name); + +/* Remove the given ABSOLUTE_DIR_NAME and unregister it. + Return 0 upon success, or -1 if there was some problem. */ +extern int cleanup_temp_subdir (struct temp_dir *dir, + const char *absolute_dir_name); + +/* Remove all registered files and subdirectories inside DIR. + Return 0 upon success, or -1 if there was some problem. */ +extern int cleanup_temp_dir_contents (struct temp_dir *dir); + +/* ================== Opening and closing temporary files ================== */ + +/* Open a temporary file in a temporary directory. + FILE_NAME must already have been passed to register_temp_file. + Registers the resulting file descriptor to be closed. + DELETE_ON_CLOSE indicates whether the file can be deleted when the resulting + file descriptor or stream is closed. */ +extern int open_temp (const char *file_name, int flags, mode_t mode, + bool delete_on_close); +extern FILE * fopen_temp (const char *file_name, const char *mode, + bool delete_on_close); + +/* Open a temporary file, generating its name based on FILE_NAME_TMPL. + FILE_NAME_TMPL must match the rules for mk[s]temp (i.e. end in "XXXXXX", + possibly with a suffix). The name constructed does not exist at the time + of the call. FILE_NAME_TMPL is overwritten with the result. + A safe choice for MODE is S_IRUSR | S_IWUSR, a.k.a. 0600. + Registers the file for deletion. + Opens the file, with the given FLAGS and mode MODE. + Registers the resulting file descriptor to be closed. */ +extern int gen_register_open_temp (char *file_name_tmpl, int suffixlen, + int flags, mode_t mode); + +/* Close a temporary file. + FD must have been returned by open_temp or gen_register_open_temp. + Unregisters the previously registered file descriptor. */ +extern int close_temp (int fd); + +/* Close a temporary file. + FP must have been returned by fopen_temp, or by fdopen on a file descriptor + returned by open_temp or gen_register_open_temp. + Unregisters the previously registered file descriptor. */ +extern int fclose_temp (FILE *fp); + +/* Like fwriteerror. + FP must have been returned by fopen_temp, or by fdopen on a file descriptor + returned by open_temp or gen_register_open_temp. + Unregisters the previously registered file descriptor. */ +extern int fwriteerror_temp (FILE *fp); + +/* Like close_stream. + FP must have been returned by fopen_temp, or by fdopen on a file descriptor + returned by open_temp or gen_register_open_temp. + Unregisters the previously registered file descriptor. */ +extern int close_stream_temp (FILE *fp); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CLEAN_TEMP_H */ diff --git a/include/libgnulib/cloexec.h b/include/libgnulib/cloexec.h new file mode 100755 index 0000000..a7944d6 --- /dev/null +++ b/include/libgnulib/cloexec.h @@ -0,0 +1,44 @@ +/* cloexec.c - set or clear the close-on-exec descriptor flag + + Copyright (C) 2004, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, + or clear the flag if VALUE is false. + Return 0 on success, or -1 on error with 'errno' set. + + Note that on MingW, this function does NOT protect DESC from being + inherited into spawned children. Instead, either use dup_cloexec + followed by closing the original DESC, or use interfaces such as + open or pipe2 that accept flags like O_CLOEXEC to create DESC + non-inheritable in the first place. */ + +int set_cloexec_flag (int desc, bool value); + +/* Duplicates a file handle FD, while marking the copy to be closed + prior to exec or spawn. Returns -1 and sets errno if FD could not + be duplicated. */ + +int dup_cloexec (int fd); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/close-stream.h b/include/libgnulib/close-stream.h new file mode 100755 index 0000000..3c421dc --- /dev/null +++ b/include/libgnulib/close-stream.h @@ -0,0 +1,30 @@ +/* Close a stream, with nicer error checking than fclose's. + + Copyright (C) 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +int close_stream (FILE *stream); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/closein.h b/include/libgnulib/closein.h new file mode 100755 index 0000000..665df06 --- /dev/null +++ b/include/libgnulib/closein.h @@ -0,0 +1,32 @@ +/* Close standard input, rewinding seekable stdin if necessary. + + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef _GL_CLOSEIN_H +# define _GL_CLOSEIN_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +void close_stdin_set_file_name (const char *file); +void close_stdin (void); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/closeout.h b/include/libgnulib/closeout.h new file mode 100755 index 0000000..6036e62 --- /dev/null +++ b/include/libgnulib/closeout.h @@ -0,0 +1,34 @@ +/* Close standard output and standard error. + + Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#ifndef CLOSEOUT_H +# define CLOSEOUT_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +void close_stdout_set_file_name (const char *file); +void close_stdout_set_ignore_EPIPE (bool ignore); +void close_stdout (void); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/concat-filename.h b/include/libgnulib/concat-filename.h new file mode 100755 index 0000000..328b0e2 --- /dev/null +++ b/include/libgnulib/concat-filename.h @@ -0,0 +1,51 @@ +/* Construct a full filename from a directory and a relative filename. + Copyright (C) 2001-2004, 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _CONCAT_FILENAME_H +#define _CONCAT_FILENAME_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Concatenate a directory filename, a relative filename and an optional + suffix. Return a freshly allocated filename. Return NULL and set errno + upon memory allocation failure. */ +extern char *concatenated_filename (const char *directory, + const char *filename, const char *suffix) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +/* Concatenate a directory filename, a relative filename and an optional + suffix. Return a freshly allocated filename. */ +extern char *xconcatenated_filename (const char *directory, + const char *filename, const char *suffix) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + + +#ifdef __cplusplus +} +#endif + +#endif /* _CONCAT_FILENAME_H */ diff --git a/include/libgnulib/copy-file.h b/include/libgnulib/copy-file.h new file mode 100755 index 0000000..3f5aa72 --- /dev/null +++ b/include/libgnulib/copy-file.h @@ -0,0 +1,83 @@ +/* Copying of files. + Copyright (C) 2001-2003, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + + +/* This file uses _GL_ATTRIBUTE_DEPRECATED. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Error codes returned by qcopy_file_preserving or copy_file_to. */ +enum +{ + GL_COPY_ERR_OPEN_READ = -1, + GL_COPY_ERR_OPEN_BACKUP_WRITE = -2, + GL_COPY_ERR_READ = -3, + GL_COPY_ERR_WRITE = -4, + GL_COPY_ERR_AFTER_READ = -5, + GL_COPY_ERR_GET_ACL = -6, + GL_COPY_ERR_SET_ACL = -7 +}; + + +/* Copy a regular file: from src_filename to dest_filename. + The destination file is assumed to be a backup file. + Modification times, owner, group and access permissions are preserved as + far as possible (similarly to what 'cp -p SRC DEST' would do). + Return 0 if successful, otherwise set errno and return one of the error + codes above. */ +extern int qcopy_file_preserving (const char *src_filename, const char *dest_filename); + +/* Copy a regular file: from src_filename to dest_filename. + The destination file is assumed to be a backup file. + Modification times, owner, group and access permissions are preserved as + far as possible (similarly to what 'cp -p SRC DEST' would do). + Exit upon failure. */ +extern void xcopy_file_preserving (const char *src_filename, const char *dest_filename); + +/* Old name of xcopy_file_preserving. */ +_GL_ATTRIBUTE_DEPRECATED void copy_file_preserving (const char *src_filename, const char *dest_filename); + + +/* Copy a regular file: from src_filename to dest_filename. + The source file is assumed to be not confidential. + Modification times, owner, group and access permissions of src_filename + are *not* copied over to dest_filename (similarly to what 'cat SRC > DEST' + would do; if DEST already exists, this is the same as what 'cp SRC DEST' + would do.) + Return 0 if successful, otherwise set errno and return one of the error + codes above. */ +extern int copy_file_to (const char *src_filename, const char *dest_filename); + +/* Copy a regular file: from src_filename to dest_filename. + The source file is assumed to be not confidential. + Modification times, owner, group and access permissions of src_filename + are *not* copied over to dest_filename (similarly to what 'cat SRC > DEST' + would do; if DEST already exists, this is the same as what 'cp SRC DEST' + would do.) + Exit upon failure. */ +extern void xcopy_file_to (const char *src_filename, const char *dest_filename); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/count-leading-zeros.h b/include/libgnulib/count-leading-zeros.h new file mode 100755 index 0000000..a4b68c2 --- /dev/null +++ b/include/libgnulib/count-leading-zeros.h @@ -0,0 +1,140 @@ +/* count-leading-zeros.h -- counts the number of leading 0 bits in a word. + Copyright (C) 2012-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake. */ + +#ifndef COUNT_LEADING_ZEROS_H +#define COUNT_LEADING_ZEROS_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef COUNT_LEADING_ZEROS_INLINE +# define COUNT_LEADING_ZEROS_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Assuming the GCC builtin is BUILTIN and the MSC builtin is MSC_BUILTIN, + expand to code that computes the number of leading zeros of the local + variable 'x' of type TYPE (an unsigned integer type) and return it + from the current function. */ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ + || (__clang_major__ >= 4) +# define COUNT_LEADING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ + return x ? BUILTIN (x) : CHAR_BIT * sizeof x; +#elif _MSC_VER +extern unsigned char _BitScanReverse (unsigned long *, unsigned long); +# pragma intrinsic (_BitScanReverse) +# if defined _M_X64 +extern unsigned char _BitScanReverse64 (unsigned long *, unsigned long long); +# pragma intrinsic (_BitScanReverse64) +# endif +# define COUNT_LEADING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ + do \ + { \ + unsigned long result; \ + if (MSC_BUILTIN (&result, x)) \ + return CHAR_BIT * sizeof x - 1 - result; \ + return CHAR_BIT * sizeof x; \ + } \ + while (0) +#else +# define COUNT_LEADING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ + do \ + { \ + int count; \ + unsigned int leading_32; \ + if (! x) \ + return CHAR_BIT * sizeof x; \ + for (count = 0; \ + (leading_32 = ((x >> (sizeof (TYPE) * CHAR_BIT - 32)) \ + & 0xffffffffU), \ + count < CHAR_BIT * sizeof x - 32 && !leading_32); \ + count += 32) \ + x = x << 31 << 1; \ + return count + count_leading_zeros_32 (leading_32); \ + } \ + while (0) + +/* Compute and return the number of leading zeros in X, + where 0 < X < 2**32. */ +COUNT_LEADING_ZEROS_INLINE int +count_leading_zeros_32 (unsigned int x) +{ + /* + */ + static const char de_Bruijn_lookup[32] = { + 31, 22, 30, 21, 18, 10, 29, 2, 20, 17, 15, 13, 9, 6, 28, 1, + 23, 19, 11, 3, 16, 14, 7, 24, 12, 4, 8, 25, 5, 26, 27, 0 + }; + + x |= x >> 1; + x |= x >> 2; + x |= x >> 4; + x |= x >> 8; + x |= x >> 16; + return de_Bruijn_lookup[((x * 0x07c4acddU) & 0xffffffffU) >> 27]; +} +#endif + +/* Compute and return the number of leading zeros in X. */ +COUNT_LEADING_ZEROS_INLINE int +count_leading_zeros (unsigned int x) +{ + COUNT_LEADING_ZEROS (__builtin_clz, _BitScanReverse, unsigned int); +} + +/* Compute and return the number of leading zeros in X. */ +COUNT_LEADING_ZEROS_INLINE int +count_leading_zeros_l (unsigned long int x) +{ + COUNT_LEADING_ZEROS (__builtin_clzl, _BitScanReverse, unsigned long int); +} + +/* Compute and return the number of leading zeros in X. */ +COUNT_LEADING_ZEROS_INLINE int +count_leading_zeros_ll (unsigned long long int x) +{ +#if (defined _MSC_VER && !defined __clang__) && !defined _M_X64 + /* 32-bit MSVC does not have _BitScanReverse64, only _BitScanReverse. */ + unsigned long result; + if (_BitScanReverse (&result, (unsigned long) (x >> 32))) + return CHAR_BIT * sizeof x - 1 - 32 - result; + if (_BitScanReverse (&result, (unsigned long) x)) + return CHAR_BIT * sizeof x - 1 - result; + return CHAR_BIT * sizeof x; +#else + COUNT_LEADING_ZEROS (__builtin_clzll, _BitScanReverse64, + unsigned long long int); +#endif +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* COUNT_LEADING_ZEROS_H */ diff --git a/include/libgnulib/count-one-bits.h b/include/libgnulib/count-one-bits.h new file mode 100755 index 0000000..24bf8cc --- /dev/null +++ b/include/libgnulib/count-one-bits.h @@ -0,0 +1,169 @@ +/* count-one-bits.h -- counts the number of 1-bits in a word. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Ben Pfaff. */ + +#ifndef COUNT_ONE_BITS_H +#define COUNT_ONE_BITS_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef COUNT_ONE_BITS_INLINE +# define COUNT_ONE_BITS_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Assuming the GCC builtin is GCC_BUILTIN and the MSC builtin is MSC_BUILTIN, + expand to code that computes the number of 1-bits of the local + variable 'x' of type TYPE (an unsigned integer type) and return it + from the current function. */ +#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) \ + || (__clang_major__ >= 4) +# define COUNT_ONE_BITS(GCC_BUILTIN, MSC_BUILTIN, TYPE) \ + return GCC_BUILTIN (x) +#else + +/* Compute and return the number of 1-bits set in the least + significant 32 bits of X. */ +COUNT_ONE_BITS_INLINE int +count_one_bits_32 (unsigned int x) +{ + x = ((x & 0xaaaaaaaaU) >> 1) + (x & 0x55555555U); + x = ((x & 0xccccccccU) >> 2) + (x & 0x33333333U); + x = (x >> 16) + (x & 0xffff); + x = ((x & 0xf0f0) >> 4) + (x & 0x0f0f); + return (x >> 8) + (x & 0x00ff); +} + +/* Expand to code that computes the number of 1-bits of the local + variable 'x' of type TYPE (an unsigned integer type) and return it + from the current function. */ +# define COUNT_ONE_BITS_GENERIC(TYPE) \ + do \ + { \ + int count = 0; \ + int bits; \ + for (bits = 0; bits < sizeof (TYPE) * CHAR_BIT; bits += 32) \ + { \ + count += count_one_bits_32 (x); \ + x = x >> 31 >> 1; \ + } \ + return count; \ + } \ + while (0) + +# if 1500 <= _MSC_VER && (defined _M_IX86 || defined _M_X64) + +/* While gcc falls back to its own generic code if the machine + on which it's running doesn't support popcount, with Microsoft's + compiler we need to detect and fallback ourselves. */ + +# if 0 +# include +# else + /* Don't pollute the namespace with too many MSVC intrinsics. */ +extern void __cpuid (int[4], int); +# pragma intrinsic (__cpuid) +extern unsigned int __popcnt (unsigned int); +# pragma intrinsic (__popcnt) +# if defined _M_X64 +extern unsigned long long __popcnt64 (unsigned long long); +# pragma intrinsic (__popcnt64) +# endif +# endif + +# if !defined _M_X64 +static inline __popcnt64 (unsigned long long x) +{ + return __popcnt ((unsigned int) (x >> 32)) + __popcnt ((unsigned int) x); +} +# endif + +/* Return nonzero if popcount is supported. */ + +/* 1 if supported, 0 if not supported, -1 if unknown. */ +extern int popcount_support; + +COUNT_ONE_BITS_INLINE int +popcount_supported (void) +{ + if (popcount_support < 0) + { + /* Do as described in + */ + int cpu_info[4]; + __cpuid (cpu_info, 1); + popcount_support = (cpu_info[2] >> 23) & 1; + } + return popcount_support; +} + +# define COUNT_ONE_BITS(GCC_BUILTIN, MSC_BUILTIN, TYPE) \ + do \ + { \ + if (popcount_supported ()) \ + return MSC_BUILTIN (x); \ + else \ + COUNT_ONE_BITS_GENERIC (TYPE); \ + } \ + while (0) + +# else + +# define COUNT_ONE_BITS(GCC_BUILTIN, MSC_BUILTIN, TYPE) \ + COUNT_ONE_BITS_GENERIC (TYPE) + +# endif +#endif + +/* Compute and return the number of 1-bits set in X. */ +COUNT_ONE_BITS_INLINE int +count_one_bits (unsigned int x) +{ + COUNT_ONE_BITS (__builtin_popcount, __popcnt, unsigned int); +} + +/* Compute and return the number of 1-bits set in X. */ +COUNT_ONE_BITS_INLINE int +count_one_bits_l (unsigned long int x) +{ + COUNT_ONE_BITS (__builtin_popcountl, __popcnt, unsigned long int); +} + +/* Compute and return the number of 1-bits set in X. */ +COUNT_ONE_BITS_INLINE int +count_one_bits_ll (unsigned long long int x) +{ + COUNT_ONE_BITS (__builtin_popcountll, __popcnt64, unsigned long long int); +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* COUNT_ONE_BITS_H */ diff --git a/include/libgnulib/count-trailing-zeros.h b/include/libgnulib/count-trailing-zeros.h new file mode 100755 index 0000000..82de873 --- /dev/null +++ b/include/libgnulib/count-trailing-zeros.h @@ -0,0 +1,130 @@ +/* count-trailing-zeros.h -- counts the number of trailing 0 bits in a word. + Copyright 2013-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef COUNT_TRAILING_ZEROS_H +#define COUNT_TRAILING_ZEROS_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef COUNT_TRAILING_ZEROS_INLINE +# define COUNT_TRAILING_ZEROS_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Assuming the GCC builtin is BUILTIN and the MSC builtin is MSC_BUILTIN, + expand to code that computes the number of trailing zeros of the local + variable 'x' of type TYPE (an unsigned integer type) and return it + from the current function. */ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ + || (__clang_major__ >= 4) +# define COUNT_TRAILING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ + return x ? BUILTIN (x) : CHAR_BIT * sizeof x; +#elif _MSC_VER +extern unsigned char _BitScanForward (unsigned long *, unsigned long); +# pragma intrinsic (_BitScanForward) +# if defined _M_X64 +extern unsigned char _BitScanForward64 (unsigned long *, unsigned long long); +# pragma intrinsic (_BitScanForward64) +# endif +# define COUNT_TRAILING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ + do \ + { \ + unsigned long result; \ + return MSC_BUILTIN (&result, x) ? result : CHAR_BIT * sizeof x; \ + } \ + while (0) +#else +# define COUNT_TRAILING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ + do \ + { \ + int count = 0; \ + if (! x) \ + return CHAR_BIT * sizeof x; \ + for (count = 0; \ + (count < CHAR_BIT * sizeof x - 32 \ + && ! (x & 0xffffffffU)); \ + count += 32) \ + x = x >> 31 >> 1; \ + return count + count_trailing_zeros_32 (x); \ + } \ + while (0) + +/* Compute and return the number of trailing zeros in the least + significant 32 bits of X. One of these bits must be nonzero. */ +COUNT_TRAILING_ZEROS_INLINE int +count_trailing_zeros_32 (unsigned int x) +{ + /* + */ + static const char de_Bruijn_lookup[32] = { + 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, + 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 + }; + return de_Bruijn_lookup[(((x & -x) * 0x077cb531U) & 0xffffffffU) >> 27]; +} +#endif + +/* Compute and return the number of trailing zeros in X. */ +COUNT_TRAILING_ZEROS_INLINE int +count_trailing_zeros (unsigned int x) +{ + COUNT_TRAILING_ZEROS (__builtin_ctz, _BitScanForward, unsigned int); +} + +/* Compute and return the number of trailing zeros in X. */ +COUNT_TRAILING_ZEROS_INLINE int +count_trailing_zeros_l (unsigned long int x) +{ + COUNT_TRAILING_ZEROS (__builtin_ctzl, _BitScanForward, unsigned long int); +} + +/* Compute and return the number of trailing zeros in X. */ +COUNT_TRAILING_ZEROS_INLINE int +count_trailing_zeros_ll (unsigned long long int x) +{ +#if (defined _MSC_VER && !defined __clang__) && !defined _M_X64 + /* 32-bit MSVC does not have _BitScanForward64, only _BitScanForward. */ + unsigned long result; + if (_BitScanForward (&result, (unsigned long) x)) + return result; + if (_BitScanForward (&result, (unsigned long) (x >> 32))) + return result + 32; + return CHAR_BIT * sizeof x; +#else + COUNT_TRAILING_ZEROS (__builtin_ctzll, _BitScanForward64, + unsigned long long int); +#endif +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/include/libgnulib/crc.h b/include/libgnulib/crc.h new file mode 100755 index 0000000..2754126 --- /dev/null +++ b/include/libgnulib/crc.h @@ -0,0 +1,60 @@ +/* crc.h -- cyclic redundancy checks + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Simon Josefsson. */ + +#ifndef CRC_H +#define CRC_H 1 + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compute CRC-32 value of LEN bytes long BUF, and return it. */ +extern uint32_t crc32 (const char *buf, size_t len) _GL_ATTRIBUTE_PURE; + +/* Incrementally update CRC-32 value CRC using LEN bytes long BUF. In + the first call, use 0 as the value for CRC. Return the updated + CRC-32 value. */ +extern uint32_t crc32_update (uint32_t crc, const char *buf, size_t len) + _GL_ATTRIBUTE_PURE; + +/* Compute modified-CRC-32 value of LEN bytes long BUF, and return it. + The "modification" is to avoid the initial and final XOR operation. + Due to historic implementation errors, this variant is sometimes + used (i.e., in RFC 3961). */ +extern uint32_t crc32_no_xor (const char *buf, size_t len) + _GL_ATTRIBUTE_PURE; + +/* Incrementally update modified-CRC-32 value CRC using LEN bytes long + BUF. In the first call, use 0 as the value for CRC. Return the + updated modified-CRC-32 value. The "modification" is to avoid the + initial and final XOR operation. Due to historic implementation + errors, this variant is sometimes used (i.e., in RFC 3961). */ +extern uint32_t +crc32_update_no_xor (uint32_t crc, const char *buf, size_t len) + _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + +#endif /* CRC_H */ diff --git a/include/libgnulib/csharpcomp.h b/include/libgnulib/csharpcomp.h new file mode 100755 index 0000000..4311aa1 --- /dev/null +++ b/include/libgnulib/csharpcomp.h @@ -0,0 +1,48 @@ +/* Compile a C# program. + Copyright (C) 2003, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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 3 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, see . */ + +#ifndef _CSHARPCOMP_H +#define _CSHARPCOMP_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compile a set of C# source files to bytecode. + sources is an array of source file names, including resource files. + libdirs is a list of directories to be searched for libraries. + libraries is a list of libraries on which the program depends. + output_file is the name of the output file; it should end in .exe or .dll. + If verbose, the command to be executed will be printed. + Return false if OK, true on error. */ +extern bool compile_csharp_class (const char * const *sources, + unsigned int sources_count, + const char * const *libdirs, + unsigned int libdirs_count, + const char * const *libraries, + unsigned int libraries_count, + const char *output_file, + bool optimize, bool debug, + bool verbose); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CSHARPCOMP_H */ diff --git a/include/libgnulib/csharpexec.h b/include/libgnulib/csharpexec.h new file mode 100755 index 0000000..96b0dcf --- /dev/null +++ b/include/libgnulib/csharpexec.h @@ -0,0 +1,51 @@ +/* Execute a C# program. + Copyright (C) 2003, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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 3 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, see . */ + +#ifndef _CSHARPEXEC_H +#define _CSHARPEXEC_H + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef bool execute_fn (const char *progname, + const char *prog_path, const char * const *prog_argv, + void *private_data); + +/* Execute a C# program. + assembly_path is the assembly's pathname (= program name with .exe). + libdirs is a list of directories to be searched for libraries. + args is a NULL terminated list of arguments to be passed to the program. + If verbose, the command to be executed will be printed. + Then the command is passed to the execute function together with the + private_data argument. This function returns false if OK, true on error. + Return false if OK, true on error. + If quiet, error messages will not be printed. */ +extern bool execute_csharp_program (const char *assembly_path, + const char * const *libdirs, + unsigned int libdirs_count, + const char * const *args, + bool verbose, bool quiet, + execute_fn *executer, void *private_data); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CSHARPEXEC_H */ diff --git a/include/libgnulib/cycle-check.h b/include/libgnulib/cycle-check.h new file mode 100755 index 0000000..d0e3d85 --- /dev/null +++ b/include/libgnulib/cycle-check.h @@ -0,0 +1,61 @@ +/* help detect directory cycles efficiently + + Copyright (C) 2003-2004, 2006, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering */ + +#ifndef CYCLE_CHECK_H +#define CYCLE_CHECK_H 1 + +#include +#include "dev-ino.h" +#include "same-inode.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +struct cycle_check_state +{ + struct dev_ino dev_ino; + uintmax_t chdir_counter; + int magic; +}; + +void cycle_check_init (struct cycle_check_state *state); +bool cycle_check (struct cycle_check_state *state, struct stat const *sb); + +#define CYCLE_CHECK_REFLECT_CHDIR_UP(State, SB_dir, SB_subdir) \ + do \ + { \ + /* You must call cycle_check at least once before using this macro. */ \ + if ((State)->chdir_counter == 0) \ + abort (); \ + if (SAME_INODE ((State)->dev_ino, SB_subdir)) \ + { \ + (State)->dev_ino.st_dev = (SB_dir).st_dev; \ + (State)->dev_ino.st_ino = (SB_dir).st_ino; \ + } \ + } \ + while (0) + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/cygpath.h b/include/libgnulib/cygpath.h new file mode 100755 index 0000000..0843347 --- /dev/null +++ b/include/libgnulib/cygpath.h @@ -0,0 +1,37 @@ +/* Convert file names between Cygwin syntax and Windows syntax. + Copyright (C) 2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2024. */ + +#ifndef _CYGPATH_H +#define _CYGPATH_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* On Cygwin, this function converts a file name from Cygwin syntax to + native Windows syntax, like 'cygpath -w' does. + Returns a freshly allocated file name. + On the other platforms, it returns a freshly allocated copy of the + argument file name. */ +extern char *cygpath_w (const char *filename); + +#ifdef __cplusplus +} +#endif + +#endif /* _CYGPATH_H */ diff --git a/include/libgnulib/des.h b/include/libgnulib/des.h new file mode 100755 index 0000000..b8057a4 --- /dev/null +++ b/include/libgnulib/des.h @@ -0,0 +1,128 @@ +/* des.h --- DES cipher implementation. + * Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. + * + * This file is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. + * + * This file 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + */ + +/* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */ + +#ifndef DES_H +#define DES_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* + * Encryption/Decryption context of DES + */ +typedef struct +{ + uint32_t encrypt_subkeys[32]; + uint32_t decrypt_subkeys[32]; +} gl_des_ctx; + +/* + * Encryption/Decryption context of Triple-DES + */ +typedef struct +{ + uint32_t encrypt_subkeys[96]; + uint32_t decrypt_subkeys[96]; +} gl_3des_ctx; + +/* Check whether the 8 byte key is weak. Does not check the parity + * bits of the key but simple ignore them. */ +extern bool +gl_des_is_weak_key (const char * key); + +/* + * DES + * --- + */ + +/* Fill a DES context CTX with subkeys calculated from 64bit KEY. + * Does not check parity bits, but simply ignore them. Does not check + * for weak keys. */ +extern void +gl_des_setkey (gl_des_ctx *ctx, const char * key); + +/* Fill a DES context CTX with subkeys calculated from 64bit KEY, with + * weak key checking. Does not check parity bits, but simply ignore + * them. */ +extern bool +gl_des_makekey (gl_des_ctx *ctx, const char * key, size_t keylen); + +/* Electronic Codebook Mode DES encryption/decryption of data + * according to 'mode'. */ +extern void +gl_des_ecb_crypt (gl_des_ctx *ctx, const char * from, char * to, int mode); + +#define gl_des_ecb_encrypt(ctx, from, to) gl_des_ecb_crypt(ctx, from, to, 0) +#define gl_des_ecb_decrypt(ctx, from, to) gl_des_ecb_crypt(ctx, from, to, 1) + +/* Triple-DES + * ---------- + */ + +/* Fill a Triple-DES context CTX with subkeys calculated from two + * 64bit keys in KEY1 and KEY2. Does not check the parity bits of the + * keys, but simply ignore them. Does not check for weak keys. */ +extern void +gl_3des_set2keys (gl_3des_ctx *ctx, + const char * key1, + const char * key2); + +/* + * Fill a Triple-DES context CTX with subkeys calculated from three + * 64bit keys in KEY1, KEY2 and KEY3. Does not check the parity bits + * of the keys, but simply ignore them. Does not check for weak + * keys. */ +extern void +gl_3des_set3keys (gl_3des_ctx *ctx, + const char * key1, + const char * key2, + const char * key3); + +/* Fill a Triple-DES context CTX with subkeys calculated from three + * concatenated 64bit keys in KEY, with weak key checking. Does not + * check the parity bits of the keys, but simply ignore them. */ +extern bool +gl_3des_makekey (gl_3des_ctx *ctx, + const char * key, + size_t keylen); + +/* Electronic Codebook Mode Triple-DES encryption/decryption of data + * according to 'mode'. Sometimes this mode is named 'EDE' mode + * (Encryption-Decryption-Encryption). */ +extern void +gl_3des_ecb_crypt (gl_3des_ctx *ctx, + const char * from, + char * to, + int mode); + +#define gl_3des_ecb_encrypt(ctx, from, to) gl_3des_ecb_crypt(ctx,from,to,0) +#define gl_3des_ecb_decrypt(ctx, from, to) gl_3des_ecb_crypt(ctx,from,to,1) + + +#ifdef __cplusplus +} +#endif + +#endif /* DES_H */ diff --git a/include/libgnulib/dev-ino.h b/include/libgnulib/dev-ino.h new file mode 100755 index 0000000..38cb88d --- /dev/null +++ b/include/libgnulib/dev-ino.h @@ -0,0 +1,41 @@ +/* A simple (device, inode) struct. + Copyright (C) 2003-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering, 2003. */ + +#ifndef DEV_INO_H +#define DEV_INO_H 1 + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +struct dev_ino +{ + ino_t st_ino; + dev_t st_dev; +}; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/dfa.h b/include/libgnulib/dfa.h new file mode 100755 index 0000000..4653add --- /dev/null +++ b/include/libgnulib/dfa.h @@ -0,0 +1,178 @@ +/* dfa.h - declarations for GNU deterministic regexp compiler + Copyright (C) 1988, 1998, 2007, 2009-2024 Free Software Foundation, Inc. + + 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 3, 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, see . */ + +/* Written June, 1988 by Mike Haertel */ + +#ifndef DFA_H_ +#define DFA_H_ + +/* This file uses _Noreturn, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "idx.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct localeinfo; /* See localeinfo.h. */ + +/* Element of a list of strings, at least one of which is known to + appear in any R.E. matching the DFA. */ +struct dfamust +{ + bool exact; + bool begline; + bool endline; + char must[FLEXIBLE_ARRAY_MEMBER]; +}; + +/* The dfa structure. It is completely opaque. */ +struct dfa; + +/* Needed when Gnulib is not used. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# define _GL_ATTRIBUTE_MALLOC +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# define _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_RETURNS_NONNULL +#endif + +/* Entry points. */ + +/* Allocate a struct dfa. The struct dfa is completely opaque. + It should be initialized via dfasyntax or dfacopysyntax before other use. + The returned pointer should be passed directly to free() after + calling dfafree() on it. */ +extern struct dfa *dfaalloc (void) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* DFA options that can be ORed together, for dfasyntax's 4th arg. */ +enum + { + /* ^ and $ match only the start and end of data, and do not match + end-of-line within data. This is always false for grep, but + possibly true for other apps. */ + DFA_ANCHOR = 1 << 0, + + /* '\0' in data is end-of-line, instead of the traditional '\n'. */ + DFA_EOL_NUL = 1 << 1, + + /* Treat [:alpha:] etc. as an error at the top level, instead of + merely a warning. */ + DFA_CONFUSING_BRACKETS_ERROR = 1 << 2, + + /* Warn about stray backslashes before ordinary characters other + than ] and } which are special because even though POSIX + says \] and \} have undefined interpretation, platforms + reliably ignore those stray backlashes and warning about them + would likely cause more trouble than it's worth. */ + DFA_STRAY_BACKSLASH_WARN = 1 << 3, + + /* Warn about * appearing out of context at the start of an + expression or subexpression. */ + DFA_STAR_WARN = 1 << 4, + + /* Warn about +, ?, {...} appearing out of context at the start of + an expression or subexpression. */ + DFA_PLUS_WARN = 1 << 5, + }; + +/* Initialize or reinitialize a DFA. The arguments are: + 1. The DFA to operate on. + 2. Information about the current locale. + 3. Syntax bits described in regex.h. + 4. Additional DFA options described above. */ +extern void dfasyntax (struct dfa *, struct localeinfo const *, + reg_syntax_t, int); + +/* Initialize or reinitialize a DFA from an already-initialized DFA. */ +extern void dfacopysyntax (struct dfa *, struct dfa const *); + +/* Parse the given string of given length into the given struct dfa. */ +extern void dfaparse (char const *, idx_t, struct dfa *); + +struct dfamust; + +/* Free the storage held by the components of a struct dfamust. */ +extern void dfamustfree (struct dfamust *); + +/* Allocate and return a struct dfamust from a struct dfa that was + initialized by dfaparse and not yet given to dfacomp. */ +extern struct dfamust *dfamust (struct dfa const *) + _GL_ATTRIBUTE_DEALLOC (dfamustfree, 1); + +/* Compile the given string of the given length into the given struct dfa. + The last argument says whether to build a searching or an exact matcher. + A null first argument means the struct dfa has already been + initialized by dfaparse; the second argument is ignored. */ +extern void dfacomp (char const *, idx_t, struct dfa *, bool); + +/* Search through a buffer looking for a match to the given struct dfa. + Find the first occurrence of a string matching the regexp in the + buffer, and the shortest possible version thereof. Return a pointer to + the first character after the match, or NULL if none is found. BEGIN + points to the beginning of the buffer, and END points to the first byte + after its end. Note however that we store a sentinel byte (usually + newline) in *END, so the actual buffer must be one byte longer. + When ALLOW_NL is true, newlines may appear in the matching string. + If COUNT is non-NULL, increment *COUNT once for each newline processed. + Finally, if BACKREF is non-NULL set *BACKREF to indicate whether we + encountered a back-reference. The caller can use this to decide + whether to fall back on a backtracking matcher. */ +extern char *dfaexec (struct dfa *d, char const *begin, char *end, + bool allow_nl, idx_t *count, bool *backref); + +/* Return a superset for D. The superset matches everything that D + matches, along with some other strings (though the latter should be + rare, for efficiency reasons). Return a null pointer if no useful + superset is available. */ +extern struct dfa *dfasuperset (struct dfa const *d) _GL_ATTRIBUTE_PURE; + +/* The DFA is likely to be fast. */ +extern bool dfaisfast (struct dfa const *) _GL_ATTRIBUTE_PURE; + +/* Return true if every construct in D is supported by this DFA matcher. */ +extern bool dfasupported (struct dfa const *) _GL_ATTRIBUTE_PURE; + +/* Free the storage held by the components of a struct dfa. */ +extern void dfafree (struct dfa *); + +/* Error handling. */ + +/* dfawarn() is called by the regexp routines whenever a regex is compiled + that likely doesn't do what the user wanted. It takes a single + argument, a NUL-terminated string describing the situation. The user + must supply a dfawarn. */ +extern void dfawarn (const char *); + +/* dfaerror() is called by the regexp routines whenever an error occurs. It + takes a single argument, a NUL-terminated string describing the error. + The user must supply a dfaerror. */ +extern _Noreturn void dfaerror (const char *); + +#ifdef __cplusplus +} +#endif + +#endif /* dfa.h */ diff --git a/include/libgnulib/di-set.h b/include/libgnulib/di-set.h new file mode 100755 index 0000000..215532f --- /dev/null +++ b/include/libgnulib/di-set.h @@ -0,0 +1,52 @@ +/* Manipulate sets of device-inode pairs efficiently. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering, 2010. */ + +#ifndef _GL_DI_SET_H +#define _GL_DI_SET_H + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +struct di_set; + +void di_set_free (struct di_set *) _GL_ATTRIBUTE_NONNULL ((1)); + +struct di_set *di_set_alloc (void) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (di_set_free, 1); + +int di_set_insert (struct di_set *, dev_t, ino_t) _GL_ATTRIBUTE_NONNULL ((1)); + +int di_set_lookup (struct di_set *dis, dev_t dev, ino_t ino) + _GL_ATTRIBUTE_NONNULL ((1)); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/diffseq.h b/include/libgnulib/diffseq.h new file mode 100755 index 0000000..c9369e4 --- /dev/null +++ b/include/libgnulib/diffseq.h @@ -0,0 +1,574 @@ +/* Analyze differences between two vectors. + + Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + + +/* The basic idea is to consider two vectors as similar if, when + transforming the first vector into the second vector through a + sequence of edits (inserts and deletes of one element each), + this sequence is short - or equivalently, if the ordered list + of elements that are untouched by these edits is long. For a + good introduction to the subject, read about the "Levenshtein + distance" in Wikipedia. + + The basic algorithm is described in: + "An O(ND) Difference Algorithm and its Variations", Eugene W. Myers, + Algorithmica Vol. 1, 1986, pp. 251-266, + . + See especially section 4.2, which describes the variation used below. + + The basic algorithm was independently discovered as described in: + "Algorithms for Approximate String Matching", Esko Ukkonen, + Information and Control Vol. 64, 1985, pp. 100-118, + . + + Unless the 'find_minimal' flag is set, this code uses the TOO_EXPENSIVE + heuristic, by Paul Eggert, to limit the cost to O(N**1.5 log N) + at the price of producing suboptimal output for large inputs with + many differences. */ + +/* Before including this file, you need to define: + ELEMENT The element type of the vectors being compared. + EQUAL A two-argument macro that tests two elements for + equality. + OFFSET A signed integer type sufficient to hold the + difference between two indices. Usually + something like ptrdiff_t. + OFFSET_MAX (Optional) The maximum value of OFFSET (e.g., + PTRDIFF_MAX). If omitted, it is inferred in a + way portable to the vast majority of C platforms, + as they lack padding bits. + EXTRA_CONTEXT_FIELDS Declarations of fields for 'struct context'. + NOTE_DELETE(ctxt, xoff) Record the removal of the object xvec[xoff]. + NOTE_INSERT(ctxt, yoff) Record the insertion of the object yvec[yoff]. + NOTE_ORDERED (Optional) A boolean expression saying that + NOTE_DELETE and NOTE_INSERT calls must be + issued in offset order. + EARLY_ABORT(ctxt) (Optional) A boolean expression that triggers an + early abort of the computation. + USE_HEURISTIC (Optional) Define if you want to support the + heuristic for large vectors. + + It is also possible to use this file with abstract arrays. In this case, + xvec and yvec are not represented in memory. They only exist conceptually. + In this case, the list of defines above is amended as follows: + ELEMENT Undefined. + EQUAL Undefined. + XVECREF_YVECREF_EQUAL(ctxt, xoff, yoff) + A three-argument macro: References xvec[xoff] and + yvec[yoff] and tests these elements for equality. + + Before including this file, you also need to include: + #include + #include "minmax.h" + */ + +/* Maximum value of type OFFSET. */ +#ifndef OFFSET_MAX +# define OFFSET_MAX \ + ((((OFFSET) 1 << (sizeof (OFFSET) * CHAR_BIT - 2)) - 1) * 2 + 1) +#endif + +/* Default to no early abort. */ +#ifndef EARLY_ABORT +# define EARLY_ABORT(ctxt) false +#endif + +#ifndef NOTE_ORDERED +# define NOTE_ORDERED false +#endif + +/* Suppress gcc's "...may be used before initialized" warnings, + generated by GCC versions up to at least GCC 14.2. + Likewise for gcc -fanalyzer's "use of uninitialized value" warnings. */ +#if _GL_GNUC_PREREQ (4, 7) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +# if _GL_GNUC_PREREQ (13, 0) +# pragma GCC diagnostic ignored "-Wanalyzer-use-of-uninitialized-value" +# endif +#endif + +/* + * Context of comparison operation. + */ +struct context +{ + #ifdef ELEMENT + /* Vectors being compared. */ + ELEMENT const *xvec; + ELEMENT const *yvec; + #endif + + /* Extra fields. */ + EXTRA_CONTEXT_FIELDS + + /* Vector, indexed by diagonal, containing 1 + the X coordinate of the point + furthest along the given diagonal in the forward search of the edit + matrix. */ + OFFSET *fdiag; + + /* Vector, indexed by diagonal, containing the X coordinate of the point + furthest along the given diagonal in the backward search of the edit + matrix. */ + OFFSET *bdiag; + + #ifdef USE_HEURISTIC + /* This corresponds to the diff --speed-large-files flag. With this + heuristic, for vectors with a constant small density of changes, + the algorithm is linear in the vector size. */ + bool heuristic; + #endif + + /* Edit scripts longer than this are too expensive to compute. */ + OFFSET too_expensive; + + /* Snakes bigger than this are considered "big". */ + #define SNAKE_LIMIT 20 +}; + +struct partition +{ + /* Midpoints of this partition. */ + OFFSET xmid; + OFFSET ymid; + + /* True if low half will be analyzed minimally. */ + bool lo_minimal; + + /* Likewise for high half. */ + bool hi_minimal; +}; + + +/* Find the midpoint of the shortest edit script for a specified portion + of the two vectors. + + Scan from the beginnings of the vectors, and simultaneously from the ends, + doing a breadth-first search through the space of edit-sequence. + When the two searches meet, we have found the midpoint of the shortest + edit sequence. + + If FIND_MINIMAL is true, find the minimal edit script regardless of + expense. Otherwise, if the search is too expensive, use heuristics to + stop the search and report a suboptimal answer. + + Set PART->(xmid,ymid) to the midpoint (XMID,YMID). The diagonal number + XMID - YMID equals the number of inserted elements minus the number + of deleted elements (counting only elements before the midpoint). + + Set PART->lo_minimal to true iff the minimal edit script for the + left half of the partition is known; similarly for PART->hi_minimal. + + This function assumes that the first elements of the specified portions + of the two vectors do not match, and likewise that the last elements do not + match. The caller must trim matching elements from the beginning and end + of the portions it is going to specify. + + If we return the "wrong" partitions, the worst this can do is cause + suboptimal diff output. It cannot cause incorrect diff output. */ + +static void +diag (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET ylim, bool find_minimal, + struct partition *part, struct context *ctxt) +{ + OFFSET *const fd = ctxt->fdiag; /* Give the compiler a chance. */ + OFFSET *const bd = ctxt->bdiag; /* Additional help for the compiler. */ +#ifdef ELEMENT + ELEMENT const *const xv = ctxt->xvec; /* Still more help for the compiler. */ + ELEMENT const *const yv = ctxt->yvec; /* And more and more . . . */ + #define XREF_YREF_EQUAL(x,y) EQUAL (xv[x], yv[y]) +#else + #define XREF_YREF_EQUAL(x,y) XVECREF_YVECREF_EQUAL (ctxt, x, y) +#endif + const OFFSET dmin = xoff - ylim; /* Minimum valid diagonal. */ + const OFFSET dmax = xlim - yoff; /* Maximum valid diagonal. */ + const OFFSET fmid = xoff - yoff; /* Center diagonal of top-down search. */ + const OFFSET bmid = xlim - ylim; /* Center diagonal of bottom-up search. */ + OFFSET fmin = fmid; + OFFSET fmax = fmid; /* Limits of top-down search. */ + OFFSET bmin = bmid; + OFFSET bmax = bmid; /* Limits of bottom-up search. */ + OFFSET c; /* Cost. */ + bool odd = (fmid - bmid) & 1; /* True if southeast corner is on an odd + diagonal with respect to the northwest. */ + + fd[fmid] = xoff; + bd[bmid] = xlim; + + for (c = 1;; ++c) + { + OFFSET d; /* Active diagonal. */ + bool big_snake = false; + + /* Extend the top-down search by an edit step in each diagonal. */ + if (fmin > dmin) + fd[--fmin - 1] = -1; + else + ++fmin; + if (fmax < dmax) + fd[++fmax + 1] = -1; + else + --fmax; + for (d = fmax; d >= fmin; d -= 2) + { + OFFSET x; + OFFSET y; + OFFSET tlo = fd[d - 1]; + OFFSET thi = fd[d + 1]; + OFFSET x0 = tlo < thi ? thi : tlo + 1; + + for (x = x0, y = x0 - d; + x < xlim && y < ylim && XREF_YREF_EQUAL (x, y); + x++, y++) + continue; + if (x - x0 > SNAKE_LIMIT) + big_snake = true; + fd[d] = x; + if (odd && bmin <= d && d <= bmax && bd[d] <= x) + { + part->xmid = x; + part->ymid = y; + part->lo_minimal = part->hi_minimal = true; + return; + } + } + + /* Similarly extend the bottom-up search. */ + if (bmin > dmin) + bd[--bmin - 1] = OFFSET_MAX; + else + ++bmin; + if (bmax < dmax) + bd[++bmax + 1] = OFFSET_MAX; + else + --bmax; + for (d = bmax; d >= bmin; d -= 2) + { + OFFSET x; + OFFSET y; + OFFSET tlo = bd[d - 1]; + OFFSET thi = bd[d + 1]; + OFFSET x0 = tlo < thi ? tlo : thi - 1; + + for (x = x0, y = x0 - d; + xoff < x && yoff < y && XREF_YREF_EQUAL (x - 1, y - 1); + x--, y--) + continue; + if (x0 - x > SNAKE_LIMIT) + big_snake = true; + bd[d] = x; + if (!odd && fmin <= d && d <= fmax && x <= fd[d]) + { + part->xmid = x; + part->ymid = y; + part->lo_minimal = part->hi_minimal = true; + return; + } + } + + if (find_minimal) + continue; + +#ifdef USE_HEURISTIC + bool heuristic = ctxt->heuristic; +#else + bool heuristic = false; +#endif + + /* Heuristic: check occasionally for a diagonal that has made lots + of progress compared with the edit distance. If we have any + such, find the one that has made the most progress and return it + as if it had succeeded. + + With this heuristic, for vectors with a constant small density + of changes, the algorithm is linear in the vector size. */ + + if (200 < c && big_snake && heuristic) + { + { + OFFSET best = 0; + + for (d = fmax; d >= fmin; d -= 2) + { + OFFSET dd = d - fmid; + OFFSET x = fd[d]; + OFFSET y = x - d; + OFFSET v = (x - xoff) * 2 - dd; + + if (v > 12 * (c + (dd < 0 ? -dd : dd))) + { + if (v > best + && xoff + SNAKE_LIMIT <= x && x < xlim + && yoff + SNAKE_LIMIT <= y && y < ylim) + { + /* We have a good enough best diagonal; now insist + that it end with a significant snake. */ + int k; + + for (k = 1; XREF_YREF_EQUAL (x - k, y - k); k++) + if (k == SNAKE_LIMIT) + { + best = v; + part->xmid = x; + part->ymid = y; + break; + } + } + } + } + if (best > 0) + { + part->lo_minimal = true; + part->hi_minimal = false; + return; + } + } + + { + OFFSET best = 0; + + for (d = bmax; d >= bmin; d -= 2) + { + OFFSET dd = d - bmid; + OFFSET x = bd[d]; + OFFSET y = x - d; + OFFSET v = (xlim - x) * 2 + dd; + + if (v > 12 * (c + (dd < 0 ? -dd : dd))) + { + if (v > best + && xoff < x && x <= xlim - SNAKE_LIMIT + && yoff < y && y <= ylim - SNAKE_LIMIT) + { + /* We have a good enough best diagonal; now insist + that it end with a significant snake. */ + int k; + + for (k = 0; XREF_YREF_EQUAL (x + k, y + k); k++) + if (k == SNAKE_LIMIT - 1) + { + best = v; + part->xmid = x; + part->ymid = y; + break; + } + } + } + } + if (best > 0) + { + part->lo_minimal = false; + part->hi_minimal = true; + return; + } + } + } + + /* Heuristic: if we've gone well beyond the call of duty, give up + and report halfway between our best results so far. */ + if (c >= ctxt->too_expensive) + { + /* Find forward diagonal that maximizes X + Y. */ + OFFSET fxybest = -1, fxbest; + for (d = fmax; d >= fmin; d -= 2) + { + OFFSET x = MIN (fd[d], xlim); + OFFSET y = x - d; + if (ylim < y) + { + x = ylim + d; + y = ylim; + } + if (fxybest < x + y) + { + fxybest = x + y; + fxbest = x; + } + } + + /* Find backward diagonal that minimizes X + Y. */ + OFFSET bxybest = OFFSET_MAX, bxbest; + for (d = bmax; d >= bmin; d -= 2) + { + OFFSET x = MAX (xoff, bd[d]); + OFFSET y = x - d; + if (y < yoff) + { + x = yoff + d; + y = yoff; + } + if (x + y < bxybest) + { + bxybest = x + y; + bxbest = x; + } + } + + /* Use the better of the two diagonals. */ + if ((xlim + ylim) - bxybest < fxybest - (xoff + yoff)) + { + part->xmid = fxbest; + part->ymid = fxybest - fxbest; + part->lo_minimal = true; + part->hi_minimal = false; + } + else + { + part->xmid = bxbest; + part->ymid = bxybest - bxbest; + part->lo_minimal = false; + part->hi_minimal = true; + } + return; + } + } + #undef XREF_YREF_EQUAL +} + + +/* Compare in detail contiguous subsequences of the two vectors + which are known, as a whole, to match each other. + + The subsequence of vector 0 is [XOFF, XLIM) and likewise for vector 1. + + Note that XLIM, YLIM are exclusive bounds. All indices into the vectors + are origin-0. + + If FIND_MINIMAL, find a minimal difference no matter how + expensive it is. + + The results are recorded by invoking NOTE_DELETE and NOTE_INSERT. + + Return false if terminated normally, or true if terminated through early + abort. */ + +static bool +compareseq (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET ylim, + bool find_minimal, struct context *ctxt) +{ +#ifdef ELEMENT + ELEMENT const *xv = ctxt->xvec; /* Help the compiler. */ + ELEMENT const *yv = ctxt->yvec; + #define XREF_YREF_EQUAL(x,y) EQUAL (xv[x], yv[y]) +#else + #define XREF_YREF_EQUAL(x,y) XVECREF_YVECREF_EQUAL (ctxt, x, y) +#endif + + while (true) + { + /* Slide down the bottom initial diagonal. */ + while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xoff, yoff)) + { + xoff++; + yoff++; + } + + /* Slide up the top initial diagonal. */ + while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xlim - 1, ylim - 1)) + { + xlim--; + ylim--; + } + + /* Handle simple cases. */ + if (xoff == xlim) + { + while (yoff < ylim) + { + NOTE_INSERT (ctxt, yoff); + if (EARLY_ABORT (ctxt)) + return true; + yoff++; + } + break; + } + if (yoff == ylim) + { + while (xoff < xlim) + { + NOTE_DELETE (ctxt, xoff); + if (EARLY_ABORT (ctxt)) + return true; + xoff++; + } + break; + } + + struct partition part; + + /* Find a point of correspondence in the middle of the vectors. */ + diag (xoff, xlim, yoff, ylim, find_minimal, &part, ctxt); + + /* Use the partitions to split this problem into subproblems. */ + OFFSET xoff1, xlim1, yoff1, ylim1, xoff2, xlim2, yoff2, ylim2; + bool find_minimal1, find_minimal2; + if (!NOTE_ORDERED + && ((xlim + ylim) - (part.xmid + part.ymid) + < (part.xmid + part.ymid) - (xoff + yoff))) + { + /* The second problem is smaller and the caller doesn't + care about order, so do the second problem first to + lessen recursion. */ + xoff1 = part.xmid; xlim1 = xlim; + yoff1 = part.ymid; ylim1 = ylim; + find_minimal1 = part.hi_minimal; + + xoff2 = xoff; xlim2 = part.xmid; + yoff2 = yoff; ylim2 = part.ymid; + find_minimal2 = part.lo_minimal; + } + else + { + xoff1 = xoff; xlim1 = part.xmid; + yoff1 = yoff; ylim1 = part.ymid; + find_minimal1 = part.lo_minimal; + + xoff2 = part.xmid; xlim2 = xlim; + yoff2 = part.ymid; ylim2 = ylim; + find_minimal2 = part.hi_minimal; + } + + /* Recurse to do one subproblem. */ + bool early = compareseq (xoff1, xlim1, yoff1, ylim1, find_minimal1, ctxt); + if (early) + return early; + + /* Iterate to do the other subproblem. */ + xoff = xoff2; xlim = xlim2; + yoff = yoff2; ylim = ylim2; + find_minimal = find_minimal2; + } + + return false; + #undef XREF_YREF_EQUAL +} + +#if _GL_GNUC_PREREQ (4, 7) +# pragma GCC diagnostic pop +#endif + +#undef ELEMENT +#undef EQUAL +#undef OFFSET +#undef EXTRA_CONTEXT_FIELDS +#undef NOTE_DELETE +#undef NOTE_INSERT +#undef EARLY_ABORT +#undef USE_HEURISTIC +#undef XVECREF_YVECREF_EQUAL +#undef OFFSET_MAX diff --git a/include/libgnulib/dirchownmod.h b/include/libgnulib/dirchownmod.h new file mode 100755 index 0000000..5f4de46 --- /dev/null +++ b/include/libgnulib/dirchownmod.h @@ -0,0 +1,20 @@ +/* Change the ownership and mode bits of a directory. + + Copyright (C) 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +int dirchownmod (int, char const *, mode_t, uid_t, gid_t, mode_t, mode_t); diff --git a/include/libgnulib/dirent--.h b/include/libgnulib/dirent--.h new file mode 100755 index 0000000..b3aa21d --- /dev/null +++ b/include/libgnulib/dirent--.h @@ -0,0 +1,24 @@ +/* Like dirent.h, but redefine some names to avoid glitches. + + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Eric Blake. */ + +#include "dirent-safer.h" + +#undef opendir +#define opendir opendir_safer +#define GNULIB_defined_opendir 1 diff --git a/include/libgnulib/dirent-private.h b/include/libgnulib/dirent-private.h new file mode 100755 index 0000000..335fbc3 --- /dev/null +++ b/include/libgnulib/dirent-private.h @@ -0,0 +1,67 @@ +/* Private details of the DIR type. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _DIRENT_PRIVATE_H +#define _DIRENT_PRIVATE_H 1 + +#if HAVE_DIRENT_H /* mingw */ + +# undef DIR + +struct gl_directory +{ + /* File descriptor to close during closedir(). + Needed for implementing fdopendir(). */ + int fd_to_close; + /* Pointer to the real DIR. */ + DIR *real_dirp; +}; + +/* Restore definition from dirent.h. */ +# define DIR struct gl_directory + +#else /* MSVC */ + +# define WIN32_LEAN_AND_MEAN +# include + +/* Don't assume that UNICODE is not defined. */ +# undef WIN32_FIND_DATA +# define WIN32_FIND_DATA WIN32_FIND_DATAA + +struct gl_directory +{ + /* File descriptor to close during closedir(). + Needed for implementing fdopendir(). */ + int fd_to_close; + /* Status, or error code to produce in next readdir() call. + -2 means the end of the directory is already reached, + -1 means the entry was already filled by FindFirstFile, + 0 means the entry needs to be filled using FindNextFile. + A positive value is an error code. */ + int status; + /* Handle, reading the directory, at current position. */ + HANDLE current; + /* Found directory entry. */ + WIN32_FIND_DATA entry; + /* Argument to pass to FindFirstFile. It consists of the absolutized + directory name, followed by a directory separator and the wildcards. */ + char dir_name_mask[1]; +}; + +#endif + +#endif /* _DIRENT_PRIVATE_H */ diff --git a/include/libgnulib/dirent-safer.h b/include/libgnulib/dirent-safer.h new file mode 100755 index 0000000..2dba36d --- /dev/null +++ b/include/libgnulib/dirent-safer.h @@ -0,0 +1,36 @@ +/* Invoke dirent-like functions, but avoid some glitches. + + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Eric Blake. */ + +/* This file uses _GL_ATTRIBUTE_DEALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +DIR *opendir_safer (const char *name) + _GL_ATTRIBUTE_DEALLOC (closedir, 1); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/dirname.h b/include/libgnulib/dirname.h new file mode 100755 index 0000000..33935ba --- /dev/null +++ b/include/libgnulib/dirname.h @@ -0,0 +1,59 @@ +/* Take file names apart into directory and base names. + + Copyright (C) 1998, 2001, 2003-2006, 2009-2024 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef DIRNAME_H_ +# define DIRNAME_H_ 1 + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_PURE, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +# include +# include "filename.h" +# include "basename-lgpl.h" + +# ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if GNULIB_DIRNAME +char *base_name (char const *file) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; +char *dir_name (char const *file) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; +# endif + +char *mdir_name (char const *file) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; +size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; + +bool strip_trailing_slashes (char *file); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* not DIRNAME_H_ */ diff --git a/include/libgnulib/dosname.h b/include/libgnulib/dosname.h new file mode 100755 index 0000000..6d8fa4c --- /dev/null +++ b/include/libgnulib/dosname.h @@ -0,0 +1,18 @@ +/* File names on MS-DOS/Windows systems. + + Copyright (C) 2000-2001, 2004-2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include "filename.h" diff --git a/include/libgnulib/dynarray.h b/include/libgnulib/dynarray.h new file mode 100755 index 0000000..8940e81 --- /dev/null +++ b/include/libgnulib/dynarray.h @@ -0,0 +1,284 @@ +/* Type-safe arrays which grow dynamically. + Copyright 2021-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert and Bruno Haible, 2021. */ + +#ifndef _GL_DYNARRAY_H +#define _GL_DYNARRAY_H + +/* Before including this file, you need to define: + + DYNARRAY_STRUCT + The struct tag of dynamic array to be defined. + + DYNARRAY_ELEMENT + The type name of the element type. Elements are copied + as if by memcpy, and can change address as the dynamic + array grows. + + DYNARRAY_PREFIX + The prefix of the functions which are defined. + + The following parameters are optional: + + DYNARRAY_ELEMENT_FREE + DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the + contents of elements. E is of type DYNARRAY_ELEMENT *. + + DYNARRAY_ELEMENT_INIT + DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new + element. E is of type DYNARRAY_ELEMENT *. + If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is + defined, new elements are automatically zero-initialized. + Otherwise, new elements have undefined contents. + + DYNARRAY_INITIAL_SIZE + The size of the statically allocated array (default: + at least 2, more elements if they fit into 128 bytes). + Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, + there is no statically allocated array at, and all non-empty + arrays are heap-allocated. + + DYNARRAY_FINAL_TYPE + The name of the type which holds the final array. If not + defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE + must be a struct type, with members of type DYNARRAY_ELEMENT and + size_t at the start (in this order). + + These macros are undefined after this header file has been + included. + + The following types are provided (their members are private to the + dynarray implementation): + + struct DYNARRAY_STRUCT + + The following functions are provided: + */ + +/* Initialize a dynamic array object. This must be called before any + use of the object. */ +#if 0 +static void + DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *list); +#endif + +/* Deallocate the dynamic array and its elements. */ +#if 0 +static void + DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *list); +#endif + +/* Return true if the dynamic array is in an error state. */ +#if 0 +static bool + DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *list); +#endif + +/* Mark the dynamic array as failed. All elements are deallocated as + a side effect. */ +#if 0 +static void + DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *list); +#endif + +/* Return the number of elements which have been added to the dynamic + array. */ +#if 0 +static size_t + DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *list); +#endif + +/* Return a pointer to the first array element, if any. For a + zero-length array, the pointer can be NULL even though the dynamic + array has not entered the failure state. */ +#if 0 +static DYNARRAY_ELEMENT * + DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *list); +#endif + +/* Return a pointer one element past the last array element. For a + zero-length array, the pointer can be NULL even though the dynamic + array has not entered the failure state. */ +#if 0 +static DYNARRAY_ELEMENT * + DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *list); +#endif + +/* Return a pointer to the array element at INDEX. Terminate the + process if INDEX is out of bounds. */ +#if 0 +static DYNARRAY_ELEMENT * + DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *list, size_t index); +#endif + +/* Add ITEM at the end of the array, enlarging it by one element. + Mark *LIST as failed if the dynamic array allocation size cannot be + increased. */ +#if 0 +static void + DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *list, + DYNARRAY_ELEMENT item); +#endif + +/* Allocate a place for a new element in *LIST and return a pointer to + it. The pointer can be NULL if the dynamic array cannot be + enlarged due to a memory allocation failure. */ +#if 0 +static DYNARRAY_ELEMENT * + DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *list); +#endif + +/* Change the size of *LIST to SIZE. If SIZE is larger than the + existing size, new elements are added (which can be initialized). + Otherwise, the list is truncated, and elements are freed. Return + false on memory allocation failure (and mark *LIST as failed). */ +#if 0 +static bool + DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *list, size_t size); +#endif + +/* Remove the last element of LIST if it is present. */ +#if 0 +static void + DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *list); +#endif + +/* Remove all elements from the list. The elements are freed, but the + list itself is not. */ +#if 0 +static void + DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *list); +#endif + +#if defined DYNARRAY_FINAL_TYPE +/* Transfer the dynamic array to a permanent location at *RESULT. + Returns true on success on false on allocation failure. In either + case, *LIST is re-initialized and can be reused. A NULL pointer is + stored in *RESULT if LIST refers to an empty list. On success, the + pointer in *RESULT is heap-allocated and must be deallocated using + free. */ +#if 0 +static bool + DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, + DYNARRAY_FINAL_TYPE *result); +#endif +#else /* !defined DYNARRAY_FINAL_TYPE */ +/* Transfer the dynamic array to a heap-allocated array and return a + pointer to it. The pointer is NULL if memory allocation fails, or + if the array is empty, so this function should be used only for + arrays which are known not be empty (usually because they always + have a sentinel at the end). If LENGTHP is not NULL, the array + length is written to *LENGTHP. *LIST is re-initialized and can be + reused. */ +#if 0 +static DYNARRAY_ELEMENT * + DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, + size_t *lengthp); +#endif +#endif + +/* A minimal example which provides a growing list of integers can be + defined like this: + + struct int_array + { + // Pointer to result array followed by its length, + // as required by DYNARRAY_FINAL_TYPE. + int *array; + size_t length; + }; + + #define DYNARRAY_STRUCT dynarray_int + #define DYNARRAY_ELEMENT int + #define DYNARRAY_PREFIX dynarray_int_ + #define DYNARRAY_FINAL_TYPE struct int_array + #include + + To create a three-element array with elements 1, 2, 3, use this + code: + + struct dynarray_int dyn; + dynarray_int_init (&dyn); + for (int i = 1; i <= 3; ++i) + { + int *place = dynarray_int_emplace (&dyn); + assert (place != NULL); + *place = i; + } + struct int_array result; + bool ok = dynarray_int_finalize (&dyn, &result); + assert (ok); + assert (result.length == 3); + assert (result.array[0] == 1); + assert (result.array[1] == 2); + assert (result.array[2] == 3); + free (result.array); + + If the elements contain resources which must be freed, define + DYNARRAY_ELEMENT_FREE appropriately, like this: + + struct str_array + { + char **array; + size_t length; + }; + + #define DYNARRAY_STRUCT dynarray_str + #define DYNARRAY_ELEMENT char * + #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) + #define DYNARRAY_PREFIX dynarray_str_ + #define DYNARRAY_FINAL_TYPE struct str_array + #include + */ + + +/* The implementation is imported from glibc. */ + +/* Avoid possible conflicts with symbols exported by the GNU libc. */ +#define __libc_dynarray_at_failure gl_dynarray_at_failure +#define __libc_dynarray_emplace_enlarge gl_dynarray_emplace_enlarge +#define __libc_dynarray_finalize gl_dynarray_finalize +#define __libc_dynarray_resize_clear gl_dynarray_resize_clear +#define __libc_dynarray_resize gl_dynarray_resize + +#if defined DYNARRAY_STRUCT || defined DYNARRAY_ELEMENT || defined DYNARRAY_PREFIX + +# ifndef _GL_LIKELY +/* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ +# define _GL_LIKELY(cond) __builtin_expect ((cond), 1) +# define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) +# endif + +/* Define auxiliary structs and declare auxiliary functions, common to all + instantiations of dynarray. */ +# include + +/* Define the instantiation, specified through + DYNARRAY_STRUCT + DYNARRAY_ELEMENT + DYNARRAY_PREFIX + etc. */ +# include + +#else + +/* This file is being included from one of the malloc/dynarray_*.c files. */ +# include + +#endif + +#endif /* _GL_DYNARRAY_H */ diff --git a/include/libgnulib/eealloc.h b/include/libgnulib/eealloc.h new file mode 100755 index 0000000..ff31da4 --- /dev/null +++ b/include/libgnulib/eealloc.h @@ -0,0 +1,110 @@ +/* Memory allocation with expensive empty allocations. + Copyright (C) 2003, 2008, 2010-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003, + based on prior work by Jim Meyering. + + 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 3 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, see . */ + +#ifndef _EEALLOC_H +#define _EEALLOC_H + +/* malloc() and realloc() are allowed to return NULL when asked to allocate + a memory block of 0 bytes; this is not an out-of-memory condition. + (See ISO C 99 section 7.20.3.) In some places, this is not welcome, + because it requires extra checking (so as not to confuse a zero-sized + allocation with an out-of-memory condition). This file provides + malloc()/realloc() workalikes which return non-NULL pointers for + succeeding zero-sized allocations. GNU libc already defines malloc() + and realloc() this way; on such platforms the workalikes are aliased + to the original malloc()/realloc() functions. */ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_ALLOC_SIZE, + _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#if defined __CHERI_PURE_CAPABILITY__ +# include +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef EEALLOC_INLINE +# define EEALLOC_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#if MALLOC_0_IS_NONNULL +# define eemalloc malloc +#else +EEALLOC_INLINE void *eemalloc (size_t n) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)) + _GL_ATTRIBUTE_DEALLOC_FREE; +EEALLOC_INLINE void * +eemalloc (size_t n) +{ + /* If n is zero, allocate a 1-byte block. */ + size_t nx = n; + if (n == 0) + nx = 1; + void *ptr = malloc (nx); +# if defined __CHERI_PURE_CAPABILITY__ + if (ptr != NULL) + ptr = cheri_bounds_set (ptr, n); +# endif + return ptr; +} +#endif + +#if REALLOC_0_IS_NONNULL +# define eerealloc realloc +#else +EEALLOC_INLINE void *eerealloc (void *p, size_t n) + _GL_ATTRIBUTE_ALLOC_SIZE ((2)); +EEALLOC_INLINE void * +eerealloc (void *p, size_t n) +{ + /* If n is zero, allocate or keep a 1-byte block. */ + size_t nx = n; + if (n == 0) + nx = 1; + void *ptr = realloc (p, nx); +# if defined __CHERI_PURE_CAPABILITY__ + if (ptr != NULL) + ptr = cheri_bounds_set (ptr, n); +# endif + return ptr; +} +#endif + +/* Maybe we should also define variants + eenmalloc (size_t n, size_t s) - behaves like eemalloc (n * s) + eezalloc (size_t n) - like eemalloc followed by memset 0 + eecalloc (size_t n, size_t s) - like eemalloc (n * s) followed by memset 0 + eenrealloc (void *p, size_t n, size_t s) - like eerealloc (p, n * s) + If this would be useful in your application. please speak up. */ + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _EEALLOC_H */ diff --git a/include/libgnulib/eloop-threshold.h b/include/libgnulib/eloop-threshold.h new file mode 100755 index 0000000..84d19b4 --- /dev/null +++ b/include/libgnulib/eloop-threshold.h @@ -0,0 +1,88 @@ +/* Threshold at which to diagnose ELOOP. Generic version. + Copyright (C) 2012-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ELOOP_THRESHOLD_H +#define _ELOOP_THRESHOLD_H 1 + +/* This file uses _GL_ATTRIBUTE_CONST. */ +#if !_LIBC && !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#ifdef _LIBC +# include +# define _GL_ATTRIBUTE_CONST __attribute__ ((const)) +#else +# include +# include "minmax.h" +# define __sysconf sysconf +# if (!defined SYMLOOP_MAX \ + && ! (defined _SC_SYMLOOP_MAX && defined _POSIX_SYMLOOP_MAX)) +# define SYMLOOP_MAX 8 +# endif +#endif + +/* POSIX specifies SYMLOOP_MAX as the "Maximum number of symbolic + links that can be reliably traversed in the resolution of a + pathname in the absence of a loop." This makes it a minimum that + we should certainly accept. But it leaves open the possibility + that more might sometimes work--just not "reliably". + + For example, Linux implements a complex policy whereby there is a + small limit on the number of direct symlink traversals (a symlink + to a symlink to a symlink), but larger limit on the total number of + symlink traversals overall. Hence the SYMLOOP_MAX number should be + the small one, but the limit library functions enforce on users + should be the larger one. + + So, we use the larger of the reported SYMLOOP_MAX (if any) and our + own constant MIN_ELOOP_THRESHOLD, below. This constant should be + large enough that it never rules out a file name and directory tree + that the underlying system (i.e. calls to 'open' et al) would + resolve successfully. It should be small enough that actual loops + are detected without a huge number of iterations. */ + +#ifndef MIN_ELOOP_THRESHOLD +# define MIN_ELOOP_THRESHOLD 40 +#endif + +/* Return the maximum number of symlink traversals to permit + before diagnosing ELOOP. */ +static inline unsigned int _GL_ATTRIBUTE_CONST +__eloop_threshold (void) +{ +#ifdef SYMLOOP_MAX + const int symloop_max = SYMLOOP_MAX; +#else + /* The function is marked 'const' even though we use memory and + call a function, because sysconf is required to return the + same value in every call and so it must always be safe to + call __eloop_threshold exactly once and reuse the value. */ + static long int sysconf_symloop_max; + if (sysconf_symloop_max == 0) + sysconf_symloop_max = __sysconf (_SC_SYMLOOP_MAX); + const unsigned int symloop_max = (sysconf_symloop_max <= 0 + ? _POSIX_SYMLOOP_MAX + : sysconf_symloop_max); +#endif + + return MAX (symloop_max, MIN_ELOOP_THRESHOLD); +} + +#endif /* eloop-threshold.h */ diff --git a/include/libgnulib/exclude.h b/include/libgnulib/exclude.h new file mode 100755 index 0000000..12743cf --- /dev/null +++ b/include/libgnulib/exclude.h @@ -0,0 +1,80 @@ +/* exclude.h -- declarations for excluding file names + + Copyright (C) 1992-1994, 1997, 1999, 2001-2003, 2005-2006, 2009-2024 Free + Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert + and Sergey Poznyakoff */ + +#ifndef _GL_EXCLUDE_H +#define _GL_EXCLUDE_H 1 + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_NONNULL, _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Exclude options, which can be ORed with fnmatch options. */ + +/* Patterns must match the start of file names, instead of matching + anywhere after a '/'. */ +#define EXCLUDE_ANCHORED (1 << 30) + +/* Include instead of exclude. */ +#define EXCLUDE_INCLUDE (1 << 29) + +/* '?', '*', '[', and '\\' are special in patterns. Without this + option, these characters are ordinary and fnmatch is not used. */ +#define EXCLUDE_WILDCARDS (1 << 28) + +/* Patterns are POSIX extended regular expressions */ +#define EXCLUDE_REGEX (1 << 27) + +/* Allocate storage for the pattern */ +#define EXCLUDE_ALLOC (1 << 26) + +struct exclude; + +bool fnmatch_pattern_has_wildcards (const char *, int) _GL_ATTRIBUTE_PURE; + +void free_exclude (struct exclude *) + _GL_ATTRIBUTE_NONNULL ((1)); +struct exclude *new_exclude (void) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_RETURNS_NONNULL + _GL_ATTRIBUTE_DEALLOC (free_exclude, 1); +void add_exclude (struct exclude *, char const *, int); +int add_exclude_file (void (*) (struct exclude *, char const *, int), + struct exclude *, char const *, int, char); +int add_exclude_fp (void (*) (struct exclude *, char const *, int, void *), + struct exclude *, FILE *, int, char, void *); +bool excluded_file_name (struct exclude const *, char const *); +void exclude_add_pattern_buffer (struct exclude *ex, char *buf); +bool exclude_fnmatch (char const *, char const *, int); + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_EXCLUDE_H */ diff --git a/include/libgnulib/execute.h b/include/libgnulib/execute.h new file mode 100755 index 0000000..cb43f21 --- /dev/null +++ b/include/libgnulib/execute.h @@ -0,0 +1,75 @@ +/* Creation of autonomous subprocesses. + Copyright (C) 2001-2003, 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _EXECUTE_H +#define _EXECUTE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Execute a command, optionally redirecting any of the three standard file + descriptors to /dev/null. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. + + progname is the name of the program to be executed by the subprocess, used + for error messages. + prog_path is the file name of the program to be executed by the subprocess. + If it contains no slashes, a search is conducted in $PATH. An operating + system dependent suffix is added, if necessary. + prog_argv is the array of strings that the subprocess shall receive in + argv[]. It is a NULL-terminated array. prog_argv[0] should normally be + identical to prog_path. + + dll_dirs is, on Windows platforms, a NULL-terminated list of directories + that contain DLLs needed to execute the program, or NULL if none is needed. + On other platforms, always pass NULL. + + If directory is not NULL, the command is executed in that directory. If + prog_path is a relative file name, it resolved before changing to that + directory. The current directory of the current process remains unchanged. + + If ignore_sigpipe is true, consider a subprocess termination due to SIGPIPE + as equivalent to a success. This is suitable for processes whose only + purpose is to write to standard output. + + If slave_process is true, the child process will be terminated when its + creator receives a catchable fatal signal. + + If termsigp is not NULL, *termsig will be set to the signal that terminated + the subprocess (if supported by the platform: not on native Windows + platforms), otherwise 0. + + It is recommended that no signal is blocked or ignored while execute() + is called. See spawn-pipe.h for the reason. */ +extern int execute (const char *progname, + const char *prog_path, const char * const *prog_argv, + const char * const *dll_dirs, + const char *directory, + bool ignore_sigpipe, + bool null_stdin, bool null_stdout, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp); + + +#ifdef __cplusplus +} +#endif + +#endif /* _EXECUTE_H */ diff --git a/include/libgnulib/exitfail.h b/include/libgnulib/exitfail.h new file mode 100755 index 0000000..fa264b5 --- /dev/null +++ b/include/libgnulib/exitfail.h @@ -0,0 +1,28 @@ +/* Failure exit status + + Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + + +extern int volatile exit_failure; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/fatal-signal.h b/include/libgnulib/fatal-signal.h new file mode 100755 index 0000000..a51d15f --- /dev/null +++ b/include/libgnulib/fatal-signal.h @@ -0,0 +1,101 @@ +/* Emergency actions in case of a fatal signal. + Copyright (C) 2003-2004, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +#ifndef _FATAL_SIGNAL_H +#define _FATAL_SIGNAL_H + +/* This file uses _GL_ASYNC_SAFE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* It is often useful to do some cleanup action when a usually fatal signal + terminates the process, like removing a temporary file or killing a + subprocess that may be stuck waiting for a device, pipe or network input. + Such signals are SIGHUP, SIGINT, SIGPIPE, SIGTERM, and possibly others. + The limitation of this facility is that it cannot work for SIGKILL. + + Signals with a SIG_IGN handler are considered to be non-fatal. The + functions in this file assume that when a SIG_IGN handler is installed + for a signal, it was installed before any functions in this file were + called and it stays so for the whole lifetime of the process. */ + +/* Register a cleanup function to be executed when a catchable fatal signal + occurs. + + Restrictions for the cleanup function: + - The cleanup function can do all kinds of system calls. It may also + modify (clobber) errno. + - It can also access application dependent memory locations and data + structures provided they are in a consistent state. One way to ensure + this is through block_fatal_signals()/unblock_fatal_signals(), see + below. Another - more tricky - way to ensure this is the careful use + of 'volatile'. + However, + - malloc() and similarly complex facilities are not safe to be called + because they are not guaranteed to be in a consistent state. + - Also, the cleanup function must not block the catchable fatal signals + and leave them blocked upon return. + + The cleanup function is executed asynchronously. It is unspecified + whether during its execution the catchable fatal signals are blocked + or not. + + Return 0 upon success, or -1 if there was a memory allocation problem. */ +extern int at_fatal_signal (_GL_ASYNC_SAFE void (*function) (int sig)); + + +/* Sometimes it is necessary to block the usually fatal signals while the + data structures being accessed by the cleanup action are being built or + reorganized. This is the case, for example, when a temporary file or + directory is created through mkstemp() or mkdtemp(), because these + functions create the temporary file or directory _before_ returning its + name to the application. */ + +/* Temporarily delay the catchable fatal signals. + The signals will be blocked (= delayed) until the next call to + unblock_fatal_signals(). If the signals are already blocked, a further + call to block_fatal_signals() has no effect. */ +extern void block_fatal_signals (void); + +/* Stop delaying the catchable fatal signals. */ +extern void unblock_fatal_signals (void); + + +/* Return the list of signals that block_fatal_signals/unblock_fatal_signals + would block or unblock. + Fills signals[0..count-1] and returns count. */ +extern unsigned int get_fatal_signals (int signals[64]); + +/* Return the list of signals that block_fatal_signals/unblock_fatal_signals + would block or unblock. */ +extern const sigset_t * get_fatal_signal_set (void); + + +#ifdef __cplusplus +} +#endif + +#endif /* _FATAL_SIGNAL_H */ diff --git a/include/libgnulib/fbufmode.h b/include/libgnulib/fbufmode.h new file mode 100755 index 0000000..bce6f5f --- /dev/null +++ b/include/libgnulib/fbufmode.h @@ -0,0 +1,36 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return the buffering mode of the stream STREAM. + + Result means + ------ ------- + _IONBF unbuffered + _IOLBF line buffered + _IOFBF fully buffered + + STREAM must not be wide-character oriented. */ +extern int fbufmode (FILE *stream); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/fcntl--.h b/include/libgnulib/fcntl--.h new file mode 100755 index 0000000..acb237d --- /dev/null +++ b/include/libgnulib/fcntl--.h @@ -0,0 +1,32 @@ +/* Like fcntl.h, but redefine some names to avoid glitches. + + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#include +#include "fcntl-safer.h" + +#undef open +#define open open_safer + +#undef creat +#define creat creat_safer + +#if GNULIB_OPENAT_SAFER +# undef openat +# define openat openat_safer +#endif diff --git a/include/libgnulib/fcntl-safer.h b/include/libgnulib/fcntl-safer.h new file mode 100755 index 0000000..347cac0 --- /dev/null +++ b/include/libgnulib/fcntl-safer.h @@ -0,0 +1,37 @@ +/* Invoke fcntl-like functions, but avoid some glitches. + + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +int open_safer (char const *, int, ...); +int creat_safer (char const *, mode_t); + +#if GNULIB_OPENAT_SAFER +int openat_safer (int, char const *, int, ...); +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/fd-hook.h b/include/libgnulib/fd-hook.h new file mode 100755 index 0000000..2150460 --- /dev/null +++ b/include/libgnulib/fd-hook.h @@ -0,0 +1,119 @@ +/* Hook for making file descriptor functions close(), ioctl() extensible. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +#ifndef FD_HOOK_H +#define FD_HOOK_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Currently, this entire code is only needed for the handling of sockets + on native Windows platforms. */ +#if WINDOWS_SOCKETS + + +/* Type of function that closes FD. */ +typedef int (*gl_close_fn) (int fd); + +/* Type of function that applies a control request to FD. */ +typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); + +/* An element of the list of file descriptor hooks. + In CLOS (Common Lisp Object System) speak, it consists of an "around" + method for the close() function and an "around" method for the ioctl() + function. + The fields of this structure are considered private. */ +struct fd_hook +{ + /* Doubly linked list. */ + struct fd_hook *private_next; + struct fd_hook *private_prev; + /* Function that treats the types of FD that it knows about and calls + execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ + int (*private_close_fn) (const struct fd_hook *remaining_list, + gl_close_fn primary, + int fd); + /* Function that treats the types of FD that it knows about and calls + execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a + fallback. */ + int (*private_ioctl_fn) (const struct fd_hook *remaining_list, + gl_ioctl_fn primary, + int fd, int request, void *arg); +}; + +/* This type of function closes FD, applying special knowledge for the FD + types it knows about, and calls + execute_close_hooks (REMAINING_LIST, PRIMARY, FD) + for the other FD types. + In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, + and PRIMARY is the "primary" method for close(). */ +typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, + gl_close_fn primary, + int fd); + +/* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. + Return 0 or -1, like close() would do. */ +extern int execute_close_hooks (const struct fd_hook *remaining_list, + gl_close_fn primary, + int fd); + +/* Execute all close hooks, with PRIMARY as "primary" method. + Return 0 or -1, like close() would do. */ +extern int execute_all_close_hooks (gl_close_fn primary, int fd); + +/* This type of function applies a control request to FD, applying special + knowledge for the FD types it knows about, and calls + execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) + for the other FD types. + In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, + and PRIMARY is the "primary" method for ioctl(). */ +typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, + gl_ioctl_fn primary, + int fd, int request, void *arg); + +/* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. + Return 0 or -1, like ioctl() would do. */ +extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, + gl_ioctl_fn primary, + int fd, int request, void *arg); + +/* Execute all ioctl hooks, with PRIMARY as "primary" method. + Return 0 or -1, like ioctl() would do. */ +extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, + int fd, int request, void *arg); + +/* Add a function pair to the list of file descriptor hooks. + CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. + The LINK variable points to a piece of memory which is guaranteed to be + accessible until the corresponding call to unregister_fd_hook. */ +extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, + struct fd_hook *link); + +/* Removes a hook from the list of file descriptor hooks. */ +extern void unregister_fd_hook (struct fd_hook *link); + + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* FD_HOOK_H */ diff --git a/include/libgnulib/fenv-private.h b/include/libgnulib/fenv-private.h new file mode 100755 index 0000000..9571b7b --- /dev/null +++ b/include/libgnulib/fenv-private.h @@ -0,0 +1,412 @@ +/* Common definitions for the implementation of the various modules. + Copyright (C) 1997-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Based on glibc/sysdeps//{fpu_control.h,fenv_private.h,fenv_libc.h}. */ + +#if (defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86) + +# if !(defined __x86_64__ || defined _M_X64) +# if __GLIBC__ + (__GLIBC_MINOR__ >= 33) > 2 +/* glibc >= 2.33 has an API that tells us whether the CPU has an SSE unit. */ +# include +# elif defined __sun +/* Solaris has a global variable that tells us whether the CPU has an SSE unit. */ +extern int _sse_hw; +# endif +# endif + +/* CPU_HAS_SSE () returns true if the CPU has an SSE unit. */ +# if defined __x86_64__ || defined _M_X64 +# define CPU_HAS_SSE() 1 +# else +# if __GLIBC__ + (__GLIBC_MINOR__ >= 33) > 2 +# define CPU_HAS_SSE() CPU_FEATURE_PRESENT (SSE) +# elif defined __sun +# define CPU_HAS_SSE() _sse_hw +# else +/* Otherwise, we assume that the SSE unit is present. + Only very old 32-bit processors, before Pentium 4, don't have it. + Don't bother testing it, through a 'cpuid' instruction. */ +# define CPU_HAS_SSE() 1 +# endif +# endif + +/* fstat bits 5..2,0 indicate which floating-point exceptions have occurred + in the 387 compatible floating-point unit since the respective bit was last + set to zero. + mxcsr bits 5..2,0 indicate which floating-point exceptions have occurred + in the SSE floating-point unit since the respective bit was last set to + zero. */ +/* fctrl bits 5..2,0 indicate which floating-point exceptions shall, when + occurring in the 387 compatible floating-point unit, *not* trigger a trap + rather than merely set the corresponding bit in the fstat register. + mxcsr bits 12..9,7 indicate which floating-point exceptions shall, when + occurring in the SSE floating-point unit, *not* trigger a trap rather + than merely set the corresponding bit in the mxcsr register. */ + +/* Macros that access the control word of the 387 unit, the so-called fctrl + register. */ +# define _FPU_GETCW(cw) __asm__ __volatile__ ("fnstcw %0" : "=m" (*&cw)) +# define _FPU_SETCW(cw) __asm__ __volatile__ ("fldcw %0" : : "m" (*&cw)) + +/* Macros that access the status word of the 387 unit, the so-called fstat + register. */ +# define _FPU_GETSTAT(cw) __asm__ __volatile__ ("fnstsw %0" : "=m" (*&cw)) + +/* Macros that access the control and status word of the SSE unit, the mxcsr + register. */ +# if defined __GNUC__ || defined __clang__ +# define _FPU_GETSSECW(cw) __asm__ __volatile__ ("stmxcsr %0" : "=m" (*&cw)) +# define _FPU_SETSSECW(cw) __asm__ __volatile__ ("ldmxcsr %0" : : "m" (*&cw)) +# elif defined _MSC_VER +# include +/* Documentation: + + + + + */ +# define _FPU_GETSSECW(cw) ((cw) = _mm_getcsr ()) +# define _FPU_SETSSECW(cw) _mm_setcsr (cw) +# endif + +/* The floating-point environment of the 387 unit. */ +typedef struct + { + /* 7 32-bit words: */ + unsigned short __control_word; /* fctrl register */ + unsigned short __reserved1; + unsigned short __status_word; /* fstat register */ + unsigned short __reserved2; + unsigned int more[5]; + } +x86_387_fenv_t; + +# if defined _MSC_VER +/* The MSVC header files have different values for the floating-point exceptions + than all the other platforms. Define some handy macros for conversion. */ +# define exceptions_to_x86hardware(exceptions) \ + ( ((exceptions) & FE_INVALID ? 0x01 : 0) \ + | ((exceptions) & FE_DIVBYZERO ? 0x04 : 0) \ + | ((exceptions) & FE_OVERFLOW ? 0x08 : 0) \ + | ((exceptions) & FE_UNDERFLOW ? 0x10 : 0) \ + | ((exceptions) & FE_INEXACT ? 0x20 : 0)) +# define x86hardware_to_exceptions(fstat) \ + ( ((fstat) & 0x01 ? FE_INVALID : 0) \ + | ((fstat) & 0x04 ? FE_DIVBYZERO : 0) \ + | ((fstat) & 0x08 ? FE_OVERFLOW : 0) \ + | ((fstat) & 0x10 ? FE_UNDERFLOW : 0) \ + | ((fstat) & 0x20 ? FE_INEXACT : 0)) +# else +# define exceptions_to_x86hardware(exceptions) (exceptions) +# define x86hardware_to_exceptions(fstat) (fstat) +# endif + +/* When _MSC_VER is defined, the 387 compatible floating-point unit is *not* + in use. Only the SSE floating-point unit is used. This can be inferred + from two facts: + - sizeof (long double) == sizeof (double). That is, 'long double' + values are just 'double' values and can be processed in the SSE unit. + - After fegetenv (&env), the value of env._Fe_stat is *not* the fstat + register of the 387 unit. Rather, it is a artificial value. In + particular, (env._Fe_stat & 0x3f) is + == x86hardware_to_exceptions (_FPU_GETSSECW () & 0x3f). */ + +#elif defined __aarch64__ /* arm64 */ + +/* fpsr bits 4..0 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. */ +/* fpcr bits 12..8 indicate which floating-point exceptions shall, when + occurring, trigger a trap rather than merely set the corresponding bit + in the fpsr register. */ + +# if __GNUC__ >= 6 && !defined __clang__ +# define _FPU_GETCW(fpcr) (fpcr = __builtin_aarch64_get_fpcr ()) +# define _FPU_SETCW(fpcr) __builtin_aarch64_set_fpcr (fpcr) +# elif __clang_major__ >= 4 +# define _FPU_GETCW(fpcr) (fpcr = __builtin_arm_rsr ("fpcr")) +# define _FPU_SETCW(fpcr) __builtin_arm_wsr ("fpcr", fpcr) +# else +# define _FPU_GETCW(fpcr) \ + __asm__ __volatile__ ("mrs %0, fpcr" : "=r" (fpcr)) +# define _FPU_SETCW(fpcr) \ + __asm__ __volatile__ ("msr fpcr, %0" : : "r" (fpcr)) +# endif + +# if __GNUC__ >= 6 && !defined __clang__ +# define _FPU_GETFPSR(fpsr) (fpsr = __builtin_aarch64_get_fpsr ()) +# define _FPU_SETFPSR(fpsr) __builtin_aarch64_set_fpsr (fpsr) +# elif __clang_major__ >= 4 +# define _FPU_GETFPSR(fpsr) (fpsr = __builtin_arm_rsr ("fpsr")) +# define _FPU_SETFPSR(fpsr) __builtin_arm_wsr ("fpsr", fpsr) +# else +# define _FPU_GETFPSR(fpsr) \ + __asm__ __volatile__ ("mrs %0, fpsr" : "=r" (fpsr)) +# define _FPU_SETFPSR(fpsr) \ + __asm__ __volatile__ ("msr fpsr, %0" : : "r" (fpsr)) +# endif + +#elif defined __arm__ + +/* fpscr bits 23..22 indicate the rounding direction. */ +/* fpscr bits 4..0 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. */ +/* fpscr bits 12..8 indicate which floating-point exceptions shall, when + occurring, trigger a trap rather than merely set the corresponding bit + in the fpscr register. */ + +# if !defined __SOFTFP__ +# define _FPU_GETCW(cw) \ + __asm__ __volatile__ ("vmrs %0, fpscr" : "=r" (cw)) +# define _FPU_SETCW(cw) \ + __asm__ __volatile__ ("vmsr fpscr, %0" : : "r" (cw)) +# endif + +#elif defined __alpha + +/* System calls. */ +extern unsigned long __ieee_get_fp_control (void); +extern void __ieee_set_fp_control (unsigned long); + +# define _FPU_GETCW(fpcr) \ + __asm__ __volatile__ ("excb; mf_fpcr %0" : "=f" (fpcr)) +# define _FPU_SETCW(fpcr) \ + __asm__ __volatile__ ("mt_fpcr %0; excb" : : "f" (fpcr)) + +#elif defined __hppa + +/* Bits 31..27 of the first 32-bit word of %fr0 indicate which floating-point + exceptions have occurred since the respective bit was last set to zero. */ +/* Bits 4..0 of the first 32-bit word of %fr0 indicate which floating-point + exceptions shall, when occurring, trigger a trap rather than merely set the + corresponding flag bit. */ + +/* The status register is located in bits 0 to 31 of floating-point register 0. */ +# define _FPU_GETCW(cw) \ +({ \ + union { __extension__ unsigned long long __fpreg; unsigned int __halfreg[2]; } __fullfp; \ + /* Get the current status word. */ \ + __asm__ ("fstd %%fr0,0(%1)\n\t" \ + "fldd 0(%1),%%fr0\n\t" \ + : "=m" (__fullfp.__fpreg) : "r" (&__fullfp.__fpreg) : "%r0"); \ + cw = __fullfp.__halfreg[0]; \ +}) +# define _FPU_SETCW(cw) \ +({ \ + union { __extension__ unsigned long long __fpreg; unsigned int __halfreg[2]; } __fullfp; \ + /* Get the current status word and set the control word. */ \ + __asm__ ("fstd %%fr0,0(%1)\n\t" \ + : "=m" (__fullfp.__fpreg) : "r" (&__fullfp.__fpreg) : "%r0"); \ + __fullfp.__halfreg[0] = cw; \ + __asm__ ("fldd 0(%1),%%fr0\n\t" \ + : : "m" (__fullfp.__fpreg), "r" (&__fullfp.__fpreg) : "%r0" ); \ +}) + +#elif defined __ia64__ + +/* fpsr bits 12..9,7 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. */ +/* fpsr bits 5..2,0 indicate which floating-point exceptions shall, when + occurring, *not* trigger a trap rather than merely set the corresponding + bit in the fpsr register. */ + +# define _FPU_GETCW(fpsr) \ + __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)) +# define _FPU_SETCW(fpsr) \ + __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (fpsr) : "memory") + +#elif defined __m68k__ + +/* fpsr bits 7..3 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. */ +/* fpcr bits 15..8 indicate which floating-point exceptions shall, when + occurring, trigger a trap rather than merely set the corresponding bit + in the fpsr register: + - bit 15: branch/set on unordered + - bit 14: signaling not-a-number + - bit 13: operand error + - bit 12: overflow + - bit 11: underflow + - bit 10: divide by zero + - bit 9: inexact operation + - bit 8: inexact decimal input + FE_INVALID corresponds to all three: bit 15, bit 14, bit 13. */ + +# define _FPU_GETCW(cw) __asm__ __volatile__ ("fmove%.l %!, %0" : "=dm" (cw)) +# define _FPU_SETCW(cw) __asm__ __volatile__ ("fmove%.l %0, %!" : : "dm" (cw)) + +# define _FPU_GETFPSR(cw) __asm__ __volatile__ ("fmove%.l %/fpsr, %0" : "=dm" (cw)) +# define _FPU_SETFPSR(cw) __asm__ __volatile__ ("fmove%.l %0, %/fpsr" : : "dm" (cw)) + +#elif defined __mips__ + +/* fcsr bits 6..2 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. + fcsr bits 17..12 indicate which floating-point exceptions have occurred + in the most recent instruction. */ +/* fcsr bits 11..7 indicate which floating-point exceptions shall, when + occurring, trigger a trap rather than merely set the corresponding bit + in the fcsr register. */ + +# define _FPU_GETCW(cw) __asm__ __volatile__ ("cfc1 %0,$31" : "=r" (cw)) +# define _FPU_SETCW(cw) __asm__ __volatile__ ("ctc1 %0,$31" : : "r" (cw)) + +#elif defined __loongarch__ + +/* fcsr0 bits 20..16 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. + fcsr0 bits 28..24 indicate which floating-point exceptions have occurred + in the most recent instruction. */ +/* fcsr0 bits 4..0 indicate which floating-point exceptions shall, when + occurring, trigger a trap rather than merely set the corresponding bit + in the fcsr0 register. */ + +# define _FPU_GETCW(cw) __asm__ __volatile__ ("movfcsr2gr %0,$r0" : "=r" (cw)) +# define _FPU_SETCW(cw) __asm__ __volatile__ ("movgr2fcsr $r0,%0" : : "r" (cw)) + +#elif defined __powerpc__ + +/* fpscr bits 28..25 indicate which floating-point exceptions, other than + FE_INVALID, have occurred since the respective bit was last set to zero. + fpscr bits 24..19, 10..8 do the same thing, for various kinds of Invalid + Operation. fpscr bit 29 is the summary (the OR) of all these bits. */ +/* fpscr bits 7..3 indicate which floating-point exceptions shall, when + occurring, trigger a trap rather than merely set the corresponding bit + in the fpscr register. */ + +# define _FPU_GETCW_AS_DOUBLE(cw) \ + do { double env; __asm__ __volatile__ ("mffs %0" : "=f" (env)); cw = env; } \ + while (0) +# define _FPU_SETCW_AS_DOUBLE(cw) \ + __asm__ __volatile__ ("mtfsf 0xff,%0" : : "f" (cw)) + +# if defined __NetBSD__ +/* Modifying the FE0 and FE1 bits of the machine state register (MSR) is + only possible from the kernel. NetBSD allows it to be done from user + space, by emulating the mfmsr and mtmsr instructions when they trap. + In other words, these instructions are actually system calls in NetBSD. */ +# define _GETMSR(msr) __asm__ __volatile__ ("mfmsr %0" : "=r" (msr)) +# define _SETMSR(msr) __asm__ __volatile__ ("mtmsr %0" : : "r" (msr)) +# define MSR_FP_EXC_MASK 0x00000900 +/* This allows us to simulate the Linux prctl() through a macro. */ +# define PR_SET_FPEXC 1 +# define PR_FP_EXC_DISABLED 0x00000000 /* FP exceptions disabled */ +# define PR_FP_EXC_NONRECOV 0x00000100 /* async non-recoverable exc. mode */ +# define PR_FP_EXC_ASYNC 0x00000800 /* async recoverable exception mode */ +# define PR_FP_EXC_PRECISE 0x00000900 /* precise exception mode */ +# define prctl(operation,arg) \ + do { \ + if ((operation) == PR_SET_FPEXC) \ + { \ + unsigned int local_msr; \ + _GETMSR (local_msr); \ + local_msr &= ~MSR_FP_EXC_MASK; \ + local_msr |= (arg) & MSR_FP_EXC_MASK; \ + _SETMSR (local_msr); \ + } \ + } while (0) +# endif + +#elif defined __riscv + +/* fcsr bits 4..0 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. */ + +/* Trapping of floating-point exceptions does not work on RISC-V. That's + because the fcsr register has only bits for floating-point exception status, + but no bits for trapping floating-point exceptions. */ + +#elif defined __s390__ || defined __s390x__ + +/* fpc bits 23..19 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. + fpc bits 15..11 are part of the "data exception code" (DXC) and have a + similar meaning if bits 9..8 are both zero. */ +/* fpc bits 31..27 indicate which floating-point exceptions shall, when + occurring, trigger a trap rather than merely set the corresponding bit + in the fpc register. */ + +# define _FPU_GETCW(cw) __asm__ __volatile__ ("efpc %0" : "=d" (cw)) +# define _FPU_SETCW(cw) __asm__ __volatile__ ("sfpc %0" : : "d" (cw)) + +#elif defined __sh__ + +/* fpscr bits 6..2 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. */ +/* fpscr bits 11..7 indicate which floating-point exceptions shall, when + occurring, trigger a trap rather than merely set the corresponding bit + in the fpscr register. */ + +# define _FPU_GETCW(cw) __asm__ ("sts fpscr,%0" : "=r" (cw)) +# define _FPU_SETCW(cw) __asm__ ("lds %0,fpscr" : : "r" (cw)) + +#elif defined __sparc + +/* fsr bits 9..5 indicate which floating-point exceptions have occurred + since the respective bit was last set to zero. */ +/* fsr bits 27..23 indicate which floating-point exceptions shall, when + occurring, trigger a trap rather than merely set the corresponding bit + in the fsr register. */ + +# if defined __sparcv9 || defined __arch64__ /* sparc64 */ +# define _FPU_GETCW(X) __asm__ __volatile__ ("stx %%fsr,%0" : "=m" (X)) +# define _FPU_SETCW(X) __asm__ __volatile__ ("ldx %0,%%fsr" : : "m" (X)) +# else +# define _FPU_GETCW(X) __asm__ __volatile__ ("st %%fsr,%0" : "=m" (X)) +# define _FPU_SETCW(X) __asm__ __volatile__ ("ld %0,%%fsr" : : "m" (X)) +# endif + +#endif + +#if defined _AIX && defined __powerpc__ /* AIX */ + +/* defines a type fpflag_t and macros FP_*. */ + +/* Convert from an 'int exceptions' to an fpflag_t. */ +# if 0 /* Unoptimized */ +# define exceptions_to_fpflag(exceptions) \ + ( ((exceptions) & FE_INVALID ? FP_INVALID : 0) \ + | ((exceptions) & FE_DIVBYZERO ? FP_DIV_BY_ZERO : 0) \ + | ((exceptions) & FE_OVERFLOW ? FP_OVERFLOW : 0) \ + | ((exceptions) & FE_UNDERFLOW ? FP_UNDERFLOW : 0) \ + | ((exceptions) & FE_INEXACT ? FP_INEXACT : 0)) +# else /* Optimized */ +# define exceptions_to_fpflag(exceptions) \ + ((exceptions) & FE_ALL_EXCEPT) +# endif + +/* Convert from an fpflag_t to an 'int exceptions'. */ +# if 0 /* Unoptimized */ +# define fpflag_to_exceptions(f) \ + ( ((f) & FP_INVALID ? FE_INVALID : 0) \ + | ((f) & FP_DIV_BY_ZERO ? FE_DIVBYZERO : 0) \ + | ((f) & FP_OVERFLOW ? FE_OVERFLOW : 0) \ + | ((f) & FP_UNDERFLOW ? FE_UNDERFLOW : 0) \ + | ((f) & FP_INEXACT ? FE_INEXACT : 0)) +# else /* Optimized */ +# define fpflag_to_exceptions(f) \ + ((f) & FE_ALL_EXCEPT) +# endif + +/* The implementation of fegetexcept(). Avoids a module dependency. */ +# define fegetexcept_impl() \ + ( (fp_is_enabled (TRP_INVALID) ? FE_INVALID : 0) \ + | (fp_is_enabled (TRP_DIV_BY_ZERO) ? FE_DIVBYZERO : 0) \ + | (fp_is_enabled (TRP_OVERFLOW) ? FE_OVERFLOW : 0) \ + | (fp_is_enabled (TRP_UNDERFLOW) ? FE_UNDERFLOW : 0) \ + | (fp_is_enabled (TRP_INEXACT) ? FE_INEXACT : 0)) + +#endif diff --git a/include/libgnulib/ffsl.h b/include/libgnulib/ffsl.h new file mode 100755 index 0000000..53e1d46 --- /dev/null +++ b/include/libgnulib/ffsl.h @@ -0,0 +1,92 @@ +/* ffsl.h -- find the first set bit in a word. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake. */ + +/* This file is meant to be included by ffsl.c and ffsll.c, after + they have defined FUNC and TYPE. */ + +#include + +/* Specification. */ +#include + +#include +#include + +#if defined _MSC_VER && !(__clang_major__ >= 4) +# include +/* Copied from ffs.c. */ +static inline int +ffs (int i) +{ + /* _BitScanForward + */ + unsigned long bit; + if (_BitScanForward (&bit, i)) + return bit + 1; + else + return 0; +} +#endif + +#if !defined FUNC || !defined TYPE +# error +#endif + +int +FUNC (TYPE i) +{ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ + || (__clang_major__ >= 4) + return GCC_BUILTIN (i); +#elif defined _MSC_VER && defined MSVC_BUILTIN + /* _BitScanForward, _BitScanForward64 + */ + unsigned long bit; + if (MSVC_BUILTIN (&bit, i)) + return bit + 1; + else + return 0; +#else + unsigned TYPE j = i; + /* Split j into chunks, and look at one chunk after the other. */ + enum { chunk_bits = CHAR_BIT * sizeof (unsigned int) }; + /* The number of chunks is ceil (sizeof (TYPE) / sizeof (unsigned int)) + = (sizeof (TYPE) - 1) / sizeof (unsigned int) + 1. */ + enum { chunk_count = (sizeof (TYPE) - 1) / sizeof (unsigned int) + 1 }; + + if (chunk_count > 1) + { + size_t k; + + /* It is tempting to write if (!j) here, but if we do this, + Solaris 10/x86 "cc -O" miscompiles the code. */ + if (!i) + return 0; + /* Unroll the first loop round. k = 0. */ + if ((unsigned int) j) + return ffs ((unsigned int) j); + /* Generic loop. */ + for (k = 1; k < chunk_count - 1; k++) + if ((unsigned int) (j >> (k * chunk_bits)) != 0) + return k * chunk_bits + ffs ((unsigned int) (j >> (k * chunk_bits))); + } + /* Last loop round. k = chunk_count - 1. */ + return (chunk_count - 1) * chunk_bits + + ffs ((unsigned int) (j >> ((chunk_count - 1) * chunk_bits))); +#endif +} diff --git a/include/libgnulib/file-set.h b/include/libgnulib/file-set.h new file mode 100755 index 0000000..d4c977b --- /dev/null +++ b/include/libgnulib/file-set.h @@ -0,0 +1,42 @@ +/* Very specialized set-of-files code. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering, 2007. */ + +#include +#include + +#include "hash.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +extern void record_file (Hash_table *ht, char const *file, + struct stat const *stats) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ + __attribute__ ((__nonnull__ (2, 3))) +#endif +; + +extern bool seen_file (Hash_table const *ht, char const *file, + struct stat const *stats); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/file-type.h b/include/libgnulib/file-type.h new file mode 100755 index 0000000..862c4b4 --- /dev/null +++ b/include/libgnulib/file-type.h @@ -0,0 +1,45 @@ +/* Return a string describing the type of a file. + + Copyright (C) 1993-1994, 2001-2002, 2004-2005, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert and Jim Meyering. */ + +#ifndef FILE_TYPE_H +#define FILE_TYPE_H 1 + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +char const *c_file_type (struct stat const *) _GL_ATTRIBUTE_PURE; +char const *file_type (struct stat const *) _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + +#endif /* FILE_TYPE_H */ diff --git a/include/libgnulib/filemode.h b/include/libgnulib/filemode.h new file mode 100755 index 0000000..2dee82f --- /dev/null +++ b/include/libgnulib/filemode.h @@ -0,0 +1,50 @@ +/* Make a string describing file modes. + + Copyright (C) 1998-1999, 2003, 2006, 2009-2024 Free Software Foundation, + Inc. + + 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 3 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, see . */ + +#ifndef FILEMODE_H_ +# define FILEMODE_H_ + +/* This file uses HAVE_DECL_STRMODE. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include +# include + +/* Get the declaration of strmode. */ +# if HAVE_DECL_STRMODE +# include /* Mac OS X, FreeBSD, OpenBSD */ +# include /* NetBSD */ +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +# if !HAVE_DECL_STRMODE +extern void strmode (mode_t mode, char *str); +# endif + +extern void filemodestring (struct stat const *statp, char *str); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/filename.h b/include/libgnulib/filename.h new file mode 100755 index 0000000..4f0f0fb --- /dev/null +++ b/include/libgnulib/filename.h @@ -0,0 +1,112 @@ +/* Basic filename support macros. + Copyright (C) 2001-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* From Paul Eggert and Jim Meyering. */ + +#ifndef _FILENAME_H +#define _FILENAME_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Filename support. + ISSLASH(C) tests whether C is a directory separator + character. + HAS_DEVICE(Filename) tests whether Filename contains a device + specification. + FILE_SYSTEM_PREFIX_LEN(Filename) length of the device specification + at the beginning of Filename, + index of the part consisting of + alternating components and slashes. + FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + 1 when a non-empty device specification + can be followed by an empty or relative + part, + 0 when a non-empty device specification + must be followed by a slash, + 0 when device specification don't exist. + IS_ABSOLUTE_FILE_NAME(Filename) + tests whether Filename is independent of + any notion of "current directory". + IS_RELATIVE_FILE_NAME(Filename) + tests whether Filename may be concatenated + to a directory filename. + Note: On native Windows, OS/2, DOS, "c:" is neither an absolute nor a + relative file name! + IS_FILE_NAME_WITH_DIR(Filename) tests whether Filename contains a device + or directory specification. + */ +#if defined _WIN32 || defined __CYGWIN__ \ + || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__ + /* Native Windows, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') + /* Internal macro: Tests whether a character is a drive letter. */ +# define _IS_DRIVE_LETTER(C) \ + (((C) >= 'A' && (C) <= 'Z') || ((C) >= 'a' && (C) <= 'z')) + /* Help the compiler optimizing it. This assumes ASCII. */ +# undef _IS_DRIVE_LETTER +# define _IS_DRIVE_LETTER(C) \ + (((unsigned int) (C) | ('a' - 'A')) - 'a' <= 'z' - 'a') +# define HAS_DEVICE(Filename) \ + (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':') +# define FILE_SYSTEM_PREFIX_LEN(Filename) (HAS_DEVICE (Filename) ? 2 : 0) +# ifdef __CYGWIN__ +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +# else + /* On native Windows, OS/2, DOS, the system has the notion of a + "current directory" on each drive. */ +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 +# endif +# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define IS_ABSOLUTE_FILE_NAME(Filename) \ + ISSLASH ((Filename)[FILE_SYSTEM_PREFIX_LEN (Filename)]) +# else +# define IS_ABSOLUTE_FILE_NAME(Filename) \ + (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename)) +# endif +# define IS_RELATIVE_FILE_NAME(Filename) \ + (! (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename))) +# define IS_FILE_NAME_WITH_DIR(Filename) \ + (strchr ((Filename), '/') != NULL || strchr ((Filename), '\\') != NULL \ + || HAS_DEVICE (Filename)) +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +# define HAS_DEVICE(Filename) ((void) (Filename), 0) +# define FILE_SYSTEM_PREFIX_LEN(Filename) ((void) (Filename), 0) +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +# define IS_ABSOLUTE_FILE_NAME(Filename) ISSLASH ((Filename)[0]) +# define IS_RELATIVE_FILE_NAME(Filename) (! ISSLASH ((Filename)[0])) +# define IS_FILE_NAME_WITH_DIR(Filename) (strchr ((Filename), '/') != NULL) +#endif + +/* Deprecated macros. For backward compatibility with old users of the + 'filename' module. */ +#define IS_ABSOLUTE_PATH IS_ABSOLUTE_FILE_NAME +#define IS_PATH_WITH_DIR IS_FILE_NAME_WITH_DIR + + +#ifdef __cplusplus +} +#endif + +#endif /* _FILENAME_H */ diff --git a/include/libgnulib/filenamecat.h b/include/libgnulib/filenamecat.h new file mode 100755 index 0000000..618fb31 --- /dev/null +++ b/include/libgnulib/filenamecat.h @@ -0,0 +1,47 @@ +/* Concatenate two arbitrary file names. + + Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#if GNULIB_FILENAMECAT +char *file_name_concat (char const *dir, char const *base, + char **base_in_result) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; +#endif + +char *mfile_name_concat (char const *dir, char const *base, + char **base_in_result) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/filevercmp.h b/include/libgnulib/filevercmp.h new file mode 100755 index 0000000..81f821d --- /dev/null +++ b/include/libgnulib/filevercmp.h @@ -0,0 +1,93 @@ +/* Compare file names containing version numbers. + + Copyright (C) 1995 Ian Jackson + Copyright (C) 2001 Anthony Towns + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef FILEVERCMP_H +#define FILEVERCMP_H + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compare strings A and B as file names containing version numbers, + and return an integer that is negative, zero, or positive depending + on whether A compares less than, equal to, or greater than B. + + Use the following version sort algorithm: + + 1. Compare the strings' maximal-length non-digit prefixes lexically. + If there is a difference return that difference. + Otherwise discard the prefixes and continue with the next step. + + 2. Compare the strings' maximal-length digit prefixes, using + numeric comparison of the numbers represented by each prefix. + (Treat an empty prefix as zero; this can happen only at string end.) + If there is a difference, return that difference. + Otherwise discard the prefixes and continue with the next step. + + 3. If both strings are empty, return 0. Otherwise continue with step 1. + + In version sort, lexical comparison is left to right, byte by byte, + using the byte's numeric value (0-255), except that: + + 1. ASCII letters sort before other bytes. + 2. A tilde sorts before anything, even an empty string. + + In addition to the version sort rules, the following strings have + special priority and sort before all other strings (listed in order): + + 1. The empty string. + 2. ".". + 3. "..". + 4. Strings starting with "." sort before other strings. + + Before comparing two strings where both begin with non-".", + or where both begin with "." but neither is "." or "..", + suffixes matching the C-locale extended regular expression + (\.[A-Za-z~][A-Za-z0-9~]*)*$ are removed and the strings compared + without them, using version sort without special priority; + if they do not compare equal, this comparison result is used and + the suffixes are effectively ignored. Otherwise, the entire + strings are compared using version sort. When removing a suffix + from a nonempty string, remove the maximal-length suffix such that + the remaining string is nonempty. + + This function is intended to be a replacement for strverscmp. */ +int filevercmp (char const *a, char const *b) _GL_ATTRIBUTE_PURE; + +/* Like filevercmp, except compare the byte arrays A (of length ALEN) + and B (of length BLEN) so that A and B can contain '\0', which + sorts just before '\1'. But if ALEN is -1 treat A as a string + terminated by '\0', and similarly for BLEN. */ +int filenvercmp (char const *a, ptrdiff_t alen, char const *b, ptrdiff_t blen) + _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + +#endif /* FILEVERCMP_H */ diff --git a/include/libgnulib/findprog.h b/include/libgnulib/findprog.h new file mode 100755 index 0000000..ebc3b0f --- /dev/null +++ b/include/libgnulib/findprog.h @@ -0,0 +1,75 @@ +/* Locating a program in PATH. + Copyright (C) 2001-2003, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _FINDPROG_H +#define _FINDPROG_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Looks up a program in the PATH. + Attempts to determine the pathname that would be called by execlp/execvp + of PROGNAME. If successful, it returns a pathname containing a slash + (either absolute or relative to the current directory). Otherwise, it + returns PROGNAME unmodified. + Because of the latter case, callers should use execlp/execvp, not + execl/execv on the returned pathname. + The returned string is freshly malloc()ed if it is != PROGNAME. */ +extern const char *find_in_path (const char *progname); + +/* Looks up a program in the given PATH-like string. + + The PATH argument consists of a list of directories, separated by ':' or + (on native Windows) by ';'. An empty PATH element designates the current + directory. A null PATH is equivalent to an empty PATH, that is, to the + singleton list that contains only the current directory. + + If DIRECTORY is not NULL, all relative filenames (i.e. PROGNAME when it + contains a slash, and the PATH elements) are considered relative to + DIRECTORY instead of relative to the current directory of this process. + + Determines the pathname that would be called by execlp/execvp of PROGNAME. + - If successful, it returns a pathname containing a slash (either absolute + or relative to the current directory). The returned string can be used + with either execl/execv or execlp/execvp. It is freshly malloc()ed if it + is != PROGNAME. + - Otherwise, it sets errno and returns NULL. + Specific errno values include: + - ENOENT: means that the program's file was not found. + - EACCES: means that the program's file cannot be accessed (due to some + issue with one of the ancestor directories) or lacks the execute + permissions. + - ENOMEM: means out of memory. + If OPTIMIZE_FOR_EXEC is true, the function saves some work, under the + assumption that the resulting pathname will not be accessed directly, + only through execl/execv or execlp/execvp. + + Here, a "slash" means: + - On POSIX systems excluding Cygwin: a '/', + - On Windows, OS/2, DOS platforms: a '/' or '\'. */ +extern const char *find_in_given_path (const char *progname, const char *path, + const char *directory, + bool optimize_for_exec); + + +#ifdef __cplusplus +} +#endif + +#endif /* _FINDPROG_H */ diff --git a/include/libgnulib/flexmember.h b/include/libgnulib/flexmember.h new file mode 100755 index 0000000..6ef66a3 --- /dev/null +++ b/include/libgnulib/flexmember.h @@ -0,0 +1,76 @@ +/* Sizes of structs with flexible array members. + + Copyright 2016-2024 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . + + Written by Paul Eggert. */ + +/* This file uses _Alignof. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Nonzero multiple of alignment of TYPE, suitable for FLEXSIZEOF below. + On older platforms without _Alignof, use a pessimistic bound that is + safe in practice even if FLEXIBLE_ARRAY_MEMBER is 1. + On newer platforms, use _Alignof to get a tighter bound. */ + +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 +# define FLEXALIGNOF(type) (sizeof (type) & ~ (sizeof (type) - 1)) +#else +# define FLEXALIGNOF(type) _Alignof (type) +#endif + +/* Yield a properly aligned upper bound on the size of a struct of + type TYPE with a flexible array member named MEMBER that is + followed by N bytes of other data. The result is suitable as an + argument to malloc. For example: + + struct s { int a; char d[FLEXIBLE_ARRAY_MEMBER]; }; + struct s *p = malloc (FLEXSIZEOF (struct s, d, n * sizeof (char))); + + FLEXSIZEOF (TYPE, MEMBER, N) is not simply (sizeof (TYPE) + N), + since FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. Nor is + it simply (offsetof (TYPE, MEMBER) + N), as that might yield a size + that causes malloc to yield a pointer that is not properly aligned + for TYPE; for example, if sizeof (int) == alignof (int) == 4, + malloc (offsetof (struct s, d) + 3 * sizeof (char)) is equivalent + to malloc (7) and might yield a pointer that is not a multiple of 4 + (which means the pointer is not properly aligned for struct s), + whereas malloc (FLEXSIZEOF (struct s, d, 3 * sizeof (char))) is + equivalent to malloc (8) and must yield a pointer that is a + multiple of 4. + + Yield a value less than N if and only if arithmetic overflow occurs. */ + +#define FLEXSIZEOF(type, member, n) \ + ((offsetof (type, member) + FLEXALIGNOF (type) - 1 + (n)) \ + & ~ (FLEXALIGNOF (type) - 1)) + +/* Yield a properly aligned upper bound on the size of a struct of + type TYPE with a flexible array member named MEMBER that has N + elements. The result is suitable as an argument to malloc. + For example: + + struct s { int a; double d[FLEXIBLE_ARRAY_MEMBER]; }; + struct s *p = malloc (FLEXNSIZEOF (struct s, d, n)); + */ +#define FLEXNSIZEOF(type, member, n) \ + FLEXSIZEOF (type, member, (n) * sizeof (((type *) 0)->member[0])) diff --git a/include/libgnulib/float+.h b/include/libgnulib/float+.h new file mode 100755 index 0000000..104f477 --- /dev/null +++ b/include/libgnulib/float+.h @@ -0,0 +1,147 @@ +/* Supplemental information about the floating-point formats. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _FLOATPLUS_H +#define _FLOATPLUS_H + +#include +#include + +/* Number of bits in the mantissa of a floating-point number, including the + "hidden bit". */ +#if FLT_RADIX == 2 +# define FLT_MANT_BIT FLT_MANT_DIG +# define DBL_MANT_BIT DBL_MANT_DIG +# define LDBL_MANT_BIT LDBL_MANT_DIG +#elif FLT_RADIX == 4 +# define FLT_MANT_BIT (FLT_MANT_DIG * 2) +# define DBL_MANT_BIT (DBL_MANT_DIG * 2) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) +#elif FLT_RADIX == 16 +# define FLT_MANT_BIT (FLT_MANT_DIG * 4) +# define DBL_MANT_BIT (DBL_MANT_DIG * 4) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) +#endif + +/* Bit mask that can be used to mask the exponent, as an unsigned number. */ +#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) +#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) +#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) + +/* Number of bits used for the exponent of a floating-point number, including + the exponent's sign. */ +#define FLT_EXP_BIT \ + (FLT_EXP_MASK < 0x100 ? 8 : \ + FLT_EXP_MASK < 0x200 ? 9 : \ + FLT_EXP_MASK < 0x400 ? 10 : \ + FLT_EXP_MASK < 0x800 ? 11 : \ + FLT_EXP_MASK < 0x1000 ? 12 : \ + FLT_EXP_MASK < 0x2000 ? 13 : \ + FLT_EXP_MASK < 0x4000 ? 14 : \ + FLT_EXP_MASK < 0x8000 ? 15 : \ + FLT_EXP_MASK < 0x10000 ? 16 : \ + FLT_EXP_MASK < 0x20000 ? 17 : \ + FLT_EXP_MASK < 0x40000 ? 18 : \ + FLT_EXP_MASK < 0x80000 ? 19 : \ + FLT_EXP_MASK < 0x100000 ? 20 : \ + FLT_EXP_MASK < 0x200000 ? 21 : \ + FLT_EXP_MASK < 0x400000 ? 22 : \ + FLT_EXP_MASK < 0x800000 ? 23 : \ + FLT_EXP_MASK < 0x1000000 ? 24 : \ + FLT_EXP_MASK < 0x2000000 ? 25 : \ + FLT_EXP_MASK < 0x4000000 ? 26 : \ + FLT_EXP_MASK < 0x8000000 ? 27 : \ + FLT_EXP_MASK < 0x10000000 ? 28 : \ + FLT_EXP_MASK < 0x20000000 ? 29 : \ + FLT_EXP_MASK < 0x40000000 ? 30 : \ + FLT_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define DBL_EXP_BIT \ + (DBL_EXP_MASK < 0x100 ? 8 : \ + DBL_EXP_MASK < 0x200 ? 9 : \ + DBL_EXP_MASK < 0x400 ? 10 : \ + DBL_EXP_MASK < 0x800 ? 11 : \ + DBL_EXP_MASK < 0x1000 ? 12 : \ + DBL_EXP_MASK < 0x2000 ? 13 : \ + DBL_EXP_MASK < 0x4000 ? 14 : \ + DBL_EXP_MASK < 0x8000 ? 15 : \ + DBL_EXP_MASK < 0x10000 ? 16 : \ + DBL_EXP_MASK < 0x20000 ? 17 : \ + DBL_EXP_MASK < 0x40000 ? 18 : \ + DBL_EXP_MASK < 0x80000 ? 19 : \ + DBL_EXP_MASK < 0x100000 ? 20 : \ + DBL_EXP_MASK < 0x200000 ? 21 : \ + DBL_EXP_MASK < 0x400000 ? 22 : \ + DBL_EXP_MASK < 0x800000 ? 23 : \ + DBL_EXP_MASK < 0x1000000 ? 24 : \ + DBL_EXP_MASK < 0x2000000 ? 25 : \ + DBL_EXP_MASK < 0x4000000 ? 26 : \ + DBL_EXP_MASK < 0x8000000 ? 27 : \ + DBL_EXP_MASK < 0x10000000 ? 28 : \ + DBL_EXP_MASK < 0x20000000 ? 29 : \ + DBL_EXP_MASK < 0x40000000 ? 30 : \ + DBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define LDBL_EXP_BIT \ + (LDBL_EXP_MASK < 0x100 ? 8 : \ + LDBL_EXP_MASK < 0x200 ? 9 : \ + LDBL_EXP_MASK < 0x400 ? 10 : \ + LDBL_EXP_MASK < 0x800 ? 11 : \ + LDBL_EXP_MASK < 0x1000 ? 12 : \ + LDBL_EXP_MASK < 0x2000 ? 13 : \ + LDBL_EXP_MASK < 0x4000 ? 14 : \ + LDBL_EXP_MASK < 0x8000 ? 15 : \ + LDBL_EXP_MASK < 0x10000 ? 16 : \ + LDBL_EXP_MASK < 0x20000 ? 17 : \ + LDBL_EXP_MASK < 0x40000 ? 18 : \ + LDBL_EXP_MASK < 0x80000 ? 19 : \ + LDBL_EXP_MASK < 0x100000 ? 20 : \ + LDBL_EXP_MASK < 0x200000 ? 21 : \ + LDBL_EXP_MASK < 0x400000 ? 22 : \ + LDBL_EXP_MASK < 0x800000 ? 23 : \ + LDBL_EXP_MASK < 0x1000000 ? 24 : \ + LDBL_EXP_MASK < 0x2000000 ? 25 : \ + LDBL_EXP_MASK < 0x4000000 ? 26 : \ + LDBL_EXP_MASK < 0x8000000 ? 27 : \ + LDBL_EXP_MASK < 0x10000000 ? 28 : \ + LDBL_EXP_MASK < 0x20000000 ? 29 : \ + LDBL_EXP_MASK < 0x40000000 ? 30 : \ + LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) + +/* Number of bits used for a floating-point number: the mantissa (not + counting the "hidden bit", since it may or may not be explicit), the + exponent, and the sign. */ +#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) +#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) +#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) + +/* Number of bytes used for a floating-point number. + This can be smaller than the 'sizeof'. For example, on i386 systems, + 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence + LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but + sizeof (long double) = 12 or = 16. */ +#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) + +/* Verify that SIZEOF_FLT <= sizeof (float) etc. */ +typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; +typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; +typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; + +#endif /* _FLOATPLUS_H */ diff --git a/include/libgnulib/fpe-trapping.h b/include/libgnulib/fpe-trapping.h new file mode 100755 index 0000000..1afa735 --- /dev/null +++ b/include/libgnulib/fpe-trapping.h @@ -0,0 +1,53 @@ +/* Trapping floating-point exceptions. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* HAVE_FPE_TRAPPING + Defined to 1 when sigfpe_on_invalid is available. */ + +/* sigfpe_on_invalid + Enables a SIGFPE signal when an FE_INVALID exception occurs. + A SIGFPE signal by default terminates the program. + Returns >= 0 when successful, -1 upon failure. */ + + +#include + +static int +sigfpe_on_invalid () +{ + /* Clear FE_INVALID exceptions from past operations. */ + feclearexcept (FE_INVALID); + + /* An FE_INVALID exception shall trigger a SIGFPE signal. + This call may fail on arm, arm64, riscv64 CPUs. + Also, possibly a bug in glibc/sysdeps/m68k/fpu/feenablxcpt.c: it sets + only bit 13, but should better set bits 15, 14, 13 of the control + register together. See + . */ + int ret = feenableexcept (FE_INVALID); + if (ret == -1) + return -1; + + return 0; +} + +/* But it does not work on RISC-V. That's because the fcsr register has only + bits for floating-point exception status, but no bits for trapping + floating-point exceptions. */ +/* And it does not work on arm with software floating-point emulation. */ +#if !(defined __riscv || (defined __GLIBC__ && defined __arm__ && defined __SOFTFP__)) +# define HAVE_FPE_TRAPPING 1 +#endif diff --git a/include/libgnulib/fpending.h b/include/libgnulib/fpending.h new file mode 100755 index 0000000..345c0bc --- /dev/null +++ b/include/libgnulib/fpending.h @@ -0,0 +1,45 @@ +/* Declare __fpending. + + Copyright (C) 2000, 2003, 2005-2006, 2009-2024 Free Software Foundation, + Inc. + + 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 3 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, see . + + Written by Jim Meyering. */ + +/* This file uses _GL_ATTRIBUTE_PURE, HAVE_STDIO_EXT_H, + HAVE_DECL___FPENDING. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#if HAVE_STDIO_EXT_H +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#if !HAVE_DECL___FPENDING +size_t __fpending (FILE *) _GL_ATTRIBUTE_PURE; +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/fprintftime.h b/include/libgnulib/fprintftime.h new file mode 100755 index 0000000..0001fef --- /dev/null +++ b/include/libgnulib/fprintftime.h @@ -0,0 +1,39 @@ +/* Generate time strings directly to the output. */ + +/* Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* A cross between fprintf and nstrftime, that prints directly + to the output stream, without the need for the potentially + large buffer that nstrftime would require. + + Output to stream FP the result of formatting (according to the + nstrftime format string, FMT) the time data, *TM, and the ZONE + and NANOSECONDS values. */ +size_t fprintftime (FILE *fp, char const *fmt, struct tm const *tm, + timezone_t zone, int nanoseconds); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/fpucw.h b/include/libgnulib/fpucw.h new file mode 100755 index 0000000..fdc53b8 --- /dev/null +++ b/include/libgnulib/fpucw.h @@ -0,0 +1,118 @@ +/* Manipulating the FPU control word. -*- coding: utf-8 -*- + Copyright (C) 2007-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _FPUCW_H +#define _FPUCW_H + +/* The i386 floating point hardware (the 387 compatible FPU, not the modern + SSE/SSE2 hardware) has a controllable rounding precision. It is specified + through the 'PC' bits in the FPU control word ('fctrl' register). (See + the GNU libc i386 header for details.) + + On some platforms, such as Linux or Solaris, the default precision setting + is set to "extended precision". This means that 'long double' instructions + operate correctly, but 'double' computations often produce slightly + different results as on strictly IEEE 754 conforming systems. + + On some platforms, such as NetBSD, the default precision is set to + "double precision". This means that 'long double' instructions will operate + only as 'double', i.e. lead to wrong results. Similarly on FreeBSD 6.4, at + least for the division of 'long double' numbers. + + The FPU control word is under control of the application, i.e. it is + not required to be set either way by the ABI. (In fact, the i386 ABI + https://www.linux-mips.org/pub/linux/mips/doc/ABI/abi386-4.pdf page 3-12 = page 38 + is not clear about it. But in any case, gcc treats the control word + like a "preserved" register: it emits code that assumes that the control + word is preserved across calls, and it restores the control word at the + end of functions that modify it.) + + See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html + for a good explanation. + See https://web.archive.org/web/20060905133417/http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html + some argumentation which setting should be the default. */ + +/* This header file provides the following facilities: + fpucw_t integral type holding the value of 'fctrl' + FPU_PC_MASK bit mask denoting the precision control + FPU_PC_DOUBLE precision control for 53 bits mantissa + FPU_PC_EXTENDED precision control for 64 bits mantissa + GET_FPUCW () yields the current FPU control word + SET_FPUCW (word) sets the FPU control word + DECL_LONG_DOUBLE_ROUNDING variable declaration for + BEGIN/END_LONG_DOUBLE_ROUNDING + BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with + 'long double' safe operation precision + END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with + 'long double' safe operation precision + */ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Inline assembler like this works only with GNU C and clang. */ +#if (defined __i386__ || defined __x86_64__) && (defined __GNUC__ || defined __clang__) + +typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ + +# define FPU_PC_MASK 0x0300 +# define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ +# define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ + +# define GET_FPUCW() __extension__ \ + ({ fpucw_t _cw; \ + __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ + _cw; \ + }) +# define SET_FPUCW(word) __extension__ \ + (void)({ fpucw_t _ncw = (word); \ + __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ + }) + +# define DECL_LONG_DOUBLE_ROUNDING \ + fpucw_t oldcw; +# define BEGIN_LONG_DOUBLE_ROUNDING() \ + (void)(oldcw = GET_FPUCW (), \ + SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) +# define END_LONG_DOUBLE_ROUNDING() \ + SET_FPUCW (oldcw) + +#else + +typedef unsigned int fpucw_t; + +# define FPU_PC_MASK 0 +# define FPU_PC_DOUBLE 0 +# define FPU_PC_EXTENDED 0 + +# define GET_FPUCW() 0 +# define SET_FPUCW(word) (void)(word) + +# define DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_LONG_DOUBLE_ROUNDING() +# define END_LONG_DOUBLE_ROUNDING() + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _FPUCW_H */ diff --git a/include/libgnulib/freadable.h b/include/libgnulib/freadable.h new file mode 100755 index 0000000..b24e762 --- /dev/null +++ b/include/libgnulib/freadable.h @@ -0,0 +1,49 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_PURE, HAVE___FREADABLE, HAVE_STDIO_EXT_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Return true if the stream STREAM supports reading, false if it supports + only writing, i.e. if it was opened write-only or append-only. + STREAM must not be wide-character oriented. + The result doesn't change until the stream is closed or re-opened. */ + +#if HAVE___FREADABLE +/* glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 23, musl libc */ + +# if HAVE_STDIO_EXT_H +# include +# endif +# define freadable(stream) (__freadable (stream) != 0) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern bool freadable (FILE *stream) _GL_ATTRIBUTE_PURE; + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/freadahead.h b/include/libgnulib/freadahead.h new file mode 100755 index 0000000..f4fc26c --- /dev/null +++ b/include/libgnulib/freadahead.h @@ -0,0 +1,52 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_PURE, HAVE___FREADAHEAD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +/* Assuming the stream STREAM is open for reading: + Return the number of bytes waiting in the input buffer of STREAM. + This includes both the bytes that have been read from the underlying input + source and the bytes that have been pushed back through 'ungetc'. + + If this number is 0 and the stream is not currently writing, + fflush (STREAM) is known to be a no-op. + + STREAM must not be wide-character oriented. */ + +#if HAVE___FREADAHEAD /* musl libc, Android API level ≥ 33 */ + +# include +# define freadahead(stream) __freadahead (stream) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern size_t freadahead (FILE *stream) _GL_ATTRIBUTE_PURE; + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/freading.h b/include/libgnulib/freading.h new file mode 100755 index 0000000..943354f --- /dev/null +++ b/include/libgnulib/freading.h @@ -0,0 +1,59 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_PURE, HAVE___FREADING, HAVE_STDIO_EXT_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Return true if the stream STREAM is opened read-only, or if the + last operation on the stream was a read operation. Return false if + the stream is opened write-only or append-only, or if it supports + writing and there is no current read operation (such as fgetc). + + freading and fwriting will never both be true. If STREAM supports + both reads and writes, then: + - both freading and fwriting might be false when the stream is first + opened, after read encounters EOF, or after fflush, + - freading might be false or true and fwriting might be false + after repositioning (such as fseek, fsetpos, or rewind), + depending on the underlying implementation. + + STREAM must not be wide-character oriented. */ + +#if HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7)) +/* Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 29, not glibc >= 2.2, but glibc >= 2.7, or musl libc */ + +# if HAVE_STDIO_EXT_H +# include +# endif +# define freading(stream) (__freading (stream) != 0) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern bool freading (FILE *stream) _GL_ATTRIBUTE_PURE; + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/freadptr.h b/include/libgnulib/freadptr.h new file mode 100755 index 0000000..e543f6d --- /dev/null +++ b/include/libgnulib/freadptr.h @@ -0,0 +1,53 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses HAVE___FREADPTR. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +/* Assuming the stream STREAM is open for reading: + Return a pointer to the input buffer of STREAM, or NULL. + If the returned pointer is non-NULL, *SIZEP is set to the (positive) size + of the input buffer. + If the returned pointer is NULL, you should use getc (STREAM), + fgetc (STREAM), or fread (..., STREAM) to access the input from STREAM. + + The resulting pointer becomes invalid upon any operation on STREAM. + + STREAM must not be wide-character oriented. */ + +#if HAVE___FREADPTR /* musl libc */ + +# include +# define freadptr(stream,sizep) __freadptr (stream, sizep) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern const char * freadptr (FILE *stream, size_t *sizep); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/freadseek.h b/include/libgnulib/freadseek.h new file mode 100755 index 0000000..ee63017 --- /dev/null +++ b/include/libgnulib/freadseek.h @@ -0,0 +1,42 @@ +/* Skipping input from a FILE stream. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Assuming the stream STREAM is open for reading: + + Read and discard OFFSET bytes from STREAM. + + freadseek (STREAM, OFFSET) is the same as + fseek (STREAM, OFFSET, SEEK_CUR), except that the latter does not work + on non-seekable input streams (such as pipes). + + Upon success, return 0. + Upon premature end of stream, return 0 (like fseek does). + Upon error, set the error indicator in the stream and return EOF. + + STREAM must not be wide-character oriented. */ + +extern int freadseek (FILE *stream, size_t offset); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/fseterr.h b/include/libgnulib/fseterr.h new file mode 100755 index 0000000..42e49fc --- /dev/null +++ b/include/libgnulib/fseterr.h @@ -0,0 +1,50 @@ +/* Set the error indicator of a stream. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _FSETERR_H +#define _FSETERR_H + +/* This file uses HAVE___FSETERR. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Set the error indicator of the stream FP. + The "error indicator" is set when an I/O operation on the stream fails, and + is cleared (together with the "end-of-file" indicator) by clearerr (FP). */ + +#if HAVE___FSETERR /* musl libc */ + +# include +# define fseterr(fp) __fseterr (fp) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern void fseterr (FILE *fp); + +# ifdef __cplusplus +} +# endif + +#endif + +#endif /* _FSETERR_H */ diff --git a/include/libgnulib/fstrcmp.h b/include/libgnulib/fstrcmp.h new file mode 100755 index 0000000..3b026f9 --- /dev/null +++ b/include/libgnulib/fstrcmp.h @@ -0,0 +1,54 @@ +/* Fuzzy string comparison. + Copyright (C) 1995, 2000, 2002-2003, 2006, 2008-2024 Free Software + Foundation, Inc. + + This file was written by Peter Miller + +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 3 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, see . */ + +#ifndef _FSTRCMP_H +#define _FSTRCMP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Fuzzy compare of S1 and S2. Return a measure for the similarity of S1 + and S1. The higher the result, the more similar the strings are. + The result is bounded between 0 (meaning very dissimilar strings) and + 1 (meaning identical strings). */ +extern double fstrcmp (const char *s1, const char *s2); + +/* Like fstrcmp (S1, S2), except that if the result is < LOWER_BOUND, an + arbitrary other value < LOWER_BOUND can be returned. */ +extern double fstrcmp_bounded (const char *s1, const char *s2, + double lower_bound); + +/* A shortcut for fstrcmp. Avoids a function call. */ +#define fstrcmp(s1,s2) fstrcmp_bounded (s1, s2, 0.0) + +/* Frees the per-thread resources allocated by this module for the current + thread. + You don't need to call this function in threads other than the main thread, + because per-thread resources are reclaimed automatically when the thread + exits. However, per-thread resources allocated by the main thread are + comparable to static allocations; calling this function can be useful to + avoid an error report from valgrind. */ +extern void fstrcmp_free_resources (void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/fsusage.h b/include/libgnulib/fsusage.h new file mode 100755 index 0000000..da87859 --- /dev/null +++ b/include/libgnulib/fsusage.h @@ -0,0 +1,49 @@ +/* fsusage.h -- declarations for file system space usage info + + Copyright (C) 1991-1992, 1997, 2003-2006, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Space usage statistics for a file system. Blocks are 512-byte. */ + +#if !defined FSUSAGE_H_ +#define FSUSAGE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +struct fs_usage +{ + uintmax_t fsu_blocksize; /* Size of a block. */ + uintmax_t fsu_blocks; /* Total blocks. */ + uintmax_t fsu_bfree; /* Free blocks available to superuser. */ + uintmax_t fsu_bavail; /* Free blocks available to non-superuser. */ + bool fsu_bavail_top_bit_set; /* 1 if fsu_bavail represents a value < 0. */ + uintmax_t fsu_files; /* Total file nodes. */ + uintmax_t fsu_ffree; /* Free file nodes. */ +}; + +int get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/ftoastr.h b/include/libgnulib/ftoastr.h new file mode 100755 index 0000000..9455486 --- /dev/null +++ b/include/libgnulib/ftoastr.h @@ -0,0 +1,162 @@ +/* floating point to accurate string + + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#ifndef _GL_FTOASTR_H +#define _GL_FTOASTR_H + +#include "intprops.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Store into BUF (of size BUFSIZE) an accurate minimal-precision + string representation of a floating point number. FLAGS affect the + formatting of the number. Pad the output string with spaces as + necessary to width WIDTH bytes, in the style of printf. WIDTH must + be nonnegative. X is the floating-point number to be converted. + + Return the number of bytes stored into BUF, not counting the + terminating null. However, do not overrun BUF: if BUF is too + small, return a fairly tight (but not necessarily exact) upper + bound on the value that would have been returned if BUF had been + big enough. If SIZE is zero, BUF may be a null pointer. On error + (e.g., returned value would exceed INT_MAX), return -1 and set + errno. + + Example: + + char buf[DBL_BUFSIZE_BOUND]; + int r = dtoastr (buf, sizeof buf, 0, 0, 0.1); + + In the C locale, this sets R to 3 and stores "0.1" into BUF. */ + +int ftoastr (char *buf, size_t bufsize, int flags, int width, float x); +int dtoastr (char *buf, size_t bufsize, int flags, int width, double x); +int ldtoastr (char *buf, size_t bufsize, int flags, int width, long double x); + +/* The last two functions except that the formatting takes place in + the C locale. */ +int c_dtoastr (char *buf, size_t bufsize, int flags, int width, double x); +int c_ldtoastr (char *buf, size_t bufsize, int flags, int width, long double x); + + +/* Flag values for ftoastr etc. These can be ORed together. */ +enum + { + /* Left justify within the width; the default is right justification. */ + FTOASTR_LEFT_JUSTIFY = 1, + + /* Output "+" before positive numbers; the default outputs nothing. */ + FTOASTR_ALWAYS_SIGNED = 2, + + /* Output " " before positive numbers; ignored if + FTOASTR_ALWAYS_SIGNED is also given. */ + FTOASTR_SPACE_POSITIVE = 4, + + /* Pad with zeros instead of spaces; ignored if FTOASTR_LEFT_JUSTIFY + is also given. */ + FTOASTR_ZERO_PAD = 8, + + /* Use 'E' instead of 'e' before the exponent. */ + FTOASTR_UPPER_E = 16 + }; + + +/* _GL_FLT_PREC_BOUND is an upper bound on the precision needed to + represent a float value without losing information. Likewise for + _GL_DBL_PREC_BOUND and double, and _GL_LDBL_PREC_BOUND and long double. + These are macros, not enums, to work around a bug in IBM xlc 12.1. */ + +#if FLT_RADIX == 10 /* decimal floating point */ +# define _GL_FLT_PREC_BOUND FLT_MANT_DIG +# define _GL_DBL_PREC_BOUND DBL_MANT_DIG +# define _GL_LDBL_PREC_BOUND LDBL_MANT_DIG +#else + +/* An upper bound on the number of bits needed to represent a single + digit in a floating-point fraction. */ +# if FLT_RADIX == 2 /* IEEE 754 floating point, VAX floating point, etc. */ +# define _GL_FLOAT_DIG_BITS_BOUND 1 +# elif FLT_RADIX <= 16 /* IBM hex floating point has FLT_RADIX == 16. */ +# define _GL_FLOAT_DIG_BITS_BOUND 4 +# else /* no machine is this bad, but let's be complete */ +# define _GL_FLOAT_DIG_BITS_BOUND ((int) TYPE_WIDTH (int) - 1) +# endif + +/* An upper bound on the number of decimal digits needed to represent + a floating point number accurately, assuming a fraction contains + DIG digits. For why the "+ 1" is needed, see "Binary to Decimal + Conversion" in David Goldberg's paper "What Every Computer + Scientist Should Know About Floating-Point Arithmetic" + . */ +# define _GL_FLOAT_PREC_BOUND(dig) \ + (INT_BITS_STRLEN_BOUND ((dig) * _GL_FLOAT_DIG_BITS_BOUND) + 1) + +# define _GL_FLT_PREC_BOUND _GL_FLOAT_PREC_BOUND ( FLT_MANT_DIG) +# define _GL_DBL_PREC_BOUND _GL_FLOAT_PREC_BOUND ( DBL_MANT_DIG) +# define _GL_LDBL_PREC_BOUND _GL_FLOAT_PREC_BOUND (LDBL_MANT_DIG) +#endif + + +/* Bound on the number of bytes printed for an exponent in the range + MIN..MAX, where MIN < 0 < MAX; printf always prints a sign and at + least 2 digits. Although the maximum known exponent is 4932 for + IEEE 754 binary128, support tight bounds for exponents up to a + million, just in case. */ +#define _GL_FLOAT_EXPONENT_STRLEN_BOUND(min, max) \ + ( -100 < (min) && (max) < 100 ? 3 \ + : -1000 < (min) && (max) < 1000 ? 4 \ + : -10000 < (min) && (max) < 10000 ? 5 \ + : -100000 < (min) && (max) < 100000 ? 6 \ + : -1000000 < (min) && (max) < 1000000 ? 7 \ + : INT_STRLEN_BOUND (int) /* not a tight bound */) + +/* A reasonably tight bound on the length of a type-T floating value + formatted with ftoastr etc. Room is needed for sign, fraction + digits, decimal point, "e", and exponent. POINTLEN should be a + reasonably tight bound on the string length of the decimal + point. */ +#define _GL_FLOAT_STRLEN_BOUND_L(t, pointlen) \ + (1 + _GL_##t##_PREC_BOUND + pointlen + 1 \ + + _GL_FLOAT_EXPONENT_STRLEN_BOUND (t##_MIN_10_EXP, t##_MAX_10_EXP)) +#define FLT_STRLEN_BOUND_L(pointlen) _GL_FLOAT_STRLEN_BOUND_L ( FLT, pointlen) +#define DBL_STRLEN_BOUND_L(pointlen) _GL_FLOAT_STRLEN_BOUND_L ( DBL, pointlen) +#define LDBL_STRLEN_BOUND_L(pointlen) _GL_FLOAT_STRLEN_BOUND_L (LDBL, pointlen) + +/* Looser bounds that are locale-independent and are integral constant + expressions. */ +#define FLT_STRLEN_BOUND FLT_STRLEN_BOUND_L (MB_LEN_MAX) +#define DBL_STRLEN_BOUND DBL_STRLEN_BOUND_L (MB_LEN_MAX) +#define LDBL_STRLEN_BOUND LDBL_STRLEN_BOUND_L (MB_LEN_MAX) + +/* Looser, locale-independent bounds that include the trailing null byte. */ +#define FLT_BUFSIZE_BOUND ( FLT_STRLEN_BOUND + 1) +#define DBL_BUFSIZE_BOUND ( DBL_STRLEN_BOUND + 1) +#define LDBL_BUFSIZE_BOUND (LDBL_STRLEN_BOUND + 1) + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_FTOASTR_H */ diff --git a/include/libgnulib/fts_.h b/include/libgnulib/fts_.h new file mode 100755 index 0000000..00ea3f1 --- /dev/null +++ b/include/libgnulib/fts_.h @@ -0,0 +1,280 @@ +/* Traverse a file hierarchy. + + Copyright (C) 2004-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* + * Copyright (c) 1989, 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. + * + * @(#)fts.h 8.3 (Berkeley) 8/14/94 + */ + +#ifndef _FTS_H +# define _FTS_H 1 + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_NODISCARD. */ +# if !_LIBC && !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# ifdef _LIBC +# include +# if __STDC_VERSION__ < 199901L +# define __FLEXIBLE_ARRAY_MEMBER 1 +# else +# define __FLEXIBLE_ARRAY_MEMBER +# endif +# else +# define __FLEXIBLE_ARRAY_MEMBER FLEXIBLE_ARRAY_MEMBER +# undef __THROW +# define __THROW +# undef __BEGIN_DECLS +# undef __END_DECLS +# ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +# else +# define __BEGIN_DECLS +# define __END_DECLS +# endif +# endif + +# include +# include +# include +# include +# include "i-ring.h" + +typedef struct { + struct _ftsent *fts_cur; /* current node */ + struct _ftsent *fts_child; /* linked list of children */ + struct _ftsent **fts_array; /* sort array */ + dev_t fts_dev; /* starting device # */ + char *fts_path; /* file name for this descent */ + int fts_rfd; /* fd for root */ + int fts_cwd_fd; /* the file descriptor on which the + virtual cwd is open, or AT_FDCWD */ + size_t fts_pathlen; /* sizeof(path) */ + size_t fts_nitems; /* elements in the sort array */ + int (*fts_compar) (struct _ftsent const **, struct _ftsent const **); + /* compare fn */ + +# define FTS_COMFOLLOW 0x0001 /* follow command line symlinks */ +# define FTS_LOGICAL 0x0002 /* logical walk */ +# define FTS_NOCHDIR 0x0004 /* don't change directories */ +# define FTS_NOSTAT 0x0008 /* don't get stat info */ +# define FTS_PHYSICAL 0x0010 /* physical walk */ +# define FTS_SEEDOT 0x0020 /* return dot and dot-dot */ +# define FTS_XDEV 0x0040 /* don't cross devices */ +# define FTS_WHITEOUT 0x0080 /* return whiteout information */ + + /* There are two ways to detect cycles. + The lazy way (which works only with FTS_PHYSICAL), + with which one may process a directory that is a + part of the cycle several times before detecting the cycle. + The "tight" way, whereby fts uses more memory (proportional + to number of "active" directories, aka distance from root + of current tree to current directory -- see active_dir_ht) + to detect any cycle right away. For example, du must use + this option to avoid counting disk space in a cycle multiple + times, but chown -R need not. + The default is to use the constant-memory lazy way, when possible + (see below). + + However, with FTS_LOGICAL (when following symlinks, e.g., chown -L) + using lazy cycle detection is inadequate. For example, traversing + a directory containing a symbolic link to a peer directory, it is + possible to encounter the same directory twice even though there + is no cycle: + dir + ... + slink -> dir + So, when FTS_LOGICAL is selected, we have to use a different + mode of cycle detection: FTS_TIGHT_CYCLE_CHECK. */ +# define FTS_TIGHT_CYCLE_CHECK 0x0100 + + /* Use this flag to enable semantics with which the parent + application may be made both more efficient and more robust. + Whereas the default is to visit each directory in a recursive + traversal (via chdir), using this flag makes it so the initial + working directory is never changed. Instead, these functions + perform the traversal via a virtual working directory, maintained + through the file descriptor member, fts_cwd_fd. */ +# define FTS_CWDFD 0x0200 + + /* Historically, for each directory that fts initially encounters, it would + open it, read all entries, and stat each entry, storing the results, and + then it would process the first entry. But that behavior is bad for + locality of reference, and also causes trouble with inode-simulating + file systems like FAT, CIFS, FUSE-based ones, etc., when entries from + their name/inode cache are flushed too early. + Use this flag to make fts_open and fts_read defer the stat/lstat/fststat + of each entry until it is actually processed. However, note that if you + use this option and also specify a comparison function, that function may + not examine any data via fts_statp. However, when fts_statp->st_mode is + nonzero, the S_IFMT type bits are valid, with mapped dirent.d_type data. + Of course, that happens only on file systems that provide useful + dirent.d_type data. */ +# define FTS_DEFER_STAT 0x0400 + + /* Use this flag to disable stripping of trailing slashes + from input path names during fts_open initialization. */ +# define FTS_VERBATIM 0x0800 + +# define FTS_OPTIONMASK 0x0fff /* valid user option mask */ + +# define FTS_NAMEONLY 0x1000 /* (private) child names only */ +# define FTS_STOP 0x2000 /* (private) unrecoverable error */ + int fts_options; /* fts_open options, global flags */ + + /* Map a directory's device number to a boolean. The boolean is + true if for that file system (type determined by a single fstatfs + call per FS) st_nlink can be used to calculate the number of + sub-directory entries in a directory. + Using this table is an optimization that permits us to look up + file system type on a per-inode basis at the minimal cost of + calling fstatfs only once per traversed device. */ + struct hash_table *fts_leaf_optimization_works_ht; + + union { + /* This data structure is used if FTS_TIGHT_CYCLE_CHECK is + specified. It records the directories between a starting + point and the current directory. I.e., a directory is + recorded here IFF we have visited it once, but we have not + yet completed processing of all its entries. Every time we + visit a new directory, we add that directory to this set. + When we finish with a directory (usually by visiting it a + second time), we remove it from this set. Each entry in + this data structure is a device/inode pair. This data + structure is used to detect directory cycles efficiently and + promptly even when the depth of a hierarchy is in the tens + of thousands. */ + struct hash_table *ht; + + /* FIXME: rename these two members to have the fts_ prefix */ + /* This data structure uses a lazy cycle-detection algorithm, + as done by rm via cycle-check.c. It's the default, + but it's not appropriate for programs like du. */ + struct cycle_check_state *state; + } fts_cycle; + + /* A stack of the file descriptors corresponding to the + most-recently traversed parent directories. + Currently used only in FTS_CWDFD mode. */ + I_ring fts_fd_ring; +} FTS; + +typedef struct _ftsent { + struct _ftsent *fts_cycle; /* cycle node */ + struct _ftsent *fts_parent; /* parent directory */ + struct _ftsent *fts_link; /* next file in directory */ + DIR *fts_dirp; /* Dir pointer for any directory + containing more entries than we + read at one time. */ + long fts_number; /* local numeric value */ + void *fts_pointer; /* local address value */ + char *fts_accpath; /* access file name */ + char *fts_path; /* root name; == fts_fts->fts_path */ + int fts_errno; /* errno for this node */ + int fts_symfd; /* fd for symlink */ + size_t fts_pathlen; /* strlen(fts_path) */ + + FTS *fts_fts; /* the file hierarchy itself */ + +# define FTS_ROOTPARENTLEVEL (-1) +# define FTS_ROOTLEVEL 0 + ptrdiff_t fts_level; /* depth (-1 to N) */ + + size_t fts_namelen; /* strlen(fts_name) */ + +# define FTS_D 1 /* preorder directory */ +# define FTS_DC 2 /* directory that causes cycles */ +# define FTS_DEFAULT 3 /* none of the above */ +# define FTS_DNR 4 /* unreadable directory */ +# define FTS_DOT 5 /* dot or dot-dot */ +# define FTS_DP 6 /* postorder directory */ +# define FTS_ERR 7 /* error; errno is set */ +# define FTS_F 8 /* regular file */ +# define FTS_INIT 9 /* initialized only */ +# define FTS_NS 10 /* stat(2) failed */ +# define FTS_NSOK 11 /* no stat(2) requested */ +# define FTS_SL 12 /* symbolic link */ +# define FTS_SLNONE 13 /* symbolic link without target */ +# define FTS_W 14 /* whiteout object */ + unsigned short int fts_info; /* user flags for FTSENT structure */ + +# define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */ +# define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */ + unsigned short int fts_flags; /* private flags for FTSENT structure */ + +# define FTS_AGAIN 1 /* read node again */ +# define FTS_FOLLOW 2 /* follow symbolic link */ +# define FTS_NOINSTR 3 /* no instructions */ +# define FTS_SKIP 4 /* discard node */ + unsigned short int fts_instr; /* fts_set() instructions */ + + struct stat fts_statp[1]; /* stat(2) information */ + char fts_name[__FLEXIBLE_ARRAY_MEMBER]; /* file name */ +} FTSENT; + +__BEGIN_DECLS + + _GL_ATTRIBUTE_NODISCARD +FTSENT *fts_children (FTS *, int) __THROW; + +_GL_ATTRIBUTE_NODISCARD +int fts_close (FTS *) __THROW; + +_GL_ATTRIBUTE_NODISCARD +FTS *fts_open (char * const *, int, + int (*)(const FTSENT **, const FTSENT **)) + _GL_ATTRIBUTE_DEALLOC (fts_close, 1) __THROW; + +_GL_ATTRIBUTE_NODISCARD +FTSENT *fts_read (FTS *) __THROW; + +int fts_set (FTS *, FTSENT *, int) __THROW; + +#if GNULIB_FTS_DEBUG +void fts_cross_check (FTS const *); +#endif +__END_DECLS + +#endif /* fts.h */ diff --git a/include/libgnulib/full-read.h b/include/libgnulib/full-read.h new file mode 100755 index 0000000..9d44e4f --- /dev/null +++ b/include/libgnulib/full-read.h @@ -0,0 +1,35 @@ +/* An interface to read() that reads all it is asked to read. + + Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "idx.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Read COUNT bytes at BUF to descriptor FD, retrying if interrupted + or if partial reads occur. Return the number of bytes successfully + read, setting errno if that is less than COUNT. errno = 0 means EOF. */ +extern idx_t full_read (int fd, void *buf, idx_t count); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/full-write.h b/include/libgnulib/full-write.h new file mode 100755 index 0000000..7265499 --- /dev/null +++ b/include/libgnulib/full-write.h @@ -0,0 +1,35 @@ +/* An interface to write() that writes all it is asked to write. + + Copyright (C) 2002-2003, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "idx.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Write COUNT bytes at BUF to descriptor FD, retrying if interrupted + or if partial writes occur. Return the number of bytes successfully + written, setting errno if that is less than COUNT. */ +extern idx_t full_write (int fd, const void *buf, idx_t count); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/fwritable.h b/include/libgnulib/fwritable.h new file mode 100755 index 0000000..0121b63 --- /dev/null +++ b/include/libgnulib/fwritable.h @@ -0,0 +1,49 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_PURE, HAVE___FWRITABLE, HAVE_STDIO_EXT_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Return true if the stream STREAM supports writing, false if it supports + only reading. + STREAM must not be wide-character oriented. + The result doesn't change until the stream is closed or re-opened. */ + +#if HAVE___FWRITABLE +/* glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 23, musl libc */ + +# if HAVE_STDIO_EXT_H +# include +# endif +# define fwritable(stream) (__fwritable (stream) != 0) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern bool fwritable (FILE *stream) _GL_ATTRIBUTE_PURE; + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/fwriteerror.h b/include/libgnulib/fwriteerror.h new file mode 100755 index 0000000..fd4842f --- /dev/null +++ b/include/libgnulib/fwriteerror.h @@ -0,0 +1,62 @@ +/* Detect write error on a stream. + Copyright (C) 2003, 2005-2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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 3 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, see . */ + +/* There are two approaches for detecting a write error on a stream opened + for writing: + + (a) Test the return value of every fwrite() or fprintf() call, and react + immediately. + (b) Just before fclose(), test the error indicator in the stream and + the return value of the final fclose() call. + + The benefit of (a) is that non file related errors (such that ENOMEM during + fprintf) and temporary error conditions can be diagnosed accurately. + + A theoretical benefit of (a) is also that, on POSIX systems, in the case of + an ENOSPC error, errno is set and can be used by error() to provide a more + accurate error message. But in practice, this benefit is not big because + users can easily figure out by themselves why a file cannot be written to, + and furthermore the function fwriteerror() can provide errno as well. + + The big drawback of (a) is extensive error checking code: Every function + which does stream output must return an error indicator. + + This file provides support for (b). */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Write out the not yet written buffered contents of the stream FP, close + the stream FP, and test whether some error occurred on the stream FP. + FP must be a stream opened for writing. + Return 0 if no error occurred and fclose (fp) succeeded. + Return -1 and set errno if there was an error. The errno value will be 0 + if the cause of the error cannot be determined. + For any given stream FP other than stdout, fwriteerror (FP) may only be + called once. */ +extern int fwriteerror (FILE *fp); + +/* Likewise, but don't consider it an error if FP has an invalid file + descriptor and no output was done to FP. */ +extern int fwriteerror_no_ebadf (FILE *fp); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/fwriting.h b/include/libgnulib/fwriting.h new file mode 100755 index 0000000..e513759 --- /dev/null +++ b/include/libgnulib/fwriting.h @@ -0,0 +1,60 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_PURE, HAVE___FWRITING, HAVE_STDIO_EXT_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Return true if the stream STREAM is opened write-only or + append-only, or if the last operation on the stream was a write + operation. Return false if the stream is opened read-only, or if + it supports reading and there is no current write operation (such + as fputc). + + freading and fwriting will never both be true. If STREAM supports + both reads and writes, then: + - both freading and fwriting might be false when the stream is first + opened, after read encounters EOF, or after fflush, + - freading might be false or true and fwriting might be false + after repositioning (such as fseek, fsetpos, or rewind), + depending on the underlying implementation. + + STREAM must not be wide-character oriented. */ + +#if HAVE___FWRITING +/* glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 29, musl libc */ + +# if HAVE_STDIO_EXT_H +# include +# endif +# define fwriting(stream) (__fwriting (stream) != 0) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern bool fwriting (FILE *stream) _GL_ATTRIBUTE_PURE; + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/gc.h b/include/libgnulib/gc.h new file mode 100755 index 0000000..51ad0dd --- /dev/null +++ b/include/libgnulib/gc.h @@ -0,0 +1,350 @@ +/* gc.h --- Header file for implementation agnostic crypto wrapper API. + * Copyright (C) 2002-2005, 2007-2008, 2011-2024 Free Software Foundation, Inc. + * + * This file is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. + * + * This file 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + */ + +#ifndef _GL_GC_H +#define _GL_GC_H + +/* This file uses _GL_ATTRIBUTE_CONST. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +/* Get size_t. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +enum Gc_rc +{ + GC_OK = 0, + GC_MALLOC_ERROR, + GC_INIT_ERROR, + GC_RANDOM_ERROR, + GC_INVALID_CIPHER, + GC_INVALID_HASH, + GC_PKCS5_INVALID_ITERATION_COUNT, + GC_PKCS5_INVALID_DERIVED_KEY_LENGTH, + GC_PKCS5_DERIVED_KEY_TOO_LONG +}; +typedef enum Gc_rc Gc_rc; + +/* Hash types. */ +enum Gc_hash +{ + GC_MD4, + GC_MD5, + GC_SHA1, + GC_MD2, + GC_RMD160, + GC_SHA256, + GC_SHA384, + GC_SHA512, + GC_SHA224, + GC_SM3 +}; +typedef enum Gc_hash Gc_hash; + +enum Gc_hash_mode +{ + GC_NULL, + GC_HMAC +}; +typedef enum Gc_hash_mode Gc_hash_mode; + +typedef void *gc_hash_handle; + +#define GC_MD2_DIGEST_SIZE 16 +#define GC_MD4_DIGEST_SIZE 16 +#define GC_MD5_DIGEST_SIZE 16 +#define GC_RMD160_DIGEST_SIZE 20 +#define GC_SHA1_DIGEST_SIZE 20 +#define GC_SHA256_DIGEST_SIZE 32 +#define GC_SHA384_DIGEST_SIZE 48 +#define GC_SHA512_DIGEST_SIZE 64 +#define GC_SHA224_DIGEST_SIZE 24 +#define GC_SM3_DIGEST_SIZE 32 + +#define GC_MAX_DIGEST_SIZE 64 + +/* Cipher types. */ +enum Gc_cipher +{ + GC_AES128, + GC_AES192, + GC_AES256, + GC_3DES, + GC_DES, + GC_ARCFOUR128, + GC_ARCFOUR40, + GC_ARCTWO40, + GC_CAMELLIA128, + GC_CAMELLIA256 +}; +typedef enum Gc_cipher Gc_cipher; + +enum Gc_cipher_mode +{ + GC_ECB, + GC_CBC, + GC_STREAM +}; +typedef enum Gc_cipher_mode Gc_cipher_mode; + +typedef void *gc_cipher_handle; + +/* Call before respectively after any other functions. */ +extern Gc_rc gc_init (void); +extern void gc_done (void); + +/* Memory allocation (avoid). */ +typedef void *(*gc_malloc_t) (size_t n); +typedef int (*gc_secure_check_t) (const void *); +typedef void *(*gc_realloc_t) (void *p, size_t n); +typedef void (*gc_free_t) (void *); +extern void gc_set_allocators (gc_malloc_t func_malloc, + gc_malloc_t secure_malloc, + gc_secure_check_t secure_check, + gc_realloc_t func_realloc, + gc_free_t func_free); + +/* Randomness. */ +extern Gc_rc gc_nonce (char *data, size_t datalen); +extern Gc_rc gc_pseudo_random (char *data, size_t datalen); +extern Gc_rc gc_random (char *data, size_t datalen); + +/* Ciphers. */ +extern Gc_rc gc_cipher_open (Gc_cipher cipher, Gc_cipher_mode mode, + gc_cipher_handle *outhandle); +extern Gc_rc gc_cipher_setkey (gc_cipher_handle handle, + size_t keylen, const char *key); +extern Gc_rc gc_cipher_setiv (gc_cipher_handle handle, + size_t ivlen, const char *iv); +extern Gc_rc gc_cipher_encrypt_inline (gc_cipher_handle handle, + size_t len, char *data); +extern Gc_rc gc_cipher_decrypt_inline (gc_cipher_handle handle, + size_t len, char *data); +extern Gc_rc gc_cipher_close (gc_cipher_handle handle); + +/* Hashes. */ + +extern Gc_rc gc_hash_open (Gc_hash hash, Gc_hash_mode mode, + gc_hash_handle *outhandle); +extern Gc_rc gc_hash_clone (gc_hash_handle handle, gc_hash_handle *outhandle); +extern size_t gc_hash_digest_length (Gc_hash hash) + _GL_ATTRIBUTE_CONST; +extern void gc_hash_hmac_setkey (gc_hash_handle handle, + size_t len, const char *key); +extern void gc_hash_write (gc_hash_handle handle, + size_t len, const char *data); +extern const char *gc_hash_read (gc_hash_handle handle); +extern void gc_hash_close (gc_hash_handle handle); + +/* Compute a hash value over buffer IN of INLEN bytes size using the + algorithm HASH, placing the result in the pre-allocated buffer OUT. + The required size of OUT depends on HASH, and is generally + GC__DIGEST_SIZE. For example, for GC_MD5 the output buffer + must be 16 bytes. The return value is 0 (GC_OK) on success, or + another Gc_rc error code. */ +extern Gc_rc +gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *out); + +/* One-call interface. */ +extern Gc_rc gc_md2 (const void *in, size_t inlen, void *resbuf); +extern Gc_rc gc_md4 (const void *in, size_t inlen, void *resbuf); +extern Gc_rc gc_md5 (const void *in, size_t inlen, void *resbuf); +extern Gc_rc gc_sha1 (const void *in, size_t inlen, void *resbuf); +extern Gc_rc gc_sha256 (const void *in, size_t inlen, void *resbuf); +extern Gc_rc gc_sha512 (const void *in, size_t inlen, void *resbuf); +extern Gc_rc gc_sm3 (const void *in, size_t inlen, void *resbuf); +extern Gc_rc gc_hmac_md5 (const void *key, size_t keylen, + const void *in, size_t inlen, char *resbuf); +extern Gc_rc gc_hmac_sha1 (const void *key, size_t keylen, + const void *in, size_t inlen, char *resbuf); +extern Gc_rc gc_hmac_sha256 (const void *key, size_t keylen, + const void *in, size_t inlen, char *resbuf); +extern Gc_rc gc_hmac_sha512 (const void *key, size_t keylen, + const void *in, size_t inlen, char *resbuf); + +/* Derive cryptographic keys using PKCS#5 PBKDF2 (RFC 2898) from a + password P of length PLEN, with salt S of length SLEN, placing the + result in pre-allocated buffer DK of length DKLEN. The PRF is hard + coded to be HMAC with HASH. An iteration count is specified in C + (> 0), where a larger value means this function take more time + (typical iteration counts are 1000-20000). This function + "stretches" the key to be exactly dkLen bytes long. GC_OK is + returned on success, otherwise a Gc_rc error code is returned. */ +extern Gc_rc +gc_pbkdf2_hmac (Gc_hash hash, + const char *P, size_t Plen, + const char *S, size_t Slen, + unsigned int c, char *restrict DK, size_t dkLen); + +extern Gc_rc +gc_pbkdf2_sha1 (const char *P, size_t Plen, + const char *S, size_t Slen, + unsigned int c, char *restrict DK, size_t dkLen); + +/* + TODO: + + From: Simon Josefsson + Subject: Re: generic crypto + Newsgroups: gmane.comp.lib.gnulib.bugs + Cc: bug-gnulib@gnu.org + Date: Fri, 07 Oct 2005 12:50:57 +0200 + Mail-Copies-To: nobody + + Paul Eggert writes: + + > Simon Josefsson writes: + > + >> * Perhaps the /dev/?random reading should be separated into a separate + >> module? It might be useful outside of the gc layer too. + > + > Absolutely. I've been meaning to do that for months (for a "shuffle" + > program I want to add to coreutils), but hadn't gotten around to it. + > It would have to be generalized a bit. I'd like to have the file + > descriptor cached, for example. + + I'll write a separate module for that part. + + I think we should even add a good PRNG that is re-seeded from + /dev/?random frequently. GnuTLS can need a lot of random data on a + big server, more than /dev/random can supply. And /dev/urandom might + not be strong enough. Further, the security of /dev/?random can also + be questionable. + + >> I'm also not sure about the names of those functions, they suggest + >> a more higher-level API than what is really offered (i.e., the + >> names "nonce" and "pseudo_random" and "random" imply certain + >> cryptographic properties). + > + > Could you expand a bit more on that? What is the relationship between + > nonce/pseudorandom/random and the /dev/ values you are using? + + There is none, that is the problem. + + Applications generally need different kind of "random" numbers. + Sometimes they just need some random data and doesn't care whether it + is possible for an attacker to compute the string (aka a "nonce"). + Sometimes they need data that is very difficult to compute (i.e., + computing it require inverting SHA1 or similar). Sometimes they need + data that is not possible to compute, i.e., it wants real entropy + collected over time on the system. Collecting the last kind of random + data is very expensive, so it must not be used too often. The second + kind of random data ("pseudo random") is typically generated by + seeding a good PRNG with a couple of hundred bytes of real entropy + from the "real random" data pool. The "nonce" is usually computed + using the PRNG as well, because PRNGs are usually fast. + + Pseudo-random data is typically used for session keys. Strong random + data is often used to generate long-term keys (e.g., private RSA + keys). + + Of course, there are many subtleties. There are several different + kind of nonce:s. Sometimes a nonce is just an ever-increasing + integer, starting from 0. Sometimes it is assumed to be unlikely to + be the same as previous nonces, but without a requirement that the + nonce is possible to guess. MD5(system clock) would thus suffice, if + it isn't called too often. You can guess what the next value will be, + but it will always be different. + + The problem is that /dev/?random doesn't offer any kind of semantic + guarantees. But applications need an API that make that promise. + + I think we should do this in several steps: + + 1) Write a module that can read from /dev/?random. + + 2) Add a module for a known-good PRNG suitable for random number + generation, that can be continuously re-seeded. + + 3) Add a high-level module that provide various different randomness + functions. One for nonces, perhaps even different kind of nonces, + one for pseudo random data, and one for strong random data. It is + not clear whether we can hope to achieve the last one in a portable + way. + + Further, it would be useful to allow users to provide their own + entropy source as a file, used to seed the PRNG or initialize the + strong randomness pool. This is used on embedded platforms that + doesn't have enough interrupts to hope to generate good random data. + + > For example, why not use OpenBSD's /dev/arandom? + + I don't trust ARC4. For example, recent cryptographic efforts + indicate that you must throw away the first 512 bytes generated from + the PRNG for it to be secure. I don't know whether OpenBSD do this. + Further, I recall some eprint paper on RC4 security that didn't + inspire confidence. + + While I trust the random devices in OpenBSD more than + Solaris/AIX/HPUX/etc, I think that since we need something better on + Solaris/AIX/HPUX we'd might as well use it on OpenBSD or even Linux + too. + + > Here is one thought. The user could specify a desired quality level + > range, and the implementation then would supply random data that is at + > least as good as the lower bound of the range. I.e., ihe + > implementation refuses to produce any random data if it can't generate + > data that is at least as good as the lower end of the range. The + > upper bound of the range is advice from the user not to be any more + > expensive than that, but the implementation can ignore the advice if + > it doesn't have anything cheaper. + + I'm not sure this is a good idea. Users can't really be expected to + understand this. Further, applications need many different kind of + random data. Selecting the randomness level for each by the user will + be too complicated. + + I think it is better if the application decide, from its cryptographic + requirement, what entropy quality it require, and call the proper API. + Meeting the implied semantic properties should be the job for gnulib. + + >> Perhaps gc_dev_random and gc_dev_urandom? + > + > To some extent. I'd rather insulate the user from the details of + > where the random numbers come from. On the other hand we need to + > provide a way for applications to specify a file that contains + > random bits, so that people can override the defaults. + + Agreed. + + This may require some thinking before it is finalized. Is it ok to + install the GC module as-is meanwhile? Then I can continue to add the + stuff that GnuTLS need, and then come back to re-working the + randomness module. That way, we have two different projects that use + the code. GnuTLS includes the same randomness code that was in GNU + SASL and that is in the current gc module. I feel much more + comfortable working in small steps at a time, rather then working on + this for a long time in gnulib and only later integrate the stuff in + GnuTLS. + + Thanks, + Simon + */ + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_GC_H */ diff --git a/include/libgnulib/gcd.h b/include/libgnulib/gcd.h new file mode 100755 index 0000000..a35831c --- /dev/null +++ b/include/libgnulib/gcd.h @@ -0,0 +1,34 @@ +/* Arithmetic. + Copyright (C) 2001-2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _GCD_H +#define _GCD_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return the greatest common divisor of a > 0 and b > 0. */ +extern unsigned long gcd (unsigned long a, unsigned long b); + + +#ifdef __cplusplus +} +#endif + +#endif /* _GCD_H */ diff --git a/include/libgnulib/get_ppid_of.h b/include/libgnulib/get_ppid_of.h new file mode 100755 index 0000000..89bce8f --- /dev/null +++ b/include/libgnulib/get_ppid_of.h @@ -0,0 +1,35 @@ +/* Determine the parent process of a given process. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2019. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GET_PPID_OF_H +#define _GET_PPID_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Returns the process id of the parent process of the given process, + or 0 if it cannot be determined. */ +extern pid_t get_ppid_of (pid_t pid); + +#ifdef __cplusplus +} +#endif + +#endif /* _GET_PPID_OF_H */ diff --git a/include/libgnulib/get_progname_of.h b/include/libgnulib/get_progname_of.h new file mode 100755 index 0000000..76e21df --- /dev/null +++ b/include/libgnulib/get_progname_of.h @@ -0,0 +1,43 @@ +/* Determine the program name of a given process. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2019. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GET_PROGNAME_OF_H +#define _GET_PROGNAME_OF_H + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Returns the base name of the program that executes the given process, + possibly truncated, as a freshly allocated string, or NULL if it cannot + be determined. */ +extern char *get_progname_of (pid_t pid) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#ifdef __cplusplus +} +#endif + +#endif /* _GET_PROGNAME_OF_H */ diff --git a/include/libgnulib/gethrxtime.h b/include/libgnulib/gethrxtime.h new file mode 100755 index 0000000..244337a --- /dev/null +++ b/include/libgnulib/gethrxtime.h @@ -0,0 +1,58 @@ +/* gethrxtime -- get high resolution real time + + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#ifndef GETHRXTIME_H_ +#define GETHRXTIME_H_ 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, HAVE_ARITHMETIC_HRTIME_T, + HAVE_DECL_GETHRTIME. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "xtime.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef GETHRXTIME_INLINE +# define GETHRXTIME_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Get the current time, as a count of the number of nanoseconds since + an arbitrary epoch (e.g., the system boot time). Prefer a + high-resolution clock that is not subject to resetting or + drifting. */ + +#if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME +# include +GETHRXTIME_INLINE xtime_t gethrxtime (void) { return gethrtime (); } +# else +xtime_t gethrxtime (void); +#endif + +_GL_INLINE_HEADER_END + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/getndelim2.h b/include/libgnulib/getndelim2.h new file mode 100755 index 0000000..34cfa2d --- /dev/null +++ b/include/libgnulib/getndelim2.h @@ -0,0 +1,52 @@ +/* getndelim2 - Read a line from a stream, stopping at one of 2 delimiters, + with bounded memory allocation. + + Copyright (C) 2003-2004, 2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef GETNDELIM2_H +#define GETNDELIM2_H 1 + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define GETNLINE_NO_LIMIT ((size_t) -1) + +/* Read into a buffer *LINEPTR returned from malloc (or NULL), + pointing to *LINESIZE bytes of space. Store the input bytes + starting at *LINEPTR + OFFSET, and null-terminate them. Reallocate + the buffer as necessary, but if NMAX is not GETNLINE_NO_LIMIT + then do not allocate more than NMAX bytes; if the line is longer + than that, read and discard the extra bytes. Stop reading after + the first occurrence of DELIM1 or DELIM2, whichever comes first; + a delimiter equal to EOF stands for no delimiter. Read the + input bytes from STREAM. + Return the number of bytes read and stored at *LINEPTR + OFFSET (not + including the NUL terminator), or -1 on error or EOF. */ +extern ssize_t getndelim2 (char **lineptr, size_t *linesize, size_t offset, + size_t nmax, int delim1, int delim2, + FILE *stream); + + +#ifdef __cplusplus +} +#endif + +#endif /* GETNDELIM2_H */ diff --git a/include/libgnulib/getnline.h b/include/libgnulib/getnline.h new file mode 100755 index 0000000..d16c6ae --- /dev/null +++ b/include/libgnulib/getnline.h @@ -0,0 +1,57 @@ +/* getnline - Read a line from a stream, with bounded memory allocation. + + Copyright (C) 2003-2004, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef GETNLINE_H +#define GETNLINE_H 1 + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define GETNLINE_NO_LIMIT ((size_t) -1) + +/* Read a line, up to the next newline, from STREAM, and store it in *LINEPTR. + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. Reallocation is limited to + NMAX bytes; if the line is longer than that, the extra bytes are read but + thrown away. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +extern ssize_t getnline (char **lineptr, size_t *linesize, size_t nmax, + FILE *stream); + +/* Read a line, up to the next occurrence of DELIMITER, from STREAM, and store + it in *LINEPTR. + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. Reallocation is limited to + NMAX bytes; if the line is longer than that, the extra bytes are read but + thrown away. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +extern ssize_t getndelim (char **lineptr, size_t *linesize, size_t nmax, + int delimiter, FILE *stream); + + +#ifdef __cplusplus +} +#endif + +#endif /* GETNLINE_H */ diff --git a/include/libgnulib/getopt-core.h b/include/libgnulib/getopt-core.h new file mode 100755 index 0000000..12d09a2 --- /dev/null +++ b/include/libgnulib/getopt-core.h @@ -0,0 +1,96 @@ +/* Declarations for getopt (basic, portable features only). + Copyright (C) 1989-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library and is also part of gnulib. + Patches to this file should be submitted to both projects. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _GETOPT_CORE_H +#define _GETOPT_CORE_H 1 + +/* This header should not be used directly; include getopt.h or + unistd.h instead. Unlike most bits headers, it does not have + a protective #error, because the guard macro for getopt.h in + gnulib is not fixed. */ + +__BEGIN_DECLS + +/* For communication from 'getopt' to the caller. + When 'getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when 'ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to 'getopt'. + + On entry to 'getopt', zero means this is the first call; initialize. + + When 'getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, 'optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message 'getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, 'optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in 'optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU 'getopt'. + + The argument '--' causes premature termination of argument + scanning, explicitly telling 'getopt' that there are no more + options. + + If OPTS begins with '-', then non-option arguments are treated as + arguments to the option '\1'. This behavior is specific to the GNU + 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in + the environment, then do not permute arguments. + + For standards compliance, the 'argv' argument has the type + char *const *, but this is inaccurate; if argument permutation is + enabled, the argv array (not the strings it points to) must be + writable. */ + +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) + __THROW _GL_ARG_NONNULL ((2, 3)); + +__END_DECLS + +#endif /* _GETOPT_CORE_H */ diff --git a/include/libgnulib/getopt-ext.h b/include/libgnulib/getopt-ext.h new file mode 100755 index 0000000..e4b499d --- /dev/null +++ b/include/libgnulib/getopt-ext.h @@ -0,0 +1,77 @@ +/* Declarations for getopt (GNU extensions). + Copyright (C) 1989-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library and is also part of gnulib. + Patches to this file should be submitted to both projects. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _GETOPT_EXT_H +#define _GETOPT_EXT_H 1 + +/* This header should not be used directly; include getopt.h instead. + Unlike most bits headers, it does not have a protective #error, + because the guard macro for getopt.h in gnulib is not fixed. */ + +__BEGIN_DECLS + +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of 'struct option' terminated by an element containing a name which is + zero. + + The field 'has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field 'flag' is not NULL, it points to a variable that is set + to the value given in the field 'val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an 'int' to + a compiled-in constant, such as set a value from 'optarg', set the + option's 'flag' field to zero and its 'val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero 'flag' field, 'getopt' + returns the contents of the 'val' field. */ + +struct option +{ + const char *name; + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the 'has_arg' field of 'struct option'. */ + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW _GL_ARG_NONNULL ((2, 3)); +extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW _GL_ARG_NONNULL ((2, 3)); + +__END_DECLS + +#endif /* _GETOPT_EXT_H */ diff --git a/include/libgnulib/getopt-pfx-core.h b/include/libgnulib/getopt-pfx-core.h new file mode 100755 index 0000000..df2cb18 --- /dev/null +++ b/include/libgnulib/getopt-pfx-core.h @@ -0,0 +1,73 @@ +/* getopt (basic, portable features) gnulib wrapper header. + Copyright (C) 1989-2024 Free Software Foundation, Inc. + This file is part of gnulib. + Unlike most of the getopt implementation, it is NOT shared + with the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GETOPT_PFX_CORE_H +#define _GETOPT_PFX_CORE_H 1 + +/* This header should not be used directly; include getopt.h or + unistd.h instead. It does not have a protective #error, because + the guard macro for getopt.h in gnulib is not fixed. */ + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in getopt-core.h and getopt-ext.h. Systematically + rename identifiers so that they do not collide with the system + functions and variables. Renaming avoids problems with some + compilers and linkers. */ +#ifdef __GETOPT_PREFIX + +/* Include platform-dependent header files that may declare getopt() and + friends. */ +# if defined _AIX || defined __hpux || defined __sun || defined __QNX__ +# include +# endif + +# ifndef __GETOPT_ID +# define __GETOPT_CONCAT(x, y) x ## y +# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) +# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) +# endif +# undef getopt +# undef optarg +# undef opterr +# undef optind +# undef optopt +# define getopt __GETOPT_ID (getopt) +# define optarg __GETOPT_ID (optarg) +# define opterr __GETOPT_ID (opterr) +# define optind __GETOPT_ID (optind) +# define optopt __GETOPT_ID (optopt) + +/* Work around a problem on macOS, which declares getopt with a + trailing __DARWIN_ALIAS(getopt) that would expand to something like + __asm("_" "rpl_getopt" "$UNIX2003") were it not for the following + hack to suppress the macOS declaration . */ +# ifdef __APPLE__ +# define _GETOPT +# endif + +/* The system's getopt.h may have already included getopt-core.h to + declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that + getopt-core.h declares them with prefixes. */ +# undef _GETOPT_CORE_H +#endif + +#include + +#endif /* _GETOPT_PFX_CORE_H */ diff --git a/include/libgnulib/getopt-pfx-ext.h b/include/libgnulib/getopt-pfx-ext.h new file mode 100755 index 0000000..f001c11 --- /dev/null +++ b/include/libgnulib/getopt-pfx-ext.h @@ -0,0 +1,70 @@ +/* getopt (GNU extensions) gnulib wrapper header. + Copyright (C) 1989-2024 Free Software Foundation, Inc. + This file is part of gnulib. + Unlike most of the getopt implementation, it is NOT shared + with the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GETOPT_PFX_EXT_H +#define _GETOPT_PFX_EXT_H 1 + +/* This header should not be used directly; include getopt.h instead. + It does not have a protective #error, because the guard macro for + getopt.h in gnulib is not fixed. */ + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in getopt-core.h and getopt-ext.h. Systematically + rename identifiers so that they do not collide with the system + functions and variables. Renaming avoids problems with some + compilers and linkers. */ +#ifdef __GETOPT_PREFIX +# ifndef __GETOPT_ID +# define __GETOPT_CONCAT(x, y) x ## y +# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) +# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) +# endif +# undef getopt_long +# undef getopt_long_only +# undef option +# undef _getopt_internal +# define getopt_long __GETOPT_ID (getopt_long) +# define getopt_long_only __GETOPT_ID (getopt_long_only) +# define option __GETOPT_ID (option) +# define _getopt_internal __GETOPT_ID (getopt_internal) + +/* The system's getopt.h may have already included getopt-ext.h to + declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that + getopt-ext.h declares them with prefixes. */ +# undef _GETOPT_EXT_H +#endif + +/* Standalone applications get correct prototypes for getopt_long and + getopt_long_only; they declare "char **argv". For backward + compatibility with old applications, if __GETOPT_PREFIX is not + defined, we supply GNU-libc-compatible, but incorrect, prototypes + using "char *const *argv". (GNU libc is stuck with the incorrect + prototypes, as they are baked into older versions of LSB.) */ +#ifndef __getopt_argv_const +# if defined __GETOPT_PREFIX +# define __getopt_argv_const /* empty */ +# else +# define __getopt_argv_const const +# endif +#endif + +#include + +#endif /* _GETOPT_PFX_EXT_H */ diff --git a/include/libgnulib/getopt_int.h b/include/libgnulib/getopt_int.h new file mode 100755 index 0000000..c00c0b6 --- /dev/null +++ b/include/libgnulib/getopt_int.h @@ -0,0 +1,118 @@ +/* Internal declarations for getopt. + Copyright (C) 1989-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library and is also part of gnulib. + Patches to this file should be submitted to both projects. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _GETOPT_INT_H +#define _GETOPT_INT_H 1 + +#include + +extern int _getopt_internal (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, int __posixly_correct); + + +/* Reentrant versions which can handle parsing multiple argument + vectors at the same time. */ + +/* Describe how to deal with options that follow non-option ARGV-elements. + + REQUIRE_ORDER means don't recognize them as options; stop option + processing when the first non-option is seen. This is what POSIX + specifies should happen. + + PERMUTE means permute the contents of ARGV as we scan, so that + eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written + to expect this. + + RETURN_IN_ORDER is an option available to programs that were + written to expect options and other ARGV-elements in any order + and that care about the ordering of the two. We describe each + non-option ARGV-element as if it were the argument of an option + with character code 1. + + The special argument '--' forces an end of option-scanning regardless + of the value of 'ordering'. In the case of RETURN_IN_ORDER, only + '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ + +enum __ord + { + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER + }; + +/* Data type for reentrant functions. */ +struct _getopt_data +{ + /* These have exactly the same meaning as the corresponding global + variables, except that they are used for the reentrant + versions of getopt. */ + int optind; + int opterr; + int optopt; + char *optarg; + + /* Internal members. */ + + /* True if the internal members have been initialized. */ + int __initialized; + + /* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + char *__nextchar; + + /* See __ord above. */ + enum __ord __ordering; + + /* Handle permutation of arguments. */ + + /* Describe the part of ARGV that contains non-options that have + been skipped. 'first_nonopt' is the index in ARGV of the first + of them; 'last_nonopt' is the index after the last of them. */ + + int __first_nonopt; + int __last_nonopt; +}; + +/* The initializer is necessary to set OPTIND and OPTERR to their + default values and to clear the initialization flag. */ +#define _GETOPT_DATA_INITIALIZER { 1, 1 } + +extern int _getopt_internal_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, struct _getopt_data *__data, + int __posixly_correct); + +extern int _getopt_long_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + struct _getopt_data *__data); + +extern int _getopt_long_only_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, + int *__longind, + struct _getopt_data *__data); + +#endif /* getopt_int.h */ diff --git a/include/libgnulib/getpass.h b/include/libgnulib/getpass.h new file mode 100755 index 0000000..b897e3b --- /dev/null +++ b/include/libgnulib/getpass.h @@ -0,0 +1,21 @@ +/* Read a password from /dec/tty. + + Copyright (C) 2004-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Obsolete; consider using unistd.h instead. */ + +/* Get getpass declaration, if available. */ +#include diff --git a/include/libgnulib/getprogname.h b/include/libgnulib/getprogname.h new file mode 100755 index 0000000..bee1c1a --- /dev/null +++ b/include/libgnulib/getprogname.h @@ -0,0 +1,26 @@ +/* Program name management. + Copyright (C) 2016-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_GETPROGNAME_H +#define _GL_GETPROGNAME_H + +#include + +#if __GNUC__ || (__clang_major__ >= 4) +# warning "The include file getprogname.h is deprecated. Use instead." +#endif + +#endif diff --git a/include/libgnulib/gettext.h b/include/libgnulib/gettext.h new file mode 100755 index 0000000..39d5ae4 --- /dev/null +++ b/include/libgnulib/gettext.h @@ -0,0 +1,300 @@ +/* Convenience header for conditional use of GNU . + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option + or through "#define ENABLE NLS 0" before including this file. */ +#if defined ENABLE_NLS && ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include + +/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by + the gettext() and ngettext() macros. This is an alternative to calling + textdomain(), and is useful for libraries. */ +# ifdef DEFAULT_TEXT_DOMAIN +# undef gettext +# define gettext(Msgid) \ + dgettext (DEFAULT_TEXT_DOMAIN, Msgid) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) +# endif + +#else + +/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which + chokes if dcgettext is defined as a macro. So include it now, to make + later inclusions of a NOP. We don't include + as well because people using "gettext.h" will not include , + and also including would fail on SunOS 4, whereas + is OK. */ +#if defined(__sun) +# include +#endif + +/* Many header files from the libstdc++ coming with g++ 3.3 or newer include + , which chokes if dcgettext is defined as a macro. So include + it now, to make later inclusions of a NOP. */ +#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) +# include +# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H +# include +# endif +#endif + +/* Disabled NLS. + The casts to 'const char *' serve the purpose of producing warnings + for invalid uses of the value returned from these functions. + On pre-ANSI systems without 'const', the config.h file is supposed to + contain "#define const". */ +# undef gettext +# define gettext(Msgid) ((const char *) (Msgid)) +# undef dgettext +# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) +# undef dcgettext +# define dcgettext(Domainname, Msgid, Category) \ + ((void) (Category), dgettext (Domainname, Msgid)) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 \ + ? ((void) (Msgid2), (const char *) (Msgid1)) \ + : ((void) (Msgid1), (const char *) (Msgid2))) +# undef dngettext +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) +# undef dcngettext +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) +# undef textdomain +# define textdomain(Domainname) ((const char *) (Domainname)) +# undef bindtextdomain +# define bindtextdomain(Domainname, Dirname) \ + ((void) (Domainname), (const char *) (Dirname)) +# undef bind_textdomain_codeset +# define bind_textdomain_codeset(Domainname, Codeset) \ + ((void) (Domainname), (const char *) (Codeset)) + +#endif + +/* Prefer gnulib's setlocale override over libintl's setlocale override. */ +#ifdef GNULIB_defined_setlocale +# undef setlocale +# define setlocale rpl_setlocale +#endif + +/* A pseudo function call that serves as a marker for the automated + extraction of messages, but does not call gettext(). The run-time + translation is done at a different place in the code. + The argument, String, should be a literal string. Concatenated strings + and other string expressions won't work. + The macro's expansion is not parenthesized, so that it is suitable as + initializer for static 'char[]' or 'const char[]' variables. */ +#define gettext_noop(String) String + +/* The separator between msgctxt and msgid in a .mo file. */ +#define GETTEXT_CONTEXT_GLUE "\004" + +/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a + MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be + short and rarely need to change. + The letter 'p' stands for 'particular' or 'special'. */ +#ifdef DEFAULT_TEXT_DOMAIN +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#else +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#endif +#define dpgettext(Domainname, Msgctxt, Msgid) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) +#ifdef DEFAULT_TEXT_DOMAIN +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#else +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#endif +#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) + +#if defined __GNUC__ || defined __clang__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +pgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + int category) +{ + const char *translation = dcgettext (domain, msg_ctxt_id, category); + if (translation == msg_ctxt_id) + return msgid; + else + return translation; +} + +#if defined __GNUC__ || defined __clang__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +npgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + const char *translation = + dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + if (translation == msg_ctxt_id || translation == msgid_plural) + return (n == 1 ? msgid : msgid_plural); + else + return translation; +} + +/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID + can be arbitrary expressions. But for string literals these macros are + less efficient than those above. */ + +#include + +/* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported. + This relates to the -Wvla and -Wvla-larger-than warnings, enabled in + the default GCC many warnings set. This allows programs to disable use + of VLAs, which may be unintended, or may be awkward to support portably, + or may have security implications due to non-deterministic stack usage. */ + +#if (!defined GNULIB_NO_VLA \ + && defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ + && !defined __STDC_NO_VLA__) +# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 +#else +# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 +#endif + +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS +#include +#endif + +#define pgettext_expr(Msgctxt, Msgid) \ + dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) +#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ + dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) + +#if defined __GNUC__ || defined __clang__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + int found_translation; + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcgettext (domain, msg_ctxt_id, category); + found_translation = (translation != msg_ctxt_id); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (found_translation) + return translation; + } + return msgid; +} + +#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) + +#if defined __GNUC__ || defined __clang__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcnpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + int found_translation; + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (found_translation) + return translation; + } + return (n == 1 ? msgid : msgid_plural); +} + +#endif /* _LIBGETTEXT_H */ diff --git a/include/libgnulib/getugroups.h b/include/libgnulib/getugroups.h new file mode 100755 index 0000000..c5cfd31 --- /dev/null +++ b/include/libgnulib/getugroups.h @@ -0,0 +1,30 @@ +/* Get a list of group IDs associated with a specified user ID. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +int getugroups (int maxcount, gid_t *grouplist, char const *username, + gid_t gid); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/gl_anyavltree_list1.h b/include/libgnulib/gl_anyavltree_list1.h new file mode 100755 index 0000000..3fb993e --- /dev/null +++ b/include/libgnulib/gl_anyavltree_list1.h @@ -0,0 +1,70 @@ +/* Sequential list data type implemented by a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_avltree_list.c and gl_avltreehash_list.c. */ + +/* An AVL tree is a binary tree where + 1. The height of each node is calculated as + heightof(node) = 1 + max (heightof(node.left), heightof(node.right)). + 2. The heights of the subtrees of each node differ by at most 1: + | heightof(right) - heightof(left) | <= 1. + 3. The index of the elements in the node.left subtree are smaller than + the index of node. + The index of the elements in the node.right subtree are larger than + the index of node. + */ + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Concrete list node implementation, valid for this file only. */ +struct gl_list_node_impl +{ +#if WITH_HASHTABLE + struct gl_hash_entry h; /* hash table entry fields; must be first */ +#endif + struct gl_list_node_impl *left; /* left branch, or NULL */ + struct gl_list_node_impl *right; /* right branch, or NULL */ + /* Parent pointer, or NULL. The parent pointer is not needed for most + operations. It is needed so that a gl_list_node_t can be returned + without memory allocation, on which the functions gl_list_remove_node, + gl_list_add_before, gl_list_add_after can be implemented. */ + struct gl_list_node_impl *parent; + int balance; /* heightof(right) - heightof(left), + always = -1 or 0 or 1 */ + size_t branch_size; /* number of nodes in this branch, + = branchsize(left)+branchsize(right)+1 */ + const void *value; +}; + +/* Concrete gl_list_impl type, valid for this file only. */ +struct gl_list_impl +{ + struct gl_list_impl_base base; +#if WITH_HASHTABLE + /* A hash table: managed as an array of collision lists. */ + struct gl_hash_entry **table; + size_t table_size; +#endif + struct gl_list_node_impl *root; /* root node or NULL */ +}; + +/* An AVL tree of height h has at least F_(h+2) - 1 [Fibonacci number] and at + most 2^h - 1 elements. So, h <= 84 (because a tree of height h >= 85 would + have at least F_87 - 1 elements, and because even on 64-bit machines, + sizeof (gl_list_node_impl) * (F_87 - 1) > 2^64 + this would exceed the address space of the machine. */ +#define MAXHEIGHT 83 diff --git a/include/libgnulib/gl_anyavltree_list2.h b/include/libgnulib/gl_anyavltree_list2.h new file mode 100755 index 0000000..df7d89e --- /dev/null +++ b/include/libgnulib/gl_anyavltree_list2.h @@ -0,0 +1,809 @@ +/* Sequential list data type implemented by a binary tree. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_avltree_list.c and gl_avltreehash_list.c. */ + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Creates a subtree for count >= 1 elements. + Its height is h where 2^(h-1) <= count <= 2^h - 1. + Returns NULL upon out-of-memory. */ +static gl_list_node_t +create_subtree_with_contents (size_t count, const void **contents) +{ + size_t half1 = (count - 1) / 2; + size_t half2 = count / 2; + /* Note: half1 + half2 = count - 1. */ + gl_list_node_t node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + if (node == NULL) + return NULL; + + if (half1 > 0) + { + node->left = create_subtree_with_contents (half1, contents); + if (node->left == NULL) + goto fail1; + node->left->parent = node; + } + else + node->left = NULL; + + node->value = contents[half1]; + + if (half2 > 0) + { + node->right = create_subtree_with_contents (half2, contents + half1 + 1); + if (node->right == NULL) + goto fail2; + node->right->parent = node; + } + else + node->right = NULL; + + /* balance is 0, except when count is a power of two and > 1. + Reason: half1 <= half2 <= half1 + 1, and the two branches can have + different heights only if half1 = 2^h - 1 and half2 = 2^h; in this + case, count = half1 + half2 + 1 = 2^(h+1). */ + node->balance = (count > 1 && (count & (count - 1)) == 0 ? 1 : 0); + + node->branch_size = count; + + return node; + + fail2: + if (node->left != NULL) + free_subtree (node->left); + fail1: + free (node); + return NULL; +} + +static gl_list_t +gl_tree_nx_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + struct gl_list_impl *list = + (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); + + if (list == NULL) + return NULL; + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; +#if WITH_HASHTABLE + { + size_t estimate = xsum (count, count / 2); /* 1.5 * count */ + if (estimate < 10) + estimate = 10; + list->table_size = next_prime (estimate); + if (size_overflow_p (xtimes (list->table_size, sizeof (gl_hash_entry_t)))) + goto fail1; + list->table = + (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); + if (list->table == NULL) + goto fail1; + } +#endif + if (count > 0) + { + list->root = create_subtree_with_contents (count, contents); + if (list->root == NULL) + goto fail2; + list->root->parent = NULL; + +#if WITH_HASHTABLE + /* Now that the tree is built, node_position() works. Now we can + add the nodes to the hash table. */ + if (add_nodes_to_buckets (list) < 0) + goto fail3; +#endif + } + else + list->root = NULL; + + return list; + +#if WITH_HASHTABLE + fail3: + free_subtree (list->root); +#endif + fail2: +#if WITH_HASHTABLE + free (list->table); + fail1: +#endif + free (list); + return NULL; +} + +/* Ensures the tree is balanced, after an insertion or deletion operation. + The height of NODE is incremented by HEIGHT_DIFF (1 or -1). + PARENT = NODE->parent. (NODE can also be NULL. But PARENT is non-NULL.) + Rotation operations are performed starting at PARENT (not NODE itself!). */ +static void +rebalance (gl_list_t list, + gl_list_node_t node, int height_diff, gl_list_node_t parent) +{ + for (;;) + { + gl_list_node_t child; + int previous_balance; + int balance_diff; + gl_list_node_t nodeleft; + gl_list_node_t noderight; + + child = node; + node = parent; + + previous_balance = node->balance; + + /* The balance of NODE is incremented by BALANCE_DIFF: +1 if the right + branch's height has increased by 1 or the left branch's height has + decreased by 1, -1 if the right branch's height has decreased by 1 or + the left branch's height has increased by 1, 0 if no height change. */ + if (node->left != NULL || node->right != NULL) + balance_diff = (child == node->right ? height_diff : -height_diff); + else + /* Special case where above formula doesn't work, because the caller + didn't tell whether node's left or right branch shrunk from height 1 + to NULL. */ + balance_diff = - previous_balance; + + node->balance += balance_diff; + if (balance_diff == previous_balance) + { + /* node->balance is outside the range [-1,1]. Must rotate. */ + gl_list_node_t *nodep; + + if (node->parent == NULL) + /* node == list->root */ + nodep = &list->root; + else if (node->parent->left == node) + nodep = &node->parent->left; + else if (node->parent->right == node) + nodep = &node->parent->right; + else + abort (); + + nodeleft = node->left; + noderight = node->right; + + if (balance_diff < 0) + { + /* node->balance = -2. The subtree is heavier on the left side. + Rotate from left to right: + + * + / \ + h+2 h + */ + gl_list_node_t nodeleftleft = nodeleft->left; + gl_list_node_t nodeleftright = nodeleft->right; + if (nodeleft->balance <= 0) + { + /* + * h+2|h+3 + / \ / \ + h+2 h --> / h+1|h+2 + / \ | / \ + h+1 h|h+1 h+1 h|h+1 h + */ + node->left = nodeleftright; + nodeleft->right = node; + + nodeleft->parent = node->parent; + node->parent = nodeleft; + if (nodeleftright != NULL) + nodeleftright->parent = node; + + nodeleft->balance += 1; + node->balance = - nodeleft->balance; + + node->branch_size = + (nodeleftright != NULL ? nodeleftright->branch_size : 0) + + 1 + (noderight != NULL ? noderight->branch_size : 0); + nodeleft->branch_size = + nodeleftleft->branch_size + 1 + node->branch_size; + + *nodep = nodeleft; + height_diff = (height_diff < 0 + ? /* noderight's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2|h+3. */ + nodeleft->balance - 1 + : /* nodeleft's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2|h+3. */ + nodeleft->balance); + } + else + { + /* + * h+2 + / \ / \ + h+2 h --> h+1 h+1 + / \ / \ / \ + h h+1 h L R h + / \ + L R + + */ + gl_list_node_t L = nodeleft->right = nodeleftright->left; + gl_list_node_t R = node->left = nodeleftright->right; + nodeleftright->left = nodeleft; + nodeleftright->right = node; + + nodeleftright->parent = node->parent; + if (L != NULL) + L->parent = nodeleft; + if (R != NULL) + R->parent = node; + nodeleft->parent = nodeleftright; + node->parent = nodeleftright; + + nodeleft->balance = (nodeleftright->balance > 0 ? -1 : 0); + node->balance = (nodeleftright->balance < 0 ? 1 : 0); + nodeleftright->balance = 0; + + nodeleft->branch_size = + (nodeleft->left != NULL ? nodeleft->left->branch_size : 0) + + 1 + (nodeleft->right != NULL ? nodeleft->right->branch_size : 0); + node->branch_size = + (node->left != NULL ? node->left->branch_size : 0) + + 1 + (node->right != NULL ? node->right->branch_size : 0); + nodeleftright->branch_size = + nodeleft->branch_size + 1 + node->branch_size; + + *nodep = nodeleftright; + height_diff = (height_diff < 0 + ? /* noderight's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2. */ + -1 + : /* nodeleft's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2. */ + 0); + } + } + else + { + /* node->balance = 2. The subtree is heavier on the right side. + Rotate from right to left: + + * + / \ + h h+2 + */ + gl_list_node_t noderightleft = noderight->left; + gl_list_node_t noderightright = noderight->right; + if (noderight->balance >= 0) + { + /* + * h+2|h+3 + / \ / \ + h h+2 --> h+1|h+2 \ + / \ / \ | + h|h+1 h+1 h h|h+1 h+1 + */ + node->right = noderightleft; + noderight->left = node; + + noderight->parent = node->parent; + node->parent = noderight; + if (noderightleft != NULL) + noderightleft->parent = node; + + noderight->balance -= 1; + node->balance = - noderight->balance; + + node->branch_size = + (nodeleft != NULL ? nodeleft->branch_size : 0) + + 1 + (noderightleft != NULL ? noderightleft->branch_size : 0); + noderight->branch_size = + node->branch_size + 1 + noderightright->branch_size; + + *nodep = noderight; + height_diff = (height_diff < 0 + ? /* nodeleft's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2|h+3. */ + - noderight->balance - 1 + : /* noderight's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2|h+3. */ + - noderight->balance); + } + else + { + /* + * h+2 + / \ / \ + h h+2 --> h+1 h+1 + / \ / \ / \ + h+1 h h L R h + / \ + L R + + */ + gl_list_node_t L = node->right = noderightleft->left; + gl_list_node_t R = noderight->left = noderightleft->right; + noderightleft->left = node; + noderightleft->right = noderight; + + noderightleft->parent = node->parent; + if (L != NULL) + L->parent = node; + if (R != NULL) + R->parent = noderight; + node->parent = noderightleft; + noderight->parent = noderightleft; + + node->balance = (noderightleft->balance > 0 ? -1 : 0); + noderight->balance = (noderightleft->balance < 0 ? 1 : 0); + noderightleft->balance = 0; + + node->branch_size = + (node->left != NULL ? node->left->branch_size : 0) + + 1 + (node->right != NULL ? node->right->branch_size : 0); + noderight->branch_size = + (noderight->left != NULL ? noderight->left->branch_size : 0) + + 1 + (noderight->right != NULL ? noderight->right->branch_size : 0); + noderightleft->branch_size = + node->branch_size + 1 + noderight->branch_size; + + *nodep = noderightleft; + height_diff = (height_diff < 0 + ? /* nodeleft's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2. */ + -1 + : /* noderight's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2. */ + 0); + } + } + node = *nodep; + } + else + { + /* No rotation needed. Only propagation of the height change to the + next higher level. */ + if (height_diff < 0) + height_diff = (previous_balance == 0 ? 0 : -1); + else + height_diff = (node->balance == 0 ? 0 : 1); + } + + if (height_diff == 0) + break; + + parent = node->parent; + if (parent == NULL) + break; + } +} + +static void +gl_tree_remove_node_from_tree (gl_list_t list, gl_list_node_t node) +{ + gl_list_node_t parent = node->parent; + + if (node->left == NULL) + { + /* Replace node with node->right. */ + gl_list_node_t child = node->right; + + if (child != NULL) + child->parent = parent; + if (parent == NULL) + list->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = parent; p != NULL; p = p->parent) + p->branch_size--; + } + + rebalance (list, child, -1, parent); + } + } + else if (node->right == NULL) + { + /* It is not absolutely necessary to treat this case. But the more + general case below is more complicated, hence slower. */ + /* Replace node with node->left. */ + gl_list_node_t child = node->left; + + child->parent = parent; + if (parent == NULL) + list->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = parent; p != NULL; p = p->parent) + p->branch_size--; + } + + rebalance (list, child, -1, parent); + } + } + else + { + /* Replace node with the rightmost element of the node->left subtree. */ + gl_list_node_t subst; + gl_list_node_t subst_parent; + gl_list_node_t child; + + for (subst = node->left; subst->right != NULL; ) + subst = subst->right; + + subst_parent = subst->parent; + + child = subst->left; + + /* The case subst_parent == node is special: If we do nothing special, + we get confusion about node->left, subst->left and child->parent. + subst_parent == node + <==> The 'for' loop above terminated immediately. + <==> subst == subst_parent->left + [otherwise subst == subst_parent->right] + In this case, we would need to first set + child->parent = node; node->left = child; + and later - when we copy subst into node's position - again + child->parent = subst; subst->left = child; + Altogether a no-op. */ + if (subst_parent != node) + { + if (child != NULL) + child->parent = subst_parent; + subst_parent->right = child; + } + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = subst_parent; p != NULL; p = p->parent) + p->branch_size--; + } + + /* Copy subst into node's position. + (This is safer than to copy subst's value into node, keep node in + place, and free subst.) */ + if (subst_parent != node) + { + subst->left = node->left; + subst->left->parent = subst; + } + subst->right = node->right; + subst->right->parent = subst; + subst->balance = node->balance; + subst->branch_size = node->branch_size; + subst->parent = parent; + if (parent == NULL) + list->root = subst; + else if (parent->left == node) + parent->left = subst; + else /* parent->right == node */ + parent->right = subst; + + /* Rebalancing starts at child's parent, that is subst_parent - + except when subst_parent == node. In this case, we need to use + its replacement, subst. */ + rebalance (list, child, -1, subst_parent != node ? subst_parent : subst); + } +} + +static gl_list_node_t +gl_tree_nx_add_first (gl_list_t list, const void *elt) +{ + /* Create new node. */ + gl_list_node_t new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + new_node->branch_size = 1; + new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); +#endif + + /* Add it to the tree. */ + if (list->root == NULL) + { + list->root = new_node; + new_node->parent = NULL; + } + else + { + gl_list_node_t node; + + for (node = list->root; node->left != NULL; ) + node = node->left; + + node->left = new_node; + new_node->parent = node; + node->balance--; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = node; p != NULL; p = p->parent) + p->branch_size++; + } + + /* Rebalance. */ + if (node->right == NULL && node->parent != NULL) + rebalance (list, node, 1, node->parent); + } + +#if WITH_HASHTABLE + /* Add node to the hash table. + Note that this is only possible _after_ the node has been added to the + tree structure, because add_to_bucket() uses node_position(). */ + if (add_to_bucket (list, new_node) < 0) + { + gl_tree_remove_node_from_tree (list, new_node); + free (new_node); + return NULL; + } + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_tree_nx_add_last (gl_list_t list, const void *elt) +{ + /* Create new node. */ + gl_list_node_t new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + new_node->branch_size = 1; + new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); +#endif + + /* Add it to the tree. */ + if (list->root == NULL) + { + list->root = new_node; + new_node->parent = NULL; + } + else + { + gl_list_node_t node; + + for (node = list->root; node->right != NULL; ) + node = node->right; + + node->right = new_node; + new_node->parent = node; + node->balance++; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = node; p != NULL; p = p->parent) + p->branch_size++; + } + + /* Rebalance. */ + if (node->left == NULL && node->parent != NULL) + rebalance (list, node, 1, node->parent); + } + +#if WITH_HASHTABLE + /* Add node to the hash table. + Note that this is only possible _after_ the node has been added to the + tree structure, because add_to_bucket() uses node_position(). */ + if (add_to_bucket (list, new_node) < 0) + { + gl_tree_remove_node_from_tree (list, new_node); + free (new_node); + return NULL; + } + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_tree_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + /* Create new node. */ + gl_list_node_t new_node; + bool height_inc; + + new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + new_node->branch_size = 1; + new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); +#endif + + /* Add it to the tree. */ + if (node->left == NULL) + { + node->left = new_node; + node->balance--; + height_inc = (node->right == NULL); + } + else + { + for (node = node->left; node->right != NULL; ) + node = node->right; + node->right = new_node; + node->balance++; + height_inc = (node->left == NULL); + } + new_node->parent = node; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = node; p != NULL; p = p->parent) + p->branch_size++; + } + + /* Rebalance. */ + if (height_inc && node->parent != NULL) + rebalance (list, node, 1, node->parent); + +#if WITH_HASHTABLE + /* Add node to the hash table. + Note that this is only possible _after_ the node has been added to the + tree structure, because add_to_bucket() uses node_position(). */ + if (add_to_bucket (list, new_node) < 0) + { + gl_tree_remove_node_from_tree (list, new_node); + free (new_node); + return NULL; + } + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_tree_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + /* Create new node. */ + gl_list_node_t new_node; + bool height_inc; + + new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + new_node->branch_size = 1; + new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); +#endif + + /* Add it to the tree. */ + if (node->right == NULL) + { + node->right = new_node; + node->balance++; + height_inc = (node->left == NULL); + } + else + { + for (node = node->right; node->left != NULL; ) + node = node->left; + node->left = new_node; + node->balance--; + height_inc = (node->right == NULL); + } + new_node->parent = node; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = node; p != NULL; p = p->parent) + p->branch_size++; + } + + /* Rebalance. */ + if (height_inc && node->parent != NULL) + rebalance (list, node, 1, node->parent); + +#if WITH_HASHTABLE + /* Add node to the hash table. + Note that this is only possible _after_ the node has been added to the + tree structure, because add_to_bucket() uses node_position(). */ + if (add_to_bucket (list, new_node) < 0) + { + gl_tree_remove_node_from_tree (list, new_node); + free (new_node); + return NULL; + } + hash_resize_after_add (list); +#endif + + return new_node; +} diff --git a/include/libgnulib/gl_anyhash1.h b/include/libgnulib/gl_anyhash1.h new file mode 100755 index 0000000..eab7085 --- /dev/null +++ b/include/libgnulib/gl_anyhash1.h @@ -0,0 +1,31 @@ +/* Hash table for sequential list, set, and map data type. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of + gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c, + gl_linkedhash_set.c, gl_hash_set.c, + gl_linkedhash_map.c, gl_hash_map.c. */ + +/* Hash table entry. */ +struct gl_hash_entry +{ + struct gl_hash_entry *hash_next; /* chain of entries in same bucket */ + size_t hashcode; /* cache of the hash code of + - the key (for map data type) or + - the value (for list, set data types) */ +}; +typedef struct gl_hash_entry * gl_hash_entry_t; diff --git a/include/libgnulib/gl_anyhash2.h b/include/libgnulib/gl_anyhash2.h new file mode 100755 index 0000000..28120e5 --- /dev/null +++ b/include/libgnulib/gl_anyhash2.h @@ -0,0 +1,82 @@ +/* Hash table for sequential list, set, and map data type. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of + gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c, + gl_linkedhash_set.c, gl_hash_set.c, + gl_linkedhash_map.c, gl_hash_map.c. */ + +#include "gl_anyhash_primes.h" + +/* Resizes the hash table with a new estimated size. */ +static void +hash_resize (CONTAINER_T container, size_t estimate) +{ + size_t new_size = next_prime (estimate); + + if (new_size > container->table_size) + { + gl_hash_entry_t *old_table = container->table; + /* Allocate the new table. */ + gl_hash_entry_t *new_table; + size_t i; + + if (size_overflow_p (xtimes (new_size, sizeof (gl_hash_entry_t)))) + goto fail; + new_table = + (gl_hash_entry_t *) calloc (new_size, sizeof (gl_hash_entry_t)); + if (new_table == NULL) + goto fail; + + /* Iterate through the entries of the old table. */ + for (i = container->table_size; i > 0; ) + { + gl_hash_entry_t node = old_table[--i]; + + while (node != NULL) + { + gl_hash_entry_t next = node->hash_next; + /* Add the entry to the new table. */ + size_t bucket = node->hashcode % new_size; + node->hash_next = new_table[bucket]; + new_table[bucket] = node; + + node = next; + } + } + + container->table = new_table; + container->table_size = new_size; + free (old_table); + } + return; + + fail: + /* Just continue without resizing the table. */ + return; +} + +/* Resizes the hash table if needed, after CONTAINER_COUNT (container) was + incremented. */ +static void +hash_resize_after_add (CONTAINER_T container) +{ + size_t count = CONTAINER_COUNT (container); + size_t estimate = xsum (count, count / 2); /* 1.5 * count */ + if (estimate > container->table_size) + hash_resize (container, estimate); +} diff --git a/include/libgnulib/gl_anyhash_primes.h b/include/libgnulib/gl_anyhash_primes.h new file mode 100755 index 0000000..889bdce --- /dev/null +++ b/include/libgnulib/gl_anyhash_primes.h @@ -0,0 +1,87 @@ +/* Table of primes, for use by hash tables. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Array of primes, approximately in steps of factor 1.2. + This table was computed by executing the Common Lisp expression + (dotimes (i 244) (format t "nextprime(~D)~%" (ceiling (expt 1.2d0 i)))) + and feeding the result to PARI/gp. */ +static const size_t primes[] = + { + 11, 13, 17, 19, 23, 29, 37, 41, 47, 59, 67, 83, 97, 127, 139, 167, 199, + 239, 293, 347, 419, 499, 593, 709, 853, 1021, 1229, 1471, 1777, 2129, 2543, + 3049, 3659, 4391, 5273, 6323, 7589, 9103, 10937, 13109, 15727, 18899, + 22651, 27179, 32609, 39133, 46957, 56359, 67619, 81157, 97369, 116849, + 140221, 168253, 201907, 242309, 290761, 348889, 418667, 502409, 602887, + 723467, 868151, 1041779, 1250141, 1500181, 1800191, 2160233, 2592277, + 3110741, 3732887, 4479463, 5375371, 6450413, 7740517, 9288589, 11146307, + 13375573, 16050689, 19260817, 23112977, 27735583, 33282701, 39939233, + 47927081, 57512503, 69014987, 82818011, 99381577, 119257891, 143109469, + 171731387, 206077643, 247293161, 296751781, 356102141, 427322587, + 512787097, 615344489, 738413383, 886096061, 1063315271, 1275978331, + 1531174013, 1837408799, 2204890543UL, 2645868653UL, 3175042391UL, + 3810050851UL, +#if SIZE_MAX > 4294967295UL + 4572061027UL, 5486473229UL, 6583767889UL, 7900521449UL, 9480625733UL, + 11376750877UL, 13652101063UL, 16382521261UL, 19659025513UL, 23590830631UL, + 28308996763UL, 33970796089UL, 40764955463UL, 48917946377UL, 58701535657UL, + 70441842749UL, 84530211301UL, 101436253561UL, 121723504277UL, + 146068205131UL, 175281846149UL, 210338215379UL, 252405858521UL, + 302887030151UL, 363464436191UL, 436157323417UL, 523388788231UL, + 628066545713UL, 753679854847UL, 904415825857UL, 1085298991109UL, + 1302358789181UL, 1562830547009UL, 1875396656429UL, 2250475987709UL, + 2700571185239UL, 3240685422287UL, 3888822506759UL, 4666587008147UL, + 5599904409713UL, 6719885291641UL, 8063862349969UL, 9676634819959UL, + 11611961783951UL, 13934354140769UL, 16721224968907UL, 20065469962669UL, + 24078563955191UL, 28894276746229UL, 34673132095507UL, 41607758514593UL, + 49929310217531UL, 59915172260971UL, 71898206713183UL, 86277848055823UL, + 103533417666967UL, 124240101200359UL, 149088121440451UL, 178905745728529UL, + 214686894874223UL, 257624273849081UL, 309149128618903UL, 370978954342639UL, + 445174745211143UL, 534209694253381UL, 641051633104063UL, 769261959724877UL, + 923114351670013UL, 1107737222003791UL, 1329284666404567UL, + 1595141599685509UL, 1914169919622551UL, 2297003903547091UL, + 2756404684256459UL, 3307685621107757UL, 3969222745329323UL, + 4763067294395177UL, 5715680753274209UL, 6858816903929113UL, + 8230580284714831UL, 9876696341657791UL, 11852035609989371UL, + 14222442731987227UL, 17066931278384657UL, 20480317534061597UL, + 24576381040873903UL, 29491657249048679UL, 35389988698858471UL, + 42467986438630267UL, 50961583726356109UL, 61153900471627387UL, + 73384680565952851UL, 88061616679143347UL, 105673940014972061UL, + 126808728017966413UL, 152170473621559703UL, 182604568345871671UL, + 219125482015045997UL, 262950578418055169UL, 315540694101666193UL, + 378648832921999397UL, 454378599506399233UL, 545254319407679131UL, + 654305183289214771UL, 785166219947057701UL, 942199463936469157UL, + 1130639356723763129UL, 1356767228068515623UL, 1628120673682218619UL, + 1953744808418662409UL, 2344493770102394881UL, 2813392524122873857UL, + 3376071028947448339UL, 4051285234736937517UL, 4861542281684325481UL, + 5833850738021191727UL, 7000620885625427969UL, 8400745062750513217UL, + 10080894075300616261UL, 12097072890360739951UL, 14516487468432885797UL, + 17419784962119465179UL, +#endif + SIZE_MAX /* sentinel, to ensure the search terminates */ + }; + +/* Returns a suitable prime >= ESTIMATE. */ +static size_t +next_prime (size_t estimate) +{ + size_t i; + + for (i = 0; i < sizeof (primes) / sizeof (primes[0]); i++) + if (primes[i] >= estimate) + return primes[i]; + return SIZE_MAX; /* not a prime, but better than nothing */ +} diff --git a/include/libgnulib/gl_anylinked_list1.h b/include/libgnulib/gl_anylinked_list1.h new file mode 100755 index 0000000..5aeb69e --- /dev/null +++ b/include/libgnulib/gl_anylinked_list1.h @@ -0,0 +1,48 @@ +/* Sequential list data type implemented by a linked list. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_linked_list.c and gl_linkedhash_list.c. */ + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Concrete list node implementation, valid for this file only. */ +struct gl_list_node_impl +{ +#if WITH_HASHTABLE + struct gl_hash_entry h; /* hash table entry fields; must be first */ +#endif + struct gl_list_node_impl *next; + struct gl_list_node_impl *prev; + const void *value; +}; + +/* Concrete gl_list_impl type, valid for this file only. */ +struct gl_list_impl +{ + struct gl_list_impl_base base; +#if WITH_HASHTABLE + /* A hash table: managed as an array of collision lists. */ + struct gl_hash_entry **table; + size_t table_size; +#endif + /* A circular list anchored at root. + The first node is = root.next, the last node is = root.prev. + The root's value is unused. */ + struct gl_list_node_impl root; + /* Number of list nodes, excluding the root. */ + size_t count; +}; diff --git a/include/libgnulib/gl_anylinked_list2.h b/include/libgnulib/gl_anylinked_list2.h new file mode 100755 index 0000000..4b23cc6 --- /dev/null +++ b/include/libgnulib/gl_anylinked_list2.h @@ -0,0 +1,1215 @@ +/* Sequential list data type implemented by a linked list. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_linked_list.c and gl_linkedhash_list.c. */ + +/* If the symbol SIGNAL_SAFE_LIST is defined, the code is compiled in such + a way that a gl_list_t data structure may be used from within a signal + handler. The operations allowed in the signal handler are: + gl_list_iterator, gl_list_iterator_next, gl_list_iterator_free. + The list and node fields that are therefore accessed from the signal handler + are: + list->root, node->next, node->value. + We are careful to make modifications to these fields only in an order + that maintains the consistency of the list data structure at any moment, + and we use 'volatile' assignments to prevent the compiler from reordering + such assignments. */ +#ifdef SIGNAL_SAFE_LIST +# define ASYNCSAFE(type) *(type volatile *)& +#else +# define ASYNCSAFE(type) +#endif + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +static gl_list_t +gl_linked_nx_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + struct gl_list_impl *list = + (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); + + if (list == NULL) + return NULL; + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; +#if WITH_HASHTABLE + list->table_size = 11; + list->table = + (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); + if (list->table == NULL) + goto fail; +#endif + list->root.next = &list->root; + list->root.prev = &list->root; + list->count = 0; + + return list; + +#if WITH_HASHTABLE + fail: + free (list); + return NULL; +#endif +} + +static gl_list_t +gl_linked_nx_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + struct gl_list_impl *list = + (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); + gl_list_node_t tail; + + if (list == NULL) + return NULL; + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; +#if WITH_HASHTABLE + { + size_t estimate = xsum (count, count / 2); /* 1.5 * count */ + if (estimate < 10) + estimate = 10; + list->table_size = next_prime (estimate); + if (size_overflow_p (xtimes (list->table_size, sizeof (gl_hash_entry_t)))) + goto fail1; + list->table = + (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); + if (list->table == NULL) + goto fail1; + } +#endif + list->count = count; + tail = &list->root; + for (; count > 0; contents++, count--) + { + gl_list_node_t node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (node == NULL) + goto fail2; + + node->value = *contents; +#if WITH_HASHTABLE + node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (node->value) + : (size_t)(uintptr_t) node->value); + + /* Add node to the hash table. */ + if (add_to_bucket (list, node) < 0) + { + free (node); + goto fail2; + } +#endif + + /* Add node to the list. */ + node->prev = tail; + tail->next = node; + tail = node; + } + tail->next = &list->root; + list->root.prev = tail; + + return list; + + fail2: + { + gl_list_node_t node; + + for (node = tail; node != &list->root; ) + { + gl_list_node_t prev = node->prev; + + free (node); + node = prev; + } + } +#if WITH_HASHTABLE + free (list->table); + fail1: +#endif + free (list); + return NULL; +} + +static size_t _GL_ATTRIBUTE_PURE +gl_linked_size (gl_list_t list) +{ + return list->count; +} + +static const void * _GL_ATTRIBUTE_PURE +gl_linked_node_value (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, + gl_list_node_t node) +{ + return node->value; +} + +static int +gl_linked_node_nx_set_value (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, + gl_list_node_t node, + const void *elt) +{ +#if WITH_HASHTABLE + if (elt != node->value) + { + size_t new_hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + + if (new_hashcode != node->h.hashcode) + { + remove_from_bucket (list, node); + node->value = elt; + node->h.hashcode = new_hashcode; + if (add_to_bucket (list, node) < 0) + { + /* Out of memory. We removed node from a bucket but cannot add + it to another bucket. In order to avoid inconsistencies, we + must remove node entirely from the list. */ + gl_list_node_t before_removed = node->prev; + gl_list_node_t after_removed = node->next; + ASYNCSAFE(gl_list_node_t) before_removed->next = after_removed; + after_removed->prev = before_removed; + list->count--; + free (node); + return -1; + } + } + else + node->value = elt; + } +#else + node->value = elt; +#endif + return 0; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_linked_next_node (gl_list_t list, gl_list_node_t node) +{ + return (node->next != &list->root ? node->next : NULL); +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_linked_previous_node (gl_list_t list, gl_list_node_t node) +{ + return (node->prev != &list->root ? node->prev : NULL); +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_linked_first_node (gl_list_t list) +{ + if (list->count > 0) + return list->root.next; + else + return NULL; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_linked_last_node (gl_list_t list) +{ + if (list->count > 0) + return list->root.prev; + else + return NULL; +} + +static const void * _GL_ATTRIBUTE_PURE +gl_linked_get_at (gl_list_t list, size_t position) +{ + size_t count = list->count; + gl_list_node_t node; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + /* Here we know count > 0. */ + if (position <= ((count - 1) / 2)) + { + node = list->root.next; + for (; position > 0; position--) + node = node->next; + } + else + { + position = count - 1 - position; + node = list->root.prev; + for (; position > 0; position--) + node = node->prev; + } + return node->value; +} + +static gl_list_node_t +gl_linked_nx_set_at (gl_list_t list, size_t position, const void *elt) +{ + size_t count = list->count; + gl_list_node_t node; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + /* Here we know count > 0. */ + if (position <= ((count - 1) / 2)) + { + node = list->root.next; + for (; position > 0; position--) + node = node->next; + } + else + { + position = count - 1 - position; + node = list->root.prev; + for (; position > 0; position--) + node = node->prev; + } +#if WITH_HASHTABLE + if (elt != node->value) + { + size_t new_hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + + if (new_hashcode != node->h.hashcode) + { + remove_from_bucket (list, node); + node->value = elt; + node->h.hashcode = new_hashcode; + if (add_to_bucket (list, node) < 0) + { + /* Out of memory. We removed node from a bucket but cannot add + it to another bucket. In order to avoid inconsistencies, we + must remove node entirely from the list. */ + gl_list_node_t before_removed = node->prev; + gl_list_node_t after_removed = node->next; + ASYNCSAFE(gl_list_node_t) before_removed->next = after_removed; + after_removed->prev = before_removed; + list->count--; + free (node); + return NULL; + } + } + else + node->value = elt; + } +#else + node->value = elt; +#endif + return node; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_linked_search_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + size_t count = list->count; + + if (!(start_index <= end_index && end_index <= count)) + /* Invalid arguments. */ + abort (); + { +#if WITH_HASHTABLE + size_t hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + size_t bucket = hashcode % list->table_size; + gl_listelement_equals_fn equals = list->base.equals_fn; + + if (!list->base.allow_duplicates) + { + /* Look for the first match in the hash bucket. */ + gl_list_node_t found = NULL; + gl_list_node_t node; + + for (node = (gl_list_node_t) list->table[bucket]; + node != NULL; + node = (gl_list_node_t) node->h.hash_next) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + { + found = node; + break; + } + if (start_index > 0) + /* Look whether found's index is < start_index. */ + for (node = list->root.next; ; node = node->next) + { + if (node == found) + return NULL; + if (--start_index == 0) + break; + } + if (end_index < count) + /* Look whether found's index is >= end_index. */ + { + end_index = count - end_index; + for (node = list->root.prev; ; node = node->prev) + { + if (node == found) + return NULL; + if (--end_index == 0) + break; + } + } + return found; + } + else + { + /* Look whether there is more than one match in the hash bucket. */ + bool multiple_matches = false; + gl_list_node_t first_match = NULL; + gl_list_node_t node; + + for (node = (gl_list_node_t) list->table[bucket]; + node != NULL; + node = (gl_list_node_t) node->h.hash_next) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + { + if (first_match == NULL) + first_match = node; + else + { + multiple_matches = true; + break; + } + } + if (multiple_matches) + { + /* We need the match with the smallest index. But we don't have + a fast mapping node -> index. So we have to walk the list. */ + end_index -= start_index; + node = list->root.next; + for (; start_index > 0; start_index--) + node = node->next; + + for (; + end_index > 0; + node = node->next, end_index--) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + return node; + /* The matches must have all been at indices < start_index or + >= end_index. */ + return NULL; + } + else + { + if (start_index > 0) + /* Look whether first_match's index is < start_index. */ + for (node = list->root.next; node != &list->root; node = node->next) + { + if (node == first_match) + return NULL; + if (--start_index == 0) + break; + } + if (end_index < list->count) + /* Look whether first_match's index is >= end_index. */ + { + end_index = list->count - end_index; + for (node = list->root.prev; ; node = node->prev) + { + if (node == first_match) + return NULL; + if (--end_index == 0) + break; + } + } + return first_match; + } + } +#else + gl_listelement_equals_fn equals = list->base.equals_fn; + gl_list_node_t node = list->root.next; + + end_index -= start_index; + for (; start_index > 0; start_index--) + node = node->next; + + if (equals != NULL) + { + for (; end_index > 0; node = node->next, end_index--) + if (equals (elt, node->value)) + return node; + } + else + { + for (; end_index > 0; node = node->next, end_index--) + if (elt == node->value) + return node; + } + return NULL; +#endif + } +} + +static size_t _GL_ATTRIBUTE_PURE +gl_linked_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + size_t count = list->count; + + if (!(start_index <= end_index && end_index <= count)) + /* Invalid arguments. */ + abort (); + { +#if WITH_HASHTABLE + /* Here the hash table doesn't help much. It only allows us to minimize + the number of equals() calls, by looking up first the node and then + its index. */ + size_t hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + size_t bucket = hashcode % list->table_size; + gl_listelement_equals_fn equals = list->base.equals_fn; + gl_list_node_t node; + + /* First step: Look up the node. */ + if (!list->base.allow_duplicates) + { + /* Look for the first match in the hash bucket. */ + for (node = (gl_list_node_t) list->table[bucket]; + node != NULL; + node = (gl_list_node_t) node->h.hash_next) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + break; + } + else + { + /* Look whether there is more than one match in the hash bucket. */ + bool multiple_matches = false; + gl_list_node_t first_match = NULL; + + for (node = (gl_list_node_t) list->table[bucket]; + node != NULL; + node = (gl_list_node_t) node->h.hash_next) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + { + if (first_match == NULL) + first_match = node; + else + { + multiple_matches = true; + break; + } + } + if (multiple_matches) + { + /* We need the match with the smallest index. But we don't have + a fast mapping node -> index. So we have to walk the list. */ + size_t index; + + index = start_index; + node = list->root.next; + for (; start_index > 0; start_index--) + node = node->next; + + for (; + index < end_index; + node = node->next, index++) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + return index; + /* The matches must have all been at indices < start_index or + >= end_index. */ + return (size_t)(-1); + } + node = first_match; + } + + /* Second step: Look up the index of the node. */ + if (node == NULL) + return (size_t)(-1); + else + { + size_t index = 0; + + for (; node->prev != &list->root; node = node->prev) + index++; + + if (index >= start_index && index < end_index) + return index; + else + return (size_t)(-1); + } +#else + gl_listelement_equals_fn equals = list->base.equals_fn; + size_t index = start_index; + gl_list_node_t node = list->root.next; + + for (; start_index > 0; start_index--) + node = node->next; + + if (equals != NULL) + { + for (; + index < end_index; + node = node->next, index++) + if (equals (elt, node->value)) + return index; + } + else + { + for (; + index < end_index; + node = node->next, index++) + if (elt == node->value) + return index; + } + return (size_t)(-1); +#endif + } +} + +static gl_list_node_t +gl_linked_nx_add_first (gl_list_t list, const void *elt) +{ + gl_list_node_t node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (node == NULL) + return NULL; + + ASYNCSAFE(const void *) node->value = elt; +#if WITH_HASHTABLE + node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (node->value) + : (size_t)(uintptr_t) node->value); + + /* Add node to the hash table. */ + if (add_to_bucket (list, node) < 0) + { + free (node); + return NULL; + } +#endif + + /* Add node to the list. */ + node->prev = &list->root; + ASYNCSAFE(gl_list_node_t) node->next = list->root.next; + node->next->prev = node; + ASYNCSAFE(gl_list_node_t) list->root.next = node; + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return node; +} + +static gl_list_node_t +gl_linked_nx_add_last (gl_list_t list, const void *elt) +{ + gl_list_node_t node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (node == NULL) + return NULL; + + ASYNCSAFE(const void *) node->value = elt; +#if WITH_HASHTABLE + node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (node->value) + : (size_t)(uintptr_t) node->value); + + /* Add node to the hash table. */ + if (add_to_bucket (list, node) < 0) + { + free (node); + return NULL; + } +#endif + + /* Add node to the list. */ + ASYNCSAFE(gl_list_node_t) node->next = &list->root; + node->prev = list->root.prev; + ASYNCSAFE(gl_list_node_t) node->prev->next = node; + list->root.prev = node; + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return node; +} + +static gl_list_node_t +gl_linked_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + gl_list_node_t new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (new_node == NULL) + return NULL; + + ASYNCSAFE(const void *) new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); + + /* Add new_node to the hash table. */ + if (add_to_bucket (list, new_node) < 0) + { + free (new_node); + return NULL; + } +#endif + + /* Add new_node to the list. */ + ASYNCSAFE(gl_list_node_t) new_node->next = node; + new_node->prev = node->prev; + ASYNCSAFE(gl_list_node_t) new_node->prev->next = new_node; + node->prev = new_node; + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_linked_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + gl_list_node_t new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (new_node == NULL) + return NULL; + + ASYNCSAFE(const void *) new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); + + /* Add new_node to the hash table. */ + if (add_to_bucket (list, new_node) < 0) + { + free (new_node); + return NULL; + } +#endif + + /* Add new_node to the list. */ + new_node->prev = node; + ASYNCSAFE(gl_list_node_t) new_node->next = node->next; + new_node->next->prev = new_node; + ASYNCSAFE(gl_list_node_t) node->next = new_node; + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_linked_nx_add_at (gl_list_t list, size_t position, const void *elt) +{ + size_t count = list->count; + gl_list_node_t new_node; + + if (!(position <= count)) + /* Invalid argument. */ + abort (); + + new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + if (new_node == NULL) + return NULL; + + ASYNCSAFE(const void *) new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); + + /* Add new_node to the hash table. */ + if (add_to_bucket (list, new_node) < 0) + { + free (new_node); + return NULL; + } +#endif + + /* Add new_node to the list. */ + if (position <= (count / 2)) + { + gl_list_node_t node; + + node = &list->root; + for (; position > 0; position--) + node = node->next; + new_node->prev = node; + ASYNCSAFE(gl_list_node_t) new_node->next = node->next; + new_node->next->prev = new_node; + ASYNCSAFE(gl_list_node_t) node->next = new_node; + } + else + { + gl_list_node_t node; + + position = count - position; + node = &list->root; + for (; position > 0; position--) + node = node->prev; + ASYNCSAFE(gl_list_node_t) new_node->next = node; + new_node->prev = node->prev; + ASYNCSAFE(gl_list_node_t) new_node->prev->next = new_node; + node->prev = new_node; + } + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return new_node; +} + +static bool +gl_linked_remove_node (gl_list_t list, gl_list_node_t node) +{ + gl_list_node_t prev; + gl_list_node_t next; + +#if WITH_HASHTABLE + /* Remove node from the hash table. */ + remove_from_bucket (list, node); +#endif + + /* Remove node from the list. */ + prev = node->prev; + next = node->next; + + ASYNCSAFE(gl_list_node_t) prev->next = next; + next->prev = prev; + list->count--; + + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (node->value); + free (node); + return true; +} + +static bool +gl_linked_remove_at (gl_list_t list, size_t position) +{ + size_t count = list->count; + gl_list_node_t removed_node; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + /* Here we know count > 0. */ + if (position <= ((count - 1) / 2)) + { + gl_list_node_t node; + gl_list_node_t after_removed; + + node = &list->root; + for (; position > 0; position--) + node = node->next; + removed_node = node->next; + after_removed = node->next->next; + ASYNCSAFE(gl_list_node_t) node->next = after_removed; + after_removed->prev = node; + } + else + { + gl_list_node_t node; + gl_list_node_t before_removed; + + position = count - 1 - position; + node = &list->root; + for (; position > 0; position--) + node = node->prev; + removed_node = node->prev; + before_removed = node->prev->prev; + node->prev = before_removed; + ASYNCSAFE(gl_list_node_t) before_removed->next = node; + } +#if WITH_HASHTABLE + remove_from_bucket (list, removed_node); +#endif + list->count--; + + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (removed_node->value); + free (removed_node); + return true; +} + +static bool +gl_linked_remove (gl_list_t list, const void *elt) +{ + gl_list_node_t node = gl_linked_search_from_to (list, 0, list->count, elt); + + if (node != NULL) + return gl_linked_remove_node (list, node); + else + return false; +} + +static void +gl_linked_list_free (gl_list_t list) +{ + gl_listelement_dispose_fn dispose = list->base.dispose_fn; + gl_list_node_t node; + + for (node = list->root.next; node != &list->root; ) + { + gl_list_node_t next = node->next; + if (dispose != NULL) + dispose (node->value); + free (node); + node = next; + } +#if WITH_HASHTABLE + free (list->table); +#endif + free (list); +} + +/* --------------------- gl_list_iterator_t Data Type --------------------- */ + +static gl_list_iterator_t _GL_ATTRIBUTE_PURE +gl_linked_iterator (gl_list_t list) +{ + gl_list_iterator_t result; + + result.vtable = list->base.vtable; + result.list = list; + result.p = list->root.next; + result.q = &list->root; +#if defined GCC_LINT || defined lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + return result; +} + +static gl_list_iterator_t _GL_ATTRIBUTE_PURE +gl_linked_iterator_from_to (gl_list_t list, + size_t start_index, size_t end_index) +{ + gl_list_iterator_t result; + size_t n1, n2, n3; + + if (!(start_index <= end_index && end_index <= list->count)) + /* Invalid arguments. */ + abort (); + result.vtable = list->base.vtable; + result.list = list; + n1 = start_index; + n2 = end_index - start_index; + n3 = list->count - end_index; + /* Find the maximum among n1, n2, n3, so as to reduce the number of + loop iterations to n1 + n2 + n3 - max(n1,n2,n3). */ + if (n1 > n2 && n1 > n3) + { + /* n1 is the maximum, use n2 and n3. */ + gl_list_node_t node; + size_t i; + + node = &list->root; + for (i = n3; i > 0; i--) + node = node->prev; + result.q = node; + for (i = n2; i > 0; i--) + node = node->prev; + result.p = node; + } + else if (n2 > n3) + { + /* n2 is the maximum, use n1 and n3. */ + gl_list_node_t node; + size_t i; + + node = list->root.next; + for (i = n1; i > 0; i--) + node = node->next; + result.p = node; + + node = &list->root; + for (i = n3; i > 0; i--) + node = node->prev; + result.q = node; + } + else + { + /* n3 is the maximum, use n1 and n2. */ + gl_list_node_t node; + size_t i; + + node = list->root.next; + for (i = n1; i > 0; i--) + node = node->next; + result.p = node; + for (i = n2; i > 0; i--) + node = node->next; + result.q = node; + } + +#if defined GCC_LINT || defined lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + return result; +} + +static bool +gl_linked_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep) +{ + if (iterator->p != iterator->q) + { + gl_list_node_t node = (gl_list_node_t) iterator->p; + *eltp = node->value; + if (nodep != NULL) + *nodep = node; + iterator->p = node->next; + return true; + } + else + return false; +} + +static void +gl_linked_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_iterator_t *iterator) +{ +} + +/* ---------------------- Sorted gl_list_t Data Type ---------------------- */ + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_linked_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + + for (node = list->root.next; node != &list->root; node = node->next) + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return node; + } + return NULL; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_linked_sortedlist_search_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + size_t count = list->count; + + if (!(low <= high && high <= list->count)) + /* Invalid arguments. */ + abort (); + + high -= low; + if (high > 0) + { + /* Here we know low < count. */ + size_t position = low; + gl_list_node_t node; + + if (position <= ((count - 1) / 2)) + { + node = list->root.next; + for (; position > 0; position--) + node = node->next; + } + else + { + position = count - 1 - position; + node = list->root.prev; + for (; position > 0; position--) + node = node->prev; + } + + do + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return node; + node = node->next; + } + while (--high > 0); + } + return NULL; +} + +static size_t _GL_ATTRIBUTE_PURE +gl_linked_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + size_t index; + + for (node = list->root.next, index = 0; + node != &list->root; + node = node->next, index++) + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return index; + } + return (size_t)(-1); +} + +static size_t _GL_ATTRIBUTE_PURE +gl_linked_sortedlist_indexof_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + size_t count = list->count; + + if (!(low <= high && high <= list->count)) + /* Invalid arguments. */ + abort (); + + high -= low; + if (high > 0) + { + /* Here we know low < count. */ + size_t index = low; + size_t position = low; + gl_list_node_t node; + + if (position <= ((count - 1) / 2)) + { + node = list->root.next; + for (; position > 0; position--) + node = node->next; + } + else + { + position = count - 1 - position; + node = list->root.prev; + for (; position > 0; position--) + node = node->prev; + } + + do + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return index; + node = node->next; + index++; + } + while (--high > 0); + } + return (size_t)(-1); +} + +static gl_list_node_t +gl_linked_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + + for (node = list->root.next; node != &list->root; node = node->next) + if (compar (node->value, elt) >= 0) + return gl_linked_nx_add_before (list, node, elt); + return gl_linked_nx_add_last (list, elt); +} + +static bool +gl_linked_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + + for (node = list->root.next; node != &list->root; node = node->next) + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return gl_linked_remove_node (list, node); + } + return false; +} diff --git a/include/libgnulib/gl_anyrbtree_list1.h b/include/libgnulib/gl_anyrbtree_list1.h new file mode 100755 index 0000000..8af04eb --- /dev/null +++ b/include/libgnulib/gl_anyrbtree_list1.h @@ -0,0 +1,76 @@ +/* Sequential list data type implemented by a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_rbtree_list.c and gl_rbtreehash_list.c. */ + +/* A red-black tree is a binary tree where every node is colored black or + red such that + 1. The root is black. + 2. No red node has a red parent. + Or equivalently: No red node has a red child. + 3. All paths from the root down to any NULL endpoint contain the same + number of black nodes. + Let's call this the "black-height" bh of the tree. It follows that every + such path contains exactly bh black and between 0 and bh red nodes. (The + extreme cases are a path containing only black nodes, and a path colored + alternately black-red-black-red-...-black-red.) The height of the tree + therefore is >= bh, <= 2*bh. + */ + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Color of a node. */ +typedef enum color { BLACK, RED } color_t; + +/* Concrete list node implementation, valid for this file only. */ +struct gl_list_node_impl +{ +#if WITH_HASHTABLE + struct gl_hash_entry h; /* hash table entry fields; must be first */ +#endif + struct gl_list_node_impl *left; /* left branch, or NULL */ + struct gl_list_node_impl *right; /* right branch, or NULL */ + /* Parent pointer, or NULL. The parent pointer is not needed for most + operations. It is needed so that a gl_list_node_t can be returned + without memory allocation, on which the functions gl_list_remove_node, + gl_list_add_before, gl_list_add_after can be implemented. */ + struct gl_list_node_impl *parent; + color_t color; /* node's color */ + size_t branch_size; /* number of nodes in this branch, + = branchsize(left)+branchsize(right)+1 */ + const void *value; +}; + +/* Concrete gl_list_impl type, valid for this file only. */ +struct gl_list_impl +{ + struct gl_list_impl_base base; +#if WITH_HASHTABLE + /* A hash table: managed as an array of collision lists. */ + struct gl_hash_entry **table; + size_t table_size; +#endif + struct gl_list_node_impl *root; /* root node or NULL */ +}; + +/* A red-black tree of height h has a black-height bh >= ceil(h/2) and + therefore at least 2^ceil(h/2) - 1 elements. So, h <= 116 (because a tree + of height h >= 117 would have at least 2^59 - 1 elements, and because even + on 64-bit machines, + sizeof (gl_list_node_impl) * (2^59 - 1) > 2^64 + this would exceed the address space of the machine. */ +#define MAXHEIGHT 116 diff --git a/include/libgnulib/gl_anyrbtree_list2.h b/include/libgnulib/gl_anyrbtree_list2.h new file mode 100755 index 0000000..5e34894 --- /dev/null +++ b/include/libgnulib/gl_anyrbtree_list2.h @@ -0,0 +1,1028 @@ +/* Sequential list data type implemented by a binary tree. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_rbtree_list.c and gl_rbtreehash_list.c. */ + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Creates a subtree for count >= 1 elements. + Its black-height bh is passed as argument, with + 2^bh - 1 <= count <= 2^(bh+1) - 1. bh == 0 implies count == 1. + Its height is h where 2^(h-1) <= count <= 2^h - 1. + Return NULL upon out-of-memory. */ +static gl_list_node_t +create_subtree_with_contents (unsigned int bh, + size_t count, const void **contents) +{ + size_t half1 = (count - 1) / 2; + size_t half2 = count / 2; + /* Note: half1 + half2 = count - 1. */ + gl_list_node_t node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + if (node == NULL) + return NULL; + + if (half1 > 0) + { + /* half1 > 0 implies count > 1, implies bh >= 1, implies + 2^(bh-1) - 1 <= half1 <= 2^bh - 1. */ + node->left = + create_subtree_with_contents (bh - 1, half1, contents); + if (node->left == NULL) + goto fail1; + node->left->parent = node; + } + else + node->left = NULL; + + node->value = contents[half1]; + + if (half2 > 0) + { + /* half2 > 0 implies count > 1, implies bh >= 1, implies + 2^(bh-1) - 1 <= half2 <= 2^bh - 1. */ + node->right = + create_subtree_with_contents (bh - 1, half2, contents + half1 + 1); + if (node->right == NULL) + goto fail2; + node->right->parent = node; + } + else + node->right = NULL; + + node->color = (bh == 0 ? RED : BLACK); + + node->branch_size = count; + + return node; + + fail2: + if (node->left != NULL) + free_subtree (node->left); + fail1: + free (node); + return NULL; +} + +static gl_list_t +gl_tree_nx_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + struct gl_list_impl *list = + (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); + + if (list == NULL) + return NULL; + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; +#if WITH_HASHTABLE + { + size_t estimate = xsum (count, count / 2); /* 1.5 * count */ + if (estimate < 10) + estimate = 10; + list->table_size = next_prime (estimate); + if (size_overflow_p (xtimes (list->table_size, sizeof (gl_hash_entry_t)))) + goto fail1; + list->table = + (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); + if (list->table == NULL) + goto fail1; + } +#endif + if (count > 0) + { + /* Assuming 2^bh - 1 <= count <= 2^(bh+1) - 2, we create a tree whose + upper bh levels are black, and only the partially present lowest + level is red. */ + unsigned int bh; + { + size_t n; + for (n = count + 1, bh = 0; n > 1; n = n >> 1) + bh++; + } + + list->root = create_subtree_with_contents (bh, count, contents); + if (list->root == NULL) + goto fail2; + list->root->parent = NULL; + +#if WITH_HASHTABLE + /* Now that the tree is built, node_position() works. Now we can + add the nodes to the hash table. */ + if (add_nodes_to_buckets (list) < 0) + goto fail3; +#endif + } + else + list->root = NULL; + + return list; + +#if WITH_HASHTABLE + fail3: + free_subtree (list->root); +#endif + fail2: +#if WITH_HASHTABLE + free (list->table); + fail1: +#endif + free (list); + return NULL; +} + +/* Rotates left a subtree. + + B D + / \ / \ + A D --> B E + / \ / \ + C E A C + + Changes the tree structure, updates the branch sizes. + The caller must update the colors and register D as child of its parent. */ +static gl_list_node_t +rotate_left (gl_list_node_t b_node, gl_list_node_t d_node) +{ + gl_list_node_t a_node = b_node->left; + gl_list_node_t c_node = d_node->left; + gl_list_node_t e_node = d_node->right; + + b_node->right = c_node; + d_node->left = b_node; + + d_node->parent = b_node->parent; + b_node->parent = d_node; + if (c_node != NULL) + c_node->parent = b_node; + + b_node->branch_size = + (a_node != NULL ? a_node->branch_size : 0) + + 1 + (c_node != NULL ? c_node->branch_size : 0); + d_node->branch_size = + b_node->branch_size + 1 + (e_node != NULL ? e_node->branch_size : 0); + + return d_node; +} + +/* Rotates right a subtree. + + D B + / \ / \ + B E --> A D + / \ / \ + A C C E + + Changes the tree structure, updates the branch sizes. + The caller must update the colors and register B as child of its parent. */ +static gl_list_node_t +rotate_right (gl_list_node_t b_node, gl_list_node_t d_node) +{ + gl_list_node_t a_node = b_node->left; + gl_list_node_t c_node = b_node->right; + gl_list_node_t e_node = d_node->right; + + d_node->left = c_node; + b_node->right = d_node; + + b_node->parent = d_node->parent; + d_node->parent = b_node; + if (c_node != NULL) + c_node->parent = d_node; + + d_node->branch_size = + (c_node != NULL ? c_node->branch_size : 0) + + 1 + (e_node != NULL ? e_node->branch_size : 0); + b_node->branch_size = + (a_node != NULL ? a_node->branch_size : 0) + 1 + d_node->branch_size; + + return b_node; +} + +/* Ensures the tree is balanced, after an insertion operation. + Also assigns node->color. + parent is the given node's parent, known to be non-NULL. */ +static void +rebalance_after_add (gl_list_t list, gl_list_node_t node, gl_list_node_t parent) +{ + for (;;) + { + /* At this point, parent = node->parent != NULL. + Think of node->color being RED (although node->color is not yet + assigned.) */ + gl_list_node_t grandparent; + gl_list_node_t uncle; + + if (parent->color == BLACK) + { + /* A RED color for node is acceptable. */ + node->color = RED; + return; + } + + grandparent = parent->parent; + /* Since parent is RED, we know that + grandparent is != NULL and colored BLACK. */ + + if (grandparent->left == parent) + uncle = grandparent->right; + else if (grandparent->right == parent) + uncle = grandparent->left; + else + abort (); + + if (uncle != NULL && uncle->color == RED) + { + /* Change grandparent from BLACK to RED, and + change parent and uncle from RED to BLACK. + This makes it acceptable for node to be RED. */ + node->color = RED; + parent->color = uncle->color = BLACK; + node = grandparent; + } + else + { + /* grandparent and uncle are BLACK. parent is RED. node wants + to be RED too. + In this case, recoloring is not sufficient. Need to perform + one or two rotations. */ + gl_list_node_t *grandparentp; + + if (grandparent->parent == NULL) + grandparentp = &list->root; + else if (grandparent->parent->left == grandparent) + grandparentp = &grandparent->parent->left; + else if (grandparent->parent->right == grandparent) + grandparentp = &grandparent->parent->right; + else + abort (); + + if (grandparent->left == parent) + { + if (parent->right == node) + { + /* Rotation between node and parent. */ + grandparent->left = rotate_left (parent, node); + node = parent; + parent = grandparent->left; + } + /* grandparent and uncle are BLACK. parent and node want to be + RED. parent = grandparent->left. node = parent->left. + + grandparent parent + bh+1 bh+1 + / \ / \ + parent uncle --> node grandparent + bh bh bh bh + / \ / \ + node C C uncle + bh bh bh bh + */ + *grandparentp = rotate_right (parent, grandparent); + parent->color = BLACK; + node->color = grandparent->color = RED; + } + else /* grandparent->right == parent */ + { + if (parent->left == node) + { + /* Rotation between node and parent. */ + grandparent->right = rotate_right (node, parent); + node = parent; + parent = grandparent->right; + } + /* grandparent and uncle are BLACK. parent and node want to be + RED. parent = grandparent->right. node = parent->right. + + grandparent parent + bh+1 bh+1 + / \ / \ + uncle parent --> grandparent node + bh bh bh bh + / \ / \ + C node uncle C + bh bh bh bh + */ + *grandparentp = rotate_left (grandparent, parent); + parent->color = BLACK; + node->color = grandparent->color = RED; + } + return; + } + + /* Start again with a new (node, parent) pair. */ + parent = node->parent; + + if (parent == NULL) + { + /* Change node's color from RED to BLACK. This increases the + tree's black-height. */ + node->color = BLACK; + return; + } + } +} + +/* Ensures the tree is balanced, after a deletion operation. + CHILD was a grandchild of PARENT and is now its child. Between them, + a black node was removed. CHILD is also black, or NULL. + (CHILD can also be NULL. But PARENT is non-NULL.) */ +static void +rebalance_after_remove (gl_list_t list, gl_list_node_t child, gl_list_node_t parent) +{ + for (;;) + { + /* At this point, we reduced the black-height of the CHILD subtree by 1. + To make up, either look for a possibility to turn a RED to a BLACK + node, or try to reduce the black-height tree of CHILD's sibling + subtree as well. */ + gl_list_node_t *parentp; + + if (parent->parent == NULL) + parentp = &list->root; + else if (parent->parent->left == parent) + parentp = &parent->parent->left; + else if (parent->parent->right == parent) + parentp = &parent->parent->right; + else + abort (); + + if (parent->left == child) + { + gl_list_node_t sibling = parent->right; + /* sibling's black-height is >= 1. In particular, + sibling != NULL. + + parent + / \ + child sibling + bh bh+1 + */ + + if (sibling->color == RED) + { + /* sibling is RED, hence parent is BLACK and sibling's children + are non-NULL and BLACK. + + parent sibling + bh+2 bh+2 + / \ / \ + child sibling --> parent SR + bh bh+1 bh+1 bh+1 + / \ / \ + SL SR child SL + bh+1 bh+1 bh bh+1 + */ + *parentp = rotate_left (parent, sibling); + parent->color = RED; + sibling->color = BLACK; + + /* Concentrate on the subtree of parent. The new sibling is + one of the old sibling's children, and known to be BLACK. */ + parentp = &sibling->left; + sibling = parent->right; + } + /* Now we know that sibling is BLACK. + + parent + / \ + child sibling + bh bh+1 + */ + if (sibling->right != NULL && sibling->right->color == RED) + { + /* + parent sibling + bh+1|bh+2 bh+1|bh+2 + / \ / \ + child sibling --> parent SR + bh bh+1 bh+1 bh+1 + / \ / \ + SL SR child SL + bh bh bh bh + */ + *parentp = rotate_left (parent, sibling); + sibling->color = parent->color; + parent->color = BLACK; + sibling->right->color = BLACK; + return; + } + else if (sibling->left != NULL && sibling->left->color == RED) + { + /* + parent parent + bh+1|bh+2 bh+1|bh+2 + / \ / \ + child sibling --> child SL + bh bh+1 bh bh+1 + / \ / \ + SL SR SLL sibling + bh bh bh bh + / \ / \ + SLL SLR SLR SR + bh bh bh bh + + where SLL, SLR, SR are all black. + */ + parent->right = rotate_right (sibling->left, sibling); + /* Change sibling from BLACK to RED and SL from RED to BLACK. */ + sibling->color = RED; + sibling = parent->right; + sibling->color = BLACK; + + /* Now do as in the previous case. */ + *parentp = rotate_left (parent, sibling); + sibling->color = parent->color; + parent->color = BLACK; + sibling->right->color = BLACK; + return; + } + else + { + if (parent->color == BLACK) + { + /* Change sibling from BLACK to RED. Then the entire + subtree at parent has decreased its black-height. + parent parent + bh+2 bh+1 + / \ / \ + child sibling --> child sibling + bh bh+1 bh bh + */ + sibling->color = RED; + + child = parent; + } + else + { + /* Change parent from RED to BLACK, but compensate by + changing sibling from BLACK to RED. + parent parent + bh+1 bh+1 + / \ / \ + child sibling --> child sibling + bh bh+1 bh bh + */ + parent->color = BLACK; + sibling->color = RED; + return; + } + } + } + else if (parent->right == child) + { + gl_list_node_t sibling = parent->left; + /* sibling's black-height is >= 1. In particular, + sibling != NULL. + + parent + / \ + sibling child + bh+1 bh + */ + + if (sibling->color == RED) + { + /* sibling is RED, hence parent is BLACK and sibling's children + are non-NULL and BLACK. + + parent sibling + bh+2 bh+2 + / \ / \ + sibling child --> SR parent + bh+1 ch bh+1 bh+1 + / \ / \ + SL SR SL child + bh+1 bh+1 bh+1 bh + */ + *parentp = rotate_right (sibling, parent); + parent->color = RED; + sibling->color = BLACK; + + /* Concentrate on the subtree of parent. The new sibling is + one of the old sibling's children, and known to be BLACK. */ + parentp = &sibling->right; + sibling = parent->left; + } + /* Now we know that sibling is BLACK. + + parent + / \ + sibling child + bh+1 bh + */ + if (sibling->left != NULL && sibling->left->color == RED) + { + /* + parent sibling + bh+1|bh+2 bh+1|bh+2 + / \ / \ + sibling child --> SL parent + bh+1 bh bh+1 bh+1 + / \ / \ + SL SR SR child + bh bh bh bh + */ + *parentp = rotate_right (sibling, parent); + sibling->color = parent->color; + parent->color = BLACK; + sibling->left->color = BLACK; + return; + } + else if (sibling->right != NULL && sibling->right->color == RED) + { + /* + parent parent + bh+1|bh+2 bh+1|bh+2 + / \ / \ + sibling child --> SR child + bh+1 bh bh+1 bh + / \ / \ + SL SR sibling SRR + bh bh bh bh + / \ / \ + SRL SRR SL SRL + bh bh bh bh + + where SL, SRL, SRR are all black. + */ + parent->left = rotate_left (sibling, sibling->right); + /* Change sibling from BLACK to RED and SL from RED to BLACK. */ + sibling->color = RED; + sibling = parent->left; + sibling->color = BLACK; + + /* Now do as in the previous case. */ + *parentp = rotate_right (sibling, parent); + sibling->color = parent->color; + parent->color = BLACK; + sibling->left->color = BLACK; + return; + } + else + { + if (parent->color == BLACK) + { + /* Change sibling from BLACK to RED. Then the entire + subtree at parent has decreased its black-height. + parent parent + bh+2 bh+1 + / \ / \ + sibling child --> sibling child + bh+1 bh bh bh + */ + sibling->color = RED; + + child = parent; + } + else + { + /* Change parent from RED to BLACK, but compensate by + changing sibling from BLACK to RED. + parent parent + bh+1 bh+1 + / \ / \ + sibling child --> sibling child + bh+1 bh bh bh + */ + parent->color = BLACK; + sibling->color = RED; + return; + } + } + } + else + abort (); + + /* Start again with a new (child, parent) pair. */ + parent = child->parent; + +#if 0 /* Already handled. */ + if (child != NULL && child->color == RED) + { + child->color = BLACK; + return; + } +#endif + + if (parent == NULL) + return; + } +} + +static void +gl_tree_remove_node_from_tree (gl_list_t list, gl_list_node_t node) +{ + gl_list_node_t parent = node->parent; + + if (node->left == NULL) + { + /* Replace node with node->right. */ + gl_list_node_t child = node->right; + + if (child != NULL) + { + child->parent = parent; + /* Since node->left == NULL, child must be RED and of height 1, + hence node must have been BLACK. Recolor the child. */ + child->color = BLACK; + } + if (parent == NULL) + list->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = parent; p != NULL; p = p->parent) + p->branch_size--; + } + + if (child == NULL && node->color == BLACK) + rebalance_after_remove (list, child, parent); + } + } + else if (node->right == NULL) + { + /* It is not absolutely necessary to treat this case. But the more + general case below is more complicated, hence slower. */ + /* Replace node with node->left. */ + gl_list_node_t child = node->left; + + child->parent = parent; + /* Since node->right == NULL, child must be RED and of height 1, + hence node must have been BLACK. Recolor the child. */ + child->color = BLACK; + if (parent == NULL) + list->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = parent; p != NULL; p = p->parent) + p->branch_size--; + } + } + } + else + { + /* Replace node with the rightmost element of the node->left subtree. */ + gl_list_node_t subst; + gl_list_node_t subst_parent; + gl_list_node_t child; + color_t removed_color; + + for (subst = node->left; subst->right != NULL; ) + subst = subst->right; + + subst_parent = subst->parent; + + child = subst->left; + + removed_color = subst->color; + + /* The case subst_parent == node is special: If we do nothing special, + we get confusion about node->left, subst->left and child->parent. + subst_parent == node + <==> The 'for' loop above terminated immediately. + <==> subst == subst_parent->left + [otherwise subst == subst_parent->right] + In this case, we would need to first set + child->parent = node; node->left = child; + and later - when we copy subst into node's position - again + child->parent = subst; subst->left = child; + Altogether a no-op. */ + if (subst_parent != node) + { + if (child != NULL) + child->parent = subst_parent; + subst_parent->right = child; + } + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = subst_parent; p != NULL; p = p->parent) + p->branch_size--; + } + + /* Copy subst into node's position. + (This is safer than to copy subst's value into node, keep node in + place, and free subst.) */ + if (subst_parent != node) + { + subst->left = node->left; + subst->left->parent = subst; + } + subst->right = node->right; + subst->right->parent = subst; + subst->color = node->color; + subst->branch_size = node->branch_size; + subst->parent = parent; + if (parent == NULL) + list->root = subst; + else if (parent->left == node) + parent->left = subst; + else /* parent->right == node */ + parent->right = subst; + + if (removed_color == BLACK) + { + if (child != NULL && child->color == RED) + /* Recolor the child. */ + child->color = BLACK; + else + /* Rebalancing starts at child's parent, that is subst_parent - + except when subst_parent == node. In this case, we need to use + its replacement, subst. */ + rebalance_after_remove (list, child, + subst_parent != node ? subst_parent : subst); + } + } +} + +static gl_list_node_t +gl_tree_nx_add_first (gl_list_t list, const void *elt) +{ + /* Create new node. */ + gl_list_node_t new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + new_node->branch_size = 1; + new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); +#endif + + /* Add it to the tree. */ + if (list->root == NULL) + { + new_node->color = BLACK; + list->root = new_node; + new_node->parent = NULL; + } + else + { + gl_list_node_t node; + + for (node = list->root; node->left != NULL; ) + node = node->left; + + node->left = new_node; + new_node->parent = node; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = node; p != NULL; p = p->parent) + p->branch_size++; + } + + /* Color and rebalance. */ + rebalance_after_add (list, new_node, node); + } + +#if WITH_HASHTABLE + /* Add node to the hash table. + Note that this is only possible _after_ the node has been added to the + tree structure, because add_to_bucket() uses node_position(). */ + if (add_to_bucket (list, new_node) < 0) + { + gl_tree_remove_node_from_tree (list, new_node); + free (new_node); + return NULL; + } + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_tree_nx_add_last (gl_list_t list, const void *elt) +{ + /* Create new node. */ + gl_list_node_t new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + new_node->branch_size = 1; + new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); +#endif + + /* Add it to the tree. */ + if (list->root == NULL) + { + new_node->color = BLACK; + list->root = new_node; + new_node->parent = NULL; + } + else + { + gl_list_node_t node; + + for (node = list->root; node->right != NULL; ) + node = node->right; + + node->right = new_node; + new_node->parent = node; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = node; p != NULL; p = p->parent) + p->branch_size++; + } + + /* Color and rebalance. */ + rebalance_after_add (list, new_node, node); + } + +#if WITH_HASHTABLE + /* Add node to the hash table. + Note that this is only possible _after_ the node has been added to the + tree structure, because add_to_bucket() uses node_position(). */ + if (add_to_bucket (list, new_node) < 0) + { + gl_tree_remove_node_from_tree (list, new_node); + free (new_node); + return NULL; + } + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_tree_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + /* Create new node. */ + gl_list_node_t new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + new_node->branch_size = 1; + new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); +#endif + + /* Add it to the tree. */ + if (node->left == NULL) + node->left = new_node; + else + { + for (node = node->left; node->right != NULL; ) + node = node->right; + node->right = new_node; + } + new_node->parent = node; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = node; p != NULL; p = p->parent) + p->branch_size++; + } + + /* Color and rebalance. */ + rebalance_after_add (list, new_node, node); + +#if WITH_HASHTABLE + /* Add node to the hash table. + Note that this is only possible _after_ the node has been added to the + tree structure, because add_to_bucket() uses node_position(). */ + if (add_to_bucket (list, new_node) < 0) + { + gl_tree_remove_node_from_tree (list, new_node); + free (new_node); + return NULL; + } + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_tree_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + /* Create new node. */ + gl_list_node_t new_node = + (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); + + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + new_node->branch_size = 1; + new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); +#endif + + /* Add it to the tree. */ + if (node->right == NULL) + node->right = new_node; + else + { + for (node = node->right; node->left != NULL; ) + node = node->left; + node->left = new_node; + } + new_node->parent = node; + + /* Update branch_size fields of the parent nodes. */ + { + gl_list_node_t p; + + for (p = node; p != NULL; p = p->parent) + p->branch_size++; + } + + /* Color and rebalance. */ + rebalance_after_add (list, new_node, node); + +#if WITH_HASHTABLE + /* Add node to the hash table. + Note that this is only possible _after_ the node has been added to the + tree structure, because add_to_bucket() uses node_position(). */ + if (add_to_bucket (list, new_node) < 0) + { + gl_tree_remove_node_from_tree (list, new_node); + free (new_node); + return NULL; + } + hash_resize_after_add (list); +#endif + + return new_node; +} diff --git a/include/libgnulib/gl_anytree_list1.h b/include/libgnulib/gl_anytree_list1.h new file mode 100755 index 0000000..cd50cd6 --- /dev/null +++ b/include/libgnulib/gl_anytree_list1.h @@ -0,0 +1,41 @@ +/* Sequential list data type implemented by a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_avltree_list.c, gl_rbtree_list.c, + gl_avltreehash_list.c, gl_rbtreehash_list.c. */ + +/* An item on the stack used for iterating across the elements. */ +typedef struct +{ + gl_list_node_t node; + size_t rightp; +} iterstack_item_t; + +/* A stack used for iterating across the elements. */ +typedef iterstack_item_t iterstack_t[MAXHEIGHT]; + +/* Frees a non-empty subtree recursively. + This function is recursive and therefore not very fast. */ +static void +free_subtree (gl_list_node_t node) +{ + if (node->left != NULL) + free_subtree (node->left); + if (node->right != NULL) + free_subtree (node->right); + free (node); +} diff --git a/include/libgnulib/gl_anytree_list2.h b/include/libgnulib/gl_anytree_list2.h new file mode 100755 index 0000000..a66e611 --- /dev/null +++ b/include/libgnulib/gl_anytree_list2.h @@ -0,0 +1,970 @@ +/* Sequential list data type implemented by a binary tree. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_avltree_list.c, gl_rbtree_list.c, + gl_avltreehash_list.c, gl_rbtreehash_list.c. */ + +static gl_list_t +gl_tree_nx_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); + + if (list == NULL) + return NULL; + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; +#if WITH_HASHTABLE + list->table_size = 11; + list->table = + (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); + if (list->table == NULL) + goto fail; +#endif + list->root = NULL; + + return list; + +#if WITH_HASHTABLE + fail: + free (list); + return NULL; +#endif +} + +static size_t _GL_ATTRIBUTE_PURE +gl_tree_size (gl_list_t list) +{ + return (list->root != NULL ? list->root->branch_size : 0); +} + +static const void * _GL_ATTRIBUTE_PURE +gl_tree_node_value (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, + gl_list_node_t node) +{ + return node->value; +} + +static int +gl_tree_node_nx_set_value (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, + gl_list_node_t node, const void *elt) +{ +#if WITH_HASHTABLE + if (elt != node->value) + { + size_t new_hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + + if (new_hashcode != node->h.hashcode) + { + remove_from_bucket (list, node); + node->value = elt; + node->h.hashcode = new_hashcode; + if (add_to_bucket (list, node) < 0) + { + /* Out of memory. We removed node from a bucket but cannot add + it to another bucket. In order to avoid inconsistencies, we + must remove node entirely from the list. */ + gl_tree_remove_node_from_tree (list, node); + free (node); + return -1; + } + } + else + node->value = elt; + } +#else + node->value = elt; +#endif + return 0; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_tree_next_node (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, + gl_list_node_t node) +{ + if (node->right != NULL) + { + node = node->right; + while (node->left != NULL) + node = node->left; + } + else + { + while (node->parent != NULL && node->parent->right == node) + node = node->parent; + node = node->parent; + } + return node; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_tree_previous_node (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, + gl_list_node_t node) +{ + if (node->left != NULL) + { + node = node->left; + while (node->right != NULL) + node = node->right; + } + else + { + while (node->parent != NULL && node->parent->left == node) + node = node->parent; + node = node->parent; + } + return node; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_tree_first_node (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list) +{ + gl_list_node_t node = list->root; + + if (node != NULL) + { + while (node->left != NULL) + node = node->left; + } + return node; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_tree_last_node (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list) +{ + gl_list_node_t node = list->root; + + if (node != NULL) + { + while (node->right != NULL) + node = node->right; + } + return node; +} + +/* Returns the node at the given position < gl_tree_size (list). */ +static gl_list_node_t _GL_ATTRIBUTE_PURE +node_at (gl_list_node_t root, size_t position) +{ + /* Here we know that root != NULL. */ + gl_list_node_t node = root; + + for (;;) + { + if (node->left != NULL) + { + if (position < node->left->branch_size) + { + node = node->left; + continue; + } + position -= node->left->branch_size; + } + if (position == 0) + break; + position--; + node = node->right; + } + return node; +} + +static const void * _GL_ATTRIBUTE_PURE +gl_tree_get_at (gl_list_t list, size_t position) +{ + gl_list_node_t node = list->root; + + if (!(node != NULL && position < node->branch_size)) + /* Invalid argument. */ + abort (); + node = node_at (node, position); + return node->value; +} + +static gl_list_node_t +gl_tree_nx_set_at (gl_list_t list, size_t position, const void *elt) +{ + gl_list_node_t node = list->root; + + if (!(node != NULL && position < node->branch_size)) + /* Invalid argument. */ + abort (); + node = node_at (node, position); +#if WITH_HASHTABLE + if (elt != node->value) + { + size_t new_hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + + if (new_hashcode != node->h.hashcode) + { + remove_from_bucket (list, node); + node->value = elt; + node->h.hashcode = new_hashcode; + if (add_to_bucket (list, node) < 0) + { + /* Out of memory. We removed node from a bucket but cannot add + it to another bucket. In order to avoid inconsistencies, we + must remove node entirely from the list. */ + gl_tree_remove_node_from_tree (list, node); + free (node); + return NULL; + } + } + else + node->value = elt; + } +#else + node->value = elt; +#endif + return node; +} + +#if !WITH_HASHTABLE + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_tree_search_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + if (!(start_index <= end_index + && end_index <= (list->root != NULL ? list->root->branch_size : 0))) + /* Invalid arguments. */ + abort (); + { + gl_listelement_equals_fn equals = list->base.equals_fn; + /* Iterate across all elements. */ + gl_list_node_t node = list->root; + iterstack_t stack; + iterstack_item_t *stack_ptr = &stack[0]; + size_t index = 0; + + if (start_index == 0) + { + /* Consider all elements. */ + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + stack_ptr->node = node; + stack_ptr->rightp = 0; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + return NULL; + stack_ptr--; + if (!stack_ptr->rightp) + break; + } + node = stack_ptr->node; + /* Test against current element. */ + if (equals != NULL ? equals (elt, node->value) : elt == node->value) + return node; + index++; + if (index >= end_index) + return NULL; + /* Descend on right branch. */ + stack_ptr->rightp = 1; + node = node->right; + stack_ptr++; + } + } + else + { + /* Consider only elements at indices >= start_index. + In this case, rightp contains the difference between the start_index + for the parent node and the one for the child node (0 when the child + node is the parent's left child, > 0 when the child is the parent's + right child). */ + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + if (node->branch_size <= start_index) + break; + stack_ptr->node = node; + stack_ptr->rightp = 0; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + return NULL; + stack_ptr--; + if (!stack_ptr->rightp) + break; + start_index += stack_ptr->rightp; + } + node = stack_ptr->node; + { + size_t left_branch_size1 = + (node->left != NULL ? node->left->branch_size : 0) + 1; + if (start_index < left_branch_size1) + { + /* Test against current element. */ + if (equals != NULL ? equals (elt, node->value) : elt == node->value) + return node; + /* Now that we have considered all indices < left_branch_size1, + we can increment start_index. */ + start_index = left_branch_size1; + } + index++; + if (index >= end_index) + return NULL; + /* Descend on right branch. */ + start_index -= left_branch_size1; + stack_ptr->rightp = left_branch_size1; + } + node = node->right; + stack_ptr++; + } + } + } +} + +static size_t _GL_ATTRIBUTE_PURE +gl_tree_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + if (!(start_index <= end_index + && end_index <= (list->root != NULL ? list->root->branch_size : 0))) + /* Invalid arguments. */ + abort (); + { + gl_listelement_equals_fn equals = list->base.equals_fn; + /* Iterate across all elements. */ + gl_list_node_t node = list->root; + iterstack_t stack; + iterstack_item_t *stack_ptr = &stack[0]; + size_t index = 0; + + if (start_index == 0) + { + /* Consider all elements. */ + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + stack_ptr->node = node; + stack_ptr->rightp = 0; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + return (size_t)(-1); + stack_ptr--; + if (!stack_ptr->rightp) + break; + } + node = stack_ptr->node; + /* Test against current element. */ + if (equals != NULL ? equals (elt, node->value) : elt == node->value) + return index; + index++; + if (index >= end_index) + return (size_t)(-1); + /* Descend on right branch. */ + stack_ptr->rightp = 1; + node = node->right; + stack_ptr++; + } + } + else + { + /* Consider only elements at indices >= start_index. + In this case, rightp contains the difference between the start_index + for the parent node and the one for the child node (0 when the child + node is the parent's left child, > 0 when the child is the parent's + right child). */ + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + if (node->branch_size <= start_index) + break; + stack_ptr->node = node; + stack_ptr->rightp = 0; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + return (size_t)(-1); + stack_ptr--; + if (!stack_ptr->rightp) + break; + start_index += stack_ptr->rightp; + } + node = stack_ptr->node; + { + size_t left_branch_size1 = + (node->left != NULL ? node->left->branch_size : 0) + 1; + if (start_index < left_branch_size1) + { + /* Test against current element. */ + if (equals != NULL ? equals (elt, node->value) : elt == node->value) + return index; + /* Now that we have considered all indices < left_branch_size1, + we can increment start_index. */ + start_index = left_branch_size1; + } + index++; + if (index >= end_index) + return (size_t)(-1); + /* Descend on right branch. */ + start_index -= left_branch_size1; + stack_ptr->rightp = left_branch_size1; + } + node = node->right; + stack_ptr++; + } + } + } +} + +#endif + +static gl_list_node_t +gl_tree_nx_add_at (gl_list_t list, size_t position, const void *elt) +{ + size_t count = (list->root != NULL ? list->root->branch_size : 0); + + if (!(position <= count)) + /* Invalid argument. */ + abort (); + if (position == count) + return gl_tree_nx_add_last (list, elt); + else + return gl_tree_nx_add_before (list, node_at (list->root, position), elt); +} + +static bool +gl_tree_remove_node (gl_list_t list, gl_list_node_t node) +{ +#if WITH_HASHTABLE + /* Remove node from the hash table. + Note that this is only possible _before_ the node is removed from the + tree structure, because remove_from_bucket() uses node_position(). */ + remove_from_bucket (list, node); +#endif + + gl_tree_remove_node_from_tree (list, node); + + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (node->value); + free (node); + return true; +} + +static bool +gl_tree_remove_at (gl_list_t list, size_t position) +{ + gl_list_node_t node = list->root; + + if (!(node != NULL && position < node->branch_size)) + /* Invalid argument. */ + abort (); + node = node_at (node, position); + return gl_tree_remove_node (list, node); +} + +static bool +gl_tree_remove (gl_list_t list, const void *elt) +{ + if (list->root != NULL) + { + gl_list_node_t node = + gl_tree_search_from_to (list, 0, list->root->branch_size, elt); + + if (node != NULL) + return gl_tree_remove_node (list, node); + } + return false; +} + +#if !WITH_HASHTABLE + +static void +gl_tree_list_free (gl_list_t list) +{ + /* Iterate across all elements in post-order. */ + gl_list_node_t node = list->root; + iterstack_t stack; + iterstack_item_t *stack_ptr = &stack[0]; + + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + stack_ptr->node = node; + stack_ptr->rightp = false; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + goto done_iterate; + stack_ptr--; + node = stack_ptr->node; + if (!stack_ptr->rightp) + break; + /* Free the current node. */ + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (node->value); + free (node); + } + /* Descend on right branch. */ + stack_ptr->rightp = true; + node = node->right; + stack_ptr++; + } + done_iterate: + free (list); +} + +#endif + +/* --------------------- gl_list_iterator_t Data Type --------------------- */ + +static gl_list_iterator_t _GL_ATTRIBUTE_PURE +gl_tree_iterator (gl_list_t list) +{ + gl_list_iterator_t result; + gl_list_node_t node; + + result.vtable = list->base.vtable; + result.list = list; + /* Start node is the leftmost node. */ + node = list->root; + if (node != NULL) + while (node->left != NULL) + node = node->left; + result.p = node; + /* End point is past the rightmost node. */ + result.q = NULL; +#if defined GCC_LINT || defined lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + return result; +} + +static gl_list_iterator_t _GL_ATTRIBUTE_PURE +gl_tree_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) +{ + size_t count = (list->root != NULL ? list->root->branch_size : 0); + gl_list_iterator_t result; + + if (!(start_index <= end_index && end_index <= count)) + /* Invalid arguments. */ + abort (); + result.vtable = list->base.vtable; + result.list = list; + /* Start node is the node at position start_index. */ + result.p = (start_index < count ? node_at (list->root, start_index) : NULL); + /* End point is the node at position end_index. */ + result.q = (end_index < count ? node_at (list->root, end_index) : NULL); +#if defined GCC_LINT || defined lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + return result; +} + +static bool +gl_tree_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep) +{ + if (iterator->p != iterator->q) + { + gl_list_node_t node = (gl_list_node_t) iterator->p; + *eltp = node->value; + if (nodep != NULL) + *nodep = node; + /* Advance to the next node. */ + if (node->right != NULL) + { + node = node->right; + while (node->left != NULL) + node = node->left; + } + else + { + while (node->parent != NULL && node->parent->right == node) + node = node->parent; + node = node->parent; + } + iterator->p = node; + return true; + } + else + return false; +} + +static void +gl_tree_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_iterator_t *iterator) +{ +} + +/* ---------------------- Sorted gl_list_t Data Type ---------------------- */ + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_tree_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + + for (node = list->root; node != NULL; ) + { + int cmp = compar (node->value, elt); + + if (cmp < 0) + node = node->right; + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + { + /* We have an element equal to ELT. But we need the leftmost such + element. */ + gl_list_node_t found = node; + node = node->left; + for (; node != NULL; ) + { + int cmp2 = compar (node->value, elt); + + if (cmp2 < 0) + node = node->right; + else if (cmp2 > 0) + /* The list was not sorted. */ + abort (); + else /* cmp2 == 0 */ + { + found = node; + node = node->left; + } + } + return found; + } + } + return NULL; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_tree_sortedlist_search_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + gl_list_node_t node; + + if (!(low <= high + && high <= (list->root != NULL ? list->root->branch_size : 0))) + /* Invalid arguments. */ + abort (); + + for (node = list->root; node != NULL; ) + { + size_t left_branch_size = + (node->left != NULL ? node->left->branch_size : 0); + + if (low > left_branch_size) + { + low -= left_branch_size + 1; + high -= left_branch_size + 1; + node = node->right; + } + else if (high <= left_branch_size) + node = node->left; + else + { + /* Here low <= left_branch_size < high. */ + int cmp = compar (node->value, elt); + + if (cmp < 0) + { + low = 0; + high -= left_branch_size + 1; + node = node->right; + } + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + { + /* We have an element equal to ELT. But we need the leftmost + such element. */ + gl_list_node_t found = node; + node = node->left; + for (; node != NULL; ) + { + size_t left_branch_size2 = + (node->left != NULL ? node->left->branch_size : 0); + + if (low > left_branch_size2) + { + low -= left_branch_size2 + 1; + node = node->right; + } + else + { + /* Here low <= left_branch_size2. */ + int cmp2 = compar (node->value, elt); + + if (cmp2 < 0) + { + low = 0; + node = node->right; + } + else if (cmp2 > 0) + /* The list was not sorted. */ + abort (); + else /* cmp2 == 0 */ + { + found = node; + node = node->left; + } + } + } + return found; + } + } + } + return NULL; +} + +static size_t _GL_ATTRIBUTE_PURE +gl_tree_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + size_t position; + + for (node = list->root, position = 0; node != NULL; ) + { + int cmp = compar (node->value, elt); + + if (cmp < 0) + { + if (node->left != NULL) + position += node->left->branch_size; + position++; + node = node->right; + } + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + { + /* We have an element equal to ELT. But we need the leftmost such + element. */ + size_t found_position = + position + (node->left != NULL ? node->left->branch_size : 0); + node = node->left; + for (; node != NULL; ) + { + int cmp2 = compar (node->value, elt); + + if (cmp2 < 0) + { + if (node->left != NULL) + position += node->left->branch_size; + position++; + node = node->right; + } + else if (cmp2 > 0) + /* The list was not sorted. */ + abort (); + else /* cmp2 == 0 */ + { + found_position = + position + + (node->left != NULL ? node->left->branch_size : 0); + node = node->left; + } + } + return found_position; + } + } + return (size_t)(-1); +} + +static size_t _GL_ATTRIBUTE_PURE +gl_tree_sortedlist_indexof_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + gl_list_node_t node; + size_t position; + + if (!(low <= high + && high <= (list->root != NULL ? list->root->branch_size : 0))) + /* Invalid arguments. */ + abort (); + + for (node = list->root, position = 0; node != NULL; ) + { + size_t left_branch_size = + (node->left != NULL ? node->left->branch_size : 0); + + if (low > left_branch_size) + { + low -= left_branch_size + 1; + high -= left_branch_size + 1; + position += left_branch_size + 1; + node = node->right; + } + else if (high <= left_branch_size) + node = node->left; + else + { + /* Here low <= left_branch_size < high. */ + int cmp = compar (node->value, elt); + + if (cmp < 0) + { + low = 0; + high -= left_branch_size + 1; + position += left_branch_size + 1; + node = node->right; + } + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + { + /* We have an element equal to ELT. But we need the leftmost + such element. */ + size_t found_position = + position + (node->left != NULL ? node->left->branch_size : 0); + node = node->left; + for (; node != NULL; ) + { + size_t left_branch_size2 = + (node->left != NULL ? node->left->branch_size : 0); + + if (low > left_branch_size2) + { + low -= left_branch_size2 + 1; + node = node->right; + } + else + { + /* Here low <= left_branch_size2. */ + int cmp2 = compar (node->value, elt); + + if (cmp2 < 0) + { + position += left_branch_size2 + 1; + node = node->right; + } + else if (cmp2 > 0) + /* The list was not sorted. */ + abort (); + else /* cmp2 == 0 */ + { + found_position = position + left_branch_size2; + node = node->left; + } + } + } + return found_position; + } + } + } + return (size_t)(-1); +} + +static gl_list_node_t +gl_tree_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node = list->root; + + if (node == NULL) + return gl_tree_nx_add_first (list, elt); + + for (;;) + { + int cmp = compar (node->value, elt); + + if (cmp < 0) + { + if (node->right == NULL) + return gl_tree_nx_add_after (list, node, elt); + node = node->right; + } + else if (cmp > 0) + { + if (node->left == NULL) + return gl_tree_nx_add_before (list, node, elt); + node = node->left; + } + else /* cmp == 0 */ + return gl_tree_nx_add_before (list, node, elt); + } +} + +static bool +gl_tree_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node = gl_tree_sortedlist_search (list, compar, elt); + if (node != NULL) + return gl_tree_remove_node (list, node); + else + return false; +} diff --git a/include/libgnulib/gl_anytree_omap.h b/include/libgnulib/gl_anytree_omap.h new file mode 100755 index 0000000..03403f4 --- /dev/null +++ b/include/libgnulib/gl_anytree_omap.h @@ -0,0 +1,305 @@ +/* Ordered map data type implemented by a binary tree. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_avltree_omap.c and gl_rbtree_omap.c. */ + +/* An item on the stack used for iterating across the elements. */ +typedef struct +{ + gl_omap_node_t node; + bool rightp; +} iterstack_item_t; + +/* A stack used for iterating across the elements. */ +typedef iterstack_item_t iterstack_t[MAXHEIGHT]; + +static gl_omap_t +gl_tree_nx_create_empty (gl_omap_implementation_t implementation, + gl_mapkey_compar_fn compar_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) +{ + struct gl_omap_impl *map = + (struct gl_omap_impl *) malloc (sizeof (struct gl_omap_impl)); + + if (map == NULL) + return NULL; + + map->base.vtable = implementation; + map->base.compar_fn = compar_fn; + map->base.kdispose_fn = kdispose_fn; + map->base.vdispose_fn = vdispose_fn; + map->root = NULL; + map->count = 0; + + return map; +} + +static size_t _GL_ATTRIBUTE_PURE +gl_tree_size (gl_omap_t map) +{ + return map->count; +} + +static bool +gl_tree_search (gl_omap_t map, const void *key, const void **valuep) +{ + gl_mapkey_compar_fn compar = map->base.compar_fn; + gl_omap_node_t node; + + for (node = map->root; node != NULL; ) + { + int cmp = (compar != NULL + ? compar (node->key, key) + : (node->key > key ? 1 : + node->key < key ? -1 : 0)); + + if (cmp < 0) + node = node->right; + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + { + /* We have a key equal to KEY. */ + *valuep = node->value; + return true; + } + } + return false; +} + +static bool +gl_tree_search_atleast (gl_omap_t map, + gl_mapkey_threshold_fn threshold_fn, + const void *threshold, + const void **keyp, const void **valuep) +{ + gl_omap_node_t node; + + for (node = map->root; node != NULL; ) + { + if (! threshold_fn (node->key, threshold)) + node = node->right; + else + { + /* We have a key >= THRESHOLD. But we need the leftmost such + element. */ + gl_omap_node_t found = node; + node = node->left; + for (; node != NULL; ) + { + if (! threshold_fn (node->key, threshold)) + node = node->right; + else + { + found = node; + node = node->left; + } + } + *keyp = found->key; + *valuep = found->value; + return true; + } + } + return false; +} + +static int +gl_tree_nx_getput (gl_omap_t map, const void *key, const void *value, + const void **oldvaluep) +{ + gl_mapkey_compar_fn compar; + gl_omap_node_t node = map->root; + + if (node == NULL) + { + if (gl_tree_nx_add_first (map, key, value) == NULL) + return -1; + return 1; + } + + compar = map->base.compar_fn; + + for (;;) + { + int cmp = (compar != NULL + ? compar (node->key, key) + : (node->key > key ? 1 : + node->key < key ? -1 : 0)); + + if (cmp < 0) + { + if (node->right == NULL) + { + if (gl_tree_nx_add_after (map, node, key, value) == NULL) + return -1; + return 1; + } + node = node->right; + } + else if (cmp > 0) + { + if (node->left == NULL) + { + if (gl_tree_nx_add_before (map, node, key, value) == NULL) + return -1; + return 1; + } + node = node->left; + } + else /* cmp == 0 */ + { + *oldvaluep = node->value; + node->value = value; + return 0; + } + } +} + +static bool +gl_tree_getremove (gl_omap_t map, const void *key, const void **oldvaluep) +{ + gl_mapkey_compar_fn compar = map->base.compar_fn; + gl_omap_node_t node; + + for (node = map->root; node != NULL; ) + { + int cmp = (compar != NULL + ? compar (node->key, key) + : (node->key > key ? 1 : + node->key < key ? -1 : 0)); + + if (cmp < 0) + node = node->right; + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + { + /* We have a key equal to KEY. */ + *oldvaluep = node->value; + gl_tree_remove_node (map, node); + return true; + } + } + return false; +} + +static void +gl_tree_omap_free (gl_omap_t map) +{ + /* Iterate across all elements in post-order. */ + gl_omap_node_t node = map->root; + iterstack_t stack; + iterstack_item_t *stack_ptr = &stack[0]; + + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + stack_ptr->node = node; + stack_ptr->rightp = false; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + goto done_iterate; + stack_ptr--; + node = stack_ptr->node; + if (!stack_ptr->rightp) + break; + /* Free the current node. */ + if (map->base.vdispose_fn != NULL) + map->base.vdispose_fn (node->value); + if (map->base.kdispose_fn != NULL) + map->base.kdispose_fn (node->key); + free (node); + } + /* Descend on right branch. */ + stack_ptr->rightp = true; + node = node->right; + stack_ptr++; + } + done_iterate: + free (map); +} + +/* --------------------- gl_omap_iterator_t Data Type --------------------- */ + +static gl_omap_iterator_t _GL_ATTRIBUTE_PURE +gl_tree_iterator (gl_omap_t map) +{ + gl_omap_iterator_t result; + gl_omap_node_t node; + + result.vtable = map->base.vtable; + result.map = map; + /* Start node is the leftmost node. */ + node = map->root; + if (node != NULL) + while (node->left != NULL) + node = node->left; + result.p = node; + /* End point is past the rightmost node. */ + result.q = NULL; +#if defined GCC_LINT || defined lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + return result; +} + +static bool +gl_tree_iterator_next (gl_omap_iterator_t *iterator, + const void **keyp, const void **valuep) +{ + if (iterator->p != iterator->q) + { + gl_omap_node_t node = (gl_omap_node_t) iterator->p; + *keyp = node->key; + *valuep = node->value; + /* Advance to the next node. */ + if (node->right != NULL) + { + node = node->right; + while (node->left != NULL) + node = node->left; + } + else + { + while (node->parent != NULL && node->parent->right == node) + node = node->parent; + node = node->parent; + } + iterator->p = node; + return true; + } + else + return false; +} + +static void +gl_tree_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_omap_iterator_t *iterator) +{ +} diff --git a/include/libgnulib/gl_anytree_oset.h b/include/libgnulib/gl_anytree_oset.h new file mode 100755 index 0000000..9cada84 --- /dev/null +++ b/include/libgnulib/gl_anytree_oset.h @@ -0,0 +1,443 @@ +/* Ordered set data type implemented by a binary tree. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Common code of gl_avltree_oset.c and gl_rbtree_oset.c. */ + +/* An item on the stack used for iterating across the elements. */ +typedef struct +{ + gl_oset_node_t node; + bool rightp; +} iterstack_item_t; + +/* A stack used for iterating across the elements. */ +typedef iterstack_item_t iterstack_t[MAXHEIGHT]; + +static gl_oset_t +gl_tree_nx_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) +{ + struct gl_oset_impl *set = + (struct gl_oset_impl *) malloc (sizeof (struct gl_oset_impl)); + + if (set == NULL) + return NULL; + + set->base.vtable = implementation; + set->base.compar_fn = compar_fn; + set->base.dispose_fn = dispose_fn; + set->root = NULL; + set->count = 0; + + return set; +} + +static size_t _GL_ATTRIBUTE_PURE +gl_tree_size (gl_oset_t set) +{ + return set->count; +} + +/* Returns the next node in the tree, or NULL if there is none. */ +static inline gl_oset_node_t _GL_ATTRIBUTE_PURE +gl_tree_next_node (gl_oset_node_t node) +{ + if (node->right != NULL) + { + node = node->right; + while (node->left != NULL) + node = node->left; + } + else + { + while (node->parent != NULL && node->parent->right == node) + node = node->parent; + node = node->parent; + } + return node; +} + +/* Returns the previous node in the tree, or NULL if there is none. */ +static inline gl_oset_node_t _GL_ATTRIBUTE_PURE +gl_tree_prev_node (gl_oset_node_t node) +{ + if (node->left != NULL) + { + node = node->left; + while (node->right != NULL) + node = node->right; + } + else + { + while (node->parent != NULL && node->parent->left == node) + node = node->parent; + node = node->parent; + } + return node; +} + +static bool +gl_tree_search (gl_oset_t set, const void *elt) +{ + gl_setelement_compar_fn compar = set->base.compar_fn; + gl_oset_node_t node; + + for (node = set->root; node != NULL; ) + { + int cmp = (compar != NULL + ? compar (node->value, elt) + : (node->value > elt ? 1 : + node->value < elt ? -1 : 0)); + + if (cmp < 0) + node = node->right; + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + /* We have an element equal to ELT. */ + return true; + } + return false; +} + +static bool +gl_tree_search_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, + const void **eltp) +{ + gl_oset_node_t node; + + for (node = set->root; node != NULL; ) + { + if (! threshold_fn (node->value, threshold)) + node = node->right; + else + { + /* We have an element >= THRESHOLD. But we need the leftmost such + element. */ + gl_oset_node_t found = node; + node = node->left; + for (; node != NULL; ) + { + if (! threshold_fn (node->value, threshold)) + node = node->right; + else + { + found = node; + node = node->left; + } + } + *eltp = found->value; + return true; + } + } + return false; +} + +static gl_oset_node_t +gl_tree_search_node (gl_oset_t set, const void *elt) +{ + gl_setelement_compar_fn compar = set->base.compar_fn; + gl_oset_node_t node; + + for (node = set->root; node != NULL; ) + { + int cmp = (compar != NULL + ? compar (node->value, elt) + : (node->value > elt ? 1 : + node->value < elt ? -1 : 0)); + + if (cmp < 0) + node = node->right; + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + /* We have an element equal to ELT. */ + return node; + } + return NULL; +} + +static int +gl_tree_nx_add (gl_oset_t set, const void *elt) +{ + gl_setelement_compar_fn compar; + gl_oset_node_t node = set->root; + + if (node == NULL) + { + if (gl_tree_nx_add_first (set, elt) == NULL) + return -1; + return true; + } + + compar = set->base.compar_fn; + + for (;;) + { + int cmp = (compar != NULL + ? compar (node->value, elt) + : (node->value > elt ? 1 : + node->value < elt ? -1 : 0)); + + if (cmp < 0) + { + if (node->right == NULL) + { + if (gl_tree_nx_add_after (set, node, elt) == NULL) + return -1; + return true; + } + node = node->right; + } + else if (cmp > 0) + { + if (node->left == NULL) + { + if (gl_tree_nx_add_before (set, node, elt) == NULL) + return -1; + return true; + } + node = node->left; + } + else /* cmp == 0 */ + return false; + } +} + +static bool +gl_tree_remove (gl_oset_t set, const void *elt) +{ + gl_oset_node_t node = gl_tree_search_node (set, elt); + + if (node != NULL) + return gl_tree_remove_node (set, node); + else + return false; +} + +static int +gl_tree_update (gl_oset_t set, const void *elt, + void (*action) (const void * /*elt*/, void * /*action_data*/), + void *action_data) +{ + /* Like gl_tree_remove, action (...), gl_tree_nx_add, except that we don't + actually remove ELT. */ + /* Remember the old node. Don't free it. */ + gl_oset_node_t old_node = gl_tree_search_node (set, elt); + /* Invoke ACTION. */ + action (elt, action_data); + /* Determine where to put the node now. */ + if (old_node != NULL) + { + if (set->count > 1) + { + gl_setelement_compar_fn compar = set->base.compar_fn; + + gl_oset_node_t prev_node = gl_tree_prev_node (old_node); + gl_oset_node_t next_node = gl_tree_next_node (old_node); + if (!(compar != NULL + ? (prev_node == NULL || compar (prev_node->value, elt) < 0) + && (next_node == NULL || compar (next_node->value, elt) > 0) + : (prev_node == NULL || prev_node->value < elt) + && (next_node == NULL || next_node->value > elt))) + { + /* old_node needs to move in the tree. */ + gl_oset_node_t node; + + /* Remove the node from the tree. Don't free it. */ + gl_tree_remove_node_no_free (set, old_node); + + node = set->root; + + for (;;) + { + int cmp = (compar != NULL + ? compar (node->value, elt) + : (node->value > elt ? 1 : + node->value < elt ? -1 : 0)); + + if (cmp < 0) + { + if (node->right == NULL) + { + gl_tree_add_node_after (set, node, old_node); + return true; + } + node = node->right; + } + else if (cmp > 0) + { + if (node->left == NULL) + { + gl_tree_add_node_before (set, node, old_node); + return true; + } + node = node->left; + } + else /* cmp == 0 */ + { + /* Two elements are the same. */ + NODE_PAYLOAD_DISPOSE (set, old_node) + free (old_node); + return -1; + } + } + } + } + } + return 0; +} + +static void +gl_tree_oset_free (gl_oset_t set) +{ + /* Iterate across all elements in post-order. */ + gl_oset_node_t node = set->root; + iterstack_t stack; + iterstack_item_t *stack_ptr = &stack[0]; + + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + stack_ptr->node = node; + stack_ptr->rightp = false; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + goto done_iterate; + stack_ptr--; + node = stack_ptr->node; + if (!stack_ptr->rightp) + break; + /* Free the current node. */ + if (set->base.dispose_fn != NULL) + set->base.dispose_fn (node->value); + free (node); + } + /* Descend on right branch. */ + stack_ptr->rightp = true; + node = node->right; + stack_ptr++; + } + done_iterate: + free (set); +} + +/* --------------------- gl_oset_iterator_t Data Type --------------------- */ + +static gl_oset_iterator_t _GL_ATTRIBUTE_PURE +gl_tree_iterator (gl_oset_t set) +{ + gl_oset_iterator_t result; + gl_oset_node_t node; + + result.vtable = set->base.vtable; + result.set = set; + /* Start node is the leftmost node. */ + node = set->root; + if (node != NULL) + while (node->left != NULL) + node = node->left; + result.p = node; + /* End point is past the rightmost node. */ + result.q = NULL; +#if defined GCC_LINT || defined lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + return result; +} + +static gl_oset_iterator_t +gl_tree_iterator_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold) +{ + gl_oset_iterator_t result; + gl_oset_node_t node; + + result.vtable = set->base.vtable; + result.set = set; + /* End point is past the rightmost node. */ + result.q = NULL; +#if defined GCC_LINT || defined lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + for (node = set->root; node != NULL; ) + { + if (! threshold_fn (node->value, threshold)) + node = node->right; + else + { + /* We have an element >= THRESHOLD. But we need the leftmost such + element. */ + gl_oset_node_t found = node; + node = node->left; + for (; node != NULL; ) + { + if (! threshold_fn (node->value, threshold)) + node = node->right; + else + { + found = node; + node = node->left; + } + } + result.p = found; + return result; + } + } + result.p = NULL; + return result; +} + +static bool +gl_tree_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) +{ + if (iterator->p != iterator->q) + { + gl_oset_node_t node = (gl_oset_node_t) iterator->p; + *eltp = node->value; + /* Advance to the next node. */ + node = gl_tree_next_node (node); + iterator->p = node; + return true; + } + else + return false; +} + +static void +gl_tree_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_oset_iterator_t *iterator) +{ +} diff --git a/include/libgnulib/gl_anytreehash_list1.h b/include/libgnulib/gl_anytreehash_list1.h new file mode 100755 index 0000000..1f83fee --- /dev/null +++ b/include/libgnulib/gl_anytreehash_list1.h @@ -0,0 +1,346 @@ +/* Sequential list data type implemented by a hash table with a binary tree. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +/* Common code of gl_avltreehash_list.c and gl_rbtreehash_list.c. */ + +/* Hash table entry representing the same value at more than one position. */ +struct gl_multiple_nodes +{ + struct gl_hash_entry h; /* hash table entry fields; must be first */ + void *magic; /* used to distinguish from single node */ + gl_oset_t nodes; /* set of nodes, sorted by position */ +}; +/* A value that cannot occur at the corresponding field (->left) in + gl_list_node_impl. */ +#define MULTIPLE_NODES_MAGIC (void *) -1 + +/* Returns the position of the given node in the tree. */ +static size_t _GL_ATTRIBUTE_PURE +node_position (gl_list_node_t node) +{ + size_t position = 0; + + if (node->left != NULL) + position += node->left->branch_size; + for (;;) + { + gl_list_node_t parent = node->parent; + + if (parent == NULL) + return position; + /* position is now relative to the subtree of node. */ + if (parent->right == node) + { + position += 1; + if (parent->left != NULL) + position += parent->left->branch_size; + } + /* position is now relative to the subtree of parent. */ + node = parent; + } +} + +/* Compares two nodes by their position in the tree. */ +static int _GL_ATTRIBUTE_PURE +compare_by_position (const void *x1, const void *x2) +{ + gl_list_node_t node1 = (gl_list_node_t) x1; + gl_list_node_t node2 = (gl_list_node_t) x2; + size_t position1 = node_position (node1); + size_t position2 = node_position (node2); + + return (position1 > position2 ? 1 : + position1 < position2 ? -1 : 0); +} + +/* Compares a node's position in the tree with a given threshold. */ +static bool _GL_ATTRIBUTE_PURE +compare_position_threshold (const void *x, const void *threshold) +{ + gl_list_node_t node = (gl_list_node_t) x; + size_t position = node_position (node); + return (position >= (uintptr_t)threshold); +} + +/* Returns the first element of a non-empty ordered set of nodes. */ +static gl_list_node_t +gl_oset_first (gl_oset_t set) +{ + gl_oset_iterator_t iter = gl_oset_iterator (set); + const void *first; + + if (!gl_oset_iterator_next (&iter, &first)) + abort (); + gl_oset_iterator_free (&iter); + return (gl_list_node_t) first; +} + +/* Adds a node to the hash table structure. + If duplicates are allowed, this function performs in average time + O((log n)^2): gl_oset_nx_add may need to add an element to an ordered set + of size O(n), needing O(log n) comparison function calls. The comparison + function is compare_by_position, which is O(log n) worst-case. + If duplicates are forbidden, this function is O(1). + Return 0 upon success, -1 upon out-of-memory. */ +static int +add_to_bucket (gl_list_t list, gl_list_node_t new_node) +{ + size_t bucket = new_node->h.hashcode % list->table_size; + + /* If no duplicates are allowed, multiple nodes are not needed. */ + if (list->base.allow_duplicates) + { + size_t hashcode = new_node->h.hashcode; + const void *value = new_node->value; + gl_listelement_equals_fn equals = list->base.equals_fn; + gl_hash_entry_t *entryp; + + for (entryp = &list->table[bucket]; *entryp != NULL; entryp = &(*entryp)->hash_next) + { + gl_hash_entry_t entry = *entryp; + + if (entry->hashcode == hashcode) + { + if (((struct gl_multiple_nodes *) entry)->magic == MULTIPLE_NODES_MAGIC) + { + /* An entry representing multiple nodes. */ + gl_oset_t nodes = ((struct gl_multiple_nodes *) entry)->nodes; + /* Only the first node is interesting. */ + gl_list_node_t node = gl_oset_first (nodes); + if (equals != NULL ? equals (value, node->value) : value == node->value) + { + /* Found already multiple nodes with the same value. + Add the new_node to it. */ + return gl_oset_nx_add (nodes, new_node); + } + } + else + { + /* An entry representing a single node. */ + gl_list_node_t node = (struct gl_list_node_impl *) entry; + if (equals != NULL ? equals (value, node->value) : value == node->value) + { + /* Found already a node with the same value. Turn it + into an ordered set, and add new_node to it. */ + gl_oset_t nodes; + struct gl_multiple_nodes *multi_entry; + + nodes = + gl_oset_nx_create_empty (OSET_TREE_FLAVOR, + compare_by_position, NULL); + if (nodes == NULL) + return -1; + + if (gl_oset_nx_add (nodes, node) < 0) + goto fail; + if (gl_oset_nx_add (nodes, new_node) < 0) + goto fail; + + multi_entry = + (struct gl_multiple_nodes *) malloc (sizeof (struct gl_multiple_nodes)); + if (multi_entry == NULL) + goto fail; + multi_entry->h.hash_next = entry->hash_next; + multi_entry->h.hashcode = entry->hashcode; + multi_entry->magic = MULTIPLE_NODES_MAGIC; + multi_entry->nodes = nodes; + *entryp = &multi_entry->h; + return 0; + + fail: + gl_oset_free (nodes); + return -1; + } + } + } + } + } + /* If no duplicates are allowed, multiple nodes are not needed. */ + new_node->h.hash_next = list->table[bucket]; + list->table[bucket] = &new_node->h; + return 0; +} +/* Tell GCC that the likely return value is 0. */ +#define add_to_bucket(list,node) \ + __builtin_expect ((add_to_bucket) (list, node), 0) + +/* Removes a node from the hash table structure. + If duplicates are allowed, this function performs in average time + O((log n)^2): gl_oset_remove may need to remove an element from an ordered + set of size O(n), needing O(log n) comparison function calls. The + comparison function is compare_by_position, which is O(log n) worst-case. + If duplicates are forbidden, this function is O(1) on average. */ +static void +remove_from_bucket (gl_list_t list, gl_list_node_t old_node) +{ + size_t bucket = old_node->h.hashcode % list->table_size; + + if (list->base.allow_duplicates) + { + size_t hashcode = old_node->h.hashcode; + const void *value = old_node->value; + gl_listelement_equals_fn equals = list->base.equals_fn; + gl_hash_entry_t *entryp; + + for (entryp = &list->table[bucket]; ; entryp = &(*entryp)->hash_next) + { + gl_hash_entry_t entry = *entryp; + + if (entry == &old_node->h) + { + /* Found old_node as a single node in the bucket. Remove it. */ + *entryp = old_node->h.hash_next; + break; + } + if (entry == NULL) + /* node is not in the right bucket. Did the hash codes + change inadvertently? */ + abort (); + if (((struct gl_multiple_nodes *) entry)->magic == MULTIPLE_NODES_MAGIC + && entry->hashcode == hashcode) + { + /* An entry representing multiple nodes. */ + gl_oset_t nodes = ((struct gl_multiple_nodes *) entry)->nodes; + /* Only the first node is interesting. */ + gl_list_node_t node = gl_oset_first (nodes); + if (equals != NULL ? equals (value, node->value) : value == node->value) + { + /* Found multiple nodes with the same value. + old_node must be one of them. Remove it. */ + if (!gl_oset_remove (nodes, old_node)) + abort (); + if (gl_oset_size (nodes) == 1) + { + /* Replace a one-element set with a single node. */ + node = gl_oset_first (nodes); + node->h.hash_next = entry->hash_next; + *entryp = &node->h; + gl_oset_free (nodes); + free (entry); + } + break; + } + } + } + } + else + { + /* If no duplicates are allowed, multiple nodes are not needed. */ + gl_hash_entry_t *entryp; + + for (entryp = &list->table[bucket]; ; entryp = &(*entryp)->hash_next) + { + if (*entryp == &old_node->h) + { + *entryp = old_node->h.hash_next; + break; + } + if (*entryp == NULL) + /* node is not in the right bucket. Did the hash codes + change inadvertently? */ + abort (); + } + } +} + +/* Builds up the hash table during initialization: Stores all the nodes of + list->root in the hash table. + Returns 0 upon success, -1 upon out-of-memory. */ +static int +add_nodes_to_buckets (gl_list_t list) +{ + /* Iterate across all nodes. */ + gl_list_node_t node = list->root; + iterstack_t stack; + iterstack_item_t *stack_ptr = &stack[0]; + + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + stack_ptr->node = node; + stack_ptr->rightp = false; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + goto done; + stack_ptr--; + if (!stack_ptr->rightp) + break; + } + node = stack_ptr->node; + /* Add the current node to the hash table. */ + node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (node->value) + : (size_t)(uintptr_t) node->value); + if (add_to_bucket (list, node) < 0) + goto fail; + /* Descend on right branch. */ + stack_ptr->rightp = true; + node = node->right; + stack_ptr++; + } + done: + return 0; + + fail: + /* Undo everything. */ + for (;;) + { + /* Descend on left branch. */ + stack_ptr->rightp = false; + node = node->left; + stack_ptr++; + /* Descend on right branch. */ + for (;;) + { + if (node == NULL) + break; + stack_ptr->node = node; + stack_ptr->rightp = true; + node = node->right; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + goto fail_done; + stack_ptr--; + if (stack_ptr->rightp) + break; + } + node = stack_ptr->node; + /* Remove the current node from the hash table. */ + remove_from_bucket (list, node); + } + fail_done: + return -1; +} +/* Tell GCC that the likely return value is 0. */ +#if (__GNUC__ >= 3) || (__clang_major__ >= 4) +# define add_nodes_to_buckets(list) \ + __builtin_expect ((add_nodes_to_buckets) (list), 0) +#endif diff --git a/include/libgnulib/gl_anytreehash_list2.h b/include/libgnulib/gl_anytreehash_list2.h new file mode 100755 index 0000000..4873f09 --- /dev/null +++ b/include/libgnulib/gl_anytreehash_list2.h @@ -0,0 +1,213 @@ +/* Sequential list data type implemented by a hash table with a binary tree. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +/* Common code of gl_avltreehash_list.c and gl_rbtreehash_list.c. */ + +static gl_list_node_t +gl_tree_search_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + if (!(start_index <= end_index + && end_index <= (list->root != NULL ? list->root->branch_size : 0))) + /* Invalid arguments. */ + abort (); + { + size_t hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + size_t bucket = hashcode % list->table_size; + gl_listelement_equals_fn equals = list->base.equals_fn; + gl_hash_entry_t entry; + + if (list->base.allow_duplicates) + { + for (entry = list->table[bucket]; entry != NULL; entry = entry->hash_next) + if (entry->hashcode == hashcode) + { + if (((struct gl_multiple_nodes *) entry)->magic == MULTIPLE_NODES_MAGIC) + { + /* An entry representing multiple nodes. */ + gl_oset_t nodes = ((struct gl_multiple_nodes *) entry)->nodes; + /* The first node is interesting. */ + gl_list_node_t node = gl_oset_first (nodes); + if (equals != NULL ? equals (elt, node->value) : elt == node->value) + { + /* All nodes in the entry are equal to the given ELT. */ + if (start_index == 0) + { + /* We have to return only the one at the minimal + position, and this is the first one in the ordered + set. */ + if (end_index == list->root->branch_size + || node_position (node) < end_index) + return node; + } + else + { + /* We have to return only the one at the minimal + position >= start_index. */ + const void *nodes_elt; + if (gl_oset_search_atleast (nodes, + compare_position_threshold, + (void *)(uintptr_t)start_index, + &nodes_elt)) + { + node = (gl_list_node_t) nodes_elt; + if (end_index == list->root->branch_size + || node_position (node) < end_index) + return node; + } + } + break; + } + } + else + { + /* An entry representing a single node. */ + gl_list_node_t node = (struct gl_list_node_impl *) entry; + if (equals != NULL ? equals (elt, node->value) : elt == node->value) + { + bool position_in_bounds; + if (start_index == 0 && end_index == list->root->branch_size) + position_in_bounds = true; + else + { + size_t position = node_position (node); + position_in_bounds = + (position >= start_index && position < end_index); + } + if (position_in_bounds) + return node; + break; + } + } + } + } + else + { + /* If no duplicates are allowed, multiple nodes are not needed. */ + for (entry = list->table[bucket]; entry != NULL; entry = entry->hash_next) + if (entry->hashcode == hashcode) + { + gl_list_node_t node = (struct gl_list_node_impl *) entry; + if (equals != NULL ? equals (elt, node->value) : elt == node->value) + { + bool position_in_bounds; + if (start_index == 0 && end_index == list->root->branch_size) + position_in_bounds = true; + else + { + size_t position = node_position (node); + position_in_bounds = + (position >= start_index && position < end_index); + } + if (position_in_bounds) + return node; + break; + } + } + } + + return NULL; + } +} + +static size_t +gl_tree_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + gl_list_node_t node = + gl_tree_search_from_to (list, start_index, end_index, elt); + + if (node != NULL) + return node_position (node); + else + return (size_t)(-1); +} + +static void +gl_tree_list_free (gl_list_t list) +{ + if (list->base.allow_duplicates) + { + /* Free the ordered sets in the hash buckets. */ + size_t i; + + for (i = list->table_size; i > 0; ) + { + gl_hash_entry_t entry = list->table[--i]; + + while (entry != NULL) + { + gl_hash_entry_t next = entry->hash_next; + + if (((struct gl_multiple_nodes *) entry)->magic == MULTIPLE_NODES_MAGIC) + { + gl_oset_t nodes = ((struct gl_multiple_nodes *) entry)->nodes; + + gl_oset_free (nodes); + free (entry); + } + + entry = next; + } + } + } + + /* Iterate across all elements in post-order. */ + { + gl_list_node_t node = list->root; + iterstack_t stack; + iterstack_item_t *stack_ptr = &stack[0]; + + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + stack_ptr->node = node; + stack_ptr->rightp = false; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + goto done_iterate; + stack_ptr--; + node = stack_ptr->node; + if (!stack_ptr->rightp) + break; + /* Free the current node. */ + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (node->value); + free (node); + } + /* Descend on right branch. */ + stack_ptr->rightp = true; + node = node->right; + stack_ptr++; + } + } + done_iterate: + free (list->table); + free (list); +} diff --git a/include/libgnulib/gl_array_list.h b/include/libgnulib/gl_array_list.h new file mode 100755 index 0000000..20a2a46 --- /dev/null +++ b/include/libgnulib/gl_array_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by an array. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_ARRAY_LIST_H +#define _GL_ARRAY_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_array_list_implementation; +#define GL_ARRAY_LIST &gl_array_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ARRAY_LIST_H */ diff --git a/include/libgnulib/gl_array_map.h b/include/libgnulib/gl_array_map.h new file mode 100755 index 0000000..747aa48 --- /dev/null +++ b/include/libgnulib/gl_array_map.h @@ -0,0 +1,34 @@ +/* Map data type implemented by an array. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_ARRAY_MAP_H +#define _GL_ARRAY_MAP_H + +#include "gl_map.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_map_implementation gl_array_map_implementation; +#define GL_ARRAY_MAP &gl_array_map_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ARRAY_MAP_H */ diff --git a/include/libgnulib/gl_array_omap.h b/include/libgnulib/gl_array_omap.h new file mode 100755 index 0000000..f6b962d --- /dev/null +++ b/include/libgnulib/gl_array_omap.h @@ -0,0 +1,34 @@ +/* Ordered map data type implemented by an array. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_ARRAY_OMAP_H +#define _GL_ARRAY_OMAP_H + +#include "gl_omap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_omap_implementation gl_array_omap_implementation; +#define GL_ARRAY_OMAP &gl_array_omap_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ARRAY_OMAP_H */ diff --git a/include/libgnulib/gl_array_oset.h b/include/libgnulib/gl_array_oset.h new file mode 100755 index 0000000..868ed2c --- /dev/null +++ b/include/libgnulib/gl_array_oset.h @@ -0,0 +1,34 @@ +/* Ordered set data type implemented by an array. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_ARRAY_OSET_H +#define _GL_ARRAY_OSET_H + +#include "gl_oset.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_oset_implementation gl_array_oset_implementation; +#define GL_ARRAY_OSET &gl_array_oset_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ARRAY_OSET_H */ diff --git a/include/libgnulib/gl_array_set.h b/include/libgnulib/gl_array_set.h new file mode 100755 index 0000000..498a2ea --- /dev/null +++ b/include/libgnulib/gl_array_set.h @@ -0,0 +1,34 @@ +/* Set data type implemented by an array. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_ARRAY_SET_H +#define _GL_ARRAY_SET_H + +#include "gl_set.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_set_implementation gl_array_set_implementation; +#define GL_ARRAY_SET &gl_array_set_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ARRAY_SET_H */ diff --git a/include/libgnulib/gl_avltree_list.h b/include/libgnulib/gl_avltree_list.h new file mode 100755 index 0000000..f130f1e --- /dev/null +++ b/include/libgnulib/gl_avltree_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_AVLTREE_LIST_H +#define _GL_AVLTREE_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_avltree_list_implementation; +#define GL_AVLTREE_LIST &gl_avltree_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_AVLTREE_LIST_H */ diff --git a/include/libgnulib/gl_avltree_omap.h b/include/libgnulib/gl_avltree_omap.h new file mode 100755 index 0000000..6bd2dfa --- /dev/null +++ b/include/libgnulib/gl_avltree_omap.h @@ -0,0 +1,34 @@ +/* Ordered map data type implemented by a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_AVLTREE_OMAP_H +#define _GL_AVLTREE_OMAP_H + +#include "gl_omap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_omap_implementation gl_avltree_omap_implementation; +#define GL_AVLTREE_OMAP &gl_avltree_omap_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_AVLTREE_OMAP_H */ diff --git a/include/libgnulib/gl_avltree_ordered.h b/include/libgnulib/gl_avltree_ordered.h new file mode 100755 index 0000000..f58a719 --- /dev/null +++ b/include/libgnulib/gl_avltree_ordered.h @@ -0,0 +1,571 @@ +/* Ordered {set,map} data type implemented by a binary tree. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* An AVL tree is a binary tree where + 1. The height of each node is calculated as + heightof(node) = 1 + max (heightof(node.left), heightof(node.right)). + 2. The heights of the subtrees of each node differ by at most 1: + | heightof(right) - heightof(left) | <= 1. + 3. The index of the elements in the node.left subtree are smaller than + the index of node. + The index of the elements in the node.right subtree are larger than + the index of node. + */ + +/* Tree node implementation, valid for this file only. */ +struct NODE_IMPL +{ + struct NODE_IMPL *left; /* left branch, or NULL */ + struct NODE_IMPL *right; /* right branch, or NULL */ + /* Parent pointer, or NULL. The parent pointer is not needed for most + operations. It is needed so that a NODE_T can be returned without + memory allocation, on which the functions _remove_node, + _add_before, _add_after can be implemented. */ + struct NODE_IMPL *parent; + int balance; /* heightof(right) - heightof(left), + always = -1 or 0 or 1 */ + NODE_PAYLOAD_FIELDS +}; +typedef struct NODE_IMPL * NODE_T; + +/* Concrete CONTAINER_IMPL type, valid for this file only. */ +struct CONTAINER_IMPL +{ + struct CONTAINER_IMPL_BASE base; + struct NODE_IMPL *root; /* root node or NULL */ + size_t count; /* number of nodes */ +}; + +/* An AVL tree of height h has at least F_(h+2) - 1 [Fibonacci number] and at + most 2^h - 1 elements. So, h <= 84 (because a tree of height h >= 85 would + have at least F_87 - 1 elements, and because even on 64-bit machines, + sizeof (NODE_IMPL) * (F_87 - 1) > 2^64 + this would exceed the address space of the machine. */ +#define MAXHEIGHT 83 + +/* Ensures the tree is balanced, after an insertion or deletion operation. + The height of NODE is incremented by HEIGHT_DIFF (1 or -1). + PARENT = NODE->parent. (NODE can also be NULL. But PARENT is non-NULL.) + Rotation operations are performed starting at PARENT (not NODE itself!). */ +static void +rebalance (CONTAINER_T container, + NODE_T node, int height_diff, NODE_T parent) +{ + for (;;) + { + NODE_T child; + int previous_balance; + int balance_diff; + NODE_T nodeleft; + NODE_T noderight; + + child = node; + node = parent; + + previous_balance = node->balance; + + /* The balance of NODE is incremented by BALANCE_DIFF: +1 if the right + branch's height has increased by 1 or the left branch's height has + decreased by 1, -1 if the right branch's height has decreased by 1 or + the left branch's height has increased by 1, 0 if no height change. */ + if (node->left != NULL || node->right != NULL) + balance_diff = (child == node->right ? height_diff : -height_diff); + else + /* Special case where above formula doesn't work, because the caller + didn't tell whether node's left or right branch shrunk from height 1 + to NULL. */ + balance_diff = - previous_balance; + + node->balance += balance_diff; + if (balance_diff == previous_balance) + { + /* node->balance is outside the range [-1,1]. Must rotate. */ + NODE_T *nodep; + + if (node->parent == NULL) + /* node == container->root */ + nodep = &container->root; + else if (node->parent->left == node) + nodep = &node->parent->left; + else if (node->parent->right == node) + nodep = &node->parent->right; + else + abort (); + + nodeleft = node->left; + noderight = node->right; + + if (balance_diff < 0) + { + /* node->balance = -2. The subtree is heavier on the left side. + Rotate from left to right: + + * + / \ + h+2 h + */ + NODE_T nodeleftright = nodeleft->right; + if (nodeleft->balance <= 0) + { + /* + * h+2|h+3 + / \ / \ + h+2 h --> / h+1|h+2 + / \ | / \ + h+1 h|h+1 h+1 h|h+1 h + */ + node->left = nodeleftright; + nodeleft->right = node; + + nodeleft->parent = node->parent; + node->parent = nodeleft; + if (nodeleftright != NULL) + nodeleftright->parent = node; + + nodeleft->balance += 1; + node->balance = - nodeleft->balance; + + *nodep = nodeleft; + height_diff = (height_diff < 0 + ? /* noderight's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2|h+3. */ + nodeleft->balance - 1 + : /* nodeleft's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2|h+3. */ + nodeleft->balance); + } + else + { + /* + * h+2 + / \ / \ + h+2 h --> h+1 h+1 + / \ / \ / \ + h h+1 h L R h + / \ + L R + + */ + NODE_T L = nodeleft->right = nodeleftright->left; + NODE_T R = node->left = nodeleftright->right; + nodeleftright->left = nodeleft; + nodeleftright->right = node; + + nodeleftright->parent = node->parent; + if (L != NULL) + L->parent = nodeleft; + if (R != NULL) + R->parent = node; + nodeleft->parent = nodeleftright; + node->parent = nodeleftright; + + nodeleft->balance = (nodeleftright->balance > 0 ? -1 : 0); + node->balance = (nodeleftright->balance < 0 ? 1 : 0); + nodeleftright->balance = 0; + + *nodep = nodeleftright; + height_diff = (height_diff < 0 + ? /* noderight's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2. */ + -1 + : /* nodeleft's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2. */ + 0); + } + } + else + { + /* node->balance = 2. The subtree is heavier on the right side. + Rotate from right to left: + + * + / \ + h h+2 + */ + NODE_T noderightleft = noderight->left; + if (noderight->balance >= 0) + { + /* + * h+2|h+3 + / \ / \ + h h+2 --> h+1|h+2 \ + / \ / \ | + h|h+1 h+1 h h|h+1 h+1 + */ + node->right = noderightleft; + noderight->left = node; + + noderight->parent = node->parent; + node->parent = noderight; + if (noderightleft != NULL) + noderightleft->parent = node; + + noderight->balance -= 1; + node->balance = - noderight->balance; + + *nodep = noderight; + height_diff = (height_diff < 0 + ? /* nodeleft's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2|h+3. */ + - noderight->balance - 1 + : /* noderight's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2|h+3. */ + - noderight->balance); + } + else + { + /* + * h+2 + / \ / \ + h h+2 --> h+1 h+1 + / \ / \ / \ + h+1 h h L R h + / \ + L R + + */ + NODE_T L = node->right = noderightleft->left; + NODE_T R = noderight->left = noderightleft->right; + noderightleft->left = node; + noderightleft->right = noderight; + + noderightleft->parent = node->parent; + if (L != NULL) + L->parent = node; + if (R != NULL) + R->parent = noderight; + node->parent = noderightleft; + noderight->parent = noderightleft; + + node->balance = (noderightleft->balance > 0 ? -1 : 0); + noderight->balance = (noderightleft->balance < 0 ? 1 : 0); + noderightleft->balance = 0; + + *nodep = noderightleft; + height_diff = (height_diff < 0 + ? /* nodeleft's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2. */ + -1 + : /* noderight's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2. */ + 0); + } + } + node = *nodep; + } + else + { + /* No rotation needed. Only propagation of the height change to the + next higher level. */ + if (height_diff < 0) + height_diff = (previous_balance == 0 ? 0 : -1); + else + height_diff = (node->balance == 0 ? 0 : 1); + } + + if (height_diff == 0) + break; + + parent = node->parent; + if (parent == NULL) + break; + } +} + +static NODE_T +gl_tree_nx_add_first (CONTAINER_T container, NODE_PAYLOAD_PARAMS) +{ + /* Create new node. */ + NODE_T new_node = + (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); + + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + NODE_PAYLOAD_ASSIGN(new_node) + + /* Add it to the tree. */ + if (container->root == NULL) + { + container->root = new_node; + new_node->parent = NULL; + } + else + { + NODE_T node; + + for (node = container->root; node->left != NULL; ) + node = node->left; + + node->left = new_node; + new_node->parent = node; + node->balance--; + + /* Rebalance. */ + if (node->right == NULL && node->parent != NULL) + rebalance (container, node, 1, node->parent); + } + + container->count++; + return new_node; +} + +/* Adds the already allocated NEW_NODE to the tree, right before NODE. */ +static void +gl_tree_add_node_before (CONTAINER_T container, NODE_T node, NODE_T new_node) +{ + bool height_inc; + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + + /* Add it to the tree. */ + if (node->left == NULL) + { + node->left = new_node; + node->balance--; + height_inc = (node->right == NULL); + } + else + { + for (node = node->left; node->right != NULL; ) + node = node->right; + node->right = new_node; + node->balance++; + height_inc = (node->left == NULL); + } + new_node->parent = node; + + /* Rebalance. */ + if (height_inc && node->parent != NULL) + rebalance (container, node, 1, node->parent); + + container->count++; +} + +static NODE_T +gl_tree_nx_add_before (CONTAINER_T container, NODE_T node, NODE_PAYLOAD_PARAMS) +{ + /* Create new node. */ + NODE_T new_node = + (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); + + if (new_node == NULL) + return NULL; + + NODE_PAYLOAD_ASSIGN(new_node) + + gl_tree_add_node_before (container, node, new_node); + return new_node; +} + +/* Adds the already allocated NEW_NODE to the tree, right after NODE. */ +static void +gl_tree_add_node_after (CONTAINER_T container, NODE_T node, NODE_T new_node) +{ + bool height_inc; + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + + /* Add it to the tree. */ + if (node->right == NULL) + { + node->right = new_node; + node->balance++; + height_inc = (node->left == NULL); + } + else + { + for (node = node->right; node->left != NULL; ) + node = node->left; + node->left = new_node; + node->balance--; + height_inc = (node->right == NULL); + } + new_node->parent = node; + + /* Rebalance. */ + if (height_inc && node->parent != NULL) + rebalance (container, node, 1, node->parent); + + container->count++; +} + +static NODE_T +gl_tree_nx_add_after (CONTAINER_T container, NODE_T node, NODE_PAYLOAD_PARAMS) +{ + /* Create new node. */ + NODE_T new_node = + (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); + + if (new_node == NULL) + return NULL; + + NODE_PAYLOAD_ASSIGN(new_node) + + gl_tree_add_node_after (container, node, new_node); + return new_node; +} + +static void +gl_tree_remove_node_no_free (CONTAINER_T container, NODE_T node) +{ + NODE_T parent = node->parent; + + if (node->left == NULL) + { + /* Replace node with node->right. */ + NODE_T child = node->right; + + if (child != NULL) + child->parent = parent; + if (parent == NULL) + container->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + + rebalance (container, child, -1, parent); + } + } + else if (node->right == NULL) + { + /* It is not absolutely necessary to treat this case. But the more + general case below is more complicated, hence slower. */ + /* Replace node with node->left. */ + NODE_T child = node->left; + + child->parent = parent; + if (parent == NULL) + container->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + + rebalance (container, child, -1, parent); + } + } + else + { + /* Replace node with the rightmost element of the node->left subtree. */ + NODE_T subst; + NODE_T subst_parent; + NODE_T child; + + for (subst = node->left; subst->right != NULL; ) + subst = subst->right; + + subst_parent = subst->parent; + + child = subst->left; + + /* The case subst_parent == node is special: If we do nothing special, + we get confusion about node->left, subst->left and child->parent. + subst_parent == node + <==> The 'for' loop above terminated immediately. + <==> subst == subst_parent->left + [otherwise subst == subst_parent->right] + In this case, we would need to first set + child->parent = node; node->left = child; + and later - when we copy subst into node's position - again + child->parent = subst; subst->left = child; + Altogether a no-op. */ + if (subst_parent != node) + { + if (child != NULL) + child->parent = subst_parent; + subst_parent->right = child; + } + + /* Copy subst into node's position. + (This is safer than to copy subst's value into node, keep node in + place, and free subst.) */ + if (subst_parent != node) + { + subst->left = node->left; + subst->left->parent = subst; + } + subst->right = node->right; + subst->right->parent = subst; + subst->balance = node->balance; + subst->parent = parent; + if (parent == NULL) + container->root = subst; + else if (parent->left == node) + parent->left = subst; + else /* parent->right == node */ + parent->right = subst; + + /* Rebalancing starts at child's parent, that is subst_parent - + except when subst_parent == node. In this case, we need to use + its replacement, subst. */ + rebalance (container, child, -1, subst_parent != node ? subst_parent : subst); + } + + container->count--; +} + +static bool +gl_tree_remove_node (CONTAINER_T container, NODE_T node) +{ + gl_tree_remove_node_no_free (container, node); + NODE_PAYLOAD_DISPOSE (container, node) + free (node); + return true; +} + +/* For debugging. */ +static unsigned int +check_invariants (NODE_T node, NODE_T parent, size_t *counterp) +{ + unsigned int left_height = + (node->left != NULL ? check_invariants (node->left, node, counterp) : 0); + unsigned int right_height = + (node->right != NULL ? check_invariants (node->right, node, counterp) : 0); + int balance = (int)right_height - (int)left_height; + + if (!(node->parent == parent)) + abort (); + if (!(balance >= -1 && balance <= 1)) + abort (); + if (!(node->balance == balance)) + abort (); + + (*counterp)++; + + return 1 + (left_height > right_height ? left_height : right_height); +} diff --git a/include/libgnulib/gl_avltree_oset.h b/include/libgnulib/gl_avltree_oset.h new file mode 100755 index 0000000..1ba1a94 --- /dev/null +++ b/include/libgnulib/gl_avltree_oset.h @@ -0,0 +1,34 @@ +/* Ordered set data type implemented by a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_AVLTREE_OSET_H +#define _GL_AVLTREE_OSET_H + +#include "gl_oset.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_oset_implementation gl_avltree_oset_implementation; +#define GL_AVLTREE_OSET &gl_avltree_oset_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_AVLTREE_OSET_H */ diff --git a/include/libgnulib/gl_avltreehash_list.h b/include/libgnulib/gl_avltreehash_list.h new file mode 100755 index 0000000..bd91521 --- /dev/null +++ b/include/libgnulib/gl_avltreehash_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by a hash table with a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +#ifndef _GL_AVLTREEHASH_LIST_H +#define _GL_AVLTREEHASH_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_avltreehash_list_implementation; +#define GL_AVLTREEHASH_LIST &gl_avltreehash_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_AVLTREEHASH_LIST_H */ diff --git a/include/libgnulib/gl_carray_list.h b/include/libgnulib/gl_carray_list.h new file mode 100755 index 0000000..03d8777 --- /dev/null +++ b/include/libgnulib/gl_carray_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by a circular array. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CARRAY_LIST_H +#define _GL_CARRAY_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_carray_list_implementation; +#define GL_CARRAY_LIST &gl_carray_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_CARRAY_LIST_H */ diff --git a/include/libgnulib/gl_hash_map.h b/include/libgnulib/gl_hash_map.h new file mode 100755 index 0000000..5c4da78 --- /dev/null +++ b/include/libgnulib/gl_hash_map.h @@ -0,0 +1,34 @@ +/* Map data type implemented by a hash table. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_HASH_MAP_H +#define _GL_HASH_MAP_H + +#include "gl_map.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_map_implementation gl_hash_map_implementation; +#define GL_HASH_MAP &gl_hash_map_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_HASH_MAP_H */ diff --git a/include/libgnulib/gl_hash_set.h b/include/libgnulib/gl_hash_set.h new file mode 100755 index 0000000..f66a06f --- /dev/null +++ b/include/libgnulib/gl_hash_set.h @@ -0,0 +1,34 @@ +/* Set data type implemented by a hash table. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_HASH_SET_H +#define _GL_HASH_SET_H + +#include "gl_set.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_set_implementation gl_hash_set_implementation; +#define GL_HASH_SET &gl_hash_set_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_HASH_SET_H */ diff --git a/include/libgnulib/gl_linked_list.h b/include/libgnulib/gl_linked_list.h new file mode 100755 index 0000000..edb1fc6 --- /dev/null +++ b/include/libgnulib/gl_linked_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by a linked list. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_LINKED_LIST_H +#define _GL_LINKED_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_linked_list_implementation; +#define GL_LINKED_LIST &gl_linked_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_LINKED_LIST_H */ diff --git a/include/libgnulib/gl_linkedhash_list.h b/include/libgnulib/gl_linkedhash_list.h new file mode 100755 index 0000000..613c100 --- /dev/null +++ b/include/libgnulib/gl_linkedhash_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by a hash table with a linked list. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_LINKEDHASH_LIST_H +#define _GL_LINKEDHASH_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_linkedhash_list_implementation; +#define GL_LINKEDHASH_LIST &gl_linkedhash_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_LINKEDHASH_LIST_H */ diff --git a/include/libgnulib/gl_linkedhash_map.h b/include/libgnulib/gl_linkedhash_map.h new file mode 100755 index 0000000..9d8456a --- /dev/null +++ b/include/libgnulib/gl_linkedhash_map.h @@ -0,0 +1,34 @@ +/* Map data type implemented by a hash table with a linked list. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_LINKEDHASH_MAP_H +#define _GL_LINKEDHASH_MAP_H + +#include "gl_map.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_map_implementation gl_linkedhash_map_implementation; +#define GL_LINKEDHASH_MAP &gl_linkedhash_map_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_LINKEDHASH_MAP_H */ diff --git a/include/libgnulib/gl_linkedhash_set.h b/include/libgnulib/gl_linkedhash_set.h new file mode 100755 index 0000000..7c262c3 --- /dev/null +++ b/include/libgnulib/gl_linkedhash_set.h @@ -0,0 +1,34 @@ +/* Set data type implemented by a hash table with a linked list. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_LINKEDHASH_SET_H +#define _GL_LINKEDHASH_SET_H + +#include "gl_set.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_set_implementation gl_linkedhash_set_implementation; +#define GL_LINKEDHASH_SET &gl_linkedhash_set_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_LINKEDHASH_SET_H */ diff --git a/include/libgnulib/gl_list.h b/include/libgnulib/gl_list.h new file mode 100755 index 0000000..986be84 --- /dev/null +++ b/include/libgnulib/gl_list.h @@ -0,0 +1,926 @@ +/* Abstract sequential list data type. -*- coding: utf-8 -*- + Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_LIST_H +#define _GL_LIST_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_LIST_INLINE +# define GL_LIST_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* gl_list is an abstract list data type. It can contain any number of + objects ('void *' or 'const void *' pointers) in any given order. + Duplicates are allowed, but can optionally be forbidden. + + There are several implementations of this list datatype, optimized for + different operations or for memory. You can start using the simplest list + implementation, GL_ARRAY_LIST, and switch to a different implementation + later, when you realize which operations are performed the most frequently. + The API of the different implementations is exactly the same; when + switching to a different implementation, you only have to change the + gl_list_create call. + + The implementations are: + GL_ARRAY_LIST a growable array + GL_CARRAY_LIST a growable circular array + GL_LINKED_LIST a linked list + GL_AVLTREE_LIST a binary tree (AVL tree) + GL_RBTREE_LIST a binary tree (red-black tree) + GL_LINKEDHASH_LIST a hash table with a linked list + GL_AVLTREEHASH_LIST a hash table with a binary tree (AVL tree) + GL_RBTREEHASH_LIST a hash table with a binary tree (red-black tree) + + The memory consumption is asymptotically the same: O(1) for every object + in the list. When looking more closely at the average memory consumed + for an object, GL_ARRAY_LIST is the most compact representation, and + GL_LINKEDHASH_LIST and GL_TREEHASH_LIST need more memory. + + The guaranteed average performance of the operations is, for a list of + n elements: + + Operation ARRAY LINKED TREE LINKEDHASH TREEHASH + CARRAY with|without with|without + duplicates duplicates + + gl_list_size O(1) O(1) O(1) O(1) O(1) + gl_list_node_value O(1) O(1) O(1) O(1) O(1) + gl_list_node_set_value O(1) O(1) O(1) O(1) O((log n)²)/O(1) + gl_list_next_node O(1) O(1) O(log n) O(1) O(log n) + gl_list_previous_node O(1) O(1) O(log n) O(1) O(log n) + gl_list_first_node O(1) O(1) O(log n) O(1) O(log n) + gl_list_last_node O(1) O(1) O(log n) O(1) O(log n) + gl_list_get_at O(1) O(n) O(log n) O(n) O(log n) + gl_list_get_first O(1) O(1) O(log n) O(1) O(log n) + gl_list_get_last O(1) O(1) O(log n) O(1) O(log n) + gl_list_set_at O(1) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_list_set_first O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_set_last O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_search O(n) O(n) O(n) O(n)/O(1) O(log n)/O(1) + gl_list_search_from O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_search_from_to O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_indexof O(n) O(n) O(n) O(n) O(log n) + gl_list_indexof_from O(n) O(n) O(n) O(n) O((log n)²)/O(log n) + gl_list_indexof_from_to O(n) O(n) O(n) O(n) O((log n)²)/O(log n) + gl_list_add_first O(n)/O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_last O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_before O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_after O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_list_remove_node O(n) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_remove_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_list_remove_first O(n)/O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_remove_last O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_remove O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_iterator O(1) O(1) O(log n) O(1) O(log n) + gl_list_iterator_from_to O(1) O(n) O(log n) O(n) O(log n) + gl_list_iterator_next O(1) O(1) O(log n) O(1) O(log n) + gl_sortedlist_search O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_search_from O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_indexof O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_indexof_fro O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_add O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_sortedlist_remove O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + */ + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Type of function used to compare two elements. + NULL denotes pointer comparison. */ +typedef bool (*gl_listelement_equals_fn) (const void *elt1, const void *elt2); + +/* Type of function used to compute a hash code. + NULL denotes a function that depends only on the pointer itself. */ +typedef size_t (*gl_listelement_hashcode_fn) (const void *elt); + +/* Type of function used to dispose an element once it's removed from a list. + NULL denotes a no-op. */ +typedef void (*gl_listelement_dispose_fn) (const void *elt); + +struct gl_list_impl; +/* Type representing an entire list. */ +typedef struct gl_list_impl * gl_list_t; + +struct gl_list_node_impl; +/* Type representing the position of an element in the list, in a way that + is more adapted to the list implementation than a plain index. + Note: It is invalidated by insertions and removals! */ +typedef struct gl_list_node_impl * gl_list_node_t; + +struct gl_list_implementation; +/* Type representing a list datatype implementation. */ +typedef const struct gl_list_implementation * gl_list_implementation_t; + +#if 0 /* Unless otherwise specified, these are defined inline below. */ + +/* Creates an empty list. + IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, + GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, + GL_RBTREEHASH_LIST. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. + ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in + the list. The implementation may verify this at runtime. */ +/* declared in gl_xlist.h */ +extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) + /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +/* Likewise. Returns NULL upon out-of-memory. */ +extern gl_list_t gl_list_nx_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) + /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/; + +/* Creates a list with given contents. + IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, + GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, + GL_RBTREEHASH_LIST. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. + ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in + the list. The implementation may verify this at runtime. + COUNT is the number of initial elements. + CONTENTS[0..COUNT-1] is the initial contents. */ +/* declared in gl_xlist.h */ +extern gl_list_t gl_list_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) + /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +/* Likewise. Returns NULL upon out-of-memory. */ +extern gl_list_t gl_list_nx_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) + /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/; + +/* Returns the current number of elements in a list. */ +extern size_t gl_list_size (gl_list_t list); + +/* Returns the element value represented by a list node. */ +extern const void * gl_list_node_value (gl_list_t list, gl_list_node_t node); + +/* Replaces the element value represented by a list node. */ +/* declared in gl_xlist.h */ +extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node, + const void *elt); +/* Likewise. Returns 0 upon success, -1 upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern int gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node, + const void *elt); + +/* Returns the node immediately after the given node in the list, or NULL + if the given node is the last (rightmost) one in the list. */ +extern gl_list_node_t gl_list_next_node (gl_list_t list, gl_list_node_t node); + +/* Returns the node immediately before the given node in the list, or NULL + if the given node is the first (leftmost) one in the list. */ +extern gl_list_node_t gl_list_previous_node (gl_list_t list, gl_list_node_t node); + +/* Returns the first node in the list, or NULL if the list is empty. + This function is useful for iterating through the list like this: + gl_list_node_t node; + for (node = gl_list_first_node (list); node != NULL; node = gl_list_next_node (node)) + ... + */ +extern gl_list_node_t gl_list_first_node (gl_list_t list); + +/* Returns the last node in the list, or NULL if the list is empty. + This function is useful for iterating through the list in backward order, + like this: + gl_list_node_t node; + for (node = gl_list_last_node (list); node != NULL; node = gl_list_previous_node (node)) + ... + */ +extern gl_list_node_t gl_list_last_node (gl_list_t list); + +/* Returns the element at a given position in the list. + POSITION must be >= 0 and < gl_list_size (list). */ +extern const void * gl_list_get_at (gl_list_t list, size_t position); + +/* Returns the element at the first position in the list. + The list must be non-empty. */ +extern const void * gl_list_get_first (gl_list_t list); + +/* Returns the element at the last position in the list. + The list must be non-empty. */ +extern const void * gl_list_get_last (gl_list_t list); + +/* Replaces the element at a given position in the list. + POSITION must be >= 0 and < gl_list_size (list). + Returns its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position, + const void *elt); +/* Likewise. Returns NULL upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern gl_list_node_t gl_list_nx_set_at (gl_list_t list, size_t position, + const void *elt); + +/* Replaces the element at the first position in the list. + Returns its node. + The list must be non-empty. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_set_first (gl_list_t list, const void *elt); +/* Likewise. Returns NULL upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern gl_list_node_t gl_list_nx_set_first (gl_list_t list, const void *elt); + +/* Replaces the element at the last position in the list. + Returns its node. + The list must be non-empty. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_set_last (gl_list_t list, const void *elt); +/* Likewise. Returns NULL upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern gl_list_node_t gl_list_nx_set_last (gl_list_t list, const void *elt); + +/* Searches whether an element is already in the list. + Returns its node if found, or NULL if not present in the list. */ +extern gl_list_node_t gl_list_search (gl_list_t list, const void *elt); + +/* Searches whether an element is already in the list, + at a position >= START_INDEX. + Returns its node if found, or NULL if not present in the list. */ +extern gl_list_node_t gl_list_search_from (gl_list_t list, size_t start_index, + const void *elt); + +/* Searches whether an element is already in the list, + at a position >= START_INDEX and < END_INDEX. + Returns its node if found, or NULL if not present in the list. */ +extern gl_list_node_t gl_list_search_from_to (gl_list_t list, + size_t start_index, + size_t end_index, + const void *elt); + +/* Searches whether an element is already in the list. + Returns its position if found, or (size_t)(-1) if not present in the list. */ +extern size_t gl_list_indexof (gl_list_t list, const void *elt); + +/* Searches whether an element is already in the list, + at a position >= START_INDEX. + Returns its position if found, or (size_t)(-1) if not present in the list. */ +extern size_t gl_list_indexof_from (gl_list_t list, size_t start_index, + const void *elt); + +/* Searches whether an element is already in the list, + at a position >= START_INDEX and < END_INDEX. + Returns its position if found, or (size_t)(-1) if not present in the list. */ +extern size_t gl_list_indexof_from_to (gl_list_t list, + size_t start_index, size_t end_index, + const void *elt); + +/* Adds an element as the first element of the list. + Returns its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt); +/* Likewise. Returns NULL upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern gl_list_node_t gl_list_nx_add_first (gl_list_t list, const void *elt); + +/* Adds an element as the last element of the list. + Returns its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt); +/* Likewise. Returns NULL upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern gl_list_node_t gl_list_nx_add_last (gl_list_t list, const void *elt); + +/* Adds an element before a given element node of the list. + Returns its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node, + const void *elt); +/* Likewise. Returns NULL upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern gl_list_node_t gl_list_nx_add_before (gl_list_t list, + gl_list_node_t node, + const void *elt); + +/* Adds an element after a given element node of the list. + Returns its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node, + const void *elt); +/* Likewise. Returns NULL upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern gl_list_node_t gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, + const void *elt); + +/* Adds an element at a given position in the list. + POSITION must be >= 0 and <= gl_list_size (list). */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position, + const void *elt); +/* Likewise. Returns NULL upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern gl_list_node_t gl_list_nx_add_at (gl_list_t list, size_t position, + const void *elt); + +/* Removes an element from the list. + Returns true. */ +extern bool gl_list_remove_node (gl_list_t list, gl_list_node_t node); + +/* Removes an element at a given position from the list. + POSITION must be >= 0 and < gl_list_size (list). + Returns true. */ +extern bool gl_list_remove_at (gl_list_t list, size_t position); + +/* Removes the element at the first position from the list. + Returns true if it was found and removed, or false if the list was empty. */ +extern bool gl_list_remove_first (gl_list_t list); + +/* Removes the element at the last position from the list. + Returns true if it was found and removed, or false if the list was empty. */ +extern bool gl_list_remove_last (gl_list_t list); + +/* Searches and removes an element from the list. + Returns true if it was found and removed. */ +extern bool gl_list_remove (gl_list_t list, const void *elt); + +/* Frees an entire list. + (But this call does not free the elements of the list. It only invokes + the DISPOSE_FN on each of the elements of the list, and only if the list + is not a sublist.) */ +extern void gl_list_free (gl_list_t list); + +#endif /* End of inline and gl_xlist.h-defined functions. */ + +/* --------------------- gl_list_iterator_t Data Type --------------------- */ + +/* Functions for iterating through a list. */ + +/* Type of an iterator that traverses a list. + This is a fixed-size struct, so that creation of an iterator doesn't need + memory allocation on the heap. */ +typedef struct +{ + /* For fast dispatch of gl_list_iterator_next. */ + const struct gl_list_implementation *vtable; + /* For detecting whether the last returned element was removed. */ + gl_list_t list; + size_t count; + /* Other, implementation-private fields. */ + void *p; void *q; + size_t i; size_t j; +} gl_list_iterator_t; + +#if 0 /* These are defined inline below. */ + +/* Creates an iterator traversing a list. + The list contents must not be modified while the iterator is in use, + except for replacing or removing the last returned element. */ +extern gl_list_iterator_t gl_list_iterator (gl_list_t list); + +/* Creates an iterator traversing the element with indices i, + start_index <= i < end_index, of a list. + The list contents must not be modified while the iterator is in use, + except for replacing or removing the last returned element. */ +extern gl_list_iterator_t gl_list_iterator_from_to (gl_list_t list, + size_t start_index, + size_t end_index); + +/* If there is a next element, stores the next element in *ELTP, stores its + node in *NODEP if NODEP is non-NULL, advances the iterator and returns true. + Otherwise, returns false. */ +extern bool gl_list_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep); + +/* Frees an iterator. */ +extern void gl_list_iterator_free (gl_list_iterator_t *iterator); + +#endif /* End of inline functions. */ + +/* ---------------------- Sorted gl_list_t Data Type ---------------------- */ + +/* The following functions are for lists without duplicates where the + order is given by a sort criterion. */ + +/* Type of function used to compare two elements. Same as for qsort(). + NULL denotes pointer comparison. */ +typedef int (*gl_listelement_compar_fn) (const void *elt1, const void *elt2); + +#if 0 /* Unless otherwise specified, these are defined inline below. */ + +/* Searches whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Returns its node if found, or NULL if not present in the list. + If the list contains several copies of ELT, the node of the leftmost one is + returned. */ +extern gl_list_node_t gl_sortedlist_search (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +/* Searches whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Only list elements with indices >= START_INDEX and < END_INDEX are + considered; the implementation uses these bounds to minimize the number + of COMPAR invocations. + Returns its node if found, or NULL if not present in the list. + If the list contains several copies of ELT, the node of the leftmost one is + returned. */ +extern gl_list_node_t gl_sortedlist_search_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, + size_t end_index, + const void *elt); + +/* Searches whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Returns its position if found, or (size_t)(-1) if not present in the list. + If the list contains several copies of ELT, the position of the leftmost one + is returned. */ +extern size_t gl_sortedlist_indexof (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +/* Searches whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Only list elements with indices >= START_INDEX and < END_INDEX are + considered; the implementation uses these bounds to minimize the number + of COMPAR invocations. + Returns its position if found, or (size_t)(-1) if not present in the list. + If the list contains several copies of ELT, the position of the leftmost one + is returned. */ +extern size_t gl_sortedlist_indexof_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, + size_t end_index, + const void *elt); + +/* Adds an element at the appropriate position in the list. + The list is assumed to be sorted with COMPAR. + Returns its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_sortedlist_add (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); +/* Likewise. Returns NULL upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern gl_list_node_t gl_sortedlist_nx_add (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +/* Searches and removes an element from the list. + The list is assumed to be sorted with COMPAR. + Returns true if it was found and removed. + If the list contains several copies of ELT, only the leftmost one is + removed. */ +extern bool gl_sortedlist_remove (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +#endif /* End of inline and gl_xlist.h-defined functions. */ + +/* ------------------------ Implementation Details ------------------------ */ + +struct gl_list_implementation +{ + /* gl_list_t functions. */ + gl_list_t (*nx_create_empty) (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates); + gl_list_t (*nx_create) (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents); + size_t (*size) (gl_list_t list); + const void * (*node_value) (gl_list_t list, gl_list_node_t node); + int (*node_nx_set_value) (gl_list_t list, gl_list_node_t node, + const void *elt); + gl_list_node_t (*next_node) (gl_list_t list, gl_list_node_t node); + gl_list_node_t (*previous_node) (gl_list_t list, gl_list_node_t node); + gl_list_node_t (*first_node) (gl_list_t list); + gl_list_node_t (*last_node) (gl_list_t list); + const void * (*get_at) (gl_list_t list, size_t position); + gl_list_node_t (*nx_set_at) (gl_list_t list, size_t position, + const void *elt); + gl_list_node_t (*search_from_to) (gl_list_t list, size_t start_index, + size_t end_index, const void *elt); + size_t (*indexof_from_to) (gl_list_t list, size_t start_index, + size_t end_index, const void *elt); + gl_list_node_t (*nx_add_first) (gl_list_t list, const void *elt); + gl_list_node_t (*nx_add_last) (gl_list_t list, const void *elt); + gl_list_node_t (*nx_add_before) (gl_list_t list, gl_list_node_t node, + const void *elt); + gl_list_node_t (*nx_add_after) (gl_list_t list, gl_list_node_t node, + const void *elt); + gl_list_node_t (*nx_add_at) (gl_list_t list, size_t position, + const void *elt); + bool (*remove_node) (gl_list_t list, gl_list_node_t node); + bool (*remove_at) (gl_list_t list, size_t position); + bool (*remove_elt) (gl_list_t list, const void *elt); + void (*list_free) (gl_list_t list); + /* gl_list_iterator_t functions. */ + gl_list_iterator_t (*iterator) (gl_list_t list); + gl_list_iterator_t (*iterator_from_to) (gl_list_t list, + size_t start_index, + size_t end_index); + bool (*iterator_next) (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep); + void (*iterator_free) (gl_list_iterator_t *iterator); + /* Sorted gl_list_t functions. */ + gl_list_node_t (*sortedlist_search) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + gl_list_node_t (*sortedlist_search_from_to) (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, + size_t end_index, + const void *elt); + size_t (*sortedlist_indexof) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + size_t (*sortedlist_indexof_from_to) (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, size_t end_index, + const void *elt); + gl_list_node_t (*sortedlist_nx_add) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + bool (*sortedlist_remove) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); +}; + +struct gl_list_impl_base +{ + const struct gl_list_implementation *vtable; + gl_listelement_equals_fn equals_fn; + gl_listelement_hashcode_fn hashcode_fn; + gl_listelement_dispose_fn dispose_fn; + bool allow_duplicates; +}; + +/* Define all functions of this file as accesses to the + struct gl_list_implementation. */ + +GL_LIST_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ +gl_list_t +gl_list_nx_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + return implementation->nx_create_empty (implementation, equals_fn, + hashcode_fn, dispose_fn, + allow_duplicates); +} + +GL_LIST_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ +gl_list_t +gl_list_nx_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + return implementation->nx_create (implementation, equals_fn, hashcode_fn, + dispose_fn, allow_duplicates, count, + contents); +} + +GL_LIST_INLINE size_t +gl_list_size (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->size (list); +} + +GL_LIST_INLINE const void * +gl_list_node_value (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->node_value (list, node); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE int +gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node, + const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->node_nx_set_value (list, node, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_next_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->next_node (list, node); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_previous_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->previous_node (list, node); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_first_node (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->first_node (list); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_last_node (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->last_node (list); +} + +GL_LIST_INLINE const void * +gl_list_get_at (gl_list_t list, size_t position) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->get_at (list, position); +} + +GL_LIST_INLINE const void * +gl_list_get_first (gl_list_t list) +{ + return gl_list_get_at (list, 0); +} + +GL_LIST_INLINE const void * +gl_list_get_last (gl_list_t list) +{ + return gl_list_get_at (list, gl_list_size (list) - 1); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t +gl_list_nx_set_at (gl_list_t list, size_t position, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_set_at (list, position, elt); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t +gl_list_nx_set_first (gl_list_t list, const void *elt) +{ + return gl_list_nx_set_at (list, 0, elt); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t +gl_list_nx_set_last (gl_list_t list, const void *elt) +{ + return gl_list_nx_set_at (list, gl_list_size (list) - 1, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_search (gl_list_t list, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, 0, size, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_search_from (gl_list_t list, size_t start_index, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, start_index, size, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, start_index, end_index, elt); +} + +GL_LIST_INLINE size_t +gl_list_indexof (gl_list_t list, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, 0, size, elt); +} + +GL_LIST_INLINE size_t +gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, start_index, size, elt); +} + +GL_LIST_INLINE size_t +gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, start_index, end_index, elt); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t +gl_list_nx_add_first (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_first (list, elt); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t +gl_list_nx_add_last (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_last (list, elt); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t +gl_list_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_before (list, node, elt); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t +gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_after (list, node, elt); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t +gl_list_nx_add_at (gl_list_t list, size_t position, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_at (list, position, elt); +} + +GL_LIST_INLINE bool +gl_list_remove_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_node (list, node); +} + +GL_LIST_INLINE bool +gl_list_remove_at (gl_list_t list, size_t position) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_at (list, position); +} + +GL_LIST_INLINE bool +gl_list_remove_first (gl_list_t list) +{ + size_t size = gl_list_size (list); + if (size > 0) + return gl_list_remove_at (list, 0); + else + return false; +} + +GL_LIST_INLINE bool +gl_list_remove_last (gl_list_t list) +{ + size_t size = gl_list_size (list); + if (size > 0) + return gl_list_remove_at (list, size - 1); + else + return false; +} + +GL_LIST_INLINE bool +gl_list_remove (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_elt (list, elt); +} + +GL_LIST_INLINE void +gl_list_free (gl_list_t list) +{ + ((const struct gl_list_impl_base *) list)->vtable->list_free (list); +} + +GL_LIST_INLINE gl_list_iterator_t +gl_list_iterator (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->iterator (list); +} + +GL_LIST_INLINE gl_list_iterator_t +gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->iterator_from_to (list, start_index, end_index); +} + +GL_LIST_INLINE bool +gl_list_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep) +{ + return iterator->vtable->iterator_next (iterator, eltp, nodep); +} + +GL_LIST_INLINE void +gl_list_iterator_free (gl_list_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +GL_LIST_INLINE gl_list_node_t +gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_search (list, compar, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_search_from_to (list, compar, start_index, end_index, + elt); +} + +GL_LIST_INLINE size_t +gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_indexof (list, compar, elt); +} + +GL_LIST_INLINE size_t +gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_indexof_from_to (list, compar, start_index, end_index, + elt); +} + +_GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t +gl_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_nx_add (list, compar, elt); +} + +GL_LIST_INLINE bool +gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_remove (list, compar, elt); +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_LIST_H */ diff --git a/include/libgnulib/gl_list.hh b/include/libgnulib/gl_list.hh new file mode 100755 index 0000000..7e94beb --- /dev/null +++ b/include/libgnulib/gl_list.hh @@ -0,0 +1,421 @@ +/* Abstract sequential list data type as a C++ class. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +#ifndef _GL_LIST_HH +#define _GL_LIST_HH + +#include "gl_list.h" +#include "gl_xlist.h" +#include "gl_sublist.h" +#include "gl_xsublist.h" + +#include /* because Gnulib's may '#define free ...' */ + +/* gl_List is a C++ wrapper around the gl_list data type. + Its element type is 'ELTYPE *'. + + It is merely a pointer, not a smart pointer. In other words: + it does NOT do reference-counting, and the destructor does nothing. */ + +template class gl_List; + +template +class gl_List +{ +public: + // ------------------------------ Constructors ------------------------------ + + gl_List () + : _ptr (NULL) + {} + + /* Creates an empty list. + IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, + GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, + GL_RBTREEHASH_LIST. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. + ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in + the list. The implementation may verify this at runtime. */ + gl_List (gl_list_implementation_t implementation, + bool (*equals_fn) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + size_t (*hashcode_fn) (ELTYPE *), + void (*dispose_fn) (ELTYPE *), + bool allow_duplicates) + : _ptr (gl_list_create_empty (implementation, + reinterpret_cast(equals_fn), + reinterpret_cast(hashcode_fn), + reinterpret_cast(dispose_fn), + allow_duplicates)) + {} + + /* Creates a list with given contents. + IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, + GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, + GL_RBTREEHASH_LIST. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. + ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in + the list. The implementation may verify this at runtime. + COUNT is the number of initial elements. + CONTENTS[0..COUNT-1] is the initial contents. */ + gl_List (gl_list_implementation_t implementation, + bool (*equals_fn) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + size_t (*hashcode_fn) (ELTYPE *), + void (*dispose_fn) (ELTYPE *), + bool allow_duplicates, + size_t count, ELTYPE **contents) + : _ptr (gl_list_create (implementation, + reinterpret_cast(equals_fn), + reinterpret_cast(hashcode_fn), + reinterpret_cast(dispose_fn), + allow_duplicates, + count, contents)) + {} + + /* Creates a sublist of a given list. + This is the list of elements with indices i, start_index <= i < end_index. + The sublist is backed by the given list, which means: + - Modifications to the sublist affect the whole list. + - Modifications to the whole list are immediately visible in the sublist. + - The sublist is only valid as long as the whole list is valid. + - The sublist must not be passed to the gl_list_sortedlist_add() function. + */ + gl_List (const gl_List& whole_list, size_t start_index, size_t end_index) + : _ptr (gl_sublist_create (whole_list._ptr, start_index, end_index)) + {} + + /* Copy constructor. */ + gl_List (const gl_List& x) + { _ptr = x._ptr; } + + /* Assignment operator. */ + gl_List& operator= (const gl_List& x) + { _ptr = x._ptr; return *this; } + + // ------------------------------- Destructor ------------------------------- + + ~gl_List () + { _ptr = NULL; } + + // ----------------------- Read-only member functions ----------------------- + + /* Returns the current number of elements in the list. */ + size_t size () const + { return gl_list_size (_ptr); } + + /* Returns the element value represented by a list node. */ + ELTYPE * node_value (gl_list_node_t node) const + { return static_cast(gl_list_node_value (_ptr, node)); } + + /* Returns the node immediately after the given node in the list, or NULL + if the given node is the last (rightmost) one in the list. */ + gl_list_node_t next_node (gl_list_node_t node) const + { return gl_list_next_node (_ptr, node); } + + /* Returns the node immediately before the given node in the list, or NULL + if the given node is the first (leftmost) one in the list. */ + gl_list_node_t previous_node (gl_list_node_t node) const + { return gl_list_previous_node (_ptr, node); } + + /* Returns the first node in the list, or NULL if the list is empty. */ + gl_list_node_t first_node () const + { return gl_list_first_node (_ptr); } + + /* Returns the last node in the list, or NULL if the list is empty. */ + gl_list_node_t last_node () const + { return gl_list_last_node (_ptr); } + + /* Returns the element at a given position in the list. + POSITION must be >= 0 and < gl_list_size (list). */ + ELTYPE * get_at (size_t position) const + { return static_cast(gl_list_get_at (_ptr, position)); } + + /* Returns the element at the first position in the list. + The list must be non-empty. */ + ELTYPE * get_first () const + { return static_cast(gl_list_get_first (_ptr)); } + + /* Returns the element at the last position in the list. + The list must be non-empty. */ + ELTYPE * get_last () const + { return static_cast(gl_list_get_last (_ptr)); } + + /* Searches whether an element is already in the list. + Returns its node if found, or NULL if not present in the list. */ + gl_list_node_t search (ELTYPE * elt) const + { return gl_list_search (_ptr, elt); } + + /* Searches whether an element is already in the list, + at a position >= START_INDEX. + Returns its node if found, or NULL if not present in the list. */ + gl_list_node_t search_from (size_t start_index, ELTYPE * elt) const + { return gl_list_search_from (_ptr, start_index, elt); } + + /* Searches whether an element is already in the list, + at a position >= START_INDEX and < END_INDEX. + Returns its node if found, or NULL if not present in the list. */ + gl_list_node_t search_from_to (size_t start_index, size_t end_index, ELTYPE * elt) const + { return gl_list_search_from_to (_ptr, start_index, end_index, elt); } + + /* Searches whether an element is already in the list. + Returns its position if found, or (size_t)(-1) if not present in the list. */ + size_t indexof (ELTYPE * elt) const + { return gl_list_indexof (_ptr, elt); } + + /* Searches whether an element is already in the list, + at a position >= START_INDEX. + Returns its position if found, or (size_t)(-1) if not present in the list. */ + size_t indexof_from (size_t start_index, ELTYPE * elt) const + { return gl_list_indexof_from (_ptr, start_index, elt); } + + /* Searches whether an element is already in the list, + at a position >= START_INDEX and < END_INDEX. + Returns its position if found, or (size_t)(-1) if not present in the list. */ + size_t indexof_from_to (size_t start_index, size_t end_index, ELTYPE * elt) const + { return gl_list_indexof_from_to (_ptr, start_index, end_index, elt); } + + // ----------------------- Modifying member functions ----------------------- + + /* Replaces the element value represented by a list node. */ + void node_set_value (gl_list_node_t node, ELTYPE * elt) + { gl_list_node_set_value (_ptr, node, elt); } + + /* Replaces the element at a given position in the list. + POSITION must be >= 0 and < gl_list_size (list). + Returns its node. */ + gl_list_node_t set_at (size_t position, ELTYPE * elt) + { return gl_list_set_at (_ptr, position, elt); } + + /* Replaces the element at the first position in the list. + Returns its node. + The list must be non-empty. */ + gl_list_node_t set_first (ELTYPE * elt) + { return gl_list_set_first (_ptr, elt); } + + /* Replaces the element at the last position in the list. + Returns its node. + The list must be non-empty. */ + gl_list_node_t set_last (ELTYPE * elt) + { return gl_list_set_last (_ptr, elt); } + + /* Adds an element as the first element of the list. + Returns its node. */ + gl_list_node_t add_first (ELTYPE * elt) + { return gl_list_add_first (_ptr, elt); } + + /* Adds an element as the last element of the list. + Returns its node. */ + gl_list_node_t add_last (ELTYPE * elt) + { return gl_list_add_last (_ptr, elt); } + + /* Adds an element before a given element node of the list. + Returns its node. */ + gl_list_node_t add_before (gl_list_node_t node, ELTYPE * elt) + { return gl_list_add_before (_ptr, node, elt); } + + /* Adds an element after a given element node of the list. + Return its node. */ + gl_list_node_t add_after (gl_list_node_t node, ELTYPE * elt) + { return gl_list_add_after (_ptr, node, elt); } + + /* Adds an element at a given position in the list. + POSITION must be >= 0 and <= gl_list_size (list). */ + gl_list_node_t add_at (size_t position, ELTYPE * elt) + { return gl_list_add_at (_ptr, position, elt); } + + /* Removes an element from the list. + Returns true. */ + bool remove_node (gl_list_node_t node) + { return gl_list_remove_node (_ptr, node); } + + /* Removes an element at a given position from the list. + POSITION must be >= 0 and < gl_list_size (list). + Returns true. */ + bool remove_at (size_t position) + { return gl_list_remove_at (_ptr, position); } + + /* Removes the element at the first position from the list. + Returns true if it was found and removed, + or false if the list was empty. */ + bool remove_first () + { return gl_list_remove_first (_ptr); } + + /* Removes the element at the last position from the list. + Returns true if it was found and removed, + or false if the list was empty. */ + bool remove_last () + { return gl_list_remove_last (_ptr); } + + /* Searches and removes an element from the list. + Returns true if it was found and removed. */ + bool remove (ELTYPE * elt) + { return gl_list_remove (_ptr, elt); } + + /* Frees the entire list. + (But this call does not free the elements of the list. It only invokes + the DISPOSE_FN on each of the elements of the list, and only if the list + is not a sublist.) */ + void free () + { gl_list_free (_ptr); _ptr = NULL; } + + // -------------------- Member functions for sorted lists -------------------- + + /* The following functions are for lists without duplicates where the + order is given by a sort criterion. */ + + /* Searches whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Returns its node if found, or NULL if not present in the list. + If the list contains several copies of ELT, the node of the leftmost one is + returned. */ + gl_list_node_t sortedlist_search (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + ELTYPE * elt) + { return gl_sortedlist_search (_ptr, reinterpret_cast(compar), elt); } + + /* Searches whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Only list elements with indices >= START_INDEX and < END_INDEX are + considered; the implementation uses these bounds to minimize the number + of COMPAR invocations. + Returns its node if found, or NULL if not present in the list. + If the list contains several copies of ELT, the node of the leftmost one is + returned. */ + gl_list_node_t sortedlist_search_from_to (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + size_t start_index, + size_t end_index, + ELTYPE * elt) + { return gl_sortedlist_search_from_to (_ptr, reinterpret_cast(compar), start_index, end_index, elt); } + + /* Searches whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Returns its position if found, or (size_t)(-1) if not present in the list. + If the list contains several copies of ELT, the position of the leftmost one + is returned. */ + size_t sortedlist_indexof (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + ELTYPE * elt) + { return gl_sortedlist_indexof (_ptr, reinterpret_cast(compar), elt); } + + /* Searches whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Only list elements with indices >= START_INDEX and < END_INDEX are + considered; the implementation uses these bounds to minimize the number + of COMPAR invocations. + Returns its position if found, or (size_t)(-1) if not present in the list. + If the list contains several copies of ELT, the position of the leftmost one + is returned. */ + size_t sortedlist_indexof_from_to (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + size_t start_index, + size_t end_index, + ELTYPE * elt) + { return gl_sortedlist_indexof_from_to (_ptr, reinterpret_cast(compar), start_index, end_index, elt); } + + /* Adds an element at the appropriate position in the list. + The list is assumed to be sorted with COMPAR. + Returns its node. */ + gl_list_node_t sortedlist_add (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + ELTYPE * elt) + { return gl_sortedlist_add (_ptr, reinterpret_cast(compar), elt); } + + /* Searches and removes an element from the list. + The list is assumed to be sorted with COMPAR. + Returns true if it was found and removed. + If the list contains several copies of ELT, only the leftmost one is + removed. */ + bool sortedlist_remove (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + ELTYPE * elt) + { return gl_sortedlist_remove (_ptr, reinterpret_cast(compar), elt); } + + // ------------------------------ Private stuff ------------------------------ + +private: + gl_list_t _ptr; + +public: + // -------------------------------- Iterators -------------------------------- + // Only a forward iterator. + // Does not implement the STL operations (++, *, and != .end()), but a simpler + // interface that needs only one virtual function call per iteration instead + // of three. + + class iterator { + public: + + /* If there is a next element, stores the next element in ELT, advances + the iterator and returns true. + Otherwise, returns false. */ + bool next (ELTYPE *& elt) + { + const void *next_elt; + bool has_next = gl_list_iterator_next (&_state, &next_elt, NULL); + if (has_next) + elt = static_cast(next_elt); + return has_next; + } + + /* If there is a next element, stores the next element in ELT, stores its + node in *NODEP if NODEP is non-NULL, advances the iterator and returns true. + Otherwise, returns false. */ + bool next (ELTYPE *& elt, gl_list_node_t *nodep) + { + const void *next_elt; + bool has_next = gl_list_iterator_next (&_state, &next_elt, nodep); + if (has_next) + elt = static_cast(next_elt); + return has_next; + } + + ~iterator () + { gl_list_iterator_free (&_state); } + + #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC + public: + #else + private: + friend iterator gl_List::begin (); + #endif + + iterator (gl_list_t ptr) + : _state (gl_list_iterator (ptr)) + {} + + iterator (gl_list_t ptr, size_t start_index, size_t end_index) + : _state (gl_list_iterator_from_to (ptr, start_index, end_index)) + {} + + private: + + gl_list_iterator_t _state; + }; + + /* Creates an iterator traversing the list. + The list contents must not be modified while the iterator is in use, + except for replacing or removing the last returned element. */ + iterator begin () + { return iterator (_ptr); } + + /* Creates an iterator traversing the element with indices i, + start_index <= i < end_index, of a list. + The list contents must not be modified while the iterator is in use, + except for replacing or removing the last returned element. */ + iterator begin (size_t start_index, size_t end_index) + { return iterator (_ptr, start_index, end_index); } +}; + +#endif /* _GL_LIST_HH */ diff --git a/include/libgnulib/gl_map.h b/include/libgnulib/gl_map.h new file mode 100755 index 0000000..d072fdd --- /dev/null +++ b/include/libgnulib/gl_map.h @@ -0,0 +1,377 @@ +/* Abstract map data type. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_MAP_H +#define _GL_MAP_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_MAP_INLINE +# define GL_MAP_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* gl_map is an abstract map data type. It can contain any number of + (key, value) pairs, where + - keys and values are objects ('void *' or 'const void *' pointers), + - There are no (key, value1) and (key, value2) pairs with the same key + (in the sense of a given comparator function). + + There are several implementations of this map datatype, optimized for + different operations or for memory. You can start using the simplest map + implementation, GL_ARRAY_MAP, and switch to a different implementation + later, when you realize which operations are performed the most frequently. + The API of the different implementations is exactly the same; when switching + to a different implementation, you only have to change the gl_map_create + call. + + The implementations are: + GL_ARRAY_MAP a growable array + GL_LINKEDHASH_MAP a hash table with a linked list + GL_HASH_MAP a hash table + + The memory consumption is asymptotically the same: O(1) for every pair + in the map. When looking more closely at the average memory consumed + for an object, GL_ARRAY_MAP is the most compact representation, then comes + GL_HASH_MAP, and GL_LINKEDHASH_MAP needs the most memory. + + The guaranteed average performance of the operations is, for a map of + n pairs: + + Operation ARRAY LINKEDHASH + HASH + + gl_map_size O(1) O(1) + gl_map_get O(n) O(1) + gl_map_put O(n) O(1) + gl_map_remove O(n) O(1) + gl_map_search O(n) O(1) + gl_map_iterator O(1) O(1) + gl_map_iterator_next O(1) O(1) + */ + +/* --------------------------- gl_map_t Data Type --------------------------- */ + +/* Type of function used to compare two keys. + NULL denotes pointer comparison. */ +typedef bool (*gl_mapkey_equals_fn) (const void *key1, const void *key2); + +/* Type of function used to compute a hash code. + NULL denotes a function that depends only on the pointer itself. */ +typedef size_t (*gl_mapkey_hashcode_fn) (const void *key); + +#ifndef _GL_MAP_DISPOSE_FNS_DEFINED + +/* Type of function used to dispose a key once a (key, value) pair is removed + from a map. NULL denotes a no-op. */ +typedef void (*gl_mapkey_dispose_fn) (const void *key); + +/* Type of function used to dispose a value once a (key, value) pair is removed + from a map. NULL denotes a no-op. */ +typedef void (*gl_mapvalue_dispose_fn) (const void *value); + +# define _GL_MAP_DISPOSE_FNS_DEFINED 1 +#endif + +struct gl_map_impl; +/* Type representing an entire map. */ +typedef struct gl_map_impl * gl_map_t; + +struct gl_map_implementation; +/* Type representing a map datatype implementation. */ +typedef const struct gl_map_implementation * gl_map_implementation_t; + +#if 0 /* Unless otherwise specified, these are defined inline below. */ + +/* Creates an empty map. + IMPLEMENTATION is one of GL_ARRAY_MAP, GL_LINKEDHASH_MAP, GL_HASH_MAP. + EQUALS_FN is a key comparison function or NULL. + HASHCODE_FN is a key hash code function or NULL. + KDISPOSE_FN is a key disposal function or NULL. + VDISPOSE_FN is a value disposal function or NULL. */ +/* declared in gl_xmap.h */ +extern gl_map_t gl_map_create_empty (gl_map_implementation_t implementation, + gl_mapkey_equals_fn equals_fn, + gl_mapkey_hashcode_fn hashcode_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +/* Likewise. Returns NULL upon out-of-memory. */ +extern gl_map_t gl_map_nx_create_empty (gl_map_implementation_t implementation, + gl_mapkey_equals_fn equals_fn, + gl_mapkey_hashcode_fn hashcode_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/; + +/* Returns the current number of pairs in a map. */ +extern size_t gl_map_size (gl_map_t map); + +/* Searches whether a pair with the given key is already in the map. + Returns the value if found, or NULL if not present in the map. */ +extern const void * gl_map_get (gl_map_t map, const void *key); + +/* Searches whether a pair with the given key is already in the map. + Returns true and sets *VALUEP to the value if found. + Returns false if not present in the map. */ +extern bool gl_map_search (gl_map_t map, const void *key, const void **valuep); + +/* Adds a pair to a map. + Returns true if a pair with the given key was not already in the map and so + this pair was added. + Returns false if a pair with the given key was already in the map and only + its value was replaced. */ +/* declared in gl_xmap.h */ +extern bool gl_map_put (gl_map_t map, const void *key, const void *value); +/* Likewise. Returns -1 upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern int gl_map_nx_put (gl_map_t map, const void *key, const void *value); + +/* Adds a pair to a map and retrieves the previous value. + Returns true if a pair with the given key was not already in the map and so + this pair was added. + Returns false and sets *OLDVALUEP to the previous value, if a pair with the + given key was already in the map and only its value was replaced. */ +/* declared in gl_xmap.h */ +extern bool gl_map_getput (gl_map_t map, const void *key, const void *value, + const void **oldvaluep); +/* Likewise. Returns -1 upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern int gl_map_nx_getput (gl_map_t map, const void *key, const void *value, + const void **oldvaluep); + +/* Removes a pair from a map. + Returns true if the key was found and its pair removed. + Returns false otherwise. */ +extern bool gl_map_remove (gl_map_t map, const void *key); + +/* Removes a pair from a map and retrieves the previous value. + Returns true and sets *OLDVALUEP to the previous value, if the key was found + and its pair removed. + Returns false otherwise. */ +extern bool gl_map_getremove (gl_map_t map, const void *key, + const void **oldvaluep); + +/* Frees an entire map. + (But this call does not free the keys and values of the pairs in the map. + It only invokes the KDISPOSE_FN on each key and the VDISPOSE_FN on each value + of the pairs in the map.) */ +extern void gl_map_free (gl_map_t map); + +#endif /* End of inline and gl_xmap.h-defined functions. */ + +/* ---------------------- gl_map_iterator_t Data Type ---------------------- */ + +/* Functions for iterating through a map. + Note: Iterating through a map of type GL_HASH_MAP returns the pairs in an + unpredictable order. If you need a predictable order, use GL_LINKEDHASH_MAP + instead of GL_HASH_MAP. */ + +/* Type of an iterator that traverses a map. + This is a fixed-size struct, so that creation of an iterator doesn't need + memory allocation on the heap. */ +typedef struct +{ + /* For fast dispatch of gl_map_iterator_next. */ + const struct gl_map_implementation *vtable; + /* For detecting whether the last returned pair was removed. */ + gl_map_t map; + size_t count; + /* Other, implementation-private fields. */ + void *p; void *q; + size_t i; size_t j; +} gl_map_iterator_t; + +#if 0 /* These are defined inline below. */ + +/* Creates an iterator traversing a map. + The map's contents must not be modified while the iterator is in use, + except for modifying the value of the last returned key or removing the + last returned pair. */ +extern gl_map_iterator_t gl_map_iterator (gl_map_t map); + +/* If there is a next pair, stores the next pair in *KEYP and *VALUEP, advances + the iterator, and returns true. Otherwise, returns false. */ +extern bool gl_map_iterator_next (gl_map_iterator_t *iterator, + const void **keyp, const void **valuep); + +/* Frees an iterator. */ +extern void gl_map_iterator_free (gl_map_iterator_t *iterator); + +#endif /* End of inline functions. */ + +/* ------------------------- Implementation Details ------------------------- */ + +struct gl_map_implementation +{ + /* gl_map_t functions. */ + gl_map_t (*nx_create_empty) (gl_map_implementation_t implementation, + gl_mapkey_equals_fn equals_fn, + gl_mapkey_hashcode_fn hashcode_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn); + size_t (*size) (gl_map_t map); + bool (*search) (gl_map_t map, const void *key, const void **valuep); + int (*nx_getput) (gl_map_t map, const void *key, const void *value, + const void **oldvaluep); + bool (*getremove) (gl_map_t map, const void *key, const void **oldvaluep); + void (*map_free) (gl_map_t map); + /* gl_map_iterator_t functions. */ + gl_map_iterator_t (*iterator) (gl_map_t map); + bool (*iterator_next) (gl_map_iterator_t *iterator, + const void **keyp, const void **valuep); + void (*iterator_free) (gl_map_iterator_t *iterator); +}; + +struct gl_map_impl_base +{ + const struct gl_map_implementation *vtable; + gl_mapkey_equals_fn equals_fn; + gl_mapkey_dispose_fn kdispose_fn; + gl_mapvalue_dispose_fn vdispose_fn; +}; + +/* Define most functions of this file as accesses to the + struct gl_map_implementation. */ + +GL_MAP_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/ +gl_map_t +gl_map_nx_create_empty (gl_map_implementation_t implementation, + gl_mapkey_equals_fn equals_fn, + gl_mapkey_hashcode_fn hashcode_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) +{ + return implementation->nx_create_empty (implementation, + equals_fn, hashcode_fn, + kdispose_fn, vdispose_fn); +} + +GL_MAP_INLINE size_t +gl_map_size (gl_map_t map) +{ + return ((const struct gl_map_impl_base *) map)->vtable->size (map); +} + +GL_MAP_INLINE bool +gl_map_search (gl_map_t map, const void *key, const void **valuep) +{ + return ((const struct gl_map_impl_base *) map)->vtable + ->search (map, key, valuep); +} + +_GL_ATTRIBUTE_NODISCARD GL_MAP_INLINE int +gl_map_nx_getput (gl_map_t map, const void *key, const void *value, + const void **oldvaluep) +{ + return ((const struct gl_map_impl_base *) map)->vtable + ->nx_getput (map, key, value, oldvaluep); +} + +GL_MAP_INLINE bool +gl_map_getremove (gl_map_t map, const void *key, const void **oldvaluep) +{ + return ((const struct gl_map_impl_base *) map)->vtable + ->getremove (map, key, oldvaluep); +} + +GL_MAP_INLINE void +gl_map_free (gl_map_t map) +{ + ((const struct gl_map_impl_base *) map)->vtable->map_free (map); +} + +GL_MAP_INLINE gl_map_iterator_t +gl_map_iterator (gl_map_t map) +{ + return ((const struct gl_map_impl_base *) map)->vtable->iterator (map); +} + +GL_MAP_INLINE bool +gl_map_iterator_next (gl_map_iterator_t *iterator, + const void **keyp, const void **valuep) +{ + return iterator->vtable->iterator_next (iterator, keyp, valuep); +} + +GL_MAP_INLINE void +gl_map_iterator_free (gl_map_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +/* Define the convenience functions, that is, the functions that are independent + of the implementation. */ + +GL_MAP_INLINE const void * +gl_map_get (gl_map_t map, const void *key) +{ + const void *value = NULL; + gl_map_search (map, key, &value); + return value; +} + +_GL_ATTRIBUTE_NODISCARD GL_MAP_INLINE int +gl_map_nx_put (gl_map_t map, const void *key, const void *value) +{ + const void *oldvalue; + int result = gl_map_nx_getput (map, key, value, &oldvalue); + if (result == 0) + { + gl_mapvalue_dispose_fn vdispose_fn = + ((const struct gl_map_impl_base *) map)->vdispose_fn; + if (vdispose_fn != NULL) + vdispose_fn (oldvalue); + } + return result; +} + +GL_MAP_INLINE bool +gl_map_remove (gl_map_t map, const void *key) +{ + const void *oldvalue; + bool result = gl_map_getremove (map, key, &oldvalue); + if (result) + { + gl_mapvalue_dispose_fn vdispose_fn = + ((const struct gl_map_impl_base *) map)->vdispose_fn; + if (vdispose_fn != NULL) + vdispose_fn (oldvalue); + } + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_MAP_H */ diff --git a/include/libgnulib/gl_map.hh b/include/libgnulib/gl_map.hh new file mode 100755 index 0000000..255c29b --- /dev/null +++ b/include/libgnulib/gl_map.hh @@ -0,0 +1,187 @@ +/* Abstract map data type as a C++ class. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_MAP_HH +#define _GL_MAP_HH + +#include "gl_map.h" +#include "gl_xmap.h" + +#include /* because Gnulib's may '#define free ...' */ + +/* gl_Map is a C++ wrapper around the gl_map data type. + Its key type is 'KEYTYPE *'. Its value type is 'VALUETYPE *'. + + It is merely a pointer, not a smart pointer. In other words: + it does NOT do reference-counting, and the destructor does nothing. */ + +template class gl_Map; + +template +class gl_Map +{ +public: + // ------------------------------ Constructors ------------------------------ + + gl_Map () + : _ptr (NULL) + {} + + /* Creates an empty map. + IMPLEMENTATION is one of GL_ARRAY_MAP, GL_LINKEDHASH_MAP, GL_HASH_MAP. + EQUALS_FN is a key comparison function or NULL. + HASHCODE_FN is a key hash code function or NULL. + KDISPOSE_FN is a key disposal function or NULL. + VDISPOSE_FN is a value disposal function or NULL. */ + gl_Map (gl_map_implementation_t implementation, + bool (*equals_fn) (KEYTYPE * /*key1*/, KEYTYPE * /*key2*/), + size_t (*hashcode_fn) (KEYTYPE *), + void (*kdispose_fn) (KEYTYPE *), + void (*vdispose_fn) (VALUETYPE *)) + : _ptr (gl_map_create_empty (implementation, + reinterpret_cast(equals_fn), + reinterpret_cast(hashcode_fn), + reinterpret_cast(kdispose_fn), + reinterpret_cast(vdispose_fn))) + {} + + /* Copy constructor. */ + gl_Map (const gl_Map& x) + { _ptr = x._ptr; } + + /* Assignment operator. */ + gl_Map& operator= (const gl_Map& x) + { _ptr = x._ptr; return *this; } + + // ------------------------------- Destructor ------------------------------- + + ~gl_Map () + { _ptr = NULL; } + + // ----------------------- Read-only member functions ----------------------- + + /* Returns the current number of pairs in the map. */ + size_t size () const + { return gl_map_size (_ptr); } + + /* Searches whether a pair with the given key is already in the map. + Returns the value if found, or NULL if not present in the map. */ + VALUETYPE * get (KEYTYPE * key) const + { return static_cast(gl_map_get (_ptr, key)); } + + /* Searches whether a pair with the given key is already in the map. + Returns true and sets VALUE to the value if found. + Returns false if not present in the map. */ + bool search (KEYTYPE * key, VALUETYPE *& value) const + { return gl_map_search (_ptr, key, &value); } + + // ----------------------- Modifying member functions ----------------------- + + /* Adds a pair to the map. + Returns true if a pair with the given key was not already in the map and so + this pair was added. + Returns false if a pair with the given key was already in the map and only + its value was replaced. */ + bool put (KEYTYPE * key, VALUETYPE * value) + { return gl_map_put (_ptr, key, value); } + + /* Adds a pair to the map and retrieves the previous value. + Returns true if a pair with the given key was not already in the map and so + this pair was added. + Returns false and sets OLDVALUE to the previous value, if a pair with the + given key was already in the map and only its value was replaced. */ + bool getput (KEYTYPE * key, VALUETYPE * value, VALUETYPE *& oldvalue) + { return gl_map_getput (_ptr, key, value, &oldvalue); } + + /* Removes a pair from the map. + Returns true if the key was found and its pair removed. + Returns false otherwise. */ + bool remove (KEYTYPE * key) + { return gl_map_remove (_ptr, key); } + + /* Removes a pair from the map and retrieves the previous value. + Returns true and sets OLDVALUE to the previous value, if the key was found + and its pair removed. + Returns false otherwise. */ + bool getremove (KEYTYPE * key, VALUETYPE *& oldvalue) + { return gl_map_getremove (_ptr, key, &oldvalue); } + + /* Frees the entire map. + (But this call does not free the keys and values of the pairs in the map. + It only invokes the KDISPOSE_FN on each key and the VDISPOSE_FN on each value + of the pairs in the map.) */ + void free () + { gl_map_free (_ptr); _ptr = NULL; } + + // ------------------------------ Private stuff ------------------------------ + +private: + gl_map_t _ptr; + +public: + // -------------------------------- Iterators -------------------------------- + // Only a forward iterator. + // Does not implement the STL operations (++, *, and != .end()), but a simpler + // interface that needs only one virtual function call per iteration instead + // of three. + + class iterator { + public: + + /* If there is a next pair, stores the next pair in KEY and VALUE, advance + the iterator, and returns true. Otherwise, returns false. */ + bool next (KEYTYPE *& key, VALUETYPE *& value) + { + const void *next_key; + const void *next_value; + bool has_next = gl_map_iterator_next (&_state, &next_key, &next_value); + if (has_next) + { + key = static_cast(next_key); + value = static_cast(next_value); + } + return has_next; + } + + ~iterator () + { gl_map_iterator_free (&_state); } + + #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC + public: + #else + private: + friend iterator gl_Map::begin (); + #endif + + iterator (gl_map_t ptr) + : _state (gl_map_iterator (ptr)) + {} + + private: + + gl_map_iterator_t _state; + }; + + /* Creates an iterator traversing the map. + The map's contents must not be modified while the iterator is in use, + except for modifying the value of the last returned key or removing the + last returned pair. */ + iterator begin () + { return iterator (_ptr); } +}; + +#endif /* _GL_MAP_HH */ diff --git a/include/libgnulib/gl_omap.h b/include/libgnulib/gl_omap.h new file mode 100755 index 0000000..e6f2215 --- /dev/null +++ b/include/libgnulib/gl_omap.h @@ -0,0 +1,395 @@ +/* Abstract ordered map data type. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_OMAP_H +#define _GL_OMAP_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_OMAP_INLINE +# define GL_OMAP_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* gl_omap is an abstract ordered map data type. It can contain any number + of (key, value) pairs, where + - keys and values are objects ('void *' or 'const void *' pointers), + - The (key, value) pairs are ordered by the key, in the order of a given + comparator function. + - There are no (key, value1) and (key, value2) pairs with the same key + (in the sense of the comparator function). + + There are several implementations of this ordered map datatype, optimized + for different operations or for memory. You can start using the simplest + ordered map implementation, GL_ARRAY_OMAP, and switch to a different + implementation later, when you realize which operations are performed + the most frequently. The API of the different implementations is exactly + the same; when switching to a different implementation, you only have to + change the gl_omap_create call. + + The implementations are: + GL_ARRAY_OMAP a growable array + GL_AVLTREE_OMAP a binary tree (AVL tree) + GL_RBTREE_OMAP a binary tree (red-black tree) + + The memory consumption is asymptotically the same: O(1) for every pair + in the map. When looking more closely at the average memory consumed + for an pair, GL_ARRAY_OMAP is the most compact representation, and + GL_AVLTREE_OMAP, GL_RBTREE_OMAP need more memory. + + The guaranteed average performance of the operations is, for a map of + n pairs: + + Operation ARRAY TREE + + gl_omap_size O(1) O(1) + gl_omap_get O(log n) O(log n) + gl_omap_put O(n) O(log n) + gl_omap_remove O(n) O(log n) + gl_omap_search O(log n) O(log n) + gl_omap_search_atleast O(log n) O(log n) + gl_omap_iterator O(1) O(log n) + gl_omap_iterator_next O(1) O(log n) + */ + +/* -------------------------- gl_omap_t Data Type -------------------------- */ + +/* Type of function used to compare two keys. Same as for qsort(). + NULL denotes pointer comparison. */ +typedef int (*gl_mapkey_compar_fn) (const void *key1, const void *key2); + +#ifndef _GL_MAP_DISPOSE_FNS_DEFINED + +/* Type of function used to dispose a key once a (key, value) pair is removed + from a map. NULL denotes a no-op. */ +typedef void (*gl_mapkey_dispose_fn) (const void *key); + +/* Type of function used to dispose a value once a (key, value) pair is removed + from a map. NULL denotes a no-op. */ +typedef void (*gl_mapvalue_dispose_fn) (const void *value); + +# define _GL_MAP_DISPOSE_FNS_DEFINED 1 +#endif + +/* Type of function used to compare a key with a threshold. + Returns true if the key is greater or equal than the threshold. */ +typedef bool (*gl_mapkey_threshold_fn) (const void *key, const void *threshold); + +struct gl_omap_impl; +/* Type representing an entire ordered map. */ +typedef struct gl_omap_impl * gl_omap_t; + +struct gl_omap_implementation; +/* Type representing a ordered map datatype implementation. */ +typedef const struct gl_omap_implementation * gl_omap_implementation_t; + +#if 0 /* Unless otherwise specified, these are defined inline below. */ + +/* Creates an empty map. + IMPLEMENTATION is one of GL_ARRAY_OMAP, GL_AVLTREE_OMAP, GL_RBTREE_OMAP. + COMPAR_FN is a key comparison function or NULL. + KDISPOSE_FN is a key disposal function or NULL. + VDISPOSE_FN is a value disposal function or NULL. */ +/* declared in gl_xomap.h */ +extern gl_omap_t gl_omap_create_empty (gl_omap_implementation_t implementation, + gl_mapkey_compar_fn compar_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +/* Likewise. Returns NULL upon out-of-memory. */ +extern gl_omap_t gl_omap_nx_create_empty (gl_omap_implementation_t implementation, + gl_mapkey_compar_fn compar_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/; + +/* Returns the current number of pairs in an ordered map. */ +extern size_t gl_omap_size (gl_omap_t map); + +/* Searches whether a pair with the given key is already in the ordered map. + Returns the value if found, or NULL if not present in the map. */ +extern const void * gl_omap_get (gl_omap_t map, const void *key); + +/* Searches whether a pair with the given key is already in the ordered map. + Returns true and sets *VALUEP to the value if found. + Returns false if not present in the map. */ +extern bool gl_omap_search (gl_omap_t map, const void *key, + const void **valuep); + +/* Searches the pair with the least key in the ordered map that compares + greater or equal to the given THRESHOLD. The representation of the + THRESHOLD is defined by the THRESHOLD_FN. + Returns true and stores the found pair in *KEYP and *VALUEP if found. + Otherwise returns false. */ +extern bool gl_omap_search_atleast (gl_omap_t map, + gl_mapkey_threshold_fn threshold_fn, + const void *threshold, + const void **keyp, const void **valuep); + +/* Adds a pair to an ordered map. + Returns true if a pair with the given key was not already in the map and so + this pair was added. + Returns false if a pair with the given key was already in the map and only + its value was replaced. */ +/* declared in gl_xomap.h */ +extern bool gl_omap_put (gl_omap_t map, const void *key, const void *value); +/* Likewise. Returns -1 upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern int gl_omap_nx_put (gl_omap_t map, const void *key, const void *value); + +/* Adds a pair to an ordered map and retrieves the previous value. + Returns true if a pair with the given key was not already in the map and so + this pair was added. + Returns false and sets *OLDVALUEP to the previous value, if a pair with the + given key was already in the map and only its value was replaced. */ +/* declared in gl_xomap.h */ +extern bool gl_omap_getput (gl_omap_t map, const void *key, const void *value, + const void **oldvaluep); +/* Likewise. Returns -1 upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern int gl_omap_nx_getput (gl_omap_t map, const void *key, const void *value, + const void **oldvaluep); + +/* Removes a pair from an ordered map. + Returns true if the key was found and its pair removed. + Returns false otherwise. */ +extern bool gl_omap_remove (gl_omap_t map, const void *key); + +/* Removes a pair from an ordered map and retrieves the previous value. + Returns true and sets *OLDVALUEP to the previous value, if the key was found + and its pair removed. + Returns false otherwise. */ +extern bool gl_omap_getremove (gl_omap_t map, const void *key, + const void **oldvaluep); + +/* Frees an entire ordered map. + (But this call does not free the keys and values of the pairs in the map. + It only invokes the KDISPOSE_FN on each key and the VDISPOSE_FN on each value + of the pairs in the map.) */ +extern void gl_omap_free (gl_omap_t map); + +#endif /* End of inline and gl_xomap.h-defined functions. */ + +/* ---------------------- gl_omap_iterator_t Data Type ---------------------- */ + +/* Functions for iterating through an ordered map. */ + +/* Type of an iterator that traverses an ordered map. + This is a fixed-size struct, so that creation of an iterator doesn't need + memory allocation on the heap. */ +typedef struct +{ + /* For fast dispatch of gl_omap_iterator_next. */ + const struct gl_omap_implementation *vtable; + /* For detecting whether the last returned pair was removed. */ + gl_omap_t map; + size_t count; + /* Other, implementation-private fields. */ + void *p; void *q; + size_t i; size_t j; +} gl_omap_iterator_t; + +#if 0 /* These are defined inline below. */ + +/* Creates an iterator traversing an ordered map. + The map's contents must not be modified while the iterator is in use, + except for modifying the value of the last returned key or removing the + last returned pair. */ +extern gl_omap_iterator_t gl_omap_iterator (gl_omap_t map); + +/* If there is a next pair, stores the next pair in *KEYP and *VALUEP, advances + the iterator, and returns true. Otherwise, returns false. */ +extern bool gl_omap_iterator_next (gl_omap_iterator_t *iterator, + const void **keyp, const void **valuep); + +/* Frees an iterator. */ +extern void gl_omap_iterator_free (gl_omap_iterator_t *iterator); + +#endif /* End of inline functions. */ + +/* ------------------------- Implementation Details ------------------------- */ + +struct gl_omap_implementation +{ + /* gl_omap_t functions. */ + gl_omap_t (*nx_create_empty) (gl_omap_implementation_t implementation, + gl_mapkey_compar_fn compar_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn); + size_t (*size) (gl_omap_t map); + bool (*search) (gl_omap_t map, const void *key, const void **valuep); + bool (*search_atleast) (gl_omap_t map, + gl_mapkey_threshold_fn threshold_fn, + const void *threshold, + const void **keyp, const void **valuep); + int (*nx_getput) (gl_omap_t map, const void *key, const void *value, + const void **oldvaluep); + bool (*getremove) (gl_omap_t map, const void *key, const void **oldvaluep); + void (*omap_free) (gl_omap_t map); + /* gl_omap_iterator_t functions. */ + gl_omap_iterator_t (*iterator) (gl_omap_t map); + bool (*iterator_next) (gl_omap_iterator_t *iterator, + const void **keyp, const void **valuep); + void (*iterator_free) (gl_omap_iterator_t *iterator); +}; + +struct gl_omap_impl_base +{ + const struct gl_omap_implementation *vtable; + gl_mapkey_compar_fn compar_fn; + gl_mapkey_dispose_fn kdispose_fn; + gl_mapvalue_dispose_fn vdispose_fn; +}; + +/* Define most functions of this file as accesses to the + struct gl_omap_implementation. */ + +GL_OMAP_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/ +gl_omap_t +gl_omap_nx_create_empty (gl_omap_implementation_t implementation, + gl_mapkey_compar_fn compar_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) +{ + return implementation->nx_create_empty (implementation, compar_fn, + kdispose_fn, vdispose_fn); +} + +GL_OMAP_INLINE size_t +gl_omap_size (gl_omap_t map) +{ + return ((const struct gl_omap_impl_base *) map)->vtable->size (map); +} + +GL_OMAP_INLINE bool +gl_omap_search (gl_omap_t map, const void *key, const void **valuep) +{ + return ((const struct gl_omap_impl_base *) map)->vtable + ->search (map, key, valuep); +} + +GL_OMAP_INLINE bool +gl_omap_search_atleast (gl_omap_t map, + gl_mapkey_threshold_fn threshold_fn, + const void *threshold, + const void **keyp, const void **valuep) +{ + return ((const struct gl_omap_impl_base *) map)->vtable + ->search_atleast (map, threshold_fn, threshold, keyp, valuep); +} + +_GL_ATTRIBUTE_NODISCARD GL_OMAP_INLINE int +gl_omap_nx_getput (gl_omap_t map, const void *key, const void *value, + const void **oldvaluep) +{ + return ((const struct gl_omap_impl_base *) map)->vtable + ->nx_getput (map, key, value, oldvaluep); +} + +GL_OMAP_INLINE bool +gl_omap_getremove (gl_omap_t map, const void *key, const void **oldvaluep) +{ + return ((const struct gl_omap_impl_base *) map)->vtable + ->getremove (map, key, oldvaluep); +} + +GL_OMAP_INLINE void +gl_omap_free (gl_omap_t map) +{ + ((const struct gl_omap_impl_base *) map)->vtable->omap_free (map); +} + +GL_OMAP_INLINE gl_omap_iterator_t +gl_omap_iterator (gl_omap_t map) +{ + return ((const struct gl_omap_impl_base *) map)->vtable->iterator (map); +} + +GL_OMAP_INLINE bool +gl_omap_iterator_next (gl_omap_iterator_t *iterator, + const void **keyp, const void **valuep) +{ + return iterator->vtable->iterator_next (iterator, keyp, valuep); +} + +GL_OMAP_INLINE void +gl_omap_iterator_free (gl_omap_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +/* Define the convenience functions, that is, the functions that are independent + of the implementation. */ + +GL_OMAP_INLINE const void * +gl_omap_get (gl_omap_t map, const void *key) +{ + const void *value = NULL; + gl_omap_search (map, key, &value); + return value; +} + +_GL_ATTRIBUTE_NODISCARD GL_OMAP_INLINE int +gl_omap_nx_put (gl_omap_t map, const void *key, const void *value) +{ + const void *oldvalue; + int result = gl_omap_nx_getput (map, key, value, &oldvalue); + if (result == 0) + { + gl_mapvalue_dispose_fn vdispose_fn = + ((const struct gl_omap_impl_base *) map)->vdispose_fn; + if (vdispose_fn != NULL) + vdispose_fn (oldvalue); + } + return result; +} + +GL_OMAP_INLINE bool +gl_omap_remove (gl_omap_t map, const void *key) +{ + const void *oldvalue; + bool result = gl_omap_getremove (map, key, &oldvalue); + if (result) + { + gl_mapvalue_dispose_fn vdispose_fn = + ((const struct gl_omap_impl_base *) map)->vdispose_fn; + if (vdispose_fn != NULL) + vdispose_fn (oldvalue); + } + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_OMAP_H */ diff --git a/include/libgnulib/gl_omap.hh b/include/libgnulib/gl_omap.hh new file mode 100755 index 0000000..bb69308 --- /dev/null +++ b/include/libgnulib/gl_omap.hh @@ -0,0 +1,195 @@ +/* Abstract ordered map data type as a C++ class. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_OMAP_HH +#define _GL_OMAP_HH + +#include "gl_omap.h" +#include "gl_xomap.h" + +#include /* because Gnulib's may '#define free ...' */ + +/* gl_OMap is a C++ wrapper around the gl_omap data type. + Its key type is 'KEYTYPE *'. Its value type is 'VALUETYPE *'. + + It is merely a pointer, not a smart pointer. In other words: + it does NOT do reference-counting, and the destructor does nothing. */ + +template class gl_OMap; + +template +class gl_OMap +{ +public: + // ------------------------------ Constructors ------------------------------ + + gl_OMap () + : _ptr (NULL) + {} + + /* Creates an empty map. + IMPLEMENTATION is one of GL_ARRAY_OMAP, GL_AVLTREE_OMAP, GL_RBTREE_OMAP. + COMPAR_FN is a key comparison function or NULL. + KDISPOSE_FN is a key disposal function or NULL. + VDISPOSE_FN is a value disposal function or NULL. */ + gl_OMap (gl_omap_implementation_t implementation, + int (*compar_fn) (KEYTYPE * /*key1*/, KEYTYPE * /*key2*/), + void (*kdispose_fn) (KEYTYPE *), + void (*vdispose_fn) (VALUETYPE *)) + : _ptr (gl_omap_create_empty (implementation, + reinterpret_cast(compar_fn), + reinterpret_cast(kdispose_fn), + reinterpret_cast(vdispose_fn))) + {} + + /* Copy constructor. */ + gl_OMap (const gl_OMap& x) + { _ptr = x._ptr; } + + /* Assignment operator. */ + gl_OMap& operator= (const gl_OMap& x) + { _ptr = x._ptr; return *this; } + + // ------------------------------- Destructor ------------------------------- + + ~gl_OMap () + { _ptr = NULL; } + + // ----------------------- Read-only member functions ----------------------- + + /* Returns the current number of pairs in the ordered map. */ + size_t size () const + { return gl_omap_size (_ptr); } + + /* Searches whether a pair with the given key is already in the ordered map. + Returns the value if found, or NULL if not present in the map. */ + VALUETYPE * get (KEYTYPE * key) const + { return static_cast(gl_omap_get (_ptr, key)); } + + /* Searches whether a pair with the given key is already in the ordered map. + Returns true and sets VALUE to the value if found. + Returns false if not present in the map. */ + bool search (KEYTYPE * key, VALUETYPE *& value) const + { return gl_omap_search (_ptr, key, &value); } + + /* Searches the pair with the least key in the ordered map that compares + greater or equal to the given THRESHOLD. The representation of the + THRESHOLD is defined by the THRESHOLD_FN. + Returns true and stores the found pair in KEY and VALUE if found. + Otherwise returns false. */ + template + bool search_atleast (bool (*threshold_fn) (KEYTYPE * /*key*/, THT * /*threshold*/), + THT * threshold, + KEYTYPE *& key, VALUETYPE *& value) const + { return gl_omap_search_atleast (_ptr, reinterpret_cast(threshold_fn), threshold, &key, &value); } + + // ----------------------- Modifying member functions ----------------------- + + /* Adds a pair to the ordered map. + Returns true if a pair with the given key was not already in the map and so + this pair was added. + Returns false if a pair with the given key was already in the map and only + its value was replaced. */ + bool put (KEYTYPE * key, VALUETYPE * value) + { return gl_omap_put (_ptr, key, value); } + + /* Adds a pair to the ordered map and retrieves the previous value. + Returns true if a pair with the given key was not already in the map and so + this pair was added. + Returns false and sets OLDVALUE to the previous value, if a pair with the + given key was already in the map and only its value was replaced. */ + bool getput (KEYTYPE * key, VALUETYPE * value, VALUETYPE *& oldvalue) + { return gl_omap_getput (_ptr, key, value, &oldvalue); } + + /* Removes a pair from the ordered map. + Returns true if the key was found and its pair removed. + Returns false otherwise. */ + bool remove (KEYTYPE * key) + { return gl_omap_remove (_ptr, key); } + + /* Removes a pair from the ordered map and retrieves the previous value. + Returns true and sets OLDVALUE to the previous value, if the key was found + and its pair removed. + Returns false otherwise. */ + bool getremove (KEYTYPE * key, VALUETYPE *& oldvalue) + { return gl_omap_getremove (_ptr, key, &oldvalue); } + + /* Frees the entire ordered map. + (But this call does not free the keys and values of the pairs in the map. + It only invokes the KDISPOSE_FN on each key and the VDISPOSE_FN on each value + of the pairs in the map.) */ + void free () + { gl_omap_free (_ptr); _ptr = NULL; } + + // ------------------------------ Private stuff ------------------------------ + +private: + gl_omap_t _ptr; + +public: + // -------------------------------- Iterators -------------------------------- + // Only a forward iterator. + // Does not implement the STL operations (++, *, and != .end()), but a simpler + // interface that needs only one virtual function call per iteration instead + // of three. + + class iterator { + public: + + /* If there is a next pair, stores the next pair in KEY and VALUE, advances + the iterator, and returns true. Otherwise, returns false. */ + bool next (KEYTYPE *& key, VALUETYPE *& value) + { + const void *next_key; + const void *next_value; + bool has_next = gl_omap_iterator_next (&_state, &next_key, &next_value); + if (has_next) + { + key = static_cast(next_key); + value = static_cast(next_value); + } + return has_next; + } + + ~iterator () + { gl_omap_iterator_free (&_state); } + + #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC + public: + #else + private: + friend iterator gl_OMap::begin (); + #endif + + iterator (gl_omap_t ptr) + : _state (gl_omap_iterator (ptr)) + {} + + private: + + gl_omap_iterator_t _state; + }; + + /* Creates an iterator traversing the ordered map. + The map's contents must not be modified while the iterator is in use, + except for modifying the value of the last returned key or removing the + last returned pair. */ + iterator begin () + { return iterator (_ptr); } +}; + +#endif /* _GL_OMAP_HH */ diff --git a/include/libgnulib/gl_openssl.h b/include/libgnulib/gl_openssl.h new file mode 100755 index 0000000..0686473 --- /dev/null +++ b/include/libgnulib/gl_openssl.h @@ -0,0 +1,118 @@ +/* Wrap openssl crypto hash routines in gnulib interface. -*- coding: utf-8 -*- + + Copyright (C) 2013-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Pádraig Brady */ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifndef GL_OPENSSL_NAME +# error "Please define GL_OPENSSL_NAME to 1,5,256 etc." +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_OPENSSL_INLINE +# define GL_OPENSSL_INLINE _GL_INLINE +#endif + +/* Concatenate two preprocessor tokens. */ +#define _GLCRYPTO_CONCAT_(prefix, suffix) prefix##suffix +#define _GLCRYPTO_CONCAT(prefix, suffix) _GLCRYPTO_CONCAT_ (prefix, suffix) + +#if GL_OPENSSL_NAME == 5 +# define OPENSSL_ALG md5 +#else +# define OPENSSL_ALG _GLCRYPTO_CONCAT (sha, GL_OPENSSL_NAME) +#endif + +/* Context type mappings. */ +#if BASE_OPENSSL_TYPE != GL_OPENSSL_NAME +# undef BASE_OPENSSL_TYPE +# if GL_OPENSSL_NAME == 224 +# define BASE_OPENSSL_TYPE 256 +# elif GL_OPENSSL_NAME == 384 +# define BASE_OPENSSL_TYPE 512 +# endif +# define md5_CTX MD5_CTX +# define sha1_CTX SHA_CTX +# define sha224_CTX SHA256_CTX +# define sha224_ctx sha256_ctx +# define sha256_CTX SHA256_CTX +# define sha384_CTX SHA512_CTX +# define sha384_ctx sha512_ctx +# define sha512_CTX SHA512_CTX +# undef _gl_CTX +# undef _gl_ctx +# define _gl_CTX _GLCRYPTO_CONCAT (OPENSSL_ALG, _CTX) /* openssl type. */ +# define _gl_ctx _GLCRYPTO_CONCAT (OPENSSL_ALG, _ctx) /* gnulib type. */ + +struct _gl_ctx { _gl_CTX CTX; }; +#endif + +/* Function name mappings. */ +#define md5_prefix MD5 +#define sha1_prefix SHA1 +#define sha224_prefix SHA224 +#define sha256_prefix SHA256 +#define sha384_prefix SHA384 +#define sha512_prefix SHA512 +#define _GLCRYPTO_PREFIX _GLCRYPTO_CONCAT (OPENSSL_ALG, _prefix) +#define OPENSSL_FN(suffix) _GLCRYPTO_CONCAT (_GLCRYPTO_PREFIX, suffix) +#define GL_CRYPTO_FN(suffix) _GLCRYPTO_CONCAT (OPENSSL_ALG, suffix) + +GL_OPENSSL_INLINE void +GL_CRYPTO_FN (_init_ctx) (struct _gl_ctx *ctx) +{ (void) OPENSSL_FN (_Init) ((_gl_CTX *) ctx); } + +/* These were never exposed by gnulib. */ +#if ! (GL_OPENSSL_NAME == 224 || GL_OPENSSL_NAME == 384) +GL_OPENSSL_INLINE void +GL_CRYPTO_FN (_process_bytes) (const void *buf, size_t len, struct _gl_ctx *ctx) +{ OPENSSL_FN (_Update) ((_gl_CTX *) ctx, buf, len); } + +GL_OPENSSL_INLINE void +GL_CRYPTO_FN (_process_block) (const void *buf, size_t len, struct _gl_ctx *ctx) +{ GL_CRYPTO_FN (_process_bytes) (buf, len, ctx); } +#endif + +GL_OPENSSL_INLINE void * +GL_CRYPTO_FN (_finish_ctx) (struct _gl_ctx *ctx, void *restrict res) +{ OPENSSL_FN (_Final) ((unsigned char *) res, (_gl_CTX *) ctx); return res; } + +GL_OPENSSL_INLINE void * +GL_CRYPTO_FN (_buffer) (const char *buf, size_t len, void *restrict res) +{ return OPENSSL_FN () ((const unsigned char *) buf, len, (unsigned char *) res); } + +GL_OPENSSL_INLINE void * +GL_CRYPTO_FN (_read_ctx) (const struct _gl_ctx *ctx, void *restrict res) +{ + /* Assume any unprocessed bytes in ctx are not to be ignored. */ + _gl_CTX tmp_ctx = *(_gl_CTX *) ctx; + OPENSSL_FN (_Final) ((unsigned char *) res, &tmp_ctx); + return res; +} + +/* Undef so we can include multiple times. */ +#undef GL_CRYPTO_FN +#undef OPENSSL_FN +#undef _GLCRYPTO_PREFIX +#undef OPENSSL_ALG +#undef GL_OPENSSL_NAME + +_GL_INLINE_HEADER_END diff --git a/include/libgnulib/gl_oset.h b/include/libgnulib/gl_oset.h new file mode 100755 index 0000000..e6f8f79 --- /dev/null +++ b/include/libgnulib/gl_oset.h @@ -0,0 +1,344 @@ +/* Abstract ordered set data type. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_OSET_H +#define _GL_OSET_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_OSET_INLINE +# define GL_OSET_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* gl_oset is an abstract ordered set data type. It can contain any number + of objects ('void *' or 'const void *' pointers) in the order of a given + comparator function. Duplicates (in the sense of the comparator) are + forbidden. + + There are several implementations of this ordered set datatype, optimized + for different operations or for memory. You can start using the simplest + ordered set implementation, GL_ARRAY_OSET, and switch to a different + implementation later, when you realize which operations are performed + the most frequently. The API of the different implementations is exactly + the same; when switching to a different implementation, you only have to + change the gl_oset_create call. + + The implementations are: + GL_ARRAY_OSET a growable array + GL_AVLTREE_OSET a binary tree (AVL tree) + GL_RBTREE_OSET a binary tree (red-black tree) + + The memory consumption is asymptotically the same: O(1) for every object + in the set. When looking more closely at the average memory consumed + for an object, GL_ARRAY_OSET is the most compact representation, and + GL_AVLTREE_OSET, GL_RBTREE_OSET need more memory. + + The guaranteed average performance of the operations is, for a set of + n elements: + + Operation ARRAY TREE + + gl_oset_size O(1) O(1) + gl_oset_add O(n) O(log n) + gl_oset_remove O(n) O(log n) + gl_oset_update O(n) O(log n) + gl_oset_search O(log n) O(log n) + gl_oset_search_atleast O(log n) O(log n) + gl_oset_iterator O(1) O(log n) + gl_oset_iterator_atleast O(log n) O(log n) + gl_oset_iterator_next O(1) O(log n) + */ + +/* -------------------------- gl_oset_t Data Type -------------------------- */ + +/* Type of function used to compare two elements. Same as for qsort(). + NULL denotes pointer comparison. */ +typedef int (*gl_setelement_compar_fn) (const void *elt1, const void *elt2); + +#ifndef _GL_SETELEMENT_DISPOSE_FN_DEFINED +/* Type of function used to dispose an element once it's removed from a set. + NULL denotes a no-op. */ +typedef void (*gl_setelement_dispose_fn) (const void *elt); +# define _GL_SETELEMENT_DISPOSE_FN_DEFINED 1 +#endif + +/* Type of function used to compare an element with a threshold. + Returns true if the element is greater or equal than the threshold. */ +typedef bool (*gl_setelement_threshold_fn) (const void *elt, const void *threshold); + +struct gl_oset_impl; +/* Type representing an entire ordered set. */ +typedef struct gl_oset_impl * gl_oset_t; + +struct gl_oset_implementation; +/* Type representing a ordered set datatype implementation. */ +typedef const struct gl_oset_implementation * gl_oset_implementation_t; + +#if 0 /* Unless otherwise specified, these are defined inline below. */ + +/* Creates an empty set. + IMPLEMENTATION is one of GL_ARRAY_OSET, GL_AVLTREE_OSET, GL_RBTREE_OSET. + COMPAR_FN is an element comparison function or NULL. + DISPOSE_FN is an element disposal function or NULL. */ +/* declared in gl_xoset.h */ +extern gl_oset_t gl_oset_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +/* Likewise. Returns NULL upon out-of-memory. */ +extern gl_oset_t gl_oset_nx_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/; + +/* Returns the current number of elements in an ordered set. */ +extern size_t gl_oset_size (gl_oset_t set); + +/* Searches whether an element is already in the ordered set. + Returns true if found, or false if not present in the set. */ +extern bool gl_oset_search (gl_oset_t set, const void *elt); + +/* Searches the least element in the ordered set that compares greater or equal + to the given THRESHOLD. The representation of the THRESHOLD is defined + by the THRESHOLD_FN. + Returns true and stores the found element in *ELTP if found, otherwise returns + false. */ +extern bool gl_oset_search_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, + const void **eltp); + +/* Adds an element to an ordered set. + Returns true if it was not already in the set and added, false otherwise. */ +/* declared in gl_xoset.h */ +extern bool gl_oset_add (gl_oset_t set, const void *elt); + +/* Likewise. Returns -1 upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern int gl_oset_nx_add (gl_oset_t set, const void *elt); + +/* Removes an element from an ordered set. + Returns true if it was found and removed. */ +extern bool gl_oset_remove (gl_oset_t set, const void *elt); + +/* Invokes ACTION (ELT, ACTION_DATA) and updates the given ordered set if, + during this invocation, the attributes/properties of the element ELT change + in a way that influences the comparison function. + Warning: During the invocation of ACTION, the ordered set is inconsistent + and must not be accessed! + Returns 1 if the position of the element in the ordered set has changed as + a consequence, 0 if the element stayed at the same position, or -1 if it + collided with another element and was therefore removed. */ +extern int gl_oset_update (gl_oset_t set, const void *elt, + void (*action) (const void *elt, void *action_data), + void *action_data); + +/* Frees an entire ordered set. + (But this call does not free the elements of the set. It only invokes + the DISPOSE_FN on each of the elements of the set.) */ +extern void gl_oset_free (gl_oset_t set); + +#endif /* End of inline and gl_xoset.h-defined functions. */ + +/* --------------------- gl_oset_iterator_t Data Type --------------------- */ + +/* Functions for iterating through an ordered set. */ + +/* Type of an iterator that traverses an ordered set. + This is a fixed-size struct, so that creation of an iterator doesn't need + memory allocation on the heap. */ +typedef struct +{ + /* For fast dispatch of gl_oset_iterator_next. */ + const struct gl_oset_implementation *vtable; + /* For detecting whether the last returned element was removed. */ + gl_oset_t set; + size_t count; + /* Other, implementation-private fields. */ + void *p; void *q; + size_t i; size_t j; +} gl_oset_iterator_t; + +#if 0 /* These are defined inline below. */ + +/* Creates an iterator traversing an ordered set. + The set's contents must not be modified while the iterator is in use, + except for removing the last returned element. */ +extern gl_oset_iterator_t gl_oset_iterator (gl_oset_t set); + +/* Creates an iterator traversing the tail of an ordered set, that comprises + the elements that compare greater or equal to the given THRESHOLD. The + representation of the THRESHOLD is defined by the THRESHOLD_FN. */ +extern gl_oset_iterator_t gl_oset_iterator_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold); + +/* If there is a next element, stores the next element in *ELTP, advances the + iterator and returns true. Otherwise, returns false. */ +extern bool gl_oset_iterator_next (gl_oset_iterator_t *iterator, + const void **eltp); + +/* Frees an iterator. */ +extern void gl_oset_iterator_free (gl_oset_iterator_t *iterator); + +#endif /* End of inline functions. */ + +/* ------------------------ Implementation Details ------------------------ */ + +struct gl_oset_implementation +{ + /* gl_oset_t functions. */ + gl_oset_t (*nx_create_empty) (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn); + size_t (*size) (gl_oset_t set); + bool (*search) (gl_oset_t set, const void *elt); + bool (*search_atleast) (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, const void **eltp); + int (*nx_add) (gl_oset_t set, const void *elt); + bool (*remove_elt) (gl_oset_t set, const void *elt); + int (*update) (gl_oset_t set, const void *elt, + void (*action) (const void * /*elt*/, void * /*action_data*/), + void *action_data); + void (*oset_free) (gl_oset_t set); + /* gl_oset_iterator_t functions. */ + gl_oset_iterator_t (*iterator) (gl_oset_t set); + gl_oset_iterator_t (*iterator_atleast) (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold); + bool (*iterator_next) (gl_oset_iterator_t *iterator, const void **eltp); + void (*iterator_free) (gl_oset_iterator_t *iterator); +}; + +struct gl_oset_impl_base +{ + const struct gl_oset_implementation *vtable; + gl_setelement_compar_fn compar_fn; + gl_setelement_dispose_fn dispose_fn; +}; + +/* Define all functions of this file as accesses to the + struct gl_oset_implementation. */ + +GL_OSET_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/ +gl_oset_t +gl_oset_nx_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) +{ + return implementation->nx_create_empty (implementation, compar_fn, + dispose_fn); +} + +GL_OSET_INLINE size_t +gl_oset_size (gl_oset_t set) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->size (set); +} + +GL_OSET_INLINE bool +gl_oset_search (gl_oset_t set, const void *elt) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->search (set, elt); +} + +GL_OSET_INLINE bool +gl_oset_search_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, const void **eltp) +{ + return ((const struct gl_oset_impl_base *) set)->vtable + ->search_atleast (set, threshold_fn, threshold, eltp); +} + +_GL_ATTRIBUTE_NODISCARD GL_OSET_INLINE int +gl_oset_nx_add (gl_oset_t set, const void *elt) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->nx_add (set, elt); +} + +GL_OSET_INLINE bool +gl_oset_remove (gl_oset_t set, const void *elt) +{ + return ((const struct gl_oset_impl_base *) set)->vtable + ->remove_elt (set, elt); +} + +GL_OSET_INLINE int +gl_oset_update (gl_oset_t set, const void *elt, + void (*action) (const void * /*elt*/, void * /*action_data*/), + void *action_data) +{ + return ((const struct gl_oset_impl_base *) set)->vtable + ->update (set, elt, action, action_data); +} + +GL_OSET_INLINE void +gl_oset_free (gl_oset_t set) +{ + ((const struct gl_oset_impl_base *) set)->vtable->oset_free (set); +} + +GL_OSET_INLINE gl_oset_iterator_t +gl_oset_iterator (gl_oset_t set) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->iterator (set); +} + +GL_OSET_INLINE gl_oset_iterator_t +gl_oset_iterator_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold) +{ + return ((const struct gl_oset_impl_base *) set)->vtable + ->iterator_atleast (set, threshold_fn, threshold); +} + +GL_OSET_INLINE bool +gl_oset_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) +{ + return iterator->vtable->iterator_next (iterator, eltp); +} + +GL_OSET_INLINE void +gl_oset_iterator_free (gl_oset_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_OSET_H */ diff --git a/include/libgnulib/gl_oset.hh b/include/libgnulib/gl_oset.hh new file mode 100755 index 0000000..ada44a8 --- /dev/null +++ b/include/libgnulib/gl_oset.hh @@ -0,0 +1,198 @@ +/* Abstract ordered set data type as a C++ class. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +#ifndef _GL_OSET_HH +#define _GL_OSET_HH + +#include "gl_oset.h" +#include "gl_xoset.h" + +#include /* because Gnulib's may '#define free ...' */ + +/* gl_OSet is a C++ wrapper around the gl_oset data type. + Its element type is 'ELTYPE *'. + + It is merely a pointer, not a smart pointer. In other words: + it does NOT do reference-counting, and the destructor does nothing. */ + +template class gl_OSet; + +template +class gl_OSet +{ +public: + // ------------------------------ Constructors ------------------------------ + + gl_OSet () + : _ptr (NULL) + {} + + /* Creates an empty set. + IMPLEMENTATION is one of GL_ARRAY_OSET, GL_AVLTREE_OSET, GL_RBTREE_OSET. + COMPAR_FN is an element comparison function or NULL. + DISPOSE_FN is an element disposal function or NULL. */ + gl_OSet (gl_oset_implementation_t implementation, + int (*compar_fn) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + void (*dispose_fn) (ELTYPE *)) + : _ptr (gl_oset_create_empty (implementation, + reinterpret_cast(compar_fn), + reinterpret_cast(dispose_fn))) + {} + + /* Copy constructor. */ + gl_OSet (const gl_OSet& x) + { _ptr = x._ptr; } + + /* Assignment operator. */ + gl_OSet& operator= (const gl_OSet& x) + { _ptr = x._ptr; return *this; } + + // ------------------------------- Destructor ------------------------------- + + ~gl_OSet () + { _ptr = NULL; } + + // ----------------------- Read-only member functions ----------------------- + + /* Returns the current number of elements in the ordered set. */ + size_t size () const + { return gl_oset_size (_ptr); } + + /* Searches whether an element is already in the ordered set. + Returns true if found, or false if not present in the set. */ + bool search (ELTYPE * elt) const + { return gl_oset_search (_ptr, elt); } + + /* Searches the least element in the ordered set that compares greater or equal + to the given THRESHOLD. The representation of the THRESHOLD is defined + by the THRESHOLD_FN. + Returns true and store the found element in ELT if found, otherwise returns + false. */ + template + bool search_atleast (bool (*threshold_fn) (ELTYPE * /*elt*/, THT * /*threshold*/), + THT * threshold, + ELTYPE *& elt) const + { return gl_oset_search_atleast (_ptr, reinterpret_cast(threshold_fn), threshold, &elt); } + + // ----------------------- Modifying member functions ----------------------- + + /* Adds an element to the ordered set. + Returns true if it was not already in the set and added, false otherwise. */ + bool add (ELTYPE * elt) + { return gl_oset_add (_ptr, elt); } + + /* Removes an element from the ordered set. + Returns true if it was found and removed. */ + bool remove (ELTYPE * elt) + { return gl_oset_remove (_ptr, elt); } + + /* Invokes ACTION (ELT, ACTION_DATA) and updates the ordered set if, + during this invocation, the attributes/properties of the element ELT change + in a way that influences the comparison function. + Warning: During the invocation of ACTION, the ordered set is inconsistent + and must not be accessed! + Returns 1 if the position of the element in the ordered set has changed as + a consequence, 0 if the element stayed at the same position, or -1 if it + collided with another element and was therefore removed. */ + template + int update (ELTYPE * elt, + void (*action) (ELTYPE * /*elt*/, DT * /*action_data*/), + DT *action_data) + { + return gl_oset_update (_ptr, elt, + reinterpret_cast (action), + action_data); + } + + /* Frees the entire ordered set. + (But this call does not free the elements of the set. It only invokes + the DISPOSE_FN on each of the elements of the set.) */ + void free () + { gl_oset_free (_ptr); } + + // ------------------------------ Private stuff ------------------------------ + +private: + gl_oset_t _ptr; + +public: + // -------------------------------- Iterators -------------------------------- + // Only a forward iterator. + // Does not implement the STL operations (++, *, and != .end()), but a simpler + // interface that needs only one virtual function call per iteration instead + // of three. + + class iterator { + public: + + /* If there is a next element, stores the next element in ELT, advances the + iterator and returns true. Otherwise, returns false. */ + bool next (ELTYPE *& elt) + { + const void *next_elt; + bool has_next = gl_oset_iterator_next (&_state, &next_elt); + if (has_next) + elt = static_cast(next_elt); + return has_next; + } + + ~iterator () + { gl_oset_iterator_free (&_state); } + + #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC || defined __EDG__ || (defined _MSC_VER && !defined __clang__) + public: + #else + private: + friend iterator gl_OSet::begin (); + template + friend iterator gl_OSet::begin_atleast (bool (*) (ELTYPE *, THT *), THT *); + #endif + + iterator (gl_oset_t ptr) + : _state (gl_oset_iterator (ptr)) + {} + + template + iterator (gl_oset_t ptr, + bool (*threshold_fn) (ELTYPE * /*elt*/, THT * /*threshold*/), + THT * threshold) + : _state (gl_oset_iterator_atleast (ptr, reinterpret_cast(threshold_fn), threshold)) + {} + + private: + + gl_oset_iterator_t _state; + }; + + /* Creates an iterator traversing the ordered set. + The set's contents must not be modified while the iterator is in use, + except for removing the last returned element. */ + iterator begin () + { return iterator (_ptr); } + + /* Creates an iterator traversing the tail of an ordered set, that comprises + the elements that compare greater or equal to the given THRESHOLD. The + representation of the THRESHOLD is defined by the THRESHOLD_FN. + The set's contents must not be modified while the iterator is in use, + except for removing the last returned element. */ + template + iterator begin_atleast (bool (*threshold_fn) (ELTYPE * /*elt*/, THT * /*threshold*/), + THT * threshold) + { return iterator (_ptr, threshold_fn, threshold); } +}; + +#endif /* _GL_OSET_HH */ diff --git a/include/libgnulib/gl_rbtree_list.h b/include/libgnulib/gl_rbtree_list.h new file mode 100755 index 0000000..1428091 --- /dev/null +++ b/include/libgnulib/gl_rbtree_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_RBTREE_LIST_H +#define _GL_RBTREE_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_rbtree_list_implementation; +#define GL_RBTREE_LIST &gl_rbtree_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_RBTREE_LIST_H */ diff --git a/include/libgnulib/gl_rbtree_omap.h b/include/libgnulib/gl_rbtree_omap.h new file mode 100755 index 0000000..71129fa --- /dev/null +++ b/include/libgnulib/gl_rbtree_omap.h @@ -0,0 +1,34 @@ +/* Ordered map data type implemented by a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_RBTREE_OMAP_H +#define _GL_RBTREE_OMAP_H + +#include "gl_omap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_omap_implementation gl_rbtree_omap_implementation; +#define GL_RBTREE_OMAP &gl_rbtree_omap_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_RBTREE_OMAP_H */ diff --git a/include/libgnulib/gl_rbtree_ordered.h b/include/libgnulib/gl_rbtree_ordered.h new file mode 100755 index 0000000..a79aa27 --- /dev/null +++ b/include/libgnulib/gl_rbtree_ordered.h @@ -0,0 +1,800 @@ +/* Ordered {set,map} data type implemented by a binary tree. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* A red-black tree is a binary tree where every node is colored black or + red such that + 1. The root is black. + 2. No red node has a red parent. + Or equivalently: No red node has a red child. + 3. All paths from the root down to any NULL endpoint contain the same + number of black nodes. + Let's call this the "black-height" bh of the tree. It follows that every + such path contains exactly bh black and between 0 and bh red nodes. (The + extreme cases are a path containing only black nodes, and a path colored + alternately black-red-black-red-...-black-red.) The height of the tree + therefore is >= bh, <= 2*bh. + */ + +/* Color of a node. */ +typedef enum color { BLACK, RED } color_t; + +/* Tree node implementation, valid for this file only. */ +struct NODE_IMPL +{ + struct NODE_IMPL *left; /* left branch, or NULL */ + struct NODE_IMPL *right; /* right branch, or NULL */ + /* Parent pointer, or NULL. The parent pointer is not needed for most + operations. It is needed so that a NODE_T can be returned without + memory allocation, on which the functions _remove_node, + _add_before, _add_after can be implemented. */ + struct NODE_IMPL *parent; + color_t color; /* node's color */ + NODE_PAYLOAD_FIELDS +}; +typedef struct NODE_IMPL * NODE_T; + +/* Concrete CONTAINER_IMPL type, valid for this file only. */ +struct CONTAINER_IMPL +{ + struct CONTAINER_IMPL_BASE base; + struct NODE_IMPL *root; /* root node or NULL */ + size_t count; /* number of nodes */ +}; + +/* A red-black tree of height h has a black-height bh >= ceil(h/2) and + therefore at least 2^ceil(h/2) - 1 elements. So, h <= 116 (because a tree + of height h >= 117 would have at least 2^59 - 1 elements, and because even + on 64-bit machines, + sizeof (NODE_IMPL) * (2^59 - 1) > 2^64 + this would exceed the address space of the machine. */ +#define MAXHEIGHT 116 + +/* Rotates left a subtree. + + B D + / \ / \ + A D --> B E + / \ / \ + C E A C + + Changes the tree structure, updates the branch sizes. + The caller must update the colors and register D as child of its parent. */ +static NODE_T +rotate_left (NODE_T b_node, NODE_T d_node) +{ + NODE_T c_node = d_node->left; + + b_node->right = c_node; + d_node->left = b_node; + + d_node->parent = b_node->parent; + b_node->parent = d_node; + if (c_node != NULL) + c_node->parent = b_node; + + return d_node; +} + +/* Rotates right a subtree. + + D B + / \ / \ + B E --> A D + / \ / \ + A C C E + + Changes the tree structure, updates the branch sizes. + The caller must update the colors and register B as child of its parent. */ +static NODE_T +rotate_right (NODE_T b_node, NODE_T d_node) +{ + NODE_T c_node = b_node->right; + + d_node->left = c_node; + b_node->right = d_node; + + b_node->parent = d_node->parent; + d_node->parent = b_node; + if (c_node != NULL) + c_node->parent = d_node; + + return b_node; +} + +/* Ensures the tree is balanced, after an insertion operation. + Also assigns node->color. + parent is the given node's parent, known to be non-NULL. */ +static void +rebalance_after_add (CONTAINER_T container, NODE_T node, NODE_T parent) +{ + for (;;) + { + /* At this point, parent = node->parent != NULL. + Think of node->color being RED (although node->color is not yet + assigned.) */ + NODE_T grandparent; + NODE_T uncle; + + if (parent->color == BLACK) + { + /* A RED color for node is acceptable. */ + node->color = RED; + return; + } + + grandparent = parent->parent; + /* Since parent is RED, we know that + grandparent is != NULL and colored BLACK. */ + + if (grandparent->left == parent) + uncle = grandparent->right; + else if (grandparent->right == parent) + uncle = grandparent->left; + else + abort (); + + if (uncle != NULL && uncle->color == RED) + { + /* Change grandparent from BLACK to RED, and + change parent and uncle from RED to BLACK. + This makes it acceptable for node to be RED. */ + node->color = RED; + parent->color = uncle->color = BLACK; + node = grandparent; + } + else + { + /* grandparent and uncle are BLACK. parent is RED. node wants + to be RED too. + In this case, recoloring is not sufficient. Need to perform + one or two rotations. */ + NODE_T *grandparentp; + + if (grandparent->parent == NULL) + grandparentp = &container->root; + else if (grandparent->parent->left == grandparent) + grandparentp = &grandparent->parent->left; + else if (grandparent->parent->right == grandparent) + grandparentp = &grandparent->parent->right; + else + abort (); + + if (grandparent->left == parent) + { + if (parent->right == node) + { + /* Rotation between node and parent. */ + grandparent->left = rotate_left (parent, node); + node = parent; + parent = grandparent->left; + } + /* grandparent and uncle are BLACK. parent and node want to be + RED. parent = grandparent->left. node = parent->left. + + grandparent parent + bh+1 bh+1 + / \ / \ + parent uncle --> node grandparent + bh bh bh bh + / \ / \ + node C C uncle + bh bh bh bh + */ + *grandparentp = rotate_right (parent, grandparent); + parent->color = BLACK; + node->color = grandparent->color = RED; + } + else /* grandparent->right == parent */ + { + if (parent->left == node) + { + /* Rotation between node and parent. */ + grandparent->right = rotate_right (node, parent); + node = parent; + parent = grandparent->right; + } + /* grandparent and uncle are BLACK. parent and node want to be + RED. parent = grandparent->right. node = parent->right. + + grandparent parent + bh+1 bh+1 + / \ / \ + uncle parent --> grandparent node + bh bh bh bh + / \ / \ + C node uncle C + bh bh bh bh + */ + *grandparentp = rotate_left (grandparent, parent); + parent->color = BLACK; + node->color = grandparent->color = RED; + } + return; + } + + /* Start again with a new (node, parent) pair. */ + parent = node->parent; + + if (parent == NULL) + { + /* Change node's color from RED to BLACK. This increases the + tree's black-height. */ + node->color = BLACK; + return; + } + } +} + +/* Ensures the tree is balanced, after a deletion operation. + CHILD was a grandchild of PARENT and is now its child. Between them, + a black node was removed. CHILD is also black, or NULL. + (CHILD can also be NULL. But PARENT is non-NULL.) */ +static void +rebalance_after_remove (CONTAINER_T container, NODE_T child, NODE_T parent) +{ + for (;;) + { + /* At this point, we reduced the black-height of the CHILD subtree by 1. + To make up, either look for a possibility to turn a RED to a BLACK + node, or try to reduce the black-height tree of CHILD's sibling + subtree as well. */ + NODE_T *parentp; + + if (parent->parent == NULL) + parentp = &container->root; + else if (parent->parent->left == parent) + parentp = &parent->parent->left; + else if (parent->parent->right == parent) + parentp = &parent->parent->right; + else + abort (); + + if (parent->left == child) + { + NODE_T sibling = parent->right; + /* sibling's black-height is >= 1. In particular, + sibling != NULL. + + parent + / \ + child sibling + bh bh+1 + */ + + if (sibling->color == RED) + { + /* sibling is RED, hence parent is BLACK and sibling's children + are non-NULL and BLACK. + + parent sibling + bh+2 bh+2 + / \ / \ + child sibling --> parent SR + bh bh+1 bh+1 bh+1 + / \ / \ + SL SR child SL + bh+1 bh+1 bh bh+1 + */ + *parentp = rotate_left (parent, sibling); + parent->color = RED; + sibling->color = BLACK; + + /* Concentrate on the subtree of parent. The new sibling is + one of the old sibling's children, and known to be BLACK. */ + parentp = &sibling->left; + sibling = parent->right; + } + /* Now we know that sibling is BLACK. + + parent + / \ + child sibling + bh bh+1 + */ + if (sibling->right != NULL && sibling->right->color == RED) + { + /* + parent sibling + bh+1|bh+2 bh+1|bh+2 + / \ / \ + child sibling --> parent SR + bh bh+1 bh+1 bh+1 + / \ / \ + SL SR child SL + bh bh bh bh + */ + *parentp = rotate_left (parent, sibling); + sibling->color = parent->color; + parent->color = BLACK; + sibling->right->color = BLACK; + return; + } + else if (sibling->left != NULL && sibling->left->color == RED) + { + /* + parent parent + bh+1|bh+2 bh+1|bh+2 + / \ / \ + child sibling --> child SL + bh bh+1 bh bh+1 + / \ / \ + SL SR SLL sibling + bh bh bh bh + / \ / \ + SLL SLR SLR SR + bh bh bh bh + + where SLL, SLR, SR are all black. + */ + parent->right = rotate_right (sibling->left, sibling); + /* Change sibling from BLACK to RED and SL from RED to BLACK. */ + sibling->color = RED; + sibling = parent->right; + sibling->color = BLACK; + + /* Now do as in the previous case. */ + *parentp = rotate_left (parent, sibling); + sibling->color = parent->color; + parent->color = BLACK; + sibling->right->color = BLACK; + return; + } + else + { + if (parent->color == BLACK) + { + /* Change sibling from BLACK to RED. Then the entire + subtree at parent has decreased its black-height. + parent parent + bh+2 bh+1 + / \ / \ + child sibling --> child sibling + bh bh+1 bh bh + */ + sibling->color = RED; + + child = parent; + } + else + { + /* Change parent from RED to BLACK, but compensate by + changing sibling from BLACK to RED. + parent parent + bh+1 bh+1 + / \ / \ + child sibling --> child sibling + bh bh+1 bh bh + */ + parent->color = BLACK; + sibling->color = RED; + return; + } + } + } + else if (parent->right == child) + { + NODE_T sibling = parent->left; + /* sibling's black-height is >= 1. In particular, + sibling != NULL. + + parent + / \ + sibling child + bh+1 bh + */ + + if (sibling->color == RED) + { + /* sibling is RED, hence parent is BLACK and sibling's children + are non-NULL and BLACK. + + parent sibling + bh+2 bh+2 + / \ / \ + sibling child --> SR parent + bh+1 ch bh+1 bh+1 + / \ / \ + SL SR SL child + bh+1 bh+1 bh+1 bh + */ + *parentp = rotate_right (sibling, parent); + parent->color = RED; + sibling->color = BLACK; + + /* Concentrate on the subtree of parent. The new sibling is + one of the old sibling's children, and known to be BLACK. */ + parentp = &sibling->right; + sibling = parent->left; + } + /* Now we know that sibling is BLACK. + + parent + / \ + sibling child + bh+1 bh + */ + if (sibling->left != NULL && sibling->left->color == RED) + { + /* + parent sibling + bh+1|bh+2 bh+1|bh+2 + / \ / \ + sibling child --> SL parent + bh+1 bh bh+1 bh+1 + / \ / \ + SL SR SR child + bh bh bh bh + */ + *parentp = rotate_right (sibling, parent); + sibling->color = parent->color; + parent->color = BLACK; + sibling->left->color = BLACK; + return; + } + else if (sibling->right != NULL && sibling->right->color == RED) + { + /* + parent parent + bh+1|bh+2 bh+1|bh+2 + / \ / \ + sibling child --> SR child + bh+1 bh bh+1 bh + / \ / \ + SL SR sibling SRR + bh bh bh bh + / \ / \ + SRL SRR SL SRL + bh bh bh bh + + where SL, SRL, SRR are all black. + */ + parent->left = rotate_left (sibling, sibling->right); + /* Change sibling from BLACK to RED and SL from RED to BLACK. */ + sibling->color = RED; + sibling = parent->left; + sibling->color = BLACK; + + /* Now do as in the previous case. */ + *parentp = rotate_right (sibling, parent); + sibling->color = parent->color; + parent->color = BLACK; + sibling->left->color = BLACK; + return; + } + else + { + if (parent->color == BLACK) + { + /* Change sibling from BLACK to RED. Then the entire + subtree at parent has decreased its black-height. + parent parent + bh+2 bh+1 + / \ / \ + sibling child --> sibling child + bh+1 bh bh bh + */ + sibling->color = RED; + + child = parent; + } + else + { + /* Change parent from RED to BLACK, but compensate by + changing sibling from BLACK to RED. + parent parent + bh+1 bh+1 + / \ / \ + sibling child --> sibling child + bh+1 bh bh bh + */ + parent->color = BLACK; + sibling->color = RED; + return; + } + } + } + else + abort (); + + /* Start again with a new (child, parent) pair. */ + parent = child->parent; + +#if 0 /* Already handled. */ + if (child != NULL && child->color == RED) + { + child->color = BLACK; + return; + } +#endif + + if (parent == NULL) + return; + } +} + +static NODE_T +gl_tree_nx_add_first (CONTAINER_T container, NODE_PAYLOAD_PARAMS) +{ + /* Create new node. */ + NODE_T new_node = + (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); + + if (new_node == NULL) + return NULL; + + new_node->left = NULL; + new_node->right = NULL; + NODE_PAYLOAD_ASSIGN(new_node) + + /* Add it to the tree. */ + if (container->root == NULL) + { + new_node->color = BLACK; + container->root = new_node; + new_node->parent = NULL; + } + else + { + NODE_T node; + + for (node = container->root; node->left != NULL; ) + node = node->left; + + node->left = new_node; + new_node->parent = node; + + /* Color and rebalance. */ + rebalance_after_add (container, new_node, node); + } + + container->count++; + return new_node; +} + +/* Adds the already allocated NEW_NODE to the tree, right before NODE. */ +static void +gl_tree_add_node_before (CONTAINER_T container, NODE_T node, NODE_T new_node) +{ + new_node->left = NULL; + new_node->right = NULL; + + /* Add it to the tree. */ + if (node->left == NULL) + node->left = new_node; + else + { + for (node = node->left; node->right != NULL; ) + node = node->right; + node->right = new_node; + } + new_node->parent = node; + + /* Color and rebalance. */ + rebalance_after_add (container, new_node, node); + + container->count++; +} + +static NODE_T +gl_tree_nx_add_before (CONTAINER_T container, NODE_T node, NODE_PAYLOAD_PARAMS) +{ + /* Create new node. */ + NODE_T new_node = + (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); + + if (new_node == NULL) + return NULL; + + NODE_PAYLOAD_ASSIGN(new_node) + + gl_tree_add_node_before (container, node, new_node); + return new_node; +} + +/* Adds the already allocated NEW_NODE to the tree, right after NODE. */ +static void +gl_tree_add_node_after (CONTAINER_T container, NODE_T node, NODE_T new_node) +{ + new_node->left = NULL; + new_node->right = NULL; + + /* Add it to the tree. */ + if (node->right == NULL) + node->right = new_node; + else + { + for (node = node->right; node->left != NULL; ) + node = node->left; + node->left = new_node; + } + new_node->parent = node; + + /* Color and rebalance. */ + rebalance_after_add (container, new_node, node); + + container->count++; +} + +static NODE_T +gl_tree_nx_add_after (CONTAINER_T container, NODE_T node, NODE_PAYLOAD_PARAMS) +{ + /* Create new node. */ + NODE_T new_node = + (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); + + if (new_node == NULL) + return NULL; + + NODE_PAYLOAD_ASSIGN(new_node) + + gl_tree_add_node_after (container, node, new_node); + return new_node; +} + +static void +gl_tree_remove_node_no_free (CONTAINER_T container, NODE_T node) +{ + NODE_T parent = node->parent; + + if (node->left == NULL) + { + /* Replace node with node->right. */ + NODE_T child = node->right; + + if (child != NULL) + { + child->parent = parent; + /* Since node->left == NULL, child must be RED and of height 1, + hence node must have been BLACK. Recolor the child. */ + child->color = BLACK; + } + if (parent == NULL) + container->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + + if (child == NULL && node->color == BLACK) + rebalance_after_remove (container, child, parent); + } + } + else if (node->right == NULL) + { + /* It is not absolutely necessary to treat this case. But the more + general case below is more complicated, hence slower. */ + /* Replace node with node->left. */ + NODE_T child = node->left; + + child->parent = parent; + /* Since node->right == NULL, child must be RED and of height 1, + hence node must have been BLACK. Recolor the child. */ + child->color = BLACK; + if (parent == NULL) + container->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + } + } + else + { + /* Replace node with the rightmost element of the node->left subtree. */ + NODE_T subst; + NODE_T subst_parent; + NODE_T child; + color_t removed_color; + + for (subst = node->left; subst->right != NULL; ) + subst = subst->right; + + subst_parent = subst->parent; + + child = subst->left; + + removed_color = subst->color; + + /* The case subst_parent == node is special: If we do nothing special, + we get confusion about node->left, subst->left and child->parent. + subst_parent == node + <==> The 'for' loop above terminated immediately. + <==> subst == subst_parent->left + [otherwise subst == subst_parent->right] + In this case, we would need to first set + child->parent = node; node->left = child; + and later - when we copy subst into node's position - again + child->parent = subst; subst->left = child; + Altogether a no-op. */ + if (subst_parent != node) + { + if (child != NULL) + child->parent = subst_parent; + subst_parent->right = child; + } + + /* Copy subst into node's position. + (This is safer than to copy subst's value into node, keep node in + place, and free subst.) */ + if (subst_parent != node) + { + subst->left = node->left; + subst->left->parent = subst; + } + subst->right = node->right; + subst->right->parent = subst; + subst->color = node->color; + subst->parent = parent; + if (parent == NULL) + container->root = subst; + else if (parent->left == node) + parent->left = subst; + else /* parent->right == node */ + parent->right = subst; + + if (removed_color == BLACK) + { + if (child != NULL && child->color == RED) + /* Recolor the child. */ + child->color = BLACK; + else + /* Rebalancing starts at child's parent, that is subst_parent - + except when subst_parent == node. In this case, we need to use + its replacement, subst. */ + rebalance_after_remove (container, child, + subst_parent != node ? subst_parent : subst); + } + } + + container->count--; +} + +static bool +gl_tree_remove_node (CONTAINER_T container, NODE_T node) +{ + gl_tree_remove_node_no_free (container, node); + NODE_PAYLOAD_DISPOSE (container, node) + free (node); + return true; +} + +/* For debugging. */ +static unsigned int +check_invariants (NODE_T node, NODE_T parent, size_t *counterp) +{ + unsigned int left_blackheight = + (node->left != NULL ? check_invariants (node->left, node, counterp) : 0); + unsigned int right_blackheight = + (node->right != NULL ? check_invariants (node->right, node, counterp) : 0); + + if (!(node->parent == parent)) + abort (); + if (!(node->color == BLACK || node->color == RED)) + abort (); + if (parent == NULL && !(node->color == BLACK)) + abort (); + if (!(left_blackheight == right_blackheight)) + abort (); + + (*counterp)++; + + return left_blackheight + (node->color == BLACK ? 1 : 0); +} diff --git a/include/libgnulib/gl_rbtree_oset.h b/include/libgnulib/gl_rbtree_oset.h new file mode 100755 index 0000000..b0d5c75 --- /dev/null +++ b/include/libgnulib/gl_rbtree_oset.h @@ -0,0 +1,34 @@ +/* Ordered set data type implemented by a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_RBTREE_OSET_H +#define _GL_RBTREE_OSET_H + +#include "gl_oset.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_oset_implementation gl_rbtree_oset_implementation; +#define GL_RBTREE_OSET &gl_rbtree_oset_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_RBTREE_OSET_H */ diff --git a/include/libgnulib/gl_rbtreehash_list.h b/include/libgnulib/gl_rbtreehash_list.h new file mode 100755 index 0000000..6381530 --- /dev/null +++ b/include/libgnulib/gl_rbtreehash_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by a hash table with a binary tree. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +#ifndef _GL_RBTREEHASH_LIST_H +#define _GL_RBTREEHASH_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_rbtreehash_list_implementation; +#define GL_RBTREEHASH_LIST &gl_rbtreehash_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_RBTREEHASH_LIST_H */ diff --git a/include/libgnulib/gl_set.h b/include/libgnulib/gl_set.h new file mode 100755 index 0000000..51d7fae --- /dev/null +++ b/include/libgnulib/gl_set.h @@ -0,0 +1,283 @@ +/* Abstract set data type. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_SET_H +#define _GL_SET_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_SET_INLINE +# define GL_SET_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* gl_set is an abstract set data type. It can contain any number of objects + ('void *' or 'const void *' pointers); the order does not matter. + Duplicates (in the sense of the comparator) are forbidden. + + There are several implementations of this set datatype, optimized for + different operations or for memory. You can start using the simplest set + implementation, GL_ARRAY_SET, and switch to a different implementation + later, when you realize which operations are performed the most frequently. + The API of the different implementations is exactly the same; when switching + to a different implementation, you only have to change the gl_set_create + call. + + The implementations are: + GL_ARRAY_SET a growable array + GL_LINKEDHASH_SET a hash table with a linked list + GL_HASH_SET a hash table + + The memory consumption is asymptotically the same: O(1) for every object + in the set. When looking more closely at the average memory consumed + for an object, GL_ARRAY_SET is the most compact representation, then comes + GL_HASH_SET, and GL_LINKEDHASH_SET needs the most memory. + + The guaranteed average performance of the operations is, for a set of + n elements: + + Operation ARRAY LINKEDHASH + HASH + + gl_set_size O(1) O(1) + gl_set_add O(n) O(1) + gl_set_remove O(n) O(1) + gl_set_search O(n) O(1) + gl_set_iterator O(1) O(1) + gl_set_iterator_next O(1) O(1) + */ + +/* --------------------------- gl_set_t Data Type --------------------------- */ + +/* Type of function used to compare two elements. + NULL denotes pointer comparison. */ +typedef bool (*gl_setelement_equals_fn) (const void *elt1, const void *elt2); + +/* Type of function used to compute a hash code. + NULL denotes a function that depends only on the pointer itself. */ +typedef size_t (*gl_setelement_hashcode_fn) (const void *elt); + +#ifndef _GL_SETELEMENT_DISPOSE_FN_DEFINED +/* Type of function used to dispose an element once it's removed from a set. + NULL denotes a no-op. */ +typedef void (*gl_setelement_dispose_fn) (const void *elt); +# define _GL_SETELEMENT_DISPOSE_FN_DEFINED 1 +#endif + +struct gl_set_impl; +/* Type representing an entire set. */ +typedef struct gl_set_impl * gl_set_t; + +struct gl_set_implementation; +/* Type representing a set datatype implementation. */ +typedef const struct gl_set_implementation * gl_set_implementation_t; + +#if 0 /* Unless otherwise specified, these are defined inline below. */ + +/* Creates an empty set. + IMPLEMENTATION is one of GL_ARRAY_SET, GL_LINKEDHASH_SET, GL_HASH_SET. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. */ +/* declared in gl_xset.h */ +extern gl_set_t gl_set_create_empty (gl_set_implementation_t implementation, + gl_setelement_equals_fn equals_fn, + gl_setelement_hashcode_fn hashcode_fn, + gl_setelement_dispose_fn dispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +/* Likewise. Returns NULL upon out-of-memory. */ +extern gl_set_t gl_set_nx_create_empty (gl_set_implementation_t implementation, + gl_setelement_equals_fn equals_fn, + gl_setelement_hashcode_fn hashcode_fn, + gl_setelement_dispose_fn dispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/; + +/* Returns the current number of elements in a set. */ +extern size_t gl_set_size (gl_set_t set); + +/* Searches whether an element is already in the set. + Returns true if found, or false if not present in the set. */ +extern bool gl_set_search (gl_set_t set, const void *elt); + +/* Adds an element to a set. + Returns true if it was not already in the set and added, false otherwise. */ +/* declared in gl_xset.h */ +extern bool gl_set_add (gl_set_t set, const void *elt); + +/* Likewise. Returns -1 upon out-of-memory. */ +_GL_ATTRIBUTE_NODISCARD +extern int gl_set_nx_add (gl_set_t set, const void *elt); + +/* Removes an element from a set. + Returns true if it was found and removed. */ +extern bool gl_set_remove (gl_set_t set, const void *elt); + +/* Frees an entire set. + (But this call does not free the elements of the set. It only invokes + the DISPOSE_FN on each of the elements of the set.) */ +extern void gl_set_free (gl_set_t set); + +#endif /* End of inline and gl_xset.h-defined functions. */ + +/* ---------------------- gl_set_iterator_t Data Type ---------------------- */ + +/* Functions for iterating through a set. + Note: Iterating through a set of type GL_HASH_SET returns the elements in an + unpredictable order. If you need a predictable order, use GL_LINKEDHASH_SET + instead of GL_HASH_SET. */ + +/* Type of an iterator that traverses a set. + This is a fixed-size struct, so that creation of an iterator doesn't need + memory allocation on the heap. */ +typedef struct +{ + /* For fast dispatch of gl_set_iterator_next. */ + const struct gl_set_implementation *vtable; + /* For detecting whether the last returned element was removed. */ + gl_set_t set; + size_t count; + /* Other, implementation-private fields. */ + void *p; void *q; + size_t i; size_t j; +} gl_set_iterator_t; + +#if 0 /* These are defined inline below. */ + +/* Creates an iterator traversing a set. + The set's contents must not be modified while the iterator is in use, + except for removing the last returned element. */ +extern gl_set_iterator_t gl_set_iterator (gl_set_t set); + +/* If there is a next element, stores the next element in *ELTP, advances the + iterator and returns true. Otherwise, returns false. */ +extern bool gl_set_iterator_next (gl_set_iterator_t *iterator, + const void **eltp); + +/* Frees an iterator. */ +extern void gl_set_iterator_free (gl_set_iterator_t *iterator); + +#endif /* End of inline functions. */ + +/* ------------------------ Implementation Details ------------------------ */ + +struct gl_set_implementation +{ + /* gl_set_t functions. */ + gl_set_t (*nx_create_empty) (gl_set_implementation_t implementation, + gl_setelement_equals_fn equals_fn, + gl_setelement_hashcode_fn hashcode_fn, + gl_setelement_dispose_fn dispose_fn); + size_t (*size) (gl_set_t set); + bool (*search) (gl_set_t set, const void *elt); + int (*nx_add) (gl_set_t set, const void *elt); + bool (*remove_elt) (gl_set_t set, const void *elt); + void (*set_free) (gl_set_t set); + /* gl_set_iterator_t functions. */ + gl_set_iterator_t (*iterator) (gl_set_t set); + bool (*iterator_next) (gl_set_iterator_t *iterator, const void **eltp); + void (*iterator_free) (gl_set_iterator_t *iterator); +}; + +struct gl_set_impl_base +{ + const struct gl_set_implementation *vtable; + gl_setelement_equals_fn equals_fn; + gl_setelement_dispose_fn dispose_fn; +}; + +/* Define all functions of this file as accesses to the + struct gl_set_implementation. */ + +GL_SET_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/ +gl_set_t +gl_set_nx_create_empty (gl_set_implementation_t implementation, + gl_setelement_equals_fn equals_fn, + gl_setelement_hashcode_fn hashcode_fn, + gl_setelement_dispose_fn dispose_fn) +{ + return implementation->nx_create_empty (implementation, equals_fn, + hashcode_fn, dispose_fn); +} + +GL_SET_INLINE size_t +gl_set_size (gl_set_t set) +{ + return ((const struct gl_set_impl_base *) set)->vtable->size (set); +} + +GL_SET_INLINE bool +gl_set_search (gl_set_t set, const void *elt) +{ + return ((const struct gl_set_impl_base *) set)->vtable->search (set, elt); +} + +_GL_ATTRIBUTE_NODISCARD GL_SET_INLINE int +gl_set_nx_add (gl_set_t set, const void *elt) +{ + return ((const struct gl_set_impl_base *) set)->vtable->nx_add (set, elt); +} + +GL_SET_INLINE bool +gl_set_remove (gl_set_t set, const void *elt) +{ + return ((const struct gl_set_impl_base *) set)->vtable->remove_elt (set, elt); +} + +GL_SET_INLINE void +gl_set_free (gl_set_t set) +{ + ((const struct gl_set_impl_base *) set)->vtable->set_free (set); +} + +GL_SET_INLINE gl_set_iterator_t +gl_set_iterator (gl_set_t set) +{ + return ((const struct gl_set_impl_base *) set)->vtable->iterator (set); +} + +GL_SET_INLINE bool +gl_set_iterator_next (gl_set_iterator_t *iterator, const void **eltp) +{ + return iterator->vtable->iterator_next (iterator, eltp); +} + +GL_SET_INLINE void +gl_set_iterator_free (gl_set_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_SET_H */ diff --git a/include/libgnulib/gl_set.hh b/include/libgnulib/gl_set.hh new file mode 100755 index 0000000..de296fa --- /dev/null +++ b/include/libgnulib/gl_set.hh @@ -0,0 +1,153 @@ +/* Abstract set data type as a C++ class. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_SET_HH +#define _GL_SET_HH + +#include "gl_set.h" +#include "gl_xset.h" + +#include /* because Gnulib's may '#define free ...' */ + +/* gl_Set is a C++ wrapper around the gl_set data type. + Its element type is 'ELTYPE *'. + + It is merely a pointer, not a smart pointer. In other words: + it does NOT do reference-counting, and the destructor does nothing. */ + +template class gl_Set; + +template +class gl_Set +{ +public: + // ------------------------------ Constructors ------------------------------ + + gl_Set () + : _ptr (NULL) + {} + + /* Creates an empty set. + IMPLEMENTATION is one of GL_ARRAY_SET, GL_LINKEDHASH_SET, GL_HASH_SET. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. */ + gl_Set (gl_set_implementation_t implementation, + bool (*equals_fn) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), + size_t (*hashcode_fn) (ELTYPE *), + void (*dispose_fn) (ELTYPE *)) + : _ptr (gl_set_create_empty (implementation, + reinterpret_cast(equals_fn), + reinterpret_cast(hashcode_fn), + reinterpret_cast(dispose_fn))) + {} + + /* Copy constructor. */ + gl_Set (const gl_Set& x) + { _ptr = x._ptr; } + + /* Assignment operator. */ + gl_Set& operator= (const gl_Set& x) + { _ptr = x._ptr; return *this; } + + // ------------------------------- Destructor ------------------------------- + + ~gl_Set () + { _ptr = NULL; } + + // ----------------------- Read-only member functions ----------------------- + + /* Returns the current number of elements in the set. */ + size_t size () const + { return gl_set_size (_ptr); } + + /* Searches whether an element is already in the set. + Returns true if found, or false if not present in the set. */ + bool search (ELTYPE * elt) const + { return gl_set_search (_ptr, elt); } + + // ----------------------- Modifying member functions ----------------------- + + /* Adds an element to the set. + Returns true if it was not already in the set and added, false otherwise. */ + bool add (ELTYPE * elt) + { return gl_set_add (_ptr, elt); } + + /* Removes an element from the set. + Returns true if it was found and removed. */ + bool remove (ELTYPE * elt) + { return gl_set_remove (_ptr, elt); } + + /* Frees the entire set. + (But this call does not free the elements of the set. It only invokes + the DISPOSE_FN on each of the elements of the set.) */ + void free () + { gl_set_free (_ptr); _ptr = NULL; } + + // ------------------------------ Private stuff ------------------------------ + +private: + gl_set_t _ptr; + +public: + // -------------------------------- Iterators -------------------------------- + // Only a forward iterator. + // Does not implement the STL operations (++, *, and != .end()), but a simpler + // interface that needs only one virtual function call per iteration instead + // of three. + + class iterator { + public: + + /* If there is a next element, stores the next element in ELT, advances the + iterator and returns true. Otherwise, returns false. */ + bool next (ELTYPE *& elt) + { + const void *next_elt; + bool has_next = gl_set_iterator_next (&_state, &next_elt); + if (has_next) + elt = static_cast(next_elt); + return has_next; + } + + ~iterator () + { gl_set_iterator_free (&_state); } + + #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC + public: + #else + private: + friend iterator gl_Set::begin (); + #endif + + iterator (gl_set_t ptr) + : _state (gl_set_iterator (ptr)) + {} + + private: + + gl_set_iterator_t _state; + }; + + /* Creates an iterator traversing the set. + The set's contents must not be modified while the iterator is in use, + except for removing the last returned element. */ + iterator begin () + { return iterator (_ptr); } +}; + +#endif /* _GL_SET_HH */ diff --git a/include/libgnulib/gl_sublist.h b/include/libgnulib/gl_sublist.h new file mode 100755 index 0000000..62ca62b --- /dev/null +++ b/include/libgnulib/gl_sublist.h @@ -0,0 +1,52 @@ +/* Sequential list data type backed by another list. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +#ifndef _GL_SUBLIST_H +#define _GL_SUBLIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Creates a sublist of a given list. + This is the list of elements with indices i, start_index <= i < end_index. + The sublist is backed by the given list, which means: + - Modifications to the sublist affect the whole list. + - Modifications to the whole list are immediately visible in the sublist. + - The sublist is only valid as long as the whole list is valid. + - The sublist must not be passed to the gl_list_sortedlist_add() function. + */ +#if 0 /* declared in gl_xsublist.h */ +extern gl_list_t gl_sublist_create (gl_list_t whole_list, + size_t start_index, size_t end_index) + /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +#endif +/* Likewise. Returns NULL upon out-of-memory. */ +extern gl_list_t gl_sublist_nx_create (gl_list_t whole_list, + size_t start_index, size_t end_index) + /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/; + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_SUBLIST_H */ diff --git a/include/libgnulib/gl_xlist.h b/include/libgnulib/gl_xlist.h new file mode 100755 index 0000000..74dafb3 --- /dev/null +++ b/include/libgnulib/gl_xlist.h @@ -0,0 +1,210 @@ +/* Abstract sequential list data type, with out-of-memory checking. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + 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 3 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, see . */ + +#ifndef _GL_XLIST_H +#define _GL_XLIST_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "gl_list.h" +#include "xalloc.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_XLIST_INLINE +# define GL_XLIST_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* These functions are thin wrappers around the corresponding functions with + _nx_ infix from gl_list.h. Upon out-of-memory, they invoke xalloc_die (), + instead of returning an error indicator. */ +#if 0 /* These are defined inline below. */ +extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) + /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +extern gl_list_t gl_list_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) + /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node, + const void *elt); +extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position, + const void *elt); +extern gl_list_node_t gl_list_set_first (gl_list_t list, const void *elt); +extern gl_list_node_t gl_list_set_last (gl_list_t list, const void *elt); +extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt); +extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt); +extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node, + const void *elt); +extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node, + const void *elt); +extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position, + const void *elt); +extern gl_list_node_t gl_sortedlist_add (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); +#endif + +GL_XLIST_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ +_GL_ATTRIBUTE_RETURNS_NONNULL +gl_list_t +gl_list_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + gl_list_t result = + gl_list_nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn, + allow_duplicates); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ +_GL_ATTRIBUTE_RETURNS_NONNULL +gl_list_t +gl_list_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + gl_list_t result = + gl_list_nx_create (implementation, equals_fn, hashcode_fn, dispose_fn, + allow_duplicates, count, contents); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE void +gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt) +{ + int result = gl_list_node_nx_set_value (list, node, elt); + if (result < 0) + xalloc_die (); +} + +GL_XLIST_INLINE gl_list_node_t +gl_list_set_at (gl_list_t list, size_t position, const void *elt) +{ + gl_list_node_t result = gl_list_nx_set_at (list, position, elt); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE gl_list_node_t +gl_list_set_first (gl_list_t list, const void *elt) +{ + gl_list_node_t result = gl_list_nx_set_first (list, elt); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE gl_list_node_t +gl_list_set_last (gl_list_t list, const void *elt) +{ + gl_list_node_t result = gl_list_nx_set_last (list, elt); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE gl_list_node_t +gl_list_add_first (gl_list_t list, const void *elt) +{ + gl_list_node_t result = gl_list_nx_add_first (list, elt); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE gl_list_node_t +gl_list_add_last (gl_list_t list, const void *elt) +{ + gl_list_node_t result = gl_list_nx_add_last (list, elt); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE gl_list_node_t +gl_list_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + gl_list_node_t result = gl_list_nx_add_before (list, node, elt); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE gl_list_node_t +gl_list_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + gl_list_node_t result = gl_list_nx_add_after (list, node, elt); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE gl_list_node_t +gl_list_add_at (gl_list_t list, size_t position, const void *elt) +{ + gl_list_node_t result = gl_list_nx_add_at (list, position, elt); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XLIST_INLINE gl_list_node_t +gl_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t result = gl_sortedlist_nx_add (list, compar, elt); + if (result == NULL) + xalloc_die (); + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_XLIST_H */ diff --git a/include/libgnulib/gl_xmap.h b/include/libgnulib/gl_xmap.h new file mode 100755 index 0000000..dc6889a --- /dev/null +++ b/include/libgnulib/gl_xmap.h @@ -0,0 +1,99 @@ +/* Abstract map data type, with out-of-memory checking. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_XMAP_H +#define _GL_XMAP_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "gl_map.h" +#include "xalloc.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_XMAP_INLINE +# define GL_XMAP_INLINE _GL_INLINE +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* These functions are thin wrappers around the corresponding functions with + _nx_ infix from gl_map.h. Upon out-of-memory, they invoke xalloc_die (), + instead of returning an error indicator. */ +#if 0 /* These are defined inline below. */ +extern gl_map_t gl_map_create_empty (gl_map_implementation_t implementation, + gl_mapkey_equals_fn equals_fn, + gl_mapkey_hashcode_fn hashcode_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +extern bool gl_map_put (gl_map_t map, const void *key, const void *value); +extern bool gl_map_getput (gl_map_t map, const void *key, const void *value, + const void **oldvaluep); +#endif + +GL_XMAP_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/ +_GL_ATTRIBUTE_RETURNS_NONNULL +gl_map_t +gl_map_create_empty (gl_map_implementation_t implementation, + gl_mapkey_equals_fn equals_fn, + gl_mapkey_hashcode_fn hashcode_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) +{ + gl_map_t result = + gl_map_nx_create_empty (implementation, equals_fn, hashcode_fn, + kdispose_fn, vdispose_fn); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XMAP_INLINE bool +gl_map_put (gl_map_t map, const void *key, const void *value) +{ + int result = gl_map_nx_put (map, key, value); + if (result < 0) + xalloc_die (); + return result; +} + +GL_XMAP_INLINE bool +gl_map_getput (gl_map_t map, const void *key, const void *value, + const void **oldvaluep) +{ + int result = gl_map_nx_getput (map, key, value, oldvaluep); + if (result < 0) + xalloc_die (); + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_XMAP_H */ diff --git a/include/libgnulib/gl_xomap.h b/include/libgnulib/gl_xomap.h new file mode 100755 index 0000000..61c6811 --- /dev/null +++ b/include/libgnulib/gl_xomap.h @@ -0,0 +1,96 @@ +/* Abstract ordered map data type, with out-of-memory checking. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + 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 3 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, see . */ + +#ifndef _GL_XOMAP_H +#define _GL_XOMAP_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "gl_omap.h" +#include "xalloc.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_XOMAP_INLINE +# define GL_XOMAP_INLINE _GL_INLINE +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* These functions are thin wrappers around the corresponding functions with + _nx_ infix from gl_omap.h. Upon out-of-memory, they invoke xalloc_die (), + instead of returning an error indicator. */ +#if 0 /* These are defined inline below. */ +extern gl_omap_t gl_omap_create_empty (gl_omap_implementation_t implementation, + gl_mapkey_compar_fn compar_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +extern bool gl_omap_put (gl_omap_t map, const void *key, const void *value); +extern bool gl_omap_getput (gl_omap_t map, const void *key, const void *value, + const void **oldvaluep); +#endif + +GL_XOMAP_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/ +_GL_ATTRIBUTE_RETURNS_NONNULL +gl_omap_t +gl_omap_create_empty (gl_omap_implementation_t implementation, + gl_mapkey_compar_fn compar_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) +{ + gl_omap_t result = + gl_omap_nx_create_empty (implementation, compar_fn, kdispose_fn, vdispose_fn); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XOMAP_INLINE bool +gl_omap_put (gl_omap_t map, const void *key, const void *value) +{ + int result = gl_omap_nx_put (map, key, value); + if (result < 0) + xalloc_die (); + return result; +} + +GL_XOMAP_INLINE bool +gl_omap_getput (gl_omap_t map, const void *key, const void *value, + const void **oldvaluep) +{ + int result = gl_omap_nx_getput (map, key, value, oldvaluep); + if (result < 0) + xalloc_die (); + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_XOMAP_H */ diff --git a/include/libgnulib/gl_xoset.h b/include/libgnulib/gl_xoset.h new file mode 100755 index 0000000..454463d --- /dev/null +++ b/include/libgnulib/gl_xoset.h @@ -0,0 +1,82 @@ +/* Abstract ordered set data type, with out-of-memory checking. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + 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 3 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, see . */ + +#ifndef _GL_XOSET_H +#define _GL_XOSET_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "gl_oset.h" +#include "xalloc.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_XOSET_INLINE +# define GL_XOSET_INLINE _GL_INLINE +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* These functions are thin wrappers around the corresponding functions with + _nx_ infix from gl_oset.h. Upon out-of-memory, they invoke xalloc_die (), + instead of returning an error indicator. */ +#if 0 /* These are defined inline below. */ +extern gl_oset_t gl_oset_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +extern bool gl_oset_add (gl_oset_t set, const void *elt); +#endif + +GL_XOSET_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/ +_GL_ATTRIBUTE_RETURNS_NONNULL +gl_oset_t +gl_oset_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) +{ + gl_oset_t result = + gl_oset_nx_create_empty (implementation, compar_fn, dispose_fn); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XOSET_INLINE bool +gl_oset_add (gl_oset_t set, const void *elt) +{ + int result = gl_oset_nx_add (set, elt); + if (result < 0) + xalloc_die (); + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_XOSET_H */ diff --git a/include/libgnulib/gl_xset.h b/include/libgnulib/gl_xset.h new file mode 100755 index 0000000..697c73b --- /dev/null +++ b/include/libgnulib/gl_xset.h @@ -0,0 +1,84 @@ +/* Abstract set data type, with out-of-memory checking. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + 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 3 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, see . */ + +#ifndef _GL_XSET_H +#define _GL_XSET_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "gl_set.h" +#include "xalloc.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_XSET_INLINE +# define GL_XSET_INLINE _GL_INLINE +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* These functions are thin wrappers around the corresponding functions with + _nx_ infix from gl_set.h. Upon out-of-memory, they invoke xalloc_die (), + instead of returning an error indicator. */ +#if 0 /* These are defined inline below. */ +extern gl_set_t gl_set_create_empty (gl_set_implementation_t implementation, + gl_setelement_equals_fn equals_fn, + gl_setelement_hashcode_fn hashcode_fn, + gl_setelement_dispose_fn dispose_fn) + /*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/ + _GL_ATTRIBUTE_RETURNS_NONNULL; +extern bool gl_set_add (gl_set_t set, const void *elt); +#endif + +GL_XSET_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/ +_GL_ATTRIBUTE_RETURNS_NONNULL +gl_set_t +gl_set_create_empty (gl_set_implementation_t implementation, + gl_setelement_equals_fn equals_fn, + gl_setelement_hashcode_fn hashcode_fn, + gl_setelement_dispose_fn dispose_fn) +{ + gl_set_t result = + gl_set_nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XSET_INLINE bool +gl_set_add (gl_set_t set, const void *elt) +{ + int result = gl_set_nx_add (set, elt); + if (result < 0) + xalloc_die (); + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_XSET_H */ diff --git a/include/libgnulib/gl_xsublist.h b/include/libgnulib/gl_xsublist.h new file mode 100755 index 0000000..86170c9 --- /dev/null +++ b/include/libgnulib/gl_xsublist.h @@ -0,0 +1,61 @@ +/* Sequential list data type backed by another list, with out-of-memory + checking. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + 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 3 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, see . */ + +#ifndef _GL_XSUBLIST_H +#define _GL_XSUBLIST_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "gl_sublist.h" +#include "xalloc.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_XSUBLIST_INLINE +# define GL_XSUBLIST_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* These functions are thin wrappers around the corresponding functions with + _nx_ infix from gl_sublist.h. Upon out-of-memory, they invoke + xalloc_die (), instead of returning an error indicator. */ +GL_XSUBLIST_INLINE +/*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ +_GL_ATTRIBUTE_RETURNS_NONNULL +gl_list_t +gl_sublist_create (gl_list_t whole_list, size_t start_index, size_t end_index) +{ + gl_list_t result = gl_sublist_nx_create (whole_list, start_index, end_index); + if (result == NULL) + xalloc_die (); + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_XSUBLIST_H */ diff --git a/include/libgnulib/glob-libc.h b/include/libgnulib/glob-libc.h new file mode 100755 index 0000000..b719bfd --- /dev/null +++ b/include/libgnulib/glob-libc.h @@ -0,0 +1,195 @@ +/* Copyright (C) 1991-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _GLOB_H +#define _GLOB_H 1 + +#ifndef __GLOB_GNULIB +# include +#endif + +__BEGIN_DECLS + +#define __need_size_t +#include + +/* Bits set in the FLAGS argument to 'glob'. */ +#define GLOB_ERR (1 << 0)/* Return on read errors. */ +#define GLOB_MARK (1 << 1)/* Append a slash to each name. */ +#define GLOB_NOSORT (1 << 2)/* Don't sort the names. */ +#define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */ +#define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */ +#define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */ +#define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ +#define GLOB_PERIOD (1 << 7)/* Leading '.' can be matched by metachars. */ + +#if !defined __USE_POSIX2 || defined __USE_MISC +# define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ +# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ +# define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ +# define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */ +# define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */ +# define GLOB_ONLYDIR (1 << 13)/* Match only directories. */ +# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error + if the user name is not available. */ +# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS \ + |GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND \ + |GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE \ + |GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK) +#else +# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS \ + |GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND \ + |GLOB_PERIOD) +#endif + +/* Error returns from 'glob'. */ +#define GLOB_NOSPACE 1 /* Ran out of memory. */ +#define GLOB_ABORTED 2 /* Read error. */ +#define GLOB_NOMATCH 3 /* No matches found. */ +#define GLOB_NOSYS 4 /* Not implemented. */ +#ifdef __USE_GNU +/* Previous versions of this file defined GLOB_ABEND instead of + GLOB_ABORTED. Provide a compatibility definition here. */ +# define GLOB_ABEND GLOB_ABORTED +#endif + +/* Structure describing a globbing run. */ +#ifdef __USE_GNU +struct stat; +#endif +typedef struct + { + size_t gl_pathc; /* Count of paths matched by the pattern. */ + char **gl_pathv; /* List of matched pathnames. */ + size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */ + int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ + + /* If the GLOB_ALTDIRFUNC flag is set, the following functions + are used instead of the normal file access functions. */ + void (*gl_closedir) (void *); +#ifdef __USE_GNU + struct dirent *(*gl_readdir) (void *); +#else + void *(*gl_readdir) (void *); +#endif + void *(*gl_opendir) (const char *); +#ifdef __USE_GNU + int (*gl_lstat) (const char *__restrict, struct stat *__restrict); + int (*gl_stat) (const char *__restrict, struct stat *__restrict); +#else + int (*gl_lstat) (const char *__restrict, void *__restrict); + int (*gl_stat) (const char *__restrict, void *__restrict); +#endif + } glob_t; + +#ifdef __USE_LARGEFILE64 +# ifdef __USE_GNU +struct stat64; +# endif +typedef struct + { + size_t gl_pathc; + char **gl_pathv; + size_t gl_offs; + int gl_flags; + + /* If the GLOB_ALTDIRFUNC flag is set, the following functions + are used instead of the normal file access functions. */ + void (*gl_closedir) (void *); +# ifdef __USE_GNU + struct dirent64 *(*gl_readdir) (void *); +# else + void *(*gl_readdir) (void *); +# endif + void *(*gl_opendir) (const char *); +# ifdef __USE_GNU + int (*gl_lstat) (const char *__restrict, struct stat64 *__restrict); + int (*gl_stat) (const char *__restrict, struct stat64 *__restrict); +# else + int (*gl_lstat) (const char *__restrict, void *__restrict); + int (*gl_stat) (const char *__restrict, void *__restrict); +# endif + } glob64_t; +#endif + +/* Do glob searching for PATTERN, placing results in PGLOB. + The bits defined above may be set in FLAGS. + If a directory cannot be opened or read and ERRFUNC is not nil, + it is called with the pathname that caused the error, and the + 'errno' value from the failing call; if it returns non-zero + 'glob' returns GLOB_ABEND; if it returns zero, the error is ignored. + If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. + Otherwise, 'glob' returns zero. */ +#if !defined __USE_FILE_OFFSET64 || defined __GLOB_GNULIB +extern int glob (const char *__restrict __pattern, int __flags, + int (*__errfunc) (const char *, int), + glob_t *__restrict __pglob) __THROWNL; + +/* Free storage allocated in PGLOB by a previous 'glob' call. */ +extern void globfree (glob_t *__pglob) __THROW; +#else +# ifdef __USE_TIME_BITS64 +extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern, + int __flags, + int (*__errfunc) (const char *, int), + glob_t *__restrict __pglob), + __glob64_time64); + +extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), + __globfree64_time64); +# else +extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern, + int __flags, + int (*__errfunc) (const char *, int), + glob_t *__restrict __pglob), glob64); + +extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64); +# endif +#endif + +#ifdef __USE_LARGEFILE64 +# ifdef __USE_TIME_BITS64 +extern int __REDIRECT_NTHNL (glob64, (const char *__restrict __pattern, + int __flags, + int (*__errfunc) (const char *, int), + glob64_t *__restrict __pglob), + __glob64_time64); + +extern void __REDIRECT_NTH (globfree64, (glob64_t *__pglob), + __globfree64_time64); +# else +extern int glob64 (const char *__restrict __pattern, int __flags, + int (*__errfunc) (const char *, int), + glob64_t *__restrict __pglob) __THROWNL; + +extern void globfree64 (glob64_t *__pglob) __THROW; +# endif +#endif + + +#ifdef __USE_GNU +/* Return nonzero if PATTERN contains any metacharacters. + Metacharacters can be quoted with backslashes if QUOTE is nonzero. + + This function is not part of the interface specified by POSIX + but several programs want to use it. */ +extern int glob_pattern_p (const char *__pattern, int __quote) __THROW; +#endif + +__END_DECLS + +#endif /* glob.h */ diff --git a/include/libgnulib/glob_internal.h b/include/libgnulib/glob_internal.h new file mode 100755 index 0000000..f66ad47 --- /dev/null +++ b/include/libgnulib/glob_internal.h @@ -0,0 +1,65 @@ +/* Shared definition for glob and glob_pattern_p. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef GLOB_INTERNAL_H +# define GLOB_INTERNAL_H + +enum +{ + GLOBPAT_NONE = 0x0, + GLOBPAT_SPECIAL = 0x1, + GLOBPAT_BACKSLASH = 0x2, + GLOBPAT_BRACKET = 0x4 +}; + +static inline int +__glob_pattern_type (const char *pattern, int quote) +{ + const char *p; + int ret = GLOBPAT_NONE; + + for (p = pattern; *p != '\0'; ++p) + switch (*p) + { + case '?': + case '*': + return GLOBPAT_SPECIAL; + + case '\\': + if (quote) + { + if (p[1] != '\0') + ++p; + ret |= GLOBPAT_BACKSLASH; + } + break; + + case '[': + ret |= GLOBPAT_BRACKET; + break; + + case ']': + if (ret & 4) + return GLOBPAT_SPECIAL; + break; + } + + return ret; +} + +#endif /* GLOB_INTERNAL_H */ diff --git a/include/libgnulib/glthread/cond.h b/include/libgnulib/glthread/cond.h new file mode 100755 index 0000000..0f55f9f --- /dev/null +++ b/include/libgnulib/glthread/cond.h @@ -0,0 +1,344 @@ +/* Condition variables for multithreading. + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Yoann Vandoorselaere , 2008. + Based on Bruno Haible lock.h */ + +/* + Condition variables can be used for waiting until a condition + becomes true. In this respect, they are similar to wait queues. But + contrary to wait queues, condition variables have different + semantics that allows events to be lost when there is no thread + waiting for them. + + Condition variable: + Type: gl_cond_t + Declaration: gl_cond_define(extern, name) + Initializer: gl_cond_define_initialized(, name) + Initialization: gl_cond_init (name); + Waiting: gl_cond_wait (name, lock); + Timed wait: bool timedout = gl_cond_timedwait (name, lock, abstime); + where lock is a gl_lock_t variable (cf. ) + Signaling: gl_cond_signal (name); + Broadcasting: gl_cond_broadcast (name); + De-initialization: gl_cond_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_cond_init (&name); + Waiting: err = glthread_cond_wait (&name); + Timed wait: err = glthread_cond_timedwait (&name, &lock, abstime); + Signaling: err = glthread_cond_signal (&name); + Broadcasting: err = glthread_cond_broadcast (&name); + De-initialization: err = glthread_cond_destroy (&name); +*/ + + +#ifndef _GLTHREAD_COND_H +#define _GLTHREAD_COND_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, HAVE_THREADS_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include + +#include "glthread/lock.h" + +#if !defined c11_threads_in_use +# if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC +# define c11_threads_in_use() 1 +# elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK +# include +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef _GLTHREAD_COND_INLINE +# define _GLTHREAD_COND_INLINE _GL_INLINE +#endif + +/* ========================================================================= */ + +#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS + +/* Use the ISO C threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* -------------------------- gl_cond_t datatype -------------------------- */ + +typedef struct + { + int volatile init_needed; + once_flag init_once; + void (*init_func) (void); + cnd_t condition; + } + gl_cond_t; +# define gl_cond_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_cond_t NAME; +# define gl_cond_define_initialized(STORAGECLASS, NAME) \ + static void _atomic_init_##NAME (void); \ + STORAGECLASS gl_cond_t NAME = \ + { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ + static void _atomic_init_##NAME (void) \ + { \ + if (glthread_cond_init (&(NAME))) \ + abort (); \ + } +extern int glthread_cond_init (gl_cond_t *condition); +extern int glthread_cond_wait (gl_cond_t *condition, gl_lock_t *lock); +extern int glthread_cond_timedwait (gl_cond_t *condition, gl_lock_t *lock, + const struct timespec *abstime); +extern int glthread_cond_signal (gl_cond_t *condition); +extern int glthread_cond_broadcast (gl_cond_t *condition); +extern int glthread_cond_destroy (gl_cond_t *condition); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The pthread_in_use() detection needs to be done at runtime. */ +# define pthread_in_use() \ + glthread_in_use () +extern int glthread_in_use (void); + +# endif + +# if USE_POSIX_THREADS_WEAK + +/* Use weak references to the POSIX threads library. */ + +/* Weak references avoid dragging in external libraries if the other parts + of the program don't use them. Here we use them, because we don't want + every program that uses libintl to depend on libpthread. This assumes + that libpthread would not be loaded after libintl; i.e. if libintl is + loaded first, by an executable that does not depend on libpthread, and + then a module is dynamically loaded that depends on libpthread, libintl + will not be multithread-safe. */ + +/* The way to test at runtime whether libpthread is present is to test + whether a function pointer's value, such as &pthread_mutex_init, is + non-NULL. However, some versions of GCC have a bug through which, in + PIC mode, &foo != NULL always evaluates to true if there is a direct + call to foo(...) in the same function. To avoid this, we test the + address of a function in libpthread that we don't use. */ + +# pragma weak pthread_cond_init +# pragma weak pthread_cond_wait +# pragma weak pthread_cond_timedwait +# pragma weak pthread_cond_signal +# pragma weak pthread_cond_broadcast +# pragma weak pthread_cond_destroy +# ifndef pthread_self +# pragma weak pthread_self +# endif + +# if !PTHREAD_IN_USE_DETECTION_HARD +# pragma weak pthread_mutexattr_gettype +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) +# endif + +# else + +# if !PTHREAD_IN_USE_DETECTION_HARD +# define pthread_in_use() 1 +# endif + +# endif + +/* -------------------------- gl_cond_t datatype -------------------------- */ + +typedef pthread_cond_t gl_cond_t; +# define gl_cond_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_cond_t NAME; +# define gl_cond_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_cond_t NAME = gl_cond_initializer; +# define gl_cond_initializer \ + PTHREAD_COND_INITIALIZER +# define glthread_cond_init(COND) \ + (pthread_in_use () ? pthread_cond_init (COND, NULL) : 0) +# define glthread_cond_wait(COND, LOCK) \ + (pthread_in_use () ? pthread_cond_wait (COND, LOCK) : 0) +# define glthread_cond_timedwait(COND, LOCK, ABSTIME) \ + (pthread_in_use () ? pthread_cond_timedwait (COND, LOCK, ABSTIME) : 0) +# define glthread_cond_signal(COND) \ + (pthread_in_use () ? pthread_cond_signal (COND) : 0) +# define glthread_cond_broadcast(COND) \ + (pthread_in_use () ? pthread_cond_broadcast (COND) : 0) +# define glthread_cond_destroy(COND) \ + (pthread_in_use () ? pthread_cond_destroy (COND) : 0) + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_WINDOWS_THREADS + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# include "windows-cond.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* -------------------------- gl_cond_t datatype -------------------------- */ + +typedef glwthread_cond_t gl_cond_t; +# define gl_cond_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_cond_t NAME; +# define gl_cond_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_cond_t NAME = gl_cond_initializer; +# define gl_cond_initializer \ + GLWTHREAD_COND_INIT +# define glthread_cond_init(COND) \ + glwthread_cond_init (COND) +# define glthread_cond_wait(COND, LOCK) \ + glwthread_cond_wait (COND, LOCK, \ + (int (*) (void *)) glwthread_mutex_lock, \ + (int (*) (void *)) glwthread_mutex_unlock) +# define glthread_cond_timedwait(COND, LOCK, ABSTIME) \ + glwthread_cond_timedwait (COND, LOCK, \ + (int (*) (void *)) glwthread_mutex_lock, \ + (int (*) (void *)) glwthread_mutex_unlock, \ + ABSTIME) +# define glthread_cond_signal(COND) \ + glwthread_cond_signal (COND) +# define glthread_cond_broadcast(COND) \ + glwthread_cond_broadcast (COND) +# define glthread_cond_destroy(COND) \ + glwthread_cond_destroy (COND) + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) + +/* Provide dummy implementation if threads are not supported. */ + +typedef int gl_cond_t; +# define gl_cond_define(STORAGECLASS, NAME) +# define gl_cond_define_initialized(STORAGECLASS, NAME) +# define glthread_cond_init(COND) 0 +# define glthread_cond_wait(COND, LOCK) 0 +# define glthread_cond_timedwait(COND, LOCK, ABSTIME) 0 +# define glthread_cond_signal(COND) 0 +# define glthread_cond_broadcast(COND) 0 +# define glthread_cond_destroy(COND) 0 + +#endif + +/* ========================================================================= */ + +/* Macros with built-in error handling. */ + +#ifdef __cplusplus +extern "C" { +#endif + +#define gl_cond_init(COND) \ + do \ + { \ + if (glthread_cond_init (&COND)) \ + abort (); \ + } \ + while (0) +#define gl_cond_wait(COND, LOCK) \ + do \ + { \ + if (glthread_cond_wait (&COND, &LOCK)) \ + abort (); \ + } \ + while (0) +#define gl_cond_timedwait(COND, LOCK, ABSTIME) \ + gl_cond_timedwait_func (&COND, &LOCK, ABSTIME) +_GLTHREAD_COND_INLINE bool +gl_cond_timedwait_func (gl_cond_t *cond, gl_lock_t *lock, struct timespec *abstime) +{ + int err = glthread_cond_timedwait (cond, lock, abstime); + if (err == ETIMEDOUT) + return true; + if (err != 0) + abort (); + return false; +} +#define gl_cond_signal(COND) \ + do \ + { \ + if (glthread_cond_signal (&COND)) \ + abort (); \ + } \ + while (0) +#define gl_cond_broadcast(COND) \ + do \ + { \ + if (glthread_cond_broadcast (&COND)) \ + abort (); \ + } \ + while (0) +#define gl_cond_destroy(COND) \ + do \ + { \ + if (glthread_cond_destroy (&COND)) \ + abort (); \ + } \ + while (0) + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GLTHREAD_COND_H */ diff --git a/include/libgnulib/glthread/lock.h b/include/libgnulib/glthread/lock.h new file mode 100755 index 0000000..2b9c0f2 --- /dev/null +++ b/include/libgnulib/glthread/lock.h @@ -0,0 +1,656 @@ +/* Locking in multithreaded situations. + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ + +/* This file contains locking primitives for use with a given thread library. + It does not contain primitives for creating threads or for other + synchronization primitives. + + Normal (non-recursive) locks: + Type: gl_lock_t + Declaration: gl_lock_define(extern, name) + Initializer: gl_lock_define_initialized(, name) + Initialization: gl_lock_init (name); + Taking the lock: gl_lock_lock (name); + Releasing the lock: gl_lock_unlock (name); + De-initialization: gl_lock_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_lock_init (&name); + Taking the lock: err = glthread_lock_lock (&name); + Releasing the lock: err = glthread_lock_unlock (&name); + De-initialization: err = glthread_lock_destroy (&name); + + Read-Write (non-recursive) locks: + Type: gl_rwlock_t + Declaration: gl_rwlock_define(extern, name) + Initializer: gl_rwlock_define_initialized(, name) + Initialization: gl_rwlock_init (name); + Taking the lock: gl_rwlock_rdlock (name); + gl_rwlock_wrlock (name); + Releasing the lock: gl_rwlock_unlock (name); + De-initialization: gl_rwlock_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_rwlock_init (&name); + Taking the lock: err = glthread_rwlock_rdlock (&name); + err = glthread_rwlock_wrlock (&name); + Releasing the lock: err = glthread_rwlock_unlock (&name); + De-initialization: err = glthread_rwlock_destroy (&name); + + Recursive locks: + Type: gl_recursive_lock_t + Declaration: gl_recursive_lock_define(extern, name) + Initializer: gl_recursive_lock_define_initialized(, name) + Initialization: gl_recursive_lock_init (name); + Taking the lock: gl_recursive_lock_lock (name); + Releasing the lock: gl_recursive_lock_unlock (name); + De-initialization: gl_recursive_lock_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_recursive_lock_init (&name); + Taking the lock: err = glthread_recursive_lock_lock (&name); + Releasing the lock: err = glthread_recursive_lock_unlock (&name); + De-initialization: err = glthread_recursive_lock_destroy (&name); +*/ + + +#ifndef _LOCK_H +#define _LOCK_H + +/* This file uses HAVE_THREADS_H, HAVE_PTHREAD_RWLOCK, + HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER, + PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP, + HAVE_PTHREAD_MUTEX_RECURSIVE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#include "glthread/once.h" + +/* c11_threads_in_use() is defined in glthread/once.h. */ + +/* ========================================================================= */ + +#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS + +/* Use the ISO C threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef struct + { + int volatile init_needed; + once_flag init_once; + void (*init_func) (void); + mtx_t mutex; + } + gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_lock_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + static void _atomic_init_##NAME (void); \ + STORAGECLASS gl_lock_t NAME = \ + { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ + static void _atomic_init_##NAME (void) \ + { \ + if (glthread_lock_init (&(NAME))) \ + abort (); \ + } +extern int glthread_lock_init (gl_lock_t *lock); +extern int glthread_lock_lock (gl_lock_t *lock); +extern int glthread_lock_unlock (gl_lock_t *lock); +extern int glthread_lock_destroy (gl_lock_t *lock); + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +typedef struct + { + int volatile init_needed; + once_flag init_once; + void (*init_func) (void); + mtx_t lock; /* protects the remaining fields */ + cnd_t waiting_readers; /* waiting readers */ + cnd_t waiting_writers; /* waiting writers */ + unsigned int waiting_writers_count; /* number of waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + static void _atomic_init_##NAME (void); \ + STORAGECLASS gl_rwlock_t NAME = \ + { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ + static void _atomic_init_##NAME (void) \ + { \ + if (glthread_rwlock_init (&(NAME))) \ + abort (); \ + } +extern int glthread_rwlock_init (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy (gl_rwlock_t *lock); + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +typedef struct + { + int volatile init_needed; + once_flag init_once; + void (*init_func) (void); + mtx_t mutex; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + static void _atomic_init_##NAME (void); \ + STORAGECLASS gl_recursive_lock_t NAME = \ + { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ + static void _atomic_init_##NAME (void) \ + { \ + if (glthread_recursive_lock_init (&(NAME))) \ + abort (); \ + } +extern int glthread_recursive_lock_init (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* pthread_in_use() is defined in glthread/once.h. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef pthread_mutex_t gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + PTHREAD_MUTEX_INITIALIZER +# define glthread_lock_init(LOCK) \ + (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) +# define glthread_lock_lock(LOCK) \ + (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) +# define glthread_lock_unlock(LOCK) \ + (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) +# define glthread_lock_destroy(LOCK) \ + (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +# if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) + +# if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP + +typedef pthread_rwlock_t gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; +# if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER +# if defined PTHREAD_RWLOCK_INITIALIZER +# define gl_rwlock_initializer \ + PTHREAD_RWLOCK_INITIALIZER +# else +# define gl_rwlock_initializer \ + PTHREAD_RWLOCK_INITIALIZER_NP +# endif +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) +# else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ +# define gl_rwlock_initializer \ + PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0) +extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock); +# endif +# define glthread_rwlock_rdlock(LOCK) \ + (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) + +# else + +typedef struct + { + int initialized; + pthread_mutex_t guard; /* protects the initialization */ + pthread_rwlock_t rwlock; /* read-write lock */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + { 0, PTHREAD_MUTEX_INITIALIZER } +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) +extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); + +# endif + +# else + +typedef struct + { + pthread_mutex_t lock; /* protects the remaining fields */ + pthread_cond_t waiting_readers; /* waiting readers */ + pthread_cond_t waiting_writers; /* waiting writers */ + unsigned int waiting_writers_count; /* number of waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) +extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); + +# endif + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +# if HAVE_PTHREAD_MUTEX_RECURSIVE + +# if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + +typedef pthread_mutex_t gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; +# ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER +# define gl_recursive_lock_initializer \ + PTHREAD_RECURSIVE_MUTEX_INITIALIZER +# else +# define gl_recursive_lock_initializer \ + PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +# endif +# define glthread_recursive_lock_init(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); + +# else + +typedef struct + { + pthread_mutex_t recmutex; /* recursive mutex */ + pthread_mutex_t guard; /* protects the initialization */ + int initialized; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); + +# endif + +# else + +/* Old versions of POSIX threads on Solaris did not have recursive locks. + We have to implement them ourselves. */ + +typedef struct + { + pthread_mutex_t mutex; + pthread_t owner; + unsigned long depth; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); + +# endif + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_WINDOWS_THREADS + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# include "windows-mutex.h" +# include "windows-rwlock.h" +# include "windows-recmutex.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* We can use CRITICAL_SECTION directly, rather than the native Windows Event, + Mutex, Semaphore types, because + - we need only to synchronize inside a single process (address space), + not inter-process locking, + - we don't need to support trylock operations. (TryEnterCriticalSection + does not work on Windows 95/98/ME. Packages that need trylock usually + define their own mutex type.) */ + +/* There is no way to statically initialize a CRITICAL_SECTION. It needs + to be done lazily, once only. For this we need spinlocks. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef glwthread_mutex_t gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_lock_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_lock_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + GLWTHREAD_MUTEX_INIT +# define glthread_lock_init(LOCK) \ + (glwthread_mutex_init (LOCK), 0) +# define glthread_lock_lock(LOCK) \ + glwthread_mutex_lock (LOCK) +# define glthread_lock_unlock(LOCK) \ + glwthread_mutex_unlock (LOCK) +# define glthread_lock_destroy(LOCK) \ + glwthread_mutex_destroy (LOCK) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +typedef glwthread_rwlock_t gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + GLWTHREAD_RWLOCK_INIT +# define glthread_rwlock_init(LOCK) \ + (glwthread_rwlock_init (LOCK), 0) +# define glthread_rwlock_rdlock(LOCK) \ + glwthread_rwlock_rdlock (LOCK) +# define glthread_rwlock_wrlock(LOCK) \ + glwthread_rwlock_wrlock (LOCK) +# define glthread_rwlock_unlock(LOCK) \ + glwthread_rwlock_unlock (LOCK) +# define glthread_rwlock_destroy(LOCK) \ + glwthread_rwlock_destroy (LOCK) + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +typedef glwthread_recmutex_t gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + GLWTHREAD_RECMUTEX_INIT +# define glthread_recursive_lock_init(LOCK) \ + (glwthread_recmutex_init (LOCK), 0) +# define glthread_recursive_lock_lock(LOCK) \ + glwthread_recmutex_lock (LOCK) +# define glthread_recursive_lock_unlock(LOCK) \ + glwthread_recmutex_unlock (LOCK) +# define glthread_recursive_lock_destroy(LOCK) \ + glwthread_recmutex_destroy (LOCK) + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) + +/* Provide dummy implementation if threads are not supported. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef int gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) +# define gl_lock_define_initialized(STORAGECLASS, NAME) +# define glthread_lock_init(NAME) 0 +# define glthread_lock_lock(NAME) 0 +# define glthread_lock_unlock(NAME) 0 +# define glthread_lock_destroy(NAME) 0 + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +typedef int gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) +# define glthread_rwlock_init(NAME) 0 +# define glthread_rwlock_rdlock(NAME) 0 +# define glthread_rwlock_wrlock(NAME) 0 +# define glthread_rwlock_unlock(NAME) 0 +# define glthread_rwlock_destroy(NAME) 0 + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +typedef int gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) +# define glthread_recursive_lock_init(NAME) 0 +# define glthread_recursive_lock_lock(NAME) 0 +# define glthread_recursive_lock_unlock(NAME) 0 +# define glthread_recursive_lock_destroy(NAME) 0 + +#endif + +/* ========================================================================= */ + +/* Macros with built-in error handling. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +#define gl_lock_init(NAME) \ + do \ + { \ + if (glthread_lock_init (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_lock_lock(NAME) \ + do \ + { \ + if (glthread_lock_lock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_lock_unlock(NAME) \ + do \ + { \ + if (glthread_lock_unlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_lock_destroy(NAME) \ + do \ + { \ + if (glthread_lock_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +#define gl_rwlock_init(NAME) \ + do \ + { \ + if (glthread_rwlock_init (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_rdlock(NAME) \ + do \ + { \ + if (glthread_rwlock_rdlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_wrlock(NAME) \ + do \ + { \ + if (glthread_rwlock_wrlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_unlock(NAME) \ + do \ + { \ + if (glthread_rwlock_unlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_destroy(NAME) \ + do \ + { \ + if (glthread_rwlock_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +#define gl_recursive_lock_init(NAME) \ + do \ + { \ + if (glthread_recursive_lock_init (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_recursive_lock_lock(NAME) \ + do \ + { \ + if (glthread_recursive_lock_lock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_recursive_lock_unlock(NAME) \ + do \ + { \ + if (glthread_recursive_lock_unlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_recursive_lock_destroy(NAME) \ + do \ + { \ + if (glthread_recursive_lock_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* ========================================================================= */ + +#endif /* _LOCK_H */ diff --git a/include/libgnulib/glthread/once.h b/include/libgnulib/glthread/once.h new file mode 100755 index 0000000..2452f88 --- /dev/null +++ b/include/libgnulib/glthread/once.h @@ -0,0 +1,272 @@ +/* Once-only initialization in multithreaded situations. + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ + +/* This file contains once-only initialization primitives for use with a given + thread library. + It does not contain primitives for creating threads or for other + synchronization primitives. + + Once-only execution: + Type: gl_once_t + Initializer: gl_once_define(extern, name) + Execution: gl_once (name, initfunction); + Equivalent functions with control of error handling: + Execution: err = glthread_once (&name, initfunction); +*/ + + +#ifndef _ONCE_H +#define _ONCE_H + +/* This file uses HAVE_THREADS_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#if !defined c11_threads_in_use +# if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC +# define c11_threads_in_use() 1 +# elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK +# include +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif +#endif + +/* ========================================================================= */ + +#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS + +/* Use the ISO C threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef once_flag gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS once_flag NAME = ONCE_FLAG_INIT; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (call_once (ONCE_CONTROL, INITFUNCTION), 0) + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The pthread_in_use() detection needs to be done at runtime. */ +# define pthread_in_use() \ + glthread_in_use () +extern int glthread_in_use (void); + +# endif + +# if USE_POSIX_THREADS_WEAK + +/* Use weak references to the POSIX threads library. */ + +/* Weak references avoid dragging in external libraries if the other parts + of the program don't use them. Here we use them, because we don't want + every program that uses libintl to depend on libpthread. This assumes + that libpthread would not be loaded after libintl; i.e. if libintl is + loaded first, by an executable that does not depend on libpthread, and + then a module is dynamically loaded that depends on libpthread, libintl + will not be multithread-safe. */ + +/* The way to test at runtime whether libpthread is present is to test + whether a function pointer's value, such as &pthread_mutex_init, is + non-NULL. However, some versions of GCC have a bug through which, in + PIC mode, &foo != NULL always evaluates to true if there is a direct + call to foo(...) in the same function. To avoid this, we test the + address of a function in libpthread that we don't use. */ + +# pragma weak pthread_mutex_init +# pragma weak pthread_mutex_lock +# pragma weak pthread_mutex_unlock +# pragma weak pthread_mutex_destroy +/* Work around clang bug */ +# ifndef pthread_rwlock_init +# pragma weak pthread_rwlock_init +# endif +# pragma weak pthread_rwlock_rdlock +# pragma weak pthread_rwlock_wrlock +# pragma weak pthread_rwlock_unlock +# pragma weak pthread_rwlock_destroy +# pragma weak pthread_once +# pragma weak pthread_cond_init +# pragma weak pthread_cond_wait +# pragma weak pthread_cond_signal +# pragma weak pthread_cond_broadcast +# pragma weak pthread_cond_destroy +# pragma weak pthread_mutexattr_init +# pragma weak pthread_mutexattr_settype +# pragma weak pthread_mutexattr_destroy +/* Work around clang bug */ +# ifndef pthread_rwlockattr_init +# pragma weak pthread_rwlockattr_init +# endif +# if __GNU_LIBRARY__ > 1 +# pragma weak pthread_rwlockattr_setkind_np +# endif +# pragma weak pthread_rwlockattr_destroy +# ifndef pthread_self +# pragma weak pthread_self +# endif + +# if !PTHREAD_IN_USE_DETECTION_HARD + /* Considering all platforms with USE_POSIX_THREADS_WEAK, only few symbols + can be used to determine whether libpthread is in use. These are: + pthread_mutexattr_gettype + pthread_rwlockattr_destroy + pthread_rwlockattr_init + */ +# pragma weak pthread_mutexattr_gettype +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) +# endif + +# else + +# if !PTHREAD_IN_USE_DETECTION_HARD +# define pthread_in_use() 1 +# endif + +# endif + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef pthread_once_t gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; +# if PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (pthread_in_use () \ + ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) +# else +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (pthread_in_use () \ + ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) +extern int glthread_once_multithreaded (pthread_once_t *once_control, + void (*init_function) (void)); +# endif +extern int glthread_once_singlethreaded (pthread_once_t *once_control); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_WINDOWS_THREADS + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# include "windows-once.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* We can use CRITICAL_SECTION directly, rather than the native Windows Event, + Mutex, Semaphore types, because + - we need only to synchronize inside a single process (address space), + not inter-process locking, + - we don't need to support trylock operations. (TryEnterCriticalSection + does not work on Windows 95/98/ME. Packages that need trylock usually + define their own mutex type.) */ + +/* There is no way to statically initialize a CRITICAL_SECTION. It needs + to be done lazily, once only. For this we need spinlocks. */ + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef glwthread_once_t gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_once_t NAME = GLWTHREAD_ONCE_INIT; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (glwthread_once (ONCE_CONTROL, INITFUNCTION), 0) + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) + +/* Provide dummy implementation if threads are not supported. */ + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef int gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_once_t NAME = 0; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) + +#endif + +/* ========================================================================= */ + +/* Macros with built-in error handling. */ + +/* -------------------------- gl_once_t datatype -------------------------- */ + +#define gl_once(NAME, INITFUNCTION) \ + do \ + { \ + if (glthread_once (&NAME, INITFUNCTION)) \ + abort (); \ + } \ + while (0) + +/* ========================================================================= */ + +#endif /* _ONCE_H */ diff --git a/include/libgnulib/glthread/thread.h b/include/libgnulib/glthread/thread.h new file mode 100755 index 0000000..748bb04 --- /dev/null +++ b/include/libgnulib/glthread/thread.h @@ -0,0 +1,346 @@ +/* Creating and controlling threads. + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ + +/* This file contains primitives for creating and controlling threads. + + Thread data type: gl_thread_t. + + Creating a thread: + thread = gl_thread_create (func, arg); + Or with control of error handling: + err = glthread_create (&thread, func, arg); + extern int glthread_create (gl_thread_t *result, + void *(*func) (void *), void *arg); + + Querying and changing the signal mask of a thread (not supported on all + platforms): + gl_thread_sigmask (how, newmask, oldmask); + Or with control of error handling: + err = glthread_sigmask (how, newmask, oldmask); + extern int glthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask); + + Waiting for termination of another thread: + gl_thread_join (thread, &return_value); + Or with control of error handling: + err = glthread_join (thread, &return_value); + extern int glthread_join (gl_thread_t thread, void **return_value_ptr); + + Getting a reference to the current thread: + current = gl_thread_self (); + extern gl_thread_t gl_thread_self (void); + + Getting a reference to the current thread as a pointer, for debugging: + ptr = gl_thread_self_pointer (); + extern void * gl_thread_self_pointer (void); + + Terminating the current thread: + gl_thread_exit (return_value); + extern _Noreturn void gl_thread_exit (void *return_value); + + Requesting custom code to be executed at fork() time (not supported on all + platforms): + gl_thread_atfork (prepare_func, parent_func, child_func); + Or with control of error handling: + err = glthread_atfork (prepare_func, parent_func, child_func); + extern int glthread_atfork (void (*prepare_func) (void), + void (*parent_func) (void), + void (*child_func) (void)); + Note that even on platforms where this is supported, use of fork() and + threads together is problematic, see + + */ + + +#ifndef _GLTHREAD_THREAD_H +#define _GLTHREAD_THREAD_H + +/* This file uses _Noreturn, HAVE_THREADS_H, HAVE_PTHREAD_ATFORK. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#if !defined c11_threads_in_use +# if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC +# define c11_threads_in_use() 1 +# elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK +# include +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif +#endif + +/* ========================================================================= */ + +#if USE_ISOC_THREADS + +/* Use the ISO C threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* -------------------------- gl_thread_t datatype -------------------------- */ + +typedef struct thrd_with_exitvalue *gl_thread_t; +extern int glthread_create (gl_thread_t *threadp, + void *(*func) (void *), void *arg); +# define glthread_sigmask(HOW, SET, OSET) \ + pthread_sigmask (HOW, SET, OSET) +extern int glthread_join (gl_thread_t thread, void **return_value_ptr); +extern gl_thread_t gl_thread_self (void); +# define gl_thread_self_pointer() \ + (void *) gl_thread_self () +extern _Noreturn void gl_thread_exit (void *return_value); +# define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include + +/* Get intptr_t. */ +# include + +/* On IRIX, pthread_atfork is declared in , not in . */ +# if defined __sgi +# include +# endif + +# if USE_POSIX_THREADS_WEAK +/* Compilers other than GCC need to see the declaration of pthread_sigmask + before the "#pragma weak pthread_sigmask" below. */ +# include +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The pthread_in_use() detection needs to be done at runtime. */ +# define pthread_in_use() \ + glthread_in_use () +extern int glthread_in_use (void); + +# endif + +# if USE_POSIX_THREADS_WEAK + +/* Use weak references to the POSIX threads library. */ + +/* Weak references avoid dragging in external libraries if the other parts + of the program don't use them. Here we use them, because we don't want + every program that uses libintl to depend on libpthread. This assumes + that libpthread would not be loaded after libintl; i.e. if libintl is + loaded first, by an executable that does not depend on libpthread, and + then a module is dynamically loaded that depends on libpthread, libintl + will not be multithread-safe. */ + +/* The way to test at runtime whether libpthread is present is to test + whether a function pointer's value, such as &pthread_mutex_init, is + non-NULL. However, some versions of GCC have a bug through which, in + PIC mode, &foo != NULL always evaluates to true if there is a direct + call to foo(...) in the same function. To avoid this, we test the + address of a function in libpthread that we don't use. */ + +# ifndef pthread_sigmask /* Do not declare rpl_pthread_sigmask weak. */ +# pragma weak pthread_sigmask +# endif + +# pragma weak pthread_join +# ifndef pthread_self +# pragma weak pthread_self +# endif +# pragma weak pthread_exit +# if HAVE_PTHREAD_ATFORK +# pragma weak pthread_atfork +# endif + +# if !PTHREAD_IN_USE_DETECTION_HARD +# pragma weak pthread_mutexattr_gettype +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) +# endif + +# else + +# if !PTHREAD_IN_USE_DETECTION_HARD +# define pthread_in_use() 1 +# endif + +# endif + +/* -------------------------- gl_thread_t datatype -------------------------- */ + +/* This choice of gl_thread_t assumes that + pthread_equal (a, b) is equivalent to ((a) == (b)). + This is the case on all platforms in use in 2008. */ +typedef pthread_t gl_thread_t; +# define glthread_create(THREADP, FUNC, ARG) \ + (pthread_in_use () ? pthread_create (THREADP, NULL, FUNC, ARG) : ENOSYS) +# define glthread_sigmask(HOW, SET, OSET) \ + (pthread_in_use () ? pthread_sigmask (HOW, SET, OSET) : 0) +# define glthread_join(THREAD, RETVALP) \ + (pthread_in_use () ? pthread_join (THREAD, RETVALP) : 0) +# ifdef PTW32_VERSION + /* In pthreads-win32, pthread_t is a struct with a pointer field 'p' and + other fields. */ +# define gl_thread_self() \ + (pthread_in_use () ? pthread_self () : gl_null_thread) +# define gl_thread_self_pointer() \ + (pthread_in_use () ? pthread_self ().p : NULL) +extern const gl_thread_t gl_null_thread; +# elif defined __MVS__ + /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. + The first three bytes of this field appear to uniquely identify a + pthread_t, though not necessarily representing a pointer. */ +# define gl_thread_self() \ + (pthread_in_use () ? pthread_self () : gl_null_thread) +# define gl_thread_self_pointer() \ + (pthread_in_use () ? *((void **) pthread_self ().__) : NULL) +extern const gl_thread_t gl_null_thread; +# else +# define gl_thread_self() \ + (pthread_in_use () ? pthread_self () : (pthread_t) 0) +# define gl_thread_self_pointer() \ + (pthread_in_use () ? (void *) (intptr_t) (pthread_t) pthread_self () : NULL) +# endif +# define gl_thread_exit(RETVAL) \ + (void) (pthread_in_use () ? (pthread_exit (RETVAL), 0) : 0) + +# if HAVE_PTHREAD_ATFORK +# define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) \ + (pthread_in_use () ? pthread_atfork (PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) : 0) +# else +# define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 +# endif + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_WINDOWS_THREADS + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# include "windows-thread.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* -------------------------- gl_thread_t datatype -------------------------- */ + +typedef glwthread_thread_t gl_thread_t; +# define glthread_create(THREADP, FUNC, ARG) \ + glwthread_thread_create (THREADP, 0, FUNC, ARG) +# define glthread_sigmask(HOW, SET, OSET) \ + /* unsupported */ 0 +# define glthread_join(THREAD, RETVALP) \ + glwthread_thread_join (THREAD, RETVALP) +# define gl_thread_self() \ + glwthread_thread_self () +# define gl_thread_self_pointer() \ + gl_thread_self () +# define gl_thread_exit(RETVAL) \ + glwthread_thread_exit (RETVAL) +# define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) + +/* Provide dummy implementation if threads are not supported. */ + +typedef int gl_thread_t; +# define glthread_create(THREADP, FUNC, ARG) ENOSYS +# define glthread_sigmask(HOW, SET, OSET) 0 +# define glthread_join(THREAD, RETVALP) 0 +# define gl_thread_self() 0 +# define gl_thread_self_pointer() \ + ((void *) gl_thread_self ()) +# define gl_thread_exit(RETVAL) (void)0 +# define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 + +#endif + +/* ========================================================================= */ + +/* Macros with built-in error handling. */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern gl_thread_t gl_thread_create (void *(*func) (void *arg), void *arg); +#define gl_thread_sigmask(HOW, SET, OSET) \ + do \ + { \ + if (glthread_sigmask (HOW, SET, OSET)) \ + abort (); \ + } \ + while (0) +#define gl_thread_join(THREAD, RETVAL) \ + do \ + { \ + if (glthread_join (THREAD, RETVAL)) \ + abort (); \ + } \ + while (0) +#define gl_thread_atfork(PREPARE, PARENT, CHILD) \ + do \ + { \ + if (glthread_atfork (PREPARE, PARENT, CHILD)) \ + abort (); \ + } \ + while (0) + +#ifdef __cplusplus +} +#endif + +#endif /* _GLTHREAD_THREAD_H */ diff --git a/include/libgnulib/glthread/tls.h b/include/libgnulib/glthread/tls.h new file mode 100755 index 0000000..ab8839f --- /dev/null +++ b/include/libgnulib/glthread/tls.h @@ -0,0 +1,267 @@ +/* Thread-local storage in multithreaded situations. + Copyright (C) 2005, 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. */ + +/* This file contains thread-local storage primitives for use with a given + thread library. It does not contain primitives for creating threads or + for other multithreading primitives. + + Type: gl_tls_key_t + Initialization: gl_tls_key_init (name, destructor); + Getting per-thread value: gl_tls_get (name) + Setting per-thread value: gl_tls_set (name, pointer); + De-initialization: gl_tls_key_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_tls_key_init (&name, destructor); + Setting per-thread value: err = glthread_tls_set (&name, pointer); + De-initialization: err = glthread_tls_key_destroy (&name); + + A per-thread value is of type 'void *'. + + A destructor is a function pointer of type 'void (*) (void *)', called + when a thread exits, and taking the last per-thread value as argument. It + is unspecified whether the destructor function is called when the last + per-thread value is NULL. On some platforms, the destructor function is + not called at all. +*/ + + +#ifndef _TLS_H +#define _TLS_H + +/* This file uses HAVE_THREADS_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#if !defined c11_threads_in_use +# if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC +# define c11_threads_in_use() 1 +# elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK +# include +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif +#endif + +/* ========================================================================= */ + +#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS + +/* Use the ISO C threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +typedef tss_t gl_tls_key_t; +# define glthread_tls_key_init(KEY, DESTRUCTOR) \ + (tss_create (KEY, DESTRUCTOR) != thrd_success ? EAGAIN : 0) +# define gl_tls_get(NAME) \ + tss_get (NAME) +# define glthread_tls_set(KEY, POINTER) \ + (tss_set (*(KEY), (POINTER)) != thrd_success ? ENOMEM : 0) +# define glthread_tls_key_destroy(KEY) \ + (tss_delete (*(KEY)), 0) + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The pthread_in_use() detection needs to be done at runtime. */ +# define pthread_in_use() \ + glthread_in_use () +extern int glthread_in_use (void); + +# endif + +# if USE_POSIX_THREADS_WEAK + +/* Use weak references to the POSIX threads library. */ + +# pragma weak pthread_key_create +# pragma weak pthread_getspecific +# pragma weak pthread_setspecific +# pragma weak pthread_key_delete +# ifndef pthread_self +# pragma weak pthread_self +# endif + +# if !PTHREAD_IN_USE_DETECTION_HARD +# pragma weak pthread_mutexattr_gettype +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) +# endif + +# else + +# if !PTHREAD_IN_USE_DETECTION_HARD +# define pthread_in_use() 1 +# endif + +# endif + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +typedef union + { + void *singlethread_value; + pthread_key_t key; + } + gl_tls_key_t; +# define glthread_tls_key_init(KEY, DESTRUCTOR) \ + (pthread_in_use () \ + ? pthread_key_create (&(KEY)->key, DESTRUCTOR) \ + : ((KEY)->singlethread_value = NULL, 0)) +# define gl_tls_get(NAME) \ + (pthread_in_use () \ + ? pthread_getspecific ((NAME).key) \ + : (NAME).singlethread_value) +# define glthread_tls_set(KEY, POINTER) \ + (pthread_in_use () \ + ? pthread_setspecific ((KEY)->key, (POINTER)) \ + : ((KEY)->singlethread_value = (POINTER), 0)) +# define glthread_tls_key_destroy(KEY) \ + (pthread_in_use () ? pthread_key_delete ((KEY)->key) : 0) + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_WINDOWS_THREADS + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# include "windows-tls.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +typedef glwthread_tls_key_t gl_tls_key_t; +# define glthread_tls_key_init(KEY, DESTRUCTOR) \ + glwthread_tls_key_create (KEY, DESTRUCTOR) +# define gl_tls_get(NAME) \ + TlsGetValue (NAME) +# define glthread_tls_set(KEY, POINTER) \ + (!TlsSetValue (*(KEY), POINTER) ? EINVAL : 0) +# define glthread_tls_key_destroy(KEY) \ + glwthread_tls_key_delete (*(KEY)) + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) + +/* Provide dummy implementation if threads are not supported. */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +typedef struct + { + void *singlethread_value; + } + gl_tls_key_t; +# define glthread_tls_key_init(KEY, DESTRUCTOR) \ + ((KEY)->singlethread_value = NULL, \ + (void) (DESTRUCTOR), \ + 0) +# define gl_tls_get(NAME) \ + (NAME).singlethread_value +# define glthread_tls_set(KEY, POINTER) \ + ((KEY)->singlethread_value = (POINTER), 0) +# define glthread_tls_key_destroy(KEY) \ + 0 + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +/* Macros with built-in error handling. */ + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +#define gl_tls_key_init(NAME, DESTRUCTOR) \ + do \ + { \ + if (glthread_tls_key_init (&NAME, DESTRUCTOR)) \ + abort (); \ + } \ + while (0) +#define gl_tls_set(NAME, POINTER) \ + do \ + { \ + if (glthread_tls_set (&NAME, POINTER)) \ + abort (); \ + } \ + while (0) +#define gl_tls_key_destroy(NAME) \ + do \ + { \ + if (glthread_tls_key_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* ========================================================================= */ + +#endif /* _TLS_H */ diff --git a/include/libgnulib/glthread/yield.h b/include/libgnulib/glthread/yield.h new file mode 100755 index 0000000..29105cc --- /dev/null +++ b/include/libgnulib/glthread/yield.h @@ -0,0 +1,100 @@ +/* Yielding the processor to other threads and processes. + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file contains a primitive for yielding the processor to other threads. + extern void gl_thread_yield (void); + */ + +#ifndef _GLTHREAD_YIELD_H +#define _GLTHREAD_YIELD_H + +#include + +/* ========================================================================= */ + +#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS + +/* Use the ISO C threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define gl_thread_yield() \ + thrd_yield () + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define gl_thread_yield() \ + sched_yield () + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_WINDOWS_THREADS + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define gl_thread_yield() \ + Sleep (0) + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) + +/* Provide dummy implementation if threads are not supported. */ + +# define gl_thread_yield() 0 + +#endif + +/* ========================================================================= */ + +#endif /* _GLTHREAD_YIELD_H */ diff --git a/include/libgnulib/hamt.h b/include/libgnulib/hamt.h new file mode 100755 index 0000000..b483aa1 --- /dev/null +++ b/include/libgnulib/hamt.h @@ -0,0 +1,275 @@ +/* (Persistent) hash array mapped tries. + Copyright (C) 2021-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Marc Nieper-Wißkirchen , 2021. */ + +/* This module provides a persistent version of hash array mapped + tries (hamts) that can be used in place of hash tables when pure + (functional) operations are needed. + + A hash function and an equivalence predicate has to be provided for + the elements that can be inserted, replaced and removed in a hamt. + A hamt cannot contain duplicates that compare equal. + + Each non-destructive updating operation returns a new hamt, which + shares structure with the original one. Destructive updates only + effect the hamt, on which the destructive operation is applied. + For example, given a hamt HAMT1, any non-destructive update + operation (e.g. hamt_insert) will result in a new hamt HAMT2. + Whatever further operations (destructive or not, including freeing + a hamt) are applied to HAMT1 won't change HAMT2 and vice versa. To + free all the memory, hash_free has therefore to be applied to both + HAMT1 and HAMT2. + + If persistence is not needed, transient hash tables are probably + faster. + + See also: Phil Bagwell (2000). Ideal Hash Trees (Report). Infoscience + Department, École Polytechnique Fédérale de Lausanne. + + http://infoscience.epfl.ch/record/64398/files/idealhashtrees.pdf */ + +#ifndef _GL_HAMT_H +#define _GL_HAMT_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_DEALLOC, + _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_HAMT_INLINE +# define _GL_HAMT_INLINE _GL_INLINE +#endif + +/* The GL_HAMT_THREAD_SAFE flag is set if the implementation of hamts + is thread-safe as long as two threads do not simultaneously access + the same hamt. This is non-trivial as different hamts may share + some structure. + We can define it only when the compiler supports _Atomic. For GCC, + it is supported starting with GCC 4.9. For clang, with clang 4. */ + +#if (__GNUC__ + (__GNUC_MINOR__ >= 9) > 4 && !defined __clang \ + || __clang_major__ >= 4) \ + && __STDC_VERSION__ >= 201112L && !defined __STD_NO_ATOMICS__ \ + && !defined __cplusplus +# define GL_HAMT_THREAD_SAFE 1 +#else +# define GL_HAMT_THREAD_SAFE 0 +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Hash values are of type size_t. For each level of the trie, we use + 5 bits (corresponding to lg2 of the width of a 32-bit word. */ +#define _GL_HAMT_MAX_DEPTH ((SIZE_WIDTH + 4) / 5) + +/************/ +/* Elements */ +/************/ + +/* A hamt stores pointers to elements. Each element has to be a + struct whose initial member is of the type Hamt_entry. You need to + define this struct yourself. It will typically contain an + Hamt_entry, a key, and, optionally, a value. + + An element is conceptually owned by a hamt as soon as it is + inserted. It will be automatically freed as soon as the last hamt + containing it is freed. */ +typedef struct +{ +#if GL_HAMT_THREAD_SAFE + _Atomic +#endif + size_t ref_count; +} Hamt_entry; + +/* Initialize *ELT, which has to point to a structure as described + above and return ELT type-cast. + + Before an element is inserted into any hamt, whether once or + multiple times, it has to be initialized exactly once. */ +_GL_HAMT_INLINE Hamt_entry * +hamt_element (void *elt) +{ + Hamt_entry *entry = elt; + entry->ref_count = 0; /* This assumes that element_entry == + 0. */ + return entry; +} + +/*************************/ +/* Opaque Hamt Structure */ +/*************************/ + +/* In user-code, hamts are accessed through pointers to the opaque + Hamt type. Two hamts are said to be the same if and only if their + pointers are equal. */ +typedef struct hamt Hamt; + +/*************/ +/* Interface */ +/*************/ + +/* A hash function has to be pure, and two elements that compare equal + have to have the same hash value. For a hash function to be a good + one, it is important that it uses all SIZE_WIDTH bits in + size_t. */ +typedef size_t (Hamt_hasher) (const void *elt); + +/* A comparison function has to be pure, and two elements that have + equal pointers have to compare equal. */ +typedef bool (Hamt_comparator) (const void *elt1, const void *elt2); + +/* A user-defined function that is called when the last hamt + containing a particular element is freed. */ +typedef void (Hamt_freer) (Hamt_entry *elt); + +/****************************/ +/* Creation and Destruction */ +/****************************/ + +/* Free the resources solely allocated by HAMT and all elements solely + contained in it. */ +extern void hamt_free (Hamt *hamt); + +/* Create and return a new and empty hash array mapped trie. */ +_GL_ATTRIBUTE_NODISCARD +extern Hamt *hamt_create (Hamt_hasher *hasher, Hamt_comparator *comparator, + Hamt_freer *freer) + _GL_ATTRIBUTE_DEALLOC (hamt_free, 1); + +/* Return a copy of HAMT, which is not the same in the sense above. + This procedure can be used, for example, so that two threads can + access the same data independently. */ +_GL_ATTRIBUTE_NODISCARD +extern Hamt *hamt_copy (Hamt *hamt) + _GL_ATTRIBUTE_DEALLOC (hamt_free, 1); + +/**********/ +/* Lookup */ +/**********/ + +/* If ELT matches an entry in HAMT, return this entry. Otherwise, + return NULL. */ +extern Hamt_entry *hamt_lookup (const Hamt *hamt, const void *elt); + +/**************************/ +/* Insertion and Deletion */ +/**************************/ + +/* If *ELT_PTR matches an element already in HAMT, set *ELT_PTR to the + existing element and return the original hamt. Otherwise, insert + *ELT_PTR into a copy of the hamt and return the copy. */ +_GL_ATTRIBUTE_NODISCARD +extern Hamt *hamt_insert (Hamt *hamt, Hamt_entry **elt_ptr); + +/* If *ELT_PTR matches an element already in HAMT, set *ELT_PTR to the +existing element, remove the element from a copy of the hamt and +return the copy. Otherwise, return the original hamt. */ +_GL_ATTRIBUTE_NODISCARD +extern Hamt *hamt_remove (Hamt *hamt, Hamt_entry **elt_ptr); + +/* Insert *ELT_PTR into a copy of HAMT and return the copy. If an + existing element was replaced, set *ELT_PTR to this element, and to + NULL otherwise. */ +_GL_ATTRIBUTE_NODISCARD +extern Hamt *hamt_replace (Hamt *hamt, Hamt_entry **elt_ptr); + +/*************/ +/* Iteration */ +/*************/ + +/* A processor function is called during walking of a hamt, which + returns true to continue the walking. */ +typedef bool (Hamt_processor) (Hamt_entry *elt, void *data); + +/* Call PROC for every entry of the hamt until it returns false. The + first argument to the processor is the entry, the second argument + is the value of DATA as received. Return the number of calls that + returned true. During processing, the hamt mustn't be + modified. */ +extern size_t hamt_do_while (const Hamt *hamt, Hamt_processor *proc, + void *data); + +/* An alternative interface to iterating through the entry of a hamt + that does not make use of a higher-order function like + hamt_do_while uses the Hamt_iterator type, which can be allocated + through automatic variables on the stack. As a hamt iterator + operates on a copy of a hamt, the original hamt can modified + (including freeing it) without affecting the iterator. */ +struct hamt_iterator +{ + Hamt* hamt; + int depth; + size_t path; + size_t position; + Hamt_entry *entry[_GL_HAMT_MAX_DEPTH + 1]; +}; +typedef struct hamt_iterator Hamt_iterator; + +/* Create of copy of HAMT and return an initialized ITER on the + copy. */ +extern Hamt_iterator hamt_iterator (Hamt *hamt); + +/* Free the resources allocated for ITER, including the hamt copy + associated with it. */ +extern void hamt_iterator_free (Hamt_iterator *iter); + +/* Return an independent copy of ITER that is initially in the same + state. Any operation on the original iterator (including freeing + it) doesn't affect the iterator copy and vice versa. */ +extern Hamt_iterator hamt_iterator_copy (Hamt_iterator *iter); + +/* Return true if ITER is not at the end, place the current element in + *ELT_PTR and move the iterator forward. Otherwise, return + false. */ +extern bool hamt_iterator_next (Hamt_iterator *iter, + Hamt_entry **elt_ptr); + +/***********************/ +/* Destructive Updates */ +/***********************/ + +/* If *ELT_PTR matches an element already in HAMT, set *ELT_PTR to the + element from the table and return false. Otherwise, insert *ELT_PTR + destructively into the hamt and return true. */ +extern bool hamt_insert_x (Hamt *hamt, Hamt_entry **elt_ptr); + +/* Insert ELT destructively into HAMT. If an existing element was + replaced, return true. Otherwise, return false. */ +extern bool hamt_replace_x (Hamt *hamt, Hamt_entry *elt); + +/* If ELT matches an element already in HAMT, remove the element + destructively from the hamt and return true. Otherwise, return + false. */ +extern bool hamt_remove_x (Hamt *hamt, Hamt_entry *elt); + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_HAMT_H */ diff --git a/include/libgnulib/hard-locale.h b/include/libgnulib/hard-locale.h new file mode 100755 index 0000000..5d40e52 --- /dev/null +++ b/include/libgnulib/hard-locale.h @@ -0,0 +1,38 @@ +/* Determine whether a locale is hard. + + Copyright (C) 1999, 2003-2004, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef HARD_LOCALE_H_ +#define HARD_LOCALE_H_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return true if the specified CATEGORY of the current locale is hard, i.e. + different from the C or POSIX locale that has a fixed behavior. + CATEGORY must be one of the LC_* values, but not LC_ALL. + Note: This function uses the current global locale; it ignores the + per-thread locale. */ +extern bool hard_locale (int category); + + +#ifdef __cplusplus +} +#endif + +#endif /* HARD_LOCALE_H_ */ diff --git a/include/libgnulib/hash-pjw-bare.h b/include/libgnulib/hash-pjw-bare.h new file mode 100755 index 0000000..fe74805 --- /dev/null +++ b/include/libgnulib/hash-pjw-bare.h @@ -0,0 +1,39 @@ +/* hash-pjw-bare.h -- declaration for a simple hash function + Copyright (C) 2012-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compute a hash code for a buffer starting at X and of size N, + and return the hash code. Note that unlike hash_pjw(), it does not + return it modulo a table size. + The result is platform dependent: it depends on the size of the 'size_t' + type. */ +extern size_t hash_pjw_bare (const void *x, size_t n) _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/hash-pjw.h b/include/libgnulib/hash-pjw.h new file mode 100755 index 0000000..2962dfc --- /dev/null +++ b/include/libgnulib/hash-pjw.h @@ -0,0 +1,38 @@ +/* hash-pjw.h -- declaration for a simple hash function + Copyright (C) 2001, 2003, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compute a hash code for a NUL-terminated string starting at X, + and return the hash code modulo TABLESIZE. + The result is platform dependent: it depends on the size of the 'size_t' + type and on the signedness of the 'char' type. */ +extern size_t hash_pjw (void const *x, size_t tablesize) _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/hash-triple.h b/include/libgnulib/hash-triple.h new file mode 100755 index 0000000..b80ea57 --- /dev/null +++ b/include/libgnulib/hash-triple.h @@ -0,0 +1,60 @@ +/* Hash functions for file-related (name, device, inode) triples. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering, 2007. */ + +#ifndef HASH_TRIPLE_H +#define HASH_TRIPLE_H + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Describe a just-created or just-renamed destination file. */ +struct F_triple +{ + char *name; + ino_t st_ino; + dev_t st_dev; +}; + +/* Defined in module 'hash-triple-simple'. */ + +extern size_t triple_hash (void const *x, size_t table_size) _GL_ATTRIBUTE_PURE; +extern bool triple_compare_ino_str (void const *x, void const *y) + _GL_ATTRIBUTE_PURE; +extern void triple_free (void *x); + +/* Defined in module 'hash-triple'. */ +extern size_t triple_hash_no_name (void const *x, size_t table_size) + _GL_ATTRIBUTE_PURE; +extern bool triple_compare (void const *x, void const *y); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/hash.h b/include/libgnulib/hash.h new file mode 100755 index 0000000..f764985 --- /dev/null +++ b/include/libgnulib/hash.h @@ -0,0 +1,273 @@ +/* hash - hashing table processing. + Copyright (C) 1998-1999, 2001, 2003, 2009-2024 Free Software Foundation, + Inc. + Written by Jim Meyering , 1998. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* A generic hash table package. */ + +/* Make sure USE_OBSTACK is defined to 1 if you want the allocator to use + obstacks instead of malloc, and recompile 'hash.c' with same setting. */ + +#ifndef HASH_H_ +# define HASH_H_ + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEPRECATED, + _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_PURE, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +struct hash_tuning + { + /* This structure is mainly used for 'hash_initialize', see the block + documentation of 'hash_reset_tuning' for more complete comments. */ + + float shrink_threshold; /* ratio of used buckets to trigger a shrink */ + float shrink_factor; /* ratio of new smaller size to original size */ + float growth_threshold; /* ratio of used buckets to trigger a growth */ + float growth_factor; /* ratio of new bigger size to original size */ + bool is_n_buckets; /* if CANDIDATE really means table size */ + }; + +typedef struct hash_tuning Hash_tuning; + +struct hash_table; + +typedef struct hash_table Hash_table; + +/* + * Information and lookup. + */ + +/* The following few functions provide information about the overall hash + table organization: the number of entries, number of buckets and maximum + length of buckets. */ + +/* Return the number of buckets in the hash table. The table size, the total + number of buckets (used plus unused), or the maximum number of slots, are + the same quantity. */ +extern size_t hash_get_n_buckets (const Hash_table *table) + _GL_ATTRIBUTE_PURE; + +/* Return the number of slots in use (non-empty buckets). */ +extern size_t hash_get_n_buckets_used (const Hash_table *table) + _GL_ATTRIBUTE_PURE; + +/* Return the number of active entries. */ +extern size_t hash_get_n_entries (const Hash_table *table) + _GL_ATTRIBUTE_PURE; + +/* Return the length of the longest chain (bucket). */ +extern size_t hash_get_max_bucket_length (const Hash_table *table) + _GL_ATTRIBUTE_PURE; + +/* Do a mild validation of a hash table, by traversing it and checking two + statistics. */ +extern bool hash_table_ok (const Hash_table *table) + _GL_ATTRIBUTE_PURE; + +extern void hash_print_statistics (const Hash_table *table, FILE *stream); + +/* If ENTRY matches an entry already in the hash table, return the + entry from the table. Otherwise, return NULL. */ +extern void *hash_lookup (const Hash_table *table, const void *entry); + +/* + * Walking. + */ + +/* The functions in this page traverse the hash table and process the + contained entries. For the traversal to work properly, the hash table + should not be resized nor modified while any particular entry is being + processed. In particular, entries should not be added, and an entry + may be removed only if there is no shrink threshold and the entry being + removed has already been passed to hash_get_next. */ + +/* Return the first data in the table, or NULL if the table is empty. */ +extern void *hash_get_first (const Hash_table *table) + _GL_ATTRIBUTE_PURE; + +/* Return the user data for the entry following ENTRY, where ENTRY has been + returned by a previous call to either 'hash_get_first' or 'hash_get_next'. + Return NULL if there are no more entries. */ +extern void *hash_get_next (const Hash_table *table, const void *entry); + +/* Fill BUFFER with pointers to active user entries in the hash table, then + return the number of pointers copied. Do not copy more than BUFFER_SIZE + pointers. */ +extern size_t hash_get_entries (const Hash_table *table, void **buffer, + size_t buffer_size); + +typedef bool (*Hash_processor) (void *entry, void *processor_data); + +/* Call a PROCESSOR function for each entry of a hash table, and return the + number of entries for which the processor function returned success. A + pointer to some PROCESSOR_DATA which will be made available to each call to + the processor function. The PROCESSOR accepts two arguments: the first is + the user entry being walked into, the second is the value of PROCESSOR_DATA + as received. The walking continue for as long as the PROCESSOR function + returns nonzero. When it returns zero, the walking is interrupted. */ +extern size_t hash_do_for_each (const Hash_table *table, + Hash_processor processor, void *processor_data); + +/* + * Allocation and clean-up. + */ + +/* Return a hash index for a NUL-terminated STRING between 0 and N_BUCKETS-1. + This is a convenience routine for constructing other hashing functions. */ +extern size_t hash_string (const char *string, size_t n_buckets) + _GL_ATTRIBUTE_PURE; + +extern void hash_reset_tuning (Hash_tuning *tuning); + +typedef size_t (*Hash_hasher) (const void *entry, size_t table_size); +typedef bool (*Hash_comparator) (const void *entry1, const void *entry2); +typedef void (*Hash_data_freer) (void *entry); + +/* Reclaim all storage associated with a hash table. If a data_freer + function has been supplied by the user when the hash table was created, + this function applies it to the data of each entry before freeing that + entry. This function preserves errno, like 'free'. */ +extern void hash_free (Hash_table *table); + +/* Allocate and return a new hash table, or NULL upon failure. The initial + number of buckets is automatically selected so as to _guarantee_ that you + may insert at least CANDIDATE different user entries before any growth of + the hash table size occurs. So, if have a reasonably tight a-priori upper + bound on the number of entries you intend to insert in the hash table, you + may save some table memory and insertion time, by specifying it here. If + the IS_N_BUCKETS field of the TUNING structure is true, the CANDIDATE + argument has its meaning changed to the wanted number of buckets. + + TUNING points to a structure of user-supplied values, in case some fine + tuning is wanted over the default behavior of the hasher. If TUNING is + NULL, the default tuning parameters are used instead. If TUNING is + provided but the values requested are out of bounds or might cause + rounding errors, return NULL. + + The user-supplied HASHER function, when not NULL, accepts two + arguments ENTRY and TABLE_SIZE. It computes, by hashing ENTRY contents, a + slot number for that entry which should be in the range 0..TABLE_SIZE-1. + This slot number is then returned. + + The user-supplied COMPARATOR function, when not NULL, accepts two + arguments pointing to user data, it then returns true for a pair of entries + that compare equal, or false otherwise. This function is internally called + on entries which are already known to hash to the same bucket index, + but which are distinct pointers. + + The user-supplied DATA_FREER function, when not NULL, may be later called + with the user data as an argument, just before the entry containing the + data gets freed. This happens from within 'hash_free' or 'hash_clear'. + You should specify this function only if you want these functions to free + all of your 'data' data. This is typically the case when your data is + simply an auxiliary struct that you have malloc'd to aggregate several + values. + + Set errno on failure; otherwise errno is unspecified. */ +_GL_ATTRIBUTE_NODISCARD +extern Hash_table *hash_initialize (size_t candidate, + const Hash_tuning *tuning, + Hash_hasher hasher, + Hash_comparator comparator, + Hash_data_freer data_freer) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (hash_free, 1); + +/* Like hash_initialize, but invokes xalloc_die instead of returning NULL. */ +/* This function is defined by module 'xhash'. */ +_GL_ATTRIBUTE_NODISCARD +extern Hash_table *hash_xinitialize (size_t candidate, + const Hash_tuning *tuning, + Hash_hasher hasher, + Hash_comparator comparator, + Hash_data_freer data_freer) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (hash_free, 1) + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* Make all buckets empty, placing any chained entries on the free list. + Apply the user-specified function data_freer (if any) to the data of any + affected entries. */ +extern void hash_clear (Hash_table *table); + +/* + * Insertion and deletion. + */ + +/* For an already existing hash table, change the number of buckets through + specifying CANDIDATE. The contents of the hash table are preserved. The + new number of buckets is automatically selected so as to _guarantee_ that + the table may receive at least CANDIDATE different user entries, including + those already in the table, before any other growth of the hash table size + occurs. If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the + exact number of buckets desired. Return true iff the rehash succeeded, + false (setting errno) otherwise. */ +_GL_ATTRIBUTE_NODISCARD +extern bool hash_rehash (Hash_table *table, size_t candidate); + +/* If ENTRY matches an entry already in the hash table, return the pointer + to the entry from the table. Otherwise, insert ENTRY and return ENTRY. + Return NULL (setting errno) if the storage required for insertion + cannot be allocated. This implementation does not support + duplicate entries or insertion of NULL. */ +_GL_ATTRIBUTE_NODISCARD +extern void *hash_insert (Hash_table *table, const void *entry); + +/* Same as hash_insert, but invokes xalloc_die instead of returning NULL. */ +/* This function is defined by module 'xhash'. */ +extern void *hash_xinsert (Hash_table *table, const void *entry); + +/* Insert ENTRY into hash TABLE if there is not already a matching entry. + + Return -1 (setting errno) upon memory allocation failure. + Return 1 if insertion succeeded. + Return 0 if there is already a matching entry in the table, + and in that case, if MATCHED_ENT is non-NULL, set *MATCHED_ENT + to that entry. + + This interface is easier to use than hash_insert when you must + distinguish between the latter two cases. More importantly, + hash_insert is unusable for some types of ENTRY values. When using + hash_insert, the only way to distinguish those cases is to compare + the return value and ENTRY. That works only when you can have two + different ENTRY values that point to data that compares "equal". Thus, + when the ENTRY value is a simple scalar, you must use + hash_insert_if_absent. ENTRY must not be NULL. */ +extern int hash_insert_if_absent (Hash_table *table, const void *entry, + const void **matched_ent); + +/* If ENTRY is already in the table, remove it and return the just-deleted + data (the user may want to deallocate its storage). If ENTRY is not in the + table, don't modify the table and return NULL. */ +extern void *hash_remove (Hash_table *table, const void *entry); + +/* Same as hash_remove. This interface is deprecated. + FIXME: Remove in 2022. */ +_GL_ATTRIBUTE_DEPRECATED +extern void *hash_delete (Hash_table *table, const void *entry); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/hmac.h b/include/libgnulib/hmac.h new file mode 100755 index 0000000..41b2712 --- /dev/null +++ b/include/libgnulib/hmac.h @@ -0,0 +1,66 @@ +/* hmac.h -- hashed message authentication codes + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Simon Josefsson. */ + +#ifndef HMAC_H +#define HMAC_H 1 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compute Hashed Message Authentication Code with MD5, as described + in RFC 2104, over BUFFER data of BUFLEN bytes using the KEY of + KEYLEN bytes, writing the output to pre-allocated 16 byte minimum + RESBUF buffer. Return 0 on success. */ +int +hmac_md5 (const void *key, size_t keylen, + const void *buffer, size_t buflen, void *restrict resbuf); + +/* Compute Hashed Message Authentication Code with SHA-1, over BUFFER + data of BUFLEN bytes using the KEY of KEYLEN bytes, writing the + output to pre-allocated 20 byte minimum RESBUF buffer. Return 0 on + success. */ +int +hmac_sha1 (const void *key, size_t keylen, + const void *in, size_t inlen, void *restrict resbuf); + +/* Compute Hashed Message Authentication Code with SHA-256, over BUFFER + data of BUFLEN bytes using the KEY of KEYLEN bytes, writing the + output to pre-allocated 32 byte minimum RESBUF buffer. Return 0 on + success. */ +int +hmac_sha256 (const void *key, size_t keylen, + const void *in, size_t inlen, void *restrict resbuf); + +/* Compute Hashed Message Authentication Code with SHA-512, over BUFFER + data of BUFLEN bytes using the KEY of KEYLEN bytes, writing the + output to pre-allocated 64 byte minimum RESBUF buffer. Return 0 on + success. */ +int +hmac_sha512 (const void *key, size_t keylen, + const void *in, size_t inlen, void *restrict resbuf); + + +#ifdef __cplusplus +} +#endif + +#endif /* HMAC_H */ diff --git a/include/libgnulib/human.h b/include/libgnulib/human.h new file mode 100755 index 0000000..6d8a598 --- /dev/null +++ b/include/libgnulib/human.h @@ -0,0 +1,92 @@ +/* human.h -- print human readable file size + + Copyright (C) 1996-2007, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert and Larry McVoy. */ + +#ifndef HUMAN_H_ +#define HUMAN_H_ 1 + +#include +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* A conservative bound on the maximum length of a human-readable string. + The output can be the square of the largest uintmax_t, so double + its size before converting to a bound. + log10 (2.0) < 146/485. Add 1 for integer division truncation. + Also, the output can have a thousands separator between every digit, + so multiply by MB_LEN_MAX + 1 and then subtract MB_LEN_MAX. + Append 1 for a space before the suffix. + Finally, append 3, the maximum length of a suffix. */ +#define LONGEST_HUMAN_READABLE \ + ((2 * sizeof (uintmax_t) * CHAR_BIT * 146 / 485 + 1) * (MB_LEN_MAX + 1) \ + - MB_LEN_MAX + 1 + 3) + +/* Options for human_readable. */ +enum +{ + /* Unless otherwise specified these options may be ORed together. */ + + /* The following three options are mutually exclusive. */ + /* Round to plus infinity (default). */ + human_ceiling = 0, + /* Round to nearest, ties to even. */ + human_round_to_nearest = 1, + /* Round to minus infinity. */ + human_floor = 2, + + /* Group digits together, e.g. "1,000,000". This uses the + locale-defined grouping; the traditional C locale does not group, + so this has effect only if some other locale is in use. */ + human_group_digits = 4, + + /* When autoscaling, suppress ".0" at end. */ + human_suppress_point_zero = 8, + + /* Scale output and use SI-style units, ignoring the output block size. */ + human_autoscale = 16, + + /* Prefer base 1024 to base 1000. */ + human_base_1024 = 32, + + /* Prepend " " before unit symbol. */ + human_space_before_unit = 64, + + /* Append SI prefix, e.g. "k" or "M". */ + human_SI = 128, + + /* Append "B" (if base 1000) or "iB" (if base 1024) to SI prefix. */ + human_B = 256 +}; + +char *human_readable (uintmax_t, char *, int, uintmax_t, uintmax_t); + +enum strtol_error human_options (char const *, int *, uintmax_t *); + + +#ifdef __cplusplus +} +#endif + +#endif /* HUMAN_H_ */ diff --git a/include/libgnulib/i-ring.h b/include/libgnulib/i-ring.h new file mode 100755 index 0000000..2dfcd40 --- /dev/null +++ b/include/libgnulib/i-ring.h @@ -0,0 +1,57 @@ +/* definitions for a simple ring buffer + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +enum { I_RING_SIZE = 4 }; +static_assert (1 <= I_RING_SIZE); + +/* When ir_empty is true, the ring is empty. + Otherwise, ir_data[B..F] are defined, where B..F is the contiguous + range of indices, modulo I_RING_SIZE, from back to front, inclusive. + Undefined elements of ir_data are always set to ir_default_val. + Popping from an empty ring aborts. + Pushing onto a full ring returns the displaced value. + An empty ring has F==B and ir_empty == true. + A ring with one entry still has F==B, but now ir_empty == false. */ +struct I_ring +{ + int ir_data[I_RING_SIZE]; + int ir_default_val; + unsigned int ir_front; + unsigned int ir_back; + bool ir_empty; +}; +typedef struct I_ring I_ring; + +void i_ring_init (I_ring *ir, int ir_default_val); +int i_ring_push (I_ring *ir, int val); +int i_ring_pop (I_ring *ir); +bool i_ring_empty (I_ring const *ir) _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/ialloc.h b/include/libgnulib/ialloc.h new file mode 100755 index 0000000..0ec0877 --- /dev/null +++ b/include/libgnulib/ialloc.h @@ -0,0 +1,145 @@ +/* ialloc.h -- malloc with idx_t rather than size_t + + Copyright 2021-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef IALLOC_H_ +#define IALLOC_H_ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_COLD, + _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if __ANDROID_API__ < 29 +#undef __ANDROID_API__ +#define __ANDROID_API__ 29 +#endif + +#include "idx.h" + +#include +#include +#include +#if defined __CHERI_PURE_CAPABILITY__ +# include +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef IALLOC_INLINE +# define IALLOC_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +IALLOC_INLINE void * _GL_ATTRIBUTE_COLD +_gl_alloc_nomem (void) +{ + errno = ENOMEM; + return NULL; +} + +/* imalloc (size) is like malloc (size). + It returns a non-NULL pointer to size bytes of memory. + Upon failure, it returns NULL with errno set. */ +IALLOC_INLINE +_GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ +void * +imalloc (idx_t s) +{ + return s <= SIZE_MAX ? malloc (s) : _gl_alloc_nomem (); +} + +/* irealloc (ptr, size) is like realloc (ptr, size). + It returns a non-NULL pointer to size bytes of memory. + Upon failure, it returns NULL with errno set. */ +IALLOC_INLINE +/*_GL_ATTRIBUTE_DEALLOC_FREE*/ +void * +irealloc (void *p, idx_t s) +{ + if (s <= SIZE_MAX) + { + /* Work around GNU realloc glitch by treating a zero size as if it + were 1, so that returning NULL is equivalent to failing. */ + p = realloc (p, s | !s); +#if defined __CHERI_PURE_CAPABILITY__ + if (p != NULL) + p = cheri_bounds_set (p, s); +#endif + return p; + } + else + return _gl_alloc_nomem (); +} + +/* icalloc (num, size) is like calloc (num, size). + It returns a non-NULL pointer to num * size bytes of memory. + Upon failure, it returns NULL with errno set. */ +IALLOC_INLINE +_GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ +void * +icalloc (idx_t n, idx_t s) +{ + if (SIZE_MAX < n) + { + if (s != 0) + return _gl_alloc_nomem (); + n = 0; + } + if (SIZE_MAX < s) + { + if (n != 0) + return _gl_alloc_nomem (); + s = 0; + } + return calloc (n, s); +} + +/* ireallocarray (ptr, num, size) is like reallocarray (ptr, num, size). + It returns a non-NULL pointer to num * size bytes of memory. + Upon failure, it returns NULL with errno set. */ +IALLOC_INLINE void * +ireallocarray (void *p, idx_t n, idx_t s) +{ + if (n <= SIZE_MAX && s <= SIZE_MAX) + { + /* Work around GNU reallocarray glitch by treating a zero size as if + it were 1, so that returning NULL is equivalent to failing. */ + size_t nx = n; + size_t sx = s; + if (n == 0 || s == 0) + nx = sx = 1; + p = reallocarray (p, nx, sx); +#if defined __CHERI_PURE_CAPABILITY__ + if (p != NULL && (n == 0 || s == 0)) + p = cheri_bounds_set (p, 0); +#endif + return p; + } + else + return _gl_alloc_nomem (); +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/include/libgnulib/iconv_open-aix.gperf b/include/libgnulib/iconv_open-aix.gperf new file mode 100755 index 0000000..55cccd0 --- /dev/null +++ b/include/libgnulib/iconv_open-aix.gperf @@ -0,0 +1,60 @@ +/* Character set conversion. + Copyright (C) 2007, 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On AIX 5.1, look in /usr/lib/nls/loc/uconvTable. +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +CP437, "IBM-437" +CP850, "IBM-850" +CP852, "IBM-852" +CP856, "IBM-856" +CP857, "IBM-857" +CP861, "IBM-861" +CP865, "IBM-865" +CP869, "IBM-869" +ISO-8859-13, "IBM-921" +CP922, "IBM-922" +CP932, "IBM-932" +CP943, "IBM-943" +CP1046, "IBM-1046" +CP1124, "IBM-1124" +CP1125, "IBM-1125" +CP1129, "IBM-1129" +CP1252, "IBM-1252" +GB2312, "IBM-eucCN" +EUC-JP, "IBM-eucJP" +EUC-KR, "IBM-eucKR" +EUC-TW, "IBM-eucTW" +BIG5, "big5" diff --git a/include/libgnulib/iconv_open-hpux.gperf b/include/libgnulib/iconv_open-hpux.gperf new file mode 100755 index 0000000..ddf51e3 --- /dev/null +++ b/include/libgnulib/iconv_open-hpux.gperf @@ -0,0 +1,72 @@ +/* Character set conversion. + Copyright (C) 2007, 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +struct mapping { int standard_name; const char vendor_name[9 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On HP-UX 11.11, look in /usr/lib/nls/iconv. +ISO-8859-1, "iso88591" +ISO-8859-2, "iso88592" +ISO-8859-5, "iso88595" +ISO-8859-6, "iso88596" +ISO-8859-7, "iso88597" +ISO-8859-8, "iso88598" +ISO-8859-9, "iso88599" +ISO-8859-15, "iso885915" +CP437, "cp437" +CP775, "cp775" +CP850, "cp850" +CP852, "cp852" +CP855, "cp855" +CP857, "cp857" +CP861, "cp861" +CP862, "cp862" +CP864, "cp864" +CP865, "cp865" +CP866, "cp866" +CP869, "cp869" +CP874, "cp874" +CP1250, "cp1250" +CP1251, "cp1251" +CP1252, "cp1252" +CP1253, "cp1253" +CP1254, "cp1254" +CP1255, "cp1255" +CP1256, "cp1256" +CP1257, "cp1257" +CP1258, "cp1258" +HP-ROMAN8, "roman8" +HP-ARABIC8, "arabic8" +HP-GREEK8, "greek8" +HP-HEBREW8, "hebrew8" +HP-TURKISH8, "turkish8" +HP-KANA8, "kana8" +TIS-620, "tis620" +GB2312, "hp15CN" +EUC-JP, "eucJP" +EUC-KR, "eucKR" +EUC-TW, "eucTW" +BIG5, "big5" +SHIFT_JIS, "sjis" +UTF-8, "utf8" diff --git a/include/libgnulib/iconv_open-irix.gperf b/include/libgnulib/iconv_open-irix.gperf new file mode 100755 index 0000000..cd0ad54 --- /dev/null +++ b/include/libgnulib/iconv_open-irix.gperf @@ -0,0 +1,47 @@ +/* Character set conversion. + Copyright (C) 2007, 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On IRIX 6.5, look in /usr/lib/iconv and /usr/lib/international/encodings. +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +KOI8-R, "KOI8" +CP855, "DOS855" +CP1251, "WIN1251" +GB2312, "eucCN" +EUC-JP, "eucJP" +EUC-KR, "eucKR" +EUC-TW, "eucTW" +SHIFT_JIS, "sjis" +TIS-620, "TIS620" diff --git a/include/libgnulib/iconv_open-osf.gperf b/include/libgnulib/iconv_open-osf.gperf new file mode 100755 index 0000000..417f7e3 --- /dev/null +++ b/include/libgnulib/iconv_open-osf.gperf @@ -0,0 +1,66 @@ +/* Character set conversion. + Copyright (C) 2007, 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On OSF/1 5.1, look in /usr/lib/nls/loc/iconv. +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +CP437, "cp437" +CP775, "cp775" +CP850, "cp850" +CP852, "cp852" +CP855, "cp855" +CP857, "cp857" +CP861, "cp861" +CP862, "cp862" +CP865, "cp865" +CP866, "cp866" +CP869, "cp869" +CP874, "cp874" +CP949, "KSC5601" +CP1250, "cp1250" +CP1251, "cp1251" +CP1252, "cp1252" +CP1253, "cp1253" +CP1254, "cp1254" +CP1255, "cp1255" +CP1256, "cp1256" +CP1257, "cp1257" +CP1258, "cp1258" +EUC-JP, "eucJP" +EUC-KR, "eucKR" +EUC-TW, "eucTW" +BIG5, "big5" +SHIFT_JIS, "SJIS" +TIS-620, "TACTIS" diff --git a/include/libgnulib/iconv_open-solaris.gperf b/include/libgnulib/iconv_open-solaris.gperf new file mode 100755 index 0000000..d5411de --- /dev/null +++ b/include/libgnulib/iconv_open-solaris.gperf @@ -0,0 +1,46 @@ +/* Character set conversion. + Copyright (C) 2007, 2009, 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On Solaris 10, look in the "iconv -l" output. Some aliases are advertised but +# not actually supported by the iconv() function and by the 'iconv' program. +# For example: +# $ echo abc | iconv -f 646 -t ISO-8859-1 +# Not supported 646 to ISO-8859-1 +# $ echo abc | iconv -f 646 -t ISO8859-1 +$ abc +ASCII, "646" +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +CP1251, "ansi-1251" diff --git a/include/libgnulib/iconv_open-zos.gperf b/include/libgnulib/iconv_open-zos.gperf new file mode 100755 index 0000000..a7fc3dc --- /dev/null +++ b/include/libgnulib/iconv_open-zos.gperf @@ -0,0 +1,76 @@ +/* Character set conversion. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +ASCII, "00367" +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "00913" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "05012" +ISO-8859-9, "ISO8859-9" +ISO-8859-13, "ISO8859-13" +ISO-8859-15, "ISO8859-15" +KOI8-R, "00878" +KOI8-U, "01168" +CP437, "IBM-437" +CP775, "00775" +CP850, "09042" +CP852, "IBM-852" +CP855, "13143" +CP856, "IBM-856" +CP857, "00857" +CP861, "IBM-861" +CP862, "IBM-862" +CP864, "IBM-864" +CP865, "00865" +CP866, "04962" +CP869, "IBM-869" +CP874, "TIS-620" +CP922, "IBM-922" +CP932, "IBM-943" +CP943, "IBM-943" +CP949, "IBM-1363" +CP1046, "IBM-1046" +CP1124, "IBM-1124" +CP1125, "IBM-1125" +CP1129, "01129" +CP1131, "01131" +CP1250, "IBM-5346" +CP1251, "IBM-5347" +CP1252, "IBM-5348" +CP1253, "IBM-5349" +CP1254, "IBM-5350" +CP1255, "09447" +CP1256, "09448" +CP1257, "09449" +GB2312, "IBM-eucCN" +EUC-JP, "01350" +EUC-KR, "IBM-eucKR" +GBK, "IBM-1386" diff --git a/include/libgnulib/iconveh.h b/include/libgnulib/iconveh.h new file mode 100755 index 0000000..c607373 --- /dev/null +++ b/include/libgnulib/iconveh.h @@ -0,0 +1,44 @@ +/* Character set conversion handler type. + Copyright (C) 2001-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _ICONVEH_H +#define _ICONVEH_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Handling of unconvertible characters. */ +enum iconv_ilseq_handler +{ + iconveh_error, /* return and set errno = EILSEQ */ + iconveh_question_mark, /* use one '?' per unconvertible character */ + iconveh_escape_sequence, /* use escape sequence \uxxxx or \Uxxxxxxxx */ + iconveh_replacement_character /* use one U+FFFD per unconvertible character + if that fits in the target encoding, + otherwise one '?' */ +}; + + +#ifdef __cplusplus +} +#endif + + +#endif /* _ICONVEH_H */ diff --git a/include/libgnulib/idcache.h b/include/libgnulib/idcache.h new file mode 100755 index 0000000..8901416 --- /dev/null +++ b/include/libgnulib/idcache.h @@ -0,0 +1,39 @@ +/* Username <--> uid and groupname <--> gid conversions, with cache for speed. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering, 2007. */ + +#ifndef IDCACHE_H +#define IDCACHE_H 1 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +extern char *getuser (uid_t uid); +extern char *getgroup (gid_t gid); +extern uid_t *getuidbyname (const char *user); +extern gid_t *getgidbyname (const char *group); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/idpriv.h b/include/libgnulib/idpriv.h new file mode 100755 index 0000000..a3ae592 --- /dev/null +++ b/include/libgnulib/idpriv.h @@ -0,0 +1,116 @@ +/* Dropping uid/gid privileges of the current process. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef _IDPRIV_H +#define _IDPRIV_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* This module allows programs which are installed with setuid or setgid bit + (and which therefore initially run with an effective user id or group id + different from the one of the current user) to drop their uid or gid + privilege, either permanently or temporarily. + + It is absolutely necessary to minimize the amount of code that is running + with escalated privileges (e.g. with effective uid = root). The reason is + that any bug or exploit in a part of a program that is running with + escalated privileges is a security vulnerability that - upon discovery - + puts the users in danger and requires immediate fixing. Then consider that + there's a bug every 10 or 20 lines of code on average... + + For programs that temporarily drop privileges but have the ability to + restore them later, there are additionally the dangers that + - Any bug in the non-privileged part of the program may be used to + create invalid data structures that will trigger security + vulnerabilities in the privileged part of the program. + - Code execution exploits in the non-privileged part of the program may + be used to invoke the function that restores high privileges and then + execute additional arbitrary code. + + 1) The usual, and reasonably safe, way to minimize the amount of code + running with privileges is to create a separate executable, with setuid + or setgid bit, that contains only code for the tasks that require + privileges (and,of course, strict checking of the arguments, so that the + program cannot be abused). The main program is installed without setuid + or setgid bit. + + 2) A less safe way is to do some privileged tasks at the beginning of the + program's run, and drop privileges permanently as soon as possible. + + Note: There may still be security issues if the privileged task puts + sensitive data into the process memory or opens communication channels + to restricted facilities. + + 3) The most unsafe way is to drop privileges temporarily for most of the + main program but to re-enable them for the duration of privileged tasks. + + As explained above, this approach has uncontrollable dangers for + security. + + This approach is normally not usable in multithreaded programs, because + you cannot know what kind of system calls the other threads could be + doing during the time the privileges are enabled. + + With approach 1, you don't need gnulib modules. + With approach 2, you need the gnulib module 'idpriv-drop'. + With approach 3, you need the gnulib module 'idpriv-droptemp'. But really, + you should better stay away from this approach. + */ + +/* For more in-depth discussion of these topics, see the papers/articles + * Hao Chen, David Wagner, Drew Dean: Setuid Demystified + + * Dan Tsafrir, Dilma da Silva, David Wagner: The Murky Issue of Changing + Process Identity: Revising "Setuid Demystified" + + + * Dhruv Mohindra: Observe correct revocation order while relinquishing + privileges + + */ + + +/* For approach 2. */ + +/* Drop the uid and gid privileges of the current process. + Return 0 if successful, or -1 with errno set upon failure. The recommended + handling of failure is to terminate the process. */ +extern int idpriv_drop (void); + + +/* For approach 3. */ + +/* Drop the uid and gid privileges of the current process in a way that allows + them to be restored later. + Return 0 if successful, or -1 with errno set upon failure. The recommended + handling of failure is to terminate the process. */ +extern int idpriv_temp_drop (void); + +/* Restore the uid and gid privileges of the current process. + Return 0 if successful, or -1 with errno set upon failure. The recommended + handling of failure is to not perform the actions that require the escalated + privileges. */ +extern int idpriv_temp_restore (void); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _IDPRIV_H */ diff --git a/include/libgnulib/idx.h b/include/libgnulib/idx.h new file mode 100755 index 0000000..43793f2 --- /dev/null +++ b/include/libgnulib/idx.h @@ -0,0 +1,144 @@ +/* A type for indices and sizes. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _IDX_H +#define _IDX_H + +/* Get ptrdiff_t. */ +#include + +/* Get PTRDIFF_MAX. */ +#include + +/* The type 'idx_t' holds an (array) index or an (object) size. + Its implementation promotes to a signed integer type, + which can hold the values + 0..2^63-1 (on 64-bit platforms) or + 0..2^31-1 (on 32-bit platforms). + + Why a signed integer type? + + * Security: Signed types can be checked for overflow via + '-fsanitize=undefined', but unsigned types cannot. + + * Comparisons without surprises: ISO C99 § 6.3.1.8 specifies a few + surprising results for comparisons, such as + + (int) -3 < (unsigned long) 7 => false + (int) -3 < (unsigned int) 7 => false + and on 32-bit machines: + (long) -3 < (unsigned int) 7 => false + + This is surprising because the natural comparison order is by + value in the realm of infinite-precision signed integers (ℤ). + + The best way to get rid of such surprises is to use signed types + for numerical integer values, and use unsigned types only for + bit masks and enums. + + Why not use 'size_t' directly? + + * Because 'size_t' is an unsigned type, and a signed type is better. + See above. + + Why not use 'ssize_t'? + + * 'ptrdiff_t' is more portable; it is standardized by ISO C + whereas 'ssize_t' is standardized only by POSIX. + + * 'ssize_t' is not required to be as wide as 'size_t', and some + now-obsolete POSIX platforms had 'size_t' wider than 'ssize_t'. + + * Conversely, some now-obsolete platforms had 'ptrdiff_t' wider + than 'size_t', which can be a win and conforms to POSIX. + + Won't this cause a problem with objects larger than PTRDIFF_MAX? + + * Typical modern or large platforms do not allocate such objects, + so this is not much of a problem in practice; for example, you + can safely write 'idx_t len = strlen (s);'. To port to older + small platforms where allocations larger than PTRDIFF_MAX could + in theory be a problem, you can use Gnulib's ialloc module, or + functions like ximalloc in Gnulib's xalloc module. + + Why not use 'ptrdiff_t' directly? + + * Maintainability: When reading and modifying code, it helps to know that + a certain variable cannot have negative values. For example, when you + have a loop + + int n = ...; + for (int i = 0; i < n; i++) ... + + or + + ptrdiff_t n = ...; + for (ptrdiff_t i = 0; i < n; i++) ... + + you have to ask yourself "what if n < 0?". Whereas in + + idx_t n = ...; + for (idx_t i = 0; i < n; i++) ... + + you know that this case cannot happen. + + Similarly, when a programmer writes + + idx_t = ptr2 - ptr1; + + there is an implied assertion that ptr1 and ptr2 point into the same + object and that ptr1 <= ptr2. + + * Being future-proof: In the future, range types (integers which are + constrained to a certain range of values) may be added to C compilers + or to the C standard. Several programming languages (Ada, Haskell, + Common Lisp, Pascal) already have range types. Such range types may + help producing good code and good warnings. The type 'idx_t' could + then be typedef'ed to a range type that is signed after promotion. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* In the future, idx_t could be typedef'ed to a signed range type. + The clang "extended integer types", supported in Clang 11 or newer + , + are a special case of range types. However, these types don't support binary + operators with plain integer types (e.g. expressions such as x > 1). + Therefore, they don't behave like signed types (and not like unsigned types + either). So, we cannot use them here. */ + +/* Use the signed type 'ptrdiff_t'. */ +/* Note: ISO C does not mandate that 'size_t' and 'ptrdiff_t' have the same + size, but it is so on all platforms we have seen since 1990. */ +typedef ptrdiff_t idx_t; + +/* IDX_MAX is the maximum value of an idx_t. */ +#define IDX_MAX PTRDIFF_MAX + +/* So far no need has been found for an IDX_WIDTH macro. + Perhaps there should be another macro IDX_VALUE_BITS that does not + count the sign bit and is therefore one less than PTRDIFF_WIDTH. */ + + +#ifdef __cplusplus +} +#endif + +#endif /* _IDX_H */ diff --git a/include/libgnulib/ignore-value.h b/include/libgnulib/ignore-value.h new file mode 100755 index 0000000..de4a240 --- /dev/null +++ b/include/libgnulib/ignore-value.h @@ -0,0 +1,51 @@ +/* ignore a function return without a compiler warning. -*- coding: utf-8 -*- + + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering, Eric Blake and Pádraig Brady. */ + +/* Use "ignore_value" to avoid a warning when using a function declared with + gcc's warn_unused_result attribute, but for which you really do want to + ignore the result. Traditionally, people have used a "(void)" cast to + indicate that a function's return value is deliberately unused. However, + if the function is declared with __attribute__((warn_unused_result)), + gcc issues a warning even with the cast. + + Caution: most of the time, you really should heed gcc's warning, and + check the return value. However, in those exceptional cases in which + you're sure you know what you're doing, use this function. + + For the record, here's one of the ignorable warnings: + "copy.c:233: warning: ignoring return value of 'fchown', + declared with attribute warn_unused_result". */ + +#ifndef _GL_IGNORE_VALUE_H +#define _GL_IGNORE_VALUE_H + +/* Normally casting an expression to void discards its value, but GCC + versions 3.4 and newer have __attribute__ ((__warn_unused_result__)) + which may cause unwanted diagnostics in that case. Use __typeof__ + and __extension__ to work around the problem, if the workaround is + known to be needed. + The workaround is not needed with clang. */ +#if (3 < __GNUC__ + (4 <= __GNUC_MINOR__)) && !defined __clang__ +# define ignore_value(x) \ + (__extension__ ({ __typeof__ (x) __x = (x); (void) __x; })) +#else +# define ignore_value(x) ((void) (x)) +#endif + +#endif diff --git a/include/libgnulib/immutable.h b/include/libgnulib/immutable.h new file mode 100755 index 0000000..c524771 --- /dev/null +++ b/include/libgnulib/immutable.h @@ -0,0 +1,98 @@ +/* Immutable data. + + Copyright (C) 2021-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2021. */ + +#ifndef _IMMUTABLE_H +#define _IMMUTABLE_H + +/* This file provide a facility to allocate and free immutable data objects. + + An immutable data object is allocated in three steps: + 1. You allocate an immutable memory region. + DATA *wp = immmalloc (sizeof (*wp)); + The pointer wp is actually a writable view to the memory region. + 2. You fill the memory region, through the pointer wp: + wp->x = ...; + wp->y = ...; + ... + 3. You declare the memory region as frozen. This means that you relinquish + write access. + DATA const *p = immfreeze (wp); + You can now let wp get out-of-scope. + + Then the pointer p can be used only in read-only ways. That is, if you cast + away the 'const' and attempt to write to the memory region, it will crash at + runtime (through a SIGSEGV signal). + p->x = ...; // rejected by the compiler + ((DATA *) p)->x = ...; // crashes at runtime + + Finally, you can free the immutable data object: + immfree (p); + */ + +/* If you compile this module with the C macro NO_IMMUTABLE set to 1, or on a + platform that lacks support for read-only and writeable memory areas, the + functions work alike, except that the "read-only" pointers are actually + writable. */ + +/* This file uses HAVE_WORKING_MPROTECT. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* This macro tells whether the implementation effectively rejects writes to + immutable data. */ +#if !NO_IMMUTABLE && ((defined _WIN32 && !defined __CYGWIN__) || HAVE_WORKING_MPROTECT) +# define IMMUTABLE_EFFECTIVE 1 +#else +# define IMMUTABLE_EFFECTIVE 0 +#endif + +/* Allocates an immutable memory region. + SIZE if the number of bytes; should be > 0. + Returns a writeable pointer to the memory region. + Upon memory allocation failure, returns NULL with errno set to ENOMEM. */ +extern void * immmalloc (size_t size); + +/* Freezes an immutable memory region. + WRITABLE_POINTER is a non-NULL return value from immmalloc(). + Returns a read-only pointer to the same memory region. */ +extern const void * immfreeze (void *writable_pointer); + +/* Frees an immutable memory region. + READONLY_POINTER is a return value from immfreeze(). */ +extern void immfree (const void *readonly_pointer); + +/* The following is just an application to some data types. */ + +/* Allocates an immutable memory region that contains a copy of the given string. + Returns a read-only pointer to this duplicated string. + Upon memory allocation failure, returns NULL with errno set to ENOMEM. */ +extern const char * immstrdup (const char *string); + +#ifdef __cplusplus +} +#endif + +#endif /* _IMMUTABLE_H */ diff --git a/include/libgnulib/ino-map.h b/include/libgnulib/ino-map.h new file mode 100755 index 0000000..06dd4af --- /dev/null +++ b/include/libgnulib/ino-map.h @@ -0,0 +1,51 @@ +/* Maintain a mapping of ino_t numbers to small integers. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert, 2010. */ + +#ifndef _GL_INO_MAP_H +#define _GL_INO_MAP_H + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define INO_MAP_INSERT_FAILURE ((size_t) -1) + +struct ino_map; + +void ino_map_free (struct ino_map *) _GL_ATTRIBUTE_NONNULL ((1)); + +struct ino_map *ino_map_alloc (size_t) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (ino_map_free, 1); + +size_t ino_map_insert (struct ino_map *, ino_t) _GL_ATTRIBUTE_NONNULL ((1)); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/integer_length.h b/include/libgnulib/integer_length.h new file mode 100755 index 0000000..12500ac --- /dev/null +++ b/include/libgnulib/integer_length.h @@ -0,0 +1,47 @@ +/* integer_length - find most significant bit in an unsigned integer. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2011. */ + +#ifndef _INTEGER_LENGTH_H +#define _INTEGER_LENGTH_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* These functions return the minimum number of bits required to represent + the given unsigned integer. + For non-zero values, this is the position of the most significant bit + that is set, plus one. For zero, it is 0. */ + +/* Returns the integer length of x. + The result is >= 0, <= sizeof (unsigned int) * CHAR_BIT. */ +extern int integer_length (unsigned int x); + +/* Returns the integer length of x. + The result is >= 0, <= sizeof (unsigned long) * CHAR_BIT. */ +extern int integer_length_l (unsigned long x); + +/* Returns the integer length of x. + The result is >= 0, <= sizeof (unsigned long long) * CHAR_BIT. */ +extern int integer_length_ll (unsigned long long x); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_LENGTH_H */ diff --git a/include/libgnulib/intprops-internal.h b/include/libgnulib/intprops-internal.h new file mode 100755 index 0000000..c8cc0e2 --- /dev/null +++ b/include/libgnulib/intprops-internal.h @@ -0,0 +1,399 @@ +/* intprops-internal.h -- properties of integer types not visible to users + + Copyright (C) 2001-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_INTPROPS_INTERNAL_H +#define _GL_INTPROPS_INTERNAL_H + +#include + +/* Pacify GCC 13.2 in some calls to _GL_EXPR_SIGNED. */ +#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) && !defined __clang__ +# pragma GCC diagnostic ignored "-Wtype-limits" +#endif + +/* Return a value with the common real type of E and V and the value of V. + Do not evaluate E. */ +#define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) + +/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see + . */ +#define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if the real type T is signed. */ +#define _GL_TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* Return 1 if the real expression E, after promotion, has a + signed or floating type. Do not evaluate E. */ +#define _GL_EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) + + +/* Minimum and maximum values for integer types and expressions. */ + +/* The width in bits of the integer type or expression T. + Do not evaluate T. T must not be a bit-field expression. + Padding bits are not supported; this is checked at compile-time below. */ +#define _GL_TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) + +/* The maximum and minimum values for the type of the expression E, + after integer promotion. E is not evaluated. */ +#define _GL_INT_MINIMUM(e) \ + (_GL_EXPR_SIGNED (e) \ + ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_CONVERT (e, 0)) +#define _GL_INT_MAXIMUM(e) \ + (_GL_EXPR_SIGNED (e) \ + ? _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_NEGATE_CONVERT (e, 1)) +#define _GL_SIGNED_INT_MAXIMUM(e) \ + (((_GL_INT_CONVERT (e, 1) << (_GL_TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1) + +/* Work around OpenVMS incompatibility with C99. */ +#if !defined LLONG_MAX && defined __INT64_MAX +# define LLONG_MAX __INT64_MAX +# define LLONG_MIN __INT64_MIN +#endif + +/* This include file assumes that signed types are two's complement without + padding bits; the above macros have undefined behavior otherwise. + If this is a problem for you, please let us know how to fix it for your host. + This assumption is tested by the intprops-tests module. */ + +/* Does the __typeof__ keyword work? This could be done by + 'configure', but for now it's easier to do it by hand. */ +#if (2 <= __GNUC__ \ + || (4 <= __clang_major__) \ + || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ + || (0x5110 <= __SUNPRO_C && !__STDC__)) +# define _GL_HAVE___TYPEOF__ 1 +#else +# define _GL_HAVE___TYPEOF__ 0 +#endif + +/* Return 1 if the integer type or expression T might be signed. Return 0 + if it is definitely unsigned. T must not be a bit-field expression. + This macro does not evaluate its argument, and expands to an + integer constant expression. */ +#if _GL_HAVE___TYPEOF__ +# define _GL_SIGNED_TYPE_OR_EXPR(t) _GL_TYPE_SIGNED (__typeof__ (t)) +#else +# define _GL_SIGNED_TYPE_OR_EXPR(t) 1 +#endif + +/* Return 1 if - A would overflow in [MIN,MAX] arithmetic. + A should not have side effects, and A's type should be an + integer with minimum value MIN and maximum MAX. */ +#define _GL_INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ + ((min) < 0 ? (a) < - (max) : 0 < (a)) + +/* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow + (A, B, P) work when P is non-null. */ +#ifdef __EDG__ +/* EDG-based compilers like nvc 22.1 cannot add 64-bit signed to unsigned + . */ +# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow) +/* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x, + see . */ +#elif 7 <= __GNUC__ +# define _GL_HAS_BUILTIN_ADD_OVERFLOW 1 +#else +# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 +#endif + +/* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */ +#if defined __clang_major__ && __clang_major__ < 14 +/* Work around Clang bug . */ +# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 +#else +# define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW +#endif + +/* True if __builtin_add_overflow_p (A, B, C) works, and similarly for + __builtin_sub_overflow_p and __builtin_mul_overflow_p. */ +#ifdef __EDG__ +/* In EDG-based compilers like ICC 2021.3 and earlier, + __builtin_add_overflow_p etc. are not treated as integral constant + expressions even when all arguments are. */ +# define _GL_HAS_BUILTIN_OVERFLOW_P 0 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_OVERFLOW_P __has_builtin (__builtin_mul_overflow_p) +#else +# define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) +#endif + +#if (!defined _GL_STDCKDINT_H && 202311 <= __STDC_VERSION__ \ + && ! (_GL_HAS_BUILTIN_ADD_OVERFLOW && _GL_HAS_BUILTIN_MUL_OVERFLOW)) +# include +#endif + +/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. + Return 1 if the result overflows. Arguments should not have side + effects and A, B and *R can be of any integer type other than char, + bool, a bit-precise integer type, or an enumeration type. */ +#if _GL_HAS_BUILTIN_ADD_OVERFLOW +# define _GL_INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r) +# define _GL_INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r) +#elif defined ckd_add && defined ckd_sub && !defined _GL_STDCKDINT_H +# define _GL_INT_ADD_WRAPV(a, b, r) ckd_add (r, + (a), + (b)) +# define _GL_INT_SUBTRACT_WRAPV(a, b, r) ckd_sub (r, + (a), + (b)) +#else +# define _GL_INT_ADD_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW) +# define _GL_INT_SUBTRACT_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW) +#endif +#if _GL_HAS_BUILTIN_MUL_OVERFLOW +# if ((9 < __GNUC__ + (3 <= __GNUC_MINOR__) \ + || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) \ + && !defined __clang__ && !defined __EDG__) +# define _GL_INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r) +# else + /* Work around GCC bug 91450. */ +# define _GL_INT_MULTIPLY_WRAPV(a, b, r) \ + ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && _GL_EXPR_SIGNED (a) && _GL_EXPR_SIGNED (b) \ + && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, \ + (__typeof__ (*(r))) 0, \ + (__typeof__ (*(r))) -1)) \ + ? ((void) __builtin_mul_overflow (a, b, r), 1) \ + : __builtin_mul_overflow (a, b, r)) +# endif +#elif defined ckd_mul && !defined _GL_STDCKDINT_H +# define _GL_INT_MULTIPLY_WRAPV(a, b, r) ckd_mul (r, + (a), + (b)) +#else +# define _GL_INT_MULTIPLY_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW) +#endif + +/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 + https://llvm.org/bugs/show_bug.cgi?id=25390 + For now, assume GCC < 14 and all Clang versions generate bogus + warnings for _Generic. This matters only for compilers that + lack relevant builtins. */ +#if (__GNUC__ && __GNUC__ < 14) || defined __clang__ +# define _GL__GENERIC_BOGUS 1 +#else +# define _GL__GENERIC_BOGUS 0 +#endif + +/* Store the low-order bits of A B into *R, where OP specifies + the operation and OVERFLOW the overflow predicate. Return 1 if the + result overflows. Arguments should not have side effects, + and A, B and *R can be of any integer type other than char, bool, a + bit-precise integer type, or an enumeration type. */ +#if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS +# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ + (_Generic \ + (*(r), \ + signed char: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + signed char, SCHAR_MIN, SCHAR_MAX), \ + unsigned char: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned char, 0, UCHAR_MAX), \ + short int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + short int, SHRT_MIN, SHRT_MAX), \ + unsigned short int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned short int, 0, USHRT_MAX), \ + int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + int, INT_MIN, INT_MAX), \ + unsigned int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned int, 0, UINT_MAX), \ + long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX), \ + unsigned long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + unsigned long int, 0, ULONG_MAX), \ + long long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + long long int, LLONG_MIN, LLONG_MAX), \ + unsigned long long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + unsigned long long int, 0, ULLONG_MAX))) +#else +/* Store the low-order bits of A B into *R, where OP specifies + the operation and OVERFLOW the overflow predicate. If *R is + signed, its type is ST with bounds SMIN..SMAX; otherwise its type + is UT with bounds U..UMAX. ST and UT are narrower than int. + Return 1 if the result overflows. Arguments should not have side + effects, and A, B and *R can be of any integer type other than + char, bool, a bit-precise integer type, or an enumeration type. */ +# if _GL_HAVE___TYPEOF__ +# define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ + (_GL_TYPE_SIGNED (__typeof__ (*(r))) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax)) +# else +# define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ + (overflow (a, b, smin, smax) \ + ? (overflow (a, b, 0, umax) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \ + : (overflow (a, b, 0, umax) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0))) +# endif + +# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ + (sizeof *(r) == sizeof (signed char) \ + ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ + signed char, SCHAR_MIN, SCHAR_MAX, \ + unsigned char, UCHAR_MAX) \ + : sizeof *(r) == sizeof (short int) \ + ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ + short int, SHRT_MIN, SHRT_MAX, \ + unsigned short int, USHRT_MAX) \ + : sizeof *(r) == sizeof (int) \ + ? (_GL_EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + int, INT_MIN, INT_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned int, 0, UINT_MAX)) \ + : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) +# ifdef LLONG_MAX +# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ + (sizeof *(r) == sizeof (long int) \ + ? (_GL_EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + unsigned long int, 0, ULONG_MAX)) \ + : (_GL_EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + long long int, LLONG_MIN, LLONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + unsigned long long int, 0, ULLONG_MAX))) +# else +# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ + (_GL_EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + unsigned long int, 0, ULONG_MAX)) +# endif +#endif + +/* Store the low-order bits of A B into *R, where the operation + is given by OP. Use the unsigned type UT for calculation to avoid + overflow problems. *R's type is T, with extrema TMIN and TMAX. + T can be any signed integer type other than char, bool, a + bit-precise integer type, or an enumeration type. + Return 1 if the result overflows. */ +#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ + (overflow (a, b, tmin, tmax) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) + +/* Return 1 if the integer expressions A - B and -A would overflow, + respectively. Arguments should not have side effects, + and can be any signed integer type other than char, bool, a + bit-precise integer type, or an enumeration type. + These macros are tuned for their last input argument being a constant. */ + +#if _GL_HAS_BUILTIN_OVERFLOW_P +# define _GL_INT_NEGATE_OVERFLOW(a) \ + __builtin_sub_overflow_p (0, a, (__typeof__ (- (a))) 0) +#else +# define _GL_INT_NEGATE_OVERFLOW(a) \ + _GL_INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) +#endif + +/* Return the low-order bits of A B, where the operation is given + by OP. Use the unsigned type UT for calculation to avoid undefined + behavior on signed integer overflow, and convert the result to type T. + UT is at least as wide as T and is no narrower than unsigned int, + T is two's complement, and there is no padding or trap representations. + Assume that converting UT to T yields the low-order bits, as is + done in all known two's-complement C compilers. E.g., see: + https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html + + According to the C standard, converting UT to T yields an + implementation-defined result or signal for values outside T's + range. However, code that works around this theoretical problem + runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: + https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html + As the compiler bug is real, don't try to work around the + theoretical problem. */ + +#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ + ((t) ((ut) (a) op (ut) (b))) + +/* Return true if the numeric values A + B, A - B, A * B fall outside + the range TMIN..TMAX. Arguments should not have side effects + and can be any integer type other than char, bool, + a bit-precise integer type, or an enumeration type. + TMIN should be signed and nonpositive. + TMAX should be positive, and should be signed unless TMIN is zero. */ +#define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \ + ((b) < 0 \ + ? (((tmin) \ + ? ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \ + && (a) < (tmin) - (b)) \ + : (a) <= -1 - (b)) \ + || ((_GL_EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \ + : (a) < 0 \ + ? (((tmin) \ + ? ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \ + && (b) < (tmin) - (a)) \ + : (b) <= -1 - (a)) \ + || ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \ + && (tmax) < (a) + (b))) \ + : (tmax) < (b) || (tmax) - (b) < (a)) +#define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \ + (((a) < 0) == ((b) < 0) \ + ? ((a) < (b) \ + ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \ + : (tmax) < (a) - (b)) \ + : (a) < 0 \ + ? ((!_GL_EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \ + || (a) - (tmin) < (b)) \ + : ((! (_GL_EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ + && _GL_EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \ + && (tmax) <= -1 - (b)) \ + || (tmax) + (b) < (a))) +#define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \ + ((b) < 0 \ + ? ((a) < 0 \ + ? (_GL_EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ + ? (a) < (tmax) / (b) \ + : ((_GL_INT_NEGATE_OVERFLOW (b) \ + ? _GL_INT_CONVERT (b, tmax) >> (_GL_TYPE_WIDTH (+ (b)) - 1) \ + : (tmax) / -(b)) \ + <= -1 - (a))) \ + : _GL_INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \ + ? (_GL_EXPR_SIGNED (a) \ + ? 0 < (a) + (tmin) \ + : 0 < (a) && -1 - (tmin) < (a) - 1) \ + : (tmin) / (b) < (a)) \ + : (b) == 0 \ + ? 0 \ + : ((a) < 0 \ + ? (_GL_INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \ + ? (_GL_EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \ + : (tmin) / (a) < (b)) \ + : (tmax) / (b) < (a))) + +#endif /* _GL_INTPROPS_INTERNAL_H */ diff --git a/include/libgnulib/intprops.h b/include/libgnulib/intprops.h new file mode 100755 index 0000000..43734f3 --- /dev/null +++ b/include/libgnulib/intprops.h @@ -0,0 +1,335 @@ +/* intprops.h -- properties of integer types + + Copyright (C) 2001-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_INTPROPS_H +#define _GL_INTPROPS_H + +#include "intprops-internal.h" + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if the arithmetic type T is an integer type. bool counts as + an integer. */ +#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) + +/* True if the real type T is signed. */ +#define TYPE_SIGNED(t) _GL_TYPE_SIGNED (t) + +/* Return 1 if the real expression E, after promotion, has a + signed or floating type. Do not evaluate E. */ +#define EXPR_SIGNED(e) _GL_EXPR_SIGNED (e) + + +/* Minimum and maximum values for integer types and expressions. */ + +/* The width in bits of the integer type or expression T. + Do not evaluate T. T must not be a bit-field expression. + Padding bits are not supported; this is checked at compile-time below. */ +#define TYPE_WIDTH(t) _GL_TYPE_WIDTH (t) + +/* The maximum and minimum values for the integer type T. */ +#define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) +#define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) + +/* Bound on length of the string representing an unsigned integer + value representable in B bits. log10 (2.0) < 146/485. The + smallest value of B where this bound is not tight is 2621. */ +#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) + +/* Bound on length of the string representing an integer type or expression T. + T must not be a bit-field expression. + + Subtract 1 for the sign bit if T is signed, and then add 1 more for + a minus sign if needed. + + Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is + unsigned, this macro may overestimate the true bound by one byte when + applied to unsigned types of size 2, 4, 16, ... bytes. */ +#define INT_STRLEN_BOUND(t) \ + (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + + _GL_SIGNED_TYPE_OR_EXPR (t)) + +/* Bound on buffer size needed to represent an integer type or expression T, + including the terminating null. T must not be a bit-field expression. */ +#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) + + +/* Range overflow checks. + + The INT__RANGE_OVERFLOW macros return 1 if the corresponding C + operators overflow arithmetically when given the same arguments. + These macros do not rely on undefined or implementation-defined behavior. + Although their implementations are simple and straightforward, + they are harder to use and may be less efficient than the + INT__WRAPV, INT__OK, and INT__OVERFLOW macros described below. + + Example usage: + + long int i = ...; + long int j = ...; + if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) + printf ("multiply would overflow"); + else + printf ("product is %ld", i * j); + + Restrictions on *_RANGE_OVERFLOW macros: + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, + so the arguments should not have side effects. The arithmetic + arguments (including the MIN and MAX arguments) must be of the same + integer type after the usual arithmetic conversions, and the type + must have minimum value MIN and maximum MAX. Unsigned types should + use a zero MIN of the proper type. + + Because all arguments are subject to integer promotions, these + macros typically do not work on types narrower than 'int'. + + These macros are tuned for constant MIN and MAX. For commutative + operations such as A + B, they are also tuned for constant B. */ + +/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (a) < (min) - (b) \ + : (max) - (b) < (a)) + +/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (max) + (b) < (a) \ + : (a) < (min) + (b)) + +/* Return 1 if - A would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ + _GL_INT_NEGATE_RANGE_OVERFLOW (a, min, max) + +/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Avoid && and || as they tickle + bugs in Sun C 5.11 2010/08/13 and other compilers; see + . */ +#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? ((a) < 0 \ + ? (a) < (max) / (b) \ + : (b) == -1 \ + ? 0 \ + : (min) / (b) < (a)) \ + : (b) == 0 \ + ? 0 \ + : ((a) < 0 \ + ? (a) < (min) / (b) \ + : (max) / (b) < (a))) + +/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. */ +#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ + ((min) < 0 && (b) == -1 && (a) < - (max)) + +/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. + Mathematically, % should never overflow, but on x86-like hosts + INT_MIN % -1 traps, and the C standard permits this, so treat this + as an overflow too. */ +#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ + INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) + +/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Here, MIN and MAX are for A only, and B need + not be of the same type as the other arguments. The C standard says that + behavior is undefined for shifts unless 0 <= B < wordwidth, and that when + A is negative then A << B has undefined behavior and A >> B has + implementation-defined behavior, but do not check these other + restrictions. */ +#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ + ((a) < 0 \ + ? (a) < (min) >> (b) \ + : (max) >> (b) < (a)) + +/* The _GL*_OVERFLOW macros have the same restrictions as the + *_RANGE_OVERFLOW macros, except that they do not assume that operands + (e.g., A and B) have the same type as MIN and MAX. Instead, they assume + that the result (e.g., A + B) has that type. */ +#if _GL_HAS_BUILTIN_OVERFLOW_P +# define _GL_ADD_OVERFLOW(a, b, min, max) \ + __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) +# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) +# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) +#else +# define _GL_ADD_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? (b) <= (a) + (b) \ + : (b) < 0 ? (a) <= (a) + (b) \ + : (a) + (b) < (b)) +# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? 1 \ + : (b) < 0 ? (a) - (b) <= (a) \ + : (a) < (b)) +# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ + || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) +#endif +#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (b) <= (a) + (b) - 1 \ + : (b) < 0 && (a) + (b) <= (a)) +#define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ + : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) + +/* Return a nonzero value if A is a mathematical multiple of B, where + A is unsigned, B is negative, and MAX is the maximum value of A's + type. A's type must be the same as (A % B)'s type. Normally (A % + -B == 0) suffices, but things get tricky if -B would overflow. */ +#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ + (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ + ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ + ? (a) \ + : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ + : (a) % - (b)) \ + == 0) + +/* Check for integer overflow, and report low order bits of answer. + + The INT__OVERFLOW macros return 1 if the corresponding C operators + might not yield numerically correct answers due to arithmetic overflow. + The INT__WRAPV macros compute the low-order bits of the sum, + difference, and product of two C integers, and return 1 if these + low-order bits are not numerically correct. + These macros work correctly on all known practical hosts, and do not rely + on undefined behavior due to signed arithmetic overflow. + + Example usage, assuming A and B are long int: + + if (INT_MULTIPLY_OVERFLOW (a, b)) + printf ("result would overflow\n"); + else + printf ("result is %ld (no overflow)\n", a * b); + + Example usage with WRAPV flavor: + + long int result; + bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); + printf ("result is %ld (%s)\n", result, + overflow ? "after overflow" : "no overflow"); + + Restrictions on these macros: + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, so the + arguments should not have side effects. + + The WRAPV macros are not constant expressions. They support only + +, binary -, and *. + + Because the WRAPV macros convert the result, they report overflow + in different circumstances than the OVERFLOW macros do. For + example, in the typical case with 16-bit 'short' and 32-bit 'int', + if A, B and *R are all of type 'short' then INT_ADD_OVERFLOW (A, B) + returns false because the addition cannot overflow after A and B + are converted to 'int', whereas INT_ADD_WRAPV (A, B, R) returns + true or false depending on whether the sum fits into 'short'. + + These macros are tuned for their last input argument being a constant. + + A, B, and *R should be integers; they need not be the same type, + and they need not be all signed or all unsigned. + However, none of the integer types should be bit-precise, + and *R's type should not be char, bool, or an enumeration type. + + Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, + A % B, and A << B would overflow, respectively. */ + +#define INT_ADD_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) +#define INT_SUBTRACT_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) +#define INT_NEGATE_OVERFLOW(a) _GL_INT_NEGATE_OVERFLOW (a) +#define INT_MULTIPLY_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) +#define INT_DIVIDE_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) +#define INT_REMAINDER_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) +#define INT_LEFT_SHIFT_OVERFLOW(a, b) \ + INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ + _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) + +/* Return 1 if the expression A B would overflow, + where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, + assuming MIN and MAX are the minimum and maximum for the result type. + Arguments should be free of side effects. */ +#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ + op_result_overflow (a, b, \ + _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ + _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) + +/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. + Return 1 if the result overflows. See above for restrictions. */ +#define INT_ADD_WRAPV(a, b, r) _GL_INT_ADD_WRAPV (a, b, r) +#define INT_SUBTRACT_WRAPV(a, b, r) _GL_INT_SUBTRACT_WRAPV (a, b, r) +#define INT_MULTIPLY_WRAPV(a, b, r) _GL_INT_MULTIPLY_WRAPV (a, b, r) + +/* The following macros compute A + B, A - B, and A * B, respectively. + If no overflow occurs, they set *R to the result and return 1; + otherwise, they return 0 and may modify *R. + + Example usage: + + long int result; + if (INT_ADD_OK (a, b, &result)) + printf ("result is %ld\n", result); + else + printf ("overflow\n"); + + A, B, and *R should be integers; they need not be the same type, + and they need not be all signed or all unsigned. + However, none of the integer types should be bit-precise, + and *R's type should not be char, bool, or an enumeration type. + + These macros work correctly on all known practical hosts, and do not rely + on undefined behavior due to signed arithmetic overflow. + + These macros are not constant expressions. + + These macros may evaluate their arguments zero or multiple times, so the + arguments should not have side effects. + + These macros are tuned for B being a constant. */ + +#define INT_ADD_OK(a, b, r) (! INT_ADD_WRAPV (a, b, r)) +#define INT_SUBTRACT_OK(a, b, r) (! INT_SUBTRACT_WRAPV (a, b, r)) +#define INT_MULTIPLY_OK(a, b, r) (! INT_MULTIPLY_WRAPV (a, b, r)) + +#endif /* _GL_INTPROPS_H */ diff --git a/include/libgnulib/inttostr.h b/include/libgnulib/inttostr.h new file mode 100755 index 0000000..8f1bb36 --- /dev/null +++ b/include/libgnulib/inttostr.h @@ -0,0 +1,44 @@ +/* inttostr.h -- convert integers to printable strings + + Copyright (C) 2001-2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert */ + +/* This file uses _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#include "intprops.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +_GL_ATTRIBUTE_NODISCARD char *imaxtostr (intmax_t, char *); +_GL_ATTRIBUTE_NODISCARD char *inttostr (int, char *); +_GL_ATTRIBUTE_NODISCARD char *offtostr (off_t, char *); +_GL_ATTRIBUTE_NODISCARD char *uinttostr (unsigned int, char *); +_GL_ATTRIBUTE_NODISCARD char *umaxtostr (uintmax_t, char *); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/isapipe.h b/include/libgnulib/isapipe.h new file mode 100755 index 0000000..b86cf26 --- /dev/null +++ b/include/libgnulib/isapipe.h @@ -0,0 +1,38 @@ +/* Test whether a file descriptor is a pipe. + + Copyright (C) 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses HAVE_FIFO_PIPES. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Whether pipes are FIFOs; -1 if not known. */ +#ifndef HAVE_FIFO_PIPES +# define HAVE_FIFO_PIPES (-1) +#endif + +int isapipe (int fd); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/isdir.h b/include/libgnulib/isdir.h new file mode 100755 index 0000000..ecf135f --- /dev/null +++ b/include/libgnulib/isdir.h @@ -0,0 +1,18 @@ +/* Determine whether a directory exists. + + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +int isdir (const char *path); diff --git a/include/libgnulib/isnand-nolibm.h b/include/libgnulib/isnand-nolibm.h new file mode 100755 index 0000000..1a0f27b --- /dev/null +++ b/include/libgnulib/isnand-nolibm.h @@ -0,0 +1,45 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses HAVE_ISNAND_IN_LIBC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if HAVE_ISNAND_IN_LIBC +/* Get declaration of isnan macro. */ +# include +# if (__GNUC__ >= 4) || (__clang_major__ >= 4) + /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */ +# undef isnand +# define isnand(x) __builtin_isnan ((double)(x)) +# else +# undef isnand +# define isnand(x) isnan ((double)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnand +# define isnand rpl_isnand +extern +# ifdef __cplusplus +"C" +# endif +int isnand (double x); +#endif + +/* Tell that our isnand does not need libm. */ +#define HAVE_ISNAND_NOLIBM 1 diff --git a/include/libgnulib/isnanf-nolibm.h b/include/libgnulib/isnanf-nolibm.h new file mode 100755 index 0000000..d004bbe --- /dev/null +++ b/include/libgnulib/isnanf-nolibm.h @@ -0,0 +1,57 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses HAVE_ISNANF_IN_LIBC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if HAVE_ISNANF_IN_LIBC +/* Get declaration of isnan macro or (older) isnanf function. */ +# include +# if (__GNUC__ >= 4) || (__clang_major__ >= 4) + /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. + GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */ +# undef isnanf +# define isnanf(x) __builtin_isnan ((float)(x)) +# elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +# else + /* Get declaration of isnanf(), if not declared in . */ +# if defined __sgi + /* We can't include , because it conflicts with our definition of + isnand. Therefore declare isnanf separately. */ +extern +# ifdef __cplusplus +"C" +# endif +int isnanf (float x); +# endif +# endif +#else +/* Test whether X is a NaN. */ +# undef isnanf +# define isnanf rpl_isnanf +extern +# ifdef __cplusplus +"C" +# endif +int isnanf (float x); +#endif + +/* Tell that our isnanf does not need libm. */ +#define HAVE_ISNANF_NOLIBM 1 diff --git a/include/libgnulib/isnanl-nolibm.h b/include/libgnulib/isnanl-nolibm.h new file mode 100755 index 0000000..f0219de --- /dev/null +++ b/include/libgnulib/isnanl-nolibm.h @@ -0,0 +1,46 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses HAVE_ISNANL_IN_LIBC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if HAVE_ISNANL_IN_LIBC +/* Get declaration of isnan macro or (older) isnanl function. */ +# include +# if (__GNUC__ >= 4) || (__clang_major__ >= 4) + /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. + GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */ +# undef isnanl +# define isnanl(x) __builtin_isnan ((long double)(x)) +# elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnanl +# define isnanl rpl_isnanl +extern +# ifdef __cplusplus +"C" +# endif +int isnanl (long double x); +#endif + +/* Tell that our isnanl does not need libm. */ +#define HAVE_ISNANL_NOLIBM 1 diff --git a/include/libgnulib/iswctype-impl.h b/include/libgnulib/iswctype-impl.h new file mode 100755 index 0000000..999f220 --- /dev/null +++ b/include/libgnulib/iswctype-impl.h @@ -0,0 +1,22 @@ +/* Test whether a wide character has a given property. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +iswctype (wint_t wc, wctype_t desc) +{ + return ((int (*) (wint_t)) desc) (wc); +} diff --git a/include/libgnulib/javacomp.h b/include/libgnulib/javacomp.h new file mode 100755 index 0000000..af42f00 --- /dev/null +++ b/include/libgnulib/javacomp.h @@ -0,0 +1,98 @@ +/* Compile a Java program. + Copyright (C) 2001-2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _JAVACOMP_H +#define _JAVACOMP_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compile a Java source file to bytecode. + java_sources is an array of source file names. + classpaths is a list of pathnames to be prepended to the CLASSPATH. + + source_version can be: support for + 1.6 assert keyword (1.4), generic classes and methods (1.5) + 1.7 switch(string) + 1.8 lambdas + 9 private interface methods + 10 type inference for local variables + 11 'var' in parameters of lambda expressions + ... + If source-version 1.3 or 1.4 or 1.5 is requested, it gets mapped to 1.6, for + backward compatibility. (Currently the minimum Java and javac version we need + to support is Java 1.6, since that's the default Java version on Solaris 10.) + + target_version can be: classfile version: + 1.6 50.0 + 1.7 51.0 + 1.8 52.0 + 9 53.0 + 10 54.0 + 11 55.0 + ... ... + If a target-version below 1.6 is requested, it gets mapped to 1.6, for + backward compatibility. (Currently the minimum Java and javac version we need + to support is Java 1.6, since that's the default Java version on Solaris 10.) + target_version can also be given as NULL. In this case, the required + target_version is determined from the found JVM (see javaversion.h). + Specifying target_version is useful when building a library (.jar) that is + useful outside the given package. Passing target_version = NULL is useful + when building an application. + It is unreasonable to ask for a target-version < source-version, such as + - target_version < 1.4 with source_version >= 1.4, or + - target_version < 1.5 with source_version >= 1.5, or + - target_version < 1.6 with source_version >= 1.6, or + - target_version < 1.7 with source_version >= 1.7, or + - target_version < 1.8 with source_version >= 1.8, or + - target_version < 9 with source_version >= 9, or + - target_version < 10 with source_version >= 10, or + - target_version < 11 with source_version >= 11, or + - ... + because even Sun's/Oracle's javac doesn't support these combinations. + It is redundant to ask for a target_version > source_version, since the + smaller target_version = source_version will also always work and newer JVMs + support the older target_versions too. + + directory is the target directory. The .class file for class X.Y.Z is + written at directory/X/Y/Z.class. If directory is NULL, the .class + file is written in the source's directory. + use_minimal_classpath = true means to ignore the user's CLASSPATH and + use a minimal one. This is likely to reduce possible problems if the + user's CLASSPATH contains garbage or a classes.zip file of the wrong + Java version. + If verbose, the command to be executed will be printed. + Return false if OK, true on error. */ +extern bool compile_java_class (const char * const *java_sources, + unsigned int java_sources_count, + const char * const *classpaths, + unsigned int classpaths_count, + const char *source_version, + const char *target_version, + const char *directory, + bool optimize, bool debug, + bool use_minimal_classpath, + bool verbose); + + +#ifdef __cplusplus +} +#endif + +#endif /* _JAVACOMP_H */ diff --git a/include/libgnulib/javaexec.h b/include/libgnulib/javaexec.h new file mode 100755 index 0000000..671f872 --- /dev/null +++ b/include/libgnulib/javaexec.h @@ -0,0 +1,58 @@ +/* Execute a Java program. + Copyright (C) 2001-2002, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _JAVAEXEC_H +#define _JAVAEXEC_H + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef bool execute_fn (const char *progname, + const char *prog_path, const char * const *prog_argv, + void *private_data); + +/* Execute a Java class. + class_name is the Java class name to be executed. + classpaths is a list of pathnames to be prepended to the CLASSPATH. + use_minimal_classpath = true means to ignore the user's CLASSPATH and + use a minimal one. This is likely to reduce possible problems if the + user's CLASSPATH contains garbage or a classes.zip file of the wrong + Java version. + exe_dir is a directory that may contain a native executable for the class. + args is a NULL terminated list of arguments to be passed to the program. + If verbose, the command to be executed will be printed. + Then the command is passed to the execute function together with the + private_data argument. This function returns false if OK, true on error. + Return false if OK, true on error. + If quiet, error messages will not be printed. */ +extern bool execute_java_class (const char *class_name, + const char * const *classpaths, + unsigned int classpaths_count, + bool use_minimal_classpath, + const char *exe_dir, + const char * const *args, + bool verbose, bool quiet, + execute_fn *executer, void *private_data); + + +#ifdef __cplusplus +} +#endif + +#endif /* _JAVAEXEC_H */ diff --git a/include/libgnulib/javaversion.class b/include/libgnulib/javaversion.class new file mode 100755 index 0000000..d62585b Binary files /dev/null and b/include/libgnulib/javaversion.class differ diff --git a/include/libgnulib/javaversion.h b/include/libgnulib/javaversion.h new file mode 100755 index 0000000..e93cbfb --- /dev/null +++ b/include/libgnulib/javaversion.h @@ -0,0 +1,48 @@ +/* Determine the Java version supported by javaexec. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +#ifndef _JAVAVERSION_H +#define _JAVAVERSION_H + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return information about the Java version used by execute_java_class(). + This is the value of System.getProperty("java.specification.version"). + Some possible values are: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20. + Return NULL if the Java version cannot be determined. */ +extern char * javaexec_version (void) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif + + +#endif /* _JAVAVERSION_H */ diff --git a/include/libgnulib/javaversion.java b/include/libgnulib/javaversion.java new file mode 100755 index 0000000..8251d86 --- /dev/null +++ b/include/libgnulib/javaversion.java @@ -0,0 +1,31 @@ +/* Show the Java version. + * Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + * + * 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 3 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, see . + */ + +/** + * This program shows the Java version. + * + * This program _must_ be compiled with + * javac -d . -target 1.1 javaversion.java + * since its purpose is to show the version of _any_ Java implementation. + * + * @author Bruno Haible + */ +public class javaversion { + public static void main (String[] args) { + System.out.println(System.getProperty("java.specification.version")); + } +} diff --git a/include/libgnulib/jit/cache.h b/include/libgnulib/jit/cache.h new file mode 100755 index 0000000..16835d5 --- /dev/null +++ b/include/libgnulib/jit/cache.h @@ -0,0 +1,198 @@ +/* JIT compiler - Flushing the instruction cache. + + Copyright (C) 1995-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +#include +#if ENABLE_VALGRIND_SUPPORT +# include +#endif +#if defined _WIN32 && !defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +#endif +#if defined __APPLE__ && defined __MACH__ +# include +#endif +#if defined _AIX +# include +#endif +#if defined __sgi +# include +#endif +#if defined __sun +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Clears the instruction cache for addresses + start <= address < end. + We need this because some CPUs have separate data cache and instruction + cache. The freshly built trampoline is visible to the data cache, but + maybe not to the instruction cache. This is hairy. */ +static inline void +clear_cache (void *start, void *end) +{ +#if ENABLE_VALGRIND_SUPPORT + /* Documentation: + */ + VALGRIND_DISCARD_TRANSLATIONS (start, (char *) end - (char *) start); +#endif +#if (defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86) + /* On this architecture, data cache and instruction cache are not separate. + Therefore, nothing to do. + For details, see + */ + +/* Use the operating system provided function, when available. */ +#elif defined _WIN32 && !defined __CYGWIN__ + /* Native Windows. + FlushInstructionCache + */ + HANDLE process = GetCurrentProcess (); + while (!FlushInstructionCache (process, start, (char *) end - (char *) start)) + ; +#elif defined __APPLE__ && defined __MACH__ + /* macOS */ + sys_icache_invalidate (start, (char *) end - (char *) start); +#elif defined _AIX + /* AIX. */ + _sync_cache_range (start, (char *) end - (char *) start); +#elif defined __sgi + /* IRIX. */ + cacheflush (start, (char *) end - (char *) start, ICACHE); +#elif defined __sun + /* Solaris. */ + extern void sync_instruction_memory (char *, size_t); + sync_instruction_memory (start, (char *) end - (char *) start); + +/* No operating system provided function. Dispatch according to the CPU. */ +#elif (defined __GNUC__ || defined __clang__) && defined __powerpc__ + /* XXX Is this enough, or do we also need the 'clf' instruction? */ + uintptr_t addr = (uintptr_t) start & ~(intptr_t)3; + uintptr_t end_addr = (uintptr_t) end; + do + { + asm volatile ("icbi 0,%0; dcbf 0,%0" : : "r" (addr)); + addr += 4; + } + while (addr < end_addr); + asm volatile ("sync; isync"); +#elif (defined __GNUC__ || defined __clang__) && defined __sparc + /* Use inline assembly. */ + /* The 'flush' instruction was earlier called 'iflush'. */ + uintptr_t addr = (uintptr_t) start & ~(intptr_t)7; + uintptr_t end_addr = (uintptr_t) end; + do + { + asm volatile ("flush %0+0" : : "r" (addr)); + addr += 8; + } + while (addr < end_addr); +#elif (defined __GNUC__ || defined __clang__) && defined __hppa + /* Use inline assembly. */ + /* The PA-RISC 1.1 Architecture and Instruction Set Reference Manual says: + "A cache line can be 16, 32, or 64 bytes in length." */ + /* XXX Is this good enough, or do we need the space register business + like in gcc/gcc/config/pa/pa.md and libffcall/trampoline/cache-hppa.c? */ + intptr_t cache_line_size = 16; + uintptr_t addr = (uintptr_t) start & ~cache_line_size; + uintptr_t end_addr = (uintptr_t) end; + do + { + asm volatile ("fdc 0(0,%0)" + "\n\t" "sync" + "\n\t" "fic 0(0,%0)" + "\n\t" "sync" : : "r" (addr)); + addr += cache_line_size; + } + while (addr < end_addr); + asm volatile ("nop" + "\n\t" "nop" + "\n\t" "nop" + "\n\t" "nop" + "\n\t" "nop" + "\n\t" "nop"); +#elif (defined __GNUC__ || defined __clang__) && defined __ia64 + /* Use inline assembly. */ + /* The Intel IA-64 Architecture Software Developer's Manual volume 3 says: + "The line size affected is at least 32 bytes." */ + intptr_t cache_line_size = 32; + uintptr_t addr = (uintptr_t) start & ~cache_line_size; + uintptr_t end_addr = (uintptr_t) end; + do + { + /* Flush a cache line. */ + asm volatile ("fc %0" : : "r" (addr)); + addr += cache_line_size; + } + while (addr < end_addr); + /* Ensure the preceding 'fc' instructions become effective in the local + processor and all remote processors. */ + asm volatile ("sync.i"); + /* Ensure the preceding 'sync.i' instruction becomes effective in the + local processor's instruction cache. */ + asm volatile ("srlz.i"); +#elif (defined __GNUC__ || defined __clang__) && defined __m68k__ && defined __linux__ + /* Use inline assembly to call the 'cacheflush' system call. + sys_cacheflush (addr, scope, cache, len) + d1 d2 d3 d4 + */ + register uintptr_t addr __asm__ ("%d1") = (uintptr_t) start; + register uintptr_t len __asm__ ("%d4") = (uintptr_t) end - addr; + __asm__ __volatile__ ( + "move%.l %#123,%/d0" /* __NR_cacheflush */ + "\n\t" "move%.l %#1,%/d2" /* FLUSH_SCOPE_LINE */ + "\n\t" "move%.l %#3,%/d3" /* FLUSH_CACHE_BOTH */ + "\n\t" "trap %#0" + : + : "d" (addr), "d" (len) + : "%d0", "%d2", "%d3" + ); +#elif (__GNUC__ + (__GNUC_MINOR__ >= 3) > 4 && !defined __clang__) \ + || ((__clang_major__ + (__clang_minor__ >= 4) > 3) \ + && (defined __aarch64__ /* arm64 */ || defined __arm__)) + /* GCC >= 4.3 has a GCC built-in. + + But it's sometimes not correctly implemented. + clang >= 3.4 has it as well, at least on ARM and ARM64. */ + /* On ARM, cache flushing can only be done through a system call. + GCC implements it for Linux with EABI, through an "swi 0" with code + 0xf0002. For other systems, it may be an "swi 0x9f0002", + an "swi 0xf00000", or similar. */ + /* On ARM64, cache flushing is done through special instructions, + and the length of the cache lines must be determined at runtime. + See gcc/libgcc/config/aarch64/sync-cache.c. */ + __builtin___clear_cache (start, end); +#elif HAVE___CLEAR_CACHE + /* Older versions of GCC have this libgcc function, but only on some + platforms. */ + extern void __clear_cache (char *, char *); + __clear_cache (start, end); +#else +# error "Don't know how to implement clear_cache on this platform." +#endif +} + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/lc-charset-dispatch.h b/include/libgnulib/lc-charset-dispatch.h new file mode 100755 index 0000000..4c1cf5f --- /dev/null +++ b/include/libgnulib/lc-charset-dispatch.h @@ -0,0 +1,40 @@ +/* Dispatching based on the current locale's character encoding. + Copyright (C) 2018-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2018. */ + +#include + +#if GNULIB_defined_mbstate_t + +/* A classification of special values of the encoding of the current locale. */ +typedef enum + { + enc_other, /* other */ + enc_utf8, /* UTF-8 */ + enc_eucjp, /* EUC-JP */ + enc_94, /* EUC-KR, GB2312, BIG5 */ + enc_euctw, /* EUC-TW */ + enc_gb18030, /* GB18030 */ + enc_sjis /* SJIS */ + } + enc_t; + +/* Returns a classification of special values of the encoding of the current + locale. */ +extern enc_t locale_encoding_classification (void); + +#endif diff --git a/include/libgnulib/lc-charset-unicode.h b/include/libgnulib/lc-charset-unicode.h new file mode 100755 index 0000000..9644e63 --- /dev/null +++ b/include/libgnulib/lc-charset-unicode.h @@ -0,0 +1,33 @@ +/* Conversion between the current locale's character encoding and Unicode. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2023. */ + +/* This facility is only needed on specific platforms. */ +#if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION + +# include +# include + +/* Returns WC (must be != 0) as a Unicode character, + or 0 in case it cannot be converted. */ +extern char32_t locale_encoding_to_unicode (wchar_t wc); + +/* Returns UC (must be != 0) as a wide character, + or 0 in case it cannot be converted. */ +extern wchar_t unicode_to_locale_encoding (char32_t uc); + +#endif diff --git a/include/libgnulib/libc-config.h b/include/libgnulib/libc-config.h new file mode 100755 index 0000000..33bdb73 --- /dev/null +++ b/include/libgnulib/libc-config.h @@ -0,0 +1,209 @@ +/* System definitions for code taken from the GNU C Library + + Copyright 2017-2024 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, see + . */ + +/* Written by Paul Eggert. */ + +/* This is intended to be a good-enough substitute for glibc system + macros like those defined in , so that Gnulib code + shared with glibc can do this as the first #include: + + #ifndef _LIBC + # include + #endif + + When compiled as part of glibc this is a no-op; when compiled as + part of Gnulib this includes Gnulib's and defines macros + that glibc library code would normally assume. + + Note: This header file MUST NOT be included by public header files + of Gnulib. */ + +#include + +/* On glibc this includes and and #defines + _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 and + DragonFlyBSD 5.9 it includes which defines __nonnull. + Elsewhere it is harmless. */ +#include + +/* From glibc . */ +#ifndef __set_errno +# define __set_errno(val) (errno = (val)) +#endif + +/* From glibc . */ + +#if defined __clang__ + /* clang really only groks GNU C 4.2, regardless of its value of __GNUC__. */ +# undef __GNUC_PREREQ +# define __GNUC_PREREQ(maj, min) ((maj) < 4 + ((min) <= 2)) +#endif +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#ifndef __glibc_clang_prereq +# if defined __clang_major__ && defined __clang_minor__ +# ifdef __apple_build_version__ +/* Apple for some reason renumbers __clang_major__ and __clang_minor__. + Gnulib code uses only __glibc_clang_prereq (3, 5); map it to + 6000000 <= __apple_build_version__. Support for other calls to + __glibc_clang_prereq can be added here as needed. */ +# define __glibc_clang_prereq(maj, min) \ + ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0) +# else +# define __glibc_clang_prereq(maj, min) \ + ((maj) < __clang_major__ + ((min) <= __clang_minor__)) +# endif +# else +# define __glibc_clang_prereq(maj, min) 0 +# endif +#endif + +#ifndef __attribute_nonnull__ +/* either does not exist, or is too old for Gnulib. + Prepare to include , which is Gnulib's version of a + more-recent glibc . */ + +/* Define _FEATURES_H so that does not include . */ +# ifndef _FEATURES_H +# define _FEATURES_H 1 +# endif +/* Define __GNULIB_CDEFS so that does not attempt to include + nonexistent files. */ +# define __GNULIB_CDEFS +/* Undef the macros unconditionally defined by our copy of glibc + , so that they do not clash with any system-defined + versions. */ +# undef _SYS_CDEFS_H +# undef __ASMNAME +# undef __ASMNAME2 +# undef __BEGIN_DECLS +# undef __CONCAT +# undef __END_DECLS +# undef __HAVE_GENERIC_SELECTION +# undef __LDBL_COMPAT +# undef __LDBL_REDIR +# undef __LDBL_REDIR1 +# undef __LDBL_REDIR1_DECL +# undef __LDBL_REDIR1_NTH +# undef __LDBL_REDIR2_DECL +# undef __LDBL_REDIR_DECL +# undef __LDBL_REDIR_NTH +# undef __LEAF +# undef __LEAF_ATTR +# undef __NTH +# undef __NTHNL +# undef __REDIRECT +# undef __REDIRECT_LDBL +# undef __REDIRECT_NTH +# undef __REDIRECT_NTHNL +# undef __REDIRECT_NTH_LDBL +# undef __STRING +# undef __THROW +# undef __THROWNL +# undef __attr_access +# undef __attr_access_none +# undef __attr_dealloc +# undef __attr_dealloc_free +# undef __attribute__ +# undef __attribute_alloc_align__ +# undef __attribute_alloc_size__ +# undef __attribute_artificial__ +# undef __attribute_const__ +# undef __attribute_deprecated__ +# undef __attribute_deprecated_msg__ +# undef __attribute_format_arg__ +# undef __attribute_format_strfmon__ +# undef __attribute_malloc__ +# undef __attribute_maybe_unused__ +# undef __attribute_noinline__ +# undef __attribute_nonstring__ +# undef __attribute_pure__ +# undef __attribute_returns_twice__ +# undef __attribute_used__ +# undef __attribute_warn_unused_result__ +# undef __errordecl +# undef __extension__ +# undef __extern_always_inline +# undef __extern_inline +# undef __flexarr +# undef __fortified_attr_access +# undef __fortify_function +# undef __glibc_c99_flexarr_available +# undef __glibc_has_attribute +# undef __glibc_has_builtin +# undef __glibc_has_extension +# undef __glibc_likely +# undef __glibc_macro_warning +# undef __glibc_macro_warning1 +# undef __glibc_unlikely +# undef __inline +# undef __ptr_t +# undef __restrict +# undef __restrict_arr +# undef __va_arg_pack +# undef __va_arg_pack_len +# undef __warnattr +# undef __wur +# ifndef __GNULIB_CDEFS +# undef __bos +# undef __bos0 +# undef __glibc_fortify +# undef __glibc_fortify_n +# undef __glibc_objsize +# undef __glibc_objsize0 +# undef __glibc_safe_len_cond +# undef __glibc_safe_or_unknown_len +# undef __glibc_unsafe_len +# undef __glibc_unsigned_or_positive +# endif + +/* Include our copy of glibc . */ +# include + +/* __inline is too pessimistic for non-GCC. */ +# undef __inline +# ifndef HAVE___INLINE +# if 199901 <= __STDC_VERSION__ || defined inline +# define __inline inline +# else +# define __inline +# endif +# endif + +#endif /* defined __glibc_likely */ + + +/* A substitute for glibc , good enough for Gnulib. */ +#define attribute_hidden +#define libc_hidden_proto(name) +#define libc_hidden_def(name) +#define libc_hidden_weak(name) +#define libc_hidden_ver(local, name) +#define strong_alias(name, aliasname) +#define weak_alias(name, aliasname) + +/* A substitute for glibc , good enough for Gnulib. */ +#define SHLIB_COMPAT(lib, introduced, obsoleted) 0 +#define compat_symbol(lib, local, symbol, version) extern int dummy +#define versioned_symbol(lib, local, symbol, version) extern int dummy diff --git a/include/libgnulib/libunistring.valgrind b/include/libgnulib/libunistring.valgrind new file mode 100755 index 0000000..c4d6a5c --- /dev/null +++ b/include/libgnulib/libunistring.valgrind @@ -0,0 +1,32 @@ +# Suppress valgrind messages in an installed libunistring. + +# Copyright (C) 2010-2024 Free Software Foundation, Inc. +# +# This file is free software. +# It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". +# You can redistribute it and/or modify it under either +# - the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3, or (at your +# option) any later version, or +# - the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) +# any later version, or +# - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". +# +# 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 +# Lesser General Public License and the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License and of the GNU General Public License along with this +# program. If not, see . + +# Suppress a valgrind message about use of uninitialized memory in freea(). +# This use is OK because it provides only a speedup. +{ + libunistring_freea + Memcheck:Cond + fun:libunistring_freea +} diff --git a/include/libgnulib/linebuffer.h b/include/libgnulib/linebuffer.h new file mode 100755 index 0000000..9be2eca --- /dev/null +++ b/include/libgnulib/linebuffer.h @@ -0,0 +1,64 @@ +/* linebuffer.h -- declarations for reading arbitrarily long lines + + Copyright (C) 1986, 1991, 1998-1999, 2002-2003, 2007, 2009-2024 Free + Software Foundation, Inc. + + 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 3 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, see . */ + +#if !defined LINEBUFFER_H +#define LINEBUFFER_H + +#include "idx.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* A 'struct linebuffer' holds a line of text. */ + +struct linebuffer +{ + idx_t size; /* Allocated. */ + idx_t length; /* Used. */ + char *buffer; +}; + +/* Initialize linebuffer LINEBUFFER for use. */ +void initbuffer (struct linebuffer *linebuffer); + +/* Read an arbitrarily long line of text from STREAM into LINEBUFFER. + Consider lines to be terminated by DELIMITER. + Keep the delimiter; append DELIMITER if we reach EOF and it wasn't + the last character in the file. Do not NUL-terminate. + Return LINEBUFFER, except at end of file return NULL. */ +struct linebuffer *readlinebuffer_delim (struct linebuffer *linebuffer, + FILE *stream, char delimiter); + +/* Read an arbitrarily long line of text from STREAM into LINEBUFFER. + Keep the newline; append a newline if it's the last line of a file + that ends in a non-newline character. Do not NUL-terminate. + Return LINEBUFFER, except at end of file return NULL. */ +struct linebuffer *readlinebuffer (struct linebuffer *linebuffer, FILE *stream); + +/* Free linebuffer LINEBUFFER and its data, all allocated with malloc. */ +void freebuffer (struct linebuffer *); + + +#ifdef __cplusplus +} +#endif + +#endif /* LINEBUFFER_H */ diff --git a/include/libgnulib/localcharset.h b/include/libgnulib/localcharset.h new file mode 100755 index 0000000..4721402 --- /dev/null +++ b/include/libgnulib/localcharset.h @@ -0,0 +1,135 @@ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003, 2009-2024 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _LOCALCHARSET_H +#define _LOCALCHARSET_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. + If the canonical name cannot be determined, the result is a non-canonical + name. */ +extern const char * locale_charset (void); + +/* About GNU canonical names for character encodings: + + Every canonical name must be supported by GNU libiconv. Support by GNU libc + is also desirable. + + The name is case insensitive. Usually an upper case MIME charset name is + preferred. + + The current list of these GNU canonical names is: + + name MIME? used by which systems + (darwin = Mac OS X, windows = native Windows) + + ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin + ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-3 Y glibc solaris cygwin + ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin + ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-6 Y glibc aix hpux solaris cygwin + ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos + ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos + ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-14 glibc cygwin + ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin + KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin + KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin + KOI8-T glibc + CP437 dos + CP775 dos + CP850 aix osf dos + CP852 dos + CP855 dos + CP856 aix + CP857 dos + CP861 dos + CP862 dos + CP864 dos + CP865 dos + CP866 freebsd netbsd openbsd darwin dos + CP869 dos + CP874 windows dos + CP922 aix + CP932 aix cygwin windows dos + CP943 aix zos + CP949 osf darwin windows dos + CP950 windows dos + CP1046 aix + CP1124 aix + CP1125 dos + CP1129 aix + CP1131 freebsd darwin + CP1250 windows + CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows + CP1252 aix windows + CP1253 windows + CP1254 windows + CP1255 glibc windows + CP1256 windows + CP1257 windows + GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos + EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin + EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos + EUC-TW glibc aix hpux irix osf solaris netbsd + BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos + BIG5-HKSCS glibc hpux solaris netbsd darwin + GBK glibc aix osf solaris freebsd darwin cygwin windows dos + GB18030 glibc hpux solaris freebsd netbsd darwin + SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin + JOHAB solaris windows + TIS-620 glibc aix hpux osf solaris cygwin zos + ARMSCII-8 glibc freebsd netbsd darwin + GEORGIAN-PS glibc cygwin + PT154 glibc netbsd cygwin + HP-ROMAN8 hpux + HP-ARABIC8 hpux + HP-GREEK8 hpux + HP-HEBREW8 hpux + HP-TURKISH8 hpux + HP-KANA8 hpux + DEC-KANJI osf + DEC-HANYU osf + UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos + + Note: Names which are not marked as being a MIME name should not be used in + Internet protocols for information interchange (mail, news, etc.). + + Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications + must understand both names and treat them as equivalent. + */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/include/libgnulib/localeinfo.h b/include/libgnulib/localeinfo.h new file mode 100755 index 0000000..765c237 --- /dev/null +++ b/include/libgnulib/localeinfo.h @@ -0,0 +1,74 @@ +/* locale information + + Copyright 2016-2024 Free Software Foundation, Inc. + + 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 3, 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, see . */ + +/* Written by Paul Eggert. */ + +#include +#include +#if GAWK +/* Use ISO C 99 API. */ +# define char32_t wchar_t +#else +/* Use ISO C 11 + gnulib API. */ +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +struct localeinfo +{ + /* MB_CUR_MAX > 1. */ + bool multibyte; + + /* The locale is simple, like the C locale. These locales can be + processed more efficiently, as they are single-byte, their native + character set is in collating-sequence order, and they do not + have multi-character collating elements. */ + bool simple; + + /* The locale uses UTF-8. */ + bool using_utf8; + + /* An array indexed by byte values B that contains 1 if B is a + single-byte character, -1 if B is an encoding error, and -2 if B + is the leading byte of a multibyte character that contains more + than one byte. */ + signed char sbclen[UCHAR_MAX + 1]; + + /* An array indexed by byte values B that contains the corresponding + 32-bit wide character (if any) for B if sbclen[B] == 1. WEOF means + the byte is not a valid single-byte character, i.e., sbclen[B] == -1 + or -2. */ + wint_t sbctowc[UCHAR_MAX + 1]; +}; + +extern void init_localeinfo (struct localeinfo *); + +/* Maximum number of characters that can be the case-folded + counterparts of a single character, not counting the character + itself. This is a generous upper bound. */ +enum { CASE_FOLDED_BUFSIZE = 32 }; + +extern int case_folded_counterparts (wint_t, char32_t[CASE_FOLDED_BUFSIZE]); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/localename-table.h b/include/libgnulib/localename-table.h new file mode 100755 index 0000000..eaa98fa --- /dev/null +++ b/include/libgnulib/localename-table.h @@ -0,0 +1,69 @@ +/* Table that maps a locale object to the names of the locale categories. + Copyright (C) 2018-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2018. */ + +#if HAVE_WORKING_USELOCALE && HAVE_NAMELESS_LOCALES + +# include +# include + +# include "glthread/lock.h" + +struct locale_categories_names + { + /* Locale category -> name (allocated with indefinite extent). */ + const char *category_name[6]; + }; + +/* A hash table of fixed size. Multiple threads can access it read-only + simultaneously, but only one thread can insert into it or remove from it + at the same time. + This hash table has global scope, so that when an application uses both + GNU libintl and gnulib, the application sees only one hash table. (When + linking statically with libintl, the fact that localename-table.c is a + separate compilation unit resolves the duplicate symbol conflict. When + linking with libintl as a shared library, we rely on ELF and the symbol + conflict resolution implemented in the ELF dynamic loader here.) + Both the libintl overrides and the gnulib overrides of the functions + newlocale, duplocale, freelocale see the same hash table (and the same lock). + For this reason, the internal layout of the hash table and the hash function + MUST NEVER CHANGE. If you need to change the internal layout or the hash + function, introduce versioning by appending a version suffix to the symbols + at the linker level. */ +# define locale_hash_function libintl_locale_hash_function +# define locale_hash_table libintl_locale_hash_table +# define locale_lock libintl_locale_lock + +extern size_t _GL_ATTRIBUTE_CONST locale_hash_function (locale_t x); + +/* A node in a hash bucket collision list. */ +struct locale_hash_node + { + struct locale_hash_node *next; + locale_t locale; + struct locale_categories_names names; + }; + +# define LOCALE_HASH_TABLE_SIZE 101 +extern struct locale_hash_node * locale_hash_table[LOCALE_HASH_TABLE_SIZE]; + +/* This lock protects the locale_hash_table against multiple simultaneous + accesses (except that multiple simultaneous read accesses are allowed). */ + +gl_rwlock_define(extern, locale_lock) + +#endif diff --git a/include/libgnulib/localename.h b/include/libgnulib/localename.h new file mode 100755 index 0000000..0690614 --- /dev/null +++ b/include/libgnulib/localename.h @@ -0,0 +1,116 @@ +/* Determine name of the currently selected locale. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_LOCALENAME_H +#define _GL_LOCALENAME_H + +/* This file uses _GL_ATTRIBUTE_CONST, HAVE_CFPREFERENCESCOPYAPPVALUE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's name. + It considers both the POSIX notion of locale name (see functions + gl_locale_name_thread and gl_locale_name_posix) and the system notion + of locale name (see function gl_locale_name_default). + CATEGORY is a locale category abbreviation, as defined in , + but not LC_ALL. E.g. LC_MESSAGES. + CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". + Return the locale category's name, canonicalized into XPG syntax + language[_territory][.codeset][@modifier] + The codeset part in the result is not reliable; the locale_charset() + should be used for codeset information instead. + The result must not be freed; it is statically allocated. */ +extern const char * gl_locale_name (int category, const char *categoryname); + +/* Determine the current per-thread locale's name, as specified by uselocale() + calls. + CATEGORY is a locale category abbreviation, as defined in , + but not LC_ALL. E.g. LC_MESSAGES. + CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". + Return the locale category's name, canonicalized into XPG syntax + language[_territory][.codeset][@modifier] + or NULL if no locale has been specified for the current thread. + The codeset part in the result is not reliable; the locale_charset() + should be used for codeset information instead. + The result must not be freed; it is statically allocated. */ +extern const char * gl_locale_name_thread (int category, const char *categoryname); + +/* Determine the thread-independent current locale's name, as specified by + setlocale() calls or by environment variables. + CATEGORY is a locale category abbreviation, as defined in , + but not LC_ALL. E.g. LC_MESSAGES. + CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". + Return the locale category's name, canonicalized into XPG syntax + language[_territory][.codeset][@modifier] + or NULL if no locale has been specified to setlocale() or by environment + variables. + The codeset part in the result is not reliable; the locale_charset() + should be used for codeset information instead. + The result must not be freed; it is statically allocated. */ +extern const char * gl_locale_name_posix (int category, const char *categoryname); + +/* Determine the default locale's name, as specified by environment + variables. + Return the locale category's name, or NULL if no locale has been specified + by environment variables. + The result must not be freed; it is statically allocated. */ +extern const char * gl_locale_name_environ (int category, const char *categoryname); + +/* Determine the default locale's name. This is the current locale's name, + if not specified by uselocale() calls, by setlocale() calls, or by + environment variables. This locale name is usually determined by systems + settings that the user can manipulate through a GUI. + + Quoting POSIX:2001: + "All implementations shall define a locale as the default locale, + to be invoked when no environment variables are set, or set to the + empty string. This default locale can be the C locale or any other + implementation-defined locale. Some implementations may provide + facilities for local installation administrators to set the default + locale, customizing it for each location. IEEE Std 1003.1-2001 does + not require such a facility." + + The result must not be freed; it is statically allocated. */ +extern const char * gl_locale_name_default (void) +#if !(HAVE_CFPREFERENCESCOPYAPPVALUE || defined _WIN32 || defined __CYGWIN__) + _GL_ATTRIBUTE_CONST +#endif + ; + + +/* These functions with the '_unsafe' suffix are like the functions without + this suffix, above, except that the result is not statically allocated, but + instead only valid in the current thread, until the next uselocale(), + setlocale(), newlocale(), or freelocale() call. */ +extern const char * gl_locale_name_unsafe (int category, + const char *categoryname); +extern const char * gl_locale_name_thread_unsafe (int category, + const char *categoryname); +extern const char * gl_locale_name_posix_unsafe (int category, + const char *categoryname); + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_LOCALENAME_H */ diff --git a/include/libgnulib/long-options.h b/include/libgnulib/long-options.h new file mode 100755 index 0000000..a32a130 --- /dev/null +++ b/include/libgnulib/long-options.h @@ -0,0 +1,50 @@ +/* long-options.h -- declaration for --help- and --version-handling function. + Copyright (C) 1993-1994, 1998-1999, 2003, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering. */ + +#ifndef LONG_OPTIONS_H_ +# define LONG_OPTIONS_H_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + + +void parse_long_options (int _argc, + char **_argv, + const char *_command_name, + const char *_package, + const char *_version, + void (*_usage) (int), + /* const char *author1, ...*/ ...); + +void parse_gnu_standard_options_only (int argc, + char **argv, + const char *command_name, + const char *package, + const char *version, + bool scan_all, + void (*usage_func) (int), + /* const char *author1, ...*/ ...); + + +#ifdef __cplusplus +} +#endif + +#endif /* LONG_OPTIONS_H_ */ diff --git a/include/libgnulib/malloc/dynarray.h b/include/libgnulib/malloc/dynarray.h new file mode 100755 index 0000000..3163e27 --- /dev/null +++ b/include/libgnulib/malloc/dynarray.h @@ -0,0 +1,177 @@ +/* Type-safe arrays which grow dynamically. Shared definitions. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* To use the dynarray facility, you need to include + and define the parameter macros + documented in that file. + + A minimal example which provides a growing list of integers can be + defined like this: + + struct int_array + { + // Pointer to result array followed by its length, + // as required by DYNARRAY_FINAL_TYPE. + int *array; + size_t length; + }; + + #define DYNARRAY_STRUCT dynarray_int + #define DYNARRAY_ELEMENT int + #define DYNARRAY_PREFIX dynarray_int_ + #define DYNARRAY_FINAL_TYPE struct int_array + #include + + To create a three-element array with elements 1, 2, 3, use this + code: + + struct dynarray_int dyn; + dynarray_int_init (&dyn); + for (int i = 1; i <= 3; ++i) + { + int *place = dynarray_int_emplace (&dyn); + assert (place != NULL); + *place = i; + } + struct int_array result; + bool ok = dynarray_int_finalize (&dyn, &result); + assert (ok); + assert (result.length == 3); + assert (result.array[0] == 1); + assert (result.array[1] == 2); + assert (result.array[2] == 3); + free (result.array); + + If the elements contain resources which must be freed, define + DYNARRAY_ELEMENT_FREE appropriately, like this: + + struct str_array + { + char **array; + size_t length; + }; + + #define DYNARRAY_STRUCT dynarray_str + #define DYNARRAY_ELEMENT char * + #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) + #define DYNARRAY_PREFIX dynarray_str_ + #define DYNARRAY_FINAL_TYPE struct str_array + #include + + Compared to scratch buffers, dynamic arrays have the following + features: + + - They have an element type, and are not just an untyped buffer of + bytes. + + - When growing, previously stored elements are preserved. (It is + expected that scratch_buffer_grow_preserve and + scratch_buffer_set_array_size eventually go away because all + current users are moved to dynamic arrays.) + + - Scratch buffers have a more aggressive growth policy because + growing them typically means a retry of an operation (across an + NSS service module boundary), which is expensive. + + - For the same reason, scratch buffers have a much larger initial + stack allocation. */ + +#ifndef _DYNARRAY_H +#define _DYNARRAY_H + +#include +#include + +struct dynarray_header +{ + size_t used; + size_t allocated; + void *array; +}; + +/* Marker used in the allocated member to indicate that an error was + encountered. */ +static inline size_t +__dynarray_error_marker (void) +{ + return -1; +} + +/* Internal function. See the has_failed function in + dynarray-skeleton.c. */ +static inline bool +__dynarray_error (struct dynarray_header *list) +{ + return list->allocated == __dynarray_error_marker (); +} + +/* Internal function. Enlarge the dynamically allocated area of the + array to make room for one more element. SCRATCH is a pointer to + the scratch area (which is not heap-allocated and must not be + freed). ELEMENT_SIZE is the size, in bytes, of one element. + Return false on failure, true on success. */ +bool __libc_dynarray_emplace_enlarge (struct dynarray_header *, + void *scratch, size_t element_size); + +/* Internal function. Enlarge the dynamically allocated area of the + array to make room for at least SIZE elements (which must be larger + than the existing used part of the dynamic array). SCRATCH is a + pointer to the scratch area (which is not heap-allocated and must + not be freed). ELEMENT_SIZE is the size, in bytes, of one element. + Return false on failure, true on success. */ +bool __libc_dynarray_resize (struct dynarray_header *, size_t size, + void *scratch, size_t element_size); + +/* Internal function. Like __libc_dynarray_resize, but clear the new + part of the dynamic array. */ +bool __libc_dynarray_resize_clear (struct dynarray_header *, size_t size, + void *scratch, size_t element_size); + +/* Internal type. */ +struct dynarray_finalize_result +{ + void *array; + size_t length; +}; + +/* Internal function. Copy the dynamically-allocated area to an + explicitly-sized heap allocation. SCRATCH is a pointer to the + embedded scratch space. ELEMENT_SIZE is the size, in bytes, of the + element type. On success, true is returned, and pointer and length + are written to *RESULT. On failure, false is returned. The caller + has to take care of some of the memory management; this function is + expected to be called from dynarray-skeleton.c. */ +bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, + size_t element_size, + struct dynarray_finalize_result *result); + + +/* Internal function. Terminate the process after an index error. + SIZE is the number of elements of the dynamic array. INDEX is the + lookup index which triggered the failure. */ +_Noreturn void __libc_dynarray_at_failure (size_t size, size_t index); + +#ifndef _ISOMAC +libc_hidden_proto (__libc_dynarray_emplace_enlarge) +libc_hidden_proto (__libc_dynarray_resize) +libc_hidden_proto (__libc_dynarray_resize_clear) +libc_hidden_proto (__libc_dynarray_finalize) +libc_hidden_proto (__libc_dynarray_at_failure) +#endif + +#endif /* _DYNARRAY_H */ diff --git a/include/libgnulib/malloc/scratch_buffer.h b/include/libgnulib/malloc/scratch_buffer.h new file mode 100755 index 0000000..b94f872 --- /dev/null +++ b/include/libgnulib/malloc/scratch_buffer.h @@ -0,0 +1,135 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SCRATCH_BUFFER_H +#define _SCRATCH_BUFFER_H + +/* Scratch buffers with a default stack allocation and fallback to + heap allocation. It is expected that this function is used in this + way: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + return -1; + + scratch_buffer_free (&tmpbuf); + return 0; + + The allocation functions (scratch_buffer_grow, + scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make + sure that the heap allocation, if any, is freed, so that the code + above does not have a memory leak. The buffer still remains in a + state that can be deallocated using scratch_buffer_free, so a loop + like this is valid as well: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + break; + + scratch_buffer_free (&tmpbuf); + + scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed + to grow the buffer by at least 512 bytes. This means that when + using the scratch buffer as a backing store for a non-character + array whose element size, in bytes, is 512 or smaller, the scratch + buffer only has to grow once to make room for at least one more + element. +*/ + +#include +#include +#include + +/* Scratch buffer. Must be initialized with scratch_buffer_init + before its use. */ +struct scratch_buffer { + void *data; /* Pointer to the beginning of the scratch area. */ + size_t length; /* Allocated space at the data pointer, in bytes. */ + union { max_align_t __align; char __c[1024]; } __space; +}; + +/* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space + and BUFFER->length reflects the available space. */ +static inline void +scratch_buffer_init (struct scratch_buffer *buffer) +{ + buffer->data = buffer->__space.__c; + buffer->length = sizeof (buffer->__space); +} + +/* Deallocates *BUFFER (if it was heap-allocated). */ +static inline void +scratch_buffer_free (struct scratch_buffer *buffer) +{ + if (buffer->data != buffer->__space.__c) + free (buffer->data); +} + +/* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT + preserved. Return true on success, false on allocation failure (in + which case the old buffer is freed). On success, the new buffer is + larger than the previous size. On failure, *BUFFER is deallocated, + but remains in a free-able state, and errno is set. */ +bool __libc_scratch_buffer_grow (struct scratch_buffer *buffer); +libc_hidden_proto (__libc_scratch_buffer_grow) + +/* Alias for __libc_scratch_buffer_grow. */ +static __always_inline bool +scratch_buffer_grow (struct scratch_buffer *buffer) +{ + return __glibc_likely (__libc_scratch_buffer_grow (buffer)); +} + +/* Like __libc_scratch_buffer_grow, but preserve the old buffer + contents on success, as a prefix of the new buffer. */ +bool __libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer); +libc_hidden_proto (__libc_scratch_buffer_grow_preserve) + +/* Alias for __libc_scratch_buffer_grow_preserve. */ +static __always_inline bool +scratch_buffer_grow_preserve (struct scratch_buffer *buffer) +{ + return __glibc_likely (__libc_scratch_buffer_grow_preserve (buffer)); +} + +/* Grow *BUFFER so that it can store at least NELEM elements of SIZE + bytes. The buffer contents are NOT preserved. Both NELEM and SIZE + can be zero. Return true on success, false on allocation failure + (in which case the old buffer is freed, but *BUFFER remains in a + free-able state, and errno is set). It is unspecified whether this + function can reduce the array size. */ +bool __libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size); +libc_hidden_proto (__libc_scratch_buffer_set_array_size) + +/* Alias for __libc_scratch_set_array_size. */ +static __always_inline bool +scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size) +{ + return __glibc_likely (__libc_scratch_buffer_set_array_size + (buffer, nelem, size)); +} + +#endif /* _SCRATCH_BUFFER_H */ diff --git a/include/libgnulib/malloca.h b/include/libgnulib/malloca.h new file mode 100755 index 0000000..c520842 --- /dev/null +++ b/include/libgnulib/malloca.h @@ -0,0 +1,147 @@ +/* Safe automatic memory allocation. + Copyright (C) 2003-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _MALLOCA_H +#define _MALLOCA_H + +/* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_DEALLOC, + _GL_ATTRIBUTE_MALLOC, HAVE_ALLOCA. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include +#include +#if defined __CHERI_PURE_CAPABILITY__ +# include +#endif + +#include "xalloc-oversized.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call + alloca(N); otherwise it returns NULL. It either returns N bytes of + memory allocated on the stack, that lasts until the function returns, + or NULL. + Use of safe_alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns. +*/ +#if HAVE_ALLOCA +/* The OS usually guarantees only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + allocate anything larger than 4096 bytes. Also care for the possibility + of a few compiler-allocated temporary stack slots. + This must be a macro, not a function. */ +# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) +#else +# define safe_alloca(N) ((void) (N), NULL) +#endif + +/* Free a block of memory allocated through malloca(). */ +#if HAVE_ALLOCA +extern void freea (void *p); +#else +# define freea free +#endif + +/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of + memory allocated on the stack, that must be freed using freea() before + the function returns. Upon failure, it returns NULL. */ +#if HAVE_ALLOCA +# if defined __CHERI_PURE_CAPABILITY__ +# define malloca(N) \ + ((N) < 4032 - (2 * sa_alignment_max - 1) \ + ? cheri_bounds_set ((void *) (((uintptr_t) \ + (char *) \ + alloca ((N) + 2 * sa_alignment_max - 1) \ + + (2 * sa_alignment_max - 1)) \ + & ~(uintptr_t)(2 * sa_alignment_max - 1)), \ + (N)) \ + : mmalloca (N)) +# else +# define malloca(N) \ + ((N) < 4032 - (2 * sa_alignment_max - 1) \ + ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + + (2 * sa_alignment_max - 1)) \ + & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ + : mmalloca (N)) +# endif +#else +# define malloca(N) \ + mmalloca (N) +#endif +extern void *mmalloca (size_t n) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1) + _GL_ATTRIBUTE_ALLOC_SIZE ((1)); + +/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). + It allocates an array of N objects, each with S bytes of memory, + on the stack. N and S should be nonnegative and free of side effects. + The array must be freed using freea() before the function returns. */ +#define nmalloca(n, s) \ + (xalloc_oversized (n, s) ? NULL : malloca ((n) * (size_t) (s))) + + +#ifdef __cplusplus +} +#endif + + +/* ------------------- Auxiliary, non-public definitions ------------------- */ + +/* Determine the alignment of a type at compile time. */ +#if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ +# define sa_alignof __alignof__ +#elif defined __cplusplus + template struct sa_alignof_helper { char __slot1; type __slot2; }; +# define sa_alignof(type) offsetof (sa_alignof_helper, __slot2) +#elif defined __hpux + /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#elif defined _AIX + /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#else +# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) +#endif + +enum +{ +/* The desired alignment of memory allocations is the maximum alignment + among all elementary types. */ + sa_alignment_long = sa_alignof (long), + sa_alignment_double = sa_alignof (double), + sa_alignment_longlong = sa_alignof (long long), + sa_alignment_longdouble = sa_alignof (long double), + sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) + | (sa_alignment_longlong - 1) + | (sa_alignment_longdouble - 1) + ) + 1 +}; + +#endif /* _MALLOCA_H */ diff --git a/include/libgnulib/mbchar.h b/include/libgnulib/mbchar.h new file mode 100755 index 0000000..5a1529d --- /dev/null +++ b/include/libgnulib/mbchar.h @@ -0,0 +1,383 @@ +/* Multibyte character data type. + Copyright (C) 2001, 2005-2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +/* A multibyte character is a short subsequence of a char* string, + representing a single 32-bit wide character. + + We use multibyte characters instead of 32-bit wide characters because + of the following goals: + 1) correct multibyte handling, i.e. operate according to the LC_CTYPE + locale, + 2) ease of maintenance, i.e. the maintainer needs not know all details + of the ISO C 99 standard, + 3) don't fail grossly if the input is not in the encoding set by the + locale, because often different encodings are in use in the same + countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...), + 4) fast in the case of ASCII characters. + + Multibyte characters are only accessed through the mb* macros. + + mb_ptr (mbc) + return a pointer to the beginning of the multibyte sequence. + + mb_len (mbc) + returns the number of bytes occupied by the multibyte sequence. + Always > 0. + + mb_iseq (mbc, sc) + returns true if mbc is the standard ASCII character sc. + + mb_isnul (mbc) + returns true if mbc is the nul character. + + mb_cmp (mbc1, mbc2) + returns a positive, zero, or negative value depending on whether mbc1 + sorts after, same or before mbc2. + + mb_casecmp (mbc1, mbc2) + returns a positive, zero, or negative value depending on whether mbc1 + sorts after, same or before mbc2, modulo upper/lowercase conversion. + + mb_equal (mbc1, mbc2) + returns true if mbc1 and mbc2 are equal. + + mb_caseequal (mbc1, mbc2) + returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion. + + mb_isalnum (mbc) + returns true if mbc is alphanumeric. + + mb_isalpha (mbc) + returns true if mbc is alphabetic. + + mb_isascii(mbc) + returns true if mbc is plain ASCII. + + mb_isblank (mbc) + returns true if mbc is a blank. + + mb_iscntrl (mbc) + returns true if mbc is a control character. + + mb_isdigit (mbc) + returns true if mbc is a decimal digit. + + mb_isgraph (mbc) + returns true if mbc is a graphic character. + + mb_islower (mbc) + returns true if mbc is lowercase. + + mb_isprint (mbc) + returns true if mbc is a printable character. + + mb_ispunct (mbc) + returns true if mbc is a punctuation character. + + mb_isspace (mbc) + returns true if mbc is a space character. + + mb_isupper (mbc) + returns true if mbc is uppercase. + + mb_isxdigit (mbc) + returns true if mbc is a hexadecimal digit. + + mb_width (mbc) + returns the number of columns on the output device occupied by mbc. + Always >= 0. + + mb_putc (mbc, stream) + outputs mbc on stream, a byte oriented FILE stream opened for output. + + mb_setascii (&mbc, sc) + assigns the standard ASCII character sc to mbc. + (Only available if the 'mbfile' module is in use.) + + mb_copy (&destmbc, &srcmbc) + copies srcmbc to destmbc. + + Here are the function prototypes of the macros. + + extern const char * mb_ptr (const mbchar_t mbc); + extern size_t mb_len (const mbchar_t mbc); + extern bool mb_iseq (const mbchar_t mbc, char sc); + extern bool mb_isnul (const mbchar_t mbc); + extern int mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2); + extern int mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2); + extern bool mb_equal (const mbchar_t mbc1, const mbchar_t mbc2); + extern bool mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2); + extern bool mb_isalnum (const mbchar_t mbc); + extern bool mb_isalpha (const mbchar_t mbc); + extern bool mb_isascii (const mbchar_t mbc); + extern bool mb_isblank (const mbchar_t mbc); + extern bool mb_iscntrl (const mbchar_t mbc); + extern bool mb_isdigit (const mbchar_t mbc); + extern bool mb_isgraph (const mbchar_t mbc); + extern bool mb_islower (const mbchar_t mbc); + extern bool mb_isprint (const mbchar_t mbc); + extern bool mb_ispunct (const mbchar_t mbc); + extern bool mb_isspace (const mbchar_t mbc); + extern bool mb_isupper (const mbchar_t mbc); + extern bool mb_isxdigit (const mbchar_t mbc); + extern int mb_width (const mbchar_t mbc); + extern void mb_putc (const mbchar_t mbc, FILE *stream); + extern void mb_setascii (mbchar_t *new, char sc); + extern void mb_copy (mbchar_t *new, const mbchar_t *old); + */ + +#ifndef _MBCHAR_H +#define _MBCHAR_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef MBCHAR_INLINE +# define MBCHAR_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The longest multibyte characters, nowadays, are 4 bytes long. + Regardless of the values of MB_CUR_MAX and MB_LEN_MAX. */ +#define MBCHAR_BUF_SIZE 4 + +struct mbchar +{ + const char *ptr; /* pointer to current character */ + size_t bytes; /* number of bytes of current character, > 0 */ + bool wc_valid; /* true if wc is a valid 32-bit wide character */ + char32_t wc; /* if wc_valid: the current character */ +#if defined GNULIB_MBFILE + char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */ +#endif +}; + +/* EOF (not a real character) is represented with bytes = 0 and + wc_valid = false. */ + +typedef struct mbchar mbchar_t; + +/* Access the current character. */ +#define mb_ptr(mbc) ((mbc).ptr) +#define mb_len(mbc) ((mbc).bytes) + +/* Comparison of characters. */ +#define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc)) +#define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0) +#define mb_cmp(mbc1, mbc2) \ + ((mbc1).wc_valid \ + ? ((mbc2).wc_valid \ + ? _GL_CMP ((mbc1).wc, (mbc2).wc) \ + : -1) \ + : ((mbc2).wc_valid \ + ? 1 \ + : (mbc1).bytes == (mbc2).bytes \ + ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ + : (mbc1).bytes < (mbc2).bytes \ + ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ + : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) +#define mb_casecmp(mbc1, mbc2) \ + ((mbc1).wc_valid \ + ? ((mbc2).wc_valid \ + ? _GL_CMP (c32tolower ((mbc1).wc), c32tolower ((mbc2).wc)) \ + : -1) \ + : ((mbc2).wc_valid \ + ? 1 \ + : (mbc1).bytes == (mbc2).bytes \ + ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ + : (mbc1).bytes < (mbc2).bytes \ + ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ + : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) +#define mb_equal(mbc1, mbc2) \ + ((mbc1).wc_valid && (mbc2).wc_valid \ + ? (mbc1).wc == (mbc2).wc \ + : (mbc1).bytes == (mbc2).bytes \ + && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) +#define mb_caseequal(mbc1, mbc2) \ + ((mbc1).wc_valid && (mbc2).wc_valid \ + ? c32tolower ((mbc1).wc) == c32tolower ((mbc2).wc) \ + : (mbc1).bytes == (mbc2).bytes \ + && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) + +/* , classification. */ +#define mb_isascii(mbc) \ + ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127) +#define mb_isalnum(mbc) ((mbc).wc_valid && c32isalnum ((mbc).wc)) +#define mb_isalpha(mbc) ((mbc).wc_valid && c32isalpha ((mbc).wc)) +#define mb_isblank(mbc) ((mbc).wc_valid && c32isblank ((mbc).wc)) +#define mb_iscntrl(mbc) ((mbc).wc_valid && c32iscntrl ((mbc).wc)) +#define mb_isdigit(mbc) ((mbc).wc_valid && c32isdigit ((mbc).wc)) +#define mb_isgraph(mbc) ((mbc).wc_valid && c32isgraph ((mbc).wc)) +#define mb_islower(mbc) ((mbc).wc_valid && c32islower ((mbc).wc)) +#define mb_isprint(mbc) ((mbc).wc_valid && c32isprint ((mbc).wc)) +#define mb_ispunct(mbc) ((mbc).wc_valid && c32ispunct ((mbc).wc)) +#define mb_isspace(mbc) ((mbc).wc_valid && c32isspace ((mbc).wc)) +#define mb_isupper(mbc) ((mbc).wc_valid && c32isupper ((mbc).wc)) +#define mb_isxdigit(mbc) ((mbc).wc_valid && c32isxdigit ((mbc).wc)) + +/* Extra function. */ + +/* Unprintable characters appear as a small box of width 1. */ +#define MB_UNPRINTABLE_WIDTH 1 + +MBCHAR_INLINE int +mb_width_aux (char32_t wc) +{ + int w = c32width (wc); + /* For unprintable characters, arbitrarily return 0 for control characters + and MB_UNPRINTABLE_WIDTH otherwise. */ + return (w >= 0 ? w : c32iscntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH); +} + +#define mb_width(mbc) \ + ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH) + +/* Output. */ +#define mb_putc(mbc, stream) fwrite ((mbc).ptr, 1, (mbc).bytes, (stream)) + +#if defined GNULIB_MBFILE +/* Assignment. */ +# define mb_setascii(mbc, sc) \ + ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \ + (mbc)->wc = (mbc)->buf[0] = (sc)) +#endif + +/* Copying a character. */ +MBCHAR_INLINE void +mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc) +{ +#if defined GNULIB_MBFILE + if (old_mbc->ptr == &old_mbc->buf[0]) + { + memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes); + new_mbc->ptr = &new_mbc->buf[0]; + } + else +#endif + new_mbc->ptr = old_mbc->ptr; + new_mbc->bytes = old_mbc->bytes; + if ((new_mbc->wc_valid = old_mbc->wc_valid)) + new_mbc->wc = old_mbc->wc; +} + + +/* is_basic(c) tests whether the single-byte character c is + - in the ISO C "basic character set" or is one of '@', '$', and '`' + which ISO C 23 § 5.2.1.1.(1) guarantees to be single-byte and in + practice are safe to treat as basic in the execution character set, + or + - in the POSIX "portable character set", which + + equally guarantees to be single-byte. + This is a convenience function, and is in this file only to share code + between mbiter.h, mbuiter.h, and mbfile.h. */ +#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('$' == 36) && ('%' == 37) && ('&' == 38) && ('\'' == 39) \ + && ('(' == 40) && (')' == 41) && ('*' == 42) && ('+' == 43) \ + && (',' == 44) && ('-' == 45) && ('.' == 46) && ('/' == 47) \ + && ('0' == 48) && ('1' == 49) && ('2' == 50) && ('3' == 51) \ + && ('4' == 52) && ('5' == 53) && ('6' == 54) && ('7' == 55) \ + && ('8' == 56) && ('9' == 57) && (':' == 58) && (';' == 59) \ + && ('<' == 60) && ('=' == 61) && ('>' == 62) && ('?' == 63) \ + && ('@' == 64) && ('A' == 65) && ('B' == 66) && ('C' == 67) \ + && ('D' == 68) && ('E' == 69) && ('F' == 70) && ('G' == 71) \ + && ('H' == 72) && ('I' == 73) && ('J' == 74) && ('K' == 75) \ + && ('L' == 76) && ('M' == 77) && ('N' == 78) && ('O' == 79) \ + && ('P' == 80) && ('Q' == 81) && ('R' == 82) && ('S' == 83) \ + && ('T' == 84) && ('U' == 85) && ('V' == 86) && ('W' == 87) \ + && ('X' == 88) && ('Y' == 89) && ('Z' == 90) && ('[' == 91) \ + && ('\\' == 92) && (']' == 93) && ('^' == 94) && ('_' == 95) \ + && ('`' == 96) && ('a' == 97) && ('b' == 98) && ('c' == 99) \ + && ('d' == 100) && ('e' == 101) && ('f' == 102) && ('g' == 103) \ + && ('h' == 104) && ('i' == 105) && ('j' == 106) && ('k' == 107) \ + && ('l' == 108) && ('m' == 109) && ('n' == 110) && ('o' == 111) \ + && ('p' == 112) && ('q' == 113) && ('r' == 114) && ('s' == 115) \ + && ('t' == 116) && ('u' == 117) && ('v' == 118) && ('w' == 119) \ + && ('x' == 120) && ('y' == 121) && ('z' == 122) && ('{' == 123) \ + && ('|' == 124) && ('}' == 125) && ('~' == 126) +/* The character set is ISO-646, not EBCDIC. */ +# define IS_BASIC_ASCII 1 + +/* All locale encodings (see localcharset.h) map the characters 0x00..0x7F + to U+0000..U+007F, like ASCII, except for + CP864 different mapping of '%' + SHIFT_JIS different mappings of 0x5C, 0x7E + JOHAB different mapping of 0x5C + However, these characters in the range 0x20..0x7E are in the ISO C + "basic character set" and in the POSIX "portable character set", which + ISO C and POSIX guarantee to be single-byte. Thus, locales with these + encodings are not POSIX compliant. And they are most likely not in use + any more (as of 2023). */ +# define is_basic(c) ((unsigned char) (c) < 0x80) + +#else + +MBCHAR_INLINE bool +is_basic (char c) +{ + switch (c) + { + case '\0': + case '\007': case '\010': + case '\t': case '\n': case '\v': case '\f': case '\r': + case ' ': case '!': case '"': case '#': case '$': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': case '@': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': case '`': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +} + +#endif + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _MBCHAR_H */ diff --git a/include/libgnulib/mbfile.h b/include/libgnulib/mbfile.h new file mode 100755 index 0000000..fe83eb6 --- /dev/null +++ b/include/libgnulib/mbfile.h @@ -0,0 +1,277 @@ +/* Multibyte character I/O: macros for multi-byte encodings. + Copyright (C) 2001, 2005, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Mitsuru Chinen + and Bruno Haible . */ + +/* The macros in this file implement multi-byte character input from a + stream. + + mb_file_t + is the type for multibyte character input stream, usable for variable + declarations. + + mbf_char_t + is the type for multibyte character or EOF, usable for variable + declarations. + + mbf_init (mbf, stream) + initializes the MB_FILE for reading from stream. + + mbf_getc (mbc, mbf) + reads the next multibyte character from mbf and stores it in mbc. + + mb_iseof (mbc) + returns true if mbc represents the EOF value. + + Here are the function prototypes of the macros. + + extern void mbf_init (mb_file_t mbf, FILE *stream); + extern void mbf_getc (mbf_char_t mbc, mb_file_t mbf); + extern bool mb_iseof (const mbf_char_t mbc); + */ + +#ifndef _MBFILE_H +#define _MBFILE_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include +#include + +#include "mbchar.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef MBFILE_INLINE +# define MBFILE_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +struct mbfile_multi { + FILE *fp; + bool eof_seen; + bool have_pushback; + mbstate_t state; + unsigned int bufcount; + char buf[MBCHAR_BUF_SIZE]; + struct mbchar pushback; +}; + +MBFILE_INLINE void +mbfile_multi_getc (struct mbchar *mbc, struct mbfile_multi *mbf) +{ + unsigned int new_bufcount; + size_t bytes; + + /* If EOF has already been seen, don't use getc. This matters if + mbf->fp is connected to an interactive tty. */ + if (mbf->eof_seen) + goto eof; + + /* Return character pushed back, if there is one. */ + if (mbf->have_pushback) + { + mb_copy (mbc, &mbf->pushback); + mbf->have_pushback = false; + return; + } + + new_bufcount = mbf->bufcount; + + /* If mbf->state is not in an initial state, some more 32-bit wide character + may be hiding in the state. We need to call mbrtoc32 again. */ + #if GNULIB_MBRTOC32_REGULAR + assert (mbsinit (&mbf->state)); + #else + if (mbsinit (&mbf->state)) + #endif + { + /* Before using mbrtoc32, we need at least one byte. */ + if (new_bufcount == 0) + { + int c = getc (mbf->fp); + if (c == EOF) + { + mbf->eof_seen = true; + goto eof; + } + mbf->buf[0] = (unsigned char) c; + new_bufcount++; + } + + /* Handle most ASCII characters quickly, without calling mbrtoc32(). */ + if (new_bufcount == 1 && is_basic (mbf->buf[0])) + { + /* These characters are part of the POSIX portable character set. + For most of them, namely those in the ISO C basic character set, + ISO C 99 guarantees that their wide character code is identical to + their char code. For the few other ones, this is the case as well, + in all locale encodings that are in use. The 32-bit wide character + code is the same as well. */ + mbc->wc = mbc->buf[0] = mbf->buf[0]; + mbc->wc_valid = true; + mbc->ptr = &mbc->buf[0]; + mbc->bytes = 1; + mbf->bufcount = 0; + return; + } + } + + /* Use mbrtoc32 on an increasing number of bytes. Read only as many bytes + from mbf->fp as needed. This is needed to give reasonable interactive + behaviour when mbf->fp is connected to an interactive tty. */ + for (;;) + { + /* Feed the bytes one by one into mbrtoc32. */ + bytes = mbrtoc32 (&mbc->wc, &mbf->buf[mbf->bufcount], new_bufcount - mbf->bufcount, &mbf->state); + + if (bytes == (size_t) -1) + { + /* An invalid multibyte sequence was encountered. */ + mbf->bufcount = new_bufcount; + /* Return a single byte. */ + bytes = 1; + mbc->wc_valid = false; + /* Allow the next invocation to continue from a sane state. */ + mbszero (&mbf->state); + break; + } + else if (bytes == (size_t) -2) + { + /* An incomplete multibyte character. */ + mbf->bufcount = new_bufcount; + if (mbf->bufcount == MBCHAR_BUF_SIZE) + { + /* An overlong incomplete multibyte sequence was encountered. */ + /* Return a single byte. */ + bytes = 1; + mbc->wc_valid = false; + break; + } + else + { + /* Read one more byte and retry mbrtoc32. */ + int c = getc (mbf->fp); + if (c == EOF) + { + /* An incomplete multibyte character at the end. */ + mbf->eof_seen = true; + bytes = new_bufcount; + mbc->wc_valid = false; + break; + } + mbf->buf[new_bufcount] = (unsigned char) c; + new_bufcount++; + } + } + else + { + #if !GNULIB_MBRTOC32_REGULAR + if (bytes == (size_t) -3) + { + /* The previous multibyte sequence produced an additional 32-bit + wide character. */ + mbf->bufcount = new_bufcount; + bytes = 0; + } + else + #endif + { + bytes = mbf->bufcount + bytes; + mbf->bufcount = new_bufcount; + if (bytes == 0) + { + /* A null 32-bit wide character was encountered. */ + bytes = 1; + assert (mbf->buf[0] == '\0'); + assert (mbc->wc == 0); + } + } + mbc->wc_valid = true; + break; + } + } + + /* Return the multibyte sequence mbf->buf[0..bytes-1]. */ + mbc->ptr = &mbc->buf[0]; + memcpy (&mbc->buf[0], &mbf->buf[0], bytes); + mbc->bytes = bytes; + + mbf->bufcount -= bytes; + if (mbf->bufcount > 0) + { + /* It's not worth calling memmove() for so few bytes. */ + unsigned int count = mbf->bufcount; + char *p = &mbf->buf[0]; + + do + { + *p = *(p + bytes); + p++; + } + while (--count > 0); + } + return; + +eof: + /* An mbchar_t with bytes == 0 is used to indicate EOF. */ + mbc->ptr = NULL; + mbc->bytes = 0; + mbc->wc_valid = false; + return; +} + +MBFILE_INLINE void +mbfile_multi_ungetc (const struct mbchar *mbc, struct mbfile_multi *mbf) +{ + mb_copy (&mbf->pushback, mbc); + mbf->have_pushback = true; +} + +typedef struct mbfile_multi mb_file_t; + +typedef mbchar_t mbf_char_t; + +#define mbf_init(mbf, stream) \ + ((mbf).fp = (stream), \ + (mbf).eof_seen = false, \ + (mbf).have_pushback = false, \ + mbszero (&(mbf).state), \ + (mbf).bufcount = 0) + +#define mbf_getc(mbc, mbf) mbfile_multi_getc (&(mbc), &(mbf)) + +#define mbf_ungetc(mbc, mbf) mbfile_multi_ungetc (&(mbc), &(mbf)) + +#define mb_iseof(mbc) ((mbc).bytes == 0) + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _MBFILE_H */ diff --git a/include/libgnulib/mbiter.h b/include/libgnulib/mbiter.h new file mode 100755 index 0000000..bee76d2 --- /dev/null +++ b/include/libgnulib/mbiter.h @@ -0,0 +1,278 @@ +/* Iterating through multibyte strings: macros for multi-byte encodings. + Copyright (C) 2001, 2005, 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +/* The macros in this file implement forward iteration through a + multi-byte string. + + With these macros, an iteration loop that looks like + + char *iter; + for (iter = buf; iter < buf + buflen; iter++) + { + do_something (*iter); + } + + becomes + + mbi_iterator_t iter; + for (mbi_init (iter, buf, buflen); mbi_avail (iter); mbi_advance (iter)) + { + do_something (mbi_cur_ptr (iter), mb_len (mbi_cur (iter))); + } + + The benefit of these macros over plain use of mbrtowc is: + - Handling of invalid multibyte sequences is possible without + making the code more complicated, while still preserving the + invalid multibyte sequences. + + mbi_iterator_t + is a type usable for variable declarations. + + mbi_init (iter, startptr, length) + initializes the iterator, starting at startptr and crossing length bytes. + + mbi_avail (iter) + returns true if there are more multibyte characters available before + the end of string is reached. In this case, mbi_cur (iter) is + initialized to the next multibyte character. + + mbi_advance (iter) + advances the iterator by one multibyte character. + + mbi_cur (iter) + returns the current multibyte character, of type mbchar_t. All the + macros defined in mbchar.h can be used on it. + + mbi_cur_ptr (iter) + return a pointer to the beginning of the current multibyte character. + + mbi_reloc (iter, ptrdiff) + relocates iterator when the string is moved by ptrdiff bytes. + + mbi_copy (&destiter, &srciter) + copies srciter to destiter. + + Here are the function prototypes of the macros. + + extern void mbi_init (mbi_iterator_t iter, + const char *startptr, size_t length); + extern bool mbi_avail (mbi_iterator_t iter); + extern void mbi_advance (mbi_iterator_t iter); + extern mbchar_t mbi_cur (mbi_iterator_t iter); + extern const char * mbi_cur_ptr (mbi_iterator_t iter); + extern void mbi_reloc (mbi_iterator_t iter, ptrdiff_t ptrdiff); + extern void mbi_copy (mbi_iterator_t *new, const mbi_iterator_t *old); + */ + +#ifndef _MBITER_H +#define _MBITER_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_ALWAYS_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include +#include +#include + +#include "mbchar.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef MBITER_INLINE +# define MBITER_INLINE _GL_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +struct mbiter_multi +{ + const char *limit; /* pointer to end of string */ + #if !GNULIB_MBRTOC32_REGULAR + bool in_shift; /* true if next byte may not be interpreted as ASCII */ + /* If GNULIB_MBRTOC32_REGULAR, it is always false, + so optimize it away. */ + #endif + mbstate_t state; /* if in_shift: current shift state */ + /* If GNULIB_MBRTOC32_REGULAR, it is in an initial state + before and after every mbiter_multi_next invocation. + */ + bool next_done; /* true if mbi_avail has already filled the following */ + struct mbchar cur; /* the current character: + const char *cur.ptr pointer to current character + The following are only valid after mbi_avail. + size_t cur.bytes number of bytes of current character + bool cur.wc_valid true if wc is a valid 32-bit wide character + char32_t cur.wc if wc_valid: the current character + */ +}; + +MBITER_INLINE void +mbiter_multi_next (struct mbiter_multi *iter) +{ + if (iter->next_done) + return; + #if !GNULIB_MBRTOC32_REGULAR + if (iter->in_shift) + goto with_shift; + #endif + /* Handle most ASCII characters quickly, without calling mbrtowc(). */ + if (is_basic (*iter->cur.ptr)) + { + /* These characters are part of the POSIX portable character set. + For most of them, namely those in the ISO C basic character set, + ISO C 99 guarantees that their wide character code is identical to + their char code. For the few other ones, this is the case as well, + in all locale encodings that are in use. The 32-bit wide character + code is the same as well. */ + iter->cur.bytes = 1; + iter->cur.wc = *iter->cur.ptr; + iter->cur.wc_valid = true; + } + else + { + assert (mbsinit (&iter->state)); + #if !GNULIB_MBRTOC32_REGULAR + iter->in_shift = true; + with_shift: + #endif + iter->cur.bytes = mbrtoc32 (&iter->cur.wc, iter->cur.ptr, + iter->limit - iter->cur.ptr, &iter->state); + if (iter->cur.bytes == (size_t) -1) + { + /* An invalid multibyte sequence was encountered. */ + iter->cur.bytes = 1; + iter->cur.wc_valid = false; + /* Allow the next invocation to continue from a sane state. */ + #if !GNULIB_MBRTOC32_REGULAR + iter->in_shift = false; + #endif + mbszero (&iter->state); + } + else if (iter->cur.bytes == (size_t) -2) + { + /* An incomplete multibyte character at the end. */ + iter->cur.bytes = iter->limit - iter->cur.ptr; + iter->cur.wc_valid = false; + #if !GNULIB_MBRTOC32_REGULAR + /* Cause the next mbi_avail invocation to return false. */ + iter->in_shift = false; + #endif + /* Whether to reset iter->state or not is not important; the + string end is reached anyway. */ + } + else + { + if (iter->cur.bytes == 0) + { + /* A null wide character was encountered. */ + iter->cur.bytes = 1; + assert (*iter->cur.ptr == '\0'); + assert (iter->cur.wc == 0); + } + #if !GNULIB_MBRTOC32_REGULAR + else if (iter->cur.bytes == (size_t) -3) + /* The previous multibyte sequence produced an additional 32-bit + wide character. */ + iter->cur.bytes = 0; + #endif + iter->cur.wc_valid = true; + + /* When in an initial state, we can go back treating ASCII + characters more quickly. */ + #if !GNULIB_MBRTOC32_REGULAR + if (mbsinit (&iter->state)) + iter->in_shift = false; + #endif + } + } + iter->next_done = true; +} + +MBITER_INLINE void +mbiter_multi_reloc (struct mbiter_multi *iter, ptrdiff_t ptrdiff) +{ + iter->cur.ptr += ptrdiff; + iter->limit += ptrdiff; +} + +MBITER_INLINE void +mbiter_multi_copy (struct mbiter_multi *new_iter, const struct mbiter_multi *old_iter) +{ + new_iter->limit = old_iter->limit; + #if !GNULIB_MBRTOC32_REGULAR + if ((new_iter->in_shift = old_iter->in_shift)) + memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t)); + else + #endif + mbszero (&new_iter->state); + new_iter->next_done = old_iter->next_done; + mb_copy (&new_iter->cur, &old_iter->cur); +} + +/* Iteration macros. */ +typedef struct mbiter_multi mbi_iterator_t; +#if !GNULIB_MBRTOC32_REGULAR +#define mbi_init(iter, startptr, length) \ + ((iter).cur.ptr = (startptr), (iter).limit = (iter).cur.ptr + (length), \ + (iter).in_shift = false, mbszero (&(iter).state), \ + (iter).next_done = false) +#else +/* Optimized: no in_shift. */ +#define mbi_init(iter, startptr, length) \ + ((iter).cur.ptr = (startptr), (iter).limit = (iter).cur.ptr + (length), \ + mbszero (&(iter).state), \ + (iter).next_done = false) +#endif +#if !GNULIB_MBRTOC32_REGULAR +#define mbi_avail(iter) \ + (((iter).cur.ptr < (iter).limit || (iter).in_shift) \ + && (mbiter_multi_next (&(iter)), true)) +#else +/* Optimized: no in_shift. */ +#define mbi_avail(iter) \ + ((iter).cur.ptr < (iter).limit \ + && (mbiter_multi_next (&(iter)), true)) +#endif +#define mbi_advance(iter) \ + ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false) + +/* Access to the current character. */ +#define mbi_cur(iter) (iter).cur +#define mbi_cur_ptr(iter) (iter).cur.ptr + +/* Relocation. */ +#define mbi_reloc(iter, ptrdiff) mbiter_multi_reloc (&iter, ptrdiff) + +/* Copying an iterator. */ +#define mbi_copy mbiter_multi_copy + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _MBITER_H */ diff --git a/include/libgnulib/mbiterf.h b/include/libgnulib/mbiterf.h new file mode 100755 index 0000000..c57815c --- /dev/null +++ b/include/libgnulib/mbiterf.h @@ -0,0 +1,214 @@ +/* Iterating through multibyte strings, faster: macros for multi-byte encodings. + Copyright (C) 2001, 2005, 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , + with insights from Paul Eggert. */ + +/* The macros in this file implement forward iteration through a + multi-byte string. + + With these macros, an iteration loop that looks like + + char *iter; + for (iter = buf; iter < buf + buflen; iter++) + { + do_something (*iter); + } + + becomes + + const char *buf_end = buf + buflen; + mbif_state_t state; + [const] char *iter; + for (mbif_init (state), iter = buf; mbif_avail (state, iter, buf_end); ) + { + mbchar_t cur = mbif_next (state, iter, buf_end); + // Note: Here always mb_ptr (cur) == iter. + do_something (iter, mb_len (cur)); + iter += mb_len (cur); + } + + The benefit of these macros over plain use of mbrtowc or mbrtoc32 is: + - Handling of invalid multibyte sequences is possible without + making the code more complicated, while still preserving the + invalid multibyte sequences. + + The benefit of these macros over those from mbiter.h is that it + produces faster code with today's optimizing compilers (because mbif_next + returns its result by value). + + mbif_state_t + is a type usable for variable declarations. + + mbif_init (state) + initializes the state. + + mbif_avail (state, iter, endptr) + returns true if another loop round is needed. + + mbif_next (state, iter, endptr) + returns the next multibyte character. + It asssumes that the state is initialized and that iter < endptr. + + Here are the function prototypes of the macros. + + extern void mbif_init (mbif_state_t state); + extern bool mbif_avail (mbif_state_t state, const char *iter, const char *endptr); + extern mbchar_t mbif_next (mbif_state_t state, const char *iter, const char *endptr); + */ + +#ifndef _MBITERF_H +#define _MBITERF_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_ALWAYS_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include +#include +#include + +#include "mbchar.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef MBITERF_INLINE +# define MBITERF_INLINE _GL_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +struct mbif_state +{ + #if !GNULIB_MBRTOC32_REGULAR + bool in_shift; /* true if next byte may not be interpreted as ASCII */ + /* If GNULIB_MBRTOC32_REGULAR, it is always false, + so optimize it away. */ + #endif + mbstate_t state; /* if in_shift: current shift state */ + /* If GNULIB_MBRTOC32_REGULAR, it is in an initial state + before and after every mbiterf_next invocation. + */ +}; + +MBITERF_INLINE mbchar_t +mbiterf_next (struct mbif_state *ps, const char *iter, const char *endptr) +{ + #if !GNULIB_MBRTOC32_REGULAR + if (ps->in_shift) + goto with_shift; + #endif + /* Handle most ASCII characters quickly, without calling mbrtowc(). */ + if (is_basic (*iter)) + { + /* These characters are part of the POSIX portable character set. + For most of them, namely those in the ISO C basic character set, + ISO C 99 guarantees that their wide character code is identical to + their char code. For the few other ones, this is the case as well, + in all locale encodings that are in use. The 32-bit wide character + code is the same as well. */ + return (mbchar_t) { .ptr = iter, .bytes = 1, .wc_valid = true, .wc = *iter }; + } + else + { + assert (mbsinit (&ps->state)); + #if !GNULIB_MBRTOC32_REGULAR + ps->in_shift = true; + with_shift:; + #endif + size_t bytes; + char32_t wc; + bytes = mbrtoc32 (&wc, iter, endptr - iter, &ps->state); + if (bytes == (size_t) -1) + { + /* An invalid multibyte sequence was encountered. */ + /* Allow the next invocation to continue from a sane state. */ + #if !GNULIB_MBRTOC32_REGULAR + ps->in_shift = false; + #endif + mbszero (&ps->state); + return (mbchar_t) { .ptr = iter, .bytes = 1, .wc_valid = false }; + } + else if (bytes == (size_t) -2) + { + /* An incomplete multibyte character at the end. */ + #if !GNULIB_MBRTOC32_REGULAR + ps->in_shift = false; + #endif + /* Whether to reset ps->state or not is not important; the string end + is reached anyway. */ + return (mbchar_t) { .ptr = iter, .bytes = endptr - iter, .wc_valid = false }; + } + else + { + if (bytes == 0) + { + /* A null wide character was encountered. */ + bytes = 1; + assert (*iter == '\0'); + assert (wc == 0); + } + #if !GNULIB_MBRTOC32_REGULAR + else if (bytes == (size_t) -3) + /* The previous multibyte sequence produced an additional 32-bit + wide character. */ + bytes = 0; + #endif + + /* When in an initial state, we can go back treating ASCII + characters more quickly. */ + #if !GNULIB_MBRTOC32_REGULAR + if (mbsinit (&ps->state)) + ps->in_shift = false; + #endif + return (mbchar_t) { .ptr = iter, .bytes = bytes, .wc_valid = true, .wc = wc }; + } + } +} + +/* Iteration macros. */ +typedef struct mbif_state mbif_state_t; +#if !GNULIB_MBRTOC32_REGULAR +#define mbif_init(st) \ + ((st).in_shift = false, mbszero (&(st).state)) +#else +/* Optimized: no in_shift. */ +#define mbif_init(st) \ + (mbszero (&(st).state)) +#endif +#if !GNULIB_MBRTOC32_REGULAR +#define mbif_avail(st, iter, endptr) ((st).in_shift || ((iter) < (endptr))) +#else +/* Optimized: no in_shift. */ +#define mbif_avail(st, iter, endptr) ((iter) < (endptr)) +#endif +#define mbif_next(st, iter, endptr) \ + mbiterf_next (&(st), (iter), (endptr)) + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _MBITERF_H */ diff --git a/include/libgnulib/mbmemcasecmp.h b/include/libgnulib/mbmemcasecmp.h new file mode 100755 index 0000000..647eb40 --- /dev/null +++ b/include/libgnulib/mbmemcasecmp.h @@ -0,0 +1,45 @@ +/* Compare two memory areas with possibly different lengths, case-insensitive. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef MBMEMCASECMP_H +#define MBMEMCASECMP_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compare the memory regions S1 = [s1..s1+N1-1], S2 = [s2..s2+n2-1], that + contain character sequences, lexicographically, ignoring case. + This function's result is locale dependent. Unlike memcasecmp(), it works + correctly in multibyte locales and also handles Turkish i / dotless i. + Unlike ulc_casecmp(), it does not handle the German sharp s and the Greek + final sigma. Unlike memcoll() and ulc_casecoll(), it ignores collation + order. + Return a negative number if S1 < S2, a positive number if S1 > S2, or + 0 if S1 and S2 have the same contents. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! */ +extern int mbmemcasecmp (const char *s1, size_t n1, const char *s2, size_t n2); + + +#ifdef __cplusplus +} +#endif + +#endif /* MBMEMCASECMP_H */ diff --git a/include/libgnulib/mbmemcasecoll.h b/include/libgnulib/mbmemcasecoll.h new file mode 100755 index 0000000..2b6a250 --- /dev/null +++ b/include/libgnulib/mbmemcasecoll.h @@ -0,0 +1,57 @@ +/* Locale-specific case-ignoring memory comparison. + Copyright (C) 2001, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2001. */ + +#ifndef MBMEMCASECOLL_H +#define MBMEMCASECOLL_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compare the memory regions S1 = [s1..s1+s1len-1], S2 = [s2..s2+s2len-1], + that contain character sequences, using the rules of the current locale, + ignoring case. + HARD_LC_COLLATE is false if the LC_COLLATE category of the current locale + is equivalent to the "C" locale. + + This function's result is locale dependent. Unlike memcasecmp(), it works + correctly in multibyte locales and also handles Turkish i / dotless i. + Unlike ulc_casecmp(), it does not handle the German sharp s and the Greek + final sigma. Like memcoll() and ulc_casecoll(), it uses collation order. + + Return a negative number if S1 < S2, a positive number if S1 > S2, 0 if + S1 and S2 have the same contents, or an unspecified value if there is an + error. + Set errno to an error number if there is an error, and to zero otherwise. + + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! */ + +extern int mbmemcasecoll (const char *s1, size_t s1len, + const char *s2, size_t s2len, + bool hard_LC_COLLATE); + + +#ifdef __cplusplus +} +#endif + +#endif /* MBMEMCASECOLL_H */ diff --git a/include/libgnulib/mbrtowc-impl-utf8.h b/include/libgnulib/mbrtowc-impl-utf8.h new file mode 100755 index 0000000..3a3ba13 --- /dev/null +++ b/include/libgnulib/mbrtowc-impl-utf8.h @@ -0,0 +1,138 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +/* This file contains the part of the body of the mbrtowc and mbrtoc32 functions + that handles the special case of the UTF-8 encoding. */ + + /* Cf. unistr/u8-mbtouc.c. */ + unsigned char c = (unsigned char) p[0]; + + if (c < 0x80) + { + if (pwc != NULL) + *pwc = c; + res = (c == 0 ? 0 : 1); + goto success; + } + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (m == 1) + goto incomplete; + else /* m >= 2 */ + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40) + { + if (pwc != NULL) + *pwc = ((unsigned int) (c & 0x1f) << 6) + | (unsigned int) (c2 ^ 0x80); + res = 2; + goto success; + } + } + } + else if (c < 0xf0) + { + if (m == 1) + goto incomplete; + else + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xe1 || c2 >= 0xa0) + && (c != 0xed || c2 < 0xa0)) + { + if (m == 2) + goto incomplete; + else /* m >= 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if ((c3 ^ 0x80) < 0x40) + { + unsigned int wc = + (((unsigned int) (c & 0x0f) << 12) + | ((unsigned int) (c2 ^ 0x80) << 6) + | (unsigned int) (c3 ^ 0x80)); + + if (FITS_IN_CHAR_TYPE (wc)) + { + if (pwc != NULL) + *pwc = wc; + res = 3; + goto success; + } + } + } + } + } + } + else if (c <= 0xf4) + { + if (m == 1) + goto incomplete; + else + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xf1 || c2 >= 0x90) + && (c < 0xf4 || (/* c == 0xf4 && */ c2 < 0x90))) + { + if (m == 2) + goto incomplete; + else + { + unsigned char c3 = (unsigned char) p[2]; + + if ((c3 ^ 0x80) < 0x40) + { + if (m == 3) + goto incomplete; + else /* m >= 4 */ + { + unsigned char c4 = (unsigned char) p[3]; + + if ((c4 ^ 0x80) < 0x40) + { + unsigned int wc = + (((unsigned int) (c & 0x07) << 18) + | ((unsigned int) (c2 ^ 0x80) << 12) + | ((unsigned int) (c3 ^ 0x80) << 6) + | (unsigned int) (c4 ^ 0x80)); + + if (FITS_IN_CHAR_TYPE (wc)) + { + if (pwc != NULL) + *pwc = wc; + res = 4; + goto success; + } + } + } + } + } + } + } + } + } + goto invalid; diff --git a/include/libgnulib/mbrtowc-impl.h b/include/libgnulib/mbrtowc-impl.h new file mode 100755 index 0000000..963631c --- /dev/null +++ b/include/libgnulib/mbrtowc-impl.h @@ -0,0 +1,262 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +/* This file contains the body of the mbrtowc and mbrtoc32 functions, + when GNULIB_defined_mbstate_t is defined. */ + + char *pstate = (char *)ps; + + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } + + if (n == 0) + return (size_t)(-2); + + /* Here n > 0. */ + + if (pstate == NULL) + pstate = internal_state; + + { + size_t nstate = pstate[0]; + char buf[4]; + const char *p; + size_t m; + enc_t enc; + int res; + + switch (nstate) + { + case 0: + p = s; + m = n; + break; + case 3: + buf[2] = pstate[3]; + FALLTHROUGH; + case 2: + buf[1] = pstate[2]; + FALLTHROUGH; + case 1: + buf[0] = pstate[1]; + p = buf; + m = nstate; + buf[m++] = s[0]; + if (n >= 2 && m < 4) + { + buf[m++] = s[1]; + if (n >= 3 && m < 4) + buf[m++] = s[2]; + } + break; + default: + errno = EINVAL; + return (size_t)(-1); + } + + /* Here m > 0. */ + + enc = locale_encoding_classification (); + + if (enc == enc_utf8) /* UTF-8 */ + { + /* Achieve + - multi-thread safety and + - the ability to produce wide character values > WCHAR_MAX + by not calling mbtowc() at all. */ +#include "mbrtowc-impl-utf8.h" + } + else + { + /* The hidden internal state of mbtowc would make this function not + multi-thread safe. Achieve multi-thread safety through a lock. */ + wchar_t wc; + res = mbtowc_with_lock (&wc, p, m); + + if (res >= 0) + { + if ((wc == 0) != (res == 0)) + abort (); + if (pwc != NULL) + *pwc = wc; + goto success; + } + + /* mbtowc does not distinguish between invalid and incomplete multibyte + sequences. But mbrtowc needs to make this distinction. + There are two possible approaches: + - Use iconv() and its return value. + - Use built-in knowledge about the possible encodings. + Given the low quality of implementation of iconv() on the systems + that lack mbrtowc(), we use the second approach. + The possible encodings are: + - 8-bit encodings, + - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, + - UTF-8 (already handled above). + Use specialized code for each. */ + if (m >= 4 || m >= MB_CUR_MAX) + goto invalid; + /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ + switch (enc) + { + /* As a reference for this code, you can use the GNU libiconv + implementation. Look for uses of the RET_TOOFEW macro. */ + + case enc_eucjp: /* EUC-JP */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) + goto incomplete; + } + if (m == 2) + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8f) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0xa1 && c2 < 0xff) + goto incomplete; + } + } + goto invalid; + } + + case enc_94: /* EUC-KR, GB2312, BIG5 */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xa1 && c < 0xff) + goto incomplete; + } + goto invalid; + } + + case enc_euctw: /* EUC-TW */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8e) + goto incomplete; + } + goto invalid; + } + + case enc_gb18030: /* GB18030 */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0x90 && c <= 0xe3) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0x30 && c2 <= 0x39) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if (c3 >= 0x81 && c3 <= 0xfe) + goto incomplete; + } + } + } + } + goto invalid; + } + + case enc_sjis: /* SJIS */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) + || (c >= 0xf0 && c <= 0xf9)) + goto incomplete; + } + goto invalid; + } + + default: + /* An unknown multibyte encoding. */ + goto incomplete; + } + } + + success: + /* res >= 0 is the corrected return value of + mbtowc_with_lock (&wc, p, m). */ + if (nstate >= (res > 0 ? res : 1)) + abort (); + res -= nstate; + pstate[0] = 0; + return res; + + incomplete: + { + size_t k = nstate; + /* Here 0 <= k < m < 4. */ + pstate[++k] = s[0]; + if (k < m) + { + pstate[++k] = s[1]; + if (k < m) + pstate[++k] = s[2]; + } + if (k != m) + abort (); + } + pstate[0] = m; + return (size_t)(-2); + + invalid: + errno = EILSEQ; + /* The conversion state is undefined, says POSIX. */ + return (size_t)(-1); + } diff --git a/include/libgnulib/mbsnrtowcs-impl.h b/include/libgnulib/mbsnrtowcs-impl.h new file mode 100755 index 0000000..b3b5e2d --- /dev/null +++ b/include/libgnulib/mbsnrtowcs-impl.h @@ -0,0 +1,127 @@ +/* Convert string to wide string. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +FUNC (DCHAR_T *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) +{ + if (ps == NULL) + ps = &INTERNAL_STATE; + { + const char *src = *srcp; + + if (dest != NULL) + { + DCHAR_T *destptr = dest; + + for (; srclen > 0 && len > 0; destptr++, len--) + { + size_t src_avail; + size_t ret; + + /* An optimized variant of + src_avail = strnlen1 (src, MIN (srclen, MB_LEN_MAX)); */ + if (srclen == 1 || src[0] == '\0') + src_avail = 1; + else if (srclen == 2 || src[1] == '\0') + src_avail = 2; + else if (srclen == 3 || src[2] == '\0') + src_avail = 3; + else if (MB_LEN_MAX <= 4 || srclen == 4 || src[3] == '\0') + src_avail = 4; + else + src_avail = 4 + strnlen1 (src + 4, MIN (srclen, MB_LEN_MAX) - 4); + + /* Parse the next multibyte character. */ + ret = MBRTOWC (destptr, src, src_avail, ps); + + if (ret == (size_t)(-2)) + /* Encountered a multibyte character that extends past a '\0' byte + or that is longer than MB_LEN_MAX bytes. Cannot happen. */ + abort (); + + if (ret == (size_t)(-1)) + goto bad_input; + if (ret == 0) + { + src = NULL; + /* Here mbsinit (ps). */ + break; + } + if (!(USES_C32 && ret == (size_t)(-3))) + { + src += ret; + srclen -= ret; + } + } + + *srcp = src; + return destptr - dest; + } + else + { + /* Ignore dest and len, don't store *srcp at the end, and + don't clobber *ps. */ + mbstate_t state = *ps; + size_t totalcount = 0; + + for (; srclen > 0; totalcount++) + { + size_t src_avail; + size_t ret; + + /* An optimized variant of + src_avail = strnlen1 (src, MIN (srclen, MB_LEN_MAX)); */ + if (srclen == 1 || src[0] == '\0') + src_avail = 1; + else if (srclen == 2 || src[1] == '\0') + src_avail = 2; + else if (srclen == 3 || src[2] == '\0') + src_avail = 3; + else if (MB_LEN_MAX <= 4 || srclen == 4 || src[3] == '\0') + src_avail = 4; + else + src_avail = 4 + strnlen1 (src + 4, MIN (srclen, MB_LEN_MAX) - 4); + + /* Parse the next multibyte character. */ + ret = MBRTOWC (NULL, src, src_avail, &state); + + if (ret == (size_t)(-2)) + /* Encountered a multibyte character that extends past a '\0' byte + or that is longer than MB_LEN_MAX bytes. Cannot happen. */ + abort (); + + if (ret == (size_t)(-1)) + goto bad_input2; + if (ret == 0) + { + /* Here mbsinit (&state). */ + break; + } + src += ret; + srclen -= ret; + } + + return totalcount; + } + + bad_input: + *srcp = src; + bad_input2: + errno = EILSEQ; + return (size_t)(-1); + } +} diff --git a/include/libgnulib/mbsrtowcs-impl.h b/include/libgnulib/mbsrtowcs-impl.h new file mode 100755 index 0000000..9043fb8 --- /dev/null +++ b/include/libgnulib/mbsrtowcs-impl.h @@ -0,0 +1,123 @@ +/* Convert string to wide string. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +FUNC (DCHAR_T *dest, const char **srcp, size_t len, mbstate_t *ps) +{ + if (ps == NULL) + ps = &INTERNAL_STATE; + { + const char *src = *srcp; + + if (dest != NULL) + { + DCHAR_T *destptr = dest; + + for (; len > 0; destptr++, len--) + { + size_t src_avail; + size_t ret; + + /* An optimized variant of + src_avail = strnlen1 (src, MB_LEN_MAX); */ + if (src[0] == '\0') + src_avail = 1; + else if (src[1] == '\0') + src_avail = 2; + else if (src[2] == '\0') + src_avail = 3; + else if (MB_LEN_MAX <= 4 || src[3] == '\0') + src_avail = 4; + else + src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); + + /* Parse the next multibyte character. */ + ret = MBRTOWC (destptr, src, src_avail, ps); + + if (ret == (size_t)(-2)) + /* Encountered a multibyte character that extends past a '\0' byte + or that is longer than MB_LEN_MAX bytes. Cannot happen. */ + abort (); + + if (ret == (size_t)(-1)) + goto bad_input; + if (ret == 0) + { + src = NULL; + /* Here mbsinit (ps). */ + break; + } + if (!(USES_C32 && ret == (size_t)(-3))) + src += ret; + } + + *srcp = src; + return destptr - dest; + } + else + { + /* Ignore dest and len, don't store *srcp at the end, and + don't clobber *ps. */ + mbstate_t state = *ps; + size_t totalcount = 0; + + for (;; totalcount++) + { + size_t src_avail; + size_t ret; + + /* An optimized variant of + src_avail = strnlen1 (src, MB_LEN_MAX); */ + if (src[0] == '\0') + src_avail = 1; + else if (src[1] == '\0') + src_avail = 2; + else if (src[2] == '\0') + src_avail = 3; + else if (MB_LEN_MAX <= 4 || src[3] == '\0') + src_avail = 4; + else + src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); + + /* Parse the next multibyte character. */ + ret = MBRTOWC (NULL, src, src_avail, &state); + + if (ret == (size_t)(-2)) + /* Encountered a multibyte character that extends past a '\0' byte + or that is longer than MB_LEN_MAX bytes. Cannot happen. */ + abort (); + + if (ret == (size_t)(-1)) + goto bad_input2; + if (ret == 0) + { + /* Here mbsinit (&state). */ + break; + } + src += ret; + } + + return totalcount; + } + + bad_input: + *srcp = src; + bad_input2: + errno = EILSEQ; + return (size_t)(-1); + } +} diff --git a/include/libgnulib/mbswidth.h b/include/libgnulib/mbswidth.h new file mode 100755 index 0000000..ccd176d --- /dev/null +++ b/include/libgnulib/mbswidth.h @@ -0,0 +1,60 @@ +/* Determine the number of screen columns needed for a string. + Copyright (C) 2000-2004, 2007, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* This file uses HAVE_DECL_MBSWIDTH_IN_WCHAR_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Avoid a clash of our mbswidth() with a function of the same name defined + in UnixWare 7.1.1 . We need this #include before the #define + below. */ +#if HAVE_DECL_MBSWIDTH_IN_WCHAR_H +# include +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Optional flags to influence mbswidth/mbsnwidth behavior. */ + +/* If this bit is set, return -1 upon finding an invalid or incomplete + character. Otherwise, assume invalid characters have width 1. */ +#define MBSW_REJECT_INVALID 1 + +/* If this bit is set, return -1 upon finding a non-printable character. + Otherwise, assume unprintable characters have width 0 if they are + control characters and 1 otherwise. */ +#define MBSW_REJECT_UNPRINTABLE 2 + + +/* Returns the number of screen columns needed for STRING. */ +#define mbswidth gnu_mbswidth /* avoid clash with UnixWare 7.1.1 function */ +extern int mbswidth (const char *string, int flags); + +/* Returns the number of screen columns needed for the NBYTES bytes + starting at BUF. */ +extern int mbsnwidth (const char *buf, size_t nbytes, int flags); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/mbtowc-impl.h b/include/libgnulib/mbtowc-impl.h new file mode 100755 index 0000000..92efb4a --- /dev/null +++ b/include/libgnulib/mbtowc-impl.h @@ -0,0 +1,44 @@ +/* Convert multibyte character to wide character. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* We don't need a static internal state, because the encoding is not state + dependent, and when mbrtowc returns (size_t)(-2). we throw the result + away. */ + +int +mbtowc (wchar_t *pwc, const char *s, size_t n) +{ + if (s == NULL) + return 0; + else + { + mbstate_t state; + wchar_t wc; + size_t result; + + mbszero (&state); + result = mbrtowc (&wc, s, n, &state); + if (result == (size_t)-1 || result == (size_t)-2) + { + errno = EILSEQ; + return -1; + } + if (pwc != NULL) + *pwc = wc; + return (wc == 0 ? 0 : result); + } +} diff --git a/include/libgnulib/mbtowc-lock.h b/include/libgnulib/mbtowc-lock.h new file mode 100755 index 0000000..10f7dc7 --- /dev/null +++ b/include/libgnulib/mbtowc-lock.h @@ -0,0 +1,125 @@ +/* Use the internal lock used by mbrtowc and mbrtoc32. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2019-2020. */ + +/* Use a lock, so that no two threads can invoke mbtowc at the same time. */ + +static inline int +mbtowc_unlocked (wchar_t *pwc, const char *p, size_t m) +{ + /* Put the hidden internal state of mbtowc into an initial state. + This is needed at least with glibc, uClibc, and MSVC CRT. + See . */ + mbtowc (NULL, NULL, 0); + + return mbtowc (pwc, p, m); +} + +/* Prohibit renaming this symbol. */ +#undef gl_get_mbtowc_lock + +#if AVOID_ANY_THREADS || GNULIB_MBRTOWC_SINGLE_THREAD + +/* All uses of this function are in a single thread. No locking needed. */ + +static int +mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) +{ + return mbtowc_unlocked (pwc, p, m); +} + +#elif defined _WIN32 && !defined __CYGWIN__ + +extern __declspec(dllimport) CRITICAL_SECTION *gl_get_mbtowc_lock (void); + +static int +mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) +{ + CRITICAL_SECTION *lock = gl_get_mbtowc_lock (); + int ret; + + EnterCriticalSection (lock); + ret = mbtowc_unlocked (pwc, p, m); + LeaveCriticalSection (lock); + + return ret; +} + +#elif HAVE_PTHREAD_API /* AIX, IRIX, Cygwin */ + +extern +# if defined _WIN32 || defined __CYGWIN__ + __declspec(dllimport) +# endif + pthread_mutex_t *gl_get_mbtowc_lock (void); + +# if HAVE_WEAK_SYMBOLS /* IRIX */ + + /* Avoid the need to link with '-lpthread'. */ +# pragma weak pthread_mutex_lock +# pragma weak pthread_mutex_unlock + + /* Determine whether libpthread is in use. */ +# pragma weak pthread_mutexattr_gettype + /* See the comments in lock.h. */ +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) + +# else +# define pthread_in_use() 1 +# endif + +static int +mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) +{ + if (pthread_in_use()) + { + pthread_mutex_t *lock = gl_get_mbtowc_lock (); + int ret; + + if (pthread_mutex_lock (lock)) + abort (); + ret = mbtowc_unlocked (pwc, p, m); + if (pthread_mutex_unlock (lock)) + abort (); + + return ret; + } + else + return mbtowc_unlocked (pwc, p, m); +} + +#elif HAVE_THREADS_H + +extern mtx_t *gl_get_mbtowc_lock (void); + +static int +mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) +{ + mtx_t *lock = gl_get_mbtowc_lock (); + int ret; + + if (mtx_lock (lock) != thrd_success) + abort (); + ret = mbtowc_unlocked (pwc, p, m); + if (mtx_unlock (lock) != thrd_success) + abort (); + + return ret; +} + +#endif diff --git a/include/libgnulib/mbuiter.h b/include/libgnulib/mbuiter.h new file mode 100755 index 0000000..1860311 --- /dev/null +++ b/include/libgnulib/mbuiter.h @@ -0,0 +1,277 @@ +/* Iterating through multibyte strings: macros for multi-byte encodings. + Copyright (C) 2001, 2005, 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +/* The macros in this file implement forward iteration through a + multi-byte string, without knowing its length a-priori. + + With these macros, an iteration loop that looks like + + char *iter; + for (iter = buf; *iter != '\0'; iter++) + { + do_something (*iter); + } + + becomes + + mbui_iterator_t iter; + for (mbui_init (iter, buf); mbui_avail (iter); mbui_advance (iter)) + { + do_something (mbui_cur_ptr (iter), mb_len (mbui_cur (iter))); + } + + The benefit of these macros over plain use of mbrtowc is: + - Handling of invalid multibyte sequences is possible without + making the code more complicated, while still preserving the + invalid multibyte sequences. + + Compared to mbiter.h, the macros here don't need to know the string's + length a-priori. The downside is that at each step, the look-ahead + that guards against overrunning the terminating '\0' is more expensive. + The mbui_* macros are therefore suitable when there is a high probability + that only the first few multibyte characters need to be inspected. + Whereas the mbi_* macros are better if usually the iteration runs + through the entire string. + + mbui_iterator_t + is a type usable for variable declarations. + + mbui_init (iter, startptr) + initializes the iterator, starting at startptr. + + mbui_avail (iter) + returns true if there are more multibyte characters available before + the end of string is reached. In this case, mbui_cur (iter) is + initialized to the next multibyte character. + + mbui_advance (iter) + advances the iterator by one multibyte character. + + mbui_cur (iter) + returns the current multibyte character, of type mbchar_t. All the + macros defined in mbchar.h can be used on it. + + mbui_cur_ptr (iter) + return a pointer to the beginning of the current multibyte character. + + mbui_reloc (iter, ptrdiff) + relocates iterator when the string is moved by ptrdiff bytes. + + mbui_copy (&destiter, &srciter) + copies srciter to destiter. + + Here are the function prototypes of the macros. + + extern void mbui_init (mbui_iterator_t iter, const char *startptr); + extern bool mbui_avail (mbui_iterator_t iter); + extern void mbui_advance (mbui_iterator_t iter); + extern mbchar_t mbui_cur (mbui_iterator_t iter); + extern const char * mbui_cur_ptr (mbui_iterator_t iter); + extern void mbui_reloc (mbui_iterator_t iter, ptrdiff_t ptrdiff); + extern void mbui_copy (mbui_iterator_t *new, const mbui_iterator_t *old); + */ + +#ifndef _MBUITER_H +#define _MBUITER_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_ALWAYS_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include +#include +#include +#include + +#include "mbchar.h" +#include "strnlen1.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef MBUITER_INLINE +# define MBUITER_INLINE _GL_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +struct mbuiter_multi +{ + #if !GNULIB_MBRTOC32_REGULAR + bool in_shift; /* true if next byte may not be interpreted as ASCII */ + /* If GNULIB_MBRTOC32_REGULAR, it is always false, + so optimize it away. */ + #endif + mbstate_t state; /* if in_shift: current shift state */ + /* If GNULIB_MBRTOC32_REGULAR, it is in an initial state + before and after every mbuiter_multi_next invocation. + */ + bool next_done; /* true if mbui_avail has already filled the following */ + unsigned int cur_max; /* A cache of MB_CUR_MAX. */ + struct mbchar cur; /* the current character: + const char *cur.ptr pointer to current character + The following are only valid after mbui_avail. + size_t cur.bytes number of bytes of current character + bool cur.wc_valid true if wc is a valid 32-bit wide character + char32_t cur.wc if wc_valid: the current character + */ +}; + +MBUITER_INLINE void +mbuiter_multi_next (struct mbuiter_multi *iter) +{ + if (iter->next_done) + return; + #if !GNULIB_MBRTOC32_REGULAR + if (iter->in_shift) + goto with_shift; + #endif + /* Handle most ASCII characters quickly, without calling mbrtowc(). */ + if (is_basic (*iter->cur.ptr)) + { + /* These characters are part of the POSIX portable character set. + For most of them, namely those in the ISO C basic character set, + ISO C 99 guarantees that their wide character code is identical to + their char code. For the few other ones, this is the case as well, + in all locale encodings that are in use. The 32-bit wide character + code is the same as well. */ + iter->cur.bytes = 1; + iter->cur.wc = *iter->cur.ptr; + iter->cur.wc_valid = true; + } + else + { + assert (mbsinit (&iter->state)); + #if !GNULIB_MBRTOC32_REGULAR + iter->in_shift = true; + with_shift: + #endif + iter->cur.bytes = mbrtoc32 (&iter->cur.wc, iter->cur.ptr, + strnlen1 (iter->cur.ptr, iter->cur_max), + &iter->state); + if (iter->cur.bytes == (size_t) -1) + { + /* An invalid multibyte sequence was encountered. */ + iter->cur.bytes = 1; + iter->cur.wc_valid = false; + /* Allow the next invocation to continue from a sane state. */ + #if !GNULIB_MBRTOC32_REGULAR + iter->in_shift = false; + #endif + mbszero (&iter->state); + } + else if (iter->cur.bytes == (size_t) -2) + { + /* An incomplete multibyte character at the end. */ + iter->cur.bytes = strlen (iter->cur.ptr); + iter->cur.wc_valid = false; + /* Whether to set iter->in_shift = false and reset iter->state + or not is not important; the string end is reached anyway. */ + } + else + { + if (iter->cur.bytes == 0) + { + /* A null wide character was encountered. */ + iter->cur.bytes = 1; + assert (*iter->cur.ptr == '\0'); + assert (iter->cur.wc == 0); + } + #if !GNULIB_MBRTOC32_REGULAR + else if (iter->cur.bytes == (size_t) -3) + /* The previous multibyte sequence produced an additional 32-bit + wide character. */ + iter->cur.bytes = 0; + #endif + iter->cur.wc_valid = true; + + /* When in an initial state, we can go back treating ASCII + characters more quickly. */ + #if !GNULIB_MBRTOC32_REGULAR + if (mbsinit (&iter->state)) + iter->in_shift = false; + #endif + } + } + iter->next_done = true; +} + +MBUITER_INLINE void +mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff) +{ + iter->cur.ptr += ptrdiff; +} + +MBUITER_INLINE void +mbuiter_multi_copy (struct mbuiter_multi *new_iter, const struct mbuiter_multi *old_iter) +{ + #if !GNULIB_MBRTOC32_REGULAR + if ((new_iter->in_shift = old_iter->in_shift)) + memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t)); + else + #endif + mbszero (&new_iter->state); + new_iter->next_done = old_iter->next_done; + new_iter->cur_max = old_iter->cur_max; + mb_copy (&new_iter->cur, &old_iter->cur); +} + +/* Iteration macros. */ +typedef struct mbuiter_multi mbui_iterator_t; +#if !GNULIB_MBRTOC32_REGULAR +#define mbui_init(iter, startptr) \ + ((iter).cur.ptr = (startptr), \ + (iter).in_shift = false, mbszero (&(iter).state), \ + (iter).next_done = false, \ + (iter).cur_max = MB_CUR_MAX) +#else +/* Optimized: no in_shift. */ +#define mbui_init(iter, startptr) \ + ((iter).cur.ptr = (startptr), \ + mbszero (&(iter).state), \ + (iter).next_done = false, \ + (iter).cur_max = MB_CUR_MAX) +#endif +#define mbui_avail(iter) \ + (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur)) +#define mbui_advance(iter) \ + ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false) + +/* Access to the current character. */ +#define mbui_cur(iter) (iter).cur +#define mbui_cur_ptr(iter) (iter).cur.ptr + +/* Relocation. */ +#define mbui_reloc(iter, ptrdiff) mbuiter_multi_reloc (&iter, ptrdiff) + +/* Copying an iterator. */ +#define mbui_copy mbuiter_multi_copy + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _MBUITER_H */ diff --git a/include/libgnulib/mbuiterf.h b/include/libgnulib/mbuiterf.h new file mode 100755 index 0000000..1814e35 --- /dev/null +++ b/include/libgnulib/mbuiterf.h @@ -0,0 +1,223 @@ +/* Iterating through multibyte strings, faster: macros for multi-byte encodings. + Copyright (C) 2001, 2005, 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , + with insights from Paul Eggert. */ + +/* The macros in this file implement forward iteration through a + multi-byte string, without knowing its length a-priori. + + With these macros, an iteration loop that looks like + + char *iter; + for (iter = buf; *iter != '\0'; iter++) + { + do_something (*iter); + } + + becomes + + mbuif_state_t state; + [const] char *iter; + for (mbuif_init (state), iter = buf; mbuif_avail (state, iter); ) + { + mbchar_t cur = mbuif_next (state, iter); + // Note: Here always mb_ptr (cur) == iter. + do_something (iter, mb_len (cur)); + iter += mb_len (cur); + } + + The benefit of these macros over plain use of mbrtowc or mbrtoc32 is: + - Handling of invalid multibyte sequences is possible without + making the code more complicated, while still preserving the + invalid multibyte sequences. + + Compared to mbiterf.h, the macros here don't need to know the string's + length a-priori. The downside is that at each step, the look-ahead + that guards against overrunning the terminating '\0' is more expensive. + The mbuif_* macros are therefore suitable when there is a high probability + that only the first few multibyte characters need to be inspected. + Whereas the mbif_* macros are better if usually the iteration runs + through the entire string. + + The benefit of these macros over those from mbuiter.h is that it + produces faster code with today's optimizing compilers (because mbuif_next + returns its result by value). + + mbuif_state_t + is a type usable for variable declarations. + + mbuif_init (state) + initializes the state. + + mbuif_avail (state, iter) + returns true if another loop round is needed. + + mbuif_next (state, iter) + returns the next multibyte character. + It asssumes that the state is initialized and that *iter != '\0'. + + Here are the function prototypes of the macros. + + extern void mbuif_init (mbuif_state_t state); + extern bool mbuif_avail (mbuif_state_t state, const char *iter); + extern mbchar_t mbuif_next (mbuif_state_t state, const char *iter); + */ + +#ifndef _MBUITERF_H +#define _MBUITERF_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_ALWAYS_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include +#include +#include +#include + +#include "mbchar.h" +#include "strnlen1.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef MBUITERF_INLINE +# define MBUITERF_INLINE _GL_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +struct mbuif_state +{ + #if !GNULIB_MBRTOC32_REGULAR + bool in_shift; /* true if next byte may not be interpreted as ASCII */ + /* If GNULIB_MBRTOC32_REGULAR, it is always false, + so optimize it away. */ + #endif + mbstate_t state; /* if in_shift: current shift state */ + /* If GNULIB_MBRTOC32_REGULAR, it is in an initial state + before and after every mbuiterf_next invocation. + */ + unsigned int cur_max; /* A cache of MB_CUR_MAX. */ +}; + +MBUITERF_INLINE mbchar_t +mbuiterf_next (struct mbuif_state *ps, const char *iter) +{ + #if !GNULIB_MBRTOC32_REGULAR + if (ps->in_shift) + goto with_shift; + #endif + /* Handle most ASCII characters quickly, without calling mbrtowc(). */ + if (is_basic (*iter)) + { + /* These characters are part of the POSIX portable character set. + For most of them, namely those in the ISO C basic character set, + ISO C 99 guarantees that their wide character code is identical to + their char code. For the few other ones, this is the case as well, + in all locale encodings that are in use. The 32-bit wide character + code is the same as well. */ + return (mbchar_t) { .ptr = iter, .bytes = 1, .wc_valid = true, .wc = *iter }; + } + else + { + assert (mbsinit (&ps->state)); + #if !GNULIB_MBRTOC32_REGULAR + ps->in_shift = true; + with_shift:; + #endif + size_t bytes; + char32_t wc; + bytes = mbrtoc32 (&wc, iter, strnlen1 (iter, ps->cur_max), &ps->state); + if (bytes == (size_t) -1) + { + /* An invalid multibyte sequence was encountered. */ + /* Allow the next invocation to continue from a sane state. */ + #if !GNULIB_MBRTOC32_REGULAR + ps->in_shift = false; + #endif + mbszero (&ps->state); + return (mbchar_t) { .ptr = iter, .bytes = 1, .wc_valid = false }; + } + else if (bytes == (size_t) -2) + { + /* An incomplete multibyte character at the end. */ + /* Whether to set ps->in_shift = false and reset ps->state or not is + not important; the string end is reached anyway. */ + return (mbchar_t) { .ptr = iter, .bytes = strlen (iter), .wc_valid = false }; + } + else + { + if (bytes == 0) + { + /* A null wide character was encountered. */ + bytes = 1; + assert (*iter == '\0'); + assert (wc == 0); + } + #if !GNULIB_MBRTOC32_REGULAR + else if (bytes == (size_t) -3) + /* The previous multibyte sequence produced an additional 32-bit + wide character. */ + bytes = 0; + #endif + + /* When in an initial state, we can go back treating ASCII + characters more quickly. */ + #if !GNULIB_MBRTOC32_REGULAR + if (mbsinit (&ps->state)) + ps->in_shift = false; + #endif + return (mbchar_t) { .ptr = iter, .bytes = bytes, .wc_valid = true, .wc = wc }; + } + } +} + +/* Iteration macros. */ +typedef struct mbuif_state mbuif_state_t; +#if !GNULIB_MBRTOC32_REGULAR +#define mbuif_init(st) \ + ((st).in_shift = false, mbszero (&(st).state), \ + (st).cur_max = MB_CUR_MAX) +#else +/* Optimized: no in_shift. */ +#define mbuif_init(st) \ + (mbszero (&(st).state), \ + (st).cur_max = MB_CUR_MAX) +#endif +#if !GNULIB_MBRTOC32_REGULAR +#define mbuif_avail(st, iter) ((st).in_shift || (*(iter) != '\0')) +#else +/* Optimized: no in_shift. */ +#define mbuif_avail(st, iter) (*(iter) != '\0') +#endif +#define mbuif_next(st, iter) \ + mbuiterf_next (&(st), (iter)) + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _MBUITERF_H */ diff --git a/include/libgnulib/mcel.h b/include/libgnulib/mcel.h new file mode 100755 index 0000000..e5b0765 --- /dev/null +++ b/include/libgnulib/mcel.h @@ -0,0 +1,307 @@ +/* Multi-byte characters, Error encodings, and Lengths (MCELs) + Copyright 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +/* The macros in this file implement multi-byte character representation + and forward iteration through a multi-byte string. + They are simpler and can be faster than the mbiter family. + However, they do not support obsolescent encodings like CP864, + EBCDIC, Johab, and Shift JIS that glibc also does not support, + and it is up to the caller to coalesce encoding-error bytes if desired. + + The mcel_scan function lets code iterate through an array of bytes, + supporting character encodings in practical use + more simply than using plain mbrtoc32. + + Instead of this single-byte code: + + char *p = ..., *lim = ...; + for (; p < lim; p++) + process (*p); + + You can use this multi-byte code: + + char *p = ..., *lim = ...; + for (mcel_t g; p < lim; p += g.len) + { + g = mcel_scan (p, lim); + process (g); + } + + You can select from G using G.ch, G.err, and G.len. + G is an encoding error if G.err is nonzero, a character otherwise. + + The mcel_scanz function is similar except it works with a + string of unknown but positive length that is terminated with '\0'. + Instead of this single-byte code: + + char *p = ...; + for (; *p; p++) + process (*p); + + You can use this multi-byte code: + + char *p = ...; + for (mcel_t g; *p; p += g.len) + { + g = mcel_scanz (p); + process (g); + } + + mcel_scant (P, TERMINATOR) is like mcel_scanz (P) except the + string is terminated by TERMINATOR. The C standard says that the + TERMINATORs '\0', '\r', '\n', '.', '/' are safe, as they cannot be + a part (even a trailing byte) of a multi-byte character. + In practice TERMINATOR is safe if 0 <= TERMINATOR <= 0x2f (ASCII '/'). + + mcel_ch (CH, LEN) and mcel_err (ERR) construct mcel_t values. + + mcel_cmp (G1, G2) compares two mcel_t values lexicographically by + character or by encoding byte value, with encoding bytes sorting + after characters. + + Calls like c32isalpha (G.ch) test G; they return false for encoding + errors since calls like c32isalpha (0) return false. Calls like + mcel_tocmp (c32tolower, G1, G2) are like mcel_cmp (G1, G2), + but transliterate first. + + Although ISO C and POSIX allow encodings that have shift states or + that can produce multiple characters from an indivisible byte sequence, + POSIX does not require support for these encodings, + they are not in practical use on GNUish platforms, + and omitting support for them simplifies the API. */ + +#ifndef _MCEL_H +#define _MCEL_H 1 + +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#include +#include +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef MCEL_INLINE +# define MCEL_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Pacify GCC re type limits. */ +#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) && !defined __clang__ +# pragma GCC diagnostic ignored "-Wtype-limits" +#endif + +/* The maximum multi-byte character length supported on any platform. + This can be less than MB_LEN_MAX because many platforms have a + large MB_LEN_MAX to allow for stateful encodings, and mcel does not + support these encodings. MCEL_LEN_MAX is enough for UTF-8, EUC, + Shift-JIS, GB18030, etc. In all multi-byte encodings supported by glibc, + 0 < MB_CUR_MAX <= MCEL_LEN_MAX <= MB_LEN_MAX. */ +enum { MCEL_LEN_MAX = MB_LEN_MAX < 4 ? MB_LEN_MAX : 4 }; + +/* Bounds for mcel_t members. */ +enum { MCEL_CHAR_MAX = 0x10FFFF }; +enum { MCEL_ERR_MIN = 0x80 }; + +/* mcel_t is a type representing a character CH or an encoding error byte ERR, + along with a count of the LEN bytes that represent CH or ERR. + If ERR is zero, CH is a valid character and 0 < LEN <= MCEL_LEN_MAX; + otherwise ERR is an encoding error byte, MCEL_ERR_MIN <= ERR, + CH == 0, and LEN == 1. */ +typedef struct +{ + char32_t ch; + unsigned char err; + unsigned char len; +} mcel_t; + +/* Every multi-byte character length fits in mcel_t's LEN. */ +static_assert (MB_LEN_MAX <= UCHAR_MAX); + +/* Shifting an encoding error byte left by this value + suffices to sort encoding errors after characters. */ +enum { MCEL_ERR_SHIFT = 14 }; +static_assert (MCEL_CHAR_MAX < MCEL_ERR_MIN << MCEL_ERR_SHIFT); + +/* Unsigned char promotes to int. */ +static_assert (UCHAR_MAX <= INT_MAX); + +/* Bytes have 8 bits, as POSIX requires. */ +static_assert (CHAR_BIT == 8); + +#ifndef _GL_LIKELY +/* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ +# define _GL_LIKELY(cond) __builtin_expect ((cond), 1) +# define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) +#endif + +/* mcel_t constructors. */ +MCEL_INLINE mcel_t +mcel_ch (char32_t ch, size_t len) +{ + assume (0 < len); + assume (len <= MCEL_LEN_MAX); + assume (ch <= MCEL_CHAR_MAX); + return (mcel_t) {.ch = ch, .len = len}; +} +MCEL_INLINE mcel_t +mcel_err (unsigned char err) +{ + assume (MCEL_ERR_MIN <= err); + return (mcel_t) {.err = err, .len = 1}; +} + +/* Compare C1 and C2, with encoding errors sorting after characters. + Return <0, 0, >0 for <, =, >. */ +MCEL_INLINE int +mcel_cmp (mcel_t c1, mcel_t c2) +{ + int ch1 = c1.ch, ch2 = c2.ch; + return ((c1.err - c2.err) * (1 << MCEL_ERR_SHIFT)) + (ch1 - ch2); +} + +/* Apply the uchar translator TO to C1 and C2 and compare the results, + with encoding errors sorting after characters, + Return <0, 0, >0 for <, =, >. */ +MCEL_INLINE int +mcel_tocmp (wint_t (*to) (wint_t), mcel_t c1, mcel_t c2) +{ + int cmp = mcel_cmp (c1, c2); + if (_GL_LIKELY ((c1.err - c2.err) | !cmp)) + return cmp; + int ch1 = to (c1.ch), ch2 = to (c2.ch); + return ch1 - ch2; +} + +/* Whether C represents itself as a Unicode character + when it is the first byte of a single- or multi-byte character. + These days it is safe to assume ASCII, so do not support + obsolescent encodings like CP864, EBCDIC, Johab, and Shift JIS. */ +MCEL_INLINE bool +mcel_isbasic (char c) +{ + return _GL_LIKELY (0 <= c && c < MCEL_ERR_MIN); +} + +/* With mcel there should be no need for the performance overhead of + replacing glibc mbrtoc32, as callers shouldn't care whether the + C locale treats a byte with the high bit set as an encoding error. */ +#ifdef __GLIBC__ +# undef mbrtoc32 +#endif + +/* Scan bytes from P inclusive to LIM exclusive. P must be less than LIM. + Return the character or encoding error starting at P. */ +MCEL_INLINE mcel_t +mcel_scan (char const *p, char const *lim) +{ + /* Handle ASCII quickly to avoid the overhead of calling mbrtoc32. + In supported encodings, the first byte of a multi-byte character + cannot be an ASCII byte. */ + char c = *p; + if (mcel_isbasic (c)) + return mcel_ch (c, 1); + + /* An initial mbstate_t; initialization optimized for some platforms. + For details about these and other platforms, see wchar.in.h. */ +#if (defined __GLIBC__ && 2 < __GLIBC__ + (2 <= __GLIBC_MINOR__) \ + && !defined __UCLIBC__) + /* Although only a trivial optimization, it's worth it for GNU. */ + mbstate_t mbs; mbs.__count = 0; +#elif (defined __FreeBSD__ || defined __DragonFly__ || defined __OpenBSD__ \ + || (defined __APPLE__ && defined __MACH__)) + /* These platforms have 128-byte mbstate_t. What were they thinking? + Initialize just for supported encodings (UTF-8, EUC, etc.). + Avoid memset because some compilers generate function call code. */ + struct mbhidden { char32_t ch; int utf8_want, euc_want; } + _GL_ATTRIBUTE_MAY_ALIAS; + union { mbstate_t m; struct mbhidden s; } u; + u.s.ch = u.s.utf8_want = u.s.euc_want = 0; +# define mbs u.m +#elif defined __NetBSD__ + /* Experiments on both 32- and 64-bit NetBSD platforms have + shown that it doesn't work to clear fewer than 24 bytes. */ + struct mbhidden { long long int a, b, c; } _GL_ATTRIBUTE_MAY_ALIAS; + union { mbstate_t m; struct mbhidden s; } u; + u.s.a = u.s.b = u.s.c = 0; +# define mbs u.m +#else + /* mbstate_t has unknown structure or is not worth optimizing. */ + mbstate_t mbs = {0}; +#endif + + char32_t ch; + size_t len = mbrtoc32 (&ch, p, lim - p, &mbs); + +#undef mbs + + /* Any LEN with top bit set is an encoding error, as LEN == (size_t) -3 + is not supported and MB_LEN_MAX is small. */ + if (_GL_UNLIKELY ((size_t) -1 / 2 < len)) + return mcel_err (c); + + /* A multi-byte character. LEN must be positive, + as *P != '\0' and shift sequences are not supported. */ + return mcel_ch (ch, len); +} + +/* Scan bytes from P, a byte sequence terminated by TERMINATOR. + If *P == TERMINATOR, scan just that byte; otherwise scan + bytes up to but not including TERMINATOR. + TERMINATOR must be ASCII, and should be '\0', '\r', '\n', '.', or '/'. + Return the character or encoding error starting at P. */ +MCEL_INLINE mcel_t +mcel_scant (char const *p, char terminator) +{ + /* Handle ASCII quickly for speed. */ + if (mcel_isbasic (*p)) + return mcel_ch (*p, 1); + + /* Defer to mcel_scan for non-ASCII. Compute length with code that + is typically faster than strnlen. */ + char const *lim = p + 1; + for (int i = 0; i < MCEL_LEN_MAX - 1; i++) + lim += *lim != terminator; + return mcel_scan (p, lim); +} + +/* Scan bytes from P, a byte sequence terminated by '\0'. + If *P == '\0', scan just that byte; otherwise scan + bytes up to but not including '\0'. + Return the character or encoding error starting at P. */ +MCEL_INLINE mcel_t +mcel_scanz (char const *p) +{ + return mcel_scant (p, '\0'); +} + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _MCEL_H */ diff --git a/include/libgnulib/md2.h b/include/libgnulib/md2.h new file mode 100755 index 0000000..2a1f318 --- /dev/null +++ b/include/libgnulib/md2.h @@ -0,0 +1,87 @@ +/* Declarations of functions and data types used for MD2 sum + library functions. + Copyright (C) 2000-2001, 2003, 2005, 2008-2024 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef MD2_H +# define MD2_H 1 + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define MD2_DIGEST_SIZE 16 + +/* Structure to save state of computation between the single steps. */ +struct md2_ctx +{ + unsigned char chksum[16], X[48], buf[16]; + size_t curlen; +}; + + +/* Initialize structure containing state of computation. */ +extern void md2_init_ctx (struct md2_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is NOT required that LEN is a multiple of 64. */ +extern void md2_process_block (const void *buffer, size_t len, + struct md2_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is NOT required that LEN is a multiple of 64. */ +extern void md2_process_bytes (const void *buffer, size_t len, + struct md2_ctx *ctx); + +/* Process the remaining bytes in the buffer and put result from CTX + in first 16 bytes following RESBUF. The result is always in little + endian byte order, so that a byte-wise output yields to the wanted + ASCII representation of the message digest. */ +extern void *md2_finish_ctx (struct md2_ctx *ctx, void *restrict resbuf); + + +/* Put result from CTX in first 16 bytes following RESBUF. The result is + always in little endian byte order, so that a byte-wise output yields + to the wanted ASCII representation of the message digest. */ +extern void *md2_read_ctx (const struct md2_ctx *ctx, void *restrict resbuf); + + +/* Compute MD2 message digest for LEN bytes beginning at BUFFER. The + result is always in little endian byte order, so that a byte-wise + output yields to the wanted ASCII representation of the message + digest. */ +extern void *md2_buffer (const char *buffer, size_t len, + void *restrict resblock); + + +/* Compute MD2 message digest for bytes read from STREAM. The + resulting message digest number will be written into the 16 bytes + beginning at RESBLOCK. */ +extern int md2_stream (FILE *stream, void *resblock); + + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/md4.h b/include/libgnulib/md4.h new file mode 100755 index 0000000..939c98b --- /dev/null +++ b/include/libgnulib/md4.h @@ -0,0 +1,93 @@ +/* Declarations of functions and data types used for MD4 sum + library functions. + Copyright (C) 2000-2001, 2003, 2005, 2008-2024 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef MD4_H +# define MD4_H 1 + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define MD4_DIGEST_SIZE 16 + +/* Structure to save state of computation between the single steps. */ +struct md4_ctx +{ + uint32_t A; + uint32_t B; + uint32_t C; + uint32_t D; + + uint32_t total[2]; + uint32_t buflen; + uint32_t buffer[32]; +}; + + +/* Initialize structure containing state of computation. */ +extern void md4_init_ctx (struct md4_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is necessary that LEN is a multiple of 64!!! */ +extern void md4_process_block (const void *buffer, size_t len, + struct md4_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is NOT required that LEN is a multiple of 64. */ +extern void md4_process_bytes (const void *buffer, size_t len, + struct md4_ctx *ctx); + +/* Process the remaining bytes in the buffer and put result from CTX + in first 16 bytes following RESBUF. The result is always in little + endian byte order, so that a byte-wise output yields to the wanted + ASCII representation of the message digest. */ +extern void *md4_finish_ctx (struct md4_ctx *ctx, void *restrict resbuf); + + +/* Put result from CTX in first 16 bytes following RESBUF. The result is + always in little endian byte order, so that a byte-wise output yields + to the wanted ASCII representation of the message digest. */ +extern void *md4_read_ctx (const struct md4_ctx *ctx, void *restrict resbuf); + + +/* Compute MD4 message digest for LEN bytes beginning at BUFFER. The + result is always in little endian byte order, so that a byte-wise + output yields to the wanted ASCII representation of the message + digest. */ +extern void *md4_buffer (const char *buffer, size_t len, + void *restrict resblock); + + +/* Compute MD4 message digest for bytes read from STREAM. The + resulting message digest number will be written into the 16 bytes + beginning at RESBLOCK. */ +extern int md4_stream (FILE * stream, void *resblock); + + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/md5.h b/include/libgnulib/md5.h new file mode 100755 index 0000000..94cc699 --- /dev/null +++ b/include/libgnulib/md5.h @@ -0,0 +1,178 @@ +/* Declaration of functions and data types used for MD5 sum computing + library functions. + Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2024 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _MD5_H +#define _MD5_H 1 + +/* This file uses HAVE_OPENSSL_MD5. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +# if HAVE_OPENSSL_MD5 +# ifndef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT 0x10101000L /* FIXME: Use OpenSSL 1.1+ API. */ +# endif +/* If would give a compile-time error, don't use OpenSSL. */ +# include +# if OPENSSL_VERSION_MAJOR >= 3 +# include +# if (OPENSSL_CONFIGURED_API \ + < (OPENSSL_API_COMPAT < 0x900000L ? OPENSSL_API_COMPAT : \ + ((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF))) +# undef HAVE_OPENSSL_MD5 +# endif +# endif +# if HAVE_OPENSSL_MD5 +# include +# endif +# endif + +#define MD5_DIGEST_SIZE 16 +#define MD5_BLOCK_SIZE 64 + +#if defined __clang__ + /* clang really only groks GNU C 4.2, regardless of its value of __GNUC__. */ +# undef __GNUC_PREREQ +# define __GNUC_PREREQ(maj, min) ((maj) < 4 + ((min) <= 2)) +#endif +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#ifndef __THROW +# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4) +# if __cplusplus >= 201103L +# define __THROW noexcept (true) +# else +# define __THROW throw () +# endif +# else +# define __THROW +# endif +#endif + +#ifndef _LIBC +# define __md5_buffer md5_buffer +# define __md5_finish_ctx md5_finish_ctx +# define __md5_init_ctx md5_init_ctx +# define __md5_process_block md5_process_block +# define __md5_process_bytes md5_process_bytes +# define __md5_read_ctx md5_read_ctx +# define __md5_stream md5_stream +#endif + +# ifdef __cplusplus +extern "C" { +# endif + +# if HAVE_OPENSSL_MD5 +# define GL_OPENSSL_NAME 5 +# include "gl_openssl.h" +# else +/* Structure to save state of computation between the single steps. */ +struct md5_ctx +{ + uint32_t A; + uint32_t B; + uint32_t C; + uint32_t D; + + uint32_t total[2]; + uint32_t buflen; /* ≥ 0, ≤ 128 */ + uint32_t buffer[32]; /* 128 bytes; the first buflen bytes are in use */ +}; + +/* + * The following three functions are build up the low level used in + * the functions 'md5_stream' and 'md5_buffer'. + */ + +/* Initialize structure containing state of computation. + (RFC 1321, 3.3: Step 3) */ +extern void __md5_init_ctx (struct md5_ctx *ctx) __THROW; + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is necessary that LEN is a multiple of 64!!! */ +extern void __md5_process_block (const void *buffer, size_t len, + struct md5_ctx *ctx) __THROW; + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is NOT required that LEN is a multiple of 64. */ +extern void __md5_process_bytes (const void *buffer, size_t len, + struct md5_ctx *ctx) __THROW; + +/* Process the remaining bytes in the buffer and put result from CTX + in first 16 bytes following RESBUF. The result is always in little + endian byte order, so that a byte-wise output yields to the wanted + ASCII representation of the message digest. */ +extern void *__md5_finish_ctx (struct md5_ctx *ctx, void *restrict resbuf) + __THROW; + + +/* Put result from CTX in first 16 bytes following RESBUF. The result is + always in little endian byte order, so that a byte-wise output yields + to the wanted ASCII representation of the message digest. */ +extern void *__md5_read_ctx (const struct md5_ctx *ctx, void *restrict resbuf) + __THROW; + + +/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The + result is always in little endian byte order, so that a byte-wise + output yields to the wanted ASCII representation of the message + digest. */ +extern void *__md5_buffer (const char *buffer, size_t len, + void *restrict resblock) __THROW; + +# endif + +/* Compute MD5 message digest for bytes read from STREAM. + STREAM is an open file stream. Regular files are handled more efficiently. + The contents of STREAM from its current position to its end will be read. + The case that the last operation on STREAM was an 'ungetc' is not supported. + The resulting message digest number will be written into the 16 bytes + beginning at RESBLOCK. */ +extern int __md5_stream (FILE *stream, void *resblock) __THROW; + + +# ifdef __cplusplus +} +# endif + +#endif /* md5.h */ + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/include/libgnulib/memcasecmp.h b/include/libgnulib/memcasecmp.h new file mode 100755 index 0000000..992768c --- /dev/null +++ b/include/libgnulib/memcasecmp.h @@ -0,0 +1,37 @@ +/* Case-insensitive buffer comparator. + + Copyright (C) 1996, 1998, 2003, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering. */ + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +int memcasecmp (const void *vs1, const void *vs2, size_t n) _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/memchr.valgrind b/include/libgnulib/memchr.valgrind new file mode 100755 index 0000000..0295d7e --- /dev/null +++ b/include/libgnulib/memchr.valgrind @@ -0,0 +1,30 @@ +# Suppress a valgrind message about use of uninitialized memory in memchr(). + +# Copyright (C) 2009-2024 Free Software Foundation, Inc. +# +# This file is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# This file 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +# POSIX states that when the character is found, memchr must not read extra +# bytes in an overestimated length (for example, where memchr is used to +# implement strnlen). However, we use a safe word read to provide a speedup. +{ + memchr-value4 + Memcheck:Value4 + fun:rpl_memchr +} +{ + memchr-value8 + Memcheck:Value8 + fun:rpl_memchr +} diff --git a/include/libgnulib/memchr2.h b/include/libgnulib/memchr2.h new file mode 100755 index 0000000..089936b --- /dev/null +++ b/include/libgnulib/memchr2.h @@ -0,0 +1,37 @@ +/* Scan memory for the first of two bytes. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return the first address of either C1 or C2 (treated as unsigned + char) that occurs within N bytes of the memory region S. If + neither byte appears, return NULL. */ + +extern void *memchr2 (void const *s, int c1, int c2, size_t n) + _GL_ATTRIBUTE_PURE; + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/memchr2.valgrind b/include/libgnulib/memchr2.valgrind new file mode 100755 index 0000000..08eccd3 --- /dev/null +++ b/include/libgnulib/memchr2.valgrind @@ -0,0 +1,30 @@ +# Suppress a valgrind message about use of uninitialized memory in memchr2(). + +# Copyright (C) 2009-2024 Free Software Foundation, Inc. +# +# This file is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# This file 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +# Like memchr, it is safe to overestimate the length when the terminator +# is guaranteed to be found. In this case, we may end up reading a word +# that is partially uninitialized, but this use is OK for a speedup. +{ + memchr2-value4 + Memcheck:Value4 + fun:memchr2 +} +{ + memchr2-value8 + Memcheck:Value8 + fun:memchr2 +} diff --git a/include/libgnulib/memcmp2.h b/include/libgnulib/memcmp2.h new file mode 100755 index 0000000..5cea70e --- /dev/null +++ b/include/libgnulib/memcmp2.h @@ -0,0 +1,45 @@ +/* Compare two memory areas with possibly different lengths. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef MEMCMP2_H +#define MEMCMP2_H + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compare the memory regions S1 = [s1..s1+N1-1], S2 = [s2..s2+n2-1], + lexicographically. + This function's result is locale independent, unlike memcoll()'s. + Return a negative number if S1 < S2, a positive number if S1 > S2, or + 0 if S1 and S2 have the same contents. */ +extern int memcmp2 (const char *s1, size_t n1, const char *s2, size_t n2) + _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + +#endif /* MEMCMP2_H */ diff --git a/include/libgnulib/memcoll.h b/include/libgnulib/memcoll.h new file mode 100755 index 0000000..587a6c2 --- /dev/null +++ b/include/libgnulib/memcoll.h @@ -0,0 +1,38 @@ +/* Locale-specific memory comparison. + + Copyright (C) 1999, 2003, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Contributed by Paul Eggert . */ + +#ifndef MEMCOLL_H_ +#define MEMCOLL_H_ 1 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +int memcoll (char *restrict, size_t, char *restrict, size_t); +int memcoll0 (char const *, size_t, char const *, size_t); + + +#ifdef __cplusplus +} +#endif + +#endif /* MEMCOLL_H_ */ diff --git a/include/libgnulib/memxor.h b/include/libgnulib/memxor.h new file mode 100755 index 0000000..9d0c1f1 --- /dev/null +++ b/include/libgnulib/memxor.h @@ -0,0 +1,47 @@ +/* memxor.h -- perform binary exclusive OR operation on memory blocks. + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Simon Josefsson. The interface was inspired by memxor + in Niels Möller's Nettle. */ + +#ifndef MEMXOR_H +#define MEMXOR_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compute binary exclusive OR of memory areas DEST and SRC, putting + the result in DEST, of length N bytes. Returns a pointer to + DEST. */ +void *memxor (void *restrict dest, const void *restrict src, size_t n); + + +#ifdef __cplusplus +} +#endif + +#endif /* MEMXOR_H */ + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/include/libgnulib/mgetgroups.h b/include/libgnulib/mgetgroups.h new file mode 100755 index 0000000..2cfdfe9 --- /dev/null +++ b/include/libgnulib/mgetgroups.h @@ -0,0 +1,32 @@ +/* Get a list of all group IDs associated with a specified user ID. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +int mgetgroups (const char *username, gid_t gid, gid_t **groups); +#if GNULIB_XGETGROUPS +int xgetgroups (const char *username, gid_t gid, gid_t **groups); +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/mini-gmp.h b/include/libgnulib/mini-gmp.h new file mode 100755 index 0000000..f28cb36 --- /dev/null +++ b/include/libgnulib/mini-gmp.h @@ -0,0 +1,311 @@ +/* mini-gmp, a minimalistic implementation of a GNU GMP subset. + +Copyright 2011-2015, 2017, 2019-2021 Free Software Foundation, Inc. + +This file is part of the GNU MP Library. + +The GNU MP Library is free software; you can redistribute it and/or modify +it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + +or + + * 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. + +or both in parallel, as here. + +The GNU MP Library 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 copies of the GNU General Public License and the +GNU Lesser General Public License along with the GNU MP Library. If not, +see https://www.gnu.org/licenses/. */ + +/* About mini-gmp: This is a minimal implementation of a subset of the + GMP interface. It is intended for inclusion into applications which + have modest bignums needs, as a fallback when the real GMP library + is not installed. + + This file defines the public interface. */ + +#ifndef __MINI_GMP_H__ +#define __MINI_GMP_H__ + +/* For size_t */ +#include + +#if defined (__cplusplus) +extern "C" { +#endif + +void mp_set_memory_functions (void *(*) (size_t), + void *(*) (void *, size_t, size_t), + void (*) (void *, size_t)); + +void mp_get_memory_functions (void *(**) (size_t), + void *(**) (void *, size_t, size_t), + void (**) (void *, size_t)); + +#ifndef MINI_GMP_LIMB_TYPE +#define MINI_GMP_LIMB_TYPE long +#endif + +typedef unsigned MINI_GMP_LIMB_TYPE mp_limb_t; +typedef long mp_size_t; +typedef unsigned long mp_bitcnt_t; + +typedef mp_limb_t *mp_ptr; +typedef const mp_limb_t *mp_srcptr; + +typedef struct +{ + int _mp_alloc; /* Number of *limbs* allocated and pointed + to by the _mp_d field. */ + int _mp_size; /* abs(_mp_size) is the number of limbs the + last field points to. If _mp_size is + negative this is a negative number. */ + mp_limb_t *_mp_d; /* Pointer to the limbs. */ +} __mpz_struct; + +typedef __mpz_struct mpz_t[1]; + +typedef __mpz_struct *mpz_ptr; +typedef const __mpz_struct *mpz_srcptr; + +extern const int mp_bits_per_limb; + +void mpn_copyi (mp_ptr, mp_srcptr, mp_size_t); +void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t); +void mpn_zero (mp_ptr, mp_size_t); + +int mpn_cmp (mp_srcptr, mp_srcptr, mp_size_t); +int mpn_zero_p (mp_srcptr, mp_size_t); + +mp_limb_t mpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); +mp_limb_t mpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +mp_limb_t mpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); + +mp_limb_t mpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); +mp_limb_t mpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +mp_limb_t mpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); + +mp_limb_t mpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); +mp_limb_t mpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); +mp_limb_t mpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); + +mp_limb_t mpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); +void mpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +void mpn_sqr (mp_ptr, mp_srcptr, mp_size_t); +int mpn_perfect_square_p (mp_srcptr, mp_size_t); +mp_size_t mpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t); +mp_size_t mpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t); + +mp_limb_t mpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); +mp_limb_t mpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); + +mp_bitcnt_t mpn_scan0 (mp_srcptr, mp_bitcnt_t); +mp_bitcnt_t mpn_scan1 (mp_srcptr, mp_bitcnt_t); + +void mpn_com (mp_ptr, mp_srcptr, mp_size_t); +mp_limb_t mpn_neg (mp_ptr, mp_srcptr, mp_size_t); + +mp_bitcnt_t mpn_popcount (mp_srcptr, mp_size_t); + +mp_limb_t mpn_invert_3by2 (mp_limb_t, mp_limb_t); +#define mpn_invert_limb(x) mpn_invert_3by2 ((x), 0) + +size_t mpn_get_str (unsigned char *, int, mp_ptr, mp_size_t); +mp_size_t mpn_set_str (mp_ptr, const unsigned char *, size_t, int); + +void mpz_init (mpz_t); +void mpz_init2 (mpz_t, mp_bitcnt_t); +void mpz_clear (mpz_t); + +#define mpz_odd_p(z) (((z)->_mp_size != 0) & (int) (z)->_mp_d[0]) +#define mpz_even_p(z) (! mpz_odd_p (z)) + +int mpz_sgn (const mpz_t); +int mpz_cmp_si (const mpz_t, long); +int mpz_cmp_ui (const mpz_t, unsigned long); +int mpz_cmp (const mpz_t, const mpz_t); +int mpz_cmpabs_ui (const mpz_t, unsigned long); +int mpz_cmpabs (const mpz_t, const mpz_t); +int mpz_cmp_d (const mpz_t, double); +int mpz_cmpabs_d (const mpz_t, double); + +void mpz_abs (mpz_t, const mpz_t); +void mpz_neg (mpz_t, const mpz_t); +void mpz_swap (mpz_t, mpz_t); + +void mpz_add_ui (mpz_t, const mpz_t, unsigned long); +void mpz_add (mpz_t, const mpz_t, const mpz_t); +void mpz_sub_ui (mpz_t, const mpz_t, unsigned long); +void mpz_ui_sub (mpz_t, unsigned long, const mpz_t); +void mpz_sub (mpz_t, const mpz_t, const mpz_t); + +void mpz_mul_si (mpz_t, const mpz_t, long int); +void mpz_mul_ui (mpz_t, const mpz_t, unsigned long int); +void mpz_mul (mpz_t, const mpz_t, const mpz_t); +void mpz_mul_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_addmul_ui (mpz_t, const mpz_t, unsigned long int); +void mpz_addmul (mpz_t, const mpz_t, const mpz_t); +void mpz_submul_ui (mpz_t, const mpz_t, unsigned long int); +void mpz_submul (mpz_t, const mpz_t, const mpz_t); + +void mpz_cdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t); +void mpz_fdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t); +void mpz_tdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t); +void mpz_cdiv_q (mpz_t, const mpz_t, const mpz_t); +void mpz_fdiv_q (mpz_t, const mpz_t, const mpz_t); +void mpz_tdiv_q (mpz_t, const mpz_t, const mpz_t); +void mpz_cdiv_r (mpz_t, const mpz_t, const mpz_t); +void mpz_fdiv_r (mpz_t, const mpz_t, const mpz_t); +void mpz_tdiv_r (mpz_t, const mpz_t, const mpz_t); + +void mpz_cdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_fdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_tdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_cdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_fdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_tdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t); + +void mpz_mod (mpz_t, const mpz_t, const mpz_t); + +void mpz_divexact (mpz_t, const mpz_t, const mpz_t); + +int mpz_divisible_p (const mpz_t, const mpz_t); +int mpz_congruent_p (const mpz_t, const mpz_t, const mpz_t); + +unsigned long mpz_cdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long); +unsigned long mpz_fdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long); +unsigned long mpz_tdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long); +unsigned long mpz_cdiv_q_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_fdiv_q_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_tdiv_q_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_cdiv_r_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_fdiv_r_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_tdiv_r_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_cdiv_ui (const mpz_t, unsigned long); +unsigned long mpz_fdiv_ui (const mpz_t, unsigned long); +unsigned long mpz_tdiv_ui (const mpz_t, unsigned long); + +unsigned long mpz_mod_ui (mpz_t, const mpz_t, unsigned long); + +void mpz_divexact_ui (mpz_t, const mpz_t, unsigned long); + +int mpz_divisible_ui_p (const mpz_t, unsigned long); + +unsigned long mpz_gcd_ui (mpz_t, const mpz_t, unsigned long); +void mpz_gcd (mpz_t, const mpz_t, const mpz_t); +void mpz_gcdext (mpz_t, mpz_t, mpz_t, const mpz_t, const mpz_t); +void mpz_lcm_ui (mpz_t, const mpz_t, unsigned long); +void mpz_lcm (mpz_t, const mpz_t, const mpz_t); +int mpz_invert (mpz_t, const mpz_t, const mpz_t); + +void mpz_sqrtrem (mpz_t, mpz_t, const mpz_t); +void mpz_sqrt (mpz_t, const mpz_t); +int mpz_perfect_square_p (const mpz_t); + +void mpz_pow_ui (mpz_t, const mpz_t, unsigned long); +void mpz_ui_pow_ui (mpz_t, unsigned long, unsigned long); +void mpz_powm (mpz_t, const mpz_t, const mpz_t, const mpz_t); +void mpz_powm_ui (mpz_t, const mpz_t, unsigned long, const mpz_t); + +void mpz_rootrem (mpz_t, mpz_t, const mpz_t, unsigned long); +int mpz_root (mpz_t, const mpz_t, unsigned long); + +void mpz_fac_ui (mpz_t, unsigned long); +void mpz_2fac_ui (mpz_t, unsigned long); +void mpz_mfac_uiui (mpz_t, unsigned long, unsigned long); +void mpz_bin_uiui (mpz_t, unsigned long, unsigned long); + +int mpz_probab_prime_p (const mpz_t, int); + +int mpz_tstbit (const mpz_t, mp_bitcnt_t); +void mpz_setbit (mpz_t, mp_bitcnt_t); +void mpz_clrbit (mpz_t, mp_bitcnt_t); +void mpz_combit (mpz_t, mp_bitcnt_t); + +void mpz_com (mpz_t, const mpz_t); +void mpz_and (mpz_t, const mpz_t, const mpz_t); +void mpz_ior (mpz_t, const mpz_t, const mpz_t); +void mpz_xor (mpz_t, const mpz_t, const mpz_t); + +mp_bitcnt_t mpz_popcount (const mpz_t); +mp_bitcnt_t mpz_hamdist (const mpz_t, const mpz_t); +mp_bitcnt_t mpz_scan0 (const mpz_t, mp_bitcnt_t); +mp_bitcnt_t mpz_scan1 (const mpz_t, mp_bitcnt_t); + +int mpz_fits_slong_p (const mpz_t); +int mpz_fits_ulong_p (const mpz_t); +int mpz_fits_sint_p (const mpz_t); +int mpz_fits_uint_p (const mpz_t); +int mpz_fits_sshort_p (const mpz_t); +int mpz_fits_ushort_p (const mpz_t); +long int mpz_get_si (const mpz_t); +unsigned long int mpz_get_ui (const mpz_t); +double mpz_get_d (const mpz_t); +size_t mpz_size (const mpz_t); +mp_limb_t mpz_getlimbn (const mpz_t, mp_size_t); + +void mpz_realloc2 (mpz_t, mp_bitcnt_t); +mp_srcptr mpz_limbs_read (mpz_srcptr); +mp_ptr mpz_limbs_modify (mpz_t, mp_size_t); +mp_ptr mpz_limbs_write (mpz_t, mp_size_t); +void mpz_limbs_finish (mpz_t, mp_size_t); +mpz_srcptr mpz_roinit_n (mpz_t, mp_srcptr, mp_size_t); + +#define MPZ_ROINIT_N(xp, xs) {{0, (xs),(xp) }} + +void mpz_set_si (mpz_t, signed long int); +void mpz_set_ui (mpz_t, unsigned long int); +void mpz_set (mpz_t, const mpz_t); +void mpz_set_d (mpz_t, double); + +void mpz_init_set_si (mpz_t, signed long int); +void mpz_init_set_ui (mpz_t, unsigned long int); +void mpz_init_set (mpz_t, const mpz_t); +void mpz_init_set_d (mpz_t, double); + +size_t mpz_sizeinbase (const mpz_t, int); +char *mpz_get_str (char *, int, const mpz_t); +int mpz_set_str (mpz_t, const char *, int); +int mpz_init_set_str (mpz_t, const char *, int); + +/* This long list taken from gmp.h. */ +/* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4, + defines EOF but not FILE. */ +#if defined (FILE) \ + || defined (H_STDIO) \ + || defined (_H_STDIO) /* AIX */ \ + || defined (_STDIO_H) /* glibc, Sun, SCO */ \ + || defined (_STDIO_H_) /* BSD, OSF */ \ + || defined (__STDIO_H) /* Borland */ \ + || defined (__STDIO_H__) /* IRIX */ \ + || defined (_STDIO_INCLUDED) /* HPUX */ \ + || defined (__dj_include_stdio_h_) /* DJGPP */ \ + || defined (_FILE_DEFINED) /* Microsoft */ \ + || defined (__STDIO__) /* Apple MPW MrC */ \ + || defined (_MSL_STDIO_H) /* Metrowerks */ \ + || defined (_STDIO_H_INCLUDED) /* QNX4 */ \ + || defined (_ISO_STDIO_ISO_H) /* Sun C++ */ \ + || defined (__STDIO_LOADED) /* VMS */ \ + || defined (_STDIO) /* HPE NonStop */ \ + || defined (__DEFINED_FILE) /* musl */ +size_t mpz_out_str (FILE *, int, const mpz_t); +#endif + +void mpz_import (mpz_t, size_t, int, size_t, int, size_t, const void *); +void *mpz_export (void *, size_t *, int, size_t, int, size_t, const mpz_t); + +#if defined (__cplusplus) +} +#endif +#endif /* __MINI_GMP_H__ */ diff --git a/include/libgnulib/mini-mpq.h b/include/libgnulib/mini-mpq.h new file mode 100755 index 0000000..8eabcec --- /dev/null +++ b/include/libgnulib/mini-mpq.h @@ -0,0 +1,114 @@ +/* mini-mpq, a minimalistic implementation of a GNU GMP subset. + +Copyright 2018, 2019 Free Software Foundation, Inc. + +This file is part of the GNU MP Library. + +The GNU MP Library is free software; you can redistribute it and/or modify +it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + +or + + * 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. + +or both in parallel, as here. + +The GNU MP Library 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 copies of the GNU General Public License and the +GNU Lesser General Public License along with the GNU MP Library. If not, +see https://www.gnu.org/licenses/. */ + +/* Header */ + +#ifndef __MINI_MPQ_H__ +#define __MINI_MPQ_H__ + +#include "mini-gmp.h" + +#if defined (__cplusplus) +extern "C" { +#endif + +typedef struct +{ + __mpz_struct _mp_num; + __mpz_struct _mp_den; +} __mpq_struct; + +typedef __mpq_struct mpq_t[1]; + +typedef const __mpq_struct *mpq_srcptr; +typedef __mpq_struct *mpq_ptr; + +#define mpq_numref(Q) (&((Q)->_mp_num)) +#define mpq_denref(Q) (&((Q)->_mp_den)) + +void mpq_abs (mpq_t, const mpq_t); +void mpq_add (mpq_t, const mpq_t, const mpq_t); +void mpq_canonicalize (mpq_t); +void mpq_clear (mpq_t); +int mpq_cmp (const mpq_t, const mpq_t); +int mpq_cmp_si (const mpq_t, signed long, unsigned long); +int mpq_cmp_ui (const mpq_t, unsigned long, unsigned long); +int mpq_cmp_z (const mpq_t, const mpz_t); +void mpq_div (mpq_t, const mpq_t, const mpq_t); +void mpq_div_2exp (mpq_t, const mpq_t, mp_bitcnt_t); +int mpq_equal (const mpq_t, const mpq_t); +double mpq_get_d (const mpq_t); +void mpq_get_den (mpz_t, const mpq_t); +void mpq_get_num (mpz_t, const mpq_t); +char * mpq_get_str (char *, int, const mpq_t q); +void mpq_init (mpq_t); +void mpq_inv (mpq_t, const mpq_t); +void mpq_mul (mpq_t, const mpq_t, const mpq_t); +void mpq_mul_2exp (mpq_t, const mpq_t, mp_bitcnt_t); +void mpq_neg (mpq_t, const mpq_t); +void mpq_set (mpq_t, const mpq_t); +void mpq_set_d (mpq_t, double); +void mpq_set_den (mpq_t, const mpz_t); +void mpq_set_num (mpq_t, const mpz_t); +void mpq_set_si (mpq_t, signed long, unsigned long); +int mpq_set_str (mpq_t, const char *, int); +void mpq_set_ui (mpq_t, unsigned long, unsigned long); +void mpq_set_z (mpq_t, const mpz_t); +int mpq_sgn (const mpq_t); +void mpq_sub (mpq_t, const mpq_t, const mpq_t); +void mpq_swap (mpq_t, mpq_t); + +/* This long list taken from gmp.h. */ +/* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4, + defines EOF but not FILE. */ +#if defined (FILE) \ + || defined (H_STDIO) \ + || defined (_H_STDIO) /* AIX */ \ + || defined (_STDIO_H) /* glibc, Sun, SCO */ \ + || defined (_STDIO_H_) /* BSD, OSF */ \ + || defined (__STDIO_H) /* Borland */ \ + || defined (__STDIO_H__) /* IRIX */ \ + || defined (_STDIO_INCLUDED) /* HPUX */ \ + || defined (__dj_include_stdio_h_) /* DJGPP */ \ + || defined (_FILE_DEFINED) /* Microsoft */ \ + || defined (__STDIO__) /* Apple MPW MrC */ \ + || defined (_MSL_STDIO_H) /* Metrowerks */ \ + || defined (_STDIO_H_INCLUDED) /* QNX4 */ \ + || defined (_ISO_STDIO_ISO_H) /* Sun C++ */ \ + || defined (__STDIO_LOADED) /* VMS */ +size_t mpq_out_str (FILE *, int, const mpq_t); +#endif + +void mpz_set_q (mpz_t, const mpq_t); + +#if defined (__cplusplus) +} +#endif +#endif /* __MINI_MPQ_H__ */ diff --git a/include/libgnulib/minmax.h b/include/libgnulib/minmax.h new file mode 100755 index 0000000..f3df58b --- /dev/null +++ b/include/libgnulib/minmax.h @@ -0,0 +1,65 @@ +/* MIN, MAX macros. + Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _MINMAX_H +#define _MINMAX_H + +/* Note: MIN, MAX are also defined in on some systems + (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about + MIN, MAX macro redefinitions on some systems; the workaround is to + #include this file as the last one among the #include list. */ + +/* This file uses HAVE_MINMAX_IN_LIMITS_H, HAVE_MINMAX_IN_SYS_PARAM_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Before we define the following symbols we get the file + since otherwise we get redefinitions on some systems if is + included after this file. Likewise for . + If more than one of these system headers define MIN and MAX, pick just + one of the headers (because the definitions most likely are the same). */ +#if HAVE_MINMAX_IN_LIMITS_H +# include +#elif HAVE_MINMAX_IN_SYS_PARAM_H +# include +#endif + +/* Note: MIN and MAX should be used with two arguments of the + same type. They might not return the minimum and maximum of their two + arguments, if the arguments have different types or have unusual + floating-point values. For example, on a typical host with 32-bit 'int', + 64-bit 'long long', and 64-bit IEEE 754 'double' types: + + MAX (-1, 2147483648) returns 4294967295. + MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. + MAX (NaN, 0.0) returns 0.0. + MAX (+0.0, -0.0) returns -0.0. + + and in each case the answer is in some sense bogus. */ + +/* MAX(a,b) returns the maximum of A and B. */ +#ifndef MAX +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + +/* MIN(a,b) returns the minimum of A and B. */ +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#endif /* _MINMAX_H */ diff --git a/include/libgnulib/mkancesdirs.h b/include/libgnulib/mkancesdirs.h new file mode 100755 index 0000000..3024083 --- /dev/null +++ b/include/libgnulib/mkancesdirs.h @@ -0,0 +1,31 @@ +/* Ensure the existence of the ancestor directories of a file. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert, 2006. */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct savewd; +ptrdiff_t mkancesdirs (char *, struct savewd *, + int (*) (char const *, char const *, void *), void *); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/mkdir-p.h b/include/libgnulib/mkdir-p.h new file mode 100755 index 0000000..9285056 --- /dev/null +++ b/include/libgnulib/mkdir-p.h @@ -0,0 +1,44 @@ +/* mkdir-p.h -- Ensure that a directory and its parents exist. + + Copyright (C) 1994-1997, 2000, 2003-2006, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert, David MacKenzie, and Jim Meyering. */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +struct savewd; +bool make_dir_parents (char *dir, + struct savewd *wd, + int (*make_ancestor) (char const *, char const *, + void *), + void *options, + mode_t mode, + void (*announce) (char const *, void *), + mode_t mode_bits, + uid_t owner, + gid_t group, + bool preserve_existing); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/mktime-internal.h b/include/libgnulib/mktime-internal.h new file mode 100755 index 0000000..3e2848c --- /dev/null +++ b/include/libgnulib/mktime-internal.h @@ -0,0 +1,78 @@ +/* Internals of mktime and related functions + Copyright 2016-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Paul Eggert . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _LIBC +# include +#endif + +/* mktime_offset_t is a signed type wide enough to hold a UTC offset + in seconds, and used as part of the type of the offset-guess + argument to mktime_internal. In Glibc, it is always long int. + When in Gnulib, use time_t on platforms where time_t + is signed, to be compatible with platforms like BeOS that export + this implementation detail of mktime. On platforms where time_t is + unsigned, GNU and POSIX code can assume 'int' is at least 32 bits + which is wide enough for a UTC offset. */ +#ifdef _LIBC +typedef long int mktime_offset_t; +#elif defined TIME_T_IS_SIGNED +typedef time_t mktime_offset_t; +#else +typedef int mktime_offset_t; +#endif + +/* The source code uses identifiers like __time64_t for glibc + timestamps that can contain 64-bit values even when time_t is only + 32 bits. These are just macros for the ordinary identifiers unless + compiling within glibc when time_t is 32 bits. */ +#if ! (defined _LIBC && __TIMESIZE != 64) +# undef __time64_t +# define __time64_t time_t +# define __gmtime64_r __gmtime_r +# define __localtime64_r __localtime_r +# define __mktime64 mktime +# define __timegm64 timegm +#endif + +#ifndef _LIBC + +/* Although glibc source code uses leading underscores, Gnulib wants + ordinary names. + + Portable standalone applications should supply a that + declares a POSIX-compliant localtime_r, for the benefit of older + implementations that lack localtime_r or have a nonstandard one. + Similarly for gmtime_r. See the gnulib time_r module for one way + to implement this. */ + +# undef __gmtime_r +# undef __localtime_r +# define __gmtime_r gmtime_r +# define __localtime_r localtime_r + +# define __mktime_internal mktime_internal + +#endif + +/* Subroutine of mktime. Return the time_t representation of TP and + normalize TP, given that a struct tm * maps to a time_t. If + LOCAL, the mapping is performed by localtime_r, otherwise by gmtime_r. + Record next guess for localtime-gmtime offset in *OFFSET. */ +extern __time64_t __mktime_internal (struct tm *tp, bool local, + mktime_offset_t *offset) attribute_hidden; diff --git a/include/libgnulib/modechange.h b/include/libgnulib/modechange.h new file mode 100755 index 0000000..633a726 --- /dev/null +++ b/include/libgnulib/modechange.h @@ -0,0 +1,48 @@ +/* modechange.h -- definitions for file mode manipulation + + Copyright (C) 1989-1990, 1997, 2003-2006, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#if ! defined MODECHANGE_H_ +#define MODECHANGE_H_ + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +struct mode_change *mode_compile (const char *) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; +struct mode_change *mode_create_from_ref (const char *) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; +mode_t mode_adjust (mode_t, bool, mode_t, struct mode_change const *, + mode_t *) + _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/mountlist.h b/include/libgnulib/mountlist.h new file mode 100755 index 0000000..9728e38 --- /dev/null +++ b/include/libgnulib/mountlist.h @@ -0,0 +1,58 @@ +/* mountlist.h -- declarations for list of mounted file systems + + Copyright (C) 1991-1992, 1998, 2000-2005, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#ifndef MOUNTLIST_H_ +#define MOUNTLIST_H_ + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* A mount table entry. */ +struct mount_entry +{ + char *me_devname; /* Device node name, including "/dev/". */ + char *me_mountdir; /* Mount point directory name. */ + char *me_mntroot; /* Directory on filesystem of device used */ + /* as root for the (bind) mount. */ + char *me_type; /* "nfs", "4.2", etc. */ + dev_t me_dev; /* Device number of me_mountdir. */ + unsigned int me_dummy : 1; /* Nonzero for dummy file systems. */ + unsigned int me_remote : 1; /* Nonzero for remote file systems. */ + unsigned int me_type_malloced : 1; /* Nonzero if me_type was malloced. */ + struct mount_entry *me_next; +}; + +struct mount_entry *read_file_system_list (bool need_fs_type) + _GL_ATTRIBUTE_MALLOC; +void free_mount_entry (struct mount_entry *entry); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/mpsort.h b/include/libgnulib/mpsort.h new file mode 100755 index 0000000..0e0b5f7 --- /dev/null +++ b/include/libgnulib/mpsort.h @@ -0,0 +1,30 @@ +/* Sort a vector of pointers to data. + + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +void mpsort (void const **, size_t, int (*) (void const *, void const *)); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/msvc-inval.h b/include/libgnulib/msvc-inval.h new file mode 100755 index 0000000..7aee6e5 --- /dev/null +++ b/include/libgnulib/msvc-inval.h @@ -0,0 +1,227 @@ +/* Invalid parameter handler for MSVC runtime libraries. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _MSVC_INVAL_H +#define _MSVC_INVAL_H + +/* With MSVC runtime libraries with the "invalid parameter handler" concept, + functions like fprintf(), dup2(), or close() crash when the caller passes + an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) + instead. + This file defines macros that turn such an invalid parameter notification + into a non-local exit. An error code can then be produced at the target + of this exit. You can thus write code like + + TRY_MSVC_INVAL + { + + } + CATCH_MSVC_INVAL + { + + } + DONE_MSVC_INVAL; + + This entire block expands to a single statement. + + The handling of invalid parameters can be done in three ways: + + * The default way, which is reasonable for programs (not libraries): + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) + + * The way for libraries that make "hairy" calls (like close(-1), or + fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) + + * The way for libraries that make no "hairy" calls: + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) + */ + +/* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#define DEFAULT_HANDLING 0 +#define HAIRY_LIBRARY_HANDLING 1 +#define SANE_LIBRARY_HANDLING 2 + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ + && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) +/* A native Windows platform with the "invalid parameter handler" concept, + and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ + +# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING +/* Default handling. */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* Ensure that the invalid parameter handler in installed that just returns. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + gl_msvc_inval_ensure_handler (); \ + if (1) +# define CATCH_MSVC_INVAL \ + else +# define DONE_MSVC_INVAL \ + } \ + while (0) + +# else +/* Handling for hairy libraries. */ + +# include + +/* Gnulib can define its own status codes, as described in the page + "Raising Software Exceptions" on microsoft.com + . + Our status codes are composed of + - 0xE0000000, mandatory for all user-defined status codes, + - 0x474E550, a API identifier ("GNU"), + - 0, 1, 2, ..., used to distinguish different status codes from the + same API. */ +# define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) + +# if defined _MSC_VER +/* A compiler that supports __try/__except, as described in the page + "try-except statement" on microsoft.com + . + With __try/__except, we can use the multithread-safe exception handling. */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* Ensure that the invalid parameter handler in installed that raises a + software exception with code STATUS_GNULIB_INVALID_PARAMETER. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + gl_msvc_inval_ensure_handler (); \ + __try +# define CATCH_MSVC_INVAL \ + __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ + ? EXCEPTION_EXECUTE_HANDLER \ + : EXCEPTION_CONTINUE_SEARCH) +# define DONE_MSVC_INVAL \ + } \ + while (0) + +# else +/* Any compiler. + We can only use setjmp/longjmp. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +struct gl_msvc_inval_per_thread +{ + /* The restart that will resume execution at the code between + CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between + TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ + jmp_buf restart; + + /* Tells whether the contents of restart is valid. */ + int restart_valid; +}; + +/* Ensure that the invalid parameter handler in installed that passes + control to the gl_msvc_inval_restart if it is valid, or raises a + software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +/* Return a pointer to the per-thread data for the current thread. */ +extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + struct gl_msvc_inval_per_thread *msvc_inval_current; \ + gl_msvc_inval_ensure_handler (); \ + msvc_inval_current = gl_msvc_inval_current (); \ + /* First, initialize gl_msvc_inval_restart. */ \ + if (setjmp (msvc_inval_current->restart) == 0) \ + { \ + /* Then, mark it as valid. */ \ + msvc_inval_current->restart_valid = 1; +# define CATCH_MSVC_INVAL \ + /* Execution completed. \ + Mark gl_msvc_inval_restart as invalid. */ \ + msvc_inval_current->restart_valid = 0; \ + } \ + else \ + { \ + /* Execution triggered an invalid parameter notification. \ + Mark gl_msvc_inval_restart as invalid. */ \ + msvc_inval_current->restart_valid = 0; +# define DONE_MSVC_INVAL \ + } \ + } \ + while (0) + +# endif + +# endif + +#else +/* A platform that does not need to the invalid parameter handler, + or when SANE_LIBRARY_HANDLING is desired. */ + +/* The braces here avoid GCC warnings like + "warning: suggest explicit braces to avoid ambiguous 'else'". */ +# define TRY_MSVC_INVAL \ + do \ + { \ + if (1) +# define CATCH_MSVC_INVAL \ + else +# define DONE_MSVC_INVAL \ + } \ + while (0) + +#endif + +#endif /* _MSVC_INVAL_H */ diff --git a/include/libgnulib/msvc-nothrow.h b/include/libgnulib/msvc-nothrow.h new file mode 100755 index 0000000..121773d --- /dev/null +++ b/include/libgnulib/msvc-nothrow.h @@ -0,0 +1,56 @@ +/* Wrappers that don't throw invalid parameter notifications + with MSVC runtime libraries. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _MSVC_NOTHROW_H +#define _MSVC_NOTHROW_H + +/* With MSVC runtime libraries with the "invalid parameter handler" concept, + functions like fprintf(), dup2(), or close() crash when the caller passes + an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) + instead. + This file defines wrappers that turn such an invalid parameter notification + into an error code. */ + +/* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Get original declaration of _get_osfhandle. */ +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER + +/* Override _get_osfhandle. */ +extern intptr_t _gl_nothrow_get_osfhandle (int fd); +# define _get_osfhandle _gl_nothrow_get_osfhandle + +# endif + +# ifdef __cplusplus +} +# endif + +#endif + +#endif /* _MSVC_NOTHROW_H */ diff --git a/include/libgnulib/nan.h b/include/libgnulib/nan.h new file mode 100755 index 0000000..0a7622c --- /dev/null +++ b/include/libgnulib/nan.h @@ -0,0 +1,105 @@ +/* Macros for quiet not-a-number. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_NAN_H +#define _GL_NAN_H + +/* IBM z/OS supports both hexadecimal and IEEE floating-point formats. The + former does not support NaN and its isnan() implementation returns zero + for all values. */ +#if defined __MVS__ && defined __IBMC__ && !defined __BFP__ +# error "NaN is not supported with IBM's hexadecimal floating-point format; please re-compile with -qfloat=ieee" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* NaNf () returns a 'float' not-a-number. */ + +/* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke + on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. + PGI 16.10 complains. clang 13 on mips64 does incorrect constant-folding. */ +#if (defined __DECC || defined _MSC_VER \ + || (defined __MVS__ && defined __IBMC__) \ + || defined __PGI \ + || defined __mips__) +static float +NaNf () +{ + static float volatile zero = 0.0f; + return zero / zero; +} +#else +# define NaNf() (0.0f / 0.0f) +#endif + + +/* NaNd () returns a 'double' not-a-number. */ + +/* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke + on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. + PGI 16.10 complains. clang 13 on mips64 does incorrect constant-folding. */ +#if (defined __DECC || defined _MSC_VER \ + || (defined __MVS__ && defined __IBMC__) \ + || defined __PGI \ + || defined __mips__) +static double +NaNd () +{ + static double volatile zero = 0.0; + return zero / zero; +} +#else +# define NaNd() (0.0 / 0.0) +#endif + + +/* NaNl () returns a 'long double' not-a-number. */ + +/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the + runtime type conversion. + The Microsoft MSVC 9 compiler chokes on the expression 0.0L / 0.0L. + The IBM XL C compiler on z/OS complains. + PGI 16.10 complains. + Avoid possible incorrect constant-folding on mips. */ +#ifdef __sgi +static long double NaNl () +{ + double zero = 0.0; + return zero / zero; +} +#elif (defined _MSC_VER \ + || (defined __MVS__ && defined __IBMC__) \ + || defined __PGI \ + || defined __mips__) +static long double +NaNl () +{ + static long double volatile zero = 0.0L; + return zero / zero; +} +#else +# define NaNl() (0.0L / 0.0L) +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_NAN_H */ diff --git a/include/libgnulib/nonblocking.h b/include/libgnulib/nonblocking.h new file mode 100755 index 0000000..61a9398 --- /dev/null +++ b/include/libgnulib/nonblocking.h @@ -0,0 +1,60 @@ +/* Non-blocking I/O for pipe or socket descriptors. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _NONBLOCKING_H +#define _NONBLOCKING_H + +/* Non-blocking I/O is an I/O mode by which read(), write() calls avoid + blocking the current thread. When non-blocking is enabled: + - A read() call returns -1 with errno set to EAGAIN when no data or EOF + information is immediately available. + - A write() call returns -1 with errno set to EAGAIN when it cannot + transport the requested amount of data (but at most one pipe buffer) + without blocking. + Non-blocking I/O is most useful for character devices, pipes, and sockets. + Whether it also works on regular files and block devices is platform + dependent. + + There are three modern alternatives to non-blocking I/O: + - use select() or poll() followed by read() or write() if the descriptor + is ready, + - call read() or write() in separate threads, + - use interfaces. */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return 1 if I/O to the descriptor DESC is currently non-blocking, 0 + it is blocking, or -1 with errno set if fd is invalid or blocking + status cannot be determined (such as with sockets on mingw). */ +extern int get_nonblocking_flag (int desc); + +/* Specify the non-blocking flag for the descriptor DESC. + Return 0 upon success, or -1 with errno set upon failure. + The default depends on the presence of the O_NONBLOCK flag for files + or pipes opened with open() or on the presence of the SOCK_NONBLOCK + flag for sockets. */ +extern int set_nonblocking_flag (int desc, bool value); + + +#ifdef __cplusplus +} +#endif + +#endif /* _NONBLOCKING_H */ diff --git a/include/libgnulib/noreturn.h b/include/libgnulib/noreturn.h new file mode 100755 index 0000000..c428057 --- /dev/null +++ b/include/libgnulib/noreturn.h @@ -0,0 +1,116 @@ +/* Macros for declaring functions as non-returning. + + Copyright (C) 2017-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert and Bruno Haible. */ + +#ifndef _NORETURN_H +#define _NORETURN_H 1 + +/* A "non-returning" function is a function which cannot return normally. + It can transfer control only through longjmp(), throw (in C++), or similar + mechanisms. + + This file defines two macros _GL_NORETURN_FUNC and _GL_NORETURN_FUNCPTR, + that declare a function to be non-returning. + _GL_NORETURN_FUNC is for use in function declarations and function + definitions. + _GL_NORETURN_FUNCPTR is for use on function pointers. + + Comparison of this file with : + defines a macro (or keyword) _Noreturn that declares + a function to be non-returning. _Noreturn is only for use in function + declarations and function definitions. + Therefore, if the non-returning functions you have to declare are unlikely + to be accessed through function pointers, and if the efficiency with C++ + compilers other than g++, clang, MSVC++ is not an issue to you, you can use + module 'stdnoreturn' instead of this one, and _Noreturn instead of + _GL_NORETURN_FUNC. + */ + +/* Declares that a function is nonreturning. + Use in C only code: + _GL_NORETURN_FUNC extern void func (void); + extern _GL_NORETURN_FUNC void func (void); + extern void _GL_NORETURN_FUNC func (void); + Use in C++ only code for a function with C linkage: + extern "C" { _GL_NORETURN_FUNC void func (void); } + Use in C++ only code for a function with C++ linkage: + _GL_NORETURN_FUNC extern void func (void); + Use in C & C++ code for a function with C linkage: + #ifdef __cplusplus + extern "C" { + #endif + _GL_NORETURN_FUNC void func (void); + #ifdef __cplusplus + } + #endif + Use in C & C++ code for a function with current language linkage: + _GL_NORETURN_FUNC extern void func (void); + */ +#if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__)) \ + || defined __clang__ \ + || (0x5110 <= __SUNPRO_C) + /* For compatibility with _GL_NORETURN_FUNCPTR on clang, use + __attribute__((__noreturn__)), not _Noreturn. */ +# define _GL_NORETURN_FUNC __attribute__ ((__noreturn__)) +#elif 1200 <= _MSC_VER + /* Use MSVC specific syntax. */ +# define _GL_NORETURN_FUNC __declspec (noreturn) +#elif defined __cplusplus + /* Use ISO C++11 syntax when the compiler supports it. */ +# if (__cplusplus >= 201103 && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (_MSC_VER >= 1900) +# define _GL_NORETURN_FUNC [[noreturn]] + /* clang++ supports the _Noreturn keyword, but g++ doesn't. */ +# elif defined __clang__ +# define _GL_NORETURN_FUNC _Noreturn +# else +# define _GL_NORETURN_FUNC /* empty */ +# endif +#else + /* Use ISO C11 syntax when the compiler supports it. */ +# if __STDC_VERSION__ >= 201112 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) +# define _GL_NORETURN_FUNC _Noreturn +# else +# define _GL_NORETURN_FUNC /* empty */ +# endif +#endif + +/* Declares that a function is nonreturning. + Use in types and declarations that involve function pointers: + _GL_NORETURN_FUNCPTR void (*funcptr) (void); + */ +#if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__)) \ + || defined __clang__ \ + || (0x5110 <= __SUNPRO_C) +# define _GL_NORETURN_FUNCPTR __attribute__ ((__noreturn__)) +#else +# define _GL_NORETURN_FUNCPTR /* empty */ +#endif + +/* Comments about the compiler dependent language features: + - '_Noreturn' - standardized by ISO C11, available in C only (not in C++), + and not applicable to pointers. + - '[[noreturn]]' - standardized by ISO C++11, available in C++ only, + and not applicable to pointers. + - '__attribute__((__noreturn__))' - available in GCC and clang only, + both in C and C++. + - '__declspec(noreturn)' - available in MSVC only, + both in C and C++, not applicable to pointers. + */ + +#endif /* _NORETURN_H */ diff --git a/include/libgnulib/nproc.h b/include/libgnulib/nproc.h new file mode 100755 index 0000000..7054df5 --- /dev/null +++ b/include/libgnulib/nproc.h @@ -0,0 +1,46 @@ +/* Detect the number of processors. + + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Glen Lenker and Bruno Haible. */ + +/* Allow the use in C++ code. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* A "processor" in this context means a thread execution unit, that is either + - an execution core in a (possibly multi-core) chip, in a (possibly multi- + chip) module, in a single computer, or + - a thread execution unit inside a core + (hyper-threading, see ). + Which of the two definitions is used, is unspecified. */ + +enum nproc_query +{ + NPROC_ALL, /* total number of processors */ + NPROC_CURRENT, /* processors available to the current process */ + NPROC_CURRENT_OVERRIDABLE /* likewise, but overridable through the + OMP_NUM_THREADS environment variable */ +}; + +/* Return the total number of processors. The result is guaranteed to + be at least 1. */ +extern unsigned long int num_processors (enum nproc_query query); + +#ifdef __cplusplus +} +#endif /* C++ */ diff --git a/include/libgnulib/openat-priv.h b/include/libgnulib/openat-priv.h new file mode 100755 index 0000000..63093f4 --- /dev/null +++ b/include/libgnulib/openat-priv.h @@ -0,0 +1,74 @@ +/* Internals for openat-like functions. + + Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* written by Jim Meyering */ + +#ifndef _GL_HEADER_OPENAT_PRIV +#define _GL_HEADER_OPENAT_PRIV + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Maximum number of bytes that it is safe to allocate as a single + array on the stack, and that is known as a compile-time constant. + The assumption is that we'll touch the array very quickly, or a + temporary very near the array, provoking an out-of-memory trap. On + some operating systems, there is only one guard page for the stack, + and a page size can be as small as 4096 bytes. Subtract 64 in the + hope that this will let the compiler touch a nearby temporary and + provoke a trap. */ +#define SAFER_ALLOCA_MAX (4096 - 64) + +#define SAFER_ALLOCA(m) ((m) < SAFER_ALLOCA_MAX ? (m) : SAFER_ALLOCA_MAX) + +#if defined PATH_MAX +# define OPENAT_BUFFER_SIZE SAFER_ALLOCA (PATH_MAX) +#elif defined _XOPEN_PATH_MAX +# define OPENAT_BUFFER_SIZE SAFER_ALLOCA (_XOPEN_PATH_MAX) +#else +# define OPENAT_BUFFER_SIZE SAFER_ALLOCA (1024) +#endif + +char *openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file); + +/* Trying to access a BUILD_PROC_NAME file will fail on systems without + /proc support, and even on systems *with* ProcFS support. Return + nonzero if the failure may be legitimate, e.g., because /proc is not + readable, or the particular .../fd/N directory is not present. */ +#define EXPECTED_ERRNO(Errno) \ + ((Errno) == ENOTDIR || (Errno) == ENOENT \ + || (Errno) == EPERM || (Errno) == EACCES \ + || (Errno) == ENOSYS /* Solaris 8 */ \ + || (Errno) == EOPNOTSUPP /* FreeBSD */) + +/* Wrapper function shared among linkat and renameat. */ +int at_func2 (int fd1, char const *file1, + int fd2, char const *file2, + int (*func) (char const *file1, char const *file2)); + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_HEADER_OPENAT_PRIV */ diff --git a/include/libgnulib/openat.h b/include/libgnulib/openat.h new file mode 100755 index 0000000..b6b94f6 --- /dev/null +++ b/include/libgnulib/openat.h @@ -0,0 +1,137 @@ +/* provide a replacement openat function + Copyright (C) 2004-2006, 2008-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* written by Jim Meyering */ + +#ifndef _GL_HEADER_OPENAT +#define _GL_HEADER_OPENAT + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn, + _GL_ATTRIBUTE_DEPRECATED, HAVE_OPENAT. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#include +#include +#include + +_GL_INLINE_HEADER_BEGIN + +#ifdef __cplusplus +extern "C" { +#endif + + +#if !HAVE_OPENAT + +int openat_permissive (int fd, char const *file, int flags, mode_t mode, + int *cwd_errno); +bool openat_needs_fchdir (void); + +#else + +# define openat_permissive(Fd, File, Flags, Mode, Cwd_errno) \ + openat (Fd, File, Flags, Mode) +# define openat_needs_fchdir() false + +#endif + +_Noreturn void openat_restore_fail (int); +_Noreturn void openat_save_fail (int); + +/* Using these function names makes application code + slightly more readable than it would be with + fchownat (..., 0) or fchownat (..., AT_SYMLINK_NOFOLLOW). */ + +#if GNULIB_CHOWNAT + +# ifndef CHOWNAT_INLINE +# define CHOWNAT_INLINE _GL_INLINE +# endif + +CHOWNAT_INLINE int +chownat (int fd, char const *file, uid_t owner, gid_t group) +{ + return fchownat (fd, file, owner, group, 0); +} + +CHOWNAT_INLINE int +lchownat (int fd, char const *file, uid_t owner, gid_t group) +{ + return fchownat (fd, file, owner, group, AT_SYMLINK_NOFOLLOW); +} + +#endif + +#if GNULIB_CHMODAT + +# ifndef CHMODAT_INLINE +# define CHMODAT_INLINE _GL_INLINE +# endif + +CHMODAT_INLINE int +chmodat (int fd, char const *file, mode_t mode) +{ + return fchmodat (fd, file, mode, 0); +} + +CHMODAT_INLINE int +lchmodat (int fd, char const *file, mode_t mode) +{ + return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW); +} + +#endif + +#if GNULIB_STATAT + +# ifndef STATAT_INLINE +# define STATAT_INLINE _GL_INLINE +# endif + +_GL_ATTRIBUTE_DEPRECATED +STATAT_INLINE int +statat (int fd, char const *name, struct stat *st) +{ + return fstatat (fd, name, st, 0); +} + +_GL_ATTRIBUTE_DEPRECATED +STATAT_INLINE int +lstatat (int fd, char const *name, struct stat *st) +{ + return fstatat (fd, name, st, AT_SYMLINK_NOFOLLOW); +} + +#endif + +/* For now, there are no wrappers named laccessat or leuidaccessat, + since gnulib doesn't support faccessat(,AT_SYMLINK_NOFOLLOW) and + since access rights on symlinks are of limited utility. Likewise, + wrappers are not provided for accessat or euidaccessat, so as to + avoid dragging in -lgen on some platforms. */ + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_HEADER_OPENAT */ diff --git a/include/libgnulib/opendirat.h b/include/libgnulib/opendirat.h new file mode 100755 index 0000000..618fc00 --- /dev/null +++ b/include/libgnulib/opendirat.h @@ -0,0 +1,36 @@ +/* Open a directory relative to another directory. + + Copyright (C) 2018-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +DIR *opendirat (int, char const *, int, int *) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/os2-spawn.h b/include/libgnulib/os2-spawn.h new file mode 100755 index 0000000..e71791f --- /dev/null +++ b/include/libgnulib/os2-spawn.h @@ -0,0 +1,39 @@ +/* Auxiliary functions for the creation of subprocesses. OS/2 kLIBC API. + Copyright (C) 2001, 2003-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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 3 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, see . */ + +#ifndef _OS2_SPAWN_H +#define _OS2_SPAWN_H + +/* Duplicates a file handle, making the copy uninheritable and ensuring the + result is none of STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO. + Returns -1 for a file handle that is equivalent to closed. */ +extern int dup_safer_noinherit (int fd); + +/* Undoes the effect of TEMPFD = dup_safer_noinherit (ORIGFD); */ +extern void undup_safer_noinherit (int tempfd, int origfd); + +/* Prepares an argument vector before calling spawn(). */ +extern const char ** prepare_spawn (const char * const *argv, + char **mem_to_free); + +/* Creates a subprocess. */ +extern int spawnpvech (int mode, const char *progname, + const char * const *argv, const char * const *envp, + const char *currdir, + int stdin_fd, int stdout_fd, int stderr_fd); + +#endif /* _OS2_SPAWN_H */ diff --git a/include/libgnulib/pagealign_alloc.h b/include/libgnulib/pagealign_alloc.h new file mode 100755 index 0000000..5460d79 --- /dev/null +++ b/include/libgnulib/pagealign_alloc.h @@ -0,0 +1,62 @@ +/* Memory allocation aligned to system page boundaries. + + Copyright (C) 2005, 2008, 2010-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef _PAGEALIGN_ALLOC_H +#define _PAGEALIGN_ALLOC_H + +/* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_DEALLOC, + _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NONNULL, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Free a memory block. + PTR must be a non-NULL pointer returned by pagealign_alloc or + pagealign_xalloc. */ +extern void pagealign_free (void *ptr) + _GL_ATTRIBUTE_NONNULL ((1)); + +/* Allocate a block of memory of SIZE bytes, aligned on a system page + boundary. + If SIZE is not a multiple of the system page size, it will be rounded up + to the next multiple. + Return a pointer to the start of the memory block. Upon allocation failure, + return NULL and set errno. */ +extern void *pagealign_alloc (size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (pagealign_free, 1) + _GL_ATTRIBUTE_ALLOC_SIZE ((1)); + +/* Like pagealign_alloc, except it exits the program if the allocation + fails. */ +extern void *pagealign_xalloc (size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (pagealign_free, 1) + _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; + + +#ifdef __cplusplus +} +#endif + +#endif /* _PAGEALIGN_ALLOC_H */ diff --git a/include/libgnulib/parse-datetime.h b/include/libgnulib/parse-datetime.h new file mode 100755 index 0000000..784041f --- /dev/null +++ b/include/libgnulib/parse-datetime.h @@ -0,0 +1,40 @@ +/* Parse a string into an internal timestamp. + + Copyright (C) 1995, 1997-1998, 2003-2004, 2007, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +bool parse_datetime (struct timespec *restrict, + char const *, struct timespec const *); + +/* parse_datetime2 flag: if set, print debug/progress information to STDERR */ +#define PARSE_DATETIME_DEBUG 1 + +/* same as above, supporting additional flags */ +bool parse_datetime2 (struct timespec *restrict, + char const *, struct timespec const *, + unsigned int flags, timezone_t, char const *); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/parse-datetime.y b/include/libgnulib/parse-datetime.y new file mode 100755 index 0000000..c27ab60 --- /dev/null +++ b/include/libgnulib/parse-datetime.y @@ -0,0 +1,2439 @@ +%{ +/* Parse a string into an internal timestamp. + + Copyright (C) 1999-2000, 2002-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Originally written by Steven M. Bellovin while + at the University of North Carolina at Chapel Hill. Later tweaked by + a couple of people on Usenet. Completely overhauled by Rich $alz + and Jim Berets in August, 1990. + + Modified by Assaf Gordon in 2016 to add + debug output. + + Modified by Paul Eggert in 1999 to do the + right thing about local DST. Also modified by Paul Eggert + in 2004 to support nanosecond-resolution + timestamps, in 2004 to support TZ strings in dates, and in 2017 and 2020 to + check for integer overflow and to support longer-than-'long' + 'time_t' and 'tv_nsec'. */ + +#include + +#include "parse-datetime.h" + +#include "idx.h" +#include "intprops.h" +#include "timespec.h" + +/* There's no need to extend the stack, so there's no need to involve + alloca. */ +#define YYSTACK_USE_ALLOCA 0 + +/* Tell Bison how much stack space is needed. 20 should be plenty for + this grammar, which is not right recursive. Beware setting it too + high, since that might cause problems on machines whose + implementations have lame stack-overflow checking. */ +#define YYMAXDEPTH 20 +#define YYINITDEPTH YYMAXDEPTH + +#include +#include +#include +#include +#include +#include +#include + +#include "gettext.h" + +#define _(str) gettext (str) + +/* Bison's skeleton tests _STDLIB_H, while some stdlib.h headers + use _STDLIB_H_ as witness. Map the latter to the one bison uses. */ +/* FIXME: this is temporary. Remove when we have a mechanism to ensure + that the version we're using is fixed, too. */ +#ifdef _STDLIB_H_ +# undef _STDLIB_H +# define _STDLIB_H 1 +#endif + +/* Shift A right by B bits portably, by dividing A by 2**B and + truncating towards minus infinity. A and B should be free of side + effects, and B should be in the range 0 <= B <= INT_BITS - 2, where + INT_BITS is the number of useful bits in an int. GNU code can + assume that INT_BITS is at least 32. + + ISO C99 says that A >> B is implementation-defined if A < 0. Some + implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift + right in the usual way when A < 0, so SHR falls back on division if + ordinary A >> B doesn't seem to be the usual signed shift. */ +#define SHR(a, b) \ + (-1 >> 1 == -1 \ + ? (a) >> (b) \ + : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) + +#define HOUR(x) (60 * 60 * (x)) + +#define STREQ(a, b) (strcmp (a, b) == 0) + +/* Verify that time_t is an integer as POSIX requires, and that every + time_t value fits in intmax_t. Please file a bug report if these + assumptions are false on your platform. */ +static_assert (TYPE_IS_INTEGER (time_t)); +static_assert (!TYPE_SIGNED (time_t) || INTMAX_MIN <= TYPE_MINIMUM (time_t)); +static_assert (TYPE_MAXIMUM (time_t) <= INTMAX_MAX); + +/* True if N is out of range for time_t. */ +static bool +time_overflow (intmax_t n) +{ + return ! ((TYPE_SIGNED (time_t) ? TYPE_MINIMUM (time_t) <= n : 0 <= n) + && n <= TYPE_MAXIMUM (time_t)); +} + +/* Convert a possibly-signed character to an unsigned character. This is + a bit safer than casting to unsigned char, since it catches some type + errors that the cast doesn't. */ +static unsigned char to_uchar (char ch) { return ch; } + +static void _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)) +dbg_printf (char const *msg, ...) +{ + va_list args; + /* TODO: use gnulib's 'program_name' instead? */ + fputs ("date: ", stderr); + + va_start (args, msg); + vfprintf (stderr, msg, args); + va_end (args); +} + + +/* An integer value, and the number of digits in its textual + representation. */ +typedef struct +{ + bool negative; + intmax_t value; + idx_t digits; +} textint; + +/* An entry in the lexical lookup table. */ +typedef struct +{ + char const *name; + int type; + int value; +} table; + +/* Meridian: am, pm, or 24-hour style. */ +enum { MERam, MERpm, MER24 }; + +/* Maximum length of a time zone abbreviation, plus 1. */ +enum { TIME_ZONE_BUFSIZE = INT_STRLEN_BOUND (intmax_t) + sizeof ":MM:SS" }; + +/* A reasonable upper bound for the buffer used in debug output. */ +enum { DBGBUFSIZE = 100 }; + +enum { BILLION = 1000000000, LOG10_BILLION = 9 }; + +/* Relative times. */ +typedef struct +{ + /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ + intmax_t year; + intmax_t month; + intmax_t day; + intmax_t hour; + intmax_t minutes; + intmax_t seconds; + int ns; +} relative_time; + +#if HAVE_COMPOUND_LITERALS +# define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 }) +#else +static relative_time const RELATIVE_TIME_0; +#endif + +/* Information passed to and from the parser. */ +typedef struct +{ + /* The input string remaining to be parsed. */ + const char *input; + + /* N, if this is the Nth Tuesday. */ + intmax_t day_ordinal; + + /* Day of week; Sunday is 0. */ + int day_number; + + /* tm_isdst flag for the local zone. */ + int local_isdst; + + /* Time zone, in seconds east of UT. */ + int time_zone; + + /* Style used for time. */ + int meridian; + + /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds. */ + textint year; + intmax_t month; + intmax_t day; + intmax_t hour; + intmax_t minutes; + struct timespec seconds; /* includes nanoseconds */ + + /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ + relative_time rel; + + /* Presence or counts of nonterminals of various flavors parsed so far. */ + bool timespec_seen; + bool rels_seen; + idx_t dates_seen; + idx_t days_seen; + idx_t J_zones_seen; + idx_t local_zones_seen; + idx_t dsts_seen; + idx_t times_seen; + idx_t zones_seen; + bool year_seen; + +#ifdef GNULIB_PARSE_DATETIME2 + /* Print debugging output to stderr. */ + bool parse_datetime_debug; +#endif + + /* Which of the 'seen' parts have been printed when debugging. */ + bool debug_dates_seen; + bool debug_days_seen; + bool debug_local_zones_seen; + bool debug_times_seen; + bool debug_zones_seen; + bool debug_year_seen; + + /* The user specified explicit ordinal day value. */ + bool debug_ordinal_day_seen; + + /* Table of local time zone abbreviations, terminated by a null entry. */ + table local_time_zone_table[3]; + +#if !HAVE_STRUCT_TM_TM_ZONE + /* The abbreviations in LOCAL_TIME_ZONE_TABLE. */ + char tz_abbr[2][TIME_ZONE_BUFSIZE]; +#endif +} parser_control; + +static bool +debugging (parser_control const *pc) +{ +#ifdef GNULIB_PARSE_DATETIME2 + return pc->parse_datetime_debug; +#else + return false; +#endif +} + +union YYSTYPE; +static int yylex (union YYSTYPE *, parser_control *); +static void yyerror (parser_control const *, char const *); +static bool time_zone_hhmm (parser_control *, textint, intmax_t); + +/* Extract into *PC any date and time info from a string of digits + of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY, + YYYY, ...). */ +static void +digits_to_date_time (parser_control *pc, textint text_int) +{ + if (pc->dates_seen && ! pc->year.digits + && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits)) + { + pc->year_seen = true; + pc->year = text_int; + } + else + { + if (4 < text_int.digits) + { + pc->dates_seen++; + pc->day = text_int.value % 100; + pc->month = (text_int.value / 100) % 100; + pc->year.value = text_int.value / 10000; + pc->year.digits = text_int.digits - 4; + } + else + { + pc->times_seen++; + if (text_int.digits <= 2) + { + pc->hour = text_int.value; + pc->minutes = 0; + } + else + { + pc->hour = text_int.value / 100; + pc->minutes = text_int.value % 100; + } + pc->seconds = (struct timespec) {0}; + pc->meridian = MER24; + } + } +} + +/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). Return true + if successful, false if an overflow occurred. */ +static bool +apply_relative_time (parser_control *pc, relative_time rel, int factor) +{ + if (factor < 0 + ? (ckd_sub (&pc->rel.ns, pc->rel.ns, rel.ns) + | ckd_sub (&pc->rel.seconds, pc->rel.seconds, rel.seconds) + | ckd_sub (&pc->rel.minutes, pc->rel.minutes, rel.minutes) + | ckd_sub (&pc->rel.hour, pc->rel.hour, rel.hour) + | ckd_sub (&pc->rel.day, pc->rel.day, rel.day) + | ckd_sub (&pc->rel.month, pc->rel.month, rel.month) + | ckd_sub (&pc->rel.year, pc->rel.year, rel.year)) + : (ckd_add (&pc->rel.ns, pc->rel.ns, rel.ns) + | ckd_add (&pc->rel.seconds, pc->rel.seconds, rel.seconds) + | ckd_add (&pc->rel.minutes, pc->rel.minutes, rel.minutes) + | ckd_add (&pc->rel.hour, pc->rel.hour, rel.hour) + | ckd_add (&pc->rel.day, pc->rel.day, rel.day) + | ckd_add (&pc->rel.month, pc->rel.month, rel.month) + | ckd_add (&pc->rel.year, pc->rel.year, rel.year))) + return false; + pc->rels_seen = true; + return true; +} + +/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */ +static void +set_hhmmss (parser_control *pc, intmax_t hour, intmax_t minutes, + time_t sec, int nsec) +{ + pc->hour = hour; + pc->minutes = minutes; + pc->seconds = (struct timespec) { .tv_sec = sec, .tv_nsec = nsec }; +} + +/* Return a textual representation of the day ordinal/number values + in the parser_control struct (e.g., "last wed", "this tues", "thu"). */ +static const char * +str_days (parser_control *pc, char *buffer, int n) +{ + /* TODO: use relative_time_table for reverse lookup. */ + static char const ordinal_values[][11] = { + "last", + "this", + "next/first", + "(SECOND)", /* SECOND is commented out in relative_time_table. */ + "third", + "fourth", + "fifth", + "sixth", + "seventh", + "eight", + "ninth", + "tenth", + "eleventh", + "twelfth" + }; + + static char const days_values[][4] = { + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + }; + + int len; + + /* Don't add an ordinal prefix if the user didn't specify it + (e.g., "this wed" vs "wed"). */ + if (pc->debug_ordinal_day_seen) + { + /* Use word description if possible (e.g., -1 = last, 3 = third). */ + len = (-1 <= pc->day_ordinal && pc->day_ordinal <= 12 + ? snprintf (buffer, n, "%s", ordinal_values[pc->day_ordinal + 1]) + : snprintf (buffer, n, "%"PRIdMAX, pc->day_ordinal)); + } + else + { + buffer[0] = '\0'; + len = 0; + } + + /* Add the day name */ + if (0 <= pc->day_number && pc->day_number <= 6 && 0 <= len && len < n) + snprintf (buffer + len, n - len, &" %s"[len == 0], + days_values[pc->day_number]); + else + { + /* invalid day_number value - should never happen */ + } + return buffer; +} + +/* Convert a time zone to its string representation. */ + +static char const * +time_zone_str (int time_zone, char time_zone_buf[TIME_ZONE_BUFSIZE]) +{ + char *p = time_zone_buf; + char sign = time_zone < 0 ? '-' : '+'; + int hour = abs (time_zone / (60 * 60)); + p += sprintf (time_zone_buf, "%c%02d", sign, hour); + int offset_from_hour = abs (time_zone % (60 * 60)); + if (offset_from_hour != 0) + { + int mm = offset_from_hour / 60; + int ss = offset_from_hour % 60; + *p++ = ':'; + *p++ = '0' + mm / 10; + *p++ = '0' + mm % 10; + if (ss) + { + *p++ = ':'; + *p++ = '0' + ss / 10; + *p++ = '0' + ss % 10; + } + *p = '\0'; + } + return time_zone_buf; +} + +/* debugging: print the current time in the parser_control structure. + The parser will increment "*_seen" members for those which were parsed. + This function will print only newly seen parts. */ +static void +debug_print_current_time (char const *item, parser_control *pc) +{ + bool space = false; + + if (!debugging (pc)) + return; + + /* no newline, more items printed below */ + dbg_printf (_("parsed %s part: "), item); + + if (pc->dates_seen && !pc->debug_dates_seen) + { + /*TODO: use pc->year.negative? */ + fprintf (stderr, "(Y-M-D) %04"PRIdMAX"-%02"PRIdMAX"-%02"PRIdMAX, + pc->year.value, pc->month, pc->day); + pc->debug_dates_seen = true; + space = true; + } + + if (pc->year_seen != pc->debug_year_seen) + { + if (space) + fputc (' ', stderr); + fprintf (stderr, _("year: %04"PRIdMAX), pc->year.value); + + pc->debug_year_seen = pc->year_seen; + space = true; + } + + if (pc->times_seen && !pc->debug_times_seen) + { + intmax_t sec = pc->seconds.tv_sec; + fprintf (stderr, &" %02"PRIdMAX":%02"PRIdMAX":%02"PRIdMAX[!space], + pc->hour, pc->minutes, sec); + if (pc->seconds.tv_nsec != 0) + { + int nsec = pc->seconds.tv_nsec; + fprintf (stderr, ".%09d", nsec); + } + if (pc->meridian == MERpm) + fputs ("pm", stderr); + + pc->debug_times_seen = true; + space = true; + } + + if (pc->days_seen && !pc->debug_days_seen) + { + if (space) + fputc (' ', stderr); + char tmp[DBGBUFSIZE]; + fprintf (stderr, _("%s (day ordinal=%"PRIdMAX" number=%d)"), + str_days (pc, tmp, sizeof tmp), + pc->day_ordinal, pc->day_number); + pc->debug_days_seen = true; + space = true; + } + + /* local zone strings only change the DST settings, + not the timezone value. If seen, inform about the DST. */ + if (pc->local_zones_seen && !pc->debug_local_zones_seen) + { + fprintf (stderr, &" isdst=%d%s"[!space], + pc->local_isdst, pc->dsts_seen ? " DST" : ""); + pc->debug_local_zones_seen = true; + space = true; + } + + if (pc->zones_seen && !pc->debug_zones_seen) + { + char time_zone_buf[TIME_ZONE_BUFSIZE]; + fprintf (stderr, &" UTC%s"[!space], + time_zone_str (pc->time_zone, time_zone_buf)); + pc->debug_zones_seen = true; + space = true; + } + + if (pc->timespec_seen) + { + intmax_t sec = pc->seconds.tv_sec; + if (space) + fputc (' ', stderr); + fprintf (stderr, _("number of seconds: %"PRIdMAX), sec); + } + + fputc ('\n', stderr); +} + +/* Debugging: print the current relative values. */ + +static bool +print_rel_part (bool space, intmax_t val, char const *name) +{ + if (val == 0) + return space; + fprintf (stderr, &" %+"PRIdMAX" %s"[!space], val, name); + return true; +} + +static void +debug_print_relative_time (char const *item, parser_control const *pc) +{ + bool space = false; + + if (!debugging (pc)) + return; + + /* no newline, more items printed below */ + dbg_printf (_("parsed %s part: "), item); + + if (pc->rel.year == 0 && pc->rel.month == 0 && pc->rel.day == 0 + && pc->rel.hour == 0 && pc->rel.minutes == 0 && pc->rel.seconds == 0 + && pc->rel.ns == 0) + { + /* Special case: relative time of this/today/now */ + fputs (_("today/this/now\n"), stderr); + return; + } + + space = print_rel_part (space, pc->rel.year, "year(s)"); + space = print_rel_part (space, pc->rel.month, "month(s)"); + space = print_rel_part (space, pc->rel.day, "day(s)"); + space = print_rel_part (space, pc->rel.hour, "hour(s)"); + space = print_rel_part (space, pc->rel.minutes, "minutes"); + space = print_rel_part (space, pc->rel.seconds, "seconds"); + print_rel_part (space, pc->rel.ns, "nanoseconds"); + + fputc ('\n', stderr); +} + + + +%} + +/* We want a reentrant parser, even if the TZ manipulation and the calls to + localtime and gmtime are not reentrant. */ +%define api.pure +%parse-param { parser_control *pc } +%lex-param { parser_control *pc } + +/* This grammar has 31 shift/reduce conflicts. */ +%expect 31 + +%union +{ + intmax_t intval; + textint textintval; + struct timespec timespec; + relative_time rel; +} + +%token tAGO +%token tDST + +%token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT +%token tDAY_UNIT tDAY_SHIFT + +%token tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN +%token tMONTH tORDINAL tZONE + +%token tSNUMBER tUNUMBER +%token tSDECIMAL_NUMBER tUDECIMAL_NUMBER + +%type o_colon_minutes +%type seconds signed_seconds unsigned_seconds + +%type relunit relunit_snumber dayshift + +%% + +spec: + timespec + | items + ; + +timespec: + '@' seconds + { + pc->seconds = $2; + pc->timespec_seen = true; + debug_print_current_time (_("number of seconds"), pc); + } + ; + +items: + /* empty */ + | items item + ; + +item: + datetime + { + pc->times_seen++; pc->dates_seen++; + debug_print_current_time (_("datetime"), pc); + } + | time + { + pc->times_seen++; + debug_print_current_time (_("time"), pc); + } + | local_zone + { + pc->local_zones_seen++; + debug_print_current_time (_("local_zone"), pc); + } + | 'J' + { + pc->J_zones_seen++; + debug_print_current_time ("J", pc); + } + | zone + { + pc->zones_seen++; + debug_print_current_time (_("zone"), pc); + } + | date + { + pc->dates_seen++; + debug_print_current_time (_("date"), pc); + } + | day + { + pc->days_seen++; + debug_print_current_time (_("day"), pc); + } + | rel + { + debug_print_relative_time (_("relative"), pc); + } + | number + { + debug_print_current_time (_("number"), pc); + } + | hybrid + { + debug_print_relative_time (_("hybrid"), pc); + } + ; + +datetime: + iso_8601_datetime + ; + +iso_8601_datetime: + iso_8601_date 'T' iso_8601_time + ; + +time: + tUNUMBER tMERIDIAN + { + set_hhmmss (pc, $1.value, 0, 0, 0); + pc->meridian = $2; + } + | tUNUMBER ':' tUNUMBER tMERIDIAN + { + set_hhmmss (pc, $1.value, $3.value, 0, 0); + pc->meridian = $4; + } + | tUNUMBER ':' tUNUMBER ':' unsigned_seconds tMERIDIAN + { + set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); + pc->meridian = $6; + } + | iso_8601_time + ; + +iso_8601_time: + tUNUMBER zone_offset + { + set_hhmmss (pc, $1.value, 0, 0, 0); + pc->meridian = MER24; + } + | tUNUMBER ':' tUNUMBER o_zone_offset + { + set_hhmmss (pc, $1.value, $3.value, 0, 0); + pc->meridian = MER24; + } + | tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_zone_offset + { + set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); + pc->meridian = MER24; + } + ; + +o_zone_offset: + /* empty */ + | zone_offset + ; + +zone_offset: + tSNUMBER o_colon_minutes + { + pc->zones_seen++; + if (! time_zone_hhmm (pc, $1, $2)) YYABORT; + } + ; + +/* Local zone strings affect only the DST setting, and take effect + only if the current TZ setting is relevant. + + Example 1: + 'EEST' is parsed as tLOCAL_ZONE, as it relates to the effective TZ: + TZ='Europe/Helsinki' date -d '2016-06-30 EEST' + + Example 2: + 'EEST' is parsed as tDAYZONE: + TZ='Asia/Tokyo' date -d '2016-06-30 EEST' + + This is implemented by probing the next three calendar quarters + of the effective timezone and looking for DST changes - + if found, the timezone name (EEST) is inserted into + the lexical lookup table with type tLOCAL_ZONE. + (Search for 'quarter' comment in 'parse_datetime2'.) +*/ +local_zone: + tLOCAL_ZONE + { pc->local_isdst = $1; } + | tLOCAL_ZONE tDST + { + pc->local_isdst = 1; + pc->dsts_seen++; + } + ; + +/* Note 'T' is a special case, as it is used as the separator in ISO + 8601 date and time of day representation. */ +zone: + tZONE + { pc->time_zone = $1; } + | 'T' + { pc->time_zone = -HOUR (7); } + | tZONE relunit_snumber + { pc->time_zone = $1; + if (! apply_relative_time (pc, $2, 1)) YYABORT; + debug_print_relative_time (_("relative"), pc); + } + | 'T' relunit_snumber + { pc->time_zone = -HOUR (7); + if (! apply_relative_time (pc, $2, 1)) YYABORT; + debug_print_relative_time (_("relative"), pc); + } + | tZONE tSNUMBER o_colon_minutes + { if (! time_zone_hhmm (pc, $2, $3)) YYABORT; + if (ckd_add (&pc->time_zone, pc->time_zone, $1)) YYABORT; } + | tDAYZONE + { pc->time_zone = $1 + 60 * 60; } + | tZONE tDST + { pc->time_zone = $1 + 60 * 60; } + ; + +day: + tDAY + { + pc->day_ordinal = 0; + pc->day_number = $1; + } + | tDAY ',' + { + pc->day_ordinal = 0; + pc->day_number = $1; + } + | tORDINAL tDAY + { + pc->day_ordinal = $1; + pc->day_number = $2; + pc->debug_ordinal_day_seen = true; + } + | tUNUMBER tDAY + { + pc->day_ordinal = $1.value; + pc->day_number = $2; + pc->debug_ordinal_day_seen = true; + } + ; + +date: + tUNUMBER '/' tUNUMBER + { + pc->month = $1.value; + pc->day = $3.value; + } + | tUNUMBER '/' tUNUMBER '/' tUNUMBER + { + /* Interpret as YYYY/MM/DD if the first value has 4 or more digits, + otherwise as MM/DD/YY. + The goal in recognizing YYYY/MM/DD is solely to support legacy + machine-generated dates like those in an RCS log listing. If + you want portability, use the ISO 8601 format. */ + if (4 <= $1.digits) + { + if (debugging (pc)) + { + intmax_t digits = $1.digits; + dbg_printf (_("warning: value %"PRIdMAX" has %"PRIdMAX" digits. " + "Assuming YYYY/MM/DD\n"), + $1.value, digits); + } + + pc->year = $1; + pc->month = $3.value; + pc->day = $5.value; + } + else + { + if (debugging (pc)) + dbg_printf (_("warning: value %"PRIdMAX" has less than 4 digits. " + "Assuming MM/DD/YY[YY]\n"), + $1.value); + + pc->month = $1.value; + pc->day = $3.value; + pc->year = $5; + } + } + | tUNUMBER tMONTH tSNUMBER + { + /* E.g., 17-JUN-1992. */ + pc->day = $1.value; + pc->month = $2; + if (ckd_sub (&pc->year.value, 0, $3.value)) YYABORT; + pc->year.digits = $3.digits; + } + | tMONTH tSNUMBER tSNUMBER + { + /* E.g., JUN-17-1992. */ + pc->month = $1; + if (ckd_sub (&pc->day, 0, $2.value)) YYABORT; + if (ckd_sub (&pc->year.value, 0, $3.value)) YYABORT; + pc->year.digits = $3.digits; + } + | tMONTH tUNUMBER + { + pc->month = $1; + pc->day = $2.value; + } + | tMONTH tUNUMBER ',' tUNUMBER + { + pc->month = $1; + pc->day = $2.value; + pc->year = $4; + } + | tUNUMBER tMONTH + { + pc->day = $1.value; + pc->month = $2; + } + | tUNUMBER tMONTH tUNUMBER + { + pc->day = $1.value; + pc->month = $2; + pc->year = $3; + } + | iso_8601_date + ; + +iso_8601_date: + tUNUMBER tSNUMBER tSNUMBER + { + /* ISO 8601 format. YYYY-MM-DD. */ + pc->year = $1; + if (ckd_sub (&pc->month, 0, $2.value)) YYABORT; + if (ckd_sub (&pc->day, 0, $3.value)) YYABORT; + } + ; + +rel: + relunit tAGO + { if (! apply_relative_time (pc, $1, $2)) YYABORT; } + | relunit + { if (! apply_relative_time (pc, $1, 1)) YYABORT; } + | dayshift + { if (! apply_relative_time (pc, $1, 1)) YYABORT; } + ; + +relunit: + tORDINAL tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = $1; } + | tUNUMBER tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = $1.value; } + | tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = 1; } + | tORDINAL tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = $1; } + | tUNUMBER tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = $1.value; } + | tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = 1; } + | tORDINAL tDAY_UNIT + { $$ = RELATIVE_TIME_0; + if (ckd_mul (&$$.day, $1, $2)) YYABORT; } + | tUNUMBER tDAY_UNIT + { $$ = RELATIVE_TIME_0; + if (ckd_mul (&$$.day, $1.value, $2)) YYABORT; } + | tDAY_UNIT + { $$ = RELATIVE_TIME_0; $$.day = $1; } + | tORDINAL tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = $1; } + | tUNUMBER tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } + | tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = 1; } + | tORDINAL tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = $1; } + | tUNUMBER tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } + | tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = 1; } + | tORDINAL tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1; } + | tUNUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } + | tSDECIMAL_NUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } + | tUDECIMAL_NUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } + | tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = 1; } + | relunit_snumber + ; + +relunit_snumber: + tSNUMBER tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = $1.value; } + | tSNUMBER tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = $1.value; } + | tSNUMBER tDAY_UNIT + { $$ = RELATIVE_TIME_0; + if (ckd_mul (&$$.day, $1.value, $2)) YYABORT; } + | tSNUMBER tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } + | tSNUMBER tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } + | tSNUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } + ; + +dayshift: + tDAY_SHIFT + { $$ = RELATIVE_TIME_0; $$.day = $1; } + ; + +seconds: signed_seconds | unsigned_seconds; + +signed_seconds: + tSDECIMAL_NUMBER + | tSNUMBER + { if (time_overflow ($1.value)) YYABORT; + $$ = (struct timespec) { .tv_sec = $1.value }; } + ; + +unsigned_seconds: + tUDECIMAL_NUMBER + | tUNUMBER + { if (time_overflow ($1.value)) YYABORT; + $$ = (struct timespec) { .tv_sec = $1.value }; } + ; + +number: + tUNUMBER + { digits_to_date_time (pc, $1); } + ; + +hybrid: + tUNUMBER relunit_snumber + { + /* Hybrid all-digit and relative offset, so that we accept e.g., + "YYYYMMDD +N days" as well as "YYYYMMDD N days". */ + digits_to_date_time (pc, $1); + if (! apply_relative_time (pc, $2, 1)) YYABORT; + } + ; + +o_colon_minutes: + /* empty */ + { $$ = -1; } + | ':' tUNUMBER + { $$ = $2.value; } + ; + +%% + +static table const meridian_table[] = +{ + { "AM", tMERIDIAN, MERam }, + { "A.M.", tMERIDIAN, MERam }, + { "PM", tMERIDIAN, MERpm }, + { "P.M.", tMERIDIAN, MERpm }, + { NULL, 0, 0 } +}; + +static table const dst_table[] = +{ + { "DST", tDST, 0 } +}; + +static table const month_and_day_table[] = +{ + { "JANUARY", tMONTH, 1 }, + { "FEBRUARY", tMONTH, 2 }, + { "MARCH", tMONTH, 3 }, + { "APRIL", tMONTH, 4 }, + { "MAY", tMONTH, 5 }, + { "JUNE", tMONTH, 6 }, + { "JULY", tMONTH, 7 }, + { "AUGUST", tMONTH, 8 }, + { "SEPTEMBER",tMONTH, 9 }, + { "SEPT", tMONTH, 9 }, + { "OCTOBER", tMONTH, 10 }, + { "NOVEMBER", tMONTH, 11 }, + { "DECEMBER", tMONTH, 12 }, + { "SUNDAY", tDAY, 0 }, + { "MONDAY", tDAY, 1 }, + { "TUESDAY", tDAY, 2 }, + { "TUES", tDAY, 2 }, + { "WEDNESDAY",tDAY, 3 }, + { "WEDNES", tDAY, 3 }, + { "THURSDAY", tDAY, 4 }, + { "THUR", tDAY, 4 }, + { "THURS", tDAY, 4 }, + { "FRIDAY", tDAY, 5 }, + { "SATURDAY", tDAY, 6 }, + { NULL, 0, 0 } +}; + +static table const time_units_table[] = +{ + { "YEAR", tYEAR_UNIT, 1 }, + { "MONTH", tMONTH_UNIT, 1 }, + { "FORTNIGHT",tDAY_UNIT, 14 }, + { "WEEK", tDAY_UNIT, 7 }, + { "DAY", tDAY_UNIT, 1 }, + { "HOUR", tHOUR_UNIT, 1 }, + { "MINUTE", tMINUTE_UNIT, 1 }, + { "MIN", tMINUTE_UNIT, 1 }, + { "SECOND", tSEC_UNIT, 1 }, + { "SEC", tSEC_UNIT, 1 }, + { NULL, 0, 0 } +}; + +/* Assorted relative-time words. */ +static table const relative_time_table[] = +{ + { "TOMORROW", tDAY_SHIFT, 1 }, + { "YESTERDAY",tDAY_SHIFT, -1 }, + { "TODAY", tDAY_SHIFT, 0 }, + { "NOW", tDAY_SHIFT, 0 }, + { "LAST", tORDINAL, -1 }, + { "THIS", tORDINAL, 0 }, + { "NEXT", tORDINAL, 1 }, + { "FIRST", tORDINAL, 1 }, +/*{ "SECOND", tORDINAL, 2 }, */ + { "THIRD", tORDINAL, 3 }, + { "FOURTH", tORDINAL, 4 }, + { "FIFTH", tORDINAL, 5 }, + { "SIXTH", tORDINAL, 6 }, + { "SEVENTH", tORDINAL, 7 }, + { "EIGHTH", tORDINAL, 8 }, + { "NINTH", tORDINAL, 9 }, + { "TENTH", tORDINAL, 10 }, + { "ELEVENTH", tORDINAL, 11 }, + { "TWELFTH", tORDINAL, 12 }, + { "AGO", tAGO, -1 }, + { "HENCE", tAGO, 1 }, + { NULL, 0, 0 } +}; + +/* The universal time zone table. These labels can be used even for + timestamps that would not otherwise be valid, e.g., GMT timestamps + oin London during summer. */ +static table const universal_time_zone_table[] = +{ + { "GMT", tZONE, HOUR ( 0) }, /* Greenwich Mean */ + { "UT", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */ + { "UTC", tZONE, HOUR ( 0) }, + { NULL, 0, 0 } +}; + +/* The time zone table. This table is necessarily incomplete, as time + zone abbreviations are ambiguous; e.g., Australians interpret "EST" + as Eastern time in Australia, not as US Eastern Standard Time. + You cannot rely on parse_datetime to handle arbitrary time zone + abbreviations; use numeric abbreviations like "-0500" instead. */ +static table const time_zone_table[] = +{ + { "WET", tZONE, HOUR ( 0) }, /* Western European */ + { "WEST", tDAYZONE, HOUR ( 0) }, /* Western European Summer */ + { "BST", tDAYZONE, HOUR ( 0) }, /* British Summer */ + { "ART", tZONE, -HOUR ( 3) }, /* Argentina */ + { "BRT", tZONE, -HOUR ( 3) }, /* Brazil */ + { "BRST", tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */ + { "NST", tZONE, -(HOUR ( 3) + 30 * 60) }, /* Newfoundland Standard */ + { "NDT", tDAYZONE,-(HOUR ( 3) + 30 * 60) }, /* Newfoundland Daylight */ + { "AST", tZONE, -HOUR ( 4) }, /* Atlantic Standard */ + { "ADT", tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */ + { "CLT", tZONE, -HOUR ( 4) }, /* Chile */ + { "CLST", tDAYZONE, -HOUR ( 4) }, /* Chile Summer */ + { "EST", tZONE, -HOUR ( 5) }, /* Eastern Standard */ + { "EDT", tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */ + { "CST", tZONE, -HOUR ( 6) }, /* Central Standard */ + { "CDT", tDAYZONE, -HOUR ( 6) }, /* Central Daylight */ + { "MST", tZONE, -HOUR ( 7) }, /* Mountain Standard */ + { "MDT", tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */ + { "PST", tZONE, -HOUR ( 8) }, /* Pacific Standard */ + { "PDT", tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */ + { "AKST", tZONE, -HOUR ( 9) }, /* Alaska Standard */ + { "AKDT", tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */ + { "HST", tZONE, -HOUR (10) }, /* Hawaii Standard */ + { "HAST", tZONE, -HOUR (10) }, /* Hawaii-Aleutian Standard */ + { "HADT", tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */ + { "SST", tZONE, -HOUR (12) }, /* Samoa Standard */ + { "WAT", tZONE, HOUR ( 1) }, /* West Africa */ + { "CET", tZONE, HOUR ( 1) }, /* Central European */ + { "CEST", tDAYZONE, HOUR ( 1) }, /* Central European Summer */ + { "MET", tZONE, HOUR ( 1) }, /* Middle European */ + { "MEZ", tZONE, HOUR ( 1) }, /* Middle European */ + { "MEST", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ + { "MESZ", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ + { "EET", tZONE, HOUR ( 2) }, /* Eastern European */ + { "EEST", tDAYZONE, HOUR ( 2) }, /* Eastern European Summer */ + { "CAT", tZONE, HOUR ( 2) }, /* Central Africa */ + { "SAST", tZONE, HOUR ( 2) }, /* South Africa Standard */ + { "EAT", tZONE, HOUR ( 3) }, /* East Africa */ + { "MSK", tZONE, HOUR ( 3) }, /* Moscow */ + { "MSD", tDAYZONE, HOUR ( 3) }, /* Moscow Daylight */ + { "IST", tZONE, (HOUR ( 5) + 30 * 60) }, /* India Standard */ + { "SGT", tZONE, HOUR ( 8) }, /* Singapore */ + { "KST", tZONE, HOUR ( 9) }, /* Korea Standard */ + { "JST", tZONE, HOUR ( 9) }, /* Japan Standard */ + { "GST", tZONE, HOUR (10) }, /* Guam Standard */ + { "NZST", tZONE, HOUR (12) }, /* New Zealand Standard */ + { "NZDT", tDAYZONE, HOUR (12) }, /* New Zealand Daylight */ + { NULL, 0, 0 } +}; + +/* Military time zone table. + + RFC 822 got these backwards, but RFC 5322 makes the incorrect + treatment optional, so do them the right way here. + + 'J' is special, as it is local time. + 'T' is also special, as it is the separator in ISO + 8601 date and time of day representation. */ +static table const military_table[] = +{ + { "A", tZONE, HOUR ( 1) }, + { "B", tZONE, HOUR ( 2) }, + { "C", tZONE, HOUR ( 3) }, + { "D", tZONE, HOUR ( 4) }, + { "E", tZONE, HOUR ( 5) }, + { "F", tZONE, HOUR ( 6) }, + { "G", tZONE, HOUR ( 7) }, + { "H", tZONE, HOUR ( 8) }, + { "I", tZONE, HOUR ( 9) }, + { "J", 'J', 0 }, + { "K", tZONE, HOUR (10) }, + { "L", tZONE, HOUR (11) }, + { "M", tZONE, HOUR (12) }, + { "N", tZONE, -HOUR ( 1) }, + { "O", tZONE, -HOUR ( 2) }, + { "P", tZONE, -HOUR ( 3) }, + { "Q", tZONE, -HOUR ( 4) }, + { "R", tZONE, -HOUR ( 5) }, + { "S", tZONE, -HOUR ( 6) }, + { "T", 'T', 0 }, + { "U", tZONE, -HOUR ( 8) }, + { "V", tZONE, -HOUR ( 9) }, + { "W", tZONE, -HOUR (10) }, + { "X", tZONE, -HOUR (11) }, + { "Y", tZONE, -HOUR (12) }, + { "Z", tZONE, HOUR ( 0) }, + { NULL, 0, 0 } +}; + + + +/* Convert a time zone expressed as HH:MM into an integer count of + seconds. If MM is negative, then S is of the form HHMM and needs + to be picked apart; otherwise, S is of the form HH. As specified in + https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03, allow + only valid TZ range, and consider first two digits as hours, if no + minutes specified. Return true if successful. */ + +static bool +time_zone_hhmm (parser_control *pc, textint s, intmax_t mm) +{ + intmax_t n_minutes; + bool overflow = false; + + /* If the length of S is 1 or 2 and no minutes are specified, + interpret it as a number of hours. */ + if (s.digits <= 2 && mm < 0) + s.value *= 100; + + if (mm < 0) + n_minutes = (s.value / 100) * 60 + s.value % 100; + else + { + overflow |= ckd_mul (&n_minutes, s.value, 60); + overflow |= (s.negative + ? ckd_sub (&n_minutes, n_minutes, mm) + : ckd_add (&n_minutes, n_minutes, mm)); + } + + if (overflow || ! (-24 * 60 <= n_minutes && n_minutes <= 24 * 60)) + return false; + pc->time_zone = n_minutes * 60; + return true; +} + +static int +to_hour (intmax_t hours, int meridian) +{ + switch (meridian) + { + default: /* Pacify GCC. */ + case MER24: + return 0 <= hours && hours < 24 ? hours : -1; + case MERam: + return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1; + case MERpm: + return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1; + } +} + +enum { TM_YEAR_BASE = 1900 }; +enum { TM_YEAR_BUFSIZE = INT_BUFSIZE_BOUND (int) + 1 }; + +/* Convert TM_YEAR, a year minus 1900, to a string that is numerically + correct even if subtracting 1900 would overflow. */ + +static char const * +tm_year_str (int tm_year, char buf[TM_YEAR_BUFSIZE]) +{ + static_assert (TM_YEAR_BASE % 100 == 0); + sprintf (buf, &"-%02d%02d"[-TM_YEAR_BASE <= tm_year], + abs (tm_year / 100 + TM_YEAR_BASE / 100), + abs (tm_year % 100)); + return buf; +} + +/* Convert a text year number to a year minus 1900, working correctly + even if the input is in the range INT_MAX .. INT_MAX + 1900 - 1. */ + +static bool +to_tm_year (textint textyear, bool debug, int *tm_year) +{ + intmax_t year = textyear.value; + + /* XPG4 suggests that years 00-68 map to 2000-2068, and + years 69-99 map to 1969-1999. */ + if (0 <= year && textyear.digits == 2) + { + year += year < 69 ? 2000 : 1900; + if (debug) + dbg_printf (_("warning: adjusting year value %"PRIdMAX + " to %"PRIdMAX"\n"), + textyear.value, year); + } + + if (year < 0 + ? ckd_sub (tm_year, -TM_YEAR_BASE, year) + : ckd_sub (tm_year, year, TM_YEAR_BASE)) + { + if (debug) + dbg_printf (_("error: out-of-range year %"PRIdMAX"\n"), year); + return false; + } + + return true; +} + +static table const * _GL_ATTRIBUTE_PURE +lookup_zone (parser_control const *pc, char const *name) +{ + table const *tp; + + for (tp = universal_time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + /* Try local zone abbreviations before those in time_zone_table, as + the local ones are more likely to be right. */ + for (tp = pc->local_time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + for (tp = time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + return NULL; +} + +#if ! HAVE_STRUCT_TM_TM_GMTOFF +/* Yield the difference between *A and *B, + measured in seconds, ignoring leap seconds. + The body of this function is taken directly from the GNU C Library; + see strftime.c. */ +static int +tm_diff (const struct tm *a, const struct tm *b) +{ + /* Compute intervening leap days correctly even if year is negative. + Take care to avoid int overflow in leap day calculations, + but it's OK to assume that A and B are close to each other. */ + int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); + int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); + int a100 = a4 / 25 - (a4 % 25 < 0); + int b100 = b4 / 25 - (b4 % 25 < 0); + int a400 = SHR (a100, 2); + int b400 = SHR (b100, 2); + int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); + int years = a->tm_year - b->tm_year; + int days = (365 * years + intervening_leap_days + + (a->tm_yday - b->tm_yday)); + return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + + (a->tm_min - b->tm_min)) + + (a->tm_sec - b->tm_sec)); +} +#endif + +static table const * +lookup_word (parser_control const *pc, char *word) +{ + char *p; + char *q; + idx_t wordlen; + table const *tp; + bool period_found; + bool abbrev; + + /* Make it uppercase. */ + for (p = word; *p; p++) + *p = c_toupper (to_uchar (*p)); + + for (tp = meridian_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* See if we have an abbreviation for a month. */ + wordlen = strlen (word); + abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.'); + + for (tp = month_and_day_table; tp->name; tp++) + if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0) + return tp; + + if ((tp = lookup_zone (pc, word))) + return tp; + + if (strcmp (word, dst_table[0].name) == 0) + return dst_table; + + for (tp = time_units_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* Strip off any plural and try the units table again. */ + if (word[wordlen - 1] == 'S') + { + word[wordlen - 1] = '\0'; + for (tp = time_units_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + word[wordlen - 1] = 'S'; /* For "this" in relative_time_table. */ + } + + for (tp = relative_time_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* Military time zones. */ + if (wordlen == 1) + for (tp = military_table; tp->name; tp++) + if (word[0] == tp->name[0]) + return tp; + + /* Drop out any periods and try the time zone table again. */ + for (period_found = false, p = q = word; (*p = *q); q++) + if (*q == '.') + period_found = true; + else + p++; + if (period_found && (tp = lookup_zone (pc, word))) + return tp; + + return NULL; +} + +static int +yylex (union YYSTYPE *lvalp, parser_control *pc) +{ + unsigned char c; + + for (;;) + { + while (c = *pc->input, c_isspace (c)) + pc->input++; + + if (c_isdigit (c) || c == '-' || c == '+') + { + char const *p = pc->input; + int sign; + if (c == '-' || c == '+') + { + sign = c == '-' ? -1 : 1; + while (c = *(pc->input = ++p), c_isspace (c)) + continue; + if (! c_isdigit (c)) + /* skip the '-' sign */ + continue; + } + else + sign = 0; + + time_t value = 0; + do + { + if (ckd_mul (&value, value, 10)) + return '?'; + if (ckd_add (&value, value, sign < 0 ? '0' - c : c - '0')) + return '?'; + c = *++p; + } + while (c_isdigit (c)); + + if ((c == '.' || c == ',') && c_isdigit (p[1])) + { + time_t s = value; + int digits; + + /* Accumulate fraction, to ns precision. */ + p++; + int ns = *p++ - '0'; + for (digits = 2; digits <= LOG10_BILLION; digits++) + { + ns *= 10; + if (c_isdigit (*p)) + ns += *p++ - '0'; + } + + /* Skip excess digits, truncating toward -Infinity. */ + if (sign < 0) + for (; c_isdigit (*p); p++) + if (*p != '0') + { + ns++; + break; + } + while (c_isdigit (*p)) + p++; + + /* Adjust to the timespec convention, which is that + tv_nsec is always a positive offset even if tv_sec is + negative. */ + if (sign < 0 && ns) + { + if (ckd_sub (&s, s, 1)) + return '?'; + ns = BILLION - ns; + } + + lvalp->timespec = (struct timespec) { .tv_sec = s, + .tv_nsec = ns }; + pc->input = p; + return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER; + } + else + { + lvalp->textintval.negative = sign < 0; + lvalp->textintval.value = value; + lvalp->textintval.digits = p - pc->input; + pc->input = p; + return sign ? tSNUMBER : tUNUMBER; + } + } + + if (c_isalpha (c)) + { + char buff[20]; + char *p = buff; + table const *tp; + + do + { + if (p < buff + sizeof buff - 1) + *p++ = c; + c = *++pc->input; + } + while (c_isalpha (c) || c == '.'); + + *p = '\0'; + tp = lookup_word (pc, buff); + if (! tp) + { + if (debugging (pc)) + dbg_printf (_("error: unknown word '%s'\n"), buff); + return '?'; + } + lvalp->intval = tp->value; + return tp->type; + } + + if (c != '(') + return to_uchar (*pc->input++); + + idx_t count = 0; + do + { + c = *pc->input++; + if (c == '\0') + return c; + if (c == '(') + count++; + else if (c == ')') + count--; + } + while (count != 0); + } +} + +/* Do nothing if the parser reports an error. */ +static void +yyerror (_GL_UNUSED parser_control const *pc, + _GL_UNUSED char const *s) +{ +} + +/* If *TM0 is the old and *TM1 is the new value of a struct tm after + passing it to mktime_z, return true if it's OK. It's not OK if + mktime failed or if *TM0 has out-of-range mainline members. + The caller should set TM1->tm_wday to -1 before calling mktime, + as a negative tm_wday is how mktime failure is inferred. */ + +static bool +mktime_ok (struct tm const *tm0, struct tm const *tm1) +{ + if (tm1->tm_wday < 0) + return false; + + return ! ((tm0->tm_sec ^ tm1->tm_sec) + | (tm0->tm_min ^ tm1->tm_min) + | (tm0->tm_hour ^ tm1->tm_hour) + | (tm0->tm_mday ^ tm1->tm_mday) + | (tm0->tm_mon ^ tm1->tm_mon) + | (tm0->tm_year ^ tm1->tm_year)); +} + +/* Populate PC's local time zone table with information from TM. */ + +static void +populate_local_time_zone_table (parser_control *pc, struct tm const *tm) +{ + bool first_entry_exists = !!pc->local_time_zone_table[0].name; + + /* The table entry to be filled in. There are only two, so this is + the first entry if it is missing, the second entry otherwise. */ + table *e = &pc->local_time_zone_table[first_entry_exists]; + + e->type = tLOCAL_ZONE; + e->value = tm->tm_isdst; + + char const *zone = NULL; +#if HAVE_STRUCT_TM_TM_ZONE + if (tm->tm_zone[0]) + zone = tm->tm_zone; +#else + char *tz_abbr = pc->tz_abbr[first_entry_exists]; + if (strftime (tz_abbr, TIME_ZONE_BUFSIZE, "%Z", tm)) + zone = tz_abbr; +#endif + e->name = zone; + e[1].name = NULL; +} + +/* Debugging: format a 'struct tm' into a buffer, taking the parser's + timezone information into account (if pc != NULL). */ +static char const * +debug_strfdatetime (struct tm const *tm, parser_control const *pc, + char *buf, int n) +{ + /* TODO: + 1. find an optimal way to print date string in a clear and unambiguous + format. Currently, always add '(Y-M-D)' prefix. + Consider '2016y01m10d' or 'year(2016) month(01) day(10)'. + + If the user needs debug printing, it means he/she already having + issues with the parsing - better to avoid formats that could + be mis-interpreted (e.g., just YYYY-MM-DD). + + 2. Print timezone information ? + + 3. Print DST information ? + + 4. Print nanosecond information ? + + NOTE: + Printed date/time values might not be valid, e.g., '2016-02-31' + or '2016-19-2016' . These are the values as parsed from the user + string, before validation. + */ + int m = strftime (buf, n, "(Y-M-D) %Y-%m-%d %H:%M:%S", tm); + + /* If parser_control information was provided (for timezone), + and there's enough space in the buffer, add timezone info. */ + if (pc && m < n && pc->zones_seen) + { + int tz = pc->time_zone; + + /* Account for DST if tLOCAL_ZONE was seen. */ + if (pc->local_zones_seen && !pc->zones_seen && 0 < pc->local_isdst) + tz += 60 * 60; + + char time_zone_buf[TIME_ZONE_BUFSIZE]; + snprintf (&buf[m], n - m, " TZ=%s", time_zone_str (tz, time_zone_buf)); + } + return buf; +} + +static char const * +debug_strfdate (struct tm const *tm, char *buf, int n) +{ + char tm_year_buf[TM_YEAR_BUFSIZE]; + snprintf (buf, n, "(Y-M-D) %s-%02d-%02d", + tm_year_str (tm->tm_year, tm_year_buf), + tm->tm_mon + 1, tm->tm_mday); + return buf; +} + +static char const * +debug_strftime (struct tm const *tm, char *buf, int n) +{ + snprintf (buf, n, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); + return buf; +} + +/* If mktime_ok failed, display the failed time values, + and provide possible hints. Example output: + + date: error: invalid date/time value: + date: user provided time: '(Y-M-D) 2006-04-02 02:45:00' + date: normalized time: '(Y-M-D) 2006-04-02 03:45:00' + date: __ + date: possible reasons: + date: nonexistent due to daylight-saving time; + date: numeric values overflow; + date: missing timezone; + */ +static void +debug_mktime_not_ok (struct tm const *tm0, struct tm const *tm1, + parser_control const *pc, bool time_zone_seen) +{ + /* TODO: handle t == -1 (as in 'mktime_ok'). */ + char tmp[DBGBUFSIZE]; + int i; + const bool eq_sec = (tm0->tm_sec == tm1->tm_sec); + const bool eq_min = (tm0->tm_min == tm1->tm_min); + const bool eq_hour = (tm0->tm_hour == tm1->tm_hour); + const bool eq_mday = (tm0->tm_mday == tm1->tm_mday); + const bool eq_month = (tm0->tm_mon == tm1->tm_mon); + const bool eq_year = (tm0->tm_year == tm1->tm_year); + + const bool dst_shift = eq_sec && eq_min && !eq_hour + && eq_mday && eq_month && eq_year; + + if (!debugging (pc)) + return; + + dbg_printf (_("error: invalid date/time value:\n")); + dbg_printf (_(" user provided time: '%s'\n"), + debug_strfdatetime (tm0, pc, tmp, sizeof tmp)); + dbg_printf (_(" normalized time: '%s'\n"), + debug_strfdatetime (tm1, pc, tmp, sizeof tmp)); + /* The format must be aligned with debug_strfdatetime and the two + DEBUG statements above. This string is not translated. */ + i = snprintf (tmp, sizeof tmp, + " %4s %2s %2s %2s %2s %2s", + eq_year ? "" : "----", + eq_month ? "" : "--", + eq_mday ? "" : "--", + eq_hour ? "" : "--", + eq_min ? "" : "--", + eq_sec ? "" : "--"); + /* Trim trailing whitespace. */ + if (0 <= i) + { + if (sizeof tmp - 1 < i) + i = sizeof tmp - 1; + while (0 < i && tmp[i - 1] == ' ') + --i; + tmp[i] = '\0'; + } + dbg_printf ("%s\n", tmp); + + dbg_printf (_(" possible reasons:\n")); + if (dst_shift) + dbg_printf (_(" nonexistent due to daylight-saving time;\n")); + if (!eq_mday && !eq_month) + dbg_printf (_(" invalid day/month combination;\n")); + dbg_printf (_(" numeric values overflow;\n")); + dbg_printf (" %s\n", (time_zone_seen ? _("incorrect timezone") + : _("missing timezone"))); +} + +/* Parse a date/time string, storing the resulting time value into *RESULT. + The string itself is pointed to by P. Return true if successful. + P can be an incomplete or relative time specification; if so, use + *NOW as the basis for the returned time. Default to timezone + TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ +static bool +parse_datetime_body (struct timespec *result, char const *p, + struct timespec const *now, unsigned int flags, + timezone_t tzdefault, char const *tzstring) +{ + struct tm tm; + struct tm tm0; + char time_zone_buf[TIME_ZONE_BUFSIZE]; + char dbg_tm[DBGBUFSIZE]; + bool ok = false; + char const *input_sentinel = p + strlen (p); + char *tz1alloc = NULL; + + /* A reasonable upper bound for the size of ordinary TZ strings. + Use heap allocation if TZ's length exceeds this. */ + enum { TZBUFSIZE = 100 }; + char tz1buf[TZBUFSIZE]; + + struct timespec gettime_buffer; + if (! now) + { + gettime (&gettime_buffer); + now = &gettime_buffer; + } + + time_t Start = now->tv_sec; + int Start_ns = now->tv_nsec; + + unsigned char c; + while (c = *p, c_isspace (c)) + p++; + + timezone_t tz = tzdefault; + + /* Store a local copy prior to first "goto". Without this, a prior use + below of RELATIVE_TIME_0 on the RHS might translate to an assignment- + to-temporary, which would trigger a -Wjump-misses-init warning. */ + const relative_time rel_time_0 = RELATIVE_TIME_0; + + if (strncmp (p, "TZ=\"", 4) == 0) + { + char const *tzbase = p + 4; + idx_t tzsize = 1; + char const *s; + + for (s = tzbase; *s; s++, tzsize++) + if (*s == '\\') + { + s++; + if (! (*s == '\\' || *s == '"')) + break; + } + else if (*s == '"') + { + timezone_t tz1; + char *tz1string = tz1buf; + char *z; + if (TZBUFSIZE < tzsize) + { + tz1alloc = malloc (tzsize); + if (!tz1alloc) + goto fail; + tz1string = tz1alloc; + } + z = tz1string; + for (s = tzbase; *s != '"'; s++) + *z++ = *(s += *s == '\\'); + *z = '\0'; + tz1 = tzalloc (tz1string); + if (!tz1) + goto fail; + tz = tz1; + tzstring = tz1string; + + p = s + 1; + while (c = *p, c_isspace (c)) + p++; + + break; + } + } + + struct tm tmp; + if (! localtime_rz (tz, &now->tv_sec, &tmp)) + goto fail; + + /* As documented, be careful to treat the empty string just like + a date string of "0". Without this, an empty string would be + declared invalid when parsed during a DST transition. */ + if (*p == '\0') + p = "0"; + + parser_control pc; + pc.input = p; +#ifdef GNULIB_PARSE_DATETIME2 + pc.parse_datetime_debug = (flags & PARSE_DATETIME_DEBUG) != 0; +#endif + if (ckd_add (&pc.year.value, tmp.tm_year, TM_YEAR_BASE)) + { + if (debugging (&pc)) + dbg_printf (_("error: initial year out of range\n")); + goto fail; + } + pc.year.digits = 0; + pc.month = tmp.tm_mon + 1; + pc.day = tmp.tm_mday; + pc.hour = tmp.tm_hour; + pc.minutes = tmp.tm_min; + pc.seconds = (struct timespec) { .tv_sec = tmp.tm_sec, .tv_nsec = Start_ns }; + tm.tm_isdst = tmp.tm_isdst; + + pc.meridian = MER24; + pc.rel = rel_time_0; + pc.timespec_seen = false; + pc.rels_seen = false; + pc.dates_seen = 0; + pc.days_seen = 0; + pc.times_seen = 0; + pc.J_zones_seen = 0; + pc.local_zones_seen = 0; + pc.dsts_seen = 0; + pc.zones_seen = 0; + pc.year_seen = false; + pc.debug_dates_seen = false; + pc.debug_days_seen = false; + pc.debug_times_seen = false; + pc.debug_local_zones_seen = false; + pc.debug_zones_seen = false; + pc.debug_year_seen = false; + pc.debug_ordinal_day_seen = false; + + pc.local_time_zone_table[0].name = NULL; + populate_local_time_zone_table (&pc, &tmp); + + /* Probe the names used in the next three calendar quarters, looking + for a tm_isdst different from the one we already have. */ + for (int quarter = 1; quarter <= 3; quarter++) + { + time_t probe; + if (ckd_add (&probe, Start, quarter * (90 * 24 * 60 * 60))) + break; + struct tm probe_tm; + if (localtime_rz (tz, &probe, &probe_tm) + && (! pc.local_time_zone_table[0].name + || probe_tm.tm_isdst != pc.local_time_zone_table[0].value)) + { + populate_local_time_zone_table (&pc, &probe_tm); + if (pc.local_time_zone_table[1].name) + { + if (! strcmp (pc.local_time_zone_table[0].name, + pc.local_time_zone_table[1].name)) + { + /* This locale uses the same abbreviation for standard and + daylight times. So if we see that abbreviation, we don't + know whether it's daylight time. */ + pc.local_time_zone_table[0].value = -1; + pc.local_time_zone_table[1].name = NULL; + } + + break; + } + } + } + + if (yyparse (&pc) != 0) + { + if (debugging (&pc)) + dbg_printf ((input_sentinel <= pc.input + ? _("error: parsing failed\n") + : _("error: parsing failed, stopped at '%s'\n")), + pc.input); + goto fail; + } + + + /* Determine effective timezone source. */ + + if (debugging (&pc)) + { + dbg_printf (_("input timezone: ")); + + if (pc.timespec_seen) + fprintf (stderr, _("'@timespec' - always UTC")); + else if (pc.zones_seen) + fprintf (stderr, _("parsed date/time string")); + else if (tzstring) + { + if (tz != tzdefault) + fprintf (stderr, _("TZ=\"%s\" in date string"), tzstring); + else if (STREQ (tzstring, "UTC0")) + { + /* Special case: 'date -u' sets TZ="UTC0". */ + fprintf (stderr, _("TZ=\"UTC0\" environment value or -u")); + } + else + fprintf (stderr, _("TZ=\"%s\" environment value"), tzstring); + } + else + fprintf (stderr, _("system default")); + + /* Account for DST changes if tLOCAL_ZONE was seen. + local timezone only changes DST and is relative to the + default timezone.*/ + if (pc.local_zones_seen && !pc.zones_seen && 0 < pc.local_isdst) + fprintf (stderr, ", dst"); + + if (pc.zones_seen) + fprintf (stderr, " (%s)", time_zone_str (pc.time_zone, time_zone_buf)); + + fputc ('\n', stderr); + } + + if (pc.timespec_seen) + *result = pc.seconds; + else + { + if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen + | (pc.J_zones_seen + pc.local_zones_seen + pc.zones_seen))) + { + if (debugging (&pc)) + { + if (pc.times_seen > 1) + dbg_printf ("error: seen multiple time parts\n"); + if (pc.dates_seen > 1) + dbg_printf ("error: seen multiple date parts\n"); + if (pc.days_seen > 1) + dbg_printf ("error: seen multiple days parts\n"); + if (pc.dsts_seen > 1) + dbg_printf ("error: seen multiple daylight-saving parts\n"); + if ((pc.J_zones_seen + pc.local_zones_seen + pc.zones_seen) > 1) + dbg_printf ("error: seen multiple time-zone parts\n"); + } + goto fail; + } + + if (! to_tm_year (pc.year, debugging (&pc), &tm.tm_year) + || ckd_add (&tm.tm_mon, pc.month, -1) + || ckd_add (&tm.tm_mday, pc.day, 0)) + { + if (debugging (&pc)) + dbg_printf (_("error: year, month, or day overflow\n")); + goto fail; + } + if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen)) + { + tm.tm_hour = to_hour (pc.hour, pc.meridian); + if (tm.tm_hour < 0) + { + char const *mrd = (pc.meridian == MERam ? "am" + : pc.meridian == MERpm ?"pm" : ""); + if (debugging (&pc)) + dbg_printf (_("error: invalid hour %"PRIdMAX"%s\n"), + pc.hour, mrd); + goto fail; + } + tm.tm_min = pc.minutes; + tm.tm_sec = pc.seconds.tv_sec; + if (debugging (&pc)) + dbg_printf ((pc.times_seen + ? _("using specified time as starting value: '%s'\n") + : _("using current time as starting value: '%s'\n")), + debug_strftime (&tm, dbg_tm, sizeof dbg_tm)); + } + else + { + tm.tm_hour = tm.tm_min = tm.tm_sec = 0; + pc.seconds.tv_nsec = 0; + if (debugging (&pc)) + dbg_printf ("warning: using midnight as starting time: 00:00:00\n"); + } + + /* Let mktime deduce tm_isdst if we have an absolute timestamp. */ + if (pc.dates_seen | pc.days_seen | pc.times_seen) + tm.tm_isdst = -1; + + /* But if the input explicitly specifies local time with or without + DST, give mktime that information. */ + if (pc.local_zones_seen) + tm.tm_isdst = pc.local_isdst; + + tm0.tm_sec = tm.tm_sec; + tm0.tm_min = tm.tm_min; + tm0.tm_hour = tm.tm_hour; + tm0.tm_mday = tm.tm_mday; + tm0.tm_mon = tm.tm_mon; + tm0.tm_year = tm.tm_year; + tm0.tm_isdst = tm.tm_isdst; + tm.tm_wday = -1; + + Start = mktime_z (tz, &tm); + + if (! mktime_ok (&tm0, &tm)) + { + bool repaired = false; + bool time_zone_seen = pc.zones_seen != 0; + if (time_zone_seen) + { + /* Guard against falsely reporting errors near the time_t + boundaries when parsing times in other time zones. For + example, suppose the input string "1969-12-31 23:00:00 -0100", + the current time zone is 8 hours ahead of UTC, and the min + time_t value is 1970-01-01 00:00:00 UTC. Then the min + localtime value is 1970-01-01 08:00:00, and mktime will + therefore fail on 1969-12-31 23:00:00. To work around the + problem, set the time zone to 1 hour behind UTC temporarily + by setting TZ="XXX1:00" and try mktime again. */ + + char tz2buf[sizeof "XXX" - 1 + TIME_ZONE_BUFSIZE]; + tz2buf[0] = tz2buf[1] = tz2buf[2] = 'X'; + time_zone_str (pc.time_zone, &tz2buf[3]); + timezone_t tz2 = tzalloc (tz2buf); + if (!tz2) + { + if (debugging (&pc)) + dbg_printf (_("error: tzalloc (\"%s\") failed\n"), tz2buf); + goto fail; + } + tm.tm_sec = tm0.tm_sec; + tm.tm_min = tm0.tm_min; + tm.tm_hour = tm0.tm_hour; + tm.tm_mday = tm0.tm_mday; + tm.tm_mon = tm0.tm_mon; + tm.tm_year = tm0.tm_year; + tm.tm_isdst = tm0.tm_isdst; + tm.tm_wday = -1; + Start = mktime_z (tz2, &tm); + repaired = mktime_ok (&tm0, &tm); + tzfree (tz2); + } + + if (! repaired) + { + debug_mktime_not_ok (&tm0, &tm, &pc, time_zone_seen); + goto fail; + } + } + + char dbg_ord[DBGBUFSIZE]; + + if (pc.days_seen && ! pc.dates_seen) + { + intmax_t dayincr; + tm.tm_yday = -1; + intmax_t day_ordinal = (pc.day_ordinal + - (0 < pc.day_ordinal + && tm.tm_wday != pc.day_number)); + if (! (ckd_mul (&dayincr, day_ordinal, 7) + || ckd_add (&dayincr, (pc.day_number - tm.tm_wday + 7) % 7, + dayincr) + || ckd_add (&tm.tm_mday, dayincr, tm.tm_mday))) + { + tm.tm_isdst = -1; + Start = mktime_z (tz, &tm); + } + + if (tm.tm_yday < 0) + { + if (debugging (&pc)) + dbg_printf (_("error: day '%s' " + "(day ordinal=%"PRIdMAX" number=%d) " + "resulted in an invalid date: '%s'\n"), + str_days (&pc, dbg_ord, sizeof dbg_ord), + pc.day_ordinal, pc.day_number, + debug_strfdatetime (&tm, &pc, dbg_tm, + sizeof dbg_tm)); + goto fail; + } + + if (debugging (&pc)) + dbg_printf (_("new start date: '%s' is '%s'\n"), + str_days (&pc, dbg_ord, sizeof dbg_ord), + debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); + + } + + if (debugging (&pc)) + { + if (!pc.dates_seen && !pc.days_seen) + dbg_printf (_("using current date as starting value: '%s'\n"), + debug_strfdate (&tm, dbg_tm, sizeof dbg_tm)); + + if (pc.days_seen && pc.dates_seen) + dbg_printf (_("warning: day (%s) ignored when explicit dates " + "are given\n"), + str_days (&pc, dbg_ord, sizeof dbg_ord)); + + dbg_printf (_("starting date/time: '%s'\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); + } + + /* Add relative date. */ + if (pc.rel.year | pc.rel.month | pc.rel.day) + { + if (debugging (&pc)) + { + if ((pc.rel.year != 0 || pc.rel.month != 0) && tm.tm_mday != 15) + dbg_printf (_("warning: when adding relative months/years, " + "it is recommended to specify the 15th of the " + "months\n")); + + if (pc.rel.day != 0 && tm.tm_hour != 12) + dbg_printf (_("warning: when adding relative days, " + "it is recommended to specify noon\n")); + } + + int year, month, day; + if (ckd_add (&year, tm.tm_year, pc.rel.year) + || ckd_add (&month, tm.tm_mon, pc.rel.month) + || ckd_add (&day, tm.tm_mday, pc.rel.day)) + { + if (debugging (&pc)) + dbg_printf (_("error: %s:%d\n"), __FILE__, __LINE__); + goto fail; + } + tm.tm_year = year; + tm.tm_mon = month; + tm.tm_mday = day; + tm.tm_hour = tm0.tm_hour; + tm.tm_min = tm0.tm_min; + tm.tm_sec = tm0.tm_sec; + tm.tm_isdst = tm0.tm_isdst; + tm.tm_wday = -1; + Start = mktime_z (tz, &tm); + if (tm.tm_wday < 0) + { + if (debugging (&pc)) + dbg_printf (_("error: adding relative date resulted " + "in an invalid date: '%s'\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, + sizeof dbg_tm)); + goto fail; + } + + if (debugging (&pc)) + { + dbg_printf (_("after date adjustment " + "(%+"PRIdMAX" years, %+"PRIdMAX" months, " + "%+"PRIdMAX" days),\n"), + pc.rel.year, pc.rel.month, pc.rel.day); + dbg_printf (_(" new date/time = '%s'\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, + sizeof dbg_tm)); + + /* Warn about crossing DST due to time adjustment. + Example: https://bugs.gnu.org/8357 + env TZ=Europe/Helsinki \ + date --debug \ + -d 'Mon Mar 28 00:36:07 2011 EEST 1 day ago' + + This case is different than DST changes due to time adjustment, + i.e., "1 day ago" vs "24 hours ago" are calculated in different + places. + + 'tm0.tm_isdst' contains the DST of the input date, + 'tm.tm_isdst' is the normalized result after calling + mktime (&tm). + */ + if (tm0.tm_isdst != -1 && tm.tm_isdst != tm0.tm_isdst) + dbg_printf (_("warning: daylight saving time changed after " + "date adjustment\n")); + + /* Warn if the user did not ask to adjust days but mday changed, + or + user did not ask to adjust months/days but the month changed. + + Example for first case: + 2016-05-31 + 1 month => 2016-06-31 => 2016-07-01. + User asked to adjust month, but the day changed from 31 to 01. + + Example for second case: + 2016-02-29 + 1 year => 2017-02-29 => 2017-03-01. + User asked to adjust year, but the month changed from 02 to 03. + */ + if (pc.rel.day == 0 + && (tm.tm_mday != day + || (pc.rel.month == 0 && tm.tm_mon != month))) + { + dbg_printf (_("warning: month/year adjustment resulted in " + "shifted dates:\n")); + char tm_year_buf[TM_YEAR_BUFSIZE]; + dbg_printf (_(" adjusted Y M D: %s %02d %02d\n"), + tm_year_str (year, tm_year_buf), month + 1, day); + dbg_printf (_(" normalized Y M D: %s %02d %02d\n"), + tm_year_str (tm.tm_year, tm_year_buf), + tm.tm_mon + 1, tm.tm_mday); + } + } + + } + + /* The only "output" of this if-block is an updated Start value, + so this block must follow others that clobber Start. */ + if (pc.zones_seen) + { + bool overflow = false; +#ifdef HAVE_STRUCT_TM_TM_GMTOFF + long int utcoff = tm.tm_gmtoff; +#else + time_t t = Start; + struct tm gmt; + int utcoff = (gmtime_r (&t, &gmt) + ? tm_diff (&tm, &gmt) + : (overflow = true, 0)); +#endif + intmax_t delta; + overflow |= ckd_sub (&delta, pc.time_zone, utcoff); + time_t t1; + overflow |= ckd_sub (&t1, Start, delta); + if (overflow) + { + if (debugging (&pc)) + dbg_printf (_("error: timezone %d caused time_t overflow\n"), + pc.time_zone); + goto fail; + } + Start = t1; + } + + if (debugging (&pc)) + { + intmax_t Starti = Start; + dbg_printf (_("'%s' = %"PRIdMAX" epoch-seconds\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm), + Starti); + } + + + /* Add relative hours, minutes, and seconds. On hosts that support + leap seconds, ignore the possibility of leap seconds; e.g., + "+ 10 minutes" adds 600 seconds, even if one of them is a + leap second. Typically this is not what the user wants, but it's + too hard to do it the other way, because the time zone indicator + must be applied before relative times, and if mktime is applied + again the time zone will be lost. */ + { + intmax_t orig_ns = pc.seconds.tv_nsec; + intmax_t sum_ns = orig_ns + pc.rel.ns; + int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION; + int d4 = (sum_ns - normalized_ns) / BILLION; + intmax_t d1, t1, d2, t2, t3; + time_t t4; + if (ckd_mul (&d1, pc.rel.hour, 60 * 60) + || ckd_add (&t1, Start, d1) + || ckd_mul (&d2, pc.rel.minutes, 60) + || ckd_add (&t2, t1, d2) + || ckd_add (&t3, t2, pc.rel.seconds) + || ckd_add (&t4, t3, d4)) + { + if (debugging (&pc)) + dbg_printf (_("error: adding relative time caused an " + "overflow\n")); + goto fail; + } + + result->tv_sec = t4; + result->tv_nsec = normalized_ns; + + if (debugging (&pc) + && (pc.rel.hour | pc.rel.minutes | pc.rel.seconds | pc.rel.ns)) + { + dbg_printf (_("after time adjustment (%+"PRIdMAX" hours, " + "%+"PRIdMAX" minutes, " + "%+"PRIdMAX" seconds, %+d ns),\n"), + pc.rel.hour, pc.rel.minutes, pc.rel.seconds, + pc.rel.ns); + intmax_t t4i = t4; + dbg_printf (_(" new time = %"PRIdMAX" epoch-seconds\n"), t4i); + + /* Warn about crossing DST due to time adjustment. + Example: https://bugs.gnu.org/8357 + env TZ=Europe/Helsinki \ + date --debug \ + -d 'Mon Mar 28 00:36:07 2011 EEST 24 hours ago' + + This case is different than DST changes due to days adjustment, + i.e., "1 day ago" vs "24 hours ago" are calculated in different + places. + + 'tm.tm_isdst' contains the date after date adjustment. */ + struct tm lmt; + if (tm.tm_isdst != -1 && localtime_rz (tz, &result->tv_sec, &lmt) + && tm.tm_isdst != lmt.tm_isdst) + dbg_printf (_("warning: daylight saving time changed after " + "time adjustment\n")); + } + } + } + + if (debugging (&pc)) + { + /* Special case: using 'date -u' simply set TZ=UTC0 */ + if (! tzstring) + dbg_printf (_("timezone: system default\n")); + else if (STREQ (tzstring, "UTC0")) + dbg_printf (_("timezone: Universal Time\n")); + else + dbg_printf (_("timezone: TZ=\"%s\" environment value\n"), tzstring); + + intmax_t sec = result->tv_sec; + int nsec = result->tv_nsec; + dbg_printf (_("final: %"PRIdMAX".%09d (epoch-seconds)\n"), + sec, nsec); + + struct tm gmt, lmt; + bool got_utc = !!gmtime_r (&result->tv_sec, &gmt); + if (got_utc) + dbg_printf (_("final: %s (UTC)\n"), + debug_strfdatetime (&gmt, NULL, + dbg_tm, sizeof dbg_tm)); + if (localtime_rz (tz, &result->tv_sec, &lmt)) + { +#ifdef HAVE_STRUCT_TM_TM_GMTOFF + bool got_utcoff = true; + long int utcoff = lmt.tm_gmtoff; +#else + bool got_utcoff = got_utc; + int utcoff; + if (got_utcoff) + utcoff = tm_diff (&lmt, &gmt); +#endif + if (got_utcoff) + dbg_printf (_("final: %s (UTC%s)\n"), + debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm), + time_zone_str (utcoff, time_zone_buf)); + else + dbg_printf (_("final: %s (unknown time zone offset)\n"), + debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm)); + } + } + + ok = true; + + fail: + if (tz != tzdefault) + tzfree (tz); + free (tz1alloc); + return ok; +} + +#ifdef GNULIB_PARSE_DATETIME2 +/* Parse a date/time string, storing the resulting time value into *RESULT. + The string itself is pointed to by P. Return true if successful. + P can be an incomplete or relative time specification; if so, use + *NOW as the basis for the returned time. Default to timezone + TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ +bool +parse_datetime2 (struct timespec *result, char const *p, + struct timespec const *now, unsigned int flags, + timezone_t tzdefault, char const *tzstring) +{ + return parse_datetime_body (result, p, now, flags, tzdefault, tzstring); +} +#endif + + +/* The plain interface: run with debug=false and the default timezone. */ +bool +parse_datetime (struct timespec *result, char const *p, + struct timespec const *now) +{ + char const *tzstring = getenv ("TZ"); + timezone_t tz = tzalloc (tzstring); + if (!tz) + return false; + bool ok = parse_datetime_body (result, p, now, 0, tz, tzstring); + tzfree (tz); + return ok; +} + +#if TEST + +int +main (int ac, char **av) +{ + char buff[BUFSIZ]; + + printf ("Enter date, or blank line to exit.\n\t> "); + fflush (stdout); + + buff[BUFSIZ - 1] = '\0'; + while (fgets (buff, BUFSIZ - 1, stdin) && buff[0]) + { + struct timespec d; + struct tm const *tm; + if (! parse_datetime (&d, buff, NULL)) + printf ("Bad format - couldn't convert.\n"); + else if (! (tm = localtime (&d.tv_sec))) + { + intmax_t sec = d.tv_sec; + printf ("localtime (%"PRIdMAX") failed\n", sec); + } + else + { + int ns = d.tv_nsec; + char tm_year_buf[TM_YEAR_BUFSIZE]; + printf ("%s-%02d-%02d %02d:%02d:%02d.%09d\n", + tm_year_str (tm->tm_year, tm_year_buf), + tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec, ns); + } + printf ("\t> "); + fflush (stdout); + } + return 0; +} +#endif /* TEST */ diff --git a/include/libgnulib/parse-duration.h b/include/libgnulib/parse-duration.h new file mode 100755 index 0000000..bdd3dcb --- /dev/null +++ b/include/libgnulib/parse-duration.h @@ -0,0 +1,100 @@ +/* Parse a time duration and return a seconds count + Copyright (C) 2008-2024 Free Software Foundation, Inc. + Written by Bruce Korb , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* + + Readers and users of this function are referred to the ISO-8601 + specification, with particular attention to "Durations". + + At the time of writing, this worked: + + https://en.wikipedia.org/wiki/ISO_8601#Durations + + The string must start with a 'P', 'T' or a digit. + + ==== if it is a digit + + the string may contain: NNN Y NNN M NNN W NNN d NNN h NNN m NNN s + This represents NNN years, NNN months, NNN weeks, NNN days, NNN hours, + NNN minutes and NNN seconds. + The embedded white space is optional. + These terms must appear in this order. + Case is significant: 'M' is months and 'm' is minutes. + The final "s" is optional. + All of the terms ("NNN" plus designator) are optional. + Minutes and seconds may optionally be represented as NNN:NNN. + Also, hours, minute and seconds may be represented as NNN:NNN:NNN. + There is no limitation on the value of any of the terms, except + that the final result must fit in a time_t value. + + ==== if it is a 'P' or 'T', please see ISO-8601 for a rigorous definition. + + The 'P' term may be followed by any of three formats: + yyyymmdd + yy-mm-dd + yy Y mm M ww W dd D + + or it may be empty and followed by a 'T'. The "yyyymmdd" must be eight + digits long. + + NOTE! Months are always 30 days and years are always 365 days long. + 5 years is always 1825 days, not 1826 or 1827 depending on leap year + considerations. 3 months is always 90 days. There is no consideration + for how many days are in the current, next or previous months. + + For the final format: + * Embedded white space is allowed, but it is optional. + * All of the terms are optional. Any or all-but-one may be omitted. + * The meanings are yy years, mm months, ww weeks and dd days. + * The terms must appear in this order. + + ==== The 'T' term may be followed by any of these formats: + + hhmmss + hh:mm:ss + hh H mm M ss S + + For the final format: + * Embedded white space is allowed, but it is optional. + * All of the terms are optional. Any or all-but-one may be omitted. + * The terms must appear in this order. + + */ +#ifndef GNULIB_PARSE_DURATION_H +#define GNULIB_PARSE_DURATION_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return value when a valid duration cannot be parsed. */ +#define BAD_TIME ((time_t)~0) + +/* Parses the given string. If it has the syntax of a valid duration, + this duration is returned. Otherwise, the return value is BAD_TIME, + and errno is set to either EINVAL (bad syntax) or ERANGE (out of range). */ +extern time_t parse_duration (char const * in_pz); + + +#ifdef __cplusplus +} +#endif + +#endif /* GNULIB_PARSE_DURATION_H */ diff --git a/include/libgnulib/passfd.h b/include/libgnulib/passfd.h new file mode 100755 index 0000000..24bb607 --- /dev/null +++ b/include/libgnulib/passfd.h @@ -0,0 +1,32 @@ +/* passfd.h -- definitions and prototypes for passfd.c + + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef PASSFD_H_ +#define PASSFD_H_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +extern int sendfd (int sock, int fd); +extern int recvfd (int sock, int flags); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/pathmax.h b/include/libgnulib/pathmax.h new file mode 100755 index 0000000..d6512c6 --- /dev/null +++ b/include/libgnulib/pathmax.h @@ -0,0 +1,88 @@ +/* Define PATH_MAX somehow. Requires sys/types.h. + Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _PATHMAX_H +# define _PATHMAX_H + +/* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, + including the terminating NUL byte. + + PATH_MAX is not defined on systems which have no limit on filename length, + such as GNU/Hurd. + + This file does *not* define PATH_MAX always. Programs that use this file + can handle the GNU/Hurd case in several ways: + - Either with a package-wide handling, or with a per-file handling, + - Either through a + #ifdef PATH_MAX + or through a fallback like + #ifndef PATH_MAX + # define PATH_MAX 8192 + #endif + or through a fallback like + #ifndef PATH_MAX + # define PATH_MAX pathconf ("/", _PC_PATH_MAX) + #endif + */ + +/* This file uses HAVE_SYS_PARAM_H. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include + +# include + +# ifndef _POSIX_PATH_MAX +# define _POSIX_PATH_MAX 256 +# endif + +/* Don't include sys/param.h if it already has been. */ +# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN +# include +# endif + +# if !defined PATH_MAX && defined MAXPATHLEN +# define PATH_MAX MAXPATHLEN +# endif + +# ifdef __hpux +/* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, + *not* including the terminating NUL byte, and is set to 1023. + Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is + not defined at all any more. */ +# undef PATH_MAX +# define PATH_MAX 1024 +# endif + +# if defined _WIN32 && ! defined __CYGWIN__ +/* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, + section "Maximum Path Length Limitation", + + explains that the maximum size of a filename, including the terminating + NUL byte, is 260 = 3 + 256 + 1. + This is the same value as + - FILENAME_MAX in , + - _MAX_PATH in , + - MAX_PATH in . + Undefine the original value, because mingw's gets it wrong. */ +# undef PATH_MAX +# define PATH_MAX 260 +# endif + +#endif /* _PATHMAX_H */ diff --git a/include/libgnulib/physmem.h b/include/libgnulib/physmem.h new file mode 100755 index 0000000..9c5438d --- /dev/null +++ b/include/libgnulib/physmem.h @@ -0,0 +1,54 @@ +/* Calculate the size of physical memory. + + Copyright (C) 2000, 2003, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef PHYSMEM_H_ +# define PHYSMEM_H_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Returns the total amount of physical memory. + This value is more or less a hard limit for the working set. */ +double physmem_total (void); + +/* Returns the amount of physical memory available. + This value is the amount of memory the application can use without hindering + any other process (assuming that no other process increases its memory + usage). */ +double physmem_available (void); + +/* Returns the amount of physical memory that can be claimed, with a given + aggressivity. + For AGGRESSIVITY == 0.0, the result is like physmem_available (): the amount + of memory the application can use without hindering any other process. + For AGGRESSIVITY == 1.0, the result is the amount of memory the application + can use, while causing memory shortage to other processes, but without + bringing the machine into an out-of-memory state. + Values in between, for example AGGRESSIVITY == 0.5, are a reasonable middle + ground. */ +double physmem_claimable (double aggressivity); + + +#ifdef __cplusplus +} +#endif + +#endif /* PHYSMEM_H_ */ diff --git a/include/libgnulib/pipe-filter-aux.h b/include/libgnulib/pipe-filter-aux.h new file mode 100755 index 0000000..caf24c4 --- /dev/null +++ b/include/libgnulib/pipe-filter-aux.h @@ -0,0 +1,127 @@ +/* Auxiliary code for filtering of data through a subprocess. + Copyright (C) 2001-2003, 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + 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 3 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, see . */ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef PIPE_FILTER_AUX_INLINE +# define PIPE_FILTER_AUX_INLINE _GL_INLINE +#endif + +#if defined _WIN32 && ! defined __CYGWIN__ +/* In the pipe-filter-* modules we want to use the write() function that is + not overridden to emulate SIGPIPE behaviour, because we don't want force + the caller to do + signal (SIGPIPE, SIG_DFL); + To reproduce the problem, use a gnulib testdir for the modules + 'pipe-filter-gi', 'write', 'sigpipe'. */ +# undef write +# define write _write +#endif + +#ifndef SSIZE_MAX +# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) +#endif +#ifdef _AIX +/* On AIX, despite having select() and despite having put the file descriptor + in non-blocking mode, it can happen that select() reports that fd[1] is + writable but writing a large amount of data to fd[1] then fails with errno + EAGAIN. Seen with test-pipe-filter-gi1 on AIX 7.2, with data sizes of + 29 KB. So, limit the size of data passed to the write() call to 4 KB. */ +# undef SSIZE_MAX +# define SSIZE_MAX 4096 +#endif + +/* We use a child process, and communicate through a bidirectional pipe. + To avoid deadlocks, let the child process decide when it wants to read + or to write, and let the parent behave accordingly. The parent uses + select() to know whether it must write or read. On platforms without + select(), we use non-blocking I/O. (This means the parent is busy + looping while waiting for the child. Not good. But hardly any platform + lacks select() nowadays.) */ + +/* On BeOS and OS/2 kLIBC select() works only on sockets, not on normal file + descriptors. */ +#if defined __BEOS__ || defined __KLIBC__ +# undef HAVE_SELECT +#endif + +#ifdef EINTR + +/* EINTR handling for close(), read(), write(), select(). + These functions can return -1/EINTR even though we don't have any + signal handlers set up, namely when we get interrupted via SIGSTOP. */ + +PIPE_FILTER_AUX_INLINE int +nonintr_close (int fd) +{ + int retval; + + do + retval = close (fd); + while (retval < 0 && errno == EINTR); + + return retval; +} +#undef close /* avoid warning related to gnulib module unistd */ +#define close nonintr_close + +PIPE_FILTER_AUX_INLINE ssize_t +nonintr_read (int fd, void *buf, size_t count) +{ + ssize_t retval; + + do + retval = read (fd, buf, count); + while (retval < 0 && errno == EINTR); + + return retval; +} +#undef read /* avoid warning related to gnulib module unistd */ +#define read nonintr_read + +PIPE_FILTER_AUX_INLINE ssize_t +nonintr_write (int fd, const void *buf, size_t count) +{ + ssize_t retval; + + do + retval = write (fd, buf, count); + while (retval < 0 && errno == EINTR); + + return retval; +} +#undef write /* avoid warning on VMS */ +#define write nonintr_write + +#endif + +/* Non-blocking I/O. */ +#if HAVE_SELECT +# define IS_EAGAIN(errcode) 0 +#else +# ifdef EWOULDBLOCK +# define IS_EAGAIN(errcode) ((errcode) == EAGAIN || (errcode) == EWOULDBLOCK) +# else +# define IS_EAGAIN(errcode) ((errcode) == EAGAIN) +# endif +#endif + +_GL_INLINE_HEADER_END diff --git a/include/libgnulib/pipe-filter.h b/include/libgnulib/pipe-filter.h new file mode 100755 index 0000000..4d116f2 --- /dev/null +++ b/include/libgnulib/pipe-filter.h @@ -0,0 +1,243 @@ +/* Filtering of data through a subprocess. -*- coding: utf-8 -*- + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009, + and Paolo Bonzini , 2009. + + 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 3 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, see . */ + +#ifndef _PIPE_FILTER_H +#define _PIPE_FILTER_H + +/* This file uses _GL_ATTRIBUTE_DEALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Piping data through a subprocess in the naïve way - write data to the + subprocess and read from the subprocess when you expect it to have + produced results - is subject to two kinds of deadlocks: + 1) If you write more than PIPE_MAX bytes or, more generally, if you write + more bytes than the subprocess can handle at once, the subprocess + may write its data and wait on you to read it, but you are currently + busy writing. + 2) When you don't know ahead of time how many bytes the subprocess + will produce, the usual technique of calling read (fd, buf, BUFSIZ) + with a fixed BUFSIZ will, on Linux 2.2.17 and on BSD systems, cause + the read() call to block until *all* of the buffer has been filled. + But the subprocess cannot produce more data until you gave it more + input. But you are currently busy reading from it. + + This header file declares four set of functions that pipes data through + the subprocess, without risking these deadlocks. + + The side that writes data to the subprocess can be seen as a "generator", + that is, as a subroutine that produces and writes a piece of data here and + there, see . + But often, it can be written in the form of an "iterator", that is, as a + function that, each time it is invoked, produces and writes one more piece + of data. + + Similarly, the side that reads data from the subprocess can be seen as + a "generator", that is, as a subroutine that consumes a piece of data here + and there. Often, it can be written in the form of an "iterator", that + is, as a function that, each time it is invoked, consumes one more piece + of data. + + This header file declares four set of functions: + + | writer | reader | + ----------------+------------+------------+ + pipe_filter_ii | iterator | iterator | + pipe_filter_ig | iterator | generator | + pipe_filter_gi | generator | iterator | + pipe_filter_gg | generator | generator | + ----------------+------------+------------+ + + The last one uses threads in order to implement two generators running at + the same time. (For the relation between generators, coroutines, and + threads, see + and .) It is therefore only + portable to platforms with kernel-based POSIX threads. */ + +/* These two functions together describe the side that writes data to the + subprocess when it has the form of an iterator. + - prepare_write (&num_bytes, p) must either return a pointer to data that + is ready to be written and set num_bytes to the number of bytes ready to + be written, or return NULL when no more bytes are to be written. + - done_write (data_written, num_bytes_written) is called after + num_bytes_written bytes were written. It is guaranteed that + num_bytes_written > 0. + Here p is always the private_data argument passed to the main function. */ +typedef const void * (*prepare_write_fn) (size_t *num_bytes_p, + void *private_data); +typedef void (*done_write_fn) (void *data_written, size_t num_bytes_written, + void *private_data); + +/* These two functions together describe the side that reads data from the + subprocess when it has the form of an iterator. + - prepare_read (&num_bytes, p) must return a pointer to a buffer for data + that can be read and set num_bytes to the size of that buffer + (must be > 0). + - done_read (data_read, num_bytes_read, p) is called after num_bytes_read + bytes were read into the buffer. + Here p is always the private_data argument passed to the main function. */ +typedef void * (*prepare_read_fn) (size_t *num_bytes_p, + void *private_data); +typedef void (*done_read_fn) (void *data_read, size_t num_bytes_read, + void *private_data); + + +/* ============================ pipe_filter_ii ============================ */ + +/* Create a subprocess and pipe some data through it. + Arguments: + - progname is the program name used in error messages. + - prog_path is the file name of the program to invoke. + - prog_argv is a NULL terminated argument list, starting with prog_path as + first element. + - If null_stderr is true, the subprocess' stderr will be redirected to + /dev/null, and the usual error message to stderr will be omitted. + This is suitable when the subprocess does not fulfill an important task. + - If exit_on_error is true, any error will cause the main process to exit + with an error status. + If the subprocess does not terminate correctly, exit if exit_on_error is + true, otherwise return 127. + Callback arguments are as described above. + + Data is alternately written to the subprocess, through the functions + prepare_write and done_write, and read from the subprocess, through the + functions prepare_read and done_read. + + Note that the prepare_write/done_write functions and the + prepare_read/done_read functions may be called in different threads than + the current thread (depending on the platform). But they will not be + called after the pipe_filter_ii_execute function has returned. + + Return 0 upon success, or (only if exit_on_error is false): + - -1 with errno set upon failure, + - the positive exit code of the subprocess if that failed. */ +extern int + pipe_filter_ii_execute (const char *progname, + const char *prog_path, + const char * const *prog_argv, + bool null_stderr, bool exit_on_error, + prepare_write_fn prepare_write, + done_write_fn done_write, + prepare_read_fn prepare_read, + done_read_fn done_read, + void *private_data); + + +/* ============================ pipe_filter_ig ============================ */ + +struct pipe_filter_ig; + + +/* ============================ pipe_filter_gi ============================ */ + +struct pipe_filter_gi; + +/* Finish reading the output via the prepare_read/done_read functions + specified to pipe_filter_gi_create. + + Note that the prepare_read/done_read functions may be called in a + different thread than the current thread (depending on the platform). + However, they will always be called before pipe_filter_gi_close has + returned. + + The write side of the pipe is closed as soon as pipe_filter_gi_close + starts, while the read side will be closed just before it finishes. + + Return 0 upon success, or (only if exit_on_error is false): + - -1 with errno set upon failure, + - the positive exit code of the subprocess if that failed. */ +extern int + pipe_filter_gi_close (struct pipe_filter_gi *filter); + +/* Create a subprocess and pipe some data through it. + Arguments: + - progname is the program name used in error messages. + - prog_path is the file name of the program to invoke. + - prog_argv is a NULL terminated argument list, starting with + prog_path as first element. + - If null_stderr is true, the subprocess' stderr will be redirected + to /dev/null, and the usual error message to stderr will be + omitted. This is suitable when the subprocess does not fulfill an + important task. + - If exit_on_error is true, any error will cause the main process to + exit with an error status. + If the subprocess does not start correctly, exit if exit_on_error is + true, otherwise return NULL and set errno. + + The caller will write to the subprocess through pipe_filter_gi_write + and finally call pipe_filter_gi_close. During such calls, the + prepare_read and done_read function may be called to process any data + that the subprocess has written. + + Note that the prepare_read/done_read functions may be called in a + different thread than the current thread (depending on the platform). + But they will not be called after the pipe_filter_gi_close function has + returned. + + Return the freshly created 'struct pipe_filter_gi'. */ +extern struct pipe_filter_gi * + pipe_filter_gi_create (const char *progname, + const char *prog_path, + const char * const *prog_argv, + bool null_stderr, bool exit_on_error, + prepare_read_fn prepare_read, + done_read_fn done_read, + void *private_data) + _GL_ATTRIBUTE_DEALLOC (pipe_filter_gi_close, 1); + +/* Write size bytes starting at buf into the pipe and in the meanwhile + possibly call the prepare_read and done_read functions specified to + pipe_filter_gi_create. + + Note that the prepare_read/done_read functions may be called in a + different thread than the current thread (depending on the platform). + However, they will always be called before pipe_filter_gi_write has + returned, or otherwise not sooner than the next call to + pipe_filter_gi_write or pipe_filter_gi_close. + + Return only after all the entire buffer has been written to the pipe or + the subprocess has exited. + + Return 0 upon success, or (only if exit_on_error is false): + - -1 with errno set upon failure, + - the positive exit code of the subprocess if that failed. */ +extern int + pipe_filter_gi_write (struct pipe_filter_gi *filter, + const void *buf, size_t size); + + +/* ============================ pipe_filter_gg ============================ */ + + +/* ======================================================================== */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* _PIPE_FILTER_H */ diff --git a/include/libgnulib/posixtm.h b/include/libgnulib/posixtm.h new file mode 100755 index 0000000..74b4abe --- /dev/null +++ b/include/libgnulib/posixtm.h @@ -0,0 +1,48 @@ +/* Parse dates for touch and date. + + Copyright (C) 1998, 2003, 2005, 2007-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Yacc-based version written by Jim Kingdon and David MacKenzie. + Rewritten by Jim Meyering. */ + +#ifndef POSIXTM_H_ +#define POSIXTM_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* POSIX Date Syntax flags. */ +#define PDS_TRAILING_YEAR 1 +#define PDS_CENTURY 2 +#define PDS_SECONDS 4 +#define PDS_PRE_2000 8 + +/* For compatibility with older versions of this header, in which + PDS_LEADING_YEAR had its own bit. */ +#define PDS_LEADING_YEAR 0 + +bool posixtime (time_t *p, const char *s, unsigned int syntax_bits); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/posixver.h b/include/libgnulib/posixver.h new file mode 100755 index 0000000..91ecf15 --- /dev/null +++ b/include/libgnulib/posixver.h @@ -0,0 +1,28 @@ +/* Which POSIX version to conform to, for utilities. + + Copyright (C) 2002-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + + +int posix2_version (void); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/printf-args.h b/include/libgnulib/printf-args.h new file mode 100755 index 0000000..24a8674 --- /dev/null +++ b/include/libgnulib/printf-args.h @@ -0,0 +1,196 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _PRINTF_ARGS_H +#define _PRINTF_ARGS_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be declared. + STATIC Set to 'static' to declare the function static. */ + +/* Default parameters. */ +#ifndef PRINTF_FETCHARGS +# define PRINTF_FETCHARGS printf_fetchargs +#endif + +/* Get size_t, wchar_t. */ +#include + +/* Get wint_t. */ +#if HAVE_WINT_T +# include +#endif + +/* Get intN_t, uintN_t, intN_fast_t, uintN_fast_t. */ +#include + +/* Get va_list. */ +#include + + +/* Argument types */ +typedef enum +{ + TYPE_NONE, + TYPE_SCHAR, + TYPE_UCHAR, + TYPE_SHORT, + TYPE_USHORT, + TYPE_INT, + TYPE_UINT, + TYPE_LONGINT, + TYPE_ULONGINT, + TYPE_LONGLONGINT, + TYPE_ULONGLONGINT, + /* According to ISO C 23 § 7.23.6.1, "all exact-width integer types", + "all minimum-width integer types", and "all fastest minimum-width integer + types" defined in should be supported. But for portability + between platforms, we support only those with N = 8, 16, 32, 64. */ + TYPE_INT8_T, + TYPE_UINT8_T, + TYPE_INT16_T, + TYPE_UINT16_T, + TYPE_INT32_T, + TYPE_UINT32_T, + TYPE_INT64_T, + TYPE_UINT64_T, + TYPE_INT_FAST8_T, + TYPE_UINT_FAST8_T, + TYPE_INT_FAST16_T, + TYPE_UINT_FAST16_T, + TYPE_INT_FAST32_T, + TYPE_UINT_FAST32_T, + TYPE_INT_FAST64_T, + TYPE_UINT_FAST64_T, + TYPE_DOUBLE, + TYPE_LONGDOUBLE, + TYPE_CHAR, +#if HAVE_WINT_T + TYPE_WIDE_CHAR, +#endif + TYPE_STRING, + TYPE_WIDE_STRING, + TYPE_POINTER, + TYPE_COUNT_SCHAR_POINTER, + TYPE_COUNT_SHORT_POINTER, + TYPE_COUNT_INT_POINTER, + TYPE_COUNT_LONGINT_POINTER, + TYPE_COUNT_LONGLONGINT_POINTER, + TYPE_COUNT_INT8_T_POINTER, + TYPE_COUNT_INT16_T_POINTER, + TYPE_COUNT_INT32_T_POINTER, + TYPE_COUNT_INT64_T_POINTER, + TYPE_COUNT_INT_FAST8_T_POINTER, + TYPE_COUNT_INT_FAST16_T_POINTER, + TYPE_COUNT_INT_FAST32_T_POINTER, + TYPE_COUNT_INT_FAST64_T_POINTER +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ +, TYPE_U8_STRING +, TYPE_U16_STRING +, TYPE_U32_STRING +#endif +} arg_type; + +/* Polymorphic argument */ +typedef struct +{ + arg_type type; + union + { + signed char a_schar; + unsigned char a_uchar; + short a_short; + unsigned short a_ushort; + int a_int; + unsigned int a_uint; + long int a_longint; + unsigned long int a_ulongint; + long long int a_longlongint; + unsigned long long int a_ulonglongint; + int8_t a_int8_t; + uint8_t a_uint8_t; + int16_t a_int16_t; + uint16_t a_uint16_t; + int32_t a_int32_t; + uint32_t a_uint32_t; + int64_t a_int64_t; + uint64_t a_uint64_t; + int_fast8_t a_int_fast8_t; + uint_fast8_t a_uint_fast8_t; + int_fast16_t a_int_fast16_t; + uint_fast16_t a_uint_fast16_t; + int_fast32_t a_int_fast32_t; + uint_fast32_t a_uint_fast32_t; + int_fast64_t a_int_fast64_t; + uint_fast64_t a_uint_fast64_t; + float a_float; /* unused */ + double a_double; + long double a_longdouble; + int a_char; +#if HAVE_WINT_T + wint_t a_wide_char; +#endif + const char* a_string; + const wchar_t* a_wide_string; + void* a_pointer; + signed char * a_count_schar_pointer; + short * a_count_short_pointer; + int * a_count_int_pointer; + long int * a_count_longint_pointer; + long long int * a_count_longlongint_pointer; + int8_t * a_count_int8_t_pointer; + int16_t * a_count_int16_t_pointer; + int32_t * a_count_int32_t_pointer; + int64_t * a_count_int64_t_pointer; + int_fast8_t * a_count_int_fast8_t_pointer; + int_fast16_t * a_count_int_fast16_t_pointer; + int_fast32_t * a_count_int_fast32_t_pointer; + int_fast64_t * a_count_int_fast64_t_pointer; +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + const uint8_t * a_u8_string; + const uint16_t * a_u16_string; + const uint32_t * a_u32_string; +#endif + } + a; +} +argument; + +/* Number of directly allocated arguments (no malloc() needed). */ +#define N_DIRECT_ALLOC_ARGUMENTS 7 + +typedef struct +{ + size_t count; + argument *arg; + argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; +} +arguments; + + +/* Fetch the arguments, putting them into a. */ +#ifdef STATIC +STATIC +#else +extern +#endif +int PRINTF_FETCHARGS (va_list args, arguments *a); + +#endif /* _PRINTF_ARGS_H */ diff --git a/include/libgnulib/printf-frexp.h b/include/libgnulib/printf-frexp.h new file mode 100755 index 0000000..8467f98 --- /dev/null +++ b/include/libgnulib/printf-frexp.h @@ -0,0 +1,33 @@ +/* Split a double into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Write a finite, positive number x as + x = mantissa * 2^exp + where exp >= DBL_MIN_EXP - 1, + mantissa < 2.0, + if x is not a denormalized number then mantissa >= 1.0. + Store exp in *EXPPTR and return mantissa. */ +extern double printf_frexp (double x, int *expptr); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/printf-frexpl.h b/include/libgnulib/printf-frexpl.h new file mode 100755 index 0000000..11562ed --- /dev/null +++ b/include/libgnulib/printf-frexpl.h @@ -0,0 +1,33 @@ +/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Write a finite, positive number x as + x = mantissa * 2^exp + where exp >= LDBL_MIN_EXP - 1, + mantissa < 2.0, + if x is not a denormalized number then mantissa >= 1.0. + Store exp in *EXPPTR and return mantissa. */ +extern long double printf_frexpl (long double x, int *expptr); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/printf-parse.h b/include/libgnulib/printf-parse.h new file mode 100755 index 0000000..949b875 --- /dev/null +++ b/include/libgnulib/printf-parse.h @@ -0,0 +1,193 @@ +/* Parse printf format string. + Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _PRINTF_PARSE_H +#define _PRINTF_PARSE_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + STATIC Set to 'static' to declare the function static. */ + +#if HAVE_FEATURES_H +# include /* for __GLIBC__, __UCLIBC__ */ +#endif + +#include "printf-args.h" + + +/* Flags */ +#define FLAG_GROUP 1 /* ' flag */ +#define FLAG_LEFT 2 /* - flag */ +#define FLAG_SHOWSIGN 4 /* + flag */ +#define FLAG_SPACE 8 /* space flag */ +#define FLAG_ALT 16 /* # flag */ +#define FLAG_ZERO 32 +#if __GLIBC__ >= 2 && !defined __UCLIBC__ +# define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ +#endif + +/* arg_index value indicating that no argument is consumed. */ +#define ARG_NONE (~(size_t)0) + +/* xxx_directive: A parsed directive. + xxx_directives: A parsed format string. */ + +/* Number of directly allocated directives (no malloc() needed). */ +#define N_DIRECT_ALLOC_DIRECTIVES 7 + +/* A parsed directive. */ +typedef struct +{ + const char* dir_start; + const char* dir_end; + int flags; + const char* width_start; + const char* width_end; + size_t width_arg_index; + const char* precision_start; + const char* precision_end; + size_t precision_arg_index; + char conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +char_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + char_directive *dir; + size_t max_width_length; + size_t max_precision_length; + char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +char_directives; + +#if ENABLE_UNISTDIO + +/* A parsed directive. */ +typedef struct +{ + const uint8_t* dir_start; + const uint8_t* dir_end; + int flags; + const uint8_t* width_start; + const uint8_t* width_end; + size_t width_arg_index; + const uint8_t* precision_start; + const uint8_t* precision_end; + size_t precision_arg_index; + uint8_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u8_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u8_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u8_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint16_t* dir_start; + const uint16_t* dir_end; + int flags; + const uint16_t* width_start; + const uint16_t* width_end; + size_t width_arg_index; + const uint16_t* precision_start; + const uint16_t* precision_end; + size_t precision_arg_index; + uint16_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u16_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u16_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u16_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint32_t* dir_start; + const uint32_t* dir_end; + int flags; + const uint32_t* width_start; + const uint32_t* width_end; + size_t width_arg_index; + const uint32_t* precision_start; + const uint32_t* precision_end; + size_t precision_arg_index; + uint32_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u32_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u32_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u32_directives; + +#endif + + +/* Parses the format string. Fills in the number N of directives, and fills + in directives[0], ..., directives[N-1], and sets directives[N].dir_start + to the end of the format string. Also fills in the arg_type fields of the + arguments and the needed count of arguments. */ +#if ENABLE_UNISTDIO +extern int + ulc_printf_parse (const char *format, char_directives *d, arguments *a); +extern int + u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); +extern int + u16_printf_parse (const uint16_t *format, u16_directives *d, + arguments *a); +extern int + u32_printf_parse (const uint32_t *format, u32_directives *d, + arguments *a); +#else +# ifdef STATIC +STATIC +# else +extern +# endif +int printf_parse (const char *format, char_directives *d, arguments *a); +#endif + +#endif /* _PRINTF_PARSE_H */ diff --git a/include/libgnulib/priv-set.h b/include/libgnulib/priv-set.h new file mode 100755 index 0000000..6201b74 --- /dev/null +++ b/include/libgnulib/priv-set.h @@ -0,0 +1,77 @@ +/* Query, remove, or restore a Solaris privilege. + + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . + + Written by David Bartley. */ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, HAVE_PRIV_H, + HAVE_GETPPRIV. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef PRIV_SET_INLINE +# define PRIV_SET_INLINE _GL_INLINE +#endif + +#if HAVE_GETPPRIV && HAVE_PRIV_H + +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +int priv_set_ismember (const char *priv); +int priv_set_remove (const char *priv); +int priv_set_restore (const char *priv); + +PRIV_SET_INLINE int +priv_set_remove_linkdir (void) +{ + return priv_set_remove (PRIV_SYS_LINKDIR); +} + +PRIV_SET_INLINE int +priv_set_restore_linkdir (void) +{ + return priv_set_restore (PRIV_SYS_LINKDIR); +} + +#else + +PRIV_SET_INLINE int +priv_set_remove_linkdir (void) +{ + return -1; +} + +PRIV_SET_INLINE int +priv_set_restore_linkdir (void) +{ + return -1; +} + + +# ifdef __cplusplus +} +# endif + +#endif + +_GL_INLINE_HEADER_END diff --git a/include/libgnulib/progname.h b/include/libgnulib/progname.h new file mode 100755 index 0000000..a61872b --- /dev/null +++ b/include/libgnulib/progname.h @@ -0,0 +1,62 @@ +/* Program name management. + Copyright (C) 2001-2004, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _PROGNAME_H +#define _PROGNAME_H + +/* Programs using this file should do the following in main(): + set_program_name (argv[0]); + */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* String containing name the program is called with. */ +extern const char *program_name; + +/* Set program_name, based on argv[0]. + argv0 must be a string allocated with indefinite extent, and must not be + modified after this call. */ +extern void set_program_name (const char *argv0); + +#if ENABLE_RELOCATABLE + +/* Set program_name, based on argv[0], and original installation prefix and + directory, for relocatability. */ +extern void set_program_name_and_installdir (const char *argv0, + const char *orig_installprefix, + const char *orig_installdir); +#undef set_program_name +#define set_program_name(ARG0) \ + set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) + +/* Return the full pathname of the current executable, based on the earlier + call to set_program_name_and_installdir. Return NULL if unknown. */ +extern char *get_full_program_name (void); + +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _PROGNAME_H */ diff --git a/include/libgnulib/propername.h b/include/libgnulib/propername.h new file mode 100755 index 0000000..6247a99 --- /dev/null +++ b/include/libgnulib/propername.h @@ -0,0 +1,134 @@ +/* Localization of proper names. -*- coding: utf-8 -*- + Copyright (C) 2006, 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + 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 3 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, see . */ + +/* INTRODUCTION + + What do + + Torbjörn Granlund (coreutils) + François Pinard (coreutils) + Danilo Šegan (gettext) + + have in common? + + A non-ASCII name. This causes trouble in the --version output. The simple + "solution" unfortunately mutilates the name. + + $ du --version | grep Granlund + Écrit par Torbjorn Granlund, David MacKenzie, Paul Eggert et Jim Meyering. + + $ ptx --version | grep Pinard + Écrit par F. Pinard. + + What is desirable, is to print the full name if the output character set + allows it, and the ASCIIfied name only as a fallback. + + $ recode-sr-latin --version + ... + Written by Danilo Šegan and Bruno Haible. + + $ LC_ALL=C recode-sr-latin --version + ... + Written by Danilo Segan and Bruno Haible. + + The 'propername' and 'propername-lite' modules do this. Plus, for + languages that do not use the Latin alphabet, they allow a translator + to write the name using that different writing system. In that case the + propername and propername_utf8 output will look like this: + () + whereas the propername_lite output will just be the translated name + if available, otherwise the original name (in UTF-8 if possible and + in ASCII if not). + + To use the 'propername' module requires two simple steps: + + 1) Add it to the list of gnulib modules to import, + + 2) Change the arguments of version_etc(), + + from "Paul Eggert" + to proper_name ("Paul Eggert") + + from "Torbjorn Granlund" + to proper_name_utf8 ("Torbjorn Granlund", "Torbj\303\266rn Granlund") + or proper_name_lite ("Torbjorn Granlund", "Torbj\303\266rn Granlund") + + from "F. Pinard" + to proper_name_utf8 ("Franc,ois Pinard", "Fran\303\247ois Pinard") + or proper_name_lite ("Franc,ois Pinard", "Fran\303\247ois Pinard") + + In source code, the second argument of proper_name_lite and + proper_name_utf8 should use octal escapes, not UTF-8 - e.g., + "Fran\303\247ois Pinard", not "François Pinard". Doing it + this way can avoid mishandling non-ASCII characters if the + source is recoded to non-UTF-8, or if the compiler does not + treat UTF-8 as-is in character string contents. + + (Optionally, here you can also add / * TRANSLATORS: ... * / comments + explaining how the name is written or pronounced.) + + Here is an example in context. + + char const *author_names[2] = { + / * TRANSLATORS: This is the proper name "Danilo Šegan". + In the original Cyrillic it is "Данило Шеган". * / + proper_name_utf8 ("Danilo Segan", "Danilo \305\240egan"), + proper_name ("Bruno Haible") + }; + + Differences between proper_name_utf8 and proper_name_lite: + * proper_name_lite uses the localization provided by the translator. + If there is no localization, it uses the name with Unicode characters + only in UTF-8 locales, otherwise it uses the original name in English. + * proper_name_utf8 is more elaborate: + - It uses the name with Unicode characters also when the locale encoding + is not UTF-8 but contains the necessary characters (e.g. ISO-8859-x or + GB18030). + - If there is a localization, it produces a better result when the + translator has given a poor localization. + */ + +#ifndef _PROPERNAME_H +#define _PROPERNAME_H + + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return the localization of NAME. NAME is written in ASCII. */ +extern const char * proper_name (const char *name) /* NOT attribute const */; + +/* Return the localization of a name whose original writing is not ASCII. + NAME_UTF8 is the real name, written in UTF-8 with octal or hexadecimal + escape sequences. NAME_ASCII is a fallback written only with ASCII + characters. */ +extern const char * proper_name_utf8 (const char *name_ascii, + const char *name_utf8); + +/* Return the localization of the name spelled NAME_ASCII in ASCII, + and NAME_UTF8 in UTF-8. This function needs less infrastructure + than proper_name and proper_name_utf8. */ +extern const char *proper_name_lite (const char *name_ascii, + const char *name_utf8); + +#ifdef __cplusplus +} +#endif + + +#endif /* _PROPERNAME_H */ diff --git a/include/libgnulib/pty-private.h b/include/libgnulib/pty-private.h new file mode 100755 index 0000000..5dfcb7c --- /dev/null +++ b/include/libgnulib/pty-private.h @@ -0,0 +1,45 @@ +/* Interface to the pt_chown program. + Copyright (C) 1998-1999, 2009-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Zack Weinberg , 1998. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _PTY_PRIVATE_H +#define _PTY_PRIVATE_H 1 + +/* The group slave pseudo terminals belong to. */ +#define TTY_GROUP "tty" + +/* The file descriptor connected to the master pseudo terminal. */ +#define PTY_FILENO 3 + +/* Path to the helper program that implements 'grantpt' in user space. */ +#define _PATH_PT_CHOWN PKGLIBEXECDIR "/pt_chown" + +/* Test whether given TTY is really a Unix98 pseudo terminal. */ +/* #define unix98_pseudo_p(Dev) ... */ + +/* Exit codes for the helper program. */ +enum /* failure modes */ +{ + FAIL_EBADF = 1, + FAIL_EINVAL, + FAIL_EACCES, + FAIL_EXEC, + FAIL_ENOMEM +}; + +#endif /* pty-private.h */ diff --git a/include/libgnulib/quote.h b/include/libgnulib/quote.h new file mode 100755 index 0000000..f087a85 --- /dev/null +++ b/include/libgnulib/quote.h @@ -0,0 +1,56 @@ +/* quote.h - prototypes for quote.c + + Copyright (C) 1998-2001, 2003, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef QUOTE_H_ +#define QUOTE_H_ 1 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The quoting options used by quote_n and quote. Its type is incomplete, + so it's useful only in expressions like '"e_quoting_options'. */ +extern struct quoting_options quote_quoting_options; + +/* Return an unambiguous printable representation of ARG (of size + ARGSIZE), allocated in slot N, suitable for diagnostics. If + ARGSIZE is SIZE_MAX, use the string length of the argument for + ARGSIZE. */ +char const *quote_n_mem (int n, char const *arg, size_t argsize); + +/* Return an unambiguous printable representation of ARG (of size + ARGSIZE), suitable for diagnostics. If ARGSIZE is SIZE_MAX, use + the string length of the argument for ARGSIZE. */ +char const *quote_mem (char const *arg, size_t argsize); + +/* Return an unambiguous printable representation of ARG, allocated in + slot N, suitable for diagnostics. */ +char const *quote_n (int n, char const *arg); + +/* Return an unambiguous printable representation of ARG, suitable for + diagnostics. */ +char const *quote (char const *arg); + + +#ifdef __cplusplus +} +#endif + +#endif /* !QUOTE_H_ */ diff --git a/include/libgnulib/quotearg.h b/include/libgnulib/quotearg.h new file mode 100755 index 0000000..e525b9a --- /dev/null +++ b/include/libgnulib/quotearg.h @@ -0,0 +1,452 @@ +/* quotearg.h - quote arguments for output + + Copyright (C) 1998-2002, 2004, 2006, 2008-2024 Free Software Foundation, + Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert */ + +#ifndef QUOTEARG_H_ +#define QUOTEARG_H_ 1 + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Basic quoting styles. For each style, an example is given on the + input strings "simple", "\0 \t\n'\"\033?""?/\\", and "a:b", using + quotearg_buffer, quotearg_mem, and quotearg_colon_mem with that + style and the default flags and quoted characters. Note that the + examples are shown here as valid C strings rather than what + displays on a terminal (with "??/" as a trigraph for "\\"). */ +enum quoting_style + { + /* Output names as-is (ls --quoting-style=literal). Can result in + embedded null bytes if QA_ELIDE_NULL_BYTES is not in + effect. + + quotearg_buffer: + "simple", "\0 \t\n'\"\033??/\\", "a:b" + quotearg: + "simple", " \t\n'\"\033??/\\", "a:b" + quotearg_colon: + "simple", " \t\n'\"\033??/\\", "a:b" + */ + literal_quoting_style, + + /* Quote names for the shell if they contain shell metacharacters + or would cause ambiguous output (ls --quoting-style=shell). + Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not + in effect. + + quotearg_buffer: + "simple", "'\0 \t\n'\\''\"\033??/\\'", "a:b" + quotearg: + "simple", "' \t\n'\\''\"\033??/\\'", "a:b" + quotearg_colon: + "simple", "' \t\n'\\''\"\033??/\\'", "'a:b'" + */ + shell_quoting_style, + + /* Quote names for the shell, even if they would normally not + require quoting (ls --quoting-style=shell-always). Can result + in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect. + Behaves like shell_quoting_style if QA_ELIDE_OUTER_QUOTES is in + effect. + + quotearg_buffer: + "'simple'", "'\0 \t\n'\\''\"\033??/\\'", "'a:b'" + quotearg: + "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" + quotearg_colon: + "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" + */ + shell_always_quoting_style, + + /* Quote names for the shell if they contain shell metacharacters + or other problematic characters (ls --quoting-style=shell-escape). + Non printable characters are quoted using the $'...' syntax + , + which originated in ksh93 and is widely supported by most shells, + and proposed for inclusion in POSIX. + + quotearg_buffer: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b" + quotearg: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b" + quotearg_colon: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "'a:b'" + */ + shell_escape_quoting_style, + + /* Quote names for the shell even if they would normally not + require quoting (ls --quoting-style=shell-escape). + Non printable characters are quoted using the $'...' syntax + , + which originated in ksh93 and is widely supported by most shells, + and proposed for inclusion in POSIX. Behaves like + shell_escape_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect. + + quotearg_buffer: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b" + quotearg: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b" + quotearg_colon: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "'a:b'" + */ + shell_escape_always_quoting_style, + + /* Quote names as for a C language string (ls --quoting-style=c). + Behaves like c_maybe_quoting_style if QA_ELIDE_OUTER_QUOTES is + in effect. Split into consecutive strings if + QA_SPLIT_TRIGRAPHS. + + quotearg_buffer: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg_colon: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" + */ + c_quoting_style, + + /* Like c_quoting_style except omit the surrounding double-quote + characters if no quoted characters are encountered. + + quotearg_buffer: + "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" + quotearg: + "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" + quotearg_colon: + "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + */ + c_maybe_quoting_style, + + /* Like c_quoting_style except always omit the surrounding + double-quote characters and ignore QA_SPLIT_TRIGRAPHS + (ls --quoting-style=escape). + + quotearg_buffer: + "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" + quotearg: + "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" + quotearg_colon: + "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a\\:b" + */ + escape_quoting_style, + + /* Like clocale_quoting_style, but use single quotes in the + default C locale or if the program does not use gettext + (ls --quoting-style=locale). For UTF-8 locales, quote + characters will use Unicode. + + LC_MESSAGES=C + quotearg_buffer: + "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" + quotearg: + "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" + quotearg_colon: + "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a\\:b'" + + LC_MESSAGES=pt_PT.utf8 + quotearg_buffer: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg_colon: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" + */ + locale_quoting_style, + + /* Like c_quoting_style except use quotation marks appropriate for + the locale and ignore QA_SPLIT_TRIGRAPHS + (ls --quoting-style=clocale). + + LC_MESSAGES=C + quotearg_buffer: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg_colon: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" + + LC_MESSAGES=pt_PT.utf8 + quotearg_buffer: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg_colon: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" + */ + clocale_quoting_style, + + /* Like clocale_quoting_style except use the custom quotation marks + set by set_custom_quoting. If custom quotation marks are not + set, the behavior is undefined. + + left_quote = right_quote = "'" + quotearg_buffer: + "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" + quotearg: + "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" + quotearg_colon: + "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a\\:b'" + + left_quote = "(" and right_quote = ")" + quotearg_buffer: + "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)" + quotearg: + "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)" + quotearg_colon: + "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a\\:b)" + + left_quote = ":" and right_quote = " " + quotearg_buffer: + ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b " + quotearg: + ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b " + quotearg_colon: + ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a\\:b " + + left_quote = "\"'" and right_quote = "'\"" + Notice that this is treated as a single level of quotes or two + levels where the outer quote need not be escaped within the inner + quotes. For two levels where the outer quote must be escaped + within the inner quotes, you must use separate quotearg + invocations. + quotearg_buffer: + "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\"" + quotearg: + "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\"" + quotearg_colon: + "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a\\:b'\"" + */ + custom_quoting_style + }; + +/* Flags for use in set_quoting_flags. */ +enum quoting_flags + { + /* Always elide null bytes from styles that do not quote them, + even when the length of the result is available to the + caller. */ + QA_ELIDE_NULL_BYTES = 0x01, + + /* Omit the surrounding quote characters if no escaped characters + are encountered. Note that if no other character needs + escaping, then neither does the escape character. + *Attention!* This flag is unsupported in combination with the styles + shell_escape_quoting_style and shell_escape_always_quoting_style + (because in this situation it cannot handle strings that start + with a non-printable character). */ + QA_ELIDE_OUTER_QUOTES = 0x02, + + /* In the c_quoting_style and c_maybe_quoting_style, split ANSI + trigraph sequences into concatenated strings (for example, + "?""?/" rather than "??/", which could be confused with + "\\"). */ + QA_SPLIT_TRIGRAPHS = 0x04 + }; + +/* For now, --quoting-style=literal is the default, but this may change. */ +#ifndef DEFAULT_QUOTING_STYLE +# define DEFAULT_QUOTING_STYLE literal_quoting_style +#endif + +/* Names of quoting styles and their corresponding values. */ +extern char const *const quoting_style_args[]; +extern enum quoting_style const quoting_style_vals[]; + +struct quoting_options; + +/* The functions listed below set and use a hidden variable + that contains the default quoting style options. */ + +/* Allocate a new set of quoting options, with contents initially identical + to O if O is not null, or to the default if O is null. + It is the caller's responsibility to free the result. */ +struct quoting_options *clone_quoting_options (struct quoting_options *o) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* Get the value of O's quoting style. If O is null, use the default. */ +enum quoting_style get_quoting_style (struct quoting_options const *o); + +/* In O (or in the default if O is null), + set the value of the quoting style to S. */ +void set_quoting_style (struct quoting_options *o, enum quoting_style s); + +/* In O (or in the default if O is null), + set the value of the quoting options for character C to I. + Return the old value. Currently, the only values defined for I are + 0 (the default) and 1 (which means to quote the character even if + it would not otherwise be quoted). C must never be a digit or a + letter that has special meaning after a backslash (for example, "\t" + for tab). */ +int set_char_quoting (struct quoting_options *o, char c, int i); + +/* In O (or in the default if O is null), + set the value of the quoting options flag to I, which can be a + bitwise combination of enum quoting_flags, or 0 for default + behavior. Return the old value. */ +int set_quoting_flags (struct quoting_options *o, int i); + +/* In O (or in the default if O is null), + set the value of the quoting style to custom_quoting_style, + set the left quote to LEFT_QUOTE, and set the right quote to + RIGHT_QUOTE. Each of LEFT_QUOTE and RIGHT_QUOTE must be + null-terminated and can be the empty string. Because backslashes are + used for escaping, it does not make sense for RIGHT_QUOTE to contain + a backslash. RIGHT_QUOTE must not begin with a digit or a letter + that has special meaning after a backslash (for example, "\t" for + tab). */ +void set_custom_quoting (struct quoting_options *o, + char const *left_quote, + char const *right_quote); + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG (of size ARGSIZE), using O to control quoting. + If O is null, use the default. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + If ARGSIZE is -1, use the string length of the argument for ARGSIZE. + On output, BUFFER might contain embedded null bytes if ARGSIZE was + not -1, the style of O does not use backslash escapes, and the + flags of O do not request elision of null bytes.*/ +size_t quotearg_buffer (char *restrict buffer, size_t buffersize, + char const *arg, size_t argsize, + struct quoting_options const *o); + +/* Like quotearg_buffer, except return the result in a newly allocated + buffer. It is the caller's responsibility to free the result. The + result will not contain embedded null bytes. */ +char *quotearg_alloc (char const *arg, size_t argsize, + struct quoting_options const *o) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* Like quotearg_alloc, except that the length of the result, + excluding the terminating null byte, is stored into SIZE if it is + non-NULL. The result might contain embedded null bytes if ARGSIZE + was not -1, SIZE was not NULL, the style of O does not use + backslash escapes, and the flags of O do not request elision of + null bytes.*/ +char *quotearg_alloc_mem (char const *arg, size_t argsize, + size_t *size, struct quoting_options const *o) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* Use storage slot N to return a quoted version of the string ARG. + Use the default quoting options. + The returned value points to static storage that can be + reused by the next call to this function with the same value of N. + N must be nonnegative. The output of all functions in the + quotearg_n family are guaranteed to not contain embedded null + bytes.*/ +char *quotearg_n (int n, char const *arg); + +/* Equivalent to quotearg_n (0, ARG). */ +char *quotearg (char const *arg); + +/* Use storage slot N to return a quoted version of the argument ARG + of size ARGSIZE. This is like quotearg_n (N, ARG), except it can + quote null bytes. */ +char *quotearg_n_mem (int n, char const *arg, size_t argsize); + +/* Equivalent to quotearg_n_mem (0, ARG, ARGSIZE). */ +char *quotearg_mem (char const *arg, size_t argsize); + +/* Use style S and storage slot N to return a quoted version of the string ARG. + This is like quotearg_n (N, ARG), except that it uses S with no other + options to specify the quoting method. */ +char *quotearg_n_style (int n, enum quoting_style s, char const *arg); + +/* Use style S and storage slot N to return a quoted version of the + argument ARG of size ARGSIZE. This is like quotearg_n_style + (N, S, ARG), except it can quote null bytes. */ +char *quotearg_n_style_mem (int n, enum quoting_style s, + char const *arg, size_t argsize); + +/* Equivalent to quotearg_n_style (0, S, ARG). */ +char *quotearg_style (enum quoting_style s, char const *arg); + +/* Equivalent to quotearg_n_style_mem (0, S, ARG, ARGSIZE). */ +char *quotearg_style_mem (enum quoting_style s, + char const *arg, size_t argsize); + +/* Like quotearg (ARG), except also quote any instances of CH. + See set_char_quoting for a description of acceptable CH values. */ +char *quotearg_char (char const *arg, char ch); + +/* Like quotearg_char (ARG, CH), except it can quote null bytes. */ +char *quotearg_char_mem (char const *arg, size_t argsize, char ch); + +/* Equivalent to quotearg_char (ARG, ':'). */ +char *quotearg_colon (char const *arg); + +/* Like quotearg_colon (ARG), except it can quote null bytes. */ +char *quotearg_colon_mem (char const *arg, size_t argsize); + +/* Like quotearg_n_style, except with ':' quoting enabled. */ +char *quotearg_n_style_colon (int n, enum quoting_style s, char const *arg); + +/* Like quotearg_n_style (N, S, ARG) but with S as custom_quoting_style + with left quote as LEFT_QUOTE and right quote as RIGHT_QUOTE. See + set_custom_quoting for a description of acceptable LEFT_QUOTE and + RIGHT_QUOTE values. */ +char *quotearg_n_custom (int n, char const *left_quote, + char const *right_quote, char const *arg); + +/* Like quotearg_n_custom (N, LEFT_QUOTE, RIGHT_QUOTE, ARG) except it + can quote null bytes. */ +char *quotearg_n_custom_mem (int n, char const *left_quote, + char const *right_quote, + char const *arg, size_t argsize); + +/* Equivalent to quotearg_n_custom (0, LEFT_QUOTE, RIGHT_QUOTE, ARG). */ +char *quotearg_custom (char const *left_quote, char const *right_quote, + char const *arg); + +/* Equivalent to quotearg_n_custom_mem (0, LEFT_QUOTE, RIGHT_QUOTE, ARG, + ARGSIZE). */ +char *quotearg_custom_mem (char const *left_quote, + char const *right_quote, + char const *arg, size_t argsize); + +/* Free any dynamically allocated memory. */ +void quotearg_free (void); + + +#ifdef __cplusplus +} +#endif + +#endif /* !QUOTEARG_H_ */ diff --git a/include/libgnulib/rawmemchr.valgrind b/include/libgnulib/rawmemchr.valgrind new file mode 100755 index 0000000..bb201f7 --- /dev/null +++ b/include/libgnulib/rawmemchr.valgrind @@ -0,0 +1,28 @@ +# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). + +# Copyright (C) 2008-2024 Free Software Foundation, Inc. +# +# This file is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# This file 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +# This use is OK because it provides only a speedup. +{ + rawmemchr-value4 + Memcheck:Value4 + fun:rawmemchr +} +{ + rawmemchr-value8 + Memcheck:Value8 + fun:rawmemchr +} diff --git a/include/libgnulib/read-file.h b/include/libgnulib/read-file.h new file mode 100755 index 0000000..e91699f --- /dev/null +++ b/include/libgnulib/read-file.h @@ -0,0 +1,54 @@ +/* read-file.h -- read file contents into a string + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef READ_FILE_H +#define READ_FILE_H + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get size_t, free(). */ +#include + +/* Get FILE. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Indicate that the file is treated as binary. */ +#define RF_BINARY 0x1 + +/* Indicate that the file content contains sensitive information. */ +#define RF_SENSITIVE 0x2 + +extern char *fread_file (FILE * stream, int flags, size_t * length) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +extern char *read_file (const char *filename, int flags, size_t * length) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif + +#endif /* READ_FILE_H */ diff --git a/include/libgnulib/readline.h b/include/libgnulib/readline.h new file mode 100755 index 0000000..b4941df --- /dev/null +++ b/include/libgnulib/readline.h @@ -0,0 +1,51 @@ +/* readline.h --- Simple implementation of readline. + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + Written by Simon Josefsson + + 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 3 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, see . */ + +#ifndef GL_READLINE_H +#define GL_READLINE_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, HAVE_READLINE_READLINE_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if HAVE_READLINE_READLINE_H +/* makes use of the FILE type without including + itself. */ +# include +# include +#else +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Prints a prompt PROMPT and then reads and returns a single line of + text from the user. If PROMPT is NULL or the empty string, no + prompt is displayed. The returned line is allocated with malloc; + the caller should free the line when it has finished with it. */ +extern char *readline (const char *prompt) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +# ifdef __cplusplus +} +# endif + +#endif + +#endif /* GL_READLINE_H */ diff --git a/include/libgnulib/readtokens.h b/include/libgnulib/readtokens.h new file mode 100755 index 0000000..7514308 --- /dev/null +++ b/include/libgnulib/readtokens.h @@ -0,0 +1,55 @@ +/* readtokens.h -- Functions for reading tokens from an input stream. + + Copyright (C) 1990-1991, 1999, 2001-2004, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . + + Written by Jim Meyering. */ + +#ifndef READTOKENS_H +# define READTOKENS_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* FIXME: This header should use idx_t, not size_t. */ + +struct tokenbuffer +{ + size_t size; + char *buffer; +}; +typedef struct tokenbuffer token_buffer; + +void init_tokenbuffer (token_buffer *tokenbuffer); + +size_t + readtoken (FILE *stream, const char *delim, size_t n_delim, + token_buffer *tokenbuffer); +size_t + readtokens (FILE *stream, size_t projected_n_tokens, + const char *delim, size_t n_delim, + char ***tokens_out, size_t **token_lengths); + + +#ifdef __cplusplus +} +#endif + +#endif /* not READTOKENS_H */ diff --git a/include/libgnulib/readtokens0.h b/include/libgnulib/readtokens0.h new file mode 100755 index 0000000..e135dfc --- /dev/null +++ b/include/libgnulib/readtokens0.h @@ -0,0 +1,51 @@ +/* readtokens0.h -- read NUL-separated tokens from an input stream. + + Copyright (C) 2004, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . + + Written by Jim Meyering. */ + +#ifndef READTOKENS0_H +#define READTOKENS0_H 1 + +#include +#include +#include "obstack.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +struct Tokens +{ + size_t n_tok; + char **tok; + size_t *tok_len; + struct obstack o_data; /* Contains data pointed to by each tok[i]. */ + struct obstack o_tok; /* array of pointers to tokens */ + struct obstack o_tok_len; /* array of token lengths */ +}; + +void readtokens0_init (struct Tokens *t); +void readtokens0_free (struct Tokens *t); +bool readtokens0 (FILE *in, struct Tokens *t); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/readutmp.h b/include/libgnulib/readutmp.h new file mode 100755 index 0000000..dcfd44d --- /dev/null +++ b/include/libgnulib/readutmp.h @@ -0,0 +1,338 @@ +/* Declarations for GNU's read utmp module. + + Copyright (C) 1992-2007, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by jla; revised by djm */ + +#ifndef __READUTMP_H__ +#define __READUTMP_H__ + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL, + HAVE_UTMP_H, HAVE_UTMPX_H, HAVE_STRUCT_UTMP_*, HAVE_STRUCT_UTMPX_*, + HAVE_UTMPNAME, HAVE_UTMPXNAME. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include "idx.h" + +#include +#include +#include + +/* AIX 4.3.3 has both utmp.h and utmpx.h, but only struct utmp + has the ut_exit member. */ +#if (HAVE_UTMPX_H && HAVE_UTMP_H && HAVE_STRUCT_UTMP_UT_EXIT \ + && ! HAVE_STRUCT_UTMPX_UT_EXIT) +# undef HAVE_UTMPX_H +#endif + +/* HPUX 10.20 needs utmp.h, for the definition of e.g., UTMP_FILE. */ +#if HAVE_UTMP_H +# include +#endif + +/* Needed for BOOT_TIME and USER_PROCESS. */ +#if HAVE_UTMPX_H +# if defined _THREAD_SAFE && defined UTMP_DATA_INIT + /* When including both utmp.h and utmpx.h on AIX 4.3, with _THREAD_SAFE + defined, work around the duplicate struct utmp_data declaration. */ +# define utmp_data gl_aix_4_3_workaround_utmp_data +# endif +# include +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Type of entries returned by read_utmp on all platforms. */ +struct gl_utmp +{ + /* All 'char *' here are of arbitrary length and point to storage + with lifetime equal to that of this struct. */ + char *ut_user; /* User name */ + char *ut_id; /* Session ID */ + char *ut_line; /* seat / device */ + char *ut_host; /* for remote sessions: user@host or host, + for local sessions: the X11 display :N */ + struct timespec ut_ts; /* time */ + pid_t ut_pid; /* process ID of ? */ + pid_t ut_session; /* process ID of session leader */ + short ut_type; /* BOOT_TIME, USER_PROCESS, or other */ + struct { int e_termination; int e_exit; } ut_exit; +}; + +/* The following types, macros, and constants describe the 'struct gl_utmp'. */ +#define UT_USER(UT) ((UT)->ut_user) +#define UT_TIME_MEMBER(UT) ((UT)->ut_ts.tv_sec) +#define UT_PID(UT) ((UT)->ut_pid) +#define UT_TYPE_EQ(UT, V) ((UT)->ut_type == (V)) +#define UT_TYPE_NOT_DEFINED 0 +#define UT_EXIT_E_TERMINATION(UT) ((UT)->ut_exit.e_termination) +#define UT_EXIT_E_EXIT(UT) ((UT)->ut_exit.e_exit) + +/* Type of entry returned by read_utmp(). */ +typedef struct gl_utmp STRUCT_UTMP; + +/* Size of the UT_USER (ut) member, or -1 if unbounded. */ +enum { UT_USER_SIZE = -1 }; + +/* Size of the ut->ut_id member, or -1 if unbounded. */ +enum { UT_ID_SIZE = -1 }; + +/* Size of the ut->ut_line member, or -1 if unbounded. */ +enum { UT_LINE_SIZE = -1 }; + +/* Size of the ut->ut_host member, or -1 if unbounded. */ +enum { UT_HOST_SIZE = -1 }; + + +/* When read_utmp accesses a file (as opposed to fetching the information + from systemd), it uses the following low-level types and macros. + Keep them here, rather than moving them into readutmp.c, for backward + compatibility. */ + +#if HAVE_UTMPX_H + +/* defines 'struct utmpx' with the following fields: + + Field Type Platforms + ---------- ------ --------- + ⎡ ut_user char[] glibc, musl, macOS, FreeBSD, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ⎣ ut_name char[] NetBSD, Minix + ut_id char[] glibc, musl, macOS, FreeBSD, NetBSD, Minix, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ut_line char[] glibc, musl, macOS, FreeBSD, NetBSD, Minix, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ut_pid pid_t glibc, musl, macOS, FreeBSD, NetBSD, Minix, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ut_type short glibc, musl, macOS, FreeBSD, NetBSD, Minix, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ⎡ ut_tv struct glibc, musl, macOS, FreeBSD, NetBSD, Minix, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ⎢ { tv_sec; tv_usec; } + ⎣ ut_time time_t Cygwin + ut_host char[] glibc, musl, macOS, FreeBSD, NetBSD, Minix, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ut_exit struct glibc, musl, NetBSD, Minix, HP-UX, IRIX, Solaris, Android + { e_termination; e_exit; } + ut_session [long] int glibc, musl, NetBSD, Minix, IRIX, Solaris, Android + ⎡ ut_addr [long] int HP-UX, Cygwin + ⎢ ut_addr_v6 [u]int[4] glibc, musl, Android + ⎣ ut_ss struct sockaddr_storage NetBSD, Minix + */ + +# if __GLIBC__ && _TIME_BITS == 64 +/* This is a near-copy of glibc's struct utmpx, which stops working + after the year 2038. Unlike the glibc version, struct utmpx32 + describes the file format even if time_t is 64 bits. */ +#define _GL_UT_USER_SIZE sizeof (((struct utmpx *) 0)->ut_user) +#define _GL_UT_ID_SIZE sizeof (((struct utmpx *) 0)->ut_id) +#define _GL_UT_LINE_SIZE sizeof (((struct utmpx *) 0)->ut_line) +#define _GL_UT_HOST_SIZE sizeof (((struct utmpx *) 0)->ut_host) +struct utmpx32 +{ + short int ut_type; /* Type of login. */ + pid_t ut_pid; /* Process ID of login process. */ + char ut_line[_GL_UT_LINE_SIZE]; /* Devicename. */ + char ut_id[_GL_UT_ID_SIZE]; /* Inittab ID. */ + char ut_user[_GL_UT_USER_SIZE]; /* Username. */ + char ut_host[_GL_UT_HOST_SIZE]; /* Hostname for remote login. */ + struct __exit_status ut_exit; /* Exit status of a process marked + as DEAD_PROCESS. */ + /* The fields ut_session and ut_tv must be the same size when compiled + 32- and 64-bit. This allows files and shared memory to be shared + between 32- and 64-bit applications. */ + int ut_session; /* Session ID, used for windowing. */ + struct + { + /* Seconds. Unsigned not signed, as glibc did not exist before 1970, + and if the format is still in use after 2038 its timestamps + will surely have the sign bit on. This hack stops working + at 2106-02-07 06:28:16 UTC. */ + unsigned int tv_sec; + int tv_usec; /* Microseconds. */ + } ut_tv; /* Time entry was made. */ + int ut_addr_v6[4]; /* Internet address of remote host. */ + char ut_reserved[20]; /* Reserved for future use. */ +}; +# define UTMP_STRUCT_NAME utmpx32 +# else +# define UTMP_STRUCT_NAME utmpx +# endif +# define SET_UTMP_ENT setutxent +# define GET_UTMP_ENT getutxent +# define END_UTMP_ENT endutxent +# ifdef HAVE_UTMPXNAME /* glibc, musl, macOS, NetBSD, Minix, IRIX, Solaris, Cygwin */ +# define UTMP_NAME_FUNCTION utmpxname +# elif defined UTXDB_ACTIVE /* FreeBSD */ +# define UTMP_NAME_FUNCTION(x) setutxdb (UTXDB_ACTIVE, x) +# elif defined __ANDROID__ /* Android */ +/* As of Android NDK r26, the getutxent, setutxent functions are no-ops. + Therefore we can ignore the file name. */ +# define UTMP_NAME_FUNCTION(x) ((void) (x)) +# endif + +#elif HAVE_UTMP_H + +/* defines 'struct utmp' with the following fields: + + Field Type Platforms + ---------- ------ --------- + ⎡ ut_user char[] glibc, musl, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ⎣ ut_name char[] macOS, old FreeBSD, NetBSD, OpenBSD, Minix + ut_id char[] glibc, musl, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ut_line char[] glibc, musl, macOS, old FreeBSD, NetBSD, OpenBSD, Minix, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ut_pid pid_t glibc, musl, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ut_type short glibc, musl, AIX, HP-UX, IRIX, Solaris, Cygwin, Android + ⎡ ut_tv struct glibc, musl, Android + ⎢ { tv_sec; tv_usec; } + ⎣ ut_time time_t macOS, old FreeBSD, NetBSD, OpenBSD, Minix, AIX, HP-UX, IRIX, Solaris, Cygwin + ut_host char[] glibc, musl, macOS, old FreeBSD, NetBSD, OpenBSD, Minix, AIX, HP-UX, Cygwin, Android + ut_exit struct glibc, musl, AIX, HP-UX, IRIX, Solaris, Android + { e_termination; e_exit; } + ut_session [long] int glibc, musl, Android + ⎡ ut_addr [long] int HP-UX, Cygwin + ⎣ ut_addr_v6 [u]int[4] glibc, musl, Android + */ + +# define UTMP_STRUCT_NAME utmp +# define SET_UTMP_ENT setutent +# define GET_UTMP_ENT getutent +# define END_UTMP_ENT endutent +# ifdef HAVE_UTMPNAME /* glibc, musl, NetBSD, Minix, AIX, HP-UX, IRIX, Solaris, Cygwin, Android */ +# define UTMP_NAME_FUNCTION utmpname +# endif + +#endif + +/* Evaluates to 1 if gl_utmp's ut_id field may ever have a non-zero value. */ +#define HAVE_STRUCT_XTMP_UT_ID \ + (READUTMP_USE_SYSTEMD \ + || (HAVE_UTMPX_H ? HAVE_STRUCT_UTMPX_UT_ID : HAVE_STRUCT_UTMP_UT_ID)) + +/* Evaluates to 1 if gl_utmp's ut_pid field may ever have a non-zero value. */ +#define HAVE_STRUCT_XTMP_UT_PID \ + (READUTMP_USE_SYSTEMD \ + || (HAVE_UTMPX_H ? HAVE_STRUCT_UTMPX_UT_PID : HAVE_STRUCT_UTMP_UT_PID)) + +/* Evaluates to 1 if gl_utmp's ut_host field may ever be non-empty. */ +#define HAVE_STRUCT_XTMP_UT_HOST \ + (READUTMP_USE_SYSTEMD \ + || (HAVE_UTMPX_H ? HAVE_STRUCT_UTMPX_UT_HOST : HAVE_STRUCT_UTMP_UT_HOST)) + +/* Definition of UTMP_FILE. + On glibc systems, UTMP_FILE is "/var/run/utmp". */ +#if !defined UTMP_FILE && defined _PATH_UTMP +# define UTMP_FILE _PATH_UTMP +#endif +#ifdef UTMPX_FILE /* Solaris, SysVr4 */ +# undef UTMP_FILE +# define UTMP_FILE UTMPX_FILE +#endif +#ifndef UTMP_FILE +# define UTMP_FILE "/etc/utmp" +#endif + +/* Definition of WTMP_FILE. + On glibc systems, UTMP_FILE is "/var/log/wtmp". */ +#if !defined WTMP_FILE && defined _PATH_WTMP +# define WTMP_FILE _PATH_WTMP +#endif +#ifdef WTMPX_FILE /* Solaris, SysVr4 */ +# undef WTMP_FILE +# define WTMP_FILE WTMPX_FILE +#endif +#ifndef WTMP_FILE +# define WTMP_FILE "/etc/wtmp" +#endif + +/* In early versions of Android, did not define BOOT_TIME, only + USER_PROCESS. We need to use the value that is defined in newer versions + of Android. */ +#if defined __ANDROID__ && !defined BOOT_TIME +# define BOOT_TIME 2 +#endif + +/* Some platforms, such as OpenBSD, don't have an ut_type field and don't have + the BOOT_TIME and USER_PROCESS macros. But we want to support them in + 'struct gl_utmp'. */ +#if !(HAVE_UTMPX_H ? HAVE_STRUCT_UTMPX_UT_TYPE : HAVE_STRUCT_UTMP_UT_TYPE) +# define BOOT_TIME 2 +# define USER_PROCESS 0 +#endif + +/* Macros that test (UT)->ut_type. */ +#ifdef BOOT_TIME +# define UT_TYPE_BOOT_TIME(UT) ((UT)->ut_type == BOOT_TIME) +#else +# define UT_TYPE_BOOT_TIME(UT) 0 +#endif +#ifdef USER_PROCESS +# define UT_TYPE_USER_PROCESS(UT) ((UT)->ut_type == USER_PROCESS) +#else +# define UT_TYPE_USER_PROCESS(UT) 0 +#endif + +/* Determines whether an entry *UT corresponds to a user process. */ +#define IS_USER_PROCESS(UT) \ + ((UT)->ut_user[0] && UT_TYPE_USER_PROCESS (UT)) + +/* Define if read_utmp is not just a dummy. */ +#if READUTMP_USE_SYSTEMD || HAVE_UTMPX_H || HAVE_UTMP_H || defined __CYGWIN__ || defined _WIN32 +# define READ_UTMP_SUPPORTED 1 +#endif + +/* Options for read_utmp. */ +enum + { + READ_UTMP_CHECK_PIDS = 1, + READ_UTMP_USER_PROCESS = 2, + READ_UTMP_BOOT_TIME = 4, + READ_UTMP_NO_BOOT_TIME = 8 + }; + +/* Return a copy of (UT)->ut_user, without trailing spaces, + as a freshly allocated string. */ +char *extract_trimmed_name (const STRUCT_UTMP *ut) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* Read the utmp entries corresponding to file FILE into freshly- + malloc'd storage, set *UTMP_BUF to that pointer, set *N_ENTRIES to + the number of entries, and return zero. If there is any error, + return -1, setting errno, and don't modify the parameters. + A good candidate for FILE is UTMP_FILE. + If OPTIONS & READ_UTMP_CHECK_PIDS is nonzero, omit entries whose + process-IDs do not currently exist. + If OPTIONS & READ_UTMP_USER_PROCESS is nonzero, omit entries which + do not correspond to a user process. + If OPTIONS & READ_UTMP_BOOT_TIME is nonzero, omit all entries except + the one that contains the boot time. + If OPTIONS & READ_UTMP_NO_BOOT_TIME is nonzero, omit the boot time + entries. + + This function is not multithread-safe, since on many platforms it + invokes the functions setutxent, getutxent, endutxent. These + functions are needed because they may lock FILE (so that we don't + read garbage when a concurrent process writes to FILE), but their + drawback is that they have a common global state. */ +int read_utmp (char const *file, idx_t *n_entries, STRUCT_UTMP **utmp_buf, + int options); + + +#ifdef __cplusplus +} +#endif + +#endif /* __READUTMP_H__ */ diff --git a/include/libgnulib/regex-quote.h b/include/libgnulib/regex-quote.h new file mode 100755 index 0000000..fe271e3 --- /dev/null +++ b/include/libgnulib/regex-quote.h @@ -0,0 +1,102 @@ +/* Construct a regular expression from a literal string. + Copyright (C) 1995, 2010-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2010. + + 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 3 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, see . */ + +#ifndef _REGEX_QUOTE_H +#define _REGEX_QUOTE_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Specifies a quotation task for converting a fixed string to a regular + expression pattern. */ +struct regex_quote_spec +{ + /* True if the regular expression pattern consists of multibyte characters + (in the encoding given by the LC_CTYPE category of the locale), + false if it consists of single bytes or UTF-8 characters. */ + unsigned int /*bool*/ multibyte : 1; + /* True if the regular expression pattern shall match only entire lines. */ + unsigned int /*bool*/ anchored : 1; + /* Set of characters that need to be escaped (all ASCII), as a + NUL-terminated string. */ + char special[30 + 1]; +}; + + +/* Creates a quotation task that produces a POSIX regular expression, that is, + a pattern that can be compiled with regcomp(). + CFLAGS can be 0 or REG_EXTENDED. + If it is 0, the result is a Basic Regular Expression (BRE) + . + If it is REG_EXTENDED, the result is an Extended Regular Expression (ERE) + . + If ANCHORED is false, the regular expression will match substrings of lines. + If ANCHORED is true, it will match only complete lines, */ +extern struct regex_quote_spec + regex_quote_spec_posix (int cflags, bool anchored); + +/* Creates a quotation task that produces a regular expression that can be + compiled with the GNU API function re_compile_pattern(). + SYNTAX describes the syntax of the regular expression (such as + RE_SYNTAX_POSIX_BASIC, RE_SYNTAX_POSIX_EXTENDED, RE_SYNTAX_EMACS, all + defined in ). It must be the same value as 're_syntax_options' + at the moment of the re_compile_pattern() call. + If ANCHORED is false, the regular expression will match substrings of lines. + If ANCHORED is true, it will match only complete lines, */ +extern struct regex_quote_spec + regex_quote_spec_gnu (unsigned long /*reg_syntax_t*/ syntax, bool anchored); + +/* Creates a quotation task that produces a PCRE regular expression, that is, + a pattern that can be compiled with pcre_compile(). + OPTIONS is the same value as the second argument passed to pcre_compile(). + If ANCHORED is false, the regular expression will match substrings of lines. + If ANCHORED is true, it will match only complete lines, */ +extern struct regex_quote_spec + regex_quote_spec_pcre (int options, bool anchored); + + +/* Returns the number of bytes needed for the quoted string. */ +extern size_t + regex_quote_length (const char *string, const struct regex_quote_spec *spec); + +/* Copies the quoted string to p and returns the incremented p. + There must be room for regex_quote_length (string, spec) + 1 bytes at p. */ +extern char * + regex_quote_copy (char *restrict p, + const char *string, const struct regex_quote_spec *spec); + +/* Returns the freshly allocated quoted string. */ +extern char * + regex_quote (const char *string, const struct regex_quote_spec *spec) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + + +#ifdef __cplusplus +} +#endif + +#endif /* _REGEX_QUOTE_H */ diff --git a/include/libgnulib/regex.h b/include/libgnulib/regex.h new file mode 100755 index 0000000..ccf40ce --- /dev/null +++ b/include/libgnulib/regex.h @@ -0,0 +1,699 @@ +/* Definitions for data structures and routines for the regular + expression library. + Copyright (C) 1985, 1989-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _REGEX_H +#define _REGEX_H 1 + +#include + +/* Allow the use in C++ code. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Define __USE_GNU to declare GNU extensions that violate the + POSIX name space rules. */ +#ifdef _GNU_SOURCE +# define __USE_GNU 1 +#endif + +#ifdef _REGEX_LARGE_OFFSETS + +/* Use types and values that are wide enough to represent signed and + unsigned byte offsets in memory. This currently works only when + the regex code is used outside of the GNU C library; it is not yet + supported within glibc itself, and glibc users should not define + _REGEX_LARGE_OFFSETS. */ + +/* The type of object sizes. */ +typedef size_t __re_size_t; + +/* The type of object sizes, in places where the traditional code + uses unsigned long int. */ +typedef size_t __re_long_size_t; + +#else + +/* The traditional GNU regex implementation mishandles strings longer + than INT_MAX. */ +typedef unsigned int __re_size_t; +typedef unsigned long int __re_long_size_t; + +#endif + +/* The following two types have to be signed and unsigned integer type + wide enough to hold a value of a pointer. For most ANSI compilers + ptrdiff_t and size_t should be likely OK. Still size of these two + types is 2 for Microsoft C. Ugh... */ +typedef long int s_reg_t; +typedef unsigned long int active_reg_t; + +/* The following bits are used to determine the regexp syntax we + recognize. The set/not-set meanings are chosen so that Emacs syntax + remains the value 0. The bits are given in alphabetical order, and + the definitions shifted by one from the previous bit; thus, when we + add or remove a bit, only one other definition need change. */ +typedef unsigned long int reg_syntax_t; + +#ifdef __USE_GNU +/* If this bit is not set, then \ inside a bracket expression is literal. + If set, then such a \ quotes the following character. */ +# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) + +/* If this bit is not set, then + and ? are operators, and \+ and \? are + literals. + If set, then \+ and \? are operators and + and ? are literals. */ +# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) + +/* If this bit is set, then character classes are supported. They are: + [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], + [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. + If not set, then character classes are not supported. */ +# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) + +/* If this bit is set, then ^ and $ are always anchors (outside bracket + expressions, of course). + If this bit is not set, then it depends: + ^ is an anchor if it is at the beginning of a regular + expression or after an open-group or an alternation operator; + $ is an anchor if it is at the end of a regular expression, or + before a close-group or an alternation operator. + + This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because + POSIX draft 11.2 says that * etc. in leading positions is undefined. + We already implemented a previous draft which made those constructs + invalid, though, so we haven't changed the code back. */ +# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) + +/* If this bit is set, then special characters are always special + regardless of where they are in the pattern. + If this bit is not set, then special characters are special only in + some contexts; otherwise they are ordinary. Specifically, + * + ? and intervals are only special when not after the beginning, + open-group, or alternation operator. */ +# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) + +/* If this bit is set, then *, +, ?, and { cannot be first in an re or + immediately after an alternation or begin-group operator. */ +# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) + +/* If this bit is set, then . matches newline. + If not set, then it doesn't. */ +# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) + +/* If this bit is set, then . doesn't match NUL. + If not set, then it does. */ +# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) + +/* If this bit is set, nonmatching lists [^...] do not match newline. + If not set, they do. */ +# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) + +/* If this bit is set, either \{...\} or {...} defines an + interval, depending on RE_NO_BK_BRACES. + If not set, \{, \}, {, and } are literals. */ +# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) + +/* If this bit is set, +, ? and | aren't recognized as operators. + If not set, they are. */ +# define RE_LIMITED_OPS (RE_INTERVALS << 1) + +/* If this bit is set, newline is an alternation operator. + If not set, newline is literal. */ +# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) + +/* If this bit is set, then '{...}' defines an interval, and \{ and \} + are literals. + If not set, then '\{...\}' defines an interval. */ +# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) + +/* If this bit is set, (...) defines a group, and \( and \) are literals. + If not set, \(...\) defines a group, and ( and ) are literals. */ +# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) + +/* If this bit is set, then \ matches . + If not set, then \ is a back-reference. */ +# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) + +/* If this bit is set, then | is an alternation operator, and \| is literal. + If not set, then \| is an alternation operator, and | is literal. */ +# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) + +/* If this bit is set, then an ending range point collating higher + than the starting range point, as in [z-a], is invalid. + If not set, then when ending range point collates higher than the + starting range point, the range is ignored. */ +# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) + +/* If this bit is set, then an unmatched ) is ordinary. + If not set, then an unmatched ) is invalid. */ +# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) + +/* If this bit is set, succeed as soon as we match the whole pattern, + without further backtracking. */ +# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) + +/* If this bit is set, do not process the GNU regex operators. + If not set, then the GNU regex operators are recognized. */ +# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) + +/* If this bit is set, turn on internal regex debugging. + If not set, and debugging was on, turn it off. + This only works if regex.c is compiled -DDEBUG. + We define this bit always, so that all that's needed to turn on + debugging is to recompile regex.c; the calling code can always have + this bit set, and it won't affect anything in the normal case. */ +# define RE_DEBUG (RE_NO_GNU_OPS << 1) + +/* If this bit is set, a syntactically invalid interval is treated as + a string of ordinary characters. For example, the ERE 'a{1' is + treated as 'a\{1'. */ +# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) + +/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only + for ^, because it is difficult to scan the regex backwards to find + whether ^ should be special. */ +# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) + +/* If this bit is set, then \{ cannot be first in a regex or + immediately after an alternation, open-group or \} operator. */ +# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) + +/* If this bit is set, then no_sub will be set to 1 during + re_compile_pattern. */ +# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) +#endif + +/* This global variable defines the particular regexp syntax to use (for + some interfaces). When a regexp is compiled, the syntax used is + stored in the pattern buffer, so changing this does not affect + already-compiled regexps. */ +extern reg_syntax_t re_syntax_options; + +#ifdef __USE_GNU +/* Define combinations of the above bits for the standard possibilities. + (The [[[ comments delimit what gets put into the Texinfo file, so + don't delete them!) */ +/* [[[begin syntaxes]]] */ +# define RE_SYNTAX_EMACS 0 + +# define RE_SYNTAX_AWK \ + (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ + | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CHAR_CLASSES \ + | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) + +# define RE_SYNTAX_GNU_AWK \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INVALID_INTERVAL_ORD) \ + & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \ + | RE_CONTEXT_INVALID_OPS )) + +# define RE_SYNTAX_POSIX_AWK \ + (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INTERVALS | RE_NO_GNU_OPS \ + | RE_INVALID_INTERVAL_ORD) + +# define RE_SYNTAX_GREP \ + ((RE_SYNTAX_POSIX_BASIC | RE_NEWLINE_ALT) \ + & ~(RE_CONTEXT_INVALID_DUP | RE_DOT_NOT_NULL)) + +# define RE_SYNTAX_EGREP \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_INVALID_INTERVAL_ORD | RE_NEWLINE_ALT) \ + & ~(RE_CONTEXT_INVALID_OPS | RE_DOT_NOT_NULL)) + +/* POSIX grep -E behavior is no longer incompatible with GNU. */ +# define RE_SYNTAX_POSIX_EGREP \ + RE_SYNTAX_EGREP + +/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ +# define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC + +# define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC + +/* Syntax bits common to both basic and extended POSIX regex syntax. */ +# define _RE_SYNTAX_POSIX_COMMON \ + (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ + | RE_INTERVALS | RE_NO_EMPTY_RANGES) + +# define RE_SYNTAX_POSIX_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) + +/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes + RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this + isn't minimal, since other operators, such as \`, aren't disabled. */ +# define RE_SYNTAX_POSIX_MINIMAL_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) + +# define RE_SYNTAX_POSIX_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ + | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) + +/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is + removed and RE_NO_BK_REFS is added. */ +# define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) +/* [[[end syntaxes]]] */ + +/* Maximum number of duplicates an interval can allow. POSIX-conforming + systems might define this in , but we want our + value, so remove any previous define. */ +# ifdef _REGEX_INCLUDE_LIMITS_H +# include +# endif +# ifdef RE_DUP_MAX +# undef RE_DUP_MAX +# endif + +/* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored + the counter as a 2-byte signed integer. This is no longer true, so + RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to + ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined. + However, there would be a huge performance problem if someone + actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains + its historical value. */ +# define RE_DUP_MAX (0x7fff) +#endif + + +/* POSIX 'cflags' bits (i.e., information for 'regcomp'). */ + +/* If this bit is set, then use extended regular expression syntax. + If not set, then use basic regular expression syntax. */ +#define REG_EXTENDED 1 + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +#define REG_ICASE (1 << 1) + +/* If this bit is set, then anchors do not match at newline + characters in the string. + If not set, then anchors do match at newlines. */ +#define REG_NEWLINE (1 << 2) + +/* If this bit is set, then report only success or fail in regexec. + If not set, then returns differ between not matching and errors. */ +#define REG_NOSUB (1 << 3) + + +/* POSIX 'eflags' bits (i.e., information for regexec). */ + +/* If this bit is set, then the beginning-of-line operator doesn't match + the beginning of the string (presumably because it's not the + beginning of a line). + If not set, then the beginning-of-line operator does match the + beginning of the string. */ +#define REG_NOTBOL 1 + +/* Like REG_NOTBOL, except for the end-of-line. */ +#define REG_NOTEOL (1 << 1) + +/* Use PMATCH[0] to delimit the start and end of the search in the + buffer. */ +#define REG_STARTEND (1 << 2) + + +/* If any error codes are removed, changed, or added, update the + '__re_error_msgid' table in regcomp.c. */ + +typedef enum +{ + _REG_ENOSYS = -1, /* This will never happen for this implementation. */ + _REG_NOERROR = 0, /* Success. */ + _REG_NOMATCH, /* Didn't find a match (for regexec). */ + + /* POSIX regcomp return error codes. (In the order listed in the + standard.) */ + _REG_BADPAT, /* Invalid pattern. */ + _REG_ECOLLATE, /* Invalid collating element. */ + _REG_ECTYPE, /* Invalid character class name. */ + _REG_EESCAPE, /* Trailing backslash. */ + _REG_ESUBREG, /* Invalid back reference. */ + _REG_EBRACK, /* Unmatched left bracket. */ + _REG_EPAREN, /* Parenthesis imbalance. */ + _REG_EBRACE, /* Unmatched \{. */ + _REG_BADBR, /* Invalid contents of \{\}. */ + _REG_ERANGE, /* Invalid range end. */ + _REG_ESPACE, /* Ran out of memory. */ + _REG_BADRPT, /* No preceding re for repetition op. */ + + /* Error codes we've added. */ + _REG_EEND, /* Premature end. */ + _REG_ESIZE, /* Too large (e.g., repeat count too large). */ + _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ +} reg_errcode_t; + +#if defined _XOPEN_SOURCE || defined __USE_XOPEN2K +# define REG_ENOSYS _REG_ENOSYS +#endif +#define REG_NOERROR _REG_NOERROR +#define REG_NOMATCH _REG_NOMATCH +#define REG_BADPAT _REG_BADPAT +#define REG_ECOLLATE _REG_ECOLLATE +#define REG_ECTYPE _REG_ECTYPE +#define REG_EESCAPE _REG_EESCAPE +#define REG_ESUBREG _REG_ESUBREG +#define REG_EBRACK _REG_EBRACK +#define REG_EPAREN _REG_EPAREN +#define REG_EBRACE _REG_EBRACE +#define REG_BADBR _REG_BADBR +#define REG_ERANGE _REG_ERANGE +#define REG_ESPACE _REG_ESPACE +#define REG_BADRPT _REG_BADRPT +#define REG_EEND _REG_EEND +#define REG_ESIZE _REG_ESIZE +#define REG_ERPAREN _REG_ERPAREN + +/* This data structure represents a compiled pattern. Before calling + the pattern compiler, the fields 'buffer', 'allocated', 'fastmap', + and 'translate' can be set. After the pattern has been compiled, + the fields 're_nsub', 'not_bol' and 'not_eol' are available. All + other fields are private to the regex routines. */ + +#ifndef RE_TRANSLATE_TYPE +# define __RE_TRANSLATE_TYPE unsigned char * +# ifdef __USE_GNU +# define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE +# endif +#endif + +#ifdef __USE_GNU +# define __REPB_PREFIX(name) name +#else +# define __REPB_PREFIX(name) __##name +#endif + +struct re_pattern_buffer +{ + /* Space that holds the compiled pattern. The type + 'struct re_dfa_t' is private and is not declared here. */ + struct re_dfa_t *__REPB_PREFIX(buffer); + + /* Number of bytes to which 'buffer' points. */ + __re_long_size_t __REPB_PREFIX(allocated); + + /* Number of bytes actually used in 'buffer'. */ + __re_long_size_t __REPB_PREFIX(used); + + /* Syntax setting with which the pattern was compiled. */ + reg_syntax_t __REPB_PREFIX(syntax); + + /* Pointer to a fastmap, if any, otherwise zero. re_search uses the + fastmap, if there is one, to skip over impossible starting points + for matches. */ + char *__REPB_PREFIX(fastmap); + + /* Either a translate table to apply to all characters before + comparing them, or zero for no translation. The translation is + applied to a pattern when it is compiled and to a string when it + is matched. */ + __RE_TRANSLATE_TYPE __REPB_PREFIX(translate); + + /* Number of subexpressions found by the compiler. */ + size_t re_nsub; + + /* Zero if this pattern cannot match the empty string, one else. + Well, in truth it's used only in 're_search_2', to see whether or + not we should use the fastmap, so we don't set this absolutely + perfectly; see 're_compile_fastmap' (the "duplicate" case). */ + unsigned __REPB_PREFIX(can_be_null) : 1; + + /* If REGS_UNALLOCATED, allocate space in the 'regs' structure + for 'max (RE_NREGS, re_nsub + 1)' groups. + If REGS_REALLOCATE, reallocate space if necessary. + If REGS_FIXED, use what's there. */ +#ifdef __USE_GNU +# define REGS_UNALLOCATED 0 +# define REGS_REALLOCATE 1 +# define REGS_FIXED 2 +#endif + unsigned __REPB_PREFIX(regs_allocated) : 2; + + /* Set to zero when 're_compile_pattern' compiles a pattern; set to + one by 're_compile_fastmap' if it updates the fastmap. */ + unsigned __REPB_PREFIX(fastmap_accurate) : 1; + + /* If set, 're_match_2' does not return information about + subexpressions. */ + unsigned __REPB_PREFIX(no_sub) : 1; + + /* If set, a beginning-of-line anchor doesn't match at the beginning + of the string. */ + unsigned __REPB_PREFIX(not_bol) : 1; + + /* Similarly for an end-of-line anchor. */ + unsigned __REPB_PREFIX(not_eol) : 1; + + /* If true, an anchor at a newline matches. */ + unsigned __REPB_PREFIX(newline_anchor) : 1; +}; + +typedef struct re_pattern_buffer regex_t; + +/* Type for byte offsets within the string. POSIX mandates this. */ +#ifdef _REGEX_LARGE_OFFSETS +/* POSIX 1003.1-2008 requires that regoff_t be at least as wide as + ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t + is wider than ssize_t, so ssize_t is safe. ptrdiff_t is not + visible here, so use ssize_t. */ +typedef ssize_t regoff_t; +#else +/* The traditional GNU regex implementation mishandles strings longer + than INT_MAX. */ +typedef int regoff_t; +#endif + + +#ifdef __USE_GNU +/* This is the structure we store register match data in. See + regex.texinfo for a full description of what registers match. */ +struct re_registers +{ + __re_size_t num_regs; + regoff_t *start; + regoff_t *end; +}; + + +/* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer, + 're_match_2' returns information about at least this many registers + the first time a 'regs' structure is passed. */ +# ifndef RE_NREGS +# define RE_NREGS 30 +# endif +#endif + + +/* POSIX specification for registers. Aside from the different names than + 're_registers', POSIX uses an array of structures, instead of a + structure of arrays. */ +typedef struct +{ + regoff_t rm_so; /* Byte offset from string's start to substring's start. */ + regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ +} regmatch_t; + +/* Declarations for routines. */ + +#ifndef _REGEX_NELTS +# if (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ + && !defined __STDC_NO_VLA__) +# define _REGEX_NELTS(n) n +# else +# define _REGEX_NELTS(n) +# endif +#endif + +#if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wvla" +#endif + +#ifndef _Attr_access_ +# ifdef __attr_access +# define _Attr_access_(arg) __attr_access (arg) +# elif defined __GNUC__ && 10 <= __GNUC__ +# define _Attr_access_(x) __attribute__ ((__access__ x)) +# else +# define _Attr_access_(x) +# endif +#endif + +#ifdef __USE_GNU +/* Sets the current default syntax to SYNTAX, and return the old syntax. + You can also simply assign to the 're_syntax_options' variable. */ +extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); + +/* Compile the regular expression PATTERN, with length LENGTH + and syntax given by the global 're_syntax_options', into the buffer + BUFFER. Return NULL if successful, and an error string if not. + + To free the allocated storage, you must call 'regfree' on BUFFER. + Note that the translate table must either have been initialized by + 'regcomp', with a malloc'ed value, or set to NULL before calling + 'regfree'. */ +extern const char *re_compile_pattern (const char *__pattern, size_t __length, + struct re_pattern_buffer *__buffer) + _Attr_access_ ((__read_only__, 1, 2)); + + +/* Compile a fastmap for the compiled pattern in BUFFER; used to + accelerate searches. Return 0 if successful and -2 if was an + internal error. */ +extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); + + +/* Search in the string STRING (with length LENGTH) for the pattern + compiled into BUFFER. Start searching at position START, for RANGE + characters. Return the starting position of the match, -1 for no + match, or -2 for an internal error. Also return register + information in REGS (if REGS and BUFFER->no_sub are nonzero). */ +extern regoff_t re_search (struct re_pattern_buffer *__buffer, + const char *__String, regoff_t __length, + regoff_t __start, regoff_t __range, + struct re_registers *__regs) + _Attr_access_ ((__read_only__, 2, 3)); + + +/* Like 're_search', but search in the concatenation of STRING1 and + STRING2. Also, stop searching at index START + STOP. */ +extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, + const char *__string1, regoff_t __length1, + const char *__string2, regoff_t __length2, + regoff_t __start, regoff_t __range, + struct re_registers *__regs, + regoff_t __stop) + _Attr_access_ ((__read_only__, 2, 3)) + _Attr_access_ ((__read_only__, 4, 5)); + + +/* Like 're_search', but return how many characters in STRING the regexp + in BUFFER matched, starting at position START. */ +extern regoff_t re_match (struct re_pattern_buffer *__buffer, + const char *__String, regoff_t __length, + regoff_t __start, struct re_registers *__regs) + _Attr_access_ ((__read_only__, 2, 3)); + + +/* Relates to 're_match' as 're_search_2' relates to 're_search'. */ +extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, + const char *__string1, regoff_t __length1, + const char *__string2, regoff_t __length2, + regoff_t __start, struct re_registers *__regs, + regoff_t __stop) + _Attr_access_ ((__read_only__, 2, 3)) + _Attr_access_ ((__read_only__, 4, 5)); + + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using BUFFER and REGS will use this memory + for recording register information. STARTS and ENDS must be + allocated with malloc, and must each be at least 'NUM_REGS * sizeof + (regoff_t)' bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + BUFFER will allocate its own register data, without + freeing the old data. */ +extern void re_set_registers (struct re_pattern_buffer *__buffer, + struct re_registers *__regs, + __re_size_t __num_regs, + regoff_t *__starts, regoff_t *__ends); +#endif /* Use GNU */ + +#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC) +/* 4.2 bsd compatibility. */ +extern char *re_comp (const char *); +extern int re_exec (const char *); +#endif + +/* For plain 'restrict', use glibc's __restrict if defined. + Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words, so pick a + different name. */ +#ifndef _Restrict_ +# if defined __restrict \ + || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ + || __clang_major__ >= 3 +# define _Restrict_ __restrict +# elif 199901L <= __STDC_VERSION__ || defined restrict +# define _Restrict_ restrict +# else +# define _Restrict_ +# endif +#endif +/* For the ISO C99 syntax + array_name[restrict] + use glibc's __restrict_arr if available. + Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode). + Other ISO C99 compilers support it as well. */ +#ifndef _Restrict_arr_ +# ifdef __restrict_arr +# define _Restrict_arr_ __restrict_arr +# elif ((199901L <= __STDC_VERSION__ \ + || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \ + || __clang_major__ >= 3) \ + && !defined __cplusplus) +# define _Restrict_arr_ _Restrict_ +# else +# define _Restrict_arr_ +# endif +#endif + +/* POSIX compatibility. */ +extern int regcomp (regex_t *_Restrict_ __preg, + const char *_Restrict_ __pattern, + int __cflags); + +extern int regexec (const regex_t *_Restrict_ __preg, + const char *_Restrict_ __String, size_t __nmatch, + regmatch_t __pmatch[_Restrict_arr_ + _REGEX_NELTS (__nmatch)], + int __eflags); + +extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, + char *_Restrict_ __errbuf, size_t __errbuf_size) + _Attr_access_ ((__write_only__, 3, 4)); + +extern void regfree (regex_t *__preg); + +#if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) +# pragma GCC diagnostic pop +#endif + +#ifdef __cplusplus +} +#endif /* C++ */ + +#endif /* regex.h */ diff --git a/include/libgnulib/regex_internal.h b/include/libgnulib/regex_internal.h new file mode 100755 index 0000000..6165cb1 --- /dev/null +++ b/include/libgnulib/regex_internal.h @@ -0,0 +1,832 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _REGEX_INTERNAL_H +#define _REGEX_INTERNAL_H 1 + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifndef _LIBC +# include +#endif + +#include +#include + +#if defined DEBUG && DEBUG != 0 +# include +# define DEBUG_ASSERT(x) assert (x) +#else +# define DEBUG_ASSERT(x) assume (x) +#endif + +#ifdef _LIBC +# include +# define lock_define(name) __libc_lock_define (, name) +# define lock_init(lock) (__libc_lock_init (lock), 0) +# define lock_fini(lock) ((void) 0) +# define lock_lock(lock) __libc_lock_lock (lock) +# define lock_unlock(lock) __libc_lock_unlock (lock) +#elif defined GNULIB_LOCK && !defined GNULIB_REGEX_SINGLE_THREAD +# include "glthread/lock.h" +# define lock_define(name) gl_lock_define (, name) +# define lock_init(lock) glthread_lock_init (&(lock)) +# define lock_fini(lock) glthread_lock_destroy (&(lock)) +# define lock_lock(lock) glthread_lock_lock (&(lock)) +# define lock_unlock(lock) glthread_lock_unlock (&(lock)) +#elif defined GNULIB_PTHREAD && !defined GNULIB_REGEX_SINGLE_THREAD +# include +# define lock_define(name) pthread_mutex_t name; +# define lock_init(lock) pthread_mutex_init (&(lock), 0) +# define lock_fini(lock) pthread_mutex_destroy (&(lock)) +# define lock_lock(lock) pthread_mutex_lock (&(lock)) +# define lock_unlock(lock) pthread_mutex_unlock (&(lock)) +#else +# define lock_define(name) +# define lock_init(lock) 0 +# define lock_fini(lock) ((void) 0) + /* The 'dfa' avoids an "unused variable 'dfa'" warning from GCC. */ +# define lock_lock(lock) ((void) dfa) +# define lock_unlock(lock) ((void) 0) +#endif + +/* In case that the system doesn't have isblank(). */ +#if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) +# define isblank(ch) ((ch) == ' ' || (ch) == '\t') +#endif + +/* regex code assumes isascii has its usual numeric meaning, + even if the portable character set uses EBCDIC encoding, + and even if wint_t is wider than int. */ +#ifndef _LIBC +# undef isascii +# define isascii(c) (((c) & ~0x7f) == 0) +#endif + +#ifdef _LIBC +# ifndef _RE_DEFINE_LOCALE_FUNCTIONS +# define _RE_DEFINE_LOCALE_FUNCTIONS 1 +# include +# include +# endif +#endif + +/* This is for other GNU distributions with internationalized messages. */ +#if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC +# include +# ifdef _LIBC +# undef gettext +# define gettext(msgid) \ + __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) +# endif +#else +# undef gettext +# define gettext(msgid) (msgid) +#endif + +#ifndef gettext_noop +/* This define is so xgettext can find the internationalizable + strings. */ +# define gettext_noop(String) String +#endif + +/* Number of ASCII characters. */ +#define ASCII_CHARS 0x80 + +/* Number of single byte characters. */ +#define SBC_MAX (UCHAR_MAX + 1) + +#define COLL_ELEM_LEN_MAX 8 + +/* The character which represents newline. */ +#define NEWLINE_CHAR '\n' +#define WIDE_NEWLINE_CHAR L'\n' + +/* Rename to standard API for using out of glibc. */ +#ifndef _LIBC +# undef __wctype +# undef __iswalnum +# undef __iswctype +# undef __towlower +# undef __towupper +# define __wctype wctype +# define __iswalnum iswalnum +# define __iswctype iswctype +# define __towlower towlower +# define __towupper towupper +# define __btowc btowc +# define __mbrtowc mbrtowc +# define __wcrtomb wcrtomb +# define __regfree regfree +#endif /* not _LIBC */ + +/* Types related to integers. Unless protected by #ifdef _LIBC, the + regex code should avoid exact-width types like int32_t and uint64_t + as some non-GCC platforms lack them, an issue when this code is + used in Gnulib. */ + +#ifndef ULONG_WIDTH +# define ULONG_WIDTH REGEX_UINTEGER_WIDTH (ULONG_MAX) +/* The number of usable bits in an unsigned integer type with maximum + value MAX, as an int expression suitable in #if. Cover all known + practical hosts. This implementation exploits the fact that MAX is + 1 less than a power of 2, and merely counts the number of 1 bits in + MAX; "COBn" means "count the number of 1 bits in the low-order n bits". */ +# define REGEX_UINTEGER_WIDTH(max) REGEX_COB128 (max) +# define REGEX_COB128(n) (REGEX_COB64 ((n) >> 31 >> 31 >> 2) + REGEX_COB64 (n)) +# define REGEX_COB64(n) (REGEX_COB32 ((n) >> 31 >> 1) + REGEX_COB32 (n)) +# define REGEX_COB32(n) (REGEX_COB16 ((n) >> 16) + REGEX_COB16 (n)) +# define REGEX_COB16(n) (REGEX_COB8 ((n) >> 8) + REGEX_COB8 (n)) +# define REGEX_COB8(n) (REGEX_COB4 ((n) >> 4) + REGEX_COB4 (n)) +# define REGEX_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + ((n) & 1)) +# if ULONG_MAX / 2 + 1 != 1ul << (ULONG_WIDTH - 1) +# error "ULONG_MAX out of range" +# endif +#endif + +/* The type of indexes into strings. This is signed, not size_t, + since the API requires indexes to fit in regoff_t anyway, and using + signed integers makes the code a bit smaller and presumably faster. + The traditional GNU regex implementation uses int for indexes. + The POSIX-compatible implementation uses a possibly-wider type. + The name 'Idx' is three letters to minimize the hassle of + reindenting a lot of regex code that formerly used 'int'. */ +typedef regoff_t Idx; +#ifdef _REGEX_LARGE_OFFSETS +# define IDX_MAX SSIZE_MAX +#else +# define IDX_MAX INT_MAX +#endif + +/* A hash value, suitable for computing hash tables. */ +typedef __re_size_t re_hashval_t; + +/* An integer used to represent a set of bits. It must be unsigned, + and must be at least as wide as unsigned int. */ +typedef unsigned long int bitset_word_t; +/* All bits set in a bitset_word_t. */ +#define BITSET_WORD_MAX ULONG_MAX +/* Number of bits in a bitset_word_t. */ +#define BITSET_WORD_BITS ULONG_WIDTH + +/* Number of bitset_word_t values in a bitset_t. */ +#define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) + +typedef bitset_word_t bitset_t[BITSET_WORDS]; +typedef bitset_word_t *re_bitset_ptr_t; +typedef const bitset_word_t *re_const_bitset_ptr_t; + +#define PREV_WORD_CONSTRAINT 0x0001 +#define PREV_NOTWORD_CONSTRAINT 0x0002 +#define NEXT_WORD_CONSTRAINT 0x0004 +#define NEXT_NOTWORD_CONSTRAINT 0x0008 +#define PREV_NEWLINE_CONSTRAINT 0x0010 +#define NEXT_NEWLINE_CONSTRAINT 0x0020 +#define PREV_BEGBUF_CONSTRAINT 0x0040 +#define NEXT_ENDBUF_CONSTRAINT 0x0080 +#define WORD_DELIM_CONSTRAINT 0x0100 +#define NOT_WORD_DELIM_CONSTRAINT 0x0200 + +typedef enum +{ + INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, + WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, + WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, + INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, + LINE_FIRST = PREV_NEWLINE_CONSTRAINT, + LINE_LAST = NEXT_NEWLINE_CONSTRAINT, + BUF_FIRST = PREV_BEGBUF_CONSTRAINT, + BUF_LAST = NEXT_ENDBUF_CONSTRAINT, + WORD_DELIM = WORD_DELIM_CONSTRAINT, + NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT +} re_context_type; + +typedef struct +{ + Idx alloc; + Idx nelem; + Idx *elems; +} re_node_set; + +typedef enum +{ + NON_TYPE = 0, + + /* Node type, These are used by token, node, tree. */ + CHARACTER = 1, + END_OF_RE = 2, + SIMPLE_BRACKET = 3, + OP_BACK_REF = 4, + OP_PERIOD = 5, + COMPLEX_BRACKET = 6, + OP_UTF8_PERIOD = 7, + + /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used + when the debugger shows values of this enum type. */ +#define EPSILON_BIT 8 + OP_OPEN_SUBEXP = EPSILON_BIT | 0, + OP_CLOSE_SUBEXP = EPSILON_BIT | 1, + OP_ALT = EPSILON_BIT | 2, + OP_DUP_ASTERISK = EPSILON_BIT | 3, + ANCHOR = EPSILON_BIT | 4, + + /* Tree type, these are used only by tree. */ + CONCAT = 16, + SUBEXP = 17, + + /* Token type, these are used only by token. */ + OP_DUP_PLUS = 18, + OP_DUP_QUESTION, + OP_OPEN_BRACKET, + OP_CLOSE_BRACKET, + OP_CHARSET_RANGE, + OP_OPEN_DUP_NUM, + OP_CLOSE_DUP_NUM, + OP_NON_MATCH_LIST, + OP_OPEN_COLL_ELEM, + OP_CLOSE_COLL_ELEM, + OP_OPEN_EQUIV_CLASS, + OP_CLOSE_EQUIV_CLASS, + OP_OPEN_CHAR_CLASS, + OP_CLOSE_CHAR_CLASS, + OP_WORD, + OP_NOTWORD, + OP_SPACE, + OP_NOTSPACE, + BACK_SLASH + +} re_token_type_t; + +typedef struct +{ + /* Multibyte characters. */ + wchar_t *mbchars; + +#ifdef _LIBC + /* Collating symbols. */ + int32_t *coll_syms; +#endif + +#ifdef _LIBC + /* Equivalence classes. */ + int32_t *equiv_classes; +#endif + + /* Range expressions. */ +#ifdef _LIBC + uint32_t *range_starts; + uint32_t *range_ends; +#else + wchar_t *range_starts; + wchar_t *range_ends; +#endif + + /* Character classes. */ + wctype_t *char_classes; + + /* If this character set is the non-matching list. */ + unsigned int non_match : 1; + + /* # of multibyte characters. */ + Idx nmbchars; + + /* # of collating symbols. */ + Idx ncoll_syms; + + /* # of equivalence classes. */ + Idx nequiv_classes; + + /* # of range expressions. */ + Idx nranges; + + /* # of character classes. */ + Idx nchar_classes; +} re_charset_t; + +typedef struct +{ + union + { + unsigned char c; /* for CHARACTER */ + re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ + re_charset_t *mbcset; /* for COMPLEX_BRACKET */ + Idx idx; /* for BACK_REF */ + re_context_type ctx_type; /* for ANCHOR */ + } opr; +#if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__ + re_token_type_t type : 8; +#else + re_token_type_t type; +#endif + unsigned int constraint : 10; /* context constraint */ + unsigned int duplicated : 1; + unsigned int opt_subexp : 1; + unsigned int accept_mb : 1; + /* These 2 bits can be moved into the union if needed (e.g. if running out + of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */ + unsigned int mb_partial : 1; + unsigned int word_char : 1; +} re_token_t; + +#define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT) + +struct re_string_t +{ + /* Indicate the raw buffer which is the original string passed as an + argument of regexec(), re_search(), etc.. */ + const unsigned char *raw_mbs; + /* Store the multibyte string. In case of "case insensitive mode" like + REG_ICASE, upper cases of the string are stored, otherwise MBS points + the same address that RAW_MBS points. */ + unsigned char *mbs; + /* Store the wide character string which is corresponding to MBS. */ + wint_t *wcs; + Idx *offsets; + mbstate_t cur_state; + /* Index in RAW_MBS. Each character mbs[i] corresponds to + raw_mbs[raw_mbs_idx + i]. */ + Idx raw_mbs_idx; + /* The length of the valid characters in the buffers. */ + Idx valid_len; + /* The corresponding number of bytes in raw_mbs array. */ + Idx valid_raw_len; + /* The length of the buffers MBS and WCS. */ + Idx bufs_len; + /* The index in MBS, which is updated by re_string_fetch_byte. */ + Idx cur_idx; + /* length of RAW_MBS array. */ + Idx raw_len; + /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */ + Idx len; + /* End of the buffer may be shorter than its length in the cases such + as re_match_2, re_search_2. Then, we use STOP for end of the buffer + instead of LEN. */ + Idx raw_stop; + /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */ + Idx stop; + + /* The context of mbs[0]. We store the context independently, since + the context of mbs[0] may be different from raw_mbs[0], which is + the beginning of the input string. */ + unsigned int tip_context; + /* The translation passed as a part of an argument of re_compile_pattern. */ + RE_TRANSLATE_TYPE trans; + /* Copy of re_dfa_t's word_char. */ + re_const_bitset_ptr_t word_char; + /* true if REG_ICASE. */ + unsigned char icase; + unsigned char is_utf8; + unsigned char map_notascii; + unsigned char mbs_allocated; + unsigned char offsets_needed; + unsigned char newline_anchor; + unsigned char word_ops_used; + int mb_cur_max; +}; +typedef struct re_string_t re_string_t; + + +struct re_dfa_t; +typedef struct re_dfa_t re_dfa_t; + +#ifndef _LIBC +# define IS_IN(libc) false +#endif + +#define re_string_peek_byte(pstr, offset) \ + ((pstr)->mbs[(pstr)->cur_idx + offset]) +#define re_string_fetch_byte(pstr) \ + ((pstr)->mbs[(pstr)->cur_idx++]) +#define re_string_first_byte(pstr, idx) \ + ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF) +#define re_string_is_single_byte_char(pstr, idx) \ + ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \ + || (pstr)->wcs[(idx) + 1] != WEOF)) +#define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) +#define re_string_cur_idx(pstr) ((pstr)->cur_idx) +#define re_string_get_buffer(pstr) ((pstr)->mbs) +#define re_string_length(pstr) ((pstr)->len) +#define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) +#define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) +#define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) + +#ifdef _LIBC +# define MALLOC_0_IS_NONNULL 1 +#elif !defined MALLOC_0_IS_NONNULL +# define MALLOC_0_IS_NONNULL 0 +#endif + +#ifndef MAX +# define MAX(a,b) ((a) < (b) ? (b) : (a)) +#endif +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) +#define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) +#define re_free(p) free (p) + +struct bin_tree_t +{ + struct bin_tree_t *parent; + struct bin_tree_t *left; + struct bin_tree_t *right; + struct bin_tree_t *first; + struct bin_tree_t *next; + + re_token_t token; + + /* 'node_idx' is the index in dfa->nodes, if 'type' == 0. + Otherwise 'type' indicate the type of this node. */ + Idx node_idx; +}; +typedef struct bin_tree_t bin_tree_t; + +#define BIN_TREE_STORAGE_SIZE \ + ((1024 - sizeof (void *)) / sizeof (bin_tree_t)) + +struct bin_tree_storage_t +{ + struct bin_tree_storage_t *next; + bin_tree_t data[BIN_TREE_STORAGE_SIZE]; +}; +typedef struct bin_tree_storage_t bin_tree_storage_t; + +#define CONTEXT_WORD 1 +#define CONTEXT_NEWLINE (CONTEXT_WORD << 1) +#define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) +#define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) + +#define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) +#define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) +#define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) +#define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) +#define IS_ORDINARY_CONTEXT(c) ((c) == 0) + +#define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') +#define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) +#define IS_WIDE_WORD_CHAR(ch) (__iswalnum (ch) || (ch) == L'_') +#define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR) + +#define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ + ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ + || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ + || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ + || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) + +#define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ + ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ + || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ + || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ + || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) + +struct re_dfastate_t +{ + re_hashval_t hash; + re_node_set nodes; + re_node_set non_eps_nodes; + re_node_set inveclosure; + re_node_set *entrance_nodes; + struct re_dfastate_t **trtable, **word_trtable; + unsigned int context : 4; + unsigned int halt : 1; + /* If this state can accept "multi byte". + Note that we refer to multibyte characters, and multi character + collating elements as "multi byte". */ + unsigned int accept_mb : 1; + /* If this state has backreference node(s). */ + unsigned int has_backref : 1; + unsigned int has_constraint : 1; +}; +typedef struct re_dfastate_t re_dfastate_t; + +struct re_state_table_entry +{ + Idx num; + Idx alloc; + re_dfastate_t **array; +}; + +/* Array type used in re_sub_match_last_t and re_sub_match_top_t. */ + +typedef struct +{ + Idx next_idx; + Idx alloc; + re_dfastate_t **array; +} state_array_t; + +/* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */ + +typedef struct +{ + Idx node; + Idx str_idx; /* The position NODE match at. */ + state_array_t path; +} re_sub_match_last_t; + +/* Store information about the node NODE whose type is OP_OPEN_SUBEXP. + And information about the node, whose type is OP_CLOSE_SUBEXP, + corresponding to NODE is stored in LASTS. */ + +typedef struct +{ + Idx str_idx; + Idx node; + state_array_t *path; + Idx alasts; /* Allocation size of LASTS. */ + Idx nlasts; /* The number of LASTS. */ + re_sub_match_last_t **lasts; +} re_sub_match_top_t; + +struct re_backref_cache_entry +{ + Idx node; + Idx str_idx; + Idx subexp_from; + Idx subexp_to; + bitset_word_t eps_reachable_subexps_map; + char more; +}; + +typedef struct +{ + /* The string object corresponding to the input string. */ + re_string_t input; + const re_dfa_t *const dfa; + /* EFLAGS of the argument of regexec. */ + int eflags; + /* Where the matching ends. */ + Idx match_last; + Idx last_node; + /* The state log used by the matcher. */ + re_dfastate_t **state_log; + Idx state_log_top; + /* Back reference cache. */ + Idx nbkref_ents; + Idx abkref_ents; + struct re_backref_cache_entry *bkref_ents; + int max_mb_elem_len; + Idx nsub_tops; + Idx asub_tops; + re_sub_match_top_t **sub_tops; +} re_match_context_t; + +typedef struct +{ + re_dfastate_t **sifted_states; + re_dfastate_t **limited_states; + Idx last_node; + Idx last_str_idx; + re_node_set limits; +} re_sift_context_t; + +struct re_fail_stack_ent_t +{ + Idx idx; + Idx node; + regmatch_t *regs; + re_node_set eps_via_nodes; +}; + +struct re_fail_stack_t +{ + Idx num; + Idx alloc; + struct re_fail_stack_ent_t *stack; +}; + +struct re_dfa_t +{ + re_token_t *nodes; + size_t nodes_alloc; + size_t nodes_len; + Idx *nexts; + Idx *org_indices; + re_node_set *edests; + re_node_set *eclosures; + re_node_set *inveclosures; + struct re_state_table_entry *state_table; + re_dfastate_t *init_state; + re_dfastate_t *init_state_word; + re_dfastate_t *init_state_nl; + re_dfastate_t *init_state_begbuf; + bin_tree_t *str_tree; + bin_tree_storage_t *str_tree_storage; + re_bitset_ptr_t sb_char; + int str_tree_storage_idx; + + /* number of subexpressions 're_nsub' is in regex_t. */ + re_hashval_t state_hash_mask; + Idx init_node; + Idx nbackref; /* The number of backreference in this dfa. */ + + /* Bitmap expressing which backreference is used. */ + bitset_word_t used_bkref_map; + bitset_word_t completed_bkref_map; + + unsigned int has_plural_match : 1; + /* If this dfa has "multibyte node", which is a backreference or + a node which can accept multibyte character or multi character + collating element. */ + unsigned int has_mb_node : 1; + unsigned int is_utf8 : 1; + unsigned int map_notascii : 1; + unsigned int word_ops_used : 1; + int mb_cur_max; + bitset_t word_char; + reg_syntax_t syntax; + Idx *subexp_map; +#ifdef DEBUG + char* re_str; +#endif + lock_define (lock) +}; + +#define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) +#define re_node_set_remove(set,id) \ + (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1)) +#define re_node_set_empty(p) ((p)->nelem = 0) +#define re_node_set_free(set) re_free ((set)->elems) + + +typedef enum +{ + SB_CHAR, + MB_CHAR, + EQUIV_CLASS, + COLL_SYM, + CHAR_CLASS +} bracket_elem_type; + +typedef struct +{ + bracket_elem_type type; + union + { + unsigned char ch; + unsigned char *name; + wchar_t wch; + } opr; +} bracket_elem_t; + + +/* Functions for bitset_t operation. */ + +static inline void +bitset_set (bitset_t set, Idx i) +{ + set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; +} + +static inline void +bitset_clear (bitset_t set, Idx i) +{ + set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); +} + +static inline bool +bitset_contain (const bitset_t set, Idx i) +{ + return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; +} + +static inline void +bitset_empty (bitset_t set) +{ + memset (set, '\0', sizeof (bitset_t)); +} + +static inline void +bitset_set_all (bitset_t set) +{ + memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); + if (SBC_MAX % BITSET_WORD_BITS != 0) + set[BITSET_WORDS - 1] = + ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; +} + +static inline void +bitset_copy (bitset_t dest, const bitset_t src) +{ + memcpy (dest, src, sizeof (bitset_t)); +} + +static inline void +bitset_not (bitset_t set) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i) + set[bitset_i] = ~set[bitset_i]; + if (SBC_MAX % BITSET_WORD_BITS != 0) + set[BITSET_WORDS - 1] = + ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1) + & ~set[BITSET_WORDS - 1]); +} + +static inline void +bitset_merge (bitset_t dest, const bitset_t src) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) + dest[bitset_i] |= src[bitset_i]; +} + +static inline void +bitset_mask (bitset_t dest, const bitset_t src) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) + dest[bitset_i] &= src[bitset_i]; +} + +/* Functions for re_string. */ +static int +__attribute__ ((pure, unused)) +re_string_char_size_at (const re_string_t *pstr, Idx idx) +{ + int byte_idx; + if (pstr->mb_cur_max == 1) + return 1; + for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx) + if (pstr->wcs[idx + byte_idx] != WEOF) + break; + return byte_idx; +} + +static wint_t +__attribute__ ((pure, unused)) +re_string_wchar_at (const re_string_t *pstr, Idx idx) +{ + if (pstr->mb_cur_max == 1) + return (wint_t) pstr->mbs[idx]; + return (wint_t) pstr->wcs[idx]; +} + +#ifdef _LIBC +# include +#endif + +static int +__attribute__ ((pure, unused)) +re_string_elem_size_at (const re_string_t *pstr, Idx idx) +{ +#ifdef _LIBC + const unsigned char *p, *extra; + const int32_t *table, *indirect; + uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + + if (nrules != 0) + { + table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_INDIRECTMB); + p = pstr->mbs + idx; + findidx (table, indirect, extra, &p, pstr->len - idx); + return p - pstr->mbs - idx; + } +#endif /* _LIBC */ + + return 1; +} + +#ifdef _LIBC +# if __glibc_has_attribute (__fallthrough__) +# define FALLTHROUGH __attribute__ ((__fallthrough__)) +# else +# define FALLTHROUGH ((void) 0) +# endif +#else +# include "attribute.h" +#endif + +#endif /* _REGEX_INTERNAL_H */ diff --git a/include/libgnulib/relocatable.h b/include/libgnulib/relocatable.h new file mode 100755 index 0000000..0c10ebe --- /dev/null +++ b/include/libgnulib/relocatable.h @@ -0,0 +1,124 @@ +/* Provide relocatable packages. + Copyright (C) 2003, 2005, 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _RELOCATABLE_H +#define _RELOCATABLE_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, HAVE_VISIBILITY. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* This can be enabled through the configure --enable-relocatable option. */ +#if ENABLE_RELOCATABLE + +/* When building a shared library, we must export some functions. + Note that because this is a private .h file, we don't need to use + __declspec(dllimport) in any case. */ +#if HAVE_VISIBILITY && BUILDING_DLL +# define RELOCATABLE_SHLIB_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_DLL +/* When building with MSVC, exporting a symbol means that the object file + contains a "linker directive" of the form /EXPORT:symbol. This can be + inspected through the "objdump -s --section=.drectve FILE" or + "dumpbin /directives FILE" commands. + The symbols from this file should be exported if and only if the object + file gets included in a DLL. Libtool, on Windows platforms, defines + the C macro DLL_EXPORT (together with PIC) when compiling for a shared + library (called DLL under Windows) and does not define it when compiling + an object file meant to be linked statically into some executable. */ +# if defined DLL_EXPORT +# define RELOCATABLE_SHLIB_EXPORTED __declspec(dllexport) +# else +# define RELOCATABLE_SHLIB_EXPORTED +# endif +#else +# define RELOCATABLE_SHLIB_EXPORTED +#endif + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +extern RELOCATABLE_SHLIB_EXPORTED void + set_relocation_prefix (const char *orig_prefix, + const char *curr_prefix); + +/* Returns the pathname, relocated according to the current installation + directory. + The returned string is either PATHNAME unmodified or a freshly allocated + string that you can free with free() after casting it to 'char *'. */ +extern const char * relocate (const char *pathname); + +/* Returns the pathname, relocated according to the current installation + directory. + This function sets *ALLOCATEDP to the allocated memory, or to NULL if + no memory allocation occurs. So that, after you're done with the return + value, to reclaim allocated memory, you can do: free (*ALLOCATEDP). */ +extern const char * relocate2 (const char *pathname, char **allocatedp); + +/* Memory management: relocate() potentially allocates memory, because it has + to construct a fresh pathname. If this is a problem because your program + calls relocate() frequently or because you want to fix all potential memory + leaks anyway, you have three options: + 1) Use this idiom: + const char *pathname = ...; + const char *rel_pathname = relocate (pathname); + ... + if (rel_pathname != pathname) + free ((char *) rel_pathname); + 2) Use this idiom: + char *allocated; + const char *rel_pathname = relocate2 (..., &allocated); + ... + free (allocated); + 3) Think about caching the result. */ + +/* Convenience function: + Computes the current installation prefix, based on the original + installation prefix, the original installation directory of a particular + file, and the current pathname of this file. + Returns it, freshly allocated. Returns NULL upon failure. */ +extern char * compute_curr_prefix (const char *orig_installprefix, + const char *orig_installdir, + const char *curr_pathname) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#else + +/* By default, we use the hardwired pathnames. */ +#define set_relocation_prefix(orig_prefix, curr_prefix) \ + ((void) (orig_prefix), (void) (curr_prefix)) +#define relocate(pathname) (pathname) +#define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname)) + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _RELOCATABLE_H */ diff --git a/include/libgnulib/relocatable.valgrind b/include/libgnulib/relocatable.valgrind new file mode 100755 index 0000000..7e1722d --- /dev/null +++ b/include/libgnulib/relocatable.valgrind @@ -0,0 +1,25 @@ +# Suppress a valgrind message about a memory leak in relocatable.c. + +# Copyright (C) 2017-2024 Free Software Foundation, Inc. +# +# This file is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# This file 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +# set_this_relocation_prefix leaks intentionally +{ + relocatable/set_this_relocation_prefix + Memcheck:Leak + fun:malloc + fun:set_this_relocation_prefix + fun:set_relocation_prefix +} diff --git a/include/libgnulib/renameatu.h b/include/libgnulib/renameatu.h new file mode 100755 index 0000000..cf97b71 --- /dev/null +++ b/include/libgnulib/renameatu.h @@ -0,0 +1,39 @@ +/* Rename a file relative to open directories. + Copyright 2017-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* written by Paul Eggert */ + +/* Get RENAME_* macros from if present, otherwise supply + the traditional Linux values. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef RENAME_NOREPLACE +# define RENAME_NOREPLACE (1 << 0) +# define RENAME_EXCHANGE (1 << 1) +# define RENAME_WHITEOUT (1 << 2) +#endif + +extern int renameatu (int, char const *, int, char const *, unsigned int); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/resource-ext.h b/include/libgnulib/resource-ext.h new file mode 100755 index 0000000..e2a7b03 --- /dev/null +++ b/include/libgnulib/resource-ext.h @@ -0,0 +1,47 @@ +/* Extra functions for resource usage. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + 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 3 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, see . */ + +#ifndef _RESOURCE_EXT_H +#define _RESOURCE_EXT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Returns the amount of address space currently in use by the current + process, or zero if unknown. + This is the quantity which is limited by setrlimit(RLIMIT_AS,...). + Note: This function always returns zero on AIX. */ +extern uintptr_t get_rusage_as (void); + +/* Returns the size of the data segment, or zero if unknown. + This is the quantity which is limited by setrlimit(RLIMIT_DATA,...). + Note: This function always returns zero on HP-UX 11.00. + Note: The total size of all malloc()ed memory is bounded by the size of + the data segment only on the following platforms: + FreeBSD, AIX, HP-UX 11.23 and newer, IRIX, OSF/1, Solaris, BeOS, Haiku. */ +extern uintptr_t get_rusage_data (void); + + +#ifdef __cplusplus +} +#endif + +#endif /* _RESOURCE_EXT_H */ diff --git a/include/libgnulib/rijndael-alg-fst.h b/include/libgnulib/rijndael-alg-fst.h new file mode 100755 index 0000000..780c9fc --- /dev/null +++ b/include/libgnulib/rijndael-alg-fst.h @@ -0,0 +1,75 @@ +/* rijndael-alg-fst.h --- Rijndael cipher implementation. + * Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + * + * This file is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. + * + * This file 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + */ + +/* Adapted for gnulib by Simon Josefsson. */ + +/** + * rijndael-alg-fst.h + * + * @version 3.0 (December 2000) + * + * Optimised ANSI C code for the Rijndael cipher (now AES) + * + * @author Vincent Rijmen + * @author Antoon Bosselaers + * @author Paulo Barreto + * + * This code is hereby placed in the public domain. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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 __RIJNDAEL_ALG_FST_H +#define __RIJNDAEL_ALG_FST_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RIJNDAEL_MAXKC (256/32) +#define RIJNDAEL_MAXKB (256/8) +#define RIJNDAEL_MAXNR 14 + +int rijndaelKeySetupEnc (uint32_t rk[ /*4*(Nr + 1) */ ], + const char cipherKey[], size_t keyBits); +int rijndaelKeySetupDec (uint32_t rk[ /*4*(Nr + 1) */ ], + const char cipherKey[], size_t keyBits); +void rijndaelEncrypt (const uint32_t rk[ /*4*(Nr + 1) */ ], size_t Nr, + const char pt[16], char ct[16]); +void rijndaelDecrypt (const uint32_t rk[ /*4*(Nr + 1) */ ], size_t Nr, + const char ct[16], char pt[16]); + + +#ifdef __cplusplus +} +#endif + +#endif /* __RIJNDAEL_ALG_FST_H */ diff --git a/include/libgnulib/rijndael-api-fst.h b/include/libgnulib/rijndael-api-fst.h new file mode 100755 index 0000000..002fc58 --- /dev/null +++ b/include/libgnulib/rijndael-api-fst.h @@ -0,0 +1,215 @@ +/* rijndael-api-fst.h --- Rijndael cipher implementation. + * Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + * + * This file is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. + * + * This file 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + */ + +/* Adapted for gnulib by Simon Josefsson. */ + +/** + * rijndael-api-fst.h + * + * @version 2.9 (December 2000) + * + * Optimised ANSI C code for the Rijndael cipher (now AES) + * + * @author Vincent Rijmen + * @author Antoon Bosselaers + * @author Paulo Barreto + * + * This code is hereby placed in the public domain. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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. + * + * Acknowledgements: + * + * We are deeply indebted to the following people for their bug reports, + * fixes, and improvement suggestions to this implementation. Though we + * tried to list all contributions, we apologise in advance for any + * missing reference. + * + * Andrew Bales + * Markus Friedl + * John Skodon + */ + +#ifndef __RIJNDAEL_API_FST_H +#define __RIJNDAEL_API_FST_H + +#include "rijndael-alg-fst.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Default number of bits in a cipher block */ +#define RIJNDAEL_BITSPERBLOCK 128 + +/* Number of ASCII char's needed to represent a key */ +#define RIJNDAEL_MAX_KEY_SIZE 64 + +/* Number bytes needed to represent an IV */ +#define RIJNDAEL_MAX_IV_SIZE 16 + +typedef enum +{ + /* Key direction is invalid, e.g., unknown value */ + RIJNDAEL_BAD_KEY_DIR = -1, + /* Key material not of correct length */ + RIJNDAEL_BAD_KEY_MAT = -2, + /* Key passed is not valid */ + RIJNDAEL_BAD_KEY_INSTANCE = -3, + /* Params struct passed to cipherInit invalid */ + RIJNDAEL_BAD_CIPHER_MODE = -4, + /* Cipher in wrong state (e.g., not initialized) */ + RIJNDAEL_BAD_CIPHER_STATE = -5, + RIJNDAEL_BAD_BLOCK_LENGTH = -6, + RIJNDAEL_BAD_CIPHER_INSTANCE = -7, + /* Data contents are invalid, e.g., invalid padding */ + RIJNDAEL_BAD_DATA = -8, + /* Unknown error */ + RIJNDAEL_BAD_OTHER = -9 +} rijndael_rc; + +typedef enum +{ + RIJNDAEL_DIR_ENCRYPT = 0, /* Are we encrypting? */ + RIJNDAEL_DIR_DECRYPT = 1 /* Are we decrypting? */ +} rijndael_direction; + +typedef enum +{ + RIJNDAEL_MODE_ECB = 1, /* Are we ciphering in ECB mode? */ + RIJNDAEL_MODE_CBC = 2, /* Are we ciphering in CBC mode? */ + RIJNDAEL_MODE_CFB1 = 3 /* Are we ciphering in 1-bit CFB mode? */ +} rijndael_mode; + +/* The structure for key information */ +typedef struct +{ + /* Key used for encrypting or decrypting? */ + rijndael_direction direction; + /* Length of the key */ + size_t keyLen; + /* Raw key data in ASCII, e.g., user input or KAT values */ + char keyMaterial[RIJNDAEL_MAX_KEY_SIZE + 1]; + /* key-length-dependent number of rounds */ + int Nr; + /* key schedule */ + uint32_t rk[4 * (RIJNDAEL_MAXNR + 1)]; + /* CFB1 key schedule (encryption only) */ + uint32_t ek[4 * (RIJNDAEL_MAXNR + 1)]; +} rijndaelKeyInstance; + +/* The structure for cipher information */ +typedef struct +{ /* changed order of the components */ + rijndael_mode mode; /* MODE_ECB, MODE_CBC, or MODE_CFB1 */ + /* A possible Initialization Vector for ciphering */ + char IV[RIJNDAEL_MAX_IV_SIZE]; +} rijndaelCipherInstance; + +/* Function prototypes */ + +/* Create KEY, for encryption or decryption depending on DIRECTION, + from KEYMATERIAL, a hex string, of KEYLEN size. KEYLEN should be + 128, 192 or 256. Returns 0 on success, or an error code. */ +extern rijndael_rc +rijndaelMakeKey (rijndaelKeyInstance *key, rijndael_direction direction, + size_t keyLen, const char *keyMaterial); + +/* Initialize cipher state CIPHER for encryption MODE (e.g., + RIJNDAEL_MODE_CBC) with initialization vector IV, a hex string of + 2*RIJNDAEL_MAX_IV_SIZE length. IV may be NULL for modes that do + not need an IV (i.e., RIJNDAEL_MODE_ECB). */ +extern rijndael_rc +rijndaelCipherInit (rijndaelCipherInstance *cipher, + rijndael_mode mode, const char *IV); + +/* Encrypt data in INPUT, of INPUTLEN/8 bytes length, placing the + output in the pre-allocated OUTBUFFER which must hold at least + INPUTLEN/8 bytes of data. The CIPHER is used as state, and must be + initialized with rijndaelCipherInit before calling this function. + The encryption KEY must be initialized with rijndaelMakeKey before + calling this function. Return the number of bits written, or a + negative rijndael_rc error code. */ +extern int +rijndaelBlockEncrypt (rijndaelCipherInstance *cipher, + const rijndaelKeyInstance *key, + const char *input, size_t inputLen, + char *restrict outBuffer); + +/* Encrypt data in INPUT, of INPUTOCTETS bytes length, placing the + output in the pre-allocated OUTBUFFER which must hold at least + INPUTOCTETS aligned to the next block size boundary. + Ciphertext-Stealing as described in RFC 2040 is used to encrypt + partial blocks. The CIPHER is used as state, and must be + initialized with rijndaelCipherInit before calling this function. + The encryption KEY must be initialized with rijndaelMakeKey before + calling this function. Return the number of bits written, or a + negative rijndael_rc error code. */ +extern int +rijndaelPadEncrypt (rijndaelCipherInstance *cipher, + const rijndaelKeyInstance *key, + const char *input, size_t inputOctets, + char *restrict outBuffer); + +/* Decrypt data in INPUT, of INPUTLEN/8 bytes length, placing the + output in the pre-allocated OUTBUFFER which must hold at least + INPUTLEN/8 bytes of data. The CIPHER is used as state, and must be + initialized with rijndaelCipherInit before calling this function. + The encryption KEY must be initialized with rijndaelMakeKey before + calling this function. Return the number of bits written, or a + negative rijndael_rc error code. */ +extern int +rijndaelBlockDecrypt (rijndaelCipherInstance *cipher, + const rijndaelKeyInstance *key, + const char *input, size_t inputLen, + char *restrict outBuffer); + +/* Decrypt data in INPUT, of INPUTOCTETS bytes length, placing the + output in the pre-allocated OUTBUFFER which must hold at least + INPUTOCTETS aligned to the next block size boundary. + Ciphertext-Stealing as described in RFC 2040 is used to encrypt + partial blocks. The CIPHER is used as state, and must be + initialized with rijndaelCipherInit before calling this function. + The encryption KEY must be initialized with rijndaelMakeKey before + calling this function. Return the number of bits written, or a + negative rijndael_rc error code. */ +extern int +rijndaelPadDecrypt (rijndaelCipherInstance *cipher, + const rijndaelKeyInstance *key, + const char *input, size_t inputOctets, + char *restrict outBuffer); + + +#ifdef __cplusplus +} +#endif + +#endif /* __RIJNDAEL_API_FST_H */ diff --git a/include/libgnulib/root-uid.h b/include/libgnulib/root-uid.h new file mode 100755 index 0000000..ba50bfd --- /dev/null +++ b/include/libgnulib/root-uid.h @@ -0,0 +1,30 @@ +/* The user ID that always has appropriate privileges in the POSIX sense. + + Copyright 2012-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef ROOT_UID_H_ +#define ROOT_UID_H_ + +/* The user ID that always has appropriate privileges in the POSIX sense. */ +#ifdef __TANDEM +# define ROOT_UID 65535 +#else +# define ROOT_UID 0 +#endif + +#endif diff --git a/include/libgnulib/safe-alloc.h b/include/libgnulib/safe-alloc.h new file mode 100755 index 0000000..bee973e --- /dev/null +++ b/include/libgnulib/safe-alloc.h @@ -0,0 +1,136 @@ +/* safe-alloc.h: safer memory allocation + + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Daniel Berrange and Paul Eggert. */ + +#ifndef SAFE_ALLOC_H_ +#define SAFE_ALLOC_H_ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#if defined __CHERI_PURE_CAPABILITY__ +# include +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef SAFE_ALLOC_INLINE +# define SAFE_ALLOC_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Don't call these directly - use the macros below. */ +SAFE_ALLOC_INLINE void * +safe_alloc_realloc_n (void *ptr, size_t count, size_t size) +{ + size_t countx = count; + size_t sizex = size; + if (count == 0 || size == 0) + countx = sizex = 1; + ptr = reallocarray (ptr, countx, sizex); +#if defined __CHERI_PURE_CAPABILITY__ + if (ptr != NULL && (count == 0 || size == 0)) + ptr = cheri_bounds_set (ptr, 0); +#endif + return ptr; +} +_GL_ATTRIBUTE_NODISCARD SAFE_ALLOC_INLINE int +safe_alloc_check (void *ptr) +{ + /* Return 0 if the allocation was successful, -1 otherwise. */ + return -!ptr; +} + +/** + * ALLOC: + * @ptr: pointer to allocated memory + * + * Allocate sizeof *ptr bytes of memory and store + * the address of allocated memory in 'ptr'. Fill the + * newly allocated memory with zeros. + * + * Return -1 on failure to allocate, zero on success. + */ +#define ALLOC(ptr) ALLOC_N (ptr, 1) + +/** + * ALLOC_N: + * @ptr: pointer to allocated memory + * @count: number of elements to allocate + * + * Allocate an array of 'count' elements, each sizeof *ptr + * bytes long and store the address of allocated memory in + * 'ptr'. Fill the newly allocated memory with zeros. + * + * Return -1 on failure, 0 on success. + */ +#define ALLOC_N(ptr, count) \ + safe_alloc_check ((ptr) = calloc (count, sizeof *(ptr))) + +/** + * ALLOC_N_UNINITIALIZED: + * @ptr: pointer to allocated memory + * @count: number of elements to allocate + * + * Allocate an array of 'count' elements, each sizeof *ptr + * bytes long and store the address of allocated memory in + * 'ptr'. Do not initialize the new memory at all. + * + * Return -1 on failure to allocate, zero on success. + */ +#define ALLOC_N_UNINITIALIZED(ptr, count) \ + safe_alloc_check ((ptr) = safe_alloc_realloc_n (NULL, count, sizeof *(ptr))) + +/** + * REALLOC_N: + * @ptr: pointer to allocated memory + * @count: number of elements to allocate + * + * Re-allocate an array of 'count' elements, each sizeof *ptr + * bytes long and store the address of allocated memory in + * 'ptr'. Fill the newly allocated memory with zeros. + * + * Return -1 on failure to reallocate, zero on success. + */ +#define REALLOC_N(ptr, count) \ + safe_alloc_check ((ptr) = safe_alloc_realloc_n (ptr, count, sizeof *(ptr))) + +/** + * FREE: + * @ptr: pointer holding address to be freed + * + * Free the memory stored in 'ptr' and update to point + * to NULL. + */ +#define FREE(ptr) ((void) (free (ptr), (ptr) = NULL)) + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* SAFE_ALLOC_H_ */ diff --git a/include/libgnulib/safe-read.h b/include/libgnulib/safe-read.h new file mode 100755 index 0000000..6843092 --- /dev/null +++ b/include/libgnulib/safe-read.h @@ -0,0 +1,50 @@ +/* An interface to read() that retries after interrupts. + Copyright (C) 2002, 2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Some system calls may be interrupted and fail with errno = EINTR in the + following situations: + - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user + types Ctrl-Z) on some platforms: Mac OS X. + - The process receives a signal for which a signal handler was installed + with sigaction() with an sa_flags field that does not contain + SA_RESTART. + - The process receives a signal for which a signal handler was installed + with signal() and for which no call to siginterrupt(sig,0) was done, + on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris. + + This module provides a wrapper around read() that handles EINTR. */ + +#include + +#include "idx.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* This is present for backward compatibility with older versions of this code + where safe_read returned size_t, so SAFE_READ_ERROR was SIZE_MAX. */ +#define SAFE_READ_ERROR ((ptrdiff_t) -1) + +/* Read up to COUNT bytes at BUF from descriptor FD, retrying if interrupted. + Return the number of bytes read, zero for EOF, or -1 upon error. */ +extern ptrdiff_t safe_read (int fd, void *buf, idx_t count); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/safe-write.h b/include/libgnulib/safe-write.h new file mode 100755 index 0000000..0f77156 --- /dev/null +++ b/include/libgnulib/safe-write.h @@ -0,0 +1,50 @@ +/* An interface to write() that retries after interrupts. + Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Some system calls may be interrupted and fail with errno = EINTR in the + following situations: + - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user + types Ctrl-Z) on some platforms: Mac OS X. + - The process receives a signal for which a signal handler was installed + with sigaction() with an sa_flags field that does not contain + SA_RESTART. + - The process receives a signal for which a signal handler was installed + with signal() and for which no call to siginterrupt(sig,0) was done, + on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris. + + This module provides a wrapper around write() that handles EINTR. */ + +#include + +#include "idx.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* This is present for backward compatibility with older versions of this code + where safe_read returned size_t, so SAFE_WRITE_ERROR was SIZE_MAX. */ +#define SAFE_WRITE_ERROR ((ptrdiff_t) -1) + +/* Write up to COUNT bytes at BUF to descriptor FD, retrying if interrupted. + Return the number of bytes written, zero for EOF, or -1 upon error. */ +extern ptrdiff_t safe_write (int fd, const void *buf, idx_t count); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/same-inode.h b/include/libgnulib/same-inode.h new file mode 100755 index 0000000..13ae24b --- /dev/null +++ b/include/libgnulib/same-inode.h @@ -0,0 +1,95 @@ +/* Determine whether two stat buffers are known to refer to the same file. + + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef SAME_INODE_H +#define SAME_INODE_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef SAME_INODE_INLINE +# define SAME_INODE_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* True if A and B point to structs with st_dev and st_ino members + that are known to represent the same file. + + Use | and ^ to shorten generated code, and to lessen the + probability of screwups if st_ino is an array. */ + +#if defined __VMS && __CRTL_VER < 80200000 +# define PSAME_INODE(a, b) (! (((a)->st_dev ^ (b)->st_dev) \ + | ((a)->st_ino[0] ^ (b)->st_ino[0]) \ + | ((a)->st_ino[1] ^ (b)->st_ino[1]) \ + | ((a)->st_ino[2] ^ (b)->st_ino[2]))) +#elif defined _WIN32 && ! defined __CYGWIN__ + /* Native Windows. */ +# if _GL_WINDOWS_STAT_INODES + /* stat() and fstat() set st_dev and st_ino to 0 if information about + the inode is not available. */ +# if _GL_WINDOWS_STAT_INODES == 2 +# define PSAME_INODE(a, b) \ + (! (! ((a)->st_dev | (a)->st_ino._gl_ino[0] | (a)->st_ino._gl_ino[1]) \ + | ((a)->st_dev ^ (b)->st_dev) \ + | ((a)->st_ino._gl_ino[0] ^ (b)->st_ino._gl_ino[0]) \ + | ((a)->st_ino._gl_ino[1] ^ (b)->st_ino._gl_ino[1]))) +# else +# define PSAME_INODE(a, b) (! (! ((a)->st_dev | (a)->st_ino) \ + | ((a)->st_dev ^ (b)->st_dev) \ + | ((a)->st_ino ^ (b)->st_ino))) +# endif +# else + /* stat() and fstat() set st_ino to 0 always. */ +# define PSAME_INODE(a, b) 0 +# endif +#else + /* POSIX. */ +# define PSAME_INODE(a, b) (! (((a)->st_dev ^ (b)->st_dev) \ + | ((a)->st_ino ^ (b)->st_ino))) +#endif + +/* True if struct objects A and B are known to represent the same file. */ + +#define SAME_INODE(a, b) PSAME_INODE (&(a), &(b)) + +/* True if *A and *B represent the same file. Unlike PSAME_INODE, + args are evaluated once and must point to struct stat. */ + +SAME_INODE_INLINE bool +psame_inode (struct stat const *a, struct stat const *b) +{ + return PSAME_INODE (a, b); +} + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/include/libgnulib/same.h b/include/libgnulib/same.h new file mode 100755 index 0000000..87ef6fe --- /dev/null +++ b/include/libgnulib/same.h @@ -0,0 +1,34 @@ +/* Determine whether two file names refer to the same file. + + Copyright (C) 1997-2000, 2003-2004, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef SAME_H_ +#define SAME_H_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + + +bool same_name (const char *source, const char *dest); +bool same_nameat (int, char const *, int, char const *); + + +#ifdef __cplusplus +} +#endif + +#endif /* SAME_H_ */ diff --git a/include/libgnulib/save-cwd.h b/include/libgnulib/save-cwd.h new file mode 100755 index 0000000..9d314c2 --- /dev/null +++ b/include/libgnulib/save-cwd.h @@ -0,0 +1,44 @@ +/* Save and restore current working directory. + + Copyright (C) 1995, 1997-1998, 2003, 2009-2024 Free Software Foundation, + Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering. */ + +#ifndef SAVE_CWD_H +#define SAVE_CWD_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + + +struct saved_cwd + { + int desc; + char *name; + }; + +int save_cwd (struct saved_cwd *cwd); +int restore_cwd (const struct saved_cwd *cwd); +void free_cwd (struct saved_cwd *cwd); + + +#ifdef __cplusplus +} +#endif + +#endif /* SAVE_CWD_H */ diff --git a/include/libgnulib/savedir.h b/include/libgnulib/savedir.h new file mode 100755 index 0000000..02f2157 --- /dev/null +++ b/include/libgnulib/savedir.h @@ -0,0 +1,59 @@ +/* Save the list of files in a directory in a string. + + Copyright (C) 1997, 1999, 2001, 2003, 2005, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* Written by David MacKenzie . */ + +#ifndef _GL_SAVEDIR_H +#define _GL_SAVEDIR_H + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +enum savedir_option + { + SAVEDIR_SORT_NONE, + SAVEDIR_SORT_NAME, +#if D_INO_IN_DIRENT + SAVEDIR_SORT_INODE, + SAVEDIR_SORT_FASTREAD = SAVEDIR_SORT_INODE +#else + SAVEDIR_SORT_FASTREAD = SAVEDIR_SORT_NONE +#endif + }; + +char *streamsavedir (DIR *, enum savedir_option) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; +char *savedir (char const *, enum savedir_option) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/savewd.h b/include/libgnulib/savewd.h new file mode 100755 index 0000000..e74ba82 --- /dev/null +++ b/include/libgnulib/savewd.h @@ -0,0 +1,164 @@ +/* Save and restore the working directory, possibly using a subprocess. + + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#ifndef SAVEWD_H +#define SAVEWD_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef SAVEWD_INLINE +# define SAVEWD_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* A saved working directory. The member names and constants defined + by this structure are private to the savewd module. */ +struct savewd +{ + /* The state of this object. */ + enum + { + /* This object has been created but does not yet represent + the working directory. */ + INITIAL_STATE, + + /* val.fd is the original working directory's file descriptor. + It is still the working directory. */ + FD_STATE, + + /* Like FD_STATE, but the working directory has changed, so + restoring it will require a fchdir. */ + FD_POST_CHDIR_STATE, + + /* Fork and let the subprocess do the work. val.child is 0 in a + child, negative in a childless parent, and the child process + ID in a parent with a child. */ + FORKING_STATE, + + /* A serious problem argues against further efforts. val.errnum + contains the error number (e.g., EIO). */ + ERROR_STATE, + + /* savewd_finish has been called, so the application no longer + cares whether the working directory is saved, and there is no + more work to do. */ + FINAL_STATE + } state; + + /* The object's value. */ + union + { + int fd; + int errnum; + pid_t child; + } val; +}; + +/* Initialize a saved working directory object. */ +SAVEWD_INLINE void +savewd_init (struct savewd *wd) +{ + wd->state = INITIAL_STATE; +} + + +/* Options for savewd_chdir. Can be ORed together. */ +enum + { + /* Do not follow symbolic links, if supported. */ + SAVEWD_CHDIR_NOFOLLOW = 1, + + /* Do not chdir if the directory is readable; simply succeed + without invoking chdir if the directory was opened. */ + SAVEWD_CHDIR_SKIP_READABLE = 2 + }; + +/* Change the directory, and if successful, record into *WD the fact + that the process chdired into DIR. A process using this module + should use savewd_chdir rather than chdir or fchdir. Obey the + options specified in OPTIONS. + + If OPEN_RESULT is not null, store into OPEN_RESULT[0] a file + descriptor that accesses DIR if a file descriptor is successfully + obtained. Store -1 otherwise, setting OPEN_RESULT[1] to the error + number. Store through OPEN_RESULT regardless of whether the chdir + is successful. However, when -2 is returned, the contents of + OPEN_RESULT are indeterminate since the file descriptor is closed + in the parent. + + Return -2 if a subprocess was spun off to do the real work, -1 + (setting errno) if unsuccessful, 0 if successful. */ +int savewd_chdir (struct savewd *wd, char const *dir, int options, + int open_result[2]); + +/* Restore the working directory from *WD. STATUS indicates the exit + status corresponding to the work done since the last save; this is + used when the caller is in a subprocess. Return 0 if successful, + -1 (setting errno) on our failure, a positive subprocess exit + status if the working directory was restored in the parent but the + subprocess failed. */ +int savewd_restore (struct savewd *wd, int status); + +/* Return WD's error number, or 0 if WD is not in an error state. */ +SAVEWD_INLINE int _GL_ATTRIBUTE_PURE +savewd_errno (struct savewd const *wd) +{ + return (wd->state == ERROR_STATE ? wd->val.errnum : 0); +} + +/* Deallocate any resources associated with WD. A program that chdirs + should restore before finishing. */ +void savewd_finish (struct savewd *wd); + +/* Process N_FILES file names, FILE[0] through FILE[N_FILES - 1]. + For each file name F, call ACT (F, WD, OPTIONS); ACT should invoke + savewd_chdir as needed, and should return an exit status. WD + represents the working directory; it may be in an error state when + ACT is called. + + Save and restore the working directory as needed by the file name + vector; assume that ACT does not require access to any relative + file names other than its first argument, and that it is OK if the + working directory is changed when this function returns. Some + actions may be applied in a subprocess. + + Return the maximum exit status that any call to ACT returned, or + EXIT_SUCCESS (i.e., 0) if no calls were made. */ +int savewd_process_files (int n_files, char **file, + int (*act) (char *, struct savewd *, void *), + void *options); + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/include/libgnulib/scratch_buffer.h b/include/libgnulib/scratch_buffer.h new file mode 100755 index 0000000..4f28203 --- /dev/null +++ b/include/libgnulib/scratch_buffer.h @@ -0,0 +1,117 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, 2017. */ + +#ifndef _GL_SCRATCH_BUFFER_H +#define _GL_SCRATCH_BUFFER_H + +/* Scratch buffers with a default stack allocation and fallback to + heap allocation. It is expected that this function is used in this + way: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + return -1; + + scratch_buffer_free (&tmpbuf); + return 0; + + The allocation functions (scratch_buffer_grow, + scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make + sure that the heap allocation, if any, is freed, so that the code + above does not have a memory leak. The buffer still remains in a + state that can be deallocated using scratch_buffer_free, so a loop + like this is valid as well: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + break; + + scratch_buffer_free (&tmpbuf); + + scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed + to grow the buffer by at least 512 bytes. This means that when + using the scratch buffer as a backing store for a non-character + array whose element size, in bytes, is 512 or smaller, the scratch + buffer only has to grow once to make room for at least one more + element. +*/ + +/* Scratch buffer. Must be initialized with scratch_buffer_init + before its use. */ +struct scratch_buffer; + +/* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space + and BUFFER->length reflects the available space. */ +#if 0 +extern void scratch_buffer_init (struct scratch_buffer *buffer); +#endif + +/* Deallocates *BUFFER (if it was heap-allocated). */ +#if 0 +extern void scratch_buffer_free (struct scratch_buffer *buffer); +#endif + +/* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT + preserved. Return true on success, false on allocation failure (in + which case the old buffer is freed). On success, the new buffer is + larger than the previous size. On failure, *BUFFER is deallocated, + but remains in a free-able state, and errno is set. */ +#if 0 +extern bool scratch_buffer_grow (struct scratch_buffer *buffer); +#endif + +/* Like scratch_buffer_grow, but preserve the old buffer + contents on success, as a prefix of the new buffer. */ +#if 0 +extern bool scratch_buffer_grow_preserve (struct scratch_buffer *buffer); +#endif + +/* Grow *BUFFER so that it can store at least NELEM elements of SIZE + bytes. The buffer contents are NOT preserved. Both NELEM and SIZE + can be zero. Return true on success, false on allocation failure + (in which case the old buffer is freed, but *BUFFER remains in a + free-able state, and errno is set). It is unspecified whether this + function can reduce the array size. */ +#if 0 +extern bool scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size); +#endif + + +/* The implementation is imported from glibc. */ + +/* Avoid possible conflicts with symbols exported by the GNU libc. */ +#define __libc_scratch_buffer_grow gl_scratch_buffer_grow +#define __libc_scratch_buffer_grow_preserve gl_scratch_buffer_grow_preserve +#define __libc_scratch_buffer_set_array_size gl_scratch_buffer_set_array_size + +#ifndef _GL_LIKELY +/* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ +# define _GL_LIKELY(cond) __builtin_expect ((cond), 1) +# define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) +#endif + +#include + +#endif /* _GL_SCRATCH_BUFFER_H */ diff --git a/include/libgnulib/selinux-at.h b/include/libgnulib/selinux-at.h new file mode 100755 index 0000000..c25e362 --- /dev/null +++ b/include/libgnulib/selinux-at.h @@ -0,0 +1,62 @@ +/* Prototypes for openat-style fd-relative SELinux functions + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* These are the dir-fd-relative variants of the functions without the + "at" suffix. For example, getfileconat (AT_FDCWD, file, &c) is usually + equivalent to getfilecon (file, &c). The emulation is accomplished + by first attempting getfilecon ("/proc/self/fd/DIR_FD/FILE", &c). + Failing that, simulate it via save_cwd/fchdir/getfilecon/restore_cwd. + If either the save_cwd or the restore_cwd fails (relatively unlikely), + then give a diagnostic and exit nonzero. */ + +/* dir-fd-relative getfilecon. Set *CON to the SELinux security context + of the file specified by DIR_FD and FILE and return the length of *CON. + DIR_FD and FILE are interpreted as for fstatat[*]. A non-NULL *CON + must be freed with freecon. Upon error, set *CON to NULL, set errno + and return -1. + [*] with flags=0 here, with flags=AT_SYMLINK_NOFOLLOW for lgetfileconat */ +int getfileconat (int dir_fd, char const *file, char **con); + +/* dir-fd-relative lgetfilecon. This function is just like getfileconat, + except when DIR_FD and FILE specify a symlink: lgetfileconat operates on + the symlink, while getfileconat operates on the referent of the symlink. */ +int lgetfileconat (int dir_fd, char const *file, char **con); + +/* dir-fd-relative setfilecon. Set the SELinux security context of + the file specified by DIR_FD and FILE to CON. DIR_FD and FILE are + interpreted as for fstatat[*]. Upon success, return 0. + Otherwise, return -1 and set errno. */ +int setfileconat (int dir_fd, char const *file, char const *con); + +/* dir-fd-relative lsetfilecon. This function is just like setfileconat, + except that rather than dereferencing a symlink, this function affects it. */ +/* dir-fd-relative lsetfilecon. This function is just like setfileconat, + except when DIR_FD and FILE specify a symlink: lsetfileconat operates on + the symlink, while setfileconat operates on the referent of the symlink. */ +int lsetfileconat (int dir_fd, char const *file, char const *con); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/setlocale_null.h b/include/libgnulib/setlocale_null.h new file mode 100755 index 0000000..966c53c --- /dev/null +++ b/include/libgnulib/setlocale_null.h @@ -0,0 +1,110 @@ +/* Query the name of the current global locale. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2019. */ + +#ifndef _SETLOCALE_NULL_H +#define _SETLOCALE_NULL_H + +#include + +#include "arg-nonnull.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Recommended size of a buffer for a locale name for a single category. + On glibc systems, you can have locale names that are relative file names; + assume a maximum length 256. + In native Windows, in 2018 the longest locale name was of length 58 + ("FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251"). */ +#define SETLOCALE_NULL_MAX (256+1) + +/* Recommended size of a buffer for a locale name with all categories. + On glibc systems, you can have locale names that are relative file names; + assume maximum length 256 for each. There are 12 categories; so, the + maximum total length is 148+12*256. + In native Windows, there are 5 categories, and the maximum total length is + 55+5*58. */ +#define SETLOCALE_NULL_ALL_MAX (148+12*256+1) + +/* setlocale_null_r_unlocked (CATEGORY, BUF, BUFSIZE) is like + setlocale (CATEGORY, NULL), except that + - it returns the resulting locale category name or locale name in the + user-supplied buffer BUF, which must be BUFSIZE bytes long. + The recommended minimum buffer size is + - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and + - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL. + The return value is an error code: 0 if the call is successful, EINVAL if + CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed + size (including the trailing NUL byte). In the latter case, a truncated + result is returned in BUF, but still NUL-terminated if BUFSIZE > 0. + This call is guaranteed to be multithread-safe only if + - CATEGORY != LC_ALL and SETLOCALE_NULL_ONE_MTSAFE is true, or + - CATEGORY == LC_ALL and SETLOCALE_NULL_ALL_MTSAFE is true, + and the other threads must not make other setlocale invocations (since + changing the global locale has side effects on all threads). */ +extern int setlocale_null_r_unlocked (int category, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((2)); + +/* setlocale_null_unlocked (CATEGORY) is like setlocale (CATEGORY, NULL). + The return value is NULL if CATEGORY is invalid. + This call is guaranteed to be multithread-safe only if + - CATEGORY != LC_ALL and SETLOCALE_NULL_ONE_MTSAFE is true, or + - CATEGORY == LC_ALL and SETLOCALE_NULL_ALL_MTSAFE is true, + and the other threads must not make other setlocale invocations (since + changing the global locale has side effects on all threads). */ +extern const char *setlocale_null_unlocked (int category); + +/* setlocale_null_r (CATEGORY, BUF, BUFSIZE) is like setlocale (CATEGORY, NULL), + except that + - it is guaranteed to be multithread-safe, + - it returns the resulting locale category name or locale name in the + user-supplied buffer BUF, which must be BUFSIZE bytes long. + The recommended minimum buffer size is + - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and + - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL. + The return value is an error code: 0 if the call is successful, EINVAL if + CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed + size (including the trailing NUL byte). In the latter case, a truncated + result is returned in BUF, but still NUL-terminated if BUFSIZE > 0. + For this call to be multithread-safe, *all* calls to + setlocale (CATEGORY, NULL) in all other threads must have been converted + to use setlocale_null_r or setlocale_null as well, and the other threads + must not make other setlocale invocations (since changing the global locale + has side effects on all threads). */ +extern int setlocale_null_r (int category, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((2)); + +/* setlocale_null (CATEGORY) is like setlocale (CATEGORY, NULL), except that + it is guaranteed to be multithread-safe. + The return value is NULL if CATEGORY is invalid. + For this call to be multithread-safe, *all* calls to + setlocale (CATEGORY, NULL) in all other threads must have been converted + to use setlocale_null_r or setlocale_null as well, and the other threads + must not make other setlocale invocations (since changing the global locale + has side effects on all threads). */ +extern const char *setlocale_null (int category); + + +#ifdef __cplusplus +} +#endif + +#endif /* _SETLOCALE_NULL_H */ diff --git a/include/libgnulib/sf-istream.h b/include/libgnulib/sf-istream.h new file mode 100755 index 0000000..e45c561 --- /dev/null +++ b/include/libgnulib/sf-istream.h @@ -0,0 +1,77 @@ +/* A string or file based input stream. + Copyright (C) 2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2024. */ + +#ifndef _SF_ISTREAM_H +#define _SF_ISTREAM_H + +#include + +#include "string-desc.h" + +/* An input stream type that can read from a file or from a string. */ +typedef struct sf_istream sf_istream_t; +struct sf_istream +{ + /* The input file stream, when reading from a file. */ + FILE *fp; + /* The input area, when reading from a string. */ + const char *input; + const char *input_end; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +/* Initializes STREAM to read from FP. + FP must be a FILE stream open for reading. */ +extern void sf_istream_init_from_file (sf_istream_t *stream, FILE *fp); +/* Initializes STREAM to read from a NUL-terminated string INPUT. + The contents of INPUT must stay available and unchanged as long as STREAM + is in use. */ +extern void sf_istream_init_from_string (sf_istream_t *stream, + const char *input); +/* Initializes STREAM to read from a string INPUT. + The contents of INPUT must stay available and unchanged as long as STREAM + is in use. Operations on STREAM will not modify the contents of INPUT. */ +extern void sf_istream_init_from_string_desc (sf_istream_t *stream, + string_desc_t input); + +/* Reads a single 'char' from STREAM, and returns it as an 'unsigned char'. + Returns EOF when the end of stream was already reached. */ +extern int sf_getc (sf_istream_t *stream); + +/* Tests whether STREAM has encountered an error. + You may want to call this function after sf_getc (stream) has + returned EOF; in other situations it is guaranteed to return 0. */ +extern int sf_ferror (sf_istream_t *stream); + +/* Assuming that C was the last value returned by sf_getc (stream), + this call pushes back C onto the stream. + Only 1 character of pushback is guaranteed. */ +extern void sf_ungetc (sf_istream_t *stream, int c); + +/* Frees all memory held by STREAM. + This call has no effect on the arguments provided to sf_istream_init_*. */ +extern void sf_free (sf_istream_t *stream); + +#ifdef __cplusplus +} +#endif + +#endif /* _SF_ISTREAM_H */ diff --git a/include/libgnulib/sfl-istream.h b/include/libgnulib/sfl-istream.h new file mode 100755 index 0000000..7b487ab --- /dev/null +++ b/include/libgnulib/sfl-istream.h @@ -0,0 +1,79 @@ +/* A string or file based input stream, that keeps track of a line number. + Copyright (C) 2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2024. */ + +#ifndef _SFL_ISTREAM_H +#define _SFL_ISTREAM_H + +#include "sf-istream.h" + +/* An input stream type that can read from a file or from a string + and that keeps track of a line number. */ +typedef struct sfl_istream sfl_istream_t; +struct sfl_istream +{ + sf_istream_t istream; + size_t line_number; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +/* Initializes STREAM to read from FP. + FP must be a FILE stream open for reading. */ +extern void sfl_istream_init_from_file (sfl_istream_t *stream, FILE *fp); +/* Initializes STREAM to read from a NUL-terminated string INPUT. + The contents of INPUT must stay available and unchanged as long as STREAM + is in use. */ +extern void sfl_istream_init_from_string (sfl_istream_t *stream, + const char *input); +/* Initializes STREAM to read from a string INPUT. + The contents of INPUT must stay available and unchanged as long as STREAM + is in use. Operations on STREAM will not modify the contents of INPUT. */ +extern void sfl_istream_init_from_string_desc (sfl_istream_t *stream, + string_desc_t input); + +/* Sets the current line number of STREAM. */ +extern void sfl_set_line_number (sfl_istream_t *stream, size_t line_number); + +/* Returns the current line number of STREAM. */ +extern size_t sfl_get_line_number (sfl_istream_t *stream); + +/* Reads a single 'char' from STREAM, and returns it as an 'unsigned char'. + Returns EOF when the end of stream was already reached. */ +extern int sfl_getc (sfl_istream_t *stream); + +/* Tests whether STREAM has encountered an error. + You may want to call this function after sf_getc (stream) has + returned EOF; in other situations it is guaranteed to return 0. */ +extern int sfl_ferror (sfl_istream_t *stream); + +/* Assuming that C was the last value returned by sf_getc (stream), + this call pushes back C onto the stream. + Only 1 character of pushback is guaranteed. */ +extern void sfl_ungetc (sfl_istream_t *stream, int c); + +/* Frees all memory held by STREAM. + This call has no effect on the arguments provided to sfl_istream_init_*. */ +extern void sfl_free (sfl_istream_t *stream); + +#ifdef __cplusplus +} +#endif + +#endif /* _SFL_ISTREAM_H */ diff --git a/include/libgnulib/sh-quote.h b/include/libgnulib/sh-quote.h new file mode 100755 index 0000000..753a27b --- /dev/null +++ b/include/libgnulib/sh-quote.h @@ -0,0 +1,58 @@ +/* Shell quoting. + Copyright (C) 2001-2002, 2004, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _SH_QUOTE_H +#define _SH_QUOTE_H + +/* When passing a command to a shell, we must quote the program name and + arguments, since Unix shells interpret characters like " ", "'", "<", ">", + "$", '*', '?' etc. in a special way. */ + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Returns the number of bytes needed for the quoted string. */ +extern size_t shell_quote_length (const char *string); + +/* Copies the quoted string to p and returns the incremented p. + There must be room for shell_quote_length (string) + 1 bytes at p. */ +extern char * shell_quote_copy (char *restrict p, const char *string); + +/* Returns the freshly allocated quoted string. */ +extern char * shell_quote (const char *string) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* Returns a freshly allocated string containing all argument strings, quoted, + separated through spaces. */ +extern char * shell_quote_argv (const char * const *argv) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +#ifdef __cplusplus +} +#endif + +#endif /* _SH_QUOTE_H */ diff --git a/include/libgnulib/sha1.h b/include/libgnulib/sha1.h new file mode 100755 index 0000000..940163e --- /dev/null +++ b/include/libgnulib/sha1.h @@ -0,0 +1,134 @@ +/* Declarations of functions and data types used for SHA1 sum + library functions. + Copyright (C) 2000-2001, 2003, 2005-2006, 2008-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef SHA1_H +# define SHA1_H 1 + +/* This file uses HAVE_OPENSSL_SHA1. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include +# include + +# if HAVE_OPENSSL_SHA1 +# ifndef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT 0x10101000L /* FIXME: Use OpenSSL 1.1+ API. */ +# endif +/* If would give a compile-time error, don't use OpenSSL. */ +# include +# if OPENSSL_VERSION_MAJOR >= 3 +# include +# if (OPENSSL_CONFIGURED_API \ + < (OPENSSL_API_COMPAT < 0x900000L ? OPENSSL_API_COMPAT : \ + ((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF))) +# undef HAVE_OPENSSL_SHA1 +# endif +# endif +# if HAVE_OPENSSL_SHA1 +# include +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +# define SHA1_DIGEST_SIZE 20 + +# if HAVE_OPENSSL_SHA1 +# define GL_OPENSSL_NAME 1 +# include "gl_openssl.h" +# else +/* Structure to save state of computation between the single steps. */ +struct sha1_ctx +{ + uint32_t A; + uint32_t B; + uint32_t C; + uint32_t D; + uint32_t E; + + uint32_t total[2]; + uint32_t buflen; /* ≥ 0, ≤ 128 */ + uint32_t buffer[32]; /* 128 bytes; the first buflen bytes are in use */ +}; + +/* Initialize structure containing state of computation. */ +extern void sha1_init_ctx (struct sha1_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is necessary that LEN is a multiple of 64!!! */ +extern void sha1_process_block (const void *buffer, size_t len, + struct sha1_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is NOT required that LEN is a multiple of 64. */ +extern void sha1_process_bytes (const void *buffer, size_t len, + struct sha1_ctx *ctx); + +/* Process the remaining bytes in the buffer and put result from CTX + in first 20 bytes following RESBUF. The result is always in little + endian byte order, so that a byte-wise output yields to the wanted + ASCII representation of the message digest. */ +extern void *sha1_finish_ctx (struct sha1_ctx *ctx, void *restrict resbuf); + + +/* Put result from CTX in first 20 bytes following RESBUF. The result is + always in little endian byte order, so that a byte-wise output yields + to the wanted ASCII representation of the message digest. */ +extern void *sha1_read_ctx (const struct sha1_ctx *ctx, void *restrict resbuf); + + +/* Compute SHA1 message digest for LEN bytes beginning at BUFFER. The + result is always in little endian byte order, so that a byte-wise + output yields to the wanted ASCII representation of the message + digest. */ +extern void *sha1_buffer (const char *buffer, size_t len, + void *restrict resblock); + +# endif + +/* Compute SHA1 message digest for bytes read from STREAM. + STREAM is an open file stream. Regular files are handled more efficiently. + The contents of STREAM from its current position to its end will be read. + The case that the last operation on STREAM was an 'ungetc' is not supported. + The resulting message digest number will be written into the 20 bytes + beginning at RESBLOCK. */ +extern int sha1_stream (FILE *stream, void *resblock); + + +# ifdef __cplusplus +} +# endif + +#endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/include/libgnulib/sha256.h b/include/libgnulib/sha256.h new file mode 100755 index 0000000..a9d7abb --- /dev/null +++ b/include/libgnulib/sha256.h @@ -0,0 +1,140 @@ +/* Declarations of functions and data types used for SHA256 and SHA224 sum + library functions. + Copyright (C) 2005-2006, 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef SHA256_H +# define SHA256_H 1 + +/* This file uses HAVE_OPENSSL_SHA256. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include +# include + +# if HAVE_OPENSSL_SHA256 +# ifndef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT 0x10101000L /* FIXME: Use OpenSSL 1.1+ API. */ +# endif +/* If would give a compile-time error, don't use OpenSSL. */ +# include +# if OPENSSL_VERSION_MAJOR >= 3 +# include +# if (OPENSSL_CONFIGURED_API \ + < (OPENSSL_API_COMPAT < 0x900000L ? OPENSSL_API_COMPAT : \ + ((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF))) +# undef HAVE_OPENSSL_SHA256 +# endif +# endif +# if HAVE_OPENSSL_SHA256 +# include +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +enum { SHA224_DIGEST_SIZE = 224 / 8 }; +enum { SHA256_DIGEST_SIZE = 256 / 8 }; + +# if HAVE_OPENSSL_SHA256 +# define GL_OPENSSL_NAME 224 +# include "gl_openssl.h" +# define GL_OPENSSL_NAME 256 +# include "gl_openssl.h" +# else +/* Structure to save state of computation between the single steps. */ +struct sha256_ctx +{ + uint32_t state[8]; + + uint32_t total[2]; + size_t buflen; /* ≥ 0, ≤ 128 */ + uint32_t buffer[32]; /* 128 bytes; the first buflen bytes are in use */ +}; + +/* Initialize structure containing state of computation. */ +extern void sha256_init_ctx (struct sha256_ctx *ctx); +extern void sha224_init_ctx (struct sha256_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is necessary that LEN is a multiple of 64!!! */ +extern void sha256_process_block (const void *buffer, size_t len, + struct sha256_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is NOT required that LEN is a multiple of 64. */ +extern void sha256_process_bytes (const void *buffer, size_t len, + struct sha256_ctx *ctx); + +/* Process the remaining bytes in the buffer and put result from CTX + in first 32 (28) bytes following RESBUF. The result is always in little + endian byte order, so that a byte-wise output yields to the wanted + ASCII representation of the message digest. */ +extern void *sha256_finish_ctx (struct sha256_ctx *ctx, void *restrict resbuf); +extern void *sha224_finish_ctx (struct sha256_ctx *ctx, void *restrict resbuf); + + +/* Put result from CTX in first 32 (28) bytes following RESBUF. The result is + always in little endian byte order, so that a byte-wise output yields + to the wanted ASCII representation of the message digest. */ +extern void *sha256_read_ctx (const struct sha256_ctx *ctx, + void *restrict resbuf); +extern void *sha224_read_ctx (const struct sha256_ctx *ctx, + void *restrict resbuf); + + +/* Compute SHA256 (SHA224) message digest for LEN bytes beginning at BUFFER. + The result is always in little endian byte order, so that a byte-wise + output yields to the wanted ASCII representation of the message + digest. */ +extern void *sha256_buffer (const char *buffer, size_t len, + void *restrict resblock); +extern void *sha224_buffer (const char *buffer, size_t len, + void *restrict resblock); + +# endif + +/* Compute SHA256 (SHA224) message digest for bytes read from STREAM. + STREAM is an open file stream. Regular files are handled more efficiently. + The contents of STREAM from its current position to its end will be read. + The case that the last operation on STREAM was an 'ungetc' is not supported. + The resulting message digest number will be written into the 32 (28) bytes + beginning at RESBLOCK. */ +extern int sha256_stream (FILE *stream, void *resblock); +extern int sha224_stream (FILE *stream, void *resblock); + + +# ifdef __cplusplus +} +# endif + +#endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/include/libgnulib/sha512.h b/include/libgnulib/sha512.h new file mode 100755 index 0000000..f6bac85 --- /dev/null +++ b/include/libgnulib/sha512.h @@ -0,0 +1,143 @@ +/* Declarations of functions and data types used for SHA512 and SHA384 sum + library functions. + Copyright (C) 2005-2006, 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef SHA512_H +# define SHA512_H 1 + +/* This file uses HAVE_OPENSSL_SHA512. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include +# include "u64.h" + +# if HAVE_OPENSSL_SHA512 +# ifndef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT 0x10101000L /* FIXME: Use OpenSSL 1.1+ API. */ +# endif +/* If would give a compile-time error, don't use OpenSSL. */ +# include +# if OPENSSL_VERSION_MAJOR >= 3 +# include +# if (OPENSSL_CONFIGURED_API \ + < (OPENSSL_API_COMPAT < 0x900000L ? OPENSSL_API_COMPAT : \ + ((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF))) +# undef HAVE_OPENSSL_SHA512 +# endif +# endif +# if HAVE_OPENSSL_SHA512 +# include +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +enum { SHA384_DIGEST_SIZE = 384 / 8 }; +enum { SHA512_DIGEST_SIZE = 512 / 8 }; + +# if HAVE_OPENSSL_SHA512 +# define GL_OPENSSL_NAME 384 +# include "gl_openssl.h" +# define GL_OPENSSL_NAME 512 +# include "gl_openssl.h" +# else +/* Structure to save state of computation between the single steps. */ +struct sha512_ctx +{ + u64 state[8]; + + u64 total[2]; + size_t buflen; /* ≥ 0, ≤ 256 */ + u64 buffer[32]; /* 256 bytes; the first buflen bytes are in use */ +}; + +/* Initialize structure containing state of computation. */ +extern void sha512_init_ctx (struct sha512_ctx *ctx); +extern void sha384_init_ctx (struct sha512_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is necessary that LEN is a multiple of 128!!! */ +extern void sha512_process_block (const void *buffer, size_t len, + struct sha512_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is NOT required that LEN is a multiple of 128. */ +extern void sha512_process_bytes (const void *buffer, size_t len, + struct sha512_ctx *ctx); + +/* Process the remaining bytes in the buffer and put result from CTX + in first 64 (48) bytes following RESBUF. The result is always in little + endian byte order, so that a byte-wise output yields to the wanted + ASCII representation of the message digest. */ +extern void *sha512_finish_ctx (struct sha512_ctx *ctx, void *restrict resbuf); +extern void *sha384_finish_ctx (struct sha512_ctx *ctx, void *restrict resbuf); + + +/* Put result from CTX in first 64 (48) bytes following RESBUF. The result is + always in little endian byte order, so that a byte-wise output yields + to the wanted ASCII representation of the message digest. + + IMPORTANT: On some systems it is required that RESBUF is correctly + aligned for a 32 bits value. */ +extern void *sha512_read_ctx (const struct sha512_ctx *ctx, + void *restrict resbuf); +extern void *sha384_read_ctx (const struct sha512_ctx *ctx, + void *restrict resbuf); + + +/* Compute SHA512 (SHA384) message digest for LEN bytes beginning at BUFFER. + The result is always in little endian byte order, so that a byte-wise + output yields to the wanted ASCII representation of the message + digest. */ +extern void *sha512_buffer (const char *buffer, size_t len, + void *restrict resblock); +extern void *sha384_buffer (const char *buffer, size_t len, + void *restrict resblock); + +# endif + +/* Compute SHA512 (SHA384) message digest for bytes read from STREAM. + STREAM is an open file stream. Regular files are handled more efficiently. + The contents of STREAM from its current position to its end will be read. + The case that the last operation on STREAM was an 'ungetc' is not supported. + The resulting message digest number will be written into the 64 (48) bytes + beginning at RESBLOCK. */ +extern int sha512_stream (FILE *stream, void *resblock); +extern int sha384_stream (FILE *stream, void *resblock); + + +# ifdef __cplusplus +} +# endif + +#endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/include/libgnulib/sig-handler.h b/include/libgnulib/sig-handler.h new file mode 100755 index 0000000..076d0ab --- /dev/null +++ b/include/libgnulib/sig-handler.h @@ -0,0 +1,53 @@ +/* Convenience declarations when working with . + + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_SIG_HANDLER_H +#define _GL_SIG_HANDLER_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef SIG_HANDLER_INLINE +# define SIG_HANDLER_INLINE _GL_INLINE +#endif + +/* Convenience type when working with signal handlers. */ +typedef void (*sa_handler_t) (int); + +/* Return the handler of a signal, as a sa_handler_t value regardless + of its true type. The resulting function can be compared to + special values like SIG_IGN but it is not portable to call it. */ +SIG_HANDLER_INLINE sa_handler_t _GL_ATTRIBUTE_PURE +get_handler (struct sigaction const *a) +{ + /* POSIX says that special values like SIG_IGN can only occur when + action.sa_flags does not contain SA_SIGINFO. But in Linux 2.4, + for example, sa_sigaction and sa_handler are aliases and a signal + is ignored if sa_sigaction (after casting) equals SIG_IGN. In + this case, this implementation relies on the fact that the two + are aliases, and simply returns sa_handler. */ + return a->sa_handler; +} + +_GL_INLINE_HEADER_END + +#endif /* _GL_SIG_HANDLER_H */ diff --git a/include/libgnulib/sig2str.h b/include/libgnulib/sig2str.h new file mode 100755 index 0000000..1abdb14 --- /dev/null +++ b/include/libgnulib/sig2str.h @@ -0,0 +1,32 @@ +/* sig2str.h -- convert between signal names and numbers + + Copyright (C) 2002, 2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#include + +/* An upper bound on signal numbers allowed by the system. */ + +#if defined _sys_nsig +# define SIGNUM_BOUND (_sys_nsig - 1) +#elif defined _SIG_MAXSIG +# define SIGNUM_BOUND (_SIG_MAXSIG - 2) /* FreeBSD >= 7. */ +#elif defined NSIG +# define SIGNUM_BOUND (NSIG - 1) +#else +# define SIGNUM_BOUND 64 +#endif diff --git a/include/libgnulib/siglist.h b/include/libgnulib/siglist.h new file mode 100755 index 0000000..8d06e9b --- /dev/null +++ b/include/libgnulib/siglist.h @@ -0,0 +1,132 @@ +/* Canonical list of all signal names. + Copyright (C) 1996-1999, 2008-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file should be usable for any platform, since it just associates + the SIG* macros with text names and descriptions. The actual values + come from (via ). For any signal macros do not + exist on every platform, we can use #ifdef tests here and still use + this single common file for all platforms. */ + +/* This file is included multiple times. */ + +/* Duplicate values (such as SIGBUS==SIGSEGV on Haiku) favor the last + list entry. */ + +/* Standard signals */ +#ifdef SIGHUP + init_sig (SIGHUP, "HUP", N_("Hangup")) +#endif +#ifdef SIGINT + init_sig (SIGINT, "INT", N_("Interrupt")) +#endif +#ifdef SIGQUIT + init_sig (SIGQUIT, "QUIT", N_("Quit")) +#endif +#ifdef SIGILL + init_sig (SIGILL, "ILL", N_("Illegal instruction")) +#endif +#ifdef SIGTRAP + init_sig (SIGTRAP, "TRAP", N_("Trace/breakpoint trap")) +#endif +#ifdef SIGABRT + init_sig (SIGABRT, "ABRT", N_("Aborted")) +#endif +#ifdef SIGFPE + init_sig (SIGFPE, "FPE", N_("Floating point exception")) +#endif +#ifdef SIGKILL + init_sig (SIGKILL, "KILL", N_("Killed")) +#endif +#ifdef SIGBUS + init_sig (SIGBUS, "BUS", N_("Bus error")) +#endif +#ifdef SIGSEGV + init_sig (SIGSEGV, "SEGV", N_("Segmentation fault")) +#endif +#ifdef SIGPIPE + init_sig (SIGPIPE, "PIPE", N_("Broken pipe")) +#endif +#ifdef SIGALRM + init_sig (SIGALRM, "ALRM", N_("Alarm clock")) +#endif +#ifdef SIGTERM + init_sig (SIGTERM, "TERM", N_("Terminated")) +#endif +#ifdef SIGURG + init_sig (SIGURG, "URG", N_("Urgent I/O condition")) +#endif +#ifdef SIGSTOP + init_sig (SIGSTOP, "STOP", N_("Stopped (signal)")) +#endif +#ifdef SIGTSTP + init_sig (SIGTSTP, "TSTP", N_("Stopped")) +#endif +#ifdef SIGCONT + init_sig (SIGCONT, "CONT", N_("Continued")) +#endif +#ifdef SIGCHLD + init_sig (SIGCHLD, "CHLD", N_("Child exited")) +#endif +#ifdef SIGTTIN + init_sig (SIGTTIN, "TTIN", N_("Stopped (tty input)")) +#endif +#ifdef SIGTTOU + init_sig (SIGTTOU, "TTOU", N_("Stopped (tty output)")) +#endif +#ifdef SIGIO + init_sig (SIGIO, "IO", N_("I/O possible")) +#endif +#ifdef SIGXCPU + init_sig (SIGXCPU, "XCPU", N_("CPU time limit exceeded")) +#endif +#ifdef SIGXFSZ + init_sig (SIGXFSZ, "XFSZ", N_("File size limit exceeded")) +#endif +#ifdef SIGVTALRM + init_sig (SIGVTALRM, "VTALRM", N_("Virtual timer expired")) +#endif +#ifdef SIGPROF + init_sig (SIGPROF, "PROF", N_("Profiling timer expired")) +#endif +#ifdef SIGWINCH + init_sig (SIGWINCH, "WINCH", N_("Window changed")) +#endif +#ifdef SIGUSR1 + init_sig (SIGUSR1, "USR1", N_("User defined signal 1")) +#endif +#ifdef SIGUSR2 + init_sig (SIGUSR2, "USR2", N_("User defined signal 2")) +#endif + +/* Variations */ +#ifdef SIGEMT + init_sig (SIGEMT, "EMT", N_("EMT trap")) +#endif +#ifdef SIGSYS + init_sig (SIGSYS, "SYS", N_("Bad system call")) +#endif +#ifdef SIGSTKFLT + init_sig (SIGSTKFLT, "STKFLT", N_("Stack fault")) +#endif +#ifdef SIGINFO + init_sig (SIGINFO, "INFO", N_("Information request")) +#elif defined(SIGPWR) && (!defined(SIGLOST) || (SIGPWR != SIGLOST)) + init_sig (SIGPWR, "PWR", N_("Power failure")) +#endif +#ifdef SIGLOST + init_sig (SIGLOST, "LOST", N_("Resource lost")) +#endif diff --git a/include/libgnulib/signed-nan.h b/include/libgnulib/signed-nan.h new file mode 100755 index 0000000..cae6c5d --- /dev/null +++ b/include/libgnulib/signed-nan.h @@ -0,0 +1,138 @@ +/* Macros for quiet not-a-number. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _SIGNED_NAN_H +#define _SIGNED_NAN_H + +#include + +#include "nan.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Returns - x, implemented by inverting the sign bit, + so that it works also on 'float' NaN values. */ +_GL_UNUSED static float +minus_NaNf (float x) +{ +#if defined __mips__ + /* The mips instruction neg.s may have no effect on NaNs. + Therefore, invert the sign bit using integer operations. */ + union { unsigned int i; float value; } u; + u.value = x; + u.i ^= 1U << 31; + return u.value; +#else + return - x; +#endif +} + +/* Returns a quiet 'float' NaN with sign bit == 0. */ +_GL_UNUSED static float +positive_NaNf () +{ + /* 'volatile' works around a GCC bug: + */ + float volatile nan = NaNf (); + return (signbit (nan) ? minus_NaNf (nan) : nan); +} + +/* Returns a quiet 'float' NaN with sign bit == 1. */ +_GL_UNUSED static float +negative_NaNf () +{ + /* 'volatile' works around a GCC bug: + */ + float volatile nan = NaNf (); + return (signbit (nan) ? nan : minus_NaNf (nan)); +} + + +/* Returns - x, implemented by inverting the sign bit, + so that it works also on 'double' NaN values. */ +_GL_UNUSED static double +minus_NaNd (double x) +{ +#if defined __mips__ + /* The mips instruction neg.d may have no effect on NaNs. + Therefore, invert the sign bit using integer operations. */ + union { unsigned long long i; double value; } u; + u.value = x; + u.i ^= 1ULL << 63; + return u.value; +#else + return - x; +#endif +} + +/* Returns a quiet 'double' NaN with sign bit == 0. */ +_GL_UNUSED static double +positive_NaNd () +{ + /* 'volatile' works around a GCC bug: + */ + double volatile nan = NaNd (); + return (signbit (nan) ? minus_NaNd (nan) : nan); +} + +/* Returns a quiet 'double' NaN with sign bit == 1. */ +_GL_UNUSED static double +negative_NaNd () +{ + /* 'volatile' works around a GCC bug: + */ + double volatile nan = NaNd (); + return (signbit (nan) ? nan : minus_NaNd (nan)); +} + + +/* Returns - x, implemented by inverting the sign bit, + so that it works also on 'long double' NaN values. */ +_GL_UNUSED static long double +minus_NaNl (long double x) +{ + return - x; +} + +/* Returns a quiet 'long double' NaN with sign bit == 0. */ +_GL_UNUSED static long double +positive_NaNl () +{ + /* 'volatile' works around a GCC bug: + */ + long double volatile nan = NaNl (); + return (signbit (nan) ? minus_NaNl (nan) : nan); +} + +/* Returns a quiet 'long double' NaN with sign bit == 1. */ +_GL_UNUSED static long double +negative_NaNl () +{ + /* 'volatile' works around a GCC bug: + */ + long double volatile nan = NaNl (); + return (signbit (nan) ? nan : minus_NaNl (nan)); +} + + +#ifdef __cplusplus +} +#endif + +#endif /* _SIGNED_NAN_H */ diff --git a/include/libgnulib/signed-snan.h b/include/libgnulib/signed-snan.h new file mode 100755 index 0000000..7a73ee8 --- /dev/null +++ b/include/libgnulib/signed-snan.h @@ -0,0 +1,150 @@ +/* Macros for signalling not-a-number. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _SIGNED_SNAN_H +#define _SIGNED_SNAN_H + +#include "signed-nan.h" +#include "snan.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#if HAVE_SNANF + +/* Returns a signalling 'float' NaN with sign bit == 0 in memory. */ +_GL_UNUSED static memory_float +memory_positive_SNaNf () +{ + return construct_memory_SNaNf (positive_NaNf ()); +} + +/* Returns a signalling 'float' NaN with sign bit == 1 in memory. */ +_GL_UNUSED static memory_float +memory_negative_SNaNf () +{ + return construct_memory_SNaNf (negative_NaNf ()); +} + +/* Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", the following functions may return a quiet NaN + instead. Use the functions with 'memory_' prefix if you need to avoid this. + See + for details. */ + +/* Returns a signalling 'float' NaN with sign bit == 0. */ +_GL_UNUSED static float +positive_SNaNf () +{ + return memory_positive_SNaNf ().value; +} + +/* Returns a signalling 'float' NaN with sign bit == 1. */ +_GL_UNUSED static float +negative_SNaNf () +{ + return memory_negative_SNaNf ().value; +} + +#endif + + +#if HAVE_SNAND + +/* Returns a signalling 'double' NaN with sign bit == 0 in memory. */ +_GL_UNUSED static memory_double +memory_positive_SNaNd () +{ + return construct_memory_SNaNd (positive_NaNd ()); +} + +/* Returns a signalling 'double' NaN with sign bit == 1 in memory. */ +_GL_UNUSED static memory_double +memory_negative_SNaNd () +{ + return construct_memory_SNaNd (negative_NaNd ()); +} + +/* Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", the following functions may return a quiet NaN + instead. Use the functions with 'memory_' prefix if you need to avoid this. + See + for details. */ + +/* Returns a signalling 'double' NaN with sign bit == 0. */ +_GL_UNUSED static double +positive_SNaNd () +{ + return memory_positive_SNaNd ().value; +} + +/* Returns a signalling 'double' NaN with sign bit == 1. */ +_GL_UNUSED static double +negative_SNaNd () +{ + return memory_negative_SNaNd ().value; +} + +#endif + + +#if HAVE_SNANL + +/* Returns a signalling 'long double' NaN with sign bit == 0 in memory. */ +_GL_UNUSED static memory_long_double +memory_positive_SNaNl () +{ + return construct_memory_SNaNl (positive_NaNl ()); +} + +/* Returns a signalling 'long double' NaN with sign bit == 1 in memory. */ +_GL_UNUSED static memory_long_double +memory_negative_SNaNl () +{ + return construct_memory_SNaNl (negative_NaNl ()); +} + +/* Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE is 1, the + following functions may return a quiet NaN instead. Use the functions + with 'memory_' prefix if you need to avoid this. See + + for details. */ + +/* Returns a signalling 'long double' NaN with sign bit == 0. */ +_GL_UNUSED static long double +positive_SNaNl () +{ + return memory_positive_SNaNl ().value; +} + +/* Returns a signalling 'long double' NaN with sign bit == 1. */ +_GL_UNUSED static long double +negative_SNaNl () +{ + return memory_negative_SNaNl ().value; +} + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _SIGNED_SNAN_H */ diff --git a/include/libgnulib/sigpipe-die.h b/include/libgnulib/sigpipe-die.h new file mode 100755 index 0000000..ee6aa05 --- /dev/null +++ b/include/libgnulib/sigpipe-die.h @@ -0,0 +1,68 @@ +/* Report a SIGPIPE signal and exit. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Bruno Haible , 2008. */ + +/* SIGPIPE is the signal sent to a process calling write() on a pipe with no + readers. Together with the signal, the write() call is terminated with + return value -1, errno = EPIPE. Note that SIGPIPE is a *synchronous* + signal: it occurs only during write(), without delay (unless blocked). + + The default reaction on SIGPIPE, namely terminating the process without + an error message, is suitable for programs which only produce output to + standard output and don't have side effects. + + When a program has side effects, other than writing to standard output, the + suitable behaviour is either + (a) to exit with an error message + or - in certain cases, for example when writing to subprocesses - + (b) to continue the operation without writing to the pipe/socket with + no readers. + + This file provides support for (a). + For (b), the program needs to know which of the output file descriptors + has no readers. This is usually implemented by blocking the SIGPIPE signal + and handling an EPIPE error indicator in all affected library calls + (write(), send(), fwrite(), fflush(), fclose(), etc.). */ + +#ifndef _SIGPIPE_DIE_H +#define _SIGPIPE_DIE_H + +/* This file uses _Noreturn. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Emit an error message indicating a SIGPIPE signal, and terminate the + process with an error code. */ +/*extern*/ _Noreturn void sigpipe_die (void); + +/* Install a SIGPIPE handler that invokes PREPARE_DIE and then emits an + error message and exits. PREPARE_DIE may be NULL, meaning a no-op. */ +extern void install_sigpipe_die_handler (void (*prepare_die) (void)); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _SIGPIPE_DIE_H */ diff --git a/include/libgnulib/simple-atomic.h b/include/libgnulib/simple-atomic.h new file mode 100755 index 0000000..6205c91 --- /dev/null +++ b/include/libgnulib/simple-atomic.h @@ -0,0 +1,49 @@ +/* Simple atomic operations for multithreading. + Copyright (C) 2021-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2021. */ + +#ifndef _SIMPLE_ATOMIC_H +#define _SIMPLE_ATOMIC_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Guarantees that memory stores that are in code before this call + are finished before this call, and that memory loads that are in code + after this call are started after this call. */ +extern void memory_barrier (void); + +/* Stores NEWVAL in *VP if the old value *VP is == CMP. + Returns the old value. */ +extern unsigned int atomic_compare_and_swap (unsigned int volatile *vp, + unsigned int cmp, + unsigned int newval); + +/* Stores NEWVAL in *VP if the old value *VP is == CMP. + Returns the old value. */ +extern uintptr_t atomic_compare_and_swap_ptr (uintptr_t volatile *vp, + uintptr_t cmp, + uintptr_t newval); + +#ifdef __cplusplus +} +#endif + +#endif /* _SIMPLE_ATOMIC_H */ diff --git a/include/libgnulib/size_max.h b/include/libgnulib/size_max.h new file mode 100755 index 0000000..bd2eb43 --- /dev/null +++ b/include/libgnulib/size_max.h @@ -0,0 +1,35 @@ +/* size_max.h -- declare SIZE_MAX through system headers + Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef GNULIB_SIZE_MAX_H +#define GNULIB_SIZE_MAX_H + +/* This file uses HAVE_STDINT_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ +# include +/* Get SIZE_MAX declaration on systems like glibc 2. */ +# if HAVE_STDINT_H +# include +# endif +/* On systems where these include files don't define it, SIZE_MAX is defined + in config.h. */ + +#endif /* GNULIB_SIZE_MAX_H */ diff --git a/include/libgnulib/sm3.h b/include/libgnulib/sm3.h new file mode 100755 index 0000000..216246b --- /dev/null +++ b/include/libgnulib/sm3.h @@ -0,0 +1,133 @@ +/* Declarations of functions and data types used for SM3 sum library + function. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This module can be used to compute SM3 message digest of files or + memory blocks according to the specification GM/T 004-2012 + Cryptographic Hash Algorithm SM3, published by State Cryptography + Administration, China. + + The official SM3 cryptographic hash algorithm specification is + available at + . */ + +#ifndef SM3_H +# define SM3_H 1 + +/* This file uses HAVE_OPENSSL_SM3. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include +# include + +# if HAVE_OPENSSL_SM3 +# ifndef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT 0x10101000L /* FIXME: Use OpenSSL 1.1+ API. */ +# endif +/* If would give a compile-time error, don't use OpenSSL. */ +# include +# if OPENSSL_VERSION_MAJOR >= 3 +# include +# if (OPENSSL_CONFIGURED_API \ + < (OPENSSL_API_COMPAT < 0x900000L ? OPENSSL_API_COMPAT : \ + ((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF))) +# undef HAVE_OPENSSL_SM3 +# endif +# endif +# if HAVE_OPENSSL_SM3 +# include +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +enum { SM3_DIGEST_SIZE = 256 / 8 }; + +# if HAVE_OPENSSL_SM3 +# define GL_OPENSSL_NAME 3 +# include "gl_openssl.h" +# else +/* Structure to save state of computation between the single steps. */ +struct sm3_ctx +{ + uint32_t state[8]; + + uint32_t total[2]; + size_t buflen; /* ≥ 0, ≤ 128 */ + uint32_t buffer[32]; /* 128 bytes; the first buflen bytes are in use */ +}; + +/* Initialize structure containing state of computation. */ +extern void sm3_init_ctx (struct sm3_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is necessary that LEN is a multiple of 64!!! */ +extern void sm3_process_block (const void *buffer, size_t len, + struct sm3_ctx *ctx); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is NOT required that LEN is a multiple of 64. */ +extern void sm3_process_bytes (const void *buffer, size_t len, + struct sm3_ctx *ctx); + +/* Process the remaining bytes in the buffer and put result from CTX + in first 32 bytes following RESBUF. The result is always in little + endian byte order, so that a byte-wise output yields to the wanted + ASCII representation of the message digest. */ +extern void *sm3_finish_ctx (struct sm3_ctx *ctx, void *restrict resbuf); + +/* Put result from CTX in first 32 bytes following RESBUF. The result is + always in little endian byte order, so that a byte-wise output yields + to the wanted ASCII representation of the message digest. */ +extern void *sm3_read_ctx (const struct sm3_ctx *ctx, void *restrict resbuf); + +/* Compute SM3 message digest for LEN bytes beginning at BUFFER. The + result is always in little endian byte order, so that a byte-wise + output yields to the wanted ASCII representation of the message + digest. */ +extern void *sm3_buffer (const char *buffer, size_t len, + void *restrict resblock); + +# endif + +/* Compute SM3 message digest for bytes read from STREAM. The + resulting message digest number will be written into the 32 bytes + beginning at RESBLOCK. */ +extern int sm3_stream (FILE *stream, void *resblock); + + +# ifdef __cplusplus +} +# endif + +#endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/include/libgnulib/snan.h b/include/libgnulib/snan.h new file mode 100755 index 0000000..986dac1 --- /dev/null +++ b/include/libgnulib/snan.h @@ -0,0 +1,289 @@ +/* Macros for signalling not-a-number. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _SNAN_H +#define _SNAN_H + +#include +#include +#include + +#include "nan.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The bit that distinguishes a quiet NaN from a signalling NaN is, according to + , the most significant bit of the + mantissa field. + According to , this is the + next bit, right below the bit 0 of the exponent. + This bit is + * == 0 to indicate a quiet NaN or Infinity, + == 1 to indicate a signalling NaN, + on these CPUs: hppa, mips (*), sh4. + * == 1 to indicate a quiet NaN, + == 0 to indicate a signalling NaN or Infinity, + on all other CPUs. + On these platforms, additionally a signalling NaN must have some other + mantissa bit == 1, because when all exponent bits are == 1 and all + mantissa bits are == 0, the number denotes ±Infinity. + This NaN encoding is specified by IEEE 754-2008 § 6.2.1. + + (*) On mips CPUs, it depends on the CPU model. The classical behaviour is + as indicated above. On some newer models, it's like on the other CPUs. + On some (but not all!) models this meta-info can be determined from two + special CPU registers: If the "Floating Point Implementation Register" (fir) + bit 23, also known as Has2008 bit, is set, the "Floating Point Control and + Status Register" (fcsr) bit 18, also known as the NAN2008 bit, has the value + - 0 for the classical behaviour, + - 1 for like on the other CPUs. + Both of these bits are read-only. + This module has determined the behaviour at configure time and defines the + C macros MIPS_NAN2008_FLOAT, MIPS_NAN2008_DOUBLE, MIPS_NAN2008_LONG_DOUBLE + accordingly. */ + + +/* 'float' = IEEE 754 single-precision + */ + +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; + +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + +# define HAVE_SNANF 1 + +_GL_UNUSED static memory_float +construct_memory_SNaNf (float quiet_value) +{ + memory_float m; + m.value = quiet_value; + /* Turn the quiet NaN into a signalling NaN. */ + #if FLT_EXPBIT0_BIT > 0 + m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); + #else + m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + #endif + /* Set some arbitrary mantissa bit. */ + if (FLT_EXPBIT0_WORD < NWORDS / 2) /* NWORDS > 1 and big endian */ + m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; + else /* NWORDS == 1 or little endian */ + m.word[0] |= (unsigned int) 1; + return m; +} + +/* Returns a signalling 'float' NaN in memory. */ +_GL_UNUSED static memory_float +memory_SNaNf () +{ + return construct_memory_SNaNf (NaNf ()); +} + +_GL_UNUSED static float +construct_SNaNf (float quiet_value) +{ + return construct_memory_SNaNf (quiet_value).value; +} + +/* Returns a signalling 'float' NaN. + Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", this function may return a quiet NaN instead. + Use memory_SNaNf() if you need to avoid this. See + + for details. */ +_GL_UNUSED static float +SNaNf () +{ + return memory_SNaNf ().value; +} + +#endif + +#undef NWORDS + + +/* 'double' = IEEE 754 double-precision + */ + +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; + +#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + +# define HAVE_SNAND 1 + +_GL_UNUSED static memory_double +construct_memory_SNaNd (double quiet_value) +{ + memory_double m; + m.value = quiet_value; + /* Turn the quiet NaN into a signalling NaN. */ + #if DBL_EXPBIT0_BIT > 0 + m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); + #else + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + #endif + /* Set some arbitrary mantissa bit. */ + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << DBL_EXPBIT0_BIT; + return m; +} + +/* Returns a signalling 'double' NaN in memory. */ +_GL_UNUSED static memory_double +memory_SNaNd () +{ + return construct_memory_SNaNd (NaNd ()); +} + +_GL_UNUSED static double +construct_SNaNd (double quiet_value) +{ + return construct_memory_SNaNd (quiet_value).value; +} + +/* Returns a signalling 'double' NaN. + Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", this function may return a quiet NaN instead. + Use memory_SNaNf() if you need to avoid this. See + + for details. */ +_GL_UNUSED static double +SNaNd () +{ + return memory_SNaNd ().value; +} + +#endif + +#undef NWORDS + + +/* 'long double' = + * if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE: + IEEE 754 double-precision + + * Otherwise: + - On i386, x86_64, ia64: + 80-bits extended-precision + + - On alpha, arm64, loongarch64, mips64, riscv64, s390x, sparc64: + IEEE 754 quadruple-precision + + - On powerpc, powerpc64, powerpc64le: + 2x64-bits double-double + + - On m68k: + 80-bits extended-precision, padded to 96 bits, with non-IEEE exponent + */ + +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; + +#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT + +# define HAVE_SNANL 1 + +_GL_UNUSED static memory_long_double +construct_memory_SNaNl (long double quiet_value) +{ + memory_long_double m; + m.value = quiet_value; + #if defined __powerpc__ && LDBL_MANT_DIG == 106 + /* This is PowerPC "double double", a pair of two doubles. Inf and NaN are + represented as the corresponding 64-bit IEEE values in the first double; + the second is ignored. Manipulate only the first double. */ + #define HNWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + #else + #define HNWORDS NWORDS + #endif + /* Turn the quiet NaN into a signalling NaN. */ + #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE + /* In this representation, the leading 1 of the mantissa is explicitly + stored. */ + #if LDBL_EXPBIT0_BIT > 1 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 2); + #else + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 2); + #endif + #elif (defined __m68k__ && LDBL_MANT_DIG == 64) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE + /* In this representation, there is a 16-bits gap between the exponent and + the mantissa, and the leading 1 of the mantissa is explicitly stored. */ + m.word[LDBL_EXPBIT0_WORD + 1] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 2); + #else + /* In this representation, the leading 1 of the mantissa is implicit. */ + #if LDBL_EXPBIT0_BIT > 0 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); + #else + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + #endif + #endif + /* Set some arbitrary mantissa bit. */ + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; + #undef HNWORDS + return m; +} + +/* Returns a signalling 'long double' NaN in memory. */ +_GL_UNUSED static memory_long_double +memory_SNaNl () +{ + return construct_memory_SNaNl (NaNl ()); +} + +_GL_UNUSED static long double +construct_SNaNl (long double quiet_value) +{ + return construct_memory_SNaNl (quiet_value).value; +} + +/* Returns a signalling 'long double' NaN. + Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE is 1, this + function may return a quiet NaN instead. Use memory_SNaNf() if you + need to avoid this. See + + for details. */ +_GL_UNUSED static long double +SNaNl () +{ + return memory_SNaNl ().value; +} + +#endif + +#undef NWORDS + + +#ifdef __cplusplus +} +#endif + +#endif /* _SNAN_H */ diff --git a/include/libgnulib/sockets.h b/include/libgnulib/sockets.h new file mode 100755 index 0000000..55077ae --- /dev/null +++ b/include/libgnulib/sockets.h @@ -0,0 +1,80 @@ +/* sockets.h - wrappers for Windows socket functions + + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Simon Josefsson */ + +#ifndef SOCKETS_H +#define SOCKETS_H 1 + +/* This file uses _GL_ATTRIBUTE_CONST. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define SOCKETS_1_0 0x0001 +#define SOCKETS_1_1 0x0101 +#define SOCKETS_2_0 0x0002 +#define SOCKETS_2_1 0x0102 +#define SOCKETS_2_2 0x0202 + +int gl_sockets_startup (int version) +#ifndef WINDOWS_SOCKETS + _GL_ATTRIBUTE_CONST +#endif + ; + +int gl_sockets_cleanup (void) +#ifndef WINDOWS_SOCKETS + _GL_ATTRIBUTE_CONST +#endif + ; + +#ifdef __cplusplus +} +#endif + + +/* This function is useful it you create a socket using gnulib's + Winsock wrappers but needs to pass on the socket handle to some + other library that only accepts sockets. */ +#ifdef WINDOWS_SOCKETS + +# include + +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif + +static inline SOCKET +gl_fd_to_handle (int fd) +{ + return _get_osfhandle (fd); +} + +#else + +# define gl_fd_to_handle(x) (x) + +#endif /* WINDOWS_SOCKETS */ + +#endif /* SOCKETS_H */ diff --git a/include/libgnulib/spawn-pipe.h b/include/libgnulib/spawn-pipe.h new file mode 100755 index 0000000..1fe07da --- /dev/null +++ b/include/libgnulib/spawn-pipe.h @@ -0,0 +1,171 @@ +/* Creation of subprocesses, communicating via pipes. + Copyright (C) 2001-2003, 2006, 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _SPAWN_PIPE_H +#define _SPAWN_PIPE_H + +/* Get pid_t. */ +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* All these functions create a subprocess and don't wait for its termination. + They return the process id of the subprocess. They also return in fd[] + one or two file descriptors for communication with the subprocess. + If the subprocess creation fails: if exit_on_error is true, the main + process exits with an error message; otherwise, an error message is given + if null_stderr is false, then -1 is returned, with errno set, and fd[] + remain uninitialized. + + After finishing communication, the caller should call wait_subprocess() + to get rid of the subprocess in the process table. + + progname is the name of the program to be executed by the subprocess, used + for error messages. + prog_path is the file name of the program to be executed by the subprocess. + If it contains no slashes, a search is conducted in $PATH. An operating + system dependent suffix is added, if necessary. + prog_argv is the array of strings that the subprocess shall receive in + argv[]. It is a NULL-terminated array. prog_argv[0] should normally be + identical to prog_path. + + dll_dirs is, on Windows platforms, a NULL-terminated list of directories + that contain DLLs needed to execute the program, or NULL if none is needed. + On other platforms, always pass NULL. + + If directory is not NULL, the subprocess is started in that directory. If + prog_path is a relative file name, it resolved before changing to that + directory. The current directory of the current process remains unchanged. + + If slave_process is true, the child process will be terminated when its + creator receives a catchable fatal signal or exits normally. If + slave_process is false, the child process will continue running in this + case, until it is lucky enough to attempt to communicate with its creator + and thus get a SIGPIPE signal. + + If exit_on_error is false, a child process id of -1 should be treated the + same way as a subprocess which accepts no input, produces no output and + terminates with exit code 127. Why? Some errors during posix_spawnp() + cause the function posix_spawnp() to return an error code; some other + errors cause the subprocess to exit with return code 127. It is + implementation dependent which error is reported which way. The caller + must treat both cases as equivalent. + + It is recommended that no signal is blocked or ignored (i.e. have a + signal handler with value SIG_IGN) while any of these functions is called. + The reason is that child processes inherit the mask of blocked signals + from their parent (both through posix_spawn() and fork()/exec()); + likewise, signals ignored in the parent are also ignored in the child + (except possibly for SIGCHLD). And POSIX:2001 says [in the description + of exec()]: + "it should be noted that many existing applications wrongly + assume that they start with certain signals set to the default + action and/or unblocked. In particular, applications written + with a simpler signal model that does not include blocking of + signals, such as the one in the ISO C standard, may not behave + properly if invoked with some signals blocked. Therefore, it is + best not to block or ignore signals across execs without explicit + reason to do so, and especially not to block signals across execs + of arbitrary (not closely co-operating) programs." */ + +/* Open a pipe for output to a child process. + * The child's stdout goes to a file. + * + * write system read + * parent -> fd[0] -> STDIN_FILENO -> child + * + * Note: When writing to a child process, it is useful to ignore the SIGPIPE + * signal and the EPIPE error code. + */ +extern pid_t create_pipe_out (const char *progname, + const char *prog_path, + const char * const *prog_argv, + const char * const *dll_dirs, + const char *directory, + const char *prog_stdout, bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[1]); + +/* Open a pipe for input from a child process. + * The child's stdin comes from a file. + * + * read system write + * parent <- fd[0] <- STDOUT_FILENO <- child + * + */ +extern pid_t create_pipe_in (const char *progname, + const char *prog_path, + const char * const *prog_argv, + const char * const *dll_dirs, + const char *directory, + const char *prog_stdin, bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[1]); + +/* Open a bidirectional pipe. + * + * write system read + * parent -> fd[1] -> STDIN_FILENO -> child + * parent <- fd[0] <- STDOUT_FILENO <- child + * read system write + * + * Note: When writing to a child process, it is useful to ignore the SIGPIPE + * signal and the EPIPE error code. + * + * Note: The parent process must be careful to avoid deadlock. + * 1) If you write more than PIPE_MAX bytes or, more generally, if you write + * more bytes than the subprocess can handle at once, the subprocess + * may write its data and wait on you to read it, but you are currently + * busy writing. + * 2) When you don't know ahead of time how many bytes the subprocess + * will produce, the usual technique of calling read (fd, buf, BUFSIZ) + * with a fixed BUFSIZ will, on Linux 2.2.17 and on BSD systems, cause + * the read() call to block until *all* of the buffer has been filled. + * But the subprocess cannot produce more data until you gave it more + * input. But you are currently busy reading from it. + */ +extern pid_t create_pipe_bidi (const char *progname, + const char *prog_path, + const char * const *prog_argv, + const char * const *dll_dirs, + const char *directory, + bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[2]); + +/* The name of the "always silent" device. */ +#if defined _WIN32 && ! defined __CYGWIN__ +/* Native Windows API. */ +# define DEV_NULL "NUL" +#else +/* Unix API. */ +# define DEV_NULL "/dev/null" +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _SPAWN_PIPE_H */ diff --git a/include/libgnulib/spawn_int.h b/include/libgnulib/spawn_int.h new file mode 100755 index 0000000..021d2ad --- /dev/null +++ b/include/libgnulib/spawn_int.h @@ -0,0 +1,72 @@ +/* Copyright (C) 2000, 2008-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Data structure to contain the action information. */ +struct __spawn_action +{ + enum + { + spawn_do_close, + spawn_do_dup2, + spawn_do_open, + spawn_do_chdir, + spawn_do_fchdir + } tag; + + union + { + struct + { + int fd; + } close_action; + struct + { + int fd; + int newfd; + } dup2_action; + struct + { + int fd; + char *path; + int oflag; + mode_t mode; + } open_action; + struct + { + char *path; + } chdir_action; + struct + { + int fd; + } fchdir_action; + } action; +}; + +#if !_LIBC +# define __posix_spawn_file_actions_realloc gl_posix_spawn_file_actions_realloc +#endif +extern int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t * + file_actions); + +#if !_LIBC +# define __spawni gl_posix_spawn_internal +#endif +extern int __spawni (pid_t *pid, const char *path, + const posix_spawn_file_actions_t *file_actions, + const posix_spawnattr_t *attrp, const char *const argv[], + const char *const envp[], int use_path); diff --git a/include/libgnulib/ssfmalloc-bitmap.h b/include/libgnulib/ssfmalloc-bitmap.h new file mode 100755 index 0000000..7fb6498 --- /dev/null +++ b/include/libgnulib/ssfmalloc-bitmap.h @@ -0,0 +1,629 @@ +/* Simple and straight-forward malloc implementation (front end). + + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +/* ===================== Low-level functions for bitmaps ==================== */ + +/* A bitmap is represented as an array of uint32_t = 'unsigned int', each with + 32 bits. The bit i in the word with index j therefore represents bit + k = 32 * j + i of the entire bit sequence. */ + +/* Initializes a bitmap. */ +static inline void +init_bitmap_all_bits_clear (size_t num_words, uint32_t *words) +{ + size_t i; + for (i = 0; i < num_words; i++) + words[i] = 0; +} + +/* Initializes a bitmap. */ +static inline void +init_bitmap_all_bits_set (size_t num_words, uint32_t *words) +{ + size_t i; + for (i = 0; i < num_words; i++) + words[i] = ~(uint32_t)0; +} + +/* Returns the smallest index k >= k0 for which the bit k is set in the bitmap + consisting of num_words words. Returns (size_t)(-1) if there is none. */ +static size_t +find_first_bit_set (size_t num_words, const uint32_t *words, size_t k0) +{ + size_t j0 = k0 / 32; + if (j0 < num_words) + { + size_t i0 = k0 % 32; + const uint32_t *ptr = words + j0; + /* Look at the word j0, ignoring the i0 least significant bits. */ + { + size_t found = ffs (*ptr & (-1U << i0)); + if (found > 0) + return 32 * j0 + (found - 1); + } + /* Look at the subsequent words. */ + const uint32_t *words_end = words + num_words; + while (++ptr < words_end) + { + size_t found = ffs (*ptr); + if (found > 0) + return 32 * (ptr - words) + (found - 1); + } + } + return (size_t)(-1); +} + +/* Returns the smallest index k >= 0 for which the bit packet of c consecutive + bits (1 <= c <= 32) is all set in the bitmap consisting of num_words words. + Returns (size_t)(-1) if there is none. */ +static size_t +find_first_packet_set (size_t num_words, const uint32_t *words, size_t c) +{ + const uint32_t *ptr = words; + const uint32_t *words_end = words + num_words; + switch (c) + { + case 1: + { + /* A simplified variant of find_first_bit_set. */ + for (; ptr < words_end; ptr++) + { + size_t found = ffs (*ptr); + if (found > 0) + return 32 * (ptr - words) + (found - 1); + } + return (size_t)(-1); + } + case 2: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t combined = longword & (longword >> 1); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 3: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t combined = longword & (longword >> 1) & (longword >> 2); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 4: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t combined = tmp1 & (tmp1 >> 2); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 5: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t combined = tmp2 & (longword >> 4); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 6: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t combined = tmp1 & (tmp1 >> 2) & (tmp1 >> 4); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 7: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t combined = + tmp1 & (tmp1 >> 2) & (tmp1 >> 4) & (longword >> 6); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 8: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t combined = tmp2 & (tmp2 >> 4); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 9: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t combined = tmp3 & (longword >> 8); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 10: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t combined = tmp3 & (tmp1 >> 8); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 11: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t combined = tmp3 & (tmp1 >> 8) & (longword >> 10); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 12: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t combined = tmp2 & (tmp2 >> 4) & (tmp2 >> 8); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 13: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t combined = + tmp2 & (tmp2 >> 4) & (tmp2 >> 8) & (longword >> 12); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 14: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t combined = tmp2 & (tmp2 >> 4) & (tmp2 >> 8) & (tmp1 >> 12); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 15: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + /* Optimized: Use 5, not 6, '&' operations. */ + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (longword >> 4); + uint64_t combined = tmp3 & (tmp3 >> 5) & (tmp3 >> 10); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 16: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t combined = tmp3 & (tmp3 >> 8); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 17: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp3 >> 8); + uint64_t combined = tmp4 & (longword >> 16); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 18: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp3 >> 8); + uint64_t combined = tmp4 & (tmp1 >> 16); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 19: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp3 >> 8); + uint64_t combined = tmp4 & (tmp1 >> 16) & (longword >> 18); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 20: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp3 >> 8); + uint64_t combined = tmp4 & (tmp2 >> 16); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 21: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp3 >> 8); + uint64_t combined = tmp4 & (tmp2 >> 16) & (longword >> 20); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 22: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp3 >> 8); + uint64_t combined = tmp4 & (tmp2 >> 16) & (tmp1 >> 20); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 23: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp3 >> 8); + uint64_t combined = + tmp4 & (tmp2 >> 16) & (tmp1 >> 20) & (longword >> 22); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 24: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t combined = tmp3 & (tmp3 >> 8) & (tmp3 >> 16); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 25: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t combined = + tmp3 & (tmp3 >> 8) & (tmp3 >> 16) & (longword >> 24); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 26: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t combined = + tmp3 & (tmp3 >> 8) & (tmp3 >> 16) & (tmp1 >> 24); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 27: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + /* Optimized: Use 6, not 7, '&' operations. */ + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (longword >> 8); + uint64_t combined = tmp4 & (tmp4 >> 9) & (tmp4 >> 18); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 28: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t combined = + tmp3 & (tmp3 >> 8) & (tmp3 >> 16) & (tmp2 >> 24); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 29: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t combined = + tmp3 & (tmp3 >> 8) & (tmp3 >> 16) & (tmp2 >> 24) & (longword >> 28); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 30: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + /* Optimized: Use 6, not 7, '&' operations. */ + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp1 >> 8); + uint64_t combined = tmp4 & (tmp4 >> 10) & (tmp4 >> 20); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 31: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp3 >> 8); + uint64_t combined = + tmp4 & (tmp3 >> 16) & (tmp2 >> 24) & (tmp1 >> 28) & (longword >> 30); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + case 32: + { + while (ptr < words_end) + { + uint64_t longword = *ptr++; + if (likely (ptr < words_end)) + longword |= ((uint64_t) *ptr) << 32; + uint64_t tmp1 = longword & (longword >> 1); + uint64_t tmp2 = tmp1 & (tmp1 >> 2); + uint64_t tmp3 = tmp2 & (tmp2 >> 4); + uint64_t tmp4 = tmp3 & (tmp3 >> 8); + uint64_t combined = tmp4 & (tmp4 >> 16); + size_t found = ffsll (combined); + if (found > 0) + return 32 * (ptr - 1 - words) + (found - 1); + } + return (size_t)(-1); + } + default: + /* Invalid argument. */ + abort (); + } +} diff --git a/include/libgnulib/ssfmalloc.h b/include/libgnulib/ssfmalloc.h new file mode 100755 index 0000000..6fe3a24 --- /dev/null +++ b/include/libgnulib/ssfmalloc.h @@ -0,0 +1,976 @@ +/* Simple and straight-forward malloc implementation (front end). + + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +/* This file implements an allocator of memory blocks of given size (a + "malloc front end"), based on an allocator of memory pages (a "malloc + back end"). + + The need for such an allocator arises because a memory block is often + 50 bytes large or less, whereas an allocator of memory pages provides + entire pages (4096 bytes or more). + + This implementation attempts to be + - simple and straight-forward, + - respecting locality of reference, + - usable for small allocations, + - nevertheless of reasonable speed. + + Simple and straight-forward - means that it contains only a small amount + of code (compared to e.g. tcmalloc). + + Respecting locality of reference - means that searching for a free block + will not follow lists of pointers that touch unrelated cache lines in + the same page or even unrelated memory pages, because that would cause + cache misses or even swapping in of unrelated memory pages. + + Usable for small allocations - means that it can be used for data types + with few instances. It does not, unlike some other malloc implementations, + allocate 256 KB of memory up-front. Nor does it allocate memory pages + per thread. + + Reasonable speed is nevertheless guaranteed by + - choosing algorithms that lead to little fragmentation, + - small caches where they make sense. + */ + +/* The user of this file needs to define the following macros before including + this file: + + PAGESIZE A variable-like macro of type intptr_t or uintptr_t + that evaluates to the memory page size (>= 4096). + + PAGESIZE_MAX A constant that specifies an upper bound for PAGESIZE. + + ALLOC_PAGES A function-like macro with the signature + uintptr_t ALLOC_PAGES (size_t size) + where the argument size is > 0 and a multiple of the + PAGESIZE. It returns a multiple of PAGESIZE, or 0 + upon failure. + + FREE_PAGES A function-like macro with the signature + void FREE_PAGES (uintptr_t pages, size_t size) + where pages is a non-zero value returned by + ALLOC_PAGES (size). + + ALIGNMENT A constant that specifies the desired alignment of all + the returned memory blocks. Possible values are the + powers of 2, from sizeof (void *) to 32. + + PAGE_RESERVED_HEADER_SIZE A constant, either 0 or a multiple of + sizeof (void *), that denotes the size of a reserved + header - not to be used by the application - at the + beginning of a page sequence returned by ALLOC_PAGES. + */ + +/* This file uses _GL_CMP. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* =================== Declarations of exported functions =================== */ + +#include + +/* Allocates a block of memory, aligned to ALIGNMENT bytes. + Returns 0 upon failure. */ +static uintptr_t allocate_block (size_t size); + +/* Frees a block of memory, returned by allocate_block. */ +static void free_block (uintptr_t block); + +/* ============================= Implementation ============================= */ + +/* Outline of the implementation decisions (ID): + + * ID: This implementation considers three types of blocks: + - small blocks - these are allocated in "small block" pages. + - medium blocks - these are allocated in "medium block" pages. + - large blocks - these are allocated individually, with a page or + sequence of pages uniquely for this block. + * Rationale: + - Most memory allocations are small (e.g. <= 32 bytes); this is a lesson + learned from xc/programs/Xserver/os/xalloc.c (1997) [Pascal Haible]. + - Fragmentation is one of the biggest problems, and keeping large + blocks and small blocks separate from medium blocks is one way to + control it. + + * ID: If an allocation succeeds in one page, the next allocation (of the + same type of block) will try to use the same page. + * Rationale: Locality of reference. + + * ID: Pages of small or medium blocks have their management data structures + concentrated at the beginning of the page. No chained lists that force + to walk through the page. + * Rationale: Locality of reference. + + * ID: Across pages, the management of the free space is done through data + structures outside the pages. No chained lists across pages. + * Rationale: Locality of reference. + + */ + +#include +#include /* ffsll */ +#include /* ffs */ +#include "flexmember.h" +#include "glthread/lock.h" +#include "thread-optim.h" +#include "gl_oset.h" +#include "gl_rbtree_oset.h" +#ifdef __CHERI_PURE_CAPABILITY__ +# include +#endif + +/* Help the branch prediction. */ +#if __GNUC__ >= 3 +# define likely(cond) __builtin_expect ((cond), 1) +# define unlikely(cond) __builtin_expect ((cond), 0) +#else +# define likely(cond) (cond) +# define unlikely(cond) (cond) +#endif + +enum { small_page_type = 1, medium_page_type = 2, large_page_type = 3 }; + +/* Header of a page of small or medium blocks or of a large block. + Lies at an address that is a multiple of PAGESIZE. */ +struct any_page_header +{ + #if PAGE_RESERVED_HEADER_SIZE > 0 + void * reserved[PAGE_RESERVED_HEADER_SIZE / sizeof (void *)]; + #endif + /* small_page_type or medium_page_type or large_page_type */ + unsigned char page_type; +}; + +/* ========================= Small and medium blocks ======================== */ + +/* An integer type, capable of holding the values 0 .. PAGESIZE. */ +#if PAGESIZE_MAX >= 0x10000 +typedef unsigned int pg_offset_t; +#else +typedef unsigned short pg_offset_t; +#endif + +/* Tree element that corresponds to a page. + These tree elements are allocated via malloc(). */ +struct page_tree_element +{ + uintptr_t page; + pg_offset_t free_space; +}; + +/* Header of a page of small or medium blocks. + Lies at an address that is a multiple of PAGESIZE. */ +struct dissected_page_header +{ + struct any_page_header common; + #ifdef __CHERI_PURE_CAPABILITY__ + /* This page, with bounds [page, page + PAGESIZE). */ + uintptr_t whole_page; + #endif + /* Amount of free space in this page. Always a multiple of ALIGNMENT. */ + pg_offset_t free_space; + /* The tree element. */ + struct page_tree_element *tree_element; +}; + +/* Data structure for managing a pool of pages. */ +struct page_pool +{ + /* Methods. */ + void (*init_page_pool) (struct page_pool *pool); + void (*init_page) (uintptr_t page); + uintptr_t (*allocate_block_in_page) (size_t size, uintptr_t page); + void (*free_block_in_page) (uintptr_t block, uintptr_t page); + + /* Maximum free space in a page of this pool. */ + size_t page_capacity; + + /* Page that provided the last successful allocation from this pool, + or 0. */ + uintptr_t last_page; + + /* Ordered set of managed pages, sorted according to free_space, in ascending + order. */ + gl_oset_t /* */ managed_pages; + + /* A queue of pages which have a modified free_space but which have not been + updated in the managed_pages tree so far. */ + #define UPDATE_QUEUE_SIZE 10 + unsigned int update_queue_count; /* <= UPDATE_QUEUE_SIZE */ + uintptr_t update_queue[UPDATE_QUEUE_SIZE]; + + /* A page that could be freed. + We don't free it immediately, so that on allocation/deallocation + pattern like + 2x allocate, 2x free, 2x allocate, 2x free, 2x allocate, 2x free, ... + will not allocate and free a page so frequently. */ + uintptr_t freeable_page; +}; + +/* Comparison function for managed_pages. */ +static int +compare_pages_by_free_space (const void *elt1, const void *elt2) +{ + struct page_tree_element *element1 = (struct page_tree_element *) elt1; + struct page_tree_element *element2 = (struct page_tree_element *) elt2; + int cmp = _GL_CMP (element1->free_space, element2->free_space); + if (unlikely (cmp == 0)) + cmp = _GL_CMP (element1->page, element2->page); + return cmp; +} + +/* Tests whether the free space in a tree element is greater or equal than the + given threshold. */ +static bool +page_free_space_is_at_least (const void *elt, const void *threshold) +{ + struct page_tree_element *element = (struct page_tree_element *) elt; + + return element->free_space >= (uintptr_t) threshold; +} + +/* Updates the free space of a 'struct page_tree_element *'. + Only to be called through gl_oset_update! */ +static void +set_free_space (const void *elt, void *action_data) +{ + struct page_tree_element *element = (struct page_tree_element *) elt; + + element->free_space = (pg_offset_t) (uintptr_t) action_data; +} + +/* Executes the pending updates in the managed_pages tree. */ +static void +flush_all_updates (struct page_pool *pool) +{ + size_t count = pool->update_queue_count; + while (likely (count > 0)) + { + --count; + uintptr_t page = pool->update_queue[count]; + struct dissected_page_header *pageptr = + (struct dissected_page_header *) page; + struct page_tree_element *tree_element = pageptr->tree_element; + if (gl_oset_update (pool->managed_pages, tree_element, + set_free_space, + (void *) (uintptr_t) pageptr->free_space) + < 0) + /* A collision was found. This contradicts the definition of + compare_pages_by_free_space. */ + abort (); + } + pool->update_queue_count = 0; +} + +/* Adds a page to the update queue. + This function has to be called when the free_space of the page has + changed. */ +static inline void +add_update (uintptr_t page, struct page_pool *pool) +{ + size_t count = pool->update_queue_count; + size_t i; + for (i = 0; i < count; i++) + if (pool->update_queue[i] == page) + /* It's already in the queue. */ + return; + + /* Ensure there is room for adding one more page to the update queue. */ + if (unlikely (count == UPDATE_QUEUE_SIZE)) + flush_all_updates (pool); + + /* Add it to the update queue. */ + pool->update_queue[pool->update_queue_count++] = page; +} + +/* Drops a page from the update queue. */ +static inline void +drop_update (uintptr_t page, struct page_pool *pool) +{ + size_t count = pool->update_queue_count; + size_t i; + for (i = 0; i < count; i++) + if (pool->update_queue[i] == page) + { + /* It's in the queue. Remove it. */ + for (i = i + 1; i < count; i++) + pool->update_queue[i - 1] = pool->update_queue[i]; + pool->update_queue_count--; + return; + } +} + +/* ============================== Small blocks ============================== */ + +#include "ssfmalloc-bitmap.h" + +/* Maximum size of a small block. + Must be a power of 2. */ +#define SMALL_BLOCK_MAX_SIZE (ALIGNMENT < 8 ? 32 * ALIGNMENT : 256) + +/* Number of rows of ALIGNMENT bytes available in an empty page. */ +static unsigned int small_block_page_num_bits; +/* Offset in the page where the memory blocks start. + A multiple of ALIGNMENT. */ +static unsigned int small_block_page_blocks_start; +/* Number of uint32_t words in each of the two bitmaps. */ +static unsigned int small_block_page_num_bitmap_words; + +/* Header of a page of small blocks. + Lies at an address that is a multiple of PAGESIZE. */ +struct small_page_header +{ + struct dissected_page_header common; + /* Two bitmaps, each with small_block_page_num_bitmap_words words. In each + a bit represents ALIGNMENT bytes. + - available_bitmap: bit set means available, bit clear means allocated. + - blockend_bitmap: bit set means the an allocated block ends here. */ + uint32_t bitmap_words[FLEXIBLE_ARRAY_MEMBER]; +}; + +static inline uint32_t * +small_block_page_available_bitmap (struct small_page_header *pageptr) +{ + return &pageptr->bitmap_words[0]; +} + +static inline uint32_t * +small_block_page_blockend_bitmap (struct small_page_header *pageptr) +{ + return &pageptr->bitmap_words[small_block_page_num_bitmap_words]; +} + +static void +init_small_block_page_pool (struct page_pool *pool) +{ + /* How many usable rows of ALIGNMENT bytes can we have? + Each takes ALIGNMENT bytes + 1/8 byte in each bitmap, so approximately + (ALIGNMENT + 1/4) bytes. */ + unsigned int num_bits = (unsigned int) (4 * PAGESIZE) / (4 * ALIGNMENT + 1); + unsigned int num_bitmap_words; + unsigned int blocks_start; + /* Iterate until it converges. */ + for (;;) + { + num_bitmap_words = (num_bits + 32 - 1) / 32; + blocks_start = + (FLEXNSIZEOF (struct small_page_header, bitmap_words, + 2 * num_bitmap_words) + + ALIGNMENT - 1) & -ALIGNMENT; + unsigned int num_bits_r = (unsigned int) (PAGESIZE - blocks_start) / ALIGNMENT; + if (num_bits_r >= num_bits) + break; + num_bits = num_bits_r; + } + + small_block_page_num_bits = num_bits; + small_block_page_num_bitmap_words = num_bitmap_words; + small_block_page_blocks_start = blocks_start; + + pool->page_capacity = small_block_page_num_bits * ALIGNMENT; +} + +static void +init_small_block_page (uintptr_t page) +{ + struct small_page_header *pageptr = (struct small_page_header *) page; + pageptr->common.common.page_type = small_page_type; + #ifdef __CHERI_PURE_CAPABILITY__ + pageptr->common.whole_page = page; + #endif + + /* Initialize available_bitmap. */ + uint32_t *available_bitmap = small_block_page_available_bitmap (pageptr); + init_bitmap_all_bits_set (small_block_page_num_bitmap_words, + available_bitmap); + if ((small_block_page_num_bits % 32) != 0) + available_bitmap[small_block_page_num_bitmap_words - 1] = + (1U << (small_block_page_num_bits % 32)) - 1; + + /* Initialize blockend_bitmap. */ + init_bitmap_all_bits_clear (small_block_page_num_bitmap_words, + small_block_page_blockend_bitmap (pageptr)); + + pageptr->common.free_space = small_block_page_num_bits * ALIGNMENT; +} + +/* Allocates a block of memory of size <= SMALL_BLOCK_MAX_SIZE, + aligned to ALIGNMENT bytes, from the given page. + Returns 0 upon failure. */ +static uintptr_t +allocate_small_block_in_page (size_t size, uintptr_t page) +{ + struct small_page_header *pageptr = (struct small_page_header *) page; + + /* glibc compatible. */ + if (size == 0) + size = 1; + + /* Number of consecutive bits to look for in the bitmap. */ + size_t c = (size + ALIGNMENT - 1) / ALIGNMENT; + + /* SMALL_BLOCK_MAX_SIZE has been chosen so that c <= 32. */ + if (!(c > 0 && c <= 32)) + abort (); + + uint32_t *available_bitmap = small_block_page_available_bitmap (pageptr); + size_t k = find_first_packet_set (small_block_page_num_bitmap_words, + available_bitmap, + c); + if (unlikely (k == (size_t)(-1))) + /* Failed to find c consecutive available rows of ALIGNMENT bytes each. */ + return 0; + + uint32_t *blockend_bitmap = small_block_page_blockend_bitmap (pageptr); + size_t j = k / 32; + size_t i = k % 32; + if (i + c <= 32) + { + available_bitmap[j] &= ~(((2U << (c - 1)) - 1) << i); + blockend_bitmap[j] |= (1U << (i + c - 1)); + } + else + { + available_bitmap[j] &= ~(-1U << i); + available_bitmap[j + 1] &= ~((1U << (i + c - 32)) - 1); + blockend_bitmap[j + 1] |= (1U << (i + c - 1 - 32)); + } + + pageptr->common.free_space -= c * ALIGNMENT; + + return page + small_block_page_blocks_start + k * ALIGNMENT; +} + +static void +free_small_block_in_page (uintptr_t block, uintptr_t page) +{ + struct small_page_header *pageptr = (struct small_page_header *) page; + + if (!(block >= page + small_block_page_blocks_start + && (block % ALIGNMENT) == 0)) + /* Invalid argument. */ + abort (); + + uint32_t *available_bitmap = small_block_page_available_bitmap (pageptr); + uint32_t *blockend_bitmap = small_block_page_blockend_bitmap (pageptr); + + /* The bit that corresponds to where the block starts. */ + size_t k = (block - page - small_block_page_blocks_start) / ALIGNMENT; + /* The bit that corresponds to where the block ends. */ + size_t ke = find_first_bit_set (small_block_page_num_bitmap_words, + blockend_bitmap, + k); + if (/* ke == (size_t)(-1) || */ ke >= k + 32) + /* Invalid argument or invalid state. */ + abort (); + + /* Number of consecutive bits to manipulate in the bitmap. */ + size_t c = ke - k + 1; + + size_t j = k / 32; + size_t i = k % 32; + if (i + c <= 32) + { + available_bitmap[j] |= (((2U << (c - 1)) - 1) << i); + blockend_bitmap[j] &= ~(1U << (i + c - 1)); + } + else + { + available_bitmap[j] |= (-1U << i); + available_bitmap[j + 1] |= ((1U << (i + c - 32)) - 1); + blockend_bitmap[j + 1] &= ~(1U << (i + c - 1 - 32)); + } + + pageptr->common.free_space += c * ALIGNMENT; +} + +/* Management of pages of small blocks. */ +struct page_pool small_block_pages = + { + init_small_block_page_pool, + init_small_block_page, + allocate_small_block_in_page, + free_small_block_in_page + }; + +/* ============================== Medium blocks ============================= */ + +/* A range of memory in a page. + It covers the address range [page+start, page+end). + start <= end. */ +struct memory_range +{ + pg_offset_t start; + pg_offset_t end; +}; + +/* Header of a page of medium blocks. + Lies at an address that is a multiple of PAGESIZE. */ +struct medium_page_header +{ + struct dissected_page_header common; + /* If n blocks are allocated, there are n+1 gaps before, between, and + after them. Keep them in an array, sorted in ascending order. */ + unsigned int num_gaps; /* > 0 */ + struct memory_range gaps[FLEXIBLE_ARRAY_MEMBER /* PAGESIZE / SMALL_BLOCK_MAX_SIZE + 1 */]; +}; + +#define MEDIUM_BLOCKS_PAGE_MAX_GAPS \ + (PAGESIZE / SMALL_BLOCK_MAX_SIZE + 1) +#define MEDIUM_BLOCKS_PAGE_FIRST_GAP_START \ + ((FLEXSIZEOF (struct medium_page_header, gaps, \ + MEDIUM_BLOCKS_PAGE_MAX_GAPS * sizeof (struct memory_range)) \ + + ALIGNMENT - 1) & -ALIGNMENT) +#define MEDIUM_BLOCKS_PAGE_LAST_GAP_END \ + PAGESIZE +#define MEDIUM_BLOCKS_PAGE_CAPACITY \ + (MEDIUM_BLOCKS_PAGE_LAST_GAP_END - MEDIUM_BLOCKS_PAGE_FIRST_GAP_START) + +static void +init_medium_block_page_pool (struct page_pool *pool) +{ + pool->page_capacity = MEDIUM_BLOCKS_PAGE_CAPACITY; +} + +static void +init_medium_block_page (uintptr_t page) +{ + struct medium_page_header *pageptr = (struct medium_page_header *) page; + pageptr->common.common.page_type = medium_page_type; + #ifdef __CHERI_PURE_CAPABILITY__ + pageptr->common.whole_page = page; + #endif + pageptr->num_gaps = 1; + pageptr->gaps[0].start = MEDIUM_BLOCKS_PAGE_FIRST_GAP_START; + pageptr->gaps[0].end = MEDIUM_BLOCKS_PAGE_LAST_GAP_END; + pageptr->common.free_space = MEDIUM_BLOCKS_PAGE_CAPACITY; +} + +/* Allocates a block of memory of size > SMALL_BLOCK_MAX_SIZE, + aligned to ALIGNMENT bytes, from the given page. + Returns 0 upon failure. */ +static uintptr_t +allocate_medium_block_in_page (size_t size, uintptr_t page) +{ + struct medium_page_header *pageptr = (struct medium_page_header *) page; + + /* Walk through the gaps and remember the smallest gap of at least + the given size. */ + size_t best_i = (size_t)(-1); + size_t best_length = (size_t)(-1); + size_t num_gaps = pageptr->num_gaps; + size_t i; + for (i = 0; i < num_gaps; i++) + { + size_t length = pageptr->gaps[i].end - pageptr->gaps[i].start; + if (length >= size) + { + /* Found a gap of sufficient size. */ + if (length < best_length) + { + best_i = i; + best_length = length; + } + } + } + if (unlikely (best_i == (size_t)(-1))) + /* Failed to find a gap of sufficient size. */ + return 0; + + size_t aligned_size = (size + ALIGNMENT - 1) & -ALIGNMENT; + + if (pageptr->common.free_space < aligned_size) + /* Invalid state: Less free space than expected. */ + abort (); + + /* Split the gap, leaving an empty gap and a remaining gap. */ + for (i = num_gaps - 1; ; i--) + { + pageptr->gaps[i + 1] = pageptr->gaps[i]; + if (i == best_i) + break; + } + size_t result = pageptr->gaps[best_i].start; + pageptr->gaps[best_i].end = result; + pageptr->gaps[best_i + 1].start = result + aligned_size; + pageptr->num_gaps = num_gaps + 1; + if (pageptr->num_gaps > PAGESIZE / SMALL_BLOCK_MAX_SIZE + 1) + /* Invalid state: More gaps than expected. */ + abort (); + + pageptr->common.free_space -= aligned_size; + + return page + result; +} + +static void +free_medium_block_in_page (uintptr_t block, uintptr_t page) +{ + struct medium_page_header *pageptr = (struct medium_page_header *) page; + size_t offset = block - page; + + /* Search for the gap that ends where this block begins. + We can ignore the last gap here, since it ends where the page ends. */ + struct memory_range *gaps = pageptr->gaps; + size_t lo = 0; + size_t hi = pageptr->num_gaps - 1; + size_t index; + while (lo < hi) + { + /* Invariant: + for i < lo, gaps[i].end < offset, + for i >= hi, gaps[i].end > offset. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + if (offset > gaps[mid].end) + lo = mid + 1; + else if (offset < gaps[mid].end) + hi = mid; + else + { + /* Found it: offset == gaps[mid].end. */ + index = mid; + goto found; + } + } + /* Invalid argument: block is not the start of a currently allocated + block. */ + abort (); + + found: + /* Here 0 <= index < pageptr->num_gaps - 1. + Combine the gaps index and index+1. */ + pageptr->common.free_space += gaps[index + 1].start - gaps[index].end; + if (pageptr->common.free_space < gaps[index + 1].start - gaps[index].end) + /* Wrap around. */ + abort (); + + gaps[index].end = gaps[index + 1].end; + + size_t num_gaps = pageptr->num_gaps - 1; + size_t i; + for (i = index + 1; i < num_gaps; i++) + gaps[i] = gaps[i + 1]; + pageptr->num_gaps = num_gaps; +} + +/* Management of pages of medium blocks. */ +struct page_pool medium_block_pages = + { + init_medium_block_page_pool, + init_medium_block_page, + allocate_medium_block_in_page, + free_medium_block_in_page + }; + +/* ==================== Pages of small and medium blocks ==================== */ + +/* Allocates a block of memory from the given pool, aligned to ALIGNMENT bytes. + Returns 0 upon failure. */ +static inline uintptr_t +allocate_block_from_pool (size_t size, struct page_pool *pool) +{ + uintptr_t page; + + /* Try in the last used page first. */ + page = pool->last_page; + if (likely (page != 0)) + { + uintptr_t block = pool->allocate_block_in_page (size, page); + if (likely (block != 0)) + { + add_update (page, pool); + return block; + } + } + + /* Ensure that the pool and its managed_pages is initialized. */ + if (unlikely (pool->managed_pages == NULL)) + { + pool->managed_pages = + gl_oset_nx_create_empty (GL_RBTREE_OSET, compare_pages_by_free_space, NULL); + if (unlikely (pool->managed_pages == NULL)) + /* Could not allocate the managed_pages. */ + return 0; + pool->init_page_pool (pool); + } + + /* Ensure that managed_pages is up-to-date. */ + flush_all_updates (pool); + + /* Try in the other managed_pages. */ + { + gl_oset_iterator_t iter = + gl_oset_iterator_atleast (pool->managed_pages, + page_free_space_is_at_least, + (void *) (uintptr_t) size); + const void *elt; + while (gl_oset_iterator_next (&iter, &elt)) + { + struct page_tree_element *element = (struct page_tree_element *) elt; + page = element->page; + /* No need to try the last used page again. */ + if (likely (page != pool->last_page)) + { + uintptr_t block = pool->allocate_block_in_page (size, page); + if (likely (block != 0)) + { + gl_oset_iterator_free (&iter); + add_update (page, pool); + pool->last_page = page; + return block; + } + } + } + gl_oset_iterator_free (&iter); + } + + /* If we have a freeable page ready for reuse, use it. */ + if (pool->freeable_page != 0) + { + page = pool->freeable_page; + pool->init_page (page); + struct page_tree_element *element = + (struct page_tree_element *) malloc (sizeof (struct page_tree_element)); + if (unlikely (element == NULL)) + { + /* Could not allocate the tree element. */ + pool->last_page = 0; + return 0; + } + element->page = page; + element->free_space = ((struct dissected_page_header *) page)->free_space; + if (unlikely (gl_oset_nx_add (pool->managed_pages, element) < 0)) + { + /* Could not allocate the tree node. */ + free (element); + pool->last_page = 0; + return 0; + } + ((struct dissected_page_header *) page)->tree_element = element; + pool->freeable_page = 0; + + uintptr_t block = pool->allocate_block_in_page (size, page); + if (block == 0) + /* If the size is too large for an empty page, this function should not + have been invoked. */ + abort (); + add_update (page, pool); + pool->last_page = page; + return block; + } + + /* Allocate a fresh page. */ + page = ALLOC_PAGES (PAGESIZE); + if (unlikely (page == 0)) + { + /* Failed. */ + pool->last_page = 0; + return 0; + } + if ((page & (PAGESIZE - 1)) != 0) + /* ALLOC_PAGES's result is not aligned as expected. */ + abort (); + + pool->init_page (page); + struct page_tree_element *element = + (struct page_tree_element *) malloc (sizeof (struct page_tree_element)); + if (unlikely (element == NULL)) + { + /* Could not allocate the tree element. */ + FREE_PAGES (page, PAGESIZE); + pool->last_page = 0; + return 0; + } + element->page = page; + element->free_space = ((struct dissected_page_header *) page)->free_space; + if (unlikely (gl_oset_nx_add (pool->managed_pages, element) < 0)) + { + /* Could not allocate the tree node. */ + free (element); + FREE_PAGES (page, PAGESIZE); + pool->last_page = 0; + return 0; + } + ((struct dissected_page_header *) page)->tree_element = element; + + uintptr_t block = pool->allocate_block_in_page (size, page); + if (block == 0) + /* If the size is too large for an empty page, this function should not + have been invoked. */ + abort (); + add_update (page, pool); + pool->last_page = page; + return block; +} + +static void +free_block_from_pool (uintptr_t block, uintptr_t page, struct page_pool *pool) +{ + if (pool->page_capacity == 0) + /* Invalid argument: The block is not valid, since the pool has not yet + been initialized. */ + abort (); + + pool->free_block_in_page (block, page); + + struct dissected_page_header *pageptr = (struct dissected_page_header *) page; + if (likely (pageptr->free_space != pool->page_capacity)) + { + /* The page is not entirely free. */ + add_update (page, pool); + } + else + { + /* The page is now entirely free. */ + /* Remove its tree element and free it. */ + struct page_tree_element *element = pageptr->tree_element; + if (!gl_oset_remove (pool->managed_pages, element)) + /* Invalid state: The element is not in the managed_pages. */ + abort (); + free (element); + + if (pool->last_page == page) + pool->last_page = 0; + + drop_update (page, pool); + + /* If we would now have two freeable pages, free the old one. */ + if (pool->freeable_page != 0) + FREE_PAGES (pool->freeable_page, PAGESIZE); + + /* Don't free the page now, but later. */ + #ifdef __CHERI_PURE_CAPABILITY__ + pool->freeable_page = pageptr->whole_page; + #else + pool->freeable_page = page; + #endif + } +} + +/* Lock that protects the management of small and medium blocks from + simultaneous access from multiple threads. */ +gl_lock_define_initialized(static, ssfmalloc_lock) + +/* ============================== Large blocks ============================== */ + +/* Header of a page sequence for a large block. + Lies at an address that is a multiple of PAGESIZE. */ +struct large_block_header +{ + #if PAGE_RESERVED_HEADER_SIZE > 0 + void * reserved[PAGE_RESERVED_HEADER_SIZE / sizeof (void *)]; + #endif + unsigned char page_type; /* large_page_type */ +}; + +/* Information about a large block. + Ends at an address that is a multiple of ALIGNMENT. */ +struct large_block_caption +{ + size_t pages_size; /* A multiple of PAGESIZE. */ +}; + +/* Size of large block page header, gap, and caption. */ +#define LARGE_BLOCK_OFFSET \ + ((sizeof (struct large_block_header) + sizeof (struct large_block_caption) \ + + ALIGNMENT - 1) & -ALIGNMENT) + +/* =========================== Exported functions =========================== */ + +/* Allocates a block of memory, aligned to ALIGNMENT bytes. + Returns 0 upon failure. */ +static uintptr_t +allocate_block (size_t size) +{ + uintptr_t block; + + if (unlikely (size > MEDIUM_BLOCKS_PAGE_CAPACITY)) + { + /* Allocate a large block. */ + size_t pages_size = (size + LARGE_BLOCK_OFFSET + PAGESIZE - 1) & -PAGESIZE; + uintptr_t pages = ALLOC_PAGES (pages_size); + if (unlikely (pages == 0)) + /* Failed. */ + return 0; + if ((pages & (PAGESIZE - 1)) != 0) + /* ALLOC_PAGES's result is not aligned as expected. */ + abort (); + ((struct any_page_header *) pages)->page_type = large_page_type; + block = pages + LARGE_BLOCK_OFFSET; + ((struct large_block_caption *) block)[-1].pages_size = pages_size; + } + else + { + bool mt = gl_multithreaded (); + if (mt) gl_lock_lock (ssfmalloc_lock); + struct page_pool *pool = + (size <= SMALL_BLOCK_MAX_SIZE ? &small_block_pages : &medium_block_pages); + block = allocate_block_from_pool (size, pool); + if (mt) gl_lock_unlock (ssfmalloc_lock); +#if defined __CHERI_PURE_CAPABILITY__ + if (block != 0) + { + size_t offset = block & (PAGESIZE - 1); + block = (uintptr_t) cheri_bounds_set ((void *) (block - offset), + offset + size) + + offset; + } +#endif + } + return block; +} + +/* Frees a block of memory, returned by allocate_block. */ +static void +free_block (uintptr_t block) +{ + if (block == 0 || (block % ALIGNMENT) != 0) + /* Invalid argument. */ + abort (); + uintptr_t pages = block & -PAGESIZE; + unsigned char type = ((struct any_page_header *) pages)->page_type; + if (unlikely (type == large_page_type)) + { + if (block != pages + LARGE_BLOCK_OFFSET) + /* Invalid argument. */ + abort (); + size_t pages_size = ((struct large_block_caption *) block)[-1].pages_size; + if ((pages_size & (PAGESIZE - 1)) != 0) + /* Invalid memory state: pages_size not as expected. */ + abort (); + FREE_PAGES (pages, pages_size); + } + else + { + bool mt = gl_multithreaded (); + if (mt) gl_lock_lock (ssfmalloc_lock); + struct page_pool *pool; + if (type == small_page_type) + pool = &small_block_pages; + else if (type == medium_page_type) + pool = &medium_block_pages; + else + /* Invalid memory state: type not as expected. */ + abort (); + free_block_from_pool (block, pages, pool); + if (mt) gl_lock_unlock (ssfmalloc_lock); + } +} diff --git a/include/libgnulib/stack-trace-impl.h b/include/libgnulib/stack-trace-impl.h new file mode 100755 index 0000000..529afad --- /dev/null +++ b/include/libgnulib/stack-trace-impl.h @@ -0,0 +1,90 @@ +/* print_stack_trace() function that prints a stack trace. + Copyright (C) 2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if HAVE_LIBBACKTRACE + +# include + +static struct backtrace_state *state /* = NULL */; + +static inline void +# if (__GNUC__ >= 3) || (__clang_major__ >= 4) +__attribute__ ((always_inline)) +# endif +print_stack_trace_to (FILE *stream) +{ + if (state == NULL) + state = backtrace_create_state (NULL, 0, NULL, NULL); + fprintf (stream, "Stack trace:\n"); + /* Pass skip=0, to work around . */ + backtrace_print (state, 0, stream); +} + +#elif HAVE_LIBASAN + +# include + +/* We need only one declaration from . */ +extern +# ifdef __cplusplus +"C" +# endif +void __sanitizer_print_stack_trace (void); + +/* The only supported stream, in this case, is stderr. */ +static inline void +# if (__GNUC__ >= 3) || (__clang_major__ >= 4) +__attribute__ ((always_inline)) +# endif +print_stack_trace_to (FILE *stream) +{ + fprintf (stream, "Stack trace:\n"); + __sanitizer_print_stack_trace (); +} + +#elif HAVE_EXECINFO_H + +# include + +# include "execinfo.h" + +static inline void +# if (__GNUC__ >= 3) || (__clang_major__ >= 4) +__attribute__ ((always_inline)) +# endif +print_stack_trace_to (FILE *stream) +{ + void *buffer[100]; + int max_size = sizeof (buffer) / sizeof (buffer[0]); + int size = backtrace (buffer, max_size); + if (size > 0) + { + char **symbols = backtrace_symbols (buffer, size); + if (symbols != NULL) + { + int i; + + fprintf (stream, "Stack trace:\n"); + for (i = 0; i < size; i++) + fprintf (stream, "%s\n", symbols[i]); + fflush (stream); + + free (symbols); + } + } +} + +#endif diff --git a/include/libgnulib/stack.h b/include/libgnulib/stack.h new file mode 100755 index 0000000..b0a33a5 --- /dev/null +++ b/include/libgnulib/stack.h @@ -0,0 +1,178 @@ +/* Type-safe stack data type. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Marc Nieper-Wißkirchen , 2020. */ + +/* This header file does not have include-guards as it is meant to be + includable multiple times as long as the necessary defines have + been set up. + + A stack is implemented with a homogenous array of elements in + memory, which will be resized (and moved) as needed. Elements are + passed by value and it is the responsibility of the user-code to + free any resources associated with individual elements. + + The exported names are all prefixed by ‘stack’ (e.g. stack_init), + but this can be changed by setting an appropriate define. + Type: stack_type + Initialization: stack_init (&stack); + De-initialization: stack_destroy (&stack); + Predicate: bool res = stack_empty (&stack); + Introspection: ELEMENT *base = stack_current_base (&stack); + Pushing: stack_push (&stack, element); + Popping: ELEMENT element = stack_pop (&stack); + Discarding: stack_discard (&stack); + Top-of-stack: ELEMENT element = stack_top (&stack); + Size: idx_t size = stack_size (&stack); + + Here, ELEMENT is the type to which GL_STACK_ELEMENT was defined when + this file was included. +*/ + +/* Before including this file, you need to define: + GL_STACK_ELEMENT The type of the elements on the stack. + GL_STACK_STORAGECLASS (Optional) The storage class specifier (e.g. static) + to use in the function definitions. + GL_STACK_NAME (Optional) The prefix to use for the type names + and functions definitions instead of the default + ‘stack’. + + After including this file, these names will be undefined. + + Before including this file, you also need to include: + #include + #include "assure.h" + #include "xalloc.h" +*/ + +/* This file uses _GL_ATTRIBUTE_MAYBE_UNUSED, _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifndef GL_STACK_ELEMENT +# error "Please define GL_STACK_ELEMENT first." +#endif + +#ifndef GL_STACK_STORAGECLASS +# define GL_STACK_STORAGECLASS +#endif + +#ifndef GL_STACK_NAME +# define GL_STACK_NAME stack +#endif + +#define _GL_STACK_PREFIX(name) _GL_CONCAT(GL_STACK_NAME, _GL_CONCAT(_, name)) +#define _GL_STACK_TYPE _GL_STACK_PREFIX(type) + +typedef struct +{ + GL_STACK_ELEMENT *base; + idx_t size; + idx_t allocated; +} _GL_STACK_TYPE; + +/* Initialize a stack. */ +_GL_ATTRIBUTE_MAYBE_UNUSED +GL_STACK_STORAGECLASS void +_GL_STACK_PREFIX (init) (_GL_STACK_TYPE *stack) +{ + stack->base = NULL; + stack->size = 0; + stack->allocated = 0; +} + +/* Destroy a stack by freeing the allocated space. */ +_GL_ATTRIBUTE_MAYBE_UNUSED +GL_STACK_STORAGECLASS void +_GL_STACK_PREFIX (destroy) (_GL_STACK_TYPE *stack) +{ + free (stack->base); +} + +/* Return true if the stack currently holds no element. */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_PURE +GL_STACK_STORAGECLASS bool +_GL_STACK_PREFIX (empty) (const _GL_STACK_TYPE *stack) +{ + return stack->size == 0; +} + +/* Return the current address of the array of stack elements. + + The result is invalidated as soon as an element is added or removed + from the stack. */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_PURE +GL_STACK_STORAGECLASS GL_STACK_ELEMENT * +_GL_STACK_PREFIX (current_base) (const _GL_STACK_TYPE *stack) +{ + return stack->base; +} + +/* Push an element to the top of the stack. */ +_GL_ATTRIBUTE_MAYBE_UNUSED +GL_STACK_STORAGECLASS void +_GL_STACK_PREFIX (push) (_GL_STACK_TYPE *stack, GL_STACK_ELEMENT item) +{ + if (stack->size == stack->allocated) + stack->base = xpalloc (stack->base, &stack->allocated, 1, -1, + sizeof *stack->base); + stack->base [stack->size++] = item; +} + +/* Pop the element from the top of the stack, which must be non-empty, + and return it. */ +_GL_ATTRIBUTE_MAYBE_UNUSED +GL_STACK_STORAGECLASS GL_STACK_ELEMENT +_GL_STACK_PREFIX (pop) (_GL_STACK_TYPE *stack) +{ + affirm (!_GL_STACK_PREFIX (empty) (stack)); + return stack->base [--stack->size]; +} + +/* Pop the element from the top of the stack, which must be + non-empty. */ +_GL_ATTRIBUTE_MAYBE_UNUSED +GL_STACK_STORAGECLASS void +_GL_STACK_PREFIX (discard) (_GL_STACK_TYPE *stack) +{ + affirm (!_GL_STACK_PREFIX (empty) (stack)); + --stack->size; +} + +/* Return the element from the top of the stack, which must be + non-empty. */ +_GL_ATTRIBUTE_MAYBE_UNUSED +GL_STACK_STORAGECLASS GL_STACK_ELEMENT +_GL_STACK_PREFIX (top) (const _GL_STACK_TYPE *stack) +{ + affirm (!_GL_STACK_PREFIX (empty) (stack)); + return stack->base [stack->size - 1]; +} + +/* Return the currently stored number of elements in the stack. */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_PURE +GL_STACK_STORAGECLASS idx_t +_GL_STACK_PREFIX (size) (const _GL_STACK_TYPE *stack) +{ + return stack->size; +} + +#undef GL_STACK_ELEMENT +#undef GL_STACK_STORAGECLASS +#undef GL_STACK_NAME +#undef _GL_STACK_PREFIX +#undef _GL_STACK_TYPE diff --git a/include/libgnulib/stackvma.h b/include/libgnulib/stackvma.h new file mode 100755 index 0000000..3b92a2d --- /dev/null +++ b/include/libgnulib/stackvma.h @@ -0,0 +1,62 @@ +/* Determine the virtual memory area of a given address. + Copyright (C) 2002-2024 Free Software Foundation, Inc. + Copyright (C) 2003-2006 Paolo Bonzini + + 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, see . */ + +/* Written by Bruno Haible and Paolo Bonzini. */ + +#ifndef _STACKVMA_H +#define _STACKVMA_H + +#include + +/* Describes a virtual memory area, with some info about the gap between + it and the next or previous virtual memory area. */ +struct vma_struct +{ + uintptr_t start; + uintptr_t end; +#if STACK_DIRECTION < 0 + /* Info about the gap between this VMA and the previous one. + addr must be < vma->start. */ + int (*is_near_this) (uintptr_t addr, struct vma_struct *vma); + /* Private field, not provided by all sigsegv_get_vma implementations. */ + uintptr_t prev_end; +#endif +#if STACK_DIRECTION > 0 + /* Info about the gap between this VMA and the next one. + addr must be > vma->end - 1. */ + int (*is_near_this) (uintptr_t addr, struct vma_struct *vma); + /* Private field, not provided by all sigsegv_get_vma implementations. */ + uintptr_t next_start; +#endif +}; + +/* Determines the virtual memory area to which a given address belongs, + and returns 0. Returns -1 if it cannot be determined. + This function is used to determine the stack extent when a fault occurs. */ +extern int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma); + +/* Defined if sigsegv_get_vma actually works (i.e. does not always fail). */ +#if defined __linux__ || defined __ANDROID__ \ + || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \ + || defined __NetBSD__ || defined __OpenBSD__ \ + || (defined __APPLE__ && defined __MACH__) \ + || defined _AIX || defined __sgi || defined __sun \ + || defined __CYGWIN__ || defined __HAIKU__ +# define HAVE_STACKVMA 1 +#endif + +#endif /* _STACKVMA_H */ diff --git a/include/libgnulib/stat-macros.h b/include/libgnulib/stat-macros.h new file mode 100755 index 0000000..8ab44ab --- /dev/null +++ b/include/libgnulib/stat-macros.h @@ -0,0 +1,20 @@ +/* stat-related macros + + Copyright (C) 1993-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* All the mode bits that can be affected by chmod. */ +#define CHMOD_MODE_BITS \ + (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) diff --git a/include/libgnulib/stat-size.h b/include/libgnulib/stat-size.h new file mode 100755 index 0000000..8ec324b --- /dev/null +++ b/include/libgnulib/stat-size.h @@ -0,0 +1,94 @@ +/* Yield size-related values in struct stat. + Copyright (C) 1989, 1991-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef STAT_SIZE_H +#define STAT_SIZE_H + +/* This file uses HAVE_SYS_PARAM_H, HAVE_STRUCT_STAT_ST_BLOCKS. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* sys/param.h may define DEV_BSIZE */ +#if HAVE_SYS_PARAM_H +# include +#endif + +/* The device blocksize, or a faked version thereof. + But use ST_NBLOCKSIZE instead. + Usually defined by sys/param.h (if at all). */ +#if !defined DEV_BSIZE && defined BSIZE +# define DEV_BSIZE BSIZE +#endif +#if !defined DEV_BSIZE && defined BBSIZE /* SGI sys/param.h */ +# define DEV_BSIZE BBSIZE +#endif +#ifndef DEV_BSIZE +# define DEV_BSIZE 4096 +#endif + +/* Extract or fake data from a struct stat *st. + STP_BLKSIZE(st): Preferred performance I/O blocksize, in bytes. + STP_NBLOCKS(st): Number of blocks, including indirect blocks. + ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS. */ +#ifndef HAVE_STRUCT_STAT_ST_BLOCKS +# define STP_BLKSIZE(st) DEV_BSIZE + /* coreutils' fileblocks.c also uses BSIZE. */ +# if defined _POSIX_SOURCE || !defined BSIZE +# define STP_NBLOCKS(st) \ + ((st)->st_size / ST_NBLOCKSIZE + ((st)->st_size % ST_NBLOCKSIZE != 0)) +# else + /* This definition calls st_blocks, which is in the fileblocks module. */ +# define STP_NBLOCKS(st) \ + (S_ISREG ((st)->st_mode) || S_ISDIR ((st)->st_mode) \ + ? st_blocks ((st)->st_size) : 0) +# endif +#else +/* When running 'rsh hpux11-system cat any-file', cat would + determine that the output stream had an st_blksize of 2147421096. + Conversely st_blksize can be 2 GiB (or maybe even larger) with XFS + on 64-bit hosts. Somewhat arbitrarily, limit the "optimal" block + size to SIZE_MAX / 8 + 1. (Dividing SIZE_MAX by only 4 wouldn't + suffice, since "cat" sometimes multiplies the result by 4.) If + anyone knows of a system for which this limit is too small, please + report it as a bug in this code. */ +# define STP_BLKSIZE(st) ((0 < (st)->st_blksize \ + && (st)->st_blksize <= (size_t) -1 / 8 + 1) \ + ? (st)->st_blksize : DEV_BSIZE) +# if defined hpux || defined __hpux__ || defined __hpux + /* HP-UX counts st_blocks in 1024-byte units. + This loses when mixing HP-UX and BSD file systems with NFS. */ +# define ST_NBLOCKSIZE 1024 +# endif +#endif + +#ifndef STP_NBLOCKS +# define STP_NBLOCKS(st) ((st)->st_blocks) +#endif + +#ifndef ST_NBLOCKSIZE +# ifdef S_BLKSIZE +# define ST_NBLOCKSIZE S_BLKSIZE +# else +# define ST_NBLOCKSIZE 512 +# endif +#endif + +/* Preferred blocksize and number of blocks for a struct stat object. */ +#define ST_BLKSIZE(statbuf) STP_BLKSIZE (&(statbuf)) +#define ST_NBLOCKS(statbuf) STP_NBLOCKS (&(statbuf)) + +#endif /* STAT_SIZE_H */ diff --git a/include/libgnulib/stat-time.h b/include/libgnulib/stat-time.h new file mode 100755 index 0000000..3cd8478 --- /dev/null +++ b/include/libgnulib/stat-time.h @@ -0,0 +1,245 @@ +/* stat-related time functions. + + Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef STAT_TIME_H +#define STAT_TIME_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED, + _GL_ATTRIBUTE_PURE, HAVE_STRUCT_STAT_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include +#include +#include +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_STAT_TIME_INLINE +# define _GL_STAT_TIME_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type + struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, + ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, + if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim + for access, status change, data modification, or birth (creation) + time respectively. + + These macros are private to stat-time.h. */ +#if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC +# if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC +# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) +# define STAT_TIMESPEC_OFFSETOF(st_xtim) offsetof (struct stat, st_xtim) +# else +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) +# endif +#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC +# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) +# define STAT_TIMESPEC_OFFSETOF(st_xtim) offsetof (struct stat, st_xtim##espec) +#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) +#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) +#endif + +/* Return the nanosecond component of *ST's access time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_atime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_atim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_atim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's status change time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_ctime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_ctim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_ctim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's data modification time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_mtime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_mtim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_mtim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's birth time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_birthtime_ns (_GL_UNUSED struct stat const *st) +{ +# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC + return STAT_TIMESPEC (st, st_birthtim).tv_nsec; +# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + return STAT_TIMESPEC_NS (st, st_birthtim); +# else + return 0; +# endif +} + +/* Return *ST's access time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_atime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_atim); +#else + return (struct timespec) { .tv_sec = st->st_atime, + .tv_nsec = get_stat_atime_ns (st) }; +#endif +} + +/* Return *ST's status change time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_ctime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_ctim); +#else + return (struct timespec) { .tv_sec = st->st_ctime, + .tv_nsec = get_stat_ctime_ns (st) }; +#endif +} + +/* Return *ST's data modification time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_mtime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_mtim); +#else + return (struct timespec) { .tv_sec = st->st_mtime, + .tv_nsec = get_stat_mtime_ns (st) }; +#endif +} + +/* Return *ST's birth time, if available; otherwise return a value + with tv_sec and tv_nsec both equal to -1. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_birthtime (_GL_UNUSED struct stat const *st) +{ + struct timespec t; + +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) + t = STAT_TIMESPEC (st, st_birthtim); +#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + t = (struct timespec) { .tv_sec = st->st_birthtime, + .tv_nsec = st->st_birthtimensec }; +#elif defined _WIN32 && ! defined __CYGWIN__ + /* Native Windows platforms (but not Cygwin) put the "file creation + time" in st_ctime (!). See + . */ +# if _GL_WINDOWS_STAT_TIMESPEC + t = st->st_ctim; +# else + t = (struct timespec) { .tv_sec = st->st_ctime }; +# endif +#else + /* Birth time is not supported. */ + t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 }; +#endif + +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) + /* FreeBSD and NetBSD sometimes signal the absence of knowledge by + using zero. Attempt to work around this problem. Alas, this can + report failure even for valid timestamps. Also, NetBSD + sometimes returns junk in the birth time fields; work around this + bug if it is detected. */ + if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) + t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 }; +#endif + + return t; +} + +/* If a stat-like function returned RESULT, normalize the timestamps + in *ST, if this platform suffers from a macOS and Solaris bug where + tv_nsec might be negative. Return the adjusted RESULT, setting + errno to EOVERFLOW if normalization overflowed. This function + is intended to be private to this .h file. */ +_GL_STAT_TIME_INLINE int +stat_time_normalize (int result, _GL_UNUSED struct stat *st) +{ +#if (((defined __APPLE__ && defined __MACH__) || defined __sun) \ + && defined STAT_TIMESPEC_OFFSETOF) + if (result == 0) + { + long int timespec_hz = 1000000000; + short int const ts_off[] = { STAT_TIMESPEC_OFFSETOF (st_atim), + STAT_TIMESPEC_OFFSETOF (st_mtim), + STAT_TIMESPEC_OFFSETOF (st_ctim) }; + int i; + for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) + { + struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]); + long int q = ts->tv_nsec / timespec_hz; + long int r = ts->tv_nsec % timespec_hz; + if (r < 0) + { + r += timespec_hz; + q--; + } + ts->tv_nsec = r; + /* Overflow is possible, as Solaris 11 stat can yield + tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. */ + if (ckd_add (&ts->tv_sec, q, ts->tv_sec)) + { + errno = EOVERFLOW; + return -1; + } + } + } +#endif + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/include/libgnulib/stat-w32.h b/include/libgnulib/stat-w32.h new file mode 100755 index 0000000..392faed --- /dev/null +++ b/include/libgnulib/stat-w32.h @@ -0,0 +1,37 @@ +/* Core of implementation of fstat and stat for native Windows. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _STAT_W32_H +#define _STAT_W32_H 1 + +/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ +#if _GL_WINDOWS_STAT_TIMESPEC +extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft); +#else +extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft); +#endif + +/* Fill *BUF with information about the file designated by H. + PATH is the file name, if known, otherwise NULL. + Return 0 if successful, or -1 with errno set upon failure. */ +extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf); + +/* Bitmasks for st_mode. */ +#define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6)) +#define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6)) +#define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)) + +#endif /* _STAT_W32_H */ diff --git a/include/libgnulib/stdio--.h b/include/libgnulib/stdio--.h new file mode 100755 index 0000000..0be7ef6 --- /dev/null +++ b/include/libgnulib/stdio--.h @@ -0,0 +1,41 @@ +/* Like stdio.h, but redefine some names to avoid glitches. + + Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#include +#include "stdio-safer.h" + +#if GNULIB_FOPEN_SAFER +# undef fopen +# define fopen fopen_safer +#endif + +#if GNULIB_FREOPEN_SAFER +# undef freopen +# define freopen freopen_safer +#endif + +#if GNULIB_TMPFILE_SAFER +# undef tmpfile +# define tmpfile tmpfile_safer +#endif + +#if GNULIB_POPEN_SAFER +# undef popen +# define popen popen_safer +#endif diff --git a/include/libgnulib/stdio-impl.h b/include/libgnulib/stdio-impl.h new file mode 100755 index 0000000..63ebf7c --- /dev/null +++ b/include/libgnulib/stdio-impl.h @@ -0,0 +1,218 @@ +/* Implementation details of FILE streams. + Copyright (C) 2007-2008, 2010-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Many stdio implementations have the same logic and therefore can share + the same implementation of stdio extension API, except that some fields + have different naming conventions, or their access requires some casts. */ + +/* Glibc 2.28 made _IO_UNBUFFERED and _IO_IN_BACKUP private. For now, work + around this problem by defining them ourselves. FIXME: Do not rely on glibc + internals. */ +#if defined _IO_EOF_SEEN +# if !defined _IO_UNBUFFERED +# define _IO_UNBUFFERED 0x2 +# endif +# if !defined _IO_IN_BACKUP +# define _IO_IN_BACKUP 0x100 +# endif +#endif + +/* BSD stdio derived implementations. */ + +#if defined __NetBSD__ /* NetBSD */ +/* Get __NetBSD_Version__. */ +# include +#endif + +#include /* For detecting Plan9. */ + +#if defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ + +# if defined __DragonFly__ /* DragonFly */ + /* See . */ +# define fp_ ((struct { struct __FILE_public pub; \ + struct { unsigned char *_base; int _size; } _bf; \ + void *cookie; \ + void *_close; \ + void *_read; \ + void *_seek; \ + void *_write; \ + struct { unsigned char *_base; int _size; } _ub; \ + int _ur; \ + unsigned char _ubuf[3]; \ + unsigned char _nbuf[1]; \ + struct { unsigned char *_base; int _size; } _lb; \ + int _blksize; \ + fpos_t _offset; \ + /* More fields, not relevant here. */ \ + } *) fp) + /* See . */ +# define _p pub._p +# define _flags pub._flags +# define _r pub._r +# define _w pub._w +# elif defined __ANDROID__ /* Android */ +# ifdef __LP64__ +# define _gl_flags_file_t int +# else +# define _gl_flags_file_t short +# endif +# ifdef __LP64__ +# define _gl_file_offset_t int64_t +# else + /* see https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md */ +# define _gl_file_offset_t __kernel_off_t +# endif + /* Up to this commit from 2015-10-12 + + the innards of FILE were public, and fp_ub could be defined like for OpenBSD, + see + and . + After this commit, the innards of FILE are hidden. */ +# define fp_ ((struct { unsigned char *_p; \ + int _r; \ + int _w; \ + _gl_flags_file_t _flags; \ + _gl_flags_file_t _file; \ + struct { unsigned char *_base; size_t _size; } _bf; \ + int _lbfsize; \ + void *_cookie; \ + void *_close; \ + void *_read; \ + void *_seek; \ + void *_write; \ + struct { unsigned char *_base; size_t _size; } _ext; \ + unsigned char *_up; \ + int _ur; \ + unsigned char _ubuf[3]; \ + unsigned char _nbuf[1]; \ + struct { unsigned char *_base; size_t _size; } _lb; \ + int _blksize; \ + _gl_file_offset_t _offset; \ + /* More fields, not relevant here. */ \ + } *) fp) +# else +# define fp_ fp +# endif + +# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */ + /* See + and + and */ + struct __sfileext + { + struct __sbuf _ub; /* ungetc buffer */ + /* More fields, not relevant here. */ + }; +# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub +# elif defined __ANDROID__ /* Android */ + struct __sfileext + { + struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */ + /* More fields, not relevant here. */ + }; +# define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub +# else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */ +# define fp_ub fp_->_ub +# endif + +# define HASUB(fp) (fp_ub._base != NULL) + +# if defined __ANDROID__ /* Android */ + /* Needed after this commit from 2016-01-25 + */ +# ifndef __SEOF +# define __SLBF 1 +# define __SNBF 2 +# define __SRD 4 +# define __SWR 8 +# define __SRW 0x10 +# define __SEOF 0x20 +# define __SERR 0x40 +# endif +# ifndef __SOFF +# define __SOFF 0x1000 +# endif +# endif + +#endif + + +/* SystemV derived implementations. */ + +#ifdef __TANDEM /* NonStop Kernel */ +# ifndef _IOERR +/* These values were determined by the program 'stdioext-flags' at + . */ +# define _IOERR 0x40 +# define _IOREAD 0x80 +# define _IOWRT 0x4 +# define _IORW 0x100 +# endif +#endif + +#if defined _IOERR + +# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ +# define fp_ ((struct { unsigned char *_ptr; \ + unsigned char *_base; \ + unsigned char *_end; \ + long _cnt; \ + int _file; \ + unsigned int _flag; \ + } *) fp) +# elif defined __VMS /* OpenVMS */ +# define fp_ ((struct _iobuf *) fp) +# else +# define fp_ fp +# endif + +# if defined _SCO_DS || (defined __SCO_VERSION__ || defined __sysv5__) /* OpenServer 5, OpenServer 6, UnixWare 7 */ +# define _cnt __cnt +# define _ptr __ptr +# define _base __base +# define _flag __flag +# endif + +#elif defined _WIN32 && ! defined __CYGWIN__ /* newer Windows with MSVC */ + +/* does not define the innards of FILE any more. */ +# define WINDOWS_OPAQUE_FILE + +struct _gl_real_FILE +{ + /* Note: Compared to older Windows and to mingw, it has the fields + _base and _cnt swapped. */ + unsigned char *_ptr; + unsigned char *_base; + int _cnt; + int _flag; + int _file; + int _charbuf; + int _bufsiz; +}; +# define fp_ ((struct _gl_real_FILE *) fp) + +/* These values were determined by a program similar to the one at + . */ +# define _IOREAD 0x1 +# define _IOWRT 0x2 +# define _IORW 0x4 +# define _IOEOF 0x8 +# define _IOERR 0x10 + +#endif diff --git a/include/libgnulib/stdio-safer.h b/include/libgnulib/stdio-safer.h new file mode 100755 index 0000000..8e2e777 --- /dev/null +++ b/include/libgnulib/stdio-safer.h @@ -0,0 +1,55 @@ +/* Invoke stdio functions, but avoid some glitches. + + Copyright (C) 2001, 2003, 2006, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +/* This file uses _GL_ATTRIBUTE_DEALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#if GNULIB_FOPEN_SAFER +FILE *fopen_safer (char const *, char const *) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1); +#endif + +#if GNULIB_FREOPEN_SAFER +FILE *freopen_safer (char const *, char const *, FILE *) + _GL_ARG_NONNULL ((2, 3)); +#endif + +#if GNULIB_POPEN_SAFER +FILE *popen_safer (char const *, char const *) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1); +#endif + +#if GNULIB_TMPFILE_SAFER +FILE *tmpfile_safer (void) + _GL_ATTRIBUTE_DEALLOC (fclose, 1); +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/stdlib--.h b/include/libgnulib/stdlib--.h new file mode 100755 index 0000000..13a80b1 --- /dev/null +++ b/include/libgnulib/stdlib--.h @@ -0,0 +1,36 @@ +/* Like stdlib.h, but redefine some names to avoid glitches. + + Copyright (C) 2005-2007, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#include +#include "stdlib-safer.h" + +#undef mkstemp +#define mkstemp mkstemp_safer + +#if GNULIB_MKOSTEMP +# define mkostemp mkostemp_safer +#endif + +#if GNULIB_MKOSTEMPS +# define mkostemps mkostemps_safer +#endif + +#if GNULIB_MKSTEMPS +# define mkstemps mkstemps_safer +#endif diff --git a/include/libgnulib/stdlib-safer.h b/include/libgnulib/stdlib-safer.h new file mode 100755 index 0000000..07357d9 --- /dev/null +++ b/include/libgnulib/stdlib-safer.h @@ -0,0 +1,42 @@ +/* Invoke stdlib.h functions, but avoid some glitches. + + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +int mkstemp_safer (char *); + +#if GNULIB_MKOSTEMP +int mkostemp_safer (char *, int); +#endif + +#if GNULIB_MKOSTEMPS +int mkostemps_safer (char *, int, int); +#endif + +#if GNULIB_MKSTEMPS +int mkstemps_safer (char *, int); +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/stdopen.h b/include/libgnulib/stdopen.h new file mode 100755 index 0000000..96ac301 --- /dev/null +++ b/include/libgnulib/stdopen.h @@ -0,0 +1,32 @@ +/* Arrange for stdin/stdout/stderr to be open. + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering, 2005. */ + +#ifndef STDOPEN_H +# define STDOPEN_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +int stdopen (void); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/include/libgnulib/str-kmp.h b/include/libgnulib/str-kmp.h new file mode 100755 index 0000000..091b921 --- /dev/null +++ b/include/libgnulib/str-kmp.h @@ -0,0 +1,161 @@ +/* Substring search in a NUL terminated string of UNIT elements, + using the Knuth-Morris-Pratt algorithm. + Copyright (C) 2005-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2005. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +/* Before including this file, you need to define: + UNIT The element type of the needle and haystack. + CANON_ELEMENT(c) A macro that canonicalizes an element right after + it has been fetched from needle or haystack. + The argument is of type UNIT; the result must be + of type UNIT as well. */ + +/* Knuth-Morris-Pratt algorithm. + See https://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm + HAYSTACK is the NUL terminated string in which to search for. + NEEDLE is the string to search for in HAYSTACK, consisting of NEEDLE_LEN + units. + Return a boolean indicating success: + Return true and set *RESULTP if the search was completed. + Return false if it was aborted because not enough memory was available. */ +static bool +knuth_morris_pratt (const UNIT *haystack, + const UNIT *needle, size_t needle_len, + const UNIT **resultp) +{ + size_t m = needle_len; + + /* Allocate the table. */ + size_t *table = (size_t *) nmalloca (m, sizeof (size_t)); + if (table == NULL) + return false; + /* Fill the table. + For 0 < i < m: + 0 < table[i] <= i is defined such that + forall 0 < x < table[i]: needle[x..i-1] != needle[0..i-1-x], + and table[i] is as large as possible with this property. + This implies: + 1) For 0 < i < m: + If table[i] < i, + needle[table[i]..i-1] = needle[0..i-1-table[i]]. + 2) For 0 < i < m: + rhaystack[0..i-1] == needle[0..i-1] + and exists h, i <= h < m: rhaystack[h] != needle[h] + implies + forall 0 <= x < table[i]: rhaystack[x..x+m-1] != needle[0..m-1]. + table[0] remains uninitialized. */ + { + size_t i, j; + + /* i = 1: Nothing to verify for x = 0. */ + table[1] = 1; + j = 0; + + for (i = 2; i < m; i++) + { + /* Here: j = i-1 - table[i-1]. + The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold + for x < table[i-1], by induction. + Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ + UNIT b = CANON_ELEMENT (needle[i - 1]); + + for (;;) + { + /* Invariants: The inequality needle[x..i-1] != needle[0..i-1-x] + is known to hold for x < i-1-j. + Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ + if (b == CANON_ELEMENT (needle[j])) + { + /* Set table[i] := i-1-j. */ + table[i] = i - ++j; + break; + } + /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds + for x = i-1-j, because + needle[i-1] != needle[j] = needle[i-1-x]. */ + if (j == 0) + { + /* The inequality holds for all possible x. */ + table[i] = i; + break; + } + /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds + for i-1-j < x < i-1-j+table[j], because for these x: + needle[x..i-2] + = needle[x-(i-1-j)..j-1] + != needle[0..j-1-(x-(i-1-j))] (by definition of table[j]) + = needle[0..i-2-x], + hence needle[x..i-1] != needle[0..i-1-x]. + Furthermore + needle[i-1-j+table[j]..i-2] + = needle[table[j]..j-1] + = needle[0..j-1-table[j]] (by definition of table[j]). */ + j = j - table[j]; + } + /* Here: j = i - table[i]. */ + } + } + + /* Search, using the table to accelerate the processing. */ + { + size_t j; + const UNIT *rhaystack; + const UNIT *phaystack; + + *resultp = NULL; + j = 0; + rhaystack = haystack; + phaystack = haystack; + /* Invariant: phaystack = rhaystack + j. */ + while (*phaystack != 0) + if (CANON_ELEMENT (needle[j]) == CANON_ELEMENT (*phaystack)) + { + j++; + phaystack++; + if (j == m) + { + /* The entire needle has been found. */ + *resultp = rhaystack; + break; + } + } + else if (j > 0) + { + /* Found a match of needle[0..j-1], mismatch at needle[j]. */ + rhaystack += table[j]; + j -= table[j]; + } + else + { + /* Found a mismatch at needle[0] already. */ + rhaystack++; + phaystack++; + } + } + + freea (table); + return true; +} + +#undef CANON_ELEMENT diff --git a/include/libgnulib/str-two-way.h b/include/libgnulib/str-two-way.h new file mode 100755 index 0000000..cf85e26 --- /dev/null +++ b/include/libgnulib/str-two-way.h @@ -0,0 +1,452 @@ +/* Byte-wise substring search, using the Two-Way algorithm. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Eric Blake , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Before including this file, you need to include and + , and define: + RETURN_TYPE A macro that expands to the return type. + AVAILABLE(h, h_l, j, n_l) + A macro that returns nonzero if there are + at least N_L bytes left starting at H[J]. + H is 'unsigned char *', H_L, J, and N_L + are 'size_t'; H_L is an lvalue. For + NUL-terminated searches, H_L can be + modified each iteration to avoid having + to compute the end of H up front. + + For case-insensitivity, you may optionally define: + CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L + characters of P1 and P2 are equal. + CANON_ELEMENT(c) A macro that canonicalizes an element right after + it has been fetched from one of the two strings. + The argument is an 'unsigned char'; the result + must be an 'unsigned char' as well. + + This file undefines the macros documented above, and defines + LONG_NEEDLE_THRESHOLD. +*/ + +#include +#include + +/* We use the Two-Way string matching algorithm (also known as + Chrochemore-Perrin), which guarantees linear complexity with + constant space. Additionally, for long needles, we also use a bad + character shift table similar to the Boyer-Moore algorithm to + achieve improved (potentially sub-linear) performance. + + See https://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, + https://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, + https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf +*/ + +/* Point at which computing a bad-byte shift table is likely to be + worthwhile. Small needles should not compute a table, since it + adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a + speedup no greater than a factor of NEEDLE_LEN. The larger the + needle, the better the potential performance gain. On the other + hand, on non-POSIX systems with CHAR_BIT larger than eight, the + memory required for the table is prohibitive. */ +#if CHAR_BIT < 10 +# define LONG_NEEDLE_THRESHOLD 32U +#else +# define LONG_NEEDLE_THRESHOLD SIZE_MAX +#endif + +#ifndef MAX +# define MAX(a, b) ((a < b) ? (b) : (a)) +#endif + +#ifndef CANON_ELEMENT +# define CANON_ELEMENT(c) c +#endif +#ifndef CMP_FUNC +# define CMP_FUNC memcmp +#endif + +/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. + Return the index of the first byte in the right half, and set + *PERIOD to the global period of the right half. + + The global period of a string is the smallest index (possibly its + length) at which all remaining bytes in the string are repetitions + of the prefix (the last repetition may be a subset of the prefix). + + When NEEDLE is factored into two halves, a local period is the + length of the smallest word that shares a suffix with the left half + and shares a prefix with the right half. All factorizations of a + non-empty NEEDLE have a local period of at least 1 and no greater + than NEEDLE_LEN. + + A critical factorization has the property that the local period + equals the global period. All strings have at least one critical + factorization with the left half smaller than the global period. + And while some strings have more than one critical factorization, + it is provable that with an ordered alphabet, at least one of the + critical factorizations corresponds to a maximal suffix. + + Given an ordered alphabet, a critical factorization can be computed + in linear time, with 2 * NEEDLE_LEN comparisons, by computing the + shorter of two ordered maximal suffixes. The ordered maximal + suffixes are determined by lexicographic comparison while tracking + periodicity. */ +static size_t +critical_factorization (const unsigned char *needle, size_t needle_len, + size_t *period) +{ + /* Index of last byte of left half, or SIZE_MAX. */ + size_t max_suffix, max_suffix_rev; + size_t j; /* Index into NEEDLE for current candidate suffix. */ + size_t k; /* Offset into current period. */ + size_t p; /* Intermediate period. */ + unsigned char a, b; /* Current comparison bytes. */ + + /* Special case NEEDLE_LEN of 1 or 2 (all callers already filtered + out 0-length needles. */ + if (needle_len < 3) + { + *period = 1; + return needle_len - 1; + } + + /* Invariants: + 0 <= j < NEEDLE_LEN - 1 + -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) + min(max_suffix, max_suffix_rev) < global period of NEEDLE + 1 <= p <= global period of NEEDLE + p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] + 1 <= k <= p + */ + + /* Perform lexicographic search. */ + max_suffix = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix + k]); + if (a < b) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* b < a */ + { + /* Suffix is larger, start over from current location. */ + max_suffix = j++; + k = p = 1; + } + } + *period = p; + + /* Perform reverse lexicographic search. */ + max_suffix_rev = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix_rev + k]); + if (b < a) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix_rev; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* a < b */ + { + /* Suffix is larger, start over from current location. */ + max_suffix_rev = j++; + k = p = 1; + } + } + + /* Choose the shorter suffix. Return the index of the first byte of + the right half, rather than the last byte of the left half. + + For some examples, 'banana' has two critical factorizations, both + exposed by the two lexicographic extreme suffixes of 'anana' and + 'nana', where both suffixes have a period of 2. On the other + hand, with 'aab' and 'bba', both strings have a single critical + factorization of the last byte, with the suffix having a period + of 1. While the maximal lexicographic suffix of 'aab' is 'b', + the maximal lexicographic suffix of 'bba' is 'ba', which is not a + critical factorization. Conversely, the maximal reverse + lexicographic suffix of 'a' works for 'bba', but not 'ab' for + 'aab'. The shorter suffix of the two will always be a critical + factorization. */ + if (max_suffix_rev + 1 < max_suffix + 1) + return max_suffix + 1; + *period = p; + return max_suffix_rev + 1; +} + +/* Return the first location of non-empty NEEDLE within HAYSTACK, or + NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This + method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. + Performance is guaranteed to be linear, with an initialization cost + of 2 * NEEDLE_LEN comparisons. + + If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at + most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. + If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * + HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ +static RETURN_TYPE _GL_ATTRIBUTE_PURE +two_way_short_needle (const unsigned char *haystack, size_t haystack_len, + const unsigned char *needle, size_t needle_len) +{ + size_t i; /* Index into current byte of NEEDLE. */ + size_t j; /* Index into current window of HAYSTACK. */ + size_t period; /* The period of the right half of needle. */ + size_t suffix; /* The index of the right half of needle. */ + + /* Factor the needle into two halves, such that the left half is + smaller than the global period, and the right half is + periodic (with a period as large as NEEDLE_LEN - suffix). */ + suffix = critical_factorization (needle, needle_len, &period); + + /* Perform the search. Each iteration compares the right half + first. */ + if (CMP_FUNC (needle, needle + period, suffix) == 0) + { + /* Entire needle is periodic; a mismatch in the left half can + only advance by the period, so use memory to avoid rescanning + known occurrences of the period in the right half. */ + size_t memory = 0; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = MAX (suffix, memory); + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (memory < i + 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i + 1 < memory + 1) + return (RETURN_TYPE) (haystack + j); + /* No match, so remember how many repetitions of period + on the right half were scanned. */ + j += period; + memory = needle_len - period; + } + else + { + j += i - suffix + 1; + memory = 0; + } + } + } + else + { + /* The two halves of needle are distinct; no extra memory is + required, and any mismatch results in a maximal shift. */ + period = MAX (suffix, needle_len - suffix) + 1; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = suffix; + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i == SIZE_MAX) + return (RETURN_TYPE) (haystack + j); + j += period; + } + else + j += i - suffix + 1; + } + } + return NULL; +} + +/* Return the first location of non-empty NEEDLE within HAYSTACK, or + NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This + method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. + Performance is guaranteed to be linear, with an initialization cost + of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. + + If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at + most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, + and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. + If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * + HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and + sublinear performance is not possible. */ +static RETURN_TYPE _GL_ATTRIBUTE_PURE +two_way_long_needle (const unsigned char *haystack, size_t haystack_len, + const unsigned char *needle, size_t needle_len) +{ + size_t i; /* Index into current byte of NEEDLE. */ + size_t j; /* Index into current window of HAYSTACK. */ + size_t period; /* The period of the right half of needle. */ + size_t suffix; /* The index of the right half of needle. */ + size_t shift_table[1U << CHAR_BIT]; /* See below. */ + + /* Factor the needle into two halves, such that the left half is + smaller than the global period, and the right half is + periodic (with a period as large as NEEDLE_LEN - suffix). */ + suffix = critical_factorization (needle, needle_len, &period); + + /* Populate shift_table. For each possible byte value c, + shift_table[c] is the distance from the last occurrence of c to + the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. + shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ + for (i = 0; i < 1U << CHAR_BIT; i++) + shift_table[i] = needle_len; + for (i = 0; i < needle_len; i++) + shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; + + /* Perform the search. Each iteration compares the right half + first. */ + if (CMP_FUNC (needle, needle + period, suffix) == 0) + { + /* Entire needle is periodic; a mismatch in the left half can + only advance by the period, so use memory to avoid rescanning + known occurrences of the period in the right half. */ + size_t memory = 0; + size_t shift; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Check the last byte first; if it does not match, then + shift to the next possible match location. */ + shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; + if (0 < shift) + { + if (memory && shift < period) + { + /* Since needle is periodic, but the last period has + a byte out of place, there can be no match until + after the mismatch. */ + shift = needle_len - period; + } + memory = 0; + j += shift; + continue; + } + /* Scan for matches in right half. The last byte has + already been matched, by virtue of the shift table. */ + i = MAX (suffix, memory); + while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len - 1 <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (memory < i + 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i + 1 < memory + 1) + return (RETURN_TYPE) (haystack + j); + /* No match, so remember how many repetitions of period + on the right half were scanned. */ + j += period; + memory = needle_len - period; + } + else + { + j += i - suffix + 1; + memory = 0; + } + } + } + else + { + /* The two halves of needle are distinct; no extra memory is + required, and any mismatch results in a maximal shift. */ + size_t shift; + period = MAX (suffix, needle_len - suffix) + 1; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Check the last byte first; if it does not match, then + shift to the next possible match location. */ + shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; + if (0 < shift) + { + j += shift; + continue; + } + /* Scan for matches in right half. The last byte has + already been matched, by virtue of the shift table. */ + i = suffix; + while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len - 1 <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i == SIZE_MAX) + return (RETURN_TYPE) (haystack + j); + j += period; + } + else + j += i - suffix + 1; + } + } + return NULL; +} + +#undef AVAILABLE +#undef CANON_ELEMENT +#undef CMP_FUNC +#undef MAX +#undef RETURN_TYPE diff --git a/include/libgnulib/strchrnul.valgrind b/include/libgnulib/strchrnul.valgrind new file mode 100755 index 0000000..0ae2e65 --- /dev/null +++ b/include/libgnulib/strchrnul.valgrind @@ -0,0 +1,28 @@ +# Suppress a valgrind message about use of uninitialized memory in strchrnul(). + +# Copyright (C) 2008-2024 Free Software Foundation, Inc. +# +# This file is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# This file 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +# This use is OK because it provides only a speedup. +{ + strchrnul-value4 + Memcheck:Value4 + fun:strchrnul +} +{ + strchrnul-value8 + Memcheck:Value8 + fun:strchrnul +} diff --git a/include/libgnulib/streq.h b/include/libgnulib/streq.h new file mode 100755 index 0000000..8593de6 --- /dev/null +++ b/include/libgnulib/streq.h @@ -0,0 +1,186 @@ +/* Optimized string comparison. + Copyright (C) 2001-2002, 2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#ifndef _GL_STREQ_H +#define _GL_STREQ_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* STREQ_OPT allows to optimize string comparison with a small literal string. + STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + is semantically equivalent to + strcmp (s, "EUC-KR") == 0 + just faster. */ + +/* Help GCC to generate good code for string comparisons with + immediate strings. */ +#if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__ + +static inline int +streq9 (const char *s1, const char *s2) +{ + return strcmp (s1 + 9, s2 + 9) == 0; +} + +static inline int +streq8 (const char *s1, const char *s2, char s28) +{ + if (s1[8] == s28) + { + if (s28 == 0) + return 1; + else + return streq9 (s1, s2); + } + else + return 0; +} + +static inline int +streq7 (const char *s1, const char *s2, char s27, char s28) +{ + if (s1[7] == s27) + { + if (s27 == 0) + return 1; + else + return streq8 (s1, s2, s28); + } + else + return 0; +} + +static inline int +streq6 (const char *s1, const char *s2, char s26, char s27, char s28) +{ + if (s1[6] == s26) + { + if (s26 == 0) + return 1; + else + return streq7 (s1, s2, s27, s28); + } + else + return 0; +} + +static inline int +streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) +{ + if (s1[5] == s25) + { + if (s25 == 0) + return 1; + else + return streq6 (s1, s2, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[4] == s24) + { + if (s24 == 0) + return 1; + else + return streq5 (s1, s2, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[3] == s23) + { + if (s23 == 0) + return 1; + else + return streq4 (s1, s2, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[2] == s22) + { + if (s22 == 0) + return 1; + else + return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[1] == s21) + { + if (s21 == 0) + return 1; + else + return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[0] == s20) + { + if (s20 == 0) + return 1; + else + return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) + +#else + +#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (strcmp (s1, s2) == 0) + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STREQ_H */ diff --git a/include/libgnulib/strerror-override.h b/include/libgnulib/strerror-override.h new file mode 100755 index 0000000..c496000 --- /dev/null +++ b/include/libgnulib/strerror-override.h @@ -0,0 +1,73 @@ +/* strerror-override.h --- POSIX compatible system error routine + + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_STRERROR_OVERRIDE_H +#define _GL_STRERROR_OVERRIDE_H + +/* This file uses _GL_ATTRIBUTE_CONST. */ +#if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Reasonable buffer size that should never trigger ERANGE; if this + proves too small, we intentionally abort(), to remind us to fix + this value. */ +#define STACKBUF_LEN 256 + +/* If ERRNUM maps to an errno value defined by gnulib, return a string + describing the error. Otherwise return NULL. */ +#if REPLACE_STRERROR_0 \ + || GNULIB_defined_ESOCK \ + || GNULIB_defined_ESTREAMS \ + || GNULIB_defined_EWINSOCK \ + || GNULIB_defined_ENOMSG \ + || GNULIB_defined_EIDRM \ + || GNULIB_defined_ENOLINK \ + || GNULIB_defined_EPROTO \ + || GNULIB_defined_EMULTIHOP \ + || GNULIB_defined_EBADMSG \ + || GNULIB_defined_EOVERFLOW \ + || GNULIB_defined_ENOTSUP \ + || GNULIB_defined_ENETRESET \ + || GNULIB_defined_ECONNABORTED \ + || GNULIB_defined_ESTALE \ + || GNULIB_defined_EDQUOT \ + || GNULIB_defined_ECANCELED \ + || GNULIB_defined_EOWNERDEAD \ + || GNULIB_defined_ENOTRECOVERABLE \ + || GNULIB_defined_EILSEQ \ + || GNULIB_defined_ESOCKTNOSUPPORT +extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; +#else +# define strerror_override(ignored) NULL +# define GNULIB_defined_strerror_override_macro 1 +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STRERROR_OVERRIDE_H */ diff --git a/include/libgnulib/strftime.h b/include/libgnulib/strftime.h new file mode 100755 index 0000000..3179874 --- /dev/null +++ b/include/libgnulib/strftime.h @@ -0,0 +1,85 @@ +/* declarations for strftime.c + + Copyright (C) 2002, 2004, 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Format the broken-down time *__TP, with additional __NS nanoseconds, + into the buffer __S of size __MAXSIZE, according to the rules of the + LC_TIME category of the current locale. + + Use the time zone __TZ. + If *__TP represents local time, __TZ should be set to + tzalloc (getenv ("TZ")). + If *__TP represents universal time (a.k.a. GMT), __TZ should be set to + (timezone_t) 0. + + The format string __FORMAT, including GNU extensions, is described in + the GNU libc's strftime() documentation: + + Additionally, the following conversion is supported: + %N The number of nanoseconds, passed as __NS argument. + Here's a summary of the available conversions (= format directives): + literal characters %n %t %% + date: + century %C + year %Y %y + week-based year %G %g + month (in year) %m %B %b %h + week in year %U %W %V + day in year %j + day (in month) %d %e + day in week %u %w %A %a + year, month, day %x %F %D + time: + half-day %p %P + hour %H %k %I %l + minute (in hour) %M + hour, minute %R + second (in minute) %S + hour, minute, second %r %T %X + second (since epoch) %s + date and time: %c + time zone: %z %Z + nanosecond %N + + Store the result, as a string with a trailing NUL character, at the + beginning of the array __S[0..__MAXSIZE-1] and return the length of + that string, not counting the trailing NUL, and without changing errno. + If unsuccessful, possibly change the array __S, set errno, and return 0; + errno == ERANGE means the string didn't fit. + + This function is like strftime, but with two more arguments: + * __TZ instead of the local timezone information, + * __NS as the number of nanoseconds in the %N directive. + */ +size_t nstrftime (char *restrict __s, size_t __maxsize, + char const *__format, + struct tm const *__tp, timezone_t __tz, int __ns); + +/* Like nstrftime, except that it uses the "C" locale instead of the + current locale. */ +size_t c_nstrftime (char *restrict __s, size_t __maxsize, + char const *__format, + struct tm const *__tp, timezone_t __tz, int __ns); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/striconv.h b/include/libgnulib/striconv.h new file mode 100755 index 0000000..cb42c7b --- /dev/null +++ b/include/libgnulib/striconv.h @@ -0,0 +1,82 @@ +/* Charset conversion. + Copyright (C) 2001-2004, 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible and Simon Josefsson. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _STRICONV_H +#define _STRICONV_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, HAVE_ICONV. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#if HAVE_ICONV +#include +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if HAVE_ICONV + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + The conversion descriptor is passed as CD. + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int mem_cd_iconv (const char *src, size_t srclen, iconv_t cd, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + The conversion descriptor is passed as CD. Both the "from" and the "to" + encoding must use a single NUL byte at the end of the string (i.e. not + UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * str_cd_iconv (const char *src, iconv_t cd) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#endif + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * str_iconv (const char *src, + const char *from_codeset, const char *to_codeset) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif + + +#endif /* _STRICONV_H */ diff --git a/include/libgnulib/striconveh.h b/include/libgnulib/striconveh.h new file mode 100755 index 0000000..dee51eb --- /dev/null +++ b/include/libgnulib/striconveh.h @@ -0,0 +1,147 @@ +/* Character set conversion with error handling. + Copyright (C) 2001-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible and Simon Josefsson. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _STRICONVEH_H +#define _STRICONVEH_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, HAVE_ICONV. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#if HAVE_ICONV +#include +#endif + +#include "iconveh.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if HAVE_ICONV + +/* A conversion descriptor for use by the iconveh functions. */ +typedef struct + { + /* Conversion descriptor from FROM_CODESET to TO_CODESET, or (iconv_t)(-1) + if the system does not support a direct conversion from FROM_CODESET to + TO_CODESET. */ + iconv_t cd; + /* Conversion descriptor from FROM_CODESET to UTF-8 (or (iconv_t)(-1) if + FROM_CODESET is UTF-8). */ + iconv_t cd1; + /* Conversion descriptor from UTF-8 to TO_CODESET (or (iconv_t)(-1) if + TO_CODESET is UTF-8). */ + iconv_t cd2; + } + iconveh_t; + +/* Open a conversion descriptor for use by the iconveh functions. + If successful, fills *CDP and returns 0. Upon failure, return -1 with errno + set. */ +extern int + iconveh_open (const char *to_codeset, const char *from_codeset, + iconveh_t *cdp); + +/* Close a conversion descriptor created by iconveh_open(). + Return value: 0 if successful, otherwise -1 and errno set. */ +extern int + iconveh_close (const iconveh_t *cd); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + CD points to the conversion descriptor from FROMCODE to TOCODE, created by + the function iconveh_open(). + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + mem_cd_iconveh (const char *src, size_t srclen, + const iconveh_t *cd, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + CD points to the conversion descriptor from FROMCODE to TOCODE, created by + the function iconveh_open(). + Both the "from" and the "to" encoding must use a single NUL byte at the end + of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + str_cd_iconveh (const char *src, + const iconveh_t *cd, + enum iconv_ilseq_handler handler) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#endif + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + mem_iconveh (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + str_iconveh (const char *src, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif + + +#endif /* _STRICONVEH_H */ diff --git a/include/libgnulib/striconveha.h b/include/libgnulib/striconveha.h new file mode 100755 index 0000000..e93d0b4 --- /dev/null +++ b/include/libgnulib/striconveha.h @@ -0,0 +1,100 @@ +/* Character set conversion with error handling and autodetection. + Copyright (C) 2002, 2005, 2007-2024 Free Software Foundation, Inc. + Written by Bruno Haible. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _STRICONVEHA_H +#define _STRICONVEHA_H + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#include "iconveh.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + The "from" encoding can also be a name defined for autodetection. + If TRANSLITERATE is true, transliteration will attempted to avoid conversion + errors, for iconv implementations that support this. Usually you'll choose + TRANSLITERATE = true if HANDLER != iconveh_error. + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + mem_iconveha (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + bool transliterate, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + The "from" encoding can also be a name defined for autodetection. + If TRANSLITERATE is true, transliteration will attempted to avoid conversion + errors, for iconv implementations that support this. Usually you'll choose + TRANSLITERATE = true if HANDLER != iconveh_error. + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + str_iconveha (const char *src, + const char *from_codeset, const char *to_codeset, + bool transliterate, + enum iconv_ilseq_handler handler) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +/* In the above, FROM_CODESET can also be one of the following values: + "autodetect_utf8" supports ISO-8859-1 and UTF-8 + "autodetect_jp" supports EUC-JP, ISO-2022-JP-2 and SHIFT_JIS + "autodetect_kr" supports EUC-KR and ISO-2022-KR + More names can be defined for autodetection. */ + +/* Registers an encoding name for autodetection. + TRY_IN_ORDER is a NULL terminated list of encodings to be tried. + Returns 0 upon success, or -1 (with errno set) in case of error. + Particular errno values: ENOMEM. */ +extern int + uniconv_register_autodetect (const char *name, + const char * const *try_in_order); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _STRICONVEHA_H */ diff --git a/include/libgnulib/string-buffer.h b/include/libgnulib/string-buffer.h new file mode 100755 index 0000000..2d9824e --- /dev/null +++ b/include/libgnulib/string-buffer.h @@ -0,0 +1,205 @@ +/* A buffer that accumulates a string by piecewise concatenation. + Copyright (C) 2021-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2021. */ + +#ifndef _STRING_BUFFER_H +#define _STRING_BUFFER_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL, + _GL_ATTRIBUTE_CAPABILITY_TYPE, _GL_ATTRIBUTE_ACQUIRE_CAPABILITY, + _GL_ATTRIBUTE_RELEASE_CAPABILITY. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#include "attribute.h" +#include "string-desc.h" + +typedef char * _GL_ATTRIBUTE_CAPABILITY_TYPE ("memory resource") + sb_heap_allocated_pointer_t; + +/* A string buffer type. */ +struct string_buffer +{ + sb_heap_allocated_pointer_t data; + size_t length; /* used bytes, <= allocated */ + size_t allocated; /* allocated bytes */ + bool error; /* true if there was an error */ + char space[1024]; /* stack allocated space */ +}; + +#ifdef __cplusplus +extern "C" { +#endif + +/* ================== Functions in module 'string-buffer' ================== */ + +/* Initializes BUFFER to the empty string. */ +extern void sb_init (struct string_buffer *buffer) + _GL_ATTRIBUTE_ACQUIRE_CAPABILITY (buffer->data); + +/* Appends the character C to BUFFER. + Returns 0, or -1 in case of out-of-memory error. */ +extern int sb_append1 (struct string_buffer *buffer, char c); + +/* Appends the contents of the memory area S to BUFFER. + Returns 0, or -1 in case of out-of-memory error. */ +extern int sb_append_desc (struct string_buffer *buffer, string_desc_t s); + +/* Appends the contents of the C string STR to BUFFER. + Returns 0, or -1 in case of out-of-memory error. */ +extern int sb_append_c (struct string_buffer *buffer, const char *str); + +/* Appends the result of the printf-compatible FORMATSTRING with the argument + list LIST to BUFFER. + Returns 0, or -1 with errno set in case of error. + Error code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible error code is ENOMEM. */ +extern int sb_appendvf (struct string_buffer *buffer, + const char *formatstring, va_list list) + #if (__GNUC__ + (__GNUC_MINOR__ >= 4) > 4) && !defined __clang__ + ATTRIBUTE_FORMAT ((__gnu_printf__, 2, 0)) + #else + ATTRIBUTE_FORMAT ((__printf__, 2, 0)) + #endif + ; + +/* Appends the result of the printf-compatible FORMATSTRING with the following + arguments to BUFFER. + Returns 0, or -1 with errno set in case of error. + Error code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible error code is ENOMEM. */ +extern int sb_appendf (struct string_buffer *buffer, + const char *formatstring, ...) + #if (__GNUC__ + (__GNUC_MINOR__ >= 4) > 4) && !defined __clang__ + ATTRIBUTE_FORMAT ((__gnu_printf__, 2, 3)) + #else + ATTRIBUTE_FORMAT ((__printf__, 2, 3)) + #endif + ; + +/* Frees the memory held by BUFFER. */ +extern void sb_free (struct string_buffer *buffer) + _GL_ATTRIBUTE_RELEASE_CAPABILITY (buffer->data); + +/* Returns a read-only view of the current contents of BUFFER. + The result is only valid until the next operation on BUFFER. */ +extern string_desc_t sb_contents (struct string_buffer *buffer); + +/* Ensures the contents of BUFFER is followed by a NUL byte (without + incrementing the length of the contents). + Then returns a read-only view of the current contents of BUFFER, + that is, the current contents of BUFFER as a C string. + Returns NULL upon out-of-memory error. + The result is only valid until the next operation on BUFFER. */ +extern const char * sb_contents_c (struct string_buffer *buffer); + +/* Returns the contents of BUFFER and frees all other memory held by BUFFER. + Returns NULL upon failure or if there was an error earlier. + It is the responsibility of the caller to string_desc_free() the result. */ +extern string_desc_t sb_dupfree (struct string_buffer *buffer) + _GL_ATTRIBUTE_RELEASE_CAPABILITY (buffer->data); + +/* Returns the contents of BUFFER (with an added trailing NUL, that is, + as a C string), and frees all other memory held by BUFFER. + Returns NULL upon failure or if there was an error earlier. + It is the responsibility of the caller to free() the result. */ +extern char * sb_dupfree_c (struct string_buffer *buffer) + _GL_ATTRIBUTE_RELEASE_CAPABILITY (buffer->data); + +/* ================== Functions in module 'xstring-buffer' ================== */ + +#if GNULIB_XSTRING_BUFFER + +/* The following functions invoke xalloc_die () in case of out-of-memory + error. */ + +/* Appends the character C to BUFFER. */ +extern void sb_xappend1 (struct string_buffer *buffer, char c); + +/* Appends the contents of the memory area S to BUFFER. */ +extern void sb_xappend_desc (struct string_buffer *buffer, string_desc_t s); + +/* Appends the contents of the C string STR to BUFFER. */ +extern void sb_xappend_c (struct string_buffer *buffer, const char *str); + +/* Appends the result of the printf-compatible FORMATSTRING with the argument + list LIST to BUFFER. + Returns 0, or -1 in case of error other than out-of-memory error. + Error code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, no error is possible. */ +extern int sb_xappendvf (struct string_buffer *buffer, + const char *formatstring, va_list list) + #if (__GNUC__ + (__GNUC_MINOR__ >= 4) > 4) && !defined __clang__ + ATTRIBUTE_FORMAT ((__gnu_printf__, 2, 0)) + #else + ATTRIBUTE_FORMAT ((__printf__, 2, 0)) + #endif + ; + +/* Appends the result of the printf-compatible FORMATSTRING with the following + arguments to BUFFER. + Returns 0, or -1 in case of error other than out-of-memory error. + Error code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, no error is possible. */ +extern int sb_xappendf (struct string_buffer *buffer, + const char *formatstring, ...) + #if (__GNUC__ + (__GNUC_MINOR__ >= 4) > 4) && !defined __clang__ + ATTRIBUTE_FORMAT ((__gnu_printf__, 2, 3)) + #else + ATTRIBUTE_FORMAT ((__printf__, 2, 3)) + #endif + ; + +/* Ensures the contents of BUFFER is followed by a NUL byte (without + incrementing the length of the contents). + Then returns a read-only view of the current contents of BUFFER, + that is, the current contents of BUFFER as a C string. + The result is only valid until the next operation on BUFFER. */ +extern const char * sb_xcontents_c (struct string_buffer *buffer) + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* Returns the contents of BUFFER and frees all other memory held by BUFFER. + Returns (0, NULL) if there was an error earlier. + It is the responsibility of the caller to string_desc_free() the result. */ +extern string_desc_t sb_xdupfree (struct string_buffer *buffer) + _GL_ATTRIBUTE_RELEASE_CAPABILITY (buffer->data); + +/* Returns the contents of BUFFER (with an added trailing NUL, that is, + as a C string), and frees all other memory held by BUFFER. + Returns NULL if there was an error earlier. + It is the responsibility of the caller to free() the result. */ +extern char * sb_xdupfree_c (struct string_buffer *buffer) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RELEASE_CAPABILITY (buffer->data); + +#endif /* GNULIB_XSTRING_BUFFER */ + +/* ========================================================================== */ + +#ifdef __cplusplus +} +#endif + +#endif /* _STRING_BUFFER_H */ diff --git a/include/libgnulib/string-desc-quotearg.h b/include/libgnulib/string-desc-quotearg.h new file mode 100755 index 0000000..eefc7b0 --- /dev/null +++ b/include/libgnulib/string-desc-quotearg.h @@ -0,0 +1,223 @@ +/* Quote string descriptors for output. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2023. */ + +#ifndef _STRING_DESC_QUOTEARG_H +#define _STRING_DESC_QUOTEARG_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_NONNULL, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "string-desc.h" +#include "quotearg.h" + + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_STRING_DESC_QUOTEARG_INLINE +# define GL_STRING_DESC_QUOTEARG_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG, using O to control quoting. + If O is null, use the default. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + On output, BUFFER might contain embedded null bytes if the style of O + does not use backslash escapes and the flags of O do not request + elision of null bytes. */ +#if 0 +extern size_t string_desc_quotearg_buffer (char *restrict buffer, + size_t buffersize, + string_desc_t arg, + struct quoting_options const *o); +#endif + +/* Like string_desc_quotearg_buffer, except return the result in a newly + allocated buffer and store its length, excluding the terminating null + byte, in *SIZE. It is the caller's responsibility to free the result. + The result might contain embedded null bytes if the style of O does + not use backslash escapes and the flags of O do not request elision + of null bytes. */ +#if 0 +extern char *string_desc_quotearg_alloc (string_desc_t arg, + size_t *size, + struct quoting_options const *o) + _GL_ATTRIBUTE_NONNULL ((2)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; +#endif + +/* Use storage slot N to return a quoted version of the string ARG. + Use the default quoting options. + The returned value points to static storage that can be + reused by the next call to this function with the same value of N. + N must be nonnegative. */ +#if 0 +extern char *string_desc_quotearg_n (int n, string_desc_t arg); +#endif + +/* Equivalent to string_desc_quotearg_n (0, ARG). */ +#if 0 +extern char *string_desc_quotearg (string_desc_t arg); +#endif + +/* Use style S and storage slot N to return a quoted version of the string ARG. + This is like string_desc_quotearg_n (N, ARG), except that it uses S + with no other options to specify the quoting method. */ +#if 0 +extern char *string_desc_quotearg_n_style (int n, enum quoting_style s, + string_desc_t arg); +#endif + +/* Equivalent to string_desc_quotearg_n_style (0, S, ARG). */ +#if 0 +extern char *string_desc_quotearg_style (enum quoting_style s, + string_desc_t arg); +#endif + +/* Like string_desc_quotearg (ARG), except also quote any instances of CH. + See set_char_quoting for a description of acceptable CH values. */ +#if 0 +extern char *string_desc_quotearg_char (string_desc_t arg, char ch); +#endif + +/* Equivalent to string_desc_quotearg_char (ARG, ':'). */ +#if 0 +extern char *string_desc_quotearg_colon (string_desc_t arg); +#endif + +/* Like string_desc_quotearg_n_style (N, S, ARG) but with S as + custom_quoting_style with left quote as LEFT_QUOTE and right quote + as RIGHT_QUOTE. See set_custom_quoting for a description of acceptable + LEFT_QUOTE and RIGHT_QUOTE values. */ +#if 0 +extern char *string_desc_quotearg_n_custom (int n, + char const *left_quote, + char const *right_quote, + string_desc_t arg); +#endif + +/* Equivalent to + string_desc_quotearg_n_custom (0, LEFT_QUOTE, RIGHT_QUOTE, ARG). */ +#if 0 +extern char *string_desc_quotearg_custom (char const *left_quote, + char const *right_quote, + string_desc_t arg); +#endif + + +/* ==== Inline function definitions ==== */ + +GL_STRING_DESC_QUOTEARG_INLINE size_t +string_desc_quotearg_buffer (char *restrict buffer, size_t buffersize, + string_desc_t arg, + struct quoting_options const *o) +{ + return quotearg_buffer (buffer, buffersize, + string_desc_data (arg), string_desc_length (arg), + o); +} + +GL_STRING_DESC_QUOTEARG_INLINE +_GL_ATTRIBUTE_NONNULL ((2)) +_GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE +_GL_ATTRIBUTE_RETURNS_NONNULL +char * +string_desc_quotearg_alloc (string_desc_t arg, + size_t *size, + struct quoting_options const *o) +{ + return quotearg_alloc_mem (string_desc_data (arg), string_desc_length (arg), + size, + o); +} + +GL_STRING_DESC_QUOTEARG_INLINE char * +string_desc_quotearg_n (int n, string_desc_t arg) +{ + return quotearg_n_mem (n, string_desc_data (arg), string_desc_length (arg)); +} + +GL_STRING_DESC_QUOTEARG_INLINE char * +string_desc_quotearg (string_desc_t arg) +{ + return quotearg_mem (string_desc_data (arg), string_desc_length (arg)); +} + +GL_STRING_DESC_QUOTEARG_INLINE char * +string_desc_quotearg_n_style (int n, enum quoting_style s, string_desc_t arg) +{ + return quotearg_n_style_mem (n, s, + string_desc_data (arg), string_desc_length (arg)); +} + +GL_STRING_DESC_QUOTEARG_INLINE char * +string_desc_quotearg_style (enum quoting_style s, string_desc_t arg) +{ + return quotearg_style_mem (s, + string_desc_data (arg), string_desc_length (arg)); +} + +GL_STRING_DESC_QUOTEARG_INLINE char * +string_desc_quotearg_char (string_desc_t arg, char ch) +{ + return quotearg_char_mem (string_desc_data (arg), string_desc_length (arg), + ch); +} + +GL_STRING_DESC_QUOTEARG_INLINE char * +string_desc_quotearg_colon (string_desc_t arg) +{ + return quotearg_colon_mem (string_desc_data (arg), string_desc_length (arg)); +} + +GL_STRING_DESC_QUOTEARG_INLINE char * +string_desc_quotearg_n_custom (int n, + char const *left_quote, char const *right_quote, + string_desc_t arg) +{ + return quotearg_n_custom_mem (n, left_quote, right_quote, + string_desc_data (arg), string_desc_length (arg)); +} + +GL_STRING_DESC_QUOTEARG_INLINE char * +string_desc_quotearg_custom (char const *left_quote, char const *right_quote, + string_desc_t arg) +{ + return quotearg_custom_mem (left_quote, right_quote, + string_desc_data (arg), string_desc_length (arg)); +} + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + + +#endif /* _STRING_DESC_QUOTEARG_H */ diff --git a/include/libgnulib/string-desc.h b/include/libgnulib/string-desc.h new file mode 100755 index 0000000..0b82871 --- /dev/null +++ b/include/libgnulib/string-desc.h @@ -0,0 +1,238 @@ +/* String descriptors. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2023. */ + +#ifndef _STRING_DESC_H +#define _STRING_DESC_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + _GL_ATTRIBUTE_NODISCARD. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get ptrdiff_t. */ +#include + +/* Get FILE. */ +#include + +/* Get abort(), free(). */ +#include + +/* Get idx_t. */ +#include "idx.h" + + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_STRING_DESC_INLINE +# define GL_STRING_DESC_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Type describing a string that may contain NUL bytes. + It's merely a descriptor of an array of bytes. */ +typedef struct string_desc_t string_desc_t; +struct string_desc_t +{ + /* The fields of this struct should be considered private. */ + idx_t _nbytes; + char *_data; +}; + +/* String descriptors can be passed and returned by value. + + String descriptors and NUL-terminated 'const char *'/'char *' C strings + cannot be used interchangeably. You will get compilation errors if you + attempt to assign a string descriptor to a C string or vice versa. */ + + +/* ==== Side-effect-free operations on string descriptors ==== */ + +/* Return the length of the string S. */ +#if 0 /* Defined inline below. */ +extern idx_t string_desc_length (string_desc_t s); +#endif + +/* Return the byte at index I of string S. + I must be < length(S). */ +#if 0 /* Defined inline below. */ +extern char string_desc_char_at (string_desc_t s, idx_t i); +#endif + +/* Return a read-only view of the bytes of S. */ +#if 0 /* Defined inline below. */ +extern const char * string_desc_data (string_desc_t s); +#endif + +/* Return true if S is the empty string. */ +#if 0 /* Defined inline below. */ +extern bool string_desc_is_empty (string_desc_t s); +#endif + +/* Return true if A and B are equal. */ +extern bool string_desc_equals (string_desc_t a, string_desc_t b); + +/* Return true if S starts with PREFIX. */ +extern bool string_desc_startswith (string_desc_t s, string_desc_t prefix); + +/* Return true if S ends with SUFFIX. */ +extern bool string_desc_endswith (string_desc_t s, string_desc_t suffix); + +/* Return > 0, == 0, or < 0 if A > B, A == B, A < B. + This uses a lexicographic ordering, where the bytes are compared as + 'unsigned char'. */ +extern int string_desc_cmp (string_desc_t a, string_desc_t b); + +/* Return > 0, == 0, or < 0 if A > B, A == B, A < B. + Either A or B must be entirely ASCII. + This uses a lexicographic ordering, where the bytes are compared as + 'unsigned char', ignoring case, in the "C" locale. */ +extern int string_desc_c_casecmp (string_desc_t a, string_desc_t b); + +/* Return the index of the first occurrence of C in S, + or -1 if there is none. */ +extern ptrdiff_t string_desc_index (string_desc_t s, char c); + +/* Return the index of the last occurrence of C in S, + or -1 if there is none. */ +extern ptrdiff_t string_desc_last_index (string_desc_t s, char c); + +/* Return the index of the first occurrence of NEEDLE in HAYSTACK, + or -1 if there is none. */ +extern ptrdiff_t string_desc_contains (string_desc_t haystack, string_desc_t needle); + +/* Return an empty string. */ +extern string_desc_t string_desc_new_empty (void); + +/* Construct and return a string of length N, at the given memory address. */ +extern string_desc_t string_desc_new_addr (idx_t n, char *addr); + +/* Return a string that represents the C string S, of length strlen (S). */ +extern string_desc_t string_desc_from_c (const char *s); + +/* Return the substring of S, starting at offset START and ending at offset END. + START must be <= END. + The result is of length END - START. + The result must not be freed (since its storage is part of the storage + of S). */ +extern string_desc_t string_desc_substring (string_desc_t s, idx_t start, idx_t end); + +/* Output S to the file descriptor FD. + Return 0 if successful. + Upon error, return -1 with errno set. */ +extern int string_desc_write (int fd, string_desc_t s); + +/* Output S to the FILE stream FP. + Return 0 if successful. + Upon error, return -1. */ +extern int string_desc_fwrite (FILE *fp, string_desc_t s); + + +/* ==== Memory-allocating operations on string descriptors ==== */ + +/* Construct a string of length N, with uninitialized contents. + Return 0 if successful. + Upon error, return -1 with errno set. */ +_GL_ATTRIBUTE_NODISCARD +extern int string_desc_new (string_desc_t *resultp, idx_t n); + +/* Construct a string of length N, filled with C. + Return 0 if successful. + Upon error, return -1 with errno set. */ +_GL_ATTRIBUTE_NODISCARD +extern int string_desc_new_filled (string_desc_t *resultp, idx_t n, char c); + +/* Construct a copy of string S. + Return 0 if successful. + Upon error, return -1 with errno set. */ +_GL_ATTRIBUTE_NODISCARD +extern int string_desc_copy (string_desc_t *resultp, string_desc_t s); + +/* Construct the concatenation of N strings. N must be > 0. + Return 0 if successful. + Upon error, return -1 with errno set. */ +_GL_ATTRIBUTE_NODISCARD +extern int string_desc_concat (string_desc_t *resultp, idx_t n, string_desc_t string1, ...); + +/* Construct a copy of string S, as a NUL-terminated C string. + Return it is successful. + Upon error, return NULL with errno set. */ +extern char * string_desc_c (string_desc_t s) _GL_ATTRIBUTE_DEALLOC_FREE; + + +/* ==== Operations with side effects on string descriptors ==== */ + +/* Overwrite the byte at index I of string S with C. + I must be < length(S). */ +extern void string_desc_set_char_at (string_desc_t s, idx_t i, char c); + +/* Fill part of S, starting at offset START and ending at offset END, + with copies of C. + START must be <= END. */ +extern void string_desc_fill (string_desc_t s, idx_t start, idx_t end, char c); + +/* Overwrite part of S with T, starting at offset START. + START + length(T) must be <= length (S). */ +extern void string_desc_overwrite (string_desc_t s, idx_t start, string_desc_t t); + +/* Free S. */ +extern void string_desc_free (string_desc_t s); + + +/* ==== Inline function definitions ==== */ + +GL_STRING_DESC_INLINE idx_t +string_desc_length (string_desc_t s) +{ + return s._nbytes; +} + +GL_STRING_DESC_INLINE char +string_desc_char_at (string_desc_t s, idx_t i) +{ + if (!(i >= 0 && i < s._nbytes)) + /* Invalid argument. */ + abort (); + return s._data[i]; +} + +GL_STRING_DESC_INLINE const char * +string_desc_data (string_desc_t s) +{ + return s._data; +} + +GL_STRING_DESC_INLINE bool +string_desc_is_empty (string_desc_t s) +{ + return s._nbytes == 0; +} + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + + +#endif /* _STRING_DESC_H */ diff --git a/include/libgnulib/strnlen1.h b/include/libgnulib/strnlen1.h new file mode 100755 index 0000000..8943f3e --- /dev/null +++ b/include/libgnulib/strnlen1.h @@ -0,0 +1,45 @@ +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _STRNLEN1_H +#define _STRNLEN1_H + +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + If no '\0' terminator is found in that many characters, return MAXLEN. */ +/* This is the same as strnlen (string, maxlen - 1) + 1. */ +extern size_t strnlen1 (const char *string, size_t maxlen) + _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + + +#endif /* _STRNLEN1_H */ diff --git a/include/libgnulib/struniq.h b/include/libgnulib/struniq.h new file mode 100755 index 0000000..e67ea0f --- /dev/null +++ b/include/libgnulib/struniq.h @@ -0,0 +1,119 @@ +/* Define a file-local string uniquification function. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + + +/* This file needs the following includes: + + #include + #include + #include + #include "flexmember.h" + #include "glthread/lock.h" + #include "thread-optim.h" + + and the following gnulib modules as dependencies: + + flexmember + lock + stdbool + thread-optim + */ + + +/* Simple hash set of strings. We don't want to drag in lots of hash table + code here. */ + +#define SIZE_BITS (sizeof (size_t) * CHAR_BIT) + +/* A hash function for NUL-terminated char* strings using + the method described by Bruno Haible. + See https://www.haible.de/bruno/hashfunc.html. */ +static size_t _GL_ATTRIBUTE_PURE +string_hash (const void *x) +{ + const char *s = (const char *) x; + size_t h = 0; + + for (; *s; s++) + h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); + + return h; +} + +/* A hash table of fixed size. Multiple threads can access it read-only + simultaneously, but only one thread can insert into it at the same time. */ + +/* A node in a hash bucket collision list. */ +struct struniq_hash_node + { + struct struniq_hash_node * volatile next; + char contents[FLEXIBLE_ARRAY_MEMBER]; + }; + +#define STRUNIQ_HASH_TABLE_SIZE 257 +static struct struniq_hash_node * volatile struniq_hash_table[STRUNIQ_HASH_TABLE_SIZE] + /* = { NULL, ..., NULL } */; + +/* This lock protects the struniq_hash_table against multiple simultaneous + insertions. */ +gl_lock_define_initialized(static, struniq_lock) + +/* Store a copy of the given string in a string pool with indefinite extent. + Return a pointer to this copy. */ +static const char * +struniq (const char *string) +{ + size_t hashcode = string_hash (string); + size_t slot = hashcode % STRUNIQ_HASH_TABLE_SIZE; + size_t size; + struct struniq_hash_node *new_node; + struct struniq_hash_node *p; + for (p = struniq_hash_table[slot]; p != NULL; p = p->next) + if (strcmp (p->contents, string) == 0) + return p->contents; + size = strlen (string) + 1; + new_node = + (struct struniq_hash_node *) + malloc (FLEXSIZEOF (struct struniq_hash_node, contents, size)); + if (new_node == NULL) + /* Out of memory. Return a statically allocated string. */ + return "C"; + memcpy (new_node->contents, string, size); + { + bool mt = gl_multithreaded (); + /* Lock while inserting new_node. */ + if (mt) gl_lock_lock (struniq_lock); + /* Check whether another thread already added the string while we were + waiting on the lock. */ + for (p = struniq_hash_table[slot]; p != NULL; p = p->next) + if (strcmp (p->contents, string) == 0) + { + free (new_node); + new_node = p; + goto done; + } + /* Really insert new_node into the hash table. Fill new_node entirely + first, because other threads may be iterating over the linked list. */ + new_node->next = struniq_hash_table[slot]; + struniq_hash_table[slot] = new_node; + done: + /* Unlock after new_node is inserted. */ + if (mt) gl_lock_unlock (struniq_lock); + } + return new_node->contents; +} diff --git a/include/libgnulib/supersede.h b/include/libgnulib/supersede.h new file mode 100755 index 0000000..f77d3c3 --- /dev/null +++ b/include/libgnulib/supersede.h @@ -0,0 +1,156 @@ +/* Open a file, without destroying an old file with the same name. + + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Bruno Haible, 2020. */ + +#ifndef _GL_SUPERSEDE_H +#define _GL_SUPERSEDE_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* When writing a file, for some usages it is important that at any moment, + a process that opens the file will see consistent data in the file. This + can be important in two situations: + * If supersede_if_exists == true, then when the file already existed, + it is important that a process that opens the file while the new file's + contents is being written sees consistent data - namely the old file's + data. + * If supersede_if_does_not_exist == true, then when the file did not exist, + it is important that a process that opens the file while the new file's + contents is being written sees no file (as opposed to a file with + truncated contents). + + In both situations, the effect is implemented by creating a temporary file, + writing into that temporary file, and renaming the temporary file when the + temporary file's contents is complete. + + Note that opening a file with superseding may fail when it would succeed + without superseding (for example, for a writable file in an unwritable + directory). And also the other way around: Opening a file with superseding + may succeed although it would fail without superseding (for example, for + an unwritable file in a writable directory). */ + +/* This type holds everything that needs to needs to be remembered in order to + execute the final rename action. */ +struct supersede_final_action +{ + char *final_rename_temp; + char *final_rename_dest; +}; + +/* =================== open() and close() with supersede =================== */ + +/* The typical code idiom is like this: + + struct supersede_final_action action; + int fd = open_supersede (filename, O_RDWR, mode, + supersede_if_exists, supersede_if_does_not_exist, + &action); + if (fd >= 0) + { + ... write the file's contents ... + if (successful) + { + if (close_supersede (fd, &action) < 0) + error (...); + } + else + { + // Abort the operation. + close (fd); + close_supersede (-1, &action); + } + } + */ + +/* Opens a file (typically for writing) in superseding mode, depending on + supersede_if_exists and supersede_if_does_not_exist. + FLAGS should not contain O_CREAT nor O_EXCL. + MODE is used when the file does not yet exist. The umask of the process + is considered, like in open(), i.e. the effective mode is + (MODE & ~ getumask ()). + Upon success, it fills in ACTION and returns a file descriptor. + Upon failure, it returns -1 and sets errno. */ +extern int open_supersede (const char *filename, int flags, mode_t mode, + bool supersede_if_exists, + bool supersede_if_does_not_exist, + struct supersede_final_action *action); + +/* Closes a file and executes the final rename action. + FD must have been returned by open_supersede(), or -1 if you want to abort + the operation. */ +extern int close_supersede (int fd, + const struct supersede_final_action *action); + +/* ================== fopen() and fclose() with supersede ================== */ + +/* The typical code idiom is like this: + + struct supersede_final_action action; + FILE *stream = + fopen_supersede (filename, O_RDWR, mode, + supersede_if_exists, supersede_if_does_not_exist, + &action); + if (stream != NULL) + { + ... write the file's contents ... + if (successful) + { + if (fclose_supersede (stream, &action) < 0) + error (...); + } + else + { + // Abort the operation. + fclose (stream); + fclose_supersede (NULL, &action); + } + } + */ + +/* Opens a file (typically for writing) in superseding mode, depending on + supersede_if_exists and supersede_if_does_not_exist. + Upon success, it fills in ACTION and returns a file stream. + Upon failure, it returns NULL and sets errno. */ +extern FILE *fopen_supersede (const char *filename, const char *mode, + bool supersede_if_exists, + bool supersede_if_does_not_exist, + struct supersede_final_action *action); + +/* Closes a file stream and executes the final rename action. + STREAM must have been returned by fopen_supersede(), or NULL if you want to + abort the operation. */ +extern int fclose_supersede (FILE *stream, + const struct supersede_final_action *action); + +/* Closes a file stream, like with fwriteerror, and executes the final rename + action. + STREAM must have been returned by fopen_supersede(), or NULL if you want to + abort the operation. */ +extern int fwriteerror_supersede (FILE *stream, + const struct supersede_final_action *action); + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_SUPERSEDE_H */ diff --git a/include/libgnulib/sys-limits.h b/include/libgnulib/sys-limits.h new file mode 100755 index 0000000..d2f29d8 --- /dev/null +++ b/include/libgnulib/sys-limits.h @@ -0,0 +1,42 @@ +/* System call limits + + Copyright 2018-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_SYS_LIMITS_H +#define _GL_SYS_LIMITS_H + +#include + +/* Maximum number of bytes to read or write in a single system call. + This can be useful for system calls like sendfile on GNU/Linux, + which do not handle more than MAX_RW_COUNT bytes correctly. + The Linux kernel MAX_RW_COUNT is at least INT_MAX >> 20 << 20, + where the 20 comes from the Hexagon port with 1 MiB pages; use that + as an approximation, as the exact value may not be available to us. + + Using this also works around a serious Linux bug before 2.6.16; see + . + + Using this also works around a Tru64 5.1 bug, where attempting + to read INT_MAX bytes fails with errno == EINVAL. See + . + + Using this is likely to work around similar bugs in other operating + systems. */ + +enum { SYS_BUFSIZE_MAX = INT_MAX >> 20 << 20 }; + +#endif diff --git a/include/libgnulib/system-quote.h b/include/libgnulib/system-quote.h new file mode 100755 index 0000000..ba9d704 --- /dev/null +++ b/include/libgnulib/system-quote.h @@ -0,0 +1,108 @@ +/* Quoting for a system command. + Copyright (C) 2001-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2012. + + 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 3 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, see . */ + +#ifndef _SYSTEM_QUOTE_H +#define _SYSTEM_QUOTE_H + +/* When passing a command the system's command interpreter, we must quote the + program name and arguments, since + - Unix shells interpret characters like " ", "'", "<", ">", "$", '*', '?' + etc. in a special way, + - Windows CreateProcess() interprets characters like ' ', '\t', '\\', '"' + etc. (but not '<' and '>') in a special way, + - Windows cmd.exe also interprets characters like '<', '>', '&', '%', etc. + in a special way. Note that it is impossible to pass arguments that + contain newlines or carriage return characters to programs through + cmd.exe. + - Windows programs usually perform wildcard expansion when they receive + arguments that contain unquoted '*', '?' characters. + + With this module, you can build a command that will invoke a program with + specific strings as arguments. + + Note: If you want wildcard expansion to happen, you have to first do wildcard + expansion through the 'glob' module, then quote the resulting strings through + this module, and then invoke the system's command interpreter. + + Limitations: + - When invoking native Windows programs on Windows Vista or newer, + wildcard expansion will occur in the invoked program nevertheless. + - On native Windows, for SCI_SYSTEM and SCI_WINDOWS_CMD, newlines and + carriage return characters are not supported. Their undesired effect + is to truncate the entire command line. + */ + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Identifier for the kind of interpreter of the command. */ +enum system_command_interpreter +{ + /* The interpreter used by the system() and popen() functions. + This is equivalent to SCI_POSIX_SH on Unix platforms and + SCI_WINDOWS_CMD on native Windows platforms. */ + SCI_SYSTEM = 0 + /* The POSIX /bin/sh. */ + , SCI_POSIX_SH = 1 +#if defined _WIN32 && ! defined __CYGWIN__ + /* The native Windows CreateProcess() function. */ + , SCI_WINDOWS_CREATEPROCESS = 2 + /* The native Windows cmd.exe interpreter. */ + , SCI_WINDOWS_CMD = 3 +#endif +}; + +/* Returns the number of bytes needed for the quoted string. */ +extern size_t + system_quote_length (enum system_command_interpreter interpreter, + const char *string); + +/* Copies the quoted string to p and returns the incremented p. + There must be room for system_quote_length (string) + 1 bytes at p. */ +extern char * + system_quote_copy (char *restrict p, + enum system_command_interpreter interpreter, + const char *string); + +/* Returns the freshly allocated quoted string. */ +extern char * + system_quote (enum system_command_interpreter interpreter, + const char *string) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* Returns a freshly allocated string containing all argument strings, quoted, + separated through spaces. */ +extern char * + system_quote_argv (enum system_command_interpreter interpreter, + char * const *argv) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYSTEM_QUOTE_H */ diff --git a/include/libgnulib/t-idcache b/include/libgnulib/t-idcache new file mode 100755 index 0000000..0a08d49 --- /dev/null +++ b/include/libgnulib/t-idcache @@ -0,0 +1,52 @@ +#!/bin/sh +# Compare the two halves (user and group) of idcache.c. +# Once xformed, they'd better be the same: + +pwd=`pwd` +t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$ +trap 'status=$?; cd "$pwd" && chmod -R u+rwx $t0 && rm -rf $t0 && exit $status' EXIT +trap '(exit $?); exit $?' HUP INT PIPE TERM + +srcdir=../.. +framework_failure=0 +mkdir -p $tmp || framework_failure=1 +cd $tmp || framework_failure=1 + +if test $framework_failure = 1; then + echo "$0: failure in testing framework" 1>&2 + (exit 1); exit 1 +fi + +# Extract user-oriented functions. +perl -ne \ + 'print if /^static struct.*user_alist/ .. /^static struct.*group_alist/' \ + $srcdir/idcache.c | head -n -3 > u +# Extract group-oriented functions. +perl -ne 'print if /^static struct.*group_alist/ .. eof' $srcdir/idcache.c > g + +# Convert user-specific strings of "u" into corresponding group-specific strings +subst=' +s/user_/group_/g; +s/\buser\b/group/g; +s/USER/GROUP/g; +s/\bu\b/g/g; +s/passwd/group/g; +s/pw_uid/gr_gid/g; +s/pwnam/grnam/g; +s/pwent/grent/g; +s/getpw/getgr/g; +s/pw_/gr_/g; +s/UID/GID/g; +s/uid/gid/g; +s/getuser/getgroup/; +s/login name/group name/; +s/to be the/to belong to/; +s/pwd fun/grp fun/; +' + +fail=0 +# Ensure that the transformed "u" is the same as g. +# Any differences here constitute an error. +perl -pe "$subst" u | diff -u - g || fail=1 + +exit $fail diff --git a/include/libgnulib/tempname.h b/include/libgnulib/tempname.h new file mode 100755 index 0000000..7cbdac9 --- /dev/null +++ b/include/libgnulib/tempname.h @@ -0,0 +1,72 @@ +/* Create a temporary file or directory. + + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* header written by Eric Blake */ + +#ifndef GL_TEMPNAME_H +# define GL_TEMPNAME_H + +# include + +# ifdef __GT_FILE +# define GT_FILE __GT_FILE +# define GT_DIR __GT_DIR +# define GT_NOCREATE __GT_NOCREATE +# else +# define GT_FILE 0 +# define GT_DIR 1 +# define GT_NOCREATE 2 +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix). + The name constructed does not exist at the time of the call to + gen_tempname. TMPL is overwritten with the result. + + KIND may be one of: + GT_NOCREATE: simply verify that the name does not exist + at the time of the call. + GT_FILE: create a large file using open(O_CREAT|O_EXCL) + and return a read-write fd. The file is mode 0600. + GT_DIR: create a directory, which will be mode 0700. + + */ +extern int gen_tempname (char *tmpl, int suffixlen, int flags, int kind); +/* Similar, except X_SUFFIX_LEN gives the number of Xs. */ +extern int gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind, + size_t x_suffix_len); + +/* Similar to gen_tempname, but TRYFUNC is called for each temporary + name to try. If TRYFUNC returns a non-negative number, TRY_GEN_TEMPNAME + returns with this value. Otherwise, if errno is set to EEXIST, another + name is tried, or else TRY_GEN_TEMPNAME returns -1. */ +extern int try_tempname (char *tmpl, int suffixlen, void *args, + int (*tryfunc) (char *, void *)); +/* Similar, except X_SUFFIX_LEN gives the number of Xs. */ +extern int try_tempname_len (char *tmpl, int suffixlen, void *args, + int (*tryfunc) (char *, void *), + size_t x_suffix_len); + +#ifdef __cplusplus +} +#endif + +#endif /* GL_TEMPNAME_H */ diff --git a/include/libgnulib/term-style-control.h b/include/libgnulib/term-style-control.h new file mode 100755 index 0000000..5b57f75 --- /dev/null +++ b/include/libgnulib/term-style-control.h @@ -0,0 +1,185 @@ +/* Terminal control for outputting styled text to a terminal. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2019. + + 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 3 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, see . */ + +#ifndef _TERM_STYLE_CONTROL_H +#define _TERM_STYLE_CONTROL_H + +/* The user of this file will define a macro 'term_style_user_data', such that + 'struct term_style_user_data' is a user-defined struct. */ + +/* This file uses _GL_ASYNC_SAFE, HAVE_TCGETATTR. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + + +/* The amount of control to take over the underlying tty in order to avoid + garbled output on the screen, due to interleaved output of escape sequences + and output from the kernel (such as when the kernel echoes user's input + or when the kernel prints '^C' after the user pressed Ctrl-C). */ +typedef enum +{ + TTYCTL_AUTO = 0, /* Automatic best-possible choice. */ + TTYCTL_NONE, /* No control. + Result: Garbled output can occur, and the terminal can + be left in any state when the program is interrupted. */ + TTYCTL_PARTIAL, /* Signal handling. + Result: Garbled output can occur, but the terminal will + be left in the default state when the program is + interrupted. */ + TTYCTL_FULL /* Signal handling and disabling echo and flush-upon-signal. + Result: No garbled output, and the terminal will + be left in the default state when the program is + interrupted. */ +} ttyctl_t; + +/* This struct contains data, used by implementation of this module. + You should not access the members of this struct; they may be renamed or + removed without notice. */ +struct term_style_control_data +{ + int volatile fd; + ttyctl_t volatile tty_control; /* Signal handling and tty control. */ + #if HAVE_TCGETATTR + bool volatile same_as_stderr; + #endif + bool non_default_active; /* True if activate_term_non_default_mode() + is in effect. */ +}; + +/* Forward declaration. */ +struct term_style_user_data; + +/* This struct contains function pointers. You implement these functions + in your application; this module invokes them when it needs to. */ +struct term_style_controller +{ + /* This function returns a pointer to the embedded + 'struct term_style_control_data' contained in a + 'struct term_style_user_data'. */ + struct term_style_control_data * (*get_control_data) (struct term_style_user_data *); + + /* This function brings the terminal's state back to the default state + (no styling attributes set). It is invoked when the process terminates + through exit(). */ + void (*restore) (struct term_style_user_data *); + + /* This function brings the terminal's state back to the default state + (no styling attributes set). It is async-safe (see gnulib-common.m4 for + the precise definition). It is invoked when the process receives a fatal + or stopping signal. */ + _GL_ASYNC_SAFE void (*async_restore) (struct term_style_user_data *); + + /* This function brings the terminal's state, from the default state, back + to the state where it has the desired attributes set. It is async-safe + (see gnulib-common.m4 for the precise definition). It is invoked when + the process receives a SIGCONT signal. */ + _GL_ASYNC_SAFE void (*async_set_attributes_from_default) (struct term_style_user_data *); +}; + + +#ifdef __cplusplus +extern "C" { +#endif + +/* This module is used as follows: + 1. You fill a 'struct term_style_controller' with function pointers. + You create a 'struct term_style_user_data' that contains, among other + members, a 'struct term_style_control_data'. + You will pass these two objects to all API functions below. + 2. You call activate_term_style_controller to activate this controller. + Activation of the controller is the prerequisite for activating + the non-default mode, which in turn is the prerequisite for changing + the terminal's attributes. + When you are done with the styled output, you may deactivate the + controller. This is not required before exiting the program, but is + required before activating a different controller. + You cannot have more than one controller activated at the same time. + 3. Once the controller is activated, you may turn on the non-default mode. + The non-default mode is the prerequisite for changing the terminal's + attributes. Once the terminal's attributes are in the default state + again, you may turn off the non-default mode again. + In other words: + - In the default mode, the terminal's attributes MUST be in the default + state; no styled output is possible. + - In the non-default mode, the terminal's attributes MAY switch among + the default state and other states. + This module exercises a certain amount of control over the terminal + during the non-default mode phases; see above (ttyctl_t) for details. + You may switch between the default and the non-default modes any number + of times. + The idea is that you switch back to the default mode before doing large + amounts of output of unstyled text. However, this is not a requirement: + You may leave the non-default mode turned on all the time until the + the program exits. + 4. Once the non-default mode is activated, you may change the attributes + (foreground color, background color, font weight, font posture, underline + decoration, etc.) of the terminal. On Unix, this is typically done by + outputting appropriate escape sequences. + 5. Once attributes are set, text output to the terminal will be rendered + with these attributes. + Note: You MUST return the terminal to the default state before outputting + a newline. + */ + +/* Activates a controller. The CONTROLLER and its USER_DATA controls the + terminal associated with FD. FD is usually STDOUT_FILENO. + TTY_CONTROL specifies the amount of control to take over the underlying tty. + The effects of this functions are undone by calling + deactivate_term_style_controller. + You cannot have more than one controller activated at the same time. + You must not close FD while the controller is active. */ +extern void + activate_term_style_controller (const struct term_style_controller *controller, + struct term_style_user_data *user_data, + int fd, ttyctl_t tty_control); + +/* Activates the non-default mode. + CONTROLLER and its USER_DATA must be a currently active controller. + This function fiddles with the signals of the current process and with + the underlying tty, to an extent described by TTY_CONTROL. + This function is idempotent: When you call it twice in a row, the second + invocation does nothing. + The effects of this function are undone by calling + deactivate_term_non_default_mode. */ +extern void + activate_term_non_default_mode (const struct term_style_controller *controller, + struct term_style_user_data *user_data); + +/* Deactivates the non-default mode. + CONTROLLER and its USER_DATA must be a currently active controller. + This function is idempotent: When you call it twice in a row, the second + invocation does nothing. + Before invoking this function, you must put the terminal's attributes in + the default state. */ +extern void + deactivate_term_non_default_mode (const struct term_style_controller *controller, + struct term_style_user_data *user_data); + +/* Deactivates a controller. + CONTROLLER and its USER_DATA must be a currently active controller. + Before invoking this function, you must ensure that the non-default mode + is deactivated. */ +extern void + deactivate_term_style_controller (const struct term_style_controller *controller, + struct term_style_user_data *user_data); + +#ifdef __cplusplus +} +#endif + +#endif /* _TERM_STYLE_CONTROL_H */ diff --git a/include/libgnulib/termcap.h b/include/libgnulib/termcap.h new file mode 100755 index 0000000..0cd472d --- /dev/null +++ b/include/libgnulib/termcap.h @@ -0,0 +1,123 @@ +/* Information about terminal capabilities. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2006. */ + +#ifndef _TERMCAP_H +#define _TERMCAP_H + +/* This file uses HAVE_TERMCAP, HAVE_TERMINFO, HAVE_TPARAM. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Including or is dangerous, because it also declares + a lot of junk, such as variables PC, UP, and other. */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if HAVE_TERMCAP + +/* Gets the capability information for terminal type TYPE. + BP must point to a buffer, at least 2048 bytes large. + Returns 1 if successful, 0 if TYPE is unknown, -1 on other error. */ +extern int tgetent (char *bp, const char *type); + +/* Retrieves the value of a numerical capability. + Returns -1 if it is not available. */ +extern int tgetnum (const char *id); + +/* Retrieves the value of a boolean capability. + Returns 1 if it available, 0 otherwise. */ +extern int tgetflag (const char *id); + +/* Retrieves the value of a string capability. + Returns NULL if it is not available. + Also, if AREA != NULL, stores it at *AREA and advances *AREA. */ +extern const char * tgetstr (const char *id, char **area); + +#endif + +#if HAVE_TERMINFO + +/* Gets the capability information for terminal type TYPE and prepares FD. + Returns 0 if successful, -1 upon error. If ERRP is non-NULL, also returns + an error indicator in *ERRP; otherwise an error is signalled. */ +extern int setupterm (const char *type, int fd, int *errp); + +/* Retrieves the value of a numerical capability. + Returns -1 if it is not available, -2 if ID is invalid. */ +extern int tigetnum (const char *id); + +/* Retrieves the value of a boolean capability. + Returns 1 if it available, 0 if not available, -1 if ID is invalid. */ +extern int tigetflag (const char *id); + +/* Retrieves the value of a string capability. + Returns NULL if it is not available, (char *)(-1) if ID is invalid. */ +extern const char * tigetstr (const char *id); + +#endif + +#if HAVE_TPARAM + +/* API provided by GNU termcap in . */ + +/* Instantiates a string capability with format strings. + BUF must be a buffer having room for BUFSIZE bytes. + The return value is either equal to BUF or freshly malloc()ed. */ +extern char * tparam (const char *str, void *buf, int bufsize, ...); + +#else + +/* API provided by + - GNU ncurses in , , , + - OSF/1 curses in , , + - Solaris, AIX, HP-UX, IRIX curses in , + - gnulib's replacement. */ + +/* Instantiates a string capability with format strings. + The return value is statically allocated and must not be freed. */ +extern char * tparm (const char *str, ...); + +#endif + +#if HAVE_TERMCAP || HAVE_TERMINFO + +/* Retrieves a string that causes cursor positioning to (column, row). + This function is necessary because the string returned by tgetstr ("cm") + is in a special format. */ +extern const char * tgoto (const char *cm, int column, int row); + +#endif + +/* Retrieves the value of a string capability. + OUTCHARFUN is called in turn for each 'char' of the result. + This function is necessary because string capabilities can contain + padding commands. */ +extern void tputs (const char *cp, int affcnt, int (*outcharfun) (int)); + +/* The ncurses functions for color handling (see ncurses/base/lib_color.c) + are overkill: Most terminal emulators support only a fixed, small number + of colors. */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TERMCAP_H */ diff --git a/include/libgnulib/terminfo.h b/include/libgnulib/terminfo.h new file mode 100755 index 0000000..1c5f111 --- /dev/null +++ b/include/libgnulib/terminfo.h @@ -0,0 +1,121 @@ +/* Information about terminal capabilities. + Copyright (C) 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2006. */ + +#ifndef _TERMINFO_H +#define _TERMINFO_H + +/* This file uses HAVE_TERMINFO, HAVE_TERMCAP, HAVE_TPARAM. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Including or is dangerous, because it also declares + a lot of junk, such as variables PC, UP, and other. */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if HAVE_TERMINFO + +/* Gets the capability information for terminal type TYPE and prepares FD. + Returns 0 if successful, -1 upon error. If ERRP is non-NULL, also returns + an error indicator in *ERRP; otherwise an error is signalled. */ +extern int setupterm (const char *type, int fd, int *errp); + +/* Retrieves the value of a numerical capability. + Returns -1 if it is not available, -2 if ID is invalid. */ +extern int tigetnum (const char *id); + +/* Retrieves the value of a boolean capability. + Returns 1 if it available, 0 if not available, -1 if ID is invalid. */ +extern int tigetflag (const char *id); + +/* Retrieves the value of a string capability. + Returns NULL if it is not available, (char *)(-1) if ID is invalid. */ +extern const char * tigetstr (const char *id); + +#elif HAVE_TERMCAP + +/* Gets the capability information for terminal type TYPE. + BP must point to a buffer, at least 2048 bytes large. + Returns 1 if successful, 0 if TYPE is unknown, -1 on other error. */ +extern int tgetent (char *bp, const char *type); + +/* Retrieves the value of a numerical capability. + Returns -1 if it is not available. */ +extern int tgetnum (const char *id); + +/* Retrieves the value of a boolean capability. + Returns 1 if it available, 0 otherwise. */ +extern int tgetflag (const char *id); + +/* Retrieves the value of a string capability. + Returns NULL if it is not available. + Also, if AREA != NULL, stores it at *AREA and advances *AREA. */ +extern const char * tgetstr (const char *id, char **area); + +#endif + +#if HAVE_TPARAM + +/* API provided by GNU termcap in . */ + +/* Instantiates a string capability with format strings. + BUF must be a buffer having room for BUFSIZE bytes. + The return value is either equal to BUF or freshly malloc()ed. */ +extern char * tparam (const char *str, void *buf, int bufsize, ...); + +#else + +/* API provided by + - GNU ncurses in , , , + - OSF/1 curses in , , + - Solaris, AIX, HP-UX, IRIX curses in , + - gnulib's replacement. */ + +/* Instantiates a string capability with format strings. + The return value is statically allocated and must not be freed. */ +extern char * tparm (const char *str, ...); + +#endif + +#if HAVE_TERMINFO || HAVE_TERMCAP + +/* Retrieves a string that causes cursor positioning to (column, row). + This function is necessary because the string returned by tgetstr ("cm") + is in a special format. */ +extern const char * tgoto (const char *cm, int column, int row); + +#endif + +/* Retrieves the value of a string capability. + OUTCHARFUN is called in turn for each 'char' of the result. + This function is necessary because string capabilities can contain + padding commands. */ +extern void tputs (const char *cp, int affcnt, int (*outcharfun) (int)); + +/* The ncurses functions for color handling (see ncurses/base/lib_color.c) + are overkill: Most terminal emulators support only a fixed, small number + of colors. */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TERMINFO_H */ diff --git a/include/libgnulib/thread-optim.h b/include/libgnulib/thread-optim.h new file mode 100755 index 0000000..4bcc8af --- /dev/null +++ b/include/libgnulib/thread-optim.h @@ -0,0 +1,65 @@ +/* Optimization of multithreaded code. + + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +#ifndef _THREAD_OPTIM_H +#define _THREAD_OPTIM_H + +/* This file defines a way to optimize multithreaded code for the single-thread + case, based on the variable '__libc_single_threaded', defined in + glibc >= 2.32. */ + +/* Typical use: In a block or function, use + + bool mt = gl_multithreaded (); + ... + if (mt) + if (pthread_mutex_lock (&lock)) abort (); + ... + if (mt) + if (pthread_mutex_unlock (&lock)) abort (); + + The gl_multithreaded () invocation determines whether the program currently + is multithreaded. + + if (mt) STATEMENT executes STATEMENT in the multithreaded case, and skips + it in the single-threaded case. + + The code between the gl_multithreaded () invocation and any use of the + variable 'mt' must not create threads or invoke functions that may + indirectly create threads (e.g. 'dlopen' may, indirectly through C++ + initializers of global variables in the shared library being opened, + create threads). + + The lock here is meant to synchronize threads in the same process. The + same optimization cannot be applied to locks that synchronize different + processes (e.g. through shared memory mappings). */ + +/* This file uses HAVE_SYS_SINGLE_THREADED_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if HAVE_SYS_SINGLE_THREADED_H /* glibc >= 2.32 */ +# include +# define gl_multithreaded() (!__libc_single_threaded) +#else +# define gl_multithreaded() 1 +#endif + +#endif /* _THREAD_OPTIM_H */ diff --git a/include/libgnulib/time-internal.h b/include/libgnulib/time-internal.h new file mode 100755 index 0000000..3d778ba --- /dev/null +++ b/include/libgnulib/time-internal.h @@ -0,0 +1,54 @@ +/* Time internal interface + + Copyright 2015-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +/* This file is for Gnulib internal use only. + Applications should not use it. */ + +/* A time zone rule. */ +struct tm_zone +{ + /* More abbreviations, should they be needed. Their TZ_IS_SET + members are zero. */ + struct tm_zone *next; + + /* If nonzero, the rule represents the TZ environment variable set + to the first "abbreviation" (this may be the empty string). + Otherwise, it represents an unset TZ. */ + char tz_is_set; + + /* A sequence of null-terminated strings packed next to each other. + The strings are followed by an extra null byte. If TZ_IS_SET, + there must be at least one string and the first string (which is + actually a TZ environment value) may be empty. Otherwise all + strings must be nonempty. + + Abbreviations are stored here even on platforms with tm_zone, because + otherwise tm_zone values would be dead after changing TZ and calling + tzset. Abbreviations never move once allocated, and are live + until tzfree is called. */ + char abbrs[FLEXIBLE_ARRAY_MEMBER]; +}; + +timezone_t set_tz (timezone_t); +bool revert_tz (timezone_t); + +/* Magic cookie timezone_t value, for local time. It differs from + NULL and from all other timezone_t values. Only the address + matters; the pointer is never dereferenced. */ +#define local_tz ((timezone_t) 1) diff --git a/include/libgnulib/timespec.h b/include/libgnulib/timespec.h new file mode 100755 index 0000000..69ce348 --- /dev/null +++ b/include/libgnulib/timespec.h @@ -0,0 +1,102 @@ +/* timespec -- System time interface + + Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if ! defined TIMESPEC_H +#define TIMESPEC_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_CONST, + _GL_ATTRIBUTE_PURE, _GL_CMP. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_TIMESPEC_INLINE +# define _GL_TIMESPEC_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "arg-nonnull.h" + +/* Inverse resolution of timespec timestamps (in units per second), + and log base 10 of the inverse resolution. */ + +enum { TIMESPEC_HZ = 1000000000 }; +enum { LOG10_TIMESPEC_HZ = 9 }; + +/* Obsolescent names for backward compatibility. + They are misnomers, because TIMESPEC_RESOLUTION is not a resolution. */ + +enum { TIMESPEC_RESOLUTION = TIMESPEC_HZ }; +enum { LOG10_TIMESPEC_RESOLUTION = LOG10_TIMESPEC_HZ }; + +/* Return a timespec with seconds S and nanoseconds NS. */ + +_GL_TIMESPEC_INLINE struct timespec +make_timespec (time_t s, long int ns) +{ + return (struct timespec) { .tv_sec = s, .tv_nsec = ns }; +} + +/* Return negative, zero, positive if A < B, A == B, A > B, respectively. */ + +_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE +timespec_cmp (struct timespec a, struct timespec b) +{ + return 2 * _GL_CMP (a.tv_sec, b.tv_sec) + _GL_CMP (a.tv_nsec, b.tv_nsec); +} + +/* Return -1, 0, 1, depending on the sign of A. A.tv_nsec must be + nonnegative. */ +_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE +timespec_sign (struct timespec a) +{ + return _GL_CMP (a.tv_sec, 0) + (!a.tv_sec & !!a.tv_nsec); +} + +struct timespec timespec_add (struct timespec, struct timespec) + _GL_ATTRIBUTE_CONST; +struct timespec timespec_sub (struct timespec, struct timespec) + _GL_ATTRIBUTE_CONST; +struct timespec dtotimespec (double) + _GL_ATTRIBUTE_CONST; + +/* Return an approximation to A, of type 'double'. */ +_GL_TIMESPEC_INLINE double +timespectod (struct timespec a) +{ + return a.tv_sec + a.tv_nsec / 1e9; +} + +long int gettime_res (void); +struct timespec current_timespec (void); +void gettime (struct timespec *) _GL_ARG_NONNULL ((1)); +int settime (struct timespec const *) _GL_ARG_NONNULL ((1)); + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/include/libgnulib/timevar.def b/include/libgnulib/timevar.def new file mode 100755 index 0000000..acfa0a4 --- /dev/null +++ b/include/libgnulib/timevar.def @@ -0,0 +1,52 @@ +/* This file contains the definitions for timing variables used to -*- C -*- + measure run-time performance of the compiler. + + Copyright (C) 2002, 2007, 2009-2015, 2018-2024 Free Software Foundation, + Inc. + + Contributed by Akim Demaille . + + 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 3 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, see . */ + +/* This file contains the list of timing variable definitions, used by + timevar.h and timevar.c. + + Syntax: + + DEFTIMEVAR (Id, Name) + + where: + + - Id is the value used to identify the timing variable. + It's an enum value, i.e., behaves like a nonnegative integer. + It is used only the manipulate the timer: the user of the + program will never see this identifier. + + - Name is a string describing its purpose. This string + will be presented to the user in the timing tables. It does not + need to be a literal, you may for instance use gettext. + + The order of this list matters: that is the order in which the + timing table is printed, except that 'tv_total' is printed last. + */ + +/* The total execution time. Mandatory. */ +DEFTIMEVAR (tv_total, "total time") + +/* Examples. */ +DEFTIMEVAR (tv_read, "read") +DEFTIMEVAR (tv_work, "work") +DEFTIMEVAR (tv_work_1, "work: phase 1") +DEFTIMEVAR (tv_work_2, "work: phase 2") +DEFTIMEVAR (tv_output, "output") diff --git a/include/libgnulib/timevar.h b/include/libgnulib/timevar.h new file mode 100755 index 0000000..d7d05e7 --- /dev/null +++ b/include/libgnulib/timevar.h @@ -0,0 +1,138 @@ +/* Timing variables for measuring application performance. + + Copyright (C) 2000, 2002, 2004, 2009-2015, 2018-2024 Free Software + Foundation, Inc. + + Contributed by Alex Samuel + + 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 3 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, see . */ + +#ifndef _TIMEVAR_H +# define _TIMEVAR_H 1 + +# include + +# include "xtime.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* Timing variables are used to measure elapsed time in various + portions of the application. Each measures elapsed user, system, and + wall-clock time, as appropriate to and supported by the host + system. + + Timing variables are defined using the DEFTIMEVAR macro in + timevar.def. Each has an identifier of type timevar_id_t, used to refer + to the timing variable in code, and a character string name. + + Timing variables can be used in two ways: + + - On the timing stack, using timevar_push and timevar_pop. + Timing variables may be pushed onto the stack; elapsed time is + attributed to the topmost timing variable on the stack. When + another variable is pushed on, the previous topmost variable is + 'paused' until the pushed variable is popped back off. + + - As a standalone timer, using timevar_start and timevar_stop. + All time elapsed between the two calls is attributed to the + variable. +*/ + +/* This structure stores the various varieties of time that can be + measured. Times are stored in seconds. The time may be an + absolute time or a time difference; in the former case, the time + base is undefined, except that the difference between two times + produces a valid time difference. */ + +struct timevar_time_def +{ + /* User time in this process. */ + xtime_t user; + + /* System time (if applicable for this host platform) in this + process. */ + xtime_t sys; + + /* Wall clock time. */ + xtime_t wall; +}; + +/* An enumeration of timing variable identifiers. Constructed from + the contents of timevar.def. */ + +#define DEFTIMEVAR(identifier__, name__) \ + identifier__, +typedef enum +{ +#include "timevar.def" + TIMEVAR_LAST +} +timevar_id_t; +#undef DEFTIMEVAR + +/* Initialize timing variables. */ + +void timevar_init (void); + +/* Push TIMEVAR onto the timing stack. No further elapsed time is + attributed to the previous topmost timing variable on the stack; + subsequent elapsed time is attributed to TIMEVAR, until it is + popped or another element is pushed on top. + + TIMEVAR cannot be running as a standalone timer. */ + +void timevar_push (timevar_id_t timevar); + +/* Pop the topmost timing variable element off the timing stack. The + popped variable must be TIMEVAR. Elapsed time since the that + element was pushed on, or since it was last exposed on top of the + stack when the element above it was popped off, is credited to that + timing variable. */ + +void timevar_pop (timevar_id_t timevar); + +/* Start timing TIMEVAR independently of the timing stack. Elapsed + time until timevar_stop is called for the same timing variable is + attributed to TIMEVAR. */ + +void timevar_start (timevar_id_t timevar); + +/* Stop timing TIMEVAR. Time elapsed since timevar_start was called + is attributed to it. */ + +void timevar_stop (timevar_id_t timevar); + +/* Fill the elapsed time for TIMEVAR into ELAPSED. Returns + update-to-date information even if TIMEVAR is currently running. */ + +void timevar_get (timevar_id_t timevar, struct timevar_time_def *elapsed); + +/* Summarize timing variables to FP. The timing variable TV_TOTAL has + a special meaning -- it's considered to be the total elapsed time, + for normalizing the others, and is displayed last. */ + +void timevar_print (FILE *fp); + +/* Set to to nonzero to enable timing variables. All the timevar + functions make an early exit if timevar is disabled. */ + +extern int timevar_enabled; + +# ifdef __cplusplus +} +# endif + +#endif /* ! _TIMEVAR_H */ diff --git a/include/libgnulib/tmpdir.h b/include/libgnulib/tmpdir.h new file mode 100755 index 0000000..f5493ae --- /dev/null +++ b/include/libgnulib/tmpdir.h @@ -0,0 +1,35 @@ +/* Determine a temporary directory. + Copyright (C) 2001-2002, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is + non-null and exists, uses it; otherwise uses the first of $TMPDIR, + P_tmpdir, /tmp that exists. Copies into TMPL a template suitable + for use with mk[s]temp. Will fail (-1) if DIR is non-null and + doesn't exist, none of the searched dirs exists, or there's not + enough space in TMPL. */ +extern int path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, bool try_tmpdir); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/towctrans-impl.h b/include/libgnulib/towctrans-impl.h new file mode 100755 index 0000000..47fdfed --- /dev/null +++ b/include/libgnulib/towctrans-impl.h @@ -0,0 +1,22 @@ +/* Convert a wide character using a case mapping. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wint_t +towctrans (wint_t wc, wctrans_t desc) +{ + return ((wint_t (*) (wint_t)) desc) (wc); +} diff --git a/include/libgnulib/trigl.h b/include/libgnulib/trigl.h new file mode 100755 index 0000000..ac3e3ad --- /dev/null +++ b/include/libgnulib/trigl.h @@ -0,0 +1,35 @@ +/* Declarations for sinl, cosl, tanl internal functions. -*- coding: utf-8 -*- + Contributed by Paolo Bonzini + + Copyright 2002-2003, 2009-2024 Free Software Foundation, Inc. + + This file is part of gnulib. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Decompose x into x = k * π/2 + r + where k is an integer and abs(r) <= π/4. + Store r in y[0] and y[1] (main part in y[0], small additional part in + y[1], r = y[0] + y[1]). + Return k. */ +extern int ieee754_rem_pio2l (long double x, long double *y); + +/* Compute and return sinl (x + y), where x is the main part and y is the + small additional part of a floating-point number. + iy is 0 when y is known to be 0.0, otherwise iy is 1. */ +extern long double kernel_sinl (long double x, long double y, int iy); + +/* Compute and return cosl (x + y), where x is the main part and y is the + small additional part of a floating-point number. */ +extern long double kernel_cosl (long double x, long double y); diff --git a/include/libgnulib/trim.h b/include/libgnulib/trim.h new file mode 100755 index 0000000..33a5fee --- /dev/null +++ b/include/libgnulib/trim.h @@ -0,0 +1,52 @@ +/* Removes leading and/or trailing whitespaces + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Davide Angelocola */ + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Trim mode. */ +#define TRIM_TRAILING 0 +#define TRIM_LEADING 1 +#define TRIM_BOTH 2 + +/* Removes trailing and leading whitespaces. */ +#define trim(s) trim2(s, TRIM_BOTH) + +/* Removes trailing whitespaces. */ +#define trim_trailing(s) trim2(s, TRIM_TRAILING) + +/* Removes leading whitespaces. */ +#define trim_leading(s) trim2(s, TRIM_LEADING) + +char *trim2 (const char *, int) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/u64.h b/include/libgnulib/u64.h new file mode 100755 index 0000000..cfb5588 --- /dev/null +++ b/include/libgnulib/u64.h @@ -0,0 +1,211 @@ +/* uint64_t-like operations that work even on hosts lacking uint64_t + + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#include + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_U64_INLINE +# define _GL_U64_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef UINT64_MAX + +/* Native implementations are trivial. See below for comments on what + these operations do. */ +typedef uint64_t u64; +# define u64hilo(hi, lo) ((u64) (((u64) (hi) << 32) + (lo))) +# define u64init(hi, lo) u64hilo (hi, lo) +# define u64lo(x) ((u64) (x)) +# define u64size(x) u64lo (x) +# define u64lt(x, y) ((x) < (y)) +# define u64and(x, y) ((x) & (y)) +# define u64or(x, y) ((x) | (y)) +# define u64xor(x, y) ((x) ^ (y)) +# define u64plus(x, y) ((x) + (y)) +# define u64shl(x, n) ((x) << (n)) +# define u64shr(x, n) ((x) >> (n)) +# define u64bswap(x) bswap_64 (x) + +#else + +# define _GL_U64_MASK32 0xfffffffful /* 2**32 - 1. */ + +/* u64 represents a 64-bit unsigned integer value equal to (HI << 32) + LO. + Implement it with unsigned int, which the GNU coding standards say + is wide enough to hold 32 bits, and which does not signal an error + when adding (theoretically possible with types like uint_fast32_t). + u64init (HI, LO), is like u64hilo (HI, LO), but for use in + initializer contexts. */ +# ifdef WORDS_BIGENDIAN +typedef struct { unsigned int hi, lo; } u64; +# define u64init(hi, lo) { hi, lo } +# else +typedef struct { unsigned int lo, hi; } u64; +# define u64init(hi, lo) { lo, hi } +# endif + +/* Given the high and low-order 32-bit quantities HI and LO, return a u64 + value representing (HI << 32) + LO. */ +_GL_U64_INLINE u64 +u64hilo (unsigned int hi, unsigned int lo) +{ + u64 r; + r.hi = hi; + r.lo = lo; + return r; +} + +/* Return a u64 value representing the 32-bit quantity LO. */ +_GL_U64_INLINE u64 +u64lo (unsigned int lo) +{ + u64 r; + r.hi = 0; + r.lo = lo; + return r; +} + +/* Return a u64 value representing SIZE, where 0 <= SIZE < 2**64. */ +_GL_U64_INLINE u64 +u64size (size_t size) +{ + u64 r; + r.hi = size >> 31 >> 1; + r.lo = size & _GL_U64_MASK32; + return r; +} + +/* Return X < Y. */ +_GL_U64_INLINE bool +u64lt (u64 x, u64 y) +{ + return x.hi < y.hi || (x.hi == y.hi && x.lo < y.lo); +} + +/* Return X & Y. */ +_GL_U64_INLINE u64 +u64and (u64 x, u64 y) +{ + u64 r; + r.hi = x.hi & y.hi; + r.lo = x.lo & y.lo; + return r; +} + +/* Return X | Y. */ +_GL_U64_INLINE u64 +u64or (u64 x, u64 y) +{ + u64 r; + r.hi = x.hi | y.hi; + r.lo = x.lo | y.lo; + return r; +} + +/* Return X ^ Y. */ +_GL_U64_INLINE u64 +u64xor (u64 x, u64 y) +{ + u64 r; + r.hi = x.hi ^ y.hi; + r.lo = x.lo ^ y.lo; + return r; +} + +/* Return X + Y, wrapping around on overflow. */ +_GL_U64_INLINE u64 +u64plus (u64 x, u64 y) +{ + u64 r; + r.lo = (x.lo + y.lo) & _GL_U64_MASK32; + r.hi = (x.hi + y.hi + (r.lo < x.lo)) & _GL_U64_MASK32; + return r; +} + +/* Return X << N, where 0 <= N < 64. */ +_GL_U64_INLINE u64 +u64shl (u64 x, int n) +{ + u64 r; + if (n < 32) + { + r.hi = (x.hi << n & _GL_U64_MASK32) | x.lo >> (32 - n); + r.lo = x.lo << n & _GL_U64_MASK32; + } + else + { + r.hi = x.lo << (n - 32) & _GL_U64_MASK32; + r.lo = 0; + } + return r; +} + +/* Return X >> N. */ +_GL_U64_INLINE u64 +u64shr (u64 x, int n) +{ + u64 r; + if (n < 32) + { + r.hi = x.hi >> n; + r.lo = (x.hi << (32 - n) & _GL_U64_MASK32) | x.lo >> n; + } + else + { + r.hi = 0; + r.lo = x.hi >> (n - 32); + } + return r; +} + +/* Return X with bytes in reverse order. */ +_GL_U64_INLINE u64 +u64bswap (u64 x) +{ + return u64hilo (bswap_32 (x.lo), bswap_32 (x.hi)); +} + +#endif + +/* Return X rotated left by N bits, where 0 < N < 64. */ +_GL_U64_INLINE u64 +u64rol (u64 x, int n) +{ + return u64or (u64shl (x, n), u64shr (x, 64 - n)); +} + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END diff --git a/include/libgnulib/unicase/cased.h b/include/libgnulib/unicase/cased.h new file mode 100755 index 0000000..16e548e --- /dev/null +++ b/include/libgnulib/unicase/cased.h @@ -0,0 +1,407 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Casing Properties of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + unsigned int level3[25 << 4]; + } +u_casing_property_cased = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + 3 + 256 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 368, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, + 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFF0U, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFEFFFFFU, 0x01FFFFFFU, 0x00000003U, 0x0000001FU, + 0x00000000U, 0x00000000U, 0x00000020U, 0xBCCF0000U, + 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFEFFFFU, 0x007FFFFFU, 0xFFFFFFFFU, + 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFF07FFU, 0xE7FFFFFFU, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, + 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, + 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x3E2FFC84U, 0xF21FBD50U, 0x000043E0U, 0xFFFFFFFFU, + 0x00000018U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x000003FFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, + 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00003FFFU, + 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFF78FFU, 0xFFFFFFFFU, 0x1FEB3FFFU, 0x077C0000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFF0000U, 0xF7FFFFFFU, 0xFFFF03FFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, + 0x00000000U, 0xFFFF0000U, 0xFF0FFFFFU, 0x0FFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0xF7FF0000U, + 0xFFB7F7FFU, 0x1BFBFFFBU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFB9U, 0x07FDFFFFU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, + 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF003FU, + 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, + 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, + 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, + 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, + 0xFFFFFDFFU, 0xFFFFFDFFU, 0x00000FF7U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x7FFFFBFFU, 0x000007E0U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x00003FFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFF0000U, 0xFFFF03FFU, 0xFFFF03FFU, + 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U + } +}; diff --git a/include/libgnulib/unicase/casefold.h b/include/libgnulib/unicase/casefold.h new file mode 100755 index 0000000..bb32067 --- /dev/null +++ b/include/libgnulib/unicase/casefold.h @@ -0,0 +1,40 @@ +/* Casefolding of Unicode characters. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#include "unitypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return the casefold mapping of a Unicode character. */ +extern ucs4_t + uc_tocasefold (ucs4_t uc); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/unicase/caseprop.h b/include/libgnulib/unicase/caseprop.h new file mode 100755 index 0000000..d6b95bd --- /dev/null +++ b/include/libgnulib/unicase/caseprop.h @@ -0,0 +1,51 @@ +/* Case related properties of Unicode characters. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#include "unitypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine whether a character is "cased" according to the Unicode Standard, + , section 3.13, + definition D120. */ +extern bool + uc_is_cased (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Determine whether a character is "case-ignorable" + according to the Unicode Standard, + , section 3.13, + definition D121. */ +extern bool + uc_is_case_ignorable (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/unicase/context.h b/include/libgnulib/unicase/context.h new file mode 100755 index 0000000..541da56 --- /dev/null +++ b/include/libgnulib/unicase/context.h @@ -0,0 +1,73 @@ +/* Case-mapping contexts of UTF-8/UTF-16/UTF-32 substring. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + + +/* The context of a prefix string combines the information of the "Before C" + conditions of the Unicode Standard, + , section 3.13, + table 3-14 "Context Specification for Casing". + + casing_prefix_context_t contains the following fields: + + // Helper for evaluating the FINAL_SIGMA condition: + // Last character that was not case-ignorable. + ucs4_t last_char_except_ignorable; + + // Helper for evaluating the AFTER_SOFT_DOTTED and AFTER_I conditions: + // Last character that was of combining class 230 ("Above") or 0. + ucs4_t last_char_normal_or_above; + + Three bits would be sufficient to carry the context information, but + that would require to invoke uc_is_cased and uc_is_property_soft_dotted + ahead of time, more often than actually needed. */ + + +/* The context of a suffix string combines the information of the "After C" + conditions of the Unicode Standard, + , section 3.13, + table 3-14 "Context Specification for Casing". + + casing_suffix_context_t contains the following fields: + + // For evaluating the FINAL_SIGMA condition: + // First character that was not case-ignorable. + ucs4_t first_char_except_ignorable; + + // For evaluating the MORE_ABOVE condition: + // Bit 0 is set if the suffix contains a character of combining class + // 230 (Above) with no character of combining class 0 or 230 (Above) + // before it. + // + // For evaluating the BEFORE_DOT condition: + // Bit 1 is set if the suffix contains a COMBINING DOT ABOVE (U+0307) + // with no character of combining class 0 or 230 (Above) before it. + // + uint32_t bits; + + Three bits would be sufficient to carry the context information, but + that would require to invoke uc_is_cased ahead of time, more often than + actually needed. */ +#define SCC_MORE_ABOVE_MASK 1 +#define SCC_BEFORE_DOT_MASK 2 diff --git a/include/libgnulib/unicase/ignorable.h b/include/libgnulib/unicase/ignorable.h new file mode 100755 index 0000000..c59ceab --- /dev/null +++ b/include/libgnulib/unicase/ignorable.h @@ -0,0 +1,676 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Casing Properties of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + unsigned int level3[57 << 4]; + } +u_casing_property_case_ignorable = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + 16 + 384 * sizeof (short) / sizeof (int) + 0, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + 16 + 384 * sizeof (short) / sizeof (int) + 112, + 16 + 384 * sizeof (short) / sizeof (int) + 128, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 160, + 16 + 384 * sizeof (short) / sizeof (int) + 176, + 16 + 384 * sizeof (short) / sizeof (int) + 192, + 16 + 384 * sizeof (short) / sizeof (int) + 208, + 16 + 384 * sizeof (short) / sizeof (int) + 224, + 16 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 256, + 16 + 384 * sizeof (short) / sizeof (int) + 272, + 16 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 304, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 320, + 16 + 384 * sizeof (short) / sizeof (int) + 336, + 16 + 384 * sizeof (short) / sizeof (int) + 352, + 16 + 384 * sizeof (short) / sizeof (int) + 368, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 384, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 400, + 16 + 384 * sizeof (short) / sizeof (int) + 416, + 16 + 384 * sizeof (short) / sizeof (int) + 432, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 448, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 464, + 16 + 384 * sizeof (short) / sizeof (int) + 480, + 16 + 384 * sizeof (short) / sizeof (int) + 496, + 16 + 384 * sizeof (short) / sizeof (int) + 512, + 16 + 384 * sizeof (short) / sizeof (int) + 528, + 16 + 384 * sizeof (short) / sizeof (int) + 544, + 16 + 384 * sizeof (short) / sizeof (int) + 560, + 16 + 384 * sizeof (short) / sizeof (int) + 576, + 16 + 384 * sizeof (short) / sizeof (int) + 592, + 16 + 384 * sizeof (short) / sizeof (int) + 608, + 16 + 384 * sizeof (short) / sizeof (int) + 624, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 640, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 656, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 672, + 16 + 384 * sizeof (short) / sizeof (int) + 688, + 16 + 384 * sizeof (short) / sizeof (int) + 704, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 720, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 736, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 752, + 16 + 384 * sizeof (short) / sizeof (int) + 768, + 16 + 384 * sizeof (short) / sizeof (int) + 784, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 800, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 816, + 16 + 384 * sizeof (short) / sizeof (int) + 832, + 16 + 384 * sizeof (short) / sizeof (int) + 848, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 864, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 880, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 896, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000U, 0x04004000U, 0x40000000U, 0x00000001U, + 0x00000000U, 0x0190A100U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFE000000U, 0xFFFFFFFCU, 0xFFFFFFE0U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFDFU, 0x0030FFFFU, + 0x000000B0U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x000003F8U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x82000000U, 0x00000000U, + 0xFFFE0000U, 0xBFFFFFFFU, 0x000000B6U, 0x00100000U, + 0x17FF003FU, 0x00000000U, 0xFFFFF801U, 0x00010000U, + 0x00000000U, 0x00000000U, 0xBFC00000U, 0x00003DFFU, + 0x00028000U, 0xFFFF0000U, 0x000007FFU, 0x00000000U, + 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x243FF800U, + 0xFFC00000U, 0x00003FFFU, 0x0E000000U, 0x00000000U, + 0xFF830100U, 0x00000000U, 0xFFFFFE00U, 0xFFFFFFFFU, + 0x00000007U, 0x14000000U, 0x00FE21FEU, 0x0002000CU, + 0x00000002U, 0x10000000U, 0x0000201EU, 0x4000000CU, + 0x00000006U, 0x10000000U, 0x00023986U, 0x00230000U, + 0x00000006U, 0x10000000U, 0x000021BEU, 0xFC00000CU, + 0x00000002U, 0x90000000U, 0x0060201EU, 0x0000000CU, + 0x00000004U, 0x00000000U, 0x00002001U, 0x00000000U, + 0x00000011U, 0xD0000000U, 0x00603DC1U, 0x0000000CU, + 0x00000002U, 0x90000000U, 0x00003040U, 0x0000000CU, + 0x00000003U, 0x18000000U, 0x0000201EU, 0x0000000CU, + 0x00000002U, 0x00000000U, 0x005C0400U, 0x00000000U, + 0x00000000U, 0x07F20000U, 0x00007FC0U, 0x00000000U, + 0x00000000U, 0x1FF20000U, 0x00007F40U, 0x00000000U, + 0x03000000U, 0x02A00000U, 0x00000000U, 0x7FFE0000U, + 0xFEFFE0DFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, + 0x00000000U, 0x66FDE000U, 0xC3000000U, 0x001E0001U, + 0x20002064U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x001C0000U, 0x000C0000U, 0x000C0000U, 0x000C0000U, + 0x00000000U, 0x3FB00000U, 0x208FFE40U, 0x00000000U, + 0x0000F800U, 0x00000000U, 0x00000008U, 0x00000000U, + 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x0E040187U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x09800000U, 0x00000000U, 0x7F400000U, 0x9FF81FE5U, + 0x00000000U, 0xFFFF0080U, 0x00007FFFU, 0x00000000U, + 0x0000000FU, 0x17D00000U, 0x00000004U, 0x000FF800U, + 0x00000003U, 0x00003B3CU, 0x00000000U, 0x0003A340U, + 0x00000000U, 0x00CFF000U, 0x00000000U, 0x3F000000U, + 0x00000000U, 0x00000000U, 0xFFF70000U, 0x031021FDU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xA0000000U, 0xE000E003U, 0x6000E000U, + 0x0300F800U, 0x00007C90U, 0x00000000U, 0x0000FFDFU, + 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0001FFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00038000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x80008000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, + 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000020U, 0x083E3C00U, 0x00000000U, 0x00000000U, + 0x7E000000U, 0x00000000U, 0x00000000U, 0x70000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00200000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00001000U, 0x00000000U, 0x00000000U, 0xBFF78000U, + 0xC0000000U, 0x00000000U, 0x00000000U, 0x00030000U, + 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, + 0x00000700U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000844U, 0x00001060U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000030U, 0x8003FFFFU, + 0x00000000U, 0x00003FC0U, 0x0003FF80U, 0x00000000U, + 0x00000007U, 0x33C80000U, 0x00008000U, 0x00000060U, + 0x00000000U, 0x00667E00U, 0x00001008U, 0x10010000U, + 0x00000000U, 0xC19D0000U, 0x20000002U, 0x00583000U, + 0x00000000U, 0x00000000U, 0x08000000U, 0x00000C00U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00002120U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFC0000U, 0x00000007U, 0x00000000U, + 0x0008FFFFU, 0x0000FFFFU, 0x00240000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, + 0x04004080U, 0x40000000U, 0x00000001U, 0x00010000U, + 0xC0000000U, 0x00000000U, 0x00000000U, 0x0E000008U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000006U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x0000F06EU, 0x87000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x000000F0U, 0x00004000U, 0x0000BE00U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00001800U, 0x00000000U, 0xF0000000U, + 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, + 0x0000003CU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000002U, 0xFF000000U, 0x0000007FU, 0x80190000U, + 0x00000003U, 0x26780000U, 0x00002004U, 0x00000000U, + 0x00000007U, 0x001FEF80U, 0x00000000U, 0x00080000U, + 0x00000003U, 0x7FC00000U, 0x00009E00U, 0x00000000U, + 0x00000000U, 0x40D38000U, 0x00000002U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x80000000U, 0x000007F8U, + 0x00000003U, 0x18000000U, 0x00000001U, 0x001F1FC0U, + 0x00000000U, 0xF8000000U, 0x00054001U, 0x00000006U, + 0x00000000U, 0xFF000000U, 0x4000005CU, 0x00000000U, + 0x00000000U, 0x85F80000U, 0x0000000DU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xB03C0000U, 0x30000001U, 0x00000000U, + 0x00000000U, 0xA7F80000U, 0x00000001U, 0x00000000U, + 0x00000000U, 0x00BF2800U, 0x00000000U, 0x00000000U, + 0xA0000000U, 0x00000FBCU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x06FF8000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x58000000U, 0x00000008U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x0CF00000U, 0x00000001U, + 0x000007FEU, 0x79F80000U, 0x0E7E0080U, 0x00000000U, + 0x037FFC00U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xBF7F0000U, 0x00000000U, 0x00000000U, + 0xFFFC0000U, 0x006DFCFFU, 0x00000000U, 0x00000000U, + 0x00000000U, 0xB47E0000U, 0x000000BFU, 0x00000000U, + 0x00A30000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00180000U, + 0x00000003U, 0x07C00000U, 0x04000005U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFF0000U, 0x003FFF81U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xC0000000U, 0x0000E3FFU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, + 0x00000000U, 0x007F0000U, 0x0000000FU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000007U, 0x00001800U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, + 0xFFFF8000U, 0x00000000U, 0x00000000U, 0x0000001BU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x6FEF0000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x60000000U, 0x0000000FU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFF3FFFU, 0x0000007FU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80380U, + 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, + 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, + 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x3FFF0000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00004000U, 0x00000000U, 0x0000F000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F800U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000FF0U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000000U, + 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU + } +}; diff --git a/include/libgnulib/unicase/invariant.h b/include/libgnulib/unicase/invariant.h new file mode 100755 index 0000000..136c630 --- /dev/null +++ b/include/libgnulib/unicase/invariant.h @@ -0,0 +1,62 @@ +/* Internal functions for Unicode character case mappings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#include + +#include "unitypes.h" +#include "uninorm.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return true if mapping NFD(S) to via MAPPING is a no-op. */ +extern int + u8_is_invariant (const uint8_t *s, size_t n, + uint8_t * (*mapping) (const uint8_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp), + const char *iso639_language, + bool *resultp); +extern int + u16_is_invariant (const uint16_t *s, size_t n, + uint16_t * (*mapping) (const uint16_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp), + const char *iso639_language, + bool *resultp); +extern int + u32_is_invariant (const uint32_t *s, size_t n, + uint32_t * (*mapping) (const uint32_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp), + const char *iso639_language, + bool *resultp); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/unicase/locale-languages.gperf b/include/libgnulib/unicase/locale-languages.gperf new file mode 100755 index 0000000..9db1558 --- /dev/null +++ b/include/libgnulib/unicase/locale-languages.gperf @@ -0,0 +1,300 @@ +/* Language codes of locales. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +%language=ANSI-C +%define hash-function-name uc_locale_language_hash +%define lookup-function-name uc_locale_languages_lookup +%compare-lengths +%compare-strncmp +%readonly-tables +%pic +/* List of languages taken from gettext/gettext-tools/src/lang-table.c + on 2009-02-07. */ +%% +"aa", /* Afar" */ +"ab", /* Abkhazian" */ +"ace", /* Achinese" */ +"ae", /* Avestan" */ +"af", /* Afrikaans" */ +"ak", /* Akan" */ +"am", /* Amharic" */ +"an", /* Aragonese" */ +"ang", /* Old English" */ +"ar", /* Arabic" */ +"as", /* Assamese" */ +"ast", /* Asturian" */ +"av", /* Avaric" */ +"awa", /* Awadhi" */ +"ay", /* Aymara" */ +"az", /* Azerbaijani" */ +"ba", /* Bashkir" */ +"bal", /* Baluchi" */ +"ban", /* Balinese" */ +"be", /* Belarusian" */ +"bej", /* Beja" */ +"bem", /* Bemba" */ +"bg", /* Bulgarian" */ +"bh", /* Bihari" */ +"bho", /* Bhojpuri" */ +"bi", /* Bislama" */ +"bik", /* Bikol" */ +"bin", /* Bini" */ +"bm", /* Bambara" */ +"bn", /* Bengali" */ +"bo", /* Tibetan" */ +"br", /* Breton" */ +"bs", /* Bosnian" */ +"bug", /* Buginese" */ +"ca", /* Catalan" */ +"ce", /* Chechen" */ +"ceb", /* Cebuano" */ +"ch", /* Chamorro" */ +"co", /* Corsican" */ +"cr", /* Cree" */ +"crh", /* Crimean Tatar" */ +"cs", /* Czech" */ +"csb", /* Kashubian" */ +"cu", /* Church Slavic" */ +"cv", /* Chuvash" */ +"cy", /* Welsh" */ +"da", /* Danish" */ +"de", /* German" */ +"din", /* Dinka" */ +"doi", /* Dogri" */ +"dv", /* Divehi" */ +"dz", /* Dzongkha" */ +"ee", /* Ewe" */ +"el", /* Greek" */ +"en", /* English" */ +"eo", /* Esperanto" */ +"es", /* Spanish" */ +"et", /* Estonian" */ +"eu", /* Basque" */ +"fa", /* Persian" */ +"ff", /* Fulah" */ +"fi", /* Finnish" */ +"fil", /* Filipino" */ +"fj", /* Fijian" */ +"fo", /* Faroese" */ +"fon", /* Fon" */ +"fr", /* French" */ +"fur", /* Friulian" */ +"fy", /* Western Frisian" */ +"ga", /* Irish" */ +"gd", /* Scottish Gaelic" */ +"gl", /* Galician" */ +"gn", /* Guarani" */ +"gon", /* Gondi" */ +"gsw", /* Swiss German" */ +"gu", /* Gujarati" */ +"gv", /* Manx" */ +"ha", /* Hausa" */ +"he", /* Hebrew" */ +"hi", /* Hindi" */ +"hil", /* Hiligaynon" */ +"hmn", /* Hmong" */ +"ho", /* Hiri Motu" */ +"hr", /* Croatian" */ +"ht", /* Haitian" */ +"hu", /* Hungarian" */ +"hy", /* Armenian" */ +"hz", /* Herero" */ +"ia", /* Interlingua" */ +"id", /* Indonesian" */ +"ie", /* Interlingue" */ +"ig", /* Igbo" */ +"ii", /* Sichuan Yi" */ +"ik", /* Inupiak" */ +"ilo", /* Iloko" */ +"is", /* Icelandic" */ +"it", /* Italian" */ +"iu", /* Inuktitut" */ +"ja", /* Japanese" */ +"jab", /* Hyam" */ +"jv", /* Javanese" */ +"ka", /* Georgian" */ +"kab", /* Kabyle" */ +"kaj", /* Jju" */ +"kam", /* Kamba" */ +"kbd", /* Kabardian" */ +"kcg", /* Tyap" */ +"kdm", /* Kagoma" */ +"kg", /* Kongo" */ +"ki", /* Kikuyu" */ +"kj", /* Kuanyama" */ +"kk", /* Kazakh" */ +"kl", /* Kalaallisut" */ +"km", /* Central Khmer" */ +"kmb", /* Kimbundu" */ +"kn", /* Kannada" */ +"ko", /* Korean" */ +"kr", /* Kanuri" */ +"kru", /* Kurukh" */ +"ks", /* Kashmiri" */ +"ku", /* Kurdish" */ +"kv", /* Komi" */ +"kw", /* Cornish" */ +"ky", /* Kirghiz" */ +"kok", /* Konkani" */ +"la", /* Latin" */ +"lb", /* Letzeburgesch" */ +"lg", /* Ganda" */ +"li", /* Limburgish" */ +"ln", /* Lingala" */ +"lo", /* Laotian" */ +"lt", /* Lithuanian" */ +"lu", /* Luba-Katanga" */ +"lua", /* Luba-Lulua" */ +"luo", /* Luo" */ +"lv", /* Latvian" */ +"mad", /* Madurese" */ +"mag", /* Magahi" */ +"mai", /* Maithili" */ +"mak", /* Makasar" */ +"man", /* Mandingo" */ +"men", /* Mende" */ +"mg", /* Malagasy" */ +"mh", /* Marshallese" */ +"mi", /* Maori" */ +"min", /* Minangkabau" */ +"mk", /* Macedonian" */ +"ml", /* Malayalam" */ +"mn", /* Mongolian" */ +"mni", /* Manipuri" */ +"mo", /* Moldavian" */ +"mos", /* Mossi" */ +"mr", /* Marathi" */ +"ms", /* Malay" */ +"mt", /* Maltese" */ +"mwr", /* Marwari" */ +"my", /* Burmese" */ +"myn", /* Mayan" */ +"na", /* Nauru" */ +"nap", /* Neapolitan" */ +"nah", /* Nahuatl" */ +"nb", /* Norwegian Bokmal" */ +"nd", /* North Ndebele" */ +"nds", /* Low Saxon" */ +"ne", /* Nepali" */ +"ng", /* Ndonga" */ +"nl", /* Dutch" */ +"nn", /* Norwegian Nynorsk" */ +"no", /* Norwegian" */ +"nr", /* South Ndebele" */ +"nso", /* Northern Sotho" */ +"nv", /* Navajo" */ +"ny", /* Nyanja" */ +"nym", /* Nyamwezi" */ +"nyn", /* Nyankole" */ +"oc", /* Occitan" */ +"oj", /* Ojibwa" */ +"om", /* (Afan) Oromo" */ +"or", /* Oriya" */ +"os", /* Ossetian" */ +"pa", /* Punjabi" */ +"pag", /* Pangasinan" */ +"pam", /* Pampanga" */ +"pap", /* Papiamento" */ +"pbb", /* Páez" */ +"pi", /* Pali" */ +"pl", /* Polish" */ +"ps", /* Pashto" */ +"pt", /* Portuguese" */ +"qu", /* Quechua" */ +"raj", /* Rajasthani" */ +"rm", /* Romansh" */ +"rn", /* Kirundi" */ +"ro", /* Romanian" */ +"ru", /* Russian" */ +"rw", /* Kinyarwanda" */ +"sa", /* Sanskrit" */ +"sas", /* Sasak" */ +"sat", /* Santali" */ +"sc", /* Sardinian" */ +"scn", /* Sicilian" */ +"sd", /* Sindhi" */ +"se", /* Northern Sami" */ +"sg", /* Sango" */ +"shn", /* Shan" */ +"si", /* Sinhala" */ +"sid", /* Sidamo" */ +"sk", /* Slovak" */ +"sl", /* Slovenian" */ +"sm", /* Samoan" */ +"sn", /* Shona" */ +"so", /* Somali" */ +"sq", /* Albanian" */ +"sr", /* Serbian" */ +"srr", /* Serer" */ +"ss", /* Siswati" */ +"st", /* Sesotho" */ +"su", /* Sundanese" */ +"suk", /* Sukuma" */ +"sus", /* Susu" */ +"sv", /* Swedish" */ +"sw", /* Swahili" */ +"ta", /* Tamil" */ +"te", /* Telugu" */ +"tem", /* Timne" */ +"tet", /* Tetum" */ +"tg", /* Tajik" */ +"th", /* Thai" */ +"ti", /* Tigrinya" */ +"tiv", /* Tiv" */ +"tk", /* Turkmen" */ +"tl", /* Tagalog" */ +"tn", /* Setswana" */ +"to", /* Tonga" */ +"tr", /* Turkish" */ +"ts", /* Tsonga" */ +"tt", /* Tatar" */ +"tum", /* Tumbuka" */ +"tw", /* Twi" */ +"ty", /* Tahitian" */ +"ug", /* Uighur" */ +"uk", /* Ukrainian" */ +"umb", /* Umbundu" */ +"ur", /* Urdu" */ +"uz", /* Uzbek" */ +"ve", /* Venda" */ +"vi", /* Vietnamese" */ +"vo", /* Volapuk" */ +"wal", /* Walamo" */ +"war", /* Waray" */ +"wen", /* Sorbian" */ +"wo", /* Wolof" */ +"xh", /* Xhosa" */ +"yao", /* Yao" */ +"yi", /* Yiddish" */ +"yo", /* Yoruba" */ +"za", /* Zhuang" */ +"zh", /* Chinese" */ +"zu", /* Zulu" */ +"zap", /* Zapotec" */ +%% +/* + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/include/libgnulib/unicase/simple-mapping.h b/include/libgnulib/unicase/simple-mapping.h new file mode 100755 index 0000000..6102b76 --- /dev/null +++ b/include/libgnulib/unicase/simple-mapping.h @@ -0,0 +1,39 @@ +/* Simple case mapping for Unicode characters. + Copyright (C) 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +ucs4_t +FUNC (ucs4_t uc) +{ + unsigned int index1 = uc >> mapping_header_0; + if (index1 < mapping_header_1) + { + int lookup1 = u_mapping.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> mapping_header_2) & mapping_header_3; + int lookup2 = u_mapping.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc & mapping_header_4); + int lookup3 = u_mapping.level3[lookup2 + index3]; + + return uc + lookup3; + } + } + } + return uc; +} diff --git a/include/libgnulib/unicase/special-casing-table.gperf b/include/libgnulib/unicase/special-casing-table.gperf new file mode 100755 index 0000000..f4b82c3 --- /dev/null +++ b/include/libgnulib/unicase/special-casing-table.gperf @@ -0,0 +1,160 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Special casing rules of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +struct special_casing_rule { char code[3]; }; +%struct-type +%language=ANSI-C +%define slot-name code +%define hash-function-name gl_unicase_special_hash +%define lookup-function-name gl_unicase_special_lookup +%compare-lengths +%compare-strncmp +%readonly-tables +%omit-struct-type +%% +"\x00\x49\x00", 1, SCC_MORE_ABOVE , { 'l', 't' }, { 0x0049, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 } +"\x00\x49\x01", 1, -SCC_BEFORE_DOT , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } +"\x00\x49\x02", 1, -SCC_BEFORE_DOT , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } +"\x00\x49\x03", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } +"\x00\x49\x04", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } +"\x00\x4a\x00", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x004A, 0, 0 }, { 0x006A, 0x0307, 0 }, { 0x004A, 0, 0 }, { 0x006A, 0, 0 } +"\x00\x69\x00", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } +"\x00\x69\x01", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } +"\x00\xcc\x00", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CC, 0, 0 }, { 0x0069, 0x0307, 0x0300 }, { 0x00CC, 0, 0 }, { 0x00EC, 0, 0 } +"\x00\xcd\x00", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CD, 0, 0 }, { 0x0069, 0x0307, 0x0301 }, { 0x00CD, 0, 0 }, { 0x00ED, 0, 0 } +"\x00\xdf\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0053, 0 }, { 0x00DF, 0, 0 }, { 0x0053, 0x0073, 0 }, { 0x0073, 0x0073, 0 } +"\x01\x28\x00", 0, SCC_ALWAYS , { 'l', 't' }, { 0x0128, 0, 0 }, { 0x0069, 0x0307, 0x0303 }, { 0x0128, 0, 0 }, { 0x0129, 0, 0 } +"\x01\x2e\x00", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x012E, 0, 0 }, { 0x012F, 0x0307, 0 }, { 0x012E, 0, 0 }, { 0x012F, 0, 0 } +"\x01\x30\x00", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } +"\x01\x30\x01", 1, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } +"\x01\x30\x02", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 } +"\x01\x49\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x02BC, 0x004E, 0 }, { 0x0149, 0, 0 }, { 0x02BC, 0x004E, 0 }, { 0x02BC, 0x006E, 0 } +"\x01\xf0\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x004A, 0x030C, 0 }, { 0x01F0, 0, 0 }, { 0x004A, 0x030C, 0 }, { 0x006A, 0x030C, 0 } +"\x03\x07\x00", 1, SCC_AFTER_SOFT_DOTTED, { 'l', 't' }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 } +"\x03\x07\x01", 1, SCC_AFTER_I , { 't', 'r' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 } +"\x03\x07\x02", 0, SCC_AFTER_I , { 'a', 'z' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 } +"\x03\x90\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x0390, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 } +"\x03\xa3\x00", 0, SCC_FINAL_SIGMA , { '\0', '\0' }, { 0x03A3, 0, 0 }, { 0x03C2, 0, 0 }, { 0x03A3, 0, 0 }, { 0x03C3, 0, 0 } +"\x03\xb0\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x03B0, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 } +"\x05\x87\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0535, 0x0552, 0 }, { 0x0587, 0, 0 }, { 0x0535, 0x0582, 0 }, { 0x0565, 0x0582, 0 } +"\x1e\x96\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0048, 0x0331, 0 }, { 0x1E96, 0, 0 }, { 0x0048, 0x0331, 0 }, { 0x0068, 0x0331, 0 } +"\x1e\x97\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0054, 0x0308, 0 }, { 0x1E97, 0, 0 }, { 0x0054, 0x0308, 0 }, { 0x0074, 0x0308, 0 } +"\x1e\x98\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0057, 0x030A, 0 }, { 0x1E98, 0, 0 }, { 0x0057, 0x030A, 0 }, { 0x0077, 0x030A, 0 } +"\x1e\x99\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0059, 0x030A, 0 }, { 0x1E99, 0, 0 }, { 0x0059, 0x030A, 0 }, { 0x0079, 0x030A, 0 } +"\x1e\x9a\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0041, 0x02BE, 0 }, { 0x1E9A, 0, 0 }, { 0x0041, 0x02BE, 0 }, { 0x0061, 0x02BE, 0 } +"\x1e\x9e\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1E9E, 0, 0 }, { 0x00DF, 0, 0 }, { 0x1E9E, 0, 0 }, { 0x0073, 0x0073, 0 } +"\x1f\x50\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0 }, { 0x1F50, 0, 0 }, { 0x03A5, 0x0313, 0 }, { 0x03C5, 0x0313, 0 } +"\x1f\x52\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0300 }, { 0x1F52, 0, 0 }, { 0x03A5, 0x0313, 0x0300 }, { 0x03C5, 0x0313, 0x0300 } +"\x1f\x54\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0301 }, { 0x1F54, 0, 0 }, { 0x03A5, 0x0313, 0x0301 }, { 0x03C5, 0x0313, 0x0301 } +"\x1f\x56\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0342 }, { 0x1F56, 0, 0 }, { 0x03A5, 0x0313, 0x0342 }, { 0x03C5, 0x0313, 0x0342 } +"\x1f\x80\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 } +"\x1f\x81\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 } +"\x1f\x82\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 } +"\x1f\x83\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 } +"\x1f\x84\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 } +"\x1f\x85\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 } +"\x1f\x86\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 } +"\x1f\x87\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 } +"\x1f\x88\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 } +"\x1f\x89\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 } +"\x1f\x8a\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 } +"\x1f\x8b\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 } +"\x1f\x8c\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 } +"\x1f\x8d\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 } +"\x1f\x8e\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 } +"\x1f\x8f\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 } +"\x1f\x90\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 } +"\x1f\x91\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 } +"\x1f\x92\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 } +"\x1f\x93\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 } +"\x1f\x94\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 } +"\x1f\x95\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 } +"\x1f\x96\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 } +"\x1f\x97\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 } +"\x1f\x98\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 } +"\x1f\x99\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 } +"\x1f\x9a\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 } +"\x1f\x9b\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 } +"\x1f\x9c\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 } +"\x1f\x9d\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 } +"\x1f\x9e\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 } +"\x1f\x9f\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 } +"\x1f\xa0\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 } +"\x1f\xa1\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 } +"\x1f\xa2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 } +"\x1f\xa3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 } +"\x1f\xa4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 } +"\x1f\xa5\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 } +"\x1f\xa6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 } +"\x1f\xa7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 } +"\x1f\xa8\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 } +"\x1f\xa9\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 } +"\x1f\xaa\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 } +"\x1f\xab\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 } +"\x1f\xac\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 } +"\x1f\xad\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 } +"\x1f\xae\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 } +"\x1f\xaf\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 } +"\x1f\xb2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FBA, 0x0399, 0 }, { 0x1FB2, 0, 0 }, { 0x1FBA, 0x0345, 0 }, { 0x1F70, 0x03B9, 0 } +"\x1f\xb3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 } +"\x1f\xb4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0386, 0x0399, 0 }, { 0x1FB4, 0, 0 }, { 0x0386, 0x0345, 0 }, { 0x03AC, 0x03B9, 0 } +"\x1f\xb6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0 }, { 0x1FB6, 0, 0 }, { 0x0391, 0x0342, 0 }, { 0x03B1, 0x0342, 0 } +"\x1f\xb7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0x0399 }, { 0x1FB7, 0, 0 }, { 0x0391, 0x0342, 0x0345 }, { 0x03B1, 0x0342, 0x03B9 } +"\x1f\xbc\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 } +"\x1f\xc2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FCA, 0x0399, 0 }, { 0x1FC2, 0, 0 }, { 0x1FCA, 0x0345, 0 }, { 0x1F74, 0x03B9, 0 } +"\x1f\xc3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 } +"\x1f\xc4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0389, 0x0399, 0 }, { 0x1FC4, 0, 0 }, { 0x0389, 0x0345, 0 }, { 0x03AE, 0x03B9, 0 } +"\x1f\xc6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0 }, { 0x1FC6, 0, 0 }, { 0x0397, 0x0342, 0 }, { 0x03B7, 0x0342, 0 } +"\x1f\xc7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0x0399 }, { 0x1FC7, 0, 0 }, { 0x0397, 0x0342, 0x0345 }, { 0x03B7, 0x0342, 0x03B9 } +"\x1f\xcc\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 } +"\x1f\xd2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0300 }, { 0x1FD2, 0, 0 }, { 0x0399, 0x0308, 0x0300 }, { 0x03B9, 0x0308, 0x0300 } +"\x1f\xd3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x1FD3, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 } +"\x1f\xd6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0342, 0 }, { 0x1FD6, 0, 0 }, { 0x0399, 0x0342, 0 }, { 0x03B9, 0x0342, 0 } +"\x1f\xd7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0342 }, { 0x1FD7, 0, 0 }, { 0x0399, 0x0308, 0x0342 }, { 0x03B9, 0x0308, 0x0342 } +"\x1f\xe2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0300 }, { 0x1FE2, 0, 0 }, { 0x03A5, 0x0308, 0x0300 }, { 0x03C5, 0x0308, 0x0300 } +"\x1f\xe3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x1FE3, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 } +"\x1f\xe4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A1, 0x0313, 0 }, { 0x1FE4, 0, 0 }, { 0x03A1, 0x0313, 0 }, { 0x03C1, 0x0313, 0 } +"\x1f\xe6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0342, 0 }, { 0x1FE6, 0, 0 }, { 0x03A5, 0x0342, 0 }, { 0x03C5, 0x0342, 0 } +"\x1f\xe7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0342 }, { 0x1FE7, 0, 0 }, { 0x03A5, 0x0308, 0x0342 }, { 0x03C5, 0x0308, 0x0342 } +"\x1f\xf2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FFA, 0x0399, 0 }, { 0x1FF2, 0, 0 }, { 0x1FFA, 0x0345, 0 }, { 0x1F7C, 0x03B9, 0 } +"\x1f\xf3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 } +"\x1f\xf4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x038F, 0x0399, 0 }, { 0x1FF4, 0, 0 }, { 0x038F, 0x0345, 0 }, { 0x03CE, 0x03B9, 0 } +"\x1f\xf6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0 }, { 0x1FF6, 0, 0 }, { 0x03A9, 0x0342, 0 }, { 0x03C9, 0x0342, 0 } +"\x1f\xf7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0x0399 }, { 0x1FF7, 0, 0 }, { 0x03A9, 0x0342, 0x0345 }, { 0x03C9, 0x0342, 0x03B9 } +"\x1f\xfc\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 } +"\xfb\x00\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0 }, { 0xFB00, 0, 0 }, { 0x0046, 0x0066, 0 }, { 0x0066, 0x0066, 0 } +"\xfb\x01\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0049, 0 }, { 0xFB01, 0, 0 }, { 0x0046, 0x0069, 0 }, { 0x0066, 0x0069, 0 } +"\xfb\x02\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x004C, 0 }, { 0xFB02, 0, 0 }, { 0x0046, 0x006C, 0 }, { 0x0066, 0x006C, 0 } +"\xfb\x03\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x0049 }, { 0xFB03, 0, 0 }, { 0x0046, 0x0066, 0x0069 }, { 0x0066, 0x0066, 0x0069 } +"\xfb\x04\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x004C }, { 0xFB04, 0, 0 }, { 0x0046, 0x0066, 0x006C }, { 0x0066, 0x0066, 0x006C } +"\xfb\x05\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB05, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 } +"\xfb\x06\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB06, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 } +"\xfb\x13\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0546, 0 }, { 0xFB13, 0, 0 }, { 0x0544, 0x0576, 0 }, { 0x0574, 0x0576, 0 } +"\xfb\x14\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0535, 0 }, { 0xFB14, 0, 0 }, { 0x0544, 0x0565, 0 }, { 0x0574, 0x0565, 0 } +"\xfb\x15\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053B, 0 }, { 0xFB15, 0, 0 }, { 0x0544, 0x056B, 0 }, { 0x0574, 0x056B, 0 } +"\xfb\x16\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x054E, 0x0546, 0 }, { 0xFB16, 0, 0 }, { 0x054E, 0x0576, 0 }, { 0x057E, 0x0576, 0 } +"\xfb\x17\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053D, 0 }, { 0xFB17, 0, 0 }, { 0x0544, 0x056D, 0 }, { 0x0574, 0x056D, 0 } diff --git a/include/libgnulib/unicase/tocasefold.h b/include/libgnulib/unicase/tocasefold.h new file mode 100755 index 0000000..c8e54dd --- /dev/null +++ b/include/libgnulib/unicase/tocasefold.h @@ -0,0 +1,783 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Simple character mapping of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#define mapping_header_0 16 +#define mapping_header_1 2 +#define mapping_header_2 7 +#define mapping_header_3 511 +#define mapping_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + int level3[38 << 7]; + } +u_mapping = +{ + { 0, 512 }, + { + 0, 128, 256, 384, 512, -1, 640, 768, + 896, 1024, 1152, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1280, -1, -1, -1, -1, -1, 1408, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1536, -1, -1, 1664, 1792, 1920, 2048, + -1, -1, 2176, 2304, -1, -1, -1, -1, + -1, 2432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2560, 2688, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2816, 2944, 3072, 3200, + -1, -1, -1, -1, -1, -1, 3328, 3456, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3584, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3712, 3840, 3968, 4096, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4224, 4352, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4480, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4608, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4736, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 775, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 0, + 32, 32, 32, 32, 32, 32, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -121, 1, 0, 1, 0, 1, 0, -268, + 0, 210, 1, 0, 1, 0, 206, 1, + 0, 205, 205, 1, 0, 0, 79, 202, + 203, 1, 0, 205, 207, 0, 211, 209, + 1, 0, 0, 0, 211, 213, 0, 214, + 1, 0, 1, 0, 1, 0, 218, 1, + 0, 218, 0, 0, 1, 0, 218, 1, + 0, 217, 217, 1, 0, 1, 0, 219, + 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 2, 1, 0, 2, + 1, 0, 2, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 2, 1, 0, 1, 0, -97, -56, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -130, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 10795, 1, 0, -163, 10792, 0, + 0, 1, 0, -195, 69, 71, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 38, 0, + 37, 37, 37, 0, 64, 0, 63, 63, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 0, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + -30, -25, 0, 0, 0, -15, -22, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -54, -48, 0, 0, -60, -64, 0, 1, + 0, -7, 1, 0, 0, -130, -130, -130, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 15, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 0, 7264, + 0, 0, 0, 0, 0, 7264, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + -6222, -6221, -6212, -6210, -6210, -6211, -6204, -6180, + 35267, 1, 0, 0, 0, 0, 0, 0, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, 0, 0, -3008, -3008, -3008, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, -58, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, -8, 0, -8, 0, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -74, -74, 0, 0, -7173, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -86, -86, -86, -86, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -100, -100, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -112, -112, -7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -128, -128, -126, -126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7517, 0, + 0, 0, -8383, -8262, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, -10743, -3814, -10727, 0, 0, 1, + 0, 1, 0, 1, 0, -10780, -10749, -10783, + -10782, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, -10815, -10815, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 1, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 1, 0, -35332, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 1, 0, -42280, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, -42308, -42319, -42315, -42305, -42308, 0, + -42258, -42282, -42261, 928, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, -48, -42307, -35384, 1, + 0, 1, 0, -42343, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 1, 0, + 1, 0, 1, 0, -42561, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 0, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 0, 39, 39, 39, 39, + 39, 39, 39, 0, 39, 39, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/include/libgnulib/unicase/tolower.h b/include/libgnulib/unicase/tolower.h new file mode 100755 index 0000000..794f4c0 --- /dev/null +++ b/include/libgnulib/unicase/tolower.h @@ -0,0 +1,743 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Simple character mapping of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define mapping_header_0 16 +#define mapping_header_1 2 +#define mapping_header_2 7 +#define mapping_header_3 511 +#define mapping_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + int level3[36 << 7]; + } +u_mapping = +{ + { 0, 512 }, + { + 0, 128, 256, 384, 512, -1, 640, 768, + 896, 1024, 1152, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1280, -1, -1, -1, -1, -1, 1408, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1536, -1, -1, 1664, 1792, 1920, 2048, + -1, -1, 2176, 2304, -1, -1, -1, -1, + -1, 2432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2560, 2688, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2816, 2944, 3072, 3200, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3328, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3456, 3584, 3712, 3840, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3968, 4096, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4224, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4352, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4480, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 0, + 32, 32, 32, 32, 32, 32, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -199, 0, 1, 0, 1, 0, 1, 0, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -121, 1, 0, 1, 0, 1, 0, 0, + 0, 210, 1, 0, 1, 0, 206, 1, + 0, 205, 205, 1, 0, 0, 79, 202, + 203, 1, 0, 205, 207, 0, 211, 209, + 1, 0, 0, 0, 211, 213, 0, 214, + 1, 0, 1, 0, 1, 0, 218, 1, + 0, 218, 0, 0, 1, 0, 218, 1, + 0, 217, 217, 1, 0, 1, 0, 219, + 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 2, 1, 0, 2, + 1, 0, 2, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 2, 1, 0, 1, 0, -97, -56, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -130, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 10795, 1, 0, -163, 10792, 0, + 0, 1, 0, -195, 69, 71, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 38, 0, + 37, 37, 37, 0, 64, 0, 63, 63, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 0, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, -60, 0, 0, 1, + 0, -7, 1, 0, 0, -130, -130, -130, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 15, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 0, 7264, + 0, 0, 0, 0, 0, 7264, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, + 8, 8, 8, 8, 8, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, + -3008, -3008, -3008, 0, 0, -3008, -3008, -3008, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7615, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, -8, 0, -8, 0, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -74, -74, -9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -86, -86, -86, -86, -9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -100, -100, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -112, -112, -7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -128, -128, -126, -126, -9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7517, 0, + 0, 0, -8383, -8262, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, -10743, -3814, -10727, 0, 0, 1, + 0, 1, 0, 1, 0, -10780, -10749, -10783, + -10782, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, -10815, -10815, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 1, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 1, 0, -35332, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 1, 0, -42280, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, -42308, -42319, -42315, -42305, -42308, 0, + -42258, -42282, -42261, 928, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, -48, -42307, -35384, 1, + 0, 1, 0, -42343, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 1, 0, + 1, 0, 1, 0, -42561, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 0, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 0, 39, 39, 39, 39, + 39, 39, 39, 0, 39, 39, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/include/libgnulib/unicase/totitle.h b/include/libgnulib/unicase/totitle.h new file mode 100755 index 0000000..ed17a52 --- /dev/null +++ b/include/libgnulib/unicase/totitle.h @@ -0,0 +1,847 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Simple character mapping of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#define mapping_header_0 16 +#define mapping_header_1 2 +#define mapping_header_2 7 +#define mapping_header_3 511 +#define mapping_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + int level3[42 << 7]; + } +u_mapping = +{ + { 0, 512 }, + { + 0, 128, 256, 384, 512, 640, 768, 896, + 1024, 1152, 1280, 1408, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1536, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1664, 1792, 1920, 2048, 2176, 2304, 2432, + -1, -1, 2560, 2688, -1, -1, -1, -1, + -1, 2816, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2944, 3072, 3200, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3328, 3456, 3584, 3712, + -1, -1, -1, -1, -1, -1, 3840, 3968, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4096, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4224, 4352, -1, 4480, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4608, 4736, 4864, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4992, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5120, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5248, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 743, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, 0, + -32, -32, -32, -32, -32, -32, -32, 121, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -232, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, 0, + -1, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, -300, + 195, 0, 0, -1, 0, -1, 0, 0, + -1, 0, 0, 0, -1, 0, 0, 0, + 0, 0, -1, 0, 0, 97, 0, 0, + 0, -1, 163, 42561, 0, 0, 130, 0, + 0, -1, 0, -1, 0, -1, 0, 0, + -1, 0, 0, 0, 0, -1, 0, 0, + -1, 0, 0, 0, -1, 0, -1, 0, + 0, -1, 0, 0, 0, -1, 0, 56, + 0, 0, 0, 0, 1, 0, -1, 1, + 0, -1, 1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, -79, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 1, 0, -1, 0, -1, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 10815, + 10815, 0, -1, 0, 0, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 10783, 10780, 10782, -210, -206, 0, -205, -205, + 0, -202, 0, -203, 42319, 0, 0, 0, + -205, 42315, 0, -207, 42343, 42280, 42308, 0, + -209, -211, 42308, 10743, 42305, 0, 0, -211, + 0, 10749, -213, 0, 0, -214, 0, 0, + 0, 0, 0, 0, 0, 10727, 0, 0, + -218, 0, 42307, -218, 0, 0, 0, 42282, + -218, -69, -217, -217, -71, 0, 0, 0, + 0, 0, -219, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42261, 42258, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, 0, 0, -1, + 0, 0, 0, 130, 130, 130, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -38, -37, -37, -37, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -31, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -64, -63, -63, 0, + -62, -57, 0, 0, 0, -47, -54, -8, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + -86, -80, 7, -116, 0, -96, 0, 0, + -1, 0, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, -15, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + -6254, -6253, -6244, -6242, -6242, -6243, -6236, -6181, + 35266, 0, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35332, 0, 0, 0, 3814, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35384, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, 0, + 0, 0, 0, -59, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 0, 8, 0, 8, 0, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 74, 74, 86, 86, 86, 86, 100, 100, + 128, 128, 112, 112, 126, 126, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7205, 0, + 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + 0, -1, 0, 0, 0, -10795, -10792, 0, + -1, 0, -1, 0, -1, 0, 0, 0, + 0, 0, 0, -1, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, -1, 0, + 0, 0, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, 0, -7264, + 0, 0, 0, 0, 0, -7264, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1, 0, -1, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, -1, 0, -1, 48, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + -1, 0, -1, 0, 0, -1, 0, 0, + 0, -1, 0, 0, 0, 0, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -928, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -39, + -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, 0, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, 0, -39, -39, -39, -39, -39, + -39, -39, 0, -39, -39, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/include/libgnulib/unicase/toupper.h b/include/libgnulib/unicase/toupper.h new file mode 100755 index 0000000..ff117e0 --- /dev/null +++ b/include/libgnulib/unicase/toupper.h @@ -0,0 +1,855 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Simple character mapping of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define mapping_header_0 16 +#define mapping_header_1 2 +#define mapping_header_2 7 +#define mapping_header_3 511 +#define mapping_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + int level3[43 << 7]; + } +u_mapping = +{ + { 0, 512 }, + { + 0, 128, 256, 384, 512, 640, 768, 896, + 1024, 1152, 1280, 1408, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1536, -1, -1, -1, -1, -1, 1664, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1792, 1920, 2048, 2176, 2304, 2432, 2560, + -1, -1, 2688, 2816, -1, -1, -1, -1, + -1, 2944, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3072, 3200, 3328, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3456, 3584, 3712, 3840, + -1, -1, -1, -1, -1, -1, 3968, 4096, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4224, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4352, 4480, -1, 4608, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4736, 4864, 4992, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5120, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5248, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5376, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 743, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, 0, + -32, -32, -32, -32, -32, -32, -32, 121, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -232, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, 0, + -1, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, -300, + 195, 0, 0, -1, 0, -1, 0, 0, + -1, 0, 0, 0, -1, 0, 0, 0, + 0, 0, -1, 0, 0, 97, 0, 0, + 0, -1, 163, 42561, 0, 0, 130, 0, + 0, -1, 0, -1, 0, -1, 0, 0, + -1, 0, 0, 0, 0, -1, 0, 0, + -1, 0, 0, 0, -1, 0, -1, 0, + 0, -1, 0, 0, 0, -1, 0, 56, + 0, 0, 0, 0, 0, -1, -2, 0, + -1, -2, 0, -1, -2, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, -79, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, -2, 0, -1, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 10815, + 10815, 0, -1, 0, 0, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 10783, 10780, 10782, -210, -206, 0, -205, -205, + 0, -202, 0, -203, 42319, 0, 0, 0, + -205, 42315, 0, -207, 42343, 42280, 42308, 0, + -209, -211, 42308, 10743, 42305, 0, 0, -211, + 0, 10749, -213, 0, 0, -214, 0, 0, + 0, 0, 0, 0, 0, 10727, 0, 0, + -218, 0, 42307, -218, 0, 0, 0, 42282, + -218, -69, -217, -217, -71, 0, 0, 0, + 0, 0, -219, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42261, 42258, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, 0, 0, -1, + 0, 0, 0, 130, 130, 130, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -38, -37, -37, -37, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -31, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -64, -63, -63, 0, + -62, -57, 0, 0, 0, -47, -54, -8, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + -86, -80, 7, -116, 0, -96, 0, 0, + -1, 0, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, -15, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 3008, 3008, 3008, 3008, 3008, 3008, 3008, 3008, + 3008, 3008, 3008, 3008, 3008, 3008, 3008, 3008, + 3008, 3008, 3008, 3008, 3008, 3008, 3008, 3008, + 3008, 3008, 3008, 3008, 3008, 3008, 3008, 3008, + 3008, 3008, 3008, 3008, 3008, 3008, 3008, 3008, + 3008, 3008, 3008, 0, 0, 3008, 3008, 3008, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + -6254, -6253, -6244, -6242, -6242, -6243, -6236, -6181, + 35266, 0, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35332, 0, 0, 0, 3814, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35384, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, 0, + 0, 0, 0, -59, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 0, 8, 0, 8, 0, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 74, 74, 86, 86, 86, 86, 100, 100, + 128, 128, 112, 112, 126, 126, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7205, 0, + 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + 0, -1, 0, 0, 0, -10795, -10792, 0, + -1, 0, -1, 0, -1, 0, 0, 0, + 0, 0, 0, -1, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, -1, 0, + 0, 0, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, 0, -7264, + 0, 0, 0, 0, 0, -7264, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1, 0, -1, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, -1, 0, -1, 48, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + -1, 0, -1, 0, 0, -1, 0, 0, + 0, -1, 0, 0, 0, 0, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -928, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -39, + -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, 0, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, 0, -39, -39, -39, -39, -39, + -39, -39, 0, -39, -39, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/include/libgnulib/unicase/u-casecmp.h b/include/libgnulib/unicase/u-casecmp.h new file mode 100755 index 0000000..f960b6b --- /dev/null +++ b/include/libgnulib/unicase/u-casecmp.h @@ -0,0 +1,77 @@ +/* Case and normalization insensitive comparison of Unicode strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +FUNC (const SRC_UNIT *s1, size_t n1, const SRC_UNIT *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp) +{ + UNIT buf1[2048 / sizeof (UNIT)]; + UNIT buf2[2048 / sizeof (UNIT)]; + UNIT *norms1; + size_t norms1_length; + UNIT *norms2; + size_t norms2_length; + int cmp; + + /* Optimization: There is no need to do canonical composition of each string. + Decomposition is enough. */ + if (nf != NULL) + nf = uninorm_decomposing_form (nf); + + /* Case-fold and normalize S1. */ + norms1_length = sizeof (buf1) / sizeof (UNIT); + norms1 = U_CASEFOLD (s1, n1, iso639_language, nf, buf1, &norms1_length); + if (norms1 == NULL) + /* errno is set here. */ + return -1; + + /* Case-fold and normalize S2. */ + norms2_length = sizeof (buf2) / sizeof (UNIT); + norms2 = U_CASEFOLD (s2, n2, iso639_language, nf, buf2, &norms2_length); + if (norms2 == NULL) + { + if (norms1 != buf1) + { + int saved_errno = errno; + free (norms1); + errno = saved_errno; + } + return -1; + } + + /* Compare the normalized strings. */ + cmp = U_CMP2 (norms1, norms1_length, norms2, norms2_length); + if (cmp > 0) + cmp = 1; + else if (cmp < 0) + cmp = -1; + + if (norms2 != buf2) + free (norms2); + if (norms1 != buf1) + free (norms1); + *resultp = cmp; + return 0; +} diff --git a/include/libgnulib/unicase/u-casecoll.h b/include/libgnulib/unicase/u-casecoll.h new file mode 100755 index 0000000..f65d958 --- /dev/null +++ b/include/libgnulib/unicase/u-casecoll.h @@ -0,0 +1,76 @@ +/* Locale dependent, case and normalization insensitive comparison of Unicode + strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp) +{ + char buf1[2048]; + char buf2[2048]; + char *transformed1; + size_t transformed1_length; + char *transformed2; + size_t transformed2_length; + int cmp; + + /* Normalize and transform S1. */ + transformed1_length = sizeof (buf1); + transformed1 = + U_CASEXFRM (s1, n1, iso639_language, nf, buf1, &transformed1_length); + if (transformed1 == NULL) + /* errno is set here. */ + return -1; + + /* Normalize and transform S2. */ + transformed2_length = sizeof (buf2); + transformed2 = + U_CASEXFRM (s2, n2, iso639_language, nf, buf2, &transformed2_length); + if (transformed2 == NULL) + { + if (transformed1 != buf1) + { + int saved_errno = errno; + free (transformed1); + errno = saved_errno; + } + return -1; + } + + /* Compare the transformed strings. */ + cmp = memcmp2 (transformed1, transformed1_length, + transformed2, transformed2_length); + if (cmp < 0) + cmp = -1; + else if (cmp > 0) + cmp = 1; + + if (transformed2 != buf2) + free (transformed2); + if (transformed1 != buf1) + free (transformed1); + *resultp = cmp; + return 0; +} diff --git a/include/libgnulib/unicase/u-casefold.h b/include/libgnulib/unicase/u-casefold.h new file mode 100755 index 0000000..173a6d4 --- /dev/null +++ b/include/libgnulib/unicase/u-casefold.h @@ -0,0 +1,36 @@ +/* Casefolding mapping for Unicode strings (locale dependent). + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (const UNIT *s, size_t n, const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + return U_CT_CASEFOLD (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + nf, + resultbuf, lengthp); +} diff --git a/include/libgnulib/unicase/u-casemap.h b/include/libgnulib/unicase/u-casemap.h new file mode 100755 index 0000000..20690df --- /dev/null +++ b/include/libgnulib/unicase/u-casemap.h @@ -0,0 +1,424 @@ +/* Case mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (const UNIT *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + ucs4_t (*single_character_map) (ucs4_t), + size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + /* The result being accumulated. */ + UNIT *result; + size_t length; + size_t allocated; + + /* Initialize the accumulator. */ + if (nf != NULL || resultbuf == NULL) + { + result = NULL; + allocated = 0; + } + else + { + result = resultbuf; + allocated = *lengthp; + } + length = 0; + + { + const UNIT *s_end = s + n; + + /* Helper for evaluating the FINAL_SIGMA condition: + Last character that was not case-ignorable. */ + ucs4_t last_char_except_ignorable = + prefix_context.last_char_except_ignorable; + + /* Helper for evaluating the AFTER_SOFT_DOTTED and AFTER_I conditions: + Last character that was of combining class 230 ("Above") or 0. */ + ucs4_t last_char_normal_or_above = + prefix_context.last_char_normal_or_above; + + while (s < s_end) + { + ucs4_t uc; + int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); + + ucs4_t mapped_uc[3]; + unsigned int mapped_count; + + if (uc < 0x10000) + { + /* Look first in the special-casing table. */ + char code[3]; + + code[0] = (uc >> 8) & 0xff; + code[1] = uc & 0xff; + + for (code[2] = 0; ; code[2]++) + { + const struct special_casing_rule *rule = + gl_unicase_special_lookup (code, 3); + + if (rule == NULL) + break; + + /* Test if the condition applies. */ + /* Does the language apply? */ + if (rule->language[0] == '\0' + || (iso639_language != NULL + && iso639_language[0] == rule->language[0] + && iso639_language[1] == rule->language[1])) + { + /* Does the context apply? */ + int context = rule->context; + bool applies; + + if (context < 0) + context = - context; + switch (context) + { + case SCC_ALWAYS: + applies = true; + break; + + case SCC_FINAL_SIGMA: + /* "Before" condition: preceded by a sequence + consisting of a cased letter and a case-ignorable + sequence. + "After" condition: not followed by a sequence + consisting of a case-ignorable sequence and then a + cased letter. */ + /* Test the "before" condition. */ + applies = uc_is_cased (last_char_except_ignorable); + /* Test the "after" condition. */ + if (applies) + { + const UNIT *s2 = s + count; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + /* Our uc_is_case_ignorable function is + known to return false for all cased + characters. So we can call + uc_is_case_ignorable first. */ + if (!uc_is_case_ignorable (uc2)) + { + applies = ! uc_is_cased (uc2); + break; + } + s2 += count2; + } + else + { + applies = ! uc_is_cased (suffix_context.first_char_except_ignorable); + break; + } + } + } + break; + + case SCC_AFTER_SOFT_DOTTED: + /* "Before" condition: There is a Soft_Dotted character + before it, with no intervening character of + combining class 0 or 230 (Above). */ + /* Test the "before" condition. */ + applies = uc_is_property_soft_dotted (last_char_normal_or_above); + break; + + case SCC_MORE_ABOVE: + /* "After" condition: followed by a character of + combining class 230 (Above) with no intervening + character of combining class 0 or 230 (Above). */ + /* Test the "after" condition. */ + { + const UNIT *s2 = s + count; + applies = false; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + int ccc = uc_combining_class (uc2); + if (ccc == UC_CCC_A) + { + applies = true; + break; + } + if (ccc == UC_CCC_NR) + break; + s2 += count2; + } + else + { + applies = ((suffix_context.bits & SCC_MORE_ABOVE_MASK) != 0); + break; + } + } + } + break; + + case SCC_BEFORE_DOT: + /* "After" condition: followed by COMBINING DOT ABOVE + (U+0307). Any sequence of characters with a + combining class that is neither 0 nor 230 may + intervene between the current character and the + combining dot above. */ + /* Test the "after" condition. */ + { + const UNIT *s2 = s + count; + applies = false; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + if (uc2 == 0x0307) /* COMBINING DOT ABOVE */ + { + applies = true; + break; + } + { + int ccc = uc_combining_class (uc2); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + break; + } + s2 += count2; + } + else + { + applies = ((suffix_context.bits & SCC_BEFORE_DOT_MASK) != 0); + break; + } + } + } + break; + + case SCC_AFTER_I: + /* "Before" condition: There is an uppercase I before + it, and there is no intervening character of + combining class 0 or 230 (Above). */ + /* Test the "before" condition. */ + applies = (last_char_normal_or_above == 'I'); + break; + + default: + abort (); + } + if (rule->context < 0) + applies = !applies; + + if (applies) + { + /* The rule applies. + Look up the mapping (0 to 3 characters). */ + const unsigned short *mapped_in_rule = + (const unsigned short *)((const char *)rule + offset_in_rule); + + if (mapped_in_rule[0] == 0) + mapped_count = 0; + else + { + mapped_uc[0] = mapped_in_rule[0]; + if (mapped_in_rule[1] == 0) + mapped_count = 1; + else + { + mapped_uc[1] = mapped_in_rule[1]; + if (mapped_in_rule[2] == 0) + mapped_count = 2; + else + { + mapped_uc[2] = mapped_in_rule[2]; + mapped_count = 3; + } + } + } + goto found_mapping; + } + } + + /* Optimization: Save a hash table lookup in the next round. */ + if (!rule->has_next) + break; + } + } + + /* No special-cased mapping. So use the locale and context independent + mapping. */ + mapped_uc[0] = single_character_map (uc); + mapped_count = 1; + + found_mapping: + /* Found the mapping: uc maps to mapped_uc[0..mapped_count-1]. */ + { + unsigned int i; + + for (i = 0; i < mapped_count; i++) + { + ucs4_t muc = mapped_uc[i]; + + /* Append muc to the result accumulator. */ + if (length < allocated) + { + int ret = U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail; + } + if (ret >= 0) + { + length += ret; + goto done_appending; + } + } + { + size_t old_allocated = allocated; + size_t new_allocated = 2 * old_allocated; + if (new_allocated < 64) + new_allocated = 64; + if (new_allocated < old_allocated) /* integer overflow? */ + abort (); + { + UNIT *larger_result; + if (result == NULL) + { + larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + else if (result == resultbuf) + { + larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + U_CPY (larger_result, resultbuf, length); + } + else + { + larger_result = + (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + result = larger_result; + allocated = new_allocated; + { + int ret = U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail; + } + if (ret < 0) + abort (); + length += ret; + goto done_appending; + } + } + } + done_appending: ; + } + } + + if (!uc_is_case_ignorable (uc)) + last_char_except_ignorable = uc; + + { + int ccc = uc_combining_class (uc); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + last_char_normal_or_above = uc; + } + + s += count; + } + } + + if (nf != NULL) + { + /* Finally, normalize the result. */ + UNIT *normalized_result; + + normalized_result = U_NORMALIZE (nf, result, length, resultbuf, lengthp); + if (normalized_result == NULL) + goto fail; + + free (result); + return normalized_result; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + UNIT *memory; + + memory = (UNIT *) realloc (result, length * sizeof (UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; + + fail: + if (result != resultbuf) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return NULL; +} diff --git a/include/libgnulib/unicase/u-casexfrm.h b/include/libgnulib/unicase/u-casexfrm.h new file mode 100755 index 0000000..2c38297 --- /dev/null +++ b/include/libgnulib/unicase/u-casexfrm.h @@ -0,0 +1,96 @@ +/* Locale dependent transformation for case insensitive comparison of Unicode + strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +char * +FUNC (const UNIT *s, size_t n, const char *iso639_language, uninorm_t nf, + char *resultbuf, size_t *lengthp) +{ + UNIT foldedsbuf[2048 / sizeof (UNIT)]; + UNIT *foldeds; + size_t foldeds_length; + char convsbuf[2048]; + char *convs; + size_t convs_length; + char *result; + + /* Casefold and normalize the Unicode string. */ + foldeds_length = sizeof (foldedsbuf) / sizeof (UNIT); + foldeds = U_CASEFOLD (s, n, iso639_language, nf, foldedsbuf, &foldeds_length); + if (foldeds == NULL) + /* errno is set here. */ + return NULL; + + /* Convert it to locale encoding. */ + convs_length = sizeof (convsbuf) - 1; + convs = U_CONV_TO_ENCODING (locale_charset (), + iconveh_error, + foldeds, foldeds_length, + NULL, + convsbuf, &convs_length); + if (convs == NULL) + { + if (foldeds != foldedsbuf) + { + int saved_errno = errno; + free (foldeds); + errno = saved_errno; + } + return NULL; + } + + if (foldeds != foldedsbuf) + free (foldeds); + + /* Ensure one more byte is available. */ + if (convs != convsbuf) + { + char *memory = (char *) realloc (convs, convs_length + 1); + if (memory == NULL) + { + free (convs); + errno = ENOMEM; + return NULL; + } + convs = memory; + } + + /* Apply locale dependent transformations for comparison. */ + result = amemxfrm (convs, convs_length, resultbuf, lengthp); + if (result == NULL) + { + if (convs != convsbuf) + { + int saved_errno = errno; + free (convs); + errno = saved_errno; + } + return NULL; + } + + if (convs != convsbuf) + free (convs); + return result; +} diff --git a/include/libgnulib/unicase/u-ct-casefold.h b/include/libgnulib/unicase/u-ct-casefold.h new file mode 100755 index 0000000..2ee011f --- /dev/null +++ b/include/libgnulib/unicase/u-ct-casefold.h @@ -0,0 +1,115 @@ +/* Casefolding mapping for Unicode substrings (locale dependent). + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (const UNIT *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + /* Implement the three definitions of caseless matching, as described in + Unicode 5.0, section "Default caseless matching": + - If no normalization is requested, simply apply the casefolding. + X -> toCasefold(X). + - If canonical normalization is requested, apply it, and apply an NFD + before. + X -> NFD(toCasefold(NFD(X))). + - If compatibility normalization is requested, apply it twice, apply + the normalization after each, and apply an NFD before: + X -> NFKD(toCasefold(NFKD(toCasefold(NFD(X))))). */ + if (nf == NULL) + /* X -> toCasefold(X) */ + return U_CASEMAP (s, n, prefix_context, suffix_context, iso639_language, + uc_tocasefold, offsetof (struct special_casing_rule, casefold[0]), + NULL, + resultbuf, lengthp); + else + { + uninorm_t nfd = uninorm_decomposing_form (nf); + /* X -> nf(toCasefold(NFD(X))) or + X -> nf(toCasefold(nfd(toCasefold(NFD(X))))) */ + int repeat = (uninorm_is_compat_decomposing (nf) ? 2 : 1); + UNIT tmpbuf1[2048 / sizeof (UNIT)]; + UNIT tmpbuf2[2048 / sizeof (UNIT)]; + UNIT *tmp1; + size_t tmp1_length; + UNIT *tmp2; + size_t tmp2_length; + + tmp1_length = sizeof (tmpbuf1) / sizeof (UNIT); + tmp1 = U_NORMALIZE (UNINORM_NFD, s, n, tmpbuf1, &tmp1_length); + if (tmp1 == NULL) + /* errno is set here. */ + return NULL; + + do + { + tmp2_length = sizeof (tmpbuf2) / sizeof (UNIT); + tmp2 = U_CASEMAP (tmp1, tmp1_length, + prefix_context, suffix_context, iso639_language, + uc_tocasefold, offsetof (struct special_casing_rule, casefold[0]), + NULL, + tmpbuf2, &tmp2_length); + if (tmp2 == NULL) + { + int saved_errno = errno; + if (tmp1 != tmpbuf1) + free (tmp1); + errno = saved_errno; + return NULL; + } + + if (tmp1 != tmpbuf1) + free (tmp1); + + if (repeat > 1) + { + tmp1_length = sizeof (tmpbuf1) / sizeof (UNIT); + tmp1 = U_NORMALIZE (nfd, tmp2, tmp2_length, + tmpbuf1, &tmp1_length); + } + else + /* Last run through this loop. */ + tmp1 = U_NORMALIZE (nf, tmp2, tmp2_length, + resultbuf, lengthp); + if (tmp1 == NULL) + { + int saved_errno = errno; + if (tmp2 != tmpbuf2) + free (tmp2); + errno = saved_errno; + return NULL; + } + + if (tmp2 != tmpbuf2) + free (tmp2); + } + while (--repeat > 0); + + return tmp1; + } +} diff --git a/include/libgnulib/unicase/u-ct-totitle.h b/include/libgnulib/unicase/u-ct-totitle.h new file mode 100755 index 0000000..b670f51 --- /dev/null +++ b/include/libgnulib/unicase/u-ct-totitle.h @@ -0,0 +1,515 @@ +/* Titlecase mapping for UTF-8/UTF-16/UTF-32 substrings (locale dependent). + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +/* Quoting the Unicode standard, section "Default Case Algorithms": + Find the word boundaries in X according to Unicode Standard Annex #29, + “Text Boundaries.” For each word boundary, find the first cased character + F following the word boundary. If F exists, map F to Titlecase_Mapping(F); + then map all characters C between F and the following word boundary to + Lowercase_Mapping(C). */ + +UNIT * +FUNC (const UNIT *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + /* The result being accumulated. */ + UNIT *result; + size_t length; + size_t allocated; + /* An array containing the word break positions. */ + char *wordbreaks; + + /* Initialize the accumulator. */ + if (nf != NULL || resultbuf == NULL) + { + result = NULL; + allocated = 0; + } + else + { + result = resultbuf; + allocated = *lengthp; + } + length = 0; + + /* Initialize the word breaks array. */ + if (n > 0) + { + wordbreaks = (char *) malloc (n); + if (wordbreaks == NULL) + { + errno = ENOMEM; + goto fail2; + } + U_WORDBREAKS (s, n, wordbreaks); + } + else + wordbreaks = NULL; + + { + const UNIT *s_end = s + n; + const char *wp = wordbreaks; + + /* When considering the string as segmented by word boundaries: For each + such segment: + - In the first part, we are searching for the first cased character. + In this state, in_word_first_part = true, and no conversion takes + place. + - In the second part, we are converting every character: the first + among these characters to title case, the other ones to lower case. + In this state, in_word_first_part = false. */ + bool in_word_first_part = true; + + /* Helper for evaluating the FINAL_SIGMA condition: + Last character that was not case-ignorable. */ + ucs4_t last_char_except_ignorable = + prefix_context.last_char_except_ignorable; + + /* Helper for evaluating the AFTER_SOFT_DOTTED and AFTER_I conditions: + Last character that was of combining class 230 ("Above") or 0. */ + ucs4_t last_char_normal_or_above = + prefix_context.last_char_normal_or_above; + + while (s < s_end) + { + /* Fetch the next character. */ + ucs4_t uc; + int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); + + ucs4_t (*single_character_map) (ucs4_t); + size_t offset_in_rule; /* offset in 'struct special_casing_rule' */ + + ucs4_t mapped_uc[3]; + unsigned int mapped_count; + + if (*wp) + /* Crossing a word boundary. */ + in_word_first_part = true; + + /* Determine single_character_map, offset_in_rule. + There are three possibilities: + - uc should not be converted. + - uc should be titlecased. + - uc should be lowercased. */ + if (in_word_first_part) + { + if (uc_is_cased (uc)) + { + /* uc is to be titlecased. */ + single_character_map = uc_totitle; + offset_in_rule = offsetof (struct special_casing_rule, title[0]); + in_word_first_part = false; + } + else + { + /* uc is not converted. */ + single_character_map = NULL; + offset_in_rule = 0; + } + } + else + { + /* uc is to be lowercased. */ + single_character_map = uc_tolower; + offset_in_rule = offsetof (struct special_casing_rule, lower[0]); + } + + /* Actually map uc. */ + if (single_character_map == NULL) + { + mapped_uc[0] = uc; + mapped_count = 1; + goto found_mapping; + } + + if (uc < 0x10000) + { + /* Look first in the special-casing table. */ + char code[3]; + + code[0] = (uc >> 8) & 0xff; + code[1] = uc & 0xff; + + for (code[2] = 0; ; code[2]++) + { + const struct special_casing_rule *rule = + gl_unicase_special_lookup (code, 3); + + if (rule == NULL) + break; + + /* Test if the condition applies. */ + /* Does the language apply? */ + if (rule->language[0] == '\0' + || (iso639_language != NULL + && iso639_language[0] == rule->language[0] + && iso639_language[1] == rule->language[1])) + { + /* Does the context apply? */ + int context = rule->context; + bool applies; + + if (context < 0) + context = - context; + switch (context) + { + case SCC_ALWAYS: + applies = true; + break; + + case SCC_FINAL_SIGMA: + /* "Before" condition: preceded by a sequence + consisting of a cased letter and a case-ignorable + sequence. + "After" condition: not followed by a sequence + consisting of a case-ignorable sequence and then a + cased letter. */ + /* Test the "before" condition. */ + applies = uc_is_cased (last_char_except_ignorable); + /* Test the "after" condition. */ + if (applies) + { + const UNIT *s2 = s + count; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + /* Our uc_is_case_ignorable function is + known to return false for all cased + characters. So we can call + uc_is_case_ignorable first. */ + if (!uc_is_case_ignorable (uc2)) + { + applies = ! uc_is_cased (uc2); + break; + } + s2 += count2; + } + else + { + applies = ! uc_is_cased (suffix_context.first_char_except_ignorable); + break; + } + } + } + break; + + case SCC_AFTER_SOFT_DOTTED: + /* "Before" condition: There is a Soft_Dotted character + before it, with no intervening character of + combining class 0 or 230 (Above). */ + /* Test the "before" condition. */ + applies = uc_is_property_soft_dotted (last_char_normal_or_above); + break; + + case SCC_MORE_ABOVE: + /* "After" condition: followed by a character of + combining class 230 (Above) with no intervening + character of combining class 0 or 230 (Above). */ + /* Test the "after" condition. */ + { + const UNIT *s2 = s + count; + applies = false; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + int ccc = uc_combining_class (uc2); + if (ccc == UC_CCC_A) + { + applies = true; + break; + } + if (ccc == UC_CCC_NR) + break; + s2 += count2; + } + else + { + applies = ((suffix_context.bits & SCC_MORE_ABOVE_MASK) != 0); + break; + } + } + } + break; + + case SCC_BEFORE_DOT: + /* "After" condition: followed by COMBINING DOT ABOVE + (U+0307). Any sequence of characters with a + combining class that is neither 0 nor 230 may + intervene between the current character and the + combining dot above. */ + /* Test the "after" condition. */ + { + const UNIT *s2 = s + count; + applies = false; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + if (uc2 == 0x0307) /* COMBINING DOT ABOVE */ + { + applies = true; + break; + } + { + int ccc = uc_combining_class (uc2); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + break; + } + s2 += count2; + } + else + { + applies = ((suffix_context.bits & SCC_BEFORE_DOT_MASK) != 0); + break; + } + } + } + break; + + case SCC_AFTER_I: + /* "Before" condition: There is an uppercase I before + it, and there is no intervening character of + combining class 0 or 230 (Above). */ + /* Test the "before" condition. */ + applies = (last_char_normal_or_above == 'I'); + break; + + default: + abort (); + } + if (rule->context < 0) + applies = !applies; + + if (applies) + { + /* The rule applies. + Look up the mapping (0 to 3 characters). */ + const unsigned short *mapped_in_rule = + (const unsigned short *)((const char *)rule + offset_in_rule); + + if (mapped_in_rule[0] == 0) + mapped_count = 0; + else + { + mapped_uc[0] = mapped_in_rule[0]; + if (mapped_in_rule[1] == 0) + mapped_count = 1; + else + { + mapped_uc[1] = mapped_in_rule[1]; + if (mapped_in_rule[2] == 0) + mapped_count = 2; + else + { + mapped_uc[2] = mapped_in_rule[2]; + mapped_count = 3; + } + } + } + goto found_mapping; + } + } + + /* Optimization: Save a hash table lookup in the next round. */ + if (!rule->has_next) + break; + } + } + + /* No special-cased mapping. So use the locale and context independent + mapping. */ + mapped_uc[0] = single_character_map (uc); + mapped_count = 1; + + found_mapping: + /* Found the mapping: uc maps to mapped_uc[0..mapped_count-1]. */ + { + unsigned int i; + + for (i = 0; i < mapped_count; i++) + { + ucs4_t muc = mapped_uc[i]; + + /* Append muc to the result accumulator. */ + if (length < allocated) + { + int ret = U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail1; + } + if (ret >= 0) + { + length += ret; + goto done_appending; + } + } + { + size_t old_allocated = allocated; + size_t new_allocated = 2 * old_allocated; + if (new_allocated < 64) + new_allocated = 64; + if (new_allocated < old_allocated) /* integer overflow? */ + abort (); + { + UNIT *larger_result; + if (result == NULL) + { + larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail1; + } + } + else if (result == resultbuf) + { + larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail1; + } + U_CPY (larger_result, resultbuf, length); + } + else + { + larger_result = + (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail1; + } + } + result = larger_result; + allocated = new_allocated; + { + int ret = U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail1; + } + if (ret < 0) + abort (); + length += ret; + goto done_appending; + } + } + } + done_appending: ; + } + } + + if (!uc_is_case_ignorable (uc)) + last_char_except_ignorable = uc; + + { + int ccc = uc_combining_class (uc); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + last_char_normal_or_above = uc; + } + + s += count; + wp += count; + } + } + + free (wordbreaks); + + if (nf != NULL) + { + /* Finally, normalize the result. */ + UNIT *normalized_result; + + normalized_result = U_NORMALIZE (nf, result, length, resultbuf, lengthp); + if (normalized_result == NULL) + goto fail2; + + free (result); + return normalized_result; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + goto fail2; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + UNIT *memory; + + memory = (UNIT *) realloc (result, length * sizeof (UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; + + fail1: + { + int saved_errno = errno; + free (wordbreaks); + errno = saved_errno; + } + fail2: + if (result != resultbuf) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return NULL; +} + +/* + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/include/libgnulib/unicase/u-is-cased.h b/include/libgnulib/unicase/u-is-cased.h new file mode 100755 index 0000000..a86d9b8 --- /dev/null +++ b/include/libgnulib/unicase/u-is-cased.h @@ -0,0 +1,136 @@ +/* Test whether case matters for a Unicode string. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +FUNC (const UNIT *s, size_t n, const char *iso639_language, + bool *resultp) +{ + UNIT normsbuf[2048 / sizeof (UNIT)]; + UNIT *norms; + size_t norms_length; + UNIT mappedbuf[2048 / sizeof (UNIT)]; + UNIT *mapped_toupper; + UNIT *mapped_tolower; + UNIT *mapped_totitle; + size_t mapped_length; + + /* Apply canonical decomposition to S. */ + norms_length = sizeof (normsbuf) / sizeof (UNIT); + norms = U_NORMALIZE (UNINORM_NFD, s, n, normsbuf, &norms_length); + if (norms == NULL) + /* errno is set here. */ + return -1; + + mapped_length = sizeof (mappedbuf) / sizeof (UNIT); + + /* Apply toupper mapping. */ + mapped_toupper = U_TOUPPER (norms, norms_length, iso639_language, NULL, + mappedbuf, &mapped_length); + if (mapped_toupper == NULL) + goto fail; + + /* Compare. */ + if (!(mapped_length == norms_length + && U_CMP (mapped_toupper, norms, norms_length) == 0)) + { + if (mapped_toupper != mappedbuf) + free (mapped_toupper); + goto yes; + } + + /* Apply tolower mapping. */ + mapped_tolower = U_TOLOWER (norms, norms_length, iso639_language, NULL, + mapped_toupper, &mapped_length); + if (mapped_tolower == NULL) + { + if (mapped_toupper != mappedbuf) + { + int saved_errno = errno; + free (mapped_toupper); + errno = saved_errno; + } + goto fail; + } + + if (mapped_toupper != mapped_tolower && mapped_toupper != mappedbuf) + free (mapped_toupper); + + /* Compare. */ + if (!(mapped_length == norms_length + && U_CMP (mapped_tolower, norms, norms_length) == 0)) + { + if (mapped_tolower != mappedbuf) + free (mapped_tolower); + goto yes; + } + + /* Apply totitle mapping. */ + mapped_totitle = U_TOTITLE (norms, norms_length, iso639_language, NULL, + mapped_tolower, &mapped_length); + if (mapped_totitle == NULL) + { + if (mapped_tolower != mappedbuf) + { + int saved_errno = errno; + free (mapped_tolower); + errno = saved_errno; + } + goto fail; + } + + if (mapped_tolower != mapped_totitle && mapped_tolower != mappedbuf) + free (mapped_tolower); + + /* Compare. */ + if (!(mapped_length == norms_length + && U_CMP (mapped_totitle, norms, norms_length) == 0)) + { + if (mapped_totitle != mappedbuf) + free (mapped_totitle); + goto yes; + } + + if (mapped_totitle != mappedbuf) + free (mapped_totitle); + if (norms != normsbuf) + free (norms); + *resultp = false; + return 0; + + yes: + if (norms != normsbuf) + free (norms); + *resultp = true; + return 0; + + fail: + if (norms != normsbuf) + { + int saved_errno = errno; + free (norms); + errno = saved_errno; + } + return -1; +} diff --git a/include/libgnulib/unicase/u-is-invariant.h b/include/libgnulib/unicase/u-is-invariant.h new file mode 100755 index 0000000..2301b7f --- /dev/null +++ b/include/libgnulib/unicase/u-is-invariant.h @@ -0,0 +1,72 @@ +/* Test whether a Unicode string is invariant under a given case mapping. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +FUNC (const UNIT *s, size_t n, + UNIT * (*mapping) (const UNIT *s, size_t n, const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp), + const char *iso639_language, + bool *resultp) +{ + UNIT normsbuf[2048 / sizeof (UNIT)]; + UNIT *norms; + size_t norms_length; + UNIT mappedbuf[2048 / sizeof (UNIT)]; + UNIT *mapped; + size_t mapped_length; + + /* Apply canonical decomposition to S. */ + norms_length = sizeof (normsbuf) / sizeof (UNIT); + norms = U_NORMALIZE (UNINORM_NFD, s, n, normsbuf, &norms_length); + if (norms == NULL) + /* errno is set here. */ + return -1; + + /* Apply mapping. */ + mapped_length = sizeof (mappedbuf) / sizeof (UNIT); + mapped = mapping (norms, norms_length, iso639_language, NULL, + mappedbuf, &mapped_length); + if (mapped == NULL) + { + if (norms != normsbuf) + { + int saved_errno = errno; + free (norms); + errno = saved_errno; + } + return -1; + } + + /* Compare. */ + *resultp = (mapped_length == norms_length + && U_CMP (mapped, norms, norms_length) == 0); + + if (mapped != mappedbuf) + free (mapped); + if (norms != normsbuf) + free (norms); + return 0; +} diff --git a/include/libgnulib/unicase/u-prefix-context.h b/include/libgnulib/unicase/u-prefix-context.h new file mode 100755 index 0000000..b69fd5a --- /dev/null +++ b/include/libgnulib/unicase/u-prefix-context.h @@ -0,0 +1,100 @@ +/* Case-mapping context of prefix UTF-8/UTF-16/UTF-32 string. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +casing_prefix_context_t +FUNC1 (const UNIT *s, size_t n) +{ + return FUNC2 (s, n, unicase_empty_prefix_context); +} + +casing_prefix_context_t +FUNC2 (const UNIT *s, size_t n, casing_prefix_context_t a_context) +{ +#if 0 + /* Forward iteration. Slow for long strings. */ + casing_prefix_context_t context = a_context; + const UNIT *s_end = s + n; + + while (s < s_end) + { + ucs4_t uc; + int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); + + if (!uc_is_case_ignorable (uc)) + context.last_char_except_ignorable = uc; + + { + int ccc = uc_combining_class (uc); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + context.last_char_normal_or_above = uc; + } + + s += count; + } + + return context; +#else + /* Iterate backwards, only as far as needed. */ + casing_prefix_context_t context; + ucs4_t last_char_except_ignorable = (ucs4_t)(-1); + ucs4_t last_char_normal_or_above = (ucs4_t)(-1); + const UNIT *p = s + n; + + for (;;) + { + ucs4_t uc; + p = U_PREV (&uc, p, s); + if (p == NULL) + break; + + if (last_char_except_ignorable == (ucs4_t)(-1)) + { + if (!uc_is_case_ignorable (uc)) + last_char_except_ignorable = uc; + } + + if (last_char_normal_or_above == (ucs4_t)(-1)) + { + int ccc = uc_combining_class (uc); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + last_char_normal_or_above = uc; + } + + if (last_char_except_ignorable != (ucs4_t)(-1) + && last_char_normal_or_above != (ucs4_t)(-1)) + break; + } + context.last_char_except_ignorable = + (last_char_except_ignorable != (ucs4_t)(-1) + ? last_char_except_ignorable + : a_context.last_char_except_ignorable); + context.last_char_normal_or_above = + (last_char_normal_or_above != (ucs4_t)(-1) + ? last_char_normal_or_above + : a_context.last_char_normal_or_above); + + return context; +#endif +} diff --git a/include/libgnulib/unicase/u-suffix-context.h b/include/libgnulib/unicase/u-suffix-context.h new file mode 100755 index 0000000..173d32d --- /dev/null +++ b/include/libgnulib/unicase/u-suffix-context.h @@ -0,0 +1,98 @@ +/* Case-mapping context of suffix UTF-8/UTF-16/UTF-32 string. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +casing_suffix_context_t +FUNC1 (const UNIT *s, size_t n) +{ + return FUNC2 (s, n, unicase_empty_suffix_context); +} + +casing_suffix_context_t +FUNC2 (const UNIT *s, size_t n, casing_suffix_context_t a_context) +{ + casing_suffix_context_t context; + /* Evaluate all three conditions in a single pass through the string S. + The three variables are -1 as long as the value of the condition has + not been determined. */ + ucs4_t first_char_except_ignorable = (ucs4_t)(-1); + int scc_MORE_ABOVE = -1; + int scc_BEFORE_DOT = -1; + const UNIT *s_end = s + n; + + while (s < s_end) + { + ucs4_t uc; + int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); + + if (first_char_except_ignorable == (ucs4_t)(-1)) + { + if (!uc_is_case_ignorable (uc)) + first_char_except_ignorable = uc; + } + + if (scc_MORE_ABOVE < 0) + { + int ccc = uc_combining_class (uc); + if (ccc == UC_CCC_A) + scc_MORE_ABOVE = SCC_MORE_ABOVE_MASK; + else if (ccc == UC_CCC_NR) + scc_MORE_ABOVE = 0; + } + + if (scc_BEFORE_DOT < 0) + { + if (uc == 0x0307) /* COMBINING DOT ABOVE */ + scc_BEFORE_DOT = SCC_BEFORE_DOT_MASK; + else + { + int ccc = uc_combining_class (uc); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + scc_BEFORE_DOT = 0; + } + } + + if (first_char_except_ignorable != (ucs4_t)(-1) + && (scc_MORE_ABOVE | scc_BEFORE_DOT) >= 0) + /* All conditions have been determined. */ + break; + + s += count; + } + + /* For those conditions that have not been determined so far, use the + value from the argument context. */ + context.first_char_except_ignorable = + (first_char_except_ignorable != (ucs4_t)(-1) + ? first_char_except_ignorable + : a_context.first_char_except_ignorable); + context.bits = + (scc_MORE_ABOVE >= 0 + ? scc_MORE_ABOVE + : a_context.bits & SCC_MORE_ABOVE_MASK) + | (scc_BEFORE_DOT >= 0 + ? scc_BEFORE_DOT + : a_context.bits & SCC_BEFORE_DOT_MASK); + return context; +} diff --git a/include/libgnulib/unicase/u-totitle.h b/include/libgnulib/unicase/u-totitle.h new file mode 100755 index 0000000..effa1a1 --- /dev/null +++ b/include/libgnulib/unicase/u-totitle.h @@ -0,0 +1,36 @@ +/* Titlecase mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (const UNIT *s, size_t n, const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + return U_CT_TOTITLE (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + nf, + resultbuf, lengthp); +} diff --git a/include/libgnulib/unicase/unicasemap.h b/include/libgnulib/unicase/unicasemap.h new file mode 100755 index 0000000..6783b9b --- /dev/null +++ b/include/libgnulib/unicase/unicasemap.h @@ -0,0 +1,70 @@ +/* Case mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#include + +#include "unitypes.h" +#include "unicase.h" +#include "uninorm.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +extern uint8_t * + u8_casemap (const uint8_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + ucs4_t (*single_character_map) (ucs4_t), + size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); + +extern uint16_t * + u16_casemap (const uint16_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + ucs4_t (*single_character_map) (ucs4_t), + size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); + +extern uint32_t * + u32_casemap (const uint32_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + ucs4_t (*single_character_map) (ucs4_t), + size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/unicodeio.h b/include/libgnulib/unicodeio.h new file mode 100755 index 0000000..0db1d35 --- /dev/null +++ b/include/libgnulib/unicodeio.h @@ -0,0 +1,58 @@ +/* Unicode character output to streams with locale dependent encoding. + + Copyright (C) 2000-2003, 2005, 2008-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef UNICODEIO_H +#define UNICODEIO_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Converts the Unicode character CODE to its multibyte representation + in the current locale and calls the SUCCESS callback on the resulting + byte sequence. If an error occurs, invokes the FAILURE callback instead, + passing it CODE and an English error string. + Returns whatever the callback returned. + Assumes that the locale doesn't change between two calls. */ +extern long unicode_to_mb (unsigned int code, + long (*success) (const char *buf, size_t buflen, + void *callback_arg), + long (*failure) (unsigned int code, const char *msg, + void *callback_arg), + void *callback_arg); + +/* Outputs the Unicode character CODE to the output stream STREAM. + Upon failure, exit if exit_on_error is true, otherwise output a fallback + notation. */ +extern void print_unicode_char (FILE *stream, unsigned int code, + int exit_on_error); + +/* Simple success callback that outputs the converted string. + The STREAM is passed as callback_arg. */ +extern long fwrite_success_callback (const char *buf, size_t buflen, + void *callback_arg); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/uniconv/u-conv-from-enc.h b/include/libgnulib/uniconv/u-conv-from-enc.h new file mode 100755 index 0000000..31e30e1 --- /dev/null +++ b/include/libgnulib/uniconv/u-conv-from-enc.h @@ -0,0 +1,99 @@ +/* Conversion to UTF-16/UTF-32 from legacy encodings. + Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (const char *fromcode, + enum iconv_ilseq_handler handler, + const char *src, size_t srclen, + size_t *offsets, + UNIT *resultbuf, size_t *lengthp) +{ +#if HAVE_UTF_NAME + char *result = (char *) resultbuf; + size_t length = *lengthp * sizeof (UNIT); + + if (mem_iconveha (src, srclen, fromcode, UTF_NAME, true, handler, + offsets, &result, &length) < 0) + return NULL; + if (offsets != NULL) + { + /* Convert 'char *' offsets to 'UNIT *' offsets. */ + size_t *offsets_end = offsets + srclen; + size_t *o; + + for (o = offsets; o < offsets_end; o++) + if (*o != (size_t)(-1)) + *o = *o / sizeof (UNIT); + } + if ((length % sizeof (UNIT)) != 0) + abort (); + *lengthp = length / sizeof (UNIT); + return (UNIT *) result; +#else + uint8_t *utf8_string; + size_t utf8_length; + UNIT *result; + + utf8_string = + u8_conv_from_encoding (fromcode, handler, src, srclen, offsets, + NULL, &utf8_length); + if (utf8_string == NULL) + return NULL; + result = U8_TO_U (utf8_string, utf8_length, resultbuf, lengthp); + if (result == NULL) + { + int saved_errno = errno; + free (utf8_string); + errno = saved_errno; + return NULL; + } + if (offsets != NULL) + { + size_t length = *lengthp; + size_t *offsets_end = offsets + srclen; + size_t *o; + size_t off8 = 0; /* offset into utf8_string */ + size_t offunit = 0; /* offset into result */ + + for (o = offsets; o < offsets_end; o++) + if (*o != (size_t)(-1)) + { + while (off8 < *o) + { + int count8 = u8_mblen (utf8_string + off8, utf8_length - off8); + int countunit = U_MBLEN (result + offunit, length - offunit); + if (count8 < 0 || countunit < 0) + abort (); + off8 += count8; + offunit += countunit; + } + if (*o != off8) + abort (); + *o = offunit; + } + } + free (utf8_string); + return result; +#endif +} diff --git a/include/libgnulib/uniconv/u-conv-to-enc.h b/include/libgnulib/uniconv/u-conv-to-enc.h new file mode 100755 index 0000000..74c7fa3 --- /dev/null +++ b/include/libgnulib/uniconv/u-conv-to-enc.h @@ -0,0 +1,164 @@ +/* Conversion from UTF-16/UTF-32 to legacy encodings. + Copyright (C) 2002, 2006-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +char * +FUNC (const char *tocode, + enum iconv_ilseq_handler handler, + const UNIT *src, size_t srclen, + size_t *offsets, + char *resultbuf, size_t *lengthp) +{ +#if HAVE_UTF_NAME + size_t *scaled_offsets; + char *result; + size_t length; + + if (offsets != NULL && srclen > 0) + { + scaled_offsets = + (size_t *) malloc (srclen * sizeof (UNIT) * sizeof (size_t)); + if (scaled_offsets == NULL) + { + errno = ENOMEM; + return NULL; + } + } + else + scaled_offsets = NULL; + + result = resultbuf; + length = *lengthp; + if (mem_iconveha ((const char *) src, srclen * sizeof (UNIT), + UTF_NAME, tocode, + handler == iconveh_question_mark, handler, + scaled_offsets, &result, &length) < 0) + { + int saved_errno = errno; + free (scaled_offsets); + errno = saved_errno; + return NULL; + } + + if (offsets != NULL) + { + /* Convert scaled_offsets[srclen * sizeof (UNIT)] to + offsets[srclen]. */ + size_t i; + + for (i = 0; i < srclen; i++) + offsets[i] = scaled_offsets[i * sizeof (UNIT)]; + free (scaled_offsets); + } + + if (result == NULL) /* when (resultbuf == NULL && length == 0) */ + { + result = (char *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + *lengthp = length; + return result; +#else + uint8_t tmpbuf[4096]; + size_t tmpbufsize = SIZEOF (tmpbuf); + uint8_t *utf8_src; + size_t utf8_srclen; + size_t *scaled_offsets; + char *result; + + utf8_src = U_TO_U8 (src, srclen, tmpbuf, &tmpbufsize); + if (utf8_src == NULL) + return NULL; + utf8_srclen = tmpbufsize; + + if (offsets != NULL && utf8_srclen > 0) + { + scaled_offsets = (size_t *) malloc (utf8_srclen * sizeof (size_t)); + if (scaled_offsets == NULL) + { + if (utf8_src != tmpbuf) + free (utf8_src); + errno = ENOMEM; + return NULL; + } + } + else + scaled_offsets = NULL; + + result = u8_conv_to_encoding (tocode, handler, utf8_src, utf8_srclen, + scaled_offsets, resultbuf, lengthp); + if (result == NULL) + { + int saved_errno = errno; + free (scaled_offsets); + if (utf8_src != tmpbuf) + free (utf8_src); + errno = saved_errno; + return NULL; + } + if (offsets != NULL) + { + size_t iunit; /* offset into src */ + size_t i8; /* offset into utf8_src */ + + for (iunit = 0; iunit < srclen; iunit++) + offsets[iunit] = (size_t)(-1); + + iunit = 0; + i8 = 0; + while (iunit < srclen && i8 < utf8_srclen) + { + int countunit; + int count8; + + offsets[iunit] = scaled_offsets[i8]; + + countunit = U_MBLEN (src + iunit, srclen - iunit); + count8 = u8_mblen (utf8_src + i8, utf8_srclen - i8); + if (countunit < 0 || count8 < 0) + abort (); + iunit += countunit; + i8 += count8; + } + /* Check that utf8_src has been traversed entirely. */ + if (i8 < utf8_srclen) + abort (); + /* Check that src has been traversed entirely, except possibly for an + incomplete sequence of units at the end. */ + if (iunit < srclen) + { + offsets[iunit] = *lengthp; + if (!(U_MBLEN (src + iunit, srclen - iunit) < 0)) + abort (); + } + free (scaled_offsets); + } + if (utf8_src != tmpbuf) + free (utf8_src); + return result; +#endif +} diff --git a/include/libgnulib/uniconv/u-strconv-from-enc.h b/include/libgnulib/uniconv/u-strconv-from-enc.h new file mode 100755 index 0000000..9f3e099 --- /dev/null +++ b/include/libgnulib/uniconv/u-strconv-from-enc.h @@ -0,0 +1,40 @@ +/* Conversion to UTF-8/UTF-16/UTF-32 from legacy encodings. + Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (const char *string, + const char *fromcode, + enum iconv_ilseq_handler handler) +{ + UNIT *result; + size_t length; + + result = + U_CONV_FROM_ENCODING (fromcode, handler, + string, strlen (string) + 1, NULL, + NULL, &length); + if (result == NULL) + return NULL; + /* Verify the result has exactly one NUL unit, at the end. */ + if (!(length > 0 && result[length-1] == 0 + && U_STRLEN (result) == length-1)) + { + free (result); + errno = EILSEQ; + return NULL; + } + return result; +} diff --git a/include/libgnulib/uniconv/u-strconv-to-enc.h b/include/libgnulib/uniconv/u-strconv-to-enc.h new file mode 100755 index 0000000..ee7f964 --- /dev/null +++ b/include/libgnulib/uniconv/u-strconv-to-enc.h @@ -0,0 +1,71 @@ +/* Conversion from UTF-16/UTF-32 to legacy encodings. + Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +char * +FUNC (const UNIT *string, + const char *tocode, + enum iconv_ilseq_handler handler) +{ +#if HAVE_UTF_NAME + char *result = NULL; + size_t length = 0; + + if (mem_iconveha ((const char *) string, (U_STRLEN (string) + 1) * sizeof (UNIT), + UTF_NAME, tocode, + handler == iconveh_question_mark, handler, + NULL, &result, &length) < 0) + return NULL; + /* Verify the result has exactly one NUL byte, at the end. */ + if (!(length > 0 && result[length-1] == '\0' && strlen (result) == length-1)) + { + free (result); + errno = EILSEQ; + return NULL; + } + return result; +#else + uint8_t tmpbuf[4096]; + size_t tmpbufsize = SIZEOF (tmpbuf); + uint8_t *utf8_string; + char *result; + + utf8_string = U_TO_U8 (string, U_STRLEN (string) + 1, tmpbuf, &tmpbufsize); + if (utf8_string == NULL) + return NULL; + result = u8_strconv_to_encoding (utf8_string, tocode, handler); + if (result == NULL) + { + if (utf8_string != tmpbuf) + { + int saved_errno = errno; + free (utf8_string); + errno = saved_errno; + } + return NULL; + } + if (utf8_string != tmpbuf) + free (utf8_string); + return result; +#endif +} diff --git a/include/libgnulib/unigbrk/gbrkprop.h b/include/libgnulib/unigbrk/gbrkprop.h new file mode 100755 index 0000000..7c098bf --- /dev/null +++ b/include/libgnulib/unigbrk/gbrkprop.h @@ -0,0 +1,4434 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Grapheme break property of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#define gbrkprop_header_0 16 +#define gbrkprop_header_1 15 +#define gbrkprop_header_2 7 +#define gbrkprop_header_3 511 +#define gbrkprop_header_4 127 +static const +struct + { + int level1[15]; + short level2[3 << 9]; + unsigned char level3[131 << 7]; + } +unigbrkprop = +{ + { + 0, 512, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1024 + }, + { + 0, 128, -1, -1, -1, -1, 256, -1, + -1, 384, -1, 512, 640, 768, 896, 1024, + 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048, + 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, + 3200, 3328, 3456, 3584, -1, -1, 3712, -1, + -1, -1, -1, -1, -1, -1, 3840, 3968, + 4096, 4224, 4352, -1, 4480, 4608, 4736, 4864, + 4992, 5120, -1, 5248, -1, -1, -1, -1, + 5376, 5504, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5632, 5760, 5888, -1, -1, -1, -1, + 6016, 6144, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6272, 6400, -1, -1, + 6528, 6656, 6784, 6912, 7040, 7168, -1, 7296, + 7424, 7552, 7680, 7808, 7936, 8064, 8192, 7424, + 7552, 7680, 7808, 7936, 8064, 8192, 7424, 7552, + 7680, 7808, 7936, 8064, 8192, 7424, 7552, 7680, + 7808, 7936, 8064, 8192, 7424, 7552, 7680, 7808, + 7936, 8064, 8192, 7424, 7552, 7680, 7808, 7936, + 8064, 8192, 7424, 7552, 7680, 7808, 7936, 8064, + 8192, 7424, 7552, 7680, 7808, 7936, 8064, 8192, + 7424, 7552, 7680, 7808, 7936, 8064, 8192, 7424, + 7552, 7680, 7808, 7936, 8064, 8192, 7424, 7552, + 7680, 7808, 7936, 8064, 8192, 7424, 7552, 7680, + 7808, 7936, 8064, 8192, 7424, 7552, 7680, 8320, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 8448, -1, + -1, -1, -1, -1, 8576, 8704, -1, 8832, + -1, -1, -1, 8960, -1, 9088, 9216, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 9344, 9472, -1, -1, + -1, -1, 9600, -1, -1, 9728, 9856, 9984, + 10112, 10240, 10368, 10496, 10624, 10752, 10880, 11008, + 11136, 11264, -1, 11392, 11520, 11648, 11776, -1, + 11904, -1, 12032, 12160, 12288, 12416, -1, -1, + 12544, 12672, 12800, 12928, -1, 13056, 13184, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 13312, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 13440, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 13568, 13696, -1, + -1, -1, 13824, -1, -1, -1, 13952, 14080, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 14208, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 14336, -1, + -1, -1, 14464, 14592, 14720, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 14848, 14976, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 15104, 15232, 13696, -1, -1, 15360, -1, -1, + -1, 15488, -1, 15616, -1, -1, -1, -1, + -1, 15744, 15872, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 16000, -1, -1, -1, 16128, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 16256, 16384, 16512, 16640, 16384, 16384, 16384, 16384, + 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, + 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, + 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_LF, GBP_CONTROL, + GBP_CONTROL, GBP_CR, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_CONTROL, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_PREPEND, GBP_PREPEND, GBP_PREPEND, GBP_PREPEND, + GBP_PREPEND, GBP_PREPEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_PREPEND, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_PREPEND, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_PREPEND, GBP_PREPEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_PREPEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, + GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_PREPEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_CONTROL, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, + GBP_EXTEND, GBP_ZWJ, GBP_CONTROL, GBP_CONTROL, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_L, GBP_L, GBP_L, + GBP_L, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, + GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_T, GBP_T, GBP_T, GBP_T, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_PREPEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_PREPEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_EXTEND, GBP_OTHER, GBP_PREPEND, GBP_PREPEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_PREPEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_PREPEND, + GBP_SPACINGMARK, GBP_PREPEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_PREPEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_PREPEND, GBP_PREPEND, GBP_PREPEND, GBP_PREPEND, + GBP_PREPEND, GBP_PREPEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_PREPEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_PREPEND, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_V, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_V, + GBP_V, GBP_V, GBP_V, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_RI, GBP_RI, + GBP_RI, GBP_RI, GBP_RI, GBP_RI, + GBP_RI, GBP_RI, GBP_RI, GBP_RI, + GBP_RI, GBP_RI, GBP_RI, GBP_RI, + GBP_RI, GBP_RI, GBP_RI, GBP_RI, + GBP_RI, GBP_RI, GBP_RI, GBP_RI, + GBP_RI, GBP_RI, GBP_RI, GBP_RI, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, + GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, + GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL + } +}; diff --git a/include/libgnulib/unigbrk/u-grapheme-breaks.h b/include/libgnulib/unigbrk/u-grapheme-breaks.h new file mode 100755 index 0000000..3e8f495 --- /dev/null +++ b/include/libgnulib/unigbrk/u-grapheme-breaks.h @@ -0,0 +1,161 @@ +/* Grapheme cluster break function. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + Written by Ben Pfaff , 2010. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +/* This file implements section 3 "Grapheme Cluster Boundaries" + of Unicode Standard Annex #29 . */ + +void +FUNC (const UNIT *s, size_t n, char *p) +{ + if (n > 0) + { + const UNIT *s_end = s + n; + + /* Grapheme Cluster break property of the last character. + -1 at the very beginning of the string. */ + int last_char_prop = -1; + + /* True if the last character ends a sequence of Indic_Conjunct_Break + values: consonant {extend|linker}* */ + bool incb_consonant_extended = false; + /* True if the last character ends a sequence of Indic_Conjunct_Break + values: consonant {extend|linker}* linker */ + bool incb_consonant_extended_linker = false; + /* True if the last character ends a sequence of Indic_Conjunct_Break + values: consonant {extend|linker}* linker {extend|linker}* */ + bool incb_consonant_extended_linker_extended = false; + + /* True if the last character ends an emoji modifier sequence + \p{Extended_Pictographic} Extend*. */ + bool emoji_modifier_sequence = false; + /* True if the last character was immediately preceded by an + emoji modifier sequence \p{Extended_Pictographic} Extend*. */ + bool emoji_modifier_sequence_before_last_char = false; + + /* Number of consecutive regional indicator (RI) characters seen + immediately before the current point. */ + size_t ri_count = 0; + + /* Don't break inside multibyte characters. */ + memset (p, 0, n); + + while (s < s_end) + { + ucs4_t uc; + int count = U_MBTOUC (&uc, s, s_end - s); + int prop = uc_graphemeclusterbreak_property (uc); + int incb = uc_indic_conjunct_break (uc); + + /* Break at the start of the string (GB1). */ + if (last_char_prop < 0) + *p = 1; + else + { + /* No break between CR and LF (GB3). */ + if (last_char_prop == GBP_CR && prop == GBP_LF) + /* *p = 0 */; + /* Break before and after newlines (GB4, GB5). */ + else if ((last_char_prop == GBP_CR + || last_char_prop == GBP_LF + || last_char_prop == GBP_CONTROL) + || (prop == GBP_CR + || prop == GBP_LF + || prop == GBP_CONTROL)) + *p = 1; + /* No break between Hangul syllable sequences (GB6, GB7, GB8). */ + else if ((last_char_prop == GBP_L + && (prop == GBP_L + || prop == GBP_V + || prop == GBP_LV + || prop == GBP_LVT)) + || ((last_char_prop == GBP_LV + || last_char_prop == GBP_V) + && (prop == GBP_V + || prop == GBP_T)) + || ((last_char_prop == GBP_LVT + || last_char_prop == GBP_T) + && prop == GBP_T)) + /* *p = 0 */; + /* No break before extending characters or ZWJ (GB9). */ + else if (prop == GBP_EXTEND || prop == GBP_ZWJ) + /* *p = 0 */; + /* No break before SpacingMarks (GB9a). */ + else if (prop == GBP_SPACINGMARK) + /* *p = 0 */; + /* No break after Prepend characters (GB9b). */ + else if (last_char_prop == GBP_PREPEND) + /* *p = 0 */; + /* No break within certain combinations of Indic_Conjunct_Break + values: Between + consonant {extend|linker}* linker {extend|linker}* + and + consonant + (GB9c). */ + else if (incb_consonant_extended_linker_extended + && incb == UC_INDIC_CONJUNCT_BREAK_CONSONANT) + /* *p = 0 */; + /* No break within emoji modifier sequences or emoji zwj sequences + (GB11). */ + else if (last_char_prop == GBP_ZWJ + && emoji_modifier_sequence_before_last_char + && uc_is_property_extended_pictographic (uc)) + /* *p = 0 */; + /* No break between RI if there is an odd number of RI + characters before (GB12, GB13). */ + else if (prop == GBP_RI && (ri_count % 2) != 0) + /* *p = 0 */; + /* Break everywhere (GB999). */ + else + *p = 1; + } + + incb_consonant_extended_linker = + incb_consonant_extended && incb == UC_INDIC_CONJUNCT_BREAK_LINKER; + incb_consonant_extended_linker_extended = + (incb_consonant_extended_linker + || (incb_consonant_extended_linker_extended + && incb >= UC_INDIC_CONJUNCT_BREAK_LINKER)); + incb_consonant_extended = + (incb == UC_INDIC_CONJUNCT_BREAK_CONSONANT + || (incb_consonant_extended + && incb >= UC_INDIC_CONJUNCT_BREAK_LINKER)); + + emoji_modifier_sequence_before_last_char = emoji_modifier_sequence; + emoji_modifier_sequence = + (emoji_modifier_sequence && prop == GBP_EXTEND) + || uc_is_property_extended_pictographic (uc); + + last_char_prop = prop; + + if (prop == GBP_RI) + ri_count++; + else + ri_count = 0; + + s += count; + p += count; + } + } +} diff --git a/include/libgnulib/unilbrk/internal.h b/include/libgnulib/unilbrk/internal.h new file mode 100755 index 0000000..b1e9ba0 --- /dev/null +++ b/include/libgnulib/unilbrk/internal.h @@ -0,0 +1,43 @@ +/* Internal functions for line breaking of Unicode strings. + Copyright (C) 2001-2003, 2005-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2021. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +extern void + u8_possible_linebreaks_loop (const uint8_t *s, size_t n, + const char *encoding, int cr, + char *_UC_RESTRICT p); +extern void + u16_possible_linebreaks_loop (const uint16_t *s, size_t n, + const char *encoding, int cr, + char *_UC_RESTRICT p); +extern void + u32_possible_linebreaks_loop (const uint32_t *s, size_t n, + const char *encoding, int cr, + char *_UC_RESTRICT p); + +extern int + u8_width_linebreaks_internal (const uint8_t *s, size_t n, + int width, int start_column, int at_end_columns, + const char *o, const char *encoding, int cr, + char *p); diff --git a/include/libgnulib/unilbrk/lbrkprop1.h b/include/libgnulib/unilbrk/lbrkprop1.h new file mode 100755 index 0000000..a0cc17a --- /dev/null +++ b/include/libgnulib/unilbrk/lbrkprop1.h @@ -0,0 +1,41 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Line breaking properties of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#define lbrkprop_header_0 16 +#define lbrkprop_header_1 15 +#define lbrkprop_header_2 7 +#define lbrkprop_header_3 511 +#define lbrkprop_header_4 127 + +typedef struct + { + int level1[15]; + int level2[4 << 9]; + unsigned char level3[260 << 7]; + } +lbrkprop_t; +extern const lbrkprop_t unilbrkprop; diff --git a/include/libgnulib/unilbrk/lbrkprop2.h b/include/libgnulib/unilbrk/lbrkprop2.h new file mode 100755 index 0000000..99d9a6a --- /dev/null +++ b/include/libgnulib/unilbrk/lbrkprop2.h @@ -0,0 +1,8614 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Line breaking properties of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +const lbrkprop_t unilbrkprop = +{ + { + 0, 512, 1024, 1024, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1536 + }, + { + 0, 128, 256, 256, 256, 384, 512, 640, + 256, 768, 896, 1024, 1152, 1280, 1408, 1536, + 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, + 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, + 3712, 3840, 3968, 4096, 4224, 4352, 4480, 4608, + 4736, 256, 256, 256, 256, 4864, 4992, 5120, + 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, + 6272, 6400, 256, 6528, 256, 256, 6656, 6784, + 6912, 7040, 7168, 7296, 7424, 7552, 7680, 7808, + 7936, 8064, 8192, 8320, 8448, 8576, 8704, 8832, + 256, 256, 256, 8960, 256, 256, 9088, 9216, + 256, 9344, 9472, 9600, 9728, 9856, 9984, 10112, + 10240, 10368, 10496, 10624, 10752, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 10880, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 11008, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 11136, 256, 256, 11264, 11392, 256, 11520, + 11648, 11776, 11904, 12032, 12160, 12288, 12416, 12544, + 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, + 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, + 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, + 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, + 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, + 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, + 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, + 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, + 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, + 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, + 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13568, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 9984, 9984, 9984, 9984, 13696, 13824, + 256, 256, 13952, 14080, 14208, 14336, 14464, 14592, + 14720, 14848, 14976, 15104, -1, 15232, 15360, 15488, + 256, 15616, 15744, 15872, 256, 256, 16000, 16128, + 16256, 16384, 16512, 16640, 16768, 16896, 17024, 17152, + 17280, 17408, 17536, 17664, 17792, 17920, 18048, 18176, + 18304, 18432, 18560, 18688, 18816, 18944, 19072, 19200, + 19328, 19456, -1, 19584, 19712, 19840, 19968, -1, + 20096, 20224, 20352, 20480, 20608, 20736, 20864, 20992, + 21120, 21248, 21376, 21504, -1, 21632, 21760, 21888, + 256, 256, 256, 256, 256, 256, 256, 22016, + 22144, 256, 22272, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 22400, + 256, 256, 256, 256, 22528, 22656, 22784, 256, + 22912, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 14848, + 256, 256, 256, 23040, 23168, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 23296, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 23424, 23552, 23680, 23808, + -1, -1, 23936, -1, 24064, 24192, 24320, 24448, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 24576, + 9984, 9984, 9984, 9984, 9984, 9984, 24704, 24704, + 24704, 24832, 24960, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 25088, + 9984, 9984, 25216, 9984, 9984, 25344, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 25472, 25600, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 25728, 256, 256, 256, 25856, 25984, 22272, + 256, 26112, 26240, 26368, 26496, 26624, 26752, -1, + 26880, 27008, 27136, 256, 256, 27264, 256, 27392, + 256, 256, 256, 256, 27520, 27648, -1, -1, + -1, -1, -1, -1, -1, -1, 27776, -1, + 27904, 28032, 28160, -1, -1, 28288, -1, -1, + -1, 28416, -1, 28544, -1, -1, -1, 28672, + 256, 28800, 28928, -1, -1, -1, -1, -1, + 29056, 29184, 29312, -1, 29440, 29568, -1, -1, + 29696, 29824, 29952, 30080, 30208, 30336, 30464, 30592, + 30720, 30848, 30976, 31104, 31232, 31360, 31488, 31616, + 31744, 31872, 32000, 32128, 32256, 32384, 256, 32512, + 30336, 30336, 30336, 30336, 30336, 30336, 30336, 32640, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, + 9984, 9984, 9984, 9984, 9984, 9984, 9984, 32768, + 32896, -1, 33024, 33152, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_LF<<1)|0, (LBP_BK<<1)|0, + (LBP_BK<<1)|0, (LBP_CR<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_SP<<1)|0, (LBP_EX<<1)|0, (LBP_QU1<<1)|0, (LBP_AL1<<1)|0, + (LBP_PR<<1)|0, (LBP_PO<<1)|0, (LBP_AL1<<1)|0, (LBP_QU1<<1)|0, + (LBP_OP1<<1)|0, (LBP_CP1<<1)|0, (LBP_AL1<<1)|0, (LBP_PR<<1)|0, + (LBP_IS<<1)|0, (LBP_HY<<1)|0, (LBP_IS<<1)|0, (LBP_SY<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_IS<<1)|0, (LBP_IS<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_EX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, + (LBP_PR<<1)|0, (LBP_CP1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, + (LBP_BA<<1)|0, (LBP_CL<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_BK<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_GL<<1)|0, (LBP_OP1<<1)|0, (LBP_PO<<1)|0, (LBP_PR<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_QU2<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_PO<<1)|0, (LBP_PR<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_BB<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_QU3<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_OP1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_BB<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_BB<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_BB<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_GL<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, + (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_IS<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_IS<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_PR<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_EX<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_PO<<1)|0, (LBP_PO<<1)|0, (LBP_PO<<1)|0, + (LBP_IS<<1)|0, (LBP_IS<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_EX<<1)|0, + (LBP_CM<<1)|0, (LBP_EX<<1)|0, (LBP_EX<<1)|0, (LBP_EX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_PO<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_EX<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_IS<<1)|0, (LBP_EX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_NU<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_PO<<1)|0, (LBP_PO<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_PO<<1)|0, (LBP_AL1<<1)|0, (LBP_PR<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_AL1<<1)|0, (LBP_PR<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_PR<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_BB<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_BB<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_PO<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_PR<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_XX<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, + (LBP_BB<<1)|0, (LBP_AL1<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, + (LBP_GL<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BA<<1)|0, + (LBP_GL<<1)|0, (LBP_EX<<1)|0, (LBP_EX<<1)|0, (LBP_EX<<1)|0, + (LBP_EX<<1)|0, (LBP_EX<<1)|0, (LBP_GL<<1)|0, (LBP_AL1<<1)|0, + (LBP_EX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BA<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BA<<1)|0, (LBP_BB<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, + (LBP_CL<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_NS<<1)|0, (LBP_SA<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_PR<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_EX<<1)|0, (LBP_EX<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BB<<1)|0, (LBP_AL1<<1)|0, + (LBP_EX<<1)|0, (LBP_EX<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_GL<<1)|0, (LBP_CM<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_EX<<1)|0, (LBP_EX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_VI<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_ID1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_VF<<1)|0, (LBP_VF<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_GL<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_GL<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_BB<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_GL<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_ZW<<1)|0, + (LBP_CM<<1)|0, (LBP_ZWJ<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_BA<<1)|0, (LBP_GL<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_B2<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_QU2<<1)|0, (LBP_QU3<<1)|0, (LBP_OP1<<1)|0, (LBP_QU2<<1)|0, + (LBP_QU2<<1)|0, (LBP_QU3<<1)|0, (LBP_OP1<<1)|0, (LBP_QU2<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_IN<<1)|0, (LBP_IN<<1)|0, (LBP_IN<<1)|0, (LBP_BA<<1)|0, + (LBP_BK<<1)|0, (LBP_BK<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_GL<<1)|0, + (LBP_PO<<1)|0, (LBP_PO<<1)|0, (LBP_PO<<1)|0, (LBP_PO<<1)|0, + (LBP_PO<<1)|0, (LBP_PO<<1)|0, (LBP_PO<<1)|0, (LBP_PO<<1)|0, + (LBP_AL1<<1)|0, (LBP_QU2<<1)|0, (LBP_QU3<<1)|0, (LBP_AI<<1)|0, + (LBP_NS<<1)|0, (LBP_NS<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_IS<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_NS<<1)|0, + (LBP_NS<<1)|0, (LBP_NS<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_PO<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_WJ<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PO<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|1, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PO<<1)|0, (LBP_PR<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PO<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PO<<1)|0, (LBP_PR<<1)|0, + (LBP_PO<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_PO<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_PO<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_PR<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_PR<<1)|0, (LBP_PR<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_IN<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL2<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_ID1<<1)|0, (LBP_AL1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_EB<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_ID1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_ID1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_ID1<<1)|0, (LBP_AL1<<1)|1, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_AI<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_ID1<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_AL1<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_ID1<<1)|1, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, (LBP_AI<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_EB<<1)|0, (LBP_ID1<<1)|1, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|0, (LBP_EB<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AI<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_QU1<<1)|0, + (LBP_QU1<<1)|0, (LBP_QU1<<1)|0, (LBP_QU1<<1)|0, (LBP_QU1<<1)|0, + (LBP_QU1<<1)|0, (LBP_AL1<<1)|0, (LBP_EX<<1)|0, (LBP_EX<<1)|0, + (LBP_ID1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, + (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, + (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, + (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, + (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, + (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, + (LBP_CL<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AI<<1)|1, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_EX<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_EX<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_QU1<<1)|0, (LBP_QU1<<1)|0, (LBP_QU2<<1)|0, (LBP_QU3<<1)|0, + (LBP_QU2<<1)|0, (LBP_QU3<<1)|0, (LBP_QU1<<1)|0, (LBP_QU1<<1)|0, + (LBP_QU1<<1)|0, (LBP_QU2<<1)|0, (LBP_QU3<<1)|0, (LBP_QU1<<1)|0, + (LBP_QU2<<1)|0, (LBP_QU3<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, + (LBP_OP1<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_QU2<<1)|0, (LBP_QU3<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_QU2<<1)|0, (LBP_QU3<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_EX<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_B2<<1)|0, (LBP_B2<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_OP1<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_EX<<1)|0, + (LBP_EX<<1)|0, (LBP_OP1<<1)|0, (LBP_CP1<<1)|0, (LBP_OP1<<1)|0, + (LBP_CP1<<1)|0, (LBP_OP1<<1)|0, (LBP_CP1<<1)|0, (LBP_OP1<<1)|0, + (LBP_CP1<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_BA<<1)|1, (LBP_CL<<1)|1, (LBP_CL<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, + (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, + (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, + (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, + (LBP_NS<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_CL<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_CM<<1)|1, (LBP_CM<<1)|1, + (LBP_CM<<1)|1, (LBP_CM<<1)|1, (LBP_CM<<1)|1, (LBP_CM<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_CM<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, + (LBP_XX<<1)|0, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|1, (LBP_CM<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_XX<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_ID1<<1)|1, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_EX<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_PO<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_EX<<1)|0, (LBP_EX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_BB<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, (LBP_JL<<1)|1, + (LBP_JL<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_VI<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_CM<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BA<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H2<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, (LBP_H3<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, + (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_JV<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, (LBP_JT<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_HL<<1)|0, (LBP_CM<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_AL1<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_XX<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_XX<<1)|0, (LBP_HL<<1)|0, (LBP_XX<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_XX<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_XX<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, (LBP_HL<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_PO<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CL<<1)|1, (LBP_CL<<1)|1, (LBP_CL<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_EX<<1)|1, (LBP_EX<<1)|1, (LBP_OP2<<1)|1, + (LBP_CL<<1)|1, (LBP_IN<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_GL<<1)|0, (LBP_CM<<1)|0, (LBP_GL<<1)|0, (LBP_CM<<1)|0, + (LBP_GL<<1)|0, (LBP_CM<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, + (LBP_CM<<1)|0, (LBP_GL<<1)|0, (LBP_CM<<1)|0, (LBP_GL<<1)|0, + (LBP_CM<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_CM<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, + (LBP_CL<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, + (LBP_CL<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, + (LBP_CL<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, + (LBP_CL<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_OP2<<1)|1, + (LBP_CL<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_CL<<1)|1, (LBP_ID1<<1)|1, (LBP_CL<<1)|1, (LBP_XX<<1)|0, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_EX<<1)|1, (LBP_EX<<1)|1, + (LBP_ID1<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, + (LBP_CL<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_PR<<1)|1, (LBP_PO<<1)|1, (LBP_ID1<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_WJ<<1)|0, + (LBP_XX<<1)|0, (LBP_EX<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_PR<<1)|1, (LBP_PO<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_OP2<<1)|1, (LBP_CL<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_CL<<1)|1, (LBP_ID1<<1)|1, (LBP_CL<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EX<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_OP2<<1)|1, + (LBP_ID1<<1)|1, (LBP_CL<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_OP2<<1)|1, + (LBP_ID1<<1)|1, (LBP_CL<<1)|1, (LBP_ID1<<1)|1, (LBP_OP2<<1)|1, + (LBP_CL<<1)|1, (LBP_CL<<1)|1, (LBP_OP2<<1)|1, (LBP_CL<<1)|1, + (LBP_CL<<1)|1, (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_NS<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_PO<<1)|1, (LBP_PR<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_PR<<1)|1, (LBP_PR<<1)|1, (LBP_XX<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CB<<1)|0, (LBP_AI<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_IN<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AP<<1)|0, + (LBP_AP<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_VI<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_CM<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_GL<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_NU<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_BB<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_BB<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_XX<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_VI<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AS<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_BA<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_XX<<1)|0, (LBP_AS<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AS<<1)|0, (LBP_XX<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_ID1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_VI<<1)|0, (LBP_AP<<1)|0, (LBP_CM<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_XX<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_BB<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_EX<<1)|0, (LBP_EX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, + (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, + (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, + (LBP_BB<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, + (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_SA<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_XX<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_XX<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_VI<<1)|0, (LBP_AP<<1)|0, + (LBP_CM<<1)|0, (LBP_AP<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_BB<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BB<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BB<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, + (LBP_BB<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, + (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_BB<<1)|0, + (LBP_BB<<1)|0, (LBP_BB<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_BB<<1)|0, (LBP_EX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_BA<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AP<<1)|0, (LBP_CM<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_XX<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, (LBP_AK<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_VI<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_PO<<1)|0, (LBP_PO<<1)|0, (LBP_PO<<1)|0, + (LBP_PO<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_OP1<<1)|0, (LBP_OP1<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_CL<<1)|0, (LBP_CL<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CL<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_CL<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, + (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, + (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_OP1<<1)|0, + (LBP_CL<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, (LBP_GL<<1)|0, + (LBP_OP1<<1)|0, (LBP_CL<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_OP1<<1)|0, (LBP_CL<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_AS<<1)|0, + (LBP_AS<<1)|0, (LBP_AS<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_BA<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_GL<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|1, (LBP_CM<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_XX<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_XX<<1)|0, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NS<<1)|1, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_NS<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, (LBP_NS<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_BA<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_BA<<1)|0, + (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_BA<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_PR<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_AL1<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_OP1<<1)|0, (LBP_OP1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_PO<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_PO<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID2<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|1, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|1, (LBP_AI<<1)|1, (LBP_AI<<1)|1, + (LBP_AI<<1)|1, (LBP_AI<<1)|1, (LBP_AI<<1)|1, (LBP_AI<<1)|1, + (LBP_AI<<1)|1, (LBP_AI<<1)|1, (LBP_AI<<1)|1, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, (LBP_AI<<1)|0, + (LBP_AI<<1)|0, (LBP_AL1<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, + (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, + (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, + (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, + (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, + (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, + (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, (LBP_RI<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_AL1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|0, + (LBP_EB<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EM<<1)|1, + (LBP_EM<<1)|1, (LBP_EM<<1)|1, (LBP_EM<<1)|1, (LBP_EM<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_AL1<<1)|1, (LBP_ID1<<1)|1, (LBP_AL1<<1)|1, (LBP_ID1<<1)|1, + (LBP_AL1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_AL1<<1)|1, + (LBP_ID1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, + (LBP_AL1<<1)|1, (LBP_AL1<<1)|1, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_EB<<1)|0, (LBP_EB<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_EB<<1)|1, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_EB<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_QU1<<1)|0, (LBP_QU1<<1)|0, + (LBP_QU1<<1)|0, (LBP_NS<<1)|0, (LBP_NS<<1)|0, (LBP_NS<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_EB<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_ID1<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, + (LBP_ID1<<1)|0, (LBP_ID1<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, (LBP_EB<<1)|1, + (LBP_EB<<1)|1, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_XX<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, (LBP_AL1<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_NU<<1)|0, + (LBP_NU<<1)|0, (LBP_NU<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, + (LBP_ID2<<1)|0, (LBP_ID2<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, + (LBP_ID1<<1)|1, (LBP_ID1<<1)|1, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_CM<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, (LBP_CM<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, + (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0, (LBP_XX<<1)|0 + } +}; diff --git a/include/libgnulib/unilbrk/lbrktables.h b/include/libgnulib/unilbrk/lbrktables.h new file mode 100755 index 0000000..865bea1 --- /dev/null +++ b/include/libgnulib/unilbrk/lbrktables.h @@ -0,0 +1,145 @@ +/* Line breaking auxiliary tables. + Copyright (C) 2001-2003, 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#include "unitypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Line breaking classification. */ + +enum +{ + /* Values >= 41 are resolved at run time. */ + LBP_BK = 41, /* mandatory break */ + LBP_CR = 42, /* carriage return */ + LBP_LF = 43, /* line feed */ + LBP_CM = 44, /* attached characters and combining marks */ +/*LBP_NL, next line - not used here because it's equivalent to LBP_BK */ +/*LBP_SG, surrogates - not used here because they are not characters */ + LBP_WJ = 0, /* word joiner */ + LBP_ZW = 45, /* zero width space */ + LBP_GL = 1, /* non-breaking (glue) */ + LBP_SP = 46, /* space */ + LBP_B2 = 2, /* break opportunity before and after */ + LBP_BA = 3, /* break opportunity after */ + LBP_BB = 4, /* break opportunity before */ + LBP_HY = 5, /* hyphen */ + LBP_CB = 47, /* contingent break opportunity */ + LBP_CL = 6, /* closing punctuation */ + LBP_CP1 = 7, /* closing parenthesis, non-EastAsian character */ + LBP_CP2 = 8, /* closing parenthesis, EastAsian character */ + LBP_EX = 9, /* exclamation/interrogation */ + LBP_IN = 10, /* inseparable */ + LBP_NS = 11, /* non starter */ + LBP_OP1 = 12, /* opening punctuation, non-EastAsian character */ + LBP_OP2 = 13, /* opening punctuation, EastAsian character */ + LBP_QU1 = 14, /* ambiguous quotation, neither initial nor final punctuation */ + LBP_QU2 = 15, /* ambiguous quotation, initial punctuation */ + LBP_QU3 = 16, /* ambiguous quotation, final punctuation */ + LBP_IS = 17, /* infix separator (numeric) */ + LBP_NU = 18, /* numeric */ + LBP_PO = 19, /* postfix (numeric) */ + LBP_PR = 20, /* prefix (numeric) */ + LBP_SY = 21, /* symbols allowing breaks */ + LBP_AI = 48, /* ambiguous (alphabetic or ideograph) */ + LBP_AL1 = 22, /* ordinary alphabetic and symbol characters, != U+25CC */ + LBP_AL2 = 23, /* ordinary alphabetic and symbol characters, == U+25CC */ +/*LBP_CJ, conditional Japanese starter, resolved to NS */ + LBP_H2 = 24, /* Hangul LV syllable */ + LBP_H3 = 25, /* Hangul LVT syllable */ + LBP_HL = 31, /* Hebrew letter */ + LBP_ID1 = 26, /* ideographic */ + LBP_ID2 = 27, /* ideographic and potential future emoji */ + LBP_JL = 28, /* Hangul L Jamo */ + LBP_JV = 29, /* Hangul V Jamo */ + LBP_JT = 30, /* Hangul T Jamo */ + LBP_AP = 32, /* Brahmic scripts: pre-base repha */ + LBP_AK = 33, /* Brahmic scripts: consonants */ + LBP_AS = 34, /* Brahmic scripts: independent vowels */ + LBP_VI = 35, /* Brahmic scripts: conjoining viramas */ + LBP_VF = 36, /* Brahmic scripts: viramas for final consonants */ + LBP_RI = 37, /* regional indicator */ + LBP_SA = 49, /* complex context (South East Asian) */ + LBP_ZWJ = 38, /* zero width joiner */ + LBP_EB = 39, /* emoji base */ + LBP_EM = 40, /* emoji modifier */ + LBP_XX = 50, /* unknown */ + /* Artificial values that exist only at runtime, not in the tables. */ + LBP_AKLS_VI = 100, + LBP_HL_BA = 101 +}; + +#include "lbrkprop1.h" + +/* Combining prop and ea to a table entry. */ +#define PROP_EA(prop,ea) (((prop) << 1) | (ea)) + +/* Splitting a table entry into prop and ea. */ +#define PROP(entry) ((entry) >> 1) +#define EA(entry) ((entry) & 1) + +/* Returns (prop << 1) | ea, where + - prop is the line breaking property, + - ea is the EastAsian property (1 bit) + of UC. */ +static inline unsigned char +unilbrkprop_lookup (ucs4_t uc) +{ + unsigned int index1 = uc >> lbrkprop_header_0; + if (index1 < lbrkprop_header_1) + { + int lookup1 = unilbrkprop.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> lbrkprop_header_2) & lbrkprop_header_3; + int lookup2 = unilbrkprop.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = uc & lbrkprop_header_4; + return unilbrkprop.level3[lookup2 + index3]; + } + } + } + return PROP_EA (LBP_XX, 0); +} + + +/* Table indexed by two line breaking classifications. */ +#define D 1 /* direct break opportunity, empty in table 7.3 of UTR #14 */ +#define I 2 /* indirect break opportunity, '%' in table 7.3 of UTR #14 */ +#define P 3 /* prohibited break, '^' in table 7.3 of UTR #14 */ + +extern const unsigned char unilbrk_table[41][41]; + +/* We don't support line breaking of complex-context dependent characters + (Thai, Lao, Myanmar, Khmer) yet, because it requires dictionary lookup. */ + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/unilbrk/ulc-common.h b/include/libgnulib/unilbrk/ulc-common.h new file mode 100755 index 0000000..a3f713d --- /dev/null +++ b/include/libgnulib/unilbrk/ulc-common.h @@ -0,0 +1,49 @@ +/* Line breaking auxiliary functions. + Copyright (C) 2001-2003, 2006-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +/* Get size_t. */ +#include + +#include "c-ctype.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define is_utf8_encoding unilbrk_is_utf8_encoding +extern int is_utf8_encoding (const char *encoding); + +#if C_CTYPE_ASCII + +# define is_all_ascii unilbrk_is_all_ascii +extern int is_all_ascii (const char *s, size_t n); + +#endif /* C_CTYPE_ASCII */ + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/uniname/gen-uninames.lisp b/include/libgnulib/uniname/gen-uninames.lisp new file mode 100755 index 0000000..30191f2 --- /dev/null +++ b/include/libgnulib/uniname/gen-uninames.lisp @@ -0,0 +1,376 @@ +#!/usr/bin/env -S clisp -C + +;;; Creation of gnulib's uninames.h from the UnicodeData.txt and NameAliases.txt +;;; tables. + +;;; Copyright (C) 2000-2024 Free Software Foundation, Inc. +;;; Written by Bruno Haible , 2000-12-28. +;;; +;;; This program is free software. +;;; It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". +;;; You can redistribute it and/or modify it under either +;;; - the terms of the GNU Lesser General Public License as published +;;; by the Free Software Foundation, either version 3, or (at your +;;; option) any later version, or +;;; - the terms of the GNU General Public License as published by the +;;; Free Software Foundation; either version 2, or (at your option) +;;; any later version, or +;;; - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". +;;; +;;; 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 +;;; Lesser General Public License and the GNU General Public License +;;; for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License and of the GNU General Public License along with this +;;; program. If not, see . + +(defparameter add-comments nil) + +(defstruct unicode-char + (index nil :type integer) + (name nil :type string) + word-indices + word-indices-index +) + +(defstruct range + (index nil :type integer) + (start-code nil :type integer) + (end-code nil :type integer) +) + +(defstruct word-list + (hashed nil :type hash-table) + (sorted nil :type list) + size ; number of characters total + length ; number of words +) + +(defun main (inputfile aliasfile outputfile) + (declare (type string inputfile aliasfile outputfile)) + #+UNICODE (setq *default-file-encoding* charset:utf-8) + (let ((all-chars '()) + (all-chars-hashed (make-hash-table :test #'equal)) + (all-aliases '()) + all-chars-and-aliases + (all-ranges '()) + (name-index 0) + range) + ;; Read all characters and names from the input file. + (with-open-file (istream inputfile :direction :input) + (loop + (let ((line (read-line istream nil nil))) + (unless line (return)) + (let* ((i1 (position #\; line)) + (i2 (position #\; line :start (1+ i1))) + (code-string (subseq line 0 i1)) + (code (parse-integer code-string :radix 16)) + (name-string (subseq line (1+ i1) i2))) + ; Ignore characters whose name starts with "<". + (unless (eql (char name-string 0) #\<) + ; Also ignore Hangul syllables; they are treated specially. + (unless (<= #xAC00 code #xD7A3) + ; Also ignore CJK compatibility ideographs; they are treated + ; specially as well. + (unless (or (<= #xF900 code #xFA2D) (<= #xFA30 code #xFA6A) + (<= #xFA70 code #xFAD9) (<= #x2F800 code #x2FA1D)) + ;; Also ignore variationselectors; they are treated + ;; specially as well. + (unless (or (<= #xFE00 code #xFE0F) (<= #xE0100 code #xE01EF)) + (push (make-unicode-char :index name-index + :name name-string) + all-chars + ) + (setf (gethash code all-chars-hashed) (car all-chars)) + ;; Update the contiguous range, or start a new range. + (if (and range (= (1+ (range-end-code range)) code)) + (setf (range-end-code range) code) + (progn + (when range + (push range all-ranges)) + (setq range (make-range :index name-index + :start-code code + :end-code code)))) + (incf name-index) + ) ) ) ) + ) ) ) ) + (setq all-chars (nreverse all-chars)) + (if range + (push range all-ranges)) + (setq all-ranges (nreverse all-ranges)) + (when aliasfile + ;; Read all characters and names from the alias file. + (with-open-file (istream aliasfile :direction :input) + (loop + (let ((line (read-line istream nil nil))) + (unless line (return)) + (unless (or (equal line "") (equal (subseq line 0 1) "#")) + (let* ((i1 (position #\; line)) + (i2 (position #\; line :start (1+ i1))) + (code-string (subseq line 0 i1)) + (code (parse-integer code-string :radix 16)) + (name-string (subseq line (1+ i1) i2)) + (uc (gethash code all-chars-hashed))) + (when uc + (push (make-unicode-char :index (unicode-char-index uc) + :name name-string) + all-aliases + ) ) ) ) ) ) ) ) + (setq all-aliases (nreverse all-aliases) + all-chars-and-aliases (append all-chars all-aliases) + ) + ;; Split into words. + (let ((words-by-length (make-array 0 :adjustable t))) + (dolist (name (list* "HANGUL SYLLABLE" "CJK COMPATIBILITY" "VARIATION" + (mapcar #'unicode-char-name all-chars-and-aliases))) + (let ((i1 0)) + (loop + (when (>= i1 (length name)) (return)) + (let ((i2 (or (position #\Space name :start i1) (length name)))) + (let* ((word (subseq name i1 i2)) + (len (length word))) + (when (>= len (length words-by-length)) + (adjust-array words-by-length (1+ len)) + ) + (unless (aref words-by-length len) + (setf (aref words-by-length len) + (make-word-list + :hashed (make-hash-table :test #'equal) + :sorted '() + ) ) ) + (let ((word-list (aref words-by-length len))) + (unless (gethash word (word-list-hashed word-list)) + (setf (gethash word (word-list-hashed word-list)) t) + (push word (word-list-sorted word-list)) + ) ) + ) + (setq i1 (1+ i2)) + ) ) ) ) + ;; Sort the word lists. + (dotimes (len (length words-by-length)) + (unless (aref words-by-length len) + (setf (aref words-by-length len) + (make-word-list + :hashed (make-hash-table :test #'equal) + :sorted '() + ) ) ) + (let ((word-list (aref words-by-length len))) + (setf (word-list-sorted word-list) + (sort (word-list-sorted word-list) #'string<) + ) + (setf (word-list-size word-list) + (reduce #'+ (mapcar #'length (word-list-sorted word-list))) + ) + (setf (word-list-length word-list) + (length (word-list-sorted word-list)) + ) ) ) + ;; Output the tables. + (with-open-file (ostream outputfile :direction :output + #+UNICODE :external-format #+UNICODE charset:ascii) + (format ostream "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */~%") + (format ostream "/*~%") + (format ostream " * ~A~%" (file-namestring outputfile)) + (format ostream " *~%") + (format ostream " * Unicode character name table.~%") + (format ostream " * Generated automatically by the gen-uninames utility.~%") + (format ostream " */~%") + (format ostream "/* Copyright (C) 2000-2024 Free Software Foundation, Inc.~%") + (format ostream "~%") + (format ostream " This file is free software.~%") + (format ostream " It is dual-licensed under \"the GNU LGPLv3+ or the GNU GPLv2+\".~%") + (format ostream " You can redistribute it and/or modify it under either~%") + (format ostream " - the terms of the GNU Lesser General Public License as published~%") + (format ostream " by the Free Software Foundation, either version 3, or (at your~%") + (format ostream " option) any later version, or~%") + (format ostream " - the terms of the GNU General Public License as published by the~%") + (format ostream " Free Software Foundation; either version 2, or (at your option)~%") + (format ostream " any later version, or~%") + (format ostream " - the same dual license \"the GNU LGPLv3+ or the GNU GPLv2+\".~%") + (format ostream "~%") + (format ostream " This file is distributed in the hope that it will be useful,~%") + (format ostream " but WITHOUT ANY WARRANTY; without even the implied warranty of~%") + (format ostream " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU~%") + (format ostream " Lesser General Public License and the GNU General Public License~%") + (format ostream " for more details.~%") + (format ostream "~%") + (format ostream " You should have received a copy of the GNU Lesser General Public~%") + (format ostream " License and of the GNU General Public License along with this~%") + (format ostream " program. If not, see . */~%") + (format ostream "~%") + (format ostream "static const char unicode_name_words[~D] = {~%" + (let ((sum 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (incf sum (word-list-size word-list)) + ) ) + sum + ) ) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (dolist (word (word-list-sorted word-list)) + (format ostream " ~{ '~C',~}~%" (coerce word 'list)) + ) ) ) + (format ostream "};~%") + (format ostream "#define UNICODE_CHARNAME_NUM_WORDS ~D~%" + (let ((sum 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (incf sum (word-list-length word-list)) + ) ) + sum + ) ) + #| ; Redundant data + (format ostream "static const uint16_t unicode_name_word_offsets[~D] = {~%" + (let ((sum 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (incf sum (word-list-length word-list)) + ) ) + sum + ) ) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (when (word-list-sorted word-list) + (format ostream " ") + (do ((l (word-list-sorted word-list) (cdr l)) + (offset 0 (+ offset (length (car l))))) + ((endp l)) + (format ostream "~<~% ~0,79:; ~D,~>" offset) + ) + (format ostream "~%") + ) ) ) + (format ostream "};~%") + |# + (format ostream "static const struct { uint32_t extra_offset; uint16_t ind_offset; } unicode_name_by_length[~D] = {~%" + (1+ (length words-by-length)) + ) + (let ((extra-offset 0) + (ind-offset 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (format ostream " { ~D, ~D },~%" extra-offset ind-offset) + (incf extra-offset (word-list-size word-list)) + (incf ind-offset (word-list-length word-list)) + ) ) + (format ostream " { ~D, ~D }~%" extra-offset ind-offset) + ) + (format ostream "};~%") + (let ((ind-offset 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (dolist (word (word-list-sorted word-list)) + (setf (gethash word (word-list-hashed word-list)) ind-offset) + (incf ind-offset) + ) ) ) ) + (dolist (word '("HANGUL" "SYLLABLE" "CJK" "COMPATIBILITY" "VARIATION")) + (format ostream "#define UNICODE_CHARNAME_WORD_~A ~D~%" word + (gethash word (word-list-hashed (aref words-by-length (length word)))) + ) ) + ;; Compute the word-indices for every unicode-char. + (dolist (uc all-chars-and-aliases) + (let ((name (unicode-char-name uc)) + (indices '())) + (let ((i1 0)) + (loop + (when (>= i1 (length name)) (return)) + (let ((i2 (or (position #\Space name :start i1) (length name)))) + (let* ((word (subseq name i1 i2)) + (len (length word))) + (push (gethash word (word-list-hashed (aref words-by-length len))) + indices + ) + ) + (setq i1 (1+ i2)) + ) ) ) + (setf (unicode-char-word-indices uc) + (coerce (nreverse indices) 'vector) + ) + ) ) + ;; Sort the list of unicode-chars by word-indices. + (setq all-chars-and-aliases + (sort all-chars-and-aliases + (lambda (vec1 vec2) + (let ((len1 (length vec1)) + (len2 (length vec2))) + (do ((i 0 (1+ i))) + (nil) + (if (< i len2) + (if (< i len1) + (cond ((< (aref vec1 i) (aref vec2 i)) (return t)) + ((> (aref vec1 i) (aref vec2 i)) (return nil)) + ) + (return t) + ) + (return nil) + ) ) ) ) + :key #'unicode-char-word-indices + ) ) + ;; Output the word-indices. + (format ostream "static const uint16_t unicode_names[~D] = {~%" + (reduce #'+ (mapcar (lambda (uc) (length (unicode-char-word-indices uc))) all-chars-and-aliases)) + ) + (let ((i 0)) + (dolist (uc all-chars-and-aliases) + (format ostream " ~{ ~D,~}" + (maplist (lambda (r) (+ (* 2 (car r)) (if (cdr r) 1 0))) + (coerce (unicode-char-word-indices uc) 'list) + ) + ) + (when add-comments + (format ostream "~40T/* ~A */" (unicode-char-name uc)) + ) + (format ostream "~%") + (setf (unicode-char-word-indices-index uc) i) + (incf i (length (unicode-char-word-indices uc))) + ) ) + (format ostream "};~%") + (format ostream "static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_name_to_index[~D] = {~%" + (length all-chars-and-aliases) + ) + (dolist (uc all-chars-and-aliases) + (format ostream " { 0x~4,'0X, ~D }," + (unicode-char-index uc) + (unicode-char-word-indices-index uc) + ) + (when add-comments + (format ostream "~21T/* ~A */" (unicode-char-name uc)) + ) + (format ostream "~%") + ) + (format ostream "};~%") + (format ostream "static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_index_to_name[~D] = {~%" + (length all-chars) + ) + (dolist (uc (sort (copy-list all-chars) #'< :key #'unicode-char-index)) + (format ostream " { 0x~4,'0X, ~D }," + (unicode-char-index uc) + (unicode-char-word-indices-index uc) + ) + (when add-comments + (format ostream "~21T/* ~A */" (unicode-char-name uc)) + ) + (format ostream "~%") + ) + (format ostream "};~%") + (format ostream "#define UNICODE_CHARNAME_MAX_LENGTH ~D~%" + (reduce #'max (mapcar (lambda (uc) (length (unicode-char-name uc))) all-chars-and-aliases)) + ) + (format ostream "#define UNICODE_CHARNAME_MAX_WORDS ~D~%" + (reduce #'max (mapcar (lambda (uc) (length (unicode-char-word-indices uc))) all-chars-and-aliases)) + ) + (format ostream "static const struct { uint16_t index; uint32_t gap; uint16_t length; } unicode_ranges[~D] = {~%" + (length all-ranges)) + (dolist (range all-ranges) + (format ostream " { ~D, ~D, ~D },~%" + (range-index range) + (- (range-start-code range) (range-index range)) + (1+ (- (range-end-code range) (range-start-code range)))) + ) + (format ostream "};~%") + ) +) ) ) + +(main (first *args*) (second *args*) (third *args*)) diff --git a/include/libgnulib/uniname/uninames.h b/include/libgnulib/uniname/uninames.h new file mode 100755 index 0000000..d21adcc --- /dev/null +++ b/include/libgnulib/uniname/uninames.h @@ -0,0 +1,135356 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* + * uninames.h + * + * Unicode character name table. + * Generated automatically by the gen-uninames utility. + */ +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +static const char unicode_name_words[159015] = { + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + '-', 'A', + 'A', '2', + 'A', '3', + 'A', 'A', + 'A', 'B', + 'A', 'C', + 'A', 'D', + 'A', 'E', + 'A', 'G', + 'A', 'H', + 'A', 'I', + 'A', 'J', + 'A', 'K', + 'A', 'L', + 'A', 'M', + 'A', 'N', + 'A', 'O', + 'A', 'P', + 'A', 'Q', + 'A', 'R', + 'A', 'S', + 'A', 'T', + 'A', 'U', + 'A', 'V', + 'A', 'W', + 'A', 'X', + 'A', 'Y', + 'A', 'Z', + 'B', 'A', + 'B', 'B', + 'B', 'E', + 'B', 'H', + 'B', 'I', + 'B', 'O', + 'B', 'Q', + 'B', 'U', + 'B', 'Y', + 'C', 'A', + 'C', 'C', + 'C', 'D', + 'C', 'E', + 'C', 'H', + 'C', 'I', + 'C', 'L', + 'C', 'M', + 'C', 'O', + 'C', 'U', + 'C', 'Y', + 'D', '2', + 'D', 'A', + 'D', 'B', + 'D', 'D', + 'D', 'E', + 'D', 'H', + 'D', 'I', + 'D', 'J', + 'D', 'L', + 'D', 'M', + 'D', 'O', + 'D', 'U', + 'D', 'V', + 'D', 'Z', + 'E', '2', + 'E', 'A', + 'E', 'B', + 'E', 'C', + 'E', 'D', + 'E', 'E', + 'E', 'F', + 'E', 'G', + 'E', 'H', + 'E', 'I', + 'E', 'J', + 'E', 'K', + 'E', 'L', + 'E', 'M', + 'E', 'N', + 'E', 'O', + 'E', 'P', + 'E', 'Q', + 'E', 'R', + 'E', 'S', + 'E', 'T', + 'E', 'U', + 'E', 'V', + 'E', 'W', + 'E', 'X', + 'E', 'Z', + 'F', 'A', + 'F', 'E', + 'F', 'F', + 'F', 'I', + 'F', 'L', + 'F', 'M', + 'F', 'O', + 'F', 'U', + 'F', 'Y', + 'G', '2', + 'G', 'A', + 'G', 'B', + 'G', 'E', + 'G', 'G', + 'G', 'H', + 'G', 'I', + 'G', 'N', + 'G', 'O', + 'G', 'U', + 'G', 'V', + 'G', 'W', + 'G', 'Y', + 'H', 'A', + 'H', 'C', + 'H', 'E', + 'H', 'G', + 'H', 'I', + 'H', 'K', + 'H', 'L', + 'H', 'M', + 'H', 'O', + 'H', 'P', + 'H', 'U', + 'H', 'V', + 'H', 'Z', + 'I', 'A', + 'I', 'B', + 'I', 'C', + 'I', 'D', + 'I', 'E', + 'I', 'F', + 'I', 'G', + 'I', 'H', + 'I', 'I', + 'I', 'J', + 'I', 'L', + 'I', 'M', + 'I', 'N', + 'I', 'O', + 'I', 'P', + 'I', 'Q', + 'I', 'R', + 'I', 'S', + 'I', 'T', + 'I', 'U', + 'I', 'X', + 'I', 'Y', + 'I', 'Z', + 'J', 'A', + 'J', 'E', + 'J', 'I', + 'J', 'O', + 'J', 'U', + 'J', 'Y', + 'K', '2', + 'K', 'A', + 'K', 'B', + 'K', 'E', + 'K', 'G', + 'K', 'I', + 'K', 'K', + 'K', 'L', + 'K', 'M', + 'K', 'O', + 'K', 'P', + 'K', 'T', + 'K', 'U', + 'K', 'V', + 'K', 'W', + 'L', '2', + 'L', '3', + 'L', '4', + 'L', '6', + 'L', 'A', + 'L', 'D', + 'L', 'E', + 'L', 'H', + 'L', 'I', + 'L', 'J', + 'L', 'L', + 'L', 'M', + 'L', 'N', + 'L', 'O', + 'L', 'S', + 'L', 'U', + 'L', 'V', + 'L', 'X', + 'L', 'Y', + 'L', 'Z', + 'M', 'A', + 'M', 'B', + 'M', 'C', + 'M', 'D', + 'M', 'E', + 'M', 'G', + 'M', 'H', + 'M', 'I', + 'M', 'L', + 'M', 'M', + 'M', 'O', + 'M', 'Q', + 'M', 'R', + 'M', 'S', + 'M', 'U', + 'M', 'V', + 'M', 'W', + 'M', 'X', + 'M', 'Y', + 'M', 'Z', + 'N', 'A', + 'N', 'D', + 'N', 'E', + 'N', 'F', + 'N', 'G', + 'N', 'H', + 'N', 'I', + 'N', 'J', + 'N', 'M', + 'N', 'N', + 'N', 'O', + 'N', 'S', + 'N', 'U', + 'N', 'V', + 'N', 'W', + 'N', 'Y', + 'O', 'A', + 'O', 'B', + 'O', 'C', + 'O', 'E', + 'O', 'F', + 'O', 'G', + 'O', 'H', + 'O', 'I', + 'O', 'K', + 'O', 'L', + 'O', 'M', + 'O', 'N', + 'O', 'O', + 'O', 'P', + 'O', 'Q', + 'O', 'R', + 'O', 'S', + 'O', 'T', + 'O', 'U', + 'O', 'V', + 'O', 'W', + 'O', 'X', + 'O', 'Y', + 'O', 'Z', + 'P', '2', + 'P', 'A', + 'P', 'C', + 'P', 'D', + 'P', 'E', + 'P', 'F', + 'P', 'G', + 'P', 'H', + 'P', 'I', + 'P', 'M', + 'P', 'O', + 'P', 'R', + 'P', 'S', + 'P', 'U', + 'P', 'V', + 'P', 'W', + 'P', 'Y', + 'P', 'Z', + 'Q', 'A', + 'Q', 'E', + 'Q', 'I', + 'Q', 'N', + 'Q', 'O', + 'Q', 'P', + 'Q', 'U', + 'Q', 'Y', + 'R', 'A', + 'R', 'E', + 'R', 'H', + 'R', 'I', + 'R', 'O', + 'R', 'R', + 'R', 'U', + 'R', 'Y', + 'S', 'A', + 'S', 'D', + 'S', 'E', + 'S', 'G', + 'S', 'H', + 'S', 'I', + 'S', 'K', + 'S', 'O', + 'S', 'P', + 'S', 'R', + 'S', 'S', + 'S', 'T', + 'S', 'U', + 'S', 'V', + 'S', 'W', + 'S', 'Y', + 'S', 'Z', + 'T', 'A', + 'T', 'C', + 'T', 'E', + 'T', 'H', + 'T', 'I', + 'T', 'N', + 'T', 'O', + 'T', 'R', + 'T', 'S', + 'T', 'T', + 'T', 'U', + 'T', 'Z', + 'U', '2', + 'U', 'A', + 'U', 'B', + 'U', 'C', + 'U', 'D', + 'U', 'E', + 'U', 'H', + 'U', 'I', + 'U', 'J', + 'U', 'K', + 'U', 'M', + 'U', 'N', + 'U', 'O', + 'U', 'P', + 'U', 'Q', + 'U', 'R', + 'U', 'S', + 'U', 'U', + 'U', 'X', + 'U', 'Y', + 'U', 'Z', + 'V', 'A', + 'V', 'C', + 'V', 'E', + 'V', 'I', + 'V', 'O', + 'V', 'Q', + 'V', 'S', + 'V', 'U', + 'V', 'W', + 'V', 'X', + 'V', 'Y', + 'V', 'Z', + 'W', 'A', + 'W', 'B', + 'W', 'C', + 'W', 'E', + 'W', 'G', + 'W', 'H', + 'W', 'I', + 'W', 'J', + 'W', 'O', + 'W', 'U', + 'W', 'V', + 'W', 'Z', + 'X', 'A', + 'X', 'E', + 'X', 'G', + 'X', 'I', + 'X', 'O', + 'X', 'U', + 'X', 'W', + 'X', 'Y', + 'Y', 'A', + 'Y', 'E', + 'Y', 'I', + 'Y', 'N', + 'Y', 'O', + 'Y', 'R', + 'Y', 'U', + 'Y', 'V', + 'Y', 'Y', + 'Z', 'A', + 'Z', 'E', + 'Z', 'H', + 'Z', 'I', + 'Z', 'O', + 'Z', 'U', + 'Z', 'Y', + '-', 'U', 'M', + 'A', '-', '1', + 'A', '-', '2', + 'A', '-', '3', + 'A', '-', 'O', + 'A', '-', 'U', + 'A', 'A', 'I', + 'A', 'A', 'J', + 'A', 'A', 'K', + 'A', 'A', 'L', + 'A', 'A', 'M', + 'A', 'A', 'N', + 'A', 'A', 'O', + 'A', 'A', 'U', + 'A', 'A', 'W', + 'A', 'A', 'Y', + 'A', 'B', '2', + 'A', 'B', 'B', + 'A', 'C', 'E', + 'A', 'D', 'I', + 'A', 'D', 'O', + 'A', 'E', 'B', + 'A', 'E', 'D', + 'A', 'E', 'E', + 'A', 'E', 'G', + 'A', 'E', 'K', + 'A', 'E', 'L', + 'A', 'E', 'N', + 'A', 'E', 'R', + 'A', 'E', 'S', + 'A', 'E', 'T', + 'A', 'E', 'Y', + 'A', 'G', 'E', + 'A', 'H', 'H', + 'A', 'I', 'D', + 'A', 'I', 'N', + 'A', 'I', 'R', + 'A', 'L', 'F', + 'A', 'L', 'I', + 'A', 'L', 'L', + 'A', 'L', 'M', + 'A', 'L', 'T', + 'A', 'M', 'B', + 'A', 'N', 'D', + 'A', 'N', 'G', + 'A', 'N', 'H', + 'A', 'N', 'N', + 'A', 'N', 'O', + 'A', 'N', 'T', + 'A', 'N', 'Y', + 'A', 'O', 'R', + 'A', 'O', 'U', + 'A', 'P', 'L', + 'A', 'R', 'C', + 'A', 'R', 'E', + 'A', 'R', 'M', + 'A', 'S', 'H', + 'A', 'S', 'Z', + 'A', 'T', 'T', + 'A', 'U', 'E', + 'A', 'V', 'A', + 'A', 'W', 'C', + 'A', 'W', 'E', + 'A', 'W', 'Q', + 'A', 'W', 'X', + 'A', 'W', 'Z', + 'A', 'X', 'E', + 'A', 'Y', 'B', + 'A', 'Y', 'N', + 'A', 'Z', 'U', + 'B', 'A', 'A', + 'B', 'A', 'D', + 'B', 'A', 'G', + 'B', 'A', 'H', + 'B', 'A', 'L', + 'B', 'A', 'N', + 'B', 'A', 'P', + 'B', 'A', 'R', + 'B', 'A', 'T', + 'B', 'A', 'U', + 'B', 'A', 'X', + 'B', 'B', 'A', + 'B', 'B', 'E', + 'B', 'B', 'I', + 'B', 'B', 'O', + 'B', 'B', 'U', + 'B', 'B', 'Y', + 'B', 'E', 'D', + 'B', 'E', 'E', + 'B', 'E', 'H', + 'B', 'E', 'I', + 'B', 'E', 'N', + 'B', 'E', 'P', + 'B', 'E', 'T', + 'B', 'E', 'X', + 'B', 'H', 'A', + 'B', 'H', 'E', + 'B', 'H', 'I', + 'B', 'H', 'O', + 'B', 'H', 'U', + 'B', 'I', 'B', + 'B', 'I', 'E', + 'B', 'I', 'G', + 'B', 'I', 'P', + 'B', 'I', 'T', + 'B', 'I', 'X', + 'B', 'L', 'A', + 'B', 'O', 'A', + 'B', 'O', 'M', + 'B', 'O', 'O', + 'B', 'O', 'P', + 'B', 'O', 'T', + 'B', 'O', 'W', + 'B', 'O', 'X', + 'B', 'O', 'Y', + 'B', 'R', 'A', + 'B', 'R', 'I', + 'B', 'U', 'D', + 'B', 'U', 'G', + 'B', 'U', 'O', + 'B', 'U', 'P', + 'B', 'U', 'R', + 'B', 'U', 'S', + 'B', 'U', 'T', + 'B', 'U', 'X', + 'B', 'W', 'A', + 'B', 'W', 'E', + 'B', 'W', 'I', + 'B', 'X', 'G', + 'B', 'Y', 'P', + 'B', 'Y', 'R', + 'B', 'Y', 'T', + 'B', 'Y', 'X', + 'C', 'A', 'A', + 'C', 'A', 'H', + 'C', 'A', 'I', + 'C', 'A', 'L', + 'C', 'A', 'N', + 'C', 'A', 'P', + 'C', 'A', 'R', + 'C', 'A', 'T', + 'C', 'A', 'U', + 'C', 'A', 'X', + 'C', 'C', 'A', + 'C', 'C', 'E', + 'C', 'C', 'I', + 'C', 'C', 'O', + 'C', 'C', 'U', + 'C', 'E', 'E', + 'C', 'E', 'N', + 'C', 'E', 'P', + 'C', 'E', 'X', + 'C', 'G', 'J', + 'C', 'H', 'A', + 'C', 'H', 'E', + 'C', 'H', 'I', + 'C', 'H', 'O', + 'C', 'H', 'U', + 'C', 'H', 'Y', + 'C', 'I', 'E', + 'C', 'I', 'I', + 'C', 'I', 'L', + 'C', 'I', 'M', + 'C', 'I', 'N', + 'C', 'I', 'P', + 'C', 'I', 'T', + 'C', 'I', 'X', + 'C', 'J', 'K', + 'C', 'O', 'A', + 'C', 'O', 'N', + 'C', 'O', 'O', + 'C', 'O', 'P', + 'C', 'O', 'T', + 'C', 'O', 'W', + 'C', 'O', 'X', + 'C', 'U', 'M', + 'C', 'U', 'O', + 'C', 'U', 'P', + 'C', 'U', 'R', + 'C', 'U', 'T', + 'C', 'U', 'X', + 'C', 'W', 'A', + 'C', 'W', 'E', + 'C', 'W', 'I', + 'C', 'W', 'O', + 'C', 'Y', 'A', + 'C', 'Y', 'P', + 'C', 'Y', 'R', + 'C', 'Y', 'T', + 'C', 'Y', 'X', + 'D', 'A', 'A', + 'D', 'A', 'D', + 'D', 'A', 'G', + 'D', 'A', 'H', + 'D', 'A', 'I', + 'D', 'A', 'L', + 'D', 'A', 'M', + 'D', 'A', 'P', + 'D', 'A', 'R', + 'D', 'A', 'T', + 'D', 'A', 'X', + 'D', 'A', 'Y', + 'D', 'D', 'A', + 'D', 'D', 'E', + 'D', 'D', 'I', + 'D', 'D', 'O', + 'D', 'D', 'U', + 'D', 'E', 'E', + 'D', 'E', 'I', + 'D', 'E', 'K', + 'D', 'E', 'L', + 'D', 'E', 'P', + 'D', 'E', 'X', + 'D', 'H', 'A', + 'D', 'H', 'E', + 'D', 'H', 'I', + 'D', 'H', 'O', + 'D', 'H', 'U', + 'D', 'I', 'B', + 'D', 'I', 'E', + 'D', 'I', 'L', + 'D', 'I', 'M', + 'D', 'I', 'N', + 'D', 'I', 'P', + 'D', 'I', 'T', + 'D', 'I', 'X', + 'D', 'J', 'A', + 'D', 'J', 'E', + 'D', 'L', 'A', + 'D', 'L', 'E', + 'D', 'L', 'I', + 'D', 'L', 'O', + 'D', 'L', 'U', + 'D', 'N', 'A', + 'D', 'O', 'A', + 'D', 'O', 'G', + 'D', 'O', 'I', + 'D', 'O', 'N', + 'D', 'O', 'O', + 'D', 'O', 'P', + 'D', 'O', 'T', + 'D', 'O', 'X', + 'D', 'R', 'Y', + 'D', 'U', 'B', + 'D', 'U', 'G', + 'D', 'U', 'H', + 'D', 'U', 'L', + 'D', 'U', 'M', + 'D', 'U', 'N', + 'D', 'U', 'O', + 'D', 'U', 'P', + 'D', 'U', 'R', + 'D', 'U', 'T', + 'D', 'U', 'X', + 'D', 'V', 'A', + 'D', 'V', 'D', + 'D', 'W', 'A', + 'D', 'W', 'E', + 'D', 'W', 'O', + 'D', 'Y', 'O', + 'D', 'Z', 'A', + 'D', 'Z', 'E', + 'D', 'Z', 'I', + 'D', 'Z', 'O', + 'D', 'Z', 'U', + 'E', '-', '1', + 'E', '-', '2', + 'E', '-', '3', + 'E', '-', '4', + 'E', '-', '5', + 'E', '-', '6', + 'E', 'A', 'R', + 'E', 'A', 'T', + 'E', 'C', 'H', + 'E', 'C', 'S', + 'E', 'D', 'D', + 'E', 'E', 'H', + 'E', 'E', 'N', + 'E', 'G', 'G', + 'E', 'G', 'Y', + 'E', 'I', 'E', + 'E', 'I', 'N', + 'E', 'I', 'S', + 'E', 'K', 'O', + 'E', 'K', 'S', + 'E', 'L', 'F', + 'E', 'L', 'L', + 'E', 'L', 'T', + 'E', 'L', 'Y', + 'E', 'M', 'P', + 'E', 'N', 'C', + 'E', 'N', 'D', + 'E', 'N', 'G', + 'E', 'N', 'N', + 'E', 'N', 'T', + 'E', 'N', 'Y', + 'E', 'O', 'H', + 'E', 'R', 'A', + 'E', 'R', 'G', + 'E', 'R', 'R', + 'E', 'R', 'S', + 'E', 'S', 'H', + 'E', 'S', 'O', + 'E', 'S', 'S', + 'E', 'S', 'Z', + 'E', 'T', 'A', + 'E', 'T', 'H', + 'E', 'T', 'T', + 'E', 'T', 'Y', + 'E', 'W', 'E', + 'E', 'X', 'O', + 'E', 'Y', 'E', + 'E', 'Y', 'N', + 'E', 'Z', 'H', + 'E', 'Z', 'S', + 'F', 'A', 'A', + 'F', 'A', 'J', + 'F', 'A', 'M', + 'F', 'A', 'N', + 'F', 'A', 'P', + 'F', 'A', 'Q', + 'F', 'A', 'R', + 'F', 'A', 'T', + 'F', 'A', 'X', + 'F', 'A', 'Y', + 'F', 'E', 'E', + 'F', 'E', 'H', + 'F', 'E', 'I', + 'F', 'F', 'I', + 'F', 'F', 'L', + 'F', 'I', 'I', + 'F', 'I', 'P', + 'F', 'I', 'T', + 'F', 'I', 'X', + 'F', 'L', 'A', + 'F', 'L', 'Y', + 'F', 'O', 'G', + 'F', 'O', 'M', + 'F', 'O', 'N', + 'F', 'O', 'O', + 'F', 'O', 'P', + 'F', 'O', 'R', + 'F', 'O', 'X', + 'F', 'S', 'I', + 'F', 'U', 'A', + 'F', 'U', 'E', + 'F', 'U', 'P', + 'F', 'U', 'R', + 'F', 'U', 'T', + 'F', 'U', 'X', + 'F', 'W', 'A', + 'F', 'W', 'E', + 'F', 'W', 'I', + 'F', 'Y', 'A', + 'F', 'Y', 'P', + 'F', 'Y', 'T', + 'F', 'Y', 'X', + 'G', 'A', '2', + 'G', 'A', 'A', + 'G', 'A', 'D', + 'G', 'A', 'F', + 'G', 'A', 'G', + 'G', 'A', 'H', + 'G', 'A', 'I', + 'G', 'A', 'L', + 'G', 'A', 'M', + 'G', 'A', 'N', + 'G', 'A', 'P', + 'G', 'A', 'R', + 'G', 'A', 'T', + 'G', 'A', 'X', + 'G', 'A', 'Y', + 'G', 'B', 'A', + 'G', 'B', 'E', + 'G', 'B', 'I', + 'G', 'B', 'O', + 'G', 'B', 'U', + 'G', 'E', 'E', + 'G', 'E', 'M', + 'G', 'E', 'N', + 'G', 'E', 'P', + 'G', 'E', 'R', + 'G', 'E', 'T', + 'G', 'E', 'X', + 'G', 'G', 'A', + 'G', 'G', 'E', + 'G', 'G', 'I', + 'G', 'G', 'O', + 'G', 'G', 'U', + 'G', 'H', 'A', + 'G', 'H', 'E', + 'G', 'H', 'I', + 'G', 'H', 'O', + 'G', 'H', 'U', + 'G', 'H', 'Z', + 'G', 'I', '4', + 'G', 'I', 'E', + 'G', 'I', 'G', + 'G', 'I', 'L', + 'G', 'I', 'M', + 'G', 'I', 'P', + 'G', 'I', 'T', + 'G', 'I', 'X', + 'G', 'J', 'A', + 'G', 'J', 'E', + 'G', 'L', 'A', + 'G', 'O', 'A', + 'G', 'O', 'K', + 'G', 'O', 'O', + 'G', 'O', 'P', + 'G', 'O', 'T', + 'G', 'O', 'X', + 'G', 'P', 'A', + 'G', 'R', 'U', + 'G', 'U', '2', + 'G', 'U', 'A', + 'G', 'U', 'D', + 'G', 'U', 'G', + 'G', 'U', 'L', + 'G', 'U', 'M', + 'G', 'U', 'O', + 'G', 'U', 'P', + 'G', 'U', 'R', + 'G', 'U', 'T', + 'G', 'U', 'X', + 'G', 'W', 'A', + 'G', 'W', 'E', + 'G', 'W', 'I', + 'G', 'W', 'U', + 'G', 'Y', 'A', + 'G', 'Y', 'E', + 'G', 'Y', 'I', + 'G', 'Y', 'O', + 'G', 'Y', 'U', + 'H', 'A', 'A', + 'H', 'A', 'E', + 'H', 'A', 'H', + 'H', 'A', 'I', + 'H', 'A', 'L', + 'H', 'A', 'M', + 'H', 'A', 'N', + 'H', 'A', 'O', + 'H', 'A', 'P', + 'H', 'A', 'R', + 'H', 'A', 'T', + 'H', 'A', 'U', + 'H', 'A', 'X', + 'H', 'A', 'Y', + 'H', 'D', 'R', + 'H', 'E', 'E', + 'H', 'E', 'H', + 'H', 'E', 'I', + 'H', 'E', 'N', + 'H', 'E', 'P', + 'H', 'E', 'T', + 'H', 'E', 'X', + 'H', 'H', 'A', + 'H', 'H', 'E', + 'H', 'H', 'I', + 'H', 'H', 'O', + 'H', 'H', 'U', + 'H', 'I', 'E', + 'H', 'I', 'I', + 'H', 'I', 'N', + 'H', 'I', 'P', + 'H', 'I', 'T', + 'H', 'J', 'A', + 'H', 'L', 'A', + 'H', 'L', 'E', + 'H', 'L', 'I', + 'H', 'L', 'O', + 'H', 'L', 'U', + 'H', 'L', 'Y', + 'H', 'M', 'A', + 'H', 'M', 'E', + 'H', 'M', 'I', + 'H', 'M', 'O', + 'H', 'M', 'U', + 'H', 'M', 'Y', + 'H', 'N', 'A', + 'H', 'N', 'E', + 'H', 'N', 'I', + 'H', 'O', 'A', + 'H', 'O', 'E', + 'H', 'O', 'I', + 'H', 'O', 'M', + 'H', 'O', 'N', + 'H', 'O', 'O', + 'H', 'O', 'P', + 'H', 'O', 'T', + 'H', 'O', 'X', + 'H', 'O', 'Y', + 'H', 'P', 'A', + 'H', 'T', 'A', + 'H', 'U', 'B', + 'H', 'U', 'K', + 'H', 'U', 'N', + 'H', 'U', 'O', + 'H', 'U', 'T', + 'H', 'W', 'A', + 'H', 'W', 'E', + 'H', 'W', 'I', + 'H', 'W', 'O', + 'H', 'W', 'U', + 'H', 'X', 'A', + 'H', 'X', 'E', + 'H', 'X', 'G', + 'H', 'X', 'I', + 'H', 'X', 'O', + 'H', 'Y', 'A', + 'H', 'Z', 'G', + 'H', 'Z', 'T', + 'H', 'Z', 'W', + 'H', 'Z', 'Z', + 'I', '-', '1', + 'I', '-', '2', + 'I', '-', '3', + 'I', '-', '4', + 'I', '-', 'A', + 'I', '-', 'I', + 'I', '-', 'O', + 'I', '-', 'U', + 'I', 'A', 'N', + 'I', 'C', 'E', + 'I', 'D', 'D', + 'I', 'E', 'P', + 'I', 'E', 'T', + 'I', 'E', 'X', + 'I', 'G', 'I', + 'I', 'J', 'E', + 'I', 'L', '2', + 'I', 'M', 'N', + 'I', 'M', 'P', + 'I', 'N', 'G', + 'I', 'N', 'I', + 'I', 'N', 'K', + 'I', 'N', 'N', + 'I', 'N', 'Y', + 'I', 'O', 'R', + 'I', 'R', 'B', + 'I', 'R', 'I', + 'I', 'S', 'H', + 'I', 'S', 'S', + 'I', 'T', 'S', + 'I', 'T', 'T', + 'I', 'W', 'N', + 'J', 'A', 'A', + 'J', 'A', 'H', + 'J', 'A', 'R', + 'J', 'A', 'W', + 'J', 'E', 'E', + 'J', 'E', 'H', + 'J', 'E', 'R', + 'J', 'E', 'U', + 'J', 'H', 'A', + 'J', 'H', 'O', + 'J', 'I', 'A', + 'J', 'I', 'E', + 'J', 'I', 'L', + 'J', 'I', 'P', + 'J', 'I', 'T', + 'J', 'I', 'X', + 'J', 'J', 'A', + 'J', 'J', 'E', + 'J', 'J', 'I', + 'J', 'J', 'O', + 'J', 'J', 'U', + 'J', 'J', 'Y', + 'J', 'O', 'A', + 'J', 'O', 'O', + 'J', 'O', 'P', + 'J', 'O', 'T', + 'J', 'O', 'X', + 'J', 'O', 'Y', + 'J', 'U', 'O', + 'J', 'U', 'P', + 'J', 'U', 'R', + 'J', 'U', 'T', + 'J', 'U', 'U', + 'J', 'U', 'X', + 'J', 'W', 'A', + 'J', 'Y', 'P', + 'J', 'Y', 'R', + 'J', 'Y', 'T', + 'J', 'Y', 'X', + 'K', 'A', '2', + 'K', 'A', 'A', + 'K', 'A', 'B', + 'K', 'A', 'D', + 'K', 'A', 'F', + 'K', 'A', 'H', + 'K', 'A', 'I', + 'K', 'A', 'K', + 'K', 'A', 'L', + 'K', 'A', 'M', + 'K', 'A', 'N', + 'K', 'A', 'P', + 'K', 'A', 'Q', + 'K', 'A', 'R', + 'K', 'A', 'T', + 'K', 'A', 'V', + 'K', 'A', 'X', + 'K', 'A', 'Y', + 'K', 'E', 'B', + 'K', 'E', 'E', + 'K', 'E', 'H', + 'K', 'E', 'N', + 'K', 'E', 'P', + 'K', 'E', 'S', + 'K', 'E', 'T', + 'K', 'E', 'V', + 'K', 'E', 'X', + 'K', 'E', 'Y', + 'K', 'H', 'A', + 'K', 'H', 'E', + 'K', 'H', 'I', + 'K', 'H', 'O', + 'K', 'H', 'U', + 'K', 'H', 'Z', + 'K', 'I', 'B', + 'K', 'I', 'D', + 'K', 'I', 'E', + 'K', 'I', 'H', + 'K', 'I', 'I', + 'K', 'I', 'K', + 'K', 'I', 'N', + 'K', 'I', 'P', + 'K', 'I', 'Q', + 'K', 'I', 'T', + 'K', 'I', 'V', + 'K', 'I', 'W', + 'K', 'I', 'X', + 'K', 'J', 'E', + 'K', 'K', 'A', + 'K', 'K', 'E', + 'K', 'K', 'I', + 'K', 'K', 'O', + 'K', 'K', 'U', + 'K', 'L', 'A', + 'K', 'O', 'A', + 'K', 'O', 'B', + 'K', 'O', 'H', + 'K', 'O', 'I', + 'K', 'O', 'K', + 'K', 'O', 'N', + 'K', 'O', 'O', + 'K', 'O', 'P', + 'K', 'O', 'T', + 'K', 'O', 'V', + 'K', 'O', 'X', + 'K', 'P', 'A', + 'K', 'P', 'E', + 'K', 'P', 'I', + 'K', 'P', 'O', + 'K', 'P', 'U', + 'K', 'R', 'A', + 'K', 'S', 'I', + 'K', 'U', '3', + 'K', 'U', '4', + 'K', 'U', '7', + 'K', 'U', 'A', + 'K', 'U', 'B', + 'K', 'U', 'G', + 'K', 'U', 'L', + 'K', 'U', 'N', + 'K', 'U', 'O', + 'K', 'U', 'P', + 'K', 'U', 'Q', + 'K', 'U', 'R', + 'K', 'U', 'T', + 'K', 'U', 'V', + 'K', 'U', 'X', + 'K', 'V', 'A', + 'K', 'W', 'A', + 'K', 'W', 'B', + 'K', 'W', 'E', + 'K', 'W', 'I', + 'K', 'W', 'M', + 'K', 'W', 'O', + 'K', 'W', 'V', + 'K', 'X', 'A', + 'K', 'X', 'E', + 'K', 'X', 'I', + 'K', 'X', 'O', + 'K', 'X', 'U', + 'K', 'Y', 'A', + 'K', 'Y', 'E', + 'K', 'Y', 'I', + 'K', 'Y', 'O', + 'K', 'Y', 'U', + 'L', 'A', 'A', + 'L', 'A', 'B', + 'L', 'A', 'E', + 'L', 'A', 'H', + 'L', 'A', 'I', + 'L', 'A', 'L', + 'L', 'A', 'M', + 'L', 'A', 'N', + 'L', 'A', 'O', + 'L', 'A', 'P', + 'L', 'A', 'Q', + 'L', 'A', 'S', + 'L', 'A', 'T', + 'L', 'A', 'U', + 'L', 'A', 'W', + 'L', 'A', 'X', + 'L', 'A', 'Y', + 'L', 'C', 'E', + 'L', 'C', 'I', + 'L', 'D', '2', + 'L', 'E', 'E', + 'L', 'E', 'G', + 'L', 'E', 'I', + 'L', 'E', 'K', + 'L', 'E', 'O', + 'L', 'E', 'P', + 'L', 'E', 'T', + 'L', 'E', 'U', + 'L', 'E', 'X', + 'L', 'H', 'A', + 'L', 'H', 'E', + 'L', 'H', 'I', + 'L', 'H', 'O', + 'L', 'H', 'U', + 'L', 'I', 'D', + 'L', 'I', 'E', + 'L', 'I', 'I', + 'L', 'I', 'L', + 'L', 'I', 'P', + 'L', 'I', 'Q', + 'L', 'I', 'S', + 'L', 'I', 'T', + 'L', 'I', 'X', + 'L', 'J', 'E', + 'L', 'L', 'A', + 'L', 'L', 'E', + 'L', 'L', 'L', + 'L', 'O', 'A', + 'L', 'O', 'G', + 'L', 'O', 'M', + 'L', 'O', 'O', + 'L', 'O', 'P', + 'L', 'O', 'Q', + 'L', 'O', 'S', + 'L', 'O', 'T', + 'L', 'O', 'W', + 'L', 'O', 'X', + 'L', 'R', 'E', + 'L', 'R', 'I', + 'L', 'R', 'M', + 'L', 'R', 'O', + 'L', 'U', '2', + 'L', 'U', '3', + 'L', 'U', 'B', + 'L', 'U', 'E', + 'L', 'U', 'H', + 'L', 'U', 'L', + 'L', 'U', 'M', + 'L', 'U', 'O', + 'L', 'U', 'P', + 'L', 'U', 'R', + 'L', 'U', 'S', + 'L', 'U', 'T', + 'L', 'U', 'X', + 'L', 'W', 'A', + 'L', 'W', 'E', + 'L', 'W', 'I', + 'L', 'W', 'O', + 'L', 'Y', 'A', + 'L', 'Y', 'P', + 'L', 'Y', 'R', + 'L', 'Y', 'T', + 'L', 'Y', 'X', + 'L', 'Y', 'Y', + 'M', 'A', '2', + 'M', 'A', 'A', + 'M', 'A', 'E', + 'M', 'A', 'H', + 'M', 'A', 'I', + 'M', 'A', 'N', + 'M', 'A', 'O', + 'M', 'A', 'P', + 'M', 'A', 'Q', + 'M', 'A', 'R', + 'M', 'A', 'T', + 'M', 'A', 'U', + 'M', 'A', 'X', + 'M', 'A', 'Y', + 'M', 'B', '2', + 'M', 'B', '3', + 'M', 'B', '4', + 'M', 'B', 'A', + 'M', 'B', 'E', + 'M', 'B', 'I', + 'M', 'B', 'O', + 'M', 'B', 'U', + 'M', 'E', 'D', + 'M', 'E', 'E', + 'M', 'E', 'M', + 'M', 'E', 'N', + 'M', 'E', 'S', + 'M', 'E', 'X', + 'M', 'F', 'O', + 'M', 'G', 'A', + 'M', 'G', 'E', + 'M', 'G', 'O', + 'M', 'G', 'U', + 'M', 'H', 'A', + 'M', 'H', 'Z', + 'M', 'I', 'D', + 'M', 'I', 'E', + 'M', 'I', 'G', + 'M', 'I', 'I', + 'M', 'I', 'L', + 'M', 'I', 'M', + 'M', 'I', 'N', + 'M', 'I', 'P', + 'M', 'I', 'T', + 'M', 'I', 'X', + 'M', 'L', 'A', + 'M', 'O', 'A', + 'M', 'O', 'L', + 'M', 'O', 'N', + 'M', 'O', 'O', + 'M', 'O', 'P', + 'M', 'O', 'T', + 'M', 'O', 'X', + 'M', 'P', 'A', + 'M', 'R', 'O', + 'M', 'U', 'E', + 'M', 'U', 'G', + 'M', 'U', 'M', + 'M', 'U', 'N', + 'M', 'U', 'O', + 'M', 'U', 'P', + 'M', 'U', 'R', + 'M', 'U', 'S', + 'M', 'U', 'T', + 'M', 'U', 'X', + 'M', 'V', 'I', + 'M', 'V', 'S', + 'M', 'W', 'A', + 'M', 'W', 'E', + 'M', 'W', 'I', + 'M', 'W', 'O', + 'M', 'Y', 'A', + 'M', 'Y', 'P', + 'M', 'Y', 'T', + 'M', 'Y', 'X', + 'N', 'A', '2', + 'N', 'A', '4', + 'N', 'A', 'A', + 'N', 'A', 'E', + 'N', 'A', 'G', + 'N', 'A', 'H', + 'N', 'A', 'M', + 'N', 'A', 'N', + 'N', 'A', 'P', + 'N', 'A', 'Q', + 'N', 'A', 'R', + 'N', 'A', 'U', + 'N', 'A', 'X', + 'N', 'A', 'Y', + 'N', 'B', 'A', + 'N', 'B', 'I', + 'N', 'B', 'O', + 'N', 'B', 'U', + 'N', 'B', 'Y', + 'N', 'C', 'A', + 'N', 'D', 'A', + 'N', 'D', 'E', + 'N', 'D', 'I', + 'N', 'D', 'O', + 'N', 'D', 'U', + 'N', 'E', 'E', + 'N', 'E', 'L', + 'N', 'E', 'N', + 'N', 'E', 'O', + 'N', 'E', 'P', + 'N', 'E', 'T', + 'N', 'E', 'W', + 'N', 'E', 'X', + 'N', 'G', 'A', + 'N', 'G', 'E', + 'N', 'G', 'G', + 'N', 'G', 'I', + 'N', 'G', 'O', + 'N', 'G', 'U', + 'N', 'H', 'A', + 'N', 'I', '2', + 'N', 'I', 'A', + 'N', 'I', 'B', + 'N', 'I', 'E', + 'N', 'I', 'I', + 'N', 'I', 'M', + 'N', 'I', 'N', + 'N', 'I', 'P', + 'N', 'I', 'T', + 'N', 'I', 'X', + 'N', 'J', 'A', + 'N', 'J', 'E', + 'N', 'J', 'I', + 'N', 'J', 'O', + 'N', 'J', 'U', + 'N', 'J', 'Y', + 'N', 'K', 'A', + 'N', 'K', 'O', + 'N', 'N', 'A', + 'N', 'N', 'E', + 'N', 'N', 'G', + 'N', 'N', 'O', + 'N', 'O', 'A', + 'N', 'O', 'N', + 'N', 'O', 'O', + 'N', 'O', 'P', + 'N', 'O', 'R', + 'N', 'O', 'T', + 'N', 'O', 'W', + 'N', 'O', 'X', + 'N', 'O', 'Y', + 'N', 'P', 'A', + 'N', 'P', 'N', + 'N', 'Q', 'A', + 'N', 'R', 'A', + 'N', 'R', 'E', + 'N', 'R', 'O', + 'N', 'R', 'U', + 'N', 'R', 'Y', + 'N', 'S', 'A', + 'N', 'T', 'A', + 'N', 'T', 'U', + 'N', 'U', 'E', + 'N', 'U', 'M', + 'N', 'U', 'N', + 'N', 'U', 'O', + 'N', 'U', 'P', + 'N', 'U', 'R', + 'N', 'U', 'T', + 'N', 'U', 'X', + 'N', 'W', 'A', + 'N', 'W', 'E', + 'N', 'W', 'I', + 'N', 'W', 'O', + 'N', 'X', 'A', + 'N', 'Y', 'A', + 'N', 'Y', 'D', + 'N', 'Y', 'E', + 'N', 'Y', 'I', + 'N', 'Y', 'O', + 'N', 'Y', 'U', + 'N', 'Z', 'A', + 'N', 'Z', 'E', + 'N', 'Z', 'I', + 'N', 'Z', 'U', + 'N', 'Z', 'Y', + 'O', '-', '1', + 'O', '-', '2', + 'O', '-', '3', + 'O', '-', 'E', + 'O', '-', 'O', + 'O', '-', 'U', + 'O', 'A', 'K', + 'O', 'A', 'Y', + 'O', 'C', 'R', + 'O', 'D', 'D', + 'O', 'E', 'E', + 'O', 'E', 'K', + 'O', 'E', 'R', + 'O', 'E', 'Y', + 'O', 'F', 'F', + 'O', 'H', 'M', + 'O', 'I', 'L', + 'O', 'I', 'N', + 'O', 'L', 'D', + 'O', 'L', 'E', + 'O', 'N', 'E', + 'O', 'N', 'G', + 'O', 'N', 'N', + 'O', 'N', 'U', + 'O', 'O', 'E', + 'O', 'O', 'H', + 'O', 'O', 'N', + 'O', 'O', 'U', + 'O', 'R', 'E', + 'O', 'R', 'R', + 'O', 'T', 'T', + 'O', 'T', 'U', + 'O', 'U', 'T', + 'O', 'W', 'L', + 'P', 'A', 'A', + 'P', 'A', 'D', + 'P', 'A', 'H', + 'P', 'A', 'N', + 'P', 'A', 'O', + 'P', 'A', 'P', + 'P', 'A', 'R', + 'P', 'A', 'T', + 'P', 'A', 'U', + 'P', 'A', 'W', + 'P', 'A', 'X', + 'P', 'A', 'Y', + 'P', 'D', 'F', + 'P', 'D', 'I', + 'P', 'E', 'A', + 'P', 'E', 'E', + 'P', 'E', 'H', + 'P', 'E', 'N', + 'P', 'E', 'R', + 'P', 'E', 'S', + 'P', 'E', 'T', + 'P', 'H', 'A', + 'P', 'H', 'E', + 'P', 'H', 'I', + 'P', 'H', 'O', + 'P', 'H', 'U', + 'P', 'I', 'E', + 'P', 'I', 'G', + 'P', 'I', 'I', + 'P', 'I', 'N', + 'P', 'I', 'P', + 'P', 'I', 'T', + 'P', 'I', 'X', + 'P', 'L', 'A', + 'P', 'N', 'P', + 'P', 'O', 'A', + 'P', 'O', 'D', + 'P', 'O', 'N', + 'P', 'O', 'O', + 'P', 'O', 'P', + 'P', 'O', 'T', + 'P', 'O', 'X', + 'P', 'O', 'Y', + 'P', 'P', 'A', + 'P', 'P', 'M', + 'P', 'P', 'V', + 'P', 'S', 'A', + 'P', 'S', 'I', + 'P', 'T', 'E', + 'P', 'U', '2', + 'P', 'U', 'B', + 'P', 'U', 'E', + 'P', 'U', 'M', + 'P', 'U', 'O', + 'P', 'U', 'P', + 'P', 'U', 'Q', + 'P', 'U', 'R', + 'P', 'U', 'T', + 'P', 'U', 'X', + 'P', 'V', 'O', + 'P', 'W', 'A', + 'P', 'W', 'E', + 'P', 'W', 'I', + 'P', 'W', 'O', + 'P', 'Y', 'P', + 'P', 'Y', 'R', + 'P', 'Y', 'T', + 'P', 'Y', 'X', + 'Q', 'A', 'A', + 'Q', 'A', 'F', + 'Q', 'A', 'I', + 'Q', 'A', 'Q', + 'Q', 'A', 'R', + 'Q', 'A', 'U', + 'Q', 'A', 'Y', + 'Q', 'E', 'E', + 'Q', 'G', 'A', + 'Q', 'H', 'A', + 'Q', 'H', 'E', + 'Q', 'H', 'I', + 'Q', 'H', 'O', + 'Q', 'H', 'U', + 'Q', 'I', 'E', + 'Q', 'I', 'F', + 'Q', 'I', 'I', + 'Q', 'I', 'P', + 'Q', 'I', 'T', + 'Q', 'I', 'X', + 'Q', 'O', 'A', + 'Q', 'O', 'F', + 'Q', 'O', 'O', + 'Q', 'O', 'P', + 'Q', 'O', 'T', + 'Q', 'O', 'X', + 'Q', 'U', 'A', + 'Q', 'U', 'E', + 'Q', 'U', 'F', + 'Q', 'U', 'I', + 'Q', 'U', 'K', + 'Q', 'U', 'O', + 'Q', 'U', 'P', + 'Q', 'U', 'R', + 'Q', 'U', 'T', + 'Q', 'U', 'U', + 'Q', 'U', 'V', + 'Q', 'U', 'X', + 'Q', 'W', 'A', + 'Q', 'W', 'E', + 'Q', 'W', 'I', + 'Q', 'Y', 'A', + 'Q', 'Y', 'E', + 'Q', 'Y', 'I', + 'Q', 'Y', 'O', + 'Q', 'Y', 'P', + 'Q', 'Y', 'R', + 'Q', 'Y', 'T', + 'Q', 'Y', 'U', + 'Q', 'Y', 'X', + 'R', 'A', '2', + 'R', 'A', '3', + 'R', 'A', 'A', + 'R', 'A', 'B', + 'R', 'A', 'D', + 'R', 'A', 'E', + 'R', 'A', 'H', + 'R', 'A', 'I', + 'R', 'A', 'M', + 'R', 'A', 'N', + 'R', 'A', 'P', + 'R', 'A', 'Q', + 'R', 'A', 'T', + 'R', 'A', 'U', + 'R', 'A', 'X', + 'R', 'A', 'Y', + 'R', 'D', 'O', + 'R', 'E', 'D', + 'R', 'E', 'E', + 'R', 'E', 'H', + 'R', 'E', 'I', + 'R', 'E', 'N', + 'R', 'E', 'P', + 'R', 'E', 'U', + 'R', 'E', 'X', + 'R', 'H', 'A', + 'R', 'H', 'O', + 'R', 'I', 'I', + 'R', 'I', 'M', + 'R', 'I', 'N', + 'R', 'I', 'P', + 'R', 'J', 'E', + 'R', 'L', 'E', + 'R', 'L', 'I', + 'R', 'L', 'M', + 'R', 'L', 'O', + 'R', 'M', 'T', + 'R', 'O', '2', + 'R', 'O', 'A', + 'R', 'O', 'C', + 'R', 'O', 'D', + 'R', 'O', 'G', + 'R', 'O', 'M', + 'R', 'O', 'O', + 'R', 'O', 'P', + 'R', 'O', 'T', + 'R', 'O', 'X', + 'R', 'R', 'A', + 'R', 'R', 'E', + 'R', 'R', 'O', + 'R', 'R', 'U', + 'R', 'R', 'Y', + 'R', 'T', 'E', + 'R', 'U', 'A', + 'R', 'U', 'B', + 'R', 'U', 'E', + 'R', 'U', 'M', + 'R', 'U', 'N', + 'R', 'U', 'O', + 'R', 'U', 'P', + 'R', 'U', 'R', + 'R', 'U', 'T', + 'R', 'U', 'X', + 'R', 'W', 'A', + 'R', 'W', 'E', + 'R', 'W', 'I', + 'R', 'W', 'O', + 'R', 'Y', 'A', + 'R', 'Y', 'P', + 'R', 'Y', 'R', + 'R', 'Y', 'T', + 'R', 'Y', 'X', + 'R', 'Y', 'Y', + 'S', '-', 'W', + 'S', 'A', 'A', + 'S', 'A', 'D', + 'S', 'A', 'G', + 'S', 'A', 'H', + 'S', 'A', 'L', + 'S', 'A', 'M', + 'S', 'A', 'N', + 'S', 'A', 'P', + 'S', 'A', 'Q', + 'S', 'A', 'R', + 'S', 'A', 'T', + 'S', 'A', 'W', + 'S', 'A', 'X', + 'S', 'A', 'Y', + 'S', 'E', 'E', + 'S', 'E', 'H', + 'S', 'E', 'P', + 'S', 'E', 'T', + 'S', 'E', 'X', + 'S', 'H', '2', + 'S', 'H', 'A', + 'S', 'H', 'E', + 'S', 'H', 'I', + 'S', 'H', 'O', + 'S', 'H', 'U', + 'S', 'H', 'V', + 'S', 'H', 'Y', + 'S', 'I', 'A', + 'S', 'I', 'E', + 'S', 'I', 'G', + 'S', 'I', 'I', + 'S', 'I', 'N', + 'S', 'I', 'P', + 'S', 'I', 'T', + 'S', 'I', 'X', + 'S', 'J', 'E', + 'S', 'K', 'I', + 'S', 'K', 'W', + 'S', 'N', 'A', + 'S', 'O', 'A', + 'S', 'O', 'F', + 'S', 'O', 'M', + 'S', 'O', 'N', + 'S', 'O', 'O', + 'S', 'O', 'P', + 'S', 'O', 'Q', + 'S', 'O', 'S', + 'S', 'O', 'T', + 'S', 'O', 'U', + 'S', 'O', 'W', + 'S', 'O', 'X', + 'S', 'O', 'Y', + 'S', 'P', 'A', + 'S', 'P', 'E', + 'S', 'P', 'I', + 'S', 'P', 'O', + 'S', 'P', 'Y', + 'S', 'S', 'A', + 'S', 'S', 'E', + 'S', 'S', 'I', + 'S', 'S', 'O', + 'S', 'S', 'U', + 'S', 'S', 'Y', + 'S', 'T', '2', + 'S', 'T', 'A', + 'S', 'U', 'A', + 'S', 'U', 'D', + 'S', 'U', 'E', + 'S', 'U', 'M', + 'S', 'U', 'N', + 'S', 'U', 'O', + 'S', 'U', 'P', + 'S', 'U', 'R', + 'S', 'U', 'T', + 'S', 'U', 'U', + 'S', 'U', 'X', + 'S', 'W', 'A', + 'S', 'W', 'E', + 'S', 'W', 'G', + 'S', 'W', 'I', + 'S', 'W', 'O', + 'S', 'W', 'Z', + 'S', 'Y', 'A', + 'S', 'Y', 'I', + 'S', 'Y', 'P', + 'S', 'Y', 'R', + 'S', 'Y', 'T', + 'S', 'Y', 'X', + 'S', 'Z', 'A', + 'S', 'Z', 'E', + 'S', 'Z', 'I', + 'S', 'Z', 'O', + 'S', 'Z', 'P', + 'S', 'Z', 'U', + 'S', 'Z', 'Z', + 'T', 'A', '2', + 'T', 'A', 'A', + 'T', 'A', 'B', + 'T', 'A', 'E', + 'T', 'A', 'G', + 'T', 'A', 'H', + 'T', 'A', 'I', + 'T', 'A', 'K', + 'T', 'A', 'M', + 'T', 'A', 'N', + 'T', 'A', 'O', + 'T', 'A', 'P', + 'T', 'A', 'Q', + 'T', 'A', 'R', + 'T', 'A', 'S', + 'T', 'A', 'T', + 'T', 'A', 'U', + 'T', 'A', 'V', + 'T', 'A', 'W', + 'T', 'A', 'X', + 'T', 'A', 'Y', + 'T', 'E', 'A', + 'T', 'E', 'E', + 'T', 'E', 'H', + 'T', 'E', 'K', + 'T', 'E', 'N', + 'T', 'E', 'P', + 'T', 'E', 'T', + 'T', 'E', 'U', + 'T', 'E', 'X', + 'T', 'H', 'A', + 'T', 'H', 'E', + 'T', 'H', 'I', + 'T', 'H', 'O', + 'T', 'H', 'U', + 'T', 'H', 'Z', + 'T', 'I', '2', + 'T', 'I', 'E', + 'T', 'I', 'I', + 'T', 'I', 'L', + 'T', 'I', 'N', + 'T', 'I', 'P', + 'T', 'I', 'R', + 'T', 'I', 'T', + 'T', 'I', 'X', + 'T', 'J', 'E', + 'T', 'L', 'A', + 'T', 'L', 'E', + 'T', 'L', 'I', + 'T', 'L', 'O', + 'T', 'L', 'U', + 'T', 'L', 'V', + 'T', 'O', 'A', + 'T', 'O', 'N', + 'T', 'O', 'O', + 'T', 'O', 'P', + 'T', 'O', 'Q', + 'T', 'O', 'S', + 'T', 'O', 'T', + 'T', 'O', 'V', + 'T', 'O', 'X', + 'T', 'R', 'A', + 'T', 'R', 'I', + 'T', 'S', 'A', + 'T', 'S', 'E', + 'T', 'S', 'I', + 'T', 'S', 'O', + 'T', 'S', 'U', + 'T', 'S', 'V', + 'T', 'T', '2', + 'T', 'T', 'A', + 'T', 'T', 'E', + 'T', 'T', 'H', + 'T', 'T', 'I', + 'T', 'T', 'O', + 'T', 'T', 'U', + 'T', 'U', 'B', + 'T', 'U', 'K', + 'T', 'U', 'M', + 'T', 'U', 'O', + 'T', 'U', 'P', + 'T', 'U', 'R', + 'T', 'U', 'T', + 'T', 'U', 'X', + 'T', 'W', 'A', + 'T', 'W', 'E', + 'T', 'W', 'I', + 'T', 'W', 'O', + 'T', 'X', 'A', + 'T', 'Y', 'A', + 'T', 'Y', 'E', + 'T', 'Y', 'I', + 'T', 'Y', 'O', + 'T', 'Y', 'R', + 'T', 'Z', 'A', + 'T', 'Z', 'E', + 'T', 'Z', 'I', + 'T', 'Z', 'O', + 'T', 'Z', 'U', + 'U', '-', '1', + 'U', '-', '2', + 'U', '-', '3', + 'U', '-', '4', + 'U', '-', '5', + 'U', '-', 'A', + 'U', '-', 'U', + 'U', 'A', 'N', + 'U', 'D', 'D', + 'U', 'E', 'A', + 'U', 'E', 'C', + 'U', 'E', 'E', + 'U', 'E', 'I', + 'U', 'E', 'N', + 'U', 'E', 'Q', + 'U', 'E', 'X', + 'U', 'E', 'Y', + 'U', 'E', 'Z', + 'U', 'H', 'D', + 'U', 'I', 'C', + 'U', 'I', 'Q', + 'U', 'I', 'X', + 'U', 'I', 'Z', + 'U', 'K', 'U', + 'U', 'L', 'U', + 'U', 'N', 'A', + 'U', 'N', 'G', + 'U', 'N', 'K', + 'U', 'N', 'N', + 'U', 'N', 'Y', + 'U', 'O', 'G', + 'U', 'O', 'N', + 'U', 'O', 'P', + 'U', 'O', 'X', + 'U', 'R', '2', + 'U', 'R', '4', + 'U', 'R', 'A', + 'U', 'R', 'I', + 'U', 'R', 'N', + 'U', 'R', 'U', + 'U', 'S', 'E', + 'U', 'S', 'H', + 'U', 'U', 'E', + 'U', 'U', 'U', + 'U', 'W', 'U', + 'U', 'Z', '3', + 'U', 'Z', 'U', + 'V', 'A', 'A', + 'V', 'A', 'H', + 'V', 'A', 'I', + 'V', 'A', 'J', + 'V', 'A', 'P', + 'V', 'A', 'T', + 'V', 'A', 'U', + 'V', 'A', 'V', + 'V', 'A', 'X', + 'V', 'E', 'E', + 'V', 'E', 'H', + 'V', 'E', 'P', + 'V', 'E', 'R', + 'V', 'E', 'W', + 'V', 'E', 'X', + 'V', 'F', 'A', + 'V', 'H', 'A', + 'V', 'I', 'E', + 'V', 'I', 'N', + 'V', 'I', 'P', + 'V', 'I', 'T', + 'V', 'I', 'X', + 'V', 'O', 'D', + 'V', 'O', 'M', + 'V', 'O', 'O', + 'V', 'O', 'P', + 'V', 'O', 'S', + 'V', 'O', 'T', + 'V', 'O', 'U', + 'V', 'O', 'W', + 'V', 'O', 'X', + 'V', 'U', 'P', + 'V', 'U', 'R', + 'V', 'U', 'T', + 'V', 'U', 'X', + 'V', 'W', 'A', + 'V', 'W', 'J', + 'V', 'Y', 'P', + 'V', 'Y', 'R', + 'V', 'Y', 'T', + 'V', 'Y', 'X', + 'W', 'A', 'A', + 'W', 'A', 'E', + 'W', 'A', 'I', + 'W', 'A', 'N', + 'W', 'A', 'P', + 'W', 'A', 'T', + 'W', 'A', 'U', + 'W', 'A', 'W', + 'W', 'A', 'X', + 'W', 'A', 'Y', + 'W', 'E', 'B', + 'W', 'E', 'E', + 'W', 'E', 'I', + 'W', 'E', 'N', + 'W', 'E', 'O', + 'W', 'E', 'P', + 'W', 'E', 'T', + 'W', 'E', 'X', + 'W', 'I', 'I', + 'W', 'I', 'N', + 'W', 'O', 'A', + 'W', 'O', 'E', + 'W', 'O', 'N', + 'W', 'O', 'O', + 'W', 'O', 'P', + 'W', 'O', 'W', + 'W', 'O', 'X', + 'W', 'R', 'Y', + 'W', 'U', 'E', + 'W', 'U', 'I', + 'W', 'U', 'N', + 'W', 'U', 'O', + 'W', 'U', 'P', + 'W', 'V', 'A', + 'W', 'V', 'E', + 'W', 'V', 'I', + 'X', '-', 'X', + 'X', 'A', 'A', + 'X', 'A', 'N', + 'X', 'A', 'U', + 'X', 'E', 'E', + 'X', 'E', 'H', + 'X', 'H', 'A', + 'X', 'I', 'E', + 'X', 'I', 'P', + 'X', 'I', 'T', + 'X', 'I', 'X', + 'X', 'O', 'A', + 'X', 'O', 'P', + 'X', 'O', 'R', + 'X', 'O', 'T', + 'X', 'O', 'X', + 'X', 'U', 'O', + 'X', 'V', 'A', + 'X', 'V', 'E', + 'X', 'W', 'A', + 'X', 'W', 'E', + 'X', 'W', 'I', + 'X', 'Y', 'A', + 'X', 'Y', 'E', + 'X', 'Y', 'I', + 'X', 'Y', 'O', + 'X', 'Y', 'P', + 'X', 'Y', 'R', + 'X', 'Y', 'T', + 'X', 'Y', 'U', + 'X', 'Y', 'X', + 'Y', 'A', 'A', + 'Y', 'A', 'B', + 'Y', 'A', 'D', + 'Y', 'A', 'E', + 'Y', 'A', 'F', + 'Y', 'A', 'G', + 'Y', 'A', 'H', + 'Y', 'A', 'J', + 'Y', 'A', 'K', + 'Y', 'A', 'L', + 'Y', 'A', 'M', + 'Y', 'A', 'N', + 'Y', 'A', 'P', + 'Y', 'A', 'Q', + 'Y', 'A', 'R', + 'Y', 'A', 'S', + 'Y', 'A', 'T', + 'Y', 'A', 'U', + 'Y', 'A', 'V', + 'Y', 'A', 'W', + 'Y', 'A', 'Y', + 'Y', 'A', 'Z', + 'Y', 'E', 'A', + 'Y', 'E', 'E', + 'Y', 'E', 'H', + 'Y', 'E', 'N', + 'Y', 'E', 'O', + 'Y', 'E', 'R', + 'Y', 'E', 'W', + 'Y', 'E', 'Y', + 'Y', 'H', 'A', + 'Y', 'H', 'E', + 'Y', 'I', 'E', + 'Y', 'I', 'G', + 'Y', 'I', 'H', + 'Y', 'I', 'I', + 'Y', 'I', 'N', + 'Y', 'I', 'P', + 'Y', 'I', 'T', + 'Y', 'I', 'X', + 'Y', 'O', 'A', + 'Y', 'O', 'D', + 'Y', 'O', 'O', + 'Y', 'O', 'P', + 'Y', 'O', 'Q', + 'Y', 'O', 'T', + 'Y', 'O', 'U', + 'Y', 'O', 'X', + 'Y', 'O', 'Y', + 'Y', 'R', 'Y', + 'Y', 'U', 'E', + 'Y', 'U', 'I', + 'Y', 'U', 'J', + 'Y', 'U', 'M', + 'Y', 'U', 'N', + 'Y', 'U', 'O', + 'Y', 'U', 'P', + 'Y', 'U', 'Q', + 'Y', 'U', 'R', + 'Y', 'U', 'S', + 'Y', 'U', 'T', + 'Y', 'U', 'X', + 'Y', 'W', 'A', + 'Y', 'W', 'E', + 'Y', 'W', 'I', + 'Y', 'W', 'O', + 'Y', 'Y', 'A', + 'Y', 'Y', 'E', + 'Y', 'Y', 'P', + 'Y', 'Y', 'R', + 'Y', 'Y', 'T', + 'Y', 'Y', 'X', + 'Z', 'A', '7', + 'Z', 'A', 'A', + 'Z', 'A', 'G', + 'Z', 'A', 'H', + 'Z', 'A', 'I', + 'Z', 'A', 'L', + 'Z', 'A', 'P', + 'Z', 'A', 'T', + 'Z', 'A', 'X', + 'Z', 'E', '2', + 'Z', 'E', 'E', + 'Z', 'E', 'N', + 'Z', 'E', 'P', + 'Z', 'E', 'X', + 'Z', 'H', 'A', + 'Z', 'H', 'E', + 'Z', 'H', 'I', + 'Z', 'H', 'O', + 'Z', 'H', 'U', + 'Z', 'H', 'Y', + 'Z', 'I', '3', + 'Z', 'I', 'B', + 'Z', 'I', 'E', + 'Z', 'I', 'G', + 'Z', 'I', 'P', + 'Z', 'I', 'T', + 'Z', 'I', 'X', + 'Z', 'J', 'E', + 'Z', 'L', 'A', + 'Z', 'O', 'A', + 'Z', 'O', 'O', + 'Z', 'O', 'P', + 'Z', 'O', 'T', + 'Z', 'O', 'X', + 'Z', 'R', 'A', + 'Z', 'S', 'A', + 'Z', 'U', '5', + 'Z', 'U', 'M', + 'Z', 'U', 'O', + 'Z', 'U', 'P', + 'Z', 'U', 'R', + 'Z', 'U', 'T', + 'Z', 'U', 'X', + 'Z', 'W', 'A', + 'Z', 'W', 'J', + 'Z', 'Y', 'P', + 'Z', 'Y', 'R', + 'Z', 'Y', 'T', + 'Z', 'Y', 'X', + 'Z', 'Z', 'A', + 'Z', 'Z', 'E', + 'Z', 'Z', 'I', + 'Z', 'Z', 'O', + 'Z', 'Z', 'U', + 'Z', 'Z', 'Y', + 'A', '-', 'E', 'U', + 'A', '-', 'W', 'O', + 'A', '0', '0', '1', + 'A', '0', '0', '2', + 'A', '0', '0', '3', + 'A', '0', '0', '4', + 'A', '0', '0', '5', + 'A', '0', '0', '6', + 'A', '0', '0', '7', + 'A', '0', '0', '8', + 'A', '0', '0', '9', + 'A', '0', '1', '0', + 'A', '0', '1', '1', + 'A', '0', '1', '2', + 'A', '0', '1', '3', + 'A', '0', '1', '4', + 'A', '0', '1', '5', + 'A', '0', '1', '6', + 'A', '0', '1', '7', + 'A', '0', '1', '8', + 'A', '0', '1', '9', + 'A', '0', '2', '0', + 'A', '0', '2', '1', + 'A', '0', '2', '2', + 'A', '0', '2', '3', + 'A', '0', '2', '4', + 'A', '0', '2', '5', + 'A', '0', '2', '6', + 'A', '0', '2', '7', + 'A', '0', '2', '8', + 'A', '0', '2', '9', + 'A', '0', '3', '0', + 'A', '0', '3', '1', + 'A', '0', '3', '2', + 'A', '0', '3', '3', + 'A', '0', '3', '4', + 'A', '0', '3', '5', + 'A', '0', '3', '6', + 'A', '0', '3', '7', + 'A', '0', '3', '8', + 'A', '0', '3', '9', + 'A', '0', '4', '0', + 'A', '0', '4', '1', + 'A', '0', '4', '2', + 'A', '0', '4', '3', + 'A', '0', '4', '4', + 'A', '0', '4', '5', + 'A', '0', '4', '6', + 'A', '0', '4', '7', + 'A', '0', '4', '8', + 'A', '0', '4', '9', + 'A', '0', '5', '0', + 'A', '0', '5', '1', + 'A', '0', '5', '2', + 'A', '0', '5', '3', + 'A', '0', '5', '4', + 'A', '0', '5', '5', + 'A', '0', '5', '6', + 'A', '0', '5', '7', + 'A', '0', '5', '8', + 'A', '0', '5', '9', + 'A', '0', '6', '0', + 'A', '0', '6', '1', + 'A', '0', '6', '2', + 'A', '0', '6', '3', + 'A', '0', '6', '4', + 'A', '0', '6', '5', + 'A', '0', '6', '6', + 'A', '0', '6', '7', + 'A', '0', '6', '8', + 'A', '0', '6', '9', + 'A', '0', '7', '0', + 'A', '0', '7', '1', + 'A', '0', '7', '2', + 'A', '0', '7', '3', + 'A', '0', '7', '4', + 'A', '0', '7', '5', + 'A', '0', '7', '6', + 'A', '0', '7', '7', + 'A', '0', '7', '8', + 'A', '0', '7', '9', + 'A', '0', '8', '0', + 'A', '0', '8', '1', + 'A', '0', '8', '2', + 'A', '0', '8', '3', + 'A', '0', '8', '4', + 'A', '0', '8', '5', + 'A', '0', '8', '6', + 'A', '0', '8', '7', + 'A', '0', '8', '8', + 'A', '0', '8', '9', + 'A', '0', '9', '0', + 'A', '0', '9', '1', + 'A', '0', '9', '2', + 'A', '0', '9', '3', + 'A', '0', '9', '4', + 'A', '0', '9', '5', + 'A', '0', '9', '6', + 'A', '0', '9', '7', + 'A', '0', '9', '8', + 'A', '0', '9', '9', + 'A', '1', '0', '0', + 'A', '1', '0', '1', + 'A', '1', '0', '2', + 'A', '1', '0', '3', + 'A', '1', '0', '4', + 'A', '1', '0', '5', + 'A', '1', '0', '6', + 'A', '1', '0', '7', + 'A', '1', '0', '8', + 'A', '1', '0', '9', + 'A', '1', '1', '0', + 'A', '1', '1', '1', + 'A', '1', '1', '2', + 'A', '1', '1', '3', + 'A', '1', '1', '4', + 'A', '1', '1', '5', + 'A', '1', '1', '6', + 'A', '1', '1', '7', + 'A', '1', '1', '8', + 'A', '1', '1', '9', + 'A', '1', '2', '0', + 'A', '1', '2', '1', + 'A', '1', '2', '2', + 'A', '1', '2', '3', + 'A', '1', '2', '4', + 'A', '1', '2', '5', + 'A', '1', '2', '6', + 'A', '1', '2', '7', + 'A', '1', '2', '8', + 'A', '1', '2', '9', + 'A', '1', '3', '0', + 'A', '1', '3', '1', + 'A', '1', '3', '2', + 'A', '1', '3', '3', + 'A', '1', '3', '4', + 'A', '1', '3', '5', + 'A', '1', '3', '6', + 'A', '1', '3', '7', + 'A', '1', '3', '8', + 'A', '1', '3', '9', + 'A', '1', '4', '0', + 'A', '1', '4', '1', + 'A', '1', '4', '2', + 'A', '1', '4', '3', + 'A', '1', '4', '4', + 'A', '1', '4', '5', + 'A', '1', '4', '6', + 'A', '1', '4', '7', + 'A', '1', '4', '8', + 'A', '1', '4', '9', + 'A', '1', '5', '0', + 'A', '1', '5', '1', + 'A', '1', '5', '2', + 'A', '1', '5', '3', + 'A', '1', '5', '4', + 'A', '1', '5', '5', + 'A', '1', '5', '6', + 'A', '1', '5', '7', + 'A', '1', '5', '8', + 'A', '1', '5', '9', + 'A', '1', '6', '0', + 'A', '1', '6', '1', + 'A', '1', '6', '2', + 'A', '1', '6', '3', + 'A', '1', '6', '4', + 'A', '1', '6', '5', + 'A', '1', '6', '6', + 'A', '1', '6', '7', + 'A', '1', '6', '8', + 'A', '1', '6', '9', + 'A', '1', '7', '0', + 'A', '1', '7', '1', + 'A', '1', '7', '2', + 'A', '1', '7', '3', + 'A', '1', '7', '4', + 'A', '1', '7', '5', + 'A', '1', '7', '6', + 'A', '1', '7', '7', + 'A', '1', '7', '8', + 'A', '1', '7', '9', + 'A', '1', '8', '0', + 'A', '1', '8', '1', + 'A', '1', '8', '2', + 'A', '1', '8', '3', + 'A', '1', '8', '4', + 'A', '1', '8', '5', + 'A', '1', '8', '6', + 'A', '1', '8', '7', + 'A', '1', '8', '8', + 'A', '1', '8', '9', + 'A', '1', '9', '0', + 'A', '1', '9', '1', + 'A', '1', '9', '2', + 'A', '1', '9', '3', + 'A', '1', '9', '4', + 'A', '1', '9', '5', + 'A', '1', '9', '6', + 'A', '1', '9', '7', + 'A', '1', '9', '8', + 'A', '1', '9', '9', + 'A', '2', '0', '0', + 'A', '2', '0', '1', + 'A', '2', '0', '2', + 'A', '2', '0', '3', + 'A', '2', '0', '4', + 'A', '2', '0', '5', + 'A', '2', '0', '6', + 'A', '2', '0', '7', + 'A', '2', '0', '8', + 'A', '2', '0', '9', + 'A', '2', '1', '0', + 'A', '2', '1', '1', + 'A', '2', '1', '2', + 'A', '2', '1', '3', + 'A', '2', '1', '4', + 'A', '2', '1', '5', + 'A', '2', '1', '6', + 'A', '2', '1', '7', + 'A', '2', '1', '8', + 'A', '2', '1', '9', + 'A', '2', '2', '0', + 'A', '2', '2', '1', + 'A', '2', '2', '2', + 'A', '2', '2', '3', + 'A', '2', '2', '4', + 'A', '2', '2', '5', + 'A', '2', '2', '6', + 'A', '2', '2', '7', + 'A', '2', '2', '8', + 'A', '2', '2', '9', + 'A', '2', '3', '0', + 'A', '2', '3', '1', + 'A', '2', '3', '2', + 'A', '2', '3', '3', + 'A', '2', '3', '4', + 'A', '2', '3', '5', + 'A', '2', '3', '6', + 'A', '2', '3', '7', + 'A', '2', '3', '8', + 'A', '2', '3', '9', + 'A', '2', '4', '0', + 'A', '2', '4', '1', + 'A', '2', '4', '2', + 'A', '2', '4', '3', + 'A', '2', '4', '4', + 'A', '2', '4', '5', + 'A', '2', '4', '6', + 'A', '2', '4', '7', + 'A', '2', '4', '8', + 'A', '2', '4', '9', + 'A', '2', '5', '0', + 'A', '2', '5', '1', + 'A', '2', '5', '2', + 'A', '2', '5', '3', + 'A', '2', '5', '4', + 'A', '2', '5', '5', + 'A', '2', '5', '6', + 'A', '2', '5', '7', + 'A', '2', '5', '8', + 'A', '2', '5', '9', + 'A', '2', '6', '0', + 'A', '2', '6', '1', + 'A', '2', '6', '2', + 'A', '2', '6', '3', + 'A', '2', '6', '4', + 'A', '2', '6', '5', + 'A', '2', '6', '6', + 'A', '2', '6', '7', + 'A', '2', '6', '8', + 'A', '2', '6', '9', + 'A', '2', '7', '0', + 'A', '2', '7', '1', + 'A', '2', '7', '2', + 'A', '2', '7', '3', + 'A', '2', '7', '4', + 'A', '2', '7', '5', + 'A', '2', '7', '6', + 'A', '2', '7', '7', + 'A', '2', '7', '8', + 'A', '2', '7', '9', + 'A', '2', '8', '0', + 'A', '2', '8', '1', + 'A', '2', '8', '2', + 'A', '2', '8', '3', + 'A', '2', '8', '4', + 'A', '2', '8', '5', + 'A', '2', '8', '6', + 'A', '2', '8', '7', + 'A', '2', '8', '8', + 'A', '2', '8', '9', + 'A', '2', '9', '0', + 'A', '2', '9', '1', + 'A', '2', '9', '2', + 'A', '2', '9', '3', + 'A', '2', '9', '4', + 'A', '2', '9', '5', + 'A', '2', '9', '6', + 'A', '2', '9', '7', + 'A', '2', '9', '8', + 'A', '2', '9', '9', + 'A', '3', '0', '0', + 'A', '3', '0', '1', + 'A', '3', '0', '2', + 'A', '3', '0', '3', + 'A', '3', '0', '4', + 'A', '3', '0', '5', + 'A', '3', '0', '6', + 'A', '3', '0', '7', + 'A', '3', '0', '8', + 'A', '3', '0', '9', + 'A', '3', '1', '0', + 'A', '3', '1', '1', + 'A', '3', '1', '2', + 'A', '3', '1', '3', + 'A', '3', '1', '4', + 'A', '3', '1', '5', + 'A', '3', '1', '6', + 'A', '3', '1', '7', + 'A', '3', '1', '8', + 'A', '3', '1', '9', + 'A', '3', '2', '0', + 'A', '3', '2', '1', + 'A', '3', '2', '2', + 'A', '3', '2', '3', + 'A', '3', '2', '4', + 'A', '3', '2', '5', + 'A', '3', '2', '6', + 'A', '3', '2', '7', + 'A', '3', '2', '8', + 'A', '3', '2', '9', + 'A', '3', '3', '0', + 'A', '3', '3', '1', + 'A', '3', '3', '2', + 'A', '3', '3', '3', + 'A', '3', '3', '4', + 'A', '3', '3', '5', + 'A', '3', '3', '6', + 'A', '3', '3', '7', + 'A', '3', '3', '8', + 'A', '3', '3', '9', + 'A', '3', '4', '0', + 'A', '3', '4', '1', + 'A', '3', '4', '2', + 'A', '3', '4', '3', + 'A', '3', '4', '4', + 'A', '3', '4', '5', + 'A', '3', '4', '6', + 'A', '3', '4', '7', + 'A', '3', '4', '8', + 'A', '3', '4', '9', + 'A', '3', '5', '0', + 'A', '3', '5', '1', + 'A', '3', '5', '2', + 'A', '3', '5', '3', + 'A', '3', '5', '4', + 'A', '3', '5', '5', + 'A', '3', '5', '6', + 'A', '3', '5', '7', + 'A', '3', '5', '8', + 'A', '3', '5', '9', + 'A', '3', '6', '0', + 'A', '3', '6', '1', + 'A', '3', '6', '2', + 'A', '3', '6', '3', + 'A', '3', '6', '4', + 'A', '3', '6', '5', + 'A', '3', '6', '6', + 'A', '3', '6', '7', + 'A', '3', '6', '8', + 'A', '3', '6', '9', + 'A', '3', '7', '0', + 'A', '3', '7', '1', + 'A', '3', '7', '2', + 'A', '3', '7', '3', + 'A', '3', '7', '4', + 'A', '3', '7', '5', + 'A', '3', '7', '6', + 'A', '3', '7', '7', + 'A', '3', '7', '8', + 'A', '3', '7', '9', + 'A', '3', '8', '0', + 'A', '3', '8', '1', + 'A', '3', '8', '2', + 'A', '3', '8', '3', + 'A', '3', '8', '4', + 'A', '3', '8', '5', + 'A', '3', '8', '6', + 'A', '3', '8', '7', + 'A', '3', '8', '8', + 'A', '3', '8', '9', + 'A', '3', '9', '0', + 'A', '3', '9', '1', + 'A', '3', '9', '2', + 'A', '3', '9', '3', + 'A', '3', '9', '4', + 'A', '3', '9', '5', + 'A', '3', '9', '6', + 'A', '3', '9', '7', + 'A', '3', '9', '8', + 'A', '3', '9', '9', + 'A', '4', '0', '0', + 'A', '4', '0', '1', + 'A', '4', '0', '2', + 'A', '4', '0', '3', + 'A', '4', '0', '4', + 'A', '4', '0', '5', + 'A', '4', '0', '6', + 'A', '4', '0', '7', + 'A', '4', '0', '8', + 'A', '4', '0', '9', + 'A', '4', '1', '0', + 'A', '4', '1', '1', + 'A', '4', '1', '2', + 'A', '4', '1', '3', + 'A', '4', '1', '4', + 'A', '4', '1', '5', + 'A', '4', '1', '6', + 'A', '4', '1', '7', + 'A', '4', '1', '8', + 'A', '4', '1', '9', + 'A', '4', '2', '0', + 'A', '4', '2', '1', + 'A', '4', '2', '2', + 'A', '4', '2', '3', + 'A', '4', '2', '4', + 'A', '4', '2', '5', + 'A', '4', '2', '6', + 'A', '4', '2', '7', + 'A', '4', '2', '8', + 'A', '4', '2', '9', + 'A', '4', '3', '0', + 'A', '4', '3', '1', + 'A', '4', '3', '2', + 'A', '4', '3', '3', + 'A', '4', '3', '4', + 'A', '4', '3', '5', + 'A', '4', '3', '6', + 'A', '4', '3', '7', + 'A', '4', '3', '8', + 'A', '4', '3', '9', + 'A', '4', '4', '0', + 'A', '4', '4', '1', + 'A', '4', '4', '2', + 'A', '4', '4', '3', + 'A', '4', '4', '4', + 'A', '4', '4', '5', + 'A', '4', '4', '6', + 'A', '4', '4', '7', + 'A', '4', '4', '8', + 'A', '4', '4', '9', + 'A', '4', '5', '0', + 'A', '4', '5', '1', + 'A', '4', '5', '2', + 'A', '4', '5', '3', + 'A', '4', '5', '4', + 'A', '4', '5', '5', + 'A', '4', '5', '6', + 'A', '4', '5', '7', + 'A', '4', '5', '8', + 'A', '4', '5', '9', + 'A', '4', '6', '0', + 'A', '4', '6', '1', + 'A', '4', '6', '2', + 'A', '4', '6', '3', + 'A', '4', '6', '4', + 'A', '4', '6', '5', + 'A', '4', '6', '6', + 'A', '4', '6', '7', + 'A', '4', '6', '8', + 'A', '4', '6', '9', + 'A', '4', '7', '0', + 'A', '4', '7', '1', + 'A', '4', '7', '2', + 'A', '4', '7', '3', + 'A', '4', '7', '4', + 'A', '4', '7', '5', + 'A', '4', '7', '6', + 'A', '4', '7', '7', + 'A', '4', '7', '8', + 'A', '4', '7', '9', + 'A', '4', '8', '0', + 'A', '4', '8', '1', + 'A', '4', '8', '2', + 'A', '4', '8', '3', + 'A', '4', '8', '4', + 'A', '4', '8', '5', + 'A', '4', '8', '6', + 'A', '4', '8', '7', + 'A', '4', '8', '8', + 'A', '4', '8', '9', + 'A', '4', '9', '0', + 'A', '4', '9', '1', + 'A', '4', '9', '2', + 'A', '4', '9', '3', + 'A', '4', '9', '4', + 'A', '4', '9', '5', + 'A', '4', '9', '6', + 'A', '4', '9', '7', + 'A', '5', '0', '1', + 'A', '5', '0', '2', + 'A', '5', '0', '3', + 'A', '5', '0', '4', + 'A', '5', '0', '5', + 'A', '5', '0', '6', + 'A', '5', '0', '7', + 'A', '5', '0', '8', + 'A', '5', '0', '9', + 'A', '5', '1', '0', + 'A', '5', '1', '1', + 'A', '5', '1', '2', + 'A', '5', '1', '3', + 'A', '5', '1', '4', + 'A', '5', '1', '5', + 'A', '5', '1', '6', + 'A', '5', '1', '7', + 'A', '5', '1', '8', + 'A', '5', '1', '9', + 'A', '5', '2', '0', + 'A', '5', '2', '1', + 'A', '5', '2', '2', + 'A', '5', '2', '3', + 'A', '5', '2', '4', + 'A', '5', '2', '5', + 'A', '5', '2', '6', + 'A', '5', '2', '7', + 'A', '5', '2', '8', + 'A', '5', '2', '9', + 'A', '5', '3', '0', + 'A', '5', '3', '1', + 'A', '5', '3', '2', + 'A', '5', '3', '4', + 'A', '5', '3', '5', + 'A', '5', '3', '6', + 'A', '5', '3', '7', + 'A', '5', '3', '8', + 'A', '5', '3', '9', + 'A', '5', '4', '0', + 'A', '5', '4', '1', + 'A', '5', '4', '2', + 'A', '5', '4', '5', + 'A', '5', '4', '7', + 'A', '5', '4', '8', + 'A', '5', '4', '9', + 'A', '5', '5', '0', + 'A', '5', '5', '1', + 'A', '5', '5', '2', + 'A', '5', '5', '3', + 'A', '5', '5', '4', + 'A', '5', '5', '5', + 'A', '5', '5', '6', + 'A', '5', '5', '7', + 'A', '5', '5', '9', + 'A', '5', '6', '3', + 'A', '5', '6', '4', + 'A', '5', '6', '5', + 'A', '5', '6', '6', + 'A', '5', '6', '8', + 'A', '5', '6', '9', + 'A', '5', '7', '0', + 'A', '5', '7', '1', + 'A', '5', '7', '2', + 'A', '5', '7', '3', + 'A', '5', '7', '4', + 'A', '5', '7', '5', + 'A', '5', '7', '6', + 'A', '5', '7', '7', + 'A', '5', '7', '8', + 'A', '5', '7', '9', + 'A', '5', '8', '0', + 'A', '5', '8', '1', + 'A', '5', '8', '2', + 'A', '5', '8', '3', + 'A', '5', '8', '4', + 'A', '5', '8', '5', + 'A', '5', '8', '6', + 'A', '5', '8', '7', + 'A', '5', '8', '8', + 'A', '5', '8', '9', + 'A', '5', '9', '1', + 'A', '5', '9', '2', + 'A', '5', '9', '4', + 'A', '5', '9', '5', + 'A', '5', '9', '6', + 'A', '5', '9', '8', + 'A', '6', '0', '0', + 'A', '6', '0', '1', + 'A', '6', '0', '2', + 'A', '6', '0', '3', + 'A', '6', '0', '4', + 'A', '6', '0', '6', + 'A', '6', '0', '8', + 'A', '6', '0', '9', + 'A', '6', '1', '0', + 'A', '6', '1', '1', + 'A', '6', '1', '2', + 'A', '6', '1', '3', + 'A', '6', '1', '4', + 'A', '6', '1', '5', + 'A', '6', '1', '6', + 'A', '6', '1', '7', + 'A', '6', '1', '8', + 'A', '6', '1', '9', + 'A', '6', '2', '0', + 'A', '6', '2', '1', + 'A', '6', '2', '2', + 'A', '6', '2', '3', + 'A', '6', '2', '4', + 'A', '6', '2', '6', + 'A', '6', '2', '7', + 'A', '6', '2', '8', + 'A', '6', '2', '9', + 'A', '6', '3', '4', + 'A', '6', '3', '7', + 'A', '6', '3', '8', + 'A', '6', '4', '0', + 'A', '6', '4', '2', + 'A', '6', '4', '3', + 'A', '6', '4', '4', + 'A', '6', '4', '5', + 'A', '6', '4', '6', + 'A', '6', '4', '8', + 'A', '6', '4', '9', + 'A', '6', '5', '1', + 'A', '6', '5', '2', + 'A', '6', '5', '3', + 'A', '6', '5', '4', + 'A', '6', '5', '5', + 'A', '6', '5', '6', + 'A', '6', '5', '7', + 'A', '6', '5', '8', + 'A', '6', '5', '9', + 'A', '6', '6', '0', + 'A', '6', '6', '1', + 'A', '6', '6', '2', + 'A', '6', '6', '3', + 'A', '6', '6', '4', + 'A', '7', '0', '1', + 'A', '7', '0', '2', + 'A', '7', '0', '3', + 'A', '7', '0', '4', + 'A', '7', '0', '5', + 'A', '7', '0', '6', + 'A', '7', '0', '7', + 'A', '7', '0', '8', + 'A', '7', '0', '9', + 'A', '7', '1', '0', + 'A', '7', '1', '1', + 'A', '7', '1', '2', + 'A', '7', '1', '3', + 'A', '7', '1', '4', + 'A', '7', '1', '5', + 'A', '7', '1', '7', + 'A', '7', '2', '6', + 'A', '7', '3', '2', + 'A', '8', '0', '0', + 'A', '8', '0', '1', + 'A', '8', '0', '2', + 'A', '8', '0', '3', + 'A', '8', '0', '4', + 'A', '8', '0', '5', + 'A', '8', '0', '6', + 'A', '8', '0', '7', + 'A', 'A', 'N', 'G', + 'A', 'A', 'R', 'U', + 'A', 'D', 'A', 'K', + 'A', 'D', 'E', 'G', + 'A', 'E', 'N', 'G', + 'A', 'E', 'S', 'C', + 'A', 'H', 'A', 'D', + 'A', 'H', 'O', 'M', + 'A', 'H', 'S', 'A', + 'A', 'I', 'L', 'M', + 'A', 'I', 'N', 'N', + 'A', 'I', 'N', 'U', + 'A', 'I', 'V', 'A', + 'A', 'K', 'S', 'A', + 'A', 'L', 'A', 'F', + 'A', 'L', 'A', 'N', + 'A', 'L', 'E', 'F', + 'A', 'L', 'F', 'A', + 'A', 'L', 'I', 'F', + 'A', 'L', 'L', 'I', + 'A', 'L', 'L', 'O', + 'A', 'L', 'P', 'A', + 'A', 'L', 'T', 'A', + 'A', 'L', 'U', 'M', + 'A', 'M', 'A', 'R', + 'A', 'M', 'B', 'A', + 'A', 'M', 'P', 'S', + 'A', 'N', 'A', 'P', + 'A', 'N', 'H', 'U', + 'A', 'N', 'J', 'I', + 'A', 'N', 'K', 'H', + 'A', 'P', 'I', 'N', + 'A', 'P', 'L', 'I', + 'A', 'P', 'U', 'N', + 'A', 'Q', 'U', 'A', + 'A', 'R', 'A', 'D', + 'A', 'R', 'C', 'H', + 'A', 'R', 'G', 'I', + 'A', 'R', 'M', 'S', + 'A', 'R', 'M', 'Y', + 'A', 'R', 'T', 'A', + 'A', 'R', 'T', 'S', + 'A', 'S', 'A', 'T', + 'A', 'S', 'H', '2', + 'A', 'S', 'H', '3', + 'A', 'S', 'H', '9', + 'A', 'T', 'I', 'U', + 'A', 'T', 'O', 'M', + 'A', 'U', 'N', 'N', + 'A', 'U', 'T', 'O', + 'A', 'W', 'A', 'Y', + 'A', 'Y', 'A', 'H', + 'A', 'Y', 'E', 'R', + 'A', 'Y', 'I', 'N', + 'A', 'Z', 'Z', 'A', + 'B', '0', '0', '1', + 'B', '0', '0', '2', + 'B', '0', '0', '3', + 'B', '0', '0', '4', + 'B', '0', '0', '5', + 'B', '0', '0', '6', + 'B', '0', '0', '7', + 'B', '0', '0', '8', + 'B', '0', '0', '9', + 'B', '0', '1', '0', + 'B', '0', '1', '1', + 'B', '0', '1', '2', + 'B', '0', '1', '3', + 'B', '0', '1', '4', + 'B', '0', '1', '5', + 'B', '0', '1', '6', + 'B', '0', '1', '7', + 'B', '0', '1', '8', + 'B', '0', '1', '9', + 'B', '0', '2', '0', + 'B', '0', '2', '1', + 'B', '0', '2', '2', + 'B', '0', '2', '3', + 'B', '0', '2', '4', + 'B', '0', '2', '5', + 'B', '0', '2', '6', + 'B', '0', '2', '7', + 'B', '0', '2', '8', + 'B', '0', '2', '9', + 'B', '0', '3', '0', + 'B', '0', '3', '1', + 'B', '0', '3', '2', + 'B', '0', '3', '3', + 'B', '0', '3', '4', + 'B', '0', '3', '6', + 'B', '0', '3', '7', + 'B', '0', '3', '8', + 'B', '0', '3', '9', + 'B', '0', '4', '0', + 'B', '0', '4', '1', + 'B', '0', '4', '2', + 'B', '0', '4', '3', + 'B', '0', '4', '4', + 'B', '0', '4', '5', + 'B', '0', '4', '6', + 'B', '0', '4', '7', + 'B', '0', '4', '8', + 'B', '0', '4', '9', + 'B', '0', '5', '0', + 'B', '0', '5', '1', + 'B', '0', '5', '2', + 'B', '0', '5', '3', + 'B', '0', '5', '4', + 'B', '0', '5', '5', + 'B', '0', '5', '6', + 'B', '0', '5', '7', + 'B', '0', '5', '8', + 'B', '0', '5', '9', + 'B', '0', '6', '0', + 'B', '0', '6', '1', + 'B', '0', '6', '2', + 'B', '0', '6', '3', + 'B', '0', '6', '4', + 'B', '0', '6', '5', + 'B', '0', '6', '6', + 'B', '0', '6', '7', + 'B', '0', '6', '8', + 'B', '0', '6', '9', + 'B', '0', '7', '0', + 'B', '0', '7', '1', + 'B', '0', '7', '2', + 'B', '0', '7', '3', + 'B', '0', '7', '4', + 'B', '0', '7', '5', + 'B', '0', '7', '6', + 'B', '0', '7', '7', + 'B', '0', '7', '8', + 'B', '0', '7', '9', + 'B', '0', '8', '0', + 'B', '0', '8', '1', + 'B', '0', '8', '2', + 'B', '0', '8', '3', + 'B', '0', '8', '5', + 'B', '0', '8', '6', + 'B', '0', '8', '7', + 'B', '0', '8', '9', + 'B', '0', '9', '0', + 'B', '0', '9', '1', + 'B', '1', '0', '0', + 'B', '1', '0', '2', + 'B', '1', '0', '4', + 'B', '1', '0', '5', + 'B', '1', '2', '0', + 'B', '1', '2', '1', + 'B', '1', '2', '2', + 'B', '1', '2', '3', + 'B', '1', '2', '5', + 'B', '1', '2', '7', + 'B', '1', '2', '8', + 'B', '1', '3', '0', + 'B', '1', '3', '1', + 'B', '1', '3', '2', + 'B', '1', '3', '3', + 'B', '1', '3', '5', + 'B', '1', '4', '0', + 'B', '1', '4', '1', + 'B', '1', '4', '2', + 'B', '1', '4', '5', + 'B', '1', '4', '6', + 'B', '1', '5', '0', + 'B', '1', '5', '1', + 'B', '1', '5', '2', + 'B', '1', '5', '3', + 'B', '1', '5', '4', + 'B', '1', '5', '5', + 'B', '1', '5', '6', + 'B', '1', '5', '7', + 'B', '1', '5', '8', + 'B', '1', '5', '9', + 'B', '1', '6', '0', + 'B', '1', '6', '1', + 'B', '1', '6', '2', + 'B', '1', '6', '3', + 'B', '1', '6', '4', + 'B', '1', '6', '5', + 'B', '1', '6', '6', + 'B', '1', '6', '7', + 'B', '1', '6', '8', + 'B', '1', '6', '9', + 'B', '1', '7', '0', + 'B', '1', '7', '1', + 'B', '1', '7', '2', + 'B', '1', '7', '3', + 'B', '1', '7', '4', + 'B', '1', '7', '6', + 'B', '1', '7', '7', + 'B', '1', '7', '8', + 'B', '1', '7', '9', + 'B', '1', '8', '0', + 'B', '1', '8', '1', + 'B', '1', '8', '2', + 'B', '1', '8', '3', + 'B', '1', '8', '4', + 'B', '1', '8', '5', + 'B', '1', '8', '9', + 'B', '1', '9', '0', + 'B', '1', '9', '1', + 'B', '2', '0', '0', + 'B', '2', '0', '1', + 'B', '2', '0', '2', + 'B', '2', '0', '3', + 'B', '2', '0', '4', + 'B', '2', '0', '5', + 'B', '2', '0', '6', + 'B', '2', '0', '7', + 'B', '2', '0', '8', + 'B', '2', '0', '9', + 'B', '2', '1', '0', + 'B', '2', '1', '1', + 'B', '2', '1', '2', + 'B', '2', '1', '3', + 'B', '2', '1', '4', + 'B', '2', '1', '5', + 'B', '2', '1', '6', + 'B', '2', '1', '7', + 'B', '2', '1', '8', + 'B', '2', '1', '9', + 'B', '2', '2', '0', + 'B', '2', '2', '1', + 'B', '2', '2', '2', + 'B', '2', '2', '5', + 'B', '2', '2', '6', + 'B', '2', '2', '7', + 'B', '2', '2', '8', + 'B', '2', '2', '9', + 'B', '2', '3', '0', + 'B', '2', '3', '1', + 'B', '2', '3', '2', + 'B', '2', '3', '3', + 'B', '2', '3', '4', + 'B', '2', '3', '6', + 'B', '2', '4', '0', + 'B', '2', '4', '1', + 'B', '2', '4', '2', + 'B', '2', '4', '3', + 'B', '2', '4', '5', + 'B', '2', '4', '6', + 'B', '2', '4', '7', + 'B', '2', '4', '8', + 'B', '2', '4', '9', + 'B', '2', '5', '0', + 'B', '2', '5', '1', + 'B', '2', '5', '2', + 'B', '2', '5', '3', + 'B', '2', '5', '4', + 'B', '2', '5', '5', + 'B', '2', '5', '6', + 'B', '2', '5', '7', + 'B', '2', '5', '8', + 'B', '2', '5', '9', + 'B', '3', '0', '5', + 'B', 'A', '-', '2', + 'B', 'A', 'B', 'Y', + 'B', 'A', 'C', 'K', + 'B', 'A', 'G', '3', + 'B', 'A', 'G', 'A', + 'B', 'A', 'G', 'S', + 'B', 'A', 'H', 'T', + 'B', 'A', 'L', 'D', + 'B', 'A', 'L', 'L', + 'B', 'A', 'N', '2', + 'B', 'A', 'N', 'D', + 'B', 'A', 'N', 'G', + 'B', 'A', 'N', 'K', + 'B', 'A', 'R', 'B', + 'B', 'A', 'R', 'S', + 'B', 'A', 'S', 'E', + 'B', 'A', 'S', 'H', + 'B', 'A', 'T', 'H', + 'B', 'B', 'A', 'A', + 'B', 'B', 'A', 'P', + 'B', 'B', 'A', 'T', + 'B', 'B', 'A', 'X', + 'B', 'B', 'E', 'E', + 'B', 'B', 'E', 'P', + 'B', 'B', 'E', 'X', + 'B', 'B', 'I', 'E', + 'B', 'B', 'I', 'P', + 'B', 'B', 'I', 'T', + 'B', 'B', 'I', 'X', + 'B', 'B', 'O', 'P', + 'B', 'B', 'O', 'T', + 'B', 'B', 'O', 'X', + 'B', 'B', 'U', 'O', + 'B', 'B', 'U', 'P', + 'B', 'B', 'U', 'R', + 'B', 'B', 'U', 'T', + 'B', 'B', 'U', 'X', + 'B', 'B', 'Y', 'P', + 'B', 'B', 'Y', 'T', + 'B', 'B', 'Y', 'X', + 'B', 'C', 'A', 'D', + 'B', 'E', 'A', 'M', + 'B', 'E', 'A', 'N', + 'B', 'E', 'A', 'R', + 'B', 'E', 'A', 'T', + 'B', 'E', 'E', 'H', + 'B', 'E', 'E', 'R', + 'B', 'E', 'L', 'L', + 'B', 'E', 'L', 'T', + 'B', 'E', 'N', 'D', + 'B', 'E', 'N', 'T', + 'B', 'E', 'T', 'A', + 'B', 'E', 'T', 'H', + 'B', 'H', 'A', 'A', + 'B', 'H', 'A', 'M', + 'B', 'H', 'E', 'E', + 'B', 'H', 'O', 'O', + 'B', 'I', 'E', 'P', + 'B', 'I', 'E', 'T', + 'B', 'I', 'E', 'X', + 'B', 'I', 'R', 'D', + 'B', 'I', 'R', 'U', + 'B', 'I', 'T', 'E', + 'B', 'K', 'A', '-', + 'B', 'L', 'O', 'W', + 'B', 'L', 'U', 'E', + 'B', 'O', 'A', 'R', + 'B', 'O', 'A', 'T', + 'B', 'O', 'D', 'Y', + 'B', 'O', 'L', 'D', + 'B', 'O', 'L', 'T', + 'B', 'O', 'M', 'B', + 'B', 'O', 'N', 'E', + 'B', 'O', 'O', 'K', + 'B', 'O', 'O', 'T', + 'B', 'O', 'T', 'H', + 'B', 'O', 'W', 'L', + 'B', 'O', 'Y', 'S', + 'B', 'R', 'D', 'A', + 'B', 'U', 'K', 'Y', + 'B', 'U', 'L', 'B', + 'B', 'U', 'L', 'L', + 'B', 'U', 'N', 'G', + 'B', 'U', 'O', 'N', + 'B', 'U', 'O', 'P', + 'B', 'U', 'O', 'X', + 'B', 'U', 'O', 'Y', + 'B', 'U', 'R', '2', + 'B', 'U', 'R', 'U', + 'B', 'U', 'R', 'X', + 'B', 'U', 'S', 'T', + 'B', 'W', 'E', 'E', + 'B', 'Y', 'R', 'X', + 'B', 'Y', 'T', 'E', + 'B', 'Z', 'H', 'I', + 'C', '-', '1', '8', + 'C', '-', '3', '9', + 'C', '0', '0', '1', + 'C', '0', '0', '2', + 'C', '0', '0', '3', + 'C', '0', '0', '4', + 'C', '0', '0', '5', + 'C', '0', '0', '6', + 'C', '0', '0', '7', + 'C', '0', '0', '8', + 'C', '0', '0', '9', + 'C', '0', '1', '0', + 'C', '0', '1', '1', + 'C', '0', '1', '2', + 'C', '0', '1', '3', + 'C', '0', '1', '4', + 'C', '0', '1', '5', + 'C', '0', '1', '6', + 'C', '0', '1', '7', + 'C', '0', '1', '8', + 'C', '0', '1', '9', + 'C', '0', '2', '0', + 'C', '0', '2', '1', + 'C', '0', '2', '2', + 'C', '0', '2', '3', + 'C', '0', '2', '4', + 'C', 'A', 'A', 'I', + 'C', 'A', 'D', 'A', + 'C', 'A', 'K', 'E', + 'C', 'A', 'L', 'C', + 'C', 'A', 'L', 'L', + 'C', 'A', 'L', 'X', + 'C', 'A', 'N', 'E', + 'C', 'A', 'N', 'G', + 'C', 'A', 'P', 'O', + 'C', 'A', 'R', 'D', + 'C', 'A', 'R', 'E', + 'C', 'A', 'R', 'P', + 'C', 'A', 'R', 'S', + 'C', 'A', 'R', 'T', + 'C', 'A', 'V', 'E', + 'C', 'A', 'Y', 'N', + 'C', 'C', 'A', 'A', + 'C', 'C', 'E', 'E', + 'C', 'C', 'H', 'A', + 'C', 'C', 'H', 'E', + 'C', 'C', 'H', 'I', + 'C', 'C', 'H', 'O', + 'C', 'C', 'H', 'U', + 'C', 'E', 'D', 'I', + 'C', 'E', 'E', 'B', + 'C', 'E', 'E', 'V', + 'C', 'E', 'N', 'T', + 'C', 'H', 'A', 'A', + 'C', 'H', 'A', 'D', + 'C', 'H', 'A', 'M', + 'C', 'H', 'A', 'N', + 'C', 'H', 'A', 'P', + 'C', 'H', 'A', 'R', + 'C', 'H', 'A', 'T', + 'C', 'H', 'A', 'U', + 'C', 'H', 'A', 'X', + 'C', 'H', 'E', 'E', + 'C', 'H', 'E', 'H', + 'C', 'H', 'E', 'N', + 'C', 'H', 'E', 'P', + 'C', 'H', 'E', 'T', + 'C', 'H', 'E', 'X', + 'C', 'H', 'H', 'A', + 'C', 'H', 'I', 'L', + 'C', 'H', 'I', 'M', + 'C', 'H', 'I', 'N', + 'C', 'H', 'O', 'A', + 'C', 'H', 'O', 'E', + 'C', 'H', 'O', 'P', + 'C', 'H', 'O', 'T', + 'C', 'H', 'O', 'X', + 'C', 'H', 'O', 'Y', + 'C', 'H', 'U', 'O', + 'C', 'H', 'U', 'P', + 'C', 'H', 'U', 'R', + 'C', 'H', 'U', 'X', + 'C', 'H', 'W', 'A', + 'C', 'H', 'W', 'V', + 'C', 'H', 'Y', 'P', + 'C', 'H', 'Y', 'R', + 'C', 'H', 'Y', 'T', + 'C', 'H', 'Y', 'X', + 'C', 'I', 'E', 'P', + 'C', 'I', 'E', 'T', + 'C', 'I', 'E', 'X', + 'C', 'I', 'T', 'I', + 'C', 'I', 'T', 'Y', + 'C', 'L', 'A', 'N', + 'C', 'L', 'A', 'W', + 'C', 'L', 'E', 'F', + 'C', 'L', 'U', 'B', + 'C', 'O', 'A', 'T', + 'C', 'O', 'D', 'A', + 'C', 'O', 'I', 'N', + 'C', 'O', 'L', 'D', + 'C', 'O', 'L', 'L', + 'C', 'O', 'M', 'B', + 'C', 'O', 'O', 'L', + 'C', 'O', 'P', 'Y', + 'C', 'O', 'R', 'K', + 'C', 'R', 'A', 'B', + 'C', 'R', 'O', 'P', + 'C', 'U', 'A', 'M', + 'C', 'U', 'B', 'E', + 'C', 'U', 'O', 'P', + 'C', 'U', 'O', 'X', + 'C', 'U', 'R', 'L', + 'C', 'U', 'R', 'X', + 'C', 'U', 'S', 'P', + 'C', 'W', 'A', 'A', + 'C', 'W', 'I', 'I', + 'C', 'W', 'O', 'O', + 'C', 'Y', 'A', 'W', + 'C', 'Y', 'A', 'Y', + 'C', 'Y', 'R', 'X', + 'D', '0', '0', '1', + 'D', '0', '0', '2', + 'D', '0', '0', '3', + 'D', '0', '0', '4', + 'D', '0', '0', '5', + 'D', '0', '0', '6', + 'D', '0', '0', '7', + 'D', '0', '0', '8', + 'D', '0', '0', '9', + 'D', '0', '1', '0', + 'D', '0', '1', '1', + 'D', '0', '1', '2', + 'D', '0', '1', '3', + 'D', '0', '1', '4', + 'D', '0', '1', '5', + 'D', '0', '1', '6', + 'D', '0', '1', '7', + 'D', '0', '1', '8', + 'D', '0', '1', '9', + 'D', '0', '2', '0', + 'D', '0', '2', '1', + 'D', '0', '2', '2', + 'D', '0', '2', '3', + 'D', '0', '2', '4', + 'D', '0', '2', '5', + 'D', '0', '2', '6', + 'D', '0', '2', '7', + 'D', '0', '2', '8', + 'D', '0', '2', '9', + 'D', '0', '3', '0', + 'D', '0', '3', '1', + 'D', '0', '3', '2', + 'D', '0', '3', '3', + 'D', '0', '3', '4', + 'D', '0', '3', '5', + 'D', '0', '3', '6', + 'D', '0', '3', '7', + 'D', '0', '3', '8', + 'D', '0', '3', '9', + 'D', '0', '4', '0', + 'D', '0', '4', '1', + 'D', '0', '4', '2', + 'D', '0', '4', '3', + 'D', '0', '4', '4', + 'D', '0', '4', '5', + 'D', '0', '4', '6', + 'D', '0', '4', '7', + 'D', '0', '4', '8', + 'D', '0', '4', '9', + 'D', '0', '5', '0', + 'D', '0', '5', '1', + 'D', '0', '5', '2', + 'D', '0', '5', '3', + 'D', '0', '5', '4', + 'D', '0', '5', '5', + 'D', '0', '5', '6', + 'D', '0', '5', '7', + 'D', '0', '5', '8', + 'D', '0', '5', '9', + 'D', '0', '6', '0', + 'D', '0', '6', '1', + 'D', '0', '6', '2', + 'D', '0', '6', '3', + 'D', '0', '6', '4', + 'D', '0', '6', '5', + 'D', '0', '6', '6', + 'D', '0', '6', '7', + 'D', 'A', 'E', 'G', + 'D', 'A', 'G', '3', + 'D', 'A', 'G', 'S', + 'D', 'A', 'I', 'R', + 'D', 'A', 'M', 'P', + 'D', 'A', 'N', 'G', + 'D', 'A', 'R', 'K', + 'D', 'A', 'R', 'T', + 'D', 'A', 'S', 'H', + 'D', 'A', 'T', 'A', + 'D', 'A', 'T', 'E', + 'D', 'A', 'W', 'B', + 'D', 'C', 'H', 'E', + 'D', 'D', 'A', 'A', + 'D', 'D', 'A', 'L', + 'D', 'D', 'A', 'P', + 'D', 'D', 'A', 'T', + 'D', 'D', 'A', 'X', + 'D', 'D', 'D', 'A', + 'D', 'D', 'E', 'E', + 'D', 'D', 'E', 'P', + 'D', 'D', 'E', 'X', + 'D', 'D', 'H', 'A', + 'D', 'D', 'H', 'E', + 'D', 'D', 'H', 'I', + 'D', 'D', 'H', 'O', + 'D', 'D', 'H', 'U', + 'D', 'D', 'I', 'E', + 'D', 'D', 'I', 'P', + 'D', 'D', 'I', 'T', + 'D', 'D', 'I', 'X', + 'D', 'D', 'O', 'A', + 'D', 'D', 'O', 'P', + 'D', 'D', 'O', 'T', + 'D', 'D', 'O', 'X', + 'D', 'D', 'U', 'O', + 'D', 'D', 'U', 'P', + 'D', 'D', 'U', 'R', + 'D', 'D', 'U', 'T', + 'D', 'D', 'U', 'X', + 'D', 'D', 'W', 'A', + 'D', 'E', 'A', 'D', + 'D', 'E', 'A', 'F', + 'D', 'E', 'E', 'L', + 'D', 'E', 'E', 'R', + 'D', 'E', 'H', 'I', + 'D', 'E', 'K', 'A', + 'D', 'E', 'L', 'T', + 'D', 'E', 'N', 'E', + 'D', 'E', 'N', 'G', + 'D', 'E', 'S', 'I', + 'D', 'E', 'S', 'K', + 'D', 'E', 'V', 'I', + 'D', 'E', 'Z', 'H', + 'D', 'H', 'A', 'A', + 'D', 'H', 'A', 'L', + 'D', 'H', 'E', 'E', + 'D', 'H', 'H', 'A', + 'D', 'H', 'H', 'E', + 'D', 'H', 'H', 'I', + 'D', 'H', 'H', 'O', + 'D', 'H', 'H', 'U', + 'D', 'H', 'I', 'I', + 'D', 'H', 'O', 'O', + 'D', 'H', 'O', 'U', + 'D', 'I', 'E', 'P', + 'D', 'I', 'E', 'X', + 'D', 'I', 'G', 'A', + 'D', 'I', 'M', '2', + 'D', 'I', 'N', 'G', + 'D', 'I', 'S', 'C', + 'D', 'I', 'S', 'H', + 'D', 'I', 'S', 'K', + 'D', 'I', 'Y', 'A', + 'D', 'K', 'A', 'R', + 'D', 'L', 'E', 'E', + 'D', 'L', 'H', 'A', + 'D', 'O', '-', 'O', + 'D', 'O', 'D', 'O', + 'D', 'O', 'E', 'S', + 'D', 'O', 'I', 'T', + 'D', 'O', 'N', 'G', + 'D', 'O', 'O', 'R', + 'D', 'O', 'R', 'U', + 'D', 'O', 'T', 'S', + 'D', 'O', 'V', 'E', + 'D', 'O', 'W', 'N', + 'D', 'R', 'A', 'M', + 'D', 'R', 'I', 'L', + 'D', 'R', 'O', 'P', + 'D', 'R', 'U', 'M', + 'D', 'U', 'B', '2', + 'D', 'U', 'C', 'K', + 'D', 'U', 'D', 'A', + 'D', 'U', 'N', '3', + 'D', 'U', 'N', '4', + 'D', 'U', 'N', 'G', + 'D', 'U', 'O', 'X', + 'D', 'U', 'R', '2', + 'D', 'U', 'R', 'X', + 'D', 'U', 'S', 'K', + 'D', 'Y', 'A', 'N', + 'D', 'Y', 'E', 'H', + 'D', 'Z', 'A', 'A', + 'D', 'Z', 'A', 'Y', + 'D', 'Z', 'E', 'E', + 'D', 'Z', 'H', 'A', + 'D', 'Z', 'H', 'E', + 'D', 'Z', 'J', 'E', + 'D', 'Z', 'W', 'E', + 'D', 'Z', 'Y', 'I', + 'D', 'Z', 'Z', 'A', + 'D', 'Z', 'Z', 'E', + 'E', '0', '0', '1', + 'E', '0', '0', '2', + 'E', '0', '0', '3', + 'E', '0', '0', '4', + 'E', '0', '0', '5', + 'E', '0', '0', '6', + 'E', '0', '0', '7', + 'E', '0', '0', '8', + 'E', '0', '0', '9', + 'E', '0', '1', '0', + 'E', '0', '1', '1', + 'E', '0', '1', '2', + 'E', '0', '1', '3', + 'E', '0', '1', '4', + 'E', '0', '1', '5', + 'E', '0', '1', '6', + 'E', '0', '1', '7', + 'E', '0', '1', '8', + 'E', '0', '1', '9', + 'E', '0', '2', '0', + 'E', '0', '2', '1', + 'E', '0', '2', '2', + 'E', '0', '2', '3', + 'E', '0', '2', '4', + 'E', '0', '2', '5', + 'E', '0', '2', '6', + 'E', '0', '2', '7', + 'E', '0', '2', '8', + 'E', '0', '2', '9', + 'E', '0', '3', '0', + 'E', '0', '3', '1', + 'E', '0', '3', '2', + 'E', '0', '3', '3', + 'E', '0', '3', '4', + 'E', '0', '3', '6', + 'E', '0', '3', '7', + 'E', '0', '3', '8', + 'E', 'A', 'R', 'S', + 'E', 'A', 'S', 'E', + 'E', 'A', 'S', 'T', + 'E', 'D', 'I', 'N', + 'E', 'G', 'G', 'S', + 'E', 'G', 'I', 'R', + 'E', 'H', 'K', 'A', + 'E', 'H', 'P', 'A', + 'E', 'H', 'T', 'A', + 'E', 'K', 'A', 'M', + 'E', 'L', 'I', 'F', + 'E', 'N', 'N', 'I', + 'E', 'N', 'O', 'S', + 'E', 'O', '-', 'O', + 'E', 'O', '-', 'U', + 'E', 'R', 'E', 'N', + 'E', 'R', 'I', 'S', + 'E', 'S', '-', '1', + 'E', 'S', '-', '2', + 'E', 'S', '-', '3', + 'E', 'S', 'H', '2', + 'E', 'U', '-', 'A', + 'E', 'U', '-', 'E', + 'E', 'U', '-', 'O', + 'E', 'U', '-', 'U', + 'E', 'U', 'R', 'O', + 'E', 'V', 'E', 'N', + 'E', 'Y', 'E', 'S', + 'E', 'Y', 'Y', 'Y', + 'E', 'Z', 'E', 'N', + 'F', '0', '0', '1', + 'F', '0', '0', '2', + 'F', '0', '0', '3', + 'F', '0', '0', '4', + 'F', '0', '0', '5', + 'F', '0', '0', '6', + 'F', '0', '0', '7', + 'F', '0', '0', '8', + 'F', '0', '0', '9', + 'F', '0', '1', '0', + 'F', '0', '1', '1', + 'F', '0', '1', '2', + 'F', '0', '1', '3', + 'F', '0', '1', '4', + 'F', '0', '1', '5', + 'F', '0', '1', '6', + 'F', '0', '1', '7', + 'F', '0', '1', '8', + 'F', '0', '1', '9', + 'F', '0', '2', '0', + 'F', '0', '2', '1', + 'F', '0', '2', '2', + 'F', '0', '2', '3', + 'F', '0', '2', '4', + 'F', '0', '2', '5', + 'F', '0', '2', '6', + 'F', '0', '2', '7', + 'F', '0', '2', '8', + 'F', '0', '2', '9', + 'F', '0', '3', '0', + 'F', '0', '3', '1', + 'F', '0', '3', '2', + 'F', '0', '3', '3', + 'F', '0', '3', '4', + 'F', '0', '3', '5', + 'F', '0', '3', '6', + 'F', '0', '3', '7', + 'F', '0', '3', '8', + 'F', '0', '3', '9', + 'F', '0', '4', '0', + 'F', '0', '4', '1', + 'F', '0', '4', '2', + 'F', '0', '4', '3', + 'F', '0', '4', '4', + 'F', '0', '4', '5', + 'F', '0', '4', '6', + 'F', '0', '4', '7', + 'F', '0', '4', '8', + 'F', '0', '4', '9', + 'F', '0', '5', '0', + 'F', '0', '5', '1', + 'F', '0', '5', '2', + 'F', '0', '5', '3', + 'F', 'A', 'A', 'I', + 'F', 'A', 'C', 'E', + 'F', 'A', 'I', 'B', + 'F', 'A', 'N', 'G', + 'F', 'A', 'S', 'T', + 'F', 'E', 'A', 'R', + 'F', 'E', 'E', 'D', + 'F', 'E', 'E', 'M', + 'F', 'E', 'H', 'U', + 'F', 'E', 'N', 'G', + 'F', 'E', 'O', 'H', + 'F', 'E', 'T', 'H', + 'F', 'E', 'U', 'X', + 'F', 'I', 'L', 'E', + 'F', 'I', 'L', 'L', + 'F', 'I', 'L', 'M', + 'F', 'I', 'R', 'E', + 'F', 'I', 'R', 'I', + 'F', 'I', 'S', 'H', + 'F', 'I', 'S', 'T', + 'F', 'I', 'T', 'A', + 'F', 'I', 'V', 'E', + 'F', 'L', 'A', 'G', + 'F', 'L', 'A', 'T', + 'F', 'L', 'E', 'X', + 'F', 'L', 'I', 'P', + 'F', 'O', 'N', 'T', + 'F', 'O', 'O', 'D', + 'F', 'O', 'O', 'L', + 'F', 'O', 'O', 'T', + 'F', 'O', 'R', 'K', + 'F', 'O', 'R', 'M', + 'F', 'O', 'U', 'R', + 'F', 'R', 'E', 'E', + 'F', 'R', 'O', 'G', + 'F', 'R', 'O', 'M', + 'F', 'U', 'E', 'L', + 'F', 'U', 'E', 'T', + 'F', 'U', 'J', 'I', + 'F', 'U', 'L', 'L', + 'F', 'U', 'R', 'X', + 'F', 'U', 'S', 'A', + 'F', 'U', 'S', 'E', + 'F', 'V', 'S', '1', + 'F', 'V', 'S', '2', + 'F', 'V', 'S', '3', + 'F', 'V', 'S', '4', + 'F', 'W', 'A', 'A', + 'F', 'W', 'E', 'E', + 'G', '0', '0', '1', + 'G', '0', '0', '2', + 'G', '0', '0', '3', + 'G', '0', '0', '4', + 'G', '0', '0', '5', + 'G', '0', '0', '6', + 'G', '0', '0', '7', + 'G', '0', '0', '8', + 'G', '0', '0', '9', + 'G', '0', '1', '0', + 'G', '0', '1', '1', + 'G', '0', '1', '2', + 'G', '0', '1', '3', + 'G', '0', '1', '4', + 'G', '0', '1', '5', + 'G', '0', '1', '6', + 'G', '0', '1', '7', + 'G', '0', '1', '8', + 'G', '0', '1', '9', + 'G', '0', '2', '0', + 'G', '0', '2', '1', + 'G', '0', '2', '2', + 'G', '0', '2', '3', + 'G', '0', '2', '4', + 'G', '0', '2', '5', + 'G', '0', '2', '6', + 'G', '0', '2', '7', + 'G', '0', '2', '8', + 'G', '0', '2', '9', + 'G', '0', '3', '0', + 'G', '0', '3', '1', + 'G', '0', '3', '2', + 'G', '0', '3', '3', + 'G', '0', '3', '4', + 'G', '0', '3', '5', + 'G', '0', '3', '6', + 'G', '0', '3', '7', + 'G', '0', '3', '8', + 'G', '0', '3', '9', + 'G', '0', '4', '0', + 'G', '0', '4', '1', + 'G', '0', '4', '2', + 'G', '0', '4', '3', + 'G', '0', '4', '4', + 'G', '0', '4', '5', + 'G', '0', '4', '6', + 'G', '0', '4', '7', + 'G', '0', '4', '8', + 'G', '0', '4', '9', + 'G', '0', '5', '0', + 'G', '0', '5', '1', + 'G', '0', '5', '2', + 'G', '0', '5', '3', + 'G', '0', '5', '4', + 'G', 'A', 'B', 'A', + 'G', 'A', 'L', 'I', + 'G', 'A', 'M', 'E', + 'G', 'A', 'M', 'L', + 'G', 'A', 'N', '2', + 'G', 'A', 'R', '3', + 'G', 'A', 'T', 'E', + 'G', 'B', 'E', 'E', + 'G', 'B', 'E', 'N', + 'G', 'B', 'E', 'T', + 'G', 'B', 'O', 'N', + 'G', 'B', 'O', 'O', + 'G', 'C', 'A', 'N', + 'G', 'C', 'I', 'G', + 'G', 'D', 'A', 'N', + 'G', 'E', '2', '2', + 'G', 'E', 'A', 'R', + 'G', 'E', 'B', 'A', + 'G', 'E', 'B', 'O', + 'G', 'E', 'D', 'E', + 'G', 'E', 'E', 'M', + 'G', 'E', 'T', 'A', + 'G', 'G', 'A', 'A', + 'G', 'G', 'A', 'P', + 'G', 'G', 'A', 'T', + 'G', 'G', 'A', 'X', + 'G', 'G', 'E', 'E', + 'G', 'G', 'E', 'P', + 'G', 'G', 'E', 'T', + 'G', 'G', 'E', 'X', + 'G', 'G', 'I', 'E', + 'G', 'G', 'I', 'T', + 'G', 'G', 'I', 'X', + 'G', 'G', 'O', 'P', + 'G', 'G', 'O', 'T', + 'G', 'G', 'O', 'X', + 'G', 'G', 'U', 'O', + 'G', 'G', 'U', 'P', + 'G', 'G', 'U', 'R', + 'G', 'G', 'U', 'T', + 'G', 'G', 'U', 'X', + 'G', 'G', 'W', 'A', + 'G', 'G', 'W', 'E', + 'G', 'G', 'W', 'I', + 'G', 'H', 'A', 'A', + 'G', 'H', 'A', 'D', + 'G', 'H', 'A', 'N', + 'G', 'H', 'A', 'P', + 'G', 'H', 'E', 'E', + 'G', 'H', 'E', 'T', + 'G', 'H', 'H', 'A', + 'G', 'H', 'O', 'M', + 'G', 'H', 'O', 'U', + 'G', 'H', 'W', 'A', + 'G', 'I', 'B', 'A', + 'G', 'I', 'E', 'P', + 'G', 'I', 'E', 'T', + 'G', 'I', 'E', 'X', + 'G', 'I', 'F', 'T', + 'G', 'I', 'G', 'A', + 'G', 'I', 'R', '2', + 'G', 'I', 'R', '3', + 'G', 'I', 'R', 'L', + 'G', 'I', 'S', 'H', + 'G', 'O', 'A', 'L', + 'G', 'O', 'A', 'T', + 'G', 'O', 'L', 'D', + 'G', 'O', 'N', 'G', + 'G', 'O', 'O', 'D', + 'G', 'O', 'R', 'A', + 'G', 'O', 'R', 'T', + 'G', 'R', 'A', 'F', + 'G', 'R', 'A', 'M', + 'G', 'R', 'E', 'Y', + 'G', 'S', 'U', 'M', + 'G', 'T', 'E', 'R', + 'G', 'U', 'A', 'N', + 'G', 'U', 'E', 'H', + 'G', 'U', 'E', 'I', + 'G', 'U', 'N', 'U', + 'G', 'U', 'O', 'P', + 'G', 'U', 'O', 'T', + 'G', 'U', 'O', 'X', + 'G', 'U', 'R', '7', + 'G', 'U', 'R', 'X', + 'G', 'W', 'A', 'A', + 'G', 'W', 'E', 'E', + 'G', 'Y', 'A', 'A', + 'G', 'Y', 'A', 'N', + 'G', 'Y', 'A', 'S', + 'G', 'Y', 'E', 'E', + 'G', 'Y', 'F', 'U', + 'G', 'Y', 'O', 'N', + 'H', '0', '0', '1', + 'H', '0', '0', '2', + 'H', '0', '0', '3', + 'H', '0', '0', '4', + 'H', '0', '0', '5', + 'H', '0', '0', '6', + 'H', '0', '0', '7', + 'H', '0', '0', '8', + 'H', 'A', '-', '1', + 'H', 'A', '-', '2', + 'H', 'A', '-', '3', + 'H', 'A', '-', '4', + 'H', 'A', '-', '5', + 'H', 'A', '-', '6', + 'H', 'A', '-', '7', + 'H', 'A', '-', '8', + 'H', 'A', '-', '9', + 'H', 'A', 'A', 'M', + 'H', 'A', 'G', 'L', + 'H', 'A', 'I', 'R', + 'H', 'A', 'I', 'S', + 'H', 'A', 'L', 'F', + 'H', 'A', 'L', 'O', + 'H', 'A', 'N', 'D', + 'H', 'A', 'N', 'G', + 'H', 'A', 'R', 'D', + 'H', 'A', 'R', 'P', + 'H', 'A', 'T', 'E', + 'H', 'A', 'V', 'E', + 'H', 'A', 'W', 'J', + 'H', 'E', '-', '1', + 'H', 'E', '-', '2', + 'H', 'E', '-', '3', + 'H', 'E', '-', '4', + 'H', 'E', '-', '5', + 'H', 'E', '-', '6', + 'H', 'E', '-', '7', + 'H', 'E', 'A', 'D', + 'H', 'E', 'E', 'I', + 'H', 'E', 'E', 'L', + 'H', 'E', 'L', 'M', + 'H', 'E', 'M', 'P', + 'H', 'E', 'N', 'G', + 'H', 'E', 'R', 'B', + 'H', 'E', 'R', 'U', + 'H', 'E', 'T', 'A', + 'H', 'E', 'T', 'H', + 'H', 'E', 'Y', 'T', + 'H', 'H', 'A', 'A', + 'H', 'H', 'E', 'E', + 'H', 'H', 'W', 'A', + 'H', 'H', 'W', 'E', + 'H', 'H', 'W', 'I', + 'H', 'H', 'Y', 'A', + 'H', 'H', 'Y', 'E', + 'H', 'H', 'Y', 'I', + 'H', 'H', 'Y', 'O', + 'H', 'H', 'Y', 'U', + 'H', 'I', '-', '1', + 'H', 'I', '-', '2', + 'H', 'I', '-', '3', + 'H', 'I', '-', '4', + 'H', 'I', '-', '5', + 'H', 'I', '-', '6', + 'H', 'I', '-', '7', + 'H', 'I', 'D', 'E', + 'H', 'I', 'E', 'X', + 'H', 'I', 'G', 'H', + 'H', 'I', 'Y', 'O', + 'H', 'I', 'Z', 'B', + 'H', 'L', 'A', 'P', + 'H', 'L', 'A', 'T', + 'H', 'L', 'A', 'U', + 'H', 'L', 'A', 'X', + 'H', 'L', 'E', 'P', + 'H', 'L', 'E', 'X', + 'H', 'L', 'I', 'E', + 'H', 'L', 'I', 'P', + 'H', 'L', 'I', 'T', + 'H', 'L', 'I', 'X', + 'H', 'L', 'O', 'P', + 'H', 'L', 'O', 'X', + 'H', 'L', 'U', 'O', + 'H', 'L', 'U', 'P', + 'H', 'L', 'U', 'R', + 'H', 'L', 'U', 'T', + 'H', 'L', 'U', 'X', + 'H', 'L', 'Y', 'P', + 'H', 'L', 'Y', 'R', + 'H', 'L', 'Y', 'T', + 'H', 'L', 'Y', 'X', + 'H', 'M', 'A', 'P', + 'H', 'M', 'A', 'T', + 'H', 'M', 'A', 'X', + 'H', 'M', 'I', 'E', + 'H', 'M', 'I', 'P', + 'H', 'M', 'I', 'T', + 'H', 'M', 'I', 'X', + 'H', 'M', 'O', 'P', + 'H', 'M', 'O', 'T', + 'H', 'M', 'O', 'X', + 'H', 'M', 'U', 'O', + 'H', 'M', 'U', 'P', + 'H', 'M', 'U', 'R', + 'H', 'M', 'U', 'T', + 'H', 'M', 'U', 'X', + 'H', 'M', 'Y', 'P', + 'H', 'M', 'Y', 'R', + 'H', 'M', 'Y', 'X', + 'H', 'N', 'A', 'P', + 'H', 'N', 'A', 'T', + 'H', 'N', 'A', 'U', + 'H', 'N', 'A', 'X', + 'H', 'N', 'E', 'P', + 'H', 'N', 'E', 'X', + 'H', 'N', 'I', 'E', + 'H', 'N', 'I', 'P', + 'H', 'N', 'I', 'T', + 'H', 'N', 'I', 'X', + 'H', 'N', 'O', 'P', + 'H', 'N', 'O', 'T', + 'H', 'N', 'O', 'X', + 'H', 'N', 'U', 'B', + 'H', 'N', 'U', 'O', + 'H', 'N', 'U', 'T', + 'H', 'O', '-', '1', + 'H', 'O', '-', '2', + 'H', 'O', '-', '3', + 'H', 'O', '-', '4', + 'H', 'O', '-', '5', + 'H', 'O', '-', '6', + 'H', 'O', '-', '7', + 'H', 'O', '-', '8', + 'H', 'O', 'K', 'A', + 'H', 'O', 'L', 'E', + 'H', 'O', 'L', 'O', + 'H', 'O', 'O', 'K', + 'H', 'O', 'O', 'N', + 'H', 'O', 'O', 'P', + 'H', 'O', 'O', 'U', + 'H', 'O', 'R', 'A', + 'H', 'O', 'R', 'I', + 'H', 'O', 'R', 'N', + 'H', 'O', 'R', 'R', + 'H', 'O', 'T', 'A', + 'H', 'O', 'U', 'R', + 'H', 'P', 'W', 'G', + 'H', 'T', 'T', 'A', + 'H', 'U', '-', '1', + 'H', 'U', '-', '2', + 'H', 'U', '-', '3', + 'H', 'U', 'A', 'N', + 'H', 'U', 'B', '2', + 'H', 'U', 'L', '2', + 'H', 'U', 'M', 'P', + 'H', 'U', 'N', 'G', + 'H', 'U', 'O', 'P', + 'H', 'U', 'O', 'T', + 'H', 'U', 'O', 'X', + 'H', 'U', 'S', 'H', + 'H', 'U', 'V', 'A', + 'H', 'W', 'A', 'H', + 'H', 'W', 'E', 'E', + 'H', 'X', 'A', 'P', + 'H', 'X', 'A', 'T', + 'H', 'X', 'A', 'X', + 'H', 'X', 'E', 'P', + 'H', 'X', 'E', 'X', + 'H', 'X', 'I', 'E', + 'H', 'X', 'I', 'P', + 'H', 'X', 'I', 'T', + 'H', 'X', 'I', 'X', + 'H', 'X', 'O', 'P', + 'H', 'X', 'O', 'T', + 'H', 'X', 'O', 'X', + 'H', 'X', 'U', 'O', + 'H', 'X', 'W', 'G', + 'H', 'Z', 'W', 'G', + 'H', 'Z', 'Z', 'P', + 'H', 'Z', 'Z', 'Z', + 'I', '-', 'E', 'U', + 'I', '-', 'Y', 'A', + 'I', '-', 'Y', 'E', + 'I', '-', 'Y', 'O', + 'I', '-', 'Y', 'U', + 'I', '0', '0', '1', + 'I', '0', '0', '2', + 'I', '0', '0', '3', + 'I', '0', '0', '4', + 'I', '0', '0', '5', + 'I', '0', '0', '6', + 'I', '0', '0', '7', + 'I', '0', '0', '8', + 'I', '0', '0', '9', + 'I', '0', '1', '0', + 'I', '0', '1', '1', + 'I', '0', '1', '2', + 'I', '0', '1', '3', + 'I', '0', '1', '4', + 'I', '0', '1', '5', + 'I', 'A', 'N', 'G', + 'I', 'C', 'O', 'N', + 'I', 'D', 'I', 'M', + 'I', 'D', 'L', 'E', + 'I', 'F', 'I', 'N', + 'I', 'K', 'I', 'R', + 'I', 'L', 'U', 'T', + 'I', 'L', 'U', 'Y', + 'I', 'M', 'A', 'R', + 'I', 'M', 'I', 'N', + 'I', 'N', 'A', 'P', + 'I', 'N', 'C', 'H', + 'I', 'N', 'N', 'N', + 'I', 'N', 'T', 'I', + 'I', 'N', 'Y', 'A', + 'I', 'O', 'N', 'G', + 'I', 'O', 'T', 'A', + 'I', 'R', 'O', 'N', + 'I', 'S', 'A', 'Z', + 'I', 'S', 'O', 'N', + 'I', 'T', 'E', 'M', + 'I', 'U', 'J', 'A', + 'I', 'W', 'A', 'Z', + 'I', 'Y', 'E', 'K', + 'I', 'Z', 'H', 'E', + 'J', 'A', 'C', 'K', + 'J', 'A', 'D', 'E', + 'J', 'A', 'I', 'N', + 'J', 'A', 'L', 'L', + 'J', 'A', 'W', 'S', + 'J', 'A', 'Y', 'N', + 'J', 'E', 'E', 'M', + 'J', 'E', 'R', 'A', + 'J', 'H', 'A', 'A', + 'J', 'H', 'A', 'M', + 'J', 'H', 'A', 'N', + 'J', 'H', 'E', 'H', + 'J', 'H', 'O', 'X', + 'J', 'I', 'E', 'P', + 'J', 'I', 'E', 'T', + 'J', 'I', 'E', 'X', + 'J', 'I', 'I', 'M', + 'J', 'J', 'E', 'E', + 'J', 'J', 'I', 'E', + 'J', 'J', 'I', 'P', + 'J', 'J', 'I', 'T', + 'J', 'J', 'I', 'X', + 'J', 'J', 'O', 'P', + 'J', 'J', 'O', 'T', + 'J', 'J', 'O', 'X', + 'J', 'J', 'U', 'O', + 'J', 'J', 'U', 'P', + 'J', 'J', 'U', 'R', + 'J', 'J', 'U', 'T', + 'J', 'J', 'U', 'X', + 'J', 'J', 'Y', 'P', + 'J', 'J', 'Y', 'T', + 'J', 'J', 'Y', 'X', + 'J', 'N', 'Y', 'A', + 'J', 'O', 'I', 'N', + 'J', 'O', 'N', 'A', + 'J', 'O', 'N', 'G', + 'J', 'O', 'V', 'E', + 'J', 'U', 'L', 'Y', + 'J', 'U', 'N', 'E', + 'J', 'U', 'N', 'O', + 'J', 'U', 'O', 'P', + 'J', 'U', 'O', 'T', + 'J', 'U', 'O', 'X', + 'J', 'U', 'R', 'X', + 'J', 'Y', 'A', 'H', + 'J', 'Y', 'R', 'X', + 'K', '0', '0', '1', + 'K', '0', '0', '2', + 'K', '0', '0', '3', + 'K', '0', '0', '4', + 'K', '0', '0', '5', + 'K', '0', '0', '6', + 'K', '0', '0', '7', + 'K', '0', '0', '8', + 'K', 'A', '-', '1', + 'K', 'A', '-', '2', + 'K', 'A', '-', '3', + 'K', 'A', '-', '4', + 'K', 'A', '-', '5', + 'K', 'A', '-', '6', + 'K', 'A', '-', '7', + 'K', 'A', '-', '8', + 'K', 'A', '-', '9', + 'K', 'A', 'A', 'B', + 'K', 'A', 'A', 'F', + 'K', 'A', 'A', 'I', + 'K', 'A', 'A', 'N', + 'K', 'A', 'A', 'V', + 'K', 'A', 'B', 'A', + 'K', 'A', 'D', '2', + 'K', 'A', 'D', '3', + 'K', 'A', 'D', '4', + 'K', 'A', 'D', '5', + 'K', 'A', 'F', 'A', + 'K', 'A', 'I', 'B', + 'K', 'A', 'I', 'V', + 'K', 'A', 'K', 'O', + 'K', 'A', 'M', '2', + 'K', 'A', 'M', '4', + 'K', 'A', 'N', 'A', + 'K', 'A', 'N', 'G', + 'K', 'A', 'P', 'A', + 'K', 'A', 'P', 'H', + 'K', 'A', 'P', 'O', + 'K', 'A', 'R', 'O', + 'K', 'A', 'T', 'O', + 'K', 'A', 'U', 'B', + 'K', 'A', 'U', 'N', + 'K', 'A', 'U', 'V', + 'K', 'A', 'W', 'B', + 'K', 'A', 'W', 'I', + 'K', 'A', 'W', 'V', + 'K', 'C', 'A', 'L', + 'K', 'E', '-', '1', + 'K', 'E', '-', '2', + 'K', 'E', '-', '3', + 'K', 'E', '-', '4', + 'K', 'E', '-', '5', + 'K', 'E', '-', '6', + 'K', 'E', 'E', 'B', + 'K', 'E', 'E', 'V', + 'K', 'E', 'O', 'W', + 'K', 'E', 'U', 'M', + 'K', 'E', 'U', 'P', + 'K', 'E', 'U', 'X', + 'K', 'H', 'A', 'A', + 'K', 'H', 'A', 'B', + 'K', 'H', 'A', 'F', + 'K', 'H', 'A', 'H', + 'K', 'H', 'A', 'I', + 'K', 'H', 'A', 'N', + 'K', 'H', 'A', 'R', + 'K', 'H', 'A', 'V', + 'K', 'H', 'E', 'E', + 'K', 'H', 'E', 'I', + 'K', 'H', 'H', 'A', + 'K', 'H', 'H', 'O', + 'K', 'H', 'I', 'T', + 'K', 'H', 'M', 'U', + 'K', 'H', 'O', 'N', + 'K', 'H', 'O', 'T', + 'K', 'H', 'O', 'U', + 'K', 'I', '-', '1', + 'K', 'I', '-', '2', + 'K', 'I', '-', '3', + 'K', 'I', '-', '4', + 'K', 'I', '-', '5', + 'K', 'I', '-', '6', + 'K', 'I', '-', '7', + 'K', 'I', '-', '8', + 'K', 'I', 'A', 'B', + 'K', 'I', 'A', 'V', + 'K', 'I', 'C', 'K', + 'K', 'I', 'E', 'P', + 'K', 'I', 'E', 'X', + 'K', 'I', 'N', 'G', + 'K', 'I', 'R', 'O', + 'K', 'I', 'S', 'H', + 'K', 'I', 'S', 'S', + 'K', 'I', 'T', 'E', + 'K', 'K', 'E', 'E', + 'K', 'N', 'O', 'T', + 'K', 'O', '-', '1', + 'K', 'O', '-', '2', + 'K', 'O', '-', '3', + 'K', 'O', 'E', 'T', + 'K', 'O', 'K', 'E', + 'K', 'O', 'K', 'O', + 'K', 'O', 'M', 'I', + 'K', 'O', 'O', 'B', + 'K', 'O', 'O', 'V', + 'K', 'O', 'T', 'O', + 'K', 'P', 'A', 'H', + 'K', 'P', 'A', 'N', + 'K', 'P', 'E', 'E', + 'K', 'P', 'E', 'N', + 'K', 'P', 'O', 'O', + 'K', 'P', 'O', 'Q', + 'K', 'S', 'S', 'A', + 'K', 'U', '-', '1', + 'K', 'U', '-', '2', + 'K', 'U', '-', '3', + 'K', 'U', '-', '4', + 'K', 'U', '-', '5', + 'K', 'U', '-', '6', + 'K', 'U', '-', '7', + 'K', 'U', 'A', 'B', + 'K', 'U', 'A', 'V', + 'K', 'U', 'E', 'T', + 'K', 'U', 'N', 'G', + 'K', 'U', 'O', 'M', + 'K', 'U', 'O', 'P', + 'K', 'U', 'O', 'Q', + 'K', 'U', 'O', 'X', + 'K', 'U', 'R', 'T', + 'K', 'U', 'R', 'X', + 'K', 'U', 'U', 'H', + 'K', 'W', 'A', 'A', + 'K', 'W', 'A', 'Y', + 'K', 'W', 'E', 'E', + 'K', 'W', 'I', 'I', + 'K', 'W', 'O', 'O', + 'K', 'X', 'A', 'A', + 'K', 'X', 'E', 'E', + 'K', 'X', 'W', 'A', + 'K', 'X', 'W', 'E', + 'K', 'X', 'W', 'I', + 'K', 'Y', 'A', 'A', + 'K', 'Y', 'E', 'E', + 'L', '0', '0', '1', + 'L', '0', '0', '2', + 'L', '0', '0', '3', + 'L', '0', '0', '4', + 'L', '0', '0', '5', + 'L', '0', '0', '6', + 'L', '0', '0', '7', + 'L', '0', '0', '8', + 'L', 'A', 'A', 'I', + 'L', 'A', 'A', 'M', + 'L', 'A', 'A', 'N', + 'L', 'A', 'C', 'A', + 'L', 'A', 'C', 'K', + 'L', 'A', 'D', 'Y', + 'L', 'A', 'E', 'V', + 'L', 'A', 'G', 'U', + 'L', 'A', 'K', 'E', + 'L', 'A', 'K', 'H', + 'L', 'A', 'M', 'D', + 'L', 'A', 'M', 'E', + 'L', 'A', 'M', 'P', + 'L', 'A', 'N', 'D', + 'L', 'A', 'N', 'E', + 'L', 'A', 'R', 'I', + 'L', 'A', 'S', 'T', + 'L', 'A', 'T', 'E', + 'L', 'A', 'U', 'J', + 'L', 'A', 'Z', 'Y', + 'L', 'D', 'A', 'N', + 'L', 'E', 'A', 'D', + 'L', 'E', 'A', 'F', + 'L', 'E', 'E', 'K', + 'L', 'E', 'F', 'T', + 'L', 'E', 'G', 'S', + 'L', 'E', 'S', 'H', + 'L', 'E', 'S', 'S', + 'L', 'E', 'U', 'M', + 'L', 'E', 'Z', 'H', + 'L', 'H', 'A', 'A', + 'L', 'H', 'A', 'G', + 'L', 'H', 'E', 'E', + 'L', 'H', 'I', 'I', + 'L', 'H', 'O', 'O', + 'L', 'H', 'Y', 'A', + 'L', 'I', 'E', 'E', + 'L', 'I', 'E', 'P', + 'L', 'I', 'E', 'T', + 'L', 'I', 'E', 'X', + 'L', 'I', 'F', 'E', + 'L', 'I', 'L', 'Y', + 'L', 'I', 'M', 'B', + 'L', 'I', 'M', 'E', + 'L', 'I', 'N', 'E', + 'L', 'I', 'N', 'G', + 'L', 'I', 'N', 'K', + 'L', 'I', 'O', 'N', + 'L', 'I', 'P', 'S', + 'L', 'I', 'R', 'A', + 'L', 'I', 'S', 'H', + 'L', 'I', 'S', 'U', + 'L', 'I', 'T', 'H', + 'L', 'I', 'W', 'N', + 'L', 'L', 'H', 'A', + 'L', 'L', 'L', 'A', + 'L', 'O', 'C', 'K', + 'L', 'O', 'G', 'R', + 'L', 'O', 'L', 'L', + 'L', 'O', 'N', 'G', + 'L', 'O', 'O', 'K', + 'L', 'O', 'O', 'N', + 'L', 'O', 'O', 'P', + 'L', 'O', 'O', 'T', + 'L', 'O', 'S', 'T', + 'L', 'O', 'V', 'E', + 'L', 'U', 'I', 'S', + 'L', 'U', 'O', 'P', + 'L', 'U', 'O', 'T', + 'L', 'U', 'O', 'X', + 'L', 'U', 'R', 'X', + 'L', 'W', 'A', 'A', + 'L', 'W', 'I', 'I', + 'L', 'W', 'O', 'O', + 'L', 'Y', 'I', 'T', + 'L', 'Y', 'R', 'X', + 'M', '0', '0', '1', + 'M', '0', '0', '2', + 'M', '0', '0', '3', + 'M', '0', '0', '4', + 'M', '0', '0', '5', + 'M', '0', '0', '6', + 'M', '0', '0', '7', + 'M', '0', '0', '8', + 'M', '0', '0', '9', + 'M', '0', '1', '0', + 'M', '0', '1', '1', + 'M', '0', '1', '2', + 'M', '0', '1', '3', + 'M', '0', '1', '4', + 'M', '0', '1', '5', + 'M', '0', '1', '6', + 'M', '0', '1', '7', + 'M', '0', '1', '8', + 'M', '0', '1', '9', + 'M', '0', '2', '0', + 'M', '0', '2', '1', + 'M', '0', '2', '2', + 'M', '0', '2', '3', + 'M', '0', '2', '4', + 'M', '0', '2', '5', + 'M', '0', '2', '6', + 'M', '0', '2', '7', + 'M', '0', '2', '8', + 'M', '0', '2', '9', + 'M', '0', '3', '0', + 'M', '0', '3', '1', + 'M', '0', '3', '2', + 'M', '0', '3', '3', + 'M', '0', '3', '4', + 'M', '0', '3', '5', + 'M', '0', '3', '6', + 'M', '0', '3', '7', + 'M', '0', '3', '8', + 'M', '0', '3', '9', + 'M', '0', '4', '0', + 'M', '0', '4', '1', + 'M', '0', '4', '2', + 'M', '0', '4', '3', + 'M', '0', '4', '4', + 'M', '0', '4', '5', + 'M', '0', '4', '6', + 'M', '0', '4', '7', + 'M', '0', '4', '8', + 'M', '0', '4', '9', + 'M', '0', '5', '0', + 'M', '0', '5', '1', + 'M', '0', '5', '2', + 'M', '0', '5', '3', + 'M', '0', '5', '4', + 'M', '0', '5', '5', + 'M', '0', '5', '6', + 'M', '0', '5', '7', + 'M', '0', '5', '8', + 'M', '0', '5', '9', + 'M', '0', '6', '0', + 'M', '0', '6', '1', + 'M', '0', '6', '2', + 'M', '0', '6', '3', + 'M', '0', '6', '4', + 'M', '0', '6', '5', + 'M', '0', '6', '6', + 'M', '0', '6', '7', + 'M', '0', '6', '8', + 'M', '0', '6', '9', + 'M', '0', '7', '0', + 'M', '0', '7', '1', + 'M', '0', '7', '2', + 'M', '0', '7', '3', + 'M', '0', '7', '4', + 'M', '0', '7', '5', + 'M', '0', '7', '6', + 'M', '0', '7', '7', + 'M', '0', '7', '8', + 'M', '0', '7', '9', + 'M', '0', '8', '0', + 'M', '0', '8', '1', + 'M', '0', '8', '2', + 'M', '0', '8', '3', + 'M', '0', '8', '4', + 'M', '0', '8', '5', + 'M', '0', '8', '6', + 'M', '0', '8', '7', + 'M', '0', '8', '8', + 'M', '0', '8', '9', + 'M', '0', '9', '0', + 'M', '0', '9', '1', + 'M', '0', '9', '2', + 'M', '0', '9', '3', + 'M', '0', '9', '4', + 'M', '0', '9', '5', + 'M', '0', '9', '6', + 'M', '0', '9', '7', + 'M', '0', '9', '8', + 'M', '0', '9', '9', + 'M', '1', '0', '0', + 'M', '1', '0', '1', + 'M', '1', '0', '2', + 'M', '1', '0', '3', + 'M', '1', '0', '4', + 'M', '1', '0', '5', + 'M', '1', '0', '6', + 'M', '1', '0', '7', + 'M', '1', '0', '8', + 'M', '1', '0', '9', + 'M', '1', '1', '0', + 'M', '1', '1', '1', + 'M', '1', '1', '2', + 'M', '1', '1', '3', + 'M', '1', '1', '4', + 'M', '1', '1', '5', + 'M', '1', '1', '6', + 'M', '1', '1', '7', + 'M', '1', '1', '8', + 'M', '1', '1', '9', + 'M', '1', '2', '0', + 'M', '1', '2', '1', + 'M', '1', '2', '2', + 'M', '1', '2', '3', + 'M', '1', '2', '4', + 'M', '1', '2', '5', + 'M', '1', '2', '6', + 'M', '1', '2', '7', + 'M', '1', '2', '8', + 'M', '1', '2', '9', + 'M', '1', '3', '0', + 'M', '1', '3', '1', + 'M', '1', '3', '2', + 'M', '1', '3', '3', + 'M', '1', '3', '4', + 'M', '1', '3', '5', + 'M', '1', '3', '6', + 'M', '1', '3', '7', + 'M', '1', '3', '8', + 'M', '1', '3', '9', + 'M', '1', '4', '0', + 'M', '1', '4', '1', + 'M', '1', '4', '2', + 'M', '1', '4', '3', + 'M', '1', '4', '4', + 'M', '1', '4', '5', + 'M', '1', '4', '6', + 'M', '1', '4', '7', + 'M', '1', '4', '8', + 'M', '1', '4', '9', + 'M', '1', '5', '0', + 'M', '1', '5', '1', + 'M', '1', '5', '2', + 'M', '1', '5', '3', + 'M', '1', '5', '4', + 'M', '1', '5', '5', + 'M', '1', '5', '6', + 'M', '1', '5', '7', + 'M', '1', '5', '8', + 'M', '1', '5', '9', + 'M', '1', '6', '0', + 'M', '1', '6', '1', + 'M', '1', '6', '2', + 'M', '1', '6', '3', + 'M', '1', '6', '4', + 'M', '1', '6', '5', + 'M', '1', '6', '6', + 'M', '1', '6', '7', + 'M', '1', '6', '8', + 'M', '1', '6', '9', + 'M', '1', '7', '0', + 'M', '1', '7', '1', + 'M', '1', '7', '2', + 'M', '1', '7', '3', + 'M', '1', '7', '4', + 'M', '1', '7', '5', + 'M', '1', '7', '6', + 'M', '1', '7', '7', + 'M', '1', '7', '8', + 'M', '1', '7', '9', + 'M', '1', '8', '0', + 'M', '1', '8', '1', + 'M', '1', '8', '2', + 'M', '1', '8', '3', + 'M', '1', '8', '4', + 'M', '1', '8', '5', + 'M', '1', '8', '6', + 'M', '1', '8', '7', + 'M', '1', '8', '8', + 'M', '1', '8', '9', + 'M', '1', '9', '0', + 'M', '1', '9', '1', + 'M', '1', '9', '2', + 'M', '1', '9', '3', + 'M', '1', '9', '4', + 'M', '1', '9', '5', + 'M', '1', '9', '6', + 'M', '1', '9', '7', + 'M', 'A', '-', '1', + 'M', 'A', '-', '2', + 'M', 'A', '-', '3', + 'M', 'A', '-', '4', + 'M', 'A', '-', '5', + 'M', 'A', '-', '6', + 'M', 'A', '-', '7', + 'M', 'A', 'A', 'I', + 'M', 'A', 'D', 'U', + 'M', 'A', 'E', 'M', + 'M', 'A', 'G', 'E', + 'M', 'A', 'L', 'E', + 'M', 'A', 'L', 'O', + 'M', 'A', 'N', 'S', + 'M', 'A', 'R', 'E', + 'M', 'A', 'R', 'K', + 'M', 'A', 'R', 'Y', + 'M', 'A', 'S', 'H', + 'M', 'A', 'S', 'K', + 'M', 'A', 'S', 'U', + 'M', 'A', 'T', 'E', + 'M', 'B', 'A', 'A', + 'M', 'B', 'A', 'Q', + 'M', 'B', 'E', 'E', + 'M', 'B', 'E', 'N', + 'M', 'B', 'I', 'T', + 'M', 'B', 'O', 'O', + 'M', 'B', 'U', 'E', + 'M', 'B', 'U', 'O', + 'M', 'B', 'U', 'U', + 'M', 'C', 'H', 'U', + 'M', 'D', 'U', 'N', + 'M', 'E', '-', '1', + 'M', 'E', '-', '2', + 'M', 'E', 'A', 'T', + 'M', 'E', 'E', 'J', + 'M', 'E', 'E', 'M', + 'M', 'E', 'E', 'T', + 'M', 'E', 'G', 'A', + 'M', 'E', 'M', 'O', + 'M', 'E', 'N', 'S', + 'M', 'E', 'R', 'I', + 'M', 'E', 'S', 'H', + 'M', 'E', 'S', 'I', + 'M', 'E', 'S', 'O', + 'M', 'E', 'T', 'A', + 'M', 'E', 'U', 'N', + 'M', 'E', 'U', 'Q', + 'M', 'E', 'U', 'T', + 'M', 'F', 'A', 'A', + 'M', 'F', 'O', 'N', + 'M', 'G', 'A', 'P', + 'M', 'G', 'A', 'T', + 'M', 'G', 'A', 'X', + 'M', 'G', 'B', 'A', + 'M', 'G', 'B', 'E', + 'M', 'G', 'B', 'I', + 'M', 'G', 'B', 'O', + 'M', 'G', 'B', 'U', + 'M', 'G', 'E', 'P', + 'M', 'G', 'E', 'X', + 'M', 'G', 'I', 'E', + 'M', 'G', 'O', 'P', + 'M', 'G', 'O', 'T', + 'M', 'G', 'O', 'X', + 'M', 'G', 'U', 'O', + 'M', 'G', 'U', 'P', + 'M', 'G', 'U', 'R', + 'M', 'G', 'U', 'T', + 'M', 'G', 'U', 'X', + 'M', 'I', '-', '1', + 'M', 'I', '-', '2', + 'M', 'I', '-', '3', + 'M', 'I', '-', '4', + 'M', 'I', '-', '5', + 'M', 'I', '-', '6', + 'M', 'I', '-', '7', + 'M', 'I', 'A', 'O', + 'M', 'I', 'C', 'R', + 'M', 'I', 'E', 'E', + 'M', 'I', 'E', 'P', + 'M', 'I', 'E', 'X', + 'M', 'I', 'I', 'M', + 'M', 'I', 'I', 'N', + 'M', 'I', 'L', 'K', + 'M', 'I', 'L', 'L', + 'M', 'I', 'M', 'E', + 'M', 'I', 'N', 'Y', + 'M', 'I', 'R', 'I', + 'M', 'M', 'S', 'P', + 'M', 'N', 'A', 'S', + 'M', 'O', '-', '1', + 'M', 'O', '-', '2', + 'M', 'O', '-', '3', + 'M', 'O', '-', '4', + 'M', 'O', '-', '5', + 'M', 'O', '-', '6', + 'M', 'O', 'D', 'E', + 'M', 'O', 'D', 'I', + 'M', 'O', 'N', 'I', + 'M', 'O', 'O', 'D', + 'M', 'O', 'O', 'N', + 'M', 'O', 'V', 'E', + 'M', 'U', '-', '1', + 'M', 'U', '-', '2', + 'M', 'U', '-', '3', + 'M', 'U', '-', '4', + 'M', 'U', 'A', 'E', + 'M', 'U', 'A', 'N', + 'M', 'U', 'A', 'S', + 'M', 'U', 'C', 'H', + 'M', 'U', 'E', 'N', + 'M', 'U', 'G', 'S', + 'M', 'U', 'I', 'N', + 'M', 'U', 'O', 'P', + 'M', 'U', 'O', 'T', + 'M', 'U', 'O', 'X', + 'M', 'U', 'O', 'Y', + 'M', 'U', 'R', 'E', + 'M', 'U', 'R', 'X', + 'M', 'U', 'S', 'H', + 'M', 'V', 'O', 'P', + 'M', 'W', 'A', 'A', + 'M', 'W', 'E', 'E', + 'M', 'W', 'I', 'I', + 'M', 'W', 'O', 'O', + 'N', '0', '0', '1', + 'N', '0', '0', '2', + 'N', '0', '0', '3', + 'N', '0', '0', '4', + 'N', '0', '0', '5', + 'N', '0', '0', '6', + 'N', '0', '0', '7', + 'N', '0', '0', '8', + 'N', '0', '0', '9', + 'N', '0', '1', '0', + 'N', '0', '1', '1', + 'N', '0', '1', '2', + 'N', '0', '1', '3', + 'N', '0', '1', '4', + 'N', '0', '1', '5', + 'N', '0', '1', '6', + 'N', '0', '1', '7', + 'N', '0', '1', '8', + 'N', '0', '1', '9', + 'N', '0', '2', '0', + 'N', '0', '2', '1', + 'N', '0', '2', '2', + 'N', '0', '2', '3', + 'N', '0', '2', '4', + 'N', '0', '2', '5', + 'N', '0', '2', '6', + 'N', '0', '2', '7', + 'N', '0', '2', '8', + 'N', '0', '2', '9', + 'N', '0', '3', '0', + 'N', '0', '3', '1', + 'N', '0', '3', '2', + 'N', '0', '3', '3', + 'N', '0', '3', '4', + 'N', '0', '3', '5', + 'N', '0', '3', '6', + 'N', '0', '3', '7', + 'N', '0', '3', '8', + 'N', '0', '3', '9', + 'N', '0', '4', '0', + 'N', '0', '4', '1', + 'N', '0', '4', '2', + 'N', 'A', '-', '1', + 'N', 'A', '-', '2', + 'N', 'A', '-', '3', + 'N', 'A', '-', '4', + 'N', 'A', '-', '5', + 'N', 'A', '-', '6', + 'N', 'A', '-', '7', + 'N', 'A', '-', '8', + 'N', 'A', '-', '9', + 'N', 'A', 'A', 'I', + 'N', 'A', 'G', 'A', + 'N', 'A', 'I', 'L', + 'N', 'A', 'M', '2', + 'N', 'A', 'M', 'E', + 'N', 'A', 'N', 'A', + 'N', 'A', 'N', 'D', + 'N', 'A', 'N', 'O', + 'N', 'A', 'O', 'S', + 'N', 'A', 'U', 'D', + 'N', 'B', 'A', 'P', + 'N', 'B', 'A', 'T', + 'N', 'B', 'A', 'X', + 'N', 'B', 'I', 'E', + 'N', 'B', 'I', 'P', + 'N', 'B', 'I', 'T', + 'N', 'B', 'I', 'X', + 'N', 'B', 'O', 'P', + 'N', 'B', 'O', 'T', + 'N', 'B', 'O', 'X', + 'N', 'B', 'S', 'P', + 'N', 'B', 'U', 'P', + 'N', 'B', 'U', 'R', + 'N', 'B', 'U', 'T', + 'N', 'B', 'U', 'X', + 'N', 'B', 'Y', 'P', + 'N', 'B', 'Y', 'R', + 'N', 'B', 'Y', 'T', + 'N', 'B', 'Y', 'X', + 'N', 'D', 'A', 'A', + 'N', 'D', 'A', 'M', + 'N', 'D', 'A', 'P', + 'N', 'D', 'A', 'T', + 'N', 'D', 'A', 'X', + 'N', 'D', 'E', 'E', + 'N', 'D', 'E', 'P', + 'N', 'D', 'E', 'X', + 'N', 'D', 'I', 'E', + 'N', 'D', 'I', 'P', + 'N', 'D', 'I', 'Q', + 'N', 'D', 'I', 'T', + 'N', 'D', 'I', 'X', + 'N', 'D', 'O', 'N', + 'N', 'D', 'O', 'O', + 'N', 'D', 'O', 'P', + 'N', 'D', 'O', 'T', + 'N', 'D', 'O', 'X', + 'N', 'D', 'U', 'N', + 'N', 'D', 'U', 'P', + 'N', 'D', 'U', 'R', + 'N', 'D', 'U', 'T', + 'N', 'D', 'U', 'X', + 'N', 'E', '-', '1', + 'N', 'E', '-', '2', + 'N', 'E', '-', '3', + 'N', 'E', '-', '4', + 'N', 'E', '-', '5', + 'N', 'E', '-', '6', + 'N', 'E', 'C', 'K', + 'N', 'E', 'R', 'D', + 'N', 'E', 'S', 'T', + 'N', 'E', 'W', 'A', + 'N', 'E', 'X', 'T', + 'N', 'G', 'A', 'A', + 'N', 'G', 'A', 'H', + 'N', 'G', 'A', 'I', + 'N', 'G', 'A', 'N', + 'N', 'G', 'A', 'P', + 'N', 'G', 'A', 'Q', + 'N', 'G', 'A', 'R', + 'N', 'G', 'A', 'S', + 'N', 'G', 'A', 'T', + 'N', 'G', 'A', 'X', + 'N', 'G', 'E', 'N', + 'N', 'G', 'E', 'P', + 'N', 'G', 'E', 'X', + 'N', 'G', 'G', 'A', + 'N', 'G', 'G', 'E', + 'N', 'G', 'G', 'I', + 'N', 'G', 'G', 'O', + 'N', 'G', 'G', 'U', + 'N', 'G', 'H', 'A', + 'N', 'G', 'I', 'E', + 'N', 'G', 'I', 'I', + 'N', 'G', 'J', 'A', + 'N', 'G', 'K', 'A', + 'N', 'G', 'O', 'M', + 'N', 'G', 'O', 'N', + 'N', 'G', 'O', 'O', + 'N', 'G', 'O', 'P', + 'N', 'G', 'O', 'Q', + 'N', 'G', 'O', 'T', + 'N', 'G', 'O', 'U', + 'N', 'G', 'O', 'X', + 'N', 'G', 'U', 'E', + 'N', 'G', 'U', 'N', + 'N', 'G', 'U', 'O', + 'N', 'G', 'V', 'E', + 'N', 'G', 'Y', 'E', + 'N', 'H', 'A', 'Y', + 'N', 'H', 'J', 'A', + 'N', 'H', 'U', 'E', + 'N', 'I', '-', '1', + 'N', 'I', '-', '2', + 'N', 'I', '-', '3', + 'N', 'I', '-', '4', + 'N', 'I', '-', '5', + 'N', 'I', '-', '6', + 'N', 'I', '-', '7', + 'N', 'I', 'E', 'P', + 'N', 'I', 'E', 'X', + 'N', 'I', 'K', 'A', + 'N', 'I', 'N', '9', + 'N', 'I', 'N', 'E', + 'N', 'I', 'O', 'N', + 'N', 'J', 'A', 'A', + 'N', 'J', 'A', 'M', + 'N', 'J', 'A', 'N', + 'N', 'J', 'A', 'P', + 'N', 'J', 'A', 'Q', + 'N', 'J', 'E', 'E', + 'N', 'J', 'I', 'E', + 'N', 'J', 'I', 'P', + 'N', 'J', 'I', 'T', + 'N', 'J', 'I', 'X', + 'N', 'J', 'O', 'O', + 'N', 'J', 'O', 'P', + 'N', 'J', 'O', 'T', + 'N', 'J', 'O', 'X', + 'N', 'J', 'U', 'O', + 'N', 'J', 'U', 'P', + 'N', 'J', 'U', 'R', + 'N', 'J', 'U', 'X', + 'N', 'J', 'Y', 'P', + 'N', 'J', 'Y', 'R', + 'N', 'J', 'Y', 'T', + 'N', 'J', 'Y', 'X', + 'N', 'K', 'A', 'U', + 'N', 'K', 'O', 'M', + 'N', 'L', 'A', 'U', + 'N', 'N', 'A', 'A', + 'N', 'N', 'G', 'A', + 'N', 'N', 'G', 'I', + 'N', 'N', 'G', 'O', + 'N', 'N', 'H', 'A', + 'N', 'N', 'N', 'A', + 'N', 'N', 'Y', 'A', + 'N', 'O', '-', '1', + 'N', 'O', '-', '2', + 'N', 'O', '-', '3', + 'N', 'O', '-', '4', + 'N', 'O', '-', '5', + 'N', 'O', 'D', 'E', + 'N', 'O', 'O', 'N', + 'N', 'O', 'S', 'E', + 'N', 'O', 'T', 'E', + 'N', 'O', 'W', 'C', + 'N', 'P', 'L', 'A', + 'N', 'Q', 'I', 'G', + 'N', 'R', 'A', 'P', + 'N', 'R', 'A', 'T', + 'N', 'R', 'A', 'X', + 'N', 'R', 'E', 'P', + 'N', 'R', 'E', 'S', + 'N', 'R', 'E', 'T', + 'N', 'R', 'E', 'X', + 'N', 'R', 'O', 'P', + 'N', 'R', 'O', 'X', + 'N', 'R', 'U', 'A', + 'N', 'R', 'U', 'P', + 'N', 'R', 'U', 'R', + 'N', 'R', 'U', 'T', + 'N', 'R', 'U', 'X', + 'N', 'R', 'Y', 'P', + 'N', 'R', 'Y', 'R', + 'N', 'R', 'Y', 'T', + 'N', 'R', 'Y', 'X', + 'N', 'S', 'E', 'N', + 'N', 'S', 'H', 'A', + 'N', 'S', 'O', 'M', + 'N', 'S', 'U', 'M', + 'N', 'S', 'U', 'N', + 'N', 'T', 'A', 'A', + 'N', 'T', 'A', 'P', + 'N', 'T', 'E', 'E', + 'N', 'T', 'E', 'N', + 'N', 'T', 'O', 'G', + 'N', 'T', 'S', 'A', + 'N', 'T', 'U', 'J', + 'N', 'T', 'U', 'M', + 'N', 'T', 'U', 'U', + 'N', 'T', 'X', 'A', + 'N', 'U', '-', '1', + 'N', 'U', '-', '2', + 'N', 'U', '-', '3', + 'N', 'U', '1', '1', + 'N', 'U', 'A', 'E', + 'N', 'U', 'L', 'L', + 'N', 'U', 'N', 'G', + 'N', 'U', 'O', 'P', + 'N', 'U', 'O', 'X', + 'N', 'U', 'R', 'X', + 'N', 'U', 'U', 'N', + 'N', 'W', 'A', 'A', + 'N', 'W', 'I', 'I', + 'N', 'W', 'O', 'O', + 'N', 'X', 'H', 'A', + 'N', 'Y', 'A', 'A', + 'N', 'Y', 'A', 'H', + 'N', 'Y', 'A', 'J', + 'N', 'Y', 'A', 'M', + 'N', 'Y', 'A', 'N', + 'N', 'Y', 'C', 'A', + 'N', 'Y', 'E', 'E', + 'N', 'Y', 'E', 'H', + 'N', 'Y', 'E', 'N', + 'N', 'Y', 'E', 'T', + 'N', 'Y', 'H', 'A', + 'N', 'Y', 'I', 'E', + 'N', 'Y', 'I', 'N', + 'N', 'Y', 'I', 'P', + 'N', 'Y', 'I', 'R', + 'N', 'Y', 'I', 'S', + 'N', 'Y', 'I', 'T', + 'N', 'Y', 'I', 'X', + 'N', 'Y', 'J', 'A', + 'N', 'Y', 'O', 'A', + 'N', 'Y', 'O', 'N', + 'N', 'Y', 'O', 'O', + 'N', 'Y', 'O', 'P', + 'N', 'Y', 'O', 'T', + 'N', 'Y', 'O', 'X', + 'N', 'Y', 'U', 'E', + 'N', 'Y', 'U', 'N', + 'N', 'Y', 'U', 'O', + 'N', 'Y', 'U', 'P', + 'N', 'Y', 'U', 'T', + 'N', 'Y', 'U', 'X', + 'N', 'Y', 'W', 'A', + 'N', 'Z', 'A', 'P', + 'N', 'Z', 'A', 'Q', + 'N', 'Z', 'A', 'T', + 'N', 'Z', 'A', 'X', + 'N', 'Z', 'E', 'X', + 'N', 'Z', 'I', 'E', + 'N', 'Z', 'I', 'P', + 'N', 'Z', 'I', 'T', + 'N', 'Z', 'I', 'X', + 'N', 'Z', 'O', 'P', + 'N', 'Z', 'O', 'X', + 'N', 'Z', 'U', 'N', + 'N', 'Z', 'U', 'O', + 'N', 'Z', 'U', 'P', + 'N', 'Z', 'U', 'Q', + 'N', 'Z', 'U', 'R', + 'N', 'Z', 'U', 'X', + 'N', 'Z', 'Y', 'P', + 'N', 'Z', 'Y', 'R', + 'N', 'Z', 'Y', 'T', + 'N', 'Z', 'Y', 'X', + 'O', '-', 'E', 'O', + 'O', '-', 'Y', 'A', + 'O', '-', 'Y', 'E', + 'O', '0', '0', '1', + 'O', '0', '0', '2', + 'O', '0', '0', '3', + 'O', '0', '0', '4', + 'O', '0', '0', '5', + 'O', '0', '0', '6', + 'O', '0', '0', '7', + 'O', '0', '0', '8', + 'O', '0', '0', '9', + 'O', '0', '1', '0', + 'O', '0', '1', '1', + 'O', '0', '1', '2', + 'O', '0', '1', '3', + 'O', '0', '1', '4', + 'O', '0', '1', '5', + 'O', '0', '1', '6', + 'O', '0', '1', '7', + 'O', '0', '1', '8', + 'O', '0', '1', '9', + 'O', '0', '2', '0', + 'O', '0', '2', '1', + 'O', '0', '2', '2', + 'O', '0', '2', '3', + 'O', '0', '2', '4', + 'O', '0', '2', '5', + 'O', '0', '2', '6', + 'O', '0', '2', '7', + 'O', '0', '2', '8', + 'O', '0', '2', '9', + 'O', '0', '3', '0', + 'O', '0', '3', '1', + 'O', '0', '3', '2', + 'O', '0', '3', '3', + 'O', '0', '3', '4', + 'O', '0', '3', '5', + 'O', '0', '3', '6', + 'O', '0', '3', '7', + 'O', '0', '3', '8', + 'O', '0', '3', '9', + 'O', '0', '4', '0', + 'O', '0', '4', '1', + 'O', '0', '4', '2', + 'O', '0', '4', '3', + 'O', '0', '4', '4', + 'O', '0', '4', '5', + 'O', '0', '4', '6', + 'O', '0', '4', '7', + 'O', '0', '4', '8', + 'O', '0', '4', '9', + 'O', '0', '5', '0', + 'O', '0', '5', '1', + 'O', 'B', 'O', 'L', + 'O', 'D', 'E', 'N', + 'O', 'G', 'R', 'E', + 'O', 'J', 'O', 'D', + 'O', 'K', 'T', 'O', + 'O', 'M', 'E', 'T', + 'O', 'N', 'A', 'L', + 'O', 'N', 'A', 'P', + 'O', 'N', 'S', 'U', + 'O', 'O', 'M', 'U', + 'O', 'O', 'Z', 'E', + 'O', 'P', 'E', 'N', + 'O', 'V', 'A', 'L', + 'O', 'V', 'E', 'R', + 'O', 'X', 'I', 'A', + 'P', '0', '0', '1', + 'P', '0', '0', '2', + 'P', '0', '0', '3', + 'P', '0', '0', '4', + 'P', '0', '0', '5', + 'P', '0', '0', '6', + 'P', '0', '0', '7', + 'P', '0', '0', '8', + 'P', '0', '0', '9', + 'P', '0', '1', '0', + 'P', '0', '1', '1', + 'P', 'A', 'A', 'I', + 'P', 'A', 'A', 'M', + 'P', 'A', 'D', 'A', + 'P', 'A', 'G', 'E', + 'P', 'A', 'L', 'I', + 'P', 'A', 'L', 'M', + 'P', 'A', 'N', 'G', + 'P', 'A', 'R', 'A', + 'P', 'A', 'R', 'K', + 'P', 'A', 'R', 'T', + 'P', 'A', 'T', 'H', + 'P', 'A', 'U', 'K', + 'P', 'A', 'W', 'N', + 'P', 'E', 'A', 'R', + 'P', 'E', 'E', 'I', + 'P', 'E', 'E', 'M', + 'P', 'E', 'E', 'P', + 'P', 'E', 'S', 'O', + 'P', 'E', 'U', 'T', + 'P', 'E', 'U', 'X', + 'P', 'H', 'A', 'A', + 'P', 'H', 'A', 'B', + 'P', 'H', 'A', 'M', + 'P', 'H', 'A', 'N', + 'P', 'H', 'A', 'R', + 'P', 'H', 'E', 'E', + 'P', 'H', 'O', 'A', + 'P', 'H', 'U', 'R', + 'P', 'H', 'W', 'A', + 'P', 'I', 'C', 'K', + 'P', 'I', 'E', 'P', + 'P', 'I', 'E', 'T', + 'P', 'I', 'E', 'X', + 'P', 'I', 'K', 'O', + 'P', 'I', 'L', 'E', + 'P', 'I', 'L', 'L', + 'P', 'I', 'N', 'E', + 'P', 'I', 'N', 'G', + 'P', 'I', 'N', 'K', + 'P', 'I', 'R', '2', + 'P', 'I', 'W', 'R', + 'P', 'L', 'A', 'K', + 'P', 'L', 'O', 'W', + 'P', 'L', 'U', 'G', + 'P', 'L', 'U', 'K', + 'P', 'L', 'U', 'M', + 'P', 'L', 'U', 'S', + 'P', 'O', 'L', 'E', + 'P', 'O', 'L', 'I', + 'P', 'O', 'L', 'O', + 'P', 'O', 'O', 'N', + 'P', 'O', 'S', 'T', + 'P', 'R', 'A', 'M', + 'P', 'U', 'A', 'E', + 'P', 'U', 'A', 'Q', + 'P', 'U', 'C', 'K', + 'P', 'U', 'M', 'P', + 'P', 'U', 'N', 'G', + 'P', 'U', 'O', 'P', + 'P', 'U', 'O', 'X', + 'P', 'U', 'R', 'X', + 'P', 'U', 'U', 'T', + 'P', 'W', 'A', 'A', + 'P', 'W', 'E', 'E', + 'P', 'W', 'I', 'I', + 'P', 'W', 'O', 'O', + 'P', 'W', 'O', 'Y', + 'P', 'Y', 'R', 'X', + 'Q', '0', '0', '1', + 'Q', '0', '0', '2', + 'Q', '0', '0', '3', + 'Q', '0', '0', '4', + 'Q', '0', '0', '5', + 'Q', '0', '0', '6', + 'Q', '0', '0', '7', + 'Q', 'A', 'A', 'F', + 'Q', 'A', 'A', 'I', + 'Q', 'A', 'L', 'A', + 'Q', 'A', 'P', 'H', + 'Q', 'A', 'S', 'R', + 'Q', 'H', 'A', 'A', + 'Q', 'H', 'A', 'U', + 'Q', 'H', 'E', 'E', + 'Q', 'H', 'W', 'A', + 'Q', 'H', 'W', 'E', + 'Q', 'H', 'W', 'I', + 'Q', 'I', 'E', 'P', + 'Q', 'I', 'E', 'T', + 'Q', 'I', 'E', 'X', + 'Q', 'O', 'P', 'A', + 'Q', 'O', 'P', 'H', + 'Q', 'U', 'A', 'D', + 'Q', 'U', 'O', 'P', + 'Q', 'U', 'O', 'T', + 'Q', 'U', 'O', 'X', + 'Q', 'U', 'R', 'X', + 'Q', 'U', 'U', 'V', + 'Q', 'W', 'A', 'A', + 'Q', 'W', 'E', 'E', + 'Q', 'Y', 'A', 'A', + 'Q', 'Y', 'E', 'E', + 'Q', 'Y', 'R', 'X', + 'R', '0', '0', '1', + 'R', '0', '0', '2', + 'R', '0', '0', '3', + 'R', '0', '0', '4', + 'R', '0', '0', '5', + 'R', '0', '0', '6', + 'R', '0', '0', '7', + 'R', '0', '0', '8', + 'R', '0', '0', '9', + 'R', '0', '1', '0', + 'R', '0', '1', '1', + 'R', '0', '1', '2', + 'R', '0', '1', '3', + 'R', '0', '1', '4', + 'R', '0', '1', '5', + 'R', '0', '1', '6', + 'R', '0', '1', '7', + 'R', '0', '1', '8', + 'R', '0', '1', '9', + 'R', '0', '2', '0', + 'R', '0', '2', '1', + 'R', '0', '2', '2', + 'R', '0', '2', '3', + 'R', '0', '2', '4', + 'R', '0', '2', '5', + 'R', '0', '2', '6', + 'R', '0', '2', '7', + 'R', '0', '2', '8', + 'R', '0', '2', '9', + 'R', 'A', '-', '1', + 'R', 'A', '-', '2', + 'R', 'A', '-', '3', + 'R', 'A', '-', '4', + 'R', 'A', 'A', 'I', + 'R', 'A', 'D', 'I', + 'R', 'A', 'E', 'M', + 'R', 'A', 'F', 'E', + 'R', 'A', 'I', 'L', + 'R', 'A', 'I', 'N', + 'R', 'A', 'M', 'S', + 'R', 'A', 'N', 'A', + 'R', 'A', 'T', 'A', + 'R', 'A', 'Y', 'S', + 'R', 'D', 'E', 'L', + 'R', 'E', '-', '1', + 'R', 'E', '-', '2', + 'R', 'E', '-', '3', + 'R', 'E', '-', '4', + 'R', 'E', 'I', 'D', + 'R', 'E', 'M', 'U', + 'R', 'E', 'P', 'A', + 'R', 'E', 'P', 'H', + 'R', 'E', 'S', 'H', + 'R', 'E', 'S', 'T', + 'R', 'E', 'U', 'X', + 'R', 'G', 'Y', 'A', + 'R', 'I', '-', '1', + 'R', 'I', '-', '2', + 'R', 'I', '-', '3', + 'R', 'I', '-', '4', + 'R', 'I', '-', '5', + 'R', 'I', '-', '6', + 'R', 'I', '-', '7', + 'R', 'I', 'A', 'L', + 'R', 'I', 'C', 'E', + 'R', 'I', 'E', 'E', + 'R', 'I', 'E', 'L', + 'R', 'I', 'N', 'G', + 'R', 'I', 'R', 'A', + 'R', 'I', 'S', 'H', + 'R', 'J', 'E', 'S', + 'R', 'N', 'A', 'M', + 'R', 'O', '-', '1', + 'R', 'O', '-', '2', + 'R', 'O', '-', '3', + 'R', 'O', '-', '4', + 'R', 'O', '-', '5', + 'R', 'O', '-', '6', + 'R', 'O', 'A', 'R', + 'R', 'O', 'C', 'K', + 'R', 'O', 'L', 'L', + 'R', 'O', 'O', 'F', + 'R', 'O', 'O', 'K', + 'R', 'O', 'O', 'M', + 'R', 'O', 'O', 'T', + 'R', 'O', 'S', 'E', + 'R', 'O', 'S', 'H', + 'R', 'R', 'A', 'X', + 'R', 'R', 'E', 'H', + 'R', 'R', 'E', 'P', + 'R', 'R', 'E', 'T', + 'R', 'R', 'E', 'X', + 'R', 'R', 'O', 'P', + 'R', 'R', 'O', 'T', + 'R', 'R', 'O', 'X', + 'R', 'R', 'R', 'A', + 'R', 'R', 'U', 'O', + 'R', 'R', 'U', 'P', + 'R', 'R', 'U', 'R', + 'R', 'R', 'U', 'T', + 'R', 'R', 'U', 'X', + 'R', 'R', 'Y', 'P', + 'R', 'R', 'Y', 'R', + 'R', 'R', 'Y', 'T', + 'R', 'R', 'Y', 'X', + 'R', 'U', '-', '1', + 'R', 'U', '-', '2', + 'R', 'U', '-', '3', + 'R', 'U', '-', '4', + 'R', 'U', '-', '5', + 'R', 'U', '-', '6', + 'R', 'U', 'I', 'S', + 'R', 'U', 'L', 'E', + 'R', 'U', 'M', 'I', + 'R', 'U', 'O', 'P', + 'R', 'U', 'O', 'X', + 'R', 'U', 'R', 'X', + 'R', 'U', 'S', 'I', + 'R', 'W', 'A', 'A', + 'R', 'W', 'E', 'E', + 'R', 'W', 'I', 'I', + 'R', 'W', 'O', 'O', + 'R', 'Y', 'R', 'X', + 'S', '0', '0', '1', + 'S', '0', '0', '2', + 'S', '0', '0', '3', + 'S', '0', '0', '4', + 'S', '0', '0', '5', + 'S', '0', '0', '6', + 'S', '0', '0', '7', + 'S', '0', '0', '8', + 'S', '0', '0', '9', + 'S', '0', '1', '0', + 'S', '0', '1', '1', + 'S', '0', '1', '2', + 'S', '0', '1', '3', + 'S', '0', '1', '4', + 'S', '0', '1', '5', + 'S', '0', '1', '6', + 'S', '0', '1', '7', + 'S', '0', '1', '8', + 'S', '0', '1', '9', + 'S', '0', '2', '0', + 'S', '0', '2', '1', + 'S', '0', '2', '2', + 'S', '0', '2', '3', + 'S', '0', '2', '4', + 'S', '0', '2', '5', + 'S', '0', '2', '6', + 'S', '0', '2', '7', + 'S', '0', '2', '8', + 'S', '0', '2', '9', + 'S', '0', '3', '0', + 'S', '0', '3', '1', + 'S', '0', '3', '2', + 'S', '0', '3', '3', + 'S', '0', '3', '4', + 'S', '0', '3', '5', + 'S', '0', '3', '6', + 'S', '0', '3', '7', + 'S', '0', '3', '8', + 'S', '0', '3', '9', + 'S', '0', '4', '0', + 'S', '0', '4', '1', + 'S', '0', '4', '2', + 'S', '0', '4', '3', + 'S', '0', '4', '4', + 'S', '0', '4', '5', + 'S', '0', '4', '6', + 'S', 'A', '-', '1', + 'S', 'A', '-', '2', + 'S', 'A', '-', '3', + 'S', 'A', '-', '4', + 'S', 'A', '-', '5', + 'S', 'A', '-', '6', + 'S', 'A', '-', '7', + 'S', 'A', '-', '8', + 'S', 'A', '-', 'I', + 'S', 'A', 'A', 'I', + 'S', 'A', 'A', 'T', + 'S', 'A', 'D', 'E', + 'S', 'A', 'G', 'A', + 'S', 'A', 'I', 'L', + 'S', 'A', 'K', 'E', + 'S', 'A', 'L', 'A', + 'S', 'A', 'L', 'T', + 'S', 'A', 'N', 'D', + 'S', 'A', 'P', 'A', + 'S', 'A', 'R', 'A', + 'S', 'A', 'R', 'I', + 'S', 'A', 'S', 'H', + 'S', 'B', 'U', 'B', + 'S', 'C', 'A', 'N', + 'S', 'C', 'W', 'A', + 'S', 'E', '-', '1', + 'S', 'E', '-', '2', + 'S', 'E', '-', '3', + 'S', 'E', '-', '4', + 'S', 'E', '-', '5', + 'S', 'E', 'A', 'L', + 'S', 'E', 'A', 'T', + 'S', 'E', 'E', 'N', + 'S', 'E', 'E', 'V', + 'S', 'E', 'L', 'F', + 'S', 'E', 'M', 'K', + 'S', 'E', 'U', 'X', + 'S', 'E', 'Y', 'K', + 'S', 'G', 'A', 'B', + 'S', 'G', 'A', 'W', + 'S', 'G', 'O', 'R', + 'S', 'G', 'R', 'A', + 'S', 'H', 'A', '3', + 'S', 'H', 'A', '6', + 'S', 'H', 'A', 'A', + 'S', 'H', 'A', 'D', + 'S', 'H', 'A', 'K', + 'S', 'H', 'A', 'N', + 'S', 'H', 'A', 'P', + 'S', 'H', 'A', 'T', + 'S', 'H', 'A', 'X', + 'S', 'H', 'A', 'Y', + 'S', 'H', 'E', 'E', + 'S', 'H', 'E', 'I', + 'S', 'H', 'E', 'N', + 'S', 'H', 'E', 'P', + 'S', 'H', 'E', 'T', + 'S', 'H', 'E', 'X', + 'S', 'H', 'H', 'A', + 'S', 'H', 'I', 'D', + 'S', 'H', 'I', 'I', + 'S', 'H', 'I', 'M', + 'S', 'H', 'I', 'N', + 'S', 'H', 'I', 'P', + 'S', 'H', 'I', 'Q', + 'S', 'H', 'I', 'R', + 'S', 'H', 'O', 'A', + 'S', 'H', 'O', 'E', + 'S', 'H', 'O', 'G', + 'S', 'H', 'O', 'O', + 'S', 'H', 'O', 'P', + 'S', 'H', 'O', 'Q', + 'S', 'H', 'O', 'T', + 'S', 'H', 'O', 'U', + 'S', 'H', 'O', 'X', + 'S', 'H', 'O', 'Y', + 'S', 'H', 'R', 'A', + 'S', 'H', 'R', 'I', + 'S', 'H', 'R', 'O', + 'S', 'H', 'T', 'A', + 'S', 'H', 'U', '2', + 'S', 'H', 'U', 'L', + 'S', 'H', 'U', 'M', + 'S', 'H', 'U', 'O', + 'S', 'H', 'U', 'P', + 'S', 'H', 'U', 'R', + 'S', 'H', 'U', 'T', + 'S', 'H', 'U', 'X', + 'S', 'H', 'W', 'A', + 'S', 'H', 'W', 'E', + 'S', 'H', 'W', 'I', + 'S', 'H', 'W', 'O', + 'S', 'H', 'Y', 'A', + 'S', 'H', 'Y', 'E', + 'S', 'H', 'Y', 'P', + 'S', 'H', 'Y', 'R', + 'S', 'H', 'Y', 'T', + 'S', 'H', 'Y', 'X', + 'S', 'I', '-', '1', + 'S', 'I', '-', '2', + 'S', 'I', '-', '3', + 'S', 'I', '-', '4', + 'S', 'I', '-', '5', + 'S', 'I', '-', '6', + 'S', 'I', 'B', 'E', + 'S', 'I', 'D', 'E', + 'S', 'I', 'E', 'E', + 'S', 'I', 'E', 'P', + 'S', 'I', 'E', 'X', + 'S', 'I', 'G', '4', + 'S', 'I', 'G', 'N', + 'S', 'I', 'K', '2', + 'S', 'I', 'K', 'I', + 'S', 'I', 'L', 'K', + 'S', 'I', 'M', 'A', + 'S', 'I', 'N', 'E', + 'S', 'I', 'O', 'S', + 'S', 'I', 'S', 'A', + 'S', 'I', 'T', 'E', + 'S', 'I', 'Z', 'E', + 'S', 'K', 'A', 'N', + 'S', 'K', 'I', 'N', + 'S', 'K', 'W', 'A', + 'S', 'L', 'E', 'D', + 'S', 'L', 'O', 'T', + 'S', 'L', 'O', 'W', + 'S', 'L', 'U', 'R', + 'S', 'N', 'A', 'P', + 'S', 'N', 'O', 'W', + 'S', 'O', '-', '1', + 'S', 'O', '-', '2', + 'S', 'O', '-', '3', + 'S', 'O', '-', '4', + 'S', 'O', '-', '5', + 'S', 'O', '-', '6', + 'S', 'O', '-', '7', + 'S', 'O', 'A', 'P', + 'S', 'O', 'F', 'T', + 'S', 'O', 'N', 'G', + 'S', 'O', 'O', 'N', + 'S', 'O', 'R', 'A', + 'S', 'O', 'R', 'I', + 'S', 'P', 'O', 'T', + 'S', 'P', 'W', 'A', + 'S', 'S', 'A', 'A', + 'S', 'S', 'A', 'P', + 'S', 'S', 'A', 'T', + 'S', 'S', 'A', 'X', + 'S', 'S', 'E', 'E', + 'S', 'S', 'E', 'P', + 'S', 'S', 'E', 'X', + 'S', 'S', 'H', 'E', + 'S', 'S', 'I', 'E', + 'S', 'S', 'I', 'P', + 'S', 'S', 'I', 'T', + 'S', 'S', 'I', 'X', + 'S', 'S', 'O', 'P', + 'S', 'S', 'O', 'T', + 'S', 'S', 'O', 'X', + 'S', 'S', 'U', 'P', + 'S', 'S', 'U', 'T', + 'S', 'S', 'U', 'U', + 'S', 'S', 'U', 'X', + 'S', 'S', 'Y', 'P', + 'S', 'S', 'Y', 'R', + 'S', 'S', 'Y', 'T', + 'S', 'S', 'Y', 'X', + 'S', 'T', 'A', 'N', + 'S', 'T', 'A', 'R', + 'S', 'T', 'E', 'M', + 'S', 'T', 'E', 'P', + 'S', 'T', 'O', 'P', + 'S', 'T', 'W', 'A', + 'S', 'U', '-', '1', + 'S', 'U', '-', '2', + 'S', 'U', '-', '3', + 'S', 'U', '-', '4', + 'S', 'U', '-', '5', + 'S', 'U', '-', '6', + 'S', 'U', '-', '7', + 'S', 'U', '-', '8', + 'S', 'U', 'A', 'B', + 'S', 'U', 'A', 'E', + 'S', 'U', 'A', 'M', + 'S', 'U', 'C', 'K', + 'S', 'U', 'D', '2', + 'S', 'U', 'I', 'T', + 'S', 'U', 'K', 'U', + 'S', 'U', 'N', 'G', + 'S', 'U', 'O', 'P', + 'S', 'U', 'O', 'X', + 'S', 'U', 'R', '9', + 'S', 'U', 'R', 'E', + 'S', 'U', 'R', 'X', + 'S', 'W', 'A', 'A', + 'S', 'W', 'A', 'N', + 'S', 'W', 'I', 'I', + 'S', 'W', 'O', 'O', + 'S', 'Y', 'R', 'X', + 'S', 'Z', 'A', 'A', + 'S', 'Z', 'E', 'E', + 'S', 'Z', 'W', 'A', + 'S', 'Z', 'W', 'G', + 'T', '0', '0', '1', + 'T', '0', '0', '2', + 'T', '0', '0', '3', + 'T', '0', '0', '4', + 'T', '0', '0', '5', + 'T', '0', '0', '6', + 'T', '0', '0', '7', + 'T', '0', '0', '8', + 'T', '0', '0', '9', + 'T', '0', '1', '0', + 'T', '0', '1', '1', + 'T', '0', '1', '2', + 'T', '0', '1', '3', + 'T', '0', '1', '4', + 'T', '0', '1', '5', + 'T', '0', '1', '6', + 'T', '0', '1', '7', + 'T', '0', '1', '8', + 'T', '0', '1', '9', + 'T', '0', '2', '0', + 'T', '0', '2', '1', + 'T', '0', '2', '2', + 'T', '0', '2', '3', + 'T', '0', '2', '4', + 'T', '0', '2', '5', + 'T', '0', '2', '6', + 'T', '0', '2', '7', + 'T', '0', '2', '8', + 'T', '0', '2', '9', + 'T', '0', '3', '0', + 'T', '0', '3', '1', + 'T', '0', '3', '2', + 'T', '0', '3', '3', + 'T', '0', '3', '4', + 'T', '0', '3', '5', + 'T', '0', '3', '6', + 'T', 'A', '-', '1', + 'T', 'A', '-', '2', + 'T', 'A', '-', '3', + 'T', 'A', '-', '4', + 'T', 'A', 'A', 'F', + 'T', 'A', 'A', 'I', + 'T', 'A', 'A', 'M', + 'T', 'A', 'A', 'Q', + 'T', 'A', 'B', 'S', + 'T', 'A', 'C', 'K', + 'T', 'A', 'C', 'O', + 'T', 'A', 'E', 'N', + 'T', 'A', 'I', 'L', + 'T', 'A', 'K', '4', + 'T', 'A', 'K', 'E', + 'T', 'A', 'L', 'L', + 'T', 'A', 'N', 'A', + 'T', 'A', 'N', 'G', + 'T', 'A', 'N', 'K', + 'T', 'A', 'P', 'E', + 'T', 'A', 'U', 'M', + 'T', 'A', 'W', 'A', + 'T', 'A', 'X', 'I', + 'T', 'C', 'H', 'E', + 'T', 'E', '-', '1', + 'T', 'E', '-', '2', + 'T', 'E', '-', '3', + 'T', 'E', '-', '4', + 'T', 'E', '-', '5', + 'T', 'E', '-', '6', + 'T', 'E', '-', '7', + 'T', 'E', '-', '8', + 'T', 'E', '-', '9', + 'T', 'E', '-', 'U', + 'T', 'E', 'A', 'R', + 'T', 'E', 'L', 'U', + 'T', 'E', 'N', 'S', + 'T', 'E', 'N', 'T', + 'T', 'E', 'N', 'U', + 'T', 'E', 'S', 'H', + 'T', 'E', 'S', 'T', + 'T', 'E', 'T', 'H', + 'T', 'E', 'U', 'N', + 'T', 'E', 'U', 'T', + 'T', 'E', 'X', 'T', + 'T', 'H', 'A', 'A', + 'T', 'H', 'A', 'I', + 'T', 'H', 'A', 'J', + 'T', 'H', 'A', 'L', + 'T', 'H', 'A', 'M', + 'T', 'H', 'A', 'N', + 'T', 'H', 'A', 'W', + 'T', 'H', 'E', 'A', + 'T', 'H', 'E', 'E', + 'T', 'H', 'E', 'H', + 'T', 'H', 'E', 'N', + 'T', 'H', 'E', 'S', + 'T', 'H', 'E', 'Y', + 'T', 'H', 'I', 'I', + 'T', 'H', 'I', 'N', + 'T', 'H', 'O', 'A', + 'T', 'H', 'O', 'J', + 'T', 'H', 'O', 'M', + 'T', 'H', 'O', 'O', + 'T', 'H', 'O', 'U', + 'T', 'H', 'W', 'A', + 'T', 'H', 'W', 'E', + 'T', 'H', 'W', 'I', + 'T', 'H', 'W', 'O', + 'T', 'I', '-', '1', + 'T', 'I', '-', '2', + 'T', 'I', '-', '3', + 'T', 'I', '-', '4', + 'T', 'I', '-', '5', + 'T', 'I', '-', '6', + 'T', 'I', '-', '7', + 'T', 'I', 'C', 'K', + 'T', 'I', 'E', 'P', + 'T', 'I', 'E', 'X', + 'T', 'I', 'L', 'E', + 'T', 'I', 'L', 'T', + 'T', 'I', 'M', 'E', + 'T', 'I', 'N', 'G', + 'T', 'I', 'N', 'Y', + 'T', 'I', 'T', 'A', + 'T', 'I', 'W', 'N', + 'T', 'I', 'W', 'R', + 'T', 'L', 'E', 'E', + 'T', 'L', 'H', 'A', + 'T', 'L', 'H', 'E', + 'T', 'L', 'H', 'I', + 'T', 'L', 'H', 'O', + 'T', 'L', 'H', 'U', + 'T', 'O', '-', '1', + 'T', 'O', '-', '2', + 'T', 'O', '-', '3', + 'T', 'O', '-', '4', + 'T', 'O', '-', '5', + 'T', 'O', '-', '6', + 'T', 'O', 'D', 'O', + 'T', 'O', 'N', 'E', + 'T', 'O', 'N', 'G', + 'T', 'O', 'O', 'N', + 'T', 'O', 'T', 'O', + 'T', 'R', 'A', 'M', + 'T', 'R', 'A', 'P', + 'T', 'R', 'A', 'Y', + 'T', 'R', 'E', 'E', + 'T', 'R', 'I', 'A', + 'T', 'R', 'U', 'E', + 'T', 'S', 'A', 'A', + 'T', 'S', 'A', 'B', + 'T', 'S', 'E', 'E', + 'T', 'S', 'H', 'A', + 'T', 'S', 'H', 'E', + 'T', 'S', 'I', 'U', + 'T', 'S', 'O', 'V', + 'T', 'S', 'S', 'A', + 'T', 'S', 'S', 'E', + 'T', 'S', 'W', 'A', + 'T', 'S', 'W', 'B', + 'T', 'S', 'W', 'E', + 'T', 'T', 'A', 'A', + 'T', 'T', 'E', 'E', + 'T', 'T', 'E', 'H', + 'T', 'T', 'H', 'A', + 'T', 'T', 'H', 'E', + 'T', 'T', 'H', 'I', + 'T', 'T', 'H', 'O', + 'T', 'T', 'H', 'U', + 'T', 'T', 'S', 'A', + 'T', 'T', 'S', 'E', + 'T', 'T', 'S', 'I', + 'T', 'T', 'S', 'O', + 'T', 'T', 'S', 'U', + 'T', 'T', 'T', 'A', + 'T', 'U', '-', '1', + 'T', 'U', '-', '2', + 'T', 'U', '-', '3', + 'T', 'U', '-', '4', + 'T', 'U', 'A', 'E', + 'T', 'U', 'B', 'E', + 'T', 'U', 'G', '2', + 'T', 'U', 'O', 'P', + 'T', 'U', 'O', 'T', + 'T', 'U', 'O', 'X', + 'T', 'U', 'R', 'N', + 'T', 'U', 'R', 'U', + 'T', 'U', 'R', 'X', + 'T', 'W', 'A', 'A', + 'T', 'W', 'I', 'I', + 'T', 'W', 'O', 'O', + 'T', 'X', 'W', 'V', + 'T', 'Y', 'A', 'Y', + 'T', 'Y', 'P', 'E', + 'T', 'Z', 'A', 'A', + 'T', 'Z', 'E', 'E', + 'T', 'Z', 'I', 'R', + 'T', 'Z', 'O', 'A', + 'U', '-', 'A', 'E', + 'U', '-', 'Y', 'E', + 'U', '0', '0', '1', + 'U', '0', '0', '2', + 'U', '0', '0', '3', + 'U', '0', '0', '4', + 'U', '0', '0', '5', + 'U', '0', '0', '6', + 'U', '0', '0', '7', + 'U', '0', '0', '8', + 'U', '0', '0', '9', + 'U', '0', '1', '0', + 'U', '0', '1', '1', + 'U', '0', '1', '2', + 'U', '0', '1', '3', + 'U', '0', '1', '4', + 'U', '0', '1', '5', + 'U', '0', '1', '6', + 'U', '0', '1', '7', + 'U', '0', '1', '8', + 'U', '0', '1', '9', + 'U', '0', '2', '0', + 'U', '0', '2', '1', + 'U', '0', '2', '2', + 'U', '0', '2', '3', + 'U', '0', '2', '4', + 'U', '0', '2', '5', + 'U', '0', '2', '6', + 'U', '0', '2', '7', + 'U', '0', '2', '8', + 'U', '0', '2', '9', + 'U', '0', '3', '0', + 'U', '0', '3', '1', + 'U', '0', '3', '2', + 'U', '0', '3', '3', + 'U', '0', '3', '4', + 'U', '0', '3', '5', + 'U', '0', '3', '6', + 'U', '0', '3', '7', + 'U', '0', '3', '8', + 'U', '0', '3', '9', + 'U', '0', '4', '0', + 'U', '0', '4', '1', + 'U', '0', '4', '2', + 'U', 'A', 'N', 'G', + 'U', 'A', 'T', 'H', + 'U', 'D', 'U', 'G', + 'U', 'I', 'U', 'C', + 'U', 'I', 'U', 'Q', + 'U', 'I', 'U', 'X', + 'U', 'I', 'U', 'Z', + 'U', 'M', 'U', 'M', + 'U', 'N', 'A', 'P', + 'U', 'N', 'D', 'O', + 'U', 'N', 'I', 'T', + 'U', 'R', 'I', '3', + 'U', 'R', 'U', 'S', + 'U', 'R', 'U', 'Z', + 'U', 'S', 'E', 'D', + 'U', 'S', 'H', '2', + 'U', 'S', 'H', 'X', + 'U', 'S', 'S', 'U', + 'U', 'U', 'U', '2', + 'U', 'U', 'U', '3', + 'U', 'U', 'U', 'U', + 'V', '0', '0', '1', + 'V', '0', '0', '2', + 'V', '0', '0', '3', + 'V', '0', '0', '4', + 'V', '0', '0', '5', + 'V', '0', '0', '6', + 'V', '0', '0', '7', + 'V', '0', '0', '8', + 'V', '0', '0', '9', + 'V', '0', '1', '0', + 'V', '0', '1', '1', + 'V', '0', '1', '2', + 'V', '0', '1', '3', + 'V', '0', '1', '4', + 'V', '0', '1', '5', + 'V', '0', '1', '6', + 'V', '0', '1', '7', + 'V', '0', '1', '8', + 'V', '0', '1', '9', + 'V', '0', '2', '0', + 'V', '0', '2', '1', + 'V', '0', '2', '2', + 'V', '0', '2', '3', + 'V', '0', '2', '4', + 'V', '0', '2', '5', + 'V', '0', '2', '6', + 'V', '0', '2', '7', + 'V', '0', '2', '8', + 'V', '0', '2', '9', + 'V', '0', '3', '0', + 'V', '0', '3', '1', + 'V', '0', '3', '2', + 'V', '0', '3', '3', + 'V', '0', '3', '4', + 'V', '0', '3', '5', + 'V', '0', '3', '6', + 'V', '0', '3', '7', + 'V', '0', '3', '8', + 'V', '0', '3', '9', + 'V', '0', '4', '0', + 'V', 'A', 'N', 'E', + 'V', 'E', 'D', 'E', + 'V', 'E', 'I', 'L', + 'V', 'E', 'L', 'I', + 'V', 'E', 'N', 'D', + 'V', 'E', 'R', 'Y', + 'V', 'E', 'S', 'T', + 'V', 'E', 'U', 'M', + 'V', 'E', 'U', 'X', + 'V', 'E', 'Y', 'Z', + 'V', 'I', 'D', 'A', + 'V', 'I', 'D', 'J', + 'V', 'I', 'E', 'P', + 'V', 'I', 'E', 'T', + 'V', 'I', 'E', 'X', + 'V', 'I', 'N', 'E', + 'V', 'I', 'Y', 'O', + 'V', 'O', 'I', 'D', + 'V', 'O', 'O', 'I', + 'V', 'U', 'E', 'Q', + 'V', 'U', 'R', 'X', + 'V', 'Y', 'R', 'X', + 'W', '0', '0', '1', + 'W', '0', '0', '2', + 'W', '0', '0', '3', + 'W', '0', '0', '4', + 'W', '0', '0', '5', + 'W', '0', '0', '6', + 'W', '0', '0', '7', + 'W', '0', '0', '8', + 'W', '0', '0', '9', + 'W', '0', '1', '0', + 'W', '0', '1', '1', + 'W', '0', '1', '2', + 'W', '0', '1', '3', + 'W', '0', '1', '4', + 'W', '0', '1', '5', + 'W', '0', '1', '6', + 'W', '0', '1', '7', + 'W', '0', '1', '8', + 'W', '0', '1', '9', + 'W', '0', '2', '0', + 'W', '0', '2', '1', + 'W', '0', '2', '2', + 'W', '0', '2', '3', + 'W', '0', '2', '4', + 'W', '0', '2', '5', + 'W', 'A', '-', '1', + 'W', 'A', '-', '2', + 'W', 'A', '-', '3', + 'W', 'A', '-', '4', + 'W', 'A', '-', '5', + 'W', 'A', 'E', 'N', + 'W', 'A', 'L', 'K', + 'W', 'A', 'L', 'L', + 'W', 'A', 'N', 'D', + 'W', 'A', 'V', 'E', + 'W', 'A', 'V', 'Y', + 'W', 'E', '-', '1', + 'W', 'E', '-', '2', + 'W', 'E', '-', '3', + 'W', 'E', '-', '4', + 'W', 'E', 'E', 'N', + 'W', 'E', 'L', 'L', + 'W', 'E', 'S', 'T', + 'W', 'E', 'U', 'X', + 'W', 'I', '-', '1', + 'W', 'I', '-', '2', + 'W', 'I', '-', '3', + 'W', 'I', '-', '4', + 'W', 'I', '-', '5', + 'W', 'I', 'D', 'E', + 'W', 'I', 'N', 'D', + 'W', 'I', 'N', 'E', + 'W', 'I', 'N', 'G', + 'W', 'I', 'N', 'K', + 'W', 'I', 'T', 'H', + 'W', 'O', '-', '1', + 'W', 'O', '-', '2', + 'W', 'O', '-', '3', + 'W', 'O', '-', '4', + 'W', 'O', '-', '5', + 'W', 'O', '-', '6', + 'W', 'O', '-', '7', + 'W', 'O', 'L', 'F', + 'W', 'O', 'O', 'D', + 'W', 'O', 'O', 'L', + 'W', 'O', 'O', 'N', + 'W', 'O', 'R', 'D', + 'W', 'O', 'R', 'K', + 'W', 'O', 'R', 'M', + 'W', 'R', 'A', 'P', + 'W', 'U', 'L', 'U', + 'W', 'U', 'O', 'P', + 'W', 'U', 'O', 'X', + 'W', 'Y', 'N', 'N', + 'X', '0', '0', '1', + 'X', '0', '0', '2', + 'X', '0', '0', '3', + 'X', '0', '0', '4', + 'X', '0', '0', '5', + 'X', '0', '0', '6', + 'X', '0', '0', '7', + 'X', '0', '0', '8', + 'X', 'A', 'P', 'H', + 'X', 'A', 'U', 'S', + 'X', 'E', 'Y', 'N', + 'X', 'I', 'A', 'B', + 'X', 'I', 'E', 'P', + 'X', 'I', 'E', 'T', + 'X', 'I', 'E', 'X', + 'X', 'O', 'P', 'H', + 'X', 'U', 'O', 'X', + 'X', 'W', 'A', 'A', + 'X', 'W', 'E', 'E', + 'X', 'Y', 'A', 'A', + 'X', 'Y', 'E', 'E', + 'X', 'Y', 'O', 'O', + 'X', 'Y', 'R', 'X', + 'Y', '0', '0', '1', + 'Y', '0', '0', '2', + 'Y', '0', '0', '3', + 'Y', '0', '0', '4', + 'Y', '0', '0', '5', + 'Y', '0', '0', '6', + 'Y', '0', '0', '7', + 'Y', '0', '0', '8', + 'Y', 'A', '-', '1', + 'Y', 'A', '-', '2', + 'Y', 'A', '-', '3', + 'Y', 'A', '-', '4', + 'Y', 'A', '-', '5', + 'Y', 'A', '-', 'O', + 'Y', 'A', '-', 'U', + 'Y', 'A', 'A', 'I', + 'Y', 'A', 'B', 'H', + 'Y', 'A', 'C', 'H', + 'Y', 'A', 'D', 'D', + 'Y', 'A', 'D', 'H', + 'Y', 'A', 'F', 'U', + 'Y', 'A', 'G', 'H', + 'Y', 'A', 'G', 'N', + 'Y', 'A', 'H', 'H', + 'Y', 'A', 'K', 'H', + 'Y', 'A', 'N', 'G', + 'Y', 'A', 'R', 'N', + 'Y', 'A', 'R', 'R', + 'Y', 'A', 'S', 'H', + 'Y', 'A', 'S', 'S', + 'Y', 'A', 'T', 'H', + 'Y', 'A', 'T', 'I', + 'Y', 'A', 'T', 'T', + 'Y', 'A', 'W', 'N', + 'Y', 'A', 'Y', 'D', + 'Y', 'A', 'Z', 'H', + 'Y', 'A', 'Z', 'Z', + 'Y', 'E', 'A', 'R', + 'Y', 'E', 'E', 'G', + 'Y', 'E', 'I', 'N', + 'Y', 'E', 'R', 'I', + 'Y', 'E', 'R', 'U', + 'Y', 'E', 'U', 'M', + 'Y', 'E', 'U', 'Q', + 'Y', 'E', 'U', 'X', + 'Y', 'F', 'E', 'N', + 'Y', 'I', '-', 'U', + 'Y', 'I', 'E', 'E', + 'Y', 'I', 'E', 'P', + 'Y', 'I', 'E', 'T', + 'Y', 'I', 'E', 'X', + 'Y', 'I', 'N', 'G', + 'Y', 'I', 'W', 'N', + 'Y', 'O', '-', '1', + 'Y', 'O', '-', '2', + 'Y', 'O', '-', '3', + 'Y', 'O', '-', '4', + 'Y', 'O', '-', '5', + 'Y', 'O', '-', '6', + 'Y', 'O', '-', 'A', + 'Y', 'O', '-', 'I', + 'Y', 'O', '-', 'O', + 'Y', 'O', 'D', 'H', + 'Y', 'O', 'G', 'H', + 'Y', 'O', 'M', 'O', + 'Y', 'O', 'R', 'I', + 'Y', 'O', 'W', 'D', + 'Y', 'U', '-', '1', + 'Y', 'U', '-', '2', + 'Y', 'U', '-', '3', + 'Y', 'U', '-', '4', + 'Y', 'U', '-', 'A', + 'Y', 'U', '-', 'E', + 'Y', 'U', '-', 'I', + 'Y', 'U', '-', 'O', + 'Y', 'U', '-', 'U', + 'Y', 'U', 'A', 'N', + 'Y', 'U', 'D', 'H', + 'Y', 'U', 'E', 'Q', + 'Y', 'U', 'O', 'M', + 'Y', 'U', 'O', 'P', + 'Y', 'U', 'O', 'T', + 'Y', 'U', 'O', 'X', + 'Y', 'U', 'P', 'I', + 'Y', 'U', 'R', 'X', + 'Y', 'W', 'A', 'A', + 'Y', 'W', 'I', 'I', + 'Y', 'W', 'O', 'O', + 'Y', 'Y', 'A', 'A', + 'Y', 'Y', 'R', 'X', + 'Z', '0', '0', '1', + 'Z', '0', '0', '2', + 'Z', '0', '0', '3', + 'Z', '0', '0', '4', + 'Z', '0', '0', '5', + 'Z', '0', '0', '6', + 'Z', '0', '0', '7', + 'Z', '0', '0', '8', + 'Z', '0', '0', '9', + 'Z', '0', '1', '0', + 'Z', '0', '1', '1', + 'Z', '0', '1', '2', + 'Z', '0', '1', '3', + 'Z', '0', '1', '4', + 'Z', '0', '1', '5', + 'Z', '0', '1', '6', + 'Z', 'A', 'E', 'F', + 'Z', 'A', 'I', 'N', + 'Z', 'A', 'M', 'X', + 'Z', 'A', 'R', 'L', + 'Z', 'A', 'T', 'A', + 'Z', 'A', 'Y', 'N', + 'Z', 'E', 'L', 'O', + 'Z', 'E', 'R', 'O', + 'Z', 'E', 'T', 'A', + 'Z', 'E', 'U', 'S', + 'Z', 'H', 'A', 'A', + 'Z', 'H', 'A', 'P', + 'Z', 'H', 'A', 'R', + 'Z', 'H', 'A', 'T', + 'Z', 'H', 'A', 'X', + 'Z', 'H', 'E', 'E', + 'Z', 'H', 'E', 'P', + 'Z', 'H', 'E', 'T', + 'Z', 'H', 'E', 'X', + 'Z', 'H', 'I', 'L', + 'Z', 'H', 'O', 'I', + 'Z', 'H', 'O', 'O', + 'Z', 'H', 'O', 'P', + 'Z', 'H', 'O', 'T', + 'Z', 'H', 'O', 'X', + 'Z', 'H', 'U', 'O', + 'Z', 'H', 'U', 'P', + 'Z', 'H', 'U', 'R', + 'Z', 'H', 'U', 'T', + 'Z', 'H', 'U', 'X', + 'Z', 'H', 'W', 'A', + 'Z', 'H', 'W', 'E', + 'Z', 'H', 'Y', 'P', + 'Z', 'H', 'Y', 'R', + 'Z', 'H', 'Y', 'T', + 'Z', 'H', 'Y', 'X', + 'Z', 'I', 'D', 'A', + 'Z', 'I', 'E', 'P', + 'Z', 'I', 'E', 'X', + 'Z', 'I', 'Z', '2', + 'Z', 'S', 'H', 'A', + 'Z', 'U', 'O', 'P', + 'Z', 'U', 'O', 'X', + 'Z', 'U', 'R', 'X', + 'Z', 'W', 'N', 'J', + 'Z', 'W', 'S', 'P', + 'Z', 'Y', 'R', 'X', + 'Z', 'Z', 'A', 'A', + 'Z', 'Z', 'A', 'P', + 'Z', 'Z', 'A', 'T', + 'Z', 'Z', 'A', 'X', + 'Z', 'Z', 'E', 'E', + 'Z', 'Z', 'E', 'P', + 'Z', 'Z', 'E', 'X', + 'Z', 'Z', 'I', 'E', + 'Z', 'Z', 'I', 'P', + 'Z', 'Z', 'I', 'T', + 'Z', 'Z', 'I', 'X', + 'Z', 'Z', 'O', 'P', + 'Z', 'Z', 'O', 'X', + 'Z', 'Z', 'S', 'A', + 'Z', 'Z', 'U', 'P', + 'Z', 'Z', 'U', 'R', + 'Z', 'Z', 'U', 'X', + 'Z', 'Z', 'Y', 'A', + 'Z', 'Z', 'Y', 'P', + 'Z', 'Z', 'Y', 'R', + 'Z', 'Z', 'Y', 'T', + 'Z', 'Z', 'Y', 'X', + '-', 'C', 'H', 'A', 'L', + '-', 'C', 'H', 'A', 'R', + '-', 'D', 'Z', 'U', 'D', + '-', 'P', 'H', 'R', 'U', + 'A', '0', '0', '5', 'A', + 'A', '0', '0', '6', 'A', + 'A', '0', '0', '6', 'B', + 'A', '0', '1', '0', 'A', + 'A', '0', '1', '4', 'A', + 'A', '0', '1', '7', 'A', + 'A', '0', '2', '6', 'A', + 'A', '0', '2', '8', 'B', + 'A', '0', '3', '2', 'A', + 'A', '0', '3', '9', 'A', + 'A', '0', '4', '0', 'A', + 'A', '0', '4', '1', 'A', + 'A', '0', '4', '2', 'A', + 'A', '0', '4', '3', 'A', + 'A', '0', '4', '5', 'A', + 'A', '0', '4', '6', 'A', + 'A', '0', '4', '6', 'B', + 'A', '0', '6', '6', 'A', + 'A', '0', '6', '6', 'B', + 'A', '0', '6', '6', 'C', + 'A', '0', '9', '7', 'A', + 'A', '0', '9', '8', 'A', + 'A', '1', '0', '0', 'A', + 'A', '1', '0', '1', 'A', + 'A', '1', '0', '2', 'A', + 'A', '1', '0', '4', 'A', + 'A', '1', '0', '4', 'B', + 'A', '1', '0', '4', 'C', + 'A', '1', '0', '5', 'A', + 'A', '1', '0', '5', 'B', + 'A', '1', '0', '7', 'A', + 'A', '1', '0', '7', 'B', + 'A', '1', '0', '7', 'C', + 'A', '1', '1', '0', 'A', + 'A', '1', '1', '0', 'B', + 'A', '1', '1', '5', 'A', + 'A', '1', '2', '0', 'B', + 'A', '1', '2', '5', 'A', + 'A', '1', '3', '1', 'C', + 'A', '1', '3', '5', 'A', + 'A', '2', '0', '2', 'A', + 'A', '2', '0', '2', 'B', + 'A', '2', '0', '7', 'A', + 'A', '2', '0', '9', 'A', + 'A', '2', '1', '5', 'A', + 'A', '2', '1', '6', 'A', + 'A', '2', '2', '7', 'A', + 'A', '2', '6', '7', 'A', + 'A', '2', '8', '9', 'A', + 'A', '2', '9', '4', 'A', + 'A', '2', '9', '9', 'A', + 'A', '3', '0', '9', 'A', + 'A', '3', '0', '9', 'B', + 'A', '3', '0', '9', 'C', + 'A', '3', '1', '3', 'A', + 'A', '3', '1', '3', 'B', + 'A', '3', '1', '3', 'C', + 'A', '3', '2', '9', 'A', + 'A', '3', '3', '2', 'A', + 'A', '3', '3', '2', 'B', + 'A', '3', '3', '2', 'C', + 'A', '3', '3', '6', 'A', + 'A', '3', '3', '6', 'B', + 'A', '3', '3', '6', 'C', + 'A', '3', '5', '9', 'A', + 'A', '3', '6', '4', 'A', + 'A', '3', '6', '8', 'A', + 'A', '3', '7', '1', 'A', + 'A', '3', '8', '1', 'A', + 'A', '3', '8', '3', 'A', + 'A', '3', '8', '6', 'A', + 'A', '4', '1', '0', 'A', + 'A', '4', '5', '0', 'A', + 'A', '4', '5', '7', 'A', + 'A', 'A', '0', '0', '1', + 'A', 'A', '0', '0', '2', + 'A', 'A', '0', '0', '3', + 'A', 'A', '0', '0', '4', + 'A', 'A', '0', '0', '5', + 'A', 'A', '0', '0', '6', + 'A', 'A', '0', '0', '7', + 'A', 'A', '0', '0', '8', + 'A', 'A', '0', '0', '9', + 'A', 'A', '0', '1', '0', + 'A', 'A', '0', '1', '1', + 'A', 'A', '0', '1', '2', + 'A', 'A', '0', '1', '3', + 'A', 'A', '0', '1', '4', + 'A', 'A', '0', '1', '5', + 'A', 'A', '0', '1', '6', + 'A', 'A', '0', '1', '7', + 'A', 'A', '0', '1', '8', + 'A', 'A', '0', '1', '9', + 'A', 'A', '0', '2', '0', + 'A', 'A', '0', '2', '1', + 'A', 'A', '0', '2', '2', + 'A', 'A', '0', '2', '3', + 'A', 'A', '0', '2', '4', + 'A', 'A', '0', '2', '5', + 'A', 'A', '0', '2', '6', + 'A', 'A', '0', '2', '7', + 'A', 'A', '0', '2', '8', + 'A', 'A', '0', '2', '9', + 'A', 'A', '0', '3', '0', + 'A', 'A', '0', '3', '1', + 'A', 'A', '0', '3', '2', + 'A', 'A', 'Y', 'I', 'N', + 'A', 'B', '0', '0', '1', + 'A', 'B', '0', '0', '2', + 'A', 'B', '0', '0', '3', + 'A', 'B', '0', '0', '4', + 'A', 'B', '0', '0', '5', + 'A', 'B', '0', '0', '6', + 'A', 'B', '0', '0', '7', + 'A', 'B', '0', '0', '8', + 'A', 'B', '0', '0', '9', + 'A', 'B', '0', '1', '0', + 'A', 'B', '0', '1', '1', + 'A', 'B', '0', '1', '3', + 'A', 'B', '0', '1', '6', + 'A', 'B', '0', '1', '7', + 'A', 'B', '0', '2', '0', + 'A', 'B', '0', '2', '1', + 'A', 'B', '0', '2', '2', + 'A', 'B', '0', '2', '3', + 'A', 'B', '0', '2', '4', + 'A', 'B', '0', '2', '6', + 'A', 'B', '0', '2', '7', + 'A', 'B', '0', '2', '8', + 'A', 'B', '0', '2', '9', + 'A', 'B', '0', '3', '0', + 'A', 'B', '0', '3', '1', + 'A', 'B', '0', '3', '4', + 'A', 'B', '0', '3', '7', + 'A', 'B', '0', '3', '8', + 'A', 'B', '0', '3', '9', + 'A', 'B', '0', '4', '0', + 'A', 'B', '0', '4', '1', + 'A', 'B', '0', '4', '4', + 'A', 'B', '0', '4', '5', + 'A', 'B', '0', '4', '6', + 'A', 'B', '0', '4', '7', + 'A', 'B', '0', '4', '8', + 'A', 'B', '0', '4', '9', + 'A', 'B', '0', '5', '0', + 'A', 'B', '0', '5', '1', + 'A', 'B', '0', '5', '3', + 'A', 'B', '0', '5', '4', + 'A', 'B', '0', '5', '5', + 'A', 'B', '0', '5', '6', + 'A', 'B', '0', '5', '7', + 'A', 'B', '0', '5', '8', + 'A', 'B', '0', '5', '9', + 'A', 'B', '0', '6', '0', + 'A', 'B', '0', '6', '1', + 'A', 'B', '0', '6', '5', + 'A', 'B', '0', '6', '6', + 'A', 'B', '0', '6', '7', + 'A', 'B', '0', '6', '9', + 'A', 'B', '0', '7', '0', + 'A', 'B', '0', '7', '3', + 'A', 'B', '0', '7', '4', + 'A', 'B', '0', '7', '6', + 'A', 'B', '0', '7', '7', + 'A', 'B', '0', '7', '8', + 'A', 'B', '0', '7', '9', + 'A', 'B', '0', '8', '0', + 'A', 'B', '0', '8', '1', + 'A', 'B', '0', '8', '2', + 'A', 'B', '0', '8', '5', + 'A', 'B', '0', '8', '6', + 'A', 'B', '0', '8', '7', + 'A', 'B', '1', '1', '8', + 'A', 'B', '1', '2', '0', + 'A', 'B', '1', '2', '2', + 'A', 'B', '1', '2', '3', + 'A', 'B', '1', '6', '4', + 'A', 'B', '1', '7', '1', + 'A', 'B', '1', '8', '0', + 'A', 'B', '1', '8', '8', + 'A', 'B', '1', '9', '1', + 'A', 'B', 'O', 'V', 'E', + 'A', 'C', 'U', 'T', 'E', + 'A', 'D', 'D', 'A', 'K', + 'A', 'D', 'L', 'A', 'M', + 'A', 'D', 'U', 'L', 'T', + 'A', 'F', 'F', 'I', 'X', + 'A', 'F', 'T', 'E', 'R', + 'A', 'G', 'A', 'I', 'N', + 'A', 'G', 'O', 'G', 'I', + 'A', 'G', 'U', 'N', 'G', + 'A', 'H', 'A', 'N', 'G', + 'A', 'H', 'S', 'D', 'A', + 'A', 'I', 'T', 'O', 'N', + 'A', 'K', 'A', 'R', 'A', + 'A', 'K', 'B', 'A', 'R', + 'A', 'K', 'U', 'R', 'U', + 'A', 'L', 'A', 'P', 'H', + 'A', 'L', 'A', 'R', 'M', + 'A', 'L', 'E', 'P', 'H', + 'A', 'L', 'E', 'U', 'T', + 'A', 'L', 'G', 'I', 'Z', + 'A', 'L', 'I', 'E', 'N', + 'A', 'L', 'I', 'F', 'U', + 'A', 'L', 'L', 'A', 'H', + 'A', 'L', 'P', 'H', 'A', + 'A', 'N', 'D', 'A', 'P', + 'A', 'N', 'G', 'E', 'D', + 'A', 'N', 'G', 'E', 'L', + 'A', 'N', 'G', 'E', 'R', + 'A', 'N', 'G', 'K', 'A', + 'A', 'N', 'G', 'L', 'E', + 'A', 'N', 'G', 'R', 'Y', + 'A', 'N', 'H', 'A', 'A', + 'A', 'N', 'H', 'U', 'M', + 'A', 'N', 'P', 'E', 'A', + 'A', 'N', 'S', 'H', 'E', + 'A', 'N', 'S', 'U', 'Z', + 'A', 'P', 'A', 'R', 'T', + 'A', 'P', 'E', 'S', 'O', + 'A', 'P', 'P', 'H', 'O', + 'A', 'P', 'P', 'L', 'E', + 'A', 'P', 'R', 'I', 'L', + 'A', 'R', 'A', 'E', 'A', + 'A', 'R', 'E', 'P', 'A', + 'A', 'R', 'G', 'O', 'N', + 'A', 'R', 'I', 'E', 'S', + 'A', 'R', 'K', 'A', 'B', + 'A', 'R', 'R', 'A', 'Y', + 'A', 'R', 'R', 'O', 'W', + 'A', 'S', 'A', 'L', '2', + 'A', 'S', 'C', 'I', 'A', + 'A', 'S', 'H', 'E', 'S', + 'A', 'S', 'P', 'E', 'R', + 'A', 'T', 'I', 'Y', 'A', + 'A', 'T', 'N', 'A', 'H', + 'A', 'T', 'T', 'A', 'K', + 'A', 'T', 'T', 'I', 'C', + 'B', '0', '0', '5', 'A', + 'B', '1', '0', '5', 'F', + 'B', '1', '0', '5', 'M', + 'B', '1', '0', '6', 'F', + 'B', '1', '0', '6', 'M', + 'B', '1', '0', '7', 'F', + 'B', '1', '0', '7', 'M', + 'B', '1', '0', '8', 'F', + 'B', '1', '0', '8', 'M', + 'B', '1', '0', '9', 'F', + 'B', '1', '0', '9', 'M', + 'B', 'A', 'C', 'O', 'N', + 'B', 'A', 'D', 'G', 'E', + 'B', 'A', 'G', 'E', 'L', + 'B', 'A', 'L', 'A', 'G', + 'B', 'A', 'M', 'U', 'M', + 'B', 'A', 'N', 'J', 'O', + 'B', 'A', 'R', 'A', '2', + 'B', 'A', 'S', 'S', 'A', + 'B', 'A', 'T', 'A', 'K', + 'B', 'A', 'W', 'A', 'K', + 'B', 'B', 'I', 'E', 'P', + 'B', 'B', 'I', 'E', 'T', + 'B', 'B', 'I', 'E', 'X', + 'B', 'B', 'U', 'O', 'P', + 'B', 'B', 'U', 'O', 'X', + 'B', 'B', 'U', 'R', 'X', + 'B', 'E', 'A', 'C', 'H', + 'B', 'E', 'A', 'D', 'S', + 'B', 'E', 'A', 'M', 'S', + 'B', 'E', 'A', 'N', 'S', + 'B', 'E', 'E', 'T', 'A', + 'B', 'E', 'G', 'I', 'N', + 'B', 'E', 'H', 'E', 'H', + 'B', 'E', 'I', 'T', 'H', + 'B', 'E', 'L', 'O', 'W', + 'B', 'E', 'N', 'D', 'E', + 'B', 'E', 'N', 'T', 'O', + 'B', 'E', 'O', 'R', 'C', + 'B', 'H', 'A', 'L', 'E', + 'B', 'H', 'E', 'T', 'H', + 'B', 'I', 'N', 'D', 'I', + 'B', 'I', 'N', 'D', 'U', + 'B', 'I', 'R', 'G', 'A', + 'B', 'I', 'S', 'A', 'H', + 'B', 'I', 'S', 'O', 'N', + 'B', 'L', 'A', 'C', 'K', + 'B', 'L', 'A', 'D', 'E', + 'B', 'L', 'A', 'N', 'K', + 'B', 'L', 'I', 'N', 'K', + 'B', 'L', 'O', 'C', 'K', + 'B', 'L', 'O', 'N', 'D', + 'B', 'L', 'O', 'O', 'D', + 'B', 'O', 'A', 'R', 'D', + 'B', 'O', 'O', 'K', 'S', + 'B', 'O', 'O', 'T', 'S', + 'B', 'O', 'R', 'A', 'X', + 'B', 'O', 'R', 'Z', 'Y', + 'B', 'R', 'A', 'C', 'E', + 'B', 'R', 'A', 'I', 'N', + 'B', 'R', 'E', 'A', 'D', + 'B', 'R', 'E', 'V', 'E', + 'B', 'R', 'I', 'C', 'K', + 'B', 'R', 'I', 'D', 'E', + 'B', 'R', 'O', 'A', 'D', + 'B', 'R', 'O', 'O', 'M', + 'B', 'R', 'O', 'W', 'N', + 'B', 'R', 'U', 'S', 'H', + 'B', 'S', 'D', 'U', 'S', + 'B', 'S', 'K', 'A', '-', + 'B', 'S', 'K', 'U', 'R', + 'B', 'S', 'T', 'A', 'R', + 'B', 'U', 'H', 'I', 'D', + 'B', 'U', 'L', 'L', 'S', + 'B', 'U', 'L', 'U', 'G', + 'B', 'U', 'M', 'P', 'Y', + 'B', 'U', 'N', 'N', 'Y', + 'B', 'U', 'S', 'T', 'S', + 'B', 'Z', 'U', 'N', 'G', + 'C', '0', '0', '2', 'A', + 'C', '0', '0', '2', 'B', + 'C', '0', '0', '2', 'C', + 'C', '0', '1', '0', 'A', + 'C', 'A', 'A', 'N', 'G', + 'C', 'A', 'K', 'R', 'A', + 'C', 'A', 'L', 'Y', 'A', + 'C', 'A', 'M', 'E', 'L', + 'C', 'A', 'N', 'D', 'Y', + 'C', 'A', 'N', 'O', 'E', + 'C', 'A', 'P', 'U', 'T', + 'C', 'A', 'R', 'D', 'S', + 'C', 'A', 'R', 'E', 'T', + 'C', 'A', 'R', 'I', 'K', + 'C', 'A', 'R', 'M', 'I', + 'C', 'A', 'R', 'O', 'N', + 'C', 'A', 'U', 'D', 'A', + 'C', 'C', 'H', 'A', 'A', + 'C', 'C', 'H', 'E', 'E', + 'C', 'C', 'H', 'H', 'A', + 'C', 'C', 'H', 'H', 'E', + 'C', 'C', 'H', 'H', 'I', + 'C', 'C', 'H', 'H', 'O', + 'C', 'C', 'H', 'H', 'U', + 'C', 'E', 'A', 'L', 'C', + 'C', 'E', 'C', 'A', 'K', + 'C', 'E', 'C', 'E', 'K', + 'C', 'E', 'I', 'R', 'T', + 'C', 'E', 'R', 'E', 'K', + 'C', 'E', 'R', 'E', 'S', + 'C', 'H', 'A', 'D', 'A', + 'C', 'H', 'A', 'I', 'R', + 'C', 'H', 'A', 'N', 'G', + 'C', 'H', 'A', 'R', 'T', + 'C', 'H', 'E', 'C', 'K', + 'C', 'H', 'E', 'E', 'K', + 'C', 'H', 'E', 'E', 'M', + 'C', 'H', 'E', 'R', 'Y', + 'C', 'H', 'E', 'S', 'S', + 'C', 'H', 'E', 'S', 'T', + 'C', 'H', 'H', 'I', 'M', + 'C', 'H', 'I', 'C', 'K', + 'C', 'H', 'I', 'K', 'I', + 'C', 'H', 'I', 'L', 'D', + 'C', 'H', 'I', 'M', 'E', + 'C', 'H', 'I', 'N', 'G', + 'C', 'H', 'O', 'K', 'E', + 'C', 'H', 'R', 'O', 'A', + 'C', 'H', 'U', 'L', 'A', + 'C', 'H', 'U', 'O', 'P', + 'C', 'H', 'U', 'O', 'T', + 'C', 'H', 'U', 'O', 'X', + 'C', 'H', 'U', 'R', 'X', + 'C', 'H', 'Y', 'R', 'X', + 'C', 'I', 'E', 'U', 'C', + 'C', 'L', 'A', 'I', 'M', + 'C', 'L', 'E', 'A', 'R', + 'C', 'L', 'I', 'C', 'K', + 'C', 'L', 'I', 'F', 'F', + 'C', 'L', 'O', 'C', 'K', + 'C', 'L', 'O', 'S', 'E', + 'C', 'L', 'O', 'T', 'H', + 'C', 'L', 'O', 'U', 'D', + 'C', 'L', 'O', 'W', 'N', + 'C', 'L', 'U', 'B', 'S', + 'C', 'M', '0', '0', '1', + 'C', 'M', '0', '0', '2', + 'C', 'M', '0', '0', '4', + 'C', 'M', '0', '0', '5', + 'C', 'M', '0', '0', '6', + 'C', 'M', '0', '0', '7', + 'C', 'M', '0', '0', '8', + 'C', 'M', '0', '0', '9', + 'C', 'M', '0', '1', '0', + 'C', 'M', '0', '1', '1', + 'C', 'M', '0', '1', '2', + 'C', 'M', '0', '1', '3', + 'C', 'M', '0', '1', '5', + 'C', 'M', '0', '1', '7', + 'C', 'M', '0', '1', '9', + 'C', 'M', '0', '2', '1', + 'C', 'M', '0', '2', '3', + 'C', 'M', '0', '2', '4', + 'C', 'M', '0', '2', '5', + 'C', 'M', '0', '2', '6', + 'C', 'M', '0', '2', '7', + 'C', 'M', '0', '2', '8', + 'C', 'M', '0', '2', '9', + 'C', 'M', '0', '3', '0', + 'C', 'M', '0', '3', '3', + 'C', 'M', '0', '3', '4', + 'C', 'M', '0', '3', '5', + 'C', 'M', '0', '3', '6', + 'C', 'M', '0', '3', '7', + 'C', 'M', '0', '3', '8', + 'C', 'M', '0', '3', '9', + 'C', 'M', '0', '4', '0', + 'C', 'M', '0', '4', '1', + 'C', 'M', '0', '4', '4', + 'C', 'M', '0', '4', '6', + 'C', 'M', '0', '4', '7', + 'C', 'M', '0', '4', '9', + 'C', 'M', '0', '5', '0', + 'C', 'M', '0', '5', '1', + 'C', 'M', '0', '5', '2', + 'C', 'M', '0', '5', '3', + 'C', 'M', '0', '5', '4', + 'C', 'M', '0', '5', '5', + 'C', 'M', '0', '5', '6', + 'C', 'M', '0', '5', '8', + 'C', 'M', '0', '5', '9', + 'C', 'M', '0', '6', '0', + 'C', 'M', '0', '6', '1', + 'C', 'M', '0', '6', '2', + 'C', 'M', '0', '6', '3', + 'C', 'M', '0', '6', '4', + 'C', 'M', '0', '6', '6', + 'C', 'M', '0', '6', '7', + 'C', 'M', '0', '6', '8', + 'C', 'M', '0', '6', '9', + 'C', 'M', '0', '7', '0', + 'C', 'M', '0', '7', '1', + 'C', 'M', '0', '7', '2', + 'C', 'M', '0', '7', '3', + 'C', 'M', '0', '7', '4', + 'C', 'M', '0', '7', '5', + 'C', 'M', '0', '7', '6', + 'C', 'M', '0', '7', '8', + 'C', 'M', '0', '7', '9', + 'C', 'M', '0', '8', '0', + 'C', 'M', '0', '8', '1', + 'C', 'M', '0', '8', '2', + 'C', 'M', '0', '8', '3', + 'C', 'M', '0', '8', '4', + 'C', 'M', '0', '8', '5', + 'C', 'M', '0', '8', '6', + 'C', 'M', '0', '8', '7', + 'C', 'M', '0', '8', '8', + 'C', 'M', '0', '8', '9', + 'C', 'M', '0', '9', '0', + 'C', 'M', '0', '9', '1', + 'C', 'M', '0', '9', '2', + 'C', 'M', '0', '9', '4', + 'C', 'M', '0', '9', '5', + 'C', 'M', '0', '9', '6', + 'C', 'M', '0', '9', '7', + 'C', 'M', '0', '9', '8', + 'C', 'M', '0', '9', '9', + 'C', 'M', '1', '0', '0', + 'C', 'M', '1', '0', '1', + 'C', 'M', '1', '0', '2', + 'C', 'M', '1', '0', '3', + 'C', 'M', '1', '0', '4', + 'C', 'M', '1', '0', '5', + 'C', 'M', '1', '0', '7', + 'C', 'M', '1', '0', '8', + 'C', 'M', '1', '0', '9', + 'C', 'M', '1', '1', '0', + 'C', 'M', '1', '1', '2', + 'C', 'M', '1', '1', '4', + 'C', 'M', '3', '0', '1', + 'C', 'M', '3', '0', '2', + 'C', 'O', 'E', 'N', 'G', + 'C', 'O', 'L', 'O', 'N', + 'C', 'O', 'L', 'O', 'R', + 'C', 'O', 'M', 'E', 'T', + 'C', 'O', 'M', 'M', 'A', + 'C', 'O', 'R', 'A', 'L', + 'C', 'O', 'U', 'C', 'H', + 'C', 'O', 'V', 'E', 'R', + 'C', 'R', 'E', 'A', 'M', + 'C', 'R', 'O', 'I', 'X', + 'C', 'R', 'O', 'S', 'S', + 'C', 'R', 'O', 'W', 'N', + 'C', 'U', 'B', 'E', 'D', + 'C', 'U', 'R', 'L', 'Y', + 'C', 'U', 'R', 'R', 'Y', + 'C', 'U', 'R', 'V', 'E', + 'D', '0', '0', '8', 'A', + 'D', '0', '2', '7', 'A', + 'D', '0', '3', '1', 'A', + 'D', '0', '3', '4', 'A', + 'D', '0', '4', '6', 'A', + 'D', '0', '4', '8', 'A', + 'D', '0', '5', '0', 'A', + 'D', '0', '5', '0', 'B', + 'D', '0', '5', '0', 'C', + 'D', '0', '5', '0', 'D', + 'D', '0', '5', '0', 'E', + 'D', '0', '5', '0', 'F', + 'D', '0', '5', '0', 'G', + 'D', '0', '5', '0', 'H', + 'D', '0', '5', '0', 'I', + 'D', '0', '5', '2', 'A', + 'D', '0', '5', '4', 'A', + 'D', '0', '6', '7', 'A', + 'D', '0', '6', '7', 'B', + 'D', '0', '6', '7', 'C', + 'D', '0', '6', '7', 'D', + 'D', '0', '6', '7', 'E', + 'D', '0', '6', '7', 'F', + 'D', '0', '6', '7', 'G', + 'D', '0', '6', '7', 'H', + 'D', 'A', 'A', 'L', 'I', + 'D', 'A', 'A', 'S', 'U', + 'D', 'A', 'E', 'N', 'G', + 'D', 'A', 'G', 'A', 'Z', + 'D', 'A', 'H', 'A', 'L', + 'D', 'A', 'I', 'N', 'G', + 'D', 'A', 'L', 'A', 'T', + 'D', 'A', 'L', 'D', 'A', + 'D', 'A', 'L', 'E', 'T', + 'D', 'A', 'M', 'M', 'A', + 'D', 'A', 'N', 'D', 'A', + 'D', 'A', 'N', 'G', 'O', + 'D', 'A', 'R', 'A', '3', + 'D', 'A', 'R', 'A', '4', + 'D', 'A', 'R', 'G', 'A', + 'D', 'A', 'S', 'I', 'A', + 'D', 'A', 'V', 'I', 'D', + 'D', 'D', 'D', 'H', 'A', + 'D', 'D', 'H', 'A', 'A', + 'D', 'D', 'H', 'E', 'E', + 'D', 'D', 'I', 'E', 'P', + 'D', 'D', 'I', 'E', 'X', + 'D', 'D', 'U', 'O', 'P', + 'D', 'D', 'U', 'O', 'X', + 'D', 'D', 'U', 'R', 'X', + 'D', 'E', 'A', 'T', 'H', + 'D', 'E', 'B', 'I', 'T', + 'D', 'E', 'L', 'T', 'A', + 'D', 'E', 'N', 'S', 'E', + 'D', 'E', 'P', 'T', 'H', + 'D', 'E', 'R', 'E', 'T', + 'D', 'E', 'U', 'N', 'G', + 'D', 'E', 'X', 'I', 'A', + 'D', 'H', 'H', 'E', 'E', + 'D', 'H', 'H', 'O', 'O', + 'D', 'I', 'F', 'A', 'T', + 'D', 'I', 'G', 'I', 'T', + 'D', 'I', 'O', 'D', 'E', + 'D', 'I', 'P', 'L', 'I', + 'D', 'I', 'P', 'T', 'E', + 'D', 'I', 'R', 'G', 'A', + 'D', 'I', 'T', 'T', 'O', + 'D', 'I', 'V', 'E', 'S', + 'D', 'I', 'Z', 'Z', 'Y', + 'D', 'J', 'E', 'R', 'V', + 'D', 'L', 'H', 'Y', 'A', + 'D', 'O', 'B', 'R', 'O', + 'D', 'O', 'G', 'R', 'A', + 'D', 'O', 'I', 'N', 'G', + 'D', 'O', 'L', 'L', 'S', + 'D', 'O', 'N', 'G', 'A', + 'D', 'O', 'O', 'N', 'G', + 'D', 'O', 'U', 'B', 'T', + 'D', 'R', 'E', 'S', 'S', + 'D', 'R', 'I', 'N', 'K', + 'D', 'R', 'I', 'V', 'E', + 'D', 'R', 'O', 'P', 'S', + 'D', 'U', 'G', 'U', 'D', + 'D', 'Z', 'E', 'L', 'O', + 'D', 'Z', 'H', 'O', 'I', + 'D', 'Z', 'I', 'T', 'A', + 'D', 'Z', 'Y', 'A', 'Y', + 'D', 'Z', 'Z', 'H', 'E', + 'E', '0', '0', '8', 'A', + 'E', '0', '0', '9', 'A', + 'E', '0', '1', '6', 'A', + 'E', '0', '1', '7', 'A', + 'E', '0', '2', '0', 'A', + 'E', '0', '2', '8', 'A', + 'E', '0', '3', '4', 'A', + 'E', 'A', 'G', 'L', 'E', + 'E', 'A', 'R', 'L', 'Y', + 'E', 'A', 'R', 'T', 'H', + 'E', 'E', 'K', 'A', 'A', + 'E', 'H', 'C', 'H', 'A', + 'E', 'H', 'T', 'S', 'A', + 'E', 'H', 'W', 'A', 'Z', + 'E', 'I', 'G', 'H', 'T', + 'E', 'J', 'E', 'C', 'T', + 'E', 'K', 'A', 'R', 'A', + 'E', 'L', 'I', 'F', 'I', + 'E', 'M', 'O', 'J', 'I', + 'E', 'M', 'P', 'T', 'Y', + 'E', 'N', 'D', 'E', 'P', + 'E', 'N', 'T', 'E', 'R', + 'E', 'N', 'T', 'R', 'Y', + 'E', 'O', '-', 'E', 'U', + 'E', 'O', 'L', 'H', 'X', + 'E', 'P', 'A', 'C', 'T', + 'E', 'P', 'O', 'C', 'H', + 'E', 'Q', 'U', 'A', 'L', + 'E', 'Q', 'U', 'I', 'D', + 'E', 'R', 'A', 'S', 'E', + 'E', 'R', 'I', 'N', '2', + 'E', 'S', '-', 'T', 'E', + 'E', 'S', 'A', 'S', 'A', + 'E', 'S', 'H', '1', '6', + 'E', 'S', 'H', '2', '1', + 'E', 'S', 'H', 'E', '3', + 'E', 'T', 'H', 'E', 'L', + 'E', 'U', '-', 'E', 'O', + 'E', 'U', '-', 'E', 'U', + 'E', 'U', 'L', 'E', 'R', + 'E', 'V', 'E', 'R', 'Y', + 'E', 'X', 'I', 'S', 'T', + 'E', 'X', 'T', 'R', 'A', + 'F', '0', '0', '1', 'A', + 'F', '0', '1', '3', 'A', + 'F', '0', '2', '1', 'A', + 'F', '0', '3', '1', 'A', + 'F', '0', '3', '7', 'A', + 'F', '0', '3', '8', 'A', + 'F', '0', '4', '5', 'A', + 'F', '0', '4', '6', 'A', + 'F', '0', '4', '7', 'A', + 'F', '0', '5', '1', 'A', + 'F', '0', '5', '1', 'B', + 'F', '0', '5', '1', 'C', + 'F', 'A', 'A', 'F', 'U', + 'F', 'A', 'I', 'H', 'U', + 'F', 'A', 'I', 'R', 'Y', + 'F', 'A', 'R', 'S', 'I', + 'F', 'A', 'T', 'H', 'A', + 'F', 'E', 'A', 'R', 'N', + 'F', 'E', 'E', 'N', 'G', + 'F', 'E', 'N', 'C', 'E', + 'F', 'E', 'R', 'R', 'Y', + 'F', 'I', 'E', 'L', 'D', + 'F', 'I', 'F', 'T', 'H', + 'F', 'I', 'F', 'T', 'Y', + 'F', 'I', 'G', 'H', 'T', + 'F', 'I', 'N', 'A', 'L', + 'F', 'I', 'R', 'S', 'T', + 'F', 'L', 'A', 'G', 'S', + 'F', 'L', 'A', 'M', 'E', + 'F', 'L', 'A', 'S', 'H', + 'F', 'L', 'I', 'C', 'K', + 'F', 'L', 'O', 'O', 'R', + 'F', 'L', 'U', 'T', 'E', + 'F', 'O', 'G', 'G', 'Y', + 'F', 'O', 'L', 'L', 'Y', + 'F', 'O', 'R', 'C', 'E', + 'F', 'O', 'R', 'M', 'S', + 'F', 'O', 'R', 'T', 'E', + 'F', 'O', 'R', 'T', 'Y', + 'F', 'R', 'A', 'M', 'E', + 'F', 'R', 'A', 'N', 'C', + 'F', 'R', 'I', 'E', 'D', + 'F', 'R', 'I', 'E', 'S', + 'F', 'R', 'I', 'T', 'U', + 'F', 'R', 'O', 'N', 'T', + 'F', 'R', 'O', 'W', 'N', + 'G', '0', '0', '6', 'A', + 'G', '0', '0', '7', 'A', + 'G', '0', '0', '7', 'B', + 'G', '0', '1', '1', 'A', + 'G', '0', '2', '0', 'A', + 'G', '0', '2', '6', 'A', + 'G', '0', '3', '6', 'A', + 'G', '0', '3', '7', 'A', + 'G', '0', '4', '3', 'A', + 'G', '0', '4', '5', 'A', + 'G', 'A', 'A', 'F', 'U', + 'G', 'A', 'D', 'O', 'L', + 'G', 'A', 'L', 'A', 'M', + 'G', 'A', 'M', 'A', 'L', + 'G', 'A', 'M', 'A', 'N', + 'G', 'A', 'M', 'L', 'A', + 'G', 'A', 'M', 'M', 'A', + 'G', 'A', 'N', 'D', 'A', + 'G', 'A', 'N', 'M', 'A', + 'G', 'A', 'R', 'A', 'Y', + 'G', 'A', 'R', 'O', 'N', + 'G', 'B', 'A', 'Y', 'I', + 'G', 'B', 'E', 'U', 'X', + 'G', 'B', 'I', 'E', 'E', + 'G', 'E', 'N', 'I', 'E', + 'G', 'E', 'S', 'H', '2', + 'G', 'E', 'S', 'H', 'U', + 'G', 'G', 'I', 'E', 'P', + 'G', 'G', 'I', 'E', 'X', + 'G', 'G', 'U', 'O', 'P', + 'G', 'G', 'U', 'O', 'T', + 'G', 'G', 'U', 'O', 'X', + 'G', 'G', 'U', 'R', 'X', + 'G', 'G', 'W', 'A', 'A', + 'G', 'G', 'W', 'E', 'E', + 'G', 'H', 'A', 'I', 'N', + 'G', 'H', 'A', 'Y', 'N', + 'G', 'H', 'E', 'U', 'N', + 'G', 'H', 'E', 'U', 'X', + 'G', 'H', 'E', 'Y', 'S', + 'G', 'H', 'O', 'S', 'T', + 'G', 'I', 'D', 'I', 'M', + 'G', 'I', 'M', 'E', 'L', + 'G', 'I', 'N', 'I', 'I', + 'G', 'I', 'R', 'L', 'S', + 'G', 'I', 'S', 'A', 'L', + 'G', 'L', 'A', 'S', 'S', + 'G', 'L', 'O', 'B', 'E', + 'G', 'L', 'O', 'V', 'E', + 'G', 'N', 'Y', 'I', 'S', + 'G', 'O', 'I', 'N', 'G', + 'G', 'O', 'N', 'D', 'I', + 'G', 'O', 'O', 'S', 'E', + 'G', 'O', 'R', 'G', 'I', + 'G', 'R', 'A', 'C', 'E', + 'G', 'R', 'A', 'I', 'N', + 'G', 'R', 'A', 'S', 'P', + 'G', 'R', 'A', 'S', 'S', + 'G', 'R', 'A', 'V', 'E', + 'G', 'R', 'E', 'A', 'T', + 'G', 'R', 'E', 'E', 'K', + 'G', 'R', 'E', 'E', 'N', + 'G', 'R', 'O', 'U', 'P', + 'G', 'U', 'A', 'R', 'D', + 'G', 'U', 'I', 'D', 'E', + 'G', 'U', 'R', 'U', 'N', + 'G', 'V', 'A', 'N', 'G', + 'H', '0', '0', '6', 'A', + 'H', 'A', '-', '1', '0', + 'H', 'A', '-', '1', '1', + 'H', 'A', '-', 'H', 'A', + 'H', 'A', 'A', 'R', 'U', + 'H', 'A', 'D', 'E', 'S', + 'H', 'A', 'E', 'G', 'L', + 'H', 'A', 'I', 'T', 'U', + 'H', 'A', 'L', 'Q', 'A', + 'H', 'A', 'M', 'S', 'A', + 'H', 'A', 'M', 'S', 'O', + 'H', 'A', 'M', 'Z', 'A', + 'H', 'A', 'N', 'D', 'S', + 'H', 'A', 'P', 'P', 'Y', + 'H', 'A', 'S', 'E', 'R', + 'H', 'A', 'T', 'A', 'F', + 'H', 'A', 'T', 'H', 'I', + 'H', 'B', 'A', 'S', 'A', + 'H', 'E', 'A', 'R', 'T', + 'H', 'E', 'A', 'V', 'Y', + 'H', 'E', 'L', 'I', 'X', + 'H', 'H', 'W', 'E', 'E', + 'H', 'H', 'Y', 'A', 'A', + 'H', 'H', 'Y', 'E', 'E', + 'H', 'I', 'D', 'E', 'T', + 'H', 'I', 'E', 'U', 'H', + 'H', 'I', 'N', 'D', 'U', + 'H', 'I', 'N', 'G', 'E', + 'H', 'I', 'R', 'I', 'Q', + 'H', 'L', 'I', 'E', 'P', + 'H', 'L', 'I', 'E', 'X', + 'H', 'L', 'U', 'O', 'P', + 'H', 'L', 'U', 'O', 'X', + 'H', 'L', 'U', 'R', 'X', + 'H', 'L', 'Y', 'R', 'X', + 'H', 'M', 'I', 'E', 'P', + 'H', 'M', 'I', 'E', 'X', + 'H', 'M', 'O', 'N', 'G', + 'H', 'M', 'U', 'O', 'P', + 'H', 'M', 'U', 'O', 'X', + 'H', 'M', 'U', 'R', 'X', + 'H', 'M', 'Y', 'R', 'X', + 'H', 'N', 'I', 'E', 'P', + 'H', 'N', 'I', 'E', 'T', + 'H', 'N', 'I', 'E', 'X', + 'H', 'N', 'U', 'O', 'X', + 'H', 'O', 'C', 'H', 'O', + 'H', 'O', 'L', 'A', 'M', + 'H', 'O', 'N', 'E', 'Y', + 'H', 'O', 'O', 'R', 'U', + 'H', 'O', 'R', 'N', 'S', + 'H', 'O', 'R', 'S', 'E', + 'H', 'O', 'T', 'E', 'L', + 'H', 'O', 'U', 'S', 'E', + 'H', 'U', 'M', 'A', 'N', + 'H', 'U', 'R', 'A', 'N', + 'H', 'W', 'A', 'I', 'R', + 'H', 'X', 'I', 'E', 'P', + 'H', 'X', 'I', 'E', 'T', + 'H', 'X', 'I', 'E', 'X', + 'H', 'X', 'U', 'O', 'P', + 'H', 'X', 'U', 'O', 'T', + 'H', 'X', 'U', 'O', 'X', + 'H', 'Z', 'Z', 'Z', 'G', + 'I', '-', 'O', '-', 'I', + 'I', '-', 'Y', 'A', 'E', + 'I', '-', 'Y', 'E', 'O', + 'I', '0', '0', '5', 'A', + 'I', '0', '0', '9', 'A', + 'I', '0', '1', '0', 'A', + 'I', '0', '1', '1', 'A', + 'I', 'A', 'U', 'D', 'A', + 'I', 'C', 'H', 'O', 'S', + 'I', 'C', 'H', 'O', 'U', + 'I', 'E', 'U', 'N', 'G', + 'I', 'G', 'G', 'W', 'S', + 'I', 'K', 'A', 'R', 'A', + 'I', 'M', 'A', 'G', 'E', + 'I', 'M', 'I', 'N', '3', + 'I', 'N', 'B', 'O', 'X', + 'I', 'N', 'D', 'E', 'X', + 'I', 'N', 'D', 'I', 'C', + 'I', 'N', 'N', 'E', 'R', + 'I', 'N', 'P', 'U', 'T', + 'J', 'A', 'C', 'K', 'S', + 'J', 'A', 'P', 'A', 'N', + 'J', 'A', 'Y', 'I', 'N', + 'J', 'E', 'A', 'N', 'S', + 'J', 'E', 'R', 'A', 'N', + 'J', 'J', 'I', 'E', 'P', + 'J', 'J', 'I', 'E', 'T', + 'J', 'J', 'I', 'E', 'X', + 'J', 'J', 'U', 'O', 'P', + 'J', 'J', 'U', 'O', 'X', + 'J', 'J', 'U', 'R', 'X', + 'J', 'O', 'I', 'N', 'T', + 'J', 'O', 'K', 'E', 'R', + 'J', 'U', 'D', 'G', 'E', + 'J', 'U', 'D', 'U', 'L', + 'J', 'U', 'E', 'U', 'I', + 'K', 'A', '-', '1', '0', + 'K', 'A', '-', '1', '1', + 'K', 'A', '-', 'K', 'E', + 'K', 'A', 'A', 'B', 'A', + 'K', 'A', 'A', 'C', 'U', + 'K', 'A', 'A', 'F', 'U', + 'K', 'A', 'I', 'R', 'I', + 'K', 'A', 'L', 'A', 'M', + 'K', 'A', 'P', 'A', 'L', + 'K', 'A', 'P', 'P', 'A', + 'K', 'A', 'R', 'A', 'N', + 'K', 'A', 'R', 'E', 'N', + 'K', 'A', 'R', 'O', 'R', + 'K', 'A', 'S', 'R', 'A', + 'K', 'A', 'U', 'N', 'A', + 'K', 'A', 'Y', 'A', 'H', + 'K', 'E', 'A', 'A', 'E', + 'K', 'E', 'E', 'N', 'G', + 'K', 'E', 'E', 'S', 'U', + 'K', 'E', 'H', 'E', 'H', + 'K', 'E', 'N', 'A', 'T', + 'K', 'E', 'R', 'E', 'T', + 'K', 'E', 'S', 'H', '2', + 'K', 'E', 'T', 'T', 'I', + 'K', 'E', 'U', 'A', 'E', + 'K', 'E', 'U', 'O', 'T', + 'K', 'H', 'A', 'N', 'G', + 'K', 'H', 'A', 'P', 'H', + 'K', 'H', 'E', 'M', 'A', + 'K', 'H', 'E', 'T', 'H', + 'K', 'H', 'M', 'E', 'R', + 'K', 'H', 'U', 'A', 'T', + 'K', 'H', 'U', 'E', 'N', + 'K', 'H', 'W', 'A', 'I', + 'K', 'I', 'E', 'E', 'M', + 'K', 'I', 'I', 'Z', 'H', + 'K', 'I', 'N', 'N', 'A', + 'K', 'I', 'R', 'A', 'T', + 'K', 'I', 'S', 'A', 'L', + 'K', 'L', 'O', 'K', 'O', + 'K', 'N', 'I', 'F', 'E', + 'K', 'N', 'O', 'B', 'S', + 'K', 'O', '-', 'K', 'I', + 'K', 'O', 'A', 'L', 'A', + 'K', 'O', 'I', 'N', 'I', + 'K', 'O', 'M', 'B', 'U', + 'K', 'O', 'O', 'P', 'O', + 'K', 'O', 'P', 'P', 'A', + 'K', 'O', 'R', 'O', 'N', + 'K', 'O', 'V', 'U', 'U', + 'K', 'P', 'E', 'U', 'X', + 'K', 'R', 'Y', 'U', 'K', + 'K', 'R', 'Y', 'Z', 'H', + 'K', 'U', 'S', 'M', 'A', + 'K', 'U', 'Z', 'H', 'I', + 'K', 'W', 'A', 'E', 'T', + 'K', 'X', 'W', 'A', 'A', + 'K', 'X', 'W', 'E', 'E', + 'L', '0', '0', '2', 'A', + 'L', '0', '0', '6', 'A', + 'L', 'A', 'A', 'M', 'U', + 'L', 'A', 'B', 'A', 'T', + 'L', 'A', 'B', 'E', 'L', + 'L', 'A', 'B', 'O', 'R', + 'L', 'A', 'G', 'A', 'B', + 'L', 'A', 'G', 'A', 'R', + 'L', 'A', 'G', 'U', 'S', + 'L', 'A', 'I', 'N', 'G', + 'L', 'A', 'M', 'D', 'A', + 'L', 'A', 'M', 'E', 'D', + 'L', 'A', 'N', 'E', 'S', + 'L', 'A', 'P', 'A', 'Q', + 'L', 'A', 'R', 'G', 'E', + 'L', 'A', 'T', 'I', 'K', + 'L', 'A', 'T', 'I', 'N', + 'L', 'A', 'U', 'L', 'A', + 'L', 'A', 'Y', 'A', 'R', + 'L', 'E', 'A', 'F', 'Y', + 'L', 'E', 'E', 'E', 'E', + 'L', 'E', 'L', 'E', 'T', + 'L', 'E', 'M', 'O', 'I', + 'L', 'E', 'M', 'O', 'N', + 'L', 'E', 'N', 'G', 'A', + 'L', 'E', 'N', 'I', 'S', + 'L', 'E', 'V', 'E', 'L', + 'L', 'I', 'B', 'R', 'A', + 'L', 'I', 'G', 'H', 'T', + 'L', 'I', 'M', 'B', 'S', + 'L', 'I', 'M', 'B', 'U', + 'L', 'I', 'M', 'I', 'T', + 'L', 'I', 'M', 'M', 'U', + 'L', 'I', 'N', 'E', 'S', + 'L', 'I', 'T', 'R', 'A', + 'L', 'I', 'V', 'R', 'E', + 'L', 'L', 'A', 'M', 'A', + 'L', 'O', 'G', 'I', 'C', + 'L', 'O', 'M', 'K', 'A', + 'L', 'O', 'N', 'G', 'A', + 'L', 'O', 'R', 'R', 'Y', + 'L', 'O', 'T', 'U', 'S', + 'L', 'O', 'U', 'R', 'E', + 'L', 'O', 'W', '-', '9', + 'L', 'O', 'W', 'E', 'R', + 'L', 'U', 'A', 'E', 'P', + 'L', 'U', 'G', 'A', 'L', + 'L', 'U', 'H', 'U', 'R', + 'L', 'U', 'N', 'A', 'R', + 'L', 'U', 'N', 'G', 'S', + 'L', 'Y', 'I', 'N', 'G', + 'M', '0', '0', '1', 'A', + 'M', '0', '0', '1', 'B', + 'M', '0', '0', '3', 'A', + 'M', '0', '1', '0', 'A', + 'M', '0', '1', '2', 'A', + 'M', '0', '1', '2', 'B', + 'M', '0', '1', '2', 'C', + 'M', '0', '1', '2', 'D', + 'M', '0', '1', '2', 'E', + 'M', '0', '1', '2', 'F', + 'M', '0', '1', '2', 'G', + 'M', '0', '1', '2', 'H', + 'M', '0', '1', '5', 'A', + 'M', '0', '1', '6', 'A', + 'M', '0', '1', '7', 'A', + 'M', '0', '2', '2', 'A', + 'M', '0', '2', '4', 'A', + 'M', '0', '2', '8', 'A', + 'M', '0', '3', '1', 'A', + 'M', '0', '3', '3', 'A', + 'M', '0', '3', '3', 'B', + 'M', '0', '4', '0', 'A', + 'M', 'A', 'D', 'D', 'A', + 'M', 'A', 'D', 'Y', 'A', + 'M', 'A', 'E', 'S', 'I', + 'M', 'A', 'G', 'I', 'C', + 'M', 'A', 'H', 'H', 'A', + 'M', 'A', 'I', 'R', 'U', + 'M', 'A', 'I', 'Z', 'E', + 'M', 'A', 'N', 'A', 'T', + 'M', 'A', 'N', 'G', 'O', + 'M', 'A', 'N', 'N', 'A', + 'M', 'A', 'P', 'I', 'Q', + 'M', 'A', 'P', 'L', 'E', + 'M', 'A', 'Q', 'A', 'F', + 'M', 'A', 'R', 'C', 'H', + 'M', 'A', 'R', 'K', 'S', + 'M', 'A', 'S', 'H', '2', + 'M', 'A', 'Y', 'A', 'N', + 'M', 'A', 'Y', 'E', 'K', + 'M', 'B', 'E', 'U', 'M', + 'M', 'B', 'E', 'U', 'X', + 'M', 'B', 'U', 'A', 'E', + 'M', 'B', 'U', 'O', 'Q', + 'M', 'C', 'H', 'A', 'N', + 'M', 'E', '-', 'M', 'A', + 'M', 'E', 'D', 'A', 'L', + 'M', 'E', 'E', 'E', 'E', + 'M', 'E', 'E', 'M', 'U', + 'M', 'E', 'I', 'Z', 'I', + 'M', 'E', 'L', 'I', 'K', + 'M', 'E', 'L', 'O', 'N', + 'M', 'E', 'N', 'D', 'E', + 'M', 'E', 'N', 'O', 'E', + 'M', 'E', 'R', 'G', 'E', + 'M', 'E', 'T', 'A', 'L', + 'M', 'E', 'T', 'E', 'G', + 'M', 'E', 'T', 'E', 'K', + 'M', 'E', 'T', 'R', 'O', + 'M', 'E', 'Z', 'Z', 'O', + 'M', 'F', 'E', 'U', 'Q', + 'M', 'F', 'E', 'U', 'T', + 'M', 'F', 'I', 'E', 'E', + 'M', 'G', 'B', 'E', 'E', + 'M', 'G', 'B', 'E', 'N', + 'M', 'G', 'B', 'O', 'O', + 'M', 'G', 'I', 'E', 'X', + 'M', 'G', 'U', 'O', 'P', + 'M', 'G', 'U', 'O', 'X', + 'M', 'G', 'U', 'R', 'X', + 'M', 'I', 'C', 'R', 'O', + 'M', 'I', 'E', 'U', 'M', + 'M', 'I', 'K', 'R', 'I', + 'M', 'I', 'L', 'K', 'Y', + 'M', 'I', 'L', 'L', 'E', + 'M', 'I', 'N', 'D', 'U', + 'M', 'I', 'N', 'U', 'S', + 'M', 'I', 'R', 'E', 'D', + 'M', 'I', 'S', 'R', 'A', + 'M', 'N', 'Y', 'A', 'M', + 'M', 'O', 'D', 'E', 'L', + 'M', 'O', 'D', 'E', 'M', + 'M', 'O', 'N', 'E', 'Y', + 'M', 'O', 'N', 'T', 'H', + 'M', 'O', 'O', 'S', 'E', + 'M', 'O', 'T', 'O', 'R', + 'M', 'O', 'U', 'N', 'D', + 'M', 'O', 'U', 'N', 'T', + 'M', 'O', 'U', 'S', 'E', + 'M', 'O', 'U', 'T', 'H', + 'M', 'O', 'V', 'E', 'D', + 'M', 'O', 'V', 'E', 'S', + 'M', 'O', 'V', 'I', 'E', + 'M', 'O', 'Y', 'A', 'I', + 'M', 'U', 'H', 'O', 'R', + 'M', 'U', 'K', 'H', 'A', + 'M', 'U', 'L', 'T', 'I', + 'M', 'U', 'N', 'A', 'H', + 'M', 'U', 'R', 'D', 'A', + 'M', 'U', 'S', 'H', '3', + 'M', 'U', 'S', 'I', 'C', + 'N', '-', 'A', 'R', 'Y', + 'N', '0', '1', '8', 'A', + 'N', '0', '1', '8', 'B', + 'N', '0', '2', '5', 'A', + 'N', '0', '3', '3', 'A', + 'N', '0', '3', '4', 'A', + 'N', '0', '3', '5', 'A', + 'N', '0', '3', '7', 'A', + 'N', 'A', 'B', 'L', 'A', + 'N', 'A', 'G', 'A', 'R', + 'N', 'A', 'G', 'R', 'I', + 'N', 'A', 'I', 'R', 'A', + 'N', 'A', 'S', 'A', 'L', + 'N', 'A', 'S', 'H', 'I', + 'N', 'A', 'Z', 'A', 'R', + 'N', 'B', 'I', 'E', 'P', + 'N', 'B', 'I', 'E', 'X', + 'N', 'B', 'U', 'R', 'X', + 'N', 'B', 'Y', 'R', 'X', + 'N', 'C', 'H', 'A', 'U', + 'N', 'D', 'E', 'U', 'T', + 'N', 'D', 'E', 'U', 'X', + 'N', 'D', 'I', 'A', 'Q', + 'N', 'D', 'I', 'D', 'A', + 'N', 'D', 'I', 'E', 'X', + 'N', 'D', 'O', 'L', 'E', + 'N', 'D', 'U', 'R', 'X', + 'N', 'E', '-', 'K', 'O', + 'N', 'E', 'M', 'K', 'A', + 'N', 'E', 'N', 'O', 'E', + 'N', 'E', 'U', 'M', 'E', + 'N', 'G', 'A', 'A', 'I', + 'N', 'G', 'G', 'A', 'A', + 'N', 'G', 'G', 'A', 'P', + 'N', 'G', 'G', 'E', 'E', + 'N', 'G', 'G', 'E', 'N', + 'N', 'G', 'G', 'E', 'U', + 'N', 'G', 'G', 'O', 'O', + 'N', 'G', 'G', 'U', 'A', + 'N', 'G', 'G', 'U', 'M', + 'N', 'G', 'G', 'U', 'P', + 'N', 'G', 'I', 'E', 'P', + 'N', 'G', 'I', 'E', 'X', + 'N', 'G', 'K', 'A', 'P', + 'N', 'G', 'K', 'A', 'Q', + 'N', 'G', 'K', 'U', 'E', + 'N', 'G', 'K', 'U', 'M', + 'N', 'G', 'K', 'U', 'N', + 'N', 'G', 'K', 'U', 'P', + 'N', 'G', 'O', 'E', 'H', + 'N', 'G', 'U', 'A', 'E', + 'N', 'G', 'U', 'A', 'N', + 'N', 'G', 'U', 'O', 'T', + 'N', 'G', 'U', 'O', 'X', + 'N', 'I', '-', 'T', 'E', + 'N', 'I', 'E', 'U', 'N', + 'N', 'I', 'G', 'H', 'T', + 'N', 'I', 'N', 'J', 'A', + 'N', 'I', 'N', 'T', 'H', + 'N', 'I', 'S', 'A', 'G', + 'N', 'I', 'T', 'R', 'E', + 'N', 'I', 'Z', 'K', 'O', + 'N', 'J', 'A', 'E', 'M', + 'N', 'J', 'E', 'U', 'T', + 'N', 'J', 'E', 'U', 'X', + 'N', 'J', 'I', 'E', 'E', + 'N', 'J', 'I', 'E', 'P', + 'N', 'J', 'I', 'E', 'T', + 'N', 'J', 'I', 'E', 'X', + 'N', 'J', 'U', 'A', 'E', + 'N', 'J', 'U', 'E', 'Q', + 'N', 'J', 'U', 'O', 'X', + 'N', 'J', 'U', 'Q', 'A', + 'N', 'J', 'U', 'R', 'X', + 'N', 'J', 'Y', 'R', 'X', + 'N', 'L', '0', '0', '1', + 'N', 'L', '0', '0', '2', + 'N', 'L', '0', '0', '3', + 'N', 'L', '0', '0', '4', + 'N', 'L', '0', '0', '5', + 'N', 'L', '0', '0', '6', + 'N', 'L', '0', '0', '7', + 'N', 'L', '0', '0', '8', + 'N', 'L', '0', '0', '9', + 'N', 'L', '0', '1', '0', + 'N', 'L', '0', '1', '1', + 'N', 'L', '0', '1', '2', + 'N', 'L', '0', '1', '3', + 'N', 'L', '0', '1', '4', + 'N', 'L', '0', '1', '5', + 'N', 'L', '0', '1', '6', + 'N', 'L', '0', '1', '7', + 'N', 'L', '0', '1', '8', + 'N', 'L', '0', '1', '9', + 'N', 'L', '0', '2', '0', + 'N', 'N', 'B', 'S', 'P', + 'N', 'N', 'G', 'A', 'A', + 'N', 'N', 'G', 'I', 'I', + 'N', 'N', 'G', 'O', 'O', + 'N', 'O', 'O', 'N', 'U', + 'N', 'O', 'R', 'T', 'H', + 'N', 'O', 'T', 'C', 'H', + 'N', 'O', 'T', 'E', 'S', + 'N', 'O', 'T', 'T', 'O', + 'N', 'R', 'U', 'R', 'X', + 'N', 'R', 'Y', 'R', 'X', + 'N', 'S', 'H', 'A', 'Q', + 'N', 'S', 'H', 'E', 'E', + 'N', 'S', 'H', 'U', 'E', + 'N', 'S', 'H', 'U', 'T', + 'N', 'S', 'I', 'E', 'E', + 'N', 'S', 'U', 'O', 'T', + 'N', 'T', 'E', 'U', 'M', + 'N', 'T', 'H', 'A', 'U', + 'N', 'T', 'I', 'E', 'E', + 'N', 'T', 'S', 'A', 'U', + 'N', 'T', 'X', 'I', 'V', + 'N', 'U', '0', '0', '1', + 'N', 'U', '0', '0', '2', + 'N', 'U', '0', '0', '3', + 'N', 'U', '0', '0', '4', + 'N', 'U', '0', '0', '5', + 'N', 'U', '0', '0', '6', + 'N', 'U', '0', '0', '7', + 'N', 'U', '0', '0', '8', + 'N', 'U', '0', '0', '9', + 'N', 'U', '0', '1', '0', + 'N', 'U', '0', '1', '1', + 'N', 'U', '0', '1', '2', + 'N', 'U', '0', '1', '3', + 'N', 'U', '0', '1', '4', + 'N', 'U', '0', '1', '5', + 'N', 'U', '0', '1', '6', + 'N', 'U', '0', '1', '7', + 'N', 'U', '0', '1', '8', + 'N', 'U', '0', '1', '9', + 'N', 'U', '0', '2', '0', + 'N', 'U', '0', '2', '1', + 'N', 'U', '0', '2', '2', + 'N', 'U', 'E', 'N', 'G', + 'N', 'U', 'K', 'T', 'A', + 'N', 'U', 'N', 'U', 'Z', + 'N', 'U', 'S', 'H', 'U', + 'N', 'Y', 'I', 'E', 'P', + 'N', 'Y', 'I', 'E', 'T', + 'N', 'Y', 'I', 'E', 'X', + 'N', 'Y', 'U', 'O', 'P', + 'N', 'Y', 'U', 'O', 'X', + 'N', 'Z', 'E', 'U', 'M', + 'N', 'Z', 'I', 'E', 'P', + 'N', 'Z', 'I', 'E', 'X', + 'N', 'Z', 'U', 'O', 'X', + 'N', 'Z', 'U', 'R', 'X', + 'N', 'Z', 'Y', 'R', 'X', + 'O', '-', 'O', '-', 'I', + 'O', '-', 'Y', 'A', 'E', + 'O', '-', 'Y', 'E', 'O', + 'O', '0', '0', '1', 'A', + 'O', '0', '0', '5', 'A', + 'O', '0', '0', '6', 'A', + 'O', '0', '0', '6', 'B', + 'O', '0', '0', '6', 'C', + 'O', '0', '0', '6', 'D', + 'O', '0', '0', '6', 'E', + 'O', '0', '0', '6', 'F', + 'O', '0', '1', '0', 'A', + 'O', '0', '1', '0', 'B', + 'O', '0', '1', '0', 'C', + 'O', '0', '1', '9', 'A', + 'O', '0', '2', '0', 'A', + 'O', '0', '2', '4', 'A', + 'O', '0', '2', '5', 'A', + 'O', '0', '2', '9', 'A', + 'O', '0', '3', '0', 'A', + 'O', '0', '3', '3', 'A', + 'O', '0', '3', '6', 'A', + 'O', '0', '3', '6', 'B', + 'O', '0', '3', '6', 'C', + 'O', '0', '3', '6', 'D', + 'O', '0', '5', '0', 'A', + 'O', '0', '5', '0', 'B', + 'O', 'B', 'O', 'L', 'S', + 'O', 'G', 'H', 'A', 'M', + 'O', 'J', 'E', 'O', 'N', + 'O', 'K', 'A', 'R', 'A', + 'O', 'L', 'D', 'E', 'R', + 'O', 'L', 'I', 'V', 'E', + 'O', 'M', 'E', 'G', 'A', + 'O', 'N', 'I', 'O', 'N', + 'O', 'N', 'K', 'A', 'R', + 'O', 'R', 'C', 'U', 'S', + 'O', 'R', 'D', 'E', 'R', + 'O', 'R', 'E', '-', '2', + 'O', 'R', 'I', 'Y', 'A', + 'O', 'S', 'A', 'G', 'E', + 'O', 'S', 'O', 'K', 'A', + 'O', 'T', 'H', 'A', 'L', + 'O', 'T', 'H', 'E', 'R', + 'O', 'T', 'T', 'E', 'R', + 'O', 'T', 'T', 'H', 'I', + 'O', 'U', 'N', 'C', 'E', + 'O', 'U', 'T', 'E', 'R', + 'O', 'X', 'E', 'I', 'A', + 'P', '0', '0', '1', 'A', + 'P', '0', '0', '3', 'A', + 'P', 'A', 'A', 'T', 'U', + 'P', 'A', 'D', 'M', 'A', + 'P', 'A', 'G', 'E', 'R', + 'P', 'A', 'G', 'E', 'S', + 'P', 'A', 'L', 'K', 'A', + 'P', 'A', 'L', 'M', 'S', + 'P', 'A', 'N', 'A', 'M', + 'P', 'A', 'N', 'D', 'A', + 'P', 'A', 'N', 'T', 'I', + 'P', 'A', 'P', 'E', 'R', + 'P', 'A', 'R', 'T', 'Y', + 'P', 'A', 'R', 'U', 'M', + 'P', 'A', 'S', 'E', 'Q', + 'P', 'A', 'S', 'U', 'Q', + 'P', 'A', 'T', 'A', 'H', + 'P', 'A', 'T', 'A', 'K', + 'P', 'A', 'T', 'T', 'Y', + 'P', 'A', 'U', 'S', 'E', + 'P', 'A', 'Z', 'E', 'R', + 'P', 'E', 'A', 'C', 'E', + 'P', 'E', 'A', 'C', 'H', + 'P', 'E', 'A', 'K', 'S', + 'P', 'E', 'D', 'A', 'L', + 'P', 'E', 'E', 'Z', 'I', + 'P', 'E', 'H', 'E', 'H', + 'P', 'E', 'I', 'T', 'H', + 'P', 'E', 'N', 'N', 'Y', + 'P', 'E', 'N', 'S', 'U', + 'P', 'E', 'P', 'E', 'T', + 'P', 'E', 'S', 'H', '2', + 'P', 'E', 'T', 'R', 'I', + 'P', 'H', 'O', 'N', 'E', + 'P', 'H', 'U', 'N', 'G', + 'P', 'I', 'A', 'N', 'O', + 'P', 'I', 'E', 'C', 'E', + 'P', 'I', 'E', 'E', 'Q', + 'P', 'I', 'E', 'E', 'T', + 'P', 'I', 'E', 'U', 'P', + 'P', 'I', 'R', 'I', 'G', + 'P', 'I', 'Z', 'Z', 'A', + 'P', 'L', 'A', 'C', 'E', + 'P', 'L', 'A', 'N', 'E', + 'P', 'L', 'A', 'N', 'T', + 'P', 'L', 'A', 'T', 'E', + 'P', 'L', 'H', 'A', 'U', + 'P', 'L', 'U', 'T', 'A', + 'P', 'L', 'U', 'T', 'O', + 'P', 'O', 'I', 'N', 'T', + 'P', 'O', 'L', 'L', 'U', + 'P', 'O', 'N', 'D', 'O', + 'P', 'O', 'U', 'C', 'H', + 'P', 'O', 'U', 'N', 'D', + 'P', 'O', 'W', 'E', 'R', + 'P', 'R', 'I', 'M', 'E', + 'P', 'R', 'I', 'N', 'T', + 'P', 'R', 'O', 'O', 'F', + 'P', 'R', 'O', 'V', 'E', + 'P', 'S', 'I', 'L', 'I', + 'P', 'U', 'R', 'S', 'E', + 'Q', 'A', 'A', 'F', 'U', + 'Q', 'A', 'D', 'M', 'A', + 'Q', 'A', 'T', 'A', 'N', + 'Q', 'H', 'O', 'P', 'H', + 'Q', 'H', 'W', 'A', 'A', + 'Q', 'H', 'W', 'E', 'E', + 'Q', 'I', 'T', 'S', 'A', + 'Q', 'U', 'E', 'E', 'N', + 'Q', 'U', 'I', 'C', 'K', + 'Q', 'U', 'I', 'L', 'L', + 'Q', 'U', 'I', 'L', 'T', + 'Q', 'U', 'O', 'T', 'E', + 'R', '0', '0', '2', 'A', + 'R', '0', '0', '3', 'A', + 'R', '0', '0', '3', 'B', + 'R', '0', '1', '0', 'A', + 'R', '0', '1', '6', 'A', + 'R', 'A', 'D', 'I', 'O', + 'R', 'A', 'I', 'D', 'A', + 'R', 'A', 'I', 'D', 'O', + 'R', 'A', 'N', 'G', 'E', + 'R', 'A', 'S', 'H', 'A', + 'R', 'A', 'T', 'H', 'A', + 'R', 'A', 'T', 'I', 'O', + 'R', 'A', 'V', 'N', 'O', + 'R', 'A', 'Z', 'O', 'R', + 'R', 'B', 'A', 'S', 'A', + 'R', 'E', 'A', 'C', 'H', + 'R', 'E', 'G', 'I', 'A', + 'R', 'E', 'I', 'W', 'A', + 'R', 'E', 'L', 'A', 'A', + 'R', 'E', 'P', 'H', 'A', + 'R', 'E', 'V', 'I', 'A', + 'R', 'E', 'V', 'M', 'A', + 'R', 'G', 'Y', 'A', 'N', + 'R', 'I', 'C', 'E', 'M', + 'R', 'I', 'E', 'U', 'L', + 'R', 'I', 'F', 'L', 'E', + 'R', 'I', 'G', 'H', 'T', + 'R', 'I', 'N', 'G', 'S', + 'R', 'I', 'T', 'S', 'I', + 'R', 'I', 'V', 'E', 'R', + 'R', 'N', 'O', 'O', 'N', + 'R', 'O', 'B', 'A', 'T', + 'R', 'O', 'B', 'O', 'T', + 'R', 'O', 'G', 'O', 'M', + 'R', 'O', 'M', 'A', 'N', + 'R', 'O', 'U', 'N', 'D', + 'R', 'R', 'U', 'O', 'X', + 'R', 'R', 'U', 'R', 'X', + 'R', 'R', 'Y', 'R', 'X', + 'R', 'T', 'A', 'G', 'S', + 'R', 'U', 'B', 'L', 'E', + 'R', 'U', 'G', 'B', 'Y', + 'R', 'U', 'L', 'A', 'I', + 'R', 'U', 'L', 'E', 'R', + 'R', 'U', 'M', 'A', 'I', + 'R', 'U', 'N', 'I', 'C', + 'R', 'U', 'P', 'E', 'E', + 'R', 'U', 'P', 'I', 'I', + 'R', 'W', 'A', 'H', 'A', + 'S', '0', '0', '2', 'A', + 'S', '0', '0', '6', 'A', + 'S', '0', '1', '4', 'A', + 'S', '0', '1', '4', 'B', + 'S', '0', '1', '7', 'A', + 'S', '0', '2', '6', 'A', + 'S', '0', '2', '6', 'B', + 'S', '0', '3', '5', 'A', + 'S', 'A', 'D', 'H', 'E', + 'S', 'A', 'F', 'H', 'A', + 'S', 'A', 'K', 'H', 'A', + 'S', 'A', 'K', 'I', 'N', + 'S', 'A', 'K', 'O', 'T', + 'S', 'A', 'K', 'T', 'A', + 'S', 'A', 'L', 'A', 'D', + 'S', 'A', 'L', 'A', 'M', + 'S', 'A', 'L', 'L', 'A', + 'S', 'A', 'M', 'B', 'A', + 'S', 'A', 'M', 'K', 'A', + 'S', 'A', 'M', 'P', 'I', + 'S', 'A', 'N', 'A', 'H', + 'S', 'A', 'S', 'A', 'K', + 'S', 'A', 'U', 'I', 'L', + 'S', 'A', 'W', 'A', 'N', + 'S', 'B', 'R', 'U', 'L', + 'S', 'C', 'A', 'R', 'F', + 'S', 'C', 'H', 'W', 'A', + 'S', 'C', 'O', 'R', 'E', + 'S', 'C', 'O', 'T', 'S', + 'S', 'D', 'O', 'N', 'G', + 'S', 'E', 'D', 'N', 'A', + 'S', 'E', 'E', 'N', 'U', + 'S', 'E', 'G', 'N', 'O', + 'S', 'E', 'G', 'O', 'L', + 'S', 'E', 'N', 'T', 'I', + 'S', 'E', 'N', 'T', 'O', + 'S', 'E', 'R', 'I', 'F', + 'S', 'E', 'V', 'E', 'N', + 'S', 'H', 'A', 'B', '6', + 'S', 'H', 'A', 'D', 'E', + 'S', 'H', 'A', 'F', 'T', + 'S', 'H', 'A', 'N', 'G', + 'S', 'H', 'A', 'P', 'E', + 'S', 'H', 'A', 'R', '2', + 'S', 'H', 'A', 'R', 'A', + 'S', 'H', 'A', 'R', 'K', + 'S', 'H', 'A', 'R', 'P', + 'S', 'H', 'A', 'R', 'U', + 'S', 'H', 'C', 'H', 'A', + 'S', 'H', 'E', 'E', 'N', + 'S', 'H', 'E', 'E', 'P', + 'S', 'H', 'E', 'G', '9', + 'S', 'H', 'E', 'L', 'F', + 'S', 'H', 'E', 'L', 'L', + 'S', 'H', 'E', 'S', 'H', + 'S', 'H', 'E', 'U', 'X', + 'S', 'H', 'E', 'V', 'A', + 'S', 'H', 'I', 'F', 'T', + 'S', 'H', 'I', 'I', 'N', + 'S', 'H', 'I', 'M', 'A', + 'S', 'H', 'I', 'R', 'T', + 'S', 'H', 'I', 'T', 'A', + 'S', 'H', 'O', 'E', 'S', + 'S', 'H', 'O', 'G', 'I', + 'S', 'H', 'O', 'O', 'I', + 'S', 'H', 'O', 'O', 'T', + 'S', 'H', 'O', 'R', 'T', + 'S', 'H', 'R', 'A', 'A', + 'S', 'H', 'R', 'I', 'I', + 'S', 'H', 'R', 'O', 'O', + 'S', 'H', 'R', 'U', 'G', + 'S', 'H', 'U', 'E', 'Q', + 'S', 'H', 'U', 'O', 'P', + 'S', 'H', 'U', 'O', 'X', + 'S', 'H', 'U', 'R', 'X', + 'S', 'H', 'W', 'A', 'A', + 'S', 'H', 'W', 'I', 'I', + 'S', 'H', 'W', 'O', 'O', + 'S', 'H', 'W', 'O', 'Y', + 'S', 'H', 'Y', 'E', 'R', + 'S', 'H', 'Y', 'R', 'X', + 'S', 'I', 'G', 'E', 'L', + 'S', 'I', 'G', 'M', 'A', + 'S', 'I', 'G', 'N', 'S', + 'S', 'I', 'L', 'A', '3', + 'S', 'I', 'X', 'T', 'H', + 'S', 'I', 'X', 'T', 'Y', + 'S', 'I', 'Y', 'A', 'Q', + 'S', 'K', 'A', 'T', 'E', + 'S', 'K', 'I', 'E', 'R', + 'S', 'K', 'O', 'B', 'A', + 'S', 'K', 'U', 'L', 'L', + 'S', 'K', 'U', 'N', 'K', + 'S', 'L', 'A', 'S', 'H', + 'S', 'L', 'A', 'V', 'E', + 'S', 'L', 'E', 'E', 'P', + 'S', 'L', 'I', 'C', 'E', + 'S', 'L', 'I', 'D', 'E', + 'S', 'L', 'I', 'N', 'G', + 'S', 'L', 'O', 'A', 'N', + 'S', 'L', 'O', 'P', 'E', + 'S', 'L', 'O', 'T', 'H', + 'S', 'L', 'O', 'V', 'O', + 'S', 'M', 'A', 'L', 'L', + 'S', 'M', 'A', 'S', 'H', + 'S', 'M', 'E', 'A', 'R', + 'S', 'M', 'I', 'L', 'E', + 'S', 'N', 'A', 'I', 'L', + 'S', 'N', 'A', 'K', 'E', + 'S', 'N', 'O', 'U', 'T', + 'S', 'O', 'C', 'K', 'S', + 'S', 'O', 'L', 'I', 'D', + 'S', 'O', 'U', 'N', 'D', + 'S', 'O', 'U', 'T', 'H', + 'S', 'P', 'A', 'C', 'E', + 'S', 'P', 'A', 'D', 'E', + 'S', 'P', 'E', 'A', 'R', + 'S', 'P', 'E', 'N', 'T', + 'S', 'P', 'I', 'C', 'E', + 'S', 'P', 'I', 'N', 'E', + 'S', 'P', 'L', 'I', 'T', + 'S', 'P', 'O', 'O', 'L', + 'S', 'P', 'O', 'O', 'N', + 'S', 'Q', 'U', 'A', 'T', + 'S', 'Q', 'U', 'I', 'D', + 'S', 'S', 'H', 'I', 'N', + 'S', 'S', 'I', 'E', 'P', + 'S', 'S', 'I', 'E', 'X', + 'S', 'S', 'Y', 'R', 'X', + 'S', 'T', 'A', 'F', 'F', + 'S', 'T', 'A', 'N', 'D', + 'S', 'T', 'A', 'R', 'K', + 'S', 'T', 'A', 'R', 'S', + 'S', 'T', 'A', 'R', 'T', + 'S', 'T', 'E', 'A', 'M', + 'S', 'T', 'I', 'C', 'K', + 'S', 'T', 'I', 'L', 'E', + 'S', 'T', 'I', 'L', 'L', + 'S', 'T', 'O', 'C', 'K', + 'S', 'T', 'O', 'N', 'E', + 'S', 'T', 'O', 'R', 'E', + 'S', 'T', 'O', 'V', 'E', + 'S', 'T', 'R', 'A', 'W', + 'S', 'T', 'U', 'D', 'Y', + 'S', 'T', 'U', 'P', 'A', + 'S', 'U', 'A', 'E', 'N', + 'S', 'U', 'A', 'E', 'T', + 'S', 'U', 'H', 'U', 'R', + 'S', 'U', 'K', 'U', 'N', + 'S', 'U', 'P', 'E', 'R', + 'S', 'U', 'R', 'Y', 'A', + 'S', 'U', 'S', 'H', 'I', + 'S', 'U', 'T', 'R', 'A', + 'S', 'U', 'T', 'U', 'H', + 'S', 'W', 'A', 'S', 'H', + 'S', 'W', 'E', 'A', 'T', + 'S', 'W', 'E', 'E', 'T', + 'S', 'W', 'I', 'R', 'L', + 'S', 'W', 'O', 'R', 'D', + 'S', 'W', 'U', 'N', 'G', + 'S', 'Y', 'R', 'M', 'A', + 'T', '-', 'R', 'E', 'X', + 'T', '0', '0', '3', 'A', + 'T', '0', '0', '7', 'A', + 'T', '0', '0', '8', 'A', + 'T', '0', '0', '9', 'A', + 'T', '0', '1', '1', 'A', + 'T', '0', '1', '6', 'A', + 'T', '0', '3', '2', 'A', + 'T', '0', '3', '3', 'A', + 'T', 'A', 'B', 'L', 'E', + 'T', 'A', 'K', 'R', 'I', + 'T', 'A', 'L', 'L', 'Y', + 'T', 'A', 'M', 'A', 'N', + 'T', 'A', 'M', 'I', 'L', + 'T', 'A', 'P', 'E', 'R', + 'T', 'A', 'S', 'L', 'A', + 'T', 'A', 'S', 'S', 'I', + 'T', 'C', 'H', 'E', 'H', + 'T', 'E', 'A', 'R', 'S', + 'T', 'E', 'D', 'D', 'Y', + 'T', 'E', 'E', 'E', 'E', + 'T', 'E', 'E', 'N', 'S', + 'T', 'E', 'E', 'T', 'H', + 'T', 'E', 'G', 'E', 'H', + 'T', 'E', 'H', 'E', 'H', + 'T', 'E', 'I', 'W', 'S', + 'T', 'E', 'N', 'G', 'E', + 'T', 'E', 'N', 'S', 'E', + 'T', 'E', 'N', 'T', 'H', + 'T', 'E', 'N', 'T', 'U', + 'T', 'E', 'V', 'I', 'R', + 'T', 'H', 'A', 'R', 'I', + 'T', 'H', 'E', 'L', 'E', + 'T', 'H', 'E', 'M', 'A', + 'T', 'H', 'E', 'R', 'E', + 'T', 'H', 'E', 'T', 'A', + 'T', 'H', 'E', 'T', 'H', + 'T', 'H', 'I', 'A', 'B', + 'T', 'H', 'I', 'C', 'K', + 'T', 'H', 'I', 'G', 'H', + 'T', 'H', 'I', 'N', 'G', + 'T', 'H', 'I', 'R', 'D', + 'T', 'H', 'I', 'T', 'A', + 'T', 'H', 'O', 'N', 'G', + 'T', 'H', 'O', 'R', 'N', + 'T', 'H', 'R', 'E', 'E', + 'T', 'H', 'U', 'M', 'B', + 'T', 'H', 'U', 'N', 'G', + 'T', 'H', 'U', 'R', 'S', + 'T', 'H', 'W', 'A', 'A', + 'T', 'H', 'W', 'E', 'E', + 'T', 'H', 'W', 'I', 'I', + 'T', 'H', 'W', 'O', 'O', + 'T', 'I', 'A', 'R', 'A', + 'T', 'I', 'G', 'E', 'R', + 'T', 'I', 'G', 'H', 'T', + 'T', 'I', 'K', 'H', 'Y', + 'T', 'I', 'L', 'D', 'E', + 'T', 'I', 'L', 'E', 'S', + 'T', 'I', 'M', 'E', 'R', + 'T', 'I', 'M', 'E', 'S', + 'T', 'I', 'N', 'N', 'E', + 'T', 'I', 'P', 'P', 'I', + 'T', 'I', 'R', 'E', 'D', + 'T', 'I', 'R', 'T', 'A', + 'T', 'I', 'T', 'L', 'O', + 'T', 'I', 'W', 'A', 'Z', + 'T', 'L', 'H', 'E', 'E', + 'T', 'L', 'H', 'O', 'O', + 'T', 'L', 'H', 'W', 'E', + 'T', 'L', 'H', 'Y', 'A', + 'T', 'O', '-', 'R', 'A', + 'T', 'O', 'K', 'Y', 'O', + 'T', 'O', 'M', 'P', 'I', + 'T', 'O', 'N', 'A', 'L', + 'T', 'O', 'N', 'O', 'S', + 'T', 'O', 'N', 'P', 'I', + 'T', 'O', 'O', 'T', 'H', + 'T', 'O', 'R', 'C', 'H', + 'T', 'O', 'R', 'S', 'O', + 'T', 'O', 'T', 'A', 'L', + 'T', 'O', 'U', 'C', 'H', + 'T', 'O', 'W', 'E', 'R', + 'T', 'O', 'Y', 'O', 'R', + 'T', 'R', 'A', 'C', 'K', + 'T', 'R', 'A', 'D', 'E', + 'T', 'R', 'A', 'I', 'N', + 'T', 'R', 'E', 'N', 'D', + 'T', 'R', 'I', 'L', 'L', + 'T', 'R', 'I', 'O', 'N', + 'T', 'R', 'O', 'L', 'L', + 'T', 'R', 'U', 'C', 'K', + 'T', 'R', 'U', 'N', 'K', + 'T', 'R', 'U', 'T', 'H', + 'T', 'S', 'A', 'D', 'I', + 'T', 'S', 'A', 'T', 'A', + 'T', 'S', 'E', 'E', 'B', + 'T', 'S', 'E', 'R', 'E', + 'T', 'S', 'H', 'A', 'B', + 'T', 'S', 'H', 'E', 'G', + 'T', 'S', 'H', 'E', 'S', + 'T', 'T', 'H', 'A', 'A', + 'T', 'T', 'H', 'E', 'E', + 'T', 'T', 'H', 'O', 'O', + 'T', 'T', 'H', 'W', 'E', + 'T', 'T', 'S', 'E', 'E', + 'T', 'T', 'T', 'H', 'A', + 'T', 'U', '-', 'T', 'O', + 'T', 'U', 'A', 'E', 'P', + 'T', 'U', 'L', 'I', 'P', + 'T', 'U', 'M', 'A', 'E', + 'T', 'U', 'N', 'N', 'Y', + 'T', 'U', 'P', 'N', 'I', + 'T', 'U', 'R', 'O', '2', + 'T', 'U', 'T', 'T', 'Y', + 'T', 'U', 'U', 'M', 'U', + 'U', '-', 'I', '-', 'I', + 'U', '-', 'Y', 'E', 'O', + 'U', '0', '0', '6', 'A', + 'U', '0', '0', '6', 'B', + 'U', '0', '2', '3', 'A', + 'U', '0', '2', '9', 'A', + 'U', '0', '3', '2', 'A', + 'U', 'D', 'A', 'A', 'T', + 'U', 'K', 'A', 'R', 'A', + 'U', 'M', 'B', 'I', 'N', + 'U', 'N', 'C', 'I', 'A', + 'U', 'N', 'D', 'E', 'R', + 'U', 'N', 'I', 'O', 'N', + 'U', 'N', 'I', 'T', 'Y', + 'U', 'P', 'P', 'E', 'R', + 'U', 'R', 'I', 'N', 'E', + 'U', 'R', 'U', 'D', 'A', + 'U', 'S', 'S', 'U', '3', + 'U', 'T', 'T', 'H', 'I', + 'U', 'T', 'U', 'K', 'I', + 'V', '0', '0', '1', 'A', + 'V', '0', '0', '1', 'B', + 'V', '0', '0', '1', 'C', + 'V', '0', '0', '1', 'D', + 'V', '0', '0', '1', 'E', + 'V', '0', '0', '1', 'F', + 'V', '0', '0', '1', 'G', + 'V', '0', '0', '1', 'H', + 'V', '0', '0', '1', 'I', + 'V', '0', '0', '2', 'A', + 'V', '0', '0', '7', 'A', + 'V', '0', '0', '7', 'B', + 'V', '0', '1', '1', 'A', + 'V', '0', '1', '1', 'B', + 'V', '0', '1', '1', 'C', + 'V', '0', '1', '1', 'D', + 'V', '0', '1', '2', 'A', + 'V', '0', '1', '2', 'B', + 'V', '0', '2', '0', 'A', + 'V', '0', '2', '0', 'B', + 'V', '0', '2', '0', 'C', + 'V', '0', '2', '0', 'D', + 'V', '0', '2', '0', 'E', + 'V', '0', '2', '0', 'F', + 'V', '0', '2', '0', 'G', + 'V', '0', '2', '0', 'H', + 'V', '0', '2', '0', 'I', + 'V', '0', '2', '0', 'J', + 'V', '0', '2', '0', 'K', + 'V', '0', '2', '0', 'L', + 'V', '0', '2', '3', 'A', + 'V', '0', '2', '8', 'A', + 'V', '0', '2', '9', 'A', + 'V', '0', '3', '0', 'A', + 'V', '0', '3', '1', 'A', + 'V', '0', '3', '3', 'A', + 'V', '0', '3', '7', 'A', + 'V', '0', '4', '0', 'A', + 'V', 'A', 'A', 'V', 'U', + 'V', 'A', 'R', 'C', 'A', + 'V', 'A', 'R', 'I', 'A', + 'V', 'A', 'R', 'Y', 'S', + 'V', 'A', 'S', 'I', 'S', + 'V', 'A', 'T', 'H', 'Y', + 'V', 'E', 'D', 'I', 'C', + 'V', 'E', 'R', 'G', 'E', + 'V', 'E', 'R', 'S', 'E', + 'V', 'E', 'S', 'T', 'A', + 'V', 'E', 'U', 'A', 'E', + 'V', 'I', 'D', 'E', 'O', + 'V', 'I', 'R', 'G', 'A', + 'V', 'I', 'R', 'G', 'O', + 'V', 'I', 'T', 'A', 'E', + 'V', 'O', 'C', 'A', 'L', + 'V', 'O', 'W', 'E', 'L', + 'V', 'Z', 'M', 'E', 'T', + 'W', '0', '0', '3', 'A', + 'W', '0', '0', '9', 'A', + 'W', '0', '1', '0', 'A', + 'W', '0', '1', '4', 'A', + 'W', '0', '1', '7', 'A', + 'W', '0', '1', '8', 'A', + 'W', '0', '2', '4', 'A', + 'W', 'A', 'A', 'V', 'U', + 'W', 'A', 'D', 'D', 'A', + 'W', 'A', 'I', 'S', 'T', + 'W', 'A', 'Q', 'F', 'A', + 'W', 'A', 'S', 'L', 'A', + 'W', 'A', 'T', 'C', 'H', + 'W', 'A', 'T', 'E', 'R', + 'W', 'A', 'T', 'T', 'O', + 'W', 'A', 'V', 'E', 'S', + 'W', 'E', 'A', 'R', 'Y', + 'W', 'E', 'D', 'G', 'E', + 'W', 'H', 'A', 'L', 'E', + 'W', 'H', 'E', 'A', 'T', + 'W', 'H', 'E', 'E', 'L', + 'W', 'H', 'I', 'T', 'E', + 'W', 'H', 'O', 'L', 'E', + 'W', 'I', 'A', 'N', 'G', + 'W', 'I', 'D', 'T', 'H', + 'W', 'I', 'N', 'D', 'U', + 'W', 'I', 'N', 'G', 'S', + 'W', 'I', 'N', 'J', 'A', + 'W', 'I', 'R', 'E', 'D', + 'W', 'O', 'M', 'A', 'N', + 'W', 'O', 'M', 'E', 'N', + 'W', 'O', 'R', 'L', 'D', + 'W', 'R', 'I', 'S', 'T', + 'W', 'R', 'O', 'N', 'G', + 'W', 'U', 'A', 'E', 'N', + 'W', 'U', 'A', 'E', 'T', + 'W', 'U', 'N', 'J', 'O', + 'X', '-', 'R', 'A', 'Y', + 'X', '0', '0', '4', 'A', + 'X', '0', '0', '4', 'B', + 'X', '0', '0', '6', 'A', + 'X', '0', '0', '8', 'A', + 'X', 'H', 'E', 'Y', 'N', + 'X', 'I', 'R', 'O', 'N', + 'X', 'Y', 'E', 'E', 'M', + 'X', 'Y', 'O', 'O', 'J', + 'Y', '0', '0', '1', 'A', + 'Y', 'A', '-', 'Y', 'O', + 'Y', 'A', 'A', 'D', 'O', + 'Y', 'A', 'A', 'R', 'U', + 'Y', 'A', 'D', 'D', 'H', + 'Y', 'A', 'G', 'H', 'H', + 'Y', 'A', 'K', 'H', 'H', + 'Y', 'A', 'M', 'O', 'K', + 'Y', 'E', 'N', 'A', 'P', + 'Y', 'E', 'O', '-', 'O', + 'Y', 'E', 'O', '-', 'U', + 'Y', 'E', 'R', 'A', 'H', + 'Y', 'E', 'S', 'T', 'U', + 'Y', 'E', 'T', 'I', 'V', + 'Y', 'E', 'U', 'A', 'E', + 'Y', 'I', 'Z', 'E', 'T', + 'Y', 'O', '-', 'A', 'E', + 'Y', 'O', '-', 'E', 'O', + 'Y', 'O', '-', 'Y', 'A', + 'Y', 'O', '-', 'Y', 'O', + 'Y', 'U', '-', 'A', 'E', + 'Y', 'U', '-', 'E', 'O', + 'Y', 'U', '-', 'Y', 'E', + 'Y', 'U', 'A', 'E', 'N', + 'Y', 'U', 'W', 'O', 'Q', + 'Z', '0', '0', '2', 'A', + 'Z', '0', '0', '2', 'B', + 'Z', '0', '0', '2', 'C', + 'Z', '0', '0', '2', 'D', + 'Z', '0', '0', '3', 'A', + 'Z', '0', '0', '3', 'B', + 'Z', '0', '0', '4', 'A', + 'Z', '0', '0', '5', 'A', + 'Z', '0', '1', '5', 'A', + 'Z', '0', '1', '5', 'B', + 'Z', '0', '1', '5', 'C', + 'Z', '0', '1', '5', 'D', + 'Z', '0', '1', '5', 'E', + 'Z', '0', '1', '5', 'F', + 'Z', '0', '1', '5', 'G', + 'Z', '0', '1', '5', 'H', + 'Z', '0', '1', '5', 'I', + 'Z', '0', '1', '6', 'A', + 'Z', '0', '1', '6', 'B', + 'Z', '0', '1', '6', 'C', + 'Z', '0', '1', '6', 'D', + 'Z', '0', '1', '6', 'E', + 'Z', '0', '1', '6', 'F', + 'Z', '0', '1', '6', 'G', + 'Z', '0', '1', '6', 'H', + 'Z', 'A', 'Q', 'E', 'F', + 'Z', 'A', 'R', 'Q', 'A', + 'Z', 'A', 'Y', 'I', 'N', + 'Z', 'E', 'B', 'R', 'A', + 'Z', 'E', 'V', 'O', 'K', + 'Z', 'H', 'A', 'I', 'N', + 'Z', 'H', 'U', 'O', 'P', + 'Z', 'H', 'U', 'O', 'X', + 'Z', 'H', 'U', 'R', 'X', + 'Z', 'H', 'Y', 'R', 'X', + 'Z', 'I', 'L', 'D', 'E', + 'Z', 'I', 'N', 'O', 'R', + 'Z', 'I', 'Q', 'A', 'A', + 'Z', 'L', 'A', 'M', 'A', + 'Z', 'U', 'B', 'U', 'R', + 'Z', 'Y', 'G', 'O', 'S', + 'Z', 'Z', 'I', 'E', 'P', + 'Z', 'Z', 'I', 'E', 'T', + 'Z', 'Z', 'I', 'E', 'X', + 'Z', 'Z', 'S', 'Y', 'A', + 'Z', 'Z', 'U', 'R', 'X', + 'Z', 'Z', 'Y', 'R', 'X', + '-', 'K', 'H', 'Y', 'I', 'L', + '-', 'K', 'H', 'Y', 'U', 'D', + 'A', '7', '0', '9', '-', '2', + 'A', '7', '0', '9', '-', '3', + 'A', '7', '0', '9', '-', '4', + 'A', '7', '0', '9', '-', '6', + 'A', 'A', '0', '0', '7', 'A', + 'A', 'A', '0', '0', '7', 'B', + 'A', 'B', '0', '2', '1', 'F', + 'A', 'B', '0', '2', '1', 'M', + 'A', 'B', '0', '2', '2', 'F', + 'A', 'B', '0', '2', '2', 'M', + 'A', 'B', '0', '2', '3', 'M', + 'A', 'B', '1', '3', '1', 'A', + 'A', 'B', '1', '3', '1', 'B', + 'A', 'B', 'A', 'C', 'U', 'S', + 'A', 'C', 'C', 'E', 'N', 'T', + 'A', 'C', 'C', 'E', 'P', 'T', + 'A', 'E', 'G', 'E', 'A', 'N', + 'A', 'E', 'R', 'I', 'A', 'L', + 'A', 'F', 'S', 'A', 'A', 'Q', + 'A', 'I', 'H', 'V', 'U', 'S', + 'A', 'I', 'K', 'A', 'R', 'A', + 'A', 'L', '-', 'J', 'U', 'Z', + 'A', 'L', 'A', 'Y', 'H', 'E', + 'A', 'L', 'A', 'Y', 'H', 'I', + 'A', 'L', 'K', 'A', 'L', 'I', + 'A', 'L', 'L', 'A', 'A', 'H', + 'A', 'L', 'M', 'O', 'S', 'T', + 'A', 'M', 'O', 'U', 'N', 'T', + 'A', 'M', 'U', 'L', 'E', 'T', + 'A', 'N', 'C', 'H', 'O', 'R', + 'A', 'N', 'C', 'O', 'R', 'A', + 'A', 'N', 'G', 'L', 'E', 'D', + 'A', 'N', 'I', 'M', 'A', 'L', + 'A', 'N', 'N', 'A', 'A', 'U', + 'A', 'P', 'A', 'A', 'T', 'O', + 'A', 'P', 'L', 'O', 'U', 'N', + 'A', 'R', '-', 'R', 'U', 'B', + 'A', 'R', 'A', 'B', 'I', 'C', + 'A', 'R', 'A', 'E', 'A', 'E', + 'A', 'R', 'L', 'A', 'U', 'G', + 'A', 'R', 'M', 'O', 'U', 'R', + 'A', 'R', 'O', 'U', 'N', 'D', + 'A', 'R', 'O', 'U', 'R', 'A', + 'A', 'R', 'R', 'I', 'V', 'E', + 'A', 'R', 'R', 'O', 'W', 'S', + 'A', 'R', 'S', 'E', 'O', 'S', + 'A', 'R', 'T', 'A', 'B', 'E', + 'A', 'R', 'T', 'I', 'S', 'T', + 'A', 'R', 'U', 'H', 'U', 'A', + 'A', 'S', 'C', 'E', 'N', 'T', + 'A', 'S', 'H', 'G', 'A', 'B', + 'A', 'S', 'Y', 'U', 'R', 'A', + 'A', 'T', 'M', 'A', 'A', 'U', + 'A', 'T', 'O', 'M', 'I', 'C', + 'A', 'U', 'G', 'U', 'S', 'T', + 'A', 'U', 'T', 'U', 'M', 'N', + 'A', 'Y', 'A', 'N', 'N', 'A', + 'B', 'A', 'D', 'G', 'E', 'R', + 'B', 'A', 'H', 'A', 'R', '2', + 'B', 'A', 'I', 'M', 'A', 'I', + 'B', 'A', 'L', 'L', 'E', 'T', + 'B', 'A', 'L', 'L', 'O', 'T', + 'B', 'A', 'L', 'U', 'D', 'A', + 'B', 'A', 'M', 'B', 'O', 'O', + 'B', 'A', 'N', 'A', 'N', 'A', + 'B', 'A', 'N', 'T', 'O', 'C', + 'B', 'A', 'R', 'B', 'E', 'R', + 'B', 'A', 'R', 'L', 'E', 'Y', + 'B', 'A', 'R', 'R', 'E', 'D', + 'B', 'A', 'R', 'R', 'E', 'E', + 'B', 'A', 'S', 'K', 'E', 'T', + 'B', 'E', 'A', 'M', 'E', 'D', + 'B', 'E', 'A', 'V', 'E', 'R', + 'B', 'E', 'E', 'T', 'L', 'E', + 'B', 'E', 'F', 'O', 'R', 'E', + 'B', 'E', 'H', 'I', 'N', 'D', + 'B', 'E', 'R', 'B', 'E', 'R', + 'B', 'E', 'S', 'I', 'D', 'E', + 'B', 'E', 'Y', 'Y', 'A', 'L', + 'B', 'I', 'C', 'E', 'P', 'S', + 'B', 'I', 'K', 'I', 'N', 'I', + 'B', 'I', 'L', 'L', 'E', 'D', + 'B', 'I', 'N', 'A', 'R', 'Y', + 'B', 'I', 'S', 'H', 'O', 'P', + 'B', 'I', 'T', 'I', 'N', 'G', + 'B', 'I', 'T', 'T', 'E', 'R', + 'B', 'O', 'R', 'U', 'T', 'O', + 'B', 'O', 'T', 'T', 'L', 'E', + 'B', 'O', 'T', 'T', 'O', 'M', + 'B', 'O', 'W', 'I', 'N', 'G', + 'B', 'O', 'W', 'T', 'I', 'E', + 'B', 'O', 'X', 'I', 'N', 'G', + 'B', 'R', 'A', 'H', 'M', 'I', + 'B', 'R', 'A', 'N', 'C', 'H', + 'B', 'R', 'E', 'A', 'T', 'H', + 'B', 'R', 'E', 'V', 'I', 'S', + 'B', 'R', 'I', 'D', 'G', 'E', + 'B', 'R', 'I', 'E', 'F', 'S', + 'B', 'R', 'O', 'K', 'E', 'N', + 'B', 'R', 'O', 'N', 'Z', 'E', + 'B', 'U', 'B', 'B', 'L', 'E', + 'B', 'U', 'C', 'K', 'E', 'T', + 'B', 'U', 'C', 'K', 'L', 'E', + 'B', 'U', 'F', 'F', 'E', 'R', + 'B', 'U', 'L', 'L', 'E', 'T', + 'B', 'U', 'T', 'T', 'E', 'R', + 'B', 'U', 'T', 'T', 'O', 'N', + 'C', 'A', 'C', 'T', 'U', 'S', + 'C', 'A', 'M', 'E', 'R', 'A', + 'C', 'A', 'M', 'N', 'U', 'C', + 'C', 'A', 'N', 'C', 'E', 'L', + 'C', 'A', 'N', 'C', 'E', 'R', + 'C', 'A', 'N', 'D', 'L', 'E', + 'C', 'A', 'N', 'D', 'R', 'A', + 'C', 'A', 'N', 'N', 'E', 'D', + 'C', 'A', 'N', 'N', 'O', 'N', + 'C', 'A', 'P', 'P', 'E', 'D', + 'C', 'A', 'R', 'I', 'A', 'N', + 'C', 'A', 'R', 'R', 'O', 'T', + 'C', 'A', 'S', 'K', 'E', 'T', + 'C', 'A', 'S', 'T', 'L', 'E', + 'C', 'A', 'T', 'A', 'W', 'A', + 'C', 'C', 'H', 'H', 'A', 'A', + 'C', 'C', 'H', 'H', 'E', 'E', + 'C', 'E', 'L', 'T', 'I', 'C', + 'C', 'E', 'N', 'T', 'R', 'E', + 'C', 'E', 'R', '-', 'W', 'A', + 'C', 'E', 'V', 'I', 'T', 'U', + 'C', 'H', 'A', 'I', 'N', 'S', + 'C', 'H', 'A', 'K', 'M', 'A', + 'C', 'H', 'A', 'M', 'K', 'O', + 'C', 'H', 'A', 'N', 'G', 'E', + 'C', 'H', 'E', 'E', 'K', 'S', + 'C', 'H', 'E', 'E', 'S', 'E', + 'C', 'H', 'E', 'L', 'A', 'P', + 'C', 'H', 'E', 'L', 'N', 'U', + 'C', 'H', 'E', 'R', 'R', 'Y', + 'C', 'H', 'I', 'L', 'L', 'U', + 'C', 'H', 'I', 'R', 'E', 'T', + 'C', 'H', 'I', 'R', 'O', 'N', + 'C', 'H', 'R', 'I', 'V', 'I', + 'C', 'H', 'R', 'O', 'M', 'A', + 'C', 'H', 'U', 'R', 'C', 'H', + 'C', 'I', 'N', 'E', 'M', 'A', + 'C', 'I', 'R', 'C', 'L', 'E', + 'C', 'I', 'R', 'C', 'U', 'S', + 'C', 'L', 'E', 'F', '-', '1', + 'C', 'L', 'E', 'F', '-', '2', + 'C', 'L', 'I', 'V', 'I', 'S', + 'C', 'L', 'O', 'S', 'E', 'D', + 'C', 'L', 'O', 'S', 'E', 'T', + 'C', 'L', 'O', 'V', 'E', 'R', + 'C', 'M', '0', '1', '2', 'B', + 'C', 'M', '0', '7', '5', 'B', + 'C', 'O', 'F', 'F', 'I', 'N', + 'C', 'O', 'L', 'U', 'M', 'N', + 'C', 'O', 'M', 'I', 'N', 'G', + 'C', 'O', 'M', 'M', 'O', 'N', + 'C', 'O', 'O', 'K', 'E', 'D', + 'C', 'O', 'O', 'K', 'I', 'E', + 'C', 'O', 'P', 'P', 'E', 'R', + 'C', 'O', 'P', 'T', 'I', 'C', + 'C', 'O', 'R', 'N', 'E', 'R', + 'C', 'O', 'R', 'P', 'S', 'E', + 'C', 'O', 'U', 'P', 'L', 'E', + 'C', 'O', 'W', 'B', 'O', 'Y', + 'C', 'R', 'A', 'Y', 'O', 'N', + 'C', 'R', 'E', 'D', 'I', 'T', + 'C', 'R', 'O', 'C', 'U', 'S', + 'C', 'R', 'O', 'T', 'C', 'H', + 'C', 'R', 'U', 'T', 'C', 'H', + 'C', 'R', 'Y', 'I', 'N', 'G', + 'C', 'U', 'P', 'I', 'D', 'O', + 'C', 'U', 'P', 'P', 'E', 'D', + 'C', 'U', 'R', 'L', 'E', 'D', + 'C', 'U', 'R', 'V', 'E', 'D', + 'D', 'A', 'A', 'D', 'H', 'U', + 'D', 'A', 'G', 'E', 'S', 'H', + 'D', 'A', 'G', 'G', 'E', 'R', + 'D', 'A', 'L', 'A', 'T', 'H', + 'D', 'A', 'L', 'E', 'T', 'H', + 'D', 'A', 'M', 'A', 'R', 'U', + 'D', 'A', 'N', 'C', 'E', 'R', + 'D', 'A', 'S', 'E', 'I', 'A', + 'D', 'A', 'S', 'H', 'E', 'D', + 'D', 'D', 'A', 'H', 'A', 'L', + 'D', 'E', 'E', 'P', 'L', 'Y', + 'D', 'E', 'G', 'R', 'E', 'E', + 'D', 'E', 'L', 'E', 'T', 'E', + 'D', 'E', 'N', 'N', 'E', 'N', + 'D', 'E', 'N', 'T', 'A', 'L', + 'D', 'E', 'S', 'E', 'R', 'T', + 'D', 'E', 'S', 'I', 'G', 'N', + 'D', 'E', 'V', 'I', 'C', 'E', + 'D', 'H', 'A', 'A', 'L', 'U', + 'D', 'H', 'A', 'D', 'H', 'E', + 'D', 'H', 'A', 'R', 'M', 'A', + 'D', 'I', 'E', 'S', 'E', 'L', + 'D', 'I', 'E', 'S', 'I', 'S', + 'D', 'I', 'G', 'I', 'T', 'S', + 'D', 'I', 'G', 'R', 'A', 'M', + 'D', 'I', 'P', 'P', 'E', 'R', + 'D', 'I', 'R', 'E', 'C', 'T', + 'D', 'I', 'V', 'I', 'D', 'E', + 'D', 'I', 'V', 'I', 'N', 'G', + 'D', 'J', 'E', 'R', 'V', 'I', + 'D', 'O', 'K', 'M', 'A', 'I', + 'D', 'O', 'L', 'I', 'U', 'M', + 'D', 'O', 'L', 'L', 'A', 'R', + 'D', 'O', 'M', 'A', 'I', 'N', + 'D', 'O', 'M', 'I', 'N', 'O', + 'D', 'O', 'N', 'K', 'E', 'Y', + 'D', 'O', 'R', 'O', 'M', 'E', + 'D', 'O', 'T', 'S', '-', '1', + 'D', 'O', 'T', 'S', '-', '2', + 'D', 'O', 'T', 'S', '-', '3', + 'D', 'O', 'T', 'S', '-', '4', + 'D', 'O', 'T', 'S', '-', '5', + 'D', 'O', 'T', 'S', '-', '6', + 'D', 'O', 'T', 'S', '-', '7', + 'D', 'O', 'T', 'S', '-', '8', + 'D', 'O', 'T', 'T', 'E', 'D', + 'D', 'O', 'U', 'B', 'L', 'E', + 'D', 'R', 'A', 'G', 'O', 'N', + 'D', 'R', 'E', 'A', 'M', 'Y', + 'D', 'U', 'T', 'I', 'E', 'S', + 'D', 'V', 'U', 'M', 'Y', 'A', + 'E', '-', 'M', 'A', 'I', 'L', + 'E', 'I', 'G', 'H', 'T', 'H', + 'E', 'I', 'G', 'H', 'T', 'Y', + 'E', 'L', 'E', 'V', 'E', 'N', + 'E', 'M', 'B', 'L', 'E', 'M', + 'E', 'N', 'D', 'I', 'N', 'G', + 'E', 'N', 'E', 'R', 'G', 'Y', + 'E', 'N', 'G', 'I', 'N', 'E', + 'E', 'Q', 'U', 'A', 'L', 'S', + 'E', 'S', 'C', 'A', 'P', 'E', + 'E', 'T', 'E', 'R', 'O', 'N', + 'E', 'X', 'C', 'E', 'S', 'S', + 'E', 'X', 'H', 'A', 'L', 'E', + 'E', 'X', 'I', 'S', 'T', 'S', + 'E', 'Y', 'A', 'N', 'N', 'A', + 'F', 'A', 'A', 'M', 'A', 'E', + 'F', 'A', 'C', 'E', '-', '1', + 'F', 'A', 'C', 'E', '-', '2', + 'F', 'A', 'C', 'E', '-', '3', + 'F', 'A', 'C', 'E', '-', '4', + 'F', 'A', 'C', 'E', '-', '5', + 'F', 'A', 'C', 'E', '-', '6', + 'F', 'A', 'C', 'I', 'N', 'G', + 'F', 'A', 'C', 'T', 'O', 'R', + 'F', 'A', 'L', 'L', 'E', 'N', + 'F', 'A', 'M', 'I', 'L', 'Y', + 'F', 'A', 'T', 'H', 'E', 'R', + 'F', 'E', 'M', 'A', 'L', 'E', + 'F', 'E', 'N', 'C', 'E', 'R', + 'F', 'E', 'R', 'R', 'I', 'S', + 'F', 'H', 'T', 'O', 'R', 'A', + 'F', 'I', 'F', 'T', 'H', 'S', + 'F', 'I', 'G', 'U', 'R', 'E', + 'F', 'I', 'L', 'L', 'E', 'D', + 'F', 'I', 'L', 'L', 'E', 'R', + 'F', 'I', 'N', 'G', 'E', 'R', + 'F', 'I', 'N', 'I', 'T', 'E', + 'F', 'I', 'S', 'T', 'E', 'D', + 'F', 'L', 'A', 'G', '-', '1', + 'F', 'L', 'A', 'G', '-', '2', + 'F', 'L', 'A', 'G', '-', '3', + 'F', 'L', 'A', 'G', '-', '4', + 'F', 'L', 'A', 'G', '-', '5', + 'F', 'L', 'E', 'X', 'E', 'D', + 'F', 'L', 'E', 'X', 'U', 'S', + 'F', 'L', 'I', 'G', 'H', 'T', + 'F', 'L', 'O', 'P', 'P', 'Y', + 'F', 'L', 'O', 'R', 'A', 'L', + 'F', 'L', 'O', 'W', 'E', 'R', + 'F', 'L', 'Y', 'I', 'N', 'G', + 'F', 'O', 'L', 'D', 'E', 'D', + 'F', 'O', 'L', 'D', 'E', 'R', + 'F', 'O', 'N', 'D', 'U', 'E', + 'F', 'O', 'R', 'C', 'E', 'S', + 'F', 'O', 'R', 'K', 'E', 'D', + 'F', 'O', 'R', 'M', 'A', 'T', + 'F', 'O', 'R', 'M', 'E', 'E', + 'F', 'O', 'U', 'R', 'T', 'H', + 'F', 'R', 'A', 'M', 'E', 'S', + 'F', 'R', 'A', 'N', 'K', 'S', + 'F', 'R', 'E', 'N', 'C', 'H', + 'F', 'T', 'H', 'O', 'R', 'A', + 'F', 'U', 'N', 'N', 'E', 'L', + 'G', 'A', 'N', 'G', 'I', 'A', + 'G', 'A', 'P', 'P', 'E', 'D', + 'G', 'A', 'R', 'D', 'E', 'N', + 'G', 'A', 'R', 'L', 'I', 'C', + 'G', 'A', 'S', 'H', 'A', 'N', + 'G', 'E', 'D', 'O', 'L', 'A', + 'G', 'E', 'M', 'I', 'N', 'I', + 'G', 'E', 'N', 'I', 'K', 'I', + 'G', 'E', 'N', 'T', 'L', 'E', + 'G', 'E', 'R', 'E', 'S', 'H', + 'G', 'E', 'R', 'M', 'A', 'N', + 'G', 'H', 'A', 'I', 'N', 'U', + 'G', 'H', 'A', 'M', 'A', 'L', + 'G', 'H', 'A', 'M', 'M', 'A', + 'G', 'H', 'A', 'R', 'A', 'E', + 'G', 'H', 'E', 'U', 'A', 'E', + 'G', 'H', 'I', 'M', 'E', 'L', + 'G', 'H', 'U', 'N', 'N', 'A', + 'G', 'I', 'N', 'G', 'E', 'R', + 'G', 'L', 'E', 'I', 'C', 'H', + 'G', 'L', 'O', 'V', 'E', 'S', + 'G', 'O', 'B', 'L', 'I', 'N', + 'G', 'O', 'L', 'F', 'E', 'R', + 'G', 'O', 'R', 'G', 'O', 'N', + 'G', 'O', 'T', 'H', 'I', 'C', + 'G', 'R', 'A', 'M', 'M', 'A', + 'G', 'R', 'A', 'P', 'E', 'S', + 'G', 'R', 'A', 'T', 'E', 'R', + 'G', 'R', 'O', 'U', 'N', 'D', + 'G', 'U', 'I', 'T', 'A', 'R', + 'G', 'U', 'R', 'A', 'G', 'E', + 'G', 'U', 'R', 'A', 'M', 'U', + 'G', 'U', 'R', 'U', 'N', 'G', + 'G', 'U', 'R', 'U', 'S', 'H', + 'H', '-', 'T', 'Y', 'P', 'E', + 'H', 'A', 'F', 'U', 'K', 'H', + 'H', 'A', 'G', 'L', 'A', 'Z', + 'H', 'A', 'L', 'F', '-', '1', + 'H', 'A', 'L', 'F', '-', '2', + 'H', 'A', 'M', 'M', 'E', 'R', + 'H', 'A', 'N', 'D', 'L', 'E', + 'H', 'A', 'N', 'G', 'U', 'L', + 'H', 'A', 'N', 'I', 'F', 'I', + 'H', 'A', 'T', 'R', 'A', 'N', + 'H', 'A', 'U', 'M', 'E', 'A', + 'H', 'E', 'A', 'D', 'E', 'D', + 'H', 'E', 'A', 'R', 'T', 'S', + 'H', 'E', 'A', 'V', 'E', 'N', + 'H', 'E', 'B', 'R', 'E', 'W', + 'H', 'E', 'I', 'G', 'H', 'T', + 'H', 'E', 'I', 'S', 'E', 'I', + 'H', 'E', 'L', 'M', 'E', 'T', + 'H', 'E', 'R', 'M', 'E', 'S', + 'H', 'E', 'R', 'U', 'T', 'U', + 'H', 'I', '-', 'R', 'E', 'S', + 'H', 'I', 'D', 'I', 'N', 'G', + 'H', 'I', 'K', 'I', 'N', 'G', + 'H', 'I', 'N', 'G', 'E', 'D', + 'H', 'O', 'C', 'K', 'E', 'Y', + 'H', 'O', 'L', 'L', 'O', 'W', + 'H', 'O', 'O', 'K', 'E', 'D', + 'H', 'U', 'I', 'I', 'T', 'O', + 'H', 'U', 'S', 'H', 'E', 'D', + 'H', 'Y', 'G', 'I', 'E', 'A', + 'H', 'Y', 'P', 'H', 'E', 'N', + 'I', '-', 'B', 'E', 'A', 'M', + 'I', '-', 'Y', 'A', '-', 'O', + 'I', 'L', 'I', 'M', 'M', 'U', + 'I', 'M', 'A', 'A', 'L', 'A', + 'I', 'N', 'D', 'I', 'A', 'N', + 'I', 'N', 'G', 'W', 'A', 'Z', + 'I', 'N', 'H', 'A', 'L', 'E', + 'I', 'N', 'I', 'N', 'G', 'U', + 'I', 'N', 'P', 'U', 'T', 'S', + 'I', 'N', 'S', 'E', 'C', 'T', + 'I', 'N', 'S', 'E', 'R', 'T', + 'I', 'N', 'S', 'I', 'D', 'E', + 'I', 'N', 'W', 'A', 'R', 'D', + 'I', 'S', 'A', 'K', 'I', 'A', + 'I', 'S', 'L', 'A', 'N', 'D', + 'I', 'S', 'S', 'H', 'A', 'R', + 'I', 'T', 'A', 'L', 'I', 'C', + 'I', 'Y', 'A', 'N', 'N', 'A', + 'J', 'H', 'A', 'Y', 'I', 'N', + 'J', 'I', 'G', 'S', 'A', 'W', + 'J', 'O', 'I', 'N', 'E', 'D', + 'J', 'O', 'I', 'N', 'E', 'R', + 'J', 'O', 'I', 'N', 'T', 'S', + 'J', 'O', 'Y', 'O', 'U', 'S', + 'K', 'A', 'C', 'H', 'K', 'A', + 'K', 'A', 'I', 'T', 'H', 'I', + 'K', 'A', 'N', 'A', 'K', 'O', + 'K', 'A', 'N', 'G', 'X', 'I', + 'K', 'A', 'S', 'K', 'A', 'L', + 'K', 'A', 'T', 'A', 'V', 'A', + 'K', 'A', 'V', 'Y', 'K', 'A', + 'K', 'A', 'Z', 'A', 'K', 'H', + 'K', 'E', 'F', 'U', 'L', 'A', + 'K', 'E', 'L', 'V', 'I', 'N', + 'K', 'E', 'M', 'P', 'L', 'I', + 'K', 'E', 'M', 'P', 'U', 'L', + 'K', 'E', 'U', 'A', 'E', 'M', + 'K', 'E', 'U', 'K', 'A', 'Q', + 'K', 'E', 'U', 'P', 'U', 'Q', + 'K', 'E', 'Y', 'C', 'A', 'P', + 'K', 'H', 'A', 'M', 'T', 'I', + 'K', 'H', 'A', 'N', 'D', 'A', + 'K', 'H', 'I', 'T', 'A', 'N', + 'K', 'H', 'O', 'J', 'K', 'I', + 'K', 'H', 'O', 'M', 'U', 'T', + 'K', 'H', 'O', 'N', 'N', 'A', + 'K', 'H', 'U', 'D', 'A', 'M', + 'K', 'I', 'E', 'V', 'A', 'N', + 'K', 'I', 'L', 'L', 'E', 'R', + 'K', 'I', 'M', 'O', 'N', 'O', + 'K', 'I', 'S', 'I', 'M', '5', + 'K', 'I', 'Y', 'E', 'O', 'K', + 'K', 'L', 'A', 'S', 'M', 'A', + 'K', 'L', 'I', 'T', 'O', 'N', + 'K', 'L', 'Y', 'U', 'C', 'H', + 'K', 'N', 'I', 'G', 'H', 'T', + 'K', 'O', 'B', 'Y', 'L', 'A', + 'K', 'O', 'G', 'H', 'O', 'M', + 'K', 'O', 'R', 'E', 'A', 'N', + 'K', 'O', 'R', 'U', 'N', 'A', + 'K', 'P', 'A', 'R', 'A', 'Q', + 'K', 'R', 'O', 'N', 'O', 'S', + 'K', 'U', 'R', 'U', 'N', 'I', + 'K', 'U', 'S', 'H', 'U', '2', + 'K', 'W', 'U', '3', '1', '8', + 'K', 'Y', 'U', 'R', 'I', 'I', + 'L', '-', 'T', 'Y', 'P', 'E', + 'L', 'A', 'A', 'N', 'A', 'E', + 'L', 'A', 'B', 'I', 'A', 'L', + 'L', 'A', 'D', 'D', 'E', 'R', + 'L', 'A', 'H', 'S', 'H', 'U', + 'L', 'A', 'K', 'H', 'A', 'N', + 'L', 'A', 'M', 'A', 'D', 'H', + 'L', 'A', 'M', 'B', 'D', 'A', + 'L', 'A', 'M', 'E', 'D', 'H', + 'L', 'A', 'N', 'D', 'E', 'R', + 'L', 'A', 'R', 'G', 'E', 'R', + 'L', 'A', 'U', 'K', 'A', 'Z', + 'L', 'E', 'A', 'D', 'E', 'R', + 'L', 'E', 'D', 'G', 'E', 'R', + 'L', 'E', 'G', 'I', 'O', 'N', + 'L', 'E', 'I', 'M', 'M', 'A', + 'L', 'E', 'N', 'G', 'T', 'H', + 'L', 'E', 'P', 'C', 'H', 'A', + 'L', 'E', 'S', 'S', 'E', 'R', + 'L', 'E', 'T', 'T', 'E', 'R', + 'L', 'E', 'U', 'A', 'E', 'M', + 'L', 'E', 'U', 'A', 'E', 'P', + 'L', 'I', 'F', 'T', 'E', 'R', + 'L', 'I', 'L', 'I', 'T', 'H', + 'L', 'I', 'M', 'M', 'U', '2', + 'L', 'I', 'M', 'M', 'U', '4', + 'L', 'I', 'N', 'E', '-', '1', + 'L', 'I', 'N', 'E', '-', '3', + 'L', 'I', 'N', 'E', '-', '7', + 'L', 'I', 'N', 'E', '-', '9', + 'L', 'I', 'N', 'E', 'A', 'R', + 'L', 'I', 'N', 'G', 'S', 'A', + 'L', 'I', 'N', 'K', 'E', 'D', + 'L', 'I', 'Q', 'U', 'I', 'D', + 'L', 'I', 'T', 'T', 'E', 'R', + 'L', 'I', 'T', 'T', 'L', 'E', + 'L', 'I', 'Z', 'A', 'R', 'D', + 'L', 'O', 'A', 'C', 'H', 'A', + 'L', 'O', 'M', 'M', 'A', 'E', + 'L', 'O', 'N', 'S', 'U', 'M', + 'L', 'O', 'O', 'P', 'E', 'D', + 'L', 'O', 'T', 'I', 'O', 'N', + 'L', 'O', 'U', 'D', 'L', 'Y', + 'L', 'U', 'N', 'A', 'T', 'E', + 'L', 'U', 'N', 'G', 'S', 'I', + 'L', 'Y', 'C', 'I', 'A', 'N', + 'L', 'Y', 'D', 'I', 'A', 'N', + 'M', 'A', 'C', 'R', 'O', 'N', + 'M', 'A', 'D', 'D', 'A', 'H', + 'M', 'A', 'E', 'L', 'E', 'E', + 'M', 'A', 'E', 'M', 'B', 'A', + 'M', 'A', 'E', 'N', 'Y', 'I', + 'M', 'A', 'G', 'N', 'E', 'T', + 'M', 'A', 'I', 'D', 'E', 'N', + 'M', 'A', 'N', 'C', 'H', 'U', + 'M', 'A', 'N', 'N', 'A', 'Z', + 'M', 'A', 'N', 'U', 'A', 'L', + 'M', 'A', 'R', 'K', '-', '1', + 'M', 'A', 'R', 'K', '-', '2', + 'M', 'A', 'R', 'K', '-', '3', + 'M', 'A', 'R', 'K', '-', '4', + 'M', 'A', 'R', 'K', 'E', 'R', + 'M', 'A', 'R', 'U', 'K', 'U', + 'M', 'A', 'S', 'O', 'R', 'A', + 'M', 'A', 'T', 'R', 'I', 'X', + 'M', 'A', 'X', 'I', 'M', 'A', + 'M', 'B', 'A', 'N', 'Y', 'I', + 'M', 'B', 'E', 'R', 'A', 'E', + 'M', 'B', 'E', 'U', 'R', 'I', + 'M', 'B', 'U', 'A', 'E', 'M', + 'M', 'E', 'C', 'H', 'I', 'K', + 'M', 'E', 'D', 'I', 'A', 'L', + 'M', 'E', 'D', 'I', 'U', 'M', + 'M', 'E', 'E', 'T', 'E', 'I', + 'M', 'E', 'G', 'A', 'L', 'I', + 'M', 'E', 'M', 'B', 'E', 'R', + 'M', 'E', 'N', 'D', 'U', 'T', + 'M', 'E', 'R', 'K', 'H', 'A', + 'M', 'E', 'T', 'R', 'I', 'A', + 'M', 'F', 'E', 'U', 'A', 'E', + 'M', 'F', 'I', 'Y', 'A', 'Q', + 'M', 'G', 'B', 'A', 'S', 'A', + 'M', 'G', 'B', 'E', 'U', 'N', + 'M', 'G', 'B', 'I', 'E', 'E', + 'M', 'I', 'D', 'D', 'L', 'E', + 'M', 'I', 'K', 'R', 'O', 'N', + 'M', 'I', 'L', 'L', 'E', 'T', + 'M', 'I', 'N', 'I', 'M', 'A', + 'M', 'I', 'N', 'N', 'A', 'N', + 'M', 'I', 'R', 'R', 'O', 'R', + 'M', 'O', 'B', 'I', 'L', 'E', + 'M', 'O', 'D', 'E', 'L', 'S', + 'M', 'O', 'D', 'E', 'R', 'N', + 'M', 'O', 'D', 'U', 'L', 'O', + 'M', 'O', 'N', 'K', 'E', 'Y', + 'M', 'O', 'R', 'T', 'A', 'R', + 'M', 'O', 'S', 'Q', 'U', 'E', + 'M', 'O', 'T', 'H', 'E', 'R', + 'M', 'U', 'C', 'A', 'A', 'D', + 'M', 'U', 'N', 'S', 'U', 'B', + 'M', 'U', 'O', 'M', 'A', 'E', + 'M', 'U', 'Q', 'D', 'A', 'M', + 'M', 'U', 'R', 'G', 'U', '2', + 'N', '-', 'C', 'R', 'E', 'E', + 'N', 'A', 'R', 'R', 'O', 'W', + 'N', 'A', 'U', 'D', 'I', 'Z', + 'N', 'A', 'U', 'T', 'H', 'S', + 'N', 'A', 'X', 'I', 'A', 'N', + 'N', 'D', 'O', 'M', 'B', 'U', + 'N', 'E', 'E', 'D', 'L', 'E', + 'N', 'E', 'N', 'A', 'N', 'O', + 'N', 'E', 'S', 'S', 'U', 'S', + 'N', 'E', 'S', 'T', 'E', 'D', + 'N', 'E', 'U', 'T', 'E', 'R', + 'N', 'G', 'A', 'N', 'G', 'U', + 'N', 'G', 'G', 'A', 'A', 'M', + 'N', 'G', 'G', 'E', 'E', 'T', + 'N', 'G', 'G', 'E', 'U', 'X', + 'N', 'G', 'G', 'U', 'O', 'M', + 'N', 'G', 'G', 'U', 'O', 'N', + 'N', 'G', 'G', 'U', 'O', 'Q', + 'N', 'G', 'K', 'E', 'U', 'X', + 'N', 'G', 'K', 'I', 'E', 'E', + 'N', 'G', 'K', 'Y', 'E', 'E', + 'N', 'G', 'U', 'A', 'E', 'T', + 'N', 'I', 'N', 'D', 'A', '2', + 'N', 'I', 'N', 'E', 'T', 'Y', + 'N', 'I', 'R', 'U', 'G', 'U', + 'N', 'J', 'E', 'E', 'E', 'E', + 'N', 'K', 'I', 'N', 'D', 'I', + 'N', 'L', '0', '0', '5', 'A', + 'N', 'L', '0', '1', '7', 'A', + 'N', 'O', 'K', 'H', 'U', 'K', + 'N', 'O', 'R', 'D', 'I', 'C', + 'N', 'O', 'R', 'M', 'A', 'L', + 'N', 'O', 'V', 'I', 'L', 'E', + 'N', 'O', 'Z', 'H', 'K', 'A', + 'N', 'S', 'H', 'I', 'E', 'E', + 'N', 'S', 'H', 'U', 'E', 'T', + 'N', 'S', 'H', 'U', 'O', 'P', + 'N', 'S', 'I', 'E', 'E', 'P', + 'N', 'S', 'I', 'E', 'E', 'T', + 'N', 'U', '0', '1', '0', 'A', + 'N', 'U', '0', '1', '1', 'A', + 'N', 'U', '0', '1', '8', 'A', + 'N', 'U', '0', '2', '2', 'A', + 'N', 'U', 'B', 'I', 'A', 'N', + 'N', 'U', 'M', 'B', 'E', 'R', + 'N', 'U', 'M', 'E', 'R', 'O', + 'O', 'B', 'E', 'L', 'O', 'S', + 'O', 'B', 'E', 'L', 'U', 'S', + 'O', 'B', 'J', 'E', 'C', 'T', + 'O', 'B', 'L', 'A', 'K', 'O', + 'O', 'C', 'H', 'K', 'O', 'M', + 'O', 'C', 'L', 'O', 'C', 'K', + 'O', 'F', 'F', 'I', 'C', 'E', + 'O', 'G', 'O', 'N', 'E', 'K', + 'O', 'L', 'I', 'G', 'O', 'N', + 'O', 'M', 'A', 'L', 'O', 'N', + 'O', 'N', '-', 'O', 'F', 'F', + 'O', 'P', 'E', 'N', '-', 'O', + 'O', 'P', 'E', 'N', '-', 'P', + 'O', 'P', 'P', 'O', 'S', 'E', + 'O', 'P', 'T', 'I', 'O', 'N', + 'O', 'R', 'A', 'N', 'G', 'E', + 'O', 'R', 'C', 'H', 'I', 'D', + 'O', 'R', 'I', 'G', 'I', 'N', + 'O', 'R', 'K', 'H', 'O', 'N', + 'O', 'R', 'N', 'A', 'T', 'E', + 'O', 'T', 'H', 'E', 'R', 'S', + 'O', 'T', 'T', 'A', 'V', 'A', + 'O', 'U', 'N', 'K', 'I', 'A', + 'O', 'U', 'T', 'B', 'O', 'X', + 'O', 'U', 'T', 'P', 'U', 'T', + 'O', 'X', 'E', 'I', 'A', 'I', + 'O', 'Y', 'A', 'N', 'N', 'A', + 'O', 'Y', 'S', 'T', 'E', 'R', + 'P', 'A', 'A', 'R', 'A', 'E', + 'P', 'A', 'A', 'R', 'A', 'M', + 'P', 'A', 'D', 'D', 'L', 'E', + 'P', 'A', 'G', 'O', 'D', 'A', + 'P', 'A', 'H', 'A', 'W', 'H', + 'P', 'A', 'I', 'R', 'E', 'D', + 'P', 'A', 'K', 'P', 'A', 'K', + 'P', 'A', 'L', 'L', 'A', 'S', + 'P', 'A', 'L', 'U', 'T', 'A', + 'P', 'A', 'M', 'A', 'D', 'A', + 'P', 'A', 'R', 'R', 'O', 'T', + 'P', 'A', 'S', 'H', 'A', 'E', + 'P', 'A', 'S', 'H', 'T', 'A', + 'P', 'A', 'S', 'S', 'E', 'D', + 'P', 'E', 'E', 'S', 'H', 'I', + 'P', 'E', 'N', 'C', 'I', 'L', + 'P', 'E', 'N', 'I', 'H', 'I', + 'P', 'E', 'O', 'P', 'L', 'E', + 'P', 'E', 'O', 'R', 'T', 'H', + 'P', 'E', 'P', 'P', 'E', 'R', + 'P', 'E', 'R', 'M', 'I', 'C', + 'P', 'E', 'R', 'N', 'I', 'N', + 'P', 'E', 'R', 'S', 'O', 'N', + 'P', 'E', 'R', 'T', 'H', 'O', + 'P', 'E', 'S', 'E', 'T', 'A', + 'P', 'E', 'U', 'T', 'A', 'E', + 'P', 'H', 'N', 'A', 'E', 'K', + 'P', 'H', 'O', 'L', 'U', 'S', + 'P', 'H', 'O', 'N', 'E', 'S', + 'P', 'H', 'R', 'A', 'S', 'E', + 'P', 'I', 'A', 'S', 'M', 'A', + 'P', 'I', 'C', 'K', 'E', 'T', + 'P', 'I', 'C', 'K', 'U', 'P', + 'P', 'I', 'K', 'U', 'R', 'U', + 'P', 'I', 'N', 'A', 'T', 'A', + 'P', 'I', 'P', 'I', 'N', 'G', + 'P', 'I', 'R', 'A', 'C', 'Y', + 'P', 'I', 'S', 'C', 'E', 'S', + 'P', 'I', 'S', 'T', 'O', 'L', + 'P', 'L', 'A', 'N', 'C', 'K', + 'P', 'L', 'A', 'N', 'E', 'T', + 'P', 'L', 'O', 'P', 'H', 'U', + 'P', 'L', 'U', 'M', 'E', 'D', + 'P', 'L', 'U', 'R', 'A', 'L', + 'P', 'O', 'C', 'K', 'E', 'T', + 'P', 'O', 'E', 'T', 'I', 'C', + 'P', 'O', 'E', 'T', 'R', 'Y', + 'P', 'O', 'I', 'N', 'T', 'O', + 'P', 'O', 'I', 'N', 'T', 'S', + 'P', 'O', 'K', 'O', 'J', 'I', + 'P', 'O', 'L', 'I', 'C', 'E', + 'P', 'O', 'L', 'I', 'S', 'H', + 'P', 'O', 'M', 'M', 'E', 'E', + 'P', 'O', 'O', 'D', 'L', 'E', + 'P', 'O', 'P', 'P', 'E', 'R', + 'P', 'O', 'S', 'T', 'A', 'L', + 'P', 'O', 'T', 'A', 'T', 'O', + 'P', 'O', 'T', 'T', 'E', 'D', + 'P', 'O', 'W', 'D', 'E', 'R', + 'P', 'O', 'W', 'E', 'R', 'S', + 'P', 'R', 'A', 'Y', 'E', 'R', + 'P', 'R', 'I', 'N', 'C', 'E', + 'P', 'R', 'I', 'N', 'T', 'S', + 'P', 'R', 'O', 'T', 'O', 'S', + 'P', 'S', 'I', 'L', 'O', 'N', + 'P', 'T', 'H', 'A', 'H', 'A', + 'P', 'U', 'B', 'L', 'I', 'C', + 'P', 'U', 'F', 'F', 'E', 'D', + 'P', 'U', 'R', 'I', 'F', 'Y', + 'P', 'U', 'R', 'I', 'T', 'Y', + 'P', 'U', 'R', 'P', 'L', 'E', + 'P', 'U', 'Z', 'Z', 'L', 'E', + 'Q', 'A', 'M', 'A', 'T', 'S', + 'Q', 'A', 'R', 'N', 'E', 'Y', + 'Q', 'E', 'T', 'A', 'N', 'A', + 'Q', 'U', 'A', 'O', 'A', 'R', + 'Q', 'U', 'B', 'U', 'T', 'S', + 'R', '-', 'C', 'R', 'E', 'E', + 'R', 'A', 'B', 'B', 'I', 'T', + 'R', 'A', 'C', 'I', 'N', 'G', + 'R', 'A', 'I', 'S', 'E', 'D', + 'R', 'A', 'M', 'B', 'A', 'T', + 'R', 'A', 'S', 'O', 'U', 'L', + 'R', 'E', 'C', 'O', 'R', 'D', + 'R', 'E', 'J', 'A', 'N', 'G', + 'R', 'E', 'M', 'E', 'D', 'Y', + 'R', 'E', 'P', 'E', 'A', 'T', + 'R', 'E', 'T', 'O', 'R', 'T', + 'R', 'E', 'T', 'U', 'R', 'N', + 'R', 'H', 'O', 'T', 'I', 'C', + 'R', 'I', 'B', 'B', 'O', 'N', + 'R', 'I', 'K', 'R', 'I', 'K', + 'R', 'I', 'M', 'G', 'B', 'A', + 'R', 'I', 'N', 'G', 'E', 'D', + 'R', 'I', 'P', 'P', 'L', 'E', + 'R', 'I', 'S', 'I', 'N', 'G', + 'R', 'I', 'T', 'U', 'A', 'L', + 'R', 'N', 'Y', 'I', 'N', 'G', + 'R', 'O', 'C', 'K', 'E', 'T', + 'R', 'O', 'L', 'L', 'E', 'R', + 'R', 'T', 'H', 'A', 'N', 'G', + 'R', 'U', 'N', 'N', 'E', 'R', + 'R', 'U', 'N', 'O', 'U', 'T', + 'S', 'A', 'A', 'D', 'H', 'U', + 'S', 'A', 'F', 'E', 'T', 'Y', + 'S', 'A', 'J', 'D', 'A', 'H', + 'S', 'A', 'L', 'T', '-', '2', + 'S', 'A', 'M', 'E', 'K', 'H', + 'S', 'A', 'M', 'V', 'A', 'T', + 'S', 'A', 'M', 'Y', 'O', 'K', + 'S', 'A', 'N', 'D', 'A', 'L', + 'S', 'A', 'N', 'D', 'H', 'I', + 'S', 'A', 'N', 'G', 'A', '2', + 'S', 'A', 'N', 'N', 'Y', 'A', + 'S', 'A', 'T', 'U', 'R', 'N', + 'S', 'A', 'U', 'C', 'E', 'R', + 'S', 'A', 'Y', 'I', 'S', 'I', + 'S', 'C', 'A', 'L', 'E', 'S', + 'S', 'C', 'H', 'E', 'M', 'A', + 'S', 'C', 'H', 'O', 'O', 'L', + 'S', 'C', 'R', 'E', 'E', 'N', + 'S', 'C', 'R', 'I', 'P', 'T', + 'S', 'C', 'R', 'O', 'L', 'L', + 'S', 'E', 'C', 'A', 'N', 'T', + 'S', 'E', 'C', 'O', 'N', 'D', + 'S', 'E', 'C', 'R', 'E', 'T', + 'S', 'E', 'C', 'T', 'O', 'R', + 'S', 'E', 'I', 'S', 'M', 'A', + 'S', 'E', 'L', 'E', 'N', 'A', + 'S', 'E', 'L', 'F', 'I', 'E', + 'S', 'E', 'R', 'I', 'F', 'S', + 'S', 'E', 'S', 'A', 'M', 'E', + 'S', 'E', 'T', 'F', 'O', 'N', + 'S', 'E', 'U', 'A', 'E', 'Q', + 'S', 'E', 'W', 'I', 'N', 'G', + 'S', 'H', 'A', 'D', 'D', 'A', + 'S', 'H', 'A', 'D', 'E', 'D', + 'S', 'H', 'A', 'K', 'E', 'R', + 'S', 'H', 'A', 'K', 'T', 'I', + 'S', 'H', 'A', 'P', 'E', 'S', + 'S', 'H', 'A', 'V', 'E', 'D', + 'S', 'H', 'E', 'E', 'N', 'U', + 'S', 'H', 'E', 'Q', 'E', 'L', + 'S', 'H', 'E', 'S', 'H', '2', + 'S', 'H', 'E', 'U', 'A', 'E', + 'S', 'H', 'E', 'U', 'O', 'Q', + 'S', 'H', 'I', 'E', 'L', 'D', + 'S', 'H', 'I', 'N', 'D', 'A', + 'S', 'H', 'I', 'N', 'I', 'G', + 'S', 'H', 'I', 'N', 'T', 'O', + 'S', 'H', 'I', 'R', 'A', 'E', + 'S', 'H', 'O', 'R', 'T', 'S', + 'S', 'H', 'O', 'V', 'E', 'L', + 'S', 'H', 'O', 'W', 'E', 'R', + 'S', 'H', 'R', 'I', 'M', 'P', + 'S', 'H', 'R', 'I', 'N', 'E', + 'S', 'H', 'U', 'B', 'U', 'R', + 'S', 'H', 'Y', 'E', 'L', 'E', + 'S', 'I', 'C', 'K', 'L', 'E', + 'S', 'I', 'D', 'D', 'H', 'I', + 'S', 'I', 'L', 'V', 'E', 'R', + 'S', 'I', 'N', 'D', 'H', 'I', + 'S', 'I', 'N', 'G', 'L', 'E', + 'S', 'I', 'R', 'R', 'A', 'H', + 'S', 'I', 'X', 'T', 'H', 'S', + 'S', 'K', 'E', 'W', 'E', 'D', + 'S', 'L', 'E', 'E', 'P', 'Y', + 'S', 'L', 'E', 'U', 'T', 'H', + 'S', 'L', 'I', 'D', 'E', 'R', + 'S', 'L', 'O', 'W', 'L', 'Y', + 'S', 'O', 'C', 'C', 'E', 'R', + 'S', 'O', 'N', 'J', 'A', 'M', + 'S', 'O', 'U', 'N', 'A', 'P', + 'S', 'O', 'U', 'R', 'C', 'E', + 'S', 'O', 'W', 'I', 'L', 'O', + 'S', 'P', 'A', 'D', 'E', 'S', + 'S', 'P', 'A', 'R', 'S', 'E', + 'S', 'P', 'A', 'T', 'H', 'I', + 'S', 'P', 'E', 'E', 'C', 'H', + 'S', 'P', 'I', 'D', 'E', 'R', + 'S', 'P', 'I', 'R', 'A', 'L', + 'S', 'P', 'I', 'R', 'I', 'T', + 'S', 'P', 'O', 'K', 'E', 'D', + 'S', 'P', 'O', 'N', 'G', 'E', + 'S', 'P', 'O', 'R', 'T', 'S', + 'S', 'P', 'R', 'E', 'A', 'D', + 'S', 'P', 'R', 'I', 'N', 'G', + 'S', 'P', 'R', 'O', 'U', 'T', + 'S', 'P', 'U', 'N', 'G', 'S', + 'S', 'Q', 'U', 'A', 'R', 'E', + 'S', 'Q', 'U', 'I', 'S', 'H', + 'S', 'R', 'E', 'D', 'N', 'E', + 'S', 'T', 'A', 'T', 'U', 'E', + 'S', 'T', 'A', 'T', 'Y', 'A', + 'S', 'T', 'E', 'A', 'M', 'Y', + 'S', 'T', 'E', 'M', '-', '2', + 'S', 'T', 'E', 'M', '-', '3', + 'S', 'T', 'E', 'M', '-', '4', + 'S', 'T', 'E', 'P', '-', '1', + 'S', 'T', 'E', 'P', '-', '2', + 'S', 'T', 'E', 'R', 'E', 'O', + 'S', 'T', 'I', 'G', 'M', 'A', + 'S', 'T', 'I', 'M', 'M', 'E', + 'S', 'T', 'R', 'A', 'I', 'F', + 'S', 'T', 'R', 'E', 'L', 'A', + 'S', 'T', 'R', 'E', 'S', 'S', + 'S', 'T', 'R', 'I', 'D', 'E', + 'S', 'T', 'R', 'I', 'K', 'E', + 'S', 'T', 'R', 'I', 'P', 'E', + 'S', 'T', 'R', 'O', 'K', 'E', + 'S', 'T', 'R', 'O', 'N', 'G', + 'S', 'T', 'U', 'D', 'I', 'O', + 'S', 'U', 'B', 'I', 'T', 'O', + 'S', 'U', 'B', 'S', 'E', 'T', + 'S', 'U', 'C', 'K', 'E', 'D', + 'S', 'U', 'L', 'F', 'U', 'R', + 'S', 'U', 'M', 'A', 'S', 'H', + 'S', 'U', 'M', 'M', 'E', 'R', + 'S', 'U', 'N', 'S', 'E', 'T', + 'S', 'U', 'R', 'A', 'N', 'G', + 'S', 'U', 'R', 'F', 'E', 'R', + 'S', 'V', 'A', 'S', 'T', 'I', + 'S', 'V', 'E', 'T', 'L', 'O', + 'S', 'V', 'E', 'T', 'L', 'Y', + 'S', 'W', 'O', 'R', 'D', 'S', + 'S', 'Y', 'L', 'O', 'T', 'I', + 'S', 'Y', 'M', 'B', 'O', 'L', + 'S', 'Y', 'N', 'A', 'F', 'I', + 'S', 'Y', 'O', 'U', 'W', 'A', + 'S', 'Y', 'R', 'I', 'A', 'C', + 'T', 'A', '-', 'R', 'O', 'L', + 'T', 'A', 'H', 'A', 'L', 'A', + 'T', 'A', 'I', 'L', 'E', 'D', + 'T', 'A', 'L', 'E', 'N', 'T', + 'T', 'A', 'L', 'I', 'N', 'G', + 'T', 'A', 'M', 'A', 'L', 'E', + 'T', 'A', 'M', 'I', 'N', 'G', + 'T', 'A', 'N', 'G', 'S', 'A', + 'T', 'A', 'N', 'G', 'U', 'T', + 'T', 'A', 'N', 'N', 'E', 'D', + 'T', 'A', 'R', 'G', 'E', 'T', + 'T', 'A', 'R', 'T', 'A', 'R', + 'T', 'A', 'R', 'U', 'N', 'G', + 'T', 'A', 'U', 'R', 'U', 'S', + 'T', 'E', 'A', 'C', 'U', 'P', + 'T', 'E', 'A', 'P', 'O', 'T', + 'T', 'E', 'D', 'U', 'N', 'G', + 'T', 'E', 'L', 'E', 'I', 'A', + 'T', 'E', 'L', 'L', 'E', 'R', + 'T', 'E', 'L', 'O', 'U', 'S', + 'T', 'E', 'L', 'U', 'G', 'U', + 'T', 'E', 'M', 'P', 'L', 'E', + 'T', 'E', 'M', 'P', 'U', 'S', + 'T', 'E', 'N', 'N', 'I', 'S', + 'T', 'E', 'N', 'U', 'T', 'O', + 'T', 'E', 'U', 'A', 'E', 'N', + 'T', 'E', 'U', 'A', 'E', 'Q', + 'T', 'H', 'A', 'A', 'L', 'U', + 'T', 'H', 'A', 'A', 'N', 'A', + 'T', 'H', 'A', 'H', 'A', 'N', + 'T', 'H', 'A', 'N', 'N', 'A', + 'T', 'H', 'E', 'T', 'H', 'E', + 'T', 'H', 'I', 'R', 'D', 'S', + 'T', 'H', 'I', 'R', 'T', 'Y', + 'T', 'H', 'I', 'U', 'T', 'H', + 'T', 'H', 'R', 'E', 'A', 'D', + 'T', 'H', 'U', 'M', 'B', 'S', + 'T', 'H', 'Y', 'O', 'O', 'M', + 'T', 'I', 'C', 'K', 'E', 'T', + 'T', 'I', 'K', 'E', 'U', 'T', + 'T', 'I', 'P', 'E', 'H', 'A', + 'T', 'I', 'R', 'Y', 'A', 'K', + 'T', 'O', 'C', 'H', 'K', 'A', + 'T', 'O', 'D', 'H', 'R', 'I', + 'T', 'O', 'I', 'L', 'E', 'T', + 'T', 'O', 'L', 'O', 'N', 'G', + 'T', 'O', 'M', 'A', 'T', 'O', + 'T', 'O', 'N', 'E', '-', '1', + 'T', 'O', 'N', 'E', '-', '2', + 'T', 'O', 'N', 'E', '-', '3', + 'T', 'O', 'N', 'E', '-', '4', + 'T', 'O', 'N', 'E', '-', '5', + 'T', 'O', 'N', 'E', '-', '6', + 'T', 'O', 'N', 'E', '-', '7', + 'T', 'O', 'N', 'E', '-', '8', + 'T', 'O', 'N', 'E', '-', 'B', + 'T', 'O', 'N', 'E', '-', 'D', + 'T', 'O', 'N', 'E', '-', 'G', + 'T', 'O', 'N', 'E', '-', 'J', + 'T', 'O', 'N', 'E', '-', 'M', + 'T', 'O', 'N', 'E', '-', 'S', + 'T', 'O', 'N', 'E', '-', 'V', + 'T', 'O', 'N', 'G', 'U', 'E', + 'T', 'O', 'P', 'B', 'A', 'R', + 'T', 'R', 'I', 'P', 'L', 'E', + 'T', 'R', 'I', 'P', 'L', 'I', + 'T', 'R', 'I', 'P', 'O', 'D', + 'T', 'R', 'I', 'T', 'O', 'S', + 'T', 'R', 'O', 'P', 'H', 'Y', + 'T', 'S', 'H', 'E', 'E', 'J', + 'T', 'S', 'H', 'O', 'O', 'J', + 'T', 'S', 'H', 'O', 'O', 'K', + 'T', 'S', 'H', 'U', 'G', 'S', + 'T', 'T', 'E', 'H', 'E', 'H', + 'T', 'U', 'A', 'R', 'E', 'G', + 'T', 'U', 'G', 'R', 'I', 'K', + 'T', 'U', 'R', 'B', 'A', 'N', + 'T', 'U', 'R', 'K', 'E', 'Y', + 'T', 'U', 'R', 'K', 'I', 'C', + 'T', 'U', 'R', 'N', 'E', 'D', + 'T', 'U', 'R', 'T', 'L', 'E', + 'T', 'U', 'X', 'E', 'D', 'O', + 'T', 'V', 'R', 'I', 'D', 'O', + 'T', 'W', 'E', 'L', 'V', 'E', + 'T', 'W', 'E', 'N', 'T', 'Y', + 'T', 'W', 'O', '-', 'E', 'M', + 'T', 'X', 'H', 'E', 'E', 'J', + 'T', 'Y', 'P', 'E', '-', '1', + 'T', 'Y', 'P', 'E', '-', '2', + 'T', 'Y', 'P', 'E', '-', '3', + 'T', 'Y', 'P', 'E', '-', '4', + 'T', 'Y', 'P', 'E', '-', '5', + 'T', 'Y', 'P', 'E', '-', '6', + 'T', 'Y', 'P', 'E', '-', '7', + 'U', 'D', 'A', 'R', 'K', 'A', + 'U', 'D', 'A', 'T', 'T', 'A', + 'U', 'I', 'G', 'H', 'U', 'R', + 'U', 'N', 'E', 'V', 'E', 'N', + 'U', 'N', 'I', 'T', 'E', 'D', + 'U', 'P', 'T', 'U', 'R', 'N', + 'U', 'P', 'W', 'A', 'R', 'D', + 'U', 'R', 'A', 'N', 'U', 'S', + 'U', 'S', 'H', 'U', 'M', 'X', + 'U', 'Y', 'A', 'N', 'N', 'A', + 'U', 'Y', 'G', 'H', 'U', 'R', + 'V', 'A', 'L', 'L', 'E', 'Y', + 'V', 'A', 'R', 'E', 'I', 'A', + 'V', 'A', 'R', 'I', 'K', 'A', + 'V', 'E', 'C', 'T', 'O', 'R', + 'V', 'E', 'R', 'T', 'E', 'X', + 'V', 'E', 'S', 'S', 'E', 'L', + 'V', 'I', 'D', 'J', '-', '2', + 'V', 'I', 'E', 'W', 'E', 'R', + 'V', 'I', 'O', 'L', 'I', 'N', + 'V', 'I', 'R', 'A', 'M', 'A', + 'V', 'I', 'R', 'I', 'A', 'M', + 'V', 'O', 'I', 'C', 'E', 'D', + 'V', 'O', 'I', 'D', 'E', 'D', + 'V', 'O', 'L', 'U', 'M', 'E', + 'V', 'R', 'A', 'C', 'H', 'Y', + 'V', 'U', 'L', 'G', 'A', 'R', + 'V', 'Y', 'S', 'O', 'K', 'O', + 'W', 'A', 'A', 'J', 'I', 'B', + 'W', 'A', 'F', 'F', 'L', 'E', + 'W', 'A', 'L', 'L', 'E', 'D', + 'W', 'A', 'N', 'C', 'H', 'O', + 'W', 'A', 'N', 'I', 'N', 'G', + 'W', 'A', 'R', 'A', 'N', 'G', + 'W', 'A', 'V', 'I', 'N', 'G', + 'W', 'A', 'X', 'I', 'N', 'G', + 'W', 'E', 'A', 'P', 'O', 'N', + 'W', 'E', 'I', 'G', 'H', 'T', + 'W', 'I', 'G', 'G', 'L', 'Y', + 'W', 'I', 'L', 'T', 'E', 'D', + 'W', 'I', 'N', 'D', 'O', 'W', + 'W', 'I', 'N', 'T', 'E', 'R', + 'W', 'I', 'T', 'H', 'I', 'N', + 'W', 'O', 'L', 'O', 'S', 'O', + 'W', 'O', 'M', 'A', 'N', 'S', + 'W', 'O', 'M', 'E', 'N', 'S', + 'W', 'O', 'R', 'K', 'E', 'R', + 'W', 'R', 'E', 'A', 'T', 'H', + 'W', 'R', 'E', 'N', 'C', 'H', + 'X', 'E', 'S', 'T', 'E', 'S', + 'Y', '-', 'C', 'R', 'E', 'E', + 'Y', 'A', 'K', 'A', 'S', 'H', + 'Y', 'E', 'L', 'L', 'O', 'W', + 'Y', 'E', 'O', '-', 'Y', 'A', + 'Y', 'E', 'U', 'A', 'E', 'T', + 'Y', 'E', 'U', 'R', 'A', 'E', + 'Y', 'E', 'Z', 'I', 'D', 'I', + 'Y', 'F', 'E', 'S', 'I', 'S', + 'Y', 'O', '-', 'Y', 'A', 'E', + 'Y', 'O', '-', 'Y', 'E', 'O', + 'Y', 'P', 'S', 'I', 'L', 'I', + 'Y', 'U', '-', 'Y', 'E', 'O', + 'Z', 'E', 'M', 'L', 'J', 'A', + 'Z', 'E', 'M', 'L', 'Y', 'A', + 'Z', 'H', 'A', 'Y', 'I', 'N', + 'Z', 'I', 'G', 'Z', 'A', 'G', + 'Z', 'O', 'M', 'B', 'I', 'E', + 'Z', 'Q', 'A', 'P', 'H', 'A', + 'Z', 'W', 'N', 'B', 'S', 'P', + 'A', 'A', 'Y', 'A', 'N', 'N', 'A', + 'A', 'B', 'A', 'F', 'I', 'L', 'I', + 'A', 'B', 'Y', 'S', 'M', 'A', 'L', + 'A', 'C', 'A', 'D', 'E', 'M', 'Y', + 'A', 'C', 'C', 'O', 'U', 'N', 'T', + 'A', 'D', 'D', 'R', 'E', 'S', 'S', + 'A', 'D', 'M', 'E', 'T', 'O', 'S', + 'A', 'D', 'V', 'A', 'N', 'C', 'E', + 'A', 'E', 'Y', 'A', 'N', 'N', 'A', + 'A', 'F', 'G', 'H', 'A', 'N', 'I', + 'A', 'F', 'R', 'I', 'C', 'A', 'N', + 'A', 'G', 'A', 'I', 'N', 'S', 'T', + 'A', 'H', 'A', 'G', 'G', 'A', 'R', + 'A', 'I', 'V', 'I', 'L', 'I', 'K', + 'A', 'I', 'Y', 'A', 'N', 'N', 'A', + 'A', 'L', 'A', 'Y', 'H', 'A', 'A', + 'A', 'L', 'A', 'Y', 'H', 'I', 'M', + 'A', 'L', 'A', 'Y', 'N', 'A', 'A', + 'A', 'L', 'E', 'M', 'B', 'I', 'C', + 'A', 'L', 'I', 'G', 'N', 'E', 'D', + 'A', 'L', 'L', 'A', 'A', 'H', 'U', + 'A', 'L', 'L', 'A', 'H', 'O', 'U', + 'A', 'M', 'A', 'L', 'G', 'A', 'M', + 'A', 'M', 'P', 'H', 'O', 'R', 'A', + 'A', 'N', '-', 'N', 'I', 'S', 'F', + 'A', 'N', 'G', 'U', 'L', 'A', 'R', + 'A', 'N', 'H', 'U', 'M', 'A', 'A', + 'A', 'N', 'H', 'U', 'N', 'N', 'A', + 'A', 'N', 'N', 'U', 'I', 'T', 'Y', + 'A', 'N', 'T', 'E', 'N', 'N', 'A', + 'A', 'P', 'O', 'L', 'L', 'O', 'N', + 'A', 'P', 'O', 'T', 'H', 'E', 'S', + 'A', 'R', 'A', 'B', 'I', 'A', 'N', + 'A', 'R', 'A', 'E', 'A', '-', 'A', + 'A', 'R', 'A', 'E', 'A', '-', 'E', + 'A', 'R', 'A', 'E', 'A', '-', 'I', + 'A', 'R', 'A', 'E', 'A', '-', 'U', + 'A', 'R', 'A', 'M', 'A', 'I', 'C', + 'A', 'R', 'C', 'H', 'A', 'I', 'C', + 'A', 'R', 'K', 'A', 'A', 'N', 'U', + 'A', 'R', 'K', 'T', 'I', 'K', 'O', + 'A', 'R', 'S', 'E', 'N', 'I', 'C', + 'A', 'S', 'T', 'R', 'A', 'E', 'A', + 'A', 'U', 'S', 'T', 'R', 'A', 'L', + 'A', 'U', 'Y', 'A', 'N', 'N', 'A', + 'A', 'V', 'E', 'R', 'A', 'G', 'E', + 'A', 'V', 'E', 'S', 'T', 'A', 'N', + 'A', 'V', 'O', 'C', 'A', 'D', 'O', + 'B', 'A', 'A', 'R', 'E', 'R', 'U', + 'B', 'A', 'G', 'G', 'A', 'G', 'E', + 'B', 'A', 'I', 'R', 'K', 'A', 'N', + 'B', 'A', 'L', 'L', 'O', 'O', 'N', + 'B', 'A', 'M', 'B', 'O', 'O', 'S', + 'B', 'A', 'N', 'D', 'A', 'G', 'E', + 'B', 'A', 'R', 'L', 'I', 'N', 'E', + 'B', 'A', 'R', 'R', 'E', 'K', 'H', + 'B', 'A', 'R', 'R', 'I', 'E', 'R', + 'B', 'A', 'S', 'H', 'K', 'I', 'R', + 'B', 'A', 'T', 'H', 'T', 'U', 'B', + 'B', 'A', 'T', 'T', 'E', 'R', 'Y', + 'B', 'A', 'Y', 'A', 'N', 'N', 'A', + 'B', 'E', 'A', 'R', 'D', 'E', 'D', + 'B', 'E', 'A', 'T', 'I', 'N', 'G', + 'B', 'E', 'C', 'A', 'U', 'S', 'E', + 'B', 'E', 'E', 'H', 'I', 'V', 'E', + 'B', 'E', 'L', 'L', 'H', 'O', 'P', + 'B', 'E', 'N', 'G', 'A', 'L', 'I', + 'B', 'E', 'N', 'Z', 'E', 'N', 'E', + 'B', 'E', 'T', 'W', 'E', 'E', 'N', + 'B', 'I', 'C', 'Y', 'C', 'L', 'E', + 'B', 'I', 'N', 'D', 'I', 'N', 'G', + 'B', 'I', 'S', 'M', 'U', 'T', 'H', + 'B', 'I', 'T', 'C', 'O', 'I', 'N', + 'B', 'J', 'A', 'R', 'K', 'A', 'N', + 'B', 'L', 'E', 'N', 'D', 'E', 'D', + 'B', 'L', 'O', 'C', 'K', '-', '2', + 'B', 'L', 'O', 'C', 'K', '-', '3', + 'B', 'L', 'O', 'C', 'K', '-', '4', + 'B', 'L', 'O', 'C', 'K', '-', '5', + 'B', 'L', 'O', 'C', 'K', '-', '6', + 'B', 'L', 'O', 'C', 'K', '-', '7', + 'B', 'L', 'O', 'S', 'S', 'O', 'M', + 'B', 'L', 'O', 'W', 'I', 'N', 'G', + 'B', 'O', 'O', 'S', 'T', 'E', 'R', + 'B', 'O', 'R', 'A', 'X', '-', '2', + 'B', 'O', 'R', 'A', 'X', '-', '3', + 'B', 'O', 'R', 'Z', 'A', 'Y', 'A', + 'B', 'O', 'U', 'Q', 'U', 'E', 'T', + 'B', 'O', 'W', 'L', 'I', 'N', 'G', + 'B', 'R', 'A', 'C', 'K', 'E', 'T', + 'B', 'R', 'A', 'I', 'L', 'L', 'E', + 'B', 'R', 'A', 'K', 'C', 'E', 'T', + 'B', 'R', 'E', 'A', 'T', 'H', 'Y', + 'B', 'R', 'I', 'S', 'T', 'L', 'E', + 'B', 'U', 'B', 'B', 'L', 'E', 'S', + 'B', 'U', 'F', 'F', 'A', 'L', 'O', + 'B', 'U', 'R', 'R', 'I', 'T', 'O', + 'B', 'U', 'U', 'M', 'I', 'S', 'H', + 'C', 'A', 'B', 'I', 'N', 'E', 'T', + 'C', 'A', 'E', 'S', 'U', 'R', 'A', + 'C', 'A', 'M', 'P', 'I', 'N', 'G', + 'C', 'A', 'P', 'I', 'T', 'A', 'L', + 'C', 'A', 'P', 'T', 'I', 'V', 'E', + 'C', 'A', 'R', 'R', 'I', 'E', 'R', + 'C', 'A', 'U', 'D', 'A', 'T', 'E', + 'C', 'A', 'U', 'T', 'I', 'O', 'N', + 'C', 'A', 'Y', 'A', 'N', 'N', 'A', + 'C', 'E', 'D', 'I', 'L', 'L', 'A', + 'C', 'E', 'I', 'L', 'I', 'N', 'G', + 'C', 'E', 'L', 'S', 'I', 'U', 'S', + 'C', 'E', 'N', 'T', 'R', 'E', 'D', + 'C', 'H', 'A', 'M', 'I', 'L', 'I', + 'C', 'H', 'A', 'P', 'T', 'E', 'R', + 'C', 'H', 'A', 'R', 'I', 'O', 'T', + 'C', 'H', 'A', 'S', 'H', 'K', 'A', + 'C', 'H', 'E', 'C', 'K', 'E', 'R', + 'C', 'H', 'E', 'I', 'N', 'A', 'P', + 'C', 'H', 'E', 'V', 'R', 'O', 'N', + 'C', 'H', 'I', 'C', 'K', 'E', 'N', + 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'C', 'H', 'I', 'N', 'E', 'S', 'E', + 'C', 'H', 'I', 'N', 'O', 'O', 'K', + 'C', 'H', 'R', 'O', 'N', 'O', 'N', + 'C', 'H', 'R', 'O', 'N', 'O', 'U', + 'C', 'I', 'R', 'C', 'L', 'E', 'D', + 'C', 'I', 'R', 'C', 'L', 'E', 'S', + 'C', 'L', 'A', 'P', 'P', 'E', 'R', + 'C', 'L', 'E', 'A', 'V', 'E', 'R', + 'C', 'L', 'O', 'S', 'I', 'N', 'G', + 'C', 'L', 'O', 'S', 'U', 'R', 'E', + 'C', 'L', 'O', 'T', 'H', 'E', 'S', + 'C', 'L', 'U', 'S', 'T', 'E', 'R', + 'C', 'O', 'A', 'S', 'T', 'E', 'R', + 'C', 'O', 'C', 'O', 'N', 'U', 'T', + 'C', 'O', 'M', 'P', 'A', 'R', 'E', + 'C', 'O', 'M', 'P', 'A', 'S', 'S', + 'C', 'O', 'N', 'I', 'C', 'A', 'L', + 'C', 'O', 'N', 'T', 'A', 'C', 'T', + 'C', 'O', 'N', 'T', 'A', 'I', 'N', + 'C', 'O', 'N', 'T', 'O', 'U', 'R', + 'C', 'O', 'N', 'T', 'R', 'O', 'L', + 'C', 'O', 'O', 'K', 'I', 'N', 'G', + 'C', 'O', 'R', 'N', 'E', 'R', 'S', + 'C', 'O', 'R', 'N', 'I', 'S', 'H', + 'C', 'O', 'R', 'O', 'N', 'I', 'S', + 'C', 'O', 'R', 'R', 'E', 'C', 'T', + 'C', 'O', 'U', 'N', 'C', 'I', 'L', + 'C', 'R', 'A', 'C', 'K', 'E', 'R', + 'C', 'R', 'I', 'C', 'K', 'E', 'T', + 'C', 'R', 'O', 'S', 'S', 'E', 'D', + 'C', 'R', 'Y', 'S', 'T', 'A', 'L', + 'C', 'U', 'P', 'C', 'A', 'K', 'E', + 'C', 'U', 'R', 'L', 'I', 'N', 'G', + 'C', 'U', 'R', 'R', 'E', 'N', 'T', + 'C', 'U', 'R', 'S', 'I', 'V', 'E', + 'C', 'U', 'R', 'V', 'I', 'N', 'G', + 'C', 'U', 'S', 'T', 'A', 'R', 'D', + 'C', 'U', 'S', 'T', 'O', 'M', 'S', + 'C', 'W', 'E', 'O', 'R', 'T', 'H', + 'C', 'Y', 'C', 'L', 'O', 'N', 'E', + 'C', 'Y', 'P', 'E', 'R', 'U', 'S', + 'C', 'Y', 'P', 'R', 'I', 'O', 'T', + 'D', 'A', 'G', 'A', 'L', 'G', 'A', + 'D', 'A', 'M', 'A', 'G', 'E', 'D', + 'D', 'A', 'N', 'C', 'I', 'N', 'G', + 'D', 'A', 'N', 'T', 'A', 'J', 'A', + 'D', 'A', 'P', '-', 'B', 'E', 'I', + 'D', 'A', 'P', '-', 'P', 'I', 'I', + 'D', 'A', 'Y', 'A', 'N', 'N', 'A', + 'D', 'E', 'C', 'A', 'Y', 'E', 'D', + 'D', 'E', 'C', 'I', 'M', 'A', 'L', + 'D', 'E', 'G', 'R', 'E', 'E', 'S', + 'D', 'E', 'L', 'P', 'H', 'I', 'C', + 'D', 'E', 'S', 'E', 'R', 'E', 'T', + 'D', 'E', 'S', 'K', 'T', 'O', 'P', + 'D', 'H', 'A', 'L', 'A', 'T', 'H', + 'D', 'H', 'A', 'L', 'E', 'T', 'H', + 'D', 'H', 'A', 'M', 'E', 'D', 'H', + 'D', 'I', 'A', 'M', 'O', 'N', 'D', + 'D', 'I', 'A', 'R', 'G', 'O', 'N', + 'D', 'I', 'G', 'A', 'M', 'M', 'A', + 'D', 'I', 'G', 'R', 'A', 'P', 'H', + 'D', 'I', 'M', 'I', 'D', 'I', 'A', + 'D', 'I', 'M', 'M', 'I', 'N', 'G', + 'D', 'I', 'N', 'G', 'B', 'A', 'T', + 'D', 'I', 'P', 'L', 'O', 'U', 'N', + 'D', 'I', 'S', 'I', 'M', 'O', 'U', + 'D', 'I', 'S', 'T', 'I', 'L', 'L', + 'D', 'I', 'V', 'I', 'D', 'E', 'D', + 'D', 'I', 'V', 'I', 'D', 'E', 'R', + 'D', 'I', 'V', 'I', 'D', 'E', 'S', + 'D', 'I', 'V', 'O', 'R', 'C', 'E', + 'D', 'O', 'L', 'P', 'H', 'I', 'N', + 'D', 'O', 'T', 'L', 'E', 'S', 'S', + 'D', 'O', 'T', 'S', '-', '1', '2', + 'D', 'O', 'T', 'S', '-', '1', '3', + 'D', 'O', 'T', 'S', '-', '1', '4', + 'D', 'O', 'T', 'S', '-', '1', '5', + 'D', 'O', 'T', 'S', '-', '1', '6', + 'D', 'O', 'T', 'S', '-', '1', '7', + 'D', 'O', 'T', 'S', '-', '1', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', + 'D', 'O', 'T', 'S', '-', '2', '4', + 'D', 'O', 'T', 'S', '-', '2', '5', + 'D', 'O', 'T', 'S', '-', '2', '6', + 'D', 'O', 'T', 'S', '-', '2', '7', + 'D', 'O', 'T', 'S', '-', '2', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', + 'D', 'O', 'T', 'S', '-', '3', '5', + 'D', 'O', 'T', 'S', '-', '3', '6', + 'D', 'O', 'T', 'S', '-', '3', '7', + 'D', 'O', 'T', 'S', '-', '3', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', + 'D', 'O', 'T', 'S', '-', '4', '6', + 'D', 'O', 'T', 'S', '-', '4', '7', + 'D', 'O', 'T', 'S', '-', '4', '8', + 'D', 'O', 'T', 'S', '-', '5', '6', + 'D', 'O', 'T', 'S', '-', '5', '7', + 'D', 'O', 'T', 'S', '-', '5', '8', + 'D', 'O', 'T', 'S', '-', '6', '7', + 'D', 'O', 'T', 'S', '-', '6', '8', + 'D', 'O', 'T', 'S', '-', '7', '8', + 'D', 'O', 'U', 'B', 'L', 'E', 'D', + 'D', 'R', 'A', 'C', 'H', 'M', 'A', + 'D', 'R', 'O', 'P', 'L', 'E', 'T', + 'D', 'Y', 'N', 'A', 'M', 'I', 'C', + 'E', 'A', 'B', 'H', 'A', 'D', 'H', + 'E', 'A', 'D', 'H', 'A', 'D', 'H', + 'E', 'A', 'R', 'T', 'H', 'L', 'Y', + 'E', 'A', 'S', 'T', 'E', 'R', 'N', + 'E', 'B', 'E', 'F', 'I', 'L', 'I', + 'E', 'C', 'L', 'I', 'P', 'S', 'E', + 'E', 'E', 'Y', 'A', 'N', 'N', 'A', + 'E', 'I', 'G', 'H', 'T', 'H', 'S', + 'E', 'L', 'A', 'F', 'R', 'O', 'N', + 'E', 'L', 'A', 'M', 'I', 'T', 'E', + 'E', 'L', 'B', 'A', 'S', 'A', 'N', + 'E', 'L', 'E', 'M', 'E', 'N', 'T', + 'E', 'L', 'L', 'I', 'P', 'S', 'E', + 'E', 'L', 'Y', 'M', 'A', 'I', 'C', + 'E', 'N', 'A', 'R', 'X', 'I', 'S', + 'E', 'N', 'Q', 'U', 'I', 'R', 'Y', + 'E', 'N', 'T', 'R', 'Y', '-', '1', + 'E', 'N', 'T', 'R', 'Y', '-', '2', + 'E', 'P', 'S', 'I', 'L', 'O', 'N', + 'E', 'T', 'N', 'A', 'H', 'T', 'A', + 'E', 'V', 'E', 'N', 'I', 'N', 'G', + 'E', 'Y', 'E', 'B', 'R', 'O', 'W', + 'F', 'A', 'C', 'I', 'N', 'G', 'S', + 'F', 'A', 'C', 'T', 'O', 'R', 'Y', + 'F', 'A', 'I', 'L', 'U', 'R', 'E', + 'F', 'A', 'L', 'A', 'F', 'E', 'L', + 'F', 'A', 'L', 'L', 'I', 'N', 'G', + 'F', 'A', 'T', 'I', 'G', 'U', 'E', + 'F', 'A', 'Y', 'A', 'N', 'N', 'A', + 'F', 'E', 'A', 'R', 'F', 'U', 'L', + 'F', 'E', 'A', 'T', 'H', 'E', 'R', + 'F', 'E', 'R', 'M', 'A', 'T', 'A', + 'F', 'I', 'F', 'T', 'E', 'E', 'N', + 'F', 'I', 'N', 'G', 'E', 'R', 'S', + 'F', 'I', 'S', 'H', 'E', 'Y', 'E', + 'F', 'I', 'S', 'H', 'I', 'N', 'G', + 'F', 'L', 'E', 'U', 'R', 'O', 'N', + 'F', 'L', 'O', 'W', 'E', 'R', 'S', + 'F', 'L', 'O', 'W', 'I', 'N', 'G', + 'F', 'L', 'U', 'S', 'H', 'E', 'D', + 'F', 'O', 'L', 'D', 'I', 'N', 'G', + 'F', 'O', 'N', 'G', 'M', 'A', 'N', + 'F', 'O', 'R', 'K', 'I', 'N', 'G', + 'F', 'O', 'R', 'T', 'U', 'N', 'E', + 'F', 'O', 'R', 'W', 'A', 'R', 'D', + 'F', 'R', 'A', 'K', 'T', 'U', 'R', + 'F', 'R', 'A', 'M', 'E', '-', '1', + 'F', 'R', 'A', 'M', 'E', '-', '2', + 'F', 'R', 'A', 'M', 'E', '-', '3', + 'F', 'R', 'A', 'M', 'E', '-', '4', + 'F', 'U', 'N', 'E', 'R', 'A', 'L', + 'G', 'A', 'A', 'H', 'L', 'A', 'A', + 'G', 'A', 'R', 'M', 'E', 'N', 'T', + 'G', 'A', 'Y', 'A', 'N', 'N', 'A', + 'G', 'E', 'N', 'E', 'R', 'A', 'L', + 'G', 'E', 'N', 'E', 'R', 'I', 'C', + 'G', 'E', 'S', 'H', 'T', 'I', 'N', + 'G', 'E', 'S', 'T', 'U', 'R', 'E', + 'G', 'H', 'A', 'A', 'M', 'A', 'E', + 'G', 'I', 'B', 'B', 'O', 'U', 'S', + 'G', 'I', 'R', 'A', 'F', 'F', 'E', + 'G', 'I', 'R', 'U', 'D', 'A', 'A', + 'G', 'L', 'A', 'G', 'O', 'L', 'I', + 'G', 'L', 'A', 'S', 'S', 'E', 'S', + 'G', 'L', 'O', 'T', 'T', 'A', 'L', + 'G', 'L', 'O', 'W', 'I', 'N', 'G', + 'G', 'O', '-', 'K', 'A', 'R', 'T', + 'G', 'O', 'G', 'G', 'L', 'E', 'S', + 'G', 'O', 'R', 'A', 'Z', 'D', 'O', + 'G', 'O', 'R', 'I', 'L', 'L', 'A', + 'G', 'R', 'A', 'D', 'U', 'A', 'L', + 'G', 'R', 'A', 'N', 'T', 'H', 'A', + 'G', 'R', 'E', 'A', 'T', 'E', 'R', + 'G', 'R', 'O', 'W', 'I', 'N', 'G', + 'G', 'U', 'A', 'R', 'A', 'N', 'I', + 'G', 'U', 'N', 'J', 'A', 'L', 'A', + 'H', 'A', 'F', 'U', 'K', 'H', 'A', + 'H', 'A', 'I', 'R', 'C', 'U', 'T', + 'H', 'A', 'L', 'A', 'N', 'T', 'A', + 'H', 'A', 'L', 'B', 'E', 'R', 'D', + 'H', 'A', 'M', 'S', 'T', 'E', 'R', + 'H', 'A', 'N', 'D', 'B', 'A', 'G', + 'H', 'A', 'N', 'D', 'L', 'E', 'S', + 'H', 'A', 'N', 'U', 'N', 'O', 'O', + 'H', 'A', 'R', 'P', 'O', 'O', 'N', + 'H', 'A', 'S', 'A', 'N', 'T', 'A', + 'H', 'A', 'Y', 'A', 'N', 'N', 'A', + 'H', 'E', '-', 'G', 'O', 'A', 'T', + 'H', 'E', 'A', 'D', 'I', 'N', 'G', + 'H', 'E', 'A', 'R', 'I', 'N', 'G', + 'H', 'E', 'R', 'A', 'E', 'U', 'M', + 'H', 'E', 'X', 'A', 'G', 'O', 'N', + 'H', 'I', 'T', 'T', 'I', 'N', 'G', + 'H', 'O', 'D', 'D', 'O', 'N', 'D', + 'H', 'O', 'L', 'D', 'I', 'N', 'G', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', + 'H', 'R', 'Y', 'V', 'N', 'I', 'A', + 'H', 'U', 'G', 'G', 'I', 'N', 'G', + 'H', 'U', 'N', 'D', 'R', 'E', 'D', + 'H', 'Y', 'G', 'I', 'E', 'I', 'A', + 'I', '-', 'A', 'R', 'A', 'E', 'A', + 'I', 'B', 'I', 'F', 'I', 'L', 'I', + 'I', 'C', 'H', 'A', 'D', 'I', 'N', + 'I', 'I', 'Y', 'A', 'N', 'N', 'A', + 'I', 'L', 'I', 'M', 'M', 'U', '3', + 'I', 'L', 'I', 'M', 'M', 'U', '4', + 'I', 'M', 'I', 'S', 'E', 'O', 'S', + 'I', 'N', '-', 'A', 'L', 'A', 'F', + 'I', 'N', 'H', 'I', 'B', 'I', 'T', + 'I', 'N', 'I', 'T', 'I', 'A', 'L', + 'I', 'N', 'S', 'U', 'L', 'A', 'R', + 'I', 'N', 'V', 'E', 'R', 'S', 'E', + 'I', 'O', 'D', 'H', 'A', 'D', 'H', + 'I', 'O', 'T', 'A', 'T', 'E', 'D', + 'I', 'S', 'H', 'M', 'A', 'A', 'M', + 'I', 'S', 'O', 'L', 'A', 'T', 'E', + 'I', 'Z', 'A', 'K', 'A', 'Y', 'A', + 'I', 'Z', 'H', 'I', 'T', 'S', 'A', + 'J', 'A', 'N', 'U', 'A', 'R', 'Y', + 'J', 'A', 'Y', 'A', 'N', 'N', 'A', + 'J', 'E', 'G', 'O', 'G', 'A', 'N', + 'J', 'U', 'P', 'I', 'T', 'E', 'R', + 'K', 'A', 'A', 'N', 'K', 'U', 'U', + 'K', 'A', 'K', 'A', 'B', 'A', 'T', + 'K', 'A', 'N', 'N', 'A', 'D', 'A', + 'K', 'A', 'N', 'T', 'A', 'J', 'A', + 'K', 'A', 'R', 'A', 'T', 'T', 'O', + 'K', 'A', 'R', 'O', 'R', 'A', 'N', + 'K', 'A', 'R', 'O', 'R', 'I', 'I', + 'K', 'A', 'T', 'H', 'A', 'K', 'A', + 'K', 'A', 'Y', 'A', 'N', 'N', 'A', + 'K', 'E', 'E', 'P', 'I', 'N', 'G', + 'K', 'E', 'M', 'B', 'A', 'N', 'G', + 'K', 'E', 'N', 'T', 'I', 'M', 'A', + 'K', 'E', 'U', 'A', 'E', 'R', 'I', + 'K', 'E', 'U', 'S', 'E', 'U', 'X', + 'K', 'E', 'U', 'Y', 'E', 'U', 'X', + 'K', 'E', 'Y', 'H', 'O', 'L', 'E', + 'K', 'H', 'A', 'M', 'I', 'L', 'O', + 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'K', 'I', 'K', 'A', 'K', 'U', 'I', + 'K', 'I', 'N', 'S', 'H', 'I', 'P', + 'K', 'I', 'R', 'G', 'H', 'I', 'Z', + 'K', 'I', 'S', 'S', 'I', 'N', 'G', + 'K', 'N', 'U', 'C', 'K', 'L', 'E', + 'K', 'O', 'M', 'B', 'U', 'V', 'A', + 'K', 'O', 'O', 'M', 'U', 'U', 'T', + 'K', 'O', 'Q', 'N', 'D', 'O', 'N', + 'K', 'O', 'R', 'A', 'N', 'I', 'C', + 'K', 'O', 'R', 'O', 'N', 'I', 'S', + 'K', 'R', 'A', 'T', 'I', 'M', 'A', + 'K', 'R', 'Y', 'Z', 'H', 'E', 'M', + 'K', 'U', 'F', 'I', 'S', 'M', 'A', + 'K', 'U', 'P', 'N', 'A', 'Y', 'A', + 'K', 'U', 'R', 'O', 'O', 'N', 'E', + 'K', 'Y', 'A', 'T', 'H', 'O', 'S', + 'K', 'Y', 'L', 'I', 'S', 'M', 'A', + 'L', 'A', 'K', '-', '0', '0', '3', + 'L', 'A', 'K', '-', '0', '2', '0', + 'L', 'A', 'K', '-', '0', '2', '1', + 'L', 'A', 'K', '-', '0', '2', '5', + 'L', 'A', 'K', '-', '0', '3', '0', + 'L', 'A', 'K', '-', '0', '5', '0', + 'L', 'A', 'K', '-', '0', '5', '1', + 'L', 'A', 'K', '-', '0', '6', '2', + 'L', 'A', 'K', '-', '0', '7', '9', + 'L', 'A', 'K', '-', '0', '8', '0', + 'L', 'A', 'K', '-', '0', '8', '1', + 'L', 'A', 'K', '-', '0', '9', '2', + 'L', 'A', 'K', '-', '1', '3', '0', + 'L', 'A', 'K', '-', '1', '4', '2', + 'L', 'A', 'K', '-', '2', '1', '0', + 'L', 'A', 'K', '-', '2', '1', '9', + 'L', 'A', 'K', '-', '2', '2', '0', + 'L', 'A', 'K', '-', '2', '2', '5', + 'L', 'A', 'K', '-', '2', '2', '8', + 'L', 'A', 'K', '-', '2', '3', '8', + 'L', 'A', 'K', '-', '2', '6', '5', + 'L', 'A', 'K', '-', '2', '6', '6', + 'L', 'A', 'K', '-', '3', '4', '3', + 'L', 'A', 'K', '-', '3', '4', '7', + 'L', 'A', 'K', '-', '3', '4', '8', + 'L', 'A', 'K', '-', '3', '8', '3', + 'L', 'A', 'K', '-', '3', '8', '4', + 'L', 'A', 'K', '-', '3', '9', '0', + 'L', 'A', 'K', '-', '4', '4', '1', + 'L', 'A', 'K', '-', '4', '4', '9', + 'L', 'A', 'K', '-', '4', '5', '0', + 'L', 'A', 'K', '-', '4', '5', '7', + 'L', 'A', 'K', '-', '4', '7', '0', + 'L', 'A', 'K', '-', '4', '8', '3', + 'L', 'A', 'K', '-', '4', '9', '0', + 'L', 'A', 'K', '-', '4', '9', '2', + 'L', 'A', 'K', '-', '4', '9', '3', + 'L', 'A', 'K', '-', '4', '9', '5', + 'L', 'A', 'K', '-', '5', '5', '0', + 'L', 'A', 'K', '-', '6', '0', '8', + 'L', 'A', 'K', '-', '6', '1', '7', + 'L', 'A', 'K', '-', '6', '3', '6', + 'L', 'A', 'K', '-', '6', '4', '8', + 'L', 'A', 'K', '-', '6', '6', '8', + 'L', 'A', 'K', '-', '7', '2', '4', + 'L', 'A', 'K', '-', '7', '4', '9', + 'L', 'A', 'N', 'T', 'A', 'N', 'G', + 'L', 'A', 'N', 'T', 'E', 'R', 'N', + 'L', 'A', 'R', 'G', 'E', 'S', 'T', + 'L', 'A', 'T', 'E', 'R', 'A', 'L', + 'L', 'A', 'Y', 'A', 'N', 'N', 'A', + 'L', 'E', 'A', 'D', 'I', 'N', 'G', + 'L', 'E', 'A', 'N', 'I', 'N', 'G', + 'L', 'E', 'A', 'T', 'H', 'E', 'R', + 'L', 'E', 'G', 'E', 'T', 'O', 'S', + 'L', 'E', 'O', 'P', 'A', 'R', 'D', + 'L', 'E', 'T', 'T', 'E', 'R', 'S', + 'L', 'E', 'V', 'E', 'L', '-', '2', + 'L', 'E', 'V', 'E', 'L', '-', '3', + 'L', 'I', 'B', 'E', 'R', 'T', 'Y', + 'L', 'I', 'C', 'K', 'I', 'N', 'G', + 'L', 'I', 'M', 'I', 'T', 'E', 'D', + 'L', 'I', 'N', 'K', 'I', 'N', 'G', + 'L', 'J', 'U', 'D', 'I', 'J', 'E', + 'L', 'O', 'B', 'S', 'T', 'E', 'R', + 'L', 'O', 'G', 'I', 'C', 'A', 'L', + 'L', 'O', 'W', '-', 'M', 'I', 'D', + 'L', 'O', 'W', 'E', 'R', 'E', 'D', + 'L', 'O', 'Z', 'E', 'N', 'G', 'E', + 'L', 'U', 'G', 'G', 'A', 'G', 'E', + 'L', 'Y', 'G', 'I', 'S', 'M', 'A', + 'M', 'A', 'A', 'Y', 'Y', 'A', 'A', + 'M', 'A', 'C', 'H', 'I', 'N', 'E', + 'M', 'A', 'E', 'K', 'E', 'U', 'P', + 'M', 'A', 'E', 'N', 'J', 'E', 'T', + 'M', 'A', 'H', 'J', 'O', 'N', 'G', + 'M', 'A', 'I', 'K', 'U', 'R', 'O', + 'M', 'A', 'I', 'L', 'B', 'O', 'X', + 'M', 'A', 'I', 'M', 'U', 'A', 'N', + 'M', 'A', 'K', 'A', 'S', 'A', 'R', + 'M', 'A', 'K', 'S', 'U', 'R', 'A', + 'M', 'A', 'L', 'A', 'K', 'O', 'N', + 'M', 'A', 'L', 'E', 'E', 'R', 'I', + 'M', 'A', 'L', 'T', 'E', 'S', 'E', + 'M', 'A', 'M', 'M', 'O', 'T', 'H', + 'M', 'A', 'N', 'D', 'A', 'I', 'C', + 'M', 'A', 'N', 'S', 'U', 'A', 'E', + 'M', 'A', 'N', 'S', 'Y', 'O', 'N', + 'M', 'A', 'R', 'A', 'C', 'A', 'S', + 'M', 'A', 'R', 'B', 'U', 'T', 'A', + 'M', 'A', 'R', 'C', 'A', 'T', 'O', + 'M', 'A', 'R', 'C', 'H', 'E', 'N', + 'M', 'A', 'R', 'T', 'I', 'A', 'L', + 'M', 'A', 'R', 'W', 'A', 'R', 'I', + 'M', 'A', 'S', 'A', 'R', 'A', 'M', + 'M', 'A', 'S', 'S', 'A', 'G', 'E', + 'M', 'A', 'S', 'S', 'I', 'N', 'G', + 'M', 'A', 'T', 'T', 'O', 'C', 'K', + 'M', 'A', 'Y', 'A', 'N', 'N', 'A', + 'M', 'B', 'A', 'A', 'K', 'E', 'T', + 'M', 'B', 'A', 'A', 'R', 'A', 'E', + 'M', 'E', 'A', 'S', 'U', 'R', 'E', + 'M', 'E', 'D', 'I', 'C', 'A', 'L', + 'M', 'E', 'E', 'T', 'O', 'R', 'U', + 'M', 'E', 'G', 'A', 'T', 'O', 'N', + 'M', 'E', 'L', 'O', 'D', 'I', 'C', + 'M', 'E', 'L', 'T', 'I', 'N', 'G', + 'M', 'E', 'N', 'O', 'R', 'A', 'H', + 'M', 'E', 'R', 'C', 'U', 'R', 'Y', + 'M', 'G', 'B', 'A', 'S', 'A', 'Q', + 'M', 'G', 'B', 'O', 'F', 'U', 'M', + 'M', 'I', 'C', 'R', 'O', 'B', 'E', + 'M', 'I', 'D', 'L', 'I', 'N', 'E', + 'M', 'I', 'K', 'U', 'R', 'O', 'N', + 'M', 'I', 'N', 'I', 'B', 'U', 'S', + 'M', 'K', 'P', 'A', 'R', 'A', 'Q', + 'M', 'O', 'D', 'E', 'S', 'T', 'Y', + 'M', 'O', 'N', 'I', 'T', 'O', 'R', + 'M', 'O', 'N', 'O', 'C', 'L', 'E', + 'M', 'O', 'N', 'S', 'T', 'E', 'R', + 'M', 'O', 'O', 'M', 'E', 'U', 'T', + 'M', 'O', 'O', 'M', 'P', 'U', 'Q', + 'M', 'O', 'R', 'N', 'I', 'N', 'G', + 'M', 'O', 'R', 'T', 'U', 'U', 'M', + 'M', 'R', 'A', 'C', 'H', 'N', 'O', + 'M', 'R', 'A', 'C', 'H', 'N', 'Y', + 'M', 'U', 'L', 'T', 'A', 'N', 'I', + 'M', 'U', 'N', 'D', 'A', 'R', 'I', + 'M', 'U', 'S', 'I', 'C', 'A', 'L', + 'M', 'Y', 'A', 'N', 'M', 'A', 'R', + 'M', 'Y', 'S', 'L', 'I', 'T', 'E', + 'N', 'A', 'K', 'A', 'A', 'R', 'A', + 'N', 'A', 'S', 'K', 'A', 'P', 'I', + 'N', 'A', 'T', 'U', 'R', 'A', 'L', + 'N', 'A', 'Y', 'A', 'N', 'N', 'A', + 'N', 'E', 'C', 'K', 'T', 'I', 'E', + 'N', 'E', 'G', 'A', 'T', 'E', 'D', + 'N', 'E', 'I', 'T', 'H', 'E', 'R', + 'N', 'E', 'P', 'T', 'U', 'N', 'E', + 'N', 'E', 'Q', 'U', 'D', 'A', 'A', + 'N', 'E', 'S', 'T', 'I', 'N', 'G', + 'N', 'E', 'U', 'T', 'R', 'A', 'L', + 'N', 'E', 'W', 'L', 'I', 'N', 'E', + 'N', 'G', 'E', 'A', 'D', 'A', 'L', + 'N', 'G', 'G', 'E', 'E', 'E', 'E', + 'N', 'G', 'G', 'E', 'U', 'A', 'E', + 'N', 'G', 'G', 'U', 'A', 'E', 'N', + 'N', 'G', 'G', 'U', 'E', 'E', 'T', + 'N', 'G', 'G', 'U', 'R', 'A', 'E', + 'N', 'G', 'G', 'W', 'A', 'E', 'N', + 'N', 'G', 'K', 'A', 'A', 'M', 'I', + 'N', 'G', 'K', 'E', 'U', 'R', 'I', + 'N', 'G', 'K', 'I', 'N', 'D', 'I', + 'N', 'G', 'K', 'W', 'A', 'E', 'N', + 'N', 'I', 'K', 'A', 'H', 'I', 'T', + 'N', 'J', 'A', 'E', 'M', 'L', 'I', + 'N', 'J', 'E', 'U', 'A', 'E', 'M', + 'N', 'K', 'A', 'A', 'R', 'A', 'E', + 'N', 'O', 'M', 'I', 'N', 'A', 'L', + 'N', 'O', 'M', 'I', 'S', 'M', 'A', + 'N', 'O', 'T', 'C', 'H', 'E', 'D', + 'N', 'S', 'E', 'U', 'A', 'E', 'N', + 'N', 'T', 'O', 'Q', 'P', 'E', 'N', + 'N', 'U', 'M', 'B', 'E', 'R', 'S', + 'N', 'U', 'M', 'E', 'R', 'A', 'L', + 'N', 'U', 'M', 'E', 'R', 'I', 'C', + 'N', 'U', 'N', 'A', 'V', 'I', 'K', + 'N', 'U', 'N', 'A', 'V', 'U', 'T', + 'N', 'U', 'T', 'I', 'L', 'L', 'U', + 'N', 'Y', 'A', 'E', 'M', 'A', 'E', + 'N', 'Y', 'I', 'N', '-', 'D', 'O', + 'O', 'B', 'L', 'I', 'Q', 'U', 'E', + 'O', 'B', 'O', 'F', 'I', 'L', 'I', + 'O', 'C', 'T', 'A', 'G', 'O', 'N', + 'O', 'C', 'T', 'O', 'B', 'E', 'R', + 'O', 'C', 'T', 'O', 'P', 'U', 'S', + 'O', 'F', 'F', 'I', 'C', 'E', 'R', + 'O', 'J', 'I', 'B', 'W', 'A', 'Y', + 'O', 'M', 'I', 'C', 'R', 'O', 'N', + 'O', 'N', 'E', '-', 'W', 'A', 'Y', + 'O', 'N', 'E', 'S', 'E', 'L', 'F', + 'O', 'O', 'Y', 'A', 'N', 'N', 'A', + 'O', 'P', 'E', 'N', 'I', 'N', 'G', + 'O', 'P', 'T', 'I', 'C', 'A', 'L', + 'O', 'R', 'D', 'I', 'N', 'A', 'L', + 'O', 'S', 'M', 'A', 'N', 'Y', 'A', + 'O', 'T', 'H', 'A', 'L', 'A', 'N', + 'O', 'T', 'T', 'O', 'M', 'A', 'N', + 'O', 'U', 'T', 'L', 'I', 'N', 'E', + 'O', 'U', 'T', 'W', 'A', 'R', 'D', + 'O', 'V', 'E', 'R', 'B', 'A', 'R', + 'O', 'V', 'E', 'R', 'L', 'A', 'P', + 'O', 'V', 'E', 'R', 'L', 'A', 'Y', + 'P', 'A', 'C', 'K', 'A', 'G', 'E', + 'P', 'A', 'C', 'K', 'I', 'N', 'G', + 'P', 'A', 'H', 'L', 'A', 'V', 'I', + 'P', 'A', 'L', 'A', 'T', 'A', 'L', + 'P', 'A', 'L', 'A', 'U', 'N', 'G', + 'P', 'A', 'L', 'E', 'T', 'T', 'E', + 'P', 'A', 'L', 'L', 'A', 'W', 'A', + 'P', 'A', 'M', 'A', 'A', 'E', 'H', + 'P', 'A', 'M', 'E', 'P', 'E', 'T', + 'P', 'A', 'M', 'S', 'H', 'A', 'E', + 'P', 'A', 'N', 'G', 'K', 'A', 'T', + 'P', 'A', 'N', 'G', 'K', 'O', 'N', + 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'P', 'A', 'N', 'Y', 'I', 'K', 'U', + 'P', 'A', 'N', 'Y', 'U', 'K', 'U', + 'P', 'A', 'P', 'Y', 'R', 'U', 'S', + 'P', 'A', 'R', 'E', 'R', 'E', 'N', + 'P', 'A', 'R', 'T', 'I', 'A', 'L', + 'P', 'A', 'T', 'T', 'E', 'R', 'N', + 'P', 'A', 'Y', 'A', 'N', 'N', 'A', + 'P', 'A', 'Y', 'E', 'R', 'O', 'K', + 'P', 'E', 'A', 'C', 'O', 'C', 'K', + 'P', 'E', 'A', 'N', 'U', 'T', 'S', + 'P', 'E', 'E', 'K', 'I', 'N', 'G', + 'P', 'E', 'N', 'G', 'K', 'A', 'L', + 'P', 'E', 'N', 'G', 'U', 'I', 'N', + 'P', 'E', 'N', 'N', 'A', 'N', 'T', + 'P', 'E', 'N', 'S', 'I', 'V', 'E', + 'P', 'E', 'R', 'C', 'E', 'N', 'T', + 'P', 'E', 'R', 'S', 'I', 'A', 'N', + 'P', 'E', 'T', 'A', 'S', 'M', 'A', + 'P', 'E', 'T', 'A', 'S', 'T', 'I', + 'P', 'H', 'A', 'S', 'E', '-', 'A', + 'P', 'H', 'A', 'S', 'E', '-', 'B', + 'P', 'H', 'A', 'S', 'E', '-', 'C', + 'P', 'H', 'A', 'S', 'E', '-', 'D', + 'P', 'H', 'A', 'S', 'E', '-', 'E', + 'P', 'H', 'A', 'S', 'E', '-', 'F', + 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'P', 'H', 'I', 'N', 'T', 'H', 'U', + 'P', 'H', 'U', 'T', 'H', 'A', 'O', + 'P', 'I', 'A', 'S', 'T', 'R', 'E', + 'P', 'I', 'C', 'T', 'U', 'R', 'E', + 'P', 'I', 'L', 'C', 'R', 'O', 'W', + 'P', 'I', 'N', 'C', 'H', 'E', 'D', + 'P', 'I', 'R', 'I', 'E', 'E', 'N', + 'P', 'I', 'S', 'E', 'L', 'E', 'H', + 'P', 'L', 'A', 'C', 'A', 'R', 'D', + 'P', 'L', 'A', 'G', 'I', 'O', 'S', + 'P', 'L', 'A', 'Y', 'I', 'N', 'G', + 'P', 'L', 'U', 'N', 'G', 'E', 'R', + 'P', 'O', 'D', 'A', 'T', 'U', 'S', + 'P', 'O', 'I', 'N', 'T', 'E', 'D', + 'P', 'O', 'I', 'N', 'T', 'E', 'R', + 'P', 'O', 'L', 'N', 'A', 'Y', 'A', + 'P', 'O', 'P', 'C', 'O', 'R', 'N', + 'P', 'O', 'P', 'P', 'I', 'N', 'G', + 'P', 'O', 'S', 'T', 'B', 'O', 'X', + 'P', 'O', 'T', 'A', 'B', 'L', 'E', + 'P', 'O', 'U', 'L', 'T', 'R', 'Y', + 'P', 'O', 'U', 'R', 'I', 'N', 'G', + 'P', 'O', 'U', 'T', 'I', 'N', 'G', + 'P', 'O', 'V', 'O', 'D', 'N', 'Y', + 'P', 'O', 'V', 'Y', 'S', 'H', 'E', + 'P', 'R', 'E', 'C', 'E', 'D', 'E', + 'P', 'R', 'E', 'F', 'A', 'C', 'E', + 'P', 'R', 'E', 'N', 'K', 'H', 'A', + 'P', 'R', 'E', 'S', 'E', 'N', 'T', + 'P', 'R', 'E', 'S', 'S', 'E', 'D', + 'P', 'R', 'E', 'T', 'Z', 'E', 'L', + 'P', 'R', 'I', 'N', 'T', 'E', 'R', + 'P', 'R', 'I', 'V', 'A', 'T', 'E', + 'P', 'R', 'I', 'Z', 'N', 'A', 'K', + 'P', 'R', 'O', 'B', 'I', 'N', 'G', + 'P', 'R', 'O', 'D', 'U', 'C', 'T', + 'P', 'S', 'A', 'L', 'T', 'E', 'R', + 'P', 'U', 'A', 'C', 'H', 'U', 'E', + 'P', 'U', 'N', 'C', 'T', 'U', 'S', + 'P', 'U', 'N', 'G', 'A', 'A', 'M', + 'P', 'U', 'R', 'N', 'A', 'M', 'A', + 'P', 'U', 'S', 'H', 'I', 'N', 'G', + 'P', 'U', 'S', 'H', 'P', 'I', 'N', + 'P', 'U', 'T', 'N', 'A', 'Y', 'A', + 'Q', 'U', 'A', 'R', 'T', 'E', 'R', + 'Q', 'U', 'D', 'D', 'I', 'S', 'A', + 'R', 'A', '-', 'K', 'A', 'R', 'A', + 'R', 'A', 'C', 'C', 'O', 'O', 'N', + 'R', 'A', 'C', 'Q', 'U', 'E', 'T', + 'R', 'A', 'D', 'I', 'C', 'A', 'L', + 'R', 'A', 'I', 'L', 'W', 'A', 'Y', + 'R', 'A', 'I', 'N', 'B', 'O', 'W', + 'R', 'A', 'I', 'S', 'I', 'N', 'G', + 'R', 'A', 'K', 'H', 'A', 'N', 'G', + 'R', 'A', 'P', 'I', 'S', 'M', 'A', + 'R', 'A', 'S', 'W', 'A', 'D', 'I', + 'R', 'A', 'Y', 'A', 'N', 'N', 'A', + 'R', 'A', 'Z', 'S', 'E', 'K', 'A', + 'R', 'E', 'A', 'D', 'I', 'N', 'G', + 'R', 'E', 'A', 'H', 'M', 'U', 'K', + 'R', 'E', 'A', 'L', 'G', 'A', 'R', + 'R', 'E', 'C', 'E', 'I', 'P', 'T', + 'R', 'E', 'G', 'I', 'A', '-', '2', + 'R', 'E', 'G', 'U', 'L', 'U', 'S', + 'R', 'E', 'L', 'A', 'X', 'E', 'D', + 'R', 'E', 'L', 'E', 'A', 'S', 'E', + 'R', 'E', 'R', 'E', 'K', 'A', 'N', + 'R', 'E', 'T', 'R', 'E', 'A', 'T', + 'R', 'E', 'V', 'E', 'R', 'S', 'E', + 'R', 'G', 'Y', 'I', 'N', 'G', 'S', + 'R', 'I', 'N', 'G', 'I', 'N', 'G', + 'R', 'I', 'T', 'T', 'O', 'R', 'U', + 'R', 'O', 'A', 'S', 'T', 'E', 'D', + 'R', 'O', 'L', 'L', 'I', 'N', 'G', + 'R', 'O', 'O', 'S', 'T', 'E', 'R', + 'R', 'O', 'S', 'E', 'T', 'T', 'E', + 'R', 'O', 'T', 'A', 'T', 'E', 'D', + 'R', 'O', 'T', 'U', 'N', 'D', 'A', + 'R', 'O', 'U', 'N', 'D', 'E', 'D', + 'R', 'O', 'W', 'B', 'O', 'A', 'T', + 'R', 'U', 'N', 'N', 'I', 'N', 'G', + 'R', 'U', 'S', 'S', 'I', 'A', 'N', + 'R', 'U', 'U', 'B', 'U', 'R', 'U', + 'S', 'A', 'I', 'K', 'U', 'R', 'U', + 'S', 'A', 'K', 'E', 'U', 'A', 'E', + 'S', 'A', 'L', 'T', 'I', 'R', 'E', + 'S', 'A', 'M', 'P', 'H', 'A', 'O', + 'S', 'A', 'N', 'Y', 'A', 'K', 'A', + 'S', 'A', 'T', 'A', 'N', 'G', 'A', + 'S', 'A', 'T', 'C', 'H', 'E', 'L', + 'S', 'A', 'T', 'K', 'A', 'A', 'N', + 'S', 'A', 'Y', 'A', 'N', 'N', 'A', + 'S', 'C', 'E', 'P', 'T', 'E', 'R', + 'S', 'C', 'H', 'O', 'L', 'A', 'R', + 'S', 'C', 'O', 'O', 'T', 'E', 'R', + 'S', 'C', 'R', 'U', 'P', 'L', 'E', + 'S', 'E', 'A', 'G', 'U', 'L', 'L', + 'S', 'E', 'C', 'T', 'I', 'O', 'N', + 'S', 'E', 'G', 'M', 'E', 'N', 'T', + 'S', 'E', 'M', 'K', 'A', 'T', 'H', + 'S', 'E', 'R', 'I', 'O', 'U', 'S', + 'S', 'E', 'R', 'V', 'I', 'C', 'E', + 'S', 'E', 'U', 'N', 'Y', 'A', 'M', + 'S', 'E', 'V', 'E', 'N', 'T', 'H', + 'S', 'E', 'V', 'E', 'N', 'T', 'Y', + 'S', 'E', 'X', 'T', 'A', 'N', 'S', + 'S', 'E', 'X', 'T', 'I', 'L', 'E', + 'S', 'E', 'X', 'T', 'U', 'L', 'A', + 'S', 'H', 'A', 'K', 'I', 'N', 'G', + 'S', 'H', 'A', 'L', 'L', 'O', 'W', + 'S', 'H', 'A', 'P', 'I', 'N', 'G', + 'S', 'H', 'A', 'R', 'A', 'D', 'A', + 'S', 'H', 'A', 'V', 'I', 'A', 'N', + 'S', 'H', 'C', 'H', 'O', 'O', 'I', + 'S', 'H', 'E', 'S', 'H', 'I', 'G', + 'S', 'H', 'E', 'U', 'A', 'E', 'Q', + 'S', 'H', 'O', 'C', 'K', 'E', 'D', + 'S', 'H', 'T', 'A', 'P', 'I', 'C', + 'S', 'H', 'U', 'F', 'F', 'L', 'E', + 'S', 'I', 'D', 'D', 'H', 'A', 'M', + 'S', 'I', 'G', 'M', 'O', 'I', 'D', + 'S', 'I', 'L', 'I', 'Q', 'U', 'A', + 'S', 'I', 'M', 'I', 'L', 'A', 'R', + 'S', 'I', 'N', 'G', 'A', 'A', 'T', + 'S', 'I', 'N', 'H', 'A', 'L', 'A', + 'S', 'I', 'N', 'K', 'I', 'N', 'G', + 'S', 'I', 'R', 'I', 'N', 'G', 'U', + 'S', 'I', 'X', 'T', 'E', 'E', 'N', + 'S', 'K', 'L', 'I', 'R', 'O', 'N', + 'S', 'L', 'A', 'N', 'T', 'E', 'D', + 'S', 'L', 'I', 'D', 'I', 'N', 'G', + 'S', 'L', 'O', 'P', 'I', 'N', 'G', + 'S', 'M', 'A', 'L', 'L', 'E', 'R', + 'S', 'M', 'I', 'L', 'I', 'N', 'G', + 'S', 'M', 'O', 'K', 'I', 'N', 'G', + 'S', 'N', 'O', 'W', 'M', 'A', 'N', + 'S', 'O', 'C', 'I', 'E', 'T', 'Y', + 'S', 'O', 'G', 'D', 'I', 'A', 'N', + 'S', 'O', 'L', 'D', 'I', 'E', 'R', + 'S', 'O', 'L', 'I', 'D', 'U', 'S', + 'S', 'O', 'M', 'P', 'E', 'N', 'G', + 'S', 'O', 'Y', 'O', 'M', 'B', 'O', + 'S', 'P', 'A', 'C', 'I', 'N', 'G', + 'S', 'P', 'A', 'R', 'K', 'L', 'E', + 'S', 'P', 'E', 'A', 'K', 'E', 'R', + 'S', 'P', 'E', 'C', 'I', 'A', 'L', + 'S', 'P', 'E', 'C', 'K', 'L', 'E', + 'S', 'P', 'I', 'D', 'E', 'R', 'Y', + 'S', 'P', 'I', 'R', 'A', 'N', 'T', + 'S', 'P', 'L', 'A', 'Y', 'E', 'D', + 'S', 'P', 'R', 'I', 'N', 'G', 'S', + 'S', 'Q', 'U', 'A', 'R', 'E', 'D', + 'S', 'Q', 'U', 'A', 'R', 'E', 'S', + 'S', 'Q', 'U', 'E', 'E', 'Z', 'E', + 'S', 'T', 'A', 'C', 'K', 'E', 'D', + 'S', 'T', 'A', 'D', 'I', 'U', 'M', + 'S', 'T', 'A', 'M', 'P', 'E', 'D', + 'S', 'T', 'A', 'R', 'R', 'E', 'D', + 'S', 'T', 'A', 'T', 'E', 'R', 'S', + 'S', 'T', 'A', 'T', 'I', 'O', 'N', + 'S', 'T', 'A', 'U', 'R', 'O', 'S', + 'S', 'T', 'A', 'V', 'R', 'O', 'S', + 'S', 'T', 'A', 'V', 'R', 'O', 'U', + 'S', 'T', 'E', 'M', '-', '1', '2', + 'S', 'T', 'E', 'M', '-', '2', '3', + 'S', 'T', 'E', 'M', '-', '3', '4', + 'S', 'T', 'E', 'M', '-', '4', '5', + 'S', 'T', 'I', 'R', 'R', 'U', 'P', + 'S', 'T', 'R', 'A', 'N', 'N', 'O', + 'S', 'T', 'R', 'A', 'T', 'U', 'M', + 'S', 'T', 'R', 'E', 'T', 'C', 'H', + 'S', 'T', 'R', 'I', 'P', 'E', 'D', + 'S', 'T', 'R', 'O', 'K', 'E', 'S', + 'S', 'T', 'U', 'F', 'F', 'E', 'D', + 'S', 'U', 'B', 'J', 'E', 'C', 'T', + 'S', 'U', 'B', 'U', 'N', 'I', 'T', + 'S', 'U', 'C', 'C', 'E', 'E', 'D', + 'S', 'U', 'C', 'K', 'I', 'N', 'G', + 'S', 'U', 'N', 'R', 'I', 'S', 'E', + 'S', 'U', 'N', 'U', 'W', 'A', 'R', + 'S', 'U', 'R', 'F', 'A', 'C', 'E', + 'S', 'V', 'A', 'R', 'I', 'T', 'A', + 'S', 'W', 'I', 'M', 'M', 'E', 'R', + 'S', 'Y', 'M', 'B', 'O', 'L', 'S', + 'S', 'Y', 'N', 'A', 'G', 'M', 'A', + 'S', 'Y', 'N', 'E', 'V', 'M', 'A', + 'S', 'Y', 'R', 'I', 'N', 'G', 'E', + 'T', '-', 'S', 'H', 'I', 'R', 'T', + 'T', 'A', 'A', 'A', 'L', 'A', 'A', + 'T', 'A', 'A', 'L', 'U', 'J', 'A', + 'T', 'A', 'A', 'S', 'H', 'A', 'E', + 'T', 'A', 'G', 'A', 'L', 'O', 'G', + 'T', 'A', 'I', 'S', 'Y', 'O', 'U', + 'T', 'A', 'K', 'E', 'O', 'U', 'T', + 'T', 'A', 'L', 'E', 'N', 'T', 'S', + 'T', 'A', 'N', 'G', 'E', 'N', 'T', + 'T', 'A', 'S', 'H', 'E', 'E', 'L', + 'T', 'A', 'T', 'W', 'E', 'E', 'L', + 'T', 'A', 'Y', 'A', 'N', 'N', 'A', + 'T', 'C', 'H', 'E', 'H', 'E', 'H', + 'T', 'E', 'L', 'I', 'S', 'H', 'A', + 'T', 'E', 'S', 'S', 'E', 'R', 'A', + 'T', 'E', 'U', 'T', 'E', 'U', 'X', + 'T', 'H', '-', 'C', 'R', 'E', 'E', + 'T', 'H', 'A', 'M', 'E', 'D', 'H', + 'T', 'H', 'E', 'S', 'E', 'O', 'S', + 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'T', 'H', 'O', 'U', 'G', 'H', 'T', + 'T', 'H', 'R', 'E', 'E', '-', 'D', + 'T', 'H', 'R', 'O', 'U', 'G', 'H', + 'T', 'H', 'U', 'N', 'D', 'E', 'R', + 'T', 'I', 'B', 'E', 'T', 'A', 'N', + 'T', 'I', 'C', 'K', 'E', 'T', 'S', + 'T', 'I', 'K', 'H', 'A', 'Y', 'A', + 'T', 'I', 'L', 'T', 'I', 'N', 'G', + 'T', 'I', 'N', 'A', 'G', 'M', 'A', + 'T', 'I', 'R', 'H', 'U', 'T', 'A', + 'T', 'I', 'T', 'U', 'A', 'E', 'P', + 'T', 'O', 'O', 'L', 'B', 'O', 'X', + 'T', 'O', 'R', 'N', 'A', 'D', 'O', + 'T', 'O', 'U', 'C', 'H', 'E', 'S', + 'T', 'O', 'W', 'A', 'R', 'D', 'S', + 'T', 'R', 'A', 'C', 'T', 'O', 'R', + 'T', 'R', 'A', 'F', 'F', 'I', 'C', + 'T', 'R', 'A', 'M', 'W', 'A', 'Y', + 'T', 'R', 'I', 'D', 'E', 'N', 'T', + 'T', 'R', 'I', 'G', 'R', 'A', 'M', + 'T', 'R', 'I', 'I', 'S', 'A', 'P', + 'T', 'R', 'I', 'S', 'E', 'M', 'E', + 'T', 'R', 'I', 'U', 'M', 'P', 'H', + 'T', 'R', 'O', 'L', 'L', 'E', 'Y', + 'T', 'R', 'U', 'M', 'P', '-', '1', + 'T', 'R', 'U', 'M', 'P', '-', '2', + 'T', 'R', 'U', 'M', 'P', '-', '3', + 'T', 'R', 'U', 'M', 'P', '-', '4', + 'T', 'R', 'U', 'M', 'P', '-', '5', + 'T', 'R', 'U', 'M', 'P', '-', '6', + 'T', 'R', 'U', 'M', 'P', '-', '7', + 'T', 'R', 'U', 'M', 'P', '-', '8', + 'T', 'R', 'U', 'M', 'P', '-', '9', + 'T', 'R', 'U', 'M', 'P', 'E', 'T', + 'T', 'R', 'Y', 'A', 'S', 'K', 'A', + 'T', 'S', 'A', 'A', 'D', 'I', 'Y', + 'T', 'T', 'U', 'D', 'D', 'A', 'G', + 'T', 'U', 'M', 'B', 'L', 'E', 'R', + 'T', 'U', 'M', 'E', 'T', 'E', 'S', + 'T', 'U', 'R', 'K', 'I', 'S', 'H', + 'T', 'W', 'E', 'L', 'F', 'T', 'H', + 'T', 'W', 'I', 'S', 'T', 'E', 'D', + 'T', 'W', 'O', '-', 'W', 'A', 'Y', + 'U', '-', 'E', 'O', '-', 'E', 'U', + 'U', 'B', 'A', 'D', 'A', 'M', 'A', + 'U', 'B', 'U', 'F', 'I', 'L', 'I', + 'U', 'N', 'I', 'C', 'O', 'R', 'N', + 'U', 'N', 'I', 'F', 'I', 'E', 'D', + 'U', 'N', 'I', 'F', 'O', 'R', 'M', + 'U', 'N', 'K', 'N', 'O', 'W', 'N', + 'U', 'P', 'R', 'I', 'G', 'H', 'T', + 'U', 'P', 'S', 'I', 'L', 'O', 'N', + 'U', 'P', 'W', 'A', 'R', 'D', 'S', + 'U', 'S', 'H', 'E', 'N', 'N', 'A', + 'U', 'U', 'Y', 'A', 'N', 'N', 'A', + 'U', 'Z', 'H', 'A', 'K', 'K', 'U', + 'V', 'A', 'M', 'P', 'I', 'R', 'E', + 'V', 'A', 'P', 'O', 'U', 'R', 'S', + 'V', 'A', 'R', 'E', 'I', 'A', 'I', + 'V', 'A', 'R', 'I', 'A', 'N', 'T', + 'V', 'A', 'Y', 'A', 'N', 'N', 'A', + 'V', 'E', 'H', 'I', 'C', 'L', 'E', + 'V', 'I', 'C', 'T', 'O', 'R', 'Y', + 'V', 'I', 'E', 'W', 'I', 'N', 'G', + 'V', 'I', 'L', 'L', 'A', 'G', 'E', + 'V', 'I', 'N', 'E', 'G', 'A', 'R', + 'V', 'I', 'S', 'A', 'R', 'G', 'A', + 'V', 'I', 'T', 'A', 'E', '-', '2', + 'V', 'I', 'T', 'R', 'I', 'O', 'L', + 'V', 'O', 'C', 'A', 'L', 'I', 'C', + 'V', 'O', 'I', 'C', 'I', 'N', 'G', + 'V', 'O', 'L', 'A', 'P', 'U', 'K', + 'V', 'O', 'L', 'C', 'A', 'N', 'O', + 'V', 'O', 'L', 'T', 'A', 'G', 'E', + 'W', 'A', 'I', 'T', 'I', 'N', 'G', + 'W', 'A', 'R', 'N', 'I', 'N', 'G', + 'W', 'A', 'S', 'T', 'I', 'N', 'G', + 'W', 'E', 'D', 'D', 'I', 'N', 'G', + 'W', 'E', 'S', 'T', 'E', 'R', 'N', + 'W', 'H', 'E', 'E', 'L', 'E', 'D', + 'W', 'I', 'G', 'G', 'L', 'E', 'S', + 'W', 'I', 'G', 'N', 'Y', 'A', 'N', + 'W', 'I', 'N', 'K', 'I', 'N', 'G', + 'W', 'I', 'T', 'H', 'O', 'U', 'T', + 'W', 'O', 'R', 'R', 'I', 'E', 'D', + 'W', 'O', 'R', 'S', 'H', 'I', 'P', + 'W', 'R', 'A', 'P', 'P', 'E', 'D', + 'W', 'R', 'I', 'T', 'I', 'N', 'G', + 'X', 'I', 'A', 'N', 'G', 'Q', 'I', + 'Y', 'A', 'E', 'M', 'M', 'A', 'E', + 'Y', 'A', 'W', 'N', 'I', 'N', 'G', + 'Y', 'A', 'Y', 'A', 'N', 'N', 'A', + 'Y', 'E', 'N', 'I', 'S', 'E', 'I', + 'Y', 'I', 'D', 'D', 'I', 'S', 'H', + 'Y', 'P', 'O', 'R', 'R', 'O', 'I', + 'Z', 'H', 'I', 'V', 'E', 'T', 'E', + 'Z', 'M', 'E', 'Y', 'T', 'S', 'A', + 'A', '1', '0', '0', '-', '1', '0', '2', + 'A', '4', '0', '0', '-', 'V', 'A', 'S', + 'A', '4', '0', '1', '-', 'V', 'A', 'S', + 'A', '4', '0', '2', '-', 'V', 'A', 'S', + 'A', '4', '0', '3', '-', 'V', 'A', 'S', + 'A', '4', '0', '4', '-', 'V', 'A', 'S', + 'A', '4', '0', '5', '-', 'V', 'A', 'S', + 'A', '4', '0', '6', '-', 'V', 'A', 'S', + 'A', '4', '0', '7', '-', 'V', 'A', 'S', + 'A', '4', '0', '8', '-', 'V', 'A', 'S', + 'A', '4', '0', '9', '-', 'V', 'A', 'S', + 'A', '4', '1', '0', '-', 'V', 'A', 'S', + 'A', '4', '1', '1', '-', 'V', 'A', 'S', + 'A', '4', '1', '2', '-', 'V', 'A', 'S', + 'A', '4', '1', '3', '-', 'V', 'A', 'S', + 'A', '4', '1', '4', '-', 'V', 'A', 'S', + 'A', '4', '1', '5', '-', 'V', 'A', 'S', + 'A', '4', '1', '6', '-', 'V', 'A', 'S', + 'A', '4', '1', '7', '-', 'V', 'A', 'S', + 'A', '4', '1', '8', '-', 'V', 'A', 'S', + 'A', 'C', 'T', 'I', 'V', 'A', 'T', 'E', + 'A', 'C', 'T', 'U', 'A', 'L', 'L', 'Y', + 'A', 'D', 'H', 'E', 'S', 'I', 'V', 'E', + 'A', 'E', 'E', 'Y', 'A', 'N', 'N', 'A', + 'A', 'I', 'R', 'P', 'L', 'A', 'N', 'E', + 'A', 'K', 'H', 'M', 'I', 'M', 'I', 'C', + 'A', 'L', 'B', 'A', 'N', 'I', 'A', 'N', + 'A', 'L', 'K', 'A', 'L', 'I', '-', '2', + 'A', 'L', 'L', 'I', 'A', 'N', 'C', 'E', + 'A', 'L', 'V', 'E', 'O', 'L', 'A', 'R', + 'A', 'M', 'E', 'R', 'I', 'C', 'A', 'N', + 'A', 'M', 'E', 'R', 'I', 'C', 'A', 'S', + 'A', 'N', 'G', 'S', 'T', 'R', 'O', 'M', + 'A', 'N', 'T', 'I', 'M', 'O', 'N', 'Y', + 'A', 'N', 'U', 'D', 'A', 'T', 'T', 'A', + 'A', 'N', 'U', 'S', 'V', 'A', 'R', 'A', + 'A', 'P', 'E', 'R', 'T', 'U', 'R', 'E', + 'A', 'P', 'O', 'D', 'E', 'R', 'M', 'A', + 'A', 'P', 'O', 'D', 'E', 'X', 'I', 'A', + 'A', 'P', 'O', 'T', 'H', 'E', 'M', 'A', + 'A', 'P', 'P', 'R', 'O', 'A', 'C', 'H', + 'A', 'Q', 'U', 'A', 'R', 'I', 'U', 'S', + 'A', 'R', 'A', 'E', 'A', '-', 'E', 'O', + 'A', 'R', 'C', 'H', 'A', 'I', 'O', 'N', + 'A', 'R', 'G', 'O', 'T', 'E', 'R', 'I', + 'A', 'R', 'I', 'S', 'T', 'E', 'R', 'A', + 'A', 'R', 'M', 'E', 'N', 'I', 'A', 'N', + 'A', 'R', 'O', 'U', 'S', 'I', 'N', 'G', + 'A', 'R', 'R', 'I', 'V', 'I', 'N', 'G', + 'A', 'S', '-', 'S', 'A', 'J', 'D', 'A', + 'A', 'S', 'S', 'A', 'L', 'L', 'A', 'M', + 'A', 'S', 'S', 'Y', 'R', 'I', 'A', 'N', + 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'K', + 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'M', + 'A', 'T', 'H', 'L', 'E', 'T', 'I', 'C', + 'A', 'T', 'I', 'K', 'R', 'A', 'M', 'A', + 'A', 'T', 'T', 'A', 'C', 'H', 'E', 'D', + 'A', 'T', 'T', 'H', 'A', 'C', 'A', 'N', + 'A', 'V', 'A', 'G', 'R', 'A', 'H', 'A', + 'B', 'A', 'C', 'K', 'H', 'A', 'N', 'D', + 'B', 'A', 'C', 'T', 'R', 'I', 'A', 'N', + 'B', 'A', 'G', 'U', 'E', 'T', 'T', 'E', + 'B', 'A', 'L', 'I', 'N', 'E', 'S', 'E', + 'B', 'A', 'N', 'K', 'N', 'O', 'T', 'E', + 'B', 'A', 'S', 'E', 'B', 'A', 'L', 'L', + 'B', 'A', 'S', 'E', 'L', 'I', 'N', 'E', + 'B', 'A', 'S', 'S', 'I', 'N', 'E', 'T', + 'B', 'E', 'G', 'I', 'N', 'N', 'E', 'R', + 'B', 'E', 'L', 'G', 'T', 'H', 'O', 'R', + 'B', 'E', 'R', 'K', 'A', 'N', 'A', 'N', + 'B', 'E', 'V', 'E', 'R', 'A', 'G', 'E', + 'B', 'I', 'C', 'Y', 'C', 'L', 'E', 'S', + 'B', 'I', 'D', 'E', 'N', 'T', 'A', 'L', + 'B', 'I', 'L', 'A', 'B', 'I', 'A', 'L', + 'B', 'I', 'L', 'L', 'I', 'O', 'N', 'S', + 'B', 'I', 'N', 'O', 'V', 'I', 'L', 'E', + 'B', 'I', 'R', 'T', 'H', 'D', 'A', 'Y', + 'B', 'L', 'O', 'W', 'F', 'I', 'S', 'H', + 'B', 'O', 'H', 'A', 'I', 'R', 'I', 'C', + 'B', 'O', 'O', 'K', 'M', 'A', 'R', 'K', + 'B', 'O', 'P', 'O', 'M', 'O', 'F', 'O', + 'B', 'O', 'U', 'N', 'D', 'A', 'R', 'Y', + 'B', 'R', 'A', 'C', 'K', 'E', 'T', 'S', + 'B', 'R', 'A', 'N', 'C', 'H', 'E', 'S', + 'B', 'R', 'O', 'C', 'C', 'O', 'L', 'I', + 'B', 'U', 'G', 'I', 'N', 'E', 'S', 'E', + 'B', 'U', 'I', 'L', 'D', 'I', 'N', 'G', + 'B', 'U', 'L', 'L', 'H', 'O', 'R', 'N', + 'B', 'U', 'L', 'L', 'S', 'E', 'Y', 'E', + 'B', 'U', 'S', 'I', 'N', 'E', 'S', 'S', + 'B', 'U', 'S', 'S', 'Y', 'E', 'R', 'U', + 'C', 'A', 'B', 'L', 'E', 'W', 'A', 'Y', + 'C', 'A', 'D', 'U', 'C', 'E', 'U', 'S', + 'C', 'A', 'L', 'E', 'N', 'D', 'A', 'R', + 'C', 'A', 'N', 'A', 'D', 'I', 'A', 'N', + 'C', 'A', 'R', 'O', 'U', 'S', 'E', 'L', + 'C', 'A', 'R', 'R', 'I', 'A', 'G', 'E', + 'C', 'A', 'U', 'L', 'D', 'R', 'O', 'N', + 'C', 'E', 'R', 'E', 'M', 'O', 'N', 'Y', + 'C', 'H', 'A', 'M', 'I', 'L', 'O', 'N', + 'C', 'H', 'A', 'T', 'T', 'A', 'W', 'A', + 'C', 'H', 'E', 'E', 'R', 'I', 'N', 'G', + 'C', 'H', 'E', 'I', 'K', 'H', 'A', 'N', + 'C', 'H', 'E', 'I', 'K', 'H', 'E', 'I', + 'C', 'H', 'E', 'R', 'O', 'K', 'E', 'E', + 'C', 'H', 'E', 'R', 'R', 'I', 'E', 'S', + 'C', 'H', 'E', 'S', 'T', 'N', 'U', 'T', + 'C', 'H', 'I', 'L', 'D', 'R', 'E', 'N', + 'C', 'H', 'I', 'P', 'M', 'U', 'N', 'K', + 'C', 'H', 'O', 'R', 'E', 'V', 'M', 'A', + 'C', 'H', 'O', 'S', 'E', 'O', 'N', 'G', + 'C', 'I', 'N', 'N', 'A', 'B', 'A', 'R', + 'C', 'I', 'R', 'C', 'L', 'I', 'N', 'G', + 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'R', + 'C', 'I', 'T', 'A', 'T', 'I', 'O', 'N', + 'C', 'I', 'V', 'I', 'L', 'I', 'A', 'N', + 'C', 'L', 'A', 'P', 'P', 'I', 'N', 'G', + 'C', 'L', 'I', 'M', 'A', 'C', 'U', 'S', + 'C', 'L', 'I', 'M', 'B', 'I', 'N', 'G', + 'C', 'L', 'I', 'N', 'G', 'I', 'N', 'G', + 'C', 'L', 'I', 'N', 'K', 'I', 'N', 'G', + 'C', 'O', 'C', 'K', 'T', 'A', 'I', 'L', + 'C', 'O', 'M', 'B', 'I', 'N', 'E', 'D', + 'C', 'O', 'M', 'P', 'U', 'T', 'E', 'R', + 'C', 'O', 'N', 'F', 'E', 'T', 'T', 'I', + 'C', 'O', 'N', 'F', 'L', 'I', 'C', 'T', + 'C', 'O', 'N', 'F', 'U', 'S', 'E', 'D', + 'C', 'O', 'N', 'S', 'T', 'A', 'N', 'T', + 'C', 'O', 'N', 'T', 'A', 'I', 'N', 'S', + 'C', 'O', 'P', 'P', 'E', 'R', '-', '2', + 'C', 'O', 'P', 'Y', 'L', 'E', 'F', 'T', + 'C', 'O', 'U', 'N', 'T', 'I', 'N', 'G', + 'C', 'O', 'V', 'E', 'R', 'I', 'N', 'G', + 'C', 'R', 'E', 'A', 'T', 'I', 'V', 'E', + 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'T', + 'C', 'R', 'O', 'S', 'S', 'B', 'A', 'R', + 'C', 'R', 'O', 'S', 'S', 'I', 'N', 'G', + 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', + 'C', 'R', 'U', 'Z', 'E', 'I', 'R', 'O', + 'C', 'U', 'C', 'U', 'M', 'B', 'E', 'R', + 'C', 'U', 'R', 'L', 'I', 'C', 'U', 'E', + 'C', 'U', 'R', 'R', 'E', 'N', 'C', 'Y', + 'C', 'U', 'S', 'T', 'O', 'M', 'E', 'R', + 'C', 'Y', 'R', 'E', 'N', 'A', 'I', 'C', + 'C', 'Y', 'R', 'I', 'L', 'L', 'I', 'C', + 'D', 'A', 'M', 'M', 'A', 'T', 'A', 'N', + 'D', 'A', 'P', '-', 'B', 'U', 'O', 'N', + 'D', 'A', 'P', '-', 'M', 'U', 'O', 'Y', + 'D', 'A', 'P', '-', 'P', 'R', 'A', 'M', + 'D', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'D', 'D', 'A', 'Y', 'A', 'N', 'N', 'A', + 'D', 'E', 'C', 'E', 'M', 'B', 'E', 'R', + 'D', 'E', 'C', 'R', 'E', 'A', 'S', 'E', + 'D', 'E', 'L', 'E', 'T', 'I', 'O', 'N', + 'D', 'E', 'L', 'I', 'V', 'E', 'R', 'Y', + 'D', 'E', 'N', 'A', 'R', 'I', 'U', 'S', + 'D', 'E', 'R', 'B', 'I', 'T', 'S', 'A', + 'D', 'E', 'R', 'E', 'L', 'I', 'C', 'T', + 'D', 'E', 'Y', 'T', 'E', 'R', 'O', 'S', + 'D', 'E', 'Y', 'T', 'E', 'R', 'O', 'U', + 'D', 'I', 'A', 'G', 'O', 'N', 'A', 'L', + 'D', 'I', 'A', 'M', 'E', 'T', 'E', 'R', + 'D', 'I', 'A', 'M', 'O', 'N', 'D', 'S', + 'D', 'I', 'A', 'S', 'T', 'O', 'L', 'I', + 'D', 'I', 'A', 'T', 'O', 'N', 'O', 'N', + 'D', 'I', 'F', 'O', 'N', 'I', 'A', 'S', + 'D', 'I', 'G', 'O', 'R', 'G', 'O', 'N', + 'D', 'I', 'G', 'R', 'A', 'M', 'M', 'A', + 'D', 'I', 'R', 'E', 'C', 'T', 'L', 'Y', + 'D', 'I', 'S', 'A', 'B', 'L', 'E', 'D', + 'D', 'I', 'S', 'P', 'U', 'T', 'E', 'D', + 'D', 'I', 'S', 'S', 'O', 'L', 'V', 'E', + 'D', 'I', 'V', 'I', 'D', 'E', 'R', 'S', + 'D', 'I', 'V', 'I', 'S', 'I', 'O', 'N', + 'D', 'O', 'C', 'U', 'M', 'E', 'N', 'T', + 'D', 'O', 'D', 'E', 'K', 'A', 'T', 'A', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', + 'D', 'O', 'T', 'S', '-', '1', '2', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', + 'D', 'O', 'T', 'S', '-', '1', '3', '6', + 'D', 'O', 'T', 'S', '-', '1', '3', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', + 'D', 'O', 'T', 'S', '-', '1', '4', '6', + 'D', 'O', 'T', 'S', '-', '1', '4', '7', + 'D', 'O', 'T', 'S', '-', '1', '4', '8', + 'D', 'O', 'T', 'S', '-', '1', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', + 'D', 'O', 'T', 'S', '-', '2', '3', '6', + 'D', 'O', 'T', 'S', '-', '2', '3', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', + 'D', 'O', 'T', 'S', '-', '2', '4', '6', + 'D', 'O', 'T', 'S', '-', '2', '4', '7', + 'D', 'O', 'T', 'S', '-', '2', '4', '8', + 'D', 'O', 'T', 'S', '-', '2', '5', '6', + 'D', 'O', 'T', 'S', '-', '2', '5', '7', + 'D', 'O', 'T', 'S', '-', '2', '5', '8', + 'D', 'O', 'T', 'S', '-', '2', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', + 'D', 'O', 'T', 'S', '-', '3', '4', '6', + 'D', 'O', 'T', 'S', '-', '3', '4', '7', + 'D', 'O', 'T', 'S', '-', '3', '4', '8', + 'D', 'O', 'T', 'S', '-', '3', '5', '6', + 'D', 'O', 'T', 'S', '-', '3', '5', '7', + 'D', 'O', 'T', 'S', '-', '3', '5', '8', + 'D', 'O', 'T', 'S', '-', '3', '6', '7', + 'D', 'O', 'T', 'S', '-', '3', '6', '8', + 'D', 'O', 'T', 'S', '-', '3', '7', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '6', '7', '8', + 'D', 'O', 'T', 'T', 'E', 'D', '-', 'L', + 'D', 'O', 'T', 'T', 'E', 'D', '-', 'N', + 'D', 'O', 'T', 'T', 'E', 'D', '-', 'P', + 'D', 'O', 'U', 'G', 'H', 'N', 'U', 'T', + 'D', 'O', 'W', 'N', 'W', 'A', 'R', 'D', + 'D', 'R', 'A', 'C', 'H', 'M', 'A', 'S', + 'D', 'R', 'A', 'F', 'T', 'I', 'N', 'G', + 'D', 'R', 'A', 'U', 'G', 'H', 'T', 'S', + 'D', 'R', 'A', 'W', 'I', 'N', 'G', 'S', + 'D', 'R', 'O', 'O', 'L', 'I', 'N', 'G', + 'D', 'U', 'M', 'P', 'L', 'I', 'N', 'G', + 'D', 'U', 'P', 'L', 'O', 'Y', 'A', 'N', + 'D', 'U', 'R', 'A', 'T', 'I', 'O', 'N', + 'D', 'U', 'S', 'H', 'E', 'N', 'N', 'A', + 'D', 'V', 'I', 'S', 'V', 'A', 'R', 'A', + 'E', 'G', 'Y', 'P', 'T', 'I', 'A', 'N', + 'E', 'I', 'G', 'H', 'T', 'E', 'E', 'N', + 'E', 'L', 'E', 'C', 'T', 'R', 'I', 'C', + 'E', 'L', 'E', 'P', 'H', 'A', 'N', 'T', + 'E', 'L', 'E', 'V', 'A', 'T', 'O', 'R', + 'E', 'L', 'E', 'V', 'A', 'T', 'U', 'S', + 'E', 'L', 'L', 'I', 'P', 'S', 'I', 'S', + 'E', 'L', 'L', 'I', 'P', 'T', 'I', 'C', + 'E', 'M', 'P', 'H', 'A', 'S', 'I', 'S', + 'E', 'M', 'P', 'H', 'A', 'T', 'I', 'C', + 'E', 'N', 'T', 'E', 'R', 'I', 'N', 'G', + 'E', 'N', 'V', 'E', 'L', 'O', 'P', 'E', + 'E', 'P', 'E', 'G', 'E', 'R', 'M', 'A', + 'E', 'S', 'U', 'K', 'U', 'U', 'D', 'O', + 'E', 'T', 'E', 'R', 'N', 'I', 'T', 'Y', + 'E', 'T', 'H', 'I', 'O', 'P', 'I', 'C', + 'E', 'U', 'R', 'O', 'P', 'E', 'A', 'N', + 'E', 'X', 'C', 'H', 'A', 'N', 'G', 'E', + 'E', 'X', 'P', 'O', 'N', 'E', 'N', 'T', + 'E', 'X', 'T', 'E', 'N', 'D', 'E', 'D', + 'E', 'Y', 'E', 'B', 'R', 'O', 'W', 'S', + 'F', 'A', 'T', 'H', 'A', 'T', 'A', 'N', + 'F', 'E', 'B', 'R', 'U', 'A', 'R', 'Y', + 'F', 'E', 'M', 'I', 'N', 'I', 'N', 'E', + 'F', 'E', 'S', 'T', 'I', 'V', 'A', 'L', + 'F', 'I', 'G', 'U', 'R', 'E', '-', '1', + 'F', 'I', 'G', 'U', 'R', 'E', '-', '2', + 'F', 'I', 'G', 'U', 'R', 'E', '-', '3', + 'F', 'I', 'L', 'L', 'E', 'R', '-', '1', + 'F', 'I', 'L', 'L', 'E', 'R', '-', '2', + 'F', 'I', 'N', 'G', 'E', 'R', 'E', 'D', + 'F', 'I', 'R', 'E', 'W', 'O', 'R', 'K', + 'F', 'I', 'S', 'H', 'H', 'O', 'O', 'K', + 'F', 'L', 'A', 'I', 'L', 'I', 'N', 'G', + 'F', 'L', 'A', 'M', 'I', 'N', 'G', 'O', + 'F', 'L', 'A', 'P', 'P', 'I', 'N', 'G', + 'F', 'L', 'A', 'T', 'N', 'E', 'S', 'S', + 'F', 'L', 'O', 'R', 'E', 'T', 'T', 'E', + 'F', 'L', 'O', 'U', 'R', 'I', 'S', 'H', + 'F', 'O', 'O', 'T', 'B', 'A', 'L', 'L', + 'F', 'O', 'O', 'T', 'N', 'O', 'T', 'E', + 'F', 'O', 'R', 'E', 'H', 'E', 'A', 'D', + 'F', 'O', 'R', 'T', 'I', 'E', 'T', 'H', + 'F', 'O', 'U', 'N', 'T', 'A', 'I', 'N', + 'F', 'O', 'U', 'R', 'T', 'E', 'E', 'N', + 'F', 'R', 'A', 'C', 'T', 'I', 'O', 'N', + 'F', 'R', 'A', 'G', 'M', 'E', 'N', 'T', + 'F', 'R', 'A', 'G', 'R', 'A', 'N', 'T', + 'F', 'R', 'E', 'E', 'Z', 'I', 'N', 'G', + 'F', 'R', 'O', 'W', 'N', 'I', 'N', 'G', + 'F', 'U', 'L', 'L', 'N', 'E', 'S', 'S', + 'F', 'U', 'N', 'C', 'T', 'I', 'O', 'N', + 'G', 'A', 'R', 'S', 'H', 'U', 'N', 'I', + 'G', 'A', 'U', 'N', 'T', 'L', 'E', 'T', + 'G', 'E', 'M', 'I', 'N', 'A', 'T', 'E', + 'G', 'E', 'N', 'I', 'T', 'I', 'V', 'E', + 'G', 'E', 'O', 'R', 'G', 'I', 'A', 'N', + 'G', 'H', 'E', 'U', 'G', 'H', 'E', 'N', + 'G', 'O', 'N', 'G', 'G', 'O', 'N', 'G', + 'G', 'R', 'A', 'P', 'H', 'E', 'M', 'E', + 'G', 'R', 'I', 'N', 'N', 'I', 'N', 'G', + 'G', 'R', 'O', 'M', 'N', 'A', 'Y', 'A', + 'G', 'U', 'J', 'A', 'R', 'A', 'T', 'I', + 'G', 'U', 'R', 'M', 'U', 'K', 'H', 'I', + 'H', 'A', 'N', '-', 'A', 'K', 'A', 'T', + 'H', 'A', 'N', 'D', '-', 'C', 'U', 'P', + 'H', 'A', 'N', 'D', 'B', 'A', 'L', 'L', + 'H', 'A', 'N', 'G', 'Z', 'H', 'O', 'U', + 'H', 'A', 'R', 'B', 'A', 'H', 'A', 'Y', + 'H', 'A', 'R', 'D', 'N', 'E', 'S', 'S', + 'H', 'A', 'R', 'K', 'L', 'E', 'A', 'N', + 'H', 'A', 'R', 'M', 'O', 'N', 'I', 'C', + 'H', 'A', 'T', 'C', 'H', 'I', 'N', 'G', + 'H', 'E', 'A', 'V', 'E', 'N', 'L', 'Y', + 'H', 'E', 'D', 'G', 'E', 'H', 'O', 'G', + 'H', 'E', 'X', 'A', 'G', 'R', 'A', 'M', + 'H', 'E', 'X', 'I', 'F', 'O', 'R', 'M', + 'H', 'I', 'B', 'I', 'S', 'C', 'U', 'S', + 'H', 'I', 'G', 'H', '-', 'L', 'O', 'W', + 'H', 'I', 'R', 'A', 'G', 'A', 'N', 'A', + 'H', 'I', 'S', 'T', 'O', 'R', 'I', 'C', + 'H', 'O', 'N', 'E', 'Y', 'B', 'E', 'E', + 'H', 'O', 'S', 'P', 'I', 'T', 'A', 'L', + 'H', 'U', 'A', 'R', 'A', 'D', 'D', 'O', + 'H', 'U', 'N', 'D', 'R', 'E', 'D', 'S', + 'H', 'Y', 'A', 'C', 'I', 'N', 'T', 'H', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'M', + 'I', 'L', 'U', 'Y', 'A', 'N', 'N', 'A', + 'I', 'M', 'I', 'F', 'O', 'N', 'O', 'N', + 'I', 'M', 'P', 'E', 'R', 'I', 'A', 'L', + 'I', 'N', 'C', 'O', 'M', 'I', 'N', 'G', + 'I', 'N', 'C', 'R', 'E', 'A', 'S', 'E', + 'I', 'N', 'D', 'I', 'R', 'E', 'C', 'T', + 'I', 'N', 'D', 'U', 'C', 'T', 'O', 'R', + 'I', 'N', 'F', 'I', 'N', 'I', 'T', 'Y', + 'I', 'N', 'H', 'E', 'R', 'E', 'N', 'T', + 'I', 'N', 'T', 'E', 'G', 'R', 'A', 'L', + 'I', 'N', 'T', 'E', 'R', 'E', 'S', 'T', + 'I', 'N', 'T', 'E', 'R', 'I', 'O', 'R', + 'I', 'N', 'V', 'E', 'R', 'T', 'E', 'D', + 'I', 'O', 'T', 'I', 'F', 'I', 'E', 'D', + 'I', 'R', 'U', 'Y', 'A', 'N', 'N', 'A', + 'I', 'S', '-', 'P', 'I', 'L', 'L', 'A', + 'I', 'S', 'O', 'L', 'A', 'T', 'E', 'D', + 'J', 'A', 'P', 'A', 'N', 'E', 'S', 'E', + 'J', 'A', 'V', 'A', 'N', 'E', 'S', 'E', + 'J', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'J', 'O', 'Y', 'S', 'T', 'I', 'C', 'K', + 'J', 'U', 'G', 'G', 'L', 'I', 'N', 'G', + 'K', 'A', 'K', 'T', 'O', 'V', 'I', 'K', + 'K', 'A', 'N', 'G', 'A', 'R', 'O', 'O', + 'K', 'A', 'R', 'S', 'H', 'A', 'N', 'A', + 'K', 'A', 'S', 'H', 'M', 'I', 'R', 'I', + 'K', 'A', 'S', 'R', 'A', 'T', 'A', 'N', + 'K', 'A', 'T', 'A', 'K', 'A', 'N', 'A', + 'K', 'A', 'T', 'H', 'I', 'S', 'T', 'I', + 'K', 'E', 'Y', 'B', 'O', 'A', 'R', 'D', + 'K', 'H', 'O', 'K', 'H', 'L', 'O', 'M', + 'K', 'N', 'E', 'E', 'L', 'I', 'N', 'G', + 'K', 'N', 'U', 'C', 'K', 'L', 'E', 'S', + 'K', 'O', 'N', 'T', 'E', 'V', 'M', 'A', + 'K', 'O', 'U', 'F', 'I', 'S', 'M', 'A', + 'K', 'R', 'E', 'M', 'A', 'S', 'T', 'I', + 'L', '-', 'S', 'H', 'A', 'P', 'E', 'D', + 'L', 'A', 'C', 'R', 'O', 'S', 'S', 'E', + 'L', 'A', 'N', 'G', 'U', 'A', 'G', 'E', + 'L', 'A', 'T', 'I', 'N', 'A', 'T', 'E', + 'L', 'A', 'U', 'G', 'H', 'I', 'N', 'G', + 'L', 'E', 'A', 'F', 'L', 'E', 'S', 'S', + 'L', 'E', 'E', 'R', 'A', 'E', 'W', 'A', + 'L', 'E', 'N', 'G', 'T', 'H', '-', '1', + 'L', 'E', 'N', 'G', 'T', 'H', '-', '2', + 'L', 'E', 'N', 'G', 'T', 'H', '-', '3', + 'L', 'E', 'N', 'G', 'T', 'H', '-', '4', + 'L', 'E', 'N', 'G', 'T', 'H', '-', '5', + 'L', 'E', 'N', 'G', 'T', 'H', '-', '6', + 'L', 'E', 'N', 'G', 'T', 'H', '-', '7', + 'L', 'I', 'G', 'A', 'T', 'I', 'N', 'G', + 'L', 'I', 'G', 'A', 'T', 'U', 'R', 'E', + 'L', 'I', 'P', 'S', 'T', 'I', 'C', 'K', + 'L', 'O', 'C', 'A', 'T', 'I', 'O', 'N', + 'L', 'O', 'C', 'A', 'T', 'I', 'V', 'E', + 'L', 'O', 'G', 'O', 'G', 'R', 'A', 'M', + 'L', 'O', 'G', 'O', 'T', 'Y', 'P', 'E', + 'L', 'O', 'L', 'L', 'I', 'P', 'O', 'P', + 'L', 'O', 'R', 'R', 'A', 'I', 'N', 'E', + 'L', 'O', 'S', 'S', 'L', 'E', 'S', 'S', + 'M', 'A', 'E', 'M', 'K', 'P', 'E', 'N', + 'M', 'A', 'E', 'M', 'V', 'E', 'U', 'X', + 'M', 'A', 'H', 'A', 'J', 'A', 'N', 'I', + 'M', 'A', 'H', 'A', 'P', 'A', 'K', 'H', + 'M', 'A', 'I', 'M', 'A', 'L', 'A', 'I', + 'M', 'A', 'I', 'Y', 'A', 'M', 'O', 'K', + 'M', 'A', 'K', 'E', 'M', 'A', 'K', 'E', + 'M', 'A', 'N', 'A', 'C', 'L', 'E', 'S', + 'M', 'A', 'N', 'D', 'A', 'R', 'I', 'N', + 'M', 'A', 'N', 'G', 'A', 'L', 'A', 'M', + 'M', 'A', 'R', 'R', 'A', 'T', 'A', 'N', + 'M', 'A', 'R', 'R', 'I', 'A', 'G', 'E', + 'M', 'A', 'R', 'R', 'Y', 'I', 'N', 'G', + 'M', 'A', 'R', 'T', 'Y', 'R', 'I', 'A', + 'M', 'A', 'S', 'H', 'F', 'A', 'A', 'T', + 'M', 'A', 'X', 'I', 'M', 'I', 'Z', 'E', + 'M', 'B', 'E', 'E', 'K', 'E', 'E', 'T', + 'M', 'B', 'I', 'R', 'I', 'E', 'E', 'N', + 'M', 'E', 'A', 'S', 'U', 'R', 'E', 'D', + 'M', 'E', 'D', 'I', 'C', 'I', 'N', 'E', + 'M', 'E', 'D', 'I', 'E', 'V', 'A', 'L', + 'M', 'E', 'M', '-', 'Q', 'O', 'P', 'H', + 'M', 'E', 'R', 'O', 'I', 'T', 'I', 'C', + 'M', 'E', 'T', 'R', 'E', 'T', 'E', 'S', + 'M', 'E', 'T', 'R', 'I', 'C', 'A', 'L', + 'M', 'I', 'L', 'I', 'T', 'A', 'R', 'Y', + 'M', 'I', 'L', 'L', 'I', 'O', 'N', 'S', + 'M', 'I', 'N', 'I', 'D', 'I', 'S', 'C', + 'M', 'I', 'N', 'I', 'M', 'I', 'Z', 'E', + 'M', 'I', 'N', 'I', 'S', 'T', 'E', 'R', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', + 'M', 'O', 'H', 'A', 'M', 'M', 'A', 'D', + 'M', 'O', 'N', 'O', 'G', 'R', 'A', 'M', + 'M', 'O', 'N', 'O', 'R', 'A', 'I', 'L', + 'M', 'O', 'N', 'T', 'I', 'E', 'E', 'N', + 'M', 'O', 'S', 'Q', 'U', 'I', 'T', 'O', + 'M', 'O', 'T', 'O', 'R', 'W', 'A', 'Y', + 'M', 'O', 'U', 'N', 'T', 'A', 'I', 'N', + 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', + 'M', 'T', 'A', 'V', 'R', 'U', 'L', 'I', + 'M', 'U', 'L', 'T', 'I', 'M', 'A', 'P', + 'M', 'U', 'L', 'T', 'I', 'P', 'L', 'E', + 'M', 'U', 'L', 'T', 'I', 'S', 'E', 'T', + 'M', 'U', 'S', 'H', 'R', 'O', 'O', 'M', + 'N', 'A', 'N', 'S', 'A', 'N', 'A', 'Q', + 'N', 'A', 'T', 'I', 'O', 'N', 'A', 'L', + 'N', 'A', 'T', 'T', 'I', 'L', 'I', 'K', + 'N', 'E', 'G', 'A', 'T', 'I', 'O', 'N', + 'N', 'E', 'G', 'A', 'T', 'I', 'V', 'E', + 'N', 'G', 'E', 'U', 'R', 'E', 'U', 'T', + 'N', 'G', 'G', 'A', 'A', 'M', 'A', 'E', + 'N', 'G', 'G', 'E', 'U', 'A', 'E', 'T', + 'N', 'G', 'K', 'E', 'U', 'A', 'E', 'M', + 'N', 'G', 'K', 'E', 'U', 'A', 'E', 'Q', + 'N', 'I', 'K', 'H', 'A', 'H', 'I', 'T', + 'N', 'I', 'N', 'E', 'T', 'E', 'E', 'N', + 'N', 'J', 'E', 'U', 'A', 'E', 'N', 'A', + 'N', 'O', '-', 'B', 'R', 'E', 'A', 'K', + 'N', 'O', 'R', 'T', 'H', 'E', 'R', 'N', + 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', + 'N', 'O', 'T', 'E', 'B', 'O', 'O', 'K', + 'N', 'O', 'T', 'E', 'H', 'E', 'A', 'D', + 'N', 'O', 'V', 'E', 'M', 'B', 'E', 'R', + 'N', 'T', 'E', 'U', 'N', 'G', 'B', 'A', + 'N', 'Y', 'I', 'A', 'K', 'E', 'N', 'G', + 'O', 'B', 'L', 'A', 'C', 'H', 'K', 'O', + 'O', 'B', 'S', 'E', 'R', 'V', 'E', 'R', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '6', + 'O', 'M', 'I', 'S', 'S', 'I', 'O', 'N', + 'O', 'N', 'C', 'O', 'M', 'I', 'N', 'G', + 'O', 'N', 'E', '-', 'L', 'I', 'N', 'E', + 'O', 'P', 'E', 'R', 'A', 'T', 'O', 'R', + 'O', 'P', 'P', 'O', 'S', 'I', 'N', 'G', + 'O', 'R', 'I', 'G', 'I', 'N', 'A', 'L', + 'O', 'R', 'N', 'A', 'M', 'E', 'N', 'T', + 'O', 'R', 'T', 'H', 'O', 'D', 'O', 'X', + 'O', 'T', 'S', 'E', 'C', 'H', 'K', 'A', + 'O', 'U', 'T', 'L', 'I', 'N', 'E', 'D', + 'O', 'V', 'E', 'R', 'L', 'A', 'I', 'D', + 'O', 'V', 'E', 'R', 'L', 'I', 'N', 'E', + 'O', 'V', 'E', 'R', 'L', 'O', 'N', 'G', + 'O', 'V', 'E', 'R', 'R', 'I', 'D', 'E', + 'P', 'A', 'A', 'S', 'E', 'N', 'T', 'O', + 'P', 'A', 'I', 'R', 'T', 'H', 'R', 'A', + 'P', 'A', 'L', 'O', 'C', 'H', 'K', 'A', + 'P', 'A', 'M', 'E', 'N', 'E', 'N', 'G', + 'P', 'A', 'M', 'U', 'D', 'P', 'O', 'D', + 'P', 'A', 'N', 'C', 'A', 'K', 'E', 'S', + 'P', 'A', 'N', 'G', 'H', 'U', 'L', 'U', + 'P', 'A', 'N', 'G', 'L', 'O', 'N', 'G', + 'P', 'A', 'N', 'G', 'O', 'L', 'A', 'T', + 'P', 'A', 'N', 'O', 'L', 'O', 'N', 'G', + 'P', 'A', 'N', 'Y', 'A', 'K', 'R', 'A', + 'P', 'A', 'N', 'Y', 'E', 'C', 'E', 'K', + 'P', 'A', 'R', 'A', 'K', 'L', 'I', 'T', + 'P', 'A', 'R', 'A', 'L', 'L', 'E', 'L', + 'P', 'A', 'R', 'I', 'C', 'H', 'O', 'N', + 'P', 'A', 'R', 'T', 'H', 'I', 'A', 'N', + 'P', 'A', 'S', 'A', 'N', 'G', 'A', 'N', + 'P', 'A', 'S', 'S', 'P', 'O', 'R', 'T', + 'P', 'A', 'T', 'H', 'A', 'K', 'K', 'U', + 'P', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'P', 'E', 'D', 'E', 'S', 'T', 'A', 'L', + 'P', 'E', 'L', 'A', 'S', 'T', 'O', 'N', + 'P', 'E', 'N', 'T', 'A', 'G', 'O', 'N', + 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'A', + 'P', 'E', 'R', 'S', 'O', 'N', 'A', 'L', + 'P', 'E', 'T', 'A', 'L', 'L', 'E', 'D', + 'P', 'H', 'A', 'A', 'R', 'K', 'A', 'A', + 'P', 'H', 'A', 'G', 'S', '-', 'P', 'A', + 'P', 'H', 'A', 'I', 'S', 'T', 'O', 'S', + 'P', 'I', 'N', 'C', 'H', 'I', 'N', 'G', + 'P', 'I', 'N', 'W', 'H', 'E', 'E', 'L', + 'P', 'I', 'P', 'A', 'E', 'M', 'B', 'A', + 'P', 'L', 'A', 'S', 'T', 'I', 'C', 'S', + 'P', 'L', 'E', 'A', 'D', 'I', 'N', 'G', + 'P', 'L', 'E', 'T', 'H', 'R', 'O', 'N', + 'P', 'N', 'E', 'U', 'M', 'A', 'T', 'A', + 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'P', 'O', 'K', 'R', 'Y', 'T', 'I', 'E', + 'P', 'O', 'R', 'T', 'A', 'B', 'L', 'E', + 'P', 'O', 'R', 'T', 'R', 'A', 'I', 'T', + 'P', 'O', 'S', 'E', 'I', 'D', 'O', 'N', + 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'P', 'O', 'W', 'D', 'E', 'R', 'E', 'D', + 'P', 'R', 'A', 'M', '-', 'B', 'E', 'I', + 'P', 'R', 'A', 'M', '-', 'P', 'I', 'I', + 'P', 'R', 'E', 'C', 'E', 'D', 'E', 'D', + 'P', 'R', 'E', 'C', 'E', 'D', 'E', 'S', + 'P', 'R', 'E', 'F', 'I', 'X', 'E', 'D', + 'P', 'R', 'E', 'G', 'N', 'A', 'N', 'T', + 'P', 'R', 'E', 'V', 'I', 'O', 'U', 'S', + 'P', 'R', 'I', 'N', 'C', 'E', 'S', 'S', + 'P', 'R', 'O', 'F', 'O', 'U', 'N', 'D', + 'P', 'R', 'O', 'G', 'R', 'E', 'S', 'S', + 'P', 'R', 'O', 'P', 'E', 'R', 'T', 'Y', + 'P', 'R', 'O', 'S', 'T', 'A', 'Y', 'A', + 'P', 'U', 'S', 'H', 'P', 'I', 'K', 'A', + 'Q', 'A', 'I', 'R', 'T', 'H', 'R', 'A', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', + 'Q', 'U', 'A', 'N', 'T', 'I', 'T', 'Y', + 'Q', 'U', 'A', 'R', 'T', 'E', 'R', 'S', + 'Q', 'U', 'E', 'S', 'T', 'I', 'O', 'N', + 'Q', 'U', 'I', 'N', 'C', 'U', 'N', 'X', + 'Q', 'U', 'I', 'N', 'T', 'I', 'L', 'E', + 'R', 'A', 'H', 'I', 'M', 'A', 'H', 'U', + 'R', 'E', 'C', 'E', 'I', 'V', 'E', 'R', + 'R', 'E', 'C', 'O', 'R', 'D', 'E', 'R', + 'R', 'E', 'C', 'Y', 'C', 'L', 'E', 'D', + 'R', 'E', 'F', 'O', 'R', 'M', 'E', 'D', + 'R', 'E', 'G', 'I', 'O', 'N', 'A', 'L', + 'R', 'E', 'L', 'A', 'T', 'I', 'O', 'N', + 'R', 'E', 'L', 'I', 'E', 'V', 'E', 'D', + 'R', 'E', 'L', 'I', 'G', 'I', 'O', 'N', + 'R', 'E', 'M', 'I', 'N', 'D', 'E', 'R', + 'R', 'E', 'N', 'T', 'O', 'G', 'E', 'N', + 'R', 'E', 'P', 'E', 'A', 'T', 'E', 'D', + 'R', 'E', 'S', 'I', 'S', 'T', 'O', 'R', + 'R', 'E', 'S', 'O', 'U', 'R', 'C', 'E', + 'R', 'E', 'S', 'P', 'O', 'N', 'S', 'E', + 'R', 'E', 'S', 'T', 'R', 'O', 'O', 'M', + 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', + 'R', 'I', 'C', 'K', 'S', 'H', 'A', 'W', + 'R', 'I', 'G', 'V', 'E', 'D', 'I', 'C', + 'R', 'O', 'H', 'I', 'N', 'G', 'Y', 'A', + 'R', 'O', 'M', 'A', 'N', 'I', 'A', 'N', + 'R', 'O', 'T', 'A', 'T', 'I', 'O', 'N', + 'R', 'U', 'K', 'K', 'A', 'K', 'H', 'A', + 'S', '-', 'S', 'H', 'A', 'P', 'E', 'D', + 'S', 'A', 'I', 'L', 'B', 'O', 'A', 'T', + 'S', 'A', 'L', 'T', 'I', 'L', 'L', 'O', + 'S', 'A', 'L', 'T', 'I', 'R', 'E', 'S', + 'S', 'A', 'L', 'U', 'T', 'I', 'N', 'G', + 'S', 'A', 'N', 'D', 'W', 'I', 'C', 'H', + 'S', 'A', 'N', 'S', 'K', 'R', 'I', 'T', + 'S', 'A', 'N', 'T', 'I', 'I', 'M', 'U', + 'S', 'A', 'N', 'Y', 'O', 'O', 'G', 'A', + 'S', 'A', 'U', 'R', 'O', 'P', 'O', 'D', + 'S', 'A', 'X', 'I', 'M', 'A', 'T', 'A', + 'S', 'C', 'I', 'S', 'S', 'O', 'R', 'S', + 'S', 'C', 'O', 'R', 'P', 'I', 'O', 'N', + 'S', 'C', 'O', 'R', 'P', 'I', 'U', 'S', + 'S', 'E', 'E', 'D', 'L', 'I', 'N', 'G', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', + 'S', 'E', 'M', 'I', 'S', 'O', 'F', 'T', + 'S', 'E', 'M', 'U', 'N', 'C', 'I', 'A', + 'S', 'E', 'N', 'T', 'A', 'G', 'O', 'N', + 'S', 'E', 'P', 'T', 'U', 'P', 'L', 'E', + 'S', 'H', 'A', 'D', 'O', 'W', 'E', 'D', + 'S', 'H', 'A', 'M', 'R', 'O', 'C', 'K', + 'S', 'H', 'E', '-', 'G', 'O', 'A', 'T', + 'S', 'H', 'E', 'S', 'H', 'L', 'A', 'M', + 'S', 'H', 'O', 'O', 'T', 'I', 'N', 'G', + 'S', 'H', 'O', 'P', 'P', 'I', 'N', 'G', + 'S', 'H', 'O', 'U', 'L', 'D', 'E', 'R', + 'S', 'H', 'U', 'A', 'N', 'G', 'X', 'I', + 'S', 'I', 'C', 'K', 'N', 'E', 'S', 'S', + 'S', 'I', 'D', 'E', 'W', 'A', 'Y', 'S', + 'S', 'I', 'M', 'A', 'N', 'S', 'I', 'S', + 'S', 'I', 'N', 'U', 'S', 'O', 'I', 'D', + 'S', 'I', 'X', '-', 'L', 'I', 'N', 'E', + 'S', 'L', 'A', 'V', 'O', 'N', 'I', 'C', + 'S', 'L', 'E', 'E', 'P', 'I', 'N', 'G', + 'S', 'L', 'I', 'G', 'H', 'T', 'L', 'Y', + 'S', 'M', 'I', 'R', 'K', 'I', 'N', 'G', + 'S', 'N', 'E', 'E', 'Z', 'I', 'N', 'G', + 'S', 'O', 'F', 'T', 'B', 'A', 'L', 'L', + 'S', 'O', 'F', 'T', 'N', 'E', 'S', 'S', + 'S', 'O', 'R', 'O', 'C', 'H', 'Y', 'A', + 'S', 'O', 'U', 'T', 'H', 'E', 'R', 'N', + 'S', 'P', 'A', 'R', 'K', 'L', 'E', 'R', + 'S', 'P', 'A', 'R', 'K', 'L', 'E', 'S', + 'S', 'P', 'E', 'A', 'K', 'I', 'N', 'G', + 'S', 'P', 'E', 'S', 'M', 'I', 'L', 'O', + 'S', 'P', 'I', 'R', 'I', 'T', 'U', 'S', + 'S', 'P', 'L', 'A', 'T', 'T', 'E', 'R', + 'S', 'P', 'O', 'U', 'T', 'I', 'N', 'G', + 'S', 'Q', 'U', 'E', 'E', 'Z', 'E', 'D', + 'S', 'Q', 'U', 'I', 'G', 'G', 'L', 'E', + 'S', 'Q', 'U', 'I', 'R', 'R', 'E', 'L', + 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'O', + 'S', 'T', 'A', 'L', 'L', 'I', 'O', 'N', + 'S', 'T', 'A', 'N', 'D', 'A', 'R', 'D', + 'S', 'T', 'A', 'N', 'D', 'I', 'N', 'G', + 'S', 'T', 'A', 'R', 'T', 'I', 'N', 'G', + 'S', 'T', 'E', 'A', 'M', 'I', 'N', 'G', + 'S', 'T', 'E', 'M', '-', '2', '3', '4', + 'S', 'T', 'E', 'P', 'P', 'I', 'N', 'G', + 'S', 'T', 'I', 'C', 'K', 'I', 'N', 'G', + 'S', 'T', 'O', 'P', 'I', 'T', 'S', 'A', + 'S', 'T', 'O', 'P', 'P', 'A', 'G', 'E', + 'S', 'T', 'O', 'P', 'P', 'I', 'N', 'G', + 'S', 'T', 'R', 'A', 'I', 'G', 'H', 'T', + 'S', 'T', 'R', 'A', 'I', 'N', 'E', 'R', + 'S', 'T', 'R', 'A', 'T', 'I', 'A', 'N', + 'S', 'T', 'R', 'E', 'A', 'M', 'E', 'R', + 'S', 'T', 'R', 'E', 'N', 'G', 'T', 'H', + 'S', 'T', 'R', 'I', 'C', 'T', 'L', 'Y', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '1', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '2', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '3', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '4', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '5', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '6', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '7', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '8', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '9', + 'S', 'U', 'B', 'G', 'R', 'O', 'U', 'P', + 'S', 'U', 'C', 'C', 'E', 'E', 'D', 'S', + 'S', 'U', 'I', 'T', 'A', 'B', 'L', 'E', + 'S', 'U', 'P', 'E', 'R', 'S', 'E', 'T', + 'S', 'U', 'R', 'R', 'O', 'U', 'N', 'D', + 'S', 'V', 'E', 'T', 'L', 'A', 'Y', 'A', + 'S', 'W', 'A', 'P', 'P', 'I', 'N', 'G', + 'S', 'W', 'I', 'M', 'M', 'I', 'N', 'G', + 'S', 'W', 'I', 'M', 'S', 'U', 'I', 'T', + 'S', 'Y', 'L', 'L', 'A', 'B', 'L', 'E', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '6', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '8', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '9', + 'S', 'Y', 'M', 'M', 'E', 'T', 'R', 'Y', + 'T', 'A', 'G', 'B', 'A', 'N', 'W', 'A', + 'T', 'A', 'I', 'L', 'L', 'E', 'S', 'S', + 'T', 'A', 'N', 'A', 'B', 'A', 'T', 'A', + 'T', 'A', 'R', 'T', 'A', 'R', '-', '2', + 'T', 'A', 'T', 'T', 'O', 'O', 'E', 'D', + 'T', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'T', 'E', 'A', 'R', '-', 'O', 'F', 'F', + 'T', 'E', 'R', 'M', 'I', 'N', 'A', 'L', + 'T', 'E', 'S', 'S', 'A', 'R', 'O', 'N', + 'T', 'E', 'T', 'A', 'R', 'T', 'O', 'S', + 'T', 'E', 'T', 'R', 'A', 'P', 'L', 'I', + 'T', 'H', 'E', 'S', 'P', 'I', 'A', 'N', + 'T', 'H', 'I', 'N', 'K', 'I', 'N', 'G', + 'T', 'H', 'I', 'R', 'T', 'E', 'E', 'N', + 'T', 'H', 'O', 'L', 'H', 'O', 'M', 'A', + 'T', 'H', 'O', 'U', 'S', 'A', 'N', 'D', + 'T', 'H', 'R', 'E', 'E', '-', 'E', 'M', + 'T', 'H', 'R', 'O', 'W', 'I', 'N', 'G', + 'T', 'H', 'U', 'R', 'I', 'S', 'A', 'Z', + 'T', 'I', 'F', 'I', 'N', 'A', 'G', 'H', + 'T', 'I', 'N', 'C', 'T', 'U', 'R', 'E', + 'T', 'I', 'R', 'O', 'N', 'I', 'A', 'N', + 'T', 'O', 'G', 'E', 'T', 'H', 'E', 'R', + 'T', 'O', 'R', 'C', 'U', 'L', 'U', 'S', + 'T', 'O', 'R', 'T', 'O', 'I', 'S', 'E', + 'T', 'O', 'U', 'C', 'H', 'I', 'N', 'G', + 'T', 'O', 'U', 'R', 'N', 'O', 'I', 'S', + 'T', 'R', 'A', 'I', 'L', 'I', 'N', 'G', + 'T', 'R', 'E', 'A', 'D', 'I', 'N', 'G', + 'T', 'R', 'E', 'S', 'I', 'L', 'L', 'O', + 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', + 'T', 'R', 'I', 'C', 'O', 'L', 'O', 'N', + 'T', 'R', 'I', 'S', 'I', 'M', 'O', 'U', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'N', + 'T', 'R', 'O', 'P', 'I', 'C', 'A', 'L', + 'T', 'R', 'U', 'M', 'P', '-', '1', '0', + 'T', 'R', 'U', 'M', 'P', '-', '1', '1', + 'T', 'R', 'U', 'M', 'P', '-', '1', '2', + 'T', 'R', 'U', 'M', 'P', '-', '1', '3', + 'T', 'R', 'U', 'M', 'P', '-', '1', '4', + 'T', 'R', 'U', 'M', 'P', '-', '1', '5', + 'T', 'R', 'U', 'M', 'P', '-', '1', '6', + 'T', 'R', 'U', 'M', 'P', '-', '1', '7', + 'T', 'R', 'U', 'M', 'P', '-', '1', '8', + 'T', 'R', 'U', 'M', 'P', '-', '1', '9', + 'T', 'R', 'U', 'M', 'P', '-', '2', '0', + 'T', 'R', 'U', 'M', 'P', '-', '2', '1', + 'T', 'R', 'Y', 'B', 'L', 'I', 'O', 'N', + 'T', 'T', 'A', 'Y', 'A', 'N', 'N', 'A', + 'T', 'T', 'U', 'D', 'D', 'A', 'A', 'G', + 'T', 'V', 'I', 'M', 'A', 'D', 'U', 'R', + 'T', 'W', 'E', 'L', 'F', 'T', 'H', 'S', + 'T', 'W', 'I', 'S', 'T', 'I', 'N', 'G', + 'T', 'W', 'O', '-', 'L', 'I', 'N', 'E', + 'T', 'Y', 'P', 'E', '-', '1', '-', '2', + 'U', '-', 'S', 'H', 'A', 'P', 'E', 'D', + 'U', 'B', 'H', 'A', 'Y', 'A', 'T', 'O', + 'U', 'G', 'A', 'R', 'I', 'T', 'I', 'C', + 'U', 'I', 'L', 'L', 'E', 'A', 'N', 'N', + 'U', 'M', 'B', 'R', 'E', 'L', 'L', 'A', + 'U', 'N', 'A', 'M', 'U', 'S', 'E', 'D', + 'U', 'N', 'D', 'E', 'R', 'B', 'A', 'R', + 'U', 'N', 'D', 'E', 'R', 'D', 'O', 'T', + 'U', 'N', 'D', 'E', 'R', 'T', 'I', 'E', + 'V', 'A', 'R', 'A', 'A', 'K', 'A', 'N', + 'V', 'A', 'S', 'T', 'N', 'E', 'S', 'S', + 'V', 'E', 'R', 'S', 'I', 'C', 'L', 'E', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', + 'V', 'E', 'U', 'A', 'E', 'P', 'E', 'N', + 'V', 'I', 'E', 'W', 'D', 'A', 'T', 'A', + 'V', 'I', 'T', 'H', 'K', 'U', 'Q', 'I', + 'V', 'O', 'M', 'I', 'T', 'I', 'N', 'G', + 'V', 'R', 'A', 'K', 'H', 'I', 'Y', 'A', + 'V', 'U', 'L', 'C', 'A', 'N', 'U', 'S', + 'W', 'A', '-', 'A', 'A', 'L', 'I', 'H', + 'W', 'A', 'N', 'D', 'E', 'R', 'E', 'R', + 'W', 'A', 'N', 'G', 'K', 'U', 'O', 'Q', + 'W', 'A', 'S', 'A', 'L', 'L', 'A', 'M', + 'W', 'I', 'D', 'E', 'N', 'I', 'N', 'G', + 'W', 'I', 'R', 'E', 'L', 'E', 'S', 'S', + 'W', 'R', 'I', 'N', 'K', 'L', 'E', 'D', + 'W', 'R', 'I', 'N', 'K', 'L', 'E', 'S', + 'Y', 'A', 'M', 'A', 'K', 'K', 'A', 'N', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', + 'Y', 'O', 'U', 'T', 'H', 'F', 'U', 'L', + 'Z', 'A', 'K', 'R', 'Y', 'T', 'O', 'E', + 'Z', 'A', 'N', 'O', 'Z', 'H', 'E', 'K', + 'Z', 'A', 'P', 'Y', 'A', 'T', 'O', 'Y', + 'Z', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'Z', 'N', 'A', 'M', 'E', 'N', 'N', 'Y', + 'Z', 'W', 'A', 'R', 'A', 'K', 'A', 'Y', + 'A', 'A', 'B', 'A', 'A', 'F', 'I', 'L', 'I', + 'A', 'A', 'Z', 'H', 'A', 'A', 'K', 'K', 'U', + 'A', 'B', 'K', 'H', 'A', 'S', 'I', 'A', 'N', + 'A', 'B', 'U', 'N', 'D', 'A', 'N', 'C', 'E', + 'A', 'C', 'C', 'O', 'R', 'D', 'I', 'O', 'N', + 'A', 'D', 'D', 'R', 'E', 'S', 'S', 'E', 'D', + 'A', 'D', 'M', 'I', 'S', 'S', 'I', 'O', 'N', + 'A', 'D', 'V', 'A', 'N', 'T', 'A', 'G', 'E', + 'A', 'L', '-', 'L', 'A', 'K', 'U', 'N', 'A', + 'A', 'L', 'A', 'Y', 'H', 'I', 'M', 'A', 'A', + 'A', 'L', 'P', 'A', 'P', 'R', 'A', 'N', 'A', + 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'E', + 'A', 'M', 'B', 'U', 'L', 'A', 'N', 'C', 'E', + 'A', 'M', 'P', 'E', 'R', 'S', 'A', 'N', 'D', + 'A', 'N', 'A', 'T', 'O', 'L', 'I', 'A', 'N', + 'A', 'N', 'G', 'L', 'I', 'C', 'A', 'N', 'A', + 'A', 'N', 'G', 'U', 'I', 'S', 'H', 'E', 'D', + 'A', 'N', 'T', 'I', 'F', 'O', 'N', 'I', 'A', + 'A', 'N', 'U', 'N', 'A', 'S', 'I', 'K', 'A', + 'A', 'R', '-', 'R', 'A', 'H', 'E', 'E', 'M', + 'A', 'R', '-', 'R', 'A', 'H', 'M', 'A', 'N', + 'A', 'R', 'R', 'O', 'W', 'H', 'E', 'A', 'D', + 'A', 'S', '-', 'S', 'A', 'L', 'A', 'A', 'M', + 'A', 'S', 'C', 'E', 'N', 'D', 'I', 'N', 'G', + 'A', 'S', 'P', 'I', 'R', 'A', 'T', 'E', 'D', + 'A', 'S', 'S', 'E', 'R', 'T', 'I', 'O', 'N', + 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'K', 'S', + 'A', 'T', 'T', 'A', 'C', 'H', 'I', 'N', 'G', + 'A', 'T', 'T', 'E', 'N', 'T', 'I', 'O', 'N', + 'A', 'U', 'B', 'E', 'R', 'G', 'I', 'N', 'E', + 'A', 'U', 'T', 'O', 'M', 'A', 'T', 'E', 'D', + 'B', 'A', 'C', 'K', 'S', 'L', 'A', 'S', 'H', + 'B', 'A', 'C', 'K', 'S', 'P', 'A', 'C', 'E', + 'B', 'A', 'D', 'M', 'I', 'N', 'T', 'O', 'N', + 'B', 'A', 'L', 'L', 'P', 'O', 'I', 'N', 'T', + 'B', 'E', 'G', 'I', 'N', 'N', 'I', 'N', 'G', + 'B', 'H', 'A', 'I', 'K', 'S', 'U', 'K', 'I', + 'B', 'I', 'C', 'Y', 'C', 'L', 'I', 'S', 'T', + 'B', 'I', 'L', 'L', 'I', 'A', 'R', 'D', 'S', + 'B', 'I', 'N', 'O', 'C', 'U', 'L', 'A', 'R', + 'B', 'I', 'O', 'H', 'A', 'Z', 'A', 'R', 'D', + 'B', 'I', 'S', 'E', 'C', 'T', 'I', 'N', 'G', + 'B', 'I', 'S', 'M', 'I', 'L', 'L', 'A', 'H', + 'B', 'L', 'A', 'C', 'K', 'F', 'O', 'O', 'T', + 'B', 'O', 'O', 'M', 'E', 'R', 'A', 'N', 'G', + 'B', 'R', 'A', 'C', 'K', 'E', 'T', 'E', 'D', + 'B', 'R', 'A', 'N', 'C', 'H', 'I', 'N', 'G', + 'B', 'R', 'I', 'E', 'F', 'C', 'A', 'S', 'E', + 'B', 'U', 'I', 'L', 'D', 'I', 'N', 'G', 'S', + 'B', 'U', 'T', 'T', 'E', 'R', 'F', 'L', 'Y', + 'B', 'Y', 'Z', 'A', 'N', 'T', 'I', 'N', 'E', + 'C', 'A', 'P', 'A', 'C', 'I', 'T', 'O', 'R', + 'C', 'A', 'P', 'I', 'T', 'U', 'L', 'U', 'M', + 'C', 'A', 'P', 'R', 'I', 'C', 'O', 'R', 'N', + 'C', 'A', 'R', 'P', 'E', 'N', 'T', 'R', 'Y', + 'C', 'A', 'R', 'T', 'R', 'I', 'D', 'G', 'E', + 'C', 'A', 'R', 'T', 'W', 'H', 'E', 'E', 'L', + 'C', 'A', 'R', 'Y', 'S', 'T', 'I', 'A', 'N', + 'C', 'A', 'U', 'C', 'A', 'S', 'I', 'A', 'N', + 'C', 'E', 'N', 'T', 'U', 'R', 'I', 'A', 'L', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', + 'C', 'H', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'C', 'H', 'E', 'Q', 'U', 'E', 'R', 'E', 'D', + 'C', 'H', 'O', 'C', 'O', 'L', 'A', 'T', 'E', + 'C', 'H', 'R', 'I', 'S', 'T', 'M', 'A', 'S', + 'C', 'I', 'T', 'Y', 'S', 'C', 'A', 'P', 'E', + 'C', 'L', 'A', 'M', 'S', 'H', 'E', 'L', 'L', + 'C', 'L', 'A', 'S', 'S', 'I', 'C', 'A', 'L', + 'C', 'L', 'I', 'P', 'B', 'O', 'A', 'R', 'D', + 'C', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', + 'C', 'L', 'O', 'S', 'E', 'N', 'E', 'S', 'S', + 'C', 'O', 'C', 'K', 'R', 'O', 'A', 'C', 'H', + 'C', 'O', 'L', 'L', 'I', 'S', 'I', 'O', 'N', + 'C', 'O', 'M', 'B', 'I', 'N', 'I', 'N', 'G', + 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'E', 'D', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', + 'C', 'O', 'M', 'P', 'U', 'T', 'E', 'R', 'S', + 'C', 'O', 'N', 'G', 'R', 'U', 'E', 'N', 'T', + 'C', 'O', 'N', 'J', 'O', 'I', 'N', 'E', 'D', + 'C', 'O', 'N', 'J', 'O', 'I', 'N', 'E', 'R', + 'C', 'O', 'N', 'J', 'U', 'G', 'A', 'T', 'E', + 'C', 'O', 'N', 'S', 'O', 'N', 'A', 'N', 'T', + 'C', 'O', 'N', 'S', 'T', 'A', 'N', 'C', 'Y', + 'C', 'O', 'N', 'T', 'O', 'U', 'R', 'E', 'D', + 'C', 'O', 'P', 'R', 'O', 'D', 'U', 'C', 'T', + 'C', 'O', 'P', 'Y', 'R', 'I', 'G', 'H', 'T', + 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'D', 'O', + 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'T', 'S', + 'C', 'R', 'O', 'C', 'O', 'D', 'I', 'L', 'E', + 'C', 'R', 'O', 'I', 'S', 'S', 'A', 'N', 'T', + 'C', 'R', 'O', 'U', 'C', 'H', 'I', 'N', 'G', + 'C', 'R', 'U', 'C', 'I', 'F', 'O', 'R', 'M', + 'C', 'U', 'A', 'T', 'R', 'I', 'L', 'L', 'O', + 'C', 'U', 'N', 'E', 'I', 'F', 'O', 'R', 'M', + 'D', 'A', 'H', 'Y', 'A', 'A', 'U', 'S', 'H', + 'D', 'A', 'R', 'K', 'E', 'N', 'I', 'N', 'G', + 'D', 'A', 'Y', '-', 'N', 'I', 'G', 'H', 'T', + 'D', 'E', 'C', 'I', 'D', 'U', 'O', 'U', 'S', + 'D', 'E', 'L', 'I', 'C', 'I', 'O', 'U', 'S', + 'D', 'E', 'L', 'I', 'M', 'I', 'T', 'E', 'R', + 'D', 'E', 'N', 'T', 'I', 'S', 'T', 'R', 'Y', + 'D', 'E', 'P', 'A', 'R', 'T', 'I', 'N', 'G', + 'D', 'E', 'P', 'A', 'R', 'T', 'U', 'R', 'E', + 'D', 'E', 'S', 'C', 'E', 'N', 'D', 'E', 'R', + 'D', 'I', 'A', 'E', 'R', 'E', 'S', 'I', 'S', + 'D', 'I', 'A', 'G', 'O', 'N', 'A', 'L', 'S', + 'D', 'I', 'A', 'L', 'E', 'C', 'T', '-', 'P', + 'D', 'I', 'A', 'L', 'Y', 'T', 'I', 'K', 'A', + 'D', 'I', 'A', 'T', 'O', 'N', 'I', 'K', 'I', + 'D', 'I', 'F', 'T', 'O', 'G', 'G', 'O', 'S', + 'D', 'I', 'G', 'R', 'A', 'M', 'M', 'O', 'S', + 'D', 'I', 'M', 'E', 'N', 'S', 'I', 'O', 'N', + 'D', 'I', 'R', 'E', 'C', 'T', 'I', 'O', 'N', + 'D', 'I', 'S', 'G', 'U', 'I', 'S', 'E', 'D', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '3', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '3', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '3', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '5', '6', '7', '8', + 'D', 'O', 'W', 'N', 'W', 'A', 'R', 'D', 'S', + 'D', 'R', 'O', 'M', 'E', 'D', 'A', 'R', 'Y', + 'D', 'U', 'P', 'O', 'N', 'D', 'I', 'U', 'S', + 'E', 'D', 'I', 'T', 'O', 'R', 'I', 'A', 'L', + 'E', 'E', 'B', 'E', 'E', 'F', 'I', 'L', 'I', + 'E', 'I', 'G', 'H', 'T', 'I', 'E', 'T', 'H', + 'E', 'M', 'B', 'E', 'D', 'D', 'I', 'N', 'G', + 'E', 'N', 'C', 'L', 'O', 'S', 'I', 'N', 'G', + 'E', 'N', 'C', 'L', 'O', 'S', 'U', 'R', 'E', + 'E', 'N', 'D', 'E', 'A', 'V', 'O', 'U', 'R', + 'E', 'N', 'D', 'O', 'F', 'O', 'N', 'O', 'N', + 'E', 'S', 'T', 'I', 'M', 'A', 'T', 'E', 'D', + 'E', 'S', 'T', 'I', 'M', 'A', 'T', 'E', 'S', + 'E', 'V', 'E', 'R', 'G', 'R', 'E', 'E', 'N', + 'E', 'X', 'C', 'E', 'L', 'L', 'E', 'N', 'T', + 'E', 'X', 'P', 'L', 'O', 'D', 'I', 'N', 'G', + 'E', 'X', 'P', 'L', 'O', 'S', 'I', 'O', 'N', + 'E', 'X', 'T', 'E', 'N', 'S', 'I', 'O', 'N', + 'E', 'X', 'T', 'R', 'A', '-', 'L', 'O', 'W', + 'E', 'X', 'T', 'R', 'E', 'M', 'E', 'L', 'Y', + 'E', 'Y', 'B', 'E', 'Y', 'F', 'I', 'L', 'I', + 'E', 'Y', 'E', 'L', 'A', 'S', 'H', 'E', 'S', + 'F', 'A', 'C', 'S', 'I', 'M', 'I', 'L', 'E', + 'F', 'A', 'N', 'E', 'R', 'O', 'S', 'I', 'S', + 'F', 'E', 'U', 'F', 'E', 'U', 'A', 'E', 'T', + 'F', 'I', 'N', 'A', 'N', 'C', 'I', 'A', 'L', + 'F', 'I', 'R', 'E', 'W', 'O', 'R', 'K', 'S', + 'F', 'I', 'V', 'E', '-', 'L', 'I', 'K', 'E', + 'F', 'I', 'V', 'E', '-', 'L', 'I', 'N', 'E', + 'F', 'L', 'A', 'T', 'B', 'R', 'E', 'A', 'D', + 'F', 'L', 'A', 'T', 'T', 'E', 'N', 'E', 'D', + 'F', 'O', 'L', 'L', 'O', 'W', 'I', 'N', 'G', + 'F', 'O', 'O', 'T', 'S', 'T', 'O', 'O', 'L', + 'F', 'O', 'S', 'T', 'E', 'R', 'I', 'N', 'G', + 'F', 'O', 'U', 'R', '-', 'L', 'I', 'N', 'E', + 'F', 'R', 'E', 'T', 'B', 'O', 'A', 'R', 'D', + 'F', 'R', 'I', 'C', 'A', 'T', 'I', 'V', 'E', + 'F', 'U', 'L', 'L', 'W', 'I', 'D', 'T', 'H', + 'G', 'A', 'T', 'H', 'E', 'R', 'I', 'N', 'G', + 'G', 'E', 'O', 'M', 'E', 'T', 'R', 'I', 'C', + 'G', 'E', 'R', 'S', 'H', 'A', 'Y', 'I', 'M', + 'G', 'H', 'E', 'U', 'A', 'E', 'R', 'A', 'E', + 'G', 'L', 'I', 'S', 'S', 'A', 'N', 'D', 'O', + 'G', 'N', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'G', 'O', 'L', 'U', 'B', 'C', 'H', 'I', 'K', + 'G', 'O', 'R', 'G', 'O', 'T', 'E', 'R', 'I', + 'G', 'R', 'A', 'V', 'E', 'Y', 'A', 'R', 'D', + 'G', 'R', 'E', 'A', 'T', 'N', 'E', 'S', 'S', + 'G', 'R', 'E', 'G', 'O', 'R', 'I', 'A', 'N', + 'G', 'R', 'I', 'M', 'A', 'C', 'I', 'N', 'G', + 'G', 'U', 'A', 'R', 'D', 'S', 'M', 'A', 'N', + 'G', 'U', 'R', 'A', 'M', 'U', 'T', 'O', 'N', + 'H', 'A', 'L', 'F', 'W', 'I', 'D', 'T', 'H', + 'H', 'A', 'M', 'B', 'U', 'R', 'G', 'E', 'R', + 'H', 'A', 'N', 'D', '-', 'C', 'L', 'A', 'W', + 'H', 'A', 'N', 'D', '-', 'F', 'I', 'S', 'T', + 'H', 'A', 'N', 'D', '-', 'F', 'L', 'A', 'T', + 'H', 'A', 'N', 'D', '-', 'H', 'O', 'O', 'K', + 'H', 'A', 'N', 'D', '-', 'O', 'V', 'A', 'L', + 'H', 'A', 'N', 'D', 'S', 'H', 'A', 'K', 'E', + 'H', 'E', 'A', 'D', 'P', 'H', 'O', 'N', 'E', + 'H', 'E', 'A', 'D', 'S', 'C', 'A', 'R', 'F', + 'H', 'E', 'A', 'D', 'S', 'T', 'O', 'N', 'E', + 'H', 'E', 'K', 'U', 'T', 'A', 'A', 'R', 'U', + 'H', 'E', 'R', 'M', 'I', 'T', 'I', 'A', 'N', + 'H', 'O', 'U', 'R', 'G', 'L', 'A', 'S', 'S', + 'H', 'U', 'N', 'G', 'A', 'R', 'I', 'A', 'N', + 'I', 'C', 'H', 'I', 'M', 'A', 'T', 'O', 'S', + 'I', 'D', 'E', 'N', 'T', 'I', 'C', 'A', 'L', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', + 'I', 'L', 'U', 'U', 'Y', 'A', 'N', 'N', 'A', + 'I', 'M', 'I', 'F', 'T', 'H', 'O', 'R', 'A', + 'I', 'N', 'C', 'L', 'U', 'D', 'I', 'N', 'G', + 'I', 'N', 'C', 'R', 'E', 'A', 'S', 'E', 'S', + 'I', 'N', 'C', 'R', 'E', 'M', 'E', 'N', 'T', + 'I', 'N', 'D', 'I', 'C', 'A', 'T', 'O', 'R', + 'I', 'N', 'D', 'I', 'C', 'T', 'I', 'O', 'N', + 'I', 'N', 'F', 'L', 'U', 'E', 'N', 'C', 'E', + 'I', 'N', 'N', 'O', 'C', 'E', 'N', 'C', 'E', + 'I', 'N', 'S', 'E', 'R', 'T', 'I', 'O', 'N', + 'I', 'N', 'V', 'I', 'S', 'I', 'B', 'L', 'E', + 'I', 'R', 'U', 'U', 'Y', 'A', 'N', 'N', 'A', + 'I', 'S', 'E', 'N', '-', 'I', 'S', 'E', 'N', + 'I', 'S', 'O', 'S', 'C', 'E', 'L', 'E', 'S', + 'I', 'T', 'E', 'R', 'A', 'T', 'I', 'O', 'N', + 'J', 'E', 'L', 'L', 'Y', 'F', 'I', 'S', 'H', + 'J', 'E', 'R', 'U', 'S', 'A', 'L', 'E', 'M', + 'J', 'O', 'N', 'G', 'S', 'E', 'O', 'N', 'G', + 'J', 'U', 'N', 'G', 'S', 'E', 'O', 'N', 'G', + 'J', 'U', 'S', 'T', 'I', 'F', 'I', 'E', 'D', + 'K', 'A', 'T', 'A', 'V', 'A', 'S', 'M', 'A', + 'K', 'E', 'M', 'P', 'H', 'R', 'E', 'N', 'G', + 'K', 'E', 'N', 'T', 'I', 'M', 'A', 'T', 'A', + 'K', 'H', 'U', 'D', 'A', 'W', 'A', 'D', 'I', + 'K', 'H', 'U', 'E', 'N', '-', 'L', 'U', 'E', + 'K', 'I', 'R', 'O', 'W', 'A', 'T', 'T', 'O', + 'K', 'I', 'W', 'I', 'F', 'R', 'U', 'I', 'T', + 'K', 'R', 'A', 'T', 'I', 'M', 'A', 'T', 'A', + 'K', 'U', 'R', 'U', 'Z', 'E', 'I', 'R', 'O', + 'L', 'A', 'B', 'O', 'U', 'R', 'I', 'N', 'G', + 'L', 'A', 'R', 'Y', 'N', 'G', 'E', 'A', 'L', + 'L', 'E', 'F', 'T', '-', 'H', 'A', 'N', 'D', + 'L', 'E', 'F', 'T', '-', 'S', 'I', 'D', 'E', + 'L', 'E', 'F', 'T', '-', 'S', 'T', 'E', 'M', + 'L', 'E', 'F', 'T', 'W', 'A', 'R', 'D', 'S', + 'L', 'E', 'S', 'S', '-', 'T', 'H', 'A', 'N', + 'L', 'H', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'L', 'I', 'A', 'B', 'I', 'L', 'I', 'T', 'Y', + 'L', 'I', 'G', 'H', 'T', 'N', 'I', 'N', 'G', + 'L', 'O', 'D', 'E', 'S', 'T', 'O', 'N', 'E', + 'M', 'A', 'E', 'M', 'G', 'B', 'I', 'E', 'E', + 'M', 'A', 'H', 'A', 'P', 'R', 'A', 'N', 'A', + 'M', 'A', 'I', 'T', 'A', 'I', 'K', 'H', 'U', + 'M', 'A', 'L', 'A', 'Y', 'A', 'L', 'A', 'M', + 'M', 'A', 'R', 'C', 'A', 'S', 'I', 'T', 'E', + 'M', 'A', 'S', 'C', 'U', 'L', 'I', 'N', 'E', + 'M', 'A', 'T', 'E', 'R', 'I', 'A', 'L', 'S', + 'M', 'E', 'G', 'A', 'P', 'H', 'O', 'N', 'E', + 'M', 'E', 'R', 'I', 'D', 'I', 'A', 'N', 'S', + 'M', 'E', 'R', 'P', 'E', 'R', 'S', 'O', 'N', + 'M', 'E', 'S', 'S', 'E', 'N', 'I', 'A', 'N', + 'M', 'E', 'T', 'O', 'B', 'E', 'L', 'U', 'S', + 'M', 'I', 'D', '-', 'L', 'E', 'V', 'E', 'L', + 'M', 'I', 'R', 'I', 'B', 'A', 'A', 'R', 'U', + 'M', 'O', 'K', 'H', 'A', 'S', 'S', 'A', 'S', + 'M', 'O', 'N', 'G', 'O', 'L', 'I', 'A', 'N', + 'M', 'O', 'N', 'O', 'C', 'U', 'L', 'A', 'R', + 'M', 'O', 'N', 'O', 'G', 'R', 'A', 'P', 'H', + 'M', 'O', 'N', 'O', 'S', 'P', 'A', 'C', 'E', + 'M', 'O', 'T', 'O', 'R', 'I', 'Z', 'E', 'D', + 'M', 'O', 'U', 'N', 'T', 'A', 'I', 'N', 'S', + 'M', 'R', 'A', 'C', 'H', 'N', 'A', 'Y', 'A', + 'M', 'U', 'K', 'K', 'U', 'R', 'U', 'N', 'I', + 'M', 'U', 'K', 'P', 'H', 'R', 'E', 'N', 'G', + 'M', 'U', 'T', 'H', 'A', 'L', 'I', 'Y', 'A', + 'M', 'U', 'U', 'R', 'D', 'H', 'A', 'J', 'A', + 'N', '-', 'M', 'U', '-', 'M', 'O', '-', '1', + 'N', '-', 'M', 'U', '-', 'M', 'O', '-', '2', + 'N', 'A', 'B', 'A', 'T', 'A', 'E', 'A', 'N', + 'N', 'A', 'S', 'A', 'L', 'I', 'Z', 'E', 'D', + 'N', 'A', 'U', 'S', 'E', 'A', 'T', 'E', 'D', + 'N', 'D', 'E', 'U', 'A', 'E', 'R', 'E', 'E', + 'N', 'E', 'T', 'W', 'O', 'R', 'K', 'E', 'D', + 'N', 'E', 'W', 'S', 'P', 'A', 'P', 'E', 'R', + 'N', 'I', 'G', 'G', 'A', 'H', 'I', 'T', 'A', + 'N', 'I', 'G', 'I', 'D', 'A', 'E', 'S', 'H', + 'N', 'I', 'G', 'I', 'D', 'A', 'M', 'I', 'N', + 'N', 'I', 'H', 'S', 'H', 'V', 'A', 'S', 'A', + 'N', 'I', 'N', 'E', '-', 'L', 'I', 'K', 'E', + 'N', 'O', 'R', 'T', 'H', 'W', 'E', 'S', 'T', + 'N', 'U', 'M', 'E', 'R', 'A', 'T', 'O', 'R', + 'O', 'A', 'B', 'O', 'A', 'F', 'I', 'L', 'I', + 'O', 'C', 'C', 'L', 'U', 'S', 'I', 'O', 'N', + 'O', 'C', 'T', 'A', 'G', 'O', 'N', 'A', 'L', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '6', '7', + 'O', 'N', 'E', '-', 'P', 'I', 'E', 'C', 'E', + 'O', 'O', 'B', 'O', 'O', 'F', 'I', 'L', 'I', + 'O', 'P', 'H', 'I', 'U', 'C', 'H', 'U', 'S', + 'O', 'R', 'A', 'N', 'G', 'U', 'T', 'A', 'N', + 'O', 'R', 'N', 'A', 'M', 'E', 'N', 'T', 'S', + 'O', 'Y', 'R', 'A', 'N', 'I', 'S', 'M', 'A', + 'P', 'A', 'A', '-', 'P', 'I', 'L', 'L', 'A', + 'P', 'A', 'I', 'Y', 'A', 'N', 'N', 'O', 'I', + 'P', 'A', 'L', 'M', 'Y', 'R', 'E', 'N', 'E', + 'P', 'A', 'M', 'I', 'N', 'G', 'K', 'A', 'L', + 'P', 'A', 'M', 'U', 'N', 'G', 'K', 'A', 'H', + 'P', 'A', 'N', 'G', 'L', 'A', 'Y', 'A', 'R', + 'P', 'A', 'N', 'G', 'W', 'I', 'S', 'A', 'D', + 'P', 'A', 'N', 'Y', 'A', 'N', 'G', 'G', 'A', + 'P', 'A', 'P', 'E', 'R', 'C', 'L', 'I', 'P', + 'P', 'A', 'R', 'A', 'C', 'H', 'U', 'T', 'E', + 'P', 'A', 'R', 'A', 'G', 'R', 'A', 'P', 'H', + 'P', 'A', 'S', 'S', 'E', 'N', 'G', 'E', 'R', + 'P', 'E', 'N', 'T', 'A', 'G', 'R', 'A', 'M', + 'P', 'E', 'N', 'T', 'A', 'S', 'E', 'M', 'E', + 'P', 'E', 'R', 'E', 'V', 'O', 'D', 'K', 'A', + 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'U', 'M', + 'P', 'E', 'R', 'M', 'A', 'N', 'E', 'N', 'T', + 'P', 'I', 'A', 'S', 'U', 'T', 'O', 'R', 'U', + 'P', 'I', 'N', 'E', 'A', 'P', 'P', 'L', 'E', + 'P', 'I', 'T', 'C', 'H', 'F', 'O', 'R', 'K', + 'P', 'I', 'Z', 'Z', 'I', 'C', 'A', 'T', 'O', + 'P', 'O', 'D', 'V', 'E', 'R', 'T', 'K', 'A', + 'P', 'O', 'R', 'R', 'E', 'C', 'T', 'U', 'S', + 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', 'S', + 'P', 'O', 'V', 'O', 'D', 'N', 'A', 'Y', 'A', + 'P', 'R', 'A', 'M', '-', 'B', 'U', 'O', 'N', + 'P', 'R', 'A', 'M', '-', 'M', 'U', 'O', 'Y', + 'P', 'R', 'E', 'C', 'E', 'D', 'I', 'N', 'G', + 'P', 'R', 'O', 'J', 'E', 'C', 'T', 'O', 'R', + 'P', 'R', 'O', 'L', 'O', 'N', 'G', 'E', 'D', + 'P', 'R', 'O', 'P', 'E', 'L', 'L', 'E', 'R', + 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'N', + 'Q', 'U', 'A', 'D', 'C', 'O', 'L', 'O', 'N', + 'Q', 'U', 'A', 'D', 'R', 'U', 'P', 'L', 'E', + 'Q', 'U', 'I', 'N', 'A', 'R', 'I', 'U', 'S', + 'Q', 'U', 'O', 'T', 'A', 'T', 'I', 'O', 'N', + 'Q', 'U', 'S', 'H', 'S', 'H', 'A', 'Y', 'A', + 'R', 'A', 'H', 'I', 'M', 'A', 'H', 'U', 'M', + 'R', 'E', 'A', 'L', 'G', 'A', 'R', '-', '2', + 'R', 'E', 'C', 'E', 'P', 'T', 'I', 'V', 'E', + 'R', 'E', 'C', 'O', 'R', 'D', 'I', 'N', 'G', + 'R', 'E', 'C', 'T', 'A', 'N', 'G', 'L', 'E', + 'R', 'E', 'C', 'Y', 'C', 'L', 'I', 'N', 'G', + 'R', 'E', 'F', 'E', 'R', 'E', 'N', 'C', 'E', + 'R', 'E', 'G', 'U', 'L', 'U', 'S', '-', '2', + 'R', 'E', 'G', 'U', 'L', 'U', 'S', '-', '3', + 'R', 'E', 'G', 'U', 'L', 'U', 'S', '-', '4', + 'R', 'E', 'P', 'R', 'E', 'S', 'E', 'N', 'T', + 'R', 'E', 'R', 'E', 'N', 'G', 'G', 'A', 'N', + 'R', 'E', 'S', 'H', '-', 'A', 'Y', 'I', 'N', + 'R', 'E', 'S', 'I', 'D', 'E', 'N', 'C', 'E', + 'R', 'E', 'S', 'U', 'P', 'I', 'N', 'U', 'S', + 'R', 'E', 'T', 'R', 'O', 'F', 'L', 'E', 'X', + 'R', 'E', 'V', 'O', 'L', 'V', 'I', 'N', 'G', + 'R', 'I', 'G', 'H', 'T', 'H', 'A', 'N', 'D', + 'R', 'O', 'L', 'L', 'E', 'D', '-', 'U', 'P', + 'R', 'O', 'T', 'A', 'T', 'I', 'O', 'N', 'S', + 'R', 'U', 'D', 'I', 'M', 'E', 'N', 'T', 'A', + 'S', 'A', 'L', 'A', 'A', 'M', 'U', 'H', 'U', + 'S', 'A', 'M', 'A', 'R', 'I', 'T', 'A', 'N', + 'S', 'A', 'T', 'E', 'L', 'L', 'I', 'T', 'E', + 'S', 'A', 'V', 'O', 'U', 'R', 'I', 'N', 'G', + 'S', 'A', 'X', 'O', 'P', 'H', 'O', 'N', 'E', + 'S', 'C', 'A', 'N', 'D', 'I', 'C', 'U', 'S', + 'S', 'C', 'H', 'R', 'O', 'E', 'D', 'E', 'R', + 'S', 'C', 'R', 'E', 'A', 'M', 'I', 'N', 'G', + 'S', 'E', 'B', 'A', 'T', 'B', 'E', 'I', 'T', + 'S', 'E', 'G', 'M', 'E', 'N', 'T', 'E', 'D', + 'S', 'E', 'M', 'I', 'C', 'O', 'L', 'O', 'N', + 'S', 'E', 'M', 'I', 'V', 'O', 'W', 'E', 'L', + 'S', 'E', 'P', 'A', 'R', 'A', 'T', 'E', 'D', + 'S', 'E', 'P', 'A', 'R', 'A', 'T', 'O', 'R', + 'S', 'E', 'P', 'T', 'E', 'M', 'B', 'E', 'R', + 'S', 'E', 'V', 'E', 'N', 'T', 'E', 'E', 'N', + 'S', 'E', 'V', 'E', 'R', 'A', 'N', 'C', 'E', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '3', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '4', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '6', + 'S', 'H', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'S', 'H', 'E', 'U', 'A', 'E', 'Q', 'T', 'U', + 'S', 'H', 'O', 'R', 'T', 'C', 'A', 'K', 'E', + 'S', 'H', 'O', 'R', 'T', 'E', 'N', 'E', 'R', + 'S', 'H', 'O', 'R', 'T', 'H', 'A', 'N', 'D', + 'S', 'I', 'X', 'T', 'E', 'E', 'N', 'T', 'H', + 'S', 'K', 'A', 'M', 'E', 'Y', 'T', 'S', 'A', + 'S', 'L', 'O', 'Z', 'H', 'I', 'T', 'I', 'E', + 'S', 'N', 'O', 'W', 'F', 'L', 'A', 'K', 'E', + 'S', 'P', 'A', 'G', 'H', 'E', 'T', 'T', 'I', + 'S', 'P', 'A', 'R', 'K', 'L', 'I', 'N', 'G', + 'S', 'P', 'E', 'E', 'D', 'B', 'O', 'A', 'T', + 'S', 'P', 'H', 'E', 'R', 'I', 'C', 'A', 'L', + 'S', 'P', 'L', 'A', 'S', 'H', 'I', 'N', 'G', + 'S', 'P', 'L', 'I', 'T', 'T', 'I', 'N', 'G', + 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'S', 'T', 'E', 'M', '-', '1', '2', '3', '4', + 'S', 'T', 'E', 'M', '-', '2', '3', '4', '5', + 'S', 'T', 'O', 'P', 'W', 'A', 'T', 'C', 'H', + 'S', 'T', 'R', 'A', 'T', 'U', 'M', '-', '2', + 'S', 'T', 'R', 'E', 'T', 'C', 'H', 'E', 'D', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '1', '0', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '1', '1', + 'S', 'T', 'U', 'C', 'K', '-', 'O', 'U', 'T', + 'S', 'U', 'B', 'J', 'O', 'I', 'N', 'E', 'D', + 'S', 'U', 'B', 'J', 'O', 'I', 'N', 'E', 'R', + 'S', 'U', 'B', 'L', 'I', 'M', 'A', 'T', 'E', + 'S', 'U', 'B', 'L', 'I', 'N', 'E', 'A', 'R', + 'S', 'U', 'B', 'S', 'C', 'R', 'I', 'P', 'T', + 'S', 'U', 'M', 'M', 'A', 'T', 'I', 'O', 'N', + 'S', 'U', 'N', 'D', 'A', 'N', 'E', 'S', 'E', + 'S', 'U', 'N', 'F', 'L', 'O', 'W', 'E', 'R', + 'S', 'U', 'P', 'E', 'R', 'H', 'E', 'R', 'O', + 'S', 'U', 'P', 'E', 'R', 'V', 'I', 'S', 'E', + 'S', 'Y', 'L', 'L', 'A', 'B', 'I', 'C', 'S', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '1', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '4', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '5', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '6', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '8', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '9', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '1', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '4', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '5', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '6', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '9', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '6', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '8', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '9', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '5', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '8', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '9', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '1', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '4', + 'S', 'Y', 'M', 'M', 'E', 'T', 'R', 'I', 'C', + 'S', 'Y', 'N', 'A', 'G', 'O', 'G', 'U', 'E', + 'S', 'Y', 'N', 'D', 'E', 'S', 'M', 'O', 'S', + 'S', 'Y', 'R', 'M', 'A', 'T', 'I', 'K', 'I', + 'T', 'A', 'B', 'A', 'A', 'R', 'A', 'K', 'A', + 'T', 'A', 'K', 'H', 'A', 'L', 'L', 'U', 'S', + 'T', 'A', 'N', 'G', 'E', 'R', 'I', 'N', 'E', + 'T', 'E', 'L', 'E', 'G', 'R', 'A', 'P', 'H', + 'T', 'E', 'L', 'E', 'P', 'H', 'O', 'N', 'E', + 'T', 'E', 'L', 'E', 'S', 'C', 'O', 'P', 'E', + 'T', 'E', 'N', 'T', 'A', 'C', 'L', 'E', 'S', + 'T', 'E', 'T', 'R', 'A', 'G', 'R', 'A', 'M', + 'T', 'E', 'T', 'R', 'A', 'S', 'E', 'M', 'E', + 'T', 'E', 'U', 'T', 'E', 'U', 'W', 'E', 'N', + 'T', 'H', 'E', 'R', 'E', 'F', 'O', 'R', 'E', + 'T', 'H', 'O', 'U', 'S', 'A', 'N', 'D', 'S', + 'T', 'H', 'R', 'E', 'E', '-', 'D', 'O', 'T', + 'T', 'O', 'U', 'C', 'H', 'T', 'O', 'N', 'E', + 'T', 'R', 'A', 'C', 'K', 'B', 'A', 'L', 'L', + 'T', 'R', 'A', 'P', 'E', 'Z', 'I', 'U', 'M', + 'T', 'R', 'E', 'D', 'E', 'C', 'I', 'L', 'E', + 'T', 'R', 'E', 'M', 'O', 'L', 'O', '-', '1', + 'T', 'R', 'E', 'M', 'O', 'L', 'O', '-', '2', + 'T', 'R', 'E', 'M', 'O', 'L', 'O', '-', '3', + 'T', 'R', 'E', 'S', 'V', 'E', 'T', 'L', 'O', + 'T', 'R', 'E', 'S', 'V', 'E', 'T', 'L', 'Y', + 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', 'S', + 'T', 'R', 'I', 'F', 'O', 'N', 'I', 'A', 'S', + 'T', 'R', 'I', 'G', 'O', 'R', 'G', 'O', 'N', + 'T', 'R', 'I', 'L', 'L', 'I', 'O', 'N', 'S', + 'T', 'R', 'U', 'N', 'C', 'A', 'T', 'E', 'D', + 'T', 'U', 'K', 'W', 'E', 'N', 'T', 'I', 'S', + 'T', 'U', 'R', 'N', 'S', 'T', 'I', 'L', 'E', + 'T', 'U', 'T', 'E', 'Y', 'A', 'S', 'A', 'T', + 'T', 'W', 'E', 'N', 'T', 'I', 'E', 'T', 'H', + 'U', 'K', 'R', 'A', 'I', 'N', 'I', 'A', 'N', + 'U', 'N', 'B', 'L', 'E', 'N', 'D', 'E', 'D', + 'U', 'N', 'D', 'E', 'R', 'L', 'I', 'N', 'E', + 'U', 'N', 'I', 'V', 'E', 'R', 'S', 'A', 'L', + 'U', 'N', 'M', 'A', 'R', 'R', 'I', 'E', 'D', + 'U', 'P', '-', 'F', 'A', 'C', 'I', 'N', 'G', + 'V', 'A', 'R', 'I', 'A', 'T', 'I', 'O', 'N', + 'V', 'E', 'G', 'E', 'T', 'A', 'B', 'L', 'E', + 'V', 'E', 'R', 'D', 'I', 'G', 'R', 'I', 'S', + 'V', 'I', 'B', 'R', 'A', 'T', 'I', 'O', 'N', + 'V', 'I', 'G', 'I', 'N', 'T', 'I', 'L', 'E', + 'V', 'I', 'N', 'E', 'G', 'A', 'R', '-', '2', + 'V', 'I', 'N', 'E', 'G', 'A', 'R', '-', '3', + 'V', 'I', 'S', 'A', 'R', 'G', 'A', 'Y', 'A', + 'V', 'I', 'T', 'R', 'I', 'O', 'L', '-', '2', + 'V', 'O', 'I', 'C', 'E', 'L', 'E', 'S', 'S', + 'W', 'A', '-', 'S', 'A', 'L', 'L', 'A', 'M', + 'W', 'A', 'A', 'A', 'L', 'I', 'H', 'E', 'E', + 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', + 'W', 'A', 'S', 'S', 'A', 'L', 'L', 'A', 'M', + 'W', 'E', 'S', 'T', '-', 'C', 'R', 'E', 'E', + 'W', 'I', 'A', 'N', 'G', 'W', 'A', 'A', 'K', + 'W', 'O', 'R', 'D', 'S', 'P', 'A', 'C', 'E', + 'W', 'R', 'E', 'S', 'T', 'L', 'E', 'R', 'S', + 'Y', 'P', 'O', 'K', 'R', 'I', 'S', 'I', 'S', + 'Z', 'A', 'D', 'E', 'R', 'Z', 'H', 'K', 'A', + 'Z', 'A', 'K', 'R', 'Y', 'T', 'A', 'Y', 'A', + 'Z', 'A', 'N', 'A', 'B', 'A', 'Z', 'A', 'R', + 'Z', 'A', 'P', 'Y', 'A', 'T', 'A', 'Y', 'A', + 'Z', 'A', 'P', 'Y', 'A', 'T', 'Y', 'M', 'I', + 'A', 'C', 'R', 'O', 'P', 'H', 'O', 'N', 'I', 'C', + 'A', 'E', 'D', 'A', '-', 'P', 'I', 'L', 'L', 'A', + 'A', 'E', 'L', 'A', '-', 'P', 'I', 'L', 'L', 'A', + 'A', 'G', 'G', 'R', 'A', 'V', 'A', 'T', 'E', 'D', + 'A', 'L', 'C', 'H', 'E', 'M', 'I', 'C', 'A', 'L', + 'A', 'L', 'P', 'A', 'P', 'R', 'A', 'A', 'N', 'A', + 'A', 'N', 'A', 'T', 'O', 'M', 'I', 'C', 'A', 'L', + 'A', 'N', 'G', 'K', 'H', 'A', 'N', 'K', 'H', 'U', + 'A', 'N', 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', + 'A', 'N', 'T', 'I', 'K', 'E', 'N', 'O', 'M', 'A', + 'A', 'N', 'T', 'I', 'M', 'O', 'N', 'Y', '-', '2', + 'A', 'N', 'U', 'S', 'V', 'A', 'R', 'A', 'Y', 'A', + 'A', 'P', 'O', 'S', 'T', 'R', 'O', 'F', 'O', 'I', + 'A', 'P', 'O', 'S', 'T', 'R', 'O', 'F', 'O', 'S', + 'A', 'P', 'O', 'S', 'T', 'R', 'O', 'P', 'H', 'E', + 'A', 'P', 'P', 'R', 'O', 'A', 'C', 'H', 'E', 'S', + 'A', 'Q', 'U', 'A', 'F', 'O', 'R', 'T', 'I', 'S', + 'A', 'R', 'P', 'E', 'G', 'G', 'I', 'A', 'T', 'O', + 'A', 'R', 'R', 'O', 'W', '-', 'T', 'A', 'I', 'L', + 'A', 'R', 'R', 'O', 'W', 'H', 'E', 'A', 'D', 'S', + 'A', 'S', '-', 'S', 'A', 'L', 'A', 'A', 'T', 'U', + 'A', 'S', 'P', 'I', 'R', 'A', 'T', 'I', 'O', 'N', + 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'C', 'U', 'S', + 'A', 'S', 'T', 'O', 'N', 'I', 'S', 'H', 'E', 'D', + 'A', 'T', 'H', 'A', 'P', 'A', 'S', 'C', 'A', 'N', + 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', + 'A', 'U', 'T', 'O', 'M', 'O', 'B', 'I', 'L', 'E', + 'B', 'A', 'R', 'I', 'Y', 'O', 'O', 'S', 'A', 'N', + 'B', 'A', 'S', 'K', 'E', 'T', 'B', 'A', 'L', 'L', + 'B', 'A', 'T', 'H', 'A', 'M', 'A', 'S', 'A', 'T', + 'B', 'I', 'B', 'L', 'E', '-', 'C', 'R', 'E', 'E', + 'B', 'L', 'O', 'C', 'K', '-', '1', '3', '5', '8', + 'B', 'R', 'I', 'G', 'H', 'T', 'N', 'E', 'S', 'S', + 'C', 'A', 'L', 'C', 'U', 'L', 'A', 'T', 'O', 'R', + 'C', 'E', 'N', 'T', 'R', 'E', 'L', 'I', 'N', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', 'S', + 'C', 'H', 'E', 'L', 'Y', 'U', 'S', 'T', 'K', 'A', + 'C', 'H', 'O', 'P', 'S', 'T', 'I', 'C', 'K', 'S', + 'C', 'H', 'O', 'R', 'A', 'S', 'M', 'I', 'A', 'N', + 'C', 'I', 'R', 'C', 'U', 'M', 'F', 'L', 'E', 'X', + 'C', 'O', 'M', 'M', 'E', 'R', 'C', 'I', 'A', 'L', + 'C', 'O', 'M', 'P', 'L', 'E', 'M', 'E', 'N', 'T', + 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'I', 'O', 'N', + 'C', 'O', 'M', 'P', 'L', 'I', 'A', 'N', 'C', 'E', + 'C', 'O', 'M', 'P', 'R', 'E', 'S', 'S', 'E', 'D', + 'C', 'O', 'N', 'F', 'O', 'U', 'N', 'D', 'E', 'D', + 'C', 'O', 'N', 'J', 'O', 'I', 'N', 'I', 'N', 'G', + 'C', 'O', 'N', 'T', 'A', 'I', 'N', 'I', 'N', 'G', + 'C', 'O', 'N', 'T', 'E', 'N', 'T', 'I', 'O', 'N', + 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'I', 'N', 'G', + 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'O', 'U', 'S', + 'C', 'O', 'N', 'V', 'E', 'R', 'G', 'I', 'N', 'G', + 'C', 'R', 'O', 'S', 'S', 'B', 'O', 'N', 'E', 'S', + 'C', 'R', 'O', 'S', 'S', 'H', 'A', 'T', 'C', 'H', + 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', '-', '2', + 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', '-', '3', + 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', '-', '4', + 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', '-', '5', + 'D', 'A', 'G', 'B', 'A', 'S', 'I', 'N', 'N', 'A', + 'D', 'A', 'N', 'T', 'A', 'Y', 'A', 'L', 'A', 'N', + 'D', 'E', 'C', 'O', 'R', 'A', 'T', 'I', 'O', 'N', + 'D', 'E', 'C', 'O', 'R', 'A', 'T', 'I', 'V', 'E', + 'D', 'E', 'F', 'I', 'N', 'I', 'T', 'I', 'O', 'N', + 'D', 'E', 'P', 'A', 'R', 'T', 'M', 'E', 'N', 'T', + 'D', 'E', 'S', 'C', 'E', 'N', 'D', 'I', 'N', 'G', + 'D', 'E', 'V', 'A', 'N', 'A', 'G', 'A', 'R', 'I', + 'D', 'I', 'F', 'F', 'E', 'R', 'E', 'N', 'C', 'E', + 'D', 'I', 'F', 'F', 'I', 'C', 'U', 'L', 'T', 'Y', + 'D', 'I', 'S', 'P', 'E', 'R', 'S', 'I', 'O', 'N', + 'D', 'I', 'S', 'S', 'O', 'L', 'V', 'E', '-', '2', + 'D', 'I', 'S', 'T', 'O', 'R', 'T', 'I', 'O', 'N', + 'D', 'I', 'V', 'E', 'R', 'G', 'E', 'N', 'C', 'E', + 'D', 'I', 'V', 'I', 'N', 'A', 'T', 'I', 'O', 'N', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', '6', '7', '8', + 'D', 'R', 'U', 'M', 'S', 'T', 'I', 'C', 'K', 'S', + 'D', 'V', 'O', 'E', 'T', 'O', 'C', 'H', 'I', 'E', + 'E', 'I', 'G', 'H', 'T', 'I', 'E', 'T', 'H', 'S', + 'E', 'K', 'S', 'T', 'R', 'E', 'P', 'T', 'O', 'N', + 'E', 'L', 'E', 'C', 'T', 'R', 'I', 'C', 'A', 'L', + 'E', 'M', 'B', 'R', 'O', 'I', 'D', 'E', 'R', 'Y', + 'E', 'N', 'A', 'R', 'M', 'O', 'N', 'I', 'O', 'S', + 'E', 'N', 'C', 'L', 'O', 'S', 'U', 'R', 'E', 'S', + 'E', 'N', 'C', 'O', 'U', 'N', 'T', 'E', 'R', 'S', + 'E', 'N', 'T', '-', 'S', 'H', 'A', 'P', 'E', 'D', + 'E', 'N', 'T', 'E', 'R', 'P', 'R', 'I', 'S', 'E', + 'E', 'N', 'T', 'H', 'U', 'S', 'I', 'A', 'S', 'M', + 'E', 'P', 'E', 'N', 'T', 'H', 'E', 'T', 'I', 'C', + 'E', 'P', 'I', 'D', 'A', 'U', 'R', 'E', 'A', 'N', + 'E', 'P', 'I', 'G', 'R', 'A', 'P', 'H', 'I', 'C', + 'E', 'Q', 'U', 'I', 'H', 'O', 'P', 'P', 'E', 'R', + 'E', 'Q', 'U', 'I', 'V', 'A', 'L', 'E', 'N', 'T', + 'E', 'X', 'C', 'I', 'T', 'E', 'M', 'E', 'N', 'T', + 'E', 'X', 'H', 'A', 'U', 'S', 'T', 'I', 'O', 'N', + 'E', 'X', 'T', 'R', 'A', '-', 'H', 'I', 'G', 'H', + 'E', 'Y', 'E', 'G', 'L', 'A', 'S', 'S', 'E', 'S', + 'F', 'A', 'H', 'R', 'E', 'N', 'H', 'E', 'I', 'T', + 'F', 'E', 'L', 'L', 'O', 'W', 'S', 'H', 'I', 'P', + 'F', 'I', 'X', 'E', 'D', '-', 'F', 'O', 'R', 'M', + 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', + 'F', 'L', 'U', 'T', 'T', 'E', 'R', 'I', 'N', 'G', + 'F', 'O', 'O', 'T', 'P', 'R', 'I', 'N', 'T', 'S', + 'F', 'O', 'R', 'M', 'A', 'T', 'T', 'I', 'N', 'G', + 'F', 'O', 'R', 'T', 'Y', '-', 'F', 'I', 'V', 'E', + 'F', 'U', 'N', 'C', 'T', 'I', 'O', 'N', 'A', 'L', + 'G', 'B', 'A', 'K', 'U', 'R', 'U', 'N', 'E', 'N', + 'G', 'E', 'M', 'I', 'N', 'A', 'T', 'I', 'O', 'N', + 'G', 'I', 'M', 'E', 'L', '-', 'H', 'E', 'T', 'H', + 'G', 'L', 'A', 'G', 'O', 'L', 'I', 'T', 'I', 'C', + 'G', 'O', 'R', 'T', 'H', 'M', 'I', 'K', 'O', 'N', + 'G', 'R', 'A', 'D', 'U', 'A', 'T', 'I', 'O', 'N', + 'H', 'A', 'N', 'D', '-', 'A', 'N', 'G', 'L', 'E', + 'H', 'A', 'N', 'D', '-', 'H', 'I', 'N', 'G', 'E', + 'H', 'E', 'A', 'D', 'S', 'T', 'R', 'O', 'K', 'E', + 'H', 'E', 'L', 'I', 'C', 'O', 'P', 'T', 'E', 'R', + 'H', 'E', 'N', 'T', 'A', 'I', 'G', 'A', 'N', 'A', + 'H', 'E', 'R', 'M', 'I', 'O', 'N', 'I', 'A', 'N', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', + 'H', 'I', 'E', 'U', 'H', '-', 'S', 'I', 'O', 'S', + 'H', 'I', 'G', 'H', '-', 'S', 'P', 'E', 'E', 'D', + 'H', 'O', 'M', 'O', 'T', 'H', 'E', 'T', 'I', 'C', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', + 'H', 'Y', 'S', 'T', 'E', 'R', 'E', 'S', 'I', 'S', + 'I', 'E', 'U', 'N', 'G', '-', 'S', 'I', 'O', 'S', + 'I', 'M', 'I', 'D', 'I', 'A', 'R', 'G', 'O', 'N', + 'I', 'M', 'I', 'F', 'T', 'H', 'O', 'R', 'O', 'N', + 'I', 'M', 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'A', + 'I', 'N', 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'E', + 'I', 'N', 'D', 'U', 'S', 'T', 'R', 'I', 'A', 'L', + 'I', 'N', 'T', 'E', 'R', 'L', 'A', 'C', 'E', 'D', + 'K', 'E', 'U', 'A', 'E', 'T', 'M', 'E', 'U', 'N', + 'K', 'E', 'U', 'K', 'E', 'U', 'T', 'N', 'D', 'A', + 'K', 'E', 'U', 'S', 'H', 'E', 'U', 'A', 'E', 'P', + 'K', 'H', 'A', 'K', 'A', 'S', 'S', 'I', 'A', 'N', + 'K', 'H', 'A', 'R', 'O', 'S', 'H', 'T', 'H', 'I', + 'K', 'I', 'R', 'O', 'G', 'U', 'R', 'A', 'M', 'U', + 'K', 'L', 'Y', 'U', 'C', 'H', 'E', 'V', 'O', 'Y', + 'K', 'R', 'Y', 'U', 'K', 'O', 'V', 'A', 'Y', 'A', + 'K', 'R', 'Y', 'Z', 'H', 'E', 'V', 'A', 'Y', 'A', + 'K', 'U', 'N', 'D', 'D', 'A', 'L', 'I', 'Y', 'A', + 'L', 'A', 'J', 'A', 'N', 'Y', 'A', 'L', 'A', 'N', + 'L', 'E', 'N', 'G', 'T', 'H', 'E', 'N', 'E', 'R', + 'L', 'E', 'N', 'T', 'I', 'C', 'U', 'L', 'A', 'R', + 'L', 'E', 'V', 'I', 'T', 'A', 'T', 'I', 'N', 'G', + 'L', 'I', 'G', 'H', 'T', 'H', 'O', 'U', 'S', 'E', + 'L', 'I', 'M', 'I', 'T', 'A', 'T', 'I', 'O', 'N', + 'L', 'O', 'C', 'O', 'M', 'O', 'T', 'I', 'V', 'E', + 'M', 'A', 'E', 'M', 'B', 'G', 'B', 'I', 'E', 'E', + 'M', 'A', 'G', 'N', 'I', 'F', 'Y', 'I', 'N', 'G', + 'M', 'A', 'N', 'D', 'A', 'I', 'L', 'I', 'N', 'G', + 'M', 'A', 'N', 'I', 'C', 'H', 'A', 'E', 'A', 'N', + 'M', 'E', 'C', 'H', 'A', 'N', 'I', 'C', 'A', 'L', + 'M', 'E', 'M', 'B', 'E', 'R', 'S', 'H', 'I', 'P', + 'M', 'I', 'C', 'R', 'O', 'P', 'H', 'O', 'N', 'E', + 'M', 'I', 'C', 'R', 'O', 'S', 'C', 'O', 'P', 'E', + 'M', 'I', 'D', '-', 'H', 'E', 'I', 'G', 'H', 'T', + 'M', 'I', 'E', 'U', 'M', '-', 'S', 'I', 'O', 'S', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '2', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '3', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '4', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '5', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '6', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '7', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '8', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '9', + 'M', 'O', 'N', 'G', 'K', 'E', 'U', 'A', 'E', 'Q', + 'M', 'O', 'N', 'O', 'F', 'O', 'N', 'I', 'A', 'S', + 'M', 'O', 'N', 'O', 'S', 'T', 'A', 'B', 'L', 'E', + 'M', 'O', 'O', 'S', 'E', '-', 'C', 'R', 'E', 'E', + 'M', 'O', 'T', 'O', 'R', 'C', 'Y', 'C', 'L', 'E', + 'M', 'U', '-', 'G', 'A', 'A', 'H', 'L', 'A', 'A', + 'M', 'V', 'E', 'U', 'A', 'E', 'N', 'G', 'A', 'M', + 'N', 'A', 'A', 'S', 'I', 'K', 'Y', 'A', 'Y', 'A', + 'N', 'A', 'N', 'G', 'M', 'O', 'N', 'T', 'H', 'O', + 'N', 'G', 'G', 'U', 'A', 'E', 'S', 'H', 'A', 'E', + 'N', 'G', 'K', 'U', 'E', 'N', 'Z', 'E', 'U', 'M', + 'N', 'I', 'E', 'U', 'N', '-', 'S', 'I', 'O', 'S', + 'N', 'I', 'K', 'O', 'L', 'S', 'B', 'U', 'R', 'G', + 'N', 'O', 'N', '-', 'J', 'O', 'I', 'N', 'E', 'R', + 'N', 'O', 'N', 'F', 'O', 'R', 'K', 'I', 'N', 'G', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '6', '7', '8', + 'O', 'N', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'O', 'P', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'O', 'P', 'P', 'R', 'E', 'S', 'S', 'I', 'O', 'N', + 'O', 'R', 'T', 'H', 'O', 'G', 'O', 'N', 'A', 'L', + 'O', 'V', 'E', 'R', 'H', 'E', 'A', 'T', 'E', 'D', + 'O', 'V', 'E', 'R', 'S', 'T', 'R', 'U', 'C', 'K', + 'P', 'A', 'I', 'N', 'T', 'B', 'R', 'U', 'S', 'H', + 'P', 'A', 'M', 'P', 'H', 'Y', 'L', 'I', 'A', 'N', + 'P', 'A', 'N', 'A', 'E', 'L', 'A', 'E', 'N', 'G', + 'P', 'A', 'N', 'E', 'U', 'L', 'E', 'U', 'N', 'G', + 'P', 'A', 'N', 'O', 'N', 'G', 'O', 'N', 'A', 'N', + 'P', 'A', 'P', 'E', 'R', 'C', 'L', 'I', 'P', 'S', + 'P', 'A', 'R', 'A', 'P', 'H', 'R', 'A', 'S', 'E', + 'P', 'A', 'S', 'S', 'I', 'M', 'B', 'A', 'N', 'G', + 'P', 'A', 'T', 'H', 'A', 'M', 'A', 'S', 'A', 'T', + 'P', 'E', 'D', 'E', 'S', 'T', 'R', 'I', 'A', 'N', + 'P', 'E', 'N', 'T', 'A', 'T', 'H', 'L', 'O', 'N', + 'P', 'E', 'R', 'C', 'U', 'S', 'S', 'I', 'V', 'E', + 'P', 'E', 'R', 'F', 'O', 'R', 'M', 'I', 'N', 'G', + 'P', 'H', 'A', 'R', 'Y', 'N', 'G', 'E', 'A', 'L', + 'P', 'H', 'I', 'L', 'I', 'P', 'P', 'I', 'N', 'E', + 'P', 'H', 'O', 'E', 'N', 'I', 'C', 'I', 'A', 'N', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', + 'P', 'I', 'N', 'A', 'R', 'B', 'O', 'R', 'A', 'S', + 'P', 'L', 'A', 'Y', 'G', 'R', 'O', 'U', 'N', 'D', + 'P', 'L', 'U', 'S', '-', 'M', 'I', 'N', 'U', 'S', + 'P', 'O', 'D', 'C', 'H', 'A', 'S', 'H', 'I', 'E', + 'P', 'O', 'L', 'K', 'U', 'L', 'I', 'Z', 'M', 'Y', + 'P', 'O', 'S', 'S', 'E', 'S', 'S', 'I', 'O', 'N', + 'P', 'R', 'O', 'H', 'I', 'B', 'I', 'T', 'E', 'D', + 'P', 'R', 'O', 'J', 'E', 'C', 'T', 'I', 'O', 'N', + 'P', 'R', 'O', 'J', 'E', 'C', 'T', 'I', 'V', 'E', + 'P', 'R', 'O', 'L', 'A', 'T', 'I', 'O', 'N', 'E', + 'P', 'R', 'O', 'P', 'O', 'R', 'T', 'I', 'O', 'N', + 'P', 'R', 'O', 'S', 'E', 'R', 'P', 'I', 'N', 'A', + 'P', 'R', 'O', 'T', 'O', 'V', 'A', 'R', 'Y', 'S', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '1', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '2', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '3', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '4', + 'Q', 'U', 'A', 'T', 'E', 'R', 'N', 'I', 'O', 'N', + 'Q', 'U', 'E', 'S', 'T', 'I', 'O', 'N', 'E', 'D', + 'R', 'E', 'C', 'E', 'P', 'T', 'A', 'C', 'L', 'E', + 'R', 'E', 'C', 'I', 'T', 'A', 'T', 'I', 'V', 'E', + 'R', 'E', 'F', 'L', 'E', 'C', 'T', 'I', 'O', 'N', + 'R', 'E', 'G', 'I', 'S', 'T', 'E', 'R', 'E', 'D', + 'R', 'E', 'L', 'A', 'T', 'I', 'O', 'N', 'A', 'L', + 'R', 'E', 'P', 'E', 'T', 'I', 'T', 'I', 'O', 'N', + 'R', 'E', 'S', 'I', 'S', 'T', 'A', 'N', 'C', 'E', + 'R', 'E', 'S', 'O', 'L', 'U', 'T', 'I', 'O', 'N', + 'R', 'E', 'S', 'T', 'R', 'I', 'C', 'T', 'E', 'D', + 'R', 'E', 'V', 'O', 'L', 'U', 'T', 'I', 'O', 'N', + 'R', 'H', 'I', 'N', 'O', 'C', 'E', 'R', 'O', 'S', + 'R', 'I', 'E', 'U', 'L', '-', 'S', 'I', 'O', 'S', + 'R', 'I', 'G', 'H', 'T', '-', 'H', 'A', 'N', 'D', + 'R', 'I', 'G', 'H', 'T', '-', 'S', 'I', 'D', 'E', + 'R', 'I', 'G', 'H', 'T', 'W', 'A', 'R', 'D', 'S', + 'S', 'A', 'L', 'L', 'A', 'L', 'L', 'A', 'H', 'U', + 'S', 'A', 'N', 'S', '-', 'S', 'E', 'R', 'I', 'F', + 'S', 'A', 'T', 'K', 'A', 'A', 'N', 'K', 'U', 'U', + 'S', 'A', 'U', 'R', 'A', 'S', 'H', 'T', 'R', 'A', + 'S', 'E', 'M', 'I', 'B', 'R', 'E', 'V', 'I', 'S', + 'S', 'E', 'M', 'I', 'C', 'I', 'R', 'C', 'L', 'E', + 'S', 'E', 'M', 'I', 'D', 'I', 'R', 'E', 'C', 'T', + 'S', 'E', 'M', 'I', 'M', 'I', 'N', 'I', 'M', 'A', + 'S', 'E', 'Q', 'U', 'E', 'N', 'T', 'I', 'A', 'L', + 'S', 'E', 'S', 'T', 'E', 'R', 'T', 'I', 'U', 'S', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '3', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '4', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '3', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '4', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '3', '4', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '3', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '3', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '4', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '4', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '5', '6', + 'S', 'H', 'A', 'L', 'S', 'H', 'E', 'L', 'E', 'T', + 'S', 'H', 'I', 'Y', 'Y', 'A', 'A', 'L', 'A', 'A', + 'S', 'H', 'O', 'U', 'L', 'D', 'E', 'R', 'E', 'D', + 'S', 'H', 'U', 'E', 'N', 'S', 'H', 'U', 'E', 'T', + 'S', 'I', 'L', 'H', 'O', 'U', 'E', 'T', 'T', 'E', + 'S', 'I', 'M', 'A', 'L', 'U', 'N', 'G', 'U', 'N', + 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', + 'S', 'I', 'N', 'N', 'Y', 'I', 'I', 'Y', 'H', 'E', + 'S', 'I', 'O', 'S', '-', 'C', 'I', 'E', 'U', 'C', + 'S', 'I', 'O', 'S', '-', 'H', 'I', 'E', 'U', 'H', + 'S', 'I', 'O', 'S', '-', 'I', 'E', 'U', 'N', 'G', + 'S', 'I', 'O', 'S', '-', 'M', 'I', 'E', 'U', 'M', + 'S', 'I', 'O', 'S', '-', 'N', 'I', 'E', 'U', 'N', + 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', + 'S', 'I', 'O', 'S', '-', 'R', 'I', 'E', 'U', 'L', + 'S', 'I', 'X', '-', 'P', 'E', 'R', '-', 'E', 'M', + 'S', 'I', 'X', '-', 'S', 'T', 'R', 'I', 'N', 'G', + 'S', 'I', 'X', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'S', 'I', 'X', 'T', 'E', 'E', 'N', 'T', 'H', 'S', + 'S', 'K', 'A', 'T', 'E', 'B', 'O', 'A', 'R', 'D', + 'S', 'S', 'A', 'N', 'G', 'A', 'R', 'A', 'E', 'A', + 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', + 'S', 'S', 'A', 'N', 'G', 'H', 'I', 'E', 'U', 'H', + 'S', 'S', 'A', 'N', 'G', 'I', 'E', 'U', 'N', 'G', + 'S', 'S', 'A', 'N', 'G', 'M', 'I', 'E', 'U', 'M', + 'S', 'S', 'A', 'N', 'G', 'N', 'I', 'E', 'U', 'N', + 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', + 'S', 'S', 'A', 'N', 'G', 'R', 'I', 'E', 'U', 'L', + 'S', 'T', 'A', 'N', 'D', 'S', 'T', 'I', 'L', 'L', + 'S', 'T', 'R', 'A', 'W', 'B', 'E', 'R', 'R', 'Y', + 'S', 'U', 'B', 'H', 'A', 'A', 'N', 'A', 'H', 'U', + 'S', 'U', 'B', 'P', 'U', 'N', 'C', 'T', 'I', 'S', + 'S', 'U', 'B', 'S', 'T', 'I', 'T', 'U', 'T', 'E', + 'S', 'U', 'N', 'G', 'L', 'A', 'S', 'S', 'E', 'S', + 'S', 'U', 'P', 'E', 'R', 'F', 'I', 'X', 'E', 'D', + 'S', 'U', 'S', 'P', 'E', 'N', 'S', 'I', 'O', 'N', + 'T', 'A', 'B', 'U', 'L', 'A', 'T', 'I', 'O', 'N', + 'T', 'A', 'W', 'E', 'L', 'L', 'E', 'M', 'E', 'T', + 'T', 'E', 'L', 'E', 'V', 'I', 'S', 'I', 'O', 'N', + 'T', 'E', 'N', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'T', 'E', 'R', 'M', 'I', 'N', 'A', 'T', 'O', 'R', + 'T', 'E', 'T', 'R', 'A', 'S', 'I', 'M', 'O', 'U', + 'T', 'H', 'I', 'R', 'T', 'Y', '-', 'O', 'N', 'E', + 'T', 'H', 'R', 'E', 'E', '-', 'L', 'I', 'N', 'E', + 'T', 'O', 'O', 'T', 'H', 'B', 'R', 'U', 'S', 'H', + 'T', 'R', 'A', 'N', 'S', 'I', 'S', 'T', 'O', 'R', + 'T', 'R', 'A', 'N', 'S', 'P', 'L', 'U', 'T', 'O', + 'T', 'R', 'I', 'A', 'N', 'G', 'U', 'L', 'A', 'R', + 'T', 'R', 'I', 'F', 'O', 'L', 'I', 'A', 'T', 'E', + 'T', 'R', 'I', 'G', 'R', 'A', 'M', 'M', 'O', 'S', + 'T', 'R', 'O', 'E', 'Z', 'E', 'N', 'I', 'A', 'N', + 'T', 'R', 'O', 'K', 'U', 'T', 'A', 'S', 'T', 'I', + 'T', 'R', 'O', 'L', 'L', 'E', 'Y', 'B', 'U', 'S', + 'T', 'W', 'E', 'N', 'T', 'I', 'E', 'T', 'H', 'S', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'O', 'N', 'E', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'S', 'I', 'X', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'T', 'W', 'O', + 'T', 'W', 'O', '-', 'C', 'I', 'R', 'C', 'L', 'E', + 'T', 'W', 'O', '-', 'H', 'E', 'A', 'D', 'E', 'D', + 'T', 'W', 'O', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'V', 'A', 'K', 'A', 'I', 'Y', 'A', 'R', 'A', 'A', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', 'L', 'Y', + 'V', 'I', 'E', 'T', 'N', 'A', 'M', 'E', 'S', 'E', + 'V', 'I', 'S', 'I', 'G', 'O', 'T', 'H', 'I', 'C', + 'V', 'O', 'L', 'L', 'E', 'Y', 'B', 'A', 'L', 'L', + 'W', 'A', '-', 'T', 'A', 'A', 'A', 'L', 'A', 'A', + 'W', 'A', 'S', '-', 'S', 'A', 'L', 'A', 'A', 'M', + 'W', 'A', 'T', 'E', 'R', 'M', 'E', 'L', 'O', 'N', + 'W', 'H', 'E', 'E', 'L', 'C', 'H', 'A', 'I', 'R', + 'W', 'O', 'O', 'D', 'S', '-', 'C', 'R', 'E', 'E', + 'Y', 'A', 'J', 'U', 'R', 'V', 'E', 'D', 'I', 'C', + 'Z', 'A', 'Y', 'I', 'N', '-', 'Y', 'O', 'D', 'H', + 'A', 'C', 'K', 'N', 'O', 'W', 'L', 'E', 'D', 'G', 'E', + 'A', 'E', 'S', 'C', 'U', 'L', 'A', 'P', 'I', 'U', 'S', + 'A', 'F', 'F', 'R', 'I', 'C', 'A', 'T', 'I', 'O', 'N', + 'A', 'G', 'G', 'R', 'A', 'V', 'A', 'T', 'I', 'O', 'N', + 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'N', 'G', + 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'O', 'N', + 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'V', 'E', + 'A', 'N', 'T', 'I', 'M', 'O', 'N', 'I', 'A', 'T', 'E', + 'A', 'P', 'P', 'L', 'I', 'C', 'A', 'T', 'I', 'O', 'N', + 'A', 'P', 'P', 'R', 'O', 'X', 'I', 'M', 'A', 'T', 'E', + 'A', 'R', 'D', 'H', 'A', 'C', 'A', 'N', 'D', 'R', 'A', + 'A', 'R', 'T', 'I', 'C', 'U', 'L', 'A', 'T', 'E', 'D', + 'A', 'U', 'R', 'I', 'P', 'I', 'G', 'M', 'E', 'N', 'T', + 'A', 'Y', 'I', 'N', '-', 'D', 'A', 'L', 'E', 'T', 'H', + 'B', 'A', 'C', 'K', '-', 'T', 'I', 'L', 'T', 'E', 'D', + 'B', 'A', 'C', 'K', 'S', 'L', 'A', 'N', 'T', 'E', 'D', + 'B', 'H', 'A', 'T', 'T', 'I', 'P', 'R', 'O', 'L', 'U', + 'B', 'L', 'A', 'C', 'K', 'L', 'E', 'T', 'T', 'E', 'R', + 'B', 'L', 'U', 'E', 'B', 'E', 'R', 'R', 'I', 'E', 'S', + 'C', 'A', 'N', 'D', 'R', 'A', 'B', 'I', 'N', 'D', 'U', + 'C', 'E', 'L', 'E', 'B', 'R', 'A', 'T', 'I', 'O', 'N', + 'C', 'I', 'E', 'U', 'C', '-', 'I', 'E', 'U', 'N', 'G', + 'C', 'I', 'E', 'U', 'C', '-', 'P', 'I', 'E', 'U', 'P', + 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'T', 'I', 'O', 'N', + 'C', 'L', 'U', 'B', '-', 'S', 'P', 'O', 'K', 'E', 'D', + 'C', 'O', 'M', 'B', 'I', 'N', 'A', 'T', 'I', 'O', 'N', + 'C', 'O', 'M', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'C', 'O', 'M', 'P', 'R', 'E', 'S', 'S', 'I', 'O', 'N', + 'C', 'O', 'N', 'J', 'U', 'N', 'C', 'T', 'I', 'O', 'N', + 'C', 'O', 'N', 'S', 'E', 'C', 'U', 'T', 'I', 'V', 'E', + 'C', 'O', 'N', 'T', 'R', 'A', 'C', 'T', 'I', 'O', 'N', + 'C', 'O', 'N', 'T', 'R', 'A', 'R', 'I', 'E', 'T', 'Y', + 'C', 'O', 'N', 'V', 'E', 'N', 'I', 'E', 'N', 'C', 'E', + 'C', 'O', 'R', 'P', 'O', 'R', 'A', 'T', 'I', 'O', 'N', + 'C', 'O', 'R', 'R', 'E', 'S', 'P', 'O', 'N', 'D', 'S', + 'C', 'O', 'U', 'N', 'T', 'E', 'R', 'B', 'O', 'R', 'E', + 'C', 'O', 'U', 'N', 'T', 'E', 'R', 'S', 'I', 'N', 'K', + 'C', 'U', 'L', 'T', 'I', 'V', 'A', 'T', 'I', 'O', 'N', + 'D', 'A', 'H', 'Y', 'A', 'A', 'U', 'S', 'H', '-', '2', + 'D', 'A', 'L', 'E', 'T', 'H', '-', 'R', 'E', 'S', 'H', + 'D', 'E', 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'D', 'O', + 'D', 'E', 'L', 'I', 'V', 'E', 'R', 'A', 'N', 'C', 'E', + 'D', 'E', 'M', 'E', 'S', 'T', 'V', 'E', 'N', 'N', 'Y', + 'D', 'E', 'N', 'O', 'M', 'I', 'N', 'A', 'T', 'O', 'R', + 'D', 'E', 'R', 'E', 'T', '-', 'H', 'I', 'D', 'E', 'T', + 'D', 'E', 'S', 'C', 'R', 'I', 'P', 'T', 'I', 'O', 'N', + 'D', 'E', 'V', 'E', 'L', 'O', 'P', 'M', 'E', 'N', 'T', + 'D', 'I', 'A', 'E', 'R', 'E', 'S', 'I', 'Z', 'E', 'D', + 'D', 'I', 'M', 'E', 'N', 'S', 'I', 'O', 'N', 'A', 'L', + 'D', 'I', 'R', 'E', 'C', 'T', 'I', 'O', 'N', 'A', 'L', + 'D', 'I', 'S', 'T', 'I', 'N', 'G', 'U', 'I', 'S', 'H', + 'D', 'O', 'A', 'C', 'H', 'A', 'S', 'H', 'M', 'E', 'E', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', '7', '8', + 'D', 'O', 'U', 'B', 'L', 'E', '-', 'L', 'I', 'N', 'E', + 'D', 'O', 'W', 'N', '-', 'F', 'A', 'C', 'I', 'N', 'G', + 'D', 'O', 'W', 'N', 'S', 'C', 'A', 'L', 'I', 'N', 'G', + 'E', 'A', 'M', 'H', 'A', 'N', 'C', 'H', 'O', 'L', 'L', + 'E', 'K', 'F', 'O', 'N', 'I', 'T', 'I', 'K', 'O', 'N', + 'E', 'L', 'E', 'C', 'T', 'R', 'O', 'N', 'I', 'C', 'S', + 'E', 'N', 'L', 'A', 'R', 'G', 'E', 'M', 'E', 'N', 'T', + 'E', 'N', 'U', 'M', 'E', 'R', 'A', 'T', 'I', 'O', 'N', + 'E', 'Q', 'U', 'I', 'A', 'N', 'G', 'U', 'L', 'A', 'R', + 'E', 'Q', 'U', 'I', 'L', 'A', 'T', 'E', 'R', 'A', 'L', + 'E', 'X', 'C', 'L', 'A', 'M', 'A', 'T', 'I', 'O', 'N', + 'F', 'I', 'N', 'G', 'E', 'R', '-', 'P', 'O', 'S', 'T', + 'F', 'I', 'N', 'G', 'E', 'R', 'N', 'A', 'I', 'L', 'S', + 'F', 'I', 'N', 'G', 'E', 'R', 'P', 'R', 'I', 'N', 'T', + 'F', 'I', 'R', 'E', 'C', 'R', 'A', 'C', 'K', 'E', 'R', + 'F', 'I', 'T', 'Z', 'P', 'A', 'T', 'R', 'I', 'C', 'K', + 'F', 'I', 'V', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'F', 'O', 'U', 'R', '-', 'P', 'E', 'R', '-', 'E', 'M', + 'F', 'O', 'U', 'R', '-', 'S', 'T', 'R', 'I', 'N', 'G', + 'F', 'O', 'U', 'R', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'G', 'A', 'Y', 'A', 'N', 'U', 'K', 'I', 'T', 'T', 'A', + 'G', 'H', 'E', 'U', 'G', 'H', 'E', 'U', 'A', 'E', 'M', + 'G', 'U', 'A', 'R', 'D', 'E', 'D', 'N', 'E', 'S', 'S', + 'H', 'A', 'L', 'F', '-', 'C', 'I', 'R', 'C', 'L', 'E', + 'H', 'A', 'N', 'D', '-', 'C', 'I', 'R', 'C', 'L', 'E', + 'H', 'A', 'U', 'P', 'T', 'S', 'T', 'I', 'M', 'M', 'E', + 'H', 'B', 'A', 'S', 'A', '-', 'E', 'S', 'A', 'S', 'A', + 'H', 'I', 'E', 'U', 'H', '-', 'M', 'I', 'E', 'U', 'M', + 'H', 'I', 'E', 'U', 'H', '-', 'N', 'I', 'E', 'U', 'N', + 'H', 'I', 'E', 'U', 'H', '-', 'P', 'I', 'E', 'U', 'P', + 'H', 'I', 'E', 'U', 'H', '-', 'R', 'I', 'E', 'U', 'L', + 'H', 'I', 'G', 'H', '-', 'H', 'E', 'E', 'L', 'E', 'D', + 'H', 'Y', 'P', 'H', 'E', 'N', 'A', 'T', 'I', 'O', 'N', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', 'I', 'C', + 'I', 'E', 'U', 'N', 'G', '-', 'C', 'I', 'E', 'U', 'C', + 'I', 'E', 'U', 'N', 'G', '-', 'H', 'I', 'E', 'U', 'H', + 'I', 'E', 'U', 'N', 'G', '-', 'M', 'I', 'E', 'U', 'M', + 'I', 'E', 'U', 'N', 'G', '-', 'P', 'I', 'E', 'U', 'P', + 'I', 'E', 'U', 'N', 'G', '-', 'R', 'I', 'E', 'U', 'L', + 'I', 'M', 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'U', 'M', + 'I', 'N', 'D', 'E', 'P', 'E', 'N', 'D', 'E', 'N', 'T', + 'I', 'N', 'F', 'O', 'R', 'M', 'A', 'T', 'I', 'O', 'N', + 'I', 'N', 'T', 'E', 'G', 'R', 'A', 'T', 'I', 'O', 'N', + 'I', 'N', 'T', 'E', 'R', 'C', 'A', 'L', 'A', 'T', 'E', + 'I', 'N', 'T', 'E', 'R', 'L', 'I', 'N', 'E', 'A', 'R', + 'I', 'N', 'T', 'E', 'R', 'L', 'O', 'C', 'K', 'E', 'D', + 'I', 'N', 'T', 'E', 'R', 'R', 'O', 'B', 'A', 'N', 'G', + 'I', 'R', 'O', 'N', '-', 'C', 'O', 'P', 'P', 'E', 'R', + 'J', 'I', 'H', 'V', 'A', 'M', 'U', 'L', 'I', 'Y', 'A', + 'K', 'I', 'R', 'O', 'M', 'E', 'E', 'T', 'O', 'R', 'U', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'S', 'I', 'O', 'S', + 'K', 'L', 'Y', 'U', 'C', 'H', 'E', 'V', 'A', 'Y', 'A', + 'K', 'N', 'I', 'G', 'H', 'T', '-', 'R', 'O', 'O', 'K', + 'L', 'A', 'K', 'K', 'H', 'A', 'N', 'G', 'Y', 'A', 'O', + 'L', 'E', 'F', 'T', '-', 'F', 'A', 'C', 'I', 'N', 'G', + 'L', 'E', 'F', 'T', '-', 'H', 'A', 'N', 'D', 'E', 'D', + 'L', 'E', 'F', 'T', '-', 'S', 'H', 'A', 'D', 'E', 'D', + 'L', 'O', 'N', 'G', '-', 'L', 'E', 'G', 'G', 'E', 'D', + 'L', 'O', 'U', 'D', 'S', 'P', 'E', 'A', 'K', 'E', 'R', + 'L', 'O', 'W', '-', 'F', 'A', 'L', 'L', 'I', 'N', 'G', + 'M', 'A', 'H', 'A', 'A', 'P', 'R', 'A', 'A', 'N', 'A', + 'M', 'A', 'N', 'T', 'E', 'L', 'P', 'I', 'E', 'C', 'E', + 'M', 'E', 'D', 'E', 'F', 'A', 'I', 'D', 'R', 'I', 'N', + 'M', 'I', 'E', 'U', 'M', '-', 'C', 'I', 'E', 'U', 'C', + 'M', 'I', 'E', 'U', 'M', '-', 'H', 'I', 'E', 'U', 'H', + 'M', 'I', 'E', 'U', 'M', '-', 'N', 'I', 'E', 'U', 'N', + 'M', 'I', 'E', 'U', 'M', '-', 'P', 'I', 'E', 'U', 'P', + 'M', 'I', 'E', 'U', 'M', '-', 'R', 'I', 'E', 'U', 'L', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '0', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '1', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '2', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '3', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '4', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '5', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '6', + 'M', 'O', 'N', 'E', 'Y', '-', 'M', 'O', 'U', 'T', 'H', + 'M', 'O', 'N', 'O', 'G', 'R', 'A', 'M', 'M', 'O', 'S', + 'M', 'U', 'L', 'T', 'I', 'O', 'C', 'U', 'L', 'A', 'R', + 'M', 'U', 'U', 'S', 'I', 'K', 'A', 'T', 'O', 'A', 'N', + 'M', 'U', 'U', 'V', 'U', 'Z', 'H', 'A', 'K', 'K', 'U', + 'N', 'A', 'A', 'K', 'S', 'I', 'K', 'Y', 'A', 'Y', 'A', + 'N', 'A', 'N', 'D', 'I', 'N', 'A', 'G', 'A', 'R', 'I', + 'N', 'E', 'B', 'E', 'N', 'S', 'T', 'I', 'M', 'M', 'E', + 'N', 'I', 'E', 'U', 'N', '-', 'C', 'I', 'E', 'U', 'C', + 'N', 'I', 'E', 'U', 'N', '-', 'H', 'I', 'E', 'U', 'H', + 'N', 'I', 'E', 'U', 'N', '-', 'P', 'I', 'E', 'U', 'P', + 'N', 'I', 'E', 'U', 'N', '-', 'R', 'I', 'E', 'U', 'L', + 'N', 'I', 'N', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'N', 'O', 'N', '-', 'P', 'O', 'T', 'A', 'B', 'L', 'E', + 'O', 'B', 'S', 'T', 'R', 'U', 'C', 'T', 'I', 'O', 'N', + 'O', 'C', 'C', 'U', 'L', 'T', 'A', 'T', 'I', 'O', 'N', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '6', '7', '8', + 'O', 'P', 'E', 'N', '-', 'H', 'E', 'A', 'D', 'E', 'D', + 'O', 'R', 'I', 'E', 'N', 'T', 'A', 'T', 'I', 'O', 'N', + 'O', 'V', 'E', 'R', 'L', 'A', 'P', 'P', 'I', 'N', 'G', + 'P', 'A', 'L', 'A', 'T', 'A', 'L', 'I', 'Z', 'E', 'D', + 'P', 'A', 'N', 'G', 'R', 'A', 'N', 'G', 'K', 'E', 'P', + 'P', 'A', 'R', 'A', 'G', 'R', 'A', 'P', 'H', 'O', 'S', + 'P', 'A', 'R', 'A', 'G', 'R', 'A', 'P', 'H', 'U', 'S', + 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', + 'P', 'A', 'R', 'A', 'K', 'L', 'I', 'T', 'I', 'K', 'I', + 'P', 'A', 'R', 'E', 'N', 'T', 'H', 'E', 'S', 'E', 'S', + 'P', 'A', 'R', 'E', 'N', 'T', 'H', 'E', 'S', 'I', 'S', + 'P', 'A', 'R', 'T', 'N', 'E', 'R', 'S', 'H', 'I', 'P', + 'P', 'E', 'D', 'E', 'S', 'T', 'R', 'I', 'A', 'N', 'S', + 'P', 'E', 'N', 'E', 'T', 'R', 'A', 'T', 'I', 'O', 'N', + 'P', 'E', 'R', 'I', 'S', 'P', 'O', 'M', 'E', 'N', 'I', + 'P', 'E', 'R', 'S', 'E', 'V', 'E', 'R', 'I', 'N', 'G', + 'P', 'E', 'R', 'S', 'P', 'E', 'C', 'T', 'I', 'V', 'E', + 'P', 'I', 'E', 'U', 'P', '-', 'C', 'I', 'E', 'U', 'C', + 'P', 'I', 'E', 'U', 'P', '-', 'H', 'I', 'E', 'U', 'H', + 'P', 'I', 'E', 'U', 'P', '-', 'M', 'I', 'E', 'U', 'M', + 'P', 'I', 'E', 'U', 'P', '-', 'N', 'I', 'E', 'U', 'N', + 'P', 'I', 'E', 'U', 'P', '-', 'R', 'I', 'E', 'U', 'L', + 'P', 'I', 'P', 'A', 'E', 'M', 'G', 'B', 'I', 'E', 'E', + 'P', 'L', 'A', 'C', 'E', 'H', 'O', 'L', 'D', 'E', 'R', + 'P', 'O', 'D', 'C', 'H', 'A', 'S', 'H', 'I', 'E', 'M', + 'P', 'R', 'E', 'C', 'I', 'P', 'I', 'T', 'A', 'T', 'E', + 'P', 'U', 'N', 'C', 'T', 'U', 'A', 'T', 'I', 'O', 'N', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '1', '2', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '1', '3', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '1', '4', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '2', '3', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '2', '4', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '3', '4', + 'R', 'A', 'D', 'I', 'O', 'A', 'C', 'T', 'I', 'V', 'E', + 'R', 'A', 'H', 'M', 'A', 'T', 'U', 'L', 'L', 'A', 'H', + 'R', 'E', 'C', 'T', 'A', 'N', 'G', 'U', 'L', 'A', 'R', + 'R', 'E', 'C', 'T', 'I', 'L', 'I', 'N', 'E', 'A', 'R', + 'R', 'E', 'P', 'L', 'A', 'C', 'E', 'M', 'E', 'N', 'T', + 'R', 'I', 'E', 'U', 'L', '-', 'C', 'I', 'E', 'U', 'C', + 'R', 'I', 'E', 'U', 'L', '-', 'H', 'I', 'E', 'U', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', + 'R', 'I', 'E', 'U', 'L', '-', 'N', 'I', 'E', 'U', 'N', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', + 'R', 'I', 'N', 'F', 'O', 'R', 'Z', 'A', 'N', 'D', 'O', + 'S', 'A', 'C', 'R', 'I', 'F', 'I', 'C', 'I', 'A', 'L', + 'S', 'A', 'G', 'I', 'T', 'T', 'A', 'R', 'I', 'U', 'S', + 'S', 'A', 'L', 'L', 'A', 'L', 'L', 'A', 'A', 'H', 'U', + 'S', 'A', 'L', 'L', 'A', 'L', 'L', 'A', 'H', 'O', 'U', + 'S', 'C', 'R', 'E', 'W', 'D', 'R', 'I', 'V', 'E', 'R', + 'S', 'E', 'E', '-', 'N', 'O', '-', 'E', 'V', 'I', 'L', + 'S', 'E', 'M', 'I', '-', 'V', 'O', 'I', 'C', 'E', 'D', + 'S', 'E', 'M', 'I', 'S', 'E', 'X', 'T', 'I', 'L', 'E', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '3', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '4', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '3', '4', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '3', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '3', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '4', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '4', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '3', '4', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '3', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '3', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '4', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '4', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '3', '4', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '3', '4', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '3', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '4', '5', '6', + 'S', 'H', 'U', 'T', 'T', 'L', 'E', 'C', 'O', 'C', 'K', + 'S', 'I', 'G', 'N', 'W', 'R', 'I', 'T', 'I', 'N', 'G', + 'S', 'I', 'N', 'G', 'L', 'E', '-', 'L', 'I', 'N', 'E', + 'S', 'I', 'N', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', + 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'S', 'I', 'O', 'S', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'S', 'I', 'X', 'T', 'E', 'E', 'N', 'T', 'H', '-', '1', + 'S', 'I', 'X', 'T', 'E', 'E', 'N', 'T', 'H', '-', '2', + 'S', 'N', 'O', 'W', 'B', 'O', 'A', 'R', 'D', 'E', 'R', + 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', + 'S', 'S', 'A', 'N', 'G', 'T', 'I', 'K', 'E', 'U', 'T', + 'S', 'T', 'E', 'T', 'H', 'O', 'S', 'C', 'O', 'P', 'E', + 'S', 'U', 'B', 'L', 'I', 'M', 'A', 'T', 'E', '-', '2', + 'S', 'U', 'B', 'L', 'I', 'M', 'A', 'T', 'E', '-', '3', + 'S', 'U', 'B', 'L', 'I', 'M', 'A', 'T', 'I', 'O', 'N', + 'S', 'U', 'B', 'T', 'R', 'A', 'C', 'T', 'I', 'O', 'N', + 'S', 'U', 'P', 'E', 'R', 'S', 'C', 'R', 'I', 'P', 'T', + 'S', 'U', 'P', 'R', 'A', 'L', 'I', 'N', 'E', 'A', 'R', + 'S', 'Y', 'N', 'C', 'H', 'R', 'O', 'N', 'O', 'U', 'S', + 'T', 'E', 'T', 'R', 'A', 'F', 'O', 'N', 'I', 'A', 'S', + 'T', 'H', 'A', 'N', 'T', 'H', 'A', 'K', 'H', 'A', 'T', + 'T', 'H', 'E', 'M', 'A', 'T', 'I', 'S', 'M', 'O', 'S', + 'T', 'H', 'E', 'R', 'M', 'O', 'M', 'E', 'T', 'E', 'R', + 'T', 'H', 'I', 'R', 'D', '-', 'S', 'T', 'A', 'G', 'E', + 'T', 'H', 'I', 'R', 'T', 'Y', '-', 'F', 'I', 'V', 'E', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'S', 'I', 'O', 'S', + 'T', 'O', 'A', 'N', 'D', 'A', 'K', 'H', 'I', 'A', 'T', + 'T', 'O', 'P', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', + 'T', 'R', 'A', 'D', 'I', 'T', 'I', 'O', 'N', 'A', 'L', + 'T', 'R', 'A', 'N', 'S', 'V', 'E', 'R', 'S', 'A', 'L', + 'T', 'R', 'E', 'S', 'V', 'E', 'T', 'L', 'A', 'Y', 'A', + 'T', 'R', 'I', 'T', 'I', 'M', 'O', 'R', 'I', 'O', 'N', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'F', 'I', 'V', 'E', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'F', 'O', 'U', 'R', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'N', 'I', 'N', 'E', + 'U', 'N', 'A', 'S', 'P', 'I', 'R', 'A', 'T', 'E', 'D', + 'U', 'N', 'C', 'E', 'R', 'T', 'A', 'I', 'N', 'T', 'Y', + 'U', 'P', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'U', 'P', 'A', 'D', 'H', 'M', 'A', 'N', 'I', 'Y', 'A', + 'U', 'P', 'S', 'I', 'D', 'E', '-', 'D', 'O', 'W', 'N', + 'V', 'A', 'M', 'A', 'G', 'O', 'M', 'U', 'K', 'H', 'A', + 'W', 'A', 'S', 'T', 'E', 'B', 'A', 'S', 'K', 'E', 'T', + 'W', 'E', 'I', 'E', 'R', 'S', 'T', 'R', 'A', 'S', 'S', + 'W', 'I', 'D', 'E', '-', 'H', 'E', 'A', 'D', 'E', 'D', + 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', + 'A', 'B', 'B', 'R', 'E', 'V', 'I', 'A', 'T', 'I', 'O', 'N', + 'A', 'C', 'C', 'U', 'M', 'U', 'L', 'A', 'T', 'I', 'O', 'N', + 'A', 'C', 'U', 'T', 'E', '-', 'M', 'A', 'C', 'R', 'O', 'N', + 'A', 'K', 'T', 'I', 'E', 'S', 'E', 'L', 'S', 'K', 'A', 'B', + 'A', 'M', 'A', 'L', 'G', 'A', 'M', 'A', 'T', 'I', 'O', 'N', + 'A', 'N', 'A', 'T', 'R', 'I', 'C', 'H', 'I', 'S', 'M', 'A', + 'A', 'N', 'T', 'A', 'R', 'G', 'O', 'M', 'U', 'K', 'H', 'A', + 'A', 'R', 'A', 'B', 'I', 'C', '-', 'I', 'N', 'D', 'I', 'C', + 'A', 'R', 'D', 'H', 'A', 'V', 'I', 'S', 'A', 'R', 'G', 'A', + 'A', 'S', 'T', 'R', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', + 'A', 'S', 'T', 'R', 'O', 'N', 'O', 'M', 'I', 'C', 'A', 'L', + 'A', 'T', 'H', '-', 'T', 'H', 'A', 'L', 'A', 'T', 'H', 'A', + 'A', 'T', 'H', 'A', 'R', 'V', 'A', 'V', 'E', 'D', 'I', 'C', + 'A', 'U', 'G', 'M', 'E', 'N', 'T', 'A', 'T', 'I', 'O', 'N', + 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', '-', '2', + 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', 'H', 'A', + 'B', 'A', 'H', 'I', 'R', 'G', 'O', 'M', 'U', 'K', 'H', 'A', + 'B', 'L', 'A', 'C', 'K', '-', 'L', 'E', 'T', 'T', 'E', 'R', + 'B', 'R', 'E', 'A', 'K', 'T', 'H', 'R', 'O', 'U', 'G', 'H', + 'B', 'R', 'E', 'V', 'E', '-', 'M', 'A', 'C', 'R', 'O', 'N', + 'C', '-', 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', + 'C', 'A', 'B', 'B', 'A', 'G', 'E', '-', 'T', 'R', 'E', 'E', + 'C', 'A', 'N', 'C', 'E', 'L', 'L', 'A', 'T', 'I', 'O', 'N', + 'C', 'A', 'N', 'T', 'I', 'L', 'L', 'A', 'T', 'I', 'O', 'N', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'S', 'I', 'O', 'S', + 'C', 'O', 'N', 'S', 'T', 'R', 'U', 'C', 'T', 'I', 'O', 'N', + 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'A', 'T', 'I', 'O', 'N', + 'C', 'R', 'O', 'S', 'S', 'E', 'D', '-', 'T', 'A', 'I', 'L', + 'C', 'Y', 'L', 'I', 'N', 'D', 'R', 'I', 'C', 'I', 'T', 'Y', + 'C', 'Y', 'P', 'R', 'O', '-', 'M', 'I', 'N', 'O', 'A', 'N', + 'D', 'E', 'C', 'I', 'S', 'I', 'V', 'E', 'N', 'E', 'S', 'S', + 'D', 'I', 'F', 'F', 'E', 'R', 'E', 'N', 'T', 'I', 'A', 'L', + 'D', 'I', 'F', 'F', 'I', 'C', 'U', 'L', 'T', 'I', 'E', 'S', + 'D', 'I', 'M', 'I', 'N', 'I', 'S', 'H', 'M', 'E', 'N', 'T', + 'D', 'I', 'M', 'I', 'N', 'U', 'T', 'I', 'O', 'N', '-', '1', + 'D', 'I', 'M', 'I', 'N', 'U', 'T', 'I', 'O', 'N', '-', '2', + 'D', 'I', 'M', 'I', 'N', 'U', 'T', 'I', 'O', 'N', '-', '3', + 'D', 'I', 'S', 'A', 'P', 'P', 'O', 'I', 'N', 'T', 'E', 'D', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', '7', '8', + 'D', 'O', 'U', 'B', 'L', 'E', '-', 'E', 'N', 'D', 'E', 'D', + 'D', 'O', 'U', 'B', 'L', 'E', '-', 'L', 'I', 'N', 'E', 'D', + 'D', 'V', 'O', 'E', 'C', 'H', 'E', 'L', 'N', 'A', 'Y', 'A', + 'E', 'I', 'G', 'H', 'T', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'E', 'R', 'R', 'O', 'R', '-', 'B', 'A', 'R', 'R', 'E', 'D', + 'E', 'X', 'T', 'I', 'N', 'G', 'U', 'I', 'S', 'H', 'E', 'R', + 'F', 'L', 'E', 'U', 'R', '-', 'D', 'E', '-', 'L', 'I', 'S', + 'F', 'R', 'O', 'N', 'T', '-', 'F', 'A', 'C', 'I', 'N', 'G', + 'F', 'R', 'O', 'N', 'T', '-', 'T', 'I', 'L', 'T', 'E', 'D', + 'G', 'A', 'E', 'T', 'T', 'A', '-', 'P', 'I', 'L', 'L', 'A', + 'G', 'H', 'E', 'U', 'A', 'E', 'G', 'H', 'E', 'U', 'A', 'E', + 'G', 'R', 'A', 'V', 'E', '-', 'M', 'A', 'C', 'R', 'O', 'N', + 'G', 'R', 'E', 'A', 'T', 'E', 'R', '-', 'T', 'H', 'A', 'N', + 'G', 'R', 'O', 'N', 'T', 'H', 'I', 'S', 'M', 'A', 'T', 'A', + 'H', 'E', 'A', 'D', '-', 'B', 'A', 'N', 'D', 'A', 'G', 'E', + 'H', 'E', 'A', 'R', '-', 'N', 'O', '-', 'E', 'V', 'I', 'L', + 'H', 'E', 'A', 'R', 'T', '-', 'S', 'H', 'A', 'P', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', 'I', 'C', + 'H', 'I', 'P', 'P', 'O', 'P', 'O', 'T', 'A', 'M', 'U', 'S', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', 'L', 'Y', + 'H', 'Y', 'P', 'H', 'E', 'N', '-', 'M', 'I', 'N', 'U', 'S', + 'H', 'Y', 'P', 'O', 'D', 'I', 'A', 'S', 'T', 'O', 'L', 'E', + 'I', 'C', 'E', 'L', 'A', 'N', 'D', 'I', 'C', '-', 'Y', 'R', + 'I', 'E', 'U', 'N', 'G', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'I', 'E', 'U', 'N', 'G', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'I', 'N', 'S', 'T', 'R', 'U', 'M', 'E', 'N', 'T', 'A', 'L', + 'I', 'N', 'T', 'E', 'R', 'S', 'E', 'C', 'T', 'I', 'N', 'G', + 'I', 'N', 'T', 'E', 'R', 'S', 'E', 'C', 'T', 'I', 'O', 'N', + 'I', 'N', 'V', 'E', 'R', 'T', 'E', 'B', 'R', 'A', 'T', 'E', + 'J', '-', 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', + 'K', 'I', 'N', 'D', 'E', 'R', 'G', 'A', 'R', 'T', 'E', 'N', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'H', 'I', 'E', 'U', 'H', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'N', 'I', 'E', 'U', 'N', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'P', 'I', 'E', 'U', 'P', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'R', 'I', 'E', 'U', 'L', + 'K', 'N', 'I', 'G', 'H', 'T', '-', 'Q', 'U', 'E', 'E', 'N', + 'L', 'E', 'F', 'T', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', + 'M', 'A', 'C', 'R', 'O', 'N', '-', 'A', 'C', 'U', 'T', 'E', + 'M', 'A', 'C', 'R', 'O', 'N', '-', 'B', 'R', 'E', 'V', 'E', + 'M', 'A', 'C', 'R', 'O', 'N', '-', 'G', 'R', 'A', 'V', 'E', + 'M', 'A', 'T', 'H', 'E', 'M', 'A', 'T', 'I', 'C', 'A', 'L', + 'M', 'E', 'U', 'N', 'J', 'O', 'M', 'N', 'D', 'E', 'U', 'Q', + 'M', 'I', 'D', 'D', 'L', 'E', '-', 'W', 'E', 'L', 'S', 'H', + 'M', 'I', 'E', 'U', 'M', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'M', 'I', 'E', 'U', 'M', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'N', 'A', 'S', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', + 'N', 'D', 'A', 'A', 'N', 'G', 'G', 'E', 'U', 'A', 'E', 'T', + 'N', 'I', 'E', 'U', 'N', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'N', 'I', 'E', 'U', 'N', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'N', 'O', 'N', '-', 'B', 'R', 'E', 'A', 'K', 'I', 'N', 'G', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '5', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '5', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', '6', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '4', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '5', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '4', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '3', '5', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '4', '5', '6', '7', '8', + 'P', 'H', 'I', 'E', 'U', 'P', 'H', '-', 'S', 'I', 'O', 'S', + 'P', 'H', 'I', 'L', 'O', 'S', 'O', 'P', 'H', 'E', 'R', 'S', + 'P', 'I', 'E', 'U', 'P', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'P', 'I', 'E', 'U', 'P', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'P', 'O', 'S', 'T', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'P', 'R', 'E', 'S', 'C', 'R', 'I', 'P', 'T', 'I', 'O', 'N', + 'P', 'R', 'E', 'S', 'E', 'N', 'T', 'A', 'T', 'I', 'O', 'N', + 'P', 'R', 'O', 'P', 'O', 'R', 'T', 'I', 'O', 'N', 'A', 'L', + 'P', 'U', 'T', 'R', 'E', 'F', 'A', 'C', 'T', 'I', 'O', 'N', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '1', '2', '3', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '1', '2', '4', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '1', '3', '4', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '2', '3', '4', + 'Q', 'U', 'I', 'N', 'D', 'I', 'C', 'E', 'S', 'I', 'M', 'A', + 'Q', 'U', 'I', 'N', 'T', 'E', 'S', 'S', 'E', 'N', 'C', 'E', + 'R', 'E', 'C', 'R', 'E', 'A', 'T', 'I', 'O', 'N', 'A', 'L', + 'R', 'I', 'E', 'U', 'L', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'R', 'I', 'E', 'U', 'L', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'R', 'I', 'G', 'H', 'T', '-', 'F', 'A', 'C', 'I', 'N', 'G', + 'R', 'I', 'G', 'H', 'T', '-', 'H', 'A', 'N', 'D', 'E', 'D', + 'R', 'I', 'G', 'H', 'T', '-', 'S', 'H', 'A', 'D', 'E', 'D', + 'R', 'O', 'U', 'N', 'D', '-', 'T', 'I', 'P', 'P', 'E', 'D', + 'R', 'U', 'L', 'E', '-', 'D', 'E', 'L', 'A', 'Y', 'E', 'D', + 'S', 'A', 'L', '-', 'A', 'M', 'M', 'O', 'N', 'I', 'A', 'C', + 'S', 'E', 'M', 'I', 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'R', + 'S', 'E', 'V', 'E', 'N', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '3', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '4', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '3', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '4', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '3', '4', '5', '6', + 'S', 'I', 'M', 'U', 'L', 'T', 'A', 'N', 'E', 'O', 'U', 'S', + 'S', 'I', 'O', 'S', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'S', 'I', 'O', 'S', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'S', 'I', 'O', 'S', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'S', 'I', 'O', 'S', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'S', 'I', 'O', 'S', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'S', 'I', 'X', 'T', 'Y', '-', 'F', 'O', 'U', 'R', 'T', 'H', + 'S', 'O', 'U', 'T', 'H', '-', 'S', 'L', 'A', 'V', 'E', 'Y', + 'S', 'P', 'R', 'E', 'C', 'H', 'G', 'E', 'S', 'A', 'N', 'G', + 'S', 'S', 'A', 'N', 'G', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'S', 'T', 'E', 'N', 'O', 'G', 'R', 'A', 'P', 'H', 'I', 'C', + 'S', 'T', 'R', 'A', 'G', 'G', 'I', 'S', 'M', 'A', 'T', 'A', + 'S', 'T', 'R', 'A', 'I', 'G', 'H', 'T', 'N', 'E', 'S', 'S', + 'S', 'U', 'B', 'S', 'T', 'I', 'T', 'U', 'T', 'I', 'O', 'N', + 'S', 'U', 'P', 'E', 'R', 'I', 'M', 'P', 'O', 'S', 'E', 'D', + 'S', 'U', 'P', 'E', 'R', 'V', 'I', 'L', 'L', 'A', 'I', 'N', + 'T', 'H', 'R', 'E', 'E', '-', 'C', 'I', 'R', 'C', 'L', 'E', + 'T', 'H', 'R', 'E', 'E', '-', 'L', 'E', 'G', 'G', 'E', 'D', + 'T', 'H', 'R', 'E', 'E', '-', 'P', 'E', 'R', '-', 'E', 'M', + 'T', 'H', 'R', 'E', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'T', 'H', 'U', 'N', 'D', 'E', 'R', 'S', 'T', 'O', 'R', 'M', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'C', 'I', 'E', 'U', 'C', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'M', 'I', 'E', 'U', 'M', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'P', 'I', 'E', 'U', 'P', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'R', 'I', 'E', 'U', 'L', + 'T', 'R', 'A', 'N', 'S', 'M', 'I', 'S', 'S', 'I', 'O', 'N', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'E', 'I', 'G', 'H', 'T', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'S', 'E', 'V', 'E', 'N', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'T', 'H', 'R', 'E', 'E', + 'V', 'O', 'C', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', + 'W', 'E', 'D', 'G', 'E', '-', 'T', 'A', 'I', 'L', 'E', 'D', + 'X', 'S', 'H', 'A', 'A', 'Y', 'A', 'T', 'H', 'I', 'Y', 'A', + 'Y', 'O', 'U', 'T', 'H', 'F', 'U', 'L', 'N', 'E', 'S', 'S', + 'Z', 'I', 'P', 'P', 'E', 'R', '-', 'M', 'O', 'U', 'T', 'H', + 'A', 'C', 'C', 'O', 'M', 'M', 'O', 'D', 'A', 'T', 'I', 'O', 'N', + 'A', 'N', 'T', 'I', 'C', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', + 'A', 'P', 'P', 'R', 'O', 'X', 'I', 'M', 'A', 'T', 'E', 'L', 'Y', + 'A', 'R', 'G', 'O', 'S', 'Y', 'N', 'T', 'H', 'E', 'T', 'O', 'N', + 'A', 'V', 'A', 'K', 'R', 'A', 'H', 'A', 'S', 'A', 'N', 'Y', 'A', + 'B', 'O', 'T', 'T', 'O', 'M', '-', 'S', 'H', 'A', 'D', 'E', 'D', + 'C', 'H', 'I', 'E', 'U', 'C', 'H', '-', 'H', 'I', 'E', 'U', 'H', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'C', 'I', 'E', 'U', 'C', + 'C', 'H', 'R', 'Y', 'S', 'A', 'N', 'T', 'H', 'E', 'M', 'U', 'M', + 'C', 'L', 'U', 'S', 'T', 'E', 'R', '-', 'F', 'I', 'N', 'A', 'L', + 'C', 'O', 'M', 'P', 'A', 'T', 'I', 'B', 'I', 'L', 'I', 'T', 'Y', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '8', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '9', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '6', '0', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '6', '1', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '6', '2', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '6', '3', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '6', '4', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '6', '5', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '6', '6', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '6', '7', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '6', '8', + 'C', 'O', 'N', 'C', 'A', 'V', 'E', '-', 'S', 'I', 'D', 'E', 'D', + 'C', 'O', 'N', 'T', 'E', 'M', 'P', 'L', 'A', 'T', 'I', 'O', 'N', + 'C', 'R', 'Y', 'P', 'T', 'O', 'G', 'R', 'A', 'M', 'M', 'I', 'C', + 'D', 'E', 'F', 'E', 'C', 'T', 'I', 'V', 'E', 'N', 'E', 'S', 'S', + 'D', 'I', 'S', 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'O', 'U', 'S', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', '7', '8', + 'D', 'O', 'U', 'B', 'L', 'E', '-', 'S', 'T', 'R', 'U', 'C', 'K', + 'D', 'O', 'W', 'N', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'D', 'R', 'O', 'P', '-', 'S', 'H', 'A', 'D', 'O', 'W', 'E', 'D', + 'E', 'G', 'Y', 'P', 'T', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', + 'E', 'L', 'E', 'V', 'E', 'N', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'E', 'M', 'B', 'E', 'L', 'L', 'I', 'S', 'H', 'M', 'E', 'N', 'T', + 'E', 'U', 'R', 'O', '-', 'C', 'U', 'R', 'R', 'E', 'N', 'C', 'Y', + 'E', 'U', 'R', 'O', 'P', 'E', '-', 'A', 'F', 'R', 'I', 'C', 'A', + 'G', 'E', 'O', 'M', 'E', 'T', 'R', 'I', 'C', 'A', 'L', 'L', 'Y', + 'H', 'A', 'N', 'D', '-', 'C', 'U', 'R', 'L', 'I', 'C', 'U', 'E', + 'H', 'E', 'L', 'L', 'S', 'C', 'H', 'R', 'E', 'I', 'B', 'E', 'R', + 'I', 'E', 'U', 'N', 'G', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'I', 'E', 'U', 'N', 'G', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'I', 'E', 'U', 'N', 'G', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'I', 'E', 'U', 'N', 'G', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'I', 'E', 'U', 'N', 'G', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'I', 'N', 'S', 'C', 'R', 'I', 'P', 'T', 'I', 'O', 'N', 'A', 'L', + 'I', 'N', 'T', 'E', 'R', 'P', 'O', 'L', 'A', 'T', 'I', 'O', 'N', + 'I', 'N', 'T', 'E', 'R', 'S', 'Y', 'L', 'L', 'A', 'B', 'I', 'C', + 'J', 'U', 'D', 'E', 'O', '-', 'S', 'P', 'A', 'N', 'I', 'S', 'H', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'M', 'I', 'E', 'U', 'M', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'R', 'I', 'E', 'U', 'L', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'K', 'N', 'I', 'G', 'H', 'T', '-', 'B', 'I', 'S', 'H', 'O', 'P', + 'L', 'A', 'B', 'I', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', + 'L', 'E', 'F', 'T', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'L', 'E', 'F', 'T', '-', 'T', 'O', '-', 'R', 'I', 'G', 'H', 'T', + 'M', 'I', 'C', 'R', 'O', 'C', 'O', 'M', 'P', 'U', 'T', 'E', 'R', + 'M', 'I', 'E', 'U', 'M', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'M', 'I', 'E', 'U', 'M', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'M', 'I', 'N', 'U', 'S', '-', 'O', 'R', '-', 'P', 'L', 'U', 'S', + 'M', 'O', 'R', 'P', 'H', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', + 'N', 'I', 'E', 'U', 'N', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'N', 'I', 'E', 'U', 'N', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'N', 'I', 'E', 'U', 'N', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '5', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '5', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '4', '5', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '5', '6', '7', '8', + 'O', 'P', 'E', 'N', '-', 'O', 'U', 'T', 'L', 'I', 'N', 'E', 'D', + 'P', 'A', 'N', 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', + 'P', 'A', 'R', 'A', 'L', 'L', 'E', 'L', 'O', 'G', 'R', 'A', 'M', + 'P', 'A', 'R', 'E', 'N', 'T', 'H', 'E', 'S', 'I', 'Z', 'E', 'D', + 'P', 'A', 'R', 'E', 'S', 'T', 'I', 'G', 'M', 'E', 'N', 'O', 'N', + 'P', 'E', 'R', 'P', 'E', 'N', 'D', 'I', 'C', 'U', 'L', 'A', 'R', + 'P', 'H', 'I', 'E', 'U', 'P', 'H', '-', 'H', 'I', 'E', 'U', 'H', + 'P', 'H', 'I', 'E', 'U', 'P', 'H', '-', 'P', 'I', 'E', 'U', 'P', + 'P', 'I', 'E', 'U', 'P', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'P', 'I', 'E', 'U', 'P', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'P', 'I', 'E', 'U', 'P', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'P', 'I', 'E', 'U', 'P', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'P', 'O', 'L', 'U', 'P', 'O', 'V', 'O', 'D', 'N', 'A', 'Y', 'A', + 'P', 'R', 'E', 'P', 'O', 'N', 'D', 'E', 'R', 'A', 'N', 'C', 'E', + 'P', 'R', 'I', 'S', 'H', 'T', 'H', 'A', 'M', 'A', 'T', 'R', 'A', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '-', '1', '2', '3', '4', + 'R', 'E', 'D', 'U', 'P', 'L', 'I', 'C', 'A', 'T', 'I', 'O', 'N', + 'R', 'I', 'E', 'U', 'L', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'R', 'I', 'G', 'H', 'T', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', + 'R', 'I', 'G', 'H', 'T', '-', 'T', 'O', '-', 'L', 'E', 'F', 'T', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '5', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', '6', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', '6', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'A', 'R', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'Y', 'R', + 'S', 'I', 'X', 'T', 'Y', '-', 'F', 'O', 'U', 'R', 'T', 'H', 'S', + 'S', 'P', 'E', 'A', 'K', '-', 'N', 'O', '-', 'E', 'V', 'I', 'L', + 'S', 'S', 'A', 'N', 'G', 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', + 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'I', 'S', 'S', 'I', 'M', 'O', + 'S', 'T', 'R', 'I', 'K', 'E', 'T', 'H', 'R', 'O', 'U', 'G', 'H', + 'T', 'E', 'T', 'A', 'R', 'T', 'I', 'M', 'O', 'R', 'I', 'O', 'N', + 'T', 'H', 'E', 'R', 'M', 'O', 'D', 'Y', 'N', 'A', 'M', 'I', 'C', + 'T', 'H', 'I', 'R', 'T', 'Y', '-', 'S', 'E', 'C', 'O', 'N', 'D', + 'T', 'H', 'R', 'E', 'E', '-', 'Q', 'U', 'A', 'R', 'T', 'E', 'R', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'T', 'R', 'A', 'N', 'S', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'T', 'U', 'L', 'U', '-', 'T', 'I', 'G', 'A', 'L', 'A', 'R', 'I', + 'T', 'W', 'E', 'L', 'V', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'E', 'I', 'G', 'H', 'T', 'H', + 'V', 'I', 'D', 'E', 'O', 'C', 'A', 'S', 'S', 'E', 'T', 'T', 'E', + 'V', 'O', 'W', 'E', 'L', '-', 'C', 'A', 'R', 'R', 'I', 'E', 'R', + 'W', 'A', 'W', '-', 'A', 'Y', 'I', 'N', '-', 'R', 'E', 'S', 'H', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'S', 'I', 'O', 'S', + 'Y', 'P', 'O', 'G', 'E', 'G', 'R', 'A', 'M', 'M', 'E', 'N', 'I', + 'Y', 'U', 'U', 'K', 'A', 'L', 'E', 'A', 'P', 'I', 'N', 'T', 'U', + 'A', 'F', 'O', 'R', 'E', 'M', 'E', 'N', 'T', 'I', 'O', 'N', 'E', 'D', + 'A', 'R', 'O', 'U', 'N', 'D', '-', 'P', 'R', 'O', 'F', 'I', 'L', 'E', + 'A', 'S', 'I', 'A', '-', 'A', 'U', 'S', 'T', 'R', 'A', 'L', 'I', 'A', + 'A', 'S', 'Y', 'M', 'P', 'T', 'O', 'T', 'I', 'C', 'A', 'L', 'L', 'Y', + 'B', 'A', 'L', 'L', 'O', 'O', 'N', '-', 'S', 'P', 'O', 'K', 'E', 'D', + 'B', 'O', 'T', 'T', 'O', 'M', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', + 'B', 'R', 'E', 'A', 'S', 'T', '-', 'F', 'E', 'E', 'D', 'I', 'N', 'G', + 'C', 'E', 'N', 'T', 'R', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', + 'C', 'O', 'N', 'G', 'R', 'A', 'T', 'U', 'L', 'A', 'T', 'I', 'O', 'N', + 'D', 'I', 'A', 'E', 'R', 'E', 'S', 'I', 'S', '-', 'R', 'I', 'N', 'G', + 'E', 'X', 'P', 'R', 'E', 'S', 'S', 'I', 'O', 'N', 'L', 'E', 'S', 'S', + 'F', 'O', 'R', 'W', 'A', 'R', 'D', '-', 'F', 'A', 'C', 'I', 'N', 'G', + 'G', 'O', 'R', 'G', 'O', 'S', 'Y', 'N', 'T', 'H', 'E', 'T', 'O', 'N', + 'G', 'R', 'O', 'M', 'O', 'P', 'O', 'V', 'O', 'D', 'N', 'A', 'Y', 'A', + 'I', 'D', 'E', 'N', 'T', 'I', 'F', 'I', 'C', 'A', 'T', 'I', 'O', 'N', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', '0', '0', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', '0', '9', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', '2', 'D', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', '8', 'C', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', 'A', '4', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '1', '8', 'D', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '2', '1', 'D', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '2', '4', 'D', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '2', '7', '2', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '2', 'D', 'D', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '3', 'C', 'C', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '3', 'F', '3', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '4', '0', '8', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '4', '3', '9', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '5', 'B', '6', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '8', 'F', '0', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '9', '1', 'A', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '9', '2', '9', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', 'B', '5', '7', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', 'B', '8', '9', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', 'D', 'E', '6', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', 'F', '8', 'C', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '2', '4', 'B', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '2', '5', '3', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '2', '9', '5', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '3', '0', '7', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '3', '5', '5', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '5', '5', '7', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '5', '9', '9', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '5', 'B', '0', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '6', '2', '0', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '7', '0', '8', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '7', '0', '9', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '7', '2', 'C', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', 'E', '8', '0', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', 'F', '1', '4', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '0', 'B', '9', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '1', '2', '1', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '5', '1', 'F', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '5', '3', '3', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '6', 'D', '7', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '9', '8', '1', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', 'A', '7', 'A', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', 'D', '4', '2', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '8', '9', 'E', '3', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '8', 'C', 'A', '9', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '8', 'D', '7', '0', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '9', '0', '4', 'A', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '9', '1', '4', 'D', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '2', 'E', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '2', 'F', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '6', 'B', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '6', 'C', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '6', 'D', + 'J', 'A', 'C', 'K', '-', 'O', '-', 'L', 'A', 'N', 'T', 'E', 'R', 'N', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'K', 'L', 'Y', 'U', 'C', 'H', 'E', 'P', 'O', 'V', 'O', 'D', 'N', 'Y', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'A', 'R', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'Y', 'R', + 'L', 'O', 'W', '-', 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', '-', '9', + 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', '-', 'H', 'I', 'N', 'G', 'E', + 'M', 'R', 'A', 'C', 'H', 'N', 'O', 'T', 'I', 'K', 'H', 'A', 'Y', 'A', + 'M', 'U', 'L', 'T', 'I', 'P', 'L', 'I', 'C', 'A', 'T', 'I', 'O', 'N', + 'N', 'E', 'P', 'O', 'S', 'T', 'O', 'Y', 'A', 'N', 'N', 'A', 'Y', 'A', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '5', '6', '7', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '5', '6', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '5', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '5', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '2', '4', '5', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '1', '3', '4', '5', '6', '7', '8', + 'O', 'C', 'T', 'A', 'N', 'T', '-', '2', '3', '4', '5', '6', '7', '8', + 'P', 'A', 'L', 'A', 'T', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', + 'P', 'R', 'O', 'S', 'G', 'E', 'G', 'R', 'A', 'M', 'M', 'E', 'N', 'I', + 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', '-', 'S', 'C', 'H', 'W', 'A', + 'R', 'I', 'E', 'U', 'L', '-', 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', + 'R', 'I', 'G', 'H', 'T', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'R', 'I', 'G', 'H', 'T', '-', 'S', 'H', 'A', 'D', 'O', 'W', 'E', 'D', + 'S', 'E', 'S', 'Q', 'U', 'I', 'Q', 'U', 'A', 'D', 'R', 'A', 'T', 'E', + 'S', 'E', 'X', 'T', 'A', 'N', 'T', '-', '1', '2', '3', '4', '5', '6', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'O', 'S', 'S', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'S', 'O', 'L', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'T', 'Y', 'R', + 'S', 'I', 'O', 'S', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'T', 'I', 'G', 'H', 'T', 'L', 'Y', '-', 'C', 'L', 'O', 'S', 'E', 'D', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', '-', 'R', 'O', 'U', 'N', 'D', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'L', 'Y', 'G', 'I', 'S', 'M', 'A', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'S', 'Y', 'N', 'A', 'G', 'M', 'A', + 'T', 'R', 'Y', 'A', 'S', 'O', 'G', 'L', 'A', 'S', 'N', 'A', 'Y', 'A', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '6', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'H', 'I', 'E', 'U', 'H', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'M', 'I', 'E', 'U', 'M', + 'A', 'C', 'C', 'E', 'N', 'T', '-', 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'O', + 'A', 'N', 'T', 'I', 'K', 'E', 'N', 'O', 'K', 'Y', 'L', 'I', 'S', 'M', 'A', + 'A', 'N', 'T', 'I', 'R', 'E', 'S', 'T', 'R', 'I', 'C', 'T', 'I', 'O', 'N', + 'B', 'L', 'A', 'C', 'K', '-', 'F', 'E', 'A', 'T', 'H', 'E', 'R', 'E', 'D', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'S', 'I', 'O', 'S', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '0', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '1', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '2', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '3', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '4', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '5', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '6', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '7', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '8', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', '9', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'A', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'B', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'C', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'D', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'E', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'B', 'F', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '0', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '1', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '2', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '3', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '4', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '5', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '6', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '7', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '8', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', '9', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'A', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'B', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'C', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'D', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'D', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'D', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'D', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'D', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'D', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', '8', 'C', 'F', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '7', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '8', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', '9', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'A', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'B', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'C', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'D', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'E', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '1', 'F', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '0', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '1', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '2', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '3', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '4', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '5', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '6', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '7', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '8', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', '9', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'A', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'B', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'C', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'D', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', 'B', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', 'C', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', 'D', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'E', 'F', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '0', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '1', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '2', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '3', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '4', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '5', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '6', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '7', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '8', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', '9', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', 'A', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', '-', '1', 'B', '2', 'F', 'B', + 'C', 'H', 'I', 'E', 'U', 'C', 'H', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'C', 'L', 'U', 'S', 'T', 'E', 'R', '-', 'I', 'N', 'I', 'T', 'I', 'A', 'L', + 'C', 'O', 'N', 'C', 'A', 'V', 'E', '-', 'P', 'O', 'I', 'N', 'T', 'E', 'D', + 'G', 'R', 'O', 'M', 'O', 'K', 'R', 'Y', 'Z', 'H', 'E', 'V', 'A', 'Y', 'A', + 'H', 'I', 'G', 'H', '-', 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', '-', '9', + 'J', 'A', 'L', 'L', 'A', 'J', 'A', 'L', 'A', 'L', 'O', 'U', 'H', 'O', 'U', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'K', 'R', 'A', 'T', 'I', 'M', 'O', 'K', 'O', 'U', 'F', 'I', 'S', 'M', 'A', + 'K', 'R', 'A', 'T', 'I', 'M', 'O', 'Y', 'P', 'O', 'R', 'R', 'O', 'O', 'N', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'O', 'S', 'S', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'S', 'O', 'L', + 'M', 'I', 'E', 'U', 'M', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'P', 'E', 'T', 'A', 'S', 'T', 'O', 'K', 'O', 'U', 'F', 'I', 'S', 'M', 'A', + 'P', 'H', 'I', 'E', 'U', 'P', 'H', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'L', 'Y', 'G', 'I', 'S', 'M', 'A', + 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'S', 'Y', 'N', 'A', 'G', 'M', 'A', + 'R', 'I', 'E', 'U', 'L', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'M', 'A', 'D', 'R', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'N', 'A', 'U', 'D', + 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', + 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'B', 'A', 'R', 'B', 'E', 'D', + 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'S', 'P', 'O', 'K', 'E', 'D', + 'T', 'O', 'R', 'S', 'O', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', + 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', '-', 'H', 'E', 'A', 'D', 'E', 'D', + 'T', 'R', 'Y', 'A', 'S', 'O', 'P', 'O', 'V', 'O', 'D', 'N', 'A', 'Y', 'A', + 'T', 'R', 'Y', 'A', 'S', 'O', 'S', 'T', 'R', 'E', 'L', 'N', 'A', 'Y', 'A', + 'W', 'H', 'I', 'T', 'E', '-', 'F', 'E', 'A', 'T', 'H', 'E', 'R', 'E', 'D', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'A', 'R', 'R', 'O', 'W', 'H', 'E', 'A', 'D', '-', 'S', 'H', 'A', 'P', 'E', 'D', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'C', 'I', 'E', 'U', 'C', + 'C', 'I', 'E', 'U', 'C', '-', 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', + 'E', 'X', 'T', 'R', 'A', 'T', 'E', 'R', 'R', 'E', 'S', 'T', 'R', 'I', 'A', 'L', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '4', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '5', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '6', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '7', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '8', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', '9', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'A', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'B', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'C', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'D', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'E', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '3', 'F', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '0', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '1', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '2', 'F', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '0', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '1', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '2', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '3', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '4', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '5', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '6', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '7', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '8', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', '9', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'A', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'B', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'C', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'D', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', 'A', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', 'B', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', 'C', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', 'D', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', 'E', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'E', 'F', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '0', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '1', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '2', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '3', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '4', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '5', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '6', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '7', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '8', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', '9', + 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', '-', '1', '4', '3', 'F', 'A', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '6', + 'K', 'L', 'Y', 'U', 'C', 'H', 'E', 'P', 'O', 'V', 'O', 'D', 'N', 'A', 'Y', 'A', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'M', 'A', 'D', 'R', + 'M', 'A', 'R', 'C', 'A', 'T', 'O', '-', 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'O', + 'M', 'I', 'E', 'U', 'M', '-', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', + 'M', 'I', 'E', 'U', 'M', '-', 'S', 'S', 'A', 'N', 'G', 'N', 'I', 'E', 'U', 'N', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'C', 'I', 'E', 'U', 'C', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', + 'R', 'E', 'S', 'H', '-', 'A', 'Y', 'I', 'N', '-', 'D', 'A', 'L', 'E', 'T', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', '-', 'S', 'I', 'O', 'S', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', + 'R', 'I', 'E', 'U', 'L', '-', 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', + 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', '-', 'H', 'I', 'E', 'U', 'H', + 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'S', 'S', 'A', 'N', 'G', 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', + 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'S', 'H', 'A', 'N', 'K', 'E', 'D', + 'T', 'O', 'R', 'S', 'O', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', + 'T', 'R', 'A', 'V', 'E', 'L', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'N', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'A', 'C', 'U', 'T', 'E', '-', 'G', 'R', 'A', 'V', 'E', '-', 'A', 'C', 'U', 'T', 'E', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'E', 'Y', 'E', 'G', 'A', 'Z', 'E', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', + 'G', 'R', 'A', 'V', 'E', '-', 'A', 'C', 'U', 'T', 'E', '-', 'G', 'R', 'A', 'V', 'E', + 'I', 'E', 'U', 'N', 'G', '-', 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', + 'K', 'A', 'T', 'A', 'K', 'A', 'N', 'A', '-', 'H', 'I', 'R', 'A', 'G', 'A', 'N', 'A', + 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', '-', 'D', 'I', 'A', 'G', 'O', 'N', 'A', 'L', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'R', 'I', 'E', 'U', 'L', '-', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'S', 'I', 'O', 'S', + 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', '-', 'H', 'I', 'E', 'U', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'H', 'I', 'E', 'U', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', + 'R', 'I', 'E', 'U', 'L', '-', 'S', 'S', 'A', 'N', 'G', 'T', 'I', 'K', 'E', 'U', 'T', + 'R', 'I', 'E', 'U', 'L', '-', 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'H', 'A', 'G', 'A', 'L', 'L', + 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'S', 'O', 'F', 'T', 'W', 'A', 'R', 'E', '-', 'F', 'U', 'N', 'C', 'T', 'I', 'O', 'N', + 'S', 'S', 'A', 'N', 'G', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'P', 'I', 'E', 'U', 'P', + 'T', 'R', 'A', 'V', 'E', 'L', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', + 'E', 'Y', 'E', 'G', 'A', 'Z', 'E', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'L', 'O', 'C', 'A', 'T', 'I', 'O', 'N', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'H', 'A', 'G', 'A', 'L', 'L', + 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', + 'N', 'O', 'R', 'T', 'H', 'E', 'A', 'S', 'T', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'P', 'A', 'R', 'T', 'I', 'A', 'L', 'L', 'Y', '-', 'R', 'E', 'C', 'Y', 'C', 'L', 'E', 'D', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'H', 'I', 'E', 'U', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'R', 'I', 'E', 'U', 'L', '-', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'H', 'I', 'E', 'U', 'H', + 'R', 'O', 'T', 'A', 'T', 'I', 'O', 'N', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'B', 'J', 'A', 'R', 'K', 'A', 'N', + 'S', 'I', 'O', 'S', '-', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', + 'S', 'S', 'A', 'N', 'G', 'R', 'I', 'E', 'U', 'L', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', + 'D', 'V', 'O', 'E', 'C', 'H', 'E', 'L', 'N', 'O', 'P', 'O', 'V', 'O', 'D', 'N', 'A', 'Y', 'A', + 'K', 'L', 'Y', 'U', 'C', 'H', 'E', 'N', 'E', 'P', 'O', 'S', 'T', 'O', 'Y', 'A', 'N', 'N', 'Y', + 'L', 'O', 'C', 'A', 'T', 'I', 'O', 'N', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', + 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', + 'O', 'P', 'E', 'N', '-', 'C', 'I', 'R', 'C', 'U', 'I', 'T', '-', 'O', 'U', 'T', 'P', 'U', 'T', + 'P', 'I', 'E', 'U', 'P', '-', 'R', 'I', 'E', 'U', 'L', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', + 'R', 'I', 'E', 'U', 'L', '-', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'R', 'O', 'T', 'A', 'T', 'I', 'O', 'N', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'D', 'V', 'O', 'E', 'C', 'H', 'E', 'L', 'N', 'O', 'K', 'R', 'Y', 'Z', 'H', 'E', 'V', 'A', 'Y', 'A', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', + 'A', 'N', 'T', 'I', 'C', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', '-', 'R', 'O', 'T', 'A', 'T', 'E', 'D', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', + 'K', 'L', 'Y', 'U', 'C', 'H', 'E', 'N', 'E', 'P', 'O', 'S', 'T', 'O', 'Y', 'A', 'N', 'N', 'A', 'Y', 'A', + 'P', 'A', 'N', 'S', 'I', 'O', 'S', '-', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', + 'B', 'Y', 'E', 'L', 'O', 'R', 'U', 'S', 'S', 'I', 'A', 'N', '-', 'U', 'K', 'R', 'A', 'I', 'N', 'I', 'A', 'N', + 'P', 'A', 'S', 'S', 'I', 'V', 'E', '-', 'P', 'U', 'L', 'L', '-', 'U', 'P', '-', 'O', 'U', 'T', 'P', 'U', 'T', + 'R', 'I', 'E', 'U', 'L', '-', 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', '-', 'H', 'I', 'E', 'U', 'H', + 'O', 'N', 'E', '-', 'H', 'U', 'N', 'D', 'R', 'E', 'D', '-', 'A', 'N', 'D', '-', 'S', 'I', 'X', 'T', 'I', 'E', 'T', 'H', + 'P', 'A', 'S', 'S', 'I', 'V', 'E', '-', 'P', 'U', 'L', 'L', '-', 'D', 'O', 'W', 'N', '-', 'O', 'U', 'T', 'P', 'U', 'T', + 'T', 'H', 'R', 'E', 'E', '-', 'H', 'U', 'N', 'D', 'R', 'E', 'D', '-', 'A', 'N', 'D', '-', 'T', 'W', 'E', 'N', 'T', 'I', 'E', 'T', 'H', +}; +#define UNICODE_CHARNAME_NUM_WORDS 18182 +static const struct { uint32_t extra_offset; uint16_t ind_offset; } unicode_name_by_length[29] = { + { 0, 0 }, + { 0, 0 }, + { 26, 26 }, + { 784, 405 }, + { 5755, 2062 }, + { 21403, 5974 }, + { 30648, 7823 }, + { 36606, 8816 }, + { 43039, 9735 }, + { 49079, 10490 }, + { 54317, 11072 }, + { 58757, 11516 }, + { 62629, 11868 }, + { 65353, 12095 }, + { 76975, 12989 }, + { 79187, 13147 }, + { 92717, 14049 }, + { 157821, 18118 }, + { 158161, 18138 }, + { 158539, 18159 }, + { 158729, 18169 }, + { 158789, 18172 }, + { 158873, 18176 }, + { 158917, 18178 }, + { 158940, 18179 }, + { 158988, 18181 }, + { 158988, 18181 }, + { 158988, 18181 }, + { 159015, 18182 } +}; +#define UNICODE_CHARNAME_WORD_HANGUL 8156 +#define UNICODE_CHARNAME_WORD_SYLLABLE 10388 +#define UNICODE_CHARNAME_WORD_CJK 572 +#define UNICODE_CHARNAME_WORD_COMPATIBILITY 12105 +#define UNICODE_CHARNAME_WORD_VARIATION 11048 +static const uint16_t unicode_names[144953] = { + 17, 8363, 3963, 7433, 10574, + 23, 3, 965, 17298, + 37, 323, 20858, + 47, 323, 1, 21791, 1036, + 51, 20377, 955, 22556, + 51, 20377, 8281, 13589, 17810, + 51, 20377, 8281, 17773, 17810, + 51, 20377, 10638, + 51, 20377, 11141, 12916, + 51, 20377, 14623, 26298, + 51, 20377, 14659, 13589, 17810, + 51, 20377, 14659, 17773, 17810, + 51, 20377, 16069, 26298, + 51, 20377, 17083, 16916, + 51, 20377, 17083, 22784, + 51, 20377, 17083, 23084, + 51, 20377, 22817, 23084, + 63, 17938, + 169, 2643, 16561, 17298, + 203, 6544, + 203, 9994, + 203, 14932, + 205, 6544, + 205, 9994, + 205, 14932, + 487, 2761, 15281, 19967, 17298, + 487, 13166, + 487, 13167, 10574, + 487, 16673, 16902, + 487, 16918, + 487, 19131, 17298, + 487, 19612, + 487, 23526, + 515, 7433, 10574, + 517, 9773, 10575, 454, + 517, 9773, 10575, 7796, + 517, 9773, 10575, 18270, + 517, 9773, 13069, 2760, + 517, 9773, 13069, 3240, + 517, 9773, 13069, 3536, + 517, 9773, 13069, 7036, + 517, 9773, 13069, 7058, + 517, 9773, 13069, 9358, + 517, 9773, 13069, 11824, + 517, 9773, 13069, 13150, + 517, 9773, 13069, 14778, + 517, 9773, 13069, 15116, + 517, 9773, 16531, 0, + 517, 9773, 16531, 8, + 517, 9773, 16531, 16, + 517, 9773, 16531, 28, + 517, 9773, 16531, 40, + 517, 9773, 16531, 60, + 517, 9773, 16531, 64, + 517, 9773, 16531, 70, + 517, 9773, 16531, 78, + 517, 9773, 16531, 100, + 517, 9773, 16531, 182, + 517, 9773, 16531, 190, + 517, 9773, 16531, 192, + 517, 9773, 16531, 214, + 517, 9773, 16531, 304, + 517, 9773, 16531, 322, + 517, 9773, 16531, 326, + 517, 9773, 16531, 334, + 517, 9773, 16531, 518, + 517, 9773, 16531, 522, + 517, 9773, 16531, 542, + 517, 9773, 16531, 688, + 517, 9773, 16531, 690, + 517, 9773, 16531, 702, + 517, 9773, 16531, 1396, + 517, 9773, 16531, 1898, + 517, 9773, 16531, 2762, + 517, 9773, 16531, 2778, + 517, 9773, 16531, 3576, + 517, 9773, 16531, 3618, + 517, 9773, 23737, 10574, + 517, 12675, 455, 19348, + 517, 12675, 5462, + 517, 12675, 13069, 2760, + 517, 12675, 13069, 3240, + 517, 12675, 13069, 3536, + 517, 12675, 13069, 7036, + 517, 12675, 13069, 7058, + 517, 12675, 13069, 9358, + 517, 12675, 13069, 11824, + 517, 12675, 13069, 13150, + 517, 12675, 13069, 14778, + 517, 12675, 13069, 15116, + 517, 12675, 14642, + 517, 12675, 16531, 68, + 517, 12675, 16531, 78, + 517, 12675, 16531, 94, + 517, 12675, 16531, 204, + 517, 12675, 16531, 208, + 517, 12675, 16531, 312, + 517, 12675, 16531, 330, + 517, 12675, 16531, 332, + 517, 12675, 16531, 394, + 517, 12675, 16531, 398, + 517, 12675, 16531, 402, + 517, 12675, 16531, 412, + 517, 12675, 16531, 416, + 517, 12675, 16531, 500, + 517, 12675, 16531, 510, + 517, 12675, 16531, 536, + 517, 12675, 16531, 678, + 517, 12675, 16531, 680, + 517, 12675, 16531, 710, + 517, 12675, 16531, 824, + 517, 12675, 16531, 826, + 517, 12675, 16531, 830, + 517, 12675, 16531, 838, + 517, 12675, 16531, 898, + 517, 12675, 16531, 1360, + 517, 12675, 16531, 1408, + 517, 12675, 16531, 1884, + 517, 12675, 16531, 2190, + 517, 12675, 16531, 2780, + 517, 12675, 16531, 3616, + 517, 12675, 18187, 20896, + 517, 12675, 20480, + 517, 12675, 22593, 20896, + 517, 12675, 23555, 16095, 16688, + 517, 12675, 23555, 16688, + 519, 17298, + 521, 11513, 23213, 8809, 11513, 8281, 14659, 12415, 12318, + 529, 11513, 1291, 16382, + 540, + 630, + 699, 5989, 8281, 6701, 5989, 8281, 18252, + 699, 5989, 8281, 6701, 5989, 14659, 18252, + 699, 5989, 14659, 6701, 5989, 8281, 18252, + 699, 5989, 14659, 6701, 5989, 14659, 18252, + 699, 6701, 12414, + 699, 6701, 12415, 11513, 5992, + 699, 6701, 12525, 12414, + 699, 6701, 15453, 12414, + 699, 6701, 16095, 12414, + 699, 6701, 22841, 12414, + 699, 6701, 28089, 12414, + 699, 7031, 10856, + 699, 10850, + 699, 10851, 11513, 15939, 12318, + 699, 12415, 19281, 15938, + 699, 14659, 19791, 19976, + 699, 21022, + 699, 21023, 323, 1, 21791, 1036, + 699, 21023, 17769, 3537, 22495, 5990, + 752, + 783, 18961, 146, + 783, 18961, 170, + 783, 18961, 248, + 783, 18961, 350, + 783, 18961, 362, + 783, 18961, 402, + 783, 18961, 440, + 783, 18961, 524, + 783, 18961, 668, + 783, 18961, 754, + 783, 18961, 786, + 783, 18961, 796, + 783, 18961, 1052, + 783, 18961, 1118, + 783, 18961, 1138, + 783, 18961, 1182, + 783, 18961, 1186, + 783, 18961, 1570, + 783, 18961, 1630, + 783, 18961, 1762, + 783, 18961, 1944, + 783, 18961, 2066, + 783, 18961, 2260, + 783, 18961, 2350, + 783, 18961, 2458, + 783, 18961, 2902, + 783, 18961, 2920, + 783, 18961, 2972, + 783, 18961, 3224, + 783, 18961, 3290, + 783, 18961, 3392, + 783, 18961, 3676, + 783, 18961, 3718, + 783, 18961, 3946, + 783, 18961, 4078, + 783, 18961, 4092, + 783, 18961, 4094, + 783, 18961, 6032, + 783, 18961, 6372, + 783, 18961, 6602, + 783, 18961, 7266, + 783, 18961, 7272, + 783, 18961, 7726, + 783, 18961, 7730, + 783, 18961, 7736, + 783, 18961, 7872, + 783, 18961, 7892, + 783, 18961, 9158, + 783, 18961, 9572, + 783, 18961, 9590, + 783, 18961, 9636, + 783, 18961, 10452, + 783, 18961, 10494, + 783, 18961, 10524, + 783, 18961, 15636, + 783, 20777, 0, + 783, 20777, 8, + 783, 20777, 16, + 783, 20777, 28, + 783, 20777, 86, + 783, 20777, 94, + 783, 20777, 102, + 783, 20777, 108, + 783, 20777, 112, + 783, 20777, 116, + 783, 20777, 118, + 783, 20777, 122, + 783, 20777, 124, + 783, 20777, 126, + 783, 20777, 132, + 783, 20777, 136, + 783, 20777, 142, + 783, 20777, 144, + 783, 20777, 146, + 783, 20777, 150, + 783, 20777, 156, + 783, 20777, 160, + 783, 20777, 168, + 783, 20777, 170, + 783, 20777, 224, + 783, 20777, 228, + 783, 20777, 234, + 783, 20777, 240, + 783, 20777, 242, + 783, 20777, 244, + 783, 20777, 248, + 783, 20777, 252, + 783, 20777, 258, + 783, 20777, 262, + 783, 20777, 264, + 783, 20777, 272, + 783, 20777, 276, + 783, 20777, 288, + 783, 20777, 306, + 783, 20777, 326, + 783, 20777, 334, + 783, 20777, 338, + 783, 20777, 348, + 783, 20777, 350, + 783, 20777, 352, + 783, 20777, 354, + 783, 20777, 358, + 783, 20777, 362, + 783, 20777, 366, + 783, 20777, 374, + 783, 20777, 380, + 783, 20777, 394, + 783, 20777, 398, + 783, 20777, 402, + 783, 20777, 412, + 783, 20777, 416, + 783, 20777, 422, + 783, 20777, 426, + 783, 20777, 434, + 783, 20777, 440, + 783, 20777, 446, + 783, 20777, 454, + 783, 20777, 462, + 783, 20777, 466, + 783, 20777, 470, + 783, 20777, 478, + 783, 20777, 486, + 783, 20777, 490, + 783, 20777, 524, + 783, 20777, 532, + 783, 20777, 540, + 783, 20777, 548, + 783, 20777, 562, + 783, 20777, 566, + 783, 20777, 572, + 783, 20777, 578, + 783, 20777, 586, + 783, 20777, 590, + 783, 20777, 594, + 783, 20777, 596, + 783, 20777, 598, + 783, 20777, 600, + 783, 20777, 606, + 783, 20777, 610, + 783, 20777, 612, + 783, 20777, 614, + 783, 20777, 618, + 783, 20777, 624, + 783, 20777, 628, + 783, 20777, 638, + 783, 20777, 644, + 783, 20777, 648, + 783, 20777, 652, + 783, 20777, 656, + 783, 20777, 660, + 783, 20777, 668, + 783, 20777, 696, + 783, 20777, 714, + 783, 20777, 720, + 783, 20777, 722, + 783, 20777, 728, + 783, 20777, 734, + 783, 20777, 738, + 783, 20777, 744, + 783, 20777, 754, + 783, 20777, 756, + 783, 20777, 768, + 783, 20777, 770, + 783, 20777, 776, + 783, 20777, 782, + 783, 20777, 786, + 783, 20777, 790, + 783, 20777, 794, + 783, 20777, 796, + 783, 20777, 798, + 783, 20777, 802, + 783, 20777, 804, + 783, 20777, 806, + 783, 20777, 808, + 783, 20777, 962, + 783, 20777, 966, + 783, 20777, 970, + 783, 20777, 972, + 783, 20777, 974, + 783, 20777, 976, + 783, 20777, 978, + 783, 20777, 980, + 783, 20777, 982, + 783, 20777, 994, + 783, 20777, 998, + 783, 20777, 1012, + 783, 20777, 1016, + 783, 20777, 1018, + 783, 20777, 1020, + 783, 20777, 1030, + 783, 20777, 1032, + 783, 20777, 1036, + 783, 20777, 1048, + 783, 20777, 1050, + 783, 20777, 1052, + 783, 20777, 1056, + 783, 20777, 1058, + 783, 20777, 1068, + 783, 20777, 1070, + 783, 20777, 1072, + 783, 20777, 1074, + 783, 20777, 1086, + 783, 20777, 1090, + 783, 20777, 1094, + 783, 20777, 1110, + 783, 20777, 1112, + 783, 20777, 1116, + 783, 20777, 1118, + 783, 20777, 1122, + 783, 20777, 1124, + 783, 20777, 1126, + 783, 20777, 1128, + 783, 20777, 1138, + 783, 20777, 1140, + 783, 20777, 1142, + 783, 20777, 1152, + 783, 20777, 1154, + 783, 20777, 1158, + 783, 20777, 1162, + 783, 20777, 1164, + 783, 20777, 1166, + 783, 20777, 1168, + 783, 20777, 1170, + 783, 20777, 1182, + 783, 20777, 1184, + 783, 20777, 1186, + 783, 20777, 1188, + 783, 20777, 1204, + 783, 20777, 1208, + 783, 20777, 1210, + 783, 20777, 1214, + 783, 20777, 1216, + 783, 20777, 1218, + 783, 20777, 1220, + 783, 20777, 1222, + 783, 20777, 1232, + 783, 20777, 1234, + 783, 20777, 1248, + 783, 20777, 1256, + 783, 20777, 1258, + 783, 20777, 1260, + 783, 20777, 1288, + 783, 20777, 1290, + 783, 20777, 1292, + 783, 20777, 1308, + 783, 20777, 1310, + 783, 20777, 1312, + 783, 20777, 1314, + 783, 20777, 1316, + 783, 20777, 1448, + 783, 20777, 1454, + 783, 20777, 1456, + 783, 20777, 1472, + 783, 20777, 1474, + 783, 20777, 1476, + 783, 20777, 1490, + 783, 20777, 1494, + 783, 20777, 1502, + 783, 20777, 1504, + 783, 20777, 1506, + 783, 20777, 1508, + 783, 20777, 1518, + 783, 20777, 1520, + 783, 20777, 1522, + 783, 20777, 1544, + 783, 20777, 1548, + 783, 20777, 1550, + 783, 20777, 1570, + 783, 20777, 1574, + 783, 20777, 1576, + 783, 20777, 1578, + 783, 20777, 1580, + 783, 20777, 1582, + 783, 20777, 1584, + 783, 20777, 1586, + 783, 20777, 1602, + 783, 20777, 1610, + 783, 20777, 1612, + 783, 20777, 1614, + 783, 20777, 1628, + 783, 20777, 1630, + 783, 20777, 1632, + 783, 20777, 1650, + 783, 20777, 1652, + 783, 20777, 1654, + 783, 20777, 1656, + 783, 20777, 1658, + 783, 20777, 1694, + 783, 20777, 1698, + 783, 20777, 1702, + 783, 20777, 1716, + 783, 20777, 1720, + 783, 20777, 1732, + 783, 20777, 1740, + 783, 20777, 1744, + 783, 20777, 1746, + 783, 20777, 1748, + 783, 20777, 1750, + 783, 20777, 1752, + 783, 20777, 1754, + 783, 20777, 1756, + 783, 20777, 1760, + 783, 20777, 1762, + 783, 20777, 1764, + 783, 20777, 1766, + 783, 20777, 1768, + 783, 20777, 1770, + 783, 20777, 1772, + 783, 20777, 1786, + 783, 20777, 1788, + 783, 20777, 1790, + 783, 20777, 1804, + 783, 20777, 1818, + 783, 20777, 1820, + 783, 20777, 1824, + 783, 20777, 1826, + 783, 20777, 1860, + 783, 20777, 1862, + 783, 20777, 1864, + 783, 20777, 1924, + 783, 20777, 1928, + 783, 20777, 1930, + 783, 20777, 1932, + 783, 20777, 1938, + 783, 20777, 1940, + 783, 20777, 1942, + 783, 20777, 1944, + 783, 20777, 1950, + 783, 20777, 1952, + 783, 20777, 1954, + 783, 20777, 1958, + 783, 20777, 1960, + 783, 20777, 1962, + 783, 20777, 1964, + 783, 20777, 1968, + 783, 20777, 1972, + 783, 20777, 1974, + 783, 20777, 1976, + 783, 20777, 1978, + 783, 20777, 2002, + 783, 20777, 2008, + 783, 20777, 2012, + 783, 20777, 2024, + 783, 20777, 2028, + 783, 20777, 2032, + 783, 20777, 2052, + 783, 20777, 2062, + 783, 20777, 2066, + 783, 20777, 2072, + 783, 20777, 2102, + 783, 20777, 2104, + 783, 20777, 2108, + 783, 20777, 2140, + 783, 20777, 2142, + 783, 20777, 2146, + 783, 20777, 2148, + 783, 20777, 2152, + 783, 20777, 2208, + 783, 20777, 2214, + 783, 20777, 2220, + 783, 20777, 2240, + 783, 20777, 2246, + 783, 20777, 2260, + 783, 20777, 2266, + 783, 20777, 2272, + 783, 20777, 2274, + 783, 20777, 2292, + 783, 20777, 2298, + 783, 20777, 2302, + 783, 20777, 2326, + 783, 20777, 2328, + 783, 20777, 2330, + 783, 20777, 2334, + 783, 20777, 2336, + 783, 20777, 2348, + 783, 20777, 2350, + 783, 20777, 2352, + 783, 20777, 2354, + 783, 20777, 2372, + 783, 20777, 2378, + 783, 20777, 2382, + 783, 20777, 2412, + 783, 20777, 2416, + 783, 20777, 2418, + 783, 20777, 2420, + 783, 20777, 2422, + 783, 20777, 2430, + 783, 20777, 2442, + 783, 20777, 2444, + 783, 20777, 2446, + 783, 20777, 2458, + 783, 20777, 2460, + 783, 20777, 2462, + 783, 20777, 2476, + 783, 20777, 2478, + 783, 20777, 2480, + 783, 20777, 2484, + 783, 20777, 2486, + 783, 20777, 2502, + 783, 20777, 2504, + 783, 20777, 2506, + 783, 20777, 2524, + 783, 20777, 2532, + 783, 20777, 2536, + 783, 20777, 2538, + 783, 20777, 2540, + 783, 20777, 2542, + 783, 20777, 2544, + 783, 20777, 2548, + 783, 20777, 2550, + 783, 20777, 2552, + 783, 20777, 2554, + 783, 20777, 2556, + 783, 20777, 2566, + 783, 20777, 2572, + 783, 20777, 2574, + 783, 20777, 2576, + 783, 20777, 2582, + 783, 20777, 2594, + 783, 20777, 2602, + 783, 20777, 2604, + 783, 20777, 2606, + 783, 20777, 2612, + 783, 20777, 2614, + 783, 20777, 2616, + 783, 20777, 2618, + 783, 20777, 2638, + 783, 20777, 2642, + 783, 20777, 2646, + 783, 20777, 2656, + 783, 20777, 2658, + 783, 20777, 2660, + 783, 20777, 2662, + 783, 20777, 2664, + 783, 20777, 2678, + 783, 20777, 2680, + 783, 20777, 2682, + 783, 20777, 2684, + 783, 20777, 2686, + 783, 20777, 2704, + 783, 20777, 2706, + 783, 20777, 2708, + 783, 20777, 2710, + 783, 20777, 2712, + 783, 20777, 2714, + 783, 20777, 2716, + 783, 20777, 2718, + 783, 20777, 2798, + 783, 20777, 2802, + 783, 20777, 2808, + 783, 20777, 2840, + 783, 20777, 2848, + 783, 20777, 2850, + 783, 20777, 2852, + 783, 20777, 2866, + 783, 20777, 2868, + 783, 20777, 2870, + 783, 20777, 2894, + 783, 20777, 2896, + 783, 20777, 2900, + 783, 20777, 2902, + 783, 20777, 2904, + 783, 20777, 2916, + 783, 20777, 2918, + 783, 20777, 2920, + 783, 20777, 2922, + 783, 20777, 2952, + 783, 20777, 2958, + 783, 20777, 2960, + 783, 20777, 2962, + 783, 20777, 2970, + 783, 20777, 2972, + 783, 20777, 2974, + 783, 20777, 2986, + 783, 20777, 2988, + 783, 20777, 2990, + 783, 20777, 2992, + 783, 20777, 2998, + 783, 20777, 3014, + 783, 20777, 3016, + 783, 20777, 3018, + 783, 20777, 3022, + 783, 20777, 3044, + 783, 20777, 3048, + 783, 20777, 3052, + 783, 20777, 3068, + 783, 20777, 3072, + 783, 20777, 3112, + 783, 20777, 3114, + 783, 20777, 3116, + 783, 20777, 3118, + 783, 20777, 3120, + 783, 20777, 3122, + 783, 20777, 3124, + 783, 20777, 3126, + 783, 20777, 3140, + 783, 20777, 3142, + 783, 20777, 3144, + 783, 20777, 3146, + 783, 20777, 3148, + 783, 20777, 3160, + 783, 20777, 3162, + 783, 20777, 3164, + 783, 20777, 3166, + 783, 20777, 3186, + 783, 20777, 3192, + 783, 20777, 3196, + 783, 20777, 3204, + 783, 20777, 3208, + 783, 20777, 3212, + 783, 20777, 3214, + 783, 20777, 3218, + 783, 20777, 3220, + 783, 20777, 3224, + 783, 20777, 3228, + 783, 20777, 3236, + 783, 20777, 3238, + 783, 20777, 3240, + 783, 20777, 3260, + 783, 20777, 3266, + 783, 20777, 3272, + 783, 20777, 3286, + 783, 20777, 3288, + 783, 20777, 3290, + 783, 20777, 3292, + 783, 20777, 3294, + 783, 20777, 3296, + 783, 20777, 3312, + 783, 20777, 3314, + 783, 20777, 3316, + 783, 20777, 3318, + 783, 20777, 3322, + 783, 20777, 3340, + 783, 20777, 3342, + 783, 20777, 3344, + 783, 20777, 3346, + 783, 20777, 3384, + 783, 20777, 3392, + 783, 20777, 3400, + 783, 20777, 3414, + 783, 20777, 3420, + 783, 20777, 3436, + 783, 20777, 3444, + 783, 20777, 3448, + 783, 20777, 3450, + 783, 20777, 3472, + 783, 20777, 3478, + 783, 20777, 3482, + 783, 20777, 3520, + 783, 20777, 3522, + 783, 20777, 3524, + 783, 20777, 3526, + 783, 20777, 3528, + 783, 20777, 3624, + 783, 20777, 3626, + 783, 20777, 3662, + 783, 20777, 3664, + 783, 20777, 3670, + 783, 20777, 3676, + 783, 20777, 3682, + 783, 20777, 3688, + 783, 20777, 3692, + 783, 20777, 3694, + 783, 20777, 3696, + 783, 20777, 3704, + 783, 20777, 3708, + 783, 20777, 3714, + 783, 20777, 3716, + 783, 20777, 3718, + 783, 20777, 3720, + 783, 20777, 3722, + 783, 20777, 3728, + 783, 20777, 3730, + 783, 20777, 3732, + 783, 20777, 3734, + 783, 20777, 3744, + 783, 20777, 3746, + 783, 20777, 3752, + 783, 20777, 3766, + 783, 20777, 3770, + 783, 20777, 3784, + 783, 20777, 3788, + 783, 20777, 3798, + 783, 20777, 3822, + 783, 20777, 3824, + 783, 20777, 3826, + 783, 20777, 3828, + 783, 20777, 3832, + 783, 20777, 3836, + 783, 20777, 3838, + 783, 20777, 3840, + 783, 20777, 3860, + 783, 20777, 3862, + 783, 20777, 3864, + 783, 20777, 3868, + 783, 20777, 3934, + 783, 20777, 3944, + 783, 20777, 3946, + 783, 20777, 3948, + 783, 20777, 3956, + 783, 20777, 3960, + 783, 20777, 3964, + 783, 20777, 3980, + 783, 20777, 3982, + 783, 20777, 3986, + 783, 20777, 3990, + 783, 20777, 3992, + 783, 20777, 4006, + 783, 20777, 4008, + 783, 20777, 4010, + 783, 20777, 4012, + 783, 20777, 4026, + 783, 20777, 4028, + 783, 20777, 4030, + 783, 20777, 4038, + 783, 20777, 4040, + 783, 20777, 4042, + 783, 20777, 4044, + 783, 20777, 4048, + 783, 20777, 4050, + 783, 20777, 4052, + 783, 20777, 4058, + 783, 20777, 4062, + 783, 20777, 4064, + 783, 20777, 4066, + 783, 20777, 4076, + 783, 20777, 4078, + 783, 20777, 4080, + 783, 20777, 4090, + 783, 20777, 4092, + 783, 20777, 4094, + 783, 20777, 4096, + 783, 20777, 4098, + 783, 20777, 4104, + 783, 20777, 4106, + 783, 20777, 4108, + 783, 20777, 4110, + 783, 20777, 4112, + 783, 20777, 4114, + 783, 20777, 4116, + 783, 20777, 4118, + 783, 20777, 4120, + 783, 20777, 4122, + 783, 20777, 6000, + 783, 20777, 6002, + 783, 20777, 6004, + 783, 20777, 6008, + 783, 20777, 6010, + 783, 20777, 6012, + 783, 20777, 6014, + 783, 20777, 6016, + 783, 20777, 6018, + 783, 20777, 6020, + 783, 20777, 6022, + 783, 20777, 6024, + 783, 20777, 6026, + 783, 20777, 6028, + 783, 20777, 6030, + 783, 20777, 6032, + 783, 20777, 6034, + 783, 20777, 6036, + 783, 20777, 6038, + 783, 20777, 6040, + 783, 20777, 6076, + 783, 20777, 6078, + 783, 20777, 6080, + 783, 20777, 6130, + 783, 20777, 6132, + 783, 20777, 6140, + 783, 20777, 6146, + 783, 20777, 6266, + 783, 20777, 6270, + 783, 20777, 6274, + 783, 20777, 6282, + 783, 20777, 6284, + 783, 20777, 6286, + 783, 20777, 6300, + 783, 20777, 6302, + 783, 20777, 6304, + 783, 20777, 6308, + 783, 20777, 6310, + 783, 20777, 6312, + 783, 20777, 6314, + 783, 20777, 6320, + 783, 20777, 6322, + 783, 20777, 6324, + 783, 20777, 6326, + 783, 20777, 6328, + 783, 20777, 6330, + 783, 20777, 6332, + 783, 20777, 6372, + 783, 20777, 6374, + 783, 20777, 6378, + 783, 20777, 6392, + 783, 20777, 6558, + 783, 20777, 6560, + 783, 20777, 6562, + 783, 20777, 6568, + 783, 20777, 6570, + 783, 20777, 6582, + 783, 20777, 6584, + 783, 20777, 6586, + 783, 20777, 6588, + 783, 20777, 6592, + 783, 20777, 6594, + 783, 20777, 6596, + 783, 20777, 6598, + 783, 20777, 6600, + 783, 20777, 6602, + 783, 20777, 6604, + 783, 20777, 6606, + 783, 20777, 6658, + 783, 20777, 6660, + 783, 20777, 6722, + 783, 20777, 6726, + 783, 20777, 7074, + 783, 20777, 7246, + 783, 20777, 7248, + 783, 20777, 7250, + 783, 20777, 7254, + 783, 20777, 7256, + 783, 20777, 7258, + 783, 20777, 7260, + 783, 20777, 7262, + 783, 20777, 7264, + 783, 20777, 7266, + 783, 20777, 7268, + 783, 20777, 7270, + 783, 20777, 7272, + 783, 20777, 7274, + 783, 20777, 7276, + 783, 20777, 7278, + 783, 20777, 7280, + 783, 20777, 7310, + 783, 20777, 7312, + 783, 20777, 7314, + 783, 20777, 7360, + 783, 20777, 7362, + 783, 20777, 7364, + 783, 20777, 7368, + 783, 20777, 7518, + 783, 20777, 7526, + 783, 20777, 7528, + 783, 20777, 7532, + 783, 20777, 7534, + 783, 20777, 7536, + 783, 20777, 7538, + 783, 20777, 7540, + 783, 20777, 7542, + 783, 20777, 7544, + 783, 20777, 7546, + 783, 20777, 7548, + 783, 20777, 7550, + 783, 20777, 7552, + 783, 20777, 7554, + 783, 20777, 7556, + 783, 20777, 7558, + 783, 20777, 7560, + 783, 20777, 7562, + 783, 20777, 7564, + 783, 20777, 7566, + 783, 20777, 7568, + 783, 20777, 7570, + 783, 20777, 7572, + 783, 20777, 7574, + 783, 20777, 7576, + 783, 20777, 7578, + 783, 20777, 7580, + 783, 20777, 7582, + 783, 20777, 7584, + 783, 20777, 7586, + 783, 20777, 7588, + 783, 20777, 7590, + 783, 20777, 7592, + 783, 20777, 7594, + 783, 20777, 7596, + 783, 20777, 7598, + 783, 20777, 7600, + 783, 20777, 7602, + 783, 20777, 7604, + 783, 20777, 7606, + 783, 20777, 7610, + 783, 20777, 7612, + 783, 20777, 7614, + 783, 20777, 7616, + 783, 20777, 7618, + 783, 20777, 7620, + 783, 20777, 7622, + 783, 20777, 7624, + 783, 20777, 7626, + 783, 20777, 7628, + 783, 20777, 7632, + 783, 20777, 7634, + 783, 20777, 7698, + 783, 20777, 7700, + 783, 20777, 7702, + 783, 20777, 7712, + 783, 20777, 7714, + 783, 20777, 7716, + 783, 20777, 7718, + 783, 20777, 7720, + 783, 20777, 7722, + 783, 20777, 7724, + 783, 20777, 7726, + 783, 20777, 7728, + 783, 20777, 7730, + 783, 20777, 7732, + 783, 20777, 7734, + 783, 20777, 7736, + 783, 20777, 7862, + 783, 20777, 7864, + 783, 20777, 7866, + 783, 20777, 7872, + 783, 20777, 7874, + 783, 20777, 7876, + 783, 20777, 7878, + 783, 20777, 7880, + 783, 20777, 7882, + 783, 20777, 7884, + 783, 20777, 7886, + 783, 20777, 7888, + 783, 20777, 7890, + 783, 20777, 7892, + 783, 20777, 7894, + 783, 20777, 7896, + 783, 20777, 7898, + 783, 20777, 7900, + 783, 20777, 7918, + 783, 20777, 7920, + 783, 20777, 7922, + 783, 20777, 7924, + 783, 20777, 7928, + 783, 20777, 8104, + 783, 20777, 8106, + 783, 20777, 8180, + 783, 20777, 8184, + 783, 20777, 8188, + 783, 20777, 8306, + 783, 20777, 8308, + 783, 20777, 8310, + 783, 20777, 8366, + 783, 20777, 8368, + 783, 20777, 8370, + 783, 20777, 8372, + 783, 20777, 8382, + 783, 20777, 8880, + 783, 20777, 8882, + 783, 20777, 8884, + 783, 20777, 8896, + 783, 20777, 8898, + 783, 20777, 8900, + 783, 20777, 8902, + 783, 20777, 8904, + 783, 20777, 8906, + 783, 20777, 8908, + 783, 20777, 8910, + 783, 20777, 8912, + 783, 20777, 8914, + 783, 20777, 8916, + 783, 20777, 8938, + 783, 20777, 8940, + 783, 20777, 9006, + 783, 20777, 9008, + 783, 20777, 9010, + 783, 20777, 9016, + 783, 20777, 9152, + 783, 20777, 9154, + 783, 20777, 9156, + 783, 20777, 9158, + 783, 20777, 9160, + 783, 20777, 9162, + 783, 20777, 9164, + 783, 20777, 9166, + 783, 20777, 9168, + 783, 20777, 9170, + 783, 20777, 9174, + 783, 20777, 9176, + 783, 20777, 9178, + 783, 20777, 9180, + 783, 20777, 9182, + 783, 20777, 9184, + 783, 20777, 9186, + 783, 20777, 9188, + 783, 20777, 9194, + 783, 20777, 9196, + 783, 20777, 9198, + 783, 20777, 9202, + 783, 20777, 9204, + 783, 20777, 9206, + 783, 20777, 9208, + 783, 20777, 9212, + 783, 20777, 9214, + 783, 20777, 9220, + 783, 20777, 9222, + 783, 20777, 9224, + 783, 20777, 9228, + 783, 20777, 9230, + 783, 20777, 9232, + 783, 20777, 9234, + 783, 20777, 9266, + 783, 20777, 9274, + 783, 20777, 9276, + 783, 20777, 9280, + 783, 20777, 9282, + 783, 20777, 9296, + 783, 20777, 9310, + 783, 20777, 9314, + 783, 20777, 9318, + 783, 20777, 9324, + 783, 20777, 9350, + 783, 20777, 9352, + 783, 20777, 9374, + 783, 20777, 9376, + 783, 20777, 9378, + 783, 20777, 9380, + 783, 20777, 9384, + 783, 20777, 9386, + 783, 20777, 9388, + 783, 20777, 9390, + 783, 20777, 9392, + 783, 20777, 9394, + 783, 20777, 9396, + 783, 20777, 9398, + 783, 20777, 9400, + 783, 20777, 9402, + 783, 20777, 9404, + 783, 20777, 9450, + 783, 20777, 9452, + 783, 20777, 9454, + 783, 20777, 9456, + 783, 20777, 9460, + 783, 20777, 9462, + 783, 20777, 9464, + 783, 20777, 9466, + 783, 20777, 9470, + 783, 20777, 9472, + 783, 20777, 9474, + 783, 20777, 9476, + 783, 20777, 9478, + 783, 20777, 9480, + 783, 20777, 9482, + 783, 20777, 9484, + 783, 20777, 9530, + 783, 20777, 9532, + 783, 20777, 9534, + 783, 20777, 9568, + 783, 20777, 9572, + 783, 20777, 9578, + 783, 20777, 9580, + 783, 20777, 9590, + 783, 20777, 9592, + 783, 20777, 9594, + 783, 20777, 9600, + 783, 20777, 9602, + 783, 20777, 9604, + 783, 20777, 9606, + 783, 20777, 9610, + 783, 20777, 9614, + 783, 20777, 9616, + 783, 20777, 9618, + 783, 20777, 9620, + 783, 20777, 9622, + 783, 20777, 9624, + 783, 20777, 9626, + 783, 20777, 9628, + 783, 20777, 9630, + 783, 20777, 9634, + 783, 20777, 9636, + 783, 20777, 9640, + 783, 20777, 9642, + 783, 20777, 9644, + 783, 20777, 9646, + 783, 20777, 9648, + 783, 20777, 9650, + 783, 20777, 9872, + 783, 20777, 9876, + 783, 20777, 9928, + 783, 20777, 9930, + 783, 20777, 9932, + 783, 20777, 9946, + 783, 20777, 9984, + 783, 20777, 9986, + 783, 20777, 9988, + 783, 20777, 9996, + 783, 20777, 9998, + 783, 20777, 10000, + 783, 20777, 10002, + 783, 20777, 10014, + 783, 20777, 10190, + 783, 20777, 10194, + 783, 20777, 10196, + 783, 20777, 10198, + 783, 20777, 10200, + 783, 20777, 10202, + 783, 20777, 10204, + 783, 20777, 10208, + 783, 20777, 10210, + 783, 20777, 10212, + 783, 20777, 10214, + 783, 20777, 10216, + 783, 20777, 10218, + 783, 20777, 10220, + 783, 20777, 10222, + 783, 20777, 10224, + 783, 20777, 10244, + 783, 20777, 10246, + 783, 20777, 10248, + 783, 20777, 10260, + 783, 20777, 10450, + 783, 20777, 10452, + 783, 20777, 10454, + 783, 20777, 10464, + 783, 20777, 10466, + 783, 20777, 10468, + 783, 20777, 10494, + 783, 20777, 10498, + 783, 20777, 10502, + 783, 20777, 10520, + 783, 20777, 10522, + 783, 20777, 10524, + 783, 20777, 10526, + 783, 20777, 10528, + 783, 20777, 10542, + 783, 20777, 10544, + 783, 20777, 10546, + 783, 20777, 10548, + 783, 20777, 10568, + 783, 20777, 10570, + 783, 20777, 10644, + 783, 20777, 10646, + 783, 20777, 10648, + 783, 20777, 10652, + 783, 20777, 10654, + 783, 20777, 10658, + 783, 20777, 10660, + 783, 20777, 10662, + 783, 20777, 10664, + 783, 20777, 10666, + 783, 20777, 10668, + 783, 20777, 10670, + 783, 20777, 10672, + 783, 20777, 10674, + 783, 20777, 10678, + 783, 20777, 10680, + 783, 20777, 10682, + 783, 20777, 10684, + 783, 20777, 10686, + 783, 20777, 10732, + 783, 20777, 10734, + 783, 20777, 10740, + 783, 20777, 10750, + 783, 20777, 10986, + 783, 20777, 10988, + 783, 20777, 11118, + 783, 20777, 11120, + 783, 20777, 11122, + 783, 20777, 11128, + 783, 20777, 11384, + 783, 20777, 11386, + 783, 20777, 11388, + 783, 20777, 11400, + 783, 20777, 11402, + 783, 20777, 11546, + 783, 20777, 11548, + 783, 20777, 11576, + 783, 20777, 11578, + 783, 20777, 11580, + 783, 20777, 11584, + 783, 20777, 11596, + 783, 20777, 11694, + 783, 20777, 11696, + 783, 20777, 11698, + 783, 20777, 11758, + 783, 20777, 11760, + 783, 20777, 11762, + 783, 20777, 11766, + 783, 20777, 11776, + 783, 20777, 11832, + 783, 20777, 11836, + 783, 20777, 11838, + 783, 20777, 11842, + 783, 20777, 11844, + 783, 20777, 11846, + 783, 20777, 11854, + 783, 20777, 11856, + 783, 20777, 11858, + 783, 20777, 11860, + 783, 20777, 11862, + 783, 20777, 11864, + 783, 20777, 11866, + 783, 20777, 11868, + 783, 20777, 11874, + 783, 20777, 11876, + 783, 20777, 11878, + 783, 20777, 11880, + 783, 20777, 11884, + 783, 20777, 11886, + 783, 20777, 11892, + 783, 20777, 11894, + 783, 20777, 11896, + 783, 20777, 11902, + 783, 20777, 11906, + 783, 20777, 11908, + 783, 20777, 11910, + 783, 20777, 11914, + 783, 20777, 11916, + 783, 20777, 11918, + 783, 20777, 11920, + 783, 20777, 11922, + 783, 20777, 11924, + 783, 20777, 11926, + 783, 20777, 11928, + 783, 20777, 11932, + 783, 20777, 11934, + 783, 20777, 11936, + 783, 20777, 11940, + 783, 20777, 11942, + 783, 20777, 11944, + 783, 20777, 11946, + 783, 20777, 12474, + 783, 20777, 12476, + 783, 20777, 12478, + 783, 20777, 12480, + 783, 20777, 12482, + 783, 20777, 12484, + 783, 20777, 12688, + 783, 20777, 12690, + 783, 20777, 12692, + 783, 20777, 12694, + 783, 20777, 12696, + 783, 20777, 13036, + 783, 20777, 13038, + 783, 20777, 13040, + 783, 20777, 13042, + 783, 20777, 13044, + 783, 20777, 13354, + 783, 20777, 13356, + 783, 20777, 13358, + 783, 20777, 13360, + 783, 20777, 13362, + 783, 20777, 13364, + 783, 20777, 13492, + 783, 20777, 13494, + 783, 20777, 13496, + 783, 20777, 13498, + 783, 20777, 13500, + 783, 20777, 13502, + 783, 20777, 13504, + 783, 20777, 13506, + 783, 20777, 13510, + 783, 20777, 13512, + 783, 20777, 13514, + 783, 20777, 13516, + 783, 20777, 13518, + 783, 20777, 13520, + 783, 20777, 13522, + 783, 20777, 13524, + 783, 20777, 13548, + 783, 20777, 13550, + 783, 20777, 13552, + 783, 20777, 13554, + 783, 20777, 13556, + 783, 20777, 13558, + 783, 20777, 13612, + 783, 20777, 13614, + 783, 20777, 13616, + 783, 20777, 13618, + 783, 20777, 13620, + 783, 20777, 13622, + 783, 20777, 13984, + 783, 20777, 13986, + 783, 20777, 13988, + 783, 20777, 13990, + 783, 20777, 14084, + 783, 20777, 14086, + 783, 20777, 14088, + 783, 20777, 14090, + 783, 20777, 14102, + 783, 20777, 14106, + 783, 20777, 14136, + 783, 20777, 14138, + 783, 20777, 14158, + 783, 20777, 14160, + 783, 20777, 14186, + 783, 20777, 14188, + 783, 20777, 14190, + 783, 20777, 14196, + 783, 20777, 14200, + 783, 20777, 14202, + 783, 20777, 14262, + 783, 20777, 14264, + 783, 20777, 14340, + 783, 20777, 14342, + 783, 20777, 14344, + 783, 20777, 14346, + 783, 20777, 14348, + 783, 20777, 14352, + 783, 20777, 14354, + 783, 20777, 14356, + 783, 20777, 14358, + 783, 20777, 14360, + 783, 20777, 14678, + 783, 20777, 14680, + 783, 20777, 14682, + 783, 20777, 14848, + 783, 20777, 14850, + 783, 20777, 14852, + 783, 20777, 14864, + 783, 20777, 14956, + 783, 20777, 14958, + 783, 20777, 14960, + 783, 20777, 15614, + 783, 20777, 15616, + 783, 20777, 15618, + 783, 20777, 15620, + 783, 20777, 15634, + 783, 20777, 15636, + 783, 20777, 15638, + 783, 20777, 15642, + 783, 20777, 15644, + 783, 20777, 21517, 8808, + 849, 17122, + 889, 13177, 660, + 889, 25980, + 890, + 897, 11513, 1290, + 906, + 915, 22461, 17299, 699, 10489, 1952, + 915, 22461, 17299, 699, 10851, 1952, + 915, 22461, 17299, 699, 10851, 18778, + 915, 22461, 17299, 699, 10851, 21188, + 915, 22461, 17299, 699, 12615, 15140, + 915, 22461, 17299, 1231, 14976, + 915, 22461, 17299, 1231, 15140, + 915, 22461, 17299, 1231, 21188, + 915, 22461, 17299, 1953, 20920, + 915, 22461, 17299, 1953, 21188, + 915, 22461, 17299, 3076, + 915, 22461, 17299, 6701, 10489, 14976, + 915, 22461, 17299, 6701, 10851, 1952, + 915, 22461, 17299, 6701, 10851, 20920, + 915, 22461, 17299, 6701, 12615, 15140, + 915, 22461, 17299, 7818, + 915, 22461, 17299, 7819, 20920, + 915, 22461, 17299, 8281, 10489, 14976, + 915, 22461, 17299, 9994, + 915, 22461, 17299, 9995, 699, 12614, + 915, 22461, 17299, 9995, 1230, + 915, 22461, 17299, 9995, 1952, + 915, 22461, 17299, 9995, 2643, 13176, + 915, 22461, 17299, 9995, 6701, 12614, + 915, 22461, 17299, 9995, 12916, + 915, 22461, 17299, 9995, 13050, + 915, 22461, 17299, 9995, 13176, + 915, 22461, 17299, 9995, 14890, + 915, 22461, 17299, 9995, 15938, + 915, 22461, 17299, 9995, 16056, + 915, 22461, 17299, 9995, 17988, + 915, 22461, 17299, 9995, 19381, 12414, + 915, 22461, 17299, 9995, 20548, + 915, 22461, 17299, 9995, 21042, + 915, 22461, 17299, 9995, 21349, 12414, + 915, 22461, 17299, 9995, 21557, 12414, + 915, 22461, 17299, 9995, 21558, + 915, 22461, 17299, 9995, 22837, 12414, + 915, 22461, 17299, 9995, 23852, + 915, 22461, 17299, 10691, 21188, + 915, 22461, 17299, 12366, + 915, 22461, 17299, 12367, 20920, + 915, 22461, 17299, 12923, 964, + 915, 22461, 17299, 13051, 14976, + 915, 22461, 17299, 13051, 20920, + 915, 22461, 17299, 14428, + 915, 22461, 17299, 14429, 20920, + 915, 22461, 17299, 14605, 9994, + 915, 22461, 17299, 14605, 20920, + 915, 22461, 17299, 14891, 964, + 915, 22461, 17299, 14977, 15140, + 915, 22461, 17299, 15141, 21188, + 915, 22461, 17299, 15622, + 915, 22461, 17299, 15939, 1952, + 915, 22461, 17299, 15939, 10690, + 915, 22461, 17299, 15939, 14976, + 915, 22461, 17299, 15939, 20920, + 915, 22461, 17299, 15939, 21042, + 915, 22461, 17299, 15939, 21188, + 915, 22461, 17299, 16360, + 915, 22461, 17299, 17227, 9994, + 915, 22461, 17299, 17989, 20920, + 915, 22461, 17299, 18121, 20920, + 915, 22461, 17299, 19381, 11360, + 915, 22461, 17299, 21043, 964, + 915, 22461, 17299, 21349, 11360, + 915, 22461, 17299, 21557, 11360, + 915, 22461, 17299, 21845, 20920, + 915, 22461, 17299, 22837, 11360, + 915, 22461, 17299, 23853, 21188, + 916, + 942, + 965, 507, 10626, + 965, 12656, + 966, + 984, + 997, 17298, + 1015, 18999, 19140, + 1015, 19140, + 1026, + 1035, 897, 12414, + 1037, 19951, 699, 13473, 897, 6701, 22495, 13806, + 1037, 19951, 699, 13473, 897, 8281, 6701, 13806, + 1037, 19951, 699, 13473, 897, 8281, 13806, + 1037, 19951, 699, 13473, 897, 14659, 6701, 13806, + 1037, 19951, 699, 13473, 897, 14659, 13806, + 1037, 19951, 699, 13473, 897, 22495, 13806, + 1037, 19951, 699, 13807, 897, 6701, 22495, 13472, + 1037, 19951, 699, 13807, 897, 8281, 6701, 13472, + 1037, 19951, 699, 13807, 897, 8281, 13472, + 1037, 19951, 699, 13807, 897, 14659, 6701, 13472, + 1037, 19951, 699, 13807, 897, 14659, 13472, + 1037, 19951, 699, 13807, 897, 22495, 13472, + 1037, 19951, 699, 16095, 897, 8281, 17170, + 1037, 19951, 699, 16095, 897, 14659, 17170, + 1037, 19951, 699, 16095, 897, 22495, 17170, + 1037, 19951, 699, 17171, 897, 8281, 16094, + 1037, 19951, 699, 17171, 897, 14659, 16094, + 1037, 19951, 699, 17171, 897, 22495, 16094, + 1037, 19951, 6701, 13473, 897, 699, 22495, 13806, + 1037, 19951, 6701, 13473, 897, 8281, 699, 13806, + 1037, 19951, 6701, 13473, 897, 8281, 13806, + 1037, 19951, 6701, 13473, 897, 14659, 699, 13806, + 1037, 19951, 6701, 13473, 897, 14659, 13806, + 1037, 19951, 6701, 13473, 897, 22495, 13806, + 1037, 19951, 6701, 13807, 897, 699, 22495, 13472, + 1037, 19951, 6701, 13807, 897, 8281, 699, 13472, + 1037, 19951, 6701, 13807, 897, 8281, 13472, + 1037, 19951, 6701, 13807, 897, 14659, 699, 13472, + 1037, 19951, 6701, 13807, 897, 14659, 13472, + 1037, 19951, 6701, 13807, 897, 22495, 13472, + 1037, 19951, 6701, 16095, 897, 8281, 17170, + 1037, 19951, 6701, 16095, 897, 14659, 17170, + 1037, 19951, 6701, 16095, 897, 22495, 17170, + 1037, 19951, 6701, 17171, 897, 8281, 16094, + 1037, 19951, 6701, 17171, 897, 14659, 16094, + 1037, 19951, 6701, 17171, 897, 22495, 16094, + 1037, 19951, 8281, 699, 13473, 897, 14659, 6701, 13806, + 1037, 19951, 8281, 6701, 13473, 897, 14659, 699, 13806, + 1037, 19951, 8281, 13473, 897, 14659, 699, 13806, + 1037, 19951, 8281, 13473, 897, 14659, 6701, 13806, + 1037, 19951, 8281, 13473, 897, 14659, 20933, 13806, + 1037, 19951, 8281, 13807, 897, 14659, 699, 13472, + 1037, 19951, 8281, 13807, 897, 14659, 6701, 13472, + 1037, 19951, 8281, 13807, 897, 14659, 20933, 13472, + 1037, 19951, 13473, 698, + 1037, 19951, 13473, 699, 897, 8280, + 1037, 19951, 13473, 699, 897, 13807, 6700, + 1037, 19951, 13473, 699, 897, 14658, + 1037, 19951, 13473, 699, 897, 22494, + 1037, 19951, 13473, 6700, + 1037, 19951, 13473, 6701, 897, 8280, + 1037, 19951, 13473, 6701, 897, 14658, + 1037, 19951, 13473, 6701, 897, 22494, + 1037, 19951, 13473, 8280, + 1037, 19951, 13473, 8281, 897, 13807, 14658, + 1037, 19951, 13473, 14658, + 1037, 19951, 13473, 16095, 6545, 20932, + 1037, 19951, 13473, 16095, 6545, 22494, + 1037, 19951, 13473, 17435, 6545, 20932, + 1037, 19951, 13473, 17435, 6545, 22494, + 1037, 19951, 13473, 20932, + 1037, 19951, 13473, 20933, 897, 8280, + 1037, 19951, 13473, 20933, 897, 14658, + 1037, 19951, 13473, 20933, 897, 22494, + 1037, 19951, 13473, 21775, 6545, 20932, + 1037, 19951, 13473, 21775, 6545, 22494, + 1037, 19951, 13473, 22494, + 1037, 19951, 13807, 698, + 1037, 19951, 13807, 699, 897, 8280, + 1037, 19951, 13807, 699, 897, 13473, 6700, + 1037, 19951, 13807, 699, 897, 14658, + 1037, 19951, 13807, 699, 897, 22494, + 1037, 19951, 13807, 917, 699, 897, 8280, + 1037, 19951, 13807, 917, 699, 897, 14658, + 1037, 19951, 13807, 917, 6701, 897, 8280, + 1037, 19951, 13807, 917, 6701, 897, 14658, + 1037, 19951, 13807, 3473, 897, 15287, 8280, + 1037, 19951, 13807, 6700, + 1037, 19951, 13807, 6701, 897, 8280, + 1037, 19951, 13807, 6701, 897, 14658, + 1037, 19951, 13807, 6701, 897, 22494, + 1037, 19951, 13807, 8280, + 1037, 19951, 13807, 8281, 897, 13473, 14658, + 1037, 19951, 13807, 14658, + 1037, 19951, 13807, 15827, 897, 13839, 8280, + 1037, 19951, 13807, 16095, 6545, 20932, + 1037, 19951, 13807, 16095, 6545, 22494, + 1037, 19951, 13807, 17435, 6545, 20932, + 1037, 19951, 13807, 17435, 6545, 22494, + 1037, 19951, 13807, 19791, 12934, + 1037, 19951, 13807, 19791, 13839, 8281, 661, 15287, 15901, 661, 13839, 14658, + 1037, 19951, 13807, 19791, 13839, 8281, 661, 16661, 15901, 661, 13839, 14658, + 1037, 19951, 13807, 19791, 15287, 8281, 661, 13839, 14658, + 1037, 19951, 13807, 19791, 15287, 8281, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 15287, 8281, 661, 13839, 15901, 661, 15287, 14658, + 1037, 19951, 13807, 19791, 15287, 8281, 661, 16661, 14658, + 1037, 19951, 13807, 19791, 15287, 8281, 661, 16661, 14659, 661, 13839, 8280, + 1037, 19951, 13807, 19791, 15287, 8281, 661, 16661, 15901, 661, 13839, 8280, + 1037, 19951, 13807, 19791, 15287, 8281, 661, 16661, 15901, 661, 15287, 14658, + 1037, 19951, 13807, 19791, 15287, 14659, 661, 13839, 8280, + 1037, 19951, 13807, 19791, 15287, 14659, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 15287, 14659, 661, 16661, 8280, + 1037, 19951, 13807, 19791, 15287, 14659, 661, 16661, 8281, 661, 13839, 14658, + 1037, 19951, 13807, 19791, 15287, 14659, 661, 16661, 15901, 661, 13839, 14658, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 13839, 8280, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 13839, 14658, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 16661, 8280, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 16661, 8281, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 16661, 8281, 661, 13839, 15901, 661, 16661, 14658, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 16661, 8281, 897, 16661, 14659, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 16661, 14658, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 16661, 14659, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 16661, 14659, 661, 13839, 15901, 661, 16661, 8280, + 1037, 19951, 13807, 19791, 15287, 15901, 661, 16661, 14659, 897, 16661, 8281, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 16661, 8281, 661, 13839, 14658, + 1037, 19951, 13807, 19791, 16661, 8281, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 16661, 8281, 661, 13839, 15901, 661, 16661, 14658, + 1037, 19951, 13807, 19791, 16661, 8281, 661, 15287, 15901, 661, 16661, 14658, + 1037, 19951, 13807, 19791, 16661, 8281, 661, 15287, 15901, 661, 16661, 14659, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 16661, 14659, 661, 13839, 8280, + 1037, 19951, 13807, 19791, 16661, 14659, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 16661, 14659, 661, 15287, 15901, 661, 16661, 8281, 661, 13839, 15900, + 1037, 19951, 13807, 19791, 17988, + 1037, 19951, 13807, 20932, + 1037, 19951, 13807, 20933, 897, 3473, 8280, + 1037, 19951, 13807, 20933, 897, 3473, 14658, + 1037, 19951, 13807, 20933, 897, 8280, + 1037, 19951, 13807, 20933, 897, 14658, + 1037, 19951, 13807, 20933, 897, 15827, 8280, + 1037, 19951, 13807, 20933, 897, 15827, 14658, + 1037, 19951, 13807, 20933, 897, 22494, + 1037, 19951, 13807, 21775, 6545, 20932, + 1037, 19951, 13807, 21775, 6545, 22494, + 1037, 19951, 13807, 22494, + 1037, 19951, 13807, 22495, 897, 13839, 14658, + 1037, 19951, 13807, 22495, 897, 15287, 14658, + 1037, 19951, 13807, 22495, 11513, 20933, 17264, + 1037, 19951, 14659, 699, 13473, 897, 8281, 6701, 13806, + 1037, 19951, 14659, 6701, 13473, 897, 8281, 699, 13806, + 1037, 19951, 14659, 13473, 897, 8281, 699, 13806, + 1037, 19951, 14659, 13473, 897, 8281, 6701, 13806, + 1037, 19951, 14659, 13473, 897, 8281, 20933, 13806, + 1037, 19951, 14659, 13807, 897, 8281, 699, 13472, + 1037, 19951, 14659, 13807, 897, 8281, 6701, 13472, + 1037, 19951, 14659, 13807, 897, 8281, 20933, 13472, + 1037, 19951, 16095, 699, 897, 8280, + 1037, 19951, 16095, 699, 897, 14658, + 1037, 19951, 16095, 699, 897, 22494, + 1037, 19951, 16095, 6701, 897, 8280, + 1037, 19951, 16095, 6701, 897, 14658, + 1037, 19951, 16095, 6701, 897, 22494, + 1037, 19951, 16095, 19791, 13839, 8281, 661, 16661, 15901, 661, 13839, 14658, + 1037, 19951, 16095, 19791, 15287, 8281, 661, 13839, 14658, + 1037, 19951, 16095, 19791, 15287, 8281, 661, 16661, 15901, 661, 15287, 14658, + 1037, 19951, 16095, 19791, 15287, 14659, 661, 13839, 8280, + 1037, 19951, 16095, 20932, + 1037, 19951, 16095, 20933, 897, 8280, + 1037, 19951, 16095, 20933, 897, 14658, + 1037, 19951, 16095, 20933, 897, 22494, + 1037, 19951, 16095, 22494, + 1037, 19951, 20933, 13473, 897, 8281, 13806, + 1037, 19951, 20933, 13473, 897, 14659, 13806, + 1037, 19951, 20933, 13473, 897, 22495, 13806, + 1037, 19951, 20933, 13807, 897, 8281, 13472, + 1037, 19951, 20933, 13807, 897, 14659, 13472, + 1037, 19951, 20933, 13807, 897, 22495, 13472, + 1037, 19951, 20933, 16095, 897, 8281, 17170, + 1037, 19951, 20933, 16095, 897, 14659, 17170, + 1037, 19951, 20933, 16095, 897, 22495, 17170, + 1037, 19951, 20933, 17171, 897, 8281, 16094, + 1037, 19951, 20933, 17171, 897, 14659, 16094, + 1037, 19951, 20933, 17171, 897, 22495, 16094, + 1038, + 1046, + 1054, + 1055, 10696, + 1089, 19122, + 1090, + 1091, 6996, + 1091, 6997, 11513, 3791, 14916, + 1091, 6997, 11513, 15063, 507, 1956, + 1114, + 1121, 3076, + 1145, 17265, 6, + 1145, 17265, 14, + 1145, 17265, 26, + 1145, 17265, 30, + 1145, 17265, 32, + 1145, 17265, 36, + 1145, 17265, 38, + 1145, 17265, 278, + 1145, 17265, 290, + 1145, 17265, 296, + 1145, 17265, 552, + 1145, 17265, 558, + 1145, 17265, 580, + 1145, 17265, 620, + 1145, 17265, 630, + 1145, 17265, 636, + 1145, 17265, 642, + 1145, 17265, 646, + 1145, 17265, 658, + 1145, 17265, 746, + 1145, 17265, 766, + 1145, 17265, 1066, + 1145, 17265, 1822, + 1145, 17265, 1830, + 1145, 17265, 1832, + 1145, 17265, 1834, + 1145, 17265, 1836, + 1145, 17265, 3328, + 1145, 17265, 3334, + 1145, 17265, 3356, + 1145, 17265, 3360, + 1145, 17265, 7678, + 1145, 17265, 7738, + 1145, 17265, 7740, + 1145, 17265, 7742, + 1145, 17265, 7744, + 1145, 17265, 10758, + 1145, 17265, 13560, + 1145, 18961, 1036, + 1145, 18961, 1156, + 1145, 18961, 1280, + 1145, 18961, 1355, 2760, + 1145, 18961, 1355, 3536, + 1145, 18961, 1355, 15116, + 1145, 18961, 1428, + 1145, 18961, 1432, + 1145, 18961, 2569, 2760, + 1145, 18961, 2569, 3536, + 1145, 18961, 2569, 7058, + 1145, 18961, 2569, 15116, + 1145, 18961, 2756, + 1145, 18961, 2807, 2760, + 1145, 18961, 2807, 3536, + 1145, 18961, 3040, + 1145, 18961, 3044, + 1145, 18961, 3310, + 1145, 18961, 6092, + 1145, 18961, 6103, 507, 12712, + 1145, 18961, 6106, + 1145, 18961, 6336, + 1145, 18961, 7026, + 1145, 18961, 7052, + 1145, 18961, 7432, + 1145, 18961, 7460, + 1145, 18961, 7670, + 1145, 18961, 7838, + 1145, 18961, 8255, 2760, + 1145, 18961, 8255, 3536, + 1145, 18961, 8255, 7058, + 1145, 18961, 8255, 15116, + 1145, 18961, 8351, 2760, + 1145, 18961, 8351, 3536, + 1145, 18961, 8846, + 1145, 18961, 8862, + 1145, 18961, 8980, + 1145, 18961, 10092, + 1145, 18961, 10414, + 1145, 18961, 10580, + 1145, 18961, 11467, 2760, + 1145, 18961, 11467, 3536, + 1145, 18961, 11489, 2760, + 1145, 18961, 11489, 3536, + 1145, 18961, 12567, 2760, + 1145, 18961, 12567, 3536, + 1145, 18961, 12682, + 1145, 18961, 12706, + 1145, 18961, 13046, + 1145, 18961, 13380, + 1145, 18961, 13415, 2760, + 1145, 18961, 13415, 3536, + 1145, 18961, 13415, 15116, + 1145, 18961, 13471, 2760, + 1145, 18961, 13471, 3536, + 1145, 18961, 13715, 2760, + 1145, 18961, 13715, 3536, + 1145, 18961, 14025, 2760, + 1145, 18961, 14025, 3536, + 1145, 18961, 14804, + 1145, 18961, 14911, 2760, + 1145, 18961, 14911, 3536, + 1145, 18961, 14920, + 1145, 18961, 14923, 2760, + 1145, 18961, 14923, 3536, + 1145, 18961, 15044, + 1145, 18961, 15134, + 1145, 18961, 15437, 2760, + 1145, 18961, 15437, 3536, + 1145, 18961, 15776, + 1145, 18961, 16682, + 1145, 18961, 16686, + 1145, 18961, 16890, + 1145, 18961, 17018, + 1145, 18961, 17095, 2760, + 1145, 18961, 17095, 3536, + 1145, 18961, 17095, 15116, + 1145, 18961, 17209, 2760, + 1145, 18961, 17209, 3536, + 1145, 18961, 17376, + 1145, 18961, 17466, + 1145, 18961, 17892, + 1145, 18961, 19700, + 1145, 18961, 22288, + 1145, 18961, 22901, 7429, 11047, 15210, + 1145, 18961, 22901, 7670, + 1145, 18961, 22901, 11466, + 1145, 18961, 22901, 15448, + 1145, 18961, 22901, 17598, + 1145, 18961, 23777, 1354, + 1145, 18961, 23777, 1480, + 1145, 18961, 23777, 3200, + 1145, 18961, 23777, 6082, + 1145, 18961, 23777, 6230, + 1145, 18961, 23777, 6880, + 1145, 18961, 23777, 7030, + 1145, 18961, 23777, 7062, + 1145, 18961, 23777, 7212, + 1145, 18961, 23777, 7332, + 1145, 18961, 23777, 8276, + 1145, 18961, 23777, 8350, + 1145, 18961, 23777, 10386, + 1145, 18961, 23777, 10580, + 1145, 18961, 23777, 11504, + 1145, 18961, 23777, 13536, + 1145, 18961, 23777, 14810, + 1145, 18961, 23777, 15180, + 1145, 18961, 23777, 16096, + 1145, 18961, 23777, 17202, + 1145, 18961, 23777, 17325, 18504, + 1145, 18961, 23777, 17466, + 1145, 18961, 23887, 6880, + 1145, 18961, 23887, 15180, + 1145, 18961, 23887, 16096, + 1145, 18961, 23887, 17466, + 1145, 24211, 26106, + 1145, 24211, 26108, + 1145, 24211, 26110, + 1145, 24211, 26112, + 1145, 24211, 26114, + 1156, + 1157, 6996, + 1165, 521, 12525, 17224, + 1165, 11513, 14988, + 1169, 507, 8846, + 1249, 16136, + 1249, 16138, + 1249, 16140, + 1249, 16142, + 1249, 16144, + 1249, 16146, + 1277, 16095, 13474, + 1280, + 1281, 6996, + 1291, 9904, + 1291, 12318, + 1291, 14004, + 1291, 20406, + 1320, + 1352, + 1353, 507, 10144, + 1353, 507, 13908, + 1353, 11513, 18263, 878, + 1366, + 1380, + 1393, 507, 14574, + 1393, 11513, 21557, 12415, 12318, + 1432, + 1457, 7788, + 1457, 18542, + 1480, + 1482, + 1493, 888, + 1495, 6996, + 1496, + 1567, 14982, + 1789, 1280, + 1789, 16884, + 1789, 19162, + 1789, 19610, + 1806, + 1857, 6370, + 1857, 12930, + 1857, 14880, + 1857, 16347, 14975, 897, 9922, + 1874, + 1906, + 2034, + 2063, 10574, + 2193, 6346, + 2207, 289, 446, + 2207, 289, 486, + 2207, 375, 394, + 2207, 10575, 9821, 17534, + 2207, 11033, 2367, 198, + 2207, 11033, 2367, 656, + 2207, 11033, 2367, 3428, + 2207, 11033, 2367, 15892, + 2207, 13069, 2760, + 2207, 13069, 3240, + 2207, 13069, 3536, + 2207, 13069, 7036, + 2207, 13069, 7058, + 2207, 13069, 9358, + 2207, 13069, 11824, + 2207, 13069, 13150, + 2207, 13069, 14778, + 2207, 13069, 15116, + 2207, 15407, 10575, 0, + 2207, 15407, 10575, 8, + 2207, 15407, 10575, 16, + 2207, 15407, 10575, 28, + 2207, 15407, 10575, 40, + 2207, 15407, 10575, 48, + 2207, 15407, 10575, 58, + 2207, 15407, 10575, 72, + 2207, 15407, 10575, 80, + 2207, 15407, 10575, 104, + 2207, 15407, 10575, 194, + 2207, 15407, 10575, 314, + 2207, 15407, 10575, 706, + 2207, 15407, 10575, 794, + 2207, 15407, 10575, 2367, 2000, + 2207, 15407, 10575, 2367, 2098, + 2207, 16531, 28, + 2207, 16531, 118, + 2207, 16531, 142, + 2207, 16531, 168, + 2207, 16531, 241, 1458, + 2207, 16531, 241, 1486, + 2207, 16531, 241, 3378, + 2207, 16531, 241, 10730, + 2207, 16531, 289, 3378, + 2207, 16531, 289, 10730, + 2207, 16531, 374, + 2207, 16531, 412, + 2207, 16531, 413, 8322, + 2207, 16531, 413, 8358, + 2207, 16531, 446, + 2207, 16531, 486, + 2207, 16531, 566, + 2207, 16531, 606, + 2207, 16531, 629, 3378, + 2207, 16531, 629, 10730, + 2207, 16531, 660, + 2207, 16531, 754, + 2207, 16531, 786, + 2207, 16531, 2043, 3378, + 2207, 16531, 2043, 10730, + 2207, 16531, 2582, + 2207, 16531, 2706, + 2207, 16531, 2837, 3378, + 2207, 16531, 2837, 10730, + 2207, 16531, 3429, 3378, + 2207, 16531, 3429, 10730, + 2207, 16531, 8075, 262, + 2207, 16531, 8075, 2706, + 2207, 16531, 9821, 1000, + 2207, 16531, 9821, 1116, + 2207, 16531, 9821, 1214, + 2207, 16531, 9821, 1236, + 2207, 16531, 9821, 1588, + 2207, 16531, 9821, 1918, + 2207, 16531, 9821, 2278, + 2207, 16531, 9821, 2624, + 2207, 16531, 9821, 2698, + 2207, 16531, 9821, 3502, + 2207, 16531, 9821, 6572, + 2207, 16531, 9821, 11082, + 2207, 16531, 20613, 3212, + 2207, 16531, 20613, 3286, + 2207, 19976, + 2207, 20962, + 2207, 21636, + 2207, 21847, 10575, 412, + 2207, 21847, 10575, 2706, + 2207, 23781, 8808, + 2232, + 2238, + 2299, 507, 18170, + 2301, 8320, + 2301, 16095, 14571, 21779, 8808, + 2301, 16420, + 2301, 16421, 11513, 1290, + 2301, 17750, + 2301, 19574, + 2301, 22209, 17298, + 2304, + 2306, + 2308, + 2310, + 2368, + 2369, 323, 17468, + 2369, 323, 19649, 10727, 22538, + 2369, 897, 15469, 18273, 13458, + 2369, 11513, 1641, 563, 2370, + 2369, 11513, 17458, + 2369, 17960, + 2373, 17299, 1493, 22540, + 2467, 13016, + 2467, 13069, 2760, + 2467, 13069, 3240, + 2467, 13069, 3536, + 2467, 13069, 7036, + 2467, 13069, 7058, + 2467, 13069, 9358, + 2467, 13069, 11824, + 2467, 13069, 13150, + 2467, 13069, 14778, + 2467, 13069, 15116, + 2467, 16095, 13016, + 2467, 16531, 0, + 2467, 16531, 8, + 2467, 16531, 28, + 2467, 16531, 108, + 2467, 16531, 150, + 2467, 16531, 178, + 2467, 16531, 374, + 2467, 16531, 394, + 2467, 16531, 516, + 2467, 16531, 522, + 2467, 16531, 548, + 2467, 16531, 604, + 2467, 16531, 606, + 2467, 16531, 648, + 2467, 16531, 738, + 2467, 16531, 786, + 2467, 16531, 1124, + 2467, 16531, 1198, + 2467, 16531, 1684, + 2467, 16531, 1692, + 2467, 16531, 2204, + 2467, 16531, 2438, + 2467, 16531, 2580, + 2467, 16531, 2600, + 2467, 16531, 2834, + 2467, 16531, 3216, + 2467, 16531, 3410, + 2467, 16531, 8056, + 2467, 16531, 8796, + 2467, 16531, 10936, + 2467, 16531, 13666, + 2490, + 2517, 18653, 10575, 7796, + 2517, 18653, 10575, 9766, + 2517, 18653, 10575, 14040, + 2517, 18653, 10575, 15010, + 2517, 18653, 10575, 15192, + 2517, 18653, 13069, 2760, + 2517, 18653, 13069, 3240, + 2517, 18653, 13069, 3536, + 2517, 18653, 13069, 7036, + 2517, 18653, 13069, 7058, + 2517, 18653, 13069, 9358, + 2517, 18653, 13069, 11824, + 2517, 18653, 13069, 13150, + 2517, 18653, 13069, 14778, + 2517, 18653, 13069, 15116, + 2517, 18653, 16531, 0, + 2517, 18653, 16531, 8, + 2517, 18653, 16531, 16, + 2517, 18653, 16531, 28, + 2517, 18653, 16531, 40, + 2517, 18653, 16531, 60, + 2517, 18653, 16531, 70, + 2517, 18653, 16531, 74, + 2517, 18653, 16531, 190, + 2517, 18653, 16531, 202, + 2517, 18653, 16531, 204, + 2517, 18653, 16531, 312, + 2517, 18653, 16531, 332, + 2517, 18653, 16531, 334, + 2517, 18653, 16531, 516, + 2517, 18653, 16531, 524, + 2517, 18653, 16531, 542, + 2517, 18653, 16531, 678, + 2517, 18653, 16531, 680, + 2517, 18653, 16531, 690, + 2517, 18653, 16531, 702, + 2517, 18653, 16531, 908, + 2517, 18653, 16531, 1382, + 2517, 18653, 16531, 1396, + 2517, 18653, 16531, 1424, + 2517, 18653, 16531, 1858, + 2517, 18653, 16531, 2762, + 2571, 3375, 2319, 10575, 2194, + 2571, 3375, 2319, 10575, 8244, + 2571, 3375, 2319, 10931, 13069, 2760, + 2571, 3375, 2319, 11033, 16606, + 2571, 3375, 2319, 11033, 16608, + 2571, 3375, 2319, 13069, 2760, + 2571, 3375, 2319, 13069, 3240, + 2571, 3375, 2319, 13069, 3536, + 2571, 3375, 2319, 13069, 7036, + 2571, 3375, 2319, 13069, 7058, + 2571, 3375, 2319, 13069, 9358, + 2571, 3375, 2319, 13069, 11824, + 2571, 3375, 2319, 13069, 13150, + 2571, 3375, 2319, 13069, 14778, + 2571, 3375, 2319, 13069, 15116, + 2571, 3375, 2319, 15407, 10575, 8, + 2571, 3375, 2319, 15407, 10575, 28, + 2571, 3375, 2319, 15407, 10575, 40, + 2571, 3375, 2319, 15407, 10575, 58, + 2571, 3375, 2319, 15407, 10575, 66, + 2571, 3375, 2319, 15407, 10575, 104, + 2571, 3375, 2319, 15407, 10575, 314, + 2571, 3375, 2319, 15407, 10575, 340, + 2571, 3375, 2319, 15407, 10575, 498, + 2571, 3375, 2319, 15407, 10575, 542, + 2571, 3375, 2319, 15407, 10575, 682, + 2571, 3375, 2319, 15407, 10575, 706, + 2571, 3375, 2319, 15407, 10575, 710, + 2571, 3375, 2319, 15407, 10575, 840, + 2571, 3375, 2319, 15407, 10575, 2734, + 2571, 3375, 2319, 15407, 10575, 3592, + 2571, 3375, 2319, 15407, 10575, 15407, 21876, + 2571, 3375, 2319, 16531, 2301, 108, + 2571, 3375, 2319, 16531, 2301, 150, + 2571, 3375, 2319, 16531, 2301, 228, + 2571, 3375, 2319, 16531, 2301, 272, + 2571, 3375, 2319, 16531, 2301, 358, + 2571, 3375, 2319, 16531, 2301, 394, + 2571, 3375, 2319, 16531, 2301, 426, + 2571, 3375, 2319, 16531, 2301, 466, + 2571, 3375, 2319, 16531, 2301, 548, + 2571, 3375, 2319, 16531, 2301, 582, + 2571, 3375, 2319, 16531, 2301, 614, + 2571, 3375, 2319, 16531, 2301, 648, + 2571, 3375, 2319, 16531, 2301, 714, + 2571, 3375, 2319, 16531, 2301, 762, + 2571, 3375, 2319, 16531, 2301, 778, + 2571, 3375, 2319, 16531, 2301, 2154, + 2571, 3375, 2319, 16531, 2301, 2574, + 2571, 3375, 2319, 16531, 2301, 2830, + 2571, 3375, 2319, 16531, 2301, 3302, + 2571, 3375, 2319, 16531, 2301, 3422, + 2571, 3375, 2319, 16531, 2301, 3488, + 2571, 3375, 2319, 16531, 2301, 3842, + 2571, 3375, 2319, 16531, 7521, 108, + 2571, 3375, 2319, 16531, 7521, 150, + 2571, 3375, 2319, 16531, 7521, 228, + 2571, 3375, 2319, 16531, 7521, 272, + 2571, 3375, 2319, 16531, 7521, 358, + 2571, 3375, 2319, 16531, 7521, 394, + 2571, 3375, 2319, 16531, 7521, 426, + 2571, 3375, 2319, 16531, 7521, 466, + 2571, 3375, 2319, 16531, 7521, 548, + 2571, 3375, 2319, 16531, 7521, 582, + 2571, 3375, 2319, 16531, 7521, 614, + 2571, 3375, 2319, 16531, 7521, 648, + 2571, 3375, 2319, 16531, 7521, 714, + 2571, 3375, 2319, 16531, 7521, 762, + 2571, 3375, 2319, 16531, 7521, 778, + 2571, 3375, 2319, 16531, 7521, 2154, + 2571, 3375, 2319, 16531, 7521, 2574, + 2571, 3375, 2319, 16531, 7521, 2830, + 2571, 3375, 2319, 16531, 7521, 3302, + 2571, 3375, 2319, 16531, 7521, 3422, + 2571, 3375, 2319, 16531, 7521, 3488, + 2571, 3375, 2319, 16531, 7521, 3842, + 2571, 3375, 2319, 16531, 13259, 2, + 2571, 3375, 2319, 16531, 13259, 6, + 2571, 3375, 2319, 16531, 13259, 20, + 2571, 3375, 2319, 16531, 13259, 24, + 2571, 3375, 2319, 16531, 13259, 26, + 2571, 3375, 2319, 16531, 13259, 42, + 2571, 3375, 2319, 16531, 13259, 474, + 2571, 8981, 11513, 6996, + 2571, 8981, 17298, + 2571, 17131, 10574, + 2623, 2301, 11033, 22172, + 2623, 7521, 11033, 22172, + 2623, 12922, + 2623, 13069, 2760, + 2623, 13069, 3240, + 2623, 13069, 3536, + 2623, 13069, 7036, + 2623, 13069, 7058, + 2623, 13069, 9358, + 2623, 13069, 11824, + 2623, 13069, 13150, + 2623, 13069, 14778, + 2623, 13069, 15116, + 2623, 15051, 10574, + 2623, 16075, 10574, + 2623, 16531, 0, + 2623, 16531, 8, + 2623, 16531, 16, + 2623, 16531, 26, + 2623, 16531, 28, + 2623, 16531, 40, + 2623, 16531, 108, + 2623, 16531, 150, + 2623, 16531, 186, + 2623, 16531, 228, + 2623, 16531, 272, + 2623, 16531, 344, + 2623, 16531, 358, + 2623, 16531, 394, + 2623, 16531, 426, + 2623, 16531, 466, + 2623, 16531, 467, 17580, + 2623, 16531, 522, + 2623, 16531, 548, + 2623, 16531, 598, + 2623, 16531, 614, + 2623, 16531, 648, + 2623, 16531, 738, + 2623, 16531, 778, + 2623, 16531, 1116, + 2623, 16531, 1554, + 2623, 16531, 2698, + 2623, 16531, 2699, 17580, + 2623, 16531, 3118, + 2623, 16531, 7907, 344, + 2623, 16531, 7907, 598, + 2623, 16531, 7907, 1116, + 2623, 16531, 22260, + 2623, 17299, 523, 16028, + 2623, 17299, 22462, + 2623, 21127, 8351, 2301, 11032, + 2623, 21127, 8351, 7521, 11032, + 2623, 21127, 8351, 17037, 11032, + 2623, 21127, 8351, 22273, 11032, + 2623, 21127, 14837, 2301, 11032, + 2623, 21127, 14837, 7521, 11032, + 2623, 21127, 14837, 17037, 11032, + 2623, 21127, 16095, 1291, 12318, + 2623, 21127, 23919, 8808, + 2623, 22262, + 2623, 22532, + 2623, 23213, 8808, + 2640, + 2643, 1, 17273, 506, + 2643, 1, 20765, 506, + 2643, 83, 18107, 506, + 2643, 10574, + 2643, 11050, + 2643, 12659, 8808, + 2643, 13177, 660, + 2643, 15140, + 2643, 15703, 13177, 660, + 2643, 16761, 20759, 506, + 2643, 16761, 20759, 507, 529, 13177, 660, + 2643, 17225, 13589, 507, 529, 13177, 660, + 2643, 17225, 20411, 507, 529, 13177, 660, + 2643, 20455, 660, + 2643, 21485, 660, + 2643, 21558, + 2643, 22435, 660, + 2643, 23852, + 2643, 25985, 13177, 660, + 2653, 22978, + 2685, 897, 6102, + 2737, 1035, 3436, + 2737, 6059, 15854, + 2737, 6544, + 2737, 7054, + 2737, 7658, + 2737, 12652, + 2737, 15705, 507, 12658, + 2737, 15837, 5987, 26006, + 2737, 16095, 21042, + 2737, 19755, 17641, 16786, + 2737, 20163, 7054, + 2751, 10574, + 2753, 6708, + 2757, 2034, + 2757, 14255, 17697, 16531, 880, + 2757, 14255, 17697, 16531, 988, + 2757, 14255, 17697, 16531, 1192, + 2757, 14255, 17697, 16531, 1200, + 2757, 14255, 17697, 16531, 1462, + 2757, 14255, 17697, 16531, 1682, + 2757, 14255, 17697, 16531, 1710, + 2757, 14255, 17697, 16531, 1988, + 2757, 14255, 17697, 16531, 2202, + 2757, 14255, 17697, 16531, 2926, + 2757, 14255, 17697, 16531, 3062, + 2757, 14255, 17697, 16531, 3174, + 2757, 14255, 17697, 16531, 3372, + 2757, 14255, 17697, 16531, 3408, + 2757, 14255, 17697, 16531, 3750, + 2757, 14255, 17697, 16531, 3918, + 2757, 14255, 17697, 16531, 4020, + 2757, 14255, 17697, 16531, 5482, + 2757, 14255, 17697, 16531, 6862, + 2757, 14255, 17697, 16531, 6864, + 2757, 14255, 17697, 16531, 6866, + 2757, 14255, 17697, 16531, 7240, + 2757, 14255, 17697, 16531, 8054, + 2757, 14255, 17697, 16531, 8850, + 2757, 14255, 17697, 16531, 9438, + 2757, 14255, 17697, 16531, 10928, + 2757, 14255, 17697, 16531, 10940, + 2757, 14255, 17697, 16531, 11812, + 2757, 14255, 17697, 16531, 13370, + 2757, 14255, 17697, 16787, 2760, + 2757, 14255, 17697, 16787, 3412, + 2757, 14255, 17697, 16787, 17474, + 2757, 14931, 17697, 16531, 230, + 2757, 14931, 17697, 16531, 276, + 2757, 14931, 17697, 16531, 946, + 2757, 14931, 17697, 16531, 2406, + 2757, 14931, 17697, 16531, 2676, + 2757, 14931, 17697, 16531, 3192, + 2757, 14931, 17697, 16531, 3398, + 2757, 14931, 17697, 16531, 3750, + 2757, 14931, 17697, 16531, 5482, + 2757, 14931, 17697, 16531, 6066, + 2757, 14931, 17697, 16531, 7478, + 2757, 14931, 17697, 16531, 8002, + 2757, 14931, 17697, 16531, 9992, + 2757, 14931, 17697, 16531, 10120, + 2757, 14931, 17697, 16531, 10478, + 2757, 14931, 17697, 16531, 10914, + 2757, 14931, 17697, 16531, 10934, + 2757, 14931, 17697, 16531, 11722, + 2757, 14931, 17697, 16531, 11820, + 2757, 14931, 17697, 16531, 13372, + 2757, 14931, 17697, 16531, 13384, + 2757, 14931, 17697, 16531, 13692, + 2757, 14931, 17697, 16531, 14720, + 2757, 14931, 17697, 16531, 15098, + 2757, 14931, 17697, 16531, 16010, + 2757, 14931, 17697, 16531, 16040, + 2757, 14931, 17697, 16531, 16508, + 2757, 14931, 17697, 16531, 17060, + 2757, 14931, 17697, 16531, 17984, + 2757, 14931, 17697, 16787, 2760, + 2757, 14931, 17697, 16787, 13254, + 2757, 14931, 17697, 18729, 21498, + 2757, 16393, 16531, 0, + 2757, 16393, 16531, 8, + 2757, 16393, 16531, 16, + 2757, 16393, 16531, 28, + 2757, 16393, 16531, 40, + 2757, 16393, 16531, 112, + 2757, 16393, 16531, 156, + 2757, 16393, 16531, 188, + 2757, 16393, 16531, 200, + 2757, 16393, 16531, 202, + 2757, 16393, 16531, 204, + 2757, 16393, 16531, 212, + 2757, 16393, 16531, 214, + 2757, 16393, 16531, 276, + 2757, 16393, 16531, 314, + 2757, 16393, 16531, 358, + 2757, 16393, 16531, 362, + 2757, 16393, 16531, 380, + 2757, 16393, 16531, 554, + 2757, 16393, 16531, 652, + 2757, 16393, 16531, 706, + 2757, 16393, 16531, 718, + 2757, 16393, 16531, 780, + 2757, 16393, 16531, 798, + 2757, 16393, 16531, 1118, + 2757, 16393, 16531, 1378, + 2757, 16393, 16531, 1410, + 2757, 16393, 16531, 1412, + 2757, 16393, 16531, 1416, + 2757, 16393, 16531, 2038, + 2757, 16393, 16531, 2832, + 2757, 16393, 16531, 3214, + 2757, 16393, 16531, 3424, + 2757, 16393, 16531, 20375, 3490, + 2757, 16393, 16531, 20683, 3490, + 2757, 16393, 18727, 2760, + 2757, 16393, 18727, 3412, + 2757, 16393, 18727, 7036, + 2757, 16393, 18727, 13254, + 2757, 16887, 16531, 8, + 2757, 16887, 16531, 16, + 2757, 16887, 16531, 28, + 2757, 16887, 16531, 40, + 2757, 16887, 16531, 82, + 2757, 16887, 16531, 188, + 2757, 16887, 16531, 272, + 2757, 16887, 16531, 298, + 2757, 16887, 16531, 306, + 2757, 16887, 16531, 522, + 2757, 16887, 16531, 778, + 2757, 16887, 16531, 790, + 2757, 16887, 16531, 1052, + 2757, 16887, 16531, 1282, + 2757, 16887, 16531, 1536, + 2757, 16887, 16531, 2234, + 2757, 16887, 16531, 3064, + 2757, 16887, 16531, 3232, + 2757, 16887, 16531, 3374, + 2757, 16887, 16531, 3678, + 2757, 16887, 16531, 3902, + 2757, 16887, 16531, 3924, + 2757, 16887, 16531, 3968, + 2757, 16887, 16531, 8130, + 2757, 16887, 16531, 9840, + 2757, 16887, 16531, 11062, + 2757, 16887, 16531, 11396, + 2757, 16887, 16531, 11678, + 2757, 16887, 16531, 11680, + 2757, 16887, 16531, 11818, + 2757, 16887, 16531, 11850, + 2757, 16887, 16531, 12664, + 2757, 16887, 16531, 13114, + 2757, 16887, 16531, 13116, + 2757, 16887, 16531, 13958, + 2757, 16887, 16531, 14112, + 2757, 16887, 16531, 14832, + 2757, 16887, 16531, 19088, + 2757, 17463, 16531, 16827, 0, + 2757, 17463, 16531, 16827, 16, + 2757, 17463, 16531, 16827, 28, + 2757, 17463, 16531, 16827, 60, + 2757, 17463, 16531, 16827, 64, + 2757, 17463, 16531, 16827, 68, + 2757, 17463, 16531, 16827, 78, + 2757, 17463, 16531, 16827, 82, + 2757, 17463, 16531, 16827, 88, + 2757, 17463, 16531, 16827, 90, + 2757, 17463, 16531, 16827, 92, + 2757, 17463, 16531, 16827, 94, + 2757, 17463, 16531, 16827, 104, + 2757, 17463, 16531, 16827, 182, + 2757, 17463, 16531, 16827, 202, + 2757, 17463, 16531, 16827, 208, + 2757, 17463, 16531, 16827, 226, + 2757, 17463, 16531, 16827, 302, + 2757, 17463, 16531, 16827, 328, + 2757, 17463, 16531, 16827, 504, + 2757, 17463, 16531, 16827, 524, + 2757, 17463, 16531, 16827, 526, + 2757, 17463, 16531, 16827, 532, + 2757, 17463, 16531, 16827, 852, + 2757, 17463, 16531, 16827, 854, + 2757, 17463, 16531, 16827, 858, + 2757, 17463, 16531, 16827, 860, + 2757, 17463, 16531, 16827, 862, + 2757, 17463, 16531, 16827, 864, + 2757, 17463, 16531, 16827, 866, + 2757, 17463, 16531, 16827, 868, + 2757, 17463, 16531, 16827, 870, + 2757, 17463, 16531, 16827, 872, + 2757, 17463, 16531, 16827, 922, + 2757, 17463, 16531, 16827, 1384, + 2757, 17463, 16531, 16827, 1390, + 2757, 17463, 16531, 16827, 1394, + 2757, 17463, 16531, 16827, 1398, + 2757, 17463, 16531, 16827, 1400, + 2757, 17463, 16531, 16827, 1412, + 2757, 17463, 16531, 16827, 2742, + 2757, 17463, 16531, 16827, 5994, + 2757, 17463, 16531, 19461, 0, + 2757, 17463, 16531, 19461, 8, + 2757, 17463, 16531, 19461, 16, + 2757, 17463, 16531, 19461, 60, + 2757, 17463, 16531, 19461, 64, + 2757, 17463, 16531, 19461, 66, + 2757, 17463, 16531, 19461, 68, + 2757, 17463, 16531, 19461, 78, + 2757, 17463, 16531, 19461, 88, + 2757, 17463, 16531, 19461, 90, + 2757, 17463, 16531, 19461, 94, + 2757, 17463, 16531, 19461, 104, + 2757, 17463, 16531, 19461, 182, + 2757, 17463, 16531, 19461, 226, + 2757, 17463, 16531, 19461, 328, + 2757, 17463, 16531, 19461, 504, + 2757, 17463, 16531, 19461, 526, + 2757, 17463, 16531, 19461, 852, + 2757, 17463, 16531, 19461, 858, + 2757, 17463, 16531, 19461, 860, + 2757, 17463, 16531, 19461, 864, + 2757, 17463, 16531, 19461, 870, + 2757, 17463, 16531, 19461, 872, + 2757, 17463, 16531, 19461, 898, + 2757, 17463, 16531, 19461, 922, + 2757, 17463, 16531, 19461, 1390, + 2757, 17463, 16531, 19461, 1398, + 2757, 17463, 16531, 19461, 1400, + 2757, 17463, 16531, 19461, 1412, + 2757, 17463, 16531, 19461, 2742, + 2757, 17463, 16531, 19461, 5458, + 2757, 17515, 16531, 554, + 2757, 17515, 16531, 2406, + 2757, 17515, 16531, 2676, + 2757, 17515, 16531, 3398, + 2757, 17515, 16531, 3750, + 2757, 17515, 16531, 6066, + 2757, 17515, 16531, 8002, + 2757, 17515, 16531, 8284, + 2757, 17515, 16531, 10120, + 2757, 17515, 16531, 10478, + 2757, 17515, 16531, 11722, + 2757, 17515, 16531, 12354, + 2757, 17515, 16531, 13259, 7478, + 2757, 17515, 16531, 14720, + 2757, 17515, 16531, 15606, + 2757, 17515, 16531, 16508, + 2757, 17515, 16531, 17060, + 2757, 17515, 16531, 22466, + 2757, 17515, 21127, 1291, 12318, + 2757, 17515, 21127, 1291, 12502, + 2757, 17515, 21127, 3537, 6697, 12318, + 2757, 17515, 21127, 3537, 6697, 12502, + 2757, 17515, 23555, 964, + 2757, 17515, 23555, 3537, 5990, + 2757, 17515, 23555, 3537, 6696, + 2757, 17515, 23555, 7059, 6696, + 2757, 17873, 7659, 8808, + 2757, 17873, 21517, 8808, + 2757, 18843, 10575, 0, + 2757, 18843, 10575, 16, + 2757, 18843, 10575, 40, + 2757, 18843, 10575, 108, + 2757, 18843, 10575, 126, + 2757, 18843, 10575, 150, + 2757, 18843, 10575, 160, + 2757, 18843, 10575, 170, + 2757, 18843, 10575, 228, + 2757, 18843, 10575, 248, + 2757, 18843, 10575, 264, + 2757, 18843, 10575, 272, + 2757, 18843, 10575, 344, + 2757, 18843, 10575, 348, + 2757, 18843, 10575, 358, + 2757, 18843, 10575, 380, + 2757, 18843, 10575, 394, + 2757, 18843, 10575, 426, + 2757, 18843, 10575, 440, + 2757, 18843, 10575, 454, + 2757, 18843, 10575, 466, + 2757, 18843, 10575, 490, + 2757, 18843, 10575, 548, + 2757, 18843, 10575, 598, + 2757, 18843, 10575, 610, + 2757, 18843, 10575, 614, + 2757, 18843, 10575, 648, + 2757, 18843, 10575, 668, + 2757, 18843, 10575, 714, + 2757, 18843, 10575, 720, + 2757, 18843, 10575, 762, + 2757, 18843, 10575, 778, + 2757, 18843, 10575, 796, + 2757, 18843, 10575, 3212, + 2757, 18843, 10575, 3286, + 2757, 18843, 10575, 3422, + 2757, 18843, 10575, 5970, + 2757, 18843, 10575, 17826, + 2757, 18843, 10575, 21168, + 2757, 18843, 10575, 22194, + 2757, 18843, 10575, 23108, + 2757, 18843, 10575, 23764, + 2757, 18843, 10575, 23766, + 2757, 18843, 10575, 24184, + 2757, 18843, 11537, 18010, + 2757, 18843, 16787, 2760, + 2757, 18843, 16787, 3412, + 2757, 18843, 16787, 3536, + 2757, 18843, 16787, 17474, + 2757, 18843, 16787, 18280, + 2757, 19137, 16531, 276, + 2757, 19137, 16531, 554, + 2757, 19137, 16531, 2406, + 2757, 19137, 16531, 2676, + 2757, 19137, 16531, 3398, + 2757, 19137, 16531, 3750, + 2757, 19137, 16531, 5556, + 2757, 19137, 16531, 6066, + 2757, 19137, 16531, 7478, + 2757, 19137, 16531, 8002, + 2757, 19137, 16531, 10478, + 2757, 19137, 16531, 11722, + 2757, 19137, 16531, 12354, + 2757, 19137, 16531, 13259, 276, + 2757, 19137, 16531, 13259, 2676, + 2757, 19137, 16531, 13259, 2677, 11513, 20933, 10856, + 2757, 19137, 16531, 13259, 3398, + 2757, 19137, 16531, 13259, 3399, 11513, 20933, 10856, + 2757, 19137, 16531, 13259, 6066, + 2757, 19137, 16531, 13259, 12354, + 2757, 19137, 16531, 13259, 14720, + 2757, 19137, 16531, 13259, 14721, 11513, 20933, 10856, + 2757, 19137, 16531, 13384, + 2757, 19137, 16531, 14720, + 2757, 19137, 16531, 15606, + 2757, 19137, 16531, 16508, + 2757, 19137, 16531, 17060, + 2757, 19137, 16531, 21003, 5556, + 2757, 19137, 16531, 36208, + 2757, 19137, 16787, 2760, + 2757, 19137, 16787, 2761, 18280, + 2757, 19137, 16787, 3412, + 2757, 19137, 16787, 3536, + 2757, 19137, 16787, 7036, + 2757, 19137, 16787, 7058, + 2757, 19137, 16787, 15116, + 2757, 19137, 16787, 17372, + 2757, 19137, 16787, 17474, + 2757, 19137, 20055, 2761, 7428, + 2757, 19137, 20241, 23058, + 2757, 20477, 19716, + 2757, 20477, 19717, 11513, 18633, 323, 20507, 23504, + 2757, 21481, 14911, 16531, 0, + 2757, 21481, 14911, 16531, 8, + 2757, 21481, 14911, 16531, 16, + 2757, 21481, 14911, 16531, 28, + 2757, 21481, 14911, 16531, 40, + 2757, 21481, 14911, 16531, 58, + 2757, 21481, 14911, 16531, 76, + 2757, 21481, 14911, 16531, 180, + 2757, 21481, 14911, 16531, 182, + 2757, 21481, 14911, 16531, 184, + 2757, 21481, 14911, 16531, 186, + 2757, 21481, 14911, 16531, 188, + 2757, 21481, 14911, 16531, 190, + 2757, 21481, 14911, 16531, 192, + 2757, 21481, 14911, 16531, 196, + 2757, 21481, 14911, 16531, 198, + 2757, 21481, 14911, 16531, 200, + 2757, 21481, 14911, 16531, 202, + 2757, 21481, 14911, 16531, 204, + 2757, 21481, 14911, 16531, 208, + 2757, 21481, 14911, 16531, 212, + 2757, 21481, 14911, 16531, 214, + 2757, 21481, 14911, 16531, 216, + 2757, 21481, 14911, 16531, 220, + 2757, 21481, 14911, 16531, 226, + 2757, 21481, 14911, 16531, 314, + 2757, 21481, 14911, 16531, 522, + 2757, 21481, 14911, 16531, 704, + 2757, 21481, 14911, 16531, 706, + 2757, 21481, 14911, 16531, 894, + 2757, 21481, 14911, 16531, 896, + 2757, 21481, 14911, 16531, 1356, + 2757, 21481, 14911, 16531, 1358, + 2757, 21481, 14911, 16531, 1368, + 2757, 21481, 14911, 16531, 1386, + 2757, 21481, 14911, 16531, 1388, + 2757, 21481, 14911, 16531, 1390, + 2757, 21481, 14911, 16531, 1398, + 2757, 21481, 14911, 16531, 1400, + 2757, 21481, 14911, 16531, 1418, + 2757, 21481, 14911, 16531, 1426, + 2757, 21481, 14911, 16531, 1438, + 2757, 21481, 14911, 16531, 2740, + 2757, 21481, 14911, 16531, 3614, + 2757, 21481, 14911, 16531, 12711, 8, + 2757, 21481, 14911, 16531, 14837, 212, + 2757, 21481, 14911, 16531, 21823, 504, + 2757, 21481, 14911, 16531, 21823, 682, + 2757, 21481, 14911, 16531, 22421, 10574, + 2757, 21481, 14911, 16531, 22607, 504, + 2757, 21481, 14911, 16531, 22607, 682, + 2757, 21481, 16787, 2760, + 2757, 21481, 16787, 2761, 18280, + 2757, 21481, 16787, 2761, 20828, + 2757, 21481, 16787, 3412, + 2757, 21481, 16787, 7036, + 2757, 21481, 16787, 13254, + 2757, 21481, 17835, 16531, 0, + 2757, 21481, 17835, 16531, 8, + 2757, 21481, 17835, 16531, 16, + 2757, 21481, 17835, 16531, 28, + 2757, 21481, 17835, 16531, 40, + 2757, 21481, 17835, 16531, 58, + 2757, 21481, 17835, 16531, 76, + 2757, 21481, 17835, 16531, 180, + 2757, 21481, 17835, 16531, 182, + 2757, 21481, 17835, 16531, 184, + 2757, 21481, 17835, 16531, 186, + 2757, 21481, 17835, 16531, 188, + 2757, 21481, 17835, 16531, 190, + 2757, 21481, 17835, 16531, 192, + 2757, 21481, 17835, 16531, 196, + 2757, 21481, 17835, 16531, 198, + 2757, 21481, 17835, 16531, 200, + 2757, 21481, 17835, 16531, 202, + 2757, 21481, 17835, 16531, 204, + 2757, 21481, 17835, 16531, 208, + 2757, 21481, 17835, 16531, 212, + 2757, 21481, 17835, 16531, 214, + 2757, 21481, 17835, 16531, 216, + 2757, 21481, 17835, 16531, 220, + 2757, 21481, 17835, 16531, 226, + 2757, 21481, 17835, 16531, 314, + 2757, 21481, 17835, 16531, 522, + 2757, 21481, 17835, 16531, 704, + 2757, 21481, 17835, 16531, 706, + 2757, 21481, 17835, 16531, 894, + 2757, 21481, 17835, 16531, 896, + 2757, 21481, 17835, 16531, 1356, + 2757, 21481, 17835, 16531, 1358, + 2757, 21481, 17835, 16531, 1368, + 2757, 21481, 17835, 16531, 1386, + 2757, 21481, 17835, 16531, 1388, + 2757, 21481, 17835, 16531, 1390, + 2757, 21481, 17835, 16531, 1398, + 2757, 21481, 17835, 16531, 1400, + 2757, 21481, 17835, 16531, 1418, + 2757, 21481, 17835, 16531, 1426, + 2757, 21481, 17835, 16531, 1438, + 2757, 21481, 17835, 16531, 2740, + 2757, 21481, 17835, 16531, 3614, + 2757, 21481, 17835, 16531, 12711, 8, + 2757, 21481, 17835, 16531, 14837, 212, + 2757, 21481, 17835, 16531, 21823, 504, + 2757, 21481, 17835, 16531, 21823, 682, + 2757, 21481, 17835, 16531, 22421, 10574, + 2757, 21481, 17835, 16531, 22607, 504, + 2757, 21481, 17835, 16531, 22607, 682, + 2761, 1291, 9787, 3537, 6697, 23554, + 2761, 1291, 16516, + 2761, 15863, 14028, + 2786, + 2805, 1137, 1701, 16531, 0, + 2805, 1137, 1701, 16531, 8, + 2805, 1137, 1701, 16531, 16, + 2805, 1137, 1701, 16531, 28, + 2805, 1137, 1701, 16531, 40, + 2805, 1137, 1701, 16531, 108, + 2805, 1137, 1701, 16531, 126, + 2805, 1137, 1701, 16531, 150, + 2805, 1137, 1701, 16531, 228, + 2805, 1137, 1701, 16531, 248, + 2805, 1137, 1701, 16531, 272, + 2805, 1137, 1701, 16531, 298, + 2805, 1137, 1701, 16531, 358, + 2805, 1137, 1701, 16531, 394, + 2805, 1137, 1701, 16531, 426, + 2805, 1137, 1701, 16531, 466, + 2805, 1137, 1701, 16531, 548, + 2805, 1137, 1701, 16531, 598, + 2805, 1137, 1701, 16531, 614, + 2805, 1137, 1701, 16531, 648, + 2805, 1137, 1701, 16531, 674, + 2805, 1137, 1701, 16531, 714, + 2805, 1137, 1701, 16531, 796, + 2805, 1137, 1701, 16531, 1116, + 2805, 1137, 1701, 16531, 2036, + 2805, 1137, 1701, 16531, 2574, + 2805, 1137, 1701, 16531, 2830, + 2805, 1137, 1701, 16531, 3422, + 2805, 1137, 1701, 16531, 13259, 20, + 2805, 1137, 1701, 16531, 13259, 22, + 2805, 1137, 1701, 16531, 13259, 24, + 2805, 1137, 1701, 16531, 13259, 26, + 2805, 1137, 1701, 16531, 13259, 30, + 2805, 1137, 1701, 16531, 13259, 38, + 2805, 1137, 1701, 16531, 13259, 44, + 2805, 1137, 1701, 16531, 13259, 48, + 2805, 1137, 1701, 16531, 13259, 474, + 2805, 1137, 1701, 17037, 11032, + 2805, 1137, 1701, 17037, 11033, 8350, + 2805, 1137, 1701, 17037, 11033, 8351, 13258, + 2805, 1137, 1701, 17037, 11033, 13258, + 2805, 1137, 1701, 17069, 11032, + 2805, 1137, 1701, 17069, 11033, 8350, + 2805, 1137, 1701, 17069, 11033, 8351, 13258, + 2805, 1137, 1701, 17069, 11033, 13258, + 2805, 1137, 1701, 17069, 18213, 10696, + 2805, 1137, 1701, 17069, 18213, 10697, 13258, + 2805, 1137, 1701, 18213, 10696, + 2805, 1137, 1701, 18213, 10697, 13258, + 2805, 1137, 1701, 18213, 10697, 19394, + 2805, 1137, 1701, 21593, 11032, + 2805, 1137, 1701, 21593, 11033, 8351, 13258, + 2805, 1137, 1701, 21593, 11033, 13258, + 2805, 1137, 1701, 23311, 11032, + 2805, 1137, 1701, 23311, 11033, 8350, + 2805, 1137, 1701, 23311, 11033, 8351, 13258, + 2805, 1137, 1701, 23311, 11033, 13258, + 2807, 16970, + 2812, + 2814, + 2817, 2860, + 2823, 9787, 19175, 19986, + 2825, 3413, 20829, 10574, + 2825, 10574, + 2825, 14001, 10574, + 2840, + 2842, + 2843, 6996, + 2843, 9440, + 2857, 22978, + 2867, 23131, 18314, + 2867, 23131, 22456, + 2869, 507, 7048, + 2903, 16561, 323, 1897, 14545, 17298, + 3040, + 3048, + 3059, 7317, 19986, + 3059, 12398, + 3088, + 3090, + 3092, + 3094, + 3207, 14004, + 3224, + 3241, 18889, 10691, 11513, 16661, 1290, + 3241, 18889, 12525, 10690, + 3241, 18889, 20489, 10690, + 3241, 20479, 12525, 897, 15453, 20038, + 3245, 897, 3245, 6110, + 3255, 10574, + 3310, + 3311, 11513, 6996, + 3311, 15801, 12714, + 3371, 2301, 8320, + 3371, 7073, 10696, + 3371, 8281, 12941, 17810, + 3371, 8281, 17225, 17810, + 3371, 8281, 23522, + 3371, 9905, 10574, + 3371, 12916, + 3371, 12922, + 3371, 13069, 2760, + 3371, 13069, 3240, + 3371, 13069, 3536, + 3371, 13069, 7036, + 3371, 13069, 7058, + 3371, 13069, 9358, + 3371, 13069, 11824, + 3371, 13069, 13150, + 3371, 13069, 14778, + 3371, 13069, 15116, + 3371, 13417, 15678, + 3371, 13783, 14911, 16531, 0, + 3371, 13783, 14911, 16531, 2, + 3371, 13783, 14911, 16531, 4, + 3371, 13783, 14911, 16531, 6, + 3371, 13783, 14911, 16531, 8, + 3371, 13783, 14911, 16531, 10, + 3371, 13783, 14911, 16531, 12, + 3371, 13783, 14911, 16531, 14, + 3371, 13783, 14911, 16531, 16, + 3371, 13783, 14911, 16531, 18, + 3371, 13783, 14911, 16531, 20, + 3371, 13783, 14911, 16531, 22, + 3371, 13783, 14911, 16531, 24, + 3371, 13783, 14911, 16531, 26, + 3371, 13783, 14911, 16531, 28, + 3371, 13783, 14911, 16531, 30, + 3371, 13783, 14911, 16531, 32, + 3371, 13783, 14911, 16531, 34, + 3371, 13783, 14911, 16531, 36, + 3371, 13783, 14911, 16531, 38, + 3371, 13783, 14911, 16531, 40, + 3371, 13783, 14911, 16531, 42, + 3371, 13783, 14911, 16531, 44, + 3371, 13783, 14911, 16531, 46, + 3371, 13783, 14911, 16531, 48, + 3371, 13783, 14911, 16531, 50, + 3371, 13783, 17835, 16531, 0, + 3371, 13783, 17835, 16531, 2, + 3371, 13783, 17835, 16531, 4, + 3371, 13783, 17835, 16531, 6, + 3371, 13783, 17835, 16531, 8, + 3371, 13783, 17835, 16531, 10, + 3371, 13783, 17835, 16531, 12, + 3371, 13783, 17835, 16531, 14, + 3371, 13783, 17835, 16531, 16, + 3371, 13783, 17835, 16531, 18, + 3371, 13783, 17835, 16531, 20, + 3371, 13783, 17835, 16531, 22, + 3371, 13783, 17835, 16531, 24, + 3371, 13783, 17835, 16531, 26, + 3371, 13783, 17835, 16531, 28, + 3371, 13783, 17835, 16531, 30, + 3371, 13783, 17835, 16531, 32, + 3371, 13783, 17835, 16531, 34, + 3371, 13783, 17835, 16531, 36, + 3371, 13783, 17835, 16531, 38, + 3371, 13783, 17835, 16531, 40, + 3371, 13783, 17835, 16531, 42, + 3371, 13783, 17835, 16531, 44, + 3371, 13783, 17835, 16531, 46, + 3371, 13783, 17835, 16531, 48, + 3371, 13783, 17835, 16531, 50, + 3371, 14659, 12941, 17810, + 3371, 14659, 17225, 17810, + 3371, 14659, 23522, + 3371, 14932, + 3371, 15140, + 3371, 16067, 10574, + 3371, 16121, 10574, + 3371, 16787, 10574, + 3371, 18841, 10574, + 3371, 18999, 19140, + 3371, 19140, + 3371, 19574, + 3371, 20549, 8808, + 3371, 20933, 8320, + 3371, 21006, + 3371, 21559, 10574, + 3371, 21779, 8808, + 3371, 21844, + 3371, 22172, + 3371, 22223, 15678, + 3371, 22225, 94, + 3371, 23213, 8808, + 3371, 23853, 10574, + 3371, 23868, + 3375, 399, 16531, 0, + 3375, 399, 16531, 8, + 3375, 399, 16531, 16, + 3375, 399, 16531, 28, + 3375, 399, 16531, 40, + 3375, 399, 16531, 72, + 3375, 399, 16531, 186, + 3375, 399, 16531, 192, + 3375, 399, 16531, 228, + 3375, 399, 16531, 272, + 3375, 399, 16531, 358, + 3375, 399, 16531, 394, + 3375, 399, 16531, 426, + 3375, 399, 16531, 466, + 3375, 399, 16531, 522, + 3375, 399, 16531, 548, + 3375, 399, 16531, 582, + 3375, 399, 16531, 614, + 3375, 399, 16531, 648, + 3375, 399, 16531, 682, + 3375, 399, 16531, 714, + 3375, 399, 16531, 762, + 3375, 399, 16531, 778, + 3375, 399, 16531, 928, + 3375, 399, 16531, 2036, + 3375, 399, 16531, 2574, + 3375, 399, 16531, 2830, + 3375, 399, 16531, 3422, + 3375, 399, 16531, 3488, + 3375, 399, 16531, 11058, + 3375, 399, 16531, 17402, + 3375, 399, 16531, 17404, + 3375, 399, 16531, 17406, + 3375, 399, 16531, 17408, + 3375, 399, 16531, 17410, + 3375, 10931, 7667, 13069, 2760, + 3375, 10931, 7667, 13069, 3240, + 3375, 10931, 7667, 13069, 3536, + 3375, 10931, 7667, 13069, 7036, + 3375, 10931, 7667, 13069, 7058, + 3375, 10931, 7667, 13069, 9358, + 3375, 10931, 7667, 13069, 11824, + 3375, 10931, 7667, 13069, 13150, + 3375, 10931, 7667, 13069, 14778, + 3375, 10931, 7667, 13069, 15116, + 3375, 10931, 10575, 599, 7420, + 3375, 10931, 10575, 1792, + 3375, 10931, 10575, 2367, 3182, + 3375, 10931, 10575, 2367, 7998, + 3375, 10931, 10575, 2367, 7999, 2198, + 3375, 10931, 10575, 2367, 15516, + 3375, 10931, 10575, 7434, + 3375, 10931, 10575, 7970, + 3375, 10931, 10575, 8040, + 3375, 10931, 10575, 12598, + 3375, 10931, 10575, 13699, 17404, + 3375, 10931, 10575, 13699, 17406, + 3375, 10931, 10575, 13699, 17408, + 3375, 10931, 10575, 14728, + 3375, 10931, 10575, 14750, + 3375, 10931, 10575, 15456, + 3375, 10931, 10575, 16062, + 3375, 10931, 10575, 17400, + 3375, 10931, 10575, 17402, + 3375, 10931, 10575, 18328, + 3375, 10931, 10575, 19042, + 3375, 10931, 10575, 20587, 19015, 10096, + 3375, 10931, 10575, 21537, 13654, + 3375, 10931, 10575, 22126, + 3375, 10931, 10575, 22842, + 3375, 10931, 10931, 13069, 2760, + 3375, 10931, 10931, 13069, 3240, + 3375, 10931, 10931, 13069, 3536, + 3375, 10931, 10931, 13069, 7036, + 3375, 10931, 10931, 13069, 7058, + 3375, 10931, 10931, 13069, 9358, + 3375, 10931, 10931, 13069, 11824, + 3375, 10931, 10931, 13069, 13150, + 3375, 10931, 10931, 13069, 14778, + 3375, 10931, 10931, 13069, 15116, + 3375, 10931, 15407, 10575, 0, + 3375, 10931, 15407, 10575, 8, + 3375, 10931, 15407, 10575, 16, + 3375, 10931, 15407, 10575, 28, + 3375, 10931, 15407, 10575, 40, + 3375, 10931, 15407, 10575, 58, + 3375, 10931, 15407, 10575, 66, + 3375, 10931, 15407, 10575, 72, + 3375, 10931, 15407, 10575, 314, + 3375, 10931, 15407, 10575, 499, 12318, + 3375, 10931, 15407, 10575, 499, 12502, + 3375, 10931, 15407, 10575, 522, + 3375, 10931, 15407, 10575, 542, + 3375, 10931, 15407, 10575, 682, + 3375, 10931, 15407, 10575, 706, + 3375, 10931, 15407, 10575, 2367, 3192, + 3375, 10931, 15407, 10575, 3644, + 3375, 10931, 15407, 10575, 10863, 58, + 3375, 10931, 15407, 10575, 10931, 72, + 3375, 10931, 16531, 0, + 3375, 10931, 16531, 16, + 3375, 10931, 16531, 40, + 3375, 10931, 16531, 108, + 3375, 10931, 16531, 150, + 3375, 10931, 16531, 186, + 3375, 10931, 16531, 314, + 3375, 10931, 16531, 394, + 3375, 10931, 16531, 426, + 3375, 10931, 16531, 466, + 3375, 10931, 16531, 522, + 3375, 10931, 16531, 598, + 3375, 10931, 16531, 706, + 3375, 10931, 16531, 738, + 3375, 10931, 16531, 2194, + 3375, 10931, 16531, 2278, + 3375, 10931, 16531, 2301, 126, + 3375, 10931, 16531, 2301, 228, + 3375, 10931, 16531, 2301, 272, + 3375, 10931, 16531, 2301, 358, + 3375, 10931, 16531, 2301, 548, + 3375, 10931, 16531, 2301, 614, + 3375, 10931, 16531, 2301, 648, + 3375, 10931, 16531, 2301, 778, + 3375, 10931, 16531, 2301, 1116, + 3375, 10931, 16531, 2301, 2036, + 3375, 10931, 16531, 2301, 2170, + 3375, 10931, 16531, 2301, 2830, + 3375, 10931, 16531, 2301, 3422, + 3375, 10931, 16531, 2301, 14626, + 3375, 10931, 16531, 2318, + 3375, 10931, 16531, 2574, + 3375, 10931, 16531, 2698, + 3375, 10931, 16531, 3134, + 3375, 10931, 16531, 7521, 126, + 3375, 10931, 16531, 7521, 228, + 3375, 10931, 16531, 7521, 272, + 3375, 10931, 16531, 7521, 358, + 3375, 10931, 16531, 7521, 548, + 3375, 10931, 16531, 7521, 614, + 3375, 10931, 16531, 7521, 648, + 3375, 10931, 16531, 7521, 778, + 3375, 10931, 16531, 7521, 1116, + 3375, 10931, 16531, 7521, 2036, + 3375, 10931, 16531, 7521, 2170, + 3375, 10931, 16531, 7521, 2830, + 3375, 10931, 16531, 7521, 3212, + 3375, 10931, 16531, 7521, 3286, + 3375, 10931, 16531, 7521, 3422, + 3375, 10931, 16531, 7521, 14626, + 3375, 10931, 16531, 10096, + 3375, 10931, 16531, 10098, + 3375, 10931, 16531, 13419, 614, + 3375, 10931, 21127, 25753, 1290, + 3375, 10931, 21143, 10575, 108, + 3375, 10931, 21143, 10575, 395, 10867, 2198, + 3375, 10931, 21143, 10575, 426, + 3375, 10931, 21143, 10575, 614, + 3375, 10931, 21143, 10575, 2301, 548, + 3375, 10931, 21143, 10575, 7521, 14627, 529, 2301, 548, + 3375, 10931, 21143, 10575, 13259, 2574, + 3375, 10931, 21143, 10575, 16635, 394, + 3375, 10931, 21143, 10575, 16635, 598, + 3375, 11387, 2367, 7998, + 3375, 11387, 2367, 8072, + 3375, 11387, 11033, 2367, 198, + 3375, 11387, 11033, 2367, 3428, + 3375, 11387, 11033, 2367, 10630, + 3375, 11387, 11033, 2367, 14332, + 3375, 11387, 15407, 8, + 3375, 11387, 15407, 16, + 3375, 11387, 15407, 28, + 3375, 11387, 15407, 40, + 3375, 11387, 15407, 58, + 3375, 11387, 15407, 80, + 3375, 11387, 15407, 82, + 3375, 11387, 15407, 104, + 3375, 11387, 15407, 298, + 3375, 11387, 15407, 674, + 3375, 11387, 15407, 682, + 3375, 11387, 15407, 928, + 3375, 11387, 15407, 3578, + 3375, 11387, 16531, 2301, 28, + 3375, 11387, 16531, 2301, 118, + 3375, 11387, 16531, 2301, 142, + 3375, 11387, 16531, 2301, 168, + 3375, 11387, 16531, 2301, 240, + 3375, 11387, 16531, 2301, 262, + 3375, 11387, 16531, 2301, 288, + 3375, 11387, 16531, 2301, 374, + 3375, 11387, 16531, 2301, 412, + 3375, 11387, 16531, 2301, 446, + 3375, 11387, 16531, 2301, 486, + 3375, 11387, 16531, 2301, 566, + 3375, 11387, 16531, 2301, 606, + 3375, 11387, 16531, 2301, 628, + 3375, 11387, 16531, 2301, 660, + 3375, 11387, 16531, 2301, 722, + 3375, 11387, 16531, 2301, 786, + 3375, 11387, 16531, 2301, 1122, + 3375, 11387, 16531, 2301, 2042, + 3375, 11387, 16531, 2301, 2582, + 3375, 11387, 16531, 2301, 2706, + 3375, 11387, 16531, 2301, 2836, + 3375, 11387, 16531, 2301, 3428, + 3375, 11387, 16531, 2301, 8070, + 3375, 11387, 16531, 7521, 28, + 3375, 11387, 16531, 7521, 118, + 3375, 11387, 16531, 7521, 142, + 3375, 11387, 16531, 7521, 168, + 3375, 11387, 16531, 7521, 240, + 3375, 11387, 16531, 7521, 262, + 3375, 11387, 16531, 7521, 288, + 3375, 11387, 16531, 7521, 374, + 3375, 11387, 16531, 7521, 412, + 3375, 11387, 16531, 7521, 446, + 3375, 11387, 16531, 7521, 486, + 3375, 11387, 16531, 7521, 566, + 3375, 11387, 16531, 7521, 606, + 3375, 11387, 16531, 7521, 628, + 3375, 11387, 16531, 7521, 660, + 3375, 11387, 16531, 7521, 722, + 3375, 11387, 16531, 7521, 786, + 3375, 11387, 16531, 7521, 1122, + 3375, 11387, 16531, 7521, 2042, + 3375, 11387, 16531, 7521, 2582, + 3375, 11387, 16531, 7521, 2706, + 3375, 11387, 16531, 7521, 2836, + 3375, 11387, 16531, 7521, 3428, + 3375, 11387, 16531, 7521, 8070, + 3375, 11387, 17299, 289, 1778, + 3375, 11387, 17299, 2095, 2094, + 3375, 11387, 17299, 2098, + 3375, 11387, 17299, 3182, + 3375, 11387, 17299, 14332, + 3437, 9787, 20152, + 3473, 917, 21119, 12415, 11513, 14004, + 3473, 917, 24193, 12414, + 3473, 917, 24193, 12415, 11513, 9904, + 3473, 1698, + 3473, 7429, 8281, 23522, + 3473, 7429, 12525, 15938, + 3473, 7429, 14659, 23522, + 3473, 7429, 19057, 10574, + 3473, 7429, 20031, 14671, 18176, + 3473, 7429, 20031, 14671, 18178, + 3473, 7429, 20156, + 3473, 7429, 20711, 16890, + 3473, 7429, 23301, 14670, + 3473, 7429, 23301, 17049, 18176, + 3473, 7429, 23301, 17049, 18178, + 3473, 7429, 24077, 14670, + 3473, 7429, 24077, 17049, 18176, + 3473, 7429, 24077, 17049, 18178, + 3473, 7429, 26001, 14670, + 3473, 7429, 26001, 17048, + 3473, 8281, 6366, + 3473, 8281, 7429, 17810, + 3473, 8281, 12525, 25813, 14911, 20858, + 3473, 8281, 15974, + 3473, 8281, 21527, 13839, 14659, 18951, 12525, 15938, + 3473, 11513, 19381, 12415, 12318, + 3473, 12941, 17810, + 3473, 14659, 6366, + 3473, 14659, 7429, 17810, + 3473, 14659, 15974, + 3473, 14659, 21527, 13839, 8281, 18951, 12525, 15938, + 3473, 17225, 17810, + 3473, 20847, 14811, 17810, + 3473, 21527, 13839, 7429, 12525, 15938, + 3473, 21527, 13839, 7429, 15453, 15938, + 3473, 23522, + 3537, 1291, 16516, + 3537, 1291, 23554, + 3537, 2409, 18273, 13458, + 3537, 6697, 9787, 2761, 1291, 23554, + 3537, 14661, 17671, 23866, + 3537, 15471, 18273, 13458, + 3537, 15863, 14028, + 3537, 16322, + 3537, 16401, 19166, + 3537, 17203, 17820, + 3537, 18529, 529, 20406, + 3537, 18529, 897, 20406, + 3537, 21033, 17671, 23010, + 3537, 23091, 16121, 14870, + 3537, 23881, 18529, 528, + 3537, 23881, 18529, 896, + 3659, 7073, 10696, + 3659, 12922, + 3659, 13069, 2760, + 3659, 13069, 3240, + 3659, 13069, 3536, + 3659, 13069, 7036, + 3659, 13069, 7058, + 3659, 13069, 9358, + 3659, 13069, 11824, + 3659, 13069, 13150, + 3659, 13069, 14778, + 3659, 13069, 15116, + 3659, 17299, 1440, + 3659, 17299, 2596, + 3659, 17299, 3364, + 3659, 17299, 5984, + 3659, 17299, 6538, + 3659, 17299, 6682, + 3659, 17299, 7908, + 3659, 17299, 8176, + 3659, 17299, 10996, + 3659, 17299, 11034, + 3659, 17299, 13098, + 3659, 17299, 13244, + 3659, 17299, 13668, + 3659, 20549, 8808, + 3659, 20777, 0, + 3659, 20777, 8, + 3659, 20777, 16, + 3659, 20777, 28, + 3659, 20777, 40, + 3659, 20777, 82, + 3659, 20777, 108, + 3659, 20777, 112, + 3659, 20777, 116, + 3659, 20777, 118, + 3659, 20777, 122, + 3659, 20777, 126, + 3659, 20777, 132, + 3659, 20777, 136, + 3659, 20777, 142, + 3659, 20777, 144, + 3659, 20777, 150, + 3659, 20777, 156, + 3659, 20777, 160, + 3659, 20777, 168, + 3659, 20777, 170, + 3659, 20777, 186, + 3659, 20777, 204, + 3659, 20777, 228, + 3659, 20777, 230, + 3659, 20777, 234, + 3659, 20777, 240, + 3659, 20777, 242, + 3659, 20777, 248, + 3659, 20777, 252, + 3659, 20777, 258, + 3659, 20777, 262, + 3659, 20777, 264, + 3659, 20777, 272, + 3659, 20777, 276, + 3659, 20777, 280, + 3659, 20777, 288, + 3659, 20777, 292, + 3659, 20777, 322, + 3659, 20777, 344, + 3659, 20777, 346, + 3659, 20777, 348, + 3659, 20777, 350, + 3659, 20777, 352, + 3659, 20777, 358, + 3659, 20777, 362, + 3659, 20777, 366, + 3659, 20777, 374, + 3659, 20777, 380, + 3659, 20777, 394, + 3659, 20777, 398, + 3659, 20777, 402, + 3659, 20777, 412, + 3659, 20777, 416, + 3659, 20777, 426, + 3659, 20777, 434, + 3659, 20777, 440, + 3659, 20777, 446, + 3659, 20777, 454, + 3659, 20777, 466, + 3659, 20777, 470, + 3659, 20777, 474, + 3659, 20777, 478, + 3659, 20777, 486, + 3659, 20777, 490, + 3659, 20777, 520, + 3659, 20777, 522, + 3659, 20777, 548, + 3659, 20777, 554, + 3659, 20777, 562, + 3659, 20777, 566, + 3659, 20777, 572, + 3659, 20777, 598, + 3659, 20777, 600, + 3659, 20777, 604, + 3659, 20777, 606, + 3659, 20777, 610, + 3659, 20777, 614, + 3659, 20777, 618, + 3659, 20777, 624, + 3659, 20777, 628, + 3659, 20777, 638, + 3659, 20777, 648, + 3659, 20777, 652, + 3659, 20777, 656, + 3659, 20777, 660, + 3659, 20777, 668, + 3659, 20777, 694, + 3659, 20777, 714, + 3659, 20777, 718, + 3659, 20777, 720, + 3659, 20777, 722, + 3659, 20777, 728, + 3659, 20777, 738, + 3659, 20777, 744, + 3659, 20777, 750, + 3659, 20777, 754, + 3659, 20777, 756, + 3659, 20777, 778, + 3659, 20777, 780, + 3659, 20777, 782, + 3659, 20777, 786, + 3659, 20777, 790, + 3659, 20777, 796, + 3659, 20777, 798, + 3659, 20777, 802, + 3659, 20777, 804, + 3659, 20777, 806, + 3659, 20777, 986, + 3659, 20777, 1000, + 3659, 20777, 1002, + 3659, 20777, 1004, + 3659, 20777, 1006, + 3659, 20777, 1008, + 3659, 20777, 1028, + 3659, 20777, 1106, + 3659, 20777, 1150, + 3659, 20777, 1224, + 3659, 20777, 1236, + 3659, 20777, 1238, + 3659, 20777, 1240, + 3659, 20777, 1242, + 3659, 20777, 1244, + 3659, 20777, 1286, + 3659, 20777, 1364, + 3659, 20777, 1460, + 3659, 20777, 1488, + 3659, 20777, 1554, + 3659, 20777, 1556, + 3659, 20777, 1558, + 3659, 20777, 1560, + 3659, 20777, 1562, + 3659, 20777, 1564, + 3659, 20777, 1568, + 3659, 20777, 1626, + 3659, 20777, 1690, + 3659, 20777, 1708, + 3659, 20777, 1714, + 3659, 20777, 1736, + 3659, 20777, 1782, + 3659, 20777, 1784, + 3659, 20777, 1802, + 3659, 20777, 1910, + 3659, 20777, 1948, + 3659, 20777, 2000, + 3659, 20777, 2018, + 3659, 20777, 2100, + 3659, 20777, 2110, + 3659, 20777, 2112, + 3659, 20777, 2114, + 3659, 20777, 2116, + 3659, 20777, 2118, + 3659, 20777, 2230, + 3659, 20777, 2290, + 3659, 20777, 2392, + 3659, 20777, 2394, + 3659, 20777, 2396, + 3659, 20777, 2398, + 3659, 20777, 2400, + 3659, 20777, 2404, + 3659, 20777, 2456, + 3659, 20777, 2548, + 3659, 20777, 2550, + 3659, 20777, 2552, + 3659, 20777, 2554, + 3659, 20777, 2556, + 3659, 20777, 2558, + 3659, 20777, 2608, + 3659, 20777, 2610, + 3659, 20777, 2612, + 3659, 20777, 2614, + 3659, 20777, 2616, + 3659, 20777, 2636, + 3659, 20777, 2698, + 3659, 20777, 2702, + 3659, 20777, 2704, + 3659, 20777, 2706, + 3659, 20777, 2708, + 3659, 20777, 2772, + 3659, 20777, 2818, + 3659, 20777, 2864, + 3659, 20777, 3060, + 3659, 20777, 3110, + 3659, 20777, 3200, + 3659, 20777, 3212, + 3659, 20777, 3214, + 3659, 20777, 3216, + 3659, 20777, 3218, + 3659, 20777, 3220, + 3659, 20777, 3258, + 3659, 20777, 3406, + 3659, 20777, 3422, + 3659, 20777, 3424, + 3659, 20777, 3426, + 3659, 20777, 3428, + 3659, 20777, 3430, + 3659, 20777, 3470, + 3659, 20777, 3672, + 3659, 20777, 3702, + 3659, 20777, 3742, + 3659, 20777, 3758, + 3659, 20777, 3762, + 3659, 20777, 3774, + 3659, 20777, 3780, + 3659, 20777, 3782, + 3659, 20777, 3796, + 3659, 20777, 3916, + 3659, 20777, 3954, + 3659, 20777, 4034, + 3659, 20777, 4042, + 3659, 20777, 4044, + 3659, 20777, 4046, + 3659, 20777, 4048, + 3659, 20777, 4050, + 3659, 20777, 4074, + 3659, 20777, 6072, + 3659, 20777, 6074, + 3659, 20777, 6640, + 3659, 20777, 6642, + 3659, 20777, 6644, + 3659, 20777, 6646, + 3659, 20777, 6648, + 3659, 20777, 6650, + 3659, 20777, 6654, + 3659, 20777, 7214, + 3659, 20777, 7216, + 3659, 20777, 7220, + 3659, 20777, 7222, + 3659, 20777, 8144, + 3659, 20777, 8146, + 3659, 20777, 8148, + 3659, 20777, 8150, + 3659, 20777, 8824, + 3659, 20777, 8830, + 3659, 20777, 8886, + 3659, 20777, 8888, + 3659, 20777, 8890, + 3659, 20777, 8892, + 3659, 20777, 8894, + 3659, 20777, 9200, + 3659, 20777, 9218, + 3659, 20777, 9264, + 3659, 20777, 9278, + 3659, 20777, 9284, + 3659, 20777, 9286, + 3659, 20777, 9288, + 3659, 20777, 9290, + 3659, 20777, 9292, + 3659, 20777, 9306, + 3659, 20777, 9372, + 3659, 20777, 9382, + 3659, 20777, 9558, + 3659, 20777, 9588, + 3659, 20777, 10458, + 3659, 20777, 10492, + 3659, 20777, 10938, + 3659, 20777, 10958, + 3659, 20777, 11484, + 3659, 20777, 11534, + 3659, 20777, 11840, + 3659, 20777, 11852, + 3659, 20777, 13062, + 3659, 20777, 13064, + 3659, 20777, 13978, + 3659, 20777, 13982, + 3659, 20777, 14105, 168, + 3659, 20777, 14105, 228, + 3659, 20777, 14105, 358, + 3659, 20777, 14105, 426, + 3659, 20777, 14105, 3258, + 3659, 20777, 14122, + 3659, 20777, 14124, + 3659, 20777, 14128, + 3659, 20777, 22534, + 3781, 10574, + 3834, + 3921, 10574, + 3943, 11648, + 4102, + 5465, 10575, 14690, + 5465, 10575, 14911, 19056, + 5465, 10575, 16456, + 5465, 10575, 19056, + 5465, 13069, 2760, + 5465, 13069, 3240, + 5465, 13069, 3536, + 5465, 13069, 7036, + 5465, 13069, 7058, + 5465, 13069, 9358, + 5465, 13069, 11824, + 5465, 13069, 13150, + 5465, 13069, 14778, + 5465, 13069, 15116, + 5465, 15407, 10575, 0, + 5465, 15407, 10575, 8, + 5465, 15407, 10575, 16, + 5465, 15407, 10575, 28, + 5465, 15407, 10575, 40, + 5465, 15407, 10575, 58, + 5465, 15407, 10575, 72, + 5465, 15407, 10575, 80, + 5465, 15407, 10575, 100, + 5465, 15407, 10575, 314, + 5465, 15407, 10575, 706, + 5465, 16531, 0, + 5465, 16531, 108, + 5465, 16531, 126, + 5465, 16531, 150, + 5465, 16531, 248, + 5465, 16531, 272, + 5465, 16531, 344, + 5465, 16531, 358, + 5465, 16531, 394, + 5465, 16531, 426, + 5465, 16531, 466, + 5465, 16531, 548, + 5465, 16531, 598, + 5465, 16531, 614, + 5465, 16531, 648, + 5465, 16531, 1000, + 5465, 16531, 1116, + 5465, 16531, 1214, + 5465, 16531, 1236, + 5465, 16531, 1588, + 5465, 16531, 1918, + 5465, 16531, 2036, + 5465, 16531, 2278, + 5465, 16531, 2574, + 5465, 16531, 2624, + 5465, 16531, 2698, + 5465, 16531, 2830, + 5465, 16531, 3422, + 5465, 16531, 3502, + 5465, 16531, 6572, + 5465, 16531, 11082, + 5465, 16531, 21003, 108, + 5465, 16531, 21003, 248, + 5465, 16531, 21003, 648, + 5465, 16787, 3412, + 5465, 16787, 17474, + 5465, 17299, 720, + 5465, 21143, 10575, 16635, 394, + 5465, 21143, 10575, 16635, 598, + 5465, 21143, 10575, 16635, 20239, 598, + 5483, 17298, + 5510, + 5545, 17298, + 5549, 20588, + 5964, + 5965, 12372, + 5965, 12672, + 5965, 15824, + 5965, 17298, + 5967, 507, 19986, + 5967, 11513, 21557, 12415, 12318, + 5979, 507, 11650, + 5986, + 5996, + 6049, 6996, + 6055, 2470, + 6056, + 6057, 11513, 23781, 17264, + 6057, 16884, + 6057, 17298, + 6063, 12415, 20501, 21349, 10943, 14255, 6832, + 6082, + 6093, 6108, + 6093, 13470, + 6094, + 6101, 3241, 17211, 19574, + 6101, 7037, 17211, 19574, + 6101, 13151, 17211, 19574, + 6101, 13421, 12934, + 6101, 15453, 15938, + 6101, 15453, 17224, + 6101, 19032, + 6104, + 6106, + 6108, + 6115, 507, 18282, + 6115, 11513, 14948, + 6117, 17298, + 6143, 323, 22896, + 6149, 14437, 8808, + 6207, 3610, + 6213, 435, 7432, + 6223, 7021, 1036, + 6223, 13594, + 6223, 13595, 19814, + 6225, 506, + 6227, 20734, + 6251, 10574, + 6257, 10574, + 6263, 13069, 2760, + 6263, 13069, 3240, + 6263, 13069, 3536, + 6263, 13069, 7036, + 6263, 13069, 7058, + 6263, 13069, 9358, + 6263, 13069, 11824, + 6263, 13069, 13150, + 6263, 13069, 14778, + 6263, 13069, 15116, + 6263, 15407, 10575, 16, + 6263, 15407, 10575, 28, + 6263, 15407, 10575, 40, + 6263, 15407, 10575, 58, + 6263, 15407, 10575, 72, + 6263, 15407, 10575, 96, + 6263, 15407, 10575, 194, + 6263, 15407, 10575, 314, + 6263, 15407, 10575, 504, + 6263, 15407, 10575, 682, + 6263, 16531, 0, + 6263, 16531, 8, + 6263, 16531, 16, + 6263, 16531, 28, + 6263, 16531, 40, + 6263, 16531, 72, + 6263, 16531, 108, + 6263, 16531, 150, + 6263, 16531, 248, + 6263, 16531, 272, + 6263, 16531, 344, + 6263, 16531, 358, + 6263, 16531, 394, + 6263, 16531, 426, + 6263, 16531, 466, + 6263, 16531, 548, + 6263, 16531, 598, + 6263, 16531, 614, + 6263, 16531, 648, + 6263, 16531, 714, + 6263, 16531, 778, + 6263, 16531, 972, + 6263, 16531, 1000, + 6263, 16531, 1116, + 6263, 16531, 1214, + 6263, 16531, 1236, + 6263, 16531, 1588, + 6263, 16531, 1918, + 6263, 16531, 2036, + 6263, 16531, 2468, + 6263, 16531, 2574, + 6263, 16531, 2586, + 6263, 16531, 2672, + 6263, 16531, 2830, + 6263, 16531, 2874, + 6263, 16531, 3286, + 6263, 16531, 3422, + 6263, 16531, 6288, + 6263, 16531, 9320, + 6263, 16531, 9332, + 6263, 16531, 9334, + 6263, 16531, 13259, 12, + 6263, 16531, 13259, 20, + 6263, 16531, 13259, 22, + 6263, 16531, 13259, 26, + 6263, 16531, 13259, 30, + 6263, 16531, 13259, 34, + 6263, 16531, 13259, 38, + 6263, 16531, 13259, 48, + 6263, 16531, 13259, 134, + 6263, 16531, 13259, 474, + 6263, 16531, 13259, 634, + 6263, 21143, 10575, 394, + 6263, 21143, 10575, 598, + 6263, 21143, 10575, 738, + 6263, 21143, 10575, 778, + 6263, 21143, 10575, 13259, 14, + 6263, 21143, 10575, 13259, 24, + 6263, 21143, 10575, 13259, 474, + 6263, 23555, 13016, + 6263, 23555, 16095, 13016, + 6263, 23555, 17206, + 6263, 23555, 17435, 13016, + 6346, + 6350, + 6364, + 6371, 10184, + 6541, 14782, + 6541, 22954, + 6545, 11513, 8281, 17504, + 6545, 17298, + 6613, 16890, + 6616, + 6675, 8256, + 6684, + 6687, 2643, 13278, + 6687, 2643, 14576, + 6687, 2643, 16056, + 6687, 2643, 16057, 11513, 20587, 20353, 14890, + 6687, 2643, 17909, 93, 16642, + 6687, 2643, 17909, 93, 16761, 20758, + 6687, 2643, 17909, 93, 16761, 20759, 529, 13176, + 6687, 2643, 18912, + 6687, 2643, 18913, 529, 13176, + 6687, 2643, 19214, + 6687, 2643, 19215, 529, 13176, + 6691, 10574, + 6692, + 6699, 507, 14502, + 6701, 7031, 10856, + 6701, 10850, + 6701, 10851, 11513, 15939, 12502, + 6701, 14659, 19791, 19976, + 6701, 21022, + 6707, 507, 12536, + 6709, 11513, 22402, + 6712, + 6833, 17305, 12934, + 6861, 7057, 2760, + 6861, 7057, 3536, + 6879, 10574, + 6882, + 6997, 9822, + 6997, 11513, 487, 7337, 18198, + 6997, 11513, 515, 18198, + 6997, 11513, 2761, 18127, 17006, + 6997, 11513, 5973, 15281, 6882, + 6997, 11513, 6353, 15014, + 6997, 11513, 8353, 507, 19320, + 6997, 11513, 9783, 6883, 897, 7433, 9787, 14030, + 6997, 11513, 9783, 14030, + 6997, 11513, 9783, 14031, 897, 6353, 15014, + 6997, 11513, 9783, 14031, 20940, + 6997, 11513, 14485, 7671, 897, 14485, 1698, + 6997, 11513, 15063, 507, 1956, + 6997, 11513, 15981, 1698, + 6997, 11513, 16175, 19735, 15949, 8328, + 6997, 11513, 17501, 6883, 897, 11475, 14030, + 6997, 11513, 18603, 8814, + 6997, 11513, 18634, + 6997, 11513, 18831, 1432, + 6997, 11513, 19009, 6882, + 6997, 11513, 19791, 14030, + 6997, 11513, 20495, 6882, + 6997, 11513, 21917, 17430, + 6997, 11513, 21917, 17431, 897, 19441, 1432, + 6997, 11513, 21917, 17431, 897, 26179, 6882, + 6997, 11513, 23690, + 6997, 11513, 23856, + 6997, 18273, 5967, 15062, + 6997, 18588, + 6997, 19443, 14030, + 6997, 20833, 1, 8114, + 6997, 21831, 21177, 7048, + 6997, 21839, 323, 7004, + 7021, 16206, + 7021, 17828, + 7025, 16220, + 7025, 21764, + 7026, + 7027, 16118, + 7027, 23838, + 7030, + 7031, 6209, 11513, 15019, 16034, + 7037, 1291, 8808, + 7037, 1291, 23554, + 7039, 323, 7654, + 7041, 10488, + 7052, + 7055, 897, 13714, + 7055, 897, 13715, 11513, 14550, + 7059, 1291, 8808, + 7059, 1291, 23554, + 7059, 8277, 15952, + 7059, 15975, 15739, 19695, 24192, + 7059, 18889, 12525, 10690, + 7059, 23081, 19574, + 7059, 25987, 19574, + 7059, 28085, 19574, + 7063, 6996, + 7067, 9924, + 7073, 8981, 11513, 6996, + 7073, 8981, 17298, + 7073, 10696, + 7073, 12532, + 7073, 14457, 7904, + 7078, + 7080, + 7082, + 7084, + 7086, + 7205, 1248, + 7232, + 7233, 11513, 18248, + 7233, 19443, 1798, + 7243, 8808, + 7324, + 7329, 2568, + 7330, + 7347, 13470, + 7425, 9870, + 7425, 14932, + 7433, 11513, 13595, 897, 16661, 18151, 17930, + 7433, 11513, 13595, 16175, 897, 15119, 17930, + 7437, 6672, + 7438, + 7467, 17298, + 7472, + 7521, 19423, 10574, + 7521, 22209, 17298, + 7654, + 7658, + 7904, + 7916, + 8019, 10575, 14334, + 8019, 10575, 14644, + 8019, 10575, 16456, + 8019, 10575, 19408, + 8019, 10575, 19540, + 8019, 10575, 23070, + 8019, 13016, + 8019, 13069, 2760, + 8019, 13069, 3240, + 8019, 13069, 3536, + 8019, 13069, 7036, + 8019, 13069, 7058, + 8019, 13069, 9358, + 8019, 13069, 11824, + 8019, 13069, 13150, + 8019, 13069, 14778, + 8019, 13069, 15116, + 8019, 15407, 10575, 8, + 8019, 15407, 10575, 16, + 8019, 15407, 10575, 40, + 8019, 15407, 10575, 58, + 8019, 15407, 10575, 72, + 8019, 15407, 10575, 218, + 8019, 15407, 10575, 314, + 8019, 15407, 10575, 706, + 8019, 15407, 10575, 19415, 34, + 8019, 15407, 10575, 21003, 58, + 8019, 16095, 13016, + 8019, 16531, 0, + 8019, 16531, 8, + 8019, 16531, 16, + 8019, 16531, 28, + 8019, 16531, 40, + 8019, 16531, 58, + 8019, 16531, 72, + 8019, 16531, 108, + 8019, 16531, 126, + 8019, 16531, 150, + 8019, 16531, 248, + 8019, 16531, 272, + 8019, 16531, 314, + 8019, 16531, 344, + 8019, 16531, 358, + 8019, 16531, 394, + 8019, 16531, 426, + 8019, 16531, 466, + 8019, 16531, 548, + 8019, 16531, 598, + 8019, 16531, 614, + 8019, 16531, 648, + 8019, 16531, 706, + 8019, 16531, 738, + 8019, 16531, 778, + 8019, 16531, 1000, + 8019, 16531, 1116, + 8019, 16531, 1214, + 8019, 16531, 1236, + 8019, 16531, 1588, + 8019, 16531, 1918, + 8019, 16531, 2036, + 8019, 16531, 2574, + 8019, 16531, 2624, + 8019, 16531, 2698, + 8019, 16531, 2830, + 8019, 16531, 3212, + 8019, 16531, 3286, + 8019, 16531, 3422, + 8019, 16531, 3502, + 8019, 16531, 6572, + 8019, 16531, 7902, + 8019, 16531, 11082, + 8019, 16531, 19415, 22, + 8019, 16531, 19415, 34, + 8019, 16531, 19415, 406, + 8019, 16531, 19415, 608, + 8019, 21138, + 8019, 23555, 1290, + 8019, 23555, 14933, 16172, + 8019, 23555, 15938, + 8019, 23555, 16095, 1290, + 8019, 23555, 16171, 15938, + 8019, 23555, 16200, + 8019, 23555, 17206, + 8019, 23555, 17435, 1290, + 8019, 23555, 17889, 17206, + 8019, 23555, 19057, 16614, + 8019, 23555, 21003, 19057, 16614, + 8114, + 8115, 8808, + 8116, + 8120, + 8243, 15796, + 8263, 10574, + 8265, 18951, 8980, + 8265, 18951, 8981, 11513, 6996, + 8265, 18951, 8981, 17298, + 8277, 22453, 323, 11504, + 8281, 897, 13839, 897, 14659, 22983, 15117, 20547, 12532, + 8281, 897, 13839, 2761, 16107, 12532, + 8281, 897, 14659, 10850, + 8281, 897, 14659, 16095, 22078, + 8281, 897, 14659, 22983, 7429, 12532, + 8281, 897, 15287, 897, 14659, 22983, 15117, 20547, 12532, + 8281, 897, 15287, 2761, 16107, 12532, + 8281, 897, 15287, 2761, 16107, 12533, 22239, 12525, 14911, 17224, + 8281, 917, 21559, 17810, + 8281, 2301, 22749, 17810, + 8281, 2761, 15109, 12532, + 8281, 2761, 16107, 12532, + 8281, 2761, 18951, 12532, + 8281, 3537, 17371, 12532, + 8281, 5989, 699, 14659, 5989, 699, 18252, + 8281, 5989, 699, 14659, 5989, 6701, 18252, + 8281, 5989, 6701, 14659, 5989, 699, 18252, + 8281, 5989, 6701, 14659, 5989, 6701, 18252, + 8281, 7031, 10856, + 8281, 7037, 18099, 12532, + 8281, 7429, 12525, 10690, + 8281, 7429, 12525, 15938, + 8281, 7429, 12532, + 8281, 7429, 13839, 2761, 18951, 12532, + 8281, 7429, 15287, 2761, 18951, 12532, + 8281, 7429, 15453, 18108, + 8281, 7429, 15938, + 8281, 7429, 15939, 11513, 1290, + 8281, 7429, 15939, 11513, 3537, 6696, + 8281, 7429, 15939, 11513, 7059, 6696, + 8281, 7429, 15939, 11513, 15117, 6696, + 8281, 7429, 16203, 17076, + 8281, 7429, 16206, + 8281, 7429, 16637, 14782, + 8281, 7429, 17435, 6545, 22494, + 8281, 7429, 18307, 16637, 14783, 897, 14659, 7429, 12532, + 8281, 7429, 19023, 2368, + 8281, 7429, 22495, 8321, 11513, 15117, 10985, 13924, + 8281, 7433, 22031, 20556, + 8281, 10850, + 8281, 12375, 15850, + 8281, 12379, 17810, + 8281, 12379, 17811, 11513, 1290, + 8281, 12415, 11513, 14911, 15938, + 8281, 12415, 11513, 17881, 9904, + 8281, 12525, 20847, 14811, 17810, + 8281, 12525, 22537, 17810, + 8281, 12941, 17810, + 8281, 12941, 17811, 13839, 7658, + 8281, 12941, 17811, 15287, 7658, + 8281, 12941, 17811, 16661, 14532, + 8281, 13270, + 8281, 14457, 7904, + 8281, 14659, 11473, 12414, + 8281, 14659, 12414, + 8281, 14659, 12415, 11513, 16095, 20933, 17264, + 8281, 14659, 12415, 11513, 17264, + 8281, 14659, 12415, 11513, 20933, 17264, + 8281, 14659, 12415, 19281, 14911, 15938, + 8281, 14659, 12525, 12414, + 8281, 14659, 15453, 12414, + 8281, 14659, 16095, 12414, + 8281, 14659, 16095, 12415, 11513, 17264, + 8281, 14659, 16095, 12415, 11513, 20933, 17264, + 8281, 14659, 22841, 12414, + 8281, 14659, 23503, 12414, + 8281, 14659, 28089, 12414, + 8281, 14779, 18099, 12532, + 8281, 15109, 15453, 14659, 20501, 13594, + 8281, 15109, 20150, + 8281, 15117, 18099, 12532, + 8281, 15117, 20547, 12532, + 8281, 15117, 20547, 13839, 2761, 18951, 12532, + 8281, 15117, 20547, 15287, 2761, 18951, 12532, + 8281, 15453, 12941, 17810, + 8281, 15453, 15975, 17810, + 8281, 15453, 17225, 17810, + 8281, 15453, 20847, 14811, 17810, + 8281, 15453, 22537, 17810, + 8281, 15453, 23522, + 8281, 15949, 13166, + 8281, 15975, 17810, + 8281, 16093, 24149, 17810, + 8281, 16095, 12379, 17810, + 8281, 16095, 17571, 13246, + 8281, 16095, 21779, 8808, + 8281, 16095, 23522, + 8281, 16761, 16151, 22851, 18932, + 8281, 17007, 20401, 17810, + 8281, 17171, 21779, 8808, + 8281, 17203, 15850, + 8281, 17225, 17810, + 8281, 17225, 17811, 11513, 10985, 323, 3473, 15974, + 8281, 17225, 17811, 11513, 10985, 323, 15827, 15974, + 8281, 17225, 17811, 11513, 14600, + 8281, 17225, 17811, 11513, 16095, 17264, + 8281, 17225, 17811, 11513, 17264, + 8281, 17225, 17811, 11513, 20920, + 8281, 17225, 17811, 13839, 15974, + 8281, 17225, 17811, 15287, 15974, + 8281, 17225, 17811, 21382, + 8281, 17571, 13246, + 8281, 17848, + 8281, 18536, + 8281, 19277, 15850, + 8281, 19451, 7432, + 8281, 20338, + 8281, 20601, 955, 21178, + 8281, 20659, 41, 17810, + 8281, 20847, 14811, 17810, + 8281, 20859, 15805, 20933, 964, + 8281, 20933, 965, 11513, 14600, + 8281, 20933, 1037, 8320, + 8281, 21527, 14659, 7429, 12525, 15938, + 8281, 21527, 14659, 7429, 15453, 15938, + 8281, 22851, 18932, + 8281, 22983, 2761, 18951, 12532, + 8281, 23522, + 8281, 23523, 13839, 7658, + 8281, 23523, 15287, 7658, + 8281, 23523, 21382, + 8281, 24149, 17810, + 8281, 25959, 17810, + 8321, 21850, + 8321, 23277, 2643, 21493, 3425, 9906, + 8321, 23277, 11513, 23573, 9833, 15733, 9906, + 8321, 23277, 11513, 24089, 9833, 15733, 9906, + 8325, 17298, + 8327, 6996, + 8328, + 8331, 10574, + 8335, 16531, 0, + 8335, 16531, 8, + 8335, 16531, 16, + 8335, 16531, 28, + 8335, 16531, 40, + 8335, 16531, 66, + 8335, 16531, 108, + 8335, 16531, 126, + 8335, 16531, 150, + 8335, 16531, 218, + 8335, 16531, 228, + 8335, 16531, 248, + 8335, 16531, 272, + 8335, 16531, 344, + 8335, 16531, 358, + 8335, 16531, 394, + 8335, 16531, 426, + 8335, 16531, 466, + 8335, 16531, 504, + 8335, 16531, 548, + 8335, 16531, 614, + 8335, 16531, 648, + 8335, 16531, 682, + 8335, 16531, 684, + 8335, 16531, 738, + 8335, 16531, 762, + 8335, 16531, 778, + 8335, 16531, 796, + 8335, 16531, 1116, + 8335, 16531, 1330, + 8335, 16531, 1588, + 8335, 16531, 1722, + 8335, 16531, 2036, + 8335, 16531, 2574, + 8335, 16531, 2830, + 8335, 16531, 3212, + 8335, 16531, 3422, + 8335, 16531, 3488, + 8335, 16531, 3930, + 8335, 16531, 4042, + 8335, 16531, 11033, 467, 566, + 8335, 16531, 11033, 2501, 118, + 8335, 16531, 11033, 2501, 466, + 8335, 16531, 11033, 2501, 656, + 8335, 16531, 11033, 2501, 1180, + 8335, 16531, 11033, 2501, 1916, + 8335, 16531, 11058, + 8335, 23555, 7073, 10696, + 8335, 23555, 12922, + 8344, + 8345, 11513, 1881, 2822, + 8351, 6545, 7065, 8281, 16643, 507, 16095, 20932, + 8351, 6708, + 8351, 8281, 10850, + 8351, 8281, 14659, 12414, + 8351, 8281, 14659, 16095, 12414, + 8351, 14659, 10850, + 8351, 19816, + 8351, 21557, 12414, + 8351, 21557, 12415, 7065, 964, + 8351, 21557, 16095, 12414, + 8351, 21557, 16095, 12415, 7065, 964, + 8351, 21557, 20701, 12414, + 8351, 22837, 12414, + 8351, 22837, 12415, 7065, 964, + 8351, 22837, 16095, 12414, + 8351, 22837, 16095, 12415, 7065, 964, + 8351, 22837, 20701, 12414, + 8363, 13538, + 8363, 16530, + 8798, + 8801, 897, 16159, 10574, + 8801, 10574, + 8801, 11513, 17265, 897, 8801, 897, 16159, 10574, + 8801, 11513, 17265, 10574, + 8805, 10488, + 8815, 11539, 17298, + 8817, 8808, + 8819, 13104, + 8847, 521, 6106, + 8856, + 8859, 17298, + 8933, 10575, 20563, 19416, + 8933, 10575, 20563, 22186, + 8933, 10575, 21143, 20319, 964, + 8933, 10575, 22186, + 8933, 11033, 3473, 14658, + 8933, 11033, 12318, + 8933, 11033, 12502, + 8933, 11033, 14658, + 8933, 15407, 10575, 0, + 8933, 15407, 10575, 8, + 8933, 15407, 10575, 16, + 8933, 15407, 10575, 26, + 8933, 15407, 10575, 28, + 8933, 15407, 10575, 40, + 8933, 15407, 10575, 44, + 8933, 15407, 10575, 48, + 8933, 15407, 10575, 58, + 8933, 15407, 10575, 66, + 8933, 15407, 10575, 72, + 8933, 15407, 10575, 82, + 8933, 15407, 10575, 96, + 8933, 15407, 10575, 178, + 8933, 15407, 10575, 194, + 8933, 15407, 10575, 204, + 8933, 15407, 10575, 212, + 8933, 15407, 10575, 298, + 8933, 15407, 10575, 306, + 8933, 15407, 10575, 310, + 8933, 15407, 10575, 314, + 8933, 15407, 10575, 324, + 8933, 15407, 10575, 336, + 8933, 15407, 10575, 474, + 8933, 15407, 10575, 508, + 8933, 15407, 10575, 522, + 8933, 15407, 10575, 534, + 8933, 15407, 10575, 674, + 8933, 15407, 10575, 686, + 8933, 15407, 10575, 706, + 8933, 15407, 10575, 730, + 8933, 15407, 10575, 754, + 8933, 15407, 10575, 782, + 8933, 15407, 10575, 856, + 8933, 15407, 10575, 876, + 8933, 15407, 10575, 898, + 8933, 15407, 10575, 1394, + 8933, 15407, 10575, 1408, + 8933, 15407, 10575, 1854, + 8933, 15407, 10575, 1876, + 8933, 15407, 10575, 2744, + 8933, 15407, 10575, 2746, + 8933, 15407, 10575, 3574, + 8933, 15407, 10575, 3584, + 8933, 15407, 10575, 3612, + 8933, 15407, 10575, 3620, + 8933, 15407, 10575, 3972, + 8933, 15407, 10575, 7786, + 8933, 15407, 10575, 7816, + 8933, 15407, 10575, 11238, + 8933, 15407, 10575, 19019, 212, + 8933, 15407, 10575, 19019, 1408, + 8933, 16531, 70, + 8933, 16531, 108, + 8933, 16531, 150, + 8933, 16531, 228, + 8933, 16531, 248, + 8933, 16531, 272, + 8933, 16531, 358, + 8933, 16531, 394, + 8933, 16531, 426, + 8933, 16531, 466, + 8933, 16531, 548, + 8933, 16531, 582, + 8933, 16531, 614, + 8933, 16531, 648, + 8933, 16531, 652, + 8933, 16531, 714, + 8933, 16531, 738, + 8933, 16531, 762, + 8933, 16531, 783, 358, + 8933, 16531, 783, 548, + 8933, 16531, 783, 648, + 8933, 16531, 783, 2624, + 8933, 16531, 783, 3488, + 8933, 16531, 783, 3502, + 8933, 16531, 783, 6740, + 8933, 16531, 783, 11058, + 8933, 16531, 796, + 8933, 16531, 1042, + 8933, 16531, 1214, + 8933, 16531, 1330, + 8933, 16531, 1588, + 8933, 16531, 1722, + 8933, 16531, 2248, + 8933, 16531, 2346, + 8933, 16531, 2424, + 8933, 16531, 2574, + 8933, 16531, 2586, + 8933, 16531, 2624, + 8933, 16531, 2698, + 8933, 16531, 2854, + 8933, 16531, 2940, + 8933, 16531, 3128, + 8933, 16531, 3212, + 8933, 16531, 3286, + 8933, 16531, 3338, + 8933, 16531, 3488, + 8933, 16531, 3490, + 8933, 16531, 3502, + 8933, 16531, 3684, + 8933, 16531, 4042, + 8933, 16531, 4084, + 8933, 16531, 4112, + 8933, 16531, 6680, + 8933, 16531, 6740, + 8933, 16531, 6748, + 8933, 16531, 6750, + 8933, 16531, 7300, + 8933, 16531, 8302, + 8933, 16531, 9294, + 8933, 16531, 9420, + 8933, 16531, 9566, + 8933, 16531, 11008, + 8933, 16531, 11058, + 8933, 16531, 11066, + 8933, 16531, 11890, + 8933, 16531, 11930, + 8933, 16531, 11938, + 8933, 16531, 13086, + 8933, 16531, 15166, + 8933, 16531, 15640, + 8933, 16531, 17402, + 8933, 16531, 17404, + 8933, 16531, 17406, + 8933, 16531, 17408, + 8933, 16531, 17410, + 8933, 16531, 17412, + 8933, 16531, 17414, + 8933, 16531, 17709, 426, + 8933, 16531, 17709, 466, + 8933, 16531, 17709, 2574, + 8933, 16531, 17709, 4112, + 8933, 16531, 20563, 11058, + 8933, 16531, 20563, 17400, + 8933, 16531, 20563, 17402, + 8933, 16531, 20563, 17406, + 8933, 16531, 20563, 17408, + 8933, 16531, 20563, 17410, + 8933, 16531, 20563, 17414, + 8933, 16531, 23918, + 8935, 521, 705, 17298, + 8935, 6545, 17298, + 8949, 10574, + 8952, + 8956, + 8975, 10575, 7706, + 8975, 10575, 17534, + 8975, 10575, 19408, + 8975, 10575, 19540, + 8975, 10575, 23052, + 8975, 13016, + 8975, 13069, 2760, + 8975, 13069, 3240, + 8975, 13069, 3536, + 8975, 13069, 7036, + 8975, 13069, 7058, + 8975, 13069, 9358, + 8975, 13069, 11824, + 8975, 13069, 13150, + 8975, 13069, 14778, + 8975, 13069, 15116, + 8975, 15407, 10575, 8, + 8975, 15407, 10575, 16, + 8975, 15407, 10575, 28, + 8975, 15407, 10575, 40, + 8975, 15407, 10575, 58, + 8975, 15407, 10575, 72, + 8975, 15407, 10575, 96, + 8975, 15407, 10575, 314, + 8975, 15407, 10575, 706, + 8975, 15407, 10575, 19415, 22, + 8975, 15407, 10575, 19415, 34, + 8975, 15407, 10575, 19415, 406, + 8975, 15407, 10575, 19415, 608, + 8975, 16095, 13016, + 8975, 16531, 0, + 8975, 16531, 8, + 8975, 16531, 16, + 8975, 16531, 28, + 8975, 16531, 40, + 8975, 16531, 58, + 8975, 16531, 72, + 8975, 16531, 96, + 8975, 16531, 108, + 8975, 16531, 126, + 8975, 16531, 150, + 8975, 16531, 248, + 8975, 16531, 272, + 8975, 16531, 314, + 8975, 16531, 344, + 8975, 16531, 358, + 8975, 16531, 394, + 8975, 16531, 426, + 8975, 16531, 466, + 8975, 16531, 548, + 8975, 16531, 598, + 8975, 16531, 614, + 8975, 16531, 648, + 8975, 16531, 706, + 8975, 16531, 714, + 8975, 16531, 778, + 8975, 16531, 1000, + 8975, 16531, 1116, + 8975, 16531, 1214, + 8975, 16531, 1236, + 8975, 16531, 1588, + 8975, 16531, 1918, + 8975, 16531, 2036, + 8975, 16531, 2278, + 8975, 16531, 2574, + 8975, 16531, 2624, + 8975, 16531, 2698, + 8975, 16531, 2830, + 8975, 16531, 3212, + 8975, 16531, 3286, + 8975, 16531, 3422, + 8975, 16531, 3502, + 8975, 16531, 6572, + 8975, 16531, 11082, + 8975, 16531, 19415, 22, + 8975, 16531, 19415, 34, + 8975, 16531, 19415, 406, + 8975, 16531, 19415, 608, + 8975, 23737, 10574, + 8979, 15850, + 8981, 6208, + 8981, 16510, + 8981, 19403, 19666, + 8999, 21558, + 8999, 23852, + 9137, 16948, + 9141, 12456, + 9144, + 9172, + 9251, 6996, + 9253, 11513, 6836, + 9255, 518, + 9255, 1545, 16172, + 9255, 10575, 13259, 19540, + 9255, 10575, 14334, + 9255, 10575, 17534, + 9255, 10575, 19408, + 9255, 10575, 19540, + 9255, 10575, 19586, + 9255, 10575, 23070, + 9255, 10575, 23288, + 9255, 10575, 23722, + 9255, 12922, + 9255, 13016, + 9255, 13069, 2760, + 9255, 13069, 3240, + 9255, 13069, 3536, + 9255, 13069, 7036, + 9255, 13069, 7058, + 9255, 13069, 9358, + 9255, 13069, 11824, + 9255, 13069, 13150, + 9255, 13069, 14778, + 9255, 13069, 15116, + 9255, 15407, 10575, 8, + 9255, 15407, 10575, 16, + 9255, 15407, 10575, 28, + 9255, 15407, 10575, 40, + 9255, 15407, 10575, 58, + 9255, 15407, 10575, 72, + 9255, 15407, 10575, 96, + 9255, 15407, 10575, 314, + 9255, 15407, 10575, 706, + 9255, 15407, 10575, 19415, 22, + 9255, 15407, 10575, 19415, 34, + 9255, 15407, 10575, 19415, 406, + 9255, 15407, 10575, 19415, 608, + 9255, 16095, 12922, + 9255, 16095, 13016, + 9255, 16531, 0, + 9255, 16531, 8, + 9255, 16531, 16, + 9255, 16531, 28, + 9255, 16531, 40, + 9255, 16531, 58, + 9255, 16531, 72, + 9255, 16531, 96, + 9255, 16531, 108, + 9255, 16531, 126, + 9255, 16531, 150, + 9255, 16531, 248, + 9255, 16531, 272, + 9255, 16531, 314, + 9255, 16531, 344, + 9255, 16531, 358, + 9255, 16531, 394, + 9255, 16531, 426, + 9255, 16531, 466, + 9255, 16531, 548, + 9255, 16531, 598, + 9255, 16531, 614, + 9255, 16531, 648, + 9255, 16531, 706, + 9255, 16531, 738, + 9255, 16531, 778, + 9255, 16531, 1000, + 9255, 16531, 1116, + 9255, 16531, 1214, + 9255, 16531, 1236, + 9255, 16531, 1588, + 9255, 16531, 1918, + 9255, 16531, 2036, + 9255, 16531, 2248, + 9255, 16531, 2424, + 9255, 16531, 2574, + 9255, 16531, 2586, + 9255, 16531, 2624, + 9255, 16531, 2698, + 9255, 16531, 2830, + 9255, 16531, 3074, + 9255, 16531, 3212, + 9255, 16531, 3286, + 9255, 16531, 3422, + 9255, 16531, 3502, + 9255, 16531, 6572, + 9255, 16531, 9294, + 9255, 16531, 9566, + 9255, 16531, 11082, + 9255, 16531, 15387, 19540, + 9255, 16531, 19415, 22, + 9255, 16531, 19415, 34, + 9255, 16531, 19415, 406, + 9255, 16531, 19415, 608, + 9255, 17069, 8808, + 9255, 17164, + 9255, 21507, 10574, + 9255, 23549, 8808, + 9255, 23737, 10574, + 9257, 9818, + 9359, 18889, 15453, 10690, + 9440, + 9442, + 9443, 2790, + 9443, 9818, + 9762, + 9783, 1036, + 9783, 6108, + 9783, 7021, 16206, + 9783, 8344, + 9783, 13459, 10574, + 9783, 15901, 12525, 10690, + 9783, 15901, 12934, + 9783, 15901, 19574, + 9783, 15901, 28085, 19574, + 9783, 16206, + 9783, 17272, + 9783, 18553, 11513, 17007, 7038, + 9783, 18553, 11513, 18533, 7038, + 9783, 20764, + 9818, + 9819, 11513, 6376, + 9819, 11513, 17881, 10920, + 9819, 16149, 698, + 9823, 699, 7432, + 9823, 6701, 7432, + 9823, 11046, + 9823, 15836, + 9831, 23043, 8808, + 9838, + 9847, 10574, + 9870, + 9881, 507, 2864, + 9882, + 9885, 22264, + 9889, 13470, + 9905, 10574, + 9905, 10575, 323, 8281, 7429, 15938, + 9905, 10575, 323, 14659, 7429, 15938, + 9905, 10575, 323, 20858, + 9905, 10575, 11513, 1291, 12502, + 9905, 10575, 11513, 12525, 20858, + 9905, 10575, 11513, 14911, 15939, 12318, + 9905, 10575, 11513, 15141, 12318, + 9905, 10575, 11513, 15141, 12502, + 9905, 10575, 11513, 21927, 3536, + 9905, 10575, 11513, 22223, 15679, 12318, + 9905, 10575, 12319, 16121, 10574, + 10092, + 10143, 10574, + 10145, 5978, + 10145, 17926, + 10150, + 10151, 323, 13177, 660, + 10151, 6134, + 10151, 12318, + 10151, 13177, 660, + 10151, 14558, + 10151, 20406, + 10174, + 10177, 507, 14482, + 10185, 22098, + 10186, + 10243, 13069, 2760, + 10243, 13069, 3240, + 10243, 13069, 3536, + 10243, 13069, 7036, + 10243, 13069, 7058, + 10243, 13069, 9358, + 10243, 13069, 13150, + 10243, 13069, 14778, + 10243, 13069, 15116, + 10243, 16787, 2761, 18280, + 10243, 16787, 3241, 18280, + 10243, 16787, 3412, + 10243, 16787, 3537, 18280, + 10243, 16787, 7037, 18280, + 10243, 16787, 7059, 18280, + 10243, 16787, 9359, 18280, + 10243, 16787, 13151, 18280, + 10243, 16787, 13254, + 10243, 16787, 13284, + 10243, 16787, 14779, 18280, + 10243, 16787, 14876, + 10243, 16787, 15117, 18280, + 10243, 16787, 16108, + 10243, 16787, 16744, + 10243, 16787, 17372, + 10243, 16787, 17474, + 10243, 16787, 19070, + 10243, 20055, 2761, 7428, + 10243, 20055, 2761, 15108, + 10243, 20055, 2761, 18950, + 10243, 20055, 3537, 17370, + 10383, 15825, 897, 1164, + 10387, 17120, + 10394, + 10414, + 10416, + 10480, + 10575, 507, 3425, 13534, + 10585, 11472, + 10600, + 10603, 18542, + 10611, 15883, 20332, + 10629, 1857, 12930, + 10629, 14811, 16197, 6672, + 10629, 16358, + 10633, 11513, 22837, 12415, 12318, + 10635, 19143, 13069, 2760, + 10635, 19143, 13069, 3240, + 10635, 19143, 13069, 3536, + 10635, 19143, 13069, 7036, + 10635, 19143, 13069, 7058, + 10635, 19143, 13069, 9358, + 10635, 19143, 13069, 11824, + 10635, 19143, 13069, 13150, + 10635, 19143, 13069, 14778, + 10635, 19143, 13069, 15116, + 10635, 19143, 16531, 70, + 10635, 19143, 16531, 192, + 10635, 19143, 16531, 312, + 10635, 19143, 16531, 510, + 10635, 19143, 16531, 684, + 10635, 19143, 16531, 956, + 10635, 19143, 16531, 1078, + 10635, 19143, 16531, 1196, + 10635, 19143, 16531, 1362, + 10635, 19143, 16531, 1534, + 10635, 19143, 16531, 1682, + 10635, 19143, 16531, 1904, + 10635, 19143, 16531, 1990, + 10635, 19143, 16531, 2196, + 10635, 19143, 16531, 2362, + 10635, 19143, 16531, 2364, + 10635, 19143, 16531, 2518, + 10635, 19143, 16531, 2792, + 10635, 19143, 16531, 3036, + 10635, 19143, 16531, 3178, + 10635, 19143, 16531, 3372, + 10635, 19143, 16531, 3656, + 10635, 19143, 16531, 3882, + 10635, 19143, 16531, 9260, + 10635, 19143, 16531, 9548, + 10691, 507, 13028, + 10691, 897, 19738, + 10691, 11513, 8281, 7429, 12524, + 10691, 11513, 14659, 7429, 12524, + 10691, 16120, + 10691, 20406, + 10744, + 10852, + 10871, 13106, + 10871, 21090, + 10876, + 10906, + 10913, 11114, + 10925, 13069, 2760, + 10925, 13069, 3240, + 10925, 13069, 3536, + 10925, 13069, 7036, + 10925, 13069, 7058, + 10925, 13069, 9358, + 10925, 13069, 11824, + 10925, 13069, 13150, + 10925, 13069, 14778, + 10925, 13069, 15116, + 10925, 19753, 17299, 5974, + 10925, 21101, 29, 898, + 10925, 21101, 119, 15768, + 10925, 21101, 169, 1228, + 10925, 21101, 169, 12650, + 10925, 21101, 241, 228, + 10925, 21101, 241, 1446, + 10925, 21101, 289, 1738, + 10925, 21101, 289, 16756, + 10925, 21101, 375, 1992, + 10925, 21101, 413, 8322, + 10925, 21101, 413, 12686, + 10925, 21101, 416, + 10925, 21101, 447, 426, + 10925, 21101, 487, 490, + 10925, 21101, 487, 2562, + 10925, 21101, 567, 2854, + 10925, 21101, 607, 3130, + 10925, 21101, 610, + 10925, 21101, 629, 628, + 10925, 21101, 629, 3302, + 10925, 21101, 629, 10250, + 10925, 21101, 629, 10384, + 10925, 21101, 661, 3382, + 10925, 21101, 661, 14494, + 10925, 21101, 755, 11464, + 10925, 21101, 787, 3886, + 10925, 21101, 787, 11700, + 10925, 21101, 1123, 6264, + 10925, 21101, 1123, 6298, + 10925, 21101, 1123, 12654, + 10925, 21101, 1123, 12680, + 10925, 21101, 2043, 8056, + 10925, 21101, 2043, 8076, + 10925, 21101, 2043, 13696, + 10925, 21101, 2043, 13700, + 10925, 21101, 2043, 18968, + 10925, 21101, 2367, 198, + 10925, 21101, 2367, 3428, + 10925, 21101, 2367, 3486, + 10925, 21101, 2367, 19670, + 10925, 21101, 2367, 20092, + 10925, 21101, 2583, 2584, + 10925, 21101, 2837, 9858, + 10925, 21101, 2837, 14528, + 10925, 21101, 2837, 19034, + 10925, 21101, 3429, 10932, + 10925, 21101, 3429, 15112, + 10925, 21101, 3429, 15120, + 10925, 21101, 3429, 17364, + 10925, 21101, 3429, 18864, + 10925, 21101, 3429, 22598, + 10925, 21101, 10393, 0, + 10925, 21101, 10393, 8, + 10925, 21101, 10393, 16, + 10925, 21101, 10393, 28, + 10925, 21101, 10393, 40, + 10925, 21101, 10393, 58, + 10925, 21101, 10393, 66, + 10925, 21101, 10393, 73, 18554, + 10925, 21101, 10393, 73, 20266, + 10925, 21101, 10393, 80, + 10925, 21101, 10393, 314, + 10925, 21101, 10393, 682, + 10925, 21101, 10393, 706, + 10925, 21101, 10393, 3582, + 10925, 21101, 16448, + 10925, 21101, 18166, + 10925, 21101, 18862, + 10925, 21101, 20268, + 10925, 21101, 20366, + 10925, 21101, 20962, + 10925, 21101, 21572, + 10925, 21101, 21710, + 10925, 21101, 22158, + 10925, 21101, 23298, + 10925, 21101, 23686, + 10951, 13421, 12934, + 10951, 14932, + 10951, 19032, + 10998, + 10999, 3537, 6697, 9787, 2761, 1291, 23554, + 11039, 10575, 17037, 11032, + 11039, 16531, 0, + 11039, 16531, 8, + 11039, 16531, 16, + 11039, 16531, 28, + 11039, 16531, 40, + 11039, 16531, 66, + 11039, 16531, 108, + 11039, 16531, 150, + 11039, 16531, 206, + 11039, 16531, 248, + 11039, 16531, 272, + 11039, 16531, 336, + 11039, 16531, 344, + 11039, 16531, 358, + 11039, 16531, 394, + 11039, 16531, 426, + 11039, 16531, 466, + 11039, 16531, 548, + 11039, 16531, 598, + 11039, 16531, 614, + 11039, 16531, 648, + 11039, 16531, 738, + 11039, 16531, 778, + 11039, 16531, 1116, + 11039, 16531, 2574, + 11039, 16531, 17817, 8, + 11039, 16531, 17817, 16, + 11039, 16531, 17817, 66, + 11039, 16531, 17817, 206, + 11039, 16531, 17817, 336, + 11040, + 11041, 1088, + 11050, + 11051, 13807, 8981, 5530, + 11257, 17298, + 11371, 6101, 13421, 12934, + 11371, 8999, 21558, + 11371, 8999, 23852, + 11371, 13473, 3241, 17211, 19574, + 11371, 13473, 7037, 17211, 19574, + 11371, 13473, 13151, 17211, 19574, + 11371, 13473, 13151, 18889, 12525, 10690, + 11371, 13473, 13421, 12934, + 11371, 13473, 15453, 15938, + 11371, 13473, 15453, 17224, + 11371, 13473, 18999, 19140, + 11371, 13473, 19032, + 11371, 13473, 19140, + 11473, 6544, + 11473, 12415, 20501, 19807, 8280, + 11473, 12415, 20501, 19807, 14658, + 11475, 2301, 8320, + 11475, 6544, + 11475, 8320, + 11475, 20422, + 11489, 17305, 12934, + 11505, 12678, + 11505, 17797, 6996, + 11507, 13392, + 11508, + 11529, 6996, + 11530, + 11537, 16402, + 11537, 21851, 16661, 1290, + 11540, + 11825, 15459, 14932, + 11825, 15459, 16402, + 11825, 15459, 20373, 14932, + 11825, 15459, 22608, + 11828, + 11898, + 11900, + 12321, 12378, + 12321, 15678, + 12325, 5487, 22534, + 12325, 13069, 2760, + 12325, 13069, 3240, + 12325, 13069, 3536, + 12325, 13069, 7036, + 12325, 13069, 7058, + 12325, 13069, 9358, + 12325, 13069, 11824, + 12325, 13069, 13150, + 12325, 13069, 14778, + 12325, 13069, 15116, + 12325, 13456, + 12325, 14334, + 12325, 14911, 16531, 8, + 12325, 14911, 16531, 16, + 12325, 14911, 16531, 28, + 12325, 14911, 16531, 40, + 12325, 14911, 16531, 108, + 12325, 14911, 16531, 228, + 12325, 14911, 16531, 248, + 12325, 14911, 16531, 272, + 12325, 14911, 16531, 554, + 12325, 14911, 16531, 598, + 12325, 14911, 16531, 668, + 12325, 14911, 16531, 714, + 12325, 14911, 16531, 778, + 12325, 14911, 16531, 1002, + 12325, 14911, 16531, 1120, + 12325, 14911, 16531, 1236, + 12325, 14911, 16531, 1556, + 12325, 14911, 16531, 1988, + 12325, 14911, 16531, 2036, + 12325, 14911, 16531, 2116, + 12325, 14911, 16531, 2586, + 12325, 14911, 16531, 2676, + 12325, 14911, 16531, 2698, + 12325, 14911, 16531, 3212, + 12325, 14911, 16531, 3750, + 12325, 14911, 16531, 3932, + 12325, 14911, 16531, 4024, + 12325, 14911, 16531, 5486, + 12325, 14911, 16531, 7868, + 12325, 14911, 16531, 8234, + 12325, 14911, 16531, 8942, + 12325, 14911, 16531, 9962, + 12325, 14911, 16531, 12996, + 12325, 14911, 16531, 22902, + 12325, 15407, 22534, + 12325, 17835, 16531, 8, + 12325, 17835, 16531, 16, + 12325, 17835, 16531, 28, + 12325, 17835, 16531, 40, + 12325, 17835, 16531, 108, + 12325, 17835, 16531, 228, + 12325, 17835, 16531, 248, + 12325, 17835, 16531, 272, + 12325, 17835, 16531, 554, + 12325, 17835, 16531, 598, + 12325, 17835, 16531, 668, + 12325, 17835, 16531, 714, + 12325, 17835, 16531, 778, + 12325, 17835, 16531, 1002, + 12325, 17835, 16531, 1120, + 12325, 17835, 16531, 1236, + 12325, 17835, 16531, 1556, + 12325, 17835, 16531, 1988, + 12325, 17835, 16531, 2036, + 12325, 17835, 16531, 2116, + 12325, 17835, 16531, 2586, + 12325, 17835, 16531, 2676, + 12325, 17835, 16531, 2698, + 12325, 17835, 16531, 3212, + 12325, 17835, 16531, 3750, + 12325, 17835, 16531, 3932, + 12325, 17835, 16531, 4024, + 12325, 17835, 16531, 5486, + 12325, 17835, 16531, 7868, + 12325, 17835, 16531, 8234, + 12325, 17835, 16531, 8942, + 12325, 17835, 16531, 9962, + 12325, 17835, 16531, 12996, + 12325, 17835, 16531, 22902, + 12325, 18303, 20549, 8808, + 12325, 18303, 23213, 8808, + 12325, 20073, 21143, 20318, + 12325, 21143, 20318, + 12325, 22465, 8808, + 12325, 23919, 8808, + 12326, + 12353, 12708, + 12361, 6365, 20719, 8280, + 12361, 6365, 20719, 14658, + 12361, 14953, 9783, 22034, + 12361, 14953, 15949, 22034, + 12361, 17205, 17216, + 12361, 17205, 21160, + 12361, 18636, + 12361, 18637, 9783, 7844, + 12361, 18637, 15949, 7844, + 12361, 18637, 17242, + 12361, 18637, 17244, + 12375, 17298, + 12378, + 12379, 11513, 37, 16382, + 12379, 11513, 20920, + 12381, 6996, + 12408, + 12415, 20501, 19381, 10943, 14255, 11488, + 12415, 20501, 21349, 10943, 17943, 21556, + 12415, 20501, 21349, 10943, 17943, 22836, + 12415, 20501, 22837, 10943, 17943, 14931, 11488, + 12415, 20501, 22837, 10943, 17943, 19380, + 12415, 20501, 22837, 10943, 17943, 21348, + 12419, 17298, + 12454, + 12458, + 12463, 7073, 10696, + 12463, 12916, + 12463, 12922, + 12463, 16531, 0, + 12463, 16531, 16, + 12463, 16531, 24, + 12463, 16531, 28, + 12463, 16531, 40, + 12463, 16531, 186, + 12463, 16531, 242, + 12463, 16531, 358, + 12463, 16531, 366, + 12463, 16531, 374, + 12463, 16531, 380, + 12463, 16531, 394, + 12463, 16531, 402, + 12463, 16531, 416, + 12463, 16531, 426, + 12463, 16531, 440, + 12463, 16531, 446, + 12463, 16531, 454, + 12463, 16531, 466, + 12463, 16531, 478, + 12463, 16531, 490, + 12463, 16531, 548, + 12463, 16531, 562, + 12463, 16531, 610, + 12463, 16531, 624, + 12463, 16531, 656, + 12463, 16531, 738, + 12463, 16531, 778, + 12463, 16531, 1460, + 12463, 16531, 1484, + 12463, 16531, 2022, + 12463, 16531, 2028, + 12463, 16531, 2110, + 12463, 16531, 2294, + 12463, 16531, 2408, + 12463, 16531, 2574, + 12463, 16531, 2704, + 12463, 16531, 2818, + 12463, 16531, 2890, + 12463, 16531, 3034, + 12463, 16531, 3060, + 12463, 16531, 3066, + 12463, 16531, 3078, + 12463, 16531, 3218, + 12463, 16531, 3220, + 12463, 16531, 3320, + 12463, 16531, 3364, + 12463, 16531, 3368, + 12463, 16531, 3412, + 12463, 16531, 3416, + 12463, 16531, 3792, + 12463, 16531, 3958, + 12463, 16531, 3984, + 12463, 16531, 8046, + 12463, 16531, 8214, + 12463, 16531, 8820, + 12463, 16531, 8826, + 12463, 16531, 9190, + 12463, 16531, 9284, + 12463, 16531, 9372, + 12463, 16531, 9488, + 12463, 16531, 9500, + 12463, 16531, 9512, + 12463, 16531, 9524, + 12463, 16531, 9850, + 12463, 16531, 9918, + 12463, 16531, 10124, + 12463, 16531, 10146, + 12463, 16531, 10426, + 12463, 16531, 10474, + 12463, 16531, 13732, + 12463, 16531, 13790, + 12463, 16531, 13946, + 12463, 16531, 14178, + 12463, 16531, 14192, + 12463, 16531, 14738, + 12463, 16531, 14814, + 12463, 16531, 16134, + 12463, 16531, 16474, + 12463, 16531, 18704, + 12463, 16531, 18849, 41, 3985, 2514, + 12463, 16531, 18849, 416, + 12463, 16531, 18849, 549, 20222, + 12463, 16531, 18849, 669, 16592, + 12463, 16531, 18849, 2004, + 12463, 16531, 18849, 2028, + 12463, 16531, 18849, 2243, 2148, + 12463, 16531, 18849, 2373, 14536, + 12463, 16531, 18849, 2455, 20360, + 12463, 16531, 18849, 2513, 8878, + 12463, 16531, 18849, 2526, + 12463, 16531, 18849, 2549, 20222, + 12463, 16531, 18849, 2562, + 12463, 16531, 18849, 2704, + 12463, 16531, 18849, 2711, 8878, + 12463, 16531, 18849, 2828, + 12463, 16531, 18849, 2863, 549, 2613, 20490, + 12463, 16531, 18849, 2863, 549, 2613, 23546, + 12463, 16531, 18849, 2863, 8879, 20490, + 12463, 16531, 18849, 2863, 8879, 23546, + 12463, 16531, 18849, 2896, + 12463, 16531, 18849, 3108, + 12463, 16531, 18849, 3262, + 12463, 16531, 18849, 3266, + 12463, 16531, 18849, 3320, + 12463, 16531, 18849, 3672, + 12463, 16531, 18849, 7028, + 12463, 16531, 18849, 7984, + 12463, 16531, 18849, 8152, + 12463, 16531, 18849, 8182, + 12463, 16531, 18849, 8796, + 12463, 16531, 18849, 8822, + 12463, 16531, 18849, 9354, + 12463, 16531, 18849, 9364, + 12463, 16531, 18849, 9488, + 12463, 16531, 18849, 9498, + 12463, 16531, 18849, 9499, 8876, + 12463, 16531, 18849, 9499, 9496, + 12463, 16531, 18849, 9564, + 12463, 16531, 18849, 9579, 22582, + 12463, 16531, 18849, 9633, 8874, + 12463, 16531, 18849, 9814, + 12463, 16531, 18849, 10497, 14273, 3976, + 12463, 16531, 18849, 10518, + 12463, 16531, 18849, 10588, + 12463, 16531, 18849, 11001, 8878, + 12463, 16531, 18849, 13347, 1486, + 12463, 16531, 18849, 13776, + 12463, 16531, 18849, 13840, + 12463, 16531, 18849, 13900, + 12463, 16531, 18849, 14124, + 12463, 16531, 18849, 14145, 8878, + 12463, 16531, 18849, 15242, + 12463, 16531, 18849, 16568, + 12463, 16531, 18849, 16594, + 12463, 16531, 18849, 16624, + 12463, 16531, 18849, 16654, + 12463, 16531, 18849, 16720, + 12463, 16531, 18849, 16750, + 12463, 16531, 18849, 16766, + 12463, 16531, 18849, 16846, + 12463, 16531, 18849, 16868, + 12463, 16531, 18849, 17141, 549, 2612, + 12463, 16531, 18849, 17146, + 12463, 16531, 18849, 17188, + 12463, 16531, 18849, 17356, + 12463, 16531, 18849, 18544, + 12463, 16531, 18849, 18570, + 12463, 16531, 18849, 18638, + 12463, 16531, 18849, 18640, + 12463, 16531, 18849, 18712, + 12463, 16531, 18849, 18722, + 12463, 16531, 18849, 18802, + 12463, 16531, 18849, 19066, + 12463, 16531, 18849, 19374, + 12463, 16531, 18849, 20258, + 12463, 16531, 18849, 20260, + 12463, 16531, 18849, 21430, + 12463, 16531, 18849, 21568, + 12463, 16531, 18849, 22040, + 12463, 16531, 18849, 22514, + 12463, 16531, 18849, 22546, + 12463, 16531, 18849, 22594, + 12463, 16531, 18849, 22602, + 12463, 16531, 18849, 22894, + 12463, 16531, 18849, 23848, + 12463, 16531, 18849, 23910, + 12463, 16531, 18849, 23920, + 12463, 16531, 18851, 426, + 12463, 16531, 18851, 427, 14198, + 12463, 16531, 18851, 427, 20370, + 12463, 16531, 18851, 669, 14274, + 12463, 16531, 18851, 669, 21568, + 12463, 16531, 18851, 1460, + 12463, 16531, 18851, 1998, + 12463, 16531, 18851, 2064, + 12463, 16531, 18851, 2203, 14273, 9552, + 12463, 16531, 18851, 2242, + 12463, 16531, 18851, 2289, 14278, + 12463, 16531, 18851, 2393, 16590, + 12463, 16531, 18851, 2557, 9362, + 12463, 16531, 18851, 2705, 14278, + 12463, 16531, 18851, 2850, + 12463, 16531, 18851, 3207, 668, + 12463, 16531, 18851, 3306, + 12463, 16531, 18851, 7018, + 12463, 16531, 18851, 8829, 18596, + 12463, 16531, 18851, 8872, + 12463, 16531, 18851, 8875, 16724, + 12463, 16531, 18851, 8879, 17358, + 12463, 16531, 18851, 9304, + 12463, 16531, 18851, 9486, + 12463, 16531, 18851, 10467, 9370, + 12463, 16531, 18851, 10566, + 12463, 16531, 18851, 10844, + 12463, 16531, 18851, 11374, + 12463, 16531, 18851, 11639, 20222, + 12463, 16531, 18851, 13702, + 12463, 16531, 18851, 13938, + 12463, 16531, 18851, 14127, 2400, + 12463, 16531, 18851, 14283, 17136, + 12463, 16531, 18851, 14486, + 12463, 16531, 18851, 15480, + 12463, 16531, 18851, 16432, + 12463, 16531, 18851, 16436, + 12463, 16531, 18851, 16494, + 12463, 16531, 18851, 16628, + 12463, 16531, 18851, 16652, + 12463, 16531, 18851, 16722, + 12463, 16531, 18851, 16732, + 12463, 16531, 18851, 16733, 13778, + 12463, 16531, 18851, 16768, + 12463, 16531, 18851, 16874, + 12463, 16531, 18851, 17604, + 12463, 16531, 18851, 18356, + 12463, 16531, 18851, 18598, + 12463, 16531, 18851, 18703, 9020, + 12463, 16531, 18851, 18736, + 12463, 16531, 18851, 18940, + 12463, 16531, 18851, 19030, + 12463, 16531, 18851, 20078, + 12463, 16531, 18851, 20326, + 12463, 16531, 18851, 21872, + 12463, 16531, 18851, 23234, + 12463, 16531, 18853, 416, + 12463, 16531, 18853, 427, 14274, + 12463, 16531, 18853, 427, 18352, + 12463, 16531, 18853, 610, + 12463, 16531, 18853, 791, 16692, + 12463, 16531, 18853, 1500, + 12463, 16531, 18853, 1982, + 12463, 16531, 18853, 2023, 2218, + 12463, 16531, 18853, 2023, 18138, + 12463, 16531, 18853, 2028, + 12463, 16531, 18853, 2148, + 12463, 16531, 18853, 2202, + 12463, 16531, 18853, 2208, + 12463, 16531, 18853, 2268, + 12463, 16531, 18853, 2396, + 12463, 16531, 18853, 2526, + 12463, 16531, 18853, 2666, + 12463, 16531, 18853, 2671, 8828, + 12463, 16531, 18853, 2710, + 12463, 16531, 18853, 2822, + 12463, 16531, 18853, 2846, + 12463, 16531, 18853, 3416, + 12463, 16531, 18853, 3800, + 12463, 16531, 18853, 3870, + 12463, 16531, 18853, 3976, + 12463, 16531, 18853, 6126, + 12463, 16531, 18853, 7294, + 12463, 16531, 18853, 8042, + 12463, 16531, 18853, 8181, 18712, + 12463, 16531, 18853, 8821, 16908, + 12463, 16531, 18853, 8821, 23778, + 12463, 16531, 18853, 8828, + 12463, 16531, 18853, 8832, + 12463, 16531, 18853, 8936, + 12463, 16531, 18853, 8992, + 12463, 16531, 18853, 9192, + 12463, 16531, 18853, 9194, + 12463, 16531, 18853, 9268, + 12463, 16531, 18853, 9292, + 12463, 16531, 18853, 9304, + 12463, 16531, 18853, 9364, + 12463, 16531, 18853, 9490, + 12463, 16531, 18853, 9494, + 12463, 16531, 18853, 9496, + 12463, 16531, 18853, 9502, + 12463, 16531, 18853, 9575, 18629, 8870, + 12463, 16531, 18853, 10426, + 12463, 16531, 18853, 10482, + 12463, 16531, 18853, 11001, 3970, + 12463, 16531, 18853, 11376, + 12463, 16531, 18853, 11684, + 12463, 16531, 18853, 13342, + 12463, 16531, 18853, 13900, + 12463, 16531, 18853, 13932, + 12463, 16531, 18853, 13934, + 12463, 16531, 18853, 14094, + 12463, 16531, 18853, 14100, + 12463, 16531, 18853, 14124, + 12463, 16531, 18853, 14132, + 12463, 16531, 18853, 14142, + 12463, 16531, 18853, 14145, 16592, + 12463, 16531, 18853, 14178, + 12463, 16531, 18853, 14182, + 12463, 16531, 18853, 14194, + 12463, 16531, 18853, 14266, + 12463, 16531, 18853, 14277, 9304, + 12463, 16531, 18853, 14350, + 12463, 16531, 18853, 14846, + 12463, 16531, 18853, 14996, + 12463, 16531, 18853, 15550, + 12463, 16531, 18853, 16258, + 12463, 16531, 18853, 16434, + 12463, 16531, 18853, 16480, + 12463, 16531, 18853, 16592, + 12463, 16531, 18853, 16624, + 12463, 16531, 18853, 16626, + 12463, 16531, 18853, 16630, + 12463, 16531, 18853, 16708, + 12463, 16531, 18853, 16730, + 12463, 16531, 18853, 16748, + 12463, 16531, 18853, 17110, + 12463, 16531, 18853, 18354, + 12463, 16531, 18853, 18616, + 12463, 16531, 18853, 18691, 9552, + 12463, 16531, 18853, 18692, + 12463, 16531, 18853, 18720, + 12463, 16531, 18853, 18874, + 12463, 16531, 18853, 19242, + 12463, 16531, 18853, 19266, + 12463, 16531, 18853, 19296, + 12463, 16531, 18853, 20290, + 12463, 16531, 18853, 20292, + 12463, 16531, 18853, 20346, + 12463, 16531, 18853, 20384, + 12463, 16531, 18853, 20934, + 12463, 16531, 18853, 20950, + 12463, 16531, 18853, 21630, + 12463, 16531, 18853, 22516, + 12463, 16531, 18855, 24, + 12463, 16531, 18855, 380, + 12463, 16531, 18855, 454, + 12463, 16531, 18855, 478, + 12463, 16531, 18855, 490, + 12463, 16531, 18855, 656, + 12463, 16531, 18855, 668, + 12463, 16531, 18855, 1440, + 12463, 16531, 18855, 2028, + 12463, 16531, 18855, 2138, + 12463, 16531, 18855, 2144, + 12463, 16531, 18855, 2242, + 12463, 16531, 18855, 2294, + 12463, 16531, 18855, 2324, + 12463, 16531, 18855, 2414, + 12463, 16531, 18855, 2612, + 12463, 16531, 18855, 2704, + 12463, 16531, 18855, 2798, + 12463, 16531, 18855, 2818, + 12463, 16531, 18855, 2848, + 12463, 16531, 18855, 2898, + 12463, 16531, 18855, 3067, 2756, + 12463, 16531, 18855, 3067, 8998, + 12463, 16531, 18855, 3078, + 12463, 16531, 18855, 3186, + 12463, 16531, 18855, 3188, + 12463, 16531, 18855, 3220, + 12463, 16531, 18855, 3266, + 12463, 16531, 18855, 3306, + 12463, 16531, 18855, 3320, + 12463, 16531, 18855, 3368, + 12463, 16531, 18855, 3474, + 12463, 16531, 18855, 3744, + 12463, 16531, 18855, 3920, + 12463, 16531, 18855, 7288, + 12463, 16531, 18855, 8042, + 12463, 16531, 18855, 8044, + 12463, 16531, 18855, 8178, + 12463, 16531, 18855, 8214, + 12463, 16531, 18855, 8288, + 12463, 16531, 18855, 8304, + 12463, 16531, 18855, 8820, + 12463, 16531, 18855, 8821, 14778, + 12463, 16531, 18855, 8834, + 12463, 16531, 18855, 8870, + 12463, 16531, 18855, 8874, + 12463, 16531, 18855, 8878, + 12463, 16531, 18855, 8976, + 12463, 16531, 18855, 9020, + 12463, 16531, 18855, 9192, + 12463, 16531, 18855, 9200, + 12463, 16531, 18855, 9216, + 12463, 16531, 18855, 9368, + 12463, 16531, 18855, 9492, + 12463, 16531, 18855, 9500, + 12463, 16531, 18855, 9512, + 12463, 16531, 18855, 9552, + 12463, 16531, 18855, 9564, + 12463, 16531, 18855, 9596, + 12463, 16531, 18855, 9934, + 12463, 16531, 18855, 10086, + 12463, 16531, 18855, 10458, + 12463, 16531, 18855, 10474, + 12463, 16531, 18855, 10496, + 12463, 16531, 18855, 10718, + 12463, 16531, 18855, 10916, + 12463, 16531, 18855, 10918, + 12463, 16531, 18855, 11120, + 12463, 16531, 18855, 11756, + 12463, 16531, 18855, 11758, + 12463, 16531, 18855, 13685, 13936, + 12463, 16531, 18855, 13744, + 12463, 16531, 18855, 13790, + 12463, 16531, 18855, 13946, + 12463, 16531, 18855, 13974, + 12463, 16531, 18855, 13976, + 12463, 16531, 18855, 14096, + 12463, 16531, 18855, 14120, + 12463, 16531, 18855, 14140, + 12463, 16531, 18855, 14148, + 12463, 16531, 18855, 14180, + 12463, 16531, 18855, 14184, + 12463, 16531, 18855, 14194, + 12463, 16531, 18855, 14268, + 12463, 16531, 18855, 14272, + 12463, 16531, 18855, 14278, + 12463, 16531, 18855, 14814, + 12463, 16531, 18855, 15066, + 12463, 16531, 18855, 15478, + 12463, 16531, 18855, 15550, + 12463, 16531, 18855, 16260, + 12463, 16531, 18855, 16534, + 12463, 16531, 18855, 16650, + 12463, 16531, 18855, 16656, + 12463, 16531, 18855, 16658, + 12463, 16531, 18855, 16722, + 12463, 16531, 18855, 16726, + 12463, 16531, 18855, 16728, + 12463, 16531, 18855, 16736, + 12463, 16531, 18855, 16738, + 12463, 16531, 18855, 16772, + 12463, 16531, 18855, 16774, + 12463, 16531, 18855, 16896, + 12463, 16531, 18855, 17112, + 12463, 16531, 18855, 17134, + 12463, 16531, 18855, 17356, + 12463, 16531, 18855, 18546, + 12463, 16531, 18855, 18562, + 12463, 16531, 18855, 18618, + 12463, 16531, 18855, 18696, + 12463, 16531, 18855, 18700, + 12463, 16531, 18855, 18710, + 12463, 16531, 18855, 19454, + 12463, 16531, 18855, 20358, + 12463, 16531, 18855, 20364, + 12463, 16531, 18855, 21396, + 12463, 16531, 18855, 22512, + 12463, 16531, 18857, 0, + 12463, 16531, 18857, 16, + 12463, 16531, 18857, 28, + 12463, 16531, 18857, 228, + 12463, 16531, 18857, 243, 16, + 12463, 16531, 18857, 243, 6212, + 12463, 16531, 18857, 243, 17016, + 12463, 16531, 18857, 366, + 12463, 16531, 18857, 374, + 12463, 16531, 18857, 416, + 12463, 16531, 18857, 426, + 12463, 16531, 18857, 440, + 12463, 16531, 18857, 466, + 12463, 16531, 18857, 549, 16880, + 12463, 16531, 18857, 549, 16932, + 12463, 16531, 18857, 562, + 12463, 16531, 18857, 566, + 12463, 16531, 18857, 572, + 12463, 16531, 18857, 1450, + 12463, 16531, 18857, 1460, + 12463, 16531, 18857, 1484, + 12463, 16531, 18857, 1500, + 12463, 16531, 18857, 2028, + 12463, 16531, 18857, 2148, + 12463, 16531, 18857, 2208, + 12463, 16531, 18857, 2210, + 12463, 16531, 18857, 2288, + 12463, 16531, 18857, 2294, + 12463, 16531, 18857, 2362, + 12463, 16531, 18857, 2372, + 12463, 16531, 18857, 2374, + 12463, 16531, 18857, 2408, + 12463, 16531, 18857, 2454, + 12463, 16531, 18857, 2488, + 12463, 16531, 18857, 2514, + 12463, 16531, 18857, 2574, + 12463, 16531, 18857, 2705, 17768, + 12463, 16531, 18857, 2705, 17886, + 12463, 16531, 18857, 2788, + 12463, 16531, 18857, 2890, + 12463, 16531, 18857, 2892, + 12463, 16531, 18857, 3034, + 12463, 16531, 18857, 3046, + 12463, 16531, 18857, 3172, + 12463, 16531, 18857, 3200, + 12463, 16531, 18857, 3206, + 12463, 16531, 18857, 3218, + 12463, 16531, 18857, 3254, + 12463, 16531, 18857, 3364, + 12463, 16531, 18857, 3378, + 12463, 16531, 18857, 3386, + 12463, 16531, 18857, 3412, + 12463, 16531, 18857, 3418, + 12463, 16531, 18857, 3470, + 12463, 16531, 18857, 3474, + 12463, 16531, 18857, 3518, + 12463, 16531, 18857, 3672, + 12463, 16531, 18857, 3700, + 12463, 16531, 18857, 3792, + 12463, 16531, 18857, 3798, + 12463, 16531, 18857, 3894, + 12463, 16531, 18857, 3946, + 12463, 16531, 18857, 3959, 12928, + 12463, 16531, 18857, 3959, 20772, + 12463, 16531, 18857, 3978, + 12463, 16531, 18857, 3984, + 12463, 16531, 18857, 7068, + 12463, 16531, 18857, 7218, + 12463, 16531, 18857, 7298, + 12463, 16531, 18857, 7302, + 12463, 16531, 18857, 8046, + 12463, 16531, 18857, 8174, + 12463, 16531, 18857, 8180, + 12463, 16531, 18857, 8234, + 12463, 16531, 18857, 8354, + 12463, 16531, 18857, 8358, + 12463, 16531, 18857, 8796, + 12463, 16531, 18857, 8824, + 12463, 16531, 18857, 8886, + 12463, 16531, 18857, 8936, + 12463, 16531, 18857, 8992, + 12463, 16531, 18857, 9191, 463, 13540, + 12463, 16531, 18857, 9191, 20678, + 12463, 16531, 18857, 9194, + 12463, 16531, 18857, 9210, + 12463, 16531, 18857, 9226, + 12463, 16531, 18857, 9302, + 12463, 16531, 18857, 9310, + 12463, 16531, 18857, 9312, + 12463, 16531, 18857, 9372, + 12463, 16531, 18857, 9373, 13174, + 12463, 16531, 18857, 9408, + 12463, 16531, 18857, 9498, + 12463, 16531, 18857, 9510, + 12463, 16531, 18857, 9612, + 12463, 16531, 18857, 9638, + 12463, 16531, 18857, 9814, + 12463, 16531, 18857, 9842, + 12463, 16531, 18857, 9848, + 12463, 16531, 18857, 9850, + 12463, 16531, 18857, 9874, + 12463, 16531, 18857, 9912, + 12463, 16531, 18857, 9918, + 12463, 16531, 18857, 9920, + 12463, 16531, 18857, 10124, + 12463, 16531, 18857, 10482, + 12463, 16531, 18857, 10496, + 12463, 16531, 18857, 10846, + 12463, 16531, 18857, 10855, 14278, + 12463, 16531, 18857, 11036, + 12463, 16531, 18857, 11112, + 12463, 16531, 18857, 11490, + 12463, 16531, 18857, 11682, + 12463, 16531, 18857, 11686, + 12463, 16531, 18857, 11692, + 12463, 16531, 18857, 11754, + 12463, 16531, 18857, 13344, + 12463, 16531, 18857, 13374, + 12463, 16531, 18857, 13376, + 12463, 16531, 18857, 13682, + 12463, 16531, 18857, 13734, + 12463, 16531, 18857, 13932, + 12463, 16531, 18857, 13972, + 12463, 16531, 18857, 13980, + 12463, 16531, 18857, 14098, + 12463, 16531, 18857, 14134, + 12463, 16531, 18857, 14146, + 12463, 16531, 18857, 14150, + 12463, 16531, 18857, 14154, + 12463, 16531, 18857, 14182, + 12463, 16531, 18857, 14270, + 12463, 16531, 18857, 14534, + 12463, 16531, 18857, 14994, + 12463, 16531, 18857, 15246, + 12463, 16531, 18857, 15394, + 12463, 16531, 18857, 15530, + 12463, 16531, 18857, 15548, + 12463, 16531, 18857, 16260, + 12463, 16531, 18857, 16532, + 12463, 16531, 18857, 16734, + 12463, 16531, 18857, 16740, + 12463, 16531, 18857, 16766, + 12463, 16531, 18857, 16770, + 12463, 16531, 18857, 17030, + 12463, 16531, 18857, 17358, + 12463, 16531, 18857, 17602, + 12463, 16531, 18857, 18200, + 12463, 16531, 18857, 18686, + 12463, 16531, 18857, 18688, + 12463, 16531, 18857, 18694, + 12463, 16531, 18857, 18698, + 12463, 16531, 18857, 18708, + 12463, 16531, 18857, 19092, + 12463, 16531, 18857, 20356, + 12463, 16531, 18857, 20360, + 12463, 16531, 18857, 20362, + 12463, 16531, 18857, 22601, 9552, + 12463, 16531, 18859, 24, + 12463, 16531, 18859, 40, + 12463, 16531, 18859, 186, + 12463, 16531, 18859, 358, + 12463, 16531, 18859, 374, + 12463, 16531, 18859, 380, + 12463, 16531, 18859, 394, + 12463, 16531, 18859, 402, + 12463, 16531, 18859, 426, + 12463, 16531, 18859, 446, + 12463, 16531, 18859, 478, + 12463, 16531, 18859, 490, + 12463, 16531, 18859, 610, + 12463, 16531, 18859, 624, + 12463, 16531, 18859, 738, + 12463, 16531, 18859, 778, + 12463, 16531, 18859, 1484, + 12463, 16531, 18859, 2022, + 12463, 16531, 18859, 2028, + 12463, 16531, 18859, 2110, + 12463, 16531, 18859, 2294, + 12463, 16531, 18859, 2704, + 12463, 16531, 18859, 2818, + 12463, 16531, 18859, 3060, + 12463, 16531, 18859, 3066, + 12463, 16531, 18859, 3078, + 12463, 16531, 18859, 3218, + 12463, 16531, 18859, 3220, + 12463, 16531, 18859, 3320, + 12463, 16531, 18859, 3364, + 12463, 16531, 18859, 3368, + 12463, 16531, 18859, 3416, + 12463, 16531, 18859, 3792, + 12463, 16531, 18859, 3958, + 12463, 16531, 18859, 8214, + 12463, 16531, 18859, 8820, + 12463, 16531, 18859, 8826, + 12463, 16531, 18859, 9190, + 12463, 16531, 18859, 9284, + 12463, 16531, 18859, 9488, + 12463, 16531, 18859, 9500, + 12463, 16531, 18859, 9524, + 12463, 16531, 18859, 9850, + 12463, 16531, 18859, 9918, + 12463, 16531, 18859, 10124, + 12463, 16531, 18859, 10146, + 12463, 16531, 18859, 10426, + 12463, 16531, 18859, 10474, + 12463, 16531, 18859, 11398, + 12463, 16531, 18859, 13946, + 12463, 16531, 18859, 14178, + 12463, 16531, 18859, 14192, + 12463, 16531, 18859, 14738, + 12463, 16531, 18859, 18704, + 12463, 18708, + 12463, 20549, 8808, + 12463, 21127, 8809, 18378, + 12463, 21127, 8809, 22076, + 12463, 21844, + 12464, + 12469, 3657, 7073, 10696, + 12469, 3657, 16531, 0, + 12469, 3657, 16531, 8, + 12469, 3657, 16531, 16, + 12469, 3657, 16531, 28, + 12469, 3657, 16531, 40, + 12469, 3657, 16531, 108, + 12469, 3657, 16531, 132, + 12469, 3657, 16531, 168, + 12469, 3657, 16531, 186, + 12469, 3657, 16531, 228, + 12469, 3657, 16531, 350, + 12469, 3657, 16531, 358, + 12469, 3657, 16531, 522, + 12469, 3657, 16531, 548, + 12469, 3657, 16531, 618, + 12469, 3657, 16531, 660, + 12469, 3657, 16531, 728, + 12469, 3657, 16531, 738, + 12469, 3657, 16531, 804, + 12469, 3657, 16531, 1534, + 12469, 3657, 16531, 1562, + 12469, 3657, 16531, 2394, + 12469, 3657, 16531, 3648, + 12469, 3657, 16531, 3934, + 12469, 3657, 16531, 6652, + 12469, 3657, 16531, 6850, + 12469, 3657, 16531, 7708, + 12469, 3657, 16531, 8142, + 12469, 3657, 16531, 11676, + 12469, 3657, 16531, 15426, + 12469, 3657, 21127, 2301, 11032, + 12469, 3657, 21127, 2429, 11032, + 12469, 3657, 21127, 7521, 11032, + 12469, 3657, 21127, 18531, 11032, + 12469, 3657, 21127, 20121, 11032, + 12471, 10575, 15172, + 12471, 15407, 10575, 8, + 12471, 15407, 10575, 16, + 12471, 15407, 10575, 28, + 12471, 15407, 10575, 40, + 12471, 15407, 10575, 41, 1493, 22899, 614, + 12471, 15407, 10575, 186, + 12471, 15407, 10575, 8007, 16, + 12471, 15407, 10575, 8007, 28, + 12471, 15407, 10575, 16859, 8, + 12471, 16531, 0, + 12471, 16531, 16, + 12471, 16531, 40, + 12471, 16531, 108, + 12471, 16531, 126, + 12471, 16531, 150, + 12471, 16531, 248, + 12471, 16531, 272, + 12471, 16531, 344, + 12471, 16531, 394, + 12471, 16531, 426, + 12471, 16531, 466, + 12471, 16531, 548, + 12471, 16531, 598, + 12471, 16531, 614, + 12471, 16531, 738, + 12471, 16531, 778, + 12471, 16531, 2392, + 12471, 16531, 2548, + 12471, 16531, 2574, + 12471, 16531, 2698, + 12471, 16531, 8007, 108, + 12471, 16531, 16859, 738, + 12471, 16531, 20375, 648, + 12471, 16531, 20683, 648, + 12471, 16531, 22551, 272, + 12471, 16531, 22551, 466, + 12471, 16531, 22551, 614, + 12471, 16531, 22899, 0, + 12471, 16531, 22899, 248, + 12471, 16531, 22899, 272, + 12471, 16531, 22899, 394, + 12471, 16531, 22899, 426, + 12471, 16531, 22899, 548, + 12471, 16531, 22899, 598, + 12471, 16531, 22899, 614, + 12471, 16531, 22899, 738, + 12471, 16531, 22899, 778, + 12471, 17299, 12517, 467, 13966, + 12471, 17299, 12517, 13630, + 12471, 17299, 12517, 20444, + 12471, 17299, 12517, 22770, + 12471, 20444, + 12471, 21143, 10575, 14, + 12471, 21143, 10575, 474, + 12471, 22744, + 12487, 11513, 20916, + 12492, + 12507, 1036, + 12522, + 12525, 699, 20501, 19589, 13594, + 12525, 2592, + 12525, 3311, 11513, 10100, + 12525, 6345, 10726, + 12525, 6701, 20501, 19589, 13594, + 12525, 7038, + 12525, 7059, 18889, 10690, + 12525, 7437, 14811, 16197, 6672, + 12525, 8281, 8261, 13960, + 12525, 8281, 20501, 13594, + 12525, 8281, 20501, 19589, 13594, + 12525, 8981, 16538, + 12525, 10690, + 12525, 10999, 17224, + 12525, 10999, 17988, + 12525, 10999, 18534, + 12525, 11371, 14911, 17224, + 12525, 11371, 14911, 17988, + 12525, 11371, 14911, 18534, + 12525, 12667, 8108, + 12525, 12667, 8109, 19015, 3537, 18281, 19071, 17974, + 12525, 12667, 8109, 19015, 16745, 17974, + 12525, 12667, 9836, + 12525, 12667, 9837, 19015, 3537, 18281, 19071, 17974, + 12525, 12667, 9837, 19015, 16745, 17974, + 12525, 12667, 10180, + 12525, 12667, 10181, 19015, 3537, 18281, 19071, 17974, + 12525, 12667, 10181, 19015, 16745, 17974, + 12525, 12667, 14596, + 12525, 12667, 14597, 19015, 3537, 18281, 19071, 17974, + 12525, 12667, 14597, 19015, 16745, 17974, + 12525, 12667, 15816, + 12525, 12667, 15817, 19015, 3537, 18281, 19071, 17974, + 12525, 12667, 15817, 19015, 16745, 17974, + 12525, 12667, 16470, + 12525, 12667, 16471, 19015, 2761, 18281, 23695, 17974, + 12525, 12667, 16471, 19015, 3537, 18281, 19071, 17974, + 12525, 12667, 16471, 19015, 3537, 18281, 23711, 17974, + 12525, 12667, 16471, 19015, 15117, 18281, 18149, 17974, + 12525, 12667, 16471, 19015, 16745, 17974, + 12525, 12667, 16471, 19015, 22459, 17974, + 12525, 12667, 17465, 8108, + 12525, 12667, 17465, 9836, + 12525, 12667, 17465, 10180, + 12525, 12667, 17465, 14596, + 12525, 12667, 17465, 15816, + 12525, 12667, 17465, 16470, + 12525, 12667, 22432, + 12525, 12667, 22433, 19015, 16745, 17974, + 12525, 12667, 23296, + 12525, 12667, 23898, + 12525, 12667, 25808, + 12525, 12935, 521, 17138, + 12525, 13470, + 12525, 13471, 10726, + 12525, 13779, 15938, + 12525, 13779, 15939, 14005, 8281, 18951, 19056, + 12525, 13779, 15939, 14005, 13839, 18951, 19056, + 12525, 13779, 15939, 14005, 14659, 18951, 19056, + 12525, 13779, 15939, 14005, 15287, 18951, 19056, + 12525, 13779, 17224, + 12525, 13839, 8281, 20858, + 12525, 13839, 14659, 20858, + 12525, 14659, 20501, 13594, + 12525, 14659, 20501, 19589, 13594, + 12525, 14659, 20859, 12614, + 12525, 14831, 14532, + 12525, 14887, 897, 22248, + 12525, 14911, 10690, + 12525, 14911, 17224, + 12525, 14911, 17988, + 12525, 14911, 18534, + 12525, 14911, 23721, 17866, + 12525, 14935, 10726, + 12525, 15208, + 12525, 15287, 8281, 20858, + 12525, 15287, 14659, 20858, + 12525, 15830, + 12525, 15901, 15453, 10690, + 12525, 15938, + 12525, 15939, 1493, 17012, + 12525, 15939, 11513, 3537, 15453, 6696, + 12525, 15939, 11513, 6701, 12414, + 12525, 15939, 11513, 15453, 1291, 14658, + 12525, 16001, 19381, 897, 21557, 12414, + 12525, 16001, 19381, 897, 22837, 12414, + 12525, 16001, 21349, 897, 21557, 12414, + 12525, 16001, 21349, 897, 22837, 12414, + 12525, 16001, 21557, 897, 19381, 12414, + 12525, 16001, 21557, 897, 21349, 12414, + 12525, 16001, 22837, 897, 19381, 12414, + 12525, 16001, 22837, 897, 21349, 12414, + 12525, 16206, + 12525, 16637, 14911, 17224, + 12525, 16637, 14911, 17988, + 12525, 16637, 14911, 18534, + 12525, 16637, 17224, + 12525, 16637, 17988, + 12525, 16637, 18534, + 12525, 16637, 23721, 20858, + 12525, 16637, 23721, 20859, 17852, + 12525, 16637, 25763, 20858, + 12525, 16637, 25763, 20859, 17852, + 12525, 16637, 25813, 20858, + 12525, 16637, 25813, 20859, 17852, + 12525, 16637, 26163, 20858, + 12525, 16637, 26163, 20859, 17852, + 12525, 17055, 20622, + 12525, 17224, + 12525, 17225, 1493, 10696, + 12525, 17225, 15862, + 12525, 17225, 17852, + 12525, 17988, + 12525, 17989, 521, 12934, + 12525, 17989, 10726, + 12525, 17989, 11513, 6701, 12414, + 12525, 17989, 14005, 15453, 46, + 12525, 17989, 17852, + 12525, 18080, + 12525, 18266, + 12525, 18534, + 12525, 18681, 6996, + 12525, 18744, + 12525, 18836, + 12525, 18946, + 12525, 19012, + 12525, 19129, 6996, + 12525, 19132, + 12525, 19361, 8281, 3755, 19308, + 12525, 19381, 23211, 21022, + 12525, 19949, 2368, + 12525, 19949, 8108, + 12525, 20038, + 12525, 20472, + 12525, 20549, 8809, 20412, + 12525, 20622, + 12525, 20671, 14911, 15938, + 12525, 20671, 14911, 17224, + 12525, 20933, 18108, + 12525, 20933, 21790, + 12525, 21349, 23211, 21022, + 12525, 21478, + 12525, 21557, 15858, + 12525, 21557, 23211, 21022, + 12525, 21790, + 12525, 22030, + 12525, 22049, 22030, + 12525, 22091, 21793, 17298, + 12525, 22495, 18108, + 12525, 22837, 12414, + 12525, 22837, 15858, + 12525, 22837, 21022, + 12525, 22837, 23211, 21022, + 12525, 23721, 14911, 20858, + 12525, 23721, 16095, 20858, + 12525, 23721, 20858, + 12525, 23721, 21515, 14659, 20858, + 12525, 25763, 14911, 20858, + 12525, 25763, 16095, 20858, + 12525, 25763, 20858, + 12525, 25763, 21515, 14659, 20858, + 12525, 25813, 14911, 20858, + 12525, 25813, 16095, 20858, + 12525, 25813, 16095, 20859, 11513, 20933, 964, + 12525, 25813, 18890, + 12525, 25813, 20858, + 12525, 25813, 21515, 14659, 20858, + 12525, 25880, + 12525, 26163, 14911, 20858, + 12525, 26163, 16095, 20858, + 12525, 26163, 16095, 20859, 11513, 20933, 964, + 12525, 26163, 18890, + 12525, 26163, 20472, + 12525, 26163, 20858, + 12525, 26163, 20859, 11513, 16095, 20933, 964, + 12525, 26163, 21515, 14659, 20858, + 12529, 17298, + 12533, 20392, + 12533, 20394, + 12533, 20396, + 12533, 20398, + 12533, 21656, + 12533, 21658, + 12533, 21660, + 12533, 21662, + 12533, 21664, + 12533, 21666, + 12533, 21668, + 12533, 21670, + 12533, 21672, + 12533, 21674, + 12533, 21676, + 12533, 21678, + 12533, 21680, + 12533, 21682, + 12533, 21684, + 12533, 21686, + 12533, 21688, + 12533, 21690, + 12533, 21692, + 12533, 21694, + 12533, 21858, + 12533, 21860, + 12533, 21862, + 12533, 21864, + 12533, 21866, + 12533, 21868, + 12533, 22612, + 12533, 22614, + 12533, 22616, + 12533, 22618, + 12533, 22620, + 12533, 22622, + 12533, 22624, + 12533, 22626, + 12533, 22628, + 12533, 22630, + 12533, 22632, + 12533, 22634, + 12533, 22636, + 12533, 22638, + 12533, 22640, + 12533, 22642, + 12533, 22644, + 12533, 22646, + 12533, 22648, + 12533, 22650, + 12533, 22652, + 12533, 22654, + 12533, 22656, + 12533, 22658, + 12533, 22660, + 12533, 22662, + 12533, 22664, + 12533, 22666, + 12533, 22668, + 12533, 22670, + 12533, 22672, + 12533, 22674, + 12533, 22676, + 12533, 22678, + 12533, 22680, + 12533, 22682, + 12533, 22684, + 12533, 22686, + 12533, 22688, + 12533, 22690, + 12533, 22692, + 12533, 22694, + 12533, 22696, + 12533, 22698, + 12533, 22700, + 12533, 22702, + 12533, 22704, + 12533, 22706, + 12533, 22708, + 12533, 22710, + 12533, 22712, + 12533, 22714, + 12533, 22716, + 12533, 22718, + 12533, 22720, + 12533, 22722, + 12533, 22858, + 12533, 22860, + 12533, 22862, + 12533, 22864, + 12533, 22866, + 12533, 22868, + 12533, 22870, + 12533, 22872, + 12533, 22874, + 12533, 22876, + 12533, 22878, + 12533, 22880, + 12533, 22882, + 12533, 22884, + 12533, 22886, + 12533, 23374, + 12533, 23376, + 12533, 23378, + 12533, 23380, + 12533, 23382, + 12533, 23384, + 12533, 23386, + 12533, 23388, + 12533, 23390, + 12533, 23392, + 12533, 23394, + 12533, 23396, + 12533, 23398, + 12533, 23400, + 12533, 23402, + 12533, 23404, + 12533, 23406, + 12533, 23408, + 12533, 23410, + 12533, 23412, + 12533, 23414, + 12533, 23416, + 12533, 23418, + 12533, 23420, + 12533, 23422, + 12533, 23424, + 12533, 23426, + 12533, 23428, + 12533, 23430, + 12533, 23432, + 12533, 23434, + 12533, 23436, + 12533, 23438, + 12533, 23440, + 12533, 23442, + 12533, 23444, + 12533, 23446, + 12533, 23448, + 12533, 23450, + 12533, 23452, + 12533, 23454, + 12533, 23456, + 12533, 23458, + 12533, 23460, + 12533, 23462, + 12533, 23464, + 12533, 23466, + 12533, 23468, + 12533, 23470, + 12533, 23472, + 12533, 23474, + 12533, 23476, + 12533, 23478, + 12533, 23480, + 12533, 23482, + 12533, 23484, + 12533, 23486, + 12533, 23488, + 12533, 23490, + 12533, 23492, + 12533, 23494, + 12533, 23496, + 12533, 23498, + 12533, 23500, + 12533, 23606, + 12533, 23608, + 12533, 23610, + 12533, 23612, + 12533, 23614, + 12533, 23618, + 12533, 23620, + 12533, 23622, + 12533, 23624, + 12533, 23626, + 12533, 23628, + 12533, 23630, + 12533, 23632, + 12533, 23636, + 12533, 23638, + 12533, 23640, + 12533, 23642, + 12533, 23644, + 12533, 23928, + 12533, 23930, + 12533, 23932, + 12533, 23934, + 12533, 23936, + 12533, 23938, + 12533, 23940, + 12533, 23942, + 12533, 23944, + 12533, 23946, + 12533, 23948, + 12533, 23950, + 12533, 23952, + 12533, 23954, + 12533, 23956, + 12533, 23958, + 12533, 23960, + 12533, 23962, + 12533, 23964, + 12533, 23966, + 12533, 23968, + 12533, 23970, + 12533, 23972, + 12533, 23974, + 12533, 23976, + 12533, 23978, + 12533, 23980, + 12533, 23982, + 12533, 23984, + 12533, 23986, + 12533, 23988, + 12533, 23990, + 12533, 23992, + 12533, 23994, + 12533, 23996, + 12533, 23998, + 12533, 24000, + 12533, 24002, + 12533, 24004, + 12533, 24006, + 12533, 24008, + 12533, 24010, + 12533, 24012, + 12533, 24014, + 12533, 24016, + 12533, 24018, + 12533, 24020, + 12533, 24022, + 12533, 24024, + 12533, 24026, + 12533, 24028, + 12533, 24030, + 12533, 24032, + 12533, 24034, + 12533, 24036, + 12533, 24038, + 12533, 24092, + 12533, 24094, + 12533, 24096, + 12533, 24098, + 12533, 24100, + 12533, 24102, + 12533, 24104, + 12533, 24106, + 12533, 24108, + 12533, 24110, + 12533, 24112, + 12533, 24114, + 12533, 24116, + 12533, 24118, + 12533, 24120, + 12533, 25832, + 12533, 25834, + 12533, 25836, + 12533, 25838, + 12533, 25840, + 12533, 25842, + 12533, 25844, + 12533, 25846, + 12533, 25848, + 12533, 25850, + 12533, 25852, + 12533, 25854, + 12533, 25856, + 12533, 25858, + 12533, 25860, + 12533, 25862, + 12533, 25864, + 12533, 25866, + 12533, 25868, + 12533, 25870, + 12533, 25872, + 12533, 25874, + 12533, 25922, + 12533, 25924, + 12533, 25926, + 12533, 25928, + 12533, 25930, + 12533, 25932, + 12533, 26138, + 12533, 26140, + 12533, 26142, + 12533, 26144, + 12533, 26146, + 12533, 26148, + 12533, 26150, + 12533, 26152, + 12540, + 12550, + 12552, + 12554, + 12556, + 12559, 11513, 11364, + 12562, + 12565, 13470, + 12577, 15407, 10575, 16, + 12577, 15407, 10575, 40, + 12577, 16531, 0, + 12577, 16531, 16, + 12577, 16531, 40, + 12577, 16531, 108, + 12577, 16531, 150, + 12577, 16531, 248, + 12577, 16531, 272, + 12577, 16531, 358, + 12577, 16531, 394, + 12577, 16531, 426, + 12577, 16531, 466, + 12577, 16531, 548, + 12577, 16531, 598, + 12577, 16531, 614, + 12577, 16531, 648, + 12577, 16531, 738, + 12577, 16531, 778, + 12577, 16531, 2574, + 12587, 323, 22896, + 12606, + 12608, + 12614, + 12615, 21507, 14558, + 12620, + 12648, + 12652, + 12657, 11513, 19381, 15200, + 12657, 11513, 19381, 15201, 897, 3921, 10574, + 12657, 11513, 21349, 15200, + 12659, 8808, + 12676, + 12703, 17087, 17298, + 12709, 6997, 2761, 16800, + 12709, 6997, 3241, 16800, + 12709, 6997, 3413, 16800, + 12709, 6997, 3537, 16800, + 12709, 6997, 7037, 16800, + 12709, 6997, 7059, 16800, + 12709, 6997, 9359, 16800, + 12709, 6997, 13151, 16800, + 12709, 6997, 14779, 16800, + 12709, 6997, 15117, 16800, + 12709, 6997, 16111, 16800, + 12709, 6997, 17473, 16800, + 12709, 6997, 22724, + 12709, 6997, 22922, + 12709, 6997, 22966, + 12709, 6997, 23006, + 12709, 6997, 23224, + 12709, 6997, 23230, + 12709, 6997, 23366, + 12709, 6997, 23834, + 12709, 6997, 24090, + 12709, 6997, 24160, + 12709, 6997, 25768, + 12709, 6997, 25962, + 12711, 698, + 12714, + 12715, 11513, 10092, + 12715, 11513, 10610, + 12715, 11513, 19300, + 12715, 11513, 21564, + 12717, 6996, + 12916, + 12917, 10574, + 12917, 16120, + 12920, + 12922, + 12924, + 12927, 897, 8256, + 12935, 507, 20254, + 12935, 507, 21520, + 12935, 8808, + 12935, 14497, 11513, 8281, 19740, + 12935, 14497, 11513, 14659, 19740, + 12935, 16950, + 12935, 16951, 11513, 23239, 12502, + 12936, + 12941, 8356, + 12941, 17811, 21382, + 12941, 18529, 528, + 12941, 18529, 896, + 12943, 897, 10144, + 13013, 17298, + 13018, + 13051, 13177, 660, + 13053, 20933, 7022, + 13053, 22495, 7022, + 13069, 2760, + 13069, 2761, 7073, 10696, + 13069, 2761, 12922, + 13069, 3240, + 13069, 3241, 7073, 10696, + 13069, 3241, 12922, + 13069, 3536, + 13069, 3537, 7073, 10696, + 13069, 3537, 12922, + 13069, 7036, + 13069, 7037, 7073, 10696, + 13069, 7037, 12922, + 13069, 7058, + 13069, 7059, 7073, 10696, + 13069, 7059, 12922, + 13069, 9358, + 13069, 9359, 7073, 10696, + 13069, 9359, 12922, + 13069, 11824, + 13069, 11825, 7073, 10696, + 13069, 11825, 12922, + 13069, 13150, + 13069, 13151, 7073, 10696, + 13069, 13151, 12922, + 13069, 14778, + 13069, 14779, 7073, 10696, + 13069, 14779, 12922, + 13069, 15116, + 13069, 15117, 7073, 10696, + 13069, 15117, 12922, + 13079, 8808, + 13081, 12349, 1393, 507, 10921, 8808, + 13081, 12349, 1545, 16172, + 13081, 12349, 10575, 14334, + 13081, 12349, 10575, 18240, + 13081, 12349, 10575, 19540, + 13081, 12349, 10575, 23070, + 13081, 12349, 13069, 2760, + 13081, 12349, 13069, 3240, + 13081, 12349, 13069, 3536, + 13081, 12349, 13069, 7036, + 13081, 12349, 13069, 7058, + 13081, 12349, 13069, 9358, + 13081, 12349, 13069, 11824, + 13081, 12349, 13069, 13150, + 13081, 12349, 13069, 14778, + 13081, 12349, 13069, 15116, + 13081, 12349, 15407, 10575, 8, + 13081, 12349, 15407, 10575, 16, + 13081, 12349, 15407, 10575, 28, + 13081, 12349, 15407, 10575, 40, + 13081, 12349, 15407, 10575, 58, + 13081, 12349, 15407, 10575, 72, + 13081, 12349, 15407, 10575, 314, + 13081, 12349, 15407, 10575, 706, + 13081, 12349, 16095, 13016, + 13081, 12349, 16531, 0, + 13081, 12349, 16531, 8, + 13081, 12349, 16531, 16, + 13081, 12349, 16531, 28, + 13081, 12349, 16531, 40, + 13081, 12349, 16531, 58, + 13081, 12349, 16531, 108, + 13081, 12349, 16531, 126, + 13081, 12349, 16531, 150, + 13081, 12349, 16531, 248, + 13081, 12349, 16531, 272, + 13081, 12349, 16531, 314, + 13081, 12349, 16531, 344, + 13081, 12349, 16531, 358, + 13081, 12349, 16531, 394, + 13081, 12349, 16531, 426, + 13081, 12349, 16531, 466, + 13081, 12349, 16531, 548, + 13081, 12349, 16531, 598, + 13081, 12349, 16531, 614, + 13081, 12349, 16531, 648, + 13081, 12349, 16531, 706, + 13081, 12349, 16531, 714, + 13081, 12349, 16531, 778, + 13081, 12349, 16531, 796, + 13081, 12349, 16531, 1000, + 13081, 12349, 16531, 1116, + 13081, 12349, 16531, 1214, + 13081, 12349, 16531, 1236, + 13081, 12349, 16531, 1588, + 13081, 12349, 16531, 2036, + 13081, 12349, 16531, 2278, + 13081, 12349, 16531, 2574, + 13081, 12349, 16531, 2624, + 13081, 12349, 16531, 2698, + 13081, 12349, 16531, 2830, + 13081, 12349, 16531, 3212, + 13081, 12349, 16531, 3286, + 13081, 12349, 16531, 3422, + 13081, 12349, 16531, 3502, + 13081, 12349, 16531, 4002, + 13081, 12349, 16531, 6572, + 13081, 12349, 16635, 598, + 13081, 12349, 16635, 778, + 13081, 12349, 17534, + 13081, 12349, 18303, 598, + 13081, 12349, 20523, 14079, 10574, + 13083, 6996, + 13083, 17298, + 13091, 10575, 14334, + 13091, 10575, 17534, + 13091, 10575, 19408, + 13091, 10575, 19540, + 13091, 15407, 10575, 8, + 13091, 15407, 10575, 16, + 13091, 15407, 10575, 28, + 13091, 15407, 10575, 40, + 13091, 15407, 10575, 58, + 13091, 15407, 10575, 72, + 13091, 15407, 10575, 96, + 13091, 15407, 10575, 314, + 13091, 15407, 10575, 706, + 13091, 15407, 10575, 19415, 34, + 13091, 15407, 10575, 19415, 608, + 13091, 16531, 0, + 13091, 16531, 8, + 13091, 16531, 16, + 13091, 16531, 28, + 13091, 16531, 40, + 13091, 16531, 58, + 13091, 16531, 72, + 13091, 16531, 96, + 13091, 16531, 108, + 13091, 16531, 126, + 13091, 16531, 150, + 13091, 16531, 248, + 13091, 16531, 272, + 13091, 16531, 314, + 13091, 16531, 344, + 13091, 16531, 358, + 13091, 16531, 394, + 13091, 16531, 426, + 13091, 16531, 466, + 13091, 16531, 548, + 13091, 16531, 598, + 13091, 16531, 614, + 13091, 16531, 648, + 13091, 16531, 706, + 13091, 16531, 714, + 13091, 16531, 778, + 13091, 16531, 1000, + 13091, 16531, 1116, + 13091, 16531, 1214, + 13091, 16531, 1236, + 13091, 16531, 1588, + 13091, 16531, 1918, + 13091, 16531, 2036, + 13091, 16531, 2574, + 13091, 16531, 2624, + 13091, 16531, 2698, + 13091, 16531, 2830, + 13091, 16531, 3118, + 13091, 16531, 3212, + 13091, 16531, 3286, + 13091, 16531, 3422, + 13091, 16531, 3502, + 13091, 16531, 6572, + 13091, 16531, 11082, + 13091, 23737, 10574, + 13102, + 13107, 10605, 10574, + 13136, + 13140, + 13141, 13395, 19532, + 13141, 13395, 25774, + 13141, 13395, 25982, + 13141, 16286, + 13151, 10101, 16384, + 13151, 10101, 18776, + 13151, 17211, 19574, + 13151, 18889, 12525, 10690, + 13151, 18889, 20489, 10690, + 13151, 18889, 23575, 12525, 10690, + 13151, 20479, 20419, 12525, 20038, + 13151, 28085, 21769, 19574, + 13153, 17298, + 13159, 20319, 23223, 17484, + 13159, 20319, 23223, 17486, + 13159, 20319, 23223, 17488, + 13159, 20319, 23223, 17490, + 13159, 20319, 23223, 20906, + 13159, 21131, 3059, 7424, + 13159, 21131, 5976, + 13159, 21131, 12941, 7424, + 13159, 21131, 15453, 7424, + 13161, 3206, + 13161, 3207, 11513, 8281, 12415, 12318, + 13161, 3207, 11513, 14659, 12415, 12318, + 13161, 3207, 11513, 14911, 15939, 12318, + 13161, 3207, 11513, 18778, + 13161, 9252, + 13161, 9442, + 13161, 9443, 2790, + 13161, 9443, 9818, + 13161, 9818, + 13161, 14470, + 13161, 19818, + 13165, 17298, + 13177, 661, 125, 22268, + 13177, 661, 529, 20520, + 13177, 661, 529, 20760, + 13177, 661, 529, 21558, + 13177, 661, 529, 23852, + 13177, 897, 20455, 660, + 13181, 661, 3425, 8280, + 13181, 661, 3425, 14658, + 13201, 19724, + 13236, + 13239, 17298, + 13248, + 13251, 16347, 14975, 897, 5978, + 13261, 14545, 13944, + 13261, 17267, 18314, + 13261, 18951, 8980, + 13261, 18951, 8981, 11513, 6996, + 13261, 18951, 8981, 17298, + 13272, + 13274, + 13287, 11513, 83, 46, + 13287, 11513, 15142, + 13287, 11513, 18868, + 13291, 17154, + 13298, + 13339, 9905, 10574, + 13339, 13069, 2760, + 13339, 13069, 3240, + 13339, 13069, 3536, + 13339, 13069, 7036, + 13339, 13069, 7058, + 13339, 13069, 9358, + 13339, 13069, 11824, + 13339, 13069, 13150, + 13339, 13069, 14778, + 13339, 13069, 15116, + 13339, 14005, 10574, + 13339, 14911, 16531, 0, + 13339, 14911, 16531, 108, + 13339, 14911, 16531, 126, + 13339, 14911, 16531, 150, + 13339, 14911, 16531, 228, + 13339, 14911, 16531, 248, + 13339, 14911, 16531, 272, + 13339, 14911, 16531, 344, + 13339, 14911, 16531, 358, + 13339, 14911, 16531, 394, + 13339, 14911, 16531, 426, + 13339, 14911, 16531, 466, + 13339, 14911, 16531, 548, + 13339, 14911, 16531, 598, + 13339, 14911, 16531, 614, + 13339, 14911, 16531, 648, + 13339, 14911, 16531, 738, + 13339, 14911, 16531, 762, + 13339, 14911, 16531, 778, + 13339, 14911, 16531, 2698, + 13339, 14911, 16531, 2757, 358, + 13339, 14911, 16531, 2757, 466, + 13339, 15000, + 13339, 15407, 10575, 0, + 13339, 15407, 10575, 8, + 13339, 15407, 10575, 16, + 13339, 15407, 10575, 28, + 13339, 15407, 10575, 186, + 13339, 15407, 16525, 8808, + 13339, 16358, + 13339, 17835, 16531, 0, + 13339, 17835, 16531, 108, + 13339, 17835, 16531, 126, + 13339, 17835, 16531, 150, + 13339, 17835, 16531, 228, + 13339, 17835, 16531, 248, + 13339, 17835, 16531, 272, + 13339, 17835, 16531, 344, + 13339, 17835, 16531, 358, + 13339, 17835, 16531, 394, + 13339, 17835, 16531, 426, + 13339, 17835, 16531, 466, + 13339, 17835, 16531, 548, + 13339, 17835, 16531, 598, + 13339, 17835, 16531, 614, + 13339, 17835, 16531, 648, + 13339, 17835, 16531, 738, + 13339, 17835, 16531, 762, + 13339, 17835, 16531, 778, + 13339, 17835, 16531, 2698, + 13339, 17835, 16531, 2757, 358, + 13339, 17835, 16531, 2757, 466, + 13339, 21127, 1291, 12318, + 13339, 21127, 16095, 1291, 12318, + 13339, 21143, 22465, 8808, + 13339, 21143, 23919, 8808, + 13339, 25909, 8808, + 13348, + 13380, + 13385, 17298, + 13389, 17298, + 13393, 507, 8946, + 13395, 11513, 21584, + 13404, + 13417, 15678, + 13421, 563, 17298, + 13421, 905, 17340, + 13421, 1993, 17298, + 13421, 2761, 7429, 10574, + 13421, 2761, 7429, 10575, 21003, 7056, + 13421, 2761, 18951, 10574, + 13421, 2835, 17298, + 13421, 3077, 11513, 17265, 17298, + 13421, 3077, 17298, + 13421, 3537, 14417, 10574, + 13421, 3537, 17371, 10574, + 13421, 6065, 17298, + 13421, 7037, 14417, 10574, + 13421, 7059, 14417, 10574, + 13421, 9761, 10574, + 13421, 9788, + 13421, 11673, 10574, + 13421, 11825, 10574, + 13421, 13026, + 13421, 13027, 897, 9788, + 13421, 13027, 897, 15378, + 13421, 13027, 897, 23530, + 13421, 13653, 17298, + 13421, 13819, 10574, + 13421, 13839, 18727, 10574, + 13421, 14578, + 13421, 14579, 897, 9788, + 13421, 14579, 897, 15378, + 13421, 14579, 897, 23530, + 13421, 14911, 16093, 16579, 14869, 17298, + 13421, 14911, 16531, 454, + 13421, 14911, 16531, 490, + 13421, 14911, 16531, 562, + 13421, 14911, 16531, 768, + 13421, 14911, 16531, 1120, + 13421, 14911, 16531, 1420, + 13421, 14911, 16531, 1421, 11513, 9788, + 13421, 14911, 16531, 1421, 11513, 9789, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 13026, + 13421, 14911, 16531, 1421, 11513, 13027, 897, 9788, + 13421, 14911, 16531, 1421, 11513, 13027, 897, 9789, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 13027, 897, 15378, + 13421, 14911, 16531, 1421, 11513, 13027, 897, 15379, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 13027, 897, 23530, + 13421, 14911, 16531, 1421, 11513, 13027, 897, 23531, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 13027, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 14578, + 13421, 14911, 16531, 1421, 11513, 14579, 897, 9788, + 13421, 14911, 16531, 1421, 11513, 14579, 897, 9789, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 14579, 897, 15378, + 13421, 14911, 16531, 1421, 11513, 14579, 897, 15379, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 14579, 897, 23530, + 13421, 14911, 16531, 1421, 11513, 14579, 897, 23531, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 14579, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 15176, + 13421, 14911, 16531, 1421, 11513, 15378, + 13421, 14911, 16531, 1421, 11513, 15379, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 23530, + 13421, 14911, 16531, 1421, 11513, 23531, 897, 25974, + 13421, 14911, 16531, 1421, 11513, 25974, + 13421, 14911, 16531, 2834, + 13421, 14911, 16531, 2882, + 13421, 14911, 16531, 3076, + 13421, 14911, 16531, 3077, 11513, 13026, + 13421, 14911, 16531, 3077, 11513, 14578, + 13421, 14911, 16531, 3184, + 13421, 14911, 16531, 3218, + 13421, 14911, 16531, 3394, + 13421, 14911, 16531, 6064, + 13421, 14911, 16531, 7476, + 13421, 14911, 16531, 7818, + 13421, 14911, 16531, 7819, 11513, 9788, + 13421, 14911, 16531, 7819, 11513, 13026, + 13421, 14911, 16531, 7819, 11513, 13027, 897, 9788, + 13421, 14911, 16531, 7819, 11513, 13027, 897, 15378, + 13421, 14911, 16531, 7819, 11513, 13027, 897, 23530, + 13421, 14911, 16531, 7819, 11513, 14578, + 13421, 14911, 16531, 7819, 11513, 14579, 897, 9788, + 13421, 14911, 16531, 7819, 11513, 14579, 897, 15378, + 13421, 14911, 16531, 7819, 11513, 14579, 897, 23530, + 13421, 14911, 16531, 7819, 11513, 15176, + 13421, 14911, 16531, 7819, 11513, 15378, + 13421, 14911, 16531, 7819, 11513, 16586, + 13421, 14911, 16531, 7819, 11513, 17544, + 13421, 14911, 16531, 7819, 11513, 21194, + 13421, 14911, 16531, 7819, 11513, 21195, 897, 9788, + 13421, 14911, 16531, 7819, 11513, 21195, 897, 15176, + 13421, 14911, 16531, 7819, 11513, 21195, 897, 15378, + 13421, 14911, 16531, 7819, 11513, 21195, 897, 23530, + 13421, 14911, 16531, 7819, 11513, 23530, + 13421, 14911, 16531, 11826, + 13421, 14911, 16531, 12366, + 13421, 14911, 16531, 12367, 11513, 9788, + 13421, 14911, 16531, 12367, 11513, 9789, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 13026, + 13421, 14911, 16531, 12367, 11513, 13027, 897, 9788, + 13421, 14911, 16531, 12367, 11513, 13027, 897, 9789, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 13027, 897, 15378, + 13421, 14911, 16531, 12367, 11513, 13027, 897, 15379, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 13027, 897, 23530, + 13421, 14911, 16531, 12367, 11513, 13027, 897, 23531, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 13027, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 14578, + 13421, 14911, 16531, 12367, 11513, 14579, 897, 9788, + 13421, 14911, 16531, 12367, 11513, 14579, 897, 9789, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 14579, 897, 15378, + 13421, 14911, 16531, 12367, 11513, 14579, 897, 15379, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 14579, 897, 23530, + 13421, 14911, 16531, 12367, 11513, 14579, 897, 23531, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 14579, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 15176, + 13421, 14911, 16531, 12367, 11513, 15378, + 13421, 14911, 16531, 12367, 11513, 15379, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 16586, + 13421, 14911, 16531, 12367, 11513, 17544, + 13421, 14911, 16531, 12367, 11513, 23530, + 13421, 14911, 16531, 12367, 11513, 23531, 897, 25974, + 13421, 14911, 16531, 12367, 11513, 25974, + 13421, 14911, 16531, 13050, + 13421, 14911, 16531, 13259, 14868, + 13421, 14911, 16531, 13332, + 13421, 14911, 16531, 13652, + 13421, 14911, 16531, 13728, + 13421, 14911, 16531, 13770, + 13421, 14911, 16531, 14428, + 13421, 14911, 16531, 14429, 11513, 9788, + 13421, 14911, 16531, 14429, 11513, 9789, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 13026, + 13421, 14911, 16531, 14429, 11513, 13027, 897, 9788, + 13421, 14911, 16531, 14429, 11513, 13027, 897, 9789, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 13027, 897, 15378, + 13421, 14911, 16531, 14429, 11513, 13027, 897, 15379, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 13027, 897, 23530, + 13421, 14911, 16531, 14429, 11513, 13027, 897, 23531, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 13027, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 14578, + 13421, 14911, 16531, 14429, 11513, 14579, 897, 9788, + 13421, 14911, 16531, 14429, 11513, 14579, 897, 9789, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 14579, 897, 15378, + 13421, 14911, 16531, 14429, 11513, 14579, 897, 15379, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 14579, 897, 23530, + 13421, 14911, 16531, 14429, 11513, 14579, 897, 23531, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 14579, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 15176, + 13421, 14911, 16531, 14429, 11513, 15378, + 13421, 14911, 16531, 14429, 11513, 15379, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 23530, + 13421, 14911, 16531, 14429, 11513, 23531, 897, 25974, + 13421, 14911, 16531, 14429, 11513, 25974, + 13421, 14911, 16531, 14742, + 13421, 14911, 16531, 14868, + 13421, 14911, 16531, 15096, + 13421, 14911, 16531, 17248, + 13421, 14911, 16531, 17709, 13728, + 13421, 14911, 16531, 17709, 14742, + 13421, 14911, 16531, 17992, + 13421, 14911, 16531, 18120, + 13421, 14911, 16531, 18121, 11513, 9788, + 13421, 14911, 16531, 18121, 11513, 13026, + 13421, 14911, 16531, 18121, 11513, 13027, 897, 9788, + 13421, 14911, 16531, 18121, 11513, 13027, 897, 15378, + 13421, 14911, 16531, 18121, 11513, 14578, + 13421, 14911, 16531, 18121, 11513, 14579, 897, 9788, + 13421, 14911, 16531, 18121, 11513, 14579, 897, 15378, + 13421, 14911, 16531, 18121, 11513, 15176, + 13421, 14911, 16531, 18121, 11513, 15378, + 13421, 14911, 16531, 18754, + 13421, 14911, 16531, 18755, 11513, 9788, + 13421, 14911, 16531, 18755, 11513, 13026, + 13421, 14911, 16531, 18755, 11513, 13027, 897, 9788, + 13421, 14911, 16531, 18755, 11513, 13027, 897, 15378, + 13421, 14911, 16531, 18755, 11513, 14578, + 13421, 14911, 16531, 18755, 11513, 14579, 897, 9788, + 13421, 14911, 16531, 18755, 11513, 14579, 897, 15378, + 13421, 14911, 16531, 18755, 11513, 15176, + 13421, 14911, 16531, 18755, 11513, 15378, + 13421, 14911, 16531, 19378, + 13421, 14911, 16531, 19379, 11513, 9788, + 13421, 14911, 16531, 19379, 11513, 13026, + 13421, 14911, 16531, 19379, 11513, 13027, 897, 9788, + 13421, 14911, 16531, 19379, 11513, 13027, 897, 15378, + 13421, 14911, 16531, 19379, 11513, 13027, 897, 23530, + 13421, 14911, 16531, 19379, 11513, 14578, + 13421, 14911, 16531, 19379, 11513, 14579, 897, 9788, + 13421, 14911, 16531, 19379, 11513, 14579, 897, 15378, + 13421, 14911, 16531, 19379, 11513, 14579, 897, 23530, + 13421, 14911, 16531, 19379, 11513, 15176, + 13421, 14911, 16531, 19379, 11513, 15378, + 13421, 14911, 16531, 19379, 11513, 16586, + 13421, 14911, 16531, 19379, 11513, 17544, + 13421, 14911, 16531, 19379, 11513, 21194, + 13421, 14911, 16531, 19379, 11513, 21195, 897, 9788, + 13421, 14911, 16531, 19379, 11513, 21195, 897, 15176, + 13421, 14911, 16531, 19379, 11513, 21195, 897, 15378, + 13421, 14911, 16531, 19379, 11513, 21195, 897, 23530, + 13421, 14911, 16531, 19379, 11513, 23530, + 13421, 14911, 16531, 22739, 17992, + 13421, 14911, 20587, 16093, 16579, 14869, 17298, + 13421, 14911, 20587, 16579, 14869, 17298, + 13421, 15097, 17298, + 13421, 15117, 14417, 10574, + 13421, 15117, 20547, 10574, + 13421, 15176, + 13421, 15378, + 13421, 15405, 20377, 20778, + 13421, 15405, 20377, 20780, + 13421, 15405, 20377, 20782, + 13421, 15405, 20377, 20784, + 13421, 15405, 20377, 20786, + 13421, 15405, 20377, 20788, + 13421, 15405, 20377, 20790, + 13421, 15405, 20377, 20792, + 13421, 15405, 20377, 20794, + 13421, 15405, 20377, 21940, + 13421, 15405, 20377, 21942, + 13421, 15405, 20377, 21944, + 13421, 15405, 20377, 21946, + 13421, 15405, 20377, 21948, + 13421, 15405, 20377, 21950, + 13421, 15405, 20377, 21952, + 13421, 15405, 20377, 21954, + 13421, 15405, 20377, 21956, + 13421, 15405, 20377, 21958, + 13421, 15405, 20377, 21960, + 13421, 15405, 20377, 21962, + 13421, 15405, 20377, 21964, + 13421, 15405, 20377, 21966, + 13421, 15405, 20377, 21968, + 13421, 15405, 20377, 22004, + 13421, 15405, 20377, 22006, + 13421, 15405, 20377, 22008, + 13421, 15405, 20377, 22010, + 13421, 15405, 20377, 22012, + 13421, 15735, 10574, + 13421, 15743, 10574, + 13421, 16281, 10574, + 13421, 16531, 3960, + 13421, 16531, 13728, + 13421, 16531, 14742, + 13421, 16531, 14911, 17835, 562, + 13421, 16531, 14911, 17835, 2882, + 13421, 16531, 14911, 17835, 3076, + 13421, 16531, 14911, 17835, 13332, + 13421, 16531, 14911, 17835, 13770, + 13421, 16531, 14911, 17835, 14428, + 13421, 16531, 17248, + 13421, 16531, 17709, 13728, + 13421, 16531, 17992, + 13421, 16579, 14869, 17298, + 13421, 16579, 18121, 17298, + 13421, 16835, 10574, + 13421, 17299, 3395, 3076, + 13421, 17313, 10574, + 13421, 17593, 10574, + 13421, 17835, 1993, 17298, + 13421, 17835, 15097, 17298, + 13421, 17835, 16093, 16579, 14869, 17298, + 13421, 17835, 16531, 454, + 13421, 17835, 16531, 490, + 13421, 17835, 16531, 562, + 13421, 17835, 16531, 768, + 13421, 17835, 16531, 1120, + 13421, 17835, 16531, 1420, + 13421, 17835, 16531, 1421, 11513, 9788, + 13421, 17835, 16531, 1421, 11513, 13026, + 13421, 17835, 16531, 1421, 11513, 13027, 897, 9788, + 13421, 17835, 16531, 1421, 11513, 13027, 897, 9789, 897, 26156, + 13421, 17835, 16531, 1421, 11513, 13027, 897, 15378, + 13421, 17835, 16531, 1421, 11513, 13027, 897, 15379, 897, 26156, + 13421, 17835, 16531, 1421, 11513, 13027, 897, 23530, + 13421, 17835, 16531, 1421, 11513, 13027, 897, 23531, 897, 26156, + 13421, 17835, 16531, 1421, 11513, 13027, 897, 26156, + 13421, 17835, 16531, 1421, 11513, 14578, + 13421, 17835, 16531, 1421, 11513, 14579, 897, 9788, + 13421, 17835, 16531, 1421, 11513, 14579, 897, 9789, 897, 26156, + 13421, 17835, 16531, 1421, 11513, 14579, 897, 15378, + 13421, 17835, 16531, 1421, 11513, 14579, 897, 15379, 897, 26156, + 13421, 17835, 16531, 1421, 11513, 14579, 897, 23530, + 13421, 17835, 16531, 1421, 11513, 14579, 897, 23531, 897, 26156, + 13421, 17835, 16531, 1421, 11513, 14579, 897, 26156, + 13421, 17835, 16531, 1421, 11513, 15176, + 13421, 17835, 16531, 1421, 11513, 15378, + 13421, 17835, 16531, 1421, 11513, 26156, + 13421, 17835, 16531, 2834, + 13421, 17835, 16531, 2882, + 13421, 17835, 16531, 3076, + 13421, 17835, 16531, 3077, 11513, 13026, + 13421, 17835, 16531, 3184, + 13421, 17835, 16531, 3218, + 13421, 17835, 16531, 3394, + 13421, 17835, 16531, 3960, + 13421, 17835, 16531, 6064, + 13421, 17835, 16531, 7476, + 13421, 17835, 16531, 7818, + 13421, 17835, 16531, 7819, 11513, 9788, + 13421, 17835, 16531, 7819, 11513, 13026, + 13421, 17835, 16531, 7819, 11513, 13027, 897, 9788, + 13421, 17835, 16531, 7819, 11513, 13027, 897, 15378, + 13421, 17835, 16531, 7819, 11513, 13027, 897, 23530, + 13421, 17835, 16531, 7819, 11513, 14578, + 13421, 17835, 16531, 7819, 11513, 14579, 897, 9788, + 13421, 17835, 16531, 7819, 11513, 14579, 897, 15378, + 13421, 17835, 16531, 7819, 11513, 14579, 897, 23530, + 13421, 17835, 16531, 7819, 11513, 15176, + 13421, 17835, 16531, 7819, 11513, 15378, + 13421, 17835, 16531, 7819, 11513, 16586, + 13421, 17835, 16531, 7819, 11513, 17544, + 13421, 17835, 16531, 7819, 11513, 21194, + 13421, 17835, 16531, 11826, + 13421, 17835, 16531, 12366, + 13421, 17835, 16531, 12367, 11513, 9788, + 13421, 17835, 16531, 12367, 11513, 13026, + 13421, 17835, 16531, 12367, 11513, 13027, 897, 9788, + 13421, 17835, 16531, 12367, 11513, 13027, 897, 9789, 897, 26156, + 13421, 17835, 16531, 12367, 11513, 13027, 897, 15378, + 13421, 17835, 16531, 12367, 11513, 13027, 897, 15379, 897, 26156, + 13421, 17835, 16531, 12367, 11513, 13027, 897, 23530, + 13421, 17835, 16531, 12367, 11513, 13027, 897, 23531, 897, 26156, + 13421, 17835, 16531, 12367, 11513, 13027, 897, 26156, + 13421, 17835, 16531, 12367, 11513, 14578, + 13421, 17835, 16531, 12367, 11513, 14579, 897, 9788, + 13421, 17835, 16531, 12367, 11513, 14579, 897, 9789, 897, 26156, + 13421, 17835, 16531, 12367, 11513, 14579, 897, 15378, + 13421, 17835, 16531, 12367, 11513, 14579, 897, 15379, 897, 26156, + 13421, 17835, 16531, 12367, 11513, 14579, 897, 23530, + 13421, 17835, 16531, 12367, 11513, 14579, 897, 23531, 897, 26156, + 13421, 17835, 16531, 12367, 11513, 14579, 897, 26156, + 13421, 17835, 16531, 12367, 11513, 15176, + 13421, 17835, 16531, 12367, 11513, 15378, + 13421, 17835, 16531, 12367, 11513, 16586, + 13421, 17835, 16531, 12367, 11513, 17544, + 13421, 17835, 16531, 12367, 11513, 26156, + 13421, 17835, 16531, 13050, + 13421, 17835, 16531, 13332, + 13421, 17835, 16531, 13652, + 13421, 17835, 16531, 13770, + 13421, 17835, 16531, 14428, + 13421, 17835, 16531, 14429, 11513, 9788, + 13421, 17835, 16531, 14429, 11513, 13026, + 13421, 17835, 16531, 14429, 11513, 13027, 897, 9788, + 13421, 17835, 16531, 14429, 11513, 13027, 897, 9789, 897, 26156, + 13421, 17835, 16531, 14429, 11513, 13027, 897, 15378, + 13421, 17835, 16531, 14429, 11513, 13027, 897, 15379, 897, 26156, + 13421, 17835, 16531, 14429, 11513, 13027, 897, 23530, + 13421, 17835, 16531, 14429, 11513, 13027, 897, 23531, 897, 26156, + 13421, 17835, 16531, 14429, 11513, 13027, 897, 26156, + 13421, 17835, 16531, 14429, 11513, 14578, + 13421, 17835, 16531, 14429, 11513, 14579, 897, 9788, + 13421, 17835, 16531, 14429, 11513, 14579, 897, 9789, 897, 26156, + 13421, 17835, 16531, 14429, 11513, 14579, 897, 15378, + 13421, 17835, 16531, 14429, 11513, 14579, 897, 15379, 897, 26156, + 13421, 17835, 16531, 14429, 11513, 14579, 897, 23530, + 13421, 17835, 16531, 14429, 11513, 14579, 897, 23531, 897, 26156, + 13421, 17835, 16531, 14429, 11513, 14579, 897, 26156, + 13421, 17835, 16531, 14429, 11513, 15176, + 13421, 17835, 16531, 14429, 11513, 15378, + 13421, 17835, 16531, 14429, 11513, 26156, + 13421, 17835, 16531, 14868, + 13421, 17835, 16531, 15096, + 13421, 17835, 16531, 17709, 14742, + 13421, 17835, 16531, 18120, + 13421, 17835, 16531, 18121, 11513, 9788, + 13421, 17835, 16531, 18121, 11513, 13026, + 13421, 17835, 16531, 18121, 11513, 13027, 897, 9788, + 13421, 17835, 16531, 18121, 11513, 13027, 897, 15378, + 13421, 17835, 16531, 18121, 11513, 14578, + 13421, 17835, 16531, 18121, 11513, 14579, 897, 9788, + 13421, 17835, 16531, 18121, 11513, 14579, 897, 15378, + 13421, 17835, 16531, 18121, 11513, 15176, + 13421, 17835, 16531, 18121, 11513, 15378, + 13421, 17835, 16531, 18754, + 13421, 17835, 16531, 18755, 11513, 9788, + 13421, 17835, 16531, 18755, 11513, 13026, + 13421, 17835, 16531, 18755, 11513, 13027, 897, 9788, + 13421, 17835, 16531, 18755, 11513, 13027, 897, 15378, + 13421, 17835, 16531, 18755, 11513, 14578, + 13421, 17835, 16531, 18755, 11513, 14579, 897, 9788, + 13421, 17835, 16531, 18755, 11513, 14579, 897, 15378, + 13421, 17835, 16531, 18755, 11513, 15176, + 13421, 17835, 16531, 18755, 11513, 15378, + 13421, 17835, 16531, 19378, + 13421, 17835, 16531, 19379, 11513, 9788, + 13421, 17835, 16531, 19379, 11513, 13026, + 13421, 17835, 16531, 19379, 11513, 13027, 897, 9788, + 13421, 17835, 16531, 19379, 11513, 13027, 897, 15378, + 13421, 17835, 16531, 19379, 11513, 13027, 897, 23530, + 13421, 17835, 16531, 19379, 11513, 15176, + 13421, 17835, 16531, 19379, 11513, 15378, + 13421, 17835, 16531, 19379, 11513, 16586, + 13421, 17835, 16531, 19379, 11513, 17544, + 13421, 17835, 16531, 19379, 11513, 21194, + 13421, 17835, 16531, 22739, 17992, + 13421, 17835, 16579, 14869, 17298, + 13421, 17835, 20587, 16093, 16579, 14869, 17298, + 13421, 17835, 20587, 16579, 14869, 17298, + 13421, 18079, 10574, + 13421, 18382, + 13421, 18395, 5993, 10574, + 13421, 18655, 16522, + 13421, 18727, 10574, + 13421, 19379, 11513, 7659, 17298, + 13421, 19379, 11513, 12321, 897, 7659, 17298, + 13421, 19379, 11513, 21189, 897, 7659, 17298, + 13421, 20305, 10574, + 13421, 20549, 8808, + 13421, 20587, 16579, 18121, 17298, + 13421, 20663, 10574, + 13421, 20893, 5993, 10574, + 13421, 21195, 897, 9788, + 13421, 21195, 897, 15378, + 13421, 21195, 897, 23530, + 13421, 21195, 15176, + 13421, 21501, 10574, + 13421, 21927, 14911, 16531, 1120, + 13421, 21927, 14911, 16531, 2834, + 13421, 21927, 14911, 16531, 3076, + 13421, 21927, 14911, 16531, 6064, + 13421, 21927, 14911, 16531, 13332, + 13421, 22145, 12431, 2761, 7428, + 13421, 22145, 12431, 2761, 18078, + 13421, 22145, 12431, 2761, 18281, 19178, + 13421, 22145, 12431, 2761, 18281, 19250, + 13421, 22145, 12431, 2761, 18950, + 13421, 22145, 12431, 2761, 20829, 19178, + 13421, 22145, 12431, 2761, 20829, 19250, + 13421, 22145, 12431, 3413, 8958, + 13421, 22145, 12431, 3413, 19178, + 13421, 22145, 12431, 3413, 19250, + 13421, 22145, 12431, 3413, 20829, 19178, + 13421, 22145, 12431, 7036, + 13421, 22145, 12431, 7037, 18280, + 13421, 22145, 12431, 7037, 18281, 19178, + 13421, 22145, 12431, 7037, 18281, 19250, + 13421, 22145, 12431, 7037, 19178, + 13421, 22145, 12431, 7037, 19250, + 13421, 22145, 12431, 7037, 20828, + 13421, 22145, 12431, 7037, 20829, 19250, + 13421, 22145, 12431, 13254, + 13421, 22145, 12431, 13255, 19178, + 13421, 22145, 12431, 13255, 19250, + 13421, 22145, 12431, 13255, 20828, + 13421, 22145, 12431, 13255, 20829, 19178, + 13421, 22145, 16707, 7037, 18280, + 13421, 22145, 17977, 7037, 8958, + 13421, 22145, 18265, 2761, 20496, + 13421, 22145, 19757, 3537, 19944, + 13421, 22145, 20733, 13255, 8958, + 13421, 22145, 20821, 2760, + 13421, 22145, 20821, 2761, 18280, + 13421, 22145, 20821, 2761, 20828, + 13421, 22145, 20821, 3412, + 13421, 22145, 20821, 3536, + 13421, 22145, 20821, 7037, 18280, + 13421, 22145, 20821, 7037, 20828, + 13421, 22145, 20821, 13254, + 13421, 22145, 20821, 15117, 18280, + 13421, 22145, 20821, 17372, + 13421, 22145, 21095, 7037, 18280, + 13421, 22145, 21589, 3412, + 13421, 22145, 22429, 3536, + 13421, 22145, 22429, 3537, 19944, + 13421, 22145, 22429, 7037, 18280, + 13421, 22145, 22485, 2760, + 13421, 22145, 22485, 3412, + 13421, 22145, 22485, 13254, + 13421, 22145, 22989, 3412, + 13421, 22145, 22989, 3413, 21003, 7056, + 13421, 22145, 22989, 7036, + 13421, 22145, 22989, 7037, 18280, + 13421, 22145, 22989, 13254, + 13421, 22145, 22989, 13255, 21003, 7056, + 13421, 23530, + 13421, 23879, 20377, 20778, + 13421, 23879, 20377, 20780, + 13421, 23879, 20377, 20784, + 13421, 23879, 20377, 20786, + 13421, 23879, 20377, 20790, + 13421, 23879, 20377, 20792, + 13421, 23879, 20377, 21942, + 13421, 23879, 20377, 21944, + 13421, 23879, 20377, 21946, + 13421, 23879, 20377, 21948, + 13421, 23879, 20377, 21954, + 13421, 23879, 20377, 21956, + 13421, 23879, 20377, 21958, + 13421, 23879, 20377, 21966, + 13421, 23879, 20377, 21968, + 13421, 23879, 20377, 21970, + 13421, 23879, 20377, 21972, + 13421, 23879, 20377, 21974, + 13421, 23879, 20377, 21976, + 13421, 23879, 20377, 21978, + 13421, 23879, 20377, 21980, + 13421, 23879, 20377, 21982, + 13421, 23879, 20377, 21984, + 13421, 23879, 20377, 21986, + 13421, 23879, 20377, 21988, + 13421, 23879, 20377, 21990, + 13421, 23879, 20377, 21992, + 13421, 23879, 20377, 21994, + 13421, 23879, 20377, 21996, + 13421, 23879, 20377, 21998, + 13421, 23879, 20377, 22000, + 13421, 23879, 20377, 22002, + 13421, 23879, 20377, 22004, + 13421, 23879, 20377, 22006, + 13421, 23879, 20377, 22008, + 13421, 23879, 20377, 22010, + 13421, 23879, 20377, 22012, + 13421, 25974, + 13421, 26156, + 13423, 6108, + 13423, 12398, + 13423, 13470, + 13423, 14732, + 13425, 8808, + 13429, 1280, + 13444, + 13452, + 13461, 16891, 18967, 2761, 7432, + 13471, 11513, 3445, 521, 3425, 8280, + 13471, 11513, 12414, + 13471, 11513, 17026, + 13471, 13458, + 13471, 22264, + 13473, 2301, 16095, 12923, 21779, 8809, 20412, + 13473, 2301, 17171, 12923, 21779, 8809, 20412, + 13473, 3241, 17211, 19574, + 13473, 3241, 18889, 12525, 10690, + 13473, 7037, 17211, 19574, + 13473, 7037, 18889, 12525, 10690, + 13473, 7059, 25987, 19574, + 13473, 9783, 15901, 12934, + 13473, 9785, 11513, 9785, 16382, + 13473, 9905, 10574, + 13473, 12415, 14785, 15459, 2760, + 13473, 12415, 14785, 15459, 2761, 7428, + 13473, 12415, 14785, 15459, 2761, 15108, + 13473, 12415, 14785, 15459, 3537, 17370, + 13473, 12525, 13470, + 13473, 12525, 16001, 19381, 897, 22837, 12414, + 13473, 12525, 16001, 21349, 897, 22837, 12414, + 13473, 12659, 8808, + 13473, 13151, 17211, 19574, + 13473, 13151, 18889, 12525, 10690, + 13473, 13151, 18889, 20489, 10690, + 13473, 13151, 18889, 23575, 12525, 10690, + 13473, 13151, 28085, 21769, 19574, + 13473, 13421, 12934, + 13473, 13471, 23213, 8809, 20412, + 13473, 13779, 15938, + 13473, 13783, 12934, + 13473, 13839, 26165, 15453, 22837, 12414, + 13473, 14005, 10574, + 13473, 14255, 6833, 12414, + 13473, 14255, 6833, 20501, 1044, + 13473, 14255, 6833, 20501, 11391, 8276, + 13473, 14255, 11489, 20501, 1044, + 13473, 14255, 11489, 20501, 11391, 8276, + 13473, 14931, 6833, 12414, + 13473, 14931, 6833, 20501, 1044, + 13473, 14931, 6833, 20501, 11391, 8276, + 13473, 14931, 11489, 20501, 1044, + 13473, 14931, 11489, 20501, 11391, 8276, + 13473, 15287, 26165, 15453, 22837, 12414, + 13473, 15453, 15938, + 13473, 15453, 17224, + 13473, 15453, 17225, 22239, 12525, 11371, 14911, 17224, + 13473, 15453, 25763, 20858, + 13473, 15773, 46, + 13473, 15938, + 13473, 15939, 11513, 15939, 16382, + 13473, 15939, 11513, 17265, 897, 3537, 6697, 12318, + 13473, 16019, 28089, 22837, 12414, + 13473, 16067, 10574, + 13473, 16095, 12923, 21779, 8809, 20412, + 13473, 16095, 17465, 12923, 21779, 8809, 20412, + 13473, 16121, 10574, + 13473, 17089, 20241, 217, 20412, + 13473, 17171, 12923, 21779, 8809, 20412, + 13473, 17171, 17465, 12923, 21779, 8809, 20412, + 13473, 17473, 18889, 12525, 10690, + 13473, 17473, 18889, 20489, 10690, + 13473, 17867, 21886, + 13473, 17881, 19032, + 13473, 19032, + 13473, 19148, + 13473, 19381, 12415, 11513, 13779, 23211, 21022, + 13473, 19381, 12415, 11513, 23211, 21022, + 13473, 19574, + 13473, 19817, 10574, + 13473, 20241, 9783, 217, 20412, + 13473, 20419, 12525, 10690, + 13473, 20933, 964, + 13473, 21007, 20412, + 13473, 21349, 12415, 11513, 13779, 23211, 21022, + 13473, 21349, 12415, 11513, 23211, 21022, + 13473, 21557, 12415, 11513, 13779, 23211, 21022, + 13473, 21557, 12415, 11513, 23211, 21022, + 13473, 22495, 7022, + 13473, 22837, 12414, + 13473, 22837, 12415, 11513, 13779, 23211, 21022, + 13473, 22837, 12415, 11513, 23211, 21022, + 13473, 22841, 23285, 20412, + 13473, 23213, 8809, 17298, + 13473, 23213, 8809, 20412, + 13473, 23285, 20412, + 13473, 23733, 22837, 12414, + 13473, 24083, 22837, 12414, + 13473, 24183, 22837, 12414, + 13473, 25813, 12379, 17811, 20412, + 13473, 25813, 12379, 21779, 8809, 20412, + 13473, 26135, 46, + 13473, 26163, 12379, 17811, 20412, + 13473, 26163, 12379, 21779, 8809, 20412, + 13473, 26301, 14255, 6833, 12414, + 13473, 26301, 14931, 6833, 12414, + 13473, 26301, 22837, 12414, + 13473, 28045, 12525, 22837, 12414, + 13473, 28085, 19574, + 13473, 28085, 20489, 19574, + 13473, 28089, 22837, 12414, + 13473, 36225, 22837, 12414, + 13487, 17348, + 13526, + 13531, 2868, + 13536, + 13537, 6996, + 13537, 17004, + 13538, + 13540, + 13541, 11513, 16234, + 13541, 19642, + 13541, 21076, + 13589, 506, + 13589, 507, 529, 24195, 13177, 660, + 13593, 11044, + 13595, 20501, 95, 3425, 17530, + 13597, 14879, 8251, 8808, + 13597, 14879, 14699, 8808, + 13597, 14879, 16787, 2760, + 13597, 14879, 16787, 2761, 18280, + 13597, 14879, 16787, 2761, 20828, + 13597, 14879, 16787, 3240, + 13597, 14879, 16787, 3241, 18280, + 13597, 14879, 16787, 3241, 20828, + 13597, 14879, 16787, 3412, + 13597, 14879, 16787, 3413, 20828, + 13597, 14879, 16787, 3536, + 13597, 14879, 16787, 3537, 18280, + 13597, 14879, 16787, 3537, 20828, + 13597, 14879, 16787, 7036, + 13597, 14879, 16787, 7037, 18280, + 13597, 14879, 16787, 7037, 20828, + 13597, 14879, 16787, 7058, + 13597, 14879, 16787, 7059, 18280, + 13597, 14879, 16787, 7059, 20828, + 13597, 14879, 16787, 8250, + 13597, 14879, 16787, 9358, + 13597, 14879, 16787, 9359, 18280, + 13597, 14879, 16787, 9359, 20828, + 13597, 14879, 16787, 13150, + 13597, 14879, 16787, 13151, 18280, + 13597, 14879, 16787, 13151, 20828, + 13597, 14879, 16787, 13254, + 13597, 14879, 16787, 13255, 20828, + 13597, 14879, 16787, 13284, + 13597, 14879, 16787, 13285, 20828, + 13597, 14879, 16787, 13658, + 13597, 14879, 16787, 14778, + 13597, 14879, 16787, 14779, 18280, + 13597, 14879, 16787, 14779, 20828, + 13597, 14879, 16787, 14876, + 13597, 14879, 16787, 14877, 20828, + 13597, 14879, 16787, 15116, + 13597, 14879, 16787, 15117, 18280, + 13597, 14879, 16787, 15117, 20828, + 13597, 14879, 16787, 16108, + 13597, 14879, 16787, 16109, 20828, + 13597, 14879, 16787, 16502, + 13597, 14879, 16787, 16744, + 13597, 14879, 16787, 16745, 20828, + 13597, 14879, 16787, 17372, + 13597, 14879, 16787, 17373, 20828, + 13597, 14879, 16787, 17474, + 13597, 14879, 16787, 17475, 20828, + 13597, 14879, 16787, 18338, + 13597, 14879, 16787, 19070, + 13597, 14879, 16787, 19071, 20828, + 13597, 14879, 16787, 20523, 2760, + 13597, 14879, 16787, 20523, 3240, + 13597, 14879, 16787, 20523, 3536, + 13597, 14879, 16787, 20523, 7036, + 13597, 14879, 16787, 20523, 7058, + 13597, 14879, 16787, 20523, 9358, + 13597, 14879, 16787, 20523, 13150, + 13597, 14879, 16787, 20523, 14778, + 13597, 14879, 16787, 20523, 15116, + 13597, 14879, 16787, 21003, 2760, + 13597, 14879, 16787, 21003, 3413, 20828, + 13597, 14879, 16787, 21003, 3536, + 13597, 14879, 20055, 2761, 7428, + 13597, 14879, 20055, 2761, 18950, + 13597, 14879, 20055, 15117, 20546, + 13597, 14879, 21003, 8251, 8808, + 13597, 14879, 23548, + 13601, 17299, 1493, 13783, 14911, 18510, + 13601, 17299, 1493, 13783, 17835, 18510, + 13601, 17299, 1493, 13783, 18510, + 13601, 17299, 1493, 18724, + 13601, 17299, 1493, 19228, + 13608, + 13640, + 13665, 403, 10575, 1176, + 13665, 403, 10575, 10538, + 13665, 403, 11033, 12602, + 13665, 403, 11033, 12603, 16928, + 13665, 403, 11033, 16928, + 13665, 403, 13069, 2760, + 13665, 403, 13069, 3240, + 13665, 403, 13069, 3536, + 13665, 403, 13069, 7036, + 13665, 403, 13069, 7058, + 13665, 403, 13069, 9358, + 13665, 403, 13069, 11824, + 13665, 403, 13069, 13150, + 13665, 403, 13069, 14778, + 13665, 403, 13069, 15116, + 13665, 403, 15407, 8, + 13665, 403, 15407, 28, + 13665, 403, 15407, 40, + 13665, 403, 15407, 186, + 13665, 403, 15407, 682, + 13665, 403, 16531, 0, + 13665, 403, 16531, 16, + 13665, 403, 16531, 108, + 13665, 403, 16531, 126, + 13665, 403, 16531, 150, + 13665, 403, 16531, 248, + 13665, 403, 16531, 272, + 13665, 403, 16531, 358, + 13665, 403, 16531, 394, + 13665, 403, 16531, 426, + 13665, 403, 16531, 466, + 13665, 403, 16531, 504, + 13665, 403, 16531, 522, + 13665, 403, 16531, 548, + 13665, 403, 16531, 598, + 13665, 403, 16531, 614, + 13665, 403, 16531, 648, + 13665, 403, 16531, 714, + 13665, 403, 16531, 738, + 13665, 403, 16531, 778, + 13665, 403, 16531, 796, + 13665, 403, 16531, 1796, + 13665, 403, 16531, 2036, + 13665, 403, 16531, 2574, + 13665, 403, 16531, 2698, + 13665, 403, 16531, 2830, + 13665, 403, 16531, 3212, + 13665, 403, 16531, 3422, + 13695, 10575, 2237, 3470, + 13695, 10575, 8058, + 13695, 10575, 12340, + 13695, 10575, 12914, + 13695, 10575, 14668, + 13695, 10575, 15780, + 13695, 10575, 15806, + 13695, 10575, 15869, 2845, 8190, + 13695, 10575, 16899, 8994, + 13695, 10575, 17065, 17072, + 13695, 10575, 17536, + 13695, 10575, 18330, + 13695, 10575, 18376, + 13695, 10575, 18706, + 13695, 10575, 18980, + 13695, 10575, 19316, + 13695, 10575, 19584, + 13695, 10575, 22198, + 13695, 10575, 22202, + 13695, 10575, 23348, + 13695, 10575, 23698, + 13695, 10575, 24198, + 13695, 10575, 25976, + 13695, 13069, 2760, + 13695, 13069, 3240, + 13695, 13069, 3536, + 13695, 13069, 7036, + 13695, 13069, 7058, + 13695, 13069, 9358, + 13695, 13069, 11824, + 13695, 13069, 13150, + 13695, 13069, 14778, + 13695, 13069, 15116, + 13695, 15407, 10575, 8, + 13695, 15407, 10575, 16, + 13695, 15407, 10575, 40, + 13695, 15407, 10575, 48, + 13695, 15407, 10575, 58, + 13695, 15407, 10575, 66, + 13695, 15407, 10575, 72, + 13695, 15407, 10575, 96, + 13695, 15407, 10575, 306, + 13695, 15407, 10575, 314, + 13695, 15407, 10575, 504, + 13695, 15407, 10575, 522, + 13695, 15407, 10575, 674, + 13695, 15407, 10575, 706, + 13695, 15407, 10575, 778, + 13695, 15407, 10575, 794, + 13695, 15407, 20155, 58, + 13695, 15407, 20155, 88, + 13695, 16531, 108, + 13695, 16531, 126, + 13695, 16531, 142, + 13695, 16531, 150, + 13695, 16531, 168, + 13695, 16531, 272, + 13695, 16531, 358, + 13695, 16531, 374, + 13695, 16531, 394, + 13695, 16531, 412, + 13695, 16531, 446, + 13695, 16531, 486, + 13695, 16531, 566, + 13695, 16531, 582, + 13695, 16531, 606, + 13695, 16531, 614, + 13695, 16531, 648, + 13695, 16531, 660, + 13695, 16531, 722, + 13695, 16531, 786, + 13695, 16531, 1116, + 13695, 16531, 1122, + 13695, 16531, 2036, + 13695, 16531, 2042, + 13695, 16531, 2582, + 13695, 16531, 2630, + 13695, 16531, 2706, + 13695, 16531, 2830, + 13695, 16531, 2836, + 13695, 16531, 3212, + 13695, 16531, 3292, + 13695, 16531, 3422, + 13695, 16531, 3428, + 13695, 16531, 11082, + 13695, 16531, 11088, + 13695, 17299, 991, 3102, + 13695, 17299, 991, 8128, + 13695, 17299, 1205, 3102, + 13695, 17299, 1205, 8128, + 13695, 17299, 2237, 12429, 990, + 13695, 17299, 2237, 12429, 2844, + 13695, 17299, 2237, 12429, 3256, + 13695, 17299, 2237, 12429, 6128, + 13695, 17299, 2237, 12429, 9012, + 13695, 17299, 2237, 12429, 9916, + 13695, 17299, 2237, 12429, 20514, + 13695, 17299, 2237, 12429, 20516, + 13695, 17299, 2237, 12429, 21758, + 13695, 17299, 2237, 12429, 21760, + 13695, 17299, 2845, 3102, + 13695, 17299, 2845, 8128, + 13695, 17299, 6129, 3102, + 13695, 17299, 6129, 8128, + 13695, 17299, 9013, 3102, + 13695, 17299, 9013, 8128, + 13695, 17299, 9917, 3102, + 13695, 17299, 9917, 8128, + 13695, 17299, 17965, 3102, + 13695, 17299, 17965, 8128, + 13695, 17299, 17967, 3102, + 13695, 17299, 17967, 8128, + 13695, 17299, 19763, 3102, + 13695, 17299, 19763, 8128, + 13695, 17299, 19765, 3102, + 13695, 17299, 19765, 8128, + 13695, 17299, 19767, 3102, + 13695, 17299, 19767, 8128, + 13695, 17299, 20515, 3102, + 13695, 17299, 20515, 8128, + 13695, 17299, 20517, 3102, + 13695, 17299, 20517, 8128, + 13695, 17299, 21759, 3102, + 13695, 17299, 21759, 8128, + 13695, 17299, 21761, 3102, + 13695, 17299, 21761, 8128, + 13695, 17299, 22080, + 13695, 17299, 22752, + 13695, 19753, 17299, 10148, + 13695, 23273, 15407, 422, + 13695, 23273, 15407, 584, + 13695, 23273, 15407, 586, + 13695, 23273, 15407, 594, + 13695, 23273, 15407, 612, + 13695, 23273, 15407, 2356, + 13695, 23273, 15407, 2924, + 13695, 23273, 15407, 2928, + 13695, 23273, 15407, 2930, + 13695, 23273, 15407, 2934, + 13695, 23273, 15407, 2956, + 13695, 23273, 15407, 2969, 11141, 2760, + 13695, 23273, 15407, 2969, 11141, 3536, + 13695, 23273, 15407, 2984, + 13695, 23273, 15407, 2994, + 13695, 23273, 15407, 3168, + 13695, 23273, 15407, 10004, + 13709, 3039, 10575, 10374, + 13709, 3039, 10575, 11764, + 13709, 3039, 10575, 15178, + 13709, 3039, 10575, 17534, + 13709, 3039, 10575, 19408, + 13709, 3039, 10575, 19540, + 13709, 3039, 13016, + 13709, 3039, 13069, 2760, + 13709, 3039, 13069, 3240, + 13709, 3039, 13069, 3536, + 13709, 3039, 13069, 7036, + 13709, 3039, 13069, 7058, + 13709, 3039, 13069, 9358, + 13709, 3039, 13069, 11824, + 13709, 3039, 13069, 13150, + 13709, 3039, 13069, 14778, + 13709, 3039, 13069, 15116, + 13709, 3039, 15407, 10575, 8, + 13709, 3039, 15407, 10575, 16, + 13709, 3039, 15407, 10575, 28, + 13709, 3039, 15407, 10575, 40, + 13709, 3039, 15407, 10575, 58, + 13709, 3039, 15407, 10575, 72, + 13709, 3039, 15407, 10575, 96, + 13709, 3039, 15407, 10575, 682, + 13709, 3039, 16095, 13016, + 13709, 3039, 16531, 0, + 13709, 3039, 16531, 108, + 13709, 3039, 16531, 126, + 13709, 3039, 16531, 150, + 13709, 3039, 16531, 248, + 13709, 3039, 16531, 272, + 13709, 3039, 16531, 344, + 13709, 3039, 16531, 358, + 13709, 3039, 16531, 394, + 13709, 3039, 16531, 426, + 13709, 3039, 16531, 466, + 13709, 3039, 16531, 548, + 13709, 3039, 16531, 598, + 13709, 3039, 16531, 614, + 13709, 3039, 16531, 648, + 13709, 3039, 16531, 714, + 13709, 3039, 16531, 778, + 13709, 3039, 16531, 1000, + 13709, 3039, 16531, 1116, + 13709, 3039, 16531, 1214, + 13709, 3039, 16531, 1236, + 13709, 3039, 16531, 1588, + 13709, 3039, 16531, 1918, + 13709, 3039, 16531, 2036, + 13709, 3039, 16531, 2574, + 13709, 3039, 16531, 2698, + 13709, 3039, 16531, 2830, + 13709, 3039, 16531, 3212, + 13709, 3039, 16531, 3422, + 13709, 3039, 16531, 3502, + 13709, 3039, 16531, 6572, + 13709, 3039, 16531, 11082, + 13720, + 13758, + 13779, 699, 10850, + 13779, 2761, 1291, 9787, 3537, 6697, 23554, + 13779, 2761, 10151, 9787, 3537, 14661, 23554, + 13779, 3059, 15938, + 13779, 3059, 17224, + 13779, 3537, 6697, 9787, 2761, 1291, 23554, + 13779, 3537, 14661, 9787, 2761, 10151, 23554, + 13779, 6093, 15938, + 13779, 6093, 17224, + 13779, 6093, 17988, + 13779, 6701, 10850, + 13779, 8281, 20859, 20406, + 13779, 11141, 14533, 8281, 920, + 13779, 11141, 14533, 10692, + 13779, 11141, 14533, 10693, 11513, 8281, 13624, + 13779, 11141, 14533, 10693, 11513, 8281, 19740, + 13779, 11141, 14533, 10693, 11513, 14659, 19740, + 13779, 11141, 14533, 10693, 11513, 19740, + 13779, 11141, 14533, 13839, 7429, 17525, 507, 24, + 13779, 11141, 14533, 13839, 7429, 17525, 507, 44, + 13779, 11141, 14533, 13839, 8281, 897, 15287, 8281, 916, + 13779, 11141, 14533, 13839, 8281, 916, + 13779, 11141, 14533, 13839, 8281, 15974, + 13779, 11141, 14533, 13839, 8281, 15988, + 13779, 11141, 14533, 13839, 14659, 897, 15287, 14659, 916, + 13779, 11141, 14533, 13839, 14659, 916, + 13779, 11141, 14533, 13839, 14659, 917, 11513, 10856, + 13779, 11141, 14533, 13839, 14659, 15974, + 13779, 11141, 14533, 13839, 14659, 15988, + 13779, 11141, 14533, 13839, 20812, + 13779, 11141, 14533, 14659, 920, + 13779, 11141, 14533, 14837, 13839, 20812, + 13779, 11141, 14533, 14837, 15287, 20812, + 13779, 11141, 14533, 15287, 7429, 17525, 507, 24, + 13779, 11141, 14533, 15287, 7429, 17525, 507, 44, + 13779, 11141, 14533, 15287, 8281, 916, + 13779, 11141, 14533, 15287, 8281, 15974, + 13779, 11141, 14533, 15287, 8281, 15988, + 13779, 11141, 14533, 15287, 14659, 916, + 13779, 11141, 14533, 15287, 14659, 15974, + 13779, 11141, 14533, 15287, 14659, 15988, + 13779, 11141, 14533, 15287, 20812, + 13779, 11141, 14533, 15901, 507, 20, + 13779, 11141, 14533, 15901, 507, 46, + 13779, 11141, 14533, 15901, 507, 48, + 13779, 11141, 14533, 15901, 507, 51, 11513, 19740, + 13779, 11141, 14533, 17007, 15287, 8281, 916, + 13779, 11141, 14533, 17236, + 13779, 11141, 14533, 17238, + 13779, 11141, 14533, 17240, + 13779, 11141, 14533, 17525, 507, 42, + 13779, 11141, 14533, 19188, + 13779, 11141, 14533, 19190, + 13779, 11141, 14533, 19192, + 13779, 11141, 14533, 19194, + 13779, 11141, 14533, 19740, + 13779, 11141, 14533, 19741, 11513, 13839, 10692, + 13779, 11141, 14533, 19741, 11513, 15287, 10692, + 13779, 11141, 14533, 19791, 13839, 8280, + 13779, 11141, 14533, 19791, 13839, 14658, + 13779, 11141, 14533, 19791, 15287, 8280, + 13779, 11141, 14533, 19791, 15287, 8281, 897, 13839, 8280, + 13779, 11141, 14533, 19791, 15287, 14658, + 13779, 11141, 14533, 19791, 15287, 14659, 897, 13839, 14658, + 13779, 11141, 14533, 20716, + 13779, 11141, 14533, 21902, + 13779, 11141, 14533, 21904, + 13779, 12565, 15938, + 13779, 12565, 17224, + 13779, 13423, 15938, + 13779, 13423, 17224, + 13779, 15938, + 13779, 16821, 15938, + 13779, 16821, 17224, + 13779, 16821, 17988, + 13779, 16987, 15938, + 13779, 16987, 17224, + 13779, 17435, 20933, 965, 20406, + 13779, 17599, 15938, + 13779, 17599, 17224, + 13783, 12934, + 13783, 14911, 16531, 0, + 13783, 14911, 16531, 1, 11513, 1291, 12318, + 13783, 14911, 16531, 1, 11513, 1291, 12319, 897, 16586, + 13783, 14911, 16531, 1, 11513, 1291, 12502, + 13783, 14911, 16531, 1, 11513, 7659, 12318, + 13783, 14911, 16531, 1, 11513, 10151, 12318, + 13783, 14911, 16531, 1, 11513, 10151, 12319, 897, 12320, + 13783, 14911, 16531, 1, 11513, 10151, 12502, + 13783, 14911, 16531, 1, 11513, 12320, + 13783, 14911, 16531, 1, 11513, 12554, + 13783, 14911, 16531, 1, 11513, 12555, 897, 1291, 12502, + 13783, 14911, 16531, 1, 11513, 12555, 897, 7659, 12318, + 13783, 14911, 16531, 1, 11513, 12555, 897, 12320, + 13783, 14911, 16531, 1, 11513, 12555, 897, 13416, + 13783, 14911, 16531, 1, 11513, 12555, 897, 15140, + 13783, 14911, 16531, 1, 11513, 12620, + 13783, 14911, 16531, 1, 11513, 13416, + 13783, 14911, 16531, 1, 11513, 14659, 7429, 10150, + 13783, 14911, 16531, 1, 11513, 15140, + 13783, 14911, 16531, 1, 11513, 16095, 13416, + 13783, 14911, 16531, 1, 11513, 16586, + 13783, 14911, 16531, 1, 11513, 16804, + 13783, 14911, 16531, 1, 11513, 17264, + 13783, 14911, 16531, 1, 11513, 20163, 12554, + 13783, 14911, 16531, 1, 11513, 21188, + 13783, 14911, 16531, 1, 11513, 21189, 897, 16586, + 13783, 14911, 16531, 1, 11513, 21813, 7658, + 13783, 14911, 16531, 1, 11513, 22222, + 13783, 14911, 16531, 1, 11513, 22223, 897, 1291, 12502, + 13783, 14911, 16531, 1, 11513, 22223, 897, 7659, 12318, + 13783, 14911, 16531, 1, 11513, 22223, 897, 12320, + 13783, 14911, 16531, 1, 11513, 22223, 897, 13416, + 13783, 14911, 16531, 1, 11513, 22223, 897, 15140, + 13783, 14911, 16531, 1, 26158, + 13783, 14911, 16531, 2, + 13783, 14911, 16531, 3, 11513, 1291, 12318, + 13783, 14911, 16531, 3, 11513, 1291, 12502, + 13783, 14911, 16531, 3, 11513, 7658, + 13783, 14911, 16531, 3, 11513, 8321, 12502, + 13783, 14911, 16531, 3, 11513, 16661, 15140, + 13783, 14911, 16531, 3, 11513, 17264, + 13783, 14911, 16531, 3, 11513, 17432, + 13783, 14911, 16531, 3, 11513, 18791, 7658, + 13783, 14911, 16531, 3, 11513, 20040, + 13783, 14911, 16531, 4, + 13783, 14911, 16531, 5, 11513, 964, + 13783, 14911, 16531, 5, 11513, 1291, 12318, + 13783, 14911, 16531, 5, 11513, 6376, + 13783, 14911, 16531, 5, 11513, 7658, + 13783, 14911, 16531, 5, 11513, 12320, + 13783, 14911, 16531, 5, 11513, 12620, + 13783, 14911, 16531, 5, 11513, 17264, + 13783, 14911, 16531, 5, 11513, 17846, + 13783, 14911, 16531, 5, 11513, 17847, 897, 12320, + 13783, 14911, 16531, 5, 11513, 18791, 7658, + 13783, 14911, 16531, 5, 11513, 21813, 7658, + 13783, 14911, 16531, 5, 11513, 22222, + 13783, 14911, 16531, 6, + 13783, 14911, 16531, 7, 11513, 1291, 12318, + 13783, 14911, 16531, 7, 11513, 1291, 12502, + 13783, 14911, 16531, 7, 11513, 6376, + 13783, 14911, 16531, 7, 11513, 7658, + 13783, 14911, 16531, 7, 11513, 7659, 897, 10856, + 13783, 14911, 16531, 7, 11513, 8321, 12502, + 13783, 14911, 16531, 7, 11513, 10856, + 13783, 14911, 16531, 7, 11513, 12620, + 13783, 14911, 16531, 7, 11513, 14837, 17265, 18782, + 13783, 14911, 16531, 7, 11513, 16661, 15140, + 13783, 14911, 16531, 7, 11513, 17264, + 13783, 14911, 16531, 7, 11513, 17432, + 13783, 14911, 16531, 7, 11513, 17846, + 13783, 14911, 16531, 7, 11513, 18791, 7658, + 13783, 14911, 16531, 7, 11513, 22223, 12502, + 13783, 14911, 16531, 7, 11513, 22563, 8281, 7658, + 13783, 14911, 16531, 8, + 13783, 14911, 16531, 9, 11513, 1291, 12318, + 13783, 14911, 16531, 9, 11513, 1291, 12502, + 13783, 14911, 16531, 9, 11513, 7659, 12318, + 13783, 14911, 16531, 9, 11513, 12320, + 13783, 14911, 16531, 9, 11513, 12554, + 13783, 14911, 16531, 9, 11513, 12620, + 13783, 14911, 16531, 9, 11513, 13416, + 13783, 14911, 16531, 9, 11513, 14256, + 13783, 14911, 16531, 9, 11513, 15140, + 13783, 14911, 16531, 9, 11513, 15141, 12502, + 13783, 14911, 16531, 9, 11513, 16095, 13416, + 13783, 14911, 16531, 9, 11513, 16586, + 13783, 14911, 16531, 9, 11513, 16587, 897, 12320, + 13783, 14911, 16531, 9, 11513, 16587, 897, 13416, + 13783, 14911, 16531, 9, 11513, 16804, + 13783, 14911, 16531, 9, 11513, 17264, + 13783, 14911, 16531, 9, 11513, 17846, + 13783, 14911, 16531, 9, 11513, 17847, 897, 12554, + 13783, 14911, 16531, 9, 11513, 20040, + 13783, 14911, 16531, 9, 11513, 20163, 12554, + 13783, 14911, 16531, 9, 11513, 21188, + 13783, 14911, 16531, 9, 11513, 21813, 7658, + 13783, 14911, 16531, 9, 11513, 22222, + 13783, 14911, 16531, 9, 11513, 22223, 897, 1291, 12502, + 13783, 14911, 16531, 9, 11513, 22223, 897, 7659, 12318, + 13783, 14911, 16531, 9, 11513, 22223, 897, 12320, + 13783, 14911, 16531, 9, 11513, 22223, 897, 13416, + 13783, 14911, 16531, 9, 11513, 22223, 897, 15140, + 13783, 14911, 16531, 9, 11513, 22223, 12502, + 13783, 14911, 16531, 10, + 13783, 14911, 16531, 11, 11513, 1291, 12318, + 13783, 14911, 16531, 11, 11513, 7658, + 13783, 14911, 16531, 11, 11513, 16661, 15140, + 13783, 14911, 16531, 11, 11513, 17264, + 13783, 14911, 16531, 11, 11513, 18791, 7658, + 13783, 14911, 16531, 12, + 13783, 14911, 16531, 13, 11513, 1291, 12318, + 13783, 14911, 16531, 13, 11513, 7658, + 13783, 14911, 16531, 13, 11513, 12320, + 13783, 14911, 16531, 13, 11513, 12554, + 13783, 14911, 16531, 13, 11513, 12620, + 13783, 14911, 16531, 13, 11513, 16586, + 13783, 14911, 16531, 13, 11513, 17264, + 13783, 14911, 16531, 13, 11513, 17846, + 13783, 14911, 16531, 13, 11513, 18741, 17264, + 13783, 14911, 16531, 13, 11513, 18791, 7658, + 13783, 14911, 16531, 13, 11513, 22222, + 13783, 14911, 16531, 14, + 13783, 14911, 16531, 15, 11513, 1291, 12318, + 13783, 14911, 16531, 15, 11513, 1291, 12502, + 13783, 14911, 16531, 15, 11513, 7658, + 13783, 14911, 16531, 15, 11513, 8321, 12502, + 13783, 14911, 16531, 15, 11513, 12555, 12502, + 13783, 14911, 16531, 15, 11513, 12620, + 13783, 14911, 16531, 15, 11513, 17264, + 13783, 14911, 16531, 15, 11513, 17846, + 13783, 14911, 16531, 15, 11513, 18791, 7658, + 13783, 14911, 16531, 15, 11513, 21186, + 13783, 14911, 16531, 15, 11513, 21188, + 13783, 14911, 16531, 15, 11513, 22222, + 13783, 14911, 16531, 16, + 13783, 14911, 16531, 17, 11513, 1291, 12502, + 13783, 14911, 16531, 17, 11513, 7659, 12318, + 13783, 14911, 16531, 17, 11513, 12320, + 13783, 14911, 16531, 17, 11513, 12554, + 13783, 14911, 16531, 17, 11513, 12620, + 13783, 14911, 16531, 17, 11513, 13416, + 13783, 14911, 16531, 17, 11513, 15140, + 13783, 14911, 16531, 17, 11513, 15141, 12502, + 13783, 14911, 16531, 17, 11513, 16095, 13416, + 13783, 14911, 16531, 17, 11513, 16586, + 13783, 14911, 16531, 17, 11513, 16804, + 13783, 14911, 16531, 17, 11513, 17264, + 13783, 14911, 16531, 17, 11513, 17265, 897, 21813, 7658, + 13783, 14911, 16531, 17, 11513, 20163, 12554, + 13783, 14911, 16531, 17, 11513, 21188, + 13783, 14911, 16531, 17, 11513, 21189, 897, 12320, + 13783, 14911, 16531, 17, 11513, 21813, 7658, + 13783, 14911, 16531, 17, 11513, 22222, + 13783, 14911, 16531, 18, + 13783, 14911, 16531, 19, 11513, 12620, + 13783, 14911, 16531, 19, 11513, 17264, + 13783, 14911, 16531, 19, 11513, 22222, + 13783, 14911, 16531, 19, 11513, 23790, + 13783, 14911, 16531, 20, + 13783, 14911, 16531, 21, 11513, 1291, 12502, + 13783, 14911, 16531, 21, 11513, 7658, + 13783, 14911, 16531, 21, 11513, 8321, 12502, + 13783, 14911, 16531, 21, 11513, 12320, + 13783, 14911, 16531, 21, 11513, 12620, + 13783, 14911, 16531, 21, 11513, 17264, + 13783, 14911, 16531, 21, 11513, 17265, 897, 19791, 17264, + 13783, 14911, 16531, 21, 11513, 17846, + 13783, 14911, 16531, 21, 11513, 18741, 17264, + 13783, 14911, 16531, 21, 11513, 18791, 7658, + 13783, 14911, 16531, 21, 11513, 19791, 17264, + 13783, 14911, 16531, 21, 11513, 21186, + 13783, 14911, 16531, 22, + 13783, 14911, 16531, 23, 11513, 964, + 13783, 14911, 16531, 23, 11513, 1291, 12502, + 13783, 14911, 16531, 23, 11513, 1291, 12503, 897, 16586, + 13783, 14911, 16531, 23, 11513, 6058, + 13783, 14911, 16531, 23, 11513, 6059, 897, 18791, 7658, + 13783, 14911, 16531, 23, 11513, 6376, + 13783, 14911, 16531, 23, 11513, 7521, 17264, + 13783, 14911, 16531, 23, 11513, 8321, 12502, + 13783, 14911, 16531, 23, 11513, 12320, + 13783, 14911, 16531, 23, 11513, 12620, + 13783, 14911, 16531, 23, 11513, 16095, 964, + 13783, 14911, 16531, 23, 11513, 16095, 16661, 15140, + 13783, 14911, 16531, 23, 11513, 16661, 1290, + 13783, 14911, 16531, 23, 11513, 16661, 10150, + 13783, 14911, 16531, 23, 11513, 16661, 15140, + 13783, 14911, 16531, 23, 11513, 17264, + 13783, 14911, 16531, 23, 11513, 17846, + 13783, 14911, 16531, 23, 11513, 18791, 7658, + 13783, 14911, 16531, 23, 11513, 20028, + 13783, 14911, 16531, 23, 11513, 20163, 8271, 36, + 13783, 14911, 16531, 23, 11513, 21813, 7658, + 13783, 14911, 16531, 23, 11513, 21813, 7659, 897, 6058, + 13783, 14911, 16531, 23, 11513, 22223, 12502, + 13783, 14911, 16531, 23, 11513, 22563, 8281, 7658, + 13783, 14911, 16531, 24, + 13783, 14911, 16531, 25, 11513, 1291, 12318, + 13783, 14911, 16531, 25, 11513, 1291, 12502, + 13783, 14911, 16531, 25, 11513, 7658, + 13783, 14911, 16531, 25, 11513, 12320, + 13783, 14911, 16531, 25, 11513, 16661, 15140, + 13783, 14911, 16531, 25, 11513, 18791, 7658, + 13783, 14911, 16531, 25, 11513, 23790, + 13783, 14911, 16531, 26, + 13783, 14911, 16531, 27, 11513, 1291, 12318, + 13783, 14911, 16531, 27, 11513, 1291, 12502, + 13783, 14911, 16531, 27, 11513, 6376, + 13783, 14911, 16531, 27, 11513, 8281, 7658, + 13783, 14911, 16531, 27, 11513, 8321, 12502, + 13783, 14911, 16531, 27, 11513, 8351, 14659, 2232, + 13783, 14911, 16531, 27, 11513, 12320, + 13783, 14911, 16531, 27, 11513, 12620, + 13783, 14911, 16531, 27, 11513, 13416, + 13783, 14911, 16531, 27, 11513, 15140, + 13783, 14911, 16531, 27, 11513, 16661, 15140, + 13783, 14911, 16531, 27, 11513, 17846, + 13783, 14911, 16531, 27, 11513, 18741, 17264, + 13783, 14911, 16531, 27, 11513, 18791, 7658, + 13783, 14911, 16531, 27, 11513, 21186, + 13783, 14911, 16531, 27, 11513, 21813, 7658, + 13783, 14911, 16531, 27, 11513, 22223, 12502, + 13783, 14911, 16531, 27, 11513, 22563, 8281, 7658, + 13783, 14911, 16531, 27, 11513, 23790, + 13783, 14911, 16531, 27, 20519, 125, 22172, + 13783, 14911, 16531, 28, + 13783, 14911, 16531, 29, 11513, 1291, 12318, + 13783, 14911, 16531, 29, 11513, 1291, 12319, 897, 16586, + 13783, 14911, 16531, 29, 11513, 1291, 12502, + 13783, 14911, 16531, 29, 11513, 2301, 10151, 16382, + 13783, 14911, 16531, 29, 11513, 7659, 12318, + 13783, 14911, 16531, 29, 11513, 7670, + 13783, 14911, 16531, 29, 11513, 7671, 897, 1291, 12502, + 13783, 14911, 16531, 29, 11513, 7671, 897, 7659, 12318, + 13783, 14911, 16531, 29, 11513, 7671, 897, 12320, + 13783, 14911, 16531, 29, 11513, 7671, 897, 13416, + 13783, 14911, 16531, 29, 11513, 7671, 897, 15140, + 13783, 14911, 16531, 29, 11513, 8351, 17265, 18782, + 13783, 14911, 16531, 29, 11513, 8356, + 13783, 14911, 16531, 29, 11513, 12320, + 13783, 14911, 16531, 29, 11513, 12554, + 13783, 14911, 16531, 29, 11513, 12620, + 13783, 14911, 16531, 29, 11513, 13416, + 13783, 14911, 16531, 29, 11513, 15140, + 13783, 14911, 16531, 29, 11513, 15141, 897, 12320, + 13783, 14911, 16531, 29, 11513, 15141, 897, 16586, + 13783, 14911, 16531, 29, 11513, 15141, 897, 21188, + 13783, 14911, 16531, 29, 11513, 16095, 12320, + 13783, 14911, 16531, 29, 11513, 16095, 13416, + 13783, 14911, 16531, 29, 11513, 16586, + 13783, 14911, 16531, 29, 11513, 16587, 897, 12320, + 13783, 14911, 16531, 29, 11513, 16587, 897, 13416, + 13783, 14911, 16531, 29, 11513, 16804, + 13783, 14911, 16531, 29, 11513, 16805, 897, 16586, + 13783, 14911, 16531, 29, 11513, 17264, + 13783, 14911, 16531, 29, 11513, 17265, 897, 12320, + 13783, 14911, 16531, 29, 11513, 20163, 12554, + 13783, 14911, 16531, 29, 11513, 21188, + 13783, 14911, 16531, 29, 11513, 21189, 897, 16586, + 13783, 14911, 16531, 29, 11513, 21813, 7658, + 13783, 14911, 16531, 29, 11513, 22222, + 13783, 14911, 16531, 29, 11513, 22223, 897, 1291, 12502, + 13783, 14911, 16531, 29, 11513, 22223, 897, 7659, 12318, + 13783, 14911, 16531, 29, 11513, 22223, 897, 12320, + 13783, 14911, 16531, 29, 11513, 22223, 897, 13416, + 13783, 14911, 16531, 29, 11513, 22223, 897, 15140, + 13783, 14911, 16531, 30, + 13783, 14911, 16531, 31, 11513, 1291, 12318, + 13783, 14911, 16531, 31, 11513, 7658, + 13783, 14911, 16531, 31, 11513, 12320, + 13783, 14911, 16531, 31, 11513, 16661, 15140, + 13783, 14911, 16531, 31, 11513, 17264, + 13783, 14911, 16531, 31, 11513, 17265, 19281, 21186, + 13783, 14911, 16531, 31, 11513, 18791, 7658, + 13783, 14911, 16531, 31, 11513, 20040, + 13783, 14911, 16531, 31, 11513, 20703, 10856, + 13783, 14911, 16531, 32, + 13783, 14911, 16531, 33, 11513, 7658, + 13783, 14911, 16531, 33, 11513, 7659, 10856, + 13783, 14911, 16531, 33, 11513, 17265, 19281, 21186, + 13783, 14911, 16531, 33, 11513, 19791, 17264, + 13783, 14911, 16531, 34, + 13783, 14911, 16531, 35, 11513, 1291, 12318, + 13783, 14911, 16531, 35, 11513, 1291, 12502, + 13783, 14911, 16531, 35, 11513, 1291, 12503, 897, 16586, + 13783, 14911, 16531, 35, 11513, 8321, 12502, + 13783, 14911, 16531, 35, 11513, 8351, 2232, + 13783, 14911, 16531, 35, 11513, 10856, + 13783, 14911, 16531, 35, 11513, 12320, + 13783, 14911, 16531, 35, 11513, 12620, + 13783, 14911, 16531, 35, 11513, 16095, 13416, + 13783, 14911, 16531, 35, 11513, 16661, 15140, + 13783, 14911, 16531, 35, 11513, 17264, + 13783, 14911, 16531, 35, 11513, 17846, + 13783, 14911, 16531, 35, 11513, 18741, 17264, + 13783, 14911, 16531, 35, 11513, 18791, 7658, + 13783, 14911, 16531, 35, 11513, 20028, + 13783, 14911, 16531, 35, 11513, 20029, 897, 16661, 15140, + 13783, 14911, 16531, 35, 11513, 20029, 897, 18791, 7658, + 13783, 14911, 16531, 35, 11513, 20163, 12554, + 13783, 14911, 16531, 35, 11513, 22563, 8281, 7658, + 13783, 14911, 16531, 35, 11513, 23790, + 13783, 14911, 16531, 35, 19016, + 13783, 14911, 16531, 35, 19443, 16310, + 13783, 14911, 16531, 36, + 13783, 14911, 16531, 37, 11513, 1291, 12318, + 13783, 14911, 16531, 37, 11513, 1291, 12502, + 13783, 14911, 16531, 37, 11513, 1291, 12503, 897, 1291, 12318, + 13783, 14911, 16531, 37, 11513, 6376, + 13783, 14911, 16531, 37, 11513, 7658, + 13783, 14911, 16531, 37, 11513, 12320, + 13783, 14911, 16531, 37, 11513, 12321, 897, 1291, 12318, + 13783, 14911, 16531, 37, 11513, 12620, + 13783, 14911, 16531, 37, 11513, 12621, 897, 1291, 12318, + 13783, 14911, 16531, 37, 11513, 12923, 12502, + 13783, 14911, 16531, 37, 11513, 14837, 17265, 18782, + 13783, 14911, 16531, 37, 11513, 15013, 10856, + 13783, 14911, 16531, 37, 11513, 16661, 15140, + 13783, 14911, 16531, 37, 11513, 17846, + 13783, 14911, 16531, 37, 11513, 18741, 17264, + 13783, 14911, 16531, 37, 11513, 18791, 7658, + 13783, 14911, 16531, 37, 11513, 19791, 17264, + 13783, 14911, 16531, 37, 11513, 22222, + 13783, 14911, 16531, 37, 11513, 22563, 8281, 7658, + 13783, 14911, 16531, 38, + 13783, 14911, 16531, 39, 11513, 1291, 12318, + 13783, 14911, 16531, 39, 11513, 1291, 12502, + 13783, 14911, 16531, 39, 11513, 6376, + 13783, 14911, 16531, 39, 11513, 7658, + 13783, 14911, 16531, 39, 11513, 7659, 897, 21813, 7658, + 13783, 14911, 16531, 39, 11513, 8321, 12502, + 13783, 14911, 16531, 39, 11513, 12620, + 13783, 14911, 16531, 39, 11513, 12923, 12502, + 13783, 14911, 16531, 39, 11513, 16661, 15140, + 13783, 14911, 16531, 39, 11513, 17264, + 13783, 14911, 16531, 39, 11513, 17846, + 13783, 14911, 16531, 39, 11513, 18791, 7658, + 13783, 14911, 16531, 39, 11513, 19791, 17264, + 13783, 14911, 16531, 39, 11513, 21188, + 13783, 14911, 16531, 39, 11513, 21813, 7658, + 13783, 14911, 16531, 39, 11513, 22223, 12502, + 13783, 14911, 16531, 39, 11513, 22563, 8281, 7658, + 13783, 14911, 16531, 40, + 13783, 14911, 16531, 41, 964, + 13783, 14911, 16531, 41, 965, 11513, 14837, 14659, 2232, + 13783, 14911, 16531, 41, 11513, 1291, 12502, + 13783, 14911, 16531, 41, 11513, 7659, 12318, + 13783, 14911, 16531, 41, 11513, 7670, + 13783, 14911, 16531, 41, 11513, 7671, 897, 1291, 12502, + 13783, 14911, 16531, 41, 11513, 7671, 897, 7659, 12318, + 13783, 14911, 16531, 41, 11513, 7671, 897, 12320, + 13783, 14911, 16531, 41, 11513, 7671, 897, 13416, + 13783, 14911, 16531, 41, 11513, 7671, 897, 15140, + 13783, 14911, 16531, 41, 11513, 8281, 7658, + 13783, 14911, 16531, 41, 11513, 10151, 12318, + 13783, 14911, 16531, 41, 11513, 12320, + 13783, 14911, 16531, 41, 11513, 12554, + 13783, 14911, 16531, 41, 11513, 12620, + 13783, 14911, 16531, 41, 11513, 13416, + 13783, 14911, 16531, 41, 11513, 14837, 14659, 2232, + 13783, 14911, 16531, 41, 11513, 15140, + 13783, 14911, 16531, 41, 11513, 15141, 897, 12320, + 13783, 14911, 16531, 41, 11513, 15141, 12502, + 13783, 14911, 16531, 41, 11513, 16095, 12320, + 13783, 14911, 16531, 41, 11513, 16095, 13416, + 13783, 14911, 16531, 41, 11513, 16586, + 13783, 14911, 16531, 41, 11513, 16587, 897, 21188, + 13783, 14911, 16531, 41, 11513, 16804, + 13783, 14911, 16531, 41, 11513, 17264, + 13783, 14911, 16531, 41, 11513, 20163, 12554, + 13783, 14911, 16531, 41, 11513, 21188, + 13783, 14911, 16531, 41, 11513, 21189, 897, 12320, + 13783, 14911, 16531, 41, 11513, 21189, 897, 12620, + 13783, 14911, 16531, 41, 11513, 21189, 897, 13416, + 13783, 14911, 16531, 41, 11513, 21189, 897, 16586, + 13783, 14911, 16531, 41, 11513, 21189, 12502, + 13783, 14911, 16531, 41, 11513, 21813, 7658, + 13783, 14911, 16531, 41, 11513, 22222, + 13783, 14911, 16531, 41, 11513, 22223, 12502, + 13783, 14911, 16531, 42, + 13783, 14911, 16531, 43, 11513, 1291, 12502, + 13783, 14911, 16531, 43, 11513, 6376, + 13783, 14911, 16531, 43, 11513, 7658, + 13783, 14911, 16531, 43, 11513, 14659, 7658, + 13783, 14911, 16531, 43, 11513, 15140, + 13783, 14911, 16531, 43, 11513, 18791, 7658, + 13783, 14911, 16531, 43, 11513, 19791, 17264, + 13783, 14911, 16531, 44, + 13783, 14911, 16531, 45, 11513, 1291, 12318, + 13783, 14911, 16531, 45, 11513, 1291, 12502, + 13783, 14911, 16531, 45, 11513, 7658, + 13783, 14911, 16531, 45, 11513, 10151, 12318, + 13783, 14911, 16531, 45, 11513, 12320, + 13783, 14911, 16531, 45, 11513, 13416, + 13783, 14911, 16531, 45, 11513, 21188, + 13783, 14911, 16531, 45, 11513, 22222, + 13783, 14911, 16531, 46, + 13783, 14911, 16531, 47, 11513, 1291, 12318, + 13783, 14911, 16531, 47, 11513, 2301, 14659, 10150, + 13783, 14911, 16531, 47, 11513, 8351, 8281, 2232, + 13783, 14911, 16531, 47, 11513, 8351, 8281, 2233, 897, 2301, 14659, 10150, + 13783, 14911, 16531, 47, 11513, 8351, 8281, 2233, 11513, 14776, + 13783, 14911, 16531, 47, 11513, 18791, 7658, + 13783, 14911, 16531, 47, 11513, 21188, + 13783, 14911, 16531, 48, + 13783, 14911, 16531, 49, 11513, 1291, 12318, + 13783, 14911, 16531, 49, 11513, 1291, 12502, + 13783, 14911, 16531, 49, 11513, 7658, + 13783, 14911, 16531, 49, 11513, 7659, 12318, + 13783, 14911, 16531, 49, 11513, 8356, + 13783, 14911, 16531, 49, 11513, 10151, 12318, + 13783, 14911, 16531, 49, 11513, 12320, + 13783, 14911, 16531, 49, 11513, 13416, + 13783, 14911, 16531, 49, 11513, 14837, 14659, 2232, + 13783, 14911, 16531, 49, 11513, 15140, + 13783, 14911, 16531, 49, 11513, 16586, + 13783, 14911, 16531, 49, 11513, 17264, + 13783, 14911, 16531, 49, 11513, 21188, + 13783, 14911, 16531, 49, 11513, 22222, + 13783, 14911, 16531, 50, + 13783, 14911, 16531, 51, 11513, 1291, 12318, + 13783, 14911, 16531, 51, 11513, 1291, 12502, + 13783, 14911, 16531, 51, 11513, 6376, + 13783, 14911, 16531, 51, 11513, 7658, + 13783, 14911, 16531, 51, 11513, 8321, 12502, + 13783, 14911, 16531, 51, 11513, 12320, + 13783, 14911, 16531, 51, 11513, 12620, + 13783, 14911, 16531, 51, 11513, 15013, 10856, + 13783, 14911, 16531, 51, 11513, 16661, 15140, + 13783, 14911, 16531, 51, 11513, 17264, + 13783, 14911, 16531, 51, 11513, 18791, 7658, + 13783, 14911, 16531, 51, 11513, 21186, + 13783, 14911, 16531, 51, 11513, 21813, 7658, + 13783, 14911, 16531, 51, 11513, 22222, + 13783, 14911, 16531, 58, + 13783, 14911, 16531, 66, + 13783, 14911, 16531, 67, 11513, 12320, + 13783, 14911, 16531, 67, 11513, 16586, + 13783, 14911, 16531, 84, + 13783, 14911, 16531, 96, + 13783, 14911, 16531, 98, + 13783, 14911, 16531, 99, 11513, 22495, 964, + 13783, 14911, 16531, 104, + 13783, 14911, 16531, 153, 17994, + 13783, 14911, 16531, 174, + 13783, 14911, 16531, 175, 11513, 12620, + 13783, 14911, 16531, 175, 17994, + 13783, 14911, 16531, 175, 17995, 11513, 6376, + 13783, 14911, 16531, 175, 17995, 11513, 21813, 7658, + 13783, 14911, 16531, 216, + 13783, 14911, 16531, 294, + 13783, 14911, 16531, 332, + 13783, 14911, 16531, 404, + 13783, 14911, 16531, 415, 17994, + 13783, 14911, 16531, 425, 17994, + 13783, 14911, 16531, 480, + 13783, 14911, 16531, 512, + 13783, 14911, 16531, 522, + 13783, 14911, 16531, 534, + 13783, 14911, 16531, 593, 17994, + 13783, 14911, 16531, 651, 17995, 11513, 6376, + 13783, 14911, 16531, 655, 11513, 25946, + 13783, 14911, 16531, 665, 17994, + 13783, 14911, 16531, 665, 17995, 11513, 21813, 7658, + 13783, 14911, 16531, 670, + 13783, 14911, 16531, 682, + 13783, 14911, 16531, 686, + 13783, 14911, 16531, 692, + 13783, 14911, 16531, 696, + 13783, 14911, 16531, 734, + 13783, 14911, 16531, 1120, + 13783, 14911, 16531, 1121, 11513, 2301, 8281, 14776, + 13783, 14911, 16531, 1121, 11513, 2301, 14659, 10150, + 13783, 14911, 16531, 1148, + 13783, 14911, 16531, 1304, + 13783, 14911, 16531, 1394, + 13783, 14911, 16531, 1395, 11513, 18791, 7658, + 13783, 14911, 16531, 1395, 11513, 23790, + 13783, 14911, 16531, 1412, + 13783, 14911, 16531, 1413, 11513, 6376, + 13783, 14911, 16531, 1413, 11513, 16095, 964, + 13783, 14911, 16531, 1413, 11513, 16095, 965, 897, 6376, + 13783, 14911, 16531, 1413, 11513, 18791, 7658, + 13783, 14911, 16531, 1413, 11513, 21813, 7658, + 13783, 14911, 16531, 1422, + 13783, 14911, 16531, 1436, + 13783, 14911, 16531, 1437, 11513, 6376, + 13783, 14911, 16531, 1437, 11513, 10856, + 13783, 14911, 16531, 1437, 11513, 12620, + 13783, 14911, 16531, 1437, 11513, 18791, 7658, + 13783, 14911, 16531, 1437, 11513, 21813, 7658, + 13783, 14911, 16531, 1437, 20586, + 13783, 14911, 16531, 1588, + 13783, 14911, 16531, 2120, + 13783, 14911, 16531, 2324, + 13783, 14911, 16531, 2472, + 13783, 14911, 16531, 2674, + 13783, 14911, 16531, 2757, 16949, 28, + 13783, 14911, 16531, 2834, + 13783, 14911, 16531, 3136, + 13783, 14911, 16531, 3137, 19016, + 13783, 14911, 16531, 3473, 7429, 28, + 13783, 14911, 16531, 3518, + 13783, 14911, 16531, 6064, + 13783, 14911, 16531, 6635, 17994, + 13783, 14911, 16531, 6635, 17995, 11513, 18791, 7658, + 13783, 14911, 16531, 6635, 17995, 11513, 21813, 7658, + 13783, 14911, 16531, 7013, 17994, + 13783, 14911, 16531, 7013, 17995, 11513, 15202, + 13783, 14911, 16531, 7429, 14, + 13783, 14911, 16531, 7470, + 13783, 14911, 16531, 7471, 11513, 7658, + 13783, 14911, 16531, 7818, + 13783, 14911, 16531, 7819, 11513, 17264, + 13783, 14911, 16531, 8290, + 13783, 14911, 16531, 8291, 11513, 21813, 7658, + 13783, 14911, 16531, 8351, 36, + 13783, 14911, 16531, 8351, 37, 11513, 1291, 12318, + 13783, 14911, 16531, 8351, 37, 11513, 7521, 17264, + 13783, 14911, 16531, 8351, 37, 11513, 19791, 17264, + 13783, 14911, 16531, 9783, 8, + 13783, 14911, 16531, 9783, 9, 11513, 21813, 7658, + 13783, 14911, 16531, 9783, 28, + 13783, 14911, 16531, 9783, 29, 11513, 17264, + 13783, 14911, 16531, 9783, 29, 11513, 21813, 7658, + 13783, 14911, 16531, 9783, 504, + 13783, 14911, 16531, 10095, 7670, + 13783, 14911, 16531, 10911, 17994, + 13783, 14911, 16531, 10911, 17995, 11513, 18791, 7658, + 13783, 14911, 16531, 10911, 17995, 11513, 21813, 7658, + 13783, 14911, 16531, 11033, 3240, + 13783, 14911, 16531, 11033, 3536, + 13783, 14911, 16531, 11033, 7036, + 13783, 14911, 16531, 11368, + 13783, 14911, 16531, 11724, + 13783, 14911, 16531, 12366, + 13783, 14911, 16531, 12367, 11513, 21813, 7658, + 13783, 14911, 16531, 13050, + 13783, 14911, 16531, 13332, + 13783, 14911, 16531, 13801, 10, + 13783, 14911, 16531, 14428, + 13783, 14911, 16531, 14725, 3902, + 13783, 14911, 16531, 14756, + 13783, 14911, 16531, 14757, 11513, 7658, + 13783, 14911, 16531, 14757, 11513, 21813, 7658, + 13783, 14911, 16531, 14797, 36, + 13783, 14911, 16531, 14951, 20587, 1412, + 13783, 14911, 16531, 15114, + 13783, 14911, 16531, 15115, 11513, 17264, + 13783, 14911, 16531, 15115, 11513, 17265, 19281, 21186, + 13783, 14911, 16531, 15787, 8, + 13783, 14911, 16531, 15787, 28, + 13783, 14911, 16531, 15787, 12366, + 13783, 14911, 16531, 15827, 7429, 28, + 13783, 14911, 16531, 15847, 22, + 13783, 14911, 16531, 15949, 9783, 8, + 13783, 14911, 16531, 15949, 14428, + 13783, 14911, 16531, 15949, 18305, 12, + 13783, 14911, 16531, 15949, 20587, 9783, 8, + 13783, 14911, 16531, 16095, 34, + 13783, 14911, 16531, 16095, 35, 11513, 23790, + 13783, 14911, 16531, 16095, 11550, + 13783, 14911, 16531, 16095, 15114, + 13783, 14911, 16531, 16506, + 13783, 14911, 16531, 16507, 11513, 17264, + 13783, 14911, 16531, 16661, 14761, 36, + 13783, 14911, 16531, 17089, 12, + 13783, 14911, 16531, 17089, 13, 11513, 23790, + 13783, 14911, 16531, 17089, 34, + 13783, 14911, 16531, 17089, 35, 11513, 10150, + 13783, 14911, 16531, 17465, 0, + 13783, 14911, 16531, 17465, 8, + 13783, 14911, 16531, 17465, 12, + 13783, 14911, 16531, 17465, 14, + 13783, 14911, 16531, 17465, 15, 11513, 20028, + 13783, 14911, 16531, 17465, 15, 11513, 20029, 897, 10856, + 13783, 14911, 16531, 17465, 16, + 13783, 14911, 16531, 17465, 20, + 13783, 14911, 16531, 17465, 22, + 13783, 14911, 16531, 17465, 24, + 13783, 14911, 16531, 17465, 25, 11513, 8351, 2232, + 13783, 14911, 16531, 17465, 29, 16812, + 13783, 14911, 16531, 17465, 29, 16813, 11513, 17264, + 13783, 14911, 16531, 17465, 34, + 13783, 14911, 16531, 17465, 35, 11513, 7658, + 13783, 14911, 16531, 17465, 35, 11513, 8351, 2232, + 13783, 14911, 16531, 17465, 35, 11513, 8351, 2233, 897, 21813, 7658, + 13783, 14911, 16531, 17465, 35, 11513, 10856, + 13783, 14911, 16531, 17465, 35, 11513, 16661, 15140, + 13783, 14911, 16531, 17465, 35, 11513, 18791, 7658, + 13783, 14911, 16531, 17465, 38, + 13783, 14911, 16531, 17465, 39, 11513, 6376, + 13783, 14911, 16531, 17465, 42, + 13783, 14911, 16531, 17465, 44, + 13783, 14911, 16531, 17465, 48, + 13783, 14911, 16531, 17465, 49, 11513, 6058, + 13783, 14911, 16531, 17465, 66, + 13783, 14911, 16531, 17465, 504, + 13783, 14911, 16531, 17465, 505, 11513, 17264, + 13783, 14911, 16531, 17465, 505, 11513, 22495, 17264, + 13783, 14911, 16531, 17465, 686, + 13783, 14911, 16531, 17465, 9783, 8, + 13783, 14911, 16531, 17465, 12366, + 13783, 14911, 16531, 17465, 13050, + 13783, 14911, 16531, 17465, 18305, 12, + 13783, 14911, 16531, 18019, 16, + 13783, 14911, 16531, 18019, 18, + 13783, 14911, 16531, 18019, 19, 11513, 17264, + 13783, 14911, 16531, 18019, 19, 11513, 17265, 897, 7658, + 13783, 14911, 16531, 18213, 0, + 13783, 14911, 16531, 18213, 16, + 13783, 14911, 16531, 18213, 40, + 13783, 14911, 16531, 18213, 10696, + 13783, 14911, 16531, 18305, 6, + 13783, 14911, 16531, 18305, 10, + 13783, 14911, 16531, 18305, 12, + 13783, 14911, 16531, 18305, 34, + 13783, 14911, 16531, 18305, 36, + 13783, 14911, 16531, 18305, 38, + 13783, 14911, 16531, 19103, 36, + 13783, 14911, 16531, 19197, 34, + 13783, 14911, 16531, 19378, + 13783, 14911, 16531, 19379, 11513, 17264, + 13783, 14911, 16531, 19419, 66, + 13783, 14911, 16531, 19419, 504, + 13783, 14911, 16531, 19419, 682, + 13783, 14911, 16531, 19601, 1412, + 13783, 14911, 16531, 20163, 504, + 13783, 14911, 16531, 20163, 12366, + 13783, 14911, 16531, 20165, 8, + 13783, 14911, 16531, 20587, 4, + 13783, 14911, 16531, 20587, 5, 11513, 1290, + 13783, 14911, 16531, 20587, 8, + 13783, 14911, 16531, 20587, 20, + 13783, 14911, 16531, 20587, 35, 11513, 20028, + 13783, 14911, 16531, 20587, 1394, + 13783, 14911, 16531, 20587, 7429, 14, + 13783, 14911, 16531, 20587, 9783, 8, + 13783, 14911, 16531, 20587, 9783, 9, 11513, 7658, + 13783, 14911, 16531, 20587, 9783, 9, 11513, 21813, 7658, + 13783, 14911, 16531, 20587, 17089, 12, + 13783, 14911, 16531, 20604, + 13783, 14911, 16531, 20659, 28, + 13783, 14911, 16531, 20659, 29, 11513, 17264, + 13783, 14911, 16531, 20659, 40, + 13783, 14911, 16531, 20659, 9783, 28, + 13783, 14911, 16531, 20659, 17465, 24, + 13783, 14911, 16531, 20659, 23127, 40, + 13783, 14911, 16531, 20801, 2834, + 13783, 14911, 16531, 20856, + 13783, 14911, 16531, 21011, 44, + 13783, 14911, 16531, 21164, + 13783, 14911, 16531, 21165, 11513, 12922, + 13783, 14911, 16531, 23015, 50, + 13783, 14911, 16531, 23067, 8, + 13783, 14911, 16531, 23067, 28, + 13783, 14911, 16531, 23067, 29, 11513, 17264, + 13783, 14911, 16531, 23913, 42, + 13783, 14911, 16531, 23913, 406, + 13783, 14911, 16531, 25767, 880, + 13783, 14911, 16531, 25767, 5482, + 13783, 14911, 17835, 16531, 17, 11513, 17264, + 13783, 14911, 17835, 16531, 41, 11513, 17264, + 13783, 14911, 20241, 232, + 13783, 14911, 20241, 234, + 13783, 14911, 20241, 236, + 13783, 14911, 20241, 316, + 13783, 14911, 20241, 504, + 13783, 14911, 20241, 636, + 13783, 14911, 20241, 1466, + 13783, 14911, 20241, 1468, + 13783, 14911, 20241, 8351, 37, 38, + 13783, 16531, 788, + 13783, 16531, 880, + 13783, 16531, 3537, 11513, 17264, + 13783, 16531, 11550, + 13783, 16531, 14911, 17835, 0, + 13783, 16531, 14911, 17835, 2, + 13783, 16531, 14911, 17835, 4, + 13783, 16531, 14911, 17835, 6, + 13783, 16531, 14911, 17835, 8, + 13783, 16531, 14911, 17835, 10, + 13783, 16531, 14911, 17835, 12, + 13783, 16531, 14911, 17835, 13, 11513, 7658, + 13783, 16531, 14911, 17835, 14, + 13783, 16531, 14911, 17835, 16, + 13783, 16531, 14911, 17835, 18, + 13783, 16531, 14911, 17835, 20, + 13783, 16531, 14911, 17835, 22, + 13783, 16531, 14911, 17835, 23, 11513, 6058, + 13783, 16531, 14911, 17835, 23, 11513, 17264, + 13783, 16531, 14911, 17835, 24, + 13783, 16531, 14911, 17835, 26, + 13783, 16531, 14911, 17835, 28, + 13783, 16531, 14911, 17835, 30, + 13783, 16531, 14911, 17835, 32, + 13783, 16531, 14911, 17835, 34, + 13783, 16531, 14911, 17835, 35, 11513, 14659, 2232, + 13783, 16531, 14911, 17835, 36, + 13783, 16531, 14911, 17835, 38, + 13783, 16531, 14911, 17835, 40, + 13783, 16531, 14911, 17835, 42, + 13783, 16531, 14911, 17835, 44, + 13783, 16531, 14911, 17835, 48, + 13783, 16531, 14911, 17835, 50, + 13783, 16531, 14911, 17835, 66, + 13783, 16531, 14911, 17835, 504, + 13783, 16531, 14911, 17835, 534, + 13783, 16531, 14911, 17835, 1422, + 13783, 16531, 14911, 17835, 1436, + 13783, 16531, 14911, 17835, 3136, + 13783, 16531, 14911, 17835, 9783, 28, + 13783, 16531, 14911, 17835, 15787, 2, + 13783, 16531, 14911, 17835, 17465, 8, + 13783, 16531, 14911, 17835, 17465, 12, + 13783, 16531, 14911, 17835, 17465, 20, + 13783, 16531, 14911, 17835, 17465, 24, + 13783, 16531, 14911, 17835, 17465, 34, + 13783, 16531, 14911, 17835, 20163, 34, + 13783, 16531, 14911, 17835, 20587, 26, + 13783, 16531, 14911, 17835, 20587, 34, + 13783, 16531, 16031, 12704, + 13783, 16531, 17539, 21549, 19158, + 13783, 16531, 18213, 10696, + 13783, 16531, 18213, 10697, 11513, 17264, + 13783, 16531, 18497, 12704, + 13783, 16531, 19529, 12704, + 13783, 16531, 19615, 22758, + 13783, 16531, 19617, 12704, + 13783, 16531, 19617, 22758, + 13783, 16531, 20163, 18213, 10696, + 13783, 16531, 20163, 18213, 10697, 11513, 6376, + 13783, 16531, 20163, 18213, 10697, 11513, 17264, + 13783, 16531, 20587, 1413, 8356, + 13783, 16531, 20587, 18213, 10697, 11513, 17264, + 13783, 16531, 21813, 12704, + 13783, 16531, 21813, 12705, 11513, 21813, 7658, + 13783, 16531, 21911, 4, + 13783, 16531, 21911, 5, 11513, 6376, + 13783, 16531, 22763, 17539, 21420, + 13783, 16531, 23653, 1290, + 13783, 17835, 16531, 0, + 13783, 17835, 16531, 1, 11513, 1291, 12318, + 13783, 17835, 16531, 1, 11513, 1291, 12319, 897, 16586, + 13783, 17835, 16531, 1, 11513, 1291, 12502, + 13783, 17835, 16531, 1, 11513, 7659, 12318, + 13783, 17835, 16531, 1, 11513, 10151, 12318, + 13783, 17835, 16531, 1, 11513, 10151, 12319, 897, 12320, + 13783, 17835, 16531, 1, 11513, 10151, 12502, + 13783, 17835, 16531, 1, 11513, 12320, + 13783, 17835, 16531, 1, 11513, 12554, + 13783, 17835, 16531, 1, 11513, 12555, 897, 1291, 12502, + 13783, 17835, 16531, 1, 11513, 12555, 897, 7659, 12318, + 13783, 17835, 16531, 1, 11513, 12555, 897, 12320, + 13783, 17835, 16531, 1, 11513, 12555, 897, 13416, + 13783, 17835, 16531, 1, 11513, 12555, 897, 15140, + 13783, 17835, 16531, 1, 11513, 12620, + 13783, 17835, 16531, 1, 11513, 13416, + 13783, 17835, 16531, 1, 11513, 15140, + 13783, 17835, 16531, 1, 11513, 16095, 13416, + 13783, 17835, 16531, 1, 11513, 16586, + 13783, 17835, 16531, 1, 11513, 16804, + 13783, 17835, 16531, 1, 11513, 17264, + 13783, 17835, 16531, 1, 11513, 20163, 12554, + 13783, 17835, 16531, 1, 11513, 21188, + 13783, 17835, 16531, 1, 11513, 21189, 897, 16586, + 13783, 17835, 16531, 1, 11513, 22222, + 13783, 17835, 16531, 1, 11513, 22223, 897, 1291, 12502, + 13783, 17835, 16531, 1, 11513, 22223, 897, 7659, 12318, + 13783, 17835, 16531, 1, 11513, 22223, 897, 12320, + 13783, 17835, 16531, 1, 11513, 22223, 897, 13416, + 13783, 17835, 16531, 1, 11513, 22223, 897, 15140, + 13783, 17835, 16531, 2, + 13783, 17835, 16531, 3, 11513, 1291, 12318, + 13783, 17835, 16531, 3, 11513, 1291, 12502, + 13783, 17835, 16531, 3, 11513, 7658, + 13783, 17835, 16531, 3, 11513, 8321, 12502, + 13783, 17835, 16531, 3, 11513, 17264, + 13783, 17835, 16531, 3, 11513, 17432, + 13783, 17835, 16531, 3, 11513, 20040, + 13783, 17835, 16531, 4, + 13783, 17835, 16531, 5, 11513, 964, + 13783, 17835, 16531, 5, 11513, 1291, 12318, + 13783, 17835, 16531, 5, 11513, 7658, + 13783, 17835, 16531, 5, 11513, 12320, + 13783, 17835, 16531, 5, 11513, 12620, + 13783, 17835, 16531, 5, 11513, 17264, + 13783, 17835, 16531, 5, 11513, 17846, + 13783, 17835, 16531, 5, 11513, 17847, 897, 12320, + 13783, 17835, 16531, 5, 11513, 18791, 7658, + 13783, 17835, 16531, 5, 11513, 22222, + 13783, 17835, 16531, 6, + 13783, 17835, 16531, 7, 11513, 1291, 12318, + 13783, 17835, 16531, 7, 11513, 1291, 12502, + 13783, 17835, 16531, 7, 11513, 7658, + 13783, 17835, 16531, 7, 11513, 8321, 12502, + 13783, 17835, 16531, 7, 11513, 12620, + 13783, 17835, 16531, 7, 11513, 14837, 17265, 18782, + 13783, 17835, 16531, 7, 11513, 14911, 16531, 50, + 13783, 17835, 16531, 7, 11513, 14911, 16531, 51, 11513, 12620, + 13783, 17835, 16531, 7, 11513, 17264, + 13783, 17835, 16531, 7, 11513, 17432, + 13783, 17835, 16531, 7, 11513, 17846, + 13783, 17835, 16531, 7, 11513, 22223, 12502, + 13783, 17835, 16531, 8, + 13783, 17835, 16531, 9, 11513, 1291, 12318, + 13783, 17835, 16531, 9, 11513, 1291, 12502, + 13783, 17835, 16531, 9, 11513, 7659, 12318, + 13783, 17835, 16531, 9, 11513, 12320, + 13783, 17835, 16531, 9, 11513, 12554, + 13783, 17835, 16531, 9, 11513, 12620, + 13783, 17835, 16531, 9, 11513, 13416, + 13783, 17835, 16531, 9, 11513, 15140, + 13783, 17835, 16531, 9, 11513, 15141, 12502, + 13783, 17835, 16531, 9, 11513, 16095, 13416, + 13783, 17835, 16531, 9, 11513, 16586, + 13783, 17835, 16531, 9, 11513, 16587, 897, 12320, + 13783, 17835, 16531, 9, 11513, 16587, 897, 13416, + 13783, 17835, 16531, 9, 11513, 16804, + 13783, 17835, 16531, 9, 11513, 17264, + 13783, 17835, 16531, 9, 11513, 17846, + 13783, 17835, 16531, 9, 11513, 17847, 897, 12554, + 13783, 17835, 16531, 9, 11513, 20163, 12554, + 13783, 17835, 16531, 9, 11513, 21188, + 13783, 17835, 16531, 9, 11513, 22222, + 13783, 17835, 16531, 9, 11513, 22223, 897, 1291, 12502, + 13783, 17835, 16531, 9, 11513, 22223, 897, 7659, 12318, + 13783, 17835, 16531, 9, 11513, 22223, 897, 12320, + 13783, 17835, 16531, 9, 11513, 22223, 897, 13416, + 13783, 17835, 16531, 9, 11513, 22223, 897, 15140, + 13783, 17835, 16531, 9, 11513, 22223, 12502, + 13783, 17835, 16531, 10, + 13783, 17835, 16531, 11, 11513, 1291, 12318, + 13783, 17835, 16531, 11, 11513, 7658, + 13783, 17835, 16531, 11, 11513, 17264, + 13783, 17835, 16531, 12, + 13783, 17835, 16531, 13, 11513, 1291, 12318, + 13783, 17835, 16531, 13, 11513, 7658, + 13783, 17835, 16531, 13, 11513, 12320, + 13783, 17835, 16531, 13, 11513, 12554, + 13783, 17835, 16531, 13, 11513, 12620, + 13783, 17835, 16531, 13, 11513, 16586, + 13783, 17835, 16531, 13, 11513, 17264, + 13783, 17835, 16531, 13, 11513, 17846, + 13783, 17835, 16531, 13, 11513, 18741, 17264, + 13783, 17835, 16531, 13, 11513, 22222, + 13783, 17835, 16531, 14, + 13783, 17835, 16531, 15, 11513, 1291, 12318, + 13783, 17835, 16531, 15, 11513, 1291, 12502, + 13783, 17835, 16531, 15, 11513, 7658, + 13783, 17835, 16531, 15, 11513, 12555, 12502, + 13783, 17835, 16531, 15, 11513, 12620, + 13783, 17835, 16531, 15, 11513, 17264, + 13783, 17835, 16531, 15, 11513, 17846, + 13783, 17835, 16531, 15, 11513, 21186, + 13783, 17835, 16531, 15, 11513, 21188, + 13783, 17835, 16531, 15, 11513, 22222, + 13783, 17835, 16531, 16, + 13783, 17835, 16531, 17, 11513, 1291, 12318, + 13783, 17835, 16531, 17, 11513, 1291, 12502, + 13783, 17835, 16531, 17, 11513, 7659, 12318, + 13783, 17835, 16531, 17, 11513, 12320, + 13783, 17835, 16531, 17, 11513, 12554, + 13783, 17835, 16531, 17, 11513, 12620, + 13783, 17835, 16531, 17, 11513, 13416, + 13783, 17835, 16531, 17, 11513, 15140, + 13783, 17835, 16531, 17, 11513, 15141, 12502, + 13783, 17835, 16531, 17, 11513, 16095, 13416, + 13783, 17835, 16531, 17, 11513, 16586, + 13783, 17835, 16531, 17, 11513, 16804, + 13783, 17835, 16531, 17, 11513, 17264, + 13783, 17835, 16531, 17, 11513, 20163, 12554, + 13783, 17835, 16531, 17, 11513, 21188, + 13783, 17835, 16531, 17, 11513, 21189, 897, 12320, + 13783, 17835, 16531, 17, 11513, 22222, + 13783, 17835, 16531, 18, + 13783, 17835, 16531, 19, 11513, 17264, + 13783, 17835, 16531, 19, 11513, 22222, + 13783, 17835, 16531, 19, 11513, 23790, + 13783, 17835, 16531, 20, + 13783, 17835, 16531, 21, 11513, 1291, 12502, + 13783, 17835, 16531, 21, 11513, 7658, + 13783, 17835, 16531, 21, 11513, 8321, 12502, + 13783, 17835, 16531, 21, 11513, 12320, + 13783, 17835, 16531, 21, 11513, 12620, + 13783, 17835, 16531, 21, 11513, 17264, + 13783, 17835, 16531, 21, 11513, 17265, 897, 19791, 17264, + 13783, 17835, 16531, 21, 11513, 17846, + 13783, 17835, 16531, 21, 11513, 18741, 17264, + 13783, 17835, 16531, 21, 11513, 19791, 17264, + 13783, 17835, 16531, 21, 11513, 21186, + 13783, 17835, 16531, 22, + 13783, 17835, 16531, 23, 11513, 964, + 13783, 17835, 16531, 23, 11513, 1291, 12502, + 13783, 17835, 16531, 23, 11513, 1291, 12503, 897, 16586, + 13783, 17835, 16531, 23, 11513, 6058, + 13783, 17835, 16531, 23, 11513, 7521, 17264, + 13783, 17835, 16531, 23, 11513, 8321, 12502, + 13783, 17835, 16531, 23, 11513, 12320, + 13783, 17835, 16531, 23, 11513, 12620, + 13783, 17835, 16531, 23, 11513, 14911, 16531, 18, + 13783, 17835, 16531, 23, 11513, 16095, 964, + 13783, 17835, 16531, 23, 11513, 16661, 1290, + 13783, 17835, 16531, 23, 11513, 16661, 15140, + 13783, 17835, 16531, 23, 11513, 17264, + 13783, 17835, 16531, 23, 11513, 17846, + 13783, 17835, 16531, 23, 11513, 22223, 12502, + 13783, 17835, 16531, 24, + 13783, 17835, 16531, 25, 11513, 1291, 12318, + 13783, 17835, 16531, 25, 11513, 1291, 12502, + 13783, 17835, 16531, 25, 11513, 7658, + 13783, 17835, 16531, 25, 11513, 12320, + 13783, 17835, 16531, 26, + 13783, 17835, 16531, 27, 11513, 1291, 12318, + 13783, 17835, 16531, 27, 11513, 1291, 12502, + 13783, 17835, 16531, 27, 11513, 8281, 7658, + 13783, 17835, 16531, 27, 11513, 8321, 12502, + 13783, 17835, 16531, 27, 11513, 8351, 14659, 2232, + 13783, 17835, 16531, 27, 11513, 12320, + 13783, 17835, 16531, 27, 11513, 12620, + 13783, 17835, 16531, 27, 11513, 13416, + 13783, 17835, 16531, 27, 11513, 14911, 16531, 18, + 13783, 17835, 16531, 27, 11513, 15140, + 13783, 17835, 16531, 27, 11513, 17846, + 13783, 17835, 16531, 27, 11513, 18741, 17264, + 13783, 17835, 16531, 27, 11513, 21186, + 13783, 17835, 16531, 27, 11513, 22223, 12502, + 13783, 17835, 16531, 28, + 13783, 17835, 16531, 29, 11513, 1291, 12318, + 13783, 17835, 16531, 29, 11513, 1291, 12319, 897, 16586, + 13783, 17835, 16531, 29, 11513, 1291, 12502, + 13783, 17835, 16531, 29, 11513, 7659, 12318, + 13783, 17835, 16531, 29, 11513, 7670, + 13783, 17835, 16531, 29, 11513, 7671, 897, 1291, 12502, + 13783, 17835, 16531, 29, 11513, 7671, 897, 7659, 12318, + 13783, 17835, 16531, 29, 11513, 7671, 897, 12320, + 13783, 17835, 16531, 29, 11513, 7671, 897, 13416, + 13783, 17835, 16531, 29, 11513, 7671, 897, 15140, + 13783, 17835, 16531, 29, 11513, 8351, 17265, 18782, + 13783, 17835, 16531, 29, 11513, 8356, + 13783, 17835, 16531, 29, 11513, 12320, + 13783, 17835, 16531, 29, 11513, 12554, + 13783, 17835, 16531, 29, 11513, 12620, + 13783, 17835, 16531, 29, 11513, 13416, + 13783, 17835, 16531, 29, 11513, 15140, + 13783, 17835, 16531, 29, 11513, 15141, 897, 12320, + 13783, 17835, 16531, 29, 11513, 15141, 897, 16586, + 13783, 17835, 16531, 29, 11513, 15141, 897, 21188, + 13783, 17835, 16531, 29, 11513, 16095, 12320, + 13783, 17835, 16531, 29, 11513, 16095, 13416, + 13783, 17835, 16531, 29, 11513, 16586, + 13783, 17835, 16531, 29, 11513, 16587, 897, 12320, + 13783, 17835, 16531, 29, 11513, 16587, 897, 13416, + 13783, 17835, 16531, 29, 11513, 16661, 15140, + 13783, 17835, 16531, 29, 11513, 16804, + 13783, 17835, 16531, 29, 11513, 16805, 897, 16586, + 13783, 17835, 16531, 29, 11513, 17264, + 13783, 17835, 16531, 29, 11513, 17265, 897, 12320, + 13783, 17835, 16531, 29, 11513, 20163, 12554, + 13783, 17835, 16531, 29, 11513, 21188, + 13783, 17835, 16531, 29, 11513, 21189, 897, 16586, + 13783, 17835, 16531, 29, 11513, 22222, + 13783, 17835, 16531, 29, 11513, 22223, 897, 1291, 12502, + 13783, 17835, 16531, 29, 11513, 22223, 897, 7659, 12318, + 13783, 17835, 16531, 29, 11513, 22223, 897, 12320, + 13783, 17835, 16531, 29, 11513, 22223, 897, 13416, + 13783, 17835, 16531, 29, 11513, 22223, 897, 15140, + 13783, 17835, 16531, 30, + 13783, 17835, 16531, 31, 11513, 1291, 12318, + 13783, 17835, 16531, 31, 11513, 7658, + 13783, 17835, 16531, 31, 11513, 12320, + 13783, 17835, 16531, 31, 11513, 17264, + 13783, 17835, 16531, 31, 11513, 17265, 19281, 21186, + 13783, 17835, 16531, 31, 11513, 20040, + 13783, 17835, 16531, 31, 11513, 20703, 10856, + 13783, 17835, 16531, 32, + 13783, 17835, 16531, 33, 11513, 17265, 19281, 21186, + 13783, 17835, 16531, 33, 11513, 19791, 17264, + 13783, 17835, 16531, 34, + 13783, 17835, 16531, 35, 11513, 1291, 12318, + 13783, 17835, 16531, 35, 11513, 1291, 12502, + 13783, 17835, 16531, 35, 11513, 1291, 12503, 897, 16586, + 13783, 17835, 16531, 35, 11513, 8321, 12502, + 13783, 17835, 16531, 35, 11513, 10856, + 13783, 17835, 16531, 35, 11513, 12320, + 13783, 17835, 16531, 35, 11513, 12620, + 13783, 17835, 16531, 35, 11513, 16095, 13416, + 13783, 17835, 16531, 35, 11513, 17264, + 13783, 17835, 16531, 35, 11513, 17846, + 13783, 17835, 16531, 35, 11513, 18741, 17264, + 13783, 17835, 16531, 35, 11513, 20163, 12554, + 13783, 17835, 16531, 35, 19016, + 13783, 17835, 16531, 36, + 13783, 17835, 16531, 37, 11513, 1291, 12318, + 13783, 17835, 16531, 37, 11513, 1291, 12502, + 13783, 17835, 16531, 37, 11513, 1291, 12503, 897, 1291, 12318, + 13783, 17835, 16531, 37, 11513, 7658, + 13783, 17835, 16531, 37, 11513, 12320, + 13783, 17835, 16531, 37, 11513, 12321, 897, 1291, 12318, + 13783, 17835, 16531, 37, 11513, 12620, + 13783, 17835, 16531, 37, 11513, 12621, 897, 1291, 12318, + 13783, 17835, 16531, 37, 11513, 12923, 12502, + 13783, 17835, 16531, 37, 11513, 14837, 17265, 18782, + 13783, 17835, 16531, 37, 11513, 15013, 10856, + 13783, 17835, 16531, 37, 11513, 17846, + 13783, 17835, 16531, 37, 11513, 18741, 17264, + 13783, 17835, 16531, 37, 11513, 19791, 17264, + 13783, 17835, 16531, 37, 11513, 22222, + 13783, 17835, 16531, 38, + 13783, 17835, 16531, 39, 11513, 1291, 12318, + 13783, 17835, 16531, 39, 11513, 1291, 12502, + 13783, 17835, 16531, 39, 11513, 7658, + 13783, 17835, 16531, 39, 11513, 8321, 12502, + 13783, 17835, 16531, 39, 11513, 12620, + 13783, 17835, 16531, 39, 11513, 12923, 12502, + 13783, 17835, 16531, 39, 11513, 17264, + 13783, 17835, 16531, 39, 11513, 17846, + 13783, 17835, 16531, 39, 11513, 19791, 17264, + 13783, 17835, 16531, 39, 11513, 21813, 7658, + 13783, 17835, 16531, 39, 11513, 22223, 12502, + 13783, 17835, 16531, 40, + 13783, 17835, 16531, 41, 964, + 13783, 17835, 16531, 41, 11513, 1291, 12502, + 13783, 17835, 16531, 41, 11513, 7659, 12318, + 13783, 17835, 16531, 41, 11513, 7670, + 13783, 17835, 16531, 41, 11513, 7671, 897, 1291, 12502, + 13783, 17835, 16531, 41, 11513, 7671, 897, 7659, 12318, + 13783, 17835, 16531, 41, 11513, 7671, 897, 12320, + 13783, 17835, 16531, 41, 11513, 7671, 897, 13416, + 13783, 17835, 16531, 41, 11513, 7671, 897, 15140, + 13783, 17835, 16531, 41, 11513, 10151, 12318, + 13783, 17835, 16531, 41, 11513, 12320, + 13783, 17835, 16531, 41, 11513, 12554, + 13783, 17835, 16531, 41, 11513, 12620, + 13783, 17835, 16531, 41, 11513, 13416, + 13783, 17835, 16531, 41, 11513, 15140, + 13783, 17835, 16531, 41, 11513, 15141, 897, 12320, + 13783, 17835, 16531, 41, 11513, 15141, 12502, + 13783, 17835, 16531, 41, 11513, 16095, 12320, + 13783, 17835, 16531, 41, 11513, 16095, 13416, + 13783, 17835, 16531, 41, 11513, 16586, + 13783, 17835, 16531, 41, 11513, 16587, 897, 21188, + 13783, 17835, 16531, 41, 11513, 16804, + 13783, 17835, 16531, 41, 11513, 17264, + 13783, 17835, 16531, 41, 11513, 20163, 12554, + 13783, 17835, 16531, 41, 11513, 21188, + 13783, 17835, 16531, 41, 11513, 21189, 897, 12320, + 13783, 17835, 16531, 41, 11513, 21189, 897, 12620, + 13783, 17835, 16531, 41, 11513, 21189, 897, 13416, + 13783, 17835, 16531, 41, 11513, 21189, 897, 16586, + 13783, 17835, 16531, 41, 11513, 21189, 12502, + 13783, 17835, 16531, 41, 11513, 22222, + 13783, 17835, 16531, 41, 11513, 22223, 12502, + 13783, 17835, 16531, 42, + 13783, 17835, 16531, 43, 11513, 1291, 12502, + 13783, 17835, 16531, 43, 11513, 7658, + 13783, 17835, 16531, 43, 11513, 15140, + 13783, 17835, 16531, 43, 11513, 19791, 17264, + 13783, 17835, 16531, 44, + 13783, 17835, 16531, 45, 11513, 1291, 12318, + 13783, 17835, 16531, 45, 11513, 1291, 12502, + 13783, 17835, 16531, 45, 11513, 7658, + 13783, 17835, 16531, 45, 11513, 12320, + 13783, 17835, 16531, 45, 11513, 13416, + 13783, 17835, 16531, 45, 11513, 21188, + 13783, 17835, 16531, 45, 11513, 22222, + 13783, 17835, 16531, 46, + 13783, 17835, 16531, 47, 11513, 1291, 12318, + 13783, 17835, 16531, 47, 11513, 21188, + 13783, 17835, 16531, 48, + 13783, 17835, 16531, 49, 11513, 1291, 12318, + 13783, 17835, 16531, 49, 11513, 1291, 12502, + 13783, 17835, 16531, 49, 11513, 7658, + 13783, 17835, 16531, 49, 11513, 7659, 12318, + 13783, 17835, 16531, 49, 11513, 8356, + 13783, 17835, 16531, 49, 11513, 12320, + 13783, 17835, 16531, 49, 11513, 13416, + 13783, 17835, 16531, 49, 11513, 15140, + 13783, 17835, 16531, 49, 11513, 16586, + 13783, 17835, 16531, 49, 11513, 17264, + 13783, 17835, 16531, 49, 11513, 21188, + 13783, 17835, 16531, 49, 11513, 22222, + 13783, 17835, 16531, 50, + 13783, 17835, 16531, 51, 11513, 1291, 12318, + 13783, 17835, 16531, 51, 11513, 1291, 12502, + 13783, 17835, 16531, 51, 11513, 7658, + 13783, 17835, 16531, 51, 11513, 8321, 12502, + 13783, 17835, 16531, 51, 11513, 12320, + 13783, 17835, 16531, 51, 11513, 12620, + 13783, 17835, 16531, 51, 11513, 15013, 10856, + 13783, 17835, 16531, 51, 11513, 17264, + 13783, 17835, 16531, 51, 11513, 18791, 7658, + 13783, 17835, 16531, 51, 11513, 21186, + 13783, 17835, 16531, 51, 11513, 22222, + 13783, 17835, 16531, 58, + 13783, 17835, 16531, 66, + 13783, 17835, 16531, 67, 11513, 12320, + 13783, 17835, 16531, 67, 11513, 16586, + 13783, 17835, 16531, 84, + 13783, 17835, 16531, 96, + 13783, 17835, 16531, 98, + 13783, 17835, 16531, 99, 11513, 22495, 964, + 13783, 17835, 16531, 104, + 13783, 17835, 16531, 174, + 13783, 17835, 16531, 175, 11513, 12620, + 13783, 17835, 16531, 216, + 13783, 17835, 16531, 332, + 13783, 17835, 16531, 404, + 13783, 17835, 16531, 480, + 13783, 17835, 16531, 512, + 13783, 17835, 16531, 522, + 13783, 17835, 16531, 534, + 13783, 17835, 16531, 670, + 13783, 17835, 16531, 734, + 13783, 17835, 16531, 1120, + 13783, 17835, 16531, 1148, + 13783, 17835, 16531, 1394, + 13783, 17835, 16531, 1412, + 13783, 17835, 16531, 1422, + 13783, 17835, 16531, 1436, + 13783, 17835, 16531, 1437, 11513, 12620, + 13783, 17835, 16531, 1437, 20586, + 13783, 17835, 16531, 1588, + 13783, 17835, 16531, 2757, 16949, 28, + 13783, 17835, 16531, 3137, 19016, + 13783, 17835, 16531, 6064, + 13783, 17835, 16531, 7429, 14, + 13783, 17835, 16531, 7470, + 13783, 17835, 16531, 7818, + 13783, 17835, 16531, 9783, 8, + 13783, 17835, 16531, 9783, 28, + 13783, 17835, 16531, 10095, 7670, + 13783, 17835, 16531, 11033, 3240, + 13783, 17835, 16531, 11033, 3536, + 13783, 17835, 16531, 11033, 7036, + 13783, 17835, 16531, 11368, + 13783, 17835, 16531, 11550, + 13783, 17835, 16531, 11724, + 13783, 17835, 16531, 12366, + 13783, 17835, 16531, 13332, + 13783, 17835, 16531, 13546, + 13783, 17835, 16531, 14428, + 13783, 17835, 16531, 14756, + 13783, 17835, 16531, 14797, 36, + 13783, 17835, 16531, 14911, 33, 11513, 7659, 10856, + 13783, 17835, 16531, 14911, 17835, 16, + 13783, 17835, 16531, 15114, + 13783, 17835, 16531, 15115, 11513, 17264, + 13783, 17835, 16531, 15115, 11513, 17265, 19281, 21186, + 13783, 17835, 16531, 15847, 22, + 13783, 17835, 16531, 15949, 18305, 12, + 13783, 17835, 16531, 16506, + 13783, 17835, 16531, 16507, 11513, 17264, + 13783, 17835, 16531, 16661, 14761, 36, + 13783, 17835, 16531, 17089, 12, + 13783, 17835, 16531, 17465, 0, + 13783, 17835, 16531, 17465, 14, + 13783, 17835, 16531, 17465, 20, + 13783, 17835, 16531, 17465, 22, + 13783, 17835, 16531, 17465, 24, + 13783, 17835, 16531, 17465, 38, + 13783, 17835, 16531, 17465, 42, + 13783, 17835, 16531, 17465, 12366, + 13783, 17835, 16531, 17465, 18305, 12, + 13783, 17835, 16531, 17653, 6, + 13783, 17835, 16531, 18213, 0, + 13783, 17835, 16531, 18213, 16, + 13783, 17835, 16531, 18213, 40, + 13783, 17835, 16531, 18213, 10696, + 13783, 17835, 16531, 18305, 6, + 13783, 17835, 16531, 18305, 10, + 13783, 17835, 16531, 18305, 12, + 13783, 17835, 16531, 18305, 34, + 13783, 17835, 16531, 18305, 36, + 13783, 17835, 16531, 18305, 38, + 13783, 17835, 16531, 19103, 36, + 13783, 17835, 16531, 19378, + 13783, 17835, 16531, 19419, 66, + 13783, 17835, 16531, 19419, 504, + 13783, 17835, 16531, 19419, 682, + 13783, 17835, 16531, 20587, 5, 11513, 1290, + 13783, 17835, 16531, 20587, 8, + 13783, 17835, 16531, 20587, 7429, 14, + 13783, 17835, 16531, 20587, 9783, 8, + 13783, 17835, 16531, 20604, + 13783, 17835, 16531, 20856, + 13783, 17835, 16531, 21011, 44, + 13783, 17835, 16531, 21164, + 13783, 17835, 16531, 21165, 11513, 12922, + 13783, 17835, 16531, 23015, 50, + 13783, 17835, 16531, 23913, 42, + 13783, 17835, 16531, 23913, 406, + 13783, 17835, 16531, 25767, 880, + 13783, 17835, 16531, 25767, 5482, + 13783, 17835, 20241, 316, + 13783, 17835, 20241, 504, + 13783, 21927, 14911, 16531, 0, + 13783, 21927, 14911, 16531, 8, + 13783, 21927, 14911, 16531, 14, + 13783, 21927, 14911, 16531, 16, + 13783, 21927, 14911, 16531, 18, + 13783, 21927, 14911, 16531, 20, + 13783, 21927, 14911, 16531, 22, + 13783, 21927, 14911, 16531, 24, + 13783, 21927, 14911, 16531, 26, + 13783, 21927, 14911, 16531, 28, + 13783, 21927, 14911, 16531, 30, + 13783, 21927, 14911, 16531, 34, + 13783, 21927, 14911, 16531, 36, + 13783, 21927, 14911, 16531, 38, + 13783, 21927, 14911, 16531, 40, + 13783, 21927, 14911, 16531, 42, + 13783, 21927, 14911, 16531, 46, + 13783, 21927, 14911, 16531, 14756, + 13783, 22431, 16531, 17, 13828, + 13783, 22431, 16531, 17709, 24, + 13783, 22431, 16531, 20163, 24, + 13783, 22431, 16531, 20587, 10, + 13783, 22431, 16531, 20587, 30, + 13783, 22431, 16531, 20659, 16, + 13789, 13422, + 13796, + 13803, 17182, + 13804, + 13807, 3241, 17211, 19574, + 13807, 6093, 13470, + 13807, 7037, 17211, 19574, + 13807, 7037, 18889, 12525, 10690, + 13807, 7059, 18889, 12525, 6380, + 13807, 7059, 18889, 12525, 10690, + 13807, 8281, 20847, 14811, 17811, 20412, + 13807, 10090, + 13807, 12659, 8808, + 13807, 13151, 17211, 19574, + 13807, 13421, 12934, + 13807, 14659, 20847, 14811, 17811, 20412, + 13807, 14782, + 13807, 15117, 18889, 12525, 10690, + 13807, 15453, 17224, + 13807, 17473, 18889, 12525, 10690, + 13807, 19032, + 13807, 20933, 964, + 13811, 10575, 2290, + 13811, 10575, 10370, + 13811, 10575, 21530, + 13811, 10575, 21614, + 13811, 13069, 2760, + 13811, 13069, 3240, + 13811, 13069, 3536, + 13811, 13069, 7036, + 13811, 13069, 7058, + 13811, 13069, 9358, + 13811, 13069, 11824, + 13811, 13069, 13150, + 13811, 13069, 14778, + 13811, 13069, 15116, + 13811, 14911, 16531, 358, + 13811, 14911, 16531, 394, + 13811, 14911, 16531, 426, + 13811, 14911, 16531, 466, + 13811, 14911, 16531, 548, + 13811, 14911, 16531, 598, + 13811, 14911, 16531, 648, + 13811, 14911, 16531, 2574, + 13811, 14911, 16531, 19540, + 13811, 15407, 10575, 0, + 13811, 15407, 10575, 8, + 13811, 15407, 10575, 16, + 13811, 15407, 10575, 28, + 13811, 15407, 10575, 40, + 13811, 15407, 10575, 72, + 13811, 15407, 10575, 96, + 13811, 15407, 10575, 186, + 13811, 15407, 10575, 522, + 13811, 16531, 108, + 13811, 16531, 126, + 13811, 16531, 150, + 13811, 16531, 248, + 13811, 16531, 272, + 13811, 16531, 344, + 13811, 16531, 358, + 13811, 16531, 394, + 13811, 16531, 426, + 13811, 16531, 466, + 13811, 16531, 548, + 13811, 16531, 598, + 13811, 16531, 614, + 13811, 16531, 648, + 13811, 16531, 738, + 13811, 16531, 778, + 13811, 16531, 1000, + 13811, 16531, 1116, + 13811, 16531, 1236, + 13811, 16531, 1588, + 13811, 16531, 1918, + 13811, 16531, 2036, + 13811, 16531, 2574, + 13811, 16531, 2830, + 13811, 16531, 3212, + 13811, 16531, 3286, + 13811, 16531, 3422, + 13811, 16531, 3484, + 13811, 16531, 3892, + 13811, 16531, 7376, + 13811, 20549, 8808, + 13811, 21919, 16531, 598, + 13811, 21919, 16531, 738, + 13811, 21919, 16531, 778, + 13811, 23213, 8808, + 13811, 25969, 16530, + 13821, 20851, 10574, + 13822, + 13825, 7213, 528, + 13825, 7213, 896, + 13825, 7213, 15856, + 13825, 7213, 15857, 11513, 20163, 13600, + 13825, 7213, 20163, 16376, + 13825, 7213, 20163, 16838, + 13832, + 13839, 2761, 16107, 12532, + 13839, 2761, 18951, 12532, + 13839, 7037, 18099, 12532, + 13839, 7429, 897, 15287, 7429, 15453, 15938, + 13839, 7429, 8281, 2761, 18951, 12532, + 13839, 7429, 12532, + 13839, 7429, 13473, 15453, 17224, + 13839, 7429, 14659, 2761, 18951, 12532, + 13839, 7429, 15938, + 13839, 7429, 16637, 14782, + 13839, 7429, 18307, 15453, 15938, + 13839, 7429, 20933, 8321, 11513, 15117, 10985, 13924, + 13839, 8281, 2761, 21881, 12532, + 13839, 8281, 12533, 19791, 13839, 16661, 8281, 661, 13839, 14658, + 13839, 8281, 12533, 19791, 13839, 16661, 8281, 661, 13839, 15900, + 13839, 8281, 12533, 19791, 15287, 8281, 661, 13839, 15900, + 13839, 8281, 12533, 19791, 15287, 8281, 661, 13839, 16661, 14658, + 13839, 8281, 12533, 19791, 15287, 8281, 661, 15287, 16661, 14658, + 13839, 8281, 12533, 19791, 15287, 15901, 661, 13839, 14658, + 13839, 8281, 12533, 19791, 15287, 15901, 661, 13839, 16661, 14658, + 13839, 8281, 12533, 19791, 15287, 15901, 661, 15287, 16661, 14658, + 13839, 8281, 12533, 19791, 15287, 16661, 8281, 661, 13839, 14658, + 13839, 8281, 12533, 19791, 15287, 16661, 8281, 661, 13839, 15900, + 13839, 8281, 12533, 19791, 15287, 16661, 8281, 661, 13839, 16661, 14658, + 13839, 8281, 15982, + 13839, 8281, 16876, + 13839, 8281, 18951, 15938, + 13839, 8281, 19357, 15938, + 13839, 8281, 20051, 2822, + 13839, 8281, 20543, 6997, 11513, 9783, 14030, + 13839, 8281, 20543, 12667, 8108, + 13839, 8281, 20543, 12667, 9836, + 13839, 8281, 20543, 12667, 10180, + 13839, 8281, 20543, 12667, 14596, + 13839, 8281, 20543, 12667, 15816, + 13839, 8281, 20543, 12667, 16470, + 13839, 8281, 20543, 18681, 6996, + 13839, 8281, 20543, 19129, 6996, + 13839, 8281, 20543, 19697, 916, + 13839, 8281, 20543, 20063, 6996, + 13839, 8281, 20543, 20711, 16470, + 13839, 8281, 20543, 22964, + 13839, 8281, 20543, 25816, + 13839, 8281, 20858, + 13839, 8281, 21049, 2822, + 13839, 8281, 22736, + 13839, 8281, 22983, 16637, 14782, + 13839, 8281, 24089, 24193, 12414, + 13839, 12527, 20622, + 13839, 14659, 2761, 21881, 12532, + 13839, 14659, 12533, 19791, 13839, 8281, 661, 13839, 16661, 14658, + 13839, 14659, 12533, 19791, 13839, 8281, 661, 15287, 15900, + 13839, 14659, 12533, 19791, 13839, 8281, 661, 15287, 16661, 14658, + 13839, 14659, 12533, 19791, 13839, 15901, 661, 13839, 16661, 14658, + 13839, 14659, 12533, 19791, 13839, 15901, 661, 15287, 14658, + 13839, 14659, 12533, 19791, 13839, 15901, 661, 15287, 16661, 14658, + 13839, 14659, 12533, 19791, 13839, 16661, 8281, 661, 15287, 14658, + 13839, 14659, 12533, 19791, 13839, 16661, 8281, 661, 15287, 15900, + 13839, 14659, 12533, 19791, 13839, 16661, 8281, 661, 15287, 16661, 14658, + 13839, 14659, 12533, 19791, 15287, 16661, 8281, 661, 15287, 14658, + 13839, 14659, 12533, 19791, 15287, 16661, 8281, 661, 15287, 15900, + 13839, 14659, 14693, 19058, + 13839, 14659, 15975, 11513, 1290, + 13839, 14659, 16876, + 13839, 14659, 18951, 15938, + 13839, 14659, 19357, 15938, + 13839, 14659, 20543, 6997, 11513, 9783, 14030, + 13839, 14659, 20543, 12667, 8108, + 13839, 14659, 20543, 12667, 9836, + 13839, 14659, 20543, 12667, 10180, + 13839, 14659, 20543, 12667, 14596, + 13839, 14659, 20543, 12667, 15816, + 13839, 14659, 20543, 12667, 16470, + 13839, 14659, 20543, 18681, 6996, + 13839, 14659, 20543, 19129, 6996, + 13839, 14659, 20543, 19697, 916, + 13839, 14659, 20543, 20063, 6996, + 13839, 14659, 20543, 20711, 16470, + 13839, 14659, 20543, 22964, + 13839, 14659, 20543, 25816, + 13839, 14659, 20641, 15453, 15938, + 13839, 14659, 20641, 15453, 17224, + 13839, 14659, 20858, + 13839, 14659, 22983, 16637, 14782, + 13839, 14659, 24089, 21119, 12414, + 13839, 14659, 25765, 15453, 17224, + 13839, 14779, 18099, 12532, + 13839, 15117, 18099, 12532, + 13839, 15117, 20547, 8281, 2761, 18951, 12532, + 13839, 15117, 20547, 12532, + 13839, 15117, 20547, 14659, 2761, 18951, 12532, + 13839, 15901, 2761, 18951, 12532, + 13839, 15901, 8281, 2761, 21881, 12532, + 13839, 15901, 8281, 19357, 15938, + 13839, 15901, 14659, 2761, 21881, 12532, + 13839, 15901, 14659, 19357, 15938, + 13839, 16661, 8281, 2761, 21881, 12532, + 13839, 16661, 8281, 19357, 15938, + 13839, 16661, 14659, 2761, 21881, 12532, + 13839, 16661, 14659, 19357, 15938, + 13839, 16661, 15901, 8281, 2761, 21881, 12532, + 13839, 16661, 15901, 14659, 2761, 21881, 12532, + 13839, 22495, 14693, 19058, + 13839, 22983, 2761, 18951, 12532, + 13847, 18094, + 13848, + 13851, 6996, + 13903, 11470, + 13911, 10574, + 13912, + 13919, 8276, + 13929, 18727, 2760, + 13929, 18727, 3240, + 13929, 18727, 3412, + 13929, 18727, 3536, + 13929, 18727, 7036, + 13929, 18727, 7058, + 13929, 18727, 9358, + 13929, 18727, 11824, + 13929, 18727, 13150, + 13929, 18727, 14778, + 13929, 18727, 15116, + 13929, 18727, 16110, + 13929, 18727, 17472, + 13929, 18727, 18148, + 13929, 18727, 19116, + 13929, 18727, 19966, + 13929, 18727, 20052, + 13929, 18727, 20368, + 13929, 18727, 20824, + 13929, 18727, 21854, + 13954, + 13957, 18365, 13069, 2760, + 13957, 18365, 13069, 3240, + 13957, 18365, 13069, 3536, + 13957, 18365, 13069, 7036, + 13957, 18365, 13069, 7058, + 13957, 18365, 13069, 9358, + 13957, 18365, 13069, 13150, + 13957, 18365, 13069, 14778, + 13957, 18365, 13069, 15116, + 13957, 18365, 20777, 8385, 366, + 13957, 18365, 20777, 8387, 358, + 13957, 18365, 20777, 8389, 380, + 13957, 18365, 20777, 8391, 750, + 13957, 18365, 20777, 8393, 738, + 13957, 18365, 20777, 8395, 756, + 13957, 18365, 20777, 8397, 2440, + 13957, 18365, 20777, 8399, 2368, + 13957, 18365, 20777, 8401, 2474, + 13957, 18365, 20777, 8403, 116, + 13957, 18365, 20777, 8405, 108, + 13957, 18365, 20777, 8407, 122, + 13957, 18365, 20777, 8409, 16, + 13957, 18365, 20777, 8411, 0, + 13957, 18365, 20777, 8413, 40, + 13957, 18365, 20777, 8415, 160, + 13957, 18365, 20777, 8417, 150, + 13957, 18365, 20777, 8419, 170, + 13957, 18365, 20777, 8421, 624, + 13957, 18365, 20777, 8423, 614, + 13957, 18365, 20777, 8425, 638, + 13957, 18365, 20777, 8427, 656, + 13957, 18365, 20777, 8429, 648, + 13957, 18365, 20777, 8431, 668, + 13957, 18365, 20777, 8433, 402, + 13957, 18365, 20777, 8435, 394, + 13957, 18365, 20777, 8437, 416, + 13957, 18365, 20777, 8439, 348, + 13957, 18365, 20777, 8441, 344, + 13957, 18365, 20777, 8443, 352, + 13957, 18365, 20777, 8445, 782, + 13957, 18365, 20777, 8447, 778, + 13957, 18365, 20777, 8449, 790, + 13957, 18365, 20777, 8451, 234, + 13957, 18365, 20777, 8453, 228, + 13957, 18365, 20777, 8455, 242, + 13957, 18365, 20777, 8457, 2600, + 13957, 18365, 20777, 8459, 2522, + 13957, 18365, 20777, 8461, 2676, + 13957, 18365, 20777, 8463, 1708, + 13957, 18365, 20777, 8465, 272, + 13957, 18365, 20777, 8467, 1784, + 13957, 18365, 20777, 8469, 9284, + 13957, 18365, 20777, 8471, 8146, + 13957, 18365, 20777, 8473, 754, + 13957, 18365, 20777, 8475, 7688, + 13957, 18365, 20777, 8477, 8824, + 13957, 18365, 20777, 8479, 374, + 13957, 18365, 20777, 8481, 3802, + 13957, 18365, 20777, 8483, 572, + 13957, 18365, 20777, 8485, 554, + 13957, 18365, 20777, 8487, 1714, + 13957, 18365, 20777, 8489, 1736, + 13957, 18365, 20777, 8491, 2290, + 13957, 18365, 20777, 8493, 652, + 13957, 18365, 20777, 8495, 1554, + 13957, 18365, 20777, 8497, 9306, + 13957, 18365, 20777, 8499, 9554, + 13957, 18365, 20777, 8501, 2408, + 13957, 18365, 20777, 8503, 9586, + 13957, 18365, 20777, 8505, 3806, + 13957, 18365, 20777, 8507, 2392, + 13957, 18365, 20777, 8509, 350, + 13957, 18365, 20777, 8511, 2554, + 13957, 18365, 20777, 8513, 2018, + 13957, 18365, 20777, 8515, 566, + 13957, 18365, 20777, 8517, 9218, + 13957, 18365, 20777, 8519, 562, + 13957, 18365, 20777, 8521, 660, + 13957, 18365, 20777, 8523, 1560, + 13957, 18365, 20777, 8525, 7222, + 13957, 18365, 20777, 8527, 2394, + 13957, 18365, 20777, 8529, 398, + 13957, 18365, 20777, 8531, 2118, + 13957, 18365, 20777, 8533, 230, + 13957, 18365, 20777, 8535, 2100, + 13957, 18365, 20777, 8537, 722, + 13957, 18365, 20777, 8539, 1460, + 13957, 18365, 20777, 8541, 628, + 13957, 18365, 20777, 8543, 780, + 13957, 18365, 20777, 8545, 2818, + 13957, 18365, 20777, 8547, 9292, + 13957, 18365, 20777, 8549, 7462, + 13957, 18365, 20777, 8551, 2230, + 13957, 18365, 20777, 8553, 718, + 13957, 18365, 20777, 8555, 8351, 9286, + 13957, 18365, 20777, 8557, 1802, + 13957, 18365, 20777, 8559, 240, + 13957, 18365, 20777, 8561, 1224, + 13957, 18365, 20777, 8563, 9288, + 13957, 18365, 20777, 8565, 3406, + 13957, 18365, 20777, 8567, 2110, + 13957, 18365, 20777, 8569, 7214, + 13957, 18365, 20777, 8571, 2454, + 13957, 18365, 20777, 8573, 362, + 13957, 18365, 20777, 8575, 276, + 13957, 18365, 20777, 8577, 112, + 13957, 18365, 20777, 8579, 9562, + 13957, 18365, 20777, 8581, 548, + 13957, 18365, 20777, 8583, 8, + 13957, 18365, 20777, 8585, 1446, + 13957, 18365, 20777, 8587, 2864, + 13957, 18365, 20777, 8589, 1028, + 13957, 18365, 20777, 8591, 3470, + 13957, 18365, 20777, 8593, 8351, 8830, + 13957, 18365, 20777, 8595, 8351, 14128, + 13957, 18365, 20777, 8597, 1556, + 13957, 18365, 20777, 8599, 2112, + 13957, 18365, 20777, 8601, 3916, + 13957, 18365, 20777, 8603, 8351, 398, + 13957, 18365, 20777, 8605, 248, + 13957, 18365, 20777, 8607, 8150, + 13957, 18365, 20777, 8609, 346, + 13957, 18365, 20777, 8611, 3782, + 13957, 18365, 20777, 8613, 14122, + 13957, 18365, 20777, 8615, 618, + 13957, 18365, 20777, 8617, 2562, + 13957, 18365, 20777, 8619, 744, + 13957, 18365, 20777, 8621, 2550, + 13957, 18365, 20777, 8623, 9290, + 13957, 18365, 20777, 8625, 786, + 13957, 18365, 20777, 8627, 2400, + 13957, 18365, 20777, 8629, 2552, + 13957, 18365, 20777, 8631, 1558, + 13957, 18365, 20777, 8633, 2556, + 13957, 18365, 20777, 8635, 3758, + 13957, 18365, 20777, 8637, 14130, + 13957, 18365, 20777, 8639, 7664, + 13957, 18365, 20777, 8641, 2548, + 13957, 18365, 20777, 8643, 1690, + 13957, 18365, 20777, 8645, 322, + 13957, 18365, 20777, 8647, 2114, + 13957, 18365, 20777, 8649, 1488, + 13957, 18365, 20777, 8651, 9382, + 13957, 18365, 20777, 8653, 322, + 13957, 18365, 20777, 8655, 3258, + 13957, 18365, 20777, 8657, 194, + 13957, 18365, 20777, 8659, 118, + 13957, 18365, 20777, 8661, 3804, + 13957, 18365, 20777, 8663, 288, + 13957, 18365, 20777, 8665, 3954, + 13957, 18365, 20777, 8667, 8351, 2398, + 13957, 18365, 20777, 8669, 3760, + 13957, 18365, 20777, 8671, 3702, + 13957, 18365, 20777, 8673, 2396, + 13957, 18365, 20777, 8675, 9286, + 13957, 18365, 20777, 8677, 28, + 13957, 18365, 20777, 8679, 1562, + 13957, 18365, 20777, 8681, 9372, + 13957, 18365, 20777, 8683, 986, + 13957, 18365, 20777, 8685, 728, + 13957, 18365, 20777, 8687, 2608, + 13957, 18365, 20777, 8689, 412, + 13957, 18365, 20777, 8691, 8994, + 13957, 18365, 20777, 8693, 258, + 13957, 18365, 20777, 8695, 14128, + 13957, 18365, 20777, 8697, 1910, + 13957, 18365, 20777, 8699, 2116, + 13957, 18365, 20777, 8701, 14118, + 13957, 18365, 20777, 8703, 1948, + 13957, 18365, 20777, 8705, 8351, 2394, + 13957, 18365, 20777, 8707, 3200, + 13957, 18365, 20777, 8709, 186, + 13957, 18365, 20777, 8711, 9570, + 13957, 18365, 20777, 8713, 522, + 13957, 18365, 20777, 8715, 7356, + 13957, 18365, 20777, 8717, 7352, + 13957, 18365, 20777, 8719, 264, + 13957, 18365, 20777, 8721, 2634, + 13957, 18365, 20777, 8723, 9598, + 13957, 18365, 20777, 8725, 598, + 13957, 18365, 20777, 8727, 2398, + 13957, 18365, 20777, 8727, 8830, + 13957, 18365, 20777, 8729, 3672, + 13957, 18365, 20777, 8731, 2398, + 13957, 18365, 20777, 8731, 8830, + 13957, 18365, 20777, 8733, 8351, 350, + 13957, 18365, 20777, 8735, 280, + 13957, 18365, 20777, 8737, 14156, + 13957, 18365, 20777, 8739, 204, + 13957, 18365, 20777, 8741, 2130, + 13957, 18365, 20777, 8743, 1286, + 13957, 18365, 20777, 8745, 168, + 13957, 18365, 20777, 8747, 720, + 13957, 18365, 20777, 8749, 8351, 9290, + 13957, 18365, 20777, 8751, 9278, + 13957, 18365, 20777, 8753, 714, + 13957, 18365, 20777, 8755, 292, + 13957, 18365, 20777, 8757, 8836, + 13957, 18365, 20777, 8759, 8824, + 13957, 18365, 20777, 8761, 9000, + 13957, 18365, 20777, 8763, 1564, + 13957, 18365, 20777, 8765, 9200, + 13957, 18365, 20777, 8767, 2616, + 13957, 18365, 20777, 8769, 1782, + 13957, 18365, 20777, 8771, 3794, + 13957, 18365, 20777, 8773, 82, + 13957, 18365, 20777, 8775, 3226, + 13957, 18365, 20777, 8777, 1498, + 13957, 18365, 21127, 16787, 3413, 22044, + 13957, 18365, 21127, 16787, 10904, + 13957, 18365, 21127, 16787, 15068, + 13957, 18365, 21127, 16787, 18281, 22044, + 13957, 18365, 21127, 16787, 20132, + 13957, 18365, 21127, 16787, 20310, + 13957, 18365, 21127, 16787, 22044, + 13968, + 13993, 10574, + 13999, 3754, + 14005, 10574, + 14005, 10575, 323, 20858, + 14005, 10575, 11513, 1291, 12502, + 14005, 10575, 11513, 12923, 12318, + 14005, 10575, 11513, 17037, 6696, + 14005, 10575, 11513, 18137, 6696, + 14005, 15140, + 14017, 954, + 14017, 11513, 15462, + 14020, + 14023, 6096, + 14023, 19050, + 14027, 7070, + 14028, + 14029, 6996, + 14029, 11042, + 14030, + 14037, 15866, + 14038, + 14053, 7041, 10574, + 14053, 14797, 10574, + 14053, 18665, 10574, + 14055, 15147, 20406, + 14055, 15282, + 14055, 15283, 20407, 11513, 1290, + 14055, 15283, 20407, 11513, 9904, + 14055, 15453, 20933, 964, + 14055, 17225, 15283, 20406, + 14055, 17225, 23883, 20406, + 14055, 17881, 1291, 20406, + 14055, 17881, 9905, 20406, + 14055, 17881, 15147, 20406, + 14055, 18529, 528, + 14055, 18529, 896, + 14055, 18932, + 14055, 21148, + 14055, 21928, + 14055, 23882, + 14070, + 14077, 10574, + 14083, 15706, + 14167, 11513, 14968, + 14168, + 14244, + 14255, 6833, 897, 14931, 11489, 12414, + 14255, 6833, 12414, + 14255, 6833, 12415, 897, 14931, 6833, 12414, + 14255, 6833, 12415, 7065, 964, + 14255, 6833, 12415, 11513, 7658, + 14255, 6833, 12415, 19743, 14255, 11489, 12414, + 14255, 6833, 12415, 19743, 14931, 6833, 12414, + 14255, 6833, 12525, 12414, + 14255, 6833, 15453, 12414, + 14255, 6833, 16095, 12414, + 14255, 6833, 20501, 1044, + 14255, 6833, 20501, 8276, + 14255, 6833, 20501, 11391, 8276, + 14255, 6833, 22841, 12414, + 14255, 6833, 28089, 12414, + 14255, 6833, 28089, 12415, 661, 964, + 14255, 11489, 897, 14931, 6833, 12414, + 14255, 11489, 12414, + 14255, 11489, 12415, 661, 8351, 964, + 14255, 11489, 12415, 661, 15974, + 14255, 11489, 12415, 897, 14255, 6833, 12414, + 14255, 11489, 12415, 7065, 964, + 14255, 11489, 12415, 11513, 7658, + 14255, 11489, 12415, 19743, 14255, 6833, 12414, + 14255, 11489, 12525, 12414, + 14255, 11489, 15453, 12414, + 14255, 11489, 16095, 12414, + 14255, 11489, 20501, 1044, + 14255, 11489, 20501, 8276, + 14255, 11489, 20501, 11391, 8276, + 14255, 11489, 22841, 12414, + 14255, 11489, 28089, 12414, + 14255, 11489, 28089, 12415, 661, 964, + 14255, 13597, 14699, 8808, + 14255, 13597, 18951, 8808, + 14255, 13597, 20055, 2761, 7428, + 14255, 13597, 20055, 2761, 16106, + 14255, 13597, 20055, 2761, 18950, + 14255, 13597, 20055, 2761, 21880, + 14255, 13597, 20055, 15117, 20546, + 14255, 13597, 20055, 15117, 22924, + 14255, 13597, 20545, 8808, + 14255, 13597, 23549, 8808, + 14339, 21517, 8808, + 14339, 27246, + 14339, 27248, + 14339, 27250, + 14339, 27252, + 14339, 27254, + 14339, 27256, + 14339, 27258, + 14339, 27260, + 14339, 27262, + 14339, 27264, + 14339, 27266, + 14339, 27268, + 14339, 27270, + 14339, 27272, + 14339, 27274, + 14339, 27276, + 14339, 27278, + 14339, 27280, + 14339, 27282, + 14339, 27284, + 14339, 27286, + 14339, 27288, + 14339, 27290, + 14339, 27292, + 14339, 27294, + 14339, 27296, + 14339, 27298, + 14339, 27300, + 14339, 27302, + 14339, 27304, + 14339, 27306, + 14339, 27308, + 14339, 27310, + 14339, 27312, + 14339, 27314, + 14339, 27316, + 14339, 27318, + 14339, 27320, + 14339, 27322, + 14339, 27324, + 14339, 27326, + 14339, 27328, + 14339, 27330, + 14339, 27332, + 14339, 27334, + 14339, 27336, + 14339, 27338, + 14339, 27340, + 14339, 27342, + 14339, 27344, + 14339, 27346, + 14339, 27348, + 14339, 27350, + 14339, 27352, + 14339, 27354, + 14339, 27356, + 14339, 27358, + 14339, 27360, + 14339, 27362, + 14339, 27364, + 14339, 27366, + 14339, 27368, + 14339, 27370, + 14339, 27372, + 14339, 27374, + 14339, 27376, + 14339, 27378, + 14339, 27380, + 14339, 27382, + 14339, 27384, + 14339, 27386, + 14339, 27388, + 14339, 27390, + 14339, 27392, + 14339, 27394, + 14339, 27396, + 14339, 27398, + 14339, 27400, + 14339, 27402, + 14339, 27404, + 14339, 27406, + 14339, 27408, + 14339, 27410, + 14339, 27412, + 14339, 27414, + 14339, 27416, + 14339, 27418, + 14339, 27420, + 14339, 27422, + 14339, 27424, + 14339, 27426, + 14339, 27428, + 14339, 27430, + 14339, 27432, + 14339, 27434, + 14339, 27436, + 14339, 27438, + 14339, 27440, + 14339, 27442, + 14339, 27444, + 14339, 27446, + 14339, 27448, + 14339, 27450, + 14339, 27452, + 14339, 27454, + 14339, 27456, + 14339, 27458, + 14339, 27460, + 14339, 27462, + 14339, 27464, + 14339, 27466, + 14339, 27468, + 14339, 27470, + 14339, 27472, + 14339, 27474, + 14339, 27476, + 14339, 27478, + 14339, 27480, + 14339, 27482, + 14339, 27484, + 14339, 27486, + 14339, 27488, + 14339, 27490, + 14339, 27492, + 14339, 27494, + 14339, 27496, + 14339, 27498, + 14339, 27500, + 14339, 27502, + 14339, 27504, + 14339, 27506, + 14339, 27508, + 14339, 27510, + 14339, 27512, + 14339, 27514, + 14339, 27516, + 14339, 27518, + 14339, 27520, + 14339, 27522, + 14339, 27524, + 14339, 27526, + 14339, 27528, + 14339, 27530, + 14339, 27532, + 14339, 27534, + 14339, 27536, + 14339, 27538, + 14339, 27540, + 14339, 27542, + 14339, 27544, + 14339, 27546, + 14339, 27548, + 14339, 27550, + 14339, 27552, + 14339, 27554, + 14339, 27556, + 14339, 27558, + 14339, 27560, + 14339, 27562, + 14339, 27564, + 14339, 27566, + 14339, 27568, + 14339, 27570, + 14339, 27572, + 14339, 27574, + 14339, 27576, + 14339, 27578, + 14339, 27580, + 14339, 27582, + 14339, 27584, + 14339, 27586, + 14339, 27588, + 14339, 27590, + 14339, 27592, + 14339, 27594, + 14339, 27596, + 14339, 27598, + 14339, 27600, + 14339, 27602, + 14339, 27604, + 14339, 27606, + 14339, 27608, + 14339, 27610, + 14339, 27612, + 14339, 27614, + 14339, 27616, + 14339, 27618, + 14339, 27620, + 14339, 27622, + 14339, 27624, + 14339, 27626, + 14339, 27628, + 14339, 27630, + 14339, 27632, + 14339, 27634, + 14339, 27636, + 14339, 27638, + 14339, 27640, + 14339, 27642, + 14339, 27644, + 14339, 27646, + 14339, 27648, + 14339, 27650, + 14339, 27652, + 14339, 27654, + 14339, 27656, + 14339, 27658, + 14339, 27660, + 14339, 27662, + 14339, 27664, + 14339, 27666, + 14339, 27668, + 14339, 27670, + 14339, 27672, + 14339, 27674, + 14339, 27676, + 14339, 27678, + 14339, 27680, + 14339, 27682, + 14339, 27684, + 14339, 27686, + 14339, 27688, + 14339, 27690, + 14339, 27692, + 14339, 27694, + 14339, 27696, + 14339, 27698, + 14339, 27700, + 14339, 27702, + 14339, 27704, + 14339, 27706, + 14339, 27708, + 14339, 27710, + 14339, 27712, + 14339, 27714, + 14339, 27716, + 14339, 27718, + 14339, 27720, + 14339, 27722, + 14339, 27724, + 14339, 27726, + 14339, 27728, + 14339, 27730, + 14339, 27732, + 14339, 27734, + 14339, 27736, + 14339, 27738, + 14339, 27740, + 14339, 27742, + 14339, 27744, + 14339, 27746, + 14339, 27748, + 14339, 27750, + 14339, 27752, + 14339, 27754, + 14339, 27756, + 14339, 27758, + 14339, 27760, + 14339, 27762, + 14339, 27764, + 14339, 27766, + 14339, 27768, + 14339, 27770, + 14339, 27772, + 14339, 27774, + 14339, 27776, + 14339, 27778, + 14339, 27780, + 14339, 27782, + 14339, 27784, + 14339, 27786, + 14339, 27788, + 14339, 27790, + 14339, 27792, + 14339, 27794, + 14339, 27796, + 14339, 27798, + 14339, 27800, + 14339, 27802, + 14339, 27804, + 14339, 27806, + 14339, 27808, + 14339, 27810, + 14339, 27812, + 14339, 27814, + 14339, 27816, + 14339, 27818, + 14339, 27820, + 14339, 27822, + 14339, 27824, + 14339, 27826, + 14339, 27828, + 14339, 27830, + 14339, 27832, + 14339, 27834, + 14339, 27836, + 14339, 27838, + 14339, 27840, + 14339, 27842, + 14339, 27844, + 14339, 27846, + 14339, 27848, + 14339, 27850, + 14339, 27852, + 14339, 27854, + 14339, 27856, + 14339, 27858, + 14339, 27860, + 14339, 27862, + 14339, 27864, + 14339, 27866, + 14339, 27868, + 14339, 27870, + 14339, 27872, + 14339, 27874, + 14339, 27876, + 14339, 27878, + 14339, 27880, + 14339, 27882, + 14339, 27884, + 14339, 27886, + 14339, 27888, + 14339, 27890, + 14339, 27892, + 14339, 27894, + 14339, 27896, + 14339, 27898, + 14339, 27900, + 14339, 27902, + 14339, 27904, + 14339, 27906, + 14339, 27908, + 14339, 27910, + 14339, 27912, + 14339, 27914, + 14339, 27916, + 14339, 27918, + 14339, 27920, + 14339, 27922, + 14339, 27924, + 14339, 27926, + 14339, 27928, + 14339, 27930, + 14339, 27932, + 14339, 27934, + 14339, 27936, + 14339, 27938, + 14339, 27940, + 14339, 27942, + 14339, 27944, + 14339, 27946, + 14339, 27948, + 14339, 27950, + 14339, 27952, + 14339, 27954, + 14339, 27956, + 14339, 27958, + 14339, 27960, + 14339, 27962, + 14339, 27964, + 14339, 27966, + 14339, 27968, + 14339, 27970, + 14339, 27972, + 14339, 27974, + 14339, 27976, + 14339, 27978, + 14339, 27980, + 14339, 27982, + 14339, 27984, + 14339, 27986, + 14339, 27988, + 14339, 27990, + 14339, 27992, + 14339, 27994, + 14339, 27996, + 14339, 27998, + 14339, 28000, + 14339, 28002, + 14339, 28004, + 14339, 28006, + 14339, 28008, + 14339, 28010, + 14339, 28012, + 14339, 28014, + 14339, 28016, + 14339, 28018, + 14339, 28020, + 14339, 28022, + 14339, 28024, + 14339, 28026, + 14339, 28028, + 14339, 28030, + 14339, 28032, + 14339, 28034, + 14339, 28036, + 14419, 14933, 8808, + 14419, 16531, 528, + 14419, 16531, 702, + 14419, 16531, 2764, + 14419, 16531, 5468, + 14419, 16531, 6354, + 14419, 16531, 6534, + 14419, 16531, 7340, + 14419, 16531, 7794, + 14419, 16531, 8364, + 14419, 16531, 9004, + 14419, 16531, 9360, + 14419, 16531, 10238, + 14419, 16531, 10380, + 14419, 16531, 11240, + 14419, 16531, 12500, + 14419, 16531, 12644, + 14419, 16531, 13242, + 14419, 16531, 14514, + 14419, 16531, 15148, + 14419, 16531, 17252, + 14419, 16531, 18084, + 14419, 16531, 18086, + 14419, 16531, 18308, + 14419, 16531, 18684, + 14419, 16531, 20914, + 14419, 16531, 23198, + 14419, 18145, 8808, + 14419, 20587, 18145, 8808, + 14425, 2368, + 14425, 12326, + 14425, 15468, + 14426, + 14430, + 14434, + 14441, 73, 16525, 8808, + 14441, 97, 16525, 8808, + 14441, 10575, 14334, + 14441, 10575, 17534, + 14441, 10575, 19408, + 14441, 10575, 19540, + 14441, 10575, 19586, + 14441, 10575, 20422, + 14441, 10575, 23070, + 14441, 13069, 2760, + 14441, 13069, 3240, + 14441, 13069, 3536, + 14441, 13069, 7036, + 14441, 13069, 7058, + 14441, 13069, 9358, + 14441, 13069, 11824, + 14441, 13069, 13150, + 14441, 13069, 14778, + 14441, 13069, 15116, + 14441, 15407, 10575, 8, + 14441, 15407, 10575, 16, + 14441, 15407, 10575, 28, + 14441, 15407, 10575, 40, + 14441, 15407, 10575, 58, + 14441, 15407, 10575, 72, + 14441, 15407, 10575, 96, + 14441, 15407, 10575, 314, + 14441, 15407, 10575, 706, + 14441, 15407, 10575, 19415, 22, + 14441, 15407, 10575, 19415, 34, + 14441, 15407, 10575, 19415, 406, + 14441, 15407, 10575, 19415, 608, + 14441, 16390, + 14441, 16531, 0, + 14441, 16531, 8, + 14441, 16531, 16, + 14441, 16531, 28, + 14441, 16531, 40, + 14441, 16531, 58, + 14441, 16531, 72, + 14441, 16531, 96, + 14441, 16531, 108, + 14441, 16531, 126, + 14441, 16531, 150, + 14441, 16531, 248, + 14441, 16531, 272, + 14441, 16531, 314, + 14441, 16531, 344, + 14441, 16531, 358, + 14441, 16531, 394, + 14441, 16531, 426, + 14441, 16531, 466, + 14441, 16531, 548, + 14441, 16531, 598, + 14441, 16531, 614, + 14441, 16531, 648, + 14441, 16531, 706, + 14441, 16531, 714, + 14441, 16531, 738, + 14441, 16531, 778, + 14441, 16531, 1000, + 14441, 16531, 1116, + 14441, 16531, 1214, + 14441, 16531, 1236, + 14441, 16531, 1588, + 14441, 16531, 1918, + 14441, 16531, 2036, + 14441, 16531, 2278, + 14441, 16531, 2574, + 14441, 16531, 2624, + 14441, 16531, 2698, + 14441, 16531, 2830, + 14441, 16531, 3074, + 14441, 16531, 3118, + 14441, 16531, 3212, + 14441, 16531, 3286, + 14441, 16531, 3422, + 14441, 16531, 3502, + 14441, 16531, 4002, + 14441, 16531, 6572, + 14441, 16531, 11082, + 14441, 16531, 19415, 22, + 14441, 16531, 19415, 34, + 14441, 16531, 19415, 406, + 14441, 16531, 19415, 608, + 14441, 20055, 2761, 7428, + 14441, 20055, 2761, 16106, + 14441, 20055, 2761, 18950, + 14441, 20055, 2761, 21880, + 14441, 20055, 15117, 20546, + 14441, 20055, 15117, 22924, + 14443, 14911, 16531, 0, + 14443, 14911, 16531, 8, + 14443, 14911, 16531, 16, + 14443, 14911, 16531, 28, + 14443, 14911, 16531, 40, + 14443, 14911, 16531, 70, + 14443, 14911, 16531, 72, + 14443, 14911, 16531, 272, + 14443, 14911, 16531, 358, + 14443, 14911, 16531, 394, + 14443, 14911, 16531, 426, + 14443, 14911, 16531, 466, + 14443, 14911, 16531, 548, + 14443, 14911, 16531, 614, + 14443, 14911, 16531, 648, + 14443, 14911, 16531, 738, + 14443, 14911, 16531, 796, + 14443, 14911, 16531, 880, + 14443, 14911, 16531, 1040, + 14443, 14911, 16531, 1116, + 14443, 14911, 16531, 1236, + 14443, 14911, 16531, 1372, + 14443, 14911, 16531, 1588, + 14443, 14911, 16531, 1828, + 14443, 14911, 16531, 2036, + 14443, 14911, 16531, 2180, + 14443, 14911, 16531, 2754, + 14443, 14911, 16531, 3212, + 14443, 14911, 16531, 3488, + 14443, 14911, 16531, 4042, + 14443, 14911, 16531, 6840, + 14443, 14911, 16531, 6842, + 14443, 14911, 16531, 6844, + 14443, 14911, 16531, 11058, + 14443, 14911, 16531, 13144, + 14443, 14911, 16531, 13146, + 14443, 17835, 16531, 0, + 14443, 17835, 16531, 8, + 14443, 17835, 16531, 16, + 14443, 17835, 16531, 28, + 14443, 17835, 16531, 40, + 14443, 17835, 16531, 70, + 14443, 17835, 16531, 72, + 14443, 17835, 16531, 272, + 14443, 17835, 16531, 358, + 14443, 17835, 16531, 394, + 14443, 17835, 16531, 426, + 14443, 17835, 16531, 466, + 14443, 17835, 16531, 548, + 14443, 17835, 16531, 614, + 14443, 17835, 16531, 648, + 14443, 17835, 16531, 738, + 14443, 17835, 16531, 796, + 14443, 17835, 16531, 880, + 14443, 17835, 16531, 1040, + 14443, 17835, 16531, 1116, + 14443, 17835, 16531, 1236, + 14443, 17835, 16531, 1372, + 14443, 17835, 16531, 1588, + 14443, 17835, 16531, 1828, + 14443, 17835, 16531, 2036, + 14443, 17835, 16531, 2180, + 14443, 17835, 16531, 2754, + 14443, 17835, 16531, 3212, + 14443, 17835, 16531, 3488, + 14443, 17835, 16531, 4042, + 14443, 17835, 16531, 6840, + 14443, 17835, 16531, 6842, + 14443, 17835, 16531, 6844, + 14443, 17835, 16531, 11058, + 14443, 17835, 16531, 13144, + 14443, 17835, 16531, 13146, + 14450, + 14455, 10574, + 14468, + 14470, + 14475, 699, 20842, + 14479, 6996, + 14485, 16954, + 14503, 17298, + 14504, + 14525, 6670, + 14545, 507, 19446, + 14545, 507, 20159, 10574, + 14556, + 14557, 7057, 3536, + 14557, 7057, 7036, + 14557, 7057, 7058, + 14557, 7057, 15116, + 14564, + 14567, 10574, + 14569, 521, 17298, + 14569, 14895, 17298, + 14569, 16811, 17298, + 14569, 17298, + 14570, + 14573, 17087, 17298, + 14580, + 14616, + 14617, 15862, + 14628, + 14632, + 14656, + 14659, 897, 13839, 2761, 16107, 12532, + 14659, 897, 15287, 2761, 16107, 12532, + 14659, 917, 23853, 17810, + 14659, 2301, 22749, 17810, + 14659, 2761, 16107, 12532, + 14659, 2761, 18951, 12532, + 14659, 7031, 10856, + 14659, 7037, 18099, 12532, + 14659, 7429, 897, 8281, 7429, 15453, 15938, + 14659, 7429, 12525, 10690, + 14659, 7429, 12525, 15938, + 14659, 7429, 12532, + 14659, 7429, 13839, 2761, 18951, 12532, + 14659, 7429, 15287, 2761, 18951, 12532, + 14659, 7429, 15453, 18108, + 14659, 7429, 16203, 17076, + 14659, 7429, 16206, + 14659, 7429, 16637, 14782, + 14659, 7429, 17435, 6545, 22494, + 14659, 7429, 19023, 2368, + 14659, 7429, 22495, 8321, 11513, 15117, 10985, 13924, + 14659, 7433, 22031, 20556, + 14659, 9783, 19165, 1290, + 14659, 10850, + 14659, 12375, 15850, + 14659, 12378, + 14659, 12379, 11513, 916, + 14659, 12379, 11513, 21349, 17625, 12414, + 14659, 12379, 16093, 24149, 16614, + 14659, 12379, 17810, + 14659, 12379, 17811, 11513, 1290, + 14659, 12379, 19395, 11513, 17224, + 14659, 12379, 24149, 16614, + 14659, 12415, 11513, 14911, 15938, + 14659, 12415, 11513, 17881, 9904, + 14659, 12525, 20847, 14811, 17810, + 14659, 12525, 22537, 17810, + 14659, 12941, 17810, + 14659, 12941, 17811, 13839, 7658, + 14659, 12941, 17811, 15287, 7658, + 14659, 12941, 17811, 16661, 14532, + 14659, 13270, + 14659, 14457, 7904, + 14659, 14779, 18099, 12532, + 14659, 15109, 15453, 14659, 20501, 13594, + 14659, 15109, 20150, + 14659, 15117, 18099, 12532, + 14659, 15117, 20547, 12532, + 14659, 15117, 20547, 13839, 2761, 18951, 12532, + 14659, 15117, 20547, 15287, 2761, 18951, 12532, + 14659, 15453, 12941, 17810, + 14659, 15453, 15975, 17810, + 14659, 15453, 17225, 17810, + 14659, 15453, 20847, 14811, 17810, + 14659, 15453, 22537, 17810, + 14659, 15453, 23522, + 14659, 15975, 17810, + 14659, 16093, 24149, 17810, + 14659, 16095, 12379, 17810, + 14659, 16095, 12415, 11513, 19019, 7460, + 14659, 16095, 17571, 13246, + 14659, 16095, 21779, 8808, + 14659, 16095, 23522, + 14659, 16761, 16151, 22851, 18932, + 14659, 17007, 20401, 17810, + 14659, 17171, 21779, 8808, + 14659, 17203, 15850, + 14659, 17225, 17810, + 14659, 17225, 17811, 11513, 10985, 323, 3473, 15974, + 14659, 17225, 17811, 11513, 10985, 323, 15827, 15974, + 14659, 17225, 17811, 11513, 14600, + 14659, 17225, 17811, 11513, 16095, 17264, + 14659, 17225, 17811, 11513, 17264, + 14659, 17225, 17811, 11513, 20920, + 14659, 17225, 17811, 13839, 15974, + 14659, 17225, 17811, 15287, 15974, + 14659, 17225, 17811, 21382, + 14659, 17571, 13246, + 14659, 17848, + 14659, 19150, + 14659, 19151, 11513, 2761, 14929, 11472, + 14659, 19151, 11513, 15117, 14929, 15440, + 14659, 19277, 15850, + 14659, 20601, 955, 21178, + 14659, 20659, 41, 17810, + 14659, 20847, 14811, 17810, + 14659, 20858, + 14659, 20859, 12319, 8281, 20858, + 14659, 20933, 965, 11513, 14600, + 14659, 20933, 1037, 8320, + 14659, 20933, 14693, 19058, + 14659, 21527, 8281, 7429, 12525, 15938, + 14659, 21527, 8281, 7429, 15453, 15938, + 14659, 22851, 18932, + 14659, 22983, 2761, 18951, 12532, + 14659, 23522, + 14659, 23523, 13839, 7658, + 14659, 23523, 15287, 7658, + 14659, 23523, 21382, + 14659, 24149, 17810, + 14659, 25959, 17810, + 14671, 6996, + 14675, 93, 10574, + 14675, 15279, 10574, + 14675, 17997, 19077, 10574, + 14675, 18727, 2760, + 14675, 18727, 2761, 18280, + 14675, 18727, 2761, 18281, 20828, + 14675, 18727, 2761, 20828, + 14675, 18727, 2761, 20829, 5, 6, + 14675, 18727, 3240, + 14675, 18727, 3241, 8267, 7056, + 14675, 18727, 3412, + 14675, 18727, 3413, 20828, + 14675, 18727, 3536, + 14675, 18727, 7036, + 14675, 18727, 7037, 18280, + 14675, 18727, 7037, 20828, + 14675, 18727, 7058, + 14675, 18727, 9358, + 14675, 18727, 13150, + 14675, 18727, 13254, + 14675, 18727, 13255, 13139, 7056, + 14675, 18727, 13255, 20828, + 14675, 18727, 14778, + 14675, 18727, 15116, + 14675, 18727, 16110, + 14675, 18727, 17472, + 14675, 18727, 20587, 2761, 18280, + 14675, 19073, 10574, + 14675, 19077, 10574, + 14675, 19105, 10574, + 14675, 19781, 10574, + 14675, 20635, 10574, + 14675, 21099, 10574, + 14675, 21353, 10574, + 14675, 21777, 10574, + 14675, 22857, 10574, + 14677, 17326, + 14677, 18946, + 14687, 10574, + 14689, 20042, + 14697, 12935, 23554, + 14697, 15729, 17298, + 14697, 16531, 4, + 14697, 16531, 6, + 14697, 16531, 8, + 14697, 16531, 12, + 14697, 16531, 20, + 14697, 16531, 28, + 14697, 16531, 32, + 14697, 16531, 42, + 14697, 16531, 44, + 14697, 16531, 46, + 14697, 16531, 48, + 14697, 16531, 50, + 14697, 16531, 63, 0, + 14697, 16531, 504, + 14697, 16531, 520, + 14697, 16531, 522, + 14697, 16531, 531, 28, + 14697, 16531, 622, + 14697, 16531, 788, + 14697, 16531, 1108, + 14697, 16531, 1352, + 14697, 16531, 1394, + 14697, 16531, 1422, + 14697, 16531, 1546, + 14697, 16531, 1572, + 14697, 16531, 1876, + 14697, 16531, 1886, + 14697, 16531, 5460, + 14697, 16531, 6210, + 14697, 16531, 7011, 7015, 231, 10, + 14697, 16531, 7237, 7383, 12, + 14697, 16531, 7823, 333, 1895, 16, + 14697, 16531, 7831, 1402, + 14697, 16531, 8013, 20, + 14697, 16531, 10688, + 14697, 16531, 11265, 703, 40, + 14697, 16531, 12359, 13170, + 14697, 16531, 12391, 0, + 14697, 16531, 12638, + 14697, 16531, 13003, 6529, 6, + 14697, 16531, 13149, 193, 8, + 14697, 16531, 13447, 14, + 14697, 16531, 13611, 18, + 14697, 16531, 13662, + 14697, 16531, 14621, 3033, 10113, 34, + 14697, 16531, 14867, 28061, 36, + 14697, 16531, 15159, 3447, 3549, 38, + 14697, 16531, 15483, 11551, 44, + 14697, 16531, 16223, 15889, 62, + 14697, 16531, 16223, 15889, 192, + 14697, 16531, 16223, 15889, 332, + 14697, 16531, 16223, 15889, 530, + 14697, 16531, 16223, 15889, 5460, + 14697, 16531, 16303, 14, + 14697, 16531, 16370, + 14697, 16531, 16515, 8247, 8347, 22, + 14697, 16531, 16603, 2369, 24, + 14697, 16531, 16703, 2701, 9151, 26, + 14697, 16531, 16814, + 14697, 16531, 16893, 16883, 30, + 14697, 16531, 17195, 36, + 14697, 16531, 17948, + 14697, 16531, 18771, 13195, 28, + 14697, 16531, 19609, 12509, 17779, 2, + 14697, 16531, 19934, + 14697, 16531, 19936, + 14697, 16531, 19938, + 14697, 16531, 20835, 15123, 15114, + 14697, 16531, 23872, + 14697, 16531, 25935, 0, + 14697, 16531, 25936, + 14697, 16531, 26125, 66, + 14697, 16531, 26126, + 14697, 16531, 26171, 28, + 14697, 16531, 26173, 36, + 14697, 16531, 26175, 38, + 14697, 16531, 28059, 28, + 14697, 16531, 28077, 24, + 14697, 16531, 28079, 26, + 14697, 16531, 36197, 24, + 14697, 16531, 36267, 14, + 14697, 16531, 36289, 14, + 14697, 16531, 36309, 2, + 14697, 17171, 23554, + 14697, 19607, 17298, + 14697, 20341, 23554, + 14697, 20899, 17298, + 14699, 10574, + 14754, + 14764, + 14794, + 14804, + 14837, 699, 10850, + 14837, 699, 10851, 11513, 20920, + 14837, 699, 10851, 12319, 14837, 6701, 10850, + 14837, 6063, 12415, 20501, 21349, 10943, 14255, 6832, + 14837, 6701, 10850, + 14837, 6701, 10851, 11513, 18778, + 14837, 8281, 10850, + 14837, 19121, 14255, 12414, + 14837, 22837, 12415, 12319, 21557, 12414, + 14837, 23063, 14931, 12414, + 14844, + 14882, + 14886, + 14887, 897, 22248, + 14888, + 14897, 507, 14542, + 14904, + 14906, + 14911, 203, 6544, + 14911, 3537, 6697, 9787, 2761, 1291, 23554, + 14911, 3673, 11513, 20920, + 14911, 6093, 17988, + 14911, 7073, 10696, + 14911, 8281, 12941, 17810, + 14911, 8281, 20847, 14811, 17810, + 14911, 8281, 23522, + 14911, 9905, 10574, + 14911, 12916, + 14911, 12922, + 14911, 14659, 12941, 17810, + 14911, 14659, 20847, 14811, 17810, + 14911, 14659, 23522, + 14911, 14675, 18727, 2760, + 14911, 14675, 18727, 2761, 18280, + 14911, 14675, 18727, 2761, 20828, + 14911, 14675, 18727, 3240, + 14911, 14675, 18727, 3412, + 14911, 14675, 18727, 3536, + 14911, 14675, 18727, 7036, + 14911, 14675, 18727, 7037, 18280, + 14911, 14675, 18727, 7058, + 14911, 14675, 18727, 9358, + 14911, 14675, 18727, 13150, + 14911, 14675, 18727, 13254, + 14911, 14675, 18727, 14778, + 14911, 14675, 18727, 15116, + 14911, 14675, 18727, 16110, + 14911, 14675, 18727, 17472, + 14911, 15140, + 14911, 16067, 10574, + 14911, 16121, 10574, + 14911, 16787, 10574, + 14911, 16821, 17988, + 14911, 18107, 506, + 14911, 18107, 507, 11513, 18778, + 14911, 18107, 507, 11513, 20933, 965, 95, 1393, 507, 22495, 17264, + 14911, 18841, 10574, + 14911, 18999, 19140, + 14911, 19518, + 14911, 19574, + 14911, 19727, 93, 16642, + 14911, 19727, 11513, 18778, + 14911, 19727, 11513, 20933, 965, 95, 1393, 507, 22495, 17264, + 14911, 20549, 8808, + 14911, 21006, + 14911, 21559, 10574, + 14911, 21844, + 14911, 22225, 94, + 14911, 23213, 8808, + 14911, 23259, 12922, + 14911, 23721, 19518, + 14911, 23853, 10574, + 14911, 23868, + 14913, 18932, + 14916, + 14918, + 14920, + 14924, + 14927, 14603, 17225, 20412, + 14927, 14603, 17225, 20413, 323, 12525, 17224, + 14929, 21789, 21150, + 14931, 6833, 12414, + 14931, 6833, 12415, 661, 15974, + 14931, 6833, 12415, 897, 14931, 11489, 12414, + 14931, 6833, 12415, 7065, 964, + 14931, 6833, 12415, 11513, 7658, + 14931, 6833, 12415, 19743, 14255, 6833, 12414, + 14931, 6833, 12525, 12414, + 14931, 6833, 15453, 12414, + 14931, 6833, 16095, 12414, + 14931, 6833, 20501, 1044, + 14931, 6833, 20501, 8276, + 14931, 6833, 20501, 11391, 8276, + 14931, 6833, 22841, 12414, + 14931, 6833, 28089, 12414, + 14931, 6833, 28089, 12415, 661, 964, + 14931, 11489, 12414, + 14931, 11489, 12415, 897, 14255, 11489, 12414, + 14931, 11489, 12415, 7065, 964, + 14931, 11489, 12415, 11513, 7658, + 14931, 11489, 12525, 12414, + 14931, 11489, 15453, 12414, + 14931, 11489, 16095, 12414, + 14931, 11489, 20501, 1044, + 14931, 11489, 20501, 8276, + 14931, 11489, 20501, 11391, 8276, + 14931, 11489, 22841, 12414, + 14931, 11489, 28089, 12414, + 14931, 11489, 28089, 12415, 661, 964, + 14932, + 14947, 507, 17376, + 14948, + 14951, 12525, 22837, 12414, + 14952, + 14963, 507, 16334, + 14963, 507, 23034, + 14973, 22544, + 14975, 16168, + 14975, 16169, 11513, 5527, 17006, + 14975, 16169, 11513, 13102, + 14975, 16169, 18503, 8280, + 14975, 16169, 18503, 14658, + 14981, 12656, + 14992, + 15006, + 15013, 21007, 20412, + 15023, 6544, + 15026, + 15045, 17353, 16851, 897, 5978, + 15047, 10575, 14334, + 15047, 10575, 17534, + 15047, 10575, 19408, + 15047, 10575, 19540, + 15047, 13069, 2760, + 15047, 13069, 3240, + 15047, 13069, 3536, + 15047, 13069, 7036, + 15047, 13069, 7058, + 15047, 13069, 9358, + 15047, 13069, 11824, + 15047, 13069, 13150, + 15047, 13069, 14778, + 15047, 13069, 15116, + 15047, 15407, 10575, 8, + 15047, 15407, 10575, 16, + 15047, 15407, 10575, 28, + 15047, 15407, 10575, 40, + 15047, 15407, 10575, 58, + 15047, 15407, 10575, 72, + 15047, 15407, 10575, 96, + 15047, 15407, 10575, 314, + 15047, 15407, 10575, 706, + 15047, 16531, 0, + 15047, 16531, 8, + 15047, 16531, 16, + 15047, 16531, 28, + 15047, 16531, 40, + 15047, 16531, 58, + 15047, 16531, 72, + 15047, 16531, 96, + 15047, 16531, 108, + 15047, 16531, 126, + 15047, 16531, 150, + 15047, 16531, 248, + 15047, 16531, 272, + 15047, 16531, 314, + 15047, 16531, 344, + 15047, 16531, 358, + 15047, 16531, 394, + 15047, 16531, 426, + 15047, 16531, 466, + 15047, 16531, 548, + 15047, 16531, 598, + 15047, 16531, 614, + 15047, 16531, 648, + 15047, 16531, 706, + 15047, 16531, 714, + 15047, 16531, 778, + 15047, 16531, 1000, + 15047, 16531, 1116, + 15047, 16531, 1214, + 15047, 16531, 1236, + 15047, 16531, 1588, + 15047, 16531, 1918, + 15047, 16531, 2036, + 15047, 16531, 2574, + 15047, 16531, 2624, + 15047, 16531, 2698, + 15047, 16531, 2830, + 15047, 16531, 3118, + 15047, 16531, 3212, + 15047, 16531, 3422, + 15047, 16531, 3502, + 15047, 16531, 6572, + 15047, 16531, 11082, + 15047, 16531, 17709, 2036, + 15047, 23737, 10574, + 15049, 8809, 2760, + 15049, 8809, 7036, + 15053, 93, 12319, 10574, + 15053, 97, 16525, 8808, + 15053, 323, 22781, 10574, + 15053, 518, + 15053, 897, 2739, 10574, + 15053, 1213, 10574, + 15053, 1295, 23107, 10574, + 15053, 3769, 23107, 10574, + 15053, 8259, 10574, + 15053, 10387, 2795, 10574, + 15053, 10575, 2560, + 15053, 10575, 2862, + 15053, 10575, 11366, + 15053, 10575, 13642, + 15053, 10575, 13742, + 15053, 10575, 14476, + 15053, 10575, 15904, + 15053, 10575, 16484, + 15053, 10575, 16848, + 15053, 10575, 17534, + 15053, 10575, 19386, + 15053, 10575, 19408, + 15053, 10575, 19540, + 15053, 10575, 20464, + 15053, 10575, 20926, + 15053, 10575, 20982, + 15053, 10575, 21612, + 15053, 10575, 21616, + 15053, 10575, 23008, + 15053, 10575, 23350, + 15053, 11673, 10574, + 15053, 13049, 10574, + 15053, 13069, 2760, + 15053, 13069, 3240, + 15053, 13069, 3536, + 15053, 13069, 7036, + 15053, 13069, 7058, + 15053, 13069, 9358, + 15053, 13069, 11824, + 15053, 13069, 13150, + 15053, 13069, 14778, + 15053, 13069, 15116, + 15053, 14019, 10574, + 15053, 14699, 10574, + 15053, 14939, 10574, + 15053, 15187, 10574, + 15053, 15407, 10575, 8, + 15053, 15407, 10575, 16, + 15053, 15407, 10575, 28, + 15053, 15407, 10575, 40, + 15053, 15407, 10575, 58, + 15053, 15407, 10575, 72, + 15053, 15407, 10575, 96, + 15053, 15407, 10575, 186, + 15053, 15407, 10575, 314, + 15053, 15407, 10575, 522, + 15053, 15407, 10575, 706, + 15053, 15985, 10574, + 15053, 16531, 0, + 15053, 16531, 8, + 15053, 16531, 16, + 15053, 16531, 28, + 15053, 16531, 40, + 15053, 16531, 58, + 15053, 16531, 72, + 15053, 16531, 96, + 15053, 16531, 126, + 15053, 16531, 186, + 15053, 16531, 272, + 15053, 16531, 314, + 15053, 16531, 344, + 15053, 16531, 358, + 15053, 16531, 394, + 15053, 16531, 426, + 15053, 16531, 466, + 15053, 16531, 522, + 15053, 16531, 548, + 15053, 16531, 598, + 15053, 16531, 614, + 15053, 16531, 648, + 15053, 16531, 706, + 15053, 16531, 714, + 15053, 16531, 778, + 15053, 16531, 2278, + 15053, 16531, 2574, + 15053, 16531, 2624, + 15053, 16531, 2698, + 15053, 16531, 3118, + 15053, 16531, 3212, + 15053, 16531, 3286, + 15053, 16531, 3502, + 15053, 16531, 8342, + 15053, 16531, 9422, + 15053, 16787, 2761, 18280, + 15053, 16787, 2761, 20828, + 15053, 16787, 3412, + 15053, 16787, 10574, + 15053, 17939, 10574, + 15053, 20055, 2761, 13252, + 15053, 20055, 2761, 15082, + 15053, 20055, 2761, 16106, + 15053, 20055, 2761, 16304, + 15053, 20055, 2761, 16306, + 15053, 20055, 2761, 18950, + 15053, 20055, 2761, 20048, + 15053, 20055, 2761, 21358, + 15053, 20055, 2761, 22082, + 15053, 20055, 2761, 23658, + 15053, 20055, 2761, 23660, + 15053, 20055, 2761, 24134, + 15053, 20055, 2761, 25952, + 15053, 20055, 2761, 36358, + 15053, 20055, 2761, 36362, + 15053, 20055, 15117, 20546, + 15053, 20055, 15117, 22406, + 15053, 20055, 15117, 22924, + 15053, 20055, 15117, 22994, + 15053, 20055, 15117, 25938, + 15053, 20055, 23197, 16151, 13704, + 15053, 20713, 7065, 10574, + 15053, 23555, 1393, 507, 10920, + 15053, 23703, 15985, 10574, + 15053, 23703, 16787, 10574, + 15065, 6048, + 15079, 10574, + 15095, 6687, 2643, 13204, + 15095, 16130, + 15109, 14545, 13944, + 15113, 17066, + 15117, 1291, 23554, + 15117, 10101, 8280, + 15117, 10101, 12318, + 15117, 10101, 12502, + 15117, 10101, 14658, + 15117, 13817, 22247, 8280, + 15117, 13817, 22247, 14658, + 15117, 15863, 14028, + 15117, 17203, 17820, + 15117, 18889, 12525, 10690, + 15117, 21557, 15738, + 15117, 21633, 21132, + 15117, 22837, 15738, + 15117, 23091, 16121, 14870, + 15117, 23129, 12378, + 15134, + 15135, 6996, + 15137, 22985, 21886, + 15140, + 15141, 11513, 1291, 12318, + 15141, 11513, 1291, 12502, + 15141, 11513, 10151, 12318, + 15141, 20406, + 15141, 20407, 11513, 1291, 12318, + 15141, 20407, 11513, 17037, 6696, + 15141, 20407, 12319, 21557, 12414, + 15141, 20407, 12319, 22837, 12414, + 15145, 12708, + 15147, 11513, 8281, 7429, 12524, + 15147, 11513, 14659, 7429, 12524, + 15153, 6996, + 15171, 15190, + 15180, + 15187, 17050, + 15197, 8809, 10574, + 15198, + 15206, + 15244, + 15282, + 15283, 11513, 14005, 10574, + 15283, 11513, 18529, 528, + 15283, 11513, 18778, + 15283, 12319, 965, 12319, 23882, + 15283, 12319, 23882, + 15283, 15805, 897, 16401, 11513, 15282, + 15287, 897, 8281, 897, 13839, 22983, 15117, 20547, 12532, + 15287, 897, 13839, 2761, 16107, 12532, + 15287, 897, 13839, 22983, 7429, 12532, + 15287, 897, 14659, 897, 13839, 22983, 15117, 20547, 12532, + 15287, 2761, 16107, 12532, + 15287, 2761, 18951, 12532, + 15287, 7037, 18099, 12532, + 15287, 7429, 8281, 2761, 18951, 12532, + 15287, 7429, 12532, + 15287, 7429, 12533, 897, 13839, 7429, 18307, 16637, 14782, + 15287, 7429, 13473, 15453, 17224, + 15287, 7429, 14659, 2761, 18951, 12532, + 15287, 7429, 15938, + 15287, 7429, 16637, 14782, + 15287, 7429, 18307, 15453, 15938, + 15287, 7429, 18307, 16637, 14783, 897, 13839, 7429, 12532, + 15287, 7429, 20933, 8321, 11513, 15117, 10985, 13924, + 15287, 8281, 529, 13839, 14659, 12941, 17811, 19056, + 15287, 8281, 661, 13839, 14659, 7022, + 15287, 8281, 2761, 21881, 12532, + 15287, 8281, 12533, 19791, 13839, 8281, 661, 13839, 16661, 14658, + 15287, 8281, 12533, 19791, 13839, 8281, 661, 15287, 15900, + 15287, 8281, 12533, 19791, 13839, 8281, 661, 15287, 16661, 14658, + 15287, 8281, 12533, 19791, 13839, 15901, 661, 13839, 16661, 14658, + 15287, 8281, 12533, 19791, 13839, 15901, 661, 15287, 14658, + 15287, 8281, 12533, 19791, 13839, 15901, 661, 15287, 16661, 14658, + 15287, 8281, 12533, 19791, 13839, 16661, 8281, 661, 15287, 14658, + 15287, 8281, 12533, 19791, 13839, 16661, 8281, 661, 15287, 15900, + 15287, 8281, 12533, 19791, 13839, 16661, 8281, 661, 15287, 16661, 14658, + 15287, 8281, 12533, 19791, 15287, 16661, 8281, 661, 15287, 14658, + 15287, 8281, 12533, 19791, 15287, 16661, 8281, 661, 15287, 15900, + 15287, 8281, 15975, 11513, 1290, + 15287, 8281, 18951, 15938, + 15287, 8281, 19357, 15938, + 15287, 8281, 20543, 6997, 11513, 9783, 6882, + 15287, 8281, 20543, 6997, 11513, 15949, 6882, + 15287, 8281, 20543, 12667, 8108, + 15287, 8281, 20543, 12667, 9836, + 15287, 8281, 20543, 12667, 10180, + 15287, 8281, 20543, 12667, 14596, + 15287, 8281, 20543, 12667, 15816, + 15287, 8281, 20543, 12667, 16470, + 15287, 8281, 20543, 19697, 916, + 15287, 8281, 20543, 20711, 16470, + 15287, 8281, 20543, 22964, + 15287, 8281, 20543, 25816, + 15287, 8281, 20858, + 15287, 8281, 22983, 16637, 14782, + 15287, 12527, 20622, + 15287, 14659, 529, 13839, 8281, 12941, 17811, 19056, + 15287, 14659, 661, 13839, 8281, 7022, + 15287, 14659, 2761, 21881, 12532, + 15287, 14659, 12533, 19791, 13839, 16661, 8281, 661, 13839, 14658, + 15287, 14659, 12533, 19791, 13839, 16661, 8281, 661, 13839, 15900, + 15287, 14659, 12533, 19791, 15287, 8281, 661, 13839, 15900, + 15287, 14659, 12533, 19791, 15287, 8281, 661, 13839, 16661, 14658, + 15287, 14659, 12533, 19791, 15287, 8281, 661, 15287, 16661, 14658, + 15287, 14659, 12533, 19791, 15287, 15901, 661, 13839, 14658, + 15287, 14659, 12533, 19791, 15287, 15901, 661, 13839, 16661, 14658, + 15287, 14659, 12533, 19791, 15287, 15901, 661, 15287, 16661, 14658, + 15287, 14659, 12533, 19791, 15287, 16661, 8281, 661, 13839, 14658, + 15287, 14659, 12533, 19791, 15287, 16661, 8281, 661, 13839, 15900, + 15287, 14659, 12533, 19791, 15287, 16661, 8281, 661, 13839, 16661, 14658, + 15287, 14659, 16876, + 15287, 14659, 18951, 15938, + 15287, 14659, 19357, 15938, + 15287, 14659, 20543, 6997, 11513, 9783, 6882, + 15287, 14659, 20543, 6997, 11513, 15949, 6882, + 15287, 14659, 20543, 12667, 8108, + 15287, 14659, 20543, 12667, 9836, + 15287, 14659, 20543, 12667, 10180, + 15287, 14659, 20543, 12667, 14596, + 15287, 14659, 20543, 12667, 15816, + 15287, 14659, 20543, 12667, 16470, + 15287, 14659, 20543, 19697, 916, + 15287, 14659, 20543, 20711, 16470, + 15287, 14659, 20543, 22964, + 15287, 14659, 20543, 25816, + 15287, 14659, 20641, 15453, 15938, + 15287, 14659, 20641, 15453, 17224, + 15287, 14659, 20858, + 15287, 14659, 22983, 16637, 14782, + 15287, 14659, 25765, 15453, 17224, + 15287, 14779, 18099, 12532, + 15287, 15117, 18099, 12532, + 15287, 15117, 20547, 8281, 2761, 18951, 12532, + 15287, 15117, 20547, 12532, + 15287, 15117, 20547, 14659, 2761, 18951, 12532, + 15287, 15901, 2761, 18951, 12532, + 15287, 15901, 8281, 2761, 21881, 12532, + 15287, 15901, 8281, 19357, 15938, + 15287, 15901, 14659, 2761, 21881, 12532, + 15287, 15901, 14659, 19357, 15938, + 15287, 16661, 8281, 2761, 21881, 12532, + 15287, 16661, 8281, 19357, 15938, + 15287, 16661, 14659, 2761, 21881, 12532, + 15287, 16661, 14659, 19357, 15938, + 15287, 16661, 15901, 8281, 2761, 21881, 12532, + 15287, 16661, 15901, 14659, 2761, 21881, 12532, + 15287, 22983, 2761, 18951, 12532, + 15387, 10575, 8351, 19540, + 15387, 10575, 16095, 19541, 23748, + 15387, 10575, 17047, 8351, 19540, + 15387, 10575, 17388, + 15387, 10575, 19015, 23752, + 15387, 10575, 19409, 17496, + 15387, 10575, 19409, 17497, 11513, 10856, + 15387, 10575, 19409, 19224, + 15387, 10575, 19409, 19538, + 15387, 10575, 19409, 19539, 11513, 10856, + 15387, 10575, 19541, 20911, 14042, + 15387, 10575, 19541, 23726, + 15387, 10575, 19541, 23727, 11513, 10856, + 15387, 10575, 19541, 23748, + 15387, 10575, 19541, 23768, + 15387, 10575, 19580, + 15387, 10575, 20117, 8351, 19540, + 15387, 10575, 20587, 19409, 17496, + 15387, 10575, 20587, 19409, 19538, + 15387, 10575, 21642, + 15387, 10575, 23029, 18623, 19224, + 15387, 10575, 23288, + 15387, 10575, 23722, + 15387, 10575, 23752, + 15387, 11033, 1291, 12502, + 15387, 11033, 3537, 6697, 12502, + 15387, 11033, 10151, 12318, + 15387, 11033, 14792, + 15387, 11033, 15117, 6697, 12502, + 15387, 11033, 15877, 12318, + 15387, 11033, 15877, 12502, + 15387, 11033, 16095, 10151, 12318, + 15387, 11033, 16095, 19224, + 15387, 11033, 17435, 19224, + 15387, 11033, 18343, 19538, + 15387, 11033, 18916, + 15387, 11033, 20186, + 15387, 11033, 20591, 20189, 23273, 19224, + 15387, 11033, 23029, 18343, 23273, 19224, + 15387, 11033, 23029, 18343, 23273, 19225, 21836, + 15387, 11033, 23029, 22151, 23273, 19224, + 15387, 11033, 23029, 23273, 19224, + 15387, 11033, 23761, 23273, 19224, + 15392, + 15397, 7204, + 15397, 15866, + 15400, + 15434, + 15437, 9910, + 15437, 11472, + 15437, 15950, + 15437, 17822, + 15443, 1091, 6996, + 15443, 6996, + 15446, + 15450, + 15451, 507, 16042, + 15453, 699, 20501, 13594, + 15453, 699, 20501, 19589, 13594, + 15453, 2592, + 15453, 3310, + 15453, 3311, 11513, 10100, + 15453, 3311, 11513, 14911, 12714, + 15453, 3311, 15801, 12714, + 15453, 3311, 15801, 12715, 11513, 10092, + 15453, 6345, 10726, + 15453, 6701, 20501, 8281, 7433, 13594, + 15453, 6701, 20501, 13594, + 15453, 6701, 20501, 19589, 13594, + 15453, 7038, + 15453, 7039, 11513, 22495, 16661, 12525, 17262, + 15453, 7059, 18889, 6380, + 15453, 7059, 18889, 10690, + 15453, 7437, 14811, 16197, 6672, + 15453, 8281, 8261, 13960, + 15453, 8281, 20501, 13594, + 15453, 8281, 20501, 19589, 13594, + 15453, 8981, 17102, + 15453, 10690, + 15453, 11371, 14911, 17224, + 15453, 12415, 14785, 15459, 2760, + 15453, 12415, 14785, 15459, 3537, 17370, + 15453, 12667, 8108, + 15453, 12667, 8109, 19015, 3537, 18281, 19071, 17974, + 15453, 12667, 8109, 19015, 16745, 17974, + 15453, 12667, 9836, + 15453, 12667, 9837, 19015, 3537, 18281, 19071, 17974, + 15453, 12667, 9837, 19015, 16745, 17974, + 15453, 12667, 10180, + 15453, 12667, 10181, 19015, 3537, 18281, 19071, 17974, + 15453, 12667, 10181, 19015, 16745, 17974, + 15453, 12667, 14596, + 15453, 12667, 14597, 19015, 3537, 18281, 19071, 17974, + 15453, 12667, 14597, 19015, 16745, 17974, + 15453, 12667, 15816, + 15453, 12667, 15817, 19015, 3537, 18281, 19071, 17974, + 15453, 12667, 15817, 19015, 16745, 17974, + 15453, 12667, 16470, + 15453, 12667, 16471, 19015, 2761, 18281, 23695, 17974, + 15453, 12667, 16471, 19015, 3537, 18281, 19071, 17974, + 15453, 12667, 16471, 19015, 3537, 18281, 23711, 17974, + 15453, 12667, 16471, 19015, 15117, 18281, 18149, 17974, + 15453, 12667, 16471, 19015, 16745, 17974, + 15453, 12667, 16471, 19015, 22459, 17974, + 15453, 12667, 17465, 8108, + 15453, 12667, 17465, 9836, + 15453, 12667, 17465, 10180, + 15453, 12667, 17465, 14596, + 15453, 12667, 17465, 15816, + 15453, 12667, 17465, 16470, + 15453, 12667, 22432, + 15453, 12667, 22433, 19015, 16745, 17974, + 15453, 12667, 23296, + 15453, 12667, 23898, + 15453, 12667, 25808, + 15453, 12935, 8808, + 15453, 13470, + 15453, 13471, 10726, + 15453, 13473, 12659, 8808, + 15453, 13473, 19033, 11513, 19019, 17916, + 15453, 13779, 17224, + 15453, 13783, 12934, + 15453, 13839, 8281, 18890, + 15453, 13839, 14659, 18890, + 15453, 14659, 20501, 13594, + 15453, 14659, 20501, 19589, 13594, + 15453, 14831, 14532, + 15453, 14911, 10690, + 15453, 14911, 17224, + 15453, 14911, 18534, + 15453, 14935, 10726, + 15453, 15858, + 15453, 15938, + 15453, 15939, 11513, 1291, 14658, + 15453, 15939, 11513, 3537, 6696, + 15453, 15939, 11513, 6701, 12414, + 15453, 15939, 11513, 13839, 8281, 20542, + 15453, 15939, 11513, 13839, 14659, 20542, + 15453, 15939, 11513, 15287, 8281, 20542, + 15453, 15939, 11513, 15287, 14659, 20542, + 15453, 15939, 22239, 12525, 14911, 15938, + 15453, 16200, + 15453, 16637, 10690, + 15453, 16637, 14911, 17224, + 15453, 16637, 17224, + 15453, 16637, 17988, + 15453, 16637, 18534, + 15453, 17109, 1290, + 15453, 17224, + 15453, 17225, 11513, 13839, 8281, 20542, + 15453, 17225, 11513, 13839, 14659, 20542, + 15453, 17225, 11513, 15287, 8281, 20542, + 15453, 17225, 11513, 15287, 14659, 20542, + 15453, 17225, 11513, 15901, 20933, 8320, + 15453, 17225, 11513, 19019, 17916, + 15453, 17225, 11513, 20933, 21063, 8320, + 15453, 17225, 11513, 21557, 10984, + 15453, 17225, 11513, 22837, 10984, + 15453, 17225, 15862, + 15453, 17225, 22239, 12525, 11371, 14911, 17224, + 15453, 17225, 22239, 12525, 14911, 17224, + 15453, 17225, 22239, 12525, 16637, 17224, + 15453, 17988, + 15453, 17989, 323, 17224, + 15453, 17989, 10726, + 15453, 17989, 11513, 17853, 1290, + 15453, 17989, 22239, 12525, 11371, 14911, 17988, + 15453, 17989, 22239, 12525, 14911, 17988, + 15453, 17989, 22239, 12525, 16637, 17988, + 15453, 18266, + 15453, 18535, 22239, 12525, 14911, 18534, + 15453, 18836, + 15453, 19129, 6996, + 15453, 19361, 8281, 3755, 19308, + 15453, 19949, 2368, + 15453, 19949, 8108, + 15453, 20038, + 15453, 20063, 6996, + 15453, 20472, + 15453, 20549, 8809, 20412, + 15453, 20622, + 15453, 20859, 22239, 14911, 15453, 20858, + 15453, 20933, 964, + 15453, 20933, 18108, + 15453, 20933, 21790, + 15453, 20933, 21791, 11513, 22495, 964, + 15453, 21478, + 15453, 21790, + 15453, 22030, + 15453, 22049, 22030, + 15453, 22052, + 15453, 22495, 18108, + 15453, 23213, 8809, 20412, + 15453, 23721, 14911, 20858, + 15453, 23721, 17866, + 15453, 23721, 20858, + 15453, 23721, 20859, 11513, 1290, + 15453, 25749, 17988, + 15453, 25749, 17989, 11513, 21557, 10984, + 15453, 25749, 17989, 11513, 22837, 10984, + 15453, 25763, 14911, 20858, + 15453, 25763, 20858, + 15453, 25813, 14911, 20858, + 15453, 25813, 18890, + 15453, 25813, 20858, + 15453, 25880, + 15453, 26163, 14911, 20858, + 15453, 26163, 18890, + 15453, 26163, 20472, + 15453, 26163, 20858, + 15467, 20196, + 15468, + 15469, 11513, 12585, 6828, + 15473, 2372, + 15484, + 15540, + 15609, 6996, + 15676, + 15683, 1295, 18601, 13261, 19212, + 15683, 11537, 21851, 1290, + 15683, 11537, 21851, 8320, + 15683, 12659, 8808, + 15683, 16559, 18601, 13261, 19212, + 15683, 16787, 2760, + 15683, 16787, 2761, 18280, + 15683, 16787, 2761, 20828, + 15683, 16787, 3240, + 15683, 16787, 3241, 18280, + 15683, 16787, 3241, 20828, + 15683, 16787, 3412, + 15683, 16787, 3413, 20828, + 15683, 16787, 3536, + 15683, 16787, 3537, 18280, + 15683, 16787, 3537, 20828, + 15683, 16787, 7036, + 15683, 16787, 7037, 18280, + 15683, 16787, 7037, 20828, + 15683, 16787, 7058, + 15683, 16787, 7059, 18280, + 15683, 16787, 7059, 20828, + 15683, 16787, 9358, + 15683, 16787, 9359, 18280, + 15683, 16787, 9359, 20828, + 15683, 16787, 13150, + 15683, 16787, 13151, 18280, + 15683, 16787, 13151, 20828, + 15683, 16787, 13254, + 15683, 16787, 13255, 20828, + 15683, 16787, 13284, + 15683, 16787, 13285, 20828, + 15683, 16787, 14778, + 15683, 16787, 14779, 18280, + 15683, 16787, 14779, 20828, + 15683, 16787, 14876, + 15683, 16787, 14877, 20828, + 15683, 16787, 15116, + 15683, 16787, 15117, 18280, + 15683, 16787, 15117, 20828, + 15683, 16787, 16108, + 15683, 16787, 16109, 20828, + 15683, 16787, 16744, + 15683, 16787, 16745, 20828, + 15683, 16787, 17372, + 15683, 16787, 17373, 20828, + 15683, 16787, 17474, + 15683, 16787, 17475, 20828, + 15683, 16787, 19070, + 15683, 16787, 19071, 20828, + 15683, 17569, 5993, 11258, + 15683, 17569, 13261, 19212, + 15683, 17569, 15109, 19212, + 15683, 17569, 16219, 19212, + 15683, 17569, 17095, 19212, + 15683, 18601, 15109, 19212, + 15683, 18601, 17095, 19212, + 15685, 19310, + 15703, 13177, 529, 13177, 660, + 15703, 13177, 660, + 15703, 13177, 661, 11513, 22223, 15678, + 15708, + 15725, 1393, 507, 5552, + 15725, 1393, 507, 10921, 8808, + 15725, 3054, + 15725, 6549, 21850, + 15725, 7037, 18889, 10690, + 15725, 7073, 10696, + 15725, 7429, 13897, 9787, 13896, + 15725, 8281, 21023, 12318, + 15725, 8281, 21023, 12502, + 15725, 8809, 9439, 16264, + 15725, 8809, 20659, 9439, 16264, + 15725, 9783, 19760, + 15725, 9783, 20006, + 15725, 9783, 20190, + 15725, 10575, 10085, 17675, 5506, + 15725, 10575, 14008, + 15725, 10575, 14722, + 15725, 10575, 14744, + 15725, 10575, 15695, 19570, + 15725, 10575, 17062, + 15725, 10575, 17169, 21006, + 15725, 10575, 17169, 24049, 2408, + 15725, 10575, 22024, + 15725, 10575, 23571, 15694, + 15725, 10575, 23597, 15695, 22122, + 15725, 10857, 20056, + 15725, 11033, 2761, 1291, 12318, + 15725, 11033, 2761, 1291, 12502, + 15725, 11033, 3537, 6697, 12318, + 15725, 11033, 3537, 6697, 12502, + 15725, 11033, 8357, 12318, + 15725, 11033, 8357, 12502, + 15725, 11475, 13457, 12502, + 15725, 12922, + 15725, 12941, 13014, + 15725, 12941, 13240, + 15725, 12941, 13660, + 15725, 12941, 19760, + 15725, 12941, 20006, + 15725, 12941, 20190, + 15725, 13014, + 15725, 13015, 11513, 1290, + 15725, 13015, 16635, 7056, + 15725, 13015, 20171, 7056, + 15725, 13161, 15901, 2301, 10696, + 15725, 13161, 15901, 7521, 10696, + 15725, 13240, + 15725, 13241, 11513, 1291, 12318, + 15725, 13241, 11513, 3537, 6696, + 15725, 13241, 11513, 10150, + 15725, 13241, 16635, 7056, + 15725, 13241, 20171, 7056, + 15725, 13457, 12318, + 15725, 13457, 12502, + 15725, 13660, + 15725, 13661, 11513, 1291, 12502, + 15725, 13661, 16635, 7056, + 15725, 13661, 20171, 7056, + 15725, 13779, 14677, 1291, 12318, + 15725, 13779, 14677, 1291, 12502, + 15725, 13779, 14677, 1291, 16383, 15939, 12502, + 15725, 13779, 15939, 12502, + 15725, 13897, 17550, + 15725, 14520, + 15725, 14545, 507, 17056, + 15725, 14567, 8809, 12318, + 15725, 14659, 21023, 12318, + 15725, 14659, 21023, 12319, 11513, 1290, + 15725, 14659, 21023, 12502, + 15725, 14911, 2301, 3750, + 15725, 14911, 2301, 8850, + 15725, 14911, 2301, 9439, 11513, 13660, + 15725, 14911, 2301, 10418, + 15725, 14911, 2301, 11537, 9970, + 15725, 14911, 2301, 11537, 13896, + 15725, 14911, 2301, 11537, 14730, + 15725, 14911, 2301, 11537, 16366, + 15725, 14911, 2301, 11537, 18312, + 15725, 14911, 2301, 11537, 19254, + 15725, 14911, 3750, + 15725, 14911, 3918, + 15725, 14911, 7521, 880, + 15725, 14911, 7521, 2203, 5482, + 15725, 14911, 7521, 2926, + 15725, 14911, 7521, 3174, + 15725, 14911, 7521, 3372, + 15725, 14911, 7521, 3750, + 15725, 14911, 7521, 3918, + 15725, 14911, 7521, 3919, 15789, 11513, 3537, 6697, 12502, + 15725, 14911, 7521, 4020, + 15725, 14911, 7521, 7848, + 15725, 14911, 7521, 8851, 18303, 7056, + 15725, 14911, 7521, 8851, 20171, 7056, + 15725, 14911, 7521, 9438, + 15725, 14911, 7521, 9439, 11513, 13660, + 15725, 14911, 7521, 10418, + 15725, 14911, 7521, 10575, 14722, + 15725, 14911, 7521, 11537, 2954, + 15725, 14911, 7521, 11537, 3178, + 15725, 14911, 7521, 11537, 14730, + 15725, 14911, 7521, 11537, 15430, + 15725, 14911, 7521, 11537, 15692, + 15725, 14911, 7521, 11537, 15722, + 15725, 14911, 7521, 11537, 17680, + 15725, 14911, 7521, 11537, 19568, + 15725, 14911, 7521, 11537, 23758, + 15725, 14911, 7521, 11812, + 15725, 14911, 7521, 13239, 3918, + 15725, 14911, 7521, 13896, + 15725, 14911, 7521, 15117, 6696, + 15725, 14911, 7521, 18019, 7461, 507, 8054, + 15725, 14911, 7521, 19019, 11824, + 15725, 14911, 7521, 19377, 23573, 11824, + 15725, 14911, 7521, 20045, 16614, + 15725, 14911, 7521, 20241, 2927, 11513, 2203, 11513, 5483, 18558, + 15725, 14911, 7521, 20241, 3175, 11513, 2203, 11513, 5483, 18558, + 15725, 14911, 7521, 20241, 5483, 11513, 2203, 11513, 3918, + 15725, 14911, 7521, 20241, 5483, 11513, 3919, 15788, + 15725, 14911, 13014, + 15725, 14911, 13239, 3918, + 15725, 14911, 13240, + 15725, 14911, 13660, + 15725, 14971, 507, 3133, 201, 7524, + 15725, 15000, + 15725, 15001, 12502, + 15725, 15001, 16635, 7056, + 15725, 15001, 20171, 7056, + 15725, 15407, 10575, 1291, 12502, + 15725, 15407, 10575, 14911, 43, 12318, + 15725, 15407, 10575, 20163, 14911, 43, 12318, + 15725, 16095, 14659, 21023, 12318, + 15725, 16095, 14659, 21023, 12319, 11513, 1290, + 15725, 16531, 8, + 15725, 16531, 9, 13259, 7056, + 15725, 16531, 9, 16635, 7056, + 15725, 16531, 9, 18303, 7056, + 15725, 16531, 9, 20171, 7056, + 15725, 16531, 40, + 15725, 16531, 41, 11513, 13457, 12318, + 15725, 16531, 41, 11513, 13457, 12319, 20171, 7056, + 15725, 16531, 41, 13259, 7056, + 15725, 16531, 41, 20171, 7056, + 15725, 16531, 66, + 15725, 16531, 474, + 15725, 16531, 475, 13259, 7056, + 15725, 16531, 475, 16635, 7056, + 15725, 16531, 475, 18303, 7056, + 15725, 16531, 475, 20171, 7056, + 15725, 16531, 504, + 15725, 16531, 505, 13259, 7056, + 15725, 16531, 505, 20171, 7056, + 15725, 16531, 718, + 15725, 16531, 719, 13259, 7056, + 15725, 16531, 719, 20171, 7056, + 15725, 16531, 790, + 15725, 16531, 791, 13259, 7056, + 15725, 16531, 791, 20171, 7056, + 15725, 16531, 880, + 15725, 16531, 881, 11513, 3537, 6697, 12318, + 15725, 16531, 881, 11513, 3537, 6697, 23011, 12318, + 15725, 16531, 881, 11513, 15117, 6697, 12318, + 15725, 16531, 881, 11513, 15117, 6697, 12502, + 15725, 16531, 881, 11513, 15117, 6697, 20501, 21349, 12318, + 15725, 16531, 881, 13259, 7056, + 15725, 16531, 881, 16635, 7056, + 15725, 16531, 881, 18303, 7056, + 15725, 16531, 881, 20171, 7056, + 15725, 16531, 988, + 15725, 16531, 989, 11513, 1291, 12503, 897, 15117, 6697, 12318, + 15725, 16531, 989, 11513, 3537, 6697, 12503, 897, 1291, 12318, + 15725, 16531, 989, 11513, 13457, 12318, + 15725, 16531, 989, 11513, 14911, 42, + 15725, 16531, 989, 11513, 14911, 43, 12502, + 15725, 16531, 989, 11513, 14911, 8851, 12318, + 15725, 16531, 989, 11513, 15117, 6697, 20501, 19381, 12502, + 15725, 16531, 989, 11513, 15117, 6697, 20501, 19381, 12503, 897, 3537, 6697, 12318, + 15725, 16531, 989, 11513, 15117, 6697, 23867, 12502, + 15725, 16531, 989, 11513, 20163, 14911, 43, 12502, + 15725, 16531, 989, 13259, 7056, + 15725, 16531, 989, 16635, 7056, + 15725, 16531, 989, 18303, 7056, + 15725, 16531, 989, 20171, 7056, + 15725, 16531, 1192, + 15725, 16531, 1193, 11513, 1291, 12502, + 15725, 16531, 1193, 13259, 7056, + 15725, 16531, 1193, 16635, 7056, + 15725, 16531, 1193, 18303, 7056, + 15725, 16531, 1193, 20171, 7056, + 15725, 16531, 1200, + 15725, 16531, 1201, 11513, 1291, 12502, + 15725, 16531, 1201, 11513, 1291, 12503, 897, 14911, 3372, + 15725, 16531, 1201, 11513, 3537, 6697, 23011, 12502, + 15725, 16531, 1201, 11513, 3537, 6697, 23011, 12503, 897, 14911, 3372, + 15725, 16531, 1201, 11513, 7059, 6697, 12318, + 15725, 16531, 1201, 11513, 10150, + 15725, 16531, 1201, 11513, 15117, 6697, 12319, 21348, + 15725, 16531, 1201, 11513, 15117, 6697, 12502, + 15725, 16531, 1201, 11513, 20163, 42, + 15725, 16531, 1201, 11513, 20163, 14911, 43, 12502, + 15725, 16531, 1201, 13259, 7056, + 15725, 16531, 1201, 20171, 7056, + 15725, 16531, 1302, + 15725, 16531, 1303, 13259, 7056, + 15725, 16531, 1303, 20171, 7056, + 15725, 16531, 1462, + 15725, 16531, 1463, 11513, 1291, 12502, + 15725, 16531, 1463, 11513, 1291, 12503, 897, 15117, 6697, 12318, + 15725, 16531, 1463, 11513, 1291, 14033, 12502, + 15725, 16531, 1463, 11513, 3537, 6697, 12502, + 15725, 16531, 1463, 11513, 15117, 6697, 12502, + 15725, 16531, 1463, 11513, 15117, 6697, 20501, 19381, 12502, + 15725, 16531, 1463, 13259, 7056, + 15725, 16531, 1463, 16635, 7056, + 15725, 16531, 1463, 18303, 7056, + 15725, 16531, 1463, 20171, 7056, + 15725, 16531, 1530, + 15725, 16531, 1531, 11513, 3537, 6697, 12502, + 15725, 16531, 1531, 11513, 10150, + 15725, 16531, 1531, 11513, 15117, 6697, 12318, + 15725, 16531, 1531, 11513, 20163, 17264, + 15725, 16531, 1531, 13259, 7056, + 15725, 16531, 1531, 16635, 7056, + 15725, 16531, 1531, 18303, 7056, + 15725, 16531, 1531, 20171, 7056, + 15725, 16531, 1682, + 15725, 16531, 1683, 11513, 3537, 6697, 12318, + 15725, 16531, 1683, 11513, 3537, 6697, 20933, 12318, + 15725, 16531, 1683, 11513, 13457, 12318, + 15725, 16531, 1683, 11513, 14911, 15725, 16531, 3373, 897, 3537, 6696, + 15725, 16531, 1683, 11513, 14911, 15725, 16531, 3373, 12318, + 15725, 16531, 1683, 11513, 14911, 15725, 16531, 3373, 12502, + 15725, 16531, 1683, 11513, 15117, 6697, 12318, + 15725, 16531, 1683, 11513, 15117, 6697, 20501, 19381, 12502, + 15725, 16531, 1683, 11513, 20003, 23751, 13069, 7059, 12502, + 15725, 16531, 1683, 11513, 20163, 14911, 43, 12502, + 15725, 16531, 1683, 13259, 7056, + 15725, 16531, 1683, 16635, 7056, + 15725, 16531, 1683, 18303, 7056, + 15725, 16531, 1683, 20171, 7056, + 15725, 16531, 1710, + 15725, 16531, 1711, 7328, + 15725, 16531, 1711, 7329, 11513, 13457, 12318, + 15725, 16531, 1711, 7329, 13259, 7056, + 15725, 16531, 1711, 7329, 16635, 7056, + 15725, 16531, 1711, 7329, 18303, 7056, + 15725, 16531, 1711, 7329, 20171, 7056, + 15725, 16531, 1711, 11513, 3919, 12318, + 15725, 16531, 1711, 11513, 3919, 12319, 13259, 7056, + 15725, 16531, 1711, 11513, 3919, 12319, 20171, 7056, + 15725, 16531, 1711, 11513, 20163, 42, + 15725, 16531, 1711, 13259, 7056, + 15725, 16531, 1711, 16635, 7056, + 15725, 16531, 1711, 18303, 7056, + 15725, 16531, 1711, 20171, 7056, + 15725, 16531, 1711, 23134, + 15725, 16531, 1711, 23135, 13259, 7056, + 15725, 16531, 1711, 23135, 16635, 7056, + 15725, 16531, 1711, 23135, 18303, 7056, + 15725, 16531, 1711, 23135, 20171, 7056, + 15725, 16531, 1912, + 15725, 16531, 1913, 13259, 7056, + 15725, 16531, 1913, 20171, 7056, + 15725, 16531, 1988, + 15725, 16531, 1989, 11513, 1291, 12318, + 15725, 16531, 1989, 11513, 1291, 12502, + 15725, 16531, 1989, 11513, 3537, 6697, 12318, + 15725, 16531, 1989, 11513, 3537, 6697, 23011, 12502, + 15725, 16531, 1989, 11513, 10150, + 15725, 16531, 1989, 11513, 15117, 6697, 12502, + 15725, 16531, 1989, 13259, 7056, + 15725, 16531, 1989, 16635, 7056, + 15725, 16531, 1989, 18303, 7056, + 15725, 16531, 1989, 20171, 7056, + 15725, 16531, 2202, + 15725, 16531, 2203, 11513, 964, + 15725, 16531, 2203, 11513, 1291, 12318, + 15725, 16531, 2203, 11513, 14911, 42, + 15725, 16531, 2203, 11513, 14911, 15725, 16531, 3373, 12318, + 15725, 16531, 2203, 11513, 15117, 6697, 12318, + 15725, 16531, 2203, 11513, 15117, 6697, 12502, + 15725, 16531, 2203, 11513, 16095, 964, + 15725, 16531, 2203, 13259, 7056, + 15725, 16531, 2203, 16635, 7056, + 15725, 16531, 2203, 18303, 7056, + 15725, 16531, 2203, 20171, 7056, + 15725, 16531, 2301, 5482, + 15725, 16531, 2820, + 15725, 16531, 2821, 11513, 14911, 42, + 15725, 16531, 2821, 11513, 14911, 8851, 12318, + 15725, 16531, 2821, 13259, 7056, + 15725, 16531, 2821, 16635, 7056, + 15725, 16531, 2821, 18303, 7056, + 15725, 16531, 2821, 20171, 7056, + 15725, 16531, 2926, + 15725, 16531, 2927, 11513, 1291, 12318, + 15725, 16531, 2927, 11513, 1291, 12502, + 15725, 16531, 2927, 11513, 1291, 12503, 897, 487, 6697, 12318, + 15725, 16531, 2927, 11513, 15117, 6697, 12318, + 15725, 16531, 2927, 13259, 7056, + 15725, 16531, 2927, 16635, 7056, + 15725, 16531, 2927, 18303, 7056, + 15725, 16531, 2927, 20171, 7056, + 15725, 16531, 3062, + 15725, 16531, 3063, 11513, 1291, 12502, + 15725, 16531, 3063, 11513, 1291, 12503, 897, 1291, 12318, + 15725, 16531, 3063, 11513, 3537, 6697, 12318, + 15725, 16531, 3063, 11513, 3537, 6697, 23011, 12318, + 15725, 16531, 3063, 11513, 7059, 6697, 12318, + 15725, 16531, 3063, 11513, 8356, + 15725, 16531, 3063, 11513, 10150, + 15725, 16531, 3063, 11513, 13457, 12318, + 15725, 16531, 3063, 11513, 14911, 42, + 15725, 16531, 3063, 11513, 14911, 43, 12502, + 15725, 16531, 3063, 11513, 14911, 9439, 12318, + 15725, 16531, 3063, 11513, 14911, 15725, 16531, 3373, 897, 3537, 6696, + 15725, 16531, 3063, 11513, 17264, + 15725, 16531, 3063, 11513, 20163, 42, + 15725, 16531, 3063, 13259, 7056, + 15725, 16531, 3063, 20171, 7056, + 15725, 16531, 3174, + 15725, 16531, 3175, 11513, 3537, 6697, 12502, + 15725, 16531, 3175, 11513, 15117, 6697, 12318, + 15725, 16531, 3175, 11513, 15117, 6697, 12502, + 15725, 16531, 3175, 13259, 7056, + 15725, 16531, 3175, 16635, 7056, + 15725, 16531, 3175, 18303, 7056, + 15725, 16531, 3175, 20171, 7056, + 15725, 16531, 3372, + 15725, 16531, 3373, 11513, 1291, 12502, + 15725, 16531, 3373, 11513, 3537, 6697, 12318, + 15725, 16531, 3373, 11513, 3537, 6697, 23011, 12502, + 15725, 16531, 3373, 11513, 15117, 6697, 12318, + 15725, 16531, 3373, 11513, 15117, 6697, 12502, + 15725, 16531, 3373, 13259, 7056, + 15725, 16531, 3373, 16635, 7056, + 15725, 16531, 3373, 18303, 7056, + 15725, 16531, 3373, 20171, 7056, + 15725, 16531, 3408, + 15725, 16531, 3409, 11513, 10150, + 15725, 16531, 3409, 11513, 14911, 42, + 15725, 16531, 3409, 11513, 14911, 3409, 12318, + 15725, 16531, 3409, 11513, 15117, 6697, 12319, 21348, + 15725, 16531, 3409, 13259, 7056, + 15725, 16531, 3409, 16635, 7056, + 15725, 16531, 3409, 18303, 7056, + 15725, 16531, 3409, 18576, + 15725, 16531, 3409, 18577, 7328, + 15725, 16531, 3409, 18577, 13259, 7056, + 15725, 16531, 3409, 18577, 20171, 7056, + 15725, 16531, 3409, 20171, 7056, + 15725, 16531, 3674, + 15725, 16531, 3675, 13259, 7056, + 15725, 16531, 3675, 16635, 7056, + 15725, 16531, 3675, 18303, 7056, + 15725, 16531, 3675, 20171, 7056, + 15725, 16531, 3750, + 15725, 16531, 3751, 11513, 1291, 12318, + 15725, 16531, 3751, 11513, 1291, 17578, + 15725, 16531, 3751, 11513, 3537, 6697, 12318, + 15725, 16531, 3751, 11513, 10150, + 15725, 16531, 3751, 11513, 13457, 12318, + 15725, 16531, 3751, 11513, 13457, 12319, 13259, 7056, + 15725, 16531, 3751, 11513, 13457, 12319, 20171, 7056, + 15725, 16531, 3751, 11513, 20003, 23751, 13069, 3537, 12318, + 15725, 16531, 3751, 11513, 20003, 23751, 13069, 15117, 12318, + 15725, 16531, 3751, 13259, 7056, + 15725, 16531, 3751, 20171, 7056, + 15725, 16531, 3918, + 15725, 16531, 3919, 11513, 3537, 6697, 12503, 897, 1291, 12318, + 15725, 16531, 3919, 11513, 3537, 6697, 12503, 897, 13457, 12318, + 15725, 16531, 3919, 11513, 3537, 6697, 12503, 897, 14911, 9439, 12318, + 15725, 16531, 3919, 11513, 10856, + 15725, 16531, 3919, 11513, 13457, 12318, + 15725, 16531, 3919, 11513, 13457, 12319, 13259, 7056, + 15725, 16531, 3919, 11513, 13457, 12319, 16635, 7056, + 15725, 16531, 3919, 11513, 13457, 12319, 18303, 7056, + 15725, 16531, 3919, 11513, 13457, 12319, 20171, 7056, + 15725, 16531, 3919, 11513, 14911, 42, + 15725, 16531, 3919, 11513, 15117, 6697, 12502, + 15725, 16531, 3919, 13259, 7056, + 15725, 16531, 3919, 15788, + 15725, 16531, 3919, 15789, 11513, 13457, 12318, + 15725, 16531, 3919, 15789, 11513, 13457, 12319, 13259, 7056, + 15725, 16531, 3919, 15789, 11513, 13457, 12319, 20171, 7056, + 15725, 16531, 3919, 15789, 11513, 20003, 23751, 13069, 3537, 12318, + 15725, 16531, 3919, 15789, 11513, 20003, 23751, 13069, 15117, 12318, + 15725, 16531, 3919, 15789, 13259, 7056, + 15725, 16531, 3919, 15789, 20171, 7056, + 15725, 16531, 3919, 16635, 7056, + 15725, 16531, 3919, 18303, 7056, + 15725, 16531, 3919, 20171, 7056, + 15725, 16531, 4020, + 15725, 16531, 4021, 13259, 7056, + 15725, 16531, 4021, 16635, 7056, + 15725, 16531, 4021, 18303, 7056, + 15725, 16531, 4021, 20171, 7056, + 15725, 16531, 5482, + 15725, 16531, 5483, 11513, 1291, 12318, + 15725, 16531, 5483, 11513, 8281, 16661, 17264, + 15725, 16531, 5483, 11513, 11475, 13457, 12318, + 15725, 16531, 5483, 11513, 11475, 13457, 12502, + 15725, 16531, 5483, 11513, 13457, 12318, + 15725, 16531, 5483, 11513, 13457, 12319, 13259, 7056, + 15725, 16531, 5483, 11513, 13457, 12319, 20171, 7056, + 15725, 16531, 5483, 11513, 13457, 12502, + 15725, 16531, 5483, 11513, 13457, 12503, 13259, 7056, + 15725, 16531, 5483, 11513, 13457, 12503, 20171, 7056, + 15725, 16531, 5483, 11513, 13897, 12318, + 15725, 16531, 5483, 11513, 13897, 12319, 13259, 7056, + 15725, 16531, 5483, 11513, 13897, 12319, 20171, 7056, + 15725, 16531, 5483, 11513, 14659, 16661, 17264, + 15725, 16531, 5483, 11513, 14659, 16661, 17265, 897, 1291, 12318, + 15725, 16531, 5483, 11513, 14659, 16661, 17265, 897, 8281, 10150, + 15725, 16531, 5483, 11513, 19583, 3473, 14659, 13240, + 15725, 16531, 5483, 11513, 19583, 3473, 14659, 13241, 897, 1291, 12318, + 15725, 16531, 5483, 11513, 19583, 3473, 14659, 13241, 897, 8281, 10150, + 15725, 16531, 5483, 11513, 19583, 8281, 13456, + 15725, 16531, 5483, 11513, 19583, 8281, 14677, 1290, + 15725, 16531, 5483, 11513, 19583, 13240, + 15725, 16531, 5483, 11513, 19583, 13660, + 15725, 16531, 5483, 11513, 19583, 14659, 13456, + 15725, 16531, 5483, 11513, 19583, 14659, 14677, 1290, + 15725, 16531, 5483, 11513, 19583, 14677, 1291, 12318, + 15725, 16531, 5483, 11513, 19583, 14677, 1291, 12502, + 15725, 16531, 5483, 11513, 19583, 15827, 14659, 13660, + 15725, 16531, 5483, 11513, 19583, 15827, 14659, 13661, 897, 1291, 12318, + 15725, 16531, 5483, 11513, 19583, 15827, 14659, 13661, 897, 8281, 10150, + 15725, 16531, 5483, 11513, 20003, 23751, 13069, 3537, 12318, + 15725, 16531, 5483, 11513, 20003, 23751, 13069, 15117, 12318, + 15725, 16531, 5483, 13259, 7056, + 15725, 16531, 5483, 15432, + 15725, 16531, 5483, 15433, 13259, 7056, + 15725, 16531, 5483, 15433, 20171, 7056, + 15725, 16531, 5483, 18558, + 15725, 16531, 5483, 18559, 13259, 7056, + 15725, 16531, 5483, 18559, 20171, 7056, + 15725, 16531, 5483, 20171, 7056, + 15725, 16531, 6052, + 15725, 16531, 6053, 13259, 7056, + 15725, 16531, 6053, 16635, 7056, + 15725, 16531, 6053, 18303, 7056, + 15725, 16531, 6053, 20171, 7056, + 15725, 16531, 6556, + 15725, 16531, 6557, 13259, 7056, + 15725, 16531, 6557, 20171, 7056, + 15725, 16531, 6732, + 15725, 16531, 6733, 13259, 7056, + 15725, 16531, 6733, 16635, 7056, + 15725, 16531, 6733, 18303, 7056, + 15725, 16531, 6733, 20171, 7056, + 15725, 16531, 7342, + 15725, 16531, 7354, + 15725, 16531, 7355, 13259, 7056, + 15725, 16531, 7355, 16635, 7056, + 15725, 16531, 7355, 18303, 7056, + 15725, 16531, 7355, 20171, 7056, + 15725, 16531, 7521, 13456, + 15725, 16531, 7521, 13457, 3750, + 15725, 16531, 7521, 13457, 3918, + 15725, 16531, 7521, 13457, 5482, + 15725, 16531, 7848, + 15725, 16531, 7849, 11513, 3537, 6697, 12318, + 15725, 16531, 7849, 11513, 15117, 6697, 12318, + 15725, 16531, 7849, 11513, 15117, 6697, 12502, + 15725, 16531, 7849, 13259, 7056, + 15725, 16531, 7849, 16635, 7056, + 15725, 16531, 7849, 18303, 7056, + 15725, 16531, 7849, 20171, 7056, + 15725, 16531, 8054, + 15725, 16531, 8055, 13259, 7056, + 15725, 16531, 8055, 16635, 7056, + 15725, 16531, 8055, 18303, 7056, + 15725, 16531, 8055, 20171, 7056, + 15725, 16531, 8808, + 15725, 16531, 8850, + 15725, 16531, 8851, 11513, 1291, 12318, + 15725, 16531, 8851, 11513, 1291, 12502, + 15725, 16531, 8851, 11513, 15117, 6697, 12318, + 15725, 16531, 8851, 13259, 7056, + 15725, 16531, 8851, 16635, 7056, + 15725, 16531, 8851, 18303, 7056, + 15725, 16531, 8851, 20171, 7056, + 15725, 16531, 9438, + 15725, 16531, 9439, 11513, 1291, 12502, + 15725, 16531, 9439, 11513, 3537, 6697, 12502, + 15725, 16531, 9439, 11513, 10150, + 15725, 16531, 9439, 11513, 14911, 42, + 15725, 16531, 9439, 11513, 14911, 3372, + 15725, 16531, 9439, 11513, 15117, 6697, 12318, + 15725, 16531, 9439, 11513, 20163, 14911, 42, + 15725, 16531, 9439, 13259, 7056, + 15725, 16531, 9439, 16264, + 15725, 16531, 9439, 16265, 13259, 7056, + 15725, 16531, 9439, 16265, 20171, 7056, + 15725, 16531, 9439, 16635, 7056, + 15725, 16531, 9439, 18303, 7056, + 15725, 16531, 9439, 20171, 7056, + 15725, 16531, 9560, + 15725, 16531, 9561, 13259, 7056, + 15725, 16531, 9561, 16635, 7056, + 15725, 16531, 9561, 18303, 7056, + 15725, 16531, 9561, 20171, 7056, + 15725, 16531, 10192, + 15725, 16531, 10193, 13259, 7056, + 15725, 16531, 10193, 20171, 7056, + 15725, 16531, 10418, + 15725, 16531, 10419, 11513, 1291, 12503, 897, 1291, 12318, + 15725, 16531, 10419, 11513, 3537, 6697, 23011, 12318, + 15725, 16531, 10419, 11513, 7059, 6697, 12318, + 15725, 16531, 10419, 11513, 14911, 15725, 16531, 3373, 897, 3537, 6696, + 15725, 16531, 10419, 11513, 15117, 6697, 12502, + 15725, 16531, 10419, 11513, 15117, 6697, 12503, 897, 15117, 6697, 12318, + 15725, 16531, 10419, 11513, 20003, 23751, 13069, 7059, 12318, + 15725, 16531, 10419, 11513, 20163, 42, + 15725, 16531, 10419, 13259, 7056, + 15725, 16531, 10419, 16635, 7056, + 15725, 16531, 10419, 18303, 7056, + 15725, 16531, 10419, 20171, 7056, + 15725, 16531, 10928, + 15725, 16531, 10929, 13259, 7056, + 15725, 16531, 10929, 20171, 7056, + 15725, 16531, 10940, + 15725, 16531, 10941, 13259, 7056, + 15725, 16531, 10941, 16635, 7056, + 15725, 16531, 10941, 18303, 7056, + 15725, 16531, 10941, 20171, 7056, + 15725, 16531, 10951, 3918, + 15725, 16531, 11080, + 15725, 16531, 11081, 11513, 14911, 42, + 15725, 16531, 11081, 13259, 7056, + 15725, 16531, 11081, 16635, 7056, + 15725, 16531, 11081, 18303, 7056, + 15725, 16531, 11081, 20171, 7056, + 15725, 16531, 11812, + 15725, 16531, 11813, 11513, 20163, 43, 12318, + 15725, 16531, 11813, 13259, 7056, + 15725, 16531, 11813, 20171, 7056, + 15725, 16531, 12498, + 15725, 16531, 12499, 13259, 7056, + 15725, 16531, 12499, 16635, 7056, + 15725, 16531, 12499, 18303, 7056, + 15725, 16531, 12499, 20171, 7056, + 15725, 16531, 13004, + 15725, 16531, 13005, 13259, 7056, + 15725, 16531, 13005, 20171, 7056, + 15725, 16531, 13239, 3918, + 15725, 16531, 13239, 3919, 11513, 3537, 6697, 12318, + 15725, 16531, 13239, 3919, 11513, 15117, 6697, 12318, + 15725, 16531, 13239, 3919, 11513, 20003, 23751, 13069, 3537, 12318, + 15725, 16531, 13239, 3919, 11513, 20003, 23751, 13069, 7059, 12502, + 15725, 16531, 13239, 3919, 11513, 20003, 23751, 13069, 15117, 12318, + 15725, 16531, 13239, 3919, 11513, 20163, 42, + 15725, 16531, 13239, 3919, 13259, 7056, + 15725, 16531, 13239, 3919, 16635, 7056, + 15725, 16531, 13239, 3919, 18303, 7056, + 15725, 16531, 13239, 3919, 20171, 7056, + 15725, 16531, 13370, + 15725, 16531, 13371, 11513, 1291, 12502, + 15725, 16531, 13371, 11513, 15117, 6697, 12318, + 15725, 16531, 13371, 13259, 7056, + 15725, 16531, 13371, 16635, 7056, + 15725, 16531, 13371, 18303, 7056, + 15725, 16531, 13371, 20171, 7056, + 15725, 16531, 13456, + 15725, 16531, 13457, 20171, 7056, + 15725, 16531, 13672, + 15725, 16531, 13673, 11513, 1291, 12318, + 15725, 16531, 13673, 11513, 3537, 6697, 12318, + 15725, 16531, 13673, 11513, 3537, 6697, 23011, 12502, + 15725, 16531, 13673, 11513, 14911, 42, + 15725, 16531, 13673, 11513, 15117, 6697, 12318, + 15725, 16531, 13673, 11513, 15117, 6697, 12502, + 15725, 16531, 13673, 11513, 15117, 6697, 20501, 19381, 12502, + 15725, 16531, 13673, 13259, 7056, + 15725, 16531, 13673, 16635, 7056, + 15725, 16531, 13673, 18303, 7056, + 15725, 16531, 13673, 20171, 7056, + 15725, 16531, 14152, + 15725, 16531, 14153, 13259, 7056, + 15725, 16531, 14153, 16635, 7056, + 15725, 16531, 14153, 18303, 7056, + 15725, 16531, 14153, 20171, 7056, + 15725, 16531, 14512, + 15725, 16531, 14513, 13259, 7056, + 15725, 16531, 14513, 16635, 7056, + 15725, 16531, 14513, 18303, 7056, + 15725, 16531, 14513, 20171, 7056, + 15725, 16531, 14666, + 15725, 16531, 14667, 13259, 7056, + 15725, 16531, 14667, 16635, 7056, + 15725, 16531, 14667, 18303, 7056, + 15725, 16531, 14667, 20171, 7056, + 15725, 16531, 14802, + 15725, 16531, 14803, 11513, 1291, 12502, + 15725, 16531, 14803, 13259, 7056, + 15725, 16531, 14803, 16635, 7056, + 15725, 16531, 14803, 18303, 7056, + 15725, 16531, 14803, 20171, 7056, + 15725, 16531, 15013, 1988, + 15725, 16531, 15060, + 15725, 16531, 15061, 11513, 1291, 12318, + 15725, 16531, 15061, 11513, 14911, 42, + 15725, 16531, 15061, 13259, 7056, + 15725, 16531, 15061, 16635, 7056, + 15725, 16531, 15061, 18303, 7056, + 15725, 16531, 15061, 20171, 7056, + 15725, 16531, 15074, + 15725, 16531, 15075, 13259, 7056, + 15725, 16531, 15075, 16635, 7056, + 15725, 16531, 15075, 18303, 7056, + 15725, 16531, 15075, 20171, 7056, + 15725, 16531, 16020, + 15725, 16531, 16021, 13259, 7056, + 15725, 16531, 16021, 20171, 7056, + 15725, 16531, 17452, + 15725, 16531, 17453, 13259, 7056, + 15725, 16531, 17453, 16635, 7056, + 15725, 16531, 17453, 18303, 7056, + 15725, 16531, 17453, 20171, 7056, + 15725, 16531, 17499, 16423, 18369, 5483, 18559, 16635, 7056, + 15725, 16531, 17499, 16423, 18369, 5483, 18559, 18303, 7056, + 15725, 16531, 17653, 1462, + 15725, 16531, 17653, 2926, + 15725, 16531, 17653, 2927, 11513, 15117, 6697, 12318, + 15725, 16531, 17653, 9438, + 15725, 16531, 18019, 988, + 15725, 16531, 18019, 1462, + 15725, 16531, 18019, 2926, + 15725, 16531, 18369, 504, + 15725, 16531, 18369, 505, 13259, 7056, + 15725, 16531, 18369, 505, 20171, 7056, + 15725, 16531, 18369, 790, + 15725, 16531, 18369, 791, 13259, 7056, + 15725, 16531, 18369, 791, 20171, 7056, + 15725, 16531, 19260, + 15725, 16531, 19261, 13259, 7056, + 15725, 16531, 19261, 16635, 7056, + 15725, 16531, 19261, 18303, 7056, + 15725, 16531, 19261, 20171, 7056, + 15725, 16531, 20189, 3918, + 15725, 16531, 20593, 3918, + 15725, 16531, 20729, 3750, + 15725, 16531, 23679, 5482, + 15725, 16589, 12318, + 15725, 16787, 8809, 12318, + 15725, 16787, 10574, + 15725, 16937, 15391, 10574, + 15725, 17007, 14677, 1290, + 15725, 17116, + 15725, 17117, 16635, 7056, + 15725, 17117, 20171, 7056, + 15725, 17299, 1291, 12318, + 15725, 17299, 1291, 12502, + 15725, 17299, 3537, 6697, 12318, + 15725, 17299, 3537, 6697, 12502, + 15725, 17299, 3537, 6697, 23011, 12318, + 15725, 17299, 3537, 6697, 23011, 12502, + 15725, 17299, 7059, 6697, 12318, + 15725, 17299, 7059, 6697, 12502, + 15725, 17299, 10150, + 15725, 17299, 14911, 3373, 12318, + 15725, 17299, 14911, 3373, 12502, + 15725, 17299, 15117, 6697, 12318, + 15725, 17299, 15117, 6697, 12502, + 15725, 17299, 15117, 6697, 20501, 21349, 12318, + 15725, 17299, 15117, 6697, 20501, 21349, 12502, + 15725, 17299, 15433, 12318, + 15725, 17299, 16095, 20933, 965, 12502, + 15725, 17435, 1291, 23555, 8808, + 15725, 17465, 13015, 12502, + 15725, 17973, 21850, + 15725, 18077, 13896, + 15725, 18841, 10574, + 15725, 18867, 8809, 12318, + 15725, 19019, 7521, 10697, 11513, 16171, 15900, + 15725, 19256, + 15725, 19257, 11513, 3537, 6697, 12502, + 15725, 19257, 11513, 20007, 12318, + 15725, 19257, 11513, 22735, 3750, + 15725, 19257, 11513, 22735, 13456, + 15725, 19601, 14677, 1290, + 15725, 19760, + 15725, 19761, 20171, 7056, + 15725, 19811, 1393, 507, 5552, + 15725, 20006, + 15725, 20007, 20171, 7056, + 15725, 20045, 16614, + 15725, 20163, 13014, + 15725, 20190, + 15725, 20191, 20171, 7056, + 15725, 20241, 881, 11513, 3919, 13259, 7056, + 15725, 20241, 881, 11513, 3919, 20171, 7056, + 15725, 20241, 881, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 881, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 881, 11513, 7849, 11513, 8851, 13259, 7056, + 15725, 20241, 881, 11513, 7849, 11513, 8851, 18303, 7056, + 15725, 20241, 881, 11513, 7849, 18303, 7056, + 15725, 20241, 881, 11513, 7849, 20171, 7056, + 15725, 20241, 881, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 881, 11513, 8851, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 881, 11513, 8851, 11513, 8851, 13259, 7056, + 15725, 20241, 881, 11513, 8851, 11513, 8851, 18303, 7056, + 15725, 20241, 881, 11513, 8851, 18303, 7056, + 15725, 20241, 881, 11513, 8851, 20171, 7056, + 15725, 20241, 989, 11513, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 989, 11513, 1683, 18303, 7056, + 15725, 20241, 989, 11513, 1683, 20171, 7056, + 15725, 20241, 989, 11513, 1711, 16635, 7056, + 15725, 20241, 989, 11513, 1711, 18303, 7056, + 15725, 20241, 989, 11513, 3063, 13259, 7056, + 15725, 20241, 989, 11513, 3919, 13259, 7056, + 15725, 20241, 989, 11513, 3919, 20171, 7056, + 15725, 20241, 989, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 989, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 989, 11513, 7849, 18303, 7056, + 15725, 20241, 989, 11513, 7849, 20171, 7056, + 15725, 20241, 989, 11513, 8055, 11513, 3919, 13259, 7056, + 15725, 20241, 989, 11513, 8055, 18303, 7056, + 15725, 20241, 989, 11513, 8055, 20171, 7056, + 15725, 20241, 989, 11513, 8851, 13259, 7056, + 15725, 20241, 989, 11513, 8851, 16635, 7056, + 15725, 20241, 989, 11513, 8851, 18303, 7056, + 15725, 20241, 989, 11513, 8851, 20171, 7056, + 15725, 20241, 989, 11513, 9439, 13259, 7056, + 15725, 20241, 989, 11513, 11813, 13259, 7056, + 15725, 20241, 1193, 11513, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 1193, 11513, 1683, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 1193, 11513, 1683, 18303, 7056, + 15725, 20241, 1193, 11513, 1683, 20171, 7056, + 15725, 20241, 1193, 11513, 3063, 13259, 7056, + 15725, 20241, 1193, 11513, 3063, 20171, 7056, + 15725, 20241, 1193, 11513, 3919, 13259, 7056, + 15725, 20241, 1193, 11513, 3919, 20171, 7056, + 15725, 20241, 1193, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 1193, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 1193, 11513, 7849, 18303, 7056, + 15725, 20241, 1193, 11513, 7849, 20171, 7056, + 15725, 20241, 1193, 11513, 8055, 11513, 8851, 13259, 7056, + 15725, 20241, 1193, 11513, 8055, 11513, 8851, 18303, 7056, + 15725, 20241, 1193, 11513, 8055, 18303, 7056, + 15725, 20241, 1193, 11513, 8055, 20171, 7056, + 15725, 20241, 1193, 11513, 8851, 18303, 7056, + 15725, 20241, 1193, 11513, 8851, 20171, 7056, + 15725, 20241, 1463, 11513, 1683, 18303, 7056, + 15725, 20241, 1463, 11513, 1683, 20171, 7056, + 15725, 20241, 1463, 11513, 3919, 13259, 7056, + 15725, 20241, 1463, 11513, 3919, 20171, 7056, + 15725, 20241, 1463, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 1463, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 1463, 11513, 7849, 18303, 7056, + 15725, 20241, 1463, 11513, 7849, 20171, 7056, + 15725, 20241, 1463, 11513, 8055, 11513, 8851, 13259, 7056, + 15725, 20241, 1463, 11513, 8055, 11513, 8851, 18303, 7056, + 15725, 20241, 1463, 11513, 8055, 18303, 7056, + 15725, 20241, 1463, 11513, 8055, 20171, 7056, + 15725, 20241, 1463, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 1463, 11513, 8851, 18303, 7056, + 15725, 20241, 1463, 11513, 8851, 20171, 7056, + 15725, 20241, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 1683, 11513, 3919, 20171, 7056, + 15725, 20241, 1683, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 1683, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 1683, 11513, 7849, 11513, 3919, 13259, 7056, + 15725, 20241, 1683, 11513, 7849, 18303, 7056, + 15725, 20241, 1683, 11513, 7849, 20171, 7056, + 15725, 20241, 1683, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 1683, 11513, 8851, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 1683, 11513, 8851, 18303, 7056, + 15725, 20241, 1683, 11513, 8851, 20171, 7056, + 15725, 20241, 1711, 11513, 3919, 20171, 7056, + 15725, 20241, 1711, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 1711, 11513, 7849, 18303, 7056, + 15725, 20241, 1711, 11513, 7849, 20171, 7056, + 15725, 20241, 1711, 11513, 8851, 11513, 7849, 18303, 7056, + 15725, 20241, 1711, 11513, 8851, 11513, 8851, 18303, 7056, + 15725, 20241, 1711, 11513, 8851, 18303, 7056, + 15725, 20241, 1711, 11513, 8851, 20171, 7056, + 15725, 20241, 1711, 11513, 23679, 5483, 18303, 7056, + 15725, 20241, 1989, 11513, 1683, 18303, 7056, + 15725, 20241, 1989, 11513, 1683, 20171, 7056, + 15725, 20241, 1989, 11513, 2203, 13259, 7056, + 15725, 20241, 1989, 11513, 2203, 16635, 7056, + 15725, 20241, 1989, 11513, 2203, 18303, 7056, + 15725, 20241, 1989, 11513, 2203, 20171, 7056, + 15725, 20241, 1989, 11513, 3919, 13259, 7056, + 15725, 20241, 1989, 11513, 3919, 20171, 7056, + 15725, 20241, 1989, 11513, 5483, 13259, 7056, + 15725, 20241, 1989, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 1989, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 1989, 11513, 5483, 20171, 7056, + 15725, 20241, 1989, 11513, 7849, 18303, 7056, + 15725, 20241, 1989, 11513, 7849, 20171, 7056, + 15725, 20241, 1989, 11513, 8055, 18303, 7056, + 15725, 20241, 1989, 11513, 8055, 20171, 7056, + 15725, 20241, 1989, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 1989, 11513, 8851, 11513, 8851, 13259, 7056, + 15725, 20241, 1989, 11513, 8851, 11513, 8851, 18303, 7056, + 15725, 20241, 1989, 11513, 8851, 13259, 7056, + 15725, 20241, 1989, 11513, 8851, 16635, 7056, + 15725, 20241, 1989, 11513, 8851, 18303, 7056, + 15725, 20241, 1989, 11513, 8851, 20171, 7056, + 15725, 20241, 2203, 11513, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 2203, 11513, 1683, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 2203, 11513, 1683, 11513, 8851, 13259, 7056, + 15725, 20241, 2203, 11513, 1683, 11513, 8851, 18303, 7056, + 15725, 20241, 2203, 11513, 1683, 18303, 7056, + 15725, 20241, 2203, 11513, 1683, 20171, 7056, + 15725, 20241, 2203, 11513, 1711, 18303, 7056, + 15725, 20241, 2203, 11513, 3919, 13259, 7056, + 15725, 20241, 2203, 11513, 3919, 20171, 7056, + 15725, 20241, 2203, 11513, 5483, 11513, 13457, 12319, 13259, 7056, + 15725, 20241, 2203, 11513, 5483, 11513, 13457, 12319, 20171, 7056, + 15725, 20241, 2203, 11513, 5483, 11513, 13457, 12503, 13259, 7056, + 15725, 20241, 2203, 11513, 5483, 11513, 13457, 12503, 20171, 7056, + 15725, 20241, 2203, 11513, 5483, 11513, 13897, 12319, 13259, 7056, + 15725, 20241, 2203, 11513, 5483, 11513, 13897, 12319, 20171, 7056, + 15725, 20241, 2203, 11513, 5483, 13259, 7056, + 15725, 20241, 2203, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 2203, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 2203, 11513, 5483, 20171, 7056, + 15725, 20241, 2203, 11513, 7849, 11513, 3919, 13259, 7056, + 15725, 20241, 2203, 11513, 7849, 11513, 7849, 13259, 7056, + 15725, 20241, 2203, 11513, 7849, 11513, 7849, 18303, 7056, + 15725, 20241, 2203, 11513, 7849, 11513, 8851, 13259, 7056, + 15725, 20241, 2203, 11513, 7849, 11513, 8851, 18303, 7056, + 15725, 20241, 2203, 11513, 7849, 18303, 7056, + 15725, 20241, 2203, 11513, 7849, 20171, 7056, + 15725, 20241, 2203, 11513, 8055, 11513, 8851, 13259, 7056, + 15725, 20241, 2203, 11513, 8055, 11513, 8851, 18303, 7056, + 15725, 20241, 2203, 11513, 8055, 18303, 7056, + 15725, 20241, 2203, 11513, 8055, 20171, 7056, + 15725, 20241, 2203, 11513, 8851, 11513, 1683, 13259, 7056, + 15725, 20241, 2203, 11513, 8851, 11513, 1683, 18303, 7056, + 15725, 20241, 2203, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 2203, 11513, 8851, 13259, 7056, + 15725, 20241, 2203, 11513, 8851, 16635, 7056, + 15725, 20241, 2203, 11513, 8851, 18303, 7056, + 15725, 20241, 2203, 11513, 8851, 20171, 7056, + 15725, 20241, 2927, 11513, 1683, 18303, 7056, + 15725, 20241, 2927, 11513, 1683, 20171, 7056, + 15725, 20241, 2927, 11513, 3919, 13259, 7056, + 15725, 20241, 2927, 11513, 3919, 20171, 7056, + 15725, 20241, 2927, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 2927, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 2927, 11513, 8851, 11513, 1683, 13259, 7056, + 15725, 20241, 2927, 11513, 8851, 11513, 1683, 18303, 7056, + 15725, 20241, 2927, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 2927, 11513, 8851, 11513, 8851, 13259, 7056, + 15725, 20241, 2927, 11513, 8851, 18303, 7056, + 15725, 20241, 2927, 11513, 8851, 20171, 7056, + 15725, 20241, 3063, 11513, 23679, 5483, 20171, 7056, + 15725, 20241, 3175, 11513, 1683, 11513, 1683, 13259, 7056, + 15725, 20241, 3175, 11513, 1683, 11513, 1683, 18303, 7056, + 15725, 20241, 3175, 11513, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 3175, 11513, 1683, 18303, 7056, + 15725, 20241, 3175, 11513, 1683, 20171, 7056, + 15725, 20241, 3175, 11513, 3063, 13259, 7056, + 15725, 20241, 3175, 11513, 3063, 20171, 7056, + 15725, 20241, 3175, 11513, 3919, 13259, 7056, + 15725, 20241, 3175, 11513, 3919, 20171, 7056, + 15725, 20241, 3175, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 3175, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 3175, 11513, 8055, 18303, 7056, + 15725, 20241, 3175, 11513, 8851, 11513, 8851, 13259, 7056, + 15725, 20241, 3175, 11513, 8851, 11513, 8851, 18303, 7056, + 15725, 20241, 3175, 11513, 8851, 18303, 7056, + 15725, 20241, 3175, 11513, 8851, 20171, 7056, + 15725, 20241, 3373, 11513, 1683, 18303, 7056, + 15725, 20241, 3373, 11513, 1683, 20171, 7056, + 15725, 20241, 3373, 11513, 3919, 13259, 7056, + 15725, 20241, 3373, 11513, 3919, 20171, 7056, + 15725, 20241, 3373, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 3373, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 3373, 11513, 8851, 11513, 1683, 13259, 7056, + 15725, 20241, 3373, 11513, 8851, 11513, 1683, 18303, 7056, + 15725, 20241, 3373, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 3373, 11513, 8851, 11513, 8851, 18303, 7056, + 15725, 20241, 3373, 11513, 8851, 16635, 7056, + 15725, 20241, 3373, 11513, 8851, 18303, 7056, + 15725, 20241, 3373, 11513, 8851, 20171, 7056, + 15725, 20241, 3409, 11513, 1683, 11513, 7849, 13259, 7056, + 15725, 20241, 3409, 11513, 1683, 11513, 7849, 18303, 7056, + 15725, 20241, 3409, 11513, 1683, 11513, 8851, 18303, 7056, + 15725, 20241, 3409, 11513, 1683, 18303, 7056, + 15725, 20241, 3409, 11513, 1683, 20171, 7056, + 15725, 20241, 3409, 11513, 1711, 16635, 7056, + 15725, 20241, 3409, 11513, 1711, 18303, 7056, + 15725, 20241, 3409, 11513, 3063, 13259, 7056, + 15725, 20241, 3409, 11513, 3919, 13259, 7056, + 15725, 20241, 3409, 11513, 3919, 20171, 7056, + 15725, 20241, 3409, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 3409, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 3409, 11513, 7849, 11513, 3919, 13259, 7056, + 15725, 20241, 3409, 11513, 7849, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 3409, 11513, 7849, 11513, 8851, 18303, 7056, + 15725, 20241, 3409, 11513, 7849, 18303, 7056, + 15725, 20241, 3409, 11513, 7849, 20171, 7056, + 15725, 20241, 3409, 11513, 8055, 11513, 3919, 13259, 7056, + 15725, 20241, 3409, 11513, 8055, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 3409, 11513, 8055, 11513, 8851, 18303, 7056, + 15725, 20241, 3409, 11513, 8055, 18303, 7056, + 15725, 20241, 3409, 11513, 8055, 20171, 7056, + 15725, 20241, 3409, 11513, 8851, 11513, 1683, 18303, 7056, + 15725, 20241, 3409, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 3409, 11513, 8851, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 3409, 11513, 8851, 11513, 7849, 18303, 7056, + 15725, 20241, 3409, 11513, 8851, 11513, 8055, 18303, 7056, + 15725, 20241, 3409, 11513, 8851, 13259, 7056, + 15725, 20241, 3409, 11513, 8851, 16635, 7056, + 15725, 20241, 3409, 11513, 8851, 18303, 7056, + 15725, 20241, 3409, 11513, 8851, 20171, 7056, + 15725, 20241, 3409, 11513, 9439, 13259, 7056, + 15725, 20241, 3409, 11513, 11813, 13259, 7056, + 15725, 20241, 3919, 11513, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 3919, 11513, 1683, 18303, 7056, + 15725, 20241, 3919, 11513, 1683, 20171, 7056, + 15725, 20241, 3919, 11513, 1711, 16635, 7056, + 15725, 20241, 3919, 11513, 1711, 18303, 7056, + 15725, 20241, 3919, 11513, 3063, 13259, 7056, + 15725, 20241, 3919, 11513, 3919, 13259, 7056, + 15725, 20241, 3919, 11513, 3919, 20171, 7056, + 15725, 20241, 3919, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 3919, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 3919, 11513, 7849, 11513, 3919, 13259, 7056, + 15725, 20241, 3919, 11513, 7849, 18303, 7056, + 15725, 20241, 3919, 11513, 7849, 20171, 7056, + 15725, 20241, 3919, 11513, 8055, 18303, 7056, + 15725, 20241, 3919, 11513, 8055, 20171, 7056, + 15725, 20241, 3919, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 3919, 11513, 8851, 11513, 8851, 13259, 7056, + 15725, 20241, 3919, 11513, 8851, 11513, 8851, 18303, 7056, + 15725, 20241, 3919, 11513, 8851, 13259, 7056, + 15725, 20241, 3919, 11513, 8851, 16635, 7056, + 15725, 20241, 3919, 11513, 8851, 18303, 7056, + 15725, 20241, 3919, 11513, 8851, 20171, 7056, + 15725, 20241, 3919, 11513, 9439, 13259, 7056, + 15725, 20241, 3919, 11513, 11813, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 9, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 9, 18303, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 9, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 41, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 41, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 67, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 67, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 505, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 505, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 791, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 791, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 1683, 18303, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 1683, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 1711, 16635, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 1711, 18303, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 3063, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 3751, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 3751, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 3919, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 3919, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 5483, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 5483, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 7849, 18303, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 7849, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 8055, 18303, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 8851, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 8851, 16635, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 8851, 18303, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 8851, 20171, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 9439, 13259, 7056, + 15725, 20241, 3919, 11513, 13457, 12319, 11513, 11813, 13259, 7056, + 15725, 20241, 4021, 11513, 8851, 16635, 7056, + 15725, 20241, 4021, 11513, 8851, 18303, 7056, + 15725, 20241, 4021, 11513, 8851, 20171, 7056, + 15725, 20241, 5483, 11513, 20007, 13259, 7056, + 15725, 20241, 5483, 11513, 20007, 20171, 7056, + 15725, 20241, 5483, 18559, 11513, 23679, 5483, 13259, 7056, + 15725, 20241, 5483, 18559, 11513, 23679, 5483, 20171, 7056, + 15725, 20241, 5559, 739, 7842, + 15725, 20241, 7849, 11513, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 7849, 11513, 1683, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 7849, 11513, 1683, 18303, 7056, + 15725, 20241, 7849, 11513, 1683, 20171, 7056, + 15725, 20241, 7849, 11513, 3919, 13259, 7056, + 15725, 20241, 7849, 11513, 3919, 20171, 7056, + 15725, 20241, 7849, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 7849, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 7849, 11513, 8851, 11513, 1683, 13259, 7056, + 15725, 20241, 7849, 11513, 8851, 11513, 1683, 18303, 7056, + 15725, 20241, 7849, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 7849, 11513, 8851, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 7849, 11513, 8851, 18303, 7056, + 15725, 20241, 7849, 11513, 8851, 20171, 7056, + 15725, 20241, 8055, 11513, 1683, 20171, 7056, + 15725, 20241, 8055, 11513, 3919, 13259, 7056, + 15725, 20241, 8055, 11513, 3919, 20171, 7056, + 15725, 20241, 8055, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 8055, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 8055, 11513, 7849, 18303, 7056, + 15725, 20241, 8055, 11513, 7849, 20171, 7056, + 15725, 20241, 8055, 11513, 8851, 18303, 7056, + 15725, 20241, 8055, 11513, 8851, 20171, 7056, + 15725, 20241, 8851, 11513, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 8851, 11513, 1683, 11513, 7849, 18303, 7056, + 15725, 20241, 8851, 11513, 1683, 11513, 8851, 18303, 7056, + 15725, 20241, 8851, 11513, 1683, 18303, 7056, + 15725, 20241, 8851, 11513, 1683, 20171, 7056, + 15725, 20241, 8851, 11513, 3919, 20171, 7056, + 15725, 20241, 8851, 11513, 5483, 13259, 7056, + 15725, 20241, 8851, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 8851, 11513, 7849, 11513, 1683, 18303, 7056, + 15725, 20241, 8851, 11513, 7849, 11513, 3919, 13259, 7056, + 15725, 20241, 8851, 11513, 7849, 11513, 8055, 18303, 7056, + 15725, 20241, 8851, 11513, 7849, 11513, 8851, 18303, 7056, + 15725, 20241, 8851, 11513, 7849, 18303, 7056, + 15725, 20241, 8851, 11513, 7849, 20171, 7056, + 15725, 20241, 8851, 11513, 8055, 11513, 3919, 13259, 7056, + 15725, 20241, 8851, 11513, 8055, 11513, 7849, 18303, 7056, + 15725, 20241, 8851, 11513, 8055, 11513, 8851, 18303, 7056, + 15725, 20241, 8851, 11513, 8055, 18303, 7056, + 15725, 20241, 8851, 11513, 8055, 20171, 7056, + 15725, 20241, 8851, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 8851, 11513, 8851, 13259, 7056, + 15725, 20241, 8851, 11513, 8851, 18303, 7056, + 15725, 20241, 8851, 11513, 8851, 20171, 7056, + 15725, 20241, 9439, 11513, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 9439, 11513, 1683, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 9439, 11513, 1683, 11513, 8851, 18303, 7056, + 15725, 20241, 9439, 11513, 1683, 18303, 7056, + 15725, 20241, 9439, 11513, 1683, 20171, 7056, + 15725, 20241, 9439, 11513, 1711, 16635, 7056, + 15725, 20241, 9439, 11513, 1711, 18303, 7056, + 15725, 20241, 9439, 11513, 3063, 13259, 7056, + 15725, 20241, 9439, 11513, 3919, 13259, 7056, + 15725, 20241, 9439, 11513, 3919, 20171, 7056, + 15725, 20241, 9439, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 9439, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 9439, 11513, 7849, 11513, 1683, 13259, 7056, + 15725, 20241, 9439, 11513, 7849, 11513, 1683, 18303, 7056, + 15725, 20241, 9439, 11513, 7849, 11513, 3919, 13259, 7056, + 15725, 20241, 9439, 11513, 7849, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 9439, 11513, 7849, 11513, 8851, 13259, 7056, + 15725, 20241, 9439, 11513, 7849, 11513, 8851, 18303, 7056, + 15725, 20241, 9439, 11513, 7849, 18303, 7056, + 15725, 20241, 9439, 11513, 7849, 20171, 7056, + 15725, 20241, 9439, 11513, 8055, 18303, 7056, + 15725, 20241, 9439, 11513, 8055, 20171, 7056, + 15725, 20241, 9439, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 9439, 11513, 8851, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 9439, 11513, 8851, 13259, 7056, + 15725, 20241, 9439, 11513, 8851, 16635, 7056, + 15725, 20241, 9439, 11513, 8851, 18303, 7056, + 15725, 20241, 9439, 11513, 8851, 20171, 7056, + 15725, 20241, 9439, 11513, 9439, 13259, 7056, + 15725, 20241, 9439, 11513, 11813, 13259, 7056, + 15725, 20241, 9967, 11267, 93, 18381, 10697, 10575, 20171, 7056, + 15725, 20241, 10085, 17673, 900, + 15725, 20241, 10085, 17673, 12382, + 15725, 20241, 10085, 17673, 12384, + 15725, 20241, 10085, 17673, 17684, + 15725, 20241, 10085, 17673, 17686, + 15725, 20241, 10419, 11513, 1683, 11513, 7849, 18303, 7056, + 15725, 20241, 10419, 11513, 1683, 16635, 7056, + 15725, 20241, 10419, 11513, 1683, 18303, 7056, + 15725, 20241, 10419, 11513, 1683, 20171, 7056, + 15725, 20241, 10419, 11513, 1711, 16635, 7056, + 15725, 20241, 10419, 11513, 1711, 18303, 7056, + 15725, 20241, 10419, 11513, 3063, 13259, 7056, + 15725, 20241, 10419, 11513, 3063, 20171, 7056, + 15725, 20241, 10419, 11513, 3919, 13259, 7056, + 15725, 20241, 10419, 11513, 3919, 20171, 7056, + 15725, 20241, 10419, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 10419, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 10419, 11513, 7849, 11513, 1683, 18303, 7056, + 15725, 20241, 10419, 11513, 7849, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 10419, 11513, 7849, 16635, 7056, + 15725, 20241, 10419, 11513, 7849, 18303, 7056, + 15725, 20241, 10419, 11513, 7849, 20171, 7056, + 15725, 20241, 10419, 11513, 8055, 11513, 3919, 13259, 7056, + 15725, 20241, 10419, 11513, 8055, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 10419, 11513, 8055, 16635, 7056, + 15725, 20241, 10419, 11513, 8055, 18303, 7056, + 15725, 20241, 10419, 11513, 8055, 20171, 7056, + 15725, 20241, 10419, 11513, 8851, 11513, 1683, 13259, 7056, + 15725, 20241, 10419, 11513, 8851, 11513, 1683, 18303, 7056, + 15725, 20241, 10419, 11513, 8851, 11513, 7849, 18303, 7056, + 15725, 20241, 10419, 11513, 8851, 11513, 8851, 13259, 7056, + 15725, 20241, 10419, 11513, 8851, 11513, 8851, 18303, 7056, + 15725, 20241, 10419, 11513, 8851, 16635, 7056, + 15725, 20241, 10419, 11513, 8851, 18303, 7056, + 15725, 20241, 10419, 11513, 8851, 20171, 7056, + 15725, 20241, 10929, 11513, 23679, 5483, 20171, 7056, + 15725, 20241, 10941, 11513, 1711, 16635, 7056, + 15725, 20241, 10941, 11513, 3063, 13259, 7056, + 15725, 20241, 10941, 11513, 3919, 13259, 7056, + 15725, 20241, 10941, 11513, 3919, 20171, 7056, + 15725, 20241, 10941, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 10941, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 10941, 11513, 7849, 20171, 7056, + 15725, 20241, 10941, 11513, 8851, 13259, 7056, + 15725, 20241, 10941, 11513, 8851, 16635, 7056, + 15725, 20241, 10941, 11513, 8851, 18303, 7056, + 15725, 20241, 10941, 11513, 8851, 20171, 7056, + 15725, 20241, 10941, 11513, 9439, 13259, 7056, + 15725, 20241, 10941, 11513, 11813, 13259, 7056, + 15725, 20241, 12347, 20171, 7056, + 15725, 20241, 12365, 20171, 7056, + 15725, 20241, 13371, 11513, 3919, 13259, 7056, + 15725, 20241, 13371, 11513, 3919, 20171, 7056, + 15725, 20241, 13371, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 13371, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 13371, 11513, 7849, 18303, 7056, + 15725, 20241, 13371, 11513, 7849, 20171, 7056, + 15725, 20241, 13371, 11513, 8851, 11513, 3919, 13259, 7056, + 15725, 20241, 13371, 11513, 8851, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 13371, 11513, 8851, 11513, 8851, 13259, 7056, + 15725, 20241, 13371, 11513, 8851, 18303, 7056, + 15725, 20241, 13371, 11513, 8851, 20171, 7056, + 15725, 20241, 14735, 20171, 7056, + 15725, 20241, 14737, 11267, 93, 18381, 10697, 10575, 20171, 7056, + 15725, 20241, 14737, 20171, 7056, + 15725, 20241, 14803, 11513, 1683, 11513, 3919, 13259, 7056, + 15725, 20241, 14803, 11513, 1683, 11513, 8851, 13259, 7056, + 15725, 20241, 14803, 11513, 1683, 11513, 8851, 18303, 7056, + 15725, 20241, 14803, 11513, 1683, 13259, 7056, + 15725, 20241, 14803, 11513, 1683, 16635, 7056, + 15725, 20241, 14803, 11513, 1683, 18303, 7056, + 15725, 20241, 14803, 11513, 1683, 20171, 7056, + 15725, 20241, 14803, 11513, 1711, 16635, 7056, + 15725, 20241, 14803, 11513, 1711, 18303, 7056, + 15725, 20241, 14803, 11513, 3063, 13259, 7056, + 15725, 20241, 14803, 11513, 3063, 20171, 7056, + 15725, 20241, 14803, 11513, 3919, 13259, 7056, + 15725, 20241, 14803, 11513, 3919, 20171, 7056, + 15725, 20241, 14803, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 14803, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 14803, 11513, 7849, 11513, 3919, 13259, 7056, + 15725, 20241, 14803, 11513, 7849, 13259, 7056, + 15725, 20241, 14803, 11513, 7849, 16635, 7056, + 15725, 20241, 14803, 11513, 7849, 18303, 7056, + 15725, 20241, 14803, 11513, 7849, 20171, 7056, + 15725, 20241, 14803, 11513, 8055, 13259, 7056, + 15725, 20241, 14803, 11513, 8055, 16635, 7056, + 15725, 20241, 14803, 11513, 8055, 18303, 7056, + 15725, 20241, 14803, 11513, 8055, 20171, 7056, + 15725, 20241, 14803, 11513, 8851, 11513, 8055, 13259, 7056, + 15725, 20241, 14803, 11513, 8851, 11513, 8055, 18303, 7056, + 15725, 20241, 14803, 11513, 8851, 11513, 8851, 13259, 7056, + 15725, 20241, 14803, 11513, 8851, 11513, 8851, 18303, 7056, + 15725, 20241, 14803, 11513, 8851, 13259, 7056, + 15725, 20241, 14803, 11513, 8851, 16635, 7056, + 15725, 20241, 14803, 11513, 8851, 18303, 7056, + 15725, 20241, 14803, 11513, 8851, 20171, 7056, + 15725, 20241, 15695, 20171, 7056, + 15725, 20241, 15697, 21024, + 15725, 20241, 15697, 22185, 23020, + 15725, 20241, 17011, 20171, 7056, + 15725, 20241, 17117, 11513, 13015, 16635, 7056, + 15725, 20241, 17117, 11513, 13015, 20171, 7056, + 15725, 20241, 17117, 11513, 13241, 16635, 7056, + 15725, 20241, 17117, 11513, 13241, 20171, 7056, + 15725, 20241, 17117, 11513, 13661, 16635, 7056, + 15725, 20241, 17117, 11513, 13661, 20171, 7056, + 15725, 20241, 17117, 11513, 19761, 20171, 7056, + 15725, 20241, 17117, 11513, 20191, 20171, 7056, + 15725, 20241, 17117, 11513, 23679, 5483, 20171, 7056, + 15725, 20241, 17499, 18369, 3919, 11513, 13457, 12319, 11513, 5483, 18559, 13259, 7056, + 15725, 20241, 17499, 18369, 3919, 11513, 13457, 12319, 11513, 5483, 18559, 18303, 7056, + 15725, 20241, 17499, 18369, 3919, 11513, 13457, 12319, 11513, 5483, 18559, 20171, 7056, + 15725, 20241, 17663, 21024, + 15725, 20241, 17665, 21024, + 15725, 20241, 18953, 17172, + 15725, 20241, 20321, 20171, 7056, + 15725, 20241, 20555, 15700, + 15725, 20241, 20953, 20171, 7056, + 15725, 20241, 20999, 21024, + 15725, 20241, 21065, 21021, 21018, + 15725, 20241, 21783, 15700, + 15725, 20241, 21825, 17666, + 15725, 20241, 22023, 23018, + 15725, 20241, 22839, 15697, 22119, 22116, + 15725, 20241, 22949, 739, 19238, + 15725, 20241, 23595, 15697, 20946, + 15725, 20241, 23597, 15695, 20952, + 15725, 20241, 28050, + 15725, 20549, 8808, + 15725, 20587, 13014, + 15725, 20933, 10856, + 15725, 20978, + 15725, 21127, 5483, 18782, + 15725, 21844, + 15725, 21927, 5482, + 15725, 22045, 21850, + 15725, 23679, 5483, 21596, + 15725, 23909, 880, + 15725, 23909, 988, + 15725, 23909, 1192, + 15725, 23909, 1200, + 15725, 23909, 1462, + 15725, 23909, 1682, + 15725, 23909, 1988, + 15725, 23909, 2202, + 15725, 23909, 2926, + 15725, 23909, 3062, + 15725, 23909, 3174, + 15725, 23909, 3372, + 15725, 23909, 3408, + 15725, 23909, 3750, + 15725, 23909, 3918, + 15725, 23909, 4020, + 15725, 23909, 5482, + 15725, 23909, 7848, + 15725, 23909, 8054, + 15725, 23909, 8850, + 15725, 23909, 9438, + 15725, 23909, 10418, + 15725, 23909, 10928, + 15725, 23909, 10940, + 15725, 23909, 11812, + 15725, 23909, 13370, + 15725, 23909, 14802, + 15725, 23909, 16573, 880, + 15725, 23909, 16573, 988, + 15725, 23909, 16573, 1192, + 15725, 23909, 16573, 1200, + 15725, 23909, 16573, 1462, + 15725, 23909, 16573, 1682, + 15725, 23909, 16573, 1710, + 15725, 23909, 16573, 2202, + 15725, 23909, 16573, 2926, + 15725, 23909, 16573, 3062, + 15725, 23909, 16573, 3174, + 15725, 23909, 16573, 3372, + 15725, 23909, 16573, 3408, + 15725, 23909, 16573, 3750, + 15725, 23909, 16573, 3918, + 15725, 23909, 16573, 4020, + 15725, 23909, 16573, 5482, + 15725, 23909, 16573, 7848, + 15725, 23909, 16573, 8054, + 15725, 23909, 16573, 8850, + 15725, 23909, 16573, 9438, + 15725, 23909, 16573, 10418, + 15725, 23909, 16573, 10928, + 15725, 23909, 16573, 10940, + 15725, 23909, 16573, 11812, + 15725, 23909, 16573, 13370, + 15725, 23909, 16573, 14802, + 15725, 23909, 17311, 880, + 15725, 23909, 17311, 1192, + 15725, 23909, 17311, 1682, + 15725, 23909, 17311, 2202, + 15725, 23909, 17311, 2926, + 15725, 23909, 17311, 3174, + 15725, 23909, 17311, 3918, + 15725, 23909, 17311, 7848, + 15725, 23909, 17311, 8054, + 15725, 23909, 17311, 9438, + 15725, 23909, 17311, 10418, + 15725, 23909, 17311, 13370, + 15725, 23909, 17311, 14802, + 15725, 23909, 17311, 18019, 2926, + 15725, 23909, 17311, 18019, 9438, + 15725, 23909, 18019, 988, + 15725, 23909, 18019, 1462, + 15725, 23909, 18019, 2926, + 15725, 23909, 18019, 9438, + 15725, 23909, 18303, 880, + 15725, 23909, 18303, 988, + 15725, 23909, 18303, 1192, + 15725, 23909, 18303, 1462, + 15725, 23909, 18303, 1682, + 15725, 23909, 18303, 1710, + 15725, 23909, 18303, 1988, + 15725, 23909, 18303, 2202, + 15725, 23909, 18303, 2926, + 15725, 23909, 18303, 3174, + 15725, 23909, 18303, 3408, + 15725, 23909, 18303, 3918, + 15725, 23909, 18303, 7848, + 15725, 23909, 18303, 8054, + 15725, 23909, 18303, 8850, + 15725, 23909, 18303, 9438, + 15725, 23909, 18303, 10418, + 15725, 23909, 18303, 10940, + 15725, 23909, 18303, 13370, + 15725, 23909, 18303, 14802, + 15725, 23909, 20407, 1683, 11513, 1200, + 15725, 23909, 20407, 8851, 11513, 1683, 11513, 19256, + 15725, 23909, 21911, 880, + 15725, 23909, 21911, 988, + 15725, 23909, 21911, 1192, + 15725, 23909, 21911, 1462, + 15725, 23909, 21911, 1682, + 15725, 23909, 21911, 1710, + 15725, 23909, 21911, 1988, + 15725, 23909, 21911, 2926, + 15725, 23909, 21911, 3174, + 15725, 23909, 21911, 3372, + 15725, 23909, 21911, 3408, + 15725, 23909, 21911, 3918, + 15725, 23909, 21911, 4020, + 15725, 23909, 21911, 7848, + 15725, 23909, 21911, 8054, + 15725, 23909, 21911, 8850, + 15725, 23909, 21911, 9438, + 15725, 23909, 21911, 10418, + 15725, 23909, 21911, 10940, + 15725, 23909, 21911, 13370, + 15725, 23909, 21911, 14802, + 15725, 23909, 21911, 18019, 988, + 15725, 23909, 21911, 18019, 1462, + 15725, 23909, 25761, 880, + 15725, 23909, 25761, 988, + 15725, 23909, 25761, 1192, + 15725, 23909, 25761, 1200, + 15725, 23909, 25761, 1462, + 15725, 23909, 25761, 1682, + 15725, 23909, 25761, 2202, + 15725, 23909, 25761, 2926, + 15725, 23909, 25761, 3062, + 15725, 23909, 25761, 3174, + 15725, 23909, 25761, 3372, + 15725, 23909, 25761, 3408, + 15725, 23909, 25761, 3750, + 15725, 23909, 25761, 3918, + 15725, 23909, 25761, 4020, + 15725, 23909, 25761, 7848, + 15725, 23909, 25761, 8054, + 15725, 23909, 25761, 8850, + 15725, 23909, 25761, 9438, + 15725, 23909, 25761, 10418, + 15725, 23909, 25761, 10928, + 15725, 23909, 25761, 10940, + 15725, 23909, 25761, 11812, + 15725, 23909, 25761, 13370, + 15725, 23909, 25761, 14802, + 15745, 18794, + 15764, + 15771, 14828, + 15773, 46, + 15773, 1036, + 15773, 1037, 11513, 46, + 15773, 1037, 11513, 6101, 12658, + 15773, 1037, 11513, 6101, 17089, 46, + 15773, 1037, 11513, 12658, + 15773, 1037, 11513, 13807, 46, + 15773, 1037, 11513, 15772, + 15773, 1037, 11513, 17089, 46, + 15773, 6101, 17089, 46, + 15773, 17089, 46, + 15778, + 15783, 9906, + 15790, + 15793, 16107, 14258, + 15793, 21027, 18655, 14258, + 15793, 21881, 14258, + 15793, 22273, 18655, 14258, + 15794, + 15796, + 15810, + 15813, 1086, + 15819, 2266, + 15825, 11513, 18897, 6362, + 15827, 917, 24193, 12414, + 15827, 7429, 8281, 23522, + 15827, 7429, 12525, 15938, + 15827, 7429, 14659, 23522, + 15827, 7429, 20156, + 15827, 7429, 20711, 16890, + 15827, 7429, 23301, 14670, + 15827, 7429, 23301, 17049, 18176, + 15827, 7429, 23301, 17049, 18178, + 15827, 7429, 24077, 14670, + 15827, 7429, 24077, 17049, 18176, + 15827, 7429, 24077, 17049, 18178, + 15827, 7429, 26001, 14670, + 15827, 7429, 26001, 17049, 18176, + 15827, 7429, 26001, 17049, 18178, + 15827, 7429, 26001, 17049, 18180, + 15827, 7429, 26001, 17049, 18182, + 15827, 8281, 6366, + 15827, 8281, 7429, 17810, + 15827, 8281, 15974, + 15827, 8281, 21527, 15287, 14659, 18951, 12525, 15938, + 15827, 12941, 17810, + 15827, 14659, 6366, + 15827, 14659, 7429, 17810, + 15827, 14659, 15974, + 15827, 14659, 21527, 15287, 8281, 18951, 12525, 15938, + 15827, 17225, 17810, + 15827, 17225, 17811, 9787, 3473, 17225, 17810, + 15827, 20847, 14811, 17810, + 15827, 21527, 15287, 7429, 12525, 15938, + 15827, 21527, 15287, 7429, 15453, 15938, + 15827, 23522, + 15830, + 15831, 11513, 8281, 7429, 12524, + 15831, 11513, 14659, 7429, 12524, + 15833, 13396, + 15835, 10575, 2757, 15053, 17534, + 15835, 10575, 19408, + 15835, 10575, 19540, + 15835, 10575, 23070, + 15835, 10575, 23288, + 15835, 10575, 23722, + 15835, 13016, + 15835, 13069, 2760, + 15835, 13069, 3240, + 15835, 13069, 3536, + 15835, 13069, 7036, + 15835, 13069, 7058, + 15835, 13069, 9358, + 15835, 13069, 11824, + 15835, 13069, 13150, + 15835, 13069, 14778, + 15835, 13069, 15116, + 15835, 15407, 10575, 8, + 15835, 15407, 10575, 16, + 15835, 15407, 10575, 28, + 15835, 15407, 10575, 40, + 15835, 15407, 10575, 58, + 15835, 15407, 10575, 72, + 15835, 15407, 10575, 96, + 15835, 15407, 10575, 314, + 15835, 15407, 10575, 706, + 15835, 15407, 10575, 2757, 15053, 14837, 8, + 15835, 15407, 10575, 2757, 15053, 14837, 28, + 15835, 15407, 10575, 19415, 22, + 15835, 15407, 10575, 19415, 34, + 15835, 15407, 10575, 19415, 406, + 15835, 15407, 10575, 19415, 608, + 15835, 15407, 10575, 23065, 58, + 15835, 16095, 13016, + 15835, 16531, 0, + 15835, 16531, 8, + 15835, 16531, 16, + 15835, 16531, 28, + 15835, 16531, 40, + 15835, 16531, 58, + 15835, 16531, 72, + 15835, 16531, 96, + 15835, 16531, 108, + 15835, 16531, 126, + 15835, 16531, 150, + 15835, 16531, 248, + 15835, 16531, 272, + 15835, 16531, 314, + 15835, 16531, 344, + 15835, 16531, 358, + 15835, 16531, 394, + 15835, 16531, 426, + 15835, 16531, 466, + 15835, 16531, 548, + 15835, 16531, 598, + 15835, 16531, 614, + 15835, 16531, 648, + 15835, 16531, 706, + 15835, 16531, 714, + 15835, 16531, 778, + 15835, 16531, 1000, + 15835, 16531, 1116, + 15835, 16531, 1214, + 15835, 16531, 1236, + 15835, 16531, 1588, + 15835, 16531, 1918, + 15835, 16531, 2036, + 15835, 16531, 2278, + 15835, 16531, 2574, + 15835, 16531, 2624, + 15835, 16531, 2698, + 15835, 16531, 2757, 15053, 2278, + 15835, 16531, 2757, 15053, 3118, + 15835, 16531, 2757, 15053, 8342, + 15835, 16531, 2757, 15053, 9422, + 15835, 16531, 2757, 15053, 14837, 8, + 15835, 16531, 2757, 15053, 14837, 28, + 15835, 16531, 2830, + 15835, 16531, 3212, + 15835, 16531, 3286, + 15835, 16531, 3422, + 15835, 16531, 3502, + 15835, 16531, 6572, + 15835, 16531, 11082, + 15835, 16531, 19415, 22, + 15835, 16531, 19415, 34, + 15835, 16531, 19415, 406, + 15835, 16531, 19415, 608, + 15835, 16787, 2760, + 15835, 16787, 2761, 18280, + 15835, 16787, 2761, 20828, + 15835, 16787, 3240, + 15835, 16787, 3412, + 15835, 16787, 3536, + 15835, 16787, 7036, + 15835, 16787, 7058, + 15835, 16787, 9358, + 15835, 16787, 13150, + 15835, 16787, 13254, + 15835, 16787, 13284, + 15835, 16787, 14778, + 15835, 16787, 14876, + 15835, 16787, 15116, + 15835, 16787, 16108, + 15835, 16787, 16402, + 15835, 16787, 16744, + 15835, 16787, 17372, + 15835, 16787, 17474, + 15835, 16787, 19070, + 15835, 17534, + 15835, 23555, 1290, + 15835, 23555, 8320, + 15835, 23555, 13832, + 15835, 23555, 16095, 1290, + 15835, 23555, 19739, 964, + 15843, 95, 14166, + 15844, + 15847, 964, + 15847, 13470, + 15847, 15939, 11513, 21647, 12414, + 15851, 3404, + 15852, + 15858, + 15859, 20406, + 15860, + 15864, + 15866, + 15867, 11513, 13266, + 15871, 3370, + 15872, + 15874, + 15879, 7048, + 15885, 16531, 0, + 15885, 16531, 2, + 15885, 16531, 6, + 15885, 16531, 8, + 15885, 16531, 12, + 15885, 16531, 16, + 15885, 16531, 20, + 15885, 16531, 22, + 15885, 16531, 24, + 15885, 16531, 26, + 15885, 16531, 28, + 15885, 16531, 30, + 15885, 16531, 32, + 15885, 16531, 34, + 15885, 16531, 36, + 15885, 16531, 38, + 15885, 16531, 40, + 15885, 16531, 46, + 15885, 16531, 54, + 15885, 16531, 148, + 15885, 16531, 176, + 15885, 16531, 246, + 15885, 16531, 314, + 15885, 16531, 356, + 15885, 16531, 396, + 15885, 16531, 428, + 15885, 16531, 468, + 15885, 16531, 474, + 15885, 16531, 484, + 15885, 16531, 546, + 15885, 16531, 608, + 15885, 16531, 622, + 15885, 16531, 634, + 15885, 16531, 636, + 15885, 16531, 666, + 15885, 16531, 706, + 15885, 16531, 2228, + 15885, 16531, 2386, + 15885, 16531, 2388, + 15885, 16531, 2390, + 15885, 16531, 3210, + 15885, 16531, 3298, + 15885, 16531, 3500, + 15885, 16531, 3646, + 15885, 16531, 6152, + 15885, 16531, 6154, + 15885, 16531, 11274, + 15885, 16531, 11276, + 15885, 16531, 11278, + 15886, + 15890, + 15899, 12934, + 15901, 8321, 17298, + 15906, + 15909, 29, 8808, + 15909, 97, 8808, + 15909, 10575, 19408, + 15909, 10575, 19540, + 15909, 10575, 23070, + 15909, 13016, + 15909, 13069, 2760, + 15909, 13069, 3240, + 15909, 13069, 3536, + 15909, 13069, 7036, + 15909, 13069, 7058, + 15909, 13069, 9358, + 15909, 13069, 11824, + 15909, 13069, 13150, + 15909, 13069, 14778, + 15909, 13069, 15116, + 15909, 15407, 10575, 0, + 15909, 15407, 10575, 8, + 15909, 15407, 10575, 16, + 15909, 15407, 10575, 28, + 15909, 15407, 10575, 40, + 15909, 15407, 10575, 58, + 15909, 15407, 10575, 72, + 15909, 15407, 10575, 96, + 15909, 15407, 10575, 194, + 15909, 15407, 10575, 314, + 15909, 15407, 10575, 512, + 15909, 15407, 10575, 706, + 15909, 16095, 13016, + 15909, 16531, 8, + 15909, 16531, 16, + 15909, 16531, 40, + 15909, 16531, 58, + 15909, 16531, 950, + 15909, 16531, 1076, + 15909, 16531, 1190, + 15909, 16531, 1526, + 15909, 16531, 1678, + 15909, 16531, 1902, + 15909, 16531, 1982, + 15909, 16531, 2190, + 15909, 16531, 2360, + 15909, 16531, 2512, + 15909, 16531, 2788, + 15909, 16531, 3028, + 15909, 16531, 3172, + 15909, 16531, 3364, + 15909, 16531, 3654, + 15909, 16531, 3736, + 15909, 16531, 3870, + 15909, 16531, 6068, + 15909, 16531, 6258, + 15909, 16531, 6554, + 15909, 16531, 6636, + 15909, 16531, 7288, + 15909, 16531, 7852, + 15909, 16531, 8048, + 15909, 16531, 8292, + 15909, 16531, 9258, + 15909, 16531, 9412, + 15909, 16531, 9546, + 15909, 16531, 9852, + 15909, 16531, 10922, + 15909, 16531, 11076, + 15909, 16531, 11774, + 15909, 16531, 13032, + 15909, 16531, 15228, + 15909, 17534, + 15909, 18540, + 15909, 19057, 8808, + 15909, 20549, 8808, + 15917, 15444, + 15923, 17794, + 15928, + 15934, + 15936, + 15939, 11513, 889, 1057, 15287, 8281, 20543, 12524, + 15939, 11513, 3537, 22495, 19207, 661, 3425, 14658, + 15939, 11513, 8281, 7429, 12524, + 15939, 11513, 13839, 7429, 12524, + 15939, 11513, 14659, 7429, 12524, + 15939, 11513, 14911, 15939, 661, 3425, 14658, + 15939, 11513, 15287, 7429, 12524, + 15939, 11513, 15287, 14659, 20543, 12524, + 15939, 11513, 20933, 7022, + 15939, 11513, 22495, 964, + 15939, 11513, 24151, 46, + 15939, 18009, 125, 22495, 965, 897, 3473, 7429, 18009, 125, 20933, 964, + 15941, 10906, + 15949, 6108, + 15949, 8345, 11513, 2034, + 15949, 15283, 11513, 17106, + 15949, 15283, 11513, 17107, 897, 14913, 18932, + 15949, 17272, + 15949, 17273, 529, 13177, 660, + 15949, 18553, 11513, 17007, 7038, + 15949, 18553, 11513, 18533, 7038, + 15949, 20764, + 15949, 20765, 529, 13177, 660, + 15949, 20916, + 15949, 23883, 11513, 17106, + 15958, + 15967, 10144, + 15968, + 15973, 2757, 16785, 7073, 10696, + 15973, 2757, 16785, 15391, 18010, + 15973, 2757, 16785, 16055, 20549, 8808, + 15973, 2757, 16785, 20149, 20549, 8808, + 15973, 7073, 10696, + 15973, 13173, 13069, 2760, + 15973, 13173, 13069, 3240, + 15973, 13173, 13069, 3536, + 15973, 13173, 13069, 7036, + 15973, 13173, 13069, 7058, + 15973, 13173, 13069, 9358, + 15973, 13173, 13069, 13150, + 15973, 13173, 13069, 14778, + 15973, 13173, 13069, 15116, + 15973, 13173, 16787, 2761, 18280, + 15973, 13173, 16787, 3241, 18280, + 15973, 13173, 16787, 3412, + 15973, 13173, 16787, 3537, 18280, + 15973, 13173, 16787, 7037, 18280, + 15973, 13173, 16787, 7059, 18280, + 15973, 13173, 16787, 9359, 18280, + 15973, 13173, 16787, 13151, 18280, + 15973, 13173, 16787, 13254, + 15973, 13173, 16787, 13284, + 15973, 13173, 16787, 14779, 18280, + 15973, 13173, 16787, 14876, + 15973, 13173, 16787, 15117, 18280, + 15973, 13173, 16787, 16108, + 15973, 13173, 16787, 16744, + 15973, 13173, 16787, 17372, + 15973, 13173, 16787, 17474, + 15973, 13173, 16787, 19070, + 15973, 13173, 22045, 8808, + 15973, 14911, 16531, 28, + 15973, 14911, 16531, 234, + 15973, 14911, 16531, 440, + 15973, 14911, 16531, 478, + 15973, 14911, 16531, 562, + 15973, 14911, 16531, 606, + 15973, 14911, 16531, 674, + 15973, 14911, 16531, 1226, + 15973, 14911, 16531, 1370, + 15973, 14911, 16531, 1464, + 15973, 14911, 16531, 2040, + 15973, 14911, 16531, 2122, + 15973, 14911, 16531, 2757, 15973, 272, + 15973, 14911, 16531, 2757, 15973, 880, + 15973, 14911, 16531, 2757, 15973, 1262, + 15973, 14911, 16531, 2757, 15973, 1412, + 15973, 14911, 16531, 2757, 15973, 1698, + 15973, 14911, 16531, 2757, 15973, 1712, + 15973, 14911, 16531, 2757, 15973, 2774, + 15973, 14911, 16531, 2757, 15973, 7668, + 15973, 14911, 16531, 2757, 15973, 10460, + 15973, 14911, 16531, 2757, 15973, 14822, + 15973, 14911, 16531, 2757, 15973, 16230, + 15973, 14911, 16531, 2757, 16785, 2580, + 15973, 14911, 16531, 2757, 16785, 2704, + 15973, 14911, 16531, 2757, 16785, 3748, + 15973, 14911, 16531, 2757, 16785, 14822, + 15973, 14911, 16531, 2774, + 15973, 14911, 16531, 2882, + 15973, 14911, 16531, 3268, + 15973, 14911, 16531, 3394, + 15973, 14911, 16531, 5484, + 15973, 14911, 16531, 7440, + 15973, 14911, 16531, 7668, + 15973, 14911, 16531, 8000, + 15973, 14911, 16531, 8066, + 15973, 14911, 16531, 10460, + 15973, 14911, 16531, 10582, + 15973, 14911, 16531, 11380, + 15973, 14911, 16531, 11818, + 15973, 14911, 16531, 13010, + 15973, 14911, 16531, 13332, + 15973, 14911, 16531, 13576, + 15973, 14911, 16531, 13784, + 15973, 14911, 16531, 14742, + 15973, 14911, 16531, 14822, + 15973, 14911, 16531, 16230, + 15973, 14911, 16531, 17368, + 15973, 14911, 16531, 17931, 10460, + 15973, 14911, 16531, 19521, 8066, + 15973, 14911, 16531, 19627, 8066, + 15973, 14911, 16531, 20211, 272, + 15973, 14911, 16531, 21193, 478, + 15973, 14911, 16531, 21193, 5482, + 15973, 14911, 16531, 21193, 7668, + 15973, 14911, 16531, 21193, 8000, + 15973, 14911, 16531, 25753, 478, + 15973, 14911, 16531, 25753, 1370, + 15973, 14911, 16531, 25753, 10460, + 15973, 14911, 16531, 25753, 16230, + 15973, 17299, 441, 606, + 15973, 17299, 563, 606, + 15973, 17299, 1992, + 15973, 17299, 2041, 606, + 15973, 17299, 3395, 606, + 15973, 17299, 14823, 10582, + 15973, 17299, 19182, + 15973, 17835, 16531, 28, + 15973, 17835, 16531, 234, + 15973, 17835, 16531, 440, + 15973, 17835, 16531, 478, + 15973, 17835, 16531, 562, + 15973, 17835, 16531, 606, + 15973, 17835, 16531, 674, + 15973, 17835, 16531, 1226, + 15973, 17835, 16531, 1370, + 15973, 17835, 16531, 1464, + 15973, 17835, 16531, 2040, + 15973, 17835, 16531, 2122, + 15973, 17835, 16531, 2757, 15973, 272, + 15973, 17835, 16531, 2757, 15973, 880, + 15973, 17835, 16531, 2757, 15973, 1262, + 15973, 17835, 16531, 2757, 15973, 1412, + 15973, 17835, 16531, 2757, 15973, 1698, + 15973, 17835, 16531, 2757, 15973, 1712, + 15973, 17835, 16531, 2757, 15973, 2774, + 15973, 17835, 16531, 2757, 15973, 7668, + 15973, 17835, 16531, 2757, 15973, 10460, + 15973, 17835, 16531, 2757, 15973, 14822, + 15973, 17835, 16531, 2757, 15973, 16230, + 15973, 17835, 16531, 2757, 16785, 2580, + 15973, 17835, 16531, 2757, 16785, 2704, + 15973, 17835, 16531, 2757, 16785, 3748, + 15973, 17835, 16531, 2757, 16785, 14822, + 15973, 17835, 16531, 2774, + 15973, 17835, 16531, 2882, + 15973, 17835, 16531, 3268, + 15973, 17835, 16531, 3394, + 15973, 17835, 16531, 5484, + 15973, 17835, 16531, 7440, + 15973, 17835, 16531, 7668, + 15973, 17835, 16531, 8000, + 15973, 17835, 16531, 8066, + 15973, 17835, 16531, 10460, + 15973, 17835, 16531, 10582, + 15973, 17835, 16531, 11380, + 15973, 17835, 16531, 11818, + 15973, 17835, 16531, 13010, + 15973, 17835, 16531, 13332, + 15973, 17835, 16531, 13576, + 15973, 17835, 16531, 13784, + 15973, 17835, 16531, 14742, + 15973, 17835, 16531, 14822, + 15973, 17835, 16531, 16230, + 15973, 17835, 16531, 17368, + 15973, 17835, 16531, 17931, 10460, + 15973, 17835, 16531, 19521, 8066, + 15973, 17835, 16531, 19627, 8066, + 15973, 17835, 16531, 20211, 272, + 15973, 17835, 16531, 21193, 478, + 15973, 17835, 16531, 21193, 5482, + 15973, 17835, 16531, 21193, 7668, + 15973, 17835, 16531, 21193, 8000, + 15973, 17835, 16531, 25753, 478, + 15973, 17835, 16531, 25753, 1370, + 15973, 17835, 16531, 25753, 10460, + 15973, 17835, 16531, 25753, 16230, + 15973, 20055, 2761, 7428, + 15973, 21127, 479, 12318, + 15973, 21127, 20693, 12422, + 15973, 21127, 20693, 13800, + 15973, 25825, 18010, + 15979, 11513, 13470, + 15985, 6222, + 15990, + 15993, 1091, 6996, + 15993, 6996, + 15994, + 16001, 10693, 21729, 10575, 20412, + 16006, + 16007, 11513, 8281, 13426, + 16007, 11513, 14659, 13426, + 16007, 13714, + 16014, + 16019, 2301, 8320, + 16019, 20422, + 16019, 28089, 22837, 12414, + 16025, 10574, + 16025, 17850, + 16025, 22444, + 16032, + 16033, 16388, + 16045, 22544, + 16051, 1493, 13140, + 16051, 1493, 13543, 13140, + 16051, 1493, 16529, 3942, + 16051, 1493, 16529, 11648, + 16051, 1493, 18089, 13542, + 16051, 1493, 18089, 16324, + 16051, 1493, 18229, 3942, + 16051, 1493, 18229, 11648, + 16051, 1493, 20111, 13140, + 16055, 1740, + 16055, 17939, 17299, 7057, 3536, + 16059, 8814, + 16067, 10574, + 16071, 10991, 20933, 5966, + 16071, 10991, 22495, 5966, + 16071, 10991, 26192, + 16071, 10991, 26194, + 16071, 10991, 26196, + 16071, 10991, 26198, + 16071, 10991, 26200, + 16071, 10991, 26202, + 16071, 10991, 26204, + 16071, 10991, 26206, + 16071, 10991, 26208, + 16071, 10991, 26210, + 16071, 10991, 26212, + 16071, 10991, 26214, + 16071, 10991, 26216, + 16071, 10991, 26218, + 16071, 10991, 26220, + 16071, 10991, 26222, + 16071, 10991, 26224, + 16071, 10991, 26226, + 16071, 10991, 26228, + 16071, 10991, 26230, + 16071, 10991, 26232, + 16071, 10991, 26234, + 16071, 10991, 26236, + 16071, 10991, 26238, + 16071, 10991, 26240, + 16071, 10991, 26242, + 16071, 10991, 26244, + 16071, 10991, 26246, + 16071, 10991, 26248, + 16071, 10991, 26250, + 16071, 10991, 26252, + 16071, 10991, 26254, + 16071, 10991, 26256, + 16071, 10991, 26258, + 16071, 10991, 26260, + 16071, 10991, 26262, + 16071, 10991, 26264, + 16071, 10991, 26266, + 16071, 10991, 26268, + 16071, 10991, 26270, + 16071, 10991, 26272, + 16071, 10991, 26274, + 16071, 10991, 26276, + 16071, 10991, 26278, + 16071, 10991, 26280, + 16071, 10991, 26282, + 16071, 10991, 26284, + 16071, 10991, 26286, + 16071, 10991, 26288, + 16071, 10991, 36096, + 16071, 10991, 36098, + 16071, 10991, 36100, + 16071, 10991, 36102, + 16071, 10991, 36104, + 16071, 10991, 36106, + 16071, 10991, 36108, + 16071, 10991, 36110, + 16071, 10991, 36112, + 16071, 10991, 36114, + 16071, 10991, 36116, + 16071, 10991, 36118, + 16071, 10991, 36120, + 16071, 10991, 36122, + 16071, 10991, 36124, + 16071, 10991, 36126, + 16071, 10991, 36128, + 16071, 10991, 36130, + 16071, 10991, 36132, + 16071, 10991, 36134, + 16071, 10991, 36136, + 16071, 10991, 36138, + 16071, 10991, 36140, + 16071, 10991, 36142, + 16071, 10991, 36144, + 16071, 10991, 36146, + 16071, 10991, 36148, + 16071, 10991, 36150, + 16071, 10991, 36152, + 16071, 10991, 36154, + 16071, 10991, 36156, + 16071, 10991, 36158, + 16071, 10991, 36160, + 16071, 10991, 36162, + 16071, 10991, 36164, + 16071, 10991, 36166, + 16071, 10991, 36168, + 16071, 10991, 36170, + 16071, 10991, 36172, + 16071, 10991, 36174, + 16071, 10991, 36176, + 16071, 10991, 36178, + 16071, 10991, 36180, + 16071, 10991, 36182, + 16071, 10991, 36184, + 16071, 10991, 36186, + 16071, 10991, 36188, + 16071, 10991, 36190, + 16071, 10991, 36192, + 16072, + 16093, 8321, 6996, + 16093, 12934, + 16093, 13246, + 16093, 15938, + 16093, 16790, + 16093, 17224, + 16093, 19140, + 16093, 25959, 16614, + 16093, 26163, 12378, + 16095, 699, 10850, + 16095, 2301, 8320, + 16095, 6701, 10850, + 16095, 8281, 917, 23853, 17810, + 16095, 9904, + 16095, 11475, 20422, + 16095, 12321, 15678, + 16095, 12917, 13176, + 16095, 12941, 8356, + 16095, 13837, 21779, 8808, + 16095, 14570, + 16095, 14571, 21779, 8808, + 16095, 14659, 917, 21559, 17810, + 16095, 15282, + 16095, 16006, + 16095, 16358, + 16095, 16717, 21558, + 16095, 16717, 21559, 11513, 20920, + 16095, 16717, 23852, + 16095, 17225, 15282, + 16095, 17225, 23882, + 16095, 17265, 2643, 10574, + 16095, 17272, + 16095, 17881, 13069, 2760, + 16095, 17881, 13069, 3240, + 16095, 17881, 13069, 3536, + 16095, 17881, 13069, 7036, + 16095, 17881, 13069, 7058, + 16095, 17881, 13069, 9358, + 16095, 17881, 13069, 13150, + 16095, 17881, 13069, 14778, + 16095, 17881, 13069, 15116, + 16095, 17881, 16787, 3412, + 16095, 18529, 528, + 16095, 18529, 896, + 16095, 18741, 16358, + 16095, 19141, 20406, + 16095, 19171, 12922, + 16095, 20156, + 16095, 20520, + 16095, 20549, 8808, + 16095, 20760, + 16095, 20764, + 16095, 20933, 964, + 16095, 20933, 965, 8281, 22078, + 16095, 20933, 965, 16095, 8281, 22078, + 16095, 20933, 965, 16095, 14659, 22078, + 16095, 20933, 8320, + 16095, 22959, 8808, + 16095, 23213, 8808, + 16095, 23882, + 16095, 26129, 21779, 8808, + 16095, 28049, 21779, 8808, + 16096, + 16097, 6996, + 16105, 17298, + 16107, 9442, + 16121, 10574, + 16121, 10575, 897, 19121, 20454, + 16121, 10575, 897, 19121, 20455, 11513, 15141, 12318, + 16121, 10575, 11513, 1291, 12502, + 16121, 10575, 11513, 3537, 6697, 12319, 897, 3537, 6697, 12502, + 16121, 10575, 11513, 12583, 12318, + 16121, 10575, 11513, 20153, 12502, + 16121, 10575, 12319, 9905, 10574, + 16121, 10575, 12319, 15141, 20406, + 16121, 10575, 12319, 21557, 12414, + 16121, 10575, 12319, 22837, 12414, + 16121, 11513, 19574, + 16121, 12916, + 16126, + 16153, 8276, + 16154, + 16157, 21108, + 16159, 10574, + 16160, + 16163, 15450, + 16169, 6544, + 16169, 14932, + 16177, 9831, 20156, + 16179, 7433, 10574, + 16191, 15808, + 16197, 6672, + 16199, 13470, + 16200, + 16201, 18883, 12612, + 16201, 23555, 8808, + 16203, 6668, + 16203, 17076, + 16203, 17077, 11513, 12490, + 16203, 17077, 19443, 12490, + 16203, 19986, + 16206, + 16208, + 16210, + 16213, 23512, + 16219, 10184, + 16225, 13289, 10574, + 16225, 13292, + 16228, + 16236, + 16242, + 16251, 14517, 10574, + 16267, 10184, + 16269, 14966, + 16270, + 16274, + 16279, 16531, 1374, + 16279, 16531, 1914, + 16279, 16531, 5466, + 16279, 16531, 6532, + 16279, 16531, 7308, + 16279, 16531, 7422, + 16279, 16531, 7828, + 16279, 16531, 9359, 18280, + 16279, 16531, 11262, + 16279, 16531, 13234, + 16279, 16531, 13546, + 16279, 16531, 13584, + 16279, 16531, 13740, + 16279, 16531, 13766, + 16279, 16531, 13914, + 16279, 16531, 14446, + 16279, 16531, 14618, + 16279, 16531, 14748, + 16279, 16531, 15076, + 16279, 16531, 15464, + 16279, 16531, 15688, + 16279, 16531, 16704, + 16279, 16531, 16744, + 16279, 16531, 17374, + 16279, 16531, 17732, + 16279, 16531, 20430, + 16279, 16531, 20540, + 16282, + 16288, + 16295, 13691, 10575, 19540, + 16295, 13691, 10575, 20826, + 16295, 13691, 13069, 2760, + 16295, 13691, 13069, 3240, + 16295, 13691, 13069, 3536, + 16295, 13691, 13069, 7036, + 16295, 13691, 13069, 7058, + 16295, 13691, 13069, 9358, + 16295, 13691, 13069, 11824, + 16295, 13691, 13069, 13150, + 16295, 13691, 13069, 14778, + 16295, 13691, 13069, 15116, + 16295, 13691, 15407, 10575, 8, + 16295, 13691, 15407, 10575, 16, + 16295, 13691, 15407, 10575, 28, + 16295, 13691, 15407, 10575, 40, + 16295, 13691, 15407, 10575, 58, + 16295, 13691, 15407, 10575, 72, + 16295, 13691, 15407, 10575, 96, + 16295, 13691, 15407, 10575, 186, + 16295, 13691, 15407, 10575, 314, + 16295, 13691, 15407, 10575, 522, + 16295, 13691, 15407, 10575, 706, + 16295, 13691, 15407, 16525, 8808, + 16295, 13691, 16531, 0, + 16295, 13691, 16531, 108, + 16295, 13691, 16531, 126, + 16295, 13691, 16531, 150, + 16295, 13691, 16531, 248, + 16295, 13691, 16531, 272, + 16295, 13691, 16531, 344, + 16295, 13691, 16531, 358, + 16295, 13691, 16531, 394, + 16295, 13691, 16531, 426, + 16295, 13691, 16531, 466, + 16295, 13691, 16531, 548, + 16295, 13691, 16531, 598, + 16295, 13691, 16531, 614, + 16295, 13691, 16531, 648, + 16295, 13691, 16531, 714, + 16295, 13691, 16531, 778, + 16295, 13691, 16531, 1000, + 16295, 13691, 16531, 1116, + 16295, 13691, 16531, 1214, + 16295, 13691, 16531, 1236, + 16295, 13691, 16531, 1588, + 16295, 13691, 16531, 1918, + 16295, 13691, 16531, 2036, + 16295, 13691, 16531, 2574, + 16295, 13691, 16531, 2830, + 16295, 13691, 16531, 3422, + 16295, 13691, 16531, 3502, + 16295, 13691, 16531, 6572, + 16295, 13691, 16531, 11082, + 16295, 13691, 21143, 10575, 16635, 272, + 16295, 13691, 21143, 10575, 16635, 598, + 16295, 13691, 21143, 10575, 16635, 714, + 16295, 13691, 21143, 10575, 16635, 778, + 16308, + 16309, 897, 9870, + 16309, 897, 17162, + 16309, 897, 17590, + 16313, 16095, 1291, 11033, 8808, + 16313, 16172, + 16313, 16531, 0, + 16313, 16531, 8, + 16313, 16531, 16, + 16313, 16531, 28, + 16313, 16531, 40, + 16313, 16531, 66, + 16313, 16531, 206, + 16313, 16531, 218, + 16313, 16531, 504, + 16313, 16531, 738, + 16313, 16531, 744, + 16313, 16531, 750, + 16313, 16531, 778, + 16313, 16531, 780, + 16313, 16531, 782, + 16313, 16531, 786, + 16313, 16531, 790, + 16313, 16531, 3738, + 16313, 16531, 3764, + 16313, 16531, 3876, + 16313, 16531, 3922, + 16313, 16531, 10586, + 16313, 16531, 11718, + 16313, 16531, 11744, + 16313, 16531, 12402, + 16313, 16531, 12698, + 16313, 16531, 13484, + 16313, 16531, 13582, + 16313, 16531, 13994, + 16313, 16531, 14164, + 16313, 16531, 14538, + 16313, 16531, 14654, + 16313, 16531, 15538, + 16313, 16531, 15546, + 16313, 16531, 15726, + 16313, 16531, 16462, + 16313, 16531, 17384, + 16313, 16531, 17610, + 16313, 16531, 17616, + 16313, 16531, 17870, + 16313, 16531, 18362, + 16313, 16531, 18808, + 16313, 16531, 18860, + 16313, 16531, 19274, + 16313, 16531, 20964, + 16313, 16531, 21900, + 16313, 16531, 22564, + 16313, 16531, 22604, + 16313, 16531, 22768, + 16313, 16531, 22830, + 16313, 16531, 22904, + 16313, 16531, 22912, + 16313, 16531, 22914, + 16313, 16531, 22930, + 16313, 16531, 22932, + 16313, 16531, 22934, + 16313, 16531, 22938, + 16313, 16531, 22940, + 16313, 16531, 23292, + 16313, 16531, 23324, + 16313, 16531, 23358, + 16313, 16531, 23360, + 16313, 16531, 23536, + 16313, 16531, 23580, + 16313, 16531, 23582, + 16313, 16531, 23586, + 16313, 16531, 23654, + 16313, 16531, 23656, + 16313, 16531, 23664, + 16313, 16531, 23666, + 16313, 16531, 23734, + 16313, 16531, 23924, + 16313, 16531, 24044, + 16313, 16531, 24046, + 16313, 16531, 24072, + 16313, 16531, 24074, + 16313, 16531, 25800, + 16313, 16531, 25802, + 16313, 16531, 25820, + 16313, 16531, 25828, + 16313, 16531, 25898, + 16313, 16531, 25912, + 16313, 16531, 25914, + 16313, 16531, 25916, + 16313, 16531, 25972, + 16313, 16531, 28052, + 16313, 16531, 36212, + 16313, 16531, 36234, + 16313, 16531, 36250, + 16313, 16531, 36252, + 16313, 16531, 36254, + 16313, 16531, 36264, + 16313, 16531, 36282, + 16313, 17171, 1291, 11033, 8808, + 16313, 19691, 10586, + 16313, 19691, 12698, + 16313, 19691, 13484, + 16313, 19691, 13582, + 16313, 19691, 13994, + 16313, 19691, 14164, + 16313, 19691, 14538, + 16313, 19691, 14654, + 16313, 19691, 16172, + 16313, 19691, 16462, + 16313, 19691, 17384, + 16313, 19691, 17870, + 16313, 19691, 18362, + 16313, 19691, 18808, + 16313, 19691, 18860, + 16313, 19691, 19274, + 16313, 19691, 20964, + 16313, 19691, 21900, + 16313, 19691, 22488, + 16313, 19691, 22498, + 16313, 19691, 22564, + 16313, 19691, 22604, + 16313, 19691, 22768, + 16313, 19691, 22830, + 16313, 19691, 22904, + 16313, 19691, 22906, + 16313, 19691, 22908, + 16313, 19691, 22910, + 16313, 19691, 22912, + 16313, 19691, 22914, + 16313, 19691, 22916, + 16313, 19691, 22930, + 16313, 19691, 22932, + 16313, 19691, 22934, + 16313, 19691, 22938, + 16313, 19691, 22940, + 16313, 19691, 22942, + 16313, 19691, 23074, + 16313, 19691, 23260, + 16313, 19691, 23262, + 16313, 19691, 23264, + 16313, 19691, 23266, + 16313, 19691, 23268, + 16313, 19691, 23324, + 16313, 19691, 23358, + 16313, 19691, 23360, + 16313, 19691, 23362, + 16313, 19691, 23536, + 16313, 19691, 23538, + 16313, 19691, 23542, + 16313, 19691, 23578, + 16313, 19691, 23580, + 16313, 19691, 23582, + 16313, 19691, 23584, + 16313, 19691, 23586, + 16313, 19691, 23654, + 16313, 19691, 23656, + 16313, 19691, 23664, + 16313, 19691, 23666, + 16313, 19691, 23696, + 16313, 19691, 23734, + 16313, 19691, 23784, + 16313, 19691, 23874, + 16313, 19691, 23876, + 16313, 19691, 23914, + 16313, 19691, 23916, + 16313, 19691, 23922, + 16313, 19691, 23924, + 16313, 19691, 24044, + 16313, 19691, 24046, + 16313, 19691, 24072, + 16313, 19691, 24074, + 16313, 19691, 24124, + 16313, 19691, 24126, + 16313, 19691, 24130, + 16313, 19691, 24132, + 16313, 19691, 24140, + 16313, 19691, 24164, + 16313, 19691, 24166, + 16313, 19691, 24168, + 16313, 19691, 24170, + 16313, 19691, 24202, + 16313, 19691, 24204, + 16313, 19691, 25782, + 16313, 19691, 25786, + 16313, 19691, 25788, + 16313, 19691, 25790, + 16313, 19691, 25800, + 16313, 19691, 25802, + 16313, 19691, 25804, + 16313, 19691, 25806, + 16313, 19691, 25888, + 16313, 19691, 25890, + 16313, 19691, 25892, + 16313, 19691, 25894, + 16313, 19691, 25896, + 16313, 19691, 25898, + 16313, 19691, 25910, + 16313, 19691, 25956, + 16313, 19691, 26176, + 16313, 19691, 26302, + 16313, 19691, 28038, + 16313, 19691, 28040, + 16313, 19691, 28052, + 16313, 19691, 28068, + 16313, 19691, 28080, + 16313, 19691, 28100, + 16313, 19691, 36204, + 16313, 19691, 36206, + 16313, 19691, 36214, + 16313, 19691, 36216, + 16313, 19691, 36222, + 16313, 19691, 36238, + 16313, 19691, 36250, + 16313, 19691, 36252, + 16313, 19691, 36260, + 16313, 19691, 36262, + 16313, 19691, 36268, + 16313, 19691, 36276, + 16313, 19691, 36278, + 16313, 19691, 36282, + 16313, 19691, 36296, + 16313, 19691, 36332, + 16313, 19691, 36338, + 16313, 19691, 36346, + 16313, 21523, 10586, + 16313, 21523, 12698, + 16313, 21523, 13484, + 16313, 21523, 13582, + 16313, 21523, 13994, + 16313, 21523, 14164, + 16313, 21523, 14538, + 16313, 21523, 14654, + 16313, 21523, 16462, + 16313, 21523, 17384, + 16313, 21523, 17870, + 16313, 21523, 18362, + 16313, 21523, 18808, + 16313, 21523, 18860, + 16313, 21523, 19274, + 16313, 21523, 20964, + 16313, 21523, 21900, + 16313, 21523, 22564, + 16313, 21523, 22604, + 16313, 21523, 22768, + 16313, 21523, 22830, + 16313, 21523, 22904, + 16313, 21523, 22906, + 16313, 21523, 22910, + 16313, 21523, 22914, + 16313, 21523, 22916, + 16313, 21523, 22930, + 16313, 21523, 22934, + 16313, 21523, 22936, + 16313, 21523, 22938, + 16313, 21523, 22940, + 16313, 21523, 22942, + 16313, 21523, 23076, + 16313, 21523, 23246, + 16313, 21523, 23248, + 16313, 21523, 23250, + 16313, 21523, 23252, + 16313, 21523, 23292, + 16313, 21523, 23318, + 16313, 21523, 23320, + 16313, 21523, 23322, + 16313, 21523, 23324, + 16313, 21523, 23326, + 16313, 21523, 23358, + 16313, 21523, 23360, + 16313, 21523, 23364, + 16313, 21523, 23536, + 16313, 21523, 23538, + 16313, 21523, 23540, + 16313, 21523, 23544, + 16313, 21523, 23580, + 16313, 21523, 23582, + 16313, 21523, 23584, + 16313, 21523, 23586, + 16313, 21523, 23654, + 16313, 21523, 23656, + 16313, 21523, 23664, + 16313, 21523, 23666, + 16313, 21523, 23696, + 16313, 21523, 23734, + 16313, 21523, 23874, + 16313, 21523, 23890, + 16313, 21523, 23892, + 16313, 21523, 23894, + 16313, 21523, 23896, + 16313, 21523, 23914, + 16313, 21523, 23922, + 16313, 21523, 23924, + 16313, 21523, 24040, + 16313, 21523, 24046, + 16313, 21523, 24072, + 16313, 21523, 24074, + 16313, 21523, 24124, + 16313, 21523, 24128, + 16313, 21523, 24132, + 16313, 21523, 24164, + 16313, 21523, 24168, + 16313, 21523, 24170, + 16313, 21523, 25784, + 16313, 21523, 25800, + 16313, 21523, 25802, + 16313, 21523, 25804, + 16313, 21523, 25818, + 16313, 21523, 25820, + 16313, 21523, 25826, + 16313, 21523, 25828, + 16313, 21523, 25830, + 16313, 21523, 25878, + 16313, 21523, 25890, + 16313, 21523, 25892, + 16313, 21523, 25896, + 16313, 21523, 25910, + 16313, 21523, 25912, + 16313, 21523, 25914, + 16313, 21523, 25916, + 16313, 21523, 25942, + 16313, 21523, 25956, + 16313, 21523, 25972, + 16313, 21523, 26118, + 16313, 21523, 26120, + 16313, 21523, 26160, + 16313, 21523, 26180, + 16313, 21523, 26182, + 16313, 21523, 26290, + 16313, 21523, 26292, + 16313, 21523, 28052, + 16313, 21523, 28062, + 16313, 21523, 28066, + 16313, 21523, 28074, + 16313, 21523, 28096, + 16313, 21523, 28102, + 16313, 21523, 36200, + 16313, 21523, 36202, + 16313, 21523, 36210, + 16313, 21523, 36212, + 16313, 21523, 36218, + 16313, 21523, 36220, + 16313, 21523, 36232, + 16313, 21523, 36234, + 16313, 21523, 36244, + 16313, 21523, 36252, + 16313, 21523, 36254, + 16313, 21523, 36256, + 16313, 21523, 36258, + 16313, 21523, 36260, + 16313, 21523, 36264, + 16313, 21523, 36272, + 16313, 21523, 36284, + 16313, 21523, 36298, + 16313, 21523, 36300, + 16313, 21523, 36302, + 16313, 21523, 36304, + 16313, 21523, 36310, + 16313, 21523, 36312, + 16313, 21523, 36314, + 16313, 21523, 36328, + 16313, 21523, 36332, + 16313, 21523, 36334, + 16313, 21523, 36342, + 16313, 21523, 36350, + 16313, 21523, 36356, + 16313, 21525, 0, + 16313, 21525, 8, + 16313, 21525, 16, + 16313, 21525, 28, + 16313, 21525, 40, + 16313, 21525, 66, + 16313, 21525, 206, + 16313, 21525, 218, + 16313, 21525, 504, + 16313, 21525, 738, + 16313, 21525, 744, + 16313, 21525, 750, + 16313, 21525, 778, + 16313, 21525, 780, + 16313, 21525, 782, + 16313, 21525, 786, + 16313, 21525, 790, + 16313, 21525, 818, + 16313, 21525, 820, + 16313, 21525, 1846, + 16313, 21525, 1848, + 16313, 21525, 1850, + 16313, 21525, 1852, + 16313, 21525, 2726, + 16313, 21525, 2728, + 16313, 21525, 2730, + 16313, 21525, 3570, + 16313, 21525, 3572, + 16313, 21525, 3738, + 16313, 21525, 3764, + 16313, 21525, 3876, + 16313, 21525, 3922, + 16313, 21525, 4124, + 16313, 21525, 6854, + 16313, 21525, 6856, + 16313, 21525, 6870, + 16313, 21525, 6872, + 16313, 21525, 6874, + 16313, 21525, 6876, + 16313, 21525, 7746, + 16313, 21525, 7748, + 16313, 21525, 7750, + 16313, 21525, 7752, + 16313, 21525, 7754, + 16313, 21525, 9652, + 16313, 21525, 9654, + 16313, 21525, 9656, + 16313, 21525, 11150, + 16313, 21525, 11152, + 16313, 21525, 11624, + 16313, 21525, 11626, + 16313, 21525, 11690, + 16313, 21525, 11716, + 16313, 21525, 11718, + 16313, 21525, 11720, + 16313, 21525, 11740, + 16313, 21525, 11742, + 16313, 21525, 11744, + 16313, 21525, 11746, + 16313, 21525, 11748, + 16313, 21525, 12402, + 16313, 21525, 13168, + 16313, 21525, 13196, + 16313, 21525, 13198, + 16313, 21525, 13562, + 16313, 21525, 13564, + 16313, 21525, 13566, + 16313, 21525, 14362, + 16313, 21525, 14364, + 16313, 21525, 14366, + 16313, 21525, 15258, + 16313, 21525, 15260, + 16313, 21525, 15504, + 16313, 21525, 15520, + 16313, 21525, 15522, + 16313, 21525, 15534, + 16313, 21525, 15536, + 16313, 21525, 15538, + 16313, 21525, 15542, + 16313, 21525, 15544, + 16313, 21525, 15546, + 16313, 21525, 16172, + 16313, 21525, 16362, + 16313, 21525, 17600, + 16313, 21525, 17610, + 16313, 21525, 17612, + 16313, 21525, 17616, + 16313, 21525, 17698, + 16313, 21525, 17700, + 16313, 21525, 17702, + 16313, 21525, 17704, + 16313, 21525, 18284, + 16313, 21525, 19362, + 16313, 21525, 19554, + 16313, 21525, 22928, + 16315, 20593, 8809, 467, 16450, + 16315, 20593, 8809, 14726, + 16315, 20593, 10575, 10864, + 16315, 20593, 10575, 15058, + 16315, 20593, 10575, 17308, + 16315, 20593, 10575, 20100, + 16315, 20593, 13069, 2760, + 16315, 20593, 13069, 3240, + 16315, 20593, 13069, 3536, + 16315, 20593, 13069, 7036, + 16315, 20593, 13069, 7058, + 16315, 20593, 13069, 9358, + 16315, 20593, 13069, 11824, + 16315, 20593, 13069, 13150, + 16315, 20593, 13069, 14778, + 16315, 20593, 13069, 15116, + 16315, 20593, 15407, 0, + 16315, 20593, 15407, 8, + 16315, 20593, 15407, 16, + 16315, 20593, 15407, 28, + 16315, 20593, 15407, 40, + 16315, 20593, 16531, 0, + 16315, 20593, 16531, 108, + 16315, 20593, 16531, 126, + 16315, 20593, 16531, 150, + 16315, 20593, 16531, 228, + 16315, 20593, 16531, 248, + 16315, 20593, 16531, 272, + 16315, 20593, 16531, 344, + 16315, 20593, 16531, 358, + 16315, 20593, 16531, 394, + 16315, 20593, 16531, 426, + 16315, 20593, 16531, 466, + 16315, 20593, 16531, 548, + 16315, 20593, 16531, 598, + 16315, 20593, 16531, 614, + 16315, 20593, 16531, 648, + 16315, 20593, 16531, 714, + 16315, 20593, 16531, 738, + 16315, 20593, 16531, 778, + 16315, 20593, 16531, 796, + 16315, 20593, 16531, 1214, + 16315, 20593, 16531, 2036, + 16315, 20593, 16531, 2574, + 16315, 20593, 16531, 2698, + 16315, 20593, 16531, 3118, + 16315, 20593, 16531, 3212, + 16315, 20593, 16531, 3502, + 16315, 20593, 16531, 13707, 738, + 16315, 20593, 16531, 13707, 778, + 16317, 16531, 276, + 16317, 16531, 554, + 16317, 16531, 946, + 16317, 16531, 2406, + 16317, 16531, 2676, + 16317, 16531, 3398, + 16317, 16531, 3750, + 16317, 16531, 6066, + 16317, 16531, 7478, + 16317, 16531, 8002, + 16317, 16531, 9992, + 16317, 16531, 10478, + 16317, 16531, 10914, + 16317, 16531, 11722, + 16317, 16531, 11820, + 16317, 16531, 12354, + 16317, 16531, 13384, + 16317, 16531, 14720, + 16317, 16531, 16508, + 16317, 16531, 17060, + 16317, 16531, 23110, + 16317, 16787, 2760, + 16317, 16787, 2761, 18280, + 16317, 16787, 3412, + 16317, 16787, 7036, + 16317, 16787, 17474, + 16318, + 16327, 3953, 20858, + 16327, 8809, 13839, 1290, + 16327, 8809, 15287, 1290, + 16327, 8809, 16619, 15938, + 16327, 14559, 3235, 1290, + 16327, 14559, 10088, + 16327, 14559, 10479, 1290, + 16327, 14559, 13465, 14492, + 16327, 14559, 13465, 14770, + 16327, 14559, 13465, 16990, + 16327, 14559, 13490, + 16327, 14559, 13528, + 16327, 14559, 13529, 13463, 1493, 3668, + 16327, 14559, 13964, + 16327, 14559, 14492, + 16327, 14559, 14770, + 16327, 14559, 14816, + 16327, 14559, 15220, + 16327, 14559, 16005, 529, 13916, + 16327, 14559, 16990, + 16327, 14559, 16991, 14586, + 16327, 14559, 16998, + 16327, 14559, 25799, 17520, + 16327, 15679, 2758, + 16327, 15679, 6618, + 16327, 15679, 7800, + 16327, 15679, 12427, 16300, + 16327, 15679, 13024, + 16327, 15679, 14046, + 16327, 15679, 14500, + 16327, 15679, 14584, + 16327, 15679, 14646, + 16327, 15679, 14770, + 16327, 15679, 15086, + 16327, 15679, 15525, 993, 11726, + 16327, 15679, 15528, + 16327, 15679, 15603, 13322, + 16327, 15679, 15603, 14586, + 16327, 15679, 15604, + 16327, 15679, 15624, + 16327, 15679, 16248, + 16327, 15679, 16249, 16694, + 16327, 15679, 16646, + 16327, 15679, 16647, 16424, + 16327, 15679, 16870, + 16327, 15679, 16993, 9826, + 16327, 15679, 17386, + 16327, 15679, 18122, + 16327, 15679, 19263, 16240, + 16327, 15679, 19263, 16994, + 16327, 15679, 20264, + 16327, 15679, 21428, + 16327, 15679, 22888, + 16327, 16531, 276, + 16327, 16531, 277, 11513, 13916, + 16327, 16531, 554, + 16327, 16531, 555, 11513, 10088, + 16327, 16531, 555, 11513, 16004, + 16327, 16531, 996, + 16327, 16531, 997, 11513, 10088, + 16327, 16531, 997, 11513, 16004, + 16327, 16531, 1718, + 16327, 16531, 1988, + 16327, 16531, 1989, 11513, 10088, + 16327, 16531, 1989, 11513, 16004, + 16327, 16531, 2406, + 16327, 16531, 2407, 11513, 16004, + 16327, 16531, 2676, + 16327, 16531, 2677, 11513, 16004, + 16327, 16531, 2966, + 16327, 16531, 2967, 11513, 16004, + 16327, 16531, 3396, + 16327, 16531, 3397, 11513, 16004, + 16327, 16531, 3416, + 16327, 16531, 3417, 11513, 16004, + 16327, 16531, 3668, + 16327, 16531, 3669, 11513, 13528, + 16327, 16531, 3669, 11513, 16004, + 16327, 16531, 3952, + 16327, 16531, 3953, 11513, 13490, + 16327, 16531, 3953, 11513, 16004, + 16327, 16531, 5482, + 16327, 16531, 5483, 11513, 13916, + 16327, 16531, 5483, 11513, 14492, + 16327, 16531, 5483, 11513, 16990, + 16327, 16531, 5556, + 16327, 16531, 10120, + 16327, 16531, 10121, 11513, 16004, + 16327, 16531, 10478, + 16327, 16531, 10479, 11513, 3235, 1290, + 16327, 16531, 10479, 11513, 10479, 1290, + 16327, 16531, 10479, 11513, 16004, + 16327, 16531, 10479, 11513, 16005, 897, 3235, 1290, + 16327, 16531, 10479, 11513, 16005, 897, 10479, 1290, + 16327, 16531, 11503, 276, + 16327, 16531, 11503, 1988, + 16327, 16531, 11503, 3396, + 16327, 16531, 11503, 5482, + 16327, 16531, 11503, 10120, + 16327, 16531, 11503, 13012, + 16327, 16531, 11503, 13259, 2406, + 16327, 16531, 11503, 13772, + 16327, 16531, 13012, + 16327, 16531, 13013, 11513, 16004, + 16327, 16531, 13259, 554, + 16327, 16531, 13259, 555, 11513, 16004, + 16327, 16531, 13259, 1988, + 16327, 16531, 13259, 1989, 11513, 16004, + 16327, 16531, 13259, 2406, + 16327, 16531, 13259, 2676, + 16327, 16531, 13259, 15214, + 16327, 16531, 13384, + 16327, 16531, 13385, 11513, 16004, + 16327, 16531, 13772, + 16327, 16531, 13773, 11513, 16004, + 16327, 16531, 15214, + 16327, 16531, 15215, 11513, 16004, + 16327, 16531, 15606, + 16327, 16531, 15607, 11513, 16004, + 16327, 16531, 17060, + 16327, 16531, 17061, 11513, 16004, + 16327, 16531, 23045, 5556, + 16327, 16531, 23045, 9905, 10574, + 16327, 20241, 5483, 13772, + 16327, 20241, 19463, 3669, 3952, + 16327, 20241, 19463, 3953, 3953, 14492, + 16327, 20241, 19463, 16095, 3668, + 16327, 20241, 19463, 16095, 3952, + 16327, 23555, 2677, 18236, + 16327, 23555, 3253, 14490, + 16327, 23555, 13920, + 16327, 23555, 14488, + 16327, 23555, 16248, + 16327, 23555, 21428, + 16333, 11513, 15453, 12934, + 16343, 6110, + 16349, 14603, 17225, 20412, + 16349, 14603, 17225, 20413, 323, 12525, 17224, + 16355, 6996, + 16356, + 16358, + 16359, 11513, 21188, + 16359, 15858, + 16369, 14699, 10574, + 16399, 16989, 14532, + 16411, 10575, 14334, + 16411, 10575, 17534, + 16411, 10575, 19408, + 16411, 10575, 19540, + 16411, 10575, 23070, + 16411, 13016, + 16411, 15407, 10575, 8, + 16411, 15407, 10575, 16, + 16411, 15407, 10575, 28, + 16411, 15407, 10575, 40, + 16411, 15407, 10575, 58, + 16411, 15407, 10575, 72, + 16411, 15407, 10575, 96, + 16411, 15407, 10575, 314, + 16411, 15407, 10575, 706, + 16411, 15407, 10575, 19415, 34, + 16411, 16095, 13016, + 16411, 16095, 19057, 8808, + 16411, 16531, 0, + 16411, 16531, 8, + 16411, 16531, 16, + 16411, 16531, 28, + 16411, 16531, 40, + 16411, 16531, 58, + 16411, 16531, 72, + 16411, 16531, 96, + 16411, 16531, 108, + 16411, 16531, 126, + 16411, 16531, 150, + 16411, 16531, 248, + 16411, 16531, 272, + 16411, 16531, 314, + 16411, 16531, 344, + 16411, 16531, 358, + 16411, 16531, 394, + 16411, 16531, 426, + 16411, 16531, 466, + 16411, 16531, 548, + 16411, 16531, 598, + 16411, 16531, 614, + 16411, 16531, 648, + 16411, 16531, 706, + 16411, 16531, 714, + 16411, 16531, 778, + 16411, 16531, 1000, + 16411, 16531, 1116, + 16411, 16531, 1214, + 16411, 16531, 1236, + 16411, 16531, 1588, + 16411, 16531, 1918, + 16411, 16531, 2036, + 16411, 16531, 2574, + 16411, 16531, 2624, + 16411, 16531, 2698, + 16411, 16531, 2830, + 16411, 16531, 3074, + 16411, 16531, 3212, + 16411, 16531, 3286, + 16411, 16531, 3422, + 16411, 16531, 3502, + 16411, 16531, 6572, + 16411, 16531, 11082, + 16411, 16531, 13030, + 16411, 16787, 10574, + 16411, 16787, 10575, 12318, + 16411, 19057, 8808, + 16411, 23207, 10574, + 16411, 23737, 10574, + 16415, 18961, 169, 2642, + 16415, 18961, 262, + 16415, 18961, 263, 17184, + 16415, 18961, 896, + 16415, 18961, 942, + 16415, 18961, 1014, + 16415, 18961, 1034, + 16415, 18961, 1156, + 16415, 18961, 1280, + 16415, 18961, 1290, + 16415, 18961, 1294, + 16415, 18961, 1352, + 16415, 18961, 1354, + 16415, 18961, 1432, + 16415, 18961, 1480, + 16415, 18961, 1504, + 16415, 18961, 1856, + 16415, 18961, 1906, + 16415, 18961, 2258, + 16415, 18961, 2368, + 16415, 18961, 2568, + 16415, 18961, 2642, + 16415, 18961, 2756, + 16415, 18961, 2760, + 16415, 18961, 2842, + 16415, 18961, 3044, + 16415, 18961, 3048, + 16415, 18961, 3058, + 16415, 18961, 3138, + 16415, 18961, 3198, + 16415, 18961, 3200, + 16415, 18961, 3310, + 16415, 18961, 3412, + 16415, 18961, 3536, + 16415, 18961, 3537, 13458, + 16415, 18961, 3640, + 16415, 18961, 6046, + 16415, 18961, 6082, + 16415, 18961, 6092, + 16415, 18961, 6096, + 16415, 18961, 6098, + 16415, 18961, 6103, 507, 12712, + 16415, 18961, 6106, + 16415, 18961, 6230, + 16415, 18961, 6232, + 16415, 18961, 6336, + 16415, 18961, 6338, + 16415, 18961, 6340, + 16415, 18961, 6616, + 16415, 18961, 6670, + 16415, 18961, 6692, + 16415, 18961, 6701, 1036, + 16415, 18961, 6708, + 16415, 18961, 6880, + 16415, 18961, 6996, + 16415, 18961, 7000, + 16415, 18961, 7026, + 16415, 18961, 7030, + 16415, 18961, 7052, + 16415, 18961, 7062, + 16415, 18961, 7212, + 16415, 18961, 7332, + 16415, 18961, 7424, + 16415, 18961, 7429, 11047, 15210, + 16415, 18961, 7432, + 16415, 18961, 7460, + 16415, 18961, 7468, + 16415, 18961, 7658, + 16415, 18961, 7670, + 16415, 18961, 7808, + 16415, 18961, 7838, + 16415, 18961, 8240, + 16415, 18961, 8254, + 16415, 18961, 8276, + 16415, 18961, 8278, + 16415, 18961, 8282, + 16415, 18961, 8312, + 16415, 18961, 8320, + 16415, 18961, 8350, + 16415, 18961, 8351, 17258, + 16415, 18961, 8846, + 16415, 18961, 8980, + 16415, 18961, 9440, + 16415, 18961, 9783, 1036, + 16415, 18961, 9896, + 16415, 18961, 10092, + 16415, 18961, 10144, + 16415, 18961, 10178, + 16415, 18961, 10386, + 16415, 18961, 10414, + 16415, 18961, 10422, + 16415, 18961, 10580, + 16415, 18961, 10596, + 16415, 18961, 10694, + 16415, 18961, 10696, + 16415, 18961, 10862, + 16415, 18961, 10990, + 16415, 18961, 11046, + 16415, 18961, 11466, + 16415, 18961, 11467, 21364, + 16415, 18961, 11488, + 16415, 18961, 11504, + 16415, 18961, 11506, + 16415, 18961, 11538, + 16415, 18961, 11542, + 16415, 18961, 12332, + 16415, 18961, 12414, + 16415, 18961, 12524, + 16415, 18961, 12536, + 16415, 18961, 12566, + 16415, 18961, 12676, + 16415, 18961, 12706, + 16415, 18961, 12918, + 16415, 18961, 12928, + 16415, 18961, 13046, + 16415, 18961, 13140, + 16415, 18961, 13150, + 16415, 18961, 13164, + 16415, 18961, 13250, + 16415, 18961, 13256, + 16415, 18961, 13272, + 16415, 18961, 13380, + 16415, 18961, 13410, + 16415, 18961, 13414, + 16415, 18961, 13470, + 16415, 18961, 13536, + 16415, 18961, 13714, + 16415, 18961, 13954, + 16415, 18961, 14024, + 16415, 18961, 14030, + 16415, 18961, 14568, + 16415, 18961, 14659, 9783, 1036, + 16415, 18961, 14664, + 16415, 18961, 14804, + 16415, 18961, 14810, + 16415, 18961, 14834, + 16415, 18961, 14837, 17311, 6082, + 16415, 18961, 14837, 17376, + 16415, 18961, 14890, + 16415, 18961, 14892, + 16415, 18961, 14896, + 16415, 18961, 14910, + 16415, 18961, 14922, + 16415, 18961, 14928, + 16415, 18961, 14936, + 16415, 18961, 14948, + 16415, 18961, 14964, + 16415, 18961, 14972, + 16415, 18961, 14982, + 16415, 18961, 15016, + 16415, 18961, 15044, + 16415, 18961, 15134, + 16415, 18961, 15180, + 16415, 18961, 15194, + 16415, 18961, 15436, + 16415, 18961, 15448, + 16415, 18961, 15452, + 16415, 18961, 15468, + 16415, 18961, 15476, + 16415, 18961, 15736, + 16415, 18961, 15764, + 16415, 18961, 15776, + 16415, 18961, 15820, + 16415, 18961, 15836, + 16415, 18961, 15976, + 16415, 18961, 16052, + 16415, 18961, 16093, 10906, + 16415, 18961, 16093, 12706, + 16415, 18961, 16095, 46, + 16415, 18961, 16096, + 16415, 18961, 16156, + 16415, 18961, 16341, 21364, + 16415, 18961, 16378, + 16415, 18961, 16664, + 16415, 18961, 16682, + 16415, 18961, 16816, + 16415, 18961, 17088, + 16415, 18961, 17094, + 16415, 18961, 17202, + 16415, 18961, 17208, + 16415, 18961, 17220, + 16415, 18961, 17224, + 16415, 18961, 17325, 18504, + 16415, 18961, 17430, + 16415, 18961, 17438, + 16415, 18961, 17458, + 16415, 18961, 17466, + 16415, 18961, 17516, + 16415, 18961, 17566, + 16415, 18961, 17598, + 16415, 18961, 17818, + 16415, 18961, 17892, + 16415, 18961, 17900, + 16415, 18961, 18124, + 16415, 18961, 18144, + 16415, 18961, 18242, + 16415, 18961, 18504, + 16415, 18961, 18642, + 16415, 18961, 18758, + 16415, 18961, 18926, + 16415, 18961, 19048, + 16415, 18961, 19404, + 16415, 18961, 19664, + 16415, 18961, 20058, + 16415, 18961, 20316, + 16415, 18961, 20332, + 16415, 18961, 20530, + 16415, 18961, 20656, + 16415, 18961, 20726, + 16415, 18961, 21364, + 16415, 18961, 22288, + 16415, 18961, 22412, + 16415, 18961, 23132, + 16415, 18961, 23591, 11506, + 16427, 10574, + 16439, 3412, + 16442, + 16445, 14911, 17089, 16172, + 16445, 14911, 17089, 26304, + 16445, 14911, 17089, 26306, + 16445, 14911, 17089, 26308, + 16445, 14911, 17089, 26310, + 16445, 14911, 17089, 26312, + 16445, 14911, 17089, 26314, + 16445, 14911, 17089, 26316, + 16445, 14911, 17089, 26318, + 16445, 14911, 17089, 26320, + 16445, 14911, 17089, 26322, + 16445, 14911, 17089, 26324, + 16445, 14911, 17089, 26326, + 16445, 14911, 17089, 26328, + 16445, 14911, 17089, 26330, + 16445, 14911, 17089, 26332, + 16445, 14911, 17089, 26334, + 16445, 14911, 17089, 26336, + 16445, 14911, 17089, 26338, + 16445, 14911, 17089, 26340, + 16445, 14911, 17089, 26342, + 16445, 14911, 17089, 26344, + 16445, 14911, 17089, 26346, + 16445, 14911, 17089, 26348, + 16445, 14911, 17089, 26350, + 16445, 14911, 17089, 26352, + 16445, 14911, 17089, 26354, + 16445, 14911, 17089, 26356, + 16445, 14911, 17089, 26358, + 16445, 14911, 17089, 26360, + 16445, 14911, 17089, 26362, + 16445, 14911, 17089, 26364, + 16445, 14911, 17089, 26366, + 16445, 14911, 17089, 26368, + 16445, 14911, 17089, 26370, + 16445, 14911, 17089, 26372, + 16445, 14911, 17089, 26374, + 16445, 14911, 17089, 26376, + 16445, 14911, 17089, 26378, + 16445, 14911, 17089, 26380, + 16445, 14911, 17089, 26382, + 16445, 14911, 17089, 26384, + 16445, 14911, 17089, 26386, + 16445, 14911, 17089, 26388, + 16445, 14911, 17089, 26390, + 16445, 14911, 17089, 26392, + 16445, 14911, 17089, 26394, + 16445, 14911, 17089, 26396, + 16445, 14911, 17089, 26398, + 16445, 14911, 17089, 26400, + 16445, 14911, 17089, 26402, + 16445, 14911, 17089, 26404, + 16445, 14911, 17089, 26406, + 16445, 14911, 17089, 26408, + 16445, 14911, 17089, 26410, + 16445, 14911, 17089, 26412, + 16445, 14911, 17089, 26414, + 16445, 14911, 17089, 26416, + 16445, 14911, 17089, 26418, + 16445, 14911, 17089, 26420, + 16445, 14911, 17089, 26422, + 16445, 14911, 17089, 26424, + 16445, 14911, 17089, 26426, + 16445, 14911, 17089, 26428, + 16445, 14911, 17089, 26430, + 16445, 14911, 17089, 26432, + 16445, 14911, 17089, 26434, + 16445, 14911, 17089, 26436, + 16445, 14911, 17089, 26438, + 16445, 14911, 17089, 26440, + 16445, 14911, 17089, 26442, + 16445, 14911, 17089, 26444, + 16445, 14911, 17089, 26446, + 16445, 14911, 17089, 26448, + 16445, 14911, 17089, 26450, + 16445, 14911, 17089, 26452, + 16445, 14911, 17089, 26454, + 16445, 14911, 17089, 26456, + 16445, 14911, 17089, 26458, + 16445, 14911, 17089, 26460, + 16445, 14911, 17089, 26462, + 16445, 14911, 17089, 26464, + 16445, 14911, 17089, 26466, + 16445, 14911, 17089, 26468, + 16445, 14911, 17089, 26470, + 16445, 14911, 17089, 26472, + 16445, 14911, 17089, 26474, + 16445, 14911, 17089, 26476, + 16445, 14911, 17089, 26478, + 16445, 14911, 17089, 26480, + 16445, 14911, 17089, 26482, + 16445, 14911, 17089, 26484, + 16445, 14911, 17089, 26486, + 16445, 14911, 17089, 26488, + 16445, 14911, 17089, 26490, + 16445, 14911, 17089, 26492, + 16445, 14911, 17089, 26494, + 16445, 14911, 17089, 26496, + 16445, 14911, 17089, 26498, + 16445, 14911, 17089, 26500, + 16445, 14911, 17089, 26502, + 16445, 14911, 17089, 26504, + 16445, 14911, 17089, 26506, + 16445, 14911, 17089, 26508, + 16445, 14911, 17089, 26510, + 16445, 14911, 17089, 26512, + 16445, 14911, 17089, 26514, + 16445, 14911, 17089, 26516, + 16445, 14911, 17089, 26518, + 16445, 14911, 17089, 26520, + 16445, 14911, 17089, 26522, + 16445, 14911, 17089, 26524, + 16445, 14911, 17089, 26526, + 16445, 14911, 17089, 26528, + 16445, 14911, 17089, 26530, + 16445, 14911, 17089, 26532, + 16445, 14911, 17089, 26534, + 16445, 14911, 17089, 26536, + 16445, 14911, 17089, 26538, + 16445, 14911, 17089, 26540, + 16445, 14911, 17089, 26542, + 16445, 14911, 17089, 26544, + 16445, 14911, 17089, 26546, + 16445, 14911, 17089, 26548, + 16445, 14911, 17089, 26550, + 16445, 14911, 17089, 26552, + 16445, 14911, 17089, 26554, + 16445, 14911, 17089, 26556, + 16445, 14911, 17089, 26558, + 16445, 14911, 17089, 26560, + 16445, 14911, 17089, 26562, + 16445, 14911, 17089, 26564, + 16445, 14911, 17089, 26566, + 16445, 14911, 17089, 26568, + 16445, 14911, 17089, 26570, + 16445, 14911, 17089, 26572, + 16445, 14911, 17089, 26574, + 16445, 14911, 17089, 26576, + 16445, 14911, 17089, 26578, + 16445, 14911, 17089, 26580, + 16445, 14911, 17089, 26582, + 16445, 14911, 17089, 26584, + 16445, 14911, 17089, 26586, + 16445, 14911, 17089, 26588, + 16445, 14911, 17089, 26590, + 16445, 14911, 17089, 26592, + 16445, 14911, 17089, 26594, + 16445, 14911, 17089, 26596, + 16445, 14911, 17089, 26598, + 16445, 14911, 17089, 26600, + 16445, 14911, 17089, 26602, + 16445, 14911, 17089, 26604, + 16445, 14911, 17089, 26606, + 16445, 14911, 17089, 26608, + 16445, 14911, 17089, 26610, + 16445, 14911, 17089, 26612, + 16445, 14911, 17089, 26614, + 16445, 14911, 17089, 26616, + 16445, 14911, 17089, 26618, + 16445, 14911, 17089, 26620, + 16445, 14911, 17089, 26622, + 16445, 14911, 17089, 26624, + 16445, 14911, 17089, 26626, + 16445, 14911, 17089, 26628, + 16445, 14911, 17089, 26630, + 16445, 14911, 17089, 26632, + 16445, 14911, 17089, 26634, + 16445, 14911, 17089, 26636, + 16445, 14911, 17089, 26638, + 16445, 14911, 17089, 26640, + 16445, 14911, 17089, 26642, + 16445, 14911, 17089, 26644, + 16445, 14911, 17089, 26646, + 16445, 14911, 17089, 26648, + 16445, 14911, 17089, 26650, + 16445, 14911, 17089, 26652, + 16445, 14911, 17089, 26654, + 16445, 14911, 17089, 26656, + 16445, 14911, 17089, 26658, + 16445, 14911, 17089, 26660, + 16445, 14911, 17089, 26662, + 16445, 14911, 17089, 26664, + 16445, 14911, 17089, 26666, + 16445, 14911, 17089, 26668, + 16445, 14911, 17089, 26670, + 16445, 14911, 17089, 26672, + 16445, 14911, 17089, 26674, + 16445, 14911, 17089, 26676, + 16445, 14911, 17089, 26678, + 16445, 14911, 17089, 26680, + 16445, 14911, 17089, 26682, + 16445, 14911, 17089, 26684, + 16445, 14911, 17089, 26686, + 16445, 14911, 17089, 26688, + 16445, 14911, 17089, 26690, + 16445, 14911, 17089, 26692, + 16445, 14911, 17089, 26694, + 16445, 14911, 17089, 26696, + 16445, 14911, 17089, 26698, + 16445, 14911, 17089, 26700, + 16445, 14911, 17089, 26702, + 16445, 14911, 17089, 26704, + 16445, 14911, 17089, 26706, + 16445, 14911, 17089, 26708, + 16445, 14911, 17089, 26710, + 16445, 14911, 17089, 26712, + 16445, 14911, 17089, 26714, + 16445, 14911, 17089, 26716, + 16445, 14911, 17089, 26718, + 16445, 14911, 17089, 26720, + 16445, 14911, 17089, 26722, + 16445, 14911, 17089, 26724, + 16445, 14911, 17089, 26726, + 16445, 14911, 17089, 26728, + 16445, 14911, 17089, 26730, + 16445, 14911, 17089, 26732, + 16445, 14911, 17089, 26734, + 16445, 14911, 17089, 26736, + 16445, 14911, 17089, 26738, + 16445, 14911, 17089, 26740, + 16445, 14911, 17089, 26742, + 16445, 14911, 17089, 26744, + 16445, 14911, 17089, 26746, + 16445, 14911, 17089, 26748, + 16445, 14911, 17089, 26750, + 16445, 14911, 17089, 26752, + 16445, 14911, 17089, 26754, + 16445, 14911, 17089, 26756, + 16445, 14911, 17089, 26758, + 16445, 14911, 17089, 26760, + 16445, 14911, 17089, 26762, + 16445, 14911, 17089, 26764, + 16445, 14911, 17089, 26766, + 16445, 14911, 17089, 26768, + 16445, 14911, 17089, 26770, + 16445, 14911, 17089, 26772, + 16445, 14911, 17089, 26774, + 16445, 14911, 17089, 26776, + 16445, 14911, 17089, 26778, + 16445, 14911, 17089, 26780, + 16445, 14911, 17089, 26782, + 16445, 14911, 17089, 26784, + 16445, 14911, 17089, 26786, + 16445, 14911, 17089, 26788, + 16445, 14911, 17089, 26790, + 16445, 14911, 17089, 26792, + 16445, 14911, 17089, 26794, + 16445, 14911, 17089, 26796, + 16445, 14911, 17089, 26798, + 16445, 14911, 17089, 26800, + 16445, 14911, 17089, 26802, + 16445, 14911, 17089, 26804, + 16445, 14911, 17089, 26806, + 16445, 14911, 17089, 26808, + 16445, 14911, 17089, 26810, + 16445, 14911, 17089, 26812, + 16445, 14911, 17089, 26814, + 16445, 14911, 17089, 26816, + 16445, 14911, 17089, 26818, + 16445, 14911, 17089, 26820, + 16445, 14911, 17089, 26822, + 16445, 14911, 17089, 26824, + 16445, 14911, 17089, 26826, + 16445, 14911, 17089, 26828, + 16445, 14911, 17089, 26830, + 16445, 14911, 17089, 26832, + 16445, 14911, 17089, 26834, + 16445, 14911, 17089, 26836, + 16445, 14911, 17089, 26838, + 16445, 14911, 17089, 26840, + 16445, 14911, 17089, 26842, + 16445, 14911, 17089, 26844, + 16445, 14911, 17089, 26846, + 16445, 14911, 17089, 26848, + 16445, 14911, 17089, 26850, + 16445, 14911, 17089, 26852, + 16445, 14911, 17089, 26854, + 16445, 14911, 17089, 26856, + 16445, 14911, 17089, 26858, + 16445, 14911, 17089, 26860, + 16445, 14911, 17089, 26862, + 16445, 14911, 17089, 26864, + 16445, 14911, 17089, 26866, + 16445, 14911, 17089, 26868, + 16445, 14911, 17089, 26870, + 16445, 14911, 17089, 26872, + 16445, 14911, 17089, 26874, + 16445, 14911, 17089, 26876, + 16445, 14911, 17089, 26878, + 16445, 14911, 17089, 26880, + 16445, 14911, 17089, 26882, + 16445, 14911, 17089, 26884, + 16445, 14911, 17089, 26886, + 16445, 14911, 17089, 26888, + 16445, 14911, 17089, 26890, + 16445, 14911, 17089, 26892, + 16445, 14911, 17089, 26894, + 16445, 14911, 17089, 26896, + 16445, 14911, 17089, 26898, + 16445, 14911, 17089, 26900, + 16445, 14911, 17089, 26902, + 16445, 14911, 17089, 26904, + 16445, 14911, 17089, 26906, + 16445, 14911, 17089, 26908, + 16445, 14911, 17089, 26910, + 16445, 14911, 17089, 26912, + 16445, 14911, 17089, 26914, + 16445, 14911, 17089, 26916, + 16445, 14911, 17089, 26918, + 16445, 14911, 17089, 26920, + 16445, 14911, 17089, 26922, + 16445, 14911, 17089, 26924, + 16445, 14911, 17089, 26926, + 16445, 14911, 17089, 26928, + 16445, 14911, 17089, 26930, + 16445, 14911, 17089, 26932, + 16445, 14911, 17089, 26934, + 16445, 14911, 17089, 26936, + 16445, 14911, 17089, 26938, + 16445, 14911, 17089, 26940, + 16445, 14911, 17089, 26942, + 16445, 14911, 17089, 26944, + 16445, 14911, 17089, 26946, + 16445, 14911, 17089, 26948, + 16445, 14911, 17089, 26950, + 16445, 14911, 17089, 26952, + 16445, 14911, 17089, 26954, + 16445, 14911, 17089, 26956, + 16445, 14911, 17089, 26958, + 16445, 14911, 17089, 26960, + 16445, 14911, 17089, 26962, + 16445, 14911, 17089, 26964, + 16445, 14911, 17089, 26966, + 16445, 14911, 17089, 26968, + 16445, 14911, 17089, 26970, + 16445, 14911, 17089, 26972, + 16445, 14911, 17089, 26974, + 16445, 14911, 17089, 26976, + 16445, 14911, 17089, 26978, + 16445, 14911, 17089, 26980, + 16445, 14911, 17089, 26982, + 16445, 14911, 17089, 26984, + 16445, 14911, 17089, 26986, + 16445, 14911, 17089, 26988, + 16445, 14911, 17089, 26990, + 16445, 14911, 17089, 26992, + 16445, 14911, 17089, 26994, + 16445, 14911, 17089, 26996, + 16445, 14911, 17089, 26998, + 16445, 14911, 17089, 27000, + 16445, 14911, 17089, 27002, + 16445, 14911, 17089, 27004, + 16445, 14911, 17089, 27006, + 16445, 14911, 17089, 27008, + 16445, 14911, 17089, 27010, + 16445, 14911, 17089, 27012, + 16445, 14911, 17089, 27014, + 16445, 14911, 17089, 27016, + 16445, 14911, 17089, 27018, + 16445, 14911, 17089, 27020, + 16445, 14911, 17089, 27022, + 16445, 14911, 17089, 27024, + 16445, 14911, 17089, 27026, + 16445, 14911, 17089, 27028, + 16445, 14911, 17089, 27030, + 16445, 14911, 17089, 27032, + 16445, 14911, 17089, 27034, + 16445, 14911, 17089, 27036, + 16445, 14911, 17089, 27038, + 16445, 14911, 17089, 27040, + 16445, 14911, 17089, 27042, + 16445, 14911, 17089, 27044, + 16445, 14911, 17089, 27046, + 16445, 14911, 17089, 27048, + 16445, 14911, 17089, 27050, + 16445, 14911, 17089, 27052, + 16445, 14911, 17089, 27054, + 16445, 14911, 17089, 27056, + 16445, 14911, 17089, 27058, + 16445, 14911, 17089, 27060, + 16445, 14911, 17089, 27062, + 16445, 14911, 17089, 27064, + 16445, 14911, 17089, 27066, + 16445, 14911, 17089, 27068, + 16445, 14911, 17089, 27070, + 16445, 14911, 17089, 27072, + 16445, 14911, 17089, 27074, + 16445, 14911, 17089, 27076, + 16445, 14911, 17089, 27078, + 16445, 14911, 17089, 27080, + 16445, 14911, 17089, 27082, + 16445, 14911, 17089, 27084, + 16445, 14911, 17089, 27086, + 16445, 14911, 17089, 27088, + 16445, 14911, 17089, 27090, + 16445, 14911, 17089, 27092, + 16445, 14911, 17089, 27094, + 16445, 14911, 17089, 27096, + 16445, 14911, 17089, 27098, + 16445, 14911, 17089, 27100, + 16445, 14911, 17089, 27102, + 16445, 14911, 17089, 27104, + 16445, 14911, 17089, 27106, + 16445, 14911, 17089, 27108, + 16445, 14911, 17089, 27110, + 16445, 14911, 17089, 27112, + 16445, 14911, 17089, 27114, + 16445, 14911, 17089, 27116, + 16445, 14911, 17089, 27118, + 16445, 14911, 17089, 27120, + 16445, 14911, 17089, 27122, + 16445, 14911, 17089, 27124, + 16445, 14911, 17089, 27126, + 16445, 14911, 17089, 27128, + 16445, 14911, 17089, 27130, + 16445, 14911, 17089, 27132, + 16445, 14911, 17089, 27134, + 16445, 14911, 17089, 27136, + 16445, 14911, 17089, 27138, + 16445, 14911, 17089, 27140, + 16445, 14911, 17089, 27142, + 16445, 14911, 17089, 27144, + 16445, 14911, 17089, 27146, + 16445, 14911, 17089, 27148, + 16445, 14911, 17089, 27150, + 16445, 14911, 17089, 27152, + 16445, 14911, 17089, 27154, + 16445, 14911, 17089, 27156, + 16445, 14911, 17089, 27158, + 16445, 14911, 17089, 27160, + 16445, 14911, 17089, 27162, + 16445, 14911, 17089, 27164, + 16445, 14911, 17089, 27166, + 16445, 14911, 17089, 27168, + 16445, 14911, 17089, 27170, + 16445, 14911, 17089, 27172, + 16445, 14911, 17089, 27174, + 16445, 14911, 17089, 27176, + 16445, 14911, 17089, 27178, + 16445, 14911, 17089, 27180, + 16445, 14911, 17089, 27182, + 16445, 14911, 17089, 27184, + 16445, 14911, 17089, 27186, + 16445, 14911, 17089, 27188, + 16445, 14911, 17089, 27190, + 16445, 14911, 17089, 27192, + 16445, 14911, 17089, 27194, + 16445, 14911, 17089, 27196, + 16445, 14911, 17089, 27198, + 16445, 14911, 17089, 27200, + 16445, 14911, 17089, 27202, + 16445, 14911, 17089, 27204, + 16445, 14911, 17089, 27206, + 16445, 14911, 17089, 27208, + 16445, 14911, 17089, 27210, + 16445, 14911, 17089, 27212, + 16445, 14911, 17089, 27214, + 16445, 14911, 17089, 27216, + 16445, 14911, 17089, 27218, + 16445, 14911, 17089, 27220, + 16445, 14911, 17089, 27222, + 16445, 14911, 17089, 27224, + 16445, 14911, 17089, 27226, + 16445, 14911, 17089, 27228, + 16445, 14911, 17089, 27230, + 16445, 14911, 17089, 27232, + 16445, 14911, 17089, 27234, + 16445, 14911, 17089, 27236, + 16445, 14911, 17089, 27238, + 16445, 14911, 17089, 27240, + 16445, 14911, 17089, 27242, + 16445, 14911, 17089, 27244, + 16447, 10575, 14334, + 16447, 10575, 15000, + 16447, 10575, 17116, + 16447, 10575, 17534, + 16447, 10575, 19540, + 16447, 11537, 21850, + 16447, 13016, + 16447, 15407, 10575, 8, + 16447, 15407, 10575, 16, + 16447, 15407, 10575, 28, + 16447, 15407, 10575, 40, + 16447, 15407, 10575, 58, + 16447, 15407, 10575, 72, + 16447, 15407, 10575, 96, + 16447, 15407, 10575, 314, + 16447, 15407, 10575, 19415, 34, + 16447, 16095, 13016, + 16447, 16095, 19057, 8808, + 16447, 16531, 0, + 16447, 16531, 8, + 16447, 16531, 16, + 16447, 16531, 28, + 16447, 16531, 40, + 16447, 16531, 58, + 16447, 16531, 72, + 16447, 16531, 96, + 16447, 16531, 108, + 16447, 16531, 126, + 16447, 16531, 150, + 16447, 16531, 248, + 16447, 16531, 272, + 16447, 16531, 344, + 16447, 16531, 358, + 16447, 16531, 394, + 16447, 16531, 426, + 16447, 16531, 466, + 16447, 16531, 548, + 16447, 16531, 582, + 16447, 16531, 598, + 16447, 16531, 614, + 16447, 16531, 648, + 16447, 16531, 714, + 16447, 16531, 778, + 16447, 16531, 972, + 16447, 16531, 1000, + 16447, 16531, 1116, + 16447, 16531, 1214, + 16447, 16531, 1236, + 16447, 16531, 1578, + 16447, 16531, 1588, + 16447, 16531, 1934, + 16447, 16531, 2036, + 16447, 16531, 2278, + 16447, 16531, 2574, + 16447, 16531, 2624, + 16447, 16531, 2698, + 16447, 16531, 2830, + 16447, 16531, 3422, + 16447, 16531, 3502, + 16447, 16531, 6564, + 16447, 16531, 6572, + 16447, 16531, 11082, + 16447, 16531, 14837, 16, + 16447, 19057, 8808, + 16447, 23737, 10574, + 16458, + 16477, 20709, 17298, + 16482, + 16498, + 16513, 10932, + 16513, 10933, 529, 13177, 660, + 16518, + 16527, 10575, 3042, + 16527, 10575, 14334, + 16527, 13069, 2760, + 16527, 13069, 3240, + 16527, 13069, 3536, + 16527, 13069, 7036, + 16527, 13069, 7058, + 16527, 13069, 9358, + 16527, 13069, 11824, + 16527, 13069, 13150, + 16527, 13069, 14778, + 16527, 13069, 15116, + 16527, 15407, 10575, 8, + 16527, 15407, 10575, 16, + 16527, 15407, 10575, 28, + 16527, 15407, 10575, 40, + 16527, 15407, 10575, 58, + 16527, 15407, 10575, 522, + 16527, 15407, 10575, 706, + 16527, 16531, 0, + 16527, 16531, 108, + 16527, 16531, 126, + 16527, 16531, 150, + 16527, 16531, 228, + 16527, 16531, 248, + 16527, 16531, 272, + 16527, 16531, 344, + 16527, 16531, 358, + 16527, 16531, 394, + 16527, 16531, 426, + 16527, 16531, 466, + 16527, 16531, 548, + 16527, 16531, 598, + 16527, 16531, 614, + 16527, 16531, 648, + 16527, 16531, 714, + 16527, 16531, 738, + 16527, 16531, 778, + 16527, 16531, 1022, + 16527, 16531, 1116, + 16527, 16531, 1214, + 16527, 16531, 1330, + 16527, 16531, 1478, + 16527, 16531, 1620, + 16527, 16531, 1744, + 16527, 16531, 2036, + 16527, 16531, 2086, + 16527, 16531, 2448, + 16527, 16531, 2574, + 16527, 16531, 2698, + 16527, 16531, 2830, + 16527, 16531, 2854, + 16527, 16531, 3212, + 16527, 16531, 3422, + 16527, 16531, 3488, + 16527, 16531, 3502, + 16527, 16531, 11058, + 16527, 16531, 11082, + 16527, 21143, 10575, 20, + 16527, 21143, 10575, 22, + 16527, 21143, 10575, 24, + 16527, 21143, 10575, 26, + 16527, 21143, 10575, 30, + 16527, 21143, 10575, 34, + 16527, 21143, 10575, 38, + 16527, 21143, 10575, 7998, + 16527, 21143, 10575, 18738, + 16527, 21919, 16531, 598, + 16527, 21919, 16531, 778, + 16527, 23555, 9565, 17381, 17306, + 16527, 23555, 15902, + 16527, 23555, 17306, + 16527, 23555, 17448, + 16527, 23555, 17449, 15902, + 16553, 1, 10575, 4728, + 16553, 1, 10575, 4730, + 16553, 1, 10575, 4732, + 16553, 1, 10575, 4734, + 16553, 1, 10575, 4736, + 16553, 1, 10575, 4738, + 16553, 1, 10575, 4740, + 16553, 1, 10575, 4742, + 16553, 1, 10575, 4746, + 16553, 1, 10575, 4748, + 16553, 1, 10575, 4750, + 16553, 1, 10575, 4754, + 16553, 1, 10575, 4756, + 16553, 1, 10575, 4758, + 16553, 1, 10575, 4760, + 16553, 1, 10575, 4762, + 16553, 1, 10575, 4764, + 16553, 1, 10575, 4766, + 16553, 1, 10575, 4768, + 16553, 1, 10575, 4770, + 16553, 1, 10575, 4772, + 16553, 1, 10575, 4774, + 16553, 1, 10575, 4776, + 16553, 1, 10575, 4778, + 16553, 1, 10575, 4780, + 16553, 1, 10575, 4782, + 16553, 1, 10575, 4784, + 16553, 1, 10575, 4786, + 16553, 1, 10575, 4788, + 16553, 1, 10575, 4790, + 16553, 1, 10575, 4792, + 16553, 1, 10575, 4794, + 16553, 1, 10575, 4796, + 16553, 1, 10575, 4798, + 16553, 1, 10575, 4800, + 16553, 1, 10575, 4802, + 16553, 1, 10575, 4804, + 16553, 1, 10575, 4806, + 16553, 1, 10575, 4808, + 16553, 1, 10575, 4810, + 16553, 1, 10575, 4812, + 16553, 1, 10575, 4814, + 16553, 1, 10575, 4816, + 16553, 1, 10575, 4818, + 16553, 1, 10575, 4820, + 16553, 1, 10575, 4822, + 16553, 1, 10575, 4824, + 16553, 1, 10575, 4826, + 16553, 1, 10575, 4828, + 16553, 1, 10575, 4830, + 16553, 1, 10575, 4832, + 16553, 1, 10575, 4834, + 16553, 1, 10575, 4836, + 16553, 1, 10575, 4838, + 16553, 1, 10575, 4840, + 16553, 1, 10575, 4842, + 16553, 1, 10575, 4844, + 16553, 1, 10575, 4846, + 16553, 1, 10575, 4848, + 16553, 1, 10575, 4850, + 16553, 1, 10575, 4852, + 16553, 1, 10575, 4854, + 16553, 1, 10575, 4856, + 16553, 1, 10575, 4858, + 16553, 1, 10575, 4860, + 16553, 1, 10575, 4862, + 16553, 1, 10575, 4864, + 16553, 1, 10575, 4866, + 16553, 1, 10575, 4868, + 16553, 1, 10575, 5122, + 16553, 1, 10575, 5124, + 16553, 1, 10575, 5126, + 16553, 1, 10575, 5128, + 16553, 1, 10575, 5130, + 16553, 1, 10575, 5132, + 16553, 1, 10575, 5136, + 16553, 1, 10575, 5138, + 16553, 1, 10575, 5140, + 16553, 1, 10575, 5142, + 16553, 1, 10575, 5144, + 16553, 1, 10575, 5146, + 16553, 1, 10575, 5150, + 16553, 1, 10575, 5152, + 16553, 1, 10575, 5160, + 16553, 1, 10575, 5162, + 16553, 1, 10575, 5166, + 16553, 1, 10575, 5168, + 16553, 1, 10575, 5170, + 16553, 1, 10575, 5172, + 16553, 1, 10575, 5174, + 16553, 1, 10575, 5176, + 16553, 1, 10575, 5178, + 16553, 1, 10575, 5180, + 16553, 1, 10575, 5182, + 16553, 1, 10575, 5184, + 16553, 1, 10575, 5186, + 16553, 1, 10575, 5188, + 16553, 1, 10575, 5190, + 16553, 1, 10575, 5192, + 16553, 1, 10575, 5194, + 16553, 1, 10575, 5196, + 16553, 1, 10575, 5198, + 16553, 1, 10575, 5200, + 16553, 1, 10575, 5202, + 16553, 1, 10575, 5204, + 16553, 1, 10575, 5206, + 16553, 1, 10575, 5208, + 16553, 1, 10575, 5210, + 16553, 1, 10575, 5212, + 16553, 1, 10575, 5214, + 16553, 1, 10575, 5216, + 16553, 1, 10575, 5218, + 16553, 1, 10575, 5220, + 16553, 1, 10575, 5222, + 16553, 1, 10575, 5224, + 16553, 1, 10575, 5226, + 16553, 1, 10575, 5228, + 16553, 1, 10575, 5230, + 16553, 1, 10575, 5232, + 16553, 1, 10575, 5234, + 16553, 1, 10575, 5236, + 16553, 1, 10575, 5238, + 16553, 1, 10575, 5240, + 16553, 1, 10575, 5242, + 16553, 1, 10575, 5244, + 16553, 1, 10575, 5246, + 16553, 1, 10575, 5248, + 16553, 1, 10575, 5250, + 16553, 1, 10575, 5252, + 16553, 1, 10575, 5254, + 16553, 1, 10575, 5256, + 16553, 1, 10575, 5258, + 16553, 1, 10575, 5260, + 16553, 1, 10575, 5262, + 16553, 1, 10575, 5264, + 16553, 1, 10575, 5266, + 16553, 1, 10575, 5268, + 16553, 1, 10575, 5270, + 16553, 1, 10575, 5272, + 16553, 1, 10575, 5274, + 16553, 1, 10575, 5276, + 16553, 1, 10575, 5278, + 16553, 1, 10575, 5280, + 16553, 1, 10575, 5282, + 16553, 1, 10575, 5284, + 16553, 1, 10575, 5286, + 16553, 1, 10575, 5288, + 16553, 1, 10575, 5290, + 16553, 1, 10575, 5292, + 16553, 1, 10575, 5294, + 16553, 1, 10575, 5296, + 16553, 1, 10575, 5298, + 16553, 1, 10575, 5300, + 16553, 1, 10575, 5302, + 16553, 1, 10575, 5304, + 16553, 1, 10575, 5306, + 16553, 1, 10575, 5308, + 16553, 1, 10575, 5310, + 16553, 1, 10575, 5312, + 16553, 1, 10575, 5314, + 16553, 1, 10575, 5316, + 16553, 1, 10575, 5318, + 16553, 1, 10575, 5320, + 16553, 1, 10575, 5322, + 16553, 1, 10575, 5324, + 16553, 1, 10575, 5326, + 16553, 1, 10575, 5328, + 16553, 1, 10575, 5330, + 16553, 1, 10575, 5332, + 16553, 1, 10575, 5334, + 16553, 1, 10575, 5336, + 16553, 1, 10575, 5338, + 16553, 1, 10575, 5340, + 16553, 1, 10575, 5342, + 16553, 1, 10575, 5344, + 16553, 1, 10575, 5346, + 16553, 1, 10575, 5348, + 16553, 1, 10575, 5350, + 16553, 1, 10575, 5352, + 16553, 1, 10575, 5354, + 16553, 1, 10575, 5356, + 16553, 1, 10575, 5358, + 16553, 1, 10575, 5360, + 16553, 1, 10575, 5362, + 16553, 1, 10575, 5364, + 16553, 1, 10575, 5366, + 16553, 1, 10575, 5368, + 16553, 1, 10575, 5370, + 16553, 1, 10575, 5372, + 16553, 1, 10575, 5374, + 16553, 1, 10575, 5376, + 16553, 1, 10575, 5378, + 16553, 1, 10575, 5380, + 16553, 1, 10575, 5382, + 16553, 1, 10575, 5384, + 16553, 1, 10575, 5386, + 16553, 1, 10575, 5388, + 16553, 1, 10575, 5390, + 16553, 1, 10575, 5392, + 16553, 1, 10575, 5394, + 16553, 1, 10575, 5396, + 16553, 1, 10575, 5399, 0, + 16553, 1, 10575, 5401, 2, + 16553, 1, 10575, 5403, 6, + 16553, 1, 10575, 5405, 8, + 16553, 1, 10575, 5407, 10, + 16553, 1, 10575, 5409, 14, + 16553, 1, 10575, 5411, 18, + 16553, 1, 10575, 5413, 20, + 16553, 1, 10575, 5415, 22, + 16553, 1, 10575, 5417, 44, + 16553, 1, 10575, 5419, 46, + 16553, 1, 10575, 5421, 48, + 16553, 1, 10575, 5423, 14428, + 16553, 1, 10575, 5425, 844, + 16553, 1, 10575, 5427, 110, + 16553, 1, 10575, 5429, 154, + 16553, 1, 10575, 5431, 6884, + 16553, 1, 10575, 5433, 346, + 16553, 1, 10575, 5434, + 16553, 1, 10575, 5436, + 16553, 1, 10575, 5438, + 16553, 1, 10575, 5440, + 16553, 1, 10575, 5442, + 16553, 1, 10575, 5444, + 16553, 1, 10575, 5446, + 16553, 1, 10575, 5448, + 16553, 1, 10575, 11970, + 16553, 1, 10575, 12028, + 16553, 1, 10575, 12032, + 16553, 1, 10575, 12058, + 16553, 1, 10575, 12060, + 16553, 1, 10575, 12062, + 16553, 1, 10575, 12064, + 16553, 1, 10575, 12066, + 16553, 1, 10575, 12068, + 16553, 1, 10575, 12170, + 16553, 1, 10575, 12172, + 16553, 1, 10575, 12174, + 16553, 1, 10575, 12176, + 16553, 1, 10575, 12178, + 16553, 1, 10575, 12180, + 16553, 1, 10575, 12182, + 16553, 1, 10575, 12184, + 16553, 1, 10575, 12186, + 16553, 1, 10575, 12188, + 16553, 1, 10575, 12190, + 16553, 1, 10575, 12192, + 16553, 1, 10575, 12194, + 16553, 1, 10575, 12196, + 16553, 1, 10575, 12198, + 16553, 1, 10575, 12200, + 16553, 1, 10575, 12202, + 16553, 1, 10575, 12204, + 16553, 1, 10575, 12206, + 16553, 1, 10575, 12208, + 16553, 1, 10575, 12210, + 16553, 1, 10575, 12212, + 16553, 1, 10575, 12214, + 16553, 1, 10575, 12216, + 16553, 1, 10575, 12218, + 16553, 1, 10575, 12220, + 16553, 1, 10575, 12222, + 16553, 1, 10575, 12224, + 16553, 1, 10575, 12226, + 16553, 1, 10575, 12228, + 16553, 1, 10575, 12230, + 16553, 1, 10575, 12232, + 16553, 1, 10575, 12234, + 16553, 1, 10575, 12236, + 16553, 1, 10575, 12238, + 16553, 1, 10575, 12240, + 16553, 1, 10575, 12242, + 16553, 1, 10575, 12244, + 16553, 1, 10575, 12246, + 16553, 1, 10575, 12248, + 16553, 1, 10575, 12250, + 16553, 1, 10575, 12252, + 16553, 1, 10575, 12254, + 16553, 1, 10575, 12256, + 16553, 1, 10575, 12258, + 16553, 1, 10575, 12260, + 16553, 1, 10575, 12262, + 16553, 1, 10575, 12264, + 16553, 1, 10575, 12266, + 16553, 1, 10575, 12268, + 16553, 1, 10575, 12270, + 16553, 1, 10575, 12272, + 16553, 1, 10575, 12274, + 16553, 1, 10575, 12276, + 16553, 1, 10575, 12278, + 16553, 1, 10575, 12280, + 16553, 1, 10575, 12282, + 16553, 1, 10575, 12284, + 16553, 1, 10575, 12286, + 16553, 1, 10575, 12288, + 16553, 1, 10575, 12290, + 16553, 1, 10575, 12292, + 16553, 1, 10575, 12294, + 16553, 1, 10575, 12296, + 16553, 1, 10575, 12298, + 16553, 1, 10575, 12300, + 16553, 1, 10575, 12302, + 16553, 1, 10575, 12304, + 16553, 1, 10575, 12306, + 16553, 1, 10575, 12308, + 16553, 1, 10575, 12310, + 16553, 1, 10575, 12312, + 16553, 1, 10575, 12314, + 16553, 1, 10575, 12316, + 16553, 1, 10575, 15651, 386, + 16553, 1, 10575, 15653, 388, + 16553, 1, 10575, 15655, 390, + 16553, 1, 10575, 15657, 392, + 16553, 1, 10575, 15662, + 16553, 1, 10575, 15664, + 16553, 1, 10575, 15666, + 16553, 1, 10575, 15668, + 16553, 1, 10575, 15670, + 16553, 1, 10575, 15672, + 16553, 1, 10575, 15674, + 16553, 1, 10575, 19470, + 16553, 1, 10575, 19472, + 16553, 1, 10575, 19474, + 16553, 1, 10575, 19476, + 16553, 1, 10575, 19478, + 16553, 1, 10575, 19480, + 16553, 1, 10575, 19482, + 16553, 1, 10575, 19484, + 16553, 1, 10575, 19486, + 16553, 1, 10575, 19488, + 16553, 1, 10575, 19490, + 16553, 1, 10575, 19492, + 16553, 1, 10575, 19494, + 16553, 1, 10575, 19496, + 16553, 1, 10575, 19498, + 16553, 1, 10575, 19500, + 16553, 1, 10575, 19502, + 16553, 1, 10575, 19504, + 16553, 1, 10575, 19506, + 16553, 1, 10575, 19508, + 16553, 3, 17299, 5594, + 16553, 3, 17299, 5596, + 16553, 3, 17299, 5602, + 16553, 3, 17299, 5626, + 16553, 3, 17299, 5650, + 16553, 3, 17299, 5654, + 16553, 3, 17299, 5668, + 16553, 3, 17299, 5682, + 16553, 3, 17299, 5684, + 16553, 3, 17299, 5714, + 16553, 3, 17299, 5720, + 16553, 3, 17299, 5722, + 16553, 3, 17299, 5726, + 16553, 3, 17299, 5730, + 16553, 3, 20137, 5737, 2368, + 16553, 3, 20137, 5739, 15468, + 16553, 3, 20137, 5741, 6616, + 16553, 3, 20137, 5743, 13178, + 16553, 3, 20137, 5745, 15448, + 16553, 3, 20137, 5747, 15784, + 16553, 3, 20137, 5749, 14426, + 16553, 3, 20137, 5751, 14940, + 16553, 3, 20137, 5753, 17952, + 16553, 3, 20137, 5759, 2752, + 16553, 3, 20137, 5761, 11506, + 16553, 3, 20137, 5762, + 16553, 3, 20137, 5769, 15848, + 16553, 3, 20137, 5771, 7332, + 16553, 3, 20137, 5772, + 16553, 3, 20137, 5775, 11532, + 16553, 3, 20137, 5776, + 16553, 3, 20137, 5778, + 16553, 3, 20137, 5781, 7670, + 16553, 3, 20137, 5782, + 16553, 3, 20137, 5784, + 16553, 3, 20137, 5786, + 16553, 3, 20137, 5792, + 16553, 3, 20137, 5794, + 16553, 3, 20137, 5797, 12712, + 16553, 3, 20137, 5798, + 16553, 3, 20137, 5800, + 16553, 3, 20137, 5803, 18188, + 16553, 3, 20137, 5805, 15730, + 16553, 3, 20137, 5806, + 16553, 3, 20137, 5808, + 16553, 3, 20137, 5810, + 16553, 3, 20137, 5812, + 16553, 3, 20137, 5814, + 16553, 3, 20137, 5816, + 16553, 3, 20137, 5818, + 16553, 3, 20137, 5820, + 16553, 3, 20137, 5822, + 16553, 3, 20137, 5825, 14018, + 16553, 3, 20137, 5826, + 16553, 3, 20137, 5829, 11046, + 16553, 3, 20137, 5830, + 16553, 3, 20137, 5832, + 16553, 3, 20137, 5834, + 16553, 3, 20137, 5836, + 16553, 3, 20137, 5838, + 16553, 3, 20137, 5840, + 16553, 3, 20137, 5842, + 16553, 3, 20137, 5844, + 16553, 3, 20137, 5846, + 16553, 3, 20137, 5848, + 16553, 3, 20137, 5850, + 16553, 3, 20137, 5853, 16332, + 16553, 3, 20137, 5895, 21412, + 16553, 3, 20137, 5901, 17748, + 16553, 3, 20137, 5911, 14936, + 16553, 3, 20137, 5913, 12414, + 16553, 3, 20137, 5914, + 16553, 3, 20137, 5917, 15020, + 16553, 3, 20137, 5918, + 16553, 3, 20137, 5920, + 16553, 3, 20137, 5923, 19435, 17858, + 16553, 3, 20137, 5925, 17858, + 16553, 3, 20137, 5927, 17859, 13286, + 16553, 3, 20137, 5929, 15450, + 16553, 3, 20137, 5930, + 16553, 3, 20137, 5932, + 16553, 3, 20137, 5936, + 16553, 3, 20137, 5938, + 16553, 3, 20137, 5942, + 16553, 3, 20137, 5944, + 16553, 3, 20137, 5946, + 16553, 3, 20137, 5949, 6542, + 16553, 3, 20137, 5950, + 16553, 3, 20137, 5952, + 16553, 3, 20137, 5954, + 16553, 3, 20137, 5956, + 16553, 3, 20137, 5958, + 16553, 3, 20137, 12435, 8806, + 16553, 3, 20137, 12437, 20706, + 16553, 3, 20137, 12439, 1428, + 16553, 3, 20137, 12441, 3040, + 16553, 3, 20137, 12443, 20644, + 16553, 3, 20137, 12445, 18258, + 16553, 3, 20137, 12447, 3270, + 16553, 3, 20137, 12449, 6094, + 16553, 3, 20137, 12451, 1156, + 16553, 3, 20137, 12453, 6124, + 16553, 3, 20137, 17527, 5788, + 16553, 3, 20137, 17527, 5854, + 16553, 3, 20137, 17527, 5856, + 16553, 3, 20137, 17527, 5858, + 16553, 3, 20137, 17527, 5860, + 16553, 3, 20137, 17527, 5862, + 16553, 3, 20137, 17527, 5864, + 16553, 3, 20137, 17527, 5866, + 16553, 3, 20137, 17527, 5868, + 16553, 3, 20137, 17527, 5870, + 16553, 3, 20137, 17527, 5872, + 16553, 3, 20137, 17527, 5874, + 16553, 3, 20137, 17527, 5876, + 16553, 3, 20137, 17527, 5878, + 16553, 3, 20137, 17527, 5880, + 16553, 3, 20137, 17527, 5882, + 16553, 3, 20137, 17527, 5884, + 16553, 3, 20137, 17527, 5886, + 16553, 3, 20137, 17527, 5888, + 16553, 3, 20137, 17527, 5890, + 16553, 3, 20137, 17527, 5892, + 16553, 3, 20137, 17527, 5896, + 16553, 3, 20137, 17527, 5898, + 16553, 3, 20137, 17527, 5902, + 16553, 3, 20137, 17527, 5904, + 16553, 3, 20137, 17527, 5906, + 16553, 3, 20137, 17527, 5908, + 16553, 3, 20137, 17527, 5940, + 16553, 3, 20137, 17527, 5960, + 16553, 3, 20323, 5755, 8004, + 16553, 3, 20323, 5757, 16412, + 16553, 3, 20323, 5765, 12404, + 16553, 3, 20323, 5767, 8860, + 16553, 3, 20323, 5791, 15252, + 16553, 3, 20323, 5935, 13074, + 16553, 3, 20777, 5561, 150, + 16553, 3, 20777, 5563, 606, + 16553, 3, 20777, 5565, 548, + 16553, 3, 20777, 5567, 652, + 16553, 3, 20777, 5569, 660, + 16553, 3, 20777, 5571, 466, + 16553, 3, 20777, 5573, 160, + 16553, 3, 20777, 5575, 0, + 16553, 3, 20777, 5577, 618, + 16553, 3, 20777, 5579, 40, + 16553, 3, 20777, 5581, 566, + 16553, 3, 20777, 5583, 628, + 16553, 3, 20777, 5585, 434, + 16553, 3, 20777, 5587, 168, + 16553, 3, 20777, 5589, 446, + 16553, 3, 20777, 5591, 582, + 16553, 3, 20777, 5593, 796, + 16553, 3, 20777, 5599, 804, + 16553, 3, 20777, 5601, 586, + 16553, 3, 20777, 5605, 454, + 16553, 3, 20777, 5607, 470, + 16553, 3, 20777, 5609, 54, + 16553, 3, 20777, 5611, 610, + 16553, 3, 20777, 5613, 600, + 16553, 3, 20777, 5615, 16, + 16553, 3, 20777, 5617, 2886, + 16553, 3, 20777, 5619, 478, + 16553, 3, 20777, 5621, 614, + 16553, 3, 20777, 5623, 590, + 16553, 3, 20777, 5625, 3026, + 16553, 3, 20777, 5629, 350, + 16553, 3, 20777, 5631, 656, + 16553, 3, 20777, 5633, 8, + 16553, 3, 20777, 5635, 562, + 16553, 3, 20777, 5637, 750, + 16553, 3, 20777, 5639, 624, + 16553, 3, 20777, 5641, 754, + 16553, 3, 20777, 5643, 56, + 16553, 3, 20777, 5645, 362, + 16553, 3, 20777, 5647, 156, + 16553, 3, 20777, 5649, 346, + 16553, 3, 20777, 5653, 2688, + 16553, 3, 20777, 5657, 572, + 16553, 3, 20777, 5659, 170, + 16553, 3, 20777, 5661, 486, + 16553, 3, 20777, 5663, 604, + 16553, 3, 20777, 5665, 738, + 16553, 3, 20777, 5667, 490, + 16553, 3, 20777, 5671, 344, + 16553, 3, 20777, 5673, 638, + 16553, 3, 20777, 5675, 648, + 16553, 3, 20777, 5677, 598, + 16553, 3, 20777, 5679, 28, + 16553, 3, 20777, 5681, 2884, + 16553, 3, 20777, 5687, 352, + 16553, 3, 20777, 5689, 3362, + 16553, 3, 20777, 5691, 366, + 16553, 3, 20777, 5693, 3098, + 16553, 3, 20777, 5695, 668, + 16553, 3, 20777, 5697, 374, + 16553, 3, 20777, 5699, 1324, + 16553, 3, 20777, 5701, 554, + 16553, 3, 20777, 5703, 440, + 16553, 3, 20777, 5705, 798, + 16553, 3, 20777, 5707, 744, + 16553, 3, 20777, 5709, 3024, + 16553, 3, 20777, 5711, 358, + 16553, 3, 20777, 5713, 584, + 16553, 3, 20777, 5717, 426, + 16553, 3, 20777, 5719, 380, + 16553, 3, 20777, 5725, 96, + 16553, 3, 20777, 5729, 3532, + 16553, 3, 20777, 5733, 1326, + 16553, 3, 20777, 5735, 3536, + 16557, 22746, + 16564, + 16575, 15824, + 16577, 15993, 6996, + 16583, 16531, 0, + 16583, 16531, 2, + 16583, 16531, 6, + 16583, 16531, 8, + 16583, 16531, 12, + 16583, 16531, 14, + 16583, 16531, 16, + 16583, 16531, 18, + 16583, 16531, 20, + 16583, 16531, 22, + 16583, 16531, 24, + 16583, 16531, 26, + 16583, 16531, 30, + 16583, 16531, 32, + 16583, 16531, 34, + 16583, 16531, 36, + 16583, 16531, 38, + 16583, 16531, 40, + 16583, 16531, 44, + 16583, 16531, 46, + 16583, 16531, 50, + 16583, 16531, 82, + 16583, 16531, 114, + 16583, 16531, 204, + 16583, 16531, 368, + 16583, 16531, 444, + 16583, 16531, 484, + 16583, 16531, 654, + 16583, 16531, 666, + 16585, 16531, 0, + 16585, 16531, 2, + 16585, 16531, 4, + 16585, 16531, 6, + 16585, 16531, 8, + 16585, 16531, 10, + 16585, 16531, 12, + 16585, 16531, 16, + 16585, 16531, 20, + 16585, 16531, 22, + 16585, 16531, 24, + 16585, 16531, 26, + 16585, 16531, 28, + 16585, 16531, 32, + 16585, 16531, 34, + 16585, 16531, 36, + 16585, 16531, 38, + 16585, 16531, 40, + 16585, 16531, 42, + 16585, 16531, 48, + 16585, 16531, 82, + 16585, 16531, 204, + 16585, 16531, 422, + 16585, 16531, 484, + 16585, 16531, 634, + 16585, 16531, 666, + 16585, 22983, 8808, + 16586, + 16596, + 16605, 23024, + 16637, 3241, 17211, 19574, + 16637, 3241, 18889, 12525, 10690, + 16637, 6101, 15453, 15938, + 16637, 7037, 17211, 19574, + 16637, 7059, 18889, 12525, 10690, + 16637, 7059, 18889, 20489, 10690, + 16637, 8281, 12941, 17811, 20412, + 16637, 8281, 23523, 20412, + 16637, 12525, 15938, + 16637, 13151, 17211, 19574, + 16637, 13151, 18889, 12525, 10690, + 16637, 13421, 12934, + 16637, 14659, 12941, 17811, 20412, + 16637, 14659, 23523, 20412, + 16637, 14782, + 16637, 14911, 15453, 15938, + 16637, 15117, 18889, 12525, 10690, + 16637, 15117, 18889, 20489, 10690, + 16637, 15453, 15938, + 16637, 15453, 17224, + 16637, 19032, + 16637, 20933, 964, + 16637, 21409, 8281, 23523, 20412, + 16637, 21409, 14659, 23523, 20412, + 16637, 23909, 14932, + 16637, 25813, 12379, 17811, 20412, + 16637, 26163, 12379, 17811, 20412, + 16639, 13931, 2325, 7832, + 16639, 13931, 5508, + 16639, 13931, 5517, 7832, + 16639, 13931, 11537, 22819, 8808, + 16639, 13931, 12339, 16452, + 16639, 13931, 13069, 2760, + 16639, 13931, 13069, 3240, + 16639, 13931, 13069, 3536, + 16639, 13931, 13069, 7036, + 16639, 13931, 13069, 7058, + 16639, 13931, 13069, 9358, + 16639, 13931, 13069, 11824, + 16639, 13931, 13069, 13150, + 16639, 13931, 13069, 14778, + 16639, 13931, 13069, 15116, + 16639, 13931, 15407, 10575, 96, + 16639, 13931, 15407, 10575, 314, + 16639, 13931, 15407, 10575, 706, + 16639, 13931, 15407, 10575, 822, + 16639, 13931, 15407, 10575, 836, + 16639, 13931, 15407, 10575, 5504, + 16639, 13931, 15407, 10575, 7806, + 16639, 13931, 15407, 10575, 9528, + 16639, 13931, 15407, 10575, 9774, + 16639, 13931, 15407, 10575, 11254, + 16639, 13931, 15407, 10575, 15518, + 16639, 13931, 15407, 10575, 17190, + 16639, 13931, 15407, 10575, 17864, + 16639, 13931, 15407, 10575, 19408, + 16639, 13931, 16531, 8, + 16639, 13931, 16531, 16, + 16639, 13931, 16531, 17, 16570, + 16639, 13931, 16531, 28, + 16639, 13931, 16531, 108, + 16639, 13931, 16531, 466, + 16639, 13931, 16531, 467, 16570, + 16639, 13931, 16531, 548, + 16639, 13931, 16531, 549, 16570, + 16639, 13931, 16531, 694, + 16639, 13931, 16531, 1116, + 16639, 13931, 16531, 1214, + 16639, 13931, 16531, 1250, + 16639, 13931, 16531, 1624, + 16639, 13931, 16531, 1800, + 16639, 13931, 16531, 1926, + 16639, 13931, 16531, 2096, + 16639, 13931, 16531, 2097, 16570, + 16639, 13931, 16531, 2198, + 16639, 13931, 16531, 2199, 16570, + 16639, 13931, 16531, 2444, + 16639, 13931, 16531, 2445, 16570, + 16639, 13931, 16531, 2624, + 16639, 13931, 16531, 2698, + 16639, 13931, 16531, 3038, + 16639, 13931, 16531, 3182, + 16639, 13931, 16531, 3212, + 16639, 13931, 16531, 3286, + 16639, 13931, 16531, 3440, + 16639, 13931, 16531, 3441, 16570, + 16639, 13931, 16531, 3502, + 16639, 13931, 16531, 3740, + 16639, 13931, 16531, 6070, + 16639, 13931, 16531, 6290, + 16639, 13931, 16531, 6572, + 16639, 13931, 16531, 6656, + 16639, 13931, 16531, 7304, + 16639, 13931, 16531, 7854, + 16639, 13931, 16531, 8080, + 16639, 13931, 16531, 9316, + 16639, 13931, 16531, 9317, 16570, + 16639, 13931, 16531, 9856, + 16639, 13931, 16531, 10960, + 16639, 13931, 16531, 11082, + 16639, 13931, 16531, 11648, + 16639, 13931, 16531, 12424, + 16639, 13931, 17534, + 16639, 13931, 19674, + 16639, 13931, 19676, + 16639, 13931, 20777, 22819, 8808, + 16661, 1290, + 16661, 8281, 2761, 18951, 12532, + 16661, 14659, 2761, 18951, 12532, + 16661, 15109, 15453, 14659, 20501, 13594, + 16661, 15109, 20150, + 16670, + 16671, 5978, + 16673, 14526, + 16673, 14527, 2748, + 16673, 14527, 11513, 22837, 12415, 95, 8280, + 16674, + 16677, 22756, + 16679, 3537, 3308, + 16680, + 16681, 6996, + 16684, + 16687, 21108, + 16701, 20373, 14932, + 16714, + 16718, + 16759, 8809, 10574, + 16761, 20759, 506, + 16761, 20759, 507, 529, 13177, 660, + 16787, 3413, 7073, 10696, + 16787, 10574, + 16787, 16111, 7073, 10696, + 16787, 17473, 7073, 10696, + 16787, 17475, 7073, 10696, + 16787, 18149, 7073, 10696, + 16787, 19117, 7073, 10696, + 16787, 19967, 7073, 10696, + 16787, 20053, 7073, 10696, + 16787, 20369, 7073, 10696, + 16787, 20825, 7073, 10696, + 16787, 21855, 7073, 10696, + 16789, 10574, + 16795, 23577, 21100, + 16803, 19642, + 16804, + 16819, 2034, + 16821, 6108, + 16821, 13470, + 16829, 8281, 23522, + 16829, 14659, 23522, + 16837, 11044, + 16844, + 16852, + 16855, 13509, 6339, 10575, 1442, + 16855, 13509, 6339, 10575, 1688, + 16855, 13509, 6339, 10575, 2100, + 16855, 13509, 6339, 10575, 2164, + 16855, 13509, 6339, 10575, 2270, + 16855, 13509, 6339, 10575, 3660, + 16855, 13509, 6339, 10575, 3726, + 16855, 13509, 6339, 10575, 3884, + 16855, 13509, 6339, 10575, 7444, + 16855, 13509, 6339, 10575, 8050, + 16855, 13509, 6339, 10575, 8268, + 16855, 13509, 6339, 10575, 8996, + 16855, 13509, 6339, 10575, 9854, + 16855, 13509, 6339, 10575, 10954, + 16855, 13509, 6339, 10575, 11054, + 16855, 13509, 6339, 10575, 11072, + 16855, 13509, 6339, 10575, 11674, + 16855, 13509, 6339, 10575, 15500, + 16855, 13509, 6339, 10575, 17444, + 16855, 13509, 8809, 1135, 628, + 16855, 13509, 8809, 1135, 1780, + 16855, 13509, 8809, 1135, 2026, + 16855, 13509, 8809, 1135, 3514, + 16855, 13509, 8809, 1135, 8062, + 16855, 13509, 8809, 1135, 10720, + 16855, 13509, 8809, 1135, 10872, + 16855, 13509, 10575, 98, + 16855, 13509, 10575, 301, 3890, + 16855, 13509, 10575, 1135, 2889, 6550, + 16855, 13509, 10575, 1135, 6369, 17446, + 16855, 13509, 10575, 1135, 7427, 2333, 9505, 9504, + 16855, 13509, 10575, 1135, 9459, 3476, + 16855, 13509, 10575, 1135, 11065, 3106, + 16855, 13509, 10575, 1135, 11136, + 16855, 13509, 10575, 1135, 11137, 6318, + 16855, 13509, 10575, 1135, 12662, + 16855, 13509, 10575, 1748, + 16855, 13509, 10575, 2296, + 16855, 13509, 10575, 2482, + 16855, 13509, 10575, 3394, + 16855, 13509, 10575, 3707, 2316, + 16855, 13509, 10575, 3707, 7008, + 16855, 13509, 10575, 3707, 9468, + 16855, 13509, 10575, 3707, 10420, + 16855, 13509, 10575, 3707, 10956, + 16855, 13509, 10575, 3707, 15100, + 16855, 13509, 10575, 3707, 15223, 6252, + 16855, 13509, 10575, 4103, 10926, + 16855, 13509, 10575, 7630, + 16855, 13509, 10575, 8849, 10716, + 16855, 13509, 10575, 8849, 15218, + 16855, 13509, 10575, 9448, + 16855, 13509, 10575, 9508, + 16855, 13509, 10575, 11570, + 16855, 13509, 10575, 11574, + 16855, 13509, 10575, 11594, + 16855, 13509, 10575, 15499, 3076, + 16855, 13509, 10575, 15499, 3480, + 16855, 13509, 10575, 15499, 6998, + 16855, 13509, 10575, 15499, 14286, + 16855, 13509, 10575, 17479, 6254, + 16855, 13509, 10575, 23693, 1748, + 16855, 13509, 13069, 2760, + 16855, 13509, 13069, 3240, + 16855, 13509, 13069, 3536, + 16855, 13509, 13069, 7036, + 16855, 13509, 13069, 7058, + 16855, 13509, 13069, 9358, + 16855, 13509, 13069, 11824, + 16855, 13509, 13069, 13150, + 16855, 13509, 13069, 14778, + 16855, 13509, 13069, 15116, + 16855, 13509, 15407, 1984, + 16855, 13509, 15407, 2010, + 16855, 13509, 15407, 2016, + 16855, 13509, 15407, 2030, + 16855, 13509, 15407, 2048, + 16855, 13509, 15407, 2068, + 16855, 13509, 15407, 2090, + 16855, 13509, 15407, 2106, + 16855, 13509, 15407, 2132, + 16855, 13509, 15407, 2150, + 16855, 13509, 15407, 2158, + 16855, 13509, 15407, 2168, + 16855, 13509, 15407, 7964, + 16855, 13509, 15407, 7972, + 16855, 13509, 15407, 7986, + 16855, 13509, 15407, 7988, + 16855, 13509, 15407, 8010, + 16855, 13509, 15407, 8014, + 16855, 13509, 15407, 8016, + 16855, 13509, 15407, 8020, + 16855, 13509, 15407, 8036, + 16855, 13509, 15407, 8038, + 16855, 13509, 15407, 8098, + 16855, 13509, 15407, 8100, + 16855, 13509, 15407, 8136, + 16855, 13509, 15407, 8138, + 16855, 13509, 15407, 8170, + 16855, 13509, 15407, 8172, + 16855, 13509, 16787, 3413, 19618, + 16855, 13509, 16787, 3413, 22044, + 16855, 13509, 16787, 10904, + 16855, 13509, 16787, 18281, 20310, + 16855, 13509, 16787, 20132, + 16855, 13509, 16787, 20310, + 16855, 13509, 16787, 22072, + 16855, 13509, 21143, 96, + 16855, 13509, 21143, 1092, + 16855, 13509, 21143, 1700, + 16855, 13509, 21143, 2216, + 16855, 13509, 21143, 2380, + 16855, 13509, 21143, 2530, + 16855, 13509, 21143, 3050, + 16855, 13509, 21143, 3666, + 16855, 13509, 21143, 3814, + 16855, 13509, 21143, 3904, + 16855, 13509, 21143, 6272, + 16855, 13509, 21143, 7530, + 16855, 13509, 21143, 7608, + 16855, 13509, 21143, 9406, + 16855, 13509, 21143, 9410, + 16855, 13509, 21143, 9974, + 16855, 13509, 21143, 14092, + 16855, 13509, 21143, 14280, + 16855, 13509, 21143, 14284, + 16855, 13509, 21143, 14552, + 16860, + 16866, + 16873, 17298, + 16876, + 16881, 18278, + 16891, 323, 13833, 20510, + 16891, 323, 17235, 10182, + 16891, 11513, 5978, + 16891, 11513, 12535, 7424, + 16891, 11513, 12936, + 16891, 11513, 16205, 13458, + 16891, 11513, 18907, 6996, + 16891, 11513, 21470, + 16891, 13093, 21092, + 16891, 15829, 16022, + 16891, 18967, 6113, 13459, 323, 23072, + 16891, 19706, + 16891, 20062, + 16895, 10574, + 16900, + 16911, 15208, + 16914, + 16920, + 16922, + 16925, 19724, + 16925, 19725, 9787, 3537, 562, + 16935, 22210, + 16947, 1088, + 16947, 6229, 21815, 13806, + 16947, 18750, + 16952, + 16957, 7670, + 16957, 8808, + 16957, 8809, 6996, + 16958, + 16961, 14548, + 16967, 12488, + 16968, + 16979, 17643, 23308, + 16987, 13470, + 16996, + 17002, + 17003, 6996, + 17005, 1088, + 17005, 22590, + 17007, 431, 10574, + 17007, 433, 10574, + 17007, 451, 10574, + 17007, 1290, + 17007, 5967, 507, 7432, + 17007, 7032, + 17007, 7432, + 17007, 7433, 11513, 9831, 17769, 16661, 897, 10151, 18150, + 17007, 7433, 11513, 18151, 19160, + 17007, 12922, + 17007, 14911, 8281, 17225, 17810, + 17007, 16093, 25795, 16614, + 17007, 17224, + 17007, 25795, 16614, + 17015, 15407, 10575, 8, + 17015, 15407, 10575, 16, + 17015, 15407, 10575, 28, + 17015, 15407, 10575, 40, + 17015, 15407, 10575, 72, + 17015, 15407, 10575, 96, + 17015, 15407, 10575, 178, + 17015, 15407, 10575, 218, + 17015, 16531, 0, + 17015, 16531, 108, + 17015, 16531, 126, + 17015, 16531, 150, + 17015, 16531, 248, + 17015, 16531, 272, + 17015, 16531, 344, + 17015, 16531, 358, + 17015, 16531, 394, + 17015, 16531, 426, + 17015, 16531, 466, + 17015, 16531, 548, + 17015, 16531, 598, + 17015, 16531, 614, + 17015, 16531, 648, + 17015, 16531, 738, + 17015, 16531, 778, + 17015, 16531, 2392, + 17015, 16531, 2548, + 17015, 16531, 2574, + 17015, 16531, 2698, + 17015, 16531, 9284, + 17015, 16531, 9582, + 17015, 17534, + 17015, 19057, 8808, + 17015, 21143, 10575, 14, + 17015, 21143, 10575, 26, + 17015, 21143, 10575, 34, + 17015, 21143, 10575, 474, + 17023, 8280, + 17023, 14658, + 17023, 17298, + 17026, + 17027, 12415, 699, 8280, + 17027, 12415, 699, 14658, + 17027, 12415, 6701, 8280, + 17027, 12415, 6701, 14658, + 17027, 12415, 8281, 698, + 17027, 12415, 8281, 6700, + 17027, 12415, 14659, 698, + 17027, 12415, 14659, 6700, + 17033, 16926, + 17037, 19791, 19743, 14931, 6833, 12414, + 17037, 19791, 19743, 18137, 19790, + 17042, + 17045, 14880, + 17045, 17896, + 17048, + 17055, 2846, + 17055, 11372, + 17074, + 17080, + 17084, + 17085, 19040, + 17086, + 17089, 14911, 8, + 17089, 14911, 12, + 17089, 14911, 22, + 17089, 14911, 28, + 17089, 17835, 2, + 17089, 17835, 8, + 17089, 17835, 10, + 17089, 17835, 14, + 17089, 17835, 16, + 17089, 17835, 22, + 17089, 17835, 24, + 17089, 17835, 30, + 17089, 17835, 34, + 17089, 20241, 217, 20412, + 17090, + 17095, 14545, 13944, + 17098, + 17104, + 17109, 1290, + 17115, 16710, + 17127, 1856, + 17138, + 17145, 17156, + 17148, + 17150, + 17152, + 17154, + 17171, 13837, 21779, 8808, + 17171, 25813, 12379, 21779, 8808, + 17171, 26163, 12379, 21779, 8808, + 17171, 28049, 21779, 8808, + 17179, 6996, + 17181, 529, 3284, + 17187, 5978, + 17199, 20933, 7022, + 17199, 22495, 7022, + 17203, 17734, + 17204, + 17205, 3756, + 17207, 9443, 2790, + 17207, 14810, + 17207, 19657, 2790, + 17212, + 17215, 13944, + 17225, 1, 9787, 24, + 17225, 5, 9787, 364, + 17225, 21, 2750, + 17225, 25, 2750, + 17225, 25, 9787, 36, + 17225, 25, 9787, 37, 19164, + 17225, 25, 12938, + 17225, 25, 19164, + 17225, 43, 9787, 24, + 17225, 80, + 17225, 96, + 17225, 120, + 17225, 128, + 17225, 130, + 17225, 140, + 17225, 141, 12938, + 17225, 141, 19164, + 17225, 142, + 17225, 150, + 17225, 152, + 17225, 162, + 17225, 164, + 17225, 166, + 17225, 167, 12938, + 17225, 167, 19164, + 17225, 220, + 17225, 238, + 17225, 250, + 17225, 270, + 17225, 272, + 17225, 278, + 17225, 290, + 17225, 296, + 17225, 322, + 17225, 336, + 17225, 358, + 17225, 360, + 17225, 364, + 17225, 368, + 17225, 370, + 17225, 372, + 17225, 373, 12938, + 17225, 373, 17834, + 17225, 373, 19164, + 17225, 378, + 17225, 382, + 17225, 384, + 17225, 408, + 17225, 410, + 17225, 420, + 17225, 426, + 17225, 428, + 17225, 429, 14910, + 17225, 436, + 17225, 442, + 17225, 444, + 17225, 445, 12938, + 17225, 445, 19164, + 17225, 452, + 17225, 455, 0, + 17225, 455, 10, + 17225, 455, 12, + 17225, 455, 22, + 17225, 455, 24, + 17225, 455, 36, + 17225, 455, 42, + 17225, 455, 44, + 17225, 456, + 17225, 457, 8854, + 17225, 458, + 17225, 459, 8854, + 17225, 466, + 17225, 472, + 17225, 482, + 17225, 488, + 17225, 492, + 17225, 494, + 17225, 536, + 17225, 548, + 17225, 549, 5502, + 17225, 550, + 17225, 556, + 17225, 560, + 17225, 564, + 17225, 568, + 17225, 570, + 17225, 574, + 17225, 576, + 17225, 632, + 17225, 640, + 17225, 740, + 17225, 964, + 17225, 1082, + 17225, 1086, + 17225, 1164, + 17225, 1405, 9141, 13950, + 17225, 1405, 9141, 14640, + 17225, 1405, 9141, 16330, + 17225, 1405, 9141, 17302, + 17225, 1405, 9141, 19246, + 17225, 1406, + 17225, 1538, + 17225, 1598, + 17225, 1634, + 17225, 1782, + 17225, 1794, + 17225, 2046, + 17225, 2110, + 17225, 2286, + 17225, 2426, + 17225, 2436, + 17225, 2452, + 17225, 2464, + 17225, 2876, + 17225, 3032, + 17225, 3033, 9787, 36, + 17225, 3033, 9787, 37, 19164, + 17225, 3432, + 17225, 3468, + 17225, 3622, + 17225, 5452, + 17225, 6084, + 17225, 6628, + 17225, 6694, + 17225, 7052, + 17225, 7059, 15975, 12525, 22066, + 17225, 7059, 15975, 20606, + 17225, 7059, 15975, 21190, + 17225, 7059, 17916, + 17225, 7318, + 17225, 7660, + 17225, 7812, + 17225, 8022, + 17225, 8110, + 17225, 8281, 9783, 1037, 20406, + 17225, 8854, + 17225, 8954, + 17225, 9146, + 17225, 9776, + 17225, 9778, + 17225, 9846, + 17225, 9878, + 17225, 10114, + 17225, 10152, + 17225, 10184, + 17225, 11513, 3473, 7429, 12524, + 17225, 11513, 8281, 7429, 12524, + 17225, 11513, 13839, 8281, 19791, 7429, 12524, + 17225, 11513, 13839, 14659, 19791, 7429, 12524, + 17225, 11513, 14659, 7429, 12524, + 17225, 11513, 15287, 8281, 661, 13839, 14659, 7022, + 17225, 11513, 15287, 8281, 19791, 7429, 12524, + 17225, 11513, 15287, 14659, 661, 13839, 8281, 7022, + 17225, 11513, 15287, 14659, 19791, 7429, 12524, + 17225, 11513, 15827, 7429, 12524, + 17225, 11513, 19791, 22251, 7022, + 17225, 11513, 20933, 7022, + 17225, 11513, 21147, 18774, + 17225, 11513, 22495, 7022, + 17225, 11513, 22731, 22251, 7022, + 17225, 11750, + 17225, 12386, + 17225, 12494, + 17225, 12998, + 17225, 13142, + 17225, 13336, + 17225, 13340, + 17225, 13386, + 17225, 13448, + 17225, 13532, + 17225, 13544, + 17225, 13589, 506, + 17225, 13589, 507, 529, 2643, 13177, 660, + 17225, 13589, 507, 529, 13177, 660, + 17225, 13646, + 17225, 13670, + 17225, 13726, + 17225, 13904, + 17225, 13906, + 17225, 14260, + 17225, 14464, + 17225, 14510, + 17225, 14518, + 17225, 14562, + 17225, 14659, 9783, 1037, 20406, + 17225, 14700, + 17225, 14772, + 17225, 14774, + 17225, 15438, + 17225, 15506, + 17225, 15508, + 17225, 15718, + 17225, 15746, + 17225, 15822, + 17225, 16292, + 17225, 16336, + 17225, 16352, + 17225, 16374, + 17225, 16478, + 17225, 16490, + 17225, 16616, + 17225, 16878, + 17225, 16912, + 17225, 16940, + 17225, 17207, 7065, 3473, 8280, + 17225, 17207, 7065, 3473, 14658, + 17225, 17207, 7065, 15827, 8280, + 17225, 17207, 7065, 15827, 14658, + 17225, 17326, + 17225, 17728, + 17225, 18206, + 17225, 18336, + 17225, 18340, + 17225, 18392, + 17225, 18534, + 17225, 18550, + 17225, 18572, + 17225, 18604, + 17225, 18606, + 17225, 18624, + 17225, 19004, + 17225, 19026, + 17225, 19028, + 17225, 19114, + 17225, 19542, + 17225, 19650, + 17225, 19990, + 17225, 20123, 7652, + 17225, 20130, + 17225, 20411, 506, + 17225, 20411, 507, 529, 2643, 13177, 660, + 17225, 20411, 507, 529, 13177, 660, + 17225, 20428, + 17225, 20511, 21498, + 17225, 20574, + 17225, 20614, + 17225, 21450, + 17225, 21474, + 17225, 21538, + 17225, 21544, + 17225, 21594, + 17225, 21742, + 17225, 22522, + 17225, 23098, + 17225, 23290, + 17231, 507, 18516, + 17257, 20419, 15453, 10690, + 17269, 22558, + 17273, 506, + 17273, 507, 529, 13177, 660, + 17273, 507, 529, 13177, 661, 11513, 1291, 12318, + 17273, 507, 11513, 2643, 13177, 660, + 17273, 507, 12319, 2643, 13177, 660, + 17273, 507, 12319, 15141, 20406, + 17273, 507, 12319, 15703, 13177, 660, + 17273, 507, 12319, 16121, 10574, + 17273, 11513, 1290, + 17273, 11513, 9905, 10575, 12502, + 17273, 11513, 26135, 10575, 12502, + 17273, 12319, 17272, + 17273, 12319, 20764, + 17273, 12319, 22837, 12414, + 17283, 9787, 21076, + 17286, + 17297, 14075, 10575, 18254, + 17297, 14075, 10575, 19540, + 17297, 14075, 10575, 19962, + 17297, 14075, 10575, 21003, 18254, + 17297, 14075, 15407, 10575, 0, + 17297, 14075, 15407, 10575, 8, + 17297, 14075, 15407, 10575, 16, + 17297, 14075, 15407, 10575, 40, + 17297, 14075, 15407, 10575, 522, + 17297, 14075, 16531, 0, + 17297, 14075, 16531, 8, + 17297, 14075, 16531, 16, + 17297, 14075, 16531, 28, + 17297, 14075, 16531, 40, + 17297, 14075, 16531, 118, + 17297, 14075, 16531, 142, + 17297, 14075, 16531, 168, + 17297, 14075, 16531, 262, + 17297, 14075, 16531, 288, + 17297, 14075, 16531, 350, + 17297, 14075, 16531, 374, + 17297, 14075, 16531, 412, + 17297, 14075, 16531, 446, + 17297, 14075, 16531, 486, + 17297, 14075, 16531, 566, + 17297, 14075, 16531, 606, + 17297, 14075, 16531, 628, + 17297, 14075, 16531, 660, + 17297, 14075, 16531, 1006, + 17297, 14075, 16531, 1122, + 17297, 14075, 16531, 1220, + 17297, 14075, 16531, 1242, + 17297, 14075, 16531, 1594, + 17297, 14075, 16531, 1920, + 17297, 14075, 16531, 2042, + 17297, 14075, 16531, 2836, + 17297, 14075, 16531, 3122, + 17297, 14075, 16531, 3428, + 17297, 14075, 16531, 3510, + 17297, 14075, 16531, 6578, + 17297, 14075, 16531, 11088, + 17297, 14075, 16939, 16606, + 17297, 14075, 16939, 16608, + 17297, 14075, 16939, 16610, + 17297, 14075, 16939, 16612, + 17299, 1493, 1393, 507, 10920, + 17299, 1493, 1393, 507, 16636, + 17299, 1493, 1393, 507, 24172, + 17299, 1493, 1393, 507, 24173, 12532, + 17299, 1493, 6056, + 17299, 1493, 6547, 8325, 16122, + 17299, 1493, 7021, 21850, + 17299, 1493, 7057, 7006, + 17299, 1493, 8321, 7006, + 17299, 1493, 9526, + 17299, 1493, 11141, 1, 23202, + 17299, 1493, 11259, 21850, + 17299, 1493, 13425, 21850, + 17299, 1493, 13925, 17856, + 17299, 1493, 14819, 322, + 17299, 1493, 14819, 2784, + 17299, 1493, 14932, + 17299, 1493, 14971, 507, 10920, + 17299, 1493, 14971, 507, 18260, + 17299, 1493, 15870, + 17299, 1493, 16026, + 17299, 1493, 16027, 7057, 3536, + 17299, 1493, 16027, 16637, 14783, 7056, + 17299, 1493, 16027, 17225, 17863, 12539, 7056, + 17299, 1493, 16027, 23573, 17863, 12539, 7056, + 17299, 1493, 16037, 17913, 2760, + 17299, 1493, 16037, 17913, 3536, + 17299, 1493, 16037, 17913, 7058, + 17299, 1493, 16037, 17913, 15116, + 17299, 1493, 16122, + 17299, 1493, 17013, 21850, + 17299, 1493, 18114, + 17299, 1493, 18682, + 17299, 1493, 19663, 17022, + 17299, 1493, 20355, 23032, + 17299, 1493, 20933, 22960, + 17299, 1493, 21044, + 17299, 1493, 21827, 17192, + 17299, 1493, 22495, 22960, + 17299, 1493, 22952, + 17299, 1493, 22953, 7057, 3536, + 17299, 1493, 23032, + 17299, 1493, 23683, 7792, + 17305, 1393, 507, 21728, + 17305, 3537, 20933, 6697, 12318, + 17305, 3537, 20933, 6697, 12502, + 17305, 12917, 17177, 8280, + 17305, 12917, 17177, 14658, + 17305, 13187, 12318, + 17305, 13187, 12502, + 17305, 13469, 12318, + 17305, 13469, 12502, + 17305, 14052, + 17305, 14635, 12318, + 17305, 14635, 12502, + 17305, 14702, + 17305, 15117, 6697, 12318, + 17305, 15117, 6697, 12502, + 17305, 16093, 15629, 17682, + 17305, 16093, 15629, 22494, + 17305, 16531, 8, + 17305, 16531, 276, + 17305, 16531, 554, + 17305, 16531, 2438, + 17305, 16531, 2676, + 17305, 16531, 3398, + 17305, 16531, 3750, + 17305, 16531, 6066, + 17305, 16531, 7478, + 17305, 16531, 8002, + 17305, 16531, 9968, + 17305, 16531, 10154, + 17305, 16531, 10478, + 17305, 16531, 10914, + 17305, 16531, 10915, 20068, + 17305, 16531, 11752, + 17305, 16531, 11753, 276, + 17305, 16531, 11812, + 17305, 16531, 12350, + 17305, 16531, 13259, 19060, + 17305, 16531, 13326, + 17305, 16531, 13327, 20068, + 17305, 16531, 14720, + 17305, 16531, 16008, + 17305, 16531, 16504, + 17305, 16531, 18019, 16009, 10154, + 17305, 16531, 18843, 12512, + 17305, 16531, 18843, 16254, + 17305, 16531, 18843, 17982, + 17305, 16531, 19060, + 17305, 16531, 19137, 230, + 17305, 16531, 19137, 13688, + 17305, 16531, 19137, 15612, + 17305, 16531, 20587, 554, + 17305, 16531, 21575, 344, + 17305, 16531, 21575, 598, + 17305, 16531, 21575, 1000, + 17305, 16531, 21575, 2278, + 17305, 16531, 21575, 2574, + 17305, 16531, 21575, 2624, + 17305, 16531, 21575, 2698, + 17305, 16531, 21575, 3286, + 17305, 16531, 21575, 3502, + 17305, 16531, 21575, 8342, + 17305, 16531, 21575, 9422, + 17305, 16531, 23679, 12350, + 17305, 16977, 12318, + 17305, 16977, 12502, + 17305, 16977, 16092, + 17305, 17629, 12318, + 17305, 17629, 12502, + 17305, 17629, 16092, + 17305, 17742, + 17305, 18741, 8321, 12318, + 17305, 18741, 8321, 12502, + 17305, 20011, 1290, + 17305, 20105, 16792, + 17305, 20105, 21590, + 17305, 20105, 22188, + 17305, 20598, + 17305, 21780, + 17305, 21925, 7073, 10696, + 17305, 21925, 12916, + 17305, 21925, 12917, 17177, 8280, + 17305, 21925, 12917, 17177, 14658, + 17305, 22495, 12916, + 17305, 23092, + 17305, 23245, 16092, + 17305, 23681, 7073, 10696, + 17305, 23681, 12916, + 17305, 23681, 12917, 17177, 8280, + 17305, 23737, 8808, + 17316, + 17321, 13069, 2760, + 17321, 13069, 3240, + 17321, 13069, 3536, + 17321, 13069, 7036, + 17321, 13069, 7058, + 17321, 13069, 9358, + 17321, 13069, 11824, + 17321, 13069, 13150, + 17321, 13069, 14778, + 17321, 13069, 15116, + 17321, 16531, 62, + 17321, 16531, 88, + 17321, 16531, 102, + 17321, 16531, 106, + 17321, 16531, 108, + 17321, 16531, 126, + 17321, 16531, 150, + 17321, 16531, 182, + 17321, 16531, 210, + 17321, 16531, 224, + 17321, 16531, 226, + 17321, 16531, 228, + 17321, 16531, 248, + 17321, 16531, 272, + 17321, 16531, 302, + 17321, 16531, 328, + 17321, 16531, 338, + 17321, 16531, 342, + 17321, 16531, 358, + 17321, 16531, 394, + 17321, 16531, 426, + 17321, 16531, 430, + 17321, 16531, 448, + 17321, 16531, 460, + 17321, 16531, 464, + 17321, 16531, 466, + 17321, 16531, 502, + 17321, 16531, 526, + 17321, 16531, 540, + 17321, 16531, 544, + 17321, 16531, 548, + 17321, 16531, 598, + 17321, 16531, 614, + 17321, 16531, 648, + 17321, 16531, 678, + 17321, 16531, 700, + 17321, 16531, 708, + 17321, 16531, 712, + 17321, 16531, 716, + 17321, 16531, 724, + 17321, 16531, 732, + 17321, 16531, 736, + 17321, 16531, 738, + 17321, 16531, 762, + 17321, 16531, 778, + 17321, 16531, 796, + 17321, 16531, 932, + 17321, 16531, 936, + 17321, 16531, 938, + 17321, 16531, 940, + 17321, 16531, 1116, + 17321, 16531, 1236, + 17321, 16531, 1588, + 17321, 16531, 1796, + 17321, 16531, 2036, + 17321, 16531, 2574, + 17321, 16531, 2586, + 17321, 16531, 2698, + 17321, 16531, 2830, + 17321, 16531, 3212, + 17321, 16531, 3422, + 17321, 16531, 3488, + 17321, 16531, 3580, + 17321, 16531, 3588, + 17321, 16531, 3590, + 17321, 16531, 3594, + 17321, 16531, 3598, + 17321, 16531, 3600, + 17321, 16531, 3602, + 17321, 16531, 3604, + 17321, 16531, 7680, + 17321, 16531, 8351, 3590, + 17321, 16531, 11244, + 17321, 16531, 11246, + 17321, 16531, 11248, + 17321, 16531, 11250, + 17321, 16531, 13259, 474, + 17321, 16531, 14837, 938, + 17321, 16531, 14837, 3594, + 17323, 21517, 8808, + 17323, 24212, + 17323, 24214, + 17323, 24216, + 17323, 24218, + 17323, 24220, + 17323, 24222, + 17323, 24224, + 17323, 24226, + 17323, 24228, + 17323, 24230, + 17323, 24232, + 17323, 24234, + 17323, 24236, + 17323, 24238, + 17323, 24240, + 17323, 24242, + 17323, 24244, + 17323, 24246, + 17323, 24248, + 17323, 24250, + 17323, 24252, + 17323, 24254, + 17323, 24256, + 17323, 24258, + 17323, 24260, + 17323, 24262, + 17323, 24264, + 17323, 24266, + 17323, 24268, + 17323, 24270, + 17323, 24272, + 17323, 24274, + 17323, 24276, + 17323, 24278, + 17323, 24280, + 17323, 24282, + 17323, 24284, + 17323, 24286, + 17323, 24288, + 17323, 24290, + 17323, 24292, + 17323, 24294, + 17323, 24296, + 17323, 24298, + 17323, 24300, + 17323, 24302, + 17323, 24304, + 17323, 24306, + 17323, 24308, + 17323, 24310, + 17323, 24312, + 17323, 24314, + 17323, 24316, + 17323, 24318, + 17323, 24320, + 17323, 24322, + 17323, 24324, + 17323, 24326, + 17323, 24328, + 17323, 24330, + 17323, 24332, + 17323, 24334, + 17323, 24336, + 17323, 24338, + 17323, 24340, + 17323, 24342, + 17323, 24344, + 17323, 24346, + 17323, 24348, + 17323, 24350, + 17323, 24352, + 17323, 24354, + 17323, 24356, + 17323, 24358, + 17323, 24360, + 17323, 24362, + 17323, 24364, + 17323, 24366, + 17323, 24368, + 17323, 24370, + 17323, 24372, + 17323, 24374, + 17323, 24376, + 17323, 24378, + 17323, 24380, + 17323, 24382, + 17323, 24384, + 17323, 24386, + 17323, 24388, + 17323, 24390, + 17323, 24392, + 17323, 24394, + 17323, 24396, + 17323, 24398, + 17323, 24400, + 17323, 24402, + 17323, 24404, + 17323, 24406, + 17323, 24408, + 17323, 24410, + 17323, 24412, + 17323, 24414, + 17323, 24416, + 17323, 24418, + 17323, 24420, + 17323, 24422, + 17323, 24424, + 17323, 24426, + 17323, 24428, + 17323, 24430, + 17323, 24432, + 17323, 24434, + 17323, 24436, + 17323, 24438, + 17323, 24440, + 17323, 24442, + 17323, 24444, + 17323, 24446, + 17323, 24448, + 17323, 24450, + 17323, 24452, + 17323, 24454, + 17323, 24456, + 17323, 24458, + 17323, 24460, + 17323, 24462, + 17323, 24464, + 17323, 24466, + 17323, 24468, + 17323, 24470, + 17323, 24472, + 17323, 24474, + 17323, 24476, + 17323, 24478, + 17323, 24480, + 17323, 24482, + 17323, 24484, + 17323, 24486, + 17323, 24488, + 17323, 24490, + 17323, 24492, + 17323, 24494, + 17323, 24496, + 17323, 24498, + 17323, 24500, + 17323, 24502, + 17323, 24504, + 17323, 24506, + 17323, 24508, + 17323, 24510, + 17323, 24512, + 17323, 24514, + 17323, 24516, + 17323, 24518, + 17323, 24520, + 17323, 24522, + 17323, 24524, + 17323, 24526, + 17323, 24528, + 17323, 24530, + 17323, 24532, + 17323, 24534, + 17323, 24536, + 17323, 24538, + 17323, 24540, + 17323, 24542, + 17323, 24544, + 17323, 24546, + 17323, 24548, + 17323, 24550, + 17323, 24552, + 17323, 24554, + 17323, 24556, + 17323, 24558, + 17323, 24560, + 17323, 24562, + 17323, 24564, + 17323, 24566, + 17323, 24568, + 17323, 24570, + 17323, 24572, + 17323, 24574, + 17323, 24576, + 17323, 24578, + 17323, 24580, + 17323, 24582, + 17323, 24584, + 17323, 24586, + 17323, 24588, + 17323, 24590, + 17323, 24592, + 17323, 24594, + 17323, 24596, + 17323, 24598, + 17323, 24600, + 17323, 24602, + 17323, 24604, + 17323, 24606, + 17323, 24608, + 17323, 24610, + 17323, 24612, + 17323, 24614, + 17323, 24616, + 17323, 24618, + 17323, 24620, + 17323, 24622, + 17323, 24624, + 17323, 24626, + 17323, 24628, + 17323, 24630, + 17323, 24632, + 17323, 24634, + 17323, 24636, + 17323, 24638, + 17323, 24640, + 17323, 24642, + 17323, 24644, + 17323, 24646, + 17323, 24648, + 17323, 24650, + 17323, 24652, + 17323, 24654, + 17323, 24656, + 17323, 24658, + 17323, 24660, + 17323, 24662, + 17323, 24664, + 17323, 24666, + 17323, 24668, + 17323, 24670, + 17323, 24672, + 17323, 24674, + 17323, 24676, + 17323, 24678, + 17323, 24680, + 17323, 24682, + 17323, 24684, + 17323, 24686, + 17323, 24688, + 17323, 24690, + 17323, 24692, + 17323, 24694, + 17323, 24696, + 17323, 24698, + 17323, 24700, + 17323, 24702, + 17323, 24704, + 17323, 24706, + 17323, 24708, + 17323, 24710, + 17323, 24712, + 17323, 24714, + 17323, 24716, + 17323, 24718, + 17323, 24720, + 17323, 24722, + 17323, 24724, + 17323, 24726, + 17323, 24728, + 17323, 24730, + 17323, 24732, + 17323, 24734, + 17323, 24736, + 17323, 24738, + 17323, 24740, + 17323, 24742, + 17323, 24744, + 17323, 24746, + 17323, 24748, + 17323, 24750, + 17323, 24752, + 17323, 24754, + 17323, 24756, + 17323, 24758, + 17323, 24760, + 17323, 24762, + 17323, 24764, + 17323, 24766, + 17323, 24768, + 17323, 24770, + 17323, 24772, + 17323, 24774, + 17323, 24776, + 17323, 24778, + 17323, 24780, + 17323, 24782, + 17323, 24784, + 17323, 24786, + 17323, 24788, + 17323, 24790, + 17323, 24792, + 17323, 24794, + 17323, 24796, + 17323, 24798, + 17323, 24800, + 17323, 24802, + 17323, 24804, + 17323, 24806, + 17323, 24808, + 17323, 24810, + 17323, 24812, + 17323, 24814, + 17323, 24816, + 17323, 24818, + 17323, 24820, + 17323, 24822, + 17323, 24824, + 17323, 24826, + 17323, 24828, + 17323, 24830, + 17323, 24832, + 17323, 24834, + 17323, 24836, + 17323, 24838, + 17323, 24840, + 17323, 24842, + 17323, 24844, + 17323, 24846, + 17323, 24848, + 17323, 24850, + 17323, 24852, + 17323, 24854, + 17323, 24856, + 17323, 24858, + 17323, 24860, + 17323, 24862, + 17323, 24864, + 17323, 24866, + 17323, 24868, + 17323, 24870, + 17323, 24872, + 17323, 24874, + 17323, 24876, + 17323, 24878, + 17323, 24880, + 17323, 24882, + 17323, 24884, + 17323, 24886, + 17323, 24888, + 17323, 24890, + 17323, 24892, + 17323, 24894, + 17323, 24896, + 17323, 24898, + 17323, 24900, + 17323, 24902, + 17323, 24904, + 17323, 24906, + 17323, 24908, + 17323, 24910, + 17323, 24912, + 17323, 24914, + 17323, 24916, + 17323, 24918, + 17323, 24920, + 17323, 24922, + 17323, 24924, + 17323, 24926, + 17323, 24928, + 17323, 24930, + 17323, 24932, + 17323, 24934, + 17323, 24936, + 17323, 24938, + 17323, 24940, + 17323, 24942, + 17323, 24944, + 17323, 24946, + 17323, 24948, + 17323, 24950, + 17323, 24952, + 17323, 24954, + 17323, 24956, + 17323, 24958, + 17323, 24960, + 17323, 24962, + 17323, 24964, + 17323, 24966, + 17323, 24968, + 17323, 24970, + 17323, 24972, + 17323, 24974, + 17323, 24976, + 17323, 24978, + 17323, 24980, + 17323, 24982, + 17323, 24984, + 17323, 24986, + 17323, 24988, + 17323, 24990, + 17323, 24992, + 17323, 24994, + 17323, 24996, + 17323, 24998, + 17323, 25000, + 17323, 25002, + 17323, 25004, + 17323, 25006, + 17323, 25008, + 17323, 25010, + 17323, 25012, + 17323, 25014, + 17323, 25016, + 17323, 25018, + 17323, 25020, + 17323, 25022, + 17323, 25024, + 17323, 25026, + 17323, 25028, + 17323, 25030, + 17323, 25032, + 17323, 25034, + 17323, 25036, + 17323, 25038, + 17323, 25040, + 17323, 25042, + 17323, 25044, + 17323, 25046, + 17323, 25048, + 17323, 25050, + 17323, 25052, + 17323, 25054, + 17323, 25056, + 17323, 25058, + 17323, 25060, + 17323, 25062, + 17323, 25064, + 17323, 25066, + 17323, 25068, + 17323, 25070, + 17323, 25072, + 17323, 25074, + 17323, 25076, + 17323, 25078, + 17323, 25080, + 17323, 25082, + 17323, 25084, + 17323, 25086, + 17323, 25088, + 17323, 25090, + 17323, 25092, + 17323, 25094, + 17323, 25096, + 17323, 25098, + 17323, 25100, + 17323, 25102, + 17323, 25104, + 17323, 25106, + 17323, 25108, + 17323, 25110, + 17323, 25112, + 17323, 25114, + 17323, 25116, + 17323, 25118, + 17323, 25120, + 17323, 25122, + 17323, 25124, + 17323, 25126, + 17323, 25128, + 17323, 25130, + 17323, 25132, + 17323, 25134, + 17323, 25136, + 17323, 25138, + 17323, 25140, + 17323, 25142, + 17323, 25144, + 17323, 25146, + 17323, 25148, + 17323, 25150, + 17323, 25152, + 17323, 25154, + 17323, 25156, + 17323, 25158, + 17323, 25160, + 17323, 25162, + 17323, 25164, + 17323, 25166, + 17323, 25168, + 17323, 25170, + 17323, 25172, + 17323, 25174, + 17323, 25176, + 17323, 25178, + 17323, 25180, + 17323, 25182, + 17323, 25184, + 17323, 25186, + 17323, 25188, + 17323, 25190, + 17323, 25192, + 17323, 25194, + 17323, 25196, + 17323, 25198, + 17323, 25200, + 17323, 25202, + 17323, 25204, + 17323, 25206, + 17323, 25208, + 17323, 25210, + 17323, 25212, + 17323, 25214, + 17323, 25216, + 17323, 25218, + 17323, 25220, + 17323, 25222, + 17323, 25224, + 17323, 25226, + 17323, 25228, + 17323, 25230, + 17323, 25232, + 17323, 25234, + 17323, 25236, + 17323, 25238, + 17323, 25240, + 17323, 25242, + 17323, 25244, + 17323, 25246, + 17323, 25248, + 17323, 25250, + 17323, 25252, + 17323, 25254, + 17323, 25256, + 17323, 25258, + 17323, 25260, + 17323, 25262, + 17323, 25264, + 17323, 25266, + 17323, 25268, + 17323, 25270, + 17323, 25272, + 17323, 25274, + 17323, 25276, + 17323, 25278, + 17323, 25280, + 17323, 25282, + 17323, 25284, + 17323, 25286, + 17323, 25288, + 17323, 25290, + 17323, 25292, + 17323, 25294, + 17323, 25296, + 17323, 25298, + 17323, 25300, + 17323, 25302, + 17323, 25304, + 17323, 25306, + 17323, 25308, + 17323, 25310, + 17323, 25312, + 17323, 25314, + 17323, 25316, + 17323, 25318, + 17323, 25320, + 17323, 25322, + 17323, 25324, + 17323, 25326, + 17323, 25328, + 17323, 25330, + 17323, 25332, + 17323, 25334, + 17323, 25336, + 17323, 25338, + 17323, 25340, + 17323, 25342, + 17323, 25344, + 17323, 25346, + 17323, 25348, + 17323, 25350, + 17323, 25352, + 17323, 25354, + 17323, 25356, + 17323, 25358, + 17323, 25360, + 17323, 25362, + 17323, 25364, + 17323, 25366, + 17323, 25368, + 17323, 25370, + 17323, 25372, + 17323, 25374, + 17323, 25376, + 17323, 25378, + 17323, 25380, + 17323, 25382, + 17323, 25384, + 17323, 25386, + 17323, 25388, + 17323, 25390, + 17323, 25392, + 17323, 25394, + 17323, 25396, + 17323, 25398, + 17323, 25400, + 17323, 25402, + 17323, 25404, + 17323, 25406, + 17323, 25408, + 17323, 25410, + 17323, 25412, + 17323, 25414, + 17323, 25416, + 17323, 25418, + 17323, 25420, + 17323, 25422, + 17323, 25424, + 17323, 25426, + 17323, 25428, + 17323, 25430, + 17323, 25432, + 17323, 25434, + 17323, 25436, + 17323, 25438, + 17323, 25440, + 17323, 25442, + 17323, 25444, + 17323, 25446, + 17323, 25448, + 17323, 25450, + 17323, 25452, + 17323, 25454, + 17323, 25456, + 17323, 25458, + 17323, 25460, + 17323, 25462, + 17323, 25464, + 17323, 25466, + 17323, 25468, + 17323, 25470, + 17323, 25472, + 17323, 25474, + 17323, 25476, + 17323, 25478, + 17323, 25480, + 17323, 25482, + 17323, 25484, + 17323, 25486, + 17323, 25488, + 17323, 25490, + 17323, 25492, + 17323, 25494, + 17323, 25496, + 17323, 25498, + 17323, 25500, + 17323, 25502, + 17323, 25504, + 17323, 25506, + 17323, 25508, + 17323, 25510, + 17323, 25512, + 17323, 25514, + 17323, 25516, + 17323, 25518, + 17323, 25520, + 17323, 25522, + 17323, 25524, + 17323, 25526, + 17323, 25528, + 17323, 25530, + 17323, 25532, + 17323, 25534, + 17323, 25536, + 17323, 25538, + 17323, 25540, + 17323, 25542, + 17323, 25544, + 17323, 25546, + 17323, 25548, + 17323, 25550, + 17323, 25552, + 17323, 25554, + 17323, 25556, + 17323, 25558, + 17323, 25560, + 17323, 25562, + 17323, 25564, + 17323, 25566, + 17323, 25568, + 17323, 25570, + 17323, 25572, + 17323, 25574, + 17323, 25576, + 17323, 25578, + 17323, 25580, + 17323, 25582, + 17323, 25584, + 17323, 25586, + 17323, 25588, + 17323, 25590, + 17323, 25592, + 17323, 25594, + 17323, 25596, + 17323, 25598, + 17323, 25600, + 17323, 25602, + 17323, 25604, + 17323, 25606, + 17323, 25608, + 17323, 25610, + 17323, 25612, + 17323, 25614, + 17323, 25616, + 17323, 25618, + 17323, 25620, + 17323, 25622, + 17323, 25624, + 17323, 25626, + 17323, 25628, + 17323, 25630, + 17323, 25632, + 17323, 25634, + 17323, 25636, + 17323, 25638, + 17323, 25640, + 17323, 25642, + 17323, 25644, + 17323, 25646, + 17323, 25648, + 17323, 25650, + 17323, 25652, + 17323, 25654, + 17323, 25656, + 17323, 25658, + 17323, 25660, + 17323, 25662, + 17323, 25664, + 17323, 25666, + 17323, 25668, + 17323, 25670, + 17323, 25672, + 17323, 25674, + 17323, 25676, + 17323, 25678, + 17323, 25680, + 17323, 25682, + 17323, 25684, + 17323, 25686, + 17323, 25688, + 17323, 25690, + 17323, 25692, + 17323, 25694, + 17323, 25696, + 17323, 25698, + 17323, 25700, + 17323, 25702, + 17323, 25704, + 17323, 25706, + 17323, 25708, + 17323, 25710, + 17323, 25712, + 17323, 25714, + 17323, 25716, + 17323, 25718, + 17323, 25720, + 17323, 25722, + 17323, 25724, + 17323, 25726, + 17323, 25728, + 17323, 25730, + 17323, 25732, + 17323, 25734, + 17323, 25736, + 17323, 25738, + 17323, 25740, + 17323, 25742, + 17323, 25744, + 17323, 25746, + 17332, + 17335, 19443, 16310, + 17336, + 17347, 73, 16525, 8808, + 17347, 10575, 14334, + 17347, 10575, 15256, + 17347, 10575, 17534, + 17347, 10575, 19100, + 17347, 10575, 19408, + 17347, 10575, 19540, + 17347, 10575, 19586, + 17347, 10575, 21127, 19541, 12318, + 17347, 10575, 21127, 23071, 12318, + 17347, 10575, 23070, + 17347, 13069, 2760, + 17347, 13069, 3240, + 17347, 13069, 3536, + 17347, 13069, 7036, + 17347, 13069, 7058, + 17347, 13069, 9358, + 17347, 13069, 11824, + 17347, 13069, 13150, + 17347, 13069, 14778, + 17347, 13069, 15116, + 17347, 15407, 10575, 8, + 17347, 15407, 10575, 16, + 17347, 15407, 10575, 28, + 17347, 15407, 10575, 40, + 17347, 15407, 10575, 58, + 17347, 15407, 10575, 72, + 17347, 15407, 10575, 96, + 17347, 15407, 10575, 186, + 17347, 15407, 10575, 314, + 17347, 15407, 10575, 522, + 17347, 15407, 10575, 706, + 17347, 15407, 10575, 19415, 22, + 17347, 15407, 10575, 19415, 34, + 17347, 15407, 10575, 19415, 406, + 17347, 15407, 10575, 19415, 608, + 17347, 16525, 8808, + 17347, 16531, 0, + 17347, 16531, 8, + 17347, 16531, 16, + 17347, 16531, 28, + 17347, 16531, 40, + 17347, 16531, 58, + 17347, 16531, 72, + 17347, 16531, 96, + 17347, 16531, 108, + 17347, 16531, 126, + 17347, 16531, 150, + 17347, 16531, 186, + 17347, 16531, 248, + 17347, 16531, 272, + 17347, 16531, 314, + 17347, 16531, 344, + 17347, 16531, 358, + 17347, 16531, 394, + 17347, 16531, 426, + 17347, 16531, 466, + 17347, 16531, 522, + 17347, 16531, 548, + 17347, 16531, 598, + 17347, 16531, 614, + 17347, 16531, 648, + 17347, 16531, 706, + 17347, 16531, 714, + 17347, 16531, 778, + 17347, 16531, 1000, + 17347, 16531, 1116, + 17347, 16531, 1214, + 17347, 16531, 1236, + 17347, 16531, 1330, + 17347, 16531, 1588, + 17347, 16531, 1918, + 17347, 16531, 2036, + 17347, 16531, 2278, + 17347, 16531, 2574, + 17347, 16531, 2624, + 17347, 16531, 2698, + 17347, 16531, 2830, + 17347, 16531, 3118, + 17347, 16531, 3212, + 17347, 16531, 3286, + 17347, 16531, 3422, + 17347, 16531, 3488, + 17347, 16531, 3502, + 17347, 16531, 6572, + 17347, 16531, 8342, + 17347, 16531, 10206, + 17347, 16531, 11082, + 17347, 16531, 18661, 14560, + 17347, 16531, 19415, 22, + 17347, 16531, 19415, 34, + 17347, 16531, 19415, 406, + 17347, 16531, 19415, 608, + 17347, 20055, 13069, 2761, 1493, 2739, 16965, 507, 7058, + 17347, 20055, 13069, 2761, 1493, 6881, 16965, 507, 7058, + 17347, 20055, 13069, 3537, 1493, 2739, 16965, 507, 7058, + 17347, 20055, 13069, 3537, 1493, 6881, 16965, 507, 7058, + 17347, 20055, 13069, 11825, 1493, 2739, 16965, 507, 7058, + 17347, 20055, 13069, 15117, 1493, 2739, 16965, 507, 7058, + 17347, 20055, 13069, 15117, 1493, 6881, 16965, 507, 7058, + 17353, 18959, 897, 5978, + 17363, 15000, + 17363, 16531, 660, + 17363, 16531, 804, + 17363, 16531, 950, + 17363, 16531, 1678, + 17363, 16531, 2512, + 17363, 16531, 3028, + 17363, 16531, 3870, + 17363, 16531, 4016, + 17363, 16531, 5472, + 17363, 16531, 7482, + 17363, 16531, 8048, + 17363, 16531, 10922, + 17363, 16531, 11076, + 17363, 16531, 12362, + 17363, 16531, 13232, + 17363, 16531, 13320, + 17363, 16531, 13644, + 17363, 16531, 13754, + 17363, 16531, 13948, + 17363, 16531, 14252, + 17363, 16531, 14582, + 17363, 16531, 14766, + 17363, 16531, 15374, + 17363, 16531, 15424, + 17363, 16531, 16002, + 17363, 16531, 16038, + 17363, 16531, 16252, + 17363, 16531, 17052, + 17363, 16531, 17128, + 17363, 16531, 17360, + 17363, 16531, 19768, + 17363, 16531, 20176, + 17363, 16531, 20466, + 17363, 16531, 20808, + 17363, 16531, 20974, + 17363, 16531, 21102, + 17363, 16531, 21434, + 17363, 16531, 21560, + 17363, 16531, 21870, + 17363, 17634, + 17363, 18092, + 17363, 18286, + 17363, 18742, + 17363, 19366, + 17363, 20980, + 17363, 21356, + 17363, 21388, + 17363, 21650, + 17363, 21698, + 17379, 699, 10574, + 17379, 6701, 10574, + 17382, + 17393, 16531, 0, + 17393, 16531, 8, + 17393, 16531, 16, + 17393, 16531, 28, + 17393, 16531, 40, + 17393, 16531, 48, + 17393, 16531, 92, + 17393, 16531, 108, + 17393, 16531, 126, + 17393, 16531, 150, + 17393, 16531, 194, + 17393, 16531, 228, + 17393, 16531, 248, + 17393, 16531, 272, + 17393, 16531, 344, + 17393, 16531, 354, + 17393, 16531, 358, + 17393, 16531, 394, + 17393, 16531, 426, + 17393, 16531, 466, + 17393, 16531, 522, + 17393, 16531, 548, + 17393, 16531, 582, + 17393, 16531, 598, + 17393, 16531, 614, + 17393, 16531, 648, + 17393, 16531, 714, + 17393, 16531, 762, + 17393, 16531, 796, + 17393, 16531, 1116, + 17393, 16531, 1236, + 17393, 16531, 1588, + 17393, 16531, 1616, + 17393, 16531, 1742, + 17393, 16531, 2036, + 17393, 16531, 2278, + 17393, 16531, 2392, + 17393, 16531, 2548, + 17393, 16531, 2574, + 17393, 16531, 2696, + 17393, 16531, 2880, + 17393, 16531, 3118, + 17393, 16531, 3212, + 17393, 16531, 3300, + 17393, 16531, 3422, + 17393, 16531, 3820, + 17393, 16531, 4042, + 17393, 16531, 9300, + 17393, 16531, 9366, + 17393, 16531, 9544, + 17393, 16531, 10512, + 17393, 16531, 10594, + 17394, + 17398, + 17430, + 17435, 9904, + 17435, 12917, 20406, + 17435, 14570, + 17435, 15140, + 17435, 16006, + 17435, 16717, 21558, + 17435, 16717, 23852, + 17435, 19141, 15815, 20566, + 17435, 20156, + 17435, 20933, 965, 11513, 22495, 17264, + 17435, 20933, 965, 14659, 22078, + 17435, 20933, 965, 15815, 20566, + 17435, 20933, 965, 21178, + 17435, 22495, 965, 11513, 16095, 20933, 17264, + 17435, 22495, 965, 11513, 17435, 20933, 17264, + 17442, + 17457, 10574, + 17460, + 17465, 515, 7433, 10574, + 17465, 2643, 10574, + 17465, 12378, + 17465, 12525, 14831, 14532, + 17465, 12525, 20472, + 17465, 12922, + 17465, 13069, 3536, + 17465, 13069, 15116, + 17465, 13421, 14911, 16531, 7818, + 17465, 14255, 6833, 20501, 8276, + 17465, 14255, 11489, 20501, 8276, + 17465, 14911, 10, + 17465, 14931, 6833, 20501, 8276, + 17465, 14931, 11489, 20501, 8276, + 17465, 15453, 14831, 14532, + 17465, 16006, + 17465, 17835, 10, + 17465, 21006, + 17465, 21844, + 17465, 22841, 17835, 12, + 17465, 22841, 17835, 22, + 17465, 22841, 17835, 48, + 17466, + 17473, 18889, 12525, 10690, + 17477, 6544, + 17503, 17298, + 17508, + 17523, 529, 12935, 18932, + 17532, + 17541, 13421, 12934, + 17543, 20156, + 17547, 20055, 2761, 7428, + 17547, 20055, 2761, 13252, + 17547, 20055, 2761, 14170, + 17547, 20055, 2761, 14874, + 17547, 20055, 2761, 15082, + 17547, 20055, 2761, 15108, + 17547, 20055, 2761, 16106, + 17547, 20055, 2761, 18950, + 17547, 20055, 2761, 19068, + 17547, 20055, 3537, 16166, + 17547, 20055, 3537, 17370, + 17547, 20055, 7037, 17174, + 17547, 20055, 7037, 18098, + 17547, 20055, 7059, 16166, + 17547, 20055, 11825, 17370, + 17547, 20055, 14779, 18098, + 17547, 20055, 15117, 16166, + 17547, 20055, 15117, 18098, + 17547, 20055, 15117, 20546, + 17552, + 17557, 9323, 10574, + 17557, 11033, 2094, + 17557, 11033, 3522, + 17557, 11033, 13722, + 17557, 11033, 15250, + 17557, 13069, 2760, + 17557, 13069, 3240, + 17557, 13069, 3536, + 17557, 13069, 7036, + 17557, 13069, 7058, + 17557, 13069, 9358, + 17557, 13069, 11824, + 17557, 13069, 13150, + 17557, 13069, 14778, + 17557, 13069, 15116, + 17557, 16531, 0, + 17557, 16531, 8, + 17557, 16531, 16, + 17557, 16531, 28, + 17557, 16531, 40, + 17557, 16531, 58, + 17557, 16531, 96, + 17557, 16531, 108, + 17557, 16531, 126, + 17557, 16531, 150, + 17557, 16531, 204, + 17557, 16531, 228, + 17557, 16531, 248, + 17557, 16531, 272, + 17557, 16531, 344, + 17557, 16531, 358, + 17557, 16531, 394, + 17557, 16531, 426, + 17557, 16531, 466, + 17557, 16531, 520, + 17557, 16531, 548, + 17557, 16531, 598, + 17557, 16531, 614, + 17557, 16531, 648, + 17557, 16531, 714, + 17557, 16531, 738, + 17557, 16531, 778, + 17557, 16531, 796, + 17557, 16531, 832, + 17557, 16531, 898, + 17557, 16531, 1876, + 17557, 16531, 2036, + 17557, 16531, 2574, + 17557, 16531, 2698, + 17557, 16531, 2762, + 17557, 16531, 2830, + 17557, 16531, 3212, + 17557, 16531, 3422, + 17557, 16531, 3484, + 17557, 16531, 3488, + 17557, 16531, 3586, + 17557, 16531, 3938, + 17557, 16531, 5450, + 17557, 16531, 8340, + 17559, 18203, 8981, 17298, + 17559, 19739, 8981, 17298, + 17561, 6335, 518, + 17561, 6335, 13069, 2760, + 17561, 6335, 13069, 3240, + 17561, 6335, 13069, 3536, + 17561, 6335, 13069, 7036, + 17561, 6335, 13069, 7058, + 17561, 6335, 13069, 9358, + 17561, 6335, 13069, 11824, + 17561, 6335, 13069, 13150, + 17561, 6335, 13069, 14778, + 17561, 6335, 13069, 15116, + 17561, 6335, 14911, 16531, 0, + 17561, 6335, 14911, 16531, 8, + 17561, 6335, 14911, 16531, 28, + 17561, 6335, 14911, 16531, 80, + 17561, 6335, 14911, 16531, 94, + 17561, 6335, 14911, 16531, 122, + 17561, 6335, 14911, 16531, 150, + 17561, 6335, 14911, 16531, 248, + 17561, 6335, 14911, 16531, 314, + 17561, 6335, 14911, 16531, 374, + 17561, 6335, 14911, 16531, 572, + 17561, 6335, 14911, 16531, 678, + 17561, 6335, 14911, 16531, 706, + 17561, 6335, 14911, 16531, 750, + 17561, 6335, 14911, 16531, 778, + 17561, 6335, 14911, 16531, 786, + 17561, 6335, 14911, 16531, 790, + 17561, 6335, 14911, 16531, 898, + 17561, 6335, 14911, 16531, 1396, + 17561, 6335, 14911, 16531, 1400, + 17561, 6335, 14911, 16531, 1696, + 17561, 6335, 14911, 16531, 2738, + 17561, 6335, 14911, 16531, 3232, + 17561, 6335, 14911, 16531, 3504, + 17561, 6335, 14911, 16531, 3974, + 17561, 6335, 14911, 16531, 7522, + 17561, 6335, 14911, 16531, 7656, + 17561, 6335, 14911, 16531, 7672, + 17561, 6335, 14911, 16531, 9258, + 17561, 6335, 14911, 16531, 9528, + 17561, 6335, 14911, 16531, 10676, + 17561, 6335, 14911, 16531, 11392, + 17561, 6335, 16787, 3412, + 17561, 6335, 16787, 13254, + 17561, 6335, 16787, 13284, + 17561, 6335, 16787, 14876, + 17561, 6335, 16787, 16108, + 17561, 6335, 16787, 16744, + 17561, 6335, 16787, 17372, + 17561, 6335, 16787, 17474, + 17561, 6335, 16787, 19070, + 17561, 6335, 17835, 16531, 0, + 17561, 6335, 17835, 16531, 8, + 17561, 6335, 17835, 16531, 28, + 17561, 6335, 17835, 16531, 80, + 17561, 6335, 17835, 16531, 94, + 17561, 6335, 17835, 16531, 122, + 17561, 6335, 17835, 16531, 150, + 17561, 6335, 17835, 16531, 248, + 17561, 6335, 17835, 16531, 314, + 17561, 6335, 17835, 16531, 374, + 17561, 6335, 17835, 16531, 572, + 17561, 6335, 17835, 16531, 678, + 17561, 6335, 17835, 16531, 706, + 17561, 6335, 17835, 16531, 750, + 17561, 6335, 17835, 16531, 778, + 17561, 6335, 17835, 16531, 786, + 17561, 6335, 17835, 16531, 790, + 17561, 6335, 17835, 16531, 898, + 17561, 6335, 17835, 16531, 1396, + 17561, 6335, 17835, 16531, 1400, + 17561, 6335, 17835, 16531, 1696, + 17561, 6335, 17835, 16531, 2738, + 17561, 6335, 17835, 16531, 3232, + 17561, 6335, 17835, 16531, 3504, + 17561, 6335, 17835, 16531, 3974, + 17561, 6335, 17835, 16531, 7522, + 17561, 6335, 17835, 16531, 7656, + 17561, 6335, 17835, 16531, 7672, + 17561, 6335, 17835, 16531, 9258, + 17561, 6335, 17835, 16531, 9528, + 17561, 6335, 17835, 16531, 10676, + 17561, 6335, 17835, 16531, 11392, + 17563, 7433, 10574, + 17563, 12525, 7038, + 17563, 15453, 7038, + 17565, 18203, 8981, 17298, + 17565, 19739, 8981, 17298, + 17569, 16536, + 17571, 20933, 8320, + 17573, 16200, + 17574, + 17583, 1698, + 17583, 12542, + 17583, 17066, + 17583, 17892, + 17585, 17298, + 17589, 18932, + 17590, + 17599, 13470, + 17607, 16531, 112, + 17607, 16531, 216, + 17607, 16531, 222, + 17607, 16531, 228, + 17607, 16531, 344, + 17607, 16531, 538, + 17607, 16531, 554, + 17607, 16531, 598, + 17607, 16531, 618, + 17607, 16531, 648, + 17607, 16531, 692, + 17607, 16531, 714, + 17607, 16531, 715, 21003, 7056, + 17607, 16531, 762, + 17607, 16531, 796, + 17607, 16531, 798, + 17607, 16531, 1134, + 17607, 16531, 1192, + 17607, 16531, 1200, + 17607, 16531, 1434, + 17607, 16531, 1530, + 17607, 16531, 1704, + 17607, 16531, 1722, + 17607, 16531, 1988, + 17607, 16531, 2202, + 17607, 16531, 2203, 11513, 1291, 12318, + 17607, 16531, 2438, + 17607, 16531, 2676, + 17607, 16531, 2832, + 17607, 16531, 2926, + 17607, 16531, 3074, + 17607, 16531, 3174, + 17607, 16531, 3234, + 17607, 16531, 3424, + 17607, 16531, 3750, + 17607, 16531, 3960, + 17607, 16531, 3961, 11513, 22223, 12318, + 17607, 16531, 4024, + 17607, 16531, 6292, + 17607, 16531, 6848, + 17607, 16531, 8052, + 17607, 16531, 10478, + 17607, 16531, 12670, + 17607, 16531, 15494, + 17607, 21127, 13457, 8808, + 17607, 21127, 13897, 8808, + 17607, 23257, 8808, + 17626, + 17630, + 17641, 506, + 17644, + 17651, 10574, + 17668, + 17678, + 17690, + 17691, 11513, 5990, + 17692, + 17716, + 17719, 10574, + 17725, 16531, 0, + 17725, 16531, 8, + 17725, 16531, 16, + 17725, 16531, 28, + 17725, 16531, 40, + 17725, 16531, 58, + 17725, 16531, 66, + 17725, 16531, 82, + 17725, 16531, 84, + 17725, 16531, 112, + 17725, 16531, 132, + 17725, 16531, 156, + 17725, 16531, 186, + 17725, 16531, 230, + 17725, 16531, 252, + 17725, 16531, 276, + 17725, 16531, 314, + 17725, 16531, 346, + 17725, 16531, 362, + 17725, 16531, 398, + 17725, 16531, 434, + 17725, 16531, 470, + 17725, 16531, 522, + 17725, 16531, 554, + 17725, 16531, 600, + 17725, 16531, 618, + 17725, 16531, 652, + 17725, 16531, 706, + 17725, 16531, 718, + 17725, 16531, 764, + 17725, 16531, 780, + 17725, 16531, 798, + 17725, 16531, 832, + 17725, 16531, 834, + 17725, 16531, 856, + 17725, 16531, 1002, + 17725, 16531, 1238, + 17725, 16531, 1580, + 17725, 16531, 1590, + 17725, 16531, 1758, + 17725, 16531, 2576, + 17725, 16531, 2626, + 17725, 16531, 2702, + 17725, 16531, 3214, + 17725, 16531, 3424, + 17725, 16531, 3504, + 17725, 16531, 3844, + 17725, 16531, 3854, + 17725, 16531, 4004, + 17725, 16531, 4044, + 17725, 16531, 9326, + 17725, 16531, 9328, + 17725, 16531, 10540, + 17725, 16531, 10656, + 17725, 23737, 8808, + 17726, + 17731, 12700, + 17734, + 17748, + 17750, + 17755, 16890, + 17757, 13470, + 17758, + 17763, 6056, + 17765, 97, 16525, 8808, + 17765, 5508, + 17765, 10575, 14334, + 17765, 10575, 17534, + 17765, 10575, 19408, + 17765, 10575, 19540, + 17765, 10575, 19586, + 17765, 10575, 23070, + 17765, 13069, 2760, + 17765, 13069, 3240, + 17765, 13069, 3536, + 17765, 13069, 7036, + 17765, 13069, 7058, + 17765, 13069, 9358, + 17765, 13069, 11824, + 17765, 13069, 13150, + 17765, 13069, 14778, + 17765, 13069, 15116, + 17765, 13335, 8808, + 17765, 14699, 8808, + 17765, 14699, 10574, + 17765, 15407, 10575, 8, + 17765, 15407, 10575, 16, + 17765, 15407, 10575, 28, + 17765, 15407, 10575, 40, + 17765, 15407, 10575, 58, + 17765, 15407, 10575, 72, + 17765, 15407, 10575, 96, + 17765, 15407, 10575, 314, + 17765, 15407, 10575, 706, + 17765, 15407, 10575, 19415, 22, + 17765, 15407, 10575, 19415, 34, + 17765, 15407, 10575, 19415, 406, + 17765, 15407, 10575, 19415, 608, + 17765, 16390, + 17765, 16531, 0, + 17765, 16531, 8, + 17765, 16531, 16, + 17765, 16531, 28, + 17765, 16531, 40, + 17765, 16531, 58, + 17765, 16531, 72, + 17765, 16531, 96, + 17765, 16531, 108, + 17765, 16531, 126, + 17765, 16531, 150, + 17765, 16531, 248, + 17765, 16531, 272, + 17765, 16531, 314, + 17765, 16531, 344, + 17765, 16531, 358, + 17765, 16531, 394, + 17765, 16531, 426, + 17765, 16531, 466, + 17765, 16531, 548, + 17765, 16531, 598, + 17765, 16531, 599, 11513, 13839, 19790, + 17765, 16531, 599, 11513, 16661, 19790, + 17765, 16531, 614, + 17765, 16531, 648, + 17765, 16531, 706, + 17765, 16531, 778, + 17765, 16531, 1000, + 17765, 16531, 1116, + 17765, 16531, 1214, + 17765, 16531, 1236, + 17765, 16531, 1588, + 17765, 16531, 1918, + 17765, 16531, 2036, + 17765, 16531, 2574, + 17765, 16531, 2624, + 17765, 16531, 2698, + 17765, 16531, 2830, + 17765, 16531, 3074, + 17765, 16531, 3118, + 17765, 16531, 3212, + 17765, 16531, 3286, + 17765, 16531, 3422, + 17765, 16531, 3502, + 17765, 16531, 4002, + 17765, 16531, 6572, + 17765, 16531, 11082, + 17765, 16531, 15387, 19540, + 17765, 16531, 16443, 648, + 17765, 16531, 19415, 22, + 17765, 16531, 19415, 34, + 17765, 16531, 19415, 406, + 17765, 16531, 19415, 608, + 17765, 17069, 8808, + 17765, 19753, 21649, 2760, + 17765, 19753, 21649, 2761, 8287, 10933, 3425, 23118, + 17765, 19753, 21649, 3536, + 17765, 19753, 21649, 7058, + 17765, 19753, 21649, 15116, + 17765, 19753, 23119, 19116, + 17765, 23737, 10574, + 17767, 10150, + 17767, 10151, 11513, 15938, + 17768, + 17770, + 17777, 10574, + 17794, + 17806, + 17807, 507, 18158, + 17808, + 17813, 18821, 12528, + 17813, 18821, 16076, + 17813, 18821, 16078, + 17813, 18821, 16080, + 17813, 18821, 16082, + 17813, 18821, 16084, + 17813, 18821, 16086, + 17813, 18821, 16088, + 17813, 18821, 16090, + 17813, 18821, 18020, + 17813, 18821, 18022, + 17813, 18821, 18024, + 17813, 18821, 18026, + 17813, 18821, 18028, + 17813, 18821, 18030, + 17813, 18821, 18032, + 17813, 18821, 18034, + 17813, 18821, 18036, + 17813, 18821, 18038, + 17813, 18821, 18040, + 17813, 18821, 18042, + 17813, 18821, 18044, + 17813, 18821, 18046, + 17813, 18821, 18048, + 17813, 18821, 18050, + 17813, 18821, 18052, + 17813, 18821, 18054, + 17813, 18821, 18056, + 17813, 18821, 18058, + 17813, 18821, 18060, + 17813, 18821, 18062, + 17813, 18821, 18064, + 17813, 18821, 18066, + 17813, 18821, 18068, + 17813, 18821, 18070, + 17813, 18821, 18072, + 17813, 18821, 18074, + 17813, 18821, 19822, + 17813, 18821, 19824, + 17813, 18821, 19826, + 17813, 18821, 19828, + 17813, 18821, 19830, + 17813, 18821, 19832, + 17813, 18821, 19834, + 17813, 18821, 19836, + 17813, 18821, 19838, + 17813, 18821, 19840, + 17813, 18821, 19842, + 17813, 18821, 19844, + 17813, 18821, 19846, + 17813, 18821, 19848, + 17813, 18821, 19850, + 17813, 18821, 19852, + 17813, 18821, 19854, + 17813, 18821, 19856, + 17813, 18821, 19858, + 17813, 18821, 19860, + 17813, 18821, 19862, + 17813, 18821, 19864, + 17813, 18821, 19866, + 17813, 18821, 19868, + 17813, 18821, 19870, + 17813, 18821, 19872, + 17813, 18821, 19874, + 17813, 18821, 19876, + 17813, 18821, 19878, + 17813, 18821, 19880, + 17813, 18821, 19882, + 17813, 18821, 19884, + 17813, 18821, 19886, + 17813, 18821, 19888, + 17813, 18821, 19890, + 17813, 18821, 19892, + 17813, 18821, 19894, + 17813, 18821, 19896, + 17813, 18821, 19898, + 17813, 18821, 19900, + 17813, 18821, 19902, + 17813, 18821, 19904, + 17813, 18821, 19906, + 17813, 18821, 19908, + 17813, 18821, 19910, + 17813, 18821, 19912, + 17813, 18821, 19914, + 17813, 18821, 19916, + 17813, 18821, 19918, + 17813, 18821, 19920, + 17813, 18821, 19922, + 17813, 18821, 19924, + 17813, 18821, 19926, + 17813, 18821, 19928, + 17813, 18821, 19930, + 17813, 18821, 19932, + 17813, 18821, 21208, + 17813, 18821, 21210, + 17813, 18821, 21212, + 17813, 18821, 21214, + 17813, 18821, 21216, + 17813, 18821, 21218, + 17813, 18821, 21220, + 17813, 18821, 21222, + 17813, 18821, 21224, + 17813, 18821, 21226, + 17813, 18821, 21228, + 17813, 18821, 21230, + 17813, 18821, 21232, + 17813, 18821, 21234, + 17813, 18821, 21236, + 17813, 18821, 21238, + 17813, 18821, 21240, + 17813, 18821, 21242, + 17813, 18821, 21244, + 17813, 18821, 21246, + 17813, 18821, 21248, + 17813, 18821, 21250, + 17813, 18821, 21252, + 17813, 18821, 21254, + 17813, 18821, 21256, + 17813, 18821, 21258, + 17813, 18821, 21260, + 17813, 18821, 21262, + 17813, 18821, 21264, + 17813, 18821, 21266, + 17813, 18821, 21268, + 17813, 18821, 21270, + 17813, 18821, 21272, + 17813, 18821, 21274, + 17813, 18821, 21276, + 17813, 18821, 21278, + 17813, 18821, 21280, + 17813, 18821, 21282, + 17813, 18821, 21284, + 17813, 18821, 21286, + 17813, 18821, 21288, + 17813, 18821, 21290, + 17813, 18821, 21292, + 17813, 18821, 21294, + 17813, 18821, 21296, + 17813, 18821, 21298, + 17813, 18821, 21300, + 17813, 18821, 21302, + 17813, 18821, 21304, + 17813, 18821, 21306, + 17813, 18821, 21308, + 17813, 18821, 21310, + 17813, 18821, 21312, + 17813, 18821, 21314, + 17813, 18821, 21316, + 17813, 18821, 21318, + 17813, 18821, 21320, + 17813, 18821, 21322, + 17813, 18821, 21324, + 17813, 18821, 21326, + 17813, 18821, 21328, + 17813, 18821, 21330, + 17813, 18821, 21332, + 17813, 18821, 21334, + 17813, 18821, 21336, + 17813, 18821, 21338, + 17813, 18821, 21340, + 17813, 18821, 21342, + 17813, 18821, 21344, + 17813, 18821, 21346, + 17813, 18821, 22290, + 17813, 18821, 22292, + 17813, 18821, 22294, + 17813, 18821, 22296, + 17813, 18821, 22298, + 17813, 18821, 22300, + 17813, 18821, 22302, + 17813, 18821, 22304, + 17813, 18821, 22306, + 17813, 18821, 22308, + 17813, 18821, 22310, + 17813, 18821, 22312, + 17813, 18821, 22314, + 17813, 18821, 22316, + 17813, 18821, 22318, + 17813, 18821, 22320, + 17813, 18821, 22322, + 17813, 18821, 22324, + 17813, 18821, 22326, + 17813, 18821, 22328, + 17813, 18821, 22330, + 17813, 18821, 22332, + 17813, 18821, 22334, + 17813, 18821, 22336, + 17813, 18821, 22338, + 17813, 18821, 22340, + 17813, 18821, 22342, + 17813, 18821, 22344, + 17813, 18821, 22346, + 17813, 18821, 22348, + 17813, 18821, 22350, + 17813, 18821, 22352, + 17813, 18821, 22354, + 17813, 18821, 22356, + 17813, 18821, 22358, + 17813, 18821, 22360, + 17813, 18821, 22362, + 17813, 18821, 22364, + 17813, 18821, 22366, + 17813, 18821, 22368, + 17813, 18821, 22370, + 17813, 18821, 22372, + 17813, 18821, 22374, + 17813, 18821, 22376, + 17813, 18821, 22378, + 17813, 18821, 22380, + 17813, 18821, 22382, + 17813, 18821, 22384, + 17813, 18821, 22386, + 17813, 18821, 22388, + 17813, 18821, 22390, + 17813, 18821, 22392, + 17813, 18821, 22394, + 17813, 18821, 22396, + 17813, 18821, 22398, + 17813, 18821, 22400, + 17813, 18821, 23136, + 17813, 18821, 23138, + 17813, 18821, 23140, + 17813, 18821, 23142, + 17813, 18821, 23144, + 17813, 18821, 23146, + 17813, 18821, 23148, + 17813, 18821, 23150, + 17813, 18821, 23152, + 17813, 18821, 23154, + 17813, 18821, 23156, + 17813, 18821, 23158, + 17813, 18821, 23160, + 17813, 18821, 23162, + 17813, 18821, 23164, + 17813, 18821, 23166, + 17813, 18821, 23168, + 17813, 18821, 23170, + 17813, 18821, 23172, + 17813, 18821, 23174, + 17813, 18821, 23176, + 17813, 18821, 23178, + 17813, 18821, 23180, + 17813, 18821, 23182, + 17813, 18821, 23184, + 17813, 18821, 23186, + 17813, 18821, 23188, + 17813, 18821, 23190, + 17813, 18821, 23812, + 17813, 18821, 23814, + 17813, 18821, 23816, + 17813, 18821, 23818, + 17813, 18821, 23820, + 17813, 18821, 23822, + 17813, 18821, 23824, + 17813, 18821, 23826, + 17813, 18821, 25758, + 17820, + 17824, + 17832, + 17843, 10574, + 17846, + 17863, 12538, + 17863, 12539, 7022, + 17868, + 17881, 5, 11513, 20421, 21042, + 17881, 46, + 17881, 128, + 17881, 130, + 17881, 760, + 17881, 1291, 20406, + 17881, 6101, 46, + 17881, 6544, + 17881, 9783, 15901, 13151, 18889, 10690, + 17881, 9904, + 17881, 10151, 20406, + 17881, 11825, 11513, 14890, + 17881, 12935, 16216, + 17881, 12935, 16217, 11513, 3537, 6696, + 17881, 12935, 16217, 11513, 7059, 6696, + 17881, 12935, 16950, + 17881, 13069, 2760, + 17881, 13069, 3240, + 17881, 13069, 3536, + 17881, 13069, 7036, + 17881, 13069, 7058, + 17881, 13069, 9358, + 17881, 13069, 11824, + 17881, 13069, 13150, + 17881, 13069, 14778, + 17881, 13069, 15116, + 17881, 13473, 15453, 22837, 12414, + 17881, 13543, 16168, + 17881, 13783, 14911, 16531, 0, + 17881, 13783, 14911, 16531, 2, + 17881, 13783, 14911, 16531, 4, + 17881, 13783, 14911, 16531, 6, + 17881, 13783, 14911, 16531, 8, + 17881, 13783, 14911, 16531, 10, + 17881, 13783, 14911, 16531, 12, + 17881, 13783, 14911, 16531, 14, + 17881, 13783, 14911, 16531, 16, + 17881, 13783, 14911, 16531, 18, + 17881, 13783, 14911, 16531, 20, + 17881, 13783, 14911, 16531, 22, + 17881, 13783, 14911, 16531, 24, + 17881, 13783, 14911, 16531, 26, + 17881, 13783, 14911, 16531, 28, + 17881, 13783, 14911, 16531, 30, + 17881, 13783, 14911, 16531, 32, + 17881, 13783, 14911, 16531, 34, + 17881, 13783, 14911, 16531, 36, + 17881, 13783, 14911, 16531, 38, + 17881, 13783, 14911, 16531, 40, + 17881, 13783, 14911, 16531, 42, + 17881, 13783, 14911, 16531, 44, + 17881, 13783, 14911, 16531, 46, + 17881, 13783, 14911, 16531, 48, + 17881, 13783, 14911, 16531, 50, + 17881, 13783, 17835, 16531, 0, + 17881, 13783, 17835, 16531, 2, + 17881, 13783, 17835, 16531, 4, + 17881, 13783, 17835, 16531, 6, + 17881, 13783, 17835, 16531, 8, + 17881, 13783, 17835, 16531, 10, + 17881, 13783, 17835, 16531, 12, + 17881, 13783, 17835, 16531, 14, + 17881, 13783, 17835, 16531, 16, + 17881, 13783, 17835, 16531, 18, + 17881, 13783, 17835, 16531, 20, + 17881, 13783, 17835, 16531, 22, + 17881, 13783, 17835, 16531, 24, + 17881, 13783, 17835, 16531, 26, + 17881, 13783, 17835, 16531, 28, + 17881, 13783, 17835, 16531, 30, + 17881, 13783, 17835, 16531, 32, + 17881, 13783, 17835, 16531, 34, + 17881, 13783, 17835, 16531, 36, + 17881, 13783, 17835, 16531, 38, + 17881, 13783, 17835, 16531, 40, + 17881, 13783, 17835, 16531, 42, + 17881, 13783, 17835, 16531, 44, + 17881, 13783, 17835, 16531, 46, + 17881, 13783, 17835, 16531, 48, + 17881, 13783, 17835, 16531, 50, + 17881, 14004, + 17881, 15146, + 17881, 15453, 10690, + 17881, 15453, 15858, + 17881, 15858, + 17881, 16067, 10575, 11513, 20421, 21042, + 17881, 16120, + 17881, 16313, 10586, + 17881, 16313, 10587, 0, + 17881, 16313, 12698, + 17881, 16313, 12699, 0, + 17881, 16313, 13484, + 17881, 16313, 13485, 0, + 17881, 16313, 13582, + 17881, 16313, 13583, 0, + 17881, 16313, 13583, 40, + 17881, 16313, 13994, + 17881, 16313, 13995, 0, + 17881, 16313, 14164, + 17881, 16313, 14165, 0, + 17881, 16313, 14538, + 17881, 16313, 14539, 0, + 17881, 16313, 14654, + 17881, 16313, 14655, 0, + 17881, 16313, 16462, + 17881, 16313, 16463, 0, + 17881, 16313, 17384, + 17881, 16313, 17385, 0, + 17881, 16313, 17870, + 17881, 16313, 17871, 0, + 17881, 16313, 18362, + 17881, 16313, 18363, 0, + 17881, 16313, 18860, + 17881, 16313, 18861, 0, + 17881, 16313, 19274, + 17881, 16313, 19275, 0, + 17881, 16393, 13783, 17835, 16531, 4, + 17881, 16393, 13783, 17835, 16531, 34, + 17881, 16477, 21101, 13632, + 17881, 16477, 21101, 15910, + 17881, 16787, 3412, + 17881, 16787, 3413, 521, 12525, 17224, + 17881, 16787, 13254, + 17881, 16787, 13255, 521, 12525, 17224, + 17881, 16787, 13284, + 17881, 16787, 13285, 521, 12525, 17224, + 17881, 16787, 13285, 2760, + 17881, 16787, 13285, 3240, + 17881, 16787, 13285, 3536, + 17881, 16787, 13285, 7036, + 17881, 16787, 13285, 7058, + 17881, 16787, 13285, 9358, + 17881, 16787, 13285, 13150, + 17881, 16787, 13285, 14778, + 17881, 16787, 13285, 15116, + 17881, 16787, 14877, 521, 12525, 17224, + 17881, 16787, 16109, 521, 12525, 17224, + 17881, 16787, 16110, + 17881, 16787, 17372, + 17881, 16787, 17373, 521, 12525, 17224, + 17881, 16787, 17373, 2760, + 17881, 16787, 17373, 3240, + 17881, 16787, 17373, 3536, + 17881, 16787, 17373, 7036, + 17881, 16787, 17373, 7058, + 17881, 16787, 17373, 9358, + 17881, 16787, 17373, 13150, + 17881, 16787, 17373, 14778, + 17881, 16787, 17373, 15116, + 17881, 16787, 17472, + 17881, 16787, 17474, + 17881, 16787, 17475, 521, 12525, 17224, + 17881, 16787, 17475, 2760, + 17881, 16787, 17475, 3240, + 17881, 16787, 17475, 3536, + 17881, 16787, 17475, 7036, + 17881, 16787, 17475, 7058, + 17881, 16787, 17475, 9358, + 17881, 16787, 17475, 13150, + 17881, 16787, 17475, 14778, + 17881, 16787, 17475, 15116, + 17881, 16787, 18148, + 17881, 16787, 19071, 521, 12525, 17224, + 17881, 16787, 19116, + 17881, 16787, 19966, + 17881, 16787, 20052, + 17881, 16787, 20368, + 17881, 16787, 20824, + 17881, 16787, 21854, + 17881, 16957, 8808, + 17881, 17224, + 17881, 18999, 19140, + 17881, 19575, 20406, + 17881, 19743, 13774, + 17881, 19817, 10574, + 17881, 19817, 14890, + 17881, 20193, 0, + 17881, 20193, 8, + 17881, 20193, 16, + 17881, 20193, 28, + 17881, 20193, 40, + 17881, 20193, 272, + 17881, 20193, 276, + 17881, 20193, 280, + 17881, 20193, 288, + 17881, 20193, 292, + 17881, 20193, 358, + 17881, 20193, 362, + 17881, 20193, 366, + 17881, 20193, 374, + 17881, 20193, 380, + 17881, 20193, 426, + 17881, 20193, 434, + 17881, 20193, 440, + 17881, 20193, 446, + 17881, 20193, 454, + 17881, 20193, 466, + 17881, 20193, 470, + 17881, 20193, 478, + 17881, 20193, 486, + 17881, 20193, 490, + 17881, 20193, 598, + 17881, 20193, 600, + 17881, 20193, 604, + 17881, 20193, 606, + 17881, 20193, 610, + 17881, 20193, 614, + 17881, 20193, 618, + 17881, 20193, 624, + 17881, 20193, 628, + 17881, 20193, 638, + 17881, 20193, 648, + 17881, 20193, 652, + 17881, 20193, 656, + 17881, 20193, 660, + 17881, 20193, 668, + 17881, 20193, 738, + 17881, 20193, 744, + 17881, 20193, 750, + 17881, 20193, 754, + 17881, 20193, 778, + 17881, 20193, 786, + 17881, 20193, 790, + 17881, 20454, + 17881, 20858, + 17881, 20859, 6700, + 17881, 20933, 964, + 17881, 21487, 2300, + 17881, 21487, 2760, + 17881, 21487, 3240, + 17881, 21487, 3310, + 17881, 21487, 3412, + 17881, 21487, 3536, + 17881, 21487, 6360, + 17881, 21487, 7026, + 17881, 21487, 7036, + 17881, 21487, 7058, + 17881, 21487, 7442, + 17881, 21487, 7520, + 17881, 21487, 7826, + 17881, 21487, 8140, + 17881, 21487, 8280, + 17881, 21487, 8800, + 17881, 21487, 8980, + 17881, 21487, 9140, + 17881, 21487, 9358, + 17881, 21487, 10122, + 17881, 21487, 11530, + 17881, 21487, 13140, + 17881, 21487, 13150, + 17881, 21487, 13760, + 17881, 21487, 13962, + 17881, 21487, 14166, + 17881, 21487, 14572, + 17881, 21487, 14658, + 17881, 21487, 14778, + 17881, 21487, 14980, + 17881, 21487, 14990, + 17881, 21487, 15116, + 17881, 21487, 15436, + 17881, 21487, 15680, + 17881, 21487, 15900, + 17881, 21487, 16158, + 17881, 21487, 17084, + 17881, 21487, 17096, + 17881, 21487, 17922, + 17881, 21487, 19134, + 17881, 21487, 19152, + 17881, 21487, 19526, + 17881, 21487, 20296, + 17881, 21487, 20548, + 17881, 21487, 20570, + 17881, 21487, 20580, + 17881, 21487, 20762, + 17881, 21487, 20994, + 17881, 21487, 21036, + 17881, 21487, 21376, + 17881, 21487, 21398, + 17881, 21487, 21936, + 17881, 21487, 22422, + 17881, 21487, 23888, + 17881, 21487, 25994, + 17881, 21558, + 17881, 22495, 965, 11513, 14256, + 17881, 23275, 17192, + 17881, 23852, + 17881, 24193, 12414, + 17881, 25886, + 17881, 26135, 10575, 11513, 22223, 15678, + 17881, 36345, 19817, 10574, + 17885, 12538, + 17898, + 17902, + 17905, 15054, + 17911, 20156, + 17913, 13716, + 17914, + 17919, 15391, 18010, + 17928, + 17929, 967, 897, 5978, + 17931, 13262, + 17931, 17294, + 17931, 20355, 19165, 13783, 17835, 16531, 30, + 17933, 5978, + 17934, + 17937, 14982, + 17944, + 17946, + 17950, + 17955, 20777, 0, + 17955, 20777, 8, + 17955, 20777, 16, + 17955, 20777, 28, + 17955, 20777, 40, + 17955, 20777, 344, + 17955, 20777, 350, + 17955, 20777, 358, + 17955, 20777, 362, + 17955, 20777, 366, + 17955, 20777, 374, + 17955, 20777, 380, + 17955, 20777, 394, + 17955, 20777, 398, + 17955, 20777, 402, + 17955, 20777, 412, + 17955, 20777, 416, + 17955, 20777, 426, + 17955, 20777, 434, + 17955, 20777, 440, + 17955, 20777, 446, + 17955, 20777, 454, + 17955, 20777, 466, + 17955, 20777, 470, + 17955, 20777, 478, + 17955, 20777, 486, + 17955, 20777, 490, + 17955, 20777, 548, + 17955, 20777, 554, + 17955, 20777, 562, + 17955, 20777, 566, + 17955, 20777, 572, + 17955, 20777, 598, + 17955, 20777, 600, + 17955, 20777, 604, + 17955, 20777, 606, + 17955, 20777, 610, + 17955, 20777, 614, + 17955, 20777, 618, + 17955, 20777, 624, + 17955, 20777, 628, + 17955, 20777, 638, + 17955, 20777, 648, + 17955, 20777, 652, + 17955, 20777, 656, + 17955, 20777, 660, + 17955, 20777, 668, + 17955, 20777, 738, + 17955, 20777, 744, + 17955, 20777, 750, + 17955, 20777, 754, + 17955, 20777, 762, + 17955, 20777, 764, + 17955, 20777, 796, + 17955, 20777, 804, + 17973, 20001, 17298, + 17973, 21851, 2035, 17298, + 17979, 14911, 16531, 14, + 17979, 14911, 16531, 104, + 17979, 14911, 16531, 188, + 17979, 14911, 16531, 200, + 17979, 14911, 16531, 202, + 17979, 14911, 16531, 204, + 17979, 14911, 16531, 212, + 17979, 14911, 16531, 214, + 17979, 14911, 16531, 222, + 17979, 14911, 16531, 512, + 17979, 14911, 16531, 538, + 17979, 14911, 16531, 756, + 17979, 14911, 16531, 986, + 17979, 14911, 16531, 1224, + 17979, 14911, 16531, 1394, + 17979, 14911, 16531, 1412, + 17979, 14911, 16531, 1422, + 17979, 14911, 16531, 1552, + 17979, 14911, 16531, 1910, + 17979, 14911, 16531, 2014, + 17979, 14911, 16531, 2818, + 17979, 14911, 16531, 3406, + 17979, 14911, 16531, 3672, + 17979, 14911, 16531, 3916, + 17979, 14911, 16531, 4034, + 17979, 14911, 16531, 6276, + 17979, 14911, 16531, 8351, 0, + 17979, 14911, 16531, 8351, 8, + 17979, 14911, 16531, 8351, 16, + 17979, 14911, 16531, 8351, 28, + 17979, 14911, 16531, 8351, 70, + 17979, 14911, 16531, 8351, 522, + 17979, 14911, 16531, 10938, + 17979, 14911, 16531, 11840, + 17979, 14911, 16531, 14837, 0, + 17979, 14911, 16531, 14837, 8, + 17979, 14911, 16531, 14837, 16, + 17979, 14911, 16531, 14837, 28, + 17979, 14911, 16531, 14837, 70, + 17979, 14911, 16531, 14837, 522, + 17979, 17835, 16531, 14, + 17979, 17835, 16531, 104, + 17979, 17835, 16531, 188, + 17979, 17835, 16531, 200, + 17979, 17835, 16531, 202, + 17979, 17835, 16531, 204, + 17979, 17835, 16531, 212, + 17979, 17835, 16531, 214, + 17979, 17835, 16531, 222, + 17979, 17835, 16531, 512, + 17979, 17835, 16531, 538, + 17979, 17835, 16531, 756, + 17979, 17835, 16531, 986, + 17979, 17835, 16531, 1224, + 17979, 17835, 16531, 1394, + 17979, 17835, 16531, 1412, + 17979, 17835, 16531, 1422, + 17979, 17835, 16531, 1552, + 17979, 17835, 16531, 1910, + 17979, 17835, 16531, 2014, + 17979, 17835, 16531, 2818, + 17979, 17835, 16531, 3406, + 17979, 17835, 16531, 3672, + 17979, 17835, 16531, 3916, + 17979, 17835, 16531, 4034, + 17979, 17835, 16531, 6276, + 17979, 17835, 16531, 8351, 0, + 17979, 17835, 16531, 8351, 8, + 17979, 17835, 16531, 8351, 16, + 17979, 17835, 16531, 8351, 28, + 17979, 17835, 16531, 8351, 70, + 17979, 17835, 16531, 8351, 522, + 17979, 17835, 16531, 10938, + 17979, 17835, 16531, 11840, + 17979, 17835, 16531, 14837, 0, + 17979, 17835, 16531, 14837, 8, + 17979, 17835, 16531, 14837, 16, + 17979, 17835, 16531, 14837, 28, + 17979, 17835, 16531, 14837, 70, + 17979, 17835, 16531, 14837, 522, + 17981, 17574, + 17981, 19716, + 17989, 11513, 3473, 7429, 12524, + 17989, 11513, 8281, 7429, 12524, + 17989, 11513, 14659, 7429, 12524, + 17989, 11513, 15827, 7429, 12524, + 17989, 14789, 11513, 1, 1291, 16382, + 17989, 17326, + 17989, 20406, + 18001, 17881, 22841, 13069, 2760, + 18001, 17881, 22841, 13069, 3240, + 18001, 17881, 22841, 13069, 3536, + 18001, 17881, 22841, 13069, 7036, + 18001, 17881, 22841, 13069, 7058, + 18001, 17881, 22841, 13069, 9358, + 18001, 17881, 22841, 13069, 11824, + 18001, 17881, 22841, 13069, 13150, + 18001, 17881, 22841, 13069, 14778, + 18001, 17881, 22841, 13069, 15116, + 18001, 17881, 22841, 16787, 3412, + 18001, 20355, 17881, 13069, 2760, + 18001, 20355, 17881, 13069, 3240, + 18001, 20355, 17881, 13069, 3536, + 18001, 20355, 17881, 13069, 7036, + 18001, 20355, 17881, 13069, 7058, + 18001, 20355, 17881, 13069, 9358, + 18001, 20355, 17881, 13069, 13150, + 18001, 20355, 17881, 13069, 14778, + 18001, 20355, 17881, 13069, 15116, + 18001, 20355, 17881, 16787, 3412, + 18001, 20355, 17881, 22841, 13069, 2760, + 18001, 20355, 17881, 22841, 13069, 3240, + 18001, 20355, 17881, 22841, 13069, 3536, + 18001, 20355, 17881, 22841, 13069, 7036, + 18001, 20355, 17881, 22841, 13069, 7058, + 18001, 20355, 17881, 22841, 13069, 9358, + 18001, 20355, 17881, 22841, 13069, 11824, + 18001, 20355, 17881, 22841, 13069, 13150, + 18001, 20355, 17881, 22841, 13069, 14778, + 18001, 20355, 17881, 22841, 13069, 15116, + 18001, 20355, 17881, 22841, 16787, 3412, + 18012, + 18015, 17298, + 18016, + 18077, 8801, 10574, + 18077, 16159, 10574, + 18077, 17298, + 18079, 10574, + 18080, + 18105, 16531, 0, + 18105, 16531, 8, + 18105, 16531, 16, + 18105, 16531, 28, + 18105, 16531, 40, + 18105, 16531, 48, + 18105, 16531, 112, + 18105, 16531, 132, + 18105, 16531, 156, + 18105, 16531, 194, + 18105, 16531, 230, + 18105, 16531, 252, + 18105, 16531, 276, + 18105, 16531, 346, + 18105, 16531, 362, + 18105, 16531, 398, + 18105, 16531, 434, + 18105, 16531, 466, + 18105, 16531, 470, + 18105, 16531, 554, + 18105, 16531, 584, + 18105, 16531, 600, + 18105, 16531, 618, + 18105, 16531, 652, + 18105, 16531, 718, + 18105, 16531, 764, + 18105, 16531, 798, + 18105, 16531, 1118, + 18105, 16531, 1238, + 18105, 16531, 1590, + 18105, 16531, 1618, + 18105, 16531, 2038, + 18105, 16531, 2280, + 18105, 16531, 2550, + 18105, 16531, 2610, + 18105, 16531, 3120, + 18105, 16531, 3214, + 18105, 16531, 3424, + 18105, 16531, 4044, + 18105, 16531, 16256, + 18107, 506, + 18107, 507, 11513, 1291, 12318, + 18107, 507, 11513, 3537, 22495, 19206, + 18107, 507, 11513, 8351, 22495, 17264, + 18107, 507, 11513, 18778, + 18107, 507, 11513, 20920, + 18107, 507, 11513, 20933, 965, 95, 1393, 507, 22495, 17264, + 18107, 507, 18763, 19380, + 18107, 507, 18763, 21348, + 18111, 16531, 276, + 18111, 16531, 554, + 18111, 16531, 2406, + 18111, 16531, 2676, + 18111, 16531, 3398, + 18111, 16531, 3750, + 18111, 16531, 5556, + 18111, 16531, 6066, + 18111, 16531, 7478, + 18111, 16531, 8002, + 18111, 16531, 9992, + 18111, 16531, 10120, + 18111, 16531, 10478, + 18111, 16531, 10914, + 18111, 16531, 11722, + 18111, 16531, 12354, + 18111, 16531, 13384, + 18111, 16531, 14720, + 18111, 16531, 15606, + 18111, 16531, 16010, + 18111, 16531, 16508, + 18111, 16531, 17060, + 18111, 20241, 23030, + 18130, + 18134, + 18137, 19791, 323, 15453, 15939, 323, 12525, 17224, + 18137, 19791, 19743, 14255, 6833, 12414, + 18137, 19791, 19743, 17037, 19790, + 18143, 6996, + 18144, + 18152, + 18155, 9907, 897, 7030, + 18163, 6996, + 18165, 7433, 1446, + 18168, + 18171, 15968, + 18185, 3636, + 18205, 6996, + 18215, 10690, + 18218, + 18222, + 18227, 97, 16525, 8808, + 18227, 518, + 18227, 10575, 14334, + 18227, 10575, 14554, + 18227, 10575, 17534, + 18227, 10575, 19408, + 18227, 10575, 19540, + 18227, 10575, 19586, + 18227, 10575, 21127, 19541, 12318, + 18227, 10575, 23070, + 18227, 15407, 10575, 16, + 18227, 15407, 10575, 40, + 18227, 15407, 10575, 58, + 18227, 15407, 10575, 72, + 18227, 15407, 10575, 96, + 18227, 15407, 10575, 186, + 18227, 15407, 10575, 314, + 18227, 15407, 10575, 522, + 18227, 15407, 10575, 706, + 18227, 15407, 10575, 19415, 22, + 18227, 15407, 10575, 19415, 34, + 18227, 15407, 10575, 19415, 406, + 18227, 15407, 10575, 19415, 608, + 18227, 16531, 0, + 18227, 16531, 16, + 18227, 16531, 40, + 18227, 16531, 58, + 18227, 16531, 72, + 18227, 16531, 96, + 18227, 16531, 108, + 18227, 16531, 126, + 18227, 16531, 150, + 18227, 16531, 186, + 18227, 16531, 248, + 18227, 16531, 272, + 18227, 16531, 314, + 18227, 16531, 344, + 18227, 16531, 358, + 18227, 16531, 394, + 18227, 16531, 426, + 18227, 16531, 466, + 18227, 16531, 522, + 18227, 16531, 548, + 18227, 16531, 598, + 18227, 16531, 614, + 18227, 16531, 648, + 18227, 16531, 706, + 18227, 16531, 714, + 18227, 16531, 778, + 18227, 16531, 1000, + 18227, 16531, 1116, + 18227, 16531, 1214, + 18227, 16531, 1236, + 18227, 16531, 1588, + 18227, 16531, 1918, + 18227, 16531, 2036, + 18227, 16531, 2278, + 18227, 16531, 2574, + 18227, 16531, 2624, + 18227, 16531, 2698, + 18227, 16531, 2830, + 18227, 16531, 3212, + 18227, 16531, 3286, + 18227, 16531, 3422, + 18227, 16531, 3502, + 18227, 16531, 6572, + 18227, 16531, 11082, + 18227, 16531, 15387, 16095, 19540, + 18227, 16531, 15387, 19540, + 18227, 16531, 19415, 22, + 18227, 16531, 19415, 34, + 18227, 16531, 19415, 406, + 18227, 16531, 19415, 608, + 18231, 13470, + 18233, 10574, + 18235, 13403, 518, + 18235, 13403, 10575, 19408, + 18235, 13403, 10575, 19540, + 18235, 13403, 13069, 2760, + 18235, 13403, 13069, 3240, + 18235, 13403, 13069, 3536, + 18235, 13403, 13069, 7036, + 18235, 13403, 13069, 7058, + 18235, 13403, 13069, 9358, + 18235, 13403, 13069, 11824, + 18235, 13403, 13069, 13150, + 18235, 13403, 13069, 14778, + 18235, 13403, 13069, 15116, + 18235, 13403, 15407, 10575, 16, + 18235, 13403, 15407, 10575, 40, + 18235, 13403, 15407, 10575, 58, + 18235, 13403, 15407, 10575, 72, + 18235, 13403, 15407, 10575, 96, + 18235, 13403, 15407, 10575, 186, + 18235, 13403, 15407, 10575, 314, + 18235, 13403, 15407, 10575, 522, + 18235, 13403, 15407, 10575, 706, + 18235, 13403, 16531, 0, + 18235, 13403, 16531, 16, + 18235, 13403, 16531, 40, + 18235, 13403, 16531, 58, + 18235, 13403, 16531, 72, + 18235, 13403, 16531, 96, + 18235, 13403, 16531, 108, + 18235, 13403, 16531, 126, + 18235, 13403, 16531, 150, + 18235, 13403, 16531, 186, + 18235, 13403, 16531, 248, + 18235, 13403, 16531, 272, + 18235, 13403, 16531, 314, + 18235, 13403, 16531, 344, + 18235, 13403, 16531, 358, + 18235, 13403, 16531, 394, + 18235, 13403, 16531, 426, + 18235, 13403, 16531, 466, + 18235, 13403, 16531, 522, + 18235, 13403, 16531, 548, + 18235, 13403, 16531, 598, + 18235, 13403, 16531, 614, + 18235, 13403, 16531, 648, + 18235, 13403, 16531, 706, + 18235, 13403, 16531, 714, + 18235, 13403, 16531, 778, + 18235, 13403, 16531, 1000, + 18235, 13403, 16531, 1116, + 18235, 13403, 16531, 1214, + 18235, 13403, 16531, 1236, + 18235, 13403, 16531, 1588, + 18235, 13403, 16531, 1918, + 18235, 13403, 16531, 2036, + 18235, 13403, 16531, 2278, + 18235, 13403, 16531, 2574, + 18235, 13403, 16531, 2830, + 18235, 13403, 16531, 3422, + 18235, 13403, 16531, 3502, + 18235, 13403, 16531, 6572, + 18235, 13403, 16531, 11082, + 18235, 13403, 17534, + 18238, + 18245, 6996, + 18246, + 18251, 10575, 20436, + 18251, 15407, 10575, 16, + 18251, 15407, 10575, 40, + 18251, 16531, 0, + 18251, 16531, 16, + 18251, 16531, 40, + 18251, 16531, 108, + 18251, 16531, 150, + 18251, 16531, 248, + 18251, 16531, 272, + 18251, 16531, 358, + 18251, 16531, 394, + 18251, 16531, 426, + 18251, 16531, 466, + 18251, 16531, 548, + 18251, 16531, 598, + 18251, 16531, 614, + 18251, 16531, 648, + 18251, 16531, 738, + 18251, 16531, 778, + 18251, 16531, 2574, + 18277, 10574, + 18279, 6996, + 18281, 16943, 17298, + 18301, 15725, 7057, 19082, + 18301, 22015, 20770, + 18307, 12525, 14911, 17224, + 18307, 12525, 17988, + 18307, 12659, 8808, + 18307, 15453, 15938, + 18307, 15858, + 18307, 16637, 14782, + 18307, 17863, 12539, 7022, + 18307, 21349, 12415, 11513, 3445, 21556, + 18317, 18492, + 18326, + 18333, 73, 16525, 8808, + 18333, 10575, 14334, + 18333, 10575, 17534, + 18333, 10575, 19100, + 18333, 10575, 19147, 23070, + 18333, 10575, 19408, + 18333, 10575, 19540, + 18333, 10575, 19586, + 18333, 10575, 21127, 19541, 12319, 14658, + 18333, 10575, 23070, + 18333, 10575, 23288, + 18333, 10575, 23722, + 18333, 13069, 2760, + 18333, 13069, 3240, + 18333, 13069, 3536, + 18333, 13069, 7036, + 18333, 13069, 7058, + 18333, 13069, 9358, + 18333, 13069, 11824, + 18333, 13069, 13150, + 18333, 13069, 14778, + 18333, 13069, 15116, + 18333, 15407, 10575, 8, + 18333, 15407, 10575, 16, + 18333, 15407, 10575, 28, + 18333, 15407, 10575, 40, + 18333, 15407, 10575, 58, + 18333, 15407, 10575, 72, + 18333, 15407, 10575, 96, + 18333, 15407, 10575, 186, + 18333, 15407, 10575, 314, + 18333, 15407, 10575, 522, + 18333, 15407, 10575, 706, + 18333, 15407, 10575, 19415, 22, + 18333, 15407, 10575, 19415, 34, + 18333, 15407, 10575, 19415, 406, + 18333, 15407, 10575, 19415, 608, + 18333, 16525, 8808, + 18333, 16531, 0, + 18333, 16531, 8, + 18333, 16531, 16, + 18333, 16531, 28, + 18333, 16531, 40, + 18333, 16531, 58, + 18333, 16531, 72, + 18333, 16531, 96, + 18333, 16531, 108, + 18333, 16531, 126, + 18333, 16531, 150, + 18333, 16531, 186, + 18333, 16531, 228, + 18333, 16531, 248, + 18333, 16531, 272, + 18333, 16531, 314, + 18333, 16531, 344, + 18333, 16531, 358, + 18333, 16531, 394, + 18333, 16531, 426, + 18333, 16531, 466, + 18333, 16531, 522, + 18333, 16531, 548, + 18333, 16531, 598, + 18333, 16531, 614, + 18333, 16531, 648, + 18333, 16531, 706, + 18333, 16531, 714, + 18333, 16531, 778, + 18333, 16531, 1000, + 18333, 16531, 1116, + 18333, 16531, 1214, + 18333, 16531, 1236, + 18333, 16531, 1588, + 18333, 16531, 1918, + 18333, 16531, 2036, + 18333, 16531, 2278, + 18333, 16531, 2574, + 18333, 16531, 2624, + 18333, 16531, 2698, + 18333, 16531, 2830, + 18333, 16531, 3118, + 18333, 16531, 3212, + 18333, 16531, 3286, + 18333, 16531, 3422, + 18333, 16531, 3502, + 18333, 16531, 6572, + 18333, 16531, 8342, + 18333, 16531, 11082, + 18333, 16531, 18661, 14560, + 18333, 16531, 19415, 22, + 18333, 16531, 19415, 34, + 18333, 16531, 19415, 406, + 18333, 16531, 19415, 608, + 18358, + 18371, 1091, 6997, 11513, 15949, 6882, + 18371, 6996, + 18371, 6997, 11513, 15949, 6882, + 18371, 6997, 11513, 19129, 6882, + 18508, + 18521, 21563, 10574, + 18526, + 18529, 528, + 18529, 529, 11513, 1291, 12318, + 18529, 529, 11513, 16095, 18778, + 18529, 529, 11513, 16095, 20920, + 18529, 529, 11513, 16661, 10692, + 18529, 529, 11513, 22495, 6544, + 18529, 529, 23507, 18529, 896, + 18529, 896, + 18529, 897, 11513, 1291, 12318, + 18529, 897, 11513, 16095, 18778, + 18529, 897, 11513, 16095, 20920, + 18529, 897, 11513, 16661, 10692, + 18529, 897, 11513, 20920, + 18529, 897, 11513, 22495, 6544, + 18534, + 18535, 18009, 125, 22495, 10240, + 18536, + 18549, 10991, 2761, 507, 17736, + 18549, 10991, 2761, 507, 17882, + 18549, 10991, 2761, 507, 22214, + 18549, 10991, 3059, 16096, + 18549, 10991, 3241, 507, 17736, + 18549, 10991, 3241, 507, 17882, + 18549, 10991, 3241, 507, 22214, + 18549, 10991, 3537, 507, 17736, + 18549, 10991, 3537, 507, 17882, + 18549, 10991, 3537, 507, 22214, + 18549, 10991, 5966, + 18549, 10991, 6833, 11504, + 18549, 10991, 7037, 507, 17736, + 18549, 10991, 7037, 507, 17882, + 18549, 10991, 7037, 507, 22214, + 18549, 10991, 7059, 507, 17736, + 18549, 10991, 7059, 507, 17882, + 18549, 10991, 7059, 507, 22214, + 18549, 10991, 9359, 507, 17736, + 18549, 10991, 9359, 507, 17882, + 18549, 10991, 9359, 507, 22214, + 18549, 10991, 9902, + 18549, 10991, 11489, 11504, + 18549, 10991, 13151, 507, 17736, + 18549, 10991, 13151, 507, 17882, + 18549, 10991, 13151, 507, 22214, + 18549, 10991, 13423, 16096, + 18549, 10991, 13626, + 18549, 10991, 14255, 11504, + 18549, 10991, 14779, 507, 17736, + 18549, 10991, 14779, 507, 17882, + 18549, 10991, 14779, 507, 22214, + 18549, 10991, 14931, 11504, + 18549, 10991, 15117, 507, 17736, + 18549, 10991, 15117, 507, 17882, + 18549, 10991, 15117, 507, 22214, + 18549, 10991, 15453, 16096, + 18549, 10991, 15760, + 18549, 10991, 15776, + 18549, 10991, 16822, + 18549, 10991, 17218, + 18549, 10991, 17280, + 18549, 10991, 17576, + 18549, 10991, 24206, + 18557, 1393, 507, 19056, + 18557, 12376, + 18557, 15407, 10575, 8, + 18557, 15407, 10575, 16, + 18557, 15407, 10575, 28, + 18557, 15407, 10575, 40, + 18557, 16531, 0, + 18557, 16531, 108, + 18557, 16531, 126, + 18557, 16531, 150, + 18557, 16531, 248, + 18557, 16531, 344, + 18557, 16531, 358, + 18557, 16531, 394, + 18557, 16531, 426, + 18557, 16531, 466, + 18557, 16531, 548, + 18557, 16531, 598, + 18557, 16531, 614, + 18557, 16531, 648, + 18557, 16531, 714, + 18557, 16531, 778, + 18557, 16531, 2574, + 18557, 16531, 2698, + 18557, 22750, + 18565, 12934, + 18566, + 18569, 16531, 60, + 18569, 16531, 64, + 18569, 16531, 68, + 18569, 16531, 70, + 18569, 16531, 76, + 18569, 16531, 78, + 18569, 16531, 80, + 18569, 16531, 82, + 18569, 16531, 86, + 18569, 16531, 88, + 18569, 16531, 90, + 18569, 16531, 92, + 18569, 16531, 94, + 18569, 16531, 106, + 18569, 16531, 322, + 18569, 16531, 334, + 18569, 16531, 880, + 18569, 16531, 922, + 18569, 16531, 924, + 18569, 16531, 926, + 18569, 16531, 1986, + 18569, 16531, 5476, + 18569, 16531, 13450, + 18569, 16531, 19382, + 18569, 16531, 19960, + 18569, 22465, 8808, + 18569, 23037, 8808, + 18569, 23554, + 18569, 24181, 8808, + 18574, + 18581, 7461, 8808, + 18581, 8809, 10444, + 18581, 10575, 19540, + 18581, 10575, 23070, + 18581, 15407, 10575, 8, + 18581, 15407, 10575, 16, + 18581, 15407, 10575, 28, + 18581, 15407, 10575, 40, + 18581, 15407, 10575, 58, + 18581, 16531, 0, + 18581, 16531, 52, + 18581, 16531, 108, + 18581, 16531, 126, + 18581, 16531, 150, + 18581, 16531, 248, + 18581, 16531, 272, + 18581, 16531, 344, + 18581, 16531, 358, + 18581, 16531, 394, + 18581, 16531, 426, + 18581, 16531, 466, + 18581, 16531, 548, + 18581, 16531, 598, + 18581, 16531, 614, + 18581, 16531, 648, + 18581, 16531, 738, + 18581, 16531, 778, + 18581, 16531, 796, + 18581, 16531, 1116, + 18581, 16531, 1330, + 18581, 16531, 2036, + 18581, 16531, 2574, + 18581, 16531, 2698, + 18581, 16531, 2830, + 18581, 16531, 3212, + 18581, 16531, 3422, + 18581, 16531, 3488, + 18581, 16531, 4042, + 18581, 16531, 11058, + 18581, 21919, 16531, 0, + 18581, 21919, 16531, 108, + 18581, 21919, 16531, 126, + 18581, 21919, 16531, 150, + 18581, 21919, 16531, 248, + 18581, 21919, 16531, 272, + 18581, 21919, 16531, 344, + 18581, 21919, 16531, 358, + 18581, 21919, 16531, 394, + 18581, 21919, 16531, 426, + 18581, 21919, 16531, 466, + 18581, 21919, 16531, 548, + 18581, 21919, 16531, 598, + 18581, 21919, 16531, 614, + 18581, 21919, 16531, 648, + 18581, 21919, 16531, 738, + 18581, 21919, 16531, 778, + 18581, 21919, 16531, 796, + 18581, 21919, 16531, 1116, + 18581, 21919, 16531, 1330, + 18581, 21919, 16531, 2036, + 18581, 21919, 16531, 2574, + 18581, 21919, 16531, 2698, + 18581, 21919, 16531, 2830, + 18581, 21919, 16531, 3212, + 18581, 21919, 16531, 3422, + 18581, 21919, 16531, 3488, + 18581, 21919, 16531, 4042, + 18581, 21919, 16531, 11058, + 18583, 5533, 19372, + 18587, 13403, 10575, 14334, + 18587, 13403, 10575, 15876, + 18587, 13403, 10575, 18240, + 18587, 13403, 10575, 19408, + 18587, 13403, 10575, 19540, + 18587, 13403, 13069, 2760, + 18587, 13403, 13069, 3240, + 18587, 13403, 13069, 3536, + 18587, 13403, 13069, 7036, + 18587, 13403, 13069, 7058, + 18587, 13403, 13069, 9358, + 18587, 13403, 13069, 11824, + 18587, 13403, 13069, 13150, + 18587, 13403, 13069, 14778, + 18587, 13403, 13069, 15116, + 18587, 13403, 14644, + 18587, 13403, 15407, 10575, 8, + 18587, 13403, 15407, 10575, 16, + 18587, 13403, 15407, 10575, 28, + 18587, 13403, 15407, 10575, 40, + 18587, 13403, 15407, 10575, 58, + 18587, 13403, 15407, 10575, 72, + 18587, 13403, 15407, 10575, 96, + 18587, 13403, 15407, 10575, 314, + 18587, 13403, 15407, 10575, 706, + 18587, 13403, 15407, 10575, 19415, 34, + 18587, 13403, 16531, 0, + 18587, 13403, 16531, 8, + 18587, 13403, 16531, 16, + 18587, 13403, 16531, 28, + 18587, 13403, 16531, 40, + 18587, 13403, 16531, 58, + 18587, 13403, 16531, 72, + 18587, 13403, 16531, 96, + 18587, 13403, 16531, 108, + 18587, 13403, 16531, 126, + 18587, 13403, 16531, 150, + 18587, 13403, 16531, 248, + 18587, 13403, 16531, 272, + 18587, 13403, 16531, 314, + 18587, 13403, 16531, 344, + 18587, 13403, 16531, 358, + 18587, 13403, 16531, 394, + 18587, 13403, 16531, 426, + 18587, 13403, 16531, 466, + 18587, 13403, 16531, 548, + 18587, 13403, 16531, 598, + 18587, 13403, 16531, 614, + 18587, 13403, 16531, 648, + 18587, 13403, 16531, 706, + 18587, 13403, 16531, 714, + 18587, 13403, 16531, 778, + 18587, 13403, 16531, 1000, + 18587, 13403, 16531, 1116, + 18587, 13403, 16531, 1214, + 18587, 13403, 16531, 1236, + 18587, 13403, 16531, 1588, + 18587, 13403, 16531, 1918, + 18587, 13403, 16531, 2036, + 18587, 13403, 16531, 2278, + 18587, 13403, 16531, 2574, + 18587, 13403, 16531, 2624, + 18587, 13403, 16531, 2698, + 18587, 13403, 16531, 2830, + 18587, 13403, 16531, 3212, + 18587, 13403, 16531, 3286, + 18587, 13403, 16531, 3422, + 18587, 13403, 16531, 3484, + 18587, 13403, 16531, 3502, + 18587, 13403, 16531, 6572, + 18587, 13403, 16531, 7902, + 18587, 13403, 16531, 8154, + 18587, 13403, 16531, 11082, + 18587, 13403, 17534, + 18587, 13403, 18954, + 18611, 6996, + 18613, 11513, 9359, 19636, + 18614, + 18620, + 18623, 22495, 19976, + 18626, + 18651, 16531, 0, + 18651, 16531, 8, + 18651, 16531, 16, + 18651, 16531, 40, + 18651, 16531, 108, + 18651, 16531, 126, + 18651, 16531, 150, + 18651, 16531, 248, + 18651, 16531, 272, + 18651, 16531, 344, + 18651, 16531, 358, + 18651, 16531, 394, + 18651, 16531, 426, + 18651, 16531, 466, + 18651, 16531, 548, + 18651, 16531, 598, + 18651, 16531, 614, + 18651, 16531, 648, + 18651, 16531, 714, + 18651, 16531, 778, + 18651, 16531, 1000, + 18651, 16531, 1116, + 18651, 16531, 1214, + 18651, 16531, 1236, + 18651, 16531, 1588, + 18651, 16531, 1934, + 18651, 16531, 2036, + 18651, 16531, 2624, + 18651, 16531, 2698, + 18651, 16531, 2830, + 18651, 16531, 3074, + 18651, 16531, 3118, + 18651, 16531, 3422, + 18651, 16531, 3502, + 18651, 16531, 6564, + 18651, 16531, 6572, + 18651, 16531, 11082, + 18651, 19057, 8808, + 18655, 9442, + 18655, 14758, + 18655, 17299, 5, 6342, + 18655, 17299, 11, 6342, + 18655, 17299, 11, 6343, 16833, 5494, + 18655, 17299, 11, 6343, 16833, 12468, + 18655, 17299, 13, 6342, + 18655, 17299, 13, 6343, 16833, 5494, + 18655, 17299, 13, 6343, 16833, 12468, + 18655, 17299, 47, 20380, + 18655, 17299, 50, + 18655, 17299, 151, 6220, + 18655, 17299, 662, + 18655, 17299, 1169, 10994, + 18655, 17299, 1201, 14768, + 18655, 17299, 1393, 507, 17250, + 18655, 17299, 1393, 3436, + 18655, 17299, 1393, 6044, + 18655, 17299, 1393, 10606, + 18655, 17299, 1393, 16904, + 18655, 17299, 2761, 18281, 25965, 9442, + 18655, 17299, 2761, 18281, 25965, 10122, + 18655, 17299, 2827, 22950, + 18655, 17299, 6348, + 18655, 17299, 6536, + 18655, 17299, 6537, 888, + 18655, 17299, 6709, 15942, + 18655, 17299, 6709, 15944, + 18655, 17299, 7041, 698, + 18655, 17299, 7041, 6700, + 18655, 17299, 7077, 12524, + 18655, 17299, 7077, 15452, + 18655, 17299, 7429, 9442, + 18655, 17299, 7429, 10122, + 18655, 17299, 7429, 14509, 8808, + 18655, 17299, 8281, 17019, 10574, + 18655, 17299, 8981, 20381, 12524, + 18655, 17299, 8981, 20381, 15452, + 18655, 17299, 9527, 20380, + 18655, 17299, 9905, 20380, + 18655, 17299, 10636, + 18655, 17299, 11124, + 18655, 17299, 11125, 698, + 18655, 17299, 11125, 14890, + 18655, 17299, 11395, 20380, + 18655, 17299, 11513, 23216, + 18655, 17299, 12497, 3436, + 18655, 17299, 12497, 6044, + 18655, 17299, 12497, 10606, + 18655, 17299, 12497, 16904, + 18655, 17299, 12548, + 18655, 17299, 12554, + 18655, 17299, 12932, + 18655, 17299, 13259, 17740, + 18655, 17299, 13282, + 18655, 17299, 13409, 9443, 487, 14890, + 18655, 17299, 13409, 9443, 14890, + 18655, 17299, 13730, + 18655, 17299, 13828, + 18655, 17299, 13829, 20475, 10122, + 18655, 17299, 13829, 22505, 10122, + 18655, 17299, 13970, + 18655, 17299, 14045, 10122, + 18655, 17299, 14509, 699, 8808, + 18655, 17299, 14509, 8808, + 18655, 17299, 14530, + 18655, 17299, 14659, 17019, 10574, + 18655, 17299, 14768, + 18655, 17299, 14797, 698, + 18655, 17299, 14797, 6700, + 18655, 17299, 14837, 17740, + 18655, 17299, 15398, + 18655, 17299, 15455, 9442, + 18655, 17299, 15455, 10122, + 18655, 17299, 15839, 8808, + 18655, 17299, 15840, + 18655, 17299, 15841, 10122, + 18655, 17299, 15939, 47, 20380, + 18655, 17299, 15946, + 18655, 17299, 15965, 10994, + 18655, 17299, 16019, 17740, + 18655, 17299, 16025, 14890, + 18655, 17299, 16095, 7040, + 18655, 17299, 16095, 14796, + 18655, 17299, 16095, 17740, + 18655, 17299, 16107, 9442, + 18655, 17299, 16107, 10122, + 18655, 17299, 16455, 5, 6342, + 18655, 17299, 16455, 1393, 507, 14532, + 18655, 17299, 16455, 7041, 10574, + 18655, 17299, 16455, 7429, 9442, + 18655, 17299, 16455, 13259, 9442, + 18655, 17299, 16455, 15455, 9442, + 18655, 17299, 16455, 16107, 9443, 10693, 698, + 18655, 17299, 16455, 16107, 9443, 10693, 6700, + 18655, 17299, 16455, 18951, 9443, 10693, 698, + 18655, 17299, 16455, 18951, 9443, 10693, 6700, + 18655, 17299, 16455, 22811, 8808, + 18655, 17299, 16622, + 18655, 17299, 16666, + 18655, 17299, 16667, 10122, + 18655, 17299, 16667, 12524, + 18655, 17299, 16833, 5494, + 18655, 17299, 16833, 12468, + 18655, 17299, 17019, 6696, + 18655, 17299, 17171, 17740, + 18655, 17299, 17225, 2, + 18655, 17299, 17225, 20381, 12524, + 18655, 17299, 17225, 20381, 15452, + 18655, 17299, 17270, + 18655, 17299, 17351, 21739, 1161, 22789, 20474, + 18655, 17299, 17351, 21739, 1161, 22789, 20475, 23804, + 18655, 17299, 17351, 21739, 1161, 22789, 22504, + 18655, 17299, 17351, 23271, 1161, 22789, 20474, + 18655, 17299, 17351, 23271, 1161, 22789, 22504, + 18655, 17299, 17351, 23271, 1161, 22789, 22505, 23804, + 18655, 17299, 17351, 23271, 1161, 22789, 22505, 23806, + 18655, 17299, 17351, 23271, 1161, 22789, 22505, 23808, + 18655, 17299, 17810, + 18655, 17299, 17830, + 18655, 17299, 17895, 20381, 12524, + 18655, 17299, 17895, 20381, 15452, + 18655, 17299, 18146, + 18655, 17299, 18147, 12502, + 18655, 17299, 18665, 698, + 18655, 17299, 18665, 6700, + 18655, 17299, 18886, + 18655, 17299, 18951, 9442, + 18655, 17299, 18951, 10122, + 18655, 17299, 18951, 11033, 7040, + 18655, 17299, 18951, 11033, 14796, + 18655, 17299, 18999, 13259, 17740, + 18655, 17299, 19704, + 18655, 17299, 20025, 22056, + 18655, 17299, 20025, 22058, + 18655, 17299, 20025, 22060, + 18655, 17299, 20163, 11124, + 18655, 17299, 20341, 18601, 10122, + 18655, 17299, 20381, 12524, + 18655, 17299, 20405, 14962, + 18655, 17299, 20413, 20740, + 18655, 17299, 20413, 20742, + 18655, 17299, 20413, 20744, + 18655, 17299, 20413, 20746, + 18655, 17299, 20413, 20748, + 18655, 17299, 20413, 20750, + 18655, 17299, 20413, 20752, + 18655, 17299, 20413, 20754, + 18655, 17299, 20413, 20756, + 18655, 17299, 20413, 21912, + 18655, 17299, 20413, 21914, + 18655, 17299, 20577, 20014, + 18655, 17299, 20577, 20016, + 18655, 17299, 20577, 20018, + 18655, 17299, 20665, 14962, + 18655, 17299, 20844, + 18655, 17299, 20845, 21810, + 18655, 17299, 20859, 20381, 699, 12524, + 18655, 17299, 20859, 20381, 699, 14659, 12524, + 18655, 17299, 20859, 20381, 699, 14659, 15452, + 18655, 17299, 20859, 20381, 699, 15452, + 18655, 17299, 20859, 20381, 6701, 12524, + 18655, 17299, 20859, 20381, 6701, 15452, + 18655, 17299, 20859, 20381, 8281, 12524, + 18655, 17299, 20859, 20381, 8281, 15452, + 18655, 17299, 20859, 20381, 14659, 12524, + 18655, 17299, 20859, 20381, 14659, 15452, + 18655, 17299, 20905, 14962, + 18655, 17299, 21127, 699, 1034, + 18655, 17299, 21127, 3084, + 18655, 17299, 21127, 6060, + 18655, 17299, 21127, 6688, + 18655, 17299, 21127, 6701, 1034, + 18655, 17299, 21127, 7044, + 18655, 17299, 21127, 10609, 21748, + 18655, 17299, 21127, 10692, + 18655, 17299, 21127, 13834, + 18655, 17299, 21127, 14914, + 18655, 17299, 21127, 15678, + 18655, 17299, 21127, 16095, 17430, + 18655, 17299, 21127, 16180, + 18655, 17299, 21127, 16182, + 18655, 17299, 21127, 16184, + 18655, 17299, 21127, 16186, + 18655, 17299, 21127, 16188, + 18655, 17299, 21127, 17354, + 18655, 17299, 21127, 17435, 17430, + 18655, 17299, 21127, 18578, + 18655, 17299, 21127, 20106, + 18655, 17299, 21127, 20704, + 18655, 17299, 21127, 22056, + 18655, 17299, 21127, 22058, + 18655, 17299, 21127, 22060, + 18655, 17299, 21127, 23763, 1290, + 18655, 17299, 21127, 24139, 10692, + 18655, 17299, 21127, 25944, + 18655, 17299, 21127, 26294, + 18655, 17299, 21127, 36198, + 18655, 17299, 21152, + 18655, 17299, 21405, 14962, + 18655, 17299, 21417, 14962, + 18655, 17299, 21433, 698, + 18655, 17299, 21433, 6700, + 18655, 17299, 21445, 5, 6342, + 18655, 17299, 21445, 11, 6342, + 18655, 17299, 21752, + 18655, 17299, 21753, 16192, + 18655, 17299, 21834, + 18655, 17299, 21835, 16192, + 18655, 17299, 21881, 9442, + 18655, 17299, 21881, 10122, + 18655, 17299, 22179, 698, + 18655, 17299, 22179, 6700, + 18655, 17299, 22847, 10122, + 18655, 17299, 22847, 12524, + 18655, 17299, 22847, 15452, + 18655, 17299, 22853, 10122, + 18655, 17299, 22853, 12524, + 18655, 17299, 22853, 15452, + 18655, 17299, 22921, 21418, + 18655, 17299, 22975, 14962, + 18655, 17299, 23112, + 18655, 17299, 23229, 21418, + 18655, 17299, 23242, + 18655, 17299, 23356, + 18655, 17299, 23523, 20380, + 18655, 17299, 23588, + 18655, 17299, 24067, 5494, + 18655, 17299, 24067, 12468, + 18655, 17299, 24135, 9442, + 18655, 17299, 24135, 10122, + 18655, 17299, 25953, 9442, + 18655, 17299, 25953, 10122, + 18655, 17299, 26185, 20381, 6701, 12524, + 18655, 17299, 26185, 20381, 6701, 15452, + 18655, 20196, + 18655, 20197, 11513, 13602, + 18657, 2797, 13069, 2760, + 18657, 2797, 13069, 3240, + 18657, 2797, 13069, 3536, + 18657, 2797, 13069, 7036, + 18657, 2797, 13069, 7058, + 18657, 2797, 13069, 9358, + 18657, 2797, 13069, 11824, + 18657, 2797, 13069, 13150, + 18657, 2797, 13069, 14778, + 18657, 2797, 13069, 15116, + 18657, 3375, 13769, 13069, 2760, + 18657, 3375, 13769, 13069, 3240, + 18657, 3375, 13769, 13069, 3536, + 18657, 3375, 13769, 13069, 7036, + 18657, 3375, 13769, 13069, 7058, + 18657, 3375, 13769, 13069, 9358, + 18657, 3375, 13769, 13069, 11824, + 18657, 3375, 13769, 13069, 13150, + 18657, 3375, 13769, 13069, 14778, + 18657, 3375, 13769, 13069, 15116, + 18657, 10449, 13069, 2760, + 18657, 10449, 13069, 3240, + 18657, 10449, 13069, 3536, + 18657, 10449, 13069, 7036, + 18657, 10449, 13069, 7058, + 18657, 10449, 13069, 9358, + 18657, 10449, 13069, 11824, + 18657, 10449, 13069, 13150, + 18657, 10449, 13069, 14778, + 18657, 10449, 13069, 15116, + 18657, 10575, 1291, 12502, + 18657, 10575, 2797, 13657, 11032, + 18657, 10575, 3375, 13769, 17402, + 18657, 10575, 3375, 13769, 17408, + 18657, 10575, 5534, + 18657, 10575, 10449, 3194, + 18657, 10575, 10449, 17402, + 18657, 10575, 10449, 17404, + 18657, 10575, 10449, 17408, + 18657, 10575, 10449, 17410, + 18657, 10575, 10449, 17925, 17402, + 18657, 10575, 10449, 17925, 17404, + 18657, 10575, 10449, 17925, 19983, 11032, + 18657, 10575, 14695, 18793, 17408, + 18657, 10575, 16441, 17400, + 18657, 10575, 16441, 17404, + 18657, 10575, 16563, 19056, + 18657, 10575, 17534, + 18657, 10575, 19056, + 18657, 10575, 19408, + 18657, 10575, 19433, 2915, 13657, 17400, + 18657, 10575, 19433, 2915, 13657, 17402, + 18657, 10575, 19433, 2915, 13657, 17404, + 18657, 10575, 19433, 2915, 13657, 17406, + 18657, 10575, 19433, 2915, 13657, 17408, + 18657, 10575, 19540, + 18657, 11033, 8809, 10433, 13657, 363, 2836, + 18657, 11033, 8809, 10433, 13657, 13466, + 18657, 13069, 2760, + 18657, 13069, 3240, + 18657, 13069, 3536, + 18657, 13069, 7036, + 18657, 13069, 7058, + 18657, 13069, 9358, + 18657, 13069, 11824, + 18657, 13069, 13150, + 18657, 13069, 14778, + 18657, 13069, 15116, + 18657, 15407, 10575, 8, + 18657, 15407, 10575, 9, 12318, + 18657, 15407, 10575, 16, + 18657, 15407, 10575, 40, + 18657, 15407, 10575, 58, + 18657, 15407, 10575, 72, + 18657, 15407, 10575, 314, + 18657, 15407, 10575, 706, + 18657, 15407, 10575, 2455, 28, + 18657, 15407, 10575, 2455, 314, + 18657, 15407, 10575, 7235, 13657, 16, + 18657, 15407, 10575, 10433, 13657, 218, + 18657, 15407, 10575, 10449, 8, + 18657, 15407, 10575, 10449, 9, 12318, + 18657, 15407, 10575, 10449, 58, + 18657, 15407, 10575, 10449, 13259, 48, + 18657, 15407, 10575, 10863, 58, + 18657, 15407, 10575, 12343, 0, + 18657, 15407, 10575, 12343, 72, + 18657, 15407, 10575, 13665, 40, + 18657, 15407, 10575, 13665, 186, + 18657, 15407, 10575, 13665, 504, + 18657, 15407, 10575, 19415, 22, + 18657, 15407, 10575, 19415, 34, + 18657, 15407, 10575, 19415, 406, + 18657, 15407, 10575, 19415, 608, + 18657, 15407, 10575, 19433, 2915, 13657, 218, + 18657, 15407, 10575, 19433, 2915, 13657, 682, + 18657, 16531, 0, + 18657, 16531, 8, + 18657, 16531, 16, + 18657, 16531, 28, + 18657, 16531, 40, + 18657, 16531, 96, + 18657, 16531, 108, + 18657, 16531, 126, + 18657, 16531, 150, + 18657, 16531, 248, + 18657, 16531, 272, + 18657, 16531, 314, + 18657, 16531, 344, + 18657, 16531, 358, + 18657, 16531, 394, + 18657, 16531, 426, + 18657, 16531, 466, + 18657, 16531, 548, + 18657, 16531, 598, + 18657, 16531, 614, + 18657, 16531, 648, + 18657, 16531, 706, + 18657, 16531, 738, + 18657, 16531, 778, + 18657, 16531, 1000, + 18657, 16531, 1116, + 18657, 16531, 1214, + 18657, 16531, 1236, + 18657, 16531, 1588, + 18657, 16531, 1918, + 18657, 16531, 2036, + 18657, 16531, 2278, + 18657, 16531, 2455, 8, + 18657, 16531, 2455, 972, + 18657, 16531, 2455, 974, + 18657, 16531, 2455, 1918, + 18657, 16531, 2455, 2574, + 18657, 16531, 2574, + 18657, 16531, 2624, + 18657, 16531, 2698, + 18657, 16531, 2830, + 18657, 16531, 3212, + 18657, 16531, 3286, + 18657, 16531, 3375, 13769, 108, + 18657, 16531, 3375, 13769, 150, + 18657, 16531, 3375, 13769, 228, + 18657, 16531, 3375, 13769, 248, + 18657, 16531, 3375, 13769, 344, + 18657, 16531, 3375, 13769, 1000, + 18657, 16531, 3375, 13769, 1214, + 18657, 16531, 3375, 13769, 1236, + 18657, 16531, 3375, 13769, 1588, + 18657, 16531, 3375, 13769, 1918, + 18657, 16531, 3375, 13769, 2278, + 18657, 16531, 3375, 13769, 2624, + 18657, 16531, 3375, 13769, 2698, + 18657, 16531, 3375, 13769, 6572, + 18657, 16531, 3422, + 18657, 16531, 3502, + 18657, 16531, 6572, + 18657, 16531, 9424, + 18657, 16531, 10433, 13657, 3212, + 18657, 16531, 10449, 0, + 18657, 16531, 10449, 108, + 18657, 16531, 10449, 126, + 18657, 16531, 10449, 150, + 18657, 16531, 10449, 228, + 18657, 16531, 10449, 248, + 18657, 16531, 10449, 272, + 18657, 16531, 10449, 358, + 18657, 16531, 10449, 466, + 18657, 16531, 10449, 796, + 18657, 16531, 10449, 1000, + 18657, 16531, 10449, 1116, + 18657, 16531, 10449, 1588, + 18657, 16531, 10449, 1918, + 18657, 16531, 10449, 2036, + 18657, 16531, 10449, 2624, + 18657, 16531, 10449, 2698, + 18657, 16531, 10449, 2830, + 18657, 16531, 10449, 3422, + 18657, 16531, 10533, 18793, 1116, + 18657, 16531, 10533, 18793, 3212, + 18657, 16531, 11082, + 18657, 16531, 12343, 598, + 18657, 16531, 13419, 614, + 18657, 16531, 14695, 18793, 228, + 18657, 16531, 16441, 126, + 18657, 16531, 16441, 228, + 18657, 16531, 16441, 248, + 18657, 16531, 16441, 272, + 18657, 16531, 16441, 344, + 18657, 16531, 16441, 466, + 18657, 16531, 16441, 598, + 18657, 16531, 16441, 614, + 18657, 16531, 16441, 762, + 18657, 16531, 16441, 796, + 18657, 16531, 16441, 1116, + 18657, 16531, 16441, 1214, + 18657, 16531, 16441, 1236, + 18657, 16531, 16441, 1722, + 18657, 16531, 16441, 1918, + 18657, 16531, 16441, 2278, + 18657, 16531, 16441, 2698, + 18657, 16531, 16441, 3502, + 18657, 16531, 16441, 6572, + 18657, 16531, 16441, 11082, + 18657, 16531, 18091, 2915, 13657, 2624, + 18657, 16531, 18091, 2915, 13657, 3994, + 18657, 16531, 18091, 2915, 13657, 7306, + 18657, 16531, 19415, 22, + 18657, 16531, 19415, 34, + 18657, 16531, 19415, 406, + 18657, 16531, 19415, 608, + 18657, 16531, 19433, 2915, 13657, 2908, + 18657, 16531, 19433, 2915, 13657, 3422, + 18657, 17299, 10449, 2760, + 18657, 17299, 10449, 23212, + 18657, 17299, 12343, 2760, + 18657, 17299, 12343, 3536, + 18657, 17299, 12343, 23212, + 18657, 17299, 20074, + 18657, 17299, 20246, + 18657, 17299, 21128, + 18657, 17299, 25978, + 18657, 18091, 2915, 13657, 13069, 2760, + 18657, 18091, 2915, 13657, 13069, 3240, + 18657, 18091, 2915, 13657, 13069, 3536, + 18657, 18091, 2915, 13657, 13069, 7036, + 18657, 18091, 2915, 13657, 13069, 7058, + 18657, 18091, 2915, 13657, 13069, 9358, + 18657, 18091, 2915, 13657, 13069, 11824, + 18657, 18091, 2915, 13657, 13069, 13150, + 18657, 18091, 2915, 13657, 13069, 14778, + 18657, 18091, 2915, 13657, 13069, 15116, + 18657, 20249, 16441, 286, + 18657, 20249, 16441, 588, + 18657, 20249, 16441, 2734, + 18657, 20319, 16531, 10449, 25908, + 18657, 20319, 16531, 16441, 25908, + 18657, 21143, 10575, 2455, 16635, 394, + 18657, 21143, 10575, 2455, 16635, 426, + 18657, 21143, 10575, 2455, 16635, 466, + 18657, 21143, 10575, 10449, 16635, 738, + 18657, 21143, 10575, 16635, 272, + 18657, 21143, 10575, 16635, 598, + 18657, 21143, 10575, 16635, 738, + 18657, 21143, 10575, 16635, 778, + 18668, + 18671, 16095, 20933, 965, 16095, 14659, 22078, + 18673, 1, 17273, 507, 2641, 13177, 660, + 18673, 1, 20765, 507, 2641, 13177, 660, + 18673, 21559, 2641, 13177, 660, + 18673, 21559, 2641, 22435, 660, + 18673, 21559, 2641, 23852, + 18673, 23853, 2641, 13177, 660, + 18673, 23853, 2641, 21558, + 18673, 23853, 2641, 22435, 660, + 18673, 24195, 2641, 19513, 13177, 660, + 18674, + 18675, 7057, 3536, + 18679, 13094, + 18681, 6996, + 18681, 12667, 8108, + 18681, 12667, 8109, 19015, 3537, 18281, 19071, 17974, + 18681, 12667, 8109, 19015, 16745, 17974, + 18681, 12667, 9836, + 18681, 12667, 9837, 19015, 3537, 18281, 19071, 17974, + 18681, 12667, 9837, 19015, 16745, 17974, + 18681, 12667, 10180, + 18681, 12667, 10181, 19015, 3537, 18281, 19071, 17974, + 18681, 12667, 10181, 19015, 16745, 17974, + 18681, 12667, 14596, + 18681, 12667, 14597, 19015, 3537, 18281, 19071, 17974, + 18681, 12667, 14597, 19015, 16745, 17974, + 18681, 12667, 15816, + 18681, 12667, 15817, 19015, 3537, 18281, 19071, 17974, + 18681, 12667, 15817, 19015, 16745, 17974, + 18681, 12667, 16470, + 18681, 12667, 16471, 19015, 2761, 18281, 23695, 17974, + 18681, 12667, 16471, 19015, 3537, 18281, 19071, 17974, + 18681, 12667, 16471, 19015, 3537, 18281, 23711, 17974, + 18681, 12667, 16471, 19015, 15117, 18281, 18149, 17974, + 18681, 12667, 16471, 19015, 16745, 17974, + 18681, 12667, 16471, 19015, 22459, 17974, + 18681, 12667, 17465, 8108, + 18681, 12667, 17465, 9836, + 18681, 12667, 17465, 10180, + 18681, 12667, 17465, 14596, + 18681, 12667, 17465, 15816, + 18681, 12667, 17465, 16470, + 18681, 12667, 22432, + 18681, 12667, 22433, 19015, 16745, 17974, + 18683, 8280, + 18683, 14658, + 18715, 13069, 17124, + 18717, 10574, + 18719, 8281, 22849, 11513, 15117, 6696, + 18719, 13839, 26165, 15453, 22837, 12414, + 18719, 14659, 22849, 11513, 15117, 6696, + 18719, 15287, 26165, 15453, 22837, 12414, + 18741, 12379, 18763, 698, + 18741, 12379, 18763, 6700, + 18741, 16358, + 18748, + 18765, 6668, + 18765, 6669, 7788, + 18769, 13069, 2760, + 18769, 13069, 3240, + 18769, 13069, 3536, + 18769, 13069, 7036, + 18769, 13069, 7058, + 18769, 13069, 9358, + 18769, 13069, 11824, + 18769, 13069, 13150, + 18769, 13069, 14778, + 18769, 13069, 15116, + 18769, 16531, 0, + 18769, 16531, 8, + 18769, 16531, 16, + 18769, 16531, 28, + 18769, 16531, 40, + 18769, 16531, 58, + 18769, 16531, 108, + 18769, 16531, 186, + 18769, 16531, 228, + 18769, 16531, 248, + 18769, 16531, 272, + 18769, 16531, 344, + 18769, 16531, 522, + 18769, 16531, 598, + 18769, 16531, 614, + 18769, 16531, 648, + 18769, 16531, 762, + 18769, 16531, 778, + 18769, 16531, 1236, + 18769, 16531, 2036, + 18769, 16531, 3750, + 18769, 16531, 5482, + 18769, 16531, 6234, + 18769, 16531, 6614, + 18769, 16531, 7966, + 18769, 16531, 8236, + 18769, 16531, 8944, + 18769, 16531, 9536, + 18769, 16531, 9962, + 18769, 16531, 14820, + 18773, 14879, 16787, 2760, + 18773, 14879, 16787, 2761, 18280, + 18773, 14879, 16787, 2761, 20828, + 18773, 14879, 16787, 3240, + 18773, 14879, 16787, 3241, 18280, + 18773, 14879, 16787, 3241, 20828, + 18773, 14879, 16787, 3412, + 18773, 14879, 16787, 3413, 20828, + 18773, 14879, 16787, 3536, + 18773, 14879, 16787, 3537, 18280, + 18773, 14879, 16787, 3537, 20828, + 18773, 14879, 16787, 7036, + 18773, 14879, 16787, 7037, 18280, + 18773, 14879, 16787, 7037, 20828, + 18773, 14879, 16787, 7058, + 18773, 14879, 16787, 7059, 18280, + 18773, 14879, 16787, 7059, 20828, + 18773, 14879, 16787, 9358, + 18773, 14879, 16787, 9359, 18280, + 18773, 14879, 16787, 9359, 20828, + 18773, 14879, 16787, 13150, + 18773, 14879, 16787, 13151, 18280, + 18773, 14879, 16787, 13151, 20828, + 18773, 14879, 16787, 13254, + 18773, 14879, 16787, 13255, 20828, + 18773, 14879, 16787, 13284, + 18773, 14879, 16787, 13285, 20828, + 18773, 14879, 16787, 14778, + 18773, 14879, 16787, 14779, 18280, + 18773, 14879, 16787, 14779, 20828, + 18773, 14879, 16787, 14876, + 18773, 14879, 16787, 14877, 20828, + 18773, 14879, 16787, 15116, + 18773, 14879, 16787, 15117, 18280, + 18773, 14879, 16787, 15117, 20828, + 18773, 14879, 16787, 16108, + 18773, 14879, 16787, 16109, 20828, + 18773, 14879, 16787, 16744, + 18773, 14879, 16787, 16745, 20828, + 18773, 14879, 16787, 17372, + 18773, 14879, 16787, 17373, 20828, + 18773, 14879, 16787, 17474, + 18773, 14879, 16787, 17475, 20828, + 18773, 14879, 16787, 19070, + 18773, 14879, 16787, 19071, 20828, + 18773, 14879, 20055, 2761, 7428, + 18773, 14879, 20055, 2761, 14874, + 18773, 14879, 20278, + 18773, 14879, 21003, 16787, 3240, + 18773, 14879, 21003, 16787, 3241, 18280, + 18773, 14879, 21003, 16787, 3412, + 18773, 14879, 21003, 16787, 3413, 20828, + 18773, 14879, 21003, 16787, 3536, + 18773, 14879, 21003, 16787, 3537, 20828, + 18773, 14879, 21003, 16787, 7036, + 18773, 14879, 21003, 16787, 7058, + 18773, 14879, 21003, 16787, 7059, 18280, + 18773, 14879, 21003, 16787, 9358, + 18773, 14879, 21003, 16787, 13150, + 18773, 14879, 21003, 16787, 14778, + 18773, 14879, 21003, 16787, 15116, + 18780, + 18784, + 18819, 23798, + 18826, + 18828, + 18834, + 18839, 6996, + 18841, 10574, + 18871, 10574, + 18873, 18150, + 18878, + 18883, 6223, 847, 507, 12718, + 18883, 6223, 847, 507, 16322, + 18883, 6223, 847, 507, 17196, + 18883, 6223, 847, 507, 19794, + 18883, 6223, 3059, 13626, + 18883, 6223, 3241, 507, 12718, + 18883, 6223, 3241, 507, 16322, + 18883, 6223, 3241, 507, 17196, + 18883, 6223, 3241, 507, 19794, + 18883, 6223, 3413, 507, 12718, + 18883, 6223, 3413, 507, 16322, + 18883, 6223, 3413, 507, 17196, + 18883, 6223, 3413, 507, 19794, + 18883, 6223, 3537, 507, 12718, + 18883, 6223, 3537, 507, 16322, + 18883, 6223, 3537, 507, 17196, + 18883, 6223, 3537, 507, 19794, + 18883, 6223, 5966, + 18883, 6223, 7037, 507, 12718, + 18883, 6223, 7037, 507, 16322, + 18883, 6223, 7037, 507, 17196, + 18883, 6223, 7037, 507, 19794, + 18883, 6223, 7050, + 18883, 6223, 7059, 507, 12718, + 18883, 6223, 7059, 507, 16322, + 18883, 6223, 7059, 507, 17196, + 18883, 6223, 7059, 507, 19794, + 18883, 6223, 7837, 507, 12718, + 18883, 6223, 7837, 507, 16322, + 18883, 6223, 7837, 507, 17196, + 18883, 6223, 7837, 507, 19794, + 18883, 6223, 8109, 507, 12718, + 18883, 6223, 8109, 507, 16322, + 18883, 6223, 8109, 507, 17196, + 18883, 6223, 8109, 507, 19794, + 18883, 6223, 9359, 507, 12718, + 18883, 6223, 9359, 507, 16322, + 18883, 6223, 9359, 507, 17196, + 18883, 6223, 9359, 507, 19794, + 18883, 6223, 12525, 13626, + 18883, 6223, 13151, 507, 12718, + 18883, 6223, 13151, 507, 16322, + 18883, 6223, 13151, 507, 17196, + 18883, 6223, 13151, 507, 19794, + 18883, 6223, 14597, 507, 12718, + 18883, 6223, 14597, 507, 16322, + 18883, 6223, 14597, 507, 17196, + 18883, 6223, 14597, 507, 19794, + 18883, 6223, 14779, 507, 12718, + 18883, 6223, 14779, 507, 16322, + 18883, 6223, 14779, 507, 17196, + 18883, 6223, 14779, 507, 19794, + 18883, 6223, 15117, 507, 12718, + 18883, 6223, 15117, 507, 16322, + 18883, 6223, 15117, 507, 17196, + 18883, 6223, 15117, 507, 19794, + 18883, 6223, 15453, 13626, + 18883, 6223, 16471, 507, 12718, + 18883, 6223, 16471, 507, 16322, + 18883, 6223, 16471, 507, 17196, + 18883, 6223, 16471, 507, 19794, + 18883, 6223, 19324, + 18883, 6223, 19326, + 18883, 6223, 19328, + 18883, 6223, 19330, + 18883, 6223, 19332, + 18883, 6223, 19334, + 18883, 6223, 19336, + 18883, 6223, 19338, + 18883, 6223, 19340, + 18883, 6223, 20868, + 18883, 6223, 20870, + 18883, 6223, 20872, + 18883, 6223, 20874, + 18883, 6223, 20876, + 18883, 6223, 20878, + 18883, 6223, 20880, + 18883, 6223, 20882, + 18883, 6223, 20884, + 18883, 6223, 20886, + 18883, 6223, 20888, + 18883, 6223, 20890, + 18884, + 18894, + 18898, + 18901, 15437, 17298, + 18903, 2232, + 18905, 16558, + 18907, 1091, 6996, + 18907, 6996, + 18922, + 18924, + 18925, 7788, + 18931, 6216, + 18935, 18789, 7059, 6697, 11513, 1290, + 18935, 18789, 7059, 6697, 11513, 12934, + 18935, 18789, 16531, 276, + 18935, 18789, 16531, 554, + 18935, 18789, 16531, 2676, + 18935, 18789, 16531, 3398, + 18935, 18789, 16531, 6066, + 18935, 18789, 16531, 7478, + 18935, 18789, 16531, 8002, + 18935, 18789, 16531, 10478, + 18935, 18789, 16531, 11722, + 18935, 18789, 16531, 12354, + 18935, 18789, 16531, 13384, + 18935, 18789, 16531, 14720, + 18935, 18789, 16531, 15606, + 18935, 18789, 16531, 16010, + 18935, 18789, 16531, 16508, + 18935, 18789, 16531, 17060, + 18935, 18789, 16531, 20300, + 18935, 18789, 16531, 25970, + 18935, 18789, 16787, 2760, + 18935, 18789, 16787, 2761, 18280, + 18935, 18789, 16787, 3412, + 18935, 18789, 16787, 3536, + 18935, 18789, 16787, 7058, + 18935, 18789, 16787, 15116, + 18935, 18789, 16787, 17474, + 18935, 18789, 17465, 19057, 8808, + 18935, 18789, 19057, 8808, + 18939, 19975, 8808, + 18946, + 18951, 9442, + 18956, + 18961, 17299, 15826, + 18963, 1088, + 18963, 15194, + 18964, + 18984, + 18999, 13807, 7059, 18889, 20489, 10690, + 18999, 15141, 20407, 12319, 21557, 12414, + 18999, 15141, 20407, 12319, 22837, 12414, + 18999, 17863, 12538, + 18999, 19140, + 18999, 19141, 11513, 22495, 17264, + 18999, 19141, 20406, + 18999, 19141, 21763, 17272, + 19003, 6056, + 19007, 15017, 16958, + 19009, 521, 3425, 13271, 20218, + 19010, + 19012, + 19015, 13473, 12525, 13471, 15858, + 19015, 13807, 7059, 18889, 12525, 6380, + 19015, 15453, 7059, 18889, 6380, + 19015, 16199, 13471, 15858, + 19015, 17835, 32, + 19019, 17299, 1493, 242, + 19019, 17299, 1493, 416, + 19019, 17299, 1493, 768, + 19019, 17299, 1493, 1080, + 19019, 17299, 1493, 10500, + 19019, 17299, 1493, 20654, + 19020, + 19023, 14825, 11513, 10396, + 19025, 23755, 17299, 16762, + 19025, 23755, 17299, 19620, + 19025, 23755, 17299, 20552, + 19025, 23755, 17299, 20636, + 19025, 23755, 17299, 22054, + 19025, 23755, 17299, 22104, + 19032, + 19050, + 19052, + 19057, 10574, + 19058, + 19063, 6997, 11513, 19229, 19735, 14030, + 19065, 8808, + 19074, + 19079, 6996, + 19081, 2795, 507, 7048, + 19085, 518, + 19085, 6846, + 19085, 10575, 14334, + 19085, 10575, 17534, + 19085, 10575, 19100, + 19085, 10575, 19408, + 19085, 10575, 19540, + 19085, 10575, 19586, + 19085, 10575, 20163, 23070, + 19085, 10575, 23070, + 19085, 10575, 23288, + 19085, 10575, 23722, + 19085, 13016, + 19085, 13069, 2760, + 19085, 13069, 3240, + 19085, 13069, 3536, + 19085, 13069, 7036, + 19085, 13069, 7058, + 19085, 13069, 9358, + 19085, 13069, 11824, + 19085, 13069, 13150, + 19085, 13069, 14778, + 19085, 13069, 15116, + 19085, 13207, 14837, 15407, 8808, + 19085, 15009, 8808, + 19085, 15407, 10575, 8, + 19085, 15407, 10575, 16, + 19085, 15407, 10575, 28, + 19085, 15407, 10575, 40, + 19085, 15407, 10575, 58, + 19085, 15407, 10575, 72, + 19085, 15407, 10575, 96, + 19085, 15407, 10575, 314, + 19085, 15407, 10575, 706, + 19085, 15407, 10575, 19415, 22, + 19085, 15407, 10575, 19415, 34, + 19085, 15407, 10575, 19415, 406, + 19085, 15407, 10575, 19415, 608, + 19085, 15407, 10575, 25905, 8, + 19085, 15407, 20319, 8808, + 19085, 16095, 13016, + 19085, 16531, 0, + 19085, 16531, 8, + 19085, 16531, 16, + 19085, 16531, 28, + 19085, 16531, 40, + 19085, 16531, 58, + 19085, 16531, 72, + 19085, 16531, 96, + 19085, 16531, 108, + 19085, 16531, 126, + 19085, 16531, 150, + 19085, 16531, 248, + 19085, 16531, 272, + 19085, 16531, 314, + 19085, 16531, 344, + 19085, 16531, 358, + 19085, 16531, 394, + 19085, 16531, 426, + 19085, 16531, 466, + 19085, 16531, 548, + 19085, 16531, 598, + 19085, 16531, 614, + 19085, 16531, 648, + 19085, 16531, 706, + 19085, 16531, 714, + 19085, 16531, 778, + 19085, 16531, 1000, + 19085, 16531, 1116, + 19085, 16531, 1214, + 19085, 16531, 1236, + 19085, 16531, 1588, + 19085, 16531, 1918, + 19085, 16531, 2036, + 19085, 16531, 2278, + 19085, 16531, 2574, + 19085, 16531, 2624, + 19085, 16531, 2698, + 19085, 16531, 2830, + 19085, 16531, 3212, + 19085, 16531, 3286, + 19085, 16531, 3422, + 19085, 16531, 3502, + 19085, 16531, 6572, + 19085, 16531, 11082, + 19085, 16531, 19415, 22, + 19085, 16531, 19415, 34, + 19085, 16531, 19415, 406, + 19085, 16531, 19415, 608, + 19085, 17069, 8808, + 19085, 19057, 16606, + 19085, 19057, 16608, + 19085, 21850, + 19085, 22478, + 19085, 23737, 10574, + 19085, 23789, 10574, + 19087, 16531, 70, + 19087, 16531, 308, + 19087, 16531, 520, + 19087, 16531, 528, + 19087, 16531, 628, + 19087, 16531, 698, + 19087, 16531, 850, + 19087, 16531, 874, + 19087, 16531, 882, + 19087, 16531, 918, + 19087, 16531, 922, + 19087, 16531, 934, + 19087, 16531, 1010, + 19087, 16531, 1352, + 19087, 16531, 1354, + 19087, 16531, 1366, + 19087, 16531, 1408, + 19087, 16531, 1460, + 19087, 16531, 1532, + 19087, 16531, 1854, + 19087, 16531, 1856, + 19087, 16531, 2676, + 19087, 16531, 2732, + 19087, 16531, 2752, + 19087, 16531, 2784, + 19087, 16531, 3478, + 19087, 16531, 3712, + 19087, 16531, 3778, + 19087, 16531, 3914, + 19087, 16531, 3926, + 19087, 16531, 4074, + 19087, 16531, 6610, + 19087, 16531, 7696, + 19087, 16531, 8102, + 19087, 16531, 8348, + 19087, 16531, 8950, + 19087, 16531, 9780, + 19087, 16531, 9844, + 19087, 16531, 10172, + 19087, 16531, 10738, + 19087, 16531, 10946, + 19087, 16531, 11532, + 19087, 16531, 12412, + 19087, 16531, 13440, + 19087, 16531, 13628, + 19087, 16531, 15104, + 19087, 16531, 15934, + 19087, 16531, 18600, + 19095, 6997, 11513, 21379, 7460, + 19099, 18932, + 19101, 1393, 507, 10921, 8808, + 19101, 10575, 14334, + 19101, 10575, 17534, + 19101, 10575, 19100, + 19101, 10575, 19408, + 19101, 10575, 19540, + 19101, 10575, 23070, + 19101, 13016, + 19101, 15407, 10575, 8, + 19101, 15407, 10575, 16, + 19101, 15407, 10575, 28, + 19101, 15407, 10575, 40, + 19101, 15407, 10575, 58, + 19101, 15407, 10575, 72, + 19101, 15407, 10575, 96, + 19101, 15407, 10575, 314, + 19101, 15407, 10575, 706, + 19101, 15407, 10575, 19415, 34, + 19101, 15407, 10575, 19415, 608, + 19101, 15407, 10575, 21003, 40, + 19101, 15407, 10575, 21003, 706, + 19101, 16095, 13016, + 19101, 16531, 0, + 19101, 16531, 8, + 19101, 16531, 16, + 19101, 16531, 28, + 19101, 16531, 40, + 19101, 16531, 58, + 19101, 16531, 72, + 19101, 16531, 96, + 19101, 16531, 108, + 19101, 16531, 126, + 19101, 16531, 150, + 19101, 16531, 248, + 19101, 16531, 272, + 19101, 16531, 314, + 19101, 16531, 344, + 19101, 16531, 358, + 19101, 16531, 394, + 19101, 16531, 426, + 19101, 16531, 466, + 19101, 16531, 548, + 19101, 16531, 598, + 19101, 16531, 614, + 19101, 16531, 648, + 19101, 16531, 706, + 19101, 16531, 714, + 19101, 16531, 778, + 19101, 16531, 1000, + 19101, 16531, 1116, + 19101, 16531, 1214, + 19101, 16531, 1236, + 19101, 16531, 1588, + 19101, 16531, 1918, + 19101, 16531, 2036, + 19101, 16531, 2574, + 19101, 16531, 2624, + 19101, 16531, 2698, + 19101, 16531, 2830, + 19101, 16531, 3212, + 19101, 16531, 3286, + 19101, 16531, 3422, + 19101, 16531, 3502, + 19101, 16531, 6572, + 19101, 16531, 11082, + 19101, 16531, 19415, 22, + 19101, 16531, 19415, 34, + 19101, 16531, 19415, 406, + 19101, 16531, 19415, 608, + 19101, 16531, 21003, 40, + 19101, 16531, 23003, 21003, 16, + 19101, 16531, 23003, 21003, 314, + 19101, 16531, 24155, 21003, 16, + 19101, 19057, 8809, 11513, 10101, 897, 16093, 16095, 21154, + 19101, 19057, 8809, 11513, 10101, 897, 16093, 17435, 21154, + 19101, 19057, 8809, 11513, 10101, 897, 16093, 21154, + 19101, 19057, 8809, 11513, 16095, 21154, + 19101, 19057, 8809, 11513, 17435, 21154, + 19101, 19057, 8809, 11513, 17883, 897, 3537, 22416, + 19101, 19057, 8809, 11513, 17883, 897, 7059, 22416, + 19101, 19057, 8809, 11513, 17883, 897, 10100, + 19101, 19057, 8809, 11513, 19313, 897, 16093, 21154, + 19101, 19057, 8809, 11513, 19313, 897, 20909, 21704, + 19101, 19057, 8809, 11513, 20639, 21154, + 19101, 19057, 8809, 11513, 21775, 21154, + 19101, 19057, 8809, 16095, 10150, + 19101, 19057, 8809, 16095, 10151, 11513, 10100, + 19101, 21851, 964, + 19101, 21851, 1290, + 19101, 22819, 16606, + 19101, 22819, 16608, + 19101, 22819, 16610, + 19107, 529, 21558, + 19107, 529, 23852, + 19107, 12319, 21559, 12319, 16121, 10574, + 19107, 12319, 23853, 12319, 16121, 10574, + 19107, 14005, 19106, + 19111, 8337, 13069, 2760, + 19111, 8337, 13069, 3240, + 19111, 8337, 13069, 3536, + 19111, 8337, 13069, 7036, + 19111, 8337, 13069, 7058, + 19111, 8337, 13069, 9358, + 19111, 8337, 13069, 11824, + 19111, 8337, 13069, 13150, + 19111, 8337, 13069, 14778, + 19111, 8337, 13069, 15116, + 19111, 10575, 20996, + 19111, 10575, 22110, + 19111, 10575, 22166, + 19111, 10575, 23070, + 19111, 15407, 10575, 6663, 18374, + 19111, 15407, 10575, 6663, 20168, + 19111, 15407, 10575, 6663, 21708, + 19111, 15407, 10575, 6663, 22146, + 19111, 15407, 10575, 6663, 23232, + 19111, 15407, 10575, 6663, 23846, + 19111, 15407, 10575, 13681, 20168, + 19111, 15407, 10575, 13681, 21708, + 19111, 15407, 10575, 13681, 22146, + 19111, 15407, 10575, 13725, 6620, + 19111, 15407, 10575, 18374, + 19111, 15407, 10575, 18375, 1679, 6663, 22148, + 19111, 15407, 10575, 18375, 1679, 22148, + 19111, 15407, 10575, 18375, 1679, 23232, + 19111, 15407, 10575, 22148, + 19111, 15407, 10575, 23232, + 19111, 15407, 10575, 23846, + 19111, 16531, 5501, 17752, + 19111, 16531, 15762, + 19111, 16531, 16132, + 19111, 16531, 16394, + 19111, 16531, 16842, + 19111, 16531, 17512, + 19111, 16531, 17632, + 19111, 16531, 17648, + 19111, 16531, 17660, + 19111, 16531, 17720, + 19111, 16531, 17963, 18498, + 19111, 16531, 17963, 18666, + 19111, 16531, 17963, 19044, + 19111, 16531, 18096, + 19111, 16531, 18140, + 19111, 16531, 18256, + 19111, 16531, 18290, + 19111, 16531, 18335, 22596, + 19111, 16531, 18594, + 19111, 16531, 18760, + 19111, 16531, 18974, + 19111, 16531, 19037, 17968, + 19111, 16531, 19037, 18190, + 19111, 16531, 19037, 18322, + 19111, 16531, 19037, 19770, + 19111, 16531, 19241, 19044, + 19111, 16531, 19241, 20617, 23352, + 19111, 16531, 19241, 22596, + 19111, 16531, 19384, + 19111, 16531, 19396, + 19111, 16531, 19458, + 19111, 16531, 19516, + 19111, 16531, 20138, + 19111, 16531, 20166, + 19111, 16531, 21488, + 19111, 16531, 21510, + 19111, 16531, 21619, 18498, + 19111, 16531, 21619, 18666, + 19111, 16531, 21619, 19044, + 19111, 16531, 22155, 17752, + 19111, 16531, 22155, 17844, + 19111, 16531, 22155, 17968, + 19111, 16531, 22155, 18190, + 19111, 16531, 22155, 18322, + 19111, 16531, 22155, 18344, + 19111, 16531, 22155, 18822, + 19111, 16531, 22155, 19258, + 19111, 16531, 22155, 19770, + 19111, 16531, 22155, 20894, + 19111, 16531, 23313, 17752, + 19111, 16531, 23313, 17844, + 19111, 16531, 23313, 17968, + 19111, 16531, 23313, 18190, + 19111, 16531, 23313, 18322, + 19111, 16531, 23313, 18344, + 19111, 16531, 23313, 18822, + 19111, 16531, 23313, 19258, + 19111, 16531, 23313, 19770, + 19111, 16531, 23313, 20894, + 19111, 17709, 13069, 2760, + 19111, 17709, 13069, 3240, + 19111, 17709, 13069, 3536, + 19111, 17709, 13069, 7036, + 19111, 17709, 13069, 7058, + 19111, 17709, 13069, 9358, + 19111, 17709, 13069, 13150, + 19111, 17709, 13069, 14778, + 19111, 17709, 13069, 15116, + 19111, 17709, 16787, 2761, 18280, + 19111, 17709, 16787, 2761, 20828, + 19111, 17709, 16787, 3412, + 19111, 17709, 16787, 13254, + 19111, 17709, 16787, 13284, + 19111, 17709, 16787, 14876, + 19111, 17709, 16787, 16108, + 19111, 17709, 16787, 16744, + 19111, 17709, 16787, 17372, + 19111, 17709, 16787, 17474, + 19111, 17709, 16787, 19070, + 19111, 23555, 22530, + 19117, 18889, 19574, + 19121, 13177, 661, 529, 21558, + 19121, 13177, 661, 529, 21559, 11513, 1291, 16382, + 19121, 13177, 661, 529, 23852, + 19121, 13177, 661, 529, 23853, 11513, 1291, 16382, + 19121, 14255, 12415, 11513, 16351, 7460, + 19121, 14255, 12415, 11513, 22495, 10856, + 19125, 13779, 528, + 19125, 13779, 896, + 19127, 10932, + 19127, 10933, 529, 13177, 660, + 19129, 1091, 6997, 11513, 9783, 14030, + 19129, 1091, 6997, 11513, 23861, 6882, + 19129, 6997, 11513, 7430, + 19129, 6997, 11513, 9783, 14030, + 19129, 6997, 11513, 9783, 14031, 897, 6353, 15014, + 19129, 6997, 11513, 9783, 14031, 897, 19129, 6882, + 19129, 6997, 11513, 9783, 14031, 897, 26179, 6882, + 19129, 6997, 11513, 10900, + 19129, 6997, 11513, 13534, + 19129, 6997, 11513, 19129, 6882, + 19129, 6997, 11513, 19129, 6883, 897, 7433, 19735, 14030, + 19129, 6997, 11513, 19129, 6883, 897, 15117, 16322, + 19129, 6997, 11513, 22954, + 19129, 6997, 11513, 23861, 6882, + 19131, 17298, + 19132, + 19133, 19443, 10610, + 19137, 16531, 276, + 19137, 16531, 554, + 19137, 16531, 2406, + 19137, 16531, 2676, + 19137, 16531, 3398, + 19137, 16531, 3750, + 19137, 16531, 5556, + 19137, 16531, 6066, + 19137, 16531, 7016, + 19137, 16531, 7478, + 19137, 16531, 8002, + 19137, 16531, 8284, + 19137, 16531, 10478, + 19137, 16531, 11722, + 19137, 16531, 12354, + 19137, 16531, 13384, + 19137, 16531, 14720, + 19137, 16531, 15606, + 19137, 16531, 16508, + 19137, 16531, 17060, + 19137, 16531, 21806, + 19137, 16787, 2760, + 19137, 16787, 2761, 18280, + 19137, 16787, 3412, + 19137, 16787, 17474, + 19137, 21127, 1291, 12318, + 19137, 21127, 1291, 12502, + 19137, 21127, 3537, 6697, 12318, + 19137, 21127, 3537, 6697, 12502, + 19137, 21127, 7659, 12318, + 19137, 21127, 7659, 12502, + 19137, 21127, 8351, 7659, 12502, + 19137, 21127, 10121, 12502, + 19137, 21127, 12945, 12318, + 19137, 21127, 12945, 12502, + 19137, 21127, 17265, 12502, + 19137, 23273, 10478, + 19137, 23555, 3537, 17883, 11513, 6696, + 19137, 23555, 3537, 20933, 5990, + 19137, 23555, 3537, 20933, 5991, 11513, 6696, + 19137, 23555, 7429, 15939, 11513, 1290, + 19137, 23555, 15939, 11513, 1290, + 19140, + 19141, 11513, 18778, + 19145, 7461, 8809, 11513, 8981, 897, 3310, + 19145, 7461, 8809, 11513, 8981, 897, 3311, 897, 13264, + 19145, 7461, 8809, 11513, 8981, 897, 3311, 897, 17435, 13264, + 19145, 8809, 10444, + 19145, 8809, 14554, + 19145, 8809, 15224, + 19145, 8809, 16095, 10444, + 19145, 10575, 19408, + 19145, 10575, 19540, + 19145, 10575, 23288, + 19145, 10575, 23722, + 19145, 13259, 21143, 10575, 2, + 19145, 13259, 21143, 10575, 6, + 19145, 13259, 21143, 10575, 12, + 19145, 13259, 21143, 10575, 20, + 19145, 13259, 21143, 10575, 22, + 19145, 13259, 21143, 10575, 24, + 19145, 13259, 21143, 10575, 26, + 19145, 13259, 21143, 10575, 34, + 19145, 13259, 21143, 10575, 36, + 19145, 13259, 21143, 10575, 52, + 19145, 13259, 21143, 10575, 474, + 19145, 13259, 21143, 10575, 622, + 19145, 15407, 10575, 8, + 19145, 15407, 10575, 16, + 19145, 15407, 10575, 28, + 19145, 15407, 10575, 40, + 19145, 15407, 10575, 72, + 19145, 15407, 10575, 96, + 19145, 15407, 10575, 504, + 19145, 15407, 10575, 682, + 19145, 15407, 10575, 19415, 22, + 19145, 15407, 10575, 19415, 34, + 19145, 15407, 16525, 8808, + 19145, 16531, 0, + 19145, 16531, 52, + 19145, 16531, 108, + 19145, 16531, 126, + 19145, 16531, 150, + 19145, 16531, 248, + 19145, 16531, 272, + 19145, 16531, 344, + 19145, 16531, 358, + 19145, 16531, 394, + 19145, 16531, 426, + 19145, 16531, 466, + 19145, 16531, 548, + 19145, 16531, 598, + 19145, 16531, 614, + 19145, 16531, 648, + 19145, 16531, 714, + 19145, 16531, 778, + 19145, 16531, 796, + 19145, 16531, 1000, + 19145, 16531, 1116, + 19145, 16531, 1214, + 19145, 16531, 1236, + 19145, 16531, 1330, + 19145, 16531, 1588, + 19145, 16531, 1918, + 19145, 16531, 2036, + 19145, 16531, 2574, + 19145, 16531, 2624, + 19145, 16531, 2698, + 19145, 16531, 2830, + 19145, 16531, 3212, + 19145, 16531, 3286, + 19145, 16531, 3422, + 19145, 16531, 3488, + 19145, 16531, 3502, + 19145, 16531, 4042, + 19145, 16531, 6572, + 19145, 16531, 8154, + 19145, 16531, 11058, + 19145, 16531, 11082, + 19145, 20813, 16606, + 19145, 20813, 16608, + 19145, 21920, + 19145, 22465, 8808, + 19145, 28043, 16531, 394, + 19145, 28043, 16531, 598, + 19145, 28043, 16531, 614, + 19145, 28043, 16531, 3212, + 19148, + 19150, + 19151, 11513, 2761, 14929, 11472, + 19151, 11513, 15117, 14929, 15440, + 19151, 11513, 23781, 17264, + 19155, 7023, 18176, + 19155, 7023, 18178, + 19165, 138, + 19165, 274, + 19165, 294, + 19165, 304, + 19165, 456, + 19165, 474, + 19165, 514, + 19165, 616, + 19165, 634, + 19165, 699, 11513, 23213, 8808, + 19165, 726, + 19165, 742, + 19165, 1145, 19371, 26008, + 19165, 1145, 19371, 26010, + 19165, 1145, 19371, 26012, + 19165, 1145, 19371, 26014, + 19165, 1145, 19371, 26016, + 19165, 1145, 19371, 26018, + 19165, 1145, 19371, 26020, + 19165, 1145, 19371, 26022, + 19165, 1145, 19371, 26024, + 19165, 1145, 19371, 26028, + 19165, 1145, 19371, 26030, + 19165, 1145, 19371, 26032, + 19165, 1145, 19371, 26034, + 19165, 1145, 19371, 26036, + 19165, 1145, 19371, 26038, + 19165, 1145, 19371, 26040, + 19165, 1145, 19371, 26042, + 19165, 1145, 19371, 26044, + 19165, 1145, 19371, 26048, + 19165, 1145, 19371, 26050, + 19165, 1145, 19371, 26052, + 19165, 1145, 19371, 26054, + 19165, 1145, 19371, 26056, + 19165, 1145, 19371, 26058, + 19165, 1145, 19371, 26060, + 19165, 1145, 19371, 26064, + 19165, 1145, 19371, 26066, + 19165, 1145, 19371, 26068, + 19165, 1145, 19371, 26070, + 19165, 1145, 19371, 26072, + 19165, 1145, 19371, 26076, + 19165, 1145, 19371, 26078, + 19165, 1145, 19371, 26082, + 19165, 1145, 19371, 26084, + 19165, 1145, 19371, 26086, + 19165, 1145, 19371, 26090, + 19165, 1145, 19371, 26092, + 19165, 1145, 19371, 26094, + 19165, 1145, 19371, 26096, + 19165, 1145, 19371, 26098, + 19165, 1145, 19371, 26100, + 19165, 1145, 19371, 26102, + 19165, 1145, 19371, 26104, + 19165, 1291, 20406, + 19165, 1706, + 19165, 2034, + 19165, 2570, + 19165, 2761, 18281, 17475, 30, + 19165, 2878, + 19165, 3222, + 19165, 3264, + 19165, 3537, 20, + 19165, 3596, + 19165, 3698, + 19165, 6358, + 19165, 7037, 14559, 2760, + 19165, 7059, 20, + 19165, 7059, 1291, 23554, + 19165, 7060, + 19165, 9904, + 19165, 13151, 20, + 19165, 13783, 14911, 16531, 6, + 19165, 13783, 17835, 16531, 0, + 19165, 13783, 17835, 16531, 2, + 19165, 13783, 17835, 16531, 4, + 19165, 13783, 17835, 16531, 6, + 19165, 13783, 17835, 16531, 8, + 19165, 13783, 17835, 16531, 10, + 19165, 13783, 17835, 16531, 12, + 19165, 13783, 17835, 16531, 14, + 19165, 13783, 17835, 16531, 16, + 19165, 13783, 17835, 16531, 18, + 19165, 13783, 17835, 16531, 20, + 19165, 13783, 17835, 16531, 22, + 19165, 13783, 17835, 16531, 24, + 19165, 13783, 17835, 16531, 26, + 19165, 13783, 17835, 16531, 28, + 19165, 13783, 17835, 16531, 30, + 19165, 13783, 17835, 16531, 32, + 19165, 13783, 17835, 16531, 34, + 19165, 13783, 17835, 16531, 36, + 19165, 13783, 17835, 16531, 38, + 19165, 13783, 17835, 16531, 40, + 19165, 13783, 17835, 16531, 42, + 19165, 13783, 17835, 16531, 44, + 19165, 13783, 17835, 16531, 46, + 19165, 13783, 17835, 16531, 48, + 19165, 13783, 17835, 16531, 50, + 19165, 14004, + 19165, 14779, 14559, 2760, + 19165, 14877, 30, + 19165, 14911, 15938, + 19165, 15117, 6, + 19165, 15146, + 19165, 16338, + 19165, 17037, 19791, 14890, + 19165, 17095, 17086, + 19165, 17224, + 19165, 18137, 19791, 14890, + 19165, 18529, 528, + 19165, 18529, 896, + 19165, 19032, + 19165, 19574, + 19165, 20193, 156, + 19165, 20193, 614, + 19165, 20193, 8132, + 19165, 20256, + 19165, 23001, 14559, 3536, + 19172, + 19175, 19986, + 19180, + 19205, 23721, 20858, + 19205, 25763, 20858, + 19205, 25813, 20858, + 19205, 26163, 20858, + 19209, 21406, + 19218, + 19219, 9787, 21608, + 19221, 10575, 2906, + 19221, 13069, 2760, + 19221, 13069, 3240, + 19221, 13069, 3536, + 19221, 13069, 7036, + 19221, 13069, 7058, + 19221, 13069, 9358, + 19221, 13069, 11824, + 19221, 13069, 13150, + 19221, 13069, 14778, + 19221, 13069, 15116, + 19221, 16531, 426, + 19221, 16531, 828, + 19221, 16531, 930, + 19221, 16531, 1052, + 19221, 16531, 1376, + 19221, 16531, 1606, + 19221, 16531, 2036, + 19221, 16531, 2058, + 19221, 16531, 2518, + 19221, 16531, 2848, + 19221, 16531, 3070, + 19221, 16531, 3902, + 19221, 16531, 6632, + 19221, 16531, 7802, + 19221, 16531, 7926, + 19221, 16531, 9270, + 19221, 16531, 9860, + 19221, 16531, 12396, + 19221, 16531, 12618, + 19221, 16531, 13096, + 19221, 16531, 13454, + 19221, 16531, 13712, + 19221, 16531, 14452, + 19221, 16531, 14862, + 19221, 16531, 15056, + 19221, 16531, 15084, + 19221, 16531, 15088, + 19221, 16531, 15090, + 19221, 16531, 15294, + 19221, 16531, 15376, + 19221, 16531, 15918, + 19221, 16531, 16566, + 19221, 16531, 17160, + 19223, 20156, + 19226, + 19234, + 19236, + 19245, 10575, 17534, + 19245, 10575, 20436, + 19245, 15407, 10575, 16, + 19245, 15407, 10575, 40, + 19245, 16531, 0, + 19245, 16531, 16, + 19245, 16531, 40, + 19245, 16531, 108, + 19245, 16531, 150, + 19245, 16531, 248, + 19245, 16531, 272, + 19245, 16531, 358, + 19245, 16531, 394, + 19245, 16531, 426, + 19245, 16531, 466, + 19245, 16531, 548, + 19245, 16531, 598, + 19245, 16531, 614, + 19245, 16531, 648, + 19245, 16531, 738, + 19245, 16531, 778, + 19245, 16531, 2574, + 19245, 16531, 17709, 598, + 19249, 1036, + 19277, 17734, + 19279, 23701, 21557, 23211, 21022, + 19279, 23701, 22837, 21022, + 19279, 23701, 22837, 23211, 21022, + 19279, 23901, 21349, 23211, 21022, + 19279, 25919, 19381, 23211, 21022, + 19279, 25989, 22837, 21022, + 19283, 12715, 897, 10092, + 19285, 381, 611, 2036, + 19285, 381, 611, 2037, 6151, 2433, 1084, + 19285, 8809, 899, 13687, 7378, + 19285, 8809, 899, 13687, 7384, + 19285, 8809, 1119, 2420, + 19285, 8809, 1645, 14685, 7378, + 19285, 8809, 1645, 14685, 7384, + 19285, 8809, 3083, 6281, 17223, 10444, + 19285, 8809, 3489, 11954, + 19285, 8809, 3937, 2421, 15225, 10445, 426, + 19285, 8809, 6089, 10491, 259, 2421, 14650, + 19285, 8809, 6089, 10491, 3937, 2420, + 19285, 8809, 7351, 3937, 2421, 811, 7351, 15225, 426, + 19285, 8809, 7351, 3937, 2421, 811, 10159, 6043, 426, + 19285, 8809, 7351, 3937, 2421, 22075, 0, + 19285, 8809, 7351, 15224, + 19285, 8809, 9273, 12589, 2705, 4070, + 19285, 8809, 9273, 12589, 10435, 14684, + 19285, 8809, 9577, 10444, + 19285, 8809, 9577, 15224, + 19285, 8809, 9577, 15225, 10444, + 19285, 8809, 10127, 7345, 10444, + 19285, 8809, 10444, + 19285, 8809, 12569, 14684, + 19285, 8809, 12571, 10491, 259, 2421, 14650, + 19285, 8809, 12573, 3937, 2420, + 19285, 8809, 12615, 3937, 2421, 9867, 10445, 426, + 19285, 8809, 12615, 11953, 14685, 435, 8351, 1084, + 19285, 8809, 12615, 11953, 14685, 6151, 2433, 1084, + 19285, 8809, 14011, 3937, 259, 2421, 14650, + 19285, 8809, 14753, 10444, + 19285, 8809, 15225, 10444, + 19285, 8809, 16862, + 19285, 8809, 17889, 3937, 2421, 10431, 426, + 19285, 8809, 17889, 6119, 17041, 3937, 2421, 10431, 426, + 19285, 8809, 18240, + 19285, 8809, 18303, 3937, 2421, 8841, 426, + 19285, 8809, 18303, 6119, 17041, 3937, 2421, 8841, 426, + 19285, 8809, 18501, 13941, 14684, + 19285, 8809, 20853, 13941, 14684, + 19285, 8809, 21179, 15225, 12574, + 19285, 8809, 25797, 15224, + 19285, 10575, 1637, 1085, 19000, + 19285, 10575, 1637, 2403, 19000, + 19285, 10575, 2225, 3489, 1084, + 19285, 10575, 2227, 14684, + 19285, 10575, 2377, 15226, + 19285, 10575, 2705, 4071, 2513, 150, + 19285, 10575, 3249, 8272, + 19285, 10575, 3899, 15226, + 19285, 10575, 8839, 1084, + 19285, 10575, 10103, 2517, 7226, + 19285, 10575, 10103, 2517, 7348, + 19285, 10575, 10103, 2517, 10103, 6676, + 19285, 10575, 10103, 2517, 13398, + 19285, 10575, 10103, 6677, 7226, + 19285, 10575, 10103, 6677, 7348, + 19285, 10575, 10103, 6677, 10103, 2516, + 19285, 10575, 10103, 6677, 13398, + 19285, 10575, 10157, 639, 2575, 606, + 19285, 10575, 10159, 6042, + 19285, 10575, 11649, 14684, + 19285, 10575, 20163, 8839, 1084, + 19285, 13069, 2760, + 19285, 13069, 3240, + 19285, 13069, 3536, + 19285, 13069, 7036, + 19285, 13069, 7058, + 19285, 13069, 7429, 2760, + 19285, 13069, 7429, 3240, + 19285, 13069, 7429, 3536, + 19285, 13069, 7429, 7036, + 19285, 13069, 7429, 7058, + 19285, 13069, 7429, 9358, + 19285, 13069, 7429, 11824, + 19285, 13069, 7429, 13150, + 19285, 13069, 7429, 14778, + 19285, 13069, 7429, 15116, + 19285, 13069, 9358, + 19285, 13069, 11824, + 19285, 13069, 13150, + 19285, 13069, 14778, + 19285, 13069, 15116, + 19285, 15407, 10575, 8, + 19285, 15407, 10575, 16, + 19285, 15407, 10575, 28, + 19285, 15407, 10575, 40, + 19285, 15407, 10575, 58, + 19285, 15407, 10575, 186, + 19285, 15407, 10575, 314, + 19285, 15407, 10575, 522, + 19285, 15407, 10575, 706, + 19285, 15407, 10575, 19415, 22, + 19285, 15407, 10575, 19415, 34, + 19285, 15407, 10575, 19415, 406, + 19285, 15407, 10575, 19415, 608, + 19285, 15407, 10575, 20587, 16, + 19285, 15407, 10575, 20587, 314, + 19285, 16531, 0, + 19285, 16531, 52, + 19285, 16531, 108, + 19285, 16531, 126, + 19285, 16531, 150, + 19285, 16531, 248, + 19285, 16531, 272, + 19285, 16531, 344, + 19285, 16531, 358, + 19285, 16531, 394, + 19285, 16531, 426, + 19285, 16531, 466, + 19285, 16531, 548, + 19285, 16531, 598, + 19285, 16531, 614, + 19285, 16531, 648, + 19285, 16531, 738, + 19285, 16531, 778, + 19285, 16531, 796, + 19285, 16531, 1000, + 19285, 16531, 1116, + 19285, 16531, 1214, + 19285, 16531, 1236, + 19285, 16531, 1330, + 19285, 16531, 1588, + 19285, 16531, 2036, + 19285, 16531, 2076, + 19285, 16531, 2574, + 19285, 16531, 2624, + 19285, 16531, 2698, + 19285, 16531, 2830, + 19285, 16531, 3118, + 19285, 16531, 3212, + 19285, 16531, 3286, + 19285, 16531, 3422, + 19285, 16531, 3488, + 19285, 16531, 3502, + 19285, 16531, 4042, + 19285, 16531, 6572, + 19285, 16531, 6740, + 19285, 16531, 8154, + 19285, 16531, 11058, + 19285, 16531, 11082, + 19285, 16531, 22449, 598, + 19285, 17299, 2641, 122, + 19285, 17299, 2641, 123, 6151, 15646, + 19285, 17299, 2641, 123, 7349, 15646, + 19285, 17299, 2641, 123, 9577, 15646, + 19285, 17299, 3057, 3086, + 19285, 17299, 3057, 3087, 10127, 7344, + 19285, 17299, 6705, 122, + 19285, 17299, 9867, 548, + 19285, 17299, 14467, 7228, + 19285, 20251, 10575, 6261, 14684, + 19285, 20251, 10575, 8295, 14684, + 19285, 20777, 518, + 19285, 21919, 10575, 2225, 3489, 1084, + 19285, 21919, 10575, 8839, 1084, + 19285, 21919, 10575, 20163, 8839, 1084, + 19285, 21919, 16531, 0, + 19285, 21919, 16531, 52, + 19285, 21919, 16531, 108, + 19285, 21919, 16531, 126, + 19285, 21919, 16531, 150, + 19285, 21919, 16531, 248, + 19285, 21919, 16531, 272, + 19285, 21919, 16531, 344, + 19285, 21919, 16531, 358, + 19285, 21919, 16531, 394, + 19285, 21919, 16531, 426, + 19285, 21919, 16531, 466, + 19285, 21919, 16531, 548, + 19285, 21919, 16531, 598, + 19285, 21919, 16531, 614, + 19285, 21919, 16531, 648, + 19285, 21919, 16531, 738, + 19285, 21919, 16531, 778, + 19285, 21919, 16531, 796, + 19285, 21919, 16531, 1000, + 19285, 21919, 16531, 1116, + 19285, 21919, 16531, 1214, + 19285, 21919, 16531, 1236, + 19285, 21919, 16531, 1330, + 19285, 21919, 16531, 1588, + 19285, 21919, 16531, 2036, + 19285, 21919, 16531, 2574, + 19285, 21919, 16531, 2624, + 19285, 21919, 16531, 2698, + 19285, 21919, 16531, 2830, + 19285, 21919, 16531, 3212, + 19285, 21919, 16531, 3286, + 19285, 21919, 16531, 3422, + 19285, 21919, 16531, 3488, + 19285, 21919, 16531, 3502, + 19285, 21919, 16531, 4042, + 19285, 21919, 16531, 6572, + 19285, 21919, 16531, 6740, + 19285, 21919, 16531, 8154, + 19285, 21919, 16531, 11058, + 19285, 21919, 16531, 11082, + 19285, 21919, 16531, 22449, 598, + 19285, 21919, 16531, 22449, 738, + 19285, 21919, 16531, 22449, 778, + 19285, 23755, 10575, 10437, 7225, 11951, 14684, + 19285, 23755, 10575, 14763, 17450, + 19285, 23755, 10575, 15649, 548, + 19285, 23783, 10575, 6219, 10898, + 19285, 23783, 10575, 10399, 11948, + 19285, 23783, 10575, 13473, 6050, + 19285, 23783, 10575, 13807, 6050, + 19295, 518, + 19295, 5508, + 19295, 10575, 14334, + 19295, 10575, 17534, + 19295, 10575, 19408, + 19295, 10575, 19540, + 19295, 10575, 19586, + 19295, 10575, 23070, + 19295, 13069, 2760, + 19295, 13069, 3240, + 19295, 13069, 3536, + 19295, 13069, 7036, + 19295, 13069, 7058, + 19295, 13069, 9358, + 19295, 13069, 11824, + 19295, 13069, 13150, + 19295, 13069, 14778, + 19295, 13069, 15116, + 19295, 13432, + 19295, 15407, 10575, 8, + 19295, 15407, 10575, 16, + 19295, 15407, 10575, 28, + 19295, 15407, 10575, 40, + 19295, 15407, 10575, 58, + 19295, 15407, 10575, 72, + 19295, 15407, 10575, 96, + 19295, 15407, 10575, 314, + 19295, 15407, 10575, 706, + 19295, 15407, 10575, 14837, 8, + 19295, 15407, 10575, 14837, 28, + 19295, 15407, 10575, 19415, 22, + 19295, 15407, 10575, 19415, 34, + 19295, 15407, 10575, 19415, 406, + 19295, 15407, 10575, 19415, 608, + 19295, 16531, 0, + 19295, 16531, 8, + 19295, 16531, 16, + 19295, 16531, 28, + 19295, 16531, 40, + 19295, 16531, 58, + 19295, 16531, 72, + 19295, 16531, 96, + 19295, 16531, 108, + 19295, 16531, 126, + 19295, 16531, 150, + 19295, 16531, 248, + 19295, 16531, 272, + 19295, 16531, 314, + 19295, 16531, 344, + 19295, 16531, 358, + 19295, 16531, 394, + 19295, 16531, 426, + 19295, 16531, 466, + 19295, 16531, 548, + 19295, 16531, 598, + 19295, 16531, 614, + 19295, 16531, 648, + 19295, 16531, 706, + 19295, 16531, 714, + 19295, 16531, 778, + 19295, 16531, 1000, + 19295, 16531, 1116, + 19295, 16531, 1214, + 19295, 16531, 1236, + 19295, 16531, 1588, + 19295, 16531, 1918, + 19295, 16531, 2036, + 19295, 16531, 2574, + 19295, 16531, 2624, + 19295, 16531, 2698, + 19295, 16531, 2830, + 19295, 16531, 3212, + 19295, 16531, 3286, + 19295, 16531, 3422, + 19295, 16531, 3502, + 19295, 16531, 6572, + 19295, 16531, 11082, + 19295, 16531, 19415, 22, + 19295, 16531, 19415, 34, + 19295, 16531, 19415, 406, + 19295, 16531, 19415, 608, + 19295, 23737, 10574, + 19298, + 19306, + 19313, 16112, + 19315, 1493, 7026, + 19315, 1493, 8248, + 19315, 1493, 11504, + 19315, 1493, 13140, + 19315, 1493, 15436, + 19315, 1493, 16324, + 19315, 1493, 19282, + 19315, 1493, 20332, + 19342, + 19351, 13392, + 19355, 8331, 10574, + 19359, 22837, 15738, + 19369, 6996, + 19381, 3537, 16321, 12414, + 19381, 12414, + 19381, 12415, 661, 964, + 19381, 12415, 897, 14659, 2761, 16107, 12532, + 19381, 12415, 7065, 964, + 19381, 12415, 11513, 3445, 21556, + 19381, 12415, 11513, 3445, 22836, + 19381, 12415, 11513, 13779, 20859, 21022, + 19381, 12415, 11513, 14911, 20859, 21022, + 19381, 12415, 11513, 14911, 23211, 21022, + 19381, 12415, 11513, 16095, 17264, + 19381, 12415, 11513, 16637, 20859, 21022, + 19381, 12415, 11513, 18719, 10856, + 19381, 12415, 11513, 22495, 17264, + 19381, 12415, 11513, 23211, 21022, + 19381, 12415, 21557, 507, 21349, 12414, + 19381, 12525, 12414, + 19381, 12525, 17881, 15453, 12414, + 19381, 13473, 12414, + 19381, 13473, 22233, 12414, + 19381, 15453, 12414, + 19381, 15453, 12415, 521, 20468, + 19381, 15453, 12415, 521, 20469, 11513, 20933, 964, + 19381, 15453, 12415, 521, 20469, 11513, 22495, 964, + 19381, 15453, 12415, 7065, 964, + 19381, 15453, 12415, 7065, 965, 11513, 22495, 964, + 19381, 15453, 12415, 17579, 20859, 21022, + 19381, 15453, 16095, 12414, + 19381, 15453, 16095, 12415, 521, 20468, + 19381, 15710, + 19381, 16019, 12414, + 19381, 16095, 12414, + 19381, 16857, 15738, + 19381, 17042, + 19381, 17435, 12414, + 19381, 18253, 11513, 5989, 8281, 661, 964, + 19381, 18253, 11513, 5989, 8281, 7065, 964, + 19381, 18253, 11513, 5989, 8281, 15805, 19381, 18253, 11513, 5989, 14658, + 19381, 18253, 11513, 5989, 8281, 15805, 21349, 18253, 11513, 5989, 14658, + 19381, 18253, 11513, 5989, 14659, 661, 964, + 19381, 18253, 11513, 5989, 14659, 7065, 964, + 19381, 18253, 11513, 5989, 21556, + 19381, 18253, 11513, 5989, 22836, + 19381, 19165, 12414, + 19381, 20859, 21022, + 19381, 21775, 12414, + 19381, 22233, 12414, + 19381, 22841, 12414, + 19381, 23005, 12415, 7065, 14911, 15938, + 19381, 23005, 12415, 11513, 20859, 22182, + 19381, 23215, 12414, + 19381, 28089, 12414, + 19381, 28089, 12415, 661, 964, + 19381, 28089, 12415, 11513, 6101, 14784, + 19381, 28089, 12415, 11513, 8351, 3445, 21556, + 19381, 28089, 12415, 11513, 8351, 3445, 22836, + 19381, 28089, 12415, 11513, 11371, 13473, 14784, + 19381, 28089, 12415, 11513, 13473, 14784, + 19381, 28089, 12415, 11513, 16095, 22495, 17264, + 19381, 28089, 12415, 11513, 16637, 14784, + 19381, 28089, 12415, 11513, 16701, 14784, + 19381, 28089, 12415, 21557, 507, 21349, 28089, 12414, + 19381, 28089, 16019, 12414, + 19381, 28089, 16857, 15738, + 19388, + 19401, 7432, + 19420, + 19427, 10574, + 19430, + 19441, 6996, + 19445, 6996, + 19449, 18918, + 19451, 7432, + 19453, 3059, 13536, + 19453, 3059, 15880, + 19453, 3059, 17858, + 19453, 3059, 18192, + 19453, 3059, 19138, + 19453, 3059, 19970, + 19453, 3059, 20274, + 19453, 12525, 13536, + 19453, 12525, 15880, + 19453, 12525, 17858, + 19453, 12525, 18192, + 19453, 12525, 19138, + 19453, 12525, 19970, + 19453, 12525, 20274, + 19457, 6996, + 19511, 15725, 7057, 19082, + 19511, 22015, 20770, + 19515, 17738, + 19518, + 19519, 19566, + 19519, 21184, + 19531, 20042, + 19535, 10574, + 19552, + 19563, 6703, 10574, + 19563, 7073, 10696, + 19563, 12922, + 19563, 14911, 16531, 126, + 19563, 14911, 16531, 142, + 19563, 14911, 16531, 150, + 19563, 14911, 16531, 192, + 19563, 14911, 16531, 216, + 19563, 14911, 16531, 288, + 19563, 14911, 16531, 344, + 19563, 14911, 16531, 510, + 19563, 14911, 16531, 598, + 19563, 14911, 16531, 660, + 19563, 14911, 16531, 722, + 19563, 14911, 16531, 782, + 19563, 14911, 16531, 783, 11513, 17264, + 19563, 14911, 16531, 796, + 19563, 14911, 16531, 944, + 19563, 14911, 16531, 992, + 19563, 14911, 16531, 1116, + 19563, 14911, 16531, 1356, + 19563, 14911, 16531, 1462, + 19563, 14911, 16531, 1608, + 19563, 14911, 16531, 1878, + 19563, 14911, 16531, 2020, + 19563, 14911, 16531, 2022, + 19563, 14911, 16531, 2408, + 19563, 14911, 16531, 2644, + 19563, 14911, 16531, 2820, + 19563, 14911, 16531, 3062, + 19563, 14911, 16531, 3202, + 19563, 14911, 16531, 3212, + 19563, 14911, 16531, 3680, + 19563, 14911, 16531, 3818, + 19563, 14911, 16531, 4044, + 19563, 14911, 16531, 6278, + 19563, 14911, 16531, 7290, + 19563, 14911, 16531, 7858, + 19563, 14911, 16531, 8338, + 19563, 14911, 16531, 9892, + 19563, 14911, 16531, 11002, + 19563, 14911, 16531, 11702, + 19563, 14911, 16531, 17465, 944, + 19563, 14911, 20241, 1357, 11702, + 19563, 14911, 20241, 2409, 1356, + 19563, 14911, 20241, 2409, 1878, + 19563, 14911, 20241, 2409, 2644, + 19563, 14911, 20241, 2409, 3818, + 19563, 14911, 20241, 3681, 2644, + 19563, 16358, + 19563, 17835, 16531, 126, + 19563, 17835, 16531, 142, + 19563, 17835, 16531, 150, + 19563, 17835, 16531, 192, + 19563, 17835, 16531, 216, + 19563, 17835, 16531, 288, + 19563, 17835, 16531, 344, + 19563, 17835, 16531, 510, + 19563, 17835, 16531, 598, + 19563, 17835, 16531, 660, + 19563, 17835, 16531, 722, + 19563, 17835, 16531, 782, + 19563, 17835, 16531, 796, + 19563, 17835, 16531, 944, + 19563, 17835, 16531, 992, + 19563, 17835, 16531, 1116, + 19563, 17835, 16531, 1356, + 19563, 17835, 16531, 1462, + 19563, 17835, 16531, 1608, + 19563, 17835, 16531, 1878, + 19563, 17835, 16531, 2020, + 19563, 17835, 16531, 2022, + 19563, 17835, 16531, 2408, + 19563, 17835, 16531, 2644, + 19563, 17835, 16531, 2820, + 19563, 17835, 16531, 3062, + 19563, 17835, 16531, 3202, + 19563, 17835, 16531, 3212, + 19563, 17835, 16531, 3680, + 19563, 17835, 16531, 3818, + 19563, 17835, 16531, 4044, + 19563, 17835, 16531, 6278, + 19563, 17835, 16531, 7290, + 19563, 17835, 16531, 7858, + 19563, 17835, 16531, 8338, + 19563, 17835, 16531, 9892, + 19563, 17835, 16531, 11002, + 19563, 17835, 16531, 11702, + 19563, 19981, 8808, + 19563, 20319, 16531, 8281, 7429, 10150, + 19563, 20549, 8808, + 19563, 22172, + 19563, 23213, 8808, + 19563, 23737, 8808, + 19574, + 19575, 20406, + 19576, + 19579, 10488, + 19591, 12604, + 19593, 12552, + 19595, 5457, 5456, + 19595, 10575, 3609, 14652, + 19595, 10575, 3609, 15876, + 19595, 10575, 12520, + 19595, 10575, 12642, + 19595, 10575, 17284, + 19595, 10575, 18994, + 19595, 12617, 10578, + 19595, 12617, 18816, + 19595, 12617, 21716, + 19595, 13069, 2760, + 19595, 13069, 3240, + 19595, 13069, 3536, + 19595, 13069, 7036, + 19595, 13069, 7058, + 19595, 13069, 9358, + 19595, 13069, 11824, + 19595, 13069, 13150, + 19595, 13069, 14778, + 19595, 13069, 15116, + 19595, 14480, + 19595, 14481, 12472, + 19595, 14481, 18490, + 19595, 15407, 10575, 395, 13798, + 19595, 15407, 10575, 395, 13799, 17338, + 19595, 15407, 10575, 599, 10116, + 19595, 15407, 10575, 599, 10117, 17338, + 19595, 15407, 10575, 3608, + 19595, 15407, 10575, 3609, 10394, + 19595, 15407, 10575, 10728, + 19595, 15407, 10575, 10729, 7798, + 19595, 15407, 10575, 14520, + 19595, 15407, 10575, 14521, 17338, + 19595, 15407, 10575, 17314, + 19595, 15407, 10575, 17315, 10116, + 19595, 15407, 10575, 17315, 10117, 17338, + 19595, 15407, 10575, 17315, 17338, + 19595, 15407, 10575, 17338, + 19595, 15460, + 19595, 16531, 108, + 19595, 16531, 109, 18348, + 19595, 16531, 126, + 19595, 16531, 127, 8238, + 19595, 16531, 150, + 19595, 16531, 151, 8794, + 19595, 16531, 151, 14049, 21000, + 19595, 16531, 151, 14049, 21570, + 19595, 16531, 189, 14746, + 19595, 16531, 248, + 19595, 16531, 249, 7338, + 19595, 16531, 272, + 19595, 16531, 344, + 19595, 16531, 345, 7850, + 19595, 16531, 358, + 19595, 16531, 359, 21570, + 19595, 16531, 394, + 19595, 16531, 395, 13798, + 19595, 16531, 395, 13799, 17338, + 19595, 16531, 426, + 19595, 16531, 466, + 19595, 16531, 467, 17008, + 19595, 16531, 548, + 19595, 16531, 549, 13650, + 19595, 16531, 598, + 19595, 16531, 599, 10116, + 19595, 16531, 599, 10117, 17338, + 19595, 16531, 614, + 19595, 16531, 615, 10378, + 19595, 16531, 615, 10390, + 19595, 16531, 648, + 19595, 16531, 649, 10874, + 19595, 16531, 649, 13780, + 19595, 16531, 649, 14049, 21570, + 19595, 16531, 719, 14746, + 19595, 16531, 738, + 19595, 16531, 778, + 19595, 16531, 1989, 14746, + 19595, 16531, 2574, + 19595, 16531, 2698, + 19595, 16531, 4025, 14746, + 19595, 16531, 8079, 14746, + 19595, 16531, 11147, 14746, + 19595, 16531, 12344, + 19595, 16531, 12345, 17338, + 19595, 16531, 13154, + 19595, 16531, 13586, + 19595, 16531, 13587, 17338, + 19595, 16531, 14422, + 19595, 16531, 14423, 17338, + 19595, 16531, 15274, + 19595, 16531, 15275, 17338, + 19595, 16531, 15690, + 19595, 16531, 15753, 14746, + 19595, 16531, 17709, 7902, + 19595, 16864, + 19595, 16865, 18490, + 19595, 18655, 17299, 6538, + 19595, 18655, 17299, 6539, 7238, + 19595, 18655, 17299, 6539, 17284, + 19595, 18655, 17299, 6626, + 19595, 18655, 17299, 6666, + 19595, 18655, 17299, 6690, + 19595, 18655, 17299, 6720, + 19595, 18655, 17299, 13000, + 19595, 18655, 17299, 13006, + 19595, 18655, 17299, 13058, + 19595, 18655, 17299, 21127, 7334, + 19595, 18655, 17299, 21127, 12504, + 19595, 18655, 17299, 21127, 13162, + 19595, 18655, 17299, 21127, 15072, + 19595, 18655, 17299, 21127, 16428, + 19595, 18655, 17299, 21127, 16429, 11513, 18324, + 19595, 18655, 17299, 21127, 16430, + 19595, 18655, 17299, 21127, 16431, 11513, 18324, + 19595, 18655, 17299, 21127, 18324, + 19595, 18655, 17299, 21551, 9783, 9824, + 19595, 18655, 17299, 21551, 9783, 9886, + 19595, 18655, 17299, 21551, 9783, 9926, + 19595, 18655, 17299, 21551, 15949, 9894, + 19595, 18655, 17299, 21551, 15949, 9900, + 19595, 18655, 17299, 22833, 9783, 1194, + 19595, 18655, 17299, 22833, 9783, 1298, + 19595, 18655, 17299, 22833, 15949, 3376, + 19595, 18655, 17299, 22833, 15949, 3516, + 19595, 20163, 12617, 10578, + 19595, 20163, 12617, 18816, + 19595, 20434, + 19597, 11513, 3921, 10574, + 19597, 11513, 6879, 10574, + 19597, 11513, 14567, 10574, + 19597, 11513, 16067, 10574, + 19598, + 19611, 1036, + 19623, 6208, + 19624, + 19628, + 19629, 10848, + 19631, 13259, 16531, 12, + 19631, 13259, 16531, 14, + 19631, 13259, 16531, 20, + 19631, 13259, 16531, 30, + 19631, 13259, 16531, 38, + 19631, 16531, 0, + 19631, 16531, 2, + 19631, 16531, 4, + 19631, 16531, 6, + 19631, 16531, 8, + 19631, 16531, 10, + 19631, 16531, 12, + 19631, 16531, 14, + 19631, 16531, 16, + 19631, 16531, 18, + 19631, 16531, 20, + 19631, 16531, 22, + 19631, 16531, 24, + 19631, 16531, 26, + 19631, 16531, 28, + 19631, 16531, 29, 11513, 1291, 12318, + 19631, 16531, 30, + 19631, 16531, 32, + 19631, 16531, 34, + 19631, 16531, 36, + 19631, 16531, 38, + 19631, 16531, 40, + 19631, 16531, 42, + 19631, 16531, 46, + 19631, 16531, 50, + 19631, 16531, 70, + 19631, 16531, 72, + 19631, 16531, 80, + 19631, 16531, 82, + 19631, 16531, 96, + 19631, 16531, 122, + 19631, 16531, 134, + 19631, 16531, 186, + 19631, 16531, 192, + 19631, 16531, 194, + 19631, 16531, 204, + 19631, 16531, 212, + 19631, 16531, 256, + 19631, 16531, 260, + 19631, 16531, 264, + 19631, 16531, 268, + 19631, 16531, 312, + 19631, 16531, 320, + 19631, 16531, 330, + 19631, 16531, 336, + 19631, 16531, 348, + 19631, 16531, 384, + 19631, 16531, 400, + 19631, 16531, 474, + 19631, 16531, 484, + 19631, 16531, 504, + 19631, 16531, 518, + 19631, 16531, 522, + 19631, 16531, 534, + 19631, 16531, 622, + 19631, 16531, 800, + 19631, 16531, 802, + 19631, 16531, 808, + 19631, 16531, 898, + 19631, 16531, 902, + 19631, 16531, 1394, + 19631, 16531, 1396, + 19631, 16531, 1882, + 19631, 16531, 2578, + 19631, 16531, 2762, + 19631, 16531, 2764, + 19631, 16531, 3616, + 19631, 16531, 5470, + 19631, 16531, 5546, + 19631, 16531, 7810, + 19638, + 19641, 1393, 507, 19056, + 19641, 15407, 10575, 8, + 19641, 15407, 10575, 16, + 19641, 15407, 10575, 28, + 19641, 15407, 10575, 40, + 19641, 15407, 10575, 66, + 19641, 16531, 0, + 19641, 16531, 108, + 19641, 16531, 126, + 19641, 16531, 150, + 19641, 16531, 248, + 19641, 16531, 272, + 19641, 16531, 344, + 19641, 16531, 358, + 19641, 16531, 394, + 19641, 16531, 426, + 19641, 16531, 466, + 19641, 16531, 548, + 19641, 16531, 598, + 19641, 16531, 614, + 19641, 16531, 648, + 19641, 16531, 714, + 19641, 16531, 778, + 19641, 16531, 2464, + 19641, 16531, 2574, + 19641, 16531, 2656, + 19641, 16531, 2698, + 19641, 16531, 9302, + 19641, 16531, 9556, + 19641, 18796, + 19643, 23786, + 19644, + 19645, 11513, 14929, 15440, + 19646, + 19654, + 19656, + 19659, 21939, 0, + 19659, 21939, 4, + 19659, 21939, 8, + 19659, 21939, 10, + 19659, 21939, 16, + 19659, 21939, 20, + 19659, 21939, 22, + 19659, 21939, 24, + 19659, 21939, 26, + 19659, 21939, 28, + 19659, 21939, 30, + 19659, 21939, 32, + 19659, 21939, 34, + 19659, 21939, 36, + 19659, 21939, 38, + 19659, 21939, 48, + 19659, 21939, 58, + 19659, 21939, 72, + 19659, 21939, 82, + 19659, 21939, 104, + 19659, 21939, 126, + 19659, 21939, 132, + 19659, 21939, 136, + 19659, 21939, 142, + 19659, 21939, 204, + 19659, 21939, 228, + 19659, 21939, 230, + 19659, 21939, 234, + 19659, 21939, 240, + 19659, 21939, 282, + 19659, 21939, 314, + 19659, 21939, 322, + 19659, 21939, 358, + 19659, 21939, 362, + 19659, 21939, 366, + 19659, 21939, 374, + 19659, 21939, 384, + 19659, 21939, 394, + 19659, 21939, 398, + 19659, 21939, 400, + 19659, 21939, 402, + 19659, 21939, 412, + 19659, 21939, 426, + 19659, 21939, 434, + 19659, 21939, 438, + 19659, 21939, 440, + 19659, 21939, 446, + 19659, 21939, 466, + 19659, 21939, 470, + 19659, 21939, 474, + 19659, 21939, 476, + 19659, 21939, 478, + 19659, 21939, 486, + 19659, 21939, 520, + 19659, 21939, 522, + 19659, 21939, 542, + 19659, 21939, 548, + 19659, 21939, 554, + 19659, 21939, 562, + 19659, 21939, 566, + 19659, 21939, 582, + 19659, 21939, 586, + 19659, 21939, 590, + 19659, 21939, 598, + 19659, 21939, 600, + 19659, 21939, 604, + 19659, 21939, 606, + 19659, 21939, 614, + 19659, 21939, 618, + 19659, 21939, 622, + 19659, 21939, 624, + 19659, 21939, 628, + 19659, 21939, 642, + 19659, 21939, 648, + 19659, 21939, 652, + 19659, 21939, 654, + 19659, 21939, 656, + 19659, 21939, 660, + 19659, 21939, 738, + 19659, 21939, 744, + 19659, 21939, 750, + 19659, 21939, 754, + 19659, 21939, 778, + 19659, 21939, 780, + 19659, 21939, 782, + 19659, 21939, 786, + 19659, 21939, 822, + 19659, 21939, 840, + 19659, 21939, 1076, + 19659, 21939, 1121, 10574, + 19659, 21939, 1130, + 19659, 21939, 1150, + 19659, 21939, 1172, + 19659, 21939, 1174, + 19659, 21939, 1176, + 19659, 21939, 1178, + 19659, 21939, 1440, + 19659, 21939, 1470, + 19659, 21939, 1488, + 19659, 21939, 1982, + 19659, 21939, 2014, + 19659, 21939, 2056, + 19659, 21939, 2100, + 19659, 21939, 2156, + 19659, 21939, 2160, + 19659, 21939, 2162, + 19659, 21939, 2166, + 19659, 21939, 2190, + 19659, 21939, 2222, + 19659, 21939, 2248, + 19659, 21939, 2252, + 19659, 21939, 2254, + 19659, 21939, 2262, + 19659, 21939, 2290, + 19659, 21939, 2338, + 19659, 21939, 2340, + 19659, 21939, 2342, + 19659, 21939, 2344, + 19659, 21939, 2360, + 19659, 21939, 2384, + 19659, 21939, 2434, + 19659, 21939, 2456, + 19659, 21939, 2492, + 19659, 21939, 2494, + 19659, 21939, 2496, + 19659, 21939, 2498, + 19659, 21939, 2512, + 19659, 21939, 2534, + 19659, 21939, 2574, + 19659, 21939, 2580, + 19659, 21939, 2582, + 19659, 21939, 2596, + 19659, 21939, 2628, + 19659, 21939, 2636, + 19659, 21939, 2648, + 19659, 21939, 2688, + 19659, 21939, 2690, + 19659, 21939, 2692, + 19659, 21939, 2694, + 19659, 21939, 2788, + 19659, 21939, 2810, + 19659, 21939, 2844, + 19659, 21939, 2864, + 19659, 21939, 2872, + 19659, 21939, 2908, + 19659, 21939, 2910, + 19659, 21939, 2912, + 19659, 21939, 2914, + 19659, 21939, 2924, + 19659, 21939, 2928, + 19659, 21939, 2956, + 19659, 21939, 2968, + 19659, 21939, 3028, + 19659, 21939, 3054, + 19659, 21939, 3078, + 19659, 21939, 3110, + 19659, 21939, 3150, + 19659, 21939, 3154, + 19659, 21939, 3156, + 19659, 21939, 3172, + 19659, 21939, 3198, + 19659, 21939, 3212, + 19659, 21939, 3214, + 19659, 21939, 3216, + 19659, 21939, 3218, + 19659, 21939, 3232, + 19659, 21939, 3258, + 19659, 21939, 3274, + 19659, 21939, 3276, + 19659, 21939, 3278, + 19659, 21939, 3280, + 19659, 21939, 3282, + 19659, 21939, 3324, + 19659, 21939, 3326, + 19659, 21939, 3330, + 19659, 21939, 3332, + 19659, 21939, 3364, + 19659, 21939, 3402, + 19659, 21939, 3422, + 19659, 21939, 3424, + 19659, 21939, 3426, + 19659, 21939, 3428, + 19659, 21939, 3438, + 19659, 21939, 3470, + 19659, 21939, 3502, + 19659, 21939, 3504, + 19659, 21939, 3506, + 19659, 21939, 3508, + 19659, 21939, 3510, + 19659, 21939, 3530, + 19659, 21939, 3532, + 19659, 21939, 3534, + 19659, 21939, 3536, + 19659, 21939, 3540, + 19659, 21939, 3542, + 19659, 21939, 3544, + 19659, 21939, 3546, + 19659, 21939, 3736, + 19659, 21939, 3754, + 19659, 21939, 3772, + 19659, 21939, 3782, + 19659, 21939, 3870, + 19659, 21939, 3910, + 19659, 21939, 3940, + 19659, 21939, 3954, + 19659, 21939, 3966, + 19659, 21939, 3994, + 19659, 21939, 3996, + 19659, 21939, 3998, + 19659, 21939, 4000, + 19659, 21939, 6204, + 19659, 21939, 6382, + 19659, 21939, 6384, + 19659, 21939, 6386, + 19659, 21939, 6994, + 19659, 21939, 7073, 10696, + 19659, 21939, 7088, + 19659, 21939, 7968, + 19659, 21939, 8192, + 19659, 21939, 8194, + 19659, 21939, 8198, + 19659, 21939, 8200, + 19659, 21939, 8232, + 19659, 21939, 8292, + 19659, 21939, 8298, + 19659, 21939, 8300, + 19659, 21939, 8374, + 19659, 21939, 8376, + 19659, 21939, 8378, + 19659, 21939, 8792, + 19659, 21939, 9022, + 19659, 21939, 9026, + 19659, 21939, 9028, + 19659, 21939, 9132, + 19659, 21939, 9258, + 19659, 21939, 9262, + 19659, 21939, 9298, + 19659, 21939, 9308, + 19659, 21939, 9414, + 19659, 21939, 9416, + 19659, 21939, 9418, + 19659, 21939, 9538, + 19659, 21939, 9540, + 19659, 21939, 9542, + 19659, 21939, 9812, + 19659, 21939, 9936, + 19659, 21939, 9940, + 19659, 21939, 9942, + 19659, 21939, 9944, + 19659, 21939, 9964, + 19659, 21939, 10082, + 19659, 21939, 10252, + 19659, 21939, 10254, + 19659, 21939, 10256, + 19659, 21939, 10258, + 19659, 21939, 10372, + 19659, 21939, 10442, + 19659, 21939, 10456, + 19659, 21939, 10474, + 19659, 21939, 10492, + 19659, 21939, 10504, + 19659, 21939, 10530, + 19659, 21939, 10532, + 19659, 21939, 10534, + 19659, 21939, 10536, + 19659, 21939, 10742, + 19659, 21939, 10746, + 19659, 21939, 10748, + 19659, 21939, 10842, + 19659, 21939, 10922, + 19659, 21939, 10948, + 19659, 21939, 10958, + 19659, 21939, 10962, + 19659, 21939, 10964, + 19659, 21939, 11008, + 19659, 21939, 11010, + 19659, 21939, 11012, + 19659, 21939, 11014, + 19659, 21939, 11082, + 19659, 21939, 11084, + 19659, 21939, 11086, + 19659, 21939, 11088, + 19659, 21939, 11130, + 19659, 21939, 11132, + 19659, 21939, 11134, + 19659, 21939, 11628, + 19659, 21939, 11768, + 19659, 21939, 11770, + 19659, 21939, 11772, + 19659, 21939, 13259, 3473, 7429, 10150, + 19659, 21939, 13259, 6701, 10850, + 19659, 21939, 13259, 9904, + 19659, 21939, 13259, 10150, + 19659, 21939, 13259, 12320, + 19659, 21939, 13259, 13416, + 19659, 21939, 13259, 14659, 7429, 10150, + 19659, 21939, 13259, 14837, 22495, 17264, + 19659, 21939, 13259, 14911, 10150, + 19659, 21939, 13259, 15827, 7429, 10150, + 19659, 21939, 13259, 16095, 12320, + 19659, 21939, 13259, 16095, 14837, 20933, 19206, + 19659, 21939, 13259, 16661, 1290, + 19659, 21939, 13259, 17007, 1290, + 19659, 21939, 14116, + 19659, 21939, 14246, + 19659, 21939, 14248, + 19659, 21939, 14250, + 19659, 21939, 14854, + 19659, 21939, 14856, + 19659, 21939, 14858, + 19659, 21939, 14860, + 19659, 21939, 15124, + 19659, 21939, 15162, + 19659, 21939, 15164, + 19659, 21939, 15228, + 19659, 21939, 15232, + 19659, 21939, 15234, + 19659, 21939, 15795, 6625, 22, + 19659, 21939, 15795, 6625, 34, + 19659, 21939, 16358, + 19659, 21939, 16635, 22, + 19659, 21939, 16635, 34, + 19659, 21939, 16699, 3424, + 19659, 21939, 16699, 3426, + 19659, 21939, 16699, 10948, + 19659, 21939, 17001, 600, + 19659, 21939, 17001, 3152, + 19659, 21939, 17079, 24, + 19659, 21939, 17079, 272, + 19659, 21939, 17079, 276, + 19659, 21939, 17079, 280, + 19659, 21939, 17079, 288, + 19659, 21939, 17079, 348, + 19659, 21939, 17079, 352, + 19659, 21939, 17079, 654, + 19659, 21939, 17079, 782, + 19659, 21939, 17079, 1784, + 19659, 21939, 17079, 1966, + 19659, 21939, 17079, 3212, + 19659, 21939, 17079, 3214, + 19659, 21939, 17079, 3216, + 19659, 21939, 17079, 3218, + 19659, 21939, 17079, 10492, + 19659, 21939, 17079, 10532, + 19659, 21939, 17595, 44, + 19659, 21939, 17595, 522, + 19659, 21939, 17595, 1150, + 19659, 21939, 17595, 2100, + 19659, 21939, 17595, 2290, + 19659, 21939, 17595, 2456, + 19659, 21939, 17595, 2636, + 19659, 21939, 17595, 2864, + 19659, 21939, 17595, 3258, + 19659, 21939, 17595, 3470, + 19659, 21939, 17595, 3954, + 19659, 21939, 17595, 9936, + 19659, 21939, 17659, 2, + 19659, 21939, 17839, 14, + 19659, 21939, 17839, 16, + 19659, 21939, 17839, 30, + 19659, 21939, 17839, 50, + 19659, 21939, 17839, 160, + 19659, 21939, 17839, 186, + 19659, 21939, 17839, 248, + 19659, 21939, 17839, 252, + 19659, 21939, 17839, 258, + 19659, 21939, 17839, 262, + 19659, 21939, 17839, 264, + 19659, 21939, 17839, 280, + 19659, 21939, 17839, 344, + 19659, 21939, 17839, 346, + 19659, 21939, 17839, 348, + 19659, 21939, 17839, 350, + 19659, 21939, 17839, 352, + 19659, 21939, 17839, 368, + 19659, 21939, 17839, 394, + 19659, 21939, 17839, 398, + 19659, 21939, 17839, 402, + 19659, 21939, 17839, 412, + 19659, 21939, 17839, 416, + 19659, 21939, 17839, 426, + 19659, 21939, 17839, 434, + 19659, 21939, 17839, 440, + 19659, 21939, 17839, 446, + 19659, 21939, 17839, 454, + 19659, 21939, 17839, 466, + 19659, 21939, 17839, 470, + 19659, 21939, 17839, 474, + 19659, 21939, 17839, 478, + 19659, 21939, 17839, 486, + 19659, 21939, 17839, 490, + 19659, 21939, 17839, 548, + 19659, 21939, 17839, 554, + 19659, 21939, 17839, 562, + 19659, 21939, 17839, 566, + 19659, 21939, 17839, 572, + 19659, 21939, 17839, 598, + 19659, 21939, 17839, 600, + 19659, 21939, 17839, 604, + 19659, 21939, 17839, 606, + 19659, 21939, 17839, 610, + 19659, 21939, 17839, 614, + 19659, 21939, 17839, 618, + 19659, 21939, 17839, 622, + 19659, 21939, 17839, 624, + 19659, 21939, 17839, 628, + 19659, 21939, 17839, 638, + 19659, 21939, 17839, 738, + 19659, 21939, 17839, 744, + 19659, 21939, 17839, 750, + 19659, 21939, 17839, 754, + 19659, 21939, 17839, 756, + 19659, 21939, 17839, 778, + 19659, 21939, 17839, 780, + 19659, 21939, 17839, 782, + 19659, 21939, 17839, 786, + 19659, 21939, 17839, 790, + 19659, 21939, 17839, 796, + 19659, 21939, 17839, 798, + 19659, 21939, 17839, 802, + 19659, 21939, 17839, 804, + 19659, 21939, 17839, 806, + 19659, 21939, 17839, 1116, + 19659, 21939, 17839, 1118, + 19659, 21939, 17839, 1120, + 19659, 21939, 17839, 1122, + 19659, 21939, 17839, 1124, + 19659, 21939, 17839, 1224, + 19659, 21939, 17839, 1266, + 19659, 21939, 17839, 1268, + 19659, 21939, 17839, 1270, + 19659, 21939, 17839, 1272, + 19659, 21939, 17839, 1274, + 19659, 21939, 17839, 1330, + 19659, 21939, 17839, 1332, + 19659, 21939, 17839, 1334, + 19659, 21939, 17839, 1336, + 19659, 21939, 17839, 1338, + 19659, 21939, 17839, 1526, + 19659, 21939, 17839, 1564, + 19659, 21939, 17839, 1588, + 19659, 21939, 17839, 1590, + 19659, 21939, 17839, 1592, + 19659, 21939, 17839, 1594, + 19659, 21939, 17839, 1596, + 19659, 21939, 17839, 1660, + 19659, 21939, 17839, 1666, + 19659, 21939, 17839, 1708, + 19659, 21939, 17839, 1808, + 19659, 21939, 17839, 1810, + 19659, 21939, 17839, 1812, + 19659, 21939, 17839, 1814, + 19659, 21939, 17839, 1816, + 19659, 21939, 17839, 1910, + 19659, 21939, 17839, 1934, + 19659, 21939, 17839, 1936, + 19659, 21939, 17839, 1938, + 19659, 21939, 17839, 1940, + 19659, 21939, 17839, 1942, + 19659, 21939, 17839, 1970, + 19659, 21939, 17839, 2036, + 19659, 21939, 17839, 2038, + 19659, 21939, 17839, 2040, + 19659, 21939, 17839, 2042, + 19659, 21939, 17839, 2044, + 19659, 21939, 17839, 2076, + 19659, 21939, 17839, 2078, + 19659, 21939, 17839, 2080, + 19659, 21939, 17839, 2082, + 19659, 21939, 17839, 2084, + 19659, 21939, 17839, 2230, + 19659, 21939, 17839, 2248, + 19659, 21939, 17839, 2250, + 19659, 21939, 17839, 2252, + 19659, 21939, 17839, 2254, + 19659, 21939, 17839, 2256, + 19659, 21939, 17839, 2404, + 19659, 21939, 17839, 2558, + 19659, 21939, 17839, 2818, + 19659, 21939, 17839, 3060, + 19659, 21939, 17839, 3200, + 19659, 21939, 17839, 3212, + 19659, 21939, 17839, 3214, + 19659, 21939, 17839, 3216, + 19659, 21939, 17839, 3218, + 19659, 21939, 17839, 3220, + 19659, 21939, 17839, 3422, + 19659, 21939, 17839, 3424, + 19659, 21939, 17839, 3426, + 19659, 21939, 17839, 3428, + 19659, 21939, 17839, 3430, + 19659, 21939, 17839, 3454, + 19659, 21939, 17839, 3456, + 19659, 21939, 17839, 3458, + 19659, 21939, 17839, 3460, + 19659, 21939, 17839, 3462, + 19659, 21939, 17839, 3488, + 19659, 21939, 17839, 3490, + 19659, 21939, 17839, 3492, + 19659, 21939, 17839, 3494, + 19659, 21939, 17839, 3496, + 19659, 21939, 17839, 3502, + 19659, 21939, 17839, 3504, + 19659, 21939, 17839, 3508, + 19659, 21939, 17839, 3510, + 19659, 21939, 17839, 3512, + 19659, 21939, 17839, 3758, + 19659, 21939, 17839, 3916, + 19659, 21939, 17839, 4034, + 19659, 21939, 17839, 6276, + 19659, 21939, 17839, 6625, 1564, + 19659, 21939, 17839, 6678, + 19659, 21939, 17839, 6738, + 19659, 21939, 17839, 7296, + 19659, 21939, 17839, 7710, + 19659, 21939, 17839, 7870, + 19659, 21939, 17839, 8064, + 19659, 21939, 17839, 8118, + 19659, 21939, 17839, 8296, + 19659, 21939, 17839, 10458, + 19659, 21939, 17839, 10938, + 19659, 21939, 17839, 11006, + 19659, 21939, 17839, 11008, + 19659, 21939, 17839, 11010, + 19659, 21939, 17839, 11012, + 19659, 21939, 17839, 11014, + 19659, 21939, 17839, 11016, + 19659, 21939, 17839, 11056, + 19659, 21939, 17839, 11078, + 19659, 21939, 17839, 11092, + 19659, 21939, 17839, 11094, + 19659, 21939, 17839, 11096, + 19659, 21939, 17839, 11098, + 19659, 21939, 17839, 11100, + 19659, 21939, 17839, 15160, + 19659, 21939, 17839, 15236, + 19659, 21939, 17839, 16031, 36, + 19659, 21939, 17839, 18303, 50, + 19659, 21939, 18091, 44, + 19659, 21939, 18213, 10696, + 19659, 21939, 18663, 3170, + 19659, 21939, 18663, 3246, + 19659, 21939, 18663, 3736, + 19659, 21939, 18663, 3782, + 19659, 21939, 18663, 6382, + 19659, 21939, 18663, 8192, + 19659, 21939, 18663, 9022, + 19659, 21939, 18663, 9538, + 19659, 21939, 18663, 10402, + 19659, 21939, 18663, 10598, + 19659, 21939, 18663, 10640, + 19659, 21939, 18663, 10698, + 19659, 21939, 18663, 10742, + 19659, 21939, 18663, 11130, + 19659, 21939, 18663, 11768, + 19659, 21939, 18731, 14, + 19659, 21939, 18731, 272, + 19659, 21939, 18731, 276, + 19659, 21939, 18731, 280, + 19659, 21939, 18731, 288, + 19659, 21939, 18731, 1678, + 19659, 21939, 18731, 1734, + 19659, 21939, 18731, 1784, + 19659, 21939, 18733, 14, + 19659, 21939, 18753, 4, + 19659, 21939, 18753, 20, + 19659, 21939, 18753, 24, + 19659, 21939, 18753, 26, + 19659, 21939, 18753, 30, + 19659, 21939, 18753, 36, + 19659, 21939, 18753, 38, + 19659, 21939, 18753, 622, + 19659, 21939, 18753, 2692, + 19659, 21939, 18753, 2694, + 19659, 21939, 18753, 9540, + 19659, 21939, 18753, 9542, + 19659, 21939, 19269, 654, + 19659, 21939, 19269, 3422, + 19659, 21939, 19269, 3424, + 19659, 21939, 19269, 3426, + 19659, 21939, 19269, 3428, + 19659, 21939, 19269, 10922, + 19659, 21939, 19269, 10948, + 19659, 21939, 19269, 10958, + 19659, 21939, 19433, 44, + 19659, 21939, 20351, 272, + 19659, 21939, 20351, 280, + 19659, 21939, 20351, 288, + 19659, 21939, 20351, 1678, + 19659, 21939, 20351, 1734, + 19659, 21939, 20351, 1784, + 19659, 21939, 20351, 10506, + 19659, 21939, 20351, 10508, + 19659, 21939, 20351, 10510, + 19659, 21939, 20351, 14838, + 19659, 21939, 20351, 14840, + 19659, 21939, 20351, 14842, + 19659, 21939, 21067, 0, + 19659, 21939, 21067, 8, + 19659, 21939, 21067, 16, + 19659, 21939, 21067, 28, + 19659, 21939, 21067, 36, + 19659, 21939, 21067, 44, + 19659, 21939, 21067, 358, + 19659, 21939, 21067, 362, + 19659, 21939, 21067, 366, + 19659, 21939, 21067, 374, + 19659, 21939, 21067, 466, + 19659, 21939, 21067, 470, + 19659, 21939, 21067, 478, + 19659, 21939, 21067, 486, + 19659, 21939, 21067, 738, + 19659, 21939, 21067, 744, + 19659, 21939, 21067, 750, + 19659, 21939, 21067, 754, + 19659, 21939, 22125, 22, + 19659, 21939, 22125, 24, + 19659, 21939, 22125, 30, + 19659, 21939, 22125, 34, + 19659, 21939, 22125, 48, + 19659, 21939, 22125, 394, + 19659, 21939, 22125, 398, + 19659, 21939, 22125, 412, + 19659, 21939, 22125, 598, + 19659, 21939, 22125, 600, + 19659, 21939, 22125, 604, + 19659, 21939, 22125, 606, + 19659, 21939, 22125, 738, + 19659, 21939, 22125, 744, + 19659, 21939, 22125, 750, + 19659, 21939, 22125, 754, + 19659, 21939, 22125, 1172, + 19659, 21939, 22125, 1174, + 19659, 21939, 22125, 1176, + 19659, 21939, 22125, 1178, + 19659, 21939, 22125, 2156, + 19659, 21939, 22125, 2160, + 19659, 21939, 22125, 2162, + 19659, 21939, 22125, 2166, + 19659, 21939, 22125, 2190, + 19659, 21939, 22125, 2290, + 19659, 21939, 22125, 2338, + 19659, 21939, 22125, 2340, + 19659, 21939, 22125, 2342, + 19659, 21939, 22125, 2344, + 19659, 21939, 22125, 2492, + 19659, 21939, 22125, 2494, + 19659, 21939, 22125, 2496, + 19659, 21939, 22125, 2498, + 19659, 21939, 22125, 2688, + 19659, 21939, 22125, 2690, + 19659, 21939, 22125, 2908, + 19659, 21939, 22125, 2910, + 19659, 21939, 22125, 2912, + 19659, 21939, 22125, 2914, + 19659, 21939, 22125, 3324, + 19659, 21939, 22125, 3326, + 19659, 21939, 22125, 3330, + 19659, 21939, 22125, 3332, + 19659, 21939, 22125, 3530, + 19659, 21939, 22125, 3532, + 19659, 21939, 22125, 3534, + 19659, 21939, 22125, 3536, + 19659, 21939, 22125, 3736, + 19659, 21939, 22125, 3772, + 19659, 21939, 22125, 3782, + 19659, 21939, 22125, 3994, + 19659, 21939, 22125, 3996, + 19659, 21939, 22125, 3998, + 19659, 21939, 22125, 4000, + 19659, 21939, 22125, 6382, + 19659, 21939, 22125, 6384, + 19659, 21939, 22125, 6386, + 19659, 21939, 22125, 7088, + 19659, 21939, 22125, 8192, + 19659, 21939, 22125, 8198, + 19659, 21939, 22125, 8200, + 19659, 21939, 22125, 8374, + 19659, 21939, 22125, 8376, + 19659, 21939, 22125, 8378, + 19659, 21939, 22125, 9022, + 19659, 21939, 22125, 9026, + 19659, 21939, 22125, 9028, + 19659, 21939, 22125, 9538, + 19659, 21939, 22125, 9936, + 19659, 21939, 22125, 9940, + 19659, 21939, 22125, 9942, + 19659, 21939, 22125, 10252, + 19659, 21939, 22125, 10530, + 19659, 21939, 22125, 10532, + 19659, 21939, 22125, 10534, + 19659, 21939, 22125, 10536, + 19659, 21939, 22125, 10742, + 19659, 21939, 22125, 10746, + 19659, 21939, 22125, 10748, + 19659, 21939, 22125, 11130, + 19659, 21939, 22125, 11132, + 19659, 21939, 22125, 11134, + 19659, 21939, 22125, 11768, + 19659, 21939, 22125, 11770, + 19659, 21939, 22125, 11772, + 19659, 21939, 22125, 14854, + 19659, 21939, 22125, 14856, + 19659, 21939, 22125, 14858, + 19659, 21939, 22125, 15124, + 19659, 21939, 22193, 24, + 19659, 21939, 22193, 36, + 19659, 21939, 22205, 48, + 19659, 21939, 22589, 626, + 19659, 21939, 23027, 654, + 19659, 21939, 23027, 3422, + 19659, 21939, 23027, 3424, + 19659, 21939, 23027, 3426, + 19659, 21939, 23027, 3428, + 19659, 21939, 23027, 10962, + 19659, 21939, 23027, 10966, + 19659, 21939, 23027, 10968, + 19659, 21939, 23027, 13259, 654, + 19659, 21939, 23027, 15124, + 19659, 21939, 23027, 15126, + 19659, 21939, 23027, 15128, + 19659, 21939, 23027, 15130, + 19659, 21939, 24137, 1990, + 19659, 21939, 24137, 2020, + 19659, 21939, 24137, 2054, + 19659, 21939, 24137, 2092, + 19661, 13536, + 19673, 21582, + 19679, 14911, 16531, 0, + 19679, 14911, 16531, 8, + 19679, 14911, 16531, 16, + 19679, 14911, 16531, 28, + 19679, 14911, 16531, 36, + 19679, 14911, 16531, 40, + 19679, 14911, 16531, 42, + 19679, 14911, 16531, 150, + 19679, 14911, 16531, 156, + 19679, 14911, 16531, 160, + 19679, 14911, 16531, 168, + 19679, 14911, 16531, 170, + 19679, 14911, 16531, 172, + 19679, 14911, 16531, 248, + 19679, 14911, 16531, 252, + 19679, 14911, 16531, 258, + 19679, 14911, 16531, 262, + 19679, 14911, 16531, 264, + 19679, 14911, 16531, 266, + 19679, 14911, 16531, 272, + 19679, 14911, 16531, 276, + 19679, 14911, 16531, 280, + 19679, 14911, 16531, 288, + 19679, 14911, 16531, 292, + 19679, 14911, 16531, 294, + 19679, 14911, 16531, 358, + 19679, 14911, 16531, 394, + 19679, 14911, 16531, 398, + 19679, 14911, 16531, 402, + 19679, 14911, 16531, 412, + 19679, 14911, 16531, 416, + 19679, 14911, 16531, 418, + 19679, 14911, 16531, 426, + 19679, 14911, 16531, 434, + 19679, 14911, 16531, 440, + 19679, 14911, 16531, 446, + 19679, 14911, 16531, 454, + 19679, 14911, 16531, 456, + 19679, 14911, 16531, 466, + 19679, 14911, 16531, 470, + 19679, 14911, 16531, 478, + 19679, 14911, 16531, 486, + 19679, 14911, 16531, 490, + 19679, 14911, 16531, 492, + 19679, 14911, 16531, 614, + 19679, 14911, 16531, 618, + 19679, 14911, 16531, 624, + 19679, 14911, 16531, 628, + 19679, 14911, 16531, 638, + 19679, 14911, 16531, 640, + 19679, 14911, 16531, 648, + 19679, 14911, 16531, 652, + 19679, 14911, 16531, 656, + 19679, 14911, 16531, 738, + 19679, 14911, 16531, 744, + 19679, 14911, 16531, 750, + 19679, 14911, 16531, 754, + 19679, 14911, 16531, 756, + 19679, 14911, 16531, 758, + 19679, 14911, 16531, 778, + 19679, 14911, 16531, 780, + 19679, 14911, 16531, 782, + 19679, 14911, 16531, 786, + 19679, 14911, 16531, 790, + 19679, 14911, 16531, 792, + 19679, 14911, 16531, 1266, + 19679, 14911, 16531, 1768, + 19679, 14911, 16531, 2518, + 19679, 14911, 16531, 2976, + 19679, 14911, 16531, 2978, + 19679, 14911, 16531, 2982, + 19679, 14911, 16531, 2986, + 19679, 14911, 16531, 2994, + 19679, 14911, 16531, 2996, + 19679, 14911, 16531, 3454, + 19679, 14911, 16531, 3456, + 19679, 14911, 16531, 3458, + 19679, 14911, 16531, 3460, + 19679, 14911, 16531, 3462, + 19679, 14911, 16531, 3464, + 19679, 14911, 16531, 3488, + 19679, 14911, 16531, 3490, + 19679, 14911, 16531, 3492, + 19679, 14911, 16531, 3494, + 19679, 14911, 16531, 3496, + 19679, 14911, 16531, 3498, + 19679, 16531, 0, + 19679, 16531, 8, + 19679, 16531, 16, + 19679, 16531, 28, + 19679, 16531, 36, + 19679, 16531, 40, + 19679, 16531, 42, + 19679, 16531, 150, + 19679, 16531, 156, + 19679, 16531, 160, + 19679, 16531, 168, + 19679, 16531, 170, + 19679, 16531, 172, + 19679, 16531, 248, + 19679, 16531, 252, + 19679, 16531, 258, + 19679, 16531, 262, + 19679, 16531, 264, + 19679, 16531, 266, + 19679, 16531, 272, + 19679, 16531, 276, + 19679, 16531, 280, + 19679, 16531, 288, + 19679, 16531, 292, + 19679, 16531, 294, + 19679, 16531, 358, + 19679, 16531, 394, + 19679, 16531, 398, + 19679, 16531, 402, + 19679, 16531, 412, + 19679, 16531, 416, + 19679, 16531, 418, + 19679, 16531, 426, + 19679, 16531, 434, + 19679, 16531, 440, + 19679, 16531, 446, + 19679, 16531, 454, + 19679, 16531, 456, + 19679, 16531, 466, + 19679, 16531, 470, + 19679, 16531, 478, + 19679, 16531, 486, + 19679, 16531, 490, + 19679, 16531, 492, + 19679, 16531, 614, + 19679, 16531, 618, + 19679, 16531, 624, + 19679, 16531, 628, + 19679, 16531, 638, + 19679, 16531, 640, + 19679, 16531, 648, + 19679, 16531, 652, + 19679, 16531, 656, + 19679, 16531, 738, + 19679, 16531, 744, + 19679, 16531, 750, + 19679, 16531, 754, + 19679, 16531, 756, + 19679, 16531, 758, + 19679, 16531, 778, + 19679, 16531, 780, + 19679, 16531, 782, + 19679, 16531, 786, + 19679, 16531, 790, + 19679, 16531, 792, + 19679, 16531, 1266, + 19679, 16531, 1768, + 19679, 16531, 2518, + 19679, 16531, 2976, + 19679, 16531, 2978, + 19679, 16531, 2982, + 19679, 16531, 2986, + 19679, 16531, 2994, + 19679, 16531, 2996, + 19679, 16531, 3454, + 19679, 16531, 3456, + 19679, 16531, 3458, + 19679, 16531, 3460, + 19679, 16531, 3462, + 19679, 16531, 3464, + 19679, 16531, 3488, + 19679, 16531, 3490, + 19679, 16531, 3492, + 19679, 16531, 3494, + 19679, 16531, 3496, + 19679, 16531, 3498, + 19680, + 19682, + 19685, 19742, + 19686, + 19703, 13459, 10574, + 19711, 6055, 9002, + 19711, 18210, + 19713, 13392, + 19719, 5978, + 19723, 6996, + 19727, 93, 16642, + 19727, 93, 16761, 20758, + 19727, 93, 16761, 20759, 529, 13177, 660, + 19727, 11513, 8351, 22495, 17264, + 19727, 11513, 18778, + 19727, 11513, 20933, 965, 95, 1393, 507, 22495, 17264, + 19731, 17298, + 19733, 3105, 10905, 13069, 2760, + 19733, 3105, 10905, 13069, 3240, + 19733, 3105, 10905, 13069, 3536, + 19733, 3105, 10905, 13069, 7036, + 19733, 3105, 10905, 13069, 7058, + 19733, 3105, 10905, 13069, 9358, + 19733, 3105, 10905, 13069, 13150, + 19733, 3105, 10905, 13069, 14778, + 19733, 3105, 10905, 13069, 15116, + 19733, 3105, 11259, 13069, 2760, + 19733, 3105, 11259, 13069, 3240, + 19733, 3105, 11259, 13069, 3536, + 19733, 3105, 11259, 13069, 7036, + 19733, 3105, 11259, 13069, 7058, + 19733, 3105, 11259, 13069, 9358, + 19733, 3105, 11259, 13069, 13150, + 19733, 3105, 11259, 13069, 14778, + 19733, 3105, 11259, 13069, 15116, + 19739, 8980, + 19743, 13774, + 19747, 10574, + 19748, + 19753, 10574, + 19753, 19998, + 19759, 14911, 16531, 0, + 19759, 14911, 16531, 1, 11513, 12554, + 19759, 14911, 16531, 1, 11513, 21188, + 19759, 14911, 16531, 8, + 19759, 14911, 16531, 9, 11513, 21188, + 19759, 14911, 16531, 16, + 19759, 14911, 16531, 17, 11513, 13416, + 19759, 14911, 16531, 17, 11513, 16586, + 19759, 14911, 16531, 17, 11513, 21188, + 19759, 14911, 16531, 28, + 19759, 14911, 16531, 29, 11513, 21188, + 19759, 14911, 16531, 40, + 19759, 14911, 16531, 41, 11513, 16095, 12320, + 19759, 14911, 16531, 41, 11513, 16586, + 19759, 14911, 16531, 41, 11513, 21188, + 19759, 14911, 16531, 112, + 19759, 14911, 16531, 156, + 19759, 14911, 16531, 188, + 19759, 14911, 16531, 200, + 19759, 14911, 16531, 201, 11513, 7658, + 19759, 14911, 16531, 201, 11513, 10856, + 19759, 14911, 16531, 201, 11513, 16661, 7658, + 19759, 14911, 16531, 201, 11513, 21186, + 19759, 14911, 16531, 202, + 19759, 14911, 16531, 203, 11513, 10856, + 19759, 14911, 16531, 204, + 19759, 14911, 16531, 205, 11513, 7658, + 19759, 14911, 16531, 205, 11513, 8281, 7658, + 19759, 14911, 16531, 205, 11513, 10856, + 19759, 14911, 16531, 205, 11513, 16661, 7658, + 19759, 14911, 16531, 205, 11513, 21186, + 19759, 14911, 16531, 212, + 19759, 14911, 16531, 213, 11513, 10984, + 19759, 14911, 16531, 214, + 19759, 14911, 16531, 215, 11513, 21186, + 19759, 14911, 16531, 272, + 19759, 14911, 16531, 273, 11513, 7658, + 19759, 14911, 16531, 273, 11513, 17264, + 19759, 14911, 16531, 273, 11513, 21186, + 19759, 14911, 16531, 306, + 19759, 14911, 16531, 307, 11513, 12554, + 19759, 14911, 16531, 307, 11513, 13416, + 19759, 14911, 16531, 324, + 19759, 14911, 16531, 346, + 19759, 14911, 16531, 358, + 19759, 14911, 16531, 359, 11513, 7658, + 19759, 14911, 16531, 359, 11513, 17264, + 19759, 14911, 16531, 359, 11513, 20933, 17264, + 19759, 14911, 16531, 359, 11513, 21186, + 19759, 14911, 16531, 532, + 19759, 14911, 16531, 554, + 19759, 14911, 16531, 555, 11513, 16661, 7658, + 19759, 14911, 16531, 555, 11513, 21186, + 19759, 14911, 16531, 582, + 19759, 14911, 16531, 652, + 19759, 14911, 16531, 653, 11513, 16661, 7658, + 19759, 14911, 16531, 653, 11513, 21186, + 19759, 14911, 16531, 690, + 19759, 14911, 16531, 718, + 19759, 14911, 16531, 744, + 19759, 14911, 16531, 778, + 19759, 14911, 16531, 782, + 19759, 14911, 16531, 784, + 19759, 14911, 16531, 790, + 19759, 14911, 16531, 798, + 19759, 14911, 16531, 799, 11513, 21186, + 19759, 14911, 16531, 799, 11513, 21188, + 19759, 14911, 16531, 1015, 3988, + 19759, 14911, 16531, 1118, + 19759, 14911, 16531, 1119, 11513, 20933, 17264, + 19759, 14911, 16531, 1119, 11513, 21186, + 19759, 14911, 16531, 1119, 11513, 21188, + 19759, 14911, 16531, 1264, + 19759, 14911, 16531, 1324, + 19759, 14911, 16531, 1332, + 19759, 14911, 16531, 1590, + 19759, 14911, 16531, 1591, 11513, 16661, 7658, + 19759, 14911, 16531, 1591, 11513, 17264, + 19759, 14911, 16531, 1591, 11513, 17265, 897, 7658, + 19759, 14911, 16531, 1591, 11513, 17504, + 19759, 14911, 16531, 1591, 11513, 21186, + 19759, 14911, 16531, 1618, + 19759, 14911, 16531, 1810, + 19759, 14911, 16531, 2074, + 19759, 14911, 16531, 2122, + 19759, 14911, 16531, 2248, + 19759, 14911, 16531, 2276, + 19759, 14911, 16531, 2610, + 19759, 14911, 16531, 2882, + 19759, 14911, 16531, 3074, + 19759, 14911, 16531, 3212, + 19759, 14911, 16531, 3452, + 19759, 14911, 16531, 3490, + 19759, 14911, 16531, 3532, + 19759, 14911, 16531, 3876, + 19759, 14911, 16531, 3902, + 19759, 14911, 16531, 4044, + 19759, 14911, 16531, 4045, 11513, 12554, + 19759, 14911, 16531, 4045, 11513, 21186, + 19759, 14911, 16531, 4045, 11513, 21188, + 19759, 14911, 16531, 6242, + 19759, 14911, 16531, 6552, + 19759, 14911, 16531, 6742, + 19759, 14911, 16531, 6746, + 19759, 14911, 16531, 6752, + 19759, 14911, 16531, 7034, + 19759, 14911, 16531, 7437, 10574, + 19759, 14911, 16531, 7818, + 19759, 14911, 16531, 8135, 156, + 19759, 14911, 16531, 8135, 1264, + 19759, 14911, 16531, 8135, 2276, + 19759, 14911, 16531, 8135, 2610, + 19759, 14911, 16531, 8135, 3242, + 19759, 14911, 16531, 8135, 3452, + 19759, 14911, 16531, 8135, 4068, + 19759, 14911, 16531, 8135, 6744, + 19759, 14911, 16531, 10470, + 19759, 14911, 16531, 10471, 11513, 21186, + 19759, 14911, 16531, 10532, + 19759, 14911, 16531, 10629, 156, + 19759, 14911, 16531, 10629, 200, + 19759, 14911, 16531, 10629, 202, + 19759, 14911, 16531, 10629, 10574, + 19759, 14911, 16531, 10863, 652, + 19759, 14911, 16531, 10863, 3902, + 19759, 14911, 16531, 10863, 7437, 10574, + 19759, 14911, 16531, 10878, + 19759, 14911, 16531, 11060, + 19759, 14911, 16531, 11068, + 19759, 14911, 16531, 11074, + 19759, 14911, 16531, 11503, 214, + 19759, 14911, 16531, 11680, + 19759, 14911, 16531, 11681, 11513, 5967, 3924, + 19759, 14911, 16531, 11681, 11513, 21188, + 19759, 14911, 16531, 11872, + 19759, 14911, 16531, 12357, 358, + 19759, 14911, 16531, 12561, 14428, + 19759, 14911, 16531, 13084, + 19759, 14911, 16531, 13112, + 19759, 14911, 16531, 13120, + 19759, 14911, 16531, 13728, + 19759, 14911, 16531, 14428, + 19759, 14911, 16531, 14429, 11513, 15156, + 19759, 14911, 16531, 14677, 14428, + 19759, 14911, 16531, 14756, + 19759, 14911, 16531, 14757, 11513, 21188, + 19759, 14911, 16531, 14800, + 19759, 14911, 16531, 14837, 16, + 19759, 14911, 16531, 14837, 17, 11513, 10856, + 19759, 14911, 16531, 14837, 40, + 19759, 14911, 16531, 15787, 28, + 19759, 14911, 16531, 15787, 29, 11513, 21188, + 19759, 14911, 16531, 15949, 16563, 3988, + 19759, 14911, 16531, 16095, 28, + 19759, 14911, 16531, 16095, 21601, 28, + 19759, 14911, 16531, 16563, 3988, + 19759, 14911, 16531, 16701, 28, + 19759, 14911, 16531, 17620, + 19759, 14911, 16531, 17747, 358, + 19759, 14911, 16531, 17781, 3988, + 19759, 14911, 16531, 17931, 28, + 19759, 14911, 16531, 18318, + 19759, 14911, 16531, 18319, 11513, 16095, 13417, 15678, + 19759, 14911, 16531, 18681, 3924, + 19759, 14911, 16531, 19019, 718, + 19759, 14911, 16531, 20165, 0, + 19759, 14911, 16531, 20165, 8, + 19759, 14911, 16531, 20165, 1015, 3988, + 19759, 14911, 16531, 20165, 3902, + 19759, 14911, 16531, 20165, 15949, 16563, 3988, + 19759, 14911, 16531, 20165, 16563, 3988, + 19759, 14911, 16531, 20432, + 19759, 14911, 16531, 20587, 790, + 19759, 14911, 16531, 20587, 798, + 19759, 14911, 16531, 20587, 1332, + 19759, 14911, 16531, 20587, 3490, + 19759, 14911, 16531, 20633, 10574, + 19759, 14911, 16531, 20729, 40, + 19759, 14911, 16531, 20729, 41, 11513, 17264, + 19759, 14911, 16531, 20985, 272, + 19759, 14911, 16531, 20985, 1118, + 19759, 14911, 16531, 20985, 1119, 11513, 21186, + 19759, 14911, 16531, 20985, 1332, + 19759, 14911, 16531, 21059, 28, + 19759, 14911, 16531, 21601, 28, + 19759, 14911, 16531, 21603, 690, + 19759, 14911, 16531, 22085, 306, + 19759, 14911, 16531, 22087, 690, + 19759, 14911, 16531, 22519, 1118, + 19759, 14911, 16531, 23307, 156, + 19759, 14911, 16531, 24157, 652, + 19759, 14911, 16531, 36353, 16, + 19759, 14911, 20241, 1, 306, + 19759, 14911, 20241, 205, 1590, + 19759, 14911, 20241, 653, 3490, + 19759, 16420, + 19759, 16531, 14911, 17835, 200, + 19759, 16531, 20432, + 19759, 16531, 23347, 28, + 19759, 17835, 16531, 0, + 19759, 17835, 16531, 1, 11513, 12554, + 19759, 17835, 16531, 1, 11513, 21188, + 19759, 17835, 16531, 8, + 19759, 17835, 16531, 9, 11513, 21188, + 19759, 17835, 16531, 16, + 19759, 17835, 16531, 17, 11513, 13416, + 19759, 17835, 16531, 17, 11513, 16586, + 19759, 17835, 16531, 17, 11513, 21188, + 19759, 17835, 16531, 28, + 19759, 17835, 16531, 29, 11513, 21188, + 19759, 17835, 16531, 40, + 19759, 17835, 16531, 41, 11513, 16095, 12320, + 19759, 17835, 16531, 41, 11513, 16586, + 19759, 17835, 16531, 41, 11513, 21188, + 19759, 17835, 16531, 112, + 19759, 17835, 16531, 156, + 19759, 17835, 16531, 188, + 19759, 17835, 16531, 200, + 19759, 17835, 16531, 201, 11513, 7658, + 19759, 17835, 16531, 201, 11513, 10856, + 19759, 17835, 16531, 201, 11513, 16661, 7658, + 19759, 17835, 16531, 201, 11513, 21186, + 19759, 17835, 16531, 202, + 19759, 17835, 16531, 203, 11513, 10856, + 19759, 17835, 16531, 204, + 19759, 17835, 16531, 205, 11513, 7658, + 19759, 17835, 16531, 205, 11513, 8281, 7658, + 19759, 17835, 16531, 205, 11513, 10856, + 19759, 17835, 16531, 205, 11513, 16661, 7658, + 19759, 17835, 16531, 205, 11513, 21186, + 19759, 17835, 16531, 212, + 19759, 17835, 16531, 213, 11513, 10984, + 19759, 17835, 16531, 214, + 19759, 17835, 16531, 215, 11513, 21186, + 19759, 17835, 16531, 272, + 19759, 17835, 16531, 273, 11513, 7658, + 19759, 17835, 16531, 273, 11513, 17264, + 19759, 17835, 16531, 273, 11513, 21186, + 19759, 17835, 16531, 306, + 19759, 17835, 16531, 307, 11513, 12554, + 19759, 17835, 16531, 307, 11513, 13416, + 19759, 17835, 16531, 324, + 19759, 17835, 16531, 346, + 19759, 17835, 16531, 358, + 19759, 17835, 16531, 359, 11513, 7658, + 19759, 17835, 16531, 359, 11513, 17264, + 19759, 17835, 16531, 359, 11513, 20933, 17264, + 19759, 17835, 16531, 359, 11513, 21186, + 19759, 17835, 16531, 532, + 19759, 17835, 16531, 554, + 19759, 17835, 16531, 555, 11513, 16661, 7658, + 19759, 17835, 16531, 555, 11513, 21186, + 19759, 17835, 16531, 582, + 19759, 17835, 16531, 652, + 19759, 17835, 16531, 653, 11513, 16661, 7658, + 19759, 17835, 16531, 653, 11513, 21186, + 19759, 17835, 16531, 690, + 19759, 17835, 16531, 718, + 19759, 17835, 16531, 744, + 19759, 17835, 16531, 778, + 19759, 17835, 16531, 782, + 19759, 17835, 16531, 784, + 19759, 17835, 16531, 790, + 19759, 17835, 16531, 798, + 19759, 17835, 16531, 799, 11513, 21186, + 19759, 17835, 16531, 799, 11513, 21188, + 19759, 17835, 16531, 1015, 3988, + 19759, 17835, 16531, 1118, + 19759, 17835, 16531, 1119, 11513, 20933, 17264, + 19759, 17835, 16531, 1119, 11513, 21186, + 19759, 17835, 16531, 1119, 11513, 21188, + 19759, 17835, 16531, 1264, + 19759, 17835, 16531, 1324, + 19759, 17835, 16531, 1332, + 19759, 17835, 16531, 1590, + 19759, 17835, 16531, 1591, 11513, 16661, 7658, + 19759, 17835, 16531, 1591, 11513, 17264, + 19759, 17835, 16531, 1591, 11513, 17265, 897, 7658, + 19759, 17835, 16531, 1591, 11513, 17504, + 19759, 17835, 16531, 1591, 11513, 21186, + 19759, 17835, 16531, 1618, + 19759, 17835, 16531, 1810, + 19759, 17835, 16531, 2074, + 19759, 17835, 16531, 2122, + 19759, 17835, 16531, 2248, + 19759, 17835, 16531, 2276, + 19759, 17835, 16531, 2610, + 19759, 17835, 16531, 2882, + 19759, 17835, 16531, 3074, + 19759, 17835, 16531, 3212, + 19759, 17835, 16531, 3452, + 19759, 17835, 16531, 3490, + 19759, 17835, 16531, 3532, + 19759, 17835, 16531, 3876, + 19759, 17835, 16531, 3902, + 19759, 17835, 16531, 4044, + 19759, 17835, 16531, 4045, 11513, 12554, + 19759, 17835, 16531, 4045, 11513, 21186, + 19759, 17835, 16531, 4045, 11513, 21188, + 19759, 17835, 16531, 6242, + 19759, 17835, 16531, 6552, + 19759, 17835, 16531, 6742, + 19759, 17835, 16531, 6746, + 19759, 17835, 16531, 6752, + 19759, 17835, 16531, 7034, + 19759, 17835, 16531, 7437, 10574, + 19759, 17835, 16531, 7818, + 19759, 17835, 16531, 8135, 156, + 19759, 17835, 16531, 8135, 1264, + 19759, 17835, 16531, 8135, 2276, + 19759, 17835, 16531, 8135, 2610, + 19759, 17835, 16531, 8135, 3242, + 19759, 17835, 16531, 8135, 3452, + 19759, 17835, 16531, 8135, 4068, + 19759, 17835, 16531, 8135, 6744, + 19759, 17835, 16531, 10470, + 19759, 17835, 16531, 10471, 11513, 21186, + 19759, 17835, 16531, 10532, + 19759, 17835, 16531, 10629, 156, + 19759, 17835, 16531, 10629, 200, + 19759, 17835, 16531, 10629, 202, + 19759, 17835, 16531, 10629, 10574, + 19759, 17835, 16531, 10878, + 19759, 17835, 16531, 11060, + 19759, 17835, 16531, 11068, + 19759, 17835, 16531, 11074, + 19759, 17835, 16531, 11680, + 19759, 17835, 16531, 11681, 11513, 5967, 3924, + 19759, 17835, 16531, 11681, 11513, 21188, + 19759, 17835, 16531, 11872, + 19759, 17835, 16531, 12357, 358, + 19759, 17835, 16531, 12561, 14428, + 19759, 17835, 16531, 13084, + 19759, 17835, 16531, 13112, + 19759, 17835, 16531, 13120, + 19759, 17835, 16531, 13728, + 19759, 17835, 16531, 14428, + 19759, 17835, 16531, 14429, 11513, 15156, + 19759, 17835, 16531, 14677, 14428, + 19759, 17835, 16531, 14756, + 19759, 17835, 16531, 14757, 11513, 21188, + 19759, 17835, 16531, 14800, + 19759, 17835, 16531, 14837, 16, + 19759, 17835, 16531, 14837, 17, 11513, 10856, + 19759, 17835, 16531, 14837, 40, + 19759, 17835, 16531, 15787, 28, + 19759, 17835, 16531, 15787, 29, 11513, 21188, + 19759, 17835, 16531, 15949, 16563, 3988, + 19759, 17835, 16531, 16095, 28, + 19759, 17835, 16531, 16095, 21601, 28, + 19759, 17835, 16531, 16563, 3988, + 19759, 17835, 16531, 17620, + 19759, 17835, 16531, 17747, 358, + 19759, 17835, 16531, 17781, 3988, + 19759, 17835, 16531, 17931, 28, + 19759, 17835, 16531, 18318, + 19759, 17835, 16531, 18319, 11513, 16095, 13417, 15678, + 19759, 17835, 16531, 18681, 3924, + 19759, 17835, 16531, 20165, 0, + 19759, 17835, 16531, 20165, 8, + 19759, 17835, 16531, 20165, 1015, 3988, + 19759, 17835, 16531, 20165, 3902, + 19759, 17835, 16531, 20165, 15949, 16563, 3988, + 19759, 17835, 16531, 20165, 16563, 3988, + 19759, 17835, 16531, 20587, 790, + 19759, 17835, 16531, 20587, 798, + 19759, 17835, 16531, 20587, 1332, + 19759, 17835, 16531, 20587, 3490, + 19759, 17835, 16531, 20633, 10574, + 19759, 17835, 16531, 20729, 40, + 19759, 17835, 16531, 20729, 41, 11513, 17264, + 19759, 17835, 16531, 20985, 272, + 19759, 17835, 16531, 20985, 1118, + 19759, 17835, 16531, 20985, 1119, 11513, 21186, + 19759, 17835, 16531, 20985, 1332, + 19759, 17835, 16531, 21059, 28, + 19759, 17835, 16531, 21601, 28, + 19759, 17835, 16531, 21603, 690, + 19759, 17835, 16531, 22085, 306, + 19759, 17835, 16531, 22519, 1118, + 19759, 17835, 16531, 36353, 16, + 19759, 17835, 20241, 1, 306, + 19759, 17835, 20241, 205, 1590, + 19759, 17835, 20241, 653, 3490, + 19759, 18824, + 19759, 21927, 14911, 16531, 0, + 19759, 21927, 14911, 16531, 16, + 19759, 21927, 14911, 16531, 28, + 19759, 21927, 14911, 16531, 40, + 19759, 21927, 14911, 16531, 112, + 19759, 21927, 14911, 16531, 156, + 19759, 21927, 14911, 16531, 188, + 19759, 21927, 14911, 16531, 200, + 19759, 21927, 14911, 16531, 214, + 19759, 21927, 14911, 16531, 272, + 19759, 21927, 14911, 16531, 306, + 19759, 21927, 14911, 16531, 358, + 19759, 21927, 14911, 16531, 554, + 19759, 21927, 14911, 16531, 718, + 19759, 21927, 14911, 16531, 798, + 19759, 21927, 14911, 16531, 1118, + 19759, 21927, 14911, 16531, 1332, + 19759, 21927, 14911, 16531, 1590, + 19759, 21927, 14911, 16531, 1591, 11513, 17504, + 19759, 21927, 14911, 16531, 3212, + 19759, 21927, 14911, 16531, 3490, + 19759, 21927, 14911, 16531, 4044, + 19759, 21927, 14911, 16531, 6742, + 19759, 21927, 14911, 16531, 7437, 10574, + 19759, 21927, 14911, 16531, 11680, + 19759, 21927, 14911, 16531, 36353, 16, + 19759, 22045, 10574, + 19775, 7047, 10593, 17298, + 19779, 15208, + 19785, 13541, 19642, + 19791, 22251, 7022, + 19793, 10574, + 19809, 1088, + 19817, 10574, + 19817, 14890, + 19817, 15146, + 19818, + 19819, 11513, 10920, + 19819, 11513, 10921, 897, 18868, + 19819, 11513, 18868, + 19940, + 19943, 16149, 7658, + 19943, 16149, 7659, 11513, 1290, + 19943, 16149, 18719, 7658, + 19943, 16149, 18719, 7659, 11513, 1290, + 19947, 14559, 22837, 12414, + 19953, 6996, + 19954, + 19957, 10575, 29, 11513, 12934, + 19957, 12329, 2301, 1290, + 19957, 12329, 2301, 8320, + 19957, 12329, 2301, 8351, 13416, + 19957, 12329, 2301, 11472, + 19957, 12329, 2301, 12320, + 19957, 12329, 2301, 12414, + 19957, 12329, 2301, 13416, + 19957, 12329, 2301, 15137, 12320, + 19957, 12329, 2301, 15938, + 19957, 12329, 2301, 20932, + 19957, 12329, 2301, 20933, 17092, + 19957, 12329, 2429, 20933, 17092, + 19957, 12329, 2429, 22495, 17092, + 19957, 12329, 7521, 1290, + 19957, 12329, 7521, 8320, + 19957, 12329, 7521, 8351, 13416, + 19957, 12329, 7521, 11472, + 19957, 12329, 7521, 12320, + 19957, 12329, 7521, 13416, + 19957, 12329, 7521, 15137, 12320, + 19957, 12329, 7521, 15938, + 19957, 12329, 7521, 20932, + 19957, 12329, 7521, 20933, 17092, + 19957, 12329, 8281, 22495, 17092, + 19957, 12329, 14659, 22495, 17092, + 19957, 12329, 19583, 9, 7658, + 19957, 12329, 19583, 17, 7658, + 19957, 12329, 19583, 10856, + 19957, 12329, 19583, 17092, + 19957, 12329, 19583, 19252, + 19957, 12329, 19583, 19253, 7658, + 19957, 12329, 19583, 25815, 17092, + 19957, 15103, 16531, 20630, + 19957, 16095, 8808, + 19957, 16531, 0, + 19957, 16531, 2, + 19957, 16531, 6, + 19957, 16531, 7, 36, + 19957, 16531, 8, + 19957, 16531, 10, + 19957, 16531, 11, 26, + 19957, 16531, 12, + 19957, 16531, 13, 35, 36, + 19957, 16531, 14, + 19957, 16531, 16, + 19957, 16531, 18, + 19957, 16531, 19, 24, + 19957, 16531, 19, 25, 36, + 19957, 16531, 19, 26, + 19957, 16531, 19, 27, 36, + 19957, 16531, 19, 36, + 19957, 16531, 19, 37, 11513, 1290, + 19957, 16531, 19, 11513, 1290, + 19957, 16531, 19, 11513, 6697, 16383, 897, 12318, + 19957, 16531, 20, + 19957, 16531, 21, 24, + 19957, 16531, 21, 35, 36, + 19957, 16531, 22, + 19957, 16531, 24, + 19957, 16531, 25, 26, + 19957, 16531, 25, 27, 36, + 19957, 16531, 25, 36, + 19957, 16531, 25, 11513, 1290, + 19957, 16531, 26, + 19957, 16531, 27, 24, + 19957, 16531, 27, 25, 36, + 19957, 16531, 27, 36, + 19957, 16531, 27, 11513, 1290, + 19957, 16531, 28, + 19957, 16531, 30, + 19957, 16531, 31, 26, + 19957, 16531, 34, + 19957, 16531, 35, 36, + 19957, 16531, 36, + 19957, 16531, 37, 18, + 19957, 16531, 37, 19, 36, + 19957, 16531, 37, 20, + 19957, 16531, 37, 21, 34, + 19957, 16531, 37, 24, + 19957, 16531, 37, 26, + 19957, 16531, 37, 30, + 19957, 16531, 37, 31, 34, + 19957, 16531, 37, 36, + 19957, 16531, 37, 38, + 19957, 16531, 37, 39, 34, + 19957, 16531, 37, 11513, 1290, + 19957, 16531, 37, 11513, 1291, 12502, + 19957, 16531, 38, + 19957, 16531, 39, 35, 36, + 19957, 16531, 39, 36, + 19957, 16531, 40, + 19957, 16531, 41, 26, + 19957, 16531, 42, + 19957, 16531, 44, + 19957, 16531, 45, 34, + 19957, 16531, 46, + 19957, 16531, 158, + 19957, 16531, 186, + 19957, 16531, 218, + 19957, 16531, 284, + 19957, 16531, 306, + 19957, 16531, 368, + 19957, 16531, 400, + 19957, 16531, 498, + 19957, 16531, 534, + 19957, 16531, 538, + 19957, 16531, 602, + 19957, 16531, 654, + 19957, 16531, 684, + 19957, 16531, 686, + 19957, 16531, 738, + 19957, 16531, 748, + 19957, 16531, 750, + 19957, 16531, 754, + 19957, 16531, 774, + 19957, 16531, 780, + 19957, 16531, 912, + 19957, 16531, 2770, + 19957, 16531, 3760, + 19957, 16531, 3786, + 19957, 16531, 8351, 16, + 19957, 16531, 8351, 40, + 19957, 16531, 14079, 0, + 19957, 16531, 14079, 16, + 19957, 16531, 14079, 28, + 19957, 16531, 14079, 40, + 19957, 16531, 14837, 16, + 19957, 16531, 14903, 18, + 19957, 16531, 14903, 40, + 19957, 16531, 14903, 82, + 19957, 16531, 14903, 158, + 19957, 16531, 14903, 186, + 19957, 16531, 14903, 192, + 19957, 16531, 14903, 204, + 19957, 16531, 14903, 520, + 19957, 16531, 14903, 538, + 19957, 16531, 16889, 80, + 19957, 16531, 16889, 82, + 19957, 16531, 19415, 24, + 19957, 16531, 20595, 16, + 19957, 16531, 20595, 40, + 19957, 23555, 17875, 7073, 10696, + 19965, 22487, 1393, 17555, 21364, + 19965, 22487, 1393, 19058, + 19965, 22487, 1393, 21364, + 19965, 22487, 4128, + 19965, 22487, 4130, + 19965, 22487, 4132, + 19965, 22487, 4134, + 19965, 22487, 4136, + 19965, 22487, 4138, + 19965, 22487, 4140, + 19965, 22487, 4142, + 19965, 22487, 4144, + 19965, 22487, 4146, + 19965, 22487, 4148, + 19965, 22487, 4150, + 19965, 22487, 4152, + 19965, 22487, 4154, + 19965, 22487, 4156, + 19965, 22487, 4158, + 19965, 22487, 4160, + 19965, 22487, 4162, + 19965, 22487, 4164, + 19965, 22487, 4166, + 19965, 22487, 4168, + 19965, 22487, 4170, + 19965, 22487, 4172, + 19965, 22487, 4174, + 19965, 22487, 4176, + 19965, 22487, 4178, + 19965, 22487, 4180, + 19965, 22487, 4182, + 19965, 22487, 4184, + 19965, 22487, 4186, + 19965, 22487, 4188, + 19965, 22487, 4190, + 19965, 22487, 4192, + 19965, 22487, 4194, + 19965, 22487, 4196, + 19965, 22487, 4198, + 19965, 22487, 4200, + 19965, 22487, 4202, + 19965, 22487, 4204, + 19965, 22487, 4206, + 19965, 22487, 4208, + 19965, 22487, 4210, + 19965, 22487, 4212, + 19965, 22487, 4214, + 19965, 22487, 4216, + 19965, 22487, 4218, + 19965, 22487, 4220, + 19965, 22487, 4222, + 19965, 22487, 4224, + 19965, 22487, 4226, + 19965, 22487, 4228, + 19965, 22487, 4230, + 19965, 22487, 4232, + 19965, 22487, 4234, + 19965, 22487, 4236, + 19965, 22487, 4238, + 19965, 22487, 4240, + 19965, 22487, 4242, + 19965, 22487, 4244, + 19965, 22487, 4246, + 19965, 22487, 4248, + 19965, 22487, 4250, + 19965, 22487, 4252, + 19965, 22487, 4254, + 19965, 22487, 4256, + 19965, 22487, 4258, + 19965, 22487, 4260, + 19965, 22487, 4262, + 19965, 22487, 4264, + 19965, 22487, 4266, + 19965, 22487, 5560, + 19965, 22487, 5562, + 19965, 22487, 5564, + 19965, 22487, 5566, + 19965, 22487, 5568, + 19965, 22487, 5570, + 19965, 22487, 5572, + 19965, 22487, 5574, + 19965, 22487, 5576, + 19965, 22487, 6156, + 19965, 22487, 6158, + 19965, 22487, 6160, + 19965, 22487, 6162, + 19965, 22487, 6164, + 19965, 22487, 6166, + 19965, 22487, 6168, + 19965, 22487, 6170, + 19965, 22487, 6172, + 19965, 22487, 6174, + 19965, 22487, 6176, + 19965, 22487, 6178, + 19965, 22487, 6180, + 19965, 22487, 6182, + 19965, 22487, 6184, + 19965, 22487, 6186, + 19965, 22487, 6188, + 19965, 22487, 6190, + 19965, 22487, 6192, + 19965, 22487, 6194, + 19965, 22487, 6196, + 19965, 22487, 6198, + 19965, 22487, 6200, + 19965, 22487, 6202, + 19965, 22487, 6394, + 19965, 22487, 6396, + 19965, 22487, 6398, + 19965, 22487, 6400, + 19965, 22487, 6402, + 19965, 22487, 6404, + 19965, 22487, 6406, + 19965, 22487, 6408, + 19965, 22487, 6410, + 19965, 22487, 6412, + 19965, 22487, 6414, + 19965, 22487, 6416, + 19965, 22487, 6418, + 19965, 22487, 6420, + 19965, 22487, 6422, + 19965, 22487, 6424, + 19965, 22487, 6426, + 19965, 22487, 6428, + 19965, 22487, 6430, + 19965, 22487, 6432, + 19965, 22487, 6434, + 19965, 22487, 6436, + 19965, 22487, 6438, + 19965, 22487, 6440, + 19965, 22487, 6442, + 19965, 22487, 6444, + 19965, 22487, 6446, + 19965, 22487, 6448, + 19965, 22487, 6450, + 19965, 22487, 6452, + 19965, 22487, 6454, + 19965, 22487, 6456, + 19965, 22487, 6458, + 19965, 22487, 6460, + 19965, 22487, 6462, + 19965, 22487, 6464, + 19965, 22487, 6466, + 19965, 22487, 6468, + 19965, 22487, 6470, + 19965, 22487, 6472, + 19965, 22487, 6474, + 19965, 22487, 6476, + 19965, 22487, 6478, + 19965, 22487, 6480, + 19965, 22487, 6482, + 19965, 22487, 6484, + 19965, 22487, 6486, + 19965, 22487, 6488, + 19965, 22487, 6490, + 19965, 22487, 6492, + 19965, 22487, 6494, + 19965, 22487, 6496, + 19965, 22487, 6498, + 19965, 22487, 6500, + 19965, 22487, 6502, + 19965, 22487, 6504, + 19965, 22487, 6506, + 19965, 22487, 6508, + 19965, 22487, 6510, + 19965, 22487, 6512, + 19965, 22487, 6514, + 19965, 22487, 6516, + 19965, 22487, 6518, + 19965, 22487, 6520, + 19965, 22487, 6522, + 19965, 22487, 6524, + 19965, 22487, 6526, + 19965, 22487, 6754, + 19965, 22487, 6756, + 19965, 22487, 6758, + 19965, 22487, 6760, + 19965, 22487, 6762, + 19965, 22487, 6764, + 19965, 22487, 6766, + 19965, 22487, 6768, + 19965, 22487, 6770, + 19965, 22487, 6772, + 19965, 22487, 6774, + 19965, 22487, 6776, + 19965, 22487, 6778, + 19965, 22487, 6780, + 19965, 22487, 6782, + 19965, 22487, 6784, + 19965, 22487, 6786, + 19965, 22487, 6788, + 19965, 22487, 6790, + 19965, 22487, 6792, + 19965, 22487, 6794, + 19965, 22487, 6796, + 19965, 22487, 6798, + 19965, 22487, 6800, + 19965, 22487, 6802, + 19965, 22487, 6804, + 19965, 22487, 6806, + 19965, 22487, 6808, + 19965, 22487, 6810, + 19965, 22487, 6812, + 19965, 22487, 6814, + 19965, 22487, 6816, + 19965, 22487, 6818, + 19965, 22487, 6820, + 19965, 22487, 6822, + 19965, 22487, 6824, + 19965, 22487, 6826, + 19965, 22487, 6888, + 19965, 22487, 6890, + 19965, 22487, 6892, + 19965, 22487, 6894, + 19965, 22487, 6896, + 19965, 22487, 6898, + 19965, 22487, 6900, + 19965, 22487, 6902, + 19965, 22487, 6904, + 19965, 22487, 6906, + 19965, 22487, 6908, + 19965, 22487, 6910, + 19965, 22487, 6912, + 19965, 22487, 6914, + 19965, 22487, 6916, + 19965, 22487, 6918, + 19965, 22487, 6920, + 19965, 22487, 6922, + 19965, 22487, 6924, + 19965, 22487, 6926, + 19965, 22487, 6928, + 19965, 22487, 6930, + 19965, 22487, 6932, + 19965, 22487, 6934, + 19965, 22487, 6936, + 19965, 22487, 6938, + 19965, 22487, 6940, + 19965, 22487, 6942, + 19965, 22487, 6944, + 19965, 22487, 6946, + 19965, 22487, 6948, + 19965, 22487, 6950, + 19965, 22487, 6952, + 19965, 22487, 6954, + 19965, 22487, 6956, + 19965, 22487, 6958, + 19965, 22487, 6960, + 19965, 22487, 6962, + 19965, 22487, 6964, + 19965, 22487, 6966, + 19965, 22487, 6968, + 19965, 22487, 6970, + 19965, 22487, 6972, + 19965, 22487, 6974, + 19965, 22487, 6976, + 19965, 22487, 6978, + 19965, 22487, 6980, + 19965, 22487, 6982, + 19965, 22487, 6984, + 19965, 22487, 6986, + 19965, 22487, 6988, + 19965, 22487, 6990, + 19965, 22487, 6992, + 19965, 22487, 7073, 12528, + 19965, 22487, 7092, + 19965, 22487, 7094, + 19965, 22487, 7096, + 19965, 22487, 7098, + 19965, 22487, 7100, + 19965, 22487, 7102, + 19965, 22487, 7104, + 19965, 22487, 7106, + 19965, 22487, 7108, + 19965, 22487, 7110, + 19965, 22487, 7112, + 19965, 22487, 7114, + 19965, 22487, 7116, + 19965, 22487, 7118, + 19965, 22487, 7120, + 19965, 22487, 7122, + 19965, 22487, 7124, + 19965, 22487, 7126, + 19965, 22487, 7128, + 19965, 22487, 7130, + 19965, 22487, 7132, + 19965, 22487, 7134, + 19965, 22487, 7136, + 19965, 22487, 7138, + 19965, 22487, 7140, + 19965, 22487, 7142, + 19965, 22487, 7144, + 19965, 22487, 7146, + 19965, 22487, 7148, + 19965, 22487, 7150, + 19965, 22487, 7152, + 19965, 22487, 7154, + 19965, 22487, 7156, + 19965, 22487, 7158, + 19965, 22487, 7160, + 19965, 22487, 7162, + 19965, 22487, 7164, + 19965, 22487, 7166, + 19965, 22487, 7168, + 19965, 22487, 7170, + 19965, 22487, 7172, + 19965, 22487, 7174, + 19965, 22487, 7176, + 19965, 22487, 7178, + 19965, 22487, 7180, + 19965, 22487, 7182, + 19965, 22487, 7184, + 19965, 22487, 7186, + 19965, 22487, 7188, + 19965, 22487, 7190, + 19965, 22487, 7192, + 19965, 22487, 7194, + 19965, 22487, 7196, + 19965, 22487, 7198, + 19965, 22487, 7386, + 19965, 22487, 7388, + 19965, 22487, 7390, + 19965, 22487, 7392, + 19965, 22487, 7394, + 19965, 22487, 7396, + 19965, 22487, 7398, + 19965, 22487, 7400, + 19965, 22487, 7429, 8361, 10574, + 19965, 22487, 7429, 12528, + 19965, 22487, 7756, + 19965, 22487, 7758, + 19965, 22487, 7760, + 19965, 22487, 7762, + 19965, 22487, 7764, + 19965, 22487, 7766, + 19965, 22487, 7768, + 19965, 22487, 7770, + 19965, 22487, 7772, + 19965, 22487, 7774, + 19965, 22487, 7776, + 19965, 22487, 7778, + 19965, 22487, 7780, + 19965, 22487, 7782, + 19965, 22487, 7784, + 19965, 22487, 7930, + 19965, 22487, 7932, + 19965, 22487, 7934, + 19965, 22487, 7936, + 19965, 22487, 7938, + 19965, 22487, 7940, + 19965, 22487, 7942, + 19965, 22487, 7944, + 19965, 22487, 8216, + 19965, 22487, 8218, + 19965, 22487, 8220, + 19965, 22487, 8222, + 19965, 22487, 8224, + 19965, 22487, 8226, + 19965, 22487, 8228, + 19965, 22487, 8230, + 19965, 22487, 8361, 10574, + 19965, 22487, 8384, + 19965, 22487, 8386, + 19965, 22487, 8388, + 19965, 22487, 8390, + 19965, 22487, 8392, + 19965, 22487, 8394, + 19965, 22487, 8396, + 19965, 22487, 8398, + 19965, 22487, 8400, + 19965, 22487, 8402, + 19965, 22487, 8404, + 19965, 22487, 8406, + 19965, 22487, 8408, + 19965, 22487, 8410, + 19965, 22487, 8412, + 19965, 22487, 8414, + 19965, 22487, 8416, + 19965, 22487, 8418, + 19965, 22487, 8420, + 19965, 22487, 8422, + 19965, 22487, 8424, + 19965, 22487, 8426, + 19965, 22487, 8428, + 19965, 22487, 8430, + 19965, 22487, 8432, + 19965, 22487, 8434, + 19965, 22487, 8436, + 19965, 22487, 8438, + 19965, 22487, 8440, + 19965, 22487, 8442, + 19965, 22487, 8444, + 19965, 22487, 8446, + 19965, 22487, 8448, + 19965, 22487, 8450, + 19965, 22487, 8452, + 19965, 22487, 8454, + 19965, 22487, 8456, + 19965, 22487, 8458, + 19965, 22487, 8460, + 19965, 22487, 8462, + 19965, 22487, 8464, + 19965, 22487, 8466, + 19965, 22487, 8468, + 19965, 22487, 8470, + 19965, 22487, 9030, + 19965, 22487, 9032, + 19965, 22487, 9034, + 19965, 22487, 9036, + 19965, 22487, 9038, + 19965, 22487, 9040, + 19965, 22487, 9042, + 19965, 22487, 9044, + 19965, 22487, 9046, + 19965, 22487, 9048, + 19965, 22487, 9050, + 19965, 22487, 9052, + 19965, 22487, 9054, + 19965, 22487, 9056, + 19965, 22487, 9058, + 19965, 22487, 9060, + 19965, 22487, 9062, + 19965, 22487, 9064, + 19965, 22487, 9066, + 19965, 22487, 9068, + 19965, 22487, 9070, + 19965, 22487, 9072, + 19965, 22487, 9074, + 19965, 22487, 9076, + 19965, 22487, 9078, + 19965, 22487, 9080, + 19965, 22487, 9082, + 19965, 22487, 9084, + 19965, 22487, 9086, + 19965, 22487, 9088, + 19965, 22487, 9090, + 19965, 22487, 9092, + 19965, 22487, 9094, + 19965, 22487, 9096, + 19965, 22487, 9098, + 19965, 22487, 9100, + 19965, 22487, 9102, + 19965, 22487, 9104, + 19965, 22487, 9106, + 19965, 22487, 9108, + 19965, 22487, 9110, + 19965, 22487, 9112, + 19965, 22487, 9658, + 19965, 22487, 9660, + 19965, 22487, 9662, + 19965, 22487, 9664, + 19965, 22487, 9666, + 19965, 22487, 9668, + 19965, 22487, 9670, + 19965, 22487, 9672, + 19965, 22487, 9674, + 19965, 22487, 9676, + 19965, 22487, 9678, + 19965, 22487, 9680, + 19965, 22487, 9682, + 19965, 22487, 9684, + 19965, 22487, 9686, + 19965, 22487, 9688, + 19965, 22487, 9690, + 19965, 22487, 9692, + 19965, 22487, 9694, + 19965, 22487, 9696, + 19965, 22487, 9698, + 19965, 22487, 9700, + 19965, 22487, 9702, + 19965, 22487, 9704, + 19965, 22487, 9706, + 19965, 22487, 9708, + 19965, 22487, 9710, + 19965, 22487, 9712, + 19965, 22487, 9714, + 19965, 22487, 9716, + 19965, 22487, 9718, + 19965, 22487, 9720, + 19965, 22487, 9722, + 19965, 22487, 9724, + 19965, 22487, 9726, + 19965, 22487, 9728, + 19965, 22487, 9730, + 19965, 22487, 9732, + 19965, 22487, 9734, + 19965, 22487, 9736, + 19965, 22487, 9738, + 19965, 22487, 9740, + 19965, 22487, 9742, + 19965, 22487, 9744, + 19965, 22487, 9746, + 19965, 22487, 9748, + 19965, 22487, 9750, + 19965, 22487, 9752, + 19965, 22487, 9754, + 19965, 22487, 9756, + 19965, 22487, 9758, + 19965, 22487, 9790, + 19965, 22487, 9792, + 19965, 22487, 9794, + 19965, 22487, 9796, + 19965, 22487, 9798, + 19965, 22487, 9800, + 19965, 22487, 9802, + 19965, 22487, 9804, + 19965, 22487, 9806, + 19965, 22487, 9808, + 19965, 22487, 9810, + 19965, 22487, 9948, + 19965, 22487, 9950, + 19965, 22487, 9952, + 19965, 22487, 9954, + 19965, 22487, 9956, + 19965, 22487, 9958, + 19965, 22487, 9960, + 19965, 22487, 10016, + 19965, 22487, 10018, + 19965, 22487, 10020, + 19965, 22487, 10022, + 19965, 22487, 10024, + 19965, 22487, 10026, + 19965, 22487, 10028, + 19965, 22487, 10030, + 19965, 22487, 10032, + 19965, 22487, 10034, + 19965, 22487, 10036, + 19965, 22487, 10038, + 19965, 22487, 10040, + 19965, 22487, 10042, + 19965, 22487, 10044, + 19965, 22487, 10046, + 19965, 22487, 10048, + 19965, 22487, 10050, + 19965, 22487, 10052, + 19965, 22487, 10054, + 19965, 22487, 10056, + 19965, 22487, 10058, + 19965, 22487, 10060, + 19965, 22487, 10062, + 19965, 22487, 10064, + 19965, 22487, 10066, + 19965, 22487, 10068, + 19965, 22487, 10070, + 19965, 22487, 10072, + 19965, 22487, 10262, + 19965, 22487, 10264, + 19965, 22487, 10266, + 19965, 22487, 10268, + 19965, 22487, 10270, + 19965, 22487, 10272, + 19965, 22487, 10274, + 19965, 22487, 10276, + 19965, 22487, 10278, + 19965, 22487, 10280, + 19965, 22487, 10282, + 19965, 22487, 10284, + 19965, 22487, 10286, + 19965, 22487, 10288, + 19965, 22487, 10290, + 19965, 22487, 10292, + 19965, 22487, 10294, + 19965, 22487, 10296, + 19965, 22487, 10298, + 19965, 22487, 10300, + 19965, 22487, 10302, + 19965, 22487, 10304, + 19965, 22487, 10306, + 19965, 22487, 10308, + 19965, 22487, 10310, + 19965, 22487, 10312, + 19965, 22487, 10314, + 19965, 22487, 10316, + 19965, 22487, 10318, + 19965, 22487, 10320, + 19965, 22487, 10322, + 19965, 22487, 10324, + 19965, 22487, 10326, + 19965, 22487, 10328, + 19965, 22487, 10330, + 19965, 22487, 10332, + 19965, 22487, 10334, + 19965, 22487, 10336, + 19965, 22487, 10338, + 19965, 22487, 10340, + 19965, 22487, 10342, + 19965, 22487, 10344, + 19965, 22487, 10346, + 19965, 22487, 10348, + 19965, 22487, 10350, + 19965, 22487, 10352, + 19965, 22487, 10760, + 19965, 22487, 10762, + 19965, 22487, 10764, + 19965, 22487, 10766, + 19965, 22487, 10768, + 19965, 22487, 10770, + 19965, 22487, 10772, + 19965, 22487, 10774, + 19965, 22487, 10776, + 19965, 22487, 10778, + 19965, 22487, 10780, + 19965, 22487, 10782, + 19965, 22487, 10784, + 19965, 22487, 10786, + 19965, 22487, 10788, + 19965, 22487, 10790, + 19965, 22487, 10792, + 19965, 22487, 10794, + 19965, 22487, 10796, + 19965, 22487, 10798, + 19965, 22487, 10800, + 19965, 22487, 10802, + 19965, 22487, 10804, + 19965, 22487, 10806, + 19965, 22487, 10808, + 19965, 22487, 10810, + 19965, 22487, 10812, + 19965, 22487, 10814, + 19965, 22487, 10816, + 19965, 22487, 10818, + 19965, 22487, 10820, + 19965, 22487, 10822, + 19965, 22487, 10824, + 19965, 22487, 10826, + 19965, 22487, 10828, + 19965, 22487, 10830, + 19965, 22487, 10863, 8361, 10574, + 19965, 22487, 11154, + 19965, 22487, 11156, + 19965, 22487, 11158, + 19965, 22487, 11160, + 19965, 22487, 11162, + 19965, 22487, 11164, + 19965, 22487, 11166, + 19965, 22487, 11168, + 19965, 22487, 11170, + 19965, 22487, 11172, + 19965, 22487, 11174, + 19965, 22487, 11176, + 19965, 22487, 11178, + 19965, 22487, 11180, + 19965, 22487, 11182, + 19965, 22487, 11184, + 19965, 22487, 11186, + 19965, 22487, 11188, + 19965, 22487, 11190, + 19965, 22487, 11192, + 19965, 22487, 11194, + 19965, 22487, 11196, + 19965, 22487, 11198, + 19965, 22487, 11200, + 19965, 22487, 11202, + 19965, 22487, 11204, + 19965, 22487, 11206, + 19965, 22487, 11208, + 19965, 22487, 11210, + 19965, 22487, 11212, + 19965, 22487, 11214, + 19965, 22487, 11216, + 19965, 22487, 11218, + 19965, 22487, 11220, + 19965, 22487, 11222, + 19965, 22487, 11224, + 19965, 22487, 11226, + 19965, 22487, 11228, + 19965, 22487, 11230, + 19965, 22487, 11232, + 19965, 22487, 11234, + 19965, 22487, 11236, + 19965, 22487, 11280, + 19965, 22487, 11282, + 19965, 22487, 11284, + 19965, 22487, 11286, + 19965, 22487, 11288, + 19965, 22487, 11290, + 19965, 22487, 11292, + 19965, 22487, 11294, + 19965, 22487, 11296, + 19965, 22487, 11298, + 19965, 22487, 11300, + 19965, 22487, 11302, + 19965, 22487, 11304, + 19965, 22487, 11306, + 19965, 22487, 11308, + 19965, 22487, 11310, + 19965, 22487, 11312, + 19965, 22487, 11314, + 19965, 22487, 11316, + 19965, 22487, 11318, + 19965, 22487, 11320, + 19965, 22487, 11322, + 19965, 22487, 11324, + 19965, 22487, 11326, + 19965, 22487, 11328, + 19965, 22487, 11330, + 19965, 22487, 11332, + 19965, 22487, 11334, + 19965, 22487, 11336, + 19965, 22487, 11338, + 19965, 22487, 11340, + 19965, 22487, 11342, + 19965, 22487, 11344, + 19965, 22487, 11346, + 19965, 22487, 11348, + 19965, 22487, 11350, + 19965, 22487, 11352, + 19965, 22487, 11354, + 19965, 22487, 11356, + 19965, 22487, 11358, + 19965, 22487, 11404, + 19965, 22487, 11406, + 19965, 22487, 11408, + 19965, 22487, 11410, + 19965, 22487, 11412, + 19965, 22487, 11414, + 19965, 22487, 11416, + 19965, 22487, 11418, + 19965, 22487, 11420, + 19965, 22487, 11422, + 19965, 22487, 11424, + 19965, 22487, 11426, + 19965, 22487, 11428, + 19965, 22487, 11430, + 19965, 22487, 11432, + 19965, 22487, 11434, + 19965, 22487, 11436, + 19965, 22487, 11438, + 19965, 22487, 11440, + 19965, 22487, 11442, + 19965, 22487, 11444, + 19965, 22487, 11446, + 19965, 22487, 11448, + 19965, 22487, 11450, + 19965, 22487, 11452, + 19965, 22487, 11503, 8361, 10574, + 19965, 22487, 11552, + 19965, 22487, 11554, + 19965, 22487, 11556, + 19965, 22487, 11558, + 19965, 22487, 11560, + 19965, 22487, 11562, + 19965, 22487, 11564, + 19965, 22487, 11566, + 19965, 22487, 11598, + 19965, 22487, 11600, + 19965, 22487, 11602, + 19965, 22487, 11604, + 19965, 22487, 11606, + 19965, 22487, 11608, + 19965, 22487, 11610, + 19965, 22487, 11612, + 19965, 22487, 11778, + 19965, 22487, 11780, + 19965, 22487, 11782, + 19965, 22487, 11784, + 19965, 22487, 11786, + 19965, 22487, 11788, + 19965, 22487, 11790, + 19965, 22487, 11792, + 19965, 22487, 11794, + 19965, 22487, 11796, + 19965, 22487, 11798, + 19965, 22487, 11800, + 19965, 22487, 11802, + 19965, 22487, 11804, + 19965, 22487, 11806, + 19965, 22487, 11808, + 19965, 22487, 11956, + 19965, 22487, 11958, + 19965, 22487, 11960, + 19965, 22487, 11964, + 19965, 22487, 11966, + 19965, 22487, 11972, + 19965, 22487, 11976, + 19965, 22487, 11980, + 19965, 22487, 11982, + 19965, 22487, 11984, + 19965, 22487, 12104, + 19965, 22487, 12106, + 19965, 22487, 12108, + 19965, 22487, 12110, + 19965, 22487, 12112, + 19965, 22487, 12114, + 19965, 22487, 12116, + 19965, 22487, 12118, + 19965, 22487, 12120, + 19965, 22487, 12122, + 19965, 22487, 12124, + 19965, 22487, 12126, + 19965, 22487, 12128, + 19965, 22487, 12130, + 19965, 22487, 12132, + 19965, 22487, 12134, + 19965, 22487, 12136, + 19965, 22487, 12138, + 19965, 22487, 12140, + 19965, 22487, 12142, + 19965, 22487, 12144, + 19965, 22487, 12146, + 19965, 22487, 12148, + 19965, 22487, 12150, + 19965, 22487, 12152, + 19965, 22487, 12154, + 19965, 22487, 12156, + 19965, 22487, 12158, + 19965, 22487, 12160, + 19965, 22487, 12162, + 19965, 22487, 12164, + 19965, 22487, 12166, + 19965, 22487, 12432, + 19965, 22487, 12497, 17555, 21364, + 19965, 22487, 12497, 19058, + 19965, 22487, 12497, 21364, + 19965, 22487, 12590, + 19965, 22487, 12592, + 19965, 22487, 12594, + 19965, 22487, 12596, + 19965, 22487, 12946, + 19965, 22487, 12948, + 19965, 22487, 12950, + 19965, 22487, 12952, + 19965, 22487, 12954, + 19965, 22487, 12956, + 19965, 22487, 12958, + 19965, 22487, 12960, + 19965, 22487, 12962, + 19965, 22487, 12964, + 19965, 22487, 12966, + 19965, 22487, 12968, + 19965, 22487, 12970, + 19965, 22487, 12972, + 19965, 22487, 12974, + 19965, 22487, 12976, + 19965, 22487, 12978, + 19965, 22487, 12980, + 19965, 22487, 12982, + 19965, 22487, 12984, + 19965, 22487, 12986, + 19965, 22487, 12988, + 19965, 22487, 12990, + 19965, 22487, 12992, + 19965, 22487, 12994, + 19965, 22487, 13122, + 19965, 22487, 13124, + 19965, 22487, 13126, + 19965, 22487, 13128, + 19965, 22487, 13130, + 19965, 22487, 13132, + 19965, 22487, 13134, + 19965, 22487, 13208, + 19965, 22487, 13210, + 19965, 22487, 13212, + 19965, 22487, 13214, + 19965, 22487, 13216, + 19965, 22487, 13218, + 19965, 22487, 13220, + 19965, 22487, 13222, + 19965, 22487, 13224, + 19965, 22487, 13226, + 19965, 22487, 13228, + 19965, 22487, 13230, + 19965, 22487, 13300, + 19965, 22487, 13302, + 19965, 22487, 13304, + 19965, 22487, 13306, + 19965, 22487, 13308, + 19965, 22487, 13310, + 19965, 22487, 13312, + 19965, 22487, 13314, + 19965, 22487, 13316, + 19965, 22487, 13318, + 19965, 22487, 13434, + 19965, 22487, 13568, + 19965, 22487, 13570, + 19965, 22487, 13572, + 19965, 22487, 13574, + 19965, 22487, 13750, + 19965, 22487, 13752, + 19965, 22487, 13852, + 19965, 22487, 13854, + 19965, 22487, 13856, + 19965, 22487, 13858, + 19965, 22487, 13860, + 19965, 22487, 13862, + 19965, 22487, 13864, + 19965, 22487, 13866, + 19965, 22487, 13868, + 19965, 22487, 13870, + 19965, 22487, 13872, + 19965, 22487, 13874, + 19965, 22487, 13876, + 19965, 22487, 13878, + 19965, 22487, 13880, + 19965, 22487, 13882, + 19965, 22487, 13884, + 19965, 22487, 13886, + 19965, 22487, 13888, + 19965, 22487, 13890, + 19965, 22487, 13892, + 19965, 22487, 13894, + 19965, 22487, 14056, + 19965, 22487, 14058, + 19965, 22487, 14060, + 19965, 22487, 14062, + 19965, 22487, 14064, + 19965, 22487, 14066, + 19965, 22487, 14068, + 19965, 22487, 14204, + 19965, 22487, 14206, + 19965, 22487, 14208, + 19965, 22487, 14210, + 19965, 22487, 14212, + 19965, 22487, 14214, + 19965, 22487, 14216, + 19965, 22487, 14218, + 19965, 22487, 14220, + 19965, 22487, 14222, + 19965, 22487, 14224, + 19965, 22487, 14226, + 19965, 22487, 14228, + 19965, 22487, 14230, + 19965, 22487, 14232, + 19965, 22487, 14234, + 19965, 22487, 14236, + 19965, 22487, 14238, + 19965, 22487, 14240, + 19965, 22487, 14242, + 19965, 22487, 14288, + 19965, 22487, 14290, + 19965, 22487, 14292, + 19965, 22487, 14294, + 19965, 22487, 14296, + 19965, 22487, 14298, + 19965, 22487, 14300, + 19965, 22487, 14302, + 19965, 22487, 14304, + 19965, 22487, 14306, + 19965, 22487, 14308, + 19965, 22487, 14310, + 19965, 22487, 14312, + 19965, 22487, 14314, + 19965, 22487, 14316, + 19965, 22487, 14318, + 19965, 22487, 14320, + 19965, 22487, 14322, + 19965, 22487, 14324, + 19965, 22487, 14326, + 19965, 22487, 14328, + 19965, 22487, 14330, + 19965, 22487, 14368, + 19965, 22487, 14370, + 19965, 22487, 14372, + 19965, 22487, 14374, + 19965, 22487, 14376, + 19965, 22487, 14378, + 19965, 22487, 14380, + 19965, 22487, 14382, + 19965, 22487, 14384, + 19965, 22487, 14386, + 19965, 22487, 14388, + 19965, 22487, 14390, + 19965, 22487, 14392, + 19965, 22487, 14394, + 19965, 22487, 14396, + 19965, 22487, 14398, + 19965, 22487, 14400, + 19965, 22487, 14402, + 19965, 22487, 14404, + 19965, 22487, 14406, + 19965, 22487, 14408, + 19965, 22487, 14410, + 19965, 22487, 14412, + 19965, 22487, 14414, + 19965, 22487, 14460, + 19965, 22487, 14462, + 19965, 22487, 14606, + 19965, 22487, 14608, + 19965, 22487, 14610, + 19965, 22487, 14612, + 19965, 22487, 14614, + 19965, 22487, 14704, + 19965, 22487, 14706, + 19965, 22487, 14708, + 19965, 22487, 14710, + 19965, 22487, 14712, + 19965, 22487, 14714, + 19965, 22487, 14716, + 19965, 22487, 14718, + 19965, 22487, 15028, + 19965, 22487, 15030, + 19965, 22487, 15032, + 19965, 22487, 15034, + 19965, 22487, 15036, + 19965, 22487, 15038, + 19965, 22487, 15040, + 19965, 22487, 15042, + 19965, 22487, 15262, + 19965, 22487, 15264, + 19965, 22487, 15266, + 19965, 22487, 15268, + 19965, 22487, 15270, + 19965, 22487, 15298, + 19965, 22487, 15300, + 19965, 22487, 15302, + 19965, 22487, 15304, + 19965, 22487, 15306, + 19965, 22487, 15308, + 19965, 22487, 15310, + 19965, 22487, 15312, + 19965, 22487, 15314, + 19965, 22487, 15316, + 19965, 22487, 15318, + 19965, 22487, 15320, + 19965, 22487, 15322, + 19965, 22487, 15324, + 19965, 22487, 15326, + 19965, 22487, 15328, + 19965, 22487, 15330, + 19965, 22487, 15332, + 19965, 22487, 15334, + 19965, 22487, 15336, + 19965, 22487, 15338, + 19965, 22487, 15340, + 19965, 22487, 15342, + 19965, 22487, 15344, + 19965, 22487, 15346, + 19965, 22487, 15348, + 19965, 22487, 15350, + 19965, 22487, 15352, + 19965, 22487, 15354, + 19965, 22487, 15356, + 19965, 22487, 15358, + 19965, 22487, 15360, + 19965, 22487, 15362, + 19965, 22487, 15364, + 19965, 22487, 15366, + 19965, 22487, 15368, + 19965, 22487, 15370, + 19965, 22487, 15372, + 19965, 22487, 15410, + 19965, 22487, 15412, + 19965, 22487, 15414, + 19965, 22487, 15416, + 19965, 22487, 15418, + 19965, 22487, 15420, + 19965, 22487, 15422, + 19965, 22487, 15486, + 19965, 22487, 15488, + 19965, 22487, 15490, + 19965, 22487, 15492, + 19965, 22487, 15502, + 19965, 22487, 15552, + 19965, 22487, 15554, + 19965, 22487, 15556, + 19965, 22487, 15558, + 19965, 22487, 15560, + 19965, 22487, 15562, + 19965, 22487, 15564, + 19965, 22487, 15566, + 19965, 22487, 15568, + 19965, 22487, 15570, + 19965, 22487, 15572, + 19965, 22487, 15574, + 19965, 22487, 15576, + 19965, 22487, 15578, + 19965, 22487, 15580, + 19965, 22487, 15582, + 19965, 22487, 15584, + 19965, 22487, 15586, + 19965, 22487, 15588, + 19965, 22487, 15590, + 19965, 22487, 15592, + 19965, 22487, 15594, + 19965, 22487, 15596, + 19965, 22487, 15598, + 19965, 22487, 15600, + 19965, 22487, 15658, + 19965, 22487, 15660, + 19965, 22487, 16381, 95, 3472, + 19965, 22487, 16381, 95, 3473, 1392, + 19965, 22487, 16381, 95, 3473, 14970, + 19965, 22487, 16381, 95, 15826, + 19965, 22487, 16381, 95, 15827, 1392, + 19965, 22487, 16381, 95, 15827, 14970, + 19965, 22487, 16381, 95, 16660, + 19965, 22487, 16671, 23866, + 19965, 22487, 16752, + 19965, 22487, 16754, + 19965, 22487, 16776, + 19965, 22487, 16778, + 19965, 22487, 16780, + 19965, 22487, 16782, + 19965, 22487, 18783, 16660, + 19965, 22487, 20319, 17958, + 19965, 22487, 20319, 17959, 95, 1392, + 19965, 22487, 20319, 17959, 95, 3472, + 19965, 22487, 20319, 17959, 95, 3473, 897, 1392, + 19965, 22487, 20319, 17959, 95, 3473, 1392, + 19965, 22487, 20319, 17959, 95, 3473, 14970, + 19965, 22487, 20319, 17959, 95, 3473, 14971, 897, 15827, 1392, + 19965, 22487, 20319, 17959, 95, 14970, + 19965, 22487, 20319, 17959, 95, 14971, 897, 3472, + 19965, 22487, 20319, 17959, 95, 14971, 897, 15826, + 19965, 22487, 20319, 17959, 95, 15826, + 19965, 22487, 20319, 17959, 95, 15827, 897, 1392, + 19965, 22487, 20319, 17959, 95, 15827, 1392, + 19965, 22487, 20319, 17959, 95, 15827, 14970, + 19965, 22487, 20319, 17959, 95, 15827, 14971, 897, 3473, 1392, + 19965, 22487, 20933, 16402, + 19965, 22487, 22495, 16402, + 19965, 28106, + 19965, 28108, + 19965, 28110, + 19965, 28112, + 19965, 28114, + 19965, 28116, + 19965, 28118, + 19965, 28120, + 19965, 28122, + 19965, 28124, + 19965, 28126, + 19965, 28128, + 19965, 28130, + 19965, 28132, + 19965, 28134, + 19965, 28136, + 19965, 28138, + 19965, 28140, + 19965, 28142, + 19965, 28144, + 19965, 28146, + 19965, 28148, + 19965, 28150, + 19965, 28152, + 19965, 28154, + 19965, 28156, + 19965, 28158, + 19965, 28160, + 19965, 28162, + 19965, 28164, + 19965, 28166, + 19965, 28168, + 19965, 28170, + 19965, 28172, + 19965, 28174, + 19965, 28176, + 19965, 28178, + 19965, 28180, + 19965, 28182, + 19965, 28184, + 19965, 28186, + 19965, 28188, + 19965, 28190, + 19965, 28192, + 19965, 28194, + 19965, 28196, + 19965, 28198, + 19965, 28200, + 19965, 28202, + 19965, 28204, + 19965, 28206, + 19965, 28208, + 19965, 28210, + 19965, 28212, + 19965, 28214, + 19965, 28216, + 19965, 28218, + 19965, 28220, + 19965, 28222, + 19965, 28224, + 19965, 28226, + 19965, 28228, + 19965, 28230, + 19965, 28232, + 19965, 28234, + 19965, 28236, + 19965, 28238, + 19965, 28240, + 19965, 28242, + 19965, 28244, + 19965, 28246, + 19965, 28248, + 19965, 28250, + 19965, 28252, + 19965, 28254, + 19965, 28256, + 19965, 28258, + 19965, 28260, + 19965, 28262, + 19965, 28264, + 19965, 28266, + 19965, 28268, + 19965, 28270, + 19965, 28272, + 19965, 28274, + 19965, 28276, + 19965, 28278, + 19965, 28280, + 19965, 28282, + 19965, 28284, + 19965, 28286, + 19965, 28288, + 19965, 28290, + 19965, 28292, + 19965, 28294, + 19965, 28296, + 19965, 28298, + 19965, 28300, + 19965, 28302, + 19965, 28304, + 19965, 28306, + 19965, 28308, + 19965, 28310, + 19965, 28312, + 19965, 28314, + 19965, 28316, + 19965, 28318, + 19965, 28320, + 19965, 28322, + 19965, 28324, + 19965, 28326, + 19965, 28328, + 19965, 28330, + 19965, 28332, + 19965, 28334, + 19965, 28336, + 19965, 28338, + 19965, 28340, + 19965, 28342, + 19965, 28344, + 19965, 28346, + 19965, 28348, + 19965, 28350, + 19965, 28352, + 19965, 28354, + 19965, 28356, + 19965, 28358, + 19965, 28360, + 19965, 28362, + 19965, 28364, + 19965, 28366, + 19965, 28368, + 19965, 28370, + 19965, 28372, + 19965, 28374, + 19965, 28376, + 19965, 28378, + 19965, 28380, + 19965, 28382, + 19965, 28384, + 19965, 28386, + 19965, 28388, + 19965, 28390, + 19965, 28392, + 19965, 28394, + 19965, 28396, + 19965, 28398, + 19965, 28400, + 19965, 28402, + 19965, 28404, + 19965, 28406, + 19965, 28408, + 19965, 28410, + 19965, 28412, + 19965, 28414, + 19965, 28416, + 19965, 28418, + 19965, 28420, + 19965, 28422, + 19965, 28424, + 19965, 28426, + 19965, 28428, + 19965, 28430, + 19965, 28432, + 19965, 28434, + 19965, 28436, + 19965, 28438, + 19965, 28440, + 19965, 28442, + 19965, 28444, + 19965, 28446, + 19965, 28448, + 19965, 28450, + 19965, 28452, + 19965, 28454, + 19965, 28456, + 19965, 28458, + 19965, 28460, + 19965, 28462, + 19965, 28464, + 19965, 28466, + 19965, 28468, + 19965, 28470, + 19965, 28472, + 19965, 28474, + 19965, 28476, + 19965, 28478, + 19965, 28480, + 19965, 28482, + 19965, 28484, + 19965, 28486, + 19965, 28488, + 19965, 28490, + 19965, 28492, + 19965, 28494, + 19965, 28496, + 19965, 28498, + 19965, 28500, + 19965, 28502, + 19965, 28504, + 19965, 28506, + 19965, 28508, + 19965, 28510, + 19965, 28512, + 19965, 28514, + 19965, 28516, + 19965, 28518, + 19965, 28520, + 19965, 28522, + 19965, 28524, + 19965, 28526, + 19965, 28528, + 19965, 28530, + 19965, 28532, + 19965, 28534, + 19965, 28536, + 19965, 28538, + 19965, 28540, + 19965, 28542, + 19965, 28544, + 19965, 28546, + 19965, 28548, + 19965, 28550, + 19965, 28552, + 19965, 28554, + 19965, 28556, + 19965, 28558, + 19965, 28560, + 19965, 28562, + 19965, 28564, + 19965, 28566, + 19965, 28568, + 19965, 28570, + 19965, 28572, + 19965, 28574, + 19965, 28576, + 19965, 28578, + 19965, 28580, + 19965, 28582, + 19965, 28584, + 19965, 28586, + 19965, 28588, + 19965, 28590, + 19965, 28592, + 19965, 28594, + 19965, 28596, + 19965, 28598, + 19965, 28600, + 19965, 28602, + 19965, 28604, + 19965, 28606, + 19965, 28608, + 19965, 28610, + 19965, 28612, + 19965, 28614, + 19965, 28616, + 19965, 28618, + 19965, 28620, + 19965, 28622, + 19965, 28624, + 19965, 28626, + 19965, 28628, + 19965, 28630, + 19965, 28632, + 19965, 28634, + 19965, 28636, + 19965, 28638, + 19965, 28640, + 19965, 28642, + 19965, 28644, + 19965, 28646, + 19965, 28648, + 19965, 28650, + 19965, 28652, + 19965, 28654, + 19965, 28656, + 19965, 28658, + 19965, 28660, + 19965, 28662, + 19965, 28664, + 19965, 28666, + 19965, 28668, + 19965, 28670, + 19965, 28672, + 19965, 28674, + 19965, 28676, + 19965, 28678, + 19965, 28680, + 19965, 28682, + 19965, 28684, + 19965, 28686, + 19965, 28688, + 19965, 28690, + 19965, 28692, + 19965, 28694, + 19965, 28696, + 19965, 28698, + 19965, 28700, + 19965, 28702, + 19965, 28704, + 19965, 28706, + 19965, 28708, + 19965, 28710, + 19965, 28712, + 19965, 28714, + 19965, 28716, + 19965, 28718, + 19965, 28720, + 19965, 28722, + 19965, 28724, + 19965, 28726, + 19965, 28728, + 19965, 28730, + 19965, 28732, + 19965, 28734, + 19965, 28736, + 19965, 28738, + 19965, 28740, + 19965, 28742, + 19965, 28744, + 19965, 28746, + 19965, 28748, + 19965, 28750, + 19965, 28752, + 19965, 28754, + 19965, 28756, + 19965, 28758, + 19965, 28760, + 19965, 28762, + 19965, 28764, + 19965, 28766, + 19965, 28768, + 19965, 28770, + 19965, 28772, + 19965, 28774, + 19965, 28776, + 19965, 28778, + 19965, 28780, + 19965, 28782, + 19965, 28784, + 19965, 28786, + 19965, 28788, + 19965, 28790, + 19965, 28792, + 19965, 28794, + 19965, 28796, + 19965, 28798, + 19965, 28800, + 19965, 28802, + 19965, 28804, + 19965, 28806, + 19965, 28808, + 19965, 28810, + 19965, 28812, + 19965, 28814, + 19965, 28816, + 19965, 28818, + 19965, 28820, + 19965, 28822, + 19965, 28824, + 19965, 28826, + 19965, 28828, + 19965, 28830, + 19965, 28832, + 19965, 28834, + 19965, 28836, + 19965, 28838, + 19965, 28840, + 19965, 28842, + 19965, 28844, + 19965, 28846, + 19965, 28848, + 19965, 28850, + 19965, 28852, + 19965, 28854, + 19965, 28856, + 19965, 28858, + 19965, 28860, + 19965, 28862, + 19965, 28864, + 19965, 28866, + 19965, 28868, + 19965, 28870, + 19965, 28872, + 19965, 28874, + 19965, 28876, + 19965, 28878, + 19965, 28880, + 19965, 28882, + 19965, 28884, + 19965, 28886, + 19965, 28888, + 19965, 28890, + 19965, 28892, + 19965, 28894, + 19965, 28896, + 19965, 28898, + 19965, 28900, + 19965, 28902, + 19965, 28904, + 19965, 28906, + 19965, 28908, + 19965, 28910, + 19965, 28912, + 19965, 28914, + 19965, 28916, + 19965, 28918, + 19965, 28920, + 19965, 28922, + 19965, 28924, + 19965, 28926, + 19965, 28928, + 19965, 28930, + 19965, 28932, + 19965, 28934, + 19965, 28936, + 19965, 28938, + 19965, 28940, + 19965, 28942, + 19965, 28944, + 19965, 28946, + 19965, 28948, + 19965, 28950, + 19965, 28952, + 19965, 28954, + 19965, 28956, + 19965, 28958, + 19965, 28960, + 19965, 28962, + 19965, 28964, + 19965, 28966, + 19965, 28968, + 19965, 28970, + 19965, 28972, + 19965, 28974, + 19965, 28976, + 19965, 28978, + 19965, 28980, + 19965, 28982, + 19965, 28984, + 19965, 28986, + 19965, 28988, + 19965, 28990, + 19965, 28992, + 19965, 28994, + 19965, 28996, + 19965, 28998, + 19965, 29000, + 19965, 29002, + 19965, 29004, + 19965, 29006, + 19965, 29008, + 19965, 29010, + 19965, 29012, + 19965, 29014, + 19965, 29016, + 19965, 29018, + 19965, 29020, + 19965, 29022, + 19965, 29024, + 19965, 29026, + 19965, 29028, + 19965, 29030, + 19965, 29032, + 19965, 29034, + 19965, 29036, + 19965, 29038, + 19965, 29040, + 19965, 29042, + 19965, 29044, + 19965, 29046, + 19965, 29048, + 19965, 29050, + 19965, 29052, + 19965, 29054, + 19965, 29056, + 19965, 29058, + 19965, 29060, + 19965, 29062, + 19965, 29064, + 19965, 29066, + 19965, 29068, + 19965, 29070, + 19965, 29072, + 19965, 29074, + 19965, 29076, + 19965, 29078, + 19965, 29080, + 19965, 29082, + 19965, 29084, + 19965, 29086, + 19965, 29088, + 19965, 29090, + 19965, 29092, + 19965, 29094, + 19965, 29096, + 19965, 29098, + 19965, 29100, + 19965, 29102, + 19965, 29104, + 19965, 29106, + 19965, 29108, + 19965, 29110, + 19965, 29112, + 19965, 29114, + 19965, 29116, + 19965, 29118, + 19965, 29120, + 19965, 29122, + 19965, 29124, + 19965, 29126, + 19965, 29128, + 19965, 29130, + 19965, 29132, + 19965, 29134, + 19965, 29136, + 19965, 29138, + 19965, 29140, + 19965, 29142, + 19965, 29144, + 19965, 29146, + 19965, 29148, + 19965, 29150, + 19965, 29152, + 19965, 29154, + 19965, 29156, + 19965, 29158, + 19965, 29160, + 19965, 29162, + 19965, 29164, + 19965, 29166, + 19965, 29168, + 19965, 29170, + 19965, 29172, + 19965, 29174, + 19965, 29176, + 19965, 29178, + 19965, 29180, + 19965, 29182, + 19965, 29184, + 19965, 29186, + 19965, 29188, + 19965, 29190, + 19965, 29192, + 19965, 29194, + 19965, 29196, + 19965, 29198, + 19965, 29200, + 19965, 29202, + 19965, 29204, + 19965, 29206, + 19965, 29208, + 19965, 29210, + 19965, 29212, + 19965, 29214, + 19965, 29216, + 19965, 29218, + 19965, 29220, + 19965, 29222, + 19965, 29224, + 19965, 29226, + 19965, 29228, + 19965, 29230, + 19965, 29232, + 19965, 29234, + 19965, 29236, + 19965, 29238, + 19965, 29240, + 19965, 29242, + 19965, 29244, + 19965, 29246, + 19965, 29248, + 19965, 29250, + 19965, 29252, + 19965, 29254, + 19965, 29256, + 19965, 29258, + 19965, 29260, + 19965, 29262, + 19965, 29264, + 19965, 29266, + 19965, 29268, + 19965, 29270, + 19965, 29272, + 19965, 29274, + 19965, 29276, + 19965, 29278, + 19965, 29280, + 19965, 29282, + 19965, 29284, + 19965, 29286, + 19965, 29288, + 19965, 29290, + 19965, 29292, + 19965, 29294, + 19965, 29296, + 19965, 29298, + 19965, 29300, + 19965, 29302, + 19965, 29304, + 19965, 29306, + 19965, 29308, + 19965, 29310, + 19965, 29312, + 19965, 29314, + 19965, 29316, + 19965, 29318, + 19965, 29320, + 19965, 29322, + 19965, 29324, + 19965, 29326, + 19965, 29328, + 19965, 29330, + 19965, 29332, + 19965, 29334, + 19965, 29336, + 19965, 29338, + 19965, 29340, + 19965, 29342, + 19965, 29344, + 19965, 29346, + 19965, 29348, + 19965, 29350, + 19965, 29352, + 19965, 29354, + 19965, 29356, + 19965, 29358, + 19965, 29360, + 19965, 29362, + 19965, 29364, + 19965, 29366, + 19965, 29368, + 19965, 29370, + 19965, 29372, + 19965, 29374, + 19965, 29376, + 19965, 29378, + 19965, 29380, + 19965, 29382, + 19965, 29384, + 19965, 29386, + 19965, 29388, + 19965, 29390, + 19965, 29392, + 19965, 29394, + 19965, 29396, + 19965, 29398, + 19965, 29400, + 19965, 29402, + 19965, 29404, + 19965, 29406, + 19965, 29408, + 19965, 29410, + 19965, 29412, + 19965, 29414, + 19965, 29416, + 19965, 29418, + 19965, 29420, + 19965, 29422, + 19965, 29424, + 19965, 29426, + 19965, 29428, + 19965, 29430, + 19965, 29432, + 19965, 29434, + 19965, 29436, + 19965, 29438, + 19965, 29440, + 19965, 29442, + 19965, 29444, + 19965, 29446, + 19965, 29448, + 19965, 29450, + 19965, 29452, + 19965, 29454, + 19965, 29456, + 19965, 29458, + 19965, 29460, + 19965, 29462, + 19965, 29464, + 19965, 29466, + 19965, 29468, + 19965, 29470, + 19965, 29472, + 19965, 29474, + 19965, 29476, + 19965, 29478, + 19965, 29480, + 19965, 29482, + 19965, 29484, + 19965, 29486, + 19965, 29488, + 19965, 29490, + 19965, 29492, + 19965, 29494, + 19965, 29496, + 19965, 29498, + 19965, 29500, + 19965, 29502, + 19965, 29504, + 19965, 29506, + 19965, 29508, + 19965, 29510, + 19965, 29512, + 19965, 29514, + 19965, 29516, + 19965, 29518, + 19965, 29520, + 19965, 29522, + 19965, 29524, + 19965, 29526, + 19965, 29528, + 19965, 29530, + 19965, 29532, + 19965, 29534, + 19965, 29536, + 19965, 29538, + 19965, 29540, + 19965, 29542, + 19965, 29544, + 19965, 29546, + 19965, 29548, + 19965, 29550, + 19965, 29552, + 19965, 29554, + 19965, 29556, + 19965, 29558, + 19965, 29560, + 19965, 29562, + 19965, 29564, + 19965, 29566, + 19965, 29568, + 19965, 29570, + 19965, 29572, + 19965, 29574, + 19965, 29576, + 19965, 29578, + 19965, 29580, + 19965, 29582, + 19965, 29584, + 19965, 29586, + 19965, 29588, + 19965, 29590, + 19965, 29592, + 19965, 29594, + 19965, 29596, + 19965, 29598, + 19965, 29600, + 19965, 29602, + 19965, 29604, + 19965, 29606, + 19965, 29608, + 19965, 29610, + 19965, 29612, + 19965, 29614, + 19965, 29616, + 19965, 29618, + 19965, 29620, + 19965, 29622, + 19965, 29624, + 19965, 29626, + 19965, 29628, + 19965, 29630, + 19965, 29632, + 19965, 29634, + 19965, 29636, + 19965, 29638, + 19965, 29640, + 19965, 29642, + 19965, 29644, + 19965, 29646, + 19965, 29648, + 19965, 29650, + 19965, 29652, + 19965, 29654, + 19965, 29656, + 19965, 29658, + 19965, 29660, + 19965, 29662, + 19965, 29664, + 19965, 29666, + 19965, 29668, + 19965, 29670, + 19965, 29672, + 19965, 29674, + 19965, 29676, + 19965, 29678, + 19965, 29680, + 19965, 29682, + 19965, 29684, + 19965, 29686, + 19965, 29688, + 19965, 29690, + 19965, 29692, + 19965, 29694, + 19965, 29696, + 19965, 29698, + 19965, 29700, + 19965, 29702, + 19965, 29704, + 19965, 29706, + 19965, 29708, + 19965, 29710, + 19965, 29712, + 19965, 29714, + 19965, 29716, + 19965, 29718, + 19965, 29720, + 19965, 29722, + 19965, 29724, + 19965, 29726, + 19965, 29728, + 19965, 29730, + 19965, 29732, + 19965, 29734, + 19965, 29736, + 19965, 29738, + 19965, 29740, + 19965, 29742, + 19965, 29744, + 19965, 29746, + 19965, 29748, + 19965, 29750, + 19965, 29752, + 19965, 29754, + 19965, 29756, + 19965, 29758, + 19965, 29760, + 19965, 29762, + 19965, 29764, + 19965, 29766, + 19965, 29768, + 19965, 29770, + 19965, 29772, + 19965, 29774, + 19965, 29776, + 19965, 29778, + 19965, 29780, + 19965, 29782, + 19965, 29784, + 19965, 29786, + 19965, 29788, + 19965, 29790, + 19965, 29792, + 19965, 29794, + 19965, 29796, + 19965, 29798, + 19965, 29800, + 19965, 29802, + 19965, 29804, + 19965, 29806, + 19965, 29808, + 19965, 29810, + 19965, 29812, + 19965, 29814, + 19965, 29816, + 19965, 29818, + 19965, 29820, + 19965, 29822, + 19965, 29824, + 19965, 29826, + 19965, 29828, + 19965, 29830, + 19965, 29832, + 19965, 29834, + 19965, 29836, + 19965, 29838, + 19965, 29840, + 19965, 29842, + 19965, 29844, + 19965, 29846, + 19965, 29848, + 19965, 29850, + 19965, 29852, + 19965, 29854, + 19965, 29856, + 19965, 29858, + 19965, 29860, + 19965, 29862, + 19965, 29864, + 19965, 29866, + 19965, 29868, + 19965, 29870, + 19965, 29872, + 19965, 29874, + 19965, 29876, + 19965, 29878, + 19965, 29880, + 19965, 29882, + 19965, 29884, + 19965, 29886, + 19965, 29888, + 19965, 29890, + 19965, 29892, + 19965, 29894, + 19965, 29896, + 19965, 29898, + 19965, 29900, + 19965, 29902, + 19965, 29904, + 19965, 29906, + 19965, 29908, + 19965, 29910, + 19965, 29912, + 19965, 29914, + 19965, 29916, + 19965, 29918, + 19965, 29920, + 19965, 29922, + 19965, 29924, + 19965, 29926, + 19965, 29928, + 19965, 29930, + 19965, 29932, + 19965, 29934, + 19965, 29936, + 19965, 29938, + 19965, 29940, + 19965, 29942, + 19965, 29944, + 19965, 29946, + 19965, 29948, + 19965, 29950, + 19965, 29952, + 19965, 29954, + 19965, 29956, + 19965, 29958, + 19965, 29960, + 19965, 29962, + 19965, 29964, + 19965, 29966, + 19965, 29968, + 19965, 29970, + 19965, 29972, + 19965, 29974, + 19965, 29976, + 19965, 29978, + 19965, 29980, + 19965, 29982, + 19965, 29984, + 19965, 29986, + 19965, 29988, + 19965, 29990, + 19965, 29992, + 19965, 29994, + 19965, 29996, + 19965, 29998, + 19965, 30000, + 19965, 30002, + 19965, 30004, + 19965, 30006, + 19965, 30008, + 19965, 30010, + 19965, 30012, + 19965, 30014, + 19965, 30016, + 19965, 30018, + 19965, 30020, + 19965, 30022, + 19965, 30024, + 19965, 30026, + 19965, 30028, + 19965, 30030, + 19965, 30032, + 19965, 30034, + 19965, 30036, + 19965, 30038, + 19965, 30040, + 19965, 30042, + 19965, 30044, + 19965, 30046, + 19965, 30048, + 19965, 30050, + 19965, 30052, + 19965, 30054, + 19965, 30056, + 19965, 30058, + 19965, 30060, + 19965, 30062, + 19965, 30064, + 19965, 30066, + 19965, 30068, + 19965, 30070, + 19965, 30072, + 19965, 30074, + 19965, 30076, + 19965, 30078, + 19965, 30080, + 19965, 30082, + 19965, 30084, + 19965, 30086, + 19965, 30088, + 19965, 30090, + 19965, 30092, + 19965, 30094, + 19965, 30096, + 19965, 30098, + 19965, 30100, + 19965, 30102, + 19965, 30104, + 19965, 30106, + 19965, 30108, + 19965, 30110, + 19965, 30112, + 19965, 30114, + 19965, 30116, + 19965, 30118, + 19965, 30120, + 19965, 30122, + 19965, 30124, + 19965, 30126, + 19965, 30128, + 19965, 30130, + 19965, 30132, + 19965, 30134, + 19965, 30136, + 19965, 30138, + 19965, 30140, + 19965, 30142, + 19965, 30144, + 19965, 30146, + 19965, 30148, + 19965, 30150, + 19965, 30152, + 19965, 30154, + 19965, 30156, + 19965, 30158, + 19965, 30160, + 19965, 30162, + 19965, 30164, + 19965, 30166, + 19965, 30168, + 19965, 30170, + 19965, 30172, + 19965, 30174, + 19965, 30176, + 19965, 30178, + 19965, 30180, + 19965, 30182, + 19965, 30184, + 19965, 30186, + 19965, 30188, + 19965, 30190, + 19965, 30192, + 19965, 30194, + 19965, 30196, + 19965, 30198, + 19965, 30200, + 19965, 30202, + 19965, 30204, + 19965, 30206, + 19965, 30208, + 19965, 30210, + 19965, 30212, + 19965, 30214, + 19965, 30216, + 19965, 30218, + 19965, 30220, + 19965, 30222, + 19965, 30224, + 19965, 30226, + 19965, 30228, + 19965, 30230, + 19965, 30232, + 19965, 30234, + 19965, 30236, + 19965, 30238, + 19965, 30240, + 19965, 30242, + 19965, 30244, + 19965, 30246, + 19965, 30248, + 19965, 30250, + 19965, 30252, + 19965, 30254, + 19965, 30256, + 19965, 30258, + 19965, 30260, + 19965, 30262, + 19965, 30264, + 19965, 30266, + 19965, 30268, + 19965, 30270, + 19965, 30272, + 19965, 30274, + 19965, 30276, + 19965, 30278, + 19965, 30280, + 19965, 30282, + 19965, 30284, + 19965, 30286, + 19965, 30288, + 19965, 30290, + 19965, 30292, + 19965, 30294, + 19965, 30296, + 19965, 30298, + 19965, 30300, + 19965, 30302, + 19965, 30304, + 19965, 30306, + 19965, 30308, + 19965, 30310, + 19965, 30312, + 19965, 30314, + 19965, 30316, + 19965, 30318, + 19965, 30320, + 19965, 30322, + 19965, 30324, + 19965, 30326, + 19965, 30328, + 19965, 30330, + 19965, 30332, + 19965, 30334, + 19965, 30336, + 19965, 30338, + 19965, 30340, + 19965, 30342, + 19965, 30344, + 19965, 30346, + 19965, 30348, + 19965, 30350, + 19965, 30352, + 19965, 30354, + 19965, 30356, + 19965, 30358, + 19965, 30360, + 19965, 30362, + 19965, 30364, + 19965, 30366, + 19965, 30368, + 19965, 30370, + 19965, 30372, + 19965, 30374, + 19965, 30376, + 19965, 30378, + 19965, 30380, + 19965, 30382, + 19965, 30384, + 19965, 30386, + 19965, 30388, + 19965, 30390, + 19965, 30392, + 19965, 30394, + 19965, 30396, + 19965, 30398, + 19965, 30400, + 19965, 30402, + 19965, 30404, + 19965, 30406, + 19965, 30408, + 19965, 30410, + 19965, 30412, + 19965, 30414, + 19965, 30416, + 19965, 30418, + 19965, 30420, + 19965, 30422, + 19965, 30424, + 19965, 30426, + 19965, 30428, + 19965, 30430, + 19965, 30432, + 19965, 30434, + 19965, 30436, + 19965, 30438, + 19965, 30440, + 19965, 30442, + 19965, 30444, + 19965, 30446, + 19965, 30448, + 19965, 30450, + 19965, 30452, + 19965, 30454, + 19965, 30456, + 19965, 30458, + 19965, 30460, + 19965, 30462, + 19965, 30464, + 19965, 30466, + 19965, 30468, + 19965, 30470, + 19965, 30472, + 19965, 30474, + 19965, 30476, + 19965, 30478, + 19965, 30480, + 19965, 30482, + 19965, 30484, + 19965, 30486, + 19965, 30488, + 19965, 30490, + 19965, 30492, + 19965, 30494, + 19965, 30496, + 19965, 30498, + 19965, 30500, + 19965, 30502, + 19965, 30504, + 19965, 30506, + 19965, 30508, + 19965, 30510, + 19965, 30512, + 19965, 30514, + 19965, 30516, + 19965, 30518, + 19965, 30520, + 19965, 30522, + 19965, 30524, + 19965, 30526, + 19965, 30528, + 19965, 30530, + 19965, 30532, + 19965, 30534, + 19965, 30536, + 19965, 30538, + 19965, 30540, + 19965, 30542, + 19965, 30544, + 19965, 30546, + 19965, 30548, + 19965, 30550, + 19965, 30552, + 19965, 30554, + 19965, 30556, + 19965, 30558, + 19965, 30560, + 19965, 30562, + 19965, 30564, + 19965, 30566, + 19965, 30568, + 19965, 30570, + 19965, 30572, + 19965, 30574, + 19965, 30576, + 19965, 30578, + 19965, 30580, + 19965, 30582, + 19965, 30584, + 19965, 30586, + 19965, 30588, + 19965, 30590, + 19965, 30592, + 19965, 30594, + 19965, 30596, + 19965, 30598, + 19965, 30600, + 19965, 30602, + 19965, 30604, + 19965, 30606, + 19965, 30608, + 19965, 30610, + 19965, 30612, + 19965, 30614, + 19965, 30616, + 19965, 30618, + 19965, 30620, + 19965, 30622, + 19965, 30624, + 19965, 30626, + 19965, 30628, + 19965, 30630, + 19965, 30632, + 19965, 30634, + 19965, 30636, + 19965, 30638, + 19965, 30640, + 19965, 30642, + 19965, 30644, + 19965, 30646, + 19965, 30648, + 19965, 30650, + 19965, 30652, + 19965, 30654, + 19965, 30656, + 19965, 30658, + 19965, 30660, + 19965, 30662, + 19965, 30664, + 19965, 30666, + 19965, 30668, + 19965, 30670, + 19965, 30672, + 19965, 30674, + 19965, 30676, + 19965, 30678, + 19965, 30680, + 19965, 30682, + 19965, 30684, + 19965, 30686, + 19965, 30688, + 19965, 30690, + 19965, 30692, + 19965, 30694, + 19965, 30696, + 19965, 30698, + 19965, 30700, + 19965, 30702, + 19965, 30704, + 19965, 30706, + 19965, 30708, + 19965, 30710, + 19965, 30712, + 19965, 30714, + 19965, 30716, + 19965, 30718, + 19965, 30720, + 19965, 30722, + 19965, 30724, + 19965, 30726, + 19965, 30728, + 19965, 30730, + 19965, 30732, + 19965, 30734, + 19965, 30736, + 19965, 30738, + 19965, 30740, + 19965, 30742, + 19965, 30744, + 19965, 30746, + 19965, 30748, + 19965, 30750, + 19965, 30752, + 19965, 30754, + 19965, 30756, + 19965, 30758, + 19965, 30760, + 19965, 30762, + 19965, 30764, + 19965, 30766, + 19965, 30768, + 19965, 30770, + 19965, 30772, + 19965, 30774, + 19965, 30776, + 19965, 30778, + 19965, 30780, + 19965, 30782, + 19965, 30784, + 19965, 30786, + 19965, 30788, + 19965, 30790, + 19965, 30792, + 19965, 30794, + 19965, 30796, + 19965, 30798, + 19965, 30800, + 19965, 30802, + 19965, 30804, + 19965, 30806, + 19965, 30808, + 19965, 30810, + 19965, 30812, + 19965, 30814, + 19965, 30816, + 19965, 30818, + 19965, 30820, + 19965, 30822, + 19965, 30824, + 19965, 30826, + 19965, 30828, + 19965, 30830, + 19965, 30832, + 19965, 30834, + 19965, 30836, + 19965, 30838, + 19965, 30840, + 19965, 30842, + 19965, 30844, + 19965, 30846, + 19965, 30848, + 19965, 30850, + 19965, 30852, + 19965, 30854, + 19965, 30856, + 19965, 30858, + 19965, 30860, + 19965, 30862, + 19965, 30864, + 19965, 30866, + 19965, 30868, + 19965, 30870, + 19965, 30872, + 19965, 30874, + 19965, 30876, + 19965, 30878, + 19965, 30880, + 19965, 30882, + 19965, 30884, + 19965, 30886, + 19965, 30888, + 19965, 30890, + 19965, 30892, + 19965, 30894, + 19965, 30896, + 19965, 30898, + 19965, 30900, + 19965, 30902, + 19965, 30904, + 19965, 30906, + 19965, 30908, + 19965, 30910, + 19965, 30912, + 19965, 30914, + 19965, 30916, + 19965, 30918, + 19965, 30920, + 19965, 30922, + 19965, 30924, + 19965, 30926, + 19965, 30928, + 19965, 30930, + 19965, 30932, + 19965, 30934, + 19965, 30936, + 19965, 30938, + 19965, 30940, + 19965, 30942, + 19965, 30944, + 19965, 30946, + 19965, 30948, + 19965, 30950, + 19965, 30952, + 19965, 30954, + 19965, 30956, + 19965, 30958, + 19965, 30960, + 19965, 30962, + 19965, 30964, + 19965, 30966, + 19965, 30968, + 19965, 30970, + 19965, 30972, + 19965, 30974, + 19965, 30976, + 19965, 30978, + 19965, 30980, + 19965, 30982, + 19965, 30984, + 19965, 30986, + 19965, 30988, + 19965, 30990, + 19965, 30992, + 19965, 30994, + 19965, 30996, + 19965, 30998, + 19965, 31000, + 19965, 31002, + 19965, 31004, + 19965, 31006, + 19965, 31008, + 19965, 31010, + 19965, 31012, + 19965, 31014, + 19965, 31016, + 19965, 31018, + 19965, 31020, + 19965, 31022, + 19965, 31024, + 19965, 31026, + 19965, 31028, + 19965, 31030, + 19965, 31032, + 19965, 31034, + 19965, 31036, + 19965, 31038, + 19965, 31040, + 19965, 31042, + 19965, 31044, + 19965, 31046, + 19965, 31048, + 19965, 31050, + 19965, 31052, + 19965, 31054, + 19965, 31056, + 19965, 31058, + 19965, 31060, + 19965, 31062, + 19965, 31064, + 19965, 31066, + 19965, 31068, + 19965, 31070, + 19965, 31072, + 19965, 31074, + 19965, 31076, + 19965, 31078, + 19965, 31080, + 19965, 31082, + 19965, 31084, + 19965, 31086, + 19965, 31088, + 19965, 31090, + 19965, 31092, + 19965, 31094, + 19965, 31096, + 19965, 31098, + 19965, 31100, + 19965, 31102, + 19965, 31104, + 19965, 31106, + 19965, 31108, + 19965, 31110, + 19965, 31112, + 19965, 31114, + 19965, 31116, + 19965, 31118, + 19965, 31120, + 19965, 31122, + 19965, 31124, + 19965, 31126, + 19965, 31128, + 19965, 31130, + 19965, 31132, + 19965, 31134, + 19965, 31136, + 19965, 31138, + 19965, 31140, + 19965, 31142, + 19965, 31144, + 19965, 31146, + 19965, 31148, + 19965, 31150, + 19965, 31152, + 19965, 31154, + 19965, 31156, + 19965, 31158, + 19965, 31160, + 19965, 31162, + 19965, 31164, + 19965, 31166, + 19965, 31168, + 19965, 31170, + 19965, 31172, + 19965, 31174, + 19965, 31176, + 19965, 31178, + 19965, 31180, + 19965, 31182, + 19965, 31184, + 19965, 31186, + 19965, 31188, + 19965, 31190, + 19965, 31192, + 19965, 31194, + 19965, 31196, + 19965, 31198, + 19965, 31200, + 19965, 31202, + 19965, 31204, + 19965, 31206, + 19965, 31208, + 19965, 31210, + 19965, 31212, + 19965, 31214, + 19965, 31216, + 19965, 31218, + 19965, 31220, + 19965, 31222, + 19965, 31224, + 19965, 31226, + 19965, 31228, + 19965, 31230, + 19965, 31232, + 19965, 31234, + 19965, 31236, + 19965, 31238, + 19965, 31240, + 19965, 31242, + 19965, 31244, + 19965, 31246, + 19965, 31248, + 19965, 31250, + 19965, 31252, + 19965, 31254, + 19965, 31256, + 19965, 31258, + 19965, 31260, + 19965, 31262, + 19965, 31264, + 19965, 31266, + 19965, 31268, + 19965, 31270, + 19965, 31272, + 19965, 31274, + 19965, 31276, + 19965, 31278, + 19965, 31280, + 19965, 31282, + 19965, 31284, + 19965, 31286, + 19965, 31288, + 19965, 31290, + 19965, 31292, + 19965, 31294, + 19965, 31296, + 19965, 31298, + 19965, 31300, + 19965, 31302, + 19965, 31304, + 19965, 31306, + 19965, 31308, + 19965, 31310, + 19965, 31312, + 19965, 31314, + 19965, 31316, + 19965, 31318, + 19965, 31320, + 19965, 31322, + 19965, 31324, + 19965, 31326, + 19965, 31328, + 19965, 31330, + 19965, 31332, + 19965, 31334, + 19965, 31336, + 19965, 31338, + 19965, 31340, + 19965, 31342, + 19965, 31344, + 19965, 31346, + 19965, 31348, + 19965, 31350, + 19965, 31352, + 19965, 31354, + 19965, 31356, + 19965, 31358, + 19965, 31360, + 19965, 31362, + 19965, 31364, + 19965, 31366, + 19965, 31368, + 19965, 31370, + 19965, 31372, + 19965, 31374, + 19965, 31376, + 19965, 31378, + 19965, 31380, + 19965, 31382, + 19965, 31384, + 19965, 31386, + 19965, 31388, + 19965, 31390, + 19965, 31392, + 19965, 31394, + 19965, 31396, + 19965, 31398, + 19965, 31400, + 19965, 31402, + 19965, 31404, + 19965, 31406, + 19965, 31408, + 19965, 31410, + 19965, 31412, + 19965, 31414, + 19965, 31416, + 19965, 31418, + 19965, 31420, + 19965, 31422, + 19965, 31424, + 19965, 31426, + 19965, 31428, + 19965, 31430, + 19965, 31432, + 19965, 31434, + 19965, 31436, + 19965, 31438, + 19965, 31440, + 19965, 31442, + 19965, 31444, + 19965, 31446, + 19965, 31448, + 19965, 31450, + 19965, 31452, + 19965, 31454, + 19965, 31456, + 19965, 31458, + 19965, 31460, + 19965, 31462, + 19965, 31464, + 19965, 31466, + 19965, 31468, + 19965, 31470, + 19965, 31472, + 19965, 31474, + 19965, 31476, + 19965, 31478, + 19965, 31480, + 19965, 31482, + 19965, 31484, + 19965, 31486, + 19965, 31488, + 19965, 31490, + 19965, 31492, + 19965, 31494, + 19965, 31496, + 19965, 31498, + 19965, 31500, + 19965, 31502, + 19965, 31504, + 19965, 31506, + 19965, 31508, + 19965, 31510, + 19965, 31512, + 19965, 31514, + 19965, 31516, + 19965, 31518, + 19965, 31520, + 19965, 31522, + 19965, 31524, + 19965, 31526, + 19965, 31528, + 19965, 31530, + 19965, 31532, + 19965, 31534, + 19965, 31536, + 19965, 31538, + 19965, 31540, + 19965, 31542, + 19965, 31544, + 19965, 31546, + 19965, 31548, + 19965, 31550, + 19965, 31552, + 19965, 31554, + 19965, 31556, + 19965, 31558, + 19965, 31560, + 19965, 31562, + 19965, 31564, + 19965, 31566, + 19965, 31568, + 19965, 31570, + 19965, 31572, + 19965, 31574, + 19965, 31576, + 19965, 31578, + 19965, 31580, + 19965, 31582, + 19965, 31584, + 19965, 31586, + 19965, 31588, + 19965, 31590, + 19965, 31592, + 19965, 31594, + 19965, 31596, + 19965, 31598, + 19965, 31600, + 19965, 31602, + 19965, 31604, + 19965, 31606, + 19965, 31608, + 19965, 31610, + 19965, 31612, + 19965, 31614, + 19965, 31616, + 19965, 31618, + 19965, 31620, + 19965, 31622, + 19965, 31624, + 19965, 31626, + 19965, 31628, + 19965, 31630, + 19965, 31632, + 19965, 31634, + 19965, 31636, + 19965, 31638, + 19965, 31640, + 19965, 31642, + 19965, 31644, + 19965, 31646, + 19965, 31648, + 19965, 31650, + 19965, 31652, + 19965, 31654, + 19965, 31656, + 19965, 31658, + 19965, 31660, + 19965, 31662, + 19965, 31664, + 19965, 31666, + 19965, 31668, + 19965, 31670, + 19965, 31672, + 19965, 31674, + 19965, 31676, + 19965, 31678, + 19965, 31680, + 19965, 31682, + 19965, 31684, + 19965, 31686, + 19965, 31688, + 19965, 31690, + 19965, 31692, + 19965, 31694, + 19965, 31696, + 19965, 31698, + 19965, 31700, + 19965, 31702, + 19965, 31704, + 19965, 31706, + 19965, 31708, + 19965, 31710, + 19965, 31712, + 19965, 31714, + 19965, 31716, + 19965, 31718, + 19965, 31720, + 19965, 31722, + 19965, 31724, + 19965, 31726, + 19965, 31728, + 19965, 31730, + 19965, 31732, + 19965, 31734, + 19965, 31736, + 19965, 31738, + 19965, 31740, + 19965, 31742, + 19965, 31744, + 19965, 31746, + 19965, 31748, + 19965, 31750, + 19965, 31752, + 19965, 31754, + 19965, 31756, + 19965, 31758, + 19965, 31760, + 19965, 31762, + 19965, 31764, + 19965, 31766, + 19965, 31768, + 19965, 31770, + 19965, 31772, + 19965, 31774, + 19965, 31776, + 19965, 31778, + 19965, 31780, + 19965, 31782, + 19965, 31784, + 19965, 31786, + 19965, 31788, + 19965, 31790, + 19965, 31792, + 19965, 31794, + 19965, 31796, + 19965, 31798, + 19965, 31800, + 19965, 31802, + 19965, 31804, + 19965, 31806, + 19965, 31808, + 19965, 31810, + 19965, 31812, + 19965, 31814, + 19965, 31816, + 19965, 31818, + 19965, 31820, + 19965, 31822, + 19965, 31824, + 19965, 31826, + 19965, 31828, + 19965, 31830, + 19965, 31832, + 19965, 31834, + 19965, 31836, + 19965, 31838, + 19965, 31840, + 19965, 31842, + 19965, 31844, + 19965, 31846, + 19965, 31848, + 19965, 31850, + 19965, 31852, + 19965, 31854, + 19965, 31856, + 19965, 31858, + 19965, 31860, + 19965, 31862, + 19965, 31864, + 19965, 31866, + 19965, 31868, + 19965, 31870, + 19965, 31872, + 19965, 31874, + 19965, 31876, + 19965, 31878, + 19965, 31880, + 19965, 31882, + 19965, 31884, + 19965, 31886, + 19965, 31888, + 19965, 31890, + 19965, 31892, + 19965, 31894, + 19965, 31896, + 19965, 31898, + 19965, 31900, + 19965, 31902, + 19965, 31904, + 19965, 31906, + 19965, 31908, + 19965, 31910, + 19965, 31912, + 19965, 31914, + 19965, 31916, + 19965, 31918, + 19965, 31920, + 19965, 31922, + 19965, 31924, + 19965, 31926, + 19965, 31928, + 19965, 31930, + 19965, 31932, + 19965, 31934, + 19965, 31936, + 19965, 31938, + 19965, 31940, + 19965, 31942, + 19965, 31944, + 19965, 31946, + 19965, 31948, + 19965, 31950, + 19965, 31952, + 19965, 31954, + 19965, 31956, + 19965, 31958, + 19965, 31960, + 19965, 31962, + 19965, 31964, + 19965, 31966, + 19965, 31968, + 19965, 31970, + 19965, 31972, + 19965, 31974, + 19965, 31976, + 19965, 31978, + 19965, 31980, + 19965, 31982, + 19965, 31984, + 19965, 31986, + 19965, 31988, + 19965, 31990, + 19965, 31992, + 19965, 31994, + 19965, 31996, + 19965, 31998, + 19965, 32000, + 19965, 32002, + 19965, 32004, + 19965, 32006, + 19965, 32008, + 19965, 32010, + 19965, 32012, + 19965, 32014, + 19965, 32016, + 19965, 32018, + 19965, 32020, + 19965, 32022, + 19965, 32024, + 19965, 32026, + 19965, 32028, + 19965, 32030, + 19965, 32032, + 19965, 32034, + 19965, 32036, + 19965, 32038, + 19965, 32040, + 19965, 32042, + 19965, 32044, + 19965, 32046, + 19965, 32048, + 19965, 32050, + 19965, 32052, + 19965, 32054, + 19965, 32056, + 19965, 32058, + 19965, 32060, + 19965, 32062, + 19965, 32064, + 19965, 32066, + 19965, 32068, + 19965, 32070, + 19965, 32072, + 19965, 32074, + 19965, 32076, + 19965, 32078, + 19965, 32080, + 19965, 32082, + 19965, 32084, + 19965, 32086, + 19965, 32088, + 19965, 32090, + 19965, 32092, + 19965, 32094, + 19965, 32096, + 19965, 32098, + 19965, 32100, + 19965, 32102, + 19965, 32104, + 19965, 32106, + 19965, 32108, + 19965, 32110, + 19965, 32112, + 19965, 32114, + 19965, 32116, + 19965, 32118, + 19965, 32120, + 19965, 32122, + 19965, 32124, + 19965, 32126, + 19965, 32128, + 19965, 32130, + 19965, 32132, + 19965, 32134, + 19965, 32136, + 19965, 32138, + 19965, 32140, + 19965, 32142, + 19965, 32144, + 19965, 32146, + 19965, 32148, + 19965, 32150, + 19965, 32152, + 19965, 32154, + 19965, 32156, + 19965, 32158, + 19965, 32160, + 19965, 32162, + 19965, 32164, + 19965, 32166, + 19965, 32168, + 19965, 32170, + 19965, 32172, + 19965, 32174, + 19965, 32176, + 19965, 32178, + 19965, 32180, + 19965, 32182, + 19965, 32184, + 19965, 32186, + 19965, 32188, + 19965, 32190, + 19965, 32192, + 19965, 32194, + 19965, 32196, + 19965, 32198, + 19965, 32200, + 19965, 32202, + 19965, 32204, + 19965, 32206, + 19965, 32208, + 19965, 32210, + 19965, 32212, + 19965, 32214, + 19965, 32216, + 19965, 32218, + 19965, 32220, + 19965, 32222, + 19965, 32224, + 19965, 32226, + 19965, 32228, + 19965, 32230, + 19965, 32232, + 19965, 32234, + 19965, 32236, + 19965, 32238, + 19965, 32240, + 19965, 32242, + 19965, 32244, + 19965, 32246, + 19965, 32248, + 19965, 32250, + 19965, 32252, + 19965, 32254, + 19965, 32256, + 19965, 32258, + 19965, 32260, + 19965, 32262, + 19965, 32264, + 19965, 32266, + 19965, 32268, + 19965, 32270, + 19965, 32272, + 19965, 32274, + 19965, 32276, + 19965, 32278, + 19965, 32280, + 19965, 32282, + 19965, 32284, + 19965, 32286, + 19965, 32288, + 19965, 32290, + 19965, 32292, + 19965, 32294, + 19965, 32296, + 19965, 32298, + 19965, 32300, + 19965, 32302, + 19965, 32304, + 19965, 32306, + 19965, 32308, + 19965, 32310, + 19965, 32312, + 19965, 32314, + 19965, 32316, + 19965, 32318, + 19965, 32320, + 19965, 32322, + 19965, 32324, + 19965, 32326, + 19965, 32328, + 19965, 32330, + 19965, 32332, + 19965, 32334, + 19965, 32336, + 19965, 32338, + 19965, 32340, + 19965, 32342, + 19965, 32344, + 19965, 32346, + 19965, 32348, + 19965, 32350, + 19965, 32352, + 19965, 32354, + 19965, 32356, + 19965, 32358, + 19965, 32360, + 19965, 32362, + 19965, 32364, + 19965, 32366, + 19965, 32368, + 19965, 32370, + 19965, 32372, + 19965, 32374, + 19965, 32376, + 19965, 32378, + 19965, 32380, + 19965, 32382, + 19965, 32384, + 19965, 32386, + 19965, 32388, + 19965, 32390, + 19965, 32392, + 19965, 32394, + 19965, 32396, + 19965, 32398, + 19965, 32400, + 19965, 32402, + 19965, 32404, + 19965, 32406, + 19965, 32408, + 19965, 32410, + 19965, 32412, + 19965, 32414, + 19965, 32416, + 19965, 32418, + 19965, 32420, + 19965, 32422, + 19965, 32424, + 19965, 32426, + 19965, 32428, + 19965, 32430, + 19965, 32432, + 19965, 32434, + 19965, 32436, + 19965, 32438, + 19965, 32440, + 19965, 32442, + 19965, 32444, + 19965, 32446, + 19965, 32448, + 19965, 32450, + 19965, 32452, + 19965, 32454, + 19965, 32456, + 19965, 32458, + 19965, 32460, + 19965, 32462, + 19965, 32464, + 19965, 32466, + 19965, 32468, + 19965, 32470, + 19965, 32472, + 19965, 32474, + 19965, 32476, + 19965, 32478, + 19965, 32480, + 19965, 32482, + 19965, 32484, + 19965, 32486, + 19965, 32488, + 19965, 32490, + 19965, 32492, + 19965, 32494, + 19965, 32496, + 19965, 32498, + 19965, 32500, + 19965, 32502, + 19965, 32504, + 19965, 32506, + 19965, 32508, + 19965, 32510, + 19965, 32512, + 19965, 32514, + 19965, 32516, + 19965, 32518, + 19965, 32520, + 19965, 32522, + 19965, 32524, + 19965, 32526, + 19965, 32528, + 19965, 32530, + 19965, 32532, + 19965, 32534, + 19965, 32536, + 19965, 32538, + 19965, 32540, + 19965, 32542, + 19965, 32544, + 19965, 32546, + 19965, 32548, + 19965, 32550, + 19965, 32552, + 19965, 32554, + 19965, 32556, + 19965, 32558, + 19965, 32560, + 19965, 32562, + 19965, 32564, + 19965, 32566, + 19965, 32568, + 19965, 32570, + 19965, 32572, + 19965, 32574, + 19965, 32576, + 19965, 32578, + 19965, 32580, + 19965, 32582, + 19965, 32584, + 19965, 32586, + 19965, 32588, + 19965, 32590, + 19965, 32592, + 19965, 32594, + 19965, 32596, + 19965, 32598, + 19965, 32600, + 19965, 32602, + 19965, 32604, + 19965, 32606, + 19965, 32608, + 19965, 32610, + 19965, 32612, + 19965, 32614, + 19965, 32616, + 19965, 32618, + 19965, 32620, + 19965, 32622, + 19965, 32624, + 19965, 32626, + 19965, 32628, + 19965, 32630, + 19965, 32632, + 19965, 32634, + 19965, 32636, + 19965, 32638, + 19965, 32640, + 19965, 32642, + 19965, 32644, + 19965, 32646, + 19965, 32648, + 19965, 32650, + 19965, 32652, + 19965, 32654, + 19965, 32656, + 19965, 32658, + 19965, 32660, + 19965, 32662, + 19965, 32664, + 19965, 32666, + 19965, 32668, + 19965, 32670, + 19965, 32672, + 19965, 32674, + 19965, 32676, + 19965, 32678, + 19965, 32680, + 19965, 32682, + 19965, 32684, + 19965, 32686, + 19965, 32688, + 19965, 32690, + 19965, 32692, + 19965, 32694, + 19965, 32696, + 19965, 32698, + 19965, 32700, + 19965, 32702, + 19965, 32704, + 19965, 32706, + 19965, 32708, + 19965, 32710, + 19965, 32712, + 19965, 32714, + 19965, 32716, + 19965, 32718, + 19965, 32720, + 19965, 32722, + 19965, 32724, + 19965, 32726, + 19965, 32728, + 19965, 32730, + 19965, 32732, + 19965, 32734, + 19965, 32736, + 19965, 32738, + 19965, 32740, + 19965, 32742, + 19965, 32744, + 19965, 32746, + 19965, 32748, + 19965, 32750, + 19965, 32752, + 19965, 32754, + 19965, 32756, + 19965, 32758, + 19965, 32760, + 19965, 32762, + 19965, 32764, + 19965, 32766, + 19965, 32768, + 19965, 32770, + 19965, 32772, + 19965, 32774, + 19965, 32776, + 19965, 32778, + 19965, 32780, + 19965, 32782, + 19965, 32784, + 19965, 32786, + 19965, 32788, + 19965, 32790, + 19965, 32792, + 19965, 32794, + 19965, 32796, + 19965, 32798, + 19965, 32800, + 19965, 32802, + 19965, 32804, + 19965, 32806, + 19965, 32808, + 19965, 32810, + 19965, 32812, + 19965, 32814, + 19965, 32816, + 19965, 32818, + 19965, 32820, + 19965, 32822, + 19965, 32824, + 19965, 32826, + 19965, 32828, + 19965, 32830, + 19965, 32832, + 19965, 32834, + 19965, 32836, + 19965, 32838, + 19965, 32840, + 19965, 32842, + 19965, 32844, + 19965, 32846, + 19965, 32848, + 19965, 32850, + 19965, 32852, + 19965, 32854, + 19965, 32856, + 19965, 32858, + 19965, 32860, + 19965, 32862, + 19965, 32864, + 19965, 32866, + 19965, 32868, + 19965, 32870, + 19965, 32872, + 19965, 32874, + 19965, 32876, + 19965, 32878, + 19965, 32880, + 19965, 32882, + 19965, 32884, + 19965, 32886, + 19965, 32888, + 19965, 32890, + 19965, 32892, + 19965, 32894, + 19965, 32896, + 19965, 32898, + 19965, 32900, + 19965, 32902, + 19965, 32904, + 19965, 32906, + 19965, 32908, + 19965, 32910, + 19965, 32912, + 19965, 32914, + 19965, 32916, + 19965, 32918, + 19965, 32920, + 19965, 32922, + 19965, 32924, + 19965, 32926, + 19965, 32928, + 19965, 32930, + 19965, 32932, + 19965, 32934, + 19965, 32936, + 19965, 32938, + 19965, 32940, + 19965, 32942, + 19965, 32944, + 19965, 32946, + 19965, 32948, + 19965, 32950, + 19965, 32952, + 19965, 32954, + 19965, 32956, + 19965, 32958, + 19965, 32960, + 19965, 32962, + 19965, 32964, + 19965, 32966, + 19965, 32968, + 19965, 32970, + 19965, 32972, + 19965, 32974, + 19965, 32976, + 19965, 32978, + 19965, 32980, + 19965, 32982, + 19965, 32984, + 19965, 32986, + 19965, 32988, + 19965, 32990, + 19965, 32992, + 19965, 32994, + 19965, 32996, + 19965, 32998, + 19965, 33000, + 19965, 33002, + 19965, 33004, + 19965, 33006, + 19965, 33008, + 19965, 33010, + 19965, 33012, + 19965, 33014, + 19965, 33016, + 19965, 33018, + 19965, 33020, + 19965, 33022, + 19965, 33024, + 19965, 33026, + 19965, 33028, + 19965, 33030, + 19965, 33032, + 19965, 33034, + 19965, 33036, + 19965, 33038, + 19965, 33040, + 19965, 33042, + 19965, 33044, + 19965, 33046, + 19965, 33048, + 19965, 33050, + 19965, 33052, + 19965, 33054, + 19965, 33056, + 19965, 33058, + 19965, 33060, + 19965, 33062, + 19965, 33064, + 19965, 33066, + 19965, 33068, + 19965, 33070, + 19965, 33072, + 19965, 33074, + 19965, 33076, + 19965, 33078, + 19965, 33080, + 19965, 33082, + 19965, 33084, + 19965, 33086, + 19965, 33088, + 19965, 33090, + 19965, 33092, + 19965, 33094, + 19965, 33096, + 19965, 33098, + 19965, 33100, + 19965, 33102, + 19965, 33104, + 19965, 33106, + 19965, 33108, + 19965, 33110, + 19965, 33112, + 19965, 33114, + 19965, 33116, + 19965, 33118, + 19965, 33120, + 19965, 33122, + 19965, 33124, + 19965, 33126, + 19965, 33128, + 19965, 33130, + 19965, 33132, + 19965, 33134, + 19965, 33136, + 19965, 33138, + 19965, 33140, + 19965, 33142, + 19965, 33144, + 19965, 33146, + 19965, 33148, + 19965, 33150, + 19965, 33152, + 19965, 33154, + 19965, 33156, + 19965, 33158, + 19965, 33160, + 19965, 33162, + 19965, 33164, + 19965, 33166, + 19965, 33168, + 19965, 33170, + 19965, 33172, + 19965, 33174, + 19965, 33176, + 19965, 33178, + 19965, 33180, + 19965, 33182, + 19965, 33184, + 19965, 33186, + 19965, 33188, + 19965, 33190, + 19965, 33192, + 19965, 33194, + 19965, 33196, + 19965, 33198, + 19965, 33200, + 19965, 33202, + 19965, 33204, + 19965, 33206, + 19965, 33208, + 19965, 33210, + 19965, 33212, + 19965, 33214, + 19965, 33216, + 19965, 33218, + 19965, 33220, + 19965, 33222, + 19965, 33224, + 19965, 33226, + 19965, 33228, + 19965, 33230, + 19965, 33232, + 19965, 33234, + 19965, 33236, + 19965, 33238, + 19965, 33240, + 19965, 33242, + 19965, 33244, + 19965, 33246, + 19965, 33248, + 19965, 33250, + 19965, 33252, + 19965, 33254, + 19965, 33256, + 19965, 33258, + 19965, 33260, + 19965, 33262, + 19965, 33264, + 19965, 33266, + 19965, 33268, + 19965, 33270, + 19965, 33272, + 19965, 33274, + 19965, 33276, + 19965, 33278, + 19965, 33280, + 19965, 33282, + 19965, 33284, + 19965, 33286, + 19965, 33288, + 19965, 33290, + 19965, 33292, + 19965, 33294, + 19965, 33296, + 19965, 33298, + 19965, 33300, + 19965, 33302, + 19965, 33304, + 19965, 33306, + 19965, 33308, + 19965, 33310, + 19965, 33312, + 19965, 33314, + 19965, 33316, + 19965, 33318, + 19965, 33320, + 19965, 33322, + 19965, 33324, + 19965, 33326, + 19965, 33328, + 19965, 33330, + 19965, 33332, + 19965, 33334, + 19965, 33336, + 19965, 33338, + 19965, 33340, + 19965, 33342, + 19965, 33344, + 19965, 33346, + 19965, 33348, + 19965, 33350, + 19965, 33352, + 19965, 33354, + 19965, 33356, + 19965, 33358, + 19965, 33360, + 19965, 33362, + 19965, 33364, + 19965, 33366, + 19965, 33368, + 19965, 33370, + 19965, 33372, + 19965, 33374, + 19965, 33376, + 19965, 33378, + 19965, 33380, + 19965, 33382, + 19965, 33384, + 19965, 33386, + 19965, 33388, + 19965, 33390, + 19965, 33392, + 19965, 33394, + 19965, 33396, + 19965, 33398, + 19965, 33400, + 19965, 33402, + 19965, 33404, + 19965, 33406, + 19965, 33408, + 19965, 33410, + 19965, 33412, + 19965, 33414, + 19965, 33416, + 19965, 33418, + 19965, 33420, + 19965, 33422, + 19965, 33424, + 19965, 33426, + 19965, 33428, + 19965, 33430, + 19965, 33432, + 19965, 33434, + 19965, 33436, + 19965, 33438, + 19965, 33440, + 19965, 33442, + 19965, 33444, + 19965, 33446, + 19965, 33448, + 19965, 33450, + 19965, 33452, + 19965, 33454, + 19965, 33456, + 19965, 33458, + 19965, 33460, + 19965, 33462, + 19965, 33464, + 19965, 33466, + 19965, 33468, + 19965, 33470, + 19965, 33472, + 19965, 33474, + 19965, 33476, + 19965, 33478, + 19965, 33480, + 19965, 33482, + 19965, 33484, + 19965, 33486, + 19965, 33488, + 19965, 33490, + 19965, 33492, + 19965, 33494, + 19965, 33496, + 19965, 33498, + 19965, 33500, + 19965, 33502, + 19965, 33504, + 19965, 33506, + 19965, 33508, + 19965, 33510, + 19965, 33512, + 19965, 33514, + 19965, 33516, + 19965, 33518, + 19965, 33520, + 19965, 33522, + 19965, 33524, + 19965, 33526, + 19965, 33528, + 19965, 33530, + 19965, 33532, + 19965, 33534, + 19965, 33536, + 19965, 33538, + 19965, 33540, + 19965, 33542, + 19965, 33544, + 19965, 33546, + 19965, 33548, + 19965, 33550, + 19965, 33552, + 19965, 33554, + 19965, 33556, + 19965, 33558, + 19965, 33560, + 19965, 33562, + 19965, 33564, + 19965, 33566, + 19965, 33568, + 19965, 33570, + 19965, 33572, + 19965, 33574, + 19965, 33576, + 19965, 33578, + 19965, 33580, + 19965, 33582, + 19965, 33584, + 19965, 33586, + 19965, 33588, + 19965, 33590, + 19965, 33592, + 19965, 33594, + 19965, 33596, + 19965, 33598, + 19965, 33600, + 19965, 33602, + 19965, 33604, + 19965, 33606, + 19965, 33608, + 19965, 33610, + 19965, 33612, + 19965, 33614, + 19965, 33616, + 19965, 33618, + 19965, 33620, + 19965, 33622, + 19965, 33624, + 19965, 33626, + 19965, 33628, + 19965, 33630, + 19965, 33632, + 19965, 33634, + 19965, 33636, + 19965, 33638, + 19965, 33640, + 19965, 33642, + 19965, 33644, + 19965, 33646, + 19965, 33648, + 19965, 33650, + 19965, 33652, + 19965, 33654, + 19965, 33656, + 19965, 33658, + 19965, 33660, + 19965, 33662, + 19965, 33664, + 19965, 33666, + 19965, 33668, + 19965, 33670, + 19965, 33672, + 19965, 33674, + 19965, 33676, + 19965, 33678, + 19965, 33680, + 19965, 33682, + 19965, 33684, + 19965, 33686, + 19965, 33688, + 19965, 33690, + 19965, 33692, + 19965, 33694, + 19965, 33696, + 19965, 33698, + 19965, 33700, + 19965, 33702, + 19965, 33704, + 19965, 33706, + 19965, 33708, + 19965, 33710, + 19965, 33712, + 19965, 33714, + 19965, 33716, + 19965, 33718, + 19965, 33720, + 19965, 33722, + 19965, 33724, + 19965, 33726, + 19965, 33728, + 19965, 33730, + 19965, 33732, + 19965, 33734, + 19965, 33736, + 19965, 33738, + 19965, 33740, + 19965, 33742, + 19965, 33744, + 19965, 33746, + 19965, 33748, + 19965, 33750, + 19965, 33752, + 19965, 33754, + 19965, 33756, + 19965, 33758, + 19965, 33760, + 19965, 33762, + 19965, 33764, + 19965, 33766, + 19965, 33768, + 19965, 33770, + 19965, 33772, + 19965, 33774, + 19965, 33776, + 19965, 33778, + 19965, 33780, + 19965, 33782, + 19965, 33784, + 19965, 33786, + 19965, 33788, + 19965, 33790, + 19965, 33792, + 19965, 33794, + 19965, 33796, + 19965, 33798, + 19965, 33800, + 19965, 33802, + 19965, 33804, + 19965, 33806, + 19965, 33808, + 19965, 33810, + 19965, 33812, + 19965, 33814, + 19965, 33816, + 19965, 33818, + 19965, 33820, + 19965, 33822, + 19965, 33824, + 19965, 33826, + 19965, 33828, + 19965, 33830, + 19965, 33832, + 19965, 33834, + 19965, 33836, + 19965, 33838, + 19965, 33840, + 19965, 33842, + 19965, 33844, + 19965, 33846, + 19965, 33848, + 19965, 33850, + 19965, 33852, + 19965, 33854, + 19965, 33856, + 19965, 33858, + 19965, 33860, + 19965, 33862, + 19965, 33864, + 19965, 33866, + 19965, 33868, + 19965, 33870, + 19965, 33872, + 19965, 33874, + 19965, 33876, + 19965, 33878, + 19965, 33880, + 19965, 33882, + 19965, 33884, + 19965, 33886, + 19965, 33888, + 19965, 33890, + 19965, 33892, + 19965, 33894, + 19965, 33896, + 19965, 33898, + 19965, 33900, + 19965, 33902, + 19965, 33904, + 19965, 33906, + 19965, 33908, + 19965, 33910, + 19965, 33912, + 19965, 33914, + 19965, 33916, + 19965, 33918, + 19965, 33920, + 19965, 33922, + 19965, 33924, + 19965, 33926, + 19965, 33928, + 19965, 33930, + 19965, 33932, + 19965, 33934, + 19965, 33936, + 19965, 33938, + 19965, 33940, + 19965, 33942, + 19965, 33944, + 19965, 33946, + 19965, 33948, + 19965, 33950, + 19965, 33952, + 19965, 33954, + 19965, 33956, + 19965, 33958, + 19965, 33960, + 19965, 33962, + 19965, 33964, + 19965, 33966, + 19965, 33968, + 19965, 33970, + 19965, 33972, + 19965, 33974, + 19965, 33976, + 19965, 33978, + 19965, 33980, + 19965, 33982, + 19965, 33984, + 19965, 33986, + 19965, 33988, + 19965, 33990, + 19965, 33992, + 19965, 33994, + 19965, 33996, + 19965, 33998, + 19965, 34000, + 19965, 34002, + 19965, 34004, + 19965, 34006, + 19965, 34008, + 19965, 34010, + 19965, 34012, + 19965, 34014, + 19965, 34016, + 19965, 34018, + 19965, 34020, + 19965, 34022, + 19965, 34024, + 19965, 34026, + 19965, 34028, + 19965, 34030, + 19965, 34032, + 19965, 34034, + 19965, 34036, + 19965, 34038, + 19965, 34040, + 19965, 34042, + 19965, 34044, + 19965, 34046, + 19965, 34048, + 19965, 34050, + 19965, 34052, + 19965, 34054, + 19965, 34056, + 19965, 34058, + 19965, 34060, + 19965, 34062, + 19965, 34064, + 19965, 34066, + 19965, 34068, + 19965, 34070, + 19965, 34072, + 19965, 34074, + 19965, 34076, + 19965, 34078, + 19965, 34080, + 19965, 34082, + 19965, 34084, + 19965, 34086, + 19965, 34088, + 19965, 34090, + 19965, 34092, + 19965, 34094, + 19965, 34096, + 19965, 34098, + 19965, 34100, + 19965, 34102, + 19965, 34104, + 19965, 34106, + 19965, 34108, + 19965, 34110, + 19965, 34112, + 19965, 34114, + 19965, 34116, + 19965, 34118, + 19965, 34120, + 19965, 34122, + 19965, 34124, + 19965, 34126, + 19965, 34128, + 19965, 34130, + 19965, 34132, + 19965, 34134, + 19965, 34136, + 19965, 34138, + 19965, 34140, + 19965, 34142, + 19965, 34144, + 19965, 34146, + 19965, 34148, + 19965, 34150, + 19965, 34152, + 19965, 34154, + 19965, 34156, + 19965, 34158, + 19965, 34160, + 19965, 34162, + 19965, 34164, + 19965, 34166, + 19965, 34168, + 19965, 34170, + 19965, 34172, + 19965, 34174, + 19965, 34176, + 19965, 34178, + 19965, 34180, + 19965, 34182, + 19965, 34184, + 19965, 34186, + 19965, 34188, + 19965, 34190, + 19965, 34192, + 19965, 34194, + 19965, 34196, + 19965, 34198, + 19965, 34200, + 19965, 34202, + 19965, 34204, + 19965, 34206, + 19965, 34208, + 19965, 34210, + 19965, 34212, + 19965, 34214, + 19965, 34216, + 19965, 34218, + 19965, 34220, + 19965, 34222, + 19965, 34224, + 19965, 34226, + 19965, 34228, + 19965, 34230, + 19965, 34232, + 19965, 34234, + 19965, 34236, + 19965, 34238, + 19965, 34240, + 19965, 34242, + 19965, 34244, + 19965, 34246, + 19965, 34248, + 19965, 34250, + 19965, 34252, + 19965, 34254, + 19965, 34256, + 19965, 34258, + 19965, 34260, + 19965, 34262, + 19965, 34264, + 19965, 34266, + 19965, 34268, + 19965, 34270, + 19965, 34272, + 19965, 34274, + 19965, 34276, + 19965, 34278, + 19965, 34280, + 19965, 34282, + 19965, 34284, + 19965, 34286, + 19965, 34288, + 19965, 34290, + 19965, 34292, + 19965, 34294, + 19965, 34296, + 19965, 34298, + 19965, 34300, + 19965, 34302, + 19965, 34304, + 19965, 34306, + 19965, 34308, + 19965, 34310, + 19965, 34312, + 19965, 34314, + 19965, 34316, + 19965, 34318, + 19965, 34320, + 19965, 34322, + 19965, 34324, + 19965, 34326, + 19965, 34328, + 19965, 34330, + 19965, 34332, + 19965, 34334, + 19965, 34336, + 19965, 34338, + 19965, 34340, + 19965, 34342, + 19965, 34344, + 19965, 34346, + 19965, 34348, + 19965, 34350, + 19965, 34352, + 19965, 34354, + 19965, 34356, + 19965, 34358, + 19965, 34360, + 19965, 34362, + 19965, 34364, + 19965, 34366, + 19965, 34368, + 19965, 34370, + 19965, 34372, + 19965, 34374, + 19965, 34376, + 19965, 34378, + 19965, 34380, + 19965, 34382, + 19965, 34384, + 19965, 34386, + 19965, 34388, + 19965, 34390, + 19965, 34392, + 19965, 34394, + 19965, 34396, + 19965, 34398, + 19965, 34400, + 19965, 34402, + 19965, 34404, + 19965, 34406, + 19965, 34408, + 19965, 34410, + 19965, 34412, + 19965, 34414, + 19965, 34416, + 19965, 34418, + 19965, 34420, + 19965, 34422, + 19965, 34424, + 19965, 34426, + 19965, 34428, + 19965, 34430, + 19965, 34432, + 19965, 34434, + 19965, 34436, + 19965, 34438, + 19965, 34440, + 19965, 34442, + 19965, 34444, + 19965, 34446, + 19965, 34448, + 19965, 34450, + 19965, 34452, + 19965, 34454, + 19965, 34456, + 19965, 34458, + 19965, 34460, + 19965, 34462, + 19965, 34464, + 19965, 34466, + 19965, 34468, + 19965, 34470, + 19965, 34472, + 19965, 34474, + 19965, 34476, + 19965, 34478, + 19965, 34480, + 19965, 34482, + 19965, 34484, + 19965, 34486, + 19965, 34488, + 19965, 34490, + 19965, 34492, + 19965, 34494, + 19965, 34496, + 19965, 34498, + 19965, 34500, + 19965, 34502, + 19965, 34504, + 19965, 34506, + 19965, 34508, + 19965, 34510, + 19965, 34512, + 19965, 34514, + 19965, 34516, + 19965, 34518, + 19965, 34520, + 19965, 34522, + 19965, 34524, + 19965, 34526, + 19965, 34528, + 19965, 34530, + 19965, 34532, + 19965, 34534, + 19965, 34536, + 19965, 34538, + 19965, 34540, + 19965, 34542, + 19965, 34544, + 19965, 34546, + 19965, 34548, + 19965, 34550, + 19965, 34552, + 19965, 34554, + 19965, 34556, + 19965, 34558, + 19965, 34560, + 19965, 34562, + 19965, 34564, + 19965, 34566, + 19965, 34568, + 19965, 34570, + 19965, 34572, + 19965, 34574, + 19965, 34576, + 19965, 34578, + 19965, 34580, + 19965, 34582, + 19965, 34584, + 19965, 34586, + 19965, 34588, + 19965, 34590, + 19965, 34592, + 19965, 34594, + 19965, 34596, + 19965, 34598, + 19965, 34600, + 19965, 34602, + 19965, 34604, + 19965, 34606, + 19965, 34608, + 19965, 34610, + 19965, 34612, + 19965, 34614, + 19965, 34616, + 19965, 34618, + 19965, 34620, + 19965, 34622, + 19965, 34624, + 19965, 34626, + 19965, 34628, + 19965, 34630, + 19965, 34632, + 19965, 34634, + 19965, 34636, + 19965, 34638, + 19965, 34640, + 19965, 34642, + 19965, 34644, + 19965, 34646, + 19965, 34648, + 19965, 34650, + 19965, 34652, + 19965, 34654, + 19965, 34656, + 19965, 34658, + 19965, 34660, + 19965, 34662, + 19965, 34664, + 19965, 34666, + 19965, 34668, + 19965, 34670, + 19965, 34672, + 19965, 34674, + 19965, 34676, + 19965, 34678, + 19965, 34680, + 19965, 34682, + 19965, 34684, + 19965, 34686, + 19965, 34688, + 19965, 34690, + 19965, 34692, + 19965, 34694, + 19965, 34696, + 19965, 34698, + 19965, 34700, + 19965, 34702, + 19965, 34704, + 19965, 34706, + 19965, 34708, + 19965, 34710, + 19965, 34712, + 19965, 34714, + 19965, 34716, + 19965, 34718, + 19965, 34720, + 19965, 34722, + 19965, 34724, + 19965, 34726, + 19965, 34728, + 19965, 34730, + 19965, 34732, + 19965, 34734, + 19965, 34736, + 19965, 34738, + 19965, 34740, + 19965, 34742, + 19965, 34744, + 19965, 34746, + 19965, 34748, + 19965, 34750, + 19965, 34752, + 19965, 34754, + 19965, 34756, + 19965, 34758, + 19965, 34760, + 19965, 34762, + 19965, 34764, + 19965, 34766, + 19965, 34768, + 19965, 34770, + 19965, 34772, + 19965, 34774, + 19965, 34776, + 19965, 34778, + 19965, 34780, + 19965, 34782, + 19965, 34784, + 19965, 34786, + 19965, 34788, + 19965, 34790, + 19965, 34792, + 19965, 34794, + 19965, 34796, + 19965, 34798, + 19965, 34800, + 19965, 34802, + 19965, 34804, + 19965, 34806, + 19965, 34808, + 19965, 34810, + 19965, 34812, + 19965, 34814, + 19965, 34816, + 19965, 34818, + 19965, 34820, + 19965, 34822, + 19965, 34824, + 19965, 34826, + 19965, 34828, + 19965, 34830, + 19965, 34832, + 19965, 34834, + 19965, 34836, + 19965, 34838, + 19965, 34840, + 19965, 34842, + 19965, 34844, + 19965, 34846, + 19965, 34848, + 19965, 34850, + 19965, 34852, + 19965, 34854, + 19965, 34856, + 19965, 34858, + 19965, 34860, + 19965, 34862, + 19965, 34864, + 19965, 34866, + 19965, 34868, + 19965, 34870, + 19965, 34872, + 19965, 34874, + 19965, 34876, + 19965, 34878, + 19965, 34880, + 19965, 34882, + 19965, 34884, + 19965, 34886, + 19965, 34888, + 19965, 34890, + 19965, 34892, + 19965, 34894, + 19965, 34896, + 19965, 34898, + 19965, 34900, + 19965, 34902, + 19965, 34904, + 19965, 34906, + 19965, 34908, + 19965, 34910, + 19965, 34912, + 19965, 34914, + 19965, 34916, + 19965, 34918, + 19965, 34920, + 19965, 34922, + 19965, 34924, + 19965, 34926, + 19965, 34928, + 19965, 34930, + 19965, 34932, + 19965, 34934, + 19965, 34936, + 19965, 34938, + 19965, 34940, + 19965, 34942, + 19965, 34944, + 19965, 34946, + 19965, 34948, + 19965, 34950, + 19965, 34952, + 19965, 34954, + 19965, 34956, + 19965, 34958, + 19965, 34960, + 19965, 34962, + 19965, 34964, + 19965, 34966, + 19965, 34968, + 19965, 34970, + 19965, 34972, + 19965, 34974, + 19965, 34976, + 19965, 34978, + 19965, 34980, + 19965, 34982, + 19965, 34984, + 19965, 34986, + 19965, 34988, + 19965, 34990, + 19965, 34992, + 19965, 34994, + 19965, 34996, + 19965, 34998, + 19965, 35000, + 19965, 35002, + 19965, 35004, + 19965, 35006, + 19965, 35008, + 19965, 35010, + 19965, 35012, + 19965, 35014, + 19965, 35016, + 19965, 35018, + 19965, 35020, + 19965, 35022, + 19965, 35024, + 19965, 35026, + 19965, 35028, + 19965, 35030, + 19965, 35032, + 19965, 35034, + 19965, 35036, + 19965, 35038, + 19965, 35040, + 19965, 35042, + 19965, 35044, + 19965, 35046, + 19965, 35048, + 19965, 35050, + 19965, 35052, + 19965, 35054, + 19965, 35056, + 19965, 35058, + 19965, 35060, + 19965, 35062, + 19965, 35064, + 19965, 35066, + 19965, 35068, + 19965, 35070, + 19965, 35072, + 19965, 35074, + 19965, 35076, + 19965, 35078, + 19965, 35080, + 19965, 35082, + 19965, 35084, + 19965, 35086, + 19965, 35088, + 19965, 35090, + 19965, 35092, + 19965, 35094, + 19965, 35096, + 19965, 35098, + 19965, 35100, + 19965, 35102, + 19965, 35104, + 19965, 35106, + 19965, 35108, + 19965, 35110, + 19965, 35112, + 19965, 35114, + 19965, 35116, + 19965, 35118, + 19965, 35120, + 19965, 35122, + 19965, 35124, + 19965, 35126, + 19965, 35128, + 19965, 35130, + 19965, 35132, + 19965, 35134, + 19965, 35136, + 19965, 35138, + 19965, 35140, + 19965, 35142, + 19965, 35144, + 19965, 35146, + 19965, 35148, + 19965, 35150, + 19965, 35152, + 19965, 35154, + 19965, 35156, + 19965, 35158, + 19965, 35160, + 19965, 35162, + 19965, 35164, + 19965, 35166, + 19965, 35168, + 19965, 35170, + 19965, 35172, + 19965, 35174, + 19965, 35176, + 19965, 35178, + 19965, 35180, + 19965, 35182, + 19965, 35184, + 19965, 35186, + 19965, 35188, + 19965, 35190, + 19965, 35192, + 19965, 35194, + 19965, 35196, + 19965, 35198, + 19965, 35200, + 19965, 35202, + 19965, 35204, + 19965, 35206, + 19965, 35208, + 19965, 35210, + 19965, 35212, + 19965, 35214, + 19965, 35216, + 19965, 35218, + 19965, 35220, + 19965, 35222, + 19965, 35224, + 19965, 35226, + 19965, 35228, + 19965, 35230, + 19965, 35232, + 19965, 35234, + 19965, 35236, + 19965, 35238, + 19965, 35240, + 19965, 35242, + 19965, 35244, + 19965, 35246, + 19965, 35248, + 19965, 35250, + 19965, 35252, + 19965, 35254, + 19965, 35256, + 19965, 35258, + 19965, 35260, + 19965, 35262, + 19965, 35264, + 19965, 35266, + 19965, 35268, + 19965, 35270, + 19965, 35272, + 19965, 35274, + 19965, 35276, + 19965, 35278, + 19965, 35280, + 19965, 35282, + 19965, 35284, + 19965, 35286, + 19965, 35288, + 19965, 35290, + 19965, 35292, + 19965, 35294, + 19965, 35296, + 19965, 35298, + 19965, 35300, + 19965, 35302, + 19965, 35304, + 19965, 35306, + 19965, 35308, + 19965, 35310, + 19965, 35312, + 19965, 35314, + 19965, 35316, + 19965, 35318, + 19965, 35320, + 19965, 35322, + 19965, 35324, + 19965, 35326, + 19965, 35328, + 19965, 35330, + 19965, 35332, + 19965, 35334, + 19965, 35336, + 19965, 35338, + 19965, 35340, + 19965, 35342, + 19965, 35344, + 19965, 35346, + 19965, 35348, + 19965, 35350, + 19965, 35352, + 19965, 35354, + 19965, 35356, + 19965, 35358, + 19965, 35360, + 19965, 35362, + 19965, 35364, + 19965, 35366, + 19965, 35368, + 19965, 35370, + 19965, 35372, + 19965, 35374, + 19965, 35376, + 19965, 35378, + 19965, 35380, + 19965, 35382, + 19965, 35384, + 19965, 35386, + 19965, 35388, + 19965, 35390, + 19965, 35392, + 19965, 35394, + 19965, 35396, + 19965, 35398, + 19965, 35400, + 19965, 35402, + 19965, 35404, + 19965, 35406, + 19965, 35408, + 19965, 35410, + 19965, 35412, + 19965, 35414, + 19965, 35416, + 19965, 35418, + 19965, 35420, + 19965, 35422, + 19965, 35424, + 19965, 35426, + 19965, 35428, + 19965, 35430, + 19965, 35432, + 19965, 35434, + 19965, 35436, + 19965, 35438, + 19965, 35440, + 19965, 35442, + 19965, 35444, + 19965, 35446, + 19965, 35448, + 19965, 35450, + 19965, 35452, + 19965, 35454, + 19965, 35456, + 19965, 35458, + 19965, 35460, + 19965, 35462, + 19965, 35464, + 19965, 35466, + 19965, 35468, + 19965, 35470, + 19965, 35472, + 19965, 35474, + 19965, 35476, + 19965, 35478, + 19965, 35480, + 19965, 35482, + 19965, 35484, + 19965, 35486, + 19965, 35488, + 19965, 35490, + 19965, 35492, + 19965, 35494, + 19965, 35496, + 19965, 35498, + 19965, 35500, + 19965, 35502, + 19965, 35504, + 19965, 35506, + 19965, 35508, + 19965, 35510, + 19965, 35512, + 19965, 35514, + 19965, 35516, + 19965, 35518, + 19965, 35520, + 19965, 35522, + 19965, 35524, + 19965, 35526, + 19965, 35528, + 19965, 35530, + 19965, 35532, + 19965, 35534, + 19965, 35536, + 19965, 35538, + 19965, 35540, + 19965, 35542, + 19965, 35544, + 19965, 35546, + 19965, 35548, + 19965, 35550, + 19965, 35552, + 19965, 35554, + 19965, 35556, + 19965, 35558, + 19965, 35560, + 19965, 35562, + 19965, 35564, + 19965, 35566, + 19965, 35568, + 19965, 35570, + 19965, 35572, + 19965, 35574, + 19965, 35576, + 19965, 35578, + 19965, 35580, + 19965, 35582, + 19965, 35584, + 19965, 35586, + 19965, 35588, + 19965, 35590, + 19965, 35592, + 19965, 35594, + 19965, 35596, + 19965, 35598, + 19965, 35600, + 19965, 35602, + 19965, 35604, + 19965, 35606, + 19965, 35608, + 19965, 35610, + 19965, 35612, + 19965, 35614, + 19965, 35616, + 19965, 35618, + 19965, 35620, + 19965, 35622, + 19965, 35624, + 19965, 35626, + 19965, 35628, + 19965, 35630, + 19965, 35632, + 19965, 35634, + 19965, 35636, + 19965, 35638, + 19965, 35640, + 19965, 35642, + 19965, 35644, + 19965, 35646, + 19965, 35648, + 19965, 35650, + 19965, 35652, + 19965, 35654, + 19965, 35656, + 19965, 35658, + 19965, 35660, + 19965, 35662, + 19965, 35664, + 19965, 35666, + 19965, 35668, + 19965, 35670, + 19965, 35672, + 19965, 35674, + 19965, 35676, + 19965, 35678, + 19965, 35680, + 19965, 35682, + 19965, 35684, + 19965, 35686, + 19965, 35688, + 19965, 35690, + 19965, 35692, + 19965, 35694, + 19965, 35696, + 19965, 35698, + 19965, 35700, + 19965, 35702, + 19965, 35704, + 19965, 35706, + 19965, 35708, + 19965, 35710, + 19965, 35712, + 19965, 35714, + 19965, 35716, + 19965, 35718, + 19965, 35720, + 19965, 35722, + 19965, 35724, + 19965, 35726, + 19965, 35728, + 19965, 35730, + 19965, 35732, + 19965, 35734, + 19965, 35736, + 19965, 35738, + 19965, 35740, + 19965, 35742, + 19965, 35744, + 19965, 35746, + 19965, 35748, + 19965, 35750, + 19965, 35752, + 19965, 35754, + 19965, 35756, + 19965, 35758, + 19965, 35760, + 19965, 35762, + 19965, 35764, + 19965, 35766, + 19965, 35768, + 19965, 35770, + 19965, 35772, + 19965, 35774, + 19965, 35776, + 19965, 35778, + 19965, 35780, + 19965, 35782, + 19965, 35784, + 19965, 35786, + 19965, 35788, + 19965, 35790, + 19965, 35792, + 19965, 35794, + 19965, 35796, + 19965, 35798, + 19965, 35800, + 19965, 35802, + 19965, 35804, + 19965, 35806, + 19965, 35808, + 19965, 35810, + 19965, 35812, + 19965, 35814, + 19965, 35816, + 19965, 35818, + 19965, 35820, + 19965, 35822, + 19965, 35824, + 19965, 35826, + 19965, 35828, + 19965, 35830, + 19965, 35832, + 19965, 35834, + 19965, 35836, + 19965, 35838, + 19965, 35840, + 19965, 35842, + 19965, 35844, + 19965, 35846, + 19965, 35848, + 19965, 35850, + 19965, 35852, + 19965, 35854, + 19965, 35856, + 19965, 35858, + 19965, 35860, + 19965, 35862, + 19965, 35864, + 19965, 35866, + 19965, 35868, + 19965, 35870, + 19965, 35872, + 19965, 35874, + 19965, 35876, + 19965, 35878, + 19965, 35880, + 19965, 35882, + 19965, 35884, + 19965, 35886, + 19965, 35888, + 19965, 35890, + 19965, 35892, + 19965, 35894, + 19965, 35896, + 19965, 35898, + 19965, 35900, + 19965, 35902, + 19965, 35904, + 19965, 35906, + 19965, 35908, + 19965, 35910, + 19965, 35912, + 19965, 35914, + 19965, 35916, + 19965, 35918, + 19965, 35920, + 19965, 35922, + 19965, 35924, + 19965, 35926, + 19965, 35928, + 19965, 35930, + 19965, 35932, + 19965, 35934, + 19965, 35936, + 19965, 35938, + 19965, 35940, + 19965, 35942, + 19965, 35944, + 19965, 35946, + 19965, 35948, + 19965, 35950, + 19965, 35952, + 19965, 35954, + 19965, 35956, + 19965, 35958, + 19965, 35960, + 19965, 35962, + 19965, 35964, + 19965, 35966, + 19965, 35968, + 19965, 35970, + 19965, 35972, + 19965, 35974, + 19965, 35976, + 19965, 35978, + 19965, 35980, + 19965, 35982, + 19965, 35984, + 19965, 35986, + 19965, 35988, + 19965, 35990, + 19965, 35992, + 19965, 35994, + 19965, 35996, + 19965, 35998, + 19965, 36000, + 19965, 36002, + 19965, 36004, + 19965, 36006, + 19965, 36008, + 19965, 36010, + 19965, 36012, + 19965, 36014, + 19965, 36016, + 19965, 36018, + 19965, 36020, + 19965, 36022, + 19965, 36024, + 19965, 36026, + 19965, 36028, + 19965, 36030, + 19965, 36032, + 19965, 36034, + 19965, 36036, + 19965, 36038, + 19965, 36040, + 19965, 36042, + 19965, 36044, + 19965, 36046, + 19965, 36048, + 19965, 36050, + 19965, 36052, + 19965, 36054, + 19965, 36056, + 19965, 36058, + 19965, 36060, + 19965, 36062, + 19965, 36064, + 19965, 36066, + 19965, 36068, + 19965, 36070, + 19965, 36072, + 19965, 36074, + 19965, 36076, + 19965, 36078, + 19965, 36080, + 19965, 36082, + 19965, 36084, + 19965, 36086, + 19965, 36088, + 19965, 36090, + 19965, 36092, + 19965, 36094, + 19969, 9898, + 19969, 12414, + 19969, 13807, 6122, + 19969, 15182, + 19970, + 19972, + 19981, 17298, + 19986, + 19987, 11513, 21349, 12415, 12318, + 19987, 11513, 21564, + 19995, 7073, 10696, + 19995, 12916, + 19995, 12922, + 19995, 13069, 2760, + 19995, 13069, 3240, + 19995, 13069, 3536, + 19995, 13069, 7036, + 19995, 13069, 7058, + 19995, 13069, 9358, + 19995, 13069, 13150, + 19995, 13069, 14778, + 19995, 13069, 15116, + 19995, 15175, 8809, 8186, + 19995, 15175, 8809, 13056, + 19995, 15175, 8809, 13066, + 19995, 15175, 8809, 13482, + 19995, 15175, 8809, 13674, + 19995, 15175, 8809, 14837, 17028, + 19995, 15175, 8809, 15532, + 19995, 15175, 8809, 15926, + 19995, 15175, 8809, 17028, + 19995, 15175, 8809, 23120, + 19995, 16787, 3412, + 19995, 16787, 3413, 20828, + 19995, 16787, 13254, + 19995, 16787, 13284, + 19995, 16787, 14876, + 19995, 16787, 16108, + 19995, 16787, 16744, + 19995, 16787, 17372, + 19995, 16787, 17474, + 19995, 16787, 18280, + 19995, 16787, 19070, + 19995, 18915, 12916, + 19995, 19057, 8808, + 19995, 20549, 8808, + 19995, 20777, 108, + 19995, 20777, 112, + 19995, 20777, 116, + 19995, 20777, 118, + 19995, 20777, 122, + 19995, 20777, 126, + 19995, 20777, 132, + 19995, 20777, 136, + 19995, 20777, 142, + 19995, 20777, 144, + 19995, 20777, 150, + 19995, 20777, 156, + 19995, 20777, 160, + 19995, 20777, 168, + 19995, 20777, 170, + 19995, 20777, 228, + 19995, 20777, 230, + 19995, 20777, 234, + 19995, 20777, 240, + 19995, 20777, 242, + 19995, 20777, 248, + 19995, 20777, 252, + 19995, 20777, 258, + 19995, 20777, 262, + 19995, 20777, 264, + 19995, 20777, 272, + 19995, 20777, 276, + 19995, 20777, 280, + 19995, 20777, 288, + 19995, 20777, 292, + 19995, 20777, 344, + 19995, 20777, 346, + 19995, 20777, 348, + 19995, 20777, 350, + 19995, 20777, 352, + 19995, 20777, 358, + 19995, 20777, 362, + 19995, 20777, 366, + 19995, 20777, 374, + 19995, 20777, 380, + 19995, 20777, 394, + 19995, 20777, 398, + 19995, 20777, 402, + 19995, 20777, 412, + 19995, 20777, 416, + 19995, 20777, 426, + 19995, 20777, 434, + 19995, 20777, 440, + 19995, 20777, 446, + 19995, 20777, 454, + 19995, 20777, 466, + 19995, 20777, 470, + 19995, 20777, 478, + 19995, 20777, 486, + 19995, 20777, 490, + 19995, 20777, 548, + 19995, 20777, 554, + 19995, 20777, 562, + 19995, 20777, 566, + 19995, 20777, 572, + 19995, 20777, 582, + 19995, 20777, 584, + 19995, 20777, 586, + 19995, 20777, 590, + 19995, 20777, 594, + 19995, 20777, 598, + 19995, 20777, 600, + 19995, 20777, 604, + 19995, 20777, 606, + 19995, 20777, 610, + 19995, 20777, 614, + 19995, 20777, 618, + 19995, 20777, 624, + 19995, 20777, 628, + 19995, 20777, 638, + 19995, 20777, 648, + 19995, 20777, 652, + 19995, 20777, 656, + 19995, 20777, 660, + 19995, 20777, 668, + 19995, 20777, 714, + 19995, 20777, 718, + 19995, 20777, 720, + 19995, 20777, 722, + 19995, 20777, 728, + 19995, 20777, 738, + 19995, 20777, 744, + 19995, 20777, 750, + 19995, 20777, 754, + 19995, 20777, 756, + 19995, 20777, 762, + 19995, 20777, 764, + 19995, 20777, 768, + 19995, 20777, 770, + 19995, 20777, 772, + 19995, 20777, 778, + 19995, 20777, 780, + 19995, 20777, 782, + 19995, 20777, 786, + 19995, 20777, 790, + 19995, 20777, 796, + 19995, 20777, 798, + 19995, 20777, 802, + 19995, 20777, 804, + 19995, 20777, 806, + 19995, 20777, 950, + 19995, 20777, 972, + 19995, 20777, 974, + 19995, 20777, 976, + 19995, 20777, 978, + 19995, 20777, 980, + 19995, 20777, 986, + 19995, 20777, 1024, + 19995, 20777, 1060, + 19995, 20777, 1062, + 19995, 20777, 1064, + 19995, 20777, 1076, + 19995, 20777, 1096, + 19995, 20777, 1098, + 19995, 20777, 1100, + 19995, 20777, 1102, + 19995, 20777, 1104, + 19995, 20777, 1106, + 19995, 20777, 1116, + 19995, 20777, 1118, + 19995, 20777, 1120, + 19995, 20777, 1122, + 19995, 20777, 1124, + 19995, 20777, 1146, + 19995, 20777, 1172, + 19995, 20777, 1190, + 19995, 20777, 1214, + 19995, 20777, 1216, + 19995, 20777, 1218, + 19995, 20777, 1220, + 19995, 20777, 1222, + 19995, 20777, 1224, + 19995, 20777, 1278, + 19995, 20777, 1322, + 19995, 20777, 1332, + 19995, 20777, 1334, + 19995, 20777, 1336, + 19995, 20777, 1338, + 19995, 20777, 1440, + 19995, 20777, 1460, + 19995, 20777, 1510, + 19995, 20777, 1512, + 19995, 20777, 1514, + 19995, 20777, 1516, + 19995, 20777, 1526, + 19995, 20777, 1564, + 19995, 20777, 1578, + 19995, 20777, 1580, + 19995, 20777, 1582, + 19995, 20777, 1584, + 19995, 20777, 1586, + 19995, 20777, 1622, + 19995, 20777, 1660, + 19995, 20777, 1662, + 19995, 20777, 1664, + 19995, 20777, 1668, + 19995, 20777, 1670, + 19995, 20777, 1672, + 19995, 20777, 1674, + 19995, 20777, 1676, + 19995, 20777, 1678, + 19995, 20777, 1708, + 19995, 20777, 1722, + 19995, 20777, 1724, + 19995, 20777, 1726, + 19995, 20777, 1728, + 19995, 20777, 1730, + 19995, 20777, 1774, + 19995, 20777, 1902, + 19995, 20777, 1910, + 19995, 20777, 1946, + 19995, 20777, 1970, + 19995, 20777, 1982, + 19995, 20777, 2018, + 19995, 20777, 2088, + 19995, 20777, 2156, + 19995, 20777, 2160, + 19995, 20777, 2162, + 19995, 20777, 2170, + 19995, 20777, 2172, + 19995, 20777, 2174, + 19995, 20777, 2176, + 19995, 20777, 2178, + 19995, 20777, 2180, + 19995, 20777, 2182, + 19995, 20777, 2184, + 19995, 20777, 2186, + 19995, 20777, 2188, + 19995, 20777, 2190, + 19995, 20777, 2230, + 19995, 20777, 2284, + 19995, 20777, 2338, + 19995, 20777, 2360, + 19995, 20777, 2404, + 19995, 20777, 2450, + 19995, 20777, 2492, + 19995, 20777, 2494, + 19995, 20777, 2496, + 19995, 20777, 2500, + 19995, 20777, 2512, + 19995, 20777, 2558, + 19995, 20777, 2632, + 19995, 20777, 2688, + 19995, 20777, 2698, + 19995, 20777, 2702, + 19995, 20777, 2704, + 19995, 20777, 2706, + 19995, 20777, 2708, + 19995, 20777, 2788, + 19995, 20777, 2818, + 19995, 20777, 2830, + 19995, 20777, 2832, + 19995, 20777, 2834, + 19995, 20777, 2836, + 19995, 20777, 2838, + 19995, 20777, 2858, + 19995, 20777, 2908, + 19995, 20777, 2910, + 19995, 20777, 2912, + 19995, 20777, 2924, + 19995, 20777, 2938, + 19995, 20777, 2942, + 19995, 20777, 2944, + 19995, 20777, 2946, + 19995, 20777, 2948, + 19995, 20777, 2950, + 19995, 20777, 2964, + 19995, 20777, 3000, + 19995, 20777, 3002, + 19995, 20777, 3004, + 19995, 20777, 3006, + 19995, 20777, 3008, + 19995, 20777, 3010, + 19995, 20777, 3012, + 19995, 20777, 3020, + 19995, 20777, 3028, + 19995, 20777, 3060, + 19995, 20777, 3100, + 19995, 20777, 3150, + 19995, 20777, 3158, + 19995, 20777, 3172, + 19995, 20777, 3200, + 19995, 20777, 3212, + 19995, 20777, 3214, + 19995, 20777, 3216, + 19995, 20777, 3218, + 19995, 20777, 3220, + 19995, 20777, 3250, + 19995, 20777, 3286, + 19995, 20777, 3288, + 19995, 20777, 3290, + 19995, 20777, 3292, + 19995, 20777, 3294, + 19995, 20777, 3324, + 19995, 20777, 3348, + 19995, 20777, 3350, + 19995, 20777, 3352, + 19995, 20777, 3354, + 19995, 20777, 3358, + 19995, 20777, 3364, + 19995, 20777, 3406, + 19995, 20777, 3422, + 19995, 20777, 3424, + 19995, 20777, 3426, + 19995, 20777, 3428, + 19995, 20777, 3430, + 19995, 20777, 3466, + 19995, 20777, 3488, + 19995, 20777, 3490, + 19995, 20777, 3492, + 19995, 20777, 3494, + 19995, 20777, 3496, + 19995, 20777, 3530, + 19995, 20777, 3550, + 19995, 20777, 3552, + 19995, 20777, 3554, + 19995, 20777, 3556, + 19995, 20777, 3558, + 19995, 20777, 3654, + 19995, 20777, 3672, + 19995, 20777, 3724, + 19995, 20777, 3736, + 19995, 20777, 3758, + 19995, 20777, 3776, + 19995, 20777, 3810, + 19995, 20777, 3816, + 19995, 20777, 3830, + 19995, 20777, 3846, + 19995, 20777, 3848, + 19995, 20777, 3850, + 19995, 20777, 3852, + 19995, 20777, 3854, + 19995, 20777, 3856, + 19995, 20777, 3858, + 19995, 20777, 3866, + 19995, 20777, 3870, + 19995, 20777, 3916, + 19995, 20777, 3950, + 19995, 20777, 4016, + 19995, 20777, 4034, + 19995, 20777, 4042, + 19995, 20777, 4044, + 19995, 20777, 4046, + 19995, 20777, 4048, + 19995, 20777, 4050, + 19995, 20777, 4072, + 19995, 20777, 4100, + 19995, 20777, 4112, + 19995, 20777, 4114, + 19995, 20777, 4116, + 19995, 20777, 4118, + 19995, 20777, 4120, + 19995, 20777, 5998, + 19995, 20777, 6006, + 19995, 20777, 6144, + 19995, 20777, 6236, + 19995, 20777, 6238, + 19995, 20777, 6240, + 19995, 20777, 6242, + 19995, 20777, 6244, + 19995, 20777, 6246, + 19995, 20777, 6248, + 19995, 20777, 6258, + 19995, 20777, 6276, + 19995, 20777, 6296, + 19995, 20777, 6316, + 19995, 20777, 6554, + 19995, 20777, 6566, + 19995, 20777, 6574, + 19995, 20777, 6576, + 19995, 20777, 6578, + 19995, 20777, 6580, + 19995, 20777, 6590, + 19995, 20777, 6608, + 19995, 20777, 6734, + 19995, 20777, 6738, + 19995, 20777, 7090, + 19995, 20777, 7244, + 19995, 20777, 7252, + 19995, 20777, 7282, + 19995, 20777, 7284, + 19995, 20777, 7286, + 19995, 20777, 7370, + 19995, 20777, 7372, + 19995, 20777, 7374, + 19995, 20777, 7380, + 19995, 20777, 7482, + 19995, 20777, 7484, + 19995, 20777, 7486, + 19995, 20777, 7488, + 19995, 20777, 7490, + 19995, 20777, 7492, + 19995, 20777, 7494, + 19995, 20777, 7496, + 19995, 20777, 7498, + 19995, 20777, 7500, + 19995, 20777, 8192, + 19995, 20777, 8196, + 19995, 20777, 8202, + 19995, 20777, 8204, + 19995, 20777, 8206, + 19995, 20777, 8208, + 19995, 20777, 8210, + 19995, 20777, 8212, + 19995, 20777, 8214, + 19995, 20777, 9024, + 19995, 20777, 9546, + 19995, 20777, 9558, + 19995, 20777, 9584, + 19995, 20777, 9608, + 19995, 20777, 9852, + 19995, 20777, 9862, + 19995, 20777, 9864, + 19995, 20777, 9868, + 19995, 20777, 9938, + 19995, 20777, 9972, + 19995, 20777, 9976, + 19995, 20777, 9978, + 19995, 20777, 9980, + 19995, 20777, 9982, + 19995, 20777, 10006, + 19995, 20777, 10008, + 19995, 20777, 10010, + 19995, 20777, 10012, + 19995, 20777, 10442, + 19995, 20777, 10458, + 19995, 20777, 10486, + 19995, 20777, 10530, + 19995, 20777, 10642, + 19995, 20777, 10650, + 19995, 20777, 10752, + 19995, 20777, 10754, + 19995, 20777, 10756, + 19995, 20777, 10922, + 19995, 20777, 10938, + 19995, 20777, 10952, + 19995, 20777, 10962, + 19995, 20777, 11052, + 19995, 20777, 11056, + 19995, 20777, 11070, + 19995, 20777, 11084, + 19995, 20777, 11086, + 19995, 20777, 11088, + 19995, 20777, 11090, + 19995, 20777, 11142, + 19995, 20777, 11144, + 19995, 20777, 11148, + 19995, 20777, 11586, + 19995, 20777, 11588, + 19995, 20777, 11590, + 19995, 20777, 11592, + 19995, 20777, 11830, + 19995, 20777, 11840, + 19995, 20777, 11870, + 19995, 20777, 11904, + 19995, 20777, 11912, + 19995, 20777, 12624, + 19995, 20777, 12626, + 19995, 20777, 12628, + 19995, 20777, 12630, + 19995, 20777, 12632, + 19995, 20777, 12634, + 19995, 20777, 12636, + 19995, 20777, 13032, + 19995, 20777, 13034, + 19995, 20777, 13366, + 19995, 20777, 13368, + 19995, 20777, 13476, + 19995, 20777, 13478, + 19995, 20777, 13480, + 19995, 20777, 13746, + 19995, 20777, 13748, + 19995, 20777, 14590, + 19995, 20777, 14592, + 19995, 20777, 15228, + 19995, 20777, 15230, + 19995, 20777, 15894, + 19995, 20777, 15896, + 19995, 20777, 16291, 1064, + 19995, 20777, 16291, 1514, + 19995, 20777, 16291, 1662, + 19995, 20777, 16291, 1664, + 19995, 20777, 16291, 2160, + 19995, 20777, 16291, 2162, + 19995, 20777, 16291, 2496, + 19995, 20777, 16291, 2912, + 19995, 20777, 16291, 3002, + 19995, 20777, 16291, 3004, + 19995, 20777, 16291, 6144, + 19995, 20777, 16291, 7090, + 19995, 20777, 16291, 7372, + 19995, 20777, 16291, 7486, + 19995, 20777, 16291, 8196, + 19995, 20777, 16291, 9024, + 19995, 20777, 16291, 9938, + 19995, 20777, 16291, 10008, + 19995, 20777, 18213, 0, + 19995, 20777, 18213, 8, + 19995, 20777, 18213, 16, + 19995, 20777, 18213, 28, + 19995, 20777, 18213, 40, + 19995, 20777, 18213, 58, + 19995, 20777, 18213, 186, + 19995, 20777, 18213, 498, + 19995, 20777, 18213, 738, + 19995, 20777, 21841, 1060, + 19995, 20777, 21841, 1510, + 19995, 20777, 21841, 2492, + 19995, 20777, 21841, 2908, + 19995, 20777, 22763, 0, + 19995, 20777, 22763, 8, + 19995, 20777, 22763, 16, + 19995, 20777, 22763, 28, + 19995, 20777, 22763, 40, + 19995, 20777, 22763, 58, + 19995, 20777, 22763, 186, + 19995, 21127, 15407, 16525, 8808, + 19995, 21127, 22465, 897, 15407, 16525, 8808, + 19995, 21127, 22465, 8808, + 19995, 21729, 21850, + 19995, 21844, + 19995, 22128, + 19997, 9915, 16802, + 19997, 15890, + 20003, 23751, 13069, 2760, + 20003, 23751, 13069, 3240, + 20003, 23751, 13069, 3536, + 20003, 23751, 13069, 7036, + 20003, 23751, 13069, 7058, + 20003, 23751, 13069, 9358, + 20003, 23751, 13069, 11824, + 20003, 23751, 13069, 13150, + 20003, 23751, 13069, 14778, + 20003, 23751, 13069, 15116, + 20011, 18767, 21498, + 20027, 20684, + 20032, + 20035, 6082, + 20036, + 20050, + 20055, 14890, + 20055, 21649, 2760, + 20061, 6996, + 20063, 6997, 11513, 9783, 14030, + 20067, 23048, + 20077, 14911, 16531, 82, + 20077, 14911, 16531, 204, + 20077, 14911, 16531, 276, + 20077, 14911, 16531, 322, + 20077, 14911, 16531, 520, + 20077, 14911, 16531, 694, + 20077, 14911, 16531, 744, + 20077, 14911, 16531, 784, + 20077, 14911, 16531, 864, + 20077, 14911, 16531, 960, + 20077, 14911, 16531, 1084, + 20077, 14911, 16531, 1132, + 20077, 14911, 16531, 1284, + 20077, 14911, 16531, 1542, + 20077, 14911, 16531, 1680, + 20077, 14911, 16531, 1696, + 20077, 14911, 16531, 1732, + 20077, 14911, 16531, 1776, + 20077, 14911, 16531, 1926, + 20077, 14911, 16531, 2000, + 20077, 14911, 16531, 2212, + 20077, 14911, 16531, 2368, + 20077, 14911, 16531, 2528, + 20077, 14911, 16531, 2800, + 20077, 14911, 16531, 2932, + 20077, 14911, 16531, 3034, + 20077, 14911, 16531, 3184, + 20077, 14911, 16531, 3380, + 20077, 14911, 16531, 3388, + 20077, 14911, 16531, 3690, + 20077, 14911, 16531, 3812, + 20077, 14911, 16531, 4036, + 20077, 14911, 16531, 6268, + 20077, 14911, 16531, 6294, + 20077, 14911, 16531, 7292, + 20077, 14911, 16531, 7856, + 20077, 14911, 16531, 8060, + 20077, 14911, 16531, 9860, + 20077, 14911, 16531, 10478, + 20077, 14911, 16531, 11834, + 20077, 16531, 82, + 20077, 16531, 204, + 20077, 16531, 234, + 20077, 16531, 276, + 20077, 16531, 322, + 20077, 16531, 520, + 20077, 16531, 694, + 20077, 16531, 744, + 20077, 16531, 784, + 20077, 16531, 864, + 20077, 16531, 880, + 20077, 16531, 960, + 20077, 16531, 1084, + 20077, 16531, 1132, + 20077, 16531, 1284, + 20077, 16531, 1542, + 20077, 16531, 1680, + 20077, 16531, 1696, + 20077, 16531, 1732, + 20077, 16531, 1776, + 20077, 16531, 1926, + 20077, 16531, 2000, + 20077, 16531, 2212, + 20077, 16531, 2368, + 20077, 16531, 2528, + 20077, 16531, 2800, + 20077, 16531, 2932, + 20077, 16531, 3034, + 20077, 16531, 3184, + 20077, 16531, 3380, + 20077, 16531, 3388, + 20077, 16531, 3690, + 20077, 16531, 3812, + 20077, 16531, 4036, + 20077, 16531, 6268, + 20077, 16531, 6294, + 20077, 16531, 7292, + 20077, 16531, 7437, 10574, + 20077, 16531, 7856, + 20077, 16531, 8060, + 20077, 16531, 9860, + 20077, 16531, 10478, + 20077, 16531, 11834, + 20077, 16531, 13156, + 20077, 16531, 16497, 10574, + 20077, 16531, 17465, 1542, + 20077, 17835, 16531, 82, + 20077, 17835, 16531, 204, + 20077, 17835, 16531, 276, + 20077, 17835, 16531, 322, + 20077, 17835, 16531, 520, + 20077, 17835, 16531, 694, + 20077, 17835, 16531, 744, + 20077, 17835, 16531, 784, + 20077, 17835, 16531, 864, + 20077, 17835, 16531, 960, + 20077, 17835, 16531, 1084, + 20077, 17835, 16531, 1132, + 20077, 17835, 16531, 1284, + 20077, 17835, 16531, 1542, + 20077, 17835, 16531, 1680, + 20077, 17835, 16531, 1696, + 20077, 17835, 16531, 1732, + 20077, 17835, 16531, 1776, + 20077, 17835, 16531, 1926, + 20077, 17835, 16531, 2000, + 20077, 17835, 16531, 2212, + 20077, 17835, 16531, 2368, + 20077, 17835, 16531, 2528, + 20077, 17835, 16531, 2800, + 20077, 17835, 16531, 2932, + 20077, 17835, 16531, 3034, + 20077, 17835, 16531, 3184, + 20077, 17835, 16531, 3380, + 20077, 17835, 16531, 3388, + 20077, 17835, 16531, 3690, + 20077, 17835, 16531, 3812, + 20077, 17835, 16531, 4036, + 20077, 17835, 16531, 6268, + 20077, 17835, 16531, 6294, + 20077, 17835, 16531, 7292, + 20077, 17835, 16531, 7856, + 20077, 17835, 16531, 8060, + 20077, 17835, 16531, 9860, + 20077, 17835, 16531, 10478, + 20077, 17835, 16531, 11834, + 20077, 20337, 17835, 16531, 82, + 20077, 20337, 17835, 16531, 204, + 20077, 20337, 17835, 16531, 234, + 20077, 20337, 17835, 16531, 276, + 20077, 20337, 17835, 16531, 322, + 20077, 20337, 17835, 16531, 520, + 20077, 20337, 17835, 16531, 694, + 20077, 20337, 17835, 16531, 744, + 20077, 20337, 17835, 16531, 784, + 20077, 20337, 17835, 16531, 864, + 20077, 20337, 17835, 16531, 880, + 20077, 20337, 17835, 16531, 960, + 20077, 20337, 17835, 16531, 1084, + 20077, 20337, 17835, 16531, 1132, + 20077, 20337, 17835, 16531, 1284, + 20077, 20337, 17835, 16531, 1542, + 20077, 20337, 17835, 16531, 1680, + 20077, 20337, 17835, 16531, 1696, + 20077, 20337, 17835, 16531, 1732, + 20077, 20337, 17835, 16531, 1776, + 20077, 20337, 17835, 16531, 1926, + 20077, 20337, 17835, 16531, 2000, + 20077, 20337, 17835, 16531, 2212, + 20077, 20337, 17835, 16531, 2368, + 20077, 20337, 17835, 16531, 2528, + 20077, 20337, 17835, 16531, 2800, + 20077, 20337, 17835, 16531, 2932, + 20077, 20337, 17835, 16531, 3034, + 20077, 20337, 17835, 16531, 3184, + 20077, 20337, 17835, 16531, 3380, + 20077, 20337, 17835, 16531, 3388, + 20077, 20337, 17835, 16531, 3690, + 20077, 20337, 17835, 16531, 3812, + 20077, 20337, 17835, 16531, 4036, + 20077, 20337, 17835, 16531, 6268, + 20077, 20337, 17835, 16531, 6294, + 20077, 20337, 17835, 16531, 7292, + 20077, 20337, 17835, 16531, 7437, 10574, + 20077, 20337, 17835, 16531, 7856, + 20077, 20337, 17835, 16531, 8060, + 20077, 20337, 17835, 16531, 9860, + 20077, 20337, 17835, 16531, 10478, + 20077, 20337, 17835, 16531, 11834, + 20077, 20337, 17835, 16531, 13156, + 20077, 20337, 17835, 16531, 16497, 10574, + 20077, 20337, 17835, 16531, 17465, 1542, + 20077, 21729, 21850, + 20080, + 20085, 1091, 6997, 11513, 19129, 6882, + 20085, 6996, + 20085, 6997, 11513, 2761, 13779, 897, 2761, 14911, 1432, + 20085, 6997, 11513, 10691, 6882, + 20085, 6997, 11513, 19129, 6882, + 20089, 518, + 20089, 10575, 14334, + 20089, 10575, 15000, + 20089, 10575, 15939, 14335, 12318, + 20089, 10575, 16588, + 20089, 10575, 17116, + 20089, 10575, 17534, + 20089, 10575, 19408, + 20089, 10575, 19540, + 20089, 10575, 19586, + 20089, 10575, 22047, 14335, 12318, + 20089, 10575, 23003, 14335, 12318, + 20089, 10575, 23070, + 20089, 13069, 2760, + 20089, 13069, 3240, + 20089, 13069, 3536, + 20089, 13069, 7036, + 20089, 13069, 7058, + 20089, 13069, 9358, + 20089, 13069, 11824, + 20089, 13069, 13150, + 20089, 13069, 14778, + 20089, 13069, 15116, + 20089, 14699, 10574, + 20089, 15407, 10575, 8, + 20089, 15407, 10575, 16, + 20089, 15407, 10575, 28, + 20089, 15407, 10575, 40, + 20089, 15407, 10575, 58, + 20089, 15407, 10575, 72, + 20089, 15407, 10575, 96, + 20089, 15407, 10575, 314, + 20089, 15407, 10575, 706, + 20089, 15407, 10575, 15877, 8, + 20089, 15407, 10575, 15877, 28, + 20089, 15407, 10575, 19415, 22, + 20089, 15407, 10575, 19415, 34, + 20089, 15407, 10575, 19415, 406, + 20089, 15407, 10575, 19415, 608, + 20089, 15407, 15877, 8, + 20089, 15407, 15877, 28, + 20089, 16531, 0, + 20089, 16531, 8, + 20089, 16531, 16, + 20089, 16531, 28, + 20089, 16531, 40, + 20089, 16531, 58, + 20089, 16531, 72, + 20089, 16531, 96, + 20089, 16531, 108, + 20089, 16531, 126, + 20089, 16531, 150, + 20089, 16531, 248, + 20089, 16531, 272, + 20089, 16531, 314, + 20089, 16531, 344, + 20089, 16531, 358, + 20089, 16531, 394, + 20089, 16531, 426, + 20089, 16531, 466, + 20089, 16531, 548, + 20089, 16531, 598, + 20089, 16531, 614, + 20089, 16531, 648, + 20089, 16531, 706, + 20089, 16531, 714, + 20089, 16531, 778, + 20089, 16531, 1000, + 20089, 16531, 1116, + 20089, 16531, 1214, + 20089, 16531, 1236, + 20089, 16531, 1588, + 20089, 16531, 1918, + 20089, 16531, 2036, + 20089, 16531, 2278, + 20089, 16531, 2574, + 20089, 16531, 2624, + 20089, 16531, 2698, + 20089, 16531, 2830, + 20089, 16531, 3212, + 20089, 16531, 3286, + 20089, 16531, 3422, + 20089, 16531, 3502, + 20089, 16531, 4042, + 20089, 16531, 6572, + 20089, 16531, 11082, + 20089, 16531, 19415, 22, + 20089, 16531, 19415, 34, + 20089, 16531, 19415, 406, + 20089, 16531, 19415, 608, + 20089, 23737, 10574, + 20091, 199, 14432, + 20091, 1890, + 20091, 3632, + 20091, 10575, 5455, 12514, + 20091, 10575, 12514, + 20091, 10575, 14334, + 20091, 10575, 15272, + 20091, 10575, 17534, + 20091, 10575, 17596, + 20091, 10575, 19408, + 20091, 12322, + 20091, 13069, 2760, + 20091, 13069, 3240, + 20091, 13069, 3536, + 20091, 13069, 7036, + 20091, 13069, 7058, + 20091, 13069, 9358, + 20091, 13069, 11824, + 20091, 13069, 13150, + 20091, 13069, 14778, + 20091, 13069, 15116, + 20091, 15150, + 20091, 15407, 10575, 16, + 20091, 15407, 10575, 40, + 20091, 15407, 10575, 58, + 20091, 15407, 10575, 72, + 20091, 15407, 10575, 96, + 20091, 15407, 10575, 186, + 20091, 15407, 10575, 314, + 20091, 15407, 10575, 522, + 20091, 15407, 10575, 706, + 20091, 16531, 0, + 20091, 16531, 16, + 20091, 16531, 40, + 20091, 16531, 58, + 20091, 16531, 72, + 20091, 16531, 96, + 20091, 16531, 108, + 20091, 16531, 126, + 20091, 16531, 150, + 20091, 16531, 186, + 20091, 16531, 228, + 20091, 16531, 248, + 20091, 16531, 272, + 20091, 16531, 314, + 20091, 16531, 344, + 20091, 16531, 358, + 20091, 16531, 394, + 20091, 16531, 426, + 20091, 16531, 466, + 20091, 16531, 522, + 20091, 16531, 548, + 20091, 16531, 598, + 20091, 16531, 614, + 20091, 16531, 648, + 20091, 16531, 706, + 20091, 16531, 714, + 20091, 16531, 778, + 20091, 16531, 796, + 20091, 16531, 1000, + 20091, 16531, 1116, + 20091, 16531, 1214, + 20091, 16531, 1236, + 20091, 16531, 1588, + 20091, 16531, 1918, + 20091, 16531, 2036, + 20091, 16531, 2278, + 20091, 16531, 2574, + 20091, 16531, 2624, + 20091, 16531, 2698, + 20091, 16531, 2830, + 20091, 16531, 3118, + 20091, 16531, 3212, + 20091, 16531, 3422, + 20091, 16531, 3502, + 20091, 16531, 6572, + 20091, 16531, 7300, + 20091, 16531, 8068, + 20091, 16531, 11082, + 20091, 23737, 10574, + 20096, + 20099, 18727, 2760, + 20099, 18727, 3240, + 20099, 18727, 3412, + 20099, 18727, 3536, + 20099, 18727, 7036, + 20099, 18727, 7058, + 20099, 18727, 9358, + 20099, 18727, 13150, + 20099, 18727, 14778, + 20099, 18727, 15116, + 20099, 18727, 17372, + 20099, 18727, 17474, + 20109, 12672, + 20112, + 20115, 1493, 3425, 5528, + 20115, 1493, 3425, 11486, + 20115, 1493, 3425, 16154, + 20115, 1493, 3425, 16247, 11504, + 20115, 1493, 3425, 16407, 8248, + 20115, 1493, 3425, 17637, 15436, + 20115, 1493, 3425, 18347, 14979, 20332, + 20115, 1493, 3425, 19565, 19282, + 20115, 1493, 3425, 19664, + 20115, 1493, 3425, 19709, 7026, + 20115, 1493, 3425, 19737, 16324, + 20115, 1493, 3425, 20283, 16598, + 20115, 1493, 3425, 20948, + 20115, 1493, 3425, 21787, 13140, + 20115, 1493, 11539, 521, 3425, 17970, + 20115, 1493, 12331, 22228, + 20115, 1493, 13408, + 20115, 1493, 13419, 14568, + 20115, 1493, 13419, 17318, + 20115, 1493, 13419, 22780, + 20115, 1493, 13419, 25902, + 20115, 1493, 13599, 15212, + 20115, 1493, 14031, 17916, + 20115, 1493, 14502, + 20115, 1493, 14911, 17318, + 20115, 1493, 14911, 25902, + 20115, 1493, 15799, 22228, + 20115, 1493, 15819, 19280, + 20115, 1493, 15963, 661, 8852, + 20115, 1493, 17022, + 20115, 1493, 18273, 20842, + 20115, 1493, 18630, + 20115, 1493, 18945, 17506, + 20115, 1493, 18996, + 20115, 1493, 19424, + 20115, 1493, 19550, + 20115, 1493, 19720, + 20115, 1493, 19774, + 20115, 1493, 19958, + 20115, 1493, 20146, + 20115, 1493, 20532, + 20115, 1493, 20854, + 20115, 1493, 20967, 13276, + 20115, 1493, 20986, + 20115, 1493, 21171, 507, 3425, 13806, + 20115, 1493, 21410, + 20115, 1493, 21425, 20842, + 20115, 1493, 21502, + 20115, 1493, 21504, + 20115, 1493, 21899, 12392, + 20115, 1493, 22279, 95, 3425, 21050, + 20115, 1493, 22280, + 20115, 1493, 22424, + 20115, 1493, 22446, + 20115, 1493, 22542, + 20115, 1493, 22726, + 20115, 1493, 22728, + 20115, 1493, 22826, + 20115, 1493, 22944, + 20115, 1493, 23114, + 20115, 1493, 23124, + 20115, 1493, 23370, + 20115, 1493, 23772, + 20115, 1493, 25750, + 20118, + 20123, 16531, 0, + 20123, 16531, 8, + 20123, 16531, 16, + 20123, 16531, 26, + 20123, 16531, 28, + 20123, 16531, 40, + 20123, 16531, 108, + 20123, 16531, 112, + 20123, 16531, 116, + 20123, 16531, 118, + 20123, 16531, 122, + 20123, 16531, 150, + 20123, 16531, 156, + 20123, 16531, 160, + 20123, 16531, 168, + 20123, 16531, 170, + 20123, 16531, 248, + 20123, 16531, 252, + 20123, 16531, 258, + 20123, 16531, 262, + 20123, 16531, 264, + 20123, 16531, 272, + 20123, 16531, 276, + 20123, 16531, 280, + 20123, 16531, 288, + 20123, 16531, 292, + 20123, 16531, 358, + 20123, 16531, 362, + 20123, 16531, 366, + 20123, 16531, 374, + 20123, 16531, 380, + 20123, 16531, 426, + 20123, 16531, 434, + 20123, 16531, 440, + 20123, 16531, 446, + 20123, 16531, 454, + 20123, 16531, 466, + 20123, 16531, 470, + 20123, 16531, 478, + 20123, 16531, 486, + 20123, 16531, 490, + 20123, 16531, 548, + 20123, 16531, 554, + 20123, 16531, 562, + 20123, 16531, 566, + 20123, 16531, 572, + 20123, 16531, 598, + 20123, 16531, 600, + 20123, 16531, 604, + 20123, 16531, 606, + 20123, 16531, 610, + 20123, 16531, 614, + 20123, 16531, 618, + 20123, 16531, 624, + 20123, 16531, 628, + 20123, 16531, 638, + 20123, 16531, 648, + 20123, 16531, 652, + 20123, 16531, 656, + 20123, 16531, 660, + 20123, 16531, 668, + 20123, 16531, 728, + 20123, 16531, 738, + 20123, 16531, 744, + 20123, 16531, 750, + 20123, 16531, 754, + 20123, 16531, 778, + 20123, 16531, 786, + 20123, 16531, 790, + 20123, 16531, 796, + 20123, 16531, 798, + 20123, 16531, 802, + 20123, 16531, 804, + 20123, 16531, 806, + 20123, 16531, 14911, 0, + 20123, 16531, 14911, 8, + 20123, 16531, 14911, 16, + 20123, 16531, 14911, 28, + 20123, 16531, 14911, 40, + 20123, 16531, 14911, 358, + 20123, 16531, 14911, 362, + 20123, 16531, 14911, 374, + 20123, 16531, 14911, 668, + 20123, 16531, 14911, 738, + 20123, 16531, 14911, 744, + 20123, 16531, 14911, 750, + 20123, 16531, 14911, 754, + 20123, 16531, 14911, 778, + 20123, 16531, 14911, 786, + 20123, 16531, 14911, 790, + 20123, 16531, 17709, 756, + 20123, 16531, 17709, 780, + 20123, 17539, 21517, 8808, + 20123, 17995, 11728, + 20123, 21517, 8808, + 20125, 10590, + 20126, + 20128, + 20134, + 20143, 17707, 16531, 276, + 20143, 17707, 16531, 554, + 20143, 17707, 16531, 2406, + 20143, 17707, 16531, 2676, + 20143, 17707, 16531, 3398, + 20143, 17707, 16531, 3750, + 20143, 17707, 16531, 5556, + 20143, 17707, 16531, 6066, + 20143, 17707, 16531, 7478, + 20143, 17707, 16531, 8002, + 20143, 17707, 16531, 9992, + 20143, 17707, 16531, 10120, + 20143, 17707, 16531, 10478, + 20143, 17707, 16531, 10914, + 20143, 17707, 16531, 11722, + 20143, 17707, 16531, 12354, + 20143, 17707, 16531, 13384, + 20143, 17707, 16531, 14720, + 20143, 17707, 16531, 15606, + 20143, 17707, 16531, 16010, + 20143, 17707, 16531, 16508, + 20143, 17707, 16531, 17060, + 20143, 17707, 16787, 2760, + 20143, 17707, 16787, 2761, 18280, + 20143, 17707, 16787, 2761, 20828, + 20143, 17707, 16787, 3412, + 20143, 17707, 16787, 3413, 20828, + 20143, 17707, 16787, 3536, + 20143, 17707, 16787, 15116, + 20143, 17707, 16787, 17474, + 20143, 17707, 19057, 10574, + 20145, 19986, + 20147, 7047, 10593, 17298, + 20152, + 20153, 18671, 11513, 20933, 964, + 20156, + 20157, 11513, 15147, 10574, + 20157, 11513, 15282, + 20157, 11513, 16095, 17264, + 20157, 11513, 18778, + 20157, 11513, 20920, + 20157, 11513, 21557, 12415, 11513, 7658, + 20157, 11513, 23882, + 20157, 15733, 1, 14559, 20406, + 20157, 17723, 11513, 14890, + 20157, 21382, + 20161, 18932, + 20163, 2301, 16420, + 20163, 2301, 16421, 11513, 16421, 12318, + 20163, 2751, 10574, + 20163, 8271, 36, + 20163, 20549, 8808, + 20163, 20924, + 20163, 21732, + 20163, 23213, 8808, + 20163, 23284, + 20173, 5987, 17298, + 20173, 9764, + 20173, 9915, 16802, + 20173, 13094, + 20173, 15890, + 20173, 16272, + 20173, 17299, 1493, 19604, + 20173, 22509, 20709, 17298, + 20175, 8281, 21804, + 20175, 9817, 5456, + 20175, 9817, 5457, 5456, + 20175, 9817, 12368, + 20175, 9817, 13844, + 20175, 9817, 13898, + 20175, 9817, 15155, 19352, + 20175, 9817, 15460, + 20175, 9817, 16554, + 20175, 9817, 16580, + 20175, 9817, 18804, + 20175, 9817, 18876, + 20175, 9817, 21512, + 20175, 10575, 12640, + 20175, 10575, 12641, 10902, + 20175, 10575, 13786, + 20175, 10575, 19438, + 20175, 10575, 21722, + 20175, 13069, 2760, + 20175, 13069, 3240, + 20175, 13069, 3536, + 20175, 13069, 7036, + 20175, 13069, 7058, + 20175, 13069, 9358, + 20175, 13069, 11824, + 20175, 13069, 13150, + 20175, 13069, 14778, + 20175, 13069, 15116, + 20175, 14659, 21804, + 20175, 15407, 10575, 10728, + 20175, 15407, 10575, 10729, 16644, + 20175, 15407, 10575, 11544, + 20175, 15407, 10575, 11545, 13952, + 20175, 15407, 10575, 13077, 9014, + 20175, 15407, 10575, 14520, + 20175, 15407, 10575, 17314, + 20175, 15407, 10575, 17330, + 20175, 15407, 10575, 17396, + 20175, 16531, 0, + 20175, 16531, 8, + 20175, 16531, 16, + 20175, 16531, 17, 8018, + 20175, 16531, 28, + 20175, 16531, 40, + 20175, 16531, 72, + 20175, 16531, 108, + 20175, 16531, 109, 14048, + 20175, 16531, 126, + 20175, 16531, 127, 14048, + 20175, 16531, 150, + 20175, 16531, 151, 21570, + 20175, 16531, 248, + 20175, 16531, 249, 14048, + 20175, 16531, 272, + 20175, 16531, 314, + 20175, 16531, 344, + 20175, 16531, 345, 21570, + 20175, 16531, 358, + 20175, 16531, 359, 14048, + 20175, 16531, 359, 14746, + 20175, 16531, 394, + 20175, 16531, 426, + 20175, 16531, 466, + 20175, 16531, 467, 14048, + 20175, 16531, 548, + 20175, 16531, 549, 12646, + 20175, 16531, 549, 14048, + 20175, 16531, 598, + 20175, 16531, 599, 12336, + 20175, 16531, 614, + 20175, 16531, 615, 14048, + 20175, 16531, 615, 21570, + 20175, 16531, 648, + 20175, 16531, 649, 14048, + 20175, 16531, 738, + 20175, 16531, 778, + 20175, 16531, 1214, + 20175, 16531, 1215, 21570, + 20175, 16531, 2574, + 20175, 16531, 2575, 13792, + 20175, 16531, 2575, 13793, 18972, + 20175, 16531, 2698, + 20175, 16531, 2699, 14048, + 20175, 16531, 3502, + 20175, 16531, 3503, 21570, + 20175, 17465, 9817, 18876, + 20175, 18806, + 20175, 21143, 10575, 12600, + 20175, 21143, 10575, 13676, + 20175, 21143, 10575, 18832, + 20175, 23510, + 20178, + 20180, + 20183, 18727, 2760, + 20183, 18727, 3240, + 20183, 18727, 3412, + 20183, 18727, 3536, + 20183, 18727, 7036, + 20183, 18727, 7058, + 20183, 18727, 9358, + 20183, 18727, 11824, + 20183, 18727, 13150, + 20183, 18727, 14778, + 20183, 18727, 15116, + 20183, 18727, 16110, + 20183, 18727, 17472, + 20183, 18727, 18148, + 20183, 18727, 19116, + 20183, 18727, 19966, + 20183, 18727, 20052, + 20183, 18727, 20368, + 20183, 18727, 20824, + 20183, 18727, 21854, + 20184, + 20193, 16531, 0, + 20193, 16531, 8, + 20193, 16531, 16, + 20193, 16531, 26, + 20193, 16531, 28, + 20193, 16531, 40, + 20193, 16531, 108, + 20193, 16531, 112, + 20193, 16531, 116, + 20193, 16531, 118, + 20193, 16531, 122, + 20193, 16531, 150, + 20193, 16531, 156, + 20193, 16531, 160, + 20193, 16531, 168, + 20193, 16531, 170, + 20193, 16531, 248, + 20193, 16531, 252, + 20193, 16531, 258, + 20193, 16531, 262, + 20193, 16531, 264, + 20193, 16531, 272, + 20193, 16531, 276, + 20193, 16531, 280, + 20193, 16531, 288, + 20193, 16531, 292, + 20193, 16531, 358, + 20193, 16531, 362, + 20193, 16531, 366, + 20193, 16531, 374, + 20193, 16531, 380, + 20193, 16531, 426, + 20193, 16531, 434, + 20193, 16531, 440, + 20193, 16531, 446, + 20193, 16531, 454, + 20193, 16531, 466, + 20193, 16531, 470, + 20193, 16531, 478, + 20193, 16531, 486, + 20193, 16531, 490, + 20193, 16531, 548, + 20193, 16531, 554, + 20193, 16531, 562, + 20193, 16531, 566, + 20193, 16531, 572, + 20193, 16531, 598, + 20193, 16531, 600, + 20193, 16531, 604, + 20193, 16531, 606, + 20193, 16531, 610, + 20193, 16531, 614, + 20193, 16531, 618, + 20193, 16531, 624, + 20193, 16531, 628, + 20193, 16531, 638, + 20193, 16531, 648, + 20193, 16531, 652, + 20193, 16531, 656, + 20193, 16531, 660, + 20193, 16531, 668, + 20193, 16531, 714, + 20193, 16531, 718, + 20193, 16531, 720, + 20193, 16531, 722, + 20193, 16531, 728, + 20193, 16531, 738, + 20193, 16531, 744, + 20193, 16531, 750, + 20193, 16531, 754, + 20193, 16531, 778, + 20193, 16531, 786, + 20193, 16531, 790, + 20193, 16531, 796, + 20193, 16531, 798, + 20193, 16531, 802, + 20193, 16531, 804, + 20193, 16531, 806, + 20193, 16531, 14911, 0, + 20193, 16531, 14911, 8, + 20193, 16531, 14911, 16, + 20193, 16531, 14911, 26, + 20193, 16531, 14911, 28, + 20193, 16531, 14911, 40, + 20193, 16531, 14911, 272, + 20193, 16531, 14911, 276, + 20193, 16531, 14911, 280, + 20193, 16531, 14911, 288, + 20193, 16531, 14911, 292, + 20193, 16531, 14911, 358, + 20193, 16531, 14911, 362, + 20193, 16531, 14911, 374, + 20193, 16531, 14911, 380, + 20193, 16531, 14911, 454, + 20193, 16531, 14911, 490, + 20193, 16531, 14911, 598, + 20193, 16531, 14911, 600, + 20193, 16531, 14911, 604, + 20193, 16531, 14911, 606, + 20193, 16531, 14911, 610, + 20193, 16531, 14911, 624, + 20193, 16531, 14911, 638, + 20193, 16531, 14911, 660, + 20193, 16531, 14911, 668, + 20193, 16531, 14911, 738, + 20193, 16531, 14911, 744, + 20193, 16531, 14911, 750, + 20193, 16531, 14911, 754, + 20193, 16531, 14911, 778, + 20193, 16531, 14911, 786, + 20193, 16531, 14911, 790, + 20193, 16531, 16669, 17402, + 20193, 16531, 16669, 17404, + 20193, 16531, 16669, 17406, + 20193, 16531, 16669, 17408, + 20193, 16531, 16669, 17412, + 20193, 16531, 16669, 17414, + 20193, 16531, 16669, 21627, 17400, + 20193, 16531, 16669, 21627, 17402, + 20193, 16531, 16669, 21627, 17404, + 20193, 16531, 16669, 21627, 17406, + 20193, 16531, 16669, 21627, 17408, + 20193, 16531, 16669, 21627, 17412, + 20193, 16531, 16669, 21627, 17414, + 20193, 16531, 17709, 8, + 20193, 16531, 17709, 756, + 20193, 16531, 17709, 780, + 20193, 16531, 17709, 782, + 20193, 16661, 1290, + 20193, 17539, 21517, 8808, + 20193, 17995, 8140, + 20193, 21517, 8808, + 20196, + 20197, 897, 14028, + 20201, 16890, + 20213, 14975, 897, 5978, + 20215, 3370, + 20221, 11046, + 20241, 9783, 217, 20412, + 20242, + 20252, + 20263, 10575, 14334, + 20263, 16531, 0, + 20263, 16531, 8, + 20263, 16531, 16, + 20263, 16531, 28, + 20263, 16531, 40, + 20263, 16531, 108, + 20263, 16531, 126, + 20263, 16531, 150, + 20263, 16531, 248, + 20263, 16531, 272, + 20263, 16531, 344, + 20263, 16531, 358, + 20263, 16531, 394, + 20263, 16531, 426, + 20263, 16531, 466, + 20263, 16531, 548, + 20263, 16531, 598, + 20263, 16531, 614, + 20263, 16531, 648, + 20263, 16531, 714, + 20263, 16531, 1000, + 20263, 16531, 1116, + 20263, 16531, 1214, + 20263, 16531, 1236, + 20263, 16531, 1588, + 20263, 16531, 1918, + 20263, 16531, 2036, + 20263, 16531, 2624, + 20263, 16531, 2698, + 20263, 16531, 2830, + 20263, 16531, 3118, + 20263, 16531, 3422, + 20263, 16531, 3502, + 20263, 16531, 6572, + 20263, 16531, 11082, + 20263, 19057, 8808, + 20263, 20241, 10508, + 20263, 23737, 10574, + 20270, + 20281, 17298, + 20288, + 20295, 124, + 20295, 12378, + 20295, 12379, 11513, 9783, 921, 16115, 323, 12415, 20501, 699, 897, 8280, + 20295, 12379, 11513, 9783, 921, 16115, 323, 12415, 20501, 699, 897, 14658, + 20295, 12379, 11513, 9783, 921, 16115, 323, 12415, 20501, 6701, 897, 8280, + 20295, 12379, 11513, 9783, 921, 16115, 323, 12415, 20501, 6701, 897, 14658, + 20295, 12379, 11513, 9783, 921, 16115, 323, 12415, 20501, 8281, 897, 698, + 20295, 12379, 11513, 9783, 921, 16115, 323, 12415, 20501, 8281, 897, 6700, + 20295, 12379, 11513, 9783, 921, 16115, 323, 12415, 20501, 14659, 897, 698, + 20295, 12379, 11513, 9783, 921, 16115, 323, 12415, 20501, 14659, 897, 6700, + 20295, 12379, 18763, 8280, + 20295, 14659, 12379, 11513, 1290, + 20299, 12922, + 20299, 20549, 8808, + 20299, 23213, 8808, + 20303, 17941, 16531, 0, + 20303, 17941, 16531, 8, + 20303, 17941, 16531, 16, + 20303, 17941, 16531, 28, + 20303, 17941, 16531, 108, + 20303, 17941, 16531, 150, + 20303, 17941, 16531, 358, + 20303, 17941, 16531, 394, + 20303, 17941, 16531, 426, + 20303, 17941, 16531, 466, + 20303, 17941, 16531, 470, + 20303, 17941, 16531, 548, + 20303, 17941, 16531, 582, + 20303, 17941, 16531, 598, + 20303, 17941, 16531, 614, + 20303, 17941, 16531, 618, + 20303, 17941, 16531, 648, + 20303, 17941, 16531, 652, + 20303, 17941, 16531, 660, + 20303, 17941, 16531, 738, + 20303, 17941, 16531, 778, + 20303, 17941, 16531, 1722, + 20303, 17941, 16531, 2036, + 20303, 17941, 16531, 17709, 614, + 20303, 17941, 16787, 2760, + 20303, 17941, 16787, 2761, 18280, + 20303, 17941, 16787, 2761, 18281, 20828, + 20303, 17941, 16787, 2761, 20828, + 20303, 17941, 16787, 3240, + 20303, 17941, 16787, 3241, 18280, + 20303, 17941, 16787, 3241, 18281, 20828, + 20303, 17941, 16787, 3241, 20828, + 20303, 17941, 16787, 3412, + 20303, 17941, 16787, 3413, 20828, + 20303, 17941, 16787, 3536, + 20303, 17941, 16787, 3537, 18280, + 20303, 17941, 16787, 3537, 18281, 20828, + 20303, 17941, 16787, 3537, 20828, + 20303, 17941, 16787, 7036, + 20303, 17941, 16787, 7037, 18280, + 20303, 17941, 16787, 7037, 18281, 20828, + 20303, 17941, 16787, 7037, 20828, + 20303, 17941, 16787, 7058, + 20303, 17941, 16787, 7059, 18280, + 20303, 17941, 16787, 7059, 18281, 20828, + 20303, 17941, 16787, 7059, 20828, + 20303, 17941, 16787, 9358, + 20303, 17941, 16787, 9359, 18280, + 20303, 17941, 16787, 9359, 18281, 20828, + 20303, 17941, 16787, 9359, 20828, + 20303, 17941, 16787, 13150, + 20303, 17941, 16787, 13151, 18280, + 20303, 17941, 16787, 13151, 18281, 20828, + 20303, 17941, 16787, 13151, 20828, + 20303, 17941, 16787, 13254, + 20303, 17941, 16787, 13255, 20828, + 20303, 17941, 16787, 13284, + 20303, 17941, 16787, 13285, 20828, + 20303, 17941, 16787, 14778, + 20303, 17941, 16787, 14779, 18280, + 20303, 17941, 16787, 14779, 18281, 20828, + 20303, 17941, 16787, 14779, 20828, + 20303, 17941, 16787, 14876, + 20303, 17941, 16787, 14877, 20828, + 20303, 17941, 16787, 15116, + 20303, 17941, 16787, 15117, 18280, + 20303, 17941, 16787, 15117, 18281, 20828, + 20303, 17941, 16787, 15117, 20828, + 20303, 17941, 16787, 16109, 20828, + 20303, 17941, 16787, 16745, 20828, + 20303, 17941, 16787, 17372, + 20303, 17941, 16787, 17373, 20828, + 20303, 17941, 16787, 17474, + 20303, 17941, 16787, 17475, 20828, + 20303, 17941, 16787, 19070, + 20303, 17941, 16787, 19071, 20828, + 20303, 17941, 20055, 2761, 7428, + 20303, 17941, 20055, 2761, 19356, + 20303, 17941, 20055, 3241, 20900, + 20303, 17941, 20055, 3413, 20900, + 20303, 17941, 20055, 3537, 20900, + 20303, 17941, 20055, 7037, 20900, + 20303, 17941, 20055, 7059, 20900, + 20303, 17941, 20055, 9359, 20900, + 20303, 17941, 20055, 13151, 20900, + 20303, 17941, 20055, 14779, 20900, + 20303, 17941, 20055, 15117, 20900, + 20303, 17941, 20055, 16111, 20900, + 20303, 17941, 20249, 1872, + 20303, 17941, 20249, 3096, + 20303, 23863, 16531, 0, + 20303, 23863, 16531, 8, + 20303, 23863, 16531, 16, + 20303, 23863, 16531, 28, + 20303, 23863, 16531, 108, + 20303, 23863, 16531, 150, + 20303, 23863, 16531, 358, + 20303, 23863, 16531, 394, + 20303, 23863, 16531, 426, + 20303, 23863, 16531, 466, + 20303, 23863, 16531, 470, + 20303, 23863, 16531, 548, + 20303, 23863, 16531, 582, + 20303, 23863, 16531, 598, + 20303, 23863, 16531, 614, + 20303, 23863, 16531, 618, + 20303, 23863, 16531, 648, + 20303, 23863, 16531, 652, + 20303, 23863, 16531, 660, + 20303, 23863, 16531, 738, + 20303, 23863, 16531, 778, + 20303, 23863, 16531, 1722, + 20303, 23863, 16531, 2036, + 20303, 23863, 16531, 5962, + 20303, 23863, 16531, 9116, + 20303, 23863, 16531, 9238, + 20303, 23863, 16531, 10076, + 20303, 23863, 16531, 10356, + 20303, 23863, 16531, 10834, + 20303, 23863, 16531, 10882, + 20303, 23863, 17299, 11382, + 20303, 23863, 17299, 17528, + 20307, 3537, 17149, 9787, 8350, + 20307, 3537, 17149, 16400, + 20307, 8351, 9787, 3537, 17148, + 20307, 8351, 9787, 14836, + 20307, 12554, + 20307, 14837, 9787, 8350, + 20307, 19318, + 20307, 21734, + 20307, 22038, + 20309, 13944, + 20309, 16332, + 20312, + 20314, + 20319, 12555, 11513, 20163, 12554, + 20319, 16531, 699, 10850, + 20319, 16531, 699, 21022, + 20319, 16531, 704, + 20319, 16531, 1291, 14890, + 20319, 16531, 1291, 20933, 964, + 20319, 16531, 1291, 22495, 964, + 20319, 16531, 1393, 2301, 11032, + 20319, 16531, 1393, 7521, 11032, + 20319, 16531, 2301, 699, 21022, + 20319, 16531, 2301, 6701, 21022, + 20319, 16531, 2301, 8281, 12414, + 20319, 16531, 2301, 8281, 21022, + 20319, 16531, 2301, 10150, + 20319, 16531, 2301, 11033, 964, + 20319, 16531, 2301, 12321, 15678, + 20319, 16531, 2301, 13417, 15678, + 20319, 16531, 2301, 14659, 21022, + 20319, 16531, 2301, 15140, + 20319, 16531, 2301, 16093, 11033, 964, + 20319, 16531, 2301, 16093, 21555, 11033, 964, + 20319, 16531, 2301, 16586, + 20319, 16531, 2301, 20163, 23213, 8808, + 20319, 16531, 2301, 20933, 8320, + 20319, 16531, 2301, 21555, 11033, 964, + 20319, 16531, 2301, 22223, 15678, + 20319, 16531, 2429, 11033, 964, + 20319, 16531, 2429, 16093, 11033, 964, + 20319, 16531, 2429, 16093, 21555, 11033, 964, + 20319, 16531, 2429, 21555, 11033, 964, + 20319, 16531, 3943, 21183, 11033, 8808, + 20319, 16531, 6701, 10850, + 20319, 16531, 6701, 21022, + 20319, 16531, 7429, 22983, 12916, + 20319, 16531, 7521, 11033, 964, + 20319, 16531, 7521, 16093, 11033, 964, + 20319, 16531, 7521, 16093, 21555, 11033, 964, + 20319, 16531, 7521, 21555, 11033, 964, + 20319, 16531, 8281, 7429, 10150, + 20319, 16531, 8281, 10850, + 20319, 16531, 8281, 21022, + 20319, 16531, 9783, 14808, + 20319, 16531, 9905, 10574, + 20319, 16531, 11649, 21183, 11033, 8808, + 20319, 16531, 12321, 15678, + 20319, 16531, 12497, 2301, 11032, + 20319, 16531, 12497, 7521, 11032, + 20319, 16531, 12916, + 20319, 16531, 12935, 15678, + 20319, 16531, 13417, 15678, + 20319, 16531, 13839, 14659, 15975, 12378, + 20319, 16531, 14005, 10574, + 20319, 16531, 14570, + 20319, 16531, 14659, 7429, 10150, + 20319, 16531, 14659, 10850, + 20319, 16531, 14659, 21022, + 20319, 16531, 14808, + 20319, 16531, 14837, 16121, 10574, + 20319, 16531, 14911, 0, + 20319, 16531, 14911, 2, + 20319, 16531, 14911, 3, 11513, 7658, + 20319, 16531, 14911, 4, + 20319, 16531, 14911, 5, 11513, 6376, + 20319, 16531, 14911, 6, + 20319, 16531, 14911, 7, 11513, 7658, + 20319, 16531, 14911, 7, 11513, 7659, 897, 10856, + 20319, 16531, 14911, 7, 11513, 10856, + 20319, 16531, 14911, 8, + 20319, 16531, 14911, 10, + 20319, 16531, 14911, 12, + 20319, 16531, 14911, 13, 11513, 7658, + 20319, 16531, 14911, 14, + 20319, 16531, 14911, 15, 11513, 7658, + 20319, 16531, 14911, 15, 11513, 17264, + 20319, 16531, 14911, 17, 11513, 17264, + 20319, 16531, 14911, 18, + 20319, 16531, 14911, 19, 11513, 23790, + 20319, 16531, 14911, 20, + 20319, 16531, 14911, 22, + 20319, 16531, 14911, 23, 11513, 6058, + 20319, 16531, 14911, 23, 11513, 16661, 15140, + 20319, 16531, 14911, 23, 11513, 18791, 7658, + 20319, 16531, 14911, 23, 11513, 20163, 8271, 36, + 20319, 16531, 14911, 23, 11513, 21813, 7658, + 20319, 16531, 14911, 23, 11513, 21813, 7659, 897, 6058, + 20319, 16531, 14911, 24, + 20319, 16531, 14911, 25, 11513, 7658, + 20319, 16531, 14911, 27, 11513, 8281, 7658, + 20319, 16531, 14911, 27, 11513, 21813, 7658, + 20319, 16531, 14911, 28, + 20319, 16531, 14911, 29, 11513, 17264, + 20319, 16531, 14911, 30, + 20319, 16531, 14911, 32, + 20319, 16531, 14911, 34, + 20319, 16531, 14911, 35, 11513, 10856, + 20319, 16531, 14911, 35, 11513, 20028, + 20319, 16531, 14911, 36, + 20319, 16531, 14911, 37, 11513, 6376, + 20319, 16531, 14911, 37, 11513, 7658, + 20319, 16531, 14911, 38, + 20319, 16531, 14911, 39, 11513, 18791, 7658, + 20319, 16531, 14911, 39, 11513, 21813, 7658, + 20319, 16531, 14911, 40, + 20319, 16531, 14911, 41, 964, + 20319, 16531, 14911, 41, 11513, 8281, 7658, + 20319, 16531, 14911, 42, + 20319, 16531, 14911, 43, 11513, 7658, + 20319, 16531, 14911, 43, 11513, 14659, 7658, + 20319, 16531, 14911, 44, + 20319, 16531, 14911, 46, + 20319, 16531, 14911, 48, + 20319, 16531, 14911, 50, + 20319, 16531, 14911, 51, 11513, 6376, + 20319, 16531, 14911, 51, 11513, 21813, 7658, + 20319, 16531, 14911, 66, + 20319, 16531, 14911, 175, 17994, + 20319, 16531, 14911, 175, 17995, 11513, 6376, + 20319, 16531, 14911, 175, 17995, 11513, 21813, 7658, + 20319, 16531, 14911, 415, 17994, + 20319, 16531, 14911, 425, 17994, + 20319, 16531, 14911, 651, 17995, 11513, 6376, + 20319, 16531, 14911, 665, 17994, + 20319, 16531, 14911, 665, 17995, 11513, 21813, 7658, + 20319, 16531, 14911, 880, + 20319, 16531, 14911, 1120, + 20319, 16531, 14911, 1394, + 20319, 16531, 14911, 1412, + 20319, 16531, 14911, 1422, + 20319, 16531, 14911, 1436, + 20319, 16531, 14911, 2834, + 20319, 16531, 14911, 3473, 7429, 28, + 20319, 16531, 14911, 6064, + 20319, 16531, 14911, 6635, 17994, + 20319, 16531, 14911, 7013, 17994, + 20319, 16531, 14911, 7470, + 20319, 16531, 14911, 7471, 11513, 7658, + 20319, 16531, 14911, 7818, + 20319, 16531, 14911, 8290, + 20319, 16531, 14911, 8291, 11513, 21813, 7658, + 20319, 16531, 14911, 9783, 8, + 20319, 16531, 14911, 9783, 28, + 20319, 16531, 14911, 10095, 7670, + 20319, 16531, 14911, 10911, 17994, + 20319, 16531, 14911, 12366, + 20319, 16531, 14911, 13050, + 20319, 16531, 14911, 13332, + 20319, 16531, 14911, 13421, 2834, + 20319, 16531, 14911, 13421, 13332, + 20319, 16531, 14911, 14756, + 20319, 16531, 14911, 15096, + 20319, 16531, 14911, 15787, 28, + 20319, 16531, 14911, 15827, 7429, 28, + 20319, 16531, 14911, 15949, 14428, + 20319, 16531, 14911, 15949, 20587, 9783, 8, + 20319, 16531, 14911, 17089, 12, + 20319, 16531, 14911, 17465, 0, + 20319, 16531, 14911, 17465, 14, + 20319, 16531, 14911, 17465, 16, + 20319, 16531, 14911, 17465, 24, + 20319, 16531, 14911, 17465, 25, 11513, 8351, 2232, + 20319, 16531, 14911, 17465, 34, + 20319, 16531, 14911, 17465, 35, 11513, 7658, + 20319, 16531, 14911, 17465, 35, 11513, 8351, 2232, + 20319, 16531, 14911, 17465, 35, 11513, 8351, 2233, 897, 21813, 7658, + 20319, 16531, 14911, 17465, 42, + 20319, 16531, 14911, 17465, 44, + 20319, 16531, 14911, 17465, 48, + 20319, 16531, 14911, 17465, 49, 11513, 6058, + 20319, 16531, 14911, 17465, 66, + 20319, 16531, 14911, 17465, 9783, 8, + 20319, 16531, 14911, 17465, 12366, + 20319, 16531, 14911, 17835, 2, + 20319, 16531, 14911, 17835, 12, + 20319, 16531, 14911, 17835, 13, 11513, 7658, + 20319, 16531, 14911, 17835, 14, + 20319, 16531, 14911, 17835, 16, + 20319, 16531, 14911, 17835, 17, 11513, 17264, + 20319, 16531, 14911, 17835, 22, + 20319, 16531, 14911, 17835, 23, 11513, 6058, + 20319, 16531, 14911, 17835, 26, + 20319, 16531, 14911, 17835, 34, + 20319, 16531, 14911, 17835, 40, + 20319, 16531, 14911, 17835, 48, + 20319, 16531, 14911, 17835, 58, + 20319, 16531, 14911, 17835, 504, + 20319, 16531, 14911, 17835, 20163, 34, + 20319, 16531, 14911, 18019, 19, 11513, 17264, + 20319, 16531, 14911, 18019, 19, 11513, 17265, 897, 7658, + 20319, 16531, 14911, 19378, + 20319, 16531, 14911, 20241, 504, + 20319, 16531, 14911, 20587, 8, + 20319, 16531, 14911, 20587, 9783, 8, + 20319, 16531, 14911, 20587, 18213, 10696, + 20319, 16531, 14911, 20659, 40, + 20319, 16531, 16031, 12704, + 20319, 16531, 16095, 14570, + 20319, 16531, 16095, 22172, + 20319, 16531, 16586, + 20319, 16531, 16661, 13417, 15678, + 20319, 16531, 16661, 16095, 12321, 15678, + 20319, 16531, 16661, 16095, 13417, 15678, + 20319, 16531, 17007, 699, 12414, + 20319, 16531, 17007, 6701, 12414, + 20319, 16531, 17007, 12916, + 20319, 16531, 17007, 20163, 23213, 8808, + 20319, 16531, 17007, 23213, 8808, + 20319, 16531, 17025, 7658, + 20319, 16531, 17257, 897, 2301, 11032, + 20319, 16531, 17257, 897, 7521, 11032, + 20319, 16531, 17465, 12922, + 20319, 16531, 17835, 0, + 20319, 16531, 17835, 2, + 20319, 16531, 17835, 4, + 20319, 16531, 17835, 6, + 20319, 16531, 17835, 8, + 20319, 16531, 17835, 10, + 20319, 16531, 17835, 12, + 20319, 16531, 17835, 14, + 20319, 16531, 17835, 15, 11513, 17264, + 20319, 16531, 17835, 16, + 20319, 16531, 17835, 18, + 20319, 16531, 17835, 20, + 20319, 16531, 17835, 22, + 20319, 16531, 17835, 24, + 20319, 16531, 17835, 26, + 20319, 16531, 17835, 28, + 20319, 16531, 17835, 30, + 20319, 16531, 17835, 32, + 20319, 16531, 17835, 34, + 20319, 16531, 17835, 38, + 20319, 16531, 17835, 40, + 20319, 16531, 17835, 42, + 20319, 16531, 17835, 44, + 20319, 16531, 17835, 66, + 20319, 16531, 17835, 534, + 20319, 16531, 17835, 15787, 2, + 20319, 16531, 17835, 20587, 8, + 20319, 16531, 17835, 20587, 26, + 20319, 16531, 17853, 8281, 7429, 10150, + 20319, 16531, 17853, 14659, 7429, 10150, + 20319, 16531, 17873, 11033, 3943, 594, + 20319, 16531, 17873, 11033, 3943, 610, + 20319, 16531, 17873, 11033, 3943, 9886, + 20319, 16531, 17873, 11033, 3943, 14786, + 20319, 16531, 17873, 11033, 11649, 594, + 20319, 16531, 17873, 11033, 11649, 610, + 20319, 16531, 17873, 11033, 11649, 9886, + 20319, 16531, 17873, 11033, 11649, 14786, + 20319, 16531, 18213, 10696, + 20319, 16531, 18213, 10697, 11513, 17264, + 20319, 16531, 18497, 12704, + 20319, 16531, 19416, + 20319, 16531, 19529, 12704, + 20319, 16531, 19617, 12704, + 20319, 16531, 19759, 204, + 20319, 16531, 19759, 7437, 10574, + 20319, 16531, 19759, 10629, 10574, + 20319, 16531, 19759, 14911, 0, + 20319, 16531, 19759, 14911, 8, + 20319, 16531, 19759, 14911, 16, + 20319, 16531, 19759, 14911, 28, + 20319, 16531, 19759, 14911, 40, + 20319, 16531, 19759, 14911, 112, + 20319, 16531, 19759, 14911, 156, + 20319, 16531, 19759, 14911, 188, + 20319, 16531, 19759, 14911, 200, + 20319, 16531, 19759, 14911, 202, + 20319, 16531, 19759, 14911, 212, + 20319, 16531, 19759, 14911, 214, + 20319, 16531, 19759, 14911, 215, 11513, 21186, + 20319, 16531, 19759, 14911, 272, + 20319, 16531, 19759, 14911, 306, + 20319, 16531, 19759, 14911, 346, + 20319, 16531, 19759, 14911, 358, + 20319, 16531, 19759, 14911, 554, + 20319, 16531, 19759, 14911, 652, + 20319, 16531, 19759, 14911, 718, + 20319, 16531, 19759, 14911, 790, + 20319, 16531, 19759, 14911, 798, + 20319, 16531, 19759, 14911, 1118, + 20319, 16531, 19759, 14911, 1590, + 20319, 16531, 19759, 14911, 3212, + 20319, 16531, 19759, 14911, 3490, + 20319, 16531, 19759, 14911, 4044, + 20319, 16531, 19759, 14911, 6752, + 20319, 16531, 19759, 14911, 11680, + 20319, 16531, 19759, 14911, 11681, 11513, 5967, 3924, + 20319, 16531, 19759, 14911, 14756, + 20319, 16531, 19759, 14911, 15787, 28, + 20319, 16531, 19759, 14911, 20432, + 20319, 16531, 19759, 14911, 20729, 40, + 20319, 16531, 19759, 14911, 20729, 41, 11513, 17264, + 20319, 16531, 19759, 14911, 36353, 16, + 20319, 16531, 20077, 2528, + 20319, 16531, 20587, 12922, + 20319, 16531, 20587, 18213, 10696, + 20319, 16531, 20587, 18213, 10697, 11513, 17264, + 20319, 16531, 20933, 8320, + 20319, 16531, 21385, 11033, 964, + 20319, 16531, 21385, 16093, 11033, 964, + 20319, 16531, 21385, 16093, 21555, 11033, 964, + 20319, 16531, 21385, 21555, 11033, 964, + 20319, 16531, 21813, 12705, 11513, 21813, 7658, + 20319, 16531, 22172, + 20319, 16531, 22223, 15678, + 20319, 16531, 22441, 11033, 964, + 20319, 16531, 22441, 16093, 11033, 964, + 20319, 16531, 22441, 16093, 21555, 11033, 964, + 20319, 16531, 22441, 21555, 11033, 964, + 20319, 16531, 22983, 12916, + 20319, 16531, 23679, 7429, 22983, 12916, + 20319, 16531, 23679, 22983, 12916, + 20319, 16531, 23716, + 20323, 1493, 3942, + 20323, 1493, 11648, + 20323, 1493, 13140, + 20324, + 20328, + 20330, + 20332, + 20333, 18962, + 20333, 19652, + 20333, 21054, + 20338, + 20341, 18655, 14258, + 20342, + 20343, 15282, + 20343, 26134, + 20344, + 20345, 12714, + 20349, 9828, + 20349, 13069, 17124, + 20355, 17881, 13069, 11824, + 20355, 17881, 13783, 17835, 16531, 0, + 20355, 17881, 13783, 17835, 16531, 2, + 20355, 17881, 13783, 17835, 16531, 4, + 20355, 17881, 13783, 17835, 16531, 6, + 20355, 17881, 13783, 17835, 16531, 8, + 20355, 17881, 13783, 17835, 16531, 10, + 20355, 17881, 13783, 17835, 16531, 12, + 20355, 17881, 13783, 17835, 16531, 14, + 20355, 17881, 13783, 17835, 16531, 16, + 20355, 17881, 13783, 17835, 16531, 18, + 20355, 17881, 13783, 17835, 16531, 20, + 20355, 17881, 13783, 17835, 16531, 22, + 20355, 17881, 13783, 17835, 16531, 24, + 20355, 17881, 13783, 17835, 16531, 26, + 20355, 17881, 13783, 17835, 16531, 28, + 20355, 17881, 13783, 17835, 16531, 30, + 20355, 17881, 13783, 17835, 16531, 32, + 20355, 17881, 13783, 17835, 16531, 34, + 20355, 17881, 13783, 17835, 16531, 36, + 20355, 17881, 13783, 17835, 16531, 38, + 20355, 17881, 13783, 17835, 16531, 40, + 20355, 17881, 13783, 17835, 16531, 42, + 20355, 17881, 13783, 17835, 16531, 44, + 20355, 17881, 13783, 17835, 16531, 46, + 20355, 17881, 13783, 17835, 16531, 48, + 20355, 17881, 13783, 17835, 16531, 50, + 20355, 17881, 16787, 16110, + 20355, 17881, 16787, 17472, + 20355, 17881, 16787, 17474, + 20355, 17881, 16787, 18148, + 20355, 17881, 16787, 19116, + 20355, 17881, 16787, 19966, + 20355, 17881, 16787, 20052, + 20355, 17881, 16787, 20368, + 20355, 17881, 16787, 20824, + 20355, 17881, 16787, 21854, + 20355, 17881, 17224, + 20355, 17881, 20858, + 20355, 19165, 60, + 20355, 19165, 302, + 20355, 19165, 548, + 20355, 19165, 614, + 20355, 19165, 742, + 20355, 19165, 12935, 8808, + 20355, 19165, 13783, 17835, 16531, 0, + 20355, 19165, 13783, 17835, 16531, 2, + 20355, 19165, 13783, 17835, 16531, 4, + 20355, 19165, 13783, 17835, 16531, 6, + 20355, 19165, 13783, 17835, 16531, 8, + 20355, 19165, 13783, 17835, 16531, 10, + 20355, 19165, 13783, 17835, 16531, 12, + 20355, 19165, 13783, 17835, 16531, 14, + 20355, 19165, 13783, 17835, 16531, 16, + 20355, 19165, 13783, 17835, 16531, 18, + 20355, 19165, 13783, 17835, 16531, 20, + 20355, 19165, 13783, 17835, 16531, 22, + 20355, 19165, 13783, 17835, 16531, 24, + 20355, 19165, 13783, 17835, 16531, 26, + 20355, 19165, 13783, 17835, 16531, 28, + 20355, 19165, 13783, 17835, 16531, 30, + 20355, 19165, 13783, 17835, 16531, 32, + 20355, 19165, 13783, 17835, 16531, 34, + 20355, 19165, 13783, 17835, 16531, 36, + 20355, 19165, 13783, 17835, 16531, 38, + 20355, 19165, 13783, 17835, 16531, 40, + 20355, 19165, 13783, 17835, 16531, 42, + 20355, 19165, 13783, 17835, 16531, 44, + 20355, 19165, 13783, 17835, 16531, 46, + 20355, 19165, 13783, 17835, 16531, 48, + 20355, 19165, 13783, 17835, 16531, 50, + 20355, 19165, 19381, 12414, + 20355, 19165, 20549, 8808, + 20355, 19165, 21349, 12414, + 20355, 19165, 21557, 12414, + 20355, 19165, 22837, 12414, + 20355, 19791, 12934, + 20355, 19791, 16661, 14659, 661, 13839, 15900, + 20355, 19791, 17988, + 20373, 14932, + 20378, + 20379, 11513, 22267, 12928, + 20387, 18937, 13509, 10575, 775, 774, + 20387, 18937, 13509, 10575, 1493, 15106, + 20387, 18937, 13509, 10575, 1493, 15714, + 20387, 18937, 13509, 10575, 1493, 16890, + 20387, 18937, 13509, 10575, 1493, 20244, + 20387, 18937, 13509, 10575, 1493, 23884, + 20387, 18937, 13509, 13069, 2760, + 20387, 18937, 13509, 13069, 3240, + 20387, 18937, 13509, 13069, 3536, + 20387, 18937, 13509, 13069, 7036, + 20387, 18937, 13509, 13069, 7058, + 20387, 18937, 13509, 13069, 9358, + 20387, 18937, 13509, 13069, 11824, + 20387, 18937, 13509, 13069, 13150, + 20387, 18937, 13509, 13069, 14778, + 20387, 18937, 13509, 13069, 15116, + 20387, 18937, 13509, 16531, 0, + 20387, 18937, 13509, 16531, 8, + 20387, 18937, 13509, 16531, 16, + 20387, 18937, 13509, 16531, 28, + 20387, 18937, 13509, 16531, 40, + 20387, 18937, 13509, 16531, 44, + 20387, 18937, 13509, 16531, 58, + 20387, 18937, 13509, 16531, 126, + 20387, 18937, 13509, 16531, 150, + 20387, 18937, 13509, 16531, 186, + 20387, 18937, 13509, 16531, 228, + 20387, 18937, 13509, 16531, 248, + 20387, 18937, 13509, 16531, 272, + 20387, 18937, 13509, 16531, 358, + 20387, 18937, 13509, 16531, 394, + 20387, 18937, 13509, 16531, 426, + 20387, 18937, 13509, 16531, 466, + 20387, 18937, 13509, 16531, 522, + 20387, 18937, 13509, 16531, 548, + 20387, 18937, 13509, 16531, 582, + 20387, 18937, 13509, 16531, 598, + 20387, 18937, 13509, 16531, 614, + 20387, 18937, 13509, 16531, 648, + 20387, 18937, 13509, 16531, 714, + 20387, 18937, 13509, 16531, 762, + 20387, 18937, 13509, 16531, 778, + 20387, 18937, 13509, 16531, 796, + 20387, 18937, 13509, 16531, 1266, + 20387, 18937, 13509, 16531, 1682, + 20387, 18937, 13509, 16531, 2448, + 20387, 18937, 13509, 16531, 2546, + 20387, 18937, 13509, 16531, 2620, + 20387, 18937, 13509, 16531, 2650, + 20387, 18937, 13509, 16531, 2654, + 20387, 18937, 13509, 16531, 2656, + 20387, 18937, 13509, 16531, 2668, + 20387, 18937, 13509, 16531, 2698, + 20387, 18937, 13509, 16531, 2854, + 20387, 18937, 13509, 16531, 3118, + 20387, 18937, 13509, 16531, 3488, + 20387, 18937, 13509, 16531, 3538, + 20387, 18937, 13509, 16531, 3852, + 20387, 18937, 13509, 16531, 9446, + 20387, 18937, 13509, 16531, 9506, + 20387, 18937, 13509, 16531, 9514, + 20387, 18937, 13509, 17416, + 20387, 18937, 13509, 17418, + 20387, 18937, 13509, 17420, + 20387, 18937, 13509, 17422, + 20387, 18937, 13509, 17424, + 20387, 18937, 13509, 17426, + 20387, 18937, 13509, 17428, + 20387, 18937, 13509, 17881, 126, + 20387, 18937, 13509, 20249, 9550, + 20387, 18937, 13509, 20777, 22534, + 20391, 1433, 17298, + 20403, 1054, + 20403, 7027, 16118, + 20403, 10876, + 20403, 16947, 1088, + 20403, 22196, + 20411, 506, + 20415, 12934, + 20419, 12525, 10690, + 20419, 13069, 2760, + 20419, 13069, 3240, + 20419, 13069, 3536, + 20419, 13069, 7036, + 20419, 13069, 7058, + 20419, 13069, 9358, + 20419, 13069, 11824, + 20419, 13069, 13150, + 20419, 13069, 14778, + 20419, 13069, 15116, + 20419, 13421, 12934, + 20419, 13783, 12934, + 20419, 13783, 17835, 16531, 0, + 20419, 13783, 17835, 16531, 2, + 20419, 13783, 17835, 16531, 4, + 20419, 13783, 17835, 16531, 6, + 20419, 13783, 17835, 16531, 8, + 20419, 13783, 17835, 16531, 10, + 20419, 13783, 17835, 16531, 12, + 20419, 13783, 17835, 16531, 14, + 20419, 13783, 17835, 16531, 16, + 20419, 13783, 17835, 16531, 18, + 20419, 13783, 17835, 16531, 20, + 20419, 13783, 17835, 16531, 22, + 20419, 13783, 17835, 16531, 24, + 20419, 13783, 17835, 16531, 26, + 20419, 13783, 17835, 16531, 28, + 20419, 13783, 17835, 16531, 30, + 20419, 13783, 17835, 16531, 32, + 20419, 13783, 17835, 16531, 34, + 20419, 13783, 17835, 16531, 36, + 20419, 13783, 17835, 16531, 38, + 20419, 13783, 17835, 16531, 40, + 20419, 13783, 17835, 16531, 42, + 20419, 13783, 17835, 16531, 44, + 20419, 13783, 17835, 16531, 46, + 20419, 13783, 17835, 16531, 48, + 20419, 13783, 17835, 16531, 50, + 20419, 15453, 10690, + 20422, + 20438, + 20455, 660, + 20455, 11513, 15141, 20406, + 20455, 11513, 22495, 17264, + 20463, 17912, + 20477, 19716, + 20483, 8809, 10444, + 20483, 8809, 16095, 10444, + 20483, 16095, 7461, 8808, + 20483, 16531, 0, + 20483, 16531, 8, + 20483, 16531, 16, + 20483, 16531, 28, + 20483, 16531, 40, + 20483, 16531, 108, + 20483, 16531, 126, + 20483, 16531, 150, + 20483, 16531, 186, + 20483, 16531, 228, + 20483, 16531, 248, + 20483, 16531, 272, + 20483, 16531, 344, + 20483, 16531, 358, + 20483, 16531, 394, + 20483, 16531, 426, + 20483, 16531, 466, + 20483, 16531, 548, + 20483, 16531, 582, + 20483, 16531, 598, + 20483, 16531, 614, + 20483, 16531, 648, + 20483, 16531, 738, + 20483, 16531, 762, + 20483, 16531, 778, + 20483, 16531, 796, + 20483, 16531, 1116, + 20483, 16531, 1214, + 20483, 16531, 1330, + 20483, 16531, 1578, + 20483, 16531, 2036, + 20483, 16531, 2574, + 20483, 16531, 2624, + 20483, 16531, 2698, + 20483, 16531, 2830, + 20483, 16531, 3212, + 20483, 16531, 3422, + 20483, 16531, 3488, + 20483, 16531, 3502, + 20483, 16531, 4042, + 20483, 16531, 11058, + 20483, 16531, 11082, + 20483, 16531, 14911, 0, + 20483, 16531, 17539, 272, + 20483, 16531, 21003, 778, + 20483, 16531, 21029, 228, + 20483, 16531, 22115, 3212, + 20483, 16531, 23070, + 20483, 17171, 7461, 8808, + 20483, 21919, 16531, 598, + 20483, 21919, 16531, 738, + 20483, 21919, 16531, 778, + 20483, 22957, 16531, 598, + 20485, 6669, 10575, 541, 5966, + 20485, 6669, 10575, 986, + 20485, 6669, 10575, 1034, + 20485, 6669, 10575, 1090, + 20485, 6669, 10575, 2258, + 20485, 6669, 10575, 3040, + 20485, 6669, 10575, 3194, + 20485, 6669, 10575, 6344, + 20485, 6669, 10575, 6356, + 20485, 6669, 10575, 6698, + 20485, 6669, 10575, 7516, + 20485, 6669, 10575, 7670, + 20485, 6669, 10575, 8314, + 20485, 6669, 10575, 10480, + 20485, 6669, 10575, 11390, + 20485, 6669, 10575, 11475, 5982, + 20485, 6669, 10575, 12414, + 20485, 6669, 10575, 12579, 2232, + 20485, 6669, 10575, 12676, + 20485, 6669, 10575, 13136, + 20485, 6669, 10575, 13272, + 20485, 6669, 10575, 14547, 11046, + 20485, 6669, 10575, 14900, + 20485, 6669, 10575, 14911, 942, + 20485, 6669, 10575, 15132, + 20485, 6669, 10575, 15248, + 20485, 6669, 10575, 15468, + 20485, 6669, 10575, 15960, + 20485, 6669, 10575, 16064, + 20485, 6669, 10575, 16284, + 20485, 6669, 10575, 16332, + 20485, 6669, 10575, 16931, 7460, + 20485, 6669, 10575, 17138, + 20485, 6669, 10575, 17760, + 20485, 6669, 10575, 17836, + 20485, 6669, 10575, 18592, + 20485, 6669, 10575, 18814, + 20485, 6669, 10575, 19012, + 20485, 6669, 10575, 20070, + 20485, 6669, 10575, 20272, + 20485, 6669, 10575, 20730, + 20485, 6669, 10575, 20807, 7460, + 20485, 6669, 10575, 21068, + 20485, 6669, 10575, 21089, 14546, + 20485, 6669, 10575, 21127, 18741, 17264, + 20485, 6669, 10575, 22754, + 20487, 7432, + 20489, 10690, + 20505, 17246, + 20508, + 20511, 21498, + 20520, + 20521, 529, 13177, 660, + 20521, 529, 22435, 660, + 20521, 1057, 2643, 22435, 660, + 20521, 12319, 2643, 13177, 660, + 20521, 12319, 2643, 15703, 13177, 660, + 20521, 12319, 15703, 13177, 660, + 20521, 12319, 16121, 10574, + 20521, 12319, 23651, 2643, 13177, 660, + 20521, 12319, 23651, 16121, 10574, + 20521, 15281, 20566, + 20525, 2368, + 20525, 15468, + 20525, 16890, + 20527, 9818, + 20528, + 20535, 8320, + 20543, 13839, 8280, + 20543, 13839, 14658, + 20543, 15287, 8280, + 20543, 15287, 8281, 897, 13839, 8281, 897, 13839, 14658, + 20543, 15287, 8281, 897, 13839, 14658, + 20543, 15287, 8281, 897, 15287, 14659, 897, 13839, 8280, + 20543, 15287, 8281, 897, 15287, 14659, 897, 13839, 14658, + 20543, 15287, 14658, + 20543, 15287, 14659, 897, 13839, 8280, + 20543, 15287, 14659, 897, 13839, 8281, 897, 13839, 14658, + 20549, 8808, + 20549, 23213, 8808, + 20550, + 20561, 14483, 17298, + 20565, 21499, 17299, 16531, 0, + 20565, 21499, 17299, 16531, 2, + 20565, 21499, 17299, 16531, 4, + 20565, 21499, 17299, 16531, 6, + 20565, 21499, 17299, 16531, 8, + 20565, 21499, 17299, 16531, 10, + 20565, 21499, 17299, 16531, 12, + 20565, 21499, 17299, 16531, 14, + 20565, 21499, 17299, 16531, 16, + 20565, 21499, 17299, 16531, 18, + 20565, 21499, 17299, 16531, 20, + 20565, 21499, 17299, 16531, 22, + 20565, 21499, 17299, 16531, 24, + 20565, 21499, 17299, 16531, 26, + 20565, 21499, 17299, 16531, 28, + 20565, 21499, 17299, 16531, 30, + 20565, 21499, 17299, 16531, 32, + 20565, 21499, 17299, 16531, 34, + 20565, 21499, 17299, 16531, 36, + 20565, 21499, 17299, 16531, 38, + 20565, 21499, 17299, 16531, 40, + 20565, 21499, 17299, 16531, 42, + 20565, 21499, 17299, 16531, 44, + 20565, 21499, 17299, 16531, 46, + 20565, 21499, 17299, 16531, 48, + 20565, 21499, 17299, 16531, 50, + 20569, 6996, + 20573, 17026, + 20582, + 20584, + 20587, 2643, 10574, + 20587, 7433, 11513, 16661, 16175, 20002, + 20587, 12378, + 20587, 12379, 11513, 20920, + 20587, 12922, + 20587, 13161, 3206, + 20587, 14570, + 20587, 14659, 12378, + 20587, 15140, + 20587, 15141, 16120, + 20587, 16095, 14570, + 20587, 16095, 14571, 21779, 8808, + 20587, 16095, 17265, 2643, 10574, + 20587, 16213, 23512, + 20587, 17007, 7433, 11513, 18151, 19160, + 20587, 17379, 699, 10574, + 20587, 17379, 6701, 10574, + 20587, 17435, 14570, + 20587, 18871, 10574, + 20587, 19015, 16199, 13471, 15858, + 20587, 19401, 7432, + 20587, 20549, 8808, + 20587, 21844, + 20587, 22841, 17835, 22, + 20602, + 20609, 6996, + 20610, + 20618, + 20624, + 20626, + 20628, + 20641, 15453, 10690, + 20641, 15453, 13783, 12934, + 20641, 15453, 15938, + 20642, + 20649, 10690, + 20651, 5972, + 20651, 19322, + 20659, 12525, 699, 20501, 13594, + 20659, 12525, 6701, 20501, 13594, + 20659, 12525, 8281, 20501, 13594, + 20659, 12525, 14659, 20501, 13594, + 20659, 15453, 699, 20501, 13594, + 20659, 15453, 6701, 20501, 13594, + 20659, 15453, 8281, 20501, 13594, + 20659, 15453, 14659, 20501, 13594, + 20667, 19574, + 20669, 6996, + 20669, 17298, + 20669, 24190, + 20671, 19129, 6996, + 20671, 20063, 6996, + 20673, 6996, + 20675, 6996, + 20676, + 20686, + 20689, 7461, 323, 22896, + 20691, 10574, + 20694, + 20697, 15446, + 20711, 16890, + 20715, 6114, + 20729, 14692, + 20739, 22435, 660, + 20760, + 20761, 529, 13177, 660, + 20761, 529, 22435, 660, + 20761, 1057, 2643, 22435, 660, + 20761, 12319, 2643, 13177, 660, + 20761, 12319, 2643, 15703, 13177, 660, + 20761, 12319, 15703, 13177, 660, + 20761, 12319, 16121, 10574, + 20761, 12319, 23651, 2643, 13177, 660, + 20761, 12319, 23651, 16121, 10574, + 20761, 15281, 20566, + 20765, 506, + 20765, 507, 529, 13177, 660, + 20765, 507, 529, 13177, 661, 11513, 1291, 12318, + 20765, 507, 11513, 2643, 13177, 660, + 20765, 507, 12319, 2643, 13177, 660, + 20765, 507, 12319, 15141, 20406, + 20765, 507, 12319, 15703, 13177, 660, + 20765, 507, 12319, 16121, 10574, + 20765, 11513, 1290, + 20765, 11513, 9905, 10575, 12502, + 20765, 11513, 26135, 10575, 12502, + 20765, 12319, 17272, + 20765, 12319, 20764, + 20765, 12319, 21557, 12414, + 20765, 15805, 897, 16401, 125, 6545, 11513, 17272, + 20765, 15805, 17272, + 20765, 21763, 19140, + 20796, + 20799, 15407, 10575, 16, + 20799, 15407, 10575, 40, + 20799, 16531, 0, + 20799, 16531, 16, + 20799, 16531, 40, + 20799, 16531, 108, + 20799, 16531, 150, + 20799, 16531, 248, + 20799, 16531, 358, + 20799, 16531, 394, + 20799, 16531, 426, + 20799, 16531, 466, + 20799, 16531, 548, + 20799, 16531, 614, + 20799, 16531, 648, + 20799, 16531, 738, + 20799, 16531, 778, + 20799, 16531, 2574, + 20803, 11046, + 20811, 19656, + 20823, 6996, + 20831, 6544, + 20837, 16531, 778, + 20837, 16531, 780, + 20837, 16531, 782, + 20837, 16531, 786, + 20837, 16531, 790, + 20837, 16531, 3870, + 20837, 16531, 3872, + 20837, 16531, 3874, + 20837, 16531, 3878, + 20837, 16531, 3880, + 20837, 16531, 3882, + 20837, 16531, 3884, + 20837, 16531, 3886, + 20837, 16531, 3888, + 20837, 16531, 3890, + 20837, 16531, 3892, + 20837, 16531, 3894, + 20837, 16531, 3896, + 20837, 16531, 3898, + 20837, 16531, 3900, + 20837, 16531, 3902, + 20837, 16531, 3906, + 20837, 16531, 3908, + 20837, 16531, 3910, + 20837, 16531, 3912, + 20837, 16531, 3928, + 20837, 16531, 5555, 11640, + 20837, 16531, 11630, + 20837, 16531, 11632, + 20837, 16531, 11634, + 20837, 16531, 11636, + 20837, 16531, 11640, + 20837, 16531, 11644, + 20837, 16531, 11646, + 20837, 16531, 11652, + 20837, 16531, 11654, + 20837, 16531, 11656, + 20837, 16531, 11658, + 20837, 16531, 11662, + 20837, 16531, 11668, + 20837, 16531, 11670, + 20837, 16531, 15510, + 20837, 16531, 15512, + 20837, 16531, 15514, + 20837, 16531, 15803, 17639, 3882, + 20837, 16531, 15803, 17639, 3884, + 20837, 16531, 17455, 3882, + 20837, 16531, 17455, 3886, + 20837, 16531, 17455, 3896, + 20837, 16531, 17455, 11640, + 20837, 16531, 17455, 11642, + 20837, 16531, 17455, 11646, + 20837, 16531, 17455, 11648, + 20837, 16531, 17455, 11668, + 20837, 16531, 17657, 11668, + 20837, 16531, 22963, 3912, + 20837, 20319, 16531, 25811, 8808, + 20837, 21143, 16402, + 20837, 21851, 8808, + 20841, 10575, 216, + 20841, 10575, 17835, 216, + 20847, 14811, 21071, 1145, 19371, 26010, + 20847, 14811, 21071, 1145, 19371, 26014, + 20847, 14811, 21071, 1145, 19371, 26026, + 20847, 14811, 21071, 1145, 19371, 26046, + 20847, 14811, 21071, 1145, 19371, 26054, + 20847, 14811, 21071, 1145, 19371, 26062, + 20847, 14811, 21071, 1145, 19371, 26074, + 20847, 14811, 21071, 1145, 19371, 26080, + 20847, 14811, 21071, 1145, 19371, 26088, + 20847, 14811, 21071, 13783, 17835, 16531, 36, + 20859, 11513, 1291, 12318, + 20859, 11513, 17107, 95, 15826, + 20859, 11513, 19019, 17916, + 20859, 11513, 20920, + 20860, + 20867, 7030, + 20867, 13104, + 20913, 11537, 18010, + 20913, 16531, 16, + 20913, 16531, 40, + 20913, 16531, 288, + 20913, 16531, 572, + 20913, 16531, 660, + 20913, 16531, 754, + 20913, 16531, 806, + 20913, 16531, 880, + 20913, 16531, 1988, + 20913, 16531, 2036, + 20913, 16531, 2406, + 20913, 16531, 2676, + 20913, 16531, 3294, + 20913, 16531, 3416, + 20913, 16531, 3952, + 20913, 16531, 5492, + 20913, 16531, 6064, + 20913, 16531, 6638, + 20913, 16531, 7674, + 20913, 16531, 9990, + 20913, 16531, 10376, + 20913, 16531, 10478, + 20913, 16531, 11826, + 20913, 16531, 13050, + 20913, 16531, 13330, + 20913, 16531, 13370, + 20913, 16531, 13770, + 20913, 16531, 14624, + 20913, 16531, 14740, + 20913, 16531, 17366, + 20916, + 20917, 521, 16286, + 20917, 11513, 10093, 13108, + 20919, 6996, + 20924, + 20930, + 20933, 965, 11513, 22495, 17264, + 20933, 965, 15805, 14659, 20858, + 20933, 965, 16095, 8281, 22078, + 20933, 965, 17435, 14659, 22078, + 20933, 2761, 16107, 17782, + 20933, 2761, 16107, 17784, + 20933, 2761, 16107, 17786, + 20933, 2761, 16107, 17788, + 20933, 2761, 16107, 17790, + 20933, 2761, 16107, 17792, + 20933, 3241, 6696, + 20933, 3367, 2034, + 20933, 7059, 6696, + 20933, 7997, 17019, 8808, + 20933, 7997, 17019, 8809, 13839, 7428, + 20933, 7997, 17019, 8809, 15287, 7428, + 20933, 7997, 17019, 11513, 17539, 14929, 8808, + 20933, 7997, 17019, 11513, 17539, 14929, 8809, 15287, 7428, + 20933, 8320, + 20933, 8321, 11513, 7059, 10985, 13924, + 20933, 8321, 11513, 15117, 10985, 13924, + 20933, 8321, 11513, 15939, 12318, + 20933, 8321, 11513, 15939, 12502, + 20933, 8321, 11513, 16661, 1290, + 20933, 8321, 21382, + 20933, 8801, 11513, 17265, 10574, + 20933, 15140, + 20933, 16498, + 20933, 17005, 1088, + 20933, 17625, 8320, + 20933, 18216, + 20933, 19309, 13806, + 20933, 19976, + 20933, 20579, 19058, + 20933, 21082, + 20933, 23259, 21517, 8808, + 20937, 17224, + 20939, 14911, 16531, 0, + 20939, 14911, 16531, 8, + 20939, 14911, 16531, 16, + 20939, 14911, 16531, 28, + 20939, 14911, 16531, 40, + 20939, 14911, 16531, 48, + 20939, 14911, 16531, 112, + 20939, 14911, 16531, 132, + 20939, 14911, 16531, 156, + 20939, 14911, 16531, 194, + 20939, 14911, 16531, 230, + 20939, 14911, 16531, 248, + 20939, 14911, 16531, 272, + 20939, 14911, 16531, 346, + 20939, 14911, 16531, 358, + 20939, 14911, 16531, 394, + 20939, 14911, 16531, 434, + 20939, 14911, 16531, 470, + 20939, 14911, 16531, 554, + 20939, 14911, 16531, 582, + 20939, 14911, 16531, 600, + 20939, 14911, 16531, 618, + 20939, 14911, 16531, 652, + 20939, 14911, 16531, 718, + 20939, 14911, 16531, 764, + 20939, 14911, 16531, 798, + 20939, 14911, 16531, 974, + 20939, 14911, 16531, 1118, + 20939, 14911, 16531, 1238, + 20939, 14911, 16531, 1722, + 20939, 14911, 16531, 1868, + 20939, 14911, 16531, 2278, + 20939, 14911, 16531, 2610, + 20939, 14911, 16531, 3214, + 20939, 14911, 16531, 3424, + 20939, 17835, 16531, 0, + 20939, 17835, 16531, 8, + 20939, 17835, 16531, 16, + 20939, 17835, 16531, 28, + 20939, 17835, 16531, 40, + 20939, 17835, 16531, 48, + 20939, 17835, 16531, 112, + 20939, 17835, 16531, 132, + 20939, 17835, 16531, 156, + 20939, 17835, 16531, 194, + 20939, 17835, 16531, 230, + 20939, 17835, 16531, 248, + 20939, 17835, 16531, 272, + 20939, 17835, 16531, 346, + 20939, 17835, 16531, 358, + 20939, 17835, 16531, 394, + 20939, 17835, 16531, 434, + 20939, 17835, 16531, 470, + 20939, 17835, 16531, 554, + 20939, 17835, 16531, 582, + 20939, 17835, 16531, 600, + 20939, 17835, 16531, 618, + 20939, 17835, 16531, 652, + 20939, 17835, 16531, 718, + 20939, 17835, 16531, 764, + 20939, 17835, 16531, 798, + 20939, 17835, 16531, 974, + 20939, 17835, 16531, 1118, + 20939, 17835, 16531, 1238, + 20939, 17835, 16531, 1722, + 20939, 17835, 16531, 1868, + 20939, 17835, 16531, 2278, + 20939, 17835, 16531, 2610, + 20939, 17835, 16531, 3214, + 20939, 17835, 16531, 3424, + 20944, + 20956, + 20977, 14115, 1319, 43, 15920, + 20977, 14115, 3106, + 20977, 14115, 6714, + 20977, 14115, 7034, + 20977, 14115, 9834, + 20977, 14115, 13736, + 20977, 14115, 13737, 15138, + 20977, 14115, 13738, + 20977, 14115, 14110, + 20977, 14115, 14444, + 20977, 14115, 14445, 20768, + 20977, 14115, 14445, 22527, 20768, + 20977, 14115, 14445, 23295, 20768, + 20977, 14115, 14445, 23295, 26136, + 20977, 14115, 14445, 23706, + 20977, 14115, 14472, + 20977, 14115, 16095, 22140, + 20977, 14115, 16468, + 20977, 14115, 16472, + 20977, 14115, 16632, + 20977, 14115, 16633, 18908, + 20977, 14115, 16633, 22524, + 20977, 14115, 16633, 26122, + 20977, 14115, 16633, 36320, + 20977, 14115, 16796, + 20977, 14115, 17232, + 20977, 14115, 17233, 37, 14672, + 20977, 14115, 17233, 37, 16103, 22142, + 20977, 14115, 17233, 37, 18386, + 20977, 14115, 17233, 37, 18387, 17, 20972, + 20977, 14115, 17233, 37, 20972, + 20977, 14115, 17233, 37, 20973, 17, 18386, + 20977, 14115, 17233, 37, 20973, 17, 23550, + 20977, 14115, 17233, 22136, + 20977, 14115, 17233, 22137, 37, 20972, + 20977, 14115, 17233, 26136, + 20977, 14115, 17255, 19289, 18948, + 20977, 14115, 17255, 20086, + 20977, 14115, 17255, 20087, 11513, 17171, 22140, + 20977, 14115, 17255, 20536, + 20977, 14115, 17255, 21756, + 20977, 14115, 17255, 22526, + 20977, 14115, 17255, 22527, 19344, + 20977, 14115, 17255, 22527, 20086, + 20977, 14115, 17255, 22527, 20087, 11513, 17171, 22140, + 20977, 14115, 17255, 22527, 21756, + 20977, 14115, 17255, 22527, 26004, + 20977, 14115, 17255, 22527, 26005, 11513, 16095, 22140, + 20977, 14115, 17255, 22527, 26005, 11513, 17171, 22140, + 20977, 14115, 17255, 22527, 28046, + 20977, 14115, 17255, 22527, 28047, 21756, + 20977, 14115, 17255, 22528, + 20977, 14115, 17255, 23832, + 20977, 14115, 17255, 23833, 23294, + 20977, 14115, 17255, 25900, + 20977, 14115, 17255, 26004, + 20977, 14115, 17255, 26005, 11513, 16095, 22140, + 20977, 14115, 17255, 26005, 11513, 17171, 22140, + 20977, 14115, 17255, 26132, + 20977, 14115, 17255, 26136, + 20977, 14115, 17255, 26190, + 20977, 14115, 17255, 28046, + 20977, 14115, 17255, 28047, 21756, + 20977, 14115, 17255, 28090, + 20977, 14115, 17255, 28092, + 20977, 14115, 17255, 36194, + 20977, 14115, 17255, 36318, + 20977, 14115, 17255, 36319, 23294, + 20977, 14115, 17255, 36340, + 20977, 14115, 17255, 36348, + 20977, 14115, 17860, + 20977, 14115, 18360, + 20977, 14115, 18388, + 20977, 14115, 19468, + 20977, 14115, 19782, + 20977, 14115, 20452, + 20977, 14115, 20587, 22216, + 20977, 14115, 20722, + 20977, 14115, 20723, 37, 16798, + 20977, 14115, 20723, 11513, 20681, 16764, + 20977, 14115, 20943, 20536, + 20977, 14115, 20943, 20768, + 20977, 14115, 20943, 21610, + 20977, 14115, 20943, 23295, 20536, + 20977, 14115, 20943, 23295, 20768, + 20977, 14115, 20943, 23295, 21610, + 20977, 14115, 20943, 23295, 23706, + 20977, 14115, 20943, 23706, + 20977, 14115, 20970, + 20977, 14115, 21437, 12546, + 20977, 14115, 21437, 15138, + 20977, 14115, 21437, 17292, + 20977, 14115, 21437, 18648, + 20977, 14115, 21437, 22064, + 20977, 14115, 21736, + 20977, 14115, 21737, 26136, + 20977, 14115, 21883, 19288, + 20977, 14115, 21883, 20768, + 20977, 14115, 21883, 21610, + 20977, 14115, 21883, 23295, 19288, + 20977, 14115, 21883, 23295, 20768, + 20977, 14115, 21883, 23706, + 20977, 14115, 21883, 23833, 20536, + 20977, 14115, 21883, 23833, 20768, + 20977, 14115, 21883, 23833, 23294, + 20977, 14115, 21883, 23833, 26136, + 20977, 14115, 21883, 36348, + 20977, 14115, 21884, + 20977, 14115, 21885, 37, 18386, + 20977, 14115, 21885, 37, 20972, + 20977, 14115, 21885, 20968, + 20977, 14115, 22140, + 20977, 14115, 22216, + 20977, 14115, 22776, + 20977, 14115, 22778, + 20977, 14115, 23117, 16468, + 20977, 18929, 20319, 3106, + 20977, 18929, 20319, 13738, + 20977, 18929, 20319, 18512, + 20977, 18929, 20319, 18514, + 20977, 18929, 20319, 21205, 7044, + 20977, 21127, 8809, 520, + 20977, 21127, 8809, 8803, 18911, 37, 18386, + 20977, 21127, 8809, 8803, 18911, 37, 20199, 521, 8280, + 20977, 21127, 8809, 8803, 18911, 37, 20199, 521, 14658, + 20977, 21127, 8809, 8803, 18911, 521, 8280, + 20977, 21127, 8809, 8803, 18911, 521, 14658, + 20977, 21127, 8809, 8803, 18911, 19198, + 20977, 21127, 8809, 11822, + 20977, 21127, 8809, 13738, + 20977, 21127, 8809, 13739, 521, 8280, + 20977, 21127, 8809, 13826, + 20977, 21127, 8809, 14177, 37, 18387, 521, 8280, + 20977, 21127, 8809, 14177, 37, 18387, 521, 14658, + 20977, 21127, 8809, 14177, 521, 8280, + 20977, 21127, 8809, 14177, 521, 14658, + 20977, 21127, 8809, 14630, + 20977, 21127, 8809, 14884, + 20977, 21127, 8809, 15217, 37, 18386, + 20977, 21127, 8809, 15217, 521, 8280, + 20977, 21127, 8809, 15217, 521, 14658, + 20977, 21127, 8809, 15610, + 20977, 21127, 8809, 16001, 9770, + 20977, 21127, 8809, 16408, + 20977, 21127, 8809, 17229, 521, 8280, + 20977, 21127, 8809, 17229, 521, 14658, + 20977, 21127, 8809, 17390, + 20977, 21127, 8809, 17494, + 20977, 21127, 8809, 17549, 37, 18386, + 20977, 21127, 8809, 17549, 37, 20199, 521, 8280, + 20977, 21127, 8809, 17549, 37, 20199, 521, 14658, + 20977, 21127, 8809, 17549, 521, 8280, + 20977, 21127, 8809, 17549, 521, 14658, + 20977, 21127, 8809, 17804, + 20977, 21127, 8809, 17860, + 20977, 21127, 8809, 17861, 18892, + 20977, 21127, 8809, 18221, 14177, 37, 18387, 521, 8280, + 20977, 21127, 8809, 18221, 14177, 37, 18387, 521, 14658, + 20977, 21127, 8809, 18221, 14177, 521, 8280, + 20977, 21127, 8809, 18221, 14177, 521, 14658, + 20977, 21127, 8809, 18221, 17548, + 20977, 21127, 8809, 18390, + 20977, 21127, 8809, 18911, 37, 18386, + 20977, 21127, 8809, 18911, 37, 20199, 521, 8280, + 20977, 21127, 8809, 18911, 37, 20199, 521, 14658, + 20977, 21127, 8809, 18911, 521, 8280, + 20977, 21127, 8809, 18911, 521, 14658, + 20977, 21127, 8809, 18911, 19198, + 20977, 21127, 8809, 18976, + 20977, 21127, 8809, 19199, 8803, 18910, + 20977, 21127, 8809, 19288, + 20977, 21127, 8809, 20388, + 20977, 21127, 8809, 20416, + 20977, 21127, 8809, 20681, 16764, + 20977, 21127, 8809, 21750, + 20977, 21127, 8809, 22134, + 20977, 21127, 8809, 22404, + 20977, 21127, 8809, 22776, + 20977, 21127, 8809, 22777, 11513, 20933, 17264, + 20977, 21127, 8809, 23117, 22134, + 20977, 21127, 13839, 15175, 14623, 21498, + 20977, 21127, 15175, 14623, 8809, 17290, + 20977, 21127, 15175, 14623, 8809, 18646, + 20977, 21127, 15175, 14623, 8809, 22062, + 20977, 21127, 21035, 20933, 9770, + 20988, + 20991, 661, 3425, 19210, + 20993, 19286, + 21003, 18757, 8281, 3755, 19308, + 21004, + 21006, + 21009, 22487, 4128, + 21009, 22487, 4130, + 21009, 22487, 4132, + 21009, 22487, 4134, + 21009, 22487, 4136, + 21009, 22487, 4138, + 21009, 22487, 4140, + 21009, 22487, 4142, + 21009, 22487, 4144, + 21009, 22487, 4146, + 21009, 22487, 4148, + 21009, 22487, 4150, + 21009, 22487, 4152, + 21009, 22487, 4154, + 21009, 22487, 4156, + 21009, 22487, 4158, + 21009, 22487, 4160, + 21009, 22487, 4162, + 21009, 22487, 4164, + 21009, 22487, 4166, + 21009, 22487, 4168, + 21009, 22487, 4170, + 21009, 22487, 4172, + 21009, 22487, 4174, + 21009, 22487, 4176, + 21009, 22487, 4178, + 21009, 22487, 4180, + 21009, 22487, 4182, + 21009, 22487, 4184, + 21009, 22487, 4186, + 21009, 22487, 4188, + 21009, 22487, 4190, + 21009, 22487, 4192, + 21009, 22487, 4194, + 21009, 22487, 4196, + 21009, 22487, 4198, + 21009, 22487, 4200, + 21009, 22487, 4202, + 21009, 22487, 4204, + 21009, 22487, 4206, + 21009, 22487, 4208, + 21009, 22487, 4210, + 21009, 22487, 4212, + 21009, 22487, 4214, + 21009, 22487, 4216, + 21009, 22487, 4218, + 21009, 22487, 4220, + 21009, 22487, 4222, + 21009, 22487, 4224, + 21009, 22487, 4226, + 21009, 22487, 4228, + 21009, 22487, 4230, + 21009, 22487, 4232, + 21009, 22487, 4234, + 21009, 22487, 4236, + 21009, 22487, 4238, + 21009, 22487, 4240, + 21009, 22487, 4242, + 21009, 22487, 4244, + 21009, 22487, 4246, + 21009, 22487, 4248, + 21009, 22487, 4250, + 21009, 22487, 4252, + 21009, 22487, 4254, + 21009, 22487, 4256, + 21009, 22487, 4258, + 21009, 22487, 4260, + 21009, 22487, 4262, + 21009, 22487, 4264, + 21009, 22487, 4266, + 21009, 22487, 4268, + 21009, 22487, 4270, + 21009, 22487, 4272, + 21009, 22487, 4274, + 21009, 22487, 4276, + 21009, 22487, 4278, + 21009, 22487, 4280, + 21009, 22487, 4282, + 21009, 22487, 4284, + 21009, 22487, 4286, + 21009, 22487, 4288, + 21009, 22487, 4290, + 21009, 22487, 4292, + 21009, 22487, 4294, + 21009, 22487, 4296, + 21009, 22487, 4298, + 21009, 22487, 4300, + 21009, 22487, 4302, + 21009, 22487, 4304, + 21009, 22487, 4306, + 21009, 22487, 4308, + 21009, 22487, 4310, + 21009, 22487, 4312, + 21009, 22487, 4314, + 21009, 22487, 4316, + 21009, 22487, 4318, + 21009, 22487, 4320, + 21009, 22487, 4322, + 21009, 22487, 4324, + 21009, 22487, 4326, + 21009, 22487, 4328, + 21009, 22487, 4330, + 21009, 22487, 4332, + 21009, 22487, 4334, + 21009, 22487, 4336, + 21009, 22487, 4338, + 21009, 22487, 4340, + 21009, 22487, 4342, + 21009, 22487, 4344, + 21009, 22487, 4346, + 21009, 22487, 4348, + 21009, 22487, 4350, + 21009, 22487, 4352, + 21009, 22487, 4354, + 21009, 22487, 4356, + 21009, 22487, 4358, + 21009, 22487, 4360, + 21009, 22487, 4362, + 21009, 22487, 4364, + 21009, 22487, 4366, + 21009, 22487, 4368, + 21009, 22487, 4370, + 21009, 22487, 4372, + 21009, 22487, 4374, + 21009, 22487, 4376, + 21009, 22487, 4378, + 21009, 22487, 4380, + 21009, 22487, 4382, + 21009, 22487, 4384, + 21009, 22487, 4386, + 21009, 22487, 4388, + 21009, 22487, 4390, + 21009, 22487, 4392, + 21009, 22487, 4394, + 21009, 22487, 4396, + 21009, 22487, 4398, + 21009, 22487, 4400, + 21009, 22487, 4402, + 21009, 22487, 4404, + 21009, 22487, 4406, + 21009, 22487, 4408, + 21009, 22487, 4410, + 21009, 22487, 4412, + 21009, 22487, 4414, + 21009, 22487, 4416, + 21009, 22487, 4418, + 21009, 22487, 4420, + 21009, 22487, 4422, + 21009, 22487, 4424, + 21009, 22487, 4426, + 21009, 22487, 4428, + 21009, 22487, 4430, + 21009, 22487, 4432, + 21009, 22487, 4434, + 21009, 22487, 4436, + 21009, 22487, 4438, + 21009, 22487, 4440, + 21009, 22487, 4442, + 21009, 22487, 4444, + 21009, 22487, 4446, + 21009, 22487, 4448, + 21009, 22487, 4450, + 21009, 22487, 4452, + 21009, 22487, 4454, + 21009, 22487, 4456, + 21009, 22487, 4458, + 21009, 22487, 4460, + 21009, 22487, 4462, + 21009, 22487, 4464, + 21009, 22487, 4466, + 21009, 22487, 4468, + 21009, 22487, 4470, + 21009, 22487, 4472, + 21009, 22487, 4474, + 21009, 22487, 4476, + 21009, 22487, 4478, + 21009, 22487, 4480, + 21009, 22487, 4482, + 21009, 22487, 4484, + 21009, 22487, 4486, + 21009, 22487, 4488, + 21009, 22487, 4490, + 21009, 22487, 4492, + 21009, 22487, 4494, + 21009, 22487, 4496, + 21009, 22487, 4498, + 21009, 22487, 4500, + 21009, 22487, 4502, + 21009, 22487, 4504, + 21009, 22487, 4506, + 21009, 22487, 4508, + 21009, 22487, 4510, + 21009, 22487, 4512, + 21009, 22487, 4514, + 21009, 22487, 4516, + 21009, 22487, 4518, + 21009, 22487, 4520, + 21009, 22487, 4522, + 21009, 22487, 4524, + 21009, 22487, 4526, + 21009, 22487, 4528, + 21009, 22487, 4530, + 21009, 22487, 4532, + 21009, 22487, 4534, + 21009, 22487, 4536, + 21009, 22487, 4538, + 21009, 22487, 4540, + 21009, 22487, 4542, + 21009, 22487, 4544, + 21009, 22487, 4546, + 21009, 22487, 4548, + 21009, 22487, 4550, + 21009, 22487, 4552, + 21009, 22487, 4554, + 21009, 22487, 4556, + 21009, 22487, 4558, + 21009, 22487, 4560, + 21009, 22487, 4562, + 21009, 22487, 4564, + 21009, 22487, 4566, + 21009, 22487, 4568, + 21009, 22487, 4570, + 21009, 22487, 4572, + 21009, 22487, 4574, + 21009, 22487, 4576, + 21009, 22487, 4578, + 21009, 22487, 4580, + 21009, 22487, 4582, + 21009, 22487, 4584, + 21009, 22487, 4586, + 21009, 22487, 4588, + 21009, 22487, 4590, + 21009, 22487, 4592, + 21009, 22487, 4594, + 21009, 22487, 4596, + 21009, 22487, 4598, + 21009, 22487, 4600, + 21009, 22487, 4602, + 21009, 22487, 4604, + 21009, 22487, 4606, + 21009, 22487, 4608, + 21009, 22487, 4610, + 21009, 22487, 4612, + 21009, 22487, 4614, + 21009, 22487, 4616, + 21009, 22487, 4618, + 21009, 22487, 4620, + 21009, 22487, 4622, + 21009, 22487, 4624, + 21009, 22487, 4626, + 21009, 22487, 4628, + 21009, 22487, 4630, + 21009, 22487, 4632, + 21009, 22487, 4634, + 21009, 22487, 4636, + 21009, 22487, 4638, + 21009, 22487, 4640, + 21009, 22487, 4642, + 21009, 22487, 4644, + 21009, 22487, 4646, + 21009, 22487, 4648, + 21009, 22487, 4650, + 21009, 22487, 4652, + 21009, 22487, 4654, + 21009, 22487, 4656, + 21009, 22487, 4658, + 21009, 22487, 4660, + 21009, 22487, 4662, + 21009, 22487, 4664, + 21009, 22487, 4666, + 21009, 22487, 4668, + 21009, 22487, 4670, + 21009, 22487, 4672, + 21009, 22487, 4674, + 21009, 22487, 4676, + 21009, 22487, 4678, + 21009, 22487, 4680, + 21009, 22487, 4682, + 21009, 22487, 4684, + 21009, 22487, 4686, + 21009, 22487, 4688, + 21009, 22487, 4690, + 21009, 22487, 4692, + 21009, 22487, 4694, + 21009, 22487, 4696, + 21009, 22487, 4698, + 21009, 22487, 4700, + 21009, 22487, 4702, + 21009, 22487, 4704, + 21009, 22487, 4706, + 21009, 22487, 4708, + 21009, 22487, 4710, + 21009, 22487, 4712, + 21009, 22487, 4714, + 21009, 22487, 4716, + 21009, 22487, 4718, + 21009, 22487, 4720, + 21009, 22487, 4722, + 21009, 22487, 4724, + 21009, 22487, 4726, + 21009, 22487, 4728, + 21009, 22487, 4730, + 21009, 22487, 4732, + 21009, 22487, 4734, + 21009, 22487, 4736, + 21009, 22487, 4738, + 21009, 22487, 4740, + 21009, 22487, 4742, + 21009, 22487, 4744, + 21009, 22487, 4746, + 21009, 22487, 4748, + 21009, 22487, 4750, + 21009, 22487, 4752, + 21009, 22487, 4754, + 21009, 22487, 4756, + 21009, 22487, 4758, + 21009, 22487, 4760, + 21009, 22487, 4762, + 21009, 22487, 4764, + 21009, 22487, 4766, + 21009, 22487, 4768, + 21009, 22487, 4770, + 21009, 22487, 4772, + 21009, 22487, 4774, + 21009, 22487, 4776, + 21009, 22487, 4778, + 21009, 22487, 4780, + 21009, 22487, 4782, + 21009, 22487, 4784, + 21009, 22487, 4786, + 21009, 22487, 4788, + 21009, 22487, 4792, + 21009, 22487, 4794, + 21009, 22487, 4796, + 21009, 22487, 4798, + 21009, 22487, 4800, + 21009, 22487, 4802, + 21009, 22487, 4804, + 21009, 22487, 4806, + 21009, 22487, 4808, + 21009, 22487, 4810, + 21009, 22487, 4812, + 21009, 22487, 4814, + 21009, 22487, 4816, + 21009, 22487, 4818, + 21009, 22487, 4820, + 21009, 22487, 4822, + 21009, 22487, 4824, + 21009, 22487, 4826, + 21009, 22487, 4828, + 21009, 22487, 4830, + 21009, 22487, 4832, + 21009, 22487, 4834, + 21009, 22487, 4836, + 21009, 22487, 4838, + 21009, 22487, 4840, + 21009, 22487, 4842, + 21009, 22487, 4844, + 21009, 22487, 4846, + 21009, 22487, 4848, + 21009, 22487, 4850, + 21009, 22487, 4852, + 21009, 22487, 4854, + 21009, 22487, 4856, + 21009, 22487, 4858, + 21009, 22487, 4860, + 21009, 22487, 4862, + 21009, 22487, 4864, + 21009, 22487, 4866, + 21009, 22487, 4868, + 21009, 22487, 4870, + 21009, 22487, 4872, + 21009, 22487, 4874, + 21009, 22487, 4876, + 21009, 22487, 4878, + 21009, 22487, 4880, + 21009, 22487, 4882, + 21009, 22487, 4884, + 21009, 22487, 4886, + 21009, 22487, 4888, + 21009, 22487, 4890, + 21009, 22487, 4893, 599, 529, 604, + 21009, 22487, 4894, + 21009, 22487, 4896, + 21009, 22487, 4898, + 21009, 22487, 4900, + 21009, 22487, 4902, + 21009, 22487, 4904, + 21009, 22487, 4906, + 21009, 22487, 4908, + 21009, 22487, 4910, + 21009, 22487, 4913, 13150, + 21009, 22487, 4914, + 21009, 22487, 4916, + 21009, 22487, 4918, + 21009, 22487, 4920, + 21009, 22487, 4922, + 21009, 22487, 4924, + 21009, 22487, 4926, + 21009, 22487, 4928, + 21009, 22487, 4930, + 21009, 22487, 4932, + 21009, 22487, 4934, + 21009, 22487, 4936, + 21009, 22487, 4938, + 21009, 22487, 4940, + 21009, 22487, 4942, + 21009, 22487, 4944, + 21009, 22487, 4947, 12497, 20249, 8808, + 21009, 22487, 4948, + 21009, 22487, 4950, + 21009, 22487, 4952, + 21009, 22487, 4954, + 21009, 22487, 4956, + 21009, 22487, 4958, + 21009, 22487, 4960, + 21009, 22487, 4962, + 21009, 22487, 4964, + 21009, 22487, 4966, + 21009, 22487, 4968, + 21009, 22487, 4970, + 21009, 22487, 4972, + 21009, 22487, 4974, + 21009, 22487, 4976, + 21009, 22487, 4978, + 21009, 22487, 4980, + 21009, 22487, 4982, + 21009, 22487, 4984, + 21009, 22487, 4986, + 21009, 22487, 4988, + 21009, 22487, 4990, + 21009, 22487, 4992, + 21009, 22487, 4994, + 21009, 22487, 4996, + 21009, 22487, 4998, + 21009, 22487, 5000, + 21009, 22487, 5002, + 21009, 22487, 5004, + 21009, 22487, 5006, + 21009, 22487, 5008, + 21009, 22487, 5010, + 21009, 22487, 5012, + 21009, 22487, 5014, + 21009, 22487, 5016, + 21009, 22487, 5018, + 21009, 22487, 5020, + 21009, 22487, 5022, + 21009, 22487, 5024, + 21009, 22487, 5026, + 21009, 22487, 5028, + 21009, 22487, 5030, + 21009, 22487, 5032, + 21009, 22487, 5034, + 21009, 22487, 5036, + 21009, 22487, 5038, + 21009, 22487, 5040, + 21009, 22487, 5042, + 21009, 22487, 5044, + 21009, 22487, 5046, + 21009, 22487, 5048, + 21009, 22487, 5050, + 21009, 22487, 5052, + 21009, 22487, 5054, + 21009, 22487, 5056, + 21009, 22487, 5058, + 21009, 22487, 5060, + 21009, 22487, 5062, + 21009, 22487, 5064, + 21009, 22487, 5066, + 21009, 22487, 5068, + 21009, 22487, 5070, + 21009, 22487, 5072, + 21009, 22487, 5074, + 21009, 22487, 5076, + 21009, 22487, 5078, + 21009, 22487, 5080, + 21009, 22487, 5082, + 21009, 22487, 5084, + 21009, 22487, 5086, + 21009, 22487, 5088, + 21009, 22487, 5090, + 21009, 22487, 5092, + 21009, 22487, 5094, + 21009, 22487, 5096, + 21009, 22487, 5098, + 21009, 22487, 5100, + 21009, 22487, 5102, + 21009, 22487, 5104, + 21009, 22487, 5106, + 21009, 22487, 5108, + 21009, 22487, 5110, + 21009, 22487, 5112, + 21009, 22487, 5114, + 21009, 22487, 5116, + 21009, 22487, 5118, + 21009, 22487, 5120, + 21009, 22487, 5122, + 21009, 22487, 5124, + 21009, 22487, 5126, + 21009, 22487, 5128, + 21009, 22487, 5130, + 21009, 22487, 5132, + 21009, 22487, 5134, + 21009, 22487, 5136, + 21009, 22487, 5138, + 21009, 22487, 5140, + 21009, 22487, 5142, + 21009, 22487, 5144, + 21009, 22487, 5146, + 21009, 22487, 5148, + 21009, 22487, 5150, + 21009, 22487, 5152, + 21009, 22487, 5154, + 21009, 22487, 5156, + 21009, 22487, 5158, + 21009, 22487, 5160, + 21009, 22487, 5162, + 21009, 22487, 5164, + 21009, 22487, 5166, + 21009, 22487, 5168, + 21009, 22487, 5170, + 21009, 22487, 5172, + 21009, 22487, 5174, + 21009, 22487, 5176, + 21009, 22487, 5178, + 21009, 22487, 5180, + 21009, 22487, 11962, + 21009, 22487, 11968, + 21009, 22487, 11974, + 21009, 22487, 11978, + 21009, 22487, 11984, + 21009, 22487, 11986, + 21009, 22487, 11988, + 21009, 22487, 11990, + 21009, 22487, 11992, + 21009, 22487, 11994, + 21009, 22487, 11996, + 21009, 22487, 11998, + 21009, 22487, 12000, + 21009, 22487, 12002, + 21009, 22487, 12004, + 21009, 22487, 12006, + 21009, 22487, 12008, + 21009, 22487, 12010, + 21009, 22487, 12012, + 21009, 22487, 12014, + 21009, 22487, 12016, + 21009, 22487, 12018, + 21009, 22487, 12020, + 21009, 22487, 12022, + 21009, 22487, 12024, + 21009, 22487, 12026, + 21009, 22487, 12030, + 21009, 22487, 12034, + 21009, 22487, 12036, + 21009, 22487, 12038, + 21009, 22487, 12040, + 21009, 22487, 12042, + 21009, 22487, 12044, + 21009, 22487, 12046, + 21009, 22487, 12048, + 21009, 22487, 12050, + 21009, 22487, 12052, + 21009, 22487, 12054, + 21009, 22487, 12056, + 21009, 22487, 12058, + 21009, 22487, 12070, + 21009, 22487, 12072, + 21009, 22487, 12074, + 21009, 22487, 12076, + 21009, 22487, 12078, + 21009, 22487, 12080, + 21009, 22487, 12082, + 21009, 22487, 12084, + 21009, 22487, 12086, + 21009, 22487, 12088, + 21009, 22487, 12090, + 21009, 22487, 12092, + 21009, 22487, 12094, + 21009, 22487, 12096, + 21009, 22487, 12099, 1393, 20249, 8808, + 21009, 22487, 12100, + 21009, 22487, 12102, + 21013, 6996, + 21027, 9436, + 21030, + 21038, + 21041, 17343, 18542, + 21047, 18959, 897, 23646, + 21053, 1545, 20020, + 21053, 1545, 20022, + 21053, 10575, 17534, + 21053, 10575, 19408, + 21053, 10575, 19540, + 21053, 10575, 19586, + 21053, 10575, 23070, + 21053, 11537, 21850, + 21053, 13016, + 21053, 13069, 2760, + 21053, 13069, 3240, + 21053, 13069, 3536, + 21053, 13069, 7036, + 21053, 13069, 7058, + 21053, 13069, 9358, + 21053, 13069, 11824, + 21053, 13069, 13150, + 21053, 13069, 14778, + 21053, 13069, 15116, + 21053, 15407, 10575, 8, + 21053, 15407, 10575, 16, + 21053, 15407, 10575, 28, + 21053, 15407, 10575, 40, + 21053, 15407, 10575, 58, + 21053, 15407, 10575, 72, + 21053, 15407, 10575, 96, + 21053, 15407, 10575, 314, + 21053, 15407, 10575, 706, + 21053, 15407, 10575, 19415, 22, + 21053, 15407, 10575, 19415, 34, + 21053, 15407, 10575, 19415, 608, + 21053, 16095, 13016, + 21053, 16531, 0, + 21053, 16531, 8, + 21053, 16531, 16, + 21053, 16531, 28, + 21053, 16531, 40, + 21053, 16531, 58, + 21053, 16531, 72, + 21053, 16531, 96, + 21053, 16531, 108, + 21053, 16531, 126, + 21053, 16531, 150, + 21053, 16531, 248, + 21053, 16531, 272, + 21053, 16531, 314, + 21053, 16531, 344, + 21053, 16531, 358, + 21053, 16531, 394, + 21053, 16531, 426, + 21053, 16531, 466, + 21053, 16531, 548, + 21053, 16531, 598, + 21053, 16531, 614, + 21053, 16531, 648, + 21053, 16531, 706, + 21053, 16531, 714, + 21053, 16531, 778, + 21053, 16531, 1000, + 21053, 16531, 1116, + 21053, 16531, 1214, + 21053, 16531, 1236, + 21053, 16531, 1588, + 21053, 16531, 1918, + 21053, 16531, 2036, + 21053, 16531, 2574, + 21053, 16531, 2624, + 21053, 16531, 2698, + 21053, 16531, 2830, + 21053, 16531, 3212, + 21053, 16531, 3286, + 21053, 16531, 3422, + 21053, 16531, 3502, + 21053, 16531, 6572, + 21053, 16531, 11082, + 21053, 16531, 19415, 22, + 21053, 16531, 19415, 34, + 21053, 16531, 19415, 608, + 21053, 16787, 2760, + 21053, 16787, 3240, + 21053, 16787, 3412, + 21053, 16787, 3536, + 21053, 16787, 7036, + 21053, 16787, 7058, + 21053, 16787, 9358, + 21053, 16787, 13150, + 21053, 16787, 13254, + 21053, 16787, 13284, + 21053, 16787, 14778, + 21053, 16787, 14876, + 21053, 16787, 15116, + 21053, 16787, 16108, + 21053, 16787, 16744, + 21053, 16787, 17372, + 21053, 16787, 17474, + 21053, 16787, 19070, + 21053, 20133, 11259, 8808, + 21054, + 21056, + 21061, 10574, + 21068, + 21074, + 21078, + 21081, 18655, 17299, 1328, + 21081, 18655, 17299, 1431, 23200, + 21081, 18655, 17299, 5514, + 21081, 18655, 17299, 7825, 2564, + 21081, 18655, 17299, 7825, 19556, + 21081, 18655, 17299, 9142, + 21081, 18655, 17299, 10945, 1993, 17694, + 21081, 18655, 17299, 11048, + 21081, 18655, 17299, 11689, 904, + 21081, 18655, 17299, 11689, 8008, + 21081, 18655, 17299, 12335, 5524, + 21081, 18655, 17299, 12335, 8864, + 21081, 18655, 17299, 12335, 9909, 5524, + 21081, 18655, 17299, 12335, 9909, 13406, + 21081, 18655, 17299, 12335, 13406, + 21081, 18655, 17299, 12335, 16648, + 21081, 18655, 17299, 12335, 19558, + 21081, 18655, 17299, 12335, 21438, + 21081, 18655, 17299, 12395, 1431, 2564, + 21081, 18655, 17299, 12395, 23200, + 21081, 18655, 17299, 12406, + 21081, 18655, 17299, 12685, 15632, + 21081, 18655, 17299, 12685, 16466, + 21081, 18655, 17299, 12685, 17200, + 21081, 18655, 17299, 13072, + 21081, 18655, 17299, 13073, 19556, + 21081, 18655, 17299, 13794, + 21081, 18655, 17299, 14459, 2564, + 21081, 18655, 17299, 14459, 13072, + 21081, 18655, 17299, 14459, 23200, + 21081, 18655, 17299, 14578, + 21081, 18655, 17299, 14648, + 21081, 18655, 17299, 15024, + 21081, 18655, 17299, 15092, + 21081, 18655, 17299, 15093, 15720, + 21081, 18655, 17299, 15110, + 21081, 18655, 17299, 15384, + 21081, 18655, 17299, 15497, 16464, + 21081, 18655, 17299, 16016, + 21081, 18655, 17299, 16047, 5515, 1329, 19820, + 21081, 18655, 17299, 16047, 21201, 225, 19820, + 21081, 18655, 17299, 16047, 22987, 9769, 19820, + 21081, 18655, 17299, 16047, 23345, 19265, 19820, + 21081, 18655, 17299, 16047, 23708, + 21081, 18655, 17299, 16047, 25948, + 21081, 18655, 17299, 16125, 23516, + 21081, 18655, 17299, 16125, 24196, + 21081, 18655, 17299, 16165, 19119, 15933, 15382, + 21081, 18655, 17299, 16227, 17, 17609, 25948, + 21081, 18655, 17299, 16227, 9149, 13578, + 21081, 18655, 17299, 16227, 16712, + 21081, 18655, 17299, 16227, 18561, 15933, 19800, + 21081, 18655, 17299, 16227, 18561, 15933, 22584, + 21081, 18655, 17299, 16227, 19119, 15933, 15382, + 21081, 18655, 17299, 16227, 19119, 15933, 17300, + 21081, 18655, 17299, 16227, 19119, 19799, 160, + 21081, 18655, 17299, 16227, 19556, + 21081, 18655, 17299, 16227, 19557, 19789, 13580, + 21081, 18655, 17299, 16227, 21197, 160, + 21081, 18655, 17299, 16227, 21197, 362, + 21081, 18655, 17299, 16227, 21197, 479, 904, + 21081, 18655, 17299, 16227, 21197, 479, 8008, + 21081, 18655, 17299, 16227, 21197, 548, + 21081, 18655, 17299, 16227, 21197, 804, + 21081, 18655, 17299, 16227, 21197, 9142, + 21081, 18655, 17299, 16227, 22415, 21014, + 21081, 18655, 17299, 16245, 16046, + 21081, 18655, 17299, 16245, 17608, + 21081, 18655, 17299, 16277, 2565, 904, + 21081, 18655, 17299, 16277, 2565, 8008, + 21081, 18655, 17299, 16277, 19556, + 21081, 18655, 17299, 16277, 25885, 13060, + 21081, 18655, 17299, 16277, 25885, 19560, + 21081, 18655, 17299, 16387, 17345, 21482, + 21081, 18655, 17299, 16419, 20864, + 21081, 18655, 17299, 16464, + 21081, 18655, 17299, 16465, 904, + 21081, 18655, 17299, 16465, 8008, + 21081, 18655, 17299, 16523, 1329, 17876, + 21081, 18655, 17299, 16523, 6853, 17878, + 21081, 18655, 17299, 16523, 15205, 17876, + 21081, 18655, 17299, 16523, 18297, 17878, + 21081, 18655, 17299, 16523, 20815, 17876, + 21081, 18655, 17299, 16663, 7824, + 21081, 18655, 17299, 16807, 2564, + 21081, 18655, 17299, 16807, 19556, + 21081, 18655, 17299, 16808, + 21081, 18655, 17299, 16841, 19556, + 21081, 18655, 17299, 16907, 2564, + 21081, 18655, 17299, 16907, 19556, + 21081, 18655, 17299, 16974, + 21081, 18655, 17299, 17100, + 21081, 18655, 17299, 17101, 2564, + 21081, 18655, 17299, 17248, + 21081, 18655, 17299, 17340, + 21081, 18655, 17299, 17436, + 21081, 18655, 17299, 17519, 2564, + 21081, 18655, 17299, 17519, 13072, + 21081, 18655, 17299, 17519, 23200, + 21081, 18655, 17299, 17609, 5515, 1329, 19820, + 21081, 18655, 17299, 17609, 21201, 225, 19820, + 21081, 18655, 17299, 17609, 22987, 9769, 19820, + 21081, 18655, 17299, 17609, 23345, 19265, 19820, + 21081, 18655, 17299, 17609, 23708, + 21081, 18655, 17299, 17614, + 21081, 18655, 17299, 17713, 160, + 21081, 18655, 17299, 17713, 248, + 21081, 18655, 17299, 17713, 362, + 21081, 18655, 17299, 17713, 478, + 21081, 18655, 17299, 17713, 548, + 21081, 18655, 17299, 17713, 804, + 21081, 18655, 17299, 17713, 3710, + 21081, 18655, 17299, 17854, + 21081, 18655, 17299, 17990, + 21081, 18655, 17299, 18100, + 21081, 18655, 17299, 18113, 1993, 16227, 3710, + 21081, 18655, 17299, 18288, + 21081, 18655, 17299, 18351, 2565, 904, + 21081, 18655, 17299, 18351, 2565, 8008, + 21081, 18655, 17299, 18351, 2565, 8866, + 21081, 18655, 17299, 18351, 19556, + 21081, 18655, 17299, 18382, + 21081, 18655, 17299, 18385, 2564, + 21081, 18655, 17299, 18385, 5490, + 21081, 18655, 17299, 18385, 19556, + 21081, 18655, 17299, 18396, + 21081, 18655, 17299, 18538, + 21081, 18655, 17299, 18844, + 21081, 18655, 17299, 18846, + 21081, 18655, 17299, 18970, + 21081, 18655, 17299, 19184, + 21081, 18655, 17299, 19185, 19546, + 21081, 18655, 17299, 19231, 2564, + 21081, 18655, 17299, 19231, 8869, 19186, + 21081, 18655, 17299, 19231, 19556, + 21081, 18655, 17299, 19232, + 21081, 18655, 17299, 19264, + 21081, 18655, 17299, 19292, + 21081, 18655, 17299, 19393, 19556, + 21081, 18655, 17299, 19464, + 21081, 18655, 17299, 19545, 2564, + 21081, 18655, 17299, 19545, 19556, + 21081, 18655, 17299, 19548, + 21081, 18655, 17299, 19668, + 21081, 18655, 17299, 19689, 2564, + 21081, 18655, 17299, 19689, 19556, + 21081, 18655, 17299, 19797, 5515, 13996, + 21081, 18655, 17299, 19797, 5515, 16640, + 21081, 18655, 17299, 19797, 13072, + 21081, 18655, 17299, 19797, 19272, + 21081, 18655, 17299, 19802, + 21081, 18655, 17299, 19803, 25885, 13060, + 21081, 18655, 17299, 19803, 25885, 19561, 904, + 21081, 18655, 17299, 19803, 25885, 19561, 8008, + 21081, 18655, 17299, 19805, 254, + 21081, 18655, 17299, 19988, + 21081, 18655, 17299, 20140, + 21081, 18655, 17299, 20194, + 21081, 18655, 17299, 20204, + 21081, 18655, 17299, 20205, 5490, + 21081, 18655, 17299, 20206, + 21081, 18655, 17299, 20208, + 21081, 18655, 17299, 20285, 5489, 16973, 13578, + 21081, 18655, 17299, 20285, 5489, 19787, 13578, + 21081, 18655, 17299, 20285, 15381, 13578, + 21081, 18655, 17299, 20285, 16973, 13578, + 21081, 18655, 17299, 20285, 17441, 13578, + 21081, 18655, 17299, 20285, 18507, 13578, + 21081, 18655, 17299, 20285, 18881, 13578, + 21081, 18655, 17299, 20285, 18881, 20817, 13578, + 21081, 18655, 17299, 20285, 19787, 13578, + 21081, 18655, 17299, 20285, 20817, 13578, + 21081, 18655, 17299, 20285, 20817, 18507, 13578, + 21081, 18655, 17299, 20285, 22068, + 21081, 18655, 17299, 20285, 22795, 13578, + 21081, 18655, 17299, 20456, + 21081, 18655, 17299, 20470, + 21081, 18655, 17299, 20471, 2564, + 21081, 18655, 17299, 20620, + 21081, 18655, 17299, 20661, 15740, + 21081, 18655, 17299, 20661, 15741, 18004, + 21081, 18655, 17299, 20661, 15741, 20862, + 21081, 18655, 17299, 20661, 15741, 22970, + 21081, 18655, 17299, 20661, 19272, + 21081, 18655, 17299, 20661, 19273, 18004, + 21081, 18655, 17299, 20661, 19273, 20862, + 21081, 18655, 17299, 20661, 19273, 22970, + 21081, 18655, 17299, 20818, + 21081, 18655, 17299, 20865, 2564, + 21081, 18655, 17299, 20865, 5490, + 21081, 18655, 17299, 20865, 19556, + 21081, 18655, 17299, 21199, 534, + 21081, 18655, 17299, 21368, + 21081, 18655, 17299, 21395, 19800, + 21081, 18655, 17299, 21395, 22584, + 21081, 18655, 17299, 21395, 23684, + 21081, 18655, 17299, 21490, + 21081, 18655, 17299, 21528, + 21081, 18655, 17299, 21532, + 21081, 18655, 17299, 21533, 2565, 904, + 21081, 18655, 17299, 21533, 2565, 8008, + 21081, 18655, 17299, 21533, 2565, 8866, + 21081, 18655, 17299, 21533, 19556, + 21081, 18655, 17299, 21542, + 21081, 18655, 17299, 21707, 2564, + 21081, 18655, 17299, 21707, 19556, + 21081, 18655, 17299, 21770, + 21081, 18655, 17299, 21771, 2564, + 21081, 18655, 17299, 22020, + 21081, 18655, 17299, 22070, + 21081, 18655, 17299, 22132, + 21081, 18655, 17299, 22133, 13072, + 21081, 18655, 17299, 22162, + 21081, 18655, 17299, 22169, 17345, 21482, + 21081, 18655, 17299, 22169, 22019, 2564, + 21081, 18655, 17299, 22170, + 21081, 18655, 17299, 22171, 2564, + 21081, 18655, 17299, 22171, 13072, + 21081, 18655, 17299, 22408, + 21081, 18655, 17299, 22471, 27, 15720, + 21081, 18655, 17299, 22471, 27, 18002, + 21081, 18655, 17299, 22500, + 21081, 18655, 17299, 22502, + 21081, 18655, 17299, 23517, 2564, + 21081, 18655, 17299, 23517, 19556, + 21081, 18655, 17299, 23518, + 21081, 18655, 17299, 23519, 2564, + 21081, 18655, 17299, 23519, 19556, + 21081, 18655, 17299, 23530, + 21081, 18655, 17299, 23689, 1414, + 21081, 18655, 17299, 23689, 1430, + 21081, 18655, 17299, 23746, + 21081, 18655, 17299, 23854, + 21081, 18655, 17299, 24144, + 21081, 18655, 17299, 24196, + 21081, 18655, 17299, 26002, + 21081, 18655, 17299, 26186, + 21081, 18655, 17299, 26188, + 21081, 18655, 17299, 26296, + 21081, 18655, 17299, 28054, + 21081, 18655, 17299, 28056, + 21081, 18655, 17299, 28064, + 21081, 18655, 17299, 28070, + 21081, 18655, 17299, 28072, + 21081, 18655, 17299, 36230, + 21081, 18655, 17299, 36316, + 21081, 18655, 17299, 36330, + 21084, + 21086, + 21089, 3194, + 21097, 19523, 16531, 180, + 21097, 19523, 16531, 520, + 21097, 19523, 16531, 892, + 21097, 19523, 16531, 910, + 21097, 19523, 16531, 996, + 21097, 19523, 16531, 1088, + 21097, 19523, 16531, 1116, + 21097, 19523, 16531, 1120, + 21097, 19523, 16531, 1208, + 21097, 19523, 16531, 1434, + 21097, 19523, 16531, 1444, + 21097, 19523, 16531, 1608, + 21097, 19523, 16531, 1888, + 21097, 19523, 16531, 1900, + 21097, 19523, 16531, 2006, + 21097, 19523, 16531, 2070, + 21097, 19523, 16531, 2204, + 21097, 19523, 16531, 2374, + 21097, 19523, 16531, 2822, + 21097, 19523, 16531, 2932, + 21097, 19523, 16531, 2936, + 21097, 19523, 16531, 3048, + 21097, 19523, 16531, 3212, + 21097, 19523, 16531, 3390, + 21097, 19523, 16531, 4042, + 21097, 19523, 16531, 6234, + 21097, 19523, 16531, 6270, + 21097, 19523, 16531, 6306, + 21097, 19523, 16531, 6388, + 21097, 19523, 16531, 6390, + 21097, 19523, 16531, 6730, + 21097, 19523, 16531, 6736, + 21097, 19523, 16531, 7480, + 21097, 19523, 16531, 7814, + 21097, 19523, 16531, 7846, + 21097, 19523, 16531, 7860, + 21097, 19523, 16531, 8380, + 21097, 19523, 16531, 9444, + 21097, 19523, 16531, 9892, + 21097, 19523, 16531, 10428, + 21097, 19523, 16531, 10446, + 21097, 19523, 16531, 10504, + 21097, 19523, 16531, 11004, + 21097, 19523, 16531, 11138, + 21097, 19523, 16531, 11378, + 21097, 19523, 16531, 11572, + 21097, 19523, 16531, 11666, + 21097, 19523, 16531, 11730, + 21097, 19523, 16531, 11816, + 21097, 19523, 16531, 11848, + 21097, 19523, 16531, 13118, + 21097, 19523, 16531, 13378, + 21097, 19523, 19699, 8808, + 21101, 3436, + 21105, 7038, + 21107, 964, + 21109, 11046, + 21110, + 21111, 95, 6728, + 21113, 16673, 14526, + 21115, 19642, + 21116, + 21119, 3473, 22849, 12414, + 21119, 9783, 15939, 12414, + 21119, 14659, 897, 8281, 22849, 15738, + 21119, 15949, 15939, 12414, + 21119, 16233, 15939, 12414, + 21119, 17911, 20156, + 21119, 20156, + 21119, 21349, 897, 19381, 9783, 15939, 15738, + 21119, 22837, 897, 21557, 9783, 15939, 15738, + 21119, 22837, 897, 21557, 9783, 15939, 15739, 11513, 17881, 2761, 18782, + 21119, 28089, 9783, 15939, 12414, + 21122, + 21125, 17298, + 21127, 47, 12318, + 21127, 47, 12502, + 21127, 333, 12502, + 21127, 699, 10851, 12318, + 21127, 699, 10851, 12502, + 21127, 703, 12318, + 21127, 705, 12318, + 21127, 1291, 12318, + 21127, 1291, 12319, 8280, + 21127, 1291, 12319, 14658, + 21127, 1291, 12502, + 21127, 1291, 12503, 8280, + 21127, 2301, 8320, + 21127, 2643, 15141, 12318, + 21127, 2757, 16887, 16531, 82, + 21127, 2757, 16887, 16531, 1282, + 21127, 2757, 16887, 16531, 3232, + 21127, 2757, 16887, 16531, 11818, + 21127, 2757, 16887, 16531, 14112, + 21127, 3809, 12502, + 21127, 6701, 10851, 12502, + 21127, 7059, 6697, 12318, + 21127, 7659, 12318, + 21127, 7670, + 21127, 8281, 7429, 10151, 12318, + 21127, 8281, 7429, 10151, 12502, + 21127, 8281, 10851, 12502, + 21127, 8281, 12379, 12318, + 21127, 8281, 12379, 12502, + 21127, 8281, 12415, 12318, + 21127, 8281, 12415, 12502, + 21127, 8281, 14659, 12415, 12318, + 21127, 8281, 14659, 12415, 12502, + 21127, 8281, 18253, 12318, + 21127, 8281, 21023, 12318, + 21127, 8281, 21023, 12502, + 21127, 8281, 23523, 12319, 8280, + 21127, 8281, 23523, 12503, 8280, + 21127, 8351, 16095, 19141, 18782, + 21127, 8351, 17265, 18782, + 21127, 8351, 19141, 18782, + 21127, 8351, 20933, 8321, 18782, + 21127, 9783, 8809, 12502, + 21127, 9905, 10575, 12318, + 21127, 9905, 10575, 12502, + 21127, 10151, 12318, + 21127, 10151, 12502, + 21127, 10151, 18782, + 21127, 11503, 15843, 12318, + 21127, 11503, 20163, 15843, 12502, + 21127, 12321, 11033, 8808, + 21127, 12321, 15678, + 21127, 12321, 15679, 12502, + 21127, 12517, 12502, + 21127, 12554, + 21127, 12555, 12502, + 21127, 12620, + 21127, 12621, 12502, + 21127, 12923, 12318, + 21127, 12923, 12319, 14658, + 21127, 12923, 12502, + 21127, 13417, 11033, 8808, + 21127, 13417, 15678, + 21127, 13417, 15679, 12502, + 21127, 13421, 18382, + 21127, 13421, 18655, 19318, + 21127, 13421, 18655, 21734, + 21127, 13421, 18655, 22038, + 21127, 13421, 21195, 15176, + 21127, 13421, 23530, + 21127, 13421, 25974, + 21127, 13783, 14911, 16531, 0, + 21127, 13783, 14911, 16531, 1, 11513, 21188, + 21127, 13783, 14911, 16531, 2, + 21127, 13783, 14911, 16531, 4, + 21127, 13783, 14911, 16531, 5, 17846, + 21127, 13783, 14911, 16531, 6, + 21127, 13783, 14911, 16531, 8, + 21127, 13783, 14911, 16531, 10, + 21127, 13783, 14911, 16531, 12, + 21127, 13783, 14911, 16531, 14, + 21127, 13783, 14911, 16531, 16, + 21127, 13783, 14911, 16531, 20, + 21127, 13783, 14911, 16531, 22, + 21127, 13783, 14911, 16531, 23, 11513, 16095, 16661, 15140, + 21127, 13783, 14911, 16531, 24, + 21127, 13783, 14911, 16531, 26, + 21127, 13783, 14911, 16531, 28, + 21127, 13783, 14911, 16531, 29, 11513, 13807, 25993, 17264, + 21127, 13783, 14911, 16531, 29, 11513, 21188, + 21127, 13783, 14911, 16531, 30, + 21127, 13783, 14911, 16531, 34, + 21127, 13783, 14911, 16531, 35, 12502, + 21127, 13783, 14911, 16531, 35, 19016, + 21127, 13783, 14911, 16531, 36, + 21127, 13783, 14911, 16531, 38, + 21127, 13783, 14911, 16531, 40, + 21127, 13783, 14911, 16531, 41, 11513, 13807, 25993, 17264, + 21127, 13783, 14911, 16531, 41, 11513, 21188, + 21127, 13783, 14911, 16531, 42, + 21127, 13783, 14911, 16531, 44, + 21127, 13783, 14911, 16531, 45, 12502, + 21127, 13783, 14911, 16531, 46, + 21127, 13783, 14911, 16531, 50, + 21127, 13783, 14911, 16531, 66, + 21127, 13783, 14911, 16531, 84, + 21127, 13783, 14911, 16531, 98, + 21127, 13783, 14911, 16531, 1412, + 21127, 13783, 14911, 16531, 1422, + 21127, 13783, 14911, 16531, 6064, + 21127, 13783, 14911, 16531, 8351, 36, + 21127, 13783, 14911, 16531, 12366, + 21127, 13783, 14911, 16531, 14756, + 21127, 13783, 14911, 16531, 17465, 45, 12502, + 21127, 13783, 14911, 16531, 18305, 6, + 21127, 13783, 14911, 16531, 18305, 12, + 21127, 13783, 14911, 16531, 18305, 34, + 21127, 13783, 14911, 16531, 18305, 38, + 21127, 13783, 14911, 16531, 21409, 9783, 1, 12318, + 21127, 13783, 16531, 14911, 17835, 12, + 21127, 13783, 16531, 14911, 17835, 22, + 21127, 13783, 16531, 14911, 17835, 24, + 21127, 13783, 16531, 14911, 17835, 26, + 21127, 13783, 16531, 14911, 17835, 34, + 21127, 13807, 25993, 17265, 12502, + 21127, 14005, 10575, 12502, + 21127, 14659, 7429, 10151, 12318, + 21127, 14659, 7429, 10151, 12502, + 21127, 14659, 10851, 12502, + 21127, 14659, 12415, 12318, + 21127, 14659, 12415, 12502, + 21127, 14659, 18253, 12318, + 21127, 14659, 21023, 897, 699, 21023, 12502, + 21127, 14659, 21023, 897, 6701, 21023, 12502, + 21127, 14659, 21023, 12318, + 21127, 14659, 21023, 12502, + 21127, 14659, 23523, 12319, 14658, + 21127, 14659, 23523, 12503, 14658, + 21127, 14837, 17265, 18782, + 21127, 14837, 19141, 18782, + 21127, 14837, 20933, 8321, 18782, + 21127, 14921, 12502, + 21127, 15117, 6697, 12318, + 21127, 15140, + 21127, 15141, 8281, 7429, 12502, + 21127, 15141, 12502, + 21127, 15141, 14659, 7429, 12502, + 21127, 15141, 18782, + 21127, 15703, 13177, 661, 12318, + 21127, 15703, 13177, 661, 12502, + 21127, 15843, 12318, + 21127, 15843, 12502, + 21127, 16093, 12321, 15678, + 21127, 16093, 13417, 15678, + 21127, 16095, 2301, 8320, + 21127, 16095, 9783, 8809, 12502, + 21127, 16095, 9905, 10575, 12318, + 21127, 16095, 9905, 10575, 12502, + 21127, 16095, 10151, 12502, + 21127, 16095, 12321, 15678, + 21127, 16095, 12554, + 21127, 16095, 12555, 12502, + 21127, 16095, 13417, 15678, + 21127, 16095, 15140, + 21127, 16095, 15141, 8281, 7428, + 21127, 16095, 15141, 14659, 7428, + 21127, 16095, 16586, + 21127, 16095, 16587, 12502, + 21127, 16095, 20163, 12554, + 21127, 16095, 20163, 12555, 12502, + 21127, 16095, 20422, + 21127, 16095, 20933, 8321, 12318, + 21127, 16095, 20933, 8321, 12502, + 21127, 16095, 20933, 17265, 18782, + 21127, 16095, 22223, 12318, + 21127, 16095, 22837, 12415, 12502, + 21127, 16095, 23521, 12318, + 21127, 16121, 10575, 12502, + 21127, 16421, 12319, 8280, + 21127, 16421, 12319, 14658, + 21127, 16586, + 21127, 16587, 8281, 7428, + 21127, 16587, 8281, 7429, 12502, + 21127, 16587, 12502, + 21127, 16587, 14659, 7428, + 21127, 16587, 14659, 7429, 12502, + 21127, 16787, 10575, 12318, + 21127, 16804, + 21127, 16805, 12318, + 21127, 17225, 12502, + 21127, 17225, 19635, 12318, + 21127, 17267, 25993, 17265, 12502, + 21127, 17435, 1290, + 21127, 17435, 12321, 15678, + 21127, 17435, 20922, + 21127, 17465, 12923, 12318, + 21127, 17571, 8321, 12502, + 21127, 17625, 12318, + 21127, 17625, 12502, + 21127, 17689, 17298, + 21127, 17846, + 21127, 18077, 22223, 15678, + 21127, 18146, + 21127, 18227, 13069, 2760, + 21127, 18227, 13069, 3240, + 21127, 18227, 13069, 3536, + 21127, 18227, 13069, 7036, + 21127, 18227, 13069, 7058, + 21127, 18227, 13069, 11824, + 21127, 18227, 13069, 15116, + 21127, 18227, 16531, 0, + 21127, 18227, 16531, 358, + 21127, 18227, 16531, 466, + 21127, 18227, 16531, 548, + 21127, 18227, 16531, 720, + 21127, 18999, 19141, 18782, + 21127, 19055, 12502, + 21127, 19381, 12415, 12502, + 21127, 19575, 12318, + 21127, 19575, 12502, + 21127, 19759, 3413, 20311, 10574, + 21127, 19759, 13027, 20498, + 21127, 19759, 14579, 20498, + 21127, 19759, 14911, 16531, 36353, 16, + 21127, 19759, 15156, + 21127, 19759, 15157, 8281, 7428, + 21127, 19759, 15157, 14659, 7428, + 21127, 19759, 15408, + 21127, 19759, 16420, + 21127, 19759, 16531, 0, + 21127, 19759, 16531, 16, + 21127, 19759, 16531, 28, + 21127, 19759, 16531, 40, + 21127, 19759, 16531, 112, + 21127, 19759, 16531, 156, + 21127, 19759, 16531, 188, + 21127, 19759, 16531, 200, + 21127, 19759, 16531, 202, + 21127, 19759, 16531, 204, + 21127, 19759, 16531, 212, + 21127, 19759, 16531, 214, + 21127, 19759, 16531, 272, + 21127, 19759, 16531, 306, + 21127, 19759, 16531, 358, + 21127, 19759, 16531, 554, + 21127, 19759, 16531, 652, + 21127, 19759, 16531, 718, + 21127, 19759, 16531, 782, + 21127, 19759, 16531, 790, + 21127, 19759, 16531, 798, + 21127, 19759, 16531, 1015, 3988, + 21127, 19759, 16531, 1118, + 21127, 19759, 16531, 1590, + 21127, 19759, 16531, 3212, + 21127, 19759, 16531, 3490, + 21127, 19759, 16531, 3902, + 21127, 19759, 16531, 4044, + 21127, 19759, 16531, 7034, + 21127, 19759, 16531, 7437, 10574, + 21127, 19759, 16531, 10629, 10574, + 21127, 19759, 16531, 11680, + 21127, 19759, 16531, 13084, + 21127, 19759, 16531, 13184, + 21127, 19759, 16531, 14428, + 21127, 19759, 16531, 14800, + 21127, 19759, 16531, 16563, 3988, + 21127, 19759, 16531, 20165, 0, + 21127, 19759, 16531, 20165, 8, + 21127, 19759, 16531, 20165, 1015, 3988, + 21127, 19759, 16531, 21603, 690, + 21127, 19759, 16531, 22085, 306, + 21127, 19759, 18281, 20311, 10574, + 21127, 19759, 18281, 22045, 10574, + 21127, 19759, 18824, + 21127, 19759, 20311, 10574, + 21127, 19759, 20502, + 21127, 19759, 20829, 20311, 10574, + 21127, 19759, 26154, + 21127, 19777, 8808, + 21127, 20083, 16402, + 21127, 20152, + 21127, 20163, 12554, + 21127, 20163, 12555, 12502, + 21127, 20163, 15843, 12502, + 21127, 20163, 16095, 5523, 12318, + 21127, 20163, 16095, 5523, 12502, + 21127, 20241, 8281, 7428, + 21127, 20241, 8281, 7429, 12502, + 21127, 20241, 14659, 7428, + 21127, 20241, 14659, 7429, 12502, + 21127, 20422, + 21127, 20587, 12923, 12318, + 21127, 20933, 8321, 12318, + 21127, 20933, 8321, 12502, + 21127, 20933, 15140, + 21127, 21119, 10151, 18782, + 21127, 21119, 12415, 12318, + 21127, 21188, + 21127, 21189, 12502, + 21127, 21349, 12414, + 21127, 21363, 15938, + 21127, 21363, 15939, 21042, + 21127, 21363, 16438, + 21127, 21363, 17086, + 21127, 21363, 17224, + 21127, 21363, 17507, 20501, 20858, + 21127, 21363, 17988, + 21127, 21557, 12415, 18782, + 21127, 21557, 18253, 11513, 5989, 21348, + 21127, 21813, 7659, 12502, + 21127, 22223, 15678, + 21127, 22223, 15679, 12502, + 21127, 22237, 16586, + 21127, 22237, 16587, 12502, + 21127, 22275, 10575, 19586, + 21127, 22275, 13069, 2760, + 21127, 22275, 13069, 3240, + 21127, 22275, 13069, 3536, + 21127, 22275, 13069, 7036, + 21127, 22275, 13069, 7058, + 21127, 22275, 13069, 9358, + 21127, 22275, 13069, 11824, + 21127, 22275, 13069, 13150, + 21127, 22275, 13069, 14778, + 21127, 22275, 13069, 15116, + 21127, 22275, 16531, 0, + 21127, 22275, 16531, 40, + 21127, 22275, 16531, 358, + 21127, 22275, 16531, 466, + 21127, 22275, 16531, 548, + 21127, 22275, 16531, 598, + 21127, 22275, 16531, 720, + 21127, 22469, 16531, 16, + 21127, 22469, 16531, 786, + 21127, 22469, 16531, 790, + 21127, 22469, 16531, 948, + 21127, 22469, 16531, 1015, 3988, + 21127, 22469, 16531, 2766, + 21127, 22469, 16531, 3212, + 21127, 22469, 16531, 3492, + 21127, 22469, 16531, 3606, + 21127, 22469, 16531, 6120, + 21127, 22469, 16531, 7034, + 21127, 22469, 16531, 7474, + 21127, 22469, 16531, 7834, + 21127, 22469, 16531, 7990, + 21127, 22469, 16531, 10512, + 21127, 22469, 16531, 11362, + 21127, 22469, 16531, 11660, + 21127, 22469, 16531, 11678, + 21127, 22469, 16531, 11680, + 21127, 22469, 16531, 13088, + 21127, 22469, 16531, 13294, + 21127, 22469, 16531, 14080, + 21127, 22469, 16531, 14662, + 21127, 22469, 16531, 14908, + 21127, 22469, 16531, 14911, 3988, + 21127, 22469, 16531, 15526, + 21127, 22469, 16531, 15930, + 21127, 22469, 16531, 16060, + 21127, 22469, 16531, 16944, + 21127, 22469, 16531, 17470, + 21127, 22469, 16531, 17618, + 21127, 22469, 16531, 18208, + 21127, 22469, 16531, 18303, 7834, + 21127, 22469, 16531, 18311, 1015, 3988, + 21127, 22469, 16531, 18311, 14911, 3988, + 21127, 22469, 16531, 18524, + 21127, 22469, 16531, 18658, + 21127, 22469, 16531, 19466, + 21127, 22493, 12318, + 21127, 22837, 18253, 11513, 5989, 21348, + 21127, 22959, 8808, + 21127, 23070, + 21127, 23509, 7659, 12502, + 21127, 23521, 12318, + 21127, 23521, 12502, + 21127, 23521, 18782, + 21127, 23740, + 21127, 23774, + 21127, 23850, + 21127, 23902, + 21127, 23904, + 21127, 23906, + 21127, 24193, 10151, 18782, + 21127, 24193, 12415, 12318, + 21127, 25996, + 21127, 36236, + 21127, 36242, + 21127, 36247, 17539, 14929, 8808, + 21127, 36247, 23603, 14929, 8808, + 21135, 11513, 1291, 12318, + 21151, 10574, + 21156, + 21158, + 21167, 10575, 0, + 21167, 10575, 1, 15147, 0, + 21167, 10575, 1, 15147, 272, + 21167, 10575, 1, 15147, 952, + 21167, 10575, 1, 15147, 1866, + 21167, 10575, 1, 15147, 3176, + 21167, 10575, 1, 15147, 7209, 10908, + 21167, 10575, 1, 15147, 9018, + 21167, 10575, 1, 15147, 13765, 7358, + 21167, 10575, 8, + 21167, 10575, 9, 9787, 9, 2677, 9787, 2676, + 21167, 10575, 9, 15147, 2798, + 21167, 10575, 16, + 21167, 10575, 17, 0, + 21167, 10575, 40, + 21167, 10575, 41, 40, + 21167, 10575, 41, 41, 40, + 21167, 10575, 41, 1642, + 21167, 10575, 41, 9787, 41, 41, 20587, 9787, 41, 20586, + 21167, 10575, 41, 9787, 41, 549, 9787, 549, 1547, 9787, 1546, + 21167, 10575, 41, 9787, 41, 3317, 9787, 3316, + 21167, 10575, 54, + 21167, 10575, 60, + 21167, 10575, 61, 7358, + 21167, 10575, 61, 15147, 41, 9905, 41, 9905, 40, + 21167, 10575, 61, 15147, 272, + 21167, 10575, 61, 15147, 1538, + 21167, 10575, 61, 15147, 1867, 7358, + 21167, 10575, 61, 15147, 2676, + 21167, 10575, 61, 15147, 2677, 10908, + 21167, 10575, 61, 15147, 5536, + 21167, 10575, 61, 15147, 6717, 7358, + 21167, 10575, 61, 15147, 7209, 10908, + 21167, 10575, 61, 15147, 7804, + 21167, 10575, 61, 15147, 10514, + 21167, 10575, 61, 15147, 13762, + 21167, 10575, 61, 15147, 14812, + 21167, 10575, 64, + 21167, 10575, 65, 15147, 6868, + 21167, 10575, 76, + 21167, 10575, 77, 15147, 13182, + 21167, 10575, 77, 15147, 14827, 9905, 7326, + 21167, 10575, 78, + 21167, 10575, 79, 15147, 78, + 21167, 10575, 79, 15147, 272, + 21167, 10575, 79, 15147, 366, + 21167, 10575, 79, 15147, 3214, + 21167, 10575, 79, 15147, 3642, + 21167, 10575, 79, 15147, 6664, + 21167, 10575, 79, 15147, 7326, + 21167, 10575, 79, 15147, 7978, + 21167, 10575, 82, + 21167, 10575, 83, 9787, 82, + 21167, 10575, 83, 9905, 9135, 19164, + 21167, 10575, 83, 9905, 9135, 20409, 83, 9905, 9134, + 21167, 10575, 83, 15117, 15146, + 21167, 10575, 108, + 21167, 10575, 116, + 21167, 10575, 117, 15147, 0, + 21167, 10575, 117, 15147, 1546, + 21167, 10575, 117, 15147, 1867, 7358, + 21167, 10575, 122, + 21167, 10575, 123, 9787, 123, 60, + 21167, 10575, 123, 9787, 123, 694, + 21167, 10575, 123, 9787, 123, 15147, 2508, + 21167, 10575, 123, 19743, 122, + 21167, 10575, 150, + 21167, 10575, 151, 15147, 10858, + 21167, 10575, 160, + 21167, 10575, 170, + 21167, 10575, 171, 7358, + 21167, 10575, 171, 9787, 170, + 21167, 10575, 171, 19090, + 21167, 10575, 176, + 21167, 10575, 177, 15147, 1, 9905, 273, 9905, 150, + 21167, 10575, 177, 15147, 40, + 21167, 10575, 177, 15147, 440, + 21167, 10575, 177, 15147, 1546, + 21167, 10575, 177, 15147, 2146, + 21167, 10575, 177, 15147, 2798, + 21167, 10575, 177, 15147, 3180, + 21167, 10575, 177, 15147, 3214, + 21167, 10575, 200, + 21167, 10575, 204, + 21167, 10575, 205, 15147, 434, + 21167, 10575, 205, 15147, 7208, + 21167, 10575, 205, 15147, 7209, 10908, + 21167, 10575, 205, 19164, + 21167, 10575, 205, 19743, 204, + 21167, 10575, 205, 20409, 204, + 21167, 10575, 248, + 21167, 10575, 249, 7358, + 21167, 10575, 258, + 21167, 10575, 259, 15147, 8, + 21167, 10575, 259, 15147, 40, + 21167, 10575, 259, 19743, 258, + 21167, 10575, 264, + 21167, 10575, 265, 19743, 264, + 21167, 10575, 272, + 21167, 10575, 273, 7358, + 21167, 10575, 273, 10908, + 21167, 10575, 273, 10909, 7358, + 21167, 10575, 280, + 21167, 10575, 281, 15147, 40, + 21167, 10575, 281, 15147, 922, + 21167, 10575, 281, 15147, 923, 9787, 281, 15147, 922, + 21167, 10575, 281, 15147, 952, + 21167, 10575, 281, 15147, 1528, + 21167, 10575, 281, 15147, 2060, + 21167, 10575, 281, 15147, 2676, + 21167, 10575, 281, 15147, 3214, + 21167, 10575, 281, 15147, 5536, + 21167, 10575, 281, 15147, 6670, + 21167, 10575, 292, + 21167, 10575, 300, + 21167, 10575, 310, + 21167, 10575, 318, + 21167, 10575, 319, 15147, 7209, 10908, + 21167, 10575, 320, + 21167, 10575, 321, 15147, 10858, + 21167, 10575, 321, 19164, + 21167, 10575, 321, 19743, 320, + 21167, 10575, 321, 20409, 320, + 21167, 10575, 322, + 21167, 10575, 330, + 21167, 10575, 358, + 21167, 10575, 359, 15147, 0, + 21167, 10575, 359, 15147, 40, + 21167, 10575, 359, 15147, 41, 41, 40, + 21167, 10575, 359, 15147, 64, + 21167, 10575, 359, 15147, 65, 9905, 2124, + 21167, 10575, 359, 15147, 116, + 21167, 10575, 359, 15147, 122, + 21167, 10575, 359, 15147, 248, + 21167, 10575, 359, 15147, 258, + 21167, 10575, 359, 15147, 264, + 21167, 10575, 359, 15147, 281, 15147, 5536, + 21167, 10575, 359, 15147, 320, + 21167, 10575, 359, 15147, 358, + 21167, 10575, 359, 15147, 366, + 21167, 10575, 359, 15147, 402, + 21167, 10575, 359, 15147, 416, + 21167, 10575, 359, 15147, 434, + 21167, 10575, 359, 15147, 435, 9905, 170, + 21167, 10575, 359, 15147, 435, 9905, 258, + 21167, 10575, 359, 15147, 435, 9905, 652, + 21167, 10575, 359, 15147, 440, + 21167, 10575, 359, 15147, 441, 9905, 14336, + 21167, 10575, 359, 15147, 470, + 21167, 10575, 359, 15147, 548, + 21167, 10575, 359, 15147, 562, + 21167, 10575, 359, 15147, 610, + 21167, 10575, 359, 15147, 614, + 21167, 10575, 359, 15147, 668, + 21167, 10575, 359, 15147, 672, + 21167, 10575, 359, 15147, 680, + 21167, 10575, 359, 15147, 702, + 21167, 10575, 359, 15147, 802, + 21167, 10575, 359, 15147, 952, + 21167, 10575, 359, 15147, 964, + 21167, 10575, 359, 15147, 1538, + 21167, 10575, 359, 15147, 1546, + 21167, 10575, 359, 15147, 1547, 9905, 10439, 9905, 0, + 21167, 10575, 359, 15147, 1642, + 21167, 10575, 359, 15147, 1866, + 21167, 10575, 359, 15147, 1994, + 21167, 10575, 359, 15147, 2050, + 21167, 10575, 359, 15147, 2324, + 21167, 10575, 359, 15147, 2676, + 21167, 10575, 359, 15147, 3190, + 21167, 10575, 359, 15147, 3212, + 21167, 10575, 359, 15147, 3214, + 21167, 10575, 359, 15147, 3220, + 21167, 10575, 359, 15147, 3230, + 21167, 10575, 359, 15147, 3388, + 21167, 10575, 359, 15147, 3628, + 21167, 10575, 359, 15147, 3642, + 21167, 10575, 359, 15147, 5536, + 21167, 10575, 359, 15147, 5538, + 21167, 10575, 359, 15147, 6868, + 21167, 10575, 359, 15147, 7209, 10908, + 21167, 10575, 359, 15147, 7320, + 21167, 10575, 359, 15147, 7326, + 21167, 10575, 359, 15147, 7327, 9905, 3190, + 21167, 10575, 359, 15147, 7327, 19743, 7326, + 21167, 10575, 359, 15147, 7366, + 21167, 10575, 359, 15147, 10472, + 21167, 10575, 359, 15147, 10516, + 21167, 10575, 359, 15147, 11253, 15147, 548, + 21167, 10575, 359, 15147, 12388, + 21167, 10575, 359, 15147, 12460, + 21167, 10575, 359, 15147, 13182, + 21167, 10575, 359, 15147, 14998, + 21167, 10575, 366, + 21167, 10575, 367, 15147, 40, + 21167, 10575, 367, 15147, 680, + 21167, 10575, 367, 15147, 952, + 21167, 10575, 380, + 21167, 10575, 381, 9787, 281, 15147, 5537, 381, 9787, 281, 15147, 5536, + 21167, 10575, 394, + 21167, 10575, 402, + 21167, 10575, 416, + 21167, 10575, 417, 15147, 952, + 21167, 10575, 426, + 21167, 10575, 427, 7358, + 21167, 10575, 427, 15147, 10858, + 21167, 10575, 434, + 21167, 10575, 440, + 21167, 10575, 441, 9905, 4014, + 21167, 10575, 454, + 21167, 10575, 455, 9787, 454, + 21167, 10575, 466, + 21167, 10575, 470, + 21167, 10575, 471, 15147, 0, + 21167, 10575, 471, 15147, 680, + 21167, 10575, 471, 19090, + 21167, 10575, 478, + 21167, 10575, 479, 15147, 8, + 21167, 10575, 490, + 21167, 10575, 548, + 21167, 10575, 562, + 21167, 10575, 563, 15147, 0, + 21167, 10575, 563, 15147, 8, + 21167, 10575, 563, 15147, 16, + 21167, 10575, 563, 15147, 40, + 21167, 10575, 563, 15147, 60, + 21167, 10575, 563, 15147, 116, + 21167, 10575, 563, 15147, 122, + 21167, 10575, 563, 15147, 300, + 21167, 10575, 563, 15147, 672, + 21167, 10575, 563, 19743, 562, + 21167, 10575, 598, + 21167, 10575, 604, + 21167, 10575, 610, + 21167, 10575, 614, + 21167, 10575, 624, + 21167, 10575, 625, 7358, + 21167, 10575, 625, 15147, 10858, + 21167, 10575, 638, + 21167, 10575, 639, 9787, 638, + 21167, 10575, 648, + 21167, 10575, 649, 7358, + 21167, 10575, 649, 15147, 280, + 21167, 10575, 649, 15147, 440, + 21167, 10575, 649, 19574, + 21167, 10575, 652, + 21167, 10575, 653, 7358, + 21167, 10575, 656, + 21167, 10575, 657, 10908, + 21167, 10575, 668, + 21167, 10575, 672, + 21167, 10575, 676, + 21167, 10575, 680, + 21167, 10575, 681, 7358, + 21167, 10575, 681, 15147, 41, 9905, 41, 9905, 40, + 21167, 10575, 681, 15147, 41, 9905, 41, 9905, 41, 7358, + 21167, 10575, 681, 15147, 440, + 21167, 10575, 681, 15147, 952, + 21167, 10575, 681, 16486, + 21167, 10575, 681, 19090, + 21167, 10575, 681, 19091, 15147, 952, + 21167, 10575, 692, + 21167, 10575, 693, 15147, 40, + 21167, 10575, 693, 15147, 434, + 21167, 10575, 693, 15147, 435, 9905, 150, + 21167, 10575, 693, 15147, 10438, + 21167, 10575, 693, 15147, 13762, + 21167, 10575, 694, + 21167, 10575, 695, 7358, + 21167, 10575, 702, + 21167, 10575, 703, 19090, + 21167, 10575, 703, 19743, 702, + 21167, 10575, 796, + 21167, 10575, 797, 10908, + 21167, 10575, 797, 19165, 15147, 2146, + 21167, 10575, 802, + 21167, 10575, 803, 9787, 802, + 21167, 10575, 806, + 21167, 10575, 807, 9787, 807, 9905, 3190, + 21167, 10575, 842, + 21167, 10575, 843, 15147, 0, + 21167, 10575, 843, 15147, 435, 9905, 204, + 21167, 10575, 843, 15147, 7209, 10908, + 21167, 10575, 843, 15147, 10438, + 21167, 10575, 843, 15147, 10858, + 21167, 10575, 843, 15147, 12460, + 21167, 10575, 922, + 21167, 10575, 923, 7975, 10908, + 21167, 10575, 923, 9787, 923, 9787, 922, + 21167, 10575, 923, 9787, 923, 9787, 923, 19743, 923, 9787, 923, 9787, 922, + 21167, 10575, 923, 9787, 923, 11117, 9787, 11117, 11117, 9787, 11117, 2798, + 21167, 10575, 923, 11883, 10908, + 21167, 10575, 952, + 21167, 10575, 953, 15147, 6671, 10908, + 21167, 10575, 958, + 21167, 10575, 959, 9787, 958, + 21167, 10575, 964, + 21167, 10575, 1052, + 21167, 10575, 1194, + 21167, 10575, 1195, 15147, 2146, + 21167, 10575, 1195, 16461, 15147, 1, 9905, 8812, + 21167, 10575, 1195, 16461, 15147, 116, + 21167, 10575, 1195, 16461, 15147, 248, + 21167, 10575, 1195, 16461, 15147, 249, 9905, 8812, + 21167, 10575, 1195, 16461, 15147, 258, + 21167, 10575, 1195, 16461, 15147, 272, + 21167, 10575, 1195, 16461, 15147, 330, + 21167, 10575, 1195, 16461, 15147, 331, 9905, 416, + 21167, 10575, 1195, 16461, 15147, 394, + 21167, 10575, 1195, 16461, 15147, 416, + 21167, 10575, 1195, 16461, 15147, 417, 9905, 13926, + 21167, 10575, 1195, 16461, 15147, 470, + 21167, 10575, 1195, 16461, 15147, 624, + 21167, 10575, 1195, 16461, 15147, 673, 9905, 7320, + 21167, 10575, 1195, 16461, 15147, 673, 9905, 8812, + 21167, 10575, 1195, 16461, 15147, 1642, + 21167, 10575, 1195, 16461, 15147, 1994, + 21167, 10575, 1195, 16461, 15147, 2324, + 21167, 10575, 1195, 16461, 15147, 2799, 9905, 2798, + 21167, 10575, 1195, 16461, 15147, 3642, + 21167, 10575, 1195, 16461, 15147, 5498, + 21167, 10575, 1195, 16461, 15147, 7320, + 21167, 10575, 1195, 16461, 15147, 10858, + 21167, 10575, 1195, 16461, 15147, 12460, + 21167, 10575, 1202, + 21167, 10575, 1206, + 21167, 10575, 1246, + 21167, 10575, 1252, + 21167, 10575, 1253, 15147, 41, 41, 40, + 21167, 10575, 1253, 15147, 1866, + 21167, 10575, 1253, 15147, 3214, + 21167, 10575, 1254, + 21167, 10575, 1255, 16417, 41, 7359, 6670, + 21167, 10575, 1296, + 21167, 10575, 1297, 15147, 3214, + 21167, 10575, 1297, 15147, 6868, + 21167, 10575, 1298, + 21167, 10575, 1299, 15147, 248, + 21167, 10575, 1299, 15147, 258, + 21167, 10575, 1299, 15147, 272, + 21167, 10575, 1299, 15147, 280, + 21167, 10575, 1299, 15147, 440, + 21167, 10575, 1299, 15147, 478, + 21167, 10575, 1299, 15147, 562, + 21167, 10575, 1299, 15147, 625, 7358, + 21167, 10575, 1299, 15147, 922, + 21167, 10575, 1299, 15147, 923, 95, 8280, + 21167, 10575, 1299, 15147, 1254, + 21167, 10575, 1299, 15147, 1306, + 21167, 10575, 1299, 15147, 1867, 7358, + 21167, 10575, 1299, 15147, 2146, + 21167, 10575, 1299, 15147, 2202, + 21167, 10575, 1299, 15147, 2203, 15147, 2146, + 21167, 10575, 1299, 15147, 2321, 9905, 7326, + 21167, 10575, 1299, 15147, 2410, + 21167, 10575, 1299, 15147, 3214, + 21167, 10575, 1299, 15147, 7321, 7358, + 21167, 10575, 1299, 15147, 7326, + 21167, 10575, 1299, 15147, 8812, + 21167, 10575, 1299, 15147, 12388, + 21167, 10575, 1299, 15147, 13182, + 21167, 10575, 1299, 15147, 16416, + 21167, 10575, 1299, 15147, 16486, + 21167, 10575, 1299, 15147, 16487, 9905, 16416, + 21167, 10575, 1299, 15147, 18400, + 21167, 10575, 1300, + 21167, 10575, 1306, + 21167, 10575, 1524, + 21167, 10575, 1525, 9787, 1524, + 21167, 10575, 1525, 15147, 1, 9905, 151, 9905, 272, + 21167, 10575, 1525, 15147, 1, 9905, 272, + 21167, 10575, 1525, 15147, 1, 9905, 1866, + 21167, 10575, 1525, 15147, 40, + 21167, 10575, 1525, 15147, 82, + 21167, 10575, 1525, 15147, 83, 9905, 1995, 9905, 0, + 21167, 10575, 1525, 15147, 150, + 21167, 10575, 1525, 15147, 160, + 21167, 10575, 1525, 15147, 200, + 21167, 10575, 1525, 15147, 201, 9905, 394, + 21167, 10575, 1525, 15147, 204, + 21167, 10575, 1525, 15147, 205, 15147, 7209, 10908, + 21167, 10575, 1525, 15147, 248, + 21167, 10575, 1525, 15147, 258, + 21167, 10575, 1525, 15147, 273, 9905, 0, + 21167, 10575, 1525, 15147, 273, 9905, 417, 9905, 6868, + 21167, 10575, 1525, 15147, 281, 9905, 402, + 21167, 10575, 1525, 15147, 394, + 21167, 10575, 1525, 15147, 435, 9905, 204, + 21167, 10575, 1525, 15147, 440, + 21167, 10575, 1525, 15147, 470, + 21167, 10575, 1525, 15147, 471, 9905, 176, + 21167, 10575, 1525, 15147, 471, 9905, 258, + 21167, 10575, 1525, 15147, 548, + 21167, 10575, 1525, 15147, 680, + 21167, 10575, 1525, 15147, 681, 9905, 170, + 21167, 10575, 1525, 15147, 843, 10909, 9905, 3366, + 21167, 10575, 1525, 15147, 922, + 21167, 10575, 1525, 15147, 952, + 21167, 10575, 1525, 15147, 965, 9905, 598, + 21167, 10575, 1525, 15147, 1052, + 21167, 10575, 1525, 15147, 1053, 9905, 598, + 21167, 10575, 1525, 15147, 1253, 7358, + 21167, 10575, 1525, 15147, 1253, 15147, 3214, + 21167, 10575, 1525, 15147, 1296, + 21167, 10575, 1525, 15147, 1299, 15147, 1867, 7358, + 21167, 10575, 1525, 15147, 1299, 15147, 16416, + 21167, 10575, 1525, 15147, 1546, + 21167, 10575, 1525, 15147, 1547, 9905, 160, + 21167, 10575, 1525, 15147, 1547, 9905, 470, + 21167, 10575, 1525, 15147, 1600, + 21167, 10575, 1525, 15147, 1601, 9905, 0, + 21167, 10575, 1525, 15147, 1686, + 21167, 10575, 1525, 15147, 1687, 9905, 394, + 21167, 10575, 1525, 15147, 1867, 7358, + 21167, 10575, 1525, 15147, 1893, 9905, 293, 9905, 922, + 21167, 10575, 1525, 15147, 1994, + 21167, 10575, 1525, 15147, 2050, + 21167, 10575, 1525, 15147, 2051, 9905, 2200, + 21167, 10575, 1525, 15147, 2125, 9905, 82, + 21167, 10575, 1525, 15147, 2202, + 21167, 10575, 1525, 15147, 2203, 15147, 2146, + 21167, 10575, 1525, 15147, 2320, + 21167, 10575, 1525, 15147, 2676, + 21167, 10575, 1525, 15147, 2677, 9787, 2676, + 21167, 10575, 1525, 15147, 3180, + 21167, 10575, 1525, 15147, 3190, + 21167, 10575, 1525, 15147, 3214, + 21167, 10575, 1525, 15147, 3215, 9905, 3524, + 21167, 10575, 1525, 15147, 3308, + 21167, 10575, 1525, 15147, 5536, + 21167, 10575, 1525, 15147, 5537, 9905, 1538, + 21167, 10575, 1525, 15147, 6858, + 21167, 10575, 1525, 15147, 7209, 10908, + 21167, 10575, 1525, 15147, 7321, 9905, 638, + 21167, 10575, 1525, 15147, 7690, + 21167, 10575, 1525, 15147, 9018, + 21167, 10575, 1525, 15147, 10472, + 21167, 10575, 1525, 15147, 10476, + 21167, 10575, 1525, 15147, 10858, + 21167, 10575, 1525, 15147, 11888, + 21167, 10575, 1525, 15147, 15766, + 21167, 10575, 1525, 15147, 16416, + 21167, 10575, 1525, 15147, 16487, 9905, 16416, + 21167, 10575, 1528, + 21167, 10575, 1529, 9787, 1529, 1547, 9787, 1546, + 21167, 10575, 1538, + 21167, 10575, 1539, 1529, 9787, 1529, 1547, 9787, 1546, + 21167, 10575, 1540, + 21167, 10575, 1542, + 21167, 10575, 1546, + 21167, 10575, 1600, + 21167, 10575, 1601, 9787, 1600, + 21167, 10575, 1601, 19743, 1600, + 21167, 10575, 1604, + 21167, 10575, 1638, + 21167, 10575, 1639, 7358, + 21167, 10575, 1639, 15147, 1867, 7358, + 21167, 10575, 1639, 15147, 1994, + 21167, 10575, 1639, 15147, 1995, 15147, 1867, 7358, + 21167, 10575, 1639, 15147, 2676, + 21167, 10575, 1639, 15147, 3181, 9905, 11116, + 21167, 10575, 1642, + 21167, 10575, 1643, 9787, 1643, 13842, + 21167, 10575, 1643, 9905, 7327, 15147, 10858, + 21167, 10575, 1643, 15147, 1, 9905, 2146, + 21167, 10575, 1643, 15147, 2146, + 21167, 10575, 1646, + 21167, 10575, 1648, + 21167, 10575, 1649, 15147, 3214, + 21167, 10575, 1654, + 21167, 10575, 1686, + 21167, 10575, 1866, + 21167, 10575, 1867, 604, + 21167, 10575, 1867, 1246, + 21167, 10575, 1867, 7358, + 21167, 10575, 1867, 9787, 1867, 10485, 9787, 10485, 681, 9787, 680, + 21167, 10575, 1870, + 21167, 10575, 1892, + 21167, 10575, 1980, + 21167, 10575, 1981, 19743, 1980, + 21167, 10575, 1984, + 21167, 10575, 1994, + 21167, 10575, 1995, 15147, 1867, 7358, + 21167, 10575, 1996, + 21167, 10575, 1997, 15147, 952, + 21167, 10575, 1997, 19743, 1996, + 21167, 10575, 2003, 18102, + 21167, 10575, 2050, + 21167, 10575, 2060, + 21167, 10575, 2124, + 21167, 10575, 2126, + 21167, 10575, 2127, 19395, 7056, + 21167, 10575, 2128, + 21167, 10575, 2136, + 21167, 10575, 2137, 7358, + 21167, 10575, 2138, + 21167, 10575, 2146, + 21167, 10575, 2147, 20409, 2146, + 21167, 10575, 2200, + 21167, 10575, 2201, 15147, 2200, + 21167, 10575, 2202, + 21167, 10575, 2203, 15147, 2146, + 21167, 10575, 2203, 15147, 2147, 9905, 610, + 21167, 10575, 2264, + 21167, 10575, 2312, + 21167, 10575, 2313, 7359, 15147, 922, + 21167, 10575, 2313, 10908, + 21167, 10575, 2313, 15147, 78, + 21167, 10575, 2313, 15147, 281, 15147, 952, + 21167, 10575, 2313, 15147, 320, + 21167, 10575, 2313, 15147, 366, + 21167, 10575, 2313, 15147, 395, 9905, 922, + 21167, 10575, 2313, 15147, 435, 9905, 204, + 21167, 10575, 2313, 15147, 470, + 21167, 10575, 2313, 15147, 490, + 21167, 10575, 2313, 15147, 625, 9905, 922, + 21167, 10575, 2313, 15147, 952, + 21167, 10575, 2313, 15147, 1686, + 21167, 10575, 2313, 15147, 2798, + 21167, 10575, 2313, 15147, 2799, 9905, 2799, 9905, 2314, + 21167, 10575, 2313, 15147, 3220, + 21167, 10575, 2313, 15147, 6670, + 21167, 10575, 2313, 15147, 6868, + 21167, 10575, 2313, 15147, 6869, 9905, 2200, + 21167, 10575, 2313, 15147, 6869, 10908, + 21167, 10575, 2313, 15147, 7209, 10908, + 21167, 10575, 2313, 15147, 7976, + 21167, 10575, 2313, 15147, 7978, + 21167, 10575, 2313, 15147, 7979, 9905, 922, + 21167, 10575, 2313, 15147, 10577, 9905, 122, + 21167, 10575, 2313, 15147, 10858, + 21167, 10575, 2313, 15147, 11116, + 21167, 10575, 2313, 15147, 13762, + 21167, 10575, 2313, 19090, + 21167, 10575, 2313, 19091, 15147, 952, + 21167, 10575, 2313, 19164, + 21167, 10575, 2313, 19743, 2312, + 21167, 10575, 2313, 20409, 2312, + 21167, 10575, 2314, + 21167, 10575, 2320, + 21167, 10575, 2322, + 21167, 10575, 2324, + 21167, 10575, 2325, 9787, 2324, + 21167, 10575, 2325, 9787, 2325, 1547, 9787, 1546, + 21167, 10575, 2358, + 21167, 10575, 2364, + 21167, 10575, 2376, + 21167, 10575, 2410, + 21167, 10575, 2440, + 21167, 10575, 2470, + 21167, 10575, 2471, 7358, + 21167, 10575, 2508, + 21167, 10575, 2510, + 21167, 10575, 2520, + 21167, 10575, 2521, 18734, + 21167, 10575, 2588, + 21167, 10575, 2598, + 21167, 10575, 2599, 15147, 1547, 9905, 7209, 10908, + 21167, 10575, 2599, 15147, 7209, 10908, + 21167, 10575, 2600, + 21167, 10575, 2676, + 21167, 10575, 2677, 9787, 2676, + 21167, 10575, 2677, 10908, + 21167, 10575, 2677, 13765, 15147, 1546, + 21167, 10575, 2677, 13765, 15147, 3180, + 21167, 10575, 2677, 13765, 15147, 3181, 9787, 2677, 13765, 15147, 3180, + 21167, 10575, 2677, 13765, 15147, 3642, + 21167, 10575, 2677, 13765, 15147, 8812, + 21167, 10575, 2677, 19743, 2676, + 21167, 10575, 2677, 19743, 2677, 13765, 9787, 13764, + 21167, 10575, 2790, + 21167, 10575, 2794, + 21167, 10575, 2798, + 21167, 10575, 3030, + 21167, 10575, 3176, + 21167, 10575, 3177, 7358, + 21167, 10575, 3177, 7359, 15147, 272, + 21167, 10575, 3177, 9787, 3176, + 21167, 10575, 3177, 15147, 0, + 21167, 10575, 3177, 15147, 170, + 21167, 10575, 3177, 15147, 204, + 21167, 10575, 3177, 15147, 272, + 21167, 10575, 3177, 15147, 440, + 21167, 10575, 3177, 15147, 672, + 21167, 10575, 3177, 15147, 676, + 21167, 10575, 3177, 15147, 692, + 21167, 10575, 3177, 15147, 702, + 21167, 10575, 3177, 15147, 1296, + 21167, 10575, 3177, 15147, 1867, 7358, + 21167, 10575, 3177, 15147, 1994, + 21167, 10575, 3177, 15147, 2146, + 21167, 10575, 3177, 15147, 2324, + 21167, 10575, 3177, 15147, 2676, + 21167, 10575, 3177, 15147, 3180, + 21167, 10575, 3177, 15147, 3215, 95, 8280, + 21167, 10575, 3177, 15147, 3366, + 21167, 10575, 3177, 15147, 3642, + 21167, 10575, 3177, 15147, 10472, + 21167, 10575, 3177, 15147, 10858, + 21167, 10575, 3177, 18734, + 21167, 10575, 3180, + 21167, 10575, 3181, 13763, 15147, 5536, + 21167, 10575, 3190, + 21167, 10575, 3212, + 21167, 10575, 3214, + 21167, 10575, 3215, 292, + 21167, 10575, 3215, 9787, 3214, + 21167, 10575, 3215, 9787, 3215, 1529, 9787, 1529, 1547, 9787, 1546, + 21167, 10575, 3215, 9787, 3215, 3367, 9787, 3367, 1547, 9787, 1546, + 21167, 10575, 3215, 9905, 3190, + 21167, 10575, 3215, 9905, 7690, + 21167, 10575, 3215, 9905, 9138, + 21167, 10575, 3220, + 21167, 10575, 3221, 9787, 20163, 3220, + 21167, 10575, 3230, + 21167, 10575, 3304, + 21167, 10575, 3308, + 21167, 10575, 3316, + 21167, 10575, 3366, + 21167, 10575, 3367, 9787, 3367, 479, 9787, 479, 6671, 9787, 6670, + 21167, 10575, 3367, 19164, + 21167, 10575, 3370, + 21167, 10575, 3371, 15147, 116, + 21167, 10575, 3371, 15147, 680, + 21167, 10575, 3371, 15147, 1642, + 21167, 10575, 3371, 15147, 3214, + 21167, 10575, 3371, 15147, 3220, + 21167, 10575, 3371, 15147, 11116, + 21167, 10575, 3388, + 21167, 10575, 3434, + 21167, 10575, 3440, + 21167, 10575, 3446, + 21167, 10575, 3447, 9787, 3446, + 21167, 10575, 3447, 9787, 3447, 1529, 9787, 1529, 1547, 9787, 1546, + 21167, 10575, 3447, 15147, 10858, + 21167, 10575, 3516, + 21167, 10575, 3518, + 21167, 10575, 3519, 15147, 7209, 10908, + 21167, 10575, 3519, 15147, 15117, 6670, + 21167, 10575, 3524, + 21167, 10575, 3525, 9787, 3525, 797, 9787, 796, + 21167, 10575, 3628, + 21167, 10575, 3629, 15147, 1, 9905, 272, + 21167, 10575, 3629, 15147, 1, 9905, 466, + 21167, 10575, 3629, 15147, 78, + 21167, 10575, 3629, 15147, 272, + 21167, 10575, 3629, 15147, 672, + 21167, 10575, 3629, 15147, 673, 9905, 116, + 21167, 10575, 3629, 15147, 673, 9905, 922, + 21167, 10575, 3629, 15147, 680, + 21167, 10575, 3629, 15147, 2676, + 21167, 10575, 3629, 20162, + 21167, 10575, 3630, + 21167, 10575, 3634, + 21167, 10575, 3638, + 21167, 10575, 3639, 15147, 0, + 21167, 10575, 3639, 15147, 41, 9905, 1642, + 21167, 10575, 3639, 15147, 248, + 21167, 10575, 3639, 15147, 264, + 21167, 10575, 3639, 15147, 272, + 21167, 10575, 3639, 15147, 320, + 21167, 10575, 3639, 15147, 366, + 21167, 10575, 3639, 15147, 548, + 21167, 10575, 3639, 15147, 668, + 21167, 10575, 3639, 15147, 680, + 21167, 10575, 3639, 15147, 964, + 21167, 10575, 3639, 15147, 1306, + 21167, 10575, 3639, 15147, 1538, + 21167, 10575, 3639, 15147, 1546, + 21167, 10575, 3639, 15147, 1866, + 21167, 10575, 3639, 15147, 1892, + 21167, 10575, 3639, 15147, 2314, + 21167, 10575, 3639, 15147, 2324, + 21167, 10575, 3639, 15147, 2440, + 21167, 10575, 3639, 15147, 3214, + 21167, 10575, 3639, 15147, 7209, 10908, + 21167, 10575, 3639, 15147, 10572, + 21167, 10575, 3639, 15147, 13020, + 21167, 10575, 3639, 15147, 15290, + 21167, 10575, 3639, 15147, 15750, + 21167, 10575, 3639, 15147, 18484, + 21167, 10575, 3642, + 21167, 10575, 3643, 15147, 0, + 21167, 10575, 3643, 15147, 380, + 21167, 10575, 3643, 15147, 2146, + 21167, 10575, 3643, 15147, 10858, + 21167, 10575, 3650, + 21167, 10575, 3651, 15147, 16416, + 21167, 10575, 3652, + 21167, 10575, 4014, + 21167, 10575, 4018, + 21167, 10575, 4032, + 21167, 10575, 4054, + 21167, 10575, 4056, + 21167, 10575, 4057, 7975, 10908, + 21167, 10575, 4060, + 21167, 10575, 4086, + 21167, 10575, 4087, 15147, 0, + 21167, 10575, 4087, 15147, 15117, 6671, 10908, + 21167, 10575, 4088, + 21167, 10575, 5480, + 21167, 10575, 5498, + 21167, 10575, 5499, 15147, 2134, + 21167, 10575, 5499, 15147, 3214, + 21167, 10575, 5512, + 21167, 10575, 5520, + 21167, 10575, 5521, 15147, 2146, + 21167, 10575, 5536, + 21167, 10575, 5968, + 21167, 10575, 6136, + 21167, 10575, 6530, + 21167, 10575, 6664, + 21167, 10575, 6665, 15147, 680, + 21167, 10575, 6670, + 21167, 10575, 6671, 9905, 3220, + 21167, 10575, 6710, + 21167, 10575, 6716, + 21167, 10575, 6717, 7358, + 21167, 10575, 6717, 7359, 7358, + 21167, 10575, 6718, + 21167, 10575, 6724, + 21167, 10575, 6834, + 21167, 10575, 6838, + 21167, 10575, 6858, + 21167, 10575, 6868, + 21167, 10575, 6869, 19743, 6868, + 21167, 10575, 6886, + 21167, 10575, 6887, 15147, 0, + 21167, 10575, 6887, 15147, 1, 9905, 2200, + 21167, 10575, 6887, 15147, 1, 9905, 2201, 15147, 2200, + 21167, 10575, 6887, 15147, 82, + 21167, 10575, 6887, 15147, 272, + 21167, 10575, 6887, 15147, 273, 7358, + 21167, 10575, 6887, 15147, 394, + 21167, 10575, 6887, 15147, 402, + 21167, 10575, 6887, 15147, 416, + 21167, 10575, 6887, 15147, 638, + 21167, 10575, 6887, 15147, 672, + 21167, 10575, 6887, 15147, 680, + 21167, 10575, 6887, 15147, 952, + 21167, 10575, 6887, 15147, 1642, + 21167, 10575, 6887, 15147, 1867, 7358, + 21167, 10575, 6887, 15147, 2124, + 21167, 10575, 6887, 15147, 2201, 15147, 2200, + 21167, 10575, 6887, 15147, 3214, + 21167, 10575, 6887, 15147, 6717, 7358, + 21167, 10575, 6887, 15147, 6717, 7359, 7358, + 21167, 10575, 6887, 15147, 16416, + 21167, 10575, 6887, 15147, 16417, 19164, + 21167, 10575, 6887, 19091, 15147, 280, + 21167, 10575, 6887, 19091, 15147, 394, + 21167, 10575, 6887, 19091, 15147, 434, + 21167, 10575, 6887, 19091, 15147, 638, + 21167, 10575, 6887, 19091, 15147, 922, + 21167, 10575, 6887, 19091, 15147, 1867, 7358, + 21167, 10575, 6887, 19091, 15147, 2200, + 21167, 10575, 6887, 19091, 15147, 2410, + 21167, 10575, 7200, + 21167, 10575, 7201, 19015, 16745, 17974, + 21167, 10575, 7201, 19743, 7200, + 21167, 10575, 7208, + 21167, 10575, 7209, 9787, 7208, + 21167, 10575, 7209, 10908, + 21167, 10575, 7209, 19743, 7208, + 21167, 10575, 7210, + 21167, 10575, 7230, + 21167, 10575, 7320, + 21167, 10575, 7321, 7358, + 21167, 10575, 7322, + 21167, 10575, 7323, 15147, 1, 9905, 1866, + 21167, 10575, 7323, 15147, 417, 9905, 1866, + 21167, 10575, 7323, 15147, 548, + 21167, 10575, 7323, 15147, 1866, + 21167, 10575, 7323, 15147, 7209, 10908, + 21167, 10575, 7326, + 21167, 10575, 7327, 10908, + 21167, 10575, 7327, 15147, 952, + 21167, 10575, 7327, 15147, 7327, 19743, 7326, + 21167, 10575, 7327, 15147, 10858, + 21167, 10575, 7327, 19743, 7326, + 21167, 10575, 7366, + 21167, 10575, 7690, + 21167, 10575, 7691, 15147, 82, + 21167, 10575, 7691, 15147, 680, + 21167, 10575, 7691, 15147, 1686, + 21167, 10575, 7691, 15147, 8332, + 21167, 10575, 7691, 15147, 16416, + 21167, 10575, 7692, + 21167, 10575, 7704, + 21167, 10575, 7790, + 21167, 10575, 7791, 9787, 7791, 1052, + 21167, 10575, 7791, 9787, 7791, 19164, + 21167, 10575, 7804, + 21167, 10575, 7976, + 21167, 10575, 7978, + 21167, 10575, 7980, + 21167, 10575, 7982, + 21167, 10575, 7983, 9787, 7982, + 21167, 10575, 7992, + 21167, 10575, 7994, + 21167, 10575, 8112, + 21167, 10575, 8332, + 21167, 10575, 8812, + 21167, 10575, 8862, + 21167, 10575, 9018, + 21167, 10575, 9019, 9787, 9018, + 21167, 10575, 9019, 9787, 9019, 15147, 1, 9905, 466, + 21167, 10575, 9019, 9787, 9019, 15147, 248, + 21167, 10575, 9019, 9787, 9019, 15147, 1994, + 21167, 10575, 9019, 15147, 0, + 21167, 10575, 9019, 15147, 796, + 21167, 10575, 9019, 15147, 2146, + 21167, 10575, 9019, 19743, 9018, + 21167, 10575, 9134, + 21167, 10575, 9135, 15147, 3221, 10908, + 21167, 10575, 9135, 20162, + 21167, 10575, 9135, 20409, 9134, + 21167, 10575, 9138, + 21167, 10575, 9356, + 21167, 10575, 9522, + 21167, 10575, 9523, 9787, 9523, 1053, 9787, 1052, + 21167, 10575, 9523, 10908, + 21167, 10575, 9523, 19015, 16745, 17974, + 21167, 10575, 9890, + 21167, 10575, 10438, + 21167, 10575, 10439, 15147, 0, + 21167, 10575, 10439, 15147, 40, + 21167, 10575, 10439, 15147, 41, 9905, 0, + 21167, 10575, 10439, 15147, 470, + 21167, 10575, 10439, 15147, 952, + 21167, 10575, 10439, 15147, 3524, + 21167, 10575, 10439, 15147, 7326, + 21167, 10575, 10439, 15147, 10514, + 21167, 10575, 10440, + 21167, 10575, 10441, 10908, + 21167, 10575, 10462, + 21167, 10575, 10472, + 21167, 10575, 10473, 15147, 0, + 21167, 10575, 10473, 15147, 320, + 21167, 10575, 10476, + 21167, 10575, 10477, 15147, 0, + 21167, 10575, 10477, 15147, 958, + 21167, 10575, 10477, 15147, 1254, + 21167, 10575, 10477, 15147, 1546, + 21167, 10575, 10477, 15147, 1866, + 21167, 10575, 10477, 15147, 1867, 7358, + 21167, 10575, 10477, 15147, 2322, + 21167, 10575, 10477, 15147, 2470, + 21167, 10575, 10477, 15147, 3180, + 21167, 10575, 10477, 15147, 12580, + 21167, 10575, 10477, 15147, 16486, + 21167, 10575, 10484, + 21167, 10575, 10485, 9787, 10485, 1053, 9787, 1052, + 21167, 10575, 10485, 10908, + 21167, 10575, 10514, + 21167, 10575, 10515, 9905, 177, 15147, 82, + 21167, 10575, 10515, 9905, 1299, 15147, 478, + 21167, 10575, 10572, + 21167, 10575, 10573, 9787, 10573, 10514, + 21167, 10575, 10576, + 21167, 10575, 10724, + 21167, 10575, 10736, + 21167, 10575, 10858, + 21167, 10575, 10859, 9905, 3176, + 21167, 10575, 11116, + 21167, 10575, 11242, + 21167, 10575, 11252, + 21167, 10575, 11253, 15147, 548, + 21167, 10575, 11253, 15147, 16416, + 21167, 10575, 11260, + 21167, 10575, 11268, + 21167, 10575, 11270, + 21167, 10575, 11814, + 21167, 10575, 11888, + 21167, 10575, 12354, + 21167, 10575, 12388, + 21167, 10575, 12410, + 21167, 10575, 12416, + 21167, 10575, 12460, + 21167, 10575, 12466, + 21167, 10575, 12580, + 21167, 10575, 12581, 9787, 12580, + 21167, 10575, 13020, + 21167, 10575, 13022, + 21167, 10575, 13110, + 21167, 10575, 13182, + 21167, 10575, 13183, 46, + 21167, 10575, 13324, + 21167, 10575, 13382, + 21167, 10575, 13390, + 21167, 10575, 13430, + 21167, 10575, 13648, + 21167, 10575, 13678, + 21167, 10575, 13710, + 21167, 10575, 13762, + 21167, 10575, 13763, 15147, 0, + 21167, 10575, 13763, 15147, 1, 9905, 151, 9905, 272, + 21167, 10575, 13763, 15147, 1, 9905, 1546, + 21167, 10575, 13763, 15147, 1, 9905, 2200, + 21167, 10575, 13763, 15147, 40, + 21167, 10575, 13763, 15147, 41, 9905, 0, + 21167, 10575, 13763, 15147, 41, 9905, 41, 9905, 40, + 21167, 10575, 13763, 15147, 78, + 21167, 10575, 13763, 15147, 82, + 21167, 10575, 13763, 15147, 116, + 21167, 10575, 13763, 15147, 204, + 21167, 10575, 13763, 15147, 248, + 21167, 10575, 13763, 15147, 258, + 21167, 10575, 13763, 15147, 272, + 21167, 10575, 13763, 15147, 281, 15147, 2676, + 21167, 10575, 13763, 15147, 320, + 21167, 10575, 13763, 15147, 321, 9905, 272, + 21167, 10575, 13763, 15147, 321, 9905, 416, + 21167, 10575, 13763, 15147, 366, + 21167, 10575, 13763, 15147, 416, + 21167, 10575, 13763, 15147, 434, + 21167, 10575, 13763, 15147, 435, 9905, 204, + 21167, 10575, 13763, 15147, 470, + 21167, 10575, 13763, 15147, 653, 9905, 1, 9905, 639, 9905, 466, + 21167, 10575, 13763, 15147, 673, 9905, 922, + 21167, 10575, 13763, 15147, 680, + 21167, 10575, 13763, 15147, 807, 9787, 806, + 21167, 10575, 13763, 15147, 923, 11883, 10908, + 21167, 10575, 13763, 15147, 952, + 21167, 10575, 13763, 15147, 1206, + 21167, 10575, 13763, 15147, 1546, + 21167, 10575, 13763, 15147, 1642, + 21167, 10575, 13763, 15147, 1643, 9905, 1642, + 21167, 10575, 13763, 15147, 1686, + 21167, 10575, 13763, 15147, 1867, 7358, + 21167, 10575, 13763, 15147, 2060, + 21167, 10575, 13763, 15147, 2124, + 21167, 10575, 13763, 15147, 2136, + 21167, 10575, 13763, 15147, 2137, 9905, 281, 9905, 0, + 21167, 10575, 13763, 15147, 2322, + 21167, 10575, 13763, 15147, 3215, 9905, 3308, + 21167, 10575, 13763, 15147, 3308, + 21167, 10575, 13763, 15147, 3370, + 21167, 10575, 13763, 15147, 3642, + 21167, 10575, 13763, 15147, 8332, + 21167, 10575, 13763, 15147, 9018, + 21167, 10575, 13763, 15147, 10514, + 21167, 10575, 13763, 15147, 10515, 9905, 10514, + 21167, 10575, 13763, 15147, 10858, + 21167, 10575, 13763, 15147, 13762, + 21167, 10575, 13763, 15147, 14827, 9905, 7327, 9905, 13182, + 21167, 10575, 13763, 15147, 14827, 9905, 7327, 10908, + 21167, 10575, 13763, 19164, + 21167, 10575, 13764, + 21167, 10575, 13765, 7358, + 21167, 10575, 13765, 7359, 9787, 13765, 7359, 3214, + 21167, 10575, 13765, 15147, 3214, + 21167, 10575, 13765, 15147, 3215, 9905, 3308, + 21167, 10575, 13842, + 21167, 10575, 13843, 9787, 13842, + 21167, 10575, 13843, 19090, + 21167, 10575, 13843, 20409, 13842, + 21167, 10575, 13926, + 21167, 10575, 14050, + 21167, 10575, 14051, 7358, + 21167, 10575, 14051, 15147, 0, + 21167, 10575, 14051, 15147, 1, 9905, 160, + 21167, 10575, 14051, 15147, 160, + 21167, 10575, 14051, 15147, 796, + 21167, 10575, 14072, + 21167, 10575, 14172, + 21167, 10575, 14336, + 21167, 10575, 14337, 843, 15147, 116, + 21167, 10575, 14337, 843, 15147, 394, + 21167, 10575, 14337, 843, 15147, 470, + 21167, 10575, 14337, 843, 15147, 672, + 21167, 10575, 14337, 843, 15147, 1298, + 21167, 10575, 14337, 843, 15147, 1642, + 21167, 10575, 14337, 843, 15147, 1867, 7358, + 21167, 10575, 14337, 843, 15147, 7978, + 21167, 10575, 14337, 843, 15147, 14872, + 21167, 10575, 14337, 843, 15147, 15750, + 21167, 10575, 14337, 16461, 15147, 116, + 21167, 10575, 14337, 16461, 15147, 117, 40, + 21167, 10575, 14522, + 21167, 10575, 14523, 19574, + 21167, 10575, 14540, + 21167, 10575, 14541, 15147, 680, + 21167, 10575, 14541, 15147, 796, + 21167, 10575, 14541, 15147, 1996, + 21167, 10575, 14541, 20409, 14540, + 21167, 10575, 14780, + 21167, 10575, 14790, + 21167, 10575, 14806, + 21167, 10575, 14812, + 21167, 10575, 14826, + 21167, 10575, 14872, + 21167, 10575, 14998, + 21167, 10575, 15276, + 21167, 10575, 15290, + 21167, 10575, 15291, 15147, 40, + 21167, 10575, 15296, + 21167, 10575, 15630, + 21167, 10575, 15750, + 21167, 10575, 15766, + 21167, 10575, 15767, 15147, 478, + 21167, 10575, 15767, 15147, 796, + 21167, 10575, 15767, 15147, 842, + 21167, 10575, 16238, + 21167, 10575, 16296, + 21167, 10575, 16416, + 21167, 10575, 16417, 9787, 16417, 13763, 15147, 41, 9787, 13763, 15147, 40, + 21167, 10575, 16417, 13763, 15147, 41, 9787, 13763, 15147, 40, + 21167, 10575, 16460, + 21167, 10575, 16461, 9787, 16460, + 21167, 10575, 16486, + 21167, 10575, 16488, + 21167, 10575, 16500, + 21167, 10575, 16540, + 21167, 10575, 16690, + 21167, 10575, 16696, + 21167, 10575, 16742, + 21167, 10575, 16743, 15147, 40, + 21167, 10575, 16743, 15147, 41, 9905, 40, + 21167, 10575, 16743, 15147, 82, + 21167, 10575, 16743, 15147, 258, + 21167, 10575, 16743, 15147, 280, + 21167, 10575, 16743, 15147, 435, 9905, 7209, 10908, + 21167, 10575, 16743, 15147, 470, + 21167, 10575, 16743, 15147, 673, 9905, 922, + 21167, 10575, 16743, 15147, 922, + 21167, 10575, 16743, 15147, 923, 9905, 922, + 21167, 10575, 16743, 15147, 958, + 21167, 10575, 16743, 15147, 1253, 7358, + 21167, 10575, 16743, 15147, 1642, + 21167, 10575, 16743, 15147, 1646, + 21167, 10575, 16743, 15147, 2676, + 21167, 10575, 16743, 15147, 2799, 9905, 2798, + 21167, 10575, 16743, 15147, 3214, + 21167, 10575, 16743, 15147, 3215, 9905, 1, 82, + 21167, 10575, 16743, 15147, 3215, 9905, 922, + 21167, 10575, 16743, 15147, 3215, 9905, 923, 9905, 922, + 21167, 10575, 16743, 15147, 3642, + 21167, 10575, 16743, 15147, 7326, + 21167, 10575, 16743, 15147, 8812, + 21167, 10575, 16743, 15147, 13678, + 21167, 10575, 16743, 15147, 15290, + 21167, 10575, 16743, 15147, 18408, + 21167, 10575, 17070, + 21167, 10575, 17132, + 21167, 10575, 17142, + 21167, 10575, 17158, + 21167, 10575, 17278, + 21167, 10575, 17510, + 21167, 10575, 18196, + 21167, 10575, 18197, 15147, 40, + 21167, 10575, 18197, 15147, 2146, + 21167, 10575, 18398, + 21167, 10575, 18402, + 21167, 10575, 18404, + 21167, 10575, 18406, + 21167, 10575, 18408, + 21167, 10575, 18410, + 21167, 10575, 18412, + 21167, 10575, 18415, 9787, 18415, 7358, + 21167, 10575, 18416, + 21167, 10575, 18419, 9787, 18418, + 21167, 10575, 18420, + 21167, 10575, 18422, + 21167, 10575, 18424, + 21167, 10575, 18426, + 21167, 10575, 18428, + 21167, 10575, 18430, + 21167, 10575, 18432, + 21167, 10575, 18434, + 21167, 10575, 18436, + 21167, 10575, 18438, + 21167, 10575, 18440, + 21167, 10575, 18442, + 21167, 10575, 18444, + 21167, 10575, 18446, + 21167, 10575, 18448, + 21167, 10575, 18450, + 21167, 10575, 18452, + 21167, 10575, 18454, + 21167, 10575, 18456, + 21167, 10575, 18457, 15147, 264, + 21167, 10575, 18457, 15147, 673, 9905, 108, + 21167, 10575, 18457, 15147, 1866, + 21167, 10575, 18457, 15147, 2799, 9905, 2314, + 21167, 10575, 18457, 15147, 2799, 9905, 2799, 9905, 2314, + 21167, 10575, 18458, + 21167, 10575, 18460, + 21167, 10575, 18462, + 21167, 10575, 18464, + 21167, 10575, 18466, + 21167, 10575, 18468, + 21167, 10575, 18470, + 21167, 10575, 18472, + 21167, 10575, 18474, + 21167, 10575, 18476, + 21167, 10575, 18478, + 21167, 10575, 18479, 15147, 394, + 21167, 10575, 18479, 15147, 652, + 21167, 10575, 18479, 15147, 672, + 21167, 10575, 18479, 15147, 680, + 21167, 10575, 18479, 15147, 922, + 21167, 10575, 18479, 15147, 952, + 21167, 10575, 18479, 15147, 2124, + 21167, 10575, 18479, 15147, 3388, + 21167, 10575, 18479, 15147, 6717, 7359, 7358, + 21167, 10575, 18479, 15147, 15290, + 21167, 10575, 18480, + 21167, 10575, 18482, + 21167, 10575, 18483, 15147, 248, + 21167, 10575, 18483, 15147, 478, + 21167, 10575, 18483, 15147, 680, + 21167, 10575, 18483, 15147, 1296, + 21167, 10575, 18483, 15147, 1866, + 21167, 10575, 18483, 15147, 1867, 7358, + 21167, 10575, 18483, 15147, 2799, 9905, 2799, 9905, 2314, + 21167, 10575, 18483, 15147, 14813, 9905, 366, + 21167, 10575, 18483, 15147, 15290, + 21167, 10575, 18486, + 21167, 10575, 18488, + 21167, 10575, 20646, + 21167, 18729, 10575, 2757, 19573, 2761, 14874, + 21167, 18729, 10575, 2757, 19573, 2761, 18950, + 21167, 18729, 10575, 2761, 5980, + 21167, 18729, 10575, 2761, 6138, + 21167, 18729, 10575, 2761, 7429, 1654, + 21167, 18729, 10575, 2761, 13192, + 21167, 18729, 10575, 2761, 13350, + 21167, 18729, 10575, 2761, 13352, + 21167, 18729, 10575, 2761, 14798, + 21167, 18729, 10575, 2761, 15109, 6670, + 21167, 18729, 10575, 2761, 15109, 19395, 7057, 0, + 21167, 18729, 10575, 2761, 16107, 922, + 21167, 18729, 10575, 2761, 18951, 922, + 21167, 18729, 10575, 2761, 18951, 1654, + 21167, 18729, 10575, 3241, 40, + 21167, 18729, 10575, 3241, 41, 19395, 7056, + 21167, 18729, 10575, 3241, 922, + 21167, 18729, 10575, 3241, 923, 10908, + 21167, 18729, 10575, 3241, 6670, + 21167, 18729, 10575, 3241, 13350, + 21167, 18729, 10575, 3241, 14790, + 21167, 18729, 10575, 3241, 19395, 7057, 5540, + 21167, 18729, 10575, 3537, 922, + 21167, 18729, 10575, 3537, 923, 10908, + 21167, 18729, 10575, 3537, 5980, + 21167, 18729, 10575, 3537, 6138, + 21167, 18729, 10575, 3537, 13192, + 21167, 18729, 10575, 3537, 13350, + 21167, 18729, 10575, 3537, 13352, + 21167, 18729, 10575, 3537, 14790, + 21167, 18729, 10575, 3537, 14798, + 21167, 18729, 10575, 3537, 17371, 6670, + 21167, 18729, 10575, 3537, 17371, 19395, 7057, 0, + 21167, 18729, 10575, 7037, 40, + 21167, 18729, 10575, 7037, 41, 19395, 7056, + 21167, 18729, 10575, 7037, 922, + 21167, 18729, 10575, 7037, 923, 10908, + 21167, 18729, 10575, 7037, 5980, + 21167, 18729, 10575, 7037, 5981, 19395, 7056, + 21167, 18729, 10575, 7037, 6138, + 21167, 18729, 10575, 7037, 6670, + 21167, 18729, 10575, 7037, 13350, + 21167, 18729, 10575, 7037, 13352, + 21167, 18729, 10575, 7037, 14790, + 21167, 18729, 10575, 7037, 14798, + 21167, 18729, 10575, 7037, 17175, 6670, + 21167, 18729, 10575, 7059, 40, + 21167, 18729, 10575, 7059, 41, 19395, 7056, + 21167, 18729, 10575, 7059, 922, + 21167, 18729, 10575, 7059, 923, 10908, + 21167, 18729, 10575, 7059, 5980, + 21167, 18729, 10575, 7059, 5981, 19395, 7056, + 21167, 18729, 10575, 7059, 6138, + 21167, 18729, 10575, 7059, 6670, + 21167, 18729, 10575, 7059, 13350, + 21167, 18729, 10575, 7059, 13352, + 21167, 18729, 10575, 7059, 14790, + 21167, 18729, 10575, 7059, 14798, + 21167, 18729, 10575, 7059, 19395, 7057, 13814, + 21167, 18729, 10575, 7059, 19395, 7057, 13815, 0, + 21167, 18729, 10575, 7059, 19395, 7057, 13815, 2, + 21167, 18729, 10575, 7059, 19395, 7057, 16542, + 21167, 18729, 10575, 9359, 40, + 21167, 18729, 10575, 9359, 41, 19395, 7056, + 21167, 18729, 10575, 9359, 922, + 21167, 18729, 10575, 9359, 6670, + 21167, 18729, 10575, 9359, 13350, + 21167, 18729, 10575, 9359, 14790, + 21167, 18729, 10575, 9359, 19395, 7057, 16364, + 21167, 18729, 10575, 9359, 19395, 7057, 16365, 0, + 21167, 18729, 10575, 9359, 19395, 7057, 18292, + 21167, 18729, 10575, 9359, 19395, 7057, 18294, + 21167, 18729, 10575, 13151, 40, + 21167, 18729, 10575, 13151, 41, 19395, 7056, + 21167, 18729, 10575, 13151, 922, + 21167, 18729, 10575, 13151, 6670, + 21167, 18729, 10575, 13151, 13350, + 21167, 18729, 10575, 13151, 14790, + 21167, 18729, 10575, 13151, 19395, 7057, 11272, + 21167, 18729, 10575, 13151, 19395, 7057, 15292, + 21167, 18729, 10575, 14779, 40, + 21167, 18729, 10575, 14779, 41, 19395, 7056, + 21167, 18729, 10575, 14779, 922, + 21167, 18729, 10575, 14779, 6670, + 21167, 18729, 10575, 14779, 13350, + 21167, 18729, 10575, 14779, 14790, + 21167, 18729, 10575, 14779, 19395, 7057, 7805, 0, + 21167, 18729, 10575, 14779, 19395, 7057, 7805, 2, + 21167, 18729, 10575, 14779, 19395, 7057, 13590, + 21167, 18729, 10575, 14791, 15147, 1539, 9905, 2440, + 21167, 18729, 10575, 14791, 15147, 1539, 9905, 6670, + 21167, 18729, 10575, 15117, 922, + 21167, 18729, 10575, 15117, 923, 10908, + 21167, 18729, 10575, 15117, 5980, + 21167, 18729, 10575, 15117, 6138, + 21167, 18729, 10575, 15117, 6139, 19395, 7056, + 21167, 18729, 10575, 15117, 6670, + 21167, 18729, 10575, 15117, 13350, + 21167, 18729, 10575, 15117, 13352, + 21167, 18729, 10575, 15117, 14790, + 21167, 18729, 10575, 15117, 14791, 19395, 7056, + 21167, 18729, 10575, 15117, 14798, + 21167, 18729, 10575, 15117, 14799, 19395, 7056, + 21167, 18729, 10575, 15117, 19395, 7057, 13188, + 21167, 18729, 10575, 15117, 19395, 7057, 13190, + 21167, 18729, 10575, 18103, 2761, 15108, + 21167, 18729, 10575, 18103, 3537, 17370, + 21167, 18729, 10575, 18103, 13254, + 21167, 18729, 10575, 18103, 13284, + 21167, 18729, 10575, 21638, + 21167, 18729, 10575, 21640, + 21167, 23555, 10575, 2757, 19573, 11537, 18010, + 21167, 23555, 10575, 19791, 12916, + 21167, 23555, 10575, 19791, 20860, + 21167, 23555, 10575, 19791, 21772, + 21167, 23555, 10575, 20933, 12916, + 21175, 11046, + 21181, 17299, 13807, 699, 897, 22494, + 21181, 17299, 13807, 699, 897, 22495, 11513, 11472, + 21181, 17299, 13807, 699, 897, 22495, 11513, 15938, + 21181, 17299, 13807, 699, 897, 22495, 11513, 20858, + 21181, 17299, 13807, 6701, 897, 22494, + 21181, 17299, 13807, 6701, 897, 22495, 11513, 11472, + 21181, 17299, 13807, 6701, 897, 22495, 11513, 15938, + 21181, 17299, 13807, 6701, 897, 22495, 11513, 20858, + 21181, 17299, 13807, 20933, 897, 3473, 8280, + 21181, 17299, 13807, 20933, 897, 3473, 14658, + 21181, 17299, 13807, 20933, 897, 11472, + 21181, 17299, 13807, 20933, 897, 15827, 8280, + 21181, 17299, 13807, 20933, 897, 15827, 14658, + 21181, 17299, 13807, 20933, 11513, 15938, + 21181, 17299, 13807, 20933, 11513, 20858, + 21188, + 21203, 16824, + 21207, 6996, + 21349, 3537, 16321, 12414, + 21349, 12414, + 21349, 12415, 661, 964, + 21349, 12415, 897, 14659, 2761, 16107, 12532, + 21349, 12415, 7065, 964, + 21349, 12415, 11513, 3445, 21556, + 21349, 12415, 11513, 3445, 22836, + 21349, 12415, 11513, 13779, 20859, 21022, + 21349, 12415, 11513, 14911, 20859, 21022, + 21349, 12415, 11513, 14911, 23211, 21022, + 21349, 12415, 11513, 15975, 21556, + 21349, 12415, 11513, 16095, 17264, + 21349, 12415, 11513, 16637, 20859, 21022, + 21349, 12415, 11513, 18719, 10856, + 21349, 12415, 11513, 22495, 17264, + 21349, 12415, 11513, 23211, 21022, + 21349, 12415, 21557, 507, 19381, 12414, + 21349, 12525, 12414, + 21349, 12525, 12415, 661, 964, + 21349, 12525, 17881, 15453, 12414, + 21349, 13473, 12414, + 21349, 13473, 22233, 12414, + 21349, 15453, 12414, + 21349, 15453, 12415, 17579, 20859, 21022, + 21349, 15710, + 21349, 16019, 12414, + 21349, 16095, 12414, + 21349, 16857, 15738, + 21349, 17042, + 21349, 17435, 12414, + 21349, 17625, 12414, + 21349, 18253, 11513, 5989, 8281, 661, 964, + 21349, 18253, 11513, 5989, 8281, 7065, 964, + 21349, 18253, 11513, 5989, 8281, 15805, 19381, 18253, 11513, 5989, 14658, + 21349, 18253, 11513, 5989, 8281, 15805, 21349, 18253, 11513, 5989, 14658, + 21349, 18253, 11513, 5989, 14659, 661, 964, + 21349, 18253, 11513, 5989, 14659, 7065, 964, + 21349, 18253, 11513, 5989, 21556, + 21349, 18253, 11513, 5989, 22836, + 21349, 19165, 12414, + 21349, 20859, 21022, + 21349, 21775, 12414, + 21349, 22233, 12414, + 21349, 22841, 12414, + 21349, 23005, 12415, 11513, 20859, 22182, + 21349, 23215, 12414, + 21349, 28089, 12414, + 21349, 28089, 12415, 661, 964, + 21349, 28089, 12415, 11513, 6101, 14784, + 21349, 28089, 12415, 11513, 8351, 3445, 21556, + 21349, 28089, 12415, 11513, 8351, 3445, 22836, + 21349, 28089, 12415, 11513, 11371, 13473, 14784, + 21349, 28089, 12415, 11513, 13473, 14784, + 21349, 28089, 12415, 11513, 16095, 22495, 17264, + 21349, 28089, 12415, 11513, 16637, 14784, + 21349, 28089, 12415, 11513, 16701, 14784, + 21349, 28089, 12415, 21557, 507, 19381, 28089, 12414, + 21349, 28089, 16019, 12414, + 21349, 28089, 16857, 15738, + 21349, 28089, 17625, 12414, + 21351, 12604, + 21355, 17920, + 21371, 17298, + 21372, + 21375, 11046, + 21381, 95, 18274, + 21381, 18176, + 21381, 18178, + 21381, 18180, + 21387, 13473, 3241, 17211, 19574, + 21387, 13473, 7037, 17211, 19574, + 21387, 13473, 13421, 12934, + 21387, 13473, 15453, 15938, + 21387, 13473, 15453, 17224, + 21387, 13473, 19032, + 21393, 10574, + 21400, + 21406, + 21423, 2301, 8320, + 21423, 2643, 10574, + 21423, 3781, 10574, + 21423, 3921, 10574, + 21423, 6257, 10574, + 21423, 7073, 10696, + 21423, 8281, 12941, 17810, + 21423, 8281, 15453, 23522, + 21423, 8281, 17225, 17810, + 21423, 8281, 23522, + 21423, 9905, 10574, + 21423, 12916, + 21423, 12922, + 21423, 13069, 2760, + 21423, 13069, 3240, + 21423, 13069, 3536, + 21423, 13069, 7036, + 21423, 13069, 7058, + 21423, 13069, 9358, + 21423, 13069, 11824, + 21423, 13069, 13150, + 21423, 13069, 14778, + 21423, 13069, 15116, + 21423, 13417, 15678, + 21423, 13783, 14911, 16531, 0, + 21423, 13783, 14911, 16531, 2, + 21423, 13783, 14911, 16531, 4, + 21423, 13783, 14911, 16531, 6, + 21423, 13783, 14911, 16531, 8, + 21423, 13783, 14911, 16531, 10, + 21423, 13783, 14911, 16531, 12, + 21423, 13783, 14911, 16531, 14, + 21423, 13783, 14911, 16531, 16, + 21423, 13783, 14911, 16531, 18, + 21423, 13783, 14911, 16531, 20, + 21423, 13783, 14911, 16531, 22, + 21423, 13783, 14911, 16531, 24, + 21423, 13783, 14911, 16531, 26, + 21423, 13783, 14911, 16531, 28, + 21423, 13783, 14911, 16531, 30, + 21423, 13783, 14911, 16531, 32, + 21423, 13783, 14911, 16531, 34, + 21423, 13783, 14911, 16531, 36, + 21423, 13783, 14911, 16531, 38, + 21423, 13783, 14911, 16531, 40, + 21423, 13783, 14911, 16531, 42, + 21423, 13783, 14911, 16531, 44, + 21423, 13783, 14911, 16531, 46, + 21423, 13783, 14911, 16531, 48, + 21423, 13783, 14911, 16531, 50, + 21423, 13783, 17835, 16531, 0, + 21423, 13783, 17835, 16531, 2, + 21423, 13783, 17835, 16531, 4, + 21423, 13783, 17835, 16531, 6, + 21423, 13783, 17835, 16531, 8, + 21423, 13783, 17835, 16531, 10, + 21423, 13783, 17835, 16531, 12, + 21423, 13783, 17835, 16531, 14, + 21423, 13783, 17835, 16531, 16, + 21423, 13783, 17835, 16531, 18, + 21423, 13783, 17835, 16531, 20, + 21423, 13783, 17835, 16531, 22, + 21423, 13783, 17835, 16531, 24, + 21423, 13783, 17835, 16531, 26, + 21423, 13783, 17835, 16531, 28, + 21423, 13783, 17835, 16531, 30, + 21423, 13783, 17835, 16531, 32, + 21423, 13783, 17835, 16531, 34, + 21423, 13783, 17835, 16531, 36, + 21423, 13783, 17835, 16531, 38, + 21423, 13783, 17835, 16531, 40, + 21423, 13783, 17835, 16531, 42, + 21423, 13783, 17835, 16531, 44, + 21423, 13783, 17835, 16531, 46, + 21423, 13783, 17835, 16531, 48, + 21423, 13783, 17835, 16531, 50, + 21423, 14567, 10574, + 21423, 14659, 12941, 17810, + 21423, 14659, 15453, 23522, + 21423, 14659, 17225, 17810, + 21423, 14659, 23522, + 21423, 15140, + 21423, 15847, 964, + 21423, 16067, 10574, + 21423, 16121, 10574, + 21423, 16586, + 21423, 16787, 10574, + 21423, 18841, 10574, + 21423, 18999, 19140, + 21423, 19140, + 21423, 19574, + 21423, 20549, 8808, + 21423, 20933, 8320, + 21423, 21006, + 21423, 21559, 10574, + 21423, 21779, 8808, + 21423, 21844, + 21423, 22172, + 21423, 22223, 15678, + 21423, 22225, 94, + 21423, 23213, 8808, + 21423, 23853, 10574, + 21423, 23868, + 21427, 22790, + 21447, 6996, + 21448, + 21453, 8281, 15975, 17810, + 21453, 12525, 17224, + 21453, 13281, 13807, 20932, + 21453, 14659, 15975, 17810, + 21453, 15453, 15938, + 21453, 16313, 16172, + 21453, 16313, 16531, 0, + 21453, 16313, 16531, 8, + 21453, 16313, 16531, 16, + 21453, 16313, 16531, 28, + 21453, 16313, 16531, 40, + 21453, 16313, 16531, 66, + 21453, 16313, 16531, 206, + 21453, 16313, 16531, 218, + 21453, 16313, 16531, 504, + 21453, 16313, 16531, 738, + 21453, 16313, 16531, 744, + 21453, 16313, 16531, 750, + 21453, 16313, 16531, 778, + 21453, 16313, 16531, 780, + 21453, 16313, 16531, 782, + 21453, 16313, 16531, 786, + 21453, 16313, 16531, 790, + 21453, 16313, 16531, 3738, + 21453, 16313, 16531, 3764, + 21453, 16313, 16531, 3876, + 21453, 16313, 16531, 3922, + 21453, 16313, 16531, 10586, + 21453, 16313, 16531, 12698, + 21453, 16313, 16531, 13484, + 21453, 16313, 16531, 13582, + 21453, 16313, 16531, 13994, + 21453, 16313, 16531, 14164, + 21453, 16313, 16531, 14538, + 21453, 16313, 16531, 14654, + 21453, 16313, 16531, 16462, + 21453, 16313, 16531, 17384, + 21453, 16313, 16531, 17870, + 21453, 16313, 16531, 18362, + 21453, 16313, 16531, 18860, + 21453, 16313, 16531, 19274, + 21453, 16313, 16531, 21900, + 21453, 16313, 16531, 22768, + 21453, 16313, 16531, 22830, + 21453, 16313, 16531, 22930, + 21453, 16313, 16531, 22940, + 21453, 16313, 16531, 23292, + 21453, 16313, 16531, 23358, + 21453, 16313, 16531, 23360, + 21453, 16313, 16531, 23580, + 21453, 16313, 16531, 23582, + 21453, 16313, 16531, 23586, + 21453, 16313, 16531, 23664, + 21453, 16313, 16531, 23666, + 21453, 16313, 16531, 24072, + 21453, 16313, 16531, 25914, + 21453, 16313, 16531, 25916, + 21453, 19381, 12414, + 21453, 20193, 16531, 0, + 21453, 20193, 16531, 8, + 21453, 20193, 16531, 16, + 21453, 20193, 16531, 26, + 21453, 20193, 16531, 28, + 21453, 20193, 16531, 40, + 21453, 20193, 16531, 272, + 21453, 20193, 16531, 276, + 21453, 20193, 16531, 280, + 21453, 20193, 16531, 288, + 21453, 20193, 16531, 292, + 21453, 20193, 16531, 358, + 21453, 20193, 16531, 362, + 21453, 20193, 16531, 366, + 21453, 20193, 16531, 374, + 21453, 20193, 16531, 380, + 21453, 20193, 16531, 426, + 21453, 20193, 16531, 434, + 21453, 20193, 16531, 440, + 21453, 20193, 16531, 446, + 21453, 20193, 16531, 454, + 21453, 20193, 16531, 466, + 21453, 20193, 16531, 470, + 21453, 20193, 16531, 478, + 21453, 20193, 16531, 486, + 21453, 20193, 16531, 490, + 21453, 20193, 16531, 598, + 21453, 20193, 16531, 600, + 21453, 20193, 16531, 604, + 21453, 20193, 16531, 606, + 21453, 20193, 16531, 610, + 21453, 20193, 16531, 614, + 21453, 20193, 16531, 618, + 21453, 20193, 16531, 624, + 21453, 20193, 16531, 628, + 21453, 20193, 16531, 638, + 21453, 20193, 16531, 648, + 21453, 20193, 16531, 652, + 21453, 20193, 16531, 656, + 21453, 20193, 16531, 660, + 21453, 20193, 16531, 668, + 21453, 20193, 16531, 738, + 21453, 20193, 16531, 754, + 21453, 20193, 16531, 778, + 21453, 20193, 16531, 786, + 21453, 20193, 16531, 790, + 21453, 20193, 16531, 14911, 0, + 21453, 20193, 16531, 14911, 8, + 21453, 20193, 16531, 14911, 16, + 21453, 20193, 16531, 14911, 28, + 21453, 20193, 16531, 14911, 40, + 21453, 20193, 16531, 14911, 668, + 21453, 20193, 16531, 14911, 778, + 21453, 20193, 16531, 14911, 786, + 21453, 20193, 16531, 14911, 790, + 21453, 20193, 16661, 1290, + 21453, 20193, 17539, 14929, 8808, + 21453, 20193, 23603, 14929, 8808, + 21453, 21349, 12414, + 21453, 21557, 12414, + 21453, 22837, 12414, + 21453, 23259, 7073, 10696, + 21453, 23259, 12922, + 21453, 36247, 21767, 14929, 8808, + 21454, + 21466, + 21468, + 21472, + 21473, 21441, 17298, + 21477, 21141, 16620, + 21478, + 21479, 11513, 18161, 10388, + 21485, 660, + 21485, 661, 897, 19121, 20454, + 21485, 11513, 1291, 12318, + 21495, 92, + 21496, + 21507, 17298, + 21509, 9904, + 21509, 15146, + 21509, 21850, + 21518, + 21535, 10575, 14334, + 21535, 10575, 17534, + 21535, 10575, 19540, + 21535, 13069, 2760, + 21535, 13069, 3240, + 21535, 13069, 3536, + 21535, 13069, 7036, + 21535, 13069, 7058, + 21535, 13069, 9358, + 21535, 13069, 11824, + 21535, 13069, 13150, + 21535, 13069, 14778, + 21535, 13069, 15116, + 21535, 15407, 10575, 8, + 21535, 15407, 10575, 16, + 21535, 15407, 10575, 28, + 21535, 15407, 10575, 40, + 21535, 15407, 10575, 58, + 21535, 15407, 10575, 72, + 21535, 15407, 10575, 96, + 21535, 15407, 10575, 314, + 21535, 15407, 10575, 706, + 21535, 16531, 0, + 21535, 16531, 8, + 21535, 16531, 16, + 21535, 16531, 28, + 21535, 16531, 40, + 21535, 16531, 58, + 21535, 16531, 72, + 21535, 16531, 96, + 21535, 16531, 108, + 21535, 16531, 126, + 21535, 16531, 150, + 21535, 16531, 248, + 21535, 16531, 272, + 21535, 16531, 314, + 21535, 16531, 344, + 21535, 16531, 358, + 21535, 16531, 394, + 21535, 16531, 426, + 21535, 16531, 466, + 21535, 16531, 548, + 21535, 16531, 598, + 21535, 16531, 614, + 21535, 16531, 648, + 21535, 16531, 706, + 21535, 16531, 714, + 21535, 16531, 778, + 21535, 16531, 972, + 21535, 16531, 1000, + 21535, 16531, 1116, + 21535, 16531, 1214, + 21535, 16531, 1236, + 21535, 16531, 1578, + 21535, 16531, 1588, + 21535, 16531, 1918, + 21535, 16531, 1934, + 21535, 16531, 2036, + 21535, 16531, 2574, + 21535, 16531, 2624, + 21535, 16531, 2698, + 21535, 16531, 2830, + 21535, 16531, 3118, + 21535, 16531, 3212, + 21535, 16531, 3422, + 21535, 16531, 3502, + 21535, 16531, 6564, + 21535, 16531, 6572, + 21535, 16531, 11082, + 21540, + 21553, 917, 24193, 12414, + 21557, 3473, 17119, 15453, 12414, + 21557, 3537, 16321, 12414, + 21557, 7432, + 21557, 11473, 12414, + 21557, 12414, + 21557, 12415, 661, 964, + 21557, 12415, 661, 965, 9787, 22837, 12415, 661, 964, + 21557, 12415, 661, 12525, 17988, + 21557, 12415, 897, 15287, 897, 13839, 2761, 16107, 12532, + 21557, 12415, 7065, 964, + 21557, 12415, 7065, 965, 661, 12525, 17988, + 21557, 12415, 7065, 21349, 12414, + 21557, 12415, 9787, 22837, 12414, + 21557, 12415, 11513, 3445, 19380, + 21557, 12415, 11513, 3445, 21348, + 21557, 12415, 11513, 7658, + 21557, 12415, 11513, 8356, + 21557, 12415, 11513, 9905, 12502, + 21557, 12415, 11513, 10856, + 21557, 12415, 11513, 10857, 11513, 16095, 20933, 17264, + 21557, 12415, 11513, 10857, 11513, 20933, 17264, + 21557, 12415, 11513, 13779, 20859, 21022, + 21557, 12415, 11513, 14911, 20859, 21022, + 21557, 12415, 11513, 14911, 23211, 21022, + 21557, 12415, 11513, 16093, 10692, + 21557, 12415, 11513, 16095, 20933, 17264, + 21557, 12415, 11513, 16637, 20859, 21022, + 21557, 12415, 11513, 17264, + 21557, 12415, 11513, 18719, 10856, + 21557, 12415, 11513, 20933, 17264, + 21557, 12415, 11513, 23211, 21022, + 21557, 12415, 12319, 14837, 22837, 12414, + 21557, 12415, 12319, 15141, 20406, + 21557, 12415, 12319, 15703, 13177, 660, + 21557, 12415, 12319, 18999, 15141, 20406, + 21557, 12415, 12319, 18999, 15703, 13177, 660, + 21557, 12415, 19281, 46, + 21557, 12415, 19281, 17272, + 21557, 12415, 19281, 21558, + 21557, 12525, 12414, + 21557, 12525, 17881, 15453, 12414, + 21557, 13473, 12414, + 21557, 13473, 22233, 12414, + 21557, 15453, 12414, + 21557, 15453, 12415, 17579, 20859, 21022, + 21557, 16019, 12414, + 21557, 16095, 6545, 12414, + 21557, 16095, 12414, + 21557, 16095, 12415, 7065, 964, + 21557, 16095, 12415, 11513, 17264, + 21557, 16095, 12415, 11513, 20933, 17264, + 21557, 16095, 22180, + 21557, 16857, 15738, + 21557, 17042, + 21557, 17435, 6545, 12414, + 21557, 17435, 12414, + 21557, 18253, 9787, 22837, 18252, + 21557, 18253, 11513, 5989, 699, 661, 964, + 21557, 18253, 11513, 5989, 699, 7065, 964, + 21557, 18253, 11513, 5989, 699, 12319, 8351, 6544, + 21557, 18253, 11513, 5989, 699, 12319, 21557, 18253, 11513, 5989, 6700, + 21557, 18253, 11513, 5989, 699, 12319, 22837, 18253, 11513, 5989, 698, + 21557, 18253, 11513, 5989, 6701, 661, 964, + 21557, 18253, 11513, 5989, 6701, 7065, 964, + 21557, 18253, 11513, 5989, 6701, 12319, 22837, 18253, 11513, 5989, 6700, + 21557, 18253, 11513, 5989, 6701, 12503, 8351, 6544, + 21557, 18253, 11513, 5989, 19380, + 21557, 18253, 11513, 5989, 21348, + 21557, 18945, 7432, + 21557, 19165, 12414, + 21557, 20701, 12414, + 21557, 20859, 21022, + 21557, 21775, 12414, + 21557, 22180, + 21557, 22233, 12414, + 21557, 22841, 12414, + 21557, 23005, 12415, 7065, 964, + 21557, 23005, 12415, 11513, 10856, + 21557, 23005, 12415, 11513, 10857, 11513, 16095, 20933, 17264, + 21557, 23005, 12415, 11513, 10857, 11513, 20933, 17264, + 21557, 23005, 12415, 11513, 16095, 20933, 17264, + 21557, 23005, 12415, 11513, 20859, 22182, + 21557, 23005, 12415, 11513, 20933, 17264, + 21557, 23005, 17435, 6545, 12414, + 21557, 23061, 20641, 15453, 12414, + 21557, 23215, 12414, + 21557, 23305, 15453, 12414, + 21557, 23503, 12414, + 21557, 23845, 20641, 15453, 12414, + 21557, 24081, 15453, 12414, + 21557, 24201, 15453, 12414, + 21557, 28089, 12414, + 21557, 28089, 12415, 661, 964, + 21557, 28089, 12415, 9787, 22837, 28089, 12414, + 21557, 28089, 12415, 11513, 6101, 14784, + 21557, 28089, 12415, 11513, 8351, 3445, 19380, + 21557, 28089, 12415, 11513, 8351, 3445, 21348, + 21557, 28089, 12415, 11513, 11371, 13473, 14784, + 21557, 28089, 12415, 11513, 13473, 14784, + 21557, 28089, 12415, 11513, 16095, 20933, 17264, + 21557, 28089, 12415, 11513, 16095, 22495, 17264, + 21557, 28089, 12415, 11513, 16637, 14784, + 21557, 28089, 12415, 11513, 16701, 14784, + 21557, 28089, 16019, 12414, + 21557, 28089, 16857, 15738, + 21559, 529, 13177, 660, + 21559, 529, 19121, 13177, 660, + 21559, 529, 19121, 13177, 661, 11513, 1291, 12318, + 21559, 529, 19121, 13177, 661, 11513, 1291, 12319, 14658, + 21559, 529, 19121, 13177, 661, 11513, 1291, 16382, + 21559, 529, 22435, 660, + 21559, 529, 23050, + 21559, 529, 23852, + 21559, 897, 2643, 23050, + 21559, 897, 23651, 2643, 13177, 660, + 21559, 1057, 2643, 13177, 660, + 21559, 1057, 2643, 22435, 660, + 21559, 9787, 13177, 660, + 21559, 10574, + 21559, 11513, 1290, + 21559, 11513, 15939, 16382, + 21559, 11513, 20549, 8809, 12318, + 21559, 12319, 19107, 529, 13176, + 21559, 12319, 19107, 12319, 23852, + 21559, 12319, 19121, 13177, 12319, 23853, 12319, 19121, 13176, + 21559, 12319, 21557, 12414, + 21559, 12319, 23193, 13177, 12319, 23852, + 21559, 12319, 23853, 12319, 23193, 13176, + 21559, 13177, 661, 529, 23852, + 21559, 15949, 125, 12944, + 21559, 15949, 125, 12945, 12319, 19121, 13176, + 21564, + 21565, 8978, + 21565, 8979, 15850, + 21575, 97, 16525, 8808, + 21575, 6549, 8808, + 21575, 10575, 9826, + 21575, 10575, 17534, + 21575, 10575, 19408, + 21575, 10575, 19540, + 21575, 10575, 19586, + 21575, 10575, 19697, 17534, + 21575, 10575, 20933, 965, 17534, + 21575, 10575, 21127, 19541, 12318, + 21575, 10575, 23070, + 21575, 13069, 2760, + 21575, 13069, 3240, + 21575, 13069, 3536, + 21575, 13069, 7036, + 21575, 13069, 7058, + 21575, 13069, 9358, + 21575, 13069, 11824, + 21575, 13069, 13150, + 21575, 13069, 14778, + 21575, 13069, 15116, + 21575, 15407, 10575, 8, + 21575, 15407, 10575, 16, + 21575, 15407, 10575, 28, + 21575, 15407, 10575, 40, + 21575, 15407, 10575, 58, + 21575, 15407, 10575, 72, + 21575, 15407, 10575, 96, + 21575, 15407, 10575, 186, + 21575, 15407, 10575, 314, + 21575, 15407, 10575, 522, + 21575, 15407, 10575, 706, + 21575, 15407, 10575, 19415, 22, + 21575, 15407, 10575, 19415, 34, + 21575, 15407, 10575, 19415, 406, + 21575, 15407, 10575, 19415, 608, + 21575, 16531, 0, + 21575, 16531, 8, + 21575, 16531, 16, + 21575, 16531, 28, + 21575, 16531, 40, + 21575, 16531, 58, + 21575, 16531, 72, + 21575, 16531, 96, + 21575, 16531, 108, + 21575, 16531, 126, + 21575, 16531, 150, + 21575, 16531, 186, + 21575, 16531, 248, + 21575, 16531, 272, + 21575, 16531, 314, + 21575, 16531, 344, + 21575, 16531, 358, + 21575, 16531, 394, + 21575, 16531, 426, + 21575, 16531, 466, + 21575, 16531, 522, + 21575, 16531, 548, + 21575, 16531, 598, + 21575, 16531, 614, + 21575, 16531, 648, + 21575, 16531, 706, + 21575, 16531, 714, + 21575, 16531, 778, + 21575, 16531, 1000, + 21575, 16531, 1116, + 21575, 16531, 1214, + 21575, 16531, 1236, + 21575, 16531, 1291, 10118, + 21575, 16531, 1588, + 21575, 16531, 1918, + 21575, 16531, 2036, + 21575, 16531, 2278, + 21575, 16531, 2574, + 21575, 16531, 2624, + 21575, 16531, 2698, + 21575, 16531, 2830, + 21575, 16531, 3118, + 21575, 16531, 3212, + 21575, 16531, 3286, + 21575, 16531, 3422, + 21575, 16531, 3502, + 21575, 16531, 6572, + 21575, 16531, 8342, + 21575, 16531, 9422, + 21575, 16531, 11082, + 21575, 16531, 11102, + 21575, 16531, 15387, 19540, + 21575, 16531, 15925, 20, + 21575, 16531, 15925, 22, + 21575, 16531, 15925, 24, + 21575, 16531, 15925, 26, + 21575, 16531, 15925, 48, + 21575, 16531, 15925, 406, + 21575, 16531, 15925, 484, + 21575, 16531, 15925, 608, + 21575, 16531, 15925, 2282, + 21575, 16531, 17709, 314, + 21575, 16531, 19415, 22, + 21575, 16531, 19415, 34, + 21575, 16531, 19415, 406, + 21575, 16531, 19415, 608, + 21575, 16787, 2761, 18280, + 21575, 16787, 2761, 20828, + 21575, 16787, 3412, + 21575, 20055, 2761, 7428, + 21575, 20055, 2761, 13252, + 21575, 20055, 2761, 15082, + 21575, 20055, 2761, 16106, + 21575, 20055, 2761, 18950, + 21575, 20055, 2761, 20048, + 21575, 20055, 2761, 21880, + 21575, 20055, 2761, 22082, + 21575, 20055, 2761, 36358, + 21575, 20055, 15117, 20546, + 21575, 20055, 15117, 22406, + 21575, 20055, 15117, 22924, + 21575, 20055, 15117, 22994, + 21579, 18767, 21498, + 21586, + 21599, 7059, 6696, + 21599, 7061, 22097, 20631, 2760, + 21599, 7061, 22097, 20631, 3536, + 21599, 7061, 22097, 20631, 7058, + 21599, 7061, 22097, 20631, 15116, + 21599, 7073, 10696, + 21599, 10563, 20777, 19633, 16614, + 21599, 11031, 10629, 16358, + 21599, 12518, + 21599, 12519, 11513, 16095, 20412, + 21599, 12519, 11513, 20412, + 21599, 12916, + 21599, 12922, + 21599, 13069, 2760, + 21599, 13069, 3240, + 21599, 13069, 3536, + 21599, 13069, 7036, + 21599, 13069, 7058, + 21599, 13069, 9358, + 21599, 13069, 11824, + 21599, 13069, 13150, + 21599, 13069, 14778, + 21599, 13069, 15116, + 21599, 15019, 12518, + 21599, 15019, 12519, 11513, 16095, 20412, + 21599, 15019, 12519, 11513, 20412, + 21599, 15407, 21850, + 21599, 16095, 12519, 11513, 20412, + 21599, 16531, 0, + 21599, 16531, 8, + 21599, 16531, 16, + 21599, 16531, 28, + 21599, 16531, 40, + 21599, 16531, 108, + 21599, 16531, 150, + 21599, 16531, 186, + 21599, 16531, 228, + 21599, 16531, 248, + 21599, 16531, 344, + 21599, 16531, 358, + 21599, 16531, 394, + 21599, 16531, 426, + 21599, 16531, 466, + 21599, 16531, 504, + 21599, 16531, 548, + 21599, 16531, 582, + 21599, 16531, 598, + 21599, 16531, 614, + 21599, 16531, 648, + 21599, 16531, 682, + 21599, 16531, 738, + 21599, 16531, 778, + 21599, 16531, 796, + 21599, 16531, 887, 7203, 0, + 21599, 16531, 887, 7203, 16, + 21599, 16531, 887, 7203, 70, + 21599, 16531, 887, 7203, 126, + 21599, 16531, 887, 7203, 150, + 21599, 16531, 887, 7203, 358, + 21599, 16531, 887, 7203, 548, + 21599, 16531, 887, 7203, 648, + 21599, 16531, 887, 7203, 796, + 21599, 16531, 887, 7203, 1214, + 21599, 16531, 887, 7203, 2574, + 21599, 16531, 887, 7203, 2624, + 21599, 16531, 887, 7203, 2830, + 21599, 16531, 887, 7203, 3286, + 21599, 16531, 887, 7203, 3502, + 21599, 16531, 887, 7203, 4042, + 21599, 16531, 887, 7203, 7429, 40, + 21599, 16531, 887, 7203, 7429, 778, + 21599, 16531, 887, 7203, 11082, + 21599, 16531, 887, 7203, 15117, 15774, + 21599, 16531, 887, 7203, 15774, + 21599, 16531, 887, 7203, 16012, + 21599, 16531, 887, 7203, 17956, + 21599, 16531, 887, 7203, 19364, + 21599, 16531, 887, 7203, 19409, 2760, + 21599, 16531, 887, 7203, 19541, 2760, + 21599, 16531, 887, 7203, 20163, 19364, + 21599, 16531, 898, + 21599, 16531, 1116, + 21599, 16531, 1117, 11513, 3537, 6696, + 21599, 16531, 1120, + 21599, 16531, 1678, + 21599, 16531, 2036, + 21599, 16531, 2248, + 21599, 16531, 3212, + 21599, 16531, 3488, + 21599, 16531, 4046, + 21599, 16531, 4082, + 21599, 16531, 10563, 8, + 21599, 16531, 10563, 16, + 21599, 16531, 10563, 40, + 21599, 16531, 10563, 150, + 21599, 16531, 10563, 228, + 21599, 16531, 10563, 248, + 21599, 16531, 10563, 272, + 21599, 16531, 10563, 340, + 21599, 16531, 10563, 344, + 21599, 16531, 10563, 358, + 21599, 16531, 10563, 548, + 21599, 16531, 10563, 648, + 21599, 16531, 10563, 682, + 21599, 16531, 10563, 796, + 21599, 16531, 10563, 898, + 21599, 16531, 10563, 1116, + 21599, 16531, 10563, 1526, + 21599, 16531, 10563, 1678, + 21599, 16531, 10563, 3028, + 21599, 16531, 10563, 3212, + 21599, 16531, 10563, 3488, + 21599, 16531, 10563, 4042, + 21599, 16531, 11031, 8, + 21599, 16531, 11031, 16, + 21599, 16531, 11031, 28, + 21599, 16531, 11031, 40, + 21599, 16531, 11031, 108, + 21599, 16531, 11031, 150, + 21599, 16531, 11031, 248, + 21599, 16531, 11031, 344, + 21599, 16531, 11031, 358, + 21599, 16531, 11031, 426, + 21599, 16531, 11031, 504, + 21599, 16531, 11031, 548, + 21599, 16531, 11031, 582, + 21599, 16531, 11031, 648, + 21599, 16531, 11031, 682, + 21599, 16531, 11031, 738, + 21599, 16531, 11031, 778, + 21599, 16531, 11031, 887, 7203, 648, + 21599, 16531, 11031, 887, 7203, 4042, + 21599, 16531, 11031, 898, + 21599, 16531, 11031, 1116, + 21599, 16531, 11031, 1330, + 21599, 16531, 11031, 1526, + 21599, 16531, 11031, 1678, + 21599, 16531, 11031, 1922, + 21599, 16531, 11031, 2590, + 21599, 16531, 11031, 3488, + 21599, 16531, 11031, 8351, 15407, 10574, + 21599, 16531, 16601, 16, + 21599, 16531, 16601, 228, + 21599, 16531, 16601, 358, + 21599, 16531, 16601, 598, + 21599, 16531, 16601, 887, 7203, 126, + 21599, 16531, 16601, 887, 7203, 648, + 21599, 16531, 16601, 887, 7203, 796, + 21599, 16531, 16601, 887, 7203, 1000, + 21599, 16531, 16601, 887, 7203, 1180, + 21599, 16531, 16601, 887, 7203, 1236, + 21599, 16531, 16601, 887, 7203, 1588, + 21599, 16531, 16601, 887, 7203, 1918, + 21599, 16531, 16601, 887, 7203, 2248, + 21599, 16531, 16601, 887, 7203, 2574, + 21599, 16531, 16601, 887, 7203, 3286, + 21599, 16531, 16601, 887, 7203, 3502, + 21599, 16531, 16601, 887, 7203, 4042, + 21599, 16531, 16601, 887, 7203, 6572, + 21599, 16531, 16601, 4042, + 21599, 16601, 7073, 10696, + 21599, 16601, 12922, + 21599, 16746, + 21599, 17435, 12519, 11513, 20412, + 21599, 17465, 15019, 12519, 11513, 16095, 20412, + 21599, 19015, 12518, + 21599, 19015, 12519, 11513, 16095, 20412, + 21599, 19015, 12519, 11513, 20412, + 21599, 19976, + 21599, 20163, 12518, + 21599, 20163, 12519, 11513, 16095, 20412, + 21607, 23024, + 21625, 16531, 276, + 21625, 16531, 554, + 21625, 16531, 2406, + 21625, 16531, 2676, + 21625, 16531, 3398, + 21625, 16531, 3750, + 21625, 16531, 5556, + 21625, 16531, 6066, + 21625, 16531, 7478, + 21625, 16531, 8002, + 21625, 16531, 9992, + 21625, 16531, 10120, + 21625, 16531, 10478, + 21625, 16531, 10914, + 21625, 16531, 11722, + 21625, 16531, 12354, + 21625, 16531, 13259, 276, + 21625, 16531, 13259, 2406, + 21625, 16531, 13259, 2676, + 21625, 16531, 13259, 6066, + 21625, 16531, 13259, 8002, + 21625, 16531, 13259, 10478, + 21625, 16531, 13259, 11722, + 21625, 16531, 13259, 12354, + 21625, 16531, 13259, 16508, + 21625, 16531, 13384, + 21625, 16531, 14720, + 21625, 16531, 15606, + 21625, 16531, 16010, + 21625, 16531, 16508, + 21625, 16531, 17060, + 21625, 16787, 2760, + 21625, 16787, 2761, 18280, + 21625, 16787, 3412, + 21625, 16787, 3536, + 21625, 16787, 7036, + 21625, 16787, 7058, + 21625, 16787, 15116, + 21625, 16787, 17474, + 21625, 21163, 16787, 7058, + 21629, 6996, + 21634, + 21655, 10574, + 21697, 20774, + 21700, + 21702, + 21713, 16531, 276, + 21713, 16531, 554, + 21713, 16531, 2406, + 21713, 16531, 2676, + 21713, 16531, 3398, + 21713, 16531, 3750, + 21713, 16531, 5556, + 21713, 16531, 6066, + 21713, 16531, 7478, + 21713, 16531, 8002, + 21713, 16531, 9992, + 21713, 16531, 10120, + 21713, 16531, 10478, + 21713, 16531, 10914, + 21713, 16531, 11722, + 21713, 16531, 12354, + 21713, 16531, 13259, 2676, + 21713, 16531, 13384, + 21713, 16531, 14720, + 21713, 16531, 15606, + 21713, 16531, 16010, + 21713, 16531, 16508, + 21713, 16531, 17060, + 21713, 16787, 2760, + 21713, 16787, 3412, + 21713, 16787, 3536, + 21713, 16787, 7036, + 21713, 16787, 7058, + 21713, 16787, 15116, + 21713, 16787, 17474, + 21713, 25813, 18156, + 21713, 26163, 18156, + 21724, + 21726, + 21729, 21850, + 21731, 10480, + 21732, + 21741, 14483, 10574, + 21744, + 21746, + 21747, 11513, 3407, 3472, + 21775, 14570, + 21775, 20157, 20406, + 21779, 8808, + 21793, 17299, 1493, 17481, 20492, + 21793, 17299, 1493, 17483, 20492, + 21793, 17299, 1493, 17485, 20492, + 21793, 17299, 1493, 17487, 20492, + 21793, 17299, 1493, 17489, 20492, + 21793, 17299, 1493, 17491, 20492, + 21793, 17299, 1493, 17493, 20492, + 21793, 17299, 1493, 18195, 21580, + 21795, 8808, + 21815, 16322, + 21817, 20161, 18932, + 21819, 21634, + 21827, 8809, 322, + 21827, 8809, 16004, + 21827, 8809, 18298, + 21827, 8809, 18676, + 21827, 8809, 21652, + 21827, 8809, 22427, 3990, + 21827, 15407, 10575, 0, + 21827, 15407, 10575, 8, + 21827, 15407, 10575, 16, + 21827, 15407, 10575, 28, + 21827, 15407, 10575, 40, + 21827, 15407, 10575, 58, + 21827, 15407, 10575, 8351, 0, + 21827, 15407, 10575, 8351, 8, + 21827, 15407, 10575, 8351, 16, + 21827, 15407, 10575, 8351, 40, + 21827, 15407, 10575, 8351, 58, + 21827, 15407, 10575, 14837, 0, + 21827, 15407, 10575, 15000, + 21827, 15407, 10575, 20425, 0, + 21827, 15407, 10575, 20425, 58, + 21827, 16531, 234, + 21827, 16531, 322, + 21827, 16531, 334, + 21827, 16531, 340, + 21827, 16531, 950, + 21827, 16531, 1018, + 21827, 16531, 2438, + 21827, 16531, 2676, + 21827, 16531, 2980, + 21827, 16531, 3448, + 21827, 16531, 3990, + 21827, 16531, 4036, + 21827, 16531, 5478, + 21827, 16531, 7966, + 21827, 16531, 10154, + 21827, 16531, 10448, + 21827, 16531, 10840, + 21827, 16531, 13008, + 21827, 16531, 13328, + 21827, 16531, 13756, + 21827, 16531, 19108, + 21827, 16531, 19346, + 21827, 20319, 16531, 16, + 21827, 20319, 16531, 14837, 0, + 21827, 20319, 16531, 22427, 3990, + 21827, 23555, 968, + 21827, 23555, 3253, 20286, + 21827, 23555, 11126, + 21827, 23555, 11810, + 21827, 23555, 12370, + 21827, 23555, 14594, + 21827, 23555, 15626, + 21827, 23555, 15686, + 21827, 23555, 15716, + 21827, 23555, 15754, + 21827, 23555, 17710, + 21827, 23555, 18609, 14594, + 21827, 23555, 18676, + 21827, 23555, 22890, + 21827, 23737, 8808, + 21828, + 21829, 17690, + 21832, + 21843, 13069, 2760, + 21843, 13069, 3240, + 21843, 13069, 3536, + 21843, 13069, 7036, + 21843, 13069, 7058, + 21843, 13069, 9358, + 21843, 13069, 11824, + 21843, 13069, 13150, + 21843, 13069, 14778, + 21843, 13069, 15116, + 21844, + 21849, 12533, 21858, + 21849, 12533, 21860, + 21849, 12533, 21862, + 21849, 12533, 21864, + 21849, 12533, 21866, + 21849, 12533, 21868, + 21849, 12533, 22796, + 21849, 12533, 22798, + 21849, 12533, 22800, + 21849, 12533, 22802, + 21849, 12533, 22858, + 21849, 12533, 22860, + 21849, 12533, 22862, + 21849, 12533, 22864, + 21849, 12533, 22866, + 21849, 12533, 22868, + 21849, 12533, 22870, + 21849, 12533, 22872, + 21849, 12533, 22874, + 21849, 12533, 22876, + 21849, 12533, 22878, + 21849, 12533, 22880, + 21849, 12533, 22882, + 21849, 12533, 22884, + 21849, 12533, 22886, + 21849, 12533, 23556, + 21849, 12533, 23558, + 21849, 12533, 23560, + 21849, 12533, 23562, + 21849, 12533, 23564, + 21849, 12533, 23566, + 21849, 12533, 23606, + 21849, 12533, 23608, + 21849, 12533, 23610, + 21849, 12533, 23612, + 21849, 12533, 23614, + 21849, 12533, 23616, + 21849, 12533, 23618, + 21849, 12533, 23620, + 21849, 12533, 23622, + 21849, 12533, 23624, + 21849, 12533, 23626, + 21849, 12533, 23628, + 21849, 12533, 23630, + 21849, 12533, 23632, + 21849, 12533, 23634, + 21849, 12533, 23636, + 21849, 12533, 23638, + 21849, 12533, 23640, + 21849, 12533, 23642, + 21849, 12533, 23644, + 21849, 12533, 24058, + 21849, 12533, 24060, + 21849, 12533, 24062, + 21849, 12533, 24064, + 21849, 12533, 24092, + 21849, 12533, 24094, + 21849, 12533, 24096, + 21849, 12533, 24098, + 21849, 12533, 24100, + 21849, 12533, 24102, + 21849, 12533, 24104, + 21849, 12533, 24106, + 21849, 12533, 24108, + 21849, 12533, 24110, + 21849, 12533, 24112, + 21849, 12533, 24114, + 21849, 12533, 24116, + 21849, 12533, 24118, + 21849, 12533, 24120, + 21849, 12533, 25906, + 21849, 12533, 25922, + 21849, 12533, 25924, + 21849, 12533, 25926, + 21849, 12533, 25928, + 21849, 12533, 25930, + 21849, 12533, 25932, + 21849, 12533, 26168, + 21849, 17298, + 21874, + 21879, 16215, 699, 10694, + 21879, 16215, 6701, 10694, + 21879, 16215, 16531, 18780, + 21879, 16215, 22243, 18780, + 21886, + 21888, + 21891, 13470, + 21892, + 21895, 12378, + 21895, 12379, 18763, 698, + 21895, 12379, 18763, 8280, + 21897, 15015, 17298, + 21906, + 21927, 2760, + 21927, 3240, + 21927, 3536, + 21927, 7036, + 21927, 7058, + 21927, 8281, 23522, + 21927, 9358, + 21927, 9905, 10574, + 21927, 11824, + 21927, 13150, + 21927, 14004, + 21927, 14659, 23522, + 21927, 14778, + 21927, 15116, + 21927, 16121, 10574, + 21929, 3472, + 21929, 11513, 20156, + 21929, 15826, + 21931, 10575, 17534, + 21931, 10575, 18798, + 21931, 10575, 20450, + 21931, 10575, 21718, + 21931, 10575, 21720, + 21931, 13069, 2760, + 21931, 13069, 3240, + 21931, 13069, 3536, + 21931, 13069, 7036, + 21931, 13069, 7058, + 21931, 13069, 9358, + 21931, 13069, 11824, + 21931, 13069, 13150, + 21931, 13069, 14778, + 21931, 13069, 15116, + 21931, 15407, 10575, 18800, + 21931, 15407, 10575, 18812, + 21931, 15407, 10575, 20440, + 21931, 15407, 10575, 20446, + 21931, 15407, 10575, 22740, + 21931, 15407, 10575, 22742, + 21931, 16531, 0, + 21931, 16531, 8, + 21931, 16531, 16, + 21931, 16531, 28, + 21931, 16531, 40, + 21931, 16531, 66, + 21931, 16531, 108, + 21931, 16531, 126, + 21931, 16531, 150, + 21931, 16531, 218, + 21931, 16531, 228, + 21931, 16531, 248, + 21931, 16531, 272, + 21931, 16531, 344, + 21931, 16531, 358, + 21931, 16531, 394, + 21931, 16531, 426, + 21931, 16531, 466, + 21931, 16531, 548, + 21931, 16531, 582, + 21931, 16531, 598, + 21931, 16531, 614, + 21931, 16531, 648, + 21931, 16531, 714, + 21931, 16531, 738, + 21931, 16531, 762, + 21931, 16531, 778, + 21931, 16531, 796, + 21931, 16531, 1000, + 21931, 16531, 2036, + 21931, 16531, 2244, + 21931, 16531, 2574, + 21931, 16531, 2698, + 21931, 16531, 3070, + 21931, 16531, 3336, + 21931, 16531, 13259, 20, + 21931, 16531, 13259, 24, + 21931, 16531, 17709, 16, + 21931, 19586, + 21931, 21143, 10575, 18810, + 21931, 21143, 10575, 20448, + 21931, 21143, 10575, 20461, 426, + 21931, 21143, 10575, 20461, 738, + 21931, 21143, 10575, 21714, + 21931, 23555, 12517, 109, 19038, + 21931, 23555, 12517, 151, 19038, + 21931, 23555, 12517, 359, 19038, + 21931, 23555, 12517, 2245, 19038, + 21931, 23555, 12517, 12600, + 21931, 23555, 12517, 15004, + 21931, 23555, 12517, 18942, + 21931, 23555, 12517, 20442, + 21932, + 21934, + 22016, + 22026, + 22031, 521, 3473, 507, 14014, + 22031, 10574, + 22031, 20245, 10574, + 22031, 20556, + 22031, 20557, 11513, 9818, + 22031, 20558, + 22032, + 22037, 1493, 521, 3425, 15388, + 22037, 1493, 1956, + 22037, 1493, 2219, 529, 14012, + 22037, 1493, 6101, 22822, + 22037, 1493, 6830, + 22037, 1493, 7073, 15938, + 22037, 1493, 13100, + 22037, 1493, 13401, 661, 8852, + 22037, 1493, 13598, + 22037, 1493, 14006, + 22037, 1493, 14636, + 22037, 1493, 14986, + 22037, 1493, 15284, + 22037, 1493, 15434, + 22037, 1493, 15748, + 22037, 1493, 15900, + 22037, 1493, 15912, + 22037, 1493, 15949, 14030, + 22037, 1493, 16100, + 22037, 1493, 16194, + 22037, 1493, 16520, + 22037, 1493, 16984, + 22037, 1493, 17038, + 22037, 1493, 17646, + 22037, 1493, 17744, + 22037, 1493, 17890, + 22037, 1493, 17906, + 22037, 1493, 17998, + 22037, 1493, 18132, + 22037, 1493, 18273, 5966, + 22037, 1493, 18347, 14910, + 22037, 1493, 18366, + 22037, 1493, 18590, + 22037, 1493, 18600, + 22037, 1493, 18786, + 22037, 1493, 18820, + 22037, 1493, 18992, + 22037, 1493, 19112, + 22037, 1493, 19424, + 22037, 1493, 19992, + 22037, 1493, 20064, + 22037, 1493, 20102, + 22037, 1493, 20146, + 22037, 1493, 20582, + 22037, 1493, 20724, + 22037, 1493, 20736, + 22037, 1493, 20929, 529, 19428, + 22037, 1493, 21073, 2784, + 22037, 1493, 21120, + 22037, 1493, 21144, + 22037, 1493, 21170, + 22037, 1493, 21184, + 22037, 1493, 21366, + 22037, 1493, 21410, + 22037, 1493, 21414, + 22037, 1493, 21424, + 22037, 1493, 21425, 322, + 22037, 1493, 21442, + 22037, 1493, 21546, + 22037, 1493, 21808, + 22037, 1493, 21856, + 22037, 1493, 22228, + 22037, 1493, 22230, + 22037, 1493, 22240, + 22037, 1493, 22286, + 22037, 1493, 22418, + 22037, 1493, 22438, + 22037, 1493, 22726, + 22037, 1493, 22820, + 22037, 1493, 23038, + 22037, 1493, 23094, + 22037, 1493, 23204, + 22037, 1493, 23236, + 22037, 1493, 23528, + 22037, 1493, 23738, + 22037, 1493, 23796, + 22037, 1493, 23800, + 22037, 1493, 23802, + 22037, 1493, 24186, + 22037, 1493, 25755, 529, 22284, + 22037, 1493, 25770, + 22042, + 22050, + 22091, 21793, 17298, + 22093, 23525, 17298, + 22095, 14921, 7461, 11513, 9783, 14030, + 22095, 14921, 7461, 11513, 15949, 14030, + 22103, 8972, + 22130, + 22139, 17225, 8809, 8351, 15224, + 22139, 17225, 8809, 10444, + 22139, 17225, 8809, 15224, + 22139, 17225, 8809, 16095, 10444, + 22139, 17225, 10575, 15877, 11513, 20412, + 22139, 17225, 10575, 17534, + 22139, 17225, 10575, 19408, + 22139, 17225, 10575, 19540, + 22139, 17225, 10575, 23070, + 22139, 17225, 10575, 23071, 11513, 20412, + 22139, 17225, 13259, 21143, 8808, + 22139, 17225, 15407, 10575, 8, + 22139, 17225, 15407, 10575, 16, + 22139, 17225, 15407, 10575, 28, + 22139, 17225, 15407, 10575, 40, + 22139, 17225, 15407, 10575, 72, + 22139, 17225, 15407, 10575, 96, + 22139, 17225, 15407, 10575, 504, + 22139, 17225, 15407, 10575, 682, + 22139, 17225, 15407, 10575, 20587, 16, + 22139, 17225, 15407, 16525, 8808, + 22139, 17225, 16531, 0, + 22139, 17225, 16531, 52, + 22139, 17225, 16531, 108, + 22139, 17225, 16531, 126, + 22139, 17225, 16531, 150, + 22139, 17225, 16531, 248, + 22139, 17225, 16531, 272, + 22139, 17225, 16531, 344, + 22139, 17225, 16531, 358, + 22139, 17225, 16531, 394, + 22139, 17225, 16531, 426, + 22139, 17225, 16531, 466, + 22139, 17225, 16531, 548, + 22139, 17225, 16531, 598, + 22139, 17225, 16531, 614, + 22139, 17225, 16531, 648, + 22139, 17225, 16531, 714, + 22139, 17225, 16531, 778, + 22139, 17225, 16531, 796, + 22139, 17225, 16531, 1000, + 22139, 17225, 16531, 1116, + 22139, 17225, 16531, 1214, + 22139, 17225, 16531, 1236, + 22139, 17225, 16531, 1330, + 22139, 17225, 16531, 1588, + 22139, 17225, 16531, 2036, + 22139, 17225, 16531, 2574, + 22139, 17225, 16531, 2624, + 22139, 17225, 16531, 2698, + 22139, 17225, 16531, 2830, + 22139, 17225, 16531, 3212, + 22139, 17225, 16531, 3286, + 22139, 17225, 16531, 3422, + 22139, 17225, 16531, 3488, + 22139, 17225, 16531, 3502, + 22139, 17225, 16531, 4042, + 22139, 17225, 16531, 6572, + 22139, 17225, 16531, 6740, + 22139, 17225, 16531, 8154, + 22139, 17225, 16531, 11058, + 22139, 17225, 16531, 11082, + 22139, 17225, 17889, 7461, 8808, + 22139, 17225, 17889, 23831, 7461, 8808, + 22139, 17225, 18303, 7461, 8808, + 22139, 17225, 18303, 23831, 7461, 8808, + 22139, 17225, 21920, + 22139, 17225, 24209, 16531, 394, + 22139, 17225, 24209, 16531, 598, + 22139, 17225, 24209, 16531, 714, + 22139, 17225, 24209, 16531, 778, + 22139, 17225, 28043, 16531, 598, + 22153, 17299, 1493, 882, + 22153, 17299, 1493, 1648, + 22153, 17299, 1493, 2752, + 22153, 17299, 1493, 2869, 12420, + 22153, 17299, 1493, 3443, 2776, + 22153, 17299, 1493, 3752, + 22153, 17299, 1493, 5496, + 22153, 17299, 1493, 5519, 14638, + 22153, 17299, 1493, 5519, 15402, + 22153, 17299, 1493, 5519, 18986, + 22153, 17299, 1493, 5519, 19410, + 22153, 17299, 1493, 5997, 507, 8810, + 22153, 17299, 1493, 5997, 507, 19390, + 22153, 17299, 1493, 6214, + 22153, 17299, 1493, 7026, + 22153, 17299, 1493, 7332, + 22153, 17299, 1493, 7429, 6702, + 22153, 17299, 1493, 7429, 14454, + 22153, 17299, 1493, 7676, + 22153, 17299, 1493, 7821, 2776, + 22153, 17299, 1493, 7821, 14438, + 22153, 17299, 1493, 8275, 2776, + 22153, 17299, 1493, 10175, 10386, + 22153, 17299, 1493, 10175, 17058, + 22153, 17299, 1493, 10386, + 22153, 17299, 1493, 10387, 507, 15971, 23046, + 22153, 17299, 1493, 10387, 507, 19536, + 22153, 17299, 1493, 10626, + 22153, 17299, 1493, 12420, + 22153, 17299, 1493, 12525, 17276, + 22153, 17299, 1493, 12544, + 22153, 17299, 1493, 12556, + 22153, 17299, 1493, 12611, 18644, + 22153, 17299, 1493, 13140, + 22153, 17299, 1493, 13537, 6720, + 22153, 17299, 1493, 14018, + 22153, 17299, 1493, 14166, + 22153, 17299, 1493, 14174, + 22153, 17299, 1493, 14599, 8318, + 22153, 17299, 1493, 15254, + 22153, 17299, 1493, 15288, + 22153, 17299, 1493, 15436, + 22153, 17299, 1493, 15698, + 22153, 17299, 1493, 15971, 2776, + 22153, 17299, 1493, 15971, 23046, + 22153, 17299, 1493, 15987, 507, 7820, + 22153, 17299, 1493, 15987, 507, 15970, + 22153, 17299, 1493, 15987, 507, 19728, + 22153, 17299, 1493, 16962, + 22153, 17299, 1493, 16982, + 22153, 17299, 1493, 17020, + 22153, 17299, 1493, 17166, + 22153, 17299, 1493, 17208, + 22153, 17299, 1493, 17276, + 22153, 17299, 1493, 17328, + 22153, 17299, 1493, 17668, + 22153, 17299, 1493, 17676, + 22153, 17299, 1493, 17714, + 22153, 17299, 1493, 17775, 2776, + 22153, 17299, 1493, 17800, + 22153, 17299, 1493, 17802, + 22153, 17299, 1493, 18006, + 22153, 17299, 1493, 18615, 21922, + 22153, 17299, 1493, 18615, 23670, + 22153, 17299, 1493, 18615, 23672, + 22153, 17299, 1493, 18982, + 22153, 17299, 1493, 18988, + 22153, 17299, 1493, 18989, 507, 7820, + 22153, 17299, 1493, 18989, 507, 19536, + 22153, 17299, 1493, 18989, 507, 22164, + 22153, 17299, 1493, 19047, 507, 7910, + 22153, 17299, 1493, 19177, 19312, + 22153, 17299, 1493, 19201, 15003, 19200, + 22153, 17299, 1493, 19201, 15003, 21908, + 22153, 17299, 1493, 19312, + 22153, 17299, 1493, 19406, + 22153, 17299, 1493, 19407, 507, 19536, + 22153, 17299, 1493, 19412, + 22153, 17299, 1493, 19524, + 22153, 17299, 1493, 19537, 2776, + 22153, 17299, 1493, 19654, + 22153, 17299, 1493, 19692, + 22153, 17299, 1493, 19744, + 22153, 17299, 1493, 19812, + 22153, 17299, 1493, 20513, 12556, + 22153, 17299, 1493, 20804, + 22153, 17299, 1493, 20838, + 22153, 17299, 1493, 21172, + 22153, 17299, 1493, 21566, + 22153, 17299, 1493, 21576, + 22153, 17299, 1493, 21784, + 22153, 17299, 1493, 21796, + 22153, 17299, 1493, 21798, + 22153, 17299, 1493, 21800, + 22153, 17299, 1493, 21923, 507, 10387, 507, 15970, + 22153, 17299, 1493, 21923, 507, 10387, 507, 19536, + 22153, 17299, 1493, 21923, 507, 15970, + 22153, 17299, 1493, 21923, 507, 19536, + 22153, 17299, 1493, 22100, + 22153, 17299, 1493, 22106, + 22153, 17299, 1493, 22108, + 22153, 17299, 1493, 22112, + 22153, 17299, 1493, 22176, + 22153, 17299, 1493, 22252, + 22153, 17299, 1493, 22254, + 22153, 17299, 1493, 22256, + 22153, 17299, 1493, 22258, + 22153, 17299, 1493, 22282, + 22153, 17299, 1493, 23056, + 22153, 17299, 1493, 23287, 2776, + 22153, 17299, 1493, 23552, + 22153, 17299, 1493, 23674, + 22153, 17299, 1493, 24043, 17276, + 22153, 17299, 1493, 24056, + 22153, 17299, 1493, 24068, + 22153, 17299, 1493, 24086, + 22157, 13470, + 22172, + 22175, 3425, 13812, + 22191, 6996, + 22196, + 22201, 897, 7662, + 22213, 2301, 8320, + 22213, 20422, + 22218, + 22221, 16531, 276, + 22221, 16531, 554, + 22221, 16531, 2406, + 22221, 16531, 2676, + 22221, 16531, 3398, + 22221, 16531, 3750, + 22221, 16531, 5556, + 22221, 16531, 6066, + 22221, 16531, 7478, + 22221, 16531, 8002, + 22221, 16531, 10120, + 22221, 16531, 10478, + 22221, 16531, 11722, + 22221, 16531, 12354, + 22221, 16531, 13384, + 22221, 16531, 14911, 12354, + 22221, 16531, 15606, + 22221, 16531, 15999, 3750, + 22221, 16531, 16010, + 22221, 16531, 16508, + 22221, 16531, 17060, + 22221, 16787, 2760, + 22221, 16787, 2761, 18280, + 22221, 16787, 3412, + 22221, 16787, 3536, + 22221, 16787, 7058, + 22221, 16787, 15116, + 22221, 16787, 17474, + 22223, 15678, + 22225, 94, + 22225, 14005, 10574, + 22226, + 22235, 6996, + 22245, 22089, 17298, + 22271, 14984, + 22273, 9436, + 22275, 518, + 22275, 1545, 16172, + 22275, 7461, 8808, + 22275, 7461, 8809, 11513, 22478, + 22275, 7841, 518, + 22275, 10575, 7521, 19147, 1290, + 22275, 10575, 12510, + 22275, 10575, 12511, 11513, 7658, + 22275, 10575, 14002, + 22275, 10575, 14334, + 22275, 10575, 16095, 23071, 17534, + 22275, 10575, 17534, + 22275, 10575, 19100, + 22275, 10575, 19147, 23070, + 22275, 10575, 19408, + 22275, 10575, 19433, 21403, 12510, + 22275, 10575, 19433, 21645, 12510, + 22275, 10575, 19540, + 22275, 10575, 19586, + 22275, 10575, 20003, 12510, + 22275, 10575, 20003, 12511, 11513, 7658, + 22275, 10575, 20163, 23070, + 22275, 10575, 20538, + 22275, 10575, 20587, 21645, 12510, + 22275, 10575, 23070, + 22275, 10575, 23071, 3536, + 22275, 10575, 23071, 15116, + 22275, 10575, 23071, 17534, + 22275, 10575, 23071, 19586, + 22275, 12321, 15678, + 22275, 12614, + 22275, 13016, + 22275, 13069, 2760, + 22275, 13069, 3240, + 22275, 13069, 3536, + 22275, 13069, 7036, + 22275, 13069, 7058, + 22275, 13069, 9358, + 22275, 13069, 11824, + 22275, 13069, 13150, + 22275, 13069, 14778, + 22275, 13069, 15116, + 22275, 13417, 15678, + 22275, 15407, 10575, 8, + 22275, 15407, 10575, 16, + 22275, 15407, 10575, 28, + 22275, 15407, 10575, 40, + 22275, 15407, 10575, 58, + 22275, 15407, 10575, 72, + 22275, 15407, 10575, 96, + 22275, 15407, 10575, 100, + 22275, 15407, 10575, 104, + 22275, 15407, 10575, 314, + 22275, 15407, 10575, 504, + 22275, 15407, 10575, 682, + 22275, 15407, 10575, 706, + 22275, 15407, 10575, 2768, + 22275, 15407, 10575, 3644, + 22275, 15407, 10575, 14837, 8, + 22275, 15407, 10575, 14837, 28, + 22275, 15407, 10575, 15877, 8, + 22275, 15407, 10575, 15877, 28, + 22275, 15407, 10575, 15877, 8351, 8, + 22275, 15407, 10575, 19415, 22, + 22275, 15407, 10575, 19415, 34, + 22275, 15407, 10575, 19415, 406, + 22275, 15407, 10575, 19415, 608, + 22275, 15407, 10575, 25905, 8, + 22275, 16095, 13016, + 22275, 16531, 0, + 22275, 16531, 8, + 22275, 16531, 16, + 22275, 16531, 28, + 22275, 16531, 40, + 22275, 16531, 58, + 22275, 16531, 72, + 22275, 16531, 96, + 22275, 16531, 100, + 22275, 16531, 104, + 22275, 16531, 108, + 22275, 16531, 126, + 22275, 16531, 150, + 22275, 16531, 228, + 22275, 16531, 248, + 22275, 16531, 272, + 22275, 16531, 314, + 22275, 16531, 344, + 22275, 16531, 358, + 22275, 16531, 394, + 22275, 16531, 426, + 22275, 16531, 466, + 22275, 16531, 504, + 22275, 16531, 548, + 22275, 16531, 582, + 22275, 16531, 598, + 22275, 16531, 614, + 22275, 16531, 648, + 22275, 16531, 682, + 22275, 16531, 706, + 22275, 16531, 714, + 22275, 16531, 778, + 22275, 16531, 796, + 22275, 16531, 972, + 22275, 16531, 1000, + 22275, 16531, 1116, + 22275, 16531, 1214, + 22275, 16531, 1236, + 22275, 16531, 1578, + 22275, 16531, 1588, + 22275, 16531, 1918, + 22275, 16531, 1934, + 22275, 16531, 2036, + 22275, 16531, 2278, + 22275, 16531, 2574, + 22275, 16531, 2624, + 22275, 16531, 2698, + 22275, 16531, 2768, + 22275, 16531, 2830, + 22275, 16531, 3074, + 22275, 16531, 3118, + 22275, 16531, 3212, + 22275, 16531, 3286, + 22275, 16531, 3422, + 22275, 16531, 3502, + 22275, 16531, 3644, + 22275, 16531, 4002, + 22275, 16531, 4042, + 22275, 16531, 6564, + 22275, 16531, 6572, + 22275, 16531, 7300, + 22275, 16531, 8068, + 22275, 16531, 8342, + 22275, 16531, 9422, + 22275, 16531, 11082, + 22275, 16531, 13030, + 22275, 16531, 13473, 778, + 22275, 16531, 14837, 0, + 22275, 16531, 14837, 8, + 22275, 16531, 14837, 28, + 22275, 16531, 15877, 0, + 22275, 16531, 15877, 8, + 22275, 16531, 15877, 28, + 22275, 16531, 18213, 10696, + 22275, 16531, 18585, 1214, + 22275, 16531, 19415, 22, + 22275, 16531, 19415, 34, + 22275, 16531, 19415, 406, + 22275, 16531, 19415, 608, + 22275, 17257, 10575, 17496, + 22275, 17257, 10575, 19538, + 22275, 22478, + 22275, 23737, 10574, + 22277, 17768, + 22411, 23882, + 22435, 660, + 22435, 11513, 7059, 6697, 12318, + 22442, + 22454, + 22469, 14911, 16531, 16, + 22469, 14911, 16531, 554, + 22469, 14911, 16531, 786, + 22469, 14911, 16531, 790, + 22469, 14911, 16531, 948, + 22469, 14911, 16531, 1015, 3988, + 22469, 14911, 16531, 2766, + 22469, 14911, 16531, 2782, + 22469, 14911, 16531, 3212, + 22469, 14911, 16531, 3492, + 22469, 14911, 16531, 3606, + 22469, 14911, 16531, 6120, + 22469, 14911, 16531, 7034, + 22469, 14911, 16531, 7474, + 22469, 14911, 16531, 7834, + 22469, 14911, 16531, 7990, + 22469, 14911, 16531, 10512, + 22469, 14911, 16531, 11362, + 22469, 14911, 16531, 11660, + 22469, 14911, 16531, 11678, + 22469, 14911, 16531, 11680, + 22469, 14911, 16531, 13088, + 22469, 14911, 16531, 13112, + 22469, 14911, 16531, 13294, + 22469, 14911, 16531, 14080, + 22469, 14911, 16531, 14662, + 22469, 14911, 16531, 14908, + 22469, 14911, 16531, 14911, 3988, + 22469, 14911, 16531, 14911, 3989, 11513, 10856, + 22469, 14911, 16531, 15526, + 22469, 14911, 16531, 15930, + 22469, 14911, 16531, 16060, + 22469, 14911, 16531, 16944, + 22469, 14911, 16531, 17470, + 22469, 14911, 16531, 17618, + 22469, 14911, 16531, 17841, 15930, + 22469, 14911, 16531, 18208, + 22469, 14911, 16531, 18303, 7834, + 22469, 14911, 16531, 18311, 1015, 3988, + 22469, 14911, 16531, 18311, 14911, 3988, + 22469, 14911, 16531, 18318, + 22469, 14911, 16531, 18524, + 22469, 14911, 16531, 18658, + 22469, 14911, 16531, 19096, + 22469, 14911, 16531, 19157, 272, + 22469, 14911, 16531, 19466, + 22469, 14911, 16531, 20217, 18658, + 22469, 14911, 16531, 22991, 0, + 22469, 17835, 16531, 16, + 22469, 17835, 16531, 554, + 22469, 17835, 16531, 786, + 22469, 17835, 16531, 790, + 22469, 17835, 16531, 948, + 22469, 17835, 16531, 1015, 3988, + 22469, 17835, 16531, 2766, + 22469, 17835, 16531, 2782, + 22469, 17835, 16531, 3212, + 22469, 17835, 16531, 3492, + 22469, 17835, 16531, 3606, + 22469, 17835, 16531, 6120, + 22469, 17835, 16531, 7034, + 22469, 17835, 16531, 7474, + 22469, 17835, 16531, 7834, + 22469, 17835, 16531, 7990, + 22469, 17835, 16531, 10512, + 22469, 17835, 16531, 11362, + 22469, 17835, 16531, 11660, + 22469, 17835, 16531, 11678, + 22469, 17835, 16531, 11680, + 22469, 17835, 16531, 13088, + 22469, 17835, 16531, 13112, + 22469, 17835, 16531, 13294, + 22469, 17835, 16531, 14080, + 22469, 17835, 16531, 14662, + 22469, 17835, 16531, 14908, + 22469, 17835, 16531, 14911, 3988, + 22469, 17835, 16531, 14911, 3989, 11513, 10856, + 22469, 17835, 16531, 15526, + 22469, 17835, 16531, 15930, + 22469, 17835, 16531, 16060, + 22469, 17835, 16531, 16944, + 22469, 17835, 16531, 17470, + 22469, 17835, 16531, 17618, + 22469, 17835, 16531, 17841, 15930, + 22469, 17835, 16531, 18208, + 22469, 17835, 16531, 18303, 7834, + 22469, 17835, 16531, 18311, 1015, 3988, + 22469, 17835, 16531, 18311, 14911, 3988, + 22469, 17835, 16531, 18318, + 22469, 17835, 16531, 18524, + 22469, 17835, 16531, 18658, + 22469, 17835, 16531, 19096, + 22469, 17835, 16531, 19157, 272, + 22469, 17835, 16531, 19466, + 22469, 17835, 16531, 20217, 18658, + 22469, 17835, 16531, 22991, 0, + 22473, 1086, + 22480, + 22483, 16531, 812, + 22483, 16531, 814, + 22483, 16531, 816, + 22483, 16531, 1340, + 22483, 16531, 1342, + 22483, 16531, 1344, + 22483, 16531, 1346, + 22483, 16531, 1348, + 22483, 16531, 1350, + 22483, 16531, 1838, + 22483, 16531, 1840, + 22483, 16531, 1842, + 22483, 16531, 1844, + 22483, 16531, 2720, + 22483, 16531, 2722, + 22483, 16531, 2724, + 22483, 16531, 3560, + 22483, 16531, 3562, + 22483, 16531, 3564, + 22483, 16531, 3566, + 22483, 16531, 3568, + 22483, 16531, 4126, + 22483, 16531, 7402, + 22483, 16531, 7404, + 22483, 16531, 7406, + 22483, 16531, 7408, + 22483, 16531, 7410, + 22483, 16531, 7412, + 22483, 16531, 7414, + 22483, 16531, 7416, + 22483, 16531, 7418, + 22483, 16531, 7446, + 22483, 16531, 7448, + 22483, 16531, 7450, + 22483, 16531, 7452, + 22483, 16531, 7454, + 22483, 16531, 7456, + 22483, 16531, 7458, + 22483, 16531, 7502, + 22483, 16531, 7504, + 22483, 16531, 7506, + 22483, 16531, 7508, + 22483, 16531, 7510, + 22483, 16531, 7512, + 22483, 16531, 7514, + 22483, 16531, 7636, + 22483, 16531, 7638, + 22483, 16531, 7640, + 22483, 16531, 7642, + 22483, 16531, 7644, + 22483, 16531, 7646, + 22483, 16531, 7648, + 22483, 16531, 7650, + 22483, 16531, 7682, + 22483, 16531, 7684, + 22483, 16531, 7686, + 22483, 16531, 7946, + 22483, 16531, 7948, + 22483, 16531, 7950, + 22483, 16531, 7952, + 22483, 16531, 7954, + 22483, 16531, 7956, + 22483, 16531, 7958, + 22483, 16531, 7960, + 22483, 16531, 7962, + 22483, 16531, 8024, + 22483, 16531, 8026, + 22483, 16531, 8028, + 22483, 16531, 8030, + 22483, 16531, 8032, + 22483, 16531, 8034, + 22483, 16531, 8082, + 22483, 16531, 8084, + 22483, 16531, 8086, + 22483, 16531, 8088, + 22483, 16531, 8090, + 22483, 16531, 8092, + 22483, 16531, 8094, + 22483, 16531, 8096, + 22483, 16531, 8122, + 22483, 16531, 8124, + 22483, 16531, 8126, + 22483, 16531, 8156, + 22483, 16531, 8158, + 22483, 16531, 8160, + 22483, 16531, 8162, + 22483, 16531, 8164, + 22483, 16531, 8166, + 22483, 16531, 8168, + 22483, 16531, 8778, + 22483, 16531, 8780, + 22483, 16531, 8782, + 22483, 16531, 8784, + 22483, 16531, 8786, + 22483, 16531, 8788, + 22483, 16531, 8790, + 22483, 16531, 8842, + 22483, 16531, 8844, + 22483, 16531, 8918, + 22483, 16531, 8920, + 22483, 16531, 8922, + 22483, 16531, 8924, + 22483, 16531, 8926, + 22483, 16531, 8928, + 22483, 16531, 8930, + 22483, 16531, 8960, + 22483, 16531, 8962, + 22483, 16531, 8964, + 22483, 16531, 8966, + 22483, 16531, 8968, + 22483, 16531, 8970, + 22483, 16531, 8984, + 22483, 16531, 8986, + 22483, 16531, 8988, + 22483, 16531, 8990, + 22483, 16531, 9114, + 22483, 16531, 9116, + 22483, 16531, 9118, + 22483, 16531, 9120, + 22483, 16531, 9122, + 22483, 16531, 9124, + 22483, 16531, 9126, + 22483, 16531, 9128, + 22483, 16531, 9130, + 22483, 16531, 9236, + 22483, 16531, 9238, + 22483, 16531, 9240, + 22483, 16531, 9242, + 22483, 16531, 9244, + 22483, 16531, 9246, + 22483, 16531, 9336, + 22483, 16531, 9338, + 22483, 16531, 9340, + 22483, 16531, 9342, + 22483, 16531, 9344, + 22483, 16531, 9346, + 22483, 16531, 9348, + 22483, 16531, 9426, + 22483, 16531, 9428, + 22483, 16531, 9430, + 22483, 16531, 9432, + 22483, 16531, 9434, + 22483, 16531, 9516, + 22483, 16531, 9518, + 22483, 16531, 9520, + 22483, 16531, 10074, + 22483, 16531, 10076, + 22483, 16531, 10078, + 22483, 16531, 10080, + 22483, 16531, 10104, + 22483, 16531, 10106, + 22483, 16531, 10108, + 22483, 16531, 10110, + 22483, 16531, 10128, + 22483, 16531, 10130, + 22483, 16531, 10132, + 22483, 16531, 10134, + 22483, 16531, 10136, + 22483, 16531, 10138, + 22483, 16531, 10140, + 22483, 16531, 10160, + 22483, 16531, 10162, + 22483, 16531, 10164, + 22483, 16531, 10166, + 22483, 16531, 10168, + 22483, 16531, 10170, + 22483, 16531, 10226, + 22483, 16531, 10228, + 22483, 16531, 10230, + 22483, 16531, 10232, + 22483, 16531, 10234, + 22483, 16531, 10236, + 22483, 16531, 10354, + 22483, 16531, 10356, + 22483, 16531, 10358, + 22483, 16531, 10360, + 22483, 16531, 10362, + 22483, 16531, 10364, + 22483, 16531, 10366, + 22483, 16531, 10368, + 22483, 16531, 10404, + 22483, 16531, 10406, + 22483, 16531, 10408, + 22483, 16531, 10410, + 22483, 16531, 10412, + 22483, 16531, 10550, + 22483, 16531, 10552, + 22483, 16531, 10554, + 22483, 16531, 10556, + 22483, 16531, 10558, + 22483, 16531, 10560, + 22483, 16531, 10612, + 22483, 16531, 10614, + 22483, 16531, 10616, + 22483, 16531, 10618, + 22483, 16531, 10620, + 22483, 16531, 10622, + 22483, 16531, 10624, + 22483, 16531, 10700, + 22483, 16531, 10702, + 22483, 16531, 10704, + 22483, 16531, 10706, + 22483, 16531, 10708, + 22483, 16531, 10710, + 22483, 16531, 10712, + 22483, 16531, 10714, + 22483, 16531, 10832, + 22483, 16531, 10834, + 22483, 16531, 10836, + 22483, 16531, 10838, + 22483, 16531, 10880, + 22483, 16531, 10882, + 22483, 16531, 10884, + 22483, 16531, 10886, + 22483, 16531, 10888, + 22483, 16531, 10890, + 22483, 16531, 10892, + 22483, 16531, 10894, + 22483, 16531, 10896, + 22483, 16531, 10970, + 22483, 16531, 10972, + 22483, 16531, 10974, + 22483, 16531, 10976, + 22483, 16531, 10978, + 22483, 16531, 10980, + 22483, 16531, 10982, + 22483, 16531, 11018, + 22483, 16531, 11020, + 22483, 16531, 11022, + 22483, 16531, 11024, + 22483, 16531, 11026, + 22483, 16531, 11028, + 22483, 16531, 11104, + 22483, 16531, 11106, + 22483, 16531, 11108, + 22483, 16531, 11110, + 22483, 16531, 11454, + 22483, 16531, 11456, + 22483, 16531, 11458, + 22483, 16531, 11460, + 22483, 16531, 11462, + 22483, 16531, 11476, + 22483, 16531, 11478, + 22483, 16531, 11480, + 22483, 16531, 11482, + 22483, 16531, 11492, + 22483, 16531, 11494, + 22483, 16531, 11496, + 22483, 16531, 11498, + 22483, 16531, 11500, + 22483, 16531, 11514, + 22483, 16531, 11516, + 22483, 16531, 11518, + 22483, 16531, 11520, + 22483, 16531, 11522, + 22483, 16531, 11524, + 22483, 16531, 11526, + 22483, 16531, 11614, + 22483, 16531, 11616, + 22483, 16531, 11618, + 22483, 16531, 11620, + 22483, 16531, 11622, + 22483, 16531, 11704, + 22483, 16531, 11706, + 22483, 16531, 11708, + 22483, 16531, 11710, + 22483, 16531, 11712, + 22483, 16531, 11714, + 22483, 16531, 11732, + 22483, 16531, 11734, + 22483, 16531, 11736, + 22483, 16531, 11738, + 22483, 16531, 13436, + 22483, 16531, 13438, + 22483, 16531, 13634, + 22483, 16531, 13636, + 22483, 16531, 13638, + 22483, 16531, 13718, + 22483, 16531, 13942, + 22483, 16531, 14108, + 22483, 16531, 14162, + 22483, 16531, 15168, + 22483, 16531, 15240, + 22483, 16531, 15504, + 22483, 16531, 21620, + 22483, 16531, 21622, + 22491, 15198, + 22491, 15199, 11513, 15859, 9440, + 22492, + 22495, 964, + 22495, 2761, 16107, 17782, + 22495, 2761, 16107, 17784, + 22495, 2761, 16107, 17786, + 22495, 2761, 16107, 17788, + 22495, 2761, 16107, 17790, + 22495, 2761, 16107, 17792, + 22495, 2761, 16107, 22206, + 22495, 3367, 2034, + 22495, 8321, 11513, 7059, 10985, 13924, + 22495, 8321, 11513, 10985, 8808, + 22495, 8321, 11513, 15117, 10985, 13924, + 22495, 8321, 21382, + 22495, 8801, 11513, 17265, 10574, + 22495, 10401, 16544, + 22495, 10401, 16546, + 22495, 10401, 16548, + 22495, 10401, 16550, + 22495, 12525, 18266, + 22495, 12525, 18744, + 22495, 16498, + 22495, 17005, 1088, + 22495, 17625, 8320, + 22495, 19309, 13806, + 22495, 19976, + 22495, 20579, 19058, + 22495, 21082, + 22497, 17298, + 22507, 20152, + 22521, 10575, 965, 12318, + 22521, 10575, 1291, 12502, + 22521, 10575, 12622, + 22521, 10575, 16095, 10151, 12502, + 22521, 10575, 19408, + 22521, 10575, 19540, + 22521, 13069, 2760, + 22521, 13069, 3536, + 22521, 13069, 7058, + 22521, 13069, 15116, + 22521, 15407, 10575, 8, + 22521, 15407, 10575, 16, + 22521, 15407, 10575, 28, + 22521, 15407, 10575, 40, + 22521, 15407, 10575, 19415, 34, + 22521, 15407, 16525, 8808, + 22521, 16531, 0, + 22521, 16531, 108, + 22521, 16531, 126, + 22521, 16531, 150, + 22521, 16531, 248, + 22521, 16531, 272, + 22521, 16531, 344, + 22521, 16531, 358, + 22521, 16531, 394, + 22521, 16531, 426, + 22521, 16531, 466, + 22521, 16531, 548, + 22521, 16531, 598, + 22521, 16531, 614, + 22521, 16531, 648, + 22521, 16531, 714, + 22521, 16531, 778, + 22521, 16531, 796, + 22521, 16531, 1000, + 22521, 16531, 1116, + 22521, 16531, 1214, + 22521, 16531, 1236, + 22521, 16531, 1588, + 22521, 16531, 2036, + 22521, 16531, 2076, + 22521, 16531, 2624, + 22521, 16531, 2698, + 22521, 16531, 2830, + 22521, 16531, 3212, + 22521, 16531, 3286, + 22521, 16531, 3422, + 22521, 16531, 3502, + 22521, 16531, 3686, + 22521, 16531, 6572, + 22521, 16531, 11082, + 22521, 16531, 11102, + 22521, 16531, 15238, + 22521, 16787, 2761, 18280, + 22521, 16787, 2761, 20828, + 22521, 16787, 3412, + 22521, 16787, 17474, + 22521, 17534, + 22521, 20055, 2761, 7428, + 22521, 23555, 1290, + 22521, 23555, 13016, + 22521, 23555, 13816, + 22521, 23555, 13832, + 22521, 23555, 14911, 15938, + 22521, 23555, 15938, + 22521, 23555, 16095, 13016, + 22521, 23555, 19739, 964, + 22521, 23555, 20276, + 22553, 10575, 680, + 22553, 16531, 230, + 22553, 16531, 276, + 22553, 16531, 554, + 22553, 16531, 2406, + 22553, 16531, 2676, + 22553, 16531, 3398, + 22553, 16531, 3750, + 22553, 16531, 5556, + 22553, 16531, 6066, + 22553, 16531, 7478, + 22553, 16531, 8002, + 22553, 16531, 9992, + 22553, 16531, 10120, + 22553, 16531, 10478, + 22553, 16531, 10914, + 22553, 16531, 11568, + 22553, 16531, 11582, + 22553, 16531, 11722, + 22553, 16531, 12168, + 22553, 16531, 12354, + 22553, 16531, 12512, + 22553, 16531, 13384, + 22553, 16531, 13606, + 22553, 16531, 13688, + 22553, 16531, 14588, + 22553, 16531, 14720, + 22553, 16531, 14954, + 22553, 16531, 15606, + 22553, 16531, 16010, + 22553, 16531, 16262, + 22553, 16531, 16396, + 22553, 16531, 16508, + 22553, 16531, 17060, + 22553, 16531, 17622, + 22553, 16531, 17986, + 22553, 16531, 19270, + 22553, 16787, 2760, + 22553, 16787, 2761, 18280, + 22553, 16787, 3412, + 22553, 16787, 7036, + 22553, 16787, 17474, + 22553, 23555, 1290, + 22553, 23555, 1291, 17579, 1290, + 22553, 23555, 3537, 6696, + 22553, 23555, 8321, 16172, + 22553, 23555, 10690, + 22553, 23555, 16095, 1291, 17579, 1290, + 22553, 23555, 18156, + 22553, 23737, 8809, 12318, + 22553, 23737, 8809, 12502, + 22555, 920, + 22555, 2232, + 22558, + 22560, + 22587, 17298, + 22610, + 22726, + 22731, 22251, 7022, + 22733, 6996, + 22754, + 22761, 5532, + 22765, 16095, 23554, + 22765, 17171, 23554, + 22767, 11537, 21850, + 22767, 16531, 276, + 22767, 16531, 554, + 22767, 16531, 880, + 22767, 16531, 884, + 22767, 16531, 996, + 22767, 16531, 1718, + 22767, 16531, 1988, + 22767, 16531, 2406, + 22767, 16531, 2676, + 22767, 16531, 2966, + 22767, 16531, 3394, + 22767, 16531, 3416, + 22767, 16531, 3748, + 22767, 16531, 3952, + 22767, 16531, 4022, + 22767, 16531, 6622, + 22767, 16531, 7206, + 22767, 16531, 8252, + 22767, 16531, 10188, + 22767, 16531, 10376, + 22767, 16531, 10424, + 22767, 16531, 10478, + 22767, 16787, 2760, + 22767, 16787, 2761, 18280, + 22767, 16787, 3412, + 22767, 16787, 3536, + 22767, 16787, 15116, + 22767, 16787, 17474, + 22773, 14898, + 22775, 10574, + 22783, 10574, + 22786, + 22790, + 22792, + 22805, 20157, 20406, + 22807, 13177, 660, + 22808, + 22815, 10574, + 22825, 8281, 18116, + 22825, 8281, 18118, + 22828, + 22835, 917, 21119, 12414, + 22837, 3473, 17119, 15453, 12414, + 22837, 3537, 16321, 12414, + 22837, 7432, + 22837, 11473, 12414, + 22837, 12414, + 22837, 12415, 661, 964, + 22837, 12415, 661, 12525, 17988, + 22837, 12415, 897, 15287, 897, 13839, 2761, 16107, 12532, + 22837, 12415, 7065, 964, + 22837, 12415, 7065, 965, 661, 12525, 17988, + 22837, 12415, 7065, 21349, 12414, + 22837, 12415, 9787, 21557, 12414, + 22837, 12415, 11513, 3445, 19380, + 22837, 12415, 11513, 3445, 21348, + 22837, 12415, 11513, 7658, + 22837, 12415, 11513, 8356, + 22837, 12415, 11513, 9905, 12502, + 22837, 12415, 11513, 10856, + 22837, 12415, 11513, 10857, 11513, 16095, 20933, 17264, + 22837, 12415, 11513, 10857, 11513, 20933, 17264, + 22837, 12415, 11513, 13779, 20859, 21022, + 22837, 12415, 11513, 13839, 7658, + 22837, 12415, 11513, 14911, 20859, 21022, + 22837, 12415, 11513, 14911, 23211, 21022, + 22837, 12415, 11513, 15975, 21348, + 22837, 12415, 11513, 16093, 10692, + 22837, 12415, 11513, 16095, 20933, 17264, + 22837, 12415, 11513, 16637, 20859, 21022, + 22837, 12415, 11513, 17264, + 22837, 12415, 11513, 18719, 10856, + 22837, 12415, 11513, 20933, 17264, + 22837, 12415, 11513, 23211, 21022, + 22837, 12415, 12319, 14837, 21557, 12414, + 22837, 12415, 12319, 15141, 20406, + 22837, 12415, 12319, 15703, 13177, 660, + 22837, 12415, 12319, 18999, 15141, 20406, + 22837, 12415, 12319, 18999, 15703, 13177, 660, + 22837, 12415, 19281, 46, + 22837, 12415, 19281, 20764, + 22837, 12415, 19281, 23852, + 22837, 12525, 12414, + 22837, 12525, 17881, 15453, 12414, + 22837, 13473, 12414, + 22837, 13473, 22233, 12414, + 22837, 15453, 12414, + 22837, 15453, 12415, 7065, 11468, + 22837, 15453, 12415, 17579, 20859, 21022, + 22837, 15827, 17119, 15453, 12414, + 22837, 16019, 12414, + 22837, 16095, 6545, 12414, + 22837, 16095, 12414, + 22837, 16095, 12415, 7065, 964, + 22837, 16095, 12415, 11513, 17264, + 22837, 16095, 12415, 11513, 20933, 17264, + 22837, 16095, 22180, + 22837, 16857, 15738, + 22837, 17042, + 22837, 17435, 6545, 12414, + 22837, 17435, 12414, + 22837, 18253, 9787, 21557, 18252, + 22837, 18253, 11513, 5989, 699, 661, 964, + 22837, 18253, 11513, 5989, 699, 7065, 964, + 22837, 18253, 11513, 5989, 699, 12319, 8351, 6544, + 22837, 18253, 11513, 5989, 699, 12319, 21557, 18253, 11513, 5989, 698, + 22837, 18253, 11513, 5989, 699, 12319, 22837, 18253, 11513, 5989, 6700, + 22837, 18253, 11513, 5989, 6701, 661, 964, + 22837, 18253, 11513, 5989, 6701, 7065, 964, + 22837, 18253, 11513, 5989, 6701, 12319, 21557, 18253, 11513, 5989, 6700, + 22837, 18253, 11513, 5989, 6701, 12503, 8351, 6544, + 22837, 18253, 11513, 5989, 19380, + 22837, 18253, 11513, 5989, 21348, + 22837, 18945, 7432, + 22837, 19165, 12414, + 22837, 20701, 12414, + 22837, 20859, 21022, + 22837, 21775, 12414, + 22837, 22180, + 22837, 22233, 12414, + 22837, 22841, 12414, + 22837, 23005, 12415, 7065, 964, + 22837, 23005, 12415, 11513, 10856, + 22837, 23005, 12415, 11513, 10857, 11513, 16095, 20933, 17264, + 22837, 23005, 12415, 11513, 10857, 11513, 20933, 17264, + 22837, 23005, 12415, 11513, 16095, 20933, 17264, + 22837, 23005, 12415, 11513, 20859, 22182, + 22837, 23005, 12415, 11513, 20933, 17264, + 22837, 23005, 17435, 6545, 12414, + 22837, 23061, 20641, 15453, 12414, + 22837, 23215, 12414, + 22837, 23305, 15453, 12414, + 22837, 23503, 12414, + 22837, 23845, 20641, 15453, 12414, + 22837, 24081, 15453, 12414, + 22837, 28089, 12414, + 22837, 28089, 12415, 661, 964, + 22837, 28089, 12415, 9787, 21557, 28089, 12414, + 22837, 28089, 12415, 11513, 6101, 14784, + 22837, 28089, 12415, 11513, 8351, 3445, 19380, + 22837, 28089, 12415, 11513, 8351, 3445, 21348, + 22837, 28089, 12415, 11513, 11371, 13473, 14784, + 22837, 28089, 12415, 11513, 13473, 14784, + 22837, 28089, 12415, 11513, 16095, 20933, 17264, + 22837, 28089, 12415, 11513, 16095, 22495, 17264, + 22837, 28089, 12415, 11513, 16637, 14784, + 22837, 28089, 12415, 11513, 16701, 14784, + 22837, 28089, 16019, 12414, + 22837, 28089, 16857, 15738, + 22841, 13473, 2301, 16095, 12923, 21779, 8809, 20412, + 22841, 13473, 16095, 12923, 21779, 8809, 20412, + 22841, 13473, 16095, 17465, 12923, 21779, 8809, 20412, + 22841, 23285, 20412, + 22845, 10575, 17534, + 22845, 10575, 19408, + 22845, 10575, 19540, + 22845, 10575, 23070, + 22845, 13016, + 22845, 13069, 2760, + 22845, 13069, 3240, + 22845, 13069, 3536, + 22845, 13069, 7036, + 22845, 13069, 7058, + 22845, 13069, 9358, + 22845, 13069, 11824, + 22845, 13069, 13150, + 22845, 13069, 14778, + 22845, 13069, 15116, + 22845, 15407, 10575, 8, + 22845, 15407, 10575, 16, + 22845, 15407, 10575, 28, + 22845, 15407, 10575, 40, + 22845, 15407, 10575, 58, + 22845, 15407, 10575, 72, + 22845, 15407, 10575, 96, + 22845, 15407, 10575, 186, + 22845, 15407, 10575, 314, + 22845, 15407, 10575, 522, + 22845, 15407, 10575, 706, + 22845, 15407, 10575, 19415, 22, + 22845, 15407, 10575, 19415, 34, + 22845, 15407, 10575, 19415, 406, + 22845, 15407, 10575, 19415, 608, + 22845, 16095, 13016, + 22845, 16531, 0, + 22845, 16531, 8, + 22845, 16531, 16, + 22845, 16531, 28, + 22845, 16531, 40, + 22845, 16531, 58, + 22845, 16531, 72, + 22845, 16531, 96, + 22845, 16531, 108, + 22845, 16531, 126, + 22845, 16531, 150, + 22845, 16531, 186, + 22845, 16531, 248, + 22845, 16531, 272, + 22845, 16531, 314, + 22845, 16531, 344, + 22845, 16531, 358, + 22845, 16531, 394, + 22845, 16531, 426, + 22845, 16531, 466, + 22845, 16531, 522, + 22845, 16531, 548, + 22845, 16531, 598, + 22845, 16531, 614, + 22845, 16531, 648, + 22845, 16531, 706, + 22845, 16531, 714, + 22845, 16531, 778, + 22845, 16531, 1000, + 22845, 16531, 1116, + 22845, 16531, 1214, + 22845, 16531, 1236, + 22845, 16531, 1588, + 22845, 16531, 1918, + 22845, 16531, 2036, + 22845, 16531, 2278, + 22845, 16531, 2574, + 22845, 16531, 2624, + 22845, 16531, 2698, + 22845, 16531, 2830, + 22845, 16531, 3212, + 22845, 16531, 3286, + 22845, 16531, 3422, + 22845, 16531, 3502, + 22845, 16531, 6572, + 22845, 16531, 11082, + 22845, 16531, 19415, 22, + 22845, 16531, 19415, 34, + 22845, 16531, 19415, 406, + 22845, 16531, 19415, 608, + 22845, 21143, 10575, 13442, + 22851, 18933, 11513, 15827, 15948, + 22893, 9783, 1036, + 22897, 507, 13604, + 22919, 14932, + 22926, + 22946, + 22959, 18962, + 22964, + 22976, + 22980, + 22983, 7039, 521, 9914, + 22983, 14692, + 22983, 15858, + 22992, + 23013, 21003, 18979, 8809, 126, + 23013, 21003, 18979, 8809, 9330, + 23016, + 23022, + 23025, 17298, + 23045, 2035, 17298, + 23055, 13830, + 23061, 20641, 15453, 22837, 12414, + 23063, 14931, 12415, 11513, 16351, 10856, + 23063, 14931, 12415, 11513, 22495, 10856, + 23068, + 23079, 20066, + 23085, 17298, + 23086, + 23088, + 23097, 14984, + 23101, 660, + 23102, + 23104, + 23193, 13177, 661, 529, 21558, + 23193, 13177, 661, 529, 23852, + 23193, 19121, 13177, 661, 529, 21558, + 23193, 19121, 13177, 661, 529, 23852, + 23193, 19121, 21559, 529, 13177, 660, + 23193, 19121, 23853, 529, 13177, 660, + 23195, 14921, 7461, 11513, 9783, 14030, + 23195, 14921, 7461, 11513, 15949, 14030, + 23209, 660, + 23213, 8808, + 23213, 20549, 8808, + 23218, + 23220, + 23227, 14932, + 23255, 10488, + 23257, 14558, + 23259, 7073, 10696, + 23259, 7429, 7023, 14932, + 23259, 12922, + 23259, 13803, 11033, 8808, + 23259, 14932, + 23259, 15049, 8809, 2760, + 23259, 15049, 8809, 3536, + 23259, 15049, 8809, 7036, + 23259, 15049, 8809, 7058, + 23259, 15049, 8809, 15116, + 23259, 16787, 11824, + 23259, 17037, 11033, 8808, + 23259, 17889, 8808, + 23259, 19985, 11033, 8808, + 23259, 21183, 11033, 8808, + 23259, 21517, 8808, + 23259, 22029, 8321, 7007, 21851, 17298, + 23259, 22029, 17299, 1493, 1213, 2760, + 23259, 22029, 17299, 1493, 1213, 3240, + 23259, 22029, 17299, 1493, 1213, 3412, + 23259, 22029, 17299, 1493, 1213, 3536, + 23259, 22029, 17299, 1493, 1213, 7036, + 23259, 22029, 17299, 1493, 1213, 7058, + 23259, 22029, 17299, 1493, 1213, 9358, + 23259, 22029, 17299, 1493, 1213, 13150, + 23259, 22029, 17299, 1493, 1213, 14778, + 23259, 22029, 17299, 1493, 1213, 15116, + 23259, 22029, 17299, 1493, 1213, 16110, + 23259, 22029, 17299, 1493, 1213, 17372, + 23259, 22029, 17299, 1493, 1213, 17472, + 23259, 22029, 17299, 1493, 1213, 17474, + 23259, 22029, 17299, 1493, 1213, 18148, + 23259, 22029, 17299, 1493, 1213, 19116, + 23259, 22029, 17299, 1493, 1213, 19966, + 23259, 22029, 17299, 1493, 1213, 20052, + 23259, 22029, 17299, 1493, 1213, 20368, + 23259, 22029, 17299, 1493, 1213, 20824, + 23259, 22029, 17299, 1493, 1213, 21854, + 23259, 22029, 17299, 1493, 1213, 22972, + 23259, 22029, 17299, 1493, 1213, 22996, + 23259, 22029, 17299, 1493, 1213, 22998, + 23259, 22029, 17299, 1493, 1213, 23000, + 23259, 22029, 17299, 1493, 1213, 23710, + 23259, 22029, 17299, 1493, 1213, 23712, + 23259, 22029, 17299, 1493, 1213, 23714, + 23259, 22029, 17299, 1493, 1213, 24174, + 23259, 22029, 17299, 1493, 1213, 24176, + 23259, 22029, 17299, 1493, 1213, 24178, + 23259, 22029, 17299, 1493, 2384, + 23259, 22029, 17299, 1493, 7677, 2760, + 23259, 22029, 17299, 1493, 7677, 3240, + 23259, 22029, 17299, 1493, 7677, 3412, + 23259, 22029, 17299, 1493, 7677, 3536, + 23259, 22029, 17299, 1493, 7677, 7036, + 23259, 22029, 17299, 1493, 7677, 7058, + 23259, 22029, 17299, 1493, 7677, 9358, + 23259, 22029, 17299, 1493, 7677, 11824, + 23259, 22029, 17299, 1493, 7677, 13150, + 23259, 22029, 17299, 1493, 7677, 14778, + 23259, 22029, 17299, 1493, 7677, 15116, + 23259, 22029, 17299, 1493, 7677, 16110, + 23259, 22029, 17299, 1493, 7677, 17472, + 23259, 22029, 17299, 1493, 7677, 17474, + 23259, 22029, 17299, 1493, 7677, 18148, + 23259, 22029, 17299, 1493, 7677, 19116, + 23259, 22029, 17299, 1493, 7677, 19966, + 23259, 22029, 17299, 1493, 7677, 20052, + 23259, 22029, 17299, 1493, 7677, 20368, + 23259, 22029, 17299, 1493, 7677, 20824, + 23259, 22029, 17299, 1493, 7677, 21854, + 23259, 22029, 17299, 1493, 7677, 22996, + 23259, 22029, 17299, 1493, 7677, 23000, + 23259, 22029, 17299, 1493, 7677, 23712, + 23259, 22029, 17299, 1493, 7677, 24178, + 23259, 22029, 17299, 1493, 7912, + 23259, 22029, 17299, 1493, 7914, + 23259, 22029, 17299, 1493, 12400, + 23259, 22029, 17299, 1493, 13922, + 23259, 22029, 17299, 1493, 15758, + 23259, 22029, 17299, 1493, 18320, + 23259, 22029, 17299, 1493, 18746, + 23259, 22029, 17299, 1493, 19772, + 23259, 22029, 17299, 1493, 20008, + 23259, 22029, 17299, 1493, 20382, + 23259, 22029, 17299, 1493, 21852, + 23259, 22097, 21498, + 23259, 22161, 2369, 8808, + 23259, 22161, 2761, 8808, + 23259, 22161, 3473, 8808, + 23259, 22161, 3537, 8808, + 23259, 22161, 7059, 8808, + 23259, 22161, 13141, 8808, + 23259, 22161, 13261, 8808, + 23259, 22161, 15109, 8808, + 23259, 22161, 15117, 8808, + 23259, 22161, 15827, 8808, + 23259, 22161, 16219, 8808, + 23259, 22161, 16325, 8808, + 23259, 22161, 16661, 8808, + 23259, 22161, 17095, 8808, + 23259, 22161, 18523, 8808, + 23259, 22161, 18999, 8808, + 23259, 23123, 21101, 7073, 20766, + 23259, 23123, 21101, 8281, 661, 14658, + 23259, 23123, 21101, 8281, 661, 16661, 897, 14658, + 23259, 23123, 21101, 12319, 661, 12502, + 23259, 23123, 21101, 12319, 661, 16661, 897, 12502, + 23259, 23123, 21101, 20420, + 23259, 23123, 21101, 20596, + 23259, 23123, 21101, 20767, 7065, 8280, + 23259, 23123, 21101, 20767, 7065, 12318, + 23259, 23123, 21101, 20767, 7065, 12502, + 23259, 23123, 21101, 20767, 7065, 13839, 8280, + 23259, 23123, 21101, 20767, 7065, 13839, 14658, + 23259, 23123, 21101, 20767, 7065, 14658, + 23259, 23123, 21101, 20767, 7065, 15287, 8280, + 23259, 23123, 21101, 20767, 7065, 15287, 14658, + 23259, 23123, 21101, 22495, 22812, + 23259, 23123, 21101, 23676, + 23275, 6631, 16890, + 23275, 17192, + 23278, + 23281, 22161, 15708, + 23281, 22161, 21850, + 23281, 22161, 22968, + 23283, 16159, 897, 8801, 10574, + 23284, + 23301, 7030, + 23301, 7031, 11513, 9783, 14030, + 23301, 7032, + 23301, 14921, 7461, 11513, 9783, 14030, + 23301, 14921, 7461, 11513, 15949, 14030, + 23301, 17289, 10574, + 23301, 17289, 10575, 11513, 6696, + 23301, 19563, 19993, 10574, + 23301, 19602, + 23303, 22511, 21732, + 23305, 15453, 22837, 12414, + 23315, 12708, + 23317, 7073, 10696, + 23317, 12922, + 23317, 13069, 2760, + 23317, 13069, 2761, 21003, 7056, + 23317, 13069, 3240, + 23317, 13069, 3536, + 23317, 13069, 3537, 21003, 7056, + 23317, 13069, 7036, + 23317, 13069, 7058, + 23317, 13069, 9358, + 23317, 13069, 11824, + 23317, 13069, 13150, + 23317, 13069, 14778, + 23317, 13069, 15116, + 23317, 13069, 15117, 21003, 7056, + 23317, 14911, 16531, 0, + 23317, 14911, 16531, 2, + 23317, 14911, 16531, 4, + 23317, 14911, 16531, 6, + 23317, 14911, 16531, 8, + 23317, 14911, 16531, 10, + 23317, 14911, 16531, 12, + 23317, 14911, 16531, 14, + 23317, 14911, 16531, 16, + 23317, 14911, 16531, 18, + 23317, 14911, 16531, 20, + 23317, 14911, 16531, 22, + 23317, 14911, 16531, 24, + 23317, 14911, 16531, 26, + 23317, 14911, 16531, 28, + 23317, 14911, 16531, 30, + 23317, 14911, 16531, 32, + 23317, 14911, 16531, 34, + 23317, 14911, 16531, 36, + 23317, 14911, 16531, 38, + 23317, 14911, 16531, 40, + 23317, 14911, 16531, 42, + 23317, 14911, 16531, 44, + 23317, 14911, 16531, 46, + 23317, 14911, 16531, 48, + 23317, 14911, 16531, 50, + 23317, 14911, 16531, 72, + 23317, 14911, 16531, 290, + 23317, 14911, 16531, 376, + 23317, 14911, 16531, 474, + 23317, 14911, 16531, 496, + 23317, 14911, 16531, 504, + 23317, 14911, 16531, 790, + 23317, 14911, 16531, 5542, + 23317, 16787, 3412, + 23317, 16787, 16110, + 23317, 16787, 17472, + 23317, 16787, 18148, + 23317, 16787, 19116, + 23317, 16787, 19966, + 23317, 16787, 20052, + 23317, 16787, 20368, + 23317, 16787, 20824, + 23317, 16787, 21854, + 23317, 17299, 5474, + 23317, 17835, 16531, 0, + 23317, 17835, 16531, 2, + 23317, 17835, 16531, 4, + 23317, 17835, 16531, 6, + 23317, 17835, 16531, 8, + 23317, 17835, 16531, 10, + 23317, 17835, 16531, 12, + 23317, 17835, 16531, 14, + 23317, 17835, 16531, 16, + 23317, 17835, 16531, 18, + 23317, 17835, 16531, 20, + 23317, 17835, 16531, 22, + 23317, 17835, 16531, 24, + 23317, 17835, 16531, 26, + 23317, 17835, 16531, 28, + 23317, 17835, 16531, 30, + 23317, 17835, 16531, 32, + 23317, 17835, 16531, 34, + 23317, 17835, 16531, 36, + 23317, 17835, 16531, 38, + 23317, 17835, 16531, 40, + 23317, 17835, 16531, 42, + 23317, 17835, 16531, 44, + 23317, 17835, 16531, 46, + 23317, 17835, 16531, 48, + 23317, 17835, 16531, 50, + 23317, 17835, 16531, 72, + 23317, 17835, 16531, 290, + 23317, 17835, 16531, 376, + 23317, 17835, 16531, 474, + 23317, 17835, 16531, 496, + 23317, 17835, 16531, 504, + 23317, 17835, 16531, 790, + 23317, 17835, 16531, 5542, + 23317, 23213, 510, + 23343, 6996, + 23355, 10575, 17534, + 23355, 10575, 19100, + 23355, 10575, 19408, + 23355, 10575, 19540, + 23355, 10575, 19586, + 23355, 15407, 10575, 8, + 23355, 15407, 10575, 16, + 23355, 15407, 10575, 28, + 23355, 15407, 10575, 40, + 23355, 15407, 10575, 58, + 23355, 15407, 10575, 72, + 23355, 15407, 10575, 96, + 23355, 15407, 10575, 314, + 23355, 15407, 10575, 706, + 23355, 15407, 10575, 19415, 34, + 23355, 15407, 10575, 19415, 608, + 23355, 15407, 10575, 25905, 8, + 23355, 16531, 0, + 23355, 16531, 8, + 23355, 16531, 16, + 23355, 16531, 28, + 23355, 16531, 40, + 23355, 16531, 58, + 23355, 16531, 72, + 23355, 16531, 96, + 23355, 16531, 108, + 23355, 16531, 126, + 23355, 16531, 150, + 23355, 16531, 248, + 23355, 16531, 272, + 23355, 16531, 314, + 23355, 16531, 344, + 23355, 16531, 358, + 23355, 16531, 394, + 23355, 16531, 426, + 23355, 16531, 466, + 23355, 16531, 548, + 23355, 16531, 598, + 23355, 16531, 614, + 23355, 16531, 648, + 23355, 16531, 706, + 23355, 16531, 714, + 23355, 16531, 778, + 23355, 16531, 1000, + 23355, 16531, 1116, + 23355, 16531, 1214, + 23355, 16531, 1236, + 23355, 16531, 1588, + 23355, 16531, 1918, + 23355, 16531, 2036, + 23355, 16531, 2278, + 23355, 16531, 2574, + 23355, 16531, 2624, + 23355, 16531, 2698, + 23355, 16531, 2830, + 23355, 16531, 3118, + 23355, 16531, 3212, + 23355, 16531, 3286, + 23355, 16531, 3422, + 23355, 16531, 3502, + 23355, 16531, 6572, + 23355, 16531, 11082, + 23355, 16531, 19415, 34, + 23355, 16531, 19415, 608, + 23355, 22478, + 23369, 15437, 17298, + 23372, + 23507, 12525, 19166, + 23507, 15453, 897, 12525, 19166, + 23507, 15453, 19166, + 23512, + 23515, 8808, + 23525, 10574, + 23533, 6996, + 23534, + 23555, 14932, + 23569, 10574, + 23577, 21100, + 23592, + 23598, + 23601, 16680, + 23604, + 23649, 883, 6091, 14911, 21820, + 23649, 883, 10723, 14911, 21820, + 23649, 883, 17797, 2784, + 23649, 883, 19217, 322, + 23649, 1433, 11510, + 23649, 1433, 12531, 17170, + 23649, 1433, 12531, 20340, + 23649, 2267, 13839, 9787, 15286, + 23649, 2267, 15287, 9787, 13838, + 23649, 3133, 17170, + 23649, 3133, 17768, + 23649, 3133, 20340, + 23649, 6828, + 23649, 6883, 7429, 9782, + 23649, 6883, 7429, 15948, + 23649, 6883, 9782, + 23649, 6883, 11503, 9782, + 23649, 6883, 15948, + 23649, 6883, 20698, + 23649, 6883, 20955, 20334, + 23649, 6997, 21205, 20511, 9441, 699, 529, 6700, + 23649, 6997, 21205, 20511, 9441, 699, 529, 6701, 19290, + 23649, 6997, 21205, 20511, 9441, 18173, 19290, + 23649, 7023, 22566, + 23649, 7023, 22568, + 23649, 7023, 22570, + 23649, 7023, 22572, + 23649, 7023, 22574, + 23649, 7073, 10696, + 23649, 7424, + 23649, 7460, + 23649, 7461, 3080, + 23649, 7461, 20335, 15938, + 23649, 7461, 36291, 10992, + 23649, 7461, 36291, 12944, + 23649, 7461, 36291, 20728, + 23649, 7461, 36325, 12944, + 23649, 7461, 36325, 20728, + 23649, 8317, 20224, + 23649, 8317, 20226, + 23649, 8317, 20228, + 23649, 8317, 20230, + 23649, 8317, 20232, + 23649, 8317, 20234, + 23649, 8317, 20236, + 23649, 8317, 23082, + 23649, 8329, 18921, 20842, + 23649, 9248, + 23649, 9441, 17906, + 23649, 9441, 18680, + 23649, 9441, 19436, + 23649, 9441, 20960, + 23649, 12567, 17170, + 23649, 12567, 17768, + 23649, 12567, 20340, + 23649, 12916, + 23649, 12922, + 23649, 13269, 13779, 17170, + 23649, 13269, 13779, 20340, + 23649, 13269, 14911, 17170, + 23649, 13269, 14911, 20340, + 23649, 13269, 22854, + 23649, 13413, 17170, + 23649, 13413, 17768, + 23649, 13413, 20340, + 23649, 14031, 8114, + 23649, 14031, 8115, 18172, + 23649, 14031, 8115, 20958, + 23649, 14031, 9783, 9784, + 23649, 14031, 9783, 9785, 11664, + 23649, 14031, 9783, 9785, 20958, + 23649, 14031, 9783, 15938, + 23649, 14031, 9783, 18172, + 23649, 14031, 9783, 20958, + 23649, 14031, 9783, 21790, + 23649, 14031, 9783, 21791, 11664, + 23649, 14031, 9783, 21791, 20958, + 23649, 14031, 13298, + 23649, 14031, 13299, 9782, + 23649, 14031, 13299, 20958, + 23649, 14031, 14916, + 23649, 14031, 14917, 9782, + 23649, 14031, 14917, 20958, + 23649, 14031, 15080, + 23649, 14031, 15081, 17274, + 23649, 14031, 15081, 18172, + 23649, 14031, 15949, 17906, + 23649, 14031, 15949, 18172, + 23649, 14031, 15949, 18680, + 23649, 14031, 17916, + 23649, 14031, 20961, 16094, + 23649, 14031, 20961, 17170, + 23649, 15070, + 23649, 15071, 521, 8328, + 23649, 15071, 521, 8329, 20334, + 23649, 15071, 521, 17430, + 23649, 15071, 521, 17431, 20334, + 23649, 15071, 6087, 8328, + 23649, 15071, 20334, + 23649, 15081, 15915, 2300, + 23649, 15081, 15915, 7520, + 23649, 15081, 15915, 16660, + 23649, 15189, 17170, + 23649, 15189, 17768, + 23649, 15189, 20340, + 23649, 15287, 6099, 19291, 7065, 1739, 16404, + 23649, 15839, 16128, + 23649, 15839, 16372, + 23649, 15915, 16980, + 23649, 15915, 17274, + 23649, 15915, 18680, + 23649, 16099, 20005, 699, 18680, + 23649, 16099, 20005, 6701, 18680, + 23649, 16099, 20005, 18681, 698, + 23649, 16099, 20005, 18681, 6700, + 23649, 16174, + 23649, 17261, 17170, + 23649, 17261, 17768, + 23649, 17261, 20340, + 23649, 17431, 3445, 17769, 8328, + 23649, 17431, 3445, 20849, 16383, 14030, + 23649, 17431, 14035, 17655, 12660, + 23649, 17431, 15901, 16383, 14030, + 23649, 17431, 15901, 20721, 2784, + 23649, 17431, 16383, 14031, 18990, + 23649, 17431, 18519, 8328, + 23649, 17431, 20721, 2785, 1452, + 23649, 18083, 7002, + 23649, 18083, 10604, + 23649, 18083, 13203, 14449, 10994, + 23649, 18083, 15080, + 23649, 18083, 18224, + 23649, 18083, 18990, + 23649, 18083, 21023, 13778, + 23649, 18083, 21023, 14910, + 23649, 18083, 24122, + 23649, 18083, 24123, 23040, + 23649, 19169, 13269, 23040, + 23649, 19169, 13779, 17170, + 23649, 19169, 13779, 20340, + 23649, 19169, 14911, 17170, + 23649, 19169, 14911, 20340, + 23649, 19169, 22854, + 23649, 19223, 17768, + 23649, 19223, 19228, + 23649, 20005, 20729, 698, + 23649, 20005, 20729, 6700, + 23649, 20005, 20729, 18680, + 23649, 20047, 17906, + 23649, 20047, 18680, + 23649, 20047, 20958, + 23649, 20094, + 23649, 20095, 487, 15118, + 23649, 20095, 7037, 18151, 17216, + 23649, 20095, 7037, 18151, 17217, 9782, + 23649, 20095, 9782, + 23649, 20095, 9783, 487, 15118, + 23649, 20095, 9783, 15119, 10564, + 23649, 20095, 9783, 15119, 18172, + 23649, 20095, 13594, + 23649, 20095, 13595, 10151, 16562, + 23649, 20095, 13595, 15118, + 23649, 20095, 13595, 15119, 9782, + 23649, 20095, 15119, 10564, + 23649, 20095, 15119, 18172, + 23649, 20095, 16661, 10151, 16562, + 23649, 20245, 7461, 9248, + 23649, 20245, 13054, + 23649, 20245, 13809, 16048, + 23649, 20245, 15184, + 23649, 20245, 15458, + 23649, 20245, 16328, + 23649, 20597, 22566, + 23649, 20597, 22568, + 23649, 20597, 22570, + 23649, 20597, 22572, + 23649, 20597, 22574, + 23649, 20597, 22576, + 23649, 20597, 22578, + 23649, 20597, 22580, + 23649, 20597, 23328, + 23649, 20597, 23330, + 23649, 20597, 23332, + 23649, 20597, 23334, + 23649, 20597, 23336, + 23649, 20597, 23338, + 23649, 20597, 23340, + 23649, 20653, 1739, 14942, + 23649, 20653, 1739, 21754, + 23649, 20653, 19291, 7065, 15428, + 23649, 21391, 698, + 23649, 21391, 6700, + 23649, 21391, 22452, + 23649, 21456, + 23649, 21457, 487, 15118, + 23649, 21457, 7059, 18151, 21136, + 23649, 21457, 13595, 15119, 12945, 15119, 16382, + 23649, 21457, 15119, 10564, + 23649, 21457, 15119, 18172, + 23649, 21457, 16661, 10151, 16563, 21136, + 23649, 21457, 16661, 10151, 16563, 21137, 10564, + 23649, 21458, + 23649, 21459, 7059, 18151, 21137, 6062, + 23649, 21459, 7464, + 23649, 21459, 10151, 698, + 23649, 21459, 10151, 6700, + 23649, 21459, 10151, 13594, + 23649, 21459, 10151, 15118, + 23649, 21459, 10151, 16562, + 23649, 21459, 10151, 16660, + 23649, 21459, 10151, 16661, 17007, 20202, + 23649, 21459, 10151, 16661, 21136, + 23649, 21459, 10151, 17007, 18372, + 23649, 21459, 13594, + 23649, 21459, 13595, 699, 16661, 16344, + 23649, 21459, 13595, 699, 16661, 16345, 15119, 10564, + 23649, 21459, 13595, 699, 16661, 16345, 15119, 21136, + 23649, 21459, 13595, 6062, + 23649, 21459, 13595, 6063, 9787, 16660, + 23649, 21459, 13595, 10151, 16562, + 23649, 21459, 13595, 15119, 7658, + 23649, 21459, 13595, 15119, 10564, + 23649, 21459, 13595, 15119, 10565, 6113, 6062, + 23649, 21459, 13595, 15119, 10565, 13595, 6062, + 23649, 21459, 13595, 15119, 10565, 13595, 13488, + 23649, 21459, 13595, 15119, 10565, 15119, 6062, + 23649, 21459, 13595, 15119, 10565, 15119, 19790, + 23649, 21459, 13595, 15119, 10565, 15119, 21136, + 23649, 21459, 13595, 15119, 12945, 15119, 15280, + 23649, 21459, 13595, 15119, 12945, 15119, 16382, + 23649, 21459, 13595, 15119, 15713, 323, 16661, 698, + 23649, 21459, 13595, 15119, 15713, 2785, 16661, 698, + 23649, 21459, 13595, 15119, 15938, + 23649, 21459, 13595, 15119, 15997, 16661, 698, + 23649, 21459, 13595, 15119, 16351, 16661, 698, + 23649, 21459, 13595, 15119, 16351, 16661, 16344, + 23649, 21459, 13595, 15119, 17881, 16661, 698, + 23649, 21459, 13595, 15119, 18173, 13595, 6062, + 23649, 21459, 13595, 15119, 18173, 13595, 20728, + 23649, 21459, 13595, 15119, 19750, + 23649, 21459, 13595, 15996, + 23649, 21459, 13595, 16344, + 23649, 21459, 13595, 16345, 2300, + 23649, 21459, 13595, 16345, 16661, 698, + 23649, 21459, 13595, 16345, 16661, 699, 15119, 10564, + 23649, 21459, 13595, 16660, + 23649, 21459, 13595, 16661, 699, 17217, 15119, 18172, + 23649, 21459, 13595, 16661, 6062, + 23649, 21459, 13595, 16661, 6063, 15119, 20728, + 23649, 21459, 13595, 16661, 10150, + 23649, 21459, 13595, 16661, 10151, 6062, + 23649, 21459, 13595, 16661, 10151, 21136, + 23649, 21459, 13595, 16661, 12935, 16562, + 23649, 21459, 13595, 16661, 15118, + 23649, 21459, 13595, 16661, 15119, 6062, + 23649, 21459, 13595, 16661, 15119, 15712, + 23649, 21459, 13595, 16661, 15119, 15713, 2784, + 23649, 21459, 13595, 16661, 15119, 15996, + 23649, 21459, 13595, 16661, 15119, 16344, + 23649, 21459, 13595, 16661, 15119, 16350, + 23649, 21459, 13595, 16661, 15119, 17880, + 23649, 21459, 13595, 16661, 15119, 21137, 16344, + 23649, 21459, 13595, 16661, 16344, + 23649, 21459, 13595, 16661, 16345, 17217, 15119, 10564, + 23649, 21459, 13595, 16661, 16562, + 23649, 21459, 13595, 16661, 17007, 20202, + 23649, 21459, 13595, 16661, 17930, + 23649, 21459, 13595, 16661, 17931, 15119, 10564, + 23649, 21459, 13595, 16661, 20729, 15119, 6062, + 23649, 21459, 13595, 16661, 21136, + 23649, 21459, 13595, 16661, 21137, 13595, 6062, + 23649, 21459, 13595, 16661, 21137, 15119, 10564, + 23649, 21459, 13595, 16661, 21137, 15119, 10565, 6062, + 23649, 21459, 13595, 16661, 21137, 15119, 10565, 21136, + 23649, 21459, 13595, 16661, 21137, 15119, 18172, + 23649, 21459, 13595, 16661, 21137, 15996, + 23649, 21459, 13595, 16661, 21137, 15997, 15119, 18172, + 23649, 21459, 13595, 16661, 21137, 16344, + 23649, 21459, 13595, 16661, 21137, 16345, 15119, 10564, + 23649, 21459, 13595, 16661, 21137, 16661, 6062, + 23649, 21459, 13595, 17007, 18372, + 23649, 21459, 15118, + 23649, 21459, 15119, 7464, + 23649, 21459, 15119, 9787, 3537, 18150, + 23649, 21459, 15119, 9787, 7059, 17007, 20202, + 23649, 21459, 15119, 10565, 6062, + 23649, 21459, 15119, 10565, 19790, + 23649, 21459, 15119, 10565, 21136, + 23649, 21459, 15119, 15281, 3537, 18150, + 23649, 21459, 15119, 15281, 7059, 18150, + 23649, 21459, 15119, 15281, 13595, 6062, + 23649, 21459, 15119, 15281, 15117, 18150, + 23649, 21459, 15119, 15281, 16563, 698, + 23649, 21459, 15119, 17769, 10151, 16562, + 23649, 21459, 15119, 17769, 13595, 16660, + 23649, 21459, 15119, 17769, 13595, 16661, 20728, + 23649, 21459, 15119, 17769, 16661, 10150, + 23649, 21459, 15119, 18172, + 23649, 21459, 16563, 698, + 23649, 21459, 16563, 6062, + 23649, 21459, 16563, 6700, + 23649, 21459, 16563, 6701, 16831, 17880, + 23649, 21459, 16563, 6701, 17035, 16000, + 23649, 21459, 16563, 6701, 17035, 20728, + 23649, 21459, 16563, 13594, + 23649, 21459, 16563, 13595, 15118, + 23649, 21459, 16563, 15118, + 23649, 21459, 16563, 17007, 18372, + 23649, 21459, 16563, 19303, 15118, + 23649, 21459, 16661, 698, + 23649, 21459, 16661, 699, 15119, 10564, + 23649, 21459, 16661, 6063, 9787, 13594, + 23649, 21459, 16661, 6700, + 23649, 21459, 16661, 10151, 16562, + 23649, 21459, 16661, 15119, 15713, 2785, 13595, 698, + 23649, 21459, 16661, 15119, 15713, 2785, 13595, 17930, + 23649, 21459, 16661, 15119, 15713, 13595, 698, + 23649, 21459, 16661, 15119, 15997, 13595, 698, + 23649, 21459, 16661, 15119, 16351, 13595, 698, + 23649, 21459, 16661, 15119, 16562, + 23649, 21459, 16661, 15119, 17881, 13595, 698, + 23649, 21459, 16661, 15119, 17881, 13595, 16344, + 23649, 21459, 16661, 16562, + 23649, 21459, 16661, 17007, 18372, + 23649, 21460, + 23649, 21461, 7037, 18151, 17216, + 23649, 21461, 7037, 18151, 17217, 6062, + 23649, 21461, 7037, 18151, 17217, 7059, 6062, + 23649, 21461, 7037, 18151, 17217, 15119, 18172, + 23649, 21461, 7037, 18151, 17217, 16344, + 23649, 21461, 7037, 18151, 17217, 16345, 487, 15118, + 23649, 21461, 7037, 18151, 17217, 16345, 15119, 10564, + 23649, 21461, 7059, 18150, + 23649, 21461, 7059, 18151, 6062, + 23649, 21461, 7059, 18151, 16344, + 23649, 21461, 7059, 18151, 21136, + 23649, 21461, 7059, 18151, 21137, 14944, + 23649, 21461, 7464, + 23649, 21461, 7465, 7037, 18151, 17216, + 23649, 21461, 7465, 7037, 18151, 17217, 6062, + 23649, 21461, 7465, 7037, 18151, 17217, 7059, 6062, + 23649, 21461, 7465, 15119, 10564, + 23649, 21461, 14945, 13595, 15119, 10564, + 23649, 21461, 14945, 15900, + 23649, 21461, 14945, 15901, 15119, 10564, + 23649, 21461, 14945, 15901, 15119, 10565, 6062, + 23649, 21461, 14945, 16562, + 23649, 21461, 15119, 6062, + 23649, 21461, 15119, 10564, + 23649, 21461, 15119, 18172, + 23649, 21461, 17769, 9823, 18128, + 23649, 21462, + 23649, 21463, 10151, 15118, + 23649, 21463, 13595, 10151, 16563, 322, + 23649, 21463, 13595, 10151, 16563, 2784, + 23649, 21463, 13595, 10151, 16563, 15280, + 23649, 21463, 16661, 10151, 16563, 21136, + 23649, 21463, 16661, 10151, 16563, 21137, 322, + 23649, 21463, 16661, 10151, 16563, 21137, 2784, + 23649, 21463, 16661, 15118, + 23649, 21463, 19750, + 23649, 21464, + 23649, 21465, 487, 15118, + 23649, 21465, 7037, 18151, 17216, + 23649, 21465, 10151, 16562, + 23649, 21465, 13594, + 23649, 21465, 15119, 10564, + 23649, 21465, 15119, 18172, + 23649, 21465, 16563, 698, + 23649, 21844, + 23649, 22121, 20653, 1739, 8982, + 23649, 22436, + 23649, 22451, 20653, 1739, 8982, + 23649, 22474, + 23649, 22475, 10151, 6701, 16661, 15119, 13595, 12934, + 23649, 22475, 10151, 16562, + 23649, 22475, 13594, + 23649, 22475, 13595, 10151, 16562, + 23649, 22475, 13595, 10151, 16563, 2784, + 23649, 22475, 13595, 15118, + 23649, 22475, 13595, 15119, 322, + 23649, 22475, 13595, 15119, 2784, + 23649, 22475, 13595, 16661, 10150, + 23649, 22475, 13595, 16661, 16562, + 23649, 22475, 16563, 698, + 23649, 22475, 16563, 13594, + 23649, 22475, 16563, 13595, 15119, 13595, 15118, + 23649, 22475, 16563, 13595, 15119, 13595, 15119, 2784, + 23649, 22475, 16661, 10151, 16562, + 23649, 22475, 16661, 10151, 16563, 322, + 23649, 22475, 16661, 10151, 16563, 2784, + 23649, 22476, + 23649, 22477, 487, 15118, + 23649, 22477, 7037, 18151, 17217, 9782, + 23649, 22477, 7059, 18151, 21136, + 23649, 22477, 9782, + 23649, 22477, 9783, 487, 15118, + 23649, 22477, 9783, 15119, 10564, + 23649, 22477, 9783, 15119, 18172, + 23649, 22477, 10150, + 23649, 22477, 10151, 6701, 13595, 15119, 7659, 16660, + 23649, 22477, 13594, + 23649, 22477, 13595, 10151, 16562, + 23649, 22477, 13595, 15118, + 23649, 22477, 13595, 15119, 9782, + 23649, 22477, 13595, 15119, 10564, + 23649, 22477, 13595, 15119, 13778, + 23649, 22477, 13595, 15119, 14910, + 23649, 22477, 13595, 16344, + 23649, 22477, 13595, 16661, 10150, + 23649, 22477, 13595, 16661, 10151, 21136, + 23649, 22477, 13595, 16661, 16562, + 23649, 22477, 14910, + 23649, 22477, 15119, 10564, + 23649, 22477, 15119, 10565, 20849, 13594, + 23649, 22477, 15119, 17769, 16661, 10150, + 23649, 22477, 16562, + 23649, 22477, 16563, 13594, + 23649, 22477, 16563, 13595, 15118, + 23649, 22477, 16563, 15118, + 23649, 22477, 16660, + 23649, 22477, 16661, 10151, 16562, + 23649, 23240, + 23649, 23241, 10151, 16562, + 23649, 23241, 13594, + 23649, 23241, 13595, 6062, + 23649, 23241, 13595, 10151, 16562, + 23649, 23241, 13595, 13488, + 23649, 23241, 13595, 16660, + 23649, 23241, 13595, 16661, 10150, + 23649, 23241, 13595, 16661, 12935, 16562, + 23649, 23241, 13595, 16661, 15118, + 23649, 23241, 13595, 16661, 16562, + 23649, 23241, 13595, 16661, 17930, + 23649, 23241, 16563, 698, + 23649, 23241, 16563, 13594, + 23649, 23241, 16661, 698, + 23649, 23241, 16661, 10151, 16562, + 23649, 23241, 16661, 10151, 16563, 6062, + 23649, 23522, + 23649, 25778, + 23649, 25779, 9782, + 23649, 25779, 13595, 10151, 16563, 520, + 23649, 25779, 16661, 10151, 16563, 520, + 23649, 26131, 699, 6701, 13778, + 23649, 26131, 699, 6701, 14910, + 23649, 26131, 699, 6701, 23041, 13778, + 23649, 26131, 699, 6701, 23041, 14910, + 23649, 26131, 699, 22854, + 23649, 26131, 6701, 22854, + 23649, 26131, 10565, 661, 10565, 20622, + 23649, 28087, 16001, 6060, + 23649, 28087, 20729, 19202, + 23649, 36227, 20902, + 23649, 36229, 921, 17207, 16094, + 23649, 36229, 921, 17207, 17170, + 23649, 36229, 921, 17207, 17434, + 23649, 36229, 19078, + 23649, 36229, 36307, 16094, + 23649, 36229, 36307, 17170, + 23649, 36229, 36307, 23040, + 23649, 36229, 36337, 16094, + 23649, 36229, 36337, 17170, + 23649, 36229, 36337, 23040, + 23649, 36241, 16000, + 23649, 36241, 19694, + 23649, 36241, 20728, + 23649, 36241, 20729, 16094, + 23649, 36241, 20729, 23040, + 23649, 36249, 5551, 13778, + 23649, 36249, 5551, 14910, + 23649, 36249, 5551, 16636, + 23649, 36249, 5551, 18494, + 23649, 36249, 17769, 5551, 13778, + 23649, 36249, 17769, 5551, 14910, + 23649, 36249, 17769, 5551, 16636, + 23649, 36249, 17769, 5551, 18494, + 23649, 36249, 17769, 19305, 13778, + 23649, 36249, 17769, 19305, 14910, + 23649, 36249, 17769, 19305, 16636, + 23649, 36249, 17769, 19305, 18494, + 23649, 36249, 19305, 13778, + 23649, 36249, 19305, 14910, + 23649, 36249, 19305, 16636, + 23649, 36249, 19305, 18494, + 23649, 36275, 19078, + 23649, 36275, 36307, 16094, + 23649, 36275, 36307, 17170, + 23649, 36275, 36307, 23040, + 23649, 36275, 36337, 16094, + 23649, 36275, 36337, 17170, + 23649, 36275, 36337, 23040, + 23649, 36281, 16000, + 23649, 36281, 20728, + 23649, 36281, 20729, 16094, + 23649, 36281, 20729, 23040, + 23649, 36287, 14932, + 23649, 36291, 921, 15939, 14911, 16094, + 23649, 36291, 921, 15939, 14911, 17170, + 23649, 36291, 921, 15939, 16637, 16094, + 23649, 36291, 921, 15939, 16637, 17170, + 23649, 36291, 1037, 13778, + 23649, 36291, 1037, 14910, + 23649, 36291, 1037, 16636, + 23649, 36291, 1908, + 23649, 36291, 6061, 13778, + 23649, 36291, 6061, 14910, + 23649, 36291, 6061, 16636, + 23649, 36291, 7695, 13778, + 23649, 36291, 7695, 14910, + 23649, 36291, 7695, 16636, + 23649, 36291, 7695, 18269, 12668, + 23649, 36291, 7695, 18269, 13297, 11468, + 23649, 36291, 8357, 13778, + 23649, 36291, 8357, 14910, + 23649, 36291, 8357, 14911, 16094, + 23649, 36291, 8357, 16636, + 23649, 36291, 8357, 18269, 12668, + 23649, 36291, 8357, 18269, 13297, 11468, + 23649, 36291, 11473, 12945, 16095, 13778, + 23649, 36291, 11473, 12945, 16095, 14910, + 23649, 36291, 11473, 12945, 16095, 16636, + 23649, 36291, 11473, 12945, 17435, 13778, + 23649, 36291, 11473, 12945, 17435, 14910, + 23649, 36291, 11473, 12945, 17435, 16636, + 23649, 36291, 11473, 18269, 12668, + 23649, 36291, 11473, 18269, 13297, 11468, + 23649, 36291, 11473, 19791, 9833, 13778, + 23649, 36291, 11473, 19791, 9833, 14910, + 23649, 36291, 11473, 19791, 9833, 16636, + 23649, 36291, 12659, 13778, + 23649, 36291, 12659, 14910, + 23649, 36291, 12659, 16636, + 23649, 36291, 12934, + 23649, 36291, 12945, 10943, 20728, + 23649, 36291, 12945, 18269, 12668, + 23649, 36291, 12945, 18269, 13297, 11468, + 23649, 36291, 12945, 18951, 13778, + 23649, 36291, 12945, 18951, 14910, + 23649, 36291, 12945, 18951, 16636, + 23649, 36291, 12945, 18951, 18494, + 23649, 36291, 12945, 23239, 13778, + 23649, 36291, 12945, 23239, 14910, + 23649, 36291, 12945, 23239, 16636, + 23649, 36291, 12945, 23239, 18494, + 23649, 36291, 12945, 25955, 15939, 14910, + 23649, 36291, 12945, 25955, 15939, 16636, + 23649, 36291, 14507, 13778, + 23649, 36291, 14507, 14910, + 23649, 36291, 14507, 16636, + 23649, 36291, 15475, 15939, 13297, 16094, + 23649, 36291, 15475, 15939, 13297, 17170, + 23649, 36291, 15975, 13778, + 23649, 36291, 15975, 14910, + 23649, 36291, 15975, 16636, + 23649, 36291, 15975, 20596, + 23649, 36291, 16001, 12935, 14910, + 23649, 36291, 16001, 12935, 16636, + 23649, 36291, 16095, 15475, 7042, + 23649, 36291, 16095, 20728, + 23649, 36291, 16095, 23040, + 23649, 36291, 16095, 23041, 15475, 7042, + 23649, 36291, 16175, 17883, 16094, + 23649, 36291, 16175, 17883, 17170, + 23649, 36291, 16175, 17906, + 23649, 36291, 17171, 15475, 7042, + 23649, 36291, 17171, 20729, 13778, + 23649, 36291, 17171, 20729, 14910, + 23649, 36291, 17171, 20729, 16636, + 23649, 36291, 17171, 20729, 18494, + 23649, 36291, 17435, 15475, 7042, + 23649, 36291, 17435, 20729, 20334, + 23649, 36291, 17435, 23040, + 23649, 36291, 17435, 23041, 15475, 7042, + 23649, 36291, 17625, 13778, + 23649, 36291, 17625, 14910, + 23649, 36291, 17625, 16636, + 23649, 36291, 19078, + 23649, 36307, 16094, + 23649, 36307, 16095, 18269, 12668, + 23649, 36307, 16095, 18269, 13297, 11468, + 23649, 36307, 17170, + 23649, 36307, 17171, 18269, 12668, + 23649, 36307, 17171, 18269, 13297, 11468, + 23649, 36307, 21002, + 23649, 36307, 23041, 18269, 12668, + 23649, 36307, 23041, 18269, 13297, 11468, + 23649, 36323, 14932, + 23649, 36325, 921, 15939, 18269, 11469, 13779, 16094, + 23649, 36325, 921, 15939, 18269, 11469, 13779, 17170, + 23649, 36325, 921, 15939, 18269, 11469, 14911, 16094, + 23649, 36325, 921, 15939, 18269, 11469, 14911, 17170, + 23649, 36325, 921, 15939, 18269, 11469, 16637, 16094, + 23649, 36325, 921, 15939, 18269, 11469, 16637, 17170, + 23649, 36325, 1037, 13778, + 23649, 36325, 1037, 14910, + 23649, 36325, 1037, 16636, + 23649, 36325, 1908, + 23649, 36325, 6060, + 23649, 36325, 7695, 14910, + 23649, 36325, 7695, 18269, 13271, 13779, 16094, + 23649, 36325, 7695, 18269, 13271, 14911, 16094, + 23649, 36325, 7695, 18269, 13271, 17435, 13779, 17434, + 23649, 36325, 7695, 18269, 13271, 17435, 14911, 17434, + 23649, 36325, 7695, 18269, 17849, 13779, 16094, + 23649, 36325, 7695, 18269, 17849, 13779, 17434, + 23649, 36325, 7695, 18269, 17849, 14911, 16094, + 23649, 36325, 7695, 18269, 17849, 14911, 17434, + 23649, 36325, 8357, 14910, + 23649, 36325, 8357, 18269, 13271, 13779, 16094, + 23649, 36325, 8357, 18269, 13271, 13779, 17170, + 23649, 36325, 8357, 18269, 13271, 14911, 16094, + 23649, 36325, 8357, 18269, 13271, 14911, 17170, + 23649, 36325, 8357, 18269, 17849, 13779, 16094, + 23649, 36325, 8357, 18269, 17849, 13779, 17170, + 23649, 36325, 8357, 18269, 17849, 14911, 16094, + 23649, 36325, 8357, 18269, 17849, 14911, 17170, + 23649, 36325, 11473, 13778, + 23649, 36325, 11473, 14910, + 23649, 36325, 11473, 14920, + 23649, 36325, 11473, 18269, 13271, 13778, + 23649, 36325, 11473, 18269, 13271, 14910, + 23649, 36325, 11473, 18269, 17849, 13778, + 23649, 36325, 11473, 18269, 17849, 14910, + 23649, 36325, 12658, + 23649, 36325, 12934, + 23649, 36325, 12945, 13778, + 23649, 36325, 12945, 14910, + 23649, 36325, 12945, 16636, + 23649, 36325, 12945, 18269, 13271, 13778, + 23649, 36325, 12945, 18269, 13271, 14910, + 23649, 36325, 12945, 18269, 17849, 13778, + 23649, 36325, 12945, 18269, 17849, 14910, + 23649, 36325, 12945, 18494, + 23649, 36325, 12945, 19714, + 23649, 36325, 14507, 13778, + 23649, 36325, 14507, 14910, + 23649, 36325, 14507, 16636, + 23649, 36325, 15475, 15939, 18269, 11469, 16094, + 23649, 36325, 15475, 15939, 18269, 11469, 17170, + 23649, 36325, 15975, 13778, + 23649, 36325, 15975, 14910, + 23649, 36325, 15975, 16636, + 23649, 36325, 16095, 15475, 7042, + 23649, 36325, 16095, 20728, + 23649, 36325, 16095, 23040, + 23649, 36325, 16095, 23041, 15475, 7042, + 23649, 36325, 16175, 17883, 18269, 11469, 16094, + 23649, 36325, 16175, 17883, 18269, 11469, 17170, + 23649, 36325, 16175, 17906, + 23649, 36325, 17171, 15475, 7042, + 23649, 36325, 17171, 20729, 13778, + 23649, 36325, 17171, 20729, 14910, + 23649, 36325, 17171, 20729, 16636, + 23649, 36325, 17171, 20729, 18494, + 23649, 36325, 17435, 15475, 7042, + 23649, 36325, 17435, 20729, 20334, + 23649, 36325, 17435, 23041, 15475, 7042, + 23649, 36325, 17435, 23041, 20334, + 23649, 36325, 17625, 13778, + 23649, 36325, 17625, 14910, + 23649, 36325, 17625, 16636, + 23649, 36325, 19079, 20454, + 23649, 36337, 16094, + 23649, 36337, 16095, 18269, 13270, + 23649, 36337, 16095, 18269, 17848, + 23649, 36337, 17170, + 23649, 36337, 17171, 18269, 13270, + 23649, 36337, 17171, 18269, 17848, + 23649, 36337, 23040, + 23649, 36337, 23041, 18269, 13270, + 23649, 36337, 23041, 18269, 17848, + 23662, + 23668, + 23679, 2760, + 23679, 3240, + 23679, 3536, + 23679, 7036, + 23679, 7058, + 23679, 8281, 23522, + 23679, 9358, + 23679, 9905, 10574, + 23679, 11824, + 23679, 13150, + 23679, 13783, 14911, 16531, 16, + 23679, 13783, 14911, 16531, 26, + 23679, 14004, + 23679, 14659, 23522, + 23679, 14778, + 23679, 15116, + 23679, 16121, 10574, + 23690, + 23705, 23882, + 23719, 10574, + 23721, 3059, 20858, + 23721, 7062, + 23721, 14656, + 23721, 14911, 3059, 20858, + 23721, 14911, 19518, + 23721, 15757, 6104, + 23721, 16117, 11472, + 23721, 17005, 1088, + 23721, 17043, 10480, + 23721, 18216, + 23721, 19518, + 23721, 20309, 19518, + 23721, 20859, 11513, 8281, 7429, 12524, + 23721, 20859, 11513, 14659, 7429, 12524, + 23725, 6996, + 23728, + 23731, 19979, 20066, + 23733, 14255, 6833, 5989, 12414, + 23733, 14255, 6833, 11371, 13473, 5989, 12414, + 23733, 14255, 6833, 13473, 5989, 12414, + 23733, 14255, 6833, 13807, 5989, 12414, + 23733, 14255, 6833, 16637, 5989, 12414, + 23733, 14255, 11489, 5989, 12414, + 23733, 14255, 11489, 11371, 13473, 5989, 12414, + 23733, 14255, 11489, 13473, 5989, 12414, + 23733, 14255, 11489, 13807, 5989, 12414, + 23733, 14255, 11489, 16637, 5989, 12414, + 23733, 14931, 6833, 5989, 12414, + 23733, 14931, 6833, 11371, 13473, 5989, 12414, + 23733, 14931, 6833, 13473, 5989, 12414, + 23733, 14931, 6833, 13807, 5989, 12414, + 23733, 14931, 6833, 16637, 5989, 12414, + 23733, 14931, 11489, 5989, 12414, + 23733, 14931, 11489, 11371, 13473, 5989, 12414, + 23733, 14931, 11489, 13473, 5989, 12414, + 23733, 14931, 11489, 13807, 5989, 12414, + 23733, 14931, 11489, 16637, 5989, 12414, + 23733, 19381, 5989, 12414, + 23733, 19381, 11371, 13473, 5989, 12414, + 23733, 19381, 13473, 5989, 12414, + 23733, 19381, 13807, 5989, 12414, + 23733, 19381, 16637, 5989, 12414, + 23733, 21349, 5989, 12414, + 23733, 21349, 11371, 13473, 5989, 12414, + 23733, 21349, 13473, 5989, 12414, + 23733, 21349, 13807, 5989, 12414, + 23733, 21349, 16637, 5989, 12414, + 23733, 21557, 5989, 12414, + 23733, 21557, 11371, 13473, 5989, 12414, + 23733, 21557, 13473, 5989, 12414, + 23733, 21557, 13807, 5989, 12414, + 23733, 21557, 16637, 5989, 12414, + 23733, 22837, 5989, 12414, + 23733, 22837, 11371, 13473, 5989, 12414, + 23733, 22837, 13473, 5989, 12414, + 23733, 22837, 13807, 5989, 12414, + 23733, 22837, 16637, 5989, 12414, + 23742, + 23745, 529, 21148, + 23751, 2825, 3413, 20829, 10574, + 23751, 2825, 14001, 10574, + 23751, 6371, 10184, + 23751, 13069, 2760, + 23751, 13069, 3240, + 23751, 13069, 3536, + 23751, 13069, 7036, + 23751, 13069, 7058, + 23751, 13069, 9358, + 23751, 13069, 11824, + 23751, 13069, 13150, + 23751, 13069, 14778, + 23751, 13069, 15116, + 23751, 16219, 10184, + 23757, 17299, 1493, 17508, + 23771, 17835, 4, + 23771, 17835, 14, + 23771, 17835, 16, + 23771, 17835, 34, + 23771, 17835, 50, + 23781, 46, + 23787, 10574, + 23787, 17586, + 23792, + 23795, 10575, 12720, + 23795, 10575, 12722, + 23795, 10575, 12724, + 23795, 10575, 12726, + 23795, 10575, 12728, + 23795, 10575, 12730, + 23795, 10575, 12732, + 23795, 10575, 12734, + 23795, 10575, 12736, + 23795, 10575, 12738, + 23795, 10575, 12740, + 23795, 10575, 12742, + 23795, 10575, 12744, + 23795, 10575, 12746, + 23795, 10575, 12748, + 23795, 10575, 12750, + 23795, 10575, 12752, + 23795, 10575, 12754, + 23795, 10575, 12756, + 23795, 10575, 12758, + 23795, 10575, 12760, + 23795, 10575, 12762, + 23795, 10575, 12764, + 23795, 10575, 12766, + 23795, 10575, 12768, + 23795, 10575, 12770, + 23795, 10575, 12772, + 23795, 10575, 12774, + 23795, 10575, 12776, + 23795, 10575, 12778, + 23795, 10575, 12780, + 23795, 10575, 12782, + 23795, 10575, 12784, + 23795, 10575, 12786, + 23795, 10575, 12788, + 23795, 10575, 12790, + 23795, 10575, 12792, + 23795, 10575, 12794, + 23795, 10575, 12796, + 23795, 10575, 12798, + 23795, 10575, 12800, + 23795, 10575, 12802, + 23795, 10575, 12804, + 23795, 10575, 12806, + 23795, 10575, 12808, + 23795, 10575, 12810, + 23795, 10575, 12812, + 23795, 10575, 12814, + 23795, 10575, 12816, + 23795, 10575, 12818, + 23795, 10575, 12820, + 23795, 10575, 12822, + 23795, 10575, 12824, + 23795, 10575, 12826, + 23795, 10575, 12828, + 23795, 10575, 12830, + 23795, 10575, 12832, + 23795, 10575, 12834, + 23795, 10575, 12836, + 23795, 10575, 12838, + 23795, 10575, 12840, + 23795, 10575, 12842, + 23795, 10575, 12844, + 23795, 10575, 12846, + 23795, 10575, 12848, + 23795, 10575, 12850, + 23795, 10575, 12852, + 23795, 10575, 12854, + 23795, 10575, 12856, + 23795, 10575, 12858, + 23795, 10575, 12860, + 23795, 10575, 12862, + 23795, 10575, 12864, + 23795, 10575, 12866, + 23795, 10575, 12868, + 23795, 10575, 12870, + 23795, 10575, 12872, + 23795, 10575, 12874, + 23795, 10575, 12876, + 23795, 10575, 12878, + 23795, 10575, 12880, + 23795, 10575, 12882, + 23795, 10575, 12884, + 23795, 10575, 12886, + 23795, 10575, 12888, + 23795, 10575, 12890, + 23795, 10575, 12892, + 23795, 10575, 12894, + 23795, 10575, 12896, + 23795, 10575, 12898, + 23795, 10575, 12900, + 23795, 10575, 12902, + 23795, 10575, 12904, + 23795, 10575, 12906, + 23795, 10575, 12908, + 23795, 10575, 12910, + 23795, 10575, 12912, + 23795, 10575, 15954, + 23795, 10575, 15956, + 23811, 1057, 20569, 6996, + 23811, 6996, + 23829, 20338, + 23837, 12525, 15938, + 23837, 12525, 17224, + 23837, 12525, 17988, + 23837, 15453, 15938, + 23837, 15453, 17224, + 23837, 15453, 17988, + 23840, + 23843, 5965, 12672, + 23845, 20641, 15453, 22837, 12414, + 23853, 529, 13177, 660, + 23853, 529, 19121, 13177, 660, + 23853, 529, 19121, 13177, 661, 11513, 1291, 12318, + 23853, 529, 19121, 13177, 661, 11513, 1291, 12319, 8280, + 23853, 529, 19121, 13177, 661, 11513, 1291, 16382, + 23853, 529, 21558, + 23853, 529, 22435, 660, + 23853, 529, 23050, + 23853, 897, 2643, 23050, + 23853, 897, 23651, 2643, 13177, 660, + 23853, 1057, 2643, 13177, 660, + 23853, 1057, 2643, 22435, 660, + 23853, 9787, 13177, 660, + 23853, 10574, + 23853, 11513, 1290, + 23853, 11513, 15939, 16382, + 23853, 11513, 20549, 8809, 12318, + 23853, 12319, 19107, 529, 13176, + 23853, 12319, 19107, 12319, 21558, + 23853, 12319, 19121, 13177, 12319, 21559, 12319, 19121, 13176, + 23853, 12319, 21559, 12319, 23193, 13176, + 23853, 12319, 22837, 12414, + 23853, 12319, 23193, 13177, 12319, 21558, + 23853, 13177, 661, 529, 21558, + 23853, 15805, 21558, + 23853, 15949, 125, 12944, + 23853, 15949, 125, 12945, 12319, 19121, 13176, + 23853, 23507, 21558, + 23859, 16680, + 23864, + 23868, + 23870, + 23882, + 23883, 11513, 1290, + 23883, 11513, 18529, 896, + 23883, 11513, 18778, + 23883, 12319, 965, 12319, 15282, + 23883, 12319, 15282, + 23883, 15805, 897, 16401, 11513, 23882, + 23909, 6101, 563, 17298, + 23909, 6101, 2835, 17298, + 23909, 6101, 3077, 17298, + 23909, 6101, 13069, 2760, + 23909, 6101, 13069, 3240, + 23909, 6101, 13069, 3536, + 23909, 6101, 13069, 7036, + 23909, 6101, 13069, 7058, + 23909, 6101, 13069, 9358, + 23909, 6101, 13069, 11824, + 23909, 6101, 13069, 13150, + 23909, 6101, 13069, 14778, + 23909, 6101, 13069, 15116, + 23909, 6101, 13653, 17298, + 23909, 6101, 14070, + 23909, 6101, 14911, 0, + 23909, 6101, 14911, 2, + 23909, 6101, 14911, 4, + 23909, 6101, 14911, 6, + 23909, 6101, 14911, 8, + 23909, 6101, 14911, 10, + 23909, 6101, 14911, 12, + 23909, 6101, 14911, 14, + 23909, 6101, 14911, 16, + 23909, 6101, 14911, 18, + 23909, 6101, 14911, 20, + 23909, 6101, 14911, 22, + 23909, 6101, 14911, 24, + 23909, 6101, 14911, 26, + 23909, 6101, 14911, 28, + 23909, 6101, 14911, 30, + 23909, 6101, 14911, 32, + 23909, 6101, 14911, 34, + 23909, 6101, 14911, 36, + 23909, 6101, 14911, 38, + 23909, 6101, 14911, 40, + 23909, 6101, 14911, 42, + 23909, 6101, 14911, 44, + 23909, 6101, 14911, 46, + 23909, 6101, 14911, 48, + 23909, 6101, 14911, 50, + 23909, 6101, 14911, 454, + 23909, 6101, 14911, 490, + 23909, 6101, 14911, 562, + 23909, 6101, 14911, 768, + 23909, 6101, 14911, 1120, + 23909, 6101, 14911, 1420, + 23909, 6101, 14911, 2834, + 23909, 6101, 14911, 2882, + 23909, 6101, 14911, 3076, + 23909, 6101, 14911, 3394, + 23909, 6101, 14911, 6064, + 23909, 6101, 14911, 7818, + 23909, 6101, 14911, 11826, + 23909, 6101, 14911, 12366, + 23909, 6101, 14911, 13050, + 23909, 6101, 14911, 13259, 14868, + 23909, 6101, 14911, 13332, + 23909, 6101, 14911, 13652, + 23909, 6101, 14911, 13770, + 23909, 6101, 14911, 14428, + 23909, 6101, 14911, 14868, + 23909, 6101, 14911, 15096, + 23909, 6101, 14911, 17992, + 23909, 6101, 14911, 18120, + 23909, 6101, 14911, 18754, + 23909, 6101, 14911, 19378, + 23909, 6101, 15097, 17298, + 23909, 6101, 16393, 563, 17298, + 23909, 6101, 16393, 2835, 17298, + 23909, 6101, 16393, 3077, 17298, + 23909, 6101, 16393, 13653, 17298, + 23909, 6101, 16393, 14070, + 23909, 6101, 16393, 14911, 0, + 23909, 6101, 16393, 14911, 2, + 23909, 6101, 16393, 14911, 4, + 23909, 6101, 16393, 14911, 6, + 23909, 6101, 16393, 14911, 8, + 23909, 6101, 16393, 14911, 10, + 23909, 6101, 16393, 14911, 12, + 23909, 6101, 16393, 14911, 14, + 23909, 6101, 16393, 14911, 16, + 23909, 6101, 16393, 14911, 18, + 23909, 6101, 16393, 14911, 20, + 23909, 6101, 16393, 14911, 22, + 23909, 6101, 16393, 14911, 24, + 23909, 6101, 16393, 14911, 26, + 23909, 6101, 16393, 14911, 28, + 23909, 6101, 16393, 14911, 30, + 23909, 6101, 16393, 14911, 32, + 23909, 6101, 16393, 14911, 34, + 23909, 6101, 16393, 14911, 36, + 23909, 6101, 16393, 14911, 38, + 23909, 6101, 16393, 14911, 40, + 23909, 6101, 16393, 14911, 42, + 23909, 6101, 16393, 14911, 44, + 23909, 6101, 16393, 14911, 46, + 23909, 6101, 16393, 14911, 48, + 23909, 6101, 16393, 14911, 50, + 23909, 6101, 16393, 14911, 454, + 23909, 6101, 16393, 14911, 490, + 23909, 6101, 16393, 14911, 562, + 23909, 6101, 16393, 14911, 768, + 23909, 6101, 16393, 14911, 1120, + 23909, 6101, 16393, 14911, 1420, + 23909, 6101, 16393, 14911, 2834, + 23909, 6101, 16393, 14911, 2882, + 23909, 6101, 16393, 14911, 3076, + 23909, 6101, 16393, 14911, 3394, + 23909, 6101, 16393, 14911, 6064, + 23909, 6101, 16393, 14911, 7818, + 23909, 6101, 16393, 14911, 11826, + 23909, 6101, 16393, 14911, 12366, + 23909, 6101, 16393, 14911, 13050, + 23909, 6101, 16393, 14911, 13259, 14868, + 23909, 6101, 16393, 14911, 13332, + 23909, 6101, 16393, 14911, 13652, + 23909, 6101, 16393, 14911, 13770, + 23909, 6101, 16393, 14911, 14428, + 23909, 6101, 16393, 14911, 14868, + 23909, 6101, 16393, 14911, 15096, + 23909, 6101, 16393, 14911, 18120, + 23909, 6101, 16393, 14911, 18754, + 23909, 6101, 16393, 14911, 19378, + 23909, 6101, 16393, 15097, 17298, + 23909, 6101, 16393, 17835, 0, + 23909, 6101, 16393, 17835, 2, + 23909, 6101, 16393, 17835, 4, + 23909, 6101, 16393, 17835, 6, + 23909, 6101, 16393, 17835, 8, + 23909, 6101, 16393, 17835, 10, + 23909, 6101, 16393, 17835, 12, + 23909, 6101, 16393, 17835, 14, + 23909, 6101, 16393, 17835, 16, + 23909, 6101, 16393, 17835, 18, + 23909, 6101, 16393, 17835, 20, + 23909, 6101, 16393, 17835, 22, + 23909, 6101, 16393, 17835, 24, + 23909, 6101, 16393, 17835, 26, + 23909, 6101, 16393, 17835, 28, + 23909, 6101, 16393, 17835, 30, + 23909, 6101, 16393, 17835, 32, + 23909, 6101, 16393, 17835, 34, + 23909, 6101, 16393, 17835, 36, + 23909, 6101, 16393, 17835, 38, + 23909, 6101, 16393, 17835, 40, + 23909, 6101, 16393, 17835, 42, + 23909, 6101, 16393, 17835, 44, + 23909, 6101, 16393, 17835, 46, + 23909, 6101, 16393, 17835, 48, + 23909, 6101, 16393, 17835, 50, + 23909, 6101, 16393, 17835, 454, + 23909, 6101, 16393, 17835, 490, + 23909, 6101, 16393, 17835, 562, + 23909, 6101, 16393, 17835, 768, + 23909, 6101, 16393, 17835, 1120, + 23909, 6101, 16393, 17835, 1420, + 23909, 6101, 16393, 17835, 2834, + 23909, 6101, 16393, 17835, 2882, + 23909, 6101, 16393, 17835, 3076, + 23909, 6101, 16393, 17835, 3394, + 23909, 6101, 16393, 17835, 6064, + 23909, 6101, 16393, 17835, 7818, + 23909, 6101, 16393, 17835, 11826, + 23909, 6101, 16393, 17835, 12366, + 23909, 6101, 16393, 17835, 13050, + 23909, 6101, 16393, 17835, 13332, + 23909, 6101, 16393, 17835, 13652, + 23909, 6101, 16393, 17835, 13770, + 23909, 6101, 16393, 17835, 14428, + 23909, 6101, 16393, 17835, 14868, + 23909, 6101, 16393, 17835, 15096, + 23909, 6101, 16393, 17835, 15097, 17298, + 23909, 6101, 16393, 17835, 18120, + 23909, 6101, 16393, 17835, 18754, + 23909, 6101, 16393, 17835, 19378, + 23909, 6101, 16393, 18121, 17298, + 23909, 6101, 16393, 18819, 23798, + 23909, 6101, 17089, 14911, 0, + 23909, 6101, 17089, 14911, 2, + 23909, 6101, 17089, 14911, 4, + 23909, 6101, 17089, 14911, 6, + 23909, 6101, 17089, 14911, 8, + 23909, 6101, 17089, 14911, 10, + 23909, 6101, 17089, 14911, 12, + 23909, 6101, 17089, 14911, 14, + 23909, 6101, 17089, 14911, 16, + 23909, 6101, 17089, 14911, 18, + 23909, 6101, 17089, 14911, 20, + 23909, 6101, 17089, 14911, 22, + 23909, 6101, 17089, 14911, 24, + 23909, 6101, 17089, 14911, 26, + 23909, 6101, 17089, 14911, 28, + 23909, 6101, 17089, 14911, 30, + 23909, 6101, 17089, 14911, 32, + 23909, 6101, 17089, 14911, 34, + 23909, 6101, 17089, 14911, 36, + 23909, 6101, 17089, 14911, 38, + 23909, 6101, 17089, 14911, 40, + 23909, 6101, 17089, 14911, 42, + 23909, 6101, 17089, 14911, 44, + 23909, 6101, 17089, 14911, 46, + 23909, 6101, 17089, 14911, 48, + 23909, 6101, 17089, 14911, 50, + 23909, 6101, 17089, 17835, 0, + 23909, 6101, 17089, 17835, 2, + 23909, 6101, 17089, 17835, 4, + 23909, 6101, 17089, 17835, 6, + 23909, 6101, 17089, 17835, 8, + 23909, 6101, 17089, 17835, 10, + 23909, 6101, 17089, 17835, 12, + 23909, 6101, 17089, 17835, 14, + 23909, 6101, 17089, 17835, 16, + 23909, 6101, 17089, 17835, 18, + 23909, 6101, 17089, 17835, 20, + 23909, 6101, 17089, 17835, 22, + 23909, 6101, 17089, 17835, 24, + 23909, 6101, 17089, 17835, 26, + 23909, 6101, 17089, 17835, 28, + 23909, 6101, 17089, 17835, 30, + 23909, 6101, 17089, 17835, 32, + 23909, 6101, 17089, 17835, 34, + 23909, 6101, 17089, 17835, 36, + 23909, 6101, 17089, 17835, 38, + 23909, 6101, 17089, 17835, 40, + 23909, 6101, 17089, 17835, 42, + 23909, 6101, 17089, 17835, 44, + 23909, 6101, 17089, 17835, 46, + 23909, 6101, 17089, 17835, 48, + 23909, 6101, 17089, 17835, 50, + 23909, 6101, 17835, 0, + 23909, 6101, 17835, 2, + 23909, 6101, 17835, 4, + 23909, 6101, 17835, 6, + 23909, 6101, 17835, 8, + 23909, 6101, 17835, 10, + 23909, 6101, 17835, 12, + 23909, 6101, 17835, 14, + 23909, 6101, 17835, 16, + 23909, 6101, 17835, 18, + 23909, 6101, 17835, 20, + 23909, 6101, 17835, 22, + 23909, 6101, 17835, 24, + 23909, 6101, 17835, 26, + 23909, 6101, 17835, 28, + 23909, 6101, 17835, 30, + 23909, 6101, 17835, 32, + 23909, 6101, 17835, 34, + 23909, 6101, 17835, 36, + 23909, 6101, 17835, 38, + 23909, 6101, 17835, 40, + 23909, 6101, 17835, 42, + 23909, 6101, 17835, 44, + 23909, 6101, 17835, 46, + 23909, 6101, 17835, 48, + 23909, 6101, 17835, 50, + 23909, 6101, 17835, 454, + 23909, 6101, 17835, 490, + 23909, 6101, 17835, 562, + 23909, 6101, 17835, 768, + 23909, 6101, 17835, 1120, + 23909, 6101, 17835, 1420, + 23909, 6101, 17835, 2834, + 23909, 6101, 17835, 2882, + 23909, 6101, 17835, 3076, + 23909, 6101, 17835, 3394, + 23909, 6101, 17835, 6064, + 23909, 6101, 17835, 7818, + 23909, 6101, 17835, 11826, + 23909, 6101, 17835, 12366, + 23909, 6101, 17835, 13050, + 23909, 6101, 17835, 13332, + 23909, 6101, 17835, 13652, + 23909, 6101, 17835, 13770, + 23909, 6101, 17835, 14428, + 23909, 6101, 17835, 14868, + 23909, 6101, 17835, 15096, + 23909, 6101, 17835, 15097, 17298, + 23909, 6101, 17835, 17992, + 23909, 6101, 17835, 18120, + 23909, 6101, 17835, 18754, + 23909, 6101, 17835, 19378, + 23909, 6101, 18121, 17298, + 23909, 6101, 18175, 14911, 0, + 23909, 6101, 18175, 14911, 2, + 23909, 6101, 18175, 14911, 4, + 23909, 6101, 18175, 14911, 6, + 23909, 6101, 18175, 14911, 8, + 23909, 6101, 18175, 14911, 10, + 23909, 6101, 18175, 14911, 12, + 23909, 6101, 18175, 14911, 14, + 23909, 6101, 18175, 14911, 16, + 23909, 6101, 18175, 14911, 18, + 23909, 6101, 18175, 14911, 20, + 23909, 6101, 18175, 14911, 22, + 23909, 6101, 18175, 14911, 24, + 23909, 6101, 18175, 14911, 26, + 23909, 6101, 18175, 14911, 28, + 23909, 6101, 18175, 14911, 30, + 23909, 6101, 18175, 14911, 32, + 23909, 6101, 18175, 14911, 34, + 23909, 6101, 18175, 14911, 36, + 23909, 6101, 18175, 14911, 38, + 23909, 6101, 18175, 14911, 40, + 23909, 6101, 18175, 14911, 42, + 23909, 6101, 18175, 14911, 44, + 23909, 6101, 18175, 14911, 46, + 23909, 6101, 18175, 14911, 48, + 23909, 6101, 18175, 14911, 50, + 23909, 6101, 18175, 17835, 0, + 23909, 6101, 18175, 17835, 2, + 23909, 6101, 18175, 17835, 4, + 23909, 6101, 18175, 17835, 6, + 23909, 6101, 18175, 17835, 8, + 23909, 6101, 18175, 17835, 10, + 23909, 6101, 18175, 17835, 12, + 23909, 6101, 18175, 17835, 14, + 23909, 6101, 18175, 17835, 16, + 23909, 6101, 18175, 17835, 18, + 23909, 6101, 18175, 17835, 20, + 23909, 6101, 18175, 17835, 22, + 23909, 6101, 18175, 17835, 24, + 23909, 6101, 18175, 17835, 26, + 23909, 6101, 18175, 17835, 28, + 23909, 6101, 18175, 17835, 30, + 23909, 6101, 18175, 17835, 32, + 23909, 6101, 18175, 17835, 34, + 23909, 6101, 18175, 17835, 36, + 23909, 6101, 18175, 17835, 38, + 23909, 6101, 18175, 17835, 40, + 23909, 6101, 18175, 17835, 42, + 23909, 6101, 18175, 17835, 44, + 23909, 6101, 18175, 17835, 46, + 23909, 6101, 18175, 17835, 48, + 23909, 6101, 18175, 17835, 50, + 23909, 6101, 18819, 23798, + 23909, 8281, 12379, 17810, + 23909, 8281, 15453, 17225, 17810, + 23909, 8281, 15453, 20847, 14811, 17810, + 23909, 8281, 16095, 12379, 17810, + 23909, 8281, 21409, 23522, + 23909, 14659, 12379, 17810, + 23909, 14659, 15453, 17225, 17810, + 23909, 14659, 15453, 20847, 14811, 17810, + 23909, 14659, 16095, 12379, 17810, + 23909, 14659, 21409, 23522, + 23909, 16393, 563, 17298, + 23909, 16393, 2835, 17298, + 23909, 16393, 3077, 17298, + 23909, 16393, 13653, 17298, + 23909, 16393, 14070, + 23909, 16393, 14911, 0, + 23909, 16393, 14911, 2, + 23909, 16393, 14911, 4, + 23909, 16393, 14911, 6, + 23909, 16393, 14911, 8, + 23909, 16393, 14911, 10, + 23909, 16393, 14911, 12, + 23909, 16393, 14911, 16, + 23909, 16393, 14911, 18, + 23909, 16393, 14911, 20, + 23909, 16393, 14911, 22, + 23909, 16393, 14911, 24, + 23909, 16393, 14911, 26, + 23909, 16393, 14911, 28, + 23909, 16393, 14911, 30, + 23909, 16393, 14911, 32, + 23909, 16393, 14911, 34, + 23909, 16393, 14911, 36, + 23909, 16393, 14911, 38, + 23909, 16393, 14911, 40, + 23909, 16393, 14911, 42, + 23909, 16393, 14911, 44, + 23909, 16393, 14911, 46, + 23909, 16393, 14911, 48, + 23909, 16393, 14911, 50, + 23909, 16393, 14911, 454, + 23909, 16393, 14911, 490, + 23909, 16393, 14911, 562, + 23909, 16393, 14911, 768, + 23909, 16393, 14911, 1120, + 23909, 16393, 14911, 1420, + 23909, 16393, 14911, 2834, + 23909, 16393, 14911, 2882, + 23909, 16393, 14911, 3076, + 23909, 16393, 14911, 3394, + 23909, 16393, 14911, 6064, + 23909, 16393, 14911, 7818, + 23909, 16393, 14911, 11826, + 23909, 16393, 14911, 12366, + 23909, 16393, 14911, 13050, + 23909, 16393, 14911, 13259, 14868, + 23909, 16393, 14911, 13332, + 23909, 16393, 14911, 13652, + 23909, 16393, 14911, 13770, + 23909, 16393, 14911, 14428, + 23909, 16393, 14911, 14868, + 23909, 16393, 14911, 15096, + 23909, 16393, 14911, 18019, 16, + 23909, 16393, 14911, 18019, 18, + 23909, 16393, 14911, 18120, + 23909, 16393, 14911, 18754, + 23909, 16393, 14911, 19378, + 23909, 16393, 15097, 17298, + 23909, 16393, 17835, 0, + 23909, 16393, 17835, 2, + 23909, 16393, 17835, 4, + 23909, 16393, 17835, 6, + 23909, 16393, 17835, 8, + 23909, 16393, 17835, 10, + 23909, 16393, 17835, 12, + 23909, 16393, 17835, 14, + 23909, 16393, 17835, 16, + 23909, 16393, 17835, 18, + 23909, 16393, 17835, 20, + 23909, 16393, 17835, 22, + 23909, 16393, 17835, 24, + 23909, 16393, 17835, 26, + 23909, 16393, 17835, 28, + 23909, 16393, 17835, 30, + 23909, 16393, 17835, 32, + 23909, 16393, 17835, 34, + 23909, 16393, 17835, 36, + 23909, 16393, 17835, 38, + 23909, 16393, 17835, 40, + 23909, 16393, 17835, 42, + 23909, 16393, 17835, 44, + 23909, 16393, 17835, 46, + 23909, 16393, 17835, 48, + 23909, 16393, 17835, 50, + 23909, 16393, 17835, 454, + 23909, 16393, 17835, 490, + 23909, 16393, 17835, 562, + 23909, 16393, 17835, 768, + 23909, 16393, 17835, 1120, + 23909, 16393, 17835, 1420, + 23909, 16393, 17835, 2834, + 23909, 16393, 17835, 2882, + 23909, 16393, 17835, 3076, + 23909, 16393, 17835, 3394, + 23909, 16393, 17835, 6064, + 23909, 16393, 17835, 7818, + 23909, 16393, 17835, 11826, + 23909, 16393, 17835, 12366, + 23909, 16393, 17835, 13050, + 23909, 16393, 17835, 13332, + 23909, 16393, 17835, 13652, + 23909, 16393, 17835, 13770, + 23909, 16393, 17835, 14428, + 23909, 16393, 17835, 14868, + 23909, 16393, 17835, 15096, + 23909, 16393, 17835, 15097, 17298, + 23909, 16393, 17835, 18120, + 23909, 16393, 17835, 18754, + 23909, 16393, 17835, 19378, + 23909, 16393, 18121, 17298, + 23909, 16393, 18819, 23798, + 23909, 17037, 19790, + 23909, 17089, 14911, 0, + 23909, 17089, 14911, 2, + 23909, 17089, 14911, 4, + 23909, 17089, 14911, 6, + 23909, 17089, 14911, 10, + 23909, 17089, 14911, 14, + 23909, 17089, 14911, 16, + 23909, 17089, 14911, 18, + 23909, 17089, 14911, 20, + 23909, 17089, 14911, 22, + 23909, 17089, 14911, 24, + 23909, 17089, 14911, 26, + 23909, 17089, 14911, 30, + 23909, 17089, 14911, 32, + 23909, 17089, 14911, 34, + 23909, 17089, 14911, 36, + 23909, 17089, 14911, 38, + 23909, 17089, 14911, 40, + 23909, 17089, 14911, 42, + 23909, 17089, 14911, 44, + 23909, 17089, 14911, 46, + 23909, 17089, 14911, 48, + 23909, 17089, 14911, 50, + 23909, 17089, 17835, 0, + 23909, 17089, 17835, 4, + 23909, 17089, 17835, 6, + 23909, 17089, 17835, 12, + 23909, 17089, 17835, 18, + 23909, 17089, 17835, 20, + 23909, 17089, 17835, 26, + 23909, 17089, 17835, 28, + 23909, 17089, 17835, 30, + 23909, 17089, 17835, 32, + 23909, 17089, 17835, 36, + 23909, 17089, 17835, 38, + 23909, 17089, 17835, 40, + 23909, 17089, 17835, 42, + 23909, 17089, 17835, 44, + 23909, 17089, 17835, 46, + 23909, 17089, 17835, 48, + 23909, 17089, 17835, 50, + 23909, 18137, 19790, + 23909, 18175, 14911, 0, + 23909, 18175, 14911, 2, + 23909, 18175, 14911, 4, + 23909, 18175, 14911, 6, + 23909, 18175, 14911, 8, + 23909, 18175, 14911, 10, + 23909, 18175, 14911, 12, + 23909, 18175, 14911, 14, + 23909, 18175, 14911, 16, + 23909, 18175, 14911, 18, + 23909, 18175, 14911, 20, + 23909, 18175, 14911, 22, + 23909, 18175, 14911, 24, + 23909, 18175, 14911, 26, + 23909, 18175, 14911, 28, + 23909, 18175, 14911, 30, + 23909, 18175, 14911, 32, + 23909, 18175, 14911, 34, + 23909, 18175, 14911, 36, + 23909, 18175, 14911, 38, + 23909, 18175, 14911, 40, + 23909, 18175, 14911, 42, + 23909, 18175, 14911, 44, + 23909, 18175, 14911, 46, + 23909, 18175, 14911, 48, + 23909, 18175, 14911, 50, + 23909, 18175, 17835, 0, + 23909, 18175, 17835, 2, + 23909, 18175, 17835, 6, + 23909, 18175, 17835, 8, + 23909, 18175, 17835, 10, + 23909, 18175, 17835, 12, + 23909, 18175, 17835, 18, + 23909, 18175, 17835, 20, + 23909, 18175, 17835, 22, + 23909, 18175, 17835, 24, + 23909, 18175, 17835, 26, + 23909, 18175, 17835, 28, + 23909, 18175, 17835, 30, + 23909, 18175, 17835, 32, + 23909, 18175, 17835, 36, + 23909, 18175, 17835, 38, + 23909, 18175, 17835, 40, + 23909, 18175, 17835, 42, + 23909, 18175, 17835, 44, + 23909, 18175, 17835, 46, + 23909, 18175, 17835, 48, + 23909, 21605, 13069, 2760, + 23909, 21605, 13069, 3240, + 23909, 21605, 13069, 3536, + 23909, 21605, 13069, 7036, + 23909, 21605, 13069, 7058, + 23909, 21605, 13069, 9358, + 23909, 21605, 13069, 11824, + 23909, 21605, 13069, 13150, + 23909, 21605, 13069, 14778, + 23909, 21605, 13069, 15116, + 23909, 21605, 14911, 0, + 23909, 21605, 14911, 2, + 23909, 21605, 14911, 4, + 23909, 21605, 14911, 6, + 23909, 21605, 14911, 8, + 23909, 21605, 14911, 10, + 23909, 21605, 14911, 12, + 23909, 21605, 14911, 14, + 23909, 21605, 14911, 16, + 23909, 21605, 14911, 18, + 23909, 21605, 14911, 20, + 23909, 21605, 14911, 22, + 23909, 21605, 14911, 24, + 23909, 21605, 14911, 26, + 23909, 21605, 14911, 28, + 23909, 21605, 14911, 30, + 23909, 21605, 14911, 32, + 23909, 21605, 14911, 34, + 23909, 21605, 14911, 36, + 23909, 21605, 14911, 38, + 23909, 21605, 14911, 40, + 23909, 21605, 14911, 42, + 23909, 21605, 14911, 44, + 23909, 21605, 14911, 46, + 23909, 21605, 14911, 48, + 23909, 21605, 14911, 50, + 23909, 21605, 17835, 0, + 23909, 21605, 17835, 2, + 23909, 21605, 17835, 4, + 23909, 21605, 17835, 6, + 23909, 21605, 17835, 8, + 23909, 21605, 17835, 10, + 23909, 21605, 17835, 12, + 23909, 21605, 17835, 14, + 23909, 21605, 17835, 16, + 23909, 21605, 17835, 18, + 23909, 21605, 17835, 20, + 23909, 21605, 17835, 22, + 23909, 21605, 17835, 24, + 23909, 21605, 17835, 26, + 23909, 21605, 17835, 28, + 23909, 21605, 17835, 30, + 23909, 21605, 17835, 32, + 23909, 21605, 17835, 34, + 23909, 21605, 17835, 36, + 23909, 21605, 17835, 38, + 23909, 21605, 17835, 40, + 23909, 21605, 17835, 42, + 23909, 21605, 17835, 44, + 23909, 21605, 17835, 46, + 23909, 21605, 17835, 48, + 23909, 21605, 17835, 50, + 23909, 22841, 6101, 563, 17298, + 23909, 22841, 6101, 2835, 17298, + 23909, 22841, 6101, 3077, 17298, + 23909, 22841, 6101, 13069, 2760, + 23909, 22841, 6101, 13069, 3240, + 23909, 22841, 6101, 13069, 3536, + 23909, 22841, 6101, 13069, 7036, + 23909, 22841, 6101, 13069, 7058, + 23909, 22841, 6101, 13069, 9358, + 23909, 22841, 6101, 13069, 11824, + 23909, 22841, 6101, 13069, 13150, + 23909, 22841, 6101, 13069, 14778, + 23909, 22841, 6101, 13069, 15116, + 23909, 22841, 6101, 13653, 17298, + 23909, 22841, 6101, 14070, + 23909, 22841, 6101, 14911, 0, + 23909, 22841, 6101, 14911, 2, + 23909, 22841, 6101, 14911, 4, + 23909, 22841, 6101, 14911, 6, + 23909, 22841, 6101, 14911, 8, + 23909, 22841, 6101, 14911, 10, + 23909, 22841, 6101, 14911, 12, + 23909, 22841, 6101, 14911, 14, + 23909, 22841, 6101, 14911, 16, + 23909, 22841, 6101, 14911, 18, + 23909, 22841, 6101, 14911, 20, + 23909, 22841, 6101, 14911, 22, + 23909, 22841, 6101, 14911, 24, + 23909, 22841, 6101, 14911, 26, + 23909, 22841, 6101, 14911, 28, + 23909, 22841, 6101, 14911, 30, + 23909, 22841, 6101, 14911, 32, + 23909, 22841, 6101, 14911, 34, + 23909, 22841, 6101, 14911, 36, + 23909, 22841, 6101, 14911, 38, + 23909, 22841, 6101, 14911, 40, + 23909, 22841, 6101, 14911, 42, + 23909, 22841, 6101, 14911, 44, + 23909, 22841, 6101, 14911, 46, + 23909, 22841, 6101, 14911, 48, + 23909, 22841, 6101, 14911, 50, + 23909, 22841, 6101, 14911, 454, + 23909, 22841, 6101, 14911, 490, + 23909, 22841, 6101, 14911, 562, + 23909, 22841, 6101, 14911, 768, + 23909, 22841, 6101, 14911, 1120, + 23909, 22841, 6101, 14911, 1420, + 23909, 22841, 6101, 14911, 2834, + 23909, 22841, 6101, 14911, 2882, + 23909, 22841, 6101, 14911, 3076, + 23909, 22841, 6101, 14911, 3394, + 23909, 22841, 6101, 14911, 6064, + 23909, 22841, 6101, 14911, 7818, + 23909, 22841, 6101, 14911, 11826, + 23909, 22841, 6101, 14911, 12366, + 23909, 22841, 6101, 14911, 13050, + 23909, 22841, 6101, 14911, 13259, 14868, + 23909, 22841, 6101, 14911, 13332, + 23909, 22841, 6101, 14911, 13652, + 23909, 22841, 6101, 14911, 13770, + 23909, 22841, 6101, 14911, 14428, + 23909, 22841, 6101, 14911, 14868, + 23909, 22841, 6101, 14911, 15096, + 23909, 22841, 6101, 14911, 18120, + 23909, 22841, 6101, 14911, 18754, + 23909, 22841, 6101, 14911, 19378, + 23909, 22841, 6101, 15097, 17298, + 23909, 22841, 6101, 16393, 563, 17298, + 23909, 22841, 6101, 16393, 2835, 17298, + 23909, 22841, 6101, 16393, 3077, 17298, + 23909, 22841, 6101, 16393, 13653, 17298, + 23909, 22841, 6101, 16393, 14070, + 23909, 22841, 6101, 16393, 14911, 0, + 23909, 22841, 6101, 16393, 14911, 2, + 23909, 22841, 6101, 16393, 14911, 4, + 23909, 22841, 6101, 16393, 14911, 6, + 23909, 22841, 6101, 16393, 14911, 8, + 23909, 22841, 6101, 16393, 14911, 10, + 23909, 22841, 6101, 16393, 14911, 12, + 23909, 22841, 6101, 16393, 14911, 14, + 23909, 22841, 6101, 16393, 14911, 16, + 23909, 22841, 6101, 16393, 14911, 18, + 23909, 22841, 6101, 16393, 14911, 20, + 23909, 22841, 6101, 16393, 14911, 22, + 23909, 22841, 6101, 16393, 14911, 24, + 23909, 22841, 6101, 16393, 14911, 26, + 23909, 22841, 6101, 16393, 14911, 28, + 23909, 22841, 6101, 16393, 14911, 30, + 23909, 22841, 6101, 16393, 14911, 32, + 23909, 22841, 6101, 16393, 14911, 34, + 23909, 22841, 6101, 16393, 14911, 36, + 23909, 22841, 6101, 16393, 14911, 38, + 23909, 22841, 6101, 16393, 14911, 40, + 23909, 22841, 6101, 16393, 14911, 42, + 23909, 22841, 6101, 16393, 14911, 44, + 23909, 22841, 6101, 16393, 14911, 46, + 23909, 22841, 6101, 16393, 14911, 48, + 23909, 22841, 6101, 16393, 14911, 50, + 23909, 22841, 6101, 16393, 14911, 454, + 23909, 22841, 6101, 16393, 14911, 490, + 23909, 22841, 6101, 16393, 14911, 562, + 23909, 22841, 6101, 16393, 14911, 768, + 23909, 22841, 6101, 16393, 14911, 1120, + 23909, 22841, 6101, 16393, 14911, 1420, + 23909, 22841, 6101, 16393, 14911, 2834, + 23909, 22841, 6101, 16393, 14911, 2882, + 23909, 22841, 6101, 16393, 14911, 3076, + 23909, 22841, 6101, 16393, 14911, 3394, + 23909, 22841, 6101, 16393, 14911, 6064, + 23909, 22841, 6101, 16393, 14911, 7818, + 23909, 22841, 6101, 16393, 14911, 11826, + 23909, 22841, 6101, 16393, 14911, 12366, + 23909, 22841, 6101, 16393, 14911, 13050, + 23909, 22841, 6101, 16393, 14911, 13259, 14868, + 23909, 22841, 6101, 16393, 14911, 13332, + 23909, 22841, 6101, 16393, 14911, 13652, + 23909, 22841, 6101, 16393, 14911, 13770, + 23909, 22841, 6101, 16393, 14911, 14428, + 23909, 22841, 6101, 16393, 14911, 14868, + 23909, 22841, 6101, 16393, 14911, 15096, + 23909, 22841, 6101, 16393, 14911, 18120, + 23909, 22841, 6101, 16393, 14911, 18754, + 23909, 22841, 6101, 16393, 14911, 19378, + 23909, 22841, 6101, 16393, 15097, 17298, + 23909, 22841, 6101, 16393, 17835, 0, + 23909, 22841, 6101, 16393, 17835, 2, + 23909, 22841, 6101, 16393, 17835, 4, + 23909, 22841, 6101, 16393, 17835, 6, + 23909, 22841, 6101, 16393, 17835, 8, + 23909, 22841, 6101, 16393, 17835, 10, + 23909, 22841, 6101, 16393, 17835, 12, + 23909, 22841, 6101, 16393, 17835, 14, + 23909, 22841, 6101, 16393, 17835, 16, + 23909, 22841, 6101, 16393, 17835, 18, + 23909, 22841, 6101, 16393, 17835, 20, + 23909, 22841, 6101, 16393, 17835, 22, + 23909, 22841, 6101, 16393, 17835, 24, + 23909, 22841, 6101, 16393, 17835, 26, + 23909, 22841, 6101, 16393, 17835, 28, + 23909, 22841, 6101, 16393, 17835, 30, + 23909, 22841, 6101, 16393, 17835, 32, + 23909, 22841, 6101, 16393, 17835, 34, + 23909, 22841, 6101, 16393, 17835, 36, + 23909, 22841, 6101, 16393, 17835, 38, + 23909, 22841, 6101, 16393, 17835, 40, + 23909, 22841, 6101, 16393, 17835, 42, + 23909, 22841, 6101, 16393, 17835, 44, + 23909, 22841, 6101, 16393, 17835, 46, + 23909, 22841, 6101, 16393, 17835, 48, + 23909, 22841, 6101, 16393, 17835, 50, + 23909, 22841, 6101, 16393, 17835, 454, + 23909, 22841, 6101, 16393, 17835, 490, + 23909, 22841, 6101, 16393, 17835, 562, + 23909, 22841, 6101, 16393, 17835, 768, + 23909, 22841, 6101, 16393, 17835, 1120, + 23909, 22841, 6101, 16393, 17835, 1420, + 23909, 22841, 6101, 16393, 17835, 2834, + 23909, 22841, 6101, 16393, 17835, 2882, + 23909, 22841, 6101, 16393, 17835, 3076, + 23909, 22841, 6101, 16393, 17835, 3394, + 23909, 22841, 6101, 16393, 17835, 6064, + 23909, 22841, 6101, 16393, 17835, 7818, + 23909, 22841, 6101, 16393, 17835, 11826, + 23909, 22841, 6101, 16393, 17835, 12366, + 23909, 22841, 6101, 16393, 17835, 13050, + 23909, 22841, 6101, 16393, 17835, 13332, + 23909, 22841, 6101, 16393, 17835, 13652, + 23909, 22841, 6101, 16393, 17835, 13770, + 23909, 22841, 6101, 16393, 17835, 14428, + 23909, 22841, 6101, 16393, 17835, 14868, + 23909, 22841, 6101, 16393, 17835, 15096, + 23909, 22841, 6101, 16393, 17835, 15097, 17298, + 23909, 22841, 6101, 16393, 17835, 18120, + 23909, 22841, 6101, 16393, 17835, 18754, + 23909, 22841, 6101, 16393, 17835, 19378, + 23909, 22841, 6101, 16393, 18121, 17298, + 23909, 22841, 6101, 16393, 18819, 23798, + 23909, 22841, 6101, 17835, 0, + 23909, 22841, 6101, 17835, 2, + 23909, 22841, 6101, 17835, 4, + 23909, 22841, 6101, 17835, 6, + 23909, 22841, 6101, 17835, 8, + 23909, 22841, 6101, 17835, 10, + 23909, 22841, 6101, 17835, 12, + 23909, 22841, 6101, 17835, 14, + 23909, 22841, 6101, 17835, 16, + 23909, 22841, 6101, 17835, 18, + 23909, 22841, 6101, 17835, 20, + 23909, 22841, 6101, 17835, 22, + 23909, 22841, 6101, 17835, 24, + 23909, 22841, 6101, 17835, 26, + 23909, 22841, 6101, 17835, 28, + 23909, 22841, 6101, 17835, 30, + 23909, 22841, 6101, 17835, 32, + 23909, 22841, 6101, 17835, 34, + 23909, 22841, 6101, 17835, 36, + 23909, 22841, 6101, 17835, 38, + 23909, 22841, 6101, 17835, 40, + 23909, 22841, 6101, 17835, 42, + 23909, 22841, 6101, 17835, 44, + 23909, 22841, 6101, 17835, 46, + 23909, 22841, 6101, 17835, 48, + 23909, 22841, 6101, 17835, 50, + 23909, 22841, 6101, 17835, 454, + 23909, 22841, 6101, 17835, 490, + 23909, 22841, 6101, 17835, 562, + 23909, 22841, 6101, 17835, 768, + 23909, 22841, 6101, 17835, 1120, + 23909, 22841, 6101, 17835, 1420, + 23909, 22841, 6101, 17835, 2834, + 23909, 22841, 6101, 17835, 2882, + 23909, 22841, 6101, 17835, 3076, + 23909, 22841, 6101, 17835, 3394, + 23909, 22841, 6101, 17835, 6064, + 23909, 22841, 6101, 17835, 7818, + 23909, 22841, 6101, 17835, 11826, + 23909, 22841, 6101, 17835, 12366, + 23909, 22841, 6101, 17835, 13050, + 23909, 22841, 6101, 17835, 13332, + 23909, 22841, 6101, 17835, 13652, + 23909, 22841, 6101, 17835, 13770, + 23909, 22841, 6101, 17835, 14428, + 23909, 22841, 6101, 17835, 14868, + 23909, 22841, 6101, 17835, 15096, + 23909, 22841, 6101, 17835, 15097, 17298, + 23909, 22841, 6101, 17835, 18120, + 23909, 22841, 6101, 17835, 18754, + 23909, 22841, 6101, 17835, 19378, + 23909, 22841, 6101, 18121, 17298, + 23909, 22841, 6101, 18819, 23798, + 23909, 22841, 13069, 2760, + 23909, 22841, 13069, 3240, + 23909, 22841, 13069, 3536, + 23909, 22841, 13069, 7036, + 23909, 22841, 13069, 7058, + 23909, 22841, 13069, 9358, + 23909, 22841, 13069, 11824, + 23909, 22841, 13069, 13150, + 23909, 22841, 13069, 14778, + 23909, 22841, 13069, 15116, + 23909, 22841, 14911, 0, + 23909, 22841, 14911, 2, + 23909, 22841, 14911, 4, + 23909, 22841, 14911, 6, + 23909, 22841, 14911, 8, + 23909, 22841, 14911, 10, + 23909, 22841, 14911, 12, + 23909, 22841, 14911, 14, + 23909, 22841, 14911, 16, + 23909, 22841, 14911, 18, + 23909, 22841, 14911, 20, + 23909, 22841, 14911, 22, + 23909, 22841, 14911, 24, + 23909, 22841, 14911, 26, + 23909, 22841, 14911, 28, + 23909, 22841, 14911, 30, + 23909, 22841, 14911, 32, + 23909, 22841, 14911, 34, + 23909, 22841, 14911, 36, + 23909, 22841, 14911, 38, + 23909, 22841, 14911, 40, + 23909, 22841, 14911, 42, + 23909, 22841, 14911, 44, + 23909, 22841, 14911, 46, + 23909, 22841, 14911, 48, + 23909, 22841, 14911, 50, + 23909, 22841, 16393, 14911, 0, + 23909, 22841, 16393, 14911, 2, + 23909, 22841, 16393, 14911, 4, + 23909, 22841, 16393, 14911, 6, + 23909, 22841, 16393, 14911, 8, + 23909, 22841, 16393, 14911, 10, + 23909, 22841, 16393, 14911, 12, + 23909, 22841, 16393, 14911, 14, + 23909, 22841, 16393, 14911, 16, + 23909, 22841, 16393, 14911, 18, + 23909, 22841, 16393, 14911, 20, + 23909, 22841, 16393, 14911, 22, + 23909, 22841, 16393, 14911, 24, + 23909, 22841, 16393, 14911, 26, + 23909, 22841, 16393, 14911, 28, + 23909, 22841, 16393, 14911, 30, + 23909, 22841, 16393, 14911, 32, + 23909, 22841, 16393, 14911, 34, + 23909, 22841, 16393, 14911, 36, + 23909, 22841, 16393, 14911, 38, + 23909, 22841, 16393, 14911, 40, + 23909, 22841, 16393, 14911, 42, + 23909, 22841, 16393, 14911, 44, + 23909, 22841, 16393, 14911, 46, + 23909, 22841, 16393, 14911, 48, + 23909, 22841, 16393, 14911, 50, + 23909, 22841, 16393, 17835, 0, + 23909, 22841, 16393, 17835, 2, + 23909, 22841, 16393, 17835, 4, + 23909, 22841, 16393, 17835, 6, + 23909, 22841, 16393, 17835, 8, + 23909, 22841, 16393, 17835, 10, + 23909, 22841, 16393, 17835, 12, + 23909, 22841, 16393, 17835, 14, + 23909, 22841, 16393, 17835, 16, + 23909, 22841, 16393, 17835, 18, + 23909, 22841, 16393, 17835, 20, + 23909, 22841, 16393, 17835, 22, + 23909, 22841, 16393, 17835, 24, + 23909, 22841, 16393, 17835, 26, + 23909, 22841, 16393, 17835, 28, + 23909, 22841, 16393, 17835, 30, + 23909, 22841, 16393, 17835, 32, + 23909, 22841, 16393, 17835, 34, + 23909, 22841, 16393, 17835, 36, + 23909, 22841, 16393, 17835, 38, + 23909, 22841, 16393, 17835, 40, + 23909, 22841, 16393, 17835, 42, + 23909, 22841, 16393, 17835, 44, + 23909, 22841, 16393, 17835, 46, + 23909, 22841, 16393, 17835, 48, + 23909, 22841, 16393, 17835, 50, + 23909, 22841, 17835, 0, + 23909, 22841, 17835, 2, + 23909, 22841, 17835, 4, + 23909, 22841, 17835, 6, + 23909, 22841, 17835, 8, + 23909, 22841, 17835, 10, + 23909, 22841, 17835, 12, + 23909, 22841, 17835, 14, + 23909, 22841, 17835, 16, + 23909, 22841, 17835, 18, + 23909, 22841, 17835, 20, + 23909, 22841, 17835, 22, + 23909, 22841, 17835, 24, + 23909, 22841, 17835, 26, + 23909, 22841, 17835, 28, + 23909, 22841, 17835, 30, + 23909, 22841, 17835, 32, + 23909, 22841, 17835, 34, + 23909, 22841, 17835, 36, + 23909, 22841, 17835, 38, + 23909, 22841, 17835, 40, + 23909, 22841, 17835, 42, + 23909, 22841, 17835, 44, + 23909, 22841, 17835, 46, + 23909, 22841, 17835, 48, + 23909, 22841, 17835, 50, + 23909, 25761, 13069, 2760, + 23909, 25761, 13069, 3240, + 23909, 25761, 13069, 3536, + 23909, 25761, 13069, 7036, + 23909, 25761, 13069, 7058, + 23909, 25761, 13069, 9358, + 23909, 25761, 13069, 11824, + 23909, 25761, 13069, 13150, + 23909, 25761, 13069, 14778, + 23909, 25761, 13069, 15116, + 23909, 25761, 14911, 0, + 23909, 25761, 14911, 2, + 23909, 25761, 14911, 4, + 23909, 25761, 14911, 6, + 23909, 25761, 14911, 8, + 23909, 25761, 14911, 10, + 23909, 25761, 14911, 12, + 23909, 25761, 14911, 14, + 23909, 25761, 14911, 16, + 23909, 25761, 14911, 18, + 23909, 25761, 14911, 20, + 23909, 25761, 14911, 22, + 23909, 25761, 14911, 24, + 23909, 25761, 14911, 26, + 23909, 25761, 14911, 28, + 23909, 25761, 14911, 30, + 23909, 25761, 14911, 32, + 23909, 25761, 14911, 34, + 23909, 25761, 14911, 36, + 23909, 25761, 14911, 38, + 23909, 25761, 14911, 40, + 23909, 25761, 14911, 42, + 23909, 25761, 14911, 44, + 23909, 25761, 14911, 46, + 23909, 25761, 14911, 48, + 23909, 25761, 14911, 50, + 23909, 25761, 17835, 0, + 23909, 25761, 17835, 2, + 23909, 25761, 17835, 6, + 23909, 25761, 17835, 8, + 23909, 25761, 17835, 10, + 23909, 25761, 17835, 12, + 23909, 25761, 17835, 16, + 23909, 25761, 17835, 18, + 23909, 25761, 17835, 20, + 23909, 25761, 17835, 22, + 23909, 25761, 17835, 24, + 23909, 25761, 17835, 28, + 23909, 25761, 17835, 36, + 23909, 25761, 17835, 38, + 23909, 25761, 17835, 40, + 23909, 25761, 17835, 42, + 23909, 25761, 17835, 44, + 23909, 25761, 17835, 46, + 23909, 25761, 17835, 48, + 23927, 16358, + 24051, 10860, + 24053, 7057, 1493, 20933, 203, 6544, + 24053, 7057, 1493, 20933, 205, 6544, + 24053, 7057, 1493, 20933, 2301, 8320, + 24053, 7057, 1493, 20933, 3537, 1291, 16516, + 24053, 7057, 1493, 20933, 8281, 12379, 17810, + 24053, 7057, 1493, 20933, 8281, 12525, 22537, 17810, + 24053, 7057, 1493, 20933, 8281, 12941, 17810, + 24053, 7057, 1493, 20933, 8281, 15453, 15975, 17810, + 24053, 7057, 1493, 20933, 8281, 15453, 22537, 17810, + 24053, 7057, 1493, 20933, 8281, 15975, 17810, + 24053, 7057, 1493, 20933, 8281, 16095, 12379, 17810, + 24053, 7057, 1493, 20933, 8281, 17225, 17810, + 24053, 7057, 1493, 20933, 8281, 20847, 14811, 17810, + 24053, 7057, 1493, 20933, 8281, 23522, + 24053, 7057, 1493, 20933, 11475, 2301, 8320, + 24053, 7057, 1493, 20933, 12916, + 24053, 7057, 1493, 20933, 12922, + 24053, 7057, 1493, 20933, 14659, 12379, 17810, + 24053, 7057, 1493, 20933, 14659, 12525, 22537, 17810, + 24053, 7057, 1493, 20933, 14659, 12941, 17810, + 24053, 7057, 1493, 20933, 14659, 15453, 15975, 17810, + 24053, 7057, 1493, 20933, 14659, 15453, 22537, 17810, + 24053, 7057, 1493, 20933, 14659, 15453, 22537, 17814, + 24053, 7057, 1493, 20933, 14659, 15975, 17810, + 24053, 7057, 1493, 20933, 14659, 16095, 12379, 17810, + 24053, 7057, 1493, 20933, 14659, 17225, 17810, + 24053, 7057, 1493, 20933, 14659, 20847, 14811, 17810, + 24053, 7057, 1493, 20933, 14659, 23522, + 24053, 7057, 1493, 20933, 20549, 8808, + 24053, 7057, 1493, 20933, 21844, + 24053, 7057, 1493, 20933, 22495, 19976, + 24053, 7057, 1493, 20933, 23213, 8808, + 24053, 7057, 1493, 20933, 23259, 7073, 10696, + 24053, 7057, 1493, 20933, 23259, 12922, + 24055, 660, + 24071, 19398, + 24077, 7030, + 24077, 7031, 11513, 9783, 14030, + 24077, 7032, + 24077, 14921, 7461, 11513, 9783, 14030, + 24077, 14921, 7461, 11513, 15949, 14030, + 24077, 17289, 10574, + 24077, 17289, 10575, 11513, 6696, + 24077, 19563, 19993, 10574, + 24077, 19602, + 24079, 22511, 21732, + 24081, 15453, 22837, 12414, + 24084, + 24143, 7073, 10696, + 24146, + 24152, + 24159, 14932, + 24162, + 24183, 22837, 12414, + 24189, 6996, + 24193, 3473, 22849, 12414, + 24193, 9783, 15939, 12414, + 24193, 15949, 15939, 12414, + 24193, 16233, 15939, 12414, + 24193, 17911, 20156, + 24193, 21349, 897, 19381, 9783, 15939, 15738, + 24193, 23276, + 24193, 28089, 3473, 20909, 12414, + 24193, 28089, 8281, 20909, 12414, + 24193, 28089, 9783, 15939, 12414, + 24193, 28089, 14659, 20909, 12414, + 24193, 28089, 15827, 20909, 12414, + 24195, 1057, 2643, 19513, 13177, 660, + 24195, 13177, 529, 13177, 660, + 24195, 13177, 660, + 24195, 13177, 661, 529, 3425, 13589, 506, + 25757, 22089, 17298, + 25761, 14055, 21928, + 25761, 14911, 562, + 25761, 14911, 13332, + 25761, 16393, 14911, 6, + 25761, 16393, 14911, 8, + 25761, 16393, 14911, 16, + 25761, 16393, 14911, 18, + 25761, 16393, 17835, 6, + 25761, 17835, 4, + 25761, 17835, 14, + 25761, 17835, 26, + 25761, 17835, 30, + 25761, 17835, 32, + 25761, 17835, 34, + 25761, 17835, 50, + 25761, 17835, 562, + 25761, 17835, 13332, + 25763, 3059, 20858, + 25763, 7062, + 25763, 14656, + 25763, 14911, 3059, 20858, + 25763, 14975, 16168, + 25763, 15757, 6104, + 25763, 16117, 11472, + 25763, 17005, 1088, + 25763, 17043, 10480, + 25763, 19518, + 25763, 20859, 11513, 8281, 7429, 12524, + 25763, 20859, 11513, 14659, 7429, 12524, + 25773, 10574, + 25777, 13177, 660, + 25777, 22435, 660, + 25781, 14499, 17298, + 25793, 18789, 16531, 276, + 25793, 18789, 16531, 554, + 25793, 18789, 16531, 2676, + 25793, 18789, 16531, 3398, + 25793, 18789, 16531, 6066, + 25793, 18789, 16531, 7478, + 25793, 18789, 16531, 8002, + 25793, 18789, 16531, 10478, + 25793, 18789, 16531, 10914, + 25793, 18789, 16531, 11722, + 25793, 18789, 16531, 12354, + 25793, 18789, 16531, 13384, + 25793, 18789, 16531, 14720, + 25793, 18789, 16531, 15606, + 25793, 18789, 16531, 16010, + 25793, 18789, 16531, 16508, + 25793, 18789, 16531, 17060, + 25793, 18789, 16531, 20300, + 25793, 18789, 16531, 25970, + 25793, 18789, 16787, 2760, + 25793, 18789, 16787, 2761, 18280, + 25793, 18789, 16787, 2761, 20828, + 25793, 18789, 16787, 3412, + 25793, 18789, 16787, 3536, + 25793, 18789, 16787, 7058, + 25793, 18789, 16787, 15116, + 25793, 18789, 16787, 17474, + 25793, 20459, 16531, 276, + 25793, 20459, 16531, 554, + 25793, 20459, 16531, 2406, + 25793, 20459, 16531, 2676, + 25793, 20459, 16531, 3398, + 25793, 20459, 16531, 3750, + 25793, 20459, 16531, 5556, + 25793, 20459, 16531, 6066, + 25793, 20459, 16531, 7478, + 25793, 20459, 16531, 8002, + 25793, 20459, 16531, 9992, + 25793, 20459, 16531, 10120, + 25793, 20459, 16531, 10478, + 25793, 20459, 16531, 10914, + 25793, 20459, 16531, 11722, + 25793, 20459, 16531, 12354, + 25793, 20459, 16531, 13384, + 25793, 20459, 16531, 14720, + 25793, 20459, 16531, 15606, + 25793, 20459, 16531, 16010, + 25793, 20459, 16531, 16508, + 25793, 20459, 16531, 17060, + 25793, 20459, 16787, 2760, + 25793, 20459, 16787, 2761, 18280, + 25793, 20459, 16787, 2761, 20828, + 25793, 20459, 16787, 3412, + 25793, 20459, 16787, 3536, + 25793, 20459, 16787, 7058, + 25793, 20459, 16787, 15116, + 25793, 20459, 16787, 17474, + 25813, 10868, + 25813, 12379, 17810, + 25813, 13070, + 25813, 14656, + 25813, 14975, 16168, + 25813, 15757, 6104, + 25813, 16001, 12379, 17810, + 25813, 16095, 12379, 21779, 8808, + 25813, 16117, 11472, + 25813, 17005, 1088, + 25813, 17043, 10480, + 25813, 17043, 17798, + 25813, 17045, 17897, 1088, + 25813, 19518, + 25813, 22549, 13392, + 25815, 8808, + 25815, 18314, + 25815, 20426, + 25815, 21360, + 25823, 10574, + 25877, 22837, 12414, + 25883, 13069, 2760, + 25883, 13069, 3240, + 25883, 13069, 3536, + 25883, 13069, 7036, + 25883, 13069, 7058, + 25883, 13069, 9358, + 25883, 13069, 13150, + 25883, 13069, 14778, + 25883, 13069, 15116, + 25883, 13783, 14911, 16531, 0, + 25883, 13783, 14911, 16531, 2, + 25883, 13783, 14911, 16531, 4, + 25883, 13783, 14911, 16531, 6, + 25883, 13783, 14911, 16531, 8, + 25883, 13783, 14911, 16531, 10, + 25883, 13783, 14911, 16531, 12, + 25883, 13783, 14911, 16531, 14, + 25883, 13783, 14911, 16531, 16, + 25883, 13783, 14911, 16531, 18, + 25883, 13783, 14911, 16531, 20, + 25883, 13783, 14911, 16531, 22, + 25883, 13783, 14911, 16531, 24, + 25883, 13783, 14911, 16531, 26, + 25883, 13783, 14911, 16531, 28, + 25883, 13783, 14911, 16531, 30, + 25883, 13783, 14911, 16531, 32, + 25883, 13783, 14911, 16531, 34, + 25883, 13783, 14911, 16531, 36, + 25883, 13783, 14911, 16531, 38, + 25883, 13783, 14911, 16531, 40, + 25883, 13783, 14911, 16531, 42, + 25883, 13783, 14911, 16531, 44, + 25883, 13783, 14911, 16531, 46, + 25883, 13783, 14911, 16531, 48, + 25883, 13783, 14911, 16531, 50, + 25883, 13783, 17835, 16531, 0, + 25883, 13783, 17835, 16531, 2, + 25883, 13783, 17835, 16531, 4, + 25883, 13783, 17835, 16531, 6, + 25883, 13783, 17835, 16531, 8, + 25883, 13783, 17835, 16531, 10, + 25883, 13783, 17835, 16531, 12, + 25883, 13783, 17835, 16531, 14, + 25883, 13783, 17835, 16531, 16, + 25883, 13783, 17835, 16531, 18, + 25883, 13783, 17835, 16531, 20, + 25883, 13783, 17835, 16531, 22, + 25883, 13783, 17835, 16531, 24, + 25883, 13783, 17835, 16531, 26, + 25883, 13783, 17835, 16531, 28, + 25883, 13783, 17835, 16531, 30, + 25883, 13783, 17835, 16531, 32, + 25883, 13783, 17835, 16531, 34, + 25883, 13783, 17835, 16531, 36, + 25883, 13783, 17835, 16531, 38, + 25883, 13783, 17835, 16531, 40, + 25883, 13783, 17835, 16531, 42, + 25883, 13783, 17835, 16531, 44, + 25883, 13783, 17835, 16531, 46, + 25883, 13783, 17835, 16531, 48, + 25883, 13783, 17835, 16531, 50, + 25883, 16313, 10586, + 25883, 16313, 10587, 0, + 25883, 16313, 12698, + 25883, 16313, 12699, 0, + 25883, 16313, 12699, 40, + 25883, 16313, 13484, + 25883, 16313, 13485, 0, + 25883, 16313, 13582, + 25883, 16313, 13583, 0, + 25883, 16313, 13994, + 25883, 16313, 13995, 0, + 25883, 16313, 14164, + 25883, 16313, 14165, 0, + 25883, 16313, 14538, + 25883, 16313, 14539, 0, + 25883, 16313, 14654, + 25883, 16313, 14655, 0, + 25883, 16313, 16462, + 25883, 16313, 16463, 0, + 25883, 16313, 17384, + 25883, 16313, 17385, 0, + 25883, 16313, 17870, + 25883, 16313, 17871, 0, + 25883, 16313, 18362, + 25883, 16313, 18363, 0, + 25883, 16313, 18860, + 25883, 16313, 18861, 0, + 25883, 16313, 19274, + 25883, 16313, 19275, 0, + 25883, 16477, 21101, 29, 292, + 25883, 16477, 21101, 14420, + 25883, 16787, 3412, + 25883, 16787, 16110, + 25883, 16787, 17472, + 25883, 16787, 17474, + 25883, 16787, 18148, + 25883, 16787, 19116, + 25883, 16787, 19966, + 25883, 16787, 20052, + 25883, 16787, 20368, + 25883, 16787, 20824, + 25883, 16787, 21854, + 25883, 21487, 2760, + 25883, 21487, 3240, + 25883, 21487, 3310, + 25883, 21487, 3412, + 25883, 21487, 3536, + 25883, 21487, 6212, + 25883, 21487, 7026, + 25883, 21487, 7036, + 25883, 21487, 7058, + 25883, 21487, 7442, + 25883, 21487, 8980, + 25883, 21487, 9140, + 25883, 21487, 9358, + 25883, 21487, 10122, + 25883, 21487, 10422, + 25883, 21487, 11530, + 25883, 21487, 13140, + 25883, 21487, 13150, + 25883, 21487, 13760, + 25883, 21487, 13962, + 25883, 21487, 14636, + 25883, 21487, 14778, + 25883, 21487, 14980, + 25883, 21487, 14990, + 25883, 21487, 15116, + 25883, 21487, 15436, + 25883, 21487, 19134, + 25883, 21487, 19152, + 25883, 21487, 19526, + 25883, 21487, 20012, + 25883, 21487, 20580, + 25883, 21487, 21398, + 25883, 21487, 21802, + 25883, 21487, 21936, + 25883, 21487, 22422, + 25883, 21487, 25994, + 25886, + 25887, 11513, 36, + 25921, 8808, + 25921, 18314, + 25921, 20426, + 25921, 21360, + 25941, 16680, + 25950, + 25961, 97, 16525, 8808, + 25961, 10575, 519, 20538, + 25961, 10575, 14554, + 25961, 10575, 14841, 20538, + 25961, 10575, 15877, 21016, + 25961, 10575, 16573, 17534, + 25961, 10575, 17534, + 25961, 10575, 19408, + 25961, 10575, 19540, + 25961, 10575, 19586, + 25961, 13016, + 25961, 14644, + 25961, 15387, 11033, 19224, + 25961, 15387, 11033, 19538, + 25961, 15407, 10575, 16, + 25961, 15407, 10575, 40, + 25961, 15407, 10575, 58, + 25961, 15407, 10575, 72, + 25961, 15407, 10575, 96, + 25961, 15407, 10575, 186, + 25961, 15407, 10575, 314, + 25961, 15407, 10575, 522, + 25961, 15407, 10575, 706, + 25961, 15407, 10575, 19415, 22, + 25961, 15407, 10575, 19415, 34, + 25961, 15407, 10575, 19415, 406, + 25961, 15407, 10575, 19415, 608, + 25961, 16095, 13016, + 25961, 16531, 0, + 25961, 16531, 16, + 25961, 16531, 40, + 25961, 16531, 58, + 25961, 16531, 72, + 25961, 16531, 96, + 25961, 16531, 108, + 25961, 16531, 126, + 25961, 16531, 150, + 25961, 16531, 186, + 25961, 16531, 248, + 25961, 16531, 272, + 25961, 16531, 314, + 25961, 16531, 344, + 25961, 16531, 358, + 25961, 16531, 394, + 25961, 16531, 426, + 25961, 16531, 466, + 25961, 16531, 522, + 25961, 16531, 548, + 25961, 16531, 598, + 25961, 16531, 614, + 25961, 16531, 648, + 25961, 16531, 706, + 25961, 16531, 714, + 25961, 16531, 778, + 25961, 16531, 1000, + 25961, 16531, 1116, + 25961, 16531, 1214, + 25961, 16531, 1236, + 25961, 16531, 1588, + 25961, 16531, 1918, + 25961, 16531, 2036, + 25961, 16531, 2278, + 25961, 16531, 2574, + 25961, 16531, 2624, + 25961, 16531, 2698, + 25961, 16531, 2830, + 25961, 16531, 3118, + 25961, 16531, 3212, + 25961, 16531, 3286, + 25961, 16531, 3422, + 25961, 16531, 3502, + 25961, 16531, 6572, + 25961, 16531, 8342, + 25961, 16531, 11082, + 25961, 16531, 19415, 22, + 25961, 16531, 19415, 34, + 25961, 16531, 19415, 406, + 25961, 16531, 19415, 608, + 25961, 21138, + 25961, 22465, 8808, + 25966, + 25985, 13177, 660, + 25987, 19574, + 25990, + 25999, 6996, + 26007, 6222, + 26116, + 26135, 46, + 26135, 10574, + 26135, 10575, 323, 8281, 7429, 15938, + 26135, 10575, 323, 14659, 7429, 15938, + 26135, 10575, 323, 16095, 15938, + 26135, 10575, 323, 20858, + 26135, 10575, 11513, 1291, 12318, + 26135, 10575, 11513, 20920, + 26163, 10868, + 26163, 12379, 17810, + 26163, 13070, + 26163, 14656, + 26163, 14975, 16168, + 26163, 15757, 6104, + 26163, 16001, 12379, 17810, + 26163, 16095, 12379, 21779, 8808, + 26163, 16117, 11472, + 26163, 17005, 1088, + 26163, 17043, 10480, + 26163, 17043, 17798, + 26163, 17045, 17897, 1088, + 26163, 18216, + 26163, 22549, 13392, + 26166, + 26301, 14255, 6833, 12414, + 26301, 14931, 6833, 12414, + 26301, 22837, 12414, + 28083, 22837, 12414, + 28085, 19574, + 28089, 22837, 12414, + 28095, 22837, 12414, + 28099, 18890, + 28105, 12360, + 36247, 16095, 16358, + 36247, 17539, 14929, 8808, + 36247, 21767, 14929, 8808, + 36247, 23603, 14929, 8808, + 36271, 17298, + 36293, 19518, + 36295, 14483, 17298, + 36327, 16299, 17298, + 36327, 16493, 17298, + 36355, 17298, + 36361, 17298, +}; +static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_name_to_index[38813] = { + { 0x944D, 0 }, + { 0x1D6F, 5 }, + { 0x25F8, 9 }, + { 0x1F7E, 12 }, + { 0x1F56, 17 }, + { 0x25B3, 21 }, + { 0x25B5, 26 }, + { 0x25AD, 31 }, + { 0x25AE, 34 }, + { 0x2691, 38 }, + { 0x25B4, 42 }, + { 0x25B6, 47 }, + { 0x2690, 52 }, + { 0x264C, 56 }, + { 0x264D, 60 }, + { 0x264B, 64 }, + { 0x266A, 68 }, + { 0x203D, 72 }, + { 0x9262, 74 }, + { 0x1C94, 78 }, + { 0x1C81, 80 }, + { 0x1C83, 82 }, + { 0x1C93, 84 }, + { 0x1C80, 86 }, + { 0x1C82, 88 }, + { 0x90D1, 90 }, + { 0x2300, 95 }, + { 0x925E, 97 }, + { 0x90A8, 100 }, + { 0x9125, 103 }, + { 0x9260, 105 }, + { 0x9266, 108 }, + { 0x926A, 110 }, + { 0x8FFF, 112 }, + { 0x8A62, 115 }, + { 0x8A63, 119 }, + { 0x8A64, 123 }, + { 0x8A66, 127 }, + { 0x8A6B, 131 }, + { 0x8A67, 135 }, + { 0x8A6A, 139 }, + { 0x8A69, 143 }, + { 0x8A6E, 147 }, + { 0x8A65, 151 }, + { 0x8A6D, 155 }, + { 0x8A6C, 159 }, + { 0x8A68, 163 }, + { 0x8A4A, 167 }, + { 0x8A5C, 171 }, + { 0x8A50, 175 }, + { 0x8A44, 179 }, + { 0x8A56, 183 }, + { 0x8A4C, 187 }, + { 0x8A4B, 191 }, + { 0x8A4D, 195 }, + { 0x8A4E, 199 }, + { 0x8A4F, 203 }, + { 0x8A5F, 207 }, + { 0x8A61, 211 }, + { 0x8A5E, 215 }, + { 0x8A5D, 219 }, + { 0x8A54, 223 }, + { 0x8A55, 227 }, + { 0x8A52, 231 }, + { 0x8A51, 235 }, + { 0x8A45, 239 }, + { 0x8A48, 243 }, + { 0x8A49, 247 }, + { 0x8A59, 251 }, + { 0x8A57, 255 }, + { 0x8A5B, 259 }, + { 0x8A60, 263 }, + { 0x8A53, 267 }, + { 0x8A46, 271 }, + { 0x8A47, 275 }, + { 0x8A58, 279 }, + { 0x8A5A, 283 }, + { 0x8A6F, 287 }, + { 0x1923, 291 }, + { 0x1928, 295 }, + { 0x18FC, 298 }, + { 0x1901, 302 }, + { 0x18FD, 306 }, + { 0x1900, 310 }, + { 0x18FF, 314 }, + { 0x1904, 318 }, + { 0x18FB, 322 }, + { 0x1903, 326 }, + { 0x1902, 330 }, + { 0x18FE, 334 }, + { 0x1926, 338 }, + { 0x1907, 341 }, + { 0x1909, 345 }, + { 0x1906, 349 }, + { 0x191C, 353 }, + { 0x191A, 357 }, + { 0x1911, 361 }, + { 0x1913, 365 }, + { 0x1910, 369 }, + { 0x1905, 373 }, + { 0x1919, 377 }, + { 0x190F, 381 }, + { 0x191E, 385 }, + { 0x1914, 389 }, + { 0x1920, 393 }, + { 0x1922, 397 }, + { 0x1921, 401 }, + { 0x1915, 405 }, + { 0x1916, 409 }, + { 0x1918, 413 }, + { 0x190C, 417 }, + { 0x190B, 421 }, + { 0x190D, 425 }, + { 0x190E, 429 }, + { 0x1908, 433 }, + { 0x191B, 437 }, + { 0x191D, 441 }, + { 0x1912, 445 }, + { 0x190A, 449 }, + { 0x191F, 453 }, + { 0x1917, 457 }, + { 0x1924, 461 }, + { 0x1927, 465 }, + { 0x1925, 468 }, + { 0x192A, 472 }, + { 0x1929, 477 }, + { 0x90FC, 481 }, + { 0x90CE, 483 }, + { 0x23F3, 492 }, + { 0x8FB5, 496 }, + { 0x0000, 497 }, + { 0x257D, 498 }, + { 0x2579, 505 }, + { 0x2578, 512 }, + { 0x257B, 519 }, + { 0x1DEC, 526 }, + { 0x1DFF, 529 }, + { 0x2739, 534 }, + { 0x1E4A, 538 }, + { 0x1E2C, 542 }, + { 0x93D9, 546 }, + { 0x2791, 550 }, + { 0x25AA, 554 }, + { 0x1EFC, 557 }, + { 0x240B, 559 }, + { 0x25E9, 564 }, + { 0x1F47, 568 }, + { 0x1F5A, 572 }, + { 0x27E2, 574 }, + { 0x1F7B, 580 }, + { 0x1CE0, 586 }, + { 0x3492, 587 }, + { 0x348F, 590 }, + { 0x3477, 593 }, + { 0x3489, 596 }, + { 0x349C, 599 }, + { 0x3467, 602 }, + { 0x346E, 605 }, + { 0x347F, 608 }, + { 0x347E, 611 }, + { 0x348E, 614 }, + { 0x3473, 617 }, + { 0x3488, 620 }, + { 0x347B, 623 }, + { 0x3499, 626 }, + { 0x3494, 629 }, + { 0x346A, 632 }, + { 0x3479, 635 }, + { 0x346D, 638 }, + { 0x348C, 641 }, + { 0x3483, 644 }, + { 0x348B, 647 }, + { 0x3468, 650 }, + { 0x3491, 653 }, + { 0x3470, 656 }, + { 0x3472, 659 }, + { 0x3474, 662 }, + { 0x3482, 665 }, + { 0x3466, 668 }, + { 0x3486, 671 }, + { 0x346B, 674 }, + { 0x3476, 677 }, + { 0x3487, 680 }, + { 0x3485, 683 }, + { 0x3484, 686 }, + { 0x3481, 689 }, + { 0x3478, 692 }, + { 0x3497, 695 }, + { 0x3471, 698 }, + { 0x3493, 701 }, + { 0x347A, 704 }, + { 0x346C, 707 }, + { 0x347C, 710 }, + { 0x346F, 713 }, + { 0x3495, 716 }, + { 0x3475, 719 }, + { 0x348D, 722 }, + { 0x3480, 725 }, + { 0x349B, 728 }, + { 0x3469, 731 }, + { 0x347D, 734 }, + { 0x348A, 737 }, + { 0x3496, 740 }, + { 0x3498, 743 }, + { 0x3490, 746 }, + { 0x349A, 749 }, + { 0x2FE3, 752 }, + { 0x2FED, 755 }, + { 0x2FDB, 758 }, + { 0x2FEA, 761 }, + { 0x2FE4, 764 }, + { 0x2FE1, 767 }, + { 0x2FE2, 770 }, + { 0x2FF9, 773 }, + { 0x3003, 776 }, + { 0x2FF1, 779 }, + { 0x3000, 782 }, + { 0x3007, 785 }, + { 0x300D, 788 }, + { 0x3291, 791 }, + { 0x329B, 794 }, + { 0x3289, 797 }, + { 0x3298, 800 }, + { 0x329F, 803 }, + { 0x32A5, 806 }, + { 0x30E2, 809 }, + { 0x30EB, 812 }, + { 0x30DB, 815 }, + { 0x30E8, 818 }, + { 0x30EF, 821 }, + { 0x2FEC, 824 }, + { 0x30AC, 827 }, + { 0x30A8, 830 }, + { 0x30AF, 833 }, + { 0x30B3, 836 }, + { 0x30B9, 839 }, + { 0x31BD, 842 }, + { 0x31C9, 845 }, + { 0x31B5, 848 }, + { 0x31C5, 851 }, + { 0x31CD, 854 }, + { 0x324C, 857 }, + { 0x3257, 860 }, + { 0x3254, 863 }, + { 0x2FDF, 866 }, + { 0x2FDC, 869 }, + { 0x2FD9, 872 }, + { 0x2FDA, 875 }, + { 0x33BB, 878 }, + { 0x33C7, 881 }, + { 0x33CB, 884 }, + { 0x33D1, 887 }, + { 0x31DA, 890 }, + { 0x31E5, 893 }, + { 0x31D3, 896 }, + { 0x31E1, 899 }, + { 0x31E9, 902 }, + { 0x319A, 905 }, + { 0x31A5, 908 }, + { 0x3192, 911 }, + { 0x31A2, 914 }, + { 0x31A9, 917 }, + { 0x31AF, 920 }, + { 0x3090, 923 }, + { 0x309B, 926 }, + { 0x3089, 929 }, + { 0x3098, 932 }, + { 0x309E, 935 }, + { 0x30A4, 938 }, + { 0x315E, 941 }, + { 0x3168, 944 }, + { 0x3158, 947 }, + { 0x3165, 950 }, + { 0x316C, 953 }, + { 0x2FEB, 956 }, + { 0x2FE8, 959 }, + { 0x2FE9, 962 }, + { 0x301A, 965 }, + { 0x3013, 968 }, + { 0x3021, 971 }, + { 0x3025, 974 }, + { 0x302B, 977 }, + { 0x33D7, 980 }, + { 0x33E3, 983 }, + { 0x33E7, 986 }, + { 0x33ED, 989 }, + { 0x33A1, 992 }, + { 0x33AB, 995 }, + { 0x33A8, 998 }, + { 0x33AF, 1001 }, + { 0x33B5, 1004 }, + { 0x32EB, 1007 }, + { 0x32F5, 1010 }, + { 0x32E4, 1013 }, + { 0x32F2, 1016 }, + { 0x32F9, 1019 }, + { 0x32FF, 1022 }, + { 0x30FC, 1025 }, + { 0x3107, 1028 }, + { 0x30F5, 1031 }, + { 0x3104, 1034 }, + { 0x310B, 1037 }, + { 0x2FE6, 1040 }, + { 0x30C5, 1043 }, + { 0x30BD, 1046 }, + { 0x30C9, 1049 }, + { 0x30CF, 1052 }, + { 0x30D5, 1055 }, + { 0x325B, 1058 }, + { 0x3264, 1061 }, + { 0x3261, 1064 }, + { 0x2FEE, 1067 }, + { 0x3438, 1070 }, + { 0x3442, 1073 }, + { 0x3446, 1076 }, + { 0x344C, 1079 }, + { 0x3458, 1082 }, + { 0x345C, 1085 }, + { 0x3462, 1088 }, + { 0x326F, 1091 }, + { 0x3279, 1094 }, + { 0x3268, 1097 }, + { 0x3276, 1100 }, + { 0x327D, 1103 }, + { 0x3283, 1106 }, + { 0x2FFA, 1109 }, + { 0x2FF7, 1112 }, + { 0x2FF8, 1115 }, + { 0x3039, 1118 }, + { 0x3043, 1121 }, + { 0x3031, 1124 }, + { 0x3040, 1127 }, + { 0x3047, 1130 }, + { 0x304D, 1133 }, + { 0x3004, 1136 }, + { 0x3002, 1139 }, + { 0x2FF5, 1142 }, + { 0x2FF2, 1145 }, + { 0x2FEF, 1148 }, + { 0x2FF0, 1151 }, + { 0x3001, 1154 }, + { 0x2FFE, 1157 }, + { 0x2FFF, 1160 }, + { 0x2FFC, 1163 }, + { 0x3008, 1166 }, + { 0x300A, 1169 }, + { 0x3005, 1172 }, + { 0x3006, 1175 }, + { 0x300E, 1178 }, + { 0x3010, 1181 }, + { 0x300B, 1184 }, + { 0x300C, 1187 }, + { 0x3292, 1190 }, + { 0x328F, 1193 }, + { 0x3290, 1196 }, + { 0x329C, 1199 }, + { 0x329A, 1202 }, + { 0x333C, 1205 }, + { 0x3348, 1208 }, + { 0x3344, 1211 }, + { 0x334B, 1214 }, + { 0x3351, 1217 }, + { 0x328D, 1220 }, + { 0x328A, 1223 }, + { 0x3287, 1226 }, + { 0x3288, 1229 }, + { 0x3299, 1232 }, + { 0x3296, 1235 }, + { 0x3297, 1238 }, + { 0x3294, 1241 }, + { 0x32A0, 1244 }, + { 0x32A2, 1247 }, + { 0x329D, 1250 }, + { 0x329E, 1253 }, + { 0x32A6, 1256 }, + { 0x32A8, 1259 }, + { 0x32A3, 1262 }, + { 0x32A4, 1265 }, + { 0x30E3, 1268 }, + { 0x30E0, 1271 }, + { 0x30E1, 1274 }, + { 0x3118, 1277 }, + { 0x3122, 1280 }, + { 0x3111, 1283 }, + { 0x311F, 1286 }, + { 0x3126, 1289 }, + { 0x30EC, 1292 }, + { 0x30EA, 1295 }, + { 0x30DE, 1298 }, + { 0x30DC, 1301 }, + { 0x30D9, 1304 }, + { 0x30DA, 1307 }, + { 0x30E9, 1310 }, + { 0x30E6, 1313 }, + { 0x30E7, 1316 }, + { 0x30E5, 1319 }, + { 0x30F0, 1322 }, + { 0x30F2, 1325 }, + { 0x30ED, 1328 }, + { 0x30EE, 1331 }, + { 0x30AD, 1334 }, + { 0x30AA, 1337 }, + { 0x30AB, 1340 }, + { 0x30A9, 1343 }, + { 0x30A6, 1346 }, + { 0x30A7, 1349 }, + { 0x30B0, 1352 }, + { 0x30AE, 1355 }, + { 0x30B4, 1358 }, + { 0x30B6, 1361 }, + { 0x30B1, 1364 }, + { 0x30B2, 1367 }, + { 0x30BA, 1370 }, + { 0x30B7, 1373 }, + { 0x30B8, 1376 }, + { 0x31BE, 1379 }, + { 0x31BB, 1382 }, + { 0x31BC, 1385 }, + { 0x31CA, 1388 }, + { 0x31C7, 1391 }, + { 0x31C8, 1394 }, + { 0x31F5, 1397 }, + { 0x3201, 1400 }, + { 0x31EF, 1403 }, + { 0x31FD, 1406 }, + { 0x3205, 1409 }, + { 0x31B9, 1412 }, + { 0x31B6, 1415 }, + { 0x31B3, 1418 }, + { 0x31B4, 1421 }, + { 0x31C6, 1424 }, + { 0x31C3, 1427 }, + { 0x31C4, 1430 }, + { 0x31C1, 1433 }, + { 0x31CE, 1436 }, + { 0x31D0, 1439 }, + { 0x31CB, 1442 }, + { 0x31CC, 1445 }, + { 0x324D, 1448 }, + { 0x324A, 1451 }, + { 0x324B, 1454 }, + { 0x3258, 1457 }, + { 0x3256, 1460 }, + { 0x3249, 1463 }, + { 0x3247, 1466 }, + { 0x3179, 1469 }, + { 0x3182, 1472 }, + { 0x3172, 1475 }, + { 0x317F, 1478 }, + { 0x3186, 1481 }, + { 0x318C, 1484 }, + { 0x3073, 1487 }, + { 0x306C, 1490 }, + { 0x307A, 1493 }, + { 0x307E, 1496 }, + { 0x3083, 1499 }, + { 0x314B, 1502 }, + { 0x3153, 1505 }, + { 0x3143, 1508 }, + { 0x3255, 1511 }, + { 0x3252, 1514 }, + { 0x3253, 1517 }, + { 0x3250, 1520 }, + { 0x3229, 1523 }, + { 0x3234, 1526 }, + { 0x3221, 1529 }, + { 0x3231, 1532 }, + { 0x2FE0, 1535 }, + { 0x2FDD, 1538 }, + { 0x2FDE, 1541 }, + { 0x33BF, 1544 }, + { 0x33BC, 1547 }, + { 0x33B9, 1550 }, + { 0x33BA, 1553 }, + { 0x33F3, 1556 }, + { 0x33FE, 1559 }, + { 0x3402, 1562 }, + { 0x3408, 1565 }, + { 0x33C8, 1568 }, + { 0x33C5, 1571 }, + { 0x33C6, 1574 }, + { 0x33C3, 1577 }, + { 0x33CC, 1580 }, + { 0x33CE, 1583 }, + { 0x33C9, 1586 }, + { 0x33CA, 1589 }, + { 0x33D2, 1592 }, + { 0x33D4, 1595 }, + { 0x33CF, 1598 }, + { 0x33D0, 1601 }, + { 0x31DB, 1604 }, + { 0x31D8, 1607 }, + { 0x31D9, 1610 }, + { 0x31E6, 1613 }, + { 0x31E3, 1616 }, + { 0x31E4, 1619 }, + { 0x31D6, 1622 }, + { 0x31D4, 1625 }, + { 0x31D1, 1628 }, + { 0x31D2, 1631 }, + { 0x31E2, 1634 }, + { 0x31DF, 1637 }, + { 0x31E0, 1640 }, + { 0x31DD, 1643 }, + { 0x31EA, 1646 }, + { 0x31EC, 1649 }, + { 0x31E7, 1652 }, + { 0x31E8, 1655 }, + { 0x319B, 1658 }, + { 0x3198, 1661 }, + { 0x3199, 1664 }, + { 0x31A6, 1667 }, + { 0x31A4, 1670 }, + { 0x3196, 1673 }, + { 0x3193, 1676 }, + { 0x3190, 1679 }, + { 0x3191, 1682 }, + { 0x31A3, 1685 }, + { 0x31A0, 1688 }, + { 0x31A1, 1691 }, + { 0x319E, 1694 }, + { 0x31AA, 1697 }, + { 0x31AC, 1700 }, + { 0x31A7, 1703 }, + { 0x31A8, 1706 }, + { 0x31B0, 1709 }, + { 0x31B2, 1712 }, + { 0x31AD, 1715 }, + { 0x31AE, 1718 }, + { 0x3091, 1721 }, + { 0x308E, 1724 }, + { 0x308F, 1727 }, + { 0x309A, 1730 }, + { 0x320D, 1733 }, + { 0x3217, 1736 }, + { 0x3214, 1739 }, + { 0x321B, 1742 }, + { 0x308C, 1745 }, + { 0x308A, 1748 }, + { 0x3087, 1751 }, + { 0x3088, 1754 }, + { 0x3099, 1757 }, + { 0x3096, 1760 }, + { 0x3097, 1763 }, + { 0x3094, 1766 }, + { 0x309F, 1769 }, + { 0x30A1, 1772 }, + { 0x309C, 1775 }, + { 0x309D, 1778 }, + { 0x30A5, 1781 }, + { 0x30A2, 1784 }, + { 0x30A3, 1787 }, + { 0x315F, 1790 }, + { 0x315D, 1793 }, + { 0x3058, 1796 }, + { 0x3051, 1799 }, + { 0x305C, 1802 }, + { 0x3060, 1805 }, + { 0x3066, 1808 }, + { 0x3132, 1811 }, + { 0x3139, 1814 }, + { 0x312C, 1817 }, + { 0x3136, 1820 }, + { 0x313D, 1823 }, + { 0x3169, 1826 }, + { 0x3167, 1829 }, + { 0x323B, 1832 }, + { 0x3245, 1835 }, + { 0x3242, 1838 }, + { 0x315B, 1841 }, + { 0x3159, 1844 }, + { 0x3156, 1847 }, + { 0x3157, 1850 }, + { 0x340C, 1853 }, + { 0x3416, 1856 }, + { 0x3419, 1859 }, + { 0x341F, 1862 }, + { 0x3166, 1865 }, + { 0x3163, 1868 }, + { 0x3164, 1871 }, + { 0x336F, 1874 }, + { 0x3376, 1877 }, + { 0x3372, 1880 }, + { 0x337A, 1883 }, + { 0x3380, 1886 }, + { 0x3161, 1889 }, + { 0x316D, 1892 }, + { 0x316F, 1895 }, + { 0x316A, 1898 }, + { 0x316B, 1901 }, + { 0x3425, 1904 }, + { 0x3430, 1907 }, + { 0x3434, 1910 }, + { 0x32CF, 1913 }, + { 0x32D6, 1916 }, + { 0x32C8, 1919 }, + { 0x32D8, 1922 }, + { 0x32DE, 1925 }, + { 0x301B, 1928 }, + { 0x3018, 1931 }, + { 0x3019, 1934 }, + { 0x3016, 1937 }, + { 0x3014, 1940 }, + { 0x3011, 1943 }, + { 0x3012, 1946 }, + { 0x3022, 1949 }, + { 0x301F, 1952 }, + { 0x3020, 1955 }, + { 0x301D, 1958 }, + { 0x3026, 1961 }, + { 0x3028, 1964 }, + { 0x3023, 1967 }, + { 0x3024, 1970 }, + { 0x302C, 1973 }, + { 0x302E, 1976 }, + { 0x3029, 1979 }, + { 0x302A, 1982 }, + { 0x33DB, 1985 }, + { 0x33D8, 1988 }, + { 0x33D5, 1991 }, + { 0x33D6, 1994 }, + { 0x33E4, 1997 }, + { 0x33E1, 2000 }, + { 0x33E2, 2003 }, + { 0x33DF, 2006 }, + { 0x33E8, 2009 }, + { 0x33EA, 2012 }, + { 0x33E5, 2015 }, + { 0x33E6, 2018 }, + { 0x33EE, 2021 }, + { 0x33F0, 2024 }, + { 0x33EB, 2027 }, + { 0x33EC, 2030 }, + { 0x33A2, 2033 }, + { 0x339F, 2036 }, + { 0x33A0, 2039 }, + { 0x33AC, 2042 }, + { 0x33AA, 2045 }, + { 0x33A9, 2048 }, + { 0x33A6, 2051 }, + { 0x33A7, 2054 }, + { 0x3356, 2057 }, + { 0x335F, 2060 }, + { 0x335B, 2063 }, + { 0x3363, 2066 }, + { 0x3369, 2069 }, + { 0x33A4, 2072 }, + { 0x33B0, 2075 }, + { 0x33B2, 2078 }, + { 0x33AD, 2081 }, + { 0x33AE, 2084 }, + { 0x33B6, 2087 }, + { 0x33B8, 2090 }, + { 0x33B3, 2093 }, + { 0x33B4, 2096 }, + { 0x32EC, 2099 }, + { 0x32E9, 2102 }, + { 0x32EA, 2105 }, + { 0x32F6, 2108 }, + { 0x32F4, 2111 }, + { 0x3386, 2114 }, + { 0x3391, 2117 }, + { 0x338D, 2120 }, + { 0x3395, 2123 }, + { 0x339B, 2126 }, + { 0x32E7, 2129 }, + { 0x32E5, 2132 }, + { 0x32E2, 2135 }, + { 0x32E3, 2138 }, + { 0x32F3, 2141 }, + { 0x32F0, 2144 }, + { 0x32F1, 2147 }, + { 0x330C, 2150 }, + { 0x3313, 2153 }, + { 0x3305, 2156 }, + { 0x3310, 2159 }, + { 0x3317, 2162 }, + { 0x331B, 2165 }, + { 0x32EE, 2168 }, + { 0x32FA, 2171 }, + { 0x32FC, 2174 }, + { 0x32F7, 2177 }, + { 0x32F8, 2180 }, + { 0x3300, 2183 }, + { 0x3302, 2186 }, + { 0x32FD, 2189 }, + { 0x32FE, 2192 }, + { 0x30FD, 2195 }, + { 0x30FA, 2198 }, + { 0x30FB, 2201 }, + { 0x3108, 2204 }, + { 0x3106, 2207 }, + { 0x30F8, 2210 }, + { 0x30F6, 2213 }, + { 0x30F3, 2216 }, + { 0x30F4, 2219 }, + { 0x3105, 2222 }, + { 0x3102, 2225 }, + { 0x3103, 2228 }, + { 0x3100, 2231 }, + { 0x310C, 2234 }, + { 0x310E, 2237 }, + { 0x3109, 2240 }, + { 0x310A, 2243 }, + { 0x2FE7, 2246 }, + { 0x2FE5, 2249 }, + { 0x30C6, 2252 }, + { 0x30C3, 2255 }, + { 0x30C4, 2258 }, + { 0x30CC, 2261 }, + { 0x30CB, 2264 }, + { 0x30C1, 2267 }, + { 0x30BE, 2270 }, + { 0x30BB, 2273 }, + { 0x30BC, 2276 }, + { 0x30CA, 2279 }, + { 0x30C7, 2282 }, + { 0x30C8, 2285 }, + { 0x30D0, 2288 }, + { 0x30D2, 2291 }, + { 0x30CD, 2294 }, + { 0x30CE, 2297 }, + { 0x30D6, 2300 }, + { 0x30D8, 2303 }, + { 0x30D3, 2306 }, + { 0x30D4, 2309 }, + { 0x325C, 2312 }, + { 0x3259, 2315 }, + { 0x325A, 2318 }, + { 0x3265, 2321 }, + { 0x3263, 2324 }, + { 0x3262, 2327 }, + { 0x3260, 2330 }, + { 0x325E, 2333 }, + { 0x343C, 2336 }, + { 0x3439, 2339 }, + { 0x3436, 2342 }, + { 0x3437, 2345 }, + { 0x3443, 2348 }, + { 0x3440, 2351 }, + { 0x3441, 2354 }, + { 0x343F, 2357 }, + { 0x3447, 2360 }, + { 0x3449, 2363 }, + { 0x3444, 2366 }, + { 0x3445, 2369 }, + { 0x3450, 2372 }, + { 0x344D, 2375 }, + { 0x344A, 2378 }, + { 0x344B, 2381 }, + { 0x3459, 2384 }, + { 0x3456, 2387 }, + { 0x3457, 2390 }, + { 0x3454, 2393 }, + { 0x345D, 2396 }, + { 0x345F, 2399 }, + { 0x345A, 2402 }, + { 0x345B, 2405 }, + { 0x3463, 2408 }, + { 0x3465, 2411 }, + { 0x3460, 2414 }, + { 0x3461, 2417 }, + { 0x3270, 2420 }, + { 0x326D, 2423 }, + { 0x326E, 2426 }, + { 0x327A, 2429 }, + { 0x3278, 2432 }, + { 0x3321, 2435 }, + { 0x332C, 2438 }, + { 0x3328, 2441 }, + { 0x3330, 2444 }, + { 0x3336, 2447 }, + { 0x326B, 2450 }, + { 0x3269, 2453 }, + { 0x3266, 2456 }, + { 0x3267, 2459 }, + { 0x3277, 2462 }, + { 0x3274, 2465 }, + { 0x3275, 2468 }, + { 0x3272, 2471 }, + { 0x327E, 2474 }, + { 0x3280, 2477 }, + { 0x327B, 2480 }, + { 0x327C, 2483 }, + { 0x3284, 2486 }, + { 0x3286, 2489 }, + { 0x3281, 2492 }, + { 0x3282, 2495 }, + { 0x32B3, 2498 }, + { 0x32B9, 2501 }, + { 0x32AB, 2504 }, + { 0x32B6, 2507 }, + { 0x32BC, 2510 }, + { 0x32C2, 2513 }, + { 0x303A, 2516 }, + { 0x3037, 2519 }, + { 0x3038, 2522 }, + { 0x3044, 2525 }, + { 0x3042, 2528 }, + { 0x3035, 2531 }, + { 0x3032, 2534 }, + { 0x302F, 2537 }, + { 0x3030, 2540 }, + { 0x3041, 2543 }, + { 0x303E, 2546 }, + { 0x303F, 2549 }, + { 0x303C, 2552 }, + { 0x3048, 2555 }, + { 0x304A, 2558 }, + { 0x3045, 2561 }, + { 0x3046, 2564 }, + { 0x304E, 2567 }, + { 0x304B, 2570 }, + { 0x304C, 2573 }, + { 0x2FF6, 2576 }, + { 0x2FF3, 2579 }, + { 0x2FF4, 2582 }, + { 0x2FFD, 2585 }, + { 0x2FFB, 2588 }, + { 0x3009, 2591 }, + { 0x300F, 2594 }, + { 0x333D, 2597 }, + { 0x333A, 2600 }, + { 0x333B, 2603 }, + { 0x3349, 2606 }, + { 0x3346, 2609 }, + { 0x3347, 2612 }, + { 0x3345, 2615 }, + { 0x3342, 2618 }, + { 0x3343, 2621 }, + { 0x3340, 2624 }, + { 0x334C, 2627 }, + { 0x334E, 2630 }, + { 0x334A, 2633 }, + { 0x3352, 2636 }, + { 0x3354, 2639 }, + { 0x334F, 2642 }, + { 0x3350, 2645 }, + { 0x328E, 2648 }, + { 0x328B, 2651 }, + { 0x328C, 2654 }, + { 0x3295, 2657 }, + { 0x3293, 2660 }, + { 0x32A1, 2663 }, + { 0x32A7, 2666 }, + { 0x3119, 2669 }, + { 0x3116, 2672 }, + { 0x3117, 2675 }, + { 0x3123, 2678 }, + { 0x3121, 2681 }, + { 0x3114, 2684 }, + { 0x3112, 2687 }, + { 0x310F, 2690 }, + { 0x3110, 2693 }, + { 0x3120, 2696 }, + { 0x311D, 2699 }, + { 0x311E, 2702 }, + { 0x311B, 2705 }, + { 0x3127, 2708 }, + { 0x3129, 2711 }, + { 0x3124, 2714 }, + { 0x3125, 2717 }, + { 0x30DF, 2720 }, + { 0x30DD, 2723 }, + { 0x30E4, 2726 }, + { 0x30F1, 2729 }, + { 0x30B5, 2732 }, + { 0x31F6, 2735 }, + { 0x31F3, 2738 }, + { 0x31F4, 2741 }, + { 0x3202, 2744 }, + { 0x31FF, 2747 }, + { 0x3200, 2750 }, + { 0x31F1, 2753 }, + { 0x31ED, 2756 }, + { 0x31EE, 2759 }, + { 0x31FE, 2762 }, + { 0x31FB, 2765 }, + { 0x31FC, 2768 }, + { 0x31F9, 2771 }, + { 0x3206, 2774 }, + { 0x3208, 2777 }, + { 0x3203, 2780 }, + { 0x3204, 2783 }, + { 0x31BA, 2786 }, + { 0x31B7, 2789 }, + { 0x31B8, 2792 }, + { 0x31C2, 2795 }, + { 0x31BF, 2798 }, + { 0x31C0, 2801 }, + { 0x31CF, 2804 }, + { 0x3248, 2807 }, + { 0x317A, 2810 }, + { 0x3177, 2813 }, + { 0x3178, 2816 }, + { 0x3183, 2819 }, + { 0x3181, 2822 }, + { 0x3175, 2825 }, + { 0x3173, 2828 }, + { 0x3170, 2831 }, + { 0x3171, 2834 }, + { 0x3180, 2837 }, + { 0x317E, 2840 }, + { 0x317C, 2843 }, + { 0x3187, 2846 }, + { 0x3189, 2849 }, + { 0x3184, 2852 }, + { 0x3185, 2855 }, + { 0x318D, 2858 }, + { 0x318F, 2861 }, + { 0x318A, 2864 }, + { 0x318B, 2867 }, + { 0x3074, 2870 }, + { 0x3071, 2873 }, + { 0x3072, 2876 }, + { 0x306F, 2879 }, + { 0x306D, 2882 }, + { 0x306A, 2885 }, + { 0x306B, 2888 }, + { 0x307B, 2891 }, + { 0x3078, 2894 }, + { 0x3079, 2897 }, + { 0x3076, 2900 }, + { 0x307F, 2903 }, + { 0x3081, 2906 }, + { 0x307C, 2909 }, + { 0x307D, 2912 }, + { 0x3084, 2915 }, + { 0x3086, 2918 }, + { 0x3082, 2921 }, + { 0x314C, 2924 }, + { 0x3149, 2927 }, + { 0x314A, 2930 }, + { 0x3154, 2933 }, + { 0x3152, 2936 }, + { 0x3147, 2939 }, + { 0x3144, 2942 }, + { 0x3141, 2945 }, + { 0x3142, 2948 }, + { 0x3151, 2951 }, + { 0x314F, 2954 }, + { 0x3150, 2957 }, + { 0x314E, 2960 }, + { 0x3155, 2963 }, + { 0x3251, 2966 }, + { 0x324E, 2969 }, + { 0x324F, 2972 }, + { 0x322A, 2975 }, + { 0x3227, 2978 }, + { 0x3228, 2981 }, + { 0x3235, 2984 }, + { 0x3233, 2987 }, + { 0x3225, 2990 }, + { 0x3222, 2993 }, + { 0x321F, 2996 }, + { 0x3220, 2999 }, + { 0x3232, 3002 }, + { 0x322F, 3005 }, + { 0x3230, 3008 }, + { 0x322D, 3011 }, + { 0x33C0, 3014 }, + { 0x33BD, 3017 }, + { 0x33BE, 3020 }, + { 0x33F7, 3023 }, + { 0x33F4, 3026 }, + { 0x33F1, 3029 }, + { 0x33F2, 3032 }, + { 0x33FF, 3035 }, + { 0x33FC, 3038 }, + { 0x33FD, 3041 }, + { 0x33FA, 3044 }, + { 0x3403, 3047 }, + { 0x3405, 3050 }, + { 0x3400, 3053 }, + { 0x3401, 3056 }, + { 0x3409, 3059 }, + { 0x3406, 3062 }, + { 0x3407, 3065 }, + { 0x33C4, 3068 }, + { 0x33C1, 3071 }, + { 0x33C2, 3074 }, + { 0x33CD, 3077 }, + { 0x33D3, 3080 }, + { 0x31D7, 3083 }, + { 0x31D5, 3086 }, + { 0x31DE, 3089 }, + { 0x31DC, 3092 }, + { 0x31EB, 3095 }, + { 0x3197, 3098 }, + { 0x3194, 3101 }, + { 0x3195, 3104 }, + { 0x319F, 3107 }, + { 0x319C, 3110 }, + { 0x319D, 3113 }, + { 0x31AB, 3116 }, + { 0x31B1, 3119 }, + { 0x320E, 3122 }, + { 0x320B, 3125 }, + { 0x320C, 3128 }, + { 0x3218, 3131 }, + { 0x3216, 3134 }, + { 0x320A, 3137 }, + { 0x3215, 3140 }, + { 0x3212, 3143 }, + { 0x3213, 3146 }, + { 0x3210, 3149 }, + { 0x321C, 3152 }, + { 0x321E, 3155 }, + { 0x3219, 3158 }, + { 0x321A, 3161 }, + { 0x308D, 3164 }, + { 0x308B, 3167 }, + { 0x3095, 3170 }, + { 0x3092, 3173 }, + { 0x3093, 3176 }, + { 0x30A0, 3179 }, + { 0x3059, 3182 }, + { 0x3056, 3185 }, + { 0x3057, 3188 }, + { 0x3054, 3191 }, + { 0x3052, 3194 }, + { 0x304F, 3197 }, + { 0x3050, 3200 }, + { 0x305D, 3203 }, + { 0x305A, 3206 }, + { 0x305B, 3209 }, + { 0x3061, 3212 }, + { 0x3063, 3215 }, + { 0x305E, 3218 }, + { 0x305F, 3221 }, + { 0x3067, 3224 }, + { 0x3069, 3227 }, + { 0x3064, 3230 }, + { 0x3065, 3233 }, + { 0x3133, 3236 }, + { 0x3130, 3239 }, + { 0x3131, 3242 }, + { 0x313A, 3245 }, + { 0x3138, 3248 }, + { 0x312F, 3251 }, + { 0x312D, 3254 }, + { 0x312A, 3257 }, + { 0x312B, 3260 }, + { 0x3137, 3263 }, + { 0x3134, 3266 }, + { 0x3135, 3269 }, + { 0x313E, 3272 }, + { 0x3140, 3275 }, + { 0x313B, 3278 }, + { 0x313C, 3281 }, + { 0x323C, 3284 }, + { 0x3239, 3287 }, + { 0x323A, 3290 }, + { 0x3246, 3293 }, + { 0x3244, 3296 }, + { 0x3237, 3299 }, + { 0x3243, 3302 }, + { 0x3240, 3305 }, + { 0x3241, 3308 }, + { 0x323F, 3311 }, + { 0x315C, 3314 }, + { 0x315A, 3317 }, + { 0x3410, 3320 }, + { 0x340D, 3323 }, + { 0x340A, 3326 }, + { 0x340B, 3329 }, + { 0x3417, 3332 }, + { 0x3414, 3335 }, + { 0x3415, 3338 }, + { 0x3413, 3341 }, + { 0x341A, 3344 }, + { 0x341C, 3347 }, + { 0x3418, 3350 }, + { 0x3420, 3353 }, + { 0x3422, 3356 }, + { 0x341D, 3359 }, + { 0x341E, 3362 }, + { 0x3370, 3365 }, + { 0x336D, 3368 }, + { 0x336E, 3371 }, + { 0x3377, 3374 }, + { 0x3374, 3377 }, + { 0x3375, 3380 }, + { 0x3373, 3383 }, + { 0x3371, 3386 }, + { 0x337B, 3389 }, + { 0x337D, 3392 }, + { 0x3378, 3395 }, + { 0x3379, 3398 }, + { 0x3381, 3401 }, + { 0x3383, 3404 }, + { 0x337E, 3407 }, + { 0x337F, 3410 }, + { 0x3162, 3413 }, + { 0x3160, 3416 }, + { 0x316E, 3419 }, + { 0x3429, 3422 }, + { 0x3426, 3425 }, + { 0x3423, 3428 }, + { 0x3424, 3431 }, + { 0x3431, 3434 }, + { 0x342E, 3437 }, + { 0x342F, 3440 }, + { 0x342C, 3443 }, + { 0x3435, 3446 }, + { 0x3432, 3449 }, + { 0x3433, 3452 }, + { 0x32D0, 3455 }, + { 0x32CD, 3458 }, + { 0x32CE, 3461 }, + { 0x32D5, 3464 }, + { 0x32CB, 3467 }, + { 0x32C9, 3470 }, + { 0x32C6, 3473 }, + { 0x32C7, 3476 }, + { 0x32D4, 3479 }, + { 0x32D3, 3482 }, + { 0x32D2, 3485 }, + { 0x32D9, 3488 }, + { 0x32DB, 3491 }, + { 0x32D7, 3494 }, + { 0x32DF, 3497 }, + { 0x32E1, 3500 }, + { 0x32DC, 3503 }, + { 0x32DD, 3506 }, + { 0x3017, 3509 }, + { 0x3015, 3512 }, + { 0x301E, 3515 }, + { 0x301C, 3518 }, + { 0x3027, 3521 }, + { 0x302D, 3524 }, + { 0x33DC, 3527 }, + { 0x33D9, 3530 }, + { 0x33DA, 3533 }, + { 0x33E0, 3536 }, + { 0x33DD, 3539 }, + { 0x33DE, 3542 }, + { 0x33E9, 3545 }, + { 0x33EF, 3548 }, + { 0x3355, 3551 }, + { 0x3360, 3554 }, + { 0x335D, 3557 }, + { 0x335E, 3560 }, + { 0x335C, 3563 }, + { 0x3359, 3566 }, + { 0x335A, 3569 }, + { 0x3358, 3572 }, + { 0x3364, 3575 }, + { 0x3366, 3578 }, + { 0x3361, 3581 }, + { 0x3362, 3584 }, + { 0x336A, 3587 }, + { 0x336C, 3590 }, + { 0x3367, 3593 }, + { 0x3368, 3596 }, + { 0x33A5, 3599 }, + { 0x33A3, 3602 }, + { 0x33B1, 3605 }, + { 0x33B7, 3608 }, + { 0x3387, 3611 }, + { 0x3384, 3614 }, + { 0x3385, 3617 }, + { 0x3392, 3620 }, + { 0x338F, 3623 }, + { 0x3390, 3626 }, + { 0x338E, 3629 }, + { 0x338B, 3632 }, + { 0x338C, 3635 }, + { 0x3389, 3638 }, + { 0x3396, 3641 }, + { 0x3398, 3644 }, + { 0x3393, 3647 }, + { 0x3394, 3650 }, + { 0x339C, 3653 }, + { 0x339E, 3656 }, + { 0x3399, 3659 }, + { 0x339A, 3662 }, + { 0x32E8, 3665 }, + { 0x32E6, 3668 }, + { 0x330D, 3671 }, + { 0x330A, 3674 }, + { 0x330B, 3677 }, + { 0x3314, 3680 }, + { 0x3312, 3683 }, + { 0x3308, 3686 }, + { 0x3306, 3689 }, + { 0x3303, 3692 }, + { 0x3304, 3695 }, + { 0x3311, 3698 }, + { 0x330E, 3701 }, + { 0x330F, 3704 }, + { 0x3318, 3707 }, + { 0x3315, 3710 }, + { 0x3316, 3713 }, + { 0x331C, 3716 }, + { 0x331E, 3719 }, + { 0x3319, 3722 }, + { 0x331A, 3725 }, + { 0x32EF, 3728 }, + { 0x32ED, 3731 }, + { 0x32FB, 3734 }, + { 0x3301, 3737 }, + { 0x30F9, 3740 }, + { 0x30F7, 3743 }, + { 0x3101, 3746 }, + { 0x30FE, 3749 }, + { 0x30FF, 3752 }, + { 0x310D, 3755 }, + { 0x30C2, 3758 }, + { 0x30BF, 3761 }, + { 0x30C0, 3764 }, + { 0x30D1, 3767 }, + { 0x30D7, 3770 }, + { 0x325F, 3773 }, + { 0x325D, 3776 }, + { 0x343D, 3779 }, + { 0x343A, 3782 }, + { 0x343B, 3785 }, + { 0x343E, 3788 }, + { 0x3448, 3791 }, + { 0x3451, 3794 }, + { 0x344E, 3797 }, + { 0x344F, 3800 }, + { 0x3455, 3803 }, + { 0x3452, 3806 }, + { 0x3453, 3809 }, + { 0x345E, 3812 }, + { 0x3464, 3815 }, + { 0x3322, 3818 }, + { 0x331F, 3821 }, + { 0x3320, 3824 }, + { 0x332D, 3827 }, + { 0x332A, 3830 }, + { 0x332B, 3833 }, + { 0x3329, 3836 }, + { 0x3326, 3839 }, + { 0x3327, 3842 }, + { 0x3324, 3845 }, + { 0x3331, 3848 }, + { 0x3333, 3851 }, + { 0x332E, 3854 }, + { 0x332F, 3857 }, + { 0x3337, 3860 }, + { 0x3339, 3863 }, + { 0x3334, 3866 }, + { 0x3335, 3869 }, + { 0x326C, 3872 }, + { 0x326A, 3875 }, + { 0x3273, 3878 }, + { 0x3271, 3881 }, + { 0x327F, 3884 }, + { 0x3285, 3887 }, + { 0x32B4, 3890 }, + { 0x32B1, 3893 }, + { 0x32B2, 3896 }, + { 0x32BA, 3899 }, + { 0x32B8, 3902 }, + { 0x32AF, 3905 }, + { 0x32AC, 3908 }, + { 0x32A9, 3911 }, + { 0x32AA, 3914 }, + { 0x32B7, 3917 }, + { 0x32B5, 3920 }, + { 0x32BD, 3923 }, + { 0x32BF, 3926 }, + { 0x32BB, 3929 }, + { 0x32C3, 3932 }, + { 0x32C5, 3935 }, + { 0x32C0, 3938 }, + { 0x32C1, 3941 }, + { 0x3036, 3944 }, + { 0x3033, 3947 }, + { 0x3034, 3950 }, + { 0x303D, 3953 }, + { 0x303B, 3956 }, + { 0x3049, 3959 }, + { 0x3341, 3962 }, + { 0x333E, 3965 }, + { 0x333F, 3968 }, + { 0x334D, 3971 }, + { 0x3353, 3974 }, + { 0x3115, 3977 }, + { 0x3113, 3980 }, + { 0x311C, 3983 }, + { 0x311A, 3986 }, + { 0x3128, 3989 }, + { 0x31F2, 3992 }, + { 0x31F0, 3995 }, + { 0x31FA, 3998 }, + { 0x31F7, 4001 }, + { 0x31F8, 4004 }, + { 0x3207, 4007 }, + { 0x3176, 4010 }, + { 0x3174, 4013 }, + { 0x317D, 4016 }, + { 0x317B, 4019 }, + { 0x3188, 4022 }, + { 0x318E, 4025 }, + { 0x3070, 4028 }, + { 0x306E, 4031 }, + { 0x3077, 4034 }, + { 0x3075, 4037 }, + { 0x3080, 4040 }, + { 0x3085, 4043 }, + { 0x3148, 4046 }, + { 0x3145, 4049 }, + { 0x3146, 4052 }, + { 0x314D, 4055 }, + { 0x3226, 4058 }, + { 0x3223, 4061 }, + { 0x3224, 4064 }, + { 0x322E, 4067 }, + { 0x322B, 4070 }, + { 0x322C, 4073 }, + { 0x33F8, 4076 }, + { 0x33F5, 4079 }, + { 0x33F6, 4082 }, + { 0x33FB, 4085 }, + { 0x33F9, 4088 }, + { 0x3404, 4091 }, + { 0x3209, 4094 }, + { 0x3211, 4097 }, + { 0x320F, 4100 }, + { 0x321D, 4103 }, + { 0x3055, 4106 }, + { 0x3053, 4109 }, + { 0x3062, 4112 }, + { 0x3068, 4115 }, + { 0x312E, 4118 }, + { 0x313F, 4121 }, + { 0x3238, 4124 }, + { 0x3236, 4127 }, + { 0x323D, 4130 }, + { 0x323E, 4133 }, + { 0x3411, 4136 }, + { 0x340E, 4139 }, + { 0x340F, 4142 }, + { 0x3412, 4145 }, + { 0x341B, 4148 }, + { 0x3421, 4151 }, + { 0x337C, 4154 }, + { 0x3382, 4157 }, + { 0x342A, 4160 }, + { 0x3427, 4163 }, + { 0x3428, 4166 }, + { 0x342D, 4169 }, + { 0x342B, 4172 }, + { 0x32CC, 4175 }, + { 0x32CA, 4178 }, + { 0x32D1, 4181 }, + { 0x32DA, 4184 }, + { 0x32E0, 4187 }, + { 0x3357, 4190 }, + { 0x3365, 4193 }, + { 0x336B, 4196 }, + { 0x338A, 4199 }, + { 0x3388, 4202 }, + { 0x3397, 4205 }, + { 0x339D, 4208 }, + { 0x3309, 4211 }, + { 0x3307, 4214 }, + { 0x331D, 4217 }, + { 0x3325, 4220 }, + { 0x3323, 4223 }, + { 0x3332, 4226 }, + { 0x3338, 4229 }, + { 0x32B0, 4232 }, + { 0x32AD, 4235 }, + { 0x32AE, 4238 }, + { 0x32BE, 4241 }, + { 0x32C4, 4244 }, + { 0x2FEE, 4247 }, + { 0x2258, 4251 }, + { 0x1EA3, 4253 }, + { 0x1F85, 4256 }, + { 0x05B5, 4258 }, + { 0x23FD, 4259 }, + { 0x8FCF, 4262 }, + { 0x1FB4, 4263 }, + { 0x1FAC, 4269 }, + { 0x1FA8, 4275 }, + { 0x1FB8, 4281 }, + { 0x1FC9, 4287 }, + { 0x1FA9, 4293 }, + { 0x1FC2, 4298 }, + { 0x1FB9, 4303 }, + { 0x1FB2, 4308 }, + { 0x1FBB, 4313 }, + { 0x1FCB, 4318 }, + { 0x1FBD, 4322 }, + { 0x1FA5, 4328 }, + { 0x1FA1, 4334 }, + { 0x1FC8, 4340 }, + { 0x1FCA, 4346 }, + { 0x1FCF, 4350 }, + { 0x1FBE, 4355 }, + { 0x1FEC, 4361 }, + { 0x1FAA, 4365 }, + { 0x1FAB, 4371 }, + { 0x1F92, 4376 }, + { 0x1FC6, 4381 }, + { 0x1FA3, 4387 }, + { 0x1FB7, 4393 }, + { 0x1FA4, 4398 }, + { 0x1F8F, 4403 }, + { 0x1F98, 4408 }, + { 0x1F93, 4413 }, + { 0x1F90, 4418 }, + { 0x1F91, 4423 }, + { 0x1FA7, 4428 }, + { 0x1FC7, 4434 }, + { 0x1F99, 4439 }, + { 0x1FAE, 4444 }, + { 0x1F9E, 4450 }, + { 0x1F9A, 4456 }, + { 0x1F9F, 4461 }, + { 0x1F9B, 4467 }, + { 0x1FBA, 4472 }, + { 0x1FD1, 4477 }, + { 0x1FCD, 4481 }, + { 0x1FC1, 4486 }, + { 0x1FA2, 4491 }, + { 0x1FB0, 4496 }, + { 0x1FCC, 4501 }, + { 0x1FD0, 4505 }, + { 0x1FB5, 4510 }, + { 0x1FAF, 4515 }, + { 0x1F96, 4520 }, + { 0x1FC4, 4525 }, + { 0x1FBF, 4530 }, + { 0x1FC3, 4535 }, + { 0x1F95, 4539 }, + { 0x1FB6, 4544 }, + { 0x1F94, 4549 }, + { 0x1FB3, 4554 }, + { 0x1FA0, 4559 }, + { 0x1FBC, 4564 }, + { 0x1F8D, 4569 }, + { 0x1F8E, 4573 }, + { 0x1FB1, 4578 }, + { 0x1FCE, 4583 }, + { 0x1FA6, 4588 }, + { 0x1F97, 4593 }, + { 0x1FAD, 4598 }, + { 0x1F9C, 4603 }, + { 0x1FC5, 4608 }, + { 0x1F9D, 4613 }, + { 0x1FC0, 4618 }, + { 0x1F69, 4623 }, + { 0x95AB, 4624 }, + { 0x952A, 4625 }, + { 0x907D, 4628 }, + { 0x94B5, 4630 }, + { 0x9282, 4631 }, + { 0x1D91, 4632 }, + { 0x2625, 4634 }, + { 0x2624, 4637 }, + { 0x3EF9, 4639 }, + { 0x8FAC, 4640 }, + { 0x216C, 4643 }, + { 0x2152, 4651 }, + { 0x2146, 4659 }, + { 0x214A, 4666 }, + { 0x2142, 4674 }, + { 0x2164, 4681 }, + { 0x2174, 4688 }, + { 0x2156, 4696 }, + { 0x2145, 4704 }, + { 0x214E, 4711 }, + { 0x2141, 4719 }, + { 0x2163, 4726 }, + { 0x2188, 4733 }, + { 0x2185, 4740 }, + { 0x2194, 4747 }, + { 0x2187, 4754 }, + { 0x2184, 4761 }, + { 0x2193, 4768 }, + { 0x216D, 4775 }, + { 0x2153, 4783 }, + { 0x213E, 4791 }, + { 0x214B, 4798 }, + { 0x213A, 4806 }, + { 0x215C, 4813 }, + { 0x2173, 4820 }, + { 0x2155, 4828 }, + { 0x213D, 4836 }, + { 0x214D, 4843 }, + { 0x2139, 4851 }, + { 0x215B, 4858 }, + { 0x2182, 4865 }, + { 0x217F, 4872 }, + { 0x2191, 4879 }, + { 0x2181, 4886 }, + { 0x217E, 4893 }, + { 0x2190, 4900 }, + { 0x216F, 4907 }, + { 0x2171, 4916 }, + { 0x2161, 4925 }, + { 0x2159, 4933 }, + { 0x2169, 4941 }, + { 0x2166, 4949 }, + { 0x215E, 4957 }, + { 0x2176, 4965 }, + { 0x21A5, 4973 }, + { 0x2147, 4977 }, + { 0x21AB, 4983 }, + { 0x2143, 4990 }, + { 0x2167, 4996 }, + { 0x21A7, 5002 }, + { 0x213F, 5006 }, + { 0x213B, 5012 }, + { 0x215F, 5018 }, + { 0x21A4, 5024 }, + { 0x21AA, 5028 }, + { 0x21A6, 5035 }, + { 0x217B, 5039 }, + { 0x2179, 5045 }, + { 0x2133, 5051 }, + { 0x2131, 5057 }, + { 0x212F, 5063 }, + { 0x2157, 5067 }, + { 0x214F, 5073 }, + { 0x2177, 5079 }, + { 0x2137, 5085 }, + { 0x2135, 5091 }, + { 0x212D, 5097 }, + { 0x21A1, 5101 }, + { 0x2144, 5105 }, + { 0x21A9, 5111 }, + { 0x2140, 5118 }, + { 0x2160, 5124 }, + { 0x219B, 5130 }, + { 0x219C, 5137 }, + { 0x219A, 5144 }, + { 0x2199, 5151 }, + { 0x7C64, 5158 }, + { 0x21A3, 5165 }, + { 0x213C, 5169 }, + { 0x2138, 5175 }, + { 0x2158, 5181 }, + { 0x21A0, 5187 }, + { 0x21A8, 5191 }, + { 0x21A2, 5198 }, + { 0x7C65, 5202 }, + { 0x217A, 5209 }, + { 0x2178, 5215 }, + { 0x2132, 5221 }, + { 0x2130, 5227 }, + { 0x219F, 5233 }, + { 0x96DF, 5238 }, + { 0x96DB, 5250 }, + { 0x219E, 5262 }, + { 0x96D5, 5271 }, + { 0x96DD, 5280 }, + { 0x96D3, 5292 }, + { 0x96E0, 5301 }, + { 0x96DC, 5313 }, + { 0x96D9, 5325 }, + { 0x219D, 5337 }, + { 0x96D7, 5346 }, + { 0x96D2, 5355 }, + { 0x96DE, 5364 }, + { 0x96DA, 5376 }, + { 0x96D8, 5388 }, + { 0x96D6, 5397 }, + { 0x96A1, 5406 }, + { 0x96A5, 5415 }, + { 0x96AC, 5427 }, + { 0x96A9, 5442 }, + { 0x96A2, 5457 }, + { 0x96A6, 5466 }, + { 0x96AB, 5478 }, + { 0x96AA, 5493 }, + { 0x96D4, 5508 }, + { 0x96A3, 5517 }, + { 0x96A7, 5526 }, + { 0x96A8, 5538 }, + { 0x96AD, 5550 }, + { 0x96D1, 5565 }, + { 0x96A4, 5574 }, + { 0x96AE, 5583 }, + { 0x96AF, 5598 }, + { 0x212E, 5603 }, + { 0x7E59, 5607 }, + { 0x7E57, 5614 }, + { 0x2150, 5621 }, + { 0x2148, 5627 }, + { 0x7E5A, 5633 }, + { 0x7E58, 5640 }, + { 0x2168, 5647 }, + { 0x2136, 5653 }, + { 0x2134, 5659 }, + { 0x212C, 5665 }, + { 0x7C63, 5669 }, + { 0x7C62, 5676 }, + { 0x96B0, 5683 }, + { 0x2170, 5690 }, + { 0x2172, 5699 }, + { 0x2162, 5708 }, + { 0x215A, 5716 }, + { 0x216A, 5724 }, + { 0x2165, 5732 }, + { 0x215D, 5740 }, + { 0x2175, 5748 }, + { 0x2189, 5756 }, + { 0x2186, 5762 }, + { 0x2195, 5768 }, + { 0x2183, 5774 }, + { 0x2180, 5780 }, + { 0x2192, 5786 }, + { 0x7E4A, 5792 }, + { 0x7C67, 5804 }, + { 0x7E4B, 5813 }, + { 0x7C66, 5825 }, + { 0x217D, 5834 }, + { 0x218F, 5838 }, + { 0x218C, 5844 }, + { 0x2198, 5850 }, + { 0x217C, 5856 }, + { 0x2154, 5860 }, + { 0x214C, 5867 }, + { 0x216E, 5874 }, + { 0x2151, 5881 }, + { 0x2149, 5888 }, + { 0x216B, 5895 }, + { 0x218E, 5902 }, + { 0x218B, 5909 }, + { 0x2197, 5916 }, + { 0x218D, 5923 }, + { 0x218A, 5930 }, + { 0x2196, 5937 }, + { 0x9019, 5944 }, + { 0x8FCE, 5945 }, + { 0x923F, 5946 }, + { 0x9242, 5947 }, + { 0x22FC, 5949 }, + { 0x8FBB, 5951 }, + { 0x8FE4, 5952 }, + { 0x91EF, 5954 }, + { 0x91EC, 5959 }, + { 0x030E, 5965 }, + { 0x2253, 5966 }, + { 0x2D77, 5968 }, + { 0x2D73, 5971 }, + { 0x2D72, 5974 }, + { 0x2D75, 5977 }, + { 0x2D86, 5980 }, + { 0x2D74, 5983 }, + { 0x2D63, 5986 }, + { 0x2D79, 5989 }, + { 0x2D6A, 5992 }, + { 0x2D78, 5995 }, + { 0x2D7E, 5998 }, + { 0x2D85, 6001 }, + { 0x2D7F, 6004 }, + { 0x2D7D, 6007 }, + { 0x2D76, 6010 }, + { 0x2D7C, 6013 }, + { 0x2D67, 6016 }, + { 0x2D7A, 6019 }, + { 0x2D80, 6022 }, + { 0x2D64, 6025 }, + { 0x2D65, 6028 }, + { 0x2D66, 6031 }, + { 0x2D87, 6034 }, + { 0x2D69, 6037 }, + { 0x2D6D, 6040 }, + { 0x2D70, 6043 }, + { 0x2D68, 6046 }, + { 0x2D82, 6049 }, + { 0x2D7B, 6052 }, + { 0x2D88, 6055 }, + { 0x2D81, 6058 }, + { 0x2D6F, 6061 }, + { 0x2D83, 6064 }, + { 0x2D6B, 6067 }, + { 0x2D6E, 6070 }, + { 0x2D71, 6073 }, + { 0x2D6C, 6076 }, + { 0x2D84, 6079 }, + { 0x2A5A, 6082 }, + { 0x2A7A, 6085 }, + { 0x2A7B, 6088 }, + { 0x2AB0, 6091 }, + { 0x2AB1, 6095 }, + { 0x2AB2, 6099 }, + { 0x2A8B, 6103 }, + { 0x2A7E, 6106 }, + { 0x2A84, 6109 }, + { 0x2A85, 6113 }, + { 0x2A87, 6117 }, + { 0x2A86, 6121 }, + { 0x2A8C, 6125 }, + { 0x2A77, 6128 }, + { 0x2A78, 6132 }, + { 0x2A8A, 6136 }, + { 0x2A6D, 6139 }, + { 0x2A6F, 6142 }, + { 0x2AAB, 6145 }, + { 0x2A7D, 6148 }, + { 0x2AB6, 6153 }, + { 0x2AA2, 6156 }, + { 0x2A76, 6159 }, + { 0x2A9D, 6162 }, + { 0x2A6C, 6165 }, + { 0x2AB4, 6168 }, + { 0x2A9A, 6171 }, + { 0x2A7C, 6174 }, + { 0x2A62, 6177 }, + { 0x2A63, 6181 }, + { 0x2A65, 6185 }, + { 0x2A64, 6189 }, + { 0x2AA4, 6193 }, + { 0x2AA5, 6197 }, + { 0x2A8F, 6201 }, + { 0x2A88, 6204 }, + { 0x2A70, 6207 }, + { 0x2AAA, 6210 }, + { 0x2A5F, 6213 }, + { 0x2A82, 6216 }, + { 0x2AA0, 6219 }, + { 0x2AA1, 6223 }, + { 0x2A96, 6227 }, + { 0x2A97, 6231 }, + { 0x2A8D, 6235 }, + { 0x2A8E, 6239 }, + { 0x2A6E, 6243 }, + { 0x2A55, 6246 }, + { 0x2A71, 6249 }, + { 0x2AB7, 6252 }, + { 0x2A91, 6255 }, + { 0x2A92, 6259 }, + { 0x2A93, 6263 }, + { 0x2A6A, 6267 }, + { 0x2A6B, 6271 }, + { 0x2A5C, 6275 }, + { 0x2A5D, 6279 }, + { 0x2AA8, 6283 }, + { 0x2AA9, 6287 }, + { 0x2A89, 6291 }, + { 0x2A60, 6294 }, + { 0x2A61, 6298 }, + { 0x2A66, 6302 }, + { 0x2A68, 6305 }, + { 0x2A69, 6309 }, + { 0x2A5B, 6313 }, + { 0x2A94, 6316 }, + { 0x2A74, 6319 }, + { 0x2A75, 6323 }, + { 0x2A81, 6327 }, + { 0x2A90, 6330 }, + { 0x2A72, 6333 }, + { 0x2A59, 6336 }, + { 0x2A54, 6339 }, + { 0x2A56, 6342 }, + { 0x2A57, 6346 }, + { 0x2A58, 6350 }, + { 0x2A7F, 6354 }, + { 0x2A80, 6358 }, + { 0x2A67, 6362 }, + { 0x2AC4, 6365 }, + { 0x2A95, 6368 }, + { 0x2A73, 6371 }, + { 0x2A5E, 6374 }, + { 0x2A79, 6377 }, + { 0x2A99, 6383 }, + { 0x2A9F, 6387 }, + { 0x2ABB, 6391 }, + { 0x2ABC, 6395 }, + { 0x2AB3, 6399 }, + { 0x2AAF, 6403 }, + { 0x2A98, 6407 }, + { 0x2AB9, 6411 }, + { 0x2A9E, 6415 }, + { 0x2ABF, 6419 }, + { 0x2AB8, 6423 }, + { 0x2ABD, 6427 }, + { 0x2AA7, 6431 }, + { 0x2AA3, 6435 }, + { 0x2AAD, 6439 }, + { 0x2AA6, 6443 }, + { 0x2ABA, 6447 }, + { 0x2A83, 6451 }, + { 0x2AAE, 6455 }, + { 0x2AB5, 6459 }, + { 0x2A9C, 6463 }, + { 0x2AC1, 6467 }, + { 0x2AC3, 6471 }, + { 0x2A9B, 6475 }, + { 0x2AAC, 6479 }, + { 0x2AC6, 6484 }, + { 0x2ABE, 6488 }, + { 0x2AC0, 6492 }, + { 0x2AC2, 6496 }, + { 0x2AC5, 6500 }, + { 0x3B63, 6504 }, + { 0x3B64, 6507 }, + { 0x3B65, 6510 }, + { 0x3B66, 6513 }, + { 0x3B67, 6516 }, + { 0x8FB7, 6519 }, + { 0x8FE1, 6520 }, + { 0x232A, 6522 }, + { 0x9492, 6526 }, + { 0x9497, 6529 }, + { 0x22AC, 6532 }, + { 0x22AD, 6534 }, + { 0x22AE, 6536 }, + { 0x22AF, 6538 }, + { 0x22B0, 6540 }, + { 0x22B1, 6542 }, + { 0x951A, 6544 }, + { 0x8FC8, 6547 }, + { 0x8FE9, 6548 }, + { 0x1E6B, 6550 }, + { 0x0298, 6552 }, + { 0x1E8F, 6554 }, + { 0x1F1C, 6556 }, + { 0x9073, 6558 }, + { 0x8FF5, 6559 }, + { 0x8EF1, 6560 }, + { 0x8EF0, 6563 }, + { 0x94E9, 6566 }, + { 0x9488, 6570 }, + { 0x950B, 6571 }, + { 0x1E65, 6572 }, + { 0x90CD, 6575 }, + { 0x8FF4, 6580 }, + { 0x916A, 6581 }, + { 0x9093, 6583 }, + { 0x95C8, 6585 }, + { 0x8EDE, 6586 }, + { 0x1E57, 6587 }, + { 0x94B8, 6589 }, + { 0x1CE7, 6591 }, + { 0x9041, 6592 }, + { 0x8EE0, 6594 }, + { 0x8EE9, 6596 }, + { 0x2294, 6598 }, + { 0x2241, 6600 }, + { 0x9289, 6602 }, + { 0x94F8, 6603 }, + { 0x8F1B, 6605 }, + { 0x2324, 6607 }, + { 0x8F85, 6609 }, + { 0x9032, 6614 }, + { 0x95EA, 6615 }, + { 0x90C4, 6616 }, + { 0x1D26, 6617 }, + { 0x94AA, 6619 }, + { 0x0CDA, 6621 }, + { 0x0CD9, 6624 }, + { 0x0CC7, 6627 }, + { 0x0CBE, 6630 }, + { 0x0CC8, 6634 }, + { 0x0CCA, 6638 }, + { 0x0CC9, 6642 }, + { 0x0CCB, 6646 }, + { 0x0CD0, 6650 }, + { 0x0CD5, 6653 }, + { 0x0CD1, 6656 }, + { 0x0CD4, 6659 }, + { 0x0CD3, 6662 }, + { 0x0CD8, 6665 }, + { 0x0CCF, 6668 }, + { 0x0CD7, 6671 }, + { 0x0CD6, 6674 }, + { 0x0CD2, 6677 }, + { 0x0CB4, 6680 }, + { 0x0CC2, 6684 }, + { 0x0CB8, 6688 }, + { 0x0CC4, 6692 }, + { 0x0CBC, 6696 }, + { 0x0CBA, 6700 }, + { 0x0CB6, 6704 }, + { 0x0CC6, 6708 }, + { 0x0CB7, 6712 }, + { 0x0CC5, 6716 }, + { 0x0CC3, 6720 }, + { 0x0CB9, 6724 }, + { 0x0CBD, 6728 }, + { 0x0CBB, 6732 }, + { 0x0CB5, 6736 }, + { 0x0CBF, 6741 }, + { 0x0CB1, 6746 }, + { 0x0CA0, 6749 }, + { 0x0C8F, 6752 }, + { 0x0C9A, 6755 }, + { 0x0CA5, 6758 }, + { 0x0CA3, 6762 }, + { 0x0CA3, 6766 }, + { 0x0CA5, 6770 }, + { 0x0CB2, 6774 }, + { 0x0CAF, 6778 }, + { 0x0C8A, 6782 }, + { 0x0CAA, 6785 }, + { 0x0CA9, 6788 }, + { 0x0CAA, 6792 }, + { 0x0CA7, 6796 }, + { 0x0C9F, 6799 }, + { 0x0CA1, 6802 }, + { 0x0CA9, 6805 }, + { 0x0C91, 6808 }, + { 0x0CAE, 6812 }, + { 0x0C9B, 6816 }, + { 0x0CAB, 6819 }, + { 0x0CA8, 6822 }, + { 0x0C8C, 6825 }, + { 0x0C8B, 6829 }, + { 0x0C8E, 6833 }, + { 0x0C93, 6836 }, + { 0x0CA4, 6839 }, + { 0x0CA2, 6843 }, + { 0x0C9D, 6847 }, + { 0x0C9C, 6851 }, + { 0x0CDB, 6855 }, + { 0x0CDC, 6859 }, + { 0x0CA6, 6863 }, + { 0x0C90, 6867 }, + { 0x0C97, 6871 }, + { 0x0C9E, 6875 }, + { 0x0C8D, 6879 }, + { 0x0C92, 6883 }, + { 0x0CB0, 6887 }, + { 0x0C99, 6891 }, + { 0x0C94, 6895 }, + { 0x0C95, 6899 }, + { 0x0C98, 6903 }, + { 0x0C96, 6907 }, + { 0x0CAC, 6911 }, + { 0x0CAD, 6915 }, + { 0x0CB3, 6919 }, + { 0x0CCE, 6921 }, + { 0x0CCD, 6923 }, + { 0x0CC0, 6925 }, + { 0x0CC1, 6929 }, + { 0x0CCC, 6933 }, + { 0x94E3, 6936 }, + { 0x2278, 6937 }, + { 0x931D, 6938 }, + { 0x003F, 6941 }, + { 0x2BCC, 6943 }, + { 0x2A3D, 6948 }, + { 0x2A3E, 6950 }, + { 0x95C3, 6954 }, + { 0x1CCE, 6956 }, + { 0x90B8, 6958 }, + { 0x1CAA, 6961 }, + { 0x1CE5, 6962 }, + { 0x1C8E, 6963 }, + { 0x1CAD, 6964 }, + { 0x901B, 6965 }, + { 0x9463, 6966 }, + { 0x9127, 6969 }, + { 0x901E, 6974 }, + { 0x9025, 6979 }, + { 0x9026, 6984 }, + { 0x912D, 6987 }, + { 0x231B, 6989 }, + { 0x71E9, 6993 }, + { 0x71E0, 6995 }, + { 0x71E5, 6998 }, + { 0x71E1, 7001 }, + { 0x71E4, 7004 }, + { 0x71E3, 7007 }, + { 0x71E8, 7010 }, + { 0x71DF, 7013 }, + { 0x71E7, 7016 }, + { 0x71E6, 7019 }, + { 0x71E2, 7022 }, + { 0x71EA, 7025 }, + { 0x71C6, 7028 }, + { 0x71D8, 7031 }, + { 0x71D2, 7034 }, + { 0x71C4, 7037 }, + { 0x71C5, 7040 }, + { 0x71D6, 7043 }, + { 0x71D9, 7046 }, + { 0x71DB, 7049 }, + { 0x71CD, 7052 }, + { 0x71D1, 7055 }, + { 0x71D0, 7058 }, + { 0x71DD, 7061 }, + { 0x71D3, 7064 }, + { 0x71C0, 7067 }, + { 0x71D7, 7070 }, + { 0x71C2, 7073 }, + { 0x71CB, 7076 }, + { 0x71CA, 7079 }, + { 0x71DC, 7082 }, + { 0x71C9, 7085 }, + { 0x71DA, 7088 }, + { 0x71C3, 7091 }, + { 0x71C1, 7094 }, + { 0x71CF, 7097 }, + { 0x71C7, 7100 }, + { 0x71D4, 7103 }, + { 0x71DE, 7106 }, + { 0x71C8, 7109 }, + { 0x71CE, 7112 }, + { 0x71D5, 7115 }, + { 0x71CC, 7118 }, + { 0x154E, 7121 }, + { 0x8A38, 7122 }, + { 0x8A35, 7126 }, + { 0x8A36, 7130 }, + { 0x8A39, 7134 }, + { 0x8A37, 7138 }, + { 0x8A3B, 7142 }, + { 0x8A40, 7146 }, + { 0x8A3C, 7150 }, + { 0x8A3F, 7154 }, + { 0x8A3E, 7158 }, + { 0x8A43, 7162 }, + { 0x8A3A, 7166 }, + { 0x8A42, 7170 }, + { 0x8A41, 7174 }, + { 0x8A3D, 7178 }, + { 0x8A1F, 7182 }, + { 0x8A2E, 7186 }, + { 0x8A24, 7190 }, + { 0x8A1A, 7194 }, + { 0x8A29, 7198 }, + { 0x8A21, 7202 }, + { 0x8A23, 7206 }, + { 0x8A20, 7210 }, + { 0x8A30, 7214 }, + { 0x8A31, 7218 }, + { 0x8A32, 7222 }, + { 0x8A28, 7226 }, + { 0x8A25, 7230 }, + { 0x8A27, 7234 }, + { 0x8A1C, 7238 }, + { 0x8A1B, 7242 }, + { 0x8A1D, 7246 }, + { 0x8A2A, 7250 }, + { 0x8A2B, 7254 }, + { 0x8A2C, 7258 }, + { 0x8A2D, 7262 }, + { 0x8A22, 7266 }, + { 0x8A34, 7270 }, + { 0x8A2F, 7274 }, + { 0x8A33, 7278 }, + { 0x8A26, 7282 }, + { 0x8A1E, 7286 }, + { 0x16DC, 7290 }, + { 0x16DD, 7295 }, + { 0x16DB, 7300 }, + { 0x16CF, 7306 }, + { 0x16D0, 7311 }, + { 0x16D2, 7316 }, + { 0x16D7, 7321 }, + { 0x16D3, 7326 }, + { 0x16D6, 7331 }, + { 0x16D5, 7336 }, + { 0x16DA, 7341 }, + { 0x16D1, 7346 }, + { 0x16D9, 7351 }, + { 0x16D8, 7356 }, + { 0x16D4, 7361 }, + { 0x16BC, 7366 }, + { 0x16BE, 7372 }, + { 0x16BA, 7378 }, + { 0x16B8, 7384 }, + { 0x16BD, 7390 }, + { 0x16C1, 7396 }, + { 0x16B9, 7402 }, + { 0x16C7, 7408 }, + { 0x16BF, 7414 }, + { 0x16C4, 7420 }, + { 0x16C0, 7426 }, + { 0x16BB, 7432 }, + { 0x16C3, 7438 }, + { 0x16C2, 7444 }, + { 0x16C5, 7450 }, + { 0x16C6, 7456 }, + { 0x16B7, 7462 }, + { 0x16B0, 7469 }, + { 0x16AF, 7475 }, + { 0x16A8, 7481 }, + { 0x16AE, 7487 }, + { 0x1690, 7493 }, + { 0x16AA, 7499 }, + { 0x16A4, 7505 }, + { 0x169E, 7511 }, + { 0x16A2, 7517 }, + { 0x168C, 7523 }, + { 0x1697, 7529 }, + { 0x169C, 7535 }, + { 0x16A9, 7541 }, + { 0x1691, 7547 }, + { 0x1698, 7553 }, + { 0x16B3, 7559 }, + { 0x1692, 7565 }, + { 0x16A3, 7571 }, + { 0x16B6, 7577 }, + { 0x169D, 7583 }, + { 0x1696, 7589 }, + { 0x16B4, 7595 }, + { 0x16AD, 7601 }, + { 0x16AC, 7607 }, + { 0x16A5, 7613 }, + { 0x16AB, 7619 }, + { 0x168D, 7625 }, + { 0x16A7, 7631 }, + { 0x16A1, 7637 }, + { 0x169B, 7643 }, + { 0x169F, 7649 }, + { 0x168B, 7655 }, + { 0x1694, 7661 }, + { 0x1699, 7667 }, + { 0x16A6, 7673 }, + { 0x168E, 7679 }, + { 0x1695, 7685 }, + { 0x16B1, 7691 }, + { 0x168F, 7697 }, + { 0x16A0, 7703 }, + { 0x16B5, 7709 }, + { 0x169A, 7715 }, + { 0x1693, 7721 }, + { 0x16B2, 7727 }, + { 0x16CE, 7733 }, + { 0x16CD, 7739 }, + { 0x16CC, 7745 }, + { 0x16CB, 7751 }, + { 0x16CA, 7757 }, + { 0x16C8, 7763 }, + { 0x16C9, 7769 }, + { 0x8ECD, 7775 }, + { 0x8EC4, 7779 }, + { 0x1D23, 7782 }, + { 0x077D, 7785 }, + { 0x077C, 7789 }, + { 0x0780, 7793 }, + { 0x0749, 7795 }, + { 0x074E, 7798 }, + { 0x074A, 7801 }, + { 0x074D, 7804 }, + { 0x074C, 7807 }, + { 0x0751, 7810 }, + { 0x0748, 7813 }, + { 0x0750, 7816 }, + { 0x074F, 7819 }, + { 0x074B, 7822 }, + { 0x0785, 7825 }, + { 0x0784, 7828 }, + { 0x0752, 7831 }, + { 0x0755, 7834 }, + { 0x0754, 7837 }, + { 0x075A, 7840 }, + { 0x0758, 7843 }, + { 0x0756, 7846 }, + { 0x075B, 7849 }, + { 0x0760, 7852 }, + { 0x0753, 7855 }, + { 0x0765, 7858 }, + { 0x076C, 7861 }, + { 0x075E, 7864 }, + { 0x0766, 7867 }, + { 0x0767, 7870 }, + { 0x0769, 7873 }, + { 0x076B, 7876 }, + { 0x0768, 7879 }, + { 0x0757, 7883 }, + { 0x075C, 7886 }, + { 0x0761, 7889 }, + { 0x0763, 7892 }, + { 0x075D, 7895 }, + { 0x076D, 7898 }, + { 0x076E, 7901 }, + { 0x075F, 7904 }, + { 0x0764, 7907 }, + { 0x076A, 7910 }, + { 0x076F, 7913 }, + { 0x0762, 7917 }, + { 0x0770, 7920 }, + { 0x0772, 7924 }, + { 0x0771, 7928 }, + { 0x0759, 7932 }, + { 0x077E, 7935 }, + { 0x077F, 7939 }, + { 0x0778, 7942 }, + { 0x0777, 7947 }, + { 0x0779, 7952 }, + { 0x0776, 7957 }, + { 0x0774, 7962 }, + { 0x0773, 7967 }, + { 0x0775, 7972 }, + { 0x077B, 7977 }, + { 0x077A, 7982 }, + { 0x0783, 7986 }, + { 0x0782, 7988 }, + { 0x0781, 7990 }, + { 0x1F14, 7993 }, + { 0x1EDB, 7994 }, + { 0x1EDC, 7998 }, + { 0x1E60, 8002 }, + { 0x006B, 8006 }, + { 0x1F04, 8008 }, + { 0x1FD2, 8010 }, + { 0x1EB7, 8013 }, + { 0x1E98, 8016 }, + { 0x1EA0, 8018 }, + { 0x1F41, 8022 }, + { 0x1F43, 8026 }, + { 0x1F39, 8033 }, + { 0x1F3A, 8040 }, + { 0x1E7D, 8047 }, + { 0x1EB9, 8050 }, + { 0x1EC5, 8053 }, + { 0x1EC4, 8055 }, + { 0x1EC6, 8058 }, + { 0x1E9B, 8060 }, + { 0x7C57, 8064 }, + { 0x90DC, 8066 }, + { 0x2086, 8069 }, + { 0x2085, 8072 }, + { 0x2089, 8075 }, + { 0x2083, 8077 }, + { 0x2081, 8079 }, + { 0x2082, 8081 }, + { 0x2088, 8083 }, + { 0x2087, 8087 }, + { 0x208B, 8091 }, + { 0x208A, 8094 }, + { 0x2084, 8098 }, + { 0x1D81, 8101 }, + { 0x9291, 8103 }, + { 0x9190, 8105 }, + { 0x47D4, 8107 }, + { 0x47CA, 8112 }, + { 0x47D5, 8117 }, + { 0x47D7, 8122 }, + { 0x47D2, 8127 }, + { 0x47C4, 8132 }, + { 0x47C2, 8137 }, + { 0x47CD, 8142 }, + { 0x47C3, 8147 }, + { 0x47C6, 8152 }, + { 0x47C9, 8157 }, + { 0x47D0, 8162 }, + { 0x47D9, 8167 }, + { 0x47CB, 8172 }, + { 0x47C7, 8177 }, + { 0x47DC, 8182 }, + { 0x47DE, 8187 }, + { 0x47D3, 8192 }, + { 0x47CC, 8197 }, + { 0x47C8, 8202 }, + { 0x47D1, 8207 }, + { 0x47D6, 8212 }, + { 0x47CF, 8217 }, + { 0x47C5, 8222 }, + { 0x47CE, 8227 }, + { 0x47DB, 8232 }, + { 0x47DD, 8237 }, + { 0x47DA, 8242 }, + { 0x47D8, 8247 }, + { 0x47DF, 8252 }, + { 0x47E0, 8257 }, + { 0x47E1, 8262 }, + { 0x47B2, 8267 }, + { 0x47A2, 8272 }, + { 0x47B4, 8277 }, + { 0x47A5, 8282 }, + { 0x47AE, 8287 }, + { 0x47AC, 8292 }, + { 0x47AB, 8297 }, + { 0x47A7, 8302 }, + { 0x47B3, 8307 }, + { 0x47AA, 8312 }, + { 0x47A4, 8317 }, + { 0x47AD, 8322 }, + { 0x47A6, 8327 }, + { 0x47A9, 8332 }, + { 0x47A8, 8337 }, + { 0x47B9, 8342 }, + { 0x47BD, 8347 }, + { 0x47BC, 8352 }, + { 0x47BA, 8357 }, + { 0x47B8, 8362 }, + { 0x47B6, 8367 }, + { 0x47AF, 8372 }, + { 0x47B0, 8377 }, + { 0x47BE, 8382 }, + { 0x47B7, 8387 }, + { 0x47B5, 8392 }, + { 0x47A3, 8397 }, + { 0x47B1, 8402 }, + { 0x47BB, 8407 }, + { 0x47BF, 8412 }, + { 0x47C0, 8417 }, + { 0x47C1, 8422 }, + { 0x41E1, 8427 }, + { 0x41E5, 8431 }, + { 0x41EA, 8435 }, + { 0x41F0, 8439 }, + { 0x41F7, 8443 }, + { 0x41E2, 8447 }, + { 0x41E4, 8451 }, + { 0x41FB, 8455 }, + { 0x41EC, 8459 }, + { 0x41ED, 8463 }, + { 0x41EE, 8467 }, + { 0x41F4, 8471 }, + { 0x41F5, 8475 }, + { 0x41E8, 8479 }, + { 0x41FE, 8483 }, + { 0x41EB, 8487 }, + { 0x41E3, 8491 }, + { 0x41F3, 8495 }, + { 0x41F1, 8499 }, + { 0x41F6, 8503 }, + { 0x41FF, 8507 }, + { 0x41E6, 8511 }, + { 0x4205, 8515 }, + { 0x41E7, 8519 }, + { 0x41FD, 8523 }, + { 0x41F8, 8527 }, + { 0x41FC, 8531 }, + { 0x41EF, 8535 }, + { 0x4200, 8539 }, + { 0x41FA, 8543 }, + { 0x41F9, 8547 }, + { 0x41F2, 8551 }, + { 0x41E9, 8555 }, + { 0x4206, 8559 }, + { 0x4207, 8564 }, + { 0x4201, 8569 }, + { 0x4203, 8573 }, + { 0x4202, 8577 }, + { 0x4204, 8581 }, + { 0x4227, 8585 }, + { 0x422C, 8589 }, + { 0x423C, 8593 }, + { 0x4236, 8597 }, + { 0x4223, 8601 }, + { 0x423E, 8605 }, + { 0x423F, 8609 }, + { 0x4248, 8613 }, + { 0x4245, 8617 }, + { 0x423D, 8621 }, + { 0x4247, 8625 }, + { 0x4246, 8629 }, + { 0x4224, 8633 }, + { 0x4226, 8637 }, + { 0x4225, 8641 }, + { 0x422E, 8645 }, + { 0x4233, 8649 }, + { 0x4234, 8653 }, + { 0x4235, 8657 }, + { 0x4241, 8661 }, + { 0x4244, 8665 }, + { 0x4242, 8669 }, + { 0x423A, 8673 }, + { 0x422D, 8677 }, + { 0x4232, 8681 }, + { 0x4240, 8685 }, + { 0x4231, 8689 }, + { 0x4243, 8693 }, + { 0x423B, 8697 }, + { 0x422A, 8701 }, + { 0x4228, 8705 }, + { 0x4237, 8709 }, + { 0x4229, 8713 }, + { 0x422B, 8717 }, + { 0x422F, 8721 }, + { 0x4230, 8725 }, + { 0x4238, 8729 }, + { 0x4239, 8733 }, + { 0x48A8, 8737 }, + { 0x48AB, 8742 }, + { 0x48AE, 8747 }, + { 0x48B1, 8752 }, + { 0x48B9, 8757 }, + { 0x48B5, 8762 }, + { 0x48C6, 8767 }, + { 0x48CB, 8772 }, + { 0x48DC, 8777 }, + { 0x48E2, 8782 }, + { 0x48E5, 8787 }, + { 0x48EB, 8792 }, + { 0x48BE, 8797 }, + { 0x48DA, 8802 }, + { 0x48CA, 8807 }, + { 0x48D7, 8812 }, + { 0x48BC, 8817 }, + { 0x48D9, 8822 }, + { 0x48DE, 8827 }, + { 0x48AF, 8832 }, + { 0x48D8, 8837 }, + { 0x48E0, 8842 }, + { 0x48EF, 8847 }, + { 0x48B3, 8852 }, + { 0x48BB, 8857 }, + { 0x48B7, 8862 }, + { 0x48C2, 8867 }, + { 0x48C8, 8872 }, + { 0x48CC, 8877 }, + { 0x48E4, 8882 }, + { 0x48E6, 8887 }, + { 0x48ED, 8892 }, + { 0x48C0, 8897 }, + { 0x48E7, 8902 }, + { 0x48C9, 8907 }, + { 0x48D0, 8912 }, + { 0x48D5, 8917 }, + { 0x48CE, 8922 }, + { 0x48D2, 8927 }, + { 0x48E9, 8932 }, + { 0x48C4, 8937 }, + { 0x48F0, 8942 }, + { 0x48A9, 8947 }, + { 0x48AD, 8952 }, + { 0x48AC, 8957 }, + { 0x48B2, 8962 }, + { 0x48BA, 8967 }, + { 0x48AA, 8972 }, + { 0x48B6, 8977 }, + { 0x48C7, 8982 }, + { 0x48DD, 8987 }, + { 0x48E3, 8992 }, + { 0x48EC, 8997 }, + { 0x48BF, 9002 }, + { 0x48DB, 9007 }, + { 0x48BD, 9012 }, + { 0x48DF, 9017 }, + { 0x48B0, 9022 }, + { 0x48E1, 9027 }, + { 0x48B4, 9032 }, + { 0x48B8, 9037 }, + { 0x48C3, 9042 }, + { 0x48CD, 9047 }, + { 0x48EE, 9052 }, + { 0x48C1, 9057 }, + { 0x48D4, 9062 }, + { 0x48E8, 9067 }, + { 0x48D1, 9072 }, + { 0x48CF, 9077 }, + { 0x48D3, 9082 }, + { 0x48EA, 9087 }, + { 0x48C5, 9092 }, + { 0x48D6, 9097 }, + { 0x4A87, 9102 }, + { 0x4A84, 9106 }, + { 0x4A85, 9110 }, + { 0x4A8B, 9114 }, + { 0x4A7E, 9118 }, + { 0x4A7C, 9122 }, + { 0x4A82, 9126 }, + { 0x4A8C, 9130 }, + { 0x4A89, 9134 }, + { 0x4A8A, 9138 }, + { 0x4A81, 9142 }, + { 0x4A7B, 9146 }, + { 0x4A80, 9150 }, + { 0x4A88, 9155 }, + { 0x4A7F, 9159 }, + { 0x4A83, 9163 }, + { 0x4A86, 9167 }, + { 0x4A7D, 9171 }, + { 0x4A8D, 9175 }, + { 0x4A8E, 9180 }, + { 0x4A8F, 9185 }, + { 0x4A90, 9191 }, + { 0x4A91, 9197 }, + { 0x4A92, 9201 }, + { 0x4A93, 9206 }, + { 0x4A94, 9211 }, + { 0x7413, 9216 }, + { 0x7414, 9220 }, + { 0x426D, 9224 }, + { 0x426E, 9228 }, + { 0x426F, 9232 }, + { 0x427F, 9236 }, + { 0x4275, 9240 }, + { 0x427A, 9244 }, + { 0x427B, 9248 }, + { 0x427C, 9252 }, + { 0x4280, 9256 }, + { 0x4272, 9260 }, + { 0x4273, 9264 }, + { 0x4290, 9268 }, + { 0x4276, 9272 }, + { 0x4277, 9276 }, + { 0x4270, 9280 }, + { 0x4271, 9284 }, + { 0x428B, 9288 }, + { 0x4283, 9292 }, + { 0x4284, 9296 }, + { 0x4285, 9300 }, + { 0x4281, 9304 }, + { 0x4282, 9308 }, + { 0x427E, 9312 }, + { 0x4289, 9316 }, + { 0x428A, 9320 }, + { 0x428C, 9324 }, + { 0x4278, 9328 }, + { 0x4279, 9332 }, + { 0x4287, 9336 }, + { 0x4288, 9340 }, + { 0x4274, 9344 }, + { 0x4286, 9348 }, + { 0x428D, 9352 }, + { 0x428E, 9356 }, + { 0x428F, 9360 }, + { 0x427D, 9364 }, + { 0x4297, 9368 }, + { 0x4298, 9372 }, + { 0x4295, 9376 }, + { 0x4291, 9380 }, + { 0x4296, 9384 }, + { 0x4292, 9388 }, + { 0x4293, 9392 }, + { 0x4294, 9396 }, + { 0x4299, 9400 }, + { 0x429A, 9404 }, + { 0x429C, 9408 }, + { 0x429B, 9412 }, + { 0x429D, 9416 }, + { 0x429E, 9420 }, + { 0x4A2E, 9424 }, + { 0x4A3D, 9428 }, + { 0x4A36, 9432 }, + { 0x4A37, 9436 }, + { 0x4A43, 9440 }, + { 0x4A30, 9444 }, + { 0x4A3B, 9448 }, + { 0x4A2B, 9452 }, + { 0x4A32, 9456 }, + { 0x4A34, 9460 }, + { 0x4A42, 9464 }, + { 0x4A33, 9468 }, + { 0x4A29, 9472 }, + { 0x4A2F, 9476 }, + { 0x4A38, 9481 }, + { 0x4A39, 9486 }, + { 0x4A44, 9494 }, + { 0x4A45, 9499 }, + { 0x4A2C, 9507 }, + { 0x4A2A, 9512 }, + { 0x4A3F, 9517 }, + { 0x4A40, 9522 }, + { 0x4A2D, 9530 }, + { 0x4A3E, 9534 }, + { 0x4A31, 9538 }, + { 0x4A35, 9542 }, + { 0x4A3A, 9546 }, + { 0x4A3C, 9550 }, + { 0x4A41, 9555 }, + { 0x4A46, 9559 }, + { 0x4A4E, 9563 }, + { 0x4A4B, 9568 }, + { 0x4A47, 9572 }, + { 0x4A4A, 9576 }, + { 0x4A49, 9580 }, + { 0x4A48, 9584 }, + { 0x4A4D, 9588 }, + { 0x4A4C, 9592 }, + { 0x4A4F, 9596 }, + { 0x4A50, 9601 }, + { 0x9166, 9605 }, + { 0x7EF3, 9608 }, + { 0x4924, 9616 }, + { 0x492D, 9621 }, + { 0x4934, 9626 }, + { 0x493F, 9631 }, + { 0x494E, 9636 }, + { 0x4925, 9641 }, + { 0x4938, 9646 }, + { 0x4926, 9651 }, + { 0x4928, 9656 }, + { 0x492B, 9661 }, + { 0x492F, 9666 }, + { 0x4930, 9671 }, + { 0x4931, 9676 }, + { 0x4933, 9681 }, + { 0x4936, 9686 }, + { 0x4937, 9691 }, + { 0x493A, 9696 }, + { 0x493C, 9701 }, + { 0x493D, 9706 }, + { 0x4944, 9711 }, + { 0x4946, 9716 }, + { 0x4948, 9721 }, + { 0x494A, 9726 }, + { 0x4952, 9731 }, + { 0x4953, 9736 }, + { 0x4935, 9741 }, + { 0x4940, 9746 }, + { 0x4956, 9751 }, + { 0x494F, 9756 }, + { 0x4927, 9761 }, + { 0x492C, 9766 }, + { 0x494D, 9771 }, + { 0x492A, 9776 }, + { 0x4932, 9781 }, + { 0x493B, 9786 }, + { 0x4945, 9791 }, + { 0x4929, 9796 }, + { 0x494B, 9801 }, + { 0x493E, 9806 }, + { 0x4949, 9811 }, + { 0x494C, 9816 }, + { 0x4954, 9821 }, + { 0x4943, 9826 }, + { 0x4939, 9831 }, + { 0x492E, 9836 }, + { 0x4947, 9842 }, + { 0x4942, 9848 }, + { 0x4951, 9854 }, + { 0x4955, 9860 }, + { 0x4941, 9866 }, + { 0x4950, 9872 }, + { 0x4957, 9878 }, + { 0x495B, 9882 }, + { 0x495C, 9887 }, + { 0x4959, 9892 }, + { 0x4958, 9896 }, + { 0x495A, 9900 }, + { 0x48F1, 9904 }, + { 0x48FA, 9909 }, + { 0x4901, 9914 }, + { 0x490C, 9919 }, + { 0x491B, 9924 }, + { 0x48F2, 9929 }, + { 0x4905, 9934 }, + { 0x48F3, 9939 }, + { 0x48F5, 9944 }, + { 0x48F8, 9949 }, + { 0x48FC, 9954 }, + { 0x48FD, 9959 }, + { 0x48FE, 9964 }, + { 0x4900, 9969 }, + { 0x4903, 9974 }, + { 0x4904, 9979 }, + { 0x4907, 9984 }, + { 0x4909, 9989 }, + { 0x490A, 9994 }, + { 0x4911, 9999 }, + { 0x4913, 10004 }, + { 0x4915, 10009 }, + { 0x4917, 10014 }, + { 0x491F, 10019 }, + { 0x4920, 10024 }, + { 0x4902, 10029 }, + { 0x490D, 10034 }, + { 0x4923, 10039 }, + { 0x491C, 10044 }, + { 0x48F4, 10049 }, + { 0x48F9, 10054 }, + { 0x491A, 10059 }, + { 0x48F7, 10064 }, + { 0x48FF, 10069 }, + { 0x4908, 10074 }, + { 0x4912, 10079 }, + { 0x48F6, 10084 }, + { 0x4918, 10089 }, + { 0x490B, 10094 }, + { 0x4916, 10099 }, + { 0x4919, 10104 }, + { 0x4921, 10109 }, + { 0x4910, 10114 }, + { 0x4906, 10119 }, + { 0x48FB, 10124 }, + { 0x4914, 10130 }, + { 0x490F, 10136 }, + { 0x491E, 10142 }, + { 0x4922, 10148 }, + { 0x490E, 10154 }, + { 0x491D, 10160 }, + { 0x2A21, 10166 }, + { 0x1CA4, 10172 }, + { 0x9162, 10175 }, + { 0x94B7, 10178 }, + { 0x51B3, 10179 }, + { 0x51B4, 10184 }, + { 0x51B5, 10189 }, + { 0x51B6, 10194 }, + { 0x51B7, 10199 }, + { 0x51AA, 10204 }, + { 0x51AB, 10209 }, + { 0x51A2, 10214 }, + { 0x51B1, 10219 }, + { 0x51A7, 10224 }, + { 0x51A6, 10229 }, + { 0x51B9, 10234 }, + { 0x519F, 10239 }, + { 0x51A0, 10244 }, + { 0x51A1, 10249 }, + { 0x51AE, 10254 }, + { 0x519E, 10259 }, + { 0x51B0, 10264 }, + { 0x51A9, 10269 }, + { 0x51AC, 10274 }, + { 0x51B8, 10279 }, + { 0x51A4, 10284 }, + { 0x51A3, 10289 }, + { 0x51B2, 10294 }, + { 0x51A8, 10299 }, + { 0x51A5, 10304 }, + { 0x51AF, 10309 }, + { 0x51AD, 10314 }, + { 0x51BB, 10319 }, + { 0x51BF, 10325 }, + { 0x51BD, 10331 }, + { 0x51BE, 10337 }, + { 0x51BA, 10343 }, + { 0x51BC, 10349 }, + { 0x51C0, 10355 }, + { 0x51C2, 10361 }, + { 0x51C1, 10367 }, + { 0x51C4, 10373 }, + { 0x51C3, 10378 }, + { 0x51C6, 10384 }, + { 0x51C7, 10391 }, + { 0x51CA, 10397 }, + { 0x51C9, 10402 }, + { 0x51CB, 10408 }, + { 0x51CC, 10415 }, + { 0x51C5, 10421 }, + { 0x51C8, 10427 }, + { 0x51D3, 10434 }, + { 0x51D6, 10439 }, + { 0x51CE, 10445 }, + { 0x51CD, 10451 }, + { 0x51CF, 10456 }, + { 0x51D0, 10463 }, + { 0x51D2, 10469 }, + { 0x51D1, 10474 }, + { 0x51D4, 10480 }, + { 0x51D5, 10487 }, + { 0x8FF1, 10493 }, + { 0x1CAC, 10495 }, + { 0x1CE8, 10496 }, + { 0x95EC, 10497 }, + { 0x9139, 10499 }, + { 0x1CB1, 10503 }, + { 0x1DA7, 10507 }, + { 0x1CB0, 10509 }, + { 0x9495, 10512 }, + { 0x8FC9, 10513 }, + { 0x8FEA, 10514 }, + { 0x8FF0, 10516 }, + { 0x7C58, 10518 }, + { 0x1CE8, 10520 }, + { 0x1CAC, 10523 }, + { 0x8F25, 10526 }, + { 0x9261, 10529 }, + { 0x8FC2, 10535 }, + { 0x8FB3, 10536 }, + { 0x9515, 10537 }, + { 0x8F01, 10540 }, + { 0x1CAB, 10542 }, + { 0x1CE6, 10543 }, + { 0x1C8F, 10544 }, + { 0x1CAE, 10545 }, + { 0x1E6D, 10546 }, + { 0x006C, 10548 }, + { 0x90E2, 10549 }, + { 0x2362, 10555 }, + { 0x9372, 10559 }, + { 0x236A, 10563 }, + { 0x8F72, 10569 }, + { 0x1D39, 10573 }, + { 0x2235, 10575 }, + { 0x8ED1, 10576 }, + { 0x22F1, 10579 }, + { 0x973B, 10582 }, + { 0x970A, 10585 }, + { 0x9757, 10588 }, + { 0x9737, 10592 }, + { 0x9704, 10596 }, + { 0x9707, 10599 }, + { 0x9716, 10602 }, + { 0x9708, 10604 }, + { 0x970D, 10606 }, + { 0x9712, 10609 }, + { 0x970E, 10612 }, + { 0x9711, 10615 }, + { 0x9710, 10618 }, + { 0x9715, 10621 }, + { 0x970C, 10624 }, + { 0x9714, 10627 }, + { 0x9713, 10630 }, + { 0x970F, 10633 }, + { 0x973C, 10636 }, + { 0x973D, 10639 }, + { 0x973E, 10644 }, + { 0x973F, 10649 }, + { 0x9740, 10654 }, + { 0x9741, 10659 }, + { 0x9742, 10664 }, + { 0x9743, 10669 }, + { 0x9744, 10674 }, + { 0x9745, 10679 }, + { 0x9746, 10684 }, + { 0x9747, 10689 }, + { 0x9748, 10694 }, + { 0x9749, 10699 }, + { 0x974A, 10704 }, + { 0x974B, 10709 }, + { 0x974C, 10714 }, + { 0x974D, 10719 }, + { 0x974E, 10724 }, + { 0x974F, 10729 }, + { 0x9750, 10734 }, + { 0x9751, 10739 }, + { 0x9752, 10744 }, + { 0x9753, 10749 }, + { 0x9754, 10754 }, + { 0x9755, 10759 }, + { 0x9756, 10764 }, + { 0x971D, 10769 }, + { 0x971E, 10774 }, + { 0x971F, 10779 }, + { 0x9720, 10784 }, + { 0x9721, 10789 }, + { 0x9722, 10794 }, + { 0x9723, 10799 }, + { 0x9724, 10804 }, + { 0x9725, 10809 }, + { 0x9726, 10814 }, + { 0x9727, 10819 }, + { 0x9728, 10824 }, + { 0x9729, 10829 }, + { 0x972A, 10834 }, + { 0x972B, 10839 }, + { 0x972C, 10844 }, + { 0x972D, 10849 }, + { 0x972E, 10854 }, + { 0x972F, 10859 }, + { 0x9730, 10864 }, + { 0x9731, 10869 }, + { 0x9732, 10874 }, + { 0x9733, 10879 }, + { 0x9734, 10884 }, + { 0x9735, 10889 }, + { 0x9736, 10894 }, + { 0x9759, 10899 }, + { 0x9739, 10903 }, + { 0x9705, 10907 }, + { 0x96FC, 10910 }, + { 0x975A, 10912 }, + { 0x9700, 10914 }, + { 0x9719, 10917 }, + { 0x96FF, 10920 }, + { 0x9701, 10923 }, + { 0x9738, 10926 }, + { 0x970B, 10929 }, + { 0x9706, 10931 }, + { 0x971B, 10933 }, + { 0x9758, 10936 }, + { 0x9702, 10939 }, + { 0x9718, 10941 }, + { 0x96FE, 10944 }, + { 0x9717, 10947 }, + { 0x9703, 10949 }, + { 0x973A, 10951 }, + { 0x971C, 10954 }, + { 0x96FD, 10957 }, + { 0x971A, 10960 }, + { 0x9709, 10963 }, + { 0x167B, 10965 }, + { 0x1683, 10969 }, + { 0x167C, 10973 }, + { 0x1681, 10977 }, + { 0x167F, 10981 }, + { 0x1685, 10985 }, + { 0x167D, 10989 }, + { 0x167E, 10993 }, + { 0x1674, 10997 }, + { 0x1676, 11001 }, + { 0x1668, 11005 }, + { 0x1670, 11009 }, + { 0x1673, 11013 }, + { 0x167A, 11017 }, + { 0x1680, 11021 }, + { 0x1671, 11025 }, + { 0x1677, 11029 }, + { 0x166C, 11033 }, + { 0x166E, 11037 }, + { 0x1682, 11041 }, + { 0x1675, 11045 }, + { 0x1669, 11049 }, + { 0x166D, 11053 }, + { 0x1684, 11057 }, + { 0x1678, 11061 }, + { 0x166A, 11065 }, + { 0x1672, 11069 }, + { 0x166F, 11073 }, + { 0x166B, 11077 }, + { 0x1679, 11081 }, + { 0x1686, 11085 }, + { 0x1687, 11089 }, + { 0x1688, 11093 }, + { 0x1689, 11097 }, + { 0x168A, 11101 }, + { 0x177A, 11105 }, + { 0x177F, 11110 }, + { 0x177B, 11115 }, + { 0x177E, 11120 }, + { 0x177D, 11125 }, + { 0x1782, 11130 }, + { 0x1779, 11135 }, + { 0x1781, 11140 }, + { 0x1780, 11145 }, + { 0x177C, 11150 }, + { 0x1775, 11155 }, + { 0x1791, 11160 }, + { 0x1776, 11164 }, + { 0x176F, 11169 }, + { 0x1754, 11174 }, + { 0x1794, 11180 }, + { 0x1799, 11185 }, + { 0x1795, 11189 }, + { 0x1790, 11193 }, + { 0x179A, 11197 }, + { 0x1772, 11201 }, + { 0x1773, 11206 }, + { 0x1774, 11211 }, + { 0x175B, 11216 }, + { 0x178F, 11220 }, + { 0x178D, 11224 }, + { 0x1792, 11228 }, + { 0x1770, 11232 }, + { 0x1771, 11236 }, + { 0x1796, 11240 }, + { 0x1797, 11244 }, + { 0x1793, 11248 }, + { 0x1777, 11254 }, + { 0x178E, 11259 }, + { 0x1798, 11263 }, + { 0x1784, 11267 }, + { 0x1789, 11272 }, + { 0x1785, 11277 }, + { 0x1788, 11282 }, + { 0x1787, 11287 }, + { 0x178C, 11292 }, + { 0x1783, 11297 }, + { 0x178B, 11302 }, + { 0x178A, 11307 }, + { 0x1786, 11312 }, + { 0x175C, 11317 }, + { 0x1769, 11322 }, + { 0x1760, 11327 }, + { 0x1766, 11332 }, + { 0x1764, 11337 }, + { 0x175E, 11342 }, + { 0x176A, 11347 }, + { 0x176C, 11352 }, + { 0x1761, 11357 }, + { 0x176E, 11362 }, + { 0x1767, 11368 }, + { 0x176B, 11374 }, + { 0x1768, 11379 }, + { 0x1762, 11384 }, + { 0x1765, 11389 }, + { 0x175D, 11394 }, + { 0x1763, 11400 }, + { 0x175F, 11405 }, + { 0x176D, 11411 }, + { 0x1747, 11417 }, + { 0x1749, 11421 }, + { 0x174B, 11425 }, + { 0x1733, 11429 }, + { 0x172B, 11433 }, + { 0x174D, 11437 }, + { 0x174A, 11441 }, + { 0x173F, 11445 }, + { 0x173A, 11449 }, + { 0x1732, 11453 }, + { 0x174E, 11457 }, + { 0x173D, 11461 }, + { 0x174C, 11465 }, + { 0x1741, 11469 }, + { 0x174F, 11473 }, + { 0x1746, 11477 }, + { 0x1725, 11481 }, + { 0x1738, 11486 }, + { 0x1748, 11491 }, + { 0x171F, 11496 }, + { 0x1737, 11501 }, + { 0x1726, 11506 }, + { 0x1730, 11511 }, + { 0x173B, 11516 }, + { 0x1727, 11521 }, + { 0x1721, 11526 }, + { 0x1720, 11531 }, + { 0x1739, 11536 }, + { 0x1731, 11541 }, + { 0x172C, 11546 }, + { 0x1740, 11551 }, + { 0x1722, 11555 }, + { 0x1728, 11559 }, + { 0x173E, 11563 }, + { 0x1723, 11567 }, + { 0x1736, 11572 }, + { 0x1745, 11577 }, + { 0x171C, 11582 }, + { 0x1734, 11587 }, + { 0x1744, 11592 }, + { 0x172E, 11597 }, + { 0x173C, 11602 }, + { 0x1724, 11607 }, + { 0x171D, 11612 }, + { 0x171E, 11617 }, + { 0x1735, 11622 }, + { 0x1742, 11627 }, + { 0x1743, 11632 }, + { 0x172F, 11637 }, + { 0x172A, 11642 }, + { 0x172D, 11647 }, + { 0x1729, 11651 }, + { 0x1750, 11655 }, + { 0x1778, 11660 }, + { 0x1759, 11665 }, + { 0x1753, 11670 }, + { 0x1758, 11677 }, + { 0x175A, 11682 }, + { 0x1756, 11687 }, + { 0x1757, 11693 }, + { 0x1755, 11702 }, + { 0x1752, 11708 }, + { 0x1751, 11714 }, + { 0x3A08, 11720 }, + { 0x3A0F, 11724 }, + { 0x3A17, 11728 }, + { 0x3A19, 11733 }, + { 0x3A1A, 11738 }, + { 0x3A18, 11743 }, + { 0x3A0D, 11748 }, + { 0x3A0A, 11752 }, + { 0x3A0E, 11756 }, + { 0x3A0C, 11760 }, + { 0x3A09, 11764 }, + { 0x3A16, 11768 }, + { 0x3A15, 11772 }, + { 0x3A14, 11776 }, + { 0x3A10, 11780 }, + { 0x3A12, 11784 }, + { 0x3A0B, 11788 }, + { 0x3A13, 11792 }, + { 0x3A11, 11796 }, + { 0x3A06, 11800 }, + { 0x39F2, 11805 }, + { 0x39E2, 11810 }, + { 0x39EA, 11815 }, + { 0x39F8, 11820 }, + { 0x39DE, 11825 }, + { 0x3A04, 11830 }, + { 0x39D8, 11835 }, + { 0x3A00, 11840 }, + { 0x39FA, 11845 }, + { 0x39F0, 11850 }, + { 0x39F4, 11855 }, + { 0x39FE, 11860 }, + { 0x39E6, 11865 }, + { 0x39EC, 11870 }, + { 0x3A02, 11875 }, + { 0x39FC, 11880 }, + { 0x39E4, 11885 }, + { 0x39DA, 11890 }, + { 0x39E0, 11895 }, + { 0x39E8, 11900 }, + { 0x39F6, 11905 }, + { 0x39EE, 11910 }, + { 0x39DC, 11915 }, + { 0x3A07, 11920 }, + { 0x39F3, 11925 }, + { 0x39E3, 11930 }, + { 0x39EB, 11935 }, + { 0x39F9, 11940 }, + { 0x39DF, 11945 }, + { 0x3A05, 11950 }, + { 0x39D9, 11955 }, + { 0x3A01, 11960 }, + { 0x39FB, 11965 }, + { 0x39F1, 11970 }, + { 0x39F5, 11975 }, + { 0x39FF, 11980 }, + { 0x39E7, 11985 }, + { 0x39ED, 11990 }, + { 0x3A03, 11995 }, + { 0x39FD, 12000 }, + { 0x39E5, 12005 }, + { 0x39DB, 12010 }, + { 0x39E1, 12015 }, + { 0x39E9, 12020 }, + { 0x39F7, 12025 }, + { 0x39EF, 12030 }, + { 0x39DD, 12035 }, + { 0x3A1E, 12040 }, + { 0x3A1F, 12045 }, + { 0x3A1B, 12050 }, + { 0x3A1D, 12054 }, + { 0x3A1C, 12058 }, + { 0x2609, 12062 }, + { 0x2568, 12065 }, + { 0x2566, 12071 }, + { 0x2569, 12075 }, + { 0x8F5C, 12081 }, + { 0x2A4F, 12083 }, + { 0x27F3, 12087 }, + { 0x2A50, 12091 }, + { 0x2A2F, 12095 }, + { 0x7E37, 12099 }, + { 0x7E38, 12104 }, + { 0x1F77, 12109 }, + { 0x7E27, 12112 }, + { 0x7CA1, 12116 }, + { 0x7E2D, 12120 }, + { 0x7E2F, 12125 }, + { 0x7CA3, 12130 }, + { 0x7E29, 12134 }, + { 0x7E2B, 12139 }, + { 0x7CA2, 12144 }, + { 0x7E31, 12148 }, + { 0x1F66, 12152 }, + { 0x2A18, 12155 }, + { 0x7E48, 12159 }, + { 0x1F73, 12165 }, + { 0x96F0, 12168 }, + { 0x90D0, 12176 }, + { 0x2035, 12181 }, + { 0x1F65, 12184 }, + { 0x2A19, 12187 }, + { 0x1F74, 12191 }, + { 0x96ED, 12194 }, + { 0x200B, 12202 }, + { 0x2037, 12205 }, + { 0x96E9, 12209 }, + { 0x96E1, 12215 }, + { 0x2033, 12221 }, + { 0x1CA5, 12223 }, + { 0x1CDA, 12226 }, + { 0x901F, 12229 }, + { 0x2A20, 12233 }, + { 0x7CCF, 12239 }, + { 0x9020, 12243 }, + { 0x9163, 12247 }, + { 0x9048, 12250 }, + { 0x25F5, 12252 }, + { 0x919D, 12255 }, + { 0x2634, 12258 }, + { 0x2633, 12262 }, + { 0x1CD1, 12266 }, + { 0x26A1, 12270 }, + { 0x2682, 12274 }, + { 0x2681, 12278 }, + { 0x35DB, 12282 }, + { 0x35DA, 12285 }, + { 0x35EE, 12287 }, + { 0x35F3, 12290 }, + { 0x35EF, 12293 }, + { 0x35F2, 12296 }, + { 0x35F1, 12299 }, + { 0x35F6, 12302 }, + { 0x35ED, 12305 }, + { 0x35F5, 12308 }, + { 0x35F4, 12311 }, + { 0x35F0, 12314 }, + { 0x35E5, 12317 }, + { 0x35E3, 12320 }, + { 0x35E6, 12323 }, + { 0x35E4, 12326 }, + { 0x35E7, 12329 }, + { 0x35EB, 12332 }, + { 0x35EC, 12335 }, + { 0x35E9, 12338 }, + { 0x35E2, 12341 }, + { 0x35EA, 12344 }, + { 0x35E8, 12347 }, + { 0x35E0, 12350 }, + { 0x35E1, 12353 }, + { 0x35DC, 12356 }, + { 0x3516, 12359 }, + { 0x35AE, 12362 }, + { 0x34F1, 12365 }, + { 0x3587, 12368 }, + { 0x3562, 12371 }, + { 0x3517, 12374 }, + { 0x351F, 12377 }, + { 0x35B7, 12380 }, + { 0x34F9, 12383 }, + { 0x3590, 12386 }, + { 0x356A, 12389 }, + { 0x3533, 12392 }, + { 0x35CC, 12395 }, + { 0x350C, 12398 }, + { 0x35A4, 12401 }, + { 0x357D, 12404 }, + { 0x352D, 12407 }, + { 0x35C6, 12410 }, + { 0x3506, 12413 }, + { 0x359E, 12416 }, + { 0x3577, 12419 }, + { 0x34CD, 12422 }, + { 0x35AF, 12425 }, + { 0x3525, 12428 }, + { 0x35BE, 12431 }, + { 0x34FE, 12434 }, + { 0x3596, 12437 }, + { 0x356F, 12440 }, + { 0x353A, 12443 }, + { 0x35D3, 12446 }, + { 0x3512, 12449 }, + { 0x35AA, 12452 }, + { 0x3583, 12455 }, + { 0x3519, 12458 }, + { 0x35B1, 12461 }, + { 0x34F3, 12464 }, + { 0x358A, 12467 }, + { 0x3564, 12470 }, + { 0x34F2, 12473 }, + { 0x3534, 12476 }, + { 0x35CD, 12479 }, + { 0x350D, 12482 }, + { 0x35A5, 12485 }, + { 0x357E, 12488 }, + { 0x3537, 12491 }, + { 0x35D0, 12494 }, + { 0x3510, 12497 }, + { 0x35A8, 12500 }, + { 0x3581, 12503 }, + { 0x352B, 12506 }, + { 0x35C4, 12509 }, + { 0x3504, 12512 }, + { 0x359C, 12515 }, + { 0x3575, 12518 }, + { 0x353B, 12521 }, + { 0x35D5, 12524 }, + { 0x3513, 12527 }, + { 0x35AB, 12530 }, + { 0x3584, 12533 }, + { 0x353C, 12536 }, + { 0x35D6, 12539 }, + { 0x35D8, 12542 }, + { 0x3514, 12545 }, + { 0x35AC, 12548 }, + { 0x3585, 12551 }, + { 0x3588, 12554 }, + { 0x353E, 12557 }, + { 0x351D, 12560 }, + { 0x35B5, 12563 }, + { 0x34F7, 12566 }, + { 0x358E, 12569 }, + { 0x3568, 12572 }, + { 0x352C, 12575 }, + { 0x35C5, 12578 }, + { 0x3505, 12581 }, + { 0x359D, 12584 }, + { 0x3576, 12587 }, + { 0x352F, 12590 }, + { 0x35C8, 12593 }, + { 0x3508, 12596 }, + { 0x35A0, 12599 }, + { 0x3579, 12602 }, + { 0x3527, 12605 }, + { 0x35C0, 12608 }, + { 0x3500, 12611 }, + { 0x3598, 12614 }, + { 0x3571, 12617 }, + { 0x3563, 12620 }, + { 0x3526, 12623 }, + { 0x35BF, 12626 }, + { 0x34FF, 12629 }, + { 0x3597, 12632 }, + { 0x3570, 12635 }, + { 0x351B, 12638 }, + { 0x35B3, 12641 }, + { 0x34F5, 12644 }, + { 0x358C, 12647 }, + { 0x3566, 12650 }, + { 0x3536, 12653 }, + { 0x35CF, 12656 }, + { 0x350F, 12659 }, + { 0x35A7, 12662 }, + { 0x3580, 12665 }, + { 0x3531, 12668 }, + { 0x35CA, 12671 }, + { 0x350A, 12674 }, + { 0x35A2, 12677 }, + { 0x357B, 12680 }, + { 0x34D4, 12683 }, + { 0x351E, 12686 }, + { 0x35B6, 12689 }, + { 0x34F8, 12692 }, + { 0x358F, 12695 }, + { 0x3569, 12698 }, + { 0x3545, 12701 }, + { 0x34E7, 12704 }, + { 0x3558, 12707 }, + { 0x34E1, 12710 }, + { 0x3529, 12713 }, + { 0x35C2, 12716 }, + { 0x3502, 12719 }, + { 0x359A, 12722 }, + { 0x3573, 12725 }, + { 0x3552, 12728 }, + { 0x34CE, 12731 }, + { 0x34D9, 12734 }, + { 0x354A, 12737 }, + { 0x3524, 12740 }, + { 0x35BC, 12743 }, + { 0x34FD, 12746 }, + { 0x3594, 12749 }, + { 0x356E, 12752 }, + { 0x34ED, 12755 }, + { 0x35D4, 12758 }, + { 0x355E, 12761 }, + { 0x351A, 12764 }, + { 0x34CF, 12767 }, + { 0x35B2, 12770 }, + { 0x34F4, 12773 }, + { 0x358B, 12776 }, + { 0x3540, 12779 }, + { 0x3565, 12782 }, + { 0x34E8, 12785 }, + { 0x3559, 12788 }, + { 0x3538, 12791 }, + { 0x34EB, 12794 }, + { 0x355C, 12797 }, + { 0x3521, 12800 }, + { 0x35B9, 12803 }, + { 0x34FB, 12806 }, + { 0x3592, 12809 }, + { 0x356C, 12812 }, + { 0x34DF, 12815 }, + { 0x3550, 12818 }, + { 0x3520, 12821 }, + { 0x35B8, 12824 }, + { 0x34FA, 12827 }, + { 0x3591, 12830 }, + { 0x356B, 12833 }, + { 0x34EE, 12836 }, + { 0x355F, 12839 }, + { 0x352E, 12842 }, + { 0x35C7, 12845 }, + { 0x3507, 12848 }, + { 0x359F, 12851 }, + { 0x3578, 12854 }, + { 0x34EF, 12857 }, + { 0x3535, 12860 }, + { 0x35CE, 12863 }, + { 0x350E, 12866 }, + { 0x35A6, 12869 }, + { 0x357F, 12872 }, + { 0x3560, 12875 }, + { 0x353D, 12878 }, + { 0x35D7, 12881 }, + { 0x3515, 12884 }, + { 0x35AD, 12887 }, + { 0x3586, 12890 }, + { 0x353F, 12893 }, + { 0x34D2, 12896 }, + { 0x3543, 12899 }, + { 0x34E0, 12902 }, + { 0x3551, 12905 }, + { 0x34E3, 12908 }, + { 0x3530, 12911 }, + { 0x35C9, 12914 }, + { 0x3509, 12917 }, + { 0x35A1, 12920 }, + { 0x357A, 12923 }, + { 0x3554, 12926 }, + { 0x34DB, 12929 }, + { 0x3528, 12932 }, + { 0x35C1, 12935 }, + { 0x3501, 12938 }, + { 0x3599, 12941 }, + { 0x3572, 12944 }, + { 0x354C, 12947 }, + { 0x34DA, 12950 }, + { 0x354B, 12953 }, + { 0x351C, 12956 }, + { 0x34D0, 12959 }, + { 0x35B4, 12962 }, + { 0x34F6, 12965 }, + { 0x358D, 12968 }, + { 0x3541, 12971 }, + { 0x3567, 12974 }, + { 0x34EA, 12977 }, + { 0x355B, 12980 }, + { 0x34E5, 12983 }, + { 0x3532, 12986 }, + { 0x35CB, 12989 }, + { 0x350B, 12992 }, + { 0x35A3, 12995 }, + { 0x357C, 12998 }, + { 0x3556, 13001 }, + { 0x34D3, 13004 }, + { 0x3544, 13007 }, + { 0x34DD, 13010 }, + { 0x352A, 13013 }, + { 0x35C3, 13016 }, + { 0x3503, 13019 }, + { 0x359B, 13022 }, + { 0x3574, 13025 }, + { 0x354E, 13028 }, + { 0x34D8, 13031 }, + { 0x35BD, 13034 }, + { 0x3595, 13037 }, + { 0x3549, 13040 }, + { 0x3522, 13043 }, + { 0x34D6, 13046 }, + { 0x35BA, 13049 }, + { 0x3547, 13052 }, + { 0x34D5, 13055 }, + { 0x3546, 13058 }, + { 0x3523, 13061 }, + { 0x35BB, 13064 }, + { 0x34FC, 13067 }, + { 0x3593, 13070 }, + { 0x356D, 13073 }, + { 0x34E2, 13076 }, + { 0x3553, 13079 }, + { 0x3518, 13082 }, + { 0x35B0, 13085 }, + { 0x3539, 13088 }, + { 0x35D1, 13091 }, + { 0x3511, 13094 }, + { 0x35A9, 13097 }, + { 0x3582, 13100 }, + { 0x3589, 13103 }, + { 0x34E9, 13106 }, + { 0x355A, 13109 }, + { 0x34F0, 13112 }, + { 0x3561, 13115 }, + { 0x34E4, 13118 }, + { 0x3555, 13121 }, + { 0x34DC, 13124 }, + { 0x354D, 13127 }, + { 0x34D1, 13130 }, + { 0x3542, 13133 }, + { 0x34E6, 13136 }, + { 0x3557, 13139 }, + { 0x34DE, 13142 }, + { 0x354F, 13145 }, + { 0x34D7, 13148 }, + { 0x3548, 13151 }, + { 0x35F8, 13154 }, + { 0x35DD, 13158 }, + { 0x35DE, 13162 }, + { 0x35F7, 13166 }, + { 0x35DF, 13170 }, + { 0x34EC, 13174 }, + { 0x35D2, 13177 }, + { 0x355D, 13180 }, + { 0x35D9, 13183 }, + { 0x1D22, 13186 }, + { 0x1F12, 13188 }, + { 0x0064, 13189 }, + { 0x225B, 13191 }, + { 0x1C8D, 13193 }, + { 0x4FD1, 13194 }, + { 0x4FCF, 13197 }, + { 0x4FC2, 13201 }, + { 0x4FD0, 13204 }, + { 0x4FC4, 13207 }, + { 0x4FC9, 13210 }, + { 0x4FC5, 13213 }, + { 0x4FC8, 13216 }, + { 0x4FC7, 13219 }, + { 0x4FCC, 13222 }, + { 0x4FC3, 13225 }, + { 0x4FCB, 13228 }, + { 0x4FCA, 13231 }, + { 0x4FC6, 13234 }, + { 0x4FB7, 13237 }, + { 0x4FBD, 13241 }, + { 0x4FB9, 13245 }, + { 0x4FBF, 13249 }, + { 0x4FBB, 13253 }, + { 0x4FB8, 13257 }, + { 0x4FC0, 13261 }, + { 0x4FC1, 13265 }, + { 0x4FBE, 13269 }, + { 0x4FBA, 13273 }, + { 0x4FBC, 13277 }, + { 0x4FAB, 13281 }, + { 0x4FA1, 13284 }, + { 0x4FD3, 13287 }, + { 0x4FAC, 13290 }, + { 0x4FAE, 13293 }, + { 0x4FAA, 13296 }, + { 0x4FA3, 13299 }, + { 0x4F99, 13302 }, + { 0x4FA7, 13305 }, + { 0x4FA2, 13308 }, + { 0x4F9C, 13311 }, + { 0x4F9F, 13314 }, + { 0x4FA6, 13317 }, + { 0x4FA8, 13320 }, + { 0x4F9D, 13323 }, + { 0x4FB1, 13326 }, + { 0x4FA4, 13329 }, + { 0x4FD6, 13332 }, + { 0x4FAD, 13335 }, + { 0x4FB0, 13338 }, + { 0x4FB2, 13341 }, + { 0x4F9A, 13344 }, + { 0x4FD9, 13347 }, + { 0x4F9B, 13350 }, + { 0x4FD8, 13353 }, + { 0x4FA9, 13356 }, + { 0x4FA0, 13359 }, + { 0x4FA5, 13362 }, + { 0x4FD4, 13365 }, + { 0x4FD7, 13368 }, + { 0x4FD5, 13371 }, + { 0x4FB3, 13374 }, + { 0x4FAF, 13378 }, + { 0x4F9E, 13382 }, + { 0x4FCD, 13386 }, + { 0x4FCE, 13389 }, + { 0x4FD2, 13392 }, + { 0x4FB4, 13395 }, + { 0x4FB5, 13400 }, + { 0x4FB6, 13405 }, + { 0x1D90, 13411 }, + { 0x2251, 13413 }, + { 0x22C7, 13414 }, + { 0x92A6, 13416 }, + { 0x9029, 13418 }, + { 0x902F, 13419 }, + { 0x8FD7, 13421 }, + { 0x8F2F, 13423 }, + { 0x926F, 13425 }, + { 0x9135, 13427 }, + { 0x90CC, 13430 }, + { 0x9524, 13435 }, + { 0x8F99, 13438 }, + { 0x9273, 13439 }, + { 0x8FEE, 13440 }, + { 0x8F2D, 13442 }, + { 0x90C7, 13444 }, + { 0x90C8, 13445 }, + { 0x95E2, 13449 }, + { 0x1FD5, 13451 }, + { 0x278A, 13453 }, + { 0x8FD9, 13460 }, + { 0x908B, 13461 }, + { 0x904C, 13463 }, + { 0x8FCA, 13465 }, + { 0x935C, 13466 }, + { 0x9356, 13470 }, + { 0x9362, 13474 }, + { 0x9349, 13478 }, + { 0x932B, 13481 }, + { 0x9335, 13484 }, + { 0x9350, 13487 }, + { 0x9056, 13489 }, + { 0x94E2, 13490 }, + { 0x9121, 13491 }, + { 0x9102, 13492 }, + { 0x9491, 13495 }, + { 0x927C, 13498 }, + { 0x9017, 13500 }, + { 0x3EF9, 13503 }, + { 0x1D61, 13506 }, + { 0x9447, 13508 }, + { 0x9176, 13511 }, + { 0x907A, 13514 }, + { 0x9175, 13516 }, + { 0x1D60, 13519 }, + { 0x8F42, 13521 }, + { 0x1D2E, 13523 }, + { 0x0061, 13525 }, + { 0x39AB, 13527 }, + { 0x39B0, 13530 }, + { 0x39AC, 13533 }, + { 0x39AF, 13536 }, + { 0x39AE, 13539 }, + { 0x39B3, 13542 }, + { 0x39AA, 13545 }, + { 0x39B2, 13548 }, + { 0x39B1, 13551 }, + { 0x39AD, 13554 }, + { 0x398F, 13557 }, + { 0x3994, 13561 }, + { 0x3992, 13565 }, + { 0x398E, 13569 }, + { 0x3995, 13573 }, + { 0x3996, 13577 }, + { 0x3991, 13581 }, + { 0x3990, 13585 }, + { 0x3993, 13589 }, + { 0x3997, 13593 }, + { 0x3965, 13597 }, + { 0x3968, 13600 }, + { 0x3966, 13603 }, + { 0x396A, 13606 }, + { 0x3967, 13609 }, + { 0x3969, 13612 }, + { 0x3982, 13615 }, + { 0x397A, 13618 }, + { 0x396D, 13621 }, + { 0x398D, 13624 }, + { 0x3973, 13627 }, + { 0x396B, 13630 }, + { 0x3989, 13633 }, + { 0x3985, 13636 }, + { 0x397D, 13639 }, + { 0x397F, 13642 }, + { 0x3988, 13645 }, + { 0x398C, 13648 }, + { 0x3978, 13651 }, + { 0x398A, 13654 }, + { 0x3987, 13657 }, + { 0x3986, 13660 }, + { 0x3983, 13663 }, + { 0x3971, 13666 }, + { 0x397E, 13669 }, + { 0x397B, 13672 }, + { 0x396E, 13675 }, + { 0x3974, 13678 }, + { 0x396C, 13681 }, + { 0x3984, 13684 }, + { 0x3970, 13687 }, + { 0x3976, 13690 }, + { 0x397C, 13693 }, + { 0x3981, 13696 }, + { 0x3980, 13699 }, + { 0x398B, 13702 }, + { 0x3979, 13705 }, + { 0x3972, 13708 }, + { 0x396F, 13711 }, + { 0x3977, 13714 }, + { 0x3975, 13717 }, + { 0x399D, 13720 }, + { 0x399C, 13724 }, + { 0x39A6, 13728 }, + { 0x39A2, 13732 }, + { 0x39A3, 13736 }, + { 0x39A5, 13740 }, + { 0x39A1, 13744 }, + { 0x39A4, 13748 }, + { 0x39A0, 13752 }, + { 0x399E, 13756 }, + { 0x39A7, 13760 }, + { 0x399A, 13764 }, + { 0x3999, 13768 }, + { 0x399B, 13772 }, + { 0x3998, 13776 }, + { 0x39A9, 13780 }, + { 0x39A8, 13785 }, + { 0x399F, 13790 }, + { 0x39B5, 13795 }, + { 0x39B6, 13798 }, + { 0x39B4, 13802 }, + { 0x39B7, 13805 }, + { 0x9513, 13809 }, + { 0x95B1, 13810 }, + { 0x94AE, 13811 }, + { 0x1E72, 13812 }, + { 0x21BF, 13814 }, + { 0x9129, 13816 }, + { 0x2A39, 13818 }, + { 0x905B, 13822 }, + { 0x94FD, 13824 }, + { 0x94BA, 13826 }, + { 0x95AC, 13827 }, + { 0x94D2, 13829 }, + { 0x1F05, 13830 }, + { 0x1F03, 13833 }, + { 0x1E7B, 13836 }, + { 0x271A, 13839 }, + { 0x1E63, 13846 }, + { 0x1F42, 13851 }, + { 0x1F44, 13857 }, + { 0x1ED7, 13865 }, + { 0x1F37, 13868 }, + { 0x1ED8, 13873 }, + { 0x1F38, 13876 }, + { 0x1D24, 13881 }, + { 0x925D, 13883 }, + { 0x90FD, 13884 }, + { 0x25AB, 13887 }, + { 0x1EFB, 13890 }, + { 0x271D, 13892 }, + { 0x1F48, 13897 }, + { 0x1F5B, 13901 }, + { 0x9598, 13903 }, + { 0x946F, 13906 }, + { 0x94B4, 13909 }, + { 0x229D, 13910 }, + { 0x2819, 13913 }, + { 0x281A, 13916 }, + { 0x1D25, 13919 }, + { 0x8FF3, 13921 }, + { 0x9454, 13922 }, + { 0x91F8, 13924 }, + { 0x91F9, 13929 }, + { 0x9456, 13933 }, + { 0x95F8, 13938 }, + { 0x91C6, 13943 }, + { 0x91D7, 13947 }, + { 0x95F1, 13952 }, + { 0x91E1, 13960 }, + { 0x91E3, 13964 }, + { 0x945C, 13971 }, + { 0x94A1, 13976 }, + { 0x91B5, 13983 }, + { 0x944E, 13988 }, + { 0x9459, 13992 }, + { 0x94A2, 13998 }, + { 0x91EA, 14005 }, + { 0x94FE, 14009 }, + { 0x95F2, 14012 }, + { 0x91F7, 14016 }, + { 0x95F3, 14020 }, + { 0x94A8, 14024 }, + { 0x91CE, 14028 }, + { 0x91CF, 14032 }, + { 0x91D0, 14039 }, + { 0x9440, 14046 }, + { 0x9443, 14049 }, + { 0x94A7, 14052 }, + { 0x9039, 14056 }, + { 0x91E9, 14058 }, + { 0x91CB, 14061 }, + { 0x91BE, 14065 }, + { 0x91E4, 14069 }, + { 0x9074, 14073 }, + { 0x9177, 14075 }, + { 0x8F51, 14077 }, + { 0x90B0, 14079 }, + { 0x90D8, 14081 }, + { 0x9245, 14082 }, + { 0x951D, 14084 }, + { 0x8FD2, 14086 }, + { 0x8F18, 14087 }, + { 0x2A23, 14092 }, + { 0x1CD9, 14095 }, + { 0x231F, 14098 }, + { 0x94AD, 14101 }, + { 0x94E4, 14103 }, + { 0x8F27, 14104 }, + { 0x8F30, 14107 }, + { 0x1CDB, 14112 }, + { 0x1CD8, 14115 }, + { 0x8EF3, 14118 }, + { 0x27BE, 14121 }, + { 0x936B, 14126 }, + { 0x2351, 14130 }, + { 0x234F, 14133 }, + { 0x234E, 14136 }, + { 0x8FEB, 14139 }, + { 0x2329, 14141 }, + { 0x8ED0, 14143 }, + { 0x8EC8, 14147 }, + { 0x000E, 14150 }, + { 0x21B4, 14152 }, + { 0x2403, 14154 }, + { 0x2032, 14157 }, + { 0x154B, 14158 }, + { 0x154C, 14159 }, + { 0x154D, 14160 }, + { 0x154F, 14161 }, + { 0x8F65, 14162 }, + { 0x22C5, 14164 }, + { 0x231A, 14165 }, + { 0x2319, 14168 }, + { 0x2BC0, 14171 }, + { 0x901A, 14173 }, + { 0x9473, 14174 }, + { 0x8FC3, 14176 }, + { 0x9596, 14177 }, + { 0x95C6, 14179 }, + { 0x1C8A, 14181 }, + { 0x944C, 14183 }, + { 0x95F9, 14190 }, + { 0x9167, 14197 }, + { 0x95A6, 14199 }, + { 0x1FDF, 14200 }, + { 0x8EF2, 14202 }, + { 0x22CD, 14203 }, + { 0x90B9, 14206 }, + { 0x9126, 14209 }, + { 0x95B5, 14210 }, + { 0x2649, 14211 }, + { 0x22E1, 14212 }, + { 0x53AB, 14213 }, + { 0x5357, 14216 }, + { 0x5392, 14219 }, + { 0x5358, 14222 }, + { 0x5356, 14225 }, + { 0x5355, 14228 }, + { 0x5394, 14231 }, + { 0x53A2, 14233 }, + { 0x53A7, 14236 }, + { 0x53A3, 14239 }, + { 0x53A6, 14242 }, + { 0x53A5, 14245 }, + { 0x53AA, 14248 }, + { 0x53A1, 14251 }, + { 0x53A9, 14254 }, + { 0x53A8, 14257 }, + { 0x53A4, 14260 }, + { 0x538F, 14263 }, + { 0x538A, 14267 }, + { 0x538C, 14271 }, + { 0x5388, 14275 }, + { 0x5390, 14279 }, + { 0x5391, 14283 }, + { 0x538B, 14287 }, + { 0x538D, 14291 }, + { 0x538E, 14295 }, + { 0x5389, 14300 }, + { 0x5395, 14305 }, + { 0x5359, 14308 }, + { 0x5363, 14311 }, + { 0x535B, 14314 }, + { 0x5365, 14317 }, + { 0x535D, 14320 }, + { 0x535A, 14323 }, + { 0x5364, 14326 }, + { 0x537C, 14329 }, + { 0x536B, 14332 }, + { 0x5377, 14335 }, + { 0x5368, 14338 }, + { 0x5386, 14341 }, + { 0x535C, 14344 }, + { 0x536D, 14347 }, + { 0x5366, 14350 }, + { 0x5381, 14353 }, + { 0x537E, 14356 }, + { 0x5379, 14359 }, + { 0x537A, 14362 }, + { 0x5380, 14365 }, + { 0x5385, 14368 }, + { 0x5375, 14371 }, + { 0x535E, 14374 }, + { 0x5382, 14377 }, + { 0x537F, 14380 }, + { 0x537D, 14383 }, + { 0x536C, 14386 }, + { 0x5372, 14389 }, + { 0x5378, 14392 }, + { 0x5369, 14395 }, + { 0x536E, 14398 }, + { 0x5367, 14401 }, + { 0x536A, 14404 }, + { 0x5374, 14407 }, + { 0x536F, 14410 }, + { 0x537B, 14413 }, + { 0x5383, 14416 }, + { 0x5384, 14419 }, + { 0x5376, 14422 }, + { 0x5370, 14425 }, + { 0x5373, 14428 }, + { 0x5387, 14431 }, + { 0x5371, 14434 }, + { 0x5361, 14437 }, + { 0x535F, 14441 }, + { 0x5362, 14445 }, + { 0x5360, 14449 }, + { 0x5393, 14453 }, + { 0x539A, 14455 }, + { 0x5399, 14458 }, + { 0x539D, 14462 }, + { 0x539B, 14465 }, + { 0x539E, 14469 }, + { 0x5398, 14473 }, + { 0x539F, 14476 }, + { 0x539C, 14479 }, + { 0x53A0, 14483 }, + { 0x5396, 14487 }, + { 0x5397, 14491 }, + { 0x9042, 14496 }, + { 0x903E, 14497 }, + { 0x959E, 14499 }, + { 0x95BA, 14500 }, + { 0x8FD1, 14501 }, + { 0x1D37, 14503 }, + { 0x226A, 14505 }, + { 0x8ECF, 14508 }, + { 0x8ECA, 14513 }, + { 0x8EF6, 14517 }, + { 0x966B, 14521 }, + { 0x967E, 14530 }, + { 0x2407, 14536 }, + { 0x2406, 14540 }, + { 0x969C, 14545 }, + { 0x966D, 14551 }, + { 0x967F, 14560 }, + { 0x7CD5, 14566 }, + { 0x25BF, 14576 }, + { 0x2A12, 14580 }, + { 0x96D0, 14584 }, + { 0x21BB, 14588 }, + { 0x21BA, 14592 }, + { 0x96CF, 14596 }, + { 0x257A, 14600 }, + { 0x2576, 14607 }, + { 0x2577, 14614 }, + { 0x257C, 14621 }, + { 0x25A8, 14628 }, + { 0x21B7, 14631 }, + { 0x2811, 14635 }, + { 0x2202, 14639 }, + { 0x21B8, 14643 }, + { 0x7EE4, 14646 }, + { 0x7EE9, 14652 }, + { 0x7E4C, 14658 }, + { 0x9435, 14662 }, + { 0x9434, 14665 }, + { 0x9433, 14670 }, + { 0x9431, 14676 }, + { 0x9432, 14682 }, + { 0x7CEB, 14688 }, + { 0x96BA, 14692 }, + { 0x968E, 14695 }, + { 0x7E4E, 14699 }, + { 0x9695, 14704 }, + { 0x96B3, 14713 }, + { 0x7E51, 14717 }, + { 0x912E, 14725 }, + { 0x1EFA, 14729 }, + { 0x91A1, 14731 }, + { 0x2BB5, 14734 }, + { 0x25BD, 14737 }, + { 0x275C, 14742 }, + { 0x275E, 14747 }, + { 0x25C3, 14752 }, + { 0x2BBD, 14757 }, + { 0x005B, 14761 }, + { 0x2000, 14764 }, + { 0x1FFE, 14769 }, + { 0x1FFF, 14774 }, + { 0x1F61, 14779 }, + { 0x2401, 14781 }, + { 0x1E04, 14784 }, + { 0x1DEB, 14788 }, + { 0x1E53, 14791 }, + { 0x1E05, 14798 }, + { 0x1E50, 14803 }, + { 0x2574, 14809 }, + { 0x2738, 14815 }, + { 0x2730, 14819 }, + { 0x1E2B, 14823 }, + { 0x1E25, 14827 }, + { 0x2530, 14833 }, + { 0x93D8, 14840 }, + { 0x1E56, 14844 }, + { 0x2790, 14848 }, + { 0x21B5, 14852 }, + { 0x96C2, 14856 }, + { 0x7C52, 14862 }, + { 0x21B9, 14865 }, + { 0x21B6, 14869 }, + { 0x7EE3, 14873 }, + { 0x7EEA, 14880 }, + { 0x25AF, 14887 }, + { 0x2BBB, 14891 }, + { 0x2BC7, 14895 }, + { 0x2BC5, 14899 }, + { 0x2BC3, 14904 }, + { 0x25B1, 14908 }, + { 0x2308, 14911 }, + { 0x2BB9, 14914 }, + { 0x29FA, 14917 }, + { 0x2BB7, 14921 }, + { 0x2606, 14925 }, + { 0x1C9C, 14929 }, + { 0x2A1E, 14933 }, + { 0x1F20, 14936 }, + { 0x2A02, 14941 }, + { 0x1C98, 14945 }, + { 0x919B, 14949 }, + { 0x003B, 14952 }, + { 0x25B9, 14955 }, + { 0x25BB, 14963 }, + { 0x1CC5, 14971 }, + { 0x2A4D, 14976 }, + { 0x2A4B, 14982 }, + { 0x25B7, 14987 }, + { 0x1FFA, 14992 }, + { 0x1FF8, 14997 }, + { 0x1FF9, 15002 }, + { 0x2604, 15006 }, + { 0x1F5F, 15009 }, + { 0x9278, 15011 }, + { 0x919F, 15013 }, + { 0x9141, 15016 }, + { 0x2408, 15019 }, + { 0x23F1, 15021 }, + { 0x2A1C, 15025 }, + { 0x2BC1, 15029 }, + { 0x25FB, 15033 }, + { 0x2A16, 15038 }, + { 0x200F, 15043 }, + { 0x96EC, 15047 }, + { 0x96E4, 15053 }, + { 0x1F22, 15059 }, + { 0x966E, 15062 }, + { 0x0008, 15067 }, + { 0x1FF4, 15069 }, + { 0x1FF2, 15073 }, + { 0x1FF3, 15077 }, + { 0x29F8, 15080 }, + { 0x29FF, 15083 }, + { 0x1CA8, 15086 }, + { 0x2640, 15088 }, + { 0x263E, 15094 }, + { 0x263F, 15101 }, + { 0x90CA, 15108 }, + { 0x94AF, 15110 }, + { 0x9195, 15112 }, + { 0x1D1D, 15113 }, + { 0x34BB, 15115 }, + { 0x34BD, 15118 }, + { 0x34BF, 15121 }, + { 0x34C0, 15124 }, + { 0x34C1, 15127 }, + { 0x34BC, 15130 }, + { 0x349D, 15133 }, + { 0x34A7, 15136 }, + { 0x34A0, 15139 }, + { 0x34BE, 15142 }, + { 0x34B6, 15145 }, + { 0x34A3, 15148 }, + { 0x34B3, 15151 }, + { 0x34A6, 15154 }, + { 0x34A4, 15157 }, + { 0x34AE, 15160 }, + { 0x34AC, 15163 }, + { 0x34AD, 15166 }, + { 0x34C4, 15169 }, + { 0x349E, 15172 }, + { 0x34AF, 15175 }, + { 0x34A1, 15178 }, + { 0x34C2, 15181 }, + { 0x34C3, 15184 }, + { 0x34B7, 15187 }, + { 0x34B4, 15190 }, + { 0x34B9, 15193 }, + { 0x34B1, 15196 }, + { 0x34A8, 15199 }, + { 0x34A9, 15202 }, + { 0x34BA, 15205 }, + { 0x34B5, 15208 }, + { 0x34A5, 15211 }, + { 0x34B2, 15214 }, + { 0x349F, 15217 }, + { 0x34B8, 15220 }, + { 0x34A2, 15223 }, + { 0x34AA, 15226 }, + { 0x53AC, 15229 }, + { 0x34B0, 15232 }, + { 0x34C6, 15235 }, + { 0x34C8, 15240 }, + { 0x34C9, 15245 }, + { 0x34C5, 15250 }, + { 0x34C7, 15255 }, + { 0x34CA, 15260 }, + { 0x34AB, 15265 }, + { 0x34CC, 15268 }, + { 0x34CB, 15272 }, + { 0x90C5, 15275 }, + { 0x90C2, 15276 }, + { 0x2712, 15280 }, + { 0x95B0, 15288 }, + { 0x240A, 15290 }, + { 0x2423, 15293 }, + { 0x2426, 15297 }, + { 0x2409, 15302 }, + { 0x23F8, 15305 }, + { 0x2421, 15307 }, + { 0x2427, 15310 }, + { 0x2424, 15315 }, + { 0x2429, 15319 }, + { 0x275F, 15325 }, + { 0x2422, 15329 }, + { 0x2428, 15332 }, + { 0x2425, 15337 }, + { 0x242A, 15341 }, + { 0x242B, 15347 }, + { 0x8F9C, 15351 }, + { 0x903F, 15353 }, + { 0x9507, 15355 }, + { 0x22D1, 15356 }, + { 0x226E, 15360 }, + { 0x22D3, 15362 }, + { 0x22D2, 15370 }, + { 0x9011, 15374 }, + { 0x8E58, 15376 }, + { 0x2BE9, 15379 }, + { 0x94F7, 15381 }, + { 0x8F09, 15383 }, + { 0x9090, 15386 }, + { 0x926C, 15387 }, + { 0x73CA, 15389 }, + { 0x73CB, 15393 }, + { 0x73C7, 15397 }, + { 0x73C9, 15402 }, + { 0x7401, 15405 }, + { 0x7402, 15409 }, + { 0x7403, 15412 }, + { 0x7400, 15415 }, + { 0x73CC, 15418 }, + { 0x73D5, 15422 }, + { 0x73D9, 15426 }, + { 0x73F5, 15430 }, + { 0x73D1, 15434 }, + { 0x73E2, 15438 }, + { 0x73D4, 15442 }, + { 0x73E9, 15446 }, + { 0x73CD, 15450 }, + { 0x73EB, 15454 }, + { 0x73F1, 15458 }, + { 0x73CF, 15462 }, + { 0x73F3, 15466 }, + { 0x73FD, 15470 }, + { 0x73F2, 15474 }, + { 0x73D6, 15478 }, + { 0x73EF, 15482 }, + { 0x73DA, 15486 }, + { 0x73DE, 15490 }, + { 0x73FC, 15494 }, + { 0x73DF, 15498 }, + { 0x73DD, 15502 }, + { 0x73E0, 15506 }, + { 0x73F6, 15510 }, + { 0x73F9, 15514 }, + { 0x73D2, 15518 }, + { 0x73F4, 15522 }, + { 0x73E3, 15526 }, + { 0x73FF, 15530 }, + { 0x73E6, 15534 }, + { 0x73FB, 15538 }, + { 0x73D3, 15542 }, + { 0x73EA, 15546 }, + { 0x73EC, 15550 }, + { 0x73CE, 15554 }, + { 0x73D0, 15558 }, + { 0x73D7, 15562 }, + { 0x73ED, 15566 }, + { 0x73DB, 15570 }, + { 0x73E1, 15574 }, + { 0x73FA, 15578 }, + { 0x73D8, 15582 }, + { 0x73E4, 15586 }, + { 0x73E7, 15590 }, + { 0x73E8, 15594 }, + { 0x73F7, 15598 }, + { 0x73F8, 15602 }, + { 0x73DC, 15606 }, + { 0x73FE, 15610 }, + { 0x73E5, 15614 }, + { 0x73F0, 15618 }, + { 0x73EE, 15623 }, + { 0x73BF, 15628 }, + { 0x737D, 15631 }, + { 0x7387, 15634 }, + { 0x7383, 15637 }, + { 0x739B, 15640 }, + { 0x73A2, 15643 }, + { 0x739A, 15646 }, + { 0x7392, 15649 }, + { 0x7380, 15652 }, + { 0x738C, 15655 }, + { 0x737C, 15658 }, + { 0x739D, 15661 }, + { 0x73B6, 15664 }, + { 0x7386, 15667 }, + { 0x73C4, 15670 }, + { 0x7384, 15673 }, + { 0x73BE, 15676 }, + { 0x73A3, 15679 }, + { 0x739C, 15682 }, + { 0x737E, 15686 }, + { 0x7389, 15690 }, + { 0x738E, 15694 }, + { 0x73B5, 15698 }, + { 0x7388, 15702 }, + { 0x73AD, 15706 }, + { 0x73AC, 15710 }, + { 0x73B7, 15714 }, + { 0x73C1, 15717 }, + { 0x738B, 15720 }, + { 0x73B4, 15723 }, + { 0x73A4, 15726 }, + { 0x73C0, 15729 }, + { 0x7394, 15732 }, + { 0x7393, 15735 }, + { 0x7381, 15738 }, + { 0x739F, 15741 }, + { 0x738D, 15744 }, + { 0x7390, 15747 }, + { 0x73A8, 15750 }, + { 0x737F, 15753 }, + { 0x739E, 15756 }, + { 0x73C6, 15759 }, + { 0x73AF, 15762 }, + { 0x73B0, 15765 }, + { 0x73C2, 15768 }, + { 0x73B3, 15771 }, + { 0x73C5, 15774 }, + { 0x738A, 15777 }, + { 0x7385, 15780 }, + { 0x73B1, 15783 }, + { 0x73B8, 15786 }, + { 0x73B9, 15789 }, + { 0x7397, 15792 }, + { 0x73AB, 15795 }, + { 0x73C3, 15798 }, + { 0x73A7, 15801 }, + { 0x73A5, 15804 }, + { 0x7395, 15807 }, + { 0x73A0, 15810 }, + { 0x7391, 15813 }, + { 0x73A9, 15816 }, + { 0x7396, 15819 }, + { 0x73AA, 15822 }, + { 0x73A6, 15825 }, + { 0x73B2, 15828 }, + { 0x73BA, 15831 }, + { 0x73BC, 15834 }, + { 0x7399, 15837 }, + { 0x7398, 15840 }, + { 0x73BD, 15843 }, + { 0x7404, 15846 }, + { 0x7405, 15849 }, + { 0x7406, 15852 }, + { 0x7407, 15855 }, + { 0x7408, 15858 }, + { 0x7409, 15861 }, + { 0x740A, 15864 }, + { 0x7382, 15867 }, + { 0x738F, 15871 }, + { 0x73A1, 15875 }, + { 0x73BB, 15879 }, + { 0x73AE, 15883 }, + { 0x740B, 15887 }, + { 0x740C, 15891 }, + { 0x740D, 15895 }, + { 0x740E, 15899 }, + { 0x740F, 15903 }, + { 0x7410, 15907 }, + { 0x73C8, 15911 }, + { 0x2089, 15914 }, + { 0x208A, 15918 }, + { 0x1D1E, 15921 }, + { 0x262B, 15923 }, + { 0x1CDF, 15924 }, + { 0x4F29, 15925 }, + { 0x4F24, 15928 }, + { 0x4F23, 15931 }, + { 0x4F22, 15934 }, + { 0x4F25, 15937 }, + { 0x4F26, 15940 }, + { 0x4F2B, 15942 }, + { 0x4F30, 15945 }, + { 0x4F2C, 15948 }, + { 0x4F2F, 15951 }, + { 0x4F2E, 15954 }, + { 0x4F33, 15957 }, + { 0x4F2A, 15960 }, + { 0x4F32, 15963 }, + { 0x4F31, 15966 }, + { 0x4F2D, 15969 }, + { 0x4F1E, 15972 }, + { 0x4F16, 15976 }, + { 0x4F20, 15980 }, + { 0x4F18, 15984 }, + { 0x4F15, 15988 }, + { 0x4F1F, 15992 }, + { 0x4F21, 15996 }, + { 0x4F17, 16000 }, + { 0x4F19, 16004 }, + { 0x4F1C, 16008 }, + { 0x4F1A, 16013 }, + { 0x4F1D, 16018 }, + { 0x4F1B, 16023 }, + { 0x4F27, 16028 }, + { 0x4EE5, 16031 }, + { 0x4EEF, 16034 }, + { 0x4EE7, 16037 }, + { 0x4EF1, 16040 }, + { 0x4EE9, 16043 }, + { 0x4EE6, 16046 }, + { 0x4EF0, 16049 }, + { 0x4EF2, 16052 }, + { 0x4F09, 16055 }, + { 0x4EF8, 16058 }, + { 0x4F04, 16061 }, + { 0x4EF5, 16064 }, + { 0x4F13, 16067 }, + { 0x4EE8, 16070 }, + { 0x4EFA, 16073 }, + { 0x4EF3, 16076 }, + { 0x4F0E, 16079 }, + { 0x4F0B, 16082 }, + { 0x4F06, 16085 }, + { 0x4F07, 16088 }, + { 0x4F0D, 16091 }, + { 0x4F12, 16094 }, + { 0x4F02, 16097 }, + { 0x4EEA, 16100 }, + { 0x4F0F, 16103 }, + { 0x4F0C, 16106 }, + { 0x4F0A, 16109 }, + { 0x4EF9, 16112 }, + { 0x4EFF, 16115 }, + { 0x4F05, 16118 }, + { 0x4EF6, 16121 }, + { 0x4EFB, 16124 }, + { 0x4EF4, 16127 }, + { 0x4F14, 16130 }, + { 0x4EF7, 16133 }, + { 0x4F01, 16136 }, + { 0x4EFC, 16139 }, + { 0x4F08, 16142 }, + { 0x4F10, 16145 }, + { 0x4F11, 16148 }, + { 0x4F03, 16151 }, + { 0x4EFD, 16154 }, + { 0x4F00, 16157 }, + { 0x4EFE, 16160 }, + { 0x4EED, 16163 }, + { 0x4EEB, 16167 }, + { 0x4EEE, 16171 }, + { 0x4EEC, 16175 }, + { 0x4F28, 16179 }, + { 0x91A3, 16182 }, + { 0x949C, 16184 }, + { 0x7E36, 16186 }, + { 0x8F44, 16188 }, + { 0x1EC1, 16191 }, + { 0x1EC2, 16193 }, + { 0x9038, 16195 }, + { 0x908E, 16197 }, + { 0x1F13, 16199 }, + { 0x005F, 16200 }, + { 0x9441, 16201 }, + { 0x95D2, 16203 }, + { 0x4E1F, 16206 }, + { 0x4E24, 16208 }, + { 0x4E1E, 16211 }, + { 0x4E1C, 16215 }, + { 0x4E18, 16218 }, + { 0x4E1B, 16221 }, + { 0x4E1A, 16224 }, + { 0x4E1D, 16227 }, + { 0x4E19, 16230 }, + { 0x4E35, 16233 }, + { 0x4E36, 16236 }, + { 0x4E23, 16239 }, + { 0x4E21, 16241 }, + { 0x4E27, 16243 }, + { 0x4E2C, 16246 }, + { 0x4E28, 16249 }, + { 0x4E2B, 16252 }, + { 0x4E2A, 16255 }, + { 0x4E2F, 16258 }, + { 0x4E26, 16261 }, + { 0x4E2E, 16264 }, + { 0x4E2D, 16267 }, + { 0x4E29, 16270 }, + { 0x4E14, 16273 }, + { 0x4E0C, 16277 }, + { 0x4E16, 16281 }, + { 0x4E0E, 16285 }, + { 0x4E0B, 16289 }, + { 0x4E15, 16293 }, + { 0x4E17, 16297 }, + { 0x4E0D, 16301 }, + { 0x4E0F, 16305 }, + { 0x4E12, 16309 }, + { 0x4E10, 16314 }, + { 0x4E13, 16319 }, + { 0x4E11, 16324 }, + { 0x4E30, 16329 }, + { 0x4E22, 16332 }, + { 0x4DD6, 16335 }, + { 0x4DE0, 16338 }, + { 0x4DD8, 16341 }, + { 0x4DE2, 16344 }, + { 0x4DDA, 16347 }, + { 0x4DD7, 16350 }, + { 0x4DE1, 16353 }, + { 0x4DE3, 16356 }, + { 0x4DFD, 16359 }, + { 0x4DEA, 16362 }, + { 0x4DF7, 16365 }, + { 0x4DE6, 16368 }, + { 0x4E0A, 16371 }, + { 0x4DD9, 16374 }, + { 0x4DEC, 16377 }, + { 0x4DE4, 16380 }, + { 0x4E04, 16383 }, + { 0x4DFF, 16386 }, + { 0x4DF9, 16389 }, + { 0x4DFB, 16392 }, + { 0x4E02, 16395 }, + { 0x4E09, 16398 }, + { 0x4DF5, 16401 }, + { 0x4DDB, 16404 }, + { 0x4E06, 16407 }, + { 0x4E01, 16410 }, + { 0x4DFE, 16413 }, + { 0x4DEB, 16416 }, + { 0x4DF2, 16419 }, + { 0x4DF8, 16422 }, + { 0x4DE7, 16425 }, + { 0x4DED, 16428 }, + { 0x4DE5, 16431 }, + { 0x4E05, 16434 }, + { 0x4E00, 16437 }, + { 0x4DE8, 16440 }, + { 0x4DFA, 16443 }, + { 0x4DF4, 16446 }, + { 0x4DEE, 16449 }, + { 0x4DFC, 16452 }, + { 0x4E03, 16455 }, + { 0x4E07, 16458 }, + { 0x4E08, 16461 }, + { 0x4DF6, 16464 }, + { 0x4DF0, 16467 }, + { 0x4DF3, 16470 }, + { 0x4DE9, 16473 }, + { 0x4DEF, 16476 }, + { 0x4DF1, 16479 }, + { 0x4E34, 16482 }, + { 0x4DDE, 16486 }, + { 0x4DDC, 16490 }, + { 0x4DDF, 16494 }, + { 0x4DDD, 16498 }, + { 0x4E33, 16502 }, + { 0x4E20, 16505 }, + { 0x4E32, 16507 }, + { 0x4E31, 16510 }, + { 0x4E25, 16513 }, + { 0x1FEF, 16516 }, + { 0x937E, 16518 }, + { 0x8FF6, 16522 }, + { 0x917B, 16523 }, + { 0x917D, 16524 }, + { 0x917C, 16526 }, + { 0x8F15, 16528 }, + { 0x207A, 16529 }, + { 0x9089, 16531 }, + { 0x9075, 16533 }, + { 0x90C6, 16536 }, + { 0x9003, 16538 }, + { 0x2357, 16541 }, + { 0x2347, 16545 }, + { 0x235E, 16548 }, + { 0x2368, 16551 }, + { 0x9174, 16555 }, + { 0x23EF, 16557 }, + { 0x909F, 16559 }, + { 0x90A0, 16564 }, + { 0x23F0, 16569 }, + { 0x9182, 16571 }, + { 0x9076, 16572 }, + { 0x9192, 16575 }, + { 0x9077, 16579 }, + { 0x95FD, 16582 }, + { 0x95FC, 16585 }, + { 0x8EE7, 16588 }, + { 0x2A0F, 16590 }, + { 0x2BEA, 16592 }, + { 0x8F03, 16595 }, + { 0x1D2A, 16596 }, + { 0x22FB, 16598 }, + { 0x905C, 16599 }, + { 0x903D, 16602 }, + { 0x8F40, 16603 }, + { 0x9597, 16605 }, + { 0x000B, 16607 }, + { 0x2659, 16609 }, + { 0x265A, 16615 }, + { 0x2665, 16621 }, + { 0x2651, 16625 }, + { 0x2654, 16630 }, + { 0x264E, 16635 }, + { 0x2650, 16641 }, + { 0x2652, 16646 }, + { 0x2653, 16651 }, + { 0x264F, 16656 }, + { 0x269E, 16662 }, + { 0x22F2, 16667 }, + { 0x3E15, 16668 }, + { 0x8F0C, 16670 }, + { 0x8F0B, 16672 }, + { 0x9040, 16674 }, + { 0x1EAD, 16675 }, + { 0x928E, 16679 }, + { 0x0299, 16681 }, + { 0x1EAE, 16683 }, + { 0x2A26, 16686 }, + { 0x1E6F, 16688 }, + { 0x95C0, 16690 }, + { 0x9529, 16691 }, + { 0x95ED, 16694 }, + { 0x8EEC, 16696 }, + { 0x49D4, 16697 }, + { 0x49D9, 16700 }, + { 0x49D5, 16703 }, + { 0x49D8, 16706 }, + { 0x49D7, 16709 }, + { 0x49DC, 16712 }, + { 0x49DB, 16715 }, + { 0x49DA, 16718 }, + { 0x49D6, 16721 }, + { 0x49E6, 16724 }, + { 0x49EB, 16728 }, + { 0x49DD, 16732 }, + { 0x49E7, 16735 }, + { 0x49EA, 16739 }, + { 0x49E9, 16743 }, + { 0x49EE, 16747 }, + { 0x49ED, 16751 }, + { 0x49E1, 16755 }, + { 0x49E0, 16758 }, + { 0x49EC, 16761 }, + { 0x49E2, 16765 }, + { 0x49E8, 16768 }, + { 0x49E4, 16772 }, + { 0x49E5, 16775 }, + { 0x49DF, 16778 }, + { 0x49DE, 16781 }, + { 0x49E3, 16784 }, + { 0x49EF, 16787 }, + { 0x49F1, 16791 }, + { 0x49F0, 16795 }, + { 0x49F2, 16799 }, + { 0x8F29, 16803 }, + { 0x94F0, 16807 }, + { 0x94A9, 16809 }, + { 0x94DB, 16810 }, + { 0x906D, 16811 }, + { 0x9255, 16812 }, + { 0x9446, 16813 }, + { 0x1E96, 16817 }, + { 0x92A3, 16819 }, + { 0x8F63, 16820 }, + { 0x8F87, 16822 }, + { 0x8F19, 16825 }, + { 0x915F, 16828 }, + { 0x006C, 16832 }, + { 0x90CF, 16834 }, + { 0x4B99, 16839 }, + { 0x4B9E, 16843 }, + { 0x4B9A, 16847 }, + { 0x4B9D, 16851 }, + { 0x4B9C, 16855 }, + { 0x4BA1, 16859 }, + { 0x4B98, 16863 }, + { 0x4BA0, 16867 }, + { 0x4B9F, 16871 }, + { 0x4B9B, 16875 }, + { 0x4B91, 16879 }, + { 0x4B96, 16883 }, + { 0x4B93, 16887 }, + { 0x4B95, 16891 }, + { 0x4B94, 16895 }, + { 0x4B81, 16899 }, + { 0x4B82, 16903 }, + { 0x4B83, 16907 }, + { 0x4B92, 16911 }, + { 0x4B84, 16915 }, + { 0x4B8D, 16919 }, + { 0x4B8F, 16923 }, + { 0x4B8E, 16927 }, + { 0x4B87, 16931 }, + { 0x4B97, 16935 }, + { 0x4B85, 16939 }, + { 0x4B88, 16943 }, + { 0x4B8A, 16947 }, + { 0x4B8C, 16951 }, + { 0x4B7F, 16955 }, + { 0x4B80, 16959 }, + { 0x4B89, 16963 }, + { 0x4B8B, 16967 }, + { 0x4B86, 16971 }, + { 0x4B90, 16975 }, + { 0x234D, 16979 }, + { 0x2256, 16982 }, + { 0x2813, 16985 }, + { 0x2814, 16990 }, + { 0x1EB2, 16995 }, + { 0x1F1D, 16997 }, + { 0x94D0, 16999 }, + { 0x8EE1, 17000 }, + { 0x2333, 17001 }, + { 0x9160, 17003 }, + { 0x9248, 17005 }, + { 0x2326, 17006 }, + { 0x9518, 17007 }, + { 0x0C7F, 17009 }, + { 0x0C84, 17012 }, + { 0x0C80, 17015 }, + { 0x0C83, 17018 }, + { 0x0C82, 17021 }, + { 0x0C87, 17024 }, + { 0x0C7E, 17027 }, + { 0x0C86, 17030 }, + { 0x0C85, 17033 }, + { 0x0C81, 17036 }, + { 0x0C6D, 17039 }, + { 0x0C5F, 17043 }, + { 0x0C4C, 17047 }, + { 0x0C46, 17051 }, + { 0x0C40, 17055 }, + { 0x0C4F, 17059 }, + { 0x0C51, 17063 }, + { 0x0C5D, 17067 }, + { 0x0C60, 17071 }, + { 0x0C33, 17075 }, + { 0x0C57, 17079 }, + { 0x0C5E, 17083 }, + { 0x0C58, 17087 }, + { 0x0C53, 17090 }, + { 0x0C4B, 17094 }, + { 0x0C45, 17098 }, + { 0x0C4D, 17102 }, + { 0x0C55, 17106 }, + { 0x0C56, 17110 }, + { 0x0C3D, 17113 }, + { 0x0C5C, 17117 }, + { 0x0C5B, 17121 }, + { 0x0C5A, 17125 }, + { 0x0C47, 17129 }, + { 0x0C41, 17133 }, + { 0x0C59, 17137 }, + { 0x0C54, 17141 }, + { 0x0C3F, 17145 }, + { 0x0C3A, 17149 }, + { 0x0C3E, 17153 }, + { 0x0C3C, 17157 }, + { 0x0C3B, 17161 }, + { 0x0C34, 17165 }, + { 0x0C37, 17169 }, + { 0x0C35, 17173 }, + { 0x0C36, 17177 }, + { 0x0C38, 17181 }, + { 0x0C76, 17185 }, + { 0x0C77, 17189 }, + { 0x0C78, 17193 }, + { 0x0C79, 17197 }, + { 0x0C63, 17201 }, + { 0x0C39, 17205 }, + { 0x0C50, 17209 }, + { 0x0C4E, 17213 }, + { 0x0C52, 17217 }, + { 0x0C42, 17221 }, + { 0x0C4A, 17225 }, + { 0x0C48, 17229 }, + { 0x0C49, 17233 }, + { 0x0C44, 17237 }, + { 0x0C43, 17241 }, + { 0x0C62, 17245 }, + { 0x0C6E, 17249 }, + { 0x0C66, 17253 }, + { 0x0C70, 17257 }, + { 0x0C6A, 17261 }, + { 0x0C64, 17265 }, + { 0x0C6F, 17269 }, + { 0x0C71, 17273 }, + { 0x0C72, 17278 }, + { 0x0C65, 17283 }, + { 0x0C67, 17287 }, + { 0x0C68, 17291 }, + { 0x0C6B, 17295 }, + { 0x0C69, 17299 }, + { 0x0C89, 17303 }, + { 0x0C7D, 17306 }, + { 0x0C6C, 17309 }, + { 0x0C74, 17312 }, + { 0x0C7B, 17315 }, + { 0x0C7C, 17318 }, + { 0x0C75, 17321 }, + { 0x0C61, 17324 }, + { 0x0C88, 17327 }, + { 0x0C73, 17330 }, + { 0x0C7A, 17333 }, + { 0x9346, 17336 }, + { 0x1C89, 17339 }, + { 0x934D, 17341 }, + { 0x262A, 17343 }, + { 0x484C, 17344 }, + { 0x89DE, 17351 }, + { 0x89DD, 17355 }, + { 0x89D6, 17358 }, + { 0x89D1, 17361 }, + { 0x89DA, 17364 }, + { 0x89D5, 17367 }, + { 0x89DB, 17370 }, + { 0x89C1, 17373 }, + { 0x89C3, 17376 }, + { 0x89D8, 17379 }, + { 0x89C5, 17382 }, + { 0x89CE, 17385 }, + { 0x89D3, 17388 }, + { 0x89CD, 17391 }, + { 0x89C4, 17394 }, + { 0x89D0, 17397 }, + { 0x89C6, 17400 }, + { 0x89C7, 17403 }, + { 0x89C0, 17406 }, + { 0x89CF, 17409 }, + { 0x89C9, 17412 }, + { 0x89C2, 17415 }, + { 0x89CC, 17418 }, + { 0x89CB, 17421 }, + { 0x89CA, 17424 }, + { 0x89C8, 17427 }, + { 0x89D7, 17430 }, + { 0x89D2, 17434 }, + { 0x89DC, 17438 }, + { 0x89D9, 17442 }, + { 0x89D4, 17446 }, + { 0x923D, 17450 }, + { 0x923E, 17451 }, + { 0x1EFF, 17453 }, + { 0x2808, 17454 }, + { 0x1FE3, 17458 }, + { 0x934A, 17460 }, + { 0x1F2F, 17464 }, + { 0x1F30, 17467 }, + { 0x935E, 17470 }, + { 0x9358, 17475 }, + { 0x9364, 17480 }, + { 0x9375, 17485 }, + { 0x934B, 17491 }, + { 0x932D, 17495 }, + { 0x9337, 17499 }, + { 0x9230, 17503 }, + { 0x9352, 17507 }, + { 0x922F, 17510 }, + { 0x2BC9, 17513 }, + { 0x276B, 17515 }, + { 0x255F, 17520 }, + { 0x3E52, 17525 }, + { 0x2BDD, 17528 }, + { 0x1F5E, 17530 }, + { 0x3E4E, 17532 }, + { 0x229C, 17534 }, + { 0x8F43, 17537 }, + { 0x8EDF, 17539 }, + { 0x8F2A, 17542 }, + { 0x95D5, 17544 }, + { 0x8FED, 17545 }, + { 0x95CD, 17547 }, + { 0x1CE0, 17548 }, + { 0x2A27, 17550 }, + { 0x95C9, 17554 }, + { 0x1C8B, 17555 }, + { 0x1C8D, 17558 }, + { 0x3EF9, 17561 }, + { 0x1C8C, 17565 }, + { 0x280B, 17568 }, + { 0x1C8C, 17569 }, + { 0x1C8B, 17570 }, + { 0x25CB, 17571 }, + { 0x0073, 17573 }, + { 0x8BA5, 17575 }, + { 0x8BAE, 17578 }, + { 0x8BB3, 17581 }, + { 0x8BAF, 17584 }, + { 0x8BB2, 17587 }, + { 0x8BB1, 17590 }, + { 0x8BB6, 17593 }, + { 0x8BAD, 17596 }, + { 0x8BB5, 17599 }, + { 0x8BB4, 17602 }, + { 0x8BB0, 17605 }, + { 0x8BA8, 17608 }, + { 0x8BAB, 17610 }, + { 0x8B8C, 17612 }, + { 0x8B8E, 17616 }, + { 0x8B8F, 17620 }, + { 0x8B96, 17624 }, + { 0x8B87, 17628 }, + { 0x8B8D, 17632 }, + { 0x8B9B, 17636 }, + { 0x8B99, 17640 }, + { 0x8B89, 17644 }, + { 0x8B8B, 17648 }, + { 0x8B9D, 17652 }, + { 0x8B9F, 17656 }, + { 0x8B95, 17660 }, + { 0x8B8A, 17664 }, + { 0x8B98, 17668 }, + { 0x8B90, 17672 }, + { 0x8BA1, 17676 }, + { 0x8B94, 17680 }, + { 0x8BA0, 17684 }, + { 0x8BA3, 17688 }, + { 0x8B9E, 17692 }, + { 0x8B93, 17696 }, + { 0x8B9C, 17700 }, + { 0x8BA4, 17704 }, + { 0x8B92, 17708 }, + { 0x8B91, 17712 }, + { 0x8BA2, 17716 }, + { 0x8B83, 17720 }, + { 0x8B97, 17724 }, + { 0x8B85, 17728 }, + { 0x8B86, 17732 }, + { 0x8B9A, 17736 }, + { 0x8B84, 17740 }, + { 0x8B88, 17744 }, + { 0x8BA6, 17748 }, + { 0x8B6A, 17751 }, + { 0x8B6C, 17755 }, + { 0x8B6D, 17759 }, + { 0x8B74, 17763 }, + { 0x8B65, 17767 }, + { 0x8B6B, 17771 }, + { 0x8B79, 17775 }, + { 0x8B77, 17779 }, + { 0x8B67, 17783 }, + { 0x8B69, 17787 }, + { 0x8B7B, 17791 }, + { 0x8B7D, 17795 }, + { 0x8B73, 17799 }, + { 0x8B68, 17803 }, + { 0x8B76, 17807 }, + { 0x8B6E, 17811 }, + { 0x8B7F, 17815 }, + { 0x8B72, 17819 }, + { 0x8B7E, 17823 }, + { 0x8B81, 17827 }, + { 0x8B7C, 17831 }, + { 0x8B71, 17835 }, + { 0x8B7A, 17839 }, + { 0x8B82, 17843 }, + { 0x8B70, 17847 }, + { 0x8B6F, 17851 }, + { 0x8B80, 17855 }, + { 0x8B61, 17859 }, + { 0x8B75, 17863 }, + { 0x8B63, 17867 }, + { 0x8B64, 17871 }, + { 0x8B78, 17875 }, + { 0x8B62, 17879 }, + { 0x8B66, 17883 }, + { 0x8BB8, 17887 }, + { 0x8BB7, 17891 }, + { 0x8BAA, 17895 }, + { 0x8BA9, 17899 }, + { 0x8BA7, 17902 }, + { 0x8BAC, 17905 }, + { 0x94FF, 17908 }, + { 0x2047, 17909 }, + { 0x7C98, 17911 }, + { 0x7C97, 17915 }, + { 0x7C95, 17919 }, + { 0x7C96, 17923 }, + { 0x7C9A, 17927 }, + { 0x7C99, 17930 }, + { 0x9031, 17933 }, + { 0x7C93, 17935 }, + { 0x7C94, 17939 }, + { 0x7C9B, 17943 }, + { 0x7C9C, 17946 }, + { 0x9055, 17949 }, + { 0x1E77, 17951 }, + { 0x25CA, 17952 }, + { 0x25D0, 17956 }, + { 0x91D3, 17959 }, + { 0x2274, 17961 }, + { 0x9420, 17962 }, + { 0x2562, 17968 }, + { 0x2563, 17974 }, + { 0x9421, 17980 }, + { 0x2560, 17987 }, + { 0x2561, 17993 }, + { 0x4147, 17999 }, + { 0x9481, 18001 }, + { 0x949D, 18002 }, + { 0x36AC, 18003 }, + { 0x36AD, 18006 }, + { 0x36AE, 18008 }, + { 0x3659, 18010 }, + { 0x3662, 18013 }, + { 0x366C, 18016 }, + { 0x3660, 18019 }, + { 0x365B, 18022 }, + { 0x365D, 18025 }, + { 0x3691, 18028 }, + { 0x365A, 18031 }, + { 0x369E, 18034 }, + { 0x3698, 18037 }, + { 0x365C, 18040 }, + { 0x3663, 18043 }, + { 0x3695, 18046 }, + { 0x3686, 18049 }, + { 0x369C, 18052 }, + { 0x3687, 18055 }, + { 0x369F, 18058 }, + { 0x366E, 18061 }, + { 0x3694, 18064 }, + { 0x3688, 18067 }, + { 0x3676, 18070 }, + { 0x3664, 18073 }, + { 0x3696, 18076 }, + { 0x3685, 18079 }, + { 0x3670, 18082 }, + { 0x369D, 18085 }, + { 0x3693, 18088 }, + { 0x367B, 18091 }, + { 0x3684, 18094 }, + { 0x3692, 18097 }, + { 0x368B, 18100 }, + { 0x3674, 18103 }, + { 0x36A2, 18106 }, + { 0x3697, 18109 }, + { 0x369B, 18112 }, + { 0x368E, 18115 }, + { 0x3661, 18118 }, + { 0x3683, 18121 }, + { 0x3681, 18124 }, + { 0x368A, 18127 }, + { 0x365E, 18130 }, + { 0x369A, 18133 }, + { 0x3665, 18136 }, + { 0x368F, 18139 }, + { 0x3679, 18142 }, + { 0x366D, 18145 }, + { 0x3669, 18148 }, + { 0x365F, 18151 }, + { 0x36A3, 18154 }, + { 0x36A1, 18157 }, + { 0x3682, 18160 }, + { 0x3678, 18163 }, + { 0x367A, 18166 }, + { 0x367D, 18169 }, + { 0x3673, 18172 }, + { 0x36A0, 18175 }, + { 0x3699, 18178 }, + { 0x366A, 18181 }, + { 0x368D, 18184 }, + { 0x367F, 18187 }, + { 0x367C, 18190 }, + { 0x3680, 18193 }, + { 0x36A4, 18196 }, + { 0x3675, 18199 }, + { 0x367E, 18202 }, + { 0x3690, 18205 }, + { 0x3689, 18208 }, + { 0x3666, 18211 }, + { 0x3672, 18214 }, + { 0x366F, 18217 }, + { 0x36A7, 18220 }, + { 0x3667, 18223 }, + { 0x3668, 18226 }, + { 0x366B, 18229 }, + { 0x3677, 18232 }, + { 0x36A5, 18235 }, + { 0x3671, 18238 }, + { 0x36A6, 18241 }, + { 0x36A8, 18244 }, + { 0x368C, 18247 }, + { 0x6FA7, 18250 }, + { 0x6FDA, 18256 }, + { 0x6FAF, 18260 }, + { 0x6F93, 18265 }, + { 0x6FD7, 18270 }, + { 0x6FBA, 18274 }, + { 0x6F9F, 18278 }, + { 0x6FC4, 18283 }, + { 0x6FA5, 18288 }, + { 0x6F8B, 18293 }, + { 0x6FDC, 18298 }, + { 0x6FB0, 18302 }, + { 0x6FDB, 18307 }, + { 0x6FD6, 18311 }, + { 0x6F8E, 18315 }, + { 0x6FB1, 18320 }, + { 0x6F91, 18324 }, + { 0x6F90, 18331 }, + { 0x6F8A, 18338 }, + { 0x6F89, 18344 }, + { 0x6FB4, 18350 }, + { 0x6FC1, 18354 }, + { 0x6FC3, 18358 }, + { 0x6FD2, 18362 }, + { 0x6F9C, 18366 }, + { 0x6FD9, 18370 }, + { 0x6FC0, 18374 }, + { 0x6FAE, 18378 }, + { 0x6FC2, 18382 }, + { 0x6FBC, 18386 }, + { 0x6FD5, 18390 }, + { 0x6FDD, 18394 }, + { 0x6FB3, 18398 }, + { 0x6FCE, 18402 }, + { 0x6FD8, 18406 }, + { 0x6FC6, 18410 }, + { 0x6FA0, 18414 }, + { 0x6FA9, 18419 }, + { 0x6FD0, 18424 }, + { 0x6FC8, 18428 }, + { 0x6FA6, 18433 }, + { 0x6FD3, 18438 }, + { 0x6FC7, 18442 }, + { 0x6FBE, 18448 }, + { 0x6FAA, 18452 }, + { 0x6F8D, 18456 }, + { 0x6F88, 18461 }, + { 0x6F9E, 18466 }, + { 0x6FB6, 18470 }, + { 0x6FCD, 18474 }, + { 0x6FCC, 18478 }, + { 0x6F87, 18482 }, + { 0x6FB5, 18487 }, + { 0x6FBF, 18491 }, + { 0x6FB9, 18495 }, + { 0x6FCF, 18499 }, + { 0x6FAB, 18503 }, + { 0x6F94, 18507 }, + { 0x6F9B, 18511 }, + { 0x6FD4, 18515 }, + { 0x6FC9, 18519 }, + { 0x6FA2, 18523 }, + { 0x6F8F, 18527 }, + { 0x6FC5, 18533 }, + { 0x6FB7, 18537 }, + { 0x6FD1, 18541 }, + { 0x6FA1, 18545 }, + { 0x6F96, 18549 }, + { 0x6FBD, 18553 }, + { 0x6FAD, 18557 }, + { 0x6FCA, 18561 }, + { 0x6F99, 18565 }, + { 0x6FA4, 18569 }, + { 0x6F98, 18573 }, + { 0x6FCB, 18577 }, + { 0x6FB2, 18581 }, + { 0x6F95, 18585 }, + { 0x6FA3, 18589 }, + { 0x6F92, 18593 }, + { 0x6FB8, 18597 }, + { 0x6F9A, 18601 }, + { 0x6F92, 18605 }, + { 0x6F97, 18609 }, + { 0x6F9D, 18613 }, + { 0x6F8C, 18617 }, + { 0x6FA8, 18621 }, + { 0x6FAC, 18625 }, + { 0x6FBB, 18629 }, + { 0x7013, 18633 }, + { 0x700F, 18637 }, + { 0x700E, 18642 }, + { 0x6FEF, 18647 }, + { 0x6FDF, 18652 }, + { 0x700C, 18657 }, + { 0x6FE7, 18661 }, + { 0x7014, 18665 }, + { 0x6FEA, 18669 }, + { 0x7010, 18675 }, + { 0x6FE2, 18679 }, + { 0x6FE3, 18684 }, + { 0x6FEC, 18689 }, + { 0x6FF4, 18694 }, + { 0x6FEE, 18699 }, + { 0x6FE1, 18703 }, + { 0x7004, 18708 }, + { 0x700A, 18712 }, + { 0x6FF3, 18716 }, + { 0x7000, 18721 }, + { 0x7009, 18725 }, + { 0x6FF2, 18730 }, + { 0x7015, 18735 }, + { 0x7012, 18739 }, + { 0x6FF0, 18743 }, + { 0x6FE0, 18748 }, + { 0x6FFF, 18752 }, + { 0x6FFA, 18756 }, + { 0x6FE9, 18760 }, + { 0x6FE4, 18765 }, + { 0x700B, 18769 }, + { 0x6FFC, 18773 }, + { 0x6FEB, 18778 }, + { 0x6FF9, 18783 }, + { 0x6FFD, 18787 }, + { 0x700D, 18791 }, + { 0x6FF5, 18795 }, + { 0x6FF8, 18799 }, + { 0x7005, 18803 }, + { 0x7003, 18807 }, + { 0x7011, 18811 }, + { 0x7001, 18815 }, + { 0x7002, 18819 }, + { 0x6FDE, 18824 }, + { 0x6FE8, 18828 }, + { 0x6FE5, 18832 }, + { 0x6FF7, 18836 }, + { 0x6FE6, 18840 }, + { 0x6FFB, 18844 }, + { 0x7007, 18849 }, + { 0x7008, 18853 }, + { 0x6FFE, 18857 }, + { 0x6FF6, 18861 }, + { 0x7006, 18865 }, + { 0x6FF1, 18869 }, + { 0x6FED, 18873 }, + { 0x7054, 18877 }, + { 0x705F, 18881 }, + { 0x703A, 18886 }, + { 0x704A, 18891 }, + { 0x7029, 18895 }, + { 0x7043, 18900 }, + { 0x7030, 18904 }, + { 0x7070, 18908 }, + { 0x7071, 18913 }, + { 0x7050, 18918 }, + { 0x7055, 18922 }, + { 0x704C, 18926 }, + { 0x703D, 18930 }, + { 0x7074, 18934 }, + { 0x7064, 18938 }, + { 0x7073, 18942 }, + { 0x7045, 18946 }, + { 0x7021, 18950 }, + { 0x7017, 18955 }, + { 0x7076, 18959 }, + { 0x7075, 18963 }, + { 0x7077, 18967 }, + { 0x7058, 18971 }, + { 0x7060, 18975 }, + { 0x7018, 18979 }, + { 0x7047, 18983 }, + { 0x7027, 18987 }, + { 0x7069, 18991 }, + { 0x705C, 18995 }, + { 0x706A, 19000 }, + { 0x7025, 19005 }, + { 0x702D, 19010 }, + { 0x702B, 19014 }, + { 0x706D, 19018 }, + { 0x706E, 19022 }, + { 0x705E, 19026 }, + { 0x7061, 19030 }, + { 0x7072, 19034 }, + { 0x7051, 19038 }, + { 0x7057, 19042 }, + { 0x7056, 19046 }, + { 0x705A, 19050 }, + { 0x705D, 19054 }, + { 0x703B, 19058 }, + { 0x705B, 19062 }, + { 0x7020, 19066 }, + { 0x7031, 19072 }, + { 0x706F, 19076 }, + { 0x7035, 19080 }, + { 0x7038, 19085 }, + { 0x702E, 19089 }, + { 0x701F, 19093 }, + { 0x7052, 19097 }, + { 0x7022, 19101 }, + { 0x7068, 19105 }, + { 0x7044, 19109 }, + { 0x7032, 19113 }, + { 0x701A, 19117 }, + { 0x7042, 19121 }, + { 0x701C, 19125 }, + { 0x7016, 19129 }, + { 0x704B, 19134 }, + { 0x706C, 19138 }, + { 0x7034, 19142 }, + { 0x7046, 19146 }, + { 0x704E, 19150 }, + { 0x702A, 19155 }, + { 0x7062, 19159 }, + { 0x7036, 19163 }, + { 0x706B, 19167 }, + { 0x701D, 19171 }, + { 0x7028, 19175 }, + { 0x702F, 19179 }, + { 0x7065, 19183 }, + { 0x7066, 19187 }, + { 0x7049, 19191 }, + { 0x7053, 19195 }, + { 0x7024, 19199 }, + { 0x703C, 19203 }, + { 0x704F, 19207 }, + { 0x7063, 19211 }, + { 0x7067, 19215 }, + { 0x703F, 19219 }, + { 0x7037, 19223 }, + { 0x7059, 19228 }, + { 0x702C, 19232 }, + { 0x7023, 19236 }, + { 0x7033, 19240 }, + { 0x7041, 19244 }, + { 0x704D, 19248 }, + { 0x701E, 19252 }, + { 0x703E, 19256 }, + { 0x7039, 19260 }, + { 0x7040, 19264 }, + { 0x7048, 19268 }, + { 0x7019, 19272 }, + { 0x701B, 19276 }, + { 0x7026, 19280 }, + { 0x70D8, 19284 }, + { 0x70D0, 19288 }, + { 0x70DA, 19292 }, + { 0x70E2, 19296 }, + { 0x70DE, 19300 }, + { 0x70E8, 19304 }, + { 0x7098, 19308 }, + { 0x70EC, 19312 }, + { 0x708B, 19316 }, + { 0x70C1, 19320 }, + { 0x70C6, 19324 }, + { 0x70B7, 19328 }, + { 0x70E6, 19332 }, + { 0x70A5, 19336 }, + { 0x70A4, 19340 }, + { 0x707A, 19344 }, + { 0x70D4, 19348 }, + { 0x70BC, 19352 }, + { 0x70E1, 19356 }, + { 0x70B4, 19360 }, + { 0x70E4, 19364 }, + { 0x70D1, 19368 }, + { 0x70E7, 19373 }, + { 0x70D5, 19378 }, + { 0x708E, 19382 }, + { 0x70EB, 19386 }, + { 0x70DF, 19390 }, + { 0x70AB, 19394 }, + { 0x708A, 19398 }, + { 0x70D9, 19402 }, + { 0x70D2, 19406 }, + { 0x70D3, 19410 }, + { 0x7079, 19414 }, + { 0x7094, 19418 }, + { 0x7099, 19422 }, + { 0x70AD, 19426 }, + { 0x70B3, 19430 }, + { 0x708D, 19434 }, + { 0x70DD, 19438 }, + { 0x70CB, 19442 }, + { 0x707D, 19446 }, + { 0x70A7, 19450 }, + { 0x70EA, 19454 }, + { 0x7078, 19459 }, + { 0x70C5, 19463 }, + { 0x7092, 19467 }, + { 0x707B, 19471 }, + { 0x70A0, 19475 }, + { 0x70E5, 19479 }, + { 0x70BE, 19483 }, + { 0x709C, 19487 }, + { 0x709F, 19491 }, + { 0x7089, 19495 }, + { 0x70C7, 19499 }, + { 0x70E0, 19503 }, + { 0x70E9, 19507 }, + { 0x7081, 19511 }, + { 0x70A9, 19515 }, + { 0x70B6, 19519 }, + { 0x70A2, 19523 }, + { 0x70AE, 19527 }, + { 0x7084, 19531 }, + { 0x70DB, 19535 }, + { 0x70E3, 19539 }, + { 0x70C0, 19543 }, + { 0x70C8, 19547 }, + { 0x7087, 19551 }, + { 0x70C4, 19555 }, + { 0x70BB, 19559 }, + { 0x70BD, 19563 }, + { 0x7096, 19567 }, + { 0x70A8, 19572 }, + { 0x70D6, 19576 }, + { 0x70D7, 19580 }, + { 0x708F, 19584 }, + { 0x70B9, 19588 }, + { 0x7090, 19592 }, + { 0x70CA, 19596 }, + { 0x7085, 19600 }, + { 0x7083, 19604 }, + { 0x707E, 19608 }, + { 0x707C, 19612 }, + { 0x70CE, 19616 }, + { 0x707F, 19620 }, + { 0x70CD, 19624 }, + { 0x70BF, 19628 }, + { 0x70DC, 19632 }, + { 0x70AF, 19636 }, + { 0x7082, 19640 }, + { 0x70AC, 19644 }, + { 0x70CF, 19648 }, + { 0x709E, 19652 }, + { 0x70B1, 19656 }, + { 0x70A1, 19660 }, + { 0x70A3, 19664 }, + { 0x70B8, 19668 }, + { 0x70C2, 19672 }, + { 0x70CC, 19676 }, + { 0x70C3, 19680 }, + { 0x709A, 19684 }, + { 0x70A6, 19688 }, + { 0x70B2, 19692 }, + { 0x70B5, 19696 }, + { 0x7093, 19700 }, + { 0x7088, 19704 }, + { 0x70AA, 19708 }, + { 0x70C9, 19712 }, + { 0x7091, 19716 }, + { 0x709D, 19720 }, + { 0x70BA, 19724 }, + { 0x7097, 19728 }, + { 0x7095, 19732 }, + { 0x708C, 19736 }, + { 0x7080, 19740 }, + { 0x70B0, 19744 }, + { 0x709B, 19748 }, + { 0x7086, 19752 }, + { 0x715C, 19756 }, + { 0x715F, 19760 }, + { 0x715E, 19764 }, + { 0x7142, 19768 }, + { 0x714F, 19772 }, + { 0x7159, 19777 }, + { 0x717C, 19782 }, + { 0x7185, 19787 }, + { 0x7180, 19791 }, + { 0x7174, 19795 }, + { 0x7182, 19799 }, + { 0x7175, 19803 }, + { 0x717D, 19807 }, + { 0x7158, 19811 }, + { 0x7161, 19816 }, + { 0x717E, 19821 }, + { 0x711F, 19825 }, + { 0x7127, 19829 }, + { 0x7188, 19833 }, + { 0x7172, 19837 }, + { 0x715A, 19841 }, + { 0x713B, 19845 }, + { 0x713E, 19849 }, + { 0x7153, 19853 }, + { 0x70F0, 19857 }, + { 0x7160, 19861 }, + { 0x7102, 19865 }, + { 0x717F, 19869 }, + { 0x713F, 19873 }, + { 0x7112, 19877 }, + { 0x7183, 19881 }, + { 0x7181, 19885 }, + { 0x7186, 19889 }, + { 0x7150, 19893 }, + { 0x714C, 19897 }, + { 0x7179, 19901 }, + { 0x7147, 19905 }, + { 0x7134, 19910 }, + { 0x70F3, 19915 }, + { 0x7170, 19919 }, + { 0x7118, 19923 }, + { 0x7177, 19927 }, + { 0x70F5, 19931 }, + { 0x710C, 19935 }, + { 0x70FD, 19939 }, + { 0x7117, 19943 }, + { 0x717A, 19947 }, + { 0x70F4, 19951 }, + { 0x7162, 19955 }, + { 0x70F9, 19959 }, + { 0x7163, 19963 }, + { 0x7187, 19967 }, + { 0x7184, 19971 }, + { 0x7100, 19975 }, + { 0x715D, 19979 }, + { 0x7131, 19983 }, + { 0x7173, 19987 }, + { 0x70F1, 19991 }, + { 0x7171, 19995 }, + { 0x70FC, 19999 }, + { 0x7133, 20003 }, + { 0x7135, 20007 }, + { 0x716A, 20011 }, + { 0x7169, 20016 }, + { 0x716C, 20021 }, + { 0x716B, 20025 }, + { 0x714B, 20029 }, + { 0x7130, 20033 }, + { 0x7141, 20037 }, + { 0x7189, 20041 }, + { 0x716D, 20045 }, + { 0x7132, 20049 }, + { 0x7101, 20053 }, + { 0x7126, 20057 }, + { 0x70F2, 20061 }, + { 0x7113, 20065 }, + { 0x7105, 20069 }, + { 0x712D, 20073 }, + { 0x710E, 20077 }, + { 0x714A, 20081 }, + { 0x714D, 20085 }, + { 0x7164, 20089 }, + { 0x7119, 20095 }, + { 0x70ED, 20100 }, + { 0x7115, 20104 }, + { 0x70F7, 20108 }, + { 0x70FA, 20112 }, + { 0x7104, 20116 }, + { 0x7107, 20120 }, + { 0x715B, 20124 }, + { 0x716F, 20128 }, + { 0x712F, 20133 }, + { 0x7155, 20137 }, + { 0x7143, 20141 }, + { 0x712E, 20145 }, + { 0x7148, 20149 }, + { 0x70FF, 20153 }, + { 0x710B, 20157 }, + { 0x7144, 20161 }, + { 0x716E, 20165 }, + { 0x7154, 20169 }, + { 0x7149, 20173 }, + { 0x70F8, 20177 }, + { 0x7151, 20181 }, + { 0x7176, 20185 }, + { 0x7165, 20189 }, + { 0x717B, 20193 }, + { 0x7128, 20197 }, + { 0x7116, 20201 }, + { 0x70EE, 20206 }, + { 0x711D, 20210 }, + { 0x7125, 20214 }, + { 0x7145, 20218 }, + { 0x7166, 20222 }, + { 0x711B, 20226 }, + { 0x7139, 20230 }, + { 0x713C, 20234 }, + { 0x711C, 20238 }, + { 0x710F, 20242 }, + { 0x7121, 20246 }, + { 0x70FB, 20250 }, + { 0x70EF, 20254 }, + { 0x7136, 20258 }, + { 0x712C, 20262 }, + { 0x7137, 20266 }, + { 0x7157, 20270 }, + { 0x7152, 20274 }, + { 0x713D, 20278 }, + { 0x7167, 20282 }, + { 0x710A, 20286 }, + { 0x7108, 20290 }, + { 0x7138, 20294 }, + { 0x7122, 20298 }, + { 0x7120, 20302 }, + { 0x7124, 20306 }, + { 0x711E, 20310 }, + { 0x7168, 20314 }, + { 0x714E, 20318 }, + { 0x713A, 20322 }, + { 0x7106, 20326 }, + { 0x7178, 20330 }, + { 0x7103, 20334 }, + { 0x70F6, 20338 }, + { 0x7109, 20342 }, + { 0x7123, 20346 }, + { 0x7156, 20350 }, + { 0x7129, 20354 }, + { 0x7114, 20358 }, + { 0x7146, 20362 }, + { 0x710D, 20366 }, + { 0x7140, 20370 }, + { 0x7111, 20374 }, + { 0x712B, 20378 }, + { 0x712A, 20382 }, + { 0x70FE, 20386 }, + { 0x7110, 20390 }, + { 0x711A, 20394 }, + { 0x7198, 20399 }, + { 0x718B, 20403 }, + { 0x718D, 20407 }, + { 0x718A, 20411 }, + { 0x71B6, 20415 }, + { 0x718C, 20419 }, + { 0x7191, 20423 }, + { 0x71B4, 20427 }, + { 0x71B9, 20431 }, + { 0x71BA, 20435 }, + { 0x71AB, 20439 }, + { 0x71A0, 20443 }, + { 0x71AA, 20447 }, + { 0x719B, 20451 }, + { 0x71B3, 20455 }, + { 0x71A4, 20459 }, + { 0x71B2, 20463 }, + { 0x71AD, 20467 }, + { 0x719E, 20471 }, + { 0x71BD, 20475 }, + { 0x71B5, 20479 }, + { 0x7190, 20483 }, + { 0x71A9, 20487 }, + { 0x718E, 20491 }, + { 0x71B8, 20495 }, + { 0x7192, 20499 }, + { 0x71B0, 20503 }, + { 0x71A3, 20507 }, + { 0x7199, 20511 }, + { 0x7195, 20515 }, + { 0x718F, 20519 }, + { 0x71BC, 20523 }, + { 0x71A8, 20527 }, + { 0x71A2, 20531 }, + { 0x719D, 20535 }, + { 0x71BB, 20539 }, + { 0x71B7, 20543 }, + { 0x7196, 20547 }, + { 0x71AF, 20551 }, + { 0x71A5, 20555 }, + { 0x71A7, 20559 }, + { 0x719F, 20563 }, + { 0x71A6, 20567 }, + { 0x71B1, 20571 }, + { 0x71AC, 20575 }, + { 0x7193, 20579 }, + { 0x719C, 20583 }, + { 0x719A, 20587 }, + { 0x71BF, 20591 }, + { 0x7194, 20595 }, + { 0x7197, 20599 }, + { 0x71A1, 20603 }, + { 0x71BE, 20607 }, + { 0x71AE, 20611 }, + { 0x36AB, 20615 }, + { 0x36B0, 20617 }, + { 0x36A9, 20620 }, + { 0x36AA, 20624 }, + { 0x36AF, 20628 }, + { 0x95AD, 20630 }, + { 0x7267, 20631 }, + { 0x725B, 20635 }, + { 0x7260, 20639 }, + { 0x7261, 20643 }, + { 0x725C, 20647 }, + { 0x725E, 20651 }, + { 0x7256, 20655 }, + { 0x7253, 20659 }, + { 0x7252, 20663 }, + { 0x725F, 20667 }, + { 0x7247, 20671 }, + { 0x724D, 20675 }, + { 0x7245, 20679 }, + { 0x725D, 20683 }, + { 0x7259, 20687 }, + { 0x7246, 20691 }, + { 0x7255, 20695 }, + { 0x7257, 20699 }, + { 0x724F, 20703 }, + { 0x7250, 20707 }, + { 0x724A, 20711 }, + { 0x7251, 20715 }, + { 0x7248, 20719 }, + { 0x7254, 20723 }, + { 0x7249, 20727 }, + { 0x724B, 20731 }, + { 0x7244, 20735 }, + { 0x724E, 20739 }, + { 0x724C, 20743 }, + { 0x7258, 20747 }, + { 0x725A, 20751 }, + { 0x7263, 20755 }, + { 0x7264, 20760 }, + { 0x7262, 20765 }, + { 0x7265, 20770 }, + { 0x7266, 20775 }, + { 0x189F, 20780 }, + { 0x18A0, 20783 }, + { 0x18A3, 20787 }, + { 0x18A5, 20791 }, + { 0x18A7, 20795 }, + { 0x18A8, 20799 }, + { 0x18A2, 20806 }, + { 0x18A4, 20810 }, + { 0x18A6, 20815 }, + { 0x18A1, 20820 }, + { 0x1879, 20825 }, + { 0x189D, 20828 }, + { 0x189E, 20831 }, + { 0x187E, 20834 }, + { 0x189A, 20837 }, + { 0x188A, 20840 }, + { 0x1887, 20843 }, + { 0x187B, 20846 }, + { 0x1889, 20849 }, + { 0x1897, 20852 }, + { 0x188D, 20855 }, + { 0x1882, 20858 }, + { 0x1880, 20861 }, + { 0x188B, 20864 }, + { 0x1891, 20867 }, + { 0x1884, 20870 }, + { 0x1894, 20873 }, + { 0x189C, 20876 }, + { 0x189B, 20879 }, + { 0x1896, 20882 }, + { 0x1899, 20885 }, + { 0x187F, 20888 }, + { 0x1886, 20892 }, + { 0x1890, 20896 }, + { 0x188F, 20900 }, + { 0x187D, 20904 }, + { 0x1883, 20908 }, + { 0x1893, 20912 }, + { 0x187A, 20916 }, + { 0x1888, 20920 }, + { 0x187C, 20924 }, + { 0x1898, 20928 }, + { 0x188E, 20932 }, + { 0x1881, 20936 }, + { 0x188C, 20940 }, + { 0x1892, 20944 }, + { 0x1885, 20948 }, + { 0x1895, 20952 }, + { 0x18AD, 20956 }, + { 0x18AF, 20961 }, + { 0x18B0, 20965 }, + { 0x18AE, 20969 }, + { 0x18AB, 20973 }, + { 0x18AA, 20975 }, + { 0x18A9, 20979 }, + { 0x18AC, 20983 }, + { 0x8F89, 20985 }, + { 0x95E9, 20988 }, + { 0x8F24, 20989 }, + { 0x94DA, 20991 }, + { 0x9155, 20992 }, + { 0x233E, 20997 }, + { 0x222C, 20999 }, + { 0x228F, 21003 }, + { 0x9156, 21006 }, + { 0x22BD, 21011 }, + { 0x2352, 21013 }, + { 0x915D, 21017 }, + { 0x2304, 21022 }, + { 0x2246, 21026 }, + { 0x914F, 21030 }, + { 0x22E4, 21035 }, + { 0x2231, 21038 }, + { 0x9331, 21040 }, + { 0x933C, 21043 }, + { 0x9342, 21046 }, + { 0x2749, 21049 }, + { 0x933D, 21053 }, + { 0x9343, 21057 }, + { 0x2286, 21061 }, + { 0x9567, 21064 }, + { 0x953D, 21072 }, + { 0x228B, 21078 }, + { 0x956C, 21081 }, + { 0x9542, 21089 }, + { 0x2288, 21095 }, + { 0x9569, 21098 }, + { 0x953F, 21106 }, + { 0x2287, 21112 }, + { 0x9568, 21115 }, + { 0x953E, 21123 }, + { 0x2289, 21129 }, + { 0x956A, 21132 }, + { 0x9540, 21140 }, + { 0x228A, 21146 }, + { 0x954A, 21149 }, + { 0x956B, 21157 }, + { 0x955F, 21165 }, + { 0x9574, 21173 }, + { 0x9541, 21181 }, + { 0x9535, 21187 }, + { 0x9552, 21193 }, + { 0x9557, 21197 }, + { 0x9554, 21201 }, + { 0x9553, 21205 }, + { 0x9555, 21209 }, + { 0x9556, 21213 }, + { 0x9577, 21217 }, + { 0x957A, 21220 }, + { 0x9580, 21226 }, + { 0x957F, 21229 }, + { 0x9581, 21232 }, + { 0x2314, 21235 }, + { 0x9157, 21239 }, + { 0x2291, 21241 }, + { 0x2750, 21244 }, + { 0x7CB2, 21247 }, + { 0x7CB5, 21254 }, + { 0x7CB4, 21261 }, + { 0x7CB3, 21268 }, + { 0x2747, 21275 }, + { 0x220F, 21278 }, + { 0x220E, 21282 }, + { 0x2247, 21286 }, + { 0x9150, 21290 }, + { 0x7EF4, 21295 }, + { 0x2243, 21299 }, + { 0x9124, 21302 }, + { 0x277D, 21306 }, + { 0x21D6, 21309 }, + { 0x2755, 21312 }, + { 0x2756, 21315 }, + { 0x96CE, 21318 }, + { 0x228C, 21322 }, + { 0x230B, 21325 }, + { 0x2210, 21327 }, + { 0x2211, 21331 }, + { 0x25FF, 21335 }, + { 0x2358, 21337 }, + { 0x21FB, 21341 }, + { 0x2051, 21343 }, + { 0x22B5, 21347 }, + { 0x2619, 21353 }, + { 0x22B4, 21358 }, + { 0x27D3, 21364 }, + { 0x27D4, 21370 }, + { 0x27D1, 21376 }, + { 0x27D2, 21382 }, + { 0x27D5, 21388 }, + { 0x27D7, 21394 }, + { 0x27D6, 21400 }, + { 0x27D8, 21406 }, + { 0x9172, 21412 }, + { 0x222A, 21414 }, + { 0x933E, 21418 }, + { 0x9344, 21422 }, + { 0x2228, 21426 }, + { 0x2751, 21429 }, + { 0x2753, 21432 }, + { 0x204D, 21435 }, + { 0x27EE, 21439 }, + { 0x204E, 21444 }, + { 0x27EF, 21448 }, + { 0x204B, 21453 }, + { 0x27F0, 21457 }, + { 0x204C, 21462 }, + { 0x27F1, 21466 }, + { 0x232C, 21471 }, + { 0x21CC, 21474 }, + { 0x2050, 21476 }, + { 0x90E5, 21480 }, + { 0x27E9, 21483 }, + { 0x21F2, 21486 }, + { 0x2807, 21488 }, + { 0x2292, 21492 }, + { 0x2616, 21495 }, + { 0x2382, 21500 }, + { 0x27EA, 21505 }, + { 0x8ED5, 21508 }, + { 0x274E, 21510 }, + { 0x2617, 21512 }, + { 0x7CB6, 21514 }, + { 0x27ED, 21517 }, + { 0x8FA5, 21519 }, + { 0x913B, 21521 }, + { 0x8FA9, 21523 }, + { 0x2267, 21525 }, + { 0x22F3, 21528 }, + { 0x2302, 21530 }, + { 0x27C6, 21535 }, + { 0x22EE, 21539 }, + { 0x22EF, 21542 }, + { 0x236B, 21545 }, + { 0x274B, 21547 }, + { 0x237F, 21549 }, + { 0x232E, 21553 }, + { 0x9329, 21555 }, + { 0x9332, 21559 }, + { 0x275A, 21563 }, + { 0x21DA, 21566 }, + { 0x27C8, 21569 }, + { 0x2603, 21573 }, + { 0x1CCC, 21575 }, + { 0x27C5, 21578 }, + { 0x21D8, 21582 }, + { 0x223A, 21584 }, + { 0x9132, 21586 }, + { 0x22A7, 21589 }, + { 0x2758, 21593 }, + { 0x23CD, 21596 }, + { 0x1CCD, 21599 }, + { 0x23D0, 21602 }, + { 0x27C7, 21605 }, + { 0x21E0, 21609 }, + { 0x2042, 21613 }, + { 0x21DE, 21617 }, + { 0x9326, 21620 }, + { 0x21EA, 21625 }, + { 0x2043, 21629 }, + { 0x21E8, 21633 }, + { 0x9328, 21636 }, + { 0x21EE, 21641 }, + { 0x2041, 21645 }, + { 0x2045, 21649 }, + { 0x21F0, 21656 }, + { 0x21EC, 21659 }, + { 0x9325, 21662 }, + { 0x21DC, 21667 }, + { 0x21E4, 21669 }, + { 0x2040, 21673 }, + { 0x2044, 21677 }, + { 0x21E6, 21684 }, + { 0x277F, 21687 }, + { 0x21E2, 21690 }, + { 0x2046, 21693 }, + { 0x9327, 21700 }, + { 0x2079, 21705 }, + { 0x7D41, 21707 }, + { 0x7D44, 21709 }, + { 0x7D4A, 21711 }, + { 0x7D59, 21713 }, + { 0x7D45, 21715 }, + { 0x7D4B, 21717 }, + { 0x7D5A, 21719 }, + { 0x7D77, 21721 }, + { 0x7DB2, 21723 }, + { 0x7D42, 21725 }, + { 0x7D4C, 21727 }, + { 0x7D5B, 21729 }, + { 0x7D78, 21731 }, + { 0x7DB3, 21733 }, + { 0x7D47, 21735 }, + { 0x7D5D, 21737 }, + { 0x7D7A, 21739 }, + { 0x7DB5, 21741 }, + { 0x7D51, 21743 }, + { 0x7D7E, 21745 }, + { 0x7DB9, 21747 }, + { 0x7D68, 21749 }, + { 0x7DC1, 21751 }, + { 0x7D92, 21753 }, + { 0x9602, 21755 }, + { 0x9603, 21757 }, + { 0x9605, 21759 }, + { 0x9609, 21761 }, + { 0x9611, 21763 }, + { 0x9620, 21765 }, + { 0x7D43, 21767 }, + { 0x7D46, 21769 }, + { 0x7D4D, 21771 }, + { 0x7D5C, 21773 }, + { 0x7D79, 21775 }, + { 0x7DB4, 21777 }, + { 0x7D48, 21779 }, + { 0x7D4E, 21781 }, + { 0x7D5E, 21783 }, + { 0x7D7B, 21785 }, + { 0x7DB6, 21787 }, + { 0x7D52, 21789 }, + { 0x7D61, 21791 }, + { 0x7D7F, 21793 }, + { 0x7DBA, 21795 }, + { 0x7D69, 21797 }, + { 0x7D86, 21799 }, + { 0x7DC2, 21801 }, + { 0x7D93, 21803 }, + { 0x7DD1, 21805 }, + { 0x7DED, 21807 }, + { 0x7D49, 21809 }, + { 0x7D4F, 21811 }, + { 0x7D5F, 21813 }, + { 0x7D7C, 21815 }, + { 0x7DB7, 21817 }, + { 0x7D53, 21819 }, + { 0x7D62, 21821 }, + { 0x7D80, 21823 }, + { 0x7DBB, 21825 }, + { 0x7D6A, 21827 }, + { 0x7D87, 21829 }, + { 0x7DC3, 21831 }, + { 0x7D94, 21833 }, + { 0x7DD2, 21835 }, + { 0x7DEE, 21837 }, + { 0x7D55, 21839 }, + { 0x7D64, 21841 }, + { 0x7D82, 21843 }, + { 0x7DBD, 21845 }, + { 0x7D6C, 21847 }, + { 0x7D89, 21849 }, + { 0x7DC5, 21851 }, + { 0x7D96, 21853 }, + { 0x7DD4, 21855 }, + { 0x7DF0, 21857 }, + { 0x7D70, 21859 }, + { 0x7D8C, 21861 }, + { 0x7DC9, 21863 }, + { 0x7D9A, 21865 }, + { 0x7DD7, 21867 }, + { 0x7DF4, 21869 }, + { 0x7DA2, 21871 }, + { 0x7DDD, 21873 }, + { 0x7DFC, 21875 }, + { 0x7E0C, 21877 }, + { 0x9604, 21879 }, + { 0x9606, 21881 }, + { 0x960A, 21883 }, + { 0x9612, 21885 }, + { 0x9621, 21887 }, + { 0x9607, 21889 }, + { 0x960B, 21891 }, + { 0x9613, 21893 }, + { 0x9622, 21895 }, + { 0x960D, 21897 }, + { 0x9615, 21899 }, + { 0x9624, 21901 }, + { 0x9618, 21903 }, + { 0x9628, 21905 }, + { 0x962F, 21907 }, + { 0x7D50, 21909 }, + { 0x7D60, 21911 }, + { 0x7D7D, 21913 }, + { 0x7DB8, 21915 }, + { 0x7D54, 21917 }, + { 0x7D63, 21919 }, + { 0x7D81, 21921 }, + { 0x7DBC, 21923 }, + { 0x7D6B, 21925 }, + { 0x7D88, 21927 }, + { 0x7DC4, 21929 }, + { 0x7D95, 21931 }, + { 0x7DD3, 21933 }, + { 0x7DEF, 21935 }, + { 0x7D56, 21937 }, + { 0x7D65, 21939 }, + { 0x7D83, 21941 }, + { 0x7DBE, 21943 }, + { 0x7D6D, 21945 }, + { 0x7DC6, 21947 }, + { 0x7D97, 21949 }, + { 0x7DF1, 21951 }, + { 0x7D71, 21953 }, + { 0x7D8D, 21955 }, + { 0x7DCA, 21957 }, + { 0x7D9B, 21959 }, + { 0x7DD8, 21961 }, + { 0x7DF5, 21963 }, + { 0x7DA3, 21965 }, + { 0x7DDE, 21967 }, + { 0x7DFD, 21969 }, + { 0x7E0D, 21971 }, + { 0x7D57, 21973 }, + { 0x7D66, 21975 }, + { 0x7D84, 21977 }, + { 0x7DBF, 21979 }, + { 0x7D6E, 21981 }, + { 0x7D8A, 21983 }, + { 0x7DC7, 21985 }, + { 0x7D98, 21987 }, + { 0x7DD5, 21989 }, + { 0x7DF2, 21991 }, + { 0x7D72, 21993 }, + { 0x7DCB, 21995 }, + { 0x7D9C, 21997 }, + { 0x7DF6, 21999 }, + { 0x7DA4, 22001 }, + { 0x7DDF, 22003 }, + { 0x7DFE, 22005 }, + { 0x7E0E, 22007 }, + { 0x7D74, 22009 }, + { 0x7D8F, 22011 }, + { 0x7DCD, 22013 }, + { 0x7D9E, 22015 }, + { 0x7DDA, 22017 }, + { 0x7DF8, 22019 }, + { 0x7DA6, 22021 }, + { 0x7DE1, 22023 }, + { 0x7E00, 22025 }, + { 0x7E10, 22027 }, + { 0x7DAA, 22029 }, + { 0x7DE5, 22031 }, + { 0x7E04, 22033 }, + { 0x7E14, 22035 }, + { 0x9608, 22037 }, + { 0x960C, 22039 }, + { 0x9614, 22041 }, + { 0x9623, 22043 }, + { 0x960E, 22045 }, + { 0x9625, 22047 }, + { 0x9619, 22049 }, + { 0x9629, 22051 }, + { 0x9630, 22053 }, + { 0x960F, 22055 }, + { 0x9616, 22057 }, + { 0x9626, 22059 }, + { 0x961A, 22061 }, + { 0x9631, 22063 }, + { 0x961C, 22065 }, + { 0x962B, 22067 }, + { 0x9633, 22069 }, + { 0x9637, 22071 }, + { 0x7D58, 22073 }, + { 0x7D67, 22075 }, + { 0x7D85, 22077 }, + { 0x7DC0, 22079 }, + { 0x7D6F, 22081 }, + { 0x7D8B, 22083 }, + { 0x7DC8, 22085 }, + { 0x7D99, 22087 }, + { 0x7DD6, 22089 }, + { 0x7DF3, 22091 }, + { 0x7D73, 22093 }, + { 0x7D8E, 22095 }, + { 0x7DCC, 22097 }, + { 0x7D9D, 22099 }, + { 0x7DD9, 22101 }, + { 0x7DF7, 22103 }, + { 0x7DA5, 22105 }, + { 0x7DE0, 22107 }, + { 0x7DFF, 22109 }, + { 0x7E0F, 22111 }, + { 0x7D75, 22113 }, + { 0x7D90, 22115 }, + { 0x7DCE, 22117 }, + { 0x7D9F, 22119 }, + { 0x7DDB, 22121 }, + { 0x7DF9, 22123 }, + { 0x7DA7, 22125 }, + { 0x7DE2, 22127 }, + { 0x7E01, 22129 }, + { 0x7E11, 22131 }, + { 0x7DAB, 22133 }, + { 0x7DE6, 22135 }, + { 0x7E05, 22137 }, + { 0x7E15, 22139 }, + { 0x7E1C, 22141 }, + { 0x7D76, 22143 }, + { 0x7D91, 22145 }, + { 0x7DCF, 22147 }, + { 0x7DA0, 22149 }, + { 0x7DDC, 22151 }, + { 0x7DFA, 22153 }, + { 0x7DA8, 22155 }, + { 0x7DE3, 22157 }, + { 0x7E02, 22159 }, + { 0x7E12, 22161 }, + { 0x7DAC, 22163 }, + { 0x7DE7, 22165 }, + { 0x7E06, 22167 }, + { 0x7E16, 22169 }, + { 0x7E1D, 22171 }, + { 0x7DAE, 22173 }, + { 0x7DE9, 22175 }, + { 0x7E08, 22177 }, + { 0x7E18, 22179 }, + { 0x7E1F, 22181 }, + { 0x7E22, 22183 }, + { 0x9610, 22185 }, + { 0x9617, 22187 }, + { 0x9627, 22189 }, + { 0x961B, 22191 }, + { 0x962A, 22193 }, + { 0x9632, 22195 }, + { 0x961D, 22197 }, + { 0x962C, 22199 }, + { 0x9634, 22201 }, + { 0x9638, 22203 }, + { 0x961E, 22205 }, + { 0x962D, 22207 }, + { 0x9635, 22209 }, + { 0x9639, 22211 }, + { 0x963B, 22213 }, + { 0x7DD0, 22215 }, + { 0x7DA1, 22217 }, + { 0x7DFB, 22219 }, + { 0x7DA9, 22221 }, + { 0x7DE4, 22223 }, + { 0x7E03, 22225 }, + { 0x7E13, 22227 }, + { 0x7DAD, 22229 }, + { 0x7DE8, 22231 }, + { 0x7E07, 22233 }, + { 0x7E17, 22235 }, + { 0x7E1E, 22237 }, + { 0x7DAF, 22239 }, + { 0x7DEA, 22241 }, + { 0x7E09, 22243 }, + { 0x7E19, 22245 }, + { 0x7E23, 22247 }, + { 0x7DB0, 22249 }, + { 0x7DEB, 22251 }, + { 0x7E0A, 22253 }, + { 0x7E1A, 22255 }, + { 0x7E20, 22257 }, + { 0x961F, 22259 }, + { 0x962E, 22261 }, + { 0x9636, 22263 }, + { 0x963A, 22265 }, + { 0x963C, 22267 }, + { 0x963D, 22269 }, + { 0x7DB1, 22271 }, + { 0x7DEC, 22273 }, + { 0x7E0B, 22275 }, + { 0x7E1B, 22277 }, + { 0x7E21, 22279 }, + { 0x7E24, 22281 }, + { 0x7E25, 22283 }, + { 0x7E26, 22285 }, + { 0x908D, 22287 }, + { 0x950E, 22288 }, + { 0x8F11, 22289 }, + { 0x0297, 22290 }, + { 0x951F, 22291 }, + { 0x9023, 22292 }, + { 0x9527, 22295 }, + { 0x943C, 22296 }, + { 0x14BA, 22298 }, + { 0x14BB, 22302 }, + { 0x14A8, 22306 }, + { 0x14A9, 22309 }, + { 0x14AA, 22312 }, + { 0x14B2, 22315 }, + { 0x14AF, 22318 }, + { 0x14AC, 22321 }, + { 0x14B9, 22324 }, + { 0x14AB, 22327 }, + { 0x14B6, 22330 }, + { 0x14B3, 22333 }, + { 0x14B0, 22336 }, + { 0x14B1, 22339 }, + { 0x14B5, 22342 }, + { 0x14B8, 22345 }, + { 0x14AE, 22348 }, + { 0x14B7, 22351 }, + { 0x14B4, 22354 }, + { 0x14AD, 22357 }, + { 0x9018, 22360 }, + { 0x8F1F, 22363 }, + { 0x92A2, 22364 }, + { 0x1CB8, 22365 }, + { 0x1CC1, 22366 }, + { 0x0286, 22369 }, + { 0x22DF, 22370 }, + { 0x95A9, 22371 }, + { 0x907B, 22372 }, + { 0x906C, 22376 }, + { 0x907C, 22383 }, + { 0x233F, 22387 }, + { 0x9500, 22389 }, + { 0x1FF1, 22390 }, + { 0x9103, 22393 }, + { 0x9108, 22397 }, + { 0x910C, 22401 }, + { 0x9104, 22405 }, + { 0x9107, 22409 }, + { 0x9106, 22413 }, + { 0x910B, 22417 }, + { 0x910A, 22421 }, + { 0x9109, 22425 }, + { 0x9105, 22429 }, + { 0x910D, 22433 }, + { 0x910E, 22437 }, + { 0x910F, 22441 }, + { 0x9114, 22444 }, + { 0x9118, 22447 }, + { 0x9110, 22450 }, + { 0x9113, 22453 }, + { 0x9112, 22456 }, + { 0x9117, 22459 }, + { 0x9116, 22462 }, + { 0x9115, 22465 }, + { 0x9111, 22468 }, + { 0x9119, 22471 }, + { 0x911A, 22474 }, + { 0x1CD0, 22477 }, + { 0x222D, 22479 }, + { 0x8EDA, 22480 }, + { 0x8EDB, 22483 }, + { 0x8EDD, 22486 }, + { 0x8EDC, 22489 }, + { 0x944F, 22492 }, + { 0x001A, 22494 }, + { 0x1D1A, 22495 }, + { 0x1EAB, 22497 }, + { 0x2230, 22499 }, + { 0x000C, 22500 }, + { 0x95D0, 22501 }, + { 0x927E, 22502 }, + { 0x2254, 22505 }, + { 0x2255, 22508 }, + { 0x2378, 22511 }, + { 0x2A47, 22513 }, + { 0x2A46, 22518 }, + { 0x90F5, 22523 }, + { 0x90F4, 22525 }, + { 0x9004, 22530 }, + { 0x23DC, 22531 }, + { 0x2001, 22533 }, + { 0x1F25, 22536 }, + { 0x1F26, 22539 }, + { 0x8F0E, 22542 }, + { 0x1D93, 22545 }, + { 0x8F14, 22547 }, + { 0x1EB3, 22548 }, + { 0x7C8B, 22551 }, + { 0x7C8C, 22554 }, + { 0x0011, 22557 }, + { 0x20B4, 22559 }, + { 0x8DAD, 22563 }, + { 0x0016, 22566 }, + { 0x20B9, 22568 }, + { 0x8DB2, 22572 }, + { 0x0012, 22575 }, + { 0x20B5, 22577 }, + { 0x8DAE, 22581 }, + { 0x0015, 22584 }, + { 0x20B8, 22586 }, + { 0x8DB1, 22590 }, + { 0x0014, 22593 }, + { 0x20B7, 22595 }, + { 0x8DB0, 22599 }, + { 0x0019, 22602 }, + { 0x20BC, 22604 }, + { 0x8DB5, 22608 }, + { 0x0010, 22611 }, + { 0x8DAB, 22613 }, + { 0x8DAC, 22617 }, + { 0x0018, 22620 }, + { 0x20BB, 22622 }, + { 0x8DB4, 22626 }, + { 0x0017, 22629 }, + { 0x20BA, 22631 }, + { 0x8DB3, 22635 }, + { 0x0013, 22638 }, + { 0x20B6, 22640 }, + { 0x8DAF, 22644 }, + { 0x2BB0, 22647 }, + { 0x50A7, 22649 }, + { 0x50A6, 22655 }, + { 0x50A4, 22659 }, + { 0x509E, 22663 }, + { 0x509C, 22667 }, + { 0x509D, 22671 }, + { 0x50A9, 22675 }, + { 0x50AE, 22679 }, + { 0x50AA, 22683 }, + { 0x50AD, 22687 }, + { 0x50AC, 22691 }, + { 0x50B1, 22695 }, + { 0x50A8, 22699 }, + { 0x50B0, 22703 }, + { 0x50AF, 22707 }, + { 0x50AB, 22711 }, + { 0x5099, 22715 }, + { 0x5095, 22720 }, + { 0x509B, 22725 }, + { 0x5097, 22730 }, + { 0x5094, 22735 }, + { 0x509A, 22740 }, + { 0x5096, 22745 }, + { 0x5098, 22750 }, + { 0x50A5, 22755 }, + { 0x506A, 22759 }, + { 0x5070, 22763 }, + { 0x506C, 22767 }, + { 0x5071, 22771 }, + { 0x506E, 22775 }, + { 0x506B, 22779 }, + { 0x5086, 22783 }, + { 0x5077, 22787 }, + { 0x5081, 22791 }, + { 0x5074, 22795 }, + { 0x5091, 22799 }, + { 0x506D, 22803 }, + { 0x5079, 22807 }, + { 0x5072, 22811 }, + { 0x508C, 22815 }, + { 0x5088, 22819 }, + { 0x5083, 22823 }, + { 0x5084, 22827 }, + { 0x508B, 22831 }, + { 0x5090, 22835 }, + { 0x507F, 22839 }, + { 0x506F, 22843 }, + { 0x508D, 22847 }, + { 0x5089, 22851 }, + { 0x5093, 22855 }, + { 0x5087, 22859 }, + { 0x5078, 22863 }, + { 0x507C, 22867 }, + { 0x5082, 22871 }, + { 0x5075, 22875 }, + { 0x5073, 22879 }, + { 0x5092, 22883 }, + { 0x5076, 22887 }, + { 0x507E, 22891 }, + { 0x507A, 22895 }, + { 0x5085, 22899 }, + { 0x508E, 22903 }, + { 0x508F, 22907 }, + { 0x5080, 22911 }, + { 0x507B, 22915 }, + { 0x508A, 22919 }, + { 0x507D, 22923 }, + { 0x50A3, 22927 }, + { 0x50A1, 22931 }, + { 0x509F, 22935 }, + { 0x50A2, 22938 }, + { 0x50A0, 22942 }, + { 0x91E8, 22947 }, + { 0x905E, 22949 }, + { 0x5014, 22951 }, + { 0x5013, 22954 }, + { 0x5012, 22957 }, + { 0x5011, 22960 }, + { 0x500D, 22963 }, + { 0x5007, 22967 }, + { 0x500F, 22971 }, + { 0x5009, 22975 }, + { 0x5006, 22979 }, + { 0x500E, 22983 }, + { 0x5010, 22987 }, + { 0x5008, 22991 }, + { 0x500A, 22995 }, + { 0x500B, 22999 }, + { 0x500C, 23004 }, + { 0x4FDA, 23009 }, + { 0x4FE0, 23012 }, + { 0x4FDC, 23015 }, + { 0x4FE2, 23018 }, + { 0x4FDE, 23021 }, + { 0x4FDB, 23024 }, + { 0x4FE1, 23027 }, + { 0x4FE3, 23030 }, + { 0x4FFA, 23033 }, + { 0x4FE9, 23036 }, + { 0x4FF5, 23039 }, + { 0x4FE6, 23042 }, + { 0x5004, 23045 }, + { 0x4FDD, 23048 }, + { 0x4FEB, 23051 }, + { 0x4FE4, 23054 }, + { 0x4FFF, 23057 }, + { 0x4FFC, 23060 }, + { 0x4FF7, 23063 }, + { 0x4FF8, 23066 }, + { 0x4FFE, 23069 }, + { 0x5003, 23072 }, + { 0x4FF3, 23075 }, + { 0x4FDF, 23078 }, + { 0x5000, 23081 }, + { 0x4FFD, 23084 }, + { 0x4FFB, 23087 }, + { 0x4FEA, 23090 }, + { 0x4FF0, 23093 }, + { 0x4FF6, 23096 }, + { 0x4FE7, 23099 }, + { 0x4FEC, 23102 }, + { 0x4FE5, 23105 }, + { 0x4FE8, 23108 }, + { 0x4FF2, 23111 }, + { 0x4FED, 23114 }, + { 0x4FF9, 23117 }, + { 0x5005, 23120 }, + { 0x5001, 23123 }, + { 0x5002, 23126 }, + { 0x4FF4, 23129 }, + { 0x4FEE, 23132 }, + { 0x4FF1, 23135 }, + { 0x4FEF, 23138 }, + { 0x5015, 23141 }, + { 0x900A, 23144 }, + { 0x2306, 23145 }, + { 0x94B3, 23148 }, + { 0x226D, 23149 }, + { 0x8EC1, 23150 }, + { 0x8EC0, 23153 }, + { 0x8EC2, 23156 }, + { 0x2031, 23159 }, + { 0x7CB0, 23161 }, + { 0x7CB1, 23164 }, + { 0x235F, 23167 }, + { 0x2360, 23170 }, + { 0x2361, 23174 }, + { 0x2363, 23178 }, + { 0x236D, 23183 }, + { 0x2376, 23188 }, + { 0x2026, 23192 }, + { 0x8FAF, 23194 }, + { 0x8FB0, 23198 }, + { 0x8FB1, 23202 }, + { 0x8FB2, 23206 }, + { 0x8FAE, 23210 }, + { 0x94DE, 23214 }, + { 0x94E0, 23218 }, + { 0x94DF, 23221 }, + { 0x94E1, 23225 }, + { 0x1E5C, 23229 }, + { 0x25E0, 23231 }, + { 0x25DF, 23237 }, + { 0x25DE, 23243 }, + { 0x25DD, 23249 }, + { 0x95D1, 23253 }, + { 0x9178, 23255 }, + { 0x917A, 23257 }, + { 0x9179, 23260 }, + { 0x917F, 23263 }, + { 0x9180, 23265 }, + { 0x917E, 23267 }, + { 0x1FDD, 23269 }, + { 0x1EB4, 23271 }, + { 0x1F35, 23275 }, + { 0x1F36, 23279 }, + { 0x1F33, 23283 }, + { 0x1F34, 23287 }, + { 0x1F2C, 23291 }, + { 0x1F82, 23295 }, + { 0x1F7D, 23299 }, + { 0x1D62, 23303 }, + { 0x9508, 23305 }, + { 0x2257, 23306 }, + { 0x2320, 23308 }, + { 0x8F84, 23309 }, + { 0x9475, 23314 }, + { 0x1CE7, 23317 }, + { 0x2269, 23320 }, + { 0x8ECE, 23323 }, + { 0x8EC6, 23328 }, + { 0x95A5, 23332 }, + { 0x8EB4, 23333 }, + { 0x9171, 23334 }, + { 0x9170, 23338 }, + { 0x916F, 23341 }, + { 0x8F17, 23344 }, + { 0x1F79, 23346 }, + { 0x49D2, 23347 }, + { 0x4990, 23350 }, + { 0x4995, 23353 }, + { 0x4991, 23356 }, + { 0x4994, 23359 }, + { 0x4993, 23362 }, + { 0x4998, 23365 }, + { 0x498F, 23368 }, + { 0x4997, 23371 }, + { 0x4996, 23374 }, + { 0x4992, 23377 }, + { 0x49D3, 23380 }, + { 0x49BC, 23383 }, + { 0x49C0, 23387 }, + { 0x49BD, 23391 }, + { 0x49C6, 23395 }, + { 0x49CC, 23399 }, + { 0x49C5, 23403 }, + { 0x49CF, 23407 }, + { 0x49C1, 23411 }, + { 0x49BF, 23415 }, + { 0x49C4, 23419 }, + { 0x49BE, 23423 }, + { 0x49CD, 23427 }, + { 0x49CE, 23431 }, + { 0x49CA, 23435 }, + { 0x49C2, 23439 }, + { 0x49C9, 23443 }, + { 0x49C3, 23447 }, + { 0x49C7, 23451 }, + { 0x49C8, 23455 }, + { 0x49CB, 23459 }, + { 0x49D0, 23463 }, + { 0x49D1, 23468 }, + { 0x499E, 23473 }, + { 0x4999, 23475 }, + { 0x49B5, 23479 }, + { 0x499A, 23483 }, + { 0x499B, 23487 }, + { 0x499C, 23491 }, + { 0x499D, 23495 }, + { 0x49BA, 23499 }, + { 0x499F, 23501 }, + { 0x49A3, 23505 }, + { 0x49A0, 23509 }, + { 0x49A9, 23513 }, + { 0x49AF, 23517 }, + { 0x49A8, 23521 }, + { 0x49B2, 23525 }, + { 0x49A4, 23529 }, + { 0x49A2, 23533 }, + { 0x49A7, 23537 }, + { 0x49A1, 23541 }, + { 0x49B0, 23545 }, + { 0x49B1, 23549 }, + { 0x49AD, 23553 }, + { 0x49A5, 23557 }, + { 0x49AC, 23561 }, + { 0x49A6, 23565 }, + { 0x49AA, 23569 }, + { 0x49AB, 23573 }, + { 0x49AE, 23577 }, + { 0x49B3, 23581 }, + { 0x49B4, 23586 }, + { 0x49B7, 23591 }, + { 0x49B8, 23595 }, + { 0x49B6, 23600 }, + { 0x49B9, 23604 }, + { 0x49BB, 23608 }, + { 0x950C, 23611 }, + { 0x902E, 23612 }, + { 0x1D92, 23613 }, + { 0x927D, 23615 }, + { 0x9489, 23617 }, + { 0x8EC3, 23620 }, + { 0x95D7, 23623 }, + { 0x0040, 23624 }, + { 0x038C, 23626 }, + { 0x0340, 23629 }, + { 0x038D, 23632 }, + { 0x4121, 23635 }, + { 0x4122, 23639 }, + { 0x4137, 23645 }, + { 0x038B, 23649 }, + { 0x03B2, 23652 }, + { 0x03A7, 23657 }, + { 0x4129, 23660 }, + { 0x4123, 23664 }, + { 0x0386, 23668 }, + { 0x412C, 23671 }, + { 0x412B, 23675 }, + { 0x4128, 23679 }, + { 0x1C7E, 23682 }, + { 0x4125, 23684 }, + { 0x4136, 23687 }, + { 0x1C7F, 23690 }, + { 0x1C62, 23692 }, + { 0x1C61, 23696 }, + { 0x1C63, 23700 }, + { 0x03A6, 23704 }, + { 0x412F, 23707 }, + { 0x0334, 23710 }, + { 0x1C47, 23714 }, + { 0x1C55, 23716 }, + { 0x1C54, 23720 }, + { 0x1C56, 23724 }, + { 0x0339, 23728 }, + { 0x0372, 23734 }, + { 0x0373, 23738 }, + { 0x0376, 23742 }, + { 0x0374, 23746 }, + { 0x037D, 23750 }, + { 0x036D, 23754 }, + { 0x1C00, 23758 }, + { 0x1C4C, 23764 }, + { 0x1BB4, 23772 }, + { 0x1BB8, 23778 }, + { 0x1C1E, 23786 }, + { 0x1BB6, 23796 }, + { 0x1C1C, 23804 }, + { 0x1BBA, 23814 }, + { 0x1C20, 23822 }, + { 0x1C1A, 23832 }, + { 0x1BB3, 23840 }, + { 0x1BB7, 23846 }, + { 0x1C1D, 23854 }, + { 0x1BB5, 23864 }, + { 0x1C1B, 23872 }, + { 0x1BB9, 23882 }, + { 0x1C1F, 23890 }, + { 0x1C19, 23900 }, + { 0x0364, 23908 }, + { 0x1BFF, 23914 }, + { 0x1C4A, 23920 }, + { 0x1C4D, 23928 }, + { 0x1C4E, 23934 }, + { 0x1C4B, 23942 }, + { 0x037C, 23948 }, + { 0x037E, 23952 }, + { 0x0377, 23956 }, + { 0x1C69, 23960 }, + { 0x1C68, 23966 }, + { 0x03B1, 23972 }, + { 0x03AE, 23976 }, + { 0x037A, 23980 }, + { 0x0368, 23984 }, + { 0x0330, 23988 }, + { 0x036F, 23992 }, + { 0x1C02, 23996 }, + { 0x1BC4, 24002 }, + { 0x1BC8, 24008 }, + { 0x1BC6, 24016 }, + { 0x1BCA, 24024 }, + { 0x1BC3, 24032 }, + { 0x1BC7, 24038 }, + { 0x1BC5, 24046 }, + { 0x1BC9, 24054 }, + { 0x0365, 24062 }, + { 0x1C01, 24068 }, + { 0x1C58, 24074 }, + { 0x1C57, 24080 }, + { 0x0380, 24086 }, + { 0x1C5A, 24092 }, + { 0x0347, 24100 }, + { 0x1C59, 24108 }, + { 0x1C5C, 24116 }, + { 0x1C5B, 24124 }, + { 0x036C, 24130 }, + { 0x0367, 24134 }, + { 0x1BFC, 24138 }, + { 0x1C3D, 24144 }, + { 0x1B98, 24152 }, + { 0x1B9C, 24158 }, + { 0x1C0E, 24166 }, + { 0x1B9A, 24176 }, + { 0x1C0C, 24184 }, + { 0x1B9E, 24194 }, + { 0x1C10, 24202 }, + { 0x1C0A, 24212 }, + { 0x1B97, 24220 }, + { 0x1B9B, 24226 }, + { 0x1C0D, 24234 }, + { 0x1B99, 24244 }, + { 0x1C0B, 24252 }, + { 0x1B9D, 24262 }, + { 0x1C0F, 24270 }, + { 0x1C09, 24280 }, + { 0x0362, 24288 }, + { 0x1BFB, 24294 }, + { 0x1C3B, 24300 }, + { 0x1C3A, 24308 }, + { 0x1C39, 24314 }, + { 0x1C3E, 24320 }, + { 0x1C3F, 24326 }, + { 0x1C3C, 24334 }, + { 0x036A, 24340 }, + { 0x0378, 24344 }, + { 0x0369, 24349 }, + { 0x0370, 24353 }, + { 0x0395, 24357 }, + { 0x0371, 24361 }, + { 0x037F, 24365 }, + { 0x1C08, 24369 }, + { 0x1C76, 24375 }, + { 0x1BEC, 24383 }, + { 0x1BF0, 24389 }, + { 0x1C2E, 24397 }, + { 0x1BEE, 24407 }, + { 0x1C2C, 24415 }, + { 0x1BF2, 24425 }, + { 0x1C30, 24433 }, + { 0x1C2A, 24443 }, + { 0x1BEB, 24451 }, + { 0x1BEF, 24457 }, + { 0x1C2D, 24465 }, + { 0x1BED, 24475 }, + { 0x1C2B, 24483 }, + { 0x1BF1, 24493 }, + { 0x1C2F, 24501 }, + { 0x1C29, 24511 }, + { 0x0384, 24519 }, + { 0x1C07, 24525 }, + { 0x1C74, 24531 }, + { 0x1C77, 24539 }, + { 0x1C78, 24545 }, + { 0x1C75, 24553 }, + { 0x0397, 24559 }, + { 0x0379, 24563 }, + { 0x036E, 24567 }, + { 0x0391, 24571 }, + { 0x038F, 24575 }, + { 0x0332, 24580 }, + { 0x0393, 24585 }, + { 0x036B, 24589 }, + { 0x1BFE, 24593 }, + { 0x1BA8, 24599 }, + { 0x1BAC, 24605 }, + { 0x1BAA, 24613 }, + { 0x1BA7, 24621 }, + { 0x1BAB, 24627 }, + { 0x1BA9, 24635 }, + { 0x0363, 24643 }, + { 0x1BFD, 24649 }, + { 0x0375, 24655 }, + { 0x1C04, 24659 }, + { 0x1BD4, 24665 }, + { 0x1BD8, 24671 }, + { 0x1BD6, 24679 }, + { 0x1BD3, 24687 }, + { 0x1BD7, 24693 }, + { 0x1BD5, 24701 }, + { 0x0382, 24709 }, + { 0x1C03, 24715 }, + { 0x037B, 24721 }, + { 0x1C06, 24725 }, + { 0x1BE0, 24731 }, + { 0x1BE4, 24737 }, + { 0x1BE2, 24745 }, + { 0x1BE6, 24753 }, + { 0x1BDF, 24761 }, + { 0x1BE3, 24767 }, + { 0x1BE1, 24775 }, + { 0x1BE5, 24783 }, + { 0x0383, 24791 }, + { 0x1C05, 24797 }, + { 0x1C65, 24803 }, + { 0x1C64, 24809 }, + { 0x0381, 24815 }, + { 0x1C67, 24821 }, + { 0x0366, 24829 }, + { 0x1C66, 24837 }, + { 0x1C6B, 24845 }, + { 0x1C6A, 24853 }, + { 0x0336, 24859 }, + { 0x033A, 24864 }, + { 0x0338, 24871 }, + { 0x0387, 24877 }, + { 0x412A, 24880 }, + { 0x4124, 24884 }, + { 0x033D, 24888 }, + { 0x1C73, 24890 }, + { 0x818D, 24892 }, + { 0x818E, 24896 }, + { 0x818F, 24900 }, + { 0x8190, 24904 }, + { 0x8191, 24908 }, + { 0x8192, 24912 }, + { 0x8193, 24916 }, + { 0x8194, 24920 }, + { 0x8195, 24924 }, + { 0x8196, 24928 }, + { 0x8197, 24932 }, + { 0x8198, 24936 }, + { 0x8199, 24940 }, + { 0x819A, 24944 }, + { 0x819B, 24948 }, + { 0x819C, 24952 }, + { 0x819D, 24956 }, + { 0x819E, 24960 }, + { 0x819F, 24964 }, + { 0x81A0, 24968 }, + { 0x81A1, 24972 }, + { 0x81A2, 24976 }, + { 0x81A3, 24980 }, + { 0x81A4, 24984 }, + { 0x81A5, 24988 }, + { 0x81A6, 24992 }, + { 0x81A7, 24996 }, + { 0x81A8, 25000 }, + { 0x81A9, 25004 }, + { 0x4133, 25008 }, + { 0x4132, 25011 }, + { 0x4134, 25014 }, + { 0x03A9, 25017 }, + { 0x0394, 25020 }, + { 0x0396, 25023 }, + { 0x19BF, 25026 }, + { 0x19C1, 25031 }, + { 0x19C0, 25036 }, + { 0x19BD, 25041 }, + { 0x19BE, 25046 }, + { 0x3A8C, 25051 }, + { 0x0390, 25056 }, + { 0x038E, 25059 }, + { 0x0392, 25063 }, + { 0x03A8, 25066 }, + { 0x03AB, 25070 }, + { 0x4130, 25074 }, + { 0x4148, 25077 }, + { 0x4126, 25081 }, + { 0x4131, 25084 }, + { 0x0385, 25087 }, + { 0x03AA, 25091 }, + { 0x03B4, 25095 }, + { 0x0353, 25101 }, + { 0x0354, 25105 }, + { 0x0357, 25109 }, + { 0x0355, 25113 }, + { 0x035D, 25117 }, + { 0x034E, 25121 }, + { 0x1C52, 25125 }, + { 0x1BBC, 25131 }, + { 0x1BC0, 25137 }, + { 0x1C26, 25145 }, + { 0x1BBE, 25155 }, + { 0x1C24, 25163 }, + { 0x1BC2, 25173 }, + { 0x1C28, 25181 }, + { 0x1C22, 25191 }, + { 0x1BBB, 25199 }, + { 0x1BBF, 25205 }, + { 0x1C25, 25213 }, + { 0x1BBD, 25223 }, + { 0x1C23, 25231 }, + { 0x1BC1, 25241 }, + { 0x1C27, 25249 }, + { 0x1C21, 25259 }, + { 0x0342, 25267 }, + { 0x1C51, 25273 }, + { 0x1C53, 25279 }, + { 0x035C, 25285 }, + { 0x035E, 25289 }, + { 0x0358, 25293 }, + { 0x1C70, 25297 }, + { 0x03B0, 25303 }, + { 0x03AD, 25307 }, + { 0x035A, 25311 }, + { 0x033C, 25315 }, + { 0x0349, 25319 }, + { 0x032F, 25323 }, + { 0x0350, 25327 }, + { 0x1C60, 25331 }, + { 0x1BCC, 25337 }, + { 0x1BD0, 25343 }, + { 0x1BCE, 25351 }, + { 0x1BD2, 25359 }, + { 0x1BCB, 25367 }, + { 0x1BCF, 25373 }, + { 0x1BCD, 25381 }, + { 0x1BD1, 25389 }, + { 0x0343, 25397 }, + { 0x1C5F, 25403 }, + { 0x1C5E, 25409 }, + { 0x1C5D, 25415 }, + { 0x0360, 25421 }, + { 0x034D, 25427 }, + { 0x0348, 25431 }, + { 0x1C43, 25435 }, + { 0x1BA0, 25441 }, + { 0x1BA4, 25447 }, + { 0x1C16, 25455 }, + { 0x1BA2, 25465 }, + { 0x1C14, 25473 }, + { 0x1BA6, 25483 }, + { 0x1C18, 25491 }, + { 0x1C12, 25501 }, + { 0x1B9F, 25509 }, + { 0x1BA3, 25515 }, + { 0x1C15, 25523 }, + { 0x1BA1, 25533 }, + { 0x1C13, 25541 }, + { 0x1BA5, 25551 }, + { 0x1C17, 25559 }, + { 0x1C11, 25569 }, + { 0x033F, 25577 }, + { 0x1C42, 25583 }, + { 0x1C41, 25589 }, + { 0x1C40, 25595 }, + { 0x1C44, 25601 }, + { 0x034B, 25607 }, + { 0x034A, 25611 }, + { 0x0351, 25615 }, + { 0x0352, 25619 }, + { 0x035F, 25623 }, + { 0x1C7C, 25627 }, + { 0x1BF4, 25633 }, + { 0x1BF8, 25639 }, + { 0x1C36, 25647 }, + { 0x1BF6, 25657 }, + { 0x1C34, 25665 }, + { 0x1BFA, 25675 }, + { 0x1C38, 25683 }, + { 0x1C32, 25693 }, + { 0x1BF3, 25701 }, + { 0x1BF7, 25707 }, + { 0x1C35, 25715 }, + { 0x1BF5, 25725 }, + { 0x1C33, 25733 }, + { 0x1BF9, 25743 }, + { 0x1C37, 25751 }, + { 0x1C31, 25761 }, + { 0x0346, 25769 }, + { 0x1C7B, 25775 }, + { 0x1C7D, 25781 }, + { 0x0359, 25787 }, + { 0x034F, 25791 }, + { 0x0331, 25795 }, + { 0x034C, 25800 }, + { 0x1C50, 25804 }, + { 0x1BAE, 25810 }, + { 0x1BB2, 25816 }, + { 0x1BB0, 25824 }, + { 0x1BAD, 25832 }, + { 0x1BB1, 25838 }, + { 0x1BAF, 25846 }, + { 0x0341, 25854 }, + { 0x1C4F, 25860 }, + { 0x0356, 25866 }, + { 0x1C7A, 25870 }, + { 0x1BDA, 25876 }, + { 0x1BDE, 25882 }, + { 0x1BDC, 25890 }, + { 0x1BD9, 25898 }, + { 0x1BDD, 25904 }, + { 0x1BDB, 25912 }, + { 0x0344, 25920 }, + { 0x1C79, 25926 }, + { 0x035B, 25932 }, + { 0x1C6F, 25936 }, + { 0x1BE7, 25942 }, + { 0x1BE9, 25948 }, + { 0x1BE8, 25956 }, + { 0x1BEA, 25964 }, + { 0x0345, 25972 }, + { 0x1C6E, 25978 }, + { 0x1C6D, 25984 }, + { 0x1C6C, 25990 }, + { 0x0361, 25996 }, + { 0x0335, 26002 }, + { 0x03AF, 26007 }, + { 0x03B5, 26012 }, + { 0x03B3, 26019 }, + { 0x4127, 26025 }, + { 0x1C45, 26028 }, + { 0x412E, 26030 }, + { 0x81D2, 26034 }, + { 0x0333, 26037 }, + { 0x0388, 26040 }, + { 0x0389, 26045 }, + { 0x038A, 26052 }, + { 0x412D, 26059 }, + { 0x033B, 26062 }, + { 0x03AC, 26065 }, + { 0x4138, 26070 }, + { 0x4135, 26073 }, + { 0x1C72, 26077 }, + { 0x1C71, 26081 }, + { 0x1C49, 26085 }, + { 0x033E, 26089 }, + { 0x4139, 26092 }, + { 0x1A01, 26095 }, + { 0x1A00, 26100 }, + { 0x19FF, 26105 }, + { 0x19FD, 26110 }, + { 0x19FE, 26115 }, + { 0x40ED, 26120 }, + { 0x40EE, 26125 }, + { 0x40FE, 26130 }, + { 0x40F7, 26136 }, + { 0x40EC, 26142 }, + { 0x4100, 26147 }, + { 0x40F9, 26153 }, + { 0x4103, 26159 }, + { 0x40FC, 26164 }, + { 0x40F5, 26169 }, + { 0x4101, 26174 }, + { 0x40EF, 26180 }, + { 0x40F1, 26184 }, + { 0x40FF, 26189 }, + { 0x40F8, 26195 }, + { 0x40FB, 26201 }, + { 0x40F4, 26206 }, + { 0x40F2, 26211 }, + { 0x40FA, 26216 }, + { 0x40F0, 26222 }, + { 0x40FD, 26226 }, + { 0x40F6, 26231 }, + { 0x40F3, 26236 }, + { 0x4102, 26241 }, + { 0x411C, 26247 }, + { 0x411F, 26252 }, + { 0x4104, 26257 }, + { 0x4109, 26262 }, + { 0x4120, 26267 }, + { 0x4105, 26272 }, + { 0x4116, 26276 }, + { 0x411D, 26281 }, + { 0x4110, 26286 }, + { 0x4108, 26290 }, + { 0x411A, 26294 }, + { 0x411E, 26299 }, + { 0x4115, 26304 }, + { 0x4117, 26308 }, + { 0x4111, 26313 }, + { 0x411B, 26317 }, + { 0x410F, 26322 }, + { 0x4107, 26326 }, + { 0x410A, 26330 }, + { 0x4118, 26335 }, + { 0x4106, 26340 }, + { 0x410E, 26344 }, + { 0x4114, 26348 }, + { 0x410C, 26352 }, + { 0x410D, 26356 }, + { 0x410B, 26362 }, + { 0x4119, 26366 }, + { 0x4112, 26371 }, + { 0x4113, 26375 }, + { 0x1C48, 26381 }, + { 0x81AA, 26383 }, + { 0x81AB, 26387 }, + { 0x81AC, 26391 }, + { 0x81AD, 26395 }, + { 0x81AE, 26399 }, + { 0x81AF, 26403 }, + { 0x81B0, 26407 }, + { 0x81B1, 26411 }, + { 0x81B2, 26415 }, + { 0x81B3, 26419 }, + { 0x81B4, 26423 }, + { 0x81B5, 26427 }, + { 0x81B6, 26431 }, + { 0x81B7, 26435 }, + { 0x81B8, 26439 }, + { 0x81B9, 26443 }, + { 0x81BA, 26447 }, + { 0x81BB, 26451 }, + { 0x81BC, 26455 }, + { 0x81BD, 26459 }, + { 0x81BE, 26463 }, + { 0x81BF, 26467 }, + { 0x81C0, 26471 }, + { 0x81C1, 26475 }, + { 0x81C2, 26479 }, + { 0x81C3, 26483 }, + { 0x81C4, 26487 }, + { 0x81C5, 26491 }, + { 0x81C6, 26495 }, + { 0x81C7, 26499 }, + { 0x81C8, 26503 }, + { 0x81C9, 26507 }, + { 0x81CA, 26511 }, + { 0x81CB, 26515 }, + { 0x81CC, 26519 }, + { 0x81CD, 26523 }, + { 0x81CE, 26527 }, + { 0x0337, 26531 }, + { 0x1C46, 26533 }, + { 0x908A, 26535 }, + { 0x8F02, 26537 }, + { 0x904D, 26539 }, + { 0x9485, 26541 }, + { 0x27FB, 26543 }, + { 0x94DC, 26545 }, + { 0x280A, 26547 }, + { 0x95C4, 26548 }, + { 0x91FE, 26549 }, + { 0x8F47, 26554 }, + { 0x904B, 26560 }, + { 0x9050, 26563 }, + { 0x95FF, 26566 }, + { 0x9052, 26568 }, + { 0x238C, 26570 }, + { 0x238B, 26577 }, + { 0x935D, 26584 }, + { 0x9371, 26588 }, + { 0x9357, 26593 }, + { 0x936F, 26597 }, + { 0x2350, 26602 }, + { 0x2348, 26606 }, + { 0x2782, 26610 }, + { 0x23C1, 26615 }, + { 0x940E, 26618 }, + { 0x9410, 26623 }, + { 0x9411, 26629 }, + { 0x940F, 26635 }, + { 0x2390, 26641 }, + { 0x23D2, 26644 }, + { 0x23D1, 26651 }, + { 0x2340, 26658 }, + { 0x9363, 26661 }, + { 0x9374, 26665 }, + { 0x9376, 26670 }, + { 0x2364, 26675 }, + { 0x2377, 26681 }, + { 0x2346, 26686 }, + { 0x238F, 26689 }, + { 0x2781, 26694 }, + { 0x90FA, 26697 }, + { 0x23D9, 26700 }, + { 0x23C2, 26706 }, + { 0x23C6, 26709 }, + { 0x9219, 26713 }, + { 0x9211, 26718 }, + { 0x9217, 26724 }, + { 0x920F, 26729 }, + { 0x23C4, 26735 }, + { 0x921A, 26739 }, + { 0x9212, 26744 }, + { 0x9218, 26750 }, + { 0x9210, 26755 }, + { 0x23DA, 26761 }, + { 0x932C, 26767 }, + { 0x9336, 26770 }, + { 0x7E46, 26773 }, + { 0x2307, 26781 }, + { 0x2344, 26785 }, + { 0x2784, 26788 }, + { 0x2783, 26790 }, + { 0x230F, 26795 }, + { 0x23CC, 26803 }, + { 0x9065, 26808 }, + { 0x238A, 26811 }, + { 0x2389, 26817 }, + { 0x938B, 26824 }, + { 0x9224, 26827 }, + { 0x2388, 26832 }, + { 0x2387, 26838 }, + { 0x9378, 26845 }, + { 0x9379, 26850 }, + { 0x2372, 26855 }, + { 0x2785, 26858 }, + { 0x9351, 26861 }, + { 0x2374, 26863 }, + { 0x93A5, 26865 }, + { 0x93A1, 26872 }, + { 0x235D, 26878 }, + { 0x23C3, 26880 }, + { 0x9226, 26883 }, + { 0x235A, 26888 }, + { 0x2386, 26892 }, + { 0x9227, 26895 }, + { 0x93A7, 26898 }, + { 0x93A3, 26905 }, + { 0x93A4, 26911 }, + { 0x93A0, 26918 }, + { 0x9698, 26924 }, + { 0x23C5, 26927 }, + { 0x93A6, 26930 }, + { 0x93A2, 26937 }, + { 0x922E, 26943 }, + { 0x2383, 26947 }, + { 0x238E, 26951 }, + { 0x922C, 26955 }, + { 0x23C0, 26958 }, + { 0x23C8, 26962 }, + { 0x23E9, 26966 }, + { 0x239C, 26970 }, + { 0x239A, 26975 }, + { 0x2342, 26981 }, + { 0x239D, 26984 }, + { 0x239B, 26989 }, + { 0x23E5, 26995 }, + { 0x23E3, 27000 }, + { 0x23E4, 27005 }, + { 0x23D4, 27009 }, + { 0x2369, 27014 }, + { 0x236F, 27017 }, + { 0x23CA, 27021 }, + { 0x23E7, 27025 }, + { 0x9288, 27029 }, + { 0x90DD, 27031 }, + { 0x8F22, 27032 }, + { 0x8FC1, 27034 }, + { 0x8FE7, 27035 }, + { 0x8F7A, 27037 }, + { 0x8F9B, 27039 }, + { 0x1F59, 27040 }, + { 0x8F94, 27041 }, + { 0x8F93, 27044 }, + { 0x8F8B, 27046 }, + { 0x1F0E, 27048 }, + { 0x1EAA, 27050 }, + { 0x9098, 27056 }, + { 0x95FE, 27058 }, + { 0x8BE8, 27063 }, + { 0x8BF8, 27067 }, + { 0x8BB9, 27071 }, + { 0x8BCB, 27075 }, + { 0x8BD4, 27080 }, + { 0x8BBE, 27085 }, + { 0x8BD0, 27089 }, + { 0x8BD9, 27094 }, + { 0x8BC2, 27099 }, + { 0x8BDD, 27103 }, + { 0x8BBA, 27108 }, + { 0x8BCC, 27112 }, + { 0x8BD5, 27117 }, + { 0x8BBD, 27122 }, + { 0x8BCF, 27126 }, + { 0x8BD8, 27131 }, + { 0x8BBC, 27136 }, + { 0x8BCE, 27140 }, + { 0x8BD7, 27145 }, + { 0x8BE6, 27150 }, + { 0x8BC1, 27154 }, + { 0x8BD3, 27158 }, + { 0x8BDC, 27163 }, + { 0x8BC0, 27168 }, + { 0x8BD2, 27172 }, + { 0x8BDB, 27177 }, + { 0x8BC6, 27182 }, + { 0x8BE1, 27186 }, + { 0x8BC5, 27191 }, + { 0x8BE0, 27195 }, + { 0x8BE9, 27200 }, + { 0x8BBF, 27204 }, + { 0x8BD1, 27208 }, + { 0x8BDA, 27213 }, + { 0x8BC7, 27218 }, + { 0x8BE2, 27222 }, + { 0x8BBB, 27227 }, + { 0x8BCD, 27231 }, + { 0x8BD6, 27236 }, + { 0x8BC9, 27241 }, + { 0x8BE4, 27245 }, + { 0x8BE7, 27250 }, + { 0x8BCA, 27254 }, + { 0x8BE5, 27258 }, + { 0x8BC4, 27263 }, + { 0x8BDF, 27267 }, + { 0x8BC3, 27272 }, + { 0x8BDE, 27276 }, + { 0x8BEA, 27281 }, + { 0x8BC8, 27285 }, + { 0x8BE3, 27289 }, + { 0x8BEB, 27294 }, + { 0x8BF0, 27299 }, + { 0x8BEC, 27304 }, + { 0x8BEF, 27309 }, + { 0x8BEE, 27314 }, + { 0x8BF3, 27319 }, + { 0x8BF2, 27324 }, + { 0x8BF1, 27329 }, + { 0x8BED, 27334 }, + { 0x8BF9, 27339 }, + { 0x8BFB, 27344 }, + { 0x8BFA, 27350 }, + { 0x8BF6, 27355 }, + { 0x8BF5, 27360 }, + { 0x8BF7, 27365 }, + { 0x8BFC, 27370 }, + { 0x8BF4, 27375 }, + { 0x90D4, 27378 }, + { 0x90D3, 27384 }, + { 0x90D7, 27390 }, + { 0x90D5, 27395 }, + { 0x90D6, 27399 }, + { 0x9009, 27403 }, + { 0x90FE, 27404 }, + { 0x38A7, 27405 }, + { 0x38A8, 27409 }, + { 0x38A5, 27413 }, + { 0x38A6, 27417 }, + { 0x38A4, 27422 }, + { 0x387A, 27426 }, + { 0x387F, 27430 }, + { 0x387B, 27434 }, + { 0x387E, 27438 }, + { 0x387D, 27442 }, + { 0x3882, 27446 }, + { 0x3879, 27450 }, + { 0x3881, 27454 }, + { 0x3880, 27458 }, + { 0x387C, 27462 }, + { 0x38A0, 27466 }, + { 0x38A3, 27470 }, + { 0x38A1, 27474 }, + { 0x38A2, 27478 }, + { 0x389F, 27482 }, + { 0x389B, 27486 }, + { 0x389D, 27490 }, + { 0x3892, 27494 }, + { 0x389A, 27498 }, + { 0x3891, 27502 }, + { 0x3885, 27506 }, + { 0x3898, 27510 }, + { 0x3883, 27514 }, + { 0x3895, 27518 }, + { 0x3890, 27522 }, + { 0x388D, 27526 }, + { 0x389C, 27530 }, + { 0x389E, 27534 }, + { 0x388E, 27538 }, + { 0x3893, 27542 }, + { 0x3887, 27546 }, + { 0x388B, 27550 }, + { 0x3899, 27554 }, + { 0x3896, 27558 }, + { 0x3894, 27562 }, + { 0x3889, 27566 }, + { 0x388C, 27570 }, + { 0x3884, 27574 }, + { 0x3886, 27578 }, + { 0x388A, 27582 }, + { 0x388F, 27586 }, + { 0x3888, 27590 }, + { 0x3897, 27594 }, + { 0x1525, 27598 }, + { 0x1522, 27602 }, + { 0x151D, 27605 }, + { 0x1520, 27608 }, + { 0x151A, 27611 }, + { 0x1519, 27614 }, + { 0x1526, 27617 }, + { 0x1524, 27620 }, + { 0x1527, 27625 }, + { 0x151E, 27629 }, + { 0x151F, 27633 }, + { 0x151C, 27636 }, + { 0x1528, 27639 }, + { 0x1514, 27642 }, + { 0x1515, 27645 }, + { 0x1518, 27648 }, + { 0x152B, 27651 }, + { 0x1523, 27654 }, + { 0x1521, 27657 }, + { 0x1517, 27660 }, + { 0x151B, 27663 }, + { 0x152A, 27666 }, + { 0x1516, 27669 }, + { 0x152D, 27672 }, + { 0x1532, 27675 }, + { 0x152E, 27678 }, + { 0x1531, 27681 }, + { 0x1530, 27684 }, + { 0x1535, 27687 }, + { 0x152C, 27690 }, + { 0x1534, 27693 }, + { 0x1533, 27696 }, + { 0x152F, 27699 }, + { 0x150F, 27702 }, + { 0x1505, 27706 }, + { 0x1509, 27710 }, + { 0x1507, 27714 }, + { 0x1504, 27718 }, + { 0x1510, 27722 }, + { 0x1511, 27726 }, + { 0x1513, 27730 }, + { 0x150E, 27734 }, + { 0x1506, 27738 }, + { 0x150C, 27742 }, + { 0x1512, 27746 }, + { 0x150B, 27750 }, + { 0x150A, 27754 }, + { 0x150D, 27758 }, + { 0x1508, 27762 }, + { 0x1503, 27766 }, + { 0x1502, 27770 }, + { 0x14E2, 27774 }, + { 0x14D3, 27777 }, + { 0x14D5, 27780 }, + { 0x14D8, 27783 }, + { 0x14DA, 27786 }, + { 0x14EE, 27789 }, + { 0x14CE, 27792 }, + { 0x14D0, 27795 }, + { 0x14EF, 27798 }, + { 0x14E9, 27801 }, + { 0x14E6, 27804 }, + { 0x14E1, 27807 }, + { 0x14E4, 27810 }, + { 0x14F0, 27813 }, + { 0x14E8, 27816 }, + { 0x14ED, 27819 }, + { 0x14DD, 27822 }, + { 0x14DF, 27825 }, + { 0x14EA, 27828 }, + { 0x14E7, 27831 }, + { 0x14D4, 27834 }, + { 0x14D6, 27837 }, + { 0x14CF, 27840 }, + { 0x14D1, 27843 }, + { 0x14D2, 27846 }, + { 0x14DC, 27849 }, + { 0x14D7, 27852 }, + { 0x14E3, 27855 }, + { 0x14E5, 27858 }, + { 0x14EB, 27861 }, + { 0x14EC, 27864 }, + { 0x14DE, 27867 }, + { 0x14E0, 27870 }, + { 0x14D9, 27873 }, + { 0x14DB, 27876 }, + { 0x16F1, 27879 }, + { 0x16E1, 27883 }, + { 0x16F8, 27887 }, + { 0x16E8, 27891 }, + { 0x1539, 27895 }, + { 0x1538, 27900 }, + { 0x1536, 27905 }, + { 0x153A, 27910 }, + { 0x1537, 27915 }, + { 0x153B, 27920 }, + { 0x153E, 27925 }, + { 0x153D, 27930 }, + { 0x153F, 27935 }, + { 0x153C, 27940 }, + { 0x16F0, 27945 }, + { 0x16E0, 27949 }, + { 0x16F2, 27953 }, + { 0x16E2, 27957 }, + { 0x16EF, 27961 }, + { 0x16DF, 27965 }, + { 0x16F3, 27969 }, + { 0x16E3, 27973 }, + { 0x16FB, 27977 }, + { 0x16EB, 27981 }, + { 0x16FA, 27985 }, + { 0x16EA, 27989 }, + { 0x16FC, 27993 }, + { 0x16EC, 27997 }, + { 0x16F9, 28001 }, + { 0x16E9, 28005 }, + { 0x16FD, 28009 }, + { 0x16ED, 28013 }, + { 0x16F6, 28017 }, + { 0x16E6, 28021 }, + { 0x16F5, 28025 }, + { 0x16E5, 28029 }, + { 0x16F7, 28033 }, + { 0x16E7, 28037 }, + { 0x16F4, 28041 }, + { 0x16E4, 28045 }, + { 0x16EE, 28049 }, + { 0x16DE, 28052 }, + { 0x1529, 28055 }, + { 0x14FB, 28059 }, + { 0x14FD, 28063 }, + { 0x14F3, 28067 }, + { 0x14F5, 28071 }, + { 0x14F9, 28075 }, + { 0x14FC, 28079 }, + { 0x14F2, 28083 }, + { 0x14FE, 28087 }, + { 0x14F1, 28091 }, + { 0x1501, 28095 }, + { 0x14F4, 28099 }, + { 0x14FF, 28103 }, + { 0x1500, 28109 }, + { 0x14F6, 28115 }, + { 0x14F7, 28119 }, + { 0x14FA, 28123 }, + { 0x14F8, 28127 }, + { 0x7313, 28131 }, + { 0x7314, 28135 }, + { 0x72E8, 28139 }, + { 0x7312, 28143 }, + { 0x72E9, 28147 }, + { 0x72E7, 28151 }, + { 0x7315, 28155 }, + { 0x7318, 28158 }, + { 0x731D, 28162 }, + { 0x7319, 28166 }, + { 0x731C, 28170 }, + { 0x731B, 28174 }, + { 0x7320, 28178 }, + { 0x7317, 28182 }, + { 0x731F, 28186 }, + { 0x731E, 28190 }, + { 0x731A, 28194 }, + { 0x730E, 28198 }, + { 0x730B, 28203 }, + { 0x7310, 28208 }, + { 0x730C, 28213 }, + { 0x730A, 28218 }, + { 0x730F, 28223 }, + { 0x7311, 28228 }, + { 0x730D, 28233 }, + { 0x7316, 28238 }, + { 0x72EA, 28242 }, + { 0x7300, 28246 }, + { 0x72F0, 28250 }, + { 0x72FB, 28254 }, + { 0x72ED, 28258 }, + { 0x7309, 28262 }, + { 0x72F2, 28266 }, + { 0x72EB, 28270 }, + { 0x7305, 28274 }, + { 0x7302, 28278 }, + { 0x72FD, 28282 }, + { 0x72FE, 28286 }, + { 0x7304, 28290 }, + { 0x7307, 28294 }, + { 0x72F9, 28298 }, + { 0x7306, 28302 }, + { 0x7303, 28306 }, + { 0x7301, 28310 }, + { 0x72F1, 28314 }, + { 0x72F7, 28318 }, + { 0x72FC, 28322 }, + { 0x72EE, 28326 }, + { 0x72F3, 28330 }, + { 0x72EC, 28334 }, + { 0x72EF, 28338 }, + { 0x72F4, 28342 }, + { 0x72FF, 28346 }, + { 0x7308, 28350 }, + { 0x72FA, 28354 }, + { 0x72F5, 28358 }, + { 0x72F8, 28362 }, + { 0x72F6, 28366 }, + { 0x8FDB, 28370 }, + { 0x8FAA, 28371 }, + { 0x2404, 28372 }, + { 0x484F, 28375 }, + { 0x4851, 28382 }, + { 0x90E7, 28389 }, + { 0x9384, 28392 }, + { 0x484E, 28395 }, + { 0x4850, 28402 }, + { 0x90E8, 28409 }, + { 0x9385, 28412 }, + { 0x90EA, 28415 }, + { 0x2405, 28418 }, + { 0x264A, 28421 }, + { 0x7E5F, 28425 }, + { 0x7E6A, 28430 }, + { 0x7E7A, 28434 }, + { 0x7E77, 28441 }, + { 0x7E69, 28448 }, + { 0x7E7B, 28455 }, + { 0x7E71, 28461 }, + { 0x7E83, 28469 }, + { 0x7E6F, 28477 }, + { 0x7E7F, 28486 }, + { 0x7E7E, 28492 }, + { 0x7E80, 28498 }, + { 0x7E78, 28504 }, + { 0x7E84, 28513 }, + { 0x7E86, 28519 }, + { 0x7E85, 28527 }, + { 0x7E87, 28533 }, + { 0x7E7D, 28539 }, + { 0x7E66, 28544 }, + { 0x7E6E, 28549 }, + { 0x7E64, 28555 }, + { 0x7E62, 28561 }, + { 0x7E72, 28569 }, + { 0x7E5B, 28577 }, + { 0x7E5C, 28583 }, + { 0x7E5E, 28589 }, + { 0x7E65, 28595 }, + { 0x7E68, 28601 }, + { 0x7E67, 28607 }, + { 0x7E5D, 28613 }, + { 0x7E70, 28618 }, + { 0x7E73, 28624 }, + { 0x7E74, 28630 }, + { 0x7E75, 28636 }, + { 0x7E76, 28644 }, + { 0x7E90, 28651 }, + { 0x7E8E, 28655 }, + { 0x7E8A, 28659 }, + { 0x7E82, 28663 }, + { 0x7E91, 28669 }, + { 0x7E8F, 28673 }, + { 0x7E8B, 28677 }, + { 0x7E88, 28681 }, + { 0x7E60, 28685 }, + { 0x7E61, 28689 }, + { 0x7E81, 28696 }, + { 0x7E63, 28703 }, + { 0x7E6D, 28709 }, + { 0x7E7C, 28715 }, + { 0x7E79, 28721 }, + { 0x7E6C, 28730 }, + { 0x7E6B, 28736 }, + { 0x7E8C, 28745 }, + { 0x7E8D, 28749 }, + { 0x7E89, 28753 }, + { 0x9383, 28757 }, + { 0x938A, 28760 }, + { 0x9381, 28763 }, + { 0x9388, 28766 }, + { 0x221B, 28769 }, + { 0x937F, 28771 }, + { 0x9386, 28774 }, + { 0x90E9, 28777 }, + { 0x9382, 28780 }, + { 0x9389, 28783 }, + { 0x2728, 28786 }, + { 0x9380, 28791 }, + { 0x9387, 28794 }, + { 0x2349, 28797 }, + { 0x0041, 28799 }, + { 0x01E6, 28803 }, + { 0x01A0, 28810 }, + { 0x1B38, 28819 }, + { 0x1B3A, 28826 }, + { 0x00A4, 28833 }, + { 0x01BA, 28840 }, + { 0x1A98, 28849 }, + { 0x00A0, 28856 }, + { 0x00C2, 28862 }, + { 0x1B4E, 28868 }, + { 0x1B4A, 28877 }, + { 0x1B46, 28886 }, + { 0x1B48, 28894 }, + { 0x1B4C, 28902 }, + { 0x018D, 28910 }, + { 0x009F, 28916 }, + { 0x1B31, 28922 }, + { 0x00A2, 28930 }, + { 0x01C0, 28936 }, + { 0x00C0, 28943 }, + { 0x00C4, 28949 }, + { 0x288E, 28955 }, + { 0x01C2, 28961 }, + { 0x00A3, 28968 }, + { 0x019E, 28974 }, + { 0x1A26, 28982 }, + { 0x00A1, 28989 }, + { 0x1B44, 28995 }, + { 0x1B40, 29004 }, + { 0x1B3C, 29013 }, + { 0x1B3E, 29021 }, + { 0x1B42, 29029 }, + { 0x3A58, 29037 }, + { 0x0042, 29042 }, + { 0x1A9A, 29046 }, + { 0x1A9C, 29053 }, + { 0x0212, 29060 }, + { 0x1A9E, 29066 }, + { 0x1A03, 29073 }, + { 0x013F, 29080 }, + { 0x0142, 29086 }, + { 0x1A17, 29092 }, + { 0x3748, 29099 }, + { 0x0043, 29105 }, + { 0x3744, 29109 }, + { 0x00CA, 29115 }, + { 0x0214, 29122 }, + { 0x0147, 29128 }, + { 0x00C6, 29134 }, + { 0x00CC, 29140 }, + { 0x01FB, 29146 }, + { 0x00A6, 29152 }, + { 0x1AA0, 29158 }, + { 0x3745, 29166 }, + { 0x890C, 29173 }, + { 0x00C8, 29180 }, + { 0x0044, 29186 }, + { 0x1AA2, 29190 }, + { 0x1AA4, 29197 }, + { 0x01E0, 29204 }, + { 0x0216, 29210 }, + { 0x1A28, 29216 }, + { 0x1AA6, 29224 }, + { 0x0215, 29231 }, + { 0x00CE, 29237 }, + { 0x3779, 29243 }, + { 0x1A04, 29251 }, + { 0x00D0, 29258 }, + { 0x014B, 29264 }, + { 0x1AA8, 29270 }, + { 0x1A18, 29276 }, + { 0x1AAA, 29283 }, + { 0x890E, 29290 }, + { 0x0045, 29298 }, + { 0x00D6, 29302 }, + { 0x1B50, 29309 }, + { 0x1B52, 29316 }, + { 0x00A8, 29323 }, + { 0x00D4, 29329 }, + { 0x00DA, 29335 }, + { 0x00A7, 29341 }, + { 0x28A1, 29347 }, + { 0x1B54, 29353 }, + { 0x1AB2, 29359 }, + { 0x01C4, 29366 }, + { 0x00D2, 29373 }, + { 0x1AAE, 29379 }, + { 0x1AAC, 29387 }, + { 0x00D8, 29395 }, + { 0x0206, 29401 }, + { 0x01E8, 29407 }, + { 0x1AB4, 29413 }, + { 0x3A5B, 29421 }, + { 0x01C6, 29427 }, + { 0x00AA, 29434 }, + { 0x1A29, 29440 }, + { 0x00A9, 29447 }, + { 0x1B5E, 29453 }, + { 0x1B5A, 29462 }, + { 0x1B56, 29471 }, + { 0x1B58, 29479 }, + { 0x1B5C, 29487 }, + { 0x1AB0, 29495 }, + { 0x0046, 29502 }, + { 0x1AB6, 29506 }, + { 0x0151, 29513 }, + { 0x1A05, 29519 }, + { 0x374A, 29526 }, + { 0x1A19, 29532 }, + { 0x0047, 29539 }, + { 0x00E0, 29543 }, + { 0x021F, 29550 }, + { 0x01B4, 29556 }, + { 0x00DE, 29562 }, + { 0x01A6, 29568 }, + { 0x1AB8, 29574 }, + { 0x01A4, 29580 }, + { 0x00E2, 29586 }, + { 0x3752, 29592 }, + { 0x1A1A, 29599 }, + { 0x00DC, 29606 }, + { 0x0048, 29612 }, + { 0x1ABA, 29616 }, + { 0x1ABC, 29623 }, + { 0x0225, 29630 }, + { 0x1B2D, 29636 }, + { 0x1AC2, 29643 }, + { 0x01DE, 29650 }, + { 0x00E6, 29656 }, + { 0x1AC0, 29662 }, + { 0x3746, 29668 }, + { 0x2891, 29675 }, + { 0x1ABE, 29681 }, + { 0x00E4, 29687 }, + { 0x0049, 29693 }, + { 0x1B62, 29697 }, + { 0x1B60, 29704 }, + { 0x00AC, 29711 }, + { 0x00EC, 29717 }, + { 0x018F, 29723 }, + { 0x00AB, 29729 }, + { 0x00E8, 29735 }, + { 0x1AC4, 29741 }, + { 0x01C8, 29748 }, + { 0x00EA, 29755 }, + { 0x00EE, 29761 }, + { 0x0227, 29767 }, + { 0x8909, 29773 }, + { 0x01CA, 29782 }, + { 0x00AE, 29789 }, + { 0x1AC6, 29795 }, + { 0x1A2D, 29803 }, + { 0x00AD, 29810 }, + { 0x004A, 29816 }, + { 0x01AF, 29820 }, + { 0x0208, 29826 }, + { 0x00F4, 29832 }, + { 0x025C, 29838 }, + { 0x004B, 29844 }, + { 0x1ACA, 29848 }, + { 0x0158, 29855 }, + { 0x1ACC, 29861 }, + { 0x1AC8, 29868 }, + { 0x01A8, 29874 }, + { 0x36F2, 29880 }, + { 0x36F6, 29886 }, + { 0x00F6, 29895 }, + { 0x3754, 29901 }, + { 0x1A1B, 29908 }, + { 0x36F4, 29915 }, + { 0x2893, 29922 }, + { 0x004C, 29928 }, + { 0x0159, 29932 }, + { 0x1ACE, 29938 }, + { 0x1AD0, 29945 }, + { 0x022B, 29954 }, + { 0x8902, 29960 }, + { 0x01F3, 29969 }, + { 0x36FA, 29975 }, + { 0x1AD2, 29982 }, + { 0x00F9, 29989 }, + { 0x00FD, 29995 }, + { 0x288A, 30001 }, + { 0x3A5F, 30008 }, + { 0x00FF, 30016 }, + { 0x3A60, 30023 }, + { 0x022A, 30030 }, + { 0x0101, 30037 }, + { 0x00FB, 30043 }, + { 0x1A1C, 30049 }, + { 0x8900, 30056 }, + { 0x3A5E, 30062 }, + { 0x022C, 30070 }, + { 0x373F, 30077 }, + { 0x1AD4, 30086 }, + { 0x890F, 30093 }, + { 0x004D, 30101 }, + { 0x1AD8, 30105 }, + { 0x1ADA, 30112 }, + { 0x0230, 30119 }, + { 0x1AD6, 30125 }, + { 0x1A06, 30131 }, + { 0x1A1D, 30138 }, + { 0x3A61, 30145 }, + { 0x004E, 30151 }, + { 0x1ADC, 30155 }, + { 0x1ADE, 30162 }, + { 0x01F4, 30169 }, + { 0x0231, 30175 }, + { 0x1AE0, 30182 }, + { 0x015D, 30189 }, + { 0x0103, 30197 }, + { 0x0107, 30203 }, + { 0x01B8, 30209 }, + { 0x00B0, 30215 }, + { 0x1A07, 30221 }, + { 0x0105, 30228 }, + { 0x3756, 30234 }, + { 0x1A1E, 30241 }, + { 0x3742, 30248 }, + { 0x0232, 30254 }, + { 0x1AE2, 30261 }, + { 0x8910, 30268 }, + { 0x3A62, 30276 }, + { 0x0108, 30282 }, + { 0x004F, 30289 }, + { 0x01EE, 30293 }, + { 0x01F0, 30300 }, + { 0x1B64, 30309 }, + { 0x28A3, 30316 }, + { 0x1B66, 30324 }, + { 0x0160, 30331 }, + { 0x1B7A, 30337 }, + { 0x1B76, 30346 }, + { 0x1B72, 30355 }, + { 0x1B74, 30363 }, + { 0x1B78, 30371 }, + { 0x36FC, 30379 }, + { 0x36FE, 30387 }, + { 0x00B2, 30393 }, + { 0x010E, 30399 }, + { 0x0191, 30405 }, + { 0x00B1, 30411 }, + { 0x00B4, 30417 }, + { 0x1AE4, 30423 }, + { 0x01EC, 30431 }, + { 0x1AE6, 30439 }, + { 0x0110, 30447 }, + { 0x01CC, 30454 }, + { 0x010C, 30461 }, + { 0x1AEA, 30467 }, + { 0x1AE8, 30475 }, + { 0x01AA, 30483 }, + { 0x01AC, 30489 }, + { 0x00B7, 30497 }, + { 0x01BE, 30503 }, + { 0x01CE, 30511 }, + { 0x00B5, 30518 }, + { 0x01EA, 30524 }, + { 0x890A, 30532 }, + { 0x00B3, 30539 }, + { 0x1B70, 30545 }, + { 0x1B6C, 30554 }, + { 0x1B68, 30563 }, + { 0x1B6A, 30571 }, + { 0x1B6E, 30579 }, + { 0x0050, 30587 }, + { 0x1AEE, 30591 }, + { 0x0164, 30598 }, + { 0x1AEC, 30604 }, + { 0x1A08, 30610 }, + { 0x1A14, 30617 }, + { 0x3702, 30623 }, + { 0x1A1F, 30631 }, + { 0x3704, 30638 }, + { 0x3706, 30644 }, + { 0x0051, 30651 }, + { 0x025F, 30655 }, + { 0x020A, 30661 }, + { 0x3708, 30668 }, + { 0x370A, 30676 }, + { 0x0052, 30683 }, + { 0x1AF0, 30687 }, + { 0x1AF2, 30694 }, + { 0x1AF4, 30701 }, + { 0x1AF6, 30710 }, + { 0x023B, 30717 }, + { 0x023C, 30724 }, + { 0x0114, 30730 }, + { 0x0118, 30736 }, + { 0x01D0, 30742 }, + { 0x1A09, 30749 }, + { 0x020C, 30756 }, + { 0x0116, 30762 }, + { 0x3758, 30768 }, + { 0x1A20, 30775 }, + { 0x023D, 30782 }, + { 0x1A0A, 30788 }, + { 0x8905, 30797 }, + { 0x01D2, 30806 }, + { 0x8911, 30813 }, + { 0x3A70, 30821 }, + { 0x370C, 30827 }, + { 0x3A6E, 30832 }, + { 0x0053, 30838 }, + { 0x1AF8, 30842 }, + { 0x1AFA, 30849 }, + { 0x1B00, 30856 }, + { 0x890D, 30866 }, + { 0x0241, 30872 }, + { 0x011A, 30878 }, + { 0x1AFC, 30884 }, + { 0x0120, 30893 }, + { 0x1AFE, 30899 }, + { 0x01D8, 30908 }, + { 0x377B, 30915 }, + { 0x01FE, 30923 }, + { 0x1A0B, 30930 }, + { 0x011E, 30937 }, + { 0x375A, 30943 }, + { 0x1A21, 30950 }, + { 0x377E, 30957 }, + { 0x011C, 30964 }, + { 0x8912, 30970 }, + { 0x0054, 30978 }, + { 0x1B02, 30982 }, + { 0x1B04, 30989 }, + { 0x01F5, 30996 }, + { 0x016C, 31002 }, + { 0x88F8, 31008 }, + { 0x1B06, 31017 }, + { 0x0124, 31024 }, + { 0x01DA, 31030 }, + { 0x1A0C, 31037 }, + { 0x0126, 31044 }, + { 0x0122, 31050 }, + { 0x016A, 31056 }, + { 0x288F, 31063 }, + { 0x1B2E, 31070 }, + { 0x0247, 31076 }, + { 0x1B08, 31083 }, + { 0x8913, 31090 }, + { 0x0055, 31098 }, + { 0x0248, 31102 }, + { 0x3A76, 31107 }, + { 0x1B7C, 31116 }, + { 0x1B7E, 31123 }, + { 0x016F, 31130 }, + { 0x1B88, 31136 }, + { 0x1B84, 31145 }, + { 0x1B80, 31154 }, + { 0x1B82, 31162 }, + { 0x1B86, 31170 }, + { 0x3A79, 31178 }, + { 0x012E, 31185 }, + { 0x00B9, 31192 }, + { 0x012C, 31198 }, + { 0x0193, 31204 }, + { 0x00B8, 31210 }, + { 0x3A75, 31216 }, + { 0x0128, 31224 }, + { 0x1B10, 31230 }, + { 0x1B0C, 31238 }, + { 0x0130, 31245 }, + { 0x01D4, 31252 }, + { 0x012A, 31259 }, + { 0x1B12, 31265 }, + { 0x0132, 31273 }, + { 0x376A, 31279 }, + { 0x01D6, 31285 }, + { 0x00BB, 31292 }, + { 0x0197, 31298 }, + { 0x0199, 31306 }, + { 0x019B, 31314 }, + { 0x0195, 31322 }, + { 0x1B0A, 31330 }, + { 0x1A30, 31337 }, + { 0x00BA, 31344 }, + { 0x1B0E, 31350 }, + { 0x0056, 31357 }, + { 0x1B16, 31361 }, + { 0x289D, 31368 }, + { 0x024A, 31374 }, + { 0x289A, 31380 }, + { 0x1B14, 31387 }, + { 0x1A23, 31393 }, + { 0x3710, 31400 }, + { 0x0057, 31407 }, + { 0x1B1E, 31411 }, + { 0x1B20, 31418 }, + { 0x289C, 31425 }, + { 0x1B2F, 31431 }, + { 0x1B1A, 31438 }, + { 0x1B18, 31444 }, + { 0x1B1C, 31450 }, + { 0x0134, 31456 }, + { 0x0058, 31462 }, + { 0x1B22, 31466 }, + { 0x3A7D, 31473 }, + { 0x3A7E, 31481 }, + { 0x3A7F, 31489 }, + { 0x3A80, 31501 }, + { 0x1A24, 31511 }, + { 0x1B24, 31518 }, + { 0x0059, 31524 }, + { 0x1B26, 31528 }, + { 0x1B8C, 31535 }, + { 0x0173, 31542 }, + { 0x1B8E, 31548 }, + { 0x1B96, 31555 }, + { 0x1B30, 31561 }, + { 0x00BC, 31568 }, + { 0x1B8A, 31574 }, + { 0x3A81, 31580 }, + { 0x1B90, 31588 }, + { 0x01F2, 31594 }, + { 0x020E, 31600 }, + { 0x00BE, 31606 }, + { 0x0136, 31612 }, + { 0x005A, 31618 }, + { 0x013B, 31622 }, + { 0x1B2A, 31629 }, + { 0x0250, 31636 }, + { 0x01E4, 31642 }, + { 0x1B2C, 31648 }, + { 0x0139, 31655 }, + { 0x013D, 31661 }, + { 0x01FF, 31667 }, + { 0x1A0D, 31674 }, + { 0x0175, 31681 }, + { 0x1A25, 31687 }, + { 0x2895, 31694 }, + { 0x024F, 31700 }, + { 0x1B28, 31707 }, + { 0x36E4, 31713 }, + { 0x00A5, 31717 }, + { 0x01BC, 31721 }, + { 0x01A2, 31727 }, + { 0x36E6, 31733 }, + { 0x36E8, 31737 }, + { 0x36EA, 31741 }, + { 0x36EC, 31745 }, + { 0x36EE, 31752 }, + { 0x01F7, 31756 }, + { 0x01B2, 31761 }, + { 0x0185, 31765 }, + { 0x0262, 31771 }, + { 0x0264, 31776 }, + { 0x3A8D, 31783 }, + { 0x371C, 31791 }, + { 0x0154, 31795 }, + { 0x371E, 31799 }, + { 0x0188, 31803 }, + { 0x0269, 31807 }, + { 0x026A, 31812 }, + { 0x018B, 31817 }, + { 0x0162, 31821 }, + { 0x3700, 31825 }, + { 0x01E2, 31829 }, + { 0x01F8, 31833 }, + { 0x0267, 31838 }, + { 0x1A11, 31845 }, + { 0x0265, 31851 }, + { 0x3A8E, 31856 }, + { 0x36DA, 31864 }, + { 0x1A02, 31868 }, + { 0x3A77, 31872 }, + { 0x3729, 31876 }, + { 0x3A8A, 31880 }, + { 0x3712, 31884 }, + { 0x3A7A, 31888 }, + { 0x3A7C, 31892 }, + { 0x3A7B, 31900 }, + { 0x3720, 31908 }, + { 0x3722, 31912 }, + { 0x010A, 31916 }, + { 0x8903, 31920 }, + { 0x3A63, 31927 }, + { 0x0242, 31933 }, + { 0x0245, 31937 }, + { 0x88FA, 31943 }, + { 0x88FB, 31950 }, + { 0x1A22, 31959 }, + { 0x1A2F, 31966 }, + { 0x00AF, 31973 }, + { 0x0251, 31977 }, + { 0x0252, 31981 }, + { 0x0179, 31987 }, + { 0x01AE, 31993 }, + { 0x8907, 31999 }, + { 0x1A31, 32006 }, + { 0x0178, 32013 }, + { 0x0162, 32018 }, + { 0x00F7, 32022 }, + { 0x3723, 32026 }, + { 0x3724, 32030 }, + { 0x3725, 32034 }, + { 0x3772, 32038 }, + { 0x0237, 32044 }, + { 0x3726, 32048 }, + { 0x370E, 32052 }, + { 0x19AD, 32057 }, + { 0x3728, 32063 }, + { 0x3766, 32067 }, + { 0x0263, 32071 }, + { 0x8901, 32076 }, + { 0x8908, 32084 }, + { 0x0268, 32092 }, + { 0x88EF, 32097 }, + { 0x289F, 32104 }, + { 0x36D8, 32109 }, + { 0x0226, 32113 }, + { 0x0228, 32119 }, + { 0x1A13, 32123 }, + { 0x022D, 32129 }, + { 0x88F4, 32133 }, + { 0x013E, 32140 }, + { 0x1B32, 32145 }, + { 0x1B34, 32153 }, + { 0x1B33, 32161 }, + { 0x021A, 32169 }, + { 0x1A2A, 32174 }, + { 0x0213, 32182 }, + { 0x3A66, 32187 }, + { 0x1A2E, 32194 }, + { 0x3A89, 32202 }, + { 0x0223, 32207 }, + { 0x0266, 32212 }, + { 0x8906, 32217 }, + { 0x890B, 32225 }, + { 0x0144, 32233 }, + { 0x0167, 32238 }, + { 0x017C, 32243 }, + { 0x371A, 32248 }, + { 0x01DC, 32252 }, + { 0x0210, 32256 }, + { 0x1A27, 32260 }, + { 0x1B36, 32267 }, + { 0x0222, 32271 }, + { 0x3A5C, 32275 }, + { 0x3768, 32280 }, + { 0x3A87, 32284 }, + { 0x0218, 32289 }, + { 0x0219, 32293 }, + { 0x1A2C, 32299 }, + { 0x009E, 32306 }, + { 0x0244, 32311 }, + { 0x00BD, 32317 }, + { 0x3716, 32321 }, + { 0x3718, 32327 }, + { 0x3A5A, 32335 }, + { 0x0234, 32340 }, + { 0x3A57, 32345 }, + { 0x19AE, 32350 }, + { 0x36F8, 32356 }, + { 0x0259, 32361 }, + { 0x0236, 32367 }, + { 0x3780, 32372 }, + { 0x021D, 32378 }, + { 0x3A6F, 32385 }, + { 0x3A71, 32390 }, + { 0x3782, 32397 }, + { 0x3781, 32402 }, + { 0x3788, 32407 }, + { 0x015A, 32411 }, + { 0x3784, 32417 }, + { 0x0220, 32423 }, + { 0x3A5D, 32428 }, + { 0x3A72, 32435 }, + { 0x3A73, 32440 }, + { 0x020F, 32447 }, + { 0x019C, 32452 }, + { 0x1A0E, 32457 }, + { 0x0224, 32462 }, + { 0x026D, 32467 }, + { 0x026E, 32474 }, + { 0x19A0, 32483 }, + { 0x025D, 32488 }, + { 0x3732, 32493 }, + { 0x022E, 32498 }, + { 0x022F, 32503 }, + { 0x3A6A, 32511 }, + { 0x3A6B, 32517 }, + { 0x0238, 32525 }, + { 0x023A, 32530 }, + { 0x0239, 32537 }, + { 0x88F7, 32545 }, + { 0x28A2, 32556 }, + { 0x3A8F, 32563 }, + { 0x8904, 32571 }, + { 0x0246, 32579 }, + { 0x88FC, 32584 }, + { 0x024B, 32591 }, + { 0x024C, 32596 }, + { 0x024D, 32601 }, + { 0x88F5, 32606 }, + { 0x1999, 32613 }, + { 0x19AB, 32618 }, + { 0x3A68, 32623 }, + { 0x3A69, 32630 }, + { 0x3A78, 32638 }, + { 0x199F, 32643 }, + { 0x0211, 32649 }, + { 0x014C, 32654 }, + { 0x3730, 32659 }, + { 0x00F0, 32665 }, + { 0x01F6, 32670 }, + { 0x021E, 32675 }, + { 0x0243, 32682 }, + { 0x376C, 32691 }, + { 0x376E, 32696 }, + { 0x3770, 32701 }, + { 0x0201, 32706 }, + { 0x372B, 32711 }, + { 0x372D, 32716 }, + { 0x1A10, 32721 }, + { 0x3734, 32726 }, + { 0x3736, 32731 }, + { 0x3738, 32736 }, + { 0x3786, 32741 }, + { 0x3A6C, 32746 }, + { 0x0249, 32751 }, + { 0x1A16, 32755 }, + { 0x374C, 32761 }, + { 0x374E, 32766 }, + { 0x3750, 32771 }, + { 0x3A74, 32776 }, + { 0x3A67, 32781 }, + { 0x3A8B, 32786 }, + { 0x3A88, 32791 }, + { 0x1DDF, 32796 }, + { 0x36F0, 32801 }, + { 0x0217, 32808 }, + { 0x88F2, 32813 }, + { 0x023E, 32818 }, + { 0x88F6, 32825 }, + { 0x378E, 32830 }, + { 0x021B, 32836 }, + { 0x021C, 32842 }, + { 0x1A2B, 32850 }, + { 0x88F0, 32859 }, + { 0x373D, 32865 }, + { 0x19A8, 32869 }, + { 0x19AA, 32874 }, + { 0x19B4, 32881 }, + { 0x19A9, 32886 }, + { 0x19B6, 32892 }, + { 0x19B5, 32898 }, + { 0x28A0, 32904 }, + { 0x36DC, 32909 }, + { 0x3774, 32913 }, + { 0x36DE, 32918 }, + { 0x36E0, 32922 }, + { 0x3714, 32928 }, + { 0x3A59, 32933 }, + { 0x3A64, 32938 }, + { 0x3A65, 32943 }, + { 0x1B94, 32950 }, + { 0x1B92, 32955 }, + { 0x36D6, 32960 }, + { 0x36D4, 32965 }, + { 0x1A12, 32970 }, + { 0x1A15, 32977 }, + { 0x3B68, 32984 }, + { 0x3B69, 32988 }, + { 0x3B6A, 32992 }, + { 0x00F2, 32996 }, + { 0x0112, 33000 }, + { 0x3B6E, 33004 }, + { 0x3B6B, 33008 }, + { 0x3B6C, 33012 }, + { 0x3B6D, 33016 }, + { 0x0165, 33022 }, + { 0x19BC, 33025 }, + { 0x017A, 33028 }, + { 0x017E, 33033 }, + { 0x1997, 33036 }, + { 0x0258, 33041 }, + { 0x199B, 33046 }, + { 0x199C, 33051 }, + { 0x199E, 33056 }, + { 0x36E1, 33061 }, + { 0x0221, 33066 }, + { 0x025A, 33071 }, + { 0x025B, 33078 }, + { 0x0229, 33083 }, + { 0x19A1, 33088 }, + { 0x19A2, 33093 }, + { 0x025E, 33098 }, + { 0x88F3, 33103 }, + { 0x19A3, 33110 }, + { 0x19A4, 33117 }, + { 0x0233, 33122 }, + { 0x19A6, 33127 }, + { 0x19AF, 33132 }, + { 0x3760, 33137 }, + { 0x023F, 33142 }, + { 0x3A6D, 33147 }, + { 0x36E2, 33155 }, + { 0x19B2, 33160 }, + { 0x19B3, 33165 }, + { 0x19B7, 33170 }, + { 0x19B8, 33175 }, + { 0x024E, 33180 }, + { 0x19B9, 33185 }, + { 0x1998, 33190 }, + { 0x0235, 33195 }, + { 0x19AC, 33200 }, + { 0x199D, 33205 }, + { 0x19BA, 33210 }, + { 0x3727, 33215 }, + { 0x19A7, 33220 }, + { 0x199A, 33226 }, + { 0x28A4, 33232 }, + { 0x88F1, 33238 }, + { 0x88FF, 33244 }, + { 0x3792, 33250 }, + { 0x19B1, 33256 }, + { 0x0240, 33262 }, + { 0x19A5, 33268 }, + { 0x19B0, 33274 }, + { 0x017F, 33280 }, + { 0x19BB, 33284 }, + { 0x0253, 33289 }, + { 0x0260, 33293 }, + { 0x0180, 33299 }, + { 0x0181, 33303 }, + { 0x026C, 33307 }, + { 0x0257, 33311 }, + { 0x026B, 33315 }, + { 0x0255, 33319 }, + { 0x88FD, 33324 }, + { 0x017D, 33331 }, + { 0x0169, 33338 }, + { 0x0261, 33343 }, + { 0x0182, 33350 }, + { 0x88F9, 33354 }, + { 0x0256, 33361 }, + { 0x88FE, 33365 }, + { 0x0254, 33371 }, + { 0x3740, 33376 }, + { 0x0021, 33380 }, + { 0x01E5, 33384 }, + { 0x019F, 33391 }, + { 0x1B37, 33400 }, + { 0x1B39, 33407 }, + { 0x0084, 33414 }, + { 0x01B9, 33421 }, + { 0x1A97, 33430 }, + { 0x0080, 33437 }, + { 0x00C1, 33443 }, + { 0x1B4D, 33449 }, + { 0x1B49, 33458 }, + { 0x1B45, 33467 }, + { 0x1B47, 33475 }, + { 0x1B4B, 33483 }, + { 0x018C, 33491 }, + { 0x007F, 33497 }, + { 0x0082, 33503 }, + { 0x01BF, 33509 }, + { 0x00BF, 33516 }, + { 0x00C3, 33522 }, + { 0x01F9, 33528 }, + { 0x01C1, 33534 }, + { 0x0083, 33541 }, + { 0x019D, 33547 }, + { 0x0081, 33555 }, + { 0x1B43, 33561 }, + { 0x1B3F, 33570 }, + { 0x1B3B, 33579 }, + { 0x1B3D, 33587 }, + { 0x1B41, 33595 }, + { 0x0022, 33603 }, + { 0x1A99, 33607 }, + { 0x1A9B, 33614 }, + { 0x0140, 33621 }, + { 0x1A9D, 33627 }, + { 0x0202, 33634 }, + { 0x0141, 33640 }, + { 0x3747, 33646 }, + { 0x0023, 33652 }, + { 0x3743, 33656 }, + { 0x00C9, 33662 }, + { 0x0146, 33669 }, + { 0x00C5, 33675 }, + { 0x00CB, 33681 }, + { 0x01FA, 33687 }, + { 0x0086, 33693 }, + { 0x1A9F, 33699 }, + { 0x3775, 33707 }, + { 0x00C7, 33714 }, + { 0x0024, 33720 }, + { 0x1AA1, 33724 }, + { 0x1AA3, 33731 }, + { 0x0149, 33738 }, + { 0x1AA5, 33744 }, + { 0x00CD, 33751 }, + { 0x3778, 33757 }, + { 0x01B1, 33765 }, + { 0x0184, 33773 }, + { 0x00CF, 33783 }, + { 0x014A, 33789 }, + { 0x1AA7, 33795 }, + { 0x1AA9, 33801 }, + { 0x0025, 33808 }, + { 0x00D5, 33812 }, + { 0x1B4F, 33819 }, + { 0x1B51, 33826 }, + { 0x0088, 33833 }, + { 0x00D3, 33839 }, + { 0x00D9, 33845 }, + { 0x0087, 33851 }, + { 0x1B53, 33857 }, + { 0x1AB1, 33863 }, + { 0x01C3, 33870 }, + { 0x00D1, 33877 }, + { 0x1AAD, 33883 }, + { 0x1AAB, 33891 }, + { 0x00D7, 33899 }, + { 0x0205, 33905 }, + { 0x01E7, 33911 }, + { 0x1AB3, 33917 }, + { 0x01C5, 33925 }, + { 0x008A, 33932 }, + { 0x0089, 33938 }, + { 0x1B5D, 33944 }, + { 0x1B59, 33953 }, + { 0x1B55, 33962 }, + { 0x1B57, 33970 }, + { 0x1B5B, 33978 }, + { 0x1AAF, 33986 }, + { 0x0026, 33993 }, + { 0x1AB5, 33997 }, + { 0x0150, 34004 }, + { 0x3749, 34010 }, + { 0x0027, 34016 }, + { 0x00DF, 34020 }, + { 0x0152, 34027 }, + { 0x01B3, 34033 }, + { 0x00DD, 34039 }, + { 0x01A5, 34045 }, + { 0x1AB7, 34051 }, + { 0x01A3, 34057 }, + { 0x00E1, 34063 }, + { 0x3751, 34069 }, + { 0x00DB, 34076 }, + { 0x0028, 34082 }, + { 0x1AB9, 34086 }, + { 0x1ABB, 34093 }, + { 0x375B, 34100 }, + { 0x1AC1, 34106 }, + { 0x01DD, 34113 }, + { 0x00E5, 34119 }, + { 0x1ABF, 34125 }, + { 0x2890, 34131 }, + { 0x1ABD, 34137 }, + { 0x00E3, 34143 }, + { 0x0029, 34149 }, + { 0x00EF, 34153 }, + { 0x1B61, 34160 }, + { 0x1B5F, 34167 }, + { 0x008C, 34174 }, + { 0x00EB, 34180 }, + { 0x018E, 34186 }, + { 0x008B, 34192 }, + { 0x00E7, 34198 }, + { 0x1AC3, 34204 }, + { 0x01C7, 34211 }, + { 0x00E9, 34218 }, + { 0x00ED, 34224 }, + { 0x0156, 34230 }, + { 0x01C9, 34236 }, + { 0x008E, 34243 }, + { 0x1AC5, 34249 }, + { 0x008D, 34257 }, + { 0x002A, 34263 }, + { 0x0207, 34267 }, + { 0x00F3, 34273 }, + { 0x3763, 34279 }, + { 0x002B, 34285 }, + { 0x1AC9, 34289 }, + { 0x0157, 34296 }, + { 0x1ACB, 34302 }, + { 0x1AC7, 34309 }, + { 0x01A7, 34315 }, + { 0x36F1, 34321 }, + { 0x36F5, 34327 }, + { 0x00F5, 34336 }, + { 0x3753, 34342 }, + { 0x36F3, 34349 }, + { 0x2892, 34356 }, + { 0x002C, 34362 }, + { 0x01FC, 34366 }, + { 0x1ACD, 34372 }, + { 0x1ACF, 34379 }, + { 0x375E, 34388 }, + { 0x36F9, 34394 }, + { 0x1AD1, 34401 }, + { 0x00F8, 34408 }, + { 0x00FC, 34414 }, + { 0x0187, 34420 }, + { 0x2889, 34428 }, + { 0x00FE, 34435 }, + { 0x288B, 34442 }, + { 0x0100, 34449 }, + { 0x00FA, 34455 }, + { 0x1AD3, 34461 }, + { 0x002D, 34468 }, + { 0x1AD7, 34472 }, + { 0x1AD9, 34479 }, + { 0x2897, 34486 }, + { 0x1AD5, 34492 }, + { 0x002E, 34498 }, + { 0x1ADB, 34502 }, + { 0x1ADD, 34509 }, + { 0x015C, 34516 }, + { 0x1ADF, 34523 }, + { 0x01DF, 34530 }, + { 0x0102, 34538 }, + { 0x0106, 34544 }, + { 0x01B7, 34550 }, + { 0x018A, 34556 }, + { 0x0090, 34564 }, + { 0x0104, 34570 }, + { 0x3755, 34576 }, + { 0x3741, 34583 }, + { 0x1AE1, 34589 }, + { 0x002F, 34596 }, + { 0x01ED, 34600 }, + { 0x01EF, 34607 }, + { 0x1B63, 34616 }, + { 0x1B65, 34623 }, + { 0x015F, 34630 }, + { 0x1B79, 34636 }, + { 0x1B75, 34645 }, + { 0x1B71, 34654 }, + { 0x1B73, 34662 }, + { 0x1B77, 34670 }, + { 0x36FB, 34678 }, + { 0x36FD, 34686 }, + { 0x0092, 34692 }, + { 0x010D, 34698 }, + { 0x0190, 34704 }, + { 0x0091, 34710 }, + { 0x0094, 34716 }, + { 0x1AE3, 34722 }, + { 0x01EB, 34730 }, + { 0x1AE5, 34738 }, + { 0x010F, 34746 }, + { 0x01CB, 34753 }, + { 0x010B, 34760 }, + { 0x1AE9, 34766 }, + { 0x1AE7, 34774 }, + { 0x015E, 34782 }, + { 0x01A9, 34789 }, + { 0x01AB, 34795 }, + { 0x0097, 34803 }, + { 0x01BD, 34809 }, + { 0x01CD, 34817 }, + { 0x0095, 34824 }, + { 0x01E9, 34830 }, + { 0x0093, 34838 }, + { 0x1B6F, 34844 }, + { 0x1B6B, 34853 }, + { 0x1B67, 34862 }, + { 0x1B69, 34870 }, + { 0x1B6D, 34878 }, + { 0x0030, 34886 }, + { 0x1AED, 34890 }, + { 0x0163, 34897 }, + { 0x1AEB, 34903 }, + { 0x288C, 34909 }, + { 0x3701, 34915 }, + { 0x3703, 34923 }, + { 0x3705, 34929 }, + { 0x0031, 34936 }, + { 0x3707, 34940 }, + { 0x3709, 34948 }, + { 0x0032, 34955 }, + { 0x1AEF, 34959 }, + { 0x1AF1, 34966 }, + { 0x1AF3, 34973 }, + { 0x1AF5, 34982 }, + { 0x288D, 34989 }, + { 0x0113, 34995 }, + { 0x0117, 35001 }, + { 0x01CF, 35007 }, + { 0x020B, 35014 }, + { 0x0115, 35020 }, + { 0x3757, 35026 }, + { 0x01D1, 35033 }, + { 0x370B, 35040 }, + { 0x0033, 35045 }, + { 0x1AF7, 35049 }, + { 0x1AF9, 35056 }, + { 0x1AFF, 35063 }, + { 0x3776, 35073 }, + { 0x0119, 35079 }, + { 0x1AFB, 35085 }, + { 0x011F, 35094 }, + { 0x1AFD, 35100 }, + { 0x01D7, 35109 }, + { 0x377A, 35116 }, + { 0x28A7, 35124 }, + { 0x011D, 35131 }, + { 0x3759, 35137 }, + { 0x377D, 35144 }, + { 0x011B, 35151 }, + { 0x0034, 35157 }, + { 0x1B01, 35161 }, + { 0x1B03, 35168 }, + { 0x016B, 35175 }, + { 0x1B05, 35181 }, + { 0x0123, 35188 }, + { 0x01D9, 35194 }, + { 0x0125, 35201 }, + { 0x0121, 35207 }, + { 0x01FD, 35213 }, + { 0x016D, 35220 }, + { 0x1B07, 35227 }, + { 0x0035, 35234 }, + { 0x0203, 35238 }, + { 0x1B7B, 35243 }, + { 0x1B7D, 35250 }, + { 0x016E, 35257 }, + { 0x1B87, 35263 }, + { 0x1B83, 35272 }, + { 0x1B7F, 35281 }, + { 0x1B81, 35289 }, + { 0x1B85, 35297 }, + { 0x012D, 35305 }, + { 0x0099, 35312 }, + { 0x012B, 35318 }, + { 0x0192, 35324 }, + { 0x0098, 35330 }, + { 0x0127, 35336 }, + { 0x1B0F, 35342 }, + { 0x1B0B, 35350 }, + { 0x012F, 35357 }, + { 0x01D3, 35364 }, + { 0x0129, 35371 }, + { 0x1B11, 35377 }, + { 0x0131, 35385 }, + { 0x3769, 35391 }, + { 0x01D5, 35397 }, + { 0x009B, 35404 }, + { 0x0196, 35410 }, + { 0x0198, 35418 }, + { 0x019A, 35426 }, + { 0x0194, 35434 }, + { 0x1B09, 35442 }, + { 0x009A, 35449 }, + { 0x1B0D, 35455 }, + { 0x0036, 35462 }, + { 0x1B15, 35466 }, + { 0x0171, 35473 }, + { 0x1B13, 35479 }, + { 0x370F, 35485 }, + { 0x0037, 35492 }, + { 0x1B1D, 35496 }, + { 0x1B1F, 35503 }, + { 0x289B, 35510 }, + { 0x1B19, 35516 }, + { 0x1B17, 35522 }, + { 0x1B1B, 35528 }, + { 0x0133, 35534 }, + { 0x0038, 35540 }, + { 0x1B21, 35544 }, + { 0x1B23, 35551 }, + { 0x0039, 35557 }, + { 0x1B25, 35561 }, + { 0x1B8B, 35568 }, + { 0x0172, 35575 }, + { 0x1B8D, 35581 }, + { 0x1B95, 35588 }, + { 0x009C, 35594 }, + { 0x1B89, 35600 }, + { 0x1B8F, 35606 }, + { 0x01F1, 35612 }, + { 0x020D, 35618 }, + { 0x0137, 35624 }, + { 0x0135, 35630 }, + { 0x003A, 35636 }, + { 0x013A, 35640 }, + { 0x1B29, 35647 }, + { 0x01E3, 35654 }, + { 0x1B2B, 35660 }, + { 0x0138, 35667 }, + { 0x013C, 35673 }, + { 0x28A8, 35679 }, + { 0x0174, 35686 }, + { 0x3777, 35692 }, + { 0x2894, 35699 }, + { 0x1B27, 35705 }, + { 0x36E3, 35711 }, + { 0x0085, 35715 }, + { 0x01BB, 35719 }, + { 0x01A1, 35725 }, + { 0x36E5, 35731 }, + { 0x36E7, 35735 }, + { 0x36E9, 35739 }, + { 0x36EB, 35743 }, + { 0x36ED, 35750 }, + { 0x01B0, 35754 }, + { 0x0183, 35758 }, + { 0x371B, 35764 }, + { 0x371D, 35768 }, + { 0x0186, 35772 }, + { 0x0189, 35776 }, + { 0x0161, 35780 }, + { 0x36FF, 35784 }, + { 0x01E1, 35788 }, + { 0x36D9, 35792 }, + { 0x3711, 35796 }, + { 0x3764, 35800 }, + { 0x371F, 35804 }, + { 0x0109, 35808 }, + { 0x0168, 35812 }, + { 0x008F, 35816 }, + { 0x0176, 35820 }, + { 0x01AD, 35824 }, + { 0x0177, 35830 }, + { 0x0161, 35835 }, + { 0x3771, 35839 }, + { 0x370D, 35845 }, + { 0x3765, 35850 }, + { 0x289E, 35854 }, + { 0x36D7, 35859 }, + { 0x0155, 35863 }, + { 0x014F, 35867 }, + { 0x0145, 35872 }, + { 0x377C, 35877 }, + { 0x0143, 35882 }, + { 0x0166, 35887 }, + { 0x017B, 35892 }, + { 0x3719, 35897 }, + { 0x01B6, 35901 }, + { 0x01DB, 35905 }, + { 0x2896, 35909 }, + { 0x0153, 35913 }, + { 0x01B5, 35917 }, + { 0x3767, 35921 }, + { 0x014E, 35925 }, + { 0x1B35, 35929 }, + { 0x0209, 35934 }, + { 0x375F, 35942 }, + { 0x009D, 35948 }, + { 0x3715, 35952 }, + { 0x3717, 35958 }, + { 0x36F7, 35966 }, + { 0x377F, 35971 }, + { 0x3787, 35977 }, + { 0x3789, 35981 }, + { 0x3783, 35987 }, + { 0x375D, 35993 }, + { 0x2898, 35998 }, + { 0x373E, 36003 }, + { 0x3761, 36008 }, + { 0x3731, 36013 }, + { 0x015B, 36018 }, + { 0x3762, 36023 }, + { 0x0204, 36028 }, + { 0x2899, 36033 }, + { 0x372F, 36038 }, + { 0x0148, 36044 }, + { 0x376B, 36049 }, + { 0x376D, 36054 }, + { 0x376F, 36059 }, + { 0x0200, 36064 }, + { 0x372A, 36069 }, + { 0x372C, 36074 }, + { 0x372E, 36079 }, + { 0x3733, 36084 }, + { 0x3735, 36089 }, + { 0x3737, 36094 }, + { 0x3785, 36099 }, + { 0x0170, 36104 }, + { 0x374B, 36108 }, + { 0x374D, 36113 }, + { 0x374F, 36118 }, + { 0x36EF, 36123 }, + { 0x014D, 36130 }, + { 0x378D, 36135 }, + { 0x375C, 36141 }, + { 0x373C, 36147 }, + { 0x36DB, 36151 }, + { 0x3773, 36155 }, + { 0x36DD, 36160 }, + { 0x36DF, 36164 }, + { 0x3713, 36170 }, + { 0x1B93, 36175 }, + { 0x1B91, 36180 }, + { 0x36D5, 36185 }, + { 0x36D3, 36190 }, + { 0x00F1, 36195 }, + { 0x0111, 36199 }, + { 0x1D0C, 36203 }, + { 0x1D0D, 36208 }, + { 0x1D11, 36213 }, + { 0x19F9, 36218 }, + { 0x28A5, 36223 }, + { 0x1D12, 36228 }, + { 0x1D13, 36233 }, + { 0x1D14, 36238 }, + { 0x1D15, 36243 }, + { 0x1D0E, 36248 }, + { 0x1D16, 36253 }, + { 0x19FA, 36258 }, + { 0x1D17, 36263 }, + { 0x1D18, 36268 }, + { 0x19FB, 36273 }, + { 0x19FC, 36278 }, + { 0x1D0F, 36283 }, + { 0x1D10, 36288 }, + { 0x3796, 36293 }, + { 0x3797, 36298 }, + { 0x3795, 36303 }, + { 0x3793, 36308 }, + { 0x3794, 36313 }, + { 0x378F, 36318 }, + { 0x949A, 36323 }, + { 0x8EFE, 36325 }, + { 0x8F4D, 36326 }, + { 0x227A, 36328 }, + { 0x935A, 36329 }, + { 0x9595, 36333 }, + { 0x9354, 36336 }, + { 0x936E, 36340 }, + { 0x27F5, 36345 }, + { 0x9369, 36350 }, + { 0x239E, 36355 }, + { 0x923B, 36361 }, + { 0x91AB, 36363 }, + { 0x9360, 36366 }, + { 0x9347, 36370 }, + { 0x239F, 36373 }, + { 0x21BD, 36379 }, + { 0x9365, 36381 }, + { 0x9333, 36386 }, + { 0x9377, 36389 }, + { 0x934E, 36394 }, + { 0x2384, 36396 }, + { 0x165B, 36399 }, + { 0x165A, 36402 }, + { 0x1659, 36405 }, + { 0x1658, 36408 }, + { 0x165F, 36411 }, + { 0x1664, 36414 }, + { 0x1660, 36417 }, + { 0x1663, 36420 }, + { 0x1662, 36423 }, + { 0x1667, 36426 }, + { 0x165E, 36429 }, + { 0x1666, 36432 }, + { 0x1665, 36435 }, + { 0x1661, 36438 }, + { 0x164F, 36441 }, + { 0x1657, 36445 }, + { 0x1655, 36449 }, + { 0x1653, 36453 }, + { 0x1654, 36457 }, + { 0x1656, 36461 }, + { 0x1652, 36465 }, + { 0x1650, 36469 }, + { 0x1651, 36473 }, + { 0x1643, 36477 }, + { 0x164A, 36481 }, + { 0x1644, 36485 }, + { 0x164B, 36489 }, + { 0x1645, 36493 }, + { 0x1647, 36497 }, + { 0x1649, 36501 }, + { 0x1646, 36505 }, + { 0x1648, 36509 }, + { 0x1636, 36513 }, + { 0x162A, 36516 }, + { 0x1631, 36519 }, + { 0x1627, 36522 }, + { 0x1640, 36525 }, + { 0x162C, 36528 }, + { 0x1625, 36531 }, + { 0x163B, 36534 }, + { 0x1638, 36537 }, + { 0x1633, 36540 }, + { 0x1634, 36543 }, + { 0x163A, 36546 }, + { 0x163F, 36549 }, + { 0x162F, 36552 }, + { 0x163C, 36555 }, + { 0x1639, 36558 }, + { 0x1637, 36561 }, + { 0x162B, 36564 }, + { 0x1632, 36567 }, + { 0x1628, 36570 }, + { 0x162D, 36573 }, + { 0x1626, 36576 }, + { 0x1629, 36579 }, + { 0x1635, 36582 }, + { 0x163D, 36585 }, + { 0x163E, 36588 }, + { 0x1630, 36591 }, + { 0x1642, 36594 }, + { 0x162E, 36597 }, + { 0x1641, 36600 }, + { 0x165D, 36603 }, + { 0x164D, 36606 }, + { 0x164E, 36610 }, + { 0x164C, 36614 }, + { 0x165C, 36618 }, + { 0x1624, 36621 }, + { 0x1D2F, 36624 }, + { 0x94C7, 36627 }, + { 0x7C5C, 36628 }, + { 0x7C5D, 36631 }, + { 0x7C60, 36634 }, + { 0x7C61, 36637 }, + { 0x7C5E, 36643 }, + { 0x7C5F, 36647 }, + { 0x95CF, 36651 }, + { 0x21AD, 36652 }, + { 0x21AE, 36656 }, + { 0x21B1, 36660 }, + { 0x7E42, 36664 }, + { 0x7EE5, 36671 }, + { 0x21B0, 36677 }, + { 0x7E45, 36680 }, + { 0x7EF0, 36685 }, + { 0x220D, 36691 }, + { 0x9691, 36694 }, + { 0x2207, 36698 }, + { 0x7E54, 36703 }, + { 0x7EDD, 36711 }, + { 0x963F, 36716 }, + { 0x963E, 36726 }, + { 0x9642, 36736 }, + { 0x9651, 36745 }, + { 0x964F, 36755 }, + { 0x9652, 36765 }, + { 0x9650, 36774 }, + { 0x964E, 36784 }, + { 0x9641, 36794 }, + { 0x9640, 36804 }, + { 0x9653, 36814 }, + { 0x9140, 36825 }, + { 0x913C, 36828 }, + { 0x7C80, 36831 }, + { 0x7C83, 36835 }, + { 0x913E, 36839 }, + { 0x7CF5, 36843 }, + { 0x7D03, 36850 }, + { 0x7D17, 36855 }, + { 0x7D0B, 36860 }, + { 0x7D07, 36865 }, + { 0x7D0F, 36870 }, + { 0x7D13, 36875 }, + { 0x7CF3, 36880 }, + { 0x7CF1, 36885 }, + { 0x220B, 36890 }, + { 0x7CF7, 36895 }, + { 0x7D1B, 36900 }, + { 0x7CFB, 36905 }, + { 0x7CFF, 36909 }, + { 0x2226, 36913 }, + { 0x913D, 36916 }, + { 0x913F, 36920 }, + { 0x96A0, 36923 }, + { 0x256B, 36928 }, + { 0x232F, 36933 }, + { 0x7EE0, 36936 }, + { 0x964A, 36941 }, + { 0x9647, 36951 }, + { 0x964C, 36960 }, + { 0x9649, 36970 }, + { 0x964D, 36980 }, + { 0x964B, 36989 }, + { 0x9646, 36999 }, + { 0x9645, 37009 }, + { 0x9648, 37019 }, + { 0x9644, 37030 }, + { 0x9643, 37040 }, + { 0x7C4E, 37050 }, + { 0x23FF, 37054 }, + { 0x233A, 37059 }, + { 0x7C81, 37062 }, + { 0x7C86, 37066 }, + { 0x7CF6, 37070 }, + { 0x7D04, 37077 }, + { 0x7D18, 37082 }, + { 0x7D0C, 37087 }, + { 0x7D08, 37092 }, + { 0x7D10, 37097 }, + { 0x7D14, 37102 }, + { 0x7CF4, 37107 }, + { 0x7CF2, 37112 }, + { 0x220A, 37117 }, + { 0x7CF8, 37122 }, + { 0x7D1C, 37127 }, + { 0x7CFC, 37132 }, + { 0x7D00, 37136 }, + { 0x90F1, 37140 }, + { 0x237D, 37145 }, + { 0x222B, 37150 }, + { 0x969F, 37153 }, + { 0x256A, 37158 }, + { 0x237B, 37163 }, + { 0x21B3, 37168 }, + { 0x21AF, 37172 }, + { 0x7EE6, 37176 }, + { 0x21B2, 37183 }, + { 0x7EEF, 37187 }, + { 0x96E6, 37194 }, + { 0x7EDE, 37199 }, + { 0x7C84, 37205 }, + { 0x7EDF, 37210 }, + { 0x7C85, 37216 }, + { 0x7ED9, 37221 }, + { 0x7C7F, 37227 }, + { 0x7EDC, 37232 }, + { 0x7C82, 37238 }, + { 0x7EDA, 37243 }, + { 0x7EDB, 37250 }, + { 0x7C4C, 37257 }, + { 0x9671, 37261 }, + { 0x931F, 37266 }, + { 0x95D9, 37268 }, + { 0x9453, 37269 }, + { 0x95A1, 37271 }, + { 0x1D35, 37273 }, + { 0x949B, 37275 }, + { 0x8EF4, 37276 }, + { 0x81E8, 37278 }, + { 0x81ED, 37281 }, + { 0x81F1, 37284 }, + { 0x81E9, 37287 }, + { 0x81EC, 37290 }, + { 0x81EB, 37293 }, + { 0x81F0, 37296 }, + { 0x81E7, 37299 }, + { 0x81EF, 37302 }, + { 0x81EE, 37305 }, + { 0x81EA, 37308 }, + { 0x81F2, 37311 }, + { 0x81F3, 37314 }, + { 0x81F6, 37317 }, + { 0x81F7, 37320 }, + { 0x81F9, 37323 }, + { 0x81F5, 37326 }, + { 0x81FA, 37329 }, + { 0x81F4, 37332 }, + { 0x81F8, 37335 }, + { 0x8EFB, 37338 }, + { 0x8B51, 37339 }, + { 0x8B56, 37343 }, + { 0x8B52, 37347 }, + { 0x8B55, 37351 }, + { 0x8B54, 37355 }, + { 0x8B59, 37359 }, + { 0x8B58, 37363 }, + { 0x8B57, 37367 }, + { 0x8B53, 37371 }, + { 0x8A8C, 37375 }, + { 0x8A8D, 37380 }, + { 0x8A8E, 37385 }, + { 0x8A94, 37390 }, + { 0x8A95, 37395 }, + { 0x8A96, 37400 }, + { 0x8AA0, 37405 }, + { 0x8AA1, 37410 }, + { 0x8AA2, 37415 }, + { 0x8AA7, 37420 }, + { 0x8AA8, 37425 }, + { 0x8AA9, 37430 }, + { 0x8AAE, 37435 }, + { 0x8AAF, 37440 }, + { 0x8AB0, 37445 }, + { 0x8ACA, 37450 }, + { 0x8ACB, 37455 }, + { 0x8ACC, 37460 }, + { 0x8ABA, 37465 }, + { 0x8ABB, 37470 }, + { 0x8ABC, 37475 }, + { 0x8AD0, 37480 }, + { 0x8AD1, 37485 }, + { 0x8AD2, 37490 }, + { 0x8AC2, 37495 }, + { 0x8AC3, 37500 }, + { 0x8AC4, 37505 }, + { 0x8AD7, 37510 }, + { 0x8AD8, 37515 }, + { 0x8AD9, 37520 }, + { 0x8ADF, 37525 }, + { 0x8AE0, 37530 }, + { 0x8AE1, 37535 }, + { 0x8AE6, 37540 }, + { 0x8AE7, 37545 }, + { 0x8AE8, 37550 }, + { 0x8AEF, 37555 }, + { 0x8AF0, 37560 }, + { 0x8AF1, 37565 }, + { 0x8AF7, 37570 }, + { 0x8AF5, 37575 }, + { 0x8AF9, 37580 }, + { 0x8B04, 37585 }, + { 0x8B2E, 37590 }, + { 0x8A9A, 37595 }, + { 0x8B02, 37600 }, + { 0x8B22, 37605 }, + { 0x8A92, 37610 }, + { 0x8A9E, 37615 }, + { 0x8B1A, 37620 }, + { 0x8B1C, 37625 }, + { 0x8B00, 37630 }, + { 0x8AFD, 37635 }, + { 0x8AC7, 37640 }, + { 0x8AD4, 37645 }, + { 0x8B33, 37650 }, + { 0x8B16, 37655 }, + { 0x8B4D, 37660 }, + { 0x8AA3, 37665 }, + { 0x8B50, 37670 }, + { 0x8A9D, 37675 }, + { 0x8B20, 37680 }, + { 0x8ADD, 37685 }, + { 0x8B40, 37690 }, + { 0x8A8F, 37695 }, + { 0x8B1E, 37700 }, + { 0x8B3F, 37705 }, + { 0x8B18, 37710 }, + { 0x8AD6, 37715 }, + { 0x8B38, 37720 }, + { 0x8B37, 37725 }, + { 0x8B24, 37730 }, + { 0x8AC6, 37735 }, + { 0x8B2D, 37740 }, + { 0x8AEA, 37745 }, + { 0x8A91, 37750 }, + { 0x8B4B, 37755 }, + { 0x8AE9, 37760 }, + { 0x8AC0, 37765 }, + { 0x8AE3, 37770 }, + { 0x8B1B, 37775 }, + { 0x8B05, 37780 }, + { 0x8AFB, 37785 }, + { 0x8AC5, 37790 }, + { 0x8B49, 37795 }, + { 0x8B0C, 37800 }, + { 0x8AFF, 37806 }, + { 0x8AEC, 37811 }, + { 0x8ACD, 37816 }, + { 0x8B03, 37821 }, + { 0x8AD3, 37826 }, + { 0x8B2C, 37831 }, + { 0x8B35, 37836 }, + { 0x8AA4, 37841 }, + { 0x8A90, 37846 }, + { 0x8AF8, 37851 }, + { 0x8AAB, 37856 }, + { 0x8B4F, 37861 }, + { 0x8B19, 37866 }, + { 0x8AB2, 37871 }, + { 0x8AEE, 37876 }, + { 0x8B1D, 37881 }, + { 0x8AAC, 37886 }, + { 0x8AD5, 37891 }, + { 0x8B29, 37896 }, + { 0x8B0D, 37902 }, + { 0x8B36, 37908 }, + { 0x8B2F, 37913 }, + { 0x8AE2, 37918 }, + { 0x8AC9, 37923 }, + { 0x8B10, 37929 }, + { 0x8B30, 37934 }, + { 0x8ADB, 37939 }, + { 0x8A99, 37944 }, + { 0x8B06, 37949 }, + { 0x8ABE, 37954 }, + { 0x8AF2, 37959 }, + { 0x8A98, 37964 }, + { 0x8B3E, 37969 }, + { 0x8B09, 37974 }, + { 0x8AE5, 37979 }, + { 0x8B21, 37984 }, + { 0x8B3A, 37989 }, + { 0x8B32, 37994 }, + { 0x8B3C, 37999 }, + { 0x8A97, 38004 }, + { 0x8B0B, 38009 }, + { 0x8AFC, 38014 }, + { 0x8B3B, 38019 }, + { 0x8AFE, 38024 }, + { 0x8AB6, 38029 }, + { 0x8B2B, 38034 }, + { 0x8AEB, 38039 }, + { 0x8B44, 38044 }, + { 0x8AB7, 38049 }, + { 0x8ABF, 38054 }, + { 0x8AB5, 38059 }, + { 0x8AAD, 38064 }, + { 0x8A9F, 38069 }, + { 0x8AFA, 38074 }, + { 0x8AE4, 38079 }, + { 0x8B2A, 38084 }, + { 0x8A9C, 38090 }, + { 0x8B4A, 38095 }, + { 0x8B1F, 38100 }, + { 0x8B07, 38105 }, + { 0x8AB4, 38110 }, + { 0x8B34, 38115 }, + { 0x8B43, 38120 }, + { 0x8AAA, 38125 }, + { 0x8B47, 38130 }, + { 0x8B41, 38135 }, + { 0x8AC8, 38140 }, + { 0x8AA5, 38145 }, + { 0x8B0F, 38150 }, + { 0x8B08, 38155 }, + { 0x8ADA, 38160 }, + { 0x8B31, 38165 }, + { 0x8B0A, 38170 }, + { 0x8ADC, 38175 }, + { 0x8B28, 38180 }, + { 0x8ABD, 38186 }, + { 0x8AB1, 38191 }, + { 0x8B4C, 38196 }, + { 0x8AB3, 38201 }, + { 0x8B13, 38206 }, + { 0x8B14, 38211 }, + { 0x8B11, 38216 }, + { 0x8AF3, 38221 }, + { 0x8B4E, 38226 }, + { 0x8B39, 38231 }, + { 0x8B25, 38236 }, + { 0x8B25, 38241 }, + { 0x8B48, 38246 }, + { 0x8B26, 38251 }, + { 0x8B26, 38256 }, + { 0x8ADE, 38261 }, + { 0x8AF4, 38267 }, + { 0x8B17, 38272 }, + { 0x8AB9, 38277 }, + { 0x8A93, 38282 }, + { 0x8ACE, 38287 }, + { 0x8ACF, 38292 }, + { 0x8B45, 38297 }, + { 0x8B0E, 38302 }, + { 0x8B15, 38308 }, + { 0x8B46, 38313 }, + { 0x8AF6, 38318 }, + { 0x8B27, 38323 }, + { 0x8B23, 38328 }, + { 0x8AA6, 38333 }, + { 0x8B12, 38338 }, + { 0x8B3D, 38343 }, + { 0x8B42, 38348 }, + { 0x8B01, 38353 }, + { 0x8A9B, 38358 }, + { 0x8AB8, 38363 }, + { 0x8AC1, 38368 }, + { 0x8AED, 38373 }, + { 0x8B5E, 38378 }, + { 0x8B5B, 38384 }, + { 0x8B5A, 38389 }, + { 0x8B5F, 38394 }, + { 0x8B5C, 38400 }, + { 0x8B60, 38405 }, + { 0x8B5D, 38410 }, + { 0x923A, 38415 }, + { 0x0074, 38416 }, + { 0x8EBF, 38418 }, + { 0x1E69, 38420 }, + { 0x2666, 38422 }, + { 0x2656, 38426 }, + { 0x2655, 38431 }, + { 0x2658, 38436 }, + { 0x2657, 38441 }, + { 0x1E99, 38446 }, + { 0x9063, 38448 }, + { 0x906B, 38450 }, + { 0x95DF, 38453 }, + { 0x9294, 38454 }, + { 0x92A1, 38456 }, + { 0x91AE, 38458 }, + { 0x8FB4, 38460 }, + { 0x8FE0, 38461 }, + { 0x95BC, 38463 }, + { 0x8FF7, 38465 }, + { 0x8F58, 38466 }, + { 0x91B2, 38468 }, + { 0x2299, 38469 }, + { 0x229B, 38472 }, + { 0x229A, 38475 }, + { 0x2635, 38478 }, + { 0x1F1A, 38481 }, + { 0x262F, 38483 }, + { 0x2630, 38488 }, + { 0x272B, 38493 }, + { 0x2632, 38497 }, + { 0x2631, 38501 }, + { 0x262C, 38505 }, + { 0x262D, 38509 }, + { 0x262E, 38513 }, + { 0x1F18, 38517 }, + { 0x1F17, 38520 }, + { 0x1E66, 38523 }, + { 0x1E67, 38525 }, + { 0x1E68, 38527 }, + { 0x1F19, 38529 }, + { 0x1E5E, 38531 }, + { 0x1D1F, 38532 }, + { 0x952D, 38534 }, + { 0x8EB6, 38536 }, + { 0x94A5, 38539 }, + { 0x1CAF, 38540 }, + { 0x254E, 38541 }, + { 0x1DEE, 38547 }, + { 0x2554, 38550 }, + { 0x9429, 38557 }, + { 0x2550, 38562 }, + { 0x255D, 38567 }, + { 0x255A, 38574 }, + { 0x2734, 38581 }, + { 0x272C, 38585 }, + { 0x1E2E, 38589 }, + { 0x9215, 38593 }, + { 0x9205, 38597 }, + { 0x920D, 38601 }, + { 0x93D5, 38606 }, + { 0x2793, 38610 }, + { 0x27A1, 38614 }, + { 0x254D, 38620 }, + { 0x1DED, 38626 }, + { 0x1E0F, 38629 }, + { 0x1E48, 38635 }, + { 0x2553, 38640 }, + { 0x9428, 38647 }, + { 0x254F, 38652 }, + { 0x255E, 38657 }, + { 0x2735, 38664 }, + { 0x272D, 38668 }, + { 0x1E2D, 38672 }, + { 0x9213, 38676 }, + { 0x9203, 38680 }, + { 0x920B, 38684 }, + { 0x93D4, 38689 }, + { 0x2792, 38693 }, + { 0x27A0, 38697 }, + { 0x37CD, 38703 }, + { 0x37CB, 38707 }, + { 0x37C6, 38711 }, + { 0x37C9, 38716 }, + { 0x37C5, 38721 }, + { 0x37C8, 38726 }, + { 0x37C7, 38731 }, + { 0x37CA, 38736 }, + { 0x37CE, 38741 }, + { 0x37CC, 38745 }, + { 0x7412, 38749 }, + { 0x7A28, 38752 }, + { 0x7A29, 38754 }, + { 0x7A2A, 38756 }, + { 0x7A2B, 38758 }, + { 0x7A2C, 38760 }, + { 0x7A2D, 38762 }, + { 0x7A2E, 38764 }, + { 0x7A2F, 38766 }, + { 0x7A30, 38768 }, + { 0x7A31, 38770 }, + { 0x7A32, 38772 }, + { 0x7A33, 38774 }, + { 0x7A34, 38776 }, + { 0x7A35, 38778 }, + { 0x7A36, 38780 }, + { 0x7A37, 38782 }, + { 0x7A38, 38784 }, + { 0x7A39, 38786 }, + { 0x7A3A, 38788 }, + { 0x7A3B, 38790 }, + { 0x7A3C, 38792 }, + { 0x7A3D, 38794 }, + { 0x7A3E, 38796 }, + { 0x7A3F, 38798 }, + { 0x7A40, 38800 }, + { 0x7A41, 38802 }, + { 0x7A42, 38804 }, + { 0x7A43, 38806 }, + { 0x7A44, 38808 }, + { 0x7A45, 38810 }, + { 0x7A46, 38812 }, + { 0x7A47, 38814 }, + { 0x7A48, 38816 }, + { 0x7A49, 38818 }, + { 0x7A4A, 38820 }, + { 0x7A4B, 38822 }, + { 0x7A4C, 38824 }, + { 0x7A4D, 38826 }, + { 0x7A4E, 38828 }, + { 0x7A4F, 38830 }, + { 0x7A50, 38832 }, + { 0x7A51, 38834 }, + { 0x7A52, 38836 }, + { 0x7A53, 38838 }, + { 0x7A54, 38840 }, + { 0x7A55, 38842 }, + { 0x7A56, 38844 }, + { 0x7A57, 38846 }, + { 0x7A58, 38848 }, + { 0x7A59, 38850 }, + { 0x7A5A, 38852 }, + { 0x7A5B, 38854 }, + { 0x7A5C, 38856 }, + { 0x7A5D, 38858 }, + { 0x7A5E, 38860 }, + { 0x7A5F, 38862 }, + { 0x7A60, 38864 }, + { 0x7A61, 38866 }, + { 0x7A62, 38868 }, + { 0x7A63, 38870 }, + { 0x7A64, 38872 }, + { 0x7A65, 38874 }, + { 0x7A66, 38876 }, + { 0x7A67, 38878 }, + { 0x7A68, 38880 }, + { 0x7A69, 38882 }, + { 0x7A6A, 38884 }, + { 0x7A6B, 38886 }, + { 0x7A6C, 38888 }, + { 0x7A6D, 38890 }, + { 0x7A6E, 38892 }, + { 0x7A6F, 38894 }, + { 0x7A70, 38896 }, + { 0x7A71, 38898 }, + { 0x7A72, 38900 }, + { 0x7A73, 38902 }, + { 0x7A74, 38904 }, + { 0x7A75, 38906 }, + { 0x7A76, 38908 }, + { 0x7A77, 38910 }, + { 0x7A78, 38912 }, + { 0x7A79, 38914 }, + { 0x7A7A, 38916 }, + { 0x7A7B, 38918 }, + { 0x7A7C, 38920 }, + { 0x7A7D, 38922 }, + { 0x7A7E, 38924 }, + { 0x7A7F, 38926 }, + { 0x7A80, 38928 }, + { 0x7A81, 38930 }, + { 0x7A82, 38932 }, + { 0x7A83, 38934 }, + { 0x7A84, 38936 }, + { 0x7A85, 38938 }, + { 0x7A86, 38940 }, + { 0x7A87, 38942 }, + { 0x7A88, 38944 }, + { 0x7A89, 38946 }, + { 0x7A8A, 38948 }, + { 0x7A8B, 38950 }, + { 0x7A8C, 38952 }, + { 0x7A8D, 38954 }, + { 0x7A8E, 38956 }, + { 0x7A8F, 38958 }, + { 0x7A90, 38960 }, + { 0x7A91, 38962 }, + { 0x7A92, 38964 }, + { 0x7A93, 38966 }, + { 0x7A94, 38968 }, + { 0x7A95, 38970 }, + { 0x7A96, 38972 }, + { 0x7A97, 38974 }, + { 0x7A98, 38976 }, + { 0x7A99, 38978 }, + { 0x7A9A, 38980 }, + { 0x7A9B, 38982 }, + { 0x7A9C, 38984 }, + { 0x7A9D, 38986 }, + { 0x7A9E, 38988 }, + { 0x7A9F, 38990 }, + { 0x7AA0, 38992 }, + { 0x7AA1, 38994 }, + { 0x7AA2, 38996 }, + { 0x7AA3, 38998 }, + { 0x7AA4, 39000 }, + { 0x7AA5, 39002 }, + { 0x7AA6, 39004 }, + { 0x7AA7, 39006 }, + { 0x7AA8, 39008 }, + { 0x7AA9, 39010 }, + { 0x7AAA, 39012 }, + { 0x7AAB, 39014 }, + { 0x7AAC, 39016 }, + { 0x7AAD, 39018 }, + { 0x7AAE, 39020 }, + { 0x7AAF, 39022 }, + { 0x7AB0, 39024 }, + { 0x7AB1, 39026 }, + { 0x7AB2, 39028 }, + { 0x7AB3, 39030 }, + { 0x7AB4, 39032 }, + { 0x7AB5, 39034 }, + { 0x7AB6, 39036 }, + { 0x7AB7, 39038 }, + { 0x7AB8, 39040 }, + { 0x7AB9, 39042 }, + { 0x7ABA, 39044 }, + { 0x7ABB, 39046 }, + { 0x7ABC, 39048 }, + { 0x7ABD, 39050 }, + { 0x7ABE, 39052 }, + { 0x7ABF, 39054 }, + { 0x7AC0, 39056 }, + { 0x7AC1, 39058 }, + { 0x7AC2, 39060 }, + { 0x7AC3, 39062 }, + { 0x7AC4, 39064 }, + { 0x7AC5, 39066 }, + { 0x7AC6, 39068 }, + { 0x7AC7, 39070 }, + { 0x7AC8, 39072 }, + { 0x7AC9, 39074 }, + { 0x7ACA, 39076 }, + { 0x7ACB, 39078 }, + { 0x7ACC, 39080 }, + { 0x7ACD, 39082 }, + { 0x7ACE, 39084 }, + { 0x7ACF, 39086 }, + { 0x7AD0, 39088 }, + { 0x7AD1, 39090 }, + { 0x7AD2, 39092 }, + { 0x7AD3, 39094 }, + { 0x7AD4, 39096 }, + { 0x7AD5, 39098 }, + { 0x7AD6, 39100 }, + { 0x7AD7, 39102 }, + { 0x7AD8, 39104 }, + { 0x7AD9, 39106 }, + { 0x7ADA, 39108 }, + { 0x7ADB, 39110 }, + { 0x7ADC, 39112 }, + { 0x7ADD, 39114 }, + { 0x7ADE, 39116 }, + { 0x7ADF, 39118 }, + { 0x7AE0, 39120 }, + { 0x7AE1, 39122 }, + { 0x7AE2, 39124 }, + { 0x7AE3, 39126 }, + { 0x7AE4, 39128 }, + { 0x7AE5, 39130 }, + { 0x7AE6, 39132 }, + { 0x7AE7, 39134 }, + { 0x7AE8, 39136 }, + { 0x7AE9, 39138 }, + { 0x7AEA, 39140 }, + { 0x7AEB, 39142 }, + { 0x7AEC, 39144 }, + { 0x7AED, 39146 }, + { 0x7AEE, 39148 }, + { 0x7AEF, 39150 }, + { 0x7AF0, 39152 }, + { 0x7AF1, 39154 }, + { 0x7AF2, 39156 }, + { 0x7AF3, 39158 }, + { 0x7AF4, 39160 }, + { 0x7AF5, 39162 }, + { 0x7AF6, 39164 }, + { 0x7AF7, 39166 }, + { 0x7AF8, 39168 }, + { 0x7AF9, 39170 }, + { 0x7AFA, 39172 }, + { 0x7AFB, 39174 }, + { 0x7AFC, 39176 }, + { 0x7AFD, 39178 }, + { 0x7AFE, 39180 }, + { 0x7AFF, 39182 }, + { 0x7B00, 39184 }, + { 0x7B01, 39186 }, + { 0x7B02, 39188 }, + { 0x7B03, 39190 }, + { 0x7B04, 39192 }, + { 0x7B05, 39194 }, + { 0x7B06, 39196 }, + { 0x7B07, 39198 }, + { 0x7B08, 39200 }, + { 0x7B09, 39202 }, + { 0x7B0A, 39204 }, + { 0x7B0B, 39206 }, + { 0x7B0C, 39208 }, + { 0x7B0D, 39210 }, + { 0x7B0E, 39212 }, + { 0x7B0F, 39214 }, + { 0x7B10, 39216 }, + { 0x7B11, 39218 }, + { 0x7B12, 39220 }, + { 0x7B13, 39222 }, + { 0x7B14, 39224 }, + { 0x7B15, 39226 }, + { 0x7B16, 39228 }, + { 0x7B17, 39230 }, + { 0x7B18, 39232 }, + { 0x7B19, 39234 }, + { 0x7B1A, 39236 }, + { 0x7B1B, 39238 }, + { 0x7B1C, 39240 }, + { 0x7B1D, 39242 }, + { 0x7B1E, 39244 }, + { 0x7B1F, 39246 }, + { 0x7B20, 39248 }, + { 0x7B21, 39250 }, + { 0x7B22, 39252 }, + { 0x7B23, 39254 }, + { 0x7B24, 39256 }, + { 0x7B25, 39258 }, + { 0x7B26, 39260 }, + { 0x7B27, 39262 }, + { 0x7B28, 39264 }, + { 0x7B29, 39266 }, + { 0x7B2A, 39268 }, + { 0x7B2B, 39270 }, + { 0x7B2C, 39272 }, + { 0x7B2D, 39274 }, + { 0x7B2E, 39276 }, + { 0x7B2F, 39278 }, + { 0x7B30, 39280 }, + { 0x7B31, 39282 }, + { 0x7B32, 39284 }, + { 0x7B33, 39286 }, + { 0x7B34, 39288 }, + { 0x7B35, 39290 }, + { 0x7B36, 39292 }, + { 0x7B37, 39294 }, + { 0x7B38, 39296 }, + { 0x7B39, 39298 }, + { 0x7B3A, 39300 }, + { 0x7B3B, 39302 }, + { 0x7B3C, 39304 }, + { 0x7B3D, 39306 }, + { 0x7B3E, 39308 }, + { 0x7B3F, 39310 }, + { 0x7B40, 39312 }, + { 0x7B41, 39314 }, + { 0x7B42, 39316 }, + { 0x7B43, 39318 }, + { 0x7B44, 39320 }, + { 0x7B45, 39322 }, + { 0x7B46, 39324 }, + { 0x7B47, 39326 }, + { 0x7B48, 39328 }, + { 0x7B49, 39330 }, + { 0x7B4A, 39332 }, + { 0x7B4B, 39334 }, + { 0x7B4C, 39336 }, + { 0x7B4D, 39338 }, + { 0x7B4E, 39340 }, + { 0x7B4F, 39342 }, + { 0x7B50, 39344 }, + { 0x7B51, 39346 }, + { 0x7B52, 39348 }, + { 0x7B53, 39350 }, + { 0x7B54, 39352 }, + { 0x7B55, 39354 }, + { 0x7B56, 39356 }, + { 0x7B57, 39358 }, + { 0x7B58, 39360 }, + { 0x7B59, 39362 }, + { 0x7B5A, 39364 }, + { 0x7B5B, 39366 }, + { 0x7B5C, 39368 }, + { 0x7B5D, 39370 }, + { 0x7B5E, 39372 }, + { 0x7B5F, 39374 }, + { 0x7B60, 39376 }, + { 0x7B61, 39378 }, + { 0x7B62, 39380 }, + { 0x7B63, 39382 }, + { 0x7B64, 39384 }, + { 0x7B65, 39386 }, + { 0x7B66, 39388 }, + { 0x7B67, 39390 }, + { 0x7B68, 39392 }, + { 0x7B69, 39394 }, + { 0x7B6A, 39396 }, + { 0x7B6B, 39398 }, + { 0x7B6C, 39400 }, + { 0x7B6D, 39402 }, + { 0x7B6E, 39404 }, + { 0x7B6F, 39406 }, + { 0x7B70, 39408 }, + { 0x7B71, 39410 }, + { 0x7B72, 39412 }, + { 0x7B73, 39414 }, + { 0x7B74, 39416 }, + { 0x7B75, 39418 }, + { 0x7B76, 39420 }, + { 0x7B77, 39422 }, + { 0x7B78, 39424 }, + { 0x7B79, 39426 }, + { 0x7B7A, 39428 }, + { 0x7B7B, 39430 }, + { 0x7B7C, 39432 }, + { 0x7B7D, 39434 }, + { 0x7B7E, 39436 }, + { 0x7B7F, 39438 }, + { 0x7B80, 39440 }, + { 0x7B81, 39442 }, + { 0x7B82, 39444 }, + { 0x7B83, 39446 }, + { 0x7B84, 39448 }, + { 0x7B85, 39450 }, + { 0x7B86, 39452 }, + { 0x7B87, 39454 }, + { 0x7B88, 39456 }, + { 0x7B89, 39458 }, + { 0x7B8A, 39460 }, + { 0x7B8B, 39462 }, + { 0x7B8C, 39464 }, + { 0x7B8D, 39466 }, + { 0x7B8E, 39468 }, + { 0x7B8F, 39470 }, + { 0x7B90, 39472 }, + { 0x7B91, 39474 }, + { 0x7B92, 39476 }, + { 0x7B93, 39478 }, + { 0x7B94, 39480 }, + { 0x7B95, 39482 }, + { 0x7B96, 39484 }, + { 0x7B97, 39486 }, + { 0x7B98, 39488 }, + { 0x7B99, 39490 }, + { 0x7B9A, 39492 }, + { 0x7B9B, 39494 }, + { 0x7B9C, 39496 }, + { 0x7B9D, 39498 }, + { 0x7B9E, 39500 }, + { 0x7B9F, 39502 }, + { 0x7BA0, 39504 }, + { 0x7BA1, 39506 }, + { 0x7BA2, 39508 }, + { 0x7BA3, 39510 }, + { 0x7BA4, 39512 }, + { 0x7BA5, 39514 }, + { 0x7BA6, 39516 }, + { 0x7BA7, 39518 }, + { 0x7BA8, 39520 }, + { 0x7BA9, 39522 }, + { 0x7BAA, 39524 }, + { 0x7BAB, 39526 }, + { 0x7BAC, 39528 }, + { 0x7BAD, 39530 }, + { 0x7BAE, 39532 }, + { 0x7BAF, 39534 }, + { 0x7BB0, 39536 }, + { 0x7BB1, 39538 }, + { 0x7BB2, 39540 }, + { 0x7BB3, 39542 }, + { 0x1404, 39544 }, + { 0x141A, 39547 }, + { 0x1416, 39550 }, + { 0x1415, 39553 }, + { 0x1414, 39556 }, + { 0x140D, 39559 }, + { 0x140B, 39562 }, + { 0x1410, 39565 }, + { 0x141C, 39568 }, + { 0x1406, 39571 }, + { 0x140F, 39574 }, + { 0x1409, 39577 }, + { 0x1413, 39580 }, + { 0x1408, 39583 }, + { 0x140A, 39586 }, + { 0x1405, 39589 }, + { 0x140E, 39592 }, + { 0x1407, 39595 }, + { 0x141E, 39598 }, + { 0x140C, 39601 }, + { 0x1412, 39604 }, + { 0x1419, 39607 }, + { 0x1417, 39610 }, + { 0x1418, 39613 }, + { 0x1411, 39616 }, + { 0x141B, 39619 }, + { 0x141D, 39622 }, + { 0x141F, 39625 }, + { 0x1420, 39628 }, + { 0x9027, 39632 }, + { 0x9501, 39634 }, + { 0x9028, 39636 }, + { 0x95E3, 39638 }, + { 0x94F3, 39639 }, + { 0x9324, 39640 }, + { 0x0A40, 39641 }, + { 0x0A41, 39645 }, + { 0x0A31, 39649 }, + { 0x0A3E, 39652 }, + { 0x0A02, 39655 }, + { 0x0A01, 39658 }, + { 0x0A32, 39661 }, + { 0x0A3F, 39664 }, + { 0x0A00, 39667 }, + { 0x0A4A, 39670 }, + { 0x0A4F, 39673 }, + { 0x0A4B, 39676 }, + { 0x0A4E, 39679 }, + { 0x0A4D, 39682 }, + { 0x0A52, 39685 }, + { 0x0A49, 39688 }, + { 0x0A51, 39691 }, + { 0x0A50, 39694 }, + { 0x0A4C, 39697 }, + { 0x0A3A, 39700 }, + { 0x0A34, 39704 }, + { 0x0A3C, 39708 }, + { 0x0A36, 39712 }, + { 0x0A33, 39716 }, + { 0x0A3B, 39720 }, + { 0x0A3D, 39724 }, + { 0x0A35, 39728 }, + { 0x0A37, 39732 }, + { 0x0A47, 39736 }, + { 0x0A38, 39741 }, + { 0x0A48, 39746 }, + { 0x0A39, 39751 }, + { 0x0A53, 39756 }, + { 0x0A03, 39758 }, + { 0x0A0B, 39761 }, + { 0x0A05, 39764 }, + { 0x0A0D, 39767 }, + { 0x0A07, 39770 }, + { 0x0A04, 39773 }, + { 0x0A0C, 39776 }, + { 0x0A0E, 39779 }, + { 0x0A25, 39782 }, + { 0x0A14, 39785 }, + { 0x0A20, 39788 }, + { 0x0A11, 39791 }, + { 0x0A30, 39794 }, + { 0x0A06, 39797 }, + { 0x0A16, 39800 }, + { 0x0A0F, 39803 }, + { 0x0A2A, 39806 }, + { 0x0A27, 39809 }, + { 0x0A22, 39812 }, + { 0x0A23, 39815 }, + { 0x0A29, 39818 }, + { 0x0A2F, 39821 }, + { 0x0A1E, 39824 }, + { 0x0A08, 39827 }, + { 0x0A2C, 39830 }, + { 0x0A54, 39833 }, + { 0x0A28, 39836 }, + { 0x0A26, 39839 }, + { 0x0A15, 39842 }, + { 0x0A1B, 39845 }, + { 0x0A21, 39848 }, + { 0x0A12, 39851 }, + { 0x0A17, 39854 }, + { 0x0A10, 39857 }, + { 0x0A2B, 39860 }, + { 0x0A13, 39863 }, + { 0x0A1D, 39866 }, + { 0x0A18, 39869 }, + { 0x0A24, 39872 }, + { 0x0A43, 39875 }, + { 0x0A42, 39878 }, + { 0x0A2D, 39881 }, + { 0x0A2E, 39884 }, + { 0x0A1F, 39887 }, + { 0x0A19, 39890 }, + { 0x0A44, 39893 }, + { 0x0A1C, 39896 }, + { 0x0A1A, 39899 }, + { 0x0A0A, 39902 }, + { 0x0A09, 39906 }, + { 0x0A46, 39910 }, + { 0x0A45, 39914 }, + { 0x0A56, 39918 }, + { 0x0A59, 39922 }, + { 0x0A55, 39926 }, + { 0x0A58, 39930 }, + { 0x0A57, 39934 }, + { 0x0A5A, 39938 }, + { 0x436B, 39942 }, + { 0x4372, 39946 }, + { 0x4376, 39950 }, + { 0x437D, 39954 }, + { 0x4389, 39958 }, + { 0x436E, 39962 }, + { 0x436C, 39966 }, + { 0x4374, 39970 }, + { 0x4377, 39974 }, + { 0x437A, 39978 }, + { 0x437B, 39982 }, + { 0x437C, 39986 }, + { 0x437F, 39990 }, + { 0x4381, 39994 }, + { 0x4383, 39998 }, + { 0x438A, 40002 }, + { 0x438D, 40006 }, + { 0x436D, 40010 }, + { 0x436F, 40014 }, + { 0x4370, 40018 }, + { 0x4388, 40022 }, + { 0x4373, 40026 }, + { 0x438C, 40030 }, + { 0x4375, 40034 }, + { 0x438B, 40038 }, + { 0x4379, 40042 }, + { 0x437E, 40046 }, + { 0x4382, 40050 }, + { 0x4385, 40054 }, + { 0x438E, 40058 }, + { 0x4378, 40062 }, + { 0x4380, 40066 }, + { 0x4384, 40070 }, + { 0x4387, 40074 }, + { 0x4371, 40078 }, + { 0x4386, 40082 }, + { 0x4347, 40086 }, + { 0x434E, 40090 }, + { 0x4352, 40094 }, + { 0x4359, 40098 }, + { 0x4365, 40102 }, + { 0x434A, 40106 }, + { 0x4348, 40110 }, + { 0x4350, 40114 }, + { 0x4353, 40118 }, + { 0x4356, 40122 }, + { 0x4357, 40126 }, + { 0x4358, 40130 }, + { 0x435B, 40134 }, + { 0x435D, 40138 }, + { 0x435F, 40142 }, + { 0x4366, 40146 }, + { 0x4369, 40150 }, + { 0x4349, 40154 }, + { 0x434B, 40158 }, + { 0x434C, 40162 }, + { 0x4364, 40166 }, + { 0x434F, 40170 }, + { 0x4368, 40174 }, + { 0x4351, 40178 }, + { 0x4367, 40182 }, + { 0x4355, 40186 }, + { 0x435A, 40190 }, + { 0x435E, 40194 }, + { 0x4361, 40198 }, + { 0x436A, 40202 }, + { 0x4354, 40206 }, + { 0x435C, 40210 }, + { 0x4360, 40214 }, + { 0x4363, 40218 }, + { 0x434D, 40222 }, + { 0x4362, 40226 }, + { 0x94D4, 40230 }, + { 0x1D80, 40231 }, + { 0x9092, 40233 }, + { 0x9183, 40234 }, + { 0x9460, 40235 }, + { 0x8FEF, 40238 }, + { 0x8F3C, 40240 }, + { 0x225A, 40242 }, + { 0x8F04, 40244 }, + { 0x9519, 40245 }, + { 0x9283, 40247 }, + { 0x1F6F, 40250 }, + { 0x2273, 40254 }, + { 0x27FC, 40255 }, + { 0x27FF, 40258 }, + { 0x27FE, 40261 }, + { 0x27FD, 40264 }, + { 0x9010, 40267 }, + { 0x0062, 40268 }, + { 0x2054, 40270 }, + { 0x2055, 40273 }, + { 0x2053, 40276 }, + { 0x2052, 40279 }, + { 0x1CB2, 40281 }, + { 0x1FF0, 40282 }, + { 0x900E, 40285 }, + { 0x90AE, 40286 }, + { 0x90CB, 40287 }, + { 0x1E8D, 40289 }, + { 0x95AA, 40290 }, + { 0x9474, 40291 }, + { 0x9681, 40292 }, + { 0x9680, 40298 }, + { 0x25C0, 40304 }, + { 0x2A13, 40308 }, + { 0x21C1, 40312 }, + { 0x9689, 40316 }, + { 0x25A9, 40320 }, + { 0x968B, 40323 }, + { 0x7E41, 40327 }, + { 0x2812, 40334 }, + { 0x2203, 40338 }, + { 0x21BC, 40342 }, + { 0x7EE1, 40345 }, + { 0x7EEC, 40351 }, + { 0x7E4D, 40357 }, + { 0x7CEC, 40361 }, + { 0x96BB, 40365 }, + { 0x968F, 40368 }, + { 0x7E4F, 40372 }, + { 0x96B4, 40377 }, + { 0x7E52, 40381 }, + { 0x9130, 40389 }, + { 0x96BD, 40393 }, + { 0x1EF9, 40397 }, + { 0x91A2, 40399 }, + { 0x1E76, 40402 }, + { 0x1F15, 40404 }, + { 0x1FD3, 40408 }, + { 0x29F7, 40414 }, + { 0x2BB6, 40419 }, + { 0x25BE, 40422 }, + { 0x25C8, 40427 }, + { 0x29F6, 40432 }, + { 0x1E4B, 40436 }, + { 0x2420, 40441 }, + { 0x25C4, 40446 }, + { 0x2BBE, 40451 }, + { 0x005D, 40455 }, + { 0x2004, 40458 }, + { 0x2002, 40463 }, + { 0x2003, 40468 }, + { 0x1F62, 40473 }, + { 0x2402, 40475 }, + { 0x968D, 40478 }, + { 0x96C4, 40482 }, + { 0x7C54, 40488 }, + { 0x968A, 40491 }, + { 0x968C, 40495 }, + { 0x7EE2, 40499 }, + { 0x7EEB, 40506 }, + { 0x25B0, 40513 }, + { 0x2BBC, 40517 }, + { 0x2BC8, 40521 }, + { 0x2BC6, 40525 }, + { 0x2BC4, 40530 }, + { 0x25B2, 40534 }, + { 0x2BBA, 40537 }, + { 0x29FB, 40540 }, + { 0x2BB8, 40544 }, + { 0x259C, 40548 }, + { 0x2607, 40554 }, + { 0x1C9D, 40558 }, + { 0x2A1F, 40562 }, + { 0x1F21, 40565 }, + { 0x2A03, 40570 }, + { 0x1C99, 40574 }, + { 0x919C, 40578 }, + { 0x003D, 40581 }, + { 0x25BC, 40584 }, + { 0x25BA, 40592 }, + { 0x1CC6, 40600 }, + { 0x2A4E, 40605 }, + { 0x2A4C, 40611 }, + { 0x25B8, 40616 }, + { 0x1FFD, 40621 }, + { 0x1FFB, 40626 }, + { 0x1FFC, 40631 }, + { 0x2605, 40635 }, + { 0x1F60, 40638 }, + { 0x911B, 40640 }, + { 0x911C, 40642 }, + { 0x911D, 40648 }, + { 0x91A0, 40654 }, + { 0x23F2, 40657 }, + { 0x2A1D, 40661 }, + { 0x2BC2, 40665 }, + { 0x1F16, 40669 }, + { 0x25FA, 40671 }, + { 0x2A17, 40676 }, + { 0x2010, 40681 }, + { 0x7C4D, 40685 }, + { 0x96EA, 40689 }, + { 0x96E2, 40695 }, + { 0x1F23, 40701 }, + { 0x9670, 40704 }, + { 0x0009, 40709 }, + { 0x1FF7, 40711 }, + { 0x1FF5, 40715 }, + { 0x1FF6, 40719 }, + { 0x29F9, 40722 }, + { 0x2A00, 40725 }, + { 0x9444, 40728 }, + { 0x4145, 40730 }, + { 0x413C, 40733 }, + { 0x413F, 40736 }, + { 0x1DBB, 40740 }, + { 0x1DC8, 40743 }, + { 0x1DE3, 40747 }, + { 0x1DCA, 40752 }, + { 0x1DDB, 40756 }, + { 0x1DC0, 40762 }, + { 0x1DE0, 40765 }, + { 0x1DC4, 40770 }, + { 0x1DDD, 40773 }, + { 0x1DBC, 40777 }, + { 0x1DBF, 40780 }, + { 0x1DC9, 40783 }, + { 0x1DDC, 40787 }, + { 0x1DBE, 40791 }, + { 0x1DC3, 40794 }, + { 0x1DC2, 40797 }, + { 0x1DC7, 40800 }, + { 0x1DE1, 40803 }, + { 0x1DE2, 40808 }, + { 0x1DC1, 40812 }, + { 0x1DBD, 40815 }, + { 0x1DC5, 40818 }, + { 0x1DC6, 40821 }, + { 0x1DDE, 40824 }, + { 0x413B, 40829 }, + { 0x413E, 40832 }, + { 0x4140, 40835 }, + { 0x4141, 40838 }, + { 0x413D, 40841 }, + { 0x4146, 40844 }, + { 0x4144, 40847 }, + { 0x4142, 40850 }, + { 0x4143, 40853 }, + { 0x9330, 40856 }, + { 0x9080, 40858 }, + { 0x1D36, 40860 }, + { 0x8F7C, 40862 }, + { 0x146E, 40864 }, + { 0x146F, 40867 }, + { 0x144E, 40870 }, + { 0x1452, 40873 }, + { 0x1443, 40876 }, + { 0x1436, 40879 }, + { 0x1472, 40882 }, + { 0x142F, 40885 }, + { 0x146A, 40888 }, + { 0x1422, 40891 }, + { 0x1426, 40894 }, + { 0x146B, 40897 }, + { 0x1425, 40900 }, + { 0x144F, 40903 }, + { 0x142B, 40906 }, + { 0x1430, 40910 }, + { 0x1431, 40913 }, + { 0x1474, 40916 }, + { 0x142A, 40919 }, + { 0x1473, 40923 }, + { 0x1424, 40926 }, + { 0x1434, 40929 }, + { 0x1461, 40932 }, + { 0x1437, 40935 }, + { 0x1428, 40938 }, + { 0x1439, 40941 }, + { 0x1445, 40944 }, + { 0x145E, 40947 }, + { 0x1462, 40950 }, + { 0x142C, 40953 }, + { 0x1464, 40956 }, + { 0x1421, 40959 }, + { 0x1438, 40965 }, + { 0x1442, 40970 }, + { 0x1448, 40976 }, + { 0x1435, 40980 }, + { 0x1466, 40984 }, + { 0x1423, 40987 }, + { 0x144A, 40992 }, + { 0x1429, 40996 }, + { 0x1465, 41000 }, + { 0x145F, 41003 }, + { 0x1457, 41008 }, + { 0x143C, 41013 }, + { 0x1444, 41017 }, + { 0x1433, 41021 }, + { 0x1432, 41024 }, + { 0x144C, 41030 }, + { 0x1450, 41035 }, + { 0x143A, 41041 }, + { 0x1478, 41046 }, + { 0x1477, 41051 }, + { 0x1476, 41056 }, + { 0x1475, 41061 }, + { 0x1479, 41066 }, + { 0x143B, 41071 }, + { 0x145D, 41075 }, + { 0x145B, 41078 }, + { 0x1458, 41084 }, + { 0x143F, 41089 }, + { 0x1456, 41095 }, + { 0x1449, 41098 }, + { 0x144B, 41103 }, + { 0x1463, 41107 }, + { 0x1460, 41110 }, + { 0x1453, 41115 }, + { 0x145C, 41121 }, + { 0x1441, 41124 }, + { 0x1455, 41127 }, + { 0x1427, 41130 }, + { 0x1469, 41135 }, + { 0x1447, 41138 }, + { 0x1468, 41142 }, + { 0x1446, 41145 }, + { 0x1467, 41149 }, + { 0x142E, 41152 }, + { 0x144D, 41156 }, + { 0x1451, 41160 }, + { 0x142D, 41164 }, + { 0x145A, 41168 }, + { 0x1440, 41172 }, + { 0x1459, 41176 }, + { 0x143E, 41180 }, + { 0x143D, 41184 }, + { 0x1454, 41188 }, + { 0x146C, 41192 }, + { 0x1471, 41195 }, + { 0x146D, 41198 }, + { 0x1470, 41201 }, + { 0x1D21, 41204 }, + { 0x9511, 41206 }, + { 0x281B, 41207 }, + { 0x94B6, 41208 }, + { 0x8FC4, 41209 }, + { 0x270C, 41210 }, + { 0x2714, 41213 }, + { 0x2715, 41218 }, + { 0x278B, 41225 }, + { 0x270B, 41233 }, + { 0x2713, 41236 }, + { 0x270A, 41241 }, + { 0x277A, 41244 }, + { 0x2570, 41248 }, + { 0x277B, 41254 }, + { 0x9465, 41258 }, + { 0x2323, 41259 }, + { 0x9033, 41260 }, + { 0x224C, 41261 }, + { 0x94D6, 41264 }, + { 0x8F08, 41265 }, + { 0x1F8A, 41268 }, + { 0x94D3, 41269 }, + { 0x3E5A, 41270 }, + { 0x484D, 41273 }, + { 0x268D, 41280 }, + { 0x90EC, 41284 }, + { 0x3E55, 41287 }, + { 0x3E5D, 41290 }, + { 0x3E5F, 41294 }, + { 0x3E5B, 41299 }, + { 0x3E64, 41302 }, + { 0x3E57, 41305 }, + { 0x3E53, 41307 }, + { 0x3E5E, 41309 }, + { 0x3E60, 41313 }, + { 0x3E5C, 41318 }, + { 0x1DCB, 41321 }, + { 0x1DD8, 41325 }, + { 0x1DDA, 41330 }, + { 0x1DD0, 41335 }, + { 0x1DD4, 41339 }, + { 0x1DCC, 41343 }, + { 0x1DCF, 41347 }, + { 0x1DD9, 41351 }, + { 0x1DCE, 41356 }, + { 0x1DD3, 41360 }, + { 0x1DD2, 41364 }, + { 0x1DD7, 41368 }, + { 0x1DD1, 41372 }, + { 0x1DCD, 41376 }, + { 0x1DD5, 41380 }, + { 0x1DD6, 41384 }, + { 0x029B, 41388 }, + { 0x3E6A, 41390 }, + { 0x3E68, 41393 }, + { 0x3E61, 41396 }, + { 0x90EB, 41399 }, + { 0x1E61, 41402 }, + { 0x1F4E, 41405 }, + { 0x1F4B, 41410 }, + { 0x3E6B, 41421 }, + { 0x3E69, 41424 }, + { 0x9298, 41427 }, + { 0x3E63, 41429 }, + { 0x1E64, 41431 }, + { 0x1F55, 41435 }, + { 0x1F53, 41439 }, + { 0x3E58, 41449 }, + { 0x3E62, 41452 }, + { 0x3E66, 41454 }, + { 0x3E56, 41457 }, + { 0x3E6C, 41459 }, + { 0x3E59, 41462 }, + { 0x3E54, 41465 }, + { 0x7E3B, 41468 }, + { 0x3E67, 41471 }, + { 0x3E65, 41474 }, + { 0x265F, 41476 }, + { 0x1F7A, 41478 }, + { 0x8FBF, 41479 }, + { 0x8FC0, 41480 }, + { 0x9514, 41481 }, + { 0x921D, 41482 }, + { 0x921E, 41486 }, + { 0x1D72, 41493 }, + { 0x1DEF, 41496 }, + { 0x1E49, 41499 }, + { 0x2555, 41504 }, + { 0x942A, 41511 }, + { 0x2551, 41516 }, + { 0x2559, 41521 }, + { 0x2736, 41528 }, + { 0x272E, 41532 }, + { 0x1E2F, 41536 }, + { 0x9216, 41540 }, + { 0x9206, 41544 }, + { 0x920E, 41548 }, + { 0x93D6, 41553 }, + { 0x2794, 41557 }, + { 0x27A2, 41561 }, + { 0x1DF0, 41567 }, + { 0x2556, 41570 }, + { 0x942B, 41577 }, + { 0x2552, 41582 }, + { 0x2737, 41587 }, + { 0x272F, 41591 }, + { 0x1E30, 41595 }, + { 0x9214, 41599 }, + { 0x9204, 41603 }, + { 0x920C, 41607 }, + { 0x93D7, 41612 }, + { 0x2795, 41616 }, + { 0x27A3, 41620 }, + { 0x0000, 41626 }, + { 0x9523, 41627 }, + { 0x9472, 41630 }, + { 0x23D3, 41631 }, + { 0x94BF, 41635 }, + { 0x22C6, 41636 }, + { 0x22C1, 41639 }, + { 0x9235, 41642 }, + { 0x96C6, 41644 }, + { 0x96C7, 41646 }, + { 0x96CA, 41651 }, + { 0x96C8, 41655 }, + { 0x96C9, 41659 }, + { 0x9193, 41663 }, + { 0x9286, 41665 }, + { 0x8F16, 41666 }, + { 0x9228, 41667 }, + { 0x1CD3, 41670 }, + { 0x94C4, 41672 }, + { 0x8F86, 41673 }, + { 0x4F78, 41678 }, + { 0x4F77, 41681 }, + { 0x4F6D, 41684 }, + { 0x4F6C, 41687 }, + { 0x4F7C, 41690 }, + { 0x4F81, 41693 }, + { 0x4F7D, 41696 }, + { 0x4F80, 41699 }, + { 0x4F7F, 41702 }, + { 0x4F84, 41705 }, + { 0x4F7B, 41708 }, + { 0x4F83, 41711 }, + { 0x4F82, 41714 }, + { 0x4F7E, 41717 }, + { 0x4F73, 41720 }, + { 0x4F6F, 41724 }, + { 0x4F75, 41728 }, + { 0x4F71, 41732 }, + { 0x4F6E, 41736 }, + { 0x4F74, 41740 }, + { 0x4F76, 41744 }, + { 0x4F70, 41748 }, + { 0x4F72, 41752 }, + { 0x4F41, 41756 }, + { 0x4F47, 41759 }, + { 0x4F43, 41762 }, + { 0x4F49, 41765 }, + { 0x4F45, 41768 }, + { 0x4F42, 41771 }, + { 0x4F48, 41774 }, + { 0x4F4A, 41777 }, + { 0x4F61, 41780 }, + { 0x4F50, 41783 }, + { 0x4F5C, 41786 }, + { 0x4F4D, 41789 }, + { 0x4F6A, 41792 }, + { 0x4F44, 41795 }, + { 0x4F52, 41798 }, + { 0x4F4B, 41801 }, + { 0x4F66, 41804 }, + { 0x4F63, 41807 }, + { 0x4F5E, 41810 }, + { 0x4F5F, 41813 }, + { 0x4F65, 41816 }, + { 0x4F69, 41819 }, + { 0x4F5A, 41822 }, + { 0x4F46, 41825 }, + { 0x4F67, 41828 }, + { 0x4F64, 41831 }, + { 0x4F62, 41834 }, + { 0x4F51, 41837 }, + { 0x4F57, 41840 }, + { 0x4F5D, 41843 }, + { 0x4F4E, 41846 }, + { 0x4F53, 41849 }, + { 0x4F4C, 41852 }, + { 0x4F4F, 41855 }, + { 0x4F59, 41858 }, + { 0x4F54, 41861 }, + { 0x4F60, 41864 }, + { 0x4F6B, 41867 }, + { 0x4F68, 41870 }, + { 0x4F5B, 41873 }, + { 0x4F55, 41876 }, + { 0x4F58, 41879 }, + { 0x4F56, 41882 }, + { 0x4F79, 41885 }, + { 0x4F7A, 41889 }, + { 0x8269, 41892 }, + { 0x826A, 41895 }, + { 0x0AA0, 41898 }, + { 0x0A8D, 41902 }, + { 0x53DB, 41906 }, + { 0x0A8C, 41910 }, + { 0x53D8, 41912 }, + { 0x0A9B, 41916 }, + { 0x53D2, 41919 }, + { 0x53D1, 41923 }, + { 0x53D3, 41927 }, + { 0x53D4, 41930 }, + { 0x53C2, 41934 }, + { 0x53CC, 41937 }, + { 0x53D0, 41940 }, + { 0x53CA, 41943 }, + { 0x53CF, 41946 }, + { 0x53CB, 41949 }, + { 0x53C3, 41952 }, + { 0x53C7, 41955 }, + { 0x53CE, 41958 }, + { 0x0A8B, 41961 }, + { 0x53C5, 41964 }, + { 0x0A5C, 41967 }, + { 0x0A5B, 41970 }, + { 0x53C8, 41973 }, + { 0x53CD, 41976 }, + { 0x53C4, 41979 }, + { 0x53C9, 41982 }, + { 0x53DD, 41985 }, + { 0x53DE, 41988 }, + { 0x53C6, 41991 }, + { 0x0A9D, 41994 }, + { 0x0A9E, 41997 }, + { 0x0A8F, 42000 }, + { 0x0A94, 42003 }, + { 0x0A90, 42006 }, + { 0x0A93, 42009 }, + { 0x0A92, 42012 }, + { 0x0A97, 42015 }, + { 0x0A8E, 42018 }, + { 0x0A96, 42021 }, + { 0x0A95, 42024 }, + { 0x0A91, 42027 }, + { 0x0A9C, 42030 }, + { 0x0AA1, 42033 }, + { 0x53D9, 42036 }, + { 0x53DA, 42039 }, + { 0x0A85, 42042 }, + { 0x0A81, 42046 }, + { 0x0A88, 42050 }, + { 0x0A83, 42054 }, + { 0x0A80, 42058 }, + { 0x0A87, 42062 }, + { 0x0A8A, 42066 }, + { 0x0A86, 42070 }, + { 0x0A82, 42074 }, + { 0x0A89, 42078 }, + { 0x0A84, 42082 }, + { 0x0A9F, 42086 }, + { 0x0A5D, 42089 }, + { 0x0A63, 42092 }, + { 0x0A5F, 42095 }, + { 0x0A66, 42098 }, + { 0x0A61, 42101 }, + { 0x0A5E, 42104 }, + { 0x0A65, 42107 }, + { 0x0A68, 42110 }, + { 0x0A6B, 42113 }, + { 0x0A64, 42116 }, + { 0x0A7F, 42119 }, + { 0x0A60, 42122 }, + { 0x0A6C, 42125 }, + { 0x0A69, 42128 }, + { 0x0A78, 42131 }, + { 0x0A74, 42134 }, + { 0x0A71, 42137 }, + { 0x0A67, 42140 }, + { 0x0A73, 42143 }, + { 0x0A76, 42146 }, + { 0x0A7E, 42149 }, + { 0x0A70, 42152 }, + { 0x0A62, 42155 }, + { 0x0A7B, 42158 }, + { 0x0A75, 42161 }, + { 0x0A79, 42164 }, + { 0x0A6A, 42167 }, + { 0x0A6F, 42170 }, + { 0x0A6D, 42173 }, + { 0x0A77, 42176 }, + { 0x0A7C, 42179 }, + { 0x0A7D, 42182 }, + { 0x0A6E, 42185 }, + { 0x0A7A, 42188 }, + { 0x0A72, 42191 }, + { 0x0A99, 42194 }, + { 0x0A9A, 42198 }, + { 0x0A98, 42202 }, + { 0x0AA2, 42205 }, + { 0x53D7, 42208 }, + { 0x53BC, 42211 }, + { 0x53B8, 42215 }, + { 0x53B9, 42219 }, + { 0x53BE, 42223 }, + { 0x53BF, 42227 }, + { 0x53BD, 42231 }, + { 0x53B1, 42235 }, + { 0x53AF, 42239 }, + { 0x53B5, 42243 }, + { 0x53B6, 42247 }, + { 0x53B7, 42251 }, + { 0x53B0, 42255 }, + { 0x53B2, 42259 }, + { 0x53AE, 42263 }, + { 0x53AD, 42267 }, + { 0x53C0, 42271 }, + { 0x53B3, 42275 }, + { 0x53BB, 42279 }, + { 0x53BA, 42283 }, + { 0x53B4, 42287 }, + { 0x53C1, 42291 }, + { 0x53DC, 42296 }, + { 0x53DF, 42300 }, + { 0x53D5, 42305 }, + { 0x53D6, 42309 }, + { 0x9526, 42313 }, + { 0x1D31, 42315 }, + { 0x1E5B, 42317 }, + { 0x1E5A, 42321 }, + { 0x9477, 42323 }, + { 0x9594, 42326 }, + { 0x1CD6, 42328 }, + { 0x9199, 42331 }, + { 0x9197, 42334 }, + { 0x9198, 42337 }, + { 0x919A, 42340 }, + { 0x22CB, 42343 }, + { 0x22CA, 42347 }, + { 0x9164, 42351 }, + { 0x919E, 42354 }, + { 0x9367, 42357 }, + { 0x275D, 42361 }, + { 0x915A, 42364 }, + { 0x1E4D, 42367 }, + { 0x26A2, 42370 }, + { 0x23EC, 42374 }, + { 0x8FB8, 42377 }, + { 0x8FE2, 42378 }, + { 0x2371, 42380 }, + { 0x005E, 42383 }, + { 0x2A14, 42384 }, + { 0x2A15, 42388 }, + { 0x2A11, 42392 }, + { 0x1E93, 42396 }, + { 0x2696, 42398 }, + { 0x2697, 42403 }, + { 0x2775, 42408 }, + { 0x259E, 42413 }, + { 0x2049, 42418 }, + { 0x2600, 42420 }, + { 0x2601, 42425 }, + { 0x91DE, 42430 }, + { 0x91AF, 42432 }, + { 0x94E5, 42434 }, + { 0x1F87, 42435 }, + { 0x1D7D, 42437 }, + { 0x9239, 42440 }, + { 0x94FA, 42441 }, + { 0x8EEA, 42442 }, + { 0x1E81, 42443 }, + { 0x266D, 42444 }, + { 0x2671, 42448 }, + { 0x266E, 42452 }, + { 0x2674, 42455 }, + { 0x2672, 42460 }, + { 0x2676, 42463 }, + { 0x966C, 42469 }, + { 0x9682, 42478 }, + { 0x969B, 42484 }, + { 0x966A, 42490 }, + { 0x21C0, 42499 }, + { 0x9684, 42503 }, + { 0x9686, 42507 }, + { 0x7EE8, 42511 }, + { 0x21AC, 42517 }, + { 0x9693, 42520 }, + { 0x7E44, 42529 }, + { 0x7EED, 42534 }, + { 0x220C, 42540 }, + { 0x9690, 42543 }, + { 0x2206, 42547 }, + { 0x9694, 42552 }, + { 0x7E55, 42561 }, + { 0x2007, 42569 }, + { 0x9699, 42577 }, + { 0x7ED1, 42583 }, + { 0x9660, 42588 }, + { 0x965D, 42598 }, + { 0x9662, 42607 }, + { 0x965F, 42617 }, + { 0x9663, 42627 }, + { 0x9661, 42636 }, + { 0x965C, 42646 }, + { 0x965B, 42656 }, + { 0x965E, 42666 }, + { 0x965A, 42677 }, + { 0x9659, 42687 }, + { 0x2400, 42697 }, + { 0x7C7C, 42702 }, + { 0x7C77, 42706 }, + { 0x7CED, 42710 }, + { 0x7CEF, 42717 }, + { 0x7D01, 42724 }, + { 0x7D15, 42729 }, + { 0x7D09, 42734 }, + { 0x7D05, 42739 }, + { 0x7D0D, 42744 }, + { 0x7D11, 42749 }, + { 0x2208, 42754 }, + { 0x7D19, 42759 }, + { 0x7CF9, 42764 }, + { 0x7CFD, 42768 }, + { 0x2224, 42772 }, + { 0x969D, 42775 }, + { 0x232D, 42780 }, + { 0x2008, 42783 }, + { 0x969A, 42791 }, + { 0x7ED4, 42797 }, + { 0x9655, 42802 }, + { 0x9654, 42812 }, + { 0x9658, 42822 }, + { 0x9667, 42831 }, + { 0x9665, 42841 }, + { 0x9668, 42851 }, + { 0x9666, 42860 }, + { 0x9664, 42870 }, + { 0x9657, 42880 }, + { 0x9656, 42890 }, + { 0x9669, 42900 }, + { 0x233C, 42911 }, + { 0x7C7D, 42914 }, + { 0x7C7A, 42918 }, + { 0x7CEE, 42922 }, + { 0x7CF0, 42929 }, + { 0x7D02, 42936 }, + { 0x7D16, 42941 }, + { 0x7D0A, 42946 }, + { 0x7D06, 42951 }, + { 0x7D0E, 42956 }, + { 0x7D12, 42961 }, + { 0x2209, 42966 }, + { 0x7D1A, 42971 }, + { 0x7CFA, 42976 }, + { 0x7CFE, 42980 }, + { 0x90F2, 42984 }, + { 0x237E, 42989 }, + { 0x2225, 42994 }, + { 0x969E, 42997 }, + { 0x237C, 43002 }, + { 0x9688, 43007 }, + { 0x9685, 43011 }, + { 0x7EE7, 43015 }, + { 0x9687, 43022 }, + { 0x7EEE, 43026 }, + { 0x96E5, 43033 }, + { 0x7ED2, 43038 }, + { 0x7C78, 43044 }, + { 0x7ED3, 43049 }, + { 0x7C79, 43055 }, + { 0x7ED5, 43060 }, + { 0x7C7B, 43066 }, + { 0x7ED8, 43071 }, + { 0x7C7E, 43077 }, + { 0x7ED6, 43082 }, + { 0x7ED7, 43089 }, + { 0x966F, 43096 }, + { 0x198B, 43101 }, + { 0x1996, 43105 }, + { 0x198C, 43110 }, + { 0x1989, 43115 }, + { 0x198F, 43118 }, + { 0x197F, 43122 }, + { 0x1983, 43126 }, + { 0x197E, 43132 }, + { 0x1981, 43136 }, + { 0x1984, 43140 }, + { 0x198D, 43146 }, + { 0x1987, 43151 }, + { 0x1988, 43155 }, + { 0x1985, 43161 }, + { 0x1986, 43165 }, + { 0x1993, 43169 }, + { 0x198A, 43172 }, + { 0x1980, 43177 }, + { 0x1982, 43182 }, + { 0x196F, 43187 }, + { 0x1970, 43190 }, + { 0x1991, 43195 }, + { 0x1992, 43198 }, + { 0x198E, 43201 }, + { 0x1979, 43204 }, + { 0x197A, 43208 }, + { 0x1994, 43213 }, + { 0x196D, 43217 }, + { 0x197B, 43220 }, + { 0x1990, 43225 }, + { 0x1974, 43229 }, + { 0x1995, 43233 }, + { 0x1976, 43238 }, + { 0x1977, 43242 }, + { 0x1978, 43246 }, + { 0x196E, 43250 }, + { 0x196C, 43253 }, + { 0x197C, 43256 }, + { 0x1973, 43262 }, + { 0x1975, 43268 }, + { 0x1971, 43275 }, + { 0x1972, 43281 }, + { 0x197D, 43286 }, + { 0x22E2, 43291 }, + { 0x8F61, 43292 }, + { 0x90AC, 43294 }, + { 0x2279, 43296 }, + { 0x1F71, 43297 }, + { 0x946B, 43298 }, + { 0x8EBD, 43300 }, + { 0x9271, 43302 }, + { 0x8FB6, 43304 }, + { 0x91F3, 43306 }, + { 0x91DC, 43309 }, + { 0x8FBE, 43311 }, + { 0x928D, 43312 }, + { 0x2264, 43313 }, + { 0x2249, 43316 }, + { 0x8FF9, 43320 }, + { 0x233D, 43325 }, + { 0x8ED6, 43327 }, + { 0x2268, 43329 }, + { 0x8ED7, 43333 }, + { 0x8ED8, 43338 }, + { 0x8ED9, 43342 }, + { 0x2293, 43348 }, + { 0x914A, 43351 }, + { 0x224B, 43357 }, + { 0x8FFA, 43361 }, + { 0x22BC, 43366 }, + { 0x232B, 43368 }, + { 0x27F7, 43375 }, + { 0x2353, 43379 }, + { 0x915E, 43383 }, + { 0x2305, 43388 }, + { 0x2248, 43392 }, + { 0x8FFB, 43396 }, + { 0x2806, 43401 }, + { 0x2232, 43404 }, + { 0x274A, 43406 }, + { 0x941E, 43410 }, + { 0x941F, 43415 }, + { 0x2280, 43421 }, + { 0x9561, 43424 }, + { 0x9537, 43432 }, + { 0x2285, 43438 }, + { 0x9566, 43441 }, + { 0x953C, 43449 }, + { 0x2282, 43455 }, + { 0x9563, 43458 }, + { 0x9539, 43466 }, + { 0x2281, 43472 }, + { 0x9562, 43475 }, + { 0x9538, 43483 }, + { 0x2283, 43489 }, + { 0x9564, 43492 }, + { 0x953A, 43500 }, + { 0x2284, 43506 }, + { 0x9549, 43509 }, + { 0x9565, 43517 }, + { 0x955E, 43525 }, + { 0x9573, 43533 }, + { 0x953B, 43541 }, + { 0x9534, 43547 }, + { 0x954C, 43553 }, + { 0x9551, 43557 }, + { 0x954E, 43561 }, + { 0x954D, 43565 }, + { 0x954F, 43569 }, + { 0x9550, 43573 }, + { 0x9576, 43577 }, + { 0x9579, 43580 }, + { 0x957D, 43586 }, + { 0x957C, 43589 }, + { 0x957E, 43592 }, + { 0x96CC, 43595 }, + { 0x943B, 43598 }, + { 0x228D, 43600 }, + { 0x2331, 43603 }, + { 0x96C1, 43607 }, + { 0x2748, 43613 }, + { 0x90F9, 43616 }, + { 0x7CCD, 43619 }, + { 0x7CCE, 43623 }, + { 0x224A, 43627 }, + { 0x8FFC, 43631 }, + { 0x2242, 43636 }, + { 0x277E, 43639 }, + { 0x21D7, 43642 }, + { 0x2757, 43645 }, + { 0x2290, 43648 }, + { 0x2212, 43651 }, + { 0x21F7, 43653 }, + { 0x22B2, 43655 }, + { 0x22B3, 43660 }, + { 0x2618, 43665 }, + { 0x2221, 43670 }, + { 0x2222, 43676 }, + { 0x2220, 43682 }, + { 0x2223, 43688 }, + { 0x932F, 43694 }, + { 0x9061, 43700 }, + { 0x277C, 43702 }, + { 0x2229, 43705 }, + { 0x2227, 43709 }, + { 0x2752, 43712 }, + { 0x2754, 43715 }, + { 0x3E49, 43718 }, + { 0x21CD, 43721 }, + { 0x221D, 43723 }, + { 0x221E, 43729 }, + { 0x221C, 43735 }, + { 0x221F, 43741 }, + { 0x1FDC, 43747 }, + { 0x21CE, 43753 }, + { 0x2217, 43758 }, + { 0x2410, 43764 }, + { 0x2411, 43769 }, + { 0x90E6, 43774 }, + { 0x9339, 43777 }, + { 0x21CF, 43784 }, + { 0x933A, 43790 }, + { 0x21F3, 43796 }, + { 0x22F7, 43798 }, + { 0x228E, 43802 }, + { 0x23FC, 43805 }, + { 0x933F, 43810 }, + { 0x21F4, 43817 }, + { 0x9340, 43823 }, + { 0x274D, 43829 }, + { 0x9345, 43831 }, + { 0x8FA4, 43837 }, + { 0x2266, 43839 }, + { 0x2303, 43842 }, + { 0x22EC, 43847 }, + { 0x22ED, 43850 }, + { 0x236C, 43853 }, + { 0x2265, 43855 }, + { 0x274C, 43858 }, + { 0x2380, 43860 }, + { 0x2330, 43864 }, + { 0x23ED, 43866 }, + { 0x272A, 43872 }, + { 0x275B, 43875 }, + { 0x21DB, 43878 }, + { 0x7E47, 43881 }, + { 0x2602, 43887 }, + { 0x21D9, 43889 }, + { 0x223B, 43891 }, + { 0x9131, 43893 }, + { 0x2039, 43896 }, + { 0x2759, 43898 }, + { 0x2381, 43901 }, + { 0x21E1, 43905 }, + { 0x96CB, 43909 }, + { 0x21DF, 43912 }, + { 0x2218, 43915 }, + { 0x240D, 43920 }, + { 0x240E, 43923 }, + { 0x240F, 43929 }, + { 0x21EB, 43935 }, + { 0x21E9, 43939 }, + { 0x21EF, 43942 }, + { 0x21F1, 43946 }, + { 0x21ED, 43949 }, + { 0x21DD, 43952 }, + { 0x21E5, 43954 }, + { 0x21E7, 43958 }, + { 0x2780, 43961 }, + { 0x21E3, 43964 }, + { 0x9161, 43967 }, + { 0x901C, 43969 }, + { 0x9022, 43970 }, + { 0x91AD, 43974 }, + { 0x959B, 43976 }, + { 0x959D, 43977 }, + { 0x94C1, 43978 }, + { 0x951C, 43980 }, + { 0x40E8, 43981 }, + { 0x40B4, 43986 }, + { 0x40B3, 43990 }, + { 0x40B5, 43994 }, + { 0x40E9, 43997 }, + { 0x40B6, 44002 }, + { 0x40C8, 44005 }, + { 0x40D1, 44009 }, + { 0x40BB, 44013 }, + { 0x40CD, 44016 }, + { 0x40D6, 44020 }, + { 0x40BF, 44024 }, + { 0x40DA, 44027 }, + { 0x40B7, 44031 }, + { 0x40C9, 44034 }, + { 0x40D2, 44038 }, + { 0x40BA, 44042 }, + { 0x40CC, 44045 }, + { 0x40D5, 44049 }, + { 0x40B9, 44053 }, + { 0x40CB, 44056 }, + { 0x40D4, 44060 }, + { 0x40BE, 44064 }, + { 0x40D0, 44067 }, + { 0x40D9, 44071 }, + { 0x40BD, 44075 }, + { 0x40CF, 44078 }, + { 0x40D8, 44082 }, + { 0x40C3, 44086 }, + { 0x40DE, 44089 }, + { 0x40C2, 44093 }, + { 0x40DD, 44096 }, + { 0x40BC, 44100 }, + { 0x40CE, 44103 }, + { 0x40D7, 44107 }, + { 0x40C4, 44111 }, + { 0x40DF, 44114 }, + { 0x40B8, 44118 }, + { 0x40CA, 44121 }, + { 0x40D3, 44125 }, + { 0x40C6, 44129 }, + { 0x40E1, 44132 }, + { 0x40C7, 44136 }, + { 0x40E2, 44139 }, + { 0x40C1, 44143 }, + { 0x40DC, 44146 }, + { 0x40C0, 44150 }, + { 0x40DB, 44153 }, + { 0x40C5, 44157 }, + { 0x40E0, 44160 }, + { 0x40E3, 44164 }, + { 0x40E4, 44168 }, + { 0x40E6, 44172 }, + { 0x40E7, 44176 }, + { 0x40E5, 44180 }, + { 0x40EB, 44184 }, + { 0x40EA, 44188 }, + { 0x9254, 44192 }, + { 0x1EA1, 44194 }, + { 0x1E9F, 44199 }, + { 0x269B, 44202 }, + { 0x22BF, 44208 }, + { 0x0676, 44209 }, + { 0x05B6, 44213 }, + { 0x05A1, 44218 }, + { 0x05A6, 44220 }, + { 0x0606, 44223 }, + { 0x066D, 44227 }, + { 0x0814, 44230 }, + { 0x086C, 44235 }, + { 0x086E, 44239 }, + { 0x05F1, 44243 }, + { 0x0874, 44247 }, + { 0x0866, 44252 }, + { 0x0865, 44255 }, + { 0x0867, 44258 }, + { 0x05AC, 44261 }, + { 0x05A8, 44266 }, + { 0x059C, 44269 }, + { 0x059A, 44272 }, + { 0x05AA, 44275 }, + { 0x059D, 44279 }, + { 0x0696, 44282 }, + { 0x0697, 44286 }, + { 0x05AD, 44291 }, + { 0x05AB, 44294 }, + { 0x05A9, 44298 }, + { 0x3E70, 44303 }, + { 0x085F, 44306 }, + { 0x0862, 44311 }, + { 0x0860, 44316 }, + { 0x0863, 44321 }, + { 0x0861, 44326 }, + { 0x0864, 44330 }, + { 0x05F8, 44334 }, + { 0x05A5, 44338 }, + { 0x085A, 44340 }, + { 0x0859, 44343 }, + { 0x085B, 44346 }, + { 0x085D, 44349 }, + { 0x085C, 44352 }, + { 0x085E, 44355 }, + { 0x05E8, 44358 }, + { 0x0873, 44360 }, + { 0x3E75, 44364 }, + { 0x3E74, 44368 }, + { 0x0683, 44372 }, + { 0x0684, 44377 }, + { 0x05E7, 44382 }, + { 0x086A, 44384 }, + { 0x05F7, 44389 }, + { 0x0869, 44394 }, + { 0x3E73, 44398 }, + { 0x3E72, 44402 }, + { 0x05ED, 44406 }, + { 0x05EE, 44409 }, + { 0x05E9, 44412 }, + { 0x086B, 44414 }, + { 0x3E77, 44419 }, + { 0x3E76, 44423 }, + { 0x0843, 44427 }, + { 0x0844, 44432 }, + { 0x0847, 44437 }, + { 0x0846, 44444 }, + { 0x0811, 44448 }, + { 0x080C, 44451 }, + { 0x0682, 44453 }, + { 0x080A, 44457 }, + { 0x086D, 44461 }, + { 0x0872, 44465 }, + { 0x086F, 44471 }, + { 0x0848, 44475 }, + { 0x0686, 44479 }, + { 0x084E, 44483 }, + { 0x067C, 44489 }, + { 0x4A27, 44493 }, + { 0x4A28, 44498 }, + { 0x4A26, 44503 }, + { 0x080F, 44508 }, + { 0x080E, 44513 }, + { 0x0810, 44518 }, + { 0x067E, 44523 }, + { 0x067F, 44526 }, + { 0x084B, 44529 }, + { 0x0672, 44533 }, + { 0x084C, 44538 }, + { 0x084A, 44542 }, + { 0x05AE, 44546 }, + { 0x0868, 44550 }, + { 0x0680, 44554 }, + { 0x0840, 44558 }, + { 0x0842, 44567 }, + { 0x0673, 44571 }, + { 0x0671, 44575 }, + { 0x067B, 44581 }, + { 0x0681, 44587 }, + { 0x084D, 44591 }, + { 0x0675, 44597 }, + { 0x0856, 44601 }, + { 0x0853, 44606 }, + { 0x0841, 44611 }, + { 0x0852, 44616 }, + { 0x0854, 44621 }, + { 0x080D, 44626 }, + { 0x0849, 44631 }, + { 0x0851, 44636 }, + { 0x0850, 44641 }, + { 0x084F, 44646 }, + { 0x05B0, 44651 }, + { 0x083F, 44655 }, + { 0x067D, 44660 }, + { 0x0674, 44664 }, + { 0x067A, 44669 }, + { 0x0678, 44676 }, + { 0x0679, 44681 }, + { 0x0855, 44687 }, + { 0x0670, 44692 }, + { 0x066F, 44702 }, + { 0x05AF, 44712 }, + { 0x05AF, 44721 }, + { 0x05B2, 44729 }, + { 0x083E, 44732 }, + { 0x05B1, 44736 }, + { 0x05B3, 44739 }, + { 0x0677, 44742 }, + { 0x05EB, 44748 }, + { 0x0845, 44750 }, + { 0x3E7B, 44753 }, + { 0x3E7A, 44757 }, + { 0x05F5, 44761 }, + { 0x05F3, 44766 }, + { 0x05F4, 44772 }, + { 0x0870, 44779 }, + { 0x0871, 44784 }, + { 0x0669, 44791 }, + { 0x3C27, 44794 }, + { 0x3C29, 44799 }, + { 0x3C28, 44804 }, + { 0x3C26, 44809 }, + { 0x0660, 44814 }, + { 0x0610, 44817 }, + { 0x3C1F, 44823 }, + { 0x3C1A, 44831 }, + { 0x3C19, 44836 }, + { 0x066E, 44841 }, + { 0x0646, 44844 }, + { 0x3C16, 44847 }, + { 0x3C18, 44852 }, + { 0x3C17, 44857 }, + { 0x3C15, 44862 }, + { 0x065F, 44867 }, + { 0x3C1C, 44870 }, + { 0x3C1B, 44875 }, + { 0x0664, 44880 }, + { 0x3C21, 44883 }, + { 0x3C20, 44888 }, + { 0x0661, 44893 }, + { 0x3C1E, 44896 }, + { 0x3C1D, 44901 }, + { 0x05D2, 44906 }, + { 0x06F3, 44909 }, + { 0x06F5, 44916 }, + { 0x0639, 44924 }, + { 0x0828, 44931 }, + { 0x06F4, 44938 }, + { 0x3EC6, 44947 }, + { 0x3EC8, 44952 }, + { 0x3EC7, 44957 }, + { 0x3EC5, 44962 }, + { 0x05C1, 44967 }, + { 0x06E7, 44970 }, + { 0x06EA, 44980 }, + { 0x0816, 44990 }, + { 0x06EC, 44996 }, + { 0x0815, 45002 }, + { 0x082B, 45009 }, + { 0x06E8, 45016 }, + { 0x06E9, 45025 }, + { 0x06E6, 45038 }, + { 0x06EB, 45046 }, + { 0x3E8C, 45054 }, + { 0x3E8E, 45059 }, + { 0x3E8D, 45064 }, + { 0x3E8B, 45069 }, + { 0x05CF, 45074 }, + { 0x0694, 45077 }, + { 0x3EBA, 45083 }, + { 0x3EBC, 45088 }, + { 0x3EBB, 45093 }, + { 0x3EB9, 45098 }, + { 0x05C8, 45103 }, + { 0x0623, 45106 }, + { 0x0624, 45112 }, + { 0x4A22, 45121 }, + { 0x06EF, 45129 }, + { 0x0629, 45140 }, + { 0x0622, 45147 }, + { 0x0628, 45152 }, + { 0x0823, 45160 }, + { 0x0687, 45167 }, + { 0x06F0, 45173 }, + { 0x3EA6, 45181 }, + { 0x3EA5, 45186 }, + { 0x0627, 45191 }, + { 0x3BD9, 45194 }, + { 0x3BD8, 45199 }, + { 0x05DA, 45204 }, + { 0x063C, 45207 }, + { 0x0819, 45213 }, + { 0x063B, 45223 }, + { 0x06F6, 45230 }, + { 0x063E, 45237 }, + { 0x06F7, 45244 }, + { 0x3ECE, 45253 }, + { 0x3ED0, 45258 }, + { 0x3ECF, 45263 }, + { 0x3ECD, 45268 }, + { 0x0648, 45273 }, + { 0x064B, 45276 }, + { 0x0649, 45283 }, + { 0x064D, 45288 }, + { 0x0825, 45295 }, + { 0x3BE5, 45301 }, + { 0x3BE7, 45306 }, + { 0x3BE6, 45311 }, + { 0x3BE4, 45316 }, + { 0x05C6, 45321 }, + { 0x06ED, 45324 }, + { 0x061B, 45331 }, + { 0x061A, 45339 }, + { 0x0705, 45345 }, + { 0x0708, 45356 }, + { 0x0704, 45365 }, + { 0x061E, 45374 }, + { 0x06EE, 45381 }, + { 0x0712, 45390 }, + { 0x0805, 45399 }, + { 0x3E9E, 45407 }, + { 0x3EA0, 45412 }, + { 0x3E9F, 45417 }, + { 0x3E9D, 45422 }, + { 0x05E0, 45427 }, + { 0x065A, 45430 }, + { 0x065B, 45434 }, + { 0x3BF9, 45441 }, + { 0x3BFB, 45447 }, + { 0x3BFA, 45453 }, + { 0x3BF8, 45459 }, + { 0x0659, 45465 }, + { 0x3BF7, 45471 }, + { 0x3BF6, 45479 }, + { 0x0698, 45487 }, + { 0x3EE6, 45493 }, + { 0x3EE8, 45498 }, + { 0x3EE7, 45503 }, + { 0x3EE5, 45508 }, + { 0x0657, 45513 }, + { 0x3BFD, 45517 }, + { 0x3BFF, 45523 }, + { 0x3BFE, 45529 }, + { 0x3BFC, 45535 }, + { 0x0631, 45541 }, + { 0x3BDD, 45544 }, + { 0x3BDC, 45549 }, + { 0x05DC, 45554 }, + { 0x0645, 45557 }, + { 0x0829, 45563 }, + { 0x0715, 45569 }, + { 0x4A24, 45576 }, + { 0x0644, 45584 }, + { 0x0647, 45589 }, + { 0x3ED6, 45596 }, + { 0x3ED8, 45601 }, + { 0x3ED7, 45606 }, + { 0x3ED5, 45611 }, + { 0x05DD, 45616 }, + { 0x0700, 45619 }, + { 0x064F, 45624 }, + { 0x064E, 45630 }, + { 0x083C, 45636 }, + { 0x0650, 45645 }, + { 0x0651, 45652 }, + { 0x081B, 45659 }, + { 0x3EDA, 45665 }, + { 0x3EDC, 45670 }, + { 0x3EDB, 45675 }, + { 0x3ED9, 45680 }, + { 0x0822, 45685 }, + { 0x0617, 45689 }, + { 0x0833, 45692 }, + { 0x082C, 45698 }, + { 0x3BA9, 45705 }, + { 0x3BAB, 45710 }, + { 0x3BAA, 45715 }, + { 0x3BA8, 45720 }, + { 0x05DB, 45725 }, + { 0x0640, 45728 }, + { 0x081A, 45734 }, + { 0x082A, 45740 }, + { 0x0641, 45750 }, + { 0x3ED2, 45757 }, + { 0x3ED4, 45762 }, + { 0x3ED3, 45767 }, + { 0x3ED1, 45772 }, + { 0x05CA, 45777 }, + { 0x062D, 45780 }, + { 0x062F, 45786 }, + { 0x0630, 45795 }, + { 0x0701, 45802 }, + { 0x0632, 45810 }, + { 0x081F, 45817 }, + { 0x062C, 45822 }, + { 0x0702, 45827 }, + { 0x062B, 45833 }, + { 0x062E, 45839 }, + { 0x082E, 45846 }, + { 0x0707, 45853 }, + { 0x06F1, 45864 }, + { 0x0688, 45869 }, + { 0x3EAA, 45875 }, + { 0x3EA9, 45880 }, + { 0x05CE, 45885 }, + { 0x0636, 45888 }, + { 0x0637, 45895 }, + { 0x0824, 45902 }, + { 0x3EB6, 45909 }, + { 0x3EB8, 45914 }, + { 0x3EB7, 45919 }, + { 0x3EB5, 45924 }, + { 0x05D0, 45929 }, + { 0x0806, 45932 }, + { 0x0818, 45938 }, + { 0x4A23, 45945 }, + { 0x0638, 45953 }, + { 0x0807, 45960 }, + { 0x3EBE, 45967 }, + { 0x3EC0, 45972 }, + { 0x3EBF, 45977 }, + { 0x3EBD, 45982 }, + { 0x05C3, 45987 }, + { 0x0615, 45990 }, + { 0x0834, 45995 }, + { 0x082D, 46001 }, + { 0x0616, 46008 }, + { 0x3E92, 46016 }, + { 0x3E94, 46021 }, + { 0x3E93, 46026 }, + { 0x05C2, 46031 }, + { 0x065C, 46035 }, + { 0x3E90, 46040 }, + { 0x3E8F, 46046 }, + { 0x3E91, 46052 }, + { 0x063D, 46057 }, + { 0x3BBD, 46060 }, + { 0x3BBF, 46065 }, + { 0x3BBE, 46070 }, + { 0x3BBC, 46075 }, + { 0x05E1, 46080 }, + { 0x0668, 46083 }, + { 0x0820, 46089 }, + { 0x0663, 46095 }, + { 0x065D, 46102 }, + { 0x05BD, 46107 }, + { 0x3E82, 46113 }, + { 0x3E81, 46121 }, + { 0x070E, 46129 }, + { 0x070F, 46138 }, + { 0x3EEA, 46147 }, + { 0x3EE9, 46152 }, + { 0x05E3, 46157 }, + { 0x081E, 46160 }, + { 0x081D, 46170 }, + { 0x082F, 46180 }, + { 0x0666, 46191 }, + { 0x05BF, 46196 }, + { 0x3E86, 46202 }, + { 0x3E88, 46210 }, + { 0x3E87, 46218 }, + { 0x3E85, 46226 }, + { 0x0667, 46234 }, + { 0x066A, 46240 }, + { 0x3EEE, 46247 }, + { 0x066B, 46252 }, + { 0x066C, 46256 }, + { 0x3C03, 46263 }, + { 0x3C02, 46272 }, + { 0x0710, 46281 }, + { 0x0711, 46291 }, + { 0x3C01, 46301 }, + { 0x3C00, 46307 }, + { 0x3EF0, 46313 }, + { 0x3EEF, 46318 }, + { 0x3EED, 46323 }, + { 0x05D1, 46328 }, + { 0x3EC2, 46331 }, + { 0x3EC4, 46336 }, + { 0x3EC3, 46341 }, + { 0x3EC1, 46346 }, + { 0x05C0, 46351 }, + { 0x07F5, 46354 }, + { 0x07EE, 46360 }, + { 0x060B, 46367 }, + { 0x060C, 46374 }, + { 0x05BC, 46381 }, + { 0x3E80, 46387 }, + { 0x3E7F, 46395 }, + { 0x05BE, 46403 }, + { 0x3E84, 46409 }, + { 0x3E83, 46417 }, + { 0x05BB, 46425 }, + { 0x3E7E, 46431 }, + { 0x3E7D, 46439 }, + { 0x07ED, 46447 }, + { 0x07F7, 46454 }, + { 0x07FA, 46464 }, + { 0x07EC, 46474 }, + { 0x07F6, 46482 }, + { 0x07F9, 46493 }, + { 0x07FD, 46504 }, + { 0x07F3, 46511 }, + { 0x07EB, 46519 }, + { 0x07EF, 46525 }, + { 0x07FC, 46531 }, + { 0x07F2, 46538 }, + { 0x07F1, 46546 }, + { 0x07F4, 46554 }, + { 0x07F0, 46562 }, + { 0x07F8, 46570 }, + { 0x07FB, 46581 }, + { 0x0709, 46592 }, + { 0x070A, 46601 }, + { 0x3E8A, 46610 }, + { 0x060A, 46615 }, + { 0x3BA3, 46619 }, + { 0x3BA2, 46625 }, + { 0x05E2, 46631 }, + { 0x3EEC, 46635 }, + { 0x3EEB, 46641 }, + { 0x3E89, 46647 }, + { 0x0614, 46652 }, + { 0x3BA5, 46655 }, + { 0x3BA7, 46660 }, + { 0x3BA6, 46665 }, + { 0x3BA4, 46670 }, + { 0x0621, 46675 }, + { 0x3BDB, 46678 }, + { 0x3BDA, 46683 }, + { 0x061D, 46688 }, + { 0x3BC5, 46691 }, + { 0x3BC7, 46696 }, + { 0x3BC6, 46701 }, + { 0x3BC4, 46706 }, + { 0x083D, 46711 }, + { 0x064C, 46714 }, + { 0x3BE9, 46717 }, + { 0x3BEB, 46722 }, + { 0x3BEA, 46727 }, + { 0x3BE8, 46732 }, + { 0x060D, 46737 }, + { 0x060F, 46741 }, + { 0x0611, 46746 }, + { 0x060E, 46751 }, + { 0x05C5, 46756 }, + { 0x0817, 46759 }, + { 0x083A, 46766 }, + { 0x083B, 46773 }, + { 0x3E9A, 46780 }, + { 0x3E9C, 46785 }, + { 0x3E9B, 46790 }, + { 0x3E99, 46795 }, + { 0x05C7, 46800 }, + { 0x3EA2, 46803 }, + { 0x3EA4, 46808 }, + { 0x3EA3, 46813 }, + { 0x3EA1, 46818 }, + { 0x05B5, 46823 }, + { 0x05DE, 46826 }, + { 0x06FB, 46829 }, + { 0x06FC, 46835 }, + { 0x081C, 46841 }, + { 0x3EDE, 46848 }, + { 0x3EE0, 46853 }, + { 0x3EDF, 46858 }, + { 0x3EDD, 46863 }, + { 0x05DF, 46868 }, + { 0x0652, 46871 }, + { 0x06FD, 46877 }, + { 0x0655, 46884 }, + { 0x06FF, 46889 }, + { 0x06FE, 46895 }, + { 0x0656, 46901 }, + { 0x0804, 46908 }, + { 0x3EE2, 46915 }, + { 0x0653, 46920 }, + { 0x3BF1, 46924 }, + { 0x3BF0, 46930 }, + { 0x3EE4, 46936 }, + { 0x3EE3, 46941 }, + { 0x3EE1, 46946 }, + { 0x061C, 46951 }, + { 0x3BC9, 46954 }, + { 0x3BCB, 46959 }, + { 0x3BCA, 46964 }, + { 0x3BC8, 46969 }, + { 0x062A, 46974 }, + { 0x3BDF, 46977 }, + { 0x3BDE, 46982 }, + { 0x05CC, 46987 }, + { 0x0633, 46990 }, + { 0x0703, 46999 }, + { 0x06F2, 47007 }, + { 0x0706, 47014 }, + { 0x0634, 47025 }, + { 0x0635, 47032 }, + { 0x0713, 47043 }, + { 0x0714, 47052 }, + { 0x3EAE, 47058 }, + { 0x3EB0, 47063 }, + { 0x3EAF, 47068 }, + { 0x3EAD, 47073 }, + { 0x05C9, 47078 }, + { 0x3EA8, 47081 }, + { 0x3EA7, 47086 }, + { 0x05C4, 47091 }, + { 0x3E96, 47094 }, + { 0x3E98, 47099 }, + { 0x3E97, 47104 }, + { 0x3E95, 47109 }, + { 0x0801, 47114 }, + { 0x0612, 47118 }, + { 0x0835, 47121 }, + { 0x3BB9, 47127 }, + { 0x3BBB, 47132 }, + { 0x3BBA, 47137 }, + { 0x3BB8, 47142 }, + { 0x05CB, 47147 }, + { 0x0827, 47150 }, + { 0x3EAC, 47157 }, + { 0x3EAB, 47162 }, + { 0x0619, 47167 }, + { 0x3BAD, 47170 }, + { 0x3BAF, 47175 }, + { 0x3BAE, 47180 }, + { 0x3BAC, 47185 }, + { 0x0625, 47190 }, + { 0x3BD7, 47193 }, + { 0x3BD6, 47198 }, + { 0x0665, 47203 }, + { 0x05D7, 47207 }, + { 0x05D8, 47215 }, + { 0x070B, 47223 }, + { 0x070D, 47233 }, + { 0x070C, 47243 }, + { 0x05D6, 47253 }, + { 0x3C3F, 47260 }, + { 0x3C41, 47266 }, + { 0x3C40, 47272 }, + { 0x3C3E, 47278 }, + { 0x05D3, 47284 }, + { 0x0695, 47287 }, + { 0x0838, 47293 }, + { 0x3ECA, 47300 }, + { 0x3ECC, 47305 }, + { 0x3ECB, 47310 }, + { 0x3EC9, 47315 }, + { 0x05BA, 47320 }, + { 0x3E7C, 47323 }, + { 0x0642, 47328 }, + { 0x06F8, 47331 }, + { 0x05D4, 47337 }, + { 0x0808, 47344 }, + { 0x0837, 47352 }, + { 0x06F9, 47358 }, + { 0x05D5, 47365 }, + { 0x06FA, 47372 }, + { 0x3BE1, 47381 }, + { 0x3BE3, 47386 }, + { 0x3BE2, 47391 }, + { 0x3BE0, 47396 }, + { 0x064A, 47401 }, + { 0x3BED, 47404 }, + { 0x3BEF, 47409 }, + { 0x3BEE, 47414 }, + { 0x3BEC, 47419 }, + { 0x063F, 47424 }, + { 0x3BC1, 47427 }, + { 0x3BC3, 47432 }, + { 0x3BC2, 47437 }, + { 0x3BC0, 47442 }, + { 0x0654, 47447 }, + { 0x3BF3, 47450 }, + { 0x3BF5, 47455 }, + { 0x3BF4, 47460 }, + { 0x3BF2, 47465 }, + { 0x05CD, 47470 }, + { 0x0693, 47473 }, + { 0x3EB2, 47479 }, + { 0x3EB4, 47484 }, + { 0x3EB3, 47489 }, + { 0x3EB1, 47494 }, + { 0x0643, 47499 }, + { 0x061F, 47503 }, + { 0x0658, 47506 }, + { 0x0836, 47512 }, + { 0x3BCD, 47518 }, + { 0x3BCF, 47523 }, + { 0x3BCE, 47528 }, + { 0x3BCC, 47533 }, + { 0x0618, 47538 }, + { 0x3BB5, 47541 }, + { 0x3BB7, 47546 }, + { 0x3BB6, 47551 }, + { 0x3BB4, 47556 }, + { 0x0626, 47561 }, + { 0x3BD5, 47564 }, + { 0x3BD4, 47569 }, + { 0x0613, 47574 }, + { 0x3BB1, 47577 }, + { 0x3BB3, 47582 }, + { 0x3BB2, 47587 }, + { 0x3BB0, 47592 }, + { 0x3C2B, 47597 }, + { 0x3C2A, 47606 }, + { 0x0830, 47615 }, + { 0x0831, 47619 }, + { 0x0839, 47623 }, + { 0x0832, 47631 }, + { 0x0607, 47635 }, + { 0x063A, 47639 }, + { 0x0608, 47643 }, + { 0x065E, 47647 }, + { 0x3C23, 47651 }, + { 0x3C22, 47657 }, + { 0x0662, 47663 }, + { 0x3C25, 47667 }, + { 0x3C24, 47673 }, + { 0x0620, 47679 }, + { 0x3BD1, 47682 }, + { 0x3BD3, 47687 }, + { 0x3BD2, 47692 }, + { 0x3BD0, 47697 }, + { 0x05B9, 47702 }, + { 0x0821, 47706 }, + { 0x0826, 47710 }, + { 0x0609, 47714 }, + { 0x05EC, 47718 }, + { 0x059E, 47721 }, + { 0x0599, 47725 }, + { 0x05A7, 47728 }, + { 0x0803, 47732 }, + { 0x05EA, 47736 }, + { 0x3E79, 47738 }, + { 0x3E78, 47742 }, + { 0x3C04, 47746 }, + { 0x3C05, 47750 }, + { 0x3C06, 47754 }, + { 0x3C07, 47759 }, + { 0x3C0F, 47764 }, + { 0x3C10, 47770 }, + { 0x3C0C, 47776 }, + { 0x3C0D, 47781 }, + { 0x3C11, 47786 }, + { 0x3C12, 47789 }, + { 0x3C13, 47794 }, + { 0x3C08, 47799 }, + { 0x3C09, 47804 }, + { 0x3C0A, 47809 }, + { 0x3C0B, 47816 }, + { 0x3C14, 47823 }, + { 0x3C0E, 47827 }, + { 0x05B7, 47833 }, + { 0x0858, 47838 }, + { 0x0604, 47842 }, + { 0x0813, 47845 }, + { 0x0603, 47848 }, + { 0x080B, 47851 }, + { 0x0685, 47855 }, + { 0x05D9, 47862 }, + { 0x0800, 47864 }, + { 0x3E6E, 47870 }, + { 0x07FF, 47875 }, + { 0x07FE, 47880 }, + { 0x0802, 47885 }, + { 0x05E5, 47889 }, + { 0x3E6F, 47891 }, + { 0x0857, 47895 }, + { 0x05E4, 47900 }, + { 0x3E6D, 47902 }, + { 0x059B, 47906 }, + { 0x05F0, 47909 }, + { 0x05E6, 47912 }, + { 0x3E71, 47914 }, + { 0x3D56, 47918 }, + { 0x3D3A, 47925 }, + { 0x3D55, 47932 }, + { 0x3D39, 47940 }, + { 0x3DB7, 47948 }, + { 0x3E04, 47957 }, + { 0x3CFC, 47966 }, + { 0x3C6B, 47973 }, + { 0x3DF6, 47980 }, + { 0x3DBA, 47989 }, + { 0x3DB8, 47999 }, + { 0x3DB9, 48008 }, + { 0x3CFD, 48017 }, + { 0x3C6C, 48024 }, + { 0x3E02, 48031 }, + { 0x3CDF, 48040 }, + { 0x3C48, 48047 }, + { 0x3D24, 48054 }, + { 0x3CE2, 48061 }, + { 0x3CAC, 48068 }, + { 0x3CB1, 48075 }, + { 0x3C4C, 48082 }, + { 0x3CB0, 48089 }, + { 0x3C4B, 48097 }, + { 0x3CDE, 48105 }, + { 0x3C47, 48112 }, + { 0x3DDE, 48119 }, + { 0x3CE0, 48128 }, + { 0x3C49, 48135 }, + { 0x3CAE, 48142 }, + { 0x3D23, 48149 }, + { 0x3CE1, 48156 }, + { 0x3C4A, 48163 }, + { 0x3CAF, 48170 }, + { 0x3CAD, 48177 }, + { 0x3DEB, 48184 }, + { 0x3DB0, 48193 }, + { 0x3CF7, 48203 }, + { 0x3C65, 48210 }, + { 0x3D6E, 48217 }, + { 0x3D52, 48224 }, + { 0x3D66, 48231 }, + { 0x3D4A, 48238 }, + { 0x3D65, 48245 }, + { 0x3D49, 48253 }, + { 0x3CF6, 48261 }, + { 0x3C64, 48268 }, + { 0x3DB1, 48275 }, + { 0x3DB2, 48284 }, + { 0x3CF8, 48293 }, + { 0x3C66, 48300 }, + { 0x3CF9, 48307 }, + { 0x3C67, 48314 }, + { 0x3D01, 48321 }, + { 0x3C70, 48328 }, + { 0x3CBF, 48335 }, + { 0x3C74, 48342 }, + { 0x3CBE, 48349 }, + { 0x3C73, 48357 }, + { 0x3D00, 48365 }, + { 0x3C6F, 48372 }, + { 0x3DBE, 48379 }, + { 0x3DBF, 48388 }, + { 0x3D02, 48397 }, + { 0x3C71, 48404 }, + { 0x3E01, 48411 }, + { 0x3D03, 48420 }, + { 0x3C72, 48427 }, + { 0x3D5E, 48434 }, + { 0x3D42, 48441 }, + { 0x3D5D, 48448 }, + { 0x3D41, 48456 }, + { 0x3DFF, 48464 }, + { 0x3CEB, 48473 }, + { 0x3C59, 48480 }, + { 0x3D9C, 48487 }, + { 0x3D9D, 48496 }, + { 0x3CEC, 48506 }, + { 0x3C5A, 48513 }, + { 0x3C96, 48520 }, + { 0x3C95, 48527 }, + { 0x3D19, 48535 }, + { 0x3C93, 48542 }, + { 0x3DD3, 48549 }, + { 0x3DD4, 48558 }, + { 0x3D1A, 48567 }, + { 0x3C94, 48574 }, + { 0x3D1B, 48581 }, + { 0x3D07, 48589 }, + { 0x3C7B, 48596 }, + { 0x3CC3, 48603 }, + { 0x3D2D, 48610 }, + { 0x3D09, 48617 }, + { 0x3C7D, 48624 }, + { 0x3CC6, 48631 }, + { 0x3C80, 48638 }, + { 0x3CC2, 48645 }, + { 0x3CC5, 48652 }, + { 0x3C7F, 48660 }, + { 0x3C79, 48668 }, + { 0x3D06, 48675 }, + { 0x3C7A, 48682 }, + { 0x3D08, 48689 }, + { 0x3C7C, 48696 }, + { 0x3DF7, 48703 }, + { 0x3DFB, 48712 }, + { 0x3E03, 48721 }, + { 0x3CC4, 48730 }, + { 0x3D2E, 48737 }, + { 0x3D0A, 48744 }, + { 0x3C7E, 48751 }, + { 0x3DC3, 48758 }, + { 0x3DC4, 48767 }, + { 0x3DC2, 48777 }, + { 0x3DF5, 48786 }, + { 0x3D0C, 48795 }, + { 0x3C82, 48802 }, + { 0x3D0F, 48809 }, + { 0x3CC9, 48816 }, + { 0x3C86, 48823 }, + { 0x3EF4, 48830 }, + { 0x3EF3, 48840 }, + { 0x3EF6, 48850 }, + { 0x3EF5, 48860 }, + { 0x3EF2, 48870 }, + { 0x3EF1, 48880 }, + { 0x3EF8, 48890 }, + { 0x3CC8, 48897 }, + { 0x3C85, 48905 }, + { 0x3EF7, 48913 }, + { 0x3DEC, 48920 }, + { 0x3DC6, 48929 }, + { 0x3DC5, 48938 }, + { 0x3DFC, 48947 }, + { 0x3DFA, 48956 }, + { 0x3D0B, 48965 }, + { 0x3C81, 48972 }, + { 0x3DC7, 48979 }, + { 0x3DC8, 48988 }, + { 0x3D0D, 48997 }, + { 0x3C83, 49004 }, + { 0x3DC9, 49011 }, + { 0x3DCA, 49020 }, + { 0x3DED, 49029 }, + { 0x3CC7, 49038 }, + { 0x3D2F, 49045 }, + { 0x3D0E, 49052 }, + { 0x3C84, 49059 }, + { 0x3D04, 49066 }, + { 0x3C75, 49073 }, + { 0x3CC1, 49080 }, + { 0x3C78, 49087 }, + { 0x3CC0, 49094 }, + { 0x3C77, 49102 }, + { 0x3DC0, 49110 }, + { 0x3DF4, 49119 }, + { 0x3DF2, 49128 }, + { 0x3DC1, 49137 }, + { 0x3D05, 49146 }, + { 0x3C76, 49153 }, + { 0x3C9E, 49160 }, + { 0x3DA6, 49168 }, + { 0x3DA7, 49177 }, + { 0x3DE9, 49186 }, + { 0x3CF3, 49195 }, + { 0x3C62, 49202 }, + { 0x3D6D, 49209 }, + { 0x3D51, 49216 }, + { 0x3D64, 49223 }, + { 0x3D48, 49230 }, + { 0x3D63, 49237 }, + { 0x3D47, 49245 }, + { 0x3CF4, 49253 }, + { 0x3DA8, 49260 }, + { 0x3E05, 49269 }, + { 0x3CF5, 49278 }, + { 0x3C63, 49285 }, + { 0x3CFA, 49292 }, + { 0x3C68, 49299 }, + { 0x3D54, 49306 }, + { 0x3D38, 49313 }, + { 0x3D53, 49320 }, + { 0x3D37, 49328 }, + { 0x3DB3, 49336 }, + { 0x3DB4, 49345 }, + { 0x3DB6, 49354 }, + { 0x3DB5, 49363 }, + { 0x3D7C, 49372 }, + { 0x3D75, 49379 }, + { 0x3C69, 49386 }, + { 0x3D93, 49393 }, + { 0x3D94, 49402 }, + { 0x3D95, 49411 }, + { 0x3CE4, 49420 }, + { 0x3C4E, 49427 }, + { 0x3D26, 49434 }, + { 0x3CE7, 49441 }, + { 0x3CB2, 49448 }, + { 0x3CB7, 49455 }, + { 0x3C52, 49462 }, + { 0x3CB6, 49469 }, + { 0x3C51, 49477 }, + { 0x3DDF, 49485 }, + { 0x3DE0, 49494 }, + { 0x3D92, 49504 }, + { 0x3CE3, 49513 }, + { 0x3C4D, 49520 }, + { 0x3DE1, 49527 }, + { 0x3DE2, 49536 }, + { 0x3D96, 49546 }, + { 0x3CE5, 49555 }, + { 0x3C4F, 49562 }, + { 0x3D98, 49569 }, + { 0x3DE3, 49578 }, + { 0x3DE4, 49587 }, + { 0x3D97, 49597 }, + { 0x3D99, 49606 }, + { 0x3CB4, 49615 }, + { 0x3D25, 49622 }, + { 0x3CE6, 49629 }, + { 0x3C50, 49636 }, + { 0x3CB5, 49643 }, + { 0x3CB3, 49650 }, + { 0x3DEE, 49657 }, + { 0x3D1D, 49666 }, + { 0x3C98, 49673 }, + { 0x3D33, 49680 }, + { 0x3D20, 49687 }, + { 0x3CD3, 49694 }, + { 0x3CD8, 49701 }, + { 0x3C9C, 49708 }, + { 0x3CD7, 49715 }, + { 0x3C9B, 49723 }, + { 0x3DEF, 49731 }, + { 0x3D1C, 49740 }, + { 0x3C97, 49747 }, + { 0x3D1E, 49754 }, + { 0x3C99, 49761 }, + { 0x3DF0, 49768 }, + { 0x3DDC, 49777 }, + { 0x3DDD, 49786 }, + { 0x3CD5, 49795 }, + { 0x3D32, 49802 }, + { 0x3D1F, 49809 }, + { 0x3C9A, 49816 }, + { 0x3CD6, 49823 }, + { 0x3CD4, 49830 }, + { 0x3C39, 49837 }, + { 0x3C3A, 49847 }, + { 0x3C38, 49857 }, + { 0x3C33, 49867 }, + { 0x3C32, 49877 }, + { 0x3C2F, 49887 }, + { 0x3C2E, 49897 }, + { 0x3C35, 49907 }, + { 0x3C34, 49917 }, + { 0x3C37, 49927 }, + { 0x3C36, 49937 }, + { 0x3CDA, 49947 }, + { 0x3C43, 49957 }, + { 0x3D22, 49967 }, + { 0x3CDD, 49977 }, + { 0x3CA6, 49987 }, + { 0x3C31, 49997 }, + { 0x3C30, 50007 }, + { 0x3CAB, 50017 }, + { 0x3C46, 50027 }, + { 0x3C2D, 50037 }, + { 0x3CAA, 50047 }, + { 0x3C45, 50058 }, + { 0x3C2C, 50069 }, + { 0x3CD9, 50079 }, + { 0x3C42, 50089 }, + { 0x3CDB, 50099 }, + { 0x3CA8, 50109 }, + { 0x3D21, 50119 }, + { 0x3CDC, 50129 }, + { 0x3C44, 50139 }, + { 0x3CA9, 50149 }, + { 0x3CA7, 50159 }, + { 0x3D7D, 50169 }, + { 0x3CFB, 50176 }, + { 0x3C6A, 50183 }, + { 0x3D7E, 50190 }, + { 0x3D7F, 50197 }, + { 0x3CD2, 50204 }, + { 0x3C9F, 50213 }, + { 0x3E18, 50222 }, + { 0x3DFE, 50227 }, + { 0x3DE6, 50236 }, + { 0x3CE9, 50246 }, + { 0x3C57, 50253 }, + { 0x3D60, 50260 }, + { 0x3D44, 50267 }, + { 0x3D5F, 50274 }, + { 0x3D43, 50282 }, + { 0x3D9A, 50290 }, + { 0x3D9B, 50299 }, + { 0x3DE5, 50308 }, + { 0x3DE7, 50317 }, + { 0x3CEA, 50327 }, + { 0x3C58, 50334 }, + { 0x3C5C, 50341 }, + { 0x3D62, 50348 }, + { 0x3D46, 50355 }, + { 0x3D61, 50362 }, + { 0x3D45, 50370 }, + { 0x3CED, 50378 }, + { 0x3C5B, 50385 }, + { 0x3CEE, 50392 }, + { 0x3C5D, 50399 }, + { 0x3DCD, 50406 }, + { 0x3DCB, 50415 }, + { 0x3DCC, 50424 }, + { 0x3D11, 50433 }, + { 0x3C88, 50440 }, + { 0x3C8C, 50447 }, + { 0x3CCA, 50454 }, + { 0x3C8B, 50461 }, + { 0x3DCE, 50469 }, + { 0x3E00, 50478 }, + { 0x3DD2, 50487 }, + { 0x3DCF, 50496 }, + { 0x3D10, 50505 }, + { 0x3C87, 50512 }, + { 0x3DF9, 50519 }, + { 0x3DD0, 50528 }, + { 0x3DD1, 50537 }, + { 0x3D12, 50546 }, + { 0x3C89, 50553 }, + { 0x3DF1, 50560 }, + { 0x3CCB, 50569 }, + { 0x3D13, 50576 }, + { 0x3C8A, 50583 }, + { 0x3DF3, 50590 }, + { 0x3DD6, 50599 }, + { 0x3DD5, 50609 }, + { 0x3D15, 50618 }, + { 0x3C8E, 50625 }, + { 0x3D31, 50632 }, + { 0x3D18, 50639 }, + { 0x3CCC, 50646 }, + { 0x3CD1, 50653 }, + { 0x3C92, 50660 }, + { 0x3CD0, 50667 }, + { 0x3C91, 50675 }, + { 0x3DFD, 50683 }, + { 0x3DF8, 50692 }, + { 0x3E07, 50701 }, + { 0x3DD9, 50710 }, + { 0x3DD7, 50720 }, + { 0x3DD8, 50729 }, + { 0x3D14, 50738 }, + { 0x3C8D, 50745 }, + { 0x3D16, 50752 }, + { 0x3C8F, 50759 }, + { 0x3DDA, 50766 }, + { 0x3DDB, 50775 }, + { 0x3CCE, 50785 }, + { 0x3D30, 50792 }, + { 0x3D17, 50799 }, + { 0x3C90, 50806 }, + { 0x3CCF, 50813 }, + { 0x3CCD, 50820 }, + { 0x3E0A, 50827 }, + { 0x3D83, 50837 }, + { 0x3D84, 50842 }, + { 0x3D85, 50847 }, + { 0x3D86, 50852 }, + { 0x3D87, 50857 }, + { 0x3D9E, 50862 }, + { 0x3D77, 50871 }, + { 0x3CF0, 50878 }, + { 0x3C5F, 50885 }, + { 0x3D2A, 50892 }, + { 0x3D73, 50899 }, + { 0x3D6C, 50906 }, + { 0x3D50, 50913 }, + { 0x3D5A, 50920 }, + { 0x3D3E, 50927 }, + { 0x3D59, 50934 }, + { 0x3D3D, 50942 }, + { 0x3D9F, 50950 }, + { 0x3DA0, 50959 }, + { 0x3D76, 50969 }, + { 0x3CEF, 50976 }, + { 0x3C5E, 50983 }, + { 0x3E06, 50990 }, + { 0x3DE8, 50999 }, + { 0x3D78, 51009 }, + { 0x3CF1, 51016 }, + { 0x3C60, 51023 }, + { 0x3DA1, 51030 }, + { 0x3DA2, 51039 }, + { 0x3DA3, 51048 }, + { 0x3DA4, 51057 }, + { 0x3DA5, 51066 }, + { 0x3D29, 51075 }, + { 0x3CF2, 51082 }, + { 0x3C61, 51089 }, + { 0x3C9D, 51096 }, + { 0x3D28, 51104 }, + { 0x3CB8, 51111 }, + { 0x3CBD, 51118 }, + { 0x3C56, 51125 }, + { 0x3CBC, 51132 }, + { 0x3C55, 51140 }, + { 0x3C53, 51148 }, + { 0x3CBA, 51155 }, + { 0x3D27, 51162 }, + { 0x3CE8, 51169 }, + { 0x3C54, 51176 }, + { 0x3CBB, 51183 }, + { 0x3CB9, 51190 }, + { 0x3E0C, 51197 }, + { 0x3E0B, 51202 }, + { 0x3D58, 51207 }, + { 0x3D3C, 51214 }, + { 0x3D57, 51221 }, + { 0x3D3B, 51229 }, + { 0x3CFE, 51237 }, + { 0x3C6D, 51244 }, + { 0x3DBC, 51251 }, + { 0x3DBD, 51260 }, + { 0x3DBB, 51270 }, + { 0x3CFF, 51279 }, + { 0x3C6E, 51286 }, + { 0x3E0E, 51293 }, + { 0x3E09, 51298 }, + { 0x3E12, 51308 }, + { 0x3DEA, 51313 }, + { 0x3DA9, 51322 }, + { 0x3DAA, 51331 }, + { 0x3D68, 51340 }, + { 0x3D7A, 51347 }, + { 0x3D70, 51354 }, + { 0x3D4C, 51361 }, + { 0x3D2C, 51368 }, + { 0x3D74, 51375 }, + { 0x3D6B, 51382 }, + { 0x3D4F, 51389 }, + { 0x3D5C, 51396 }, + { 0x3D40, 51403 }, + { 0x3D5B, 51410 }, + { 0x3D3F, 51418 }, + { 0x3DAB, 51426 }, + { 0x3D67, 51435 }, + { 0x3D79, 51442 }, + { 0x3D6F, 51449 }, + { 0x3D4B, 51456 }, + { 0x3D69, 51463 }, + { 0x3D7B, 51470 }, + { 0x3D71, 51477 }, + { 0x3D4D, 51484 }, + { 0x3DAC, 51491 }, + { 0x3DAD, 51500 }, + { 0x3DAE, 51509 }, + { 0x3DAF, 51518 }, + { 0x3D6A, 51527 }, + { 0x3D2B, 51534 }, + { 0x3D72, 51541 }, + { 0x3D4E, 51548 }, + { 0x3E10, 51555 }, + { 0x3D89, 51560 }, + { 0x3D8C, 51564 }, + { 0x3E0F, 51569 }, + { 0x3D35, 51574 }, + { 0x3CA3, 51581 }, + { 0x3D34, 51588 }, + { 0x3CA2, 51595 }, + { 0x3D36, 51602 }, + { 0x3CA4, 51609 }, + { 0x3CA0, 51616 }, + { 0x3CA1, 51623 }, + { 0x3CA5, 51630 }, + { 0x3C3C, 51638 }, + { 0x3C3D, 51651 }, + { 0x3C3B, 51664 }, + { 0x3D8F, 51677 }, + { 0x3D8A, 51681 }, + { 0x3D8D, 51685 }, + { 0x3E0D, 51689 }, + { 0x3D82, 51694 }, + { 0x3E11, 51698 }, + { 0x3D8B, 51703 }, + { 0x3E16, 51707 }, + { 0x3D91, 51712 }, + { 0x3E08, 51716 }, + { 0x3D90, 51720 }, + { 0x3D8E, 51724 }, + { 0x3E17, 51730 }, + { 0x3D88, 51735 }, + { 0x3E13, 51740 }, + { 0x3E14, 51745 }, + { 0x05B8, 51748 }, + { 0x05F6, 51751 }, + { 0x0809, 51754 }, + { 0x05F2, 51757 }, + { 0x4A25, 51759 }, + { 0x05B4, 51763 }, + { 0x05EF, 51765 }, + { 0x0605, 51768 }, + { 0x0812, 51771 }, + { 0x8C48, 51775 }, + { 0x8C3B, 51778 }, + { 0x8C52, 51781 }, + { 0x8C3D, 51784 }, + { 0x8C49, 51787 }, + { 0x8C40, 51790 }, + { 0x8C43, 51793 }, + { 0x8C44, 51796 }, + { 0x8C4B, 51799 }, + { 0x8C4C, 51802 }, + { 0x8C4A, 51805 }, + { 0x8C41, 51808 }, + { 0x8C4E, 51811 }, + { 0x8C3E, 51814 }, + { 0x8C42, 51817 }, + { 0x8C53, 51820 }, + { 0x8C3A, 51823 }, + { 0x8C3C, 51826 }, + { 0x8C50, 51829 }, + { 0x8C45, 51832 }, + { 0x8C46, 51835 }, + { 0x8C47, 51838 }, + { 0x8C51, 51841 }, + { 0x8C4F, 51844 }, + { 0x8C3F, 51847 }, + { 0x8C54, 51850 }, + { 0x8C4D, 51853 }, + { 0x8CA1, 51856 }, + { 0x8C94, 51860 }, + { 0x8CAB, 51864 }, + { 0x8C96, 51868 }, + { 0x8CA2, 51872 }, + { 0x8C9A, 51876 }, + { 0x8C97, 51880 }, + { 0x8C9D, 51884 }, + { 0x8CA4, 51888 }, + { 0x8CA5, 51892 }, + { 0x8CA3, 51896 }, + { 0x8C9B, 51900 }, + { 0x8CA7, 51904 }, + { 0x8C98, 51908 }, + { 0x8C9C, 51912 }, + { 0x8CAC, 51916 }, + { 0x8C93, 51920 }, + { 0x8C95, 51924 }, + { 0x8CA9, 51928 }, + { 0x8C9E, 51932 }, + { 0x8C9F, 51936 }, + { 0x8CA0, 51940 }, + { 0x8CAA, 51944 }, + { 0x8CA8, 51948 }, + { 0x8C99, 51952 }, + { 0x8CAD, 51956 }, + { 0x8CA6, 51960 }, + { 0x8C73, 51964 }, + { 0x8C78, 51968 }, + { 0x8C6E, 51972 }, + { 0x8C70, 51976 }, + { 0x8C75, 51980 }, + { 0x8C74, 51984 }, + { 0x8C6F, 51988 }, + { 0x8C6D, 51992 }, + { 0x8C77, 51996 }, + { 0x8C71, 52000 }, + { 0x8C72, 52004 }, + { 0x8C79, 52008 }, + { 0x8C76, 52012 }, + { 0x8C7B, 52016 }, + { 0x8C7A, 52021 }, + { 0x8C55, 52026 }, + { 0x8C57, 52030 }, + { 0x8C58, 52034 }, + { 0x8C56, 52038 }, + { 0x8C63, 52042 }, + { 0x8C59, 52046 }, + { 0x8C6B, 52050 }, + { 0x8C64, 52054 }, + { 0x8C5C, 52058 }, + { 0x8C5B, 52062 }, + { 0x8C5E, 52066 }, + { 0x8C5F, 52070 }, + { 0x8C66, 52074 }, + { 0x8C65, 52078 }, + { 0x8C68, 52082 }, + { 0x8C5D, 52086 }, + { 0x8C5A, 52090 }, + { 0x8C6A, 52094 }, + { 0x8C60, 52098 }, + { 0x8C61, 52102 }, + { 0x8C62, 52106 }, + { 0x8C69, 52110 }, + { 0x8C6C, 52114 }, + { 0x8C67, 52118 }, + { 0x8CC8, 52122 }, + { 0x8CC7, 52128 }, + { 0x8C86, 52136 }, + { 0x8C7C, 52140 }, + { 0x8C8E, 52144 }, + { 0x8C87, 52148 }, + { 0x8C7F, 52152 }, + { 0x8C7E, 52156 }, + { 0x8C82, 52160 }, + { 0x8C89, 52164 }, + { 0x8C88, 52168 }, + { 0x8C80, 52172 }, + { 0x8C8B, 52176 }, + { 0x8C81, 52180 }, + { 0x8C8F, 52184 }, + { 0x8C7D, 52188 }, + { 0x8C8D, 52192 }, + { 0x8C83, 52196 }, + { 0x8C84, 52200 }, + { 0x8C85, 52204 }, + { 0x8C8C, 52208 }, + { 0x8C90, 52212 }, + { 0x8C8A, 52216 }, + { 0x8C91, 52220 }, + { 0x8C92, 52225 }, + { 0x8CBA, 52230 }, + { 0x8CAE, 52234 }, + { 0x8CC4, 52238 }, + { 0x8CB0, 52242 }, + { 0x8CBB, 52246 }, + { 0x8CB3, 52250 }, + { 0x8CB6, 52254 }, + { 0x8CBD, 52258 }, + { 0x8CBE, 52262 }, + { 0x8CBC, 52266 }, + { 0x8CB4, 52270 }, + { 0x8CC0, 52274 }, + { 0x8CB1, 52278 }, + { 0x8CB5, 52282 }, + { 0x8CC5, 52286 }, + { 0x8CAF, 52290 }, + { 0x8CC2, 52294 }, + { 0x8CB7, 52298 }, + { 0x8CB8, 52302 }, + { 0x8CB9, 52306 }, + { 0x8CC3, 52310 }, + { 0x8CC1, 52314 }, + { 0x8CB2, 52318 }, + { 0x8CC6, 52322 }, + { 0x8CBF, 52326 }, + { 0x8F5B, 52330 }, + { 0x94CF, 52332 }, + { 0x9590, 52333 }, + { 0x2343, 52335 }, + { 0x223C, 52337 }, + { 0x223E, 52339 }, + { 0x91AC, 52343 }, + { 0x91AA, 52348 }, + { 0x223D, 52354 }, + { 0x27E6, 52358 }, + { 0x91A6, 52363 }, + { 0x91A8, 52367 }, + { 0x91A9, 52372 }, + { 0x91A7, 52376 }, + { 0x8EFF, 52379 }, + { 0x903B, 52380 }, + { 0x9528, 52382 }, + { 0x2297, 52383 }, + { 0x8F4F, 52386 }, + { 0x2298, 52390 }, + { 0x8F50, 52393 }, + { 0x94D9, 52397 }, + { 0x95CA, 52398 }, + { 0x900C, 52399 }, + { 0x9510, 52400 }, + { 0x95F5, 52402 }, + { 0x8F31, 52404 }, + { 0x2567, 52408 }, + { 0x2A51, 52412 }, + { 0x27F4, 52416 }, + { 0x2A52, 52420 }, + { 0x1F78, 52424 }, + { 0x7E28, 52427 }, + { 0x7CA4, 52431 }, + { 0x7E2E, 52435 }, + { 0x7E30, 52440 }, + { 0x7CA6, 52445 }, + { 0x7E2A, 52449 }, + { 0x7E2C, 52454 }, + { 0x7CA5, 52459 }, + { 0x7E32, 52463 }, + { 0x7E33, 52468 }, + { 0x7E34, 52473 }, + { 0x7E35, 52478 }, + { 0x1F64, 52483 }, + { 0x2A1A, 52486 }, + { 0x1F75, 52490 }, + { 0x96EE, 52493 }, + { 0x2036, 52501 }, + { 0x1F63, 52504 }, + { 0x2A1B, 52507 }, + { 0x1F76, 52511 }, + { 0x96EF, 52514 }, + { 0x200C, 52522 }, + { 0x200D, 52525 }, + { 0x2038, 52532 }, + { 0x96EB, 52536 }, + { 0x96E3, 52542 }, + { 0x2034, 52548 }, + { 0x1F1F, 52550 }, + { 0x25FD, 52551 }, + { 0x25FE, 52556 }, + { 0x9478, 52561 }, + { 0x4B34, 52563 }, + { 0x4ACA, 52568 }, + { 0x4AC9, 52571 }, + { 0x4AC8, 52574 }, + { 0x4ACB, 52577 }, + { 0x4ACC, 52580 }, + { 0x4B0F, 52583 }, + { 0x4B2B, 52585 }, + { 0x4B30, 52588 }, + { 0x4B2C, 52591 }, + { 0x4B2F, 52594 }, + { 0x4B2E, 52597 }, + { 0x4B33, 52600 }, + { 0x4B2A, 52603 }, + { 0x4B32, 52606 }, + { 0x4B31, 52609 }, + { 0x4B2D, 52612 }, + { 0x4B0A, 52615 }, + { 0x4B02, 52619 }, + { 0x4B0C, 52623 }, + { 0x4B04, 52627 }, + { 0x4B00, 52631 }, + { 0x4B0B, 52635 }, + { 0x4B0D, 52639 }, + { 0x4B03, 52643 }, + { 0x4B05, 52647 }, + { 0x4B37, 52651 }, + { 0x4B38, 52658 }, + { 0x4B08, 52665 }, + { 0x4B06, 52670 }, + { 0x4B09, 52675 }, + { 0x4B07, 52680 }, + { 0x4B01, 52685 }, + { 0x4B10, 52690 }, + { 0x4ACD, 52693 }, + { 0x4AD7, 52696 }, + { 0x4ACF, 52699 }, + { 0x4AD9, 52702 }, + { 0x4AD1, 52705 }, + { 0x4ACE, 52708 }, + { 0x4AD8, 52711 }, + { 0x4ADA, 52714 }, + { 0x4AF1, 52717 }, + { 0x4AE0, 52720 }, + { 0x4AEC, 52723 }, + { 0x4ADD, 52726 }, + { 0x4AFB, 52729 }, + { 0x4AD0, 52732 }, + { 0x4AE2, 52735 }, + { 0x4ADB, 52738 }, + { 0x4AF6, 52741 }, + { 0x4AF3, 52744 }, + { 0x4AEE, 52747 }, + { 0x4AEF, 52750 }, + { 0x4AF5, 52753 }, + { 0x4AFA, 52756 }, + { 0x4AEA, 52759 }, + { 0x4AD2, 52762 }, + { 0x4AF7, 52765 }, + { 0x4AF4, 52768 }, + { 0x4AF2, 52771 }, + { 0x4AE1, 52774 }, + { 0x4AE7, 52777 }, + { 0x4AED, 52780 }, + { 0x4ADE, 52783 }, + { 0x4AE3, 52786 }, + { 0x4ADC, 52789 }, + { 0x4AFC, 52792 }, + { 0x4ADF, 52795 }, + { 0x4AE9, 52798 }, + { 0x4AE4, 52801 }, + { 0x4B39, 52804 }, + { 0x4AFE, 52809 }, + { 0x4AFD, 52814 }, + { 0x4AFF, 52819 }, + { 0x4B35, 52824 }, + { 0x4B36, 52830 }, + { 0x4AF0, 52836 }, + { 0x4AF8, 52839 }, + { 0x4AF9, 52842 }, + { 0x4AEB, 52845 }, + { 0x4AE5, 52848 }, + { 0x4AE8, 52851 }, + { 0x4AE6, 52854 }, + { 0x4AD5, 52857 }, + { 0x4AD3, 52861 }, + { 0x4AD6, 52865 }, + { 0x4AD4, 52869 }, + { 0x4B16, 52873 }, + { 0x4B28, 52876 }, + { 0x4B29, 52880 }, + { 0x4B1B, 52884 }, + { 0x4B1F, 52887 }, + { 0x4B17, 52890 }, + { 0x4B1A, 52893 }, + { 0x4B19, 52896 }, + { 0x4B1E, 52899 }, + { 0x4B1D, 52902 }, + { 0x4B23, 52905 }, + { 0x4B22, 52908 }, + { 0x4B1C, 52911 }, + { 0x4B24, 52914 }, + { 0x4B18, 52917 }, + { 0x4B26, 52920 }, + { 0x4B3A, 52923 }, + { 0x4B27, 52926 }, + { 0x4B21, 52929 }, + { 0x4B20, 52932 }, + { 0x4B25, 52935 }, + { 0x4B0E, 52938 }, + { 0x4B11, 52940 }, + { 0x4B13, 52943 }, + { 0x4B15, 52946 }, + { 0x4B12, 52949 }, + { 0x4B14, 52953 }, + { 0x8EBC, 52957 }, + { 0x9592, 52960 }, + { 0x0065, 52961 }, + { 0x9047, 52963 }, + { 0x1FE2, 52965 }, + { 0x94F9, 52970 }, + { 0x95BB, 52972 }, + { 0x1CA2, 52973 }, + { 0x1E70, 52974 }, + { 0x94F6, 52976 }, + { 0x8EE8, 52977 }, + { 0x90AA, 52978 }, + { 0x90AB, 52979 }, + { 0x975B, 52982 }, + { 0x2277, 52984 }, + { 0x9122, 52985 }, + { 0x9499, 52986 }, + { 0x4194, 52988 }, + { 0x419D, 52991 }, + { 0x4196, 52994 }, + { 0x41AE, 52997 }, + { 0x41B4, 53000 }, + { 0x41AD, 53003 }, + { 0x41B0, 53006 }, + { 0x4197, 53009 }, + { 0x419E, 53012 }, + { 0x41A9, 53015 }, + { 0x419F, 53018 }, + { 0x41AB, 53021 }, + { 0x419C, 53024 }, + { 0x4199, 53027 }, + { 0x41A4, 53030 }, + { 0x41A1, 53033 }, + { 0x41A6, 53036 }, + { 0x41A8, 53039 }, + { 0x419B, 53042 }, + { 0x41A0, 53045 }, + { 0x41C3, 53048 }, + { 0x41B5, 53051 }, + { 0x41B9, 53054 }, + { 0x41B1, 53057 }, + { 0x419A, 53060 }, + { 0x41BE, 53063 }, + { 0x41B2, 53066 }, + { 0x41B8, 53069 }, + { 0x41A7, 53072 }, + { 0x4195, 53075 }, + { 0x41BD, 53078 }, + { 0x41A2, 53081 }, + { 0x41AC, 53084 }, + { 0x41B6, 53087 }, + { 0x41BB, 53090 }, + { 0x41B3, 53093 }, + { 0x41C2, 53096 }, + { 0x41BF, 53099 }, + { 0x41C0, 53102 }, + { 0x41C1, 53105 }, + { 0x41A3, 53108 }, + { 0x41B7, 53111 }, + { 0x41AA, 53114 }, + { 0x4198, 53117 }, + { 0x41A5, 53120 }, + { 0x41BA, 53123 }, + { 0x41BC, 53126 }, + { 0x41C4, 53129 }, + { 0x41AF, 53132 }, + { 0x9483, 53135 }, + { 0x2317, 53136 }, + { 0x90FB, 53137 }, + { 0x1D5F, 53139 }, + { 0x22FF, 53142 }, + { 0x4BD3, 53143 }, + { 0x4BD4, 53146 }, + { 0x4BA4, 53149 }, + { 0x4BA3, 53152 }, + { 0x4BA2, 53155 }, + { 0x4BE2, 53158 }, + { 0x4BD8, 53160 }, + { 0x4BDD, 53163 }, + { 0x4BD9, 53166 }, + { 0x4BDC, 53169 }, + { 0x4BDB, 53172 }, + { 0x4BE0, 53175 }, + { 0x4BD7, 53178 }, + { 0x4BDF, 53181 }, + { 0x4BDE, 53184 }, + { 0x4BDA, 53187 }, + { 0x4BC9, 53190 }, + { 0x4BCE, 53194 }, + { 0x4BCA, 53198 }, + { 0x4BD0, 53202 }, + { 0x4BCC, 53206 }, + { 0x4BE6, 53210 }, + { 0x4BCF, 53214 }, + { 0x4BD1, 53218 }, + { 0x4BE7, 53222 }, + { 0x4BCB, 53226 }, + { 0x4BD2, 53230 }, + { 0x4BCD, 53234 }, + { 0x4BE3, 53238 }, + { 0x4BA8, 53241 }, + { 0x4BA6, 53244 }, + { 0x4BA7, 53247 }, + { 0x4BA5, 53250 }, + { 0x4BBF, 53253 }, + { 0x4BAE, 53256 }, + { 0x4BBA, 53259 }, + { 0x4BAB, 53262 }, + { 0x4BC8, 53265 }, + { 0x4BB0, 53268 }, + { 0x4BA9, 53271 }, + { 0x4BC5, 53274 }, + { 0x4BC1, 53277 }, + { 0x4BBC, 53280 }, + { 0x4BBD, 53283 }, + { 0x4BC4, 53286 }, + { 0x4BC7, 53289 }, + { 0x4BB8, 53292 }, + { 0x4BE8, 53295 }, + { 0x4BC6, 53298 }, + { 0x4BC3, 53301 }, + { 0x4BC0, 53304 }, + { 0x4BAF, 53307 }, + { 0x4BB5, 53310 }, + { 0x4BBB, 53313 }, + { 0x4BAC, 53316 }, + { 0x4BB1, 53319 }, + { 0x4BAA, 53322 }, + { 0x4BE5, 53325 }, + { 0x4BAD, 53328 }, + { 0x4BB7, 53331 }, + { 0x4BB2, 53334 }, + { 0x4BBE, 53337 }, + { 0x4BB9, 53340 }, + { 0x4BB3, 53343 }, + { 0x4BC2, 53346 }, + { 0x4BB6, 53349 }, + { 0x4BB4, 53352 }, + { 0x4BD5, 53355 }, + { 0x4BD6, 53357 }, + { 0x4BE1, 53359 }, + { 0x4BE4, 53362 }, + { 0x94EE, 53365 }, + { 0x8EEB, 53367 }, + { 0x22E3, 53369 }, + { 0x2316, 53370 }, + { 0x8F59, 53371 }, + { 0x2201, 53372 }, + { 0x25EF, 53380 }, + { 0x21FC, 53388 }, + { 0x21FE, 53393 }, + { 0x21FD, 53398 }, + { 0x25EE, 53403 }, + { 0x21FF, 53410 }, + { 0x2200, 53415 }, + { 0x21F9, 53421 }, + { 0x25E1, 53425 }, + { 0x25E7, 53429 }, + { 0x25E6, 53433 }, + { 0x8F5D, 53445 }, + { 0x9088, 53447 }, + { 0x90C3, 53449 }, + { 0x2678, 53453 }, + { 0x267C, 53457 }, + { 0x26FB, 53464 }, + { 0x26FD, 53466 }, + { 0x909E, 53471 }, + { 0x909D, 53476 }, + { 0x26FC, 53481 }, + { 0x26FE, 53483 }, + { 0x8EB5, 53488 }, + { 0x2679, 53490 }, + { 0x22DC, 53494 }, + { 0x8F0D, 53495 }, + { 0x8F1D, 53497 }, + { 0x291D, 53498 }, + { 0x2920, 53503 }, + { 0x291E, 53508 }, + { 0x291F, 53514 }, + { 0x2922, 53520 }, + { 0x41C6, 53523 }, + { 0x41CB, 53527 }, + { 0x41C7, 53531 }, + { 0x41CA, 53535 }, + { 0x41C9, 53539 }, + { 0x41CE, 53543 }, + { 0x41CD, 53547 }, + { 0x41CC, 53551 }, + { 0x41C8, 53555 }, + { 0x41D8, 53559 }, + { 0x41DD, 53564 }, + { 0x41CF, 53569 }, + { 0x41D9, 53573 }, + { 0x41DC, 53578 }, + { 0x41DB, 53583 }, + { 0x41E0, 53588 }, + { 0x41DF, 53593 }, + { 0x41D3, 53598 }, + { 0x41D2, 53602 }, + { 0x41DE, 53606 }, + { 0x41D4, 53611 }, + { 0x41DA, 53615 }, + { 0x41D6, 53620 }, + { 0x41D7, 53624 }, + { 0x41D1, 53628 }, + { 0x41D0, 53632 }, + { 0x41D5, 53636 }, + { 0x41C5, 53640 }, + { 0x28C8, 53644 }, + { 0x28D4, 53648 }, + { 0x28C2, 53652 }, + { 0x28C4, 53656 }, + { 0x28CA, 53660 }, + { 0x28CC, 53664 }, + { 0x28D2, 53668 }, + { 0x03A5, 53672 }, + { 0x28B2, 53676 }, + { 0x039B, 53680 }, + { 0x28D6, 53684 }, + { 0x28C6, 53688 }, + { 0x28F8, 53692 }, + { 0x28DE, 53698 }, + { 0x2902, 53704 }, + { 0x28F0, 53710 }, + { 0x28FE, 53716 }, + { 0x28FC, 53722 }, + { 0x28E8, 53728 }, + { 0x28F6, 53734 }, + { 0x28EE, 53740 }, + { 0x2904, 53746 }, + { 0x2900, 53752 }, + { 0x2908, 53758 }, + { 0x290A, 53764 }, + { 0x290C, 53770 }, + { 0x2906, 53776 }, + { 0x28DA, 53782 }, + { 0x28D8, 53786 }, + { 0x28B4, 53790 }, + { 0x28D0, 53794 }, + { 0x28AA, 53798 }, + { 0x28B8, 53802 }, + { 0x039F, 53806 }, + { 0x28BE, 53810 }, + { 0x039D, 53814 }, + { 0x0399, 53818 }, + { 0x28CE, 53822 }, + { 0x28AC, 53826 }, + { 0x28B6, 53830 }, + { 0x28B0, 53834 }, + { 0x28AE, 53838 }, + { 0x28BC, 53842 }, + { 0x28C0, 53846 }, + { 0x28EA, 53850 }, + { 0x03A3, 53854 }, + { 0x03A1, 53858 }, + { 0x28BA, 53862 }, + { 0x28EC, 53866 }, + { 0x28F2, 53871 }, + { 0x291C, 53876 }, + { 0x28FA, 53881 }, + { 0x28E4, 53886 }, + { 0x28DC, 53891 }, + { 0x28F4, 53896 }, + { 0x28E2, 53901 }, + { 0x28E6, 53906 }, + { 0x28E0, 53911 }, + { 0x2915, 53916 }, + { 0x2917, 53921 }, + { 0x290E, 53926 }, + { 0x290F, 53930 }, + { 0x290D, 53934 }, + { 0x2912, 53937 }, + { 0x2911, 53941 }, + { 0x2913, 53945 }, + { 0x2910, 53949 }, + { 0x28C7, 53952 }, + { 0x28D3, 53956 }, + { 0x28C1, 53960 }, + { 0x28C3, 53964 }, + { 0x28C9, 53968 }, + { 0x28CB, 53972 }, + { 0x28D1, 53976 }, + { 0x03A4, 53980 }, + { 0x28B1, 53984 }, + { 0x039A, 53988 }, + { 0x28D5, 53992 }, + { 0x28C5, 53996 }, + { 0x28F7, 54000 }, + { 0x28DD, 54006 }, + { 0x2901, 54012 }, + { 0x28EF, 54018 }, + { 0x28FD, 54024 }, + { 0x28FB, 54030 }, + { 0x28E7, 54036 }, + { 0x28F5, 54042 }, + { 0x28ED, 54048 }, + { 0x2903, 54054 }, + { 0x28FF, 54060 }, + { 0x2907, 54066 }, + { 0x2909, 54072 }, + { 0x290B, 54078 }, + { 0x2905, 54084 }, + { 0x28D9, 54090 }, + { 0x28D7, 54094 }, + { 0x28B3, 54098 }, + { 0x28CF, 54102 }, + { 0x28A9, 54106 }, + { 0x28B7, 54110 }, + { 0x039E, 54114 }, + { 0x28BD, 54118 }, + { 0x039C, 54122 }, + { 0x0398, 54126 }, + { 0x28CD, 54130 }, + { 0x28AB, 54134 }, + { 0x28B5, 54138 }, + { 0x28AF, 54142 }, + { 0x28AD, 54146 }, + { 0x28BB, 54150 }, + { 0x28BF, 54154 }, + { 0x28E9, 54158 }, + { 0x03A2, 54162 }, + { 0x03A0, 54166 }, + { 0x28B9, 54170 }, + { 0x28EB, 54174 }, + { 0x28F1, 54179 }, + { 0x291B, 54184 }, + { 0x28F9, 54189 }, + { 0x28E3, 54194 }, + { 0x28DB, 54199 }, + { 0x28F3, 54204 }, + { 0x28E1, 54209 }, + { 0x28E5, 54214 }, + { 0x28DF, 54219 }, + { 0x2914, 54224 }, + { 0x2916, 54229 }, + { 0x2921, 54234 }, + { 0x2918, 54238 }, + { 0x2919, 54242 }, + { 0x291A, 54246 }, + { 0x2923, 54250 }, + { 0x9044, 54253 }, + { 0x9066, 54256 }, + { 0x959C, 54258 }, + { 0x91F2, 54259 }, + { 0x91D5, 54262 }, + { 0x2809, 54264 }, + { 0x238D, 54265 }, + { 0x1CA0, 54270 }, + { 0x2A2C, 54271 }, + { 0x2A2D, 54275 }, + { 0x9194, 54279 }, + { 0x9036, 54281 }, + { 0x3E50, 54282 }, + { 0x3E4C, 54285 }, + { 0x23CB, 54287 }, + { 0x006F, 54291 }, + { 0x1D5E, 54293 }, + { 0x1D64, 54295 }, + { 0x8F8F, 54297 }, + { 0x8F90, 54298 }, + { 0x929E, 54300 }, + { 0x8200, 54302 }, + { 0x81FD, 54305 }, + { 0x22B9, 54309 }, + { 0x22BA, 54313 }, + { 0x81FF, 54317 }, + { 0x81FE, 54321 }, + { 0x22BB, 54325 }, + { 0x22B8, 54329 }, + { 0x81FC, 54333 }, + { 0x8F62, 54337 }, + { 0x1FEA, 54339 }, + { 0x946D, 54344 }, + { 0x0004, 54346 }, + { 0x8D27, 54348 }, + { 0x8CF5, 54352 }, + { 0x8D28, 54356 }, + { 0x8D29, 54359 }, + { 0x8D2A, 54362 }, + { 0x8D2B, 54365 }, + { 0x8D2C, 54368 }, + { 0x8D2D, 54371 }, + { 0x8D2E, 54374 }, + { 0x8D2F, 54377 }, + { 0x8D30, 54380 }, + { 0x8D31, 54383 }, + { 0x8D32, 54386 }, + { 0x8D33, 54389 }, + { 0x8D34, 54392 }, + { 0x8D35, 54395 }, + { 0x8D36, 54398 }, + { 0x8D37, 54401 }, + { 0x8D38, 54404 }, + { 0x8D39, 54407 }, + { 0x8D3A, 54410 }, + { 0x8D3B, 54413 }, + { 0x8D3C, 54416 }, + { 0x8D3D, 54419 }, + { 0x8D3E, 54422 }, + { 0x8D3F, 54425 }, + { 0x8D40, 54428 }, + { 0x8D41, 54431 }, + { 0x8D42, 54434 }, + { 0x8D43, 54437 }, + { 0x8D44, 54440 }, + { 0x8D45, 54443 }, + { 0x8D46, 54446 }, + { 0x8D47, 54449 }, + { 0x8D48, 54452 }, + { 0x8D49, 54455 }, + { 0x8D4A, 54458 }, + { 0x8D4B, 54461 }, + { 0x8D4C, 54464 }, + { 0x8D4D, 54467 }, + { 0x8D4E, 54470 }, + { 0x8D4F, 54473 }, + { 0x8D50, 54476 }, + { 0x8D51, 54479 }, + { 0x8D52, 54482 }, + { 0x8D53, 54485 }, + { 0x8D54, 54488 }, + { 0x8D55, 54491 }, + { 0x8D56, 54494 }, + { 0x8D57, 54497 }, + { 0x8D58, 54500 }, + { 0x8CF6, 54503 }, + { 0x8CF7, 54506 }, + { 0x8CF8, 54509 }, + { 0x8CF9, 54512 }, + { 0x8CFA, 54515 }, + { 0x8CFB, 54518 }, + { 0x8CFC, 54521 }, + { 0x8CFD, 54524 }, + { 0x8CFE, 54527 }, + { 0x8CFF, 54530 }, + { 0x8D00, 54533 }, + { 0x8D01, 54536 }, + { 0x8D02, 54539 }, + { 0x8D03, 54542 }, + { 0x8D04, 54545 }, + { 0x8D05, 54548 }, + { 0x8D06, 54551 }, + { 0x8D07, 54554 }, + { 0x8D08, 54557 }, + { 0x8D09, 54560 }, + { 0x8D0A, 54563 }, + { 0x8D0B, 54566 }, + { 0x8D0C, 54569 }, + { 0x8D0D, 54572 }, + { 0x8D0E, 54575 }, + { 0x8D0F, 54578 }, + { 0x8D10, 54581 }, + { 0x8D11, 54584 }, + { 0x8D12, 54587 }, + { 0x8D13, 54590 }, + { 0x8D14, 54593 }, + { 0x8D15, 54596 }, + { 0x8D16, 54599 }, + { 0x8D17, 54602 }, + { 0x8D18, 54605 }, + { 0x8D19, 54608 }, + { 0x8D1A, 54611 }, + { 0x8D1B, 54614 }, + { 0x8D1C, 54617 }, + { 0x8D1D, 54620 }, + { 0x8D1E, 54623 }, + { 0x8D1F, 54626 }, + { 0x8D20, 54629 }, + { 0x8D21, 54632 }, + { 0x8D22, 54635 }, + { 0x8D23, 54638 }, + { 0x8D24, 54641 }, + { 0x8D25, 54644 }, + { 0x8D26, 54647 }, + { 0x95E0, 54650 }, + { 0x95F4, 54651 }, + { 0x1CDC, 54654 }, + { 0x25C5, 54656 }, + { 0x21F8, 54658 }, + { 0x2A09, 54660 }, + { 0x2746, 54662 }, + { 0x2A40, 54664 }, + { 0x29FE, 54666 }, + { 0x2A0C, 54669 }, + { 0x2717, 54672 }, + { 0x1C97, 54675 }, + { 0x2716, 54678 }, + { 0x25C1, 54681 }, + { 0x2626, 54686 }, + { 0x3E4F, 54688 }, + { 0x029C, 54691 }, + { 0x26A0, 54694 }, + { 0x23EB, 54697 }, + { 0x1C9E, 54700 }, + { 0x1CB3, 54704 }, + { 0x2BCB, 54706 }, + { 0x25C2, 54710 }, + { 0x1F2A, 54715 }, + { 0x1CA1, 54717 }, + { 0x2A36, 54719 }, + { 0x26CD, 54721 }, + { 0x26CF, 54724 }, + { 0x26CE, 54729 }, + { 0x267B, 54732 }, + { 0x267A, 54735 }, + { 0x2718, 54738 }, + { 0x1F27, 54742 }, + { 0x2121, 54744 }, + { 0x2126, 54748 }, + { 0x2122, 54752 }, + { 0x2125, 54756 }, + { 0x2124, 54760 }, + { 0x2129, 54764 }, + { 0x2128, 54768 }, + { 0x2127, 54772 }, + { 0x2123, 54776 }, + { 0x212A, 54780 }, + { 0x2680, 54784 }, + { 0x267F, 54787 }, + { 0x2A0D, 54790 }, + { 0x2729, 54793 }, + { 0x2A3F, 54796 }, + { 0x1E83, 54799 }, + { 0x26E7, 54801 }, + { 0x1CC7, 54803 }, + { 0x26E8, 54806 }, + { 0x1F28, 54808 }, + { 0x204F, 54810 }, + { 0x270F, 54813 }, + { 0x2711, 54818 }, + { 0x1F02, 54824 }, + { 0x1C96, 54830 }, + { 0x2A3A, 54833 }, + { 0x1CBC, 54836 }, + { 0x1F29, 54839 }, + { 0x2A38, 54841 }, + { 0x1C9F, 54845 }, + { 0x8FBC, 54849 }, + { 0x8FE5, 54850 }, + { 0x909A, 54852 }, + { 0x2296, 54854 }, + { 0x001D, 54856 }, + { 0x260F, 54858 }, + { 0x2610, 54863 }, + { 0x2692, 54871 }, + { 0x26A3, 54876 }, + { 0x26DA, 54886 }, + { 0x2822, 54891 }, + { 0x269D, 54896 }, + { 0x269F, 54901 }, + { 0x276C, 54906 }, + { 0x259D, 54911 }, + { 0x269A, 54916 }, + { 0x1EAC, 54919 }, + { 0x1E90, 54921 }, + { 0x8EF5, 54922 }, + { 0x901D, 54924 }, + { 0x8F38, 54925 }, + { 0x226C, 54927 }, + { 0x9468, 54929 }, + { 0x8F54, 54930 }, + { 0x1C92, 54932 }, + { 0x1C87, 54934 }, + { 0x2639, 54936 }, + { 0x8FFD, 54939 }, + { 0x905D, 54942 }, + { 0x9071, 54944 }, + { 0x2392, 54946 }, + { 0x22C4, 54948 }, + { 0x8F67, 54949 }, + { 0x1CD5, 54952 }, + { 0x947D, 54955 }, + { 0x92A4, 54957 }, + { 0x7C91, 54959 }, + { 0x7C92, 54963 }, + { 0x9138, 54967 }, + { 0x9173, 54969 }, + { 0x95E6, 54970 }, + { 0x1F00, 54971 }, + { 0x2A06, 54972 }, + { 0x1E73, 54974 }, + { 0x1D1C, 54976 }, + { 0x8F12, 54979 }, + { 0x7E49, 54981 }, + { 0x94F2, 54982 }, + { 0x2276, 54983 }, + { 0x1D29, 54984 }, + { 0x95EB, 54987 }, + { 0x2612, 54989 }, + { 0x9512, 54991 }, + { 0x8F7F, 54992 }, + { 0x4211, 54993 }, + { 0x4216, 54996 }, + { 0x4208, 54999 }, + { 0x420B, 55002 }, + { 0x420A, 55005 }, + { 0x420F, 55008 }, + { 0x420E, 55011 }, + { 0x4222, 55014 }, + { 0x4217, 55018 }, + { 0x421E, 55021 }, + { 0x4220, 55024 }, + { 0x421F, 55027 }, + { 0x4212, 55030 }, + { 0x4213, 55033 }, + { 0x4214, 55036 }, + { 0x4221, 55039 }, + { 0x421A, 55042 }, + { 0x421B, 55045 }, + { 0x421C, 55048 }, + { 0x421D, 55051 }, + { 0x420C, 55054 }, + { 0x4215, 55057 }, + { 0x4219, 55060 }, + { 0x4210, 55063 }, + { 0x4209, 55066 }, + { 0x4218, 55069 }, + { 0x420D, 55072 }, + { 0x8EFA, 55075 }, + { 0x8F6B, 55076 }, + { 0x6F7A, 55077 }, + { 0x6F7C, 55081 }, + { 0x6F7E, 55085 }, + { 0x6F83, 55089 }, + { 0x6F7F, 55093 }, + { 0x6F82, 55097 }, + { 0x6F81, 55101 }, + { 0x6F86, 55105 }, + { 0x6F7D, 55109 }, + { 0x6F85, 55113 }, + { 0x6F84, 55117 }, + { 0x6F80, 55121 }, + { 0x6F70, 55125 }, + { 0x6F6C, 55130 }, + { 0x6F73, 55135 }, + { 0x6F6E, 55140 }, + { 0x6F6B, 55145 }, + { 0x6F72, 55150 }, + { 0x6F75, 55155 }, + { 0x6F71, 55160 }, + { 0x6F6D, 55165 }, + { 0x6F74, 55170 }, + { 0x6F6F, 55175 }, + { 0x6F76, 55180 }, + { 0x6F4D, 55185 }, + { 0x6F64, 55189 }, + { 0x6F53, 55193 }, + { 0x6F5F, 55197 }, + { 0x6F50, 55201 }, + { 0x6F57, 55205 }, + { 0x6F55, 55209 }, + { 0x6F4E, 55213 }, + { 0x6F69, 55217 }, + { 0x6F66, 55221 }, + { 0x6F61, 55225 }, + { 0x6F62, 55229 }, + { 0x6F68, 55233 }, + { 0x6F6A, 55237 }, + { 0x6F5D, 55241 }, + { 0x6F5C, 55245 }, + { 0x6F67, 55249 }, + { 0x6F65, 55253 }, + { 0x6F54, 55257 }, + { 0x6F5A, 55261 }, + { 0x6F60, 55265 }, + { 0x6F51, 55269 }, + { 0x6F56, 55273 }, + { 0x6F4F, 55277 }, + { 0x6F52, 55281 }, + { 0x6F63, 55285 }, + { 0x6F5E, 55289 }, + { 0x6F58, 55293 }, + { 0x6F5B, 55297 }, + { 0x6F59, 55301 }, + { 0x6F79, 55305 }, + { 0x6F7B, 55311 }, + { 0x6F78, 55317 }, + { 0x6F77, 55323 }, + { 0x90DB, 55329 }, + { 0x22BE, 55330 }, + { 0x2259, 55333 }, + { 0x928F, 55336 }, + { 0x2BDC, 55339 }, + { 0x2D08, 55344 }, + { 0x2CF3, 55346 }, + { 0x2CF8, 55349 }, + { 0x2D07, 55352 }, + { 0x2CFB, 55355 }, + { 0x2D00, 55358 }, + { 0x2CF4, 55361 }, + { 0x2CF7, 55364 }, + { 0x2D05, 55367 }, + { 0x2CFE, 55370 }, + { 0x2CFC, 55373 }, + { 0x2D02, 55376 }, + { 0x2D03, 55379 }, + { 0x2CF5, 55382 }, + { 0x2CFA, 55385 }, + { 0x2D06, 55388 }, + { 0x2CFF, 55391 }, + { 0x2D04, 55394 }, + { 0x2CFD, 55397 }, + { 0x2D01, 55400 }, + { 0x2CF6, 55403 }, + { 0x2CF9, 55406 }, + { 0x2CE9, 55409 }, + { 0x2D2D, 55412 }, + { 0x2D30, 55415 }, + { 0x2D31, 55418 }, + { 0x2CEC, 55421 }, + { 0x2CF2, 55424 }, + { 0x2CEB, 55427 }, + { 0x2CE5, 55430 }, + { 0x2CD8, 55433 }, + { 0x2CE6, 55436 }, + { 0x2CDD, 55439 }, + { 0x2D2B, 55442 }, + { 0x2D2F, 55445 }, + { 0x2D32, 55448 }, + { 0x2CD5, 55451 }, + { 0x2CDB, 55454 }, + { 0x2D2C, 55457 }, + { 0x2D2E, 55460 }, + { 0x2CEE, 55463 }, + { 0x2CEF, 55466 }, + { 0x2D23, 55469 }, + { 0x2CF1, 55472 }, + { 0x2CF0, 55475 }, + { 0x2D25, 55478 }, + { 0x2CEA, 55481 }, + { 0x2D13, 55484 }, + { 0x2D0B, 55487 }, + { 0x2CE8, 55490 }, + { 0x2CE1, 55493 }, + { 0x2D22, 55496 }, + { 0x2D1F, 55499 }, + { 0x2D21, 55502 }, + { 0x2CED, 55505 }, + { 0x2D29, 55508 }, + { 0x2D24, 55511 }, + { 0x2D09, 55514 }, + { 0x2CE7, 55517 }, + { 0x2CD7, 55520 }, + { 0x2D12, 55523 }, + { 0x2CD9, 55526 }, + { 0x2CDA, 55529 }, + { 0x2D1A, 55532 }, + { 0x2CE4, 55535 }, + { 0x2CDF, 55538 }, + { 0x2CE0, 55541 }, + { 0x2D1E, 55544 }, + { 0x2D20, 55547 }, + { 0x2CD6, 55550 }, + { 0x2CDC, 55553 }, + { 0x2D2A, 55556 }, + { 0x2D0A, 55559 }, + { 0x2D16, 55562 }, + { 0x2D17, 55565 }, + { 0x2CDE, 55568 }, + { 0x2D0E, 55571 }, + { 0x2D15, 55574 }, + { 0x2D1C, 55577 }, + { 0x2D14, 55580 }, + { 0x2D0C, 55583 }, + { 0x2D1B, 55586 }, + { 0x2D10, 55589 }, + { 0x2CE3, 55592 }, + { 0x2CE2, 55595 }, + { 0x2D26, 55598 }, + { 0x2D28, 55601 }, + { 0x2D0F, 55604 }, + { 0x2D27, 55607 }, + { 0x2D18, 55610 }, + { 0x2D19, 55613 }, + { 0x2D0D, 55616 }, + { 0x2D11, 55619 }, + { 0x2D1D, 55622 }, + { 0x2BDB, 55625 }, + { 0x0EB1, 55630 }, + { 0x0EB4, 55633 }, + { 0x0EBA, 55636 }, + { 0x0EB3, 55639 }, + { 0x0EAE, 55642 }, + { 0x0EAA, 55645 }, + { 0x0EAF, 55648 }, + { 0x0EAD, 55651 }, + { 0x0F07, 55654 }, + { 0x0EA8, 55657 }, + { 0x0EAB, 55660 }, + { 0x0EB6, 55663 }, + { 0x0EB7, 55666 }, + { 0x0EE8, 55669 }, + { 0x0EB9, 55672 }, + { 0x0EB8, 55675 }, + { 0x0EF4, 55678 }, + { 0x0EB2, 55681 }, + { 0x38E9, 55684 }, + { 0x0EED, 55687 }, + { 0x38DF, 55690 }, + { 0x0F03, 55693 }, + { 0x0EC9, 55696 }, + { 0x38DA, 55699 }, + { 0x0EDE, 55702 }, + { 0x0EE3, 55705 }, + { 0x0EDD, 55708 }, + { 0x0ED9, 55711 }, + { 0x0ED6, 55714 }, + { 0x0EDA, 55717 }, + { 0x0ED8, 55720 }, + { 0x0EB5, 55723 }, + { 0x0F00, 55726 }, + { 0x0EEF, 55729 }, + { 0x0EBC, 55732 }, + { 0x0EB0, 55735 }, + { 0x0EC1, 55738 }, + { 0x0EF5, 55741 }, + { 0x0EF0, 55744 }, + { 0x38E5, 55747 }, + { 0x0EEB, 55750 }, + { 0x0EEC, 55753 }, + { 0x38E4, 55756 }, + { 0x0EC4, 55759 }, + { 0x0F04, 55762 }, + { 0x0F05, 55765 }, + { 0x0EBE, 55768 }, + { 0x0ECF, 55771 }, + { 0x38E2, 55774 }, + { 0x0EC7, 55777 }, + { 0x38DB, 55780 }, + { 0x0EC2, 55783 }, + { 0x38D6, 55786 }, + { 0x0EC0, 55789 }, + { 0x38D7, 55792 }, + { 0x0ED5, 55795 }, + { 0x0ED7, 55798 }, + { 0x0EA9, 55801 }, + { 0x0EAC, 55804 }, + { 0x38D0, 55807 }, + { 0x0F01, 55810 }, + { 0x0EE4, 55813 }, + { 0x0EE9, 55816 }, + { 0x0EEA, 55819 }, + { 0x38DD, 55822 }, + { 0x38DE, 55825 }, + { 0x0EBB, 55828 }, + { 0x0EBD, 55831 }, + { 0x0EC6, 55834 }, + { 0x0EC8, 55837 }, + { 0x38D2, 55840 }, + { 0x38D4, 55843 }, + { 0x0EDF, 55846 }, + { 0x0EE0, 55849 }, + { 0x0EE2, 55852 }, + { 0x0EE1, 55855 }, + { 0x38E7, 55858 }, + { 0x38D1, 55861 }, + { 0x38CE, 55864 }, + { 0x38CF, 55867 }, + { 0x0F06, 55870 }, + { 0x0EFB, 55873 }, + { 0x0EF6, 55876 }, + { 0x0EF1, 55879 }, + { 0x0EEE, 55882 }, + { 0x0EF3, 55885 }, + { 0x0EF2, 55888 }, + { 0x0EC5, 55891 }, + { 0x0ED3, 55894 }, + { 0x0EC3, 55897 }, + { 0x0F02, 55900 }, + { 0x38E8, 55903 }, + { 0x0EFE, 55906 }, + { 0x0ED0, 55909 }, + { 0x38E1, 55912 }, + { 0x0ED2, 55915 }, + { 0x0ED1, 55918 }, + { 0x38DC, 55921 }, + { 0x0EBF, 55924 }, + { 0x0EDC, 55927 }, + { 0x0EE6, 55930 }, + { 0x0EFA, 55933 }, + { 0x0EFC, 55936 }, + { 0x0EFF, 55939 }, + { 0x0ECD, 55942 }, + { 0x38E3, 55945 }, + { 0x0EF8, 55948 }, + { 0x0ECE, 55951 }, + { 0x0ECC, 55954 }, + { 0x38D8, 55957 }, + { 0x38E6, 55960 }, + { 0x38EA, 55963 }, + { 0x0EE5, 55966 }, + { 0x0ECA, 55969 }, + { 0x0ECB, 55972 }, + { 0x38D3, 55975 }, + { 0x38D5, 55978 }, + { 0x0EDB, 55981 }, + { 0x0EFD, 55984 }, + { 0x0EF7, 55987 }, + { 0x0ED4, 55990 }, + { 0x38E0, 55993 }, + { 0x38D9, 55996 }, + { 0x0EE7, 55999 }, + { 0x0EF9, 56002 }, + { 0x0F62, 56005 }, + { 0x0F65, 56008 }, + { 0x0F6A, 56011 }, + { 0x0F64, 56014 }, + { 0x0F5F, 56017 }, + { 0x0F53, 56020 }, + { 0x0F60, 56023 }, + { 0x0F57, 56026 }, + { 0x0F50, 56029 }, + { 0x0F56, 56032 }, + { 0x0F66, 56035 }, + { 0x0F67, 56038 }, + { 0x0F93, 56041 }, + { 0x0F69, 56044 }, + { 0x0F68, 56047 }, + { 0x0F98, 56050 }, + { 0x0F63, 56053 }, + { 0x0F85, 56056 }, + { 0x0F6F, 56059 }, + { 0x0F61, 56062 }, + { 0x0F5B, 56065 }, + { 0x3B56, 56068 }, + { 0x3B59, 56071 }, + { 0x3B51, 56074 }, + { 0x0F92, 56077 }, + { 0x0F91, 56080 }, + { 0x3B60, 56083 }, + { 0x0F96, 56086 }, + { 0x3B47, 56089 }, + { 0x0FA7, 56092 }, + { 0x3B4D, 56095 }, + { 0x0F78, 56098 }, + { 0x3B5E, 56101 }, + { 0x0F9F, 56104 }, + { 0x0F9D, 56107 }, + { 0x0FA0, 56110 }, + { 0x0F9E, 56113 }, + { 0x0F52, 56116 }, + { 0x3B49, 56119 }, + { 0x0F89, 56122 }, + { 0x3B45, 56125 }, + { 0x0F84, 56128 }, + { 0x0F83, 56131 }, + { 0x0F54, 56134 }, + { 0x0F55, 56137 }, + { 0x3B32, 56140 }, + { 0x3B4F, 56143 }, + { 0x0F8D, 56146 }, + { 0x3B4C, 56149 }, + { 0x0F8B, 56152 }, + { 0x0F5E, 56155 }, + { 0x0F59, 56158 }, + { 0x0F75, 56161 }, + { 0x0F5A, 56164 }, + { 0x0F8F, 56167 }, + { 0x0F90, 56170 }, + { 0x0F51, 56173 }, + { 0x3B34, 56176 }, + { 0x3B37, 56179 }, + { 0x0FA1, 56182 }, + { 0x0F94, 56185 }, + { 0x0FA6, 56188 }, + { 0x0FA2, 56191 }, + { 0x0FA3, 56194 }, + { 0x0F6B, 56197 }, + { 0x0F82, 56200 }, + { 0x0F6D, 56203 }, + { 0x0F6E, 56206 }, + { 0x3B61, 56209 }, + { 0x3B4A, 56212 }, + { 0x0F58, 56215 }, + { 0x0F76, 56218 }, + { 0x3B57, 56221 }, + { 0x3B55, 56224 }, + { 0x3B58, 56227 }, + { 0x3B39, 56230 }, + { 0x3B36, 56233 }, + { 0x0F73, 56236 }, + { 0x0F97, 56239 }, + { 0x0F8A, 56242 }, + { 0x0F8E, 56245 }, + { 0x3B44, 56248 }, + { 0x0F88, 56251 }, + { 0x0F87, 56254 }, + { 0x3B33, 56257 }, + { 0x0F70, 56260 }, + { 0x0F71, 56263 }, + { 0x3B5A, 56266 }, + { 0x0F9B, 56269 }, + { 0x3B50, 56272 }, + { 0x0F8C, 56275 }, + { 0x0F80, 56278 }, + { 0x0F7F, 56281 }, + { 0x0F5D, 56284 }, + { 0x0F5C, 56287 }, + { 0x0F96, 56290 }, + { 0x0F72, 56293 }, + { 0x0F99, 56296 }, + { 0x0FA4, 56299 }, + { 0x0FA5, 56302 }, + { 0x3B42, 56305 }, + { 0x3B3A, 56308 }, + { 0x3B3B, 56311 }, + { 0x3B5D, 56314 }, + { 0x3B5C, 56317 }, + { 0x0F9C, 56320 }, + { 0x0F86, 56323 }, + { 0x3B62, 56326 }, + { 0x0F7E, 56329 }, + { 0x0F94, 56332 }, + { 0x3B5F, 56335 }, + { 0x3B48, 56338 }, + { 0x3B46, 56341 }, + { 0x0F7A, 56344 }, + { 0x0F7B, 56347 }, + { 0x3B53, 56350 }, + { 0x3B54, 56353 }, + { 0x0F97, 56356 }, + { 0x0F9A, 56359 }, + { 0x0F95, 56362 }, + { 0x3B4E, 56365 }, + { 0x0F74, 56368 }, + { 0x3B3F, 56371 }, + { 0x0F7C, 56374 }, + { 0x3B3C, 56377 }, + { 0x0F81, 56380 }, + { 0x3B35, 56383 }, + { 0x0F6C, 56386 }, + { 0x3B3D, 56389 }, + { 0x0F79, 56392 }, + { 0x3B40, 56395 }, + { 0x0F77, 56398 }, + { 0x3B52, 56401 }, + { 0x3B3E, 56404 }, + { 0x3B38, 56407 }, + { 0x3B4B, 56410 }, + { 0x0F7D, 56413 }, + { 0x3B41, 56416 }, + { 0x0F95, 56419 }, + { 0x3B5B, 56422 }, + { 0x3B43, 56425 }, + { 0x0F09, 56428 }, + { 0x0F0E, 56431 }, + { 0x0F1D, 56434 }, + { 0x0F11, 56437 }, + { 0x0F16, 56440 }, + { 0x0F0A, 56443 }, + { 0x0F0D, 56446 }, + { 0x0F1B, 56449 }, + { 0x0F14, 56452 }, + { 0x0F12, 56455 }, + { 0x0F18, 56458 }, + { 0x0F19, 56461 }, + { 0x0F0B, 56464 }, + { 0x0F10, 56467 }, + { 0x0F1C, 56470 }, + { 0x0F15, 56473 }, + { 0x0F1A, 56476 }, + { 0x0F1E, 56479 }, + { 0x0F1F, 56482 }, + { 0x0F40, 56485 }, + { 0x3B2F, 56488 }, + { 0x0F42, 56491 }, + { 0x0F43, 56494 }, + { 0x0F28, 56497 }, + { 0x0F2A, 56500 }, + { 0x0F2B, 56503 }, + { 0x0F31, 56506 }, + { 0x0F35, 56509 }, + { 0x0F13, 56512 }, + { 0x0F17, 56515 }, + { 0x0F0C, 56518 }, + { 0x0F0F, 56521 }, + { 0x0F4B, 56524 }, + { 0x0F22, 56527 }, + { 0x0F23, 56530 }, + { 0x3B24, 56533 }, + { 0x3B26, 56536 }, + { 0x3B27, 56539 }, + { 0x0F3D, 56542 }, + { 0x0F44, 56545 }, + { 0x0F41, 56548 }, + { 0x3B2B, 56551 }, + { 0x3B2D, 56554 }, + { 0x3B2E, 56557 }, + { 0x0F27, 56560 }, + { 0x0F4E, 56563 }, + { 0x0F29, 56566 }, + { 0x0F32, 56569 }, + { 0x0F34, 56572 }, + { 0x0F20, 56575 }, + { 0x0F4C, 56578 }, + { 0x0F3F, 56581 }, + { 0x3B1D, 56584 }, + { 0x0F30, 56587 }, + { 0x0F2F, 56590 }, + { 0x0F36, 56593 }, + { 0x0F38, 56596 }, + { 0x0F3C, 56599 }, + { 0x3B23, 56602 }, + { 0x0F3B, 56605 }, + { 0x0F46, 56608 }, + { 0x0F24, 56611 }, + { 0x3B25, 56614 }, + { 0x0F3E, 56617 }, + { 0x3B2C, 56620 }, + { 0x3B29, 56623 }, + { 0x3B2A, 56626 }, + { 0x3B1C, 56629 }, + { 0x0F4F, 56632 }, + { 0x3B1B, 56635 }, + { 0x3B21, 56638 }, + { 0x3B20, 56641 }, + { 0x0F21, 56644 }, + { 0x0F25, 56647 }, + { 0x0F26, 56650 }, + { 0x3B1E, 56653 }, + { 0x3B1F, 56656 }, + { 0x0F2C, 56659 }, + { 0x3B22, 56662 }, + { 0x0F37, 56665 }, + { 0x0F3A, 56668 }, + { 0x0F08, 56671 }, + { 0x3B28, 56674 }, + { 0x0F4D, 56677 }, + { 0x0F2D, 56680 }, + { 0x0F2E, 56683 }, + { 0x0F39, 56686 }, + { 0x3B30, 56689 }, + { 0x3B31, 56692 }, + { 0x0F49, 56695 }, + { 0x0F48, 56698 }, + { 0x0F45, 56701 }, + { 0x0F33, 56704 }, + { 0x0F47, 56707 }, + { 0x0F4A, 56710 }, + { 0x4980, 56713 }, + { 0x497F, 56718 }, + { 0x4983, 56722 }, + { 0x4984, 56726 }, + { 0x4982, 56730 }, + { 0x4981, 56734 }, + { 0x4986, 56738 }, + { 0x498B, 56742 }, + { 0x4987, 56746 }, + { 0x498A, 56750 }, + { 0x4989, 56754 }, + { 0x498E, 56758 }, + { 0x4985, 56762 }, + { 0x498D, 56766 }, + { 0x498C, 56770 }, + { 0x4988, 56774 }, + { 0x497A, 56778 }, + { 0x497D, 56782 }, + { 0x497B, 56786 }, + { 0x497E, 56790 }, + { 0x497C, 56794 }, + { 0x495D, 56798 }, + { 0x495E, 56802 }, + { 0x4963, 56806 }, + { 0x4967, 56810 }, + { 0x4966, 56814 }, + { 0x496F, 56818 }, + { 0x4964, 56822 }, + { 0x4962, 56826 }, + { 0x496E, 56830 }, + { 0x4970, 56834 }, + { 0x4971, 56838 }, + { 0x4972, 56842 }, + { 0x495F, 56846 }, + { 0x4969, 56850 }, + { 0x496C, 56854 }, + { 0x4960, 56858 }, + { 0x4979, 56862 }, + { 0x4973, 56866 }, + { 0x4975, 56870 }, + { 0x496B, 56874 }, + { 0x4968, 56878 }, + { 0x4965, 56882 }, + { 0x4977, 56886 }, + { 0x4978, 56890 }, + { 0x496A, 56894 }, + { 0x496D, 56898 }, + { 0x4961, 56902 }, + { 0x4974, 56906 }, + { 0x4976, 56911 }, + { 0x4696, 56916 }, + { 0x46A2, 56919 }, + { 0x46A1, 56922 }, + { 0x469E, 56925 }, + { 0x469F, 56928 }, + { 0x46A6, 56931 }, + { 0x4697, 56934 }, + { 0x4693, 56937 }, + { 0x4699, 56940 }, + { 0x469C, 56943 }, + { 0x46A4, 56946 }, + { 0x46A5, 56949 }, + { 0x469A, 56952 }, + { 0x469B, 56955 }, + { 0x4698, 56958 }, + { 0x4692, 56961 }, + { 0x4694, 56964 }, + { 0x46A3, 56967 }, + { 0x469D, 56970 }, + { 0x46A0, 56973 }, + { 0x4695, 56976 }, + { 0x46A7, 56979 }, + { 0x46AB, 56982 }, + { 0x46A9, 56986 }, + { 0x46A8, 56989 }, + { 0x46AA, 56992 }, + { 0x9320, 56995 }, + { 0x0593, 56996 }, + { 0x0575, 56999 }, + { 0x0574, 57003 }, + { 0x055F, 57007 }, + { 0x0572, 57011 }, + { 0x056F, 57015 }, + { 0x0571, 57018 }, + { 0x0562, 57022 }, + { 0x0561, 57026 }, + { 0x0563, 57030 }, + { 0x0564, 57034 }, + { 0x0569, 57037 }, + { 0x056A, 57040 }, + { 0x056D, 57046 }, + { 0x0567, 57049 }, + { 0x0566, 57052 }, + { 0x0560, 57055 }, + { 0x0565, 57058 }, + { 0x056C, 57061 }, + { 0x0568, 57066 }, + { 0x0577, 57069 }, + { 0x056B, 57073 }, + { 0x3B75, 57076 }, + { 0x055B, 57080 }, + { 0x055D, 57083 }, + { 0x055C, 57086 }, + { 0x0552, 57089 }, + { 0x0557, 57093 }, + { 0x0553, 57096 }, + { 0x0551, 57099 }, + { 0x0558, 57102 }, + { 0x0547, 57105 }, + { 0x0542, 57108 }, + { 0x054B, 57111 }, + { 0x055A, 57114 }, + { 0x054A, 57119 }, + { 0x0545, 57122 }, + { 0x0544, 57126 }, + { 0x0548, 57130 }, + { 0x055E, 57133 }, + { 0x054C, 57136 }, + { 0x054D, 57139 }, + { 0x0555, 57143 }, + { 0x0556, 57146 }, + { 0x0549, 57150 }, + { 0x054F, 57153 }, + { 0x0546, 57157 }, + { 0x0541, 57160 }, + { 0x0550, 57163 }, + { 0x0559, 57167 }, + { 0x0554, 57171 }, + { 0x054E, 57174 }, + { 0x0543, 57177 }, + { 0x057C, 57180 }, + { 0x3B8B, 57183 }, + { 0x058C, 57188 }, + { 0x3BA0, 57191 }, + { 0x3B97, 57196 }, + { 0x0579, 57201 }, + { 0x3B9E, 57204 }, + { 0x3B88, 57209 }, + { 0x057F, 57214 }, + { 0x0583, 57217 }, + { 0x3B9F, 57220 }, + { 0x3B91, 57225 }, + { 0x0586, 57230 }, + { 0x3B93, 57233 }, + { 0x0588, 57238 }, + { 0x3B94, 57241 }, + { 0x058F, 57246 }, + { 0x3B99, 57249 }, + { 0x0592, 57254 }, + { 0x3B9C, 57257 }, + { 0x0580, 57262 }, + { 0x3B8E, 57265 }, + { 0x057D, 57270 }, + { 0x3B9D, 57273 }, + { 0x3B8C, 57278 }, + { 0x0581, 57283 }, + { 0x3B74, 57286 }, + { 0x3B8F, 57291 }, + { 0x0578, 57296 }, + { 0x3B87, 57299 }, + { 0x3B85, 57304 }, + { 0x3B86, 57309 }, + { 0x058A, 57314 }, + { 0x0590, 57317 }, + { 0x3B9A, 57320 }, + { 0x0591, 57325 }, + { 0x3B82, 57328 }, + { 0x3B81, 57334 }, + { 0x3B9B, 57340 }, + { 0x3B84, 57345 }, + { 0x3B83, 57353 }, + { 0x3B7A, 57361 }, + { 0x3B7B, 57365 }, + { 0x3B7F, 57369 }, + { 0x3B78, 57373 }, + { 0x3B7E, 57377 }, + { 0x3B79, 57381 }, + { 0x3B7D, 57385 }, + { 0x3B7C, 57390 }, + { 0x057B, 57394 }, + { 0x3B8A, 57397 }, + { 0x058B, 57402 }, + { 0x3B96, 57406 }, + { 0x0582, 57412 }, + { 0x3B90, 57416 }, + { 0x0585, 57422 }, + { 0x0587, 57426 }, + { 0x058D, 57430 }, + { 0x057A, 57434 }, + { 0x3B89, 57437 }, + { 0x0584, 57442 }, + { 0x3B92, 57445 }, + { 0x058E, 57450 }, + { 0x3B98, 57453 }, + { 0x057E, 57458 }, + { 0x3B8D, 57461 }, + { 0x0589, 57466 }, + { 0x3B95, 57469 }, + { 0x3B77, 57474 }, + { 0x3B80, 57478 }, + { 0x3BA1, 57483 }, + { 0x0595, 57487 }, + { 0x3B76, 57492 }, + { 0x0594, 57498 }, + { 0x0596, 57503 }, + { 0x0576, 57508 }, + { 0x0573, 57512 }, + { 0x056E, 57516 }, + { 0x0570, 57519 }, + { 0x0597, 57522 }, + { 0x0598, 57525 }, + { 0x22FD, 57528 }, + { 0x94AC, 57532 }, + { 0x921B, 57534 }, + { 0x921C, 57538 }, + { 0x91E2, 57545 }, + { 0x2803, 57547 }, + { 0x1C90, 57548 }, + { 0x2A10, 57549 }, + { 0x1CC3, 57552 }, + { 0x1D32, 57554 }, + { 0x9517, 57557 }, + { 0x4B75, 57560 }, + { 0x4B74, 57563 }, + { 0x4B3D, 57566 }, + { 0x4B3C, 57569 }, + { 0x4B3B, 57572 }, + { 0x4B7B, 57575 }, + { 0x4B70, 57577 }, + { 0x4B6C, 57581 }, + { 0x4B72, 57585 }, + { 0x4B6E, 57589 }, + { 0x4B6B, 57593 }, + { 0x4B71, 57597 }, + { 0x4B73, 57601 }, + { 0x4B6D, 57605 }, + { 0x4B6F, 57609 }, + { 0x4B7D, 57613 }, + { 0x4B7C, 57618 }, + { 0x4B7A, 57621 }, + { 0x4B3E, 57625 }, + { 0x4B44, 57628 }, + { 0x4B40, 57631 }, + { 0x4B46, 57634 }, + { 0x4B42, 57637 }, + { 0x4B3F, 57640 }, + { 0x4B45, 57643 }, + { 0x4B47, 57646 }, + { 0x4B60, 57649 }, + { 0x4B4D, 57652 }, + { 0x4B5B, 57655 }, + { 0x4B4A, 57658 }, + { 0x4B6A, 57661 }, + { 0x4B41, 57664 }, + { 0x4B4F, 57667 }, + { 0x4B48, 57670 }, + { 0x4B65, 57673 }, + { 0x4B62, 57676 }, + { 0x4B5D, 57679 }, + { 0x4B5E, 57682 }, + { 0x4B64, 57685 }, + { 0x4B69, 57688 }, + { 0x4B59, 57691 }, + { 0x4B43, 57694 }, + { 0x4B66, 57697 }, + { 0x4B63, 57700 }, + { 0x4B61, 57703 }, + { 0x4B4E, 57706 }, + { 0x4B54, 57709 }, + { 0x4B5C, 57712 }, + { 0x4B4B, 57715 }, + { 0x4B50, 57718 }, + { 0x4B49, 57721 }, + { 0x4B4C, 57724 }, + { 0x4B58, 57727 }, + { 0x4B51, 57730 }, + { 0x4B5F, 57733 }, + { 0x4B57, 57736 }, + { 0x4B67, 57739 }, + { 0x4B68, 57742 }, + { 0x4B5A, 57745 }, + { 0x4B52, 57748 }, + { 0x4B56, 57751 }, + { 0x4B53, 57754 }, + { 0x4B55, 57757 }, + { 0x4B78, 57760 }, + { 0x4B7E, 57763 }, + { 0x4B79, 57767 }, + { 0x4B77, 57770 }, + { 0x4B76, 57773 }, + { 0x2B16, 57776 }, + { 0x2AE8, 57780 }, + { 0x2AE9, 57783 }, + { 0x2B44, 57787 }, + { 0x2B0B, 57790 }, + { 0x2AEB, 57793 }, + { 0x2AFF, 57796 }, + { 0x2B23, 57799 }, + { 0x2B24, 57802 }, + { 0x2AC9, 57805 }, + { 0x2AF9, 57808 }, + { 0x2B46, 57811 }, + { 0x2B7E, 57814 }, + { 0x2B33, 57817 }, + { 0x2B7D, 57820 }, + { 0x2B18, 57823 }, + { 0x2AD5, 57826 }, + { 0x2B3F, 57829 }, + { 0x2ACE, 57832 }, + { 0x2ACF, 57835 }, + { 0x2B40, 57838 }, + { 0x2B0D, 57841 }, + { 0x2B43, 57844 }, + { 0x2AC7, 57847 }, + { 0x2B5E, 57850 }, + { 0x2B08, 57853 }, + { 0x2B96, 57856 }, + { 0x2B61, 57859 }, + { 0x2B62, 57862 }, + { 0x2B0F, 57865 }, + { 0x2B59, 57868 }, + { 0x2B0E, 57871 }, + { 0x2ADE, 57874 }, + { 0x2ACD, 57877 }, + { 0x2AFD, 57880 }, + { 0x2B2B, 57884 }, + { 0x2B5D, 57887 }, + { 0x2B8A, 57890 }, + { 0x2B74, 57893 }, + { 0x2B4F, 57896 }, + { 0x2B64, 57899 }, + { 0x2B2D, 57902 }, + { 0x2B82, 57907 }, + { 0x2B65, 57910 }, + { 0x2B3A, 57913 }, + { 0x2B69, 57916 }, + { 0x2B19, 57919 }, + { 0x2B1D, 57922 }, + { 0x2B8C, 57925 }, + { 0x2B32, 57928 }, + { 0x2B05, 57931 }, + { 0x2AD3, 57934 }, + { 0x2B95, 57938 }, + { 0x2B98, 57941 }, + { 0x2B76, 57944 }, + { 0x2B22, 57947 }, + { 0x2B1C, 57950 }, + { 0x2B89, 57953 }, + { 0x2B63, 57956 }, + { 0x2B93, 57959 }, + { 0x2B6F, 57962 }, + { 0x2B6D, 57965 }, + { 0x2B84, 57968 }, + { 0x2B20, 57971 }, + { 0x2B06, 57976 }, + { 0x2B7F, 57979 }, + { 0x2B8E, 57982 }, + { 0x2ACC, 57985 }, + { 0x2B5A, 57988 }, + { 0x2AEF, 57991 }, + { 0x2B26, 57994 }, + { 0x2B12, 57997 }, + { 0x2AF1, 58000 }, + { 0x2B7B, 58003 }, + { 0x2B79, 58006 }, + { 0x2AD0, 58009 }, + { 0x2B2A, 58012 }, + { 0x2AC8, 58015 }, + { 0x2B6E, 58018 }, + { 0x2AFC, 58021 }, + { 0x2B48, 58025 }, + { 0x2B10, 58028 }, + { 0x2B97, 58031 }, + { 0x2AD7, 58034 }, + { 0x2B45, 58038 }, + { 0x2B73, 58041 }, + { 0x2B3D, 58044 }, + { 0x2AEE, 58047 }, + { 0x2B8B, 58050 }, + { 0x2AE0, 58053 }, + { 0x2B4A, 58056 }, + { 0x2B3E, 58059 }, + { 0x2B31, 58062 }, + { 0x2B02, 58065 }, + { 0x2B13, 58068 }, + { 0x2B83, 58071 }, + { 0x2B28, 58074 }, + { 0x2B11, 58077 }, + { 0x2B68, 58080 }, + { 0x2B56, 58083 }, + { 0x2B58, 58087 }, + { 0x2B7C, 58090 }, + { 0x2B6A, 58093 }, + { 0x2AF6, 58096 }, + { 0x2ADA, 58099 }, + { 0x2AE3, 58102 }, + { 0x2B35, 58105 }, + { 0x2B91, 58108 }, + { 0x2B55, 58111 }, + { 0x2B47, 58114 }, + { 0x2AED, 58117 }, + { 0x2AE1, 58120 }, + { 0x2B51, 58123 }, + { 0x2AD4, 58126 }, + { 0x2B14, 58129 }, + { 0x2AE6, 58132 }, + { 0x2AD2, 58135 }, + { 0x2AD1, 58138 }, + { 0x2B2C, 58141 }, + { 0x2B85, 58144 }, + { 0x2B9C, 58147 }, + { 0x2B88, 58150 }, + { 0x2B39, 58153 }, + { 0x2B52, 58156 }, + { 0x2B03, 58159 }, + { 0x2B81, 58162 }, + { 0x2AD8, 58165 }, + { 0x2B27, 58168 }, + { 0x2B70, 58171 }, + { 0x2AE4, 58174 }, + { 0x2AD9, 58177 }, + { 0x2ADC, 58180 }, + { 0x2AF5, 58185 }, + { 0x2B41, 58188 }, + { 0x2B60, 58191 }, + { 0x2AFE, 58194 }, + { 0x2B72, 58197 }, + { 0x2AFA, 58202 }, + { 0x2ACA, 58206 }, + { 0x2B71, 58209 }, + { 0x2B21, 58212 }, + { 0x2AF0, 58215 }, + { 0x2B00, 58218 }, + { 0x2B7A, 58221 }, + { 0x2B34, 58224 }, + { 0x2ADB, 58227 }, + { 0x2B3B, 58230 }, + { 0x2B1A, 58233 }, + { 0x2B36, 58236 }, + { 0x2B29, 58239 }, + { 0x2AD6, 58242 }, + { 0x2B53, 58245 }, + { 0x2B99, 58248 }, + { 0x2B38, 58251 }, + { 0x2B1B, 58254 }, + { 0x2B8D, 58257 }, + { 0x2B30, 58260 }, + { 0x2AEC, 58263 }, + { 0x2B75, 58266 }, + { 0x2B4B, 58269 }, + { 0x2B5F, 58272 }, + { 0x2B3C, 58275 }, + { 0x2B66, 58278 }, + { 0x2B07, 58281 }, + { 0x2AF2, 58284 }, + { 0x2B0A, 58287 }, + { 0x2B2F, 58290 }, + { 0x2AFB, 58294 }, + { 0x2B1F, 58298 }, + { 0x2B9A, 58302 }, + { 0x2B1E, 58305 }, + { 0x2ADD, 58308 }, + { 0x2B54, 58312 }, + { 0x2B90, 58315 }, + { 0x2B4C, 58318 }, + { 0x2B4E, 58321 }, + { 0x2B09, 58324 }, + { 0x2ACB, 58327 }, + { 0x2B5B, 58330 }, + { 0x2B37, 58333 }, + { 0x2AF3, 58336 }, + { 0x2B0C, 58339 }, + { 0x2B78, 58342 }, + { 0x2B4D, 58346 }, + { 0x2B94, 58349 }, + { 0x2AF8, 58352 }, + { 0x2B9B, 58355 }, + { 0x2B5C, 58358 }, + { 0x2B15, 58361 }, + { 0x2B8F, 58364 }, + { 0x2B01, 58367 }, + { 0x2B57, 58370 }, + { 0x2B17, 58373 }, + { 0x2AEA, 58376 }, + { 0x2B42, 58379 }, + { 0x2B04, 58382 }, + { 0x2B77, 58385 }, + { 0x2B67, 58388 }, + { 0x2AF7, 58391 }, + { 0x2AE2, 58394 }, + { 0x2AE7, 58397 }, + { 0x2B6C, 58400 }, + { 0x2B87, 58403 }, + { 0x2B80, 58406 }, + { 0x2B49, 58409 }, + { 0x2AF4, 58412 }, + { 0x2B25, 58415 }, + { 0x2B2E, 58418 }, + { 0x2B50, 58421 }, + { 0x2AE5, 58424 }, + { 0x2ADF, 58427 }, + { 0x2B92, 58430 }, + { 0x2B6B, 58433 }, + { 0x2B86, 58436 }, + { 0x1D85, 58440 }, + { 0x90D2, 58442 }, + { 0x95C7, 58444 }, + { 0x7415, 58445 }, + { 0x7718, 58449 }, + { 0x7719, 58453 }, + { 0x771A, 58457 }, + { 0x771B, 58461 }, + { 0x771C, 58465 }, + { 0x771D, 58469 }, + { 0x771E, 58473 }, + { 0x771F, 58477 }, + { 0x7720, 58481 }, + { 0x7721, 58485 }, + { 0x7722, 58489 }, + { 0x7723, 58493 }, + { 0x7724, 58497 }, + { 0x7725, 58501 }, + { 0x7726, 58505 }, + { 0x7727, 58509 }, + { 0x7728, 58513 }, + { 0x7729, 58517 }, + { 0x772A, 58521 }, + { 0x772B, 58525 }, + { 0x772C, 58529 }, + { 0x772D, 58533 }, + { 0x772E, 58537 }, + { 0x772F, 58541 }, + { 0x7730, 58545 }, + { 0x7731, 58549 }, + { 0x7732, 58553 }, + { 0x7733, 58557 }, + { 0x7734, 58561 }, + { 0x7735, 58565 }, + { 0x7736, 58569 }, + { 0x7737, 58573 }, + { 0x7738, 58577 }, + { 0x7739, 58581 }, + { 0x773A, 58585 }, + { 0x773B, 58589 }, + { 0x773C, 58593 }, + { 0x773D, 58597 }, + { 0x773E, 58601 }, + { 0x773F, 58605 }, + { 0x7740, 58609 }, + { 0x7741, 58613 }, + { 0x7742, 58617 }, + { 0x7743, 58621 }, + { 0x7744, 58625 }, + { 0x7745, 58629 }, + { 0x7746, 58633 }, + { 0x7747, 58637 }, + { 0x7748, 58641 }, + { 0x7749, 58645 }, + { 0x774A, 58649 }, + { 0x774B, 58653 }, + { 0x774C, 58657 }, + { 0x774D, 58661 }, + { 0x774E, 58665 }, + { 0x774F, 58669 }, + { 0x7750, 58673 }, + { 0x7751, 58677 }, + { 0x7752, 58681 }, + { 0x7753, 58685 }, + { 0x7754, 58689 }, + { 0x7755, 58693 }, + { 0x7756, 58697 }, + { 0x7757, 58701 }, + { 0x7758, 58705 }, + { 0x7759, 58709 }, + { 0x775A, 58713 }, + { 0x775B, 58717 }, + { 0x775C, 58721 }, + { 0x775D, 58725 }, + { 0x775E, 58729 }, + { 0x775F, 58733 }, + { 0x7760, 58737 }, + { 0x7761, 58741 }, + { 0x7762, 58745 }, + { 0x7763, 58749 }, + { 0x7764, 58753 }, + { 0x7765, 58757 }, + { 0x7766, 58761 }, + { 0x7767, 58765 }, + { 0x7768, 58769 }, + { 0x7769, 58773 }, + { 0x776A, 58777 }, + { 0x776B, 58781 }, + { 0x776C, 58785 }, + { 0x776D, 58789 }, + { 0x776E, 58793 }, + { 0x776F, 58797 }, + { 0x7770, 58801 }, + { 0x7771, 58805 }, + { 0x7772, 58809 }, + { 0x7773, 58813 }, + { 0x7774, 58817 }, + { 0x7775, 58821 }, + { 0x7776, 58825 }, + { 0x7777, 58829 }, + { 0x7778, 58833 }, + { 0x7779, 58837 }, + { 0x777A, 58841 }, + { 0x777B, 58845 }, + { 0x777C, 58849 }, + { 0x777D, 58853 }, + { 0x777E, 58857 }, + { 0x777F, 58861 }, + { 0x7780, 58865 }, + { 0x7781, 58869 }, + { 0x7782, 58873 }, + { 0x7783, 58877 }, + { 0x7784, 58881 }, + { 0x7785, 58885 }, + { 0x7786, 58889 }, + { 0x7787, 58893 }, + { 0x7788, 58897 }, + { 0x7789, 58901 }, + { 0x778A, 58905 }, + { 0x778B, 58909 }, + { 0x778C, 58913 }, + { 0x778D, 58917 }, + { 0x778E, 58921 }, + { 0x778F, 58925 }, + { 0x7790, 58929 }, + { 0x7791, 58933 }, + { 0x7792, 58937 }, + { 0x7793, 58941 }, + { 0x7794, 58945 }, + { 0x7795, 58949 }, + { 0x7796, 58953 }, + { 0x7797, 58957 }, + { 0x7798, 58961 }, + { 0x7799, 58965 }, + { 0x779A, 58969 }, + { 0x779B, 58973 }, + { 0x779C, 58977 }, + { 0x779D, 58981 }, + { 0x779E, 58985 }, + { 0x779F, 58989 }, + { 0x77A0, 58993 }, + { 0x77A1, 58997 }, + { 0x77A2, 59001 }, + { 0x77A3, 59005 }, + { 0x77A4, 59009 }, + { 0x77A5, 59013 }, + { 0x77A6, 59017 }, + { 0x77A7, 59021 }, + { 0x77A8, 59025 }, + { 0x77A9, 59029 }, + { 0x77AA, 59033 }, + { 0x77AB, 59037 }, + { 0x77AC, 59041 }, + { 0x77AD, 59045 }, + { 0x77AE, 59049 }, + { 0x77AF, 59053 }, + { 0x77B0, 59057 }, + { 0x77B1, 59061 }, + { 0x77B2, 59065 }, + { 0x77B3, 59069 }, + { 0x77B4, 59073 }, + { 0x77B5, 59077 }, + { 0x77B6, 59081 }, + { 0x77B7, 59085 }, + { 0x77B8, 59089 }, + { 0x77B9, 59093 }, + { 0x77BA, 59097 }, + { 0x77BB, 59101 }, + { 0x77BC, 59105 }, + { 0x77BD, 59109 }, + { 0x77BE, 59113 }, + { 0x77BF, 59117 }, + { 0x77C0, 59121 }, + { 0x77C1, 59125 }, + { 0x77C2, 59129 }, + { 0x77C3, 59133 }, + { 0x77C4, 59137 }, + { 0x77C5, 59141 }, + { 0x77C6, 59145 }, + { 0x77C7, 59149 }, + { 0x77C8, 59153 }, + { 0x77C9, 59157 }, + { 0x77CA, 59161 }, + { 0x77CB, 59165 }, + { 0x77CC, 59169 }, + { 0x77CD, 59173 }, + { 0x77CE, 59177 }, + { 0x77CF, 59181 }, + { 0x77D0, 59185 }, + { 0x77D1, 59189 }, + { 0x77D2, 59193 }, + { 0x77D3, 59197 }, + { 0x77D4, 59201 }, + { 0x77D5, 59205 }, + { 0x77D6, 59209 }, + { 0x77D7, 59213 }, + { 0x77D8, 59217 }, + { 0x77D9, 59221 }, + { 0x77DA, 59225 }, + { 0x77DB, 59229 }, + { 0x77DC, 59233 }, + { 0x77DD, 59237 }, + { 0x77DE, 59241 }, + { 0x77DF, 59245 }, + { 0x77E0, 59249 }, + { 0x77E1, 59253 }, + { 0x77E2, 59257 }, + { 0x77E3, 59261 }, + { 0x77E4, 59265 }, + { 0x77E5, 59269 }, + { 0x77E6, 59273 }, + { 0x77E7, 59277 }, + { 0x77E8, 59281 }, + { 0x77E9, 59285 }, + { 0x77EA, 59289 }, + { 0x77EB, 59293 }, + { 0x77EC, 59297 }, + { 0x77ED, 59301 }, + { 0x77EE, 59305 }, + { 0x77EF, 59309 }, + { 0x77F0, 59313 }, + { 0x77F1, 59317 }, + { 0x77F2, 59321 }, + { 0x77F3, 59325 }, + { 0x77F4, 59329 }, + { 0x77F5, 59333 }, + { 0x77F6, 59337 }, + { 0x77F7, 59341 }, + { 0x77F8, 59345 }, + { 0x77F9, 59349 }, + { 0x77FA, 59353 }, + { 0x77FB, 59357 }, + { 0x77FC, 59361 }, + { 0x77FD, 59365 }, + { 0x77FE, 59369 }, + { 0x77FF, 59373 }, + { 0x7800, 59377 }, + { 0x7801, 59381 }, + { 0x7802, 59385 }, + { 0x7803, 59389 }, + { 0x7804, 59393 }, + { 0x7805, 59397 }, + { 0x7806, 59401 }, + { 0x7807, 59405 }, + { 0x7808, 59409 }, + { 0x7809, 59413 }, + { 0x780A, 59417 }, + { 0x780B, 59421 }, + { 0x780C, 59425 }, + { 0x780D, 59429 }, + { 0x780E, 59433 }, + { 0x780F, 59437 }, + { 0x7810, 59441 }, + { 0x7811, 59445 }, + { 0x7812, 59449 }, + { 0x7813, 59453 }, + { 0x7814, 59457 }, + { 0x7815, 59461 }, + { 0x7816, 59465 }, + { 0x7817, 59469 }, + { 0x7818, 59473 }, + { 0x7819, 59477 }, + { 0x781A, 59481 }, + { 0x781B, 59485 }, + { 0x781C, 59489 }, + { 0x781D, 59493 }, + { 0x781E, 59497 }, + { 0x781F, 59501 }, + { 0x7820, 59505 }, + { 0x7821, 59509 }, + { 0x7822, 59513 }, + { 0x7823, 59517 }, + { 0x7824, 59521 }, + { 0x7825, 59525 }, + { 0x7826, 59529 }, + { 0x7827, 59533 }, + { 0x7828, 59537 }, + { 0x7829, 59541 }, + { 0x782A, 59545 }, + { 0x782B, 59549 }, + { 0x782C, 59553 }, + { 0x782D, 59557 }, + { 0x782E, 59561 }, + { 0x782F, 59565 }, + { 0x7830, 59569 }, + { 0x7831, 59573 }, + { 0x7832, 59577 }, + { 0x7833, 59581 }, + { 0x7834, 59585 }, + { 0x7835, 59589 }, + { 0x7836, 59593 }, + { 0x7837, 59597 }, + { 0x7838, 59601 }, + { 0x7839, 59605 }, + { 0x783A, 59609 }, + { 0x783B, 59613 }, + { 0x783C, 59617 }, + { 0x783D, 59621 }, + { 0x783E, 59625 }, + { 0x783F, 59629 }, + { 0x7840, 59633 }, + { 0x7841, 59637 }, + { 0x7842, 59641 }, + { 0x7843, 59645 }, + { 0x7844, 59649 }, + { 0x7845, 59653 }, + { 0x7846, 59657 }, + { 0x7847, 59661 }, + { 0x7848, 59665 }, + { 0x7849, 59669 }, + { 0x784A, 59673 }, + { 0x784B, 59677 }, + { 0x784C, 59681 }, + { 0x784D, 59685 }, + { 0x784E, 59689 }, + { 0x784F, 59693 }, + { 0x7850, 59697 }, + { 0x7851, 59701 }, + { 0x7852, 59705 }, + { 0x7853, 59709 }, + { 0x7854, 59713 }, + { 0x7855, 59717 }, + { 0x7856, 59721 }, + { 0x7857, 59725 }, + { 0x7858, 59729 }, + { 0x7859, 59733 }, + { 0x785A, 59737 }, + { 0x785B, 59741 }, + { 0x785C, 59745 }, + { 0x785D, 59749 }, + { 0x785E, 59753 }, + { 0x785F, 59757 }, + { 0x7860, 59761 }, + { 0x7861, 59765 }, + { 0x7862, 59769 }, + { 0x7863, 59773 }, + { 0x7864, 59777 }, + { 0x7865, 59781 }, + { 0x7866, 59785 }, + { 0x7867, 59789 }, + { 0x7868, 59793 }, + { 0x7869, 59797 }, + { 0x786A, 59801 }, + { 0x786B, 59805 }, + { 0x786C, 59809 }, + { 0x786D, 59813 }, + { 0x786E, 59817 }, + { 0x786F, 59821 }, + { 0x7870, 59825 }, + { 0x7871, 59829 }, + { 0x7872, 59833 }, + { 0x7873, 59837 }, + { 0x7874, 59841 }, + { 0x7875, 59845 }, + { 0x7876, 59849 }, + { 0x7877, 59853 }, + { 0x7878, 59857 }, + { 0x7879, 59861 }, + { 0x787A, 59865 }, + { 0x787B, 59869 }, + { 0x787C, 59873 }, + { 0x787D, 59877 }, + { 0x787E, 59881 }, + { 0x787F, 59885 }, + { 0x7880, 59889 }, + { 0x7881, 59893 }, + { 0x7882, 59897 }, + { 0x7883, 59901 }, + { 0x7884, 59905 }, + { 0x7885, 59909 }, + { 0x7886, 59913 }, + { 0x7887, 59917 }, + { 0x7888, 59921 }, + { 0x7889, 59925 }, + { 0x788A, 59929 }, + { 0x788B, 59933 }, + { 0x788C, 59937 }, + { 0x788D, 59941 }, + { 0x788E, 59945 }, + { 0x788F, 59949 }, + { 0x7890, 59953 }, + { 0x7891, 59957 }, + { 0x7892, 59961 }, + { 0x7893, 59965 }, + { 0x7894, 59969 }, + { 0x7895, 59973 }, + { 0x7896, 59977 }, + { 0x7897, 59981 }, + { 0x7898, 59985 }, + { 0x7899, 59989 }, + { 0x789A, 59993 }, + { 0x789B, 59997 }, + { 0x789C, 60001 }, + { 0x789D, 60005 }, + { 0x789E, 60009 }, + { 0x789F, 60013 }, + { 0x78A0, 60017 }, + { 0x78A1, 60021 }, + { 0x78A2, 60025 }, + { 0x78A3, 60029 }, + { 0x78A4, 60033 }, + { 0x78A5, 60037 }, + { 0x78A6, 60041 }, + { 0x78A7, 60045 }, + { 0x78A8, 60049 }, + { 0x78A9, 60053 }, + { 0x78AA, 60057 }, + { 0x78AB, 60061 }, + { 0x78AC, 60065 }, + { 0x78AD, 60069 }, + { 0x78AE, 60073 }, + { 0x78AF, 60077 }, + { 0x78B0, 60081 }, + { 0x78B1, 60085 }, + { 0x78B2, 60089 }, + { 0x78B3, 60093 }, + { 0x78B4, 60097 }, + { 0x78B5, 60101 }, + { 0x78B6, 60105 }, + { 0x78B7, 60109 }, + { 0x78B8, 60113 }, + { 0x78B9, 60117 }, + { 0x78BA, 60121 }, + { 0x78BB, 60125 }, + { 0x78BC, 60129 }, + { 0x78BD, 60133 }, + { 0x78BE, 60137 }, + { 0x78BF, 60141 }, + { 0x78C0, 60145 }, + { 0x78C1, 60149 }, + { 0x78C2, 60153 }, + { 0x78C3, 60157 }, + { 0x78C4, 60161 }, + { 0x78C5, 60165 }, + { 0x78C6, 60169 }, + { 0x78C7, 60173 }, + { 0x78C8, 60177 }, + { 0x78C9, 60181 }, + { 0x78CA, 60185 }, + { 0x78CB, 60189 }, + { 0x78CC, 60193 }, + { 0x78CD, 60197 }, + { 0x78CE, 60201 }, + { 0x78CF, 60205 }, + { 0x78D0, 60209 }, + { 0x78D1, 60213 }, + { 0x78D2, 60217 }, + { 0x78D3, 60221 }, + { 0x78D4, 60225 }, + { 0x78D5, 60229 }, + { 0x78D6, 60233 }, + { 0x78D7, 60237 }, + { 0x78D8, 60241 }, + { 0x78D9, 60245 }, + { 0x78DA, 60249 }, + { 0x78DB, 60253 }, + { 0x78DC, 60257 }, + { 0x78DD, 60261 }, + { 0x78DE, 60265 }, + { 0x78DF, 60269 }, + { 0x78E0, 60273 }, + { 0x78E1, 60277 }, + { 0x78E2, 60281 }, + { 0x78E3, 60285 }, + { 0x78E4, 60289 }, + { 0x78E5, 60293 }, + { 0x78E6, 60297 }, + { 0x78E7, 60301 }, + { 0x78E8, 60305 }, + { 0x78E9, 60309 }, + { 0x78EA, 60313 }, + { 0x78EB, 60317 }, + { 0x78EC, 60321 }, + { 0x78ED, 60325 }, + { 0x78EE, 60329 }, + { 0x4CB9, 60333 }, + { 0x4CC1, 60336 }, + { 0x4CBA, 60339 }, + { 0x4CB8, 60342 }, + { 0x4CB7, 60345 }, + { 0x4CBD, 60348 }, + { 0x4CBB, 60351 }, + { 0x4CB3, 60353 }, + { 0x4CB0, 60357 }, + { 0x4CB5, 60361 }, + { 0x4CB2, 60365 }, + { 0x4CAF, 60369 }, + { 0x4CB4, 60373 }, + { 0x4CB6, 60377 }, + { 0x4CB1, 60381 }, + { 0x4CC4, 60385 }, + { 0x4CBC, 60390 }, + { 0x4CBF, 60393 }, + { 0x4C84, 60397 }, + { 0x4C88, 60400 }, + { 0x4C86, 60403 }, + { 0x4C8A, 60406 }, + { 0x4C87, 60409 }, + { 0x4C85, 60412 }, + { 0x4C89, 60415 }, + { 0x4C8B, 60418 }, + { 0x4CA4, 60421 }, + { 0x4C92, 60424 }, + { 0x4C9E, 60427 }, + { 0x4C8E, 60430 }, + { 0x4CAD, 60433 }, + { 0x4C94, 60436 }, + { 0x4C8C, 60439 }, + { 0x4CAA, 60442 }, + { 0x4CA7, 60445 }, + { 0x4CA1, 60448 }, + { 0x4CA2, 60451 }, + { 0x4CC2, 60454 }, + { 0x4CA9, 60457 }, + { 0x4CAC, 60460 }, + { 0x4C9C, 60463 }, + { 0x4CAB, 60466 }, + { 0x4CA8, 60469 }, + { 0x4CA5, 60472 }, + { 0x4CA6, 60475 }, + { 0x4C93, 60478 }, + { 0x4C99, 60481 }, + { 0x4CA0, 60484 }, + { 0x4C8F, 60487 }, + { 0x4C90, 60490 }, + { 0x4C95, 60493 }, + { 0x4C8D, 60496 }, + { 0x4CAE, 60499 }, + { 0x4C91, 60502 }, + { 0x4C9B, 60505 }, + { 0x4C96, 60508 }, + { 0x4CA3, 60511 }, + { 0x4C9D, 60514 }, + { 0x4C97, 60517 }, + { 0x4C9F, 60520 }, + { 0x4C9A, 60523 }, + { 0x4C98, 60526 }, + { 0x4CC3, 60529 }, + { 0x4CBE, 60533 }, + { 0x4CC0, 60536 }, + { 0x900B, 60539 }, + { 0x2E18, 60540 }, + { 0x280C, 60543 }, + { 0x95B4, 60544 }, + { 0x26D7, 60545 }, + { 0x26D9, 60547 }, + { 0x9085, 60552 }, + { 0x18E7, 60553 }, + { 0x18E8, 60556 }, + { 0x18EF, 60559 }, + { 0x18F4, 60562 }, + { 0x18F0, 60565 }, + { 0x18F3, 60568 }, + { 0x18F2, 60571 }, + { 0x18F7, 60574 }, + { 0x18EE, 60577 }, + { 0x18F6, 60580 }, + { 0x18F5, 60583 }, + { 0x18F1, 60586 }, + { 0x18DD, 60589 }, + { 0x18D8, 60593 }, + { 0x18D9, 60597 }, + { 0x18DB, 60601 }, + { 0x18D7, 60605 }, + { 0x18DA, 60609 }, + { 0x18DC, 60613 }, + { 0x18D4, 60617 }, + { 0x18C4, 60620 }, + { 0x18B7, 60623 }, + { 0x18BD, 60626 }, + { 0x18C2, 60629 }, + { 0x18B4, 60632 }, + { 0x18CE, 60635 }, + { 0x18B9, 60638 }, + { 0x18B1, 60641 }, + { 0x18CD, 60644 }, + { 0x18C6, 60647 }, + { 0x18BE, 60650 }, + { 0x18BF, 60653 }, + { 0x18CC, 60656 }, + { 0x18D1, 60659 }, + { 0x18BB, 60662 }, + { 0x18D0, 60665 }, + { 0x18D3, 60668 }, + { 0x18CB, 60671 }, + { 0x18C5, 60674 }, + { 0x18B8, 60677 }, + { 0x18FA, 60680 }, + { 0x18CA, 60683 }, + { 0x18C3, 60686 }, + { 0x18B5, 60689 }, + { 0x18CF, 60692 }, + { 0x18B3, 60695 }, + { 0x18B2, 60698 }, + { 0x18C7, 60701 }, + { 0x18B6, 60704 }, + { 0x18BA, 60707 }, + { 0x18C1, 60710 }, + { 0x18C0, 60713 }, + { 0x18D2, 60716 }, + { 0x18BC, 60719 }, + { 0x18C8, 60722 }, + { 0x18F8, 60725 }, + { 0x18C9, 60728 }, + { 0x18F9, 60731 }, + { 0x18DE, 60734 }, + { 0x18E0, 60738 }, + { 0x18DF, 60742 }, + { 0x18E1, 60746 }, + { 0x18E2, 60750 }, + { 0x18E3, 60754 }, + { 0x18E4, 60758 }, + { 0x18E6, 60762 }, + { 0x18E5, 60766 }, + { 0x18D6, 60770 }, + { 0x18D5, 60774 }, + { 0x18EA, 60778 }, + { 0x18EB, 60783 }, + { 0x18E9, 60786 }, + { 0x18ED, 60789 }, + { 0x18EC, 60792 }, + { 0x44BB, 60796 }, + { 0x44BC, 60800 }, + { 0x44BD, 60804 }, + { 0x44BE, 60808 }, + { 0x44BF, 60812 }, + { 0x44C0, 60816 }, + { 0x44C1, 60820 }, + { 0x44C2, 60824 }, + { 0x44C6, 60828 }, + { 0x44C7, 60832 }, + { 0x44C8, 60836 }, + { 0x44CC, 60840 }, + { 0x44CD, 60844 }, + { 0x44CE, 60848 }, + { 0x44CF, 60852 }, + { 0x44D0, 60856 }, + { 0x44D1, 60860 }, + { 0x44D2, 60864 }, + { 0x44D3, 60868 }, + { 0x44D4, 60872 }, + { 0x44D5, 60876 }, + { 0x44D6, 60880 }, + { 0x44D7, 60884 }, + { 0x44D8, 60888 }, + { 0x44D9, 60892 }, + { 0x44DA, 60896 }, + { 0x44DB, 60900 }, + { 0x44DC, 60904 }, + { 0x44DD, 60908 }, + { 0x44DE, 60912 }, + { 0x44DF, 60916 }, + { 0x44E0, 60920 }, + { 0x44E1, 60924 }, + { 0x44E2, 60928 }, + { 0x44E3, 60932 }, + { 0x44E4, 60936 }, + { 0x44E5, 60940 }, + { 0x44E6, 60944 }, + { 0x44E7, 60948 }, + { 0x44E8, 60952 }, + { 0x44E9, 60956 }, + { 0x44EA, 60960 }, + { 0x44EB, 60964 }, + { 0x44EC, 60968 }, + { 0x44ED, 60972 }, + { 0x44EE, 60976 }, + { 0x44EF, 60980 }, + { 0x44F0, 60984 }, + { 0x44F1, 60988 }, + { 0x44F2, 60992 }, + { 0x44F3, 60996 }, + { 0x44F4, 61000 }, + { 0x44F5, 61004 }, + { 0x44F6, 61008 }, + { 0x44F7, 61012 }, + { 0x44F8, 61016 }, + { 0x44F9, 61020 }, + { 0x44FA, 61024 }, + { 0x44FB, 61028 }, + { 0x44FC, 61032 }, + { 0x44FD, 61036 }, + { 0x44FE, 61040 }, + { 0x44FF, 61044 }, + { 0x4500, 61048 }, + { 0x4501, 61052 }, + { 0x4502, 61056 }, + { 0x4503, 61060 }, + { 0x4504, 61064 }, + { 0x4505, 61068 }, + { 0x4519, 61072 }, + { 0x451A, 61076 }, + { 0x451B, 61080 }, + { 0x451C, 61084 }, + { 0x451D, 61088 }, + { 0x451E, 61092 }, + { 0x451F, 61096 }, + { 0x4520, 61100 }, + { 0x4521, 61104 }, + { 0x4522, 61108 }, + { 0x4523, 61112 }, + { 0x4524, 61116 }, + { 0x4525, 61120 }, + { 0x4526, 61124 }, + { 0x4527, 61128 }, + { 0x4528, 61132 }, + { 0x4529, 61136 }, + { 0x452A, 61140 }, + { 0x452B, 61144 }, + { 0x452C, 61148 }, + { 0x452D, 61152 }, + { 0x452E, 61156 }, + { 0x452F, 61160 }, + { 0x4530, 61164 }, + { 0x4531, 61168 }, + { 0x4532, 61172 }, + { 0x4533, 61176 }, + { 0x4534, 61180 }, + { 0x4535, 61184 }, + { 0x4536, 61188 }, + { 0x4537, 61192 }, + { 0x4538, 61196 }, + { 0x4539, 61200 }, + { 0x453A, 61204 }, + { 0x453B, 61208 }, + { 0x453C, 61212 }, + { 0x453D, 61216 }, + { 0x453E, 61220 }, + { 0x453F, 61224 }, + { 0x4540, 61228 }, + { 0x4541, 61232 }, + { 0x4542, 61236 }, + { 0x4543, 61240 }, + { 0x4544, 61244 }, + { 0x4545, 61248 }, + { 0x4546, 61252 }, + { 0x4547, 61256 }, + { 0x4548, 61260 }, + { 0x4549, 61264 }, + { 0x454A, 61268 }, + { 0x454B, 61272 }, + { 0x454C, 61276 }, + { 0x454D, 61280 }, + { 0x454E, 61284 }, + { 0x454F, 61288 }, + { 0x4550, 61292 }, + { 0x4551, 61296 }, + { 0x4552, 61300 }, + { 0x4553, 61304 }, + { 0x4554, 61308 }, + { 0x4555, 61312 }, + { 0x4556, 61316 }, + { 0x4557, 61320 }, + { 0x4558, 61324 }, + { 0x4559, 61328 }, + { 0x455A, 61332 }, + { 0x455B, 61336 }, + { 0x455C, 61340 }, + { 0x455D, 61344 }, + { 0x455E, 61348 }, + { 0x455F, 61352 }, + { 0x4560, 61356 }, + { 0x4561, 61360 }, + { 0x4562, 61364 }, + { 0x4563, 61368 }, + { 0x4564, 61372 }, + { 0x4565, 61376 }, + { 0x4566, 61380 }, + { 0x4567, 61384 }, + { 0x4568, 61388 }, + { 0x4569, 61392 }, + { 0x456A, 61396 }, + { 0x456B, 61400 }, + { 0x456C, 61404 }, + { 0x456D, 61408 }, + { 0x456E, 61412 }, + { 0x456F, 61416 }, + { 0x4570, 61420 }, + { 0x4571, 61424 }, + { 0x4572, 61428 }, + { 0x4573, 61432 }, + { 0x4574, 61436 }, + { 0x4575, 61440 }, + { 0x4576, 61444 }, + { 0x4577, 61448 }, + { 0x4578, 61452 }, + { 0x4579, 61456 }, + { 0x457A, 61460 }, + { 0x457B, 61464 }, + { 0x457C, 61468 }, + { 0x457D, 61472 }, + { 0x457E, 61476 }, + { 0x457F, 61480 }, + { 0x4580, 61484 }, + { 0x4581, 61488 }, + { 0x4582, 61492 }, + { 0x4583, 61496 }, + { 0x4584, 61500 }, + { 0x4585, 61504 }, + { 0x4586, 61508 }, + { 0x4587, 61512 }, + { 0x4588, 61516 }, + { 0x4589, 61520 }, + { 0x458A, 61524 }, + { 0x458B, 61528 }, + { 0x458C, 61532 }, + { 0x458D, 61536 }, + { 0x458E, 61540 }, + { 0x458F, 61544 }, + { 0x4590, 61548 }, + { 0x4591, 61552 }, + { 0x4592, 61556 }, + { 0x4593, 61560 }, + { 0x4594, 61564 }, + { 0x4595, 61568 }, + { 0x4596, 61572 }, + { 0x4597, 61576 }, + { 0x4598, 61580 }, + { 0x4599, 61584 }, + { 0x459A, 61588 }, + { 0x459B, 61592 }, + { 0x459C, 61596 }, + { 0x459D, 61600 }, + { 0x459E, 61605 }, + { 0x459F, 61610 }, + { 0x45A0, 61615 }, + { 0x45A1, 61620 }, + { 0x45A2, 61625 }, + { 0x45A3, 61630 }, + { 0x45A4, 61635 }, + { 0x45A5, 61640 }, + { 0x45AA, 61645 }, + { 0x45AB, 61650 }, + { 0x45AC, 61655 }, + { 0x45AD, 61660 }, + { 0x45AE, 61665 }, + { 0x45AF, 61670 }, + { 0x45B0, 61675 }, + { 0x45B1, 61680 }, + { 0x45B2, 61685 }, + { 0x45B3, 61690 }, + { 0x45B4, 61694 }, + { 0x45B5, 61698 }, + { 0x45B6, 61702 }, + { 0x45B7, 61706 }, + { 0x45B8, 61710 }, + { 0x45B9, 61714 }, + { 0x45BA, 61718 }, + { 0x4481, 61722 }, + { 0x44B0, 61726 }, + { 0x44B5, 61730 }, + { 0x44C3, 61734 }, + { 0x44C4, 61738 }, + { 0x44C5, 61742 }, + { 0x44C9, 61746 }, + { 0x44CA, 61750 }, + { 0x44CB, 61754 }, + { 0x4466, 61758 }, + { 0x4467, 61762 }, + { 0x4468, 61766 }, + { 0x4469, 61770 }, + { 0x446A, 61774 }, + { 0x446B, 61778 }, + { 0x446C, 61782 }, + { 0x446D, 61786 }, + { 0x446E, 61790 }, + { 0x446F, 61794 }, + { 0x4470, 61798 }, + { 0x4471, 61802 }, + { 0x4472, 61806 }, + { 0x4473, 61810 }, + { 0x4474, 61814 }, + { 0x4475, 61818 }, + { 0x4478, 61822 }, + { 0x447B, 61826 }, + { 0x447D, 61830 }, + { 0x447E, 61834 }, + { 0x447F, 61838 }, + { 0x4480, 61842 }, + { 0x4482, 61846 }, + { 0x4483, 61850 }, + { 0x4484, 61854 }, + { 0x4485, 61858 }, + { 0x4486, 61862 }, + { 0x4487, 61866 }, + { 0x4488, 61870 }, + { 0x4489, 61874 }, + { 0x448A, 61878 }, + { 0x448B, 61882 }, + { 0x448C, 61886 }, + { 0x448D, 61890 }, + { 0x448E, 61894 }, + { 0x448F, 61898 }, + { 0x4490, 61902 }, + { 0x4491, 61906 }, + { 0x4492, 61910 }, + { 0x4493, 61914 }, + { 0x4494, 61918 }, + { 0x4495, 61922 }, + { 0x4496, 61926 }, + { 0x4497, 61930 }, + { 0x4498, 61934 }, + { 0x4499, 61938 }, + { 0x449A, 61942 }, + { 0x449B, 61946 }, + { 0x449C, 61950 }, + { 0x449D, 61954 }, + { 0x449E, 61958 }, + { 0x449F, 61962 }, + { 0x44A0, 61966 }, + { 0x44A1, 61970 }, + { 0x44A2, 61974 }, + { 0x44A3, 61978 }, + { 0x44A4, 61982 }, + { 0x44A5, 61986 }, + { 0x44A6, 61990 }, + { 0x44A7, 61994 }, + { 0x44A8, 61998 }, + { 0x44A9, 62002 }, + { 0x44AA, 62006 }, + { 0x44AB, 62010 }, + { 0x44AC, 62014 }, + { 0x44AE, 62018 }, + { 0x44AF, 62022 }, + { 0x44B1, 62026 }, + { 0x44B2, 62030 }, + { 0x44B6, 62034 }, + { 0x44B7, 62038 }, + { 0x44B8, 62042 }, + { 0x44B9, 62046 }, + { 0x44BA, 62050 }, + { 0x45A6, 62054 }, + { 0x45A7, 62059 }, + { 0x45A8, 62064 }, + { 0x45A9, 62069 }, + { 0x4476, 62074 }, + { 0x4477, 62078 }, + { 0x4479, 62082 }, + { 0x447A, 62086 }, + { 0x447C, 62090 }, + { 0x44B3, 62094 }, + { 0x44B4, 62098 }, + { 0x44AD, 62102 }, + { 0x4506, 62106 }, + { 0x4507, 62110 }, + { 0x4508, 62114 }, + { 0x4509, 62118 }, + { 0x450A, 62122 }, + { 0x450B, 62126 }, + { 0x450C, 62130 }, + { 0x450D, 62134 }, + { 0x450E, 62138 }, + { 0x450F, 62142 }, + { 0x4510, 62146 }, + { 0x4511, 62150 }, + { 0x4512, 62154 }, + { 0x4513, 62158 }, + { 0x4514, 62162 }, + { 0x4515, 62166 }, + { 0x4516, 62170 }, + { 0x4517, 62174 }, + { 0x4518, 62178 }, + { 0x402A, 62182 }, + { 0x402B, 62186 }, + { 0x402C, 62190 }, + { 0x402D, 62194 }, + { 0x402E, 62198 }, + { 0x402F, 62202 }, + { 0x4030, 62206 }, + { 0x4031, 62210 }, + { 0x4032, 62214 }, + { 0x4033, 62218 }, + { 0x4034, 62222 }, + { 0x4035, 62226 }, + { 0x4036, 62230 }, + { 0x4037, 62234 }, + { 0x4038, 62238 }, + { 0x4039, 62243 }, + { 0x403A, 62248 }, + { 0x403B, 62253 }, + { 0x4046, 62258 }, + { 0x4047, 62263 }, + { 0x4048, 62268 }, + { 0x4049, 62273 }, + { 0x404A, 62278 }, + { 0x404D, 62283 }, + { 0x404E, 62288 }, + { 0x404F, 62293 }, + { 0x4052, 62297 }, + { 0x4053, 62302 }, + { 0x4054, 62307 }, + { 0x4055, 62311 }, + { 0x4056, 62316 }, + { 0x4057, 62320 }, + { 0x4058, 62324 }, + { 0x4059, 62329 }, + { 0x405A, 62333 }, + { 0x405B, 62337 }, + { 0x405D, 62341 }, + { 0x405E, 62345 }, + { 0x405F, 62349 }, + { 0x4060, 62354 }, + { 0x4061, 62358 }, + { 0x4062, 62362 }, + { 0x4063, 62367 }, + { 0x4064, 62372 }, + { 0x4065, 62376 }, + { 0x4066, 62380 }, + { 0x4067, 62384 }, + { 0x4068, 62388 }, + { 0x4069, 62392 }, + { 0x406A, 62396 }, + { 0x406B, 62400 }, + { 0x406C, 62404 }, + { 0x406D, 62408 }, + { 0x406E, 62413 }, + { 0x406F, 62417 }, + { 0x4070, 62422 }, + { 0x4071, 62426 }, + { 0x4072, 62430 }, + { 0x4073, 62434 }, + { 0x4074, 62438 }, + { 0x4075, 62442 }, + { 0x4076, 62446 }, + { 0x4077, 62450 }, + { 0x4078, 62454 }, + { 0x4079, 62458 }, + { 0x407A, 62462 }, + { 0x407B, 62466 }, + { 0x407C, 62471 }, + { 0x407D, 62476 }, + { 0x407E, 62481 }, + { 0x407F, 62486 }, + { 0x4080, 62491 }, + { 0x4081, 62495 }, + { 0x4082, 62500 }, + { 0x4083, 62504 }, + { 0x4084, 62508 }, + { 0x4085, 62514 }, + { 0x4086, 62519 }, + { 0x4087, 62525 }, + { 0x4088, 62530 }, + { 0x4089, 62534 }, + { 0x408B, 62538 }, + { 0x408C, 62542 }, + { 0x408D, 62546 }, + { 0x408E, 62550 }, + { 0x408F, 62554 }, + { 0x4090, 62558 }, + { 0x4091, 62563 }, + { 0x4092, 62567 }, + { 0x4093, 62571 }, + { 0x4094, 62575 }, + { 0x4095, 62579 }, + { 0x403C, 62583 }, + { 0x403D, 62588 }, + { 0x403E, 62593 }, + { 0x403F, 62598 }, + { 0x4040, 62603 }, + { 0x4041, 62608 }, + { 0x4042, 62613 }, + { 0x4043, 62618 }, + { 0x4044, 62623 }, + { 0x4045, 62628 }, + { 0x4096, 62633 }, + { 0x4097, 62638 }, + { 0x4098, 62643 }, + { 0x4099, 62648 }, + { 0x409A, 62653 }, + { 0x409B, 62658 }, + { 0x409C, 62663 }, + { 0x409D, 62668 }, + { 0x409E, 62673 }, + { 0x409F, 62678 }, + { 0x40A0, 62683 }, + { 0x40A1, 62688 }, + { 0x40A2, 62693 }, + { 0x40A3, 62698 }, + { 0x40A4, 62703 }, + { 0x40A5, 62708 }, + { 0x40A6, 62713 }, + { 0x40A7, 62718 }, + { 0x40A8, 62723 }, + { 0x40A9, 62728 }, + { 0x40AA, 62733 }, + { 0x40AB, 62738 }, + { 0x40AC, 62743 }, + { 0x40AD, 62748 }, + { 0x40AE, 62753 }, + { 0x40AF, 62758 }, + { 0x40B0, 62763 }, + { 0x40B1, 62768 }, + { 0x40B2, 62773 }, + { 0x404B, 62778 }, + { 0x404C, 62783 }, + { 0x4050, 62788 }, + { 0x4051, 62793 }, + { 0x405C, 62798 }, + { 0x408A, 62803 }, + { 0x3FE5, 62808 }, + { 0x4009, 62813 }, + { 0x3FFD, 62818 }, + { 0x4011, 62823 }, + { 0x4013, 62828 }, + { 0x3FF8, 62833 }, + { 0x3FE7, 62838 }, + { 0x3FE0, 62843 }, + { 0x400C, 62848 }, + { 0x3FE4, 62853 }, + { 0x4000, 62858 }, + { 0x400E, 62863 }, + { 0x3FF4, 62868 }, + { 0x3FE8, 62873 }, + { 0x3FF6, 62878 }, + { 0x4002, 62883 }, + { 0x4019, 62888 }, + { 0x401B, 62893 }, + { 0x4004, 62898 }, + { 0x3FF7, 62903 }, + { 0x3FF9, 62908 }, + { 0x401C, 62913 }, + { 0x400A, 62918 }, + { 0x4007, 62923 }, + { 0x3FE2, 62928 }, + { 0x4022, 62933 }, + { 0x3FFA, 62938 }, + { 0x400B, 62943 }, + { 0x4005, 62948 }, + { 0x4025, 62953 }, + { 0x3FEC, 62958 }, + { 0x4012, 62963 }, + { 0x3FE1, 62968 }, + { 0x3FFF, 62973 }, + { 0x4017, 62978 }, + { 0x400D, 62983 }, + { 0x4018, 62988 }, + { 0x401D, 62993 }, + { 0x3FEF, 62998 }, + { 0x3FE6, 63003 }, + { 0x3FEB, 63008 }, + { 0x4021, 63013 }, + { 0x4001, 63018 }, + { 0x3FE9, 63023 }, + { 0x3FFB, 63028 }, + { 0x4008, 63033 }, + { 0x4015, 63038 }, + { 0x3FFC, 63043 }, + { 0x3FEA, 63048 }, + { 0x400F, 63053 }, + { 0x4010, 63058 }, + { 0x4006, 63063 }, + { 0x3FE3, 63068 }, + { 0x4023, 63073 }, + { 0x3FED, 63078 }, + { 0x4027, 63083 }, + { 0x3FF0, 63088 }, + { 0x4026, 63093 }, + { 0x4014, 63098 }, + { 0x3FF1, 63103 }, + { 0x401F, 63108 }, + { 0x3FFE, 63113 }, + { 0x3FF5, 63118 }, + { 0x401A, 63123 }, + { 0x4016, 63128 }, + { 0x4024, 63133 }, + { 0x3FEE, 63138 }, + { 0x4003, 63143 }, + { 0x3FF3, 63148 }, + { 0x3FF2, 63153 }, + { 0x401E, 63158 }, + { 0x4028, 63163 }, + { 0x4020, 63168 }, + { 0x4029, 63173 }, + { 0x913A, 63178 }, + { 0x94BC, 63180 }, + { 0x9522, 63181 }, + { 0x91E0, 63183 }, + { 0x4177, 63186 }, + { 0x4179, 63189 }, + { 0x417C, 63192 }, + { 0x4178, 63195 }, + { 0x417B, 63198 }, + { 0x4192, 63201 }, + { 0x417D, 63204 }, + { 0x4181, 63207 }, + { 0x4182, 63210 }, + { 0x4184, 63213 }, + { 0x4185, 63216 }, + { 0x4186, 63219 }, + { 0x418A, 63222 }, + { 0x4183, 63225 }, + { 0x418C, 63228 }, + { 0x418D, 63231 }, + { 0x418E, 63234 }, + { 0x4189, 63237 }, + { 0x417E, 63240 }, + { 0x4193, 63243 }, + { 0x417F, 63246 }, + { 0x4190, 63249 }, + { 0x417A, 63252 }, + { 0x4191, 63255 }, + { 0x418B, 63258 }, + { 0x4187, 63261 }, + { 0x4188, 63264 }, + { 0x4180, 63267 }, + { 0x418F, 63270 }, + { 0x46C9, 63273 }, + { 0x46CA, 63276 }, + { 0x46E2, 63279 }, + { 0x46CC, 63282 }, + { 0x46CD, 63285 }, + { 0x46DA, 63288 }, + { 0x46CB, 63291 }, + { 0x46CF, 63294 }, + { 0x46D1, 63297 }, + { 0x46D2, 63300 }, + { 0x46D3, 63303 }, + { 0x46D4, 63306 }, + { 0x46D5, 63309 }, + { 0x46DB, 63312 }, + { 0x46D6, 63315 }, + { 0x46DC, 63318 }, + { 0x46D8, 63321 }, + { 0x46D9, 63324 }, + { 0x46CE, 63327 }, + { 0x46D0, 63330 }, + { 0x46DE, 63333 }, + { 0x46DF, 63336 }, + { 0x46E0, 63339 }, + { 0x46E1, 63342 }, + { 0x46D7, 63345 }, + { 0x46DD, 63348 }, + { 0x46E3, 63351 }, + { 0x006E, 63354 }, + { 0x9520, 63355 }, + { 0x94EB, 63356 }, + { 0x935B, 63358 }, + { 0x9370, 63362 }, + { 0x932A, 63367 }, + { 0x9355, 63371 }, + { 0x936A, 63375 }, + { 0x936C, 63380 }, + { 0x23A0, 63385 }, + { 0x2394, 63390 }, + { 0x22D7, 63394 }, + { 0x9361, 63397 }, + { 0x9373, 63401 }, + { 0x9348, 63406 }, + { 0x23A1, 63409 }, + { 0x2395, 63414 }, + { 0x21BE, 63418 }, + { 0x22D8, 63420 }, + { 0x9366, 63424 }, + { 0x9368, 63429 }, + { 0x22D6, 63434 }, + { 0x9334, 63437 }, + { 0x934F, 63440 }, + { 0x2385, 63442 }, + { 0x2396, 63445 }, + { 0x2397, 63450 }, + { 0x1CDF, 63455 }, + { 0x2398, 63458 }, + { 0x2399, 63463 }, + { 0x3B0F, 63468 }, + { 0x3A32, 63472 }, + { 0x3B10, 63475 }, + { 0x3A34, 63479 }, + { 0x3A31, 63484 }, + { 0x3B12, 63488 }, + { 0x3B17, 63492 }, + { 0x3B13, 63496 }, + { 0x3B16, 63500 }, + { 0x3B15, 63504 }, + { 0x3B1A, 63508 }, + { 0x3B11, 63512 }, + { 0x3B19, 63516 }, + { 0x3B18, 63520 }, + { 0x3B14, 63524 }, + { 0x3A2E, 63528 }, + { 0x3A2B, 63533 }, + { 0x3A2C, 63538 }, + { 0x3A2D, 63543 }, + { 0x3A2F, 63548 }, + { 0x3B08, 63553 }, + { 0x3B07, 63558 }, + { 0x3B0D, 63563 }, + { 0x3B06, 63568 }, + { 0x3B0B, 63573 }, + { 0x3B09, 63578 }, + { 0x3B0A, 63583 }, + { 0x3B0C, 63588 }, + { 0x3A35, 63593 }, + { 0x3A20, 63598 }, + { 0x3AF2, 63602 }, + { 0x3B05, 63606 }, + { 0x3A21, 63611 }, + { 0x3AF8, 63615 }, + { 0x3AE8, 63619 }, + { 0x3B02, 63623 }, + { 0x3AE7, 63628 }, + { 0x3B01, 63632 }, + { 0x3AF1, 63637 }, + { 0x3A22, 63641 }, + { 0x3A26, 63645 }, + { 0x3AFA, 63649 }, + { 0x3AF5, 63653 }, + { 0x3AF0, 63657 }, + { 0x3AF9, 63661 }, + { 0x3AE3, 63665 }, + { 0x3AFE, 63669 }, + { 0x3AE5, 63674 }, + { 0x3AFF, 63678 }, + { 0x3AE6, 63683 }, + { 0x3B00, 63687 }, + { 0x3A28, 63692 }, + { 0x3A23, 63696 }, + { 0x3AF7, 63700 }, + { 0x3AE4, 63704 }, + { 0x3A29, 63708 }, + { 0x3A2A, 63712 }, + { 0x3AEA, 63716 }, + { 0x3B03, 63720 }, + { 0x3A24, 63725 }, + { 0x3AEE, 63729 }, + { 0x3AFD, 63733 }, + { 0x3AE9, 63737 }, + { 0x3A27, 63741 }, + { 0x3AFC, 63745 }, + { 0x3AFB, 63749 }, + { 0x3AF6, 63753 }, + { 0x3AEB, 63757 }, + { 0x3AEC, 63761 }, + { 0x3B04, 63765 }, + { 0x3AF3, 63770 }, + { 0x3AED, 63774 }, + { 0x3A25, 63778 }, + { 0x3AEF, 63782 }, + { 0x3AF4, 63786 }, + { 0x3A36, 63790 }, + { 0x3A30, 63793 }, + { 0x3B0E, 63796 }, + { 0x3A33, 63799 }, + { 0x0076, 63804 }, + { 0x96E7, 63806 }, + { 0x96E8, 63811 }, + { 0x96C3, 63816 }, + { 0x7C53, 63822 }, + { 0x95B6, 63825 }, + { 0x95C1, 63826 }, + { 0x90A4, 63828 }, + { 0x90A7, 63830 }, + { 0x90A5, 63833 }, + { 0x1EFE, 63840 }, + { 0x9469, 63841 }, + { 0x2636, 63843 }, + { 0x8FC5, 63846 }, + { 0x8FE8, 63847 }, + { 0x90FF, 63849 }, + { 0x9464, 63850 }, + { 0x1CAF, 63852 }, + { 0x2805, 63855 }, + { 0x22DE, 63856 }, + { 0x1D34, 63857 }, + { 0x1F09, 63860 }, + { 0x1F0B, 63863 }, + { 0x20BD, 63869 }, + { 0x0003, 63873 }, + { 0x20BE, 63875 }, + { 0x20BF, 63879 }, + { 0x20C7, 63883 }, + { 0x20C2, 63887 }, + { 0x20C3, 63891 }, + { 0x20C5, 63895 }, + { 0x20C1, 63899 }, + { 0x20C6, 63903 }, + { 0x20C0, 63907 }, + { 0x20C4, 63911 }, + { 0x1D71, 63915 }, + { 0x3FDE, 63917 }, + { 0x8F95, 63920 }, + { 0x029A, 63922 }, + { 0x1F7C, 63923 }, + { 0x908C, 63925 }, + { 0x950F, 63927 }, + { 0x3D80, 63929 }, + { 0x3D81, 63932 }, + { 0x9097, 63935 }, + { 0x94D8, 63937 }, + { 0x9287, 63938 }, + { 0x72E2, 63939 }, + { 0x72E0, 63944 }, + { 0x72D9, 63949 }, + { 0x72E5, 63954 }, + { 0x72D6, 63959 }, + { 0x72E1, 63964 }, + { 0x72E6, 63969 }, + { 0x72E3, 63974 }, + { 0x72DA, 63979 }, + { 0x72DF, 63984 }, + { 0x72D7, 63989 }, + { 0x72DB, 63994 }, + { 0x72DE, 63999 }, + { 0x72DC, 64004 }, + { 0x72DD, 64009 }, + { 0x72E4, 64014 }, + { 0x72D5, 64019 }, + { 0x72D8, 64024 }, + { 0x72D4, 64029 }, + { 0x7299, 64034 }, + { 0x729D, 64039 }, + { 0x729A, 64044 }, + { 0x7298, 64049 }, + { 0x729B, 64054 }, + { 0x729C, 64059 }, + { 0x729E, 64064 }, + { 0x72C8, 64069 }, + { 0x72AB, 64073 }, + { 0x72D2, 64078 }, + { 0x72CF, 64084 }, + { 0x72CE, 64090 }, + { 0x72D3, 64098 }, + { 0x72AD, 64104 }, + { 0x72D0, 64110 }, + { 0x72D1, 64115 }, + { 0x72A1, 64121 }, + { 0x72C1, 64126 }, + { 0x72CC, 64130 }, + { 0x72CD, 64134 }, + { 0x72CB, 64138 }, + { 0x72BF, 64142 }, + { 0x72A3, 64147 }, + { 0x72AA, 64152 }, + { 0x72A8, 64157 }, + { 0x729F, 64162 }, + { 0x72A2, 64167 }, + { 0x72A0, 64172 }, + { 0x72C3, 64178 }, + { 0x72C4, 64183 }, + { 0x72A9, 64187 }, + { 0x72CA, 64192 }, + { 0x72C5, 64197 }, + { 0x72C7, 64201 }, + { 0x72AC, 64205 }, + { 0x72C6, 64209 }, + { 0x72C0, 64213 }, + { 0x72A5, 64217 }, + { 0x72A6, 64222 }, + { 0x72A7, 64227 }, + { 0x72A4, 64232 }, + { 0x72C9, 64237 }, + { 0x72C2, 64242 }, + { 0x72AF, 64247 }, + { 0x72B4, 64251 }, + { 0x72B0, 64255 }, + { 0x72B3, 64259 }, + { 0x72B2, 64263 }, + { 0x72B7, 64267 }, + { 0x72AE, 64271 }, + { 0x72B6, 64275 }, + { 0x72B5, 64279 }, + { 0x72B1, 64283 }, + { 0x727E, 64287 }, + { 0x727F, 64291 }, + { 0x7270, 64295 }, + { 0x7271, 64299 }, + { 0x726A, 64303 }, + { 0x726B, 64307 }, + { 0x727A, 64311 }, + { 0x727B, 64315 }, + { 0x726E, 64319 }, + { 0x726F, 64323 }, + { 0x7280, 64327 }, + { 0x7281, 64331 }, + { 0x7282, 64335 }, + { 0x7283, 64339 }, + { 0x7272, 64343 }, + { 0x7273, 64347 }, + { 0x726C, 64351 }, + { 0x726D, 64355 }, + { 0x7276, 64359 }, + { 0x7277, 64363 }, + { 0x7268, 64367 }, + { 0x7269, 64371 }, + { 0x727C, 64375 }, + { 0x727D, 64379 }, + { 0x7274, 64383 }, + { 0x7275, 64387 }, + { 0x7278, 64391 }, + { 0x7279, 64395 }, + { 0x72BD, 64399 }, + { 0x72BA, 64404 }, + { 0x72B8, 64409 }, + { 0x72BC, 64413 }, + { 0x72B9, 64418 }, + { 0x72BB, 64422 }, + { 0x72BE, 64426 }, + { 0x7295, 64430 }, + { 0x7297, 64434 }, + { 0x7287, 64438 }, + { 0x7286, 64442 }, + { 0x728E, 64446 }, + { 0x7294, 64450 }, + { 0x7289, 64454 }, + { 0x7284, 64458 }, + { 0x7296, 64462 }, + { 0x728C, 64466 }, + { 0x728F, 64470 }, + { 0x728D, 64474 }, + { 0x7291, 64478 }, + { 0x728A, 64482 }, + { 0x7288, 64486 }, + { 0x728B, 64490 }, + { 0x7290, 64494 }, + { 0x7293, 64498 }, + { 0x7285, 64502 }, + { 0x7292, 64506 }, + { 0x22E0, 64510 }, + { 0x94CA, 64511 }, + { 0x2826, 64512 }, + { 0x233B, 64514 }, + { 0x95DA, 64515 }, + { 0x9506, 64517 }, + { 0x9504, 64521 }, + { 0x2325, 64525 }, + { 0x9024, 64528 }, + { 0x95DD, 64532 }, + { 0x9202, 64535 }, + { 0x9201, 64539 }, + { 0x9503, 64543 }, + { 0x9466, 64546 }, + { 0x91FA, 64549 }, + { 0x91FF, 64552 }, + { 0x9505, 64558 }, + { 0x9200, 64560 }, + { 0x1D20, 64562 }, + { 0x2804, 64564 }, + { 0x92A7, 64565 }, + { 0x95A2, 64567 }, + { 0x227F, 64568 }, + { 0x90DE, 64569 }, + { 0x1D69, 64570 }, + { 0x1D6A, 64572 }, + { 0x915C, 64577 }, + { 0x9246, 64579 }, + { 0x925B, 64581 }, + { 0x9021, 64585 }, + { 0x8FDC, 64587 }, + { 0x90A2, 64588 }, + { 0x2BBF, 64590 }, + { 0x2BCD, 64592 }, + { 0x9482, 64595 }, + { 0x95CC, 64596 }, + { 0x90B2, 64598 }, + { 0x9462, 64600 }, + { 0x9095, 64601 }, + { 0x904F, 64604 }, + { 0x9323, 64606 }, + { 0x8FBA, 64607 }, + { 0x8FE3, 64608 }, + { 0x8F81, 64610 }, + { 0x8F80, 64612 }, + { 0x8E15, 64614 }, + { 0x8E16, 64617 }, + { 0x8E17, 64620 }, + { 0x2A29, 64623 }, + { 0x9448, 64625 }, + { 0x2336, 64629 }, + { 0x2337, 64631 }, + { 0x9149, 64633 }, + { 0x9143, 64642 }, + { 0x2A2A, 64647 }, + { 0x96CD, 64649 }, + { 0x29FD, 64654 }, + { 0x2A01, 64658 }, + { 0x29FC, 64660 }, + { 0x38C2, 64663 }, + { 0x38C0, 64667 }, + { 0x38C4, 64671 }, + { 0x38C1, 64675 }, + { 0x38C3, 64679 }, + { 0x38C5, 64683 }, + { 0x38C7, 64687 }, + { 0x38C6, 64691 }, + { 0x38BF, 64695 }, + { 0x38B0, 64698 }, + { 0x38B2, 64701 }, + { 0x38AD, 64704 }, + { 0x38AA, 64707 }, + { 0x38BA, 64710 }, + { 0x38B3, 64713 }, + { 0x38A9, 64716 }, + { 0x38B7, 64719 }, + { 0x38B1, 64722 }, + { 0x38AE, 64725 }, + { 0x38AF, 64728 }, + { 0x38B6, 64731 }, + { 0x38B5, 64734 }, + { 0x38AC, 64737 }, + { 0x38B9, 64740 }, + { 0x38B8, 64743 }, + { 0x38BB, 64746 }, + { 0x38BD, 64749 }, + { 0x38AB, 64752 }, + { 0x38B4, 64755 }, + { 0x38BC, 64758 }, + { 0x38BE, 64761 }, + { 0x38CC, 64764 }, + { 0x38CD, 64766 }, + { 0x38CB, 64769 }, + { 0x38C9, 64773 }, + { 0x38CA, 64777 }, + { 0x38C8, 64781 }, + { 0x27BA, 64785 }, + { 0x27BB, 64787 }, + { 0x2025, 64789 }, + { 0x8F33, 64791 }, + { 0x27DB, 64792 }, + { 0x27DC, 64796 }, + { 0x27D9, 64800 }, + { 0x27DA, 64804 }, + { 0x27DD, 64808 }, + { 0x27DF, 64812 }, + { 0x27DE, 64816 }, + { 0x27E0, 64820 }, + { 0x95A8, 64824 }, + { 0x255C, 64826 }, + { 0x2557, 64832 }, + { 0x9233, 64837 }, + { 0x92A8, 64838 }, + { 0x8F55, 64840 }, + { 0x8F76, 64842 }, + { 0x9525, 64843 }, + { 0x94E8, 64845 }, + { 0x2270, 64847 }, + { 0x22C2, 64848 }, + { 0x8F9E, 64849 }, + { 0x8F45, 64850 }, + { 0x9168, 64852 }, + { 0x1D8A, 64853 }, + { 0x1D65, 64856 }, + { 0x1D6E, 64859 }, + { 0x1D8F, 64862 }, + { 0x1D87, 64865 }, + { 0x1D8B, 64868 }, + { 0x1D8C, 64871 }, + { 0x1D66, 64874 }, + { 0x1D6B, 64877 }, + { 0x1D6D, 64880 }, + { 0x1D8E, 64883 }, + { 0x1D73, 64886 }, + { 0x1D76, 64889 }, + { 0x9223, 64892 }, + { 0x908F, 64896 }, + { 0x9476, 64897 }, + { 0x1F6B, 64900 }, + { 0x9461, 64901 }, + { 0x3E48, 64902 }, + { 0x95B9, 64904 }, + { 0x8F1A, 64906 }, + { 0x9290, 64908 }, + { 0x2315, 64909 }, + { 0x9593, 64911 }, + { 0x95A7, 64912 }, + { 0x9272, 64913 }, + { 0x94BE, 64914 }, + { 0x1C9A, 64915 }, + { 0x1CB9, 64919 }, + { 0x1CBA, 64924 }, + { 0x1C9B, 64929 }, + { 0x91DD, 64933 }, + { 0x9128, 64935 }, + { 0x22E9, 64938 }, + { 0x7C88, 64940 }, + { 0x7C87, 64943 }, + { 0x905F, 64946 }, + { 0x912A, 64948 }, + { 0x912B, 64949 }, + { 0x9185, 64951 }, + { 0x8FCD, 64954 }, + { 0x9186, 64956 }, + { 0x952B, 64959 }, + { 0x8F78, 64960 }, + { 0x2F78, 64962 }, + { 0x2F5F, 64966 }, + { 0x2F59, 64970 }, + { 0x2F5A, 64973 }, + { 0x2F40, 64976 }, + { 0x2F41, 64980 }, + { 0x2F3E, 64985 }, + { 0x2F3A, 64988 }, + { 0x2F77, 64991 }, + { 0x2F5B, 64995 }, + { 0x2F0C, 64997 }, + { 0x2F5C, 64999 }, + { 0x2F5D, 65001 }, + { 0x2F5E, 65003 }, + { 0x2F36, 65005 }, + { 0x2F3D, 65007 }, + { 0x2F39, 65010 }, + { 0x2F60, 65013 }, + { 0x2F0B, 65015 }, + { 0x2F61, 65017 }, + { 0x8E3B, 65019 }, + { 0x2F30, 65021 }, + { 0x2F10, 65023 }, + { 0x2F12, 65025 }, + { 0x2F11, 65028 }, + { 0x2E67, 65031 }, + { 0x2F32, 65033 }, + { 0x2F20, 65035 }, + { 0x2F62, 65037 }, + { 0x2F63, 65039 }, + { 0x2E65, 65041 }, + { 0x2F64, 65043 }, + { 0x2F29, 65045 }, + { 0x2F65, 65047 }, + { 0x2F13, 65049 }, + { 0x2F1D, 65051 }, + { 0x2F1E, 65053 }, + { 0x2F28, 65055 }, + { 0x2F66, 65057 }, + { 0x2F31, 65059 }, + { 0x2F37, 65061 }, + { 0x2F3F, 65063 }, + { 0x2F67, 65066 }, + { 0x2F3B, 65069 }, + { 0x2F68, 65072 }, + { 0x2F51, 65074 }, + { 0x2F57, 65076 }, + { 0x2F69, 65078 }, + { 0x2F6A, 65080 }, + { 0x2F6C, 65082 }, + { 0x2F1C, 65084 }, + { 0x2F1F, 65086 }, + { 0x2F6D, 65088 }, + { 0x2F27, 65091 }, + { 0x2F2F, 65093 }, + { 0x2F35, 65095 }, + { 0x2F3C, 65097 }, + { 0x2F38, 65100 }, + { 0x2F4C, 65103 }, + { 0x2F1B, 65105 }, + { 0x2F25, 65108 }, + { 0x2F26, 65111 }, + { 0x2F2E, 65114 }, + { 0x2F34, 65117 }, + { 0x2F4B, 65120 }, + { 0x2F4F, 65123 }, + { 0x2F55, 65126 }, + { 0x2F50, 65129 }, + { 0x2F52, 65131 }, + { 0x2F56, 65134 }, + { 0x2F58, 65136 }, + { 0x2F1A, 65139 }, + { 0x2F24, 65141 }, + { 0x2F33, 65143 }, + { 0x2F4A, 65145 }, + { 0x2F4E, 65147 }, + { 0x2F54, 65149 }, + { 0x2F0E, 65151 }, + { 0x2F42, 65153 }, + { 0x2F19, 65155 }, + { 0x2F0F, 65158 }, + { 0x2F23, 65160 }, + { 0x2F70, 65162 }, + { 0x2F71, 65164 }, + { 0x2F73, 65166 }, + { 0x2F49, 65168 }, + { 0x2F4D, 65170 }, + { 0x2F53, 65172 }, + { 0x2F74, 65174 }, + { 0x2F75, 65176 }, + { 0x2F76, 65178 }, + { 0x2F0D, 65180 }, + { 0x2F21, 65182 }, + { 0x1EEA, 65184 }, + { 0x1EEB, 65186 }, + { 0x2F17, 65188 }, + { 0x2E98, 65192 }, + { 0x2F14, 65196 }, + { 0x2F15, 65200 }, + { 0x2F16, 65204 }, + { 0x2E66, 65208 }, + { 0x2F98, 65210 }, + { 0x2F2C, 65212 }, + { 0x2F45, 65214 }, + { 0x2ED8, 65216 }, + { 0x2F0A, 65218 }, + { 0x2F2A, 65220 }, + { 0x2F43, 65222 }, + { 0x2F6B, 65224 }, + { 0x2F2B, 65226 }, + { 0x2F6E, 65228 }, + { 0x2F6F, 65230 }, + { 0x2F44, 65232 }, + { 0x2F72, 65234 }, + { 0x2F46, 65236 }, + { 0x2F47, 65238 }, + { 0x2F48, 65242 }, + { 0x2F2D, 65247 }, + { 0x2EC0, 65249 }, + { 0x2E9F, 65251 }, + { 0x2E9C, 65253 }, + { 0x2ECA, 65255 }, + { 0x2EBE, 65257 }, + { 0x2EBF, 65259 }, + { 0x2024, 65261 }, + { 0x7CD2, 65263 }, + { 0x7CD0, 65268 }, + { 0x7CD1, 65272 }, + { 0x2322, 65276 }, + { 0x2EA9, 65279 }, + { 0x2EDB, 65281 }, + { 0x2E9E, 65283 }, + { 0x2F22, 65285 }, + { 0x2EAD, 65287 }, + { 0x26F9, 65289 }, + { 0x2EE4, 65294 }, + { 0x2EE2, 65296 }, + { 0x2EC1, 65298 }, + { 0x2EA2, 65300 }, + { 0x2EA3, 65302 }, + { 0x2ED0, 65304 }, + { 0x2EC9, 65306 }, + { 0x2EEE, 65308 }, + { 0x2EEB, 65310 }, + { 0x1E71, 65312 }, + { 0x273E, 65314 }, + { 0x2213, 65319 }, + { 0x2741, 65324 }, + { 0x2216, 65331 }, + { 0x2214, 65338 }, + { 0x21D3, 65343 }, + { 0x2215, 65351 }, + { 0x21D4, 65358 }, + { 0x2740, 65366 }, + { 0x273F, 65373 }, + { 0x21D5, 65378 }, + { 0x21D1, 65383 }, + { 0x260C, 65387 }, + { 0x21D0, 65391 }, + { 0x21D2, 65395 }, + { 0x2EE9, 65400 }, + { 0x2E9B, 65402 }, + { 0x2ED5, 65404 }, + { 0x2EBD, 65406 }, + { 0x2EA1, 65408 }, + { 0x2EA8, 65410 }, + { 0x2EA7, 65412 }, + { 0x2EAA, 65414 }, + { 0x2EC3, 65416 }, + { 0x2EDA, 65418 }, + { 0x2ECE, 65420 }, + { 0x1EE6, 65422 }, + { 0x1F3B, 65425 }, + { 0x1EE8, 65432 }, + { 0x2EA4, 65438 }, + { 0x2EB5, 65440 }, + { 0x2EB7, 65442 }, + { 0x2EDE, 65444 }, + { 0x2EDD, 65446 }, + { 0x2EC2, 65448 }, + { 0x2EC5, 65450 }, + { 0x2ED4, 65452 }, + { 0x2ED3, 65454 }, + { 0x2ED9, 65456 }, + { 0x26FA, 65458 }, + { 0x2EEC, 65463 }, + { 0x2EBB, 65465 }, + { 0x2EBC, 65467 }, + { 0x2EF0, 65469 }, + { 0x2EE7, 65471 }, + { 0x2EE8, 65473 }, + { 0x2E99, 65475 }, + { 0x2E9A, 65477 }, + { 0x2ED7, 65479 }, + { 0x2EB1, 65481 }, + { 0x2ED2, 65483 }, + { 0x2ECC, 65485 }, + { 0x2E9D, 65487 }, + { 0x2EB6, 65489 }, + { 0x2EAB, 65491 }, + { 0x2EDF, 65493 }, + { 0x2ED1, 65495 }, + { 0x2EC8, 65497 }, + { 0x2ED6, 65499 }, + { 0x7CC3, 65501 }, + { 0x7CC4, 65506 }, + { 0x7CC6, 65511 }, + { 0x7CC5, 65516 }, + { 0x933B, 65521 }, + { 0x2EC6, 65523 }, + { 0x2EAC, 65525 }, + { 0x2EA5, 65527 }, + { 0x2EA6, 65529 }, + { 0x2EB4, 65531 }, + { 0x1F68, 65533 }, + { 0x2EDC, 65535 }, + { 0x2EE0, 65537 }, + { 0x2EE6, 65539 }, + { 0x2EE5, 65541 }, + { 0x2EE1, 65543 }, + { 0x2EEA, 65545 }, + { 0x2EED, 65547 }, + { 0x2EB8, 65549 }, + { 0x2EBA, 65551 }, + { 0x7CD3, 65553 }, + { 0x2ECD, 65555 }, + { 0x2EA0, 65557 }, + { 0x8E73, 65559 }, + { 0x2ECB, 65562 }, + { 0x1EE7, 65564 }, + { 0x1F3C, 65567 }, + { 0x1EE9, 65574 }, + { 0x2EC4, 65580 }, + { 0x27F9, 65582 }, + { 0x2EEF, 65585 }, + { 0x2EB9, 65587 }, + { 0x2EB2, 65589 }, + { 0x2ECF, 65591 }, + { 0x2EB0, 65593 }, + { 0x2EB3, 65595 }, + { 0x2EE3, 65597 }, + { 0x2EC7, 65599 }, + { 0x2EAE, 65601 }, + { 0x2F18, 65603 }, + { 0x2EAF, 65605 }, + { 0x91B0, 65607 }, + { 0x2355, 65610 }, + { 0x8F4C, 65614 }, + { 0x1ED9, 65616 }, + { 0x1EDD, 65618 }, + { 0x26EF, 65623 }, + { 0x1EE1, 65631 }, + { 0x26F7, 65637 }, + { 0x26F3, 65643 }, + { 0x26F5, 65648 }, + { 0x26F1, 65654 }, + { 0x26E9, 65659 }, + { 0x26EB, 65662 }, + { 0x26ED, 65667 }, + { 0x2701, 65672 }, + { 0x26FF, 65675 }, + { 0x25A5, 65678 }, + { 0x8EBA, 65682 }, + { 0x8F77, 65685 }, + { 0x379E, 65686 }, + { 0x37A3, 65690 }, + { 0x379A, 65694 }, + { 0x37C4, 65698 }, + { 0x37BB, 65703 }, + { 0x37BE, 65708 }, + { 0x37BC, 65713 }, + { 0x37BD, 65718 }, + { 0x37BF, 65723 }, + { 0x3798, 65728 }, + { 0x379C, 65732 }, + { 0x3799, 65736 }, + { 0x379D, 65740 }, + { 0x379B, 65744 }, + { 0x37B3, 65748 }, + { 0x37A4, 65752 }, + { 0x37AE, 65756 }, + { 0x37A1, 65760 }, + { 0x37BA, 65764 }, + { 0x37A6, 65768 }, + { 0x379F, 65772 }, + { 0x37B7, 65776 }, + { 0x37B5, 65780 }, + { 0x37B0, 65784 }, + { 0x37B1, 65788 }, + { 0x37B6, 65792 }, + { 0x37B9, 65796 }, + { 0x37AC, 65800 }, + { 0x37B4, 65804 }, + { 0x37A5, 65808 }, + { 0x37AA, 65812 }, + { 0x37AF, 65816 }, + { 0x37A2, 65820 }, + { 0x37A7, 65824 }, + { 0x37A0, 65828 }, + { 0x37B2, 65832 }, + { 0x37B8, 65836 }, + { 0x37AD, 65840 }, + { 0x37A8, 65844 }, + { 0x37AB, 65848 }, + { 0x37A9, 65852 }, + { 0x37C0, 65856 }, + { 0x37C1, 65860 }, + { 0x37C2, 65864 }, + { 0x37C3, 65868 }, + { 0x205A, 65872 }, + { 0x2070, 65877 }, + { 0x205B, 65882 }, + { 0x206E, 65887 }, + { 0x205E, 65893 }, + { 0x2067, 65896 }, + { 0x2073, 65901 }, + { 0x2063, 65905 }, + { 0x2061, 65909 }, + { 0x2057, 65913 }, + { 0x27C0, 65916 }, + { 0x2076, 65921 }, + { 0x2074, 65925 }, + { 0x90F8, 65929 }, + { 0x2066, 65933 }, + { 0x2065, 65937 }, + { 0x2077, 65941 }, + { 0x2059, 65944 }, + { 0x2058, 65949 }, + { 0x206F, 65954 }, + { 0x2078, 65957 }, + { 0x207C, 65960 }, + { 0x2080, 65965 }, + { 0x207E, 65971 }, + { 0x207F, 65978 }, + { 0x2068, 65985 }, + { 0x2069, 65990 }, + { 0x206B, 65995 }, + { 0x206A, 66000 }, + { 0x2072, 66005 }, + { 0x2075, 66008 }, + { 0x205C, 66012 }, + { 0x207B, 66015 }, + { 0x2064, 66018 }, + { 0x206C, 66022 }, + { 0x2062, 66026 }, + { 0x205F, 66030 }, + { 0x1DAA, 66033 }, + { 0x2060, 66037 }, + { 0x2071, 66041 }, + { 0x207D, 66044 }, + { 0x205D, 66049 }, + { 0x206D, 66052 }, + { 0x0699, 66056 }, + { 0x06DB, 66060 }, + { 0x06DC, 66065 }, + { 0x069F, 66070 }, + { 0x06A0, 66074 }, + { 0x06D5, 66078 }, + { 0x06D6, 66081 }, + { 0x06D2, 66084 }, + { 0x06D3, 66087 }, + { 0x06E1, 66090 }, + { 0x06CE, 66092 }, + { 0x06CF, 66095 }, + { 0x06D7, 66098 }, + { 0x06DD, 66100 }, + { 0x06DE, 66104 }, + { 0x06D1, 66108 }, + { 0x06D0, 66112 }, + { 0x06BD, 66116 }, + { 0x06AF, 66119 }, + { 0x06BE, 66122 }, + { 0x06B9, 66125 }, + { 0x06BA, 66128 }, + { 0x06C4, 66131 }, + { 0x06B0, 66134 }, + { 0x06AA, 66137 }, + { 0x06B2, 66140 }, + { 0x06B7, 66143 }, + { 0x06C1, 66146 }, + { 0x06C2, 66149 }, + { 0x06C3, 66152 }, + { 0x06B3, 66155 }, + { 0x06B4, 66158 }, + { 0x06B5, 66162 }, + { 0x06B6, 66165 }, + { 0x06B1, 66169 }, + { 0x06A8, 66172 }, + { 0x06BC, 66175 }, + { 0x06AB, 66179 }, + { 0x06AC, 66182 }, + { 0x06C0, 66186 }, + { 0x06AD, 66189 }, + { 0x06B8, 66192 }, + { 0x06AE, 66195 }, + { 0x06C5, 66200 }, + { 0x06C6, 66204 }, + { 0x06C7, 66208 }, + { 0x06BB, 66212 }, + { 0x06E5, 66215 }, + { 0x06E4, 66219 }, + { 0x06E3, 66223 }, + { 0x06BF, 66227 }, + { 0x07E1, 66231 }, + { 0x07E7, 66235 }, + { 0x07E6, 66239 }, + { 0x07E8, 66243 }, + { 0x07E0, 66247 }, + { 0x07E4, 66251 }, + { 0x07E2, 66255 }, + { 0x07EA, 66259 }, + { 0x07E3, 66263 }, + { 0x07E9, 66267 }, + { 0x07E5, 66271 }, + { 0x06A9, 66275 }, + { 0x06C8, 66279 }, + { 0x06C9, 66282 }, + { 0x06CA, 66285 }, + { 0x06CB, 66288 }, + { 0x06CC, 66291 }, + { 0x06CD, 66294 }, + { 0x06E2, 66297 }, + { 0x06DF, 66299 }, + { 0x06E0, 66303 }, + { 0x06D8, 66307 }, + { 0x06A4, 66310 }, + { 0x06A5, 66313 }, + { 0x06A6, 66316 }, + { 0x06DA, 66319 }, + { 0x06D9, 66321 }, + { 0x069B, 66323 }, + { 0x069D, 66327 }, + { 0x06A2, 66330 }, + { 0x06A2, 66335 }, + { 0x069E, 66340 }, + { 0x06A3, 66343 }, + { 0x06D4, 66345 }, + { 0x069A, 66348 }, + { 0x069C, 66352 }, + { 0x06A1, 66355 }, + { 0x06A7, 66360 }, + { 0x95E5, 66363 }, + { 0x723B, 66364 }, + { 0x7240, 66367 }, + { 0x723C, 66370 }, + { 0x723F, 66373 }, + { 0x723E, 66376 }, + { 0x7243, 66379 }, + { 0x723A, 66382 }, + { 0x7242, 66385 }, + { 0x7241, 66388 }, + { 0x723D, 66391 }, + { 0x71F0, 66394 }, + { 0x71F1, 66397 }, + { 0x71F2, 66400 }, + { 0x71EF, 66403 }, + { 0x7225, 66406 }, + { 0x7230, 66409 }, + { 0x722C, 66412 }, + { 0x71F8, 66415 }, + { 0x71F9, 66418 }, + { 0x71FA, 66421 }, + { 0x71F7, 66424 }, + { 0x7236, 66427 }, + { 0x721D, 66430 }, + { 0x7228, 66433 }, + { 0x71FC, 66436 }, + { 0x71FD, 66439 }, + { 0x71FE, 66442 }, + { 0x71FB, 66445 }, + { 0x721B, 66448 }, + { 0x7229, 66451 }, + { 0x7226, 66454 }, + { 0x7218, 66457 }, + { 0x7219, 66460 }, + { 0x721A, 66463 }, + { 0x7217, 66466 }, + { 0x7227, 66469 }, + { 0x71EC, 66472 }, + { 0x71ED, 66475 }, + { 0x71EE, 66478 }, + { 0x71EB, 66481 }, + { 0x7222, 66484 }, + { 0x722D, 66487 }, + { 0x721F, 66490 }, + { 0x722B, 66493 }, + { 0x7200, 66496 }, + { 0x7201, 66499 }, + { 0x7202, 66502 }, + { 0x71FF, 66505 }, + { 0x71F4, 66508 }, + { 0x71F5, 66511 }, + { 0x71F6, 66514 }, + { 0x71F3, 66517 }, + { 0x7221, 66520 }, + { 0x7235, 66523 }, + { 0x7220, 66526 }, + { 0x7239, 66529 }, + { 0x7204, 66532 }, + { 0x7205, 66535 }, + { 0x7206, 66538 }, + { 0x7203, 66541 }, + { 0x7238, 66544 }, + { 0x7237, 66547 }, + { 0x7232, 66550 }, + { 0x722A, 66553 }, + { 0x721C, 66556 }, + { 0x721E, 66559 }, + { 0x722E, 66562 }, + { 0x7223, 66565 }, + { 0x7224, 66568 }, + { 0x722F, 66571 }, + { 0x7234, 66574 }, + { 0x7231, 66577 }, + { 0x720F, 66580 }, + { 0x7211, 66583 }, + { 0x7212, 66586 }, + { 0x7210, 66589 }, + { 0x7208, 66592 }, + { 0x7209, 66595 }, + { 0x720A, 66598 }, + { 0x7207, 66601 }, + { 0x7233, 66604 }, + { 0x720C, 66607 }, + { 0x7214, 66611 }, + { 0x7215, 66614 }, + { 0x7216, 66617 }, + { 0x7213, 66620 }, + { 0x720B, 66623 }, + { 0x720E, 66627 }, + { 0x720D, 66631 }, + { 0x7411, 66635 }, + { 0x7418, 66638 }, + { 0x7419, 66640 }, + { 0x741A, 66642 }, + { 0x741B, 66644 }, + { 0x741C, 66646 }, + { 0x741D, 66648 }, + { 0x741E, 66650 }, + { 0x741F, 66652 }, + { 0x7420, 66654 }, + { 0x7421, 66656 }, + { 0x7422, 66658 }, + { 0x7423, 66660 }, + { 0x7424, 66662 }, + { 0x7425, 66664 }, + { 0x7426, 66666 }, + { 0x7427, 66668 }, + { 0x7428, 66670 }, + { 0x7429, 66672 }, + { 0x742A, 66674 }, + { 0x742B, 66676 }, + { 0x742C, 66678 }, + { 0x742D, 66680 }, + { 0x742E, 66682 }, + { 0x742F, 66684 }, + { 0x7430, 66686 }, + { 0x7431, 66688 }, + { 0x7432, 66690 }, + { 0x7433, 66692 }, + { 0x7434, 66694 }, + { 0x7435, 66696 }, + { 0x7436, 66698 }, + { 0x7437, 66700 }, + { 0x7438, 66702 }, + { 0x7439, 66704 }, + { 0x743A, 66706 }, + { 0x743B, 66708 }, + { 0x743C, 66710 }, + { 0x743D, 66712 }, + { 0x743E, 66714 }, + { 0x743F, 66716 }, + { 0x7440, 66718 }, + { 0x7441, 66720 }, + { 0x7442, 66722 }, + { 0x7443, 66724 }, + { 0x7444, 66726 }, + { 0x7445, 66728 }, + { 0x7446, 66730 }, + { 0x7447, 66732 }, + { 0x7448, 66734 }, + { 0x7449, 66736 }, + { 0x744A, 66738 }, + { 0x744B, 66740 }, + { 0x744C, 66742 }, + { 0x744D, 66744 }, + { 0x744E, 66746 }, + { 0x744F, 66748 }, + { 0x7450, 66750 }, + { 0x7451, 66752 }, + { 0x7452, 66754 }, + { 0x7453, 66756 }, + { 0x7454, 66758 }, + { 0x7455, 66760 }, + { 0x7456, 66762 }, + { 0x7457, 66764 }, + { 0x7458, 66766 }, + { 0x7459, 66768 }, + { 0x745A, 66770 }, + { 0x745B, 66772 }, + { 0x745C, 66774 }, + { 0x745D, 66776 }, + { 0x745E, 66778 }, + { 0x745F, 66780 }, + { 0x7460, 66782 }, + { 0x7461, 66784 }, + { 0x7462, 66786 }, + { 0x7463, 66788 }, + { 0x7464, 66790 }, + { 0x7465, 66792 }, + { 0x7466, 66794 }, + { 0x7467, 66796 }, + { 0x7468, 66798 }, + { 0x7469, 66800 }, + { 0x746A, 66802 }, + { 0x746B, 66804 }, + { 0x746C, 66806 }, + { 0x746D, 66808 }, + { 0x746E, 66810 }, + { 0x746F, 66812 }, + { 0x7470, 66814 }, + { 0x7471, 66816 }, + { 0x7472, 66818 }, + { 0x7473, 66820 }, + { 0x7474, 66822 }, + { 0x7475, 66824 }, + { 0x7476, 66826 }, + { 0x7477, 66828 }, + { 0x7478, 66830 }, + { 0x7479, 66832 }, + { 0x747A, 66834 }, + { 0x747B, 66836 }, + { 0x747C, 66838 }, + { 0x747D, 66840 }, + { 0x747E, 66842 }, + { 0x747F, 66844 }, + { 0x7480, 66846 }, + { 0x7481, 66848 }, + { 0x7482, 66850 }, + { 0x7483, 66852 }, + { 0x7484, 66854 }, + { 0x7485, 66856 }, + { 0x7486, 66858 }, + { 0x7487, 66860 }, + { 0x7488, 66862 }, + { 0x7489, 66864 }, + { 0x748A, 66866 }, + { 0x748B, 66868 }, + { 0x748C, 66870 }, + { 0x748D, 66872 }, + { 0x748E, 66874 }, + { 0x748F, 66876 }, + { 0x7490, 66878 }, + { 0x7491, 66880 }, + { 0x7492, 66882 }, + { 0x7493, 66884 }, + { 0x7494, 66886 }, + { 0x7495, 66888 }, + { 0x7496, 66890 }, + { 0x7497, 66892 }, + { 0x7498, 66894 }, + { 0x7499, 66896 }, + { 0x749A, 66898 }, + { 0x749B, 66900 }, + { 0x749C, 66902 }, + { 0x749D, 66904 }, + { 0x749E, 66906 }, + { 0x749F, 66908 }, + { 0x74A0, 66910 }, + { 0x74A1, 66912 }, + { 0x74A2, 66914 }, + { 0x74A3, 66916 }, + { 0x74A4, 66918 }, + { 0x74A5, 66920 }, + { 0x74A6, 66922 }, + { 0x74A7, 66924 }, + { 0x74A8, 66926 }, + { 0x74A9, 66928 }, + { 0x74AA, 66930 }, + { 0x74AB, 66932 }, + { 0x74AC, 66934 }, + { 0x74AD, 66936 }, + { 0x74AE, 66938 }, + { 0x74AF, 66940 }, + { 0x74B0, 66942 }, + { 0x74B1, 66944 }, + { 0x74B2, 66946 }, + { 0x74B3, 66948 }, + { 0x74B4, 66950 }, + { 0x74B5, 66952 }, + { 0x74B6, 66954 }, + { 0x74B7, 66956 }, + { 0x74B8, 66958 }, + { 0x74B9, 66960 }, + { 0x74BA, 66962 }, + { 0x74BB, 66964 }, + { 0x74BC, 66966 }, + { 0x74BD, 66968 }, + { 0x74BE, 66970 }, + { 0x74BF, 66972 }, + { 0x74C0, 66974 }, + { 0x74C1, 66976 }, + { 0x74C2, 66978 }, + { 0x74C3, 66980 }, + { 0x74C4, 66982 }, + { 0x74C5, 66984 }, + { 0x74C6, 66986 }, + { 0x74C7, 66988 }, + { 0x74C8, 66990 }, + { 0x74C9, 66992 }, + { 0x74CA, 66994 }, + { 0x74CB, 66996 }, + { 0x74CC, 66998 }, + { 0x74CD, 67000 }, + { 0x74CE, 67002 }, + { 0x74CF, 67004 }, + { 0x74D0, 67006 }, + { 0x74D1, 67008 }, + { 0x74D2, 67010 }, + { 0x74D3, 67012 }, + { 0x74D4, 67014 }, + { 0x74D5, 67016 }, + { 0x74D6, 67018 }, + { 0x74D7, 67020 }, + { 0x74D8, 67022 }, + { 0x74D9, 67024 }, + { 0x74DA, 67026 }, + { 0x74DB, 67028 }, + { 0x74DC, 67030 }, + { 0x74DD, 67032 }, + { 0x74DE, 67034 }, + { 0x74DF, 67036 }, + { 0x74E0, 67038 }, + { 0x74E1, 67040 }, + { 0x74E2, 67042 }, + { 0x74E3, 67044 }, + { 0x74E4, 67046 }, + { 0x74E5, 67048 }, + { 0x74E6, 67050 }, + { 0x74E7, 67052 }, + { 0x74E8, 67054 }, + { 0x74E9, 67056 }, + { 0x74EA, 67058 }, + { 0x74EB, 67060 }, + { 0x74EC, 67062 }, + { 0x74ED, 67064 }, + { 0x74EE, 67066 }, + { 0x74EF, 67068 }, + { 0x74F0, 67070 }, + { 0x74F1, 67072 }, + { 0x74F2, 67074 }, + { 0x74F3, 67076 }, + { 0x74F4, 67078 }, + { 0x74F5, 67080 }, + { 0x74F6, 67082 }, + { 0x74F7, 67084 }, + { 0x74F8, 67086 }, + { 0x74F9, 67088 }, + { 0x74FA, 67090 }, + { 0x74FB, 67092 }, + { 0x74FC, 67094 }, + { 0x74FD, 67096 }, + { 0x74FE, 67098 }, + { 0x74FF, 67100 }, + { 0x7500, 67102 }, + { 0x7501, 67104 }, + { 0x7502, 67106 }, + { 0x7503, 67108 }, + { 0x7504, 67110 }, + { 0x7505, 67112 }, + { 0x7506, 67114 }, + { 0x7507, 67116 }, + { 0x7508, 67118 }, + { 0x7509, 67120 }, + { 0x750A, 67122 }, + { 0x750B, 67124 }, + { 0x750C, 67126 }, + { 0x750D, 67128 }, + { 0x750E, 67130 }, + { 0x750F, 67132 }, + { 0x7510, 67134 }, + { 0x7511, 67136 }, + { 0x7512, 67138 }, + { 0x7513, 67140 }, + { 0x7514, 67142 }, + { 0x7515, 67144 }, + { 0x7516, 67146 }, + { 0x7517, 67148 }, + { 0x7518, 67150 }, + { 0x7519, 67152 }, + { 0x751A, 67154 }, + { 0x751B, 67156 }, + { 0x751C, 67158 }, + { 0x751D, 67160 }, + { 0x751E, 67162 }, + { 0x751F, 67164 }, + { 0x7520, 67166 }, + { 0x7521, 67168 }, + { 0x7522, 67170 }, + { 0x7523, 67172 }, + { 0x7524, 67174 }, + { 0x7525, 67176 }, + { 0x7526, 67178 }, + { 0x7527, 67180 }, + { 0x7528, 67182 }, + { 0x7529, 67184 }, + { 0x752A, 67186 }, + { 0x752B, 67188 }, + { 0x752C, 67190 }, + { 0x752D, 67192 }, + { 0x752E, 67194 }, + { 0x752F, 67196 }, + { 0x7530, 67198 }, + { 0x7531, 67200 }, + { 0x7532, 67202 }, + { 0x7533, 67204 }, + { 0x7534, 67206 }, + { 0x7535, 67208 }, + { 0x7536, 67210 }, + { 0x7537, 67212 }, + { 0x7538, 67214 }, + { 0x7539, 67216 }, + { 0x753A, 67218 }, + { 0x753B, 67220 }, + { 0x753C, 67222 }, + { 0x753D, 67224 }, + { 0x753E, 67226 }, + { 0x753F, 67228 }, + { 0x7540, 67230 }, + { 0x7541, 67232 }, + { 0x7542, 67234 }, + { 0x7543, 67236 }, + { 0x7544, 67238 }, + { 0x7545, 67240 }, + { 0x7546, 67242 }, + { 0x7547, 67244 }, + { 0x7548, 67246 }, + { 0x7549, 67248 }, + { 0x754A, 67250 }, + { 0x754B, 67252 }, + { 0x754C, 67254 }, + { 0x754D, 67256 }, + { 0x754E, 67258 }, + { 0x754F, 67260 }, + { 0x7550, 67262 }, + { 0x7551, 67264 }, + { 0x7552, 67266 }, + { 0x7553, 67268 }, + { 0x7554, 67270 }, + { 0x7555, 67272 }, + { 0x7556, 67274 }, + { 0x7557, 67276 }, + { 0x7558, 67278 }, + { 0x7559, 67280 }, + { 0x755A, 67282 }, + { 0x755B, 67284 }, + { 0x755C, 67286 }, + { 0x755D, 67288 }, + { 0x755E, 67290 }, + { 0x755F, 67292 }, + { 0x7560, 67294 }, + { 0x7561, 67296 }, + { 0x7562, 67298 }, + { 0x7563, 67300 }, + { 0x7564, 67302 }, + { 0x7565, 67304 }, + { 0x7566, 67306 }, + { 0x7567, 67308 }, + { 0x7568, 67310 }, + { 0x7569, 67312 }, + { 0x756A, 67314 }, + { 0x756B, 67316 }, + { 0x756C, 67318 }, + { 0x756D, 67320 }, + { 0x756E, 67322 }, + { 0x756F, 67324 }, + { 0x7570, 67326 }, + { 0x7571, 67328 }, + { 0x7572, 67330 }, + { 0x7573, 67332 }, + { 0x7574, 67334 }, + { 0x7575, 67336 }, + { 0x7576, 67338 }, + { 0x7577, 67340 }, + { 0x7578, 67342 }, + { 0x7579, 67344 }, + { 0x757A, 67346 }, + { 0x757B, 67348 }, + { 0x757C, 67350 }, + { 0x757D, 67352 }, + { 0x757E, 67354 }, + { 0x757F, 67356 }, + { 0x7580, 67358 }, + { 0x7581, 67360 }, + { 0x7582, 67362 }, + { 0x7583, 67364 }, + { 0x7584, 67366 }, + { 0x7585, 67368 }, + { 0x7586, 67370 }, + { 0x7587, 67372 }, + { 0x7588, 67374 }, + { 0x7589, 67376 }, + { 0x758A, 67378 }, + { 0x758B, 67380 }, + { 0x758C, 67382 }, + { 0x758D, 67384 }, + { 0x758E, 67386 }, + { 0x758F, 67388 }, + { 0x7590, 67390 }, + { 0x7591, 67392 }, + { 0x7592, 67394 }, + { 0x7593, 67396 }, + { 0x7594, 67398 }, + { 0x7595, 67400 }, + { 0x7596, 67402 }, + { 0x7597, 67404 }, + { 0x7598, 67406 }, + { 0x7599, 67408 }, + { 0x759A, 67410 }, + { 0x759B, 67412 }, + { 0x759C, 67414 }, + { 0x759D, 67416 }, + { 0x759E, 67418 }, + { 0x759F, 67420 }, + { 0x75A0, 67422 }, + { 0x75A1, 67424 }, + { 0x75A2, 67426 }, + { 0x75A3, 67428 }, + { 0x75A4, 67430 }, + { 0x75A5, 67432 }, + { 0x75A6, 67434 }, + { 0x75A7, 67436 }, + { 0x75A8, 67438 }, + { 0x75A9, 67440 }, + { 0x75AA, 67442 }, + { 0x75AB, 67444 }, + { 0x75AC, 67446 }, + { 0x75AD, 67448 }, + { 0x75AE, 67450 }, + { 0x75AF, 67452 }, + { 0x75B0, 67454 }, + { 0x75B1, 67456 }, + { 0x75B2, 67458 }, + { 0x75B3, 67460 }, + { 0x75B4, 67462 }, + { 0x75B5, 67464 }, + { 0x75B6, 67466 }, + { 0x75B7, 67468 }, + { 0x75B8, 67470 }, + { 0x75B9, 67472 }, + { 0x75BA, 67474 }, + { 0x75BB, 67476 }, + { 0x75BC, 67478 }, + { 0x75BD, 67480 }, + { 0x75BE, 67482 }, + { 0x75BF, 67484 }, + { 0x75C0, 67486 }, + { 0x75C1, 67488 }, + { 0x75C2, 67490 }, + { 0x75C3, 67492 }, + { 0x75C4, 67494 }, + { 0x75C5, 67496 }, + { 0x75C6, 67498 }, + { 0x75C7, 67500 }, + { 0x75C8, 67502 }, + { 0x75C9, 67504 }, + { 0x75CA, 67506 }, + { 0x75CB, 67508 }, + { 0x75CC, 67510 }, + { 0x75CD, 67512 }, + { 0x75CE, 67514 }, + { 0x75CF, 67516 }, + { 0x75D0, 67518 }, + { 0x75D1, 67520 }, + { 0x75D2, 67522 }, + { 0x75D3, 67524 }, + { 0x75D4, 67526 }, + { 0x75D5, 67528 }, + { 0x75D6, 67530 }, + { 0x75D7, 67532 }, + { 0x75D8, 67534 }, + { 0x75D9, 67536 }, + { 0x75DA, 67538 }, + { 0x75DB, 67540 }, + { 0x75DC, 67542 }, + { 0x75DD, 67544 }, + { 0x75DE, 67546 }, + { 0x75DF, 67548 }, + { 0x75E0, 67550 }, + { 0x75E1, 67552 }, + { 0x75E2, 67554 }, + { 0x75E3, 67556 }, + { 0x75E4, 67558 }, + { 0x75E5, 67560 }, + { 0x75E6, 67562 }, + { 0x75E7, 67564 }, + { 0x75E8, 67566 }, + { 0x75E9, 67568 }, + { 0x75EA, 67570 }, + { 0x75EB, 67572 }, + { 0x75EC, 67574 }, + { 0x75ED, 67576 }, + { 0x75EE, 67578 }, + { 0x75EF, 67580 }, + { 0x75F0, 67582 }, + { 0x75F1, 67584 }, + { 0x75F2, 67586 }, + { 0x75F3, 67588 }, + { 0x75F4, 67590 }, + { 0x75F5, 67592 }, + { 0x75F6, 67594 }, + { 0x75F7, 67596 }, + { 0x75F8, 67598 }, + { 0x75F9, 67600 }, + { 0x75FA, 67602 }, + { 0x75FB, 67604 }, + { 0x75FC, 67606 }, + { 0x75FD, 67608 }, + { 0x75FE, 67610 }, + { 0x75FF, 67612 }, + { 0x7600, 67614 }, + { 0x7601, 67616 }, + { 0x7602, 67618 }, + { 0x7603, 67620 }, + { 0x7604, 67622 }, + { 0x7605, 67624 }, + { 0x7606, 67626 }, + { 0x7607, 67628 }, + { 0x7608, 67630 }, + { 0x7609, 67632 }, + { 0x760A, 67634 }, + { 0x760B, 67636 }, + { 0x760C, 67638 }, + { 0x760D, 67640 }, + { 0x760E, 67642 }, + { 0x760F, 67644 }, + { 0x7610, 67646 }, + { 0x7611, 67648 }, + { 0x7612, 67650 }, + { 0x7613, 67652 }, + { 0x7614, 67654 }, + { 0x7615, 67656 }, + { 0x7616, 67658 }, + { 0x7617, 67660 }, + { 0x7618, 67662 }, + { 0x7619, 67664 }, + { 0x761A, 67666 }, + { 0x761B, 67668 }, + { 0x761C, 67670 }, + { 0x761D, 67672 }, + { 0x761E, 67674 }, + { 0x761F, 67676 }, + { 0x7620, 67678 }, + { 0x7621, 67680 }, + { 0x7622, 67682 }, + { 0x7623, 67684 }, + { 0x7624, 67686 }, + { 0x7625, 67688 }, + { 0x7626, 67690 }, + { 0x7627, 67692 }, + { 0x7628, 67694 }, + { 0x7629, 67696 }, + { 0x762A, 67698 }, + { 0x762B, 67700 }, + { 0x762C, 67702 }, + { 0x762D, 67704 }, + { 0x762E, 67706 }, + { 0x762F, 67708 }, + { 0x7630, 67710 }, + { 0x7631, 67712 }, + { 0x7632, 67714 }, + { 0x7633, 67716 }, + { 0x7634, 67718 }, + { 0x7635, 67720 }, + { 0x7636, 67722 }, + { 0x7637, 67724 }, + { 0x7638, 67726 }, + { 0x7639, 67728 }, + { 0x763A, 67730 }, + { 0x763B, 67732 }, + { 0x763C, 67734 }, + { 0x763D, 67736 }, + { 0x763E, 67738 }, + { 0x763F, 67740 }, + { 0x7640, 67742 }, + { 0x7641, 67744 }, + { 0x7642, 67746 }, + { 0x7643, 67748 }, + { 0x7644, 67750 }, + { 0x7645, 67752 }, + { 0x7646, 67754 }, + { 0x7647, 67756 }, + { 0x7648, 67758 }, + { 0x7649, 67760 }, + { 0x764A, 67762 }, + { 0x764B, 67764 }, + { 0x764C, 67766 }, + { 0x764D, 67768 }, + { 0x764E, 67770 }, + { 0x764F, 67772 }, + { 0x7650, 67774 }, + { 0x7651, 67776 }, + { 0x7652, 67778 }, + { 0x7653, 67780 }, + { 0x7654, 67782 }, + { 0x7655, 67784 }, + { 0x7656, 67786 }, + { 0x7657, 67788 }, + { 0x7658, 67790 }, + { 0x7659, 67792 }, + { 0x765A, 67794 }, + { 0x765B, 67796 }, + { 0x765C, 67798 }, + { 0x765D, 67800 }, + { 0x765E, 67802 }, + { 0x765F, 67804 }, + { 0x7660, 67806 }, + { 0x7661, 67808 }, + { 0x7662, 67810 }, + { 0x7663, 67812 }, + { 0x7664, 67814 }, + { 0x7665, 67816 }, + { 0x7666, 67818 }, + { 0x7667, 67820 }, + { 0x7668, 67822 }, + { 0x7669, 67824 }, + { 0x766A, 67826 }, + { 0x766B, 67828 }, + { 0x766C, 67830 }, + { 0x766D, 67832 }, + { 0x766E, 67834 }, + { 0x766F, 67836 }, + { 0x7670, 67838 }, + { 0x7671, 67840 }, + { 0x7672, 67842 }, + { 0x7673, 67844 }, + { 0x7674, 67846 }, + { 0x7675, 67848 }, + { 0x7676, 67850 }, + { 0x7677, 67852 }, + { 0x7678, 67854 }, + { 0x7679, 67856 }, + { 0x767A, 67858 }, + { 0x767B, 67860 }, + { 0x767C, 67862 }, + { 0x767D, 67864 }, + { 0x767E, 67866 }, + { 0x767F, 67868 }, + { 0x7680, 67870 }, + { 0x7681, 67872 }, + { 0x7682, 67874 }, + { 0x7683, 67876 }, + { 0x7684, 67878 }, + { 0x7685, 67880 }, + { 0x7686, 67882 }, + { 0x7687, 67884 }, + { 0x7688, 67886 }, + { 0x7689, 67888 }, + { 0x768A, 67890 }, + { 0x768B, 67892 }, + { 0x768C, 67894 }, + { 0x768D, 67896 }, + { 0x768E, 67898 }, + { 0x768F, 67900 }, + { 0x7690, 67902 }, + { 0x7691, 67904 }, + { 0x7692, 67906 }, + { 0x7693, 67908 }, + { 0x7694, 67910 }, + { 0x7695, 67912 }, + { 0x7696, 67914 }, + { 0x7697, 67916 }, + { 0x7698, 67918 }, + { 0x7699, 67920 }, + { 0x769A, 67922 }, + { 0x769B, 67924 }, + { 0x769C, 67926 }, + { 0x769D, 67928 }, + { 0x769E, 67930 }, + { 0x769F, 67932 }, + { 0x76A0, 67934 }, + { 0x76A1, 67936 }, + { 0x76A2, 67938 }, + { 0x76A3, 67940 }, + { 0x76A4, 67942 }, + { 0x76A5, 67944 }, + { 0x76A6, 67946 }, + { 0x76A7, 67948 }, + { 0x76A8, 67950 }, + { 0x76A9, 67952 }, + { 0x76AA, 67954 }, + { 0x76AB, 67956 }, + { 0x76AC, 67958 }, + { 0x76AD, 67960 }, + { 0x76AE, 67962 }, + { 0x76AF, 67964 }, + { 0x76B0, 67966 }, + { 0x76B1, 67968 }, + { 0x76B2, 67970 }, + { 0x76B3, 67972 }, + { 0x76B4, 67974 }, + { 0x76B5, 67976 }, + { 0x76B6, 67978 }, + { 0x76B7, 67980 }, + { 0x76B8, 67982 }, + { 0x76B9, 67984 }, + { 0x76BA, 67986 }, + { 0x76BB, 67988 }, + { 0x76BC, 67990 }, + { 0x76BD, 67992 }, + { 0x76BE, 67994 }, + { 0x76BF, 67996 }, + { 0x76C0, 67998 }, + { 0x76C1, 68000 }, + { 0x76C2, 68002 }, + { 0x76C3, 68004 }, + { 0x76C4, 68006 }, + { 0x76C5, 68008 }, + { 0x76C6, 68010 }, + { 0x76C7, 68012 }, + { 0x76C8, 68014 }, + { 0x76C9, 68016 }, + { 0x76CA, 68018 }, + { 0x76CB, 68020 }, + { 0x76CC, 68022 }, + { 0x76CD, 68024 }, + { 0x76CE, 68026 }, + { 0x76CF, 68028 }, + { 0x76D0, 68030 }, + { 0x76D1, 68032 }, + { 0x76D2, 68034 }, + { 0x76D3, 68036 }, + { 0x76D4, 68038 }, + { 0x76D5, 68040 }, + { 0x76D6, 68042 }, + { 0x76D7, 68044 }, + { 0x76D8, 68046 }, + { 0x76D9, 68048 }, + { 0x76DA, 68050 }, + { 0x76DB, 68052 }, + { 0x76DC, 68054 }, + { 0x76DD, 68056 }, + { 0x76DE, 68058 }, + { 0x76DF, 68060 }, + { 0x76E0, 68062 }, + { 0x76E1, 68064 }, + { 0x76E2, 68066 }, + { 0x76E3, 68068 }, + { 0x76E4, 68070 }, + { 0x76E5, 68072 }, + { 0x76E6, 68074 }, + { 0x76E7, 68076 }, + { 0x76E8, 68078 }, + { 0x76E9, 68080 }, + { 0x76EA, 68082 }, + { 0x76EB, 68084 }, + { 0x76EC, 68086 }, + { 0x76ED, 68088 }, + { 0x76EE, 68090 }, + { 0x76EF, 68092 }, + { 0x76F0, 68094 }, + { 0x76F1, 68096 }, + { 0x76F2, 68098 }, + { 0x76F3, 68100 }, + { 0x76F4, 68102 }, + { 0x76F5, 68104 }, + { 0x76F6, 68106 }, + { 0x76F7, 68108 }, + { 0x76F8, 68110 }, + { 0x76F9, 68112 }, + { 0x76FA, 68114 }, + { 0x76FB, 68116 }, + { 0x76FC, 68118 }, + { 0x76FD, 68120 }, + { 0x76FE, 68122 }, + { 0x76FF, 68124 }, + { 0x7700, 68126 }, + { 0x7701, 68128 }, + { 0x7702, 68130 }, + { 0x7703, 68132 }, + { 0x7704, 68134 }, + { 0x7705, 68136 }, + { 0x7706, 68138 }, + { 0x7707, 68140 }, + { 0x7708, 68142 }, + { 0x7709, 68144 }, + { 0x770A, 68146 }, + { 0x770B, 68148 }, + { 0x770C, 68150 }, + { 0x770D, 68152 }, + { 0x770E, 68154 }, + { 0x770F, 68156 }, + { 0x7710, 68158 }, + { 0x7711, 68160 }, + { 0x7712, 68162 }, + { 0x7713, 68164 }, + { 0x7714, 68166 }, + { 0x7715, 68168 }, + { 0x7716, 68170 }, + { 0x7717, 68172 }, + { 0x2275, 68174 }, + { 0x8F28, 68175 }, + { 0x95E7, 68178 }, + { 0x0AEB, 68179 }, + { 0x0ADA, 68183 }, + { 0x0B06, 68186 }, + { 0x0AE9, 68189 }, + { 0x0AFE, 68192 }, + { 0x0AA6, 68195 }, + { 0x0AA5, 68198 }, + { 0x0ADB, 68201 }, + { 0x0AA7, 68204 }, + { 0x0AA3, 68209 }, + { 0x0AA4, 68214 }, + { 0x0AF5, 68217 }, + { 0x0AFA, 68220 }, + { 0x0AF6, 68223 }, + { 0x0AF9, 68226 }, + { 0x0AF8, 68229 }, + { 0x0AFD, 68232 }, + { 0x0AF4, 68235 }, + { 0x0AFC, 68238 }, + { 0x0AFB, 68241 }, + { 0x0AF7, 68244 }, + { 0x0AE3, 68247 }, + { 0x0ADD, 68251 }, + { 0x0AE6, 68255 }, + { 0x0ADF, 68259 }, + { 0x0ADC, 68263 }, + { 0x0AE5, 68267 }, + { 0x0AE8, 68271 }, + { 0x0AE4, 68275 }, + { 0x0ADE, 68279 }, + { 0x0AE7, 68283 }, + { 0x0AE0, 68287 }, + { 0x0AF2, 68291 }, + { 0x0AE1, 68296 }, + { 0x0AF3, 68301 }, + { 0x0AE2, 68306 }, + { 0x0AEA, 68311 }, + { 0x0AA8, 68314 }, + { 0x0AB0, 68317 }, + { 0x0AAA, 68320 }, + { 0x0AB3, 68323 }, + { 0x0AAC, 68326 }, + { 0x0AA9, 68329 }, + { 0x0AB2, 68332 }, + { 0x0AB5, 68335 }, + { 0x0ACC, 68338 }, + { 0x0ABB, 68341 }, + { 0x0AC7, 68344 }, + { 0x0AB1, 68347 }, + { 0x0AB8, 68350 }, + { 0x0AD9, 68353 }, + { 0x0AAB, 68356 }, + { 0x0ABD, 68359 }, + { 0x0AB6, 68362 }, + { 0x0AD2, 68365 }, + { 0x0ACE, 68368 }, + { 0x0AC9, 68371 }, + { 0x0AB4, 68374 }, + { 0x0ACA, 68377 }, + { 0x0AD0, 68380 }, + { 0x0AD8, 68383 }, + { 0x0AC5, 68386 }, + { 0x0AAD, 68389 }, + { 0x0AD5, 68392 }, + { 0x0ACF, 68395 }, + { 0x0ACD, 68398 }, + { 0x0ABC, 68401 }, + { 0x0AC2, 68404 }, + { 0x0AC8, 68407 }, + { 0x0AED, 68410 }, + { 0x0AB9, 68413 }, + { 0x0ABE, 68416 }, + { 0x0AB7, 68419 }, + { 0x0AD3, 68422 }, + { 0x0ABA, 68425 }, + { 0x0AC4, 68428 }, + { 0x0ABF, 68431 }, + { 0x0ACB, 68434 }, + { 0x0AD1, 68437 }, + { 0x0AD6, 68440 }, + { 0x0AD7, 68443 }, + { 0x0AC6, 68446 }, + { 0x0AEC, 68449 }, + { 0x0AC0, 68452 }, + { 0x0AC3, 68455 }, + { 0x0AD4, 68458 }, + { 0x0AEE, 68461 }, + { 0x0AC1, 68464 }, + { 0x0AEF, 68467 }, + { 0x0AAF, 68471 }, + { 0x0AAE, 68475 }, + { 0x0AF1, 68479 }, + { 0x0AF0, 68483 }, + { 0x0B00, 68487 }, + { 0x0B03, 68496 }, + { 0x0B01, 68505 }, + { 0x0B04, 68514 }, + { 0x0AFF, 68523 }, + { 0x0B02, 68532 }, + { 0x0B05, 68541 }, + { 0x8F71, 68550 }, + { 0x0746, 68554 }, + { 0x0736, 68556 }, + { 0x0737, 68559 }, + { 0x071A, 68562 }, + { 0x0716, 68565 }, + { 0x0747, 68568 }, + { 0x0719, 68571 }, + { 0x072A, 68574 }, + { 0x0732, 68577 }, + { 0x0738, 68580 }, + { 0x072F, 68583 }, + { 0x0730, 68586 }, + { 0x0722, 68589 }, + { 0x072E, 68592 }, + { 0x071D, 68595 }, + { 0x0720, 68598 }, + { 0x0724, 68601 }, + { 0x071C, 68604 }, + { 0x0723, 68607 }, + { 0x071F, 68610 }, + { 0x0718, 68613 }, + { 0x073A, 68616 }, + { 0x0726, 68619 }, + { 0x071E, 68622 }, + { 0x073B, 68625 }, + { 0x0735, 68628 }, + { 0x0721, 68631 }, + { 0x0739, 68634 }, + { 0x0734, 68637 }, + { 0x0733, 68640 }, + { 0x0731, 68643 }, + { 0x0727, 68646 }, + { 0x072C, 68649 }, + { 0x072B, 68652 }, + { 0x0729, 68655 }, + { 0x0728, 68658 }, + { 0x072D, 68661 }, + { 0x0725, 68664 }, + { 0x071B, 68667 }, + { 0x0717, 68670 }, + { 0x073C, 68673 }, + { 0x0742, 68675 }, + { 0x073E, 68677 }, + { 0x0744, 68679 }, + { 0x0740, 68681 }, + { 0x073D, 68683 }, + { 0x073F, 68685 }, + { 0x0743, 68687 }, + { 0x0745, 68689 }, + { 0x0741, 68691 }, + { 0x9000, 68693 }, + { 0x9001, 68696 }, + { 0x8F5E, 68699 }, + { 0x4432, 68700 }, + { 0x443C, 68703 }, + { 0x4444, 68706 }, + { 0x444C, 68709 }, + { 0x4456, 68712 }, + { 0x445C, 68715 }, + { 0x4433, 68718 }, + { 0x4434, 68721 }, + { 0x4436, 68724 }, + { 0x4438, 68727 }, + { 0x443B, 68730 }, + { 0x443D, 68733 }, + { 0x443E, 68736 }, + { 0x4442, 68739 }, + { 0x4445, 68742 }, + { 0x445D, 68745 }, + { 0x4446, 68748 }, + { 0x4447, 68751 }, + { 0x4449, 68754 }, + { 0x444A, 68757 }, + { 0x4465, 68760 }, + { 0x444D, 68763 }, + { 0x444E, 68766 }, + { 0x444F, 68769 }, + { 0x4451, 68772 }, + { 0x4454, 68775 }, + { 0x4457, 68778 }, + { 0x4458, 68781 }, + { 0x445E, 68784 }, + { 0x4437, 68787 }, + { 0x443A, 68790 }, + { 0x4460, 68793 }, + { 0x4440, 68796 }, + { 0x4443, 68799 }, + { 0x4463, 68802 }, + { 0x4448, 68805 }, + { 0x4435, 68808 }, + { 0x4439, 68811 }, + { 0x443F, 68814 }, + { 0x4459, 68817 }, + { 0x4464, 68820 }, + { 0x4450, 68823 }, + { 0x4452, 68826 }, + { 0x4461, 68829 }, + { 0x4455, 68832 }, + { 0x445A, 68835 }, + { 0x445F, 68838 }, + { 0x4441, 68841 }, + { 0x444B, 68844 }, + { 0x445B, 68847 }, + { 0x4453, 68850 }, + { 0x4462, 68853 }, + { 0x9270, 68856 }, + { 0x8EF8, 68857 }, + { 0x8FF8, 68858 }, + { 0x2627, 68859 }, + { 0x2722, 68861 }, + { 0x1CB4, 68864 }, + { 0x1EA2, 68866 }, + { 0x2A41, 68868 }, + { 0x2723, 68870 }, + { 0x2724, 68873 }, + { 0x2727, 68876 }, + { 0x1E84, 68880 }, + { 0x2721, 68882 }, + { 0x1F01, 68888 }, + { 0x2720, 68893 }, + { 0x25AC, 68898 }, + { 0x2694, 68902 }, + { 0x2695, 68909 }, + { 0x8F79, 68916 }, + { 0x1D27, 68917 }, + { 0x94B1, 68919 }, + { 0x9142, 68920 }, + { 0x1F70, 68924 }, + { 0x25CE, 68927 }, + { 0x22F6, 68929 }, + { 0x27EB, 68933 }, + { 0x2A28, 68936 }, + { 0x1DE5, 68938 }, + { 0x1DE6, 68941 }, + { 0x1D84, 68944 }, + { 0x9209, 68949 }, + { 0x9207, 68954 }, + { 0x1DA9, 68959 }, + { 0x920A, 68962 }, + { 0x9208, 68967 }, + { 0x22F5, 68972 }, + { 0x2A2E, 68976 }, + { 0x1D8D, 68978 }, + { 0x1DA6, 68981 }, + { 0x2A2B, 68983 }, + { 0x1D9C, 68985 }, + { 0x1D9D, 68989 }, + { 0x1D9F, 68993 }, + { 0x8FD5, 68997 }, + { 0x2365, 68998 }, + { 0x2A30, 69002 }, + { 0x2823, 69004 }, + { 0x2271, 69006 }, + { 0x265B, 69007 }, + { 0x8F6E, 69011 }, + { 0x96BC, 69012 }, + { 0x1E87, 69015 }, + { 0x007C, 69017 }, + { 0x1DB0, 69021 }, + { 0x1DAC, 69025 }, + { 0x1DB4, 69029 }, + { 0x1DAD, 69033 }, + { 0x1DAE, 69037 }, + { 0x1DB6, 69041 }, + { 0x007B, 69045 }, + { 0x1DAB, 69049 }, + { 0x1DB1, 69053 }, + { 0x1DAF, 69057 }, + { 0x1DB5, 69061 }, + { 0x1DB8, 69065 }, + { 0x1DB3, 69069 }, + { 0x1DE4, 69073 }, + { 0x1DB9, 69077 }, + { 0x1DB2, 69081 }, + { 0x1DB7, 69085 }, + { 0x007D, 69089 }, + { 0x94F5, 69093 }, + { 0x8A19, 69094 }, + { 0x8A0D, 69097 }, + { 0x8A0B, 69100 }, + { 0x8A0E, 69103 }, + { 0x8A0C, 69106 }, + { 0x8A10, 69109 }, + { 0x8A15, 69112 }, + { 0x8A11, 69115 }, + { 0x8A14, 69118 }, + { 0x8A13, 69121 }, + { 0x8A18, 69124 }, + { 0x8A0F, 69127 }, + { 0x8A17, 69130 }, + { 0x8A16, 69133 }, + { 0x8A12, 69136 }, + { 0x89E0, 69139 }, + { 0x89FA, 69142 }, + { 0x89FB, 69145 }, + { 0x89F4, 69148 }, + { 0x89FD, 69151 }, + { 0x89DF, 69154 }, + { 0x89F5, 69157 }, + { 0x89E1, 69160 }, + { 0x89E2, 69163 }, + { 0x89E3, 69166 }, + { 0x8A06, 69169 }, + { 0x89EC, 69172 }, + { 0x89E4, 69175 }, + { 0x89F9, 69178 }, + { 0x89EF, 69181 }, + { 0x89F3, 69184 }, + { 0x89E7, 69187 }, + { 0x89F7, 69190 }, + { 0x89E8, 69193 }, + { 0x8A05, 69196 }, + { 0x89E9, 69199 }, + { 0x89F6, 69202 }, + { 0x89ED, 69205 }, + { 0x89EA, 69208 }, + { 0x89F2, 69211 }, + { 0x89F1, 69214 }, + { 0x89E5, 69217 }, + { 0x89F0, 69220 }, + { 0x8A07, 69223 }, + { 0x8A03, 69226 }, + { 0x8A04, 69229 }, + { 0x89F8, 69232 }, + { 0x89FC, 69235 }, + { 0x8A08, 69238 }, + { 0x8A01, 69241 }, + { 0x89E6, 69244 }, + { 0x89EE, 69247 }, + { 0x89EB, 69250 }, + { 0x8A00, 69253 }, + { 0x89FF, 69256 }, + { 0x8A09, 69259 }, + { 0x8A0A, 69262 }, + { 0x8A02, 69265 }, + { 0x89FE, 69268 }, + { 0x8EC9, 69271 }, + { 0x8ECB, 69275 }, + { 0x5069, 69279 }, + { 0x5057, 69282 }, + { 0x505C, 69286 }, + { 0x5058, 69290 }, + { 0x505B, 69294 }, + { 0x505A, 69298 }, + { 0x505F, 69302 }, + { 0x5056, 69306 }, + { 0x505E, 69310 }, + { 0x505D, 69314 }, + { 0x5059, 69318 }, + { 0x5037, 69322 }, + { 0x503E, 69327 }, + { 0x503F, 69332 }, + { 0x504C, 69337 }, + { 0x504B, 69342 }, + { 0x504D, 69347 }, + { 0x504A, 69352 }, + { 0x5041, 69357 }, + { 0x503C, 69362 }, + { 0x5042, 69367 }, + { 0x504E, 69372 }, + { 0x5045, 69377 }, + { 0x503D, 69382 }, + { 0x5038, 69387 }, + { 0x503A, 69392 }, + { 0x503B, 69397 }, + { 0x5039, 69402 }, + { 0x5040, 69407 }, + { 0x5046, 69412 }, + { 0x5043, 69417 }, + { 0x5052, 69422 }, + { 0x5047, 69427 }, + { 0x5054, 69432 }, + { 0x5048, 69437 }, + { 0x5044, 69442 }, + { 0x504F, 69447 }, + { 0x5050, 69452 }, + { 0x5051, 69457 }, + { 0x5036, 69462 }, + { 0x5049, 69467 }, + { 0x5053, 69472 }, + { 0x5055, 69477 }, + { 0x5060, 69482 }, + { 0x5064, 69486 }, + { 0x5063, 69490 }, + { 0x5065, 69494 }, + { 0x5067, 69498 }, + { 0x5068, 69502 }, + { 0x5062, 69506 }, + { 0x5061, 69510 }, + { 0x5066, 69514 }, + { 0x5017, 69518 }, + { 0x501E, 69523 }, + { 0x501F, 69528 }, + { 0x502C, 69533 }, + { 0x502B, 69538 }, + { 0x502D, 69543 }, + { 0x502A, 69548 }, + { 0x5021, 69553 }, + { 0x501C, 69558 }, + { 0x5022, 69563 }, + { 0x502E, 69568 }, + { 0x5025, 69573 }, + { 0x501D, 69578 }, + { 0x5018, 69583 }, + { 0x501A, 69588 }, + { 0x501B, 69593 }, + { 0x5019, 69598 }, + { 0x5020, 69603 }, + { 0x5026, 69608 }, + { 0x5023, 69613 }, + { 0x5032, 69618 }, + { 0x5027, 69623 }, + { 0x5034, 69628 }, + { 0x5028, 69633 }, + { 0x5024, 69638 }, + { 0x502F, 69643 }, + { 0x5030, 69648 }, + { 0x5031, 69653 }, + { 0x5016, 69658 }, + { 0x5029, 69663 }, + { 0x5033, 69668 }, + { 0x5035, 69673 }, + { 0x8FFE, 69678 }, + { 0x8FA7, 69681 }, + { 0x8FA6, 69684 }, + { 0x8EC7, 69687 }, + { 0x8EC5, 69691 }, + { 0x8F7E, 69695 }, + { 0x2A34, 69697 }, + { 0x946E, 69700 }, + { 0x95B7, 69702 }, + { 0x9005, 69703 }, + { 0x9015, 69705 }, + { 0x9014, 69707 }, + { 0x900D, 69709 }, + { 0x926D, 69711 }, + { 0x1E97, 69713 }, + { 0x90DA, 69715 }, + { 0x904E, 69716 }, + { 0x49F4, 69718 }, + { 0x4A1C, 69721 }, + { 0x4A19, 69724 }, + { 0x4A0C, 69727 }, + { 0x4A03, 69730 }, + { 0x4A18, 69733 }, + { 0x49F5, 69736 }, + { 0x4A00, 69739 }, + { 0x49F8, 69742 }, + { 0x4A08, 69745 }, + { 0x4A16, 69748 }, + { 0x4A0D, 69751 }, + { 0x4A0E, 69754 }, + { 0x49FD, 69759 }, + { 0x4A02, 69762 }, + { 0x4A09, 69765 }, + { 0x49F9, 69768 }, + { 0x4A07, 69771 }, + { 0x49FE, 69774 }, + { 0x4A0A, 69777 }, + { 0x4A12, 69780 }, + { 0x4A1A, 69783 }, + { 0x49FC, 69786 }, + { 0x4A10, 69789 }, + { 0x4A13, 69792 }, + { 0x4A20, 69795 }, + { 0x4A14, 69801 }, + { 0x4A15, 69804 }, + { 0x49F6, 69807 }, + { 0x4A0F, 69810 }, + { 0x4A01, 69813 }, + { 0x4A06, 69816 }, + { 0x4A04, 69819 }, + { 0x49F7, 69822 }, + { 0x4A17, 69825 }, + { 0x4A1B, 69828 }, + { 0x4A21, 69831 }, + { 0x49FF, 69837 }, + { 0x49FA, 69840 }, + { 0x49F3, 69843 }, + { 0x4A11, 69846 }, + { 0x4A05, 69849 }, + { 0x49FB, 69852 }, + { 0x4A0B, 69855 }, + { 0x4A1D, 69858 }, + { 0x4A1E, 69862 }, + { 0x4A1F, 69866 }, + { 0x950D, 69869 }, + { 0x3EF9, 69870 }, + { 0x1D5B, 69871 }, + { 0x280E, 69873 }, + { 0x05A4, 69874 }, + { 0x22C3, 69876 }, + { 0x8FAD, 69877 }, + { 0x7C4F, 69878 }, + { 0x90A9, 69879 }, + { 0x280D, 69882 }, + { 0x2802, 69883 }, + { 0x1D2C, 69884 }, + { 0x4815, 69886 }, + { 0x481D, 69889 }, + { 0x4821, 69892 }, + { 0x481F, 69895 }, + { 0x4823, 69898 }, + { 0x4816, 69901 }, + { 0x481B, 69904 }, + { 0x4819, 69907 }, + { 0x4817, 69910 }, + { 0x4835, 69913 }, + { 0x482C, 69916 }, + { 0x4830, 69919 }, + { 0x481E, 69922 }, + { 0x4834, 69925 }, + { 0x4829, 69928 }, + { 0x484A, 69931 }, + { 0x4822, 69934 }, + { 0x482D, 69937 }, + { 0x4825, 69940 }, + { 0x4843, 69943 }, + { 0x483D, 69946 }, + { 0x483A, 69949 }, + { 0x4820, 69952 }, + { 0x4833, 69955 }, + { 0x4842, 69958 }, + { 0x4844, 69961 }, + { 0x482E, 69964 }, + { 0x4824, 69967 }, + { 0x4841, 69970 }, + { 0x4826, 69973 }, + { 0x4840, 69976 }, + { 0x4845, 69979 }, + { 0x481A, 69982 }, + { 0x4818, 69985 }, + { 0x481C, 69988 }, + { 0x4836, 69991 }, + { 0x4831, 69994 }, + { 0x482A, 69997 }, + { 0x482B, 70000 }, + { 0x483E, 70003 }, + { 0x4837, 70006 }, + { 0x483C, 70009 }, + { 0x483B, 70012 }, + { 0x4846, 70015 }, + { 0x482F, 70018 }, + { 0x4832, 70021 }, + { 0x4828, 70024 }, + { 0x4827, 70027 }, + { 0x483F, 70030 }, + { 0x4847, 70033 }, + { 0x4839, 70036 }, + { 0x4838, 70039 }, + { 0x4848, 70042 }, + { 0x4849, 70045 }, + { 0x484B, 70048 }, + { 0x947F, 70051 }, + { 0x9277, 70052 }, + { 0x8F3B, 70054 }, + { 0x9274, 70055 }, + { 0x90BE, 70056 }, + { 0x9502, 70057 }, + { 0x9046, 70059 }, + { 0x1E8C, 70061 }, + { 0x9281, 70062 }, + { 0x0934, 70064 }, + { 0x08F5, 70068 }, + { 0x0925, 70070 }, + { 0x0932, 70073 }, + { 0x08F8, 70076 }, + { 0x08F7, 70079 }, + { 0x0926, 70082 }, + { 0x08F6, 70085 }, + { 0x093D, 70088 }, + { 0x0942, 70091 }, + { 0x093E, 70094 }, + { 0x0941, 70097 }, + { 0x0940, 70100 }, + { 0x0945, 70103 }, + { 0x093C, 70106 }, + { 0x0944, 70109 }, + { 0x0943, 70112 }, + { 0x093F, 70115 }, + { 0x0951, 70118 }, + { 0x0948, 70121 }, + { 0x0949, 70124 }, + { 0x092E, 70127 }, + { 0x0928, 70131 }, + { 0x0930, 70135 }, + { 0x092A, 70139 }, + { 0x0927, 70143 }, + { 0x092F, 70147 }, + { 0x0931, 70151 }, + { 0x0929, 70155 }, + { 0x092B, 70159 }, + { 0x093A, 70163 }, + { 0x092C, 70168 }, + { 0x093B, 70173 }, + { 0x092D, 70178 }, + { 0x0950, 70183 }, + { 0x08F9, 70185 }, + { 0x0901, 70188 }, + { 0x08FB, 70191 }, + { 0x0903, 70194 }, + { 0x08FD, 70197 }, + { 0x08FA, 70200 }, + { 0x0902, 70203 }, + { 0x0904, 70206 }, + { 0x091B, 70209 }, + { 0x090A, 70212 }, + { 0x0916, 70215 }, + { 0x0907, 70218 }, + { 0x0924, 70221 }, + { 0x08FC, 70224 }, + { 0x090C, 70227 }, + { 0x0905, 70230 }, + { 0x0920, 70233 }, + { 0x091D, 70236 }, + { 0x0918, 70239 }, + { 0x0919, 70242 }, + { 0x091F, 70245 }, + { 0x0947, 70248 }, + { 0x0946, 70254 }, + { 0x0923, 70260 }, + { 0x0914, 70263 }, + { 0x08FE, 70266 }, + { 0x091E, 70269 }, + { 0x091C, 70272 }, + { 0x090B, 70275 }, + { 0x0911, 70278 }, + { 0x0917, 70281 }, + { 0x0908, 70284 }, + { 0x090D, 70287 }, + { 0x0906, 70290 }, + { 0x0909, 70293 }, + { 0x0913, 70296 }, + { 0x090E, 70299 }, + { 0x091A, 70302 }, + { 0x0936, 70305 }, + { 0x0935, 70308 }, + { 0x0921, 70311 }, + { 0x0922, 70314 }, + { 0x0915, 70317 }, + { 0x090F, 70320 }, + { 0x0937, 70323 }, + { 0x0912, 70326 }, + { 0x0910, 70329 }, + { 0x0952, 70332 }, + { 0x0933, 70336 }, + { 0x0900, 70340 }, + { 0x08FF, 70344 }, + { 0x0939, 70348 }, + { 0x0938, 70352 }, + { 0x0954, 70356 }, + { 0x094A, 70359 }, + { 0x094E, 70363 }, + { 0x094B, 70371 }, + { 0x094D, 70375 }, + { 0x094C, 70379 }, + { 0x094F, 70383 }, + { 0x0953, 70387 }, + { 0x1F83, 70390 }, + { 0x203A, 70392 }, + { 0x1EC3, 70396 }, + { 0x9265, 70397 }, + { 0x1D38, 70398 }, + { 0x8EEF, 70400 }, + { 0x9043, 70401 }, + { 0x8F48, 70402 }, + { 0x8F66, 70405 }, + { 0x242C, 70406 }, + { 0x242D, 70409 }, + { 0x242E, 70412 }, + { 0x2430, 70415 }, + { 0x2434, 70418 }, + { 0x243C, 70421 }, + { 0x244C, 70424 }, + { 0x246C, 70427 }, + { 0x24AC, 70430 }, + { 0x242F, 70433 }, + { 0x2431, 70436 }, + { 0x2435, 70439 }, + { 0x243D, 70442 }, + { 0x244D, 70445 }, + { 0x246D, 70448 }, + { 0x24AD, 70451 }, + { 0x2432, 70454 }, + { 0x2436, 70457 }, + { 0x243E, 70460 }, + { 0x244E, 70463 }, + { 0x246E, 70466 }, + { 0x24AE, 70469 }, + { 0x2438, 70472 }, + { 0x2440, 70475 }, + { 0x2450, 70478 }, + { 0x2470, 70481 }, + { 0x24B0, 70484 }, + { 0x2444, 70487 }, + { 0x2454, 70490 }, + { 0x2474, 70493 }, + { 0x24B4, 70496 }, + { 0x245C, 70499 }, + { 0x247C, 70502 }, + { 0x24BC, 70505 }, + { 0x248C, 70508 }, + { 0x24CC, 70511 }, + { 0x24EC, 70514 }, + { 0x2433, 70517 }, + { 0x2437, 70520 }, + { 0x243F, 70523 }, + { 0x244F, 70526 }, + { 0x246F, 70529 }, + { 0x24AF, 70532 }, + { 0x2439, 70535 }, + { 0x2441, 70538 }, + { 0x2451, 70541 }, + { 0x2471, 70544 }, + { 0x24B1, 70547 }, + { 0x2445, 70550 }, + { 0x2455, 70553 }, + { 0x2475, 70556 }, + { 0x24B5, 70559 }, + { 0x245D, 70562 }, + { 0x247D, 70565 }, + { 0x24BD, 70568 }, + { 0x248D, 70571 }, + { 0x24CD, 70574 }, + { 0x24ED, 70577 }, + { 0x243A, 70580 }, + { 0x2442, 70583 }, + { 0x2452, 70586 }, + { 0x2472, 70589 }, + { 0x24B2, 70592 }, + { 0x2446, 70595 }, + { 0x2456, 70598 }, + { 0x2476, 70601 }, + { 0x24B6, 70604 }, + { 0x245E, 70607 }, + { 0x247E, 70610 }, + { 0x24BE, 70613 }, + { 0x248E, 70616 }, + { 0x24CE, 70619 }, + { 0x24EE, 70622 }, + { 0x2448, 70625 }, + { 0x2458, 70628 }, + { 0x2478, 70631 }, + { 0x24B8, 70634 }, + { 0x2460, 70637 }, + { 0x2480, 70640 }, + { 0x24C0, 70643 }, + { 0x2490, 70646 }, + { 0x24D0, 70649 }, + { 0x24F0, 70652 }, + { 0x2464, 70655 }, + { 0x2484, 70658 }, + { 0x24C4, 70661 }, + { 0x2494, 70664 }, + { 0x24D4, 70667 }, + { 0x24F4, 70670 }, + { 0x249C, 70673 }, + { 0x24DC, 70676 }, + { 0x24FC, 70679 }, + { 0x250C, 70682 }, + { 0x243B, 70685 }, + { 0x2443, 70688 }, + { 0x2453, 70691 }, + { 0x2473, 70694 }, + { 0x24B3, 70697 }, + { 0x2447, 70700 }, + { 0x2457, 70703 }, + { 0x2477, 70706 }, + { 0x24B7, 70709 }, + { 0x245F, 70712 }, + { 0x247F, 70715 }, + { 0x24BF, 70718 }, + { 0x248F, 70721 }, + { 0x24CF, 70724 }, + { 0x24EF, 70727 }, + { 0x2449, 70730 }, + { 0x2459, 70733 }, + { 0x2479, 70736 }, + { 0x24B9, 70739 }, + { 0x2461, 70742 }, + { 0x2481, 70745 }, + { 0x24C1, 70748 }, + { 0x2491, 70751 }, + { 0x24D1, 70754 }, + { 0x24F1, 70757 }, + { 0x2465, 70760 }, + { 0x2485, 70763 }, + { 0x24C5, 70766 }, + { 0x2495, 70769 }, + { 0x24D5, 70772 }, + { 0x24F5, 70775 }, + { 0x249D, 70778 }, + { 0x24DD, 70781 }, + { 0x24FD, 70784 }, + { 0x250D, 70787 }, + { 0x244A, 70790 }, + { 0x245A, 70793 }, + { 0x247A, 70796 }, + { 0x24BA, 70799 }, + { 0x2462, 70802 }, + { 0x2482, 70805 }, + { 0x24C2, 70808 }, + { 0x2492, 70811 }, + { 0x24D2, 70814 }, + { 0x24F2, 70817 }, + { 0x2466, 70820 }, + { 0x2486, 70823 }, + { 0x24C6, 70826 }, + { 0x2496, 70829 }, + { 0x24D6, 70832 }, + { 0x24F6, 70835 }, + { 0x249E, 70838 }, + { 0x24DE, 70841 }, + { 0x24FE, 70844 }, + { 0x250E, 70847 }, + { 0x2468, 70850 }, + { 0x2488, 70853 }, + { 0x24C8, 70856 }, + { 0x2498, 70859 }, + { 0x24D8, 70862 }, + { 0x24F8, 70865 }, + { 0x24A0, 70868 }, + { 0x24E0, 70871 }, + { 0x2500, 70874 }, + { 0x2510, 70877 }, + { 0x24A4, 70880 }, + { 0x24E4, 70883 }, + { 0x2504, 70886 }, + { 0x2514, 70889 }, + { 0x251C, 70892 }, + { 0x244B, 70895 }, + { 0x245B, 70898 }, + { 0x247B, 70901 }, + { 0x24BB, 70904 }, + { 0x2463, 70907 }, + { 0x2483, 70910 }, + { 0x24C3, 70913 }, + { 0x2493, 70916 }, + { 0x24D3, 70919 }, + { 0x24F3, 70922 }, + { 0x2467, 70925 }, + { 0x2487, 70928 }, + { 0x24C7, 70931 }, + { 0x2497, 70934 }, + { 0x24D7, 70937 }, + { 0x24F7, 70940 }, + { 0x249F, 70943 }, + { 0x24DF, 70946 }, + { 0x24FF, 70949 }, + { 0x250F, 70952 }, + { 0x2469, 70955 }, + { 0x2489, 70958 }, + { 0x24C9, 70961 }, + { 0x2499, 70964 }, + { 0x24D9, 70967 }, + { 0x24F9, 70970 }, + { 0x24A1, 70973 }, + { 0x24E1, 70976 }, + { 0x2501, 70979 }, + { 0x2511, 70982 }, + { 0x24A5, 70985 }, + { 0x24E5, 70988 }, + { 0x2505, 70991 }, + { 0x2515, 70994 }, + { 0x251D, 70997 }, + { 0x246A, 71000 }, + { 0x248A, 71003 }, + { 0x24CA, 71006 }, + { 0x249A, 71009 }, + { 0x24DA, 71012 }, + { 0x24FA, 71015 }, + { 0x24A2, 71018 }, + { 0x24E2, 71021 }, + { 0x2502, 71024 }, + { 0x2512, 71027 }, + { 0x24A6, 71030 }, + { 0x24E6, 71033 }, + { 0x2506, 71036 }, + { 0x2516, 71039 }, + { 0x251E, 71042 }, + { 0x24A8, 71045 }, + { 0x24E8, 71048 }, + { 0x2508, 71051 }, + { 0x2518, 71054 }, + { 0x2520, 71057 }, + { 0x2524, 71060 }, + { 0x246B, 71063 }, + { 0x248B, 71066 }, + { 0x24CB, 71069 }, + { 0x249B, 71072 }, + { 0x24DB, 71075 }, + { 0x24FB, 71078 }, + { 0x24A3, 71081 }, + { 0x24E3, 71084 }, + { 0x2503, 71087 }, + { 0x2513, 71090 }, + { 0x24A7, 71093 }, + { 0x24E7, 71096 }, + { 0x2507, 71099 }, + { 0x2517, 71102 }, + { 0x251F, 71105 }, + { 0x24A9, 71108 }, + { 0x24E9, 71111 }, + { 0x2509, 71114 }, + { 0x2519, 71117 }, + { 0x2521, 71120 }, + { 0x2525, 71123 }, + { 0x24AA, 71126 }, + { 0x24EA, 71129 }, + { 0x250A, 71132 }, + { 0x251A, 71135 }, + { 0x2522, 71138 }, + { 0x2526, 71141 }, + { 0x2528, 71144 }, + { 0x24AB, 71147 }, + { 0x24EB, 71150 }, + { 0x250B, 71153 }, + { 0x251B, 71156 }, + { 0x2523, 71159 }, + { 0x2527, 71162 }, + { 0x2529, 71165 }, + { 0x252A, 71168 }, + { 0x252B, 71171 }, + { 0x95F6, 71174 }, + { 0x8EE2, 71175 }, + { 0x8F88, 71176 }, + { 0x224D, 71177 }, + { 0x0077, 71179 }, + { 0x9231, 71180 }, + { 0x9696, 71182 }, + { 0x8FC7, 71185 }, + { 0x8E19, 71186 }, + { 0x27E7, 71191 }, + { 0x8E18, 71193 }, + { 0x8DD8, 71195 }, + { 0x8DD9, 71197 }, + { 0x1EF0, 71199 }, + { 0x27E8, 71202 }, + { 0x1EF4, 71205 }, + { 0x236E, 71207 }, + { 0x1EEC, 71213 }, + { 0x1EF1, 71215 }, + { 0x8DB8, 71218 }, + { 0x9430, 71222 }, + { 0x942F, 71225 }, + { 0x942E, 71231 }, + { 0x90F3, 71237 }, + { 0x208C, 71240 }, + { 0x2091, 71243 }, + { 0x208D, 71246 }, + { 0x2090, 71249 }, + { 0x208F, 71252 }, + { 0x2094, 71255 }, + { 0x2116, 71258 }, + { 0x2093, 71261 }, + { 0x2092, 71264 }, + { 0x208E, 71267 }, + { 0x23DE, 71270 }, + { 0x8E1A, 71275 }, + { 0x20FC, 71278 }, + { 0x20FD, 71283 }, + { 0x20FE, 71288 }, + { 0x20FF, 71293 }, + { 0x2100, 71298 }, + { 0x2101, 71303 }, + { 0x2102, 71308 }, + { 0x2103, 71313 }, + { 0x2104, 71318 }, + { 0x2105, 71323 }, + { 0x2106, 71328 }, + { 0x2107, 71333 }, + { 0x2108, 71338 }, + { 0x2109, 71343 }, + { 0x210A, 71348 }, + { 0x210B, 71353 }, + { 0x210C, 71358 }, + { 0x210D, 71363 }, + { 0x210E, 71368 }, + { 0x210F, 71373 }, + { 0x2110, 71378 }, + { 0x2111, 71383 }, + { 0x2112, 71388 }, + { 0x2113, 71393 }, + { 0x2114, 71398 }, + { 0x2115, 71403 }, + { 0x20E2, 71408 }, + { 0x20E3, 71413 }, + { 0x20E4, 71418 }, + { 0x20E5, 71423 }, + { 0x20E6, 71428 }, + { 0x20E7, 71433 }, + { 0x20E8, 71438 }, + { 0x20E9, 71443 }, + { 0x20EA, 71448 }, + { 0x20EB, 71453 }, + { 0x20EC, 71458 }, + { 0x20ED, 71463 }, + { 0x20EE, 71468 }, + { 0x20EF, 71473 }, + { 0x20F0, 71478 }, + { 0x20F1, 71483 }, + { 0x20F2, 71488 }, + { 0x20F3, 71493 }, + { 0x20F4, 71498 }, + { 0x20F5, 71503 }, + { 0x20F6, 71508 }, + { 0x20F7, 71513 }, + { 0x20F8, 71518 }, + { 0x20F9, 71523 }, + { 0x20FA, 71528 }, + { 0x20FB, 71533 }, + { 0x1EED, 71538 }, + { 0x1EEE, 71540 }, + { 0x2356, 71542 }, + { 0x25EA, 71545 }, + { 0x25EB, 71548 }, + { 0x8DBA, 71550 }, + { 0x1EF3, 71556 }, + { 0x2DFF, 71558 }, + { 0x2E0D, 71561 }, + { 0x2E01, 71565 }, + { 0x2E0F, 71568 }, + { 0x2E06, 71572 }, + { 0x2E14, 71575 }, + { 0x2E00, 71579 }, + { 0x2E0E, 71582 }, + { 0x2E17, 71586 }, + { 0x2DFD, 71590 }, + { 0x2E0B, 71593 }, + { 0x2DFA, 71597 }, + { 0x2E08, 71600 }, + { 0x2DFE, 71604 }, + { 0x2E0C, 71607 }, + { 0x2DFC, 71611 }, + { 0x2E0A, 71614 }, + { 0x2DF9, 71618 }, + { 0x2E07, 71621 }, + { 0x2DFB, 71625 }, + { 0x2E09, 71628 }, + { 0x2E02, 71632 }, + { 0x2E10, 71635 }, + { 0x2E03, 71639 }, + { 0x2E11, 71642 }, + { 0x2E05, 71646 }, + { 0x2E13, 71649 }, + { 0x2E04, 71653 }, + { 0x2E12, 71656 }, + { 0x8DD6, 71660 }, + { 0x8DD7, 71666 }, + { 0x2E16, 71672 }, + { 0x2E15, 71676 }, + { 0x2095, 71680 }, + { 0x2DE1, 71683 }, + { 0x2E58, 71689 }, + { 0x2DE5, 71692 }, + { 0x2E4E, 71698 }, + { 0x2DE4, 71701 }, + { 0x2E4F, 71707 }, + { 0x2E54, 71711 }, + { 0x2E50, 71715 }, + { 0x2E53, 71719 }, + { 0x2E52, 71723 }, + { 0x2E57, 71727 }, + { 0x2E56, 71731 }, + { 0x2E55, 71735 }, + { 0x2E51, 71739 }, + { 0x2DE6, 71743 }, + { 0x2DE8, 71749 }, + { 0x2096, 71755 }, + { 0x2DF3, 71758 }, + { 0x2DE3, 71761 }, + { 0x2DF4, 71767 }, + { 0x2E4A, 71771 }, + { 0x2DF5, 71775 }, + { 0x2DF8, 71779 }, + { 0x2DF7, 71783 }, + { 0x2E4D, 71787 }, + { 0x2E4C, 71791 }, + { 0x2E4B, 71795 }, + { 0x2DF6, 71799 }, + { 0x2097, 71803 }, + { 0x209F, 71806 }, + { 0x2DE2, 71809 }, + { 0x2DEA, 71815 }, + { 0x2DEF, 71819 }, + { 0x2DEB, 71823 }, + { 0x2DEE, 71827 }, + { 0x2DED, 71831 }, + { 0x2DF2, 71835 }, + { 0x2DF1, 71839 }, + { 0x2DF0, 71843 }, + { 0x2DEC, 71847 }, + { 0x209A, 71851 }, + { 0x2DE7, 71854 }, + { 0x209B, 71860 }, + { 0x209D, 71863 }, + { 0x2099, 71866 }, + { 0x209E, 71869 }, + { 0x2098, 71872 }, + { 0x209C, 71875 }, + { 0x2BE3, 71878 }, + { 0x937C, 71881 }, + { 0x25E4, 71883 }, + { 0x1EF2, 71886 }, + { 0x22FE, 71889 }, + { 0x2664, 71892 }, + { 0x1EEF, 71895 }, + { 0x2E69, 71898 }, + { 0x2E6C, 71901 }, + { 0x2E6A, 71904 }, + { 0x2E6D, 71907 }, + { 0x2E6B, 71910 }, + { 0x2E82, 71913 }, + { 0x2E85, 71916 }, + { 0x2E83, 71919 }, + { 0x2E86, 71922 }, + { 0x2E84, 71925 }, + { 0x2E6E, 71928 }, + { 0x2E71, 71931 }, + { 0x2E6F, 71934 }, + { 0x2E72, 71937 }, + { 0x2E70, 71940 }, + { 0x2E87, 71943 }, + { 0x2E8A, 71946 }, + { 0x2E88, 71949 }, + { 0x2E8B, 71952 }, + { 0x2E89, 71955 }, + { 0x2E7D, 71958 }, + { 0x2E80, 71961 }, + { 0x2E7E, 71964 }, + { 0x2E81, 71967 }, + { 0x2E7F, 71970 }, + { 0x2E8F, 71973 }, + { 0x2E92, 71976 }, + { 0x2E90, 71979 }, + { 0x2E93, 71982 }, + { 0x2E91, 71985 }, + { 0x2E73, 71988 }, + { 0x2E76, 71991 }, + { 0x2E74, 71994 }, + { 0x2E77, 71997 }, + { 0x2E75, 72000 }, + { 0x2E78, 72003 }, + { 0x2E7B, 72006 }, + { 0x2E79, 72009 }, + { 0x2E7C, 72012 }, + { 0x2E7A, 72015 }, + { 0x2E94, 72018 }, + { 0x2E96, 72021 }, + { 0x2E95, 72024 }, + { 0x2E97, 72027 }, + { 0x2E8C, 72030 }, + { 0x2E8E, 72033 }, + { 0x2E8D, 72036 }, + { 0x25E3, 72039 }, + { 0x937A, 72041 }, + { 0x1FE1, 72043 }, + { 0x25E2, 72046 }, + { 0x2E3F, 72049 }, + { 0x2E19, 72052 }, + { 0x2E1E, 72055 }, + { 0x2E29, 72058 }, + { 0x2E22, 72061 }, + { 0x2E1A, 72064 }, + { 0x2E3B, 72067 }, + { 0x2E24, 72070 }, + { 0x2E1D, 72073 }, + { 0x2E1C, 72076 }, + { 0x2E2B, 72079 }, + { 0x2E3D, 72082 }, + { 0x2E39, 72085 }, + { 0x2DE0, 72088 }, + { 0x2E40, 72091 }, + { 0x2E33, 72094 }, + { 0x2E23, 72097 }, + { 0x2E2D, 72100 }, + { 0x2E21, 72103 }, + { 0x2E3A, 72106 }, + { 0x2E26, 72109 }, + { 0x2E28, 72112 }, + { 0x2E20, 72115 }, + { 0x2E31, 72118 }, + { 0x2E27, 72121 }, + { 0x2E49, 72124 }, + { 0x2E37, 72127 }, + { 0x2E41, 72130 }, + { 0x2E1F, 72133 }, + { 0x2E2A, 72136 }, + { 0x2E44, 72139 }, + { 0x2E1B, 72142 }, + { 0x2E25, 72145 }, + { 0x8EAC, 72148 }, + { 0x2E3E, 72151 }, + { 0x2E34, 72154 }, + { 0x2DDF, 72157 }, + { 0x2E32, 72160 }, + { 0x2E3C, 72163 }, + { 0x2E2C, 72166 }, + { 0x2E2E, 72169 }, + { 0x2E48, 72172 }, + { 0x2E42, 72175 }, + { 0x2DDD, 72178 }, + { 0x2E43, 72181 }, + { 0x2E47, 72184 }, + { 0x2E35, 72187 }, + { 0x8EAB, 72190 }, + { 0x2E38, 72193 }, + { 0x2E36, 72196 }, + { 0x2E2F, 72199 }, + { 0x2E45, 72202 }, + { 0x2E46, 72205 }, + { 0x2DDE, 72208 }, + { 0x2E30, 72211 }, + { 0x25EC, 72214 }, + { 0x1FE0, 72216 }, + { 0x927B, 72221 }, + { 0x25ED, 72224 }, + { 0x8DB9, 72226 }, + { 0x25E5, 72229 }, + { 0x2662, 72231 }, + { 0x25E8, 72237 }, + { 0x8F5F, 72241 }, + { 0x9493, 72243 }, + { 0x951B, 72244 }, + { 0x1F89, 72245 }, + { 0x1E85, 72247 }, + { 0x8F4E, 72249 }, + { 0x8F26, 72251 }, + { 0x2A45, 72252 }, + { 0x94C5, 72255 }, + { 0x8F82, 72256 }, + { 0x8F3F, 72260 }, + { 0x22C0, 72262 }, + { 0x8E35, 72264 }, + { 0x90E1, 72271 }, + { 0x94EF, 72273 }, + { 0x947A, 72274 }, + { 0x8F21, 72276 }, + { 0x9276, 72277 }, + { 0x8EB3, 72278 }, + { 0x45F4, 72279 }, + { 0x45F5, 72282 }, + { 0x45F6, 72285 }, + { 0x45F7, 72288 }, + { 0x45F8, 72291 }, + { 0x45F9, 72294 }, + { 0x45FA, 72297 }, + { 0x45FB, 72300 }, + { 0x45FC, 72303 }, + { 0x45FD, 72306 }, + { 0x45FE, 72309 }, + { 0x45FF, 72312 }, + { 0x4600, 72315 }, + { 0x4601, 72318 }, + { 0x4602, 72321 }, + { 0x4603, 72324 }, + { 0x4604, 72327 }, + { 0x4605, 72330 }, + { 0x4606, 72333 }, + { 0x4607, 72336 }, + { 0x4608, 72339 }, + { 0x4609, 72342 }, + { 0x460A, 72345 }, + { 0x460B, 72348 }, + { 0x460C, 72351 }, + { 0x460D, 72354 }, + { 0x460E, 72357 }, + { 0x460F, 72360 }, + { 0x4610, 72363 }, + { 0x4611, 72366 }, + { 0x4612, 72369 }, + { 0x4613, 72372 }, + { 0x4614, 72375 }, + { 0x4615, 72378 }, + { 0x4616, 72381 }, + { 0x4617, 72384 }, + { 0x4618, 72387 }, + { 0x4619, 72390 }, + { 0x461A, 72393 }, + { 0x461B, 72396 }, + { 0x461C, 72399 }, + { 0x461D, 72402 }, + { 0x461E, 72405 }, + { 0x461F, 72408 }, + { 0x4620, 72411 }, + { 0x4621, 72414 }, + { 0x4622, 72417 }, + { 0x4623, 72420 }, + { 0x4624, 72423 }, + { 0x4625, 72426 }, + { 0x4626, 72429 }, + { 0x4627, 72432 }, + { 0x4628, 72435 }, + { 0x4629, 72438 }, + { 0x462A, 72441 }, + { 0x203F, 72444 }, + { 0x1FED, 72447 }, + { 0x42D7, 72451 }, + { 0x42D3, 72455 }, + { 0x42E0, 72459 }, + { 0x42E9, 72463 }, + { 0x42EA, 72467 }, + { 0x42EB, 72471 }, + { 0x42E8, 72475 }, + { 0x42E4, 72479 }, + { 0x42EE, 72483 }, + { 0x42ED, 72487 }, + { 0x42D4, 72491 }, + { 0x42D5, 72495 }, + { 0x42D9, 72499 }, + { 0x42DB, 72503 }, + { 0x42EC, 72507 }, + { 0x42E6, 72511 }, + { 0x42E2, 72515 }, + { 0x42DF, 72519 }, + { 0x42DD, 72523 }, + { 0x42DE, 72527 }, + { 0x42D8, 72531 }, + { 0x42DA, 72535 }, + { 0x42E1, 72539 }, + { 0x42D6, 72543 }, + { 0x42E5, 72547 }, + { 0x42DC, 72551 }, + { 0x42C9, 72555 }, + { 0x42C8, 72560 }, + { 0x42C7, 72565 }, + { 0x42CB, 72570 }, + { 0x42CA, 72575 }, + { 0x42CC, 72580 }, + { 0x42E3, 72585 }, + { 0x42E7, 72589 }, + { 0x42CF, 72593 }, + { 0x42CE, 72598 }, + { 0x42CD, 72603 }, + { 0x42D1, 72608 }, + { 0x42D0, 72613 }, + { 0x42D2, 72618 }, + { 0x42AF, 72623 }, + { 0x42AB, 72627 }, + { 0x42B8, 72631 }, + { 0x42C1, 72635 }, + { 0x42C2, 72639 }, + { 0x42C3, 72643 }, + { 0x42C0, 72647 }, + { 0x42BC, 72651 }, + { 0x42C6, 72655 }, + { 0x42C5, 72659 }, + { 0x42AC, 72663 }, + { 0x42AD, 72667 }, + { 0x42B1, 72671 }, + { 0x42B3, 72675 }, + { 0x42C4, 72679 }, + { 0x42BE, 72683 }, + { 0x42BA, 72687 }, + { 0x42B7, 72691 }, + { 0x42B5, 72695 }, + { 0x42B6, 72699 }, + { 0x42B0, 72703 }, + { 0x42B2, 72707 }, + { 0x42B9, 72711 }, + { 0x42AE, 72715 }, + { 0x42BD, 72719 }, + { 0x42B4, 72723 }, + { 0x42A1, 72727 }, + { 0x42A0, 72732 }, + { 0x429F, 72737 }, + { 0x42A3, 72742 }, + { 0x42A2, 72747 }, + { 0x42A4, 72752 }, + { 0x42BB, 72757 }, + { 0x42BF, 72761 }, + { 0x42A7, 72765 }, + { 0x42A6, 72770 }, + { 0x42A5, 72775 }, + { 0x42A9, 72780 }, + { 0x42A8, 72785 }, + { 0x42AA, 72790 }, + { 0x9187, 72795 }, + { 0x9158, 72797 }, + { 0x2744, 72799 }, + { 0x2742, 72804 }, + { 0x2743, 72809 }, + { 0x2745, 72814 }, + { 0x9053, 72819 }, + { 0x9341, 72825 }, + { 0x1F1B, 72827 }, + { 0x23AC, 72829 }, + { 0x23B1, 72834 }, + { 0x23AD, 72839 }, + { 0x23B0, 72844 }, + { 0x23AF, 72849 }, + { 0x23B4, 72854 }, + { 0x8DB6, 72859 }, + { 0x23B3, 72864 }, + { 0x23B2, 72869 }, + { 0x23AE, 72874 }, + { 0x23B5, 72879 }, + { 0x23A2, 72884 }, + { 0x23A7, 72889 }, + { 0x23A3, 72894 }, + { 0x23A6, 72899 }, + { 0x23A5, 72904 }, + { 0x23AA, 72909 }, + { 0x23A9, 72914 }, + { 0x23A8, 72919 }, + { 0x23A4, 72924 }, + { 0x23AB, 72929 }, + { 0x23B6, 72934 }, + { 0x23BB, 72940 }, + { 0x23B7, 72946 }, + { 0x23BA, 72952 }, + { 0x23B9, 72958 }, + { 0x23BE, 72964 }, + { 0x8DB7, 72970 }, + { 0x23BD, 72976 }, + { 0x23BC, 72982 }, + { 0x23B8, 72988 }, + { 0x23BF, 72994 }, + { 0x1E7A, 73000 }, + { 0x22DA, 73001 }, + { 0x8FDF, 73003 }, + { 0x22CF, 73004 }, + { 0x22CE, 73007 }, + { 0x2825, 73010 }, + { 0x1D28, 73012 }, + { 0x905A, 73014 }, + { 0x438F, 73015 }, + { 0x4397, 73018 }, + { 0x439C, 73021 }, + { 0x43A5, 73024 }, + { 0x43AE, 73027 }, + { 0x43B1, 73030 }, + { 0x4390, 73033 }, + { 0x4391, 73036 }, + { 0x4393, 73039 }, + { 0x4396, 73042 }, + { 0x4398, 73045 }, + { 0x4399, 73048 }, + { 0x439B, 73051 }, + { 0x439D, 73054 }, + { 0x439E, 73057 }, + { 0x439F, 73060 }, + { 0x43A1, 73063 }, + { 0x43A3, 73066 }, + { 0x43A2, 73069 }, + { 0x43A6, 73072 }, + { 0x43A7, 73075 }, + { 0x43A8, 73078 }, + { 0x43AA, 73081 }, + { 0x43AC, 73084 }, + { 0x43AF, 73087 }, + { 0x43B0, 73090 }, + { 0x43B2, 73093 }, + { 0x4392, 73096 }, + { 0x4395, 73099 }, + { 0x43B4, 73102 }, + { 0x439A, 73105 }, + { 0x43B6, 73108 }, + { 0x43A0, 73111 }, + { 0x4394, 73114 }, + { 0x43A4, 73117 }, + { 0x43A9, 73120 }, + { 0x43AB, 73123 }, + { 0x43AD, 73126 }, + { 0x43B3, 73129 }, + { 0x43B5, 73132 }, + { 0x1E5F, 73135 }, + { 0x1F4C, 73137 }, + { 0x1F50, 73142 }, + { 0x1F49, 73148 }, + { 0x1F4D, 73154 }, + { 0x1F4F, 73158 }, + { 0x1F4A, 73162 }, + { 0x23FE, 73172 }, + { 0x2705, 73176 }, + { 0x4AB5, 73180 }, + { 0x4AC1, 73183 }, + { 0x4ABD, 73186 }, + { 0x4ABE, 73189 }, + { 0x4AC6, 73192 }, + { 0x4AB6, 73195 }, + { 0x4AC0, 73198 }, + { 0x4AB2, 73201 }, + { 0x4AB8, 73204 }, + { 0x4ABB, 73207 }, + { 0x4AC3, 73210 }, + { 0x4AC4, 73213 }, + { 0x4AC5, 73216 }, + { 0x4AB9, 73219 }, + { 0x4ABA, 73222 }, + { 0x4AB1, 73225 }, + { 0x4AB3, 73228 }, + { 0x4AC2, 73231 }, + { 0x4AB7, 73234 }, + { 0x4AB4, 73237 }, + { 0x4ABC, 73240 }, + { 0x4ABF, 73243 }, + { 0x4AC7, 73246 }, + { 0x8FA0, 73249 }, + { 0x94F4, 73250 }, + { 0x230A, 73251 }, + { 0x255B, 73259 }, + { 0x2558, 73265 }, + { 0x91DB, 73270 }, + { 0x95CE, 73272 }, + { 0x21F5, 73273 }, + { 0x8F56, 73274 }, + { 0x91E6, 73278 }, + { 0x95C5, 73280 }, + { 0x2708, 73283 }, + { 0x948E, 73284 }, + { 0x22DD, 73286 }, + { 0x94C0, 73288 }, + { 0x8ED2, 73290 }, + { 0x94AB, 73292 }, + { 0x94BB, 73293 }, + { 0x4D72, 73294 }, + { 0x4D71, 73298 }, + { 0x4D63, 73300 }, + { 0x4D73, 73303 }, + { 0x4D70, 73306 }, + { 0x4D33, 73309 }, + { 0x4D32, 73312 }, + { 0x4D64, 73315 }, + { 0x4D30, 73318 }, + { 0x4D31, 73323 }, + { 0x4D66, 73326 }, + { 0x4D68, 73330 }, + { 0x4D65, 73334 }, + { 0x4D6D, 73338 }, + { 0x4D6F, 73342 }, + { 0x4D6C, 73346 }, + { 0x4D67, 73350 }, + { 0x4D6E, 73354 }, + { 0x4D69, 73358 }, + { 0x4D78, 73362 }, + { 0x4D6A, 73367 }, + { 0x4D79, 73372 }, + { 0x4D6B, 73377 }, + { 0x4D34, 73382 }, + { 0x4D36, 73385 }, + { 0x4D38, 73388 }, + { 0x4D35, 73391 }, + { 0x4D3D, 73394 }, + { 0x4D3F, 73397 }, + { 0x4D56, 73400 }, + { 0x4D45, 73403 }, + { 0x4D51, 73406 }, + { 0x4D3C, 73409 }, + { 0x4D42, 73412 }, + { 0x4D61, 73415 }, + { 0x4D37, 73418 }, + { 0x4D47, 73421 }, + { 0x4D40, 73424 }, + { 0x4D5B, 73427 }, + { 0x4D58, 73430 }, + { 0x4D53, 73433 }, + { 0x4D3E, 73436 }, + { 0x4D54, 73439 }, + { 0x4D5A, 73442 }, + { 0x4D60, 73445 }, + { 0x4D4F, 73448 }, + { 0x4D39, 73451 }, + { 0x4D5D, 73454 }, + { 0x4D59, 73457 }, + { 0x4D57, 73460 }, + { 0x4D46, 73463 }, + { 0x4D4C, 73466 }, + { 0x4D52, 73469 }, + { 0x4D43, 73472 }, + { 0x4D48, 73475 }, + { 0x4D41, 73478 }, + { 0x4D5C, 73481 }, + { 0x4D44, 73484 }, + { 0x4D4E, 73487 }, + { 0x4D49, 73490 }, + { 0x4D55, 73493 }, + { 0x4D5E, 73496 }, + { 0x4D5F, 73499 }, + { 0x4D50, 73502 }, + { 0x4D4A, 73505 }, + { 0x4D4D, 73508 }, + { 0x4D4B, 73511 }, + { 0x4D75, 73514 }, + { 0x4D74, 73519 }, + { 0x4D3B, 73523 }, + { 0x4D3A, 73527 }, + { 0x4D77, 73531 }, + { 0x4D76, 73535 }, + { 0x904A, 73539 }, + { 0x1D2B, 73541 }, + { 0x5331, 73543 }, + { 0x532F, 73546 }, + { 0x532E, 73550 }, + { 0x5333, 73554 }, + { 0x5338, 73558 }, + { 0x5334, 73562 }, + { 0x5337, 73566 }, + { 0x5336, 73570 }, + { 0x533B, 73574 }, + { 0x5332, 73578 }, + { 0x533A, 73582 }, + { 0x5339, 73586 }, + { 0x5335, 73590 }, + { 0x5326, 73594 }, + { 0x5328, 73599 }, + { 0x5325, 73604 }, + { 0x532B, 73609 }, + { 0x532D, 73614 }, + { 0x532A, 73619 }, + { 0x5327, 73624 }, + { 0x532C, 73629 }, + { 0x5329, 73634 }, + { 0x52FD, 73639 }, + { 0x52FF, 73643 }, + { 0x5301, 73647 }, + { 0x52FE, 73651 }, + { 0x5304, 73655 }, + { 0x5306, 73659 }, + { 0x5309, 73663 }, + { 0x5316, 73667 }, + { 0x5313, 73671 }, + { 0x5303, 73675 }, + { 0x5311, 73679 }, + { 0x5322, 73683 }, + { 0x5300, 73687 }, + { 0x531B, 73691 }, + { 0x530C, 73695 }, + { 0x5310, 73699 }, + { 0x530B, 73703 }, + { 0x5315, 73707 }, + { 0x5305, 73711 }, + { 0x5320, 73715 }, + { 0x5323, 73719 }, + { 0x5324, 73723 }, + { 0x530E, 73727 }, + { 0x5302, 73731 }, + { 0x5308, 73735 }, + { 0x5307, 73739 }, + { 0x530A, 73743 }, + { 0x5317, 73747 }, + { 0x531D, 73751 }, + { 0x5314, 73755 }, + { 0x5312, 73759 }, + { 0x531C, 73763 }, + { 0x530D, 73767 }, + { 0x531A, 73771 }, + { 0x531F, 73775 }, + { 0x5321, 73779 }, + { 0x530F, 73783 }, + { 0x5318, 73787 }, + { 0x531E, 73791 }, + { 0x5319, 73795 }, + { 0x5330, 73799 }, + { 0x903A, 73802 }, + { 0x8FEC, 73803 }, + { 0x900F, 73805 }, + { 0x14A5, 73806 }, + { 0x14A3, 73809 }, + { 0x14A4, 73813 }, + { 0x1491, 73817 }, + { 0x1492, 73820 }, + { 0x1493, 73823 }, + { 0x149B, 73826 }, + { 0x1498, 73829 }, + { 0x1495, 73832 }, + { 0x14A2, 73835 }, + { 0x1494, 73838 }, + { 0x149F, 73841 }, + { 0x149C, 73844 }, + { 0x1499, 73847 }, + { 0x149A, 73850 }, + { 0x149E, 73853 }, + { 0x14A1, 73856 }, + { 0x1497, 73859 }, + { 0x14A0, 73862 }, + { 0x149D, 73865 }, + { 0x1496, 73868 }, + { 0x1D2D, 73871 }, + { 0x9445, 73873 }, + { 0x9062, 73875 }, + { 0x1CEB, 73878 }, + { 0x1CE9, 73882 }, + { 0x7CD6, 73885 }, + { 0x7CD4, 73889 }, + { 0x96B2, 73892 }, + { 0x2205, 73895 }, + { 0x2204, 73898 }, + { 0x9692, 73900 }, + { 0x9697, 73903 }, + { 0x96B5, 73907 }, + { 0x8FA1, 73913 }, + { 0x226F, 73915 }, + { 0x0B4E, 73916 }, + { 0x0B3D, 73920 }, + { 0x0B4C, 73923 }, + { 0x0B0B, 73926 }, + { 0x0B07, 73929 }, + { 0x0B0A, 73933 }, + { 0x0B09, 73936 }, + { 0x0B3E, 73939 }, + { 0x0B61, 73942 }, + { 0x0B08, 73948 }, + { 0x0B5F, 73951 }, + { 0x0B60, 73954 }, + { 0x0B56, 73957 }, + { 0x0B5B, 73960 }, + { 0x0B57, 73963 }, + { 0x0B5A, 73966 }, + { 0x0B59, 73969 }, + { 0x0B5E, 73972 }, + { 0x0B55, 73975 }, + { 0x0B5D, 73978 }, + { 0x0B5C, 73981 }, + { 0x0B58, 73984 }, + { 0x0B46, 73987 }, + { 0x0B40, 73991 }, + { 0x0B49, 73995 }, + { 0x0B42, 73999 }, + { 0x0B3F, 74003 }, + { 0x0B48, 74007 }, + { 0x0B4B, 74011 }, + { 0x0B47, 74015 }, + { 0x0B41, 74019 }, + { 0x0B4A, 74023 }, + { 0x0B43, 74027 }, + { 0x0B53, 74031 }, + { 0x0B44, 74036 }, + { 0x0B54, 74041 }, + { 0x0B45, 74046 }, + { 0x0B4D, 74051 }, + { 0x0B0C, 74054 }, + { 0x0B14, 74057 }, + { 0x0B0E, 74060 }, + { 0x0B17, 74063 }, + { 0x0B10, 74066 }, + { 0x0B0D, 74069 }, + { 0x0B16, 74072 }, + { 0x0B19, 74075 }, + { 0x0B30, 74078 }, + { 0x0B1F, 74081 }, + { 0x0B2B, 74084 }, + { 0x0B15, 74087 }, + { 0x0B50, 74090 }, + { 0x0B1C, 74093 }, + { 0x0B3C, 74096 }, + { 0x0B0F, 74099 }, + { 0x0B21, 74102 }, + { 0x0B1A, 74105 }, + { 0x0B36, 74108 }, + { 0x0B32, 74111 }, + { 0x0B2D, 74114 }, + { 0x0B18, 74117 }, + { 0x0B2E, 74120 }, + { 0x0B34, 74123 }, + { 0x0B3B, 74126 }, + { 0x0B29, 74129 }, + { 0x0B11, 74132 }, + { 0x0B38, 74135 }, + { 0x0B33, 74138 }, + { 0x0B31, 74141 }, + { 0x0B20, 74144 }, + { 0x0B26, 74147 }, + { 0x0B2C, 74150 }, + { 0x0B1D, 74153 }, + { 0x0B22, 74156 }, + { 0x0B1B, 74159 }, + { 0x0B37, 74162 }, + { 0x0B1E, 74165 }, + { 0x0B28, 74168 }, + { 0x0B23, 74171 }, + { 0x0B2F, 74174 }, + { 0x0B35, 74177 }, + { 0x0B39, 74180 }, + { 0x0B3A, 74183 }, + { 0x0B2A, 74186 }, + { 0x0B24, 74189 }, + { 0x0B27, 74192 }, + { 0x0B50, 74195 }, + { 0x0B25, 74198 }, + { 0x0B4F, 74201 }, + { 0x0B13, 74205 }, + { 0x0B12, 74209 }, + { 0x0B52, 74213 }, + { 0x0B51, 74217 }, + { 0x7EF2, 74221 }, + { 0x91F0, 74222 }, + { 0x91CA, 74228 }, + { 0x91CD, 74230 }, + { 0x91CC, 74235 }, + { 0x8FB9, 74240 }, + { 0x2E68, 74241 }, + { 0x94CC, 74244 }, + { 0x1E7F, 74245 }, + { 0x267E, 74247 }, + { 0x268E, 74252 }, + { 0x268F, 74257 }, + { 0x2687, 74262 }, + { 0x2689, 74267 }, + { 0x2685, 74272 }, + { 0x1E7E, 74277 }, + { 0x267D, 74279 }, + { 0x268A, 74284 }, + { 0x268C, 74289 }, + { 0x2686, 74294 }, + { 0x268B, 74299 }, + { 0x2688, 74303 }, + { 0x21F6, 74308 }, + { 0x240C, 74309 }, + { 0x9521, 74314 }, + { 0x8CD9, 74315 }, + { 0x8CE2, 74320 }, + { 0x8CD0, 74325 }, + { 0x8CCD, 74330 }, + { 0x8CDE, 74334 }, + { 0x8CE7, 74339 }, + { 0x8CD5, 74344 }, + { 0x8CDA, 74349 }, + { 0x8CE3, 74354 }, + { 0x8CD1, 74359 }, + { 0x8CF4, 74364 }, + { 0x8CC9, 74367 }, + { 0x8CDD, 74371 }, + { 0x8CE6, 74376 }, + { 0x8CD4, 74381 }, + { 0x8CDC, 74386 }, + { 0x8CE5, 74391 }, + { 0x8CD3, 74396 }, + { 0x8CE1, 74401 }, + { 0x8CEA, 74406 }, + { 0x8CD8, 74411 }, + { 0x8CEB, 74416 }, + { 0x8CCB, 74419 }, + { 0x8CE0, 74423 }, + { 0x8CE9, 74428 }, + { 0x8CD7, 74433 }, + { 0x8CCE, 74438 }, + { 0x8CF3, 74442 }, + { 0x8CCC, 74445 }, + { 0x8CDF, 74449 }, + { 0x8CE8, 74454 }, + { 0x8CD6, 74459 }, + { 0x8CCA, 74464 }, + { 0x8CDB, 74468 }, + { 0x8CE4, 74473 }, + { 0x8CD2, 74478 }, + { 0x8CCF, 74483 }, + { 0x8CF1, 74487 }, + { 0x8CED, 74490 }, + { 0x8CEC, 74493 }, + { 0x8CEF, 74496 }, + { 0x8CF0, 74499 }, + { 0x8CF2, 74502 }, + { 0x8CEE, 74505 }, + { 0x5354, 74508 }, + { 0x534E, 74512 }, + { 0x5351, 74514 }, + { 0x534F, 74518 }, + { 0x5352, 74522 }, + { 0x5350, 74526 }, + { 0x534D, 74530 }, + { 0x5340, 74533 }, + { 0x5345, 74536 }, + { 0x5343, 74539 }, + { 0x533D, 74542 }, + { 0x5346, 74545 }, + { 0x533C, 74548 }, + { 0x534A, 74551 }, + { 0x5341, 74554 }, + { 0x5344, 74557 }, + { 0x533F, 74560 }, + { 0x5349, 74563 }, + { 0x534C, 74566 }, + { 0x5342, 74569 }, + { 0x534B, 74572 }, + { 0x5348, 74575 }, + { 0x533E, 74578 }, + { 0x5347, 74581 }, + { 0x5353, 74584 }, + { 0x234C, 74586 }, + { 0x94D1, 74588 }, + { 0x07C4, 74589 }, + { 0x07C6, 74592 }, + { 0x07C5, 74595 }, + { 0x07C7, 74598 }, + { 0x07CD, 74601 }, + { 0x07CE, 74604 }, + { 0x07CF, 74607 }, + { 0x07D0, 74610 }, + { 0x07D3, 74613 }, + { 0x07D5, 74616 }, + { 0x07D6, 74619 }, + { 0x07D1, 74622 }, + { 0x07D8, 74625 }, + { 0x07C9, 74628 }, + { 0x07D2, 74631 }, + { 0x07CA, 74634 }, + { 0x07DB, 74637 }, + { 0x07D7, 74640 }, + { 0x07D4, 74643 }, + { 0x07CB, 74646 }, + { 0x07DA, 74649 }, + { 0x07CC, 74652 }, + { 0x07C3, 74655 }, + { 0x07C8, 74658 }, + { 0x07D9, 74661 }, + { 0x07DE, 74664 }, + { 0x07DC, 74667 }, + { 0x07DF, 74670 }, + { 0x07DD, 74672 }, + { 0x95A4, 74675 }, + { 0x526E, 74676 }, + { 0x526F, 74679 }, + { 0x52B0, 74682 }, + { 0x52B1, 74685 }, + { 0x52AE, 74688 }, + { 0x52AC, 74692 }, + { 0x52AF, 74696 }, + { 0x52AD, 74700 }, + { 0x52AB, 74704 }, + { 0x528D, 74708 }, + { 0x5286, 74711 }, + { 0x527E, 74714 }, + { 0x5274, 74717 }, + { 0x527A, 74720 }, + { 0x5272, 74723 }, + { 0x528C, 74726 }, + { 0x5276, 74729 }, + { 0x5270, 74732 }, + { 0x5289, 74735 }, + { 0x527F, 74738 }, + { 0x527B, 74741 }, + { 0x527C, 74744 }, + { 0x5288, 74747 }, + { 0x528B, 74750 }, + { 0x5278, 74753 }, + { 0x5283, 74756 }, + { 0x5287, 74759 }, + { 0x5285, 74762 }, + { 0x5275, 74765 }, + { 0x5282, 74768 }, + { 0x5271, 74771 }, + { 0x5273, 74774 }, + { 0x5277, 74777 }, + { 0x527D, 74780 }, + { 0x528A, 74783 }, + { 0x5279, 74786 }, + { 0x5280, 74789 }, + { 0x5284, 74792 }, + { 0x5281, 74795 }, + { 0x52AA, 74798 }, + { 0x529C, 74802 }, + { 0x5292, 74806 }, + { 0x5298, 74810 }, + { 0x5290, 74814 }, + { 0x52A9, 74818 }, + { 0x5294, 74822 }, + { 0x528E, 74826 }, + { 0x52A6, 74830 }, + { 0x529D, 74834 }, + { 0x5299, 74838 }, + { 0x529A, 74842 }, + { 0x52A5, 74846 }, + { 0x52A8, 74850 }, + { 0x5296, 74854 }, + { 0x52A1, 74858 }, + { 0x52A4, 74862 }, + { 0x52A3, 74866 }, + { 0x5293, 74870 }, + { 0x52A0, 74874 }, + { 0x528F, 74878 }, + { 0x5291, 74882 }, + { 0x5295, 74886 }, + { 0x529B, 74890 }, + { 0x52A7, 74894 }, + { 0x5297, 74898 }, + { 0x529E, 74902 }, + { 0x52A2, 74906 }, + { 0x529F, 74910 }, + { 0x9479, 74914 }, + { 0x52ED, 74917 }, + { 0x52EE, 74921 }, + { 0x52EF, 74925 }, + { 0x52EC, 74929 }, + { 0x52EB, 74933 }, + { 0x52F4, 74937 }, + { 0x52F9, 74941 }, + { 0x52F5, 74945 }, + { 0x52F8, 74949 }, + { 0x52F7, 74953 }, + { 0x52FC, 74957 }, + { 0x52F3, 74961 }, + { 0x52FB, 74965 }, + { 0x52FA, 74969 }, + { 0x52F6, 74973 }, + { 0x52F1, 74977 }, + { 0x52E7, 74980 }, + { 0x52E2, 74985 }, + { 0x52E9, 74990 }, + { 0x52E4, 74995 }, + { 0x52E1, 75000 }, + { 0x52E8, 75005 }, + { 0x52EA, 75010 }, + { 0x52E3, 75015 }, + { 0x52E5, 75020 }, + { 0x52E6, 75025 }, + { 0x52B2, 75031 }, + { 0x52B8, 75035 }, + { 0x52B4, 75039 }, + { 0x52BA, 75043 }, + { 0x52B6, 75047 }, + { 0x52B3, 75051 }, + { 0x52B9, 75055 }, + { 0x52BB, 75059 }, + { 0x52D2, 75063 }, + { 0x52C1, 75067 }, + { 0x52CD, 75071 }, + { 0x52BE, 75075 }, + { 0x52DC, 75079 }, + { 0x52B5, 75083 }, + { 0x52C3, 75087 }, + { 0x52BC, 75091 }, + { 0x52D7, 75095 }, + { 0x52D4, 75099 }, + { 0x52CF, 75103 }, + { 0x52D0, 75107 }, + { 0x52D6, 75111 }, + { 0x52DB, 75115 }, + { 0x52CB, 75119 }, + { 0x52B7, 75123 }, + { 0x52D8, 75127 }, + { 0x52D5, 75131 }, + { 0x52D3, 75135 }, + { 0x52C2, 75139 }, + { 0x52C8, 75143 }, + { 0x52CE, 75147 }, + { 0x52BF, 75151 }, + { 0x52C4, 75155 }, + { 0x52BD, 75159 }, + { 0x52DD, 75163 }, + { 0x52C0, 75167 }, + { 0x52CA, 75171 }, + { 0x52C5, 75175 }, + { 0x52D1, 75179 }, + { 0x52D9, 75183 }, + { 0x52DA, 75187 }, + { 0x52CC, 75191 }, + { 0x52E0, 75195 }, + { 0x52C6, 75199 }, + { 0x52C9, 75203 }, + { 0x52DF, 75207 }, + { 0x52DE, 75211 }, + { 0x52C7, 75215 }, + { 0x52F0, 75219 }, + { 0x52F2, 75222 }, + { 0x95EF, 75225 }, + { 0x9101, 75227 }, + { 0x226B, 75231 }, + { 0x94CE, 75232 }, + { 0x1F46, 75233 }, + { 0x9243, 75236 }, + { 0x4CC5, 75237 }, + { 0x4CC8, 75240 }, + { 0x4CC6, 75243 }, + { 0x4CC7, 75246 }, + { 0x4CDF, 75249 }, + { 0x4CCD, 75252 }, + { 0x4CDA, 75255 }, + { 0x4CCB, 75258 }, + { 0x4CE7, 75261 }, + { 0x4CCF, 75264 }, + { 0x4CC9, 75267 }, + { 0x4CE4, 75270 }, + { 0x4CE1, 75273 }, + { 0x4CDC, 75276 }, + { 0x4CDD, 75279 }, + { 0x4CE3, 75282 }, + { 0x4CE6, 75285 }, + { 0x4CD8, 75288 }, + { 0x4CE5, 75291 }, + { 0x4CE2, 75294 }, + { 0x4CE0, 75297 }, + { 0x4CCE, 75300 }, + { 0x4CD4, 75303 }, + { 0x4CDB, 75306 }, + { 0x4CCC, 75309 }, + { 0x4CD0, 75312 }, + { 0x4CCA, 75315 }, + { 0x4CD7, 75318 }, + { 0x4CD1, 75321 }, + { 0x4CDE, 75324 }, + { 0x4CE9, 75327 }, + { 0x4CE8, 75330 }, + { 0x4CD9, 75333 }, + { 0x4CD2, 75336 }, + { 0x4CD5, 75339 }, + { 0x4CD6, 75342 }, + { 0x4CD3, 75345 }, + { 0x4CEA, 75348 }, + { 0x8F68, 75351 }, + { 0x8F6F, 75353 }, + { 0x80C5, 75355 }, + { 0x80C6, 75359 }, + { 0x80C7, 75363 }, + { 0x80C8, 75369 }, + { 0x80C2, 75375 }, + { 0x80C3, 75379 }, + { 0x80C4, 75385 }, + { 0x80E5, 75391 }, + { 0x8130, 75395 }, + { 0x80AE, 75398 }, + { 0x8138, 75402 }, + { 0x80D7, 75405 }, + { 0x80AD, 75409 }, + { 0x814A, 75413 }, + { 0x8118, 75418 }, + { 0x8116, 75422 }, + { 0x811A, 75426 }, + { 0x811C, 75430 }, + { 0x8106, 75434 }, + { 0x80E4, 75440 }, + { 0x817F, 75446 }, + { 0x80B0, 75450 }, + { 0x8156, 75453 }, + { 0x8157, 75456 }, + { 0x80C9, 75460 }, + { 0x80CA, 75464 }, + { 0x80CE, 75468 }, + { 0x80CF, 75472 }, + { 0x8162, 75476 }, + { 0x8161, 75480 }, + { 0x8100, 75484 }, + { 0x80DE, 75488 }, + { 0x8152, 75492 }, + { 0x80AA, 75497 }, + { 0x80F5, 75502 }, + { 0x80F4, 75507 }, + { 0x80FB, 75512 }, + { 0x80E6, 75516 }, + { 0x818B, 75520 }, + { 0x8139, 75523 }, + { 0x813C, 75526 }, + { 0x813B, 75530 }, + { 0x80F9, 75534 }, + { 0x8155, 75538 }, + { 0x8117, 75542 }, + { 0x8115, 75546 }, + { 0x8119, 75550 }, + { 0x811B, 75554 }, + { 0x80B8, 75558 }, + { 0x80FE, 75561 }, + { 0x8171, 75564 }, + { 0x80A6, 75567 }, + { 0x8133, 75571 }, + { 0x8137, 75574 }, + { 0x8136, 75580 }, + { 0x818C, 75585 }, + { 0x8159, 75588 }, + { 0x8163, 75591 }, + { 0x8164, 75596 }, + { 0x8132, 75601 }, + { 0x80DC, 75604 }, + { 0x8151, 75608 }, + { 0x8150, 75613 }, + { 0x8131, 75617 }, + { 0x80AB, 75620 }, + { 0x80AF, 75625 }, + { 0x80D2, 75628 }, + { 0x80D3, 75632 }, + { 0x80A9, 75636 }, + { 0x8175, 75640 }, + { 0x80FF, 75643 }, + { 0x80DD, 75647 }, + { 0x80B6, 75651 }, + { 0x815A, 75655 }, + { 0x8165, 75658 }, + { 0x80E7, 75662 }, + { 0x8177, 75667 }, + { 0x80D6, 75670 }, + { 0x80A8, 75674 }, + { 0x814B, 75678 }, + { 0x80CD, 75682 }, + { 0x80CC, 75686 }, + { 0x80A5, 75690 }, + { 0x8102, 75694 }, + { 0x80E0, 75698 }, + { 0x8180, 75702 }, + { 0x8181, 75707 }, + { 0x818A, 75713 }, + { 0x8185, 75718 }, + { 0x8182, 75723 }, + { 0x8184, 75728 }, + { 0x8189, 75733 }, + { 0x8188, 75740 }, + { 0x8187, 75747 }, + { 0x8186, 75754 }, + { 0x8183, 75761 }, + { 0x8158, 75766 }, + { 0x815D, 75769 }, + { 0x8167, 75772 }, + { 0x815E, 75776 }, + { 0x80D8, 75780 }, + { 0x80D9, 75784 }, + { 0x80AC, 75788 }, + { 0x80A4, 75792 }, + { 0x8174, 75796 }, + { 0x80E9, 75800 }, + { 0x80E8, 75805 }, + { 0x812F, 75810 }, + { 0x8169, 75813 }, + { 0x816B, 75820 }, + { 0x816A, 75828 }, + { 0x816C, 75835 }, + { 0x816D, 75842 }, + { 0x816E, 75849 }, + { 0x816F, 75857 }, + { 0x8170, 75865 }, + { 0x80B9, 75873 }, + { 0x80B7, 75876 }, + { 0x80FD, 75879 }, + { 0x80FC, 75884 }, + { 0x80B4, 75889 }, + { 0x80B5, 75892 }, + { 0x80D0, 75896 }, + { 0x80D1, 75900 }, + { 0x8176, 75904 }, + { 0x8101, 75907 }, + { 0x80DF, 75911 }, + { 0x80D5, 75915 }, + { 0x80D4, 75920 }, + { 0x80A7, 75925 }, + { 0x8179, 75930 }, + { 0x810C, 75933 }, + { 0x810D, 75937 }, + { 0x810E, 75941 }, + { 0x813A, 75945 }, + { 0x80CB, 75949 }, + { 0x80FA, 75954 }, + { 0x80BA, 75958 }, + { 0x813D, 75962 }, + { 0x813E, 75966 }, + { 0x813F, 75970 }, + { 0x8140, 75974 }, + { 0x8141, 75978 }, + { 0x8142, 75982 }, + { 0x8143, 75986 }, + { 0x8144, 75990 }, + { 0x8145, 75994 }, + { 0x8146, 75998 }, + { 0x8147, 76002 }, + { 0x80B1, 76006 }, + { 0x80B2, 76010 }, + { 0x80B3, 76014 }, + { 0x80BF, 76018 }, + { 0x817A, 76022 }, + { 0x817E, 76025 }, + { 0x80EB, 76029 }, + { 0x80F3, 76035 }, + { 0x80F2, 76042 }, + { 0x80EA, 76049 }, + { 0x80F1, 76055 }, + { 0x80F0, 76061 }, + { 0x80ED, 76067 }, + { 0x80EC, 76073 }, + { 0x80EF, 76079 }, + { 0x80EE, 76085 }, + { 0x80BB, 76091 }, + { 0x814D, 76095 }, + { 0x8128, 76100 }, + { 0x812B, 76104 }, + { 0x8127, 76108 }, + { 0x814C, 76112 }, + { 0x8129, 76117 }, + { 0x814F, 76121 }, + { 0x8107, 76126 }, + { 0x8124, 76130 }, + { 0x812A, 76134 }, + { 0x811D, 76138 }, + { 0x812C, 76142 }, + { 0x8110, 76147 }, + { 0x8111, 76151 }, + { 0x8112, 76155 }, + { 0x8113, 76159 }, + { 0x8114, 76163 }, + { 0x811F, 76167 }, + { 0x812D, 76171 }, + { 0x8121, 76176 }, + { 0x814E, 76180 }, + { 0x811E, 76184 }, + { 0x8109, 76188 }, + { 0x810A, 76192 }, + { 0x810B, 76196 }, + { 0x810F, 76200 }, + { 0x8108, 76205 }, + { 0x8120, 76210 }, + { 0x8123, 76214 }, + { 0x8122, 76218 }, + { 0x8134, 76222 }, + { 0x80BE, 76225 }, + { 0x80BD, 76229 }, + { 0x8153, 76233 }, + { 0x8154, 76237 }, + { 0x8172, 76241 }, + { 0x8173, 76246 }, + { 0x817B, 76251 }, + { 0x817C, 76254 }, + { 0x8178, 76258 }, + { 0x817D, 76261 }, + { 0x8103, 76265 }, + { 0x80E1, 76269 }, + { 0x8125, 76273 }, + { 0x8126, 76277 }, + { 0x8166, 76281 }, + { 0x815C, 76285 }, + { 0x815B, 76289 }, + { 0x8168, 76293 }, + { 0x8160, 76297 }, + { 0x815F, 76301 }, + { 0x80C0, 76305 }, + { 0x80BC, 76309 }, + { 0x8135, 76313 }, + { 0x80C1, 76316 }, + { 0x8148, 76320 }, + { 0x8149, 76323 }, + { 0x80F8, 76326 }, + { 0x812E, 76330 }, + { 0x80DA, 76333 }, + { 0x80DB, 76337 }, + { 0x8105, 76341 }, + { 0x80E3, 76345 }, + { 0x8104, 76349 }, + { 0x80E2, 76353 }, + { 0x80F7, 76357 }, + { 0x80F6, 76363 }, + { 0x8F6C, 76369 }, + { 0x8F4B, 76371 }, + { 0x4F86, 76375 }, + { 0x4F8B, 76379 }, + { 0x4F87, 76383 }, + { 0x4F8A, 76387 }, + { 0x4F89, 76391 }, + { 0x4F8E, 76395 }, + { 0x4F85, 76399 }, + { 0x4F8D, 76403 }, + { 0x4F8C, 76407 }, + { 0x4F88, 76411 }, + { 0x3957, 76415 }, + { 0x395C, 76420 }, + { 0x3958, 76425 }, + { 0x395B, 76430 }, + { 0x395A, 76435 }, + { 0x395F, 76440 }, + { 0x3956, 76445 }, + { 0x395E, 76450 }, + { 0x395D, 76455 }, + { 0x3959, 76460 }, + { 0x0E41, 76465 }, + { 0x0E46, 76469 }, + { 0x0E42, 76473 }, + { 0x0E45, 76477 }, + { 0x0E44, 76481 }, + { 0x0E49, 76485 }, + { 0x0E40, 76489 }, + { 0x0E48, 76493 }, + { 0x0E47, 76497 }, + { 0x0E43, 76501 }, + { 0x0DE7, 76505 }, + { 0x39D3, 76509 }, + { 0x39D4, 76514 }, + { 0x39D5, 76519 }, + { 0x0DEA, 76524 }, + { 0x394B, 76527 }, + { 0x0E37, 76531 }, + { 0x0E38, 76535 }, + { 0x0E39, 76539 }, + { 0x0E3A, 76543 }, + { 0x0E3B, 76547 }, + { 0x0E3C, 76552 }, + { 0x0E3D, 76557 }, + { 0x0E3F, 76563 }, + { 0x0E4A, 76568 }, + { 0x0E4B, 76572 }, + { 0x0DFA, 76576 }, + { 0x0DE9, 76580 }, + { 0x0DFB, 76583 }, + { 0x0DE8, 76586 }, + { 0x0E19, 76589 }, + { 0x0E1A, 76595 }, + { 0x0E1B, 76601 }, + { 0x0E1C, 76607 }, + { 0x0E1D, 76613 }, + { 0x0DE6, 76619 }, + { 0x0E14, 76622 }, + { 0x0E13, 76629 }, + { 0x0DF1, 76635 }, + { 0x0DF6, 76638 }, + { 0x0DF2, 76641 }, + { 0x0DF5, 76644 }, + { 0x0DF4, 76647 }, + { 0x0DF9, 76650 }, + { 0x0DF0, 76653 }, + { 0x0DF8, 76656 }, + { 0x0DF7, 76659 }, + { 0x0DF3, 76662 }, + { 0x0DE1, 76665 }, + { 0x0DE5, 76669 }, + { 0x0DDD, 76674 }, + { 0x0DDF, 76678 }, + { 0x0DDC, 76682 }, + { 0x0DE2, 76686 }, + { 0x0DDE, 76690 }, + { 0x0DE0, 76694 }, + { 0x0DE4, 76698 }, + { 0x0DE3, 76703 }, + { 0x0E21, 76708 }, + { 0x0E12, 76714 }, + { 0x0E34, 76720 }, + { 0x0E35, 76725 }, + { 0x0E33, 76731 }, + { 0x0E36, 76736 }, + { 0x0DDB, 76742 }, + { 0x0E4C, 76747 }, + { 0x0E4D, 76752 }, + { 0x0E23, 76757 }, + { 0x0E24, 76762 }, + { 0x0E22, 76767 }, + { 0x0E08, 76772 }, + { 0x0E06, 76777 }, + { 0x0E09, 76782 }, + { 0x0E07, 76787 }, + { 0x0E17, 76792 }, + { 0x0E18, 76799 }, + { 0x0DD1, 76806 }, + { 0x0DD7, 76809 }, + { 0x0DD3, 76812 }, + { 0x0DD9, 76815 }, + { 0x0DD5, 76818 }, + { 0x0DDA, 76821 }, + { 0x0DC7, 76824 }, + { 0x0DB5, 76827 }, + { 0x0DC2, 76830 }, + { 0x0DB2, 76833 }, + { 0x0DCF, 76836 }, + { 0x0DD4, 76839 }, + { 0x0DB7, 76842 }, + { 0x0DB0, 76845 }, + { 0x0DCC, 76848 }, + { 0x0DC9, 76851 }, + { 0x0DC4, 76854 }, + { 0x0DC5, 76857 }, + { 0x0DCB, 76860 }, + { 0x0DCE, 76863 }, + { 0x0DC0, 76866 }, + { 0x0DD6, 76869 }, + { 0x0DCD, 76872 }, + { 0x0DCA, 76875 }, + { 0x0DC8, 76878 }, + { 0x0DB6, 76881 }, + { 0x0DBD, 76884 }, + { 0x0DC3, 76887 }, + { 0x0DB3, 76890 }, + { 0x0DB8, 76893 }, + { 0x0DB1, 76896 }, + { 0x0DD0, 76899 }, + { 0x0DD8, 76902 }, + { 0x0E0C, 76906 }, + { 0x0E0D, 76910 }, + { 0x0E0B, 76914 }, + { 0x0E0A, 76918 }, + { 0x0DB4, 76922 }, + { 0x0DBF, 76925 }, + { 0x0DB9, 76928 }, + { 0x0DC6, 76931 }, + { 0x0E00, 76934 }, + { 0x0E01, 76937 }, + { 0x3963, 76940 }, + { 0x3961, 76945 }, + { 0x394E, 76950 }, + { 0x394F, 76955 }, + { 0x3951, 76960 }, + { 0x3964, 76965 }, + { 0x3953, 76970 }, + { 0x3962, 76975 }, + { 0x3950, 76980 }, + { 0x3952, 76985 }, + { 0x3960, 76990 }, + { 0x3955, 76995 }, + { 0x394D, 77000 }, + { 0x3954, 77005 }, + { 0x0DC1, 77010 }, + { 0x0DBB, 77013 }, + { 0x0DBE, 77016 }, + { 0x0DBA, 77019 }, + { 0x0E11, 77022 }, + { 0x0DD2, 77027 }, + { 0x0E2F, 77031 }, + { 0x0E28, 77035 }, + { 0x0E2B, 77039 }, + { 0x0E2E, 77043 }, + { 0x0E27, 77047 }, + { 0x0E31, 77051 }, + { 0x0E25, 77055 }, + { 0x0E2C, 77059 }, + { 0x0E29, 77063 }, + { 0x394A, 77067 }, + { 0x3947, 77071 }, + { 0x3946, 77075 }, + { 0x3948, 77079 }, + { 0x0E26, 77083 }, + { 0x3949, 77087 }, + { 0x0E2A, 77091 }, + { 0x0E2D, 77095 }, + { 0x0E30, 77099 }, + { 0x39D6, 77103 }, + { 0x39D7, 77108 }, + { 0x0DBC, 77113 }, + { 0x39D2, 77116 }, + { 0x0DEF, 77120 }, + { 0x0E3E, 77124 }, + { 0x39B9, 77129 }, + { 0x39C7, 77133 }, + { 0x39B8, 77137 }, + { 0x39C5, 77141 }, + { 0x39BB, 77145 }, + { 0x39C3, 77149 }, + { 0x39CB, 77153 }, + { 0x39C4, 77157 }, + { 0x39C9, 77161 }, + { 0x39CA, 77165 }, + { 0x39BA, 77169 }, + { 0x39C0, 77173 }, + { 0x39C2, 77177 }, + { 0x39C6, 77181 }, + { 0x39BC, 77185 }, + { 0x39C6, 77189 }, + { 0x39BD, 77193 }, + { 0x39BE, 77197 }, + { 0x39C1, 77201 }, + { 0x39BF, 77205 }, + { 0x0E1E, 77209 }, + { 0x0E1F, 77215 }, + { 0x0E20, 77221 }, + { 0x0E04, 77227 }, + { 0x0E02, 77231 }, + { 0x0E05, 77235 }, + { 0x0E03, 77239 }, + { 0x0E16, 77243 }, + { 0x0E15, 77249 }, + { 0x0E4E, 77255 }, + { 0x0E4F, 77259 }, + { 0x39D0, 77263 }, + { 0x39D1, 77267 }, + { 0x39CF, 77271 }, + { 0x0DFF, 77275 }, + { 0x0DFC, 77278 }, + { 0x0DFD, 77281 }, + { 0x0DFE, 77284 }, + { 0x4F90, 77287 }, + { 0x4F95, 77293 }, + { 0x4F91, 77299 }, + { 0x4F94, 77305 }, + { 0x4F93, 77311 }, + { 0x4F98, 77317 }, + { 0x4F8F, 77323 }, + { 0x4F97, 77329 }, + { 0x4F96, 77335 }, + { 0x4F92, 77341 }, + { 0x39CE, 77347 }, + { 0x39CD, 77351 }, + { 0x39CC, 77355 }, + { 0x394C, 77359 }, + { 0x39C8, 77364 }, + { 0x0E10, 77369 }, + { 0x0E0F, 77375 }, + { 0x0E0E, 77381 }, + { 0x0E32, 77387 }, + { 0x0DEE, 77393 }, + { 0x0DEC, 77398 }, + { 0x0DED, 77403 }, + { 0x0DEB, 77408 }, + { 0x9007, 77413 }, + { 0x1F06, 77414 }, + { 0x1EDF, 77421 }, + { 0x1EE0, 77428 }, + { 0x1EC7, 77435 }, + { 0x1ECB, 77440 }, + { 0x1ECF, 77445 }, + { 0x1EC8, 77449 }, + { 0x1ED0, 77454 }, + { 0x1ECC, 77458 }, + { 0x1E9E, 77463 }, + { 0x2272, 77469 }, + { 0x27F2, 77470 }, + { 0x95A3, 77473 }, + { 0x91C3, 77475 }, + { 0x952E, 77477 }, + { 0x956D, 77480 }, + { 0x9543, 77488 }, + { 0x9533, 77494 }, + { 0x9572, 77497 }, + { 0x9548, 77505 }, + { 0x9530, 77511 }, + { 0x956F, 77514 }, + { 0x9545, 77522 }, + { 0x952F, 77528 }, + { 0x956E, 77531 }, + { 0x9544, 77539 }, + { 0x9531, 77545 }, + { 0x9570, 77548 }, + { 0x9546, 77556 }, + { 0x9532, 77562 }, + { 0x954B, 77565 }, + { 0x9571, 77573 }, + { 0x9560, 77581 }, + { 0x9575, 77589 }, + { 0x9547, 77597 }, + { 0x9536, 77603 }, + { 0x9558, 77609 }, + { 0x955D, 77613 }, + { 0x955A, 77617 }, + { 0x9559, 77621 }, + { 0x955B, 77625 }, + { 0x955C, 77629 }, + { 0x9578, 77633 }, + { 0x957B, 77636 }, + { 0x27BC, 77642 }, + { 0x27BD, 77644 }, + { 0x1CEE, 77646 }, + { 0x413A, 77649 }, + { 0x90F6, 77651 }, + { 0x23DB, 77657 }, + { 0x90F7, 77663 }, + { 0x23DD, 77669 }, + { 0x25D2, 77675 }, + { 0x25D3, 77679 }, + { 0x2A53, 77683 }, + { 0x8FCC, 77685 }, + { 0x9072, 77686 }, + { 0x916B, 77688 }, + { 0x433E, 77691 }, + { 0x4343, 77694 }, + { 0x433F, 77697 }, + { 0x4342, 77700 }, + { 0x4341, 77703 }, + { 0x4346, 77706 }, + { 0x433D, 77709 }, + { 0x4345, 77712 }, + { 0x4344, 77715 }, + { 0x4340, 77718 }, + { 0x4335, 77721 }, + { 0x4336, 77724 }, + { 0x4337, 77727 }, + { 0x4338, 77730 }, + { 0x4339, 77733 }, + { 0x433A, 77736 }, + { 0x4320, 77739 }, + { 0x433B, 77742 }, + { 0x432C, 77745 }, + { 0x432B, 77748 }, + { 0x4333, 77751 }, + { 0x4322, 77754 }, + { 0x433C, 77757 }, + { 0x4326, 77760 }, + { 0x4327, 77763 }, + { 0x4321, 77766 }, + { 0x4323, 77769 }, + { 0x4334, 77772 }, + { 0x4329, 77775 }, + { 0x4324, 77778 }, + { 0x4332, 77781 }, + { 0x431F, 77784 }, + { 0x432A, 77787 }, + { 0x4325, 77790 }, + { 0x432E, 77793 }, + { 0x432F, 77796 }, + { 0x4330, 77799 }, + { 0x4331, 77802 }, + { 0x432D, 77805 }, + { 0x4328, 77808 }, + { 0x8BFD, 77811 }, + { 0x8C0F, 77815 }, + { 0x8C18, 77820 }, + { 0x8C02, 77825 }, + { 0x8C14, 77829 }, + { 0x8C1D, 77834 }, + { 0x8C06, 77839 }, + { 0x8C21, 77843 }, + { 0x8BFE, 77848 }, + { 0x8C10, 77852 }, + { 0x8C19, 77857 }, + { 0x8C01, 77862 }, + { 0x8C13, 77866 }, + { 0x8C1C, 77871 }, + { 0x8C00, 77876 }, + { 0x8C12, 77880 }, + { 0x8C1B, 77885 }, + { 0x8C05, 77890 }, + { 0x8C17, 77894 }, + { 0x8C20, 77899 }, + { 0x8C04, 77904 }, + { 0x8C16, 77908 }, + { 0x8C1F, 77913 }, + { 0x8C0A, 77918 }, + { 0x8C25, 77922 }, + { 0x8C09, 77927 }, + { 0x8C24, 77931 }, + { 0x8C03, 77936 }, + { 0x8C15, 77940 }, + { 0x8C1E, 77945 }, + { 0x8C0B, 77950 }, + { 0x8C26, 77954 }, + { 0x8BFF, 77959 }, + { 0x8C11, 77963 }, + { 0x8C1A, 77968 }, + { 0x8C0D, 77973 }, + { 0x8C28, 77977 }, + { 0x8C0E, 77982 }, + { 0x8C29, 77986 }, + { 0x8C08, 77991 }, + { 0x8C23, 77995 }, + { 0x8C07, 78000 }, + { 0x8C22, 78004 }, + { 0x8C0C, 78009 }, + { 0x8C27, 78013 }, + { 0x8C38, 78018 }, + { 0x8C39, 78023 }, + { 0x8C2A, 78028 }, + { 0x8C2F, 78031 }, + { 0x8C35, 78036 }, + { 0x8C33, 78042 }, + { 0x8C37, 78047 }, + { 0x8C2B, 78053 }, + { 0x8C36, 78058 }, + { 0x8C2E, 78064 }, + { 0x8C2D, 78069 }, + { 0x8C34, 78074 }, + { 0x8C32, 78080 }, + { 0x8C31, 78085 }, + { 0x8C30, 78090 }, + { 0x8C2C, 78095 }, + { 0x918A, 78100 }, + { 0x9099, 78101 }, + { 0x1E59, 78102 }, + { 0x94C8, 78104 }, + { 0x948A, 78105 }, + { 0x8FDA, 78106 }, + { 0x91C7, 78107 }, + { 0x0005, 78109 }, + { 0x0075, 78111 }, + { 0x943A, 78113 }, + { 0x95BF, 78115 }, + { 0x8D86, 78116 }, + { 0x8D68, 78121 }, + { 0x8D5A, 78126 }, + { 0x8D77, 78131 }, + { 0x8D76, 78136 }, + { 0x8D8B, 78140 }, + { 0x8D6D, 78145 }, + { 0x8D5F, 78150 }, + { 0x8D7C, 78155 }, + { 0x8D8F, 78160 }, + { 0x8D71, 78165 }, + { 0x8D63, 78170 }, + { 0x8D80, 78175 }, + { 0x8D87, 78180 }, + { 0x8D69, 78185 }, + { 0x8D5B, 78190 }, + { 0x8D78, 78195 }, + { 0x8D59, 78200 }, + { 0x8D8A, 78203 }, + { 0x8D6C, 78208 }, + { 0x8D5E, 78213 }, + { 0x8D7B, 78218 }, + { 0x8D95, 78223 }, + { 0x8D89, 78226 }, + { 0x8D6B, 78231 }, + { 0x8D5D, 78236 }, + { 0x8D7A, 78241 }, + { 0x8D90, 78246 }, + { 0x8D72, 78251 }, + { 0x8D64, 78256 }, + { 0x8D81, 78261 }, + { 0x8D93, 78266 }, + { 0x8D75, 78271 }, + { 0x8D67, 78276 }, + { 0x8D84, 78281 }, + { 0x8D8E, 78286 }, + { 0x8D70, 78291 }, + { 0x8D62, 78296 }, + { 0x8D7F, 78301 }, + { 0x8D85, 78306 }, + { 0x8D8D, 78310 }, + { 0x8D6F, 78315 }, + { 0x8D61, 78320 }, + { 0x8D7E, 78325 }, + { 0x8D92, 78330 }, + { 0x8D74, 78335 }, + { 0x8D66, 78340 }, + { 0x8D83, 78345 }, + { 0x8D8C, 78350 }, + { 0x8D6E, 78355 }, + { 0x8D60, 78360 }, + { 0x8D7D, 78365 }, + { 0x8D88, 78370 }, + { 0x8D6A, 78375 }, + { 0x8D5C, 78380 }, + { 0x8D79, 78385 }, + { 0x8D94, 78390 }, + { 0x8D91, 78394 }, + { 0x8D73, 78399 }, + { 0x8D65, 78404 }, + { 0x8D82, 78409 }, + { 0x8D96, 78414 }, + { 0x8D97, 78417 }, + { 0x8D98, 78420 }, + { 0x8D99, 78423 }, + { 0x8D9A, 78426 }, + { 0x8D9B, 78429 }, + { 0x8D9C, 78432 }, + { 0x8D9D, 78435 }, + { 0x8D9E, 78438 }, + { 0x8D9F, 78441 }, + { 0x8DA0, 78444 }, + { 0x8DA1, 78447 }, + { 0x8DA2, 78450 }, + { 0x8DA3, 78453 }, + { 0x8DA4, 78456 }, + { 0x8DA5, 78459 }, + { 0x8DA6, 78462 }, + { 0x8DA7, 78465 }, + { 0x8DA8, 78468 }, + { 0x8DA9, 78471 }, + { 0x8DAA, 78474 }, + { 0x95B8, 78477 }, + { 0x8F32, 78478 }, + { 0x90A1, 78479 }, + { 0x9263, 78480 }, + { 0x8F0A, 78483 }, + { 0x95E8, 78485 }, + { 0x91F1, 78487 }, + { 0x91D4, 78490 }, + { 0x9496, 78492 }, + { 0x915B, 78493 }, + { 0x9169, 78494 }, + { 0x94DD, 78496 }, + { 0x48A0, 78498 }, + { 0x489F, 78504 }, + { 0x488F, 78510 }, + { 0x4899, 78514 }, + { 0x4897, 78518 }, + { 0x489C, 78522 }, + { 0x488C, 78526 }, + { 0x4892, 78530 }, + { 0x4894, 78534 }, + { 0x489B, 78538 }, + { 0x4893, 78542 }, + { 0x488B, 78546 }, + { 0x488D, 78550 }, + { 0x489A, 78554 }, + { 0x4891, 78558 }, + { 0x488E, 78562 }, + { 0x4895, 78566 }, + { 0x4898, 78570 }, + { 0x4896, 78574 }, + { 0x4890, 78578 }, + { 0x48A1, 78582 }, + { 0x48A7, 78586 }, + { 0x48A5, 78591 }, + { 0x48A2, 78595 }, + { 0x48A4, 78599 }, + { 0x48A3, 78603 }, + { 0x48A6, 78607 }, + { 0x489E, 78611 }, + { 0x489D, 78616 }, + { 0x2A44, 78620 }, + { 0x907F, 78623 }, + { 0x2295, 78624 }, + { 0x94CB, 78626 }, + { 0x200E, 78627 }, + { 0x9236, 78630 }, + { 0x9293, 78632 }, + { 0x8EBB, 78634 }, + { 0x952C, 78635 }, + { 0x936D, 78636 }, + { 0x276D, 78642 }, + { 0x2773, 78648 }, + { 0x9232, 78654 }, + { 0x003C, 78657 }, + { 0x2623, 78659 }, + { 0x2621, 78664 }, + { 0x23F4, 78667 }, + { 0x9120, 78671 }, + { 0x8F13, 78673 }, + { 0x9451, 78676 }, + { 0x8FC6, 78681 }, + { 0x8FA8, 78682 }, + { 0x2391, 78683 }, + { 0x27F6, 78688 }, + { 0x27F8, 78694 }, + { 0x2393, 78699 }, + { 0x1D95, 78703 }, + { 0x8EAD, 78706 }, + { 0x8EAE, 78710 }, + { 0x8EB0, 78714 }, + { 0x8EB2, 78718 }, + { 0x8EAF, 78722 }, + { 0x8EB1, 78726 }, + { 0x9256, 78730 }, + { 0x8F70, 78731 }, + { 0x281D, 78735 }, + { 0x281F, 78739 }, + { 0x281E, 78743 }, + { 0x2820, 78747 }, + { 0x2821, 78751 }, + { 0x281C, 78755 }, + { 0x223F, 78759 }, + { 0x92A0, 78760 }, + { 0x1D63, 78761 }, + { 0x0066, 78762 }, + { 0x1F6A, 78764 }, + { 0x945A, 78765 }, + { 0x1D7B, 78771 }, + { 0x22E5, 78773 }, + { 0x95F7, 78774 }, + { 0x9486, 78776 }, + { 0x4C54, 78780 }, + { 0x4C6A, 78782 }, + { 0x4C5A, 78784 }, + { 0x4C50, 78787 }, + { 0x4C6B, 78790 }, + { 0x4C12, 78793 }, + { 0x4C11, 78796 }, + { 0x4C51, 78799 }, + { 0x4C5F, 78802 }, + { 0x4C10, 78806 }, + { 0x4C52, 78809 }, + { 0x4C53, 78812 }, + { 0x4C55, 78815 }, + { 0x4C61, 78817 }, + { 0x4C66, 78820 }, + { 0x4C62, 78823 }, + { 0x4C65, 78826 }, + { 0x4C64, 78829 }, + { 0x4C69, 78832 }, + { 0x4C60, 78835 }, + { 0x4C68, 78838 }, + { 0x4C67, 78841 }, + { 0x4C63, 78844 }, + { 0x4C5C, 78847 }, + { 0x4C5D, 78852 }, + { 0x4C4C, 78855 }, + { 0x4C44, 78859 }, + { 0x4C4E, 78863 }, + { 0x4C46, 78867 }, + { 0x4C43, 78871 }, + { 0x4C4D, 78875 }, + { 0x4C4F, 78879 }, + { 0x4C45, 78883 }, + { 0x4C47, 78887 }, + { 0x4C4A, 78891 }, + { 0x4C48, 78896 }, + { 0x4C4B, 78901 }, + { 0x4C49, 78906 }, + { 0x4C5E, 78911 }, + { 0x4C5B, 78916 }, + { 0x4C56, 78920 }, + { 0x4C13, 78923 }, + { 0x4C1D, 78926 }, + { 0x4C15, 78929 }, + { 0x4C1F, 78932 }, + { 0x4C17, 78935 }, + { 0x4C14, 78938 }, + { 0x4C1E, 78941 }, + { 0x4C20, 78944 }, + { 0x4C37, 78947 }, + { 0x4C26, 78950 }, + { 0x4C32, 78953 }, + { 0x4C23, 78956 }, + { 0x4C42, 78959 }, + { 0x4C16, 78962 }, + { 0x4C28, 78965 }, + { 0x4C21, 78968 }, + { 0x4C3C, 78971 }, + { 0x4C39, 78974 }, + { 0x4C34, 78977 }, + { 0x4C35, 78980 }, + { 0x4C3B, 78983 }, + { 0x4C41, 78986 }, + { 0x4C30, 78989 }, + { 0x4C18, 78992 }, + { 0x4C3E, 78995 }, + { 0x4C3A, 78998 }, + { 0x4C38, 79001 }, + { 0x4C27, 79004 }, + { 0x4C2D, 79007 }, + { 0x4C33, 79010 }, + { 0x4C24, 79013 }, + { 0x4C29, 79016 }, + { 0x4C22, 79019 }, + { 0x4C3D, 79022 }, + { 0x4C25, 79025 }, + { 0x4C2F, 79028 }, + { 0x4C2A, 79031 }, + { 0x4C36, 79034 }, + { 0x4C3F, 79037 }, + { 0x4C40, 79040 }, + { 0x4C31, 79043 }, + { 0x4C2B, 79046 }, + { 0x4C2E, 79049 }, + { 0x4C2C, 79052 }, + { 0x4C1B, 79055 }, + { 0x4C19, 79059 }, + { 0x4C1C, 79063 }, + { 0x4C1A, 79067 }, + { 0x4C59, 79071 }, + { 0x4C6E, 79074 }, + { 0x4C6F, 79077 }, + { 0x4C58, 79080 }, + { 0x4C6C, 79082 }, + { 0x4C57, 79084 }, + { 0x4C6D, 79087 }, + { 0x430C, 79090 }, + { 0x4305, 79093 }, + { 0x4309, 79096 }, + { 0x4318, 79099 }, + { 0x42F4, 79102 }, + { 0x4312, 79105 }, + { 0x4308, 79108 }, + { 0x4310, 79111 }, + { 0x4319, 79114 }, + { 0x4317, 79117 }, + { 0x4307, 79120 }, + { 0x4316, 79123 }, + { 0x42F9, 79126 }, + { 0x431C, 79129 }, + { 0x430F, 79132 }, + { 0x4306, 79135 }, + { 0x431A, 79138 }, + { 0x42F2, 79141 }, + { 0x42FB, 79144 }, + { 0x431D, 79147 }, + { 0x4311, 79150 }, + { 0x430E, 79153 }, + { 0x4313, 79156 }, + { 0x4315, 79159 }, + { 0x430B, 79162 }, + { 0x42F0, 79165 }, + { 0x42FC, 79168 }, + { 0x4301, 79171 }, + { 0x42F7, 79174 }, + { 0x431E, 79177 }, + { 0x42FE, 79180 }, + { 0x42FA, 79183 }, + { 0x42F8, 79186 }, + { 0x42F1, 79189 }, + { 0x4303, 79192 }, + { 0x4304, 79195 }, + { 0x4314, 79198 }, + { 0x42EF, 79201 }, + { 0x430D, 79204 }, + { 0x42F5, 79207 }, + { 0x42FD, 79210 }, + { 0x430A, 79213 }, + { 0x431B, 79216 }, + { 0x4302, 79219 }, + { 0x4300, 79222 }, + { 0x42F3, 79225 }, + { 0x42F6, 79228 }, + { 0x42FF, 79231 }, + { 0x945D, 79234 }, + { 0x260E, 79239 }, + { 0x4ED0, 79241 }, + { 0x4EC7, 79246 }, + { 0x4EC6, 79249 }, + { 0x4EC8, 79252 }, + { 0x4EC5, 79255 }, + { 0x4EC4, 79258 }, + { 0x4EC3, 79261 }, + { 0x4EC9, 79264 }, + { 0x4EBF, 79266 }, + { 0x4EB9, 79270 }, + { 0x4EC1, 79274 }, + { 0x4EBB, 79278 }, + { 0x4EB8, 79282 }, + { 0x4EC0, 79286 }, + { 0x4EC2, 79290 }, + { 0x4EBA, 79294 }, + { 0x4EBC, 79298 }, + { 0x4EBD, 79302 }, + { 0x4EBE, 79307 }, + { 0x4EE3, 79312 }, + { 0x4EE4, 79317 }, + { 0x4ECA, 79322 }, + { 0x4E89, 79325 }, + { 0x4E93, 79328 }, + { 0x4E8B, 79331 }, + { 0x4E95, 79334 }, + { 0x4E8D, 79337 }, + { 0x4E8A, 79340 }, + { 0x4E94, 79343 }, + { 0x4E96, 79346 }, + { 0x4EAD, 79349 }, + { 0x4E9C, 79352 }, + { 0x4EA8, 79355 }, + { 0x4E99, 79358 }, + { 0x4EB7, 79361 }, + { 0x4E8C, 79364 }, + { 0x4E9E, 79367 }, + { 0x4E97, 79370 }, + { 0x4EB2, 79373 }, + { 0x4EAF, 79376 }, + { 0x4EAA, 79379 }, + { 0x4EAB, 79382 }, + { 0x4EB1, 79385 }, + { 0x4EB6, 79388 }, + { 0x4EA6, 79391 }, + { 0x4E8E, 79394 }, + { 0x4EB3, 79397 }, + { 0x4EB0, 79400 }, + { 0x4EAE, 79403 }, + { 0x4E9D, 79406 }, + { 0x4EA3, 79409 }, + { 0x4EA9, 79412 }, + { 0x4E9A, 79415 }, + { 0x4E9F, 79418 }, + { 0x4E98, 79421 }, + { 0x4E9B, 79424 }, + { 0x4EA5, 79427 }, + { 0x4EA0, 79430 }, + { 0x4EAC, 79433 }, + { 0x4EB4, 79436 }, + { 0x4EB5, 79439 }, + { 0x4EA7, 79442 }, + { 0x4EA1, 79445 }, + { 0x4EA4, 79448 }, + { 0x4EA2, 79451 }, + { 0x4E91, 79454 }, + { 0x4E8F, 79458 }, + { 0x4E92, 79462 }, + { 0x4E90, 79466 }, + { 0x4EE2, 79470 }, + { 0x4EE0, 79474 }, + { 0x4EE1, 79479 }, + { 0x4EDF, 79484 }, + { 0x4ED4, 79489 }, + { 0x4ED5, 79498 }, + { 0x4ED3, 79507 }, + { 0x4ED8, 79515 }, + { 0x4ED9, 79521 }, + { 0x4EDD, 79527 }, + { 0x4EDE, 79535 }, + { 0x4EDC, 79543 }, + { 0x4ED2, 79550 }, + { 0x4ED1, 79558 }, + { 0x4EDB, 79566 }, + { 0x4EDA, 79572 }, + { 0x4ED6, 79578 }, + { 0x4ED7, 79583 }, + { 0x4ECC, 79590 }, + { 0x4ECB, 79593 }, + { 0x4ECD, 79596 }, + { 0x4ECE, 79599 }, + { 0x4ECF, 79602 }, + { 0x26C9, 79605 }, + { 0x26CA, 79608 }, + { 0x26CB, 79611 }, + { 0x26CC, 79617 }, + { 0x2698, 79623 }, + { 0x0C27, 79626 }, + { 0x0C2C, 79630 }, + { 0x0C28, 79634 }, + { 0x0C2B, 79638 }, + { 0x0C2A, 79642 }, + { 0x0C2F, 79646 }, + { 0x0C26, 79650 }, + { 0x0C2E, 79654 }, + { 0x0C2D, 79658 }, + { 0x0C29, 79662 }, + { 0x0C16, 79666 }, + { 0x0BDA, 79669 }, + { 0x0BD9, 79672 }, + { 0x0BD8, 79675 }, + { 0x0C20, 79678 }, + { 0x0C1B, 79683 }, + { 0x0C1D, 79688 }, + { 0x0C19, 79693 }, + { 0x0C31, 79698 }, + { 0x0C30, 79703 }, + { 0x0C1A, 79708 }, + { 0x0C1C, 79713 }, + { 0x0C18, 79718 }, + { 0x0C21, 79723 }, + { 0x0C1F, 79728 }, + { 0x0C23, 79732 }, + { 0x0C22, 79739 }, + { 0x0C24, 79745 }, + { 0x0C17, 79751 }, + { 0x0C25, 79755 }, + { 0x0C1E, 79759 }, + { 0x0C0B, 79763 }, + { 0x0BDB, 79767 }, + { 0x0BE7, 79770 }, + { 0x0BDF, 79773 }, + { 0x0BEA, 79776 }, + { 0x0BE1, 79779 }, + { 0x0BDC, 79782 }, + { 0x0BDD, 79785 }, + { 0x0BE9, 79788 }, + { 0x0BEC, 79791 }, + { 0x0C0E, 79794 }, + { 0x0C04, 79798 }, + { 0x0C12, 79802 }, + { 0x0BE8, 79806 }, + { 0x0C15, 79809 }, + { 0x0C13, 79812 }, + { 0x0BE0, 79815 }, + { 0x0BF1, 79818 }, + { 0x0C0A, 79822 }, + { 0x0BEB, 79825 }, + { 0x0C0D, 79828 }, + { 0x0C05, 79831 }, + { 0x0BF2, 79835 }, + { 0x0BF9, 79839 }, + { 0x0BFF, 79843 }, + { 0x0C10, 79847 }, + { 0x0BF8, 79851 }, + { 0x0BF7, 79856 }, + { 0x0BE2, 79860 }, + { 0x0C0F, 79863 }, + { 0x0C0C, 79866 }, + { 0x0BDE, 79869 }, + { 0x0BE5, 79872 }, + { 0x0BE3, 79875 }, + { 0x0BE6, 79878 }, + { 0x0BE4, 79881 }, + { 0x0C14, 79884 }, + { 0x0BFE, 79888 }, + { 0x0C11, 79892 }, + { 0x0C08, 79896 }, + { 0x0BF3, 79900 }, + { 0x0C02, 79904 }, + { 0x0BEF, 79908 }, + { 0x0BF5, 79912 }, + { 0x0BED, 79916 }, + { 0x0C06, 79920 }, + { 0x0C00, 79924 }, + { 0x0BFC, 79928 }, + { 0x0BFA, 79932 }, + { 0x0C09, 79936 }, + { 0x0BF4, 79940 }, + { 0x0C03, 79944 }, + { 0x0BF0, 79948 }, + { 0x0BF6, 79952 }, + { 0x0BEE, 79956 }, + { 0x0C07, 79960 }, + { 0x0C01, 79964 }, + { 0x0BFD, 79968 }, + { 0x0BFB, 79972 }, + { 0x4C70, 79976 }, + { 0x4C75, 79980 }, + { 0x4C71, 79984 }, + { 0x4C74, 79988 }, + { 0x4C73, 79992 }, + { 0x4C78, 79996 }, + { 0x4C77, 80000 }, + { 0x4C76, 80004 }, + { 0x4C72, 80008 }, + { 0x4C82, 80012 }, + { 0x4C83, 80017 }, + { 0x4C79, 80022 }, + { 0x4C7D, 80026 }, + { 0x4C7C, 80030 }, + { 0x4C7E, 80034 }, + { 0x4C80, 80038 }, + { 0x4C81, 80042 }, + { 0x4C7B, 80046 }, + { 0x4C7A, 80050 }, + { 0x4C7F, 80054 }, + { 0x0C32, 80058 }, + { 0x2366, 80061 }, + { 0x26C1, 80064 }, + { 0x26C3, 80069 }, + { 0x26C2, 80077 }, + { 0x26C4, 80082 }, + { 0x2786, 80090 }, + { 0x2788, 80096 }, + { 0x2683, 80102 }, + { 0x2684, 80105 }, + { 0x26D6, 80108 }, + { 0x26D8, 80110 }, + { 0x91ED, 80115 }, + { 0x91EE, 80121 }, + { 0x91BA, 80127 }, + { 0x91B6, 80131 }, + { 0x91B8, 80136 }, + { 0x91B7, 80144 }, + { 0x91B9, 80152 }, + { 0x94A0, 80160 }, + { 0x91BB, 80164 }, + { 0x91BD, 80168 }, + { 0x945B, 80173 }, + { 0x949E, 80182 }, + { 0x91C1, 80190 }, + { 0x91C0, 80194 }, + { 0x925F, 80199 }, + { 0x222F, 80201 }, + { 0x22F0, 80202 }, + { 0x4A54, 80205 }, + { 0x4A5F, 80208 }, + { 0x4A5B, 80211 }, + { 0x4A5C, 80214 }, + { 0x4A63, 80217 }, + { 0x4A55, 80220 }, + { 0x4A5E, 80223 }, + { 0x4A52, 80226 }, + { 0x4A64, 80229 }, + { 0x4A57, 80232 }, + { 0x4A59, 80235 }, + { 0x4A65, 80238 }, + { 0x4A62, 80241 }, + { 0x4A58, 80244 }, + { 0x4A51, 80247 }, + { 0x4A53, 80250 }, + { 0x4A60, 80253 }, + { 0x4A56, 80256 }, + { 0x4A5A, 80259 }, + { 0x4A5D, 80262 }, + { 0x4A61, 80265 }, + { 0x4A72, 80268 }, + { 0x4A75, 80271 }, + { 0x4A73, 80275 }, + { 0x4A74, 80278 }, + { 0x4A69, 80281 }, + { 0x4A67, 80285 }, + { 0x4A6A, 80289 }, + { 0x4A68, 80294 }, + { 0x4A6D, 80299 }, + { 0x4A6E, 80303 }, + { 0x4A6F, 80307 }, + { 0x4A70, 80312 }, + { 0x4A6B, 80316 }, + { 0x4A6C, 80320 }, + { 0x4A71, 80324 }, + { 0x4A66, 80328 }, + { 0x4A79, 80331 }, + { 0x4A76, 80337 }, + { 0x4A77, 80342 }, + { 0x4A7A, 80349 }, + { 0x4A78, 80355 }, + { 0x000F, 80360 }, + { 0x2622, 80361 }, + { 0x518B, 80364 }, + { 0x518A, 80371 }, + { 0x5189, 80380 }, + { 0x5186, 80390 }, + { 0x5188, 80393 }, + { 0x5185, 80396 }, + { 0x5187, 80399 }, + { 0x5182, 80403 }, + { 0x5181, 80406 }, + { 0x516F, 80409 }, + { 0x5170, 80412 }, + { 0x517A, 80415 }, + { 0x5178, 80420 }, + { 0x5175, 80425 }, + { 0x5176, 80430 }, + { 0x517D, 80435 }, + { 0x517B, 80440 }, + { 0x5179, 80445 }, + { 0x517C, 80450 }, + { 0x517F, 80455 }, + { 0x5180, 80460 }, + { 0x5177, 80465 }, + { 0x517E, 80470 }, + { 0x513F, 80475 }, + { 0x513C, 80479 }, + { 0x5140, 80483 }, + { 0x513E, 80487 }, + { 0x5142, 80491 }, + { 0x5143, 80495 }, + { 0x5141, 80499 }, + { 0x513D, 80503 }, + { 0x5145, 80507 }, + { 0x5144, 80512 }, + { 0x5146, 80517 }, + { 0x513B, 80521 }, + { 0x5165, 80524 }, + { 0x515D, 80527 }, + { 0x514C, 80530 }, + { 0x5158, 80533 }, + { 0x5149, 80536 }, + { 0x516D, 80539 }, + { 0x514E, 80542 }, + { 0x5147, 80545 }, + { 0x5168, 80548 }, + { 0x515F, 80551 }, + { 0x515A, 80554 }, + { 0x515B, 80557 }, + { 0x5167, 80560 }, + { 0x516C, 80563 }, + { 0x5156, 80566 }, + { 0x5169, 80569 }, + { 0x5166, 80572 }, + { 0x5164, 80575 }, + { 0x515E, 80578 }, + { 0x514D, 80581 }, + { 0x5153, 80584 }, + { 0x5159, 80587 }, + { 0x5162, 80590 }, + { 0x514A, 80593 }, + { 0x514F, 80596 }, + { 0x5148, 80599 }, + { 0x514B, 80602 }, + { 0x5155, 80605 }, + { 0x5150, 80608 }, + { 0x515C, 80611 }, + { 0x516A, 80614 }, + { 0x516B, 80617 }, + { 0x5157, 80620 }, + { 0x5160, 80623 }, + { 0x5151, 80626 }, + { 0x5163, 80629 }, + { 0x5154, 80632 }, + { 0x516E, 80635 }, + { 0x5161, 80638 }, + { 0x5152, 80641 }, + { 0x518C, 80644 }, + { 0x518D, 80647 }, + { 0x5184, 80650 }, + { 0x5183, 80652 }, + { 0x5172, 80655 }, + { 0x5171, 80659 }, + { 0x5174, 80663 }, + { 0x5173, 80667 }, + { 0x2373, 80671 }, + { 0x90BB, 80672 }, + { 0x90BC, 80673 }, + { 0x90BD, 80678 }, + { 0x90BA, 80683 }, + { 0x7C8D, 80687 }, + { 0x7C8E, 80690 }, + { 0x8E3C, 80693 }, + { 0x8E51, 80695 }, + { 0x8DF5, 80697 }, + { 0x8E3F, 80699 }, + { 0x8DF6, 80701 }, + { 0x8E41, 80703 }, + { 0x8E42, 80705 }, + { 0x8DF7, 80707 }, + { 0x8DF8, 80709 }, + { 0x8E44, 80711 }, + { 0x8E45, 80716 }, + { 0x8DFA, 80718 }, + { 0x8E8F, 80720 }, + { 0x8E90, 80724 }, + { 0x8E93, 80728 }, + { 0x8E7A, 80732 }, + { 0x8E7E, 80736 }, + { 0x8E84, 80740 }, + { 0x8E86, 80744 }, + { 0x8E82, 80748 }, + { 0x8E9F, 80752 }, + { 0x8E78, 80756 }, + { 0x8E94, 80760 }, + { 0x8E9A, 80764 }, + { 0x8E8B, 80768 }, + { 0x8EA0, 80772 }, + { 0x8E8A, 80776 }, + { 0x8E7B, 80780 }, + { 0x8E7D, 80784 }, + { 0x8E77, 80788 }, + { 0x8E92, 80792 }, + { 0x8E83, 80796 }, + { 0x8E76, 80800 }, + { 0x8E97, 80804 }, + { 0x8E8D, 80808 }, + { 0x8E95, 80812 }, + { 0x8E8E, 80816 }, + { 0x8E81, 80820 }, + { 0x8E85, 80824 }, + { 0x8E7F, 80828 }, + { 0x8E9D, 80832 }, + { 0x8E9C, 80836 }, + { 0x8E9B, 80840 }, + { 0x8E8C, 80844 }, + { 0x8E80, 80848 }, + { 0x8E88, 80852 }, + { 0x8E9E, 80856 }, + { 0x8E98, 80860 }, + { 0x8E99, 80864 }, + { 0x8E87, 80868 }, + { 0x8E7C, 80872 }, + { 0x8E89, 80876 }, + { 0x8E96, 80880 }, + { 0x8E91, 80884 }, + { 0x8EA1, 80888 }, + { 0x1EF8, 80892 }, + { 0x8E52, 80895 }, + { 0x22EB, 80897 }, + { 0x8E40, 80899 }, + { 0x8E4F, 80901 }, + { 0x8DF9, 80906 }, + { 0x8E55, 80908 }, + { 0x8E43, 80910 }, + { 0x8E48, 80912 }, + { 0x8E56, 80915 }, + { 0x8E57, 80917 }, + { 0x8E3D, 80919 }, + { 0x8E4B, 80921 }, + { 0x8E49, 80925 }, + { 0x2A22, 80928 }, + { 0x8E3E, 80932 }, + { 0x1EF5, 80934 }, + { 0x8E4A, 80936 }, + { 0x8E50, 80939 }, + { 0x8DDB, 80944 }, + { 0x8DDC, 80949 }, + { 0x8DDD, 80954 }, + { 0x8DDE, 80959 }, + { 0x8DDF, 80964 }, + { 0x8DE0, 80969 }, + { 0x8DE1, 80974 }, + { 0x8DE2, 80979 }, + { 0x8DE3, 80984 }, + { 0x8DE4, 80989 }, + { 0x8DE5, 80994 }, + { 0x8DE6, 80999 }, + { 0x8DE7, 81004 }, + { 0x8DE8, 81009 }, + { 0x8DE9, 81014 }, + { 0x8DEA, 81019 }, + { 0x8DEB, 81024 }, + { 0x8DEC, 81029 }, + { 0x8DED, 81034 }, + { 0x8DEE, 81039 }, + { 0x8DEF, 81044 }, + { 0x8DF0, 81049 }, + { 0x8DF1, 81054 }, + { 0x8DF2, 81059 }, + { 0x8DF3, 81064 }, + { 0x8DF4, 81069 }, + { 0x1EF6, 81074 }, + { 0x8E4C, 81076 }, + { 0x8E4E, 81080 }, + { 0x25F3, 81083 }, + { 0x8E46, 81086 }, + { 0x1EF7, 81089 }, + { 0x8E53, 81091 }, + { 0x25F0, 81093 }, + { 0x8E47, 81097 }, + { 0x25F4, 81100 }, + { 0x25F1, 81102 }, + { 0x23FB, 81106 }, + { 0x23FA, 81109 }, + { 0x2309, 81112 }, + { 0x25F2, 81114 }, + { 0x8E79, 81116 }, + { 0x8E75, 81119 }, + { 0x8E74, 81122 }, + { 0x8E54, 81125 }, + { 0x8E4D, 81127 }, + { 0x8F92, 81131 }, + { 0x9136, 81132 }, + { 0x923C, 81134 }, + { 0x7CC8, 81135 }, + { 0x7CCA, 81138 }, + { 0x7CC7, 81141 }, + { 0x7CC9, 81144 }, + { 0x9487, 81147 }, + { 0x8EB8, 81149 }, + { 0x8EB7, 81150 }, + { 0x5202, 81153 }, + { 0x5204, 81156 }, + { 0x5209, 81159 }, + { 0x5205, 81162 }, + { 0x5208, 81165 }, + { 0x5207, 81168 }, + { 0x520C, 81171 }, + { 0x5203, 81174 }, + { 0x520B, 81177 }, + { 0x520A, 81180 }, + { 0x5206, 81183 }, + { 0x51E8, 81186 }, + { 0x51F7, 81189 }, + { 0x51F6, 81192 }, + { 0x51EF, 81195 }, + { 0x51E3, 81198 }, + { 0x51EB, 81201 }, + { 0x51FC, 81204 }, + { 0x51E7, 81207 }, + { 0x51EE, 81210 }, + { 0x51EA, 81213 }, + { 0x51E5, 81216 }, + { 0x51F5, 81219 }, + { 0x51E1, 81222 }, + { 0x51E4, 81225 }, + { 0x51F0, 81228 }, + { 0x51FB, 81231 }, + { 0x51FA, 81234 }, + { 0x51E9, 81237 }, + { 0x51ED, 81240 }, + { 0x51F8, 81243 }, + { 0x51EC, 81246 }, + { 0x5201, 81249 }, + { 0x51F2, 81252 }, + { 0x51FD, 81255 }, + { 0x51E2, 81258 }, + { 0x51FF, 81261 }, + { 0x51F9, 81264 }, + { 0x5200, 81267 }, + { 0x51E6, 81270 }, + { 0x51F4, 81273 }, + { 0x51FE, 81276 }, + { 0x51F1, 81279 }, + { 0x51F3, 81282 }, + { 0x1E86, 81285 }, + { 0x8F7D, 81287 }, + { 0x903C, 81288 }, + { 0x9008, 81289 }, + { 0x148E, 81290 }, + { 0x148F, 81293 }, + { 0x148C, 81296 }, + { 0x148D, 81300 }, + { 0x147A, 81304 }, + { 0x147B, 81307 }, + { 0x147C, 81310 }, + { 0x1484, 81313 }, + { 0x1481, 81316 }, + { 0x147E, 81319 }, + { 0x148B, 81322 }, + { 0x147D, 81325 }, + { 0x1488, 81328 }, + { 0x1485, 81331 }, + { 0x1482, 81334 }, + { 0x1483, 81337 }, + { 0x1487, 81340 }, + { 0x148A, 81343 }, + { 0x1480, 81346 }, + { 0x1489, 81349 }, + { 0x1486, 81352 }, + { 0x147F, 81355 }, + { 0x1490, 81358 }, + { 0x948F, 81362 }, + { 0x9060, 81364 }, + { 0x27C1, 81366 }, + { 0x23CE, 81371 }, + { 0x27C3, 81375 }, + { 0x27C4, 81380 }, + { 0x27C2, 81385 }, + { 0x23CF, 81390 }, + { 0x22F4, 81394 }, + { 0x0D94, 81398 }, + { 0x0D95, 81402 }, + { 0x0D1A, 81409 }, + { 0x0D19, 81414 }, + { 0x0D15, 81419 }, + { 0x0D18, 81423 }, + { 0x0D17, 81428 }, + { 0x0CEE, 81433 }, + { 0x0D16, 81439 }, + { 0x0CE4, 81443 }, + { 0x0DA5, 81450 }, + { 0x0CE7, 81457 }, + { 0x0CE0, 81463 }, + { 0x0CDF, 81472 }, + { 0x0CDE, 81481 }, + { 0x0CF1, 81488 }, + { 0x0D12, 81492 }, + { 0x0D14, 81498 }, + { 0x0CEB, 81504 }, + { 0x0DA7, 81508 }, + { 0x0CED, 81512 }, + { 0x0CEF, 81517 }, + { 0x0CEA, 81522 }, + { 0x0D11, 81525 }, + { 0x0DA5, 81529 }, + { 0x0CE6, 81536 }, + { 0x0CE3, 81541 }, + { 0x0CF0, 81549 }, + { 0x0D13, 81557 }, + { 0x0DA6, 81565 }, + { 0x0CE5, 81572 }, + { 0x0CEC, 81576 }, + { 0x0D5D, 81580 }, + { 0x0CE2, 81583 }, + { 0x0DA9, 81590 }, + { 0x0D5C, 81599 }, + { 0x0CE1, 81602 }, + { 0x0DA8, 81609 }, + { 0x0DAE, 81618 }, + { 0x0DAF, 81623 }, + { 0x0CE9, 81628 }, + { 0x0CE8, 81633 }, + { 0x0D62, 81637 }, + { 0x0D63, 81642 }, + { 0x0D60, 81647 }, + { 0x0D5E, 81652 }, + { 0x0D1C, 81656 }, + { 0x0D5A, 81660 }, + { 0x0D5B, 81666 }, + { 0x0D1B, 81670 }, + { 0x0D61, 81674 }, + { 0x0CFA, 81678 }, + { 0x0DA4, 81683 }, + { 0x0DA3, 81688 }, + { 0x0CFB, 81694 }, + { 0x0CF7, 81699 }, + { 0x0CF9, 81704 }, + { 0x0CFC, 81709 }, + { 0x0CF8, 81715 }, + { 0x0D56, 81720 }, + { 0x0D57, 81726 }, + { 0x0D5F, 81730 }, + { 0x0D64, 81734 }, + { 0x0CFE, 81739 }, + { 0x0D03, 81742 }, + { 0x0CFF, 81745 }, + { 0x0D02, 81748 }, + { 0x0D01, 81751 }, + { 0x0D07, 81754 }, + { 0x0D0C, 81758 }, + { 0x0D08, 81762 }, + { 0x0D0B, 81766 }, + { 0x0D0A, 81770 }, + { 0x0D0F, 81774 }, + { 0x0D10, 81778 }, + { 0x0D0E, 81782 }, + { 0x0D0D, 81786 }, + { 0x0D09, 81790 }, + { 0x0D06, 81794 }, + { 0x0CFD, 81797 }, + { 0x0D05, 81800 }, + { 0x0D04, 81803 }, + { 0x0D00, 81806 }, + { 0x0D52, 81809 }, + { 0x0D4A, 81813 }, + { 0x0D54, 81817 }, + { 0x0D4C, 81821 }, + { 0x0D49, 81825 }, + { 0x0D53, 81829 }, + { 0x0D4B, 81833 }, + { 0x0D55, 81837 }, + { 0x0D4D, 81841 }, + { 0x0D50, 81845 }, + { 0x0D4E, 81850 }, + { 0x0D51, 81855 }, + { 0x0D4F, 81860 }, + { 0x0D58, 81865 }, + { 0x0D59, 81870 }, + { 0x0D44, 81875 }, + { 0x0D3C, 81878 }, + { 0x0D32, 81881 }, + { 0x0D22, 81884 }, + { 0x0D2D, 81887 }, + { 0x0D1F, 81890 }, + { 0x0D43, 81893 }, + { 0x0D24, 81896 }, + { 0x0D1D, 81899 }, + { 0x0D3F, 81902 }, + { 0x0D34, 81905 }, + { 0x0D2F, 81908 }, + { 0x0D30, 81911 }, + { 0x0D3E, 81914 }, + { 0x0D42, 81917 }, + { 0x0D2B, 81920 }, + { 0x0D39, 81923 }, + { 0x0D3D, 81926 }, + { 0x0D3B, 81929 }, + { 0x0D33, 81932 }, + { 0x0D23, 81935 }, + { 0x0D28, 81938 }, + { 0x0D2E, 81941 }, + { 0x0D37, 81944 }, + { 0x0D20, 81947 }, + { 0x0D1E, 81950 }, + { 0x0D47, 81953 }, + { 0x0D21, 81956 }, + { 0x0D2A, 81959 }, + { 0x0D25, 81962 }, + { 0x0D31, 81965 }, + { 0x0D48, 81968 }, + { 0x0D40, 81971 }, + { 0x0D41, 81974 }, + { 0x0D2C, 81977 }, + { 0x0D35, 81980 }, + { 0x0D26, 81983 }, + { 0x0D3A, 81986 }, + { 0x0D29, 81989 }, + { 0x0D38, 81992 }, + { 0x0D45, 81995 }, + { 0x0D36, 81998 }, + { 0x0D27, 82001 }, + { 0x0D46, 82004 }, + { 0x0D9F, 82008 }, + { 0x0DA2, 82012 }, + { 0x0DA1, 82018 }, + { 0x0DA0, 82024 }, + { 0x0D9B, 82030 }, + { 0x0D9D, 82034 }, + { 0x0D9A, 82040 }, + { 0x0D9E, 82044 }, + { 0x0D9C, 82048 }, + { 0x0CF2, 82052 }, + { 0x0CF3, 82057 }, + { 0x0CDD, 82062 }, + { 0x0D65, 82065 }, + { 0x0D66, 82071 }, + { 0x0D67, 82076 }, + { 0x0D8F, 82082 }, + { 0x0D87, 82086 }, + { 0x0D7D, 82090 }, + { 0x0D6D, 82094 }, + { 0x0D78, 82098 }, + { 0x0D6A, 82102 }, + { 0x0D8E, 82106 }, + { 0x0D6F, 82110 }, + { 0x0D68, 82114 }, + { 0x0D8A, 82118 }, + { 0x0D7F, 82122 }, + { 0x0D7A, 82126 }, + { 0x0D7B, 82130 }, + { 0x0D89, 82134 }, + { 0x0D8D, 82138 }, + { 0x0D76, 82142 }, + { 0x0D84, 82146 }, + { 0x0D88, 82150 }, + { 0x0D86, 82154 }, + { 0x0D7E, 82158 }, + { 0x0D6E, 82162 }, + { 0x0D73, 82166 }, + { 0x0D79, 82170 }, + { 0x0D82, 82174 }, + { 0x0D6B, 82178 }, + { 0x0D69, 82182 }, + { 0x0D6C, 82186 }, + { 0x0D75, 82190 }, + { 0x0D70, 82194 }, + { 0x0D7C, 82198 }, + { 0x0D8B, 82202 }, + { 0x0D8C, 82206 }, + { 0x0D77, 82210 }, + { 0x0D80, 82214 }, + { 0x0D71, 82218 }, + { 0x0D85, 82222 }, + { 0x0D74, 82226 }, + { 0x0D83, 82230 }, + { 0x0D90, 82234 }, + { 0x0D81, 82238 }, + { 0x0D72, 82242 }, + { 0x0D93, 82246 }, + { 0x0D91, 82251 }, + { 0x0D92, 82256 }, + { 0x0CF4, 82261 }, + { 0x0CF6, 82268 }, + { 0x0CF5, 82273 }, + { 0x0D98, 82278 }, + { 0x0D99, 82283 }, + { 0x0D96, 82288 }, + { 0x0D97, 82293 }, + { 0x4E7E, 82298 }, + { 0x4E37, 82300 }, + { 0x4E7A, 82302 }, + { 0x4E79, 82305 }, + { 0x4E78, 82308 }, + { 0x4E77, 82311 }, + { 0x4E7B, 82314 }, + { 0x4E76, 82317 }, + { 0x4E80, 82320 }, + { 0x4E85, 82323 }, + { 0x4E81, 82326 }, + { 0x4E84, 82329 }, + { 0x4E83, 82332 }, + { 0x4E88, 82335 }, + { 0x4E7F, 82338 }, + { 0x4E87, 82341 }, + { 0x4E86, 82344 }, + { 0x4E82, 82347 }, + { 0x4E7C, 82350 }, + { 0x4E70, 82352 }, + { 0x4E68, 82356 }, + { 0x4E73, 82360 }, + { 0x4E6A, 82364 }, + { 0x4E67, 82368 }, + { 0x4E72, 82372 }, + { 0x4E75, 82376 }, + { 0x4E69, 82380 }, + { 0x4E6B, 82384 }, + { 0x4E71, 82388 }, + { 0x4E74, 82393 }, + { 0x4E6E, 82398 }, + { 0x4E6C, 82403 }, + { 0x4E6F, 82408 }, + { 0x4E6D, 82413 }, + { 0x4E38, 82418 }, + { 0x4E42, 82421 }, + { 0x4E3A, 82424 }, + { 0x4E44, 82427 }, + { 0x4E3C, 82430 }, + { 0x4E39, 82433 }, + { 0x4E43, 82436 }, + { 0x4E45, 82439 }, + { 0x4E5C, 82442 }, + { 0x4E4B, 82445 }, + { 0x4E57, 82448 }, + { 0x4E48, 82451 }, + { 0x4E66, 82454 }, + { 0x4E3B, 82457 }, + { 0x4E4D, 82460 }, + { 0x4E46, 82463 }, + { 0x4E61, 82466 }, + { 0x4E5E, 82469 }, + { 0x4E59, 82472 }, + { 0x4E5A, 82475 }, + { 0x4E60, 82478 }, + { 0x4E65, 82481 }, + { 0x4E55, 82484 }, + { 0x4E3D, 82487 }, + { 0x4E62, 82490 }, + { 0x4E5F, 82493 }, + { 0x4E5D, 82496 }, + { 0x4E4C, 82499 }, + { 0x4E52, 82502 }, + { 0x4E58, 82505 }, + { 0x4E49, 82508 }, + { 0x4E4E, 82511 }, + { 0x4E47, 82514 }, + { 0x4E4A, 82517 }, + { 0x4E54, 82520 }, + { 0x4E4F, 82523 }, + { 0x4E5B, 82526 }, + { 0x4E63, 82529 }, + { 0x4E64, 82532 }, + { 0x4E56, 82535 }, + { 0x4E50, 82538 }, + { 0x4E53, 82541 }, + { 0x4E51, 82544 }, + { 0x4E40, 82547 }, + { 0x4E3E, 82551 }, + { 0x4E41, 82555 }, + { 0x4E3F, 82559 }, + { 0x4E7D, 82563 }, + { 0x951E, 82566 }, + { 0x924F, 82567 }, + { 0x90E4, 82568 }, + { 0x225E, 82570 }, + { 0x225D, 82573 }, + { 0x2260, 82576 }, + { 0x2263, 82579 }, + { 0x2261, 82582 }, + { 0x225C, 82585 }, + { 0x225F, 82588 }, + { 0x2262, 82591 }, + { 0x8F6D, 82594 }, + { 0x9471, 82595 }, + { 0x1D33, 82597 }, + { 0x90B3, 82600 }, + { 0x94B2, 82603 }, + { 0x1DF6, 82605 }, + { 0x1DE8, 82609 }, + { 0x253E, 82611 }, + { 0x96B9, 82615 }, + { 0x1DFC, 82622 }, + { 0x1E07, 82626 }, + { 0x1E08, 82631 }, + { 0x9395, 82636 }, + { 0x938D, 82642 }, + { 0x9399, 82648 }, + { 0x1E35, 82654 }, + { 0x9391, 82659 }, + { 0x940B, 82665 }, + { 0x2535, 82670 }, + { 0x939D, 82675 }, + { 0x1E1C, 82680 }, + { 0x2732, 82686 }, + { 0x27B3, 82689 }, + { 0x93CD, 82694 }, + { 0x93C9, 82697 }, + { 0x1E3E, 82701 }, + { 0x1E42, 82704 }, + { 0x1E44, 82709 }, + { 0x1E43, 82717 }, + { 0x1E41, 82725 }, + { 0x27E1, 82730 }, + { 0x9407, 82738 }, + { 0x1E45, 82744 }, + { 0x1E46, 82748 }, + { 0x2A0B, 82754 }, + { 0x1E38, 82756 }, + { 0x1E28, 82759 }, + { 0x1E1F, 82762 }, + { 0x9220, 82765 }, + { 0x2536, 82767 }, + { 0x2584, 82770 }, + { 0x258C, 82777 }, + { 0x258F, 82784 }, + { 0x259A, 82795 }, + { 0x2580, 82806 }, + { 0x2588, 82813 }, + { 0x1E16, 82820 }, + { 0x1E15, 82825 }, + { 0x93C1, 82830 }, + { 0x9403, 82833 }, + { 0x241C, 82836 }, + { 0x93C5, 82839 }, + { 0x93D1, 82842 }, + { 0x2575, 82845 }, + { 0x2816, 82851 }, + { 0x93BD, 82857 }, + { 0x278D, 82860 }, + { 0x279D, 82863 }, + { 0x93B1, 82868 }, + { 0x27CB, 82874 }, + { 0x27CC, 82881 }, + { 0x93B9, 82888 }, + { 0x93B5, 82895 }, + { 0x27A5, 82901 }, + { 0x93AD, 82908 }, + { 0x93A9, 82914 }, + { 0x27AB, 82920 }, + { 0x2797, 82928 }, + { 0x27AF, 82932 }, + { 0x9509, 82936 }, + { 0x2338, 82937 }, + { 0x8EBE, 82939 }, + { 0x22CC, 82940 }, + { 0x9045, 82942 }, + { 0x91BC, 82943 }, + { 0x91D2, 82945 }, + { 0x8F34, 82947 }, + { 0x2339, 82949 }, + { 0x9585, 82951 }, + { 0x9587, 82954 }, + { 0x9586, 82957 }, + { 0x9582, 82960 }, + { 0x9588, 82963 }, + { 0x9584, 82966 }, + { 0x9583, 82969 }, + { 0x958C, 82972 }, + { 0x958E, 82975 }, + { 0x958D, 82978 }, + { 0x9589, 82981 }, + { 0x958F, 82984 }, + { 0x958B, 82987 }, + { 0x958A, 82990 }, + { 0x949F, 82993 }, + { 0x1CEC, 82995 }, + { 0x1CEA, 82999 }, + { 0x9599, 83002 }, + { 0x2334, 83004 }, + { 0x929B, 83005 }, + { 0x929A, 83007 }, + { 0x8F7B, 83009 }, + { 0x1D86, 83011 }, + { 0x227E, 83013 }, + { 0x0540, 83014 }, + { 0x053C, 83017 }, + { 0x0510, 83020 }, + { 0x0521, 83022 }, + { 0x0534, 83026 }, + { 0x0517, 83030 }, + { 0x051A, 83034 }, + { 0x051B, 83038 }, + { 0x0523, 83042 }, + { 0x0524, 83046 }, + { 0x0538, 83050 }, + { 0x052F, 83054 }, + { 0x051C, 83058 }, + { 0x052B, 83062 }, + { 0x0528, 83066 }, + { 0x053B, 83070 }, + { 0x0519, 83076 }, + { 0x0514, 83080 }, + { 0x0515, 83084 }, + { 0x052C, 83088 }, + { 0x0518, 83092 }, + { 0x0539, 83096 }, + { 0x0516, 83100 }, + { 0x051E, 83104 }, + { 0x0537, 83108 }, + { 0x0522, 83112 }, + { 0x0527, 83116 }, + { 0x0529, 83120 }, + { 0x052D, 83124 }, + { 0x0533, 83128 }, + { 0x0530, 83132 }, + { 0x052A, 83136 }, + { 0x0531, 83140 }, + { 0x0520, 83144 }, + { 0x051D, 83148 }, + { 0x0526, 83152 }, + { 0x0525, 83156 }, + { 0x052E, 83160 }, + { 0x051F, 83164 }, + { 0x0536, 83168 }, + { 0x0532, 83172 }, + { 0x0535, 83176 }, + { 0x0513, 83180 }, + { 0x053A, 83185 }, + { 0x3B70, 83190 }, + { 0x3B71, 83195 }, + { 0x3B6F, 83200 }, + { 0x3B73, 83205 }, + { 0x3B72, 83210 }, + { 0x053D, 83215 }, + { 0x04F3, 83217 }, + { 0x0506, 83221 }, + { 0x04E9, 83225 }, + { 0x04EC, 83229 }, + { 0x04ED, 83233 }, + { 0x04F5, 83237 }, + { 0x04F6, 83241 }, + { 0x050A, 83245 }, + { 0x0501, 83249 }, + { 0x04EE, 83253 }, + { 0x04FD, 83257 }, + { 0x04FA, 83261 }, + { 0x04EB, 83265 }, + { 0x04E6, 83269 }, + { 0x04E7, 83273 }, + { 0x04FE, 83277 }, + { 0x04EA, 83281 }, + { 0x050B, 83285 }, + { 0x04E8, 83289 }, + { 0x04F0, 83293 }, + { 0x0509, 83297 }, + { 0x04F4, 83301 }, + { 0x04F9, 83305 }, + { 0x04FB, 83309 }, + { 0x04FF, 83313 }, + { 0x0505, 83317 }, + { 0x0502, 83321 }, + { 0x04FC, 83325 }, + { 0x0503, 83329 }, + { 0x04F2, 83333 }, + { 0x04EF, 83337 }, + { 0x04F8, 83341 }, + { 0x04F7, 83345 }, + { 0x0500, 83349 }, + { 0x04F1, 83353 }, + { 0x0508, 83357 }, + { 0x0504, 83361 }, + { 0x0507, 83365 }, + { 0x050E, 83369 }, + { 0x050C, 83372 }, + { 0x0511, 83378 }, + { 0x050D, 83381 }, + { 0x050F, 83383 }, + { 0x0512, 83386 }, + { 0x000A, 83389 }, + { 0x1E6E, 83390 }, + { 0x1CC2, 83392 }, + { 0x9012, 83393 }, + { 0x8FDE, 83395 }, + { 0x9484, 83397 }, + { 0x17FE, 83399 }, + { 0x17BA, 83402 }, + { 0x17BB, 83406 }, + { 0x17BE, 83410 }, + { 0x17BC, 83413 }, + { 0x17BD, 83416 }, + { 0x17EE, 83419 }, + { 0x1817, 83422 }, + { 0x1818, 83425 }, + { 0x1816, 83428 }, + { 0x180A, 83431 }, + { 0x180F, 83434 }, + { 0x180B, 83437 }, + { 0x180E, 83440 }, + { 0x180D, 83443 }, + { 0x1812, 83446 }, + { 0x1809, 83449 }, + { 0x1811, 83452 }, + { 0x1810, 83455 }, + { 0x180C, 83458 }, + { 0x1813, 83461 }, + { 0x1838, 83463 }, + { 0x1836, 83466 }, + { 0x17F6, 83469 }, + { 0x17F7, 83474 }, + { 0x17F4, 83480 }, + { 0x17F5, 83485 }, + { 0x17F0, 83491 }, + { 0x17F1, 83495 }, + { 0x17F2, 83500 }, + { 0x17F3, 83504 }, + { 0x17FC, 83509 }, + { 0x17FD, 83513 }, + { 0x17F8, 83518 }, + { 0x17F9, 83522 }, + { 0x17FB, 83527 }, + { 0x17FA, 83533 }, + { 0x17EF, 83538 }, + { 0x1815, 83542 }, + { 0x17E3, 83544 }, + { 0x17E4, 83547 }, + { 0x17D2, 83551 }, + { 0x17D3, 83554 }, + { 0x17DE, 83558 }, + { 0x17DF, 83561 }, + { 0x17D9, 83565 }, + { 0x17DA, 83570 }, + { 0x1802, 83575 }, + { 0x17CF, 83579 }, + { 0x17D0, 83582 }, + { 0x17ED, 83586 }, + { 0x17D4, 83589 }, + { 0x17D5, 83592 }, + { 0x17CD, 83596 }, + { 0x17CE, 83599 }, + { 0x17E8, 83603 }, + { 0x17C7, 83606 }, + { 0x17C8, 83610 }, + { 0x17E5, 83615 }, + { 0x17E0, 83618 }, + { 0x17DB, 83621 }, + { 0x17E1, 83625 }, + { 0x17E2, 83628 }, + { 0x17E7, 83632 }, + { 0x17C5, 83635 }, + { 0x17C6, 83639 }, + { 0x17EC, 83644 }, + { 0x17EA, 83647 }, + { 0x17EB, 83651 }, + { 0x17DC, 83655 }, + { 0x17DD, 83658 }, + { 0x17D7, 83662 }, + { 0x17D8, 83666 }, + { 0x1803, 83671 }, + { 0x17E9, 83675 }, + { 0x17E6, 83678 }, + { 0x17FF, 83681 }, + { 0x17D1, 83685 }, + { 0x17D6, 83688 }, + { 0x1804, 83691 }, + { 0x1800, 83695 }, + { 0x1801, 83699 }, + { 0x17BF, 83703 }, + { 0x17C0, 83706 }, + { 0x17C9, 83710 }, + { 0x17C1, 83713 }, + { 0x17C2, 83716 }, + { 0x17CB, 83720 }, + { 0x17CC, 83723 }, + { 0x17C3, 83727 }, + { 0x17C4, 83730 }, + { 0x17CA, 83734 }, + { 0x1805, 83737 }, + { 0x1806, 83741 }, + { 0x1814, 83745 }, + { 0x1837, 83747 }, + { 0x181D, 83750 }, + { 0x1823, 83754 }, + { 0x181E, 83759 }, + { 0x181B, 83764 }, + { 0x181F, 83768 }, + { 0x181A, 83772 }, + { 0x181C, 83776 }, + { 0x1820, 83780 }, + { 0x1822, 83784 }, + { 0x1821, 83788 }, + { 0x182C, 83792 }, + { 0x182B, 83797 }, + { 0x1825, 83802 }, + { 0x1824, 83807 }, + { 0x1827, 83812 }, + { 0x182A, 83817 }, + { 0x1826, 83824 }, + { 0x1829, 83829 }, + { 0x1828, 83836 }, + { 0x1831, 83841 }, + { 0x1835, 83847 }, + { 0x1832, 83853 }, + { 0x1833, 83859 }, + { 0x1834, 83865 }, + { 0x182E, 83871 }, + { 0x182D, 83877 }, + { 0x1830, 83883 }, + { 0x182F, 83889 }, + { 0x1807, 83895 }, + { 0x1808, 83899 }, + { 0x1819, 83903 }, + { 0x9067, 83905 }, + { 0x9069, 83909 }, + { 0x906A, 83913 }, + { 0x9068, 83917 }, + { 0x22EA, 83921 }, + { 0x94F1, 83922 }, + { 0x8F35, 83924 }, + { 0x8FD4, 83926 }, + { 0x90C9, 83927 }, + { 0x9084, 83928 }, + { 0x2D5E, 83930 }, + { 0x2D5A, 83934 }, + { 0x2D59, 83938 }, + { 0x2D57, 83942 }, + { 0x2D58, 83946 }, + { 0x2CBF, 83950 }, + { 0x2CAA, 83953 }, + { 0x2CBD, 83956 }, + { 0x2CAE, 83959 }, + { 0x2CC1, 83962 }, + { 0x2CAD, 83965 }, + { 0x2CB2, 83968 }, + { 0x2CB4, 83971 }, + { 0x2CCC, 83974 }, + { 0x2CB5, 83977 }, + { 0x2CB3, 83980 }, + { 0x2CB1, 83983 }, + { 0x2CAC, 83986 }, + { 0x2CB0, 83989 }, + { 0x2CC0, 83992 }, + { 0x2CD3, 83995 }, + { 0x2CAB, 84001 }, + { 0x2CB6, 84004 }, + { 0x2CBB, 84007 }, + { 0x2CBE, 84010 }, + { 0x2CAF, 84013 }, + { 0x2CCD, 84016 }, + { 0x2CCF, 84019 }, + { 0x2CB7, 84022 }, + { 0x2CBC, 84025 }, + { 0x2D62, 84028 }, + { 0x2CC3, 84031 }, + { 0x2D53, 84034 }, + { 0x2CC7, 84037 }, + { 0x2CC5, 84040 }, + { 0x2D43, 84043 }, + { 0x2CB9, 84046 }, + { 0x2D47, 84049 }, + { 0x2CC2, 84052 }, + { 0x2CC4, 84055 }, + { 0x2CC8, 84058 }, + { 0x2CCB, 84061 }, + { 0x2D5B, 84064 }, + { 0x2CD1, 84067 }, + { 0x2D46, 84070 }, + { 0x2D5F, 84073 }, + { 0x2CD2, 84076 }, + { 0x2D4F, 84079 }, + { 0x2D4B, 84082 }, + { 0x2CCE, 84085 }, + { 0x2D45, 84088 }, + { 0x2D60, 84091 }, + { 0x2D5C, 84094 }, + { 0x2CD0, 84097 }, + { 0x2CD4, 84100 }, + { 0x2D61, 84103 }, + { 0x2D54, 84106 }, + { 0x2D49, 84109 }, + { 0x2CC6, 84112 }, + { 0x2CBA, 84115 }, + { 0x2CB8, 84118 }, + { 0x2D44, 84121 }, + { 0x2D5D, 84124 }, + { 0x2CC9, 84127 }, + { 0x2D4C, 84130 }, + { 0x2CCA, 84133 }, + { 0x2D48, 84136 }, + { 0x2D4D, 84139 }, + { 0x2D50, 84142 }, + { 0x2D55, 84145 }, + { 0x2D4A, 84148 }, + { 0x2D4E, 84151 }, + { 0x2D51, 84154 }, + { 0x2D52, 84157 }, + { 0x2D56, 84160 }, + { 0x9494, 84163 }, + { 0x171B, 84164 }, + { 0x1717, 84168 }, + { 0x1715, 84172 }, + { 0x1718, 84176 }, + { 0x1716, 84180 }, + { 0x1719, 84184 }, + { 0x1713, 84188 }, + { 0x1703, 84191 }, + { 0x170A, 84194 }, + { 0x1707, 84197 }, + { 0x16FF, 84200 }, + { 0x1714, 84203 }, + { 0x170B, 84206 }, + { 0x16FE, 84209 }, + { 0x1710, 84212 }, + { 0x1704, 84215 }, + { 0x1708, 84218 }, + { 0x1702, 84221 }, + { 0x170F, 84224 }, + { 0x1712, 84227 }, + { 0x1706, 84230 }, + { 0x1711, 84233 }, + { 0x170E, 84236 }, + { 0x1705, 84239 }, + { 0x1700, 84242 }, + { 0x1709, 84245 }, + { 0x170C, 84248 }, + { 0x1701, 84251 }, + { 0x170D, 84254 }, + { 0x171A, 84257 }, + { 0x8F8A, 84259 }, + { 0x911E, 84261 }, + { 0x911F, 84262 }, + { 0x21FA, 84266 }, + { 0x2250, 84267 }, + { 0x9078, 84268 }, + { 0x118E, 84269 }, + { 0x1225, 84272 }, + { 0x1185, 84275 }, + { 0x12E1, 84278 }, + { 0x1187, 84281 }, + { 0x1207, 84284 }, + { 0x126E, 84287 }, + { 0x123F, 84290 }, + { 0x1254, 84293 }, + { 0x1189, 84296 }, + { 0x11CD, 84299 }, + { 0x1309, 84302 }, + { 0x12D4, 84305 }, + { 0x1289, 84308 }, + { 0x11EA, 84311 }, + { 0x12C2, 84314 }, + { 0x118F, 84317 }, + { 0x11A0, 84320 }, + { 0x11B2, 84323 }, + { 0x15DF, 84326 }, + { 0x1214, 84329 }, + { 0x120D, 84332 }, + { 0x120F, 84335 }, + { 0x1211, 84338 }, + { 0x11AF, 84341 }, + { 0x12DD, 84344 }, + { 0x12D7, 84347 }, + { 0x12D9, 84350 }, + { 0x12DB, 84353 }, + { 0x1301, 84356 }, + { 0x1188, 84359 }, + { 0x11B0, 84362 }, + { 0x11F6, 84365 }, + { 0x11EF, 84368 }, + { 0x11F1, 84371 }, + { 0x11F3, 84374 }, + { 0x1208, 84377 }, + { 0x125E, 84380 }, + { 0x1257, 84383 }, + { 0x132A, 84386 }, + { 0x1259, 84389 }, + { 0x125B, 84392 }, + { 0x122E, 84395 }, + { 0x1227, 84398 }, + { 0x1241, 84401 }, + { 0x1229, 84404 }, + { 0x122B, 84407 }, + { 0x124B, 84410 }, + { 0x1244, 84413 }, + { 0x1319, 84416 }, + { 0x1256, 84419 }, + { 0x1246, 84422 }, + { 0x1248, 84425 }, + { 0x11B1, 84428 }, + { 0x118A, 84431 }, + { 0x15DE, 84434 }, + { 0x11BC, 84437 }, + { 0x11B3, 84440 }, + { 0x11B5, 84443 }, + { 0x11B7, 84446 }, + { 0x1307, 84449 }, + { 0x1303, 84452 }, + { 0x1305, 84455 }, + { 0x12CF, 84458 }, + { 0x12C6, 84461 }, + { 0x12CA, 84464 }, + { 0x12CC, 84467 }, + { 0x1278, 84470 }, + { 0x1271, 84473 }, + { 0x12A9, 84476 }, + { 0x1273, 84479 }, + { 0x1275, 84482 }, + { 0x128B, 84485 }, + { 0x11D9, 84488 }, + { 0x11D0, 84491 }, + { 0x12EE, 84494 }, + { 0x11D2, 84497 }, + { 0x11D4, 84500 }, + { 0x119B, 84503 }, + { 0x1190, 84506 }, + { 0x1192, 84509 }, + { 0x1196, 84512 }, + { 0x12B1, 84515 }, + { 0x12AA, 84518 }, + { 0x12AC, 84521 }, + { 0x12AE, 84524 }, + { 0x1186, 84527 }, + { 0x15E0, 84530 }, + { 0x1215, 84533 }, + { 0x13F1, 84536 }, + { 0x1210, 84540 }, + { 0x1212, 84543 }, + { 0x1220, 84546 }, + { 0x1216, 84549 }, + { 0x1218, 84552 }, + { 0x121C, 84555 }, + { 0x12DE, 84558 }, + { 0x12DA, 84561 }, + { 0x12DC, 84564 }, + { 0x11F7, 84567 }, + { 0x15E6, 84570 }, + { 0x11F2, 84573 }, + { 0x11F4, 84576 }, + { 0x1202, 84579 }, + { 0x11F8, 84582 }, + { 0x11FA, 84585 }, + { 0x11FE, 84588 }, + { 0x125F, 84591 }, + { 0x15EB, 84594 }, + { 0x1328, 84597 }, + { 0x1324, 84600 }, + { 0x1326, 84603 }, + { 0x125A, 84606 }, + { 0x125C, 84609 }, + { 0x126A, 84612 }, + { 0x1260, 84615 }, + { 0x1262, 84618 }, + { 0x1266, 84621 }, + { 0x122F, 84624 }, + { 0x15E8, 84627 }, + { 0x122A, 84630 }, + { 0x122C, 84633 }, + { 0x123A, 84636 }, + { 0x1230, 84639 }, + { 0x1232, 84642 }, + { 0x1236, 84645 }, + { 0x124C, 84648 }, + { 0x15EA, 84651 }, + { 0x1317, 84654 }, + { 0x1313, 84657 }, + { 0x1315, 84660 }, + { 0x1247, 84663 }, + { 0x131A, 84666 }, + { 0x1249, 84669 }, + { 0x15E9, 84672 }, + { 0x124F, 84675 }, + { 0x124D, 84678 }, + { 0x15F4, 84681 }, + { 0x15F8, 84684 }, + { 0x11BD, 84687 }, + { 0x15E3, 84690 }, + { 0x11B6, 84693 }, + { 0x11B8, 84696 }, + { 0x15E2, 84699 }, + { 0x11C8, 84702 }, + { 0x11BE, 84705 }, + { 0x11C0, 84708 }, + { 0x11C4, 84711 }, + { 0x1308, 84714 }, + { 0x13F3, 84717 }, + { 0x1304, 84720 }, + { 0x1306, 84723 }, + { 0x12D0, 84726 }, + { 0x15F3, 84729 }, + { 0x12CB, 84732 }, + { 0x12CD, 84735 }, + { 0x1601, 84738 }, + { 0x15FD, 84741 }, + { 0x15FF, 84744 }, + { 0x1279, 84747 }, + { 0x15ED, 84750 }, + { 0x1299, 84753 }, + { 0x1294, 84756 }, + { 0x1295, 84759 }, + { 0x1297, 84762 }, + { 0x1274, 84765 }, + { 0x1276, 84768 }, + { 0x15EC, 84771 }, + { 0x519D, 84774 }, + { 0x519A, 84777 }, + { 0x519B, 84780 }, + { 0x519C, 84783 }, + { 0x1284, 84786 }, + { 0x127A, 84789 }, + { 0x127C, 84792 }, + { 0x1280, 84795 }, + { 0x11DA, 84798 }, + { 0x15E5, 84801 }, + { 0x12EA, 84804 }, + { 0x12E2, 84807 }, + { 0x12E4, 84810 }, + { 0x12E8, 84813 }, + { 0x11D3, 84816 }, + { 0x11D5, 84819 }, + { 0x11EE, 84822 }, + { 0x11EB, 84825 }, + { 0x12F3, 84828 }, + { 0x11EC, 84831 }, + { 0x11ED, 84834 }, + { 0x11E5, 84837 }, + { 0x11DB, 84840 }, + { 0x11DD, 84843 }, + { 0x11E1, 84846 }, + { 0x12F7, 84849 }, + { 0x12F4, 84852 }, + { 0x12F5, 84855 }, + { 0x12F6, 84858 }, + { 0x119D, 84861 }, + { 0x15E1, 84864 }, + { 0x1194, 84867 }, + { 0x1198, 84870 }, + { 0x12B2, 84873 }, + { 0x15F2, 84876 }, + { 0x12AD, 84879 }, + { 0x12AF, 84882 }, + { 0x15F1, 84885 }, + { 0x12BD, 84888 }, + { 0x12B3, 84891 }, + { 0x12B5, 84894 }, + { 0x12B9, 84897 }, + { 0x120E, 84900 }, + { 0x1222, 84903 }, + { 0x121A, 84906 }, + { 0x121E, 84909 }, + { 0x12D8, 84912 }, + { 0x13F2, 84915 }, + { 0x12DF, 84919 }, + { 0x11F0, 84922 }, + { 0x1204, 84925 }, + { 0x15E7, 84928 }, + { 0x11FC, 84931 }, + { 0x1200, 84934 }, + { 0x1258, 84937 }, + { 0x1329, 84940 }, + { 0x1325, 84943 }, + { 0x1327, 84946 }, + { 0x126C, 84949 }, + { 0x1264, 84952 }, + { 0x1268, 84955 }, + { 0x1228, 84958 }, + { 0x123C, 84961 }, + { 0x1234, 84964 }, + { 0x1238, 84967 }, + { 0x1245, 84970 }, + { 0x1318, 84973 }, + { 0x13F4, 84976 }, + { 0x1314, 84979 }, + { 0x1316, 84982 }, + { 0x13F9, 84985 }, + { 0x13F5, 84988 }, + { 0x13F7, 84991 }, + { 0x1251, 84994 }, + { 0x15F6, 84997 }, + { 0x15FA, 85000 }, + { 0x11B4, 85003 }, + { 0x11CA, 85006 }, + { 0x11C2, 85009 }, + { 0x11C6, 85012 }, + { 0x15E4, 85015 }, + { 0x1302, 85018 }, + { 0x12C9, 85021 }, + { 0x12D2, 85024 }, + { 0x15FC, 85027 }, + { 0x15FE, 85030 }, + { 0x1600, 85033 }, + { 0x1272, 85036 }, + { 0x129A, 85039 }, + { 0x15EF, 85042 }, + { 0x1296, 85045 }, + { 0x1298, 85048 }, + { 0x15EE, 85051 }, + { 0x12A5, 85054 }, + { 0x129B, 85057 }, + { 0x129D, 85060 }, + { 0x12A1, 85063 }, + { 0x1286, 85066 }, + { 0x127E, 85069 }, + { 0x1282, 85072 }, + { 0x11D1, 85075 }, + { 0x12EB, 85078 }, + { 0x12E6, 85081 }, + { 0x12E9, 85084 }, + { 0x1612, 85087 }, + { 0x1611, 85090 }, + { 0x130D, 85093 }, + { 0x130A, 85096 }, + { 0x130B, 85099 }, + { 0x130C, 85102 }, + { 0x12F2, 85105 }, + { 0x12EF, 85108 }, + { 0x12F0, 85111 }, + { 0x12F1, 85114 }, + { 0x11E7, 85117 }, + { 0x11DF, 85120 }, + { 0x11E3, 85123 }, + { 0x12AB, 85126 }, + { 0x12BF, 85129 }, + { 0x12B7, 85132 }, + { 0x12BB, 85135 }, + { 0x11A6, 85138 }, + { 0x11AE, 85144 }, + { 0x11AD, 85149 }, + { 0x11A8, 85153 }, + { 0x11A3, 85157 }, + { 0x11A4, 85161 }, + { 0x11A7, 85165 }, + { 0x11AC, 85171 }, + { 0x160C, 85177 }, + { 0x11A5, 85182 }, + { 0x11A9, 85188 }, + { 0x11AA, 85193 }, + { 0x11AB, 85200 }, + { 0x160D, 85205 }, + { 0x1312, 85210 }, + { 0x13FA, 85213 }, + { 0x13F6, 85216 }, + { 0x13F8, 85219 }, + { 0x12A7, 85222 }, + { 0x129F, 85225 }, + { 0x12A3, 85228 }, + { 0x15F0, 85231 }, + { 0x12EC, 85234 }, + { 0x1617, 85237 }, + { 0x1616, 85240 }, + { 0x1615, 85243 }, + { 0x1614, 85246 }, + { 0x1613, 85249 }, + { 0x1621, 85252 }, + { 0x1622, 85257 }, + { 0x1184, 85262 }, + { 0x1270, 85265 }, + { 0x12D6, 85269 }, + { 0x12E3, 85273 }, + { 0x12E5, 85277 }, + { 0x12E7, 85281 }, + { 0x12C7, 85285 }, + { 0x160E, 85289 }, + { 0x1243, 85293 }, + { 0x1347, 85297 }, + { 0x1344, 85301 }, + { 0x1345, 85305 }, + { 0x1346, 85309 }, + { 0x139E, 85313 }, + { 0x1399, 85317 }, + { 0x1226, 85321 }, + { 0x12C5, 85325 }, + { 0x161A, 85329 }, + { 0x161F, 85333 }, + { 0x131E, 85337 }, + { 0x131B, 85341 }, + { 0x131C, 85345 }, + { 0x131D, 85349 }, + { 0x1619, 85353 }, + { 0x1618, 85357 }, + { 0x11A1, 85361 }, + { 0x118B, 85365 }, + { 0x1213, 85369 }, + { 0x11F5, 85373 }, + { 0x125D, 85377 }, + { 0x122D, 85381 }, + { 0x124A, 85385 }, + { 0x11B9, 85389 }, + { 0x1277, 85393 }, + { 0x11D6, 85397 }, + { 0x12B0, 85401 }, + { 0x11CC, 85405 }, + { 0x1333, 85409 }, + { 0x11CF, 85413 }, + { 0x118D, 85417 }, + { 0x1372, 85421 }, + { 0x13CA, 85425 }, + { 0x11D8, 85429 }, + { 0x118C, 85433 }, + { 0x1378, 85437 }, + { 0x1375, 85441 }, + { 0x1377, 85445 }, + { 0x1374, 85449 }, + { 0x1373, 85453 }, + { 0x11BB, 85457 }, + { 0x139F, 85461 }, + { 0x139B, 85465 }, + { 0x139D, 85469 }, + { 0x139A, 85473 }, + { 0x1398, 85477 }, + { 0x1385, 85481 }, + { 0x13AB, 85485 }, + { 0x13A8, 85489 }, + { 0x13AA, 85493 }, + { 0x13A7, 85497 }, + { 0x13A6, 85501 }, + { 0x1391, 85505 }, + { 0x138E, 85509 }, + { 0x1390, 85513 }, + { 0x138D, 85517 }, + { 0x138C, 85521 }, + { 0x138B, 85525 }, + { 0x1388, 85529 }, + { 0x1255, 85533 }, + { 0x138A, 85537 }, + { 0x1387, 85541 }, + { 0x1386, 85545 }, + { 0x1371, 85549 }, + { 0x136E, 85553 }, + { 0x1370, 85557 }, + { 0x136D, 85561 }, + { 0x136C, 85565 }, + { 0x1353, 85569 }, + { 0x1350, 85573 }, + { 0x1352, 85577 }, + { 0x134F, 85581 }, + { 0x134E, 85585 }, + { 0x13D7, 85589 }, + { 0x13D4, 85593 }, + { 0x13DE, 85597 }, + { 0x13D6, 85601 }, + { 0x13D3, 85605 }, + { 0x13D2, 85609 }, + { 0x1359, 85613 }, + { 0x1356, 85617 }, + { 0x1358, 85621 }, + { 0x1355, 85625 }, + { 0x1354, 85629 }, + { 0x1397, 85633 }, + { 0x1394, 85637 }, + { 0x1396, 85641 }, + { 0x1393, 85645 }, + { 0x1392, 85649 }, + { 0x13C9, 85653 }, + { 0x13C6, 85657 }, + { 0x13C8, 85661 }, + { 0x13C5, 85665 }, + { 0x13C4, 85669 }, + { 0x13EA, 85673 }, + { 0x13E7, 85677 }, + { 0x13E9, 85681 }, + { 0x13E6, 85685 }, + { 0x13E5, 85689 }, + { 0x11D7, 85693 }, + { 0x13B1, 85697 }, + { 0x13AE, 85701 }, + { 0x13B0, 85705 }, + { 0x13AD, 85709 }, + { 0x13AC, 85713 }, + { 0x13D1, 85717 }, + { 0x13CE, 85721 }, + { 0x13D0, 85725 }, + { 0x13CD, 85729 }, + { 0x13CC, 85733 }, + { 0x161D, 85737 }, + { 0x1376, 85741 }, + { 0x134D, 85745 }, + { 0x134A, 85749 }, + { 0x134C, 85753 }, + { 0x1349, 85757 }, + { 0x1348, 85761 }, + { 0x161E, 85765 }, + { 0x161B, 85769 }, + { 0x11BA, 85773 }, + { 0x135F, 85777 }, + { 0x135C, 85781 }, + { 0x135E, 85785 }, + { 0x135B, 85789 }, + { 0x135A, 85793 }, + { 0x139C, 85797 }, + { 0x13A5, 85801 }, + { 0x13A2, 85805 }, + { 0x13A4, 85809 }, + { 0x13A1, 85813 }, + { 0x13A0, 85817 }, + { 0x1620, 85821 }, + { 0x137E, 85825 }, + { 0x137B, 85829 }, + { 0x137D, 85833 }, + { 0x137A, 85837 }, + { 0x1379, 85841 }, + { 0x1384, 85845 }, + { 0x1381, 85849 }, + { 0x1383, 85853 }, + { 0x1380, 85857 }, + { 0x137F, 85861 }, + { 0x13A9, 85865 }, + { 0x13B7, 85869 }, + { 0x13B4, 85873 }, + { 0x13B6, 85877 }, + { 0x13B3, 85881 }, + { 0x13B2, 85885 }, + { 0x138F, 85889 }, + { 0x1389, 85893 }, + { 0x136F, 85897 }, + { 0x1351, 85901 }, + { 0x13D5, 85905 }, + { 0x13DD, 85909 }, + { 0x13DA, 85913 }, + { 0x13DC, 85917 }, + { 0x13D9, 85921 }, + { 0x13D8, 85925 }, + { 0x1365, 85929 }, + { 0x1362, 85933 }, + { 0x1364, 85937 }, + { 0x1361, 85941 }, + { 0x1360, 85945 }, + { 0x13C3, 85949 }, + { 0x13C0, 85953 }, + { 0x13C2, 85957 }, + { 0x13BF, 85961 }, + { 0x13BE, 85965 }, + { 0x13E4, 85969 }, + { 0x13E1, 85973 }, + { 0x13E3, 85977 }, + { 0x13E0, 85981 }, + { 0x13DF, 85985 }, + { 0x136B, 85989 }, + { 0x1368, 85993 }, + { 0x136A, 85997 }, + { 0x1367, 86001 }, + { 0x1366, 86005 }, + { 0x1357, 86009 }, + { 0x1395, 86013 }, + { 0x13C7, 86017 }, + { 0x13E8, 86021 }, + { 0x161C, 86025 }, + { 0x13AF, 86030 }, + { 0x13CF, 86034 }, + { 0x134B, 86038 }, + { 0x135D, 86042 }, + { 0x13A3, 86046 }, + { 0x137C, 86050 }, + { 0x1382, 86054 }, + { 0x13B5, 86058 }, + { 0x13DB, 86062 }, + { 0x1363, 86066 }, + { 0x13C1, 86070 }, + { 0x13BD, 86074 }, + { 0x13BA, 86078 }, + { 0x13BC, 86082 }, + { 0x13B9, 86086 }, + { 0x13B8, 86090 }, + { 0x13E2, 86094 }, + { 0x1369, 86098 }, + { 0x13F0, 86102 }, + { 0x13ED, 86106 }, + { 0x13EF, 86110 }, + { 0x13EC, 86114 }, + { 0x13EB, 86118 }, + { 0x13BB, 86122 }, + { 0x13EE, 86126 }, + { 0x1623, 86130 }, + { 0x13CB, 86135 }, + { 0x160A, 86140 }, + { 0x11A2, 86144 }, + { 0x128F, 86148 }, + { 0x128E, 86152 }, + { 0x119F, 86156 }, + { 0x119A, 86160 }, + { 0x1224, 86164 }, + { 0x1206, 86168 }, + { 0x123E, 86172 }, + { 0x1253, 86176 }, + { 0x1293, 86180 }, + { 0x1292, 86184 }, + { 0x1290, 86188 }, + { 0x1291, 86192 }, + { 0x1288, 86196 }, + { 0x11E9, 86200 }, + { 0x12C1, 86204 }, + { 0x12FF, 86208 }, + { 0x12FD, 86212 }, + { 0x12F8, 86216 }, + { 0x12F9, 86220 }, + { 0x12FB, 86224 }, + { 0x12FE, 86228 }, + { 0x12FA, 86232 }, + { 0x12FC, 86236 }, + { 0x1300, 86240 }, + { 0x1605, 86244 }, + { 0x1604, 86248 }, + { 0x1606, 86252 }, + { 0x1607, 86256 }, + { 0x1602, 86260 }, + { 0x1608, 86264 }, + { 0x1603, 86268 }, + { 0x1609, 86272 }, + { 0x15F5, 86276 }, + { 0x15F9, 86280 }, + { 0x15F7, 86284 }, + { 0x15FB, 86288 }, + { 0x1332, 86292 }, + { 0x1330, 86296 }, + { 0x132B, 86300 }, + { 0x132C, 86304 }, + { 0x132E, 86308 }, + { 0x1331, 86312 }, + { 0x132D, 86316 }, + { 0x132F, 86320 }, + { 0x160B, 86324 }, + { 0x5192, 86328 }, + { 0x518E, 86332 }, + { 0x5190, 86336 }, + { 0x5193, 86340 }, + { 0x518F, 86344 }, + { 0x5191, 86348 }, + { 0x5198, 86352 }, + { 0x5194, 86356 }, + { 0x5196, 86360 }, + { 0x5199, 86364 }, + { 0x5195, 86368 }, + { 0x5197, 86372 }, + { 0x1337, 86376 }, + { 0x1334, 86380 }, + { 0x1335, 86384 }, + { 0x1336, 86388 }, + { 0x128C, 86392 }, + { 0x1403, 86396 }, + { 0x1343, 86400 }, + { 0x1340, 86404 }, + { 0x1341, 86408 }, + { 0x1342, 86412 }, + { 0x133F, 86416 }, + { 0x133C, 86420 }, + { 0x133D, 86424 }, + { 0x133E, 86428 }, + { 0x133B, 86432 }, + { 0x1338, 86436 }, + { 0x1339, 86440 }, + { 0x133A, 86444 }, + { 0x126F, 86448 }, + { 0x1240, 86452 }, + { 0x11CE, 86456 }, + { 0x12D5, 86460 }, + { 0x12C4, 86464 }, + { 0x12D1, 86468 }, + { 0x12C8, 86472 }, + { 0x12CE, 86476 }, + { 0x1311, 86480 }, + { 0x130E, 86484 }, + { 0x130F, 86488 }, + { 0x1310, 86492 }, + { 0x119C, 86496 }, + { 0x1191, 86500 }, + { 0x1193, 86504 }, + { 0x1197, 86508 }, + { 0x1221, 86512 }, + { 0x1217, 86516 }, + { 0x1219, 86520 }, + { 0x121D, 86524 }, + { 0x1203, 86528 }, + { 0x11F9, 86532 }, + { 0x11FB, 86536 }, + { 0x11FF, 86540 }, + { 0x1610, 86544 }, + { 0x160F, 86548 }, + { 0x126B, 86552 }, + { 0x1261, 86556 }, + { 0x1263, 86560 }, + { 0x1267, 86564 }, + { 0x123B, 86568 }, + { 0x1231, 86572 }, + { 0x1233, 86576 }, + { 0x1237, 86580 }, + { 0x1250, 86584 }, + { 0x124E, 86588 }, + { 0x11C9, 86592 }, + { 0x11BF, 86596 }, + { 0x11C1, 86600 }, + { 0x11C5, 86604 }, + { 0x1285, 86608 }, + { 0x127B, 86612 }, + { 0x127D, 86616 }, + { 0x1281, 86620 }, + { 0x11E6, 86624 }, + { 0x11DC, 86628 }, + { 0x11DE, 86632 }, + { 0x11E2, 86636 }, + { 0x119E, 86640 }, + { 0x1195, 86644 }, + { 0x1199, 86648 }, + { 0x12BE, 86652 }, + { 0x12B4, 86656 }, + { 0x12B6, 86660 }, + { 0x12BA, 86664 }, + { 0x1223, 86668 }, + { 0x121B, 86672 }, + { 0x121F, 86676 }, + { 0x12E0, 86680 }, + { 0x1205, 86684 }, + { 0x11FD, 86688 }, + { 0x1201, 86692 }, + { 0x126D, 86696 }, + { 0x1265, 86700 }, + { 0x1269, 86704 }, + { 0x123D, 86708 }, + { 0x1235, 86712 }, + { 0x1239, 86716 }, + { 0x1252, 86720 }, + { 0x11CB, 86724 }, + { 0x11C3, 86728 }, + { 0x11C7, 86732 }, + { 0x12D3, 86736 }, + { 0x12A6, 86740 }, + { 0x129C, 86744 }, + { 0x129E, 86748 }, + { 0x12A2, 86752 }, + { 0x1287, 86756 }, + { 0x127F, 86760 }, + { 0x1283, 86764 }, + { 0x11E8, 86768 }, + { 0x11E0, 86772 }, + { 0x11E4, 86776 }, + { 0x12C0, 86780 }, + { 0x12B8, 86784 }, + { 0x12BC, 86788 }, + { 0x12A8, 86792 }, + { 0x12A0, 86796 }, + { 0x12A4, 86800 }, + { 0x12ED, 86804 }, + { 0x1242, 86808 }, + { 0x128A, 86812 }, + { 0x12C3, 86816 }, + { 0x128D, 86820 }, + { 0x1323, 86824 }, + { 0x1322, 86828 }, + { 0x131F, 86832 }, + { 0x1320, 86836 }, + { 0x1321, 86840 }, + { 0x1400, 86844 }, + { 0x13FC, 86848 }, + { 0x13FE, 86852 }, + { 0x1402, 86856 }, + { 0x1401, 86861 }, + { 0x13FB, 86865 }, + { 0x13FD, 86869 }, + { 0x13FF, 86873 }, + { 0x120C, 86877 }, + { 0x1209, 86881 }, + { 0x120A, 86885 }, + { 0x120B, 86889 }, + { 0x8F53, 86893 }, + { 0x9096, 86895 }, + { 0x3A93, 86897 }, + { 0x3A94, 86901 }, + { 0x3A95, 86905 }, + { 0x3A96, 86909 }, + { 0x3AC0, 86913 }, + { 0x3A97, 86917 }, + { 0x3A98, 86921 }, + { 0x3AC6, 86925 }, + { 0x3AC8, 86929 }, + { 0x3ACA, 86933 }, + { 0x3ACC, 86937 }, + { 0x3ACD, 86941 }, + { 0x3ACE, 86945 }, + { 0x3A99, 86949 }, + { 0x3A9B, 86953 }, + { 0x3A9C, 86957 }, + { 0x3A9D, 86961 }, + { 0x3A9E, 86965 }, + { 0x3A9F, 86969 }, + { 0x3AA0, 86973 }, + { 0x3AA1, 86977 }, + { 0x3AA2, 86981 }, + { 0x3AA3, 86985 }, + { 0x3AA4, 86989 }, + { 0x3AA5, 86993 }, + { 0x3A9A, 86997 }, + { 0x3AA6, 87001 }, + { 0x3AA7, 87005 }, + { 0x3AA8, 87009 }, + { 0x3AA9, 87013 }, + { 0x3AAA, 87017 }, + { 0x3AAB, 87021 }, + { 0x3AAC, 87025 }, + { 0x3AAD, 87029 }, + { 0x3AAE, 87033 }, + { 0x3AAF, 87037 }, + { 0x3AB0, 87041 }, + { 0x1183, 87045 }, + { 0x3AB1, 87049 }, + { 0x3AB4, 87053 }, + { 0x3AB5, 87057 }, + { 0x3AB6, 87061 }, + { 0x3AB7, 87065 }, + { 0x3AB8, 87069 }, + { 0x3ABF, 87073 }, + { 0x3AC1, 87077 }, + { 0x3AC2, 87081 }, + { 0x3AC3, 87085 }, + { 0x3AC4, 87089 }, + { 0x3AC5, 87093 }, + { 0x3AC7, 87097 }, + { 0x3AC9, 87101 }, + { 0x3ACB, 87105 }, + { 0x3ADC, 87109 }, + { 0x3ADD, 87113 }, + { 0x3ADE, 87117 }, + { 0x3ADF, 87121 }, + { 0x3AE0, 87125 }, + { 0x3AE1, 87129 }, + { 0x3AE2, 87133 }, + { 0x117E, 87137 }, + { 0x117F, 87141 }, + { 0x1180, 87145 }, + { 0x1181, 87149 }, + { 0x1182, 87153 }, + { 0x3ACF, 87157 }, + { 0x3AB2, 87161 }, + { 0x3AB3, 87165 }, + { 0x3AB9, 87169 }, + { 0x3ABA, 87173 }, + { 0x3ABB, 87177 }, + { 0x3ABC, 87181 }, + { 0x3ABD, 87185 }, + { 0x3ABE, 87189 }, + { 0x3AD0, 87193 }, + { 0x3AD1, 87197 }, + { 0x3AD2, 87201 }, + { 0x3AD3, 87205 }, + { 0x3AD4, 87209 }, + { 0x3AD5, 87213 }, + { 0x3AD6, 87217 }, + { 0x3AD7, 87221 }, + { 0x3AD8, 87225 }, + { 0x3AD9, 87229 }, + { 0x3ADA, 87233 }, + { 0x3ADB, 87237 }, + { 0x1128, 87241 }, + { 0x1129, 87244 }, + { 0x112A, 87247 }, + { 0x112B, 87250 }, + { 0x1155, 87253 }, + { 0x112C, 87256 }, + { 0x112D, 87259 }, + { 0x115B, 87262 }, + { 0x115D, 87265 }, + { 0x115F, 87268 }, + { 0x1161, 87271 }, + { 0x1162, 87274 }, + { 0x1163, 87277 }, + { 0x112E, 87280 }, + { 0x1130, 87283 }, + { 0x1131, 87286 }, + { 0x1132, 87289 }, + { 0x1133, 87292 }, + { 0x1134, 87295 }, + { 0x1135, 87298 }, + { 0x1136, 87301 }, + { 0x1137, 87304 }, + { 0x1138, 87307 }, + { 0x1139, 87310 }, + { 0x113A, 87313 }, + { 0x112F, 87316 }, + { 0x113B, 87319 }, + { 0x113C, 87322 }, + { 0x113D, 87325 }, + { 0x113E, 87328 }, + { 0x113F, 87331 }, + { 0x1140, 87334 }, + { 0x1141, 87337 }, + { 0x1142, 87340 }, + { 0x1143, 87343 }, + { 0x1144, 87346 }, + { 0x1145, 87349 }, + { 0x117D, 87352 }, + { 0x1146, 87355 }, + { 0x1149, 87358 }, + { 0x114A, 87361 }, + { 0x114B, 87364 }, + { 0x114C, 87367 }, + { 0x114D, 87370 }, + { 0x1154, 87373 }, + { 0x1156, 87376 }, + { 0x1157, 87379 }, + { 0x1158, 87382 }, + { 0x1159, 87385 }, + { 0x115A, 87388 }, + { 0x115C, 87391 }, + { 0x115E, 87394 }, + { 0x1160, 87397 }, + { 0x1171, 87400 }, + { 0x1172, 87403 }, + { 0x1173, 87406 }, + { 0x1174, 87409 }, + { 0x1175, 87412 }, + { 0x1176, 87415 }, + { 0x1177, 87418 }, + { 0x1178, 87421 }, + { 0x1179, 87424 }, + { 0x117A, 87427 }, + { 0x117B, 87430 }, + { 0x117C, 87433 }, + { 0x1164, 87436 }, + { 0x1147, 87439 }, + { 0x1148, 87442 }, + { 0x114E, 87445 }, + { 0x114F, 87448 }, + { 0x1150, 87451 }, + { 0x1151, 87454 }, + { 0x1152, 87457 }, + { 0x1153, 87460 }, + { 0x1165, 87463 }, + { 0x1166, 87466 }, + { 0x1167, 87469 }, + { 0x1168, 87472 }, + { 0x1169, 87475 }, + { 0x116A, 87478 }, + { 0x116B, 87481 }, + { 0x116C, 87484 }, + { 0x116D, 87487 }, + { 0x116E, 87490 }, + { 0x116F, 87493 }, + { 0x1170, 87496 }, + { 0x8F05, 87499 }, + { 0x8EE3, 87500 }, + { 0x926B, 87501 }, + { 0x8FF2, 87503 }, + { 0x9002, 87504 }, + { 0x8F2E, 87507 }, + { 0x9470, 87510 }, + { 0x8F2B, 87512 }, + { 0x8F3D, 87514 }, + { 0x91C8, 87516 }, + { 0x1E62, 87518 }, + { 0x1F0A, 87521 }, + { 0x1F0C, 87525 }, + { 0x1F51, 87532 }, + { 0x1F54, 87537 }, + { 0x1F52, 87540 }, + { 0x8DDA, 87549 }, + { 0x825B, 87551 }, + { 0x8260, 87556 }, + { 0x825C, 87561 }, + { 0x825F, 87566 }, + { 0x825E, 87571 }, + { 0x8263, 87576 }, + { 0x8262, 87581 }, + { 0x8261, 87586 }, + { 0x825D, 87591 }, + { 0x8252, 87596 }, + { 0x8257, 87601 }, + { 0x8253, 87606 }, + { 0x8256, 87611 }, + { 0x8255, 87616 }, + { 0x825A, 87621 }, + { 0x8259, 87626 }, + { 0x8258, 87631 }, + { 0x8254, 87636 }, + { 0x8ECC, 87641 }, + { 0x22F8, 87643 }, + { 0x1D1B, 87645 }, + { 0x9480, 87647 }, + { 0x0063, 87648 }, + { 0x9064, 87650 }, + { 0x03E6, 87652 }, + { 0x0487, 87656 }, + { 0x0489, 87662 }, + { 0x0403, 87668 }, + { 0x04A3, 87672 }, + { 0x03EE, 87678 }, + { 0x0413, 87682 }, + { 0x0499, 87688 }, + { 0x049B, 87694 }, + { 0x03F4, 87700 }, + { 0x049D, 87704 }, + { 0x03F9, 87710 }, + { 0x04A9, 87714 }, + { 0x04A5, 87721 }, + { 0x04A7, 87727 }, + { 0x03E7, 87733 }, + { 0x03EA, 87737 }, + { 0x03FA, 87741 }, + { 0x03F1, 87745 }, + { 0x04C9, 87749 }, + { 0x047C, 87755 }, + { 0x04D7, 87761 }, + { 0x04E5, 87768 }, + { 0x03F2, 87774 }, + { 0x0484, 87778 }, + { 0x03F3, 87784 }, + { 0x047E, 87788 }, + { 0x04DF, 87794 }, + { 0x0480, 87801 }, + { 0x04D9, 87807 }, + { 0x0459, 87814 }, + { 0x03F6, 87820 }, + { 0x0445, 87824 }, + { 0x03F7, 87830 }, + { 0x0461, 87834 }, + { 0x03FB, 87840 }, + { 0x04B3, 87844 }, + { 0x04B5, 87850 }, + { 0x0469, 87856 }, + { 0x03EB, 87862 }, + { 0x048D, 87866 }, + { 0x0406, 87872 }, + { 0x0407, 87878 }, + { 0x040E, 87882 }, + { 0x03F0, 87886 }, + { 0x047A, 87890 }, + { 0x0455, 87896 }, + { 0x0453, 87902 }, + { 0x0451, 87909 }, + { 0x0435, 87915 }, + { 0x03F5, 87919 }, + { 0x045D, 87923 }, + { 0x04DB, 87930 }, + { 0x04D1, 87936 }, + { 0x03F8, 87940 }, + { 0x3644, 87944 }, + { 0x0463, 87951 }, + { 0x042F, 87957 }, + { 0x03E8, 87961 }, + { 0x04D3, 87965 }, + { 0x0405, 87969 }, + { 0x040D, 87973 }, + { 0x3618, 87977 }, + { 0x0404, 87981 }, + { 0x03ED, 87985 }, + { 0x044F, 87989 }, + { 0x0495, 87995 }, + { 0x0421, 88001 }, + { 0x03FD, 88006 }, + { 0x046F, 88010 }, + { 0x046D, 88017 }, + { 0x04AB, 88023 }, + { 0x0408, 88029 }, + { 0x363A, 88033 }, + { 0x040B, 88037 }, + { 0x03E9, 88041 }, + { 0x044B, 88045 }, + { 0x0449, 88052 }, + { 0x04B1, 88058 }, + { 0x0447, 88066 }, + { 0x04AD, 88072 }, + { 0x0409, 88078 }, + { 0x364E, 88082 }, + { 0x0412, 88086 }, + { 0x0425, 88090 }, + { 0x04CB, 88094 }, + { 0x040F, 88098 }, + { 0x0410, 88102 }, + { 0x0427, 88106 }, + { 0x04CD, 88110 }, + { 0x03FE, 88114 }, + { 0x1935, 88118 }, + { 0x03FC, 88122 }, + { 0x3646, 88126 }, + { 0x04CF, 88130 }, + { 0x0419, 88134 }, + { 0x03EC, 88138 }, + { 0x0478, 88142 }, + { 0x044D, 88148 }, + { 0x0493, 88154 }, + { 0x3640, 88160 }, + { 0x04E3, 88164 }, + { 0x0415, 88168 }, + { 0x363C, 88172 }, + { 0x3642, 88176 }, + { 0x0429, 88180 }, + { 0x0400, 88184 }, + { 0x3600, 88189 }, + { 0x04B7, 88193 }, + { 0x04B9, 88198 }, + { 0x04BF, 88203 }, + { 0x04C1, 88208 }, + { 0x04C3, 88213 }, + { 0x04C5, 88218 }, + { 0x04BB, 88223 }, + { 0x04BD, 88228 }, + { 0x0471, 88233 }, + { 0x04DD, 88237 }, + { 0x3650, 88243 }, + { 0x361C, 88247 }, + { 0x361E, 88252 }, + { 0x3620, 88257 }, + { 0x0402, 88262 }, + { 0x192F, 88267 }, + { 0x1932, 88272 }, + { 0x1931, 88277 }, + { 0x364C, 88283 }, + { 0x0411, 88287 }, + { 0x364A, 88291 }, + { 0x3648, 88295 }, + { 0x192E, 88299 }, + { 0x0401, 88304 }, + { 0x360A, 88308 }, + { 0x04AF, 88315 }, + { 0x363E, 88321 }, + { 0x04D5, 88325 }, + { 0x3606, 88330 }, + { 0x3602, 88335 }, + { 0x35FC, 88339 }, + { 0x04E1, 88343 }, + { 0x0437, 88347 }, + { 0x0417, 88351 }, + { 0x0433, 88355 }, + { 0x0431, 88361 }, + { 0x048F, 88366 }, + { 0x0491, 88370 }, + { 0x03FF, 88376 }, + { 0x03EF, 88380 }, + { 0x0441, 88385 }, + { 0x0414, 88392 }, + { 0x049F, 88397 }, + { 0x04A1, 88402 }, + { 0x3612, 88409 }, + { 0x3652, 88415 }, + { 0x3626, 88420 }, + { 0x041D, 88426 }, + { 0x192D, 88431 }, + { 0x35FA, 88436 }, + { 0x0457, 88440 }, + { 0x3614, 88445 }, + { 0x3654, 88450 }, + { 0x042B, 88455 }, + { 0x042D, 88459 }, + { 0x3608, 88467 }, + { 0x192B, 88472 }, + { 0x3610, 88477 }, + { 0x041B, 88482 }, + { 0x0423, 88487 }, + { 0x360C, 88493 }, + { 0x3616, 88498 }, + { 0x041F, 88505 }, + { 0x0485, 88511 }, + { 0x360E, 88515 }, + { 0x04C7, 88520 }, + { 0x35FE, 88525 }, + { 0x361A, 88530 }, + { 0x0443, 88535 }, + { 0x0465, 88540 }, + { 0x0467, 88545 }, + { 0x045F, 88552 }, + { 0x0473, 88557 }, + { 0x0475, 88562 }, + { 0x0497, 88569 }, + { 0x3624, 88574 }, + { 0x3622, 88579 }, + { 0x3604, 88584 }, + { 0x040A, 88589 }, + { 0x1933, 88594 }, + { 0x0482, 88599 }, + { 0x192C, 88604 }, + { 0x1930, 88609 }, + { 0x040C, 88614 }, + { 0x048B, 88619 }, + { 0x045B, 88624 }, + { 0x046B, 88629 }, + { 0x3637, 88634 }, + { 0x19C2, 88636 }, + { 0x0476, 88641 }, + { 0x3627, 88644 }, + { 0x03C6, 88648 }, + { 0x0486, 88652 }, + { 0x0488, 88658 }, + { 0x03E3, 88664 }, + { 0x04A2, 88668 }, + { 0x03CE, 88674 }, + { 0x03C3, 88678 }, + { 0x0498, 88684 }, + { 0x049A, 88690 }, + { 0x03D4, 88696 }, + { 0x049C, 88700 }, + { 0x03D9, 88706 }, + { 0x04A8, 88710 }, + { 0x04A4, 88717 }, + { 0x04A6, 88723 }, + { 0x03C7, 88729 }, + { 0x03CA, 88733 }, + { 0x03DA, 88737 }, + { 0x03D1, 88741 }, + { 0x04C8, 88745 }, + { 0x047B, 88751 }, + { 0x04D6, 88757 }, + { 0x04E4, 88764 }, + { 0x03D2, 88770 }, + { 0x0483, 88774 }, + { 0x03D3, 88780 }, + { 0x047D, 88784 }, + { 0x04DE, 88790 }, + { 0x047F, 88797 }, + { 0x04D8, 88803 }, + { 0x0458, 88810 }, + { 0x03D6, 88816 }, + { 0x0444, 88820 }, + { 0x03D7, 88826 }, + { 0x0460, 88830 }, + { 0x03DB, 88836 }, + { 0x04B2, 88840 }, + { 0x04B4, 88846 }, + { 0x0468, 88852 }, + { 0x03CB, 88858 }, + { 0x048C, 88862 }, + { 0x03B6, 88868 }, + { 0x03B7, 88874 }, + { 0x03BE, 88878 }, + { 0x03D0, 88882 }, + { 0x0479, 88886 }, + { 0x0454, 88892 }, + { 0x0452, 88898 }, + { 0x0450, 88905 }, + { 0x0434, 88911 }, + { 0x03D5, 88915 }, + { 0x045C, 88919 }, + { 0x04DA, 88926 }, + { 0x04D0, 88932 }, + { 0x03D8, 88936 }, + { 0x3643, 88940 }, + { 0x0462, 88947 }, + { 0x042E, 88953 }, + { 0x03C8, 88957 }, + { 0x04D2, 88961 }, + { 0x03E5, 88965 }, + { 0x03BD, 88969 }, + { 0x3617, 88973 }, + { 0x03E4, 88977 }, + { 0x03CD, 88981 }, + { 0x044E, 88985 }, + { 0x0494, 88991 }, + { 0x0420, 88997 }, + { 0x03DD, 89002 }, + { 0x046E, 89006 }, + { 0x046C, 89013 }, + { 0x04AA, 89019 }, + { 0x03B8, 89025 }, + { 0x3639, 89029 }, + { 0x03BB, 89033 }, + { 0x03C9, 89037 }, + { 0x044A, 89041 }, + { 0x0448, 89048 }, + { 0x04B0, 89054 }, + { 0x0446, 89062 }, + { 0x04AC, 89068 }, + { 0x03B9, 89074 }, + { 0x364D, 89078 }, + { 0x03C2, 89082 }, + { 0x0424, 89086 }, + { 0x04CA, 89090 }, + { 0x03BF, 89094 }, + { 0x03C0, 89098 }, + { 0x0426, 89102 }, + { 0x04CC, 89106 }, + { 0x03DE, 89110 }, + { 0x1934, 89114 }, + { 0x03DC, 89118 }, + { 0x3645, 89122 }, + { 0x04CE, 89126 }, + { 0x0418, 89130 }, + { 0x03CC, 89134 }, + { 0x0477, 89138 }, + { 0x044C, 89144 }, + { 0x0492, 89150 }, + { 0x363F, 89156 }, + { 0x04E2, 89160 }, + { 0x03C5, 89164 }, + { 0x363B, 89168 }, + { 0x3641, 89172 }, + { 0x0428, 89176 }, + { 0x03E0, 89180 }, + { 0x35FF, 89185 }, + { 0x04B6, 89189 }, + { 0x04B8, 89194 }, + { 0x04BE, 89199 }, + { 0x04C0, 89204 }, + { 0x04C2, 89209 }, + { 0x04C4, 89214 }, + { 0x04BA, 89219 }, + { 0x04BC, 89224 }, + { 0x0470, 89229 }, + { 0x04DC, 89233 }, + { 0x364F, 89239 }, + { 0x361B, 89243 }, + { 0x361D, 89248 }, + { 0x361F, 89253 }, + { 0x03E2, 89258 }, + { 0x364B, 89263 }, + { 0x03C1, 89267 }, + { 0x3649, 89271 }, + { 0x3647, 89275 }, + { 0x03E1, 89279 }, + { 0x3609, 89283 }, + { 0x04AE, 89290 }, + { 0x363D, 89296 }, + { 0x04D4, 89300 }, + { 0x3605, 89305 }, + { 0x3601, 89310 }, + { 0x35FB, 89314 }, + { 0x04E0, 89318 }, + { 0x0436, 89322 }, + { 0x0416, 89326 }, + { 0x0432, 89330 }, + { 0x0430, 89336 }, + { 0x048E, 89341 }, + { 0x0490, 89345 }, + { 0x03DF, 89351 }, + { 0x03CF, 89355 }, + { 0x0440, 89360 }, + { 0x03C4, 89367 }, + { 0x049E, 89372 }, + { 0x04A0, 89377 }, + { 0x3611, 89384 }, + { 0x3651, 89390 }, + { 0x3625, 89395 }, + { 0x041C, 89401 }, + { 0x35F9, 89406 }, + { 0x0456, 89410 }, + { 0x3613, 89415 }, + { 0x3653, 89420 }, + { 0x042A, 89425 }, + { 0x042C, 89429 }, + { 0x3607, 89437 }, + { 0x360F, 89442 }, + { 0x041A, 89447 }, + { 0x0422, 89452 }, + { 0x360B, 89458 }, + { 0x3615, 89463 }, + { 0x041E, 89470 }, + { 0x360D, 89476 }, + { 0x04C6, 89481 }, + { 0x35FD, 89486 }, + { 0x3619, 89491 }, + { 0x0442, 89496 }, + { 0x0464, 89501 }, + { 0x0466, 89506 }, + { 0x045E, 89513 }, + { 0x0472, 89518 }, + { 0x0474, 89523 }, + { 0x0496, 89530 }, + { 0x3623, 89535 }, + { 0x3621, 89540 }, + { 0x3603, 89545 }, + { 0x03BA, 89550 }, + { 0x0481, 89555 }, + { 0x03BC, 89560 }, + { 0x048A, 89565 }, + { 0x045A, 89570 }, + { 0x046A, 89575 }, + { 0x3638, 89580 }, + { 0x895B, 89582 }, + { 0x8963, 89587 }, + { 0x8966, 89592 }, + { 0x8969, 89597 }, + { 0x895C, 89602 }, + { 0x895F, 89607 }, + { 0x896A, 89612 }, + { 0x8965, 89617 }, + { 0x8968, 89622 }, + { 0x896B, 89627 }, + { 0x8960, 89632 }, + { 0x8964, 89637 }, + { 0x8967, 89642 }, + { 0x895D, 89647 }, + { 0x8962, 89652 }, + { 0x896D, 89657 }, + { 0x8973, 89662 }, + { 0x895E, 89667 }, + { 0x8971, 89672 }, + { 0x896E, 89679 }, + { 0x896C, 89684 }, + { 0x8961, 89689 }, + { 0x8974, 89694 }, + { 0x896F, 89699 }, + { 0x8970, 89705 }, + { 0x8972, 89710 }, + { 0x0438, 89716 }, + { 0x918E, 89719 }, + { 0x924D, 89723 }, + { 0x8F8D, 89725 }, + { 0x7C8A, 89728 }, + { 0x1F57, 89731 }, + { 0x22F9, 89733 }, + { 0x00B6, 89735 }, + { 0x1E6C, 89737 }, + { 0x1F1E, 89739 }, + { 0x9181, 89741 }, + { 0x916C, 89742 }, + { 0x916D, 89745 }, + { 0x916E, 89750 }, + { 0x8F1C, 89753 }, + { 0x9436, 89754 }, + { 0x9438, 89757 }, + { 0x9437, 89762 }, + { 0x9439, 89766 }, + { 0x23C7, 89772 }, + { 0x9452, 89776 }, + { 0x948D, 89778 }, + { 0x7C3F, 89779 }, + { 0x7C39, 89784 }, + { 0x7C3B, 89788 }, + { 0x7C38, 89792 }, + { 0x7C3C, 89797 }, + { 0x7C35, 89801 }, + { 0x7C3E, 89805 }, + { 0x7C37, 89809 }, + { 0x7C36, 89813 }, + { 0x7C3A, 89818 }, + { 0x7C3D, 89822 }, + { 0x7C22, 89826 }, + { 0x7C23, 89831 }, + { 0x7C20, 89836 }, + { 0x7C30, 89841 }, + { 0x7C32, 89845 }, + { 0x7C2F, 89849 }, + { 0x7C33, 89854 }, + { 0x7C2C, 89858 }, + { 0x7C2E, 89862 }, + { 0x7C2D, 89866 }, + { 0x7C31, 89871 }, + { 0x7C34, 89875 }, + { 0x7C24, 89879 }, + { 0x7C1F, 89884 }, + { 0x7C21, 89889 }, + { 0x7C29, 89894 }, + { 0x7C2A, 89899 }, + { 0x7C28, 89904 }, + { 0x7C25, 89908 }, + { 0x7C27, 89912 }, + { 0x7C2B, 89916 }, + { 0x7C26, 89921 }, + { 0x7C40, 89926 }, + { 0x7C41, 89930 }, + { 0x7BF5, 89933 }, + { 0x7BBB, 89936 }, + { 0x7BBC, 89939 }, + { 0x7BC1, 89942 }, + { 0x7BFB, 89946 }, + { 0x7BB8, 89949 }, + { 0x7BC2, 89952 }, + { 0x7BBE, 89956 }, + { 0x7BF2, 89959 }, + { 0x7BB4, 89964 }, + { 0x7BFA, 89967 }, + { 0x7BCF, 89970 }, + { 0x7BD3, 89973 }, + { 0x7BE1, 89977 }, + { 0x7BE4, 89982 }, + { 0x7BE5, 89986 }, + { 0x7BDD, 89991 }, + { 0x7BE3, 89995 }, + { 0x7BD7, 90001 }, + { 0x7BD8, 90006 }, + { 0x7BB9, 90014 }, + { 0x7BC3, 90017 }, + { 0x7BF1, 90021 }, + { 0x7BBA, 90026 }, + { 0x7BCD, 90029 }, + { 0x7BD1, 90032 }, + { 0x7BDF, 90036 }, + { 0x7BDB, 90041 }, + { 0x7BD5, 90045 }, + { 0x7BCE, 90050 }, + { 0x7BD2, 90053 }, + { 0x7BE0, 90057 }, + { 0x7BDC, 90062 }, + { 0x7BD6, 90066 }, + { 0x7BF8, 90071 }, + { 0x7BB6, 90074 }, + { 0x7BC0, 90077 }, + { 0x7BBF, 90081 }, + { 0x7BC4, 90084 }, + { 0x7BD0, 90088 }, + { 0x7BD4, 90091 }, + { 0x7BE2, 90095 }, + { 0x7BF3, 90100 }, + { 0x7BF4, 90104 }, + { 0x7BF0, 90109 }, + { 0x7BEF, 90113 }, + { 0x7BE8, 90117 }, + { 0x7BE9, 90121 }, + { 0x7BDE, 90126 }, + { 0x7BE6, 90130 }, + { 0x7BE7, 90134 }, + { 0x7BD9, 90139 }, + { 0x7BDA, 90144 }, + { 0x7BB7, 90150 }, + { 0x7BEB, 90153 }, + { 0x7BEA, 90158 }, + { 0x7C05, 90162 }, + { 0x7C08, 90165 }, + { 0x7BBD, 90169 }, + { 0x7BEC, 90172 }, + { 0x7BEE, 90175 }, + { 0x7BB5, 90179 }, + { 0x7BC7, 90182 }, + { 0x7BFF, 90185 }, + { 0x7C06, 90188 }, + { 0x7BCA, 90191 }, + { 0x7BFC, 90194 }, + { 0x7BC8, 90197 }, + { 0x7BCB, 90200 }, + { 0x7BF7, 90203 }, + { 0x7C0F, 90206 }, + { 0x7C0E, 90209 }, + { 0x7BCC, 90212 }, + { 0x7BC5, 90215 }, + { 0x7C0B, 90218 }, + { 0x7BFE, 90221 }, + { 0x7C10, 90224 }, + { 0x7BED, 90227 }, + { 0x7C12, 90230 }, + { 0x7C11, 90233 }, + { 0x7C07, 90236 }, + { 0x7C04, 90239 }, + { 0x7BF9, 90242 }, + { 0x7C0D, 90245 }, + { 0x7C13, 90248 }, + { 0x7C14, 90251 }, + { 0x7C03, 90254 }, + { 0x7C09, 90258 }, + { 0x7C18, 90262 }, + { 0x7C17, 90266 }, + { 0x7C16, 90270 }, + { 0x7C15, 90274 }, + { 0x7BFD, 90278 }, + { 0x7BC9, 90282 }, + { 0x7C0C, 90286 }, + { 0x7C1C, 90290 }, + { 0x7BC6, 90294 }, + { 0x7C02, 90298 }, + { 0x7C00, 90302 }, + { 0x7C1B, 90306 }, + { 0x7C1D, 90310 }, + { 0x7BF6, 90314 }, + { 0x7C1A, 90318 }, + { 0x7C19, 90322 }, + { 0x7C1E, 90326 }, + { 0x7C01, 90330 }, + { 0x7C0A, 90334 }, + { 0x7C42, 90338 }, + { 0x5D54, 90343 }, + { 0x5D4D, 90348 }, + { 0x5D52, 90352 }, + { 0x5915, 90356 }, + { 0x5916, 90359 }, + { 0x5917, 90362 }, + { 0x5918, 90365 }, + { 0x5919, 90368 }, + { 0x591B, 90371 }, + { 0x591E, 90374 }, + { 0x591F, 90377 }, + { 0x5920, 90380 }, + { 0x5921, 90383 }, + { 0x5922, 90386 }, + { 0x5923, 90389 }, + { 0x5924, 90392 }, + { 0x5925, 90395 }, + { 0x5927, 90398 }, + { 0x5928, 90401 }, + { 0x5929, 90404 }, + { 0x592B, 90407 }, + { 0x592C, 90410 }, + { 0x592D, 90413 }, + { 0x592E, 90416 }, + { 0x592F, 90419 }, + { 0x5930, 90422 }, + { 0x5931, 90425 }, + { 0x5932, 90428 }, + { 0x5933, 90431 }, + { 0x5934, 90434 }, + { 0x5935, 90437 }, + { 0x5936, 90440 }, + { 0x5937, 90443 }, + { 0x5938, 90446 }, + { 0x5939, 90449 }, + { 0x593B, 90452 }, + { 0x593C, 90455 }, + { 0x593D, 90458 }, + { 0x593E, 90461 }, + { 0x593F, 90464 }, + { 0x5940, 90467 }, + { 0x5941, 90470 }, + { 0x5942, 90473 }, + { 0x5944, 90476 }, + { 0x5945, 90479 }, + { 0x5947, 90482 }, + { 0x5949, 90485 }, + { 0x594A, 90488 }, + { 0x594C, 90491 }, + { 0x594D, 90494 }, + { 0x594E, 90497 }, + { 0x594F, 90500 }, + { 0x5950, 90503 }, + { 0x5951, 90506 }, + { 0x5952, 90509 }, + { 0x5953, 90512 }, + { 0x5954, 90515 }, + { 0x5955, 90518 }, + { 0x5956, 90521 }, + { 0x5957, 90524 }, + { 0x5958, 90527 }, + { 0x5959, 90530 }, + { 0x595A, 90533 }, + { 0x595B, 90536 }, + { 0x595C, 90539 }, + { 0x595D, 90542 }, + { 0x595E, 90545 }, + { 0x595F, 90548 }, + { 0x5960, 90551 }, + { 0x5961, 90554 }, + { 0x5962, 90557 }, + { 0x5963, 90560 }, + { 0x5964, 90563 }, + { 0x5965, 90566 }, + { 0x5966, 90569 }, + { 0x5967, 90572 }, + { 0x5968, 90575 }, + { 0x5969, 90578 }, + { 0x596B, 90581 }, + { 0x596C, 90584 }, + { 0x596D, 90587 }, + { 0x596E, 90590 }, + { 0x596F, 90593 }, + { 0x5970, 90596 }, + { 0x5974, 90599 }, + { 0x5975, 90602 }, + { 0x5976, 90605 }, + { 0x5977, 90608 }, + { 0x5978, 90611 }, + { 0x5979, 90614 }, + { 0x597A, 90617 }, + { 0x597B, 90620 }, + { 0x597D, 90623 }, + { 0x597E, 90626 }, + { 0x597F, 90629 }, + { 0x5980, 90632 }, + { 0x5981, 90635 }, + { 0x5982, 90638 }, + { 0x5983, 90641 }, + { 0x5984, 90644 }, + { 0x5985, 90647 }, + { 0x5986, 90650 }, + { 0x5987, 90653 }, + { 0x5988, 90656 }, + { 0x5989, 90659 }, + { 0x598A, 90662 }, + { 0x598B, 90665 }, + { 0x598C, 90668 }, + { 0x598D, 90671 }, + { 0x598E, 90674 }, + { 0x598F, 90677 }, + { 0x5990, 90680 }, + { 0x5991, 90683 }, + { 0x5992, 90686 }, + { 0x5994, 90689 }, + { 0x5995, 90692 }, + { 0x5996, 90695 }, + { 0x5997, 90698 }, + { 0x5998, 90701 }, + { 0x5999, 90704 }, + { 0x599A, 90707 }, + { 0x599B, 90710 }, + { 0x599C, 90713 }, + { 0x599D, 90716 }, + { 0x599E, 90719 }, + { 0x599F, 90722 }, + { 0x59A0, 90725 }, + { 0x59A1, 90728 }, + { 0x59A2, 90731 }, + { 0x59A3, 90734 }, + { 0x59A4, 90737 }, + { 0x59A5, 90740 }, + { 0x59A6, 90743 }, + { 0x59A8, 90746 }, + { 0x59A9, 90749 }, + { 0x59AA, 90752 }, + { 0x59AB, 90755 }, + { 0x59AD, 90758 }, + { 0x59AE, 90761 }, + { 0x59AF, 90764 }, + { 0x59B1, 90767 }, + { 0x59B2, 90770 }, + { 0x59B3, 90773 }, + { 0x59B4, 90776 }, + { 0x59B5, 90779 }, + { 0x59B6, 90782 }, + { 0x59B7, 90785 }, + { 0x59B8, 90788 }, + { 0x59B9, 90791 }, + { 0x59BA, 90794 }, + { 0x59BB, 90797 }, + { 0x59BC, 90800 }, + { 0x59BE, 90803 }, + { 0x59BF, 90806 }, + { 0x59C1, 90809 }, + { 0x59C2, 90812 }, + { 0x59CC, 90815 }, + { 0x59CD, 90818 }, + { 0x59CF, 90821 }, + { 0x59D0, 90824 }, + { 0x59D2, 90827 }, + { 0x59D3, 90830 }, + { 0x59D4, 90833 }, + { 0x59D5, 90836 }, + { 0x59D6, 90839 }, + { 0x59D7, 90842 }, + { 0x59D8, 90845 }, + { 0x59D9, 90848 }, + { 0x59DA, 90851 }, + { 0x59DB, 90854 }, + { 0x59DC, 90857 }, + { 0x59DD, 90860 }, + { 0x59DE, 90863 }, + { 0x59E7, 90866 }, + { 0x59E8, 90869 }, + { 0x59E9, 90872 }, + { 0x59EA, 90875 }, + { 0x59EB, 90878 }, + { 0x59EC, 90881 }, + { 0x59ED, 90884 }, + { 0x59EE, 90887 }, + { 0x59F0, 90890 }, + { 0x59F2, 90893 }, + { 0x59F3, 90896 }, + { 0x59F4, 90899 }, + { 0x59F5, 90902 }, + { 0x59F6, 90905 }, + { 0x59F7, 90908 }, + { 0x59F8, 90911 }, + { 0x59FA, 90914 }, + { 0x59FC, 90917 }, + { 0x59FD, 90920 }, + { 0x59FE, 90923 }, + { 0x5A00, 90926 }, + { 0x5A01, 90929 }, + { 0x5A02, 90932 }, + { 0x5A03, 90935 }, + { 0x5A04, 90938 }, + { 0x5A05, 90941 }, + { 0x5A06, 90944 }, + { 0x5A07, 90947 }, + { 0x5A09, 90950 }, + { 0x5A0A, 90953 }, + { 0x5A0B, 90956 }, + { 0x5A0C, 90959 }, + { 0x5A0D, 90962 }, + { 0x5A0E, 90965 }, + { 0x5A10, 90968 }, + { 0x5A11, 90971 }, + { 0x5A12, 90974 }, + { 0x5A13, 90977 }, + { 0x5A15, 90980 }, + { 0x5A16, 90983 }, + { 0x5A17, 90986 }, + { 0x5A18, 90989 }, + { 0x5A19, 90992 }, + { 0x5A1A, 90995 }, + { 0x5A1B, 90998 }, + { 0x5A1C, 91001 }, + { 0x5A1D, 91004 }, + { 0x5A1E, 91007 }, + { 0x5A1F, 91010 }, + { 0x5A20, 91013 }, + { 0x5A22, 91016 }, + { 0x5A23, 91019 }, + { 0x5A24, 91022 }, + { 0x5A25, 91025 }, + { 0x5A26, 91028 }, + { 0x5A27, 91031 }, + { 0x5A28, 91034 }, + { 0x5A29, 91037 }, + { 0x5A2B, 91040 }, + { 0x5A2C, 91043 }, + { 0x5A2D, 91046 }, + { 0x5A2E, 91049 }, + { 0x5A2F, 91052 }, + { 0x5A30, 91055 }, + { 0x5A31, 91058 }, + { 0x5A32, 91061 }, + { 0x5A33, 91064 }, + { 0x5A34, 91067 }, + { 0x5A36, 91070 }, + { 0x5A37, 91073 }, + { 0x5A38, 91076 }, + { 0x5A39, 91079 }, + { 0x5A3A, 91082 }, + { 0x5A3B, 91085 }, + { 0x5A3D, 91088 }, + { 0x5A3F, 91091 }, + { 0x5A40, 91094 }, + { 0x5A41, 91097 }, + { 0x5A42, 91100 }, + { 0x5A43, 91103 }, + { 0x5A44, 91106 }, + { 0x5A45, 91109 }, + { 0x5A47, 91112 }, + { 0x5A49, 91115 }, + { 0x5A4B, 91118 }, + { 0x5A4C, 91121 }, + { 0x5A4D, 91124 }, + { 0x5A4E, 91127 }, + { 0x5A52, 91130 }, + { 0x5A53, 91133 }, + { 0x5D56, 91136 }, + { 0x5A54, 91140 }, + { 0x5A55, 91143 }, + { 0x5A56, 91146 }, + { 0x5A57, 91149 }, + { 0x5A58, 91152 }, + { 0x5A59, 91155 }, + { 0x5A5B, 91158 }, + { 0x5A5E, 91161 }, + { 0x5A5F, 91164 }, + { 0x5A60, 91167 }, + { 0x5A61, 91170 }, + { 0x5A63, 91173 }, + { 0x5A64, 91176 }, + { 0x5A65, 91179 }, + { 0x5A66, 91182 }, + { 0x5A67, 91185 }, + { 0x5A68, 91188 }, + { 0x5A69, 91191 }, + { 0x5A6A, 91194 }, + { 0x5A6B, 91197 }, + { 0x5A6D, 91200 }, + { 0x5A6E, 91203 }, + { 0x5A6F, 91206 }, + { 0x5A70, 91209 }, + { 0x5A71, 91212 }, + { 0x5A72, 91215 }, + { 0x5A74, 91218 }, + { 0x5A75, 91221 }, + { 0x5A76, 91224 }, + { 0x5A77, 91227 }, + { 0x5A78, 91230 }, + { 0x5A79, 91233 }, + { 0x5A7A, 91236 }, + { 0x5A7B, 91239 }, + { 0x5A7C, 91242 }, + { 0x5A7D, 91245 }, + { 0x5A7F, 91248 }, + { 0x5A81, 91251 }, + { 0x5A82, 91254 }, + { 0x5A83, 91257 }, + { 0x5A84, 91260 }, + { 0x5A85, 91263 }, + { 0x5A86, 91266 }, + { 0x5A88, 91269 }, + { 0x5A89, 91272 }, + { 0x5A8B, 91275 }, + { 0x5A8C, 91278 }, + { 0x5A8D, 91281 }, + { 0x5A8E, 91284 }, + { 0x5A8F, 91287 }, + { 0x5A90, 91290 }, + { 0x5A91, 91293 }, + { 0x5A92, 91296 }, + { 0x5A93, 91299 }, + { 0x5A94, 91302 }, + { 0x5A95, 91305 }, + { 0x5A96, 91308 }, + { 0x5A97, 91311 }, + { 0x5A98, 91314 }, + { 0x5A99, 91317 }, + { 0x5A9B, 91320 }, + { 0x5A9C, 91323 }, + { 0x5D59, 91326 }, + { 0x5D57, 91331 }, + { 0x5A9D, 91335 }, + { 0x5A9E, 91338 }, + { 0x5A9F, 91341 }, + { 0x5AA0, 91344 }, + { 0x5AA1, 91347 }, + { 0x5AA3, 91350 }, + { 0x5AA4, 91353 }, + { 0x5AA5, 91356 }, + { 0x5AA6, 91359 }, + { 0x5AA8, 91362 }, + { 0x5AAA, 91365 }, + { 0x5AAC, 91368 }, + { 0x5AAD, 91371 }, + { 0x5AAE, 91374 }, + { 0x5AAF, 91377 }, + { 0x5AB0, 91380 }, + { 0x5AB1, 91383 }, + { 0x5AB2, 91386 }, + { 0x5AB3, 91389 }, + { 0x5AB4, 91392 }, + { 0x5AB5, 91395 }, + { 0x5AB6, 91398 }, + { 0x5AB7, 91401 }, + { 0x5AB8, 91404 }, + { 0x5AB9, 91407 }, + { 0x5ABB, 91410 }, + { 0x5ABC, 91413 }, + { 0x5ABD, 91416 }, + { 0x5ABE, 91419 }, + { 0x5AC0, 91422 }, + { 0x5AC1, 91425 }, + { 0x5D58, 91428 }, + { 0x5AC2, 91432 }, + { 0x5AC5, 91435 }, + { 0x5AC6, 91438 }, + { 0x5AC8, 91441 }, + { 0x5AC9, 91444 }, + { 0x5ACA, 91447 }, + { 0x5ACB, 91450 }, + { 0x5ACC, 91453 }, + { 0x5ACD, 91456 }, + { 0x5ACE, 91459 }, + { 0x5AD0, 91462 }, + { 0x5AD1, 91465 }, + { 0x5ADA, 91468 }, + { 0x5ADB, 91471 }, + { 0x5ADC, 91474 }, + { 0x5ADE, 91477 }, + { 0x5AE0, 91480 }, + { 0x5AE2, 91483 }, + { 0x5AE3, 91486 }, + { 0x5AE4, 91489 }, + { 0x5AE5, 91492 }, + { 0x5AE6, 91495 }, + { 0x5AE8, 91498 }, + { 0x5AE9, 91501 }, + { 0x5AEB, 91504 }, + { 0x5AEC, 91507 }, + { 0x5AED, 91510 }, + { 0x5AEE, 91513 }, + { 0x5AF0, 91516 }, + { 0x5AF1, 91519 }, + { 0x5AF2, 91522 }, + { 0x5AF4, 91525 }, + { 0x5AF5, 91528 }, + { 0x5AF8, 91531 }, + { 0x5AF9, 91534 }, + { 0x5AFA, 91537 }, + { 0x5AFB, 91540 }, + { 0x5AFC, 91543 }, + { 0x5AFD, 91546 }, + { 0x5AFE, 91549 }, + { 0x5B00, 91552 }, + { 0x5B01, 91555 }, + { 0x5B02, 91558 }, + { 0x5B03, 91561 }, + { 0x5B04, 91564 }, + { 0x5B05, 91567 }, + { 0x5B06, 91570 }, + { 0x5B07, 91573 }, + { 0x5B08, 91576 }, + { 0x5B09, 91579 }, + { 0x5B0A, 91582 }, + { 0x5B0B, 91585 }, + { 0x5B0C, 91588 }, + { 0x5B0D, 91591 }, + { 0x5B0E, 91594 }, + { 0x5B0F, 91597 }, + { 0x5B10, 91600 }, + { 0x5B11, 91603 }, + { 0x5B12, 91606 }, + { 0x5B13, 91609 }, + { 0x5B14, 91612 }, + { 0x5B15, 91615 }, + { 0x5B18, 91618 }, + { 0x5B19, 91621 }, + { 0x5B1A, 91624 }, + { 0x5B1B, 91627 }, + { 0x5B1C, 91630 }, + { 0x5B1D, 91633 }, + { 0x5B1E, 91636 }, + { 0x5B20, 91639 }, + { 0x5B21, 91642 }, + { 0x5B22, 91645 }, + { 0x5B23, 91648 }, + { 0x5B24, 91651 }, + { 0x5B25, 91654 }, + { 0x5B26, 91657 }, + { 0x5B27, 91660 }, + { 0x5B29, 91663 }, + { 0x5B2B, 91666 }, + { 0x5B2D, 91669 }, + { 0x5B2E, 91672 }, + { 0x5B30, 91675 }, + { 0x5B31, 91678 }, + { 0x5B32, 91681 }, + { 0x5B33, 91684 }, + { 0x5B34, 91687 }, + { 0x5B65, 91690 }, + { 0x5B67, 91693 }, + { 0x5B68, 91696 }, + { 0x5B69, 91699 }, + { 0x5B6A, 91702 }, + { 0x5B6C, 91705 }, + { 0x5B73, 91708 }, + { 0x5B74, 91711 }, + { 0x5B75, 91714 }, + { 0x5B76, 91717 }, + { 0x5B7A, 91720 }, + { 0x5B7B, 91723 }, + { 0x5B7C, 91726 }, + { 0x5B7D, 91729 }, + { 0x5B7E, 91732 }, + { 0x5B7F, 91735 }, + { 0x5B80, 91738 }, + { 0x5B81, 91741 }, + { 0x5B82, 91744 }, + { 0x5B84, 91747 }, + { 0x5B86, 91750 }, + { 0x5B87, 91753 }, + { 0x5B88, 91756 }, + { 0x5B89, 91759 }, + { 0x5B8B, 91762 }, + { 0x5B8D, 91765 }, + { 0x5B8E, 91768 }, + { 0x5B8F, 91771 }, + { 0x5B90, 91774 }, + { 0x5B92, 91777 }, + { 0x5B94, 91780 }, + { 0x5B95, 91783 }, + { 0x5B96, 91786 }, + { 0x5B98, 91789 }, + { 0x5B99, 91792 }, + { 0x5B9A, 91795 }, + { 0x5B9F, 91798 }, + { 0x5BA0, 91801 }, + { 0x5BA1, 91804 }, + { 0x5BA2, 91807 }, + { 0x5BA3, 91810 }, + { 0x5BA4, 91813 }, + { 0x5BA5, 91816 }, + { 0x5BA6, 91819 }, + { 0x5BA7, 91822 }, + { 0x5BA8, 91825 }, + { 0x5BA9, 91828 }, + { 0x5BAA, 91831 }, + { 0x5BAB, 91834 }, + { 0x5BAC, 91837 }, + { 0x5BAF, 91840 }, + { 0x5BB0, 91843 }, + { 0x5BB2, 91846 }, + { 0x5BB3, 91849 }, + { 0x5BB5, 91852 }, + { 0x5BB6, 91855 }, + { 0x5BB7, 91858 }, + { 0x5BB8, 91861 }, + { 0x5BB9, 91864 }, + { 0x5BBA, 91867 }, + { 0x5BBB, 91870 }, + { 0x5BBC, 91873 }, + { 0x5BBD, 91876 }, + { 0x5BBE, 91879 }, + { 0x5BBF, 91882 }, + { 0x5BC0, 91885 }, + { 0x5BC1, 91888 }, + { 0x5BC2, 91891 }, + { 0x5BC3, 91894 }, + { 0x5BC4, 91897 }, + { 0x5BC5, 91900 }, + { 0x5BC7, 91903 }, + { 0x5BCA, 91906 }, + { 0x5BCB, 91909 }, + { 0x5BCC, 91912 }, + { 0x5BCD, 91915 }, + { 0x5BCE, 91918 }, + { 0x5BCF, 91921 }, + { 0x5BD0, 91924 }, + { 0x5BD2, 91927 }, + { 0x5BD3, 91930 }, + { 0x5BD4, 91933 }, + { 0x5BD5, 91936 }, + { 0x5BD6, 91939 }, + { 0x5BD7, 91942 }, + { 0x5BD9, 91945 }, + { 0x5BDA, 91948 }, + { 0x5BDB, 91951 }, + { 0x5BDC, 91954 }, + { 0x5BDD, 91957 }, + { 0x5BDE, 91960 }, + { 0x5BDF, 91963 }, + { 0x5BE0, 91966 }, + { 0x5BE1, 91969 }, + { 0x5BE2, 91972 }, + { 0x5BE3, 91975 }, + { 0x5BE4, 91978 }, + { 0x5BE5, 91981 }, + { 0x5BE6, 91984 }, + { 0x5BE7, 91987 }, + { 0x5BE9, 91990 }, + { 0x5BEA, 91993 }, + { 0x5BEB, 91996 }, + { 0x5BEC, 91999 }, + { 0x5BEE, 92002 }, + { 0x5BEF, 92005 }, + { 0x5BF0, 92008 }, + { 0x5BF1, 92011 }, + { 0x5BF2, 92014 }, + { 0x5BF3, 92017 }, + { 0x5BF4, 92020 }, + { 0x5BF5, 92023 }, + { 0x5BF8, 92026 }, + { 0x5BF9, 92029 }, + { 0x5BFA, 92032 }, + { 0x5BFC, 92035 }, + { 0x5BFD, 92038 }, + { 0x5BFE, 92041 }, + { 0x5BFF, 92044 }, + { 0x5C00, 92047 }, + { 0x5C01, 92050 }, + { 0x5C02, 92053 }, + { 0x5C03, 92056 }, + { 0x5C04, 92059 }, + { 0x5C07, 92062 }, + { 0x5C08, 92065 }, + { 0x5C09, 92068 }, + { 0x5C0A, 92071 }, + { 0x5C0B, 92074 }, + { 0x5C0C, 92077 }, + { 0x5C0D, 92080 }, + { 0x5C0E, 92083 }, + { 0x5C0F, 92086 }, + { 0x5C11, 92089 }, + { 0x5C12, 92092 }, + { 0x5C13, 92095 }, + { 0x5C14, 92098 }, + { 0x5C15, 92101 }, + { 0x5C16, 92104 }, + { 0x5C17, 92107 }, + { 0x5C18, 92110 }, + { 0x5C19, 92113 }, + { 0x5C1A, 92116 }, + { 0x5C1B, 92119 }, + { 0x5C1C, 92122 }, + { 0x5C1D, 92125 }, + { 0x5C1E, 92128 }, + { 0x5C20, 92131 }, + { 0x5C21, 92134 }, + { 0x5C22, 92137 }, + { 0x5C23, 92140 }, + { 0x5C25, 92143 }, + { 0x5C27, 92146 }, + { 0x5C29, 92149 }, + { 0x5C2A, 92152 }, + { 0x5C2C, 92155 }, + { 0x5C2D, 92158 }, + { 0x5C2E, 92161 }, + { 0x5C2F, 92164 }, + { 0x5C30, 92167 }, + { 0x5C32, 92170 }, + { 0x5C33, 92173 }, + { 0x5C34, 92176 }, + { 0x5C35, 92179 }, + { 0x5C36, 92182 }, + { 0x5C37, 92185 }, + { 0x5C38, 92188 }, + { 0x5C39, 92191 }, + { 0x5C3A, 92194 }, + { 0x5C3B, 92197 }, + { 0x5C3C, 92200 }, + { 0x5C3D, 92203 }, + { 0x5C3E, 92206 }, + { 0x5C3F, 92209 }, + { 0x5C40, 92212 }, + { 0x5C41, 92215 }, + { 0x5C43, 92218 }, + { 0x5C45, 92221 }, + { 0x5C46, 92224 }, + { 0x5C47, 92227 }, + { 0x5D5A, 92230 }, + { 0x5C48, 92235 }, + { 0x5C49, 92238 }, + { 0x5C4A, 92241 }, + { 0x5C4B, 92244 }, + { 0x5C4C, 92247 }, + { 0x5C4D, 92250 }, + { 0x5C50, 92253 }, + { 0x5C51, 92256 }, + { 0x5C52, 92259 }, + { 0x5C53, 92262 }, + { 0x5C54, 92265 }, + { 0x5C55, 92268 }, + { 0x5C56, 92271 }, + { 0x5C57, 92274 }, + { 0x5C58, 92277 }, + { 0x5C59, 92280 }, + { 0x5C5A, 92283 }, + { 0x5C5B, 92286 }, + { 0x5C5C, 92289 }, + { 0x5C5D, 92292 }, + { 0x5C5E, 92295 }, + { 0x5C5F, 92298 }, + { 0x5C60, 92301 }, + { 0x5C62, 92304 }, + { 0x5C63, 92307 }, + { 0x5C64, 92310 }, + { 0x5C65, 92313 }, + { 0x5C66, 92316 }, + { 0x5C67, 92319 }, + { 0x5C69, 92322 }, + { 0x5C6A, 92325 }, + { 0x5C6B, 92328 }, + { 0x5C6D, 92331 }, + { 0x5C6E, 92334 }, + { 0x5C6F, 92337 }, + { 0x5C70, 92340 }, + { 0x5C71, 92343 }, + { 0x5C72, 92346 }, + { 0x5C73, 92349 }, + { 0x5C74, 92352 }, + { 0x5C75, 92355 }, + { 0x5C76, 92358 }, + { 0x5C77, 92361 }, + { 0x5C81, 92364 }, + { 0x5C83, 92367 }, + { 0x5C84, 92370 }, + { 0x5C85, 92373 }, + { 0x5C86, 92376 }, + { 0x5C87, 92379 }, + { 0x5C8A, 92382 }, + { 0x5C8B, 92385 }, + { 0x5C8C, 92388 }, + { 0x5C8D, 92391 }, + { 0x5C91, 92394 }, + { 0x5C94, 92397 }, + { 0x5C95, 92400 }, + { 0x5C96, 92403 }, + { 0x5C97, 92406 }, + { 0x5C98, 92409 }, + { 0x5C99, 92412 }, + { 0x5C9A, 92415 }, + { 0x5C9B, 92418 }, + { 0x5CA8, 92421 }, + { 0x5CA9, 92424 }, + { 0x5CAA, 92427 }, + { 0x5CAC, 92430 }, + { 0x5CAD, 92433 }, + { 0x5CAE, 92436 }, + { 0x5CAF, 92439 }, + { 0x5CB0, 92442 }, + { 0x5CB2, 92445 }, + { 0x5CB4, 92448 }, + { 0x5CB6, 92451 }, + { 0x5CB8, 92454 }, + { 0x5CB9, 92457 }, + { 0x5CBB, 92460 }, + { 0x5CBC, 92463 }, + { 0x5CBD, 92466 }, + { 0x5CBE, 92469 }, + { 0x5CC0, 92472 }, + { 0x5CC1, 92475 }, + { 0x5CC2, 92478 }, + { 0x5CC4, 92481 }, + { 0x5CC5, 92484 }, + { 0x5CC6, 92487 }, + { 0x5CC8, 92490 }, + { 0x5CC9, 92493 }, + { 0x5CCA, 92496 }, + { 0x5CCB, 92499 }, + { 0x5CCC, 92502 }, + { 0x5CCD, 92505 }, + { 0x5CCF, 92508 }, + { 0x5CD1, 92511 }, + { 0x5CD2, 92514 }, + { 0x5CD3, 92517 }, + { 0x5CD4, 92520 }, + { 0x5CD6, 92523 }, + { 0x5CD7, 92526 }, + { 0x5CD8, 92529 }, + { 0x5CDA, 92532 }, + { 0x5CDC, 92535 }, + { 0x5CDD, 92538 }, + { 0x5CDE, 92541 }, + { 0x5CDF, 92544 }, + { 0x5CE0, 92547 }, + { 0x5CE1, 92550 }, + { 0x5CE3, 92553 }, + { 0x5D5B, 92556 }, + { 0x5CE4, 92561 }, + { 0x5CE5, 92564 }, + { 0x5CE6, 92567 }, + { 0x5CE7, 92570 }, + { 0x5CEA, 92573 }, + { 0x5CEB, 92576 }, + { 0x5CED, 92579 }, + { 0x5CEE, 92582 }, + { 0x5CF0, 92585 }, + { 0x5CF2, 92588 }, + { 0x5CF3, 92591 }, + { 0x5CF4, 92594 }, + { 0x5CF5, 92597 }, + { 0x5CF6, 92600 }, + { 0x5CF7, 92603 }, + { 0x5CF8, 92606 }, + { 0x5CF9, 92609 }, + { 0x5CFA, 92612 }, + { 0x5CFF, 92615 }, + { 0x5D02, 92618 }, + { 0x5D04, 92621 }, + { 0x5D06, 92624 }, + { 0x5D07, 92627 }, + { 0x5D08, 92630 }, + { 0x5D09, 92633 }, + { 0x5D0A, 92636 }, + { 0x5D0B, 92639 }, + { 0x5D0C, 92642 }, + { 0x5D0D, 92645 }, + { 0x5D0E, 92648 }, + { 0x5D0F, 92651 }, + { 0x5D19, 92654 }, + { 0x591A, 92657 }, + { 0x591C, 92660 }, + { 0x591D, 92663 }, + { 0x5926, 92666 }, + { 0x592A, 92669 }, + { 0x593A, 92672 }, + { 0x5943, 92675 }, + { 0x5946, 92678 }, + { 0x5948, 92681 }, + { 0x594B, 92684 }, + { 0x5D22, 92687 }, + { 0x5D23, 92690 }, + { 0x5D24, 92693 }, + { 0x5D25, 92696 }, + { 0x5D26, 92699 }, + { 0x5D27, 92702 }, + { 0x5D28, 92705 }, + { 0x5D2B, 92708 }, + { 0x5D2C, 92711 }, + { 0x5D2D, 92714 }, + { 0x5D2E, 92717 }, + { 0x5D2F, 92720 }, + { 0x5D30, 92723 }, + { 0x5D31, 92726 }, + { 0x5D32, 92729 }, + { 0x5D33, 92732 }, + { 0x5D34, 92735 }, + { 0x5D35, 92738 }, + { 0x5D36, 92741 }, + { 0x5D37, 92744 }, + { 0x5D38, 92747 }, + { 0x5D39, 92750 }, + { 0x5D3A, 92753 }, + { 0x5D3B, 92756 }, + { 0x5D3C, 92759 }, + { 0x5D3D, 92762 }, + { 0x5D3E, 92765 }, + { 0x5D3F, 92768 }, + { 0x5D40, 92771 }, + { 0x5D41, 92774 }, + { 0x5D42, 92777 }, + { 0x5D43, 92780 }, + { 0x596A, 92783 }, + { 0x5D53, 92786 }, + { 0x5D4C, 92791 }, + { 0x5D51, 92795 }, + { 0x5971, 92799 }, + { 0x5972, 92802 }, + { 0x5973, 92805 }, + { 0x597C, 92808 }, + { 0x5993, 92811 }, + { 0x59A7, 92814 }, + { 0x59AC, 92817 }, + { 0x59B0, 92820 }, + { 0x59BD, 92823 }, + { 0x59C0, 92826 }, + { 0x59C3, 92829 }, + { 0x59C4, 92832 }, + { 0x59C5, 92835 }, + { 0x59C6, 92838 }, + { 0x59C7, 92841 }, + { 0x59C8, 92844 }, + { 0x59C9, 92847 }, + { 0x59CA, 92850 }, + { 0x59CB, 92853 }, + { 0x59CE, 92856 }, + { 0x59D1, 92859 }, + { 0x59DF, 92862 }, + { 0x59E0, 92865 }, + { 0x59E1, 92868 }, + { 0x59E2, 92871 }, + { 0x59E3, 92874 }, + { 0x59E4, 92877 }, + { 0x59E5, 92880 }, + { 0x59E6, 92883 }, + { 0x59EF, 92886 }, + { 0x59F1, 92889 }, + { 0x59F9, 92892 }, + { 0x59FB, 92895 }, + { 0x59FF, 92898 }, + { 0x5A08, 92901 }, + { 0x5A0F, 92904 }, + { 0x5A14, 92907 }, + { 0x5A21, 92910 }, + { 0x5A2A, 92913 }, + { 0x5A35, 92916 }, + { 0x5A3C, 92919 }, + { 0x5A3E, 92922 }, + { 0x5A46, 92925 }, + { 0x5A48, 92928 }, + { 0x5A4A, 92931 }, + { 0x5A4F, 92934 }, + { 0x5A50, 92937 }, + { 0x5A51, 92940 }, + { 0x5A5A, 92943 }, + { 0x5A5C, 92946 }, + { 0x5A5D, 92949 }, + { 0x5A62, 92952 }, + { 0x5A6C, 92955 }, + { 0x5A73, 92958 }, + { 0x5A7E, 92961 }, + { 0x5A80, 92964 }, + { 0x5A87, 92967 }, + { 0x5A8A, 92970 }, + { 0x5A9A, 92973 }, + { 0x5AA2, 92976 }, + { 0x5AA7, 92979 }, + { 0x5AA9, 92982 }, + { 0x5AAB, 92985 }, + { 0x5ABA, 92988 }, + { 0x5ABF, 92991 }, + { 0x5AC3, 92994 }, + { 0x5AC4, 92997 }, + { 0x5AC7, 93000 }, + { 0x5ACF, 93003 }, + { 0x5AD2, 93006 }, + { 0x5AD3, 93009 }, + { 0x5AD4, 93012 }, + { 0x5AD5, 93015 }, + { 0x5AD6, 93018 }, + { 0x5AD7, 93021 }, + { 0x5AD8, 93024 }, + { 0x5AD9, 93027 }, + { 0x5ADD, 93030 }, + { 0x5ADF, 93033 }, + { 0x5AE1, 93036 }, + { 0x5AE7, 93039 }, + { 0x5AEA, 93042 }, + { 0x5AEF, 93045 }, + { 0x5AF3, 93048 }, + { 0x5AF6, 93051 }, + { 0x5AF7, 93054 }, + { 0x5AFF, 93057 }, + { 0x5B16, 93060 }, + { 0x5B17, 93063 }, + { 0x5B1F, 93066 }, + { 0x5B28, 93069 }, + { 0x5B2A, 93072 }, + { 0x5B2C, 93075 }, + { 0x5B2F, 93078 }, + { 0x5B35, 93081 }, + { 0x5B36, 93084 }, + { 0x5B37, 93087 }, + { 0x5B38, 93090 }, + { 0x5B39, 93093 }, + { 0x5B3B, 93096 }, + { 0x5B3C, 93099 }, + { 0x5B3D, 93102 }, + { 0x5B3E, 93105 }, + { 0x5B3F, 93108 }, + { 0x5B40, 93111 }, + { 0x5B41, 93114 }, + { 0x5B42, 93117 }, + { 0x5B43, 93120 }, + { 0x5B44, 93123 }, + { 0x5B45, 93126 }, + { 0x5B46, 93129 }, + { 0x5B48, 93132 }, + { 0x5B49, 93135 }, + { 0x5B4A, 93138 }, + { 0x5B4B, 93141 }, + { 0x5B4C, 93144 }, + { 0x5B4D, 93147 }, + { 0x5B4E, 93150 }, + { 0x5B4F, 93153 }, + { 0x5B50, 93156 }, + { 0x5B51, 93159 }, + { 0x5B52, 93162 }, + { 0x5B53, 93165 }, + { 0x5B54, 93168 }, + { 0x5B56, 93171 }, + { 0x5B58, 93174 }, + { 0x5B59, 93177 }, + { 0x5B5A, 93180 }, + { 0x5B5B, 93183 }, + { 0x5B5C, 93186 }, + { 0x5B5D, 93189 }, + { 0x5B5E, 93192 }, + { 0x5B60, 93195 }, + { 0x5B61, 93198 }, + { 0x5B62, 93201 }, + { 0x5B63, 93204 }, + { 0x5B66, 93207 }, + { 0x5B6B, 93210 }, + { 0x5B6D, 93213 }, + { 0x5B6E, 93216 }, + { 0x5B6F, 93219 }, + { 0x5B70, 93222 }, + { 0x5B71, 93225 }, + { 0x5B72, 93228 }, + { 0x5B77, 93231 }, + { 0x5B78, 93234 }, + { 0x5B79, 93237 }, + { 0x5B83, 93240 }, + { 0x5B85, 93243 }, + { 0x5B8A, 93246 }, + { 0x5B8C, 93249 }, + { 0x5B91, 93252 }, + { 0x5B93, 93255 }, + { 0x5B97, 93258 }, + { 0x5B9B, 93261 }, + { 0x5B9C, 93264 }, + { 0x5B9D, 93267 }, + { 0x5B9E, 93270 }, + { 0x5BAD, 93273 }, + { 0x5BAE, 93276 }, + { 0x5BB1, 93279 }, + { 0x5BB4, 93282 }, + { 0x5BC6, 93285 }, + { 0x5BC8, 93288 }, + { 0x5BC9, 93291 }, + { 0x5BD1, 93294 }, + { 0x5BD8, 93297 }, + { 0x5BE8, 93300 }, + { 0x5BED, 93303 }, + { 0x5BF6, 93306 }, + { 0x5BF7, 93309 }, + { 0x5BFB, 93312 }, + { 0x5C05, 93315 }, + { 0x5C06, 93318 }, + { 0x5C10, 93321 }, + { 0x5C1F, 93324 }, + { 0x5C24, 93327 }, + { 0x5C26, 93330 }, + { 0x5C28, 93333 }, + { 0x5C2B, 93336 }, + { 0x5C31, 93339 }, + { 0x5C42, 93342 }, + { 0x5C44, 93345 }, + { 0x5C4E, 93348 }, + { 0x5C4F, 93351 }, + { 0x5C61, 93354 }, + { 0x5C68, 93357 }, + { 0x5C6C, 93360 }, + { 0x5C78, 93363 }, + { 0x5C79, 93366 }, + { 0x5C7A, 93369 }, + { 0x5C7B, 93372 }, + { 0x5C7C, 93375 }, + { 0x5C7D, 93378 }, + { 0x5C7E, 93381 }, + { 0x5C7F, 93384 }, + { 0x5C80, 93387 }, + { 0x5C82, 93390 }, + { 0x5C88, 93393 }, + { 0x5C89, 93396 }, + { 0x5C8E, 93399 }, + { 0x5C8F, 93402 }, + { 0x5C90, 93405 }, + { 0x5D44, 93408 }, + { 0x5C92, 93411 }, + { 0x5C93, 93414 }, + { 0x5C9C, 93417 }, + { 0x5C9D, 93420 }, + { 0x5C9E, 93423 }, + { 0x5C9F, 93426 }, + { 0x5CA0, 93429 }, + { 0x5CA1, 93432 }, + { 0x5CA2, 93435 }, + { 0x5CA3, 93438 }, + { 0x5CA4, 93441 }, + { 0x5CA5, 93444 }, + { 0x5CA6, 93447 }, + { 0x5CA7, 93450 }, + { 0x5CAB, 93453 }, + { 0x5CB1, 93456 }, + { 0x5CB3, 93459 }, + { 0x5CB5, 93462 }, + { 0x5CB7, 93465 }, + { 0x5CBA, 93468 }, + { 0x5CBF, 93471 }, + { 0x5CC3, 93474 }, + { 0x5CC7, 93477 }, + { 0x5CCE, 93480 }, + { 0x5CD0, 93483 }, + { 0x5CD5, 93486 }, + { 0x5CD9, 93489 }, + { 0x5CDB, 93492 }, + { 0x5CE2, 93495 }, + { 0x5CE8, 93498 }, + { 0x5CE9, 93501 }, + { 0x5CEC, 93504 }, + { 0x5CEF, 93507 }, + { 0x5CF1, 93510 }, + { 0x5CFB, 93513 }, + { 0x5CFC, 93516 }, + { 0x5CFD, 93519 }, + { 0x5CFE, 93522 }, + { 0x5D00, 93525 }, + { 0x5D01, 93528 }, + { 0x5D03, 93531 }, + { 0x5D05, 93534 }, + { 0x5D10, 93537 }, + { 0x5D11, 93540 }, + { 0x5D12, 93543 }, + { 0x5D13, 93546 }, + { 0x5D14, 93549 }, + { 0x5D15, 93552 }, + { 0x5D16, 93555 }, + { 0x5D17, 93558 }, + { 0x5D18, 93561 }, + { 0x5D1A, 93564 }, + { 0x5D1B, 93567 }, + { 0x5D1C, 93570 }, + { 0x5D1D, 93573 }, + { 0x5D1E, 93576 }, + { 0x5D1F, 93579 }, + { 0x5D20, 93582 }, + { 0x5D21, 93585 }, + { 0x5D29, 93588 }, + { 0x5D2A, 93591 }, + { 0x5D4F, 93594 }, + { 0x5D49, 93599 }, + { 0x5D47, 93605 }, + { 0x5D50, 93611 }, + { 0x5D4A, 93616 }, + { 0x5D48, 93622 }, + { 0x5D4E, 93628 }, + { 0x5D55, 93633 }, + { 0x5B3A, 93637 }, + { 0x5B47, 93640 }, + { 0x5B55, 93643 }, + { 0x5B57, 93646 }, + { 0x5B5F, 93649 }, + { 0x5B64, 93652 }, + { 0x5D4B, 93655 }, + { 0x5D6A, 93659 }, + { 0x5D67, 93663 }, + { 0x5D60, 93669 }, + { 0x5D68, 93675 }, + { 0x5D5F, 93683 }, + { 0x5D5C, 93690 }, + { 0x5D64, 93697 }, + { 0x5D5E, 93707 }, + { 0x5D62, 93713 }, + { 0x5D66, 93721 }, + { 0x5D65, 93729 }, + { 0x5D69, 93735 }, + { 0x5D63, 93743 }, + { 0x5D5D, 93750 }, + { 0x5D61, 93757 }, + { 0x5D45, 93767 }, + { 0x5D46, 93771 }, + { 0x5D6B, 93775 }, + { 0x5D6C, 93777 }, + { 0x5D6D, 93779 }, + { 0x5D6E, 93781 }, + { 0x5D6F, 93783 }, + { 0x5D70, 93785 }, + { 0x5D71, 93787 }, + { 0x5D72, 93789 }, + { 0x5D73, 93791 }, + { 0x5D74, 93793 }, + { 0x5D75, 93795 }, + { 0x5D76, 93797 }, + { 0x5D77, 93799 }, + { 0x5D78, 93801 }, + { 0x5D79, 93803 }, + { 0x5D7A, 93805 }, + { 0x5D7B, 93807 }, + { 0x5D7C, 93809 }, + { 0x5D7D, 93811 }, + { 0x5D7E, 93813 }, + { 0x5D7F, 93815 }, + { 0x5D80, 93817 }, + { 0x5D81, 93819 }, + { 0x5D82, 93821 }, + { 0x5D83, 93823 }, + { 0x5D84, 93825 }, + { 0x5D85, 93827 }, + { 0x5D86, 93829 }, + { 0x5D87, 93831 }, + { 0x5D88, 93833 }, + { 0x5D89, 93835 }, + { 0x5D8A, 93837 }, + { 0x5D8B, 93839 }, + { 0x5D8C, 93841 }, + { 0x5D8D, 93843 }, + { 0x5D8E, 93845 }, + { 0x5D8F, 93847 }, + { 0x5D90, 93849 }, + { 0x5D91, 93851 }, + { 0x5D92, 93853 }, + { 0x5D93, 93855 }, + { 0x5D94, 93857 }, + { 0x5D95, 93859 }, + { 0x5D96, 93861 }, + { 0x5D97, 93863 }, + { 0x5D98, 93865 }, + { 0x5D99, 93867 }, + { 0x5D9A, 93869 }, + { 0x5D9B, 93871 }, + { 0x5D9C, 93873 }, + { 0x5D9D, 93875 }, + { 0x5D9E, 93877 }, + { 0x5D9F, 93879 }, + { 0x5DA0, 93881 }, + { 0x5DA1, 93883 }, + { 0x5DA2, 93885 }, + { 0x5DA3, 93887 }, + { 0x5DA4, 93889 }, + { 0x5DA5, 93891 }, + { 0x5DA6, 93893 }, + { 0x5DA7, 93895 }, + { 0x5DA8, 93897 }, + { 0x5DA9, 93899 }, + { 0x5DAA, 93901 }, + { 0x5DAB, 93903 }, + { 0x5DAC, 93905 }, + { 0x5DAD, 93907 }, + { 0x5DAE, 93909 }, + { 0x5DAF, 93911 }, + { 0x5DB0, 93913 }, + { 0x5DB1, 93915 }, + { 0x5DB2, 93917 }, + { 0x5DB3, 93919 }, + { 0x5DB4, 93921 }, + { 0x5DB5, 93923 }, + { 0x5DB6, 93925 }, + { 0x5DB7, 93927 }, + { 0x5DB8, 93929 }, + { 0x5DB9, 93931 }, + { 0x5DBA, 93933 }, + { 0x5DBB, 93935 }, + { 0x5DBC, 93937 }, + { 0x5DBD, 93939 }, + { 0x5DBE, 93941 }, + { 0x5DBF, 93943 }, + { 0x5DC0, 93945 }, + { 0x5DC1, 93947 }, + { 0x5DC2, 93949 }, + { 0x5DC3, 93951 }, + { 0x5DC4, 93953 }, + { 0x5DC5, 93955 }, + { 0x5DC6, 93957 }, + { 0x5DC7, 93959 }, + { 0x5DC8, 93961 }, + { 0x5DC9, 93963 }, + { 0x5DCA, 93965 }, + { 0x5DCB, 93967 }, + { 0x5DCC, 93969 }, + { 0x5DCD, 93971 }, + { 0x5DCE, 93973 }, + { 0x5DCF, 93975 }, + { 0x5DD0, 93977 }, + { 0x5DD1, 93979 }, + { 0x5DD2, 93981 }, + { 0x5DD3, 93983 }, + { 0x5DD4, 93985 }, + { 0x5DD5, 93987 }, + { 0x5DD6, 93989 }, + { 0x5DD7, 93991 }, + { 0x5DD8, 93993 }, + { 0x5DD9, 93995 }, + { 0x5DDA, 93997 }, + { 0x5DDB, 93999 }, + { 0x5DDC, 94001 }, + { 0x5DDD, 94003 }, + { 0x5DDE, 94005 }, + { 0x5DDF, 94007 }, + { 0x5DE0, 94009 }, + { 0x5DE1, 94011 }, + { 0x5DE2, 94013 }, + { 0x5DE3, 94015 }, + { 0x5DE4, 94017 }, + { 0x5DE5, 94019 }, + { 0x5DE6, 94021 }, + { 0x5DE7, 94023 }, + { 0x5DE8, 94025 }, + { 0x5DE9, 94027 }, + { 0x5DEA, 94029 }, + { 0x5DEB, 94031 }, + { 0x5DEC, 94033 }, + { 0x5DED, 94035 }, + { 0x5DEE, 94037 }, + { 0x5DEF, 94039 }, + { 0x5DF0, 94041 }, + { 0x5DF1, 94043 }, + { 0x5DF2, 94045 }, + { 0x5DF3, 94047 }, + { 0x5DF4, 94049 }, + { 0x5DF5, 94051 }, + { 0x5DF6, 94053 }, + { 0x5DF7, 94055 }, + { 0x5DF8, 94057 }, + { 0x5DF9, 94059 }, + { 0x5DFA, 94061 }, + { 0x5DFB, 94063 }, + { 0x5DFC, 94065 }, + { 0x5DFD, 94067 }, + { 0x5DFE, 94069 }, + { 0x5DFF, 94071 }, + { 0x5E00, 94073 }, + { 0x5E01, 94075 }, + { 0x5E02, 94077 }, + { 0x5E03, 94079 }, + { 0x5E04, 94081 }, + { 0x5E05, 94083 }, + { 0x5E06, 94085 }, + { 0x5E07, 94087 }, + { 0x5E08, 94089 }, + { 0x5E09, 94091 }, + { 0x5E0A, 94093 }, + { 0x5E0B, 94095 }, + { 0x5E0C, 94097 }, + { 0x5E0D, 94099 }, + { 0x5E0E, 94101 }, + { 0x5E0F, 94103 }, + { 0x5E10, 94105 }, + { 0x5E11, 94107 }, + { 0x5E12, 94109 }, + { 0x5E13, 94111 }, + { 0x5E14, 94113 }, + { 0x5E15, 94115 }, + { 0x5E16, 94117 }, + { 0x5E17, 94119 }, + { 0x5E18, 94121 }, + { 0x5E19, 94123 }, + { 0x5E1A, 94125 }, + { 0x5E1B, 94127 }, + { 0x5E1C, 94129 }, + { 0x5E1D, 94131 }, + { 0x5E1E, 94133 }, + { 0x5E1F, 94135 }, + { 0x5E20, 94137 }, + { 0x5E21, 94139 }, + { 0x5E22, 94141 }, + { 0x5E23, 94143 }, + { 0x5E24, 94145 }, + { 0x5E25, 94147 }, + { 0x5E26, 94149 }, + { 0x5E27, 94151 }, + { 0x5E28, 94153 }, + { 0x5E29, 94155 }, + { 0x5E2A, 94157 }, + { 0x5E2B, 94159 }, + { 0x5E2C, 94161 }, + { 0x5E2D, 94163 }, + { 0x5E2E, 94165 }, + { 0x5E2F, 94167 }, + { 0x5E30, 94169 }, + { 0x5E31, 94171 }, + { 0x5E32, 94173 }, + { 0x5E33, 94175 }, + { 0x5E34, 94177 }, + { 0x5E35, 94179 }, + { 0x5E36, 94181 }, + { 0x5E37, 94183 }, + { 0x5E38, 94185 }, + { 0x5E39, 94187 }, + { 0x5E3A, 94189 }, + { 0x5E3B, 94191 }, + { 0x5E3C, 94193 }, + { 0x5E3D, 94195 }, + { 0x5E3E, 94197 }, + { 0x5E3F, 94199 }, + { 0x5E40, 94201 }, + { 0x5E41, 94203 }, + { 0x5E42, 94205 }, + { 0x5E43, 94207 }, + { 0x5E44, 94209 }, + { 0x5E45, 94211 }, + { 0x5E46, 94213 }, + { 0x5E47, 94215 }, + { 0x5E48, 94217 }, + { 0x5E49, 94219 }, + { 0x5E4A, 94221 }, + { 0x5E4B, 94223 }, + { 0x5E4C, 94225 }, + { 0x5E4D, 94227 }, + { 0x5E4E, 94229 }, + { 0x5E4F, 94231 }, + { 0x5E50, 94233 }, + { 0x5E51, 94235 }, + { 0x5E52, 94237 }, + { 0x5E53, 94239 }, + { 0x5E54, 94241 }, + { 0x5E55, 94243 }, + { 0x5E56, 94245 }, + { 0x5E57, 94247 }, + { 0x5E58, 94249 }, + { 0x5E59, 94251 }, + { 0x5E5A, 94253 }, + { 0x5E5B, 94255 }, + { 0x5E5C, 94257 }, + { 0x5E5D, 94259 }, + { 0x5E5E, 94261 }, + { 0x5E5F, 94263 }, + { 0x5E60, 94265 }, + { 0x5E61, 94267 }, + { 0x5E62, 94269 }, + { 0x5E63, 94271 }, + { 0x5E64, 94273 }, + { 0x5E65, 94275 }, + { 0x5E66, 94277 }, + { 0x5E67, 94279 }, + { 0x5E68, 94281 }, + { 0x5E69, 94283 }, + { 0x5E6A, 94285 }, + { 0x5E6B, 94287 }, + { 0x5E6C, 94289 }, + { 0x5E6D, 94291 }, + { 0x5E6E, 94293 }, + { 0x5E6F, 94295 }, + { 0x5E70, 94297 }, + { 0x5E71, 94299 }, + { 0x5E72, 94301 }, + { 0x5E73, 94303 }, + { 0x5E74, 94305 }, + { 0x5E75, 94307 }, + { 0x5E76, 94309 }, + { 0x5E77, 94311 }, + { 0x5E78, 94313 }, + { 0x5E79, 94315 }, + { 0x5E7A, 94317 }, + { 0x5E7B, 94319 }, + { 0x5E7C, 94321 }, + { 0x5E7D, 94323 }, + { 0x5E7E, 94325 }, + { 0x5E7F, 94327 }, + { 0x5E80, 94329 }, + { 0x5E81, 94331 }, + { 0x5E82, 94333 }, + { 0x5E83, 94335 }, + { 0x5E84, 94337 }, + { 0x5E85, 94339 }, + { 0x5E86, 94341 }, + { 0x5E87, 94343 }, + { 0x5E88, 94345 }, + { 0x5E89, 94347 }, + { 0x5E8A, 94349 }, + { 0x5E8B, 94351 }, + { 0x5E8C, 94353 }, + { 0x5E8D, 94355 }, + { 0x5E8E, 94357 }, + { 0x5E8F, 94359 }, + { 0x5E90, 94361 }, + { 0x5E91, 94363 }, + { 0x5E92, 94365 }, + { 0x5E93, 94367 }, + { 0x5E94, 94369 }, + { 0x5E95, 94371 }, + { 0x5E96, 94373 }, + { 0x5E97, 94375 }, + { 0x5E98, 94377 }, + { 0x5E99, 94379 }, + { 0x5E9A, 94381 }, + { 0x5E9B, 94383 }, + { 0x5E9C, 94385 }, + { 0x5E9D, 94387 }, + { 0x5E9E, 94389 }, + { 0x5E9F, 94391 }, + { 0x5EA0, 94393 }, + { 0x5EA1, 94395 }, + { 0x5EA2, 94397 }, + { 0x5EA3, 94399 }, + { 0x5EA4, 94401 }, + { 0x5EA5, 94403 }, + { 0x5EA6, 94405 }, + { 0x5EA7, 94407 }, + { 0x5EA8, 94409 }, + { 0x5EA9, 94411 }, + { 0x5EAA, 94413 }, + { 0x5EAB, 94415 }, + { 0x5EAC, 94417 }, + { 0x5EAD, 94419 }, + { 0x5EAE, 94421 }, + { 0x5EAF, 94423 }, + { 0x5EB0, 94425 }, + { 0x5EB1, 94427 }, + { 0x5EB2, 94429 }, + { 0x5EB3, 94431 }, + { 0x5EB4, 94433 }, + { 0x5EB5, 94435 }, + { 0x5EB6, 94437 }, + { 0x5EB7, 94439 }, + { 0x5EB8, 94441 }, + { 0x5EB9, 94443 }, + { 0x5EBA, 94445 }, + { 0x5EBB, 94447 }, + { 0x5EBC, 94449 }, + { 0x5EBD, 94451 }, + { 0x5EBE, 94453 }, + { 0x5EBF, 94455 }, + { 0x5EC0, 94457 }, + { 0x5EC1, 94459 }, + { 0x5EC2, 94461 }, + { 0x5EC3, 94463 }, + { 0x5EC4, 94465 }, + { 0x5EC5, 94467 }, + { 0x5EC6, 94469 }, + { 0x5EC7, 94471 }, + { 0x5EC8, 94473 }, + { 0x5EC9, 94475 }, + { 0x5ECA, 94477 }, + { 0x5ECB, 94479 }, + { 0x5ECC, 94481 }, + { 0x5ECD, 94483 }, + { 0x5ECE, 94485 }, + { 0x5ECF, 94487 }, + { 0x5ED0, 94489 }, + { 0x5ED1, 94491 }, + { 0x5ED2, 94493 }, + { 0x5ED3, 94495 }, + { 0x5ED4, 94497 }, + { 0x5ED5, 94499 }, + { 0x5ED6, 94501 }, + { 0x5ED7, 94503 }, + { 0x5ED8, 94505 }, + { 0x5ED9, 94507 }, + { 0x5EDA, 94509 }, + { 0x5EDB, 94511 }, + { 0x5EDC, 94513 }, + { 0x5EDD, 94515 }, + { 0x5EDE, 94517 }, + { 0x5EDF, 94519 }, + { 0x5EE0, 94521 }, + { 0x5EE1, 94523 }, + { 0x5EE2, 94525 }, + { 0x5EE3, 94527 }, + { 0x5EE4, 94529 }, + { 0x5EE5, 94531 }, + { 0x5EE6, 94533 }, + { 0x5EE7, 94535 }, + { 0x5EE8, 94537 }, + { 0x5EE9, 94539 }, + { 0x5EEA, 94541 }, + { 0x5EEB, 94543 }, + { 0x5EEC, 94545 }, + { 0x5EED, 94547 }, + { 0x5EEE, 94549 }, + { 0x5EEF, 94551 }, + { 0x5EF0, 94553 }, + { 0x5EF1, 94555 }, + { 0x5EF2, 94557 }, + { 0x5EF3, 94559 }, + { 0x5EF4, 94561 }, + { 0x5EF5, 94563 }, + { 0x5EF6, 94565 }, + { 0x5EF7, 94567 }, + { 0x5EF8, 94569 }, + { 0x5EF9, 94571 }, + { 0x5EFA, 94573 }, + { 0x5EFB, 94575 }, + { 0x5EFC, 94577 }, + { 0x5EFD, 94579 }, + { 0x5EFE, 94581 }, + { 0x5EFF, 94583 }, + { 0x5F00, 94585 }, + { 0x5F01, 94587 }, + { 0x5F02, 94589 }, + { 0x5F03, 94591 }, + { 0x5F04, 94593 }, + { 0x5F05, 94595 }, + { 0x5F06, 94597 }, + { 0x5F07, 94599 }, + { 0x5F08, 94601 }, + { 0x5F09, 94603 }, + { 0x5F0A, 94605 }, + { 0x5F0B, 94607 }, + { 0x5F0C, 94609 }, + { 0x5F0D, 94611 }, + { 0x5F0E, 94613 }, + { 0x5F0F, 94615 }, + { 0x5F10, 94617 }, + { 0x5F11, 94619 }, + { 0x5F12, 94621 }, + { 0x5F13, 94623 }, + { 0x5F14, 94625 }, + { 0x5F15, 94627 }, + { 0x5F16, 94629 }, + { 0x5F17, 94631 }, + { 0x5F18, 94633 }, + { 0x5F19, 94635 }, + { 0x5F1A, 94637 }, + { 0x5F1B, 94639 }, + { 0x5F1C, 94641 }, + { 0x5F1D, 94643 }, + { 0x5F1E, 94645 }, + { 0x5F1F, 94647 }, + { 0x5F20, 94649 }, + { 0x5F21, 94651 }, + { 0x5F22, 94653 }, + { 0x5F23, 94655 }, + { 0x5F24, 94657 }, + { 0x5F25, 94659 }, + { 0x5F26, 94661 }, + { 0x5F27, 94663 }, + { 0x5F28, 94665 }, + { 0x5F29, 94667 }, + { 0x5F2A, 94669 }, + { 0x5F2B, 94671 }, + { 0x5F2C, 94673 }, + { 0x5F2D, 94675 }, + { 0x5F2E, 94677 }, + { 0x5F2F, 94679 }, + { 0x5F30, 94681 }, + { 0x5F31, 94683 }, + { 0x5F32, 94685 }, + { 0x5F33, 94687 }, + { 0x5F34, 94689 }, + { 0x5F35, 94691 }, + { 0x5F36, 94693 }, + { 0x5F37, 94695 }, + { 0x5F38, 94697 }, + { 0x5F39, 94699 }, + { 0x5F3A, 94701 }, + { 0x5F3B, 94703 }, + { 0x5F3C, 94705 }, + { 0x5F3D, 94707 }, + { 0x5F3E, 94709 }, + { 0x5F3F, 94711 }, + { 0x5F40, 94713 }, + { 0x5F41, 94715 }, + { 0x5F42, 94717 }, + { 0x5F43, 94719 }, + { 0x5F44, 94721 }, + { 0x5F45, 94723 }, + { 0x5F46, 94725 }, + { 0x5F47, 94727 }, + { 0x5F48, 94729 }, + { 0x5F49, 94731 }, + { 0x5F4A, 94733 }, + { 0x5F4B, 94735 }, + { 0x5F4C, 94737 }, + { 0x5F4D, 94739 }, + { 0x5F4E, 94741 }, + { 0x5F4F, 94743 }, + { 0x5F50, 94745 }, + { 0x5F51, 94747 }, + { 0x5F52, 94749 }, + { 0x5F53, 94751 }, + { 0x5F54, 94753 }, + { 0x5F55, 94755 }, + { 0x5F56, 94757 }, + { 0x5F57, 94759 }, + { 0x5F58, 94761 }, + { 0x5F59, 94763 }, + { 0x5F5A, 94765 }, + { 0x5F5B, 94767 }, + { 0x5F5C, 94769 }, + { 0x5F5D, 94771 }, + { 0x5F5E, 94773 }, + { 0x5F5F, 94775 }, + { 0x5F60, 94777 }, + { 0x5F61, 94779 }, + { 0x5F62, 94781 }, + { 0x5F63, 94783 }, + { 0x5F64, 94785 }, + { 0x5F65, 94787 }, + { 0x5F66, 94789 }, + { 0x5F67, 94791 }, + { 0x5F68, 94793 }, + { 0x5F69, 94795 }, + { 0x5F6A, 94797 }, + { 0x5F6B, 94799 }, + { 0x5F6C, 94801 }, + { 0x5F6D, 94803 }, + { 0x5F6E, 94805 }, + { 0x5F6F, 94807 }, + { 0x5F70, 94809 }, + { 0x5F71, 94811 }, + { 0x5F72, 94813 }, + { 0x5F73, 94815 }, + { 0x5F74, 94817 }, + { 0x5F75, 94819 }, + { 0x5F76, 94821 }, + { 0x5F77, 94823 }, + { 0x5F78, 94825 }, + { 0x5F79, 94827 }, + { 0x5F7A, 94829 }, + { 0x5F7B, 94831 }, + { 0x5F7C, 94833 }, + { 0x5F7D, 94835 }, + { 0x5F7E, 94837 }, + { 0x5F7F, 94839 }, + { 0x5F80, 94841 }, + { 0x5F81, 94843 }, + { 0x5F82, 94845 }, + { 0x5F83, 94847 }, + { 0x5F84, 94849 }, + { 0x5F85, 94851 }, + { 0x5F86, 94853 }, + { 0x5F87, 94855 }, + { 0x5F88, 94857 }, + { 0x5F89, 94859 }, + { 0x5F8A, 94861 }, + { 0x5F8B, 94863 }, + { 0x5F8C, 94865 }, + { 0x5F8D, 94867 }, + { 0x5F8E, 94869 }, + { 0x5F8F, 94871 }, + { 0x5F90, 94873 }, + { 0x5F91, 94875 }, + { 0x5F92, 94877 }, + { 0x5F93, 94879 }, + { 0x5F94, 94881 }, + { 0x5F95, 94883 }, + { 0x5F96, 94885 }, + { 0x5F97, 94887 }, + { 0x5F98, 94889 }, + { 0x5F99, 94891 }, + { 0x5F9A, 94893 }, + { 0x5F9B, 94895 }, + { 0x5F9C, 94897 }, + { 0x5F9D, 94899 }, + { 0x5F9E, 94901 }, + { 0x5F9F, 94903 }, + { 0x5FA0, 94905 }, + { 0x5FA1, 94907 }, + { 0x5FA2, 94909 }, + { 0x5FA3, 94911 }, + { 0x5FA4, 94913 }, + { 0x5FA5, 94915 }, + { 0x5FA6, 94917 }, + { 0x5FA7, 94919 }, + { 0x5FA8, 94921 }, + { 0x5FA9, 94923 }, + { 0x5FAA, 94925 }, + { 0x5FAB, 94927 }, + { 0x5FAC, 94929 }, + { 0x5FAD, 94931 }, + { 0x5FAE, 94933 }, + { 0x5FAF, 94935 }, + { 0x5FB0, 94937 }, + { 0x5FB1, 94939 }, + { 0x5FB2, 94941 }, + { 0x5FB3, 94943 }, + { 0x5FB4, 94945 }, + { 0x5FB5, 94947 }, + { 0x5FB6, 94949 }, + { 0x5FB7, 94951 }, + { 0x5FB8, 94953 }, + { 0x5FB9, 94955 }, + { 0x5FBA, 94957 }, + { 0x5FBB, 94959 }, + { 0x5FBC, 94961 }, + { 0x5FBD, 94963 }, + { 0x5FBE, 94965 }, + { 0x5FBF, 94967 }, + { 0x5FC0, 94969 }, + { 0x5FC1, 94971 }, + { 0x5FC2, 94973 }, + { 0x5FC3, 94975 }, + { 0x5FC4, 94977 }, + { 0x5FC5, 94979 }, + { 0x5FC6, 94981 }, + { 0x5FC7, 94983 }, + { 0x5FC8, 94985 }, + { 0x5FC9, 94987 }, + { 0x5FCA, 94989 }, + { 0x5FCB, 94991 }, + { 0x5FCC, 94993 }, + { 0x5FCD, 94995 }, + { 0x5FCE, 94997 }, + { 0x5FCF, 94999 }, + { 0x5FD0, 95001 }, + { 0x5FD1, 95003 }, + { 0x5FD2, 95005 }, + { 0x5FD3, 95007 }, + { 0x5FD4, 95009 }, + { 0x5FD5, 95011 }, + { 0x5FD6, 95013 }, + { 0x5FD7, 95015 }, + { 0x5FD8, 95017 }, + { 0x5FD9, 95019 }, + { 0x5FDA, 95021 }, + { 0x5FDB, 95023 }, + { 0x5FDC, 95025 }, + { 0x5FDD, 95027 }, + { 0x5FDE, 95029 }, + { 0x5FDF, 95031 }, + { 0x5FE0, 95033 }, + { 0x5FE1, 95035 }, + { 0x5FE2, 95037 }, + { 0x5FE3, 95039 }, + { 0x5FE4, 95041 }, + { 0x5FE5, 95043 }, + { 0x5FE6, 95045 }, + { 0x5FE7, 95047 }, + { 0x5FE8, 95049 }, + { 0x5FE9, 95051 }, + { 0x5FEA, 95053 }, + { 0x5FEB, 95055 }, + { 0x5FEC, 95057 }, + { 0x5FED, 95059 }, + { 0x5FEE, 95061 }, + { 0x5FEF, 95063 }, + { 0x5FF0, 95065 }, + { 0x5FF1, 95067 }, + { 0x5FF2, 95069 }, + { 0x5FF3, 95071 }, + { 0x5FF4, 95073 }, + { 0x5FF5, 95075 }, + { 0x5FF6, 95077 }, + { 0x5FF7, 95079 }, + { 0x5FF8, 95081 }, + { 0x5FF9, 95083 }, + { 0x5FFA, 95085 }, + { 0x5FFB, 95087 }, + { 0x5FFC, 95089 }, + { 0x5FFD, 95091 }, + { 0x5FFE, 95093 }, + { 0x5FFF, 95095 }, + { 0x6000, 95097 }, + { 0x6001, 95099 }, + { 0x6002, 95101 }, + { 0x6003, 95103 }, + { 0x6004, 95105 }, + { 0x6005, 95107 }, + { 0x6006, 95109 }, + { 0x6007, 95111 }, + { 0x6008, 95113 }, + { 0x6009, 95115 }, + { 0x600A, 95117 }, + { 0x600B, 95119 }, + { 0x600C, 95121 }, + { 0x600D, 95123 }, + { 0x600E, 95125 }, + { 0x600F, 95127 }, + { 0x6010, 95129 }, + { 0x6011, 95131 }, + { 0x6012, 95133 }, + { 0x6013, 95135 }, + { 0x6014, 95137 }, + { 0x6015, 95139 }, + { 0x6016, 95141 }, + { 0x6017, 95143 }, + { 0x6018, 95145 }, + { 0x6019, 95147 }, + { 0x601A, 95149 }, + { 0x601B, 95151 }, + { 0x601C, 95153 }, + { 0x601D, 95155 }, + { 0x601E, 95157 }, + { 0x601F, 95159 }, + { 0x6020, 95161 }, + { 0x6021, 95163 }, + { 0x6022, 95165 }, + { 0x6023, 95167 }, + { 0x6024, 95169 }, + { 0x6025, 95171 }, + { 0x6026, 95173 }, + { 0x6027, 95175 }, + { 0x6028, 95177 }, + { 0x6029, 95179 }, + { 0x602A, 95181 }, + { 0x602B, 95183 }, + { 0x602C, 95185 }, + { 0x602D, 95187 }, + { 0x602E, 95189 }, + { 0x602F, 95191 }, + { 0x6030, 95193 }, + { 0x6031, 95195 }, + { 0x6032, 95197 }, + { 0x6033, 95199 }, + { 0x6034, 95201 }, + { 0x6035, 95203 }, + { 0x6036, 95205 }, + { 0x6037, 95207 }, + { 0x6038, 95209 }, + { 0x6039, 95211 }, + { 0x603A, 95213 }, + { 0x603B, 95215 }, + { 0x603C, 95217 }, + { 0x603D, 95219 }, + { 0x603E, 95221 }, + { 0x603F, 95223 }, + { 0x6040, 95225 }, + { 0x6041, 95227 }, + { 0x6042, 95229 }, + { 0x6043, 95231 }, + { 0x6044, 95233 }, + { 0x6045, 95235 }, + { 0x6046, 95237 }, + { 0x6047, 95239 }, + { 0x6048, 95241 }, + { 0x6049, 95243 }, + { 0x604A, 95245 }, + { 0x604B, 95247 }, + { 0x604C, 95249 }, + { 0x604D, 95251 }, + { 0x604E, 95253 }, + { 0x604F, 95255 }, + { 0x6050, 95257 }, + { 0x6051, 95259 }, + { 0x6052, 95261 }, + { 0x6053, 95263 }, + { 0x6054, 95265 }, + { 0x6055, 95267 }, + { 0x6056, 95269 }, + { 0x6057, 95271 }, + { 0x6058, 95273 }, + { 0x6059, 95275 }, + { 0x605A, 95277 }, + { 0x605B, 95279 }, + { 0x605C, 95281 }, + { 0x605D, 95283 }, + { 0x605E, 95285 }, + { 0x605F, 95287 }, + { 0x6060, 95289 }, + { 0x6061, 95291 }, + { 0x6062, 95293 }, + { 0x6063, 95295 }, + { 0x6064, 95297 }, + { 0x6065, 95299 }, + { 0x6066, 95301 }, + { 0x6067, 95303 }, + { 0x6068, 95305 }, + { 0x6069, 95307 }, + { 0x606A, 95309 }, + { 0x606B, 95311 }, + { 0x606C, 95313 }, + { 0x606D, 95315 }, + { 0x606E, 95317 }, + { 0x606F, 95319 }, + { 0x6070, 95321 }, + { 0x6071, 95323 }, + { 0x6072, 95325 }, + { 0x6073, 95327 }, + { 0x6074, 95329 }, + { 0x6075, 95331 }, + { 0x6076, 95333 }, + { 0x6077, 95335 }, + { 0x6078, 95337 }, + { 0x6079, 95339 }, + { 0x607A, 95341 }, + { 0x607B, 95343 }, + { 0x607C, 95345 }, + { 0x607D, 95347 }, + { 0x607E, 95349 }, + { 0x607F, 95351 }, + { 0x6080, 95353 }, + { 0x6081, 95355 }, + { 0x6082, 95357 }, + { 0x6083, 95359 }, + { 0x6084, 95361 }, + { 0x6085, 95363 }, + { 0x6086, 95365 }, + { 0x6087, 95367 }, + { 0x6088, 95369 }, + { 0x6089, 95371 }, + { 0x608A, 95373 }, + { 0x608B, 95375 }, + { 0x608C, 95377 }, + { 0x608D, 95379 }, + { 0x608E, 95381 }, + { 0x608F, 95383 }, + { 0x6090, 95385 }, + { 0x6091, 95387 }, + { 0x6092, 95389 }, + { 0x6093, 95391 }, + { 0x6094, 95393 }, + { 0x6095, 95395 }, + { 0x6096, 95397 }, + { 0x6097, 95399 }, + { 0x6098, 95401 }, + { 0x6099, 95403 }, + { 0x609A, 95405 }, + { 0x609B, 95407 }, + { 0x609C, 95409 }, + { 0x609D, 95411 }, + { 0x609E, 95413 }, + { 0x609F, 95415 }, + { 0x60A0, 95417 }, + { 0x60A1, 95419 }, + { 0x60A2, 95421 }, + { 0x60A3, 95423 }, + { 0x60A4, 95425 }, + { 0x60A5, 95427 }, + { 0x60A6, 95429 }, + { 0x60A7, 95431 }, + { 0x60A8, 95433 }, + { 0x60A9, 95435 }, + { 0x60AA, 95437 }, + { 0x60AB, 95439 }, + { 0x60AC, 95441 }, + { 0x60AD, 95443 }, + { 0x60AE, 95445 }, + { 0x60AF, 95447 }, + { 0x60B0, 95449 }, + { 0x60B1, 95451 }, + { 0x60B2, 95453 }, + { 0x60B3, 95455 }, + { 0x60B4, 95457 }, + { 0x60B5, 95459 }, + { 0x60B6, 95461 }, + { 0x60B7, 95463 }, + { 0x60B8, 95465 }, + { 0x60B9, 95467 }, + { 0x60BA, 95469 }, + { 0x60BB, 95471 }, + { 0x60BC, 95473 }, + { 0x60BD, 95475 }, + { 0x60BE, 95477 }, + { 0x60BF, 95479 }, + { 0x60C0, 95481 }, + { 0x60C1, 95483 }, + { 0x60C2, 95485 }, + { 0x60C3, 95487 }, + { 0x60C4, 95489 }, + { 0x60C5, 95491 }, + { 0x60C6, 95493 }, + { 0x60C7, 95495 }, + { 0x60C8, 95497 }, + { 0x60C9, 95499 }, + { 0x60CA, 95501 }, + { 0x60CB, 95503 }, + { 0x60CC, 95505 }, + { 0x60CD, 95507 }, + { 0x60CE, 95509 }, + { 0x60CF, 95511 }, + { 0x60D0, 95513 }, + { 0x60D1, 95515 }, + { 0x60D2, 95517 }, + { 0x60D3, 95519 }, + { 0x60D4, 95521 }, + { 0x60D5, 95523 }, + { 0x60D6, 95525 }, + { 0x60D7, 95527 }, + { 0x60D8, 95529 }, + { 0x60D9, 95531 }, + { 0x60DA, 95533 }, + { 0x60DB, 95535 }, + { 0x60DC, 95537 }, + { 0x60DD, 95539 }, + { 0x60DE, 95541 }, + { 0x60DF, 95543 }, + { 0x60E0, 95545 }, + { 0x60E1, 95547 }, + { 0x60E2, 95549 }, + { 0x60E3, 95551 }, + { 0x60E4, 95553 }, + { 0x60E5, 95555 }, + { 0x60E6, 95557 }, + { 0x60E7, 95559 }, + { 0x60E8, 95561 }, + { 0x60E9, 95563 }, + { 0x60EA, 95565 }, + { 0x60EB, 95567 }, + { 0x60EC, 95569 }, + { 0x60ED, 95571 }, + { 0x60EE, 95573 }, + { 0x60EF, 95575 }, + { 0x60F0, 95577 }, + { 0x60F1, 95579 }, + { 0x60F2, 95581 }, + { 0x60F3, 95583 }, + { 0x60F4, 95585 }, + { 0x60F5, 95587 }, + { 0x60F6, 95589 }, + { 0x60F7, 95591 }, + { 0x60F8, 95593 }, + { 0x60F9, 95595 }, + { 0x60FA, 95597 }, + { 0x60FB, 95599 }, + { 0x60FC, 95601 }, + { 0x60FD, 95603 }, + { 0x60FE, 95605 }, + { 0x60FF, 95607 }, + { 0x6100, 95609 }, + { 0x6101, 95611 }, + { 0x6102, 95613 }, + { 0x6103, 95615 }, + { 0x6104, 95617 }, + { 0x6105, 95619 }, + { 0x6106, 95621 }, + { 0x6107, 95623 }, + { 0x6108, 95625 }, + { 0x6109, 95627 }, + { 0x610A, 95629 }, + { 0x610B, 95631 }, + { 0x610C, 95633 }, + { 0x610D, 95635 }, + { 0x610E, 95637 }, + { 0x610F, 95639 }, + { 0x6110, 95641 }, + { 0x6111, 95643 }, + { 0x6112, 95645 }, + { 0x6113, 95647 }, + { 0x6114, 95649 }, + { 0x6115, 95651 }, + { 0x6116, 95653 }, + { 0x6117, 95655 }, + { 0x6118, 95657 }, + { 0x6119, 95659 }, + { 0x611A, 95661 }, + { 0x611B, 95663 }, + { 0x611C, 95665 }, + { 0x611D, 95667 }, + { 0x611E, 95669 }, + { 0x611F, 95671 }, + { 0x6120, 95673 }, + { 0x6121, 95675 }, + { 0x6122, 95677 }, + { 0x6123, 95679 }, + { 0x6124, 95681 }, + { 0x6125, 95683 }, + { 0x6126, 95685 }, + { 0x6127, 95687 }, + { 0x6128, 95689 }, + { 0x6129, 95691 }, + { 0x612A, 95693 }, + { 0x612B, 95695 }, + { 0x612C, 95697 }, + { 0x612D, 95699 }, + { 0x612E, 95701 }, + { 0x612F, 95703 }, + { 0x6130, 95705 }, + { 0x6131, 95707 }, + { 0x6132, 95709 }, + { 0x6133, 95711 }, + { 0x6134, 95713 }, + { 0x6135, 95715 }, + { 0x6136, 95717 }, + { 0x6137, 95719 }, + { 0x6138, 95721 }, + { 0x6139, 95723 }, + { 0x613A, 95725 }, + { 0x613B, 95727 }, + { 0x613C, 95729 }, + { 0x613D, 95731 }, + { 0x613E, 95733 }, + { 0x613F, 95735 }, + { 0x6140, 95737 }, + { 0x6141, 95739 }, + { 0x6142, 95741 }, + { 0x6143, 95743 }, + { 0x6144, 95745 }, + { 0x6145, 95747 }, + { 0x6146, 95749 }, + { 0x6147, 95751 }, + { 0x6148, 95753 }, + { 0x6149, 95755 }, + { 0x614A, 95757 }, + { 0x614B, 95759 }, + { 0x614C, 95761 }, + { 0x614D, 95763 }, + { 0x614E, 95765 }, + { 0x614F, 95767 }, + { 0x6150, 95769 }, + { 0x6151, 95771 }, + { 0x6152, 95773 }, + { 0x6153, 95775 }, + { 0x6154, 95777 }, + { 0x6155, 95779 }, + { 0x6156, 95781 }, + { 0x6157, 95783 }, + { 0x6158, 95785 }, + { 0x6159, 95787 }, + { 0x615A, 95789 }, + { 0x615B, 95791 }, + { 0x615C, 95793 }, + { 0x615D, 95795 }, + { 0x615E, 95797 }, + { 0x615F, 95799 }, + { 0x6160, 95801 }, + { 0x6161, 95803 }, + { 0x6162, 95805 }, + { 0x6163, 95807 }, + { 0x6164, 95809 }, + { 0x6165, 95811 }, + { 0x6166, 95813 }, + { 0x6167, 95815 }, + { 0x6168, 95817 }, + { 0x6169, 95819 }, + { 0x616A, 95821 }, + { 0x616B, 95823 }, + { 0x616C, 95825 }, + { 0x616D, 95827 }, + { 0x616E, 95829 }, + { 0x616F, 95831 }, + { 0x6170, 95833 }, + { 0x6171, 95835 }, + { 0x6172, 95837 }, + { 0x6173, 95839 }, + { 0x6174, 95841 }, + { 0x6175, 95843 }, + { 0x6176, 95845 }, + { 0x6177, 95847 }, + { 0x6178, 95849 }, + { 0x6179, 95851 }, + { 0x617A, 95853 }, + { 0x617B, 95855 }, + { 0x617C, 95857 }, + { 0x617D, 95859 }, + { 0x617E, 95861 }, + { 0x617F, 95863 }, + { 0x6180, 95865 }, + { 0x6181, 95867 }, + { 0x6182, 95869 }, + { 0x6183, 95871 }, + { 0x6184, 95873 }, + { 0x6185, 95875 }, + { 0x6186, 95877 }, + { 0x6187, 95879 }, + { 0x6188, 95881 }, + { 0x6189, 95883 }, + { 0x618A, 95885 }, + { 0x618B, 95887 }, + { 0x618C, 95889 }, + { 0x618D, 95891 }, + { 0x618E, 95893 }, + { 0x618F, 95895 }, + { 0x6190, 95897 }, + { 0x6191, 95899 }, + { 0x6192, 95901 }, + { 0x6193, 95903 }, + { 0x6194, 95905 }, + { 0x6195, 95907 }, + { 0x6196, 95909 }, + { 0x6197, 95911 }, + { 0x6198, 95913 }, + { 0x6199, 95915 }, + { 0x619A, 95917 }, + { 0x619B, 95919 }, + { 0x619C, 95921 }, + { 0x619D, 95923 }, + { 0x619E, 95925 }, + { 0x619F, 95927 }, + { 0x61A0, 95929 }, + { 0x61A1, 95931 }, + { 0x61A2, 95933 }, + { 0x61A3, 95935 }, + { 0x61A4, 95937 }, + { 0x61A5, 95939 }, + { 0x61A6, 95941 }, + { 0x61A7, 95943 }, + { 0x61A8, 95945 }, + { 0x61A9, 95947 }, + { 0x61AA, 95949 }, + { 0x61AB, 95951 }, + { 0x61AC, 95953 }, + { 0x61AD, 95955 }, + { 0x61AE, 95957 }, + { 0x61AF, 95959 }, + { 0x61B0, 95961 }, + { 0x61B1, 95963 }, + { 0x61B2, 95965 }, + { 0x61B3, 95967 }, + { 0x61B4, 95969 }, + { 0x61B5, 95971 }, + { 0x61B6, 95973 }, + { 0x61B7, 95975 }, + { 0x61B8, 95977 }, + { 0x61B9, 95979 }, + { 0x61BA, 95981 }, + { 0x61BB, 95983 }, + { 0x61BC, 95985 }, + { 0x61BD, 95987 }, + { 0x61BE, 95989 }, + { 0x61BF, 95991 }, + { 0x61C0, 95993 }, + { 0x61C1, 95995 }, + { 0x61C2, 95997 }, + { 0x61C3, 95999 }, + { 0x61C4, 96001 }, + { 0x61C5, 96003 }, + { 0x61C6, 96005 }, + { 0x61C7, 96007 }, + { 0x61C8, 96009 }, + { 0x61C9, 96011 }, + { 0x61CA, 96013 }, + { 0x61CB, 96015 }, + { 0x61CC, 96017 }, + { 0x61CD, 96019 }, + { 0x61CE, 96021 }, + { 0x61CF, 96023 }, + { 0x61D0, 96025 }, + { 0x61D1, 96027 }, + { 0x61D2, 96029 }, + { 0x61D3, 96031 }, + { 0x61D4, 96033 }, + { 0x61D5, 96035 }, + { 0x61D6, 96037 }, + { 0x61D7, 96039 }, + { 0x61D8, 96041 }, + { 0x61D9, 96043 }, + { 0x61DA, 96045 }, + { 0x61DB, 96047 }, + { 0x61DC, 96049 }, + { 0x61DD, 96051 }, + { 0x61DE, 96053 }, + { 0x61DF, 96055 }, + { 0x61E0, 96057 }, + { 0x61E1, 96059 }, + { 0x61E2, 96061 }, + { 0x61E3, 96063 }, + { 0x61E4, 96065 }, + { 0x61E5, 96067 }, + { 0x61E6, 96069 }, + { 0x61E7, 96071 }, + { 0x61E8, 96073 }, + { 0x61E9, 96075 }, + { 0x61EA, 96077 }, + { 0x61EB, 96079 }, + { 0x61EC, 96081 }, + { 0x61ED, 96083 }, + { 0x61EE, 96085 }, + { 0x61EF, 96087 }, + { 0x61F0, 96089 }, + { 0x61F1, 96091 }, + { 0x61F2, 96093 }, + { 0x61F3, 96095 }, + { 0x61F4, 96097 }, + { 0x61F5, 96099 }, + { 0x61F6, 96101 }, + { 0x61F7, 96103 }, + { 0x61F8, 96105 }, + { 0x61F9, 96107 }, + { 0x61FA, 96109 }, + { 0x61FB, 96111 }, + { 0x61FC, 96113 }, + { 0x61FD, 96115 }, + { 0x61FE, 96117 }, + { 0x61FF, 96119 }, + { 0x6200, 96121 }, + { 0x6201, 96123 }, + { 0x6202, 96125 }, + { 0x6203, 96127 }, + { 0x6204, 96129 }, + { 0x6205, 96131 }, + { 0x6206, 96133 }, + { 0x6207, 96135 }, + { 0x6208, 96137 }, + { 0x6209, 96139 }, + { 0x620A, 96141 }, + { 0x620B, 96143 }, + { 0x620C, 96145 }, + { 0x620D, 96147 }, + { 0x620E, 96149 }, + { 0x620F, 96151 }, + { 0x6210, 96153 }, + { 0x6211, 96155 }, + { 0x6212, 96157 }, + { 0x6213, 96159 }, + { 0x6214, 96161 }, + { 0x6215, 96163 }, + { 0x6216, 96165 }, + { 0x6217, 96167 }, + { 0x6218, 96169 }, + { 0x6219, 96171 }, + { 0x621A, 96173 }, + { 0x621B, 96175 }, + { 0x621C, 96177 }, + { 0x621D, 96179 }, + { 0x621E, 96181 }, + { 0x621F, 96183 }, + { 0x6220, 96185 }, + { 0x6221, 96187 }, + { 0x6222, 96189 }, + { 0x6223, 96191 }, + { 0x6224, 96193 }, + { 0x6225, 96195 }, + { 0x6226, 96197 }, + { 0x6227, 96199 }, + { 0x6228, 96201 }, + { 0x6229, 96203 }, + { 0x622A, 96205 }, + { 0x622B, 96207 }, + { 0x622C, 96209 }, + { 0x622D, 96211 }, + { 0x622E, 96213 }, + { 0x622F, 96215 }, + { 0x6230, 96217 }, + { 0x6231, 96219 }, + { 0x6232, 96221 }, + { 0x6233, 96223 }, + { 0x6234, 96225 }, + { 0x6235, 96227 }, + { 0x6236, 96229 }, + { 0x6237, 96231 }, + { 0x6238, 96233 }, + { 0x6239, 96235 }, + { 0x623A, 96237 }, + { 0x623B, 96239 }, + { 0x623C, 96241 }, + { 0x623D, 96243 }, + { 0x623E, 96245 }, + { 0x623F, 96247 }, + { 0x6240, 96249 }, + { 0x6241, 96251 }, + { 0x6242, 96253 }, + { 0x6243, 96255 }, + { 0x6244, 96257 }, + { 0x6245, 96259 }, + { 0x6246, 96261 }, + { 0x6247, 96263 }, + { 0x6248, 96265 }, + { 0x6249, 96267 }, + { 0x624A, 96269 }, + { 0x624B, 96271 }, + { 0x624C, 96273 }, + { 0x624D, 96275 }, + { 0x624E, 96277 }, + { 0x624F, 96279 }, + { 0x6250, 96281 }, + { 0x6251, 96283 }, + { 0x6252, 96285 }, + { 0x6253, 96287 }, + { 0x6254, 96289 }, + { 0x6255, 96291 }, + { 0x6256, 96293 }, + { 0x6257, 96295 }, + { 0x6258, 96297 }, + { 0x6259, 96299 }, + { 0x625A, 96301 }, + { 0x625B, 96303 }, + { 0x625C, 96305 }, + { 0x625D, 96307 }, + { 0x625E, 96309 }, + { 0x625F, 96311 }, + { 0x6260, 96313 }, + { 0x6261, 96315 }, + { 0x6262, 96317 }, + { 0x6263, 96319 }, + { 0x6264, 96321 }, + { 0x6265, 96323 }, + { 0x6266, 96325 }, + { 0x6267, 96327 }, + { 0x6268, 96329 }, + { 0x6269, 96331 }, + { 0x626A, 96333 }, + { 0x626B, 96335 }, + { 0x626C, 96337 }, + { 0x626D, 96339 }, + { 0x626E, 96341 }, + { 0x626F, 96343 }, + { 0x6270, 96345 }, + { 0x6271, 96347 }, + { 0x6272, 96349 }, + { 0x6273, 96351 }, + { 0x6274, 96353 }, + { 0x6275, 96355 }, + { 0x6276, 96357 }, + { 0x6277, 96359 }, + { 0x6278, 96361 }, + { 0x6279, 96363 }, + { 0x627A, 96365 }, + { 0x627B, 96367 }, + { 0x627C, 96369 }, + { 0x627D, 96371 }, + { 0x627E, 96373 }, + { 0x627F, 96375 }, + { 0x6280, 96377 }, + { 0x6281, 96379 }, + { 0x6282, 96381 }, + { 0x6283, 96383 }, + { 0x6284, 96385 }, + { 0x6285, 96387 }, + { 0x6286, 96389 }, + { 0x6287, 96391 }, + { 0x6288, 96393 }, + { 0x6289, 96395 }, + { 0x628A, 96397 }, + { 0x628B, 96399 }, + { 0x628C, 96401 }, + { 0x628D, 96403 }, + { 0x628E, 96405 }, + { 0x628F, 96407 }, + { 0x6290, 96409 }, + { 0x6291, 96411 }, + { 0x6292, 96413 }, + { 0x6293, 96415 }, + { 0x6294, 96417 }, + { 0x6295, 96419 }, + { 0x6296, 96421 }, + { 0x6297, 96423 }, + { 0x6298, 96425 }, + { 0x6299, 96427 }, + { 0x629A, 96429 }, + { 0x629B, 96431 }, + { 0x629C, 96433 }, + { 0x629D, 96435 }, + { 0x629E, 96437 }, + { 0x629F, 96439 }, + { 0x62A0, 96441 }, + { 0x62A1, 96443 }, + { 0x62A2, 96445 }, + { 0x62A3, 96447 }, + { 0x62A4, 96449 }, + { 0x62A5, 96451 }, + { 0x62A6, 96453 }, + { 0x62A7, 96455 }, + { 0x62A8, 96457 }, + { 0x62A9, 96459 }, + { 0x62AA, 96461 }, + { 0x62AB, 96463 }, + { 0x62AC, 96465 }, + { 0x62AD, 96467 }, + { 0x62AE, 96469 }, + { 0x62AF, 96471 }, + { 0x62B0, 96473 }, + { 0x62B1, 96475 }, + { 0x62B2, 96477 }, + { 0x62B3, 96479 }, + { 0x62B4, 96481 }, + { 0x62B5, 96483 }, + { 0x62B6, 96485 }, + { 0x62B7, 96487 }, + { 0x62B8, 96489 }, + { 0x62B9, 96491 }, + { 0x62BA, 96493 }, + { 0x62BB, 96495 }, + { 0x62BC, 96497 }, + { 0x62BD, 96499 }, + { 0x62BE, 96501 }, + { 0x62BF, 96503 }, + { 0x62C0, 96505 }, + { 0x62C1, 96507 }, + { 0x62C2, 96509 }, + { 0x62C3, 96511 }, + { 0x62C4, 96513 }, + { 0x62C5, 96515 }, + { 0x62C6, 96517 }, + { 0x62C7, 96519 }, + { 0x62C8, 96521 }, + { 0x62C9, 96523 }, + { 0x62CA, 96525 }, + { 0x62CB, 96527 }, + { 0x62CC, 96529 }, + { 0x62CD, 96531 }, + { 0x62CE, 96533 }, + { 0x62CF, 96535 }, + { 0x62D0, 96537 }, + { 0x62D1, 96539 }, + { 0x62D2, 96541 }, + { 0x62D3, 96543 }, + { 0x62D4, 96545 }, + { 0x62D5, 96547 }, + { 0x62D6, 96549 }, + { 0x62D7, 96551 }, + { 0x62D8, 96553 }, + { 0x62D9, 96555 }, + { 0x62DA, 96557 }, + { 0x62DB, 96559 }, + { 0x62DC, 96561 }, + { 0x62DD, 96563 }, + { 0x62DE, 96565 }, + { 0x62DF, 96567 }, + { 0x62E0, 96569 }, + { 0x62E1, 96571 }, + { 0x62E2, 96573 }, + { 0x62E3, 96575 }, + { 0x62E4, 96577 }, + { 0x62E5, 96579 }, + { 0x62E6, 96581 }, + { 0x62E7, 96583 }, + { 0x62E8, 96585 }, + { 0x62E9, 96587 }, + { 0x62EA, 96589 }, + { 0x62EB, 96591 }, + { 0x62EC, 96593 }, + { 0x62ED, 96595 }, + { 0x62EE, 96597 }, + { 0x62EF, 96599 }, + { 0x62F0, 96601 }, + { 0x62F1, 96603 }, + { 0x62F2, 96605 }, + { 0x62F3, 96607 }, + { 0x62F4, 96609 }, + { 0x62F5, 96611 }, + { 0x62F6, 96613 }, + { 0x62F7, 96615 }, + { 0x62F8, 96617 }, + { 0x62F9, 96619 }, + { 0x62FA, 96621 }, + { 0x62FB, 96623 }, + { 0x62FC, 96625 }, + { 0x62FD, 96627 }, + { 0x62FE, 96629 }, + { 0x62FF, 96631 }, + { 0x6300, 96633 }, + { 0x6301, 96635 }, + { 0x6302, 96637 }, + { 0x6303, 96639 }, + { 0x6304, 96641 }, + { 0x6305, 96643 }, + { 0x6306, 96645 }, + { 0x6307, 96647 }, + { 0x6308, 96649 }, + { 0x6309, 96651 }, + { 0x630A, 96653 }, + { 0x630B, 96655 }, + { 0x630C, 96657 }, + { 0x630D, 96659 }, + { 0x630E, 96661 }, + { 0x630F, 96663 }, + { 0x6310, 96665 }, + { 0x6311, 96667 }, + { 0x6312, 96669 }, + { 0x6313, 96671 }, + { 0x6314, 96673 }, + { 0x6315, 96675 }, + { 0x6316, 96677 }, + { 0x6317, 96679 }, + { 0x6318, 96681 }, + { 0x6319, 96683 }, + { 0x631A, 96685 }, + { 0x631B, 96687 }, + { 0x631C, 96689 }, + { 0x631D, 96691 }, + { 0x631E, 96693 }, + { 0x631F, 96695 }, + { 0x6320, 96697 }, + { 0x6321, 96699 }, + { 0x6322, 96701 }, + { 0x6323, 96703 }, + { 0x6324, 96705 }, + { 0x6325, 96707 }, + { 0x6326, 96709 }, + { 0x6327, 96711 }, + { 0x6328, 96713 }, + { 0x6329, 96715 }, + { 0x632A, 96717 }, + { 0x632B, 96719 }, + { 0x632C, 96721 }, + { 0x632D, 96723 }, + { 0x632E, 96725 }, + { 0x632F, 96727 }, + { 0x6330, 96729 }, + { 0x6331, 96731 }, + { 0x6332, 96733 }, + { 0x6333, 96735 }, + { 0x6334, 96737 }, + { 0x6335, 96739 }, + { 0x6336, 96741 }, + { 0x6337, 96743 }, + { 0x6338, 96745 }, + { 0x6339, 96747 }, + { 0x633A, 96749 }, + { 0x633B, 96751 }, + { 0x633C, 96753 }, + { 0x633D, 96755 }, + { 0x633E, 96757 }, + { 0x633F, 96759 }, + { 0x6340, 96761 }, + { 0x6341, 96763 }, + { 0x6342, 96765 }, + { 0x6343, 96767 }, + { 0x6344, 96769 }, + { 0x6345, 96771 }, + { 0x6346, 96773 }, + { 0x6347, 96775 }, + { 0x6348, 96777 }, + { 0x6349, 96779 }, + { 0x634A, 96781 }, + { 0x634B, 96783 }, + { 0x634C, 96785 }, + { 0x634D, 96787 }, + { 0x634E, 96789 }, + { 0x634F, 96791 }, + { 0x6350, 96793 }, + { 0x6351, 96795 }, + { 0x6352, 96797 }, + { 0x6353, 96799 }, + { 0x6354, 96801 }, + { 0x6355, 96803 }, + { 0x6356, 96805 }, + { 0x6357, 96807 }, + { 0x6358, 96809 }, + { 0x6359, 96811 }, + { 0x635A, 96813 }, + { 0x635B, 96815 }, + { 0x635C, 96817 }, + { 0x635D, 96819 }, + { 0x635E, 96821 }, + { 0x635F, 96823 }, + { 0x6360, 96825 }, + { 0x6361, 96827 }, + { 0x6362, 96829 }, + { 0x6363, 96831 }, + { 0x6364, 96833 }, + { 0x6365, 96835 }, + { 0x6366, 96837 }, + { 0x6367, 96839 }, + { 0x6368, 96841 }, + { 0x6369, 96843 }, + { 0x636A, 96845 }, + { 0x636B, 96847 }, + { 0x636C, 96849 }, + { 0x636D, 96851 }, + { 0x636E, 96853 }, + { 0x636F, 96855 }, + { 0x6370, 96857 }, + { 0x6371, 96859 }, + { 0x6372, 96861 }, + { 0x6373, 96863 }, + { 0x6374, 96865 }, + { 0x6375, 96867 }, + { 0x6376, 96869 }, + { 0x6377, 96871 }, + { 0x6378, 96873 }, + { 0x6379, 96875 }, + { 0x637A, 96877 }, + { 0x637B, 96879 }, + { 0x637C, 96881 }, + { 0x637D, 96883 }, + { 0x637E, 96885 }, + { 0x637F, 96887 }, + { 0x6380, 96889 }, + { 0x6381, 96891 }, + { 0x6382, 96893 }, + { 0x6383, 96895 }, + { 0x6384, 96897 }, + { 0x6385, 96899 }, + { 0x6386, 96901 }, + { 0x6387, 96903 }, + { 0x6388, 96905 }, + { 0x6389, 96907 }, + { 0x638A, 96909 }, + { 0x638B, 96911 }, + { 0x638C, 96913 }, + { 0x638D, 96915 }, + { 0x638E, 96917 }, + { 0x638F, 96919 }, + { 0x6390, 96921 }, + { 0x6391, 96923 }, + { 0x6392, 96925 }, + { 0x6393, 96927 }, + { 0x6394, 96929 }, + { 0x6395, 96931 }, + { 0x6396, 96933 }, + { 0x6397, 96935 }, + { 0x6398, 96937 }, + { 0x6399, 96939 }, + { 0x639A, 96941 }, + { 0x639B, 96943 }, + { 0x639C, 96945 }, + { 0x639D, 96947 }, + { 0x639E, 96949 }, + { 0x639F, 96951 }, + { 0x63A0, 96953 }, + { 0x63A1, 96955 }, + { 0x63A2, 96957 }, + { 0x63A3, 96959 }, + { 0x63A4, 96961 }, + { 0x63A5, 96963 }, + { 0x63A6, 96965 }, + { 0x63A7, 96967 }, + { 0x63A8, 96969 }, + { 0x63A9, 96971 }, + { 0x63AA, 96973 }, + { 0x63AB, 96975 }, + { 0x63AC, 96977 }, + { 0x63AD, 96979 }, + { 0x63AE, 96981 }, + { 0x63AF, 96983 }, + { 0x63B0, 96985 }, + { 0x63B1, 96987 }, + { 0x63B2, 96989 }, + { 0x63B3, 96991 }, + { 0x63B4, 96993 }, + { 0x63B5, 96995 }, + { 0x63B6, 96997 }, + { 0x63B7, 96999 }, + { 0x63B8, 97001 }, + { 0x63B9, 97003 }, + { 0x63BA, 97005 }, + { 0x63BB, 97007 }, + { 0x63BC, 97009 }, + { 0x63BD, 97011 }, + { 0x63BE, 97013 }, + { 0x63BF, 97015 }, + { 0x63C0, 97017 }, + { 0x63C1, 97019 }, + { 0x63C2, 97021 }, + { 0x63C3, 97023 }, + { 0x63C4, 97025 }, + { 0x63C5, 97027 }, + { 0x63C6, 97029 }, + { 0x63C7, 97031 }, + { 0x63C8, 97033 }, + { 0x63C9, 97035 }, + { 0x63CA, 97037 }, + { 0x63CB, 97039 }, + { 0x63CC, 97041 }, + { 0x63CD, 97043 }, + { 0x63CE, 97045 }, + { 0x63CF, 97047 }, + { 0x63D0, 97049 }, + { 0x63D1, 97051 }, + { 0x63D2, 97053 }, + { 0x63D3, 97055 }, + { 0x63D4, 97057 }, + { 0x63D5, 97059 }, + { 0x63D6, 97061 }, + { 0x63D7, 97063 }, + { 0x63D8, 97065 }, + { 0x63D9, 97067 }, + { 0x63DA, 97069 }, + { 0x63DB, 97071 }, + { 0x63DC, 97073 }, + { 0x63DD, 97075 }, + { 0x63DE, 97077 }, + { 0x63DF, 97079 }, + { 0x63E0, 97081 }, + { 0x63E1, 97083 }, + { 0x63E2, 97085 }, + { 0x63E3, 97087 }, + { 0x63E4, 97089 }, + { 0x63E5, 97091 }, + { 0x63E6, 97093 }, + { 0x63E7, 97095 }, + { 0x63E8, 97097 }, + { 0x63E9, 97099 }, + { 0x63EA, 97101 }, + { 0x63EB, 97103 }, + { 0x63EC, 97105 }, + { 0x63ED, 97107 }, + { 0x63EE, 97109 }, + { 0x63EF, 97111 }, + { 0x63F0, 97113 }, + { 0x63F1, 97115 }, + { 0x63F2, 97117 }, + { 0x63F3, 97119 }, + { 0x63F4, 97121 }, + { 0x63F5, 97123 }, + { 0x63F6, 97125 }, + { 0x63F7, 97127 }, + { 0x63F8, 97129 }, + { 0x63F9, 97131 }, + { 0x63FA, 97133 }, + { 0x63FB, 97135 }, + { 0x63FC, 97137 }, + { 0x63FD, 97139 }, + { 0x63FE, 97141 }, + { 0x63FF, 97143 }, + { 0x6400, 97145 }, + { 0x6401, 97147 }, + { 0x6402, 97149 }, + { 0x6403, 97151 }, + { 0x6404, 97153 }, + { 0x6405, 97155 }, + { 0x6406, 97157 }, + { 0x6407, 97159 }, + { 0x6408, 97161 }, + { 0x6409, 97163 }, + { 0x640A, 97165 }, + { 0x640B, 97167 }, + { 0x640C, 97169 }, + { 0x640D, 97171 }, + { 0x640E, 97173 }, + { 0x640F, 97175 }, + { 0x6410, 97177 }, + { 0x6411, 97179 }, + { 0x6412, 97181 }, + { 0x6413, 97183 }, + { 0x6414, 97185 }, + { 0x6415, 97187 }, + { 0x6416, 97189 }, + { 0x6417, 97191 }, + { 0x6418, 97193 }, + { 0x6419, 97195 }, + { 0x641A, 97197 }, + { 0x641B, 97199 }, + { 0x641C, 97201 }, + { 0x641D, 97203 }, + { 0x641E, 97205 }, + { 0x641F, 97207 }, + { 0x6420, 97209 }, + { 0x6421, 97211 }, + { 0x6422, 97213 }, + { 0x6423, 97215 }, + { 0x6424, 97217 }, + { 0x6425, 97219 }, + { 0x6426, 97221 }, + { 0x6427, 97223 }, + { 0x6428, 97225 }, + { 0x6429, 97227 }, + { 0x642A, 97229 }, + { 0x642B, 97231 }, + { 0x642C, 97233 }, + { 0x642D, 97235 }, + { 0x642E, 97237 }, + { 0x642F, 97239 }, + { 0x6430, 97241 }, + { 0x6431, 97243 }, + { 0x6432, 97245 }, + { 0x6433, 97247 }, + { 0x6434, 97249 }, + { 0x6435, 97251 }, + { 0x6436, 97253 }, + { 0x6437, 97255 }, + { 0x6438, 97257 }, + { 0x6439, 97259 }, + { 0x643A, 97261 }, + { 0x643B, 97263 }, + { 0x643C, 97265 }, + { 0x643D, 97267 }, + { 0x643E, 97269 }, + { 0x643F, 97271 }, + { 0x6440, 97273 }, + { 0x6441, 97275 }, + { 0x6442, 97277 }, + { 0x6443, 97279 }, + { 0x6444, 97281 }, + { 0x6445, 97283 }, + { 0x6446, 97285 }, + { 0x6447, 97287 }, + { 0x6448, 97289 }, + { 0x6449, 97291 }, + { 0x644A, 97293 }, + { 0x644B, 97295 }, + { 0x644C, 97297 }, + { 0x644D, 97299 }, + { 0x644E, 97301 }, + { 0x644F, 97303 }, + { 0x6450, 97305 }, + { 0x6451, 97307 }, + { 0x6452, 97309 }, + { 0x6453, 97311 }, + { 0x6454, 97313 }, + { 0x6455, 97315 }, + { 0x6456, 97317 }, + { 0x6457, 97319 }, + { 0x6458, 97321 }, + { 0x6459, 97323 }, + { 0x645A, 97325 }, + { 0x645B, 97327 }, + { 0x645C, 97329 }, + { 0x645D, 97331 }, + { 0x645E, 97333 }, + { 0x645F, 97335 }, + { 0x6460, 97337 }, + { 0x6461, 97339 }, + { 0x6462, 97341 }, + { 0x6463, 97343 }, + { 0x6464, 97345 }, + { 0x6465, 97347 }, + { 0x6466, 97349 }, + { 0x6467, 97351 }, + { 0x6468, 97353 }, + { 0x6469, 97355 }, + { 0x646A, 97357 }, + { 0x646B, 97359 }, + { 0x646C, 97361 }, + { 0x646D, 97363 }, + { 0x646E, 97365 }, + { 0x646F, 97367 }, + { 0x6470, 97369 }, + { 0x6471, 97371 }, + { 0x6472, 97373 }, + { 0x6473, 97375 }, + { 0x6474, 97377 }, + { 0x6475, 97379 }, + { 0x6476, 97381 }, + { 0x6477, 97383 }, + { 0x6478, 97385 }, + { 0x6479, 97387 }, + { 0x647A, 97389 }, + { 0x647B, 97391 }, + { 0x647C, 97393 }, + { 0x647D, 97395 }, + { 0x647E, 97397 }, + { 0x647F, 97399 }, + { 0x6480, 97401 }, + { 0x6481, 97403 }, + { 0x6482, 97405 }, + { 0x6483, 97407 }, + { 0x6484, 97409 }, + { 0x6485, 97411 }, + { 0x6486, 97413 }, + { 0x6487, 97415 }, + { 0x6488, 97417 }, + { 0x6489, 97419 }, + { 0x648A, 97421 }, + { 0x648B, 97423 }, + { 0x648C, 97425 }, + { 0x648D, 97427 }, + { 0x648E, 97429 }, + { 0x648F, 97431 }, + { 0x6490, 97433 }, + { 0x6491, 97435 }, + { 0x6492, 97437 }, + { 0x6493, 97439 }, + { 0x6494, 97441 }, + { 0x6495, 97443 }, + { 0x6496, 97445 }, + { 0x6497, 97447 }, + { 0x6498, 97449 }, + { 0x6499, 97451 }, + { 0x649A, 97453 }, + { 0x649B, 97455 }, + { 0x649C, 97457 }, + { 0x649D, 97459 }, + { 0x649E, 97461 }, + { 0x649F, 97463 }, + { 0x64A0, 97465 }, + { 0x64A1, 97467 }, + { 0x64A2, 97469 }, + { 0x64A3, 97471 }, + { 0x64A4, 97473 }, + { 0x64A5, 97475 }, + { 0x64A6, 97477 }, + { 0x64A7, 97479 }, + { 0x64A8, 97481 }, + { 0x64A9, 97483 }, + { 0x64AA, 97485 }, + { 0x64AB, 97487 }, + { 0x64AC, 97489 }, + { 0x64AD, 97491 }, + { 0x64AE, 97493 }, + { 0x64AF, 97495 }, + { 0x64B0, 97497 }, + { 0x64B1, 97499 }, + { 0x64B2, 97501 }, + { 0x64B3, 97503 }, + { 0x64B4, 97505 }, + { 0x64B5, 97507 }, + { 0x64B6, 97509 }, + { 0x64B7, 97511 }, + { 0x64B8, 97513 }, + { 0x64B9, 97515 }, + { 0x64BA, 97517 }, + { 0x64BB, 97519 }, + { 0x64BC, 97521 }, + { 0x64BD, 97523 }, + { 0x64BE, 97525 }, + { 0x64BF, 97527 }, + { 0x64C0, 97529 }, + { 0x64C1, 97531 }, + { 0x64C2, 97533 }, + { 0x64C3, 97535 }, + { 0x64C4, 97537 }, + { 0x64C5, 97539 }, + { 0x64C6, 97541 }, + { 0x64C7, 97543 }, + { 0x64C8, 97545 }, + { 0x64C9, 97547 }, + { 0x64CA, 97549 }, + { 0x64CB, 97551 }, + { 0x64CC, 97553 }, + { 0x64CD, 97555 }, + { 0x64CE, 97557 }, + { 0x64CF, 97559 }, + { 0x64D0, 97561 }, + { 0x64D1, 97563 }, + { 0x64D2, 97565 }, + { 0x64D3, 97567 }, + { 0x64D4, 97569 }, + { 0x64D5, 97571 }, + { 0x64D6, 97573 }, + { 0x64D7, 97575 }, + { 0x64D8, 97577 }, + { 0x64D9, 97579 }, + { 0x64DA, 97581 }, + { 0x64DB, 97583 }, + { 0x64DC, 97585 }, + { 0x64DD, 97587 }, + { 0x64DE, 97589 }, + { 0x64DF, 97591 }, + { 0x64E0, 97593 }, + { 0x64E1, 97595 }, + { 0x64E2, 97597 }, + { 0x64E3, 97599 }, + { 0x64E4, 97601 }, + { 0x64E5, 97603 }, + { 0x64E6, 97605 }, + { 0x64E7, 97607 }, + { 0x64E8, 97609 }, + { 0x64E9, 97611 }, + { 0x64EA, 97613 }, + { 0x64EB, 97615 }, + { 0x64EC, 97617 }, + { 0x64ED, 97619 }, + { 0x64EE, 97621 }, + { 0x64EF, 97623 }, + { 0x64F0, 97625 }, + { 0x64F1, 97627 }, + { 0x64F2, 97629 }, + { 0x64F3, 97631 }, + { 0x64F4, 97633 }, + { 0x64F5, 97635 }, + { 0x64F6, 97637 }, + { 0x64F7, 97639 }, + { 0x64F8, 97641 }, + { 0x64F9, 97643 }, + { 0x64FA, 97645 }, + { 0x64FB, 97647 }, + { 0x64FC, 97649 }, + { 0x64FD, 97651 }, + { 0x64FE, 97653 }, + { 0x64FF, 97655 }, + { 0x6500, 97657 }, + { 0x6501, 97659 }, + { 0x6502, 97661 }, + { 0x6503, 97663 }, + { 0x6504, 97665 }, + { 0x6505, 97667 }, + { 0x6506, 97669 }, + { 0x6507, 97671 }, + { 0x6508, 97673 }, + { 0x6509, 97675 }, + { 0x650A, 97677 }, + { 0x650B, 97679 }, + { 0x650C, 97681 }, + { 0x650D, 97683 }, + { 0x650E, 97685 }, + { 0x650F, 97687 }, + { 0x6510, 97689 }, + { 0x6511, 97691 }, + { 0x6512, 97693 }, + { 0x6513, 97695 }, + { 0x6514, 97697 }, + { 0x6515, 97699 }, + { 0x6516, 97701 }, + { 0x6517, 97703 }, + { 0x6518, 97705 }, + { 0x6519, 97707 }, + { 0x651A, 97709 }, + { 0x651B, 97711 }, + { 0x651C, 97713 }, + { 0x651D, 97715 }, + { 0x651E, 97717 }, + { 0x651F, 97719 }, + { 0x6520, 97721 }, + { 0x6521, 97723 }, + { 0x6522, 97725 }, + { 0x6523, 97727 }, + { 0x6524, 97729 }, + { 0x6525, 97731 }, + { 0x6526, 97733 }, + { 0x6527, 97735 }, + { 0x6528, 97737 }, + { 0x6529, 97739 }, + { 0x652A, 97741 }, + { 0x652B, 97743 }, + { 0x652C, 97745 }, + { 0x652D, 97747 }, + { 0x652E, 97749 }, + { 0x652F, 97751 }, + { 0x6530, 97753 }, + { 0x6531, 97755 }, + { 0x6532, 97757 }, + { 0x6533, 97759 }, + { 0x6534, 97761 }, + { 0x6535, 97763 }, + { 0x6536, 97765 }, + { 0x6537, 97767 }, + { 0x6538, 97769 }, + { 0x6539, 97771 }, + { 0x653A, 97773 }, + { 0x653B, 97775 }, + { 0x653C, 97777 }, + { 0x653D, 97779 }, + { 0x653E, 97781 }, + { 0x653F, 97783 }, + { 0x6540, 97785 }, + { 0x6541, 97787 }, + { 0x6542, 97789 }, + { 0x6543, 97791 }, + { 0x6544, 97793 }, + { 0x6545, 97795 }, + { 0x6546, 97797 }, + { 0x6547, 97799 }, + { 0x6548, 97801 }, + { 0x6549, 97803 }, + { 0x654A, 97805 }, + { 0x654B, 97807 }, + { 0x654C, 97809 }, + { 0x654D, 97811 }, + { 0x654E, 97813 }, + { 0x654F, 97815 }, + { 0x6550, 97817 }, + { 0x6551, 97819 }, + { 0x6552, 97821 }, + { 0x6553, 97823 }, + { 0x6554, 97825 }, + { 0x6555, 97827 }, + { 0x6556, 97829 }, + { 0x6557, 97831 }, + { 0x6558, 97833 }, + { 0x6559, 97835 }, + { 0x655A, 97837 }, + { 0x655B, 97839 }, + { 0x655C, 97841 }, + { 0x655D, 97843 }, + { 0x655E, 97845 }, + { 0x655F, 97847 }, + { 0x6560, 97849 }, + { 0x6561, 97851 }, + { 0x6562, 97853 }, + { 0x6563, 97855 }, + { 0x6564, 97857 }, + { 0x6565, 97859 }, + { 0x6566, 97861 }, + { 0x6567, 97863 }, + { 0x6568, 97865 }, + { 0x6569, 97867 }, + { 0x656A, 97869 }, + { 0x656B, 97871 }, + { 0x656C, 97873 }, + { 0x656D, 97875 }, + { 0x656E, 97877 }, + { 0x656F, 97879 }, + { 0x6570, 97881 }, + { 0x6571, 97883 }, + { 0x6572, 97885 }, + { 0x6573, 97887 }, + { 0x6574, 97889 }, + { 0x6575, 97891 }, + { 0x6576, 97893 }, + { 0x6577, 97895 }, + { 0x6578, 97897 }, + { 0x6579, 97899 }, + { 0x657A, 97901 }, + { 0x657B, 97903 }, + { 0x657C, 97905 }, + { 0x657D, 97907 }, + { 0x657E, 97909 }, + { 0x657F, 97911 }, + { 0x6580, 97913 }, + { 0x6581, 97915 }, + { 0x6582, 97917 }, + { 0x6583, 97919 }, + { 0x6584, 97921 }, + { 0x6585, 97923 }, + { 0x6586, 97925 }, + { 0x6587, 97927 }, + { 0x6588, 97929 }, + { 0x6589, 97931 }, + { 0x658A, 97933 }, + { 0x658B, 97935 }, + { 0x658C, 97937 }, + { 0x658D, 97939 }, + { 0x658E, 97941 }, + { 0x658F, 97943 }, + { 0x6590, 97945 }, + { 0x6591, 97947 }, + { 0x6592, 97949 }, + { 0x6593, 97951 }, + { 0x6594, 97953 }, + { 0x6595, 97955 }, + { 0x6596, 97957 }, + { 0x6597, 97959 }, + { 0x6598, 97961 }, + { 0x6599, 97963 }, + { 0x659A, 97965 }, + { 0x659B, 97967 }, + { 0x659C, 97969 }, + { 0x659D, 97971 }, + { 0x659E, 97973 }, + { 0x659F, 97975 }, + { 0x65A0, 97977 }, + { 0x65A1, 97979 }, + { 0x65A2, 97981 }, + { 0x65A3, 97983 }, + { 0x65A4, 97985 }, + { 0x65A5, 97987 }, + { 0x65A6, 97989 }, + { 0x65A7, 97991 }, + { 0x65A8, 97993 }, + { 0x65A9, 97995 }, + { 0x65AA, 97997 }, + { 0x65AB, 97999 }, + { 0x65AC, 98001 }, + { 0x65AD, 98003 }, + { 0x65AE, 98005 }, + { 0x65AF, 98007 }, + { 0x65B0, 98009 }, + { 0x65B1, 98011 }, + { 0x65B2, 98013 }, + { 0x65B3, 98015 }, + { 0x65B4, 98017 }, + { 0x65B5, 98019 }, + { 0x65B6, 98021 }, + { 0x65B7, 98023 }, + { 0x65B8, 98025 }, + { 0x65B9, 98027 }, + { 0x65BA, 98029 }, + { 0x65BB, 98031 }, + { 0x65BC, 98033 }, + { 0x65BD, 98035 }, + { 0x65BE, 98037 }, + { 0x65BF, 98039 }, + { 0x65C0, 98041 }, + { 0x65C1, 98043 }, + { 0x65C2, 98045 }, + { 0x65C3, 98047 }, + { 0x65C4, 98049 }, + { 0x65C5, 98051 }, + { 0x65C6, 98053 }, + { 0x65C7, 98055 }, + { 0x65C8, 98057 }, + { 0x65C9, 98059 }, + { 0x65CA, 98061 }, + { 0x65CB, 98063 }, + { 0x65CC, 98065 }, + { 0x65CD, 98067 }, + { 0x65CE, 98069 }, + { 0x65CF, 98071 }, + { 0x65D0, 98073 }, + { 0x65D1, 98075 }, + { 0x65D2, 98077 }, + { 0x65D3, 98079 }, + { 0x65D4, 98081 }, + { 0x65D5, 98083 }, + { 0x65D6, 98085 }, + { 0x65D7, 98087 }, + { 0x65D8, 98089 }, + { 0x65D9, 98091 }, + { 0x65DA, 98093 }, + { 0x65DB, 98095 }, + { 0x65DC, 98097 }, + { 0x65DD, 98099 }, + { 0x65DE, 98101 }, + { 0x65DF, 98103 }, + { 0x65E0, 98105 }, + { 0x65E1, 98107 }, + { 0x65E2, 98109 }, + { 0x65E3, 98111 }, + { 0x65E4, 98113 }, + { 0x65E5, 98115 }, + { 0x65E6, 98117 }, + { 0x65E7, 98119 }, + { 0x65E8, 98121 }, + { 0x65E9, 98123 }, + { 0x65EA, 98125 }, + { 0x65EB, 98127 }, + { 0x65EC, 98129 }, + { 0x65ED, 98131 }, + { 0x65EE, 98133 }, + { 0x65EF, 98135 }, + { 0x65F0, 98137 }, + { 0x65F1, 98139 }, + { 0x65F2, 98141 }, + { 0x65F3, 98143 }, + { 0x65F4, 98145 }, + { 0x65F5, 98147 }, + { 0x65F6, 98149 }, + { 0x65F7, 98151 }, + { 0x65F8, 98153 }, + { 0x65F9, 98155 }, + { 0x65FA, 98157 }, + { 0x65FB, 98159 }, + { 0x65FC, 98161 }, + { 0x65FD, 98163 }, + { 0x65FE, 98165 }, + { 0x65FF, 98167 }, + { 0x6600, 98169 }, + { 0x6601, 98171 }, + { 0x6602, 98173 }, + { 0x6603, 98175 }, + { 0x6604, 98177 }, + { 0x6605, 98179 }, + { 0x6606, 98181 }, + { 0x6607, 98183 }, + { 0x6608, 98185 }, + { 0x6609, 98187 }, + { 0x660A, 98189 }, + { 0x660B, 98191 }, + { 0x660C, 98193 }, + { 0x660D, 98195 }, + { 0x660E, 98197 }, + { 0x660F, 98199 }, + { 0x6610, 98201 }, + { 0x6611, 98203 }, + { 0x6612, 98205 }, + { 0x6613, 98207 }, + { 0x6614, 98209 }, + { 0x6615, 98211 }, + { 0x6616, 98213 }, + { 0x6617, 98215 }, + { 0x6618, 98217 }, + { 0x6619, 98219 }, + { 0x661A, 98221 }, + { 0x661B, 98223 }, + { 0x661C, 98225 }, + { 0x661D, 98227 }, + { 0x661E, 98229 }, + { 0x661F, 98231 }, + { 0x6620, 98233 }, + { 0x6621, 98235 }, + { 0x6622, 98237 }, + { 0x6623, 98239 }, + { 0x6624, 98241 }, + { 0x6625, 98243 }, + { 0x6626, 98245 }, + { 0x6627, 98247 }, + { 0x6628, 98249 }, + { 0x6629, 98251 }, + { 0x662A, 98253 }, + { 0x662B, 98255 }, + { 0x662C, 98257 }, + { 0x662D, 98259 }, + { 0x662E, 98261 }, + { 0x662F, 98263 }, + { 0x6630, 98265 }, + { 0x6631, 98267 }, + { 0x6632, 98269 }, + { 0x6633, 98271 }, + { 0x6634, 98273 }, + { 0x6635, 98275 }, + { 0x6636, 98277 }, + { 0x6637, 98279 }, + { 0x6638, 98281 }, + { 0x6639, 98283 }, + { 0x663A, 98285 }, + { 0x663B, 98287 }, + { 0x663C, 98289 }, + { 0x663D, 98291 }, + { 0x663E, 98293 }, + { 0x663F, 98295 }, + { 0x6640, 98297 }, + { 0x6641, 98299 }, + { 0x6642, 98301 }, + { 0x6643, 98303 }, + { 0x6644, 98305 }, + { 0x6645, 98307 }, + { 0x6646, 98309 }, + { 0x6647, 98311 }, + { 0x6648, 98313 }, + { 0x6649, 98315 }, + { 0x664A, 98317 }, + { 0x664B, 98319 }, + { 0x664C, 98321 }, + { 0x664D, 98323 }, + { 0x664E, 98325 }, + { 0x664F, 98327 }, + { 0x6650, 98329 }, + { 0x6651, 98331 }, + { 0x6652, 98333 }, + { 0x6653, 98335 }, + { 0x6654, 98337 }, + { 0x6655, 98339 }, + { 0x6656, 98341 }, + { 0x6657, 98343 }, + { 0x6658, 98345 }, + { 0x6659, 98347 }, + { 0x665A, 98349 }, + { 0x665B, 98351 }, + { 0x665C, 98353 }, + { 0x665D, 98355 }, + { 0x665E, 98357 }, + { 0x665F, 98359 }, + { 0x6660, 98361 }, + { 0x6661, 98363 }, + { 0x6662, 98365 }, + { 0x6663, 98367 }, + { 0x6664, 98369 }, + { 0x6665, 98371 }, + { 0x6666, 98373 }, + { 0x6667, 98375 }, + { 0x6668, 98377 }, + { 0x6669, 98379 }, + { 0x666A, 98381 }, + { 0x666B, 98383 }, + { 0x666C, 98385 }, + { 0x666D, 98387 }, + { 0x666E, 98389 }, + { 0x666F, 98391 }, + { 0x6670, 98393 }, + { 0x6671, 98395 }, + { 0x6672, 98397 }, + { 0x6673, 98399 }, + { 0x6674, 98401 }, + { 0x6675, 98403 }, + { 0x6676, 98405 }, + { 0x6677, 98407 }, + { 0x6678, 98409 }, + { 0x6679, 98411 }, + { 0x667A, 98413 }, + { 0x667B, 98415 }, + { 0x667C, 98417 }, + { 0x667D, 98419 }, + { 0x667E, 98421 }, + { 0x667F, 98423 }, + { 0x6680, 98425 }, + { 0x6681, 98427 }, + { 0x6682, 98429 }, + { 0x6683, 98431 }, + { 0x6684, 98433 }, + { 0x6685, 98435 }, + { 0x6686, 98437 }, + { 0x6687, 98439 }, + { 0x6688, 98441 }, + { 0x6689, 98443 }, + { 0x668A, 98445 }, + { 0x668B, 98447 }, + { 0x668C, 98449 }, + { 0x668D, 98451 }, + { 0x668E, 98453 }, + { 0x668F, 98455 }, + { 0x6690, 98457 }, + { 0x6691, 98459 }, + { 0x6692, 98461 }, + { 0x6693, 98463 }, + { 0x6694, 98465 }, + { 0x6695, 98467 }, + { 0x6696, 98469 }, + { 0x6697, 98471 }, + { 0x6698, 98473 }, + { 0x6699, 98475 }, + { 0x669A, 98477 }, + { 0x669B, 98479 }, + { 0x669C, 98481 }, + { 0x669D, 98483 }, + { 0x669E, 98485 }, + { 0x669F, 98487 }, + { 0x66A0, 98489 }, + { 0x66A1, 98491 }, + { 0x66A2, 98493 }, + { 0x66A3, 98495 }, + { 0x66A4, 98497 }, + { 0x66A5, 98499 }, + { 0x66A6, 98501 }, + { 0x66A7, 98503 }, + { 0x66A8, 98505 }, + { 0x66A9, 98507 }, + { 0x66AA, 98509 }, + { 0x66AB, 98511 }, + { 0x66AC, 98513 }, + { 0x66AD, 98515 }, + { 0x66AE, 98517 }, + { 0x66AF, 98519 }, + { 0x66B0, 98521 }, + { 0x66B1, 98523 }, + { 0x66B2, 98525 }, + { 0x66B3, 98527 }, + { 0x66B4, 98529 }, + { 0x66B5, 98531 }, + { 0x66B6, 98533 }, + { 0x66B7, 98535 }, + { 0x66B8, 98537 }, + { 0x66B9, 98539 }, + { 0x66BA, 98541 }, + { 0x66BB, 98543 }, + { 0x66BC, 98545 }, + { 0x66BD, 98547 }, + { 0x66BE, 98549 }, + { 0x66BF, 98551 }, + { 0x66C0, 98553 }, + { 0x66C1, 98555 }, + { 0x66C2, 98557 }, + { 0x66C3, 98559 }, + { 0x66C4, 98561 }, + { 0x66C5, 98563 }, + { 0x66C6, 98565 }, + { 0x66C7, 98567 }, + { 0x66C8, 98569 }, + { 0x66C9, 98571 }, + { 0x66CA, 98573 }, + { 0x66CB, 98575 }, + { 0x66CC, 98577 }, + { 0x66CD, 98579 }, + { 0x66CE, 98581 }, + { 0x66CF, 98583 }, + { 0x66D0, 98585 }, + { 0x66D1, 98587 }, + { 0x66D2, 98589 }, + { 0x66D3, 98591 }, + { 0x66D4, 98593 }, + { 0x66D5, 98595 }, + { 0x66D6, 98597 }, + { 0x66D7, 98599 }, + { 0x66D8, 98601 }, + { 0x66D9, 98603 }, + { 0x66DA, 98605 }, + { 0x66DB, 98607 }, + { 0x66DC, 98609 }, + { 0x66DD, 98611 }, + { 0x66DE, 98613 }, + { 0x66DF, 98615 }, + { 0x66E0, 98617 }, + { 0x66E1, 98619 }, + { 0x66E2, 98621 }, + { 0x66E3, 98623 }, + { 0x66E4, 98625 }, + { 0x66E5, 98627 }, + { 0x66E6, 98629 }, + { 0x66E7, 98631 }, + { 0x66E8, 98633 }, + { 0x66E9, 98635 }, + { 0x66EA, 98637 }, + { 0x66EB, 98639 }, + { 0x66EC, 98641 }, + { 0x66ED, 98643 }, + { 0x66EE, 98645 }, + { 0x66EF, 98647 }, + { 0x66F0, 98649 }, + { 0x66F1, 98651 }, + { 0x66F2, 98653 }, + { 0x66F3, 98655 }, + { 0x66F4, 98657 }, + { 0x66F5, 98659 }, + { 0x66F6, 98661 }, + { 0x66F7, 98663 }, + { 0x66F8, 98665 }, + { 0x66F9, 98667 }, + { 0x66FA, 98669 }, + { 0x66FB, 98671 }, + { 0x66FC, 98673 }, + { 0x66FD, 98675 }, + { 0x66FE, 98677 }, + { 0x66FF, 98679 }, + { 0x6700, 98681 }, + { 0x6701, 98683 }, + { 0x6702, 98685 }, + { 0x6703, 98687 }, + { 0x6704, 98689 }, + { 0x6705, 98691 }, + { 0x6706, 98693 }, + { 0x6707, 98695 }, + { 0x6708, 98697 }, + { 0x6709, 98699 }, + { 0x670A, 98701 }, + { 0x670B, 98703 }, + { 0x670C, 98705 }, + { 0x670D, 98707 }, + { 0x670E, 98709 }, + { 0x670F, 98711 }, + { 0x6710, 98713 }, + { 0x6711, 98715 }, + { 0x6712, 98717 }, + { 0x6713, 98719 }, + { 0x6714, 98721 }, + { 0x6715, 98723 }, + { 0x6716, 98725 }, + { 0x6717, 98727 }, + { 0x6718, 98729 }, + { 0x6719, 98731 }, + { 0x671A, 98733 }, + { 0x671B, 98735 }, + { 0x671C, 98737 }, + { 0x671D, 98739 }, + { 0x671E, 98741 }, + { 0x671F, 98743 }, + { 0x6720, 98745 }, + { 0x6721, 98747 }, + { 0x6722, 98749 }, + { 0x6723, 98751 }, + { 0x6724, 98753 }, + { 0x6725, 98755 }, + { 0x6726, 98757 }, + { 0x6727, 98759 }, + { 0x6728, 98761 }, + { 0x6729, 98763 }, + { 0x672A, 98765 }, + { 0x672B, 98767 }, + { 0x672C, 98769 }, + { 0x672D, 98771 }, + { 0x672E, 98773 }, + { 0x672F, 98775 }, + { 0x6730, 98777 }, + { 0x6731, 98779 }, + { 0x6732, 98781 }, + { 0x6733, 98783 }, + { 0x6734, 98785 }, + { 0x6735, 98787 }, + { 0x6736, 98789 }, + { 0x6737, 98791 }, + { 0x6738, 98793 }, + { 0x6739, 98795 }, + { 0x673A, 98797 }, + { 0x673B, 98799 }, + { 0x673C, 98801 }, + { 0x673D, 98803 }, + { 0x673E, 98805 }, + { 0x673F, 98807 }, + { 0x6740, 98809 }, + { 0x6741, 98811 }, + { 0x6742, 98813 }, + { 0x6743, 98815 }, + { 0x6744, 98817 }, + { 0x6745, 98819 }, + { 0x6746, 98821 }, + { 0x6747, 98823 }, + { 0x6748, 98825 }, + { 0x6749, 98827 }, + { 0x674A, 98829 }, + { 0x674B, 98831 }, + { 0x674C, 98833 }, + { 0x674D, 98835 }, + { 0x674E, 98837 }, + { 0x674F, 98839 }, + { 0x6750, 98841 }, + { 0x6751, 98843 }, + { 0x6752, 98845 }, + { 0x6753, 98847 }, + { 0x6754, 98849 }, + { 0x6755, 98851 }, + { 0x6756, 98853 }, + { 0x6757, 98855 }, + { 0x6758, 98857 }, + { 0x6759, 98859 }, + { 0x675A, 98861 }, + { 0x675B, 98863 }, + { 0x675C, 98865 }, + { 0x675D, 98867 }, + { 0x675E, 98869 }, + { 0x675F, 98871 }, + { 0x6760, 98873 }, + { 0x6761, 98875 }, + { 0x6762, 98877 }, + { 0x6763, 98879 }, + { 0x6764, 98881 }, + { 0x6765, 98883 }, + { 0x6766, 98885 }, + { 0x6767, 98887 }, + { 0x6768, 98889 }, + { 0x6769, 98891 }, + { 0x676A, 98893 }, + { 0x676B, 98895 }, + { 0x676C, 98897 }, + { 0x676D, 98899 }, + { 0x676E, 98901 }, + { 0x676F, 98903 }, + { 0x6770, 98905 }, + { 0x6771, 98907 }, + { 0x6772, 98909 }, + { 0x6773, 98911 }, + { 0x6774, 98913 }, + { 0x6775, 98915 }, + { 0x6776, 98917 }, + { 0x6777, 98919 }, + { 0x6778, 98921 }, + { 0x6779, 98923 }, + { 0x677A, 98925 }, + { 0x677B, 98927 }, + { 0x677C, 98929 }, + { 0x677D, 98931 }, + { 0x677E, 98933 }, + { 0x677F, 98935 }, + { 0x6780, 98937 }, + { 0x6781, 98939 }, + { 0x6782, 98941 }, + { 0x6783, 98943 }, + { 0x6784, 98945 }, + { 0x6785, 98947 }, + { 0x6786, 98949 }, + { 0x6787, 98951 }, + { 0x6788, 98953 }, + { 0x6789, 98955 }, + { 0x678A, 98957 }, + { 0x678B, 98959 }, + { 0x678C, 98961 }, + { 0x678D, 98963 }, + { 0x678E, 98965 }, + { 0x678F, 98967 }, + { 0x6790, 98969 }, + { 0x6791, 98971 }, + { 0x6792, 98973 }, + { 0x6793, 98975 }, + { 0x6794, 98977 }, + { 0x6795, 98979 }, + { 0x6796, 98981 }, + { 0x6797, 98983 }, + { 0x6798, 98985 }, + { 0x6799, 98987 }, + { 0x679A, 98989 }, + { 0x679B, 98991 }, + { 0x679C, 98993 }, + { 0x679D, 98995 }, + { 0x679E, 98997 }, + { 0x679F, 98999 }, + { 0x67A0, 99001 }, + { 0x67A1, 99003 }, + { 0x67A2, 99005 }, + { 0x67A3, 99007 }, + { 0x67A4, 99009 }, + { 0x67A5, 99011 }, + { 0x67A6, 99013 }, + { 0x67A7, 99015 }, + { 0x67A8, 99017 }, + { 0x67A9, 99019 }, + { 0x67AA, 99021 }, + { 0x67AB, 99023 }, + { 0x67AC, 99025 }, + { 0x67AD, 99027 }, + { 0x67AE, 99029 }, + { 0x67AF, 99031 }, + { 0x67B0, 99033 }, + { 0x67B1, 99035 }, + { 0x67B2, 99037 }, + { 0x67B3, 99039 }, + { 0x67B4, 99041 }, + { 0x67B5, 99043 }, + { 0x67B6, 99045 }, + { 0x67B7, 99047 }, + { 0x67B8, 99049 }, + { 0x67B9, 99051 }, + { 0x67BA, 99053 }, + { 0x67BB, 99055 }, + { 0x67BC, 99057 }, + { 0x67BD, 99059 }, + { 0x67BE, 99061 }, + { 0x67BF, 99063 }, + { 0x67C0, 99065 }, + { 0x67C1, 99067 }, + { 0x67C2, 99069 }, + { 0x67C3, 99071 }, + { 0x67C4, 99073 }, + { 0x67C5, 99075 }, + { 0x67C6, 99077 }, + { 0x67C7, 99079 }, + { 0x67C8, 99081 }, + { 0x67C9, 99083 }, + { 0x67CA, 99085 }, + { 0x67CB, 99087 }, + { 0x67CC, 99089 }, + { 0x67CD, 99091 }, + { 0x67CE, 99093 }, + { 0x67CF, 99095 }, + { 0x67D0, 99097 }, + { 0x67D1, 99099 }, + { 0x67D2, 99101 }, + { 0x67D3, 99103 }, + { 0x67D4, 99105 }, + { 0x67D5, 99107 }, + { 0x67D6, 99109 }, + { 0x67D7, 99111 }, + { 0x67D8, 99113 }, + { 0x67D9, 99115 }, + { 0x67DA, 99117 }, + { 0x67DB, 99119 }, + { 0x67DC, 99121 }, + { 0x67DD, 99123 }, + { 0x67DE, 99125 }, + { 0x67DF, 99127 }, + { 0x67E0, 99129 }, + { 0x67E1, 99131 }, + { 0x67E2, 99133 }, + { 0x67E3, 99135 }, + { 0x67E4, 99137 }, + { 0x67E5, 99139 }, + { 0x67E6, 99141 }, + { 0x67E7, 99143 }, + { 0x67E8, 99145 }, + { 0x67E9, 99147 }, + { 0x67EA, 99149 }, + { 0x67EB, 99151 }, + { 0x67EC, 99153 }, + { 0x67ED, 99155 }, + { 0x67EE, 99157 }, + { 0x67EF, 99159 }, + { 0x67F0, 99161 }, + { 0x67F1, 99163 }, + { 0x67F2, 99165 }, + { 0x67F3, 99167 }, + { 0x67F4, 99169 }, + { 0x67F5, 99171 }, + { 0x67F6, 99173 }, + { 0x67F7, 99175 }, + { 0x67F8, 99177 }, + { 0x67F9, 99179 }, + { 0x67FA, 99181 }, + { 0x67FB, 99183 }, + { 0x67FC, 99185 }, + { 0x67FD, 99187 }, + { 0x67FE, 99189 }, + { 0x67FF, 99191 }, + { 0x6800, 99193 }, + { 0x6801, 99195 }, + { 0x6802, 99197 }, + { 0x6803, 99199 }, + { 0x6804, 99201 }, + { 0x6805, 99203 }, + { 0x6806, 99205 }, + { 0x6807, 99207 }, + { 0x6808, 99209 }, + { 0x6809, 99211 }, + { 0x680A, 99213 }, + { 0x680B, 99215 }, + { 0x680C, 99217 }, + { 0x680D, 99219 }, + { 0x680E, 99221 }, + { 0x680F, 99223 }, + { 0x6810, 99225 }, + { 0x6811, 99227 }, + { 0x6812, 99229 }, + { 0x6813, 99231 }, + { 0x6814, 99233 }, + { 0x6815, 99235 }, + { 0x6816, 99237 }, + { 0x6817, 99239 }, + { 0x6818, 99241 }, + { 0x6819, 99243 }, + { 0x681A, 99245 }, + { 0x681B, 99247 }, + { 0x681C, 99249 }, + { 0x681D, 99251 }, + { 0x681E, 99253 }, + { 0x681F, 99255 }, + { 0x6820, 99257 }, + { 0x6821, 99259 }, + { 0x6822, 99261 }, + { 0x6823, 99263 }, + { 0x6824, 99265 }, + { 0x6825, 99267 }, + { 0x6826, 99269 }, + { 0x6827, 99271 }, + { 0x6828, 99273 }, + { 0x6829, 99275 }, + { 0x682A, 99277 }, + { 0x682B, 99279 }, + { 0x682C, 99281 }, + { 0x682D, 99283 }, + { 0x682E, 99285 }, + { 0x682F, 99287 }, + { 0x6830, 99289 }, + { 0x6831, 99291 }, + { 0x6832, 99293 }, + { 0x6833, 99295 }, + { 0x6834, 99297 }, + { 0x6835, 99299 }, + { 0x6836, 99301 }, + { 0x6837, 99303 }, + { 0x6838, 99305 }, + { 0x6839, 99307 }, + { 0x683A, 99309 }, + { 0x683B, 99311 }, + { 0x683C, 99313 }, + { 0x683D, 99315 }, + { 0x683E, 99317 }, + { 0x683F, 99319 }, + { 0x6840, 99321 }, + { 0x6841, 99323 }, + { 0x6842, 99325 }, + { 0x6843, 99327 }, + { 0x6844, 99329 }, + { 0x6845, 99331 }, + { 0x6846, 99333 }, + { 0x6847, 99335 }, + { 0x6848, 99337 }, + { 0x6849, 99339 }, + { 0x684A, 99341 }, + { 0x684B, 99343 }, + { 0x684C, 99345 }, + { 0x684D, 99347 }, + { 0x684E, 99349 }, + { 0x684F, 99351 }, + { 0x6850, 99353 }, + { 0x6851, 99355 }, + { 0x6852, 99357 }, + { 0x6853, 99359 }, + { 0x6854, 99361 }, + { 0x6855, 99363 }, + { 0x6856, 99365 }, + { 0x6857, 99367 }, + { 0x6858, 99369 }, + { 0x6859, 99371 }, + { 0x685A, 99373 }, + { 0x685B, 99375 }, + { 0x685C, 99377 }, + { 0x685D, 99379 }, + { 0x685E, 99381 }, + { 0x685F, 99383 }, + { 0x6860, 99385 }, + { 0x6861, 99387 }, + { 0x6862, 99389 }, + { 0x6863, 99391 }, + { 0x6864, 99393 }, + { 0x6865, 99395 }, + { 0x6866, 99397 }, + { 0x6867, 99399 }, + { 0x6868, 99401 }, + { 0x6869, 99403 }, + { 0x686A, 99405 }, + { 0x686B, 99407 }, + { 0x686C, 99409 }, + { 0x686D, 99411 }, + { 0x686E, 99413 }, + { 0x686F, 99415 }, + { 0x6870, 99417 }, + { 0x6871, 99419 }, + { 0x6872, 99421 }, + { 0x6873, 99423 }, + { 0x6874, 99425 }, + { 0x6875, 99427 }, + { 0x6876, 99429 }, + { 0x6877, 99431 }, + { 0x6878, 99433 }, + { 0x6879, 99435 }, + { 0x687A, 99437 }, + { 0x687B, 99439 }, + { 0x687C, 99441 }, + { 0x687D, 99443 }, + { 0x687E, 99445 }, + { 0x687F, 99447 }, + { 0x6880, 99449 }, + { 0x6881, 99451 }, + { 0x6882, 99453 }, + { 0x6883, 99455 }, + { 0x6884, 99457 }, + { 0x6885, 99459 }, + { 0x6886, 99461 }, + { 0x6887, 99463 }, + { 0x6888, 99465 }, + { 0x6889, 99467 }, + { 0x688A, 99469 }, + { 0x688B, 99471 }, + { 0x688C, 99473 }, + { 0x688D, 99475 }, + { 0x688E, 99477 }, + { 0x688F, 99479 }, + { 0x6890, 99481 }, + { 0x6891, 99483 }, + { 0x6892, 99485 }, + { 0x6893, 99487 }, + { 0x6894, 99489 }, + { 0x6895, 99491 }, + { 0x6896, 99493 }, + { 0x6897, 99495 }, + { 0x6898, 99497 }, + { 0x6899, 99499 }, + { 0x689A, 99501 }, + { 0x689B, 99503 }, + { 0x689C, 99505 }, + { 0x689D, 99507 }, + { 0x689E, 99509 }, + { 0x689F, 99511 }, + { 0x68A0, 99513 }, + { 0x68A1, 99515 }, + { 0x68A2, 99517 }, + { 0x68A3, 99519 }, + { 0x68A4, 99521 }, + { 0x68A5, 99523 }, + { 0x68A6, 99525 }, + { 0x68A7, 99527 }, + { 0x68A8, 99529 }, + { 0x68A9, 99531 }, + { 0x68AA, 99533 }, + { 0x68AB, 99535 }, + { 0x68AC, 99537 }, + { 0x68AD, 99539 }, + { 0x68AE, 99541 }, + { 0x68AF, 99543 }, + { 0x68B0, 99545 }, + { 0x68B1, 99547 }, + { 0x68B2, 99549 }, + { 0x68B3, 99551 }, + { 0x68B4, 99553 }, + { 0x68B5, 99555 }, + { 0x68B6, 99557 }, + { 0x68B7, 99559 }, + { 0x68B8, 99561 }, + { 0x68B9, 99563 }, + { 0x68BA, 99565 }, + { 0x68BB, 99567 }, + { 0x68BC, 99569 }, + { 0x68BD, 99571 }, + { 0x68BE, 99573 }, + { 0x68BF, 99575 }, + { 0x68C0, 99577 }, + { 0x68C1, 99579 }, + { 0x68C2, 99581 }, + { 0x68C3, 99583 }, + { 0x68C4, 99585 }, + { 0x68C5, 99587 }, + { 0x68C6, 99589 }, + { 0x68C7, 99591 }, + { 0x68C8, 99593 }, + { 0x68C9, 99595 }, + { 0x68CA, 99597 }, + { 0x68CB, 99599 }, + { 0x68CC, 99601 }, + { 0x68CD, 99603 }, + { 0x68CE, 99605 }, + { 0x68CF, 99607 }, + { 0x68D0, 99609 }, + { 0x68D1, 99611 }, + { 0x68D2, 99613 }, + { 0x68D3, 99615 }, + { 0x68D4, 99617 }, + { 0x68D5, 99619 }, + { 0x68D6, 99621 }, + { 0x68D7, 99623 }, + { 0x68D8, 99625 }, + { 0x68D9, 99627 }, + { 0x68DA, 99629 }, + { 0x68DB, 99631 }, + { 0x68DC, 99633 }, + { 0x68DD, 99635 }, + { 0x68DE, 99637 }, + { 0x68DF, 99639 }, + { 0x68E0, 99641 }, + { 0x68E1, 99643 }, + { 0x68E2, 99645 }, + { 0x68E3, 99647 }, + { 0x68E4, 99649 }, + { 0x68E5, 99651 }, + { 0x68E6, 99653 }, + { 0x68E7, 99655 }, + { 0x68E8, 99657 }, + { 0x68E9, 99659 }, + { 0x68EA, 99661 }, + { 0x68EB, 99663 }, + { 0x68EC, 99665 }, + { 0x68ED, 99667 }, + { 0x68EE, 99669 }, + { 0x68EF, 99671 }, + { 0x68F0, 99673 }, + { 0x68F1, 99675 }, + { 0x68F2, 99677 }, + { 0x68F3, 99679 }, + { 0x68F4, 99681 }, + { 0x68F5, 99683 }, + { 0x68F6, 99685 }, + { 0x68F7, 99687 }, + { 0x68F8, 99689 }, + { 0x68F9, 99691 }, + { 0x68FA, 99693 }, + { 0x68FB, 99695 }, + { 0x68FC, 99697 }, + { 0x68FD, 99699 }, + { 0x68FE, 99701 }, + { 0x68FF, 99703 }, + { 0x6900, 99705 }, + { 0x6901, 99707 }, + { 0x6902, 99709 }, + { 0x6903, 99711 }, + { 0x6904, 99713 }, + { 0x6905, 99715 }, + { 0x6906, 99717 }, + { 0x6907, 99719 }, + { 0x6908, 99721 }, + { 0x6909, 99723 }, + { 0x690A, 99725 }, + { 0x690B, 99727 }, + { 0x690C, 99729 }, + { 0x690D, 99731 }, + { 0x690E, 99733 }, + { 0x690F, 99735 }, + { 0x6910, 99737 }, + { 0x6911, 99739 }, + { 0x6912, 99741 }, + { 0x6913, 99743 }, + { 0x6914, 99745 }, + { 0x6915, 99747 }, + { 0x6916, 99749 }, + { 0x6917, 99751 }, + { 0x6918, 99753 }, + { 0x6919, 99755 }, + { 0x691A, 99757 }, + { 0x691B, 99759 }, + { 0x691C, 99761 }, + { 0x691D, 99763 }, + { 0x691E, 99765 }, + { 0x691F, 99767 }, + { 0x6920, 99769 }, + { 0x6921, 99771 }, + { 0x6922, 99773 }, + { 0x6923, 99775 }, + { 0x6924, 99777 }, + { 0x6925, 99779 }, + { 0x6926, 99781 }, + { 0x6927, 99783 }, + { 0x6928, 99785 }, + { 0x6929, 99787 }, + { 0x692A, 99789 }, + { 0x692B, 99791 }, + { 0x692C, 99793 }, + { 0x692D, 99795 }, + { 0x692E, 99797 }, + { 0x692F, 99799 }, + { 0x6930, 99801 }, + { 0x6931, 99803 }, + { 0x6932, 99805 }, + { 0x6933, 99807 }, + { 0x6934, 99809 }, + { 0x6935, 99811 }, + { 0x6936, 99813 }, + { 0x6937, 99815 }, + { 0x6938, 99817 }, + { 0x6939, 99819 }, + { 0x693A, 99821 }, + { 0x693B, 99823 }, + { 0x693C, 99825 }, + { 0x693D, 99827 }, + { 0x693E, 99829 }, + { 0x693F, 99831 }, + { 0x6940, 99833 }, + { 0x6941, 99835 }, + { 0x6942, 99837 }, + { 0x6943, 99839 }, + { 0x6944, 99841 }, + { 0x6945, 99843 }, + { 0x6946, 99845 }, + { 0x6947, 99847 }, + { 0x6948, 99849 }, + { 0x6949, 99851 }, + { 0x694A, 99853 }, + { 0x694B, 99855 }, + { 0x694C, 99857 }, + { 0x694D, 99859 }, + { 0x694E, 99861 }, + { 0x694F, 99863 }, + { 0x6950, 99865 }, + { 0x6951, 99867 }, + { 0x6952, 99869 }, + { 0x6953, 99871 }, + { 0x6954, 99873 }, + { 0x6955, 99875 }, + { 0x6956, 99877 }, + { 0x6957, 99879 }, + { 0x6958, 99881 }, + { 0x6959, 99883 }, + { 0x695A, 99885 }, + { 0x695B, 99887 }, + { 0x695C, 99889 }, + { 0x695D, 99891 }, + { 0x695E, 99893 }, + { 0x695F, 99895 }, + { 0x6960, 99897 }, + { 0x6961, 99899 }, + { 0x6962, 99901 }, + { 0x6963, 99903 }, + { 0x6964, 99905 }, + { 0x6965, 99907 }, + { 0x6966, 99909 }, + { 0x6967, 99911 }, + { 0x6968, 99913 }, + { 0x6969, 99915 }, + { 0x696A, 99917 }, + { 0x696B, 99919 }, + { 0x696C, 99921 }, + { 0x696D, 99923 }, + { 0x696E, 99925 }, + { 0x696F, 99927 }, + { 0x6970, 99929 }, + { 0x6971, 99931 }, + { 0x6972, 99933 }, + { 0x6973, 99935 }, + { 0x6974, 99937 }, + { 0x6975, 99939 }, + { 0x6976, 99941 }, + { 0x6977, 99943 }, + { 0x6978, 99945 }, + { 0x6979, 99947 }, + { 0x697A, 99949 }, + { 0x697B, 99951 }, + { 0x697C, 99953 }, + { 0x697D, 99955 }, + { 0x697E, 99957 }, + { 0x697F, 99959 }, + { 0x6980, 99961 }, + { 0x6981, 99963 }, + { 0x6982, 99965 }, + { 0x6983, 99967 }, + { 0x6984, 99969 }, + { 0x6985, 99971 }, + { 0x6986, 99973 }, + { 0x6987, 99975 }, + { 0x6988, 99977 }, + { 0x6989, 99979 }, + { 0x698A, 99981 }, + { 0x698B, 99983 }, + { 0x698C, 99985 }, + { 0x698D, 99987 }, + { 0x698E, 99989 }, + { 0x698F, 99991 }, + { 0x6990, 99993 }, + { 0x6991, 99995 }, + { 0x6992, 99997 }, + { 0x6993, 99999 }, + { 0x6994, 100001 }, + { 0x6995, 100003 }, + { 0x6996, 100005 }, + { 0x6997, 100007 }, + { 0x6998, 100009 }, + { 0x6999, 100011 }, + { 0x699A, 100013 }, + { 0x699B, 100015 }, + { 0x699C, 100017 }, + { 0x699D, 100019 }, + { 0x699E, 100021 }, + { 0x699F, 100023 }, + { 0x69A0, 100025 }, + { 0x69A1, 100027 }, + { 0x69A2, 100029 }, + { 0x69A3, 100031 }, + { 0x69A4, 100033 }, + { 0x69A5, 100035 }, + { 0x69A6, 100037 }, + { 0x69A7, 100039 }, + { 0x69A8, 100041 }, + { 0x69A9, 100043 }, + { 0x69AA, 100045 }, + { 0x69AB, 100047 }, + { 0x69AC, 100049 }, + { 0x69AD, 100051 }, + { 0x69AE, 100053 }, + { 0x69AF, 100055 }, + { 0x69B0, 100057 }, + { 0x69B1, 100059 }, + { 0x69B2, 100061 }, + { 0x69B3, 100063 }, + { 0x69B4, 100065 }, + { 0x69B5, 100067 }, + { 0x69B6, 100069 }, + { 0x69B7, 100071 }, + { 0x69B8, 100073 }, + { 0x69B9, 100075 }, + { 0x69BA, 100077 }, + { 0x69BB, 100079 }, + { 0x69BC, 100081 }, + { 0x69BD, 100083 }, + { 0x69BE, 100085 }, + { 0x69BF, 100087 }, + { 0x69C0, 100089 }, + { 0x69C1, 100091 }, + { 0x69C2, 100093 }, + { 0x69C3, 100095 }, + { 0x69C4, 100097 }, + { 0x69C5, 100099 }, + { 0x69C6, 100101 }, + { 0x69C7, 100103 }, + { 0x69C8, 100105 }, + { 0x69C9, 100107 }, + { 0x69CA, 100109 }, + { 0x69CB, 100111 }, + { 0x69CC, 100113 }, + { 0x69CD, 100115 }, + { 0x69CE, 100117 }, + { 0x69CF, 100119 }, + { 0x69D0, 100121 }, + { 0x69D1, 100123 }, + { 0x69D2, 100125 }, + { 0x69D3, 100127 }, + { 0x69D4, 100129 }, + { 0x69D5, 100131 }, + { 0x69D6, 100133 }, + { 0x69D7, 100135 }, + { 0x69D8, 100137 }, + { 0x69D9, 100139 }, + { 0x69DA, 100141 }, + { 0x69DB, 100143 }, + { 0x69DC, 100145 }, + { 0x69DD, 100147 }, + { 0x69DE, 100149 }, + { 0x69DF, 100151 }, + { 0x69E0, 100153 }, + { 0x69E1, 100155 }, + { 0x69E2, 100157 }, + { 0x69E3, 100159 }, + { 0x69E4, 100161 }, + { 0x69E5, 100163 }, + { 0x69E6, 100165 }, + { 0x69E7, 100167 }, + { 0x69E8, 100169 }, + { 0x69E9, 100171 }, + { 0x69EA, 100173 }, + { 0x69EB, 100175 }, + { 0x69EC, 100177 }, + { 0x69ED, 100179 }, + { 0x69EE, 100181 }, + { 0x69EF, 100183 }, + { 0x69F0, 100185 }, + { 0x69F1, 100187 }, + { 0x69F2, 100189 }, + { 0x69F3, 100191 }, + { 0x69F4, 100193 }, + { 0x69F5, 100195 }, + { 0x69F6, 100197 }, + { 0x69F7, 100199 }, + { 0x69F8, 100201 }, + { 0x69F9, 100203 }, + { 0x69FA, 100205 }, + { 0x69FB, 100207 }, + { 0x69FC, 100209 }, + { 0x69FD, 100211 }, + { 0x69FE, 100213 }, + { 0x69FF, 100215 }, + { 0x6A00, 100217 }, + { 0x6A01, 100219 }, + { 0x6A02, 100221 }, + { 0x6A03, 100223 }, + { 0x6A04, 100225 }, + { 0x6A05, 100227 }, + { 0x6A06, 100229 }, + { 0x6A07, 100231 }, + { 0x6A08, 100233 }, + { 0x6A09, 100235 }, + { 0x6A0A, 100237 }, + { 0x6A0B, 100239 }, + { 0x6A0C, 100241 }, + { 0x6A0D, 100243 }, + { 0x6A0E, 100245 }, + { 0x6A0F, 100247 }, + { 0x6A10, 100249 }, + { 0x6A11, 100251 }, + { 0x6A12, 100253 }, + { 0x6A13, 100255 }, + { 0x6A14, 100257 }, + { 0x6A15, 100259 }, + { 0x6A16, 100261 }, + { 0x6A17, 100263 }, + { 0x6A18, 100265 }, + { 0x6A19, 100267 }, + { 0x6A1A, 100269 }, + { 0x6A1B, 100271 }, + { 0x6A1C, 100273 }, + { 0x6A1D, 100275 }, + { 0x6A1E, 100277 }, + { 0x6A1F, 100279 }, + { 0x6A20, 100281 }, + { 0x6A21, 100283 }, + { 0x6A22, 100285 }, + { 0x6A23, 100287 }, + { 0x6A24, 100289 }, + { 0x6A25, 100291 }, + { 0x6A26, 100293 }, + { 0x6A27, 100295 }, + { 0x6A28, 100297 }, + { 0x6A29, 100299 }, + { 0x6A2A, 100301 }, + { 0x6A2B, 100303 }, + { 0x6A2C, 100305 }, + { 0x6A2D, 100307 }, + { 0x6A2E, 100309 }, + { 0x6A2F, 100311 }, + { 0x6A30, 100313 }, + { 0x6A31, 100315 }, + { 0x6A32, 100317 }, + { 0x6A33, 100319 }, + { 0x6A34, 100321 }, + { 0x6A35, 100323 }, + { 0x6A36, 100325 }, + { 0x6A37, 100327 }, + { 0x6A38, 100329 }, + { 0x6A39, 100331 }, + { 0x6A3A, 100333 }, + { 0x6A3B, 100335 }, + { 0x6A3C, 100337 }, + { 0x6A3D, 100339 }, + { 0x6A3E, 100341 }, + { 0x6A3F, 100343 }, + { 0x6A40, 100345 }, + { 0x6A41, 100347 }, + { 0x6A42, 100349 }, + { 0x6A43, 100351 }, + { 0x6A44, 100353 }, + { 0x6A45, 100355 }, + { 0x6A46, 100357 }, + { 0x6A47, 100359 }, + { 0x6A48, 100361 }, + { 0x6A49, 100363 }, + { 0x6A4A, 100365 }, + { 0x6A4B, 100367 }, + { 0x6A4C, 100369 }, + { 0x6A4D, 100371 }, + { 0x6A4E, 100373 }, + { 0x6A4F, 100375 }, + { 0x6A50, 100377 }, + { 0x6A51, 100379 }, + { 0x6A52, 100381 }, + { 0x6A53, 100383 }, + { 0x6A54, 100385 }, + { 0x6A55, 100387 }, + { 0x6A56, 100389 }, + { 0x6A57, 100391 }, + { 0x6A58, 100393 }, + { 0x6A59, 100395 }, + { 0x6A5A, 100397 }, + { 0x6A5B, 100399 }, + { 0x6A5C, 100401 }, + { 0x6A5D, 100403 }, + { 0x6A5E, 100405 }, + { 0x6A5F, 100407 }, + { 0x6A60, 100409 }, + { 0x6A61, 100411 }, + { 0x6A62, 100413 }, + { 0x6A63, 100415 }, + { 0x6A64, 100417 }, + { 0x6A65, 100419 }, + { 0x6A66, 100421 }, + { 0x6A67, 100423 }, + { 0x6A68, 100425 }, + { 0x6A69, 100427 }, + { 0x6A6A, 100429 }, + { 0x6A6B, 100431 }, + { 0x6A6C, 100433 }, + { 0x6A6D, 100435 }, + { 0x6A6E, 100437 }, + { 0x6A6F, 100439 }, + { 0x6A70, 100441 }, + { 0x6A71, 100443 }, + { 0x6A72, 100445 }, + { 0x6A73, 100447 }, + { 0x6A74, 100449 }, + { 0x6A75, 100451 }, + { 0x6A76, 100453 }, + { 0x6A77, 100455 }, + { 0x6A78, 100457 }, + { 0x6A79, 100459 }, + { 0x6A7A, 100461 }, + { 0x6A7B, 100463 }, + { 0x6A7C, 100465 }, + { 0x6A7D, 100467 }, + { 0x6A7E, 100469 }, + { 0x6A7F, 100471 }, + { 0x6A80, 100473 }, + { 0x6A81, 100475 }, + { 0x6A82, 100477 }, + { 0x6A83, 100479 }, + { 0x6A84, 100481 }, + { 0x6A85, 100483 }, + { 0x6A86, 100485 }, + { 0x6A87, 100487 }, + { 0x6A88, 100489 }, + { 0x6A89, 100491 }, + { 0x6A8A, 100493 }, + { 0x6A8B, 100495 }, + { 0x6A8C, 100497 }, + { 0x6A8D, 100499 }, + { 0x6A8E, 100501 }, + { 0x6A8F, 100503 }, + { 0x6A90, 100505 }, + { 0x6A91, 100507 }, + { 0x6A92, 100509 }, + { 0x6A93, 100511 }, + { 0x6A94, 100513 }, + { 0x6A95, 100515 }, + { 0x6A96, 100517 }, + { 0x6A97, 100519 }, + { 0x6A98, 100521 }, + { 0x6A99, 100523 }, + { 0x6A9A, 100525 }, + { 0x6A9B, 100527 }, + { 0x6A9C, 100529 }, + { 0x6A9D, 100531 }, + { 0x6A9E, 100533 }, + { 0x6A9F, 100535 }, + { 0x6AA0, 100537 }, + { 0x6AA1, 100539 }, + { 0x6AA2, 100541 }, + { 0x6AA3, 100543 }, + { 0x6AA4, 100545 }, + { 0x6AA5, 100547 }, + { 0x6AA6, 100549 }, + { 0x6AA7, 100551 }, + { 0x6AA8, 100553 }, + { 0x6AA9, 100555 }, + { 0x6AAA, 100557 }, + { 0x6AAB, 100559 }, + { 0x6AAC, 100561 }, + { 0x6AAD, 100563 }, + { 0x6AAE, 100565 }, + { 0x6AAF, 100567 }, + { 0x6AB0, 100569 }, + { 0x6AB1, 100571 }, + { 0x6AB2, 100573 }, + { 0x6AB3, 100575 }, + { 0x6AB4, 100577 }, + { 0x6AB5, 100579 }, + { 0x6AB6, 100581 }, + { 0x6AB7, 100583 }, + { 0x6AB8, 100585 }, + { 0x6AB9, 100587 }, + { 0x6ABA, 100589 }, + { 0x6ABB, 100591 }, + { 0x6ABC, 100593 }, + { 0x6ABD, 100595 }, + { 0x6ABE, 100597 }, + { 0x6ABF, 100599 }, + { 0x6AC0, 100601 }, + { 0x6AC1, 100603 }, + { 0x6AC2, 100605 }, + { 0x6AC3, 100607 }, + { 0x6AC4, 100609 }, + { 0x6AC5, 100611 }, + { 0x6AC6, 100613 }, + { 0x6AC7, 100615 }, + { 0x6AC8, 100617 }, + { 0x6AC9, 100619 }, + { 0x6ACA, 100621 }, + { 0x6ACB, 100623 }, + { 0x6ACC, 100625 }, + { 0x6ACD, 100627 }, + { 0x6ACE, 100629 }, + { 0x6ACF, 100631 }, + { 0x6AD0, 100633 }, + { 0x6AD1, 100635 }, + { 0x6AD2, 100637 }, + { 0x6AD3, 100639 }, + { 0x6AD4, 100641 }, + { 0x6AD5, 100643 }, + { 0x6AD6, 100645 }, + { 0x6AD7, 100647 }, + { 0x6AD8, 100649 }, + { 0x6AD9, 100651 }, + { 0x6ADA, 100653 }, + { 0x6ADB, 100655 }, + { 0x6ADC, 100657 }, + { 0x6ADD, 100659 }, + { 0x6ADE, 100661 }, + { 0x6ADF, 100663 }, + { 0x6AE0, 100665 }, + { 0x6AE1, 100667 }, + { 0x6AE2, 100669 }, + { 0x6AE3, 100671 }, + { 0x6AE4, 100673 }, + { 0x6AE5, 100675 }, + { 0x6AE6, 100677 }, + { 0x6AE7, 100679 }, + { 0x6AE8, 100681 }, + { 0x6AE9, 100683 }, + { 0x6AEA, 100685 }, + { 0x6AEB, 100687 }, + { 0x6AEC, 100689 }, + { 0x6AED, 100691 }, + { 0x6AEE, 100693 }, + { 0x6AEF, 100695 }, + { 0x6AF0, 100697 }, + { 0x6AF1, 100699 }, + { 0x6AF2, 100701 }, + { 0x6AF3, 100703 }, + { 0x6AF4, 100705 }, + { 0x6AF5, 100707 }, + { 0x6AF6, 100709 }, + { 0x6AF7, 100711 }, + { 0x6AF8, 100713 }, + { 0x6AF9, 100715 }, + { 0x6AFA, 100717 }, + { 0x6AFB, 100719 }, + { 0x6AFC, 100721 }, + { 0x6AFD, 100723 }, + { 0x6AFE, 100725 }, + { 0x6AFF, 100727 }, + { 0x6B00, 100729 }, + { 0x6B01, 100731 }, + { 0x6B02, 100733 }, + { 0x6B03, 100735 }, + { 0x6B04, 100737 }, + { 0x6B05, 100739 }, + { 0x6B06, 100741 }, + { 0x6B07, 100743 }, + { 0x6B08, 100745 }, + { 0x6B09, 100747 }, + { 0x6B0A, 100749 }, + { 0x6B0B, 100751 }, + { 0x6B0C, 100753 }, + { 0x6B0D, 100755 }, + { 0x6B0E, 100757 }, + { 0x6B0F, 100759 }, + { 0x6B10, 100761 }, + { 0x6B11, 100763 }, + { 0x6B12, 100765 }, + { 0x6B13, 100767 }, + { 0x6B14, 100769 }, + { 0x6B15, 100771 }, + { 0x6B16, 100773 }, + { 0x6B17, 100775 }, + { 0x6B18, 100777 }, + { 0x6B19, 100779 }, + { 0x6B1A, 100781 }, + { 0x6B1B, 100783 }, + { 0x6B1C, 100785 }, + { 0x6B1D, 100787 }, + { 0x6B1E, 100789 }, + { 0x6B1F, 100791 }, + { 0x6B20, 100793 }, + { 0x6B21, 100795 }, + { 0x6B22, 100797 }, + { 0x6B23, 100799 }, + { 0x6B24, 100801 }, + { 0x6B25, 100803 }, + { 0x6B26, 100805 }, + { 0x6B27, 100807 }, + { 0x6B28, 100809 }, + { 0x6B29, 100811 }, + { 0x6B2A, 100813 }, + { 0x6B2B, 100815 }, + { 0x6B2C, 100817 }, + { 0x6B2D, 100819 }, + { 0x6B2E, 100821 }, + { 0x6B2F, 100823 }, + { 0x6B30, 100825 }, + { 0x6B31, 100827 }, + { 0x6B32, 100829 }, + { 0x6B33, 100831 }, + { 0x6B34, 100833 }, + { 0x6B35, 100835 }, + { 0x6B36, 100837 }, + { 0x6B37, 100839 }, + { 0x6B38, 100841 }, + { 0x6B39, 100843 }, + { 0x6B3A, 100845 }, + { 0x6B3B, 100847 }, + { 0x6B3C, 100849 }, + { 0x6B3D, 100851 }, + { 0x6B3E, 100853 }, + { 0x6B3F, 100855 }, + { 0x6B40, 100857 }, + { 0x6B41, 100859 }, + { 0x6B42, 100861 }, + { 0x6B43, 100863 }, + { 0x6B44, 100865 }, + { 0x6B45, 100867 }, + { 0x6B46, 100869 }, + { 0x6B47, 100871 }, + { 0x6B48, 100873 }, + { 0x6B49, 100875 }, + { 0x6B4A, 100877 }, + { 0x6B4B, 100879 }, + { 0x6B4C, 100881 }, + { 0x6B4D, 100883 }, + { 0x6B4E, 100885 }, + { 0x6B4F, 100887 }, + { 0x6B50, 100889 }, + { 0x6B51, 100891 }, + { 0x6B52, 100893 }, + { 0x6B53, 100895 }, + { 0x6B54, 100897 }, + { 0x6B55, 100899 }, + { 0x6B56, 100901 }, + { 0x6B57, 100903 }, + { 0x6B58, 100905 }, + { 0x6B59, 100907 }, + { 0x6B5A, 100909 }, + { 0x6B5B, 100911 }, + { 0x6B5C, 100913 }, + { 0x6B5D, 100915 }, + { 0x6B5E, 100917 }, + { 0x6B5F, 100919 }, + { 0x6B60, 100921 }, + { 0x6B61, 100923 }, + { 0x6B62, 100925 }, + { 0x6B63, 100927 }, + { 0x6B64, 100929 }, + { 0x6B65, 100931 }, + { 0x6B66, 100933 }, + { 0x6B67, 100935 }, + { 0x6B68, 100937 }, + { 0x6B69, 100939 }, + { 0x6B6A, 100941 }, + { 0x6B6B, 100943 }, + { 0x6B6C, 100945 }, + { 0x6B6D, 100947 }, + { 0x6B6E, 100949 }, + { 0x6B6F, 100951 }, + { 0x6B70, 100953 }, + { 0x6B71, 100955 }, + { 0x6B72, 100957 }, + { 0x6B73, 100959 }, + { 0x6B74, 100961 }, + { 0x6B75, 100963 }, + { 0x6B76, 100965 }, + { 0x6B77, 100967 }, + { 0x6B78, 100969 }, + { 0x6B79, 100971 }, + { 0x6B7A, 100973 }, + { 0x6B7B, 100975 }, + { 0x6B7C, 100977 }, + { 0x6B7D, 100979 }, + { 0x6B7E, 100981 }, + { 0x6B7F, 100983 }, + { 0x6B80, 100985 }, + { 0x6B81, 100987 }, + { 0x6B82, 100989 }, + { 0x6B83, 100991 }, + { 0x6B84, 100993 }, + { 0x6B85, 100995 }, + { 0x6B86, 100997 }, + { 0x6B87, 100999 }, + { 0x6B88, 101001 }, + { 0x6B89, 101003 }, + { 0x6B8A, 101005 }, + { 0x6B8B, 101007 }, + { 0x6B8C, 101009 }, + { 0x6B8D, 101011 }, + { 0x6B8E, 101013 }, + { 0x6B8F, 101015 }, + { 0x6B90, 101017 }, + { 0x6B91, 101019 }, + { 0x6B92, 101021 }, + { 0x6B93, 101023 }, + { 0x6B94, 101025 }, + { 0x6B95, 101027 }, + { 0x6B96, 101029 }, + { 0x6B97, 101031 }, + { 0x6B98, 101033 }, + { 0x6B99, 101035 }, + { 0x6B9A, 101037 }, + { 0x6B9B, 101039 }, + { 0x6B9C, 101041 }, + { 0x6B9D, 101043 }, + { 0x6B9E, 101045 }, + { 0x6B9F, 101047 }, + { 0x6BA0, 101049 }, + { 0x6BA1, 101051 }, + { 0x6BA2, 101053 }, + { 0x6BA3, 101055 }, + { 0x6BA4, 101057 }, + { 0x6BA5, 101059 }, + { 0x6BA6, 101061 }, + { 0x6BA7, 101063 }, + { 0x6BA8, 101065 }, + { 0x6BA9, 101067 }, + { 0x6BAA, 101069 }, + { 0x6BAB, 101071 }, + { 0x6BAC, 101073 }, + { 0x6BAD, 101075 }, + { 0x6BAE, 101077 }, + { 0x6BAF, 101079 }, + { 0x6BB0, 101081 }, + { 0x6BB1, 101083 }, + { 0x6BB2, 101085 }, + { 0x6BB3, 101087 }, + { 0x6BB4, 101089 }, + { 0x6BB5, 101091 }, + { 0x6BB6, 101093 }, + { 0x6BB7, 101095 }, + { 0x6BB8, 101097 }, + { 0x6BB9, 101099 }, + { 0x6BBA, 101101 }, + { 0x6BBB, 101103 }, + { 0x6BBC, 101105 }, + { 0x6BBD, 101107 }, + { 0x6BBE, 101109 }, + { 0x6BBF, 101111 }, + { 0x6BC0, 101113 }, + { 0x6BC1, 101115 }, + { 0x6BC2, 101117 }, + { 0x6BC3, 101119 }, + { 0x6BC4, 101121 }, + { 0x6BC5, 101123 }, + { 0x6BC6, 101125 }, + { 0x6BC7, 101127 }, + { 0x6BC8, 101129 }, + { 0x6BC9, 101131 }, + { 0x6BCA, 101133 }, + { 0x6BCB, 101135 }, + { 0x6BCC, 101137 }, + { 0x6BCD, 101139 }, + { 0x6BCE, 101141 }, + { 0x6BCF, 101143 }, + { 0x6BD0, 101145 }, + { 0x6BD1, 101147 }, + { 0x6BD2, 101149 }, + { 0x6BD3, 101151 }, + { 0x6BD4, 101153 }, + { 0x6BD5, 101155 }, + { 0x6BD6, 101157 }, + { 0x6BD7, 101159 }, + { 0x6BD8, 101161 }, + { 0x6BD9, 101163 }, + { 0x6BDA, 101165 }, + { 0x6BDB, 101167 }, + { 0x6BDC, 101169 }, + { 0x6BDD, 101171 }, + { 0x6BDE, 101173 }, + { 0x6BDF, 101175 }, + { 0x6BE0, 101177 }, + { 0x6BE1, 101179 }, + { 0x6BE2, 101181 }, + { 0x6BE3, 101183 }, + { 0x6BE4, 101185 }, + { 0x6BE5, 101187 }, + { 0x6BE6, 101189 }, + { 0x6BE7, 101191 }, + { 0x6BE8, 101193 }, + { 0x6BE9, 101195 }, + { 0x6BEA, 101197 }, + { 0x6BEB, 101199 }, + { 0x6BEC, 101201 }, + { 0x6BED, 101203 }, + { 0x6BEE, 101205 }, + { 0x6BEF, 101207 }, + { 0x6BF0, 101209 }, + { 0x6BF1, 101211 }, + { 0x6BF2, 101213 }, + { 0x6BF3, 101215 }, + { 0x6BF4, 101217 }, + { 0x6BF5, 101219 }, + { 0x6BF6, 101221 }, + { 0x6BF7, 101223 }, + { 0x6BF8, 101225 }, + { 0x6BF9, 101227 }, + { 0x6BFA, 101229 }, + { 0x6BFB, 101231 }, + { 0x6BFC, 101233 }, + { 0x6BFD, 101235 }, + { 0x6BFE, 101237 }, + { 0x6BFF, 101239 }, + { 0x6C00, 101241 }, + { 0x6C01, 101243 }, + { 0x6C02, 101245 }, + { 0x6C03, 101247 }, + { 0x6C04, 101249 }, + { 0x6C05, 101251 }, + { 0x6C06, 101253 }, + { 0x6C07, 101255 }, + { 0x6C08, 101257 }, + { 0x6C09, 101259 }, + { 0x6C0A, 101261 }, + { 0x6C0B, 101263 }, + { 0x6C0C, 101265 }, + { 0x6C0D, 101267 }, + { 0x6C0E, 101269 }, + { 0x6C0F, 101271 }, + { 0x6C10, 101273 }, + { 0x6C11, 101275 }, + { 0x6C12, 101277 }, + { 0x6C13, 101279 }, + { 0x6C14, 101281 }, + { 0x6C15, 101283 }, + { 0x6C16, 101285 }, + { 0x6C17, 101287 }, + { 0x6C18, 101289 }, + { 0x6C19, 101291 }, + { 0x6C1A, 101293 }, + { 0x6C1B, 101295 }, + { 0x6C1C, 101297 }, + { 0x6C1D, 101299 }, + { 0x6C1E, 101301 }, + { 0x6C1F, 101303 }, + { 0x6C20, 101305 }, + { 0x6C21, 101307 }, + { 0x6C22, 101309 }, + { 0x6C23, 101311 }, + { 0x6C24, 101313 }, + { 0x6C25, 101315 }, + { 0x6C26, 101317 }, + { 0x6C27, 101319 }, + { 0x6C28, 101321 }, + { 0x6C29, 101323 }, + { 0x6C2A, 101325 }, + { 0x6C2B, 101327 }, + { 0x6C2C, 101329 }, + { 0x6C2D, 101331 }, + { 0x6C2E, 101333 }, + { 0x6C2F, 101335 }, + { 0x6C30, 101337 }, + { 0x6C31, 101339 }, + { 0x6C32, 101341 }, + { 0x6C33, 101343 }, + { 0x6C34, 101345 }, + { 0x6C35, 101347 }, + { 0x6C36, 101349 }, + { 0x6C37, 101351 }, + { 0x6C38, 101353 }, + { 0x6C39, 101355 }, + { 0x6C3A, 101357 }, + { 0x6C3B, 101359 }, + { 0x6C3C, 101361 }, + { 0x6C3D, 101363 }, + { 0x6C3E, 101365 }, + { 0x6C3F, 101367 }, + { 0x6C40, 101369 }, + { 0x6C41, 101371 }, + { 0x6C42, 101373 }, + { 0x6C43, 101375 }, + { 0x6C44, 101377 }, + { 0x6C45, 101379 }, + { 0x6C46, 101381 }, + { 0x6C47, 101383 }, + { 0x6C48, 101385 }, + { 0x6C49, 101387 }, + { 0x6C4A, 101389 }, + { 0x6C4B, 101391 }, + { 0x6C4C, 101393 }, + { 0x6C4D, 101395 }, + { 0x6C4E, 101397 }, + { 0x6C4F, 101399 }, + { 0x6C50, 101401 }, + { 0x6C51, 101403 }, + { 0x6C52, 101405 }, + { 0x6C53, 101407 }, + { 0x6C54, 101409 }, + { 0x6C55, 101411 }, + { 0x6C56, 101413 }, + { 0x6C57, 101415 }, + { 0x6C58, 101417 }, + { 0x6C59, 101419 }, + { 0x6C5A, 101421 }, + { 0x6C5B, 101423 }, + { 0x6C5C, 101425 }, + { 0x6C5D, 101427 }, + { 0x6C5E, 101429 }, + { 0x6C5F, 101431 }, + { 0x6C60, 101433 }, + { 0x6C61, 101435 }, + { 0x6C62, 101437 }, + { 0x6C63, 101439 }, + { 0x6C64, 101441 }, + { 0x6C65, 101443 }, + { 0x6C66, 101445 }, + { 0x6C67, 101447 }, + { 0x6C68, 101449 }, + { 0x6C69, 101451 }, + { 0x6C6A, 101453 }, + { 0x6C6B, 101455 }, + { 0x6C6C, 101457 }, + { 0x6C6D, 101459 }, + { 0x6C6E, 101461 }, + { 0x6C6F, 101463 }, + { 0x6C70, 101465 }, + { 0x6C71, 101467 }, + { 0x6C72, 101469 }, + { 0x6C73, 101471 }, + { 0x6C74, 101473 }, + { 0x6C75, 101475 }, + { 0x6C76, 101477 }, + { 0x6C77, 101479 }, + { 0x6C78, 101481 }, + { 0x6C79, 101483 }, + { 0x6C7A, 101485 }, + { 0x6C7B, 101487 }, + { 0x6C7C, 101489 }, + { 0x6C7D, 101491 }, + { 0x6C7E, 101493 }, + { 0x6C7F, 101495 }, + { 0x6C80, 101497 }, + { 0x6C81, 101499 }, + { 0x6C82, 101501 }, + { 0x6C83, 101503 }, + { 0x6C84, 101505 }, + { 0x6C85, 101507 }, + { 0x6C86, 101509 }, + { 0x6C87, 101511 }, + { 0x6C88, 101513 }, + { 0x6C89, 101515 }, + { 0x6C8A, 101517 }, + { 0x6C8B, 101519 }, + { 0x6C8C, 101521 }, + { 0x6C8D, 101523 }, + { 0x6C8E, 101525 }, + { 0x6C8F, 101527 }, + { 0x6C90, 101529 }, + { 0x6C91, 101531 }, + { 0x6C92, 101533 }, + { 0x6C93, 101535 }, + { 0x6C94, 101537 }, + { 0x6C95, 101539 }, + { 0x6C96, 101541 }, + { 0x6C97, 101543 }, + { 0x6C98, 101545 }, + { 0x6C99, 101547 }, + { 0x6C9A, 101549 }, + { 0x6C9B, 101551 }, + { 0x6C9C, 101553 }, + { 0x6C9D, 101555 }, + { 0x6C9E, 101557 }, + { 0x6C9F, 101559 }, + { 0x6CA0, 101561 }, + { 0x6CA1, 101563 }, + { 0x6CA2, 101565 }, + { 0x6CA3, 101567 }, + { 0x6CA4, 101569 }, + { 0x6CA5, 101571 }, + { 0x6CA6, 101573 }, + { 0x6CA7, 101575 }, + { 0x6CA8, 101577 }, + { 0x6CA9, 101579 }, + { 0x6CAA, 101581 }, + { 0x6CAB, 101583 }, + { 0x6CAC, 101585 }, + { 0x6CAD, 101587 }, + { 0x6CAE, 101589 }, + { 0x6CAF, 101591 }, + { 0x6CB0, 101593 }, + { 0x6CB1, 101595 }, + { 0x6CB2, 101597 }, + { 0x6CB3, 101599 }, + { 0x6CB4, 101601 }, + { 0x6CB5, 101603 }, + { 0x6CB6, 101605 }, + { 0x6CB7, 101607 }, + { 0x6CB8, 101609 }, + { 0x6CB9, 101611 }, + { 0x6CBA, 101613 }, + { 0x6CBB, 101615 }, + { 0x6CBC, 101617 }, + { 0x6CBD, 101619 }, + { 0x6CBE, 101621 }, + { 0x6CBF, 101623 }, + { 0x6CC0, 101625 }, + { 0x6CC1, 101627 }, + { 0x6CC2, 101629 }, + { 0x6CC3, 101631 }, + { 0x6CC4, 101633 }, + { 0x6CC5, 101635 }, + { 0x6CC6, 101637 }, + { 0x6CC7, 101639 }, + { 0x6CC8, 101641 }, + { 0x6CC9, 101643 }, + { 0x6CCA, 101645 }, + { 0x6CCB, 101647 }, + { 0x6CCC, 101649 }, + { 0x6CCD, 101651 }, + { 0x6CCE, 101653 }, + { 0x6CCF, 101655 }, + { 0x6CD0, 101657 }, + { 0x6CD1, 101659 }, + { 0x6CD2, 101661 }, + { 0x6CD3, 101663 }, + { 0x6CD4, 101665 }, + { 0x6CD5, 101667 }, + { 0x6CD6, 101669 }, + { 0x6CD7, 101671 }, + { 0x6CD8, 101673 }, + { 0x6CD9, 101675 }, + { 0x6CDA, 101677 }, + { 0x6CDB, 101679 }, + { 0x6CDC, 101681 }, + { 0x6CDD, 101683 }, + { 0x6CDE, 101685 }, + { 0x6CDF, 101687 }, + { 0x6CE0, 101689 }, + { 0x6CE1, 101691 }, + { 0x6CE2, 101693 }, + { 0x6CE3, 101695 }, + { 0x6CE4, 101697 }, + { 0x6CE5, 101699 }, + { 0x6CE6, 101701 }, + { 0x6CE7, 101703 }, + { 0x6CE8, 101705 }, + { 0x6CE9, 101707 }, + { 0x6CEA, 101709 }, + { 0x6CEB, 101711 }, + { 0x6CEC, 101713 }, + { 0x6CED, 101715 }, + { 0x6CEE, 101717 }, + { 0x6CEF, 101719 }, + { 0x6CF0, 101721 }, + { 0x6CF1, 101723 }, + { 0x6CF2, 101725 }, + { 0x6CF3, 101727 }, + { 0x6CF4, 101729 }, + { 0x6CF5, 101731 }, + { 0x6CF6, 101733 }, + { 0x6CF7, 101735 }, + { 0x6CF8, 101737 }, + { 0x6CF9, 101739 }, + { 0x6CFA, 101741 }, + { 0x6CFB, 101743 }, + { 0x6CFC, 101745 }, + { 0x6CFD, 101747 }, + { 0x6CFE, 101749 }, + { 0x6CFF, 101751 }, + { 0x6D00, 101753 }, + { 0x6D01, 101755 }, + { 0x6D02, 101757 }, + { 0x6D03, 101759 }, + { 0x6D04, 101761 }, + { 0x6D05, 101763 }, + { 0x90BF, 101765 }, + { 0x1F58, 101767 }, + { 0x9054, 101769 }, + { 0x90D9, 101772 }, + { 0x8FCB, 101774 }, + { 0x928A, 101775 }, + { 0x1FDA, 101776 }, + { 0x2335, 101778 }, + { 0x909C, 101779 }, + { 0x9137, 101784 }, + { 0x10F3, 101787 }, + { 0x10F6, 101790 }, + { 0x10F4, 101792 }, + { 0x10FA, 101794 }, + { 0x10FF, 101797 }, + { 0x10FB, 101800 }, + { 0x10FE, 101803 }, + { 0x10FD, 101806 }, + { 0x1102, 101809 }, + { 0x1101, 101812 }, + { 0x1100, 101815 }, + { 0x10FC, 101818 }, + { 0x1127, 101821 }, + { 0x111F, 101825 }, + { 0x1122, 101829 }, + { 0x1125, 101833 }, + { 0x1123, 101837 }, + { 0x1121, 101841 }, + { 0x111E, 101846 }, + { 0x1124, 101850 }, + { 0x1120, 101854 }, + { 0x1126, 101858 }, + { 0x1103, 101862 }, + { 0x110D, 101865 }, + { 0x1107, 101869 }, + { 0x1106, 101872 }, + { 0x1108, 101875 }, + { 0x110A, 101878 }, + { 0x110B, 101881 }, + { 0x1105, 101884 }, + { 0x1104, 101887 }, + { 0x110C, 101890 }, + { 0x1109, 101893 }, + { 0x10F7, 101896 }, + { 0x10F1, 101899 }, + { 0x10F8, 101902 }, + { 0x1001, 101905 }, + { 0x1006, 101908 }, + { 0x1003, 101911 }, + { 0x1007, 101914 }, + { 0x1002, 101917 }, + { 0x1019, 101920 }, + { 0x101E, 101923 }, + { 0x101B, 101926 }, + { 0x101F, 101929 }, + { 0x101A, 101932 }, + { 0x1086, 101935 }, + { 0x108B, 101938 }, + { 0x1088, 101941 }, + { 0x108C, 101944 }, + { 0x1087, 101947 }, + { 0x10DB, 101950 }, + { 0x10E0, 101953 }, + { 0x10DD, 101956 }, + { 0x10E1, 101959 }, + { 0x10DC, 101962 }, + { 0x109E, 101965 }, + { 0x10A3, 101968 }, + { 0x10A0, 101971 }, + { 0x10A4, 101974 }, + { 0x109F, 101977 }, + { 0x0FA8, 101980 }, + { 0x0FAD, 101983 }, + { 0x0FAA, 101986 }, + { 0x0FAE, 101989 }, + { 0x0FA9, 101992 }, + { 0x1096, 101995 }, + { 0x109B, 101998 }, + { 0x1098, 102001 }, + { 0x109C, 102004 }, + { 0x1097, 102007 }, + { 0x1046, 102010 }, + { 0x104B, 102013 }, + { 0x1048, 102016 }, + { 0x104C, 102019 }, + { 0x1047, 102022 }, + { 0x0FB0, 102025 }, + { 0x0FB5, 102028 }, + { 0x0FB2, 102031 }, + { 0x0FB6, 102034 }, + { 0x0FB1, 102037 }, + { 0x0FC0, 102040 }, + { 0x0FC5, 102043 }, + { 0x0FC2, 102046 }, + { 0x0FC6, 102049 }, + { 0x0FC1, 102052 }, + { 0x102E, 102055 }, + { 0x1033, 102058 }, + { 0x1030, 102061 }, + { 0x1034, 102064 }, + { 0x102F, 102067 }, + { 0x10E3, 102070 }, + { 0x10E8, 102073 }, + { 0x10E5, 102076 }, + { 0x10E9, 102079 }, + { 0x10E4, 102082 }, + { 0x0FE8, 102085 }, + { 0x0FED, 102088 }, + { 0x0FEA, 102091 }, + { 0x0FEE, 102094 }, + { 0x0FE9, 102097 }, + { 0x0FD0, 102100 }, + { 0x0FD5, 102103 }, + { 0x0FD2, 102106 }, + { 0x0FD6, 102109 }, + { 0x0FD1, 102112 }, + { 0x0FD8, 102115 }, + { 0x0FDD, 102118 }, + { 0x0FDA, 102121 }, + { 0x0FDE, 102124 }, + { 0x0FD9, 102127 }, + { 0x1011, 102130 }, + { 0x1016, 102133 }, + { 0x1013, 102136 }, + { 0x1017, 102139 }, + { 0x1012, 102142 }, + { 0x1009, 102145 }, + { 0x100E, 102148 }, + { 0x100B, 102151 }, + { 0x100F, 102154 }, + { 0x100A, 102157 }, + { 0x105F, 102160 }, + { 0x1064, 102163 }, + { 0x1061, 102166 }, + { 0x1065, 102169 }, + { 0x1060, 102172 }, + { 0x1021, 102175 }, + { 0x1026, 102178 }, + { 0x1023, 102181 }, + { 0x1027, 102184 }, + { 0x1022, 102187 }, + { 0x107E, 102190 }, + { 0x1083, 102193 }, + { 0x1080, 102196 }, + { 0x1084, 102199 }, + { 0x107F, 102202 }, + { 0x106E, 102205 }, + { 0x1073, 102208 }, + { 0x1070, 102211 }, + { 0x1074, 102214 }, + { 0x106F, 102217 }, + { 0x1004, 102220 }, + { 0x3A50, 102223 }, + { 0x3A55, 102226 }, + { 0x3A52, 102229 }, + { 0x3A56, 102232 }, + { 0x3A51, 102235 }, + { 0x1005, 102238 }, + { 0x298C, 102241 }, + { 0x1008, 102244 }, + { 0x1115, 102247 }, + { 0x1113, 102250 }, + { 0x101C, 102253 }, + { 0x29A5, 102256 }, + { 0x29AA, 102259 }, + { 0x29A7, 102262 }, + { 0x29AB, 102265 }, + { 0x29A6, 102268 }, + { 0x101D, 102271 }, + { 0x10BB, 102274 }, + { 0x10C0, 102277 }, + { 0x10BD, 102280 }, + { 0x10C1, 102283 }, + { 0x10BC, 102286 }, + { 0x298E, 102289 }, + { 0x1020, 102292 }, + { 0x1089, 102295 }, + { 0x108E, 102298 }, + { 0x1093, 102301 }, + { 0x1090, 102304 }, + { 0x1094, 102307 }, + { 0x108F, 102310 }, + { 0x108A, 102313 }, + { 0x2993, 102316 }, + { 0x108D, 102319 }, + { 0x3A47, 102322 }, + { 0x3A44, 102325 }, + { 0x3A48, 102328 }, + { 0x3A43, 102331 }, + { 0x10DE, 102334 }, + { 0x10DF, 102337 }, + { 0x10E2, 102340 }, + { 0x1119, 102343 }, + { 0x1117, 102346 }, + { 0x10ED, 102349 }, + { 0x10A1, 102352 }, + { 0x10A2, 102355 }, + { 0x10AB, 102358 }, + { 0x10B0, 102361 }, + { 0x10AD, 102364 }, + { 0x10B1, 102367 }, + { 0x10AC, 102370 }, + { 0x10A5, 102373 }, + { 0x10A6, 102376 }, + { 0x10AA, 102379 }, + { 0x10A7, 102382 }, + { 0x29CF, 102385 }, + { 0x29D4, 102388 }, + { 0x29D1, 102391 }, + { 0x29D5, 102394 }, + { 0x29D0, 102397 }, + { 0x0FAB, 102400 }, + { 0x0FAC, 102403 }, + { 0x0FB8, 102406 }, + { 0x0FBD, 102409 }, + { 0x0FBA, 102412 }, + { 0x0FBE, 102415 }, + { 0x0FB9, 102418 }, + { 0x0FAF, 102421 }, + { 0x1099, 102424 }, + { 0x109A, 102427 }, + { 0x2995, 102430 }, + { 0x109D, 102433 }, + { 0x1049, 102436 }, + { 0x104A, 102439 }, + { 0x104D, 102442 }, + { 0x104E, 102445 }, + { 0x1052, 102448 }, + { 0x104F, 102451 }, + { 0x1053, 102454 }, + { 0x1058, 102457 }, + { 0x1055, 102460 }, + { 0x1059, 102463 }, + { 0x1054, 102466 }, + { 0x29C1, 102469 }, + { 0x29C6, 102472 }, + { 0x29C3, 102475 }, + { 0x29C7, 102478 }, + { 0x29C2, 102481 }, + { 0x0FB3, 102484 }, + { 0x0FB4, 102487 }, + { 0x2987, 102490 }, + { 0x0FB7, 102493 }, + { 0x0FC3, 102496 }, + { 0x0FC4, 102499 }, + { 0x2988, 102502 }, + { 0x0FC7, 102505 }, + { 0x1111, 102508 }, + { 0x110F, 102511 }, + { 0x10EC, 102514 }, + { 0x1031, 102517 }, + { 0x1032, 102520 }, + { 0x298F, 102523 }, + { 0x1035, 102526 }, + { 0x1036, 102529 }, + { 0x103B, 102532 }, + { 0x1038, 102535 }, + { 0x103C, 102538 }, + { 0x1037, 102541 }, + { 0x10E6, 102544 }, + { 0x10E7, 102547 }, + { 0x10C3, 102550 }, + { 0x10C8, 102553 }, + { 0x10C5, 102556 }, + { 0x10C9, 102559 }, + { 0x10C4, 102562 }, + { 0x2999, 102565 }, + { 0x10EA, 102568 }, + { 0x111D, 102571 }, + { 0x111B, 102574 }, + { 0x0FEB, 102577 }, + { 0x0FEC, 102580 }, + { 0x0FF5, 102583 }, + { 0x0FFA, 102586 }, + { 0x0FF7, 102589 }, + { 0x0FFB, 102592 }, + { 0x0FF6, 102595 }, + { 0x0FEF, 102598 }, + { 0x0FF0, 102601 }, + { 0x0FF4, 102604 }, + { 0x0FF1, 102607 }, + { 0x29BA, 102610 }, + { 0x29BF, 102613 }, + { 0x29BC, 102616 }, + { 0x29C0, 102619 }, + { 0x29BB, 102622 }, + { 0x0FD3, 102625 }, + { 0x0FD4, 102628 }, + { 0x2989, 102631 }, + { 0x0FD7, 102634 }, + { 0x10EB, 102637 }, + { 0x0FDB, 102640 }, + { 0x0FDC, 102643 }, + { 0x0FE0, 102646 }, + { 0x0FE5, 102649 }, + { 0x0FE2, 102652 }, + { 0x0FE6, 102655 }, + { 0x0FE1, 102658 }, + { 0x298A, 102661 }, + { 0x299E, 102664 }, + { 0x29A3, 102667 }, + { 0x29A0, 102670 }, + { 0x29A4, 102673 }, + { 0x299F, 102676 }, + { 0x0FDF, 102679 }, + { 0x0FC8, 102682 }, + { 0x0FCD, 102685 }, + { 0x0FCA, 102688 }, + { 0x0FCE, 102691 }, + { 0x0FC9, 102694 }, + { 0x1014, 102697 }, + { 0x1015, 102700 }, + { 0x10B3, 102703 }, + { 0x10B8, 102706 }, + { 0x10B5, 102709 }, + { 0x10B9, 102712 }, + { 0x10B4, 102715 }, + { 0x298D, 102718 }, + { 0x10CB, 102721 }, + { 0x10D0, 102724 }, + { 0x10CD, 102727 }, + { 0x10D1, 102730 }, + { 0x10CC, 102733 }, + { 0x1018, 102736 }, + { 0x10D3, 102739 }, + { 0x10D8, 102742 }, + { 0x10D5, 102745 }, + { 0x10D9, 102748 }, + { 0x10D4, 102751 }, + { 0x100C, 102754 }, + { 0x100D, 102757 }, + { 0x1010, 102760 }, + { 0x1062, 102763 }, + { 0x1063, 102766 }, + { 0x1066, 102769 }, + { 0x1024, 102772 }, + { 0x1025, 102775 }, + { 0x1028, 102778 }, + { 0x1029, 102781 }, + { 0x102D, 102784 }, + { 0x102A, 102787 }, + { 0x29C8, 102790 }, + { 0x29CD, 102793 }, + { 0x29CA, 102796 }, + { 0x29CE, 102799 }, + { 0x29C9, 102802 }, + { 0x1081, 102805 }, + { 0x1082, 102808 }, + { 0x1085, 102811 }, + { 0x1071, 102814 }, + { 0x1072, 102817 }, + { 0x1076, 102820 }, + { 0x107B, 102823 }, + { 0x1078, 102826 }, + { 0x107C, 102829 }, + { 0x1077, 102832 }, + { 0x2992, 102835 }, + { 0x1075, 102838 }, + { 0x29AC, 102841 }, + { 0x29B1, 102844 }, + { 0x29AE, 102847 }, + { 0x29B2, 102850 }, + { 0x29AD, 102853 }, + { 0x3A53, 102856 }, + { 0x3A54, 102859 }, + { 0x1114, 102862 }, + { 0x29A8, 102865 }, + { 0x29A9, 102868 }, + { 0x29B3, 102871 }, + { 0x29B8, 102874 }, + { 0x29B5, 102877 }, + { 0x29B9, 102880 }, + { 0x29B4, 102883 }, + { 0x10BE, 102886 }, + { 0x10BF, 102889 }, + { 0x2997, 102892 }, + { 0x10C2, 102895 }, + { 0x1091, 102898 }, + { 0x1092, 102901 }, + { 0x3A41, 102904 }, + { 0x3A3E, 102907 }, + { 0x3A42, 102910 }, + { 0x3A3D, 102913 }, + { 0x2994, 102916 }, + { 0x1095, 102919 }, + { 0x3A45, 102922 }, + { 0x3A46, 102925 }, + { 0x1118, 102928 }, + { 0x10AE, 102931 }, + { 0x10AF, 102934 }, + { 0x299A, 102937 }, + { 0x299D, 102940 }, + { 0x299B, 102943 }, + { 0x10A8, 102946 }, + { 0x10A9, 102949 }, + { 0x29D2, 102952 }, + { 0x29D3, 102955 }, + { 0x0FBB, 102958 }, + { 0x0FBC, 102961 }, + { 0x0FBF, 102964 }, + { 0x8A7A, 102967 }, + { 0x8A78, 102970 }, + { 0x8A70, 102973 }, + { 0x8A75, 102976 }, + { 0x8A72, 102979 }, + { 0x8A76, 102982 }, + { 0x8A71, 102985 }, + { 0x1050, 102988 }, + { 0x1051, 102991 }, + { 0x1056, 102994 }, + { 0x1057, 102997 }, + { 0x105A, 103000 }, + { 0x105E, 103003 }, + { 0x105B, 103006 }, + { 0x29C4, 103009 }, + { 0x29C5, 103012 }, + { 0x1110, 103015 }, + { 0x1039, 103018 }, + { 0x103A, 103021 }, + { 0x2990, 103024 }, + { 0x103D, 103027 }, + { 0x10C6, 103030 }, + { 0x10C7, 103033 }, + { 0x2998, 103036 }, + { 0x10CA, 103039 }, + { 0x111C, 103042 }, + { 0x0FF8, 103045 }, + { 0x0FF9, 103048 }, + { 0x0FFC, 103051 }, + { 0x1000, 103054 }, + { 0x0FFD, 103057 }, + { 0x0FF2, 103060 }, + { 0x0FF3, 103063 }, + { 0x29BD, 103066 }, + { 0x29BE, 103069 }, + { 0x0FE3, 103072 }, + { 0x0FE4, 103075 }, + { 0x298B, 103078 }, + { 0x0FE7, 103081 }, + { 0x29A1, 103084 }, + { 0x29A2, 103087 }, + { 0x0FCB, 103090 }, + { 0x0FCC, 103093 }, + { 0x0FCF, 103096 }, + { 0x10B6, 103099 }, + { 0x10B7, 103102 }, + { 0x2996, 103105 }, + { 0x10BA, 103108 }, + { 0x10CE, 103111 }, + { 0x10CF, 103114 }, + { 0x10D2, 103117 }, + { 0x3A3B, 103120 }, + { 0x3A38, 103123 }, + { 0x3A3C, 103126 }, + { 0x3A37, 103129 }, + { 0x10D6, 103132 }, + { 0x10D7, 103135 }, + { 0x10DA, 103138 }, + { 0x102B, 103141 }, + { 0x102C, 103144 }, + { 0x29CB, 103147 }, + { 0x29CC, 103150 }, + { 0x1079, 103153 }, + { 0x107A, 103156 }, + { 0x107D, 103159 }, + { 0x29AF, 103162 }, + { 0x29B0, 103165 }, + { 0x29B6, 103168 }, + { 0x29B7, 103171 }, + { 0x3A49, 103174 }, + { 0x3A4E, 103177 }, + { 0x3A4B, 103180 }, + { 0x3A4F, 103183 }, + { 0x3A4A, 103186 }, + { 0x3A3F, 103189 }, + { 0x3A40, 103192 }, + { 0x10B2, 103195 }, + { 0x299C, 103198 }, + { 0x8A79, 103201 }, + { 0x8A73, 103204 }, + { 0x8A74, 103207 }, + { 0x105C, 103210 }, + { 0x105D, 103213 }, + { 0x0FFE, 103216 }, + { 0x0FFF, 103219 }, + { 0x3A39, 103222 }, + { 0x3A3A, 103225 }, + { 0x3A4C, 103228 }, + { 0x3A4D, 103231 }, + { 0x8A80, 103234 }, + { 0x8A88, 103238 }, + { 0x8A87, 103242 }, + { 0x8A85, 103246 }, + { 0x8A84, 103250 }, + { 0x8A82, 103254 }, + { 0x8A7B, 103258 }, + { 0x8A8A, 103262 }, + { 0x8A7F, 103266 }, + { 0x8A7D, 103270 }, + { 0x8A81, 103274 }, + { 0x8A89, 103278 }, + { 0x8A86, 103282 }, + { 0x8A77, 103286 }, + { 0x8A83, 103290 }, + { 0x8A7C, 103294 }, + { 0x8A8B, 103298 }, + { 0x8A7E, 103302 }, + { 0x103E, 103306 }, + { 0x1043, 103310 }, + { 0x1040, 103314 }, + { 0x1044, 103318 }, + { 0x103F, 103322 }, + { 0x1041, 103326 }, + { 0x1042, 103330 }, + { 0x2991, 103334 }, + { 0x1045, 103338 }, + { 0x1112, 103342 }, + { 0x1116, 103346 }, + { 0x110E, 103350 }, + { 0x111A, 103354 }, + { 0x1067, 103358 }, + { 0x106C, 103362 }, + { 0x1069, 103366 }, + { 0x106D, 103370 }, + { 0x1068, 103374 }, + { 0x106A, 103378 }, + { 0x106B, 103382 }, + { 0x10EF, 103386 }, + { 0x10EE, 103391 }, + { 0x10F0, 103398 }, + { 0x10F9, 103402 }, + { 0x10F5, 103405 }, + { 0x10F2, 103407 }, + { 0x8F97, 103409 }, + { 0x8FA3, 103412 }, + { 0x068A, 103414 }, + { 0x068F, 103418 }, + { 0x068B, 103422 }, + { 0x068E, 103426 }, + { 0x068D, 103430 }, + { 0x0692, 103434 }, + { 0x0689, 103438 }, + { 0x0691, 103442 }, + { 0x0690, 103446 }, + { 0x068C, 103450 }, + { 0x0069, 103454 }, + { 0x8F3A, 103457 }, + { 0x94D7, 103459 }, + { 0x7CDD, 103460 }, + { 0x203C, 103462 }, + { 0x231E, 103463 }, + { 0x1CC4, 103464 }, + { 0x1DBA, 103466 }, + { 0x94A4, 103469 }, + { 0x91D9, 103471 }, + { 0x1CE1, 103476 }, + { 0x2924, 103478 }, + { 0x2928, 103482 }, + { 0x2945, 103486 }, + { 0x292C, 103490 }, + { 0x2931, 103494 }, + { 0x2937, 103498 }, + { 0x2947, 103502 }, + { 0x294A, 103506 }, + { 0x294B, 103510 }, + { 0x2925, 103514 }, + { 0x293E, 103518 }, + { 0x2940, 103522 }, + { 0x2927, 103526 }, + { 0x2926, 103530 }, + { 0x2944, 103534 }, + { 0x2948, 103538 }, + { 0x2946, 103542 }, + { 0x2949, 103546 }, + { 0x293F, 103550 }, + { 0x292D, 103554 }, + { 0x292E, 103558 }, + { 0x292F, 103562 }, + { 0x2930, 103566 }, + { 0x2932, 103570 }, + { 0x293B, 103574 }, + { 0x2934, 103578 }, + { 0x2935, 103582 }, + { 0x292B, 103586 }, + { 0x2936, 103590 }, + { 0x2929, 103594 }, + { 0x2942, 103598 }, + { 0x292A, 103602 }, + { 0x2941, 103606 }, + { 0x293D, 103610 }, + { 0x293A, 103614 }, + { 0x2943, 103618 }, + { 0x2939, 103622 }, + { 0x2938, 103626 }, + { 0x293C, 103630 }, + { 0x2933, 103634 }, + { 0x0E78, 103638 }, + { 0x0E7C, 103641 }, + { 0x0E9E, 103644 }, + { 0x0E99, 103647 }, + { 0x0E80, 103650 }, + { 0x0E85, 103653 }, + { 0x0E8B, 103656 }, + { 0x0E9B, 103659 }, + { 0x0E9F, 103662 }, + { 0x0EA5, 103665 }, + { 0x0EA2, 103668 }, + { 0x0E79, 103671 }, + { 0x0E92, 103674 }, + { 0x0E94, 103677 }, + { 0x0E7B, 103680 }, + { 0x0E7A, 103683 }, + { 0x0E98, 103686 }, + { 0x0E9C, 103689 }, + { 0x0E9A, 103692 }, + { 0x0E9D, 103695 }, + { 0x0E93, 103698 }, + { 0x0E81, 103701 }, + { 0x0E82, 103704 }, + { 0x0E83, 103707 }, + { 0x0E84, 103710 }, + { 0x0E86, 103713 }, + { 0x0E8F, 103716 }, + { 0x0E88, 103719 }, + { 0x0E89, 103722 }, + { 0x0E7F, 103725 }, + { 0x0E8A, 103728 }, + { 0x0E7D, 103731 }, + { 0x0E96, 103734 }, + { 0x0E7E, 103737 }, + { 0x0E95, 103740 }, + { 0x0E91, 103743 }, + { 0x0E8E, 103746 }, + { 0x0EA6, 103749 }, + { 0x0E97, 103753 }, + { 0x0E8D, 103756 }, + { 0x0E8C, 103759 }, + { 0x0E90, 103762 }, + { 0x0E87, 103765 }, + { 0x0EA0, 103768 }, + { 0x0EA7, 103771 }, + { 0x0EA1, 103775 }, + { 0x0E50, 103779 }, + { 0x0E54, 103783 }, + { 0x0E71, 103787 }, + { 0x0E58, 103791 }, + { 0x0E5D, 103795 }, + { 0x0E63, 103799 }, + { 0x0E73, 103803 }, + { 0x0E76, 103807 }, + { 0x0E77, 103811 }, + { 0x0E51, 103815 }, + { 0x0E6A, 103819 }, + { 0x0E6C, 103823 }, + { 0x0E53, 103827 }, + { 0x0E52, 103831 }, + { 0x0E70, 103835 }, + { 0x0E74, 103839 }, + { 0x0E72, 103843 }, + { 0x0E75, 103847 }, + { 0x0E6B, 103851 }, + { 0x0E59, 103855 }, + { 0x0E5A, 103859 }, + { 0x0E5B, 103863 }, + { 0x0E5C, 103867 }, + { 0x0E5E, 103871 }, + { 0x0E67, 103875 }, + { 0x0E60, 103879 }, + { 0x0E61, 103883 }, + { 0x0E57, 103887 }, + { 0x0E62, 103891 }, + { 0x0E55, 103895 }, + { 0x0E6E, 103899 }, + { 0x0E56, 103903 }, + { 0x0E6D, 103907 }, + { 0x0E69, 103911 }, + { 0x0E66, 103915 }, + { 0x0E6F, 103919 }, + { 0x0E65, 103923 }, + { 0x0E64, 103927 }, + { 0x0E68, 103931 }, + { 0x0E5F, 103935 }, + { 0x1936, 103939 }, + { 0x193A, 103944 }, + { 0x195C, 103949 }, + { 0x1957, 103954 }, + { 0x193E, 103959 }, + { 0x1943, 103964 }, + { 0x1949, 103969 }, + { 0x1959, 103974 }, + { 0x195D, 103979 }, + { 0x1961, 103984 }, + { 0x1960, 103989 }, + { 0x1937, 103994 }, + { 0x1950, 103999 }, + { 0x1952, 104004 }, + { 0x1939, 104009 }, + { 0x1938, 104014 }, + { 0x1956, 104019 }, + { 0x195A, 104024 }, + { 0x1958, 104029 }, + { 0x195B, 104034 }, + { 0x1951, 104039 }, + { 0x193F, 104044 }, + { 0x1940, 104049 }, + { 0x1941, 104054 }, + { 0x1942, 104059 }, + { 0x1944, 104064 }, + { 0x194D, 104069 }, + { 0x1946, 104074 }, + { 0x1947, 104079 }, + { 0x193D, 104084 }, + { 0x1948, 104089 }, + { 0x193B, 104094 }, + { 0x1954, 104099 }, + { 0x193C, 104104 }, + { 0x1953, 104109 }, + { 0x194F, 104114 }, + { 0x194C, 104119 }, + { 0x1962, 104124 }, + { 0x1955, 104130 }, + { 0x194B, 104135 }, + { 0x194A, 104140 }, + { 0x194E, 104145 }, + { 0x1945, 104150 }, + { 0x195E, 104155 }, + { 0x1963, 104160 }, + { 0x195F, 104166 }, + { 0x0EA3, 104172 }, + { 0x9322, 104175 }, + { 0x91EB, 104176 }, + { 0x91B3, 104182 }, + { 0x9458, 104184 }, + { 0x9457, 104193 }, + { 0x91B4, 104198 }, + { 0x09E8, 104203 }, + { 0x09D8, 104205 }, + { 0x09FA, 104208 }, + { 0x09FE, 104211 }, + { 0x09FC, 104216 }, + { 0x09FB, 104219 }, + { 0x09E7, 104222 }, + { 0x09A7, 104225 }, + { 0x09A6, 104228 }, + { 0x09D9, 104231 }, + { 0x09FD, 104234 }, + { 0x09FF, 104239 }, + { 0x09A5, 104244 }, + { 0x09EE, 104247 }, + { 0x09F3, 104250 }, + { 0x09EF, 104253 }, + { 0x09F2, 104256 }, + { 0x09F1, 104259 }, + { 0x09F6, 104262 }, + { 0x09ED, 104265 }, + { 0x09F5, 104268 }, + { 0x09F4, 104271 }, + { 0x09F0, 104274 }, + { 0x09F8, 104277 }, + { 0x09E2, 104280 }, + { 0x09DB, 104284 }, + { 0x09E5, 104288 }, + { 0x09DD, 104292 }, + { 0x09DA, 104296 }, + { 0x09E3, 104300 }, + { 0x09E6, 104304 }, + { 0x09DC, 104308 }, + { 0x09DE, 104312 }, + { 0x09E1, 104316 }, + { 0x09E4, 104321 }, + { 0x09EB, 104326 }, + { 0x09DF, 104331 }, + { 0x09EC, 104336 }, + { 0x09E0, 104341 }, + { 0x09B0, 104346 }, + { 0x09B3, 104350 }, + { 0x09A8, 104354 }, + { 0x09B1, 104357 }, + { 0x09AA, 104360 }, + { 0x09B4, 104363 }, + { 0x09AC, 104366 }, + { 0x09A9, 104369 }, + { 0x09B2, 104372 }, + { 0x09B5, 104375 }, + { 0x09CC, 104378 }, + { 0x09BB, 104381 }, + { 0x09C7, 104384 }, + { 0x09B8, 104387 }, + { 0x09D7, 104390 }, + { 0x09AB, 104393 }, + { 0x09BD, 104396 }, + { 0x09B6, 104399 }, + { 0x09D1, 104402 }, + { 0x09CE, 104405 }, + { 0x09C9, 104408 }, + { 0x09CA, 104411 }, + { 0x09D0, 104414 }, + { 0x09D6, 104417 }, + { 0x09C5, 104420 }, + { 0x09AD, 104423 }, + { 0x09D3, 104426 }, + { 0x09CF, 104429 }, + { 0x09CD, 104432 }, + { 0x09BC, 104435 }, + { 0x09C2, 104438 }, + { 0x09C8, 104441 }, + { 0x09B9, 104444 }, + { 0x09BE, 104447 }, + { 0x09B7, 104450 }, + { 0x09D2, 104453 }, + { 0x09BA, 104456 }, + { 0x09C4, 104459 }, + { 0x09BF, 104462 }, + { 0x09CB, 104465 }, + { 0x09D4, 104468 }, + { 0x09D5, 104471 }, + { 0x09C6, 104474 }, + { 0x09C0, 104477 }, + { 0x09F9, 104480 }, + { 0x09C3, 104483 }, + { 0x09C1, 104486 }, + { 0x09AF, 104489 }, + { 0x09AE, 104493 }, + { 0x09EA, 104497 }, + { 0x09E9, 104501 }, + { 0x09F7, 104505 }, + { 0x09A2, 104508 }, + { 0x09A0, 104511 }, + { 0x09A1, 104513 }, + { 0x0955, 104515 }, + { 0x0956, 104519 }, + { 0x0983, 104522 }, + { 0x098E, 104525 }, + { 0x098D, 104528 }, + { 0x09A3, 104531 }, + { 0x0957, 104534 }, + { 0x099F, 104537 }, + { 0x0995, 104539 }, + { 0x099A, 104542 }, + { 0x0996, 104545 }, + { 0x0999, 104548 }, + { 0x0998, 104551 }, + { 0x099D, 104554 }, + { 0x0994, 104557 }, + { 0x099C, 104560 }, + { 0x099B, 104563 }, + { 0x0997, 104566 }, + { 0x099E, 104569 }, + { 0x0985, 104571 }, + { 0x0987, 104575 }, + { 0x0984, 104579 }, + { 0x098A, 104583 }, + { 0x098C, 104587 }, + { 0x0989, 104591 }, + { 0x0986, 104595 }, + { 0x098B, 104599 }, + { 0x0988, 104603 }, + { 0x0958, 104607 }, + { 0x095A, 104610 }, + { 0x095C, 104613 }, + { 0x0959, 104616 }, + { 0x095F, 104619 }, + { 0x0961, 104622 }, + { 0x0978, 104625 }, + { 0x0967, 104628 }, + { 0x0973, 104631 }, + { 0x095E, 104634 }, + { 0x0993, 104637 }, + { 0x0964, 104640 }, + { 0x0982, 104643 }, + { 0x095B, 104646 }, + { 0x0969, 104649 }, + { 0x0962, 104652 }, + { 0x097D, 104655 }, + { 0x097A, 104658 }, + { 0x0975, 104661 }, + { 0x0960, 104664 }, + { 0x0976, 104667 }, + { 0x097C, 104670 }, + { 0x0981, 104673 }, + { 0x0971, 104676 }, + { 0x095D, 104679 }, + { 0x097F, 104682 }, + { 0x097B, 104685 }, + { 0x0991, 104688 }, + { 0x0979, 104691 }, + { 0x0968, 104694 }, + { 0x096E, 104697 }, + { 0x0974, 104700 }, + { 0x0965, 104703 }, + { 0x096A, 104706 }, + { 0x0963, 104709 }, + { 0x097E, 104712 }, + { 0x0966, 104715 }, + { 0x0970, 104718 }, + { 0x096B, 104721 }, + { 0x0977, 104724 }, + { 0x0992, 104727 }, + { 0x0980, 104730 }, + { 0x0972, 104733 }, + { 0x096C, 104736 }, + { 0x096F, 104739 }, + { 0x0990, 104742 }, + { 0x098F, 104745 }, + { 0x096D, 104748 }, + { 0x09A4, 104751 }, + { 0x946C, 104754 }, + { 0x2BCE, 104755 }, + { 0x2BD3, 104758 }, + { 0x2BE5, 104761 }, + { 0x2BCF, 104764 }, + { 0x2BD2, 104767 }, + { 0x2BD1, 104770 }, + { 0x2BD6, 104773 }, + { 0x2BD5, 104776 }, + { 0x2BD4, 104779 }, + { 0x2BD0, 104782 }, + { 0x2BE7, 104785 }, + { 0x2BE6, 104788 }, + { 0x8FD6, 104791 }, + { 0x94C2, 104793 }, + { 0x2F9F, 104794 }, + { 0x2FC8, 104798 }, + { 0x2FBD, 104802 }, + { 0x2FD1, 104806 }, + { 0x2FD2, 104811 }, + { 0x2FB5, 104816 }, + { 0x2FCC, 104821 }, + { 0x2FCB, 104827 }, + { 0x2FCA, 104832 }, + { 0x2FB6, 104836 }, + { 0x2F99, 104841 }, + { 0x2FCE, 104846 }, + { 0x2FD0, 104851 }, + { 0x2F9A, 104855 }, + { 0x2FAA, 104860 }, + { 0x2FD7, 104866 }, + { 0x2FAE, 104870 }, + { 0x2FBA, 104873 }, + { 0x2FB2, 104877 }, + { 0x2FA6, 104881 }, + { 0x2FB4, 104885 }, + { 0x2FD5, 104889 }, + { 0x2FB3, 104893 }, + { 0x2FA3, 104897 }, + { 0x2FA1, 104900 }, + { 0x2FD6, 104904 }, + { 0x2FD8, 104908 }, + { 0x2FAD, 104912 }, + { 0x2FC4, 104916 }, + { 0x2FB0, 104921 }, + { 0x2FA0, 104924 }, + { 0x2FA7, 104928 }, + { 0x2FC6, 104931 }, + { 0x2FB9, 104935 }, + { 0x2F9D, 104938 }, + { 0x2FAB, 104941 }, + { 0x2F9E, 104944 }, + { 0x2FC1, 104947 }, + { 0x2FB8, 104950 }, + { 0x2FC2, 104953 }, + { 0x2FBB, 104956 }, + { 0x2FA2, 104959 }, + { 0x2F9C, 104962 }, + { 0x2FCF, 104966 }, + { 0x2FBC, 104969 }, + { 0x2FA9, 104975 }, + { 0x2FC5, 104978 }, + { 0x2FB7, 104982 }, + { 0x2FB1, 104985 }, + { 0x2FAF, 104988 }, + { 0x2F9B, 104992 }, + { 0x2FD3, 104998 }, + { 0x2FA8, 105001 }, + { 0x2FA5, 105004 }, + { 0x2FD4, 105007 }, + { 0x2FBE, 105010 }, + { 0x2FC7, 105013 }, + { 0x2FC9, 105016 }, + { 0x2FA4, 105019 }, + { 0x2FC0, 105022 }, + { 0x2FCD, 105025 }, + { 0x2FBF, 105028 }, + { 0x2FC3, 105031 }, + { 0x2FAC, 105034 }, + { 0x8EED, 105037 }, + { 0x2BEE, 105038 }, + { 0x2BF4, 105041 }, + { 0x2BF0, 105044 }, + { 0x2C3F, 105047 }, + { 0x2BF6, 105050 }, + { 0x2BF2, 105053 }, + { 0x2C1C, 105056 }, + { 0x2C25, 105059 }, + { 0x2C1F, 105062 }, + { 0x2C28, 105065 }, + { 0x2C22, 105068 }, + { 0x2C0C, 105071 }, + { 0x2C13, 105074 }, + { 0x2C0E, 105077 }, + { 0x2C15, 105080 }, + { 0x2C11, 105083 }, + { 0x2BF8, 105086 }, + { 0x2BFE, 105089 }, + { 0x2BFA, 105092 }, + { 0x2C00, 105095 }, + { 0x2BFC, 105098 }, + { 0x2C1B, 105101 }, + { 0x2C24, 105104 }, + { 0x2C1E, 105107 }, + { 0x2C27, 105110 }, + { 0x2C21, 105113 }, + { 0x2BF7, 105116 }, + { 0x2BFD, 105119 }, + { 0x2BF9, 105122 }, + { 0x2BFF, 105125 }, + { 0x2BFB, 105128 }, + { 0x2C2A, 105131 }, + { 0x2C2D, 105134 }, + { 0x2C2B, 105137 }, + { 0x2C2E, 105140 }, + { 0x2C2C, 105143 }, + { 0x2C16, 105146 }, + { 0x2C19, 105149 }, + { 0x2C17, 105152 }, + { 0x2C1A, 105155 }, + { 0x2C18, 105158 }, + { 0x2C1D, 105161 }, + { 0x2C26, 105164 }, + { 0x2C20, 105167 }, + { 0x2C29, 105170 }, + { 0x2C23, 105173 }, + { 0x2C35, 105176 }, + { 0x2C38, 105179 }, + { 0x2C36, 105182 }, + { 0x2C39, 105185 }, + { 0x2C37, 105188 }, + { 0x2C01, 105191 }, + { 0x2C07, 105194 }, + { 0x2C03, 105197 }, + { 0x2C09, 105200 }, + { 0x2C05, 105203 }, + { 0x2C0B, 105206 }, + { 0x2C12, 105209 }, + { 0x2C0D, 105212 }, + { 0x2C14, 105215 }, + { 0x2C10, 105218 }, + { 0x2C40, 105221 }, + { 0x2C3B, 105224 }, + { 0x2C3D, 105227 }, + { 0x2C3C, 105230 }, + { 0x2C3E, 105233 }, + { 0x2C30, 105236 }, + { 0x2C34, 105239 }, + { 0x2C32, 105242 }, + { 0x2C02, 105245 }, + { 0x2C08, 105248 }, + { 0x2C04, 105251 }, + { 0x2C0A, 105254 }, + { 0x2C06, 105257 }, + { 0x2BED, 105260 }, + { 0x2BF3, 105264 }, + { 0x2BEF, 105268 }, + { 0x2BF5, 105272 }, + { 0x2BF1, 105276 }, + { 0x2C41, 105280 }, + { 0x2C42, 105284 }, + { 0x7A1F, 105288 }, + { 0x2C0F, 105292 }, + { 0x2C3A, 105296 }, + { 0x7A21, 105300 }, + { 0x7A20, 105304 }, + { 0x7A22, 105308 }, + { 0x2C2F, 105312 }, + { 0x2C33, 105316 }, + { 0x2C31, 105320 }, + { 0x7A1B, 105324 }, + { 0x78FD, 105328 }, + { 0x2C48, 105332 }, + { 0x2C49, 105336 }, + { 0x2C47, 105339 }, + { 0x2318, 105342 }, + { 0x8FD0, 105344 }, + { 0x8F98, 105345 }, + { 0x95D3, 105346 }, + { 0x462F, 105347 }, + { 0x463B, 105351 }, + { 0x4637, 105355 }, + { 0x4638, 105359 }, + { 0x4640, 105363 }, + { 0x4630, 105367 }, + { 0x463A, 105371 }, + { 0x462C, 105375 }, + { 0x4632, 105379 }, + { 0x4635, 105383 }, + { 0x463D, 105387 }, + { 0x463E, 105391 }, + { 0x463F, 105395 }, + { 0x4633, 105399 }, + { 0x4634, 105403 }, + { 0x462B, 105407 }, + { 0x462D, 105411 }, + { 0x463C, 105415 }, + { 0x4631, 105419 }, + { 0x462E, 105423 }, + { 0x4636, 105427 }, + { 0x4639, 105431 }, + { 0x4642, 105435 }, + { 0x4647, 105439 }, + { 0x4648, 105444 }, + { 0x4645, 105449 }, + { 0x4649, 105453 }, + { 0x4643, 105458 }, + { 0x4644, 105462 }, + { 0x4646, 105466 }, + { 0x4641, 105470 }, + { 0x909B, 105474 }, + { 0x918D, 105476 }, + { 0x1E75, 105480 }, + { 0x260A, 105481 }, + { 0x1E82, 105486 }, + { 0x2644, 105487 }, + { 0x2646, 105491 }, + { 0x263A, 105494 }, + { 0x2647, 105498 }, + { 0x2648, 105501 }, + { 0x2643, 105504 }, + { 0x2645, 105510 }, + { 0x2641, 105513 }, + { 0x263B, 105518 }, + { 0x2005, 105522 }, + { 0x2668, 105524 }, + { 0x2A3B, 105526 }, + { 0x2A3C, 105529 }, + { 0x1D82, 105535 }, + { 0x1E95, 105538 }, + { 0x007E, 105541 }, + { 0x1CD4, 105544 }, + { 0x2313, 105546 }, + { 0x0060, 105548 }, + { 0x2A0E, 105551 }, + { 0x2327, 105553 }, + { 0x902C, 105556 }, + { 0x8F96, 105558 }, + { 0x8F41, 105561 }, + { 0x8FA2, 105563 }, + { 0x902D, 105565 }, + { 0x90E3, 105567 }, + { 0x2BB1, 105571 }, + { 0x392C, 105575 }, + { 0x3935, 105578 }, + { 0x3936, 105581 }, + { 0x392E, 105585 }, + { 0x3930, 105588 }, + { 0x392F, 105591 }, + { 0x3944, 105594 }, + { 0x3931, 105598 }, + { 0x3933, 105601 }, + { 0x3934, 105604 }, + { 0x3932, 105607 }, + { 0x3937, 105610 }, + { 0x3945, 105613 }, + { 0x38EC, 105616 }, + { 0x391E, 105619 }, + { 0x38ED, 105623 }, + { 0x38EE, 105626 }, + { 0x38EB, 105629 }, + { 0x393B, 105632 }, + { 0x3940, 105635 }, + { 0x393C, 105638 }, + { 0x393F, 105641 }, + { 0x393E, 105644 }, + { 0x3943, 105647 }, + { 0x393A, 105650 }, + { 0x3942, 105653 }, + { 0x3941, 105656 }, + { 0x393D, 105659 }, + { 0x392D, 105662 }, + { 0x3923, 105665 }, + { 0x3924, 105669 }, + { 0x3921, 105674 }, + { 0x3922, 105678 }, + { 0x3926, 105683 }, + { 0x3927, 105688 }, + { 0x3925, 105692 }, + { 0x391F, 105696 }, + { 0x3920, 105700 }, + { 0x38EF, 105704 }, + { 0x38F7, 105707 }, + { 0x38F1, 105710 }, + { 0x38F0, 105713 }, + { 0x38F9, 105717 }, + { 0x38F3, 105720 }, + { 0x38F8, 105723 }, + { 0x3912, 105726 }, + { 0x3913, 105729 }, + { 0x3900, 105733 }, + { 0x3901, 105736 }, + { 0x390D, 105740 }, + { 0x390E, 105743 }, + { 0x38FD, 105747 }, + { 0x38FE, 105750 }, + { 0x391D, 105754 }, + { 0x38F2, 105757 }, + { 0x3902, 105760 }, + { 0x3904, 105763 }, + { 0x38FA, 105767 }, + { 0x38FC, 105770 }, + { 0x38FB, 105774 }, + { 0x3918, 105778 }, + { 0x3914, 105781 }, + { 0x390F, 105784 }, + { 0x390A, 105787 }, + { 0x3910, 105791 }, + { 0x38F4, 105794 }, + { 0x3911, 105798 }, + { 0x3916, 105802 }, + { 0x3917, 105805 }, + { 0x391C, 105809 }, + { 0x391A, 105812 }, + { 0x391B, 105816 }, + { 0x390B, 105820 }, + { 0x390C, 105823 }, + { 0x3919, 105827 }, + { 0x3915, 105830 }, + { 0x3908, 105833 }, + { 0x3909, 105836 }, + { 0x38FF, 105840 }, + { 0x38F5, 105843 }, + { 0x38F6, 105847 }, + { 0x3905, 105852 }, + { 0x3903, 105855 }, + { 0x3906, 105859 }, + { 0x3907, 105862 }, + { 0x3938, 105866 }, + { 0x392B, 105870 }, + { 0x392A, 105872 }, + { 0x3928, 105876 }, + { 0x3929, 105880 }, + { 0x3939, 105884 }, + { 0x912C, 105886 }, + { 0x9467, 105887 }, + { 0x81D4, 105888 }, + { 0x81D9, 105891 }, + { 0x81DD, 105894 }, + { 0x81D5, 105897 }, + { 0x81D8, 105900 }, + { 0x81D7, 105903 }, + { 0x81DC, 105906 }, + { 0x81D3, 105909 }, + { 0x81DB, 105912 }, + { 0x81DA, 105915 }, + { 0x81D6, 105918 }, + { 0x81DE, 105921 }, + { 0x81DF, 105924 }, + { 0x81E2, 105927 }, + { 0x81E3, 105930 }, + { 0x81E5, 105933 }, + { 0x81E1, 105936 }, + { 0x81E6, 105939 }, + { 0x81E0, 105942 }, + { 0x81E4, 105945 }, + { 0x94C6, 105948 }, + { 0x2C4C, 105949 }, + { 0x2C52, 105952 }, + { 0x2C4E, 105955 }, + { 0x2C9D, 105958 }, + { 0x2C54, 105961 }, + { 0x2C50, 105964 }, + { 0x2C7A, 105967 }, + { 0x2C83, 105970 }, + { 0x2C7D, 105973 }, + { 0x2C86, 105976 }, + { 0x2C80, 105979 }, + { 0x2C6A, 105982 }, + { 0x2C71, 105985 }, + { 0x2C6C, 105988 }, + { 0x2C73, 105991 }, + { 0x2C6F, 105994 }, + { 0x2C56, 105997 }, + { 0x2C5C, 106000 }, + { 0x2C58, 106003 }, + { 0x2C5E, 106006 }, + { 0x2C5A, 106009 }, + { 0x2C79, 106012 }, + { 0x2C82, 106015 }, + { 0x2C7C, 106018 }, + { 0x2C85, 106021 }, + { 0x2C7F, 106024 }, + { 0x2C55, 106027 }, + { 0x2C5B, 106030 }, + { 0x2C57, 106033 }, + { 0x2C5D, 106036 }, + { 0x2C59, 106039 }, + { 0x2C88, 106042 }, + { 0x2C8B, 106045 }, + { 0x2C89, 106048 }, + { 0x2C8C, 106051 }, + { 0x2C8A, 106054 }, + { 0x2C74, 106057 }, + { 0x2C77, 106060 }, + { 0x2C75, 106063 }, + { 0x2C78, 106066 }, + { 0x2C76, 106069 }, + { 0x2C7B, 106072 }, + { 0x2C84, 106075 }, + { 0x2C7E, 106078 }, + { 0x2C87, 106081 }, + { 0x2C81, 106084 }, + { 0x2C93, 106087 }, + { 0x2C96, 106090 }, + { 0x2C94, 106093 }, + { 0x2C97, 106096 }, + { 0x2C95, 106099 }, + { 0x2C5F, 106102 }, + { 0x2C65, 106105 }, + { 0x2C61, 106108 }, + { 0x2C67, 106111 }, + { 0x2C63, 106114 }, + { 0x2C69, 106117 }, + { 0x2C70, 106120 }, + { 0x2C6B, 106123 }, + { 0x2C72, 106126 }, + { 0x2C6E, 106129 }, + { 0x2CA1, 106132 }, + { 0x2CA3, 106135 }, + { 0x2CA2, 106138 }, + { 0x2CA4, 106141 }, + { 0x2C9E, 106144 }, + { 0x2C99, 106147 }, + { 0x2C9B, 106150 }, + { 0x2C9A, 106153 }, + { 0x2C9C, 106156 }, + { 0x2C8E, 106159 }, + { 0x2C92, 106162 }, + { 0x2C90, 106165 }, + { 0x2C60, 106168 }, + { 0x2C66, 106171 }, + { 0x2C62, 106174 }, + { 0x2C68, 106177 }, + { 0x2C64, 106180 }, + { 0x2C4B, 106183 }, + { 0x2C51, 106187 }, + { 0x2C4D, 106191 }, + { 0x7A27, 106195 }, + { 0x2C53, 106199 }, + { 0x2C4F, 106203 }, + { 0x2D8F, 106207 }, + { 0x2D92, 106211 }, + { 0x2D90, 106215 }, + { 0x2D93, 106219 }, + { 0x2D91, 106223 }, + { 0x2C9F, 106227 }, + { 0x2CA0, 106231 }, + { 0x7A23, 106235 }, + { 0x2D8A, 106239 }, + { 0x2D94, 106243 }, + { 0x2D8E, 106247 }, + { 0x2D95, 106251 }, + { 0x2D98, 106255 }, + { 0x2D96, 106259 }, + { 0x2D99, 106263 }, + { 0x2D97, 106267 }, + { 0x2D8B, 106271 }, + { 0x2D8C, 106275 }, + { 0x2D8D, 106279 }, + { 0x2C6D, 106283 }, + { 0x2C98, 106287 }, + { 0x7A25, 106291 }, + { 0x7A24, 106295 }, + { 0x7A26, 106299 }, + { 0x2C8D, 106303 }, + { 0x2C91, 106307 }, + { 0x2C8F, 106311 }, + { 0x78EF, 106315 }, + { 0x78F0, 106319 }, + { 0x78F1, 106323 }, + { 0x78F2, 106327 }, + { 0x78F3, 106331 }, + { 0x78F4, 106335 }, + { 0x78F5, 106339 }, + { 0x78F6, 106344 }, + { 0x78F7, 106349 }, + { 0x78F8, 106354 }, + { 0x78F9, 106359 }, + { 0x78FA, 106364 }, + { 0x78FB, 106369 }, + { 0x78FC, 106374 }, + { 0x7A1E, 106378 }, + { 0x7A1D, 106382 }, + { 0x7A1C, 106386 }, + { 0x2CA5, 106390 }, + { 0x2CA8, 106393 }, + { 0x2CA9, 106397 }, + { 0x2CA7, 106400 }, + { 0x1F7F, 106403 }, + { 0x9159, 106404 }, + { 0x94FC, 106407 }, + { 0x947B, 106409 }, + { 0x96FB, 106413 }, + { 0x95D6, 106415 }, + { 0x9225, 106417 }, + { 0x9037, 106421 }, + { 0x8F20, 106422 }, + { 0x4C0C, 106423 }, + { 0x4BE9, 106426 }, + { 0x4BEC, 106429 }, + { 0x4BEA, 106432 }, + { 0x4BED, 106435 }, + { 0x4BEB, 106438 }, + { 0x4C03, 106441 }, + { 0x4BF2, 106444 }, + { 0x4BFE, 106447 }, + { 0x4BF0, 106450 }, + { 0x4C0A, 106453 }, + { 0x4BF4, 106456 }, + { 0x4BEE, 106459 }, + { 0x4C07, 106462 }, + { 0x4C05, 106465 }, + { 0x4C00, 106468 }, + { 0x4C01, 106471 }, + { 0x4C06, 106474 }, + { 0x4C09, 106477 }, + { 0x4BFC, 106480 }, + { 0x4C08, 106483 }, + { 0x4C04, 106486 }, + { 0x4BF3, 106489 }, + { 0x4BF9, 106492 }, + { 0x4BFF, 106495 }, + { 0x4BF1, 106498 }, + { 0x4BF5, 106501 }, + { 0x4BEF, 106504 }, + { 0x4BFB, 106507 }, + { 0x4BF6, 106510 }, + { 0x4C02, 106513 }, + { 0x4C0B, 106516 }, + { 0x4BFD, 106519 }, + { 0x4BF7, 106522 }, + { 0x4BFA, 106525 }, + { 0x4BF8, 106528 }, + { 0x4C0E, 106531 }, + { 0x4C0F, 106534 }, + { 0x4C0D, 106537 }, + { 0x9321, 106540 }, + { 0x22D9, 106541 }, + { 0x9189, 106543 }, + { 0x1EB5, 106544 }, + { 0x1E78, 106546 }, + { 0x25D5, 106548 }, + { 0x25D4, 106560 }, + { 0x25D7, 106572 }, + { 0x25D6, 106584 }, + { 0x25D9, 106596 }, + { 0x25DB, 106608 }, + { 0x25D8, 106620 }, + { 0x25DA, 106632 }, + { 0x25C7, 106644 }, + { 0x25C9, 106648 }, + { 0x2A42, 106653 }, + { 0x2A4A, 106655 }, + { 0x2A49, 106658 }, + { 0x4704, 106661 }, + { 0x4705, 106665 }, + { 0x4706, 106669 }, + { 0x4707, 106673 }, + { 0x470A, 106677 }, + { 0x471B, 106681 }, + { 0x4716, 106685 }, + { 0x4710, 106689 }, + { 0x470C, 106693 }, + { 0x470D, 106697 }, + { 0x470E, 106701 }, + { 0x470B, 106705 }, + { 0x4717, 106709 }, + { 0x470F, 106713 }, + { 0x4713, 106717 }, + { 0x4715, 106721 }, + { 0x4718, 106725 }, + { 0x4719, 106729 }, + { 0x471A, 106733 }, + { 0x4709, 106737 }, + { 0x4708, 106741 }, + { 0x4712, 106745 }, + { 0x4711, 106749 }, + { 0x4714, 106753 }, + { 0x4720, 106758 }, + { 0x4730, 106762 }, + { 0x474B, 106767 }, + { 0x4739, 106773 }, + { 0x4725, 106778 }, + { 0x4735, 106782 }, + { 0x4750, 106787 }, + { 0x473E, 106793 }, + { 0x4729, 106798 }, + { 0x4742, 106802 }, + { 0x4721, 106807 }, + { 0x4731, 106811 }, + { 0x474C, 106816 }, + { 0x473A, 106822 }, + { 0x4724, 106827 }, + { 0x4734, 106831 }, + { 0x474F, 106836 }, + { 0x473D, 106842 }, + { 0x4723, 106847 }, + { 0x4733, 106851 }, + { 0x474E, 106856 }, + { 0x473C, 106862 }, + { 0x4728, 106867 }, + { 0x4738, 106871 }, + { 0x4753, 106876 }, + { 0x4741, 106882 }, + { 0x4727, 106887 }, + { 0x4737, 106891 }, + { 0x4752, 106896 }, + { 0x4740, 106902 }, + { 0x472D, 106907 }, + { 0x4746, 106911 }, + { 0x472C, 106916 }, + { 0x4745, 106920 }, + { 0x4726, 106925 }, + { 0x4736, 106929 }, + { 0x4751, 106934 }, + { 0x473F, 106940 }, + { 0x472E, 106945 }, + { 0x4747, 106949 }, + { 0x4722, 106954 }, + { 0x4732, 106958 }, + { 0x474D, 106963 }, + { 0x473B, 106969 }, + { 0x4749, 106974 }, + { 0x474A, 106979 }, + { 0x472B, 106984 }, + { 0x4744, 106988 }, + { 0x472A, 106993 }, + { 0x4743, 106997 }, + { 0x472F, 107002 }, + { 0x4748, 107006 }, + { 0x471D, 107011 }, + { 0x4754, 107016 }, + { 0x4759, 107021 }, + { 0x475D, 107026 }, + { 0x4755, 107031 }, + { 0x4758, 107036 }, + { 0x4757, 107041 }, + { 0x475C, 107046 }, + { 0x475B, 107051 }, + { 0x475A, 107056 }, + { 0x4756, 107061 }, + { 0x471C, 107066 }, + { 0x471F, 107071 }, + { 0x471E, 107075 }, + { 0x46E4, 107079 }, + { 0x46E5, 107083 }, + { 0x46E6, 107087 }, + { 0x46E7, 107091 }, + { 0x46EA, 107095 }, + { 0x4701, 107099 }, + { 0x46FA, 107103 }, + { 0x46F4, 107107 }, + { 0x46ED, 107111 }, + { 0x46EE, 107115 }, + { 0x46F0, 107119 }, + { 0x46EC, 107123 }, + { 0x46FB, 107127 }, + { 0x46F2, 107131 }, + { 0x46F7, 107135 }, + { 0x46F9, 107139 }, + { 0x46FC, 107143 }, + { 0x46FE, 107147 }, + { 0x4700, 107151 }, + { 0x46E9, 107155 }, + { 0x46E8, 107159 }, + { 0x46F6, 107163 }, + { 0x46F5, 107167 }, + { 0x46EB, 107171 }, + { 0x46EF, 107175 }, + { 0x46F1, 107179 }, + { 0x46F3, 107183 }, + { 0x46F8, 107187 }, + { 0x46FD, 107191 }, + { 0x46FF, 107195 }, + { 0x4702, 107199 }, + { 0x4703, 107203 }, + { 0x202C, 107207 }, + { 0x202D, 107212 }, + { 0x202B, 107216 }, + { 0x2029, 107221 }, + { 0x2028, 107225 }, + { 0x202A, 107227 }, + { 0x202E, 107231 }, + { 0x2030, 107233 }, + { 0x202F, 107235 }, + { 0x8F49, 107237 }, + { 0x95AE, 107239 }, + { 0x9070, 107241 }, + { 0x9188, 107242 }, + { 0x3A82, 107243 }, + { 0x0293, 107248 }, + { 0x0283, 107252 }, + { 0x3721, 107256 }, + { 0x36C9, 107259 }, + { 0x36C8, 107263 }, + { 0x36CA, 107268 }, + { 0x02BB, 107273 }, + { 0x02B9, 107278 }, + { 0x02AF, 107283 }, + { 0x02AE, 107288 }, + { 0x02BE, 107293 }, + { 0x02B0, 107298 }, + { 0x02B2, 107303 }, + { 0x02A7, 107307 }, + { 0x028E, 107312 }, + { 0x028D, 107317 }, + { 0x02B1, 107322 }, + { 0x02B6, 107327 }, + { 0x36BC, 107331 }, + { 0x36C1, 107337 }, + { 0x028C, 107344 }, + { 0x36D0, 107348 }, + { 0x028B, 107354 }, + { 0x36C6, 107359 }, + { 0x3739, 107365 }, + { 0x02A6, 107370 }, + { 0x36BB, 107375 }, + { 0x36C0, 107381 }, + { 0x36C5, 107388 }, + { 0x02A9, 107394 }, + { 0x0294, 107400 }, + { 0x0284, 107404 }, + { 0x0290, 107408 }, + { 0x02A5, 107413 }, + { 0x36BA, 107418 }, + { 0x36BF, 107424 }, + { 0x36C4, 107431 }, + { 0x027E, 107437 }, + { 0x3A91, 107442 }, + { 0x0281, 107446 }, + { 0x02BD, 107450 }, + { 0x0295, 107454 }, + { 0x02AA, 107458 }, + { 0x0289, 107464 }, + { 0x02BA, 107468 }, + { 0x02B8, 107473 }, + { 0x373A, 107478 }, + { 0x029E, 107481 }, + { 0x028A, 107485 }, + { 0x36CB, 107489 }, + { 0x0296, 107495 }, + { 0x0278, 107499 }, + { 0x027D, 107502 }, + { 0x3A92, 107507 }, + { 0x0282, 107511 }, + { 0x02BC, 107515 }, + { 0x373B, 107518 }, + { 0x19DA, 107523 }, + { 0x19DE, 107527 }, + { 0x45C0, 107531 }, + { 0x1A33, 107537 }, + { 0x1A34, 107541 }, + { 0x19DF, 107547 }, + { 0x45C6, 107551 }, + { 0x45C7, 107557 }, + { 0x45C5, 107565 }, + { 0x19E0, 107571 }, + { 0x1A37, 107575 }, + { 0x19E4, 107579 }, + { 0x45CD, 107583 }, + { 0x026F, 107589 }, + { 0x0270, 107593 }, + { 0x45CF, 107599 }, + { 0x1A3B, 107605 }, + { 0x0271, 107611 }, + { 0x1A3F, 107615 }, + { 0x19E6, 107621 }, + { 0x02A0, 107625 }, + { 0x45D5, 107629 }, + { 0x3A85, 107635 }, + { 0x1A41, 107642 }, + { 0x3A84, 107649 }, + { 0x1A40, 107657 }, + { 0x45D7, 107664 }, + { 0x19E7, 107673 }, + { 0x1A43, 107677 }, + { 0x1A45, 107683 }, + { 0x1A46, 107690 }, + { 0x19E9, 107697 }, + { 0x45DC, 107701 }, + { 0x19ED, 107707 }, + { 0x45DF, 107711 }, + { 0x0272, 107715 }, + { 0x45E2, 107719 }, + { 0x45E3, 107725 }, + { 0x02A1, 107731 }, + { 0x45F3, 107735 }, + { 0x1A4A, 107741 }, + { 0x19EE, 107747 }, + { 0x1A4C, 107751 }, + { 0x45E9, 107758 }, + { 0x19EF, 107765 }, + { 0x1A4D, 107769 }, + { 0x3A86, 107774 }, + { 0x19F2, 107781 }, + { 0x1A50, 107785 }, + { 0x45EA, 107791 }, + { 0x0276, 107798 }, + { 0x02A2, 107802 }, + { 0x0277, 107806 }, + { 0x1A52, 107810 }, + { 0x1A54, 107814 }, + { 0x1A53, 107820 }, + { 0x45BE, 107827 }, + { 0x45C1, 107831 }, + { 0x45C3, 107836 }, + { 0x45C2, 107843 }, + { 0x45D3, 107851 }, + { 0x45D4, 107856 }, + { 0x45E5, 107861 }, + { 0x45E6, 107868 }, + { 0x45E7, 107873 }, + { 0x19F3, 107881 }, + { 0x19F8, 107885 }, + { 0x19E8, 107889 }, + { 0x1A4B, 107893 }, + { 0x1A35, 107897 }, + { 0x1A55, 107901 }, + { 0x1A49, 107905 }, + { 0x19EB, 107909 }, + { 0x19F4, 107915 }, + { 0x45C4, 107919 }, + { 0x45CA, 107924 }, + { 0x3A83, 107929 }, + { 0x45D1, 107933 }, + { 0x1A3C, 107939 }, + { 0x45D8, 107943 }, + { 0x45D9, 107947 }, + { 0x19E2, 107954 }, + { 0x19EA, 107959 }, + { 0x45CB, 107964 }, + { 0x45E8, 107969 }, + { 0x19DC, 107974 }, + { 0x19F6, 107978 }, + { 0x029F, 107982 }, + { 0x19F7, 107986 }, + { 0x19F5, 107991 }, + { 0x19E1, 107996 }, + { 0x1A56, 108000 }, + { 0x1A48, 108004 }, + { 0x19EC, 108009 }, + { 0x45DE, 108015 }, + { 0x45C9, 108020 }, + { 0x1A39, 108027 }, + { 0x19DB, 108032 }, + { 0x1A3A, 108037 }, + { 0x19E5, 108042 }, + { 0x19F1, 108047 }, + { 0x1A44, 108052 }, + { 0x0273, 108060 }, + { 0x0274, 108065 }, + { 0x45E0, 108072 }, + { 0x45E1, 108080 }, + { 0x1A51, 108091 }, + { 0x3A90, 108096 }, + { 0x45DA, 108101 }, + { 0x45DB, 108106 }, + { 0x19DD, 108113 }, + { 0x19E3, 108118 }, + { 0x1A32, 108124 }, + { 0x45BF, 108129 }, + { 0x45CC, 108134 }, + { 0x45CE, 108139 }, + { 0x45D0, 108146 }, + { 0x1A3D, 108151 }, + { 0x1A3E, 108156 }, + { 0x1A42, 108163 }, + { 0x45D6, 108168 }, + { 0x1A47, 108175 }, + { 0x45E4, 108180 }, + { 0x1A4F, 108185 }, + { 0x45EB, 108190 }, + { 0x45BB, 108195 }, + { 0x45DD, 108200 }, + { 0x0275, 108205 }, + { 0x1A38, 108211 }, + { 0x45D2, 108218 }, + { 0x1A4E, 108227 }, + { 0x3791, 108231 }, + { 0x45C8, 108236 }, + { 0x1A36, 108241 }, + { 0x02A3, 108247 }, + { 0x19F0, 108253 }, + { 0x45EF, 108258 }, + { 0x0279, 108262 }, + { 0x02AD, 108266 }, + { 0x0288, 108270 }, + { 0x02B3, 108273 }, + { 0x02B5, 108278 }, + { 0x02B4, 108284 }, + { 0x36CC, 108290 }, + { 0x36CD, 108295 }, + { 0x02B7, 108300 }, + { 0x36CF, 108304 }, + { 0x36CE, 108310 }, + { 0x029D, 108315 }, + { 0x36D2, 108319 }, + { 0x36D1, 108325 }, + { 0x027A, 108331 }, + { 0x19C3, 108335 }, + { 0x19C5, 108339 }, + { 0x378A, 108343 }, + { 0x19C7, 108347 }, + { 0x19C8, 108351 }, + { 0x378B, 108355 }, + { 0x19CA, 108359 }, + { 0x19CB, 108363 }, + { 0x3790, 108367 }, + { 0x19CC, 108373 }, + { 0x19CD, 108377 }, + { 0x19CE, 108381 }, + { 0x19CF, 108385 }, + { 0x19D0, 108389 }, + { 0x19D1, 108393 }, + { 0x19D3, 108397 }, + { 0x19D5, 108401 }, + { 0x378C, 108405 }, + { 0x19D6, 108409 }, + { 0x19D7, 108413 }, + { 0x19D8, 108417 }, + { 0x28A6, 108421 }, + { 0x19D9, 108425 }, + { 0x19C4, 108429 }, + { 0x19D4, 108433 }, + { 0x19C6, 108437 }, + { 0x19C9, 108442 }, + { 0x19D2, 108447 }, + { 0x0292, 108452 }, + { 0x0291, 108458 }, + { 0x36B5, 108464 }, + { 0x36B7, 108470 }, + { 0x36B1, 108476 }, + { 0x36B3, 108482 }, + { 0x36B6, 108488 }, + { 0x36B8, 108494 }, + { 0x36B2, 108500 }, + { 0x36B4, 108506 }, + { 0x027F, 108512 }, + { 0x45EC, 108516 }, + { 0x45F0, 108522 }, + { 0x02AB, 108526 }, + { 0x45F1, 108529 }, + { 0x45EE, 108533 }, + { 0x1A0F, 108537 }, + { 0x3655, 108541 }, + { 0x3656, 108546 }, + { 0x893A, 108551 }, + { 0x8952, 108556 }, + { 0x8942, 108561 }, + { 0x8946, 108566 }, + { 0x894B, 108571 }, + { 0x893B, 108576 }, + { 0x893E, 108581 }, + { 0x894C, 108586 }, + { 0x8944, 108591 }, + { 0x8945, 108596 }, + { 0x8948, 108601 }, + { 0x8949, 108606 }, + { 0x8975, 108611 }, + { 0x894D, 108618 }, + { 0x893F, 108623 }, + { 0x8957, 108628 }, + { 0x8943, 108633 }, + { 0x8947, 108638 }, + { 0x894A, 108643 }, + { 0x893C, 108648 }, + { 0x8953, 108653 }, + { 0x8941, 108658 }, + { 0x894F, 108663 }, + { 0x893D, 108668 }, + { 0x8950, 108673 }, + { 0x894E, 108678 }, + { 0x8940, 108683 }, + { 0x8954, 108688 }, + { 0x8951, 108693 }, + { 0x8976, 108698 }, + { 0x8955, 108706 }, + { 0x8958, 108711 }, + { 0x895A, 108717 }, + { 0x8959, 108722 }, + { 0x8977, 108728 }, + { 0x8956, 108736 }, + { 0x0EA4, 108742 }, + { 0x027C, 108746 }, + { 0x0280, 108750 }, + { 0x45ED, 108755 }, + { 0x0287, 108762 }, + { 0x02A8, 108766 }, + { 0x36BD, 108771 }, + { 0x36C2, 108777 }, + { 0x36C7, 108784 }, + { 0x45F2, 108790 }, + { 0x027B, 108797 }, + { 0x0285, 108800 }, + { 0x02A4, 108804 }, + { 0x36B9, 108809 }, + { 0x36BE, 108815 }, + { 0x36C3, 108822 }, + { 0x028F, 108828 }, + { 0x45BD, 108832 }, + { 0x45BC, 108838 }, + { 0x02AC, 108843 }, + { 0x22B7, 108846 }, + { 0x22B6, 108849 }, + { 0x81FB, 108852 }, + { 0x9250, 108855 }, + { 0x94CD, 108856 }, + { 0x9292, 108857 }, + { 0x231C, 108858 }, + { 0x9251, 108859 }, + { 0x9253, 108861 }, + { 0x9268, 108863 }, + { 0x1F0F, 108865 }, + { 0x8F69, 108866 }, + { 0x1EE3, 108869 }, + { 0x1EE5, 108870 }, + { 0x1EE4, 108872 }, + { 0x8EF7, 108874 }, + { 0x7CAB, 108875 }, + { 0x8F91, 108877 }, + { 0x1CED, 108879 }, + { 0x212B, 108882 }, + { 0x8DFB, 108886 }, + { 0x8DFC, 108892 }, + { 0x8DFD, 108898 }, + { 0x8DFE, 108904 }, + { 0x8DFF, 108910 }, + { 0x8E00, 108916 }, + { 0x8E01, 108922 }, + { 0x8E02, 108928 }, + { 0x8E03, 108934 }, + { 0x8E04, 108940 }, + { 0x8E05, 108946 }, + { 0x8E06, 108952 }, + { 0x8E07, 108958 }, + { 0x8E08, 108964 }, + { 0x8E09, 108970 }, + { 0x8E0A, 108976 }, + { 0x8E0B, 108982 }, + { 0x8E0C, 108988 }, + { 0x8E0D, 108994 }, + { 0x8E0E, 109000 }, + { 0x8E0F, 109006 }, + { 0x8E10, 109012 }, + { 0x8E11, 109018 }, + { 0x8E12, 109024 }, + { 0x8E13, 109030 }, + { 0x8E14, 109036 }, + { 0x2117, 109042 }, + { 0x2118, 109046 }, + { 0x2120, 109050 }, + { 0x211B, 109054 }, + { 0x211C, 109058 }, + { 0x211E, 109062 }, + { 0x211A, 109066 }, + { 0x211F, 109070 }, + { 0x2119, 109074 }, + { 0x211D, 109078 }, + { 0x937D, 109082 }, + { 0x937B, 109085 }, + { 0x8E39, 109088 }, + { 0x8E36, 109091 }, + { 0x8E37, 109094 }, + { 0x8E38, 109097 }, + { 0x8E3A, 109100 }, + { 0x237A, 109103 }, + { 0x8E1B, 109107 }, + { 0x8E1C, 109113 }, + { 0x8E1D, 109119 }, + { 0x8E1E, 109125 }, + { 0x8E1F, 109131 }, + { 0x8E20, 109137 }, + { 0x8E21, 109143 }, + { 0x8E22, 109149 }, + { 0x8E23, 109155 }, + { 0x8E24, 109161 }, + { 0x8E25, 109167 }, + { 0x8E26, 109173 }, + { 0x8E27, 109179 }, + { 0x8E28, 109185 }, + { 0x8E29, 109191 }, + { 0x8E2A, 109197 }, + { 0x8E2B, 109203 }, + { 0x8E2C, 109209 }, + { 0x8E2D, 109215 }, + { 0x8E2E, 109221 }, + { 0x8E2F, 109227 }, + { 0x8E30, 109233 }, + { 0x8E31, 109239 }, + { 0x8E32, 109245 }, + { 0x8E33, 109251 }, + { 0x8E34, 109257 }, + { 0x9425, 109263 }, + { 0x96C5, 109267 }, + { 0x9427, 109271 }, + { 0x9424, 109275 }, + { 0x9426, 109279 }, + { 0x96BE, 109283 }, + { 0x96BF, 109286 }, + { 0x96C0, 109293 }, + { 0x005F, 109296 }, + { 0x9086, 109298 }, + { 0x9087, 109299 }, + { 0x89B2, 109303 }, + { 0x89AE, 109309 }, + { 0x89B0, 109315 }, + { 0x89AD, 109321 }, + { 0x89AF, 109327 }, + { 0x89B1, 109333 }, + { 0x89B5, 109339 }, + { 0x89BA, 109344 }, + { 0x89B6, 109349 }, + { 0x89B9, 109354 }, + { 0x89B8, 109359 }, + { 0x89BD, 109364 }, + { 0x89B4, 109369 }, + { 0x89BC, 109374 }, + { 0x89BB, 109379 }, + { 0x89B7, 109384 }, + { 0x899D, 109389 }, + { 0x89A3, 109394 }, + { 0x899F, 109399 }, + { 0x89A1, 109404 }, + { 0x89A0, 109409 }, + { 0x89A5, 109414 }, + { 0x899E, 109419 }, + { 0x8981, 109424 }, + { 0x8988, 109429 }, + { 0x89A4, 109434 }, + { 0x898E, 109439 }, + { 0x899B, 109444 }, + { 0x897D, 109449 }, + { 0x8987, 109454 }, + { 0x8982, 109459 }, + { 0x8979, 109464 }, + { 0x897E, 109469 }, + { 0x89A2, 109474 }, + { 0x8993, 109479 }, + { 0x8990, 109484 }, + { 0x898F, 109489 }, + { 0x8983, 109494 }, + { 0x897C, 109499 }, + { 0x898B, 109504 }, + { 0x897F, 109509 }, + { 0x8991, 109514 }, + { 0x8984, 109519 }, + { 0x8996, 109524 }, + { 0x8998, 109529 }, + { 0x8999, 109534 }, + { 0x8985, 109539 }, + { 0x8980, 109544 }, + { 0x8995, 109549 }, + { 0x8992, 109554 }, + { 0x898A, 109559 }, + { 0x897B, 109564 }, + { 0x8989, 109569 }, + { 0x899A, 109574 }, + { 0x899C, 109579 }, + { 0x897A, 109584 }, + { 0x898D, 109589 }, + { 0x8994, 109594 }, + { 0x8997, 109599 }, + { 0x8986, 109604 }, + { 0x898C, 109609 }, + { 0x89A6, 109614 }, + { 0x89AC, 109618 }, + { 0x89AB, 109622 }, + { 0x89A8, 109626 }, + { 0x89A7, 109630 }, + { 0x89AA, 109634 }, + { 0x89A9, 109638 }, + { 0x89BF, 109642 }, + { 0x89BE, 109647 }, + { 0x89B3, 109652 }, + { 0x2056, 109657 }, + { 0x9240, 109660 }, + { 0x929D, 109662 }, + { 0x9249, 109665 }, + { 0x9247, 109667 }, + { 0x924B, 109670 }, + { 0x1F0D, 109672 }, + { 0x2252, 109674 }, + { 0x2359, 109676 }, + { 0x7D38, 109679 }, + { 0x7D3D, 109682 }, + { 0x7D39, 109685 }, + { 0x7D3C, 109688 }, + { 0x7D3B, 109691 }, + { 0x7D40, 109694 }, + { 0x7D37, 109697 }, + { 0x7D3F, 109700 }, + { 0x7D3E, 109703 }, + { 0x7D3A, 109706 }, + { 0x2345, 109709 }, + { 0x234B, 109712 }, + { 0x7D1D, 109715 }, + { 0x7D1E, 109720 }, + { 0x7D1F, 109725 }, + { 0x7D20, 109730 }, + { 0x7D21, 109735 }, + { 0x7D22, 109740 }, + { 0x7D23, 109745 }, + { 0x7D24, 109750 }, + { 0x7D25, 109755 }, + { 0x7D26, 109760 }, + { 0x7D27, 109765 }, + { 0x7D28, 109770 }, + { 0x7D29, 109775 }, + { 0x7D2A, 109780 }, + { 0x7D2B, 109785 }, + { 0x7D2C, 109790 }, + { 0x7D2D, 109795 }, + { 0x7D2E, 109800 }, + { 0x7D2F, 109805 }, + { 0x7D30, 109810 }, + { 0x7D31, 109815 }, + { 0x7D32, 109820 }, + { 0x7D33, 109825 }, + { 0x7D34, 109830 }, + { 0x7D35, 109835 }, + { 0x7D36, 109840 }, + { 0x22C9, 109845 }, + { 0x1CBE, 109848 }, + { 0x948C, 109849 }, + { 0x1E7C, 109850 }, + { 0x271F, 109852 }, + { 0x271E, 109856 }, + { 0x9275, 109860 }, + { 0x906E, 109862 }, + { 0x3805, 109864 }, + { 0x3806, 109867 }, + { 0x3804, 109871 }, + { 0x37EC, 109875 }, + { 0x37EF, 109878 }, + { 0x37ED, 109881 }, + { 0x37F0, 109884 }, + { 0x37EE, 109887 }, + { 0x37DD, 109890 }, + { 0x37D3, 109893 }, + { 0x37D9, 109896 }, + { 0x37F5, 109899 }, + { 0x37F3, 109902 }, + { 0x37D1, 109905 }, + { 0x37EB, 109908 }, + { 0x37D5, 109911 }, + { 0x37CF, 109914 }, + { 0x37E8, 109917 }, + { 0x37DE, 109920 }, + { 0x37DA, 109923 }, + { 0x37DB, 109926 }, + { 0x37F1, 109929 }, + { 0x37E7, 109932 }, + { 0x37EA, 109935 }, + { 0x37D7, 109938 }, + { 0x37E2, 109941 }, + { 0x37F2, 109944 }, + { 0x37E6, 109947 }, + { 0x37E4, 109950 }, + { 0x37D4, 109953 }, + { 0x37FA, 109956 }, + { 0x37E1, 109959 }, + { 0x37F4, 109962 }, + { 0x37D0, 109965 }, + { 0x37D2, 109968 }, + { 0x37FB, 109971 }, + { 0x37D6, 109974 }, + { 0x37DC, 109977 }, + { 0x37E9, 109980 }, + { 0x37D8, 109983 }, + { 0x37DF, 109986 }, + { 0x37F8, 109989 }, + { 0x37E3, 109992 }, + { 0x37E0, 109995 }, + { 0x37F9, 109998 }, + { 0x37E5, 110001 }, + { 0x37FE, 110005 }, + { 0x37FC, 110009 }, + { 0x37FF, 110013 }, + { 0x37FD, 110017 }, + { 0x3802, 110021 }, + { 0x3803, 110024 }, + { 0x3800, 110028 }, + { 0x37F6, 110032 }, + { 0x37F7, 110036 }, + { 0x3801, 110040 }, + { 0x4170, 110044 }, + { 0x416A, 110049 }, + { 0x4153, 110053 }, + { 0x4165, 110057 }, + { 0x4159, 110061 }, + { 0x4166, 110065 }, + { 0x4158, 110069 }, + { 0x4155, 110073 }, + { 0x415D, 110077 }, + { 0x4168, 110081 }, + { 0x4163, 110085 }, + { 0x4162, 110089 }, + { 0x416F, 110093 }, + { 0x4161, 110097 }, + { 0x416C, 110101 }, + { 0x4175, 110105 }, + { 0x4152, 110110 }, + { 0x4164, 110114 }, + { 0x414D, 110119 }, + { 0x4167, 110123 }, + { 0x4171, 110127 }, + { 0x416B, 110131 }, + { 0x415E, 110136 }, + { 0x4174, 110140 }, + { 0x4151, 110145 }, + { 0x4169, 110149 }, + { 0x414E, 110153 }, + { 0x415F, 110157 }, + { 0x415C, 110161 }, + { 0x4172, 110165 }, + { 0x414F, 110169 }, + { 0x414A, 110173 }, + { 0x4154, 110178 }, + { 0x4160, 110182 }, + { 0x414C, 110186 }, + { 0x4157, 110190 }, + { 0x416D, 110194 }, + { 0x416E, 110198 }, + { 0x4150, 110202 }, + { 0x4156, 110206 }, + { 0x4173, 110210 }, + { 0x414B, 110214 }, + { 0x415A, 110219 }, + { 0x415B, 110223 }, + { 0x4176, 110228 }, + { 0x4149, 110234 }, + { 0x943D, 110238 }, + { 0x235B, 110240 }, + { 0x90B1, 110242 }, + { 0x2810, 110244 }, + { 0x1F6D, 110245 }, + { 0x1ED1, 110247 }, + { 0x1ED3, 110248 }, + { 0x1ED5, 110252 }, + { 0x1F3F, 110256 }, + { 0x26E1, 110261 }, + { 0x26E5, 110266 }, + { 0x26E3, 110272 }, + { 0x26DF, 110277 }, + { 0x26DD, 110281 }, + { 0x26DB, 110287 }, + { 0x1F07, 110292 }, + { 0x95DB, 110295 }, + { 0x945E, 110297 }, + { 0x95DC, 110299 }, + { 0x1FEE, 110301 }, + { 0x902B, 110303 }, + { 0x1DA5, 110304 }, + { 0x21C2, 110306 }, + { 0x21C3, 110309 }, + { 0x21C4, 110312 }, + { 0x21C5, 110315 }, + { 0x21C6, 110324 }, + { 0x21C7, 110330 }, + { 0x21C8, 110339 }, + { 0x21C9, 110348 }, + { 0x21CA, 110351 }, + { 0x21CB, 110357 }, + { 0x001F, 110366 }, + { 0x1CC8, 110368 }, + { 0x22E7, 110371 }, + { 0x22A8, 110372 }, + { 0x8E59, 110375 }, + { 0x8E5A, 110380 }, + { 0x8E5B, 110385 }, + { 0x8E5C, 110390 }, + { 0x8E5D, 110395 }, + { 0x8E5E, 110400 }, + { 0x8E5F, 110405 }, + { 0x8E60, 110410 }, + { 0x8E61, 110415 }, + { 0x8E62, 110420 }, + { 0x8E63, 110425 }, + { 0x8E64, 110430 }, + { 0x8E65, 110435 }, + { 0x8E66, 110440 }, + { 0x8E67, 110445 }, + { 0x8E68, 110450 }, + { 0x8E69, 110455 }, + { 0x8E6A, 110460 }, + { 0x8E6B, 110465 }, + { 0x8E6C, 110470 }, + { 0x8E6D, 110475 }, + { 0x8E6E, 110480 }, + { 0x8E6F, 110485 }, + { 0x8E70, 110490 }, + { 0x8E71, 110495 }, + { 0x8E72, 110500 }, + { 0x91BF, 110505 }, + { 0x8F4A, 110507 }, + { 0x1D7A, 110509 }, + { 0x926E, 110510 }, + { 0x1F67, 110511 }, + { 0x9148, 110514 }, + { 0x25CF, 110520 }, + { 0x25D1, 110522 }, + { 0x2A37, 110526 }, + { 0x25DC, 110528 }, + { 0x1CB5, 110531 }, + { 0x2827, 110533 }, + { 0x1E94, 110536 }, + { 0x1F24, 110538 }, + { 0x1CB6, 110541 }, + { 0x2BCA, 110544 }, + { 0x2719, 110549 }, + { 0x2A07, 110554 }, + { 0x9144, 110557 }, + { 0x9145, 110563 }, + { 0x9146, 110567 }, + { 0x1CB7, 110571 }, + { 0x1CCB, 110574 }, + { 0x2245, 110577 }, + { 0x9147, 110582 }, + { 0x2A24, 110585 }, + { 0x1CCF, 110588 }, + { 0x1D9E, 110590 }, + { 0x2321, 110594 }, + { 0x95F0, 110595 }, + { 0x9498, 110597 }, + { 0x94C3, 110598 }, + { 0x94B0, 110599 }, + { 0x227B, 110600 }, + { 0x8EE4, 110601 }, + { 0x235C, 110602 }, + { 0x234A, 110605 }, + { 0x2379, 110609 }, + { 0x2244, 110612 }, + { 0x8ED3, 110613 }, + { 0x9280, 110615 }, + { 0x9285, 110617 }, + { 0x9153, 110619 }, + { 0x9154, 110624 }, + { 0x914D, 110629 }, + { 0x914E, 110634 }, + { 0x9151, 110639 }, + { 0x9152, 110644 }, + { 0x914B, 110649 }, + { 0x914C, 110654 }, + { 0x362C, 110659 }, + { 0x91E7, 110661 }, + { 0x9057, 110663 }, + { 0x927F, 110665 }, + { 0x91F5, 110667 }, + { 0x91F4, 110670 }, + { 0x91C2, 110673 }, + { 0x9455, 110675 }, + { 0x947C, 110677 }, + { 0x2354, 110678 }, + { 0x9196, 110679 }, + { 0x1D30, 110683 }, + { 0x95EE, 110685 }, + { 0x8FE6, 110686 }, + { 0x94FB, 110688 }, + { 0x8F0F, 110690 }, + { 0x9082, 110692 }, + { 0x1EBA, 110694 }, + { 0x1ED2, 110697 }, + { 0x1ED4, 110698 }, + { 0x1ED6, 110702 }, + { 0x1F40, 110706 }, + { 0x26E2, 110711 }, + { 0x26E6, 110716 }, + { 0x26E4, 110722 }, + { 0x26E0, 110727 }, + { 0x26DE, 110731 }, + { 0x26DC, 110737 }, + { 0x1F08, 110742 }, + { 0x1EDA, 110745 }, + { 0x1EDE, 110747 }, + { 0x26F0, 110752 }, + { 0x1EE2, 110760 }, + { 0x26F8, 110766 }, + { 0x26F4, 110772 }, + { 0x26F6, 110777 }, + { 0x26F2, 110783 }, + { 0x26EA, 110788 }, + { 0x26EC, 110791 }, + { 0x26EE, 110796 }, + { 0x2700, 110801 }, + { 0x2702, 110804 }, + { 0x25A7, 110807 }, + { 0x2704, 110811 }, + { 0x2703, 110819 }, + { 0x23F5, 110822 }, + { 0x1F86, 110825 }, + { 0x14CC, 110826 }, + { 0x14CD, 110830 }, + { 0x14BC, 110834 }, + { 0x14BD, 110837 }, + { 0x14BE, 110840 }, + { 0x14C6, 110843 }, + { 0x14C3, 110846 }, + { 0x14C0, 110849 }, + { 0x14BF, 110852 }, + { 0x14C9, 110855 }, + { 0x14C7, 110858 }, + { 0x14C4, 110861 }, + { 0x14C5, 110864 }, + { 0x14CB, 110867 }, + { 0x14C2, 110870 }, + { 0x14CA, 110873 }, + { 0x14C8, 110876 }, + { 0x14C1, 110879 }, + { 0x8F3E, 110882 }, + { 0x9079, 110884 }, + { 0x9442, 110886 }, + { 0x2A31, 110888 }, + { 0x294C, 110890 }, + { 0x2982, 110893 }, + { 0x2965, 110896 }, + { 0x2983, 110899 }, + { 0x296F, 110902 }, + { 0x2960, 110905 }, + { 0x294D, 110908 }, + { 0x2953, 110911 }, + { 0x2958, 110914 }, + { 0x294F, 110917 }, + { 0x295C, 110920 }, + { 0x2952, 110923 }, + { 0x2959, 110926 }, + { 0x2969, 110929 }, + { 0x296A, 110932 }, + { 0x296B, 110935 }, + { 0x296E, 110938 }, + { 0x2963, 110941 }, + { 0x2970, 110944 }, + { 0x2975, 110947 }, + { 0x2978, 110950 }, + { 0x297C, 110953 }, + { 0x297D, 110956 }, + { 0x297E, 110959 }, + { 0x297F, 110962 }, + { 0x2957, 110965 }, + { 0x2974, 110968 }, + { 0x294E, 110972 }, + { 0x297A, 110975 }, + { 0x2955, 110978 }, + { 0x2954, 110981 }, + { 0x2972, 110984 }, + { 0x295F, 110987 }, + { 0x2961, 110990 }, + { 0x2971, 110993 }, + { 0x2977, 110996 }, + { 0x2976, 110999 }, + { 0x2979, 111002 }, + { 0x297B, 111005 }, + { 0x2966, 111008 }, + { 0x2981, 111011 }, + { 0x2956, 111014 }, + { 0x2950, 111017 }, + { 0x295B, 111020 }, + { 0x295D, 111023 }, + { 0x2951, 111028 }, + { 0x295E, 111033 }, + { 0x295A, 111037 }, + { 0x2964, 111041 }, + { 0x2973, 111045 }, + { 0x296C, 111049 }, + { 0x2962, 111053 }, + { 0x296D, 111057 }, + { 0x2968, 111061 }, + { 0x2967, 111065 }, + { 0x2980, 111069 }, + { 0x2984, 111073 }, + { 0x2986, 111078 }, + { 0x2985, 111081 }, + { 0x1CCA, 111084 }, + { 0x2A48, 111087 }, + { 0x8EA3, 111091 }, + { 0x8EA4, 111097 }, + { 0x8EA9, 111103 }, + { 0x8EA5, 111109 }, + { 0x8EA7, 111115 }, + { 0x8EAA, 111121 }, + { 0x8EA2, 111127 }, + { 0x8EA6, 111133 }, + { 0x8EA8, 111139 }, + { 0x8DD5, 111145 }, + { 0x25F6, 111152 }, + { 0x25F9, 111156 }, + { 0x9279, 111161 }, + { 0x25F7, 111165 }, + { 0x1CDD, 111168 }, + { 0x8FD3, 111169 }, + { 0x8F2C, 111171 }, + { 0x426C, 111173 }, + { 0x4269, 111176 }, + { 0x426A, 111179 }, + { 0x4253, 111182 }, + { 0x4262, 111185 }, + { 0x4268, 111188 }, + { 0x4254, 111191 }, + { 0x425F, 111194 }, + { 0x4261, 111197 }, + { 0x4259, 111200 }, + { 0x4251, 111203 }, + { 0x425C, 111206 }, + { 0x425E, 111209 }, + { 0x426B, 111212 }, + { 0x4257, 111215 }, + { 0x4258, 111218 }, + { 0x424E, 111221 }, + { 0x424F, 111224 }, + { 0x425D, 111227 }, + { 0x4256, 111230 }, + { 0x4264, 111233 }, + { 0x4263, 111236 }, + { 0x425A, 111239 }, + { 0x4255, 111242 }, + { 0x4252, 111245 }, + { 0x4250, 111248 }, + { 0x4267, 111251 }, + { 0x425B, 111254 }, + { 0x4265, 111257 }, + { 0x4260, 111260 }, + { 0x4266, 111263 }, + { 0x222E, 111266 }, + { 0x231D, 111267 }, + { 0x2240, 111270 }, + { 0x91C5, 111274 }, + { 0x1CBF, 111276 }, + { 0x1D7E, 111277 }, + { 0x23F6, 111278 }, + { 0x25FC, 111283 }, + { 0x2710, 111288 }, + { 0x270E, 111293 }, + { 0x9672, 111298 }, + { 0x9673, 111302 }, + { 0x9674, 111306 }, + { 0x9675, 111310 }, + { 0x9676, 111314 }, + { 0x9677, 111318 }, + { 0x2A33, 111322 }, + { 0x27A9, 111325 }, + { 0x1CDE, 111328 }, + { 0x2BDE, 111331 }, + { 0x2BE2, 111335 }, + { 0x2BE0, 111341 }, + { 0x2BDF, 111347 }, + { 0x2BE1, 111354 }, + { 0x005C, 111363 }, + { 0x7CD7, 111365 }, + { 0x7E56, 111371 }, + { 0x271B, 111377 }, + { 0x271C, 111382 }, + { 0x1FD6, 111387 }, + { 0x2027, 111392 }, + { 0x22D4, 111395 }, + { 0x2A25, 111400 }, + { 0x7CCB, 111402 }, + { 0x7CE3, 111404 }, + { 0x25C6, 111407 }, + { 0x7CE4, 111410 }, + { 0x9259, 111412 }, + { 0x1F45, 111415 }, + { 0x7C51, 111417 }, + { 0x7C5B, 111420 }, + { 0x2BE8, 111422 }, + { 0x1F6E, 111426 }, + { 0x440F, 111428 }, + { 0x4417, 111432 }, + { 0x441C, 111436 }, + { 0x4425, 111440 }, + { 0x442D, 111444 }, + { 0x4430, 111448 }, + { 0x4411, 111452 }, + { 0x4412, 111456 }, + { 0x4414, 111460 }, + { 0x4416, 111464 }, + { 0x4418, 111468 }, + { 0x4419, 111472 }, + { 0x441A, 111476 }, + { 0x441E, 111480 }, + { 0x441F, 111484 }, + { 0x4420, 111488 }, + { 0x4422, 111492 }, + { 0x4423, 111496 }, + { 0x4426, 111500 }, + { 0x4427, 111504 }, + { 0x4428, 111508 }, + { 0x4429, 111512 }, + { 0x442B, 111516 }, + { 0x442E, 111520 }, + { 0x442F, 111524 }, + { 0x4431, 111528 }, + { 0x4410, 111532 }, + { 0x4413, 111536 }, + { 0x4415, 111540 }, + { 0x441B, 111544 }, + { 0x441D, 111548 }, + { 0x4421, 111552 }, + { 0x4424, 111556 }, + { 0x442A, 111560 }, + { 0x442C, 111564 }, + { 0x43EC, 111568 }, + { 0x43F4, 111572 }, + { 0x43F9, 111576 }, + { 0x4402, 111580 }, + { 0x440A, 111584 }, + { 0x440D, 111588 }, + { 0x43EE, 111592 }, + { 0x43EF, 111596 }, + { 0x43F1, 111600 }, + { 0x43F3, 111604 }, + { 0x43F5, 111608 }, + { 0x43F6, 111612 }, + { 0x43F7, 111616 }, + { 0x43FB, 111620 }, + { 0x43FC, 111624 }, + { 0x43FD, 111628 }, + { 0x43FF, 111632 }, + { 0x4400, 111636 }, + { 0x4403, 111640 }, + { 0x4404, 111644 }, + { 0x4405, 111648 }, + { 0x4406, 111652 }, + { 0x4408, 111656 }, + { 0x440B, 111660 }, + { 0x440C, 111664 }, + { 0x440E, 111668 }, + { 0x43ED, 111672 }, + { 0x43F0, 111676 }, + { 0x43F2, 111680 }, + { 0x43F8, 111684 }, + { 0x43FA, 111688 }, + { 0x43FE, 111692 }, + { 0x4401, 111696 }, + { 0x4407, 111700 }, + { 0x4409, 111704 }, + { 0x280F, 111708 }, + { 0x928B, 111709 }, + { 0x7F3D, 111710 }, + { 0x7F6C, 111715 }, + { 0x7FAB, 111718 }, + { 0x7F6D, 111721 }, + { 0x7FAD, 111724 }, + { 0x7F3A, 111727 }, + { 0x7F3B, 111730 }, + { 0x7F6B, 111734 }, + { 0x7FAC, 111737 }, + { 0x7F99, 111740 }, + { 0x7F9A, 111743 }, + { 0x7F9C, 111747 }, + { 0x7F9D, 111752 }, + { 0x7F9E, 111757 }, + { 0x7F9B, 111762 }, + { 0x7F46, 111766 }, + { 0x7F55, 111769 }, + { 0x7F3E, 111773 }, + { 0x7F6E, 111776 }, + { 0x7F91, 111779 }, + { 0x7F92, 111782 }, + { 0x7F93, 111786 }, + { 0x7F94, 111790 }, + { 0x7F95, 111794 }, + { 0x7FAA, 111798 }, + { 0x7F70, 111801 }, + { 0x7F77, 111804 }, + { 0x7F78, 111809 }, + { 0x7F72, 111815 }, + { 0x7F74, 111820 }, + { 0x7F71, 111827 }, + { 0x7F73, 111832 }, + { 0x7F79, 111839 }, + { 0x7F75, 111846 }, + { 0x7F76, 111850 }, + { 0x7F7B, 111856 }, + { 0x7F84, 111860 }, + { 0x7F8C, 111865 }, + { 0x7F8A, 111869 }, + { 0x7F7C, 111876 }, + { 0x7F80, 111880 }, + { 0x7F9F, 111884 }, + { 0x7FA8, 111888 }, + { 0x7FA3, 111893 }, + { 0x7FA1, 111898 }, + { 0x7FA0, 111906 }, + { 0x7FA4, 111911 }, + { 0x7FA5, 111916 }, + { 0x7FA2, 111924 }, + { 0x7FA6, 111932 }, + { 0x7FA7, 111937 }, + { 0x7F7E, 111943 }, + { 0x7F85, 111947 }, + { 0x7F88, 111951 }, + { 0x7F7F, 111956 }, + { 0x7F8D, 111960 }, + { 0x7F8E, 111964 }, + { 0x7F8B, 111971 }, + { 0x7F7D, 111978 }, + { 0x7F81, 111982 }, + { 0x7F96, 111986 }, + { 0x7F8F, 111990 }, + { 0x7F90, 111994 }, + { 0x7F97, 111999 }, + { 0x7F98, 112003 }, + { 0x7F82, 112007 }, + { 0x7F87, 112011 }, + { 0x7F89, 112015 }, + { 0x7F86, 112020 }, + { 0x7F83, 112024 }, + { 0x7F59, 112028 }, + { 0x7F58, 112031 }, + { 0x7FA9, 112034 }, + { 0x7F6F, 112037 }, + { 0x7F57, 112040 }, + { 0x7F3C, 112043 }, + { 0x7F56, 112046 }, + { 0x7F40, 112050 }, + { 0x7F41, 112053 }, + { 0x7F44, 112058 }, + { 0x7F4D, 112064 }, + { 0x7F4F, 112068 }, + { 0x7F4E, 112072 }, + { 0x7F51, 112076 }, + { 0x7F53, 112081 }, + { 0x7F52, 112086 }, + { 0x7F54, 112091 }, + { 0x7F50, 112096 }, + { 0x7F3F, 112100 }, + { 0x7F48, 112103 }, + { 0x7F49, 112107 }, + { 0x7F4B, 112111 }, + { 0x7F4A, 112115 }, + { 0x7F4C, 112119 }, + { 0x7F42, 112123 }, + { 0x7F43, 112126 }, + { 0x7F5E, 112130 }, + { 0x7F5C, 112134 }, + { 0x7F5B, 112138 }, + { 0x7F62, 112142 }, + { 0x7F60, 112147 }, + { 0x7F5D, 112152 }, + { 0x7F63, 112156 }, + { 0x7F64, 112161 }, + { 0x7F66, 112166 }, + { 0x7F65, 112171 }, + { 0x7F61, 112176 }, + { 0x7F67, 112180 }, + { 0x7F6A, 112183 }, + { 0x7F68, 112188 }, + { 0x7F69, 112193 }, + { 0x7F47, 112197 }, + { 0x7F45, 112200 }, + { 0x7F5A, 112203 }, + { 0x7F7A, 112206 }, + { 0x7F5F, 112209 }, + { 0x7F39, 112213 }, + { 0x7F38, 112217 }, + { 0x7F35, 112221 }, + { 0x7F36, 112225 }, + { 0x7F37, 112229 }, + { 0x7F16, 112234 }, + { 0x7F0E, 112238 }, + { 0x7EFE, 112245 }, + { 0x7F0A, 112254 }, + { 0x7EFB, 112263 }, + { 0x7F07, 112270 }, + { 0x7F13, 112277 }, + { 0x7F15, 112283 }, + { 0x7F33, 112287 }, + { 0x7F22, 112291 }, + { 0x7F1C, 112297 }, + { 0x7EF6, 112301 }, + { 0x7F02, 112309 }, + { 0x7EF9, 112317 }, + { 0x7F05, 112323 }, + { 0x7F17, 112329 }, + { 0x7F20, 112333 }, + { 0x7F0D, 112337 }, + { 0x7EF7, 112343 }, + { 0x7F03, 112349 }, + { 0x7F1F, 112355 }, + { 0x7F32, 112359 }, + { 0x7F1E, 112364 }, + { 0x7EFA, 112368 }, + { 0x7F06, 112374 }, + { 0x7F2F, 112380 }, + { 0x7F1A, 112384 }, + { 0x7F12, 112388 }, + { 0x7F00, 112394 }, + { 0x7F0C, 112402 }, + { 0x7EFD, 112410 }, + { 0x7F09, 112416 }, + { 0x7F19, 112422 }, + { 0x7F2B, 112426 }, + { 0x7F2C, 112430 }, + { 0x7EF5, 112435 }, + { 0x7F01, 112444 }, + { 0x7EF8, 112453 }, + { 0x7F04, 112460 }, + { 0x7F14, 112467 }, + { 0x7F1D, 112472 }, + { 0x7F10, 112476 }, + { 0x7EFF, 112482 }, + { 0x7F0B, 112490 }, + { 0x7EFC, 112498 }, + { 0x7F08, 112504 }, + { 0x7F11, 112510 }, + { 0x7F21, 112515 }, + { 0x7F0F, 112519 }, + { 0x7F18, 112525 }, + { 0x7F2D, 112529 }, + { 0x7F28, 112533 }, + { 0x7F2E, 112537 }, + { 0x7F1B, 112542 }, + { 0x7F26, 112546 }, + { 0x7F30, 112550 }, + { 0x7F29, 112554 }, + { 0x7F2A, 112558 }, + { 0x7F27, 112565 }, + { 0x7F34, 112570 }, + { 0x7F24, 112576 }, + { 0x7F23, 112582 }, + { 0x7F25, 112588 }, + { 0x7F31, 112594 }, + { 0x95AF, 112599 }, + { 0x1D5C, 112600 }, + { 0x8F52, 112604 }, + { 0x2301, 112606 }, + { 0x9244, 112611 }, + { 0x0006, 112612 }, + { 0x6D06, 112613 }, + { 0x6D07, 112616 }, + { 0x6D08, 112619 }, + { 0x6D09, 112622 }, + { 0x6D0A, 112625 }, + { 0x6D0B, 112628 }, + { 0x6D0C, 112631 }, + { 0x6D0D, 112634 }, + { 0x6D0E, 112637 }, + { 0x6D0F, 112640 }, + { 0x6D11, 112643 }, + { 0x6D12, 112646 }, + { 0x6D13, 112649 }, + { 0x6D14, 112652 }, + { 0x6D15, 112655 }, + { 0x6D16, 112658 }, + { 0x6D17, 112661 }, + { 0x6D18, 112664 }, + { 0x6D19, 112667 }, + { 0x6D1A, 112670 }, + { 0x6D1B, 112673 }, + { 0x6D1C, 112676 }, + { 0x6D1D, 112679 }, + { 0x6D1E, 112682 }, + { 0x6D1F, 112685 }, + { 0x6D20, 112688 }, + { 0x6D22, 112691 }, + { 0x6D23, 112694 }, + { 0x6D24, 112697 }, + { 0x6D25, 112700 }, + { 0x6D26, 112703 }, + { 0x6D27, 112706 }, + { 0x6D28, 112709 }, + { 0x6D29, 112712 }, + { 0x6D2A, 112715 }, + { 0x6D2B, 112718 }, + { 0x6D2C, 112721 }, + { 0x6D2D, 112724 }, + { 0x6D2E, 112727 }, + { 0x6D30, 112730 }, + { 0x6D31, 112733 }, + { 0x6D33, 112736 }, + { 0x6D34, 112739 }, + { 0x6D35, 112742 }, + { 0x6D36, 112745 }, + { 0x6D38, 112748 }, + { 0x6D3B, 112751 }, + { 0x6D3C, 112754 }, + { 0x6D3D, 112757 }, + { 0x6D3E, 112760 }, + { 0x6D3F, 112763 }, + { 0x6D40, 112766 }, + { 0x6D41, 112769 }, + { 0x6D42, 112772 }, + { 0x6D43, 112775 }, + { 0x6D44, 112778 }, + { 0x6D45, 112781 }, + { 0x6D46, 112784 }, + { 0x6D47, 112787 }, + { 0x6D48, 112790 }, + { 0x6D49, 112793 }, + { 0x6D4A, 112796 }, + { 0x6D4B, 112799 }, + { 0x6D4C, 112802 }, + { 0x6D4D, 112805 }, + { 0x6D4E, 112808 }, + { 0x6D52, 112811 }, + { 0x6D53, 112814 }, + { 0x6D54, 112817 }, + { 0x6D55, 112820 }, + { 0x6D56, 112823 }, + { 0x6D57, 112826 }, + { 0x6D58, 112829 }, + { 0x6D59, 112832 }, + { 0x6D5A, 112835 }, + { 0x6D5B, 112838 }, + { 0x6D5C, 112841 }, + { 0x6D5D, 112844 }, + { 0x6D5E, 112847 }, + { 0x6D5F, 112850 }, + { 0x6D60, 112853 }, + { 0x6D61, 112856 }, + { 0x6D62, 112859 }, + { 0x6D63, 112862 }, + { 0x6D64, 112865 }, + { 0x6D65, 112868 }, + { 0x6D66, 112871 }, + { 0x6D67, 112874 }, + { 0x6D68, 112877 }, + { 0x6D69, 112880 }, + { 0x6D6A, 112883 }, + { 0x6D6B, 112886 }, + { 0x6D6C, 112889 }, + { 0x6D6D, 112892 }, + { 0x6D6E, 112895 }, + { 0x6D6F, 112898 }, + { 0x6D70, 112901 }, + { 0x6D72, 112904 }, + { 0x6D74, 112907 }, + { 0x6D75, 112910 }, + { 0x6D77, 112913 }, + { 0x6D79, 112916 }, + { 0x6D7B, 112919 }, + { 0x6D7C, 112922 }, + { 0x6D80, 112925 }, + { 0x6D83, 112928 }, + { 0x6D84, 112931 }, + { 0x6D88, 112934 }, + { 0x6D89, 112937 }, + { 0x6D8A, 112940 }, + { 0x6D8D, 112943 }, + { 0x6D8E, 112946 }, + { 0x6D8F, 112949 }, + { 0x6D90, 112952 }, + { 0x6D91, 112955 }, + { 0x6D93, 112958 }, + { 0x6D94, 112961 }, + { 0x6D95, 112964 }, + { 0x6D96, 112967 }, + { 0x6D97, 112970 }, + { 0x6D98, 112973 }, + { 0x6D99, 112976 }, + { 0x6D9A, 112979 }, + { 0x6D9B, 112982 }, + { 0x6D9C, 112985 }, + { 0x6D9E, 112988 }, + { 0x6D9F, 112991 }, + { 0x6DA0, 112994 }, + { 0x6DA1, 112997 }, + { 0x6DA2, 113000 }, + { 0x6DA3, 113003 }, + { 0x6DA4, 113006 }, + { 0x6DA5, 113009 }, + { 0x6DA6, 113012 }, + { 0x6DA7, 113015 }, + { 0x6DA9, 113018 }, + { 0x6DAA, 113021 }, + { 0x6DAB, 113024 }, + { 0x6DAC, 113027 }, + { 0x6DAD, 113030 }, + { 0x6DAE, 113033 }, + { 0x6DAF, 113036 }, + { 0x6DB0, 113039 }, + { 0x6DB1, 113042 }, + { 0x6DB2, 113045 }, + { 0x6DB3, 113048 }, + { 0x6DB4, 113051 }, + { 0x6DB5, 113054 }, + { 0x6DB6, 113057 }, + { 0x6DB7, 113060 }, + { 0x6DB8, 113063 }, + { 0x6DB9, 113066 }, + { 0x6DBA, 113069 }, + { 0x6DBB, 113072 }, + { 0x6DBC, 113075 }, + { 0x6DBD, 113078 }, + { 0x6DBE, 113081 }, + { 0x6DBF, 113084 }, + { 0x6DC0, 113087 }, + { 0x6DC1, 113090 }, + { 0x6DC2, 113093 }, + { 0x6DC3, 113096 }, + { 0x6DC4, 113099 }, + { 0x6DC5, 113102 }, + { 0x6DC6, 113105 }, + { 0x6DC7, 113108 }, + { 0x6DC8, 113111 }, + { 0x6DC9, 113114 }, + { 0x6DCA, 113117 }, + { 0x6DCB, 113120 }, + { 0x6DCC, 113123 }, + { 0x6DCD, 113126 }, + { 0x6DCE, 113129 }, + { 0x6DCF, 113132 }, + { 0x6DD0, 113135 }, + { 0x6DD1, 113138 }, + { 0x6DD2, 113141 }, + { 0x6DD3, 113144 }, + { 0x6DD4, 113147 }, + { 0x6DD5, 113150 }, + { 0x6DD6, 113153 }, + { 0x6DD7, 113156 }, + { 0x6DD8, 113159 }, + { 0x6DD9, 113162 }, + { 0x6DDA, 113165 }, + { 0x6DDB, 113168 }, + { 0x6DDC, 113171 }, + { 0x6DDD, 113174 }, + { 0x6DDE, 113177 }, + { 0x6DDF, 113180 }, + { 0x6DE0, 113183 }, + { 0x6DE1, 113186 }, + { 0x6DE2, 113189 }, + { 0x6DE3, 113192 }, + { 0x6DE4, 113195 }, + { 0x6DE5, 113198 }, + { 0x6DE6, 113201 }, + { 0x6DE7, 113204 }, + { 0x6DE8, 113207 }, + { 0x6DE9, 113210 }, + { 0x6DEA, 113213 }, + { 0x6DEB, 113216 }, + { 0x6DEE, 113219 }, + { 0x6DEF, 113222 }, + { 0x6DF0, 113225 }, + { 0x6DF1, 113228 }, + { 0x6DF2, 113231 }, + { 0x6DF4, 113234 }, + { 0x6DF5, 113237 }, + { 0x6DF7, 113240 }, + { 0x6DF8, 113243 }, + { 0x6DF9, 113246 }, + { 0x6DFA, 113249 }, + { 0x6DFB, 113252 }, + { 0x6DFC, 113255 }, + { 0x6DFE, 113258 }, + { 0x6E00, 113261 }, + { 0x6E01, 113264 }, + { 0x6E02, 113267 }, + { 0x6E03, 113270 }, + { 0x6E04, 113273 }, + { 0x6E05, 113276 }, + { 0x6E06, 113279 }, + { 0x6E07, 113282 }, + { 0x6E08, 113285 }, + { 0x6E09, 113288 }, + { 0x6E0A, 113291 }, + { 0x6E0C, 113294 }, + { 0x6E0D, 113297 }, + { 0x6E0E, 113300 }, + { 0x6E0F, 113303 }, + { 0x6E10, 113306 }, + { 0x6E11, 113309 }, + { 0x6E12, 113312 }, + { 0x6E13, 113315 }, + { 0x6E14, 113318 }, + { 0x6E15, 113321 }, + { 0x6E16, 113324 }, + { 0x6E17, 113327 }, + { 0x6E18, 113330 }, + { 0x6E19, 113333 }, + { 0x6E1A, 113336 }, + { 0x6E1B, 113339 }, + { 0x6E1C, 113342 }, + { 0x6E1D, 113345 }, + { 0x6E1E, 113348 }, + { 0x6E1F, 113351 }, + { 0x6E20, 113354 }, + { 0x6E21, 113357 }, + { 0x6E22, 113360 }, + { 0x6E23, 113363 }, + { 0x6E24, 113366 }, + { 0x6E25, 113369 }, + { 0x6E26, 113372 }, + { 0x6E27, 113375 }, + { 0x6E28, 113378 }, + { 0x6E29, 113381 }, + { 0x6E2A, 113384 }, + { 0x6E2B, 113387 }, + { 0x6E2C, 113390 }, + { 0x6E2D, 113393 }, + { 0x6E2E, 113396 }, + { 0x6E2F, 113399 }, + { 0x6E30, 113402 }, + { 0x6E31, 113405 }, + { 0x6E32, 113408 }, + { 0x6E33, 113411 }, + { 0x6E35, 113414 }, + { 0x6E36, 113417 }, + { 0x6E37, 113420 }, + { 0x6E38, 113423 }, + { 0x6E39, 113426 }, + { 0x6E3A, 113429 }, + { 0x6E3B, 113432 }, + { 0x6E3C, 113435 }, + { 0x6E3D, 113438 }, + { 0x6E3E, 113441 }, + { 0x6E3F, 113444 }, + { 0x6E40, 113447 }, + { 0x6E41, 113450 }, + { 0x6E42, 113453 }, + { 0x6E43, 113456 }, + { 0x6E44, 113459 }, + { 0x6E45, 113462 }, + { 0x6E46, 113465 }, + { 0x6E47, 113468 }, + { 0x6E48, 113471 }, + { 0x6E49, 113474 }, + { 0x6E4A, 113477 }, + { 0x6E4C, 113480 }, + { 0x6E4D, 113483 }, + { 0x6E4E, 113486 }, + { 0x6E4F, 113489 }, + { 0x6E50, 113492 }, + { 0x6E52, 113495 }, + { 0x6E53, 113498 }, + { 0x6E54, 113501 }, + { 0x6E55, 113504 }, + { 0x6E56, 113507 }, + { 0x6E58, 113510 }, + { 0x6E59, 113513 }, + { 0x6E5A, 113516 }, + { 0x6E5B, 113519 }, + { 0x6E5C, 113522 }, + { 0x6E5D, 113525 }, + { 0x6E5E, 113528 }, + { 0x6E5F, 113531 }, + { 0x6E60, 113534 }, + { 0x6E61, 113537 }, + { 0x6E63, 113540 }, + { 0x6E64, 113543 }, + { 0x6E65, 113546 }, + { 0x6E66, 113549 }, + { 0x6E67, 113552 }, + { 0x6E68, 113555 }, + { 0x6E69, 113558 }, + { 0x6E6A, 113561 }, + { 0x6E6B, 113564 }, + { 0x6E6C, 113567 }, + { 0x6E6D, 113570 }, + { 0x6E6E, 113573 }, + { 0x6E6F, 113576 }, + { 0x6E70, 113579 }, + { 0x6E71, 113582 }, + { 0x6E72, 113585 }, + { 0x6E73, 113588 }, + { 0x6E74, 113591 }, + { 0x6E75, 113594 }, + { 0x6E76, 113597 }, + { 0x6E78, 113600 }, + { 0x6E79, 113603 }, + { 0x6E7D, 113606 }, + { 0x6E7E, 113609 }, + { 0x6E7F, 113612 }, + { 0x6E80, 113615 }, + { 0x6E84, 113618 }, + { 0x6E85, 113621 }, + { 0x6E86, 113624 }, + { 0x6E87, 113627 }, + { 0x6E88, 113630 }, + { 0x6E89, 113633 }, + { 0x6E8A, 113636 }, + { 0x6E8B, 113639 }, + { 0x6E8C, 113642 }, + { 0x6E8D, 113645 }, + { 0x6E8E, 113648 }, + { 0x6E8F, 113651 }, + { 0x6E90, 113654 }, + { 0x6E91, 113657 }, + { 0x6E92, 113660 }, + { 0x6E93, 113663 }, + { 0x6E94, 113666 }, + { 0x6E95, 113669 }, + { 0x6E96, 113672 }, + { 0x6E97, 113675 }, + { 0x6E98, 113678 }, + { 0x6E99, 113681 }, + { 0x6E9A, 113684 }, + { 0x6E9C, 113687 }, + { 0x6E9D, 113690 }, + { 0x6E9E, 113693 }, + { 0x6E9F, 113696 }, + { 0x6EA0, 113699 }, + { 0x6EA2, 113702 }, + { 0x6EA3, 113705 }, + { 0x6EA4, 113708 }, + { 0x6EA5, 113711 }, + { 0x6EA7, 113714 }, + { 0x6EA8, 113717 }, + { 0x6EA9, 113720 }, + { 0x6EAB, 113723 }, + { 0x6EAC, 113726 }, + { 0x6EAD, 113729 }, + { 0x6EAE, 113732 }, + { 0x6EAF, 113735 }, + { 0x6EB0, 113738 }, + { 0x6EB1, 113741 }, + { 0x6EB2, 113744 }, + { 0x6EB3, 113747 }, + { 0x6EB4, 113750 }, + { 0x6EB6, 113753 }, + { 0x6EB7, 113756 }, + { 0x6EB9, 113762 }, + { 0x6EBA, 113765 }, + { 0x6EBB, 113768 }, + { 0x6EBD, 113771 }, + { 0x6EBE, 113774 }, + { 0x6EBF, 113777 }, + { 0x6EC0, 113780 }, + { 0x6EC1, 113783 }, + { 0x6EC2, 113786 }, + { 0x6EC3, 113789 }, + { 0x6EC4, 113793 }, + { 0x6EC5, 113796 }, + { 0x6EC6, 113799 }, + { 0x6EC7, 113802 }, + { 0x6EC8, 113805 }, + { 0x6EC9, 113808 }, + { 0x6ECA, 113811 }, + { 0x6ECB, 113814 }, + { 0x6ECC, 113817 }, + { 0x6ECD, 113820 }, + { 0x6ECE, 113823 }, + { 0x6ECF, 113826 }, + { 0x6ED0, 113829 }, + { 0x6ED1, 113832 }, + { 0x6ED2, 113835 }, + { 0x6ED3, 113838 }, + { 0x6ED4, 113841 }, + { 0x6ED6, 113847 }, + { 0x6ED7, 113850 }, + { 0x6ED8, 113853 }, + { 0x6ED9, 113856 }, + { 0x6EDA, 113859 }, + { 0x6EDB, 113862 }, + { 0x6EDC, 113865 }, + { 0x6EDD, 113868 }, + { 0x6EDE, 113871 }, + { 0x6EDF, 113874 }, + { 0x6EE0, 113877 }, + { 0x6EE1, 113880 }, + { 0x6EE2, 113883 }, + { 0x6EE3, 113886 }, + { 0x6EE4, 113889 }, + { 0x6EE5, 113892 }, + { 0x6EE6, 113895 }, + { 0x6EE7, 113898 }, + { 0x6EE8, 113901 }, + { 0x6EE9, 113904 }, + { 0x6EEA, 113907 }, + { 0x6EEB, 113910 }, + { 0x6EEC, 113913 }, + { 0x6EED, 113916 }, + { 0x6EEE, 113919 }, + { 0x6EEF, 113922 }, + { 0x6EF0, 113925 }, + { 0x6EF1, 113928 }, + { 0x6EF2, 113931 }, + { 0x6EF3, 113934 }, + { 0x6EF4, 113937 }, + { 0x6EF5, 113940 }, + { 0x6EF6, 113943 }, + { 0x6EF7, 113946 }, + { 0x6EF8, 113949 }, + { 0x6EF9, 113952 }, + { 0x6EFA, 113955 }, + { 0x6EFB, 113958 }, + { 0x6EFC, 113961 }, + { 0x6EFD, 113964 }, + { 0x6EFF, 113967 }, + { 0x6F00, 113970 }, + { 0x6F01, 113973 }, + { 0x6F02, 113976 }, + { 0x6F03, 113979 }, + { 0x6F04, 113982 }, + { 0x6F05, 113985 }, + { 0x6F07, 113988 }, + { 0x6F08, 113991 }, + { 0x6F09, 113994 }, + { 0x6F0A, 113997 }, + { 0x6F0B, 114000 }, + { 0x6F0C, 114003 }, + { 0x6F0D, 114006 }, + { 0x6F0E, 114009 }, + { 0x6F0F, 114012 }, + { 0x6F10, 114015 }, + { 0x6F11, 114018 }, + { 0x6F12, 114021 }, + { 0x6F13, 114024 }, + { 0x6F14, 114027 }, + { 0x6F15, 114030 }, + { 0x6F16, 114033 }, + { 0x6F17, 114036 }, + { 0x6F18, 114039 }, + { 0x6F19, 114042 }, + { 0x6F1A, 114045 }, + { 0x6F1B, 114048 }, + { 0x6F1C, 114051 }, + { 0x6F1D, 114054 }, + { 0x6F1E, 114057 }, + { 0x6F1F, 114060 }, + { 0x6F20, 114063 }, + { 0x6F21, 114066 }, + { 0x6F22, 114069 }, + { 0x6F23, 114072 }, + { 0x6F24, 114075 }, + { 0x6F25, 114078 }, + { 0x6F26, 114081 }, + { 0x6F27, 114084 }, + { 0x6F28, 114087 }, + { 0x6F29, 114090 }, + { 0x6F2A, 114093 }, + { 0x6F2B, 114096 }, + { 0x6F2C, 114099 }, + { 0x6F2D, 114102 }, + { 0x6F2E, 114105 }, + { 0x6F2F, 114108 }, + { 0x6F30, 114111 }, + { 0x6F31, 114114 }, + { 0x6F32, 114117 }, + { 0x6F33, 114120 }, + { 0x6F34, 114123 }, + { 0x6F35, 114126 }, + { 0x6F36, 114129 }, + { 0x6F37, 114132 }, + { 0x6F38, 114135 }, + { 0x6F39, 114138 }, + { 0x6F3A, 114141 }, + { 0x6F3B, 114144 }, + { 0x6F3C, 114147 }, + { 0x6F3D, 114150 }, + { 0x6F3E, 114153 }, + { 0x6F3F, 114156 }, + { 0x6F40, 114159 }, + { 0x6F41, 114162 }, + { 0x6F42, 114165 }, + { 0x6F43, 114168 }, + { 0x6F44, 114171 }, + { 0x6F45, 114174 }, + { 0x6F46, 114177 }, + { 0x6F47, 114180 }, + { 0x6F48, 114183 }, + { 0x6F49, 114186 }, + { 0x6F4A, 114189 }, + { 0x6F4B, 114192 }, + { 0x6F4C, 114195 }, + { 0x6D10, 114198 }, + { 0x6D21, 114201 }, + { 0x6D2F, 114204 }, + { 0x6D32, 114207 }, + { 0x6D37, 114210 }, + { 0x6D39, 114213 }, + { 0x6D3A, 114216 }, + { 0x6D4F, 114219 }, + { 0x6D50, 114222 }, + { 0x6D51, 114225 }, + { 0x6D71, 114228 }, + { 0x6D73, 114231 }, + { 0x6D76, 114234 }, + { 0x6D78, 114237 }, + { 0x6D7A, 114240 }, + { 0x6D7D, 114243 }, + { 0x6D7E, 114246 }, + { 0x6D7F, 114249 }, + { 0x6D81, 114252 }, + { 0x6D82, 114255 }, + { 0x6D85, 114258 }, + { 0x6D86, 114261 }, + { 0x6D87, 114264 }, + { 0x6D8B, 114267 }, + { 0x6D8C, 114270 }, + { 0x6D92, 114273 }, + { 0x6D9D, 114276 }, + { 0x6DA8, 114279 }, + { 0x6DEC, 114282 }, + { 0x6DED, 114285 }, + { 0x6DF3, 114288 }, + { 0x6DF6, 114291 }, + { 0x6DFD, 114294 }, + { 0x6DFF, 114297 }, + { 0x6E0B, 114300 }, + { 0x6E34, 114303 }, + { 0x6E4B, 114306 }, + { 0x6E51, 114309 }, + { 0x6E57, 114312 }, + { 0x6E62, 114315 }, + { 0x6E77, 114318 }, + { 0x6E7A, 114321 }, + { 0x6E7B, 114324 }, + { 0x6E7C, 114327 }, + { 0x6E81, 114330 }, + { 0x6E82, 114333 }, + { 0x6E83, 114336 }, + { 0x6E9B, 114339 }, + { 0x6EA1, 114342 }, + { 0x6EA6, 114345 }, + { 0x6EAA, 114348 }, + { 0x6EB5, 114351 }, + { 0x6EB8, 114354 }, + { 0x6EBC, 114357 }, + { 0x6ED5, 114360 }, + { 0x6EFE, 114366 }, + { 0x6F06, 114369 }, + { 0x91DA, 114372 }, + { 0x2236, 114374 }, + { 0x1EFD, 114376 }, + { 0x8EF9, 114377 }, + { 0x8F9A, 114378 }, + { 0x8FAB, 114381 }, + { 0x524F, 114385 }, + { 0x5250, 114388 }, + { 0x524A, 114391 }, + { 0x5249, 114394 }, + { 0x5248, 114397 }, + { 0x524B, 114400 }, + { 0x5247, 114403 }, + { 0x524E, 114406 }, + { 0x524C, 114409 }, + { 0x5252, 114411 }, + { 0x5257, 114414 }, + { 0x5253, 114417 }, + { 0x5256, 114420 }, + { 0x5255, 114423 }, + { 0x525A, 114426 }, + { 0x5251, 114429 }, + { 0x5259, 114432 }, + { 0x5258, 114435 }, + { 0x5254, 114438 }, + { 0x5243, 114441 }, + { 0x523C, 114445 }, + { 0x5245, 114449 }, + { 0x523E, 114453 }, + { 0x523B, 114457 }, + { 0x5244, 114461 }, + { 0x5246, 114465 }, + { 0x523D, 114469 }, + { 0x523F, 114473 }, + { 0x5242, 114477 }, + { 0x5240, 114482 }, + { 0x5241, 114487 }, + { 0x524D, 114492 }, + { 0x520D, 114495 }, + { 0x5216, 114498 }, + { 0x520F, 114501 }, + { 0x5218, 114504 }, + { 0x5211, 114507 }, + { 0x520E, 114510 }, + { 0x5217, 114513 }, + { 0x5219, 114516 }, + { 0x5230, 114519 }, + { 0x521F, 114522 }, + { 0x522B, 114525 }, + { 0x521C, 114528 }, + { 0x523A, 114531 }, + { 0x5210, 114534 }, + { 0x5221, 114537 }, + { 0x521A, 114540 }, + { 0x5235, 114543 }, + { 0x5232, 114546 }, + { 0x522D, 114549 }, + { 0x522E, 114552 }, + { 0x5234, 114555 }, + { 0x5239, 114558 }, + { 0x5229, 114561 }, + { 0x5212, 114564 }, + { 0x5236, 114567 }, + { 0x5233, 114570 }, + { 0x5231, 114573 }, + { 0x5220, 114576 }, + { 0x5226, 114579 }, + { 0x522C, 114582 }, + { 0x521D, 114585 }, + { 0x5222, 114588 }, + { 0x521B, 114591 }, + { 0x521E, 114594 }, + { 0x5228, 114597 }, + { 0x5223, 114600 }, + { 0x522F, 114603 }, + { 0x5237, 114606 }, + { 0x5238, 114609 }, + { 0x522A, 114612 }, + { 0x5224, 114615 }, + { 0x5227, 114618 }, + { 0x5225, 114621 }, + { 0x5215, 114624 }, + { 0x5213, 114628 }, + { 0x5214, 114632 }, + { 0x525B, 114636 }, + { 0x5260, 114639 }, + { 0x5264, 114642 }, + { 0x525C, 114645 }, + { 0x525F, 114648 }, + { 0x525E, 114651 }, + { 0x5263, 114654 }, + { 0x5262, 114657 }, + { 0x5268, 114660 }, + { 0x5267, 114663 }, + { 0x5261, 114666 }, + { 0x5269, 114669 }, + { 0x525D, 114672 }, + { 0x526B, 114675 }, + { 0x526C, 114678 }, + { 0x5266, 114681 }, + { 0x5265, 114684 }, + { 0x526A, 114687 }, + { 0x526D, 114690 }, + { 0x9267, 114694 }, + { 0x8F64, 114695 }, + { 0x224F, 114696 }, + { 0x95A0, 114698 }, + { 0x906F, 114699 }, + { 0x94B9, 114700 }, + { 0x7FDD, 114701 }, + { 0x7FBC, 114705 }, + { 0x8033, 114710 }, + { 0x7FF4, 114714 }, + { 0x7FC8, 114719 }, + { 0x7FEE, 114724 }, + { 0x8027, 114728 }, + { 0x7FDE, 114734 }, + { 0x802B, 114738 }, + { 0x802A, 114743 }, + { 0x804A, 114748 }, + { 0x804C, 114753 }, + { 0x8048, 114758 }, + { 0x804F, 114764 }, + { 0x804D, 114770 }, + { 0x804B, 114775 }, + { 0x8049, 114780 }, + { 0x804E, 114785 }, + { 0x7FE1, 114790 }, + { 0x7FBB, 114796 }, + { 0x8045, 114801 }, + { 0x8076, 114805 }, + { 0x8077, 114810 }, + { 0x8078, 114815 }, + { 0x8034, 114820 }, + { 0x802E, 114824 }, + { 0x7FDC, 114829 }, + { 0x7FF6, 114833 }, + { 0x7FB2, 114838 }, + { 0x7FB1, 114843 }, + { 0x7FAE, 114848 }, + { 0x7FD3, 114852 }, + { 0x8014, 114856 }, + { 0x7FDB, 114860 }, + { 0x8026, 114864 }, + { 0x7FC2, 114869 }, + { 0x7FC7, 114873 }, + { 0x8018, 114877 }, + { 0x7FAF, 114882 }, + { 0x807E, 114886 }, + { 0x8080, 114893 }, + { 0x8081, 114900 }, + { 0x807F, 114907 }, + { 0x807C, 114914 }, + { 0x807D, 114919 }, + { 0x800E, 114924 }, + { 0x8022, 114929 }, + { 0x8073, 114934 }, + { 0x8079, 114941 }, + { 0x806A, 114948 }, + { 0x8075, 114954 }, + { 0x8071, 114959 }, + { 0x8072, 114966 }, + { 0x8073, 114973 }, + { 0x8074, 114980 }, + { 0x806C, 114987 }, + { 0x7FE2, 114994 }, + { 0x8067, 114999 }, + { 0x806B, 115006 }, + { 0x806D, 115012 }, + { 0x8070, 115018 }, + { 0x806F, 115025 }, + { 0x8068, 115032 }, + { 0x806E, 115038 }, + { 0x8069, 115044 }, + { 0x807A, 115050 }, + { 0x8086, 115056 }, + { 0x8087, 115061 }, + { 0x803D, 115066 }, + { 0x80A3, 115072 }, + { 0x7FC4, 115078 }, + { 0x803F, 115083 }, + { 0x803E, 115089 }, + { 0x805A, 115095 }, + { 0x7FE5, 115101 }, + { 0x7FD2, 115106 }, + { 0x802D, 115110 }, + { 0x80A2, 115115 }, + { 0x8039, 115120 }, + { 0x8038, 115126 }, + { 0x803A, 115132 }, + { 0x803C, 115138 }, + { 0x803B, 115144 }, + { 0x8005, 115150 }, + { 0x7FF5, 115155 }, + { 0x7FC3, 115160 }, + { 0x8009, 115165 }, + { 0x7FCE, 115169 }, + { 0x8007, 115174 }, + { 0x7FD4, 115179 }, + { 0x7FC5, 115184 }, + { 0x7FD7, 115188 }, + { 0x8017, 115192 }, + { 0x8096, 115197 }, + { 0x7FBD, 115201 }, + { 0x8035, 115205 }, + { 0x8006, 115209 }, + { 0x7FB4, 115214 }, + { 0x7FB3, 115219 }, + { 0x8082, 115224 }, + { 0x8084, 115231 }, + { 0x8085, 115238 }, + { 0x8083, 115245 }, + { 0x807B, 115252 }, + { 0x7FFE, 115257 }, + { 0x809A, 115261 }, + { 0x8099, 115266 }, + { 0x809B, 115271 }, + { 0x809D, 115276 }, + { 0x8097, 115281 }, + { 0x809C, 115286 }, + { 0x8098, 115291 }, + { 0x8004, 115296 }, + { 0x8047, 115300 }, + { 0x8003, 115304 }, + { 0x8064, 115308 }, + { 0x7FED, 115315 }, + { 0x7FFD, 115319 }, + { 0x80A1, 115325 }, + { 0x809F, 115331 }, + { 0x7FC9, 115337 }, + { 0x8037, 115342 }, + { 0x8031, 115346 }, + { 0x8030, 115351 }, + { 0x802F, 115356 }, + { 0x800F, 115361 }, + { 0x800B, 115365 }, + { 0x7FEF, 115369 }, + { 0x7FF7, 115373 }, + { 0x7FEA, 115377 }, + { 0x802C, 115381 }, + { 0x7FCD, 115385 }, + { 0x8013, 115390 }, + { 0x7FD9, 115395 }, + { 0x7FD8, 115401 }, + { 0x7FC1, 115406 }, + { 0x7FDF, 115410 }, + { 0x7FD5, 115414 }, + { 0x7FCF, 115418 }, + { 0x8001, 115423 }, + { 0x8032, 115427 }, + { 0x7FD0, 115432 }, + { 0x7FD1, 115437 }, + { 0x7FC6, 115441 }, + { 0x8015, 115445 }, + { 0x7FE9, 115450 }, + { 0x8088, 115455 }, + { 0x8089, 115461 }, + { 0x808A, 115467 }, + { 0x808B, 115472 }, + { 0x8040, 115477 }, + { 0x8043, 115481 }, + { 0x8042, 115487 }, + { 0x8041, 115494 }, + { 0x8094, 115501 }, + { 0x8016, 115506 }, + { 0x8065, 115510 }, + { 0x7FB5, 115514 }, + { 0x7FE8, 115518 }, + { 0x7FF0, 115522 }, + { 0x7FF8, 115527 }, + { 0x7FBA, 115531 }, + { 0x8051, 115535 }, + { 0x8053, 115542 }, + { 0x805F, 115549 }, + { 0x8050, 115555 }, + { 0x8054, 115561 }, + { 0x8058, 115567 }, + { 0x8059, 115573 }, + { 0x8061, 115579 }, + { 0x8052, 115586 }, + { 0x8056, 115592 }, + { 0x8057, 115598 }, + { 0x8055, 115605 }, + { 0x8060, 115610 }, + { 0x7FCC, 115616 }, + { 0x7FE6, 115620 }, + { 0x7FFB, 115624 }, + { 0x7FCB, 115629 }, + { 0x8090, 115633 }, + { 0x8091, 115638 }, + { 0x8092, 115644 }, + { 0x8093, 115650 }, + { 0x808C, 115656 }, + { 0x808D, 115661 }, + { 0x808E, 115667 }, + { 0x808F, 115673 }, + { 0x8036, 115679 }, + { 0x8011, 115683 }, + { 0x7FF1, 115688 }, + { 0x7FE4, 115693 }, + { 0x8095, 115698 }, + { 0x8029, 115703 }, + { 0x805E, 115707 }, + { 0x805D, 115712 }, + { 0x805C, 115717 }, + { 0x7FE3, 115722 }, + { 0x8028, 115726 }, + { 0x7FBE, 115730 }, + { 0x7FFC, 115734 }, + { 0x80A0, 115740 }, + { 0x809E, 115746 }, + { 0x7FCA, 115752 }, + { 0x7FE0, 115757 }, + { 0x8023, 115761 }, + { 0x7FDA, 115766 }, + { 0x7FE7, 115771 }, + { 0x8008, 115775 }, + { 0x7FB6, 115780 }, + { 0x8044, 115784 }, + { 0x7FB8, 115788 }, + { 0x7FB9, 115792 }, + { 0x800A, 115797 }, + { 0x805B, 115801 }, + { 0x8000, 115807 }, + { 0x7FBF, 115813 }, + { 0x7FFF, 115817 }, + { 0x7FC0, 115822 }, + { 0x8012, 115827 }, + { 0x8062, 115831 }, + { 0x8063, 115837 }, + { 0x8046, 115843 }, + { 0x8066, 115847 }, + { 0x800D, 115851 }, + { 0x7FEB, 115856 }, + { 0x7FB7, 115861 }, + { 0x800C, 115865 }, + { 0x7FEC, 115870 }, + { 0x7FB0, 115875 }, + { 0x8024, 115879 }, + { 0x8025, 115884 }, + { 0x7FD6, 115889 }, + { 0x7FF3, 115893 }, + { 0x7FF2, 115897 }, + { 0x8021, 115901 }, + { 0x8020, 115905 }, + { 0x801B, 115909 }, + { 0x801E, 115913 }, + { 0x8010, 115917 }, + { 0x7FFA, 115921 }, + { 0x8002, 115925 }, + { 0x7FF9, 115929 }, + { 0x801A, 115933 }, + { 0x801F, 115937 }, + { 0x8019, 115941 }, + { 0x801C, 115945 }, + { 0x801D, 115949 }, + { 0x2A35, 115953 }, + { 0x227D, 115954 }, + { 0x95B2, 115955 }, + { 0x43BB, 115957 }, + { 0x43D9, 115961 }, + { 0x43B7, 115965 }, + { 0x43CF, 115969 }, + { 0x43B8, 115973 }, + { 0x43C9, 115977 }, + { 0x43C0, 115981 }, + { 0x43D1, 115985 }, + { 0x43BA, 115989 }, + { 0x43BD, 115993 }, + { 0x43DB, 115997 }, + { 0x43B9, 116001 }, + { 0x43C3, 116005 }, + { 0x43E5, 116009 }, + { 0x43CB, 116013 }, + { 0x43EA, 116017 }, + { 0x43C5, 116021 }, + { 0x43D3, 116025 }, + { 0x43DE, 116029 }, + { 0x43D4, 116033 }, + { 0x43CE, 116037 }, + { 0x43E0, 116041 }, + { 0x43C4, 116045 }, + { 0x43BF, 116049 }, + { 0x43C2, 116053 }, + { 0x43E7, 116057 }, + { 0x43DD, 116061 }, + { 0x43D0, 116065 }, + { 0x43E6, 116069 }, + { 0x43D2, 116073 }, + { 0x43C8, 116077 }, + { 0x43DC, 116081 }, + { 0x43CD, 116085 }, + { 0x43C6, 116089 }, + { 0x43D8, 116093 }, + { 0x43CA, 116097 }, + { 0x43CC, 116101 }, + { 0x43D5, 116105 }, + { 0x43E9, 116109 }, + { 0x43E1, 116113 }, + { 0x43D7, 116117 }, + { 0x43E4, 116121 }, + { 0x43E3, 116125 }, + { 0x43DA, 116129 }, + { 0x43E2, 116133 }, + { 0x43C7, 116137 }, + { 0x43E8, 116141 }, + { 0x43C1, 116145 }, + { 0x43BC, 116149 }, + { 0x43BE, 116153 }, + { 0x43D6, 116157 }, + { 0x43DF, 116161 }, + { 0x43EB, 116165 }, + { 0x1CC0, 116169 }, + { 0x8F74, 116171 }, + { 0x8F1E, 116173 }, + { 0x8F37, 116175 }, + { 0x8F8C, 116177 }, + { 0x8EB9, 116178 }, + { 0x9134, 116181 }, + { 0x8F8E, 116184 }, + { 0x907E, 116186 }, + { 0x1E0E, 116187 }, + { 0x1E12, 116191 }, + { 0x918B, 116195 }, + { 0x256D, 116201 }, + { 0x241F, 116205 }, + { 0x1E89, 116209 }, + { 0x1E88, 116212 }, + { 0x90B6, 116214 }, + { 0x90B4, 116221 }, + { 0x90B5, 116228 }, + { 0x279A, 116239 }, + { 0x95CB, 116244 }, + { 0x9058, 116245 }, + { 0x02FC, 116247 }, + { 0x0312, 116250 }, + { 0x1A67, 116253 }, + { 0x1A8C, 116256 }, + { 0x02DC, 116260 }, + { 0x1A68, 116264 }, + { 0x1A69, 116267 }, + { 0x02C6, 116270 }, + { 0x1A8F, 116273 }, + { 0x0317, 116277 }, + { 0x02E2, 116281 }, + { 0x1A91, 116284 }, + { 0x02F1, 116288 }, + { 0x0309, 116291 }, + { 0x4249, 116295 }, + { 0x424A, 116300 }, + { 0x424D, 116305 }, + { 0x424B, 116310 }, + { 0x424C, 116315 }, + { 0x17A0, 116320 }, + { 0x02DD, 116323 }, + { 0x1D46, 116327 }, + { 0x02C8, 116331 }, + { 0x02DA, 116334 }, + { 0x0310, 116336 }, + { 0x02DB, 116341 }, + { 0x02D7, 116346 }, + { 0x02D9, 116350 }, + { 0x0308, 116354 }, + { 0x1D40, 116358 }, + { 0x1D58, 116362 }, + { 0x1D4B, 116366 }, + { 0x030C, 116371 }, + { 0x1D3A, 116376 }, + { 0x1A95, 116380 }, + { 0x0313, 116384 }, + { 0x17AC, 116388 }, + { 0x17AE, 116393 }, + { 0x1D55, 116398 }, + { 0x02F5, 116403 }, + { 0x02F7, 116407 }, + { 0x1D3C, 116411 }, + { 0x17A2, 116416 }, + { 0x17B3, 116420 }, + { 0x02DE, 116424 }, + { 0x02C9, 116428 }, + { 0x02E4, 116431 }, + { 0x1D42, 116434 }, + { 0x1D53, 116437 }, + { 0x1A90, 116441 }, + { 0x0300, 116446 }, + { 0x02C0, 116450 }, + { 0x02D6, 116453 }, + { 0x4D62, 116457 }, + { 0x02C5, 116460 }, + { 0x02ED, 116462 }, + { 0x02CB, 116465 }, + { 0x02EB, 116467 }, + { 0x02D2, 116470 }, + { 0x02D4, 116473 }, + { 0x02E5, 116477 }, + { 0x02FF, 116480 }, + { 0x02BF, 116484 }, + { 0x02D5, 116487 }, + { 0x0302, 116491 }, + { 0x81CF, 116494 }, + { 0x81D1, 116498 }, + { 0x81D0, 116502 }, + { 0x0303, 116506 }, + { 0x0301, 116510 }, + { 0x0304, 116513 }, + { 0x0322, 116516 }, + { 0x1A89, 116521 }, + { 0x1A7F, 116528 }, + { 0x0327, 116533 }, + { 0x1A6E, 116538 }, + { 0x0328, 116544 }, + { 0x0323, 116549 }, + { 0x1A82, 116554 }, + { 0x1A71, 116559 }, + { 0x0329, 116564 }, + { 0x0324, 116569 }, + { 0x1A73, 116574 }, + { 0x1A74, 116579 }, + { 0x1A83, 116584 }, + { 0x032A, 116593 }, + { 0x1A77, 116598 }, + { 0x0325, 116603 }, + { 0x1A84, 116608 }, + { 0x1A8A, 116617 }, + { 0x1A85, 116624 }, + { 0x032B, 116629 }, + { 0x1A61, 116634 }, + { 0x1A7A, 116640 }, + { 0x1A7B, 116646 }, + { 0x032C, 116651 }, + { 0x0326, 116656 }, + { 0x1A87, 116661 }, + { 0x1A8B, 116670 }, + { 0x032D, 116677 }, + { 0x1A88, 116682 }, + { 0x17AA, 116687 }, + { 0x032E, 116693 }, + { 0x1A7D, 116698 }, + { 0x1A6B, 116703 }, + { 0x1A6C, 116708 }, + { 0x1A6D, 116713 }, + { 0x1A86, 116718 }, + { 0x1A70, 116723 }, + { 0x1A80, 116728 }, + { 0x1A7C, 116733 }, + { 0x1A7E, 116739 }, + { 0x1A81, 116744 }, + { 0x17AB, 116749 }, + { 0x1A6F, 116756 }, + { 0x17B7, 116762 }, + { 0x17B8, 116768 }, + { 0x17B9, 116774 }, + { 0x1A6A, 116780 }, + { 0x1A72, 116788 }, + { 0x1A75, 116794 }, + { 0x1A76, 116800 }, + { 0x1A78, 116806 }, + { 0x1A79, 116812 }, + { 0x17A4, 116818 }, + { 0x02DF, 116823 }, + { 0x0316, 116827 }, + { 0x02F8, 116832 }, + { 0x02D8, 116837 }, + { 0x1D41, 116841 }, + { 0x1D59, 116845 }, + { 0x1D3B, 116849 }, + { 0x0315, 116853 }, + { 0x1A96, 116860 }, + { 0x030F, 116867 }, + { 0x0314, 116871 }, + { 0x17AD, 116875 }, + { 0x17AF, 116880 }, + { 0x02F4, 116885 }, + { 0x02F6, 116889 }, + { 0x1D3D, 116893 }, + { 0x1A59, 116898 }, + { 0x1D45, 116901 }, + { 0x02C2, 116905 }, + { 0x3E2C, 116907 }, + { 0x02EF, 116912 }, + { 0x3E2D, 116915 }, + { 0x02F3, 116920 }, + { 0x030B, 116923 }, + { 0x1A94, 116928 }, + { 0x0305, 116933 }, + { 0x02E9, 116936 }, + { 0x1A58, 116939 }, + { 0x1A57, 116943 }, + { 0x02F2, 116947 }, + { 0x17A3, 116951 }, + { 0x17B4, 116956 }, + { 0x17B5, 116961 }, + { 0x0319, 116966 }, + { 0x02CA, 116970 }, + { 0x031C, 116974 }, + { 0x031B, 116977 }, + { 0x02CE, 116981 }, + { 0x031F, 116985 }, + { 0x3E25, 116988 }, + { 0x3E26, 116993 }, + { 0x031D, 116998 }, + { 0x031E, 117001 }, + { 0x0320, 117005 }, + { 0x1A93, 117009 }, + { 0x02FE, 117014 }, + { 0x02CD, 117017 }, + { 0x0307, 117022 }, + { 0x1D50, 117027 }, + { 0x1A64, 117032 }, + { 0x0321, 117036 }, + { 0x17A7, 117041 }, + { 0x0306, 117045 }, + { 0x1A8E, 117049 }, + { 0x1A8D, 117053 }, + { 0x02C3, 117057 }, + { 0x3E27, 117059 }, + { 0x3E2E, 117063 }, + { 0x02F0, 117068 }, + { 0x3E28, 117071 }, + { 0x3E2F, 117075 }, + { 0x17B1, 117080 }, + { 0x02E7, 117084 }, + { 0x1A65, 117086 }, + { 0x02FA, 117089 }, + { 0x17B0, 117092 }, + { 0x17A5, 117096 }, + { 0x179F, 117101 }, + { 0x17B6, 117104 }, + { 0x1D52, 117108 }, + { 0x02D1, 117111 }, + { 0x17A1, 117115 }, + { 0x031A, 117119 }, + { 0x1A66, 117122 }, + { 0x1D51, 117125 }, + { 0x02E6, 117128 }, + { 0x179B, 117130 }, + { 0x0311, 117134 }, + { 0x4D7B, 117136 }, + { 0x4D80, 117140 }, + { 0x4D7C, 117144 }, + { 0x4D7F, 117148 }, + { 0x4D7E, 117152 }, + { 0x4D7A, 117156 }, + { 0x4D7D, 117160 }, + { 0x4D81, 117164 }, + { 0x4D82, 117168 }, + { 0x4D83, 117172 }, + { 0x4D85, 117176 }, + { 0x4D84, 117180 }, + { 0x1D4F, 117184 }, + { 0x02FB, 117188 }, + { 0x030D, 117191 }, + { 0x1D5A, 117195 }, + { 0x0318, 117198 }, + { 0x3629, 117201 }, + { 0x043B, 117206 }, + { 0x043C, 117210 }, + { 0x8978, 117214 }, + { 0x0439, 117220 }, + { 0x3E31, 117223 }, + { 0x3E32, 117228 }, + { 0x3628, 117233 }, + { 0x3635, 117236 }, + { 0x29EC, 117239 }, + { 0x362E, 117243 }, + { 0x29E0, 117247 }, + { 0x3630, 117251 }, + { 0x29D6, 117255 }, + { 0x29D9, 117259 }, + { 0x3657, 117263 }, + { 0x29DD, 117267 }, + { 0x29DE, 117271 }, + { 0x29DF, 117275 }, + { 0x29E2, 117279 }, + { 0x29E3, 117283 }, + { 0x29E5, 117287 }, + { 0x29ED, 117291 }, + { 0x29DC, 117295 }, + { 0x29E1, 117299 }, + { 0x29E4, 117303 }, + { 0x29D7, 117307 }, + { 0x362F, 117311 }, + { 0x29F1, 117315 }, + { 0x29DB, 117319 }, + { 0x29F4, 117323 }, + { 0x29E7, 117328 }, + { 0x29D8, 117332 }, + { 0x29E8, 117336 }, + { 0x29E6, 117340 }, + { 0x29F0, 117344 }, + { 0x29DA, 117348 }, + { 0x29EA, 117352 }, + { 0x3631, 117356 }, + { 0x3633, 117361 }, + { 0x3632, 117366 }, + { 0x29EE, 117370 }, + { 0x29EB, 117374 }, + { 0x3634, 117378 }, + { 0x29E9, 117382 }, + { 0x29F3, 117386 }, + { 0x29F2, 117391 }, + { 0x3658, 117396 }, + { 0x29F5, 117401 }, + { 0x29EF, 117407 }, + { 0x362D, 117412 }, + { 0x362A, 117417 }, + { 0x043E, 117422 }, + { 0x3636, 117427 }, + { 0x043F, 117430 }, + { 0x043D, 117434 }, + { 0x362B, 117437 }, + { 0x043A, 117442 }, + { 0x1A92, 117445 }, + { 0x030E, 117448 }, + { 0x179D, 117451 }, + { 0x02D0, 117453 }, + { 0x02EE, 117456 }, + { 0x02F9, 117460 }, + { 0x17B2, 117464 }, + { 0x02EA, 117469 }, + { 0x3E23, 117474 }, + { 0x3E2A, 117478 }, + { 0x3E24, 117483 }, + { 0x3E2B, 117487 }, + { 0x02C4, 117492 }, + { 0x02D3, 117494 }, + { 0x02CC, 117498 }, + { 0x02E8, 117502 }, + { 0x02FD, 117506 }, + { 0x1D43, 117509 }, + { 0x1D3F, 117513 }, + { 0x02C7, 117517 }, + { 0x02E3, 117519 }, + { 0x179E, 117522 }, + { 0x1D47, 117525 }, + { 0x1D4A, 117528 }, + { 0x1D4D, 117532 }, + { 0x1D4C, 117535 }, + { 0x1D48, 117538 }, + { 0x1D4E, 117541 }, + { 0x1D49, 117546 }, + { 0x1D54, 117549 }, + { 0x1D57, 117553 }, + { 0x02E1, 117559 }, + { 0x02C1, 117563 }, + { 0x02EC, 117566 }, + { 0x3E29, 117570 }, + { 0x3E30, 117573 }, + { 0x386A, 117577 }, + { 0x385A, 117581 }, + { 0x385F, 117585 }, + { 0x385B, 117589 }, + { 0x385E, 117593 }, + { 0x385D, 117597 }, + { 0x3862, 117601 }, + { 0x3859, 117605 }, + { 0x3861, 117609 }, + { 0x3860, 117613 }, + { 0x385C, 117617 }, + { 0x3863, 117621 }, + { 0x3864, 117625 }, + { 0x3865, 117629 }, + { 0x3866, 117633 }, + { 0x3867, 117637 }, + { 0x3868, 117641 }, + { 0x3869, 117645 }, + { 0x891E, 117649 }, + { 0x8935, 117653 }, + { 0x8933, 117657 }, + { 0x8914, 117661 }, + { 0x8937, 117665 }, + { 0x8924, 117670 }, + { 0x892F, 117674 }, + { 0x892D, 117678 }, + { 0x8929, 117682 }, + { 0x8915, 117686 }, + { 0x8939, 117690 }, + { 0x892B, 117694 }, + { 0x891C, 117698 }, + { 0x8920, 117702 }, + { 0x892C, 117706 }, + { 0x8916, 117710 }, + { 0x8932, 117714 }, + { 0x8931, 117718 }, + { 0x8930, 117722 }, + { 0x8918, 117726 }, + { 0x892A, 117730 }, + { 0x8923, 117734 }, + { 0x8926, 117738 }, + { 0x8927, 117742 }, + { 0x8934, 117746 }, + { 0x8919, 117751 }, + { 0x892E, 117755 }, + { 0x891F, 117759 }, + { 0x8925, 117763 }, + { 0x8928, 117767 }, + { 0x891B, 117771 }, + { 0x8917, 117775 }, + { 0x891D, 117779 }, + { 0x8938, 117784 }, + { 0x8936, 117790 }, + { 0x8921, 117796 }, + { 0x8922, 117800 }, + { 0x891A, 117804 }, + { 0x030A, 117808 }, + { 0x1D56, 117811 }, + { 0x1A5A, 117817 }, + { 0x02CF, 117820 }, + { 0x02E0, 117822 }, + { 0x17A6, 117826 }, + { 0x17A8, 117829 }, + { 0x17A9, 117832 }, + { 0x1A5E, 117835 }, + { 0x1A62, 117837 }, + { 0x1A5C, 117839 }, + { 0x1A5B, 117841 }, + { 0x1A63, 117843 }, + { 0x1A5D, 117845 }, + { 0x1D44, 117847 }, + { 0x1D3E, 117851 }, + { 0x179C, 117855 }, + { 0x1A60, 117857 }, + { 0x1A5F, 117859 }, + { 0x2C43, 117861 }, + { 0x2C44, 117866 }, + { 0x2699, 117871 }, + { 0x0068, 117875 }, + { 0x8FBD, 117877 }, + { 0x947E, 117878 }, + { 0x53E0, 117879 }, + { 0x53E1, 117882 }, + { 0x53E4, 117887 }, + { 0x53E2, 117892 }, + { 0x53E5, 117897 }, + { 0x53E8, 117902 }, + { 0x53E3, 117907 }, + { 0x53E7, 117913 }, + { 0x53E6, 117918 }, + { 0x546A, 117924 }, + { 0x546C, 117927 }, + { 0x546B, 117935 }, + { 0x551F, 117940 }, + { 0x5520, 117943 }, + { 0x56EB, 117947 }, + { 0x5779, 117950 }, + { 0x56ED, 117954 }, + { 0x56EC, 117959 }, + { 0x56F0, 117963 }, + { 0x56EE, 117973 }, + { 0x56EF, 117984 }, + { 0x53E9, 117992 }, + { 0x53EA, 117995 }, + { 0x53F5, 117998 }, + { 0x53F4, 118002 }, + { 0x53EF, 118011 }, + { 0x53ED, 118016 }, + { 0x53F0, 118021 }, + { 0x5750, 118027 }, + { 0x57EE, 118032 }, + { 0x53EB, 118038 }, + { 0x53EC, 118043 }, + { 0x53EE, 118049 }, + { 0x53F1, 118055 }, + { 0x57EF, 118060 }, + { 0x53F2, 118065 }, + { 0x53F3, 118070 }, + { 0x53FC, 118075 }, + { 0x57F0, 118078 }, + { 0x53FD, 118083 }, + { 0x53FE, 118086 }, + { 0x53FF, 118091 }, + { 0x5400, 118098 }, + { 0x5401, 118101 }, + { 0x5404, 118106 }, + { 0x5406, 118111 }, + { 0x5407, 118116 }, + { 0x5408, 118121 }, + { 0x5402, 118126 }, + { 0x5403, 118131 }, + { 0x5405, 118136 }, + { 0x540D, 118141 }, + { 0x540E, 118144 }, + { 0x5411, 118149 }, + { 0x5410, 118155 }, + { 0x540F, 118164 }, + { 0x5420, 118169 }, + { 0x5429, 118172 }, + { 0x542A, 118175 }, + { 0x542B, 118180 }, + { 0x542C, 118185 }, + { 0x542D, 118191 }, + { 0x542E, 118194 }, + { 0x542F, 118200 }, + { 0x57F5, 118206 }, + { 0x5430, 118213 }, + { 0x5435, 118218 }, + { 0x57F6, 118221 }, + { 0x5452, 118226 }, + { 0x545A, 118229 }, + { 0x545C, 118232 }, + { 0x545B, 118236 }, + { 0x545D, 118241 }, + { 0x546D, 118245 }, + { 0x546E, 118248 }, + { 0x5473, 118257 }, + { 0x5470, 118262 }, + { 0x546F, 118267 }, + { 0x5817, 118272 }, + { 0x5818, 118277 }, + { 0x5471, 118282 }, + { 0x5472, 118287 }, + { 0x5476, 118292 }, + { 0x5477, 118295 }, + { 0x547A, 118298 }, + { 0x5478, 118303 }, + { 0x5479, 118308 }, + { 0x547D, 118314 }, + { 0x547B, 118318 }, + { 0x547C, 118323 }, + { 0x5495, 118328 }, + { 0x5496, 118331 }, + { 0x54E0, 118335 }, + { 0x54E1, 118338 }, + { 0x54E2, 118343 }, + { 0x54E3, 118348 }, + { 0x54F6, 118353 }, + { 0x54F7, 118356 }, + { 0x5509, 118361 }, + { 0x550B, 118364 }, + { 0x550A, 118368 }, + { 0x583C, 118372 }, + { 0x550D, 118377 }, + { 0x5516, 118380 }, + { 0x550E, 118385 }, + { 0x583D, 118390 }, + { 0x5510, 118399 }, + { 0x5512, 118404 }, + { 0x5513, 118409 }, + { 0x5514, 118414 }, + { 0x5515, 118419 }, + { 0x550F, 118424 }, + { 0x5511, 118429 }, + { 0x5517, 118434 }, + { 0x5521, 118437 }, + { 0x5525, 118440 }, + { 0x552B, 118443 }, + { 0x552C, 118446 }, + { 0x552E, 118452 }, + { 0x552F, 118455 }, + { 0x5532, 118460 }, + { 0x5530, 118464 }, + { 0x5531, 118469 }, + { 0x5534, 118474 }, + { 0x5535, 118477 }, + { 0x5537, 118480 }, + { 0x5538, 118483 }, + { 0x5567, 118488 }, + { 0x5840, 118493 }, + { 0x5539, 118500 }, + { 0x553A, 118505 }, + { 0x553F, 118512 }, + { 0x583E, 118517 }, + { 0x5542, 118522 }, + { 0x5547, 118527 }, + { 0x554B, 118532 }, + { 0x5762, 118537 }, + { 0x554E, 118544 }, + { 0x583F, 118549 }, + { 0x5550, 118554 }, + { 0x5552, 118559 }, + { 0x5553, 118564 }, + { 0x5554, 118569 }, + { 0x5555, 118574 }, + { 0x5556, 118581 }, + { 0x5557, 118588 }, + { 0x5558, 118595 }, + { 0x5559, 118600 }, + { 0x555A, 118607 }, + { 0x5764, 118612 }, + { 0x555C, 118617 }, + { 0x555D, 118622 }, + { 0x555E, 118627 }, + { 0x5766, 118632 }, + { 0x5568, 118637 }, + { 0x5569, 118642 }, + { 0x5841, 118647 }, + { 0x556C, 118652 }, + { 0x553C, 118657 }, + { 0x553E, 118662 }, + { 0x5543, 118667 }, + { 0x5545, 118672 }, + { 0x5546, 118677 }, + { 0x5761, 118686 }, + { 0x554D, 118691 }, + { 0x554F, 118696 }, + { 0x5551, 118701 }, + { 0x5763, 118706 }, + { 0x555B, 118711 }, + { 0x555F, 118716 }, + { 0x5560, 118721 }, + { 0x5561, 118726 }, + { 0x5563, 118731 }, + { 0x5564, 118736 }, + { 0x5566, 118741 }, + { 0x5767, 118746 }, + { 0x556B, 118751 }, + { 0x553B, 118756 }, + { 0x575F, 118761 }, + { 0x5541, 118766 }, + { 0x5544, 118771 }, + { 0x5548, 118777 }, + { 0x5760, 118782 }, + { 0x5549, 118787 }, + { 0x554A, 118794 }, + { 0x554C, 118801 }, + { 0x5562, 118806 }, + { 0x5765, 118811 }, + { 0x556A, 118816 }, + { 0x575E, 118823 }, + { 0x553D, 118828 }, + { 0x5540, 118833 }, + { 0x5565, 118838 }, + { 0x5580, 118843 }, + { 0x5582, 118846 }, + { 0x5583, 118851 }, + { 0x5581, 118856 }, + { 0x558A, 118861 }, + { 0x558B, 118864 }, + { 0x5597, 118876 }, + { 0x55D7, 118879 }, + { 0x55DB, 118882 }, + { 0x55DC, 118885 }, + { 0x5600, 118890 }, + { 0x5602, 118893 }, + { 0x5601, 118897 }, + { 0x5608, 118902 }, + { 0x560A, 118905 }, + { 0x588D, 118908 }, + { 0x560C, 118913 }, + { 0x560D, 118916 }, + { 0x561E, 118921 }, + { 0x5628, 118924 }, + { 0x5629, 118927 }, + { 0x562A, 118932 }, + { 0x562B, 118937 }, + { 0x562C, 118941 }, + { 0x562D, 118944 }, + { 0x5641, 118949 }, + { 0x565A, 118952 }, + { 0x565F, 118955 }, + { 0x5660, 118958 }, + { 0x5664, 118963 }, + { 0x5665, 118968 }, + { 0x5667, 118973 }, + { 0x5661, 118978 }, + { 0x5662, 118983 }, + { 0x5663, 118988 }, + { 0x5666, 118993 }, + { 0x5668, 118998 }, + { 0x5669, 119003 }, + { 0x566F, 119008 }, + { 0x5671, 119011 }, + { 0x5672, 119014 }, + { 0x5673, 119017 }, + { 0x56BB, 119020 }, + { 0x56BC, 119023 }, + { 0x58A6, 119027 }, + { 0x56C2, 119032 }, + { 0x56C3, 119035 }, + { 0x56CB, 119040 }, + { 0x56CF, 119043 }, + { 0x56CD, 119047 }, + { 0x56CE, 119052 }, + { 0x56CC, 119057 }, + { 0x56DC, 119061 }, + { 0x56DD, 119064 }, + { 0x56DE, 119068 }, + { 0x56DF, 119071 }, + { 0x56E5, 119075 }, + { 0x56F1, 119078 }, + { 0x56F2, 119081 }, + { 0x56F3, 119084 }, + { 0x56F9, 119087 }, + { 0x56F7, 119091 }, + { 0x56F8, 119100 }, + { 0x56F6, 119110 }, + { 0x56F5, 119115 }, + { 0x56F4, 119120 }, + { 0x56FA, 119124 }, + { 0x56FB, 119128 }, + { 0x56FD, 119134 }, + { 0x5701, 119137 }, + { 0x5778, 119142 }, + { 0x56FF, 119147 }, + { 0x5700, 119154 }, + { 0x56FE, 119159 }, + { 0x5706, 119164 }, + { 0x5707, 119167 }, + { 0x5708, 119171 }, + { 0x570A, 119174 }, + { 0x5709, 119178 }, + { 0x573D, 119183 }, + { 0x573E, 119186 }, + { 0x573F, 119190 }, + { 0x5743, 119196 }, + { 0x5744, 119199 }, + { 0x574A, 119204 }, + { 0x58B0, 119207 }, + { 0x53F6, 119214 }, + { 0x5751, 119217 }, + { 0x53F9, 119222 }, + { 0x53F8, 119229 }, + { 0x53FA, 119235 }, + { 0x53FB, 119240 }, + { 0x53F7, 119245 }, + { 0x5418, 119250 }, + { 0x541A, 119253 }, + { 0x541C, 119258 }, + { 0x541D, 119265 }, + { 0x541B, 119278 }, + { 0x5419, 119290 }, + { 0x5421, 119295 }, + { 0x57F1, 119298 }, + { 0x5424, 119304 }, + { 0x5425, 119307 }, + { 0x5427, 119312 }, + { 0x5433, 119315 }, + { 0x5436, 119318 }, + { 0x57F7, 119321 }, + { 0x5437, 119326 }, + { 0x543A, 119334 }, + { 0x543B, 119340 }, + { 0x543C, 119346 }, + { 0x543D, 119354 }, + { 0x5440, 119360 }, + { 0x5441, 119366 }, + { 0x5442, 119372 }, + { 0x5444, 119380 }, + { 0x5445, 119386 }, + { 0x5446, 119392 }, + { 0x5448, 119400 }, + { 0x544A, 119406 }, + { 0x544C, 119412 }, + { 0x5753, 119420 }, + { 0x543F, 119428 }, + { 0x5443, 119434 }, + { 0x5447, 119440 }, + { 0x5449, 119446 }, + { 0x544D, 119454 }, + { 0x5438, 119460 }, + { 0x543E, 119466 }, + { 0x544B, 119472 }, + { 0x5439, 119478 }, + { 0x544E, 119484 }, + { 0x544F, 119487 }, + { 0x5453, 119490 }, + { 0x5454, 119493 }, + { 0x57F9, 119496 }, + { 0x57F8, 119503 }, + { 0x5455, 119508 }, + { 0x5457, 119513 }, + { 0x5458, 119516 }, + { 0x545E, 119523 }, + { 0x5756, 119526 }, + { 0x545F, 119531 }, + { 0x5461, 119536 }, + { 0x5801, 119539 }, + { 0x5802, 119544 }, + { 0x5805, 119549 }, + { 0x5806, 119554 }, + { 0x5812, 119559 }, + { 0x5813, 119564 }, + { 0x5814, 119569 }, + { 0x5816, 119574 }, + { 0x57FC, 119580 }, + { 0x57FD, 119585 }, + { 0x57FE, 119592 }, + { 0x57FF, 119597 }, + { 0x5807, 119602 }, + { 0x5809, 119608 }, + { 0x580D, 119613 }, + { 0x580E, 119618 }, + { 0x580F, 119625 }, + { 0x5811, 119632 }, + { 0x5815, 119637 }, + { 0x5803, 119642 }, + { 0x5804, 119648 }, + { 0x5810, 119653 }, + { 0x57FB, 119658 }, + { 0x5800, 119663 }, + { 0x5808, 119668 }, + { 0x580A, 119673 }, + { 0x580B, 119678 }, + { 0x580C, 119685 }, + { 0x5463, 119690 }, + { 0x5464, 119693 }, + { 0x5497, 119696 }, + { 0x54CD, 119699 }, + { 0x5498, 119704 }, + { 0x5499, 119713 }, + { 0x549A, 119720 }, + { 0x54CA, 119727 }, + { 0x549C, 119732 }, + { 0x5759, 119737 }, + { 0x54A3, 119746 }, + { 0x54A4, 119751 }, + { 0x54A7, 119756 }, + { 0x54A8, 119761 }, + { 0x54A9, 119768 }, + { 0x54AA, 119773 }, + { 0x5829, 119781 }, + { 0x54AD, 119786 }, + { 0x582C, 119791 }, + { 0x54B1, 119798 }, + { 0x54B4, 119807 }, + { 0x54BD, 119814 }, + { 0x54BE, 119819 }, + { 0x54BF, 119826 }, + { 0x5832, 119831 }, + { 0x5833, 119836 }, + { 0x5834, 119843 }, + { 0x54C2, 119850 }, + { 0x54CB, 119855 }, + { 0x54CC, 119860 }, + { 0x549B, 119867 }, + { 0x549D, 119875 }, + { 0x549F, 119880 }, + { 0x54A0, 119885 }, + { 0x54A1, 119892 }, + { 0x54A2, 119897 }, + { 0x5825, 119904 }, + { 0x54A5, 119910 }, + { 0x54A6, 119917 }, + { 0x5826, 119922 }, + { 0x5827, 119930 }, + { 0x54AC, 119937 }, + { 0x582A, 119942 }, + { 0x582B, 119949 }, + { 0x54AE, 119956 }, + { 0x54AF, 119961 }, + { 0x54B2, 119968 }, + { 0x54B3, 119973 }, + { 0x54B6, 119980 }, + { 0x54B7, 119986 }, + { 0x54B8, 119995 }, + { 0x54BA, 120000 }, + { 0x54BB, 120005 }, + { 0x54BC, 120012 }, + { 0x582E, 120019 }, + { 0x582F, 120024 }, + { 0x5830, 120031 }, + { 0x54C0, 120036 }, + { 0x54C1, 120041 }, + { 0x54C3, 120048 }, + { 0x54C4, 120053 }, + { 0x54C5, 120058 }, + { 0x54C6, 120063 }, + { 0x54C8, 120070 }, + { 0x575A, 120075 }, + { 0x549E, 120080 }, + { 0x5828, 120087 }, + { 0x54AB, 120092 }, + { 0x54B0, 120098 }, + { 0x54B5, 120105 }, + { 0x5831, 120110 }, + { 0x54C7, 120115 }, + { 0x5835, 120120 }, + { 0x54C9, 120125 }, + { 0x5836, 120130 }, + { 0x5824, 120135 }, + { 0x54B9, 120140 }, + { 0x582D, 120145 }, + { 0x54D0, 120152 }, + { 0x54D1, 120155 }, + { 0x54D2, 120163 }, + { 0x54D3, 120166 }, + { 0x54D5, 120175 }, + { 0x54D6, 120178 }, + { 0x54DB, 120181 }, + { 0x54E4, 120184 }, + { 0x54E5, 120187 }, + { 0x54E6, 120192 }, + { 0x575C, 120197 }, + { 0x54F8, 120200 }, + { 0x54FD, 120203 }, + { 0x583A, 120207 }, + { 0x54F9, 120213 }, + { 0x54FA, 120218 }, + { 0x54FB, 120226 }, + { 0x54FC, 120231 }, + { 0x54FE, 120238 }, + { 0x5501, 120241 }, + { 0x583B, 120247 }, + { 0x54FF, 120254 }, + { 0x5500, 120261 }, + { 0x5502, 120266 }, + { 0x5503, 120269 }, + { 0x5504, 120272 }, + { 0x5505, 120277 }, + { 0x550C, 120280 }, + { 0x5526, 120283 }, + { 0x5528, 120286 }, + { 0x5527, 120290 }, + { 0x552A, 120294 }, + { 0x5529, 120298 }, + { 0x552D, 120309 }, + { 0x5536, 120312 }, + { 0x556D, 120315 }, + { 0x556E, 120318 }, + { 0x556F, 120323 }, + { 0x5575, 120326 }, + { 0x5576, 120329 }, + { 0x5577, 120335 }, + { 0x5578, 120338 }, + { 0x5579, 120343 }, + { 0x574F, 120348 }, + { 0x5584, 120352 }, + { 0x5585, 120355 }, + { 0x558C, 120358 }, + { 0x558D, 120361 }, + { 0x558E, 120364 }, + { 0x558F, 120369 }, + { 0x5590, 120372 }, + { 0x5591, 120375 }, + { 0x5592, 120379 }, + { 0x5593, 120382 }, + { 0x5594, 120385 }, + { 0x55D2, 120390 }, + { 0x55D3, 120393 }, + { 0x55D4, 120398 }, + { 0x55D5, 120401 }, + { 0x55D6, 120406 }, + { 0x55D8, 120413 }, + { 0x55DD, 120416 }, + { 0x5887, 120419 }, + { 0x55F1, 120425 }, + { 0x55DE, 120429 }, + { 0x55E3, 120434 }, + { 0x55E4, 120441 }, + { 0x55E8, 120446 }, + { 0x55E9, 120451 }, + { 0x55EB, 120458 }, + { 0x55EC, 120465 }, + { 0x55ED, 120470 }, + { 0x55EE, 120475 }, + { 0x55DF, 120482 }, + { 0x5889, 120487 }, + { 0x588A, 120492 }, + { 0x588B, 120497 }, + { 0x576B, 120506 }, + { 0x5888, 120511 }, + { 0x55E0, 120516 }, + { 0x576A, 120521 }, + { 0x55E1, 120528 }, + { 0x55E2, 120534 }, + { 0x55E5, 120540 }, + { 0x55E6, 120545 }, + { 0x55E7, 120550 }, + { 0x55EF, 120557 }, + { 0x588C, 120564 }, + { 0x55F0, 120569 }, + { 0x55EA, 120574 }, + { 0x55F5, 120579 }, + { 0x5769, 120583 }, + { 0x55F4, 120589 }, + { 0x55F2, 120593 }, + { 0x55F3, 120598 }, + { 0x55F6, 120603 }, + { 0x55FB, 120606 }, + { 0x55FC, 120609 }, + { 0x55FD, 120612 }, + { 0x55FE, 120615 }, + { 0x55FF, 120620 }, + { 0x5603, 120628 }, + { 0x5604, 120631 }, + { 0x5605, 120634 }, + { 0x5609, 120637 }, + { 0x560B, 120640 }, + { 0x560E, 120643 }, + { 0x560F, 120646 }, + { 0x561F, 120650 }, + { 0x576E, 120653 }, + { 0x5626, 120656 }, + { 0x5625, 120659 }, + { 0x562E, 120663 }, + { 0x562F, 120666 }, + { 0x5631, 120669 }, + { 0x5630, 120677 }, + { 0x576F, 120683 }, + { 0x5643, 120686 }, + { 0x564A, 120689 }, + { 0x5649, 120694 }, + { 0x5644, 120698 }, + { 0x5646, 120704 }, + { 0x5647, 120710 }, + { 0x5648, 120721 }, + { 0x5645, 120727 }, + { 0x564B, 120733 }, + { 0x564C, 120738 }, + { 0x565B, 120746 }, + { 0x565C, 120749 }, + { 0x565D, 120752 }, + { 0x5670, 120755 }, + { 0x5675, 120758 }, + { 0x5688, 120761 }, + { 0x589B, 120765 }, + { 0x5687, 120771 }, + { 0x5676, 120776 }, + { 0x5677, 120781 }, + { 0x589C, 120786 }, + { 0x5679, 120791 }, + { 0x567D, 120796 }, + { 0x5682, 120801 }, + { 0x5683, 120806 }, + { 0x5684, 120811 }, + { 0x5685, 120816 }, + { 0x5678, 120821 }, + { 0x5776, 120826 }, + { 0x567A, 120832 }, + { 0x567B, 120837 }, + { 0x567C, 120842 }, + { 0x567E, 120847 }, + { 0x567F, 120852 }, + { 0x589D, 120857 }, + { 0x5681, 120864 }, + { 0x5686, 120869 }, + { 0x5680, 120874 }, + { 0x589E, 120879 }, + { 0x5674, 120884 }, + { 0x5689, 120888 }, + { 0x568A, 120891 }, + { 0x568C, 120897 }, + { 0x568D, 120900 }, + { 0x569A, 120903 }, + { 0x569B, 120906 }, + { 0x58A0, 120910 }, + { 0x569C, 120915 }, + { 0x569D, 120926 }, + { 0x58A3, 120937 }, + { 0x58A1, 120942 }, + { 0x58A2, 120947 }, + { 0x56B7, 120952 }, + { 0x56B8, 120955 }, + { 0x56BD, 120961 }, + { 0x56C4, 120964 }, + { 0x56C7, 120967 }, + { 0x56C9, 120970 }, + { 0x56D0, 120973 }, + { 0x56D1, 120976 }, + { 0x56D2, 120987 }, + { 0x56D3, 120991 }, + { 0x56D4, 120994 }, + { 0x56D9, 120999 }, + { 0x56D5, 121004 }, + { 0x56D6, 121009 }, + { 0x56D7, 121014 }, + { 0x56D8, 121019 }, + { 0x56DB, 121024 }, + { 0x5777, 121027 }, + { 0x56E0, 121030 }, + { 0x56E1, 121033 }, + { 0x56E3, 121036 }, + { 0x56E4, 121041 }, + { 0x56E2, 121052 }, + { 0x56E7, 121057 }, + { 0x56E8, 121060 }, + { 0x58A8, 121063 }, + { 0x58A9, 121069 }, + { 0x56E9, 121075 }, + { 0x56EA, 121078 }, + { 0x570B, 121086 }, + { 0x570C, 121089 }, + { 0x570D, 121096 }, + { 0x570E, 121103 }, + { 0x570F, 121108 }, + { 0x5711, 121113 }, + { 0x5713, 121118 }, + { 0x5712, 121125 }, + { 0x58AB, 121132 }, + { 0x5710, 121137 }, + { 0x58AA, 121142 }, + { 0x5714, 121146 }, + { 0x5715, 121149 }, + { 0x5717, 121152 }, + { 0x5718, 121155 }, + { 0x572C, 121160 }, + { 0x571C, 121167 }, + { 0x5720, 121172 }, + { 0x5721, 121177 }, + { 0x5723, 121182 }, + { 0x5725, 121187 }, + { 0x5728, 121192 }, + { 0x572B, 121197 }, + { 0x572D, 121202 }, + { 0x571A, 121207 }, + { 0x571B, 121212 }, + { 0x571D, 121217 }, + { 0x571F, 121222 }, + { 0x5722, 121227 }, + { 0x5724, 121232 }, + { 0x58AE, 121237 }, + { 0x5726, 121242 }, + { 0x5727, 121247 }, + { 0x5729, 121252 }, + { 0x571E, 121257 }, + { 0x572A, 121263 }, + { 0x58AC, 121268 }, + { 0x572E, 121273 }, + { 0x5719, 121278 }, + { 0x58AD, 121283 }, + { 0x5731, 121288 }, + { 0x5732, 121291 }, + { 0x5733, 121296 }, + { 0x5734, 121301 }, + { 0x5735, 121306 }, + { 0x573A, 121311 }, + { 0x573B, 121314 }, + { 0x573C, 121319 }, + { 0x58AF, 121322 }, + { 0x5740, 121325 }, + { 0x5742, 121328 }, + { 0x5745, 121331 }, + { 0x5746, 121334 }, + { 0x5747, 121337 }, + { 0x5748, 121342 }, + { 0x574B, 121345 }, + { 0x574C, 121348 }, + { 0x58B1, 121353 }, + { 0x574E, 121360 }, + { 0x5409, 121363 }, + { 0x540B, 121366 }, + { 0x5752, 121369 }, + { 0x540C, 121374 }, + { 0x5413, 121379 }, + { 0x5414, 121382 }, + { 0x5415, 121385 }, + { 0x541E, 121390 }, + { 0x5422, 121393 }, + { 0x5434, 121396 }, + { 0x5754, 121399 }, + { 0x5456, 121402 }, + { 0x57FA, 121405 }, + { 0x5459, 121410 }, + { 0x5755, 121413 }, + { 0x5460, 121418 }, + { 0x5465, 121421 }, + { 0x5466, 121424 }, + { 0x5467, 121428 }, + { 0x5468, 121433 }, + { 0x5469, 121436 }, + { 0x5474, 121439 }, + { 0x5475, 121442 }, + { 0x547E, 121445 }, + { 0x5480, 121448 }, + { 0x581A, 121451 }, + { 0x5481, 121456 }, + { 0x5482, 121459 }, + { 0x5483, 121464 }, + { 0x5484, 121471 }, + { 0x5485, 121480 }, + { 0x5489, 121485 }, + { 0x548A, 121490 }, + { 0x548F, 121496 }, + { 0x5491, 121501 }, + { 0x5492, 121506 }, + { 0x5823, 121511 }, + { 0x5493, 121516 }, + { 0x5494, 121521 }, + { 0x5486, 121526 }, + { 0x5757, 121531 }, + { 0x548B, 121536 }, + { 0x548E, 121542 }, + { 0x5490, 121547 }, + { 0x5758, 121554 }, + { 0x5487, 121559 }, + { 0x5488, 121565 }, + { 0x548C, 121572 }, + { 0x548D, 121577 }, + { 0x581C, 121583 }, + { 0x581E, 121589 }, + { 0x5820, 121595 }, + { 0x5822, 121601 }, + { 0x581B, 121607 }, + { 0x581D, 121613 }, + { 0x581F, 121620 }, + { 0x5821, 121626 }, + { 0x54CE, 121632 }, + { 0x5837, 121635 }, + { 0x54CF, 121641 }, + { 0x54D7, 121646 }, + { 0x54D9, 121649 }, + { 0x54D8, 121654 }, + { 0x54DA, 121658 }, + { 0x54DC, 121663 }, + { 0x575B, 121666 }, + { 0x54E8, 121669 }, + { 0x54E9, 121672 }, + { 0x54EA, 121676 }, + { 0x54EB, 121679 }, + { 0x54EE, 121686 }, + { 0x54EF, 121693 }, + { 0x54ED, 121698 }, + { 0x54EC, 121703 }, + { 0x54F1, 121709 }, + { 0x54F5, 121712 }, + { 0x54F3, 121716 }, + { 0x5839, 121721 }, + { 0x54F4, 121728 }, + { 0x54F2, 121733 }, + { 0x5506, 121738 }, + { 0x5518, 121741 }, + { 0x5519, 121744 }, + { 0x551D, 121749 }, + { 0x551A, 121754 }, + { 0x551C, 121759 }, + { 0x551B, 121764 }, + { 0x551E, 121769 }, + { 0x575D, 121772 }, + { 0x5522, 121775 }, + { 0x5523, 121778 }, + { 0x5524, 121784 }, + { 0x5533, 121790 }, + { 0x5570, 121793 }, + { 0x5571, 121796 }, + { 0x5572, 121799 }, + { 0x5573, 121802 }, + { 0x5574, 121805 }, + { 0x557A, 121810 }, + { 0x557B, 121813 }, + { 0x5587, 121816 }, + { 0x55DA, 121819 }, + { 0x5606, 121822 }, + { 0x576C, 121825 }, + { 0x5612, 121828 }, + { 0x5616, 121831 }, + { 0x5617, 121836 }, + { 0x588E, 121845 }, + { 0x588F, 121852 }, + { 0x5613, 121859 }, + { 0x5615, 121864 }, + { 0x5614, 121869 }, + { 0x5618, 121874 }, + { 0x5620, 121879 }, + { 0x5622, 121882 }, + { 0x5621, 121888 }, + { 0x5623, 121892 }, + { 0x5627, 121897 }, + { 0x5770, 121900 }, + { 0x5642, 121903 }, + { 0x56B5, 121906 }, + { 0x56B4, 121914 }, + { 0x5773, 121918 }, + { 0x5775, 121924 }, + { 0x568E, 121927 }, + { 0x568F, 121930 }, + { 0x5695, 121935 }, + { 0x5696, 121940 }, + { 0x5692, 121947 }, + { 0x5690, 121952 }, + { 0x5694, 121957 }, + { 0x5691, 121962 }, + { 0x5693, 121967 }, + { 0x5697, 121972 }, + { 0x589F, 121975 }, + { 0x569F, 121979 }, + { 0x56A3, 121982 }, + { 0x56A4, 121985 }, + { 0x56A5, 121990 }, + { 0x56A6, 121995 }, + { 0x56A7, 121998 }, + { 0x56A8, 122003 }, + { 0x56AA, 122008 }, + { 0x56AB, 122013 }, + { 0x56AC, 122018 }, + { 0x56AD, 122023 }, + { 0x56AF, 122029 }, + { 0x56B0, 122034 }, + { 0x56B1, 122039 }, + { 0x56A9, 122044 }, + { 0x56AE, 122049 }, + { 0x56B3, 122054 }, + { 0x56B5, 122057 }, + { 0x56B4, 122065 }, + { 0x56B9, 122069 }, + { 0x58A5, 122072 }, + { 0x58A4, 122079 }, + { 0x56BE, 122086 }, + { 0x56BF, 122089 }, + { 0x56C0, 122095 }, + { 0x56C5, 122098 }, + { 0x56CA, 122101 }, + { 0x56DA, 122104 }, + { 0x58A7, 122107 }, + { 0x56E6, 122112 }, + { 0x56FC, 122115 }, + { 0x5703, 122118 }, + { 0x5705, 122121 }, + { 0x5704, 122126 }, + { 0x5716, 122131 }, + { 0x5737, 122134 }, + { 0x5736, 122137 }, + { 0x5741, 122140 }, + { 0x5749, 122143 }, + { 0x540A, 122146 }, + { 0x5412, 122149 }, + { 0x5416, 122152 }, + { 0x5417, 122155 }, + { 0x5426, 122158 }, + { 0x5428, 122161 }, + { 0x5431, 122164 }, + { 0x5432, 122167 }, + { 0x5450, 122172 }, + { 0x5451, 122175 }, + { 0x5462, 122178 }, + { 0x547F, 122181 }, + { 0x5819, 122184 }, + { 0x54D4, 122188 }, + { 0x54E7, 122191 }, + { 0x54F0, 122194 }, + { 0x5507, 122197 }, + { 0x5707, 122200 }, + { 0x557F, 122203 }, + { 0x5586, 122206 }, + { 0x5598, 122209 }, + { 0x5599, 122212 }, + { 0x559A, 122217 }, + { 0x559B, 122226 }, + { 0x559C, 122233 }, + { 0x55C5, 122240 }, + { 0x55C6, 122245 }, + { 0x55C7, 122252 }, + { 0x559D, 122261 }, + { 0x559E, 122266 }, + { 0x55A1, 122271 }, + { 0x55A3, 122276 }, + { 0x55A4, 122281 }, + { 0x5768, 122286 }, + { 0x55A8, 122291 }, + { 0x55AA, 122296 }, + { 0x55AC, 122303 }, + { 0x55AD, 122308 }, + { 0x55AE, 122315 }, + { 0x55AF, 122322 }, + { 0x55B6, 122327 }, + { 0x55B8, 122332 }, + { 0x55B9, 122337 }, + { 0x55BB, 122344 }, + { 0x55C4, 122349 }, + { 0x55C8, 122360 }, + { 0x55C9, 122367 }, + { 0x5842, 122372 }, + { 0x559F, 122379 }, + { 0x55A0, 122386 }, + { 0x55A2, 122391 }, + { 0x55A5, 122396 }, + { 0x55A6, 122401 }, + { 0x55A7, 122406 }, + { 0x55A9, 122413 }, + { 0x55AB, 122418 }, + { 0x55B0, 122424 }, + { 0x55B1, 122429 }, + { 0x55B2, 122434 }, + { 0x55B3, 122439 }, + { 0x55B7, 122448 }, + { 0x55BC, 122453 }, + { 0x55C1, 122460 }, + { 0x55C2, 122465 }, + { 0x55CA, 122470 }, + { 0x55B5, 122475 }, + { 0x55BA, 122480 }, + { 0x55BF, 122485 }, + { 0x55C0, 122490 }, + { 0x55C3, 122497 }, + { 0x55B4, 122502 }, + { 0x55BD, 122507 }, + { 0x55BE, 122516 }, + { 0x55CB, 122524 }, + { 0x55CC, 122528 }, + { 0x55CF, 122531 }, + { 0x55D0, 122535 }, + { 0x55CD, 122543 }, + { 0x55CE, 122548 }, + { 0x55F7, 122555 }, + { 0x55F8, 122558 }, + { 0x55FA, 122563 }, + { 0x55F9, 122567 }, + { 0x5607, 122572 }, + { 0x5619, 122575 }, + { 0x561D, 122578 }, + { 0x561A, 122582 }, + { 0x561B, 122587 }, + { 0x561C, 122594 }, + { 0x576D, 122599 }, + { 0x5624, 122604 }, + { 0x5640, 122607 }, + { 0x564D, 122610 }, + { 0x564F, 122613 }, + { 0x5654, 122619 }, + { 0x5655, 122625 }, + { 0x5657, 122631 }, + { 0x5650, 122637 }, + { 0x5651, 122643 }, + { 0x5652, 122649 }, + { 0x5653, 122656 }, + { 0x5656, 122662 }, + { 0x564E, 122668 }, + { 0x5658, 122674 }, + { 0x5659, 122680 }, + { 0x565E, 122687 }, + { 0x5774, 122690 }, + { 0x566A, 122694 }, + { 0x566C, 122697 }, + { 0x566D, 122702 }, + { 0x566B, 122707 }, + { 0x566E, 122712 }, + { 0x5698, 122717 }, + { 0x5699, 122720 }, + { 0x569E, 122723 }, + { 0x56A0, 122726 }, + { 0x56B6, 122729 }, + { 0x56C1, 122732 }, + { 0x56C6, 122735 }, + { 0x5702, 122738 }, + { 0x572F, 122741 }, + { 0x5730, 122744 }, + { 0x5739, 122749 }, + { 0x574D, 122752 }, + { 0x541F, 122755 }, + { 0x5423, 122758 }, + { 0x57F3, 122761 }, + { 0x57F4, 122766 }, + { 0x57F2, 122771 }, + { 0x54DD, 122776 }, + { 0x5508, 122779 }, + { 0x557C, 122782 }, + { 0x557E, 122785 }, + { 0x557D, 122797 }, + { 0x5588, 122807 }, + { 0x5589, 122810 }, + { 0x5595, 122815 }, + { 0x5596, 122818 }, + { 0x55D1, 122821 }, + { 0x55D9, 122824 }, + { 0x5610, 122827 }, + { 0x5611, 122830 }, + { 0x5632, 122833 }, + { 0x5898, 122836 }, + { 0x5899, 122841 }, + { 0x5633, 122848 }, + { 0x5772, 122853 }, + { 0x5893, 122858 }, + { 0x5637, 122863 }, + { 0x5638, 122871 }, + { 0x563E, 122876 }, + { 0x5634, 122883 }, + { 0x5635, 122888 }, + { 0x5771, 122895 }, + { 0x5890, 122900 }, + { 0x5636, 122906 }, + { 0x5892, 122911 }, + { 0x5639, 122916 }, + { 0x5897, 122921 }, + { 0x563A, 122928 }, + { 0x563B, 122933 }, + { 0x563C, 122941 }, + { 0x563D, 122948 }, + { 0x563F, 122957 }, + { 0x5891, 122962 }, + { 0x5896, 122967 }, + { 0x5894, 122972 }, + { 0x589A, 122977 }, + { 0x5895, 122982 }, + { 0x568B, 122987 }, + { 0x56A1, 122990 }, + { 0x56B2, 122993 }, + { 0x56BA, 122996 }, + { 0x56C8, 122999 }, + { 0x5738, 123002 }, + { 0x54DE, 123005 }, + { 0x5838, 123008 }, + { 0x54DF, 123013 }, + { 0x5843, 123018 }, + { 0x5844, 123021 }, + { 0x5845, 123024 }, + { 0x5846, 123027 }, + { 0x5847, 123030 }, + { 0x5848, 123033 }, + { 0x5849, 123036 }, + { 0x584A, 123039 }, + { 0x584B, 123045 }, + { 0x584C, 123048 }, + { 0x584D, 123053 }, + { 0x584E, 123056 }, + { 0x584F, 123059 }, + { 0x5850, 123062 }, + { 0x5851, 123065 }, + { 0x5852, 123068 }, + { 0x5853, 123071 }, + { 0x5854, 123074 }, + { 0x5855, 123077 }, + { 0x5856, 123080 }, + { 0x5857, 123083 }, + { 0x5858, 123086 }, + { 0x5859, 123089 }, + { 0x585A, 123092 }, + { 0x585B, 123095 }, + { 0x585C, 123098 }, + { 0x585D, 123101 }, + { 0x585E, 123104 }, + { 0x585F, 123107 }, + { 0x5860, 123110 }, + { 0x5864, 123115 }, + { 0x5861, 123122 }, + { 0x5862, 123127 }, + { 0x5863, 123134 }, + { 0x5865, 123143 }, + { 0x5866, 123146 }, + { 0x5867, 123149 }, + { 0x5868, 123152 }, + { 0x5869, 123155 }, + { 0x586A, 123158 }, + { 0x586B, 123161 }, + { 0x586C, 123164 }, + { 0x586D, 123167 }, + { 0x586E, 123170 }, + { 0x586F, 123173 }, + { 0x5874, 123176 }, + { 0x5876, 123181 }, + { 0x5877, 123186 }, + { 0x5878, 123191 }, + { 0x5870, 123196 }, + { 0x5871, 123201 }, + { 0x5873, 123206 }, + { 0x5875, 123211 }, + { 0x5872, 123216 }, + { 0x5879, 123223 }, + { 0x587A, 123228 }, + { 0x587B, 123231 }, + { 0x587D, 123234 }, + { 0x5880, 123239 }, + { 0x5883, 123244 }, + { 0x587C, 123249 }, + { 0x587E, 123254 }, + { 0x587F, 123259 }, + { 0x5881, 123265 }, + { 0x5882, 123274 }, + { 0x5884, 123281 }, + { 0x5885, 123286 }, + { 0x5886, 123289 }, + { 0x56A2, 123292 }, + { 0x57DB, 123295 }, + { 0x57DC, 123302 }, + { 0x57C9, 123309 }, + { 0x57AE, 123314 }, + { 0x57DE, 123319 }, + { 0x57D2, 123325 }, + { 0x578F, 123330 }, + { 0x5798, 123335 }, + { 0x57A6, 123340 }, + { 0x57D4, 123345 }, + { 0x57D7, 123351 }, + { 0x57D9, 123359 }, + { 0x57DA, 123365 }, + { 0x57DD, 123371 }, + { 0x578B, 123377 }, + { 0x57E5, 123382 }, + { 0x577E, 123389 }, + { 0x57C8, 123394 }, + { 0x5785, 123400 }, + { 0x5794, 123405 }, + { 0x57A2, 123410 }, + { 0x57BA, 123415 }, + { 0x577A, 123422 }, + { 0x57C4, 123427 }, + { 0x57CA, 123433 }, + { 0x57AF, 123438 }, + { 0x57D3, 123443 }, + { 0x5790, 123448 }, + { 0x5799, 123453 }, + { 0x579D, 123458 }, + { 0x57A7, 123463 }, + { 0x57D5, 123468 }, + { 0x57D8, 123474 }, + { 0x578A, 123482 }, + { 0x57E4, 123487 }, + { 0x577D, 123494 }, + { 0x57C7, 123499 }, + { 0x57CE, 123505 }, + { 0x57CF, 123510 }, + { 0x57B3, 123517 }, + { 0x5784, 123522 }, + { 0x5793, 123527 }, + { 0x579C, 123532 }, + { 0x57A1, 123537 }, + { 0x57AB, 123542 }, + { 0x57D6, 123547 }, + { 0x5789, 123553 }, + { 0x57E3, 123558 }, + { 0x577C, 123565 }, + { 0x57C6, 123570 }, + { 0x57CC, 123576 }, + { 0x57CD, 123581 }, + { 0x57B2, 123588 }, + { 0x5783, 123593 }, + { 0x5792, 123598 }, + { 0x579B, 123603 }, + { 0x57A0, 123608 }, + { 0x57AA, 123613 }, + { 0x57B6, 123618 }, + { 0x57B8, 123625 }, + { 0x57B9, 123633 }, + { 0x57B7, 123641 }, + { 0x578E, 123648 }, + { 0x57E8, 123653 }, + { 0x5781, 123660 }, + { 0x5788, 123665 }, + { 0x5797, 123670 }, + { 0x57A5, 123675 }, + { 0x57C0, 123680 }, + { 0x57C3, 123687 }, + { 0x57C1, 123695 }, + { 0x57C2, 123702 }, + { 0x578D, 123709 }, + { 0x57E7, 123714 }, + { 0x5780, 123721 }, + { 0x5787, 123726 }, + { 0x5796, 123731 }, + { 0x57A4, 123736 }, + { 0x57BE, 123741 }, + { 0x57BF, 123748 }, + { 0x578C, 123755 }, + { 0x57E6, 123760 }, + { 0x577F, 123767 }, + { 0x5786, 123772 }, + { 0x5795, 123777 }, + { 0x57A3, 123782 }, + { 0x57BC, 123787 }, + { 0x57BD, 123795 }, + { 0x57BB, 123803 }, + { 0x57AD, 123810 }, + { 0x57AC, 123818 }, + { 0x577B, 123826 }, + { 0x57C5, 123831 }, + { 0x57CB, 123837 }, + { 0x57B0, 123842 }, + { 0x57B1, 123847 }, + { 0x5782, 123854 }, + { 0x5791, 123859 }, + { 0x579A, 123864 }, + { 0x579E, 123869 }, + { 0x579F, 123874 }, + { 0x57A8, 123881 }, + { 0x57A9, 123886 }, + { 0x57B4, 123893 }, + { 0x57B5, 123900 }, + { 0x57DF, 123907 }, + { 0x57E0, 123913 }, + { 0x57E2, 123919 }, + { 0x57E1, 123924 }, + { 0x57D1, 123929 }, + { 0x57D0, 123933 }, + { 0x57E9, 123937 }, + { 0x57EB, 123944 }, + { 0x57EC, 123949 }, + { 0x57ED, 123954 }, + { 0x57EA, 123959 }, + { 0x8EE6, 123964 }, + { 0x2021, 123966 }, + { 0x201F, 123972 }, + { 0x2019, 123980 }, + { 0x201C, 123988 }, + { 0x2020, 123996 }, + { 0x201E, 124002 }, + { 0x2018, 124010 }, + { 0x201B, 124018 }, + { 0x2022, 124026 }, + { 0x2015, 124033 }, + { 0x201D, 124040 }, + { 0x2023, 124046 }, + { 0x2016, 124053 }, + { 0x2017, 124060 }, + { 0x201A, 124066 }, + { 0x0067, 124072 }, + { 0x1F88, 124073 }, + { 0x94A6, 124075 }, + { 0x1DF8, 124077 }, + { 0x1DEA, 124081 }, + { 0x253F, 124083 }, + { 0x96B8, 124087 }, + { 0x1DFE, 124094 }, + { 0x1E09, 124098 }, + { 0x1E0A, 124103 }, + { 0x9397, 124108 }, + { 0x938F, 124114 }, + { 0x939B, 124120 }, + { 0x1E0C, 124126 }, + { 0x1E36, 124131 }, + { 0x9393, 124136 }, + { 0x940D, 124142 }, + { 0x2534, 124147 }, + { 0x939F, 124152 }, + { 0x1E4C, 124157 }, + { 0x2733, 124163 }, + { 0x9423, 124166 }, + { 0x27B5, 124171 }, + { 0x93CF, 124176 }, + { 0x93CB, 124179 }, + { 0x1E40, 124183 }, + { 0x9409, 124186 }, + { 0x2A0A, 124192 }, + { 0x1E3A, 124194 }, + { 0x1E2A, 124197 }, + { 0x1E21, 124200 }, + { 0x9222, 124203 }, + { 0x2537, 124205 }, + { 0x1E06, 124208 }, + { 0x2585, 124211 }, + { 0x258D, 124218 }, + { 0x259B, 124225 }, + { 0x2591, 124236 }, + { 0x2581, 124247 }, + { 0x2589, 124254 }, + { 0x1E1A, 124261 }, + { 0x1E19, 124266 }, + { 0x93C3, 124271 }, + { 0x9405, 124274 }, + { 0x241D, 124277 }, + { 0x93C7, 124280 }, + { 0x93D3, 124283 }, + { 0x2818, 124286 }, + { 0x93BF, 124292 }, + { 0x278F, 124295 }, + { 0x279F, 124298 }, + { 0x93B3, 124303 }, + { 0x27C9, 124309 }, + { 0x27CA, 124316 }, + { 0x93BB, 124323 }, + { 0x93B7, 124330 }, + { 0x27A7, 124336 }, + { 0x93AF, 124343 }, + { 0x93AB, 124349 }, + { 0x27AD, 124355 }, + { 0x2799, 124363 }, + { 0x27B1, 124367 }, + { 0x2779, 124371 }, + { 0x8FDD, 124375 }, + { 0x2A04, 124377 }, + { 0x1D89, 124379 }, + { 0x1EB0, 124381 }, + { 0x8EE5, 124382 }, + { 0x7E43, 124384 }, + { 0x7E3E, 124387 }, + { 0x7E3F, 124389 }, + { 0x7E40, 124391 }, + { 0x935F, 124393 }, + { 0x9359, 124398 }, + { 0x934C, 124403 }, + { 0x932E, 124407 }, + { 0x9338, 124411 }, + { 0x9353, 124415 }, + { 0x1D96, 124418 }, + { 0x8F39, 124420 }, + { 0x95E4, 124421 }, + { 0x3F38, 124422 }, + { 0x3FCF, 124425 }, + { 0x3FD3, 124428 }, + { 0x3FD2, 124431 }, + { 0x3FCD, 124434 }, + { 0x3F07, 124437 }, + { 0x3F54, 124440 }, + { 0x3F58, 124444 }, + { 0x3F34, 124448 }, + { 0x3F01, 124452 }, + { 0x3F04, 124455 }, + { 0x3F13, 124458 }, + { 0x3F05, 124460 }, + { 0x3F0A, 124462 }, + { 0x3F0F, 124465 }, + { 0x3F0B, 124468 }, + { 0x3F0E, 124471 }, + { 0x3F0D, 124474 }, + { 0x3F12, 124477 }, + { 0x3F09, 124480 }, + { 0x3F11, 124483 }, + { 0x3F10, 124486 }, + { 0x3F0C, 124489 }, + { 0x3F39, 124492 }, + { 0x3F3A, 124495 }, + { 0x3F3B, 124500 }, + { 0x3F3C, 124505 }, + { 0x3F3D, 124510 }, + { 0x3F3E, 124515 }, + { 0x3F3F, 124520 }, + { 0x3F40, 124525 }, + { 0x3F41, 124530 }, + { 0x3F42, 124535 }, + { 0x3F43, 124540 }, + { 0x3F44, 124545 }, + { 0x3F45, 124550 }, + { 0x3F46, 124555 }, + { 0x3F47, 124560 }, + { 0x3F48, 124565 }, + { 0x3F49, 124570 }, + { 0x3F4A, 124575 }, + { 0x3F4B, 124580 }, + { 0x3F4C, 124585 }, + { 0x3F4D, 124590 }, + { 0x3F4E, 124595 }, + { 0x3F4F, 124600 }, + { 0x3F50, 124605 }, + { 0x3F51, 124610 }, + { 0x3F52, 124615 }, + { 0x3F53, 124620 }, + { 0x3F1A, 124625 }, + { 0x3F1B, 124630 }, + { 0x3F1C, 124635 }, + { 0x3F1D, 124640 }, + { 0x3F1E, 124645 }, + { 0x3F1F, 124650 }, + { 0x3F20, 124655 }, + { 0x3F21, 124660 }, + { 0x3F22, 124665 }, + { 0x3F23, 124670 }, + { 0x3F24, 124675 }, + { 0x3F25, 124680 }, + { 0x3F26, 124685 }, + { 0x3F27, 124690 }, + { 0x3F28, 124695 }, + { 0x3F29, 124700 }, + { 0x3F2A, 124705 }, + { 0x3F2B, 124710 }, + { 0x3F2C, 124715 }, + { 0x3F2D, 124720 }, + { 0x3F2E, 124725 }, + { 0x3F2F, 124730 }, + { 0x3F30, 124735 }, + { 0x3F31, 124740 }, + { 0x3F32, 124745 }, + { 0x3F33, 124750 }, + { 0x3FCE, 124755 }, + { 0x3F56, 124758 }, + { 0x3F59, 124762 }, + { 0x3F36, 124766 }, + { 0x3F02, 124770 }, + { 0x3F57, 124773 }, + { 0x3FD1, 124775 }, + { 0x3EFD, 124778 }, + { 0x3F16, 124781 }, + { 0x3FD0, 124784 }, + { 0x3EFC, 124786 }, + { 0x3EFE, 124789 }, + { 0x3F35, 124792 }, + { 0x3F08, 124795 }, + { 0x3F03, 124797 }, + { 0x3F18, 124799 }, + { 0x3F55, 124802 }, + { 0x3EFF, 124805 }, + { 0x3F15, 124807 }, + { 0x3EFB, 124810 }, + { 0x3F14, 124813 }, + { 0x3F00, 124815 }, + { 0x3F37, 124817 }, + { 0x3F19, 124820 }, + { 0x3EFA, 124823 }, + { 0x3F17, 124826 }, + { 0x3F06, 124829 }, + { 0x1E91, 124831 }, + { 0x91DF, 124833 }, + { 0x9035, 124835 }, + { 0x3F5B, 124836 }, + { 0x3FD9, 124840 }, + { 0x3FD4, 124843 }, + { 0x3F5C, 124847 }, + { 0x3FDA, 124851 }, + { 0x3F99, 124854 }, + { 0x3FB8, 124857 }, + { 0x3FBD, 124861 }, + { 0x3FCC, 124865 }, + { 0x3FC0, 124869 }, + { 0x3FC5, 124873 }, + { 0x3FB9, 124877 }, + { 0x3FBC, 124881 }, + { 0x3FCA, 124885 }, + { 0x3FC3, 124889 }, + { 0x3FC1, 124893 }, + { 0x3FC7, 124897 }, + { 0x3FC8, 124901 }, + { 0x3FBA, 124905 }, + { 0x3FBF, 124909 }, + { 0x3FCB, 124913 }, + { 0x3FC4, 124917 }, + { 0x3FC9, 124921 }, + { 0x3FC2, 124925 }, + { 0x3FC6, 124929 }, + { 0x3FBB, 124933 }, + { 0x3FBE, 124937 }, + { 0x3FAE, 124941 }, + { 0x3FB1, 124945 }, + { 0x3FB7, 124949 }, + { 0x3FB0, 124953 }, + { 0x3FAA, 124957 }, + { 0x3F9D, 124961 }, + { 0x3FAB, 124965 }, + { 0x3FA2, 124969 }, + { 0x3F9A, 124973 }, + { 0x3FA0, 124977 }, + { 0x3FB3, 124981 }, + { 0x3FB4, 124985 }, + { 0x3FB6, 124989 }, + { 0x3FB5, 124993 }, + { 0x3FAF, 124997 }, + { 0x3FAD, 125001 }, + { 0x3FA6, 125005 }, + { 0x3FB2, 125009 }, + { 0x3FAC, 125013 }, + { 0x3F9C, 125017 }, + { 0x3F9E, 125021 }, + { 0x3F9F, 125025 }, + { 0x3FA9, 125029 }, + { 0x3FA4, 125033 }, + { 0x3FA5, 125037 }, + { 0x3F9B, 125041 }, + { 0x3FA1, 125045 }, + { 0x3FA3, 125049 }, + { 0x3FA8, 125053 }, + { 0x3FA7, 125057 }, + { 0x3FD6, 125061 }, + { 0x3F6A, 125064 }, + { 0x3F6D, 125068 }, + { 0x3F6B, 125072 }, + { 0x3F96, 125076 }, + { 0x3F6E, 125080 }, + { 0x3F6C, 125084 }, + { 0x3F83, 125088 }, + { 0x3F86, 125092 }, + { 0x3F84, 125096 }, + { 0x3F87, 125100 }, + { 0x3F85, 125104 }, + { 0x3F6F, 125108 }, + { 0x3F72, 125112 }, + { 0x3F70, 125116 }, + { 0x3F73, 125120 }, + { 0x3F71, 125124 }, + { 0x3F88, 125128 }, + { 0x3F8B, 125132 }, + { 0x3F89, 125136 }, + { 0x3F8C, 125140 }, + { 0x3F8A, 125144 }, + { 0x3F7E, 125148 }, + { 0x3F81, 125152 }, + { 0x3F7F, 125156 }, + { 0x3F82, 125160 }, + { 0x3F80, 125164 }, + { 0x3F90, 125168 }, + { 0x3F93, 125172 }, + { 0x3F91, 125176 }, + { 0x3F94, 125180 }, + { 0x3F92, 125184 }, + { 0x3F74, 125188 }, + { 0x3F77, 125192 }, + { 0x3F75, 125196 }, + { 0x3F78, 125200 }, + { 0x3F76, 125204 }, + { 0x3F79, 125208 }, + { 0x3F7C, 125212 }, + { 0x3F7A, 125216 }, + { 0x3F7D, 125220 }, + { 0x3F7B, 125224 }, + { 0x3F95, 125228 }, + { 0x3F5F, 125232 }, + { 0x3F8D, 125236 }, + { 0x3F8F, 125240 }, + { 0x3F8E, 125244 }, + { 0x3F60, 125248 }, + { 0x3F63, 125253 }, + { 0x3F61, 125258 }, + { 0x3F64, 125263 }, + { 0x3F62, 125268 }, + { 0x3F68, 125273 }, + { 0x3F65, 125278 }, + { 0x3F67, 125283 }, + { 0x3F66, 125288 }, + { 0x3F5E, 125293 }, + { 0x3F97, 125297 }, + { 0x3F98, 125302 }, + { 0x3FD8, 125307 }, + { 0x3FD5, 125310 }, + { 0x3FD7, 125313 }, + { 0x3F5A, 125316 }, + { 0x3F5D, 125320 }, + { 0x3F69, 125323 }, + { 0x8F07, 125328 }, + { 0x944B, 125329 }, + { 0x8F5A, 125330 }, + { 0x95BE, 125331 }, + { 0x2328, 125332 }, + { 0x1F10, 125335 }, + { 0x1F72, 125338 }, + { 0x204A, 125339 }, + { 0x1EB8, 125343 }, + { 0x2611, 125345 }, + { 0x2693, 125350 }, + { 0x260D, 125354 }, + { 0x1E5D, 125356 }, + { 0x1FD7, 125357 }, + { 0x1CE4, 125359 }, + { 0x1CE2, 125361 }, + { 0x1CE3, 125363 }, + { 0x95D4, 125365 }, + { 0x4D24, 125366 }, + { 0x4D25, 125369 }, + { 0x4D1A, 125372 }, + { 0x4D27, 125375 }, + { 0x4D2C, 125378 }, + { 0x4D28, 125381 }, + { 0x4D2B, 125384 }, + { 0x4D2A, 125387 }, + { 0x4D2F, 125390 }, + { 0x4D26, 125393 }, + { 0x4D2E, 125396 }, + { 0x4D2D, 125399 }, + { 0x4D29, 125402 }, + { 0x4D20, 125405 }, + { 0x4D1C, 125409 }, + { 0x4D22, 125413 }, + { 0x4D1E, 125417 }, + { 0x4D1B, 125421 }, + { 0x4D21, 125425 }, + { 0x4D23, 125429 }, + { 0x4D1D, 125433 }, + { 0x4D1F, 125437 }, + { 0x4CEB, 125441 }, + { 0x4CF1, 125444 }, + { 0x4CED, 125447 }, + { 0x4CF3, 125450 }, + { 0x4CEF, 125453 }, + { 0x4CEC, 125456 }, + { 0x4CF2, 125459 }, + { 0x4CF4, 125462 }, + { 0x4D0F, 125465 }, + { 0x4CFB, 125468 }, + { 0x4D0A, 125471 }, + { 0x4CF7, 125474 }, + { 0x4D19, 125477 }, + { 0x4CEE, 125480 }, + { 0x4CFD, 125483 }, + { 0x4CF5, 125486 }, + { 0x4D15, 125489 }, + { 0x4D12, 125492 }, + { 0x4D0C, 125495 }, + { 0x4D0D, 125498 }, + { 0x4D14, 125501 }, + { 0x4D18, 125504 }, + { 0x4D08, 125507 }, + { 0x4CF0, 125510 }, + { 0x4D16, 125513 }, + { 0x4D13, 125516 }, + { 0x4D10, 125519 }, + { 0x4D11, 125522 }, + { 0x4CFC, 125525 }, + { 0x4D03, 125528 }, + { 0x4D0B, 125531 }, + { 0x4CF8, 125534 }, + { 0x4CF9, 125537 }, + { 0x4CFF, 125540 }, + { 0x4CFE, 125543 }, + { 0x4CF6, 125546 }, + { 0x4CFA, 125549 }, + { 0x4D07, 125552 }, + { 0x4D00, 125555 }, + { 0x4D0E, 125558 }, + { 0x4D05, 125561 }, + { 0x4D17, 125564 }, + { 0x4D09, 125567 }, + { 0x4D01, 125570 }, + { 0x4D04, 125573 }, + { 0x4D06, 125576 }, + { 0x4D02, 125579 }, + { 0x948B, 125582 }, + { 0x2565, 125583 }, + { 0x9414, 125587 }, + { 0x1DF5, 125592 }, + { 0x95FB, 125596 }, + { 0x1DF3, 125598 }, + { 0x1DE7, 125601 }, + { 0x1E3B, 125603 }, + { 0x1E10, 125607 }, + { 0x2549, 125616 }, + { 0x96B6, 125621 }, + { 0x1DFB, 125630 }, + { 0x254B, 125634 }, + { 0x942C, 125641 }, + { 0x1E1D, 125646 }, + { 0x273D, 125651 }, + { 0x273C, 125656 }, + { 0x1E00, 125661 }, + { 0x1E02, 125665 }, + { 0x2572, 125669 }, + { 0x1DF9, 125674 }, + { 0x2766, 125678 }, + { 0x2765, 125686 }, + { 0x9394, 125693 }, + { 0x938C, 125699 }, + { 0x9398, 125705 }, + { 0x2764, 125711 }, + { 0x1E51, 125716 }, + { 0x9390, 125722 }, + { 0x1DF1, 125728 }, + { 0x940A, 125732 }, + { 0x1E4E, 125737 }, + { 0x939C, 125742 }, + { 0x256F, 125747 }, + { 0x259F, 125753 }, + { 0x2776, 125758 }, + { 0x2777, 125764 }, + { 0x276E, 125770 }, + { 0x276A, 125777 }, + { 0x25A6, 125781 }, + { 0x25A3, 125785 }, + { 0x2731, 125789 }, + { 0x27B2, 125792 }, + { 0x93CC, 125797 }, + { 0x93C8, 125800 }, + { 0x1E3D, 125804 }, + { 0x9406, 125807 }, + { 0x1E37, 125813 }, + { 0x2538, 125816 }, + { 0x1E27, 125820 }, + { 0x2532, 125823 }, + { 0x1E24, 125828 }, + { 0x252E, 125833 }, + { 0x2547, 125839 }, + { 0x1E1E, 125842 }, + { 0x921F, 125845 }, + { 0x253A, 125847 }, + { 0x1E31, 125851 }, + { 0x1E22, 125854 }, + { 0x257E, 125859 }, + { 0x2586, 125866 }, + { 0x2596, 125873 }, + { 0x258E, 125881 }, + { 0x2592, 125892 }, + { 0x2582, 125903 }, + { 0x258A, 125910 }, + { 0x2593, 125917 }, + { 0x2597, 125928 }, + { 0x1E13, 125936 }, + { 0x1E14, 125941 }, + { 0x9600, 125946 }, + { 0x93C0, 125949 }, + { 0x1E33, 125952 }, + { 0x9402, 125955 }, + { 0x2771, 125958 }, + { 0x2545, 125961 }, + { 0x93C4, 125963 }, + { 0x93D0, 125966 }, + { 0x2762, 125969 }, + { 0x2767, 125974 }, + { 0x2769, 125979 }, + { 0x2768, 125988 }, + { 0x2761, 125996 }, + { 0x2815, 126003 }, + { 0x2760, 126009 }, + { 0x2763, 126015 }, + { 0x941A, 126020 }, + { 0x93BC, 126025 }, + { 0x9416, 126028 }, + { 0x1E54, 126032 }, + { 0x941C, 126035 }, + { 0x9418, 126040 }, + { 0x9412, 126044 }, + { 0x278C, 126048 }, + { 0x279C, 126051 }, + { 0x27AA, 126056 }, + { 0x93B0, 126063 }, + { 0x27CD, 126069 }, + { 0x27CF, 126076 }, + { 0x93B8, 126083 }, + { 0x93B4, 126090 }, + { 0x27A4, 126096 }, + { 0x27A4, 126103 }, + { 0x93AC, 126110 }, + { 0x93A8, 126116 }, + { 0x2796, 126122 }, + { 0x27AE, 126126 }, + { 0x1EBB, 126130 }, + { 0x26A9, 126134 }, + { 0x26AD, 126139 }, + { 0x26AF, 126147 }, + { 0x26AB, 126156 }, + { 0x1EC9, 126164 }, + { 0x26B1, 126168 }, + { 0x1ECD, 126171 }, + { 0x26B5, 126174 }, + { 0x26B3, 126178 }, + { 0x1EBF, 126184 }, + { 0x1F3D, 126189 }, + { 0x1EBD, 126194 }, + { 0x001C, 126198 }, + { 0x1F2D, 126200 }, + { 0x26A5, 126203 }, + { 0x26A7, 126207 }, + { 0x26B9, 126212 }, + { 0x26BB, 126217 }, + { 0x26BF, 126222 }, + { 0x25A2, 126231 }, + { 0x26B7, 126235 }, + { 0x26BD, 126241 }, + { 0x1F31, 126247 }, + { 0x26D2, 126252 }, + { 0x26D4, 126256 }, + { 0x2233, 126263 }, + { 0x91A5, 126264 }, + { 0x91A4, 126266 }, + { 0x0BB1, 126269 }, + { 0x0BD1, 126273 }, + { 0x0BAD, 126276 }, + { 0x0BAB, 126279 }, + { 0x0B65, 126282 }, + { 0x0B64, 126285 }, + { 0x0B9D, 126288 }, + { 0x0B9C, 126291 }, + { 0x0B9B, 126295 }, + { 0x0B62, 126300 }, + { 0x0B63, 126305 }, + { 0x0BBF, 126308 }, + { 0x0BC4, 126311 }, + { 0x0BC0, 126314 }, + { 0x0BC3, 126317 }, + { 0x0BC2, 126320 }, + { 0x0BC7, 126323 }, + { 0x0BBE, 126326 }, + { 0x0BC6, 126329 }, + { 0x0BC5, 126332 }, + { 0x0BC1, 126335 }, + { 0x0BA5, 126338 }, + { 0x0B9F, 126342 }, + { 0x0BA8, 126346 }, + { 0x0BA1, 126350 }, + { 0x0B9E, 126354 }, + { 0x0BA7, 126358 }, + { 0x0BAA, 126362 }, + { 0x0BA6, 126366 }, + { 0x0BA0, 126370 }, + { 0x0BA9, 126374 }, + { 0x0BA2, 126378 }, + { 0x0BBC, 126382 }, + { 0x0BA3, 126387 }, + { 0x0BBD, 126392 }, + { 0x0BA4, 126397 }, + { 0x0B67, 126402 }, + { 0x0B6F, 126405 }, + { 0x0B69, 126408 }, + { 0x0B72, 126411 }, + { 0x0B6B, 126414 }, + { 0x0B68, 126417 }, + { 0x0B71, 126420 }, + { 0x0B74, 126423 }, + { 0x0B8C, 126426 }, + { 0x0B7A, 126429 }, + { 0x0B86, 126432 }, + { 0x0B70, 126435 }, + { 0x0B77, 126438 }, + { 0x0B99, 126441 }, + { 0x0B6A, 126444 }, + { 0x0B7C, 126447 }, + { 0x0B75, 126450 }, + { 0x0B92, 126453 }, + { 0x0B8E, 126456 }, + { 0x0B88, 126459 }, + { 0x0B73, 126462 }, + { 0x0B8A, 126465 }, + { 0x0B90, 126468 }, + { 0x0B98, 126471 }, + { 0x0B84, 126474 }, + { 0x0B6C, 126477 }, + { 0x0B95, 126480 }, + { 0x0B8F, 126483 }, + { 0x0B8D, 126486 }, + { 0x0B7B, 126489 }, + { 0x0B81, 126492 }, + { 0x0B87, 126495 }, + { 0x0BAC, 126498 }, + { 0x0B78, 126502 }, + { 0x0B7D, 126505 }, + { 0x0B76, 126508 }, + { 0x0B93, 126511 }, + { 0x0B79, 126514 }, + { 0x0B83, 126517 }, + { 0x0B7E, 126520 }, + { 0x0B8B, 126523 }, + { 0x0B91, 126526 }, + { 0x0B96, 126529 }, + { 0x0B97, 126532 }, + { 0x0B85, 126535 }, + { 0x0B7F, 126538 }, + { 0x0B82, 126541 }, + { 0x0B94, 126544 }, + { 0x0B89, 126547 }, + { 0x0B80, 126550 }, + { 0x0B9A, 126553 }, + { 0x0B66, 126556 }, + { 0x0BD7, 126560 }, + { 0x0BD5, 126564 }, + { 0x0BAE, 126568 }, + { 0x0BD3, 126572 }, + { 0x0BAF, 126576 }, + { 0x0BD6, 126580 }, + { 0x0BD2, 126584 }, + { 0x0BD4, 126588 }, + { 0x0BB0, 126592 }, + { 0x0BB9, 126596 }, + { 0x0B6E, 126600 }, + { 0x0B6D, 126604 }, + { 0x0BBB, 126608 }, + { 0x0BBA, 126612 }, + { 0x0BC9, 126616 }, + { 0x0BCA, 126620 }, + { 0x0BC8, 126624 }, + { 0x0BCC, 126627 }, + { 0x0BB8, 126631 }, + { 0x0BB6, 126635 }, + { 0x0BCF, 126639 }, + { 0x0BCB, 126643 }, + { 0x0BB3, 126647 }, + { 0x0BCE, 126651 }, + { 0x0BB5, 126655 }, + { 0x0BB2, 126659 }, + { 0x0BCD, 126663 }, + { 0x0BB4, 126667 }, + { 0x0BD0, 126671 }, + { 0x0BB7, 126675 }, + { 0x0079, 126679 }, + { 0x950A, 126682 }, + { 0x1545, 126683 }, + { 0x154B, 126686 }, + { 0x154C, 126691 }, + { 0x154F, 126696 }, + { 0x154D, 126701 }, + { 0x1543, 126706 }, + { 0x1547, 126709 }, + { 0x1546, 126714 }, + { 0x1540, 126718 }, + { 0x4F38, 126720 }, + { 0x4F34, 126725 }, + { 0x1544, 126729 }, + { 0x1542, 126731 }, + { 0x1551, 126733 }, + { 0x1556, 126736 }, + { 0x1552, 126739 }, + { 0x1555, 126742 }, + { 0x1554, 126745 }, + { 0x1559, 126748 }, + { 0x1550, 126751 }, + { 0x1558, 126754 }, + { 0x1557, 126757 }, + { 0x1553, 126760 }, + { 0x4F3D, 126763 }, + { 0x4F3F, 126766 }, + { 0x4F3E, 126772 }, + { 0x154E, 126777 }, + { 0x4F36, 126780 }, + { 0x155A, 126785 }, + { 0x155B, 126788 }, + { 0x155C, 126791 }, + { 0x155D, 126794 }, + { 0x155E, 126797 }, + { 0x1564, 126800 }, + { 0x156D, 126803 }, + { 0x1561, 126806 }, + { 0x1573, 126809 }, + { 0x1567, 126812 }, + { 0x156F, 126815 }, + { 0x1574, 126818 }, + { 0x1569, 126821 }, + { 0x1568, 126824 }, + { 0x1562, 126827 }, + { 0x155F, 126830 }, + { 0x1565, 126833 }, + { 0x1566, 126836 }, + { 0x1571, 126839 }, + { 0x156A, 126842 }, + { 0x156C, 126845 }, + { 0x1560, 126848 }, + { 0x1572, 126851 }, + { 0x1570, 126854 }, + { 0x1577, 126857 }, + { 0x15BA, 126860 }, + { 0x15BB, 126865 }, + { 0x15CA, 126870 }, + { 0x15BE, 126875 }, + { 0x15C4, 126880 }, + { 0x15BC, 126885 }, + { 0x15C5, 126890 }, + { 0x15C3, 126895 }, + { 0x15C9, 126900 }, + { 0x15C1, 126905 }, + { 0x15BD, 126910 }, + { 0x15C2, 126915 }, + { 0x15C6, 126920 }, + { 0x15C7, 126925 }, + { 0x15BF, 126930 }, + { 0x15C8, 126935 }, + { 0x15D9, 126940 }, + { 0x15DA, 126946 }, + { 0x15C0, 126952 }, + { 0x15B9, 126957 }, + { 0x15B8, 126963 }, + { 0x15B5, 126968 }, + { 0x15DC, 126973 }, + { 0x15B6, 126978 }, + { 0x15B4, 126983 }, + { 0x15B3, 126989 }, + { 0x15B7, 126995 }, + { 0x1563, 127001 }, + { 0x156E, 127004 }, + { 0x15B2, 127007 }, + { 0x157C, 127013 }, + { 0x1578, 127016 }, + { 0x1575, 127019 }, + { 0x157A, 127022 }, + { 0x156B, 127025 }, + { 0x1576, 127028 }, + { 0x157B, 127031 }, + { 0x1579, 127034 }, + { 0x1597, 127037 }, + { 0x1598, 127041 }, + { 0x159B, 127045 }, + { 0x15A3, 127049 }, + { 0x15A5, 127053 }, + { 0x159E, 127057 }, + { 0x159F, 127061 }, + { 0x1599, 127065 }, + { 0x15A4, 127069 }, + { 0x159D, 127073 }, + { 0x15A0, 127077 }, + { 0x15A2, 127081 }, + { 0x159A, 127085 }, + { 0x15A9, 127089 }, + { 0x159C, 127093 }, + { 0x15AB, 127097 }, + { 0x15A6, 127101 }, + { 0x15A7, 127105 }, + { 0x15AA, 127109 }, + { 0x15A1, 127113 }, + { 0x15A8, 127117 }, + { 0x15AC, 127121 }, + { 0x157E, 127125 }, + { 0x157F, 127129 }, + { 0x1580, 127133 }, + { 0x1581, 127137 }, + { 0x1585, 127141 }, + { 0x158B, 127145 }, + { 0x1588, 127149 }, + { 0x158D, 127153 }, + { 0x1591, 127157 }, + { 0x1589, 127161 }, + { 0x1582, 127165 }, + { 0x1586, 127169 }, + { 0x1587, 127173 }, + { 0x158A, 127177 }, + { 0x1583, 127181 }, + { 0x1590, 127185 }, + { 0x158F, 127189 }, + { 0x15CB, 127193 }, + { 0x15CC, 127199 }, + { 0x1584, 127205 }, + { 0x158C, 127209 }, + { 0x1596, 127213 }, + { 0x1592, 127217 }, + { 0x1593, 127221 }, + { 0x1594, 127225 }, + { 0x1595, 127229 }, + { 0x158E, 127233 }, + { 0x157D, 127237 }, + { 0x15AD, 127243 }, + { 0x15B0, 127247 }, + { 0x15AE, 127251 }, + { 0x15AF, 127255 }, + { 0x15CF, 127259 }, + { 0x15D3, 127265 }, + { 0x15D8, 127271 }, + { 0x15DB, 127277 }, + { 0x15D6, 127283 }, + { 0x15D4, 127289 }, + { 0x15CD, 127295 }, + { 0x15D0, 127301 }, + { 0x15DD, 127307 }, + { 0x15CE, 127313 }, + { 0x15D5, 127319 }, + { 0x15D1, 127325 }, + { 0x15D7, 127331 }, + { 0x15D2, 127337 }, + { 0x15B1, 127343 }, + { 0x1549, 127347 }, + { 0x1548, 127351 }, + { 0x154A, 127354 }, + { 0x4F37, 127356 }, + { 0x4F40, 127361 }, + { 0x4F35, 127368 }, + { 0x4F3A, 127371 }, + { 0x4F39, 127377 }, + { 0x1541, 127382 }, + { 0x4F3B, 127384 }, + { 0x4F3C, 127387 }, + { 0x94EA, 127393 }, + { 0x4671, 127395 }, + { 0x4682, 127398 }, + { 0x467D, 127401 }, + { 0x467F, 127404 }, + { 0x4688, 127407 }, + { 0x4672, 127410 }, + { 0x4681, 127413 }, + { 0x466D, 127416 }, + { 0x4674, 127419 }, + { 0x4679, 127422 }, + { 0x4684, 127425 }, + { 0x4685, 127428 }, + { 0x4687, 127431 }, + { 0x4675, 127434 }, + { 0x4677, 127437 }, + { 0x466B, 127440 }, + { 0x4670, 127443 }, + { 0x467C, 127447 }, + { 0x467E, 127451 }, + { 0x466C, 127455 }, + { 0x4678, 127459 }, + { 0x4686, 127463 }, + { 0x4676, 127467 }, + { 0x466A, 127471 }, + { 0x467A, 127475 }, + { 0x466E, 127479 }, + { 0x4683, 127482 }, + { 0x4673, 127485 }, + { 0x466F, 127488 }, + { 0x467B, 127491 }, + { 0x4680, 127494 }, + { 0x4689, 127497 }, + { 0x4691, 127500 }, + { 0x468F, 127504 }, + { 0x468A, 127507 }, + { 0x468E, 127510 }, + { 0x468C, 127513 }, + { 0x468B, 127516 }, + { 0x4690, 127519 }, + { 0x468D, 127522 }, + { 0x9450, 127526 }, + { 0x90A3, 127528 }, + { 0x9284, 127529 }, + { 0x9591, 127531 }, + { 0x22FA, 127533 }, + { 0x94D5, 127534 }, + { 0x464E, 127535 }, + { 0x465B, 127538 }, + { 0x4656, 127541 }, + { 0x4658, 127544 }, + { 0x4660, 127547 }, + { 0x464F, 127550 }, + { 0x465A, 127553 }, + { 0x464B, 127556 }, + { 0x4651, 127559 }, + { 0x4654, 127562 }, + { 0x465D, 127565 }, + { 0x465E, 127568 }, + { 0x465F, 127571 }, + { 0x4652, 127574 }, + { 0x4653, 127577 }, + { 0x464A, 127580 }, + { 0x4657, 127583 }, + { 0x464C, 127587 }, + { 0x465C, 127590 }, + { 0x4650, 127593 }, + { 0x464D, 127596 }, + { 0x4655, 127599 }, + { 0x4659, 127602 }, + { 0x4663, 127605 }, + { 0x4668, 127608 }, + { 0x4664, 127611 }, + { 0x4667, 127614 }, + { 0x4666, 127617 }, + { 0x4665, 127620 }, + { 0x4669, 127623 }, + { 0x4661, 127626 }, + { 0x4662, 127629 }, + { 0x9081, 127632 }, + { 0x959F, 127633 }, + { 0x1CA9, 127634 }, + { 0x929F, 127636 }, + { 0x2310, 127638 }, + { 0x22AA, 127639 }, + { 0x8F00, 127642 }, + { 0x1F2B, 127643 }, + { 0x2706, 127644 }, + { 0x1CD7, 127648 }, + { 0x2638, 127650 }, + { 0x0002, 127653 }, + { 0x229F, 127655 }, + { 0x22A0, 127660 }, + { 0x22A1, 127665 }, + { 0x22A2, 127670 }, + { 0x22A3, 127675 }, + { 0x22A4, 127680 }, + { 0x22A5, 127685 }, + { 0x22A6, 127690 }, + { 0x1CBB, 127695 }, + { 0x9051, 127697 }, + { 0x2669, 127699 }, + { 0x9191, 127702 }, + { 0x079C, 127704 }, + { 0x079F, 127707 }, + { 0x079D, 127710 }, + { 0x07B3, 127713 }, + { 0x079E, 127716 }, + { 0x07A1, 127719 }, + { 0x07A9, 127723 }, + { 0x07A3, 127727 }, + { 0x07B0, 127731 }, + { 0x07B1, 127735 }, + { 0x07AD, 127739 }, + { 0x07A6, 127743 }, + { 0x07A8, 127747 }, + { 0x07A2, 127752 }, + { 0x07AF, 127757 }, + { 0x07AC, 127762 }, + { 0x07A5, 127767 }, + { 0x07AB, 127772 }, + { 0x07B2, 127777 }, + { 0x07A7, 127781 }, + { 0x07A4, 127786 }, + { 0x0796, 127791 }, + { 0x0795, 127794 }, + { 0x078D, 127797 }, + { 0x078A, 127800 }, + { 0x078B, 127803 }, + { 0x0787, 127806 }, + { 0x0792, 127809 }, + { 0x0793, 127812 }, + { 0x0798, 127815 }, + { 0x078E, 127818 }, + { 0x078F, 127821 }, + { 0x078C, 127824 }, + { 0x0786, 127827 }, + { 0x0790, 127830 }, + { 0x0799, 127833 }, + { 0x079A, 127836 }, + { 0x079B, 127839 }, + { 0x0789, 127842 }, + { 0x0788, 127845 }, + { 0x0791, 127848 }, + { 0x0794, 127851 }, + { 0x0797, 127854 }, + { 0x07AE, 127857 }, + { 0x07AA, 127861 }, + { 0x07A0, 127866 }, + { 0x07B7, 127871 }, + { 0x07C1, 127874 }, + { 0x07BF, 127878 }, + { 0x07BE, 127881 }, + { 0x07B6, 127884 }, + { 0x07BD, 127887 }, + { 0x07BC, 127890 }, + { 0x07B5, 127893 }, + { 0x07C2, 127896 }, + { 0x07B8, 127899 }, + { 0x07C0, 127902 }, + { 0x07BB, 127905 }, + { 0x07B4, 127909 }, + { 0x07B9, 127912 }, + { 0x07BA, 127915 }, + { 0x929C, 127918 }, + { 0x9094, 127919 }, + { 0x8F6A, 127921 }, + { 0x96F2, 127922 }, + { 0x96F7, 127925 }, + { 0x96F3, 127928 }, + { 0x96F6, 127931 }, + { 0x96F5, 127934 }, + { 0x96FA, 127937 }, + { 0x96F1, 127940 }, + { 0x96F9, 127943 }, + { 0x96F8, 127946 }, + { 0x96F4, 127949 }, + { 0x001B, 127952 }, + { 0x7E92, 127953 }, + { 0x7E93, 127956 }, + { 0x7E95, 127959 }, + { 0x7E99, 127962 }, + { 0x7EA1, 127965 }, + { 0x7EB1, 127968 }, + { 0x7C68, 127971 }, + { 0x7C69, 127974 }, + { 0x7C6B, 127977 }, + { 0x7C6F, 127980 }, + { 0x7E94, 127983 }, + { 0x7E96, 127986 }, + { 0x7E9A, 127989 }, + { 0x7EA2, 127992 }, + { 0x7EB2, 127995 }, + { 0x7E97, 127998 }, + { 0x7E9B, 128001 }, + { 0x7EA3, 128004 }, + { 0x7EB3, 128007 }, + { 0x7E9D, 128010 }, + { 0x7EA5, 128013 }, + { 0x7EB5, 128016 }, + { 0x7EA9, 128019 }, + { 0x7EB9, 128022 }, + { 0x7EC1, 128025 }, + { 0x7C6A, 128028 }, + { 0x7C6C, 128031 }, + { 0x7C70, 128034 }, + { 0x7C6D, 128037 }, + { 0x7C71, 128040 }, + { 0x7C73, 128043 }, + { 0x7E98, 128046 }, + { 0x7E9C, 128049 }, + { 0x7EA4, 128052 }, + { 0x7EB4, 128055 }, + { 0x7E9E, 128058 }, + { 0x7EA6, 128061 }, + { 0x7EB6, 128064 }, + { 0x7EAA, 128067 }, + { 0x7EBA, 128070 }, + { 0x7EC2, 128073 }, + { 0x7E9F, 128076 }, + { 0x7EA7, 128079 }, + { 0x7EB7, 128082 }, + { 0x7EAB, 128085 }, + { 0x7EBB, 128088 }, + { 0x7EC3, 128091 }, + { 0x7EAD, 128094 }, + { 0x7EBD, 128097 }, + { 0x7EC5, 128100 }, + { 0x7EC9, 128103 }, + { 0x7C6E, 128106 }, + { 0x7C72, 128109 }, + { 0x7C74, 128112 }, + { 0x7C75, 128115 }, + { 0x7EA0, 128118 }, + { 0x7EA8, 128121 }, + { 0x7EB8, 128124 }, + { 0x7EAC, 128127 }, + { 0x7EBC, 128130 }, + { 0x7EC4, 128133 }, + { 0x7EAE, 128136 }, + { 0x7EBE, 128139 }, + { 0x7EC6, 128142 }, + { 0x7ECA, 128145 }, + { 0x7EAF, 128148 }, + { 0x7EBF, 128151 }, + { 0x7EC7, 128154 }, + { 0x7ECB, 128157 }, + { 0x7ECD, 128160 }, + { 0x7C76, 128163 }, + { 0x7EB0, 128166 }, + { 0x7EC0, 128169 }, + { 0x7EC8, 128172 }, + { 0x7ECC, 128175 }, + { 0x7ECE, 128178 }, + { 0x7ECF, 128181 }, + { 0x7ED0, 128184 }, + { 0x2824, 128187 }, + { 0x8F23, 128189 }, + { 0x7C46, 128190 }, + { 0x7C45, 128194 }, + { 0x7C43, 128198 }, + { 0x7C44, 128202 }, + { 0x2370, 128206 }, + { 0x8F10, 128207 }, + { 0x9049, 128208 }, + { 0x9257, 128210 }, + { 0x1E79, 128211 }, + { 0x25CD, 128213 }, + { 0x25CC, 128217 }, + { 0x9059, 128221 }, + { 0x2048, 128224 }, + { 0x1CFE, 128225 }, + { 0x1D03, 128227 }, + { 0x1CFF, 128229 }, + { 0x1D02, 128231 }, + { 0x1D01, 128233 }, + { 0x1D0A, 128235 }, + { 0x1D06, 128238 }, + { 0x1D07, 128240 }, + { 0x1CFD, 128243 }, + { 0x1D05, 128245 }, + { 0x1D08, 128247 }, + { 0x1D0B, 128249 }, + { 0x1D04, 128252 }, + { 0x1D00, 128254 }, + { 0x1D09, 128256 }, + { 0x2009, 128259 }, + { 0x2637, 128261 }, + { 0x200A, 128264 }, + { 0x1864, 128266 }, + { 0x1863, 128269 }, + { 0x1839, 128272 }, + { 0x183A, 128275 }, + { 0x183B, 128278 }, + { 0x186A, 128281 }, + { 0x186F, 128284 }, + { 0x186B, 128287 }, + { 0x186E, 128290 }, + { 0x186D, 128293 }, + { 0x1872, 128296 }, + { 0x1869, 128299 }, + { 0x1871, 128302 }, + { 0x1870, 128305 }, + { 0x186C, 128308 }, + { 0x1861, 128311 }, + { 0x185E, 128315 }, + { 0x185D, 128319 }, + { 0x1860, 128323 }, + { 0x185F, 128327 }, + { 0x1862, 128331 }, + { 0x183C, 128335 }, + { 0x1841, 128338 }, + { 0x183D, 128341 }, + { 0x1840, 128344 }, + { 0x183E, 128347 }, + { 0x183F, 128350 }, + { 0x1851, 128353 }, + { 0x1847, 128356 }, + { 0x184C, 128359 }, + { 0x1842, 128362 }, + { 0x184F, 128365 }, + { 0x1845, 128368 }, + { 0x1859, 128371 }, + { 0x1848, 128374 }, + { 0x1843, 128377 }, + { 0x1855, 128380 }, + { 0x1852, 128383 }, + { 0x184D, 128386 }, + { 0x184E, 128389 }, + { 0x1844, 128392 }, + { 0x1854, 128395 }, + { 0x1857, 128398 }, + { 0x184B, 128401 }, + { 0x1850, 128404 }, + { 0x1856, 128407 }, + { 0x1858, 128410 }, + { 0x1853, 128413 }, + { 0x1849, 128416 }, + { 0x1876, 128419 }, + { 0x1867, 128422 }, + { 0x1875, 128425 }, + { 0x1846, 128428 }, + { 0x184A, 128431 }, + { 0x1874, 128434 }, + { 0x1868, 128437 }, + { 0x1877, 128440 }, + { 0x1878, 128444 }, + { 0x1876, 128448 }, + { 0x1873, 128452 }, + { 0x185C, 128454 }, + { 0x185B, 128458 }, + { 0x1865, 128462 }, + { 0x1866, 128467 }, + { 0x185A, 128472 }, + { 0x196B, 128476 }, + { 0x196A, 128481 }, + { 0x1969, 128486 }, + { 0x1968, 128491 }, + { 0x1967, 128496 }, + { 0x1964, 128500 }, + { 0x1966, 128504 }, + { 0x1965, 128508 }, + { 0x8EEE, 128512 }, + { 0x94E6, 128513 }, + { 0x9100, 128514 }, + { 0x8EFD, 128515 }, + { 0x9133, 128516 }, + { 0x1D7C, 128521 }, + { 0x2332, 128523 }, + { 0x9091, 128526 }, + { 0x912F, 128528 }, + { 0x1F6C, 128532 }, + { 0x90E0, 128534 }, + { 0x824E, 128535 }, + { 0x8218, 128540 }, + { 0x8228, 128543 }, + { 0x821E, 128548 }, + { 0x8217, 128552 }, + { 0x8202, 128555 }, + { 0x823E, 128559 }, + { 0x822A, 128562 }, + { 0x8241, 128567 }, + { 0x8203, 128570 }, + { 0x820F, 128573 }, + { 0x822C, 128576 }, + { 0x8236, 128579 }, + { 0x823F, 128582 }, + { 0x8207, 128585 }, + { 0x8201, 128588 }, + { 0x821C, 128591 }, + { 0x8238, 128594 }, + { 0x821B, 128598 }, + { 0x8231, 128601 }, + { 0x8220, 128604 }, + { 0x8225, 128607 }, + { 0x8230, 128610 }, + { 0x8214, 128613 }, + { 0x8204, 128616 }, + { 0x824A, 128619 }, + { 0x8210, 128622 }, + { 0x8244, 128625 }, + { 0x824B, 128628 }, + { 0x8211, 128631 }, + { 0x8205, 128635 }, + { 0x8222, 128639 }, + { 0x823B, 128642 }, + { 0x8234, 128645 }, + { 0x821F, 128648 }, + { 0x822F, 128651 }, + { 0x8215, 128654 }, + { 0x8240, 128657 }, + { 0x8212, 128660 }, + { 0x8235, 128663 }, + { 0x8226, 128666 }, + { 0x8248, 128669 }, + { 0x820D, 128672 }, + { 0x8229, 128675 }, + { 0x8247, 128678 }, + { 0x8224, 128681 }, + { 0x8232, 128684 }, + { 0x8209, 128689 }, + { 0x8221, 128693 }, + { 0x8233, 128696 }, + { 0x8243, 128699 }, + { 0x8242, 128702 }, + { 0x821A, 128705 }, + { 0x8213, 128708 }, + { 0x8251, 128711 }, + { 0x8223, 128714 }, + { 0x823A, 128717 }, + { 0x822D, 128721 }, + { 0x8250, 128724 }, + { 0x8227, 128727 }, + { 0x8246, 128730 }, + { 0x8249, 128733 }, + { 0x824D, 128736 }, + { 0x8219, 128739 }, + { 0x820B, 128742 }, + { 0x822B, 128745 }, + { 0x8245, 128748 }, + { 0x8208, 128751 }, + { 0x8216, 128754 }, + { 0x824C, 128757 }, + { 0x8206, 128760 }, + { 0x822E, 128763 }, + { 0x8239, 128766 }, + { 0x820E, 128769 }, + { 0x823C, 128772 }, + { 0x821D, 128775 }, + { 0x824F, 128778 }, + { 0x8237, 128781 }, + { 0x820C, 128784 }, + { 0x820A, 128787 }, + { 0x823D, 128792 }, + { 0x1E8B, 128795 }, + { 0x9165, 128796 }, + { 0x229E, 128797 }, + { 0x22DB, 128800 }, + { 0x7CB8, 128803 }, + { 0x7CBC, 128809 }, + { 0x90A6, 128815 }, + { 0x946A, 128817 }, + { 0x5137, 128818 }, + { 0x5135, 128823 }, + { 0x5134, 128827 }, + { 0x5136, 128831 }, + { 0x512A, 128836 }, + { 0x5127, 128842 }, + { 0x512C, 128846 }, + { 0x512B, 128850 }, + { 0x5128, 128854 }, + { 0x5129, 128858 }, + { 0x5126, 128864 }, + { 0x50F7, 128869 }, + { 0x50F4, 128874 }, + { 0x50F9, 128879 }, + { 0x50F6, 128884 }, + { 0x50FA, 128889 }, + { 0x50FB, 128894 }, + { 0x50F8, 128899 }, + { 0x50F5, 128904 }, + { 0x50FC, 128909 }, + { 0x50FD, 128915 }, + { 0x50F3, 128920 }, + { 0x511C, 128924 }, + { 0x5113, 128928 }, + { 0x5103, 128932 }, + { 0x510E, 128936 }, + { 0x5100, 128940 }, + { 0x5124, 128944 }, + { 0x5105, 128948 }, + { 0x50FE, 128952 }, + { 0x511F, 128956 }, + { 0x5115, 128960 }, + { 0x5110, 128964 }, + { 0x5111, 128968 }, + { 0x511E, 128972 }, + { 0x5123, 128976 }, + { 0x510C, 128980 }, + { 0x5120, 128984 }, + { 0x511D, 128988 }, + { 0x511B, 128992 }, + { 0x5114, 128996 }, + { 0x5104, 129000 }, + { 0x5109, 129004 }, + { 0x510F, 129008 }, + { 0x5118, 129012 }, + { 0x5101, 129016 }, + { 0x50FF, 129020 }, + { 0x5102, 129024 }, + { 0x510B, 129028 }, + { 0x5106, 129032 }, + { 0x5112, 129036 }, + { 0x5121, 129040 }, + { 0x5122, 129044 }, + { 0x510D, 129048 }, + { 0x5116, 129052 }, + { 0x5107, 129056 }, + { 0x511A, 129060 }, + { 0x510A, 129064 }, + { 0x5119, 129068 }, + { 0x5125, 129072 }, + { 0x5117, 129076 }, + { 0x5108, 129080 }, + { 0x5133, 129084 }, + { 0x5139, 129089 }, + { 0x5132, 129095 }, + { 0x5138, 129100 }, + { 0x513A, 129106 }, + { 0x5130, 129109 }, + { 0x512F, 129114 }, + { 0x5131, 129119 }, + { 0x512E, 129124 }, + { 0x512D, 129129 }, + { 0x92AA, 129134 }, + { 0x92F2, 129138 }, + { 0x92EF, 129142 }, + { 0x9301, 129146 }, + { 0x92D2, 129151 }, + { 0x92F3, 129156 }, + { 0x92EE, 129160 }, + { 0x92AF, 129164 }, + { 0x92B1, 129169 }, + { 0x92B0, 129174 }, + { 0x92B2, 129179 }, + { 0x9314, 129184 }, + { 0x9315, 129190 }, + { 0x92F5, 129196 }, + { 0x92AB, 129200 }, + { 0x92C3, 129204 }, + { 0x931B, 129208 }, + { 0x931C, 129213 }, + { 0x9317, 129218 }, + { 0x92C5, 129222 }, + { 0x92C6, 129227 }, + { 0x92D3, 129232 }, + { 0x92C1, 129237 }, + { 0x92C2, 129242 }, + { 0x92BD, 129247 }, + { 0x92CF, 129251 }, + { 0x92D6, 129258 }, + { 0x92FD, 129264 }, + { 0x9300, 129268 }, + { 0x92B8, 129272 }, + { 0x92EB, 129277 }, + { 0x9302, 129281 }, + { 0x92F7, 129285 }, + { 0x92AC, 129290 }, + { 0x92FF, 129294 }, + { 0x931A, 129299 }, + { 0x9318, 129303 }, + { 0x92BE, 129307 }, + { 0x92EA, 129311 }, + { 0x92F6, 129316 }, + { 0x92FE, 129320 }, + { 0x92AD, 129324 }, + { 0x92DF, 129328 }, + { 0x92C9, 129332 }, + { 0x92CE, 129337 }, + { 0x92C7, 129342 }, + { 0x92CC, 129348 }, + { 0x92CD, 129354 }, + { 0x92F4, 129360 }, + { 0x930C, 129364 }, + { 0x9316, 129368 }, + { 0x92C4, 129372 }, + { 0x92F0, 129376 }, + { 0x92B6, 129380 }, + { 0x92E8, 129384 }, + { 0x9313, 129388 }, + { 0x9304, 129392 }, + { 0x92E3, 129396 }, + { 0x92E7, 129400 }, + { 0x92EC, 129405 }, + { 0x92ED, 129409 }, + { 0x9309, 129413 }, + { 0x92B9, 129417 }, + { 0x92BA, 129422 }, + { 0x92BB, 129427 }, + { 0x92E4, 129432 }, + { 0x92DB, 129436 }, + { 0x92C8, 129440 }, + { 0x92D9, 129446 }, + { 0x92DA, 129452 }, + { 0x92F8, 129458 }, + { 0x92FB, 129464 }, + { 0x9305, 129469 }, + { 0x9306, 129475 }, + { 0x92FA, 129481 }, + { 0x92B3, 129485 }, + { 0x92D8, 129489 }, + { 0x92BF, 129495 }, + { 0x92E0, 129499 }, + { 0x92D4, 129503 }, + { 0x92F9, 129508 }, + { 0x92BC, 129512 }, + { 0x930E, 129516 }, + { 0x930A, 129520 }, + { 0x9303, 129524 }, + { 0x92E9, 129529 }, + { 0x92F1, 129533 }, + { 0x9319, 129537 }, + { 0x92FC, 129541 }, + { 0x92E1, 129545 }, + { 0x92E5, 129549 }, + { 0x92DC, 129553 }, + { 0x92DD, 129557 }, + { 0x92DE, 129561 }, + { 0x92D0, 129565 }, + { 0x92D7, 129573 }, + { 0x92CB, 129581 }, + { 0x92D5, 129587 }, + { 0x92D1, 129593 }, + { 0x92B4, 129597 }, + { 0x92B5, 129601 }, + { 0x92C0, 129605 }, + { 0x92AE, 129609 }, + { 0x930F, 129613 }, + { 0x9310, 129617 }, + { 0x9311, 129621 }, + { 0x9312, 129625 }, + { 0x930B, 129629 }, + { 0x92E6, 129633 }, + { 0x92CA, 129637 }, + { 0x9308, 129642 }, + { 0x9307, 129646 }, + { 0x92B7, 129650 }, + { 0x930D, 129655 }, + { 0x92A9, 129659 }, + { 0x92E2, 129663 }, + { 0x95D8, 129667 }, + { 0x0007, 129669 }, + { 0x1EA7, 129670 }, + { 0x91E5, 129673 }, + { 0x924A, 129675 }, + { 0x8F73, 129676 }, + { 0x3E51, 129679 }, + { 0x3E4D, 129682 }, + { 0x9490, 129684 }, + { 0x4A9A, 129685 }, + { 0x4AA6, 129688 }, + { 0x4AA2, 129691 }, + { 0x4AA3, 129694 }, + { 0x4AA9, 129697 }, + { 0x4A9B, 129700 }, + { 0x4AA5, 129703 }, + { 0x4A97, 129706 }, + { 0x4A9E, 129709 }, + { 0x4AA0, 129712 }, + { 0x4AA7, 129715 }, + { 0x4AA8, 129718 }, + { 0x4A9F, 129721 }, + { 0x4A95, 129724 }, + { 0x4A98, 129727 }, + { 0x4A96, 129730 }, + { 0x4A9D, 129734 }, + { 0x4A9C, 129737 }, + { 0x4A99, 129741 }, + { 0x4AA1, 129744 }, + { 0x4AA4, 129747 }, + { 0x4AAA, 129750 }, + { 0x4AB0, 129753 }, + { 0x4AAE, 129757 }, + { 0x4AAB, 129760 }, + { 0x4AAD, 129763 }, + { 0x4AAC, 129766 }, + { 0x4AAF, 129769 }, + { 0x003E, 129772 }, + { 0x0020, 129774 }, + { 0x1CD2, 129776 }, + { 0x1E58, 129779 }, + { 0x91C9, 129780 }, + { 0x1FD8, 129782 }, + { 0x8F9F, 129785 }, + { 0x2237, 129787 }, + { 0x08C5, 129789 }, + { 0x3872, 129791 }, + { 0x51D7, 129794 }, + { 0x51D8, 129797 }, + { 0x3876, 129802 }, + { 0x08E6, 129805 }, + { 0x51D9, 129810 }, + { 0x51DA, 129813 }, + { 0x51E0, 129818 }, + { 0x08B1, 129821 }, + { 0x386D, 129824 }, + { 0x08C2, 129829 }, + { 0x3875, 129832 }, + { 0x386B, 129835 }, + { 0x0878, 129839 }, + { 0x51DD, 129842 }, + { 0x51DE, 129847 }, + { 0x0877, 129852 }, + { 0x08B2, 129855 }, + { 0x51DB, 129858 }, + { 0x51DC, 129862 }, + { 0x0875, 129868 }, + { 0x3871, 129872 }, + { 0x51DF, 129875 }, + { 0x0876, 129880 }, + { 0x386E, 129883 }, + { 0x386F, 129887 }, + { 0x386C, 129891 }, + { 0x3870, 129895 }, + { 0x08C9, 129899 }, + { 0x3873, 129902 }, + { 0x08D9, 129904 }, + { 0x08DC, 129906 }, + { 0x08E1, 129909 }, + { 0x08DD, 129912 }, + { 0x08E0, 129915 }, + { 0x08DF, 129918 }, + { 0x08E4, 129921 }, + { 0x08DB, 129924 }, + { 0x08E3, 129927 }, + { 0x08E2, 129930 }, + { 0x08DE, 129933 }, + { 0x08C8, 129936 }, + { 0x08BC, 129939 }, + { 0x08B4, 129943 }, + { 0x08C0, 129947 }, + { 0x08B6, 129951 }, + { 0x08B3, 129955 }, + { 0x08BD, 129959 }, + { 0x08C1, 129963 }, + { 0x08C4, 129967 }, + { 0x3878, 129971 }, + { 0x08B5, 129975 }, + { 0x08AF, 129979 }, + { 0x08CB, 129983 }, + { 0x08B7, 129987 }, + { 0x08B0, 129991 }, + { 0x08CC, 129995 }, + { 0x08BB, 129999 }, + { 0x08BF, 130004 }, + { 0x08BA, 130009 }, + { 0x08BE, 130014 }, + { 0x08CA, 130019 }, + { 0x08D7, 130025 }, + { 0x08B8, 130030 }, + { 0x08D8, 130035 }, + { 0x08B9, 130040 }, + { 0x08C3, 130045 }, + { 0x08DA, 130050 }, + { 0x087A, 130053 }, + { 0x0884, 130056 }, + { 0x087C, 130059 }, + { 0x0888, 130062 }, + { 0x087E, 130065 }, + { 0x087B, 130068 }, + { 0x0885, 130071 }, + { 0x0889, 130074 }, + { 0x08EA, 130077 }, + { 0x3877, 130080 }, + { 0x08A1, 130083 }, + { 0x088F, 130086 }, + { 0x089B, 130089 }, + { 0x08D3, 130092 }, + { 0x088C, 130095 }, + { 0x08AE, 130098 }, + { 0x087D, 130101 }, + { 0x0891, 130104 }, + { 0x088A, 130107 }, + { 0x08A7, 130110 }, + { 0x08A3, 130113 }, + { 0x089D, 130116 }, + { 0x08E8, 130119 }, + { 0x089F, 130122 }, + { 0x08CD, 130125 }, + { 0x08A5, 130128 }, + { 0x08AD, 130131 }, + { 0x0899, 130134 }, + { 0x08EB, 130137 }, + { 0x087F, 130140 }, + { 0x08AA, 130143 }, + { 0x08A4, 130146 }, + { 0x08D0, 130149 }, + { 0x08F4, 130152 }, + { 0x08A2, 130155 }, + { 0x0890, 130158 }, + { 0x0896, 130161 }, + { 0x089C, 130164 }, + { 0x08F0, 130167 }, + { 0x088D, 130170 }, + { 0x0892, 130173 }, + { 0x08F1, 130176 }, + { 0x088B, 130179 }, + { 0x08A8, 130182 }, + { 0x088E, 130185 }, + { 0x0898, 130188 }, + { 0x0893, 130191 }, + { 0x08E9, 130194 }, + { 0x08A0, 130197 }, + { 0x08D2, 130200 }, + { 0x08A6, 130203 }, + { 0x08AB, 130206 }, + { 0x08AC, 130209 }, + { 0x089A, 130212 }, + { 0x0894, 130215 }, + { 0x08EC, 130218 }, + { 0x08D4, 130221 }, + { 0x08EE, 130224 }, + { 0x08F3, 130227 }, + { 0x0897, 130230 }, + { 0x08CF, 130233 }, + { 0x08CE, 130236 }, + { 0x08A9, 130239 }, + { 0x089E, 130242 }, + { 0x0895, 130245 }, + { 0x08D1, 130248 }, + { 0x08EF, 130251 }, + { 0x0879, 130255 }, + { 0x0883, 130259 }, + { 0x0887, 130263 }, + { 0x08E7, 130267 }, + { 0x0882, 130271 }, + { 0x0886, 130275 }, + { 0x08F2, 130279 }, + { 0x08ED, 130283 }, + { 0x0881, 130287 }, + { 0x0880, 130291 }, + { 0x08D6, 130295 }, + { 0x08D5, 130299 }, + { 0x08C6, 130303 }, + { 0x08C7, 130307 }, + { 0x3874, 130311 }, + { 0x08E5, 130313 }, + { 0x1EA6, 130316 }, + { 0x203E, 130318 }, + { 0x1EA4, 130320 }, + { 0x26A4, 130322 }, + { 0x9006, 130327 }, + { 0x9016, 130328 }, + { 0x2864, 130329 }, + { 0x2873, 130333 }, + { 0x287F, 130337 }, + { 0x287C, 130341 }, + { 0x2859, 130345 }, + { 0x2881, 130349 }, + { 0x286A, 130354 }, + { 0x2872, 130358 }, + { 0x2877, 130362 }, + { 0x2875, 130366 }, + { 0x286F, 130370 }, + { 0x285A, 130374 }, + { 0x2883, 130378 }, + { 0x2871, 130382 }, + { 0x2862, 130386 }, + { 0x2866, 130390 }, + { 0x2874, 130394 }, + { 0x285B, 130398 }, + { 0x287A, 130402 }, + { 0x2879, 130406 }, + { 0x2878, 130410 }, + { 0x285D, 130414 }, + { 0x2860, 130418 }, + { 0x2870, 130422 }, + { 0x2869, 130426 }, + { 0x286C, 130430 }, + { 0x286D, 130434 }, + { 0x287D, 130438 }, + { 0x287E, 130443 }, + { 0x285E, 130450 }, + { 0x2876, 130454 }, + { 0x2865, 130458 }, + { 0x286B, 130462 }, + { 0x286E, 130466 }, + { 0x2861, 130470 }, + { 0x2888, 130474 }, + { 0x285C, 130479 }, + { 0x2863, 130483 }, + { 0x2882, 130488 }, + { 0x2880, 130494 }, + { 0x2884, 130500 }, + { 0x2867, 130504 }, + { 0x2868, 130508 }, + { 0x2885, 130512 }, + { 0x287B, 130516 }, + { 0x285F, 130521 }, + { 0x2887, 130525 }, + { 0x2886, 130530 }, + { 0x2834, 130535 }, + { 0x2843, 130539 }, + { 0x284F, 130543 }, + { 0x284C, 130547 }, + { 0x2829, 130551 }, + { 0x2851, 130555 }, + { 0x283A, 130560 }, + { 0x2842, 130564 }, + { 0x2847, 130568 }, + { 0x2845, 130572 }, + { 0x283F, 130576 }, + { 0x282A, 130580 }, + { 0x2853, 130584 }, + { 0x2841, 130588 }, + { 0x2832, 130592 }, + { 0x2836, 130596 }, + { 0x2844, 130600 }, + { 0x282B, 130604 }, + { 0x284A, 130608 }, + { 0x2849, 130612 }, + { 0x2848, 130616 }, + { 0x282D, 130620 }, + { 0x2830, 130624 }, + { 0x2840, 130628 }, + { 0x2839, 130632 }, + { 0x283C, 130636 }, + { 0x283D, 130640 }, + { 0x284D, 130644 }, + { 0x284E, 130649 }, + { 0x282E, 130656 }, + { 0x2846, 130660 }, + { 0x2835, 130664 }, + { 0x283B, 130668 }, + { 0x283E, 130672 }, + { 0x2831, 130676 }, + { 0x2858, 130680 }, + { 0x282C, 130685 }, + { 0x2833, 130689 }, + { 0x2852, 130694 }, + { 0x2850, 130700 }, + { 0x2854, 130706 }, + { 0x2837, 130710 }, + { 0x2838, 130714 }, + { 0x2855, 130718 }, + { 0x284B, 130722 }, + { 0x282F, 130727 }, + { 0x2857, 130731 }, + { 0x2856, 130736 }, + { 0x8F46, 130741 }, + { 0x9234, 130743 }, + { 0x78FE, 130744 }, + { 0x78FF, 130747 }, + { 0x7900, 130750 }, + { 0x78FD, 130753 }, + { 0x790B, 130756 }, + { 0x790C, 130759 }, + { 0x790D, 130762 }, + { 0x790E, 130765 }, + { 0x790F, 130768 }, + { 0x7902, 130771 }, + { 0x7903, 130774 }, + { 0x7904, 130777 }, + { 0x7905, 130780 }, + { 0x7910, 130783 }, + { 0x7911, 130786 }, + { 0x7912, 130789 }, + { 0x7906, 130792 }, + { 0x7907, 130795 }, + { 0x7908, 130798 }, + { 0x7909, 130801 }, + { 0x790A, 130804 }, + { 0x7901, 130807 }, + { 0x799A, 130810 }, + { 0x799B, 130813 }, + { 0x799C, 130816 }, + { 0x799D, 130819 }, + { 0x799E, 130822 }, + { 0x799F, 130825 }, + { 0x79A0, 130828 }, + { 0x79A1, 130831 }, + { 0x79A2, 130834 }, + { 0x79AF, 130837 }, + { 0x79B0, 130840 }, + { 0x79B1, 130843 }, + { 0x79B2, 130846 }, + { 0x79B3, 130849 }, + { 0x79B4, 130852 }, + { 0x79B5, 130855 }, + { 0x79A5, 130858 }, + { 0x79A6, 130861 }, + { 0x79A7, 130864 }, + { 0x79A8, 130867 }, + { 0x79A9, 130870 }, + { 0x79AA, 130873 }, + { 0x79AB, 130876 }, + { 0x79B6, 130879 }, + { 0x79B7, 130882 }, + { 0x79B8, 130885 }, + { 0x79B9, 130888 }, + { 0x79BA, 130891 }, + { 0x79BB, 130894 }, + { 0x79BC, 130897 }, + { 0x79BD, 130900 }, + { 0x79AC, 130903 }, + { 0x79AD, 130906 }, + { 0x79AE, 130909 }, + { 0x7913, 130912 }, + { 0x7914, 130915 }, + { 0x7915, 130918 }, + { 0x7916, 130921 }, + { 0x7917, 130924 }, + { 0x7918, 130927 }, + { 0x7919, 130930 }, + { 0x791A, 130933 }, + { 0x791B, 130936 }, + { 0x792E, 130939 }, + { 0x792F, 130942 }, + { 0x7930, 130945 }, + { 0x7931, 130948 }, + { 0x7932, 130951 }, + { 0x7933, 130954 }, + { 0x791F, 130957 }, + { 0x7920, 130960 }, + { 0x7921, 130963 }, + { 0x7922, 130966 }, + { 0x7923, 130969 }, + { 0x7924, 130972 }, + { 0x7925, 130975 }, + { 0x7926, 130978 }, + { 0x7934, 130981 }, + { 0x7935, 130984 }, + { 0x7936, 130987 }, + { 0x7927, 130990 }, + { 0x7928, 130993 }, + { 0x7929, 130996 }, + { 0x792A, 130999 }, + { 0x792B, 131002 }, + { 0x792C, 131005 }, + { 0x792D, 131008 }, + { 0x79BE, 131011 }, + { 0x79BF, 131014 }, + { 0x79C0, 131017 }, + { 0x79C1, 131020 }, + { 0x79C2, 131023 }, + { 0x79C3, 131026 }, + { 0x79C4, 131029 }, + { 0x79D0, 131032 }, + { 0x79D1, 131035 }, + { 0x79C5, 131038 }, + { 0x79C6, 131041 }, + { 0x79C7, 131044 }, + { 0x79C8, 131047 }, + { 0x79C9, 131050 }, + { 0x79CA, 131053 }, + { 0x79CB, 131056 }, + { 0x79D3, 131059 }, + { 0x79D4, 131062 }, + { 0x79D5, 131065 }, + { 0x79D6, 131068 }, + { 0x79D7, 131071 }, + { 0x79D8, 131074 }, + { 0x79CC, 131077 }, + { 0x79CD, 131080 }, + { 0x79CE, 131083 }, + { 0x79CF, 131086 }, + { 0x797A, 131089 }, + { 0x797B, 131092 }, + { 0x797C, 131095 }, + { 0x797D, 131098 }, + { 0x797E, 131101 }, + { 0x797F, 131104 }, + { 0x7980, 131107 }, + { 0x7981, 131110 }, + { 0x7982, 131113 }, + { 0x798E, 131116 }, + { 0x798F, 131119 }, + { 0x7990, 131122 }, + { 0x7991, 131125 }, + { 0x7992, 131128 }, + { 0x7993, 131131 }, + { 0x7983, 131134 }, + { 0x7984, 131137 }, + { 0x7985, 131140 }, + { 0x7986, 131143 }, + { 0x7987, 131146 }, + { 0x7988, 131149 }, + { 0x7989, 131152 }, + { 0x7995, 131155 }, + { 0x7996, 131158 }, + { 0x7997, 131161 }, + { 0x7998, 131164 }, + { 0x7999, 131167 }, + { 0x798B, 131170 }, + { 0x798C, 131173 }, + { 0x798D, 131176 }, + { 0x79E9, 131179 }, + { 0x79EA, 131182 }, + { 0x79EB, 131185 }, + { 0x79EC, 131188 }, + { 0x79FA, 131191 }, + { 0x79FB, 131194 }, + { 0x79FC, 131197 }, + { 0x79FD, 131200 }, + { 0x79ED, 131203 }, + { 0x79EE, 131206 }, + { 0x79EF, 131209 }, + { 0x79F0, 131212 }, + { 0x79F1, 131215 }, + { 0x79F2, 131218 }, + { 0x79F3, 131221 }, + { 0x79FE, 131224 }, + { 0x79FF, 131227 }, + { 0x7A00, 131230 }, + { 0x7A01, 131233 }, + { 0x7A02, 131236 }, + { 0x7A03, 131239 }, + { 0x79F4, 131242 }, + { 0x79F5, 131245 }, + { 0x79F6, 131248 }, + { 0x79F7, 131251 }, + { 0x79F8, 131254 }, + { 0x79F9, 131257 }, + { 0x7938, 131260 }, + { 0x7939, 131263 }, + { 0x793A, 131266 }, + { 0x793B, 131269 }, + { 0x793C, 131272 }, + { 0x793D, 131275 }, + { 0x793E, 131278 }, + { 0x793F, 131281 }, + { 0x794E, 131284 }, + { 0x794F, 131287 }, + { 0x7950, 131290 }, + { 0x7951, 131293 }, + { 0x7952, 131296 }, + { 0x7940, 131299 }, + { 0x7941, 131302 }, + { 0x7942, 131305 }, + { 0x7943, 131308 }, + { 0x7944, 131311 }, + { 0x7945, 131314 }, + { 0x7953, 131317 }, + { 0x7954, 131320 }, + { 0x7955, 131323 }, + { 0x7956, 131326 }, + { 0x7957, 131329 }, + { 0x7958, 131332 }, + { 0x7959, 131335 }, + { 0x7946, 131338 }, + { 0x7947, 131341 }, + { 0x7948, 131344 }, + { 0x7949, 131347 }, + { 0x794A, 131350 }, + { 0x794B, 131353 }, + { 0x794C, 131356 }, + { 0x794D, 131359 }, + { 0x795A, 131362 }, + { 0x795B, 131365 }, + { 0x795C, 131368 }, + { 0x795D, 131371 }, + { 0x796A, 131374 }, + { 0x796B, 131377 }, + { 0x796C, 131380 }, + { 0x796D, 131383 }, + { 0x796E, 131386 }, + { 0x796F, 131389 }, + { 0x7970, 131392 }, + { 0x7971, 131395 }, + { 0x7972, 131398 }, + { 0x795E, 131401 }, + { 0x795F, 131404 }, + { 0x7960, 131407 }, + { 0x7961, 131410 }, + { 0x7962, 131413 }, + { 0x7963, 131416 }, + { 0x7964, 131419 }, + { 0x7973, 131422 }, + { 0x7974, 131425 }, + { 0x7975, 131428 }, + { 0x7976, 131431 }, + { 0x7977, 131434 }, + { 0x7978, 131437 }, + { 0x7965, 131440 }, + { 0x7966, 131443 }, + { 0x7967, 131446 }, + { 0x7968, 131449 }, + { 0x7A04, 131452 }, + { 0x7A05, 131455 }, + { 0x7A06, 131458 }, + { 0x7A07, 131461 }, + { 0x7A08, 131464 }, + { 0x7A0E, 131467 }, + { 0x7A0F, 131470 }, + { 0x7A10, 131473 }, + { 0x7A11, 131476 }, + { 0x7A09, 131479 }, + { 0x7A0A, 131482 }, + { 0x7A0B, 131485 }, + { 0x7A0C, 131488 }, + { 0x7A0D, 131491 }, + { 0x7A12, 131494 }, + { 0x7A13, 131497 }, + { 0x7A14, 131500 }, + { 0x7A15, 131503 }, + { 0x7A16, 131506 }, + { 0x7A17, 131509 }, + { 0x7A18, 131512 }, + { 0x79D9, 131515 }, + { 0x79DA, 131518 }, + { 0x79DB, 131521 }, + { 0x79DC, 131524 }, + { 0x79DD, 131527 }, + { 0x79E3, 131530 }, + { 0x79E4, 131533 }, + { 0x79E5, 131536 }, + { 0x79E6, 131539 }, + { 0x79E7, 131542 }, + { 0x79E8, 131545 }, + { 0x79DF, 131548 }, + { 0x79E0, 131551 }, + { 0x79E1, 131554 }, + { 0x79E2, 131557 }, + { 0x79A3, 131560 }, + { 0x79A4, 131563 }, + { 0x791C, 131566 }, + { 0x791D, 131569 }, + { 0x791E, 131572 }, + { 0x7937, 131575 }, + { 0x79D2, 131578 }, + { 0x7994, 131581 }, + { 0x798A, 131584 }, + { 0x7979, 131587 }, + { 0x7969, 131590 }, + { 0x79DE, 131593 }, + { 0x7A19, 131596 }, + { 0x7A1A, 131599 }, + { 0x9237, 131602 }, + { 0x9238, 131604 }, + { 0x1E92, 131609 }, + { 0x1C95, 131610 }, + { 0x9678, 131612 }, + { 0x9679, 131616 }, + { 0x967A, 131620 }, + { 0x967B, 131624 }, + { 0x967C, 131628 }, + { 0x967D, 131632 }, + { 0x9683, 131636 }, + { 0x27A8, 131640 }, + { 0x7CD8, 131643 }, + { 0x7E50, 131649 }, + { 0x7E53, 131654 }, + { 0x2006, 131660 }, + { 0x22D5, 131663 }, + { 0x2011, 131668 }, + { 0x2012, 131671 }, + { 0x2013, 131674 }, + { 0x2014, 131677 }, + { 0x274F, 131680 }, + { 0x27EC, 131683 }, + { 0x7CCC, 131686 }, + { 0x7CE2, 131688 }, + { 0x7EF1, 131691 }, + { 0x9258, 131694 }, + { 0x1CA6, 131697 }, + { 0x7C50, 131699 }, + { 0x7C5A, 131702 }, + { 0x1FE5, 131704 }, + { 0x2608, 131706 }, + { 0x478C, 131708 }, + { 0x478E, 131712 }, + { 0x478D, 131716 }, + { 0x4765, 131719 }, + { 0x4767, 131724 }, + { 0x4766, 131727 }, + { 0x4790, 131730 }, + { 0x4791, 131733 }, + { 0x4793, 131736 }, + { 0x4792, 131739 }, + { 0x4762, 131742 }, + { 0x475F, 131746 }, + { 0x4763, 131750 }, + { 0x4760, 131754 }, + { 0x4761, 131758 }, + { 0x4764, 131763 }, + { 0x475E, 131767 }, + { 0x477C, 131770 }, + { 0x476C, 131773 }, + { 0x4777, 131776 }, + { 0x476A, 131779 }, + { 0x4787, 131782 }, + { 0x476E, 131785 }, + { 0x4768, 131788 }, + { 0x4781, 131791 }, + { 0x477E, 131794 }, + { 0x4779, 131797 }, + { 0x477A, 131800 }, + { 0x4780, 131803 }, + { 0x4785, 131806 }, + { 0x4775, 131809 }, + { 0x4782, 131812 }, + { 0x477F, 131815 }, + { 0x4786, 131818 }, + { 0x477D, 131821 }, + { 0x476D, 131824 }, + { 0x4772, 131827 }, + { 0x4778, 131830 }, + { 0x476B, 131833 }, + { 0x4769, 131836 }, + { 0x4788, 131839 }, + { 0x4774, 131842 }, + { 0x476F, 131845 }, + { 0x477B, 131848 }, + { 0x4783, 131851 }, + { 0x4784, 131854 }, + { 0x4776, 131857 }, + { 0x4770, 131860 }, + { 0x478B, 131863 }, + { 0x4773, 131866 }, + { 0x4771, 131869 }, + { 0x478A, 131872 }, + { 0x4789, 131875 }, + { 0x4796, 131878 }, + { 0x4797, 131882 }, + { 0x4794, 131886 }, + { 0x4795, 131889 }, + { 0x478F, 131892 }, + { 0x4798, 131894 }, + { 0x4799, 131898 }, + { 0x479F, 131901 }, + { 0x47A1, 131904 }, + { 0x479E, 131907 }, + { 0x479A, 131910 }, + { 0x479B, 131914 }, + { 0x47A0, 131917 }, + { 0x479C, 131921 }, + { 0x479D, 131925 }, + { 0x47EA, 131928 }, + { 0x47FE, 131931 }, + { 0x47E8, 131934 }, + { 0x47FD, 131937 }, + { 0x47F8, 131940 }, + { 0x47F9, 131943 }, + { 0x4806, 131946 }, + { 0x47E9, 131949 }, + { 0x47FB, 131952 }, + { 0x47E3, 131955 }, + { 0x47EF, 131958 }, + { 0x47F2, 131961 }, + { 0x4800, 131964 }, + { 0x4803, 131967 }, + { 0x4804, 131970 }, + { 0x47F0, 131973 }, + { 0x47F3, 131976 }, + { 0x4801, 131979 }, + { 0x47F1, 131982 }, + { 0x47FC, 131985 }, + { 0x47E2, 131988 }, + { 0x47E4, 131991 }, + { 0x47E5, 131994 }, + { 0x47ED, 131997 }, + { 0x47F4, 132000 }, + { 0x4802, 132003 }, + { 0x47FF, 132006 }, + { 0x4805, 132009 }, + { 0x47EB, 132012 }, + { 0x47E7, 132015 }, + { 0x47E6, 132018 }, + { 0x47EE, 132021 }, + { 0x47F5, 132024 }, + { 0x47FA, 132027 }, + { 0x47EC, 132030 }, + { 0x47F6, 132033 }, + { 0x47F7, 132036 }, + { 0x4809, 132039 }, + { 0x480D, 132042 }, + { 0x480B, 132046 }, + { 0x480A, 132049 }, + { 0x480C, 132052 }, + { 0x4812, 132055 }, + { 0x4811, 132058 }, + { 0x4813, 132063 }, + { 0x4814, 132067 }, + { 0x480E, 132071 }, + { 0x4810, 132074 }, + { 0x480F, 132080 }, + { 0x4807, 132083 }, + { 0x4808, 132087 }, + { 0x94EC, 132091 }, + { 0x94ED, 132093 }, + { 0x8F57, 132095 }, + { 0x90DF, 132096 }, + { 0x1FE4, 132097 }, + { 0x2709, 132099 }, + { 0x2239, 132100 }, + { 0x7C89, 132101 }, + { 0x94A3, 132104 }, + { 0x9269, 132106 }, + { 0x8F60, 132107 }, + { 0x14A7, 132109 }, + { 0x14A6, 132112 }, + { 0x46C8, 132115 }, + { 0x46B0, 132118 }, + { 0x46BC, 132121 }, + { 0x46BB, 132124 }, + { 0x46AC, 132127 }, + { 0x46AD, 132130 }, + { 0x46B3, 132133 }, + { 0x46B6, 132136 }, + { 0x46B8, 132139 }, + { 0x46B9, 132142 }, + { 0x46BE, 132145 }, + { 0x46C1, 132148 }, + { 0x46B4, 132151 }, + { 0x46B1, 132154 }, + { 0x46B5, 132157 }, + { 0x46B2, 132160 }, + { 0x46AF, 132163 }, + { 0x46AE, 132166 }, + { 0x46B7, 132169 }, + { 0x46BF, 132172 }, + { 0x46BD, 132175 }, + { 0x46BA, 132178 }, + { 0x46C0, 132181 }, + { 0x46C2, 132184 }, + { 0x46C5, 132187 }, + { 0x46C3, 132191 }, + { 0x46C6, 132194 }, + { 0x46C7, 132197 }, + { 0x46C4, 132200 }, + { 0x928C, 132203 }, + { 0x0070, 132205 }, + { 0x927A, 132207 }, + { 0x1F5C, 132209 }, + { 0x1E8E, 132210 }, + { 0x2801, 132211 }, + { 0x2642, 132212 }, + { 0x1EB6, 132215 }, + { 0x7C59, 132218 }, + { 0x006D, 132219 }, + { 0x230C, 132221 }, + { 0x230D, 132224 }, + { 0x94BD, 132227 }, + { 0x2564, 132228 }, + { 0x9415, 132232 }, + { 0x1DF7, 132237 }, + { 0x95FA, 132241 }, + { 0x1DF4, 132243 }, + { 0x1DE9, 132246 }, + { 0x1E3C, 132248 }, + { 0x254A, 132252 }, + { 0x96B7, 132257 }, + { 0x1DFD, 132266 }, + { 0x254C, 132270 }, + { 0x942D, 132277 }, + { 0x1E1B, 132282 }, + { 0x273B, 132287 }, + { 0x273A, 132292 }, + { 0x1E01, 132297 }, + { 0x1E03, 132301 }, + { 0x2571, 132305 }, + { 0x1DFA, 132310 }, + { 0x2541, 132314 }, + { 0x2540, 132322 }, + { 0x9396, 132329 }, + { 0x9422, 132335 }, + { 0x938E, 132340 }, + { 0x939A, 132346 }, + { 0x1E0B, 132352 }, + { 0x253D, 132357 }, + { 0x1E52, 132362 }, + { 0x9392, 132368 }, + { 0x1DF2, 132374 }, + { 0x940C, 132378 }, + { 0x1E4F, 132383 }, + { 0x939E, 132388 }, + { 0x256E, 132393 }, + { 0x25A0, 132399 }, + { 0x25A1, 132404 }, + { 0x2778, 132410 }, + { 0x2774, 132416 }, + { 0x2573, 132423 }, + { 0x2770, 132427 }, + { 0x276F, 132431 }, + { 0x27BF, 132435 }, + { 0x27B4, 132438 }, + { 0x93CE, 132443 }, + { 0x93CA, 132446 }, + { 0x1E3F, 132450 }, + { 0x1E47, 132453 }, + { 0x9408, 132458 }, + { 0x9413, 132464 }, + { 0x1E39, 132469 }, + { 0x2539, 132472 }, + { 0x1E29, 132476 }, + { 0x2533, 132479 }, + { 0x1E26, 132484 }, + { 0x252F, 132489 }, + { 0x2548, 132495 }, + { 0x1E20, 132498 }, + { 0x9221, 132501 }, + { 0x253B, 132503 }, + { 0x1E32, 132507 }, + { 0x1E23, 132510 }, + { 0x257F, 132515 }, + { 0x2587, 132522 }, + { 0x2598, 132529 }, + { 0x2594, 132537 }, + { 0x2590, 132548 }, + { 0x2583, 132559 }, + { 0x258B, 132566 }, + { 0x2595, 132573 }, + { 0x2599, 132584 }, + { 0x1E17, 132592 }, + { 0x1E18, 132597 }, + { 0x9601, 132602 }, + { 0x93C2, 132605 }, + { 0x1E34, 132608 }, + { 0x9404, 132611 }, + { 0x2772, 132614 }, + { 0x2546, 132617 }, + { 0x93C6, 132619 }, + { 0x93D2, 132622 }, + { 0x2531, 132625 }, + { 0x2542, 132630 }, + { 0x2544, 132635 }, + { 0x2543, 132644 }, + { 0x252D, 132652 }, + { 0x2817, 132659 }, + { 0x252C, 132665 }, + { 0x253C, 132671 }, + { 0x941B, 132676 }, + { 0x93BE, 132681 }, + { 0x9419, 132684 }, + { 0x1E55, 132688 }, + { 0x941D, 132691 }, + { 0x9417, 132696 }, + { 0x278E, 132700 }, + { 0x279E, 132703 }, + { 0x27AC, 132708 }, + { 0x93B2, 132715 }, + { 0x27CE, 132721 }, + { 0x27D0, 132728 }, + { 0x93BA, 132735 }, + { 0x93B6, 132742 }, + { 0x27A6, 132748 }, + { 0x27A6, 132755 }, + { 0x93AE, 132762 }, + { 0x93AA, 132768 }, + { 0x2798, 132774 }, + { 0x27B0, 132778 }, + { 0x922B, 132782 }, + { 0x922A, 132790 }, + { 0x9229, 132797 }, + { 0x922D, 132805 }, + { 0x384B, 132808 }, + { 0x3808, 132811 }, + { 0x3807, 132814 }, + { 0x384C, 132817 }, + { 0x384D, 132820 }, + { 0x3850, 132822 }, + { 0x3855, 132825 }, + { 0x3851, 132828 }, + { 0x3854, 132831 }, + { 0x3853, 132834 }, + { 0x3858, 132837 }, + { 0x384F, 132840 }, + { 0x3857, 132843 }, + { 0x3856, 132846 }, + { 0x3852, 132849 }, + { 0x3845, 132852 }, + { 0x383D, 132856 }, + { 0x3848, 132860 }, + { 0x383F, 132864 }, + { 0x383C, 132868 }, + { 0x3847, 132872 }, + { 0x384A, 132876 }, + { 0x3846, 132880 }, + { 0x383E, 132884 }, + { 0x3849, 132888 }, + { 0x3840, 132892 }, + { 0x3843, 132896 }, + { 0x3841, 132901 }, + { 0x3844, 132906 }, + { 0x3842, 132911 }, + { 0x384E, 132916 }, + { 0x3809, 132919 }, + { 0x3813, 132922 }, + { 0x380B, 132925 }, + { 0x3816, 132928 }, + { 0x380D, 132931 }, + { 0x380A, 132934 }, + { 0x3815, 132937 }, + { 0x3818, 132940 }, + { 0x382F, 132943 }, + { 0x381E, 132946 }, + { 0x382A, 132949 }, + { 0x3814, 132952 }, + { 0x381B, 132955 }, + { 0x3839, 132958 }, + { 0x380C, 132961 }, + { 0x3820, 132964 }, + { 0x3819, 132967 }, + { 0x3834, 132970 }, + { 0x3831, 132973 }, + { 0x382C, 132976 }, + { 0x3817, 132979 }, + { 0x382D, 132982 }, + { 0x3833, 132985 }, + { 0x3838, 132988 }, + { 0x3828, 132991 }, + { 0x380E, 132994 }, + { 0x3835, 132997 }, + { 0x3832, 133000 }, + { 0x3830, 133003 }, + { 0x381F, 133006 }, + { 0x3825, 133009 }, + { 0x382B, 133012 }, + { 0x381C, 133015 }, + { 0x3821, 133018 }, + { 0x381A, 133021 }, + { 0x383A, 133024 }, + { 0x381D, 133027 }, + { 0x3827, 133030 }, + { 0x3822, 133033 }, + { 0x382E, 133036 }, + { 0x3836, 133039 }, + { 0x3837, 133042 }, + { 0x3829, 133045 }, + { 0x3823, 133048 }, + { 0x3826, 133051 }, + { 0x3824, 133054 }, + { 0x3811, 133057 }, + { 0x380F, 133061 }, + { 0x3812, 133065 }, + { 0x3810, 133069 }, + { 0x383B, 133073 }, + { 0x265E, 133077 }, + { 0x1FD4, 133082 }, + { 0x91B1, 133085 }, + { 0x1C86, 133088 }, + { 0x92A5, 133090 }, + { 0x8F06, 133091 }, + { 0x9252, 133092 }, + { 0x90AD, 133094 }, + { 0x95BD, 133095 }, + { 0x2800, 133096 }, + { 0x925C, 133097 }, + { 0x9083, 133101 }, + { 0x1CA3, 133103 }, + { 0x9241, 133105 }, + { 0x7416, 133106 }, + { 0x7417, 133111 }, + { 0x8F83, 133116 }, + { 0x8EFC, 133117 }, + { 0x22AB, 133118 }, + { 0x1FDE, 133120 }, + { 0x924E, 133123 }, + { 0x23D7, 133125 }, + { 0x2787, 133130 }, + { 0x2789, 133136 }, + { 0x95E1, 133142 }, + { 0x263C, 133143 }, + { 0x1FDB, 133145 }, + { 0x918F, 133147 }, + { 0x2238, 133148 }, + { 0x8F9D, 133149 }, + { 0x1EAF, 133151 }, + { 0x1F8B, 133153 }, + { 0x1F8C, 133154 }, + { 0x26C5, 133155 }, + { 0x26C6, 133160 }, + { 0x26C7, 133165 }, + { 0x26C8, 133171 }, + { 0x2725, 133177 }, + { 0x2726, 133183 }, + { 0x7CBA, 133189 }, + { 0x7CBE, 133195 }, + { 0x1EB1, 133201 }, + { 0x0001, 133203 }, + { 0x1CC9, 133205 }, + { 0x95DE, 133208 }, + { 0x9516, 133209 }, + { 0x1C85, 133210 }, + { 0x9013, 133212 }, + { 0x1CA7, 133214 }, + { 0x2BAF, 133216 }, + { 0x2BEC, 133219 }, + { 0x2BAE, 133223 }, + { 0x2BD7, 133225 }, + { 0x2BAD, 133229 }, + { 0x8264, 133231 }, + { 0x8265, 133235 }, + { 0x8268, 133239 }, + { 0x8267, 133243 }, + { 0x8266, 133247 }, + { 0x2BB4, 133251 }, + { 0x2BD8, 133254 }, + { 0x2BB3, 133258 }, + { 0x2BDA, 133261 }, + { 0x2BD9, 133265 }, + { 0x2BB2, 133269 }, + { 0x2BE4, 133272 }, + { 0x2F79, 133278 }, + { 0x2F7E, 133284 }, + { 0x2F82, 133290 }, + { 0x2F7A, 133296 }, + { 0x2F7D, 133302 }, + { 0x2F7C, 133308 }, + { 0x2F81, 133314 }, + { 0x2F80, 133320 }, + { 0x2F7F, 133326 }, + { 0x2F7B, 133332 }, + { 0x2F83, 133338 }, + { 0x2F96, 133344 }, + { 0x2F84, 133350 }, + { 0x2F8C, 133356 }, + { 0x2F87, 133362 }, + { 0x2F88, 133368 }, + { 0x2F8A, 133374 }, + { 0x2F86, 133380 }, + { 0x2F8B, 133386 }, + { 0x2F85, 133392 }, + { 0x2F89, 133398 }, + { 0x2F97, 133404 }, + { 0x2F8D, 133410 }, + { 0x2F92, 133416 }, + { 0x2F8E, 133422 }, + { 0x2F91, 133428 }, + { 0x2F90, 133434 }, + { 0x2F95, 133440 }, + { 0x2F94, 133446 }, + { 0x2F93, 133452 }, + { 0x2F8F, 133458 }, + { 0x2E5D, 133464 }, + { 0x2EF2, 133469 }, + { 0x2EF7, 133475 }, + { 0x2EFB, 133481 }, + { 0x2EF3, 133487 }, + { 0x2EF6, 133493 }, + { 0x2EF5, 133499 }, + { 0x2EFA, 133505 }, + { 0x2EF1, 133511 }, + { 0x2EF9, 133517 }, + { 0x2EF8, 133523 }, + { 0x2EF4, 133529 }, + { 0x2EFC, 133535 }, + { 0x2EFD, 133541 }, + { 0x2F05, 133547 }, + { 0x2F00, 133553 }, + { 0x2F01, 133559 }, + { 0x2F03, 133565 }, + { 0x2EFF, 133571 }, + { 0x2F04, 133577 }, + { 0x2EFE, 133583 }, + { 0x2F02, 133589 }, + { 0x2F06, 133595 }, + { 0x2F07, 133601 }, + { 0x2F09, 133607 }, + { 0x2F08, 133613 }, + { 0x2E5F, 133619 }, + { 0x2E5E, 133624 }, + { 0x2E5C, 133629 }, + { 0x2E5B, 133634 }, + { 0x2E60, 133639 }, + { 0x2E59, 133644 }, + { 0x2E62, 133649 }, + { 0x2E64, 133654 }, + { 0x2E5A, 133659 }, + { 0x2E63, 133664 }, + { 0x2E61, 133669 }, + { 0x2BEB, 133674 }, + { 0x2D42, 133677 }, + { 0x2D35, 133681 }, + { 0x2D39, 133685 }, + { 0x2D36, 133689 }, + { 0x2D38, 133693 }, + { 0x2D41, 133697 }, + { 0x2D3C, 133701 }, + { 0x2D3E, 133705 }, + { 0x2D37, 133709 }, + { 0x2D3B, 133713 }, + { 0x2D3F, 133717 }, + { 0x2D40, 133721 }, + { 0x2D3A, 133725 }, + { 0x2D3D, 133729 }, + { 0x2D33, 133733 }, + { 0x2D34, 133737 }, + { 0x2BA1, 133741 }, + { 0x2B9D, 133746 }, + { 0x2B9F, 133752 }, + { 0x2B9E, 133760 }, + { 0x2BA0, 133766 }, + { 0x2BA8, 133774 }, + { 0x2BAC, 133778 }, + { 0x2BA4, 133782 }, + { 0x2BA2, 133788 }, + { 0x2BA3, 133794 }, + { 0x2BA7, 133800 }, + { 0x2BAA, 133807 }, + { 0x2BA9, 133814 }, + { 0x2BA5, 133820 }, + { 0x2BA6, 133827 }, + { 0x2BAB, 133834 }, + { 0x2D89, 133839 }, + { 0x9034, 133843 }, + { 0x1D94, 133846 }, + { 0x1F11, 133848 }, + { 0x3FDB, 133849 }, + { 0x3FDC, 133852 }, + { 0x3FDD, 133855 }, + { 0x22D0, 133858 }, + { 0x1CBD, 133863 }, + { 0x7CD9, 133864 }, + { 0x7CDB, 133866 }, + { 0x9449, 133871 }, + { 0x7CB7, 133873 }, + { 0x7CBB, 133879 }, + { 0x0DAB, 133885 }, + { 0x0DAD, 133888 }, + { 0x053F, 133893 }, + { 0x7C8F, 133897 }, + { 0x2312, 133899 }, + { 0x23D6, 133902 }, + { 0x9123, 133906 }, + { 0x7379, 133908 }, + { 0x7378, 133911 }, + { 0x7362, 133913 }, + { 0x7375, 133916 }, + { 0x7367, 133921 }, + { 0x7363, 133924 }, + { 0x7376, 133927 }, + { 0x7366, 133932 }, + { 0x7365, 133935 }, + { 0x736A, 133938 }, + { 0x7361, 133941 }, + { 0x7369, 133944 }, + { 0x7368, 133947 }, + { 0x7364, 133950 }, + { 0x7377, 133953 }, + { 0x734E, 133958 }, + { 0x7351, 133962 }, + { 0x7352, 133966 }, + { 0x735A, 133970 }, + { 0x7350, 133974 }, + { 0x734B, 133978 }, + { 0x734A, 133982 }, + { 0x7357, 133986 }, + { 0x734C, 133990 }, + { 0x734F, 133994 }, + { 0x734D, 133998 }, + { 0x7355, 134002 }, + { 0x7341, 134006 }, + { 0x735C, 134010 }, + { 0x735E, 134014 }, + { 0x7348, 134018 }, + { 0x7356, 134022 }, + { 0x735D, 134026 }, + { 0x7342, 134030 }, + { 0x7349, 134034 }, + { 0x7353, 134038 }, + { 0x7343, 134042 }, + { 0x7344, 134046 }, + { 0x7359, 134050 }, + { 0x7360, 134054 }, + { 0x7346, 134058 }, + { 0x735F, 134062 }, + { 0x7357, 134066 }, + { 0x7347, 134070 }, + { 0x7358, 134074 }, + { 0x7358, 134078 }, + { 0x735B, 134082 }, + { 0x7354, 134086 }, + { 0x7345, 134090 }, + { 0x736B, 134094 }, + { 0x736C, 134097 }, + { 0x736D, 134100 }, + { 0x7370, 134103 }, + { 0x7371, 134106 }, + { 0x7373, 134109 }, + { 0x736F, 134112 }, + { 0x7374, 134115 }, + { 0x736E, 134118 }, + { 0x7372, 134121 }, + { 0x737A, 134124 }, + { 0x732E, 134127 }, + { 0x7331, 134131 }, + { 0x7332, 134135 }, + { 0x733A, 134139 }, + { 0x7330, 134143 }, + { 0x732B, 134147 }, + { 0x732A, 134151 }, + { 0x7337, 134155 }, + { 0x732C, 134159 }, + { 0x732F, 134163 }, + { 0x732D, 134167 }, + { 0x7335, 134171 }, + { 0x7321, 134175 }, + { 0x733C, 134179 }, + { 0x733E, 134183 }, + { 0x7328, 134187 }, + { 0x7336, 134191 }, + { 0x733D, 134195 }, + { 0x7322, 134199 }, + { 0x7329, 134203 }, + { 0x7333, 134207 }, + { 0x7323, 134211 }, + { 0x7324, 134215 }, + { 0x7339, 134219 }, + { 0x7340, 134223 }, + { 0x7326, 134227 }, + { 0x733F, 134231 }, + { 0x7337, 134235 }, + { 0x7327, 134239 }, + { 0x7338, 134243 }, + { 0x7338, 134247 }, + { 0x733B, 134251 }, + { 0x7334, 134255 }, + { 0x7325, 134259 }, + { 0x737B, 134263 }, + { 0x943F, 134266 }, + { 0x50EE, 134268 }, + { 0x50F0, 134271 }, + { 0x50ED, 134274 }, + { 0x50EC, 134277 }, + { 0x50EF, 134280 }, + { 0x50E8, 134283 }, + { 0x50E2, 134287 }, + { 0x50EA, 134291 }, + { 0x50E4, 134295 }, + { 0x50E1, 134299 }, + { 0x50E9, 134303 }, + { 0x50EB, 134307 }, + { 0x50E3, 134311 }, + { 0x50E5, 134315 }, + { 0x50E6, 134319 }, + { 0x50E7, 134324 }, + { 0x50F2, 134329 }, + { 0x50B2, 134334 }, + { 0x50BA, 134337 }, + { 0x50B4, 134340 }, + { 0x50BC, 134343 }, + { 0x50B6, 134346 }, + { 0x50B3, 134349 }, + { 0x50BB, 134352 }, + { 0x50BD, 134355 }, + { 0x50D4, 134358 }, + { 0x50C3, 134361 }, + { 0x50CF, 134364 }, + { 0x50C0, 134367 }, + { 0x50DE, 134370 }, + { 0x50B5, 134373 }, + { 0x50C5, 134376 }, + { 0x50BE, 134379 }, + { 0x50D9, 134382 }, + { 0x50D6, 134385 }, + { 0x50D1, 134388 }, + { 0x50D2, 134391 }, + { 0x50D8, 134394 }, + { 0x50DD, 134397 }, + { 0x50CD, 134400 }, + { 0x50B7, 134403 }, + { 0x50DA, 134406 }, + { 0x50D7, 134409 }, + { 0x50D5, 134412 }, + { 0x50C4, 134415 }, + { 0x50CA, 134418 }, + { 0x50D0, 134421 }, + { 0x50C1, 134424 }, + { 0x50C6, 134427 }, + { 0x50BF, 134430 }, + { 0x50DF, 134433 }, + { 0x50C2, 134436 }, + { 0x50CC, 134439 }, + { 0x50C7, 134442 }, + { 0x50D3, 134445 }, + { 0x50E0, 134448 }, + { 0x50DB, 134451 }, + { 0x50DC, 134454 }, + { 0x50CE, 134457 }, + { 0x50C8, 134460 }, + { 0x50CB, 134463 }, + { 0x50C9, 134466 }, + { 0x50B8, 134469 }, + { 0x50B9, 134473 }, + { 0x50F1, 134477 }, + { 0x9264, 134479 }, + { 0x931E, 134482 }, + { 0x27E5, 134483 }, + { 0x27E4, 134486 }, + { 0x27E3, 134491 }, + { 0x2A05, 134494 }, + { 0x2A43, 134495 }, + { 0x2DE9, 134497 }, + { 0x91D6, 134499 }, + { 0x1F5D, 134501 }, + { 0x1C88, 134502 }, + { 0x224E, 134504 }, + { 0x3FDF, 134506 }, + { 0x227C, 134508 }, + { 0x95B3, 134509 }, + { 0x91FB, 134510 }, + { 0x22E6, 134512 }, + { 0x8886, 134513 }, + { 0x8887, 134518 }, + { 0x8884, 134523 }, + { 0x8885, 134527 }, + { 0x886C, 134531 }, + { 0x8866, 134534 }, + { 0x8867, 134538 }, + { 0x88A3, 134542 }, + { 0x88A4, 134547 }, + { 0x8760, 134552 }, + { 0x8762, 134555 }, + { 0x8761, 134558 }, + { 0x887F, 134561 }, + { 0x8868, 134563 }, + { 0x886A, 134567 }, + { 0x8863, 134571 }, + { 0x8869, 134574 }, + { 0x8865, 134578 }, + { 0x8864, 134581 }, + { 0x886B, 134584 }, + { 0x8857, 134588 }, + { 0x8858, 134596 }, + { 0x8856, 134605 }, + { 0x88DB, 134612 }, + { 0x88DC, 134615 }, + { 0x88DD, 134618 }, + { 0x88DE, 134621 }, + { 0x88DF, 134624 }, + { 0x88D7, 134627 }, + { 0x88BA, 134630 }, + { 0x884E, 134632 }, + { 0x884F, 134634 }, + { 0x8855, 134637 }, + { 0x8851, 134641 }, + { 0x8853, 134645 }, + { 0x8850, 134649 }, + { 0x8854, 134653 }, + { 0x8852, 134657 }, + { 0x88C6, 134661 }, + { 0x88C7, 134664 }, + { 0x88C8, 134667 }, + { 0x88C9, 134670 }, + { 0x88CA, 134673 }, + { 0x88CB, 134676 }, + { 0x88CC, 134679 }, + { 0x88C5, 134682 }, + { 0x88A2, 134685 }, + { 0x88B9, 134689 }, + { 0x8881, 134691 }, + { 0x8880, 134694 }, + { 0x8883, 134697 }, + { 0x8882, 134700 }, + { 0x875D, 134703 }, + { 0x875F, 134706 }, + { 0x875E, 134709 }, + { 0x88D9, 134712 }, + { 0x88D6, 134714 }, + { 0x876A, 134716 }, + { 0x876C, 134720 }, + { 0x876B, 134724 }, + { 0x876D, 134728 }, + { 0x876E, 134732 }, + { 0x8757, 134735 }, + { 0x8759, 134738 }, + { 0x8758, 134741 }, + { 0x889C, 134744 }, + { 0x889D, 134747 }, + { 0x889E, 134751 }, + { 0x8896, 134755 }, + { 0x8898, 134759 }, + { 0x8897, 134764 }, + { 0x8893, 134769 }, + { 0x8894, 134773 }, + { 0x8895, 134777 }, + { 0x8899, 134781 }, + { 0x889B, 134785 }, + { 0x889A, 134790 }, + { 0x8890, 134795 }, + { 0x8892, 134798 }, + { 0x8891, 134802 }, + { 0x888D, 134806 }, + { 0x888F, 134809 }, + { 0x888E, 134813 }, + { 0x889F, 134817 }, + { 0x88A1, 134820 }, + { 0x88A0, 134824 }, + { 0x888C, 134828 }, + { 0x888B, 134832 }, + { 0x888A, 134836 }, + { 0x88A5, 134840 }, + { 0x88A7, 134843 }, + { 0x88A6, 134847 }, + { 0x88B0, 134851 }, + { 0x88B4, 134853 }, + { 0x88B5, 134857 }, + { 0x88B2, 134862 }, + { 0x88B3, 134866 }, + { 0x88B6, 134871 }, + { 0x88B1, 134875 }, + { 0x887E, 134878 }, + { 0x887C, 134882 }, + { 0x887D, 134886 }, + { 0x8754, 134890 }, + { 0x8756, 134893 }, + { 0x8755, 134896 }, + { 0x88C4, 134899 }, + { 0x8889, 134906 }, + { 0x8888, 134909 }, + { 0x8879, 134912 }, + { 0x887B, 134915 }, + { 0x887A, 134918 }, + { 0x885E, 134921 }, + { 0x885D, 134926 }, + { 0x885F, 134931 }, + { 0x885C, 134936 }, + { 0x88CD, 134941 }, + { 0x875A, 134943 }, + { 0x875C, 134946 }, + { 0x875B, 134949 }, + { 0x88AA, 134952 }, + { 0x88AB, 134957 }, + { 0x88AD, 134963 }, + { 0x88AF, 134968 }, + { 0x88AE, 134973 }, + { 0x88AC, 134978 }, + { 0x88A9, 134983 }, + { 0x88A8, 134987 }, + { 0x8846, 134992 }, + { 0x8847, 134995 }, + { 0x884C, 134998 }, + { 0x8848, 135003 }, + { 0x884D, 135006 }, + { 0x8849, 135009 }, + { 0x8845, 135012 }, + { 0x8844, 135016 }, + { 0x884A, 135020 }, + { 0x884B, 135023 }, + { 0x876F, 135027 }, + { 0x8765, 135031 }, + { 0x8767, 135035 }, + { 0x8766, 135039 }, + { 0x8768, 135043 }, + { 0x8769, 135047 }, + { 0x8764, 135050 }, + { 0x8763, 135053 }, + { 0x8859, 135056 }, + { 0x885B, 135060 }, + { 0x885A, 135064 }, + { 0x8861, 135068 }, + { 0x8860, 135071 }, + { 0x8862, 135074 }, + { 0x86BC, 135077 }, + { 0x86C0, 135079 }, + { 0x86A2, 135083 }, + { 0x86A3, 135088 }, + { 0x86BB, 135094 }, + { 0x86BF, 135097 }, + { 0x86BD, 135102 }, + { 0x86C1, 135107 }, + { 0x8651, 135112 }, + { 0x870F, 135115 }, + { 0x873B, 135120 }, + { 0x873C, 135124 }, + { 0x86BE, 135129 }, + { 0x86C2, 135133 }, + { 0x871F, 135137 }, + { 0x88D3, 135142 }, + { 0x88D2, 135146 }, + { 0x88D5, 135149 }, + { 0x88D4, 135153 }, + { 0x88D1, 135156 }, + { 0x88D0, 135159 }, + { 0x88E0, 135162 }, + { 0x88E1, 135165 }, + { 0x88E2, 135168 }, + { 0x88E3, 135171 }, + { 0x88E4, 135174 }, + { 0x88E5, 135177 }, + { 0x88E6, 135180 }, + { 0x88E7, 135183 }, + { 0x88E8, 135186 }, + { 0x88E9, 135189 }, + { 0x88EA, 135192 }, + { 0x88EB, 135195 }, + { 0x88EC, 135198 }, + { 0x88ED, 135201 }, + { 0x88EE, 135204 }, + { 0x88BC, 135207 }, + { 0x88BD, 135211 }, + { 0x88C0, 135215 }, + { 0x886D, 135220 }, + { 0x886E, 135223 }, + { 0x886F, 135226 }, + { 0x86B5, 135229 }, + { 0x86B7, 135231 }, + { 0x8698, 135235 }, + { 0x8738, 135240 }, + { 0x86B6, 135247 }, + { 0x86B8, 135251 }, + { 0x8725, 135255 }, + { 0x8726, 135261 }, + { 0x8752, 135268 }, + { 0x8699, 135270 }, + { 0x8753, 135276 }, + { 0x86FD, 135279 }, + { 0x86FA, 135283 }, + { 0x8706, 135287 }, + { 0x8707, 135291 }, + { 0x86FF, 135295 }, + { 0x8703, 135299 }, + { 0x8705, 135303 }, + { 0x8704, 135309 }, + { 0x86FE, 135314 }, + { 0x864F, 135319 }, + { 0x8662, 135322 }, + { 0x8673, 135328 }, + { 0x8674, 135336 }, + { 0x8655, 135344 }, + { 0x866C, 135348 }, + { 0x8709, 135354 }, + { 0x8735, 135359 }, + { 0x872B, 135364 }, + { 0x8731, 135369 }, + { 0x8730, 135376 }, + { 0x8732, 135383 }, + { 0x872F, 135390 }, + { 0x872D, 135397 }, + { 0x872E, 135404 }, + { 0x8739, 135411 }, + { 0x8737, 135418 }, + { 0x868A, 135425 }, + { 0x8689, 135433 }, + { 0x873A, 135441 }, + { 0x8686, 135446 }, + { 0x8680, 135453 }, + { 0x8692, 135460 }, + { 0x868B, 135467 }, + { 0x8734, 135474 }, + { 0x8733, 135481 }, + { 0x8736, 135488 }, + { 0x8659, 135493 }, + { 0x865A, 135497 }, + { 0x865B, 135501 }, + { 0x8663, 135506 }, + { 0x8675, 135512 }, + { 0x865D, 135520 }, + { 0x8676, 135524 }, + { 0x865F, 135532 }, + { 0x8670, 135537 }, + { 0x86D5, 135544 }, + { 0x86DA, 135549 }, + { 0x86DB, 135555 }, + { 0x86F8, 135561 }, + { 0x866D, 135567 }, + { 0x8671, 135572 }, + { 0x868E, 135578 }, + { 0x868D, 135584 }, + { 0x8677, 135591 }, + { 0x867A, 135597 }, + { 0x8679, 135603 }, + { 0x8678, 135609 }, + { 0x868C, 135615 }, + { 0x8661, 135622 }, + { 0x8672, 135627 }, + { 0x86F3, 135635 }, + { 0x8660, 135640 }, + { 0x8669, 135646 }, + { 0x8682, 135651 }, + { 0x866F, 135658 }, + { 0x8664, 135665 }, + { 0x8665, 135670 }, + { 0x867C, 135677 }, + { 0x867E, 135684 }, + { 0x867D, 135692 }, + { 0x8683, 135700 }, + { 0x8667, 135707 }, + { 0x8684, 135713 }, + { 0x8668, 135721 }, + { 0x8681, 135727 }, + { 0x8666, 135735 }, + { 0x8658, 135742 }, + { 0x8744, 135747 }, + { 0x8745, 135750 }, + { 0x874E, 135754 }, + { 0x8751, 135760 }, + { 0x8748, 135767 }, + { 0x8746, 135772 }, + { 0x8747, 135777 }, + { 0x874D, 135782 }, + { 0x8750, 135788 }, + { 0x8657, 135794 }, + { 0x874F, 135800 }, + { 0x86E2, 135806 }, + { 0x874C, 135812 }, + { 0x874A, 135818 }, + { 0x867B, 135824 }, + { 0x874B, 135831 }, + { 0x8749, 135837 }, + { 0x86E1, 135841 }, + { 0x86E7, 135845 }, + { 0x86DD, 135849 }, + { 0x86E0, 135853 }, + { 0x86DF, 135859 }, + { 0x86DE, 135865 }, + { 0x86EF, 135871 }, + { 0x86EB, 135875 }, + { 0x86E9, 135880 }, + { 0x86E6, 135884 }, + { 0x86E8, 135889 }, + { 0x8715, 135894 }, + { 0x8718, 135898 }, + { 0x866B, 135904 }, + { 0x8713, 135910 }, + { 0x871C, 135914 }, + { 0x868F, 135919 }, + { 0x8690, 135927 }, + { 0x8691, 135935 }, + { 0x8685, 135942 }, + { 0x867F, 135949 }, + { 0x871A, 135956 }, + { 0x8687, 135961 }, + { 0x8688, 135968 }, + { 0x871B, 135975 }, + { 0x8717, 135979 }, + { 0x86A9, 135984 }, + { 0x869B, 135986 }, + { 0x869F, 135991 }, + { 0x869D, 135997 }, + { 0x86A1, 136004 }, + { 0x86A6, 136011 }, + { 0x86A8, 136017 }, + { 0x86A7, 136025 }, + { 0x8693, 136033 }, + { 0x8694, 136037 }, + { 0x8695, 136042 }, + { 0x8696, 136047 }, + { 0x8697, 136052 }, + { 0x86AB, 136058 }, + { 0x869C, 136061 }, + { 0x86A0, 136067 }, + { 0x869E, 136074 }, + { 0x86AD, 136082 }, + { 0x86B0, 136087 }, + { 0x86B1, 136093 }, + { 0x86B2, 136097 }, + { 0x86B3, 136103 }, + { 0x86B4, 136110 }, + { 0x86AE, 136114 }, + { 0x86AC, 136118 }, + { 0x86AF, 136122 }, + { 0x86AA, 136126 }, + { 0x86BA, 136131 }, + { 0x8708, 136133 }, + { 0x870D, 136137 }, + { 0x870C, 136143 }, + { 0x870E, 136149 }, + { 0x8729, 136155 }, + { 0x8728, 136161 }, + { 0x8727, 136168 }, + { 0x8719, 136175 }, + { 0x86B9, 136179 }, + { 0x86C6, 136182 }, + { 0x86C8, 136184 }, + { 0x86A5, 136188 }, + { 0x8701, 136193 }, + { 0x8652, 136197 }, + { 0x86C7, 136200 }, + { 0x86C9, 136204 }, + { 0x86E4, 136208 }, + { 0x88D8, 136212 }, + { 0x88BE, 136214 }, + { 0x88BB, 136219 }, + { 0x88BF, 136221 }, + { 0x86D4, 136226 }, + { 0x86FC, 136228 }, + { 0x8702, 136236 }, + { 0x8654, 136240 }, + { 0x8712, 136243 }, + { 0x8711, 136248 }, + { 0x8743, 136254 }, + { 0x8742, 136258 }, + { 0x8741, 136263 }, + { 0x86D8, 136268 }, + { 0x86F7, 136273 }, + { 0x86E5, 136278 }, + { 0x86F2, 136282 }, + { 0x86EE, 136286 }, + { 0x86ED, 136293 }, + { 0x8723, 136301 }, + { 0x8722, 136306 }, + { 0x8721, 136312 }, + { 0x86CC, 136318 }, + { 0x86D1, 136320 }, + { 0x86A4, 136324 }, + { 0x869A, 136330 }, + { 0x86CA, 136335 }, + { 0x86D0, 136338 }, + { 0x86CE, 136343 }, + { 0x86CB, 136348 }, + { 0x86F6, 136353 }, + { 0x86FB, 136356 }, + { 0x8653, 136364 }, + { 0x8710, 136367 }, + { 0x873F, 136372 }, + { 0x873D, 136376 }, + { 0x872C, 136381 }, + { 0x873E, 136386 }, + { 0x8740, 136391 }, + { 0x872A, 136396 }, + { 0x86D7, 136400 }, + { 0x86DC, 136405 }, + { 0x86F5, 136411 }, + { 0x86CD, 136416 }, + { 0x86CF, 136419 }, + { 0x86D2, 136423 }, + { 0x86D3, 136429 }, + { 0x86D9, 136435 }, + { 0x86F1, 136438 }, + { 0x86EC, 136442 }, + { 0x86EA, 136447 }, + { 0x8714, 136451 }, + { 0x8720, 136454 }, + { 0x86C5, 136459 }, + { 0x8700, 136461 }, + { 0x8650, 136465 }, + { 0x8656, 136468 }, + { 0x870A, 136472 }, + { 0x865C, 136477 }, + { 0x865E, 136481 }, + { 0x86D6, 136485 }, + { 0x86F9, 136490 }, + { 0x866E, 136496 }, + { 0x86F4, 136501 }, + { 0x866A, 136506 }, + { 0x86E3, 136511 }, + { 0x86F0, 136515 }, + { 0x8716, 136519 }, + { 0x871D, 136523 }, + { 0x8724, 136528 }, + { 0x88DA, 136534 }, + { 0x86C4, 136536 }, + { 0x86C3, 136538 }, + { 0x870B, 136541 }, + { 0x871E, 136547 }, + { 0x8770, 136553 }, + { 0x8771, 136558 }, + { 0x8774, 136563 }, + { 0x8775, 136569 }, + { 0x8772, 136575 }, + { 0x8773, 136579 }, + { 0x8776, 136583 }, + { 0x88C2, 136589 }, + { 0x88C1, 136593 }, + { 0x88C3, 136597 }, + { 0x87A2, 136600 }, + { 0x87A1, 136605 }, + { 0x87A3, 136610 }, + { 0x87A0, 136615 }, + { 0x879B, 136618 }, + { 0x879A, 136622 }, + { 0x879C, 136626 }, + { 0x879E, 136630 }, + { 0x879D, 136634 }, + { 0x879F, 136638 }, + { 0x8876, 136642 }, + { 0x8878, 136645 }, + { 0x8870, 136648 }, + { 0x8871, 136651 }, + { 0x8872, 136655 }, + { 0x87A6, 136659 }, + { 0x87A4, 136663 }, + { 0x87A5, 136667 }, + { 0x87A7, 136671 }, + { 0x87AE, 136675 }, + { 0x87AC, 136680 }, + { 0x87AD, 136685 }, + { 0x87AF, 136690 }, + { 0x87B2, 136695 }, + { 0x87B0, 136700 }, + { 0x87B1, 136705 }, + { 0x87B3, 136710 }, + { 0x87AA, 136715 }, + { 0x87A8, 136719 }, + { 0x87A9, 136723 }, + { 0x87AB, 136727 }, + { 0x87D6, 136731 }, + { 0x87D4, 136734 }, + { 0x87D3, 136738 }, + { 0x87D5, 136742 }, + { 0x87D1, 136746 }, + { 0x87D0, 136750 }, + { 0x87D2, 136754 }, + { 0x8877, 136758 }, + { 0x8873, 136761 }, + { 0x8874, 136764 }, + { 0x8875, 136768 }, + { 0x88CE, 136772 }, + { 0x8834, 136775 }, + { 0x8832, 136781 }, + { 0x8835, 136787 }, + { 0x8833, 136793 }, + { 0x8793, 136799 }, + { 0x8791, 136803 }, + { 0x8792, 136807 }, + { 0x88B7, 136811 }, + { 0x8789, 136814 }, + { 0x8787, 136818 }, + { 0x8788, 136822 }, + { 0x87E3, 136826 }, + { 0x87E1, 136830 }, + { 0x87E2, 136834 }, + { 0x87FD, 136838 }, + { 0x87F6, 136843 }, + { 0x87E6, 136849 }, + { 0x87E4, 136853 }, + { 0x87E7, 136857 }, + { 0x87E5, 136862 }, + { 0x87FE, 136866 }, + { 0x87F7, 136871 }, + { 0x87EA, 136877 }, + { 0x87E8, 136883 }, + { 0x87E9, 136889 }, + { 0x87ED, 136895 }, + { 0x87EB, 136901 }, + { 0x87EC, 136907 }, + { 0x87FF, 136913 }, + { 0x87F8, 136918 }, + { 0x8805, 136924 }, + { 0x8803, 136930 }, + { 0x8804, 136936 }, + { 0x8790, 136942 }, + { 0x878E, 136946 }, + { 0x878F, 136950 }, + { 0x8782, 136954 }, + { 0x87EE, 136957 }, + { 0x87FC, 136962 }, + { 0x87F5, 136967 }, + { 0x87D9, 136973 }, + { 0x87D7, 136978 }, + { 0x87D8, 136983 }, + { 0x87DA, 136988 }, + { 0x87DD, 136993 }, + { 0x87DB, 136998 }, + { 0x87DC, 137003 }, + { 0x87DE, 137008 }, + { 0x87DF, 137013 }, + { 0x87E0, 137019 }, + { 0x8799, 137025 }, + { 0x8797, 137029 }, + { 0x8798, 137033 }, + { 0x883D, 137037 }, + { 0x883C, 137043 }, + { 0x878C, 137049 }, + { 0x878A, 137053 }, + { 0x878B, 137057 }, + { 0x878D, 137061 }, + { 0x87EF, 137065 }, + { 0x87F0, 137070 }, + { 0x877F, 137075 }, + { 0x877E, 137080 }, + { 0x8780, 137084 }, + { 0x8781, 137088 }, + { 0x8841, 137094 }, + { 0x8840, 137099 }, + { 0x8777, 137104 }, + { 0x877D, 137108 }, + { 0x877B, 137113 }, + { 0x8779, 137118 }, + { 0x877A, 137123 }, + { 0x877C, 137128 }, + { 0x8784, 137133 }, + { 0x8783, 137138 }, + { 0x8785, 137143 }, + { 0x8786, 137147 }, + { 0x8796, 137153 }, + { 0x8794, 137157 }, + { 0x8795, 137161 }, + { 0x87F4, 137165 }, + { 0x87F2, 137168 }, + { 0x8801, 137171 }, + { 0x87FA, 137176 }, + { 0x87F1, 137182 }, + { 0x8800, 137185 }, + { 0x87F9, 137190 }, + { 0x87F3, 137196 }, + { 0x8802, 137199 }, + { 0x87FB, 137204 }, + { 0x88CF, 137210 }, + { 0x883B, 137213 }, + { 0x8838, 137221 }, + { 0x8839, 137229 }, + { 0x8836, 137237 }, + { 0x883A, 137245 }, + { 0x8837, 137253 }, + { 0x87C9, 137261 }, + { 0x87C7, 137265 }, + { 0x87C8, 137269 }, + { 0x88B8, 137273 }, + { 0x87C2, 137276 }, + { 0x8829, 137279 }, + { 0x8818, 137283 }, + { 0x8817, 137290 }, + { 0x881A, 137297 }, + { 0x8819, 137305 }, + { 0x8809, 137313 }, + { 0x880B, 137320 }, + { 0x8808, 137327 }, + { 0x880A, 137334 }, + { 0x882A, 137341 }, + { 0x881E, 137345 }, + { 0x881C, 137352 }, + { 0x881D, 137359 }, + { 0x881B, 137366 }, + { 0x880F, 137373 }, + { 0x880D, 137380 }, + { 0x880E, 137387 }, + { 0x880C, 137394 }, + { 0x882D, 137401 }, + { 0x882C, 137405 }, + { 0x882B, 137409 }, + { 0x8820, 137413 }, + { 0x881F, 137419 }, + { 0x8811, 137425 }, + { 0x8810, 137431 }, + { 0x87C6, 137437 }, + { 0x87BD, 137440 }, + { 0x8826, 137443 }, + { 0x8824, 137447 }, + { 0x8825, 137451 }, + { 0x8816, 137455 }, + { 0x8815, 137461 }, + { 0x8807, 137467 }, + { 0x8806, 137473 }, + { 0x8827, 137479 }, + { 0x8828, 137483 }, + { 0x87CF, 137487 }, + { 0x87CD, 137491 }, + { 0x87CE, 137495 }, + { 0x883F, 137499 }, + { 0x883E, 137506 }, + { 0x87C5, 137513 }, + { 0x87C3, 137517 }, + { 0x87C4, 137521 }, + { 0x87BA, 137525 }, + { 0x87B9, 137530 }, + { 0x87BB, 137534 }, + { 0x87BC, 137538 }, + { 0x8843, 137544 }, + { 0x8842, 137551 }, + { 0x8778, 137558 }, + { 0x87B8, 137562 }, + { 0x87B6, 137567 }, + { 0x87B4, 137572 }, + { 0x87B5, 137577 }, + { 0x87B7, 137582 }, + { 0x87BF, 137587 }, + { 0x87BE, 137592 }, + { 0x87C1, 137597 }, + { 0x87C0, 137603 }, + { 0x87CC, 137608 }, + { 0x87CA, 137612 }, + { 0x87CB, 137616 }, + { 0x8831, 137620 }, + { 0x882F, 137624 }, + { 0x8822, 137627 }, + { 0x8813, 137632 }, + { 0x882E, 137637 }, + { 0x8821, 137640 }, + { 0x8812, 137645 }, + { 0x8830, 137650 }, + { 0x8823, 137653 }, + { 0x8814, 137658 }, + { 0x8F75, 137663 }, + { 0x959A, 137664 }, + { 0x0078, 137665 }, + { 0x1CF3, 137667 }, + { 0x0071, 137669 }, + { 0x1CF2, 137671 }, + { 0x1CF1, 137673 }, + { 0x1CFA, 137675 }, + { 0x1CF6, 137678 }, + { 0x1CF7, 137680 }, + { 0x1CEF, 137683 }, + { 0x1CF5, 137685 }, + { 0x1CF0, 137687 }, + { 0x1CFC, 137692 }, + { 0x1CF8, 137697 }, + { 0x1CFB, 137699 }, + { 0x1CF4, 137702 }, + { 0x0072, 137704 }, + { 0x1CF9, 137706 }, + { 0x8ED4, 137709 }, + { 0x2707, 137710 }, + { 0x27FA, 137712 }, + { 0x90ED, 137714 }, + { 0x7E3C, 137717 }, + { 0x7CAD, 137719 }, + { 0x90EF, 137721 }, + { 0x9297, 137725 }, + { 0x7CA8, 137728 }, + { 0x7CC0, 137731 }, + { 0x7CDF, 137734 }, + { 0x7C9E, 137737 }, + { 0x7C47, 137740 }, + { 0x9296, 137742 }, + { 0x9295, 137744 }, + { 0x2219, 137747 }, + { 0x221A, 137753 }, + { 0x91F6, 137759 }, + { 0x9184, 137761 }, + { 0x1D73, 137762 }, + { 0x93E7, 137765 }, + { 0x93FF, 137770 }, + { 0x93F7, 137777 }, + { 0x93DF, 137783 }, + { 0x93EF, 137789 }, + { 0x93E6, 137795 }, + { 0x93FE, 137800 }, + { 0x93F6, 137807 }, + { 0x93DE, 137813 }, + { 0x93EE, 137819 }, + { 0x93E8, 137825 }, + { 0x9400, 137830 }, + { 0x93F8, 137837 }, + { 0x93E0, 137843 }, + { 0x93F0, 137849 }, + { 0x93E9, 137855 }, + { 0x9401, 137860 }, + { 0x93F9, 137867 }, + { 0x93E1, 137873 }, + { 0x93F1, 137879 }, + { 0x93E3, 137885 }, + { 0x93FB, 137889 }, + { 0x93F3, 137895 }, + { 0x93DB, 137900 }, + { 0x93EB, 137905 }, + { 0x93E5, 137910 }, + { 0x93FD, 137914 }, + { 0x93F5, 137920 }, + { 0x93DD, 137925 }, + { 0x93ED, 137930 }, + { 0x93E2, 137935 }, + { 0x93FA, 137939 }, + { 0x93F2, 137945 }, + { 0x93DA, 137950 }, + { 0x93EA, 137955 }, + { 0x93E4, 137960 }, + { 0x93FC, 137964 }, + { 0x93F4, 137970 }, + { 0x93DC, 137975 }, + { 0x93EC, 137980 }, + { 0x1DA8, 137985 }, + { 0x266B, 137986 }, + { 0x05A3, 137989 }, + { 0x05A2, 137994 }, + { 0x059F, 137998 }, + { 0x05FA, 138001 }, + { 0x05FF, 138004 }, + { 0x05FB, 138007 }, + { 0x05FE, 138010 }, + { 0x05FD, 138013 }, + { 0x0602, 138016 }, + { 0x05F9, 138019 }, + { 0x0601, 138022 }, + { 0x0600, 138025 }, + { 0x05FC, 138028 }, + { 0x05A0, 138031 }, + { 0x230E, 138034 }, + { 0x1D88, 138038 }, + { 0x1D67, 138041 }, + { 0x1D6C, 138044 }, + { 0x1D77, 138047 }, + { 0x1D83, 138050 }, + { 0x918C, 138053 }, + { 0x925A, 138055 }, + { 0x902A, 138057 }, + { 0x1F84, 138059 }, + { 0x58B2, 138060 }, + { 0x58B3, 138063 }, + { 0x58B4, 138066 }, + { 0x58B5, 138069 }, + { 0x58B6, 138072 }, + { 0x58B7, 138075 }, + { 0x58B8, 138078 }, + { 0x58B9, 138081 }, + { 0x58BA, 138084 }, + { 0x58BB, 138087 }, + { 0x58BC, 138090 }, + { 0x58BE, 138093 }, + { 0x58BF, 138096 }, + { 0x58C0, 138099 }, + { 0x58C1, 138102 }, + { 0x58C2, 138105 }, + { 0x58C3, 138108 }, + { 0x58C4, 138111 }, + { 0x58C5, 138114 }, + { 0x58C6, 138117 }, + { 0x58C7, 138120 }, + { 0x58C8, 138123 }, + { 0x58C9, 138126 }, + { 0x58CA, 138129 }, + { 0x58CB, 138132 }, + { 0x58CC, 138135 }, + { 0x58CD, 138138 }, + { 0x58CE, 138141 }, + { 0x58CF, 138144 }, + { 0x58D0, 138147 }, + { 0x58D1, 138150 }, + { 0x58D2, 138153 }, + { 0x58D3, 138156 }, + { 0x58D4, 138159 }, + { 0x58D5, 138162 }, + { 0x58D6, 138165 }, + { 0x58D7, 138168 }, + { 0x58D8, 138171 }, + { 0x58D9, 138174 }, + { 0x58DA, 138177 }, + { 0x58DB, 138180 }, + { 0x58DC, 138183 }, + { 0x58DD, 138186 }, + { 0x58DE, 138189 }, + { 0x58DF, 138192 }, + { 0x58E0, 138195 }, + { 0x58E1, 138198 }, + { 0x58E2, 138201 }, + { 0x58E3, 138204 }, + { 0x58E4, 138207 }, + { 0x58E5, 138210 }, + { 0x58E6, 138213 }, + { 0x58E7, 138216 }, + { 0x58E8, 138219 }, + { 0x58E9, 138222 }, + { 0x58EA, 138225 }, + { 0x58EB, 138228 }, + { 0x58EC, 138231 }, + { 0x58ED, 138234 }, + { 0x58EE, 138237 }, + { 0x58EF, 138240 }, + { 0x58F1, 138243 }, + { 0x58F2, 138246 }, + { 0x58F3, 138249 }, + { 0x58F4, 138252 }, + { 0x58F5, 138255 }, + { 0x58F6, 138258 }, + { 0x58F7, 138261 }, + { 0x58F8, 138264 }, + { 0x58F9, 138267 }, + { 0x58FA, 138270 }, + { 0x58FB, 138273 }, + { 0x58FC, 138276 }, + { 0x58FD, 138279 }, + { 0x58FE, 138282 }, + { 0x58FF, 138285 }, + { 0x5900, 138288 }, + { 0x5901, 138291 }, + { 0x5902, 138294 }, + { 0x5903, 138297 }, + { 0x5904, 138300 }, + { 0x5905, 138303 }, + { 0x5906, 138306 }, + { 0x5907, 138309 }, + { 0x5908, 138312 }, + { 0x5909, 138315 }, + { 0x590A, 138318 }, + { 0x590B, 138321 }, + { 0x590C, 138324 }, + { 0x590D, 138327 }, + { 0x590E, 138330 }, + { 0x590F, 138333 }, + { 0x5910, 138336 }, + { 0x5911, 138339 }, + { 0x5912, 138342 }, + { 0x5913, 138345 }, + { 0x5914, 138348 }, + { 0x58BD, 138351 }, + { 0x58F0, 138354 }, + { 0x91D8, 138357 }, + { 0x91D1, 138361 }, + { 0x260B, 138363 }, + { 0x261F, 138365 }, + { 0x261B, 138368 }, + { 0x261D, 138371 }, + { 0x261E, 138374 }, + { 0x261A, 138377 }, + { 0x261C, 138380 }, + { 0x22C8, 138383 }, + { 0x8FD8, 138384 }, + { 0x23D8, 138387 }, + { 0x1EBC, 138392 }, + { 0x26AA, 138396 }, + { 0x26AE, 138401 }, + { 0x26B0, 138409 }, + { 0x26AC, 138418 }, + { 0x1ECE, 138426 }, + { 0x1ECA, 138429 }, + { 0x26B2, 138433 }, + { 0x26B6, 138436 }, + { 0x26B4, 138440 }, + { 0x1EC0, 138446 }, + { 0x1F3E, 138451 }, + { 0x1EBE, 138456 }, + { 0x001E, 138460 }, + { 0x1F2E, 138462 }, + { 0x26A6, 138465 }, + { 0x26A8, 138469 }, + { 0x26BA, 138474 }, + { 0x26BC, 138479 }, + { 0x26C0, 138484 }, + { 0x26BE, 138493 }, + { 0x25A4, 138499 }, + { 0x26B8, 138503 }, + { 0x1F32, 138509 }, + { 0x26D1, 138514 }, + { 0x26D3, 138517 }, + { 0x26D5, 138521 }, + { 0x26D0, 138528 }, + { 0x91FC, 138531 }, + { 0x94C9, 138533 }, + { 0x000D, 138534 }, + { 0x2A08, 138535 }, + { 0x1E80, 138536 }, + { 0x266C, 138537 }, + { 0x2670, 138540 }, + { 0x266F, 138544 }, + { 0x2675, 138547 }, + { 0x2673, 138552 }, + { 0x2677, 138555 }, + { 0x8532, 138561 }, + { 0x8530, 138565 }, + { 0x8531, 138569 }, + { 0x861E, 138573 }, + { 0x8623, 138577 }, + { 0x861F, 138581 }, + { 0x8622, 138585 }, + { 0x8621, 138589 }, + { 0x8626, 138593 }, + { 0x861D, 138597 }, + { 0x8625, 138601 }, + { 0x8624, 138605 }, + { 0x8620, 138609 }, + { 0x852F, 138613 }, + { 0x8512, 138617 }, + { 0x8285, 138620 }, + { 0x8286, 138624 }, + { 0x8287, 138628 }, + { 0x8288, 138632 }, + { 0x8289, 138636 }, + { 0x828A, 138640 }, + { 0x828B, 138644 }, + { 0x828C, 138648 }, + { 0x828D, 138652 }, + { 0x828E, 138656 }, + { 0x828F, 138660 }, + { 0x8290, 138664 }, + { 0x8291, 138668 }, + { 0x8292, 138672 }, + { 0x8293, 138676 }, + { 0x8294, 138680 }, + { 0x8295, 138684 }, + { 0x8296, 138688 }, + { 0x8297, 138692 }, + { 0x8298, 138696 }, + { 0x8299, 138700 }, + { 0x829A, 138704 }, + { 0x829B, 138708 }, + { 0x829C, 138712 }, + { 0x829D, 138716 }, + { 0x829E, 138720 }, + { 0x851E, 138724 }, + { 0x851F, 138728 }, + { 0x8522, 138732 }, + { 0x8520, 138736 }, + { 0x8529, 138740 }, + { 0x8519, 138744 }, + { 0x8528, 138748 }, + { 0x852A, 138752 }, + { 0x8523, 138756 }, + { 0x8526, 138760 }, + { 0x8514, 138764 }, + { 0x851B, 138768 }, + { 0x8518, 138772 }, + { 0x8513, 138776 }, + { 0x8516, 138780 }, + { 0x8524, 138784 }, + { 0x8515, 138789 }, + { 0x851C, 138793 }, + { 0x851D, 138797 }, + { 0x852B, 138801 }, + { 0x8525, 138805 }, + { 0x851A, 138809 }, + { 0x861C, 138813 }, + { 0x8517, 138817 }, + { 0x8521, 138821 }, + { 0x8527, 138825 }, + { 0x852E, 138829 }, + { 0x85A6, 138833 }, + { 0x85A4, 138838 }, + { 0x85A5, 138843 }, + { 0x85A3, 138848 }, + { 0x8586, 138853 }, + { 0x82EC, 138857 }, + { 0x82ED, 138862 }, + { 0x82EE, 138867 }, + { 0x82EF, 138872 }, + { 0x82F0, 138877 }, + { 0x82F1, 138882 }, + { 0x82F2, 138887 }, + { 0x82F3, 138892 }, + { 0x82F4, 138897 }, + { 0x82F5, 138902 }, + { 0x82F6, 138907 }, + { 0x82F7, 138912 }, + { 0x82F8, 138917 }, + { 0x82F9, 138922 }, + { 0x82FA, 138927 }, + { 0x82FB, 138932 }, + { 0x82FC, 138937 }, + { 0x82FD, 138942 }, + { 0x82FE, 138947 }, + { 0x82FF, 138952 }, + { 0x8300, 138957 }, + { 0x8301, 138962 }, + { 0x8302, 138967 }, + { 0x8303, 138972 }, + { 0x8304, 138977 }, + { 0x8305, 138982 }, + { 0x8592, 138987 }, + { 0x8593, 138992 }, + { 0x8596, 138997 }, + { 0x8594, 139002 }, + { 0x859D, 139007 }, + { 0x858D, 139012 }, + { 0x859C, 139017 }, + { 0x859E, 139022 }, + { 0x8597, 139027 }, + { 0x859A, 139032 }, + { 0x8588, 139037 }, + { 0x858F, 139042 }, + { 0x858C, 139047 }, + { 0x8587, 139052 }, + { 0x858A, 139057 }, + { 0x8598, 139062 }, + { 0x8589, 139068 }, + { 0x8590, 139073 }, + { 0x8591, 139078 }, + { 0x859F, 139083 }, + { 0x8599, 139088 }, + { 0x858E, 139093 }, + { 0x858B, 139098 }, + { 0x8595, 139103 }, + { 0x859B, 139108 }, + { 0x85A2, 139113 }, + { 0x82D2, 139118 }, + { 0x82D3, 139123 }, + { 0x82D4, 139128 }, + { 0x82D5, 139133 }, + { 0x82D6, 139138 }, + { 0x82D7, 139143 }, + { 0x82D8, 139148 }, + { 0x82D9, 139153 }, + { 0x82DA, 139158 }, + { 0x82DB, 139163 }, + { 0x82DC, 139168 }, + { 0x82DD, 139173 }, + { 0x82DE, 139178 }, + { 0x82DF, 139183 }, + { 0x82E0, 139188 }, + { 0x82E1, 139193 }, + { 0x82E2, 139198 }, + { 0x82E3, 139203 }, + { 0x82E4, 139208 }, + { 0x82E5, 139213 }, + { 0x82E6, 139218 }, + { 0x82E7, 139223 }, + { 0x82E8, 139228 }, + { 0x82E9, 139233 }, + { 0x82EA, 139238 }, + { 0x82EB, 139243 }, + { 0x8578, 139248 }, + { 0x8579, 139253 }, + { 0x857C, 139258 }, + { 0x857A, 139263 }, + { 0x8583, 139268 }, + { 0x8573, 139273 }, + { 0x8582, 139278 }, + { 0x8584, 139283 }, + { 0x857D, 139288 }, + { 0x8580, 139293 }, + { 0x856E, 139298 }, + { 0x8575, 139303 }, + { 0x8572, 139308 }, + { 0x856D, 139313 }, + { 0x8570, 139318 }, + { 0x856F, 139323 }, + { 0x8576, 139328 }, + { 0x8577, 139333 }, + { 0x8585, 139338 }, + { 0x857F, 139343 }, + { 0x8574, 139348 }, + { 0x857E, 139353 }, + { 0x8571, 139359 }, + { 0x857B, 139364 }, + { 0x8581, 139369 }, + { 0x85A1, 139374 }, + { 0x85A0, 139379 }, + { 0x8349, 139384 }, + { 0x834A, 139389 }, + { 0x834B, 139394 }, + { 0x834C, 139399 }, + { 0x834D, 139404 }, + { 0x834E, 139409 }, + { 0x834F, 139414 }, + { 0x8350, 139419 }, + { 0x8351, 139424 }, + { 0x8352, 139429 }, + { 0x8353, 139434 }, + { 0x8354, 139439 }, + { 0x8355, 139444 }, + { 0x8356, 139449 }, + { 0x8357, 139454 }, + { 0x8358, 139459 }, + { 0x8359, 139464 }, + { 0x835A, 139469 }, + { 0x835B, 139474 }, + { 0x835C, 139479 }, + { 0x835D, 139484 }, + { 0x835E, 139489 }, + { 0x835F, 139494 }, + { 0x8360, 139499 }, + { 0x8361, 139504 }, + { 0x8362, 139509 }, + { 0x832F, 139514 }, + { 0x8330, 139519 }, + { 0x8331, 139524 }, + { 0x8332, 139529 }, + { 0x8333, 139534 }, + { 0x8334, 139539 }, + { 0x8335, 139544 }, + { 0x8336, 139549 }, + { 0x8337, 139554 }, + { 0x8338, 139559 }, + { 0x8339, 139564 }, + { 0x833A, 139569 }, + { 0x833B, 139574 }, + { 0x833C, 139579 }, + { 0x833D, 139584 }, + { 0x833E, 139589 }, + { 0x833F, 139594 }, + { 0x8340, 139599 }, + { 0x8341, 139604 }, + { 0x8342, 139609 }, + { 0x8343, 139614 }, + { 0x8344, 139619 }, + { 0x8345, 139624 }, + { 0x8346, 139629 }, + { 0x8347, 139634 }, + { 0x8348, 139639 }, + { 0x826B, 139644 }, + { 0x826C, 139648 }, + { 0x826D, 139652 }, + { 0x826E, 139656 }, + { 0x826F, 139660 }, + { 0x8270, 139664 }, + { 0x8271, 139668 }, + { 0x8272, 139672 }, + { 0x8273, 139676 }, + { 0x8274, 139680 }, + { 0x8275, 139684 }, + { 0x8276, 139688 }, + { 0x8277, 139692 }, + { 0x8278, 139696 }, + { 0x8279, 139700 }, + { 0x827A, 139704 }, + { 0x827B, 139708 }, + { 0x827C, 139712 }, + { 0x827D, 139716 }, + { 0x827E, 139720 }, + { 0x827F, 139724 }, + { 0x8280, 139728 }, + { 0x8281, 139732 }, + { 0x8282, 139736 }, + { 0x8283, 139740 }, + { 0x8284, 139744 }, + { 0x8504, 139748 }, + { 0x8505, 139752 }, + { 0x8508, 139756 }, + { 0x8506, 139760 }, + { 0x850F, 139764 }, + { 0x84FF, 139768 }, + { 0x850E, 139772 }, + { 0x8510, 139776 }, + { 0x8509, 139780 }, + { 0x850C, 139784 }, + { 0x84FA, 139788 }, + { 0x8501, 139792 }, + { 0x84FE, 139796 }, + { 0x84F9, 139800 }, + { 0x84FC, 139804 }, + { 0x84FB, 139808 }, + { 0x8502, 139812 }, + { 0x8503, 139816 }, + { 0x8511, 139820 }, + { 0x850B, 139824 }, + { 0x8500, 139828 }, + { 0x850A, 139832 }, + { 0x861B, 139837 }, + { 0x84FD, 139841 }, + { 0x8507, 139845 }, + { 0x850D, 139849 }, + { 0x852D, 139853 }, + { 0x83D9, 139857 }, + { 0x83DA, 139862 }, + { 0x83DB, 139867 }, + { 0x83DC, 139872 }, + { 0x83DD, 139877 }, + { 0x83DE, 139882 }, + { 0x83DF, 139887 }, + { 0x83E0, 139892 }, + { 0x83E1, 139897 }, + { 0x83E2, 139902 }, + { 0x83E3, 139907 }, + { 0x83E4, 139912 }, + { 0x83E5, 139917 }, + { 0x83E6, 139922 }, + { 0x83E7, 139927 }, + { 0x83E8, 139932 }, + { 0x83E9, 139937 }, + { 0x83EA, 139942 }, + { 0x83EB, 139947 }, + { 0x83EC, 139952 }, + { 0x83ED, 139957 }, + { 0x83EE, 139962 }, + { 0x83EF, 139967 }, + { 0x83F0, 139972 }, + { 0x83F1, 139977 }, + { 0x83F2, 139982 }, + { 0x83BF, 139987 }, + { 0x83C0, 139992 }, + { 0x83C1, 139997 }, + { 0x83C2, 140002 }, + { 0x83C3, 140007 }, + { 0x83C4, 140012 }, + { 0x83C5, 140017 }, + { 0x83C6, 140022 }, + { 0x83C7, 140027 }, + { 0x83C8, 140032 }, + { 0x83C9, 140037 }, + { 0x83CA, 140042 }, + { 0x83CB, 140047 }, + { 0x83CC, 140052 }, + { 0x83CD, 140057 }, + { 0x83CE, 140062 }, + { 0x83CF, 140067 }, + { 0x83D0, 140072 }, + { 0x83D1, 140077 }, + { 0x83D2, 140082 }, + { 0x83D3, 140087 }, + { 0x83D4, 140092 }, + { 0x83D5, 140097 }, + { 0x83D6, 140102 }, + { 0x83D7, 140107 }, + { 0x83D8, 140112 }, + { 0x852C, 140117 }, + { 0x2414, 140121 }, + { 0x2412, 140125 }, + { 0x2418, 140130 }, + { 0x2416, 140136 }, + { 0x241A, 140141 }, + { 0x2415, 140145 }, + { 0x2413, 140149 }, + { 0x2419, 140154 }, + { 0x2417, 140160 }, + { 0x241B, 140165 }, + { 0x856C, 140169 }, + { 0x856A, 140173 }, + { 0x856B, 140177 }, + { 0x8569, 140181 }, + { 0x854C, 140185 }, + { 0x82B9, 140188 }, + { 0x82BA, 140192 }, + { 0x82BB, 140196 }, + { 0x82BC, 140200 }, + { 0x82BD, 140204 }, + { 0x82BE, 140208 }, + { 0x82BF, 140212 }, + { 0x82C0, 140216 }, + { 0x82C1, 140220 }, + { 0x82C2, 140224 }, + { 0x82C3, 140228 }, + { 0x82C4, 140232 }, + { 0x82C5, 140236 }, + { 0x82C6, 140240 }, + { 0x82C7, 140244 }, + { 0x82C8, 140248 }, + { 0x82C9, 140252 }, + { 0x82CA, 140256 }, + { 0x82CB, 140260 }, + { 0x82CC, 140264 }, + { 0x82CD, 140268 }, + { 0x82CE, 140272 }, + { 0x82CF, 140276 }, + { 0x82D0, 140280 }, + { 0x82D1, 140284 }, + { 0x8558, 140288 }, + { 0x8559, 140292 }, + { 0x855C, 140296 }, + { 0x855A, 140300 }, + { 0x8563, 140304 }, + { 0x8553, 140308 }, + { 0x8562, 140312 }, + { 0x8564, 140316 }, + { 0x855D, 140320 }, + { 0x8560, 140324 }, + { 0x854E, 140328 }, + { 0x8555, 140332 }, + { 0x8552, 140336 }, + { 0x854D, 140340 }, + { 0x8550, 140344 }, + { 0x855E, 140348 }, + { 0x854F, 140353 }, + { 0x8556, 140357 }, + { 0x8557, 140361 }, + { 0x8565, 140365 }, + { 0x855F, 140369 }, + { 0x8554, 140373 }, + { 0x84F7, 140377 }, + { 0x84F8, 140382 }, + { 0x8551, 140387 }, + { 0x855B, 140391 }, + { 0x8561, 140395 }, + { 0x8568, 140399 }, + { 0x829F, 140403 }, + { 0x82A0, 140407 }, + { 0x82A1, 140411 }, + { 0x82A2, 140415 }, + { 0x82A3, 140419 }, + { 0x82A4, 140423 }, + { 0x82A5, 140427 }, + { 0x82A6, 140431 }, + { 0x82A7, 140435 }, + { 0x82A8, 140439 }, + { 0x82A9, 140443 }, + { 0x82AA, 140447 }, + { 0x82AB, 140451 }, + { 0x82AC, 140455 }, + { 0x82AD, 140459 }, + { 0x82AE, 140463 }, + { 0x82AF, 140467 }, + { 0x82B0, 140471 }, + { 0x82B1, 140475 }, + { 0x82B2, 140479 }, + { 0x82B3, 140483 }, + { 0x82B4, 140487 }, + { 0x82B5, 140491 }, + { 0x82B6, 140495 }, + { 0x82B7, 140499 }, + { 0x82B8, 140503 }, + { 0x853E, 140507 }, + { 0x853F, 140511 }, + { 0x8542, 140515 }, + { 0x8540, 140519 }, + { 0x8549, 140523 }, + { 0x8539, 140527 }, + { 0x8548, 140531 }, + { 0x854A, 140535 }, + { 0x8543, 140539 }, + { 0x8546, 140543 }, + { 0x8534, 140547 }, + { 0x853B, 140551 }, + { 0x8538, 140555 }, + { 0x8533, 140559 }, + { 0x8536, 140563 }, + { 0x8535, 140567 }, + { 0x853C, 140571 }, + { 0x853D, 140575 }, + { 0x854B, 140579 }, + { 0x8545, 140583 }, + { 0x853A, 140587 }, + { 0x8544, 140591 }, + { 0x8537, 140596 }, + { 0x8541, 140600 }, + { 0x8547, 140604 }, + { 0x8567, 140608 }, + { 0x8566, 140612 }, + { 0x23F7, 140616 }, + { 0x8318, 140619 }, + { 0x8319, 140623 }, + { 0x831A, 140627 }, + { 0x831B, 140631 }, + { 0x831C, 140635 }, + { 0x831D, 140639 }, + { 0x831E, 140643 }, + { 0x831F, 140647 }, + { 0x8320, 140651 }, + { 0x8321, 140655 }, + { 0x8322, 140659 }, + { 0x8323, 140663 }, + { 0x8324, 140667 }, + { 0x8325, 140671 }, + { 0x8326, 140675 }, + { 0x8327, 140679 }, + { 0x8328, 140683 }, + { 0x8329, 140687 }, + { 0x832A, 140691 }, + { 0x832B, 140695 }, + { 0x832C, 140699 }, + { 0x832D, 140703 }, + { 0x832E, 140707 }, + { 0x8306, 140711 }, + { 0x8307, 140715 }, + { 0x8308, 140719 }, + { 0x8309, 140723 }, + { 0x830A, 140727 }, + { 0x830B, 140731 }, + { 0x830C, 140735 }, + { 0x830D, 140739 }, + { 0x830E, 140743 }, + { 0x830F, 140747 }, + { 0x8310, 140751 }, + { 0x8311, 140755 }, + { 0x8312, 140759 }, + { 0x8313, 140763 }, + { 0x8314, 140767 }, + { 0x8315, 140771 }, + { 0x8316, 140775 }, + { 0x8317, 140779 }, + { 0x23F9, 140783 }, + { 0x8378, 140786 }, + { 0x8379, 140790 }, + { 0x837A, 140794 }, + { 0x837B, 140798 }, + { 0x837C, 140802 }, + { 0x837D, 140806 }, + { 0x837E, 140810 }, + { 0x837F, 140814 }, + { 0x8380, 140818 }, + { 0x8381, 140822 }, + { 0x8382, 140826 }, + { 0x8383, 140830 }, + { 0x8384, 140834 }, + { 0x8385, 140838 }, + { 0x8386, 140842 }, + { 0x8387, 140846 }, + { 0x8388, 140850 }, + { 0x8389, 140854 }, + { 0x838A, 140858 }, + { 0x838B, 140862 }, + { 0x838C, 140866 }, + { 0x838D, 140870 }, + { 0x838E, 140874 }, + { 0x838F, 140878 }, + { 0x8390, 140882 }, + { 0x8391, 140886 }, + { 0x8363, 140890 }, + { 0x8364, 140894 }, + { 0x8365, 140898 }, + { 0x8366, 140902 }, + { 0x8367, 140906 }, + { 0x8368, 140910 }, + { 0x8369, 140914 }, + { 0x836A, 140918 }, + { 0x836B, 140922 }, + { 0x836C, 140926 }, + { 0x836D, 140930 }, + { 0x836E, 140934 }, + { 0x836F, 140938 }, + { 0x8370, 140942 }, + { 0x8371, 140946 }, + { 0x8372, 140950 }, + { 0x8373, 140954 }, + { 0x8374, 140958 }, + { 0x8375, 140962 }, + { 0x8376, 140966 }, + { 0x8377, 140970 }, + { 0x8646, 140974 }, + { 0x864B, 140978 }, + { 0x8647, 140982 }, + { 0x864A, 140986 }, + { 0x8649, 140990 }, + { 0x864E, 140994 }, + { 0x8645, 140998 }, + { 0x864D, 141002 }, + { 0x864C, 141006 }, + { 0x8648, 141010 }, + { 0x84DD, 141014 }, + { 0x84DE, 141018 }, + { 0x84DF, 141022 }, + { 0x84E0, 141026 }, + { 0x84E1, 141030 }, + { 0x84E2, 141034 }, + { 0x84E3, 141038 }, + { 0x84E4, 141042 }, + { 0x84E5, 141046 }, + { 0x84E6, 141050 }, + { 0x84E7, 141054 }, + { 0x84E8, 141058 }, + { 0x84E9, 141062 }, + { 0x84EA, 141066 }, + { 0x84EB, 141070 }, + { 0x84EC, 141074 }, + { 0x84ED, 141078 }, + { 0x84EE, 141082 }, + { 0x84EF, 141086 }, + { 0x84F0, 141090 }, + { 0x84F1, 141094 }, + { 0x84F2, 141098 }, + { 0x84F3, 141102 }, + { 0x84F4, 141106 }, + { 0x84F5, 141110 }, + { 0x84F6, 141114 }, + { 0x84C3, 141118 }, + { 0x84C4, 141122 }, + { 0x84C5, 141126 }, + { 0x84C6, 141130 }, + { 0x84C7, 141134 }, + { 0x84C8, 141138 }, + { 0x84C9, 141142 }, + { 0x84CA, 141146 }, + { 0x84CB, 141150 }, + { 0x84CC, 141154 }, + { 0x84CD, 141158 }, + { 0x84CE, 141162 }, + { 0x84CF, 141166 }, + { 0x84D0, 141170 }, + { 0x84D1, 141174 }, + { 0x84D2, 141178 }, + { 0x84D3, 141182 }, + { 0x84D4, 141186 }, + { 0x84D5, 141190 }, + { 0x84D6, 141194 }, + { 0x84D7, 141198 }, + { 0x84D8, 141202 }, + { 0x84D9, 141206 }, + { 0x84DA, 141210 }, + { 0x84DB, 141214 }, + { 0x84DC, 141218 }, + { 0x85E0, 141222 }, + { 0x85DE, 141227 }, + { 0x85DF, 141232 }, + { 0x863C, 141237 }, + { 0x8641, 141242 }, + { 0x863D, 141247 }, + { 0x8640, 141252 }, + { 0x863F, 141257 }, + { 0x8644, 141262 }, + { 0x863B, 141267 }, + { 0x8643, 141272 }, + { 0x8642, 141277 }, + { 0x863E, 141282 }, + { 0x85DD, 141287 }, + { 0x85C0, 141292 }, + { 0x8441, 141296 }, + { 0x8442, 141301 }, + { 0x8443, 141306 }, + { 0x8444, 141311 }, + { 0x8445, 141316 }, + { 0x8446, 141321 }, + { 0x8447, 141326 }, + { 0x8448, 141331 }, + { 0x8449, 141336 }, + { 0x844A, 141341 }, + { 0x844B, 141346 }, + { 0x844C, 141351 }, + { 0x844D, 141356 }, + { 0x844E, 141361 }, + { 0x844F, 141366 }, + { 0x8450, 141371 }, + { 0x8451, 141376 }, + { 0x8452, 141381 }, + { 0x8453, 141386 }, + { 0x8454, 141391 }, + { 0x8455, 141396 }, + { 0x8456, 141401 }, + { 0x8457, 141406 }, + { 0x8458, 141411 }, + { 0x8459, 141416 }, + { 0x845A, 141421 }, + { 0x85CC, 141426 }, + { 0x85CD, 141431 }, + { 0x85D0, 141436 }, + { 0x85CE, 141441 }, + { 0x85D7, 141446 }, + { 0x85C7, 141451 }, + { 0x85D6, 141456 }, + { 0x85D8, 141461 }, + { 0x85D1, 141466 }, + { 0x85D4, 141471 }, + { 0x85C2, 141476 }, + { 0x85C9, 141481 }, + { 0x85C6, 141486 }, + { 0x85C1, 141491 }, + { 0x85C4, 141496 }, + { 0x85D2, 141501 }, + { 0x85C3, 141507 }, + { 0x85CA, 141512 }, + { 0x85CB, 141517 }, + { 0x85D9, 141522 }, + { 0x85D3, 141527 }, + { 0x85C8, 141532 }, + { 0x85C5, 141537 }, + { 0x85CF, 141542 }, + { 0x85D5, 141547 }, + { 0x85DC, 141552 }, + { 0x861A, 141557 }, + { 0x8618, 141563 }, + { 0x8619, 141569 }, + { 0x8617, 141575 }, + { 0x85FA, 141581 }, + { 0x84A9, 141586 }, + { 0x84AA, 141592 }, + { 0x84AB, 141598 }, + { 0x84AC, 141604 }, + { 0x84AD, 141610 }, + { 0x84AE, 141616 }, + { 0x84AF, 141622 }, + { 0x84B0, 141628 }, + { 0x84B1, 141634 }, + { 0x84B2, 141640 }, + { 0x84B3, 141646 }, + { 0x84B4, 141652 }, + { 0x84B5, 141658 }, + { 0x84B6, 141664 }, + { 0x84B7, 141670 }, + { 0x84B8, 141676 }, + { 0x84B9, 141682 }, + { 0x84BA, 141688 }, + { 0x84BB, 141694 }, + { 0x84BC, 141700 }, + { 0x84BD, 141706 }, + { 0x84BE, 141712 }, + { 0x84BF, 141718 }, + { 0x84C0, 141724 }, + { 0x84C1, 141730 }, + { 0x84C2, 141736 }, + { 0x8606, 141742 }, + { 0x8607, 141748 }, + { 0x860A, 141754 }, + { 0x8608, 141760 }, + { 0x8611, 141766 }, + { 0x8601, 141772 }, + { 0x8610, 141778 }, + { 0x8612, 141784 }, + { 0x860B, 141790 }, + { 0x860E, 141796 }, + { 0x85FC, 141802 }, + { 0x8603, 141808 }, + { 0x8600, 141814 }, + { 0x85FB, 141820 }, + { 0x85FE, 141826 }, + { 0x860C, 141832 }, + { 0x85FD, 141839 }, + { 0x8604, 141845 }, + { 0x8605, 141851 }, + { 0x8613, 141857 }, + { 0x860D, 141863 }, + { 0x8602, 141869 }, + { 0x85FF, 141875 }, + { 0x8609, 141881 }, + { 0x860F, 141887 }, + { 0x8616, 141893 }, + { 0x848F, 141899 }, + { 0x8490, 141905 }, + { 0x8491, 141911 }, + { 0x8492, 141917 }, + { 0x8493, 141923 }, + { 0x8494, 141929 }, + { 0x8495, 141935 }, + { 0x8496, 141941 }, + { 0x8497, 141947 }, + { 0x8498, 141953 }, + { 0x8499, 141959 }, + { 0x849A, 141965 }, + { 0x849B, 141971 }, + { 0x849C, 141977 }, + { 0x849D, 141983 }, + { 0x849E, 141989 }, + { 0x849F, 141995 }, + { 0x84A0, 142001 }, + { 0x84A1, 142007 }, + { 0x84A2, 142013 }, + { 0x84A3, 142019 }, + { 0x84A4, 142025 }, + { 0x84A5, 142031 }, + { 0x84A6, 142037 }, + { 0x84A7, 142043 }, + { 0x84A8, 142049 }, + { 0x85EC, 142055 }, + { 0x85ED, 142061 }, + { 0x85F0, 142067 }, + { 0x85EE, 142073 }, + { 0x85F7, 142079 }, + { 0x85E7, 142085 }, + { 0x85F6, 142091 }, + { 0x85F8, 142097 }, + { 0x85F1, 142103 }, + { 0x85F4, 142109 }, + { 0x85E2, 142115 }, + { 0x85E9, 142121 }, + { 0x85E6, 142127 }, + { 0x85E1, 142133 }, + { 0x85E4, 142139 }, + { 0x85E3, 142145 }, + { 0x85EA, 142151 }, + { 0x85EB, 142157 }, + { 0x85F9, 142163 }, + { 0x85F3, 142169 }, + { 0x85E8, 142175 }, + { 0x85F2, 142181 }, + { 0x85E5, 142188 }, + { 0x85EF, 142194 }, + { 0x85F5, 142200 }, + { 0x8615, 142206 }, + { 0x8614, 142212 }, + { 0x8427, 142218 }, + { 0x8428, 142223 }, + { 0x8429, 142228 }, + { 0x842A, 142233 }, + { 0x842B, 142238 }, + { 0x842C, 142243 }, + { 0x842D, 142248 }, + { 0x842E, 142253 }, + { 0x842F, 142258 }, + { 0x8430, 142263 }, + { 0x8431, 142268 }, + { 0x8432, 142273 }, + { 0x8433, 142278 }, + { 0x8434, 142283 }, + { 0x8435, 142288 }, + { 0x8436, 142293 }, + { 0x8437, 142298 }, + { 0x8438, 142303 }, + { 0x8439, 142308 }, + { 0x843A, 142313 }, + { 0x843B, 142318 }, + { 0x843C, 142323 }, + { 0x843D, 142328 }, + { 0x843E, 142333 }, + { 0x843F, 142338 }, + { 0x8440, 142343 }, + { 0x85B2, 142348 }, + { 0x85B3, 142353 }, + { 0x85B6, 142358 }, + { 0x85B4, 142363 }, + { 0x85BD, 142368 }, + { 0x85AD, 142373 }, + { 0x85BC, 142378 }, + { 0x85BE, 142383 }, + { 0x85B7, 142388 }, + { 0x85BA, 142393 }, + { 0x85A8, 142398 }, + { 0x85AF, 142403 }, + { 0x85AC, 142408 }, + { 0x85A7, 142413 }, + { 0x85AA, 142418 }, + { 0x85A9, 142423 }, + { 0x85B0, 142428 }, + { 0x85B1, 142433 }, + { 0x85BF, 142438 }, + { 0x85B9, 142443 }, + { 0x85AE, 142448 }, + { 0x85B8, 142453 }, + { 0x85AB, 142459 }, + { 0x85B5, 142464 }, + { 0x85BB, 142469 }, + { 0x85DB, 142474 }, + { 0x85DA, 142479 }, + { 0x8632, 142484 }, + { 0x8637, 142488 }, + { 0x8633, 142492 }, + { 0x8636, 142496 }, + { 0x8635, 142500 }, + { 0x863A, 142504 }, + { 0x8631, 142508 }, + { 0x8639, 142512 }, + { 0x8638, 142516 }, + { 0x8634, 142520 }, + { 0x840D, 142524 }, + { 0x840E, 142528 }, + { 0x840F, 142532 }, + { 0x8410, 142536 }, + { 0x8411, 142540 }, + { 0x8412, 142544 }, + { 0x8413, 142548 }, + { 0x8414, 142552 }, + { 0x8415, 142556 }, + { 0x8416, 142560 }, + { 0x8417, 142564 }, + { 0x8418, 142568 }, + { 0x8419, 142572 }, + { 0x841A, 142576 }, + { 0x841B, 142580 }, + { 0x841C, 142584 }, + { 0x841D, 142588 }, + { 0x841E, 142592 }, + { 0x841F, 142596 }, + { 0x8420, 142600 }, + { 0x8421, 142604 }, + { 0x8422, 142608 }, + { 0x8423, 142612 }, + { 0x8424, 142616 }, + { 0x8425, 142620 }, + { 0x8426, 142624 }, + { 0x8475, 142628 }, + { 0x8476, 142633 }, + { 0x8477, 142638 }, + { 0x8478, 142643 }, + { 0x8479, 142648 }, + { 0x847A, 142653 }, + { 0x847B, 142658 }, + { 0x847C, 142663 }, + { 0x847D, 142668 }, + { 0x847E, 142673 }, + { 0x847F, 142678 }, + { 0x8480, 142683 }, + { 0x8481, 142688 }, + { 0x8482, 142693 }, + { 0x8483, 142698 }, + { 0x8484, 142703 }, + { 0x8485, 142708 }, + { 0x8486, 142713 }, + { 0x8487, 142718 }, + { 0x8488, 142723 }, + { 0x8489, 142728 }, + { 0x848A, 142733 }, + { 0x848B, 142738 }, + { 0x848C, 142743 }, + { 0x848D, 142748 }, + { 0x848E, 142753 }, + { 0x845B, 142758 }, + { 0x845C, 142763 }, + { 0x845D, 142768 }, + { 0x845E, 142773 }, + { 0x845F, 142778 }, + { 0x8460, 142783 }, + { 0x8461, 142788 }, + { 0x8462, 142793 }, + { 0x8463, 142798 }, + { 0x8464, 142803 }, + { 0x8465, 142808 }, + { 0x8466, 142813 }, + { 0x8467, 142818 }, + { 0x8468, 142823 }, + { 0x8469, 142828 }, + { 0x846A, 142833 }, + { 0x846B, 142838 }, + { 0x846C, 142843 }, + { 0x846D, 142848 }, + { 0x846E, 142853 }, + { 0x846F, 142858 }, + { 0x8470, 142863 }, + { 0x8471, 142868 }, + { 0x8472, 142873 }, + { 0x8473, 142878 }, + { 0x8474, 142883 }, + { 0x83F3, 142888 }, + { 0x83F4, 142892 }, + { 0x83F5, 142896 }, + { 0x83F6, 142900 }, + { 0x83F7, 142904 }, + { 0x83F8, 142908 }, + { 0x83F9, 142912 }, + { 0x83FA, 142916 }, + { 0x83FB, 142920 }, + { 0x83FC, 142924 }, + { 0x83FD, 142928 }, + { 0x83FE, 142932 }, + { 0x83FF, 142936 }, + { 0x8400, 142940 }, + { 0x8401, 142944 }, + { 0x8402, 142948 }, + { 0x8403, 142952 }, + { 0x8404, 142956 }, + { 0x8405, 142960 }, + { 0x8406, 142964 }, + { 0x8407, 142968 }, + { 0x8408, 142972 }, + { 0x8409, 142976 }, + { 0x840A, 142980 }, + { 0x840B, 142984 }, + { 0x840C, 142988 }, + { 0x8628, 142992 }, + { 0x862D, 142996 }, + { 0x8629, 143000 }, + { 0x862C, 143004 }, + { 0x862B, 143008 }, + { 0x8630, 143012 }, + { 0x8627, 143016 }, + { 0x862F, 143020 }, + { 0x862E, 143024 }, + { 0x862A, 143028 }, + { 0x83A5, 143032 }, + { 0x83A6, 143036 }, + { 0x83A7, 143040 }, + { 0x83A8, 143044 }, + { 0x83A9, 143048 }, + { 0x83AA, 143052 }, + { 0x83AB, 143056 }, + { 0x83AC, 143060 }, + { 0x83AD, 143064 }, + { 0x83AE, 143068 }, + { 0x83AF, 143072 }, + { 0x83B0, 143076 }, + { 0x83B1, 143080 }, + { 0x83B2, 143084 }, + { 0x83B3, 143088 }, + { 0x83B4, 143092 }, + { 0x83B5, 143096 }, + { 0x83B6, 143100 }, + { 0x83B7, 143104 }, + { 0x83B8, 143108 }, + { 0x83B9, 143112 }, + { 0x83BA, 143116 }, + { 0x83BB, 143120 }, + { 0x83BC, 143124 }, + { 0x83BD, 143128 }, + { 0x83BE, 143132 }, + { 0x8392, 143136 }, + { 0x8393, 143140 }, + { 0x8394, 143144 }, + { 0x8395, 143148 }, + { 0x8396, 143152 }, + { 0x8397, 143156 }, + { 0x8398, 143160 }, + { 0x8399, 143164 }, + { 0x839A, 143168 }, + { 0x839B, 143172 }, + { 0x839C, 143176 }, + { 0x839D, 143180 }, + { 0x839E, 143184 }, + { 0x839F, 143188 }, + { 0x83A0, 143192 }, + { 0x83A1, 143196 }, + { 0x83A2, 143200 }, + { 0x83A3, 143204 }, + { 0x83A4, 143208 }, + { 0x1C91, 143212 }, + { 0x1D79, 143214 }, + { 0x3E34, 143216 }, + { 0x3E35, 143222 }, + { 0x3E36, 143228 }, + { 0x3E33, 143234 }, + { 0x3E42, 143241 }, + { 0x3E3E, 143248 }, + { 0x3E3A, 143256 }, + { 0x3E46, 143263 }, + { 0x3E20, 143271 }, + { 0x3E44, 143279 }, + { 0x3E40, 143286 }, + { 0x3E4A, 143294 }, + { 0x3E3C, 143301 }, + { 0x3E38, 143309 }, + { 0x3E37, 143315 }, + { 0x3E1C, 143322 }, + { 0x3E19, 143327 }, + { 0x3E43, 143332 }, + { 0x3E3F, 143339 }, + { 0x3E3B, 143347 }, + { 0x3E47, 143354 }, + { 0x3E21, 143362 }, + { 0x3E21, 143370 }, + { 0x3E45, 143378 }, + { 0x3E41, 143385 }, + { 0x3E4B, 143393 }, + { 0x3E3D, 143400 }, + { 0x3E39, 143408 }, + { 0x3E1F, 143414 }, + { 0x3E1D, 143420 }, + { 0x3E22, 143425 }, + { 0x3E1E, 143431 }, + { 0x3E1B, 143437 }, + { 0x3E1A, 143444 }, + { 0x1E74, 143450 }, + { 0x924C, 143452 }, + { 0x7CDA, 143454 }, + { 0x7CDC, 143456 }, + { 0x944A, 143461 }, + { 0x7CB9, 143463 }, + { 0x7CBD, 143469 }, + { 0x0DAA, 143475 }, + { 0x0DAC, 143478 }, + { 0x053E, 143483 }, + { 0x7C90, 143487 }, + { 0x2311, 143489 }, + { 0x23D5, 143492 }, + { 0x2620, 143496 }, + { 0x2A32, 143497 }, + { 0x203B, 143500 }, + { 0x94E7, 143501 }, + { 0x1C84, 143502 }, + { 0x2234, 143504 }, + { 0x23E8, 143505 }, + { 0x943E, 143508 }, + { 0x1E0D, 143510 }, + { 0x1E11, 143514 }, + { 0x256C, 143518 }, + { 0x241E, 143522 }, + { 0x1E8A, 143526 }, + { 0x90B7, 143529 }, + { 0x263D, 143536 }, + { 0x27B9, 143538 }, + { 0x27B8, 143543 }, + { 0x279B, 143548 }, + { 0x27B6, 143553 }, + { 0x27B7, 143558 }, + { 0x1E9D, 143563 }, + { 0x269C, 143569 }, + { 0x1E9C, 143574 }, + { 0x1EA9, 143577 }, + { 0x1FD9, 143584 }, + { 0x1D9B, 143587 }, + { 0x1D97, 143590 }, + { 0x1D98, 143593 }, + { 0x1DA1, 143596 }, + { 0x1DA2, 143600 }, + { 0x1DA3, 143604 }, + { 0x1DA4, 143608 }, + { 0x1DA0, 143612 }, + { 0x1D5D, 143616 }, + { 0x1D68, 143619 }, + { 0x1D70, 143622 }, + { 0x1D74, 143625 }, + { 0x1D75, 143628 }, + { 0x1D78, 143631 }, + { 0x1D7F, 143634 }, + { 0x1D9A, 143637 }, + { 0x1D99, 143640 }, + { 0x90EE, 143643 }, + { 0x7E3D, 143646 }, + { 0x7CAF, 143648 }, + { 0x90F0, 143650 }, + { 0x7C4B, 143654 }, + { 0x7CAA, 143657 }, + { 0x7CC2, 143660 }, + { 0x7CE1, 143663 }, + { 0x7CA0, 143666 }, + { 0x7E39, 143669 }, + { 0x2614, 143671 }, + { 0x2615, 143677 }, + { 0x1D19, 143683 }, + { 0x1EA8, 143685 }, + { 0x1EA5, 143688 }, + { 0x2828, 143691 }, + { 0x4874, 143694 }, + { 0x487F, 143698 }, + { 0x487D, 143702 }, + { 0x4882, 143706 }, + { 0x4871, 143710 }, + { 0x4877, 143714 }, + { 0x487A, 143718 }, + { 0x4881, 143722 }, + { 0x4878, 143726 }, + { 0x4879, 143730 }, + { 0x4870, 143734 }, + { 0x4872, 143738 }, + { 0x4880, 143742 }, + { 0x4876, 143746 }, + { 0x4873, 143750 }, + { 0x487B, 143754 }, + { 0x487E, 143758 }, + { 0x487C, 143762 }, + { 0x4875, 143766 }, + { 0x4883, 143770 }, + { 0x4889, 143774 }, + { 0x488A, 143779 }, + { 0x4887, 143784 }, + { 0x4884, 143788 }, + { 0x4886, 143792 }, + { 0x4885, 143796 }, + { 0x4888, 143800 }, + { 0x4856, 143804 }, + { 0x4862, 143808 }, + { 0x485E, 143812 }, + { 0x485F, 143816 }, + { 0x4867, 143820 }, + { 0x4857, 143824 }, + { 0x4861, 143828 }, + { 0x4853, 143832 }, + { 0x4859, 143836 }, + { 0x485C, 143840 }, + { 0x4864, 143844 }, + { 0x4865, 143848 }, + { 0x4866, 143852 }, + { 0x485A, 143856 }, + { 0x485B, 143860 }, + { 0x4852, 143864 }, + { 0x4854, 143868 }, + { 0x4863, 143872 }, + { 0x4858, 143876 }, + { 0x4855, 143880 }, + { 0x485D, 143884 }, + { 0x4860, 143888 }, + { 0x4868, 143892 }, + { 0x486E, 143896 }, + { 0x486F, 143901 }, + { 0x486C, 143906 }, + { 0x4869, 143910 }, + { 0x486B, 143914 }, + { 0x486A, 143918 }, + { 0x486D, 143922 }, + { 0x7CE5, 143926 }, + { 0x1F80, 143928 }, + { 0x7C55, 143931 }, + { 0x7CAC, 143933 }, + { 0x7C49, 143935 }, + { 0x7CA7, 143938 }, + { 0x2628, 143941 }, + { 0x006A, 143945 }, + { 0x7CBF, 143950 }, + { 0x7CDE, 143953 }, + { 0x7C9D, 143956 }, + { 0x7CE7, 143959 }, + { 0x7CE9, 143962 }, + { 0x7E3A, 143966 }, + { 0x90C0, 143968 }, + { 0x1C8E, 143971 }, + { 0x1CE5, 143973 }, + { 0x1CAD, 143975 }, + { 0x1CAA, 143977 }, + { 0x1E6A, 143979 }, + { 0x23EA, 143981 }, + { 0x20A0, 143984 }, + { 0x20A5, 143987 }, + { 0x20A1, 143990 }, + { 0x20A4, 143993 }, + { 0x20A3, 143996 }, + { 0x20A8, 143999 }, + { 0x20A7, 144002 }, + { 0x20A6, 144005 }, + { 0x20A2, 144008 }, + { 0x20C8, 144011 }, + { 0x20C9, 144016 }, + { 0x20CA, 144021 }, + { 0x20CB, 144026 }, + { 0x20CC, 144031 }, + { 0x20CD, 144036 }, + { 0x20CE, 144041 }, + { 0x20CF, 144046 }, + { 0x20D0, 144051 }, + { 0x20D1, 144056 }, + { 0x20D2, 144061 }, + { 0x20D3, 144066 }, + { 0x20D4, 144071 }, + { 0x20D5, 144076 }, + { 0x20D6, 144081 }, + { 0x20D7, 144086 }, + { 0x20D8, 144091 }, + { 0x20D9, 144096 }, + { 0x20DA, 144101 }, + { 0x20DB, 144106 }, + { 0x20DC, 144111 }, + { 0x20DD, 144116 }, + { 0x20DE, 144121 }, + { 0x20DF, 144126 }, + { 0x20E0, 144131 }, + { 0x20E1, 144136 }, + { 0x8DBB, 144141 }, + { 0x8DBC, 144146 }, + { 0x8DBD, 144151 }, + { 0x8DBE, 144156 }, + { 0x8DBF, 144161 }, + { 0x8DC0, 144166 }, + { 0x8DC1, 144171 }, + { 0x8DC2, 144176 }, + { 0x8DC3, 144181 }, + { 0x8DC4, 144186 }, + { 0x8DC5, 144191 }, + { 0x8DC6, 144196 }, + { 0x8DC7, 144201 }, + { 0x8DC8, 144206 }, + { 0x8DC9, 144211 }, + { 0x8DCA, 144216 }, + { 0x8DCB, 144221 }, + { 0x8DCC, 144226 }, + { 0x8DCD, 144231 }, + { 0x8DCE, 144236 }, + { 0x8DCF, 144241 }, + { 0x8DD0, 144246 }, + { 0x8DD1, 144251 }, + { 0x8DD2, 144256 }, + { 0x8DD3, 144261 }, + { 0x8DD4, 144266 }, + { 0x2DA0, 144271 }, + { 0x2DAE, 144274 }, + { 0x2DA2, 144278 }, + { 0x2DB0, 144281 }, + { 0x2DB6, 144285 }, + { 0x2DA7, 144289 }, + { 0x2DB5, 144292 }, + { 0x2DA1, 144296 }, + { 0x2DAF, 144299 }, + { 0x2D9E, 144303 }, + { 0x2DAC, 144306 }, + { 0x2D9B, 144310 }, + { 0x2DA9, 144313 }, + { 0x2D9F, 144317 }, + { 0x2DAD, 144320 }, + { 0x2D9D, 144324 }, + { 0x2DAB, 144327 }, + { 0x2D9A, 144331 }, + { 0x2DA8, 144334 }, + { 0x2D9C, 144338 }, + { 0x2DAA, 144341 }, + { 0x2DA3, 144345 }, + { 0x2DB1, 144348 }, + { 0x2DA4, 144352 }, + { 0x2DB2, 144355 }, + { 0x2DA6, 144359 }, + { 0x2DB4, 144362 }, + { 0x2DA5, 144366 }, + { 0x2DB3, 144369 }, + { 0x2DB8, 144373 }, + { 0x2DB7, 144378 }, + { 0x20A9, 144382 }, + { 0x20AA, 144385 }, + { 0x20AB, 144388 }, + { 0x20B3, 144391 }, + { 0x20AE, 144394 }, + { 0x20AF, 144397 }, + { 0x20B1, 144400 }, + { 0x20AD, 144403 }, + { 0x20B2, 144406 }, + { 0x20AC, 144409 }, + { 0x20B0, 144412 }, + { 0x2DB9, 144415 }, + { 0x2DBE, 144418 }, + { 0x2DC9, 144421 }, + { 0x2DC2, 144424 }, + { 0x2DBA, 144427 }, + { 0x2DD3, 144430 }, + { 0x2DC4, 144433 }, + { 0x2DBD, 144436 }, + { 0x2DBC, 144439 }, + { 0x2DCB, 144442 }, + { 0x2DC3, 144445 }, + { 0x2DCD, 144448 }, + { 0x2DC1, 144451 }, + { 0x2DDA, 144454 }, + { 0x2DDB, 144457 }, + { 0x2DC6, 144460 }, + { 0x2DC8, 144463 }, + { 0x2DC0, 144466 }, + { 0x2DD1, 144469 }, + { 0x2DC7, 144472 }, + { 0x2DDC, 144475 }, + { 0x2DBF, 144478 }, + { 0x2DCA, 144481 }, + { 0x2DD4, 144484 }, + { 0x2DBB, 144487 }, + { 0x2DC5, 144490 }, + { 0x2DCC, 144493 }, + { 0x2DCE, 144496 }, + { 0x2DD8, 144499 }, + { 0x2DD9, 144502 }, + { 0x2DD7, 144505 }, + { 0x2DCF, 144508 }, + { 0x2DD2, 144511 }, + { 0x2DD5, 144514 }, + { 0x2DD6, 144517 }, + { 0x2DD0, 144520 }, + { 0x23EE, 144523 }, + { 0x270D, 144524 }, + { 0x1C8F, 144527 }, + { 0x1CE6, 144529 }, + { 0x1CAE, 144531 }, + { 0x1CAB, 144533 }, + { 0x91FD, 144535 }, + { 0x2613, 144537 }, + { 0x4DC6, 144538 }, + { 0x4DD2, 144542 }, + { 0x4DCF, 144546 }, + { 0x4DD3, 144549 }, + { 0x4DC7, 144553 }, + { 0x4DCB, 144557 }, + { 0x4DCA, 144561 }, + { 0x4DC9, 144564 }, + { 0x4DC8, 144567 }, + { 0x4DB8, 144570 }, + { 0x4DD0, 144573 }, + { 0x4DCD, 144575 }, + { 0x4DD4, 144577 }, + { 0x4DD5, 144581 }, + { 0x4DBA, 144585 }, + { 0x4DBC, 144589 }, + { 0x4DB9, 144593 }, + { 0x4DC3, 144597 }, + { 0x4DC5, 144601 }, + { 0x4DC2, 144605 }, + { 0x4DBB, 144609 }, + { 0x4DC4, 144613 }, + { 0x4DBD, 144617 }, + { 0x4DC0, 144621 }, + { 0x4DBE, 144626 }, + { 0x4DC1, 144631 }, + { 0x4DBF, 144636 }, + { 0x4DD1, 144641 }, + { 0x4D86, 144644 }, + { 0x4D88, 144647 }, + { 0x4D8A, 144650 }, + { 0x4D87, 144653 }, + { 0x4D91, 144656 }, + { 0x4D93, 144659 }, + { 0x4DAA, 144662 }, + { 0x4D99, 144665 }, + { 0x4DA5, 144668 }, + { 0x4D90, 144671 }, + { 0x4D96, 144674 }, + { 0x4DB4, 144677 }, + { 0x4D89, 144680 }, + { 0x4D9B, 144683 }, + { 0x4D94, 144686 }, + { 0x4DAF, 144689 }, + { 0x4DAC, 144692 }, + { 0x4DA7, 144695 }, + { 0x4D92, 144698 }, + { 0x4DA8, 144701 }, + { 0x4DAE, 144704 }, + { 0x4DB3, 144707 }, + { 0x4DA3, 144710 }, + { 0x4D8B, 144713 }, + { 0x4DB0, 144716 }, + { 0x4DAD, 144719 }, + { 0x4DAB, 144722 }, + { 0x4D9A, 144725 }, + { 0x4DA0, 144728 }, + { 0x4DA6, 144731 }, + { 0x4D97, 144734 }, + { 0x4D9C, 144737 }, + { 0x4D95, 144740 }, + { 0x4DB5, 144743 }, + { 0x4D98, 144746 }, + { 0x4DA2, 144749 }, + { 0x4D9D, 144752 }, + { 0x4DA9, 144755 }, + { 0x4DB6, 144758 }, + { 0x4DB1, 144761 }, + { 0x4DB2, 144764 }, + { 0x4DA4, 144767 }, + { 0x4D9E, 144770 }, + { 0x4DA1, 144773 }, + { 0x4DB7, 144776 }, + { 0x4D9F, 144779 }, + { 0x4D8E, 144782 }, + { 0x4D8C, 144786 }, + { 0x4D8F, 144790 }, + { 0x4D8D, 144794 }, + { 0x4DCC, 144798 }, + { 0x4DCE, 144800 }, + { 0x90AF, 144803 }, + { 0x1E9A, 144804 }, + { 0x2375, 144807 }, + { 0x945F, 144809 }, + { 0x91C4, 144810 }, + { 0x95C2, 144812 }, + { 0x8F36, 144814 }, + { 0x2341, 144815 }, + { 0x0096, 144817 }, + { 0x2660, 144819 }, + { 0x2661, 144825 }, + { 0x2663, 144831 }, + { 0x2667, 144836 }, + { 0x265C, 144840 }, + { 0x265D, 144845 }, + { 0x7CE6, 144849 }, + { 0x1F81, 144851 }, + { 0x7C56, 144854 }, + { 0x7CAE, 144856 }, + { 0x7C4A, 144858 }, + { 0x7CA9, 144861 }, + { 0x2629, 144864 }, + { 0x007A, 144868 }, + { 0x7CC1, 144873 }, + { 0x7CE0, 144876 }, + { 0x7C9F, 144879 }, + { 0x7CE8, 144882 }, + { 0x7CEA, 144885 }, + { 0x7C48, 144889 }, + { 0x90C1, 144891 }, + { 0x22E8, 144894 }, + { 0x23E2, 144895 }, + { 0x23E0, 144899 }, + { 0x23E1, 144903 }, + { 0x23E6, 144906 }, + { 0x2367, 144909 }, + { 0x23C9, 144911 }, + { 0x23DF, 144914 }, + { 0x96B1, 144917 }, + { 0x9030, 144919 }, + { 0x2C4A, 144921 }, + { 0x2C45, 144924 }, + { 0x2CA6, 144928 }, + { 0x2C46, 144932 }, + { 0x1FEB, 144936 }, + { 0x9299, 144938 }, + { 0x22A9, 144940 }, + { 0x1FE6, 144943 }, + { 0x1FE7, 144946 }, + { 0x1FE9, 144949 }, + { 0x1FE8, 144951 }, +}; +static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_index_to_name[38748] = { + { 0x0000, 41626 }, + { 0x0001, 133203 }, + { 0x0002, 127653 }, + { 0x0003, 63873 }, + { 0x0004, 54346 }, + { 0x0005, 78109 }, + { 0x0006, 112612 }, + { 0x0007, 129669 }, + { 0x0008, 15067 }, + { 0x0009, 40709 }, + { 0x000A, 83389 }, + { 0x000B, 16607 }, + { 0x000C, 22500 }, + { 0x000D, 138534 }, + { 0x000E, 14150 }, + { 0x000F, 80360 }, + { 0x0010, 22611 }, + { 0x0011, 22557 }, + { 0x0012, 22575 }, + { 0x0013, 22638 }, + { 0x0014, 22593 }, + { 0x0015, 22584 }, + { 0x0016, 22566 }, + { 0x0017, 22629 }, + { 0x0018, 22620 }, + { 0x0019, 22602 }, + { 0x001A, 22494 }, + { 0x001B, 127952 }, + { 0x001C, 126198 }, + { 0x001D, 54856 }, + { 0x001E, 138460 }, + { 0x001F, 110366 }, + { 0x0020, 129774 }, + { 0x0021, 33380 }, + { 0x0022, 33603 }, + { 0x0023, 33652 }, + { 0x0024, 33720 }, + { 0x0025, 33808 }, + { 0x0026, 33993 }, + { 0x0027, 34016 }, + { 0x0028, 34082 }, + { 0x0029, 34149 }, + { 0x002A, 34263 }, + { 0x002B, 34285 }, + { 0x002C, 34362 }, + { 0x002D, 34468 }, + { 0x002E, 34498 }, + { 0x002F, 34596 }, + { 0x0030, 34886 }, + { 0x0031, 34936 }, + { 0x0032, 34955 }, + { 0x0033, 35045 }, + { 0x0034, 35157 }, + { 0x0035, 35234 }, + { 0x0036, 35462 }, + { 0x0037, 35492 }, + { 0x0038, 35540 }, + { 0x0039, 35557 }, + { 0x003A, 35636 }, + { 0x003B, 14952 }, + { 0x003C, 78657 }, + { 0x003D, 40581 }, + { 0x003E, 129772 }, + { 0x003F, 6941 }, + { 0x0040, 23624 }, + { 0x0041, 28799 }, + { 0x0042, 29042 }, + { 0x0043, 29105 }, + { 0x0044, 29186 }, + { 0x0045, 29298 }, + { 0x0046, 29502 }, + { 0x0047, 29539 }, + { 0x0048, 29612 }, + { 0x0049, 29693 }, + { 0x004A, 29816 }, + { 0x004B, 29844 }, + { 0x004C, 29928 }, + { 0x004D, 30101 }, + { 0x004E, 30151 }, + { 0x004F, 30289 }, + { 0x0050, 30587 }, + { 0x0051, 30651 }, + { 0x0052, 30683 }, + { 0x0053, 30838 }, + { 0x0054, 30978 }, + { 0x0055, 31098 }, + { 0x0056, 31357 }, + { 0x0057, 31407 }, + { 0x0058, 31462 }, + { 0x0059, 31524 }, + { 0x005A, 31618 }, + { 0x005B, 14761 }, + { 0x005C, 111363 }, + { 0x005D, 40455 }, + { 0x005E, 42383 }, + { 0x005F, 109296 }, + { 0x0060, 105548 }, + { 0x0061, 13525 }, + { 0x0062, 40268 }, + { 0x0063, 87648 }, + { 0x0064, 13189 }, + { 0x0065, 52961 }, + { 0x0066, 78762 }, + { 0x0067, 124072 }, + { 0x0068, 117875 }, + { 0x0069, 103454 }, + { 0x006A, 143945 }, + { 0x006B, 8006 }, + { 0x006C, 16832 }, + { 0x006D, 132219 }, + { 0x006E, 63354 }, + { 0x006F, 54291 }, + { 0x0070, 132205 }, + { 0x0071, 137669 }, + { 0x0072, 137704 }, + { 0x0073, 17573 }, + { 0x0074, 38416 }, + { 0x0075, 78111 }, + { 0x0076, 63804 }, + { 0x0077, 71179 }, + { 0x0078, 137665 }, + { 0x0079, 126679 }, + { 0x007A, 144868 }, + { 0x007B, 69045 }, + { 0x007C, 69017 }, + { 0x007D, 69089 }, + { 0x007E, 105541 }, + { 0x007F, 33497 }, + { 0x0080, 33437 }, + { 0x0081, 33555 }, + { 0x0082, 33503 }, + { 0x0083, 33541 }, + { 0x0084, 33414 }, + { 0x0085, 35715 }, + { 0x0086, 33693 }, + { 0x0087, 33851 }, + { 0x0088, 33833 }, + { 0x0089, 33938 }, + { 0x008A, 33932 }, + { 0x008B, 34192 }, + { 0x008C, 34174 }, + { 0x008D, 34257 }, + { 0x008E, 34243 }, + { 0x008F, 35816 }, + { 0x0090, 34564 }, + { 0x0091, 34710 }, + { 0x0092, 34692 }, + { 0x0093, 34838 }, + { 0x0094, 34716 }, + { 0x0095, 34824 }, + { 0x0096, 144817 }, + { 0x0097, 34803 }, + { 0x0098, 35330 }, + { 0x0099, 35312 }, + { 0x009A, 35449 }, + { 0x009B, 35404 }, + { 0x009C, 35594 }, + { 0x009D, 35948 }, + { 0x009E, 32306 }, + { 0x009F, 28916 }, + { 0x00A0, 28856 }, + { 0x00A1, 28989 }, + { 0x00A2, 28930 }, + { 0x00A3, 28968 }, + { 0x00A4, 28833 }, + { 0x00A5, 31717 }, + { 0x00A6, 29152 }, + { 0x00A7, 29341 }, + { 0x00A8, 29323 }, + { 0x00A9, 29447 }, + { 0x00AA, 29434 }, + { 0x00AB, 29729 }, + { 0x00AC, 29711 }, + { 0x00AD, 29810 }, + { 0x00AE, 29789 }, + { 0x00AF, 31973 }, + { 0x00B0, 30215 }, + { 0x00B1, 30411 }, + { 0x00B2, 30393 }, + { 0x00B3, 30539 }, + { 0x00B4, 30417 }, + { 0x00B5, 30518 }, + { 0x00B6, 89735 }, + { 0x00B7, 30497 }, + { 0x00B8, 31210 }, + { 0x00B9, 31192 }, + { 0x00BA, 31344 }, + { 0x00BB, 31292 }, + { 0x00BC, 31568 }, + { 0x00BD, 32317 }, + { 0x00BE, 31606 }, + { 0x00BF, 33516 }, + { 0x00C0, 28943 }, + { 0x00C1, 33443 }, + { 0x00C2, 28862 }, + { 0x00C3, 33522 }, + { 0x00C4, 28949 }, + { 0x00C5, 33675 }, + { 0x00C6, 29134 }, + { 0x00C7, 33714 }, + { 0x00C8, 29180 }, + { 0x00C9, 33662 }, + { 0x00CA, 29115 }, + { 0x00CB, 33681 }, + { 0x00CC, 29140 }, + { 0x00CD, 33751 }, + { 0x00CE, 29237 }, + { 0x00CF, 33783 }, + { 0x00D0, 29258 }, + { 0x00D1, 33877 }, + { 0x00D2, 29373 }, + { 0x00D3, 33839 }, + { 0x00D4, 29329 }, + { 0x00D5, 33812 }, + { 0x00D6, 29302 }, + { 0x00D7, 33899 }, + { 0x00D8, 29395 }, + { 0x00D9, 33845 }, + { 0x00DA, 29335 }, + { 0x00DB, 34076 }, + { 0x00DC, 29606 }, + { 0x00DD, 34039 }, + { 0x00DE, 29562 }, + { 0x00DF, 34020 }, + { 0x00E0, 29543 }, + { 0x00E1, 34063 }, + { 0x00E2, 29586 }, + { 0x00E3, 34143 }, + { 0x00E4, 29687 }, + { 0x00E5, 34119 }, + { 0x00E6, 29656 }, + { 0x00E7, 34198 }, + { 0x00E8, 29735 }, + { 0x00E9, 34218 }, + { 0x00EA, 29755 }, + { 0x00EB, 34180 }, + { 0x00EC, 29717 }, + { 0x00ED, 34224 }, + { 0x00EE, 29761 }, + { 0x00EF, 34153 }, + { 0x00F0, 32665 }, + { 0x00F1, 36195 }, + { 0x00F2, 32996 }, + { 0x00F3, 34273 }, + { 0x00F4, 29832 }, + { 0x00F5, 34336 }, + { 0x00F6, 29895 }, + { 0x00F7, 32022 }, + { 0x00F8, 34408 }, + { 0x00F9, 29989 }, + { 0x00FA, 34455 }, + { 0x00FB, 30043 }, + { 0x00FC, 34414 }, + { 0x00FD, 29995 }, + { 0x00FE, 34435 }, + { 0x00FF, 30016 }, + { 0x0100, 34449 }, + { 0x0101, 30037 }, + { 0x0102, 34538 }, + { 0x0103, 30197 }, + { 0x0104, 34570 }, + { 0x0105, 30228 }, + { 0x0106, 34544 }, + { 0x0107, 30203 }, + { 0x0108, 30282 }, + { 0x0109, 35808 }, + { 0x010A, 31916 }, + { 0x010B, 34760 }, + { 0x010C, 30461 }, + { 0x010D, 34698 }, + { 0x010E, 30399 }, + { 0x010F, 34746 }, + { 0x0110, 30447 }, + { 0x0111, 36199 }, + { 0x0112, 33000 }, + { 0x0113, 34995 }, + { 0x0114, 30730 }, + { 0x0115, 35020 }, + { 0x0116, 30762 }, + { 0x0117, 35001 }, + { 0x0118, 30736 }, + { 0x0119, 35079 }, + { 0x011A, 30878 }, + { 0x011B, 35151 }, + { 0x011C, 30964 }, + { 0x011D, 35131 }, + { 0x011E, 30937 }, + { 0x011F, 35094 }, + { 0x0120, 30893 }, + { 0x0121, 35207 }, + { 0x0122, 31050 }, + { 0x0123, 35188 }, + { 0x0124, 31024 }, + { 0x0125, 35201 }, + { 0x0126, 31044 }, + { 0x0127, 35336 }, + { 0x0128, 31224 }, + { 0x0129, 35371 }, + { 0x012A, 31259 }, + { 0x012B, 35318 }, + { 0x012C, 31198 }, + { 0x012D, 35305 }, + { 0x012E, 31185 }, + { 0x012F, 35357 }, + { 0x0130, 31245 }, + { 0x0131, 35385 }, + { 0x0132, 31273 }, + { 0x0133, 35534 }, + { 0x0134, 31456 }, + { 0x0135, 35630 }, + { 0x0136, 31612 }, + { 0x0137, 35624 }, + { 0x0138, 35667 }, + { 0x0139, 31655 }, + { 0x013A, 35640 }, + { 0x013B, 31622 }, + { 0x013C, 35673 }, + { 0x013D, 31661 }, + { 0x013E, 32140 }, + { 0x013F, 29080 }, + { 0x0140, 33621 }, + { 0x0141, 33640 }, + { 0x0142, 29086 }, + { 0x0143, 35882 }, + { 0x0144, 32233 }, + { 0x0145, 35872 }, + { 0x0146, 33669 }, + { 0x0147, 29128 }, + { 0x0148, 36044 }, + { 0x0149, 33738 }, + { 0x014A, 33789 }, + { 0x014B, 29264 }, + { 0x014C, 32654 }, + { 0x014D, 36130 }, + { 0x014E, 35925 }, + { 0x014F, 35867 }, + { 0x0150, 34004 }, + { 0x0151, 29513 }, + { 0x0152, 34027 }, + { 0x0153, 35913 }, + { 0x0154, 31795 }, + { 0x0155, 35863 }, + { 0x0156, 34230 }, + { 0x0157, 34296 }, + { 0x0158, 29855 }, + { 0x0159, 29932 }, + { 0x015A, 32411 }, + { 0x015B, 36018 }, + { 0x015C, 34516 }, + { 0x015D, 30189 }, + { 0x015E, 34782 }, + { 0x015F, 34630 }, + { 0x0160, 30331 }, + { 0x0161, 35780 }, + { 0x0162, 31821 }, + { 0x0163, 34897 }, + { 0x0164, 30598 }, + { 0x0165, 33022 }, + { 0x0166, 35887 }, + { 0x0167, 32238 }, + { 0x0168, 35812 }, + { 0x0169, 33338 }, + { 0x016A, 31056 }, + { 0x016B, 35175 }, + { 0x016C, 31002 }, + { 0x016D, 35220 }, + { 0x016E, 35257 }, + { 0x016F, 31130 }, + { 0x0170, 36104 }, + { 0x0171, 35473 }, + { 0x0172, 35575 }, + { 0x0173, 31542 }, + { 0x0174, 35686 }, + { 0x0175, 31681 }, + { 0x0176, 35820 }, + { 0x0177, 35830 }, + { 0x0178, 32013 }, + { 0x0179, 31987 }, + { 0x017A, 33028 }, + { 0x017B, 35892 }, + { 0x017C, 32243 }, + { 0x017D, 33331 }, + { 0x017E, 33033 }, + { 0x017F, 33280 }, + { 0x0180, 33299 }, + { 0x0181, 33303 }, + { 0x0182, 33350 }, + { 0x0183, 35758 }, + { 0x0184, 33773 }, + { 0x0185, 31765 }, + { 0x0186, 35772 }, + { 0x0187, 34420 }, + { 0x0188, 31803 }, + { 0x0189, 35776 }, + { 0x018A, 34556 }, + { 0x018B, 31817 }, + { 0x018C, 33491 }, + { 0x018D, 28910 }, + { 0x018E, 34186 }, + { 0x018F, 29723 }, + { 0x0190, 34704 }, + { 0x0191, 30405 }, + { 0x0192, 35324 }, + { 0x0193, 31204 }, + { 0x0194, 35434 }, + { 0x0195, 31322 }, + { 0x0196, 35410 }, + { 0x0197, 31298 }, + { 0x0198, 35418 }, + { 0x0199, 31306 }, + { 0x019A, 35426 }, + { 0x019B, 31314 }, + { 0x019C, 32452 }, + { 0x019D, 33547 }, + { 0x019E, 28974 }, + { 0x019F, 33391 }, + { 0x01A0, 28810 }, + { 0x01A1, 35725 }, + { 0x01A2, 31727 }, + { 0x01A3, 34057 }, + { 0x01A4, 29580 }, + { 0x01A5, 34045 }, + { 0x01A6, 29568 }, + { 0x01A7, 34315 }, + { 0x01A8, 29874 }, + { 0x01A9, 34789 }, + { 0x01AA, 30483 }, + { 0x01AB, 34795 }, + { 0x01AC, 30489 }, + { 0x01AD, 35824 }, + { 0x01AE, 31993 }, + { 0x01AF, 29820 }, + { 0x01B0, 35754 }, + { 0x01B1, 33765 }, + { 0x01B2, 31761 }, + { 0x01B3, 34033 }, + { 0x01B4, 29556 }, + { 0x01B5, 35917 }, + { 0x01B6, 35901 }, + { 0x01B7, 34550 }, + { 0x01B8, 30209 }, + { 0x01B9, 33421 }, + { 0x01BA, 28840 }, + { 0x01BB, 35719 }, + { 0x01BC, 31721 }, + { 0x01BD, 34809 }, + { 0x01BE, 30503 }, + { 0x01BF, 33509 }, + { 0x01C0, 28936 }, + { 0x01C1, 33534 }, + { 0x01C2, 28961 }, + { 0x01C3, 33870 }, + { 0x01C4, 29366 }, + { 0x01C5, 33925 }, + { 0x01C6, 29427 }, + { 0x01C7, 34211 }, + { 0x01C8, 29748 }, + { 0x01C9, 34236 }, + { 0x01CA, 29782 }, + { 0x01CB, 34753 }, + { 0x01CC, 30454 }, + { 0x01CD, 34817 }, + { 0x01CE, 30511 }, + { 0x01CF, 35007 }, + { 0x01D0, 30742 }, + { 0x01D1, 35033 }, + { 0x01D2, 30806 }, + { 0x01D3, 35364 }, + { 0x01D4, 31252 }, + { 0x01D5, 35397 }, + { 0x01D6, 31285 }, + { 0x01D7, 35109 }, + { 0x01D8, 30908 }, + { 0x01D9, 35194 }, + { 0x01DA, 31030 }, + { 0x01DB, 35905 }, + { 0x01DC, 32252 }, + { 0x01DD, 34113 }, + { 0x01DE, 29650 }, + { 0x01DF, 34530 }, + { 0x01E0, 29204 }, + { 0x01E1, 35788 }, + { 0x01E2, 31829 }, + { 0x01E3, 35654 }, + { 0x01E4, 31642 }, + { 0x01E5, 33384 }, + { 0x01E6, 28803 }, + { 0x01E7, 33911 }, + { 0x01E8, 29407 }, + { 0x01E9, 34830 }, + { 0x01EA, 30524 }, + { 0x01EB, 34730 }, + { 0x01EC, 30431 }, + { 0x01ED, 34600 }, + { 0x01EE, 30293 }, + { 0x01EF, 34607 }, + { 0x01F0, 30300 }, + { 0x01F1, 35612 }, + { 0x01F2, 31594 }, + { 0x01F3, 29969 }, + { 0x01F4, 30169 }, + { 0x01F5, 30996 }, + { 0x01F6, 32670 }, + { 0x01F7, 31756 }, + { 0x01F8, 31833 }, + { 0x01F9, 33528 }, + { 0x01FA, 33687 }, + { 0x01FB, 29146 }, + { 0x01FC, 34366 }, + { 0x01FD, 35213 }, + { 0x01FE, 30923 }, + { 0x01FF, 31667 }, + { 0x0200, 36064 }, + { 0x0201, 32706 }, + { 0x0202, 33634 }, + { 0x0203, 35238 }, + { 0x0204, 36028 }, + { 0x0205, 33905 }, + { 0x0206, 29401 }, + { 0x0207, 34267 }, + { 0x0208, 29826 }, + { 0x0209, 35934 }, + { 0x020A, 30661 }, + { 0x020B, 35014 }, + { 0x020C, 30756 }, + { 0x020D, 35618 }, + { 0x020E, 31600 }, + { 0x020F, 32447 }, + { 0x0210, 32256 }, + { 0x0211, 32649 }, + { 0x0212, 29060 }, + { 0x0213, 32182 }, + { 0x0214, 29122 }, + { 0x0215, 29231 }, + { 0x0216, 29210 }, + { 0x0217, 32808 }, + { 0x0218, 32289 }, + { 0x0219, 32293 }, + { 0x021A, 32169 }, + { 0x021B, 32836 }, + { 0x021C, 32842 }, + { 0x021D, 32378 }, + { 0x021E, 32675 }, + { 0x021F, 29550 }, + { 0x0220, 32423 }, + { 0x0221, 33066 }, + { 0x0222, 32271 }, + { 0x0223, 32207 }, + { 0x0224, 32462 }, + { 0x0225, 29630 }, + { 0x0226, 32113 }, + { 0x0227, 29767 }, + { 0x0228, 32119 }, + { 0x0229, 33083 }, + { 0x022A, 30030 }, + { 0x022B, 29954 }, + { 0x022C, 30070 }, + { 0x022D, 32129 }, + { 0x022E, 32498 }, + { 0x022F, 32503 }, + { 0x0230, 30119 }, + { 0x0231, 30175 }, + { 0x0232, 30254 }, + { 0x0233, 33122 }, + { 0x0234, 32340 }, + { 0x0235, 33195 }, + { 0x0236, 32367 }, + { 0x0237, 32044 }, + { 0x0238, 32525 }, + { 0x0239, 32537 }, + { 0x023A, 32530 }, + { 0x023B, 30717 }, + { 0x023C, 30724 }, + { 0x023D, 30782 }, + { 0x023E, 32818 }, + { 0x023F, 33142 }, + { 0x0240, 33262 }, + { 0x0241, 30872 }, + { 0x0242, 31933 }, + { 0x0243, 32682 }, + { 0x0244, 32311 }, + { 0x0245, 31937 }, + { 0x0246, 32579 }, + { 0x0247, 31076 }, + { 0x0248, 31102 }, + { 0x0249, 32751 }, + { 0x024A, 31374 }, + { 0x024B, 32591 }, + { 0x024C, 32596 }, + { 0x024D, 32601 }, + { 0x024E, 33180 }, + { 0x024F, 31700 }, + { 0x0250, 31636 }, + { 0x0251, 31977 }, + { 0x0252, 31981 }, + { 0x0253, 33289 }, + { 0x0254, 33371 }, + { 0x0255, 33319 }, + { 0x0256, 33361 }, + { 0x0257, 33311 }, + { 0x0258, 33041 }, + { 0x0259, 32361 }, + { 0x025A, 33071 }, + { 0x025B, 33078 }, + { 0x025C, 29838 }, + { 0x025D, 32488 }, + { 0x025E, 33098 }, + { 0x025F, 30655 }, + { 0x0260, 33293 }, + { 0x0261, 33343 }, + { 0x0262, 31771 }, + { 0x0263, 32071 }, + { 0x0264, 31776 }, + { 0x0265, 31851 }, + { 0x0266, 32212 }, + { 0x0267, 31838 }, + { 0x0268, 32092 }, + { 0x0269, 31807 }, + { 0x026A, 31812 }, + { 0x026B, 33315 }, + { 0x026C, 33307 }, + { 0x026D, 32467 }, + { 0x026E, 32474 }, + { 0x026F, 107589 }, + { 0x0270, 107593 }, + { 0x0271, 107611 }, + { 0x0272, 107715 }, + { 0x0273, 108060 }, + { 0x0274, 108065 }, + { 0x0275, 108205 }, + { 0x0276, 107798 }, + { 0x0277, 107806 }, + { 0x0278, 107499 }, + { 0x0279, 108262 }, + { 0x027A, 108331 }, + { 0x027B, 108797 }, + { 0x027C, 108746 }, + { 0x027D, 107502 }, + { 0x027E, 107437 }, + { 0x027F, 108512 }, + { 0x0280, 108750 }, + { 0x0281, 107446 }, + { 0x0282, 107511 }, + { 0x0283, 107252 }, + { 0x0284, 107404 }, + { 0x0285, 108800 }, + { 0x0286, 22369 }, + { 0x0287, 108762 }, + { 0x0288, 108270 }, + { 0x0289, 107464 }, + { 0x028A, 107485 }, + { 0x028B, 107354 }, + { 0x028C, 107344 }, + { 0x028D, 107317 }, + { 0x028E, 107312 }, + { 0x028F, 108828 }, + { 0x0290, 107408 }, + { 0x0291, 108458 }, + { 0x0292, 108452 }, + { 0x0293, 107248 }, + { 0x0294, 107400 }, + { 0x0295, 107454 }, + { 0x0296, 107495 }, + { 0x0297, 22290 }, + { 0x0298, 6552 }, + { 0x0299, 16681 }, + { 0x029A, 63922 }, + { 0x029B, 41388 }, + { 0x029C, 54691 }, + { 0x029D, 108315 }, + { 0x029E, 107481 }, + { 0x029F, 107982 }, + { 0x02A0, 107625 }, + { 0x02A1, 107731 }, + { 0x02A2, 107802 }, + { 0x02A3, 108247 }, + { 0x02A4, 108804 }, + { 0x02A5, 107413 }, + { 0x02A6, 107370 }, + { 0x02A7, 107307 }, + { 0x02A8, 108766 }, + { 0x02A9, 107394 }, + { 0x02AA, 107458 }, + { 0x02AB, 108526 }, + { 0x02AC, 108843 }, + { 0x02AD, 108266 }, + { 0x02AE, 107288 }, + { 0x02AF, 107283 }, + { 0x02B0, 107298 }, + { 0x02B1, 107322 }, + { 0x02B2, 107303 }, + { 0x02B3, 108273 }, + { 0x02B4, 108284 }, + { 0x02B5, 108278 }, + { 0x02B6, 107327 }, + { 0x02B7, 108300 }, + { 0x02B8, 107473 }, + { 0x02B9, 107278 }, + { 0x02BA, 107468 }, + { 0x02BB, 107273 }, + { 0x02BC, 107515 }, + { 0x02BD, 107450 }, + { 0x02BE, 107293 }, + { 0x02BF, 116484 }, + { 0x02C0, 116450 }, + { 0x02C1, 117563 }, + { 0x02C2, 116905 }, + { 0x02C3, 117057 }, + { 0x02C4, 117492 }, + { 0x02C5, 116460 }, + { 0x02C6, 116270 }, + { 0x02C7, 117517 }, + { 0x02C8, 116331 }, + { 0x02C9, 116428 }, + { 0x02CA, 116970 }, + { 0x02CB, 116465 }, + { 0x02CC, 117498 }, + { 0x02CD, 117017 }, + { 0x02CE, 116981 }, + { 0x02CF, 117820 }, + { 0x02D0, 117453 }, + { 0x02D1, 117111 }, + { 0x02D2, 116470 }, + { 0x02D3, 117494 }, + { 0x02D4, 116473 }, + { 0x02D5, 116487 }, + { 0x02D6, 116453 }, + { 0x02D7, 116346 }, + { 0x02D8, 116837 }, + { 0x02D9, 116350 }, + { 0x02DA, 116334 }, + { 0x02DB, 116341 }, + { 0x02DC, 116260 }, + { 0x02DD, 116323 }, + { 0x02DE, 116424 }, + { 0x02DF, 116823 }, + { 0x02E0, 117822 }, + { 0x02E1, 117559 }, + { 0x02E2, 116281 }, + { 0x02E3, 117519 }, + { 0x02E4, 116431 }, + { 0x02E5, 116477 }, + { 0x02E6, 117128 }, + { 0x02E7, 117084 }, + { 0x02E8, 117502 }, + { 0x02E9, 116936 }, + { 0x02EA, 117469 }, + { 0x02EB, 116467 }, + { 0x02EC, 117566 }, + { 0x02ED, 116462 }, + { 0x02EE, 117456 }, + { 0x02EF, 116912 }, + { 0x02F0, 117068 }, + { 0x02F1, 116288 }, + { 0x02F2, 116947 }, + { 0x02F3, 116920 }, + { 0x02F4, 116885 }, + { 0x02F5, 116403 }, + { 0x02F6, 116889 }, + { 0x02F7, 116407 }, + { 0x02F8, 116832 }, + { 0x02F9, 117460 }, + { 0x02FA, 117089 }, + { 0x02FB, 117188 }, + { 0x02FC, 116247 }, + { 0x02FD, 117506 }, + { 0x02FE, 117014 }, + { 0x02FF, 116480 }, + { 0x0300, 116446 }, + { 0x0301, 116510 }, + { 0x0302, 116491 }, + { 0x0303, 116506 }, + { 0x0304, 116513 }, + { 0x0305, 116933 }, + { 0x0306, 117045 }, + { 0x0307, 117022 }, + { 0x0308, 116354 }, + { 0x0309, 116291 }, + { 0x030A, 117808 }, + { 0x030B, 116923 }, + { 0x030C, 116371 }, + { 0x030D, 117191 }, + { 0x030E, 117448 }, + { 0x030F, 116867 }, + { 0x0310, 116336 }, + { 0x0311, 117134 }, + { 0x0312, 116250 }, + { 0x0313, 116384 }, + { 0x0314, 116871 }, + { 0x0315, 116853 }, + { 0x0316, 116827 }, + { 0x0317, 116277 }, + { 0x0318, 117198 }, + { 0x0319, 116966 }, + { 0x031A, 117119 }, + { 0x031B, 116977 }, + { 0x031C, 116974 }, + { 0x031D, 116998 }, + { 0x031E, 117001 }, + { 0x031F, 116985 }, + { 0x0320, 117005 }, + { 0x0321, 117036 }, + { 0x0322, 116516 }, + { 0x0323, 116549 }, + { 0x0324, 116569 }, + { 0x0325, 116603 }, + { 0x0326, 116656 }, + { 0x0327, 116533 }, + { 0x0328, 116544 }, + { 0x0329, 116564 }, + { 0x032A, 116593 }, + { 0x032B, 116629 }, + { 0x032C, 116651 }, + { 0x032D, 116677 }, + { 0x032E, 116693 }, + { 0x032F, 25323 }, + { 0x0330, 23988 }, + { 0x0331, 25795 }, + { 0x0332, 24580 }, + { 0x0333, 26037 }, + { 0x0334, 23710 }, + { 0x0335, 26002 }, + { 0x0336, 24859 }, + { 0x0337, 26531 }, + { 0x0338, 24871 }, + { 0x0339, 23728 }, + { 0x033A, 24864 }, + { 0x033B, 26062 }, + { 0x033C, 25315 }, + { 0x033D, 24888 }, + { 0x033E, 26089 }, + { 0x033F, 25577 }, + { 0x0340, 23629 }, + { 0x0341, 25854 }, + { 0x0342, 25267 }, + { 0x0343, 25397 }, + { 0x0344, 25920 }, + { 0x0345, 25972 }, + { 0x0346, 25769 }, + { 0x0347, 24100 }, + { 0x0348, 25431 }, + { 0x0349, 25319 }, + { 0x034A, 25611 }, + { 0x034B, 25607 }, + { 0x034C, 25800 }, + { 0x034D, 25427 }, + { 0x034E, 25121 }, + { 0x034F, 25791 }, + { 0x0350, 25327 }, + { 0x0351, 25615 }, + { 0x0352, 25619 }, + { 0x0353, 25101 }, + { 0x0354, 25105 }, + { 0x0355, 25113 }, + { 0x0356, 25866 }, + { 0x0357, 25109 }, + { 0x0358, 25293 }, + { 0x0359, 25787 }, + { 0x035A, 25311 }, + { 0x035B, 25932 }, + { 0x035C, 25285 }, + { 0x035D, 25117 }, + { 0x035E, 25289 }, + { 0x035F, 25623 }, + { 0x0360, 25421 }, + { 0x0361, 25996 }, + { 0x0362, 24288 }, + { 0x0363, 24643 }, + { 0x0364, 23908 }, + { 0x0365, 24062 }, + { 0x0366, 24829 }, + { 0x0367, 24134 }, + { 0x0368, 23984 }, + { 0x0369, 24349 }, + { 0x036A, 24340 }, + { 0x036B, 24589 }, + { 0x036C, 24130 }, + { 0x036D, 23754 }, + { 0x036E, 24567 }, + { 0x036F, 23992 }, + { 0x0370, 24353 }, + { 0x0371, 24361 }, + { 0x0372, 23734 }, + { 0x0373, 23738 }, + { 0x0374, 23746 }, + { 0x0375, 24655 }, + { 0x0376, 23742 }, + { 0x0377, 23956 }, + { 0x0378, 24344 }, + { 0x0379, 24563 }, + { 0x037A, 23980 }, + { 0x037B, 24721 }, + { 0x037C, 23948 }, + { 0x037D, 23750 }, + { 0x037E, 23952 }, + { 0x037F, 24365 }, + { 0x0380, 24086 }, + { 0x0381, 24815 }, + { 0x0382, 24709 }, + { 0x0383, 24791 }, + { 0x0384, 24519 }, + { 0x0385, 25087 }, + { 0x0386, 23668 }, + { 0x0387, 24877 }, + { 0x0388, 26040 }, + { 0x0389, 26045 }, + { 0x038A, 26052 }, + { 0x038B, 23649 }, + { 0x038C, 23626 }, + { 0x038D, 23632 }, + { 0x038E, 25059 }, + { 0x038F, 24575 }, + { 0x0390, 25056 }, + { 0x0391, 24571 }, + { 0x0392, 25063 }, + { 0x0393, 24585 }, + { 0x0394, 25020 }, + { 0x0395, 24357 }, + { 0x0396, 25023 }, + { 0x0397, 24559 }, + { 0x0398, 54126 }, + { 0x0399, 53818 }, + { 0x039A, 53988 }, + { 0x039B, 53680 }, + { 0x039C, 54122 }, + { 0x039D, 53814 }, + { 0x039E, 54114 }, + { 0x039F, 53806 }, + { 0x03A0, 54166 }, + { 0x03A1, 53858 }, + { 0x03A2, 54162 }, + { 0x03A3, 53854 }, + { 0x03A4, 53980 }, + { 0x03A5, 53672 }, + { 0x03A6, 23704 }, + { 0x03A7, 23657 }, + { 0x03A8, 25066 }, + { 0x03A9, 25017 }, + { 0x03AA, 25091 }, + { 0x03AB, 25070 }, + { 0x03AC, 26065 }, + { 0x03AD, 25307 }, + { 0x03AE, 23976 }, + { 0x03AF, 26007 }, + { 0x03B0, 25303 }, + { 0x03B1, 23972 }, + { 0x03B2, 23652 }, + { 0x03B3, 26019 }, + { 0x03B4, 25095 }, + { 0x03B5, 26012 }, + { 0x03B6, 88868 }, + { 0x03B7, 88874 }, + { 0x03B8, 89025 }, + { 0x03B9, 89074 }, + { 0x03BA, 89550 }, + { 0x03BB, 89033 }, + { 0x03BC, 89560 }, + { 0x03BD, 88969 }, + { 0x03BE, 88878 }, + { 0x03BF, 89094 }, + { 0x03C0, 89098 }, + { 0x03C1, 89267 }, + { 0x03C2, 89082 }, + { 0x03C3, 88678 }, + { 0x03C4, 89367 }, + { 0x03C5, 89164 }, + { 0x03C6, 88648 }, + { 0x03C7, 88729 }, + { 0x03C8, 88957 }, + { 0x03C9, 89037 }, + { 0x03CA, 88733 }, + { 0x03CB, 88858 }, + { 0x03CC, 89134 }, + { 0x03CD, 88981 }, + { 0x03CE, 88674 }, + { 0x03CF, 89355 }, + { 0x03D0, 88882 }, + { 0x03D1, 88741 }, + { 0x03D2, 88770 }, + { 0x03D3, 88780 }, + { 0x03D4, 88696 }, + { 0x03D5, 88915 }, + { 0x03D6, 88816 }, + { 0x03D7, 88826 }, + { 0x03D8, 88936 }, + { 0x03D9, 88706 }, + { 0x03DA, 88737 }, + { 0x03DB, 88836 }, + { 0x03DC, 89118 }, + { 0x03DD, 89002 }, + { 0x03DE, 89110 }, + { 0x03DF, 89351 }, + { 0x03E0, 89180 }, + { 0x03E1, 89279 }, + { 0x03E2, 89258 }, + { 0x03E3, 88664 }, + { 0x03E4, 88977 }, + { 0x03E5, 88965 }, + { 0x03E6, 87652 }, + { 0x03E7, 87733 }, + { 0x03E8, 87961 }, + { 0x03E9, 88041 }, + { 0x03EA, 87737 }, + { 0x03EB, 87862 }, + { 0x03EC, 88138 }, + { 0x03ED, 87985 }, + { 0x03EE, 87678 }, + { 0x03EF, 88380 }, + { 0x03F0, 87886 }, + { 0x03F1, 87745 }, + { 0x03F2, 87774 }, + { 0x03F3, 87784 }, + { 0x03F4, 87700 }, + { 0x03F5, 87919 }, + { 0x03F6, 87820 }, + { 0x03F7, 87830 }, + { 0x03F8, 87940 }, + { 0x03F9, 87710 }, + { 0x03FA, 87741 }, + { 0x03FB, 87840 }, + { 0x03FC, 88122 }, + { 0x03FD, 88006 }, + { 0x03FE, 88114 }, + { 0x03FF, 88376 }, + { 0x0400, 88184 }, + { 0x0401, 88304 }, + { 0x0402, 88262 }, + { 0x0403, 87668 }, + { 0x0404, 87981 }, + { 0x0405, 87969 }, + { 0x0406, 87872 }, + { 0x0407, 87878 }, + { 0x0408, 88029 }, + { 0x0409, 88078 }, + { 0x040A, 88589 }, + { 0x040B, 88037 }, + { 0x040C, 88614 }, + { 0x040D, 87973 }, + { 0x040E, 87882 }, + { 0x040F, 88098 }, + { 0x0410, 88102 }, + { 0x0411, 88287 }, + { 0x0412, 88086 }, + { 0x0413, 87682 }, + { 0x0414, 88392 }, + { 0x0415, 88168 }, + { 0x0416, 89326 }, + { 0x0417, 88351 }, + { 0x0418, 89130 }, + { 0x0419, 88134 }, + { 0x041A, 89447 }, + { 0x041B, 88482 }, + { 0x041C, 89401 }, + { 0x041D, 88426 }, + { 0x041E, 89470 }, + { 0x041F, 88505 }, + { 0x0420, 88997 }, + { 0x0421, 88001 }, + { 0x0422, 89452 }, + { 0x0423, 88487 }, + { 0x0424, 89086 }, + { 0x0425, 88090 }, + { 0x0426, 89102 }, + { 0x0427, 88106 }, + { 0x0428, 89176 }, + { 0x0429, 88180 }, + { 0x042A, 89425 }, + { 0x042B, 88455 }, + { 0x042C, 89429 }, + { 0x042D, 88459 }, + { 0x042E, 88953 }, + { 0x042F, 87957 }, + { 0x0430, 89336 }, + { 0x0431, 88361 }, + { 0x0432, 89330 }, + { 0x0433, 88355 }, + { 0x0434, 88911 }, + { 0x0435, 87915 }, + { 0x0436, 89322 }, + { 0x0437, 88347 }, + { 0x0438, 89716 }, + { 0x0439, 117220 }, + { 0x043A, 117442 }, + { 0x043B, 117206 }, + { 0x043C, 117210 }, + { 0x043D, 117434 }, + { 0x043E, 117422 }, + { 0x043F, 117430 }, + { 0x0440, 89360 }, + { 0x0441, 88385 }, + { 0x0442, 89496 }, + { 0x0443, 88535 }, + { 0x0444, 88820 }, + { 0x0445, 87824 }, + { 0x0446, 89062 }, + { 0x0447, 88066 }, + { 0x0448, 89048 }, + { 0x0449, 88052 }, + { 0x044A, 89041 }, + { 0x044B, 88045 }, + { 0x044C, 89144 }, + { 0x044D, 88148 }, + { 0x044E, 88985 }, + { 0x044F, 87989 }, + { 0x0450, 88905 }, + { 0x0451, 87909 }, + { 0x0452, 88898 }, + { 0x0453, 87902 }, + { 0x0454, 88892 }, + { 0x0455, 87896 }, + { 0x0456, 89410 }, + { 0x0457, 88440 }, + { 0x0458, 88810 }, + { 0x0459, 87814 }, + { 0x045A, 89570 }, + { 0x045B, 88624 }, + { 0x045C, 88919 }, + { 0x045D, 87923 }, + { 0x045E, 89513 }, + { 0x045F, 88552 }, + { 0x0460, 88830 }, + { 0x0461, 87834 }, + { 0x0462, 88947 }, + { 0x0463, 87951 }, + { 0x0464, 89501 }, + { 0x0465, 88540 }, + { 0x0466, 89506 }, + { 0x0467, 88545 }, + { 0x0468, 88852 }, + { 0x0469, 87856 }, + { 0x046A, 89575 }, + { 0x046B, 88629 }, + { 0x046C, 89013 }, + { 0x046D, 88017 }, + { 0x046E, 89006 }, + { 0x046F, 88010 }, + { 0x0470, 89229 }, + { 0x0471, 88233 }, + { 0x0472, 89518 }, + { 0x0473, 88557 }, + { 0x0474, 89523 }, + { 0x0475, 88562 }, + { 0x0476, 88641 }, + { 0x0477, 89138 }, + { 0x0478, 88142 }, + { 0x0479, 88886 }, + { 0x047A, 87890 }, + { 0x047B, 88751 }, + { 0x047C, 87755 }, + { 0x047D, 88784 }, + { 0x047E, 87788 }, + { 0x047F, 88797 }, + { 0x0480, 87801 }, + { 0x0481, 89555 }, + { 0x0482, 88599 }, + { 0x0483, 88774 }, + { 0x0484, 87778 }, + { 0x0485, 88511 }, + { 0x0486, 88652 }, + { 0x0487, 87656 }, + { 0x0488, 88658 }, + { 0x0489, 87662 }, + { 0x048A, 89565 }, + { 0x048B, 88619 }, + { 0x048C, 88862 }, + { 0x048D, 87866 }, + { 0x048E, 89341 }, + { 0x048F, 88366 }, + { 0x0490, 89345 }, + { 0x0491, 88370 }, + { 0x0492, 89150 }, + { 0x0493, 88154 }, + { 0x0494, 88991 }, + { 0x0495, 87995 }, + { 0x0496, 89530 }, + { 0x0497, 88569 }, + { 0x0498, 88684 }, + { 0x0499, 87688 }, + { 0x049A, 88690 }, + { 0x049B, 87694 }, + { 0x049C, 88700 }, + { 0x049D, 87704 }, + { 0x049E, 89372 }, + { 0x049F, 88397 }, + { 0x04A0, 89377 }, + { 0x04A1, 88402 }, + { 0x04A2, 88668 }, + { 0x04A3, 87672 }, + { 0x04A4, 88717 }, + { 0x04A5, 87721 }, + { 0x04A6, 88723 }, + { 0x04A7, 87727 }, + { 0x04A8, 88710 }, + { 0x04A9, 87714 }, + { 0x04AA, 89019 }, + { 0x04AB, 88023 }, + { 0x04AC, 89068 }, + { 0x04AD, 88072 }, + { 0x04AE, 89290 }, + { 0x04AF, 88315 }, + { 0x04B0, 89054 }, + { 0x04B1, 88058 }, + { 0x04B2, 88840 }, + { 0x04B3, 87844 }, + { 0x04B4, 88846 }, + { 0x04B5, 87850 }, + { 0x04B6, 89189 }, + { 0x04B7, 88193 }, + { 0x04B8, 89194 }, + { 0x04B9, 88198 }, + { 0x04BA, 89219 }, + { 0x04BB, 88223 }, + { 0x04BC, 89224 }, + { 0x04BD, 88228 }, + { 0x04BE, 89199 }, + { 0x04BF, 88203 }, + { 0x04C0, 89204 }, + { 0x04C1, 88208 }, + { 0x04C2, 89209 }, + { 0x04C3, 88213 }, + { 0x04C4, 89214 }, + { 0x04C5, 88218 }, + { 0x04C6, 89481 }, + { 0x04C7, 88520 }, + { 0x04C8, 88745 }, + { 0x04C9, 87749 }, + { 0x04CA, 89090 }, + { 0x04CB, 88094 }, + { 0x04CC, 89106 }, + { 0x04CD, 88110 }, + { 0x04CE, 89126 }, + { 0x04CF, 88130 }, + { 0x04D0, 88932 }, + { 0x04D1, 87936 }, + { 0x04D2, 88961 }, + { 0x04D3, 87965 }, + { 0x04D4, 89300 }, + { 0x04D5, 88325 }, + { 0x04D6, 88757 }, + { 0x04D7, 87761 }, + { 0x04D8, 88803 }, + { 0x04D9, 87807 }, + { 0x04DA, 88926 }, + { 0x04DB, 87930 }, + { 0x04DC, 89233 }, + { 0x04DD, 88237 }, + { 0x04DE, 88790 }, + { 0x04DF, 87794 }, + { 0x04E0, 89318 }, + { 0x04E1, 88343 }, + { 0x04E2, 89160 }, + { 0x04E3, 88164 }, + { 0x04E4, 88764 }, + { 0x04E5, 87768 }, + { 0x04E6, 83269 }, + { 0x04E7, 83273 }, + { 0x04E8, 83289 }, + { 0x04E9, 83225 }, + { 0x04EA, 83281 }, + { 0x04EB, 83265 }, + { 0x04EC, 83229 }, + { 0x04ED, 83233 }, + { 0x04EE, 83253 }, + { 0x04EF, 83337 }, + { 0x04F0, 83293 }, + { 0x04F1, 83353 }, + { 0x04F2, 83333 }, + { 0x04F3, 83217 }, + { 0x04F4, 83301 }, + { 0x04F5, 83237 }, + { 0x04F6, 83241 }, + { 0x04F7, 83345 }, + { 0x04F8, 83341 }, + { 0x04F9, 83305 }, + { 0x04FA, 83261 }, + { 0x04FB, 83309 }, + { 0x04FC, 83325 }, + { 0x04FD, 83257 }, + { 0x04FE, 83277 }, + { 0x04FF, 83313 }, + { 0x0500, 83349 }, + { 0x0501, 83249 }, + { 0x0502, 83321 }, + { 0x0503, 83329 }, + { 0x0504, 83361 }, + { 0x0505, 83317 }, + { 0x0506, 83221 }, + { 0x0507, 83365 }, + { 0x0508, 83357 }, + { 0x0509, 83297 }, + { 0x050A, 83245 }, + { 0x050B, 83285 }, + { 0x050C, 83372 }, + { 0x050D, 83381 }, + { 0x050E, 83369 }, + { 0x050F, 83383 }, + { 0x0510, 83020 }, + { 0x0511, 83378 }, + { 0x0512, 83386 }, + { 0x0513, 83180 }, + { 0x0514, 83080 }, + { 0x0515, 83084 }, + { 0x0516, 83100 }, + { 0x0517, 83030 }, + { 0x0518, 83092 }, + { 0x0519, 83076 }, + { 0x051A, 83034 }, + { 0x051B, 83038 }, + { 0x051C, 83058 }, + { 0x051D, 83148 }, + { 0x051E, 83104 }, + { 0x051F, 83164 }, + { 0x0520, 83144 }, + { 0x0521, 83022 }, + { 0x0522, 83112 }, + { 0x0523, 83042 }, + { 0x0524, 83046 }, + { 0x0525, 83156 }, + { 0x0526, 83152 }, + { 0x0527, 83116 }, + { 0x0528, 83066 }, + { 0x0529, 83120 }, + { 0x052A, 83136 }, + { 0x052B, 83062 }, + { 0x052C, 83088 }, + { 0x052D, 83124 }, + { 0x052E, 83160 }, + { 0x052F, 83054 }, + { 0x0530, 83132 }, + { 0x0531, 83140 }, + { 0x0532, 83172 }, + { 0x0533, 83128 }, + { 0x0534, 83026 }, + { 0x0535, 83176 }, + { 0x0536, 83168 }, + { 0x0537, 83108 }, + { 0x0538, 83050 }, + { 0x0539, 83096 }, + { 0x053A, 83185 }, + { 0x053B, 83070 }, + { 0x053C, 83017 }, + { 0x053D, 83215 }, + { 0x053E, 143483 }, + { 0x053F, 133893 }, + { 0x0540, 83014 }, + { 0x0541, 57160 }, + { 0x0542, 57108 }, + { 0x0543, 57177 }, + { 0x0544, 57126 }, + { 0x0545, 57122 }, + { 0x0546, 57157 }, + { 0x0547, 57105 }, + { 0x0548, 57130 }, + { 0x0549, 57150 }, + { 0x054A, 57119 }, + { 0x054B, 57111 }, + { 0x054C, 57136 }, + { 0x054D, 57139 }, + { 0x054E, 57174 }, + { 0x054F, 57153 }, + { 0x0550, 57163 }, + { 0x0551, 57099 }, + { 0x0552, 57089 }, + { 0x0553, 57096 }, + { 0x0554, 57171 }, + { 0x0555, 57143 }, + { 0x0556, 57146 }, + { 0x0557, 57093 }, + { 0x0558, 57102 }, + { 0x0559, 57167 }, + { 0x055A, 57114 }, + { 0x055B, 57080 }, + { 0x055C, 57086 }, + { 0x055D, 57083 }, + { 0x055E, 57133 }, + { 0x055F, 57007 }, + { 0x0560, 57055 }, + { 0x0561, 57026 }, + { 0x0562, 57022 }, + { 0x0563, 57030 }, + { 0x0564, 57034 }, + { 0x0565, 57058 }, + { 0x0566, 57052 }, + { 0x0567, 57049 }, + { 0x0568, 57066 }, + { 0x0569, 57037 }, + { 0x056A, 57040 }, + { 0x056B, 57073 }, + { 0x056C, 57061 }, + { 0x056D, 57046 }, + { 0x056E, 57516 }, + { 0x056F, 57015 }, + { 0x0570, 57519 }, + { 0x0571, 57018 }, + { 0x0572, 57011 }, + { 0x0573, 57512 }, + { 0x0574, 57003 }, + { 0x0575, 56999 }, + { 0x0576, 57508 }, + { 0x0577, 57069 }, + { 0x0578, 57296 }, + { 0x0579, 57201 }, + { 0x057A, 57434 }, + { 0x057B, 57394 }, + { 0x057C, 57180 }, + { 0x057D, 57270 }, + { 0x057E, 57458 }, + { 0x057F, 57214 }, + { 0x0580, 57262 }, + { 0x0581, 57283 }, + { 0x0582, 57412 }, + { 0x0583, 57217 }, + { 0x0584, 57442 }, + { 0x0585, 57422 }, + { 0x0586, 57230 }, + { 0x0587, 57426 }, + { 0x0588, 57238 }, + { 0x0589, 57466 }, + { 0x058A, 57314 }, + { 0x058B, 57402 }, + { 0x058C, 57188 }, + { 0x058D, 57430 }, + { 0x058E, 57450 }, + { 0x058F, 57246 }, + { 0x0590, 57317 }, + { 0x0591, 57325 }, + { 0x0592, 57254 }, + { 0x0593, 56996 }, + { 0x0594, 57498 }, + { 0x0595, 57487 }, + { 0x0596, 57503 }, + { 0x0597, 57522 }, + { 0x0598, 57525 }, + { 0x0599, 47725 }, + { 0x059A, 44272 }, + { 0x059B, 47906 }, + { 0x059C, 44269 }, + { 0x059D, 44279 }, + { 0x059E, 47721 }, + { 0x059F, 137998 }, + { 0x05A0, 138031 }, + { 0x05A1, 44218 }, + { 0x05A2, 137994 }, + { 0x05A3, 137989 }, + { 0x05A4, 69874 }, + { 0x05A5, 44338 }, + { 0x05A6, 44220 }, + { 0x05A7, 47728 }, + { 0x05A8, 44266 }, + { 0x05A9, 44298 }, + { 0x05AA, 44275 }, + { 0x05AB, 44294 }, + { 0x05AC, 44261 }, + { 0x05AD, 44291 }, + { 0x05AE, 44546 }, + { 0x05AF, 44712 }, + { 0x05B0, 44651 }, + { 0x05B1, 44736 }, + { 0x05B2, 44729 }, + { 0x05B3, 44739 }, + { 0x05B4, 51763 }, + { 0x05B5, 46823 }, + { 0x05B6, 44213 }, + { 0x05B7, 47833 }, + { 0x05B8, 51748 }, + { 0x05B9, 47702 }, + { 0x05BA, 47320 }, + { 0x05BB, 46425 }, + { 0x05BC, 46381 }, + { 0x05BD, 46107 }, + { 0x05BE, 46403 }, + { 0x05BF, 46196 }, + { 0x05C0, 46351 }, + { 0x05C1, 44967 }, + { 0x05C2, 46031 }, + { 0x05C3, 45987 }, + { 0x05C4, 47091 }, + { 0x05C5, 46756 }, + { 0x05C6, 45321 }, + { 0x05C7, 46800 }, + { 0x05C8, 45103 }, + { 0x05C9, 47078 }, + { 0x05CA, 45777 }, + { 0x05CB, 47147 }, + { 0x05CC, 46987 }, + { 0x05CD, 47470 }, + { 0x05CE, 45885 }, + { 0x05CF, 45074 }, + { 0x05D0, 45929 }, + { 0x05D1, 46328 }, + { 0x05D2, 44906 }, + { 0x05D3, 47284 }, + { 0x05D4, 47337 }, + { 0x05D5, 47365 }, + { 0x05D6, 47253 }, + { 0x05D7, 47207 }, + { 0x05D8, 47215 }, + { 0x05D9, 47862 }, + { 0x05DA, 45204 }, + { 0x05DB, 45725 }, + { 0x05DC, 45554 }, + { 0x05DD, 45616 }, + { 0x05DE, 46826 }, + { 0x05DF, 46868 }, + { 0x05E0, 45427 }, + { 0x05E1, 46080 }, + { 0x05E2, 46631 }, + { 0x05E3, 46157 }, + { 0x05E4, 47900 }, + { 0x05E5, 47889 }, + { 0x05E6, 47912 }, + { 0x05E7, 44382 }, + { 0x05E8, 44358 }, + { 0x05E9, 44412 }, + { 0x05EA, 47736 }, + { 0x05EB, 44748 }, + { 0x05EC, 47718 }, + { 0x05ED, 44406 }, + { 0x05EE, 44409 }, + { 0x05EF, 51765 }, + { 0x05F0, 47909 }, + { 0x05F1, 44243 }, + { 0x05F2, 51757 }, + { 0x05F3, 44766 }, + { 0x05F4, 44772 }, + { 0x05F5, 44761 }, + { 0x05F6, 51751 }, + { 0x05F7, 44389 }, + { 0x05F8, 44334 }, + { 0x05F9, 138019 }, + { 0x05FA, 138001 }, + { 0x05FB, 138007 }, + { 0x05FC, 138028 }, + { 0x05FD, 138013 }, + { 0x05FE, 138010 }, + { 0x05FF, 138004 }, + { 0x0600, 138025 }, + { 0x0601, 138022 }, + { 0x0602, 138016 }, + { 0x0603, 47848 }, + { 0x0604, 47842 }, + { 0x0605, 51768 }, + { 0x0606, 44223 }, + { 0x0607, 47635 }, + { 0x0608, 47643 }, + { 0x0609, 47714 }, + { 0x060A, 46615 }, + { 0x060B, 46367 }, + { 0x060C, 46374 }, + { 0x060D, 46737 }, + { 0x060E, 46751 }, + { 0x060F, 46741 }, + { 0x0610, 44817 }, + { 0x0611, 46746 }, + { 0x0612, 47118 }, + { 0x0613, 47574 }, + { 0x0614, 46652 }, + { 0x0615, 45990 }, + { 0x0616, 46008 }, + { 0x0617, 45689 }, + { 0x0618, 47538 }, + { 0x0619, 47167 }, + { 0x061A, 45339 }, + { 0x061B, 45331 }, + { 0x061C, 46951 }, + { 0x061D, 46688 }, + { 0x061E, 45374 }, + { 0x061F, 47503 }, + { 0x0620, 47679 }, + { 0x0621, 46675 }, + { 0x0622, 45147 }, + { 0x0623, 45106 }, + { 0x0624, 45112 }, + { 0x0625, 47190 }, + { 0x0626, 47561 }, + { 0x0627, 45191 }, + { 0x0628, 45152 }, + { 0x0629, 45140 }, + { 0x062A, 46974 }, + { 0x062B, 45833 }, + { 0x062C, 45822 }, + { 0x062D, 45780 }, + { 0x062E, 45839 }, + { 0x062F, 45786 }, + { 0x0630, 45795 }, + { 0x0631, 45541 }, + { 0x0632, 45810 }, + { 0x0633, 46990 }, + { 0x0634, 47025 }, + { 0x0635, 47032 }, + { 0x0636, 45888 }, + { 0x0637, 45895 }, + { 0x0638, 45953 }, + { 0x0639, 44924 }, + { 0x063A, 47639 }, + { 0x063B, 45223 }, + { 0x063C, 45207 }, + { 0x063D, 46057 }, + { 0x063E, 45237 }, + { 0x063F, 47424 }, + { 0x0640, 45728 }, + { 0x0641, 45750 }, + { 0x0642, 47328 }, + { 0x0643, 47499 }, + { 0x0644, 45584 }, + { 0x0645, 45557 }, + { 0x0646, 44844 }, + { 0x0647, 45589 }, + { 0x0648, 45273 }, + { 0x0649, 45283 }, + { 0x064A, 47401 }, + { 0x064B, 45276 }, + { 0x064C, 46714 }, + { 0x064D, 45288 }, + { 0x064E, 45630 }, + { 0x064F, 45624 }, + { 0x0650, 45645 }, + { 0x0651, 45652 }, + { 0x0652, 46871 }, + { 0x0653, 46920 }, + { 0x0654, 47447 }, + { 0x0655, 46884 }, + { 0x0656, 46901 }, + { 0x0657, 45513 }, + { 0x0658, 47506 }, + { 0x0659, 45465 }, + { 0x065A, 45430 }, + { 0x065B, 45434 }, + { 0x065C, 46035 }, + { 0x065D, 46102 }, + { 0x065E, 47647 }, + { 0x065F, 44867 }, + { 0x0660, 44814 }, + { 0x0661, 44893 }, + { 0x0662, 47663 }, + { 0x0663, 46095 }, + { 0x0664, 44880 }, + { 0x0665, 47203 }, + { 0x0666, 46191 }, + { 0x0667, 46234 }, + { 0x0668, 46083 }, + { 0x0669, 44791 }, + { 0x066A, 46240 }, + { 0x066B, 46252 }, + { 0x066C, 46256 }, + { 0x066D, 44227 }, + { 0x066E, 44841 }, + { 0x066F, 44702 }, + { 0x0670, 44692 }, + { 0x0671, 44575 }, + { 0x0672, 44533 }, + { 0x0673, 44571 }, + { 0x0674, 44664 }, + { 0x0675, 44597 }, + { 0x0676, 44209 }, + { 0x0677, 44742 }, + { 0x0678, 44676 }, + { 0x0679, 44681 }, + { 0x067A, 44669 }, + { 0x067B, 44581 }, + { 0x067C, 44489 }, + { 0x067D, 44660 }, + { 0x067E, 44523 }, + { 0x067F, 44526 }, + { 0x0680, 44554 }, + { 0x0681, 44587 }, + { 0x0682, 44453 }, + { 0x0683, 44372 }, + { 0x0684, 44377 }, + { 0x0685, 47855 }, + { 0x0686, 44479 }, + { 0x0687, 45167 }, + { 0x0688, 45869 }, + { 0x0689, 103438 }, + { 0x068A, 103414 }, + { 0x068B, 103422 }, + { 0x068C, 103450 }, + { 0x068D, 103430 }, + { 0x068E, 103426 }, + { 0x068F, 103418 }, + { 0x0690, 103446 }, + { 0x0691, 103442 }, + { 0x0692, 103434 }, + { 0x0693, 47473 }, + { 0x0694, 45077 }, + { 0x0695, 47287 }, + { 0x0696, 44282 }, + { 0x0697, 44286 }, + { 0x0698, 45487 }, + { 0x0699, 66056 }, + { 0x069A, 66348 }, + { 0x069B, 66323 }, + { 0x069C, 66352 }, + { 0x069D, 66327 }, + { 0x069E, 66340 }, + { 0x069F, 66070 }, + { 0x06A0, 66074 }, + { 0x06A1, 66355 }, + { 0x06A2, 66335 }, + { 0x06A3, 66343 }, + { 0x06A4, 66310 }, + { 0x06A5, 66313 }, + { 0x06A6, 66316 }, + { 0x06A7, 66360 }, + { 0x06A8, 66172 }, + { 0x06A9, 66275 }, + { 0x06AA, 66137 }, + { 0x06AB, 66179 }, + { 0x06AC, 66182 }, + { 0x06AD, 66189 }, + { 0x06AE, 66195 }, + { 0x06AF, 66119 }, + { 0x06B0, 66134 }, + { 0x06B1, 66169 }, + { 0x06B2, 66140 }, + { 0x06B3, 66155 }, + { 0x06B4, 66158 }, + { 0x06B5, 66162 }, + { 0x06B6, 66165 }, + { 0x06B7, 66143 }, + { 0x06B8, 66192 }, + { 0x06B9, 66125 }, + { 0x06BA, 66128 }, + { 0x06BB, 66212 }, + { 0x06BC, 66175 }, + { 0x06BD, 66116 }, + { 0x06BE, 66122 }, + { 0x06BF, 66227 }, + { 0x06C0, 66186 }, + { 0x06C1, 66146 }, + { 0x06C2, 66149 }, + { 0x06C3, 66152 }, + { 0x06C4, 66131 }, + { 0x06C5, 66200 }, + { 0x06C6, 66204 }, + { 0x06C7, 66208 }, + { 0x06C8, 66279 }, + { 0x06C9, 66282 }, + { 0x06CA, 66285 }, + { 0x06CB, 66288 }, + { 0x06CC, 66291 }, + { 0x06CD, 66294 }, + { 0x06CE, 66092 }, + { 0x06CF, 66095 }, + { 0x06D0, 66112 }, + { 0x06D1, 66108 }, + { 0x06D2, 66084 }, + { 0x06D3, 66087 }, + { 0x06D4, 66345 }, + { 0x06D5, 66078 }, + { 0x06D6, 66081 }, + { 0x06D7, 66098 }, + { 0x06D8, 66307 }, + { 0x06D9, 66321 }, + { 0x06DA, 66319 }, + { 0x06DB, 66060 }, + { 0x06DC, 66065 }, + { 0x06DD, 66100 }, + { 0x06DE, 66104 }, + { 0x06DF, 66299 }, + { 0x06E0, 66303 }, + { 0x06E1, 66090 }, + { 0x06E2, 66297 }, + { 0x06E3, 66223 }, + { 0x06E4, 66219 }, + { 0x06E5, 66215 }, + { 0x06E6, 45038 }, + { 0x06E7, 44970 }, + { 0x06E8, 45016 }, + { 0x06E9, 45025 }, + { 0x06EA, 44980 }, + { 0x06EB, 45046 }, + { 0x06EC, 44996 }, + { 0x06ED, 45324 }, + { 0x06EE, 45381 }, + { 0x06EF, 45129 }, + { 0x06F0, 45173 }, + { 0x06F1, 45864 }, + { 0x06F2, 47007 }, + { 0x06F3, 44909 }, + { 0x06F4, 44938 }, + { 0x06F5, 44916 }, + { 0x06F6, 45230 }, + { 0x06F7, 45244 }, + { 0x06F8, 47331 }, + { 0x06F9, 47358 }, + { 0x06FA, 47372 }, + { 0x06FB, 46829 }, + { 0x06FC, 46835 }, + { 0x06FD, 46877 }, + { 0x06FE, 46895 }, + { 0x06FF, 46889 }, + { 0x0700, 45619 }, + { 0x0701, 45802 }, + { 0x0702, 45827 }, + { 0x0703, 46999 }, + { 0x0704, 45365 }, + { 0x0705, 45345 }, + { 0x0706, 47014 }, + { 0x0707, 45853 }, + { 0x0708, 45356 }, + { 0x0709, 46592 }, + { 0x070A, 46601 }, + { 0x070B, 47223 }, + { 0x070C, 47243 }, + { 0x070D, 47233 }, + { 0x070E, 46129 }, + { 0x070F, 46138 }, + { 0x0710, 46281 }, + { 0x0711, 46291 }, + { 0x0712, 45390 }, + { 0x0713, 47043 }, + { 0x0714, 47052 }, + { 0x0715, 45569 }, + { 0x0716, 68565 }, + { 0x0717, 68670 }, + { 0x0718, 68613 }, + { 0x0719, 68571 }, + { 0x071A, 68562 }, + { 0x071B, 68667 }, + { 0x071C, 68604 }, + { 0x071D, 68595 }, + { 0x071E, 68622 }, + { 0x071F, 68610 }, + { 0x0720, 68598 }, + { 0x0721, 68631 }, + { 0x0722, 68589 }, + { 0x0723, 68607 }, + { 0x0724, 68601 }, + { 0x0725, 68664 }, + { 0x0726, 68619 }, + { 0x0727, 68646 }, + { 0x0728, 68658 }, + { 0x0729, 68655 }, + { 0x072A, 68574 }, + { 0x072B, 68652 }, + { 0x072C, 68649 }, + { 0x072D, 68661 }, + { 0x072E, 68592 }, + { 0x072F, 68583 }, + { 0x0730, 68586 }, + { 0x0731, 68643 }, + { 0x0732, 68577 }, + { 0x0733, 68640 }, + { 0x0734, 68637 }, + { 0x0735, 68628 }, + { 0x0736, 68556 }, + { 0x0737, 68559 }, + { 0x0738, 68580 }, + { 0x0739, 68634 }, + { 0x073A, 68616 }, + { 0x073B, 68625 }, + { 0x073C, 68673 }, + { 0x073D, 68683 }, + { 0x073E, 68677 }, + { 0x073F, 68685 }, + { 0x0740, 68681 }, + { 0x0741, 68691 }, + { 0x0742, 68675 }, + { 0x0743, 68687 }, + { 0x0744, 68679 }, + { 0x0745, 68689 }, + { 0x0746, 68554 }, + { 0x0747, 68568 }, + { 0x0748, 7813 }, + { 0x0749, 7795 }, + { 0x074A, 7801 }, + { 0x074B, 7822 }, + { 0x074C, 7807 }, + { 0x074D, 7804 }, + { 0x074E, 7798 }, + { 0x074F, 7819 }, + { 0x0750, 7816 }, + { 0x0751, 7810 }, + { 0x0752, 7831 }, + { 0x0753, 7855 }, + { 0x0754, 7837 }, + { 0x0755, 7834 }, + { 0x0756, 7846 }, + { 0x0757, 7883 }, + { 0x0758, 7843 }, + { 0x0759, 7932 }, + { 0x075A, 7840 }, + { 0x075B, 7849 }, + { 0x075C, 7886 }, + { 0x075D, 7895 }, + { 0x075E, 7864 }, + { 0x075F, 7904 }, + { 0x0760, 7852 }, + { 0x0761, 7889 }, + { 0x0762, 7917 }, + { 0x0763, 7892 }, + { 0x0764, 7907 }, + { 0x0765, 7858 }, + { 0x0766, 7867 }, + { 0x0767, 7870 }, + { 0x0768, 7879 }, + { 0x0769, 7873 }, + { 0x076A, 7910 }, + { 0x076B, 7876 }, + { 0x076C, 7861 }, + { 0x076D, 7898 }, + { 0x076E, 7901 }, + { 0x076F, 7913 }, + { 0x0770, 7920 }, + { 0x0771, 7928 }, + { 0x0772, 7924 }, + { 0x0773, 7967 }, + { 0x0774, 7962 }, + { 0x0775, 7972 }, + { 0x0776, 7957 }, + { 0x0777, 7947 }, + { 0x0778, 7942 }, + { 0x0779, 7952 }, + { 0x077A, 7982 }, + { 0x077B, 7977 }, + { 0x077C, 7789 }, + { 0x077D, 7785 }, + { 0x077E, 7935 }, + { 0x077F, 7939 }, + { 0x0780, 7793 }, + { 0x0781, 7990 }, + { 0x0782, 7988 }, + { 0x0783, 7986 }, + { 0x0784, 7828 }, + { 0x0785, 7825 }, + { 0x0786, 127827 }, + { 0x0787, 127806 }, + { 0x0788, 127845 }, + { 0x0789, 127842 }, + { 0x078A, 127800 }, + { 0x078B, 127803 }, + { 0x078C, 127824 }, + { 0x078D, 127797 }, + { 0x078E, 127818 }, + { 0x078F, 127821 }, + { 0x0790, 127830 }, + { 0x0791, 127848 }, + { 0x0792, 127809 }, + { 0x0793, 127812 }, + { 0x0794, 127851 }, + { 0x0795, 127794 }, + { 0x0796, 127791 }, + { 0x0797, 127854 }, + { 0x0798, 127815 }, + { 0x0799, 127833 }, + { 0x079A, 127836 }, + { 0x079B, 127839 }, + { 0x079C, 127704 }, + { 0x079D, 127710 }, + { 0x079E, 127716 }, + { 0x079F, 127707 }, + { 0x07A0, 127866 }, + { 0x07A1, 127719 }, + { 0x07A2, 127752 }, + { 0x07A3, 127727 }, + { 0x07A4, 127786 }, + { 0x07A5, 127767 }, + { 0x07A6, 127743 }, + { 0x07A7, 127781 }, + { 0x07A8, 127747 }, + { 0x07A9, 127723 }, + { 0x07AA, 127861 }, + { 0x07AB, 127772 }, + { 0x07AC, 127762 }, + { 0x07AD, 127739 }, + { 0x07AE, 127857 }, + { 0x07AF, 127757 }, + { 0x07B0, 127731 }, + { 0x07B1, 127735 }, + { 0x07B2, 127777 }, + { 0x07B3, 127713 }, + { 0x07B4, 127909 }, + { 0x07B5, 127893 }, + { 0x07B6, 127884 }, + { 0x07B7, 127871 }, + { 0x07B8, 127899 }, + { 0x07B9, 127912 }, + { 0x07BA, 127915 }, + { 0x07BB, 127905 }, + { 0x07BC, 127890 }, + { 0x07BD, 127887 }, + { 0x07BE, 127881 }, + { 0x07BF, 127878 }, + { 0x07C0, 127902 }, + { 0x07C1, 127874 }, + { 0x07C2, 127896 }, + { 0x07C3, 74655 }, + { 0x07C4, 74589 }, + { 0x07C5, 74595 }, + { 0x07C6, 74592 }, + { 0x07C7, 74598 }, + { 0x07C8, 74658 }, + { 0x07C9, 74628 }, + { 0x07CA, 74634 }, + { 0x07CB, 74646 }, + { 0x07CC, 74652 }, + { 0x07CD, 74601 }, + { 0x07CE, 74604 }, + { 0x07CF, 74607 }, + { 0x07D0, 74610 }, + { 0x07D1, 74622 }, + { 0x07D2, 74631 }, + { 0x07D3, 74613 }, + { 0x07D4, 74643 }, + { 0x07D5, 74616 }, + { 0x07D6, 74619 }, + { 0x07D7, 74640 }, + { 0x07D8, 74625 }, + { 0x07D9, 74661 }, + { 0x07DA, 74649 }, + { 0x07DB, 74637 }, + { 0x07DC, 74667 }, + { 0x07DD, 74672 }, + { 0x07DE, 74664 }, + { 0x07DF, 74670 }, + { 0x07E0, 66247 }, + { 0x07E1, 66231 }, + { 0x07E2, 66255 }, + { 0x07E3, 66263 }, + { 0x07E4, 66251 }, + { 0x07E5, 66271 }, + { 0x07E6, 66239 }, + { 0x07E7, 66235 }, + { 0x07E8, 66243 }, + { 0x07E9, 66267 }, + { 0x07EA, 66259 }, + { 0x07EB, 46519 }, + { 0x07EC, 46474 }, + { 0x07ED, 46447 }, + { 0x07EE, 46360 }, + { 0x07EF, 46525 }, + { 0x07F0, 46562 }, + { 0x07F1, 46546 }, + { 0x07F2, 46538 }, + { 0x07F3, 46511 }, + { 0x07F4, 46554 }, + { 0x07F5, 46354 }, + { 0x07F6, 46482 }, + { 0x07F7, 46454 }, + { 0x07F8, 46570 }, + { 0x07F9, 46493 }, + { 0x07FA, 46464 }, + { 0x07FB, 46581 }, + { 0x07FC, 46531 }, + { 0x07FD, 46504 }, + { 0x07FE, 47880 }, + { 0x07FF, 47875 }, + { 0x0800, 47864 }, + { 0x0801, 47114 }, + { 0x0802, 47885 }, + { 0x0803, 47732 }, + { 0x0804, 46908 }, + { 0x0805, 45399 }, + { 0x0806, 45932 }, + { 0x0807, 45960 }, + { 0x0808, 47344 }, + { 0x0809, 51754 }, + { 0x080A, 44457 }, + { 0x080B, 47851 }, + { 0x080C, 44451 }, + { 0x080D, 44626 }, + { 0x080E, 44513 }, + { 0x080F, 44508 }, + { 0x0810, 44518 }, + { 0x0811, 44448 }, + { 0x0812, 51771 }, + { 0x0813, 47845 }, + { 0x0814, 44230 }, + { 0x0815, 45002 }, + { 0x0816, 44990 }, + { 0x0817, 46759 }, + { 0x0818, 45938 }, + { 0x0819, 45213 }, + { 0x081A, 45734 }, + { 0x081B, 45659 }, + { 0x081C, 46841 }, + { 0x081D, 46170 }, + { 0x081E, 46160 }, + { 0x081F, 45817 }, + { 0x0820, 46089 }, + { 0x0821, 47706 }, + { 0x0822, 45685 }, + { 0x0823, 45160 }, + { 0x0824, 45902 }, + { 0x0825, 45295 }, + { 0x0826, 47710 }, + { 0x0827, 47150 }, + { 0x0828, 44931 }, + { 0x0829, 45563 }, + { 0x082A, 45740 }, + { 0x082B, 45009 }, + { 0x082C, 45698 }, + { 0x082D, 46001 }, + { 0x082E, 45846 }, + { 0x082F, 46180 }, + { 0x0830, 47615 }, + { 0x0831, 47619 }, + { 0x0832, 47631 }, + { 0x0833, 45692 }, + { 0x0834, 45995 }, + { 0x0835, 47121 }, + { 0x0836, 47512 }, + { 0x0837, 47352 }, + { 0x0838, 47293 }, + { 0x0839, 47623 }, + { 0x083A, 46766 }, + { 0x083B, 46773 }, + { 0x083C, 45636 }, + { 0x083D, 46711 }, + { 0x083E, 44732 }, + { 0x083F, 44655 }, + { 0x0840, 44558 }, + { 0x0841, 44611 }, + { 0x0842, 44567 }, + { 0x0843, 44427 }, + { 0x0844, 44432 }, + { 0x0845, 44750 }, + { 0x0846, 44444 }, + { 0x0847, 44437 }, + { 0x0848, 44475 }, + { 0x0849, 44631 }, + { 0x084A, 44542 }, + { 0x084B, 44529 }, + { 0x084C, 44538 }, + { 0x084D, 44591 }, + { 0x084E, 44483 }, + { 0x084F, 44646 }, + { 0x0850, 44641 }, + { 0x0851, 44636 }, + { 0x0852, 44616 }, + { 0x0853, 44606 }, + { 0x0854, 44621 }, + { 0x0855, 44687 }, + { 0x0856, 44601 }, + { 0x0857, 47895 }, + { 0x0858, 47838 }, + { 0x0859, 44343 }, + { 0x085A, 44340 }, + { 0x085B, 44346 }, + { 0x085C, 44352 }, + { 0x085D, 44349 }, + { 0x085E, 44355 }, + { 0x085F, 44306 }, + { 0x0860, 44316 }, + { 0x0861, 44326 }, + { 0x0862, 44311 }, + { 0x0863, 44321 }, + { 0x0864, 44330 }, + { 0x0865, 44255 }, + { 0x0866, 44252 }, + { 0x0867, 44258 }, + { 0x0868, 44550 }, + { 0x0869, 44394 }, + { 0x086A, 44384 }, + { 0x086B, 44414 }, + { 0x086C, 44235 }, + { 0x086D, 44461 }, + { 0x086E, 44239 }, + { 0x086F, 44471 }, + { 0x0870, 44779 }, + { 0x0871, 44784 }, + { 0x0872, 44465 }, + { 0x0873, 44360 }, + { 0x0874, 44247 }, + { 0x0875, 129868 }, + { 0x0876, 129880 }, + { 0x0877, 129852 }, + { 0x0878, 129839 }, + { 0x0879, 130255 }, + { 0x087A, 130053 }, + { 0x087B, 130068 }, + { 0x087C, 130059 }, + { 0x087D, 130101 }, + { 0x087E, 130065 }, + { 0x087F, 130140 }, + { 0x0880, 130291 }, + { 0x0881, 130287 }, + { 0x0882, 130271 }, + { 0x0883, 130259 }, + { 0x0884, 130056 }, + { 0x0885, 130071 }, + { 0x0886, 130275 }, + { 0x0887, 130263 }, + { 0x0888, 130062 }, + { 0x0889, 130074 }, + { 0x088A, 130107 }, + { 0x088B, 130179 }, + { 0x088C, 130095 }, + { 0x088D, 130170 }, + { 0x088E, 130185 }, + { 0x088F, 130086 }, + { 0x0890, 130158 }, + { 0x0891, 130104 }, + { 0x0892, 130173 }, + { 0x0893, 130191 }, + { 0x0894, 130215 }, + { 0x0895, 130245 }, + { 0x0896, 130161 }, + { 0x0897, 130230 }, + { 0x0898, 130188 }, + { 0x0899, 130134 }, + { 0x089A, 130212 }, + { 0x089B, 130089 }, + { 0x089C, 130164 }, + { 0x089D, 130116 }, + { 0x089E, 130242 }, + { 0x089F, 130122 }, + { 0x08A0, 130197 }, + { 0x08A1, 130083 }, + { 0x08A2, 130155 }, + { 0x08A3, 130113 }, + { 0x08A4, 130146 }, + { 0x08A5, 130128 }, + { 0x08A6, 130203 }, + { 0x08A7, 130110 }, + { 0x08A8, 130182 }, + { 0x08A9, 130239 }, + { 0x08AA, 130143 }, + { 0x08AB, 130206 }, + { 0x08AC, 130209 }, + { 0x08AD, 130131 }, + { 0x08AE, 130098 }, + { 0x08AF, 129979 }, + { 0x08B0, 129991 }, + { 0x08B1, 129821 }, + { 0x08B2, 129855 }, + { 0x08B3, 129955 }, + { 0x08B4, 129943 }, + { 0x08B5, 129975 }, + { 0x08B6, 129951 }, + { 0x08B7, 129987 }, + { 0x08B8, 130030 }, + { 0x08B9, 130040 }, + { 0x08BA, 130009 }, + { 0x08BB, 129999 }, + { 0x08BC, 129939 }, + { 0x08BD, 129959 }, + { 0x08BE, 130014 }, + { 0x08BF, 130004 }, + { 0x08C0, 129947 }, + { 0x08C1, 129963 }, + { 0x08C2, 129829 }, + { 0x08C3, 130045 }, + { 0x08C4, 129967 }, + { 0x08C5, 129789 }, + { 0x08C6, 130303 }, + { 0x08C7, 130307 }, + { 0x08C8, 129936 }, + { 0x08C9, 129899 }, + { 0x08CA, 130019 }, + { 0x08CB, 129983 }, + { 0x08CC, 129995 }, + { 0x08CD, 130125 }, + { 0x08CE, 130236 }, + { 0x08CF, 130233 }, + { 0x08D0, 130149 }, + { 0x08D1, 130248 }, + { 0x08D2, 130200 }, + { 0x08D3, 130092 }, + { 0x08D4, 130221 }, + { 0x08D5, 130299 }, + { 0x08D6, 130295 }, + { 0x08D7, 130025 }, + { 0x08D8, 130035 }, + { 0x08D9, 129904 }, + { 0x08DA, 130050 }, + { 0x08DB, 129924 }, + { 0x08DC, 129906 }, + { 0x08DD, 129912 }, + { 0x08DE, 129933 }, + { 0x08DF, 129918 }, + { 0x08E0, 129915 }, + { 0x08E1, 129909 }, + { 0x08E2, 129930 }, + { 0x08E3, 129927 }, + { 0x08E4, 129921 }, + { 0x08E5, 130313 }, + { 0x08E6, 129805 }, + { 0x08E7, 130267 }, + { 0x08E8, 130119 }, + { 0x08E9, 130194 }, + { 0x08EA, 130077 }, + { 0x08EB, 130137 }, + { 0x08EC, 130218 }, + { 0x08ED, 130283 }, + { 0x08EE, 130224 }, + { 0x08EF, 130251 }, + { 0x08F0, 130167 }, + { 0x08F1, 130176 }, + { 0x08F2, 130279 }, + { 0x08F3, 130227 }, + { 0x08F4, 130152 }, + { 0x08F5, 70068 }, + { 0x08F6, 70085 }, + { 0x08F7, 70079 }, + { 0x08F8, 70076 }, + { 0x08F9, 70185 }, + { 0x08FA, 70200 }, + { 0x08FB, 70191 }, + { 0x08FC, 70224 }, + { 0x08FD, 70197 }, + { 0x08FE, 70266 }, + { 0x08FF, 70344 }, + { 0x0900, 70340 }, + { 0x0901, 70188 }, + { 0x0902, 70203 }, + { 0x0903, 70194 }, + { 0x0904, 70206 }, + { 0x0905, 70230 }, + { 0x0906, 70290 }, + { 0x0907, 70218 }, + { 0x0908, 70284 }, + { 0x0909, 70293 }, + { 0x090A, 70212 }, + { 0x090B, 70275 }, + { 0x090C, 70227 }, + { 0x090D, 70287 }, + { 0x090E, 70299 }, + { 0x090F, 70320 }, + { 0x0910, 70329 }, + { 0x0911, 70278 }, + { 0x0912, 70326 }, + { 0x0913, 70296 }, + { 0x0914, 70263 }, + { 0x0915, 70317 }, + { 0x0916, 70215 }, + { 0x0917, 70281 }, + { 0x0918, 70239 }, + { 0x0919, 70242 }, + { 0x091A, 70302 }, + { 0x091B, 70209 }, + { 0x091C, 70272 }, + { 0x091D, 70236 }, + { 0x091E, 70269 }, + { 0x091F, 70245 }, + { 0x0920, 70233 }, + { 0x0921, 70311 }, + { 0x0922, 70314 }, + { 0x0923, 70260 }, + { 0x0924, 70221 }, + { 0x0925, 70070 }, + { 0x0926, 70082 }, + { 0x0927, 70143 }, + { 0x0928, 70131 }, + { 0x0929, 70155 }, + { 0x092A, 70139 }, + { 0x092B, 70159 }, + { 0x092C, 70168 }, + { 0x092D, 70178 }, + { 0x092E, 70127 }, + { 0x092F, 70147 }, + { 0x0930, 70135 }, + { 0x0931, 70151 }, + { 0x0932, 70073 }, + { 0x0933, 70336 }, + { 0x0934, 70064 }, + { 0x0935, 70308 }, + { 0x0936, 70305 }, + { 0x0937, 70323 }, + { 0x0938, 70352 }, + { 0x0939, 70348 }, + { 0x093A, 70163 }, + { 0x093B, 70173 }, + { 0x093C, 70106 }, + { 0x093D, 70088 }, + { 0x093E, 70094 }, + { 0x093F, 70115 }, + { 0x0940, 70100 }, + { 0x0941, 70097 }, + { 0x0942, 70091 }, + { 0x0943, 70112 }, + { 0x0944, 70109 }, + { 0x0945, 70103 }, + { 0x0946, 70254 }, + { 0x0947, 70248 }, + { 0x0948, 70121 }, + { 0x0949, 70124 }, + { 0x094A, 70359 }, + { 0x094B, 70371 }, + { 0x094C, 70379 }, + { 0x094D, 70375 }, + { 0x094E, 70363 }, + { 0x094F, 70383 }, + { 0x0950, 70183 }, + { 0x0951, 70118 }, + { 0x0952, 70332 }, + { 0x0953, 70387 }, + { 0x0954, 70356 }, + { 0x0955, 104515 }, + { 0x0956, 104519 }, + { 0x0957, 104534 }, + { 0x0958, 104607 }, + { 0x0959, 104616 }, + { 0x095A, 104610 }, + { 0x095B, 104646 }, + { 0x095C, 104613 }, + { 0x095D, 104679 }, + { 0x095E, 104634 }, + { 0x095F, 104619 }, + { 0x0960, 104664 }, + { 0x0961, 104622 }, + { 0x0962, 104652 }, + { 0x0963, 104709 }, + { 0x0964, 104640 }, + { 0x0965, 104703 }, + { 0x0966, 104715 }, + { 0x0967, 104628 }, + { 0x0968, 104694 }, + { 0x0969, 104649 }, + { 0x096A, 104706 }, + { 0x096B, 104721 }, + { 0x096C, 104736 }, + { 0x096D, 104748 }, + { 0x096E, 104697 }, + { 0x096F, 104739 }, + { 0x0970, 104718 }, + { 0x0971, 104676 }, + { 0x0972, 104733 }, + { 0x0973, 104631 }, + { 0x0974, 104700 }, + { 0x0975, 104661 }, + { 0x0976, 104667 }, + { 0x0977, 104724 }, + { 0x0978, 104625 }, + { 0x0979, 104691 }, + { 0x097A, 104658 }, + { 0x097B, 104685 }, + { 0x097C, 104670 }, + { 0x097D, 104655 }, + { 0x097E, 104712 }, + { 0x097F, 104682 }, + { 0x0980, 104730 }, + { 0x0981, 104673 }, + { 0x0982, 104643 }, + { 0x0983, 104522 }, + { 0x0984, 104579 }, + { 0x0985, 104571 }, + { 0x0986, 104595 }, + { 0x0987, 104575 }, + { 0x0988, 104603 }, + { 0x0989, 104591 }, + { 0x098A, 104583 }, + { 0x098B, 104599 }, + { 0x098C, 104587 }, + { 0x098D, 104528 }, + { 0x098E, 104525 }, + { 0x098F, 104745 }, + { 0x0990, 104742 }, + { 0x0991, 104688 }, + { 0x0992, 104727 }, + { 0x0993, 104637 }, + { 0x0994, 104557 }, + { 0x0995, 104539 }, + { 0x0996, 104545 }, + { 0x0997, 104566 }, + { 0x0998, 104551 }, + { 0x0999, 104548 }, + { 0x099A, 104542 }, + { 0x099B, 104563 }, + { 0x099C, 104560 }, + { 0x099D, 104554 }, + { 0x099E, 104569 }, + { 0x099F, 104537 }, + { 0x09A0, 104511 }, + { 0x09A1, 104513 }, + { 0x09A2, 104508 }, + { 0x09A3, 104531 }, + { 0x09A4, 104751 }, + { 0x09A5, 104244 }, + { 0x09A6, 104228 }, + { 0x09A7, 104225 }, + { 0x09A8, 104354 }, + { 0x09A9, 104369 }, + { 0x09AA, 104360 }, + { 0x09AB, 104393 }, + { 0x09AC, 104366 }, + { 0x09AD, 104423 }, + { 0x09AE, 104493 }, + { 0x09AF, 104489 }, + { 0x09B0, 104346 }, + { 0x09B1, 104357 }, + { 0x09B2, 104372 }, + { 0x09B3, 104350 }, + { 0x09B4, 104363 }, + { 0x09B5, 104375 }, + { 0x09B6, 104399 }, + { 0x09B7, 104450 }, + { 0x09B8, 104387 }, + { 0x09B9, 104444 }, + { 0x09BA, 104456 }, + { 0x09BB, 104381 }, + { 0x09BC, 104435 }, + { 0x09BD, 104396 }, + { 0x09BE, 104447 }, + { 0x09BF, 104462 }, + { 0x09C0, 104477 }, + { 0x09C1, 104486 }, + { 0x09C2, 104438 }, + { 0x09C3, 104483 }, + { 0x09C4, 104459 }, + { 0x09C5, 104420 }, + { 0x09C6, 104474 }, + { 0x09C7, 104384 }, + { 0x09C8, 104441 }, + { 0x09C9, 104408 }, + { 0x09CA, 104411 }, + { 0x09CB, 104465 }, + { 0x09CC, 104378 }, + { 0x09CD, 104432 }, + { 0x09CE, 104405 }, + { 0x09CF, 104429 }, + { 0x09D0, 104414 }, + { 0x09D1, 104402 }, + { 0x09D2, 104453 }, + { 0x09D3, 104426 }, + { 0x09D4, 104468 }, + { 0x09D5, 104471 }, + { 0x09D6, 104417 }, + { 0x09D7, 104390 }, + { 0x09D8, 104205 }, + { 0x09D9, 104231 }, + { 0x09DA, 104296 }, + { 0x09DB, 104284 }, + { 0x09DC, 104308 }, + { 0x09DD, 104292 }, + { 0x09DE, 104312 }, + { 0x09DF, 104331 }, + { 0x09E0, 104341 }, + { 0x09E1, 104316 }, + { 0x09E2, 104280 }, + { 0x09E3, 104300 }, + { 0x09E4, 104321 }, + { 0x09E5, 104288 }, + { 0x09E6, 104304 }, + { 0x09E7, 104222 }, + { 0x09E8, 104203 }, + { 0x09E9, 104501 }, + { 0x09EA, 104497 }, + { 0x09EB, 104326 }, + { 0x09EC, 104336 }, + { 0x09ED, 104265 }, + { 0x09EE, 104247 }, + { 0x09EF, 104253 }, + { 0x09F0, 104274 }, + { 0x09F1, 104259 }, + { 0x09F2, 104256 }, + { 0x09F3, 104250 }, + { 0x09F4, 104271 }, + { 0x09F5, 104268 }, + { 0x09F6, 104262 }, + { 0x09F7, 104505 }, + { 0x09F8, 104277 }, + { 0x09F9, 104480 }, + { 0x09FA, 104208 }, + { 0x09FB, 104219 }, + { 0x09FC, 104216 }, + { 0x09FD, 104234 }, + { 0x09FE, 104211 }, + { 0x09FF, 104239 }, + { 0x0A00, 39667 }, + { 0x0A01, 39658 }, + { 0x0A02, 39655 }, + { 0x0A03, 39758 }, + { 0x0A04, 39773 }, + { 0x0A05, 39764 }, + { 0x0A06, 39797 }, + { 0x0A07, 39770 }, + { 0x0A08, 39827 }, + { 0x0A09, 39906 }, + { 0x0A0A, 39902 }, + { 0x0A0B, 39761 }, + { 0x0A0C, 39776 }, + { 0x0A0D, 39767 }, + { 0x0A0E, 39779 }, + { 0x0A0F, 39803 }, + { 0x0A10, 39857 }, + { 0x0A11, 39791 }, + { 0x0A12, 39851 }, + { 0x0A13, 39863 }, + { 0x0A14, 39785 }, + { 0x0A15, 39842 }, + { 0x0A16, 39800 }, + { 0x0A17, 39854 }, + { 0x0A18, 39869 }, + { 0x0A19, 39890 }, + { 0x0A1A, 39899 }, + { 0x0A1B, 39845 }, + { 0x0A1C, 39896 }, + { 0x0A1D, 39866 }, + { 0x0A1E, 39824 }, + { 0x0A1F, 39887 }, + { 0x0A20, 39788 }, + { 0x0A21, 39848 }, + { 0x0A22, 39812 }, + { 0x0A23, 39815 }, + { 0x0A24, 39872 }, + { 0x0A25, 39782 }, + { 0x0A26, 39839 }, + { 0x0A27, 39809 }, + { 0x0A28, 39836 }, + { 0x0A29, 39818 }, + { 0x0A2A, 39806 }, + { 0x0A2B, 39860 }, + { 0x0A2C, 39830 }, + { 0x0A2D, 39881 }, + { 0x0A2E, 39884 }, + { 0x0A2F, 39821 }, + { 0x0A30, 39794 }, + { 0x0A31, 39649 }, + { 0x0A32, 39661 }, + { 0x0A33, 39716 }, + { 0x0A34, 39704 }, + { 0x0A35, 39728 }, + { 0x0A36, 39712 }, + { 0x0A37, 39732 }, + { 0x0A38, 39741 }, + { 0x0A39, 39751 }, + { 0x0A3A, 39700 }, + { 0x0A3B, 39720 }, + { 0x0A3C, 39708 }, + { 0x0A3D, 39724 }, + { 0x0A3E, 39652 }, + { 0x0A3F, 39664 }, + { 0x0A40, 39641 }, + { 0x0A41, 39645 }, + { 0x0A42, 39878 }, + { 0x0A43, 39875 }, + { 0x0A44, 39893 }, + { 0x0A45, 39914 }, + { 0x0A46, 39910 }, + { 0x0A47, 39736 }, + { 0x0A48, 39746 }, + { 0x0A49, 39688 }, + { 0x0A4A, 39670 }, + { 0x0A4B, 39676 }, + { 0x0A4C, 39697 }, + { 0x0A4D, 39682 }, + { 0x0A4E, 39679 }, + { 0x0A4F, 39673 }, + { 0x0A50, 39694 }, + { 0x0A51, 39691 }, + { 0x0A52, 39685 }, + { 0x0A53, 39756 }, + { 0x0A54, 39833 }, + { 0x0A55, 39926 }, + { 0x0A56, 39918 }, + { 0x0A57, 39934 }, + { 0x0A58, 39930 }, + { 0x0A59, 39922 }, + { 0x0A5A, 39938 }, + { 0x0A5B, 41970 }, + { 0x0A5C, 41967 }, + { 0x0A5D, 42089 }, + { 0x0A5E, 42104 }, + { 0x0A5F, 42095 }, + { 0x0A60, 42122 }, + { 0x0A61, 42101 }, + { 0x0A62, 42155 }, + { 0x0A63, 42092 }, + { 0x0A64, 42116 }, + { 0x0A65, 42107 }, + { 0x0A66, 42098 }, + { 0x0A67, 42140 }, + { 0x0A68, 42110 }, + { 0x0A69, 42128 }, + { 0x0A6A, 42167 }, + { 0x0A6B, 42113 }, + { 0x0A6C, 42125 }, + { 0x0A6D, 42173 }, + { 0x0A6E, 42185 }, + { 0x0A6F, 42170 }, + { 0x0A70, 42152 }, + { 0x0A71, 42137 }, + { 0x0A72, 42191 }, + { 0x0A73, 42143 }, + { 0x0A74, 42134 }, + { 0x0A75, 42161 }, + { 0x0A76, 42146 }, + { 0x0A77, 42176 }, + { 0x0A78, 42131 }, + { 0x0A79, 42164 }, + { 0x0A7A, 42188 }, + { 0x0A7B, 42158 }, + { 0x0A7C, 42179 }, + { 0x0A7D, 42182 }, + { 0x0A7E, 42149 }, + { 0x0A7F, 42119 }, + { 0x0A80, 42058 }, + { 0x0A81, 42046 }, + { 0x0A82, 42074 }, + { 0x0A83, 42054 }, + { 0x0A84, 42082 }, + { 0x0A85, 42042 }, + { 0x0A86, 42070 }, + { 0x0A87, 42062 }, + { 0x0A88, 42050 }, + { 0x0A89, 42078 }, + { 0x0A8A, 42066 }, + { 0x0A8B, 41961 }, + { 0x0A8C, 41910 }, + { 0x0A8D, 41902 }, + { 0x0A8E, 42018 }, + { 0x0A8F, 42000 }, + { 0x0A90, 42006 }, + { 0x0A91, 42027 }, + { 0x0A92, 42012 }, + { 0x0A93, 42009 }, + { 0x0A94, 42003 }, + { 0x0A95, 42024 }, + { 0x0A96, 42021 }, + { 0x0A97, 42015 }, + { 0x0A98, 42202 }, + { 0x0A99, 42194 }, + { 0x0A9A, 42198 }, + { 0x0A9B, 41916 }, + { 0x0A9C, 42030 }, + { 0x0A9D, 41994 }, + { 0x0A9E, 41997 }, + { 0x0A9F, 42086 }, + { 0x0AA0, 41898 }, + { 0x0AA1, 42033 }, + { 0x0AA2, 42205 }, + { 0x0AA3, 68209 }, + { 0x0AA4, 68214 }, + { 0x0AA5, 68198 }, + { 0x0AA6, 68195 }, + { 0x0AA7, 68204 }, + { 0x0AA8, 68314 }, + { 0x0AA9, 68329 }, + { 0x0AAA, 68320 }, + { 0x0AAB, 68356 }, + { 0x0AAC, 68326 }, + { 0x0AAD, 68389 }, + { 0x0AAE, 68475 }, + { 0x0AAF, 68471 }, + { 0x0AB0, 68317 }, + { 0x0AB1, 68347 }, + { 0x0AB2, 68332 }, + { 0x0AB3, 68323 }, + { 0x0AB4, 68374 }, + { 0x0AB5, 68335 }, + { 0x0AB6, 68362 }, + { 0x0AB7, 68419 }, + { 0x0AB8, 68350 }, + { 0x0AB9, 68413 }, + { 0x0ABA, 68425 }, + { 0x0ABB, 68341 }, + { 0x0ABC, 68401 }, + { 0x0ABD, 68359 }, + { 0x0ABE, 68416 }, + { 0x0ABF, 68431 }, + { 0x0AC0, 68452 }, + { 0x0AC1, 68464 }, + { 0x0AC2, 68404 }, + { 0x0AC3, 68455 }, + { 0x0AC4, 68428 }, + { 0x0AC5, 68386 }, + { 0x0AC6, 68446 }, + { 0x0AC7, 68344 }, + { 0x0AC8, 68407 }, + { 0x0AC9, 68371 }, + { 0x0ACA, 68377 }, + { 0x0ACB, 68434 }, + { 0x0ACC, 68338 }, + { 0x0ACD, 68398 }, + { 0x0ACE, 68368 }, + { 0x0ACF, 68395 }, + { 0x0AD0, 68380 }, + { 0x0AD1, 68437 }, + { 0x0AD2, 68365 }, + { 0x0AD3, 68422 }, + { 0x0AD4, 68458 }, + { 0x0AD5, 68392 }, + { 0x0AD6, 68440 }, + { 0x0AD7, 68443 }, + { 0x0AD8, 68383 }, + { 0x0AD9, 68353 }, + { 0x0ADA, 68183 }, + { 0x0ADB, 68201 }, + { 0x0ADC, 68263 }, + { 0x0ADD, 68251 }, + { 0x0ADE, 68279 }, + { 0x0ADF, 68259 }, + { 0x0AE0, 68287 }, + { 0x0AE1, 68296 }, + { 0x0AE2, 68306 }, + { 0x0AE3, 68247 }, + { 0x0AE4, 68275 }, + { 0x0AE5, 68267 }, + { 0x0AE6, 68255 }, + { 0x0AE7, 68283 }, + { 0x0AE8, 68271 }, + { 0x0AE9, 68189 }, + { 0x0AEA, 68311 }, + { 0x0AEB, 68179 }, + { 0x0AEC, 68449 }, + { 0x0AED, 68410 }, + { 0x0AEE, 68461 }, + { 0x0AEF, 68467 }, + { 0x0AF0, 68483 }, + { 0x0AF1, 68479 }, + { 0x0AF2, 68291 }, + { 0x0AF3, 68301 }, + { 0x0AF4, 68235 }, + { 0x0AF5, 68217 }, + { 0x0AF6, 68223 }, + { 0x0AF7, 68244 }, + { 0x0AF8, 68229 }, + { 0x0AF9, 68226 }, + { 0x0AFA, 68220 }, + { 0x0AFB, 68241 }, + { 0x0AFC, 68238 }, + { 0x0AFD, 68232 }, + { 0x0AFE, 68192 }, + { 0x0AFF, 68523 }, + { 0x0B00, 68487 }, + { 0x0B01, 68505 }, + { 0x0B02, 68532 }, + { 0x0B03, 68496 }, + { 0x0B04, 68514 }, + { 0x0B05, 68541 }, + { 0x0B06, 68186 }, + { 0x0B07, 73929 }, + { 0x0B08, 73948 }, + { 0x0B09, 73936 }, + { 0x0B0A, 73933 }, + { 0x0B0B, 73926 }, + { 0x0B0C, 74054 }, + { 0x0B0D, 74069 }, + { 0x0B0E, 74060 }, + { 0x0B0F, 74099 }, + { 0x0B10, 74066 }, + { 0x0B11, 74132 }, + { 0x0B12, 74209 }, + { 0x0B13, 74205 }, + { 0x0B14, 74057 }, + { 0x0B15, 74087 }, + { 0x0B16, 74072 }, + { 0x0B17, 74063 }, + { 0x0B18, 74117 }, + { 0x0B19, 74075 }, + { 0x0B1A, 74105 }, + { 0x0B1B, 74159 }, + { 0x0B1C, 74093 }, + { 0x0B1D, 74153 }, + { 0x0B1E, 74165 }, + { 0x0B1F, 74081 }, + { 0x0B20, 74144 }, + { 0x0B21, 74102 }, + { 0x0B22, 74156 }, + { 0x0B23, 74171 }, + { 0x0B24, 74189 }, + { 0x0B25, 74198 }, + { 0x0B26, 74147 }, + { 0x0B27, 74192 }, + { 0x0B28, 74168 }, + { 0x0B29, 74129 }, + { 0x0B2A, 74186 }, + { 0x0B2B, 74084 }, + { 0x0B2C, 74150 }, + { 0x0B2D, 74114 }, + { 0x0B2E, 74120 }, + { 0x0B2F, 74174 }, + { 0x0B30, 74078 }, + { 0x0B31, 74141 }, + { 0x0B32, 74111 }, + { 0x0B33, 74138 }, + { 0x0B34, 74123 }, + { 0x0B35, 74177 }, + { 0x0B36, 74108 }, + { 0x0B37, 74162 }, + { 0x0B38, 74135 }, + { 0x0B39, 74180 }, + { 0x0B3A, 74183 }, + { 0x0B3B, 74126 }, + { 0x0B3C, 74096 }, + { 0x0B3D, 73920 }, + { 0x0B3E, 73939 }, + { 0x0B3F, 74003 }, + { 0x0B40, 73991 }, + { 0x0B41, 74019 }, + { 0x0B42, 73999 }, + { 0x0B43, 74027 }, + { 0x0B44, 74036 }, + { 0x0B45, 74046 }, + { 0x0B46, 73987 }, + { 0x0B47, 74015 }, + { 0x0B48, 74007 }, + { 0x0B49, 73995 }, + { 0x0B4A, 74023 }, + { 0x0B4B, 74011 }, + { 0x0B4C, 73923 }, + { 0x0B4D, 74051 }, + { 0x0B4E, 73916 }, + { 0x0B4F, 74201 }, + { 0x0B50, 74090 }, + { 0x0B51, 74217 }, + { 0x0B52, 74213 }, + { 0x0B53, 74031 }, + { 0x0B54, 74041 }, + { 0x0B55, 73975 }, + { 0x0B56, 73957 }, + { 0x0B57, 73963 }, + { 0x0B58, 73984 }, + { 0x0B59, 73969 }, + { 0x0B5A, 73966 }, + { 0x0B5B, 73960 }, + { 0x0B5C, 73981 }, + { 0x0B5D, 73978 }, + { 0x0B5E, 73972 }, + { 0x0B5F, 73951 }, + { 0x0B60, 73954 }, + { 0x0B61, 73942 }, + { 0x0B62, 126300 }, + { 0x0B63, 126305 }, + { 0x0B64, 126285 }, + { 0x0B65, 126282 }, + { 0x0B66, 126556 }, + { 0x0B67, 126402 }, + { 0x0B68, 126417 }, + { 0x0B69, 126408 }, + { 0x0B6A, 126444 }, + { 0x0B6B, 126414 }, + { 0x0B6C, 126477 }, + { 0x0B6D, 126604 }, + { 0x0B6E, 126600 }, + { 0x0B6F, 126405 }, + { 0x0B70, 126435 }, + { 0x0B71, 126420 }, + { 0x0B72, 126411 }, + { 0x0B73, 126462 }, + { 0x0B74, 126423 }, + { 0x0B75, 126450 }, + { 0x0B76, 126508 }, + { 0x0B77, 126438 }, + { 0x0B78, 126502 }, + { 0x0B79, 126514 }, + { 0x0B7A, 126429 }, + { 0x0B7B, 126489 }, + { 0x0B7C, 126447 }, + { 0x0B7D, 126505 }, + { 0x0B7E, 126520 }, + { 0x0B7F, 126538 }, + { 0x0B80, 126550 }, + { 0x0B81, 126492 }, + { 0x0B82, 126541 }, + { 0x0B83, 126517 }, + { 0x0B84, 126474 }, + { 0x0B85, 126535 }, + { 0x0B86, 126432 }, + { 0x0B87, 126495 }, + { 0x0B88, 126459 }, + { 0x0B89, 126547 }, + { 0x0B8A, 126465 }, + { 0x0B8B, 126523 }, + { 0x0B8C, 126426 }, + { 0x0B8D, 126486 }, + { 0x0B8E, 126456 }, + { 0x0B8F, 126483 }, + { 0x0B90, 126468 }, + { 0x0B91, 126526 }, + { 0x0B92, 126453 }, + { 0x0B93, 126511 }, + { 0x0B94, 126544 }, + { 0x0B95, 126480 }, + { 0x0B96, 126529 }, + { 0x0B97, 126532 }, + { 0x0B98, 126471 }, + { 0x0B99, 126441 }, + { 0x0B9A, 126553 }, + { 0x0B9B, 126295 }, + { 0x0B9C, 126291 }, + { 0x0B9D, 126288 }, + { 0x0B9E, 126354 }, + { 0x0B9F, 126342 }, + { 0x0BA0, 126370 }, + { 0x0BA1, 126350 }, + { 0x0BA2, 126378 }, + { 0x0BA3, 126387 }, + { 0x0BA4, 126397 }, + { 0x0BA5, 126338 }, + { 0x0BA6, 126366 }, + { 0x0BA7, 126358 }, + { 0x0BA8, 126346 }, + { 0x0BA9, 126374 }, + { 0x0BAA, 126362 }, + { 0x0BAB, 126279 }, + { 0x0BAC, 126498 }, + { 0x0BAD, 126276 }, + { 0x0BAE, 126568 }, + { 0x0BAF, 126576 }, + { 0x0BB0, 126592 }, + { 0x0BB1, 126269 }, + { 0x0BB2, 126659 }, + { 0x0BB3, 126647 }, + { 0x0BB4, 126667 }, + { 0x0BB5, 126655 }, + { 0x0BB6, 126635 }, + { 0x0BB7, 126675 }, + { 0x0BB8, 126631 }, + { 0x0BB9, 126596 }, + { 0x0BBA, 126612 }, + { 0x0BBB, 126608 }, + { 0x0BBC, 126382 }, + { 0x0BBD, 126392 }, + { 0x0BBE, 126326 }, + { 0x0BBF, 126308 }, + { 0x0BC0, 126314 }, + { 0x0BC1, 126335 }, + { 0x0BC2, 126320 }, + { 0x0BC3, 126317 }, + { 0x0BC4, 126311 }, + { 0x0BC5, 126332 }, + { 0x0BC6, 126329 }, + { 0x0BC7, 126323 }, + { 0x0BC8, 126624 }, + { 0x0BC9, 126616 }, + { 0x0BCA, 126620 }, + { 0x0BCB, 126643 }, + { 0x0BCC, 126627 }, + { 0x0BCD, 126663 }, + { 0x0BCE, 126651 }, + { 0x0BCF, 126639 }, + { 0x0BD0, 126671 }, + { 0x0BD1, 126273 }, + { 0x0BD2, 126584 }, + { 0x0BD3, 126572 }, + { 0x0BD4, 126588 }, + { 0x0BD5, 126564 }, + { 0x0BD6, 126580 }, + { 0x0BD7, 126560 }, + { 0x0BD8, 79675 }, + { 0x0BD9, 79672 }, + { 0x0BDA, 79669 }, + { 0x0BDB, 79767 }, + { 0x0BDC, 79782 }, + { 0x0BDD, 79785 }, + { 0x0BDE, 79869 }, + { 0x0BDF, 79773 }, + { 0x0BE0, 79815 }, + { 0x0BE1, 79779 }, + { 0x0BE2, 79860 }, + { 0x0BE3, 79875 }, + { 0x0BE4, 79881 }, + { 0x0BE5, 79872 }, + { 0x0BE6, 79878 }, + { 0x0BE7, 79770 }, + { 0x0BE8, 79806 }, + { 0x0BE9, 79788 }, + { 0x0BEA, 79776 }, + { 0x0BEB, 79825 }, + { 0x0BEC, 79791 }, + { 0x0BED, 79916 }, + { 0x0BEE, 79956 }, + { 0x0BEF, 79908 }, + { 0x0BF0, 79948 }, + { 0x0BF1, 79818 }, + { 0x0BF2, 79835 }, + { 0x0BF3, 79900 }, + { 0x0BF4, 79940 }, + { 0x0BF5, 79912 }, + { 0x0BF6, 79952 }, + { 0x0BF7, 79856 }, + { 0x0BF8, 79851 }, + { 0x0BF9, 79839 }, + { 0x0BFA, 79932 }, + { 0x0BFB, 79972 }, + { 0x0BFC, 79928 }, + { 0x0BFD, 79968 }, + { 0x0BFE, 79888 }, + { 0x0BFF, 79843 }, + { 0x0C00, 79924 }, + { 0x0C01, 79964 }, + { 0x0C02, 79904 }, + { 0x0C03, 79944 }, + { 0x0C04, 79798 }, + { 0x0C05, 79831 }, + { 0x0C06, 79920 }, + { 0x0C07, 79960 }, + { 0x0C08, 79896 }, + { 0x0C09, 79936 }, + { 0x0C0A, 79822 }, + { 0x0C0B, 79763 }, + { 0x0C0C, 79866 }, + { 0x0C0D, 79828 }, + { 0x0C0E, 79794 }, + { 0x0C0F, 79863 }, + { 0x0C10, 79847 }, + { 0x0C11, 79892 }, + { 0x0C12, 79802 }, + { 0x0C13, 79812 }, + { 0x0C14, 79884 }, + { 0x0C15, 79809 }, + { 0x0C16, 79666 }, + { 0x0C17, 79751 }, + { 0x0C18, 79718 }, + { 0x0C19, 79693 }, + { 0x0C1A, 79708 }, + { 0x0C1B, 79683 }, + { 0x0C1C, 79713 }, + { 0x0C1D, 79688 }, + { 0x0C1E, 79759 }, + { 0x0C1F, 79728 }, + { 0x0C20, 79678 }, + { 0x0C21, 79723 }, + { 0x0C22, 79739 }, + { 0x0C23, 79732 }, + { 0x0C24, 79745 }, + { 0x0C25, 79755 }, + { 0x0C26, 79650 }, + { 0x0C27, 79626 }, + { 0x0C28, 79634 }, + { 0x0C29, 79662 }, + { 0x0C2A, 79642 }, + { 0x0C2B, 79638 }, + { 0x0C2C, 79630 }, + { 0x0C2D, 79658 }, + { 0x0C2E, 79654 }, + { 0x0C2F, 79646 }, + { 0x0C30, 79703 }, + { 0x0C31, 79698 }, + { 0x0C32, 80058 }, + { 0x0C33, 17075 }, + { 0x0C34, 17165 }, + { 0x0C35, 17173 }, + { 0x0C36, 17177 }, + { 0x0C37, 17169 }, + { 0x0C38, 17181 }, + { 0x0C39, 17205 }, + { 0x0C3A, 17149 }, + { 0x0C3B, 17161 }, + { 0x0C3C, 17157 }, + { 0x0C3D, 17113 }, + { 0x0C3E, 17153 }, + { 0x0C3F, 17145 }, + { 0x0C40, 17055 }, + { 0x0C41, 17133 }, + { 0x0C42, 17221 }, + { 0x0C43, 17241 }, + { 0x0C44, 17237 }, + { 0x0C45, 17098 }, + { 0x0C46, 17051 }, + { 0x0C47, 17129 }, + { 0x0C48, 17229 }, + { 0x0C49, 17233 }, + { 0x0C4A, 17225 }, + { 0x0C4B, 17094 }, + { 0x0C4C, 17047 }, + { 0x0C4D, 17102 }, + { 0x0C4E, 17213 }, + { 0x0C4F, 17059 }, + { 0x0C50, 17209 }, + { 0x0C51, 17063 }, + { 0x0C52, 17217 }, + { 0x0C53, 17090 }, + { 0x0C54, 17141 }, + { 0x0C55, 17106 }, + { 0x0C56, 17110 }, + { 0x0C57, 17079 }, + { 0x0C58, 17087 }, + { 0x0C59, 17137 }, + { 0x0C5A, 17125 }, + { 0x0C5B, 17121 }, + { 0x0C5C, 17117 }, + { 0x0C5D, 17067 }, + { 0x0C5E, 17083 }, + { 0x0C5F, 17043 }, + { 0x0C60, 17071 }, + { 0x0C61, 17324 }, + { 0x0C62, 17245 }, + { 0x0C63, 17201 }, + { 0x0C64, 17265 }, + { 0x0C65, 17283 }, + { 0x0C66, 17253 }, + { 0x0C67, 17287 }, + { 0x0C68, 17291 }, + { 0x0C69, 17299 }, + { 0x0C6A, 17261 }, + { 0x0C6B, 17295 }, + { 0x0C6C, 17309 }, + { 0x0C6D, 17039 }, + { 0x0C6E, 17249 }, + { 0x0C6F, 17269 }, + { 0x0C70, 17257 }, + { 0x0C71, 17273 }, + { 0x0C72, 17278 }, + { 0x0C73, 17330 }, + { 0x0C74, 17312 }, + { 0x0C75, 17321 }, + { 0x0C76, 17185 }, + { 0x0C77, 17189 }, + { 0x0C78, 17193 }, + { 0x0C79, 17197 }, + { 0x0C7A, 17333 }, + { 0x0C7B, 17315 }, + { 0x0C7C, 17318 }, + { 0x0C7D, 17306 }, + { 0x0C7E, 17027 }, + { 0x0C7F, 17009 }, + { 0x0C80, 17015 }, + { 0x0C81, 17036 }, + { 0x0C82, 17021 }, + { 0x0C83, 17018 }, + { 0x0C84, 17012 }, + { 0x0C85, 17033 }, + { 0x0C86, 17030 }, + { 0x0C87, 17024 }, + { 0x0C88, 17327 }, + { 0x0C89, 17303 }, + { 0x0C8A, 6782 }, + { 0x0C8B, 6829 }, + { 0x0C8C, 6825 }, + { 0x0C8D, 6879 }, + { 0x0C8E, 6833 }, + { 0x0C8F, 6752 }, + { 0x0C90, 6867 }, + { 0x0C91, 6808 }, + { 0x0C92, 6883 }, + { 0x0C93, 6836 }, + { 0x0C94, 6895 }, + { 0x0C95, 6899 }, + { 0x0C96, 6907 }, + { 0x0C97, 6871 }, + { 0x0C98, 6903 }, + { 0x0C99, 6891 }, + { 0x0C9A, 6755 }, + { 0x0C9B, 6816 }, + { 0x0C9C, 6851 }, + { 0x0C9D, 6847 }, + { 0x0C9E, 6875 }, + { 0x0C9F, 6799 }, + { 0x0CA0, 6749 }, + { 0x0CA1, 6802 }, + { 0x0CA2, 6843 }, + { 0x0CA3, 6766 }, + { 0x0CA4, 6839 }, + { 0x0CA5, 6770 }, + { 0x0CA6, 6863 }, + { 0x0CA7, 6796 }, + { 0x0CA8, 6822 }, + { 0x0CA9, 6788 }, + { 0x0CAA, 6792 }, + { 0x0CAB, 6819 }, + { 0x0CAC, 6911 }, + { 0x0CAD, 6915 }, + { 0x0CAE, 6812 }, + { 0x0CAF, 6778 }, + { 0x0CB0, 6887 }, + { 0x0CB1, 6746 }, + { 0x0CB2, 6774 }, + { 0x0CB3, 6919 }, + { 0x0CB4, 6680 }, + { 0x0CB5, 6736 }, + { 0x0CB6, 6704 }, + { 0x0CB7, 6712 }, + { 0x0CB8, 6688 }, + { 0x0CB9, 6724 }, + { 0x0CBA, 6700 }, + { 0x0CBB, 6732 }, + { 0x0CBC, 6696 }, + { 0x0CBD, 6728 }, + { 0x0CBE, 6630 }, + { 0x0CBF, 6741 }, + { 0x0CC0, 6925 }, + { 0x0CC1, 6929 }, + { 0x0CC2, 6684 }, + { 0x0CC3, 6720 }, + { 0x0CC4, 6692 }, + { 0x0CC5, 6716 }, + { 0x0CC6, 6708 }, + { 0x0CC7, 6627 }, + { 0x0CC8, 6634 }, + { 0x0CC9, 6642 }, + { 0x0CCA, 6638 }, + { 0x0CCB, 6646 }, + { 0x0CCC, 6933 }, + { 0x0CCD, 6923 }, + { 0x0CCE, 6921 }, + { 0x0CCF, 6668 }, + { 0x0CD0, 6650 }, + { 0x0CD1, 6656 }, + { 0x0CD2, 6677 }, + { 0x0CD3, 6662 }, + { 0x0CD4, 6659 }, + { 0x0CD5, 6653 }, + { 0x0CD6, 6674 }, + { 0x0CD7, 6671 }, + { 0x0CD8, 6665 }, + { 0x0CD9, 6624 }, + { 0x0CDA, 6621 }, + { 0x0CDB, 6855 }, + { 0x0CDC, 6859 }, + { 0x0CDD, 82062 }, + { 0x0CDE, 81481 }, + { 0x0CDF, 81472 }, + { 0x0CE0, 81463 }, + { 0x0CE1, 81602 }, + { 0x0CE2, 81583 }, + { 0x0CE3, 81541 }, + { 0x0CE4, 81443 }, + { 0x0CE5, 81572 }, + { 0x0CE6, 81536 }, + { 0x0CE7, 81457 }, + { 0x0CE8, 81633 }, + { 0x0CE9, 81628 }, + { 0x0CEA, 81522 }, + { 0x0CEB, 81504 }, + { 0x0CEC, 81576 }, + { 0x0CED, 81512 }, + { 0x0CEE, 81433 }, + { 0x0CEF, 81517 }, + { 0x0CF0, 81549 }, + { 0x0CF1, 81488 }, + { 0x0CF2, 82052 }, + { 0x0CF3, 82057 }, + { 0x0CF4, 82261 }, + { 0x0CF5, 82273 }, + { 0x0CF6, 82268 }, + { 0x0CF7, 81699 }, + { 0x0CF8, 81715 }, + { 0x0CF9, 81704 }, + { 0x0CFA, 81678 }, + { 0x0CFB, 81694 }, + { 0x0CFC, 81709 }, + { 0x0CFD, 81797 }, + { 0x0CFE, 81739 }, + { 0x0CFF, 81745 }, + { 0x0D00, 81806 }, + { 0x0D01, 81751 }, + { 0x0D02, 81748 }, + { 0x0D03, 81742 }, + { 0x0D04, 81803 }, + { 0x0D05, 81800 }, + { 0x0D06, 81794 }, + { 0x0D07, 81754 }, + { 0x0D08, 81762 }, + { 0x0D09, 81790 }, + { 0x0D0A, 81770 }, + { 0x0D0B, 81766 }, + { 0x0D0C, 81758 }, + { 0x0D0D, 81786 }, + { 0x0D0E, 81782 }, + { 0x0D0F, 81774 }, + { 0x0D10, 81778 }, + { 0x0D11, 81525 }, + { 0x0D12, 81492 }, + { 0x0D13, 81557 }, + { 0x0D14, 81498 }, + { 0x0D15, 81419 }, + { 0x0D16, 81439 }, + { 0x0D17, 81428 }, + { 0x0D18, 81423 }, + { 0x0D19, 81414 }, + { 0x0D1A, 81409 }, + { 0x0D1B, 81670 }, + { 0x0D1C, 81656 }, + { 0x0D1D, 81899 }, + { 0x0D1E, 81950 }, + { 0x0D1F, 81890 }, + { 0x0D20, 81947 }, + { 0x0D21, 81956 }, + { 0x0D22, 81884 }, + { 0x0D23, 81935 }, + { 0x0D24, 81896 }, + { 0x0D25, 81962 }, + { 0x0D26, 81983 }, + { 0x0D27, 82001 }, + { 0x0D28, 81938 }, + { 0x0D29, 81989 }, + { 0x0D2A, 81959 }, + { 0x0D2B, 81920 }, + { 0x0D2C, 81977 }, + { 0x0D2D, 81887 }, + { 0x0D2E, 81941 }, + { 0x0D2F, 81908 }, + { 0x0D30, 81911 }, + { 0x0D31, 81965 }, + { 0x0D32, 81881 }, + { 0x0D33, 81932 }, + { 0x0D34, 81905 }, + { 0x0D35, 81980 }, + { 0x0D36, 81998 }, + { 0x0D37, 81944 }, + { 0x0D38, 81992 }, + { 0x0D39, 81923 }, + { 0x0D3A, 81986 }, + { 0x0D3B, 81929 }, + { 0x0D3C, 81878 }, + { 0x0D3D, 81926 }, + { 0x0D3E, 81914 }, + { 0x0D3F, 81902 }, + { 0x0D40, 81971 }, + { 0x0D41, 81974 }, + { 0x0D42, 81917 }, + { 0x0D43, 81893 }, + { 0x0D44, 81875 }, + { 0x0D45, 81995 }, + { 0x0D46, 82004 }, + { 0x0D47, 81953 }, + { 0x0D48, 81968 }, + { 0x0D49, 81825 }, + { 0x0D4A, 81813 }, + { 0x0D4B, 81833 }, + { 0x0D4C, 81821 }, + { 0x0D4D, 81841 }, + { 0x0D4E, 81850 }, + { 0x0D4F, 81860 }, + { 0x0D50, 81845 }, + { 0x0D51, 81855 }, + { 0x0D52, 81809 }, + { 0x0D53, 81829 }, + { 0x0D54, 81817 }, + { 0x0D55, 81837 }, + { 0x0D56, 81720 }, + { 0x0D57, 81726 }, + { 0x0D58, 81865 }, + { 0x0D59, 81870 }, + { 0x0D5A, 81660 }, + { 0x0D5B, 81666 }, + { 0x0D5C, 81599 }, + { 0x0D5D, 81580 }, + { 0x0D5E, 81652 }, + { 0x0D5F, 81730 }, + { 0x0D60, 81647 }, + { 0x0D61, 81674 }, + { 0x0D62, 81637 }, + { 0x0D63, 81642 }, + { 0x0D64, 81734 }, + { 0x0D65, 82065 }, + { 0x0D66, 82071 }, + { 0x0D67, 82076 }, + { 0x0D68, 82114 }, + { 0x0D69, 82182 }, + { 0x0D6A, 82102 }, + { 0x0D6B, 82178 }, + { 0x0D6C, 82186 }, + { 0x0D6D, 82094 }, + { 0x0D6E, 82162 }, + { 0x0D6F, 82110 }, + { 0x0D70, 82194 }, + { 0x0D71, 82218 }, + { 0x0D72, 82242 }, + { 0x0D73, 82166 }, + { 0x0D74, 82226 }, + { 0x0D75, 82190 }, + { 0x0D76, 82142 }, + { 0x0D77, 82210 }, + { 0x0D78, 82098 }, + { 0x0D79, 82170 }, + { 0x0D7A, 82126 }, + { 0x0D7B, 82130 }, + { 0x0D7C, 82198 }, + { 0x0D7D, 82090 }, + { 0x0D7E, 82158 }, + { 0x0D7F, 82122 }, + { 0x0D80, 82214 }, + { 0x0D81, 82238 }, + { 0x0D82, 82174 }, + { 0x0D83, 82230 }, + { 0x0D84, 82146 }, + { 0x0D85, 82222 }, + { 0x0D86, 82154 }, + { 0x0D87, 82086 }, + { 0x0D88, 82150 }, + { 0x0D89, 82134 }, + { 0x0D8A, 82118 }, + { 0x0D8B, 82202 }, + { 0x0D8C, 82206 }, + { 0x0D8D, 82138 }, + { 0x0D8E, 82106 }, + { 0x0D8F, 82082 }, + { 0x0D90, 82234 }, + { 0x0D91, 82251 }, + { 0x0D92, 82256 }, + { 0x0D93, 82246 }, + { 0x0D94, 81398 }, + { 0x0D95, 81402 }, + { 0x0D96, 82288 }, + { 0x0D97, 82293 }, + { 0x0D98, 82278 }, + { 0x0D99, 82283 }, + { 0x0D9A, 82040 }, + { 0x0D9B, 82030 }, + { 0x0D9C, 82048 }, + { 0x0D9D, 82034 }, + { 0x0D9E, 82044 }, + { 0x0D9F, 82008 }, + { 0x0DA0, 82024 }, + { 0x0DA1, 82018 }, + { 0x0DA2, 82012 }, + { 0x0DA3, 81688 }, + { 0x0DA4, 81683 }, + { 0x0DA5, 81529 }, + { 0x0DA6, 81565 }, + { 0x0DA7, 81508 }, + { 0x0DA8, 81609 }, + { 0x0DA9, 81590 }, + { 0x0DAA, 143475 }, + { 0x0DAB, 133885 }, + { 0x0DAC, 143478 }, + { 0x0DAD, 133888 }, + { 0x0DAE, 81618 }, + { 0x0DAF, 81623 }, + { 0x0DB0, 76845 }, + { 0x0DB1, 76896 }, + { 0x0DB2, 76833 }, + { 0x0DB3, 76890 }, + { 0x0DB4, 76922 }, + { 0x0DB5, 76827 }, + { 0x0DB6, 76881 }, + { 0x0DB7, 76842 }, + { 0x0DB8, 76893 }, + { 0x0DB9, 76928 }, + { 0x0DBA, 77019 }, + { 0x0DBB, 77013 }, + { 0x0DBC, 77113 }, + { 0x0DBD, 76884 }, + { 0x0DBE, 77016 }, + { 0x0DBF, 76925 }, + { 0x0DC0, 76866 }, + { 0x0DC1, 77010 }, + { 0x0DC2, 76830 }, + { 0x0DC3, 76887 }, + { 0x0DC4, 76854 }, + { 0x0DC5, 76857 }, + { 0x0DC6, 76931 }, + { 0x0DC7, 76824 }, + { 0x0DC8, 76878 }, + { 0x0DC9, 76851 }, + { 0x0DCA, 76875 }, + { 0x0DCB, 76860 }, + { 0x0DCC, 76848 }, + { 0x0DCD, 76872 }, + { 0x0DCE, 76863 }, + { 0x0DCF, 76836 }, + { 0x0DD0, 76899 }, + { 0x0DD1, 76806 }, + { 0x0DD2, 77027 }, + { 0x0DD3, 76812 }, + { 0x0DD4, 76839 }, + { 0x0DD5, 76818 }, + { 0x0DD6, 76869 }, + { 0x0DD7, 76809 }, + { 0x0DD8, 76902 }, + { 0x0DD9, 76815 }, + { 0x0DDA, 76821 }, + { 0x0DDB, 76742 }, + { 0x0DDC, 76682 }, + { 0x0DDD, 76674 }, + { 0x0DDE, 76690 }, + { 0x0DDF, 76678 }, + { 0x0DE0, 76694 }, + { 0x0DE1, 76665 }, + { 0x0DE2, 76686 }, + { 0x0DE3, 76703 }, + { 0x0DE4, 76698 }, + { 0x0DE5, 76669 }, + { 0x0DE6, 76619 }, + { 0x0DE7, 76505 }, + { 0x0DE8, 76586 }, + { 0x0DE9, 76580 }, + { 0x0DEA, 76524 }, + { 0x0DEB, 77408 }, + { 0x0DEC, 77398 }, + { 0x0DED, 77403 }, + { 0x0DEE, 77393 }, + { 0x0DEF, 77120 }, + { 0x0DF0, 76653 }, + { 0x0DF1, 76635 }, + { 0x0DF2, 76641 }, + { 0x0DF3, 76662 }, + { 0x0DF4, 76647 }, + { 0x0DF5, 76644 }, + { 0x0DF6, 76638 }, + { 0x0DF7, 76659 }, + { 0x0DF8, 76656 }, + { 0x0DF9, 76650 }, + { 0x0DFA, 76576 }, + { 0x0DFB, 76583 }, + { 0x0DFC, 77278 }, + { 0x0DFD, 77281 }, + { 0x0DFE, 77284 }, + { 0x0DFF, 77275 }, + { 0x0E00, 76934 }, + { 0x0E01, 76937 }, + { 0x0E02, 77231 }, + { 0x0E03, 77239 }, + { 0x0E04, 77227 }, + { 0x0E05, 77235 }, + { 0x0E06, 76777 }, + { 0x0E07, 76787 }, + { 0x0E08, 76772 }, + { 0x0E09, 76782 }, + { 0x0E0A, 76918 }, + { 0x0E0B, 76914 }, + { 0x0E0C, 76906 }, + { 0x0E0D, 76910 }, + { 0x0E0E, 77381 }, + { 0x0E0F, 77375 }, + { 0x0E10, 77369 }, + { 0x0E11, 77022 }, + { 0x0E12, 76714 }, + { 0x0E13, 76629 }, + { 0x0E14, 76622 }, + { 0x0E15, 77249 }, + { 0x0E16, 77243 }, + { 0x0E17, 76792 }, + { 0x0E18, 76799 }, + { 0x0E19, 76589 }, + { 0x0E1A, 76595 }, + { 0x0E1B, 76601 }, + { 0x0E1C, 76607 }, + { 0x0E1D, 76613 }, + { 0x0E1E, 77209 }, + { 0x0E1F, 77215 }, + { 0x0E20, 77221 }, + { 0x0E21, 76708 }, + { 0x0E22, 76767 }, + { 0x0E23, 76757 }, + { 0x0E24, 76762 }, + { 0x0E25, 77055 }, + { 0x0E26, 77083 }, + { 0x0E27, 77047 }, + { 0x0E28, 77035 }, + { 0x0E29, 77063 }, + { 0x0E2A, 77091 }, + { 0x0E2B, 77039 }, + { 0x0E2C, 77059 }, + { 0x0E2D, 77095 }, + { 0x0E2E, 77043 }, + { 0x0E2F, 77031 }, + { 0x0E30, 77099 }, + { 0x0E31, 77051 }, + { 0x0E32, 77387 }, + { 0x0E33, 76731 }, + { 0x0E34, 76720 }, + { 0x0E35, 76725 }, + { 0x0E36, 76736 }, + { 0x0E37, 76531 }, + { 0x0E38, 76535 }, + { 0x0E39, 76539 }, + { 0x0E3A, 76543 }, + { 0x0E3B, 76547 }, + { 0x0E3C, 76552 }, + { 0x0E3D, 76557 }, + { 0x0E3E, 77124 }, + { 0x0E3F, 76563 }, + { 0x0E40, 76489 }, + { 0x0E41, 76465 }, + { 0x0E42, 76473 }, + { 0x0E43, 76501 }, + { 0x0E44, 76481 }, + { 0x0E45, 76477 }, + { 0x0E46, 76469 }, + { 0x0E47, 76497 }, + { 0x0E48, 76493 }, + { 0x0E49, 76485 }, + { 0x0E4A, 76568 }, + { 0x0E4B, 76572 }, + { 0x0E4C, 76747 }, + { 0x0E4D, 76752 }, + { 0x0E4E, 77255 }, + { 0x0E4F, 77259 }, + { 0x0E50, 103779 }, + { 0x0E51, 103815 }, + { 0x0E52, 103831 }, + { 0x0E53, 103827 }, + { 0x0E54, 103783 }, + { 0x0E55, 103895 }, + { 0x0E56, 103903 }, + { 0x0E57, 103887 }, + { 0x0E58, 103791 }, + { 0x0E59, 103855 }, + { 0x0E5A, 103859 }, + { 0x0E5B, 103863 }, + { 0x0E5C, 103867 }, + { 0x0E5D, 103795 }, + { 0x0E5E, 103871 }, + { 0x0E5F, 103935 }, + { 0x0E60, 103879 }, + { 0x0E61, 103883 }, + { 0x0E62, 103891 }, + { 0x0E63, 103799 }, + { 0x0E64, 103927 }, + { 0x0E65, 103923 }, + { 0x0E66, 103915 }, + { 0x0E67, 103875 }, + { 0x0E68, 103931 }, + { 0x0E69, 103911 }, + { 0x0E6A, 103819 }, + { 0x0E6B, 103851 }, + { 0x0E6C, 103823 }, + { 0x0E6D, 103907 }, + { 0x0E6E, 103899 }, + { 0x0E6F, 103919 }, + { 0x0E70, 103835 }, + { 0x0E71, 103787 }, + { 0x0E72, 103843 }, + { 0x0E73, 103803 }, + { 0x0E74, 103839 }, + { 0x0E75, 103847 }, + { 0x0E76, 103807 }, + { 0x0E77, 103811 }, + { 0x0E78, 103638 }, + { 0x0E79, 103671 }, + { 0x0E7A, 103683 }, + { 0x0E7B, 103680 }, + { 0x0E7C, 103641 }, + { 0x0E7D, 103731 }, + { 0x0E7E, 103737 }, + { 0x0E7F, 103725 }, + { 0x0E80, 103650 }, + { 0x0E81, 103701 }, + { 0x0E82, 103704 }, + { 0x0E83, 103707 }, + { 0x0E84, 103710 }, + { 0x0E85, 103653 }, + { 0x0E86, 103713 }, + { 0x0E87, 103765 }, + { 0x0E88, 103719 }, + { 0x0E89, 103722 }, + { 0x0E8A, 103728 }, + { 0x0E8B, 103656 }, + { 0x0E8C, 103759 }, + { 0x0E8D, 103756 }, + { 0x0E8E, 103746 }, + { 0x0E8F, 103716 }, + { 0x0E90, 103762 }, + { 0x0E91, 103743 }, + { 0x0E92, 103674 }, + { 0x0E93, 103698 }, + { 0x0E94, 103677 }, + { 0x0E95, 103740 }, + { 0x0E96, 103734 }, + { 0x0E97, 103753 }, + { 0x0E98, 103686 }, + { 0x0E99, 103647 }, + { 0x0E9A, 103692 }, + { 0x0E9B, 103659 }, + { 0x0E9C, 103689 }, + { 0x0E9D, 103695 }, + { 0x0E9E, 103644 }, + { 0x0E9F, 103662 }, + { 0x0EA0, 103768 }, + { 0x0EA1, 103775 }, + { 0x0EA2, 103668 }, + { 0x0EA3, 104172 }, + { 0x0EA4, 108742 }, + { 0x0EA5, 103665 }, + { 0x0EA6, 103749 }, + { 0x0EA7, 103771 }, + { 0x0EA8, 55657 }, + { 0x0EA9, 55801 }, + { 0x0EAA, 55645 }, + { 0x0EAB, 55660 }, + { 0x0EAC, 55804 }, + { 0x0EAD, 55651 }, + { 0x0EAE, 55642 }, + { 0x0EAF, 55648 }, + { 0x0EB0, 55735 }, + { 0x0EB1, 55630 }, + { 0x0EB2, 55681 }, + { 0x0EB3, 55639 }, + { 0x0EB4, 55633 }, + { 0x0EB5, 55723 }, + { 0x0EB6, 55663 }, + { 0x0EB7, 55666 }, + { 0x0EB8, 55675 }, + { 0x0EB9, 55672 }, + { 0x0EBA, 55636 }, + { 0x0EBB, 55828 }, + { 0x0EBC, 55732 }, + { 0x0EBD, 55831 }, + { 0x0EBE, 55768 }, + { 0x0EBF, 55924 }, + { 0x0EC0, 55789 }, + { 0x0EC1, 55738 }, + { 0x0EC2, 55783 }, + { 0x0EC3, 55897 }, + { 0x0EC4, 55759 }, + { 0x0EC5, 55891 }, + { 0x0EC6, 55834 }, + { 0x0EC7, 55777 }, + { 0x0EC8, 55837 }, + { 0x0EC9, 55696 }, + { 0x0ECA, 55969 }, + { 0x0ECB, 55972 }, + { 0x0ECC, 55954 }, + { 0x0ECD, 55942 }, + { 0x0ECE, 55951 }, + { 0x0ECF, 55771 }, + { 0x0ED0, 55909 }, + { 0x0ED1, 55918 }, + { 0x0ED2, 55915 }, + { 0x0ED3, 55894 }, + { 0x0ED4, 55990 }, + { 0x0ED5, 55795 }, + { 0x0ED6, 55714 }, + { 0x0ED7, 55798 }, + { 0x0ED8, 55720 }, + { 0x0ED9, 55711 }, + { 0x0EDA, 55717 }, + { 0x0EDB, 55981 }, + { 0x0EDC, 55927 }, + { 0x0EDD, 55708 }, + { 0x0EDE, 55702 }, + { 0x0EDF, 55846 }, + { 0x0EE0, 55849 }, + { 0x0EE1, 55855 }, + { 0x0EE2, 55852 }, + { 0x0EE3, 55705 }, + { 0x0EE4, 55813 }, + { 0x0EE5, 55966 }, + { 0x0EE6, 55930 }, + { 0x0EE7, 55999 }, + { 0x0EE8, 55669 }, + { 0x0EE9, 55816 }, + { 0x0EEA, 55819 }, + { 0x0EEB, 55750 }, + { 0x0EEC, 55753 }, + { 0x0EED, 55687 }, + { 0x0EEE, 55882 }, + { 0x0EEF, 55729 }, + { 0x0EF0, 55744 }, + { 0x0EF1, 55879 }, + { 0x0EF2, 55888 }, + { 0x0EF3, 55885 }, + { 0x0EF4, 55678 }, + { 0x0EF5, 55741 }, + { 0x0EF6, 55876 }, + { 0x0EF7, 55987 }, + { 0x0EF8, 55948 }, + { 0x0EF9, 56002 }, + { 0x0EFA, 55933 }, + { 0x0EFB, 55873 }, + { 0x0EFC, 55936 }, + { 0x0EFD, 55984 }, + { 0x0EFE, 55906 }, + { 0x0EFF, 55939 }, + { 0x0F00, 55726 }, + { 0x0F01, 55810 }, + { 0x0F02, 55900 }, + { 0x0F03, 55693 }, + { 0x0F04, 55762 }, + { 0x0F05, 55765 }, + { 0x0F06, 55870 }, + { 0x0F07, 55654 }, + { 0x0F08, 56671 }, + { 0x0F09, 56428 }, + { 0x0F0A, 56443 }, + { 0x0F0B, 56464 }, + { 0x0F0C, 56518 }, + { 0x0F0D, 56446 }, + { 0x0F0E, 56431 }, + { 0x0F0F, 56521 }, + { 0x0F10, 56467 }, + { 0x0F11, 56437 }, + { 0x0F12, 56455 }, + { 0x0F13, 56512 }, + { 0x0F14, 56452 }, + { 0x0F15, 56473 }, + { 0x0F16, 56440 }, + { 0x0F17, 56515 }, + { 0x0F18, 56458 }, + { 0x0F19, 56461 }, + { 0x0F1A, 56476 }, + { 0x0F1B, 56449 }, + { 0x0F1C, 56470 }, + { 0x0F1D, 56434 }, + { 0x0F1E, 56479 }, + { 0x0F1F, 56482 }, + { 0x0F20, 56575 }, + { 0x0F21, 56644 }, + { 0x0F22, 56527 }, + { 0x0F23, 56530 }, + { 0x0F24, 56611 }, + { 0x0F25, 56647 }, + { 0x0F26, 56650 }, + { 0x0F27, 56560 }, + { 0x0F28, 56497 }, + { 0x0F29, 56566 }, + { 0x0F2A, 56500 }, + { 0x0F2B, 56503 }, + { 0x0F2C, 56659 }, + { 0x0F2D, 56680 }, + { 0x0F2E, 56683 }, + { 0x0F2F, 56590 }, + { 0x0F30, 56587 }, + { 0x0F31, 56506 }, + { 0x0F32, 56569 }, + { 0x0F33, 56704 }, + { 0x0F34, 56572 }, + { 0x0F35, 56509 }, + { 0x0F36, 56593 }, + { 0x0F37, 56665 }, + { 0x0F38, 56596 }, + { 0x0F39, 56686 }, + { 0x0F3A, 56668 }, + { 0x0F3B, 56605 }, + { 0x0F3C, 56599 }, + { 0x0F3D, 56542 }, + { 0x0F3E, 56617 }, + { 0x0F3F, 56581 }, + { 0x0F40, 56485 }, + { 0x0F41, 56548 }, + { 0x0F42, 56491 }, + { 0x0F43, 56494 }, + { 0x0F44, 56545 }, + { 0x0F45, 56701 }, + { 0x0F46, 56608 }, + { 0x0F47, 56707 }, + { 0x0F48, 56698 }, + { 0x0F49, 56695 }, + { 0x0F4A, 56710 }, + { 0x0F4B, 56524 }, + { 0x0F4C, 56578 }, + { 0x0F4D, 56677 }, + { 0x0F4E, 56563 }, + { 0x0F4F, 56632 }, + { 0x0F50, 56029 }, + { 0x0F51, 56173 }, + { 0x0F52, 56116 }, + { 0x0F53, 56020 }, + { 0x0F54, 56134 }, + { 0x0F55, 56137 }, + { 0x0F56, 56032 }, + { 0x0F57, 56026 }, + { 0x0F58, 56215 }, + { 0x0F59, 56158 }, + { 0x0F5A, 56164 }, + { 0x0F5B, 56065 }, + { 0x0F5C, 56287 }, + { 0x0F5D, 56284 }, + { 0x0F5E, 56155 }, + { 0x0F5F, 56017 }, + { 0x0F60, 56023 }, + { 0x0F61, 56062 }, + { 0x0F62, 56005 }, + { 0x0F63, 56053 }, + { 0x0F64, 56014 }, + { 0x0F65, 56008 }, + { 0x0F66, 56035 }, + { 0x0F67, 56038 }, + { 0x0F68, 56047 }, + { 0x0F69, 56044 }, + { 0x0F6A, 56011 }, + { 0x0F6B, 56197 }, + { 0x0F6C, 56386 }, + { 0x0F6D, 56203 }, + { 0x0F6E, 56206 }, + { 0x0F6F, 56059 }, + { 0x0F70, 56260 }, + { 0x0F71, 56263 }, + { 0x0F72, 56293 }, + { 0x0F73, 56236 }, + { 0x0F74, 56368 }, + { 0x0F75, 56161 }, + { 0x0F76, 56218 }, + { 0x0F77, 56398 }, + { 0x0F78, 56098 }, + { 0x0F79, 56392 }, + { 0x0F7A, 56344 }, + { 0x0F7B, 56347 }, + { 0x0F7C, 56374 }, + { 0x0F7D, 56413 }, + { 0x0F7E, 56329 }, + { 0x0F7F, 56281 }, + { 0x0F80, 56278 }, + { 0x0F81, 56380 }, + { 0x0F82, 56200 }, + { 0x0F83, 56131 }, + { 0x0F84, 56128 }, + { 0x0F85, 56056 }, + { 0x0F86, 56323 }, + { 0x0F87, 56254 }, + { 0x0F88, 56251 }, + { 0x0F89, 56122 }, + { 0x0F8A, 56242 }, + { 0x0F8B, 56152 }, + { 0x0F8C, 56275 }, + { 0x0F8D, 56146 }, + { 0x0F8E, 56245 }, + { 0x0F8F, 56167 }, + { 0x0F90, 56170 }, + { 0x0F91, 56080 }, + { 0x0F92, 56077 }, + { 0x0F93, 56041 }, + { 0x0F94, 56185 }, + { 0x0F95, 56362 }, + { 0x0F96, 56086 }, + { 0x0F97, 56239 }, + { 0x0F98, 56050 }, + { 0x0F99, 56296 }, + { 0x0F9A, 56359 }, + { 0x0F9B, 56269 }, + { 0x0F9C, 56320 }, + { 0x0F9D, 56107 }, + { 0x0F9E, 56113 }, + { 0x0F9F, 56104 }, + { 0x0FA0, 56110 }, + { 0x0FA1, 56182 }, + { 0x0FA2, 56191 }, + { 0x0FA3, 56194 }, + { 0x0FA4, 56299 }, + { 0x0FA5, 56302 }, + { 0x0FA6, 56188 }, + { 0x0FA7, 56092 }, + { 0x0FA8, 101980 }, + { 0x0FA9, 101992 }, + { 0x0FAA, 101986 }, + { 0x0FAB, 102400 }, + { 0x0FAC, 102403 }, + { 0x0FAD, 101983 }, + { 0x0FAE, 101989 }, + { 0x0FAF, 102421 }, + { 0x0FB0, 102025 }, + { 0x0FB1, 102037 }, + { 0x0FB2, 102031 }, + { 0x0FB3, 102484 }, + { 0x0FB4, 102487 }, + { 0x0FB5, 102028 }, + { 0x0FB6, 102034 }, + { 0x0FB7, 102493 }, + { 0x0FB8, 102406 }, + { 0x0FB9, 102418 }, + { 0x0FBA, 102412 }, + { 0x0FBB, 102958 }, + { 0x0FBC, 102961 }, + { 0x0FBD, 102409 }, + { 0x0FBE, 102415 }, + { 0x0FBF, 102964 }, + { 0x0FC0, 102040 }, + { 0x0FC1, 102052 }, + { 0x0FC2, 102046 }, + { 0x0FC3, 102496 }, + { 0x0FC4, 102499 }, + { 0x0FC5, 102043 }, + { 0x0FC6, 102049 }, + { 0x0FC7, 102505 }, + { 0x0FC8, 102682 }, + { 0x0FC9, 102694 }, + { 0x0FCA, 102688 }, + { 0x0FCB, 103090 }, + { 0x0FCC, 103093 }, + { 0x0FCD, 102685 }, + { 0x0FCE, 102691 }, + { 0x0FCF, 103096 }, + { 0x0FD0, 102100 }, + { 0x0FD1, 102112 }, + { 0x0FD2, 102106 }, + { 0x0FD3, 102625 }, + { 0x0FD4, 102628 }, + { 0x0FD5, 102103 }, + { 0x0FD6, 102109 }, + { 0x0FD7, 102634 }, + { 0x0FD8, 102115 }, + { 0x0FD9, 102127 }, + { 0x0FDA, 102121 }, + { 0x0FDB, 102640 }, + { 0x0FDC, 102643 }, + { 0x0FDD, 102118 }, + { 0x0FDE, 102124 }, + { 0x0FDF, 102679 }, + { 0x0FE0, 102646 }, + { 0x0FE1, 102658 }, + { 0x0FE2, 102652 }, + { 0x0FE3, 103072 }, + { 0x0FE4, 103075 }, + { 0x0FE5, 102649 }, + { 0x0FE6, 102655 }, + { 0x0FE7, 103081 }, + { 0x0FE8, 102085 }, + { 0x0FE9, 102097 }, + { 0x0FEA, 102091 }, + { 0x0FEB, 102577 }, + { 0x0FEC, 102580 }, + { 0x0FED, 102088 }, + { 0x0FEE, 102094 }, + { 0x0FEF, 102598 }, + { 0x0FF0, 102601 }, + { 0x0FF1, 102607 }, + { 0x0FF2, 103060 }, + { 0x0FF3, 103063 }, + { 0x0FF4, 102604 }, + { 0x0FF5, 102583 }, + { 0x0FF6, 102595 }, + { 0x0FF7, 102589 }, + { 0x0FF8, 103045 }, + { 0x0FF9, 103048 }, + { 0x0FFA, 102586 }, + { 0x0FFB, 102592 }, + { 0x0FFC, 103051 }, + { 0x0FFD, 103057 }, + { 0x0FFE, 103216 }, + { 0x0FFF, 103219 }, + { 0x1000, 103054 }, + { 0x1001, 101905 }, + { 0x1002, 101917 }, + { 0x1003, 101911 }, + { 0x1004, 102220 }, + { 0x1005, 102238 }, + { 0x1006, 101908 }, + { 0x1007, 101914 }, + { 0x1008, 102244 }, + { 0x1009, 102145 }, + { 0x100A, 102157 }, + { 0x100B, 102151 }, + { 0x100C, 102754 }, + { 0x100D, 102757 }, + { 0x100E, 102148 }, + { 0x100F, 102154 }, + { 0x1010, 102760 }, + { 0x1011, 102130 }, + { 0x1012, 102142 }, + { 0x1013, 102136 }, + { 0x1014, 102697 }, + { 0x1015, 102700 }, + { 0x1016, 102133 }, + { 0x1017, 102139 }, + { 0x1018, 102736 }, + { 0x1019, 101920 }, + { 0x101A, 101932 }, + { 0x101B, 101926 }, + { 0x101C, 102253 }, + { 0x101D, 102271 }, + { 0x101E, 101923 }, + { 0x101F, 101929 }, + { 0x1020, 102292 }, + { 0x1021, 102175 }, + { 0x1022, 102187 }, + { 0x1023, 102181 }, + { 0x1024, 102772 }, + { 0x1025, 102775 }, + { 0x1026, 102178 }, + { 0x1027, 102184 }, + { 0x1028, 102778 }, + { 0x1029, 102781 }, + { 0x102A, 102787 }, + { 0x102B, 103141 }, + { 0x102C, 103144 }, + { 0x102D, 102784 }, + { 0x102E, 102055 }, + { 0x102F, 102067 }, + { 0x1030, 102061 }, + { 0x1031, 102517 }, + { 0x1032, 102520 }, + { 0x1033, 102058 }, + { 0x1034, 102064 }, + { 0x1035, 102526 }, + { 0x1036, 102529 }, + { 0x1037, 102541 }, + { 0x1038, 102535 }, + { 0x1039, 103018 }, + { 0x103A, 103021 }, + { 0x103B, 102532 }, + { 0x103C, 102538 }, + { 0x103D, 103027 }, + { 0x103E, 103306 }, + { 0x103F, 103322 }, + { 0x1040, 103314 }, + { 0x1041, 103326 }, + { 0x1042, 103330 }, + { 0x1043, 103310 }, + { 0x1044, 103318 }, + { 0x1045, 103338 }, + { 0x1046, 102010 }, + { 0x1047, 102022 }, + { 0x1048, 102016 }, + { 0x1049, 102436 }, + { 0x104A, 102439 }, + { 0x104B, 102013 }, + { 0x104C, 102019 }, + { 0x104D, 102442 }, + { 0x104E, 102445 }, + { 0x104F, 102451 }, + { 0x1050, 102988 }, + { 0x1051, 102991 }, + { 0x1052, 102448 }, + { 0x1053, 102454 }, + { 0x1054, 102466 }, + { 0x1055, 102460 }, + { 0x1056, 102994 }, + { 0x1057, 102997 }, + { 0x1058, 102457 }, + { 0x1059, 102463 }, + { 0x105A, 103000 }, + { 0x105B, 103006 }, + { 0x105C, 103210 }, + { 0x105D, 103213 }, + { 0x105E, 103003 }, + { 0x105F, 102160 }, + { 0x1060, 102172 }, + { 0x1061, 102166 }, + { 0x1062, 102763 }, + { 0x1063, 102766 }, + { 0x1064, 102163 }, + { 0x1065, 102169 }, + { 0x1066, 102769 }, + { 0x1067, 103358 }, + { 0x1068, 103374 }, + { 0x1069, 103366 }, + { 0x106A, 103378 }, + { 0x106B, 103382 }, + { 0x106C, 103362 }, + { 0x106D, 103370 }, + { 0x106E, 102205 }, + { 0x106F, 102217 }, + { 0x1070, 102211 }, + { 0x1071, 102814 }, + { 0x1072, 102817 }, + { 0x1073, 102208 }, + { 0x1074, 102214 }, + { 0x1075, 102838 }, + { 0x1076, 102820 }, + { 0x1077, 102832 }, + { 0x1078, 102826 }, + { 0x1079, 103153 }, + { 0x107A, 103156 }, + { 0x107B, 102823 }, + { 0x107C, 102829 }, + { 0x107D, 103159 }, + { 0x107E, 102190 }, + { 0x107F, 102202 }, + { 0x1080, 102196 }, + { 0x1081, 102805 }, + { 0x1082, 102808 }, + { 0x1083, 102193 }, + { 0x1084, 102199 }, + { 0x1085, 102811 }, + { 0x1086, 101935 }, + { 0x1087, 101947 }, + { 0x1088, 101941 }, + { 0x1089, 102295 }, + { 0x108A, 102313 }, + { 0x108B, 101938 }, + { 0x108C, 101944 }, + { 0x108D, 102319 }, + { 0x108E, 102298 }, + { 0x108F, 102310 }, + { 0x1090, 102304 }, + { 0x1091, 102898 }, + { 0x1092, 102901 }, + { 0x1093, 102301 }, + { 0x1094, 102307 }, + { 0x1095, 102919 }, + { 0x1096, 101995 }, + { 0x1097, 102007 }, + { 0x1098, 102001 }, + { 0x1099, 102424 }, + { 0x109A, 102427 }, + { 0x109B, 101998 }, + { 0x109C, 102004 }, + { 0x109D, 102433 }, + { 0x109E, 101965 }, + { 0x109F, 101977 }, + { 0x10A0, 101971 }, + { 0x10A1, 102352 }, + { 0x10A2, 102355 }, + { 0x10A3, 101968 }, + { 0x10A4, 101974 }, + { 0x10A5, 102373 }, + { 0x10A6, 102376 }, + { 0x10A7, 102382 }, + { 0x10A8, 102946 }, + { 0x10A9, 102949 }, + { 0x10AA, 102379 }, + { 0x10AB, 102358 }, + { 0x10AC, 102370 }, + { 0x10AD, 102364 }, + { 0x10AE, 102931 }, + { 0x10AF, 102934 }, + { 0x10B0, 102361 }, + { 0x10B1, 102367 }, + { 0x10B2, 103195 }, + { 0x10B3, 102703 }, + { 0x10B4, 102715 }, + { 0x10B5, 102709 }, + { 0x10B6, 103099 }, + { 0x10B7, 103102 }, + { 0x10B8, 102706 }, + { 0x10B9, 102712 }, + { 0x10BA, 103108 }, + { 0x10BB, 102274 }, + { 0x10BC, 102286 }, + { 0x10BD, 102280 }, + { 0x10BE, 102886 }, + { 0x10BF, 102889 }, + { 0x10C0, 102277 }, + { 0x10C1, 102283 }, + { 0x10C2, 102895 }, + { 0x10C3, 102550 }, + { 0x10C4, 102562 }, + { 0x10C5, 102556 }, + { 0x10C6, 103030 }, + { 0x10C7, 103033 }, + { 0x10C8, 102553 }, + { 0x10C9, 102559 }, + { 0x10CA, 103039 }, + { 0x10CB, 102721 }, + { 0x10CC, 102733 }, + { 0x10CD, 102727 }, + { 0x10CE, 103111 }, + { 0x10CF, 103114 }, + { 0x10D0, 102724 }, + { 0x10D1, 102730 }, + { 0x10D2, 103117 }, + { 0x10D3, 102739 }, + { 0x10D4, 102751 }, + { 0x10D5, 102745 }, + { 0x10D6, 103132 }, + { 0x10D7, 103135 }, + { 0x10D8, 102742 }, + { 0x10D9, 102748 }, + { 0x10DA, 103138 }, + { 0x10DB, 101950 }, + { 0x10DC, 101962 }, + { 0x10DD, 101956 }, + { 0x10DE, 102334 }, + { 0x10DF, 102337 }, + { 0x10E0, 101953 }, + { 0x10E1, 101959 }, + { 0x10E2, 102340 }, + { 0x10E3, 102070 }, + { 0x10E4, 102082 }, + { 0x10E5, 102076 }, + { 0x10E6, 102544 }, + { 0x10E7, 102547 }, + { 0x10E8, 102073 }, + { 0x10E9, 102079 }, + { 0x10EA, 102568 }, + { 0x10EB, 102637 }, + { 0x10EC, 102514 }, + { 0x10ED, 102349 }, + { 0x10EE, 103391 }, + { 0x10EF, 103386 }, + { 0x10F0, 103398 }, + { 0x10F1, 101899 }, + { 0x10F2, 103407 }, + { 0x10F3, 101787 }, + { 0x10F4, 101792 }, + { 0x10F5, 103405 }, + { 0x10F6, 101790 }, + { 0x10F7, 101896 }, + { 0x10F8, 101902 }, + { 0x10F9, 103402 }, + { 0x10FA, 101794 }, + { 0x10FB, 101800 }, + { 0x10FC, 101818 }, + { 0x10FD, 101806 }, + { 0x10FE, 101803 }, + { 0x10FF, 101797 }, + { 0x1100, 101815 }, + { 0x1101, 101812 }, + { 0x1102, 101809 }, + { 0x1103, 101862 }, + { 0x1104, 101887 }, + { 0x1105, 101884 }, + { 0x1106, 101872 }, + { 0x1107, 101869 }, + { 0x1108, 101875 }, + { 0x1109, 101893 }, + { 0x110A, 101878 }, + { 0x110B, 101881 }, + { 0x110C, 101890 }, + { 0x110D, 101865 }, + { 0x110E, 103350 }, + { 0x110F, 102511 }, + { 0x1110, 103015 }, + { 0x1111, 102508 }, + { 0x1112, 103342 }, + { 0x1113, 102250 }, + { 0x1114, 102862 }, + { 0x1115, 102247 }, + { 0x1116, 103346 }, + { 0x1117, 102346 }, + { 0x1118, 102928 }, + { 0x1119, 102343 }, + { 0x111A, 103354 }, + { 0x111B, 102574 }, + { 0x111C, 103042 }, + { 0x111D, 102571 }, + { 0x111E, 101846 }, + { 0x111F, 101825 }, + { 0x1120, 101854 }, + { 0x1121, 101841 }, + { 0x1122, 101829 }, + { 0x1123, 101837 }, + { 0x1124, 101850 }, + { 0x1125, 101833 }, + { 0x1126, 101858 }, + { 0x1127, 101821 }, + { 0x1128, 87241 }, + { 0x1129, 87244 }, + { 0x112A, 87247 }, + { 0x112B, 87250 }, + { 0x112C, 87256 }, + { 0x112D, 87259 }, + { 0x112E, 87280 }, + { 0x112F, 87316 }, + { 0x1130, 87283 }, + { 0x1131, 87286 }, + { 0x1132, 87289 }, + { 0x1133, 87292 }, + { 0x1134, 87295 }, + { 0x1135, 87298 }, + { 0x1136, 87301 }, + { 0x1137, 87304 }, + { 0x1138, 87307 }, + { 0x1139, 87310 }, + { 0x113A, 87313 }, + { 0x113B, 87319 }, + { 0x113C, 87322 }, + { 0x113D, 87325 }, + { 0x113E, 87328 }, + { 0x113F, 87331 }, + { 0x1140, 87334 }, + { 0x1141, 87337 }, + { 0x1142, 87340 }, + { 0x1143, 87343 }, + { 0x1144, 87346 }, + { 0x1145, 87349 }, + { 0x1146, 87355 }, + { 0x1147, 87439 }, + { 0x1148, 87442 }, + { 0x1149, 87358 }, + { 0x114A, 87361 }, + { 0x114B, 87364 }, + { 0x114C, 87367 }, + { 0x114D, 87370 }, + { 0x114E, 87445 }, + { 0x114F, 87448 }, + { 0x1150, 87451 }, + { 0x1151, 87454 }, + { 0x1152, 87457 }, + { 0x1153, 87460 }, + { 0x1154, 87373 }, + { 0x1155, 87253 }, + { 0x1156, 87376 }, + { 0x1157, 87379 }, + { 0x1158, 87382 }, + { 0x1159, 87385 }, + { 0x115A, 87388 }, + { 0x115B, 87262 }, + { 0x115C, 87391 }, + { 0x115D, 87265 }, + { 0x115E, 87394 }, + { 0x115F, 87268 }, + { 0x1160, 87397 }, + { 0x1161, 87271 }, + { 0x1162, 87274 }, + { 0x1163, 87277 }, + { 0x1164, 87436 }, + { 0x1165, 87463 }, + { 0x1166, 87466 }, + { 0x1167, 87469 }, + { 0x1168, 87472 }, + { 0x1169, 87475 }, + { 0x116A, 87478 }, + { 0x116B, 87481 }, + { 0x116C, 87484 }, + { 0x116D, 87487 }, + { 0x116E, 87490 }, + { 0x116F, 87493 }, + { 0x1170, 87496 }, + { 0x1171, 87400 }, + { 0x1172, 87403 }, + { 0x1173, 87406 }, + { 0x1174, 87409 }, + { 0x1175, 87412 }, + { 0x1176, 87415 }, + { 0x1177, 87418 }, + { 0x1178, 87421 }, + { 0x1179, 87424 }, + { 0x117A, 87427 }, + { 0x117B, 87430 }, + { 0x117C, 87433 }, + { 0x117D, 87352 }, + { 0x117E, 87137 }, + { 0x117F, 87141 }, + { 0x1180, 87145 }, + { 0x1181, 87149 }, + { 0x1182, 87153 }, + { 0x1183, 87045 }, + { 0x1184, 85262 }, + { 0x1185, 84275 }, + { 0x1186, 84527 }, + { 0x1187, 84281 }, + { 0x1188, 84359 }, + { 0x1189, 84296 }, + { 0x118A, 84431 }, + { 0x118B, 85365 }, + { 0x118C, 85433 }, + { 0x118D, 85417 }, + { 0x118E, 84269 }, + { 0x118F, 84317 }, + { 0x1190, 84506 }, + { 0x1191, 86500 }, + { 0x1192, 84509 }, + { 0x1193, 86504 }, + { 0x1194, 84867 }, + { 0x1195, 86644 }, + { 0x1196, 84512 }, + { 0x1197, 86508 }, + { 0x1198, 84870 }, + { 0x1199, 86648 }, + { 0x119A, 86160 }, + { 0x119B, 84503 }, + { 0x119C, 86496 }, + { 0x119D, 84861 }, + { 0x119E, 86640 }, + { 0x119F, 86156 }, + { 0x11A0, 84320 }, + { 0x11A1, 85361 }, + { 0x11A2, 86144 }, + { 0x11A3, 85157 }, + { 0x11A4, 85161 }, + { 0x11A5, 85182 }, + { 0x11A6, 85138 }, + { 0x11A7, 85165 }, + { 0x11A8, 85153 }, + { 0x11A9, 85188 }, + { 0x11AA, 85193 }, + { 0x11AB, 85200 }, + { 0x11AC, 85171 }, + { 0x11AD, 85149 }, + { 0x11AE, 85144 }, + { 0x11AF, 84341 }, + { 0x11B0, 84362 }, + { 0x11B1, 84428 }, + { 0x11B2, 84323 }, + { 0x11B3, 84440 }, + { 0x11B4, 85003 }, + { 0x11B5, 84443 }, + { 0x11B6, 84693 }, + { 0x11B7, 84446 }, + { 0x11B8, 84696 }, + { 0x11B9, 85389 }, + { 0x11BA, 85773 }, + { 0x11BB, 85457 }, + { 0x11BC, 84437 }, + { 0x11BD, 84687 }, + { 0x11BE, 84705 }, + { 0x11BF, 86596 }, + { 0x11C0, 84708 }, + { 0x11C1, 86600 }, + { 0x11C2, 85009 }, + { 0x11C3, 86728 }, + { 0x11C4, 84711 }, + { 0x11C5, 86604 }, + { 0x11C6, 85012 }, + { 0x11C7, 86732 }, + { 0x11C8, 84702 }, + { 0x11C9, 86592 }, + { 0x11CA, 85006 }, + { 0x11CB, 86724 }, + { 0x11CC, 85405 }, + { 0x11CD, 84299 }, + { 0x11CE, 86456 }, + { 0x11CF, 85413 }, + { 0x11D0, 84491 }, + { 0x11D1, 85075 }, + { 0x11D2, 84497 }, + { 0x11D3, 84816 }, + { 0x11D4, 84500 }, + { 0x11D5, 84819 }, + { 0x11D6, 85397 }, + { 0x11D7, 85693 }, + { 0x11D8, 85429 }, + { 0x11D9, 84488 }, + { 0x11DA, 84798 }, + { 0x11DB, 84840 }, + { 0x11DC, 86628 }, + { 0x11DD, 84843 }, + { 0x11DE, 86632 }, + { 0x11DF, 85120 }, + { 0x11E0, 86772 }, + { 0x11E1, 84846 }, + { 0x11E2, 86636 }, + { 0x11E3, 85123 }, + { 0x11E4, 86776 }, + { 0x11E5, 84837 }, + { 0x11E6, 86624 }, + { 0x11E7, 85117 }, + { 0x11E8, 86768 }, + { 0x11E9, 86200 }, + { 0x11EA, 84311 }, + { 0x11EB, 84825 }, + { 0x11EC, 84831 }, + { 0x11ED, 84834 }, + { 0x11EE, 84822 }, + { 0x11EF, 84368 }, + { 0x11F0, 84922 }, + { 0x11F1, 84371 }, + { 0x11F2, 84573 }, + { 0x11F3, 84374 }, + { 0x11F4, 84576 }, + { 0x11F5, 85373 }, + { 0x11F6, 84365 }, + { 0x11F7, 84567 }, + { 0x11F8, 84582 }, + { 0x11F9, 86532 }, + { 0x11FA, 84585 }, + { 0x11FB, 86536 }, + { 0x11FC, 84931 }, + { 0x11FD, 86688 }, + { 0x11FE, 84588 }, + { 0x11FF, 86540 }, + { 0x1200, 84934 }, + { 0x1201, 86692 }, + { 0x1202, 84579 }, + { 0x1203, 86528 }, + { 0x1204, 84925 }, + { 0x1205, 86684 }, + { 0x1206, 86168 }, + { 0x1207, 84284 }, + { 0x1208, 84377 }, + { 0x1209, 86881 }, + { 0x120A, 86885 }, + { 0x120B, 86889 }, + { 0x120C, 86877 }, + { 0x120D, 84332 }, + { 0x120E, 84900 }, + { 0x120F, 84335 }, + { 0x1210, 84540 }, + { 0x1211, 84338 }, + { 0x1212, 84543 }, + { 0x1213, 85369 }, + { 0x1214, 84329 }, + { 0x1215, 84533 }, + { 0x1216, 84549 }, + { 0x1217, 86516 }, + { 0x1218, 84552 }, + { 0x1219, 86520 }, + { 0x121A, 84906 }, + { 0x121B, 86672 }, + { 0x121C, 84555 }, + { 0x121D, 86524 }, + { 0x121E, 84909 }, + { 0x121F, 86676 }, + { 0x1220, 84546 }, + { 0x1221, 86512 }, + { 0x1222, 84903 }, + { 0x1223, 86668 }, + { 0x1224, 86164 }, + { 0x1225, 84272 }, + { 0x1226, 85321 }, + { 0x1227, 84398 }, + { 0x1228, 84958 }, + { 0x1229, 84404 }, + { 0x122A, 84630 }, + { 0x122B, 84407 }, + { 0x122C, 84633 }, + { 0x122D, 85381 }, + { 0x122E, 84395 }, + { 0x122F, 84624 }, + { 0x1230, 84639 }, + { 0x1231, 86572 }, + { 0x1232, 84642 }, + { 0x1233, 86576 }, + { 0x1234, 84964 }, + { 0x1235, 86712 }, + { 0x1236, 84645 }, + { 0x1237, 86580 }, + { 0x1238, 84967 }, + { 0x1239, 86716 }, + { 0x123A, 84636 }, + { 0x123B, 86568 }, + { 0x123C, 84961 }, + { 0x123D, 86708 }, + { 0x123E, 86172 }, + { 0x123F, 84290 }, + { 0x1240, 86452 }, + { 0x1241, 84401 }, + { 0x1242, 86808 }, + { 0x1243, 85293 }, + { 0x1244, 84413 }, + { 0x1245, 84970 }, + { 0x1246, 84422 }, + { 0x1247, 84663 }, + { 0x1248, 84425 }, + { 0x1249, 84669 }, + { 0x124A, 85385 }, + { 0x124B, 84410 }, + { 0x124C, 84648 }, + { 0x124D, 84678 }, + { 0x124E, 86588 }, + { 0x124F, 84675 }, + { 0x1250, 86584 }, + { 0x1251, 84994 }, + { 0x1252, 86720 }, + { 0x1253, 86176 }, + { 0x1254, 84293 }, + { 0x1255, 85533 }, + { 0x1256, 84419 }, + { 0x1257, 84383 }, + { 0x1258, 84937 }, + { 0x1259, 84389 }, + { 0x125A, 84606 }, + { 0x125B, 84392 }, + { 0x125C, 84609 }, + { 0x125D, 85377 }, + { 0x125E, 84380 }, + { 0x125F, 84591 }, + { 0x1260, 84615 }, + { 0x1261, 86556 }, + { 0x1262, 84618 }, + { 0x1263, 86560 }, + { 0x1264, 84952 }, + { 0x1265, 86700 }, + { 0x1266, 84621 }, + { 0x1267, 86564 }, + { 0x1268, 84955 }, + { 0x1269, 86704 }, + { 0x126A, 84612 }, + { 0x126B, 86552 }, + { 0x126C, 84949 }, + { 0x126D, 86696 }, + { 0x126E, 84287 }, + { 0x126F, 86448 }, + { 0x1270, 85265 }, + { 0x1271, 84473 }, + { 0x1272, 85036 }, + { 0x1273, 84479 }, + { 0x1274, 84765 }, + { 0x1275, 84482 }, + { 0x1276, 84768 }, + { 0x1277, 85393 }, + { 0x1278, 84470 }, + { 0x1279, 84747 }, + { 0x127A, 84789 }, + { 0x127B, 86612 }, + { 0x127C, 84792 }, + { 0x127D, 86616 }, + { 0x127E, 85069 }, + { 0x127F, 86760 }, + { 0x1280, 84795 }, + { 0x1281, 86620 }, + { 0x1282, 85072 }, + { 0x1283, 86764 }, + { 0x1284, 84786 }, + { 0x1285, 86608 }, + { 0x1286, 85066 }, + { 0x1287, 86756 }, + { 0x1288, 86196 }, + { 0x1289, 84308 }, + { 0x128A, 86812 }, + { 0x128B, 84485 }, + { 0x128C, 86392 }, + { 0x128D, 86820 }, + { 0x128E, 86152 }, + { 0x128F, 86148 }, + { 0x1290, 86188 }, + { 0x1291, 86192 }, + { 0x1292, 86184 }, + { 0x1293, 86180 }, + { 0x1294, 84756 }, + { 0x1295, 84759 }, + { 0x1296, 85045 }, + { 0x1297, 84762 }, + { 0x1298, 85048 }, + { 0x1299, 84753 }, + { 0x129A, 85039 }, + { 0x129B, 85057 }, + { 0x129C, 86744 }, + { 0x129D, 85060 }, + { 0x129E, 86748 }, + { 0x129F, 85225 }, + { 0x12A0, 86796 }, + { 0x12A1, 85063 }, + { 0x12A2, 86752 }, + { 0x12A3, 85228 }, + { 0x12A4, 86800 }, + { 0x12A5, 85054 }, + { 0x12A6, 86740 }, + { 0x12A7, 85222 }, + { 0x12A8, 86792 }, + { 0x12A9, 84476 }, + { 0x12AA, 84518 }, + { 0x12AB, 85126 }, + { 0x12AC, 84521 }, + { 0x12AD, 84879 }, + { 0x12AE, 84524 }, + { 0x12AF, 84882 }, + { 0x12B0, 85401 }, + { 0x12B1, 84515 }, + { 0x12B2, 84873 }, + { 0x12B3, 84891 }, + { 0x12B4, 86656 }, + { 0x12B5, 84894 }, + { 0x12B6, 86660 }, + { 0x12B7, 85132 }, + { 0x12B8, 86784 }, + { 0x12B9, 84897 }, + { 0x12BA, 86664 }, + { 0x12BB, 85135 }, + { 0x12BC, 86788 }, + { 0x12BD, 84888 }, + { 0x12BE, 86652 }, + { 0x12BF, 85129 }, + { 0x12C0, 86780 }, + { 0x12C1, 86204 }, + { 0x12C2, 84314 }, + { 0x12C3, 86816 }, + { 0x12C4, 86464 }, + { 0x12C5, 85325 }, + { 0x12C6, 84461 }, + { 0x12C7, 85285 }, + { 0x12C8, 86472 }, + { 0x12C9, 85021 }, + { 0x12CA, 84464 }, + { 0x12CB, 84732 }, + { 0x12CC, 84467 }, + { 0x12CD, 84735 }, + { 0x12CE, 86476 }, + { 0x12CF, 84458 }, + { 0x12D0, 84726 }, + { 0x12D1, 86468 }, + { 0x12D2, 85024 }, + { 0x12D3, 86736 }, + { 0x12D4, 84305 }, + { 0x12D5, 86460 }, + { 0x12D6, 85269 }, + { 0x12D7, 84347 }, + { 0x12D8, 84912 }, + { 0x12D9, 84350 }, + { 0x12DA, 84561 }, + { 0x12DB, 84353 }, + { 0x12DC, 84564 }, + { 0x12DD, 84344 }, + { 0x12DE, 84558 }, + { 0x12DF, 84919 }, + { 0x12E0, 86680 }, + { 0x12E1, 84278 }, + { 0x12E2, 84807 }, + { 0x12E3, 85273 }, + { 0x12E4, 84810 }, + { 0x12E5, 85277 }, + { 0x12E6, 85081 }, + { 0x12E7, 85281 }, + { 0x12E8, 84813 }, + { 0x12E9, 85084 }, + { 0x12EA, 84804 }, + { 0x12EB, 85078 }, + { 0x12EC, 85234 }, + { 0x12ED, 86804 }, + { 0x12EE, 84494 }, + { 0x12EF, 85108 }, + { 0x12F0, 85111 }, + { 0x12F1, 85114 }, + { 0x12F2, 85105 }, + { 0x12F3, 84828 }, + { 0x12F4, 84852 }, + { 0x12F5, 84855 }, + { 0x12F6, 84858 }, + { 0x12F7, 84849 }, + { 0x12F8, 86216 }, + { 0x12F9, 86220 }, + { 0x12FA, 86232 }, + { 0x12FB, 86224 }, + { 0x12FC, 86236 }, + { 0x12FD, 86212 }, + { 0x12FE, 86228 }, + { 0x12FF, 86208 }, + { 0x1300, 86240 }, + { 0x1301, 84356 }, + { 0x1302, 85018 }, + { 0x1303, 84452 }, + { 0x1304, 84720 }, + { 0x1305, 84455 }, + { 0x1306, 84723 }, + { 0x1307, 84449 }, + { 0x1308, 84714 }, + { 0x1309, 84302 }, + { 0x130A, 85096 }, + { 0x130B, 85099 }, + { 0x130C, 85102 }, + { 0x130D, 85093 }, + { 0x130E, 86484 }, + { 0x130F, 86488 }, + { 0x1310, 86492 }, + { 0x1311, 86480 }, + { 0x1312, 85210 }, + { 0x1313, 84657 }, + { 0x1314, 84979 }, + { 0x1315, 84660 }, + { 0x1316, 84982 }, + { 0x1317, 84654 }, + { 0x1318, 84973 }, + { 0x1319, 84416 }, + { 0x131A, 84666 }, + { 0x131B, 85341 }, + { 0x131C, 85345 }, + { 0x131D, 85349 }, + { 0x131E, 85337 }, + { 0x131F, 86832 }, + { 0x1320, 86836 }, + { 0x1321, 86840 }, + { 0x1322, 86828 }, + { 0x1323, 86824 }, + { 0x1324, 84600 }, + { 0x1325, 84943 }, + { 0x1326, 84603 }, + { 0x1327, 84946 }, + { 0x1328, 84597 }, + { 0x1329, 84940 }, + { 0x132A, 84386 }, + { 0x132B, 86300 }, + { 0x132C, 86304 }, + { 0x132D, 86316 }, + { 0x132E, 86308 }, + { 0x132F, 86320 }, + { 0x1330, 86296 }, + { 0x1331, 86312 }, + { 0x1332, 86292 }, + { 0x1333, 85409 }, + { 0x1334, 86380 }, + { 0x1335, 86384 }, + { 0x1336, 86388 }, + { 0x1337, 86376 }, + { 0x1338, 86436 }, + { 0x1339, 86440 }, + { 0x133A, 86444 }, + { 0x133B, 86432 }, + { 0x133C, 86420 }, + { 0x133D, 86424 }, + { 0x133E, 86428 }, + { 0x133F, 86416 }, + { 0x1340, 86404 }, + { 0x1341, 86408 }, + { 0x1342, 86412 }, + { 0x1343, 86400 }, + { 0x1344, 85301 }, + { 0x1345, 85305 }, + { 0x1346, 85309 }, + { 0x1347, 85297 }, + { 0x1348, 85761 }, + { 0x1349, 85757 }, + { 0x134A, 85749 }, + { 0x134B, 86038 }, + { 0x134C, 85753 }, + { 0x134D, 85745 }, + { 0x134E, 85585 }, + { 0x134F, 85581 }, + { 0x1350, 85573 }, + { 0x1351, 85901 }, + { 0x1352, 85577 }, + { 0x1353, 85569 }, + { 0x1354, 85629 }, + { 0x1355, 85625 }, + { 0x1356, 85617 }, + { 0x1357, 86009 }, + { 0x1358, 85621 }, + { 0x1359, 85613 }, + { 0x135A, 85793 }, + { 0x135B, 85789 }, + { 0x135C, 85781 }, + { 0x135D, 86042 }, + { 0x135E, 85785 }, + { 0x135F, 85777 }, + { 0x1360, 85945 }, + { 0x1361, 85941 }, + { 0x1362, 85933 }, + { 0x1363, 86066 }, + { 0x1364, 85937 }, + { 0x1365, 85929 }, + { 0x1366, 86005 }, + { 0x1367, 86001 }, + { 0x1368, 85993 }, + { 0x1369, 86098 }, + { 0x136A, 85997 }, + { 0x136B, 85989 }, + { 0x136C, 85565 }, + { 0x136D, 85561 }, + { 0x136E, 85553 }, + { 0x136F, 85897 }, + { 0x1370, 85557 }, + { 0x1371, 85549 }, + { 0x1372, 85421 }, + { 0x1373, 85453 }, + { 0x1374, 85449 }, + { 0x1375, 85441 }, + { 0x1376, 85741 }, + { 0x1377, 85445 }, + { 0x1378, 85437 }, + { 0x1379, 85841 }, + { 0x137A, 85837 }, + { 0x137B, 85829 }, + { 0x137C, 86050 }, + { 0x137D, 85833 }, + { 0x137E, 85825 }, + { 0x137F, 85861 }, + { 0x1380, 85857 }, + { 0x1381, 85849 }, + { 0x1382, 86054 }, + { 0x1383, 85853 }, + { 0x1384, 85845 }, + { 0x1385, 85481 }, + { 0x1386, 85545 }, + { 0x1387, 85541 }, + { 0x1388, 85529 }, + { 0x1389, 85893 }, + { 0x138A, 85537 }, + { 0x138B, 85525 }, + { 0x138C, 85521 }, + { 0x138D, 85517 }, + { 0x138E, 85509 }, + { 0x138F, 85889 }, + { 0x1390, 85513 }, + { 0x1391, 85505 }, + { 0x1392, 85649 }, + { 0x1393, 85645 }, + { 0x1394, 85637 }, + { 0x1395, 86013 }, + { 0x1396, 85641 }, + { 0x1397, 85633 }, + { 0x1398, 85477 }, + { 0x1399, 85317 }, + { 0x139A, 85473 }, + { 0x139B, 85465 }, + { 0x139C, 85797 }, + { 0x139D, 85469 }, + { 0x139E, 85313 }, + { 0x139F, 85461 }, + { 0x13A0, 85817 }, + { 0x13A1, 85813 }, + { 0x13A2, 85805 }, + { 0x13A3, 86046 }, + { 0x13A4, 85809 }, + { 0x13A5, 85801 }, + { 0x13A6, 85501 }, + { 0x13A7, 85497 }, + { 0x13A8, 85489 }, + { 0x13A9, 85865 }, + { 0x13AA, 85493 }, + { 0x13AB, 85485 }, + { 0x13AC, 85713 }, + { 0x13AD, 85709 }, + { 0x13AE, 85701 }, + { 0x13AF, 86030 }, + { 0x13B0, 85705 }, + { 0x13B1, 85697 }, + { 0x13B2, 85885 }, + { 0x13B3, 85881 }, + { 0x13B4, 85873 }, + { 0x13B5, 86058 }, + { 0x13B6, 85877 }, + { 0x13B7, 85869 }, + { 0x13B8, 86090 }, + { 0x13B9, 86086 }, + { 0x13BA, 86078 }, + { 0x13BB, 86122 }, + { 0x13BC, 86082 }, + { 0x13BD, 86074 }, + { 0x13BE, 85965 }, + { 0x13BF, 85961 }, + { 0x13C0, 85953 }, + { 0x13C1, 86070 }, + { 0x13C2, 85957 }, + { 0x13C3, 85949 }, + { 0x13C4, 85669 }, + { 0x13C5, 85665 }, + { 0x13C6, 85657 }, + { 0x13C7, 86017 }, + { 0x13C8, 85661 }, + { 0x13C9, 85653 }, + { 0x13CA, 85425 }, + { 0x13CB, 86135 }, + { 0x13CC, 85733 }, + { 0x13CD, 85729 }, + { 0x13CE, 85721 }, + { 0x13CF, 86034 }, + { 0x13D0, 85725 }, + { 0x13D1, 85717 }, + { 0x13D2, 85609 }, + { 0x13D3, 85605 }, + { 0x13D4, 85593 }, + { 0x13D5, 85905 }, + { 0x13D6, 85601 }, + { 0x13D7, 85589 }, + { 0x13D8, 85925 }, + { 0x13D9, 85921 }, + { 0x13DA, 85913 }, + { 0x13DB, 86062 }, + { 0x13DC, 85917 }, + { 0x13DD, 85909 }, + { 0x13DE, 85597 }, + { 0x13DF, 85985 }, + { 0x13E0, 85981 }, + { 0x13E1, 85973 }, + { 0x13E2, 86094 }, + { 0x13E3, 85977 }, + { 0x13E4, 85969 }, + { 0x13E5, 85689 }, + { 0x13E6, 85685 }, + { 0x13E7, 85677 }, + { 0x13E8, 86021 }, + { 0x13E9, 85681 }, + { 0x13EA, 85673 }, + { 0x13EB, 86118 }, + { 0x13EC, 86114 }, + { 0x13ED, 86106 }, + { 0x13EE, 86126 }, + { 0x13EF, 86110 }, + { 0x13F0, 86102 }, + { 0x13F1, 84536 }, + { 0x13F2, 84915 }, + { 0x13F3, 84717 }, + { 0x13F4, 84976 }, + { 0x13F5, 84988 }, + { 0x13F6, 85216 }, + { 0x13F7, 84991 }, + { 0x13F8, 85219 }, + { 0x13F9, 84985 }, + { 0x13FA, 85213 }, + { 0x13FB, 86865 }, + { 0x13FC, 86848 }, + { 0x13FD, 86869 }, + { 0x13FE, 86852 }, + { 0x13FF, 86873 }, + { 0x1400, 86844 }, + { 0x1401, 86861 }, + { 0x1402, 86856 }, + { 0x1403, 86396 }, + { 0x1404, 39544 }, + { 0x1405, 39589 }, + { 0x1406, 39571 }, + { 0x1407, 39595 }, + { 0x1408, 39583 }, + { 0x1409, 39577 }, + { 0x140A, 39586 }, + { 0x140B, 39562 }, + { 0x140C, 39601 }, + { 0x140D, 39559 }, + { 0x140E, 39592 }, + { 0x140F, 39574 }, + { 0x1410, 39565 }, + { 0x1411, 39616 }, + { 0x1412, 39604 }, + { 0x1413, 39580 }, + { 0x1414, 39556 }, + { 0x1415, 39553 }, + { 0x1416, 39550 }, + { 0x1417, 39610 }, + { 0x1418, 39613 }, + { 0x1419, 39607 }, + { 0x141A, 39547 }, + { 0x141B, 39619 }, + { 0x141C, 39568 }, + { 0x141D, 39622 }, + { 0x141E, 39598 }, + { 0x141F, 39625 }, + { 0x1420, 39628 }, + { 0x1421, 40959 }, + { 0x1422, 40891 }, + { 0x1423, 40987 }, + { 0x1424, 40926 }, + { 0x1425, 40900 }, + { 0x1426, 40894 }, + { 0x1427, 41130 }, + { 0x1428, 40938 }, + { 0x1429, 40996 }, + { 0x142A, 40919 }, + { 0x142B, 40906 }, + { 0x142C, 40953 }, + { 0x142D, 41164 }, + { 0x142E, 41152 }, + { 0x142F, 40885 }, + { 0x1430, 40910 }, + { 0x1431, 40913 }, + { 0x1432, 41024 }, + { 0x1433, 41021 }, + { 0x1434, 40929 }, + { 0x1435, 40980 }, + { 0x1436, 40879 }, + { 0x1437, 40935 }, + { 0x1438, 40965 }, + { 0x1439, 40941 }, + { 0x143A, 41041 }, + { 0x143B, 41071 }, + { 0x143C, 41013 }, + { 0x143D, 41184 }, + { 0x143E, 41180 }, + { 0x143F, 41089 }, + { 0x1440, 41172 }, + { 0x1441, 41124 }, + { 0x1442, 40970 }, + { 0x1443, 40876 }, + { 0x1444, 41017 }, + { 0x1445, 40944 }, + { 0x1446, 41145 }, + { 0x1447, 41138 }, + { 0x1448, 40976 }, + { 0x1449, 41098 }, + { 0x144A, 40992 }, + { 0x144B, 41103 }, + { 0x144C, 41030 }, + { 0x144D, 41156 }, + { 0x144E, 40870 }, + { 0x144F, 40903 }, + { 0x1450, 41035 }, + { 0x1451, 41160 }, + { 0x1452, 40873 }, + { 0x1453, 41115 }, + { 0x1454, 41188 }, + { 0x1455, 41127 }, + { 0x1456, 41095 }, + { 0x1457, 41008 }, + { 0x1458, 41084 }, + { 0x1459, 41176 }, + { 0x145A, 41168 }, + { 0x145B, 41078 }, + { 0x145C, 41121 }, + { 0x145D, 41075 }, + { 0x145E, 40947 }, + { 0x145F, 41003 }, + { 0x1460, 41110 }, + { 0x1461, 40932 }, + { 0x1462, 40950 }, + { 0x1463, 41107 }, + { 0x1464, 40956 }, + { 0x1465, 41000 }, + { 0x1466, 40984 }, + { 0x1467, 41149 }, + { 0x1468, 41142 }, + { 0x1469, 41135 }, + { 0x146A, 40888 }, + { 0x146B, 40897 }, + { 0x146C, 41192 }, + { 0x146D, 41198 }, + { 0x146E, 40864 }, + { 0x146F, 40867 }, + { 0x1470, 41201 }, + { 0x1471, 41195 }, + { 0x1472, 40882 }, + { 0x1473, 40923 }, + { 0x1474, 40916 }, + { 0x1475, 41061 }, + { 0x1476, 41056 }, + { 0x1477, 41051 }, + { 0x1478, 41046 }, + { 0x1479, 41066 }, + { 0x147A, 81304 }, + { 0x147B, 81307 }, + { 0x147C, 81310 }, + { 0x147D, 81325 }, + { 0x147E, 81319 }, + { 0x147F, 81355 }, + { 0x1480, 81346 }, + { 0x1481, 81316 }, + { 0x1482, 81334 }, + { 0x1483, 81337 }, + { 0x1484, 81313 }, + { 0x1485, 81331 }, + { 0x1486, 81352 }, + { 0x1487, 81340 }, + { 0x1488, 81328 }, + { 0x1489, 81349 }, + { 0x148A, 81343 }, + { 0x148B, 81322 }, + { 0x148C, 81296 }, + { 0x148D, 81300 }, + { 0x148E, 81290 }, + { 0x148F, 81293 }, + { 0x1490, 81358 }, + { 0x1491, 73817 }, + { 0x1492, 73820 }, + { 0x1493, 73823 }, + { 0x1494, 73838 }, + { 0x1495, 73832 }, + { 0x1496, 73868 }, + { 0x1497, 73859 }, + { 0x1498, 73829 }, + { 0x1499, 73847 }, + { 0x149A, 73850 }, + { 0x149B, 73826 }, + { 0x149C, 73844 }, + { 0x149D, 73865 }, + { 0x149E, 73853 }, + { 0x149F, 73841 }, + { 0x14A0, 73862 }, + { 0x14A1, 73856 }, + { 0x14A2, 73835 }, + { 0x14A3, 73809 }, + { 0x14A4, 73813 }, + { 0x14A5, 73806 }, + { 0x14A6, 132112 }, + { 0x14A7, 132109 }, + { 0x14A8, 22306 }, + { 0x14A9, 22309 }, + { 0x14AA, 22312 }, + { 0x14AB, 22327 }, + { 0x14AC, 22321 }, + { 0x14AD, 22357 }, + { 0x14AE, 22348 }, + { 0x14AF, 22318 }, + { 0x14B0, 22336 }, + { 0x14B1, 22339 }, + { 0x14B2, 22315 }, + { 0x14B3, 22333 }, + { 0x14B4, 22354 }, + { 0x14B5, 22342 }, + { 0x14B6, 22330 }, + { 0x14B7, 22351 }, + { 0x14B8, 22345 }, + { 0x14B9, 22324 }, + { 0x14BA, 22298 }, + { 0x14BB, 22302 }, + { 0x14BC, 110834 }, + { 0x14BD, 110837 }, + { 0x14BE, 110840 }, + { 0x14BF, 110852 }, + { 0x14C0, 110849 }, + { 0x14C1, 110879 }, + { 0x14C2, 110870 }, + { 0x14C3, 110846 }, + { 0x14C4, 110861 }, + { 0x14C5, 110864 }, + { 0x14C6, 110843 }, + { 0x14C7, 110858 }, + { 0x14C8, 110876 }, + { 0x14C9, 110855 }, + { 0x14CA, 110873 }, + { 0x14CB, 110867 }, + { 0x14CC, 110826 }, + { 0x14CD, 110830 }, + { 0x14CE, 27792 }, + { 0x14CF, 27840 }, + { 0x14D0, 27795 }, + { 0x14D1, 27843 }, + { 0x14D2, 27846 }, + { 0x14D3, 27777 }, + { 0x14D4, 27834 }, + { 0x14D5, 27780 }, + { 0x14D6, 27837 }, + { 0x14D7, 27852 }, + { 0x14D8, 27783 }, + { 0x14D9, 27873 }, + { 0x14DA, 27786 }, + { 0x14DB, 27876 }, + { 0x14DC, 27849 }, + { 0x14DD, 27822 }, + { 0x14DE, 27867 }, + { 0x14DF, 27825 }, + { 0x14E0, 27870 }, + { 0x14E1, 27807 }, + { 0x14E2, 27774 }, + { 0x14E3, 27855 }, + { 0x14E4, 27810 }, + { 0x14E5, 27858 }, + { 0x14E6, 27804 }, + { 0x14E7, 27831 }, + { 0x14E8, 27816 }, + { 0x14E9, 27801 }, + { 0x14EA, 27828 }, + { 0x14EB, 27861 }, + { 0x14EC, 27864 }, + { 0x14ED, 27819 }, + { 0x14EE, 27789 }, + { 0x14EF, 27798 }, + { 0x14F0, 27813 }, + { 0x14F1, 28091 }, + { 0x14F2, 28083 }, + { 0x14F3, 28067 }, + { 0x14F4, 28099 }, + { 0x14F5, 28071 }, + { 0x14F6, 28115 }, + { 0x14F7, 28119 }, + { 0x14F8, 28127 }, + { 0x14F9, 28075 }, + { 0x14FA, 28123 }, + { 0x14FB, 28059 }, + { 0x14FC, 28079 }, + { 0x14FD, 28063 }, + { 0x14FE, 28087 }, + { 0x14FF, 28103 }, + { 0x1500, 28109 }, + { 0x1501, 28095 }, + { 0x1502, 27770 }, + { 0x1503, 27766 }, + { 0x1504, 27718 }, + { 0x1505, 27706 }, + { 0x1506, 27738 }, + { 0x1507, 27714 }, + { 0x1508, 27762 }, + { 0x1509, 27710 }, + { 0x150A, 27754 }, + { 0x150B, 27750 }, + { 0x150C, 27742 }, + { 0x150D, 27758 }, + { 0x150E, 27734 }, + { 0x150F, 27702 }, + { 0x1510, 27722 }, + { 0x1511, 27726 }, + { 0x1512, 27746 }, + { 0x1513, 27730 }, + { 0x1514, 27642 }, + { 0x1515, 27645 }, + { 0x1516, 27669 }, + { 0x1517, 27660 }, + { 0x1518, 27648 }, + { 0x1519, 27614 }, + { 0x151A, 27611 }, + { 0x151B, 27663 }, + { 0x151C, 27636 }, + { 0x151D, 27605 }, + { 0x151E, 27629 }, + { 0x151F, 27633 }, + { 0x1520, 27608 }, + { 0x1521, 27657 }, + { 0x1522, 27602 }, + { 0x1523, 27654 }, + { 0x1524, 27620 }, + { 0x1525, 27598 }, + { 0x1526, 27617 }, + { 0x1527, 27625 }, + { 0x1528, 27639 }, + { 0x1529, 28055 }, + { 0x152A, 27666 }, + { 0x152B, 27651 }, + { 0x152C, 27690 }, + { 0x152D, 27672 }, + { 0x152E, 27678 }, + { 0x152F, 27699 }, + { 0x1530, 27684 }, + { 0x1531, 27681 }, + { 0x1532, 27675 }, + { 0x1533, 27696 }, + { 0x1534, 27693 }, + { 0x1535, 27687 }, + { 0x1536, 27905 }, + { 0x1537, 27915 }, + { 0x1538, 27900 }, + { 0x1539, 27895 }, + { 0x153A, 27910 }, + { 0x153B, 27920 }, + { 0x153C, 27940 }, + { 0x153D, 27930 }, + { 0x153E, 27925 }, + { 0x153F, 27935 }, + { 0x1540, 126718 }, + { 0x1541, 127382 }, + { 0x1542, 126731 }, + { 0x1543, 126706 }, + { 0x1544, 126729 }, + { 0x1545, 126683 }, + { 0x1546, 126714 }, + { 0x1547, 126709 }, + { 0x1548, 127351 }, + { 0x1549, 127347 }, + { 0x154A, 127354 }, + { 0x154B, 126686 }, + { 0x154C, 126691 }, + { 0x154D, 126701 }, + { 0x154E, 126777 }, + { 0x154F, 126696 }, + { 0x1550, 126751 }, + { 0x1551, 126733 }, + { 0x1552, 126739 }, + { 0x1553, 126760 }, + { 0x1554, 126745 }, + { 0x1555, 126742 }, + { 0x1556, 126736 }, + { 0x1557, 126757 }, + { 0x1558, 126754 }, + { 0x1559, 126748 }, + { 0x155A, 126785 }, + { 0x155B, 126788 }, + { 0x155C, 126791 }, + { 0x155D, 126794 }, + { 0x155E, 126797 }, + { 0x155F, 126830 }, + { 0x1560, 126848 }, + { 0x1561, 126806 }, + { 0x1562, 126827 }, + { 0x1563, 127001 }, + { 0x1564, 126800 }, + { 0x1565, 126833 }, + { 0x1566, 126836 }, + { 0x1567, 126812 }, + { 0x1568, 126824 }, + { 0x1569, 126821 }, + { 0x156A, 126842 }, + { 0x156B, 127025 }, + { 0x156C, 126845 }, + { 0x156D, 126803 }, + { 0x156E, 127004 }, + { 0x156F, 126815 }, + { 0x1570, 126854 }, + { 0x1571, 126839 }, + { 0x1572, 126851 }, + { 0x1573, 126809 }, + { 0x1574, 126818 }, + { 0x1575, 127019 }, + { 0x1576, 127028 }, + { 0x1577, 126857 }, + { 0x1578, 127016 }, + { 0x1579, 127034 }, + { 0x157A, 127022 }, + { 0x157B, 127031 }, + { 0x157C, 127013 }, + { 0x157D, 127237 }, + { 0x157E, 127125 }, + { 0x157F, 127129 }, + { 0x1580, 127133 }, + { 0x1581, 127137 }, + { 0x1582, 127165 }, + { 0x1583, 127181 }, + { 0x1584, 127205 }, + { 0x1585, 127141 }, + { 0x1586, 127169 }, + { 0x1587, 127173 }, + { 0x1588, 127149 }, + { 0x1589, 127161 }, + { 0x158A, 127177 }, + { 0x158B, 127145 }, + { 0x158C, 127209 }, + { 0x158D, 127153 }, + { 0x158E, 127233 }, + { 0x158F, 127189 }, + { 0x1590, 127185 }, + { 0x1591, 127157 }, + { 0x1592, 127217 }, + { 0x1593, 127221 }, + { 0x1594, 127225 }, + { 0x1595, 127229 }, + { 0x1596, 127213 }, + { 0x1597, 127037 }, + { 0x1598, 127041 }, + { 0x1599, 127065 }, + { 0x159A, 127085 }, + { 0x159B, 127045 }, + { 0x159C, 127093 }, + { 0x159D, 127073 }, + { 0x159E, 127057 }, + { 0x159F, 127061 }, + { 0x15A0, 127077 }, + { 0x15A1, 127113 }, + { 0x15A2, 127081 }, + { 0x15A3, 127049 }, + { 0x15A4, 127069 }, + { 0x15A5, 127053 }, + { 0x15A6, 127101 }, + { 0x15A7, 127105 }, + { 0x15A8, 127117 }, + { 0x15A9, 127089 }, + { 0x15AA, 127109 }, + { 0x15AB, 127097 }, + { 0x15AC, 127121 }, + { 0x15AD, 127243 }, + { 0x15AE, 127251 }, + { 0x15AF, 127255 }, + { 0x15B0, 127247 }, + { 0x15B1, 127343 }, + { 0x15B2, 127007 }, + { 0x15B3, 126989 }, + { 0x15B4, 126983 }, + { 0x15B5, 126968 }, + { 0x15B6, 126978 }, + { 0x15B7, 126995 }, + { 0x15B8, 126963 }, + { 0x15B9, 126957 }, + { 0x15BA, 126860 }, + { 0x15BB, 126865 }, + { 0x15BC, 126885 }, + { 0x15BD, 126910 }, + { 0x15BE, 126875 }, + { 0x15BF, 126930 }, + { 0x15C0, 126952 }, + { 0x15C1, 126905 }, + { 0x15C2, 126915 }, + { 0x15C3, 126895 }, + { 0x15C4, 126880 }, + { 0x15C5, 126890 }, + { 0x15C6, 126920 }, + { 0x15C7, 126925 }, + { 0x15C8, 126935 }, + { 0x15C9, 126900 }, + { 0x15CA, 126870 }, + { 0x15CB, 127193 }, + { 0x15CC, 127199 }, + { 0x15CD, 127295 }, + { 0x15CE, 127313 }, + { 0x15CF, 127259 }, + { 0x15D0, 127301 }, + { 0x15D1, 127325 }, + { 0x15D2, 127337 }, + { 0x15D3, 127265 }, + { 0x15D4, 127289 }, + { 0x15D5, 127319 }, + { 0x15D6, 127283 }, + { 0x15D7, 127331 }, + { 0x15D8, 127271 }, + { 0x15D9, 126940 }, + { 0x15DA, 126946 }, + { 0x15DB, 127277 }, + { 0x15DC, 126973 }, + { 0x15DD, 127307 }, + { 0x15DE, 84434 }, + { 0x15DF, 84326 }, + { 0x15E0, 84530 }, + { 0x15E1, 84864 }, + { 0x15E2, 84699 }, + { 0x15E3, 84690 }, + { 0x15E4, 85015 }, + { 0x15E5, 84801 }, + { 0x15E6, 84570 }, + { 0x15E7, 84928 }, + { 0x15E8, 84627 }, + { 0x15E9, 84672 }, + { 0x15EA, 84651 }, + { 0x15EB, 84594 }, + { 0x15EC, 84771 }, + { 0x15ED, 84750 }, + { 0x15EE, 85051 }, + { 0x15EF, 85042 }, + { 0x15F0, 85231 }, + { 0x15F1, 84885 }, + { 0x15F2, 84876 }, + { 0x15F3, 84729 }, + { 0x15F4, 84681 }, + { 0x15F5, 86276 }, + { 0x15F6, 84997 }, + { 0x15F7, 86284 }, + { 0x15F8, 84684 }, + { 0x15F9, 86280 }, + { 0x15FA, 85000 }, + { 0x15FB, 86288 }, + { 0x15FC, 85027 }, + { 0x15FD, 84741 }, + { 0x15FE, 85030 }, + { 0x15FF, 84744 }, + { 0x1600, 85033 }, + { 0x1601, 84738 }, + { 0x1602, 86260 }, + { 0x1603, 86268 }, + { 0x1604, 86248 }, + { 0x1605, 86244 }, + { 0x1606, 86252 }, + { 0x1607, 86256 }, + { 0x1608, 86264 }, + { 0x1609, 86272 }, + { 0x160A, 86140 }, + { 0x160B, 86324 }, + { 0x160C, 85177 }, + { 0x160D, 85205 }, + { 0x160E, 85289 }, + { 0x160F, 86548 }, + { 0x1610, 86544 }, + { 0x1611, 85090 }, + { 0x1612, 85087 }, + { 0x1613, 85249 }, + { 0x1614, 85246 }, + { 0x1615, 85243 }, + { 0x1616, 85240 }, + { 0x1617, 85237 }, + { 0x1618, 85357 }, + { 0x1619, 85353 }, + { 0x161A, 85329 }, + { 0x161B, 85769 }, + { 0x161C, 86025 }, + { 0x161D, 85737 }, + { 0x161E, 85765 }, + { 0x161F, 85333 }, + { 0x1620, 85821 }, + { 0x1621, 85252 }, + { 0x1622, 85257 }, + { 0x1623, 86130 }, + { 0x1624, 36621 }, + { 0x1625, 36531 }, + { 0x1626, 36576 }, + { 0x1627, 36522 }, + { 0x1628, 36570 }, + { 0x1629, 36579 }, + { 0x162A, 36516 }, + { 0x162B, 36564 }, + { 0x162C, 36528 }, + { 0x162D, 36573 }, + { 0x162E, 36597 }, + { 0x162F, 36552 }, + { 0x1630, 36591 }, + { 0x1631, 36519 }, + { 0x1632, 36567 }, + { 0x1633, 36540 }, + { 0x1634, 36543 }, + { 0x1635, 36582 }, + { 0x1636, 36513 }, + { 0x1637, 36561 }, + { 0x1638, 36537 }, + { 0x1639, 36558 }, + { 0x163A, 36546 }, + { 0x163B, 36534 }, + { 0x163C, 36555 }, + { 0x163D, 36585 }, + { 0x163E, 36588 }, + { 0x163F, 36549 }, + { 0x1640, 36525 }, + { 0x1641, 36600 }, + { 0x1642, 36594 }, + { 0x1643, 36477 }, + { 0x1644, 36485 }, + { 0x1645, 36493 }, + { 0x1646, 36505 }, + { 0x1647, 36497 }, + { 0x1648, 36509 }, + { 0x1649, 36501 }, + { 0x164A, 36481 }, + { 0x164B, 36489 }, + { 0x164C, 36614 }, + { 0x164D, 36606 }, + { 0x164E, 36610 }, + { 0x164F, 36441 }, + { 0x1650, 36469 }, + { 0x1651, 36473 }, + { 0x1652, 36465 }, + { 0x1653, 36453 }, + { 0x1654, 36457 }, + { 0x1655, 36449 }, + { 0x1656, 36461 }, + { 0x1657, 36445 }, + { 0x1658, 36408 }, + { 0x1659, 36405 }, + { 0x165A, 36402 }, + { 0x165B, 36399 }, + { 0x165C, 36618 }, + { 0x165D, 36603 }, + { 0x165E, 36429 }, + { 0x165F, 36411 }, + { 0x1660, 36417 }, + { 0x1661, 36438 }, + { 0x1662, 36423 }, + { 0x1663, 36420 }, + { 0x1664, 36414 }, + { 0x1665, 36435 }, + { 0x1666, 36432 }, + { 0x1667, 36426 }, + { 0x1668, 11005 }, + { 0x1669, 11049 }, + { 0x166A, 11065 }, + { 0x166B, 11077 }, + { 0x166C, 11033 }, + { 0x166D, 11053 }, + { 0x166E, 11037 }, + { 0x166F, 11073 }, + { 0x1670, 11009 }, + { 0x1671, 11025 }, + { 0x1672, 11069 }, + { 0x1673, 11013 }, + { 0x1674, 10997 }, + { 0x1675, 11045 }, + { 0x1676, 11001 }, + { 0x1677, 11029 }, + { 0x1678, 11061 }, + { 0x1679, 11081 }, + { 0x167A, 11017 }, + { 0x167B, 10965 }, + { 0x167C, 10973 }, + { 0x167D, 10989 }, + { 0x167E, 10993 }, + { 0x167F, 10981 }, + { 0x1680, 11021 }, + { 0x1681, 10977 }, + { 0x1682, 11041 }, + { 0x1683, 10969 }, + { 0x1684, 11057 }, + { 0x1685, 10985 }, + { 0x1686, 11085 }, + { 0x1687, 11089 }, + { 0x1688, 11093 }, + { 0x1689, 11097 }, + { 0x168A, 11101 }, + { 0x168B, 7655 }, + { 0x168C, 7523 }, + { 0x168D, 7625 }, + { 0x168E, 7679 }, + { 0x168F, 7697 }, + { 0x1690, 7493 }, + { 0x1691, 7547 }, + { 0x1692, 7565 }, + { 0x1693, 7721 }, + { 0x1694, 7661 }, + { 0x1695, 7685 }, + { 0x1696, 7589 }, + { 0x1697, 7529 }, + { 0x1698, 7553 }, + { 0x1699, 7667 }, + { 0x169A, 7715 }, + { 0x169B, 7643 }, + { 0x169C, 7535 }, + { 0x169D, 7583 }, + { 0x169E, 7511 }, + { 0x169F, 7649 }, + { 0x16A0, 7703 }, + { 0x16A1, 7637 }, + { 0x16A2, 7517 }, + { 0x16A3, 7571 }, + { 0x16A4, 7505 }, + { 0x16A5, 7613 }, + { 0x16A6, 7673 }, + { 0x16A7, 7631 }, + { 0x16A8, 7481 }, + { 0x16A9, 7541 }, + { 0x16AA, 7499 }, + { 0x16AB, 7619 }, + { 0x16AC, 7607 }, + { 0x16AD, 7601 }, + { 0x16AE, 7487 }, + { 0x16AF, 7475 }, + { 0x16B0, 7469 }, + { 0x16B1, 7691 }, + { 0x16B2, 7727 }, + { 0x16B3, 7559 }, + { 0x16B4, 7595 }, + { 0x16B5, 7709 }, + { 0x16B6, 7577 }, + { 0x16B7, 7462 }, + { 0x16B8, 7384 }, + { 0x16B9, 7402 }, + { 0x16BA, 7378 }, + { 0x16BB, 7432 }, + { 0x16BC, 7366 }, + { 0x16BD, 7390 }, + { 0x16BE, 7372 }, + { 0x16BF, 7414 }, + { 0x16C0, 7426 }, + { 0x16C1, 7396 }, + { 0x16C2, 7444 }, + { 0x16C3, 7438 }, + { 0x16C4, 7420 }, + { 0x16C5, 7450 }, + { 0x16C6, 7456 }, + { 0x16C7, 7408 }, + { 0x16C8, 7763 }, + { 0x16C9, 7769 }, + { 0x16CA, 7757 }, + { 0x16CB, 7751 }, + { 0x16CC, 7745 }, + { 0x16CD, 7739 }, + { 0x16CE, 7733 }, + { 0x16CF, 7306 }, + { 0x16D0, 7311 }, + { 0x16D1, 7346 }, + { 0x16D2, 7316 }, + { 0x16D3, 7326 }, + { 0x16D4, 7361 }, + { 0x16D5, 7336 }, + { 0x16D6, 7331 }, + { 0x16D7, 7321 }, + { 0x16D8, 7356 }, + { 0x16D9, 7351 }, + { 0x16DA, 7341 }, + { 0x16DB, 7300 }, + { 0x16DC, 7290 }, + { 0x16DD, 7295 }, + { 0x16DE, 28052 }, + { 0x16DF, 27965 }, + { 0x16E0, 27949 }, + { 0x16E1, 27883 }, + { 0x16E2, 27957 }, + { 0x16E3, 27973 }, + { 0x16E4, 28045 }, + { 0x16E5, 28029 }, + { 0x16E6, 28021 }, + { 0x16E7, 28037 }, + { 0x16E8, 27891 }, + { 0x16E9, 28005 }, + { 0x16EA, 27989 }, + { 0x16EB, 27981 }, + { 0x16EC, 27997 }, + { 0x16ED, 28013 }, + { 0x16EE, 28049 }, + { 0x16EF, 27961 }, + { 0x16F0, 27945 }, + { 0x16F1, 27879 }, + { 0x16F2, 27953 }, + { 0x16F3, 27969 }, + { 0x16F4, 28041 }, + { 0x16F5, 28025 }, + { 0x16F6, 28017 }, + { 0x16F7, 28033 }, + { 0x16F8, 27887 }, + { 0x16F9, 28001 }, + { 0x16FA, 27985 }, + { 0x16FB, 27977 }, + { 0x16FC, 27993 }, + { 0x16FD, 28009 }, + { 0x16FE, 84209 }, + { 0x16FF, 84200 }, + { 0x1700, 84242 }, + { 0x1701, 84251 }, + { 0x1702, 84221 }, + { 0x1703, 84191 }, + { 0x1704, 84215 }, + { 0x1705, 84239 }, + { 0x1706, 84230 }, + { 0x1707, 84197 }, + { 0x1708, 84218 }, + { 0x1709, 84245 }, + { 0x170A, 84194 }, + { 0x170B, 84206 }, + { 0x170C, 84248 }, + { 0x170D, 84254 }, + { 0x170E, 84236 }, + { 0x170F, 84224 }, + { 0x1710, 84212 }, + { 0x1711, 84233 }, + { 0x1712, 84227 }, + { 0x1713, 84188 }, + { 0x1714, 84203 }, + { 0x1715, 84172 }, + { 0x1716, 84180 }, + { 0x1717, 84168 }, + { 0x1718, 84176 }, + { 0x1719, 84184 }, + { 0x171A, 84257 }, + { 0x171B, 84164 }, + { 0x171C, 11582 }, + { 0x171D, 11612 }, + { 0x171E, 11617 }, + { 0x171F, 11496 }, + { 0x1720, 11531 }, + { 0x1721, 11526 }, + { 0x1722, 11555 }, + { 0x1723, 11567 }, + { 0x1724, 11607 }, + { 0x1725, 11481 }, + { 0x1726, 11506 }, + { 0x1727, 11521 }, + { 0x1728, 11559 }, + { 0x1729, 11651 }, + { 0x172A, 11642 }, + { 0x172B, 11433 }, + { 0x172C, 11546 }, + { 0x172D, 11647 }, + { 0x172E, 11597 }, + { 0x172F, 11637 }, + { 0x1730, 11511 }, + { 0x1731, 11541 }, + { 0x1732, 11453 }, + { 0x1733, 11429 }, + { 0x1734, 11587 }, + { 0x1735, 11622 }, + { 0x1736, 11572 }, + { 0x1737, 11501 }, + { 0x1738, 11486 }, + { 0x1739, 11536 }, + { 0x173A, 11449 }, + { 0x173B, 11516 }, + { 0x173C, 11602 }, + { 0x173D, 11461 }, + { 0x173E, 11563 }, + { 0x173F, 11445 }, + { 0x1740, 11551 }, + { 0x1741, 11469 }, + { 0x1742, 11627 }, + { 0x1743, 11632 }, + { 0x1744, 11592 }, + { 0x1745, 11577 }, + { 0x1746, 11477 }, + { 0x1747, 11417 }, + { 0x1748, 11491 }, + { 0x1749, 11421 }, + { 0x174A, 11441 }, + { 0x174B, 11425 }, + { 0x174C, 11465 }, + { 0x174D, 11437 }, + { 0x174E, 11457 }, + { 0x174F, 11473 }, + { 0x1750, 11655 }, + { 0x1751, 11714 }, + { 0x1752, 11708 }, + { 0x1753, 11670 }, + { 0x1754, 11174 }, + { 0x1755, 11702 }, + { 0x1756, 11687 }, + { 0x1757, 11693 }, + { 0x1758, 11677 }, + { 0x1759, 11665 }, + { 0x175A, 11682 }, + { 0x175B, 11216 }, + { 0x175C, 11317 }, + { 0x175D, 11394 }, + { 0x175E, 11342 }, + { 0x175F, 11405 }, + { 0x1760, 11327 }, + { 0x1761, 11357 }, + { 0x1762, 11384 }, + { 0x1763, 11400 }, + { 0x1764, 11337 }, + { 0x1765, 11389 }, + { 0x1766, 11332 }, + { 0x1767, 11368 }, + { 0x1768, 11379 }, + { 0x1769, 11322 }, + { 0x176A, 11347 }, + { 0x176B, 11374 }, + { 0x176C, 11352 }, + { 0x176D, 11411 }, + { 0x176E, 11362 }, + { 0x176F, 11169 }, + { 0x1770, 11232 }, + { 0x1771, 11236 }, + { 0x1772, 11201 }, + { 0x1773, 11206 }, + { 0x1774, 11211 }, + { 0x1775, 11155 }, + { 0x1776, 11164 }, + { 0x1777, 11254 }, + { 0x1778, 11660 }, + { 0x1779, 11135 }, + { 0x177A, 11105 }, + { 0x177B, 11115 }, + { 0x177C, 11150 }, + { 0x177D, 11125 }, + { 0x177E, 11120 }, + { 0x177F, 11110 }, + { 0x1780, 11145 }, + { 0x1781, 11140 }, + { 0x1782, 11130 }, + { 0x1783, 11297 }, + { 0x1784, 11267 }, + { 0x1785, 11277 }, + { 0x1786, 11312 }, + { 0x1787, 11287 }, + { 0x1788, 11282 }, + { 0x1789, 11272 }, + { 0x178A, 11307 }, + { 0x178B, 11302 }, + { 0x178C, 11292 }, + { 0x178D, 11224 }, + { 0x178E, 11259 }, + { 0x178F, 11220 }, + { 0x1790, 11193 }, + { 0x1791, 11160 }, + { 0x1792, 11228 }, + { 0x1793, 11248 }, + { 0x1794, 11180 }, + { 0x1795, 11189 }, + { 0x1796, 11240 }, + { 0x1797, 11244 }, + { 0x1798, 11263 }, + { 0x1799, 11185 }, + { 0x179A, 11197 }, + { 0x179B, 117130 }, + { 0x179C, 117855 }, + { 0x179D, 117451 }, + { 0x179E, 117522 }, + { 0x179F, 117101 }, + { 0x17A0, 116320 }, + { 0x17A1, 117115 }, + { 0x17A2, 116416 }, + { 0x17A3, 116951 }, + { 0x17A4, 116818 }, + { 0x17A5, 117096 }, + { 0x17A6, 117826 }, + { 0x17A7, 117041 }, + { 0x17A8, 117829 }, + { 0x17A9, 117832 }, + { 0x17AA, 116687 }, + { 0x17AB, 116749 }, + { 0x17AC, 116388 }, + { 0x17AD, 116875 }, + { 0x17AE, 116393 }, + { 0x17AF, 116880 }, + { 0x17B0, 117092 }, + { 0x17B1, 117080 }, + { 0x17B2, 117464 }, + { 0x17B3, 116420 }, + { 0x17B4, 116956 }, + { 0x17B5, 116961 }, + { 0x17B6, 117104 }, + { 0x17B7, 116762 }, + { 0x17B8, 116768 }, + { 0x17B9, 116774 }, + { 0x17BA, 83402 }, + { 0x17BB, 83406 }, + { 0x17BC, 83413 }, + { 0x17BD, 83416 }, + { 0x17BE, 83410 }, + { 0x17BF, 83703 }, + { 0x17C0, 83706 }, + { 0x17C1, 83713 }, + { 0x17C2, 83716 }, + { 0x17C3, 83727 }, + { 0x17C4, 83730 }, + { 0x17C5, 83635 }, + { 0x17C6, 83639 }, + { 0x17C7, 83606 }, + { 0x17C8, 83610 }, + { 0x17C9, 83710 }, + { 0x17CA, 83734 }, + { 0x17CB, 83720 }, + { 0x17CC, 83723 }, + { 0x17CD, 83596 }, + { 0x17CE, 83599 }, + { 0x17CF, 83579 }, + { 0x17D0, 83582 }, + { 0x17D1, 83685 }, + { 0x17D2, 83551 }, + { 0x17D3, 83554 }, + { 0x17D4, 83589 }, + { 0x17D5, 83592 }, + { 0x17D6, 83688 }, + { 0x17D7, 83662 }, + { 0x17D8, 83666 }, + { 0x17D9, 83565 }, + { 0x17DA, 83570 }, + { 0x17DB, 83621 }, + { 0x17DC, 83655 }, + { 0x17DD, 83658 }, + { 0x17DE, 83558 }, + { 0x17DF, 83561 }, + { 0x17E0, 83618 }, + { 0x17E1, 83625 }, + { 0x17E2, 83628 }, + { 0x17E3, 83544 }, + { 0x17E4, 83547 }, + { 0x17E5, 83615 }, + { 0x17E6, 83678 }, + { 0x17E7, 83632 }, + { 0x17E8, 83603 }, + { 0x17E9, 83675 }, + { 0x17EA, 83647 }, + { 0x17EB, 83651 }, + { 0x17EC, 83644 }, + { 0x17ED, 83586 }, + { 0x17EE, 83419 }, + { 0x17EF, 83538 }, + { 0x17F0, 83491 }, + { 0x17F1, 83495 }, + { 0x17F2, 83500 }, + { 0x17F3, 83504 }, + { 0x17F4, 83480 }, + { 0x17F5, 83485 }, + { 0x17F6, 83469 }, + { 0x17F7, 83474 }, + { 0x17F8, 83518 }, + { 0x17F9, 83522 }, + { 0x17FA, 83533 }, + { 0x17FB, 83527 }, + { 0x17FC, 83509 }, + { 0x17FD, 83513 }, + { 0x17FE, 83399 }, + { 0x17FF, 83681 }, + { 0x1800, 83695 }, + { 0x1801, 83699 }, + { 0x1802, 83575 }, + { 0x1803, 83671 }, + { 0x1804, 83691 }, + { 0x1805, 83737 }, + { 0x1806, 83741 }, + { 0x1807, 83895 }, + { 0x1808, 83899 }, + { 0x1809, 83449 }, + { 0x180A, 83431 }, + { 0x180B, 83437 }, + { 0x180C, 83458 }, + { 0x180D, 83443 }, + { 0x180E, 83440 }, + { 0x180F, 83434 }, + { 0x1810, 83455 }, + { 0x1811, 83452 }, + { 0x1812, 83446 }, + { 0x1813, 83461 }, + { 0x1814, 83745 }, + { 0x1815, 83542 }, + { 0x1816, 83428 }, + { 0x1817, 83422 }, + { 0x1818, 83425 }, + { 0x1819, 83903 }, + { 0x181A, 83772 }, + { 0x181B, 83764 }, + { 0x181C, 83776 }, + { 0x181D, 83750 }, + { 0x181E, 83759 }, + { 0x181F, 83768 }, + { 0x1820, 83780 }, + { 0x1821, 83788 }, + { 0x1822, 83784 }, + { 0x1823, 83754 }, + { 0x1824, 83807 }, + { 0x1825, 83802 }, + { 0x1826, 83824 }, + { 0x1827, 83812 }, + { 0x1828, 83836 }, + { 0x1829, 83829 }, + { 0x182A, 83817 }, + { 0x182B, 83797 }, + { 0x182C, 83792 }, + { 0x182D, 83877 }, + { 0x182E, 83871 }, + { 0x182F, 83889 }, + { 0x1830, 83883 }, + { 0x1831, 83841 }, + { 0x1832, 83853 }, + { 0x1833, 83859 }, + { 0x1834, 83865 }, + { 0x1835, 83847 }, + { 0x1836, 83466 }, + { 0x1837, 83747 }, + { 0x1838, 83463 }, + { 0x1839, 128272 }, + { 0x183A, 128275 }, + { 0x183B, 128278 }, + { 0x183C, 128335 }, + { 0x183D, 128341 }, + { 0x183E, 128347 }, + { 0x183F, 128350 }, + { 0x1840, 128344 }, + { 0x1841, 128338 }, + { 0x1842, 128362 }, + { 0x1843, 128377 }, + { 0x1844, 128392 }, + { 0x1845, 128368 }, + { 0x1846, 128428 }, + { 0x1847, 128356 }, + { 0x1848, 128374 }, + { 0x1849, 128416 }, + { 0x184A, 128431 }, + { 0x184B, 128401 }, + { 0x184C, 128359 }, + { 0x184D, 128386 }, + { 0x184E, 128389 }, + { 0x184F, 128365 }, + { 0x1850, 128404 }, + { 0x1851, 128353 }, + { 0x1852, 128383 }, + { 0x1853, 128413 }, + { 0x1854, 128395 }, + { 0x1855, 128380 }, + { 0x1856, 128407 }, + { 0x1857, 128398 }, + { 0x1858, 128410 }, + { 0x1859, 128371 }, + { 0x185A, 128472 }, + { 0x185B, 128458 }, + { 0x185C, 128454 }, + { 0x185D, 128319 }, + { 0x185E, 128315 }, + { 0x185F, 128327 }, + { 0x1860, 128323 }, + { 0x1861, 128311 }, + { 0x1862, 128331 }, + { 0x1863, 128269 }, + { 0x1864, 128266 }, + { 0x1865, 128462 }, + { 0x1866, 128467 }, + { 0x1867, 128422 }, + { 0x1868, 128437 }, + { 0x1869, 128299 }, + { 0x186A, 128281 }, + { 0x186B, 128287 }, + { 0x186C, 128308 }, + { 0x186D, 128293 }, + { 0x186E, 128290 }, + { 0x186F, 128284 }, + { 0x1870, 128305 }, + { 0x1871, 128302 }, + { 0x1872, 128296 }, + { 0x1873, 128452 }, + { 0x1874, 128434 }, + { 0x1875, 128425 }, + { 0x1876, 128419 }, + { 0x1877, 128440 }, + { 0x1878, 128444 }, + { 0x1879, 20825 }, + { 0x187A, 20916 }, + { 0x187B, 20846 }, + { 0x187C, 20924 }, + { 0x187D, 20904 }, + { 0x187E, 20834 }, + { 0x187F, 20888 }, + { 0x1880, 20861 }, + { 0x1881, 20936 }, + { 0x1882, 20858 }, + { 0x1883, 20908 }, + { 0x1884, 20870 }, + { 0x1885, 20948 }, + { 0x1886, 20892 }, + { 0x1887, 20843 }, + { 0x1888, 20920 }, + { 0x1889, 20849 }, + { 0x188A, 20840 }, + { 0x188B, 20864 }, + { 0x188C, 20940 }, + { 0x188D, 20855 }, + { 0x188E, 20932 }, + { 0x188F, 20900 }, + { 0x1890, 20896 }, + { 0x1891, 20867 }, + { 0x1892, 20944 }, + { 0x1893, 20912 }, + { 0x1894, 20873 }, + { 0x1895, 20952 }, + { 0x1896, 20882 }, + { 0x1897, 20852 }, + { 0x1898, 20928 }, + { 0x1899, 20885 }, + { 0x189A, 20837 }, + { 0x189B, 20879 }, + { 0x189C, 20876 }, + { 0x189D, 20828 }, + { 0x189E, 20831 }, + { 0x189F, 20780 }, + { 0x18A0, 20783 }, + { 0x18A1, 20820 }, + { 0x18A2, 20806 }, + { 0x18A3, 20787 }, + { 0x18A4, 20810 }, + { 0x18A5, 20791 }, + { 0x18A6, 20815 }, + { 0x18A7, 20795 }, + { 0x18A8, 20799 }, + { 0x18A9, 20979 }, + { 0x18AA, 20975 }, + { 0x18AB, 20973 }, + { 0x18AC, 20983 }, + { 0x18AD, 20956 }, + { 0x18AE, 20969 }, + { 0x18AF, 20961 }, + { 0x18B0, 20965 }, + { 0x18B1, 60641 }, + { 0x18B2, 60698 }, + { 0x18B3, 60695 }, + { 0x18B4, 60632 }, + { 0x18B5, 60689 }, + { 0x18B6, 60704 }, + { 0x18B7, 60623 }, + { 0x18B8, 60677 }, + { 0x18B9, 60638 }, + { 0x18BA, 60707 }, + { 0x18BB, 60662 }, + { 0x18BC, 60719 }, + { 0x18BD, 60626 }, + { 0x18BE, 60650 }, + { 0x18BF, 60653 }, + { 0x18C0, 60713 }, + { 0x18C1, 60710 }, + { 0x18C2, 60629 }, + { 0x18C3, 60686 }, + { 0x18C4, 60620 }, + { 0x18C5, 60674 }, + { 0x18C6, 60647 }, + { 0x18C7, 60701 }, + { 0x18C8, 60722 }, + { 0x18C9, 60728 }, + { 0x18CA, 60683 }, + { 0x18CB, 60671 }, + { 0x18CC, 60656 }, + { 0x18CD, 60644 }, + { 0x18CE, 60635 }, + { 0x18CF, 60692 }, + { 0x18D0, 60665 }, + { 0x18D1, 60659 }, + { 0x18D2, 60716 }, + { 0x18D3, 60668 }, + { 0x18D4, 60617 }, + { 0x18D5, 60774 }, + { 0x18D6, 60770 }, + { 0x18D7, 60605 }, + { 0x18D8, 60593 }, + { 0x18D9, 60597 }, + { 0x18DA, 60609 }, + { 0x18DB, 60601 }, + { 0x18DC, 60613 }, + { 0x18DD, 60589 }, + { 0x18DE, 60734 }, + { 0x18DF, 60742 }, + { 0x18E0, 60738 }, + { 0x18E1, 60746 }, + { 0x18E2, 60750 }, + { 0x18E3, 60754 }, + { 0x18E4, 60758 }, + { 0x18E5, 60766 }, + { 0x18E6, 60762 }, + { 0x18E7, 60553 }, + { 0x18E8, 60556 }, + { 0x18E9, 60786 }, + { 0x18EA, 60778 }, + { 0x18EB, 60783 }, + { 0x18EC, 60792 }, + { 0x18ED, 60789 }, + { 0x18EE, 60577 }, + { 0x18EF, 60559 }, + { 0x18F0, 60565 }, + { 0x18F1, 60586 }, + { 0x18F2, 60571 }, + { 0x18F3, 60568 }, + { 0x18F4, 60562 }, + { 0x18F5, 60583 }, + { 0x18F6, 60580 }, + { 0x18F7, 60574 }, + { 0x18F8, 60725 }, + { 0x18F9, 60731 }, + { 0x18FA, 60680 }, + { 0x18FB, 322 }, + { 0x18FC, 298 }, + { 0x18FD, 306 }, + { 0x18FE, 334 }, + { 0x18FF, 314 }, + { 0x1900, 310 }, + { 0x1901, 302 }, + { 0x1902, 330 }, + { 0x1903, 326 }, + { 0x1904, 318 }, + { 0x1905, 373 }, + { 0x1906, 349 }, + { 0x1907, 341 }, + { 0x1908, 433 }, + { 0x1909, 345 }, + { 0x190A, 449 }, + { 0x190B, 421 }, + { 0x190C, 417 }, + { 0x190D, 425 }, + { 0x190E, 429 }, + { 0x190F, 381 }, + { 0x1910, 369 }, + { 0x1911, 361 }, + { 0x1912, 445 }, + { 0x1913, 365 }, + { 0x1914, 389 }, + { 0x1915, 405 }, + { 0x1916, 409 }, + { 0x1917, 457 }, + { 0x1918, 413 }, + { 0x1919, 377 }, + { 0x191A, 357 }, + { 0x191B, 437 }, + { 0x191C, 353 }, + { 0x191D, 441 }, + { 0x191E, 385 }, + { 0x191F, 453 }, + { 0x1920, 393 }, + { 0x1921, 401 }, + { 0x1922, 397 }, + { 0x1923, 291 }, + { 0x1924, 461 }, + { 0x1925, 468 }, + { 0x1926, 338 }, + { 0x1927, 465 }, + { 0x1928, 295 }, + { 0x1929, 477 }, + { 0x192A, 472 }, + { 0x192B, 88472 }, + { 0x192C, 88604 }, + { 0x192D, 88431 }, + { 0x192E, 88299 }, + { 0x192F, 88267 }, + { 0x1930, 88609 }, + { 0x1931, 88277 }, + { 0x1932, 88272 }, + { 0x1933, 88594 }, + { 0x1934, 89114 }, + { 0x1935, 88118 }, + { 0x1936, 103939 }, + { 0x1937, 103994 }, + { 0x1938, 104014 }, + { 0x1939, 104009 }, + { 0x193A, 103944 }, + { 0x193B, 104094 }, + { 0x193C, 104104 }, + { 0x193D, 104084 }, + { 0x193E, 103959 }, + { 0x193F, 104044 }, + { 0x1940, 104049 }, + { 0x1941, 104054 }, + { 0x1942, 104059 }, + { 0x1943, 103964 }, + { 0x1944, 104064 }, + { 0x1945, 104150 }, + { 0x1946, 104074 }, + { 0x1947, 104079 }, + { 0x1948, 104089 }, + { 0x1949, 103969 }, + { 0x194A, 104140 }, + { 0x194B, 104135 }, + { 0x194C, 104119 }, + { 0x194D, 104069 }, + { 0x194E, 104145 }, + { 0x194F, 104114 }, + { 0x1950, 103999 }, + { 0x1951, 104039 }, + { 0x1952, 104004 }, + { 0x1953, 104109 }, + { 0x1954, 104099 }, + { 0x1955, 104130 }, + { 0x1956, 104019 }, + { 0x1957, 103954 }, + { 0x1958, 104029 }, + { 0x1959, 103974 }, + { 0x195A, 104024 }, + { 0x195B, 104034 }, + { 0x195C, 103949 }, + { 0x195D, 103979 }, + { 0x195E, 104155 }, + { 0x195F, 104166 }, + { 0x1960, 103989 }, + { 0x1961, 103984 }, + { 0x1962, 104124 }, + { 0x1963, 104160 }, + { 0x1964, 128500 }, + { 0x1965, 128508 }, + { 0x1966, 128504 }, + { 0x1967, 128496 }, + { 0x1968, 128491 }, + { 0x1969, 128486 }, + { 0x196A, 128481 }, + { 0x196B, 128476 }, + { 0x196C, 43253 }, + { 0x196D, 43217 }, + { 0x196E, 43250 }, + { 0x196F, 43187 }, + { 0x1970, 43190 }, + { 0x1971, 43275 }, + { 0x1972, 43281 }, + { 0x1973, 43262 }, + { 0x1974, 43229 }, + { 0x1975, 43268 }, + { 0x1976, 43238 }, + { 0x1977, 43242 }, + { 0x1978, 43246 }, + { 0x1979, 43204 }, + { 0x197A, 43208 }, + { 0x197B, 43220 }, + { 0x197C, 43256 }, + { 0x197D, 43286 }, + { 0x197E, 43132 }, + { 0x197F, 43122 }, + { 0x1980, 43177 }, + { 0x1981, 43136 }, + { 0x1982, 43182 }, + { 0x1983, 43126 }, + { 0x1984, 43140 }, + { 0x1985, 43161 }, + { 0x1986, 43165 }, + { 0x1987, 43151 }, + { 0x1988, 43155 }, + { 0x1989, 43115 }, + { 0x198A, 43172 }, + { 0x198B, 43101 }, + { 0x198C, 43110 }, + { 0x198D, 43146 }, + { 0x198E, 43201 }, + { 0x198F, 43118 }, + { 0x1990, 43225 }, + { 0x1991, 43195 }, + { 0x1992, 43198 }, + { 0x1993, 43169 }, + { 0x1994, 43213 }, + { 0x1995, 43233 }, + { 0x1996, 43105 }, + { 0x1997, 33036 }, + { 0x1998, 33190 }, + { 0x1999, 32613 }, + { 0x199A, 33226 }, + { 0x199B, 33046 }, + { 0x199C, 33051 }, + { 0x199D, 33205 }, + { 0x199E, 33056 }, + { 0x199F, 32643 }, + { 0x19A0, 32483 }, + { 0x19A1, 33088 }, + { 0x19A2, 33093 }, + { 0x19A3, 33110 }, + { 0x19A4, 33117 }, + { 0x19A5, 33268 }, + { 0x19A6, 33127 }, + { 0x19A7, 33220 }, + { 0x19A8, 32869 }, + { 0x19A9, 32886 }, + { 0x19AA, 32874 }, + { 0x19AB, 32618 }, + { 0x19AC, 33200 }, + { 0x19AD, 32057 }, + { 0x19AE, 32350 }, + { 0x19AF, 33132 }, + { 0x19B0, 33274 }, + { 0x19B1, 33256 }, + { 0x19B2, 33160 }, + { 0x19B3, 33165 }, + { 0x19B4, 32881 }, + { 0x19B5, 32898 }, + { 0x19B6, 32892 }, + { 0x19B7, 33170 }, + { 0x19B8, 33175 }, + { 0x19B9, 33185 }, + { 0x19BA, 33210 }, + { 0x19BB, 33284 }, + { 0x19BC, 33025 }, + { 0x19BD, 25041 }, + { 0x19BE, 25046 }, + { 0x19BF, 25026 }, + { 0x19C0, 25036 }, + { 0x19C1, 25031 }, + { 0x19C2, 88636 }, + { 0x19C3, 108335 }, + { 0x19C4, 108429 }, + { 0x19C5, 108339 }, + { 0x19C6, 108437 }, + { 0x19C7, 108347 }, + { 0x19C8, 108351 }, + { 0x19C9, 108442 }, + { 0x19CA, 108359 }, + { 0x19CB, 108363 }, + { 0x19CC, 108373 }, + { 0x19CD, 108377 }, + { 0x19CE, 108381 }, + { 0x19CF, 108385 }, + { 0x19D0, 108389 }, + { 0x19D1, 108393 }, + { 0x19D2, 108447 }, + { 0x19D3, 108397 }, + { 0x19D4, 108433 }, + { 0x19D5, 108401 }, + { 0x19D6, 108409 }, + { 0x19D7, 108413 }, + { 0x19D8, 108417 }, + { 0x19D9, 108425 }, + { 0x19DA, 107523 }, + { 0x19DB, 108032 }, + { 0x19DC, 107974 }, + { 0x19DD, 108113 }, + { 0x19DE, 107527 }, + { 0x19DF, 107547 }, + { 0x19E0, 107571 }, + { 0x19E1, 107996 }, + { 0x19E2, 107954 }, + { 0x19E3, 108118 }, + { 0x19E4, 107579 }, + { 0x19E5, 108042 }, + { 0x19E6, 107621 }, + { 0x19E7, 107673 }, + { 0x19E8, 107889 }, + { 0x19E9, 107697 }, + { 0x19EA, 107959 }, + { 0x19EB, 107909 }, + { 0x19EC, 108009 }, + { 0x19ED, 107707 }, + { 0x19EE, 107747 }, + { 0x19EF, 107765 }, + { 0x19F0, 108253 }, + { 0x19F1, 108047 }, + { 0x19F2, 107781 }, + { 0x19F3, 107881 }, + { 0x19F4, 107915 }, + { 0x19F5, 107991 }, + { 0x19F6, 107978 }, + { 0x19F7, 107986 }, + { 0x19F8, 107885 }, + { 0x19F9, 36218 }, + { 0x19FA, 36258 }, + { 0x19FB, 36273 }, + { 0x19FC, 36278 }, + { 0x19FD, 26110 }, + { 0x19FE, 26115 }, + { 0x19FF, 26105 }, + { 0x1A00, 26100 }, + { 0x1A01, 26095 }, + { 0x1A02, 31868 }, + { 0x1A03, 29073 }, + { 0x1A04, 29251 }, + { 0x1A05, 29519 }, + { 0x1A06, 30131 }, + { 0x1A07, 30221 }, + { 0x1A08, 30610 }, + { 0x1A09, 30749 }, + { 0x1A0A, 30788 }, + { 0x1A0B, 30930 }, + { 0x1A0C, 31037 }, + { 0x1A0D, 31674 }, + { 0x1A0E, 32457 }, + { 0x1A0F, 108537 }, + { 0x1A10, 32721 }, + { 0x1A11, 31845 }, + { 0x1A12, 32970 }, + { 0x1A13, 32123 }, + { 0x1A14, 30617 }, + { 0x1A15, 32977 }, + { 0x1A16, 32755 }, + { 0x1A17, 29092 }, + { 0x1A18, 29276 }, + { 0x1A19, 29532 }, + { 0x1A1A, 29599 }, + { 0x1A1B, 29908 }, + { 0x1A1C, 30049 }, + { 0x1A1D, 30138 }, + { 0x1A1E, 30241 }, + { 0x1A1F, 30631 }, + { 0x1A20, 30775 }, + { 0x1A21, 30950 }, + { 0x1A22, 31959 }, + { 0x1A23, 31393 }, + { 0x1A24, 31511 }, + { 0x1A25, 31687 }, + { 0x1A26, 28982 }, + { 0x1A27, 32260 }, + { 0x1A28, 29216 }, + { 0x1A29, 29440 }, + { 0x1A2A, 32174 }, + { 0x1A2B, 32850 }, + { 0x1A2C, 32299 }, + { 0x1A2D, 29803 }, + { 0x1A2E, 32194 }, + { 0x1A2F, 31966 }, + { 0x1A30, 31337 }, + { 0x1A31, 32006 }, + { 0x1A32, 108124 }, + { 0x1A33, 107537 }, + { 0x1A34, 107541 }, + { 0x1A35, 107897 }, + { 0x1A36, 108241 }, + { 0x1A37, 107575 }, + { 0x1A38, 108211 }, + { 0x1A39, 108027 }, + { 0x1A3A, 108037 }, + { 0x1A3B, 107605 }, + { 0x1A3C, 107939 }, + { 0x1A3D, 108151 }, + { 0x1A3E, 108156 }, + { 0x1A3F, 107615 }, + { 0x1A40, 107657 }, + { 0x1A41, 107642 }, + { 0x1A42, 108163 }, + { 0x1A43, 107677 }, + { 0x1A44, 108052 }, + { 0x1A45, 107683 }, + { 0x1A46, 107690 }, + { 0x1A47, 108175 }, + { 0x1A48, 108004 }, + { 0x1A49, 107905 }, + { 0x1A4A, 107741 }, + { 0x1A4B, 107893 }, + { 0x1A4C, 107751 }, + { 0x1A4D, 107769 }, + { 0x1A4E, 108227 }, + { 0x1A4F, 108185 }, + { 0x1A50, 107785 }, + { 0x1A51, 108091 }, + { 0x1A52, 107810 }, + { 0x1A53, 107820 }, + { 0x1A54, 107814 }, + { 0x1A55, 107901 }, + { 0x1A56, 108000 }, + { 0x1A57, 116943 }, + { 0x1A58, 116939 }, + { 0x1A59, 116898 }, + { 0x1A5A, 117817 }, + { 0x1A5B, 117841 }, + { 0x1A5C, 117839 }, + { 0x1A5D, 117845 }, + { 0x1A5E, 117835 }, + { 0x1A5F, 117859 }, + { 0x1A60, 117857 }, + { 0x1A61, 116634 }, + { 0x1A62, 117837 }, + { 0x1A63, 117843 }, + { 0x1A64, 117032 }, + { 0x1A65, 117086 }, + { 0x1A66, 117122 }, + { 0x1A67, 116253 }, + { 0x1A68, 116264 }, + { 0x1A69, 116267 }, + { 0x1A6A, 116780 }, + { 0x1A6B, 116703 }, + { 0x1A6C, 116708 }, + { 0x1A6D, 116713 }, + { 0x1A6E, 116538 }, + { 0x1A6F, 116756 }, + { 0x1A70, 116723 }, + { 0x1A71, 116559 }, + { 0x1A72, 116788 }, + { 0x1A73, 116574 }, + { 0x1A74, 116579 }, + { 0x1A75, 116794 }, + { 0x1A76, 116800 }, + { 0x1A77, 116598 }, + { 0x1A78, 116806 }, + { 0x1A79, 116812 }, + { 0x1A7A, 116640 }, + { 0x1A7B, 116646 }, + { 0x1A7C, 116733 }, + { 0x1A7D, 116698 }, + { 0x1A7E, 116739 }, + { 0x1A7F, 116528 }, + { 0x1A80, 116728 }, + { 0x1A81, 116744 }, + { 0x1A82, 116554 }, + { 0x1A83, 116584 }, + { 0x1A84, 116608 }, + { 0x1A85, 116624 }, + { 0x1A86, 116718 }, + { 0x1A87, 116661 }, + { 0x1A88, 116682 }, + { 0x1A89, 116521 }, + { 0x1A8A, 116617 }, + { 0x1A8B, 116670 }, + { 0x1A8C, 116256 }, + { 0x1A8D, 117053 }, + { 0x1A8E, 117049 }, + { 0x1A8F, 116273 }, + { 0x1A90, 116441 }, + { 0x1A91, 116284 }, + { 0x1A92, 117445 }, + { 0x1A93, 117009 }, + { 0x1A94, 116928 }, + { 0x1A95, 116380 }, + { 0x1A96, 116860 }, + { 0x1A97, 33430 }, + { 0x1A98, 28849 }, + { 0x1A99, 33607 }, + { 0x1A9A, 29046 }, + { 0x1A9B, 33614 }, + { 0x1A9C, 29053 }, + { 0x1A9D, 33627 }, + { 0x1A9E, 29066 }, + { 0x1A9F, 33699 }, + { 0x1AA0, 29158 }, + { 0x1AA1, 33724 }, + { 0x1AA2, 29190 }, + { 0x1AA3, 33731 }, + { 0x1AA4, 29197 }, + { 0x1AA5, 33744 }, + { 0x1AA6, 29224 }, + { 0x1AA7, 33795 }, + { 0x1AA8, 29270 }, + { 0x1AA9, 33801 }, + { 0x1AAA, 29283 }, + { 0x1AAB, 33891 }, + { 0x1AAC, 29387 }, + { 0x1AAD, 33883 }, + { 0x1AAE, 29379 }, + { 0x1AAF, 33986 }, + { 0x1AB0, 29495 }, + { 0x1AB1, 33863 }, + { 0x1AB2, 29359 }, + { 0x1AB3, 33917 }, + { 0x1AB4, 29413 }, + { 0x1AB5, 33997 }, + { 0x1AB6, 29506 }, + { 0x1AB7, 34051 }, + { 0x1AB8, 29574 }, + { 0x1AB9, 34086 }, + { 0x1ABA, 29616 }, + { 0x1ABB, 34093 }, + { 0x1ABC, 29623 }, + { 0x1ABD, 34137 }, + { 0x1ABE, 29681 }, + { 0x1ABF, 34125 }, + { 0x1AC0, 29662 }, + { 0x1AC1, 34106 }, + { 0x1AC2, 29643 }, + { 0x1AC3, 34204 }, + { 0x1AC4, 29741 }, + { 0x1AC5, 34249 }, + { 0x1AC6, 29795 }, + { 0x1AC7, 34309 }, + { 0x1AC8, 29868 }, + { 0x1AC9, 34289 }, + { 0x1ACA, 29848 }, + { 0x1ACB, 34302 }, + { 0x1ACC, 29861 }, + { 0x1ACD, 34372 }, + { 0x1ACE, 29938 }, + { 0x1ACF, 34379 }, + { 0x1AD0, 29945 }, + { 0x1AD1, 34401 }, + { 0x1AD2, 29982 }, + { 0x1AD3, 34461 }, + { 0x1AD4, 30086 }, + { 0x1AD5, 34492 }, + { 0x1AD6, 30125 }, + { 0x1AD7, 34472 }, + { 0x1AD8, 30105 }, + { 0x1AD9, 34479 }, + { 0x1ADA, 30112 }, + { 0x1ADB, 34502 }, + { 0x1ADC, 30155 }, + { 0x1ADD, 34509 }, + { 0x1ADE, 30162 }, + { 0x1ADF, 34523 }, + { 0x1AE0, 30182 }, + { 0x1AE1, 34589 }, + { 0x1AE2, 30261 }, + { 0x1AE3, 34722 }, + { 0x1AE4, 30423 }, + { 0x1AE5, 34738 }, + { 0x1AE6, 30439 }, + { 0x1AE7, 34774 }, + { 0x1AE8, 30475 }, + { 0x1AE9, 34766 }, + { 0x1AEA, 30467 }, + { 0x1AEB, 34903 }, + { 0x1AEC, 30604 }, + { 0x1AED, 34890 }, + { 0x1AEE, 30591 }, + { 0x1AEF, 34959 }, + { 0x1AF0, 30687 }, + { 0x1AF1, 34966 }, + { 0x1AF2, 30694 }, + { 0x1AF3, 34973 }, + { 0x1AF4, 30701 }, + { 0x1AF5, 34982 }, + { 0x1AF6, 30710 }, + { 0x1AF7, 35049 }, + { 0x1AF8, 30842 }, + { 0x1AF9, 35056 }, + { 0x1AFA, 30849 }, + { 0x1AFB, 35085 }, + { 0x1AFC, 30884 }, + { 0x1AFD, 35100 }, + { 0x1AFE, 30899 }, + { 0x1AFF, 35063 }, + { 0x1B00, 30856 }, + { 0x1B01, 35161 }, + { 0x1B02, 30982 }, + { 0x1B03, 35168 }, + { 0x1B04, 30989 }, + { 0x1B05, 35181 }, + { 0x1B06, 31017 }, + { 0x1B07, 35227 }, + { 0x1B08, 31083 }, + { 0x1B09, 35442 }, + { 0x1B0A, 31330 }, + { 0x1B0B, 35350 }, + { 0x1B0C, 31238 }, + { 0x1B0D, 35455 }, + { 0x1B0E, 31350 }, + { 0x1B0F, 35342 }, + { 0x1B10, 31230 }, + { 0x1B11, 35377 }, + { 0x1B12, 31265 }, + { 0x1B13, 35479 }, + { 0x1B14, 31387 }, + { 0x1B15, 35466 }, + { 0x1B16, 31361 }, + { 0x1B17, 35522 }, + { 0x1B18, 31444 }, + { 0x1B19, 35516 }, + { 0x1B1A, 31438 }, + { 0x1B1B, 35528 }, + { 0x1B1C, 31450 }, + { 0x1B1D, 35496 }, + { 0x1B1E, 31411 }, + { 0x1B1F, 35503 }, + { 0x1B20, 31418 }, + { 0x1B21, 35544 }, + { 0x1B22, 31466 }, + { 0x1B23, 35551 }, + { 0x1B24, 31518 }, + { 0x1B25, 35561 }, + { 0x1B26, 31528 }, + { 0x1B27, 35705 }, + { 0x1B28, 31707 }, + { 0x1B29, 35647 }, + { 0x1B2A, 31629 }, + { 0x1B2B, 35660 }, + { 0x1B2C, 31648 }, + { 0x1B2D, 29636 }, + { 0x1B2E, 31070 }, + { 0x1B2F, 31431 }, + { 0x1B30, 31561 }, + { 0x1B31, 28922 }, + { 0x1B32, 32145 }, + { 0x1B33, 32161 }, + { 0x1B34, 32153 }, + { 0x1B35, 35929 }, + { 0x1B36, 32267 }, + { 0x1B37, 33400 }, + { 0x1B38, 28819 }, + { 0x1B39, 33407 }, + { 0x1B3A, 28826 }, + { 0x1B3B, 33579 }, + { 0x1B3C, 29013 }, + { 0x1B3D, 33587 }, + { 0x1B3E, 29021 }, + { 0x1B3F, 33570 }, + { 0x1B40, 29004 }, + { 0x1B41, 33595 }, + { 0x1B42, 29029 }, + { 0x1B43, 33561 }, + { 0x1B44, 28995 }, + { 0x1B45, 33467 }, + { 0x1B46, 28886 }, + { 0x1B47, 33475 }, + { 0x1B48, 28894 }, + { 0x1B49, 33458 }, + { 0x1B4A, 28877 }, + { 0x1B4B, 33483 }, + { 0x1B4C, 28902 }, + { 0x1B4D, 33449 }, + { 0x1B4E, 28868 }, + { 0x1B4F, 33819 }, + { 0x1B50, 29309 }, + { 0x1B51, 33826 }, + { 0x1B52, 29316 }, + { 0x1B53, 33857 }, + { 0x1B54, 29353 }, + { 0x1B55, 33962 }, + { 0x1B56, 29471 }, + { 0x1B57, 33970 }, + { 0x1B58, 29479 }, + { 0x1B59, 33953 }, + { 0x1B5A, 29462 }, + { 0x1B5B, 33978 }, + { 0x1B5C, 29487 }, + { 0x1B5D, 33944 }, + { 0x1B5E, 29453 }, + { 0x1B5F, 34167 }, + { 0x1B60, 29704 }, + { 0x1B61, 34160 }, + { 0x1B62, 29697 }, + { 0x1B63, 34616 }, + { 0x1B64, 30309 }, + { 0x1B65, 34623 }, + { 0x1B66, 30324 }, + { 0x1B67, 34862 }, + { 0x1B68, 30563 }, + { 0x1B69, 34870 }, + { 0x1B6A, 30571 }, + { 0x1B6B, 34853 }, + { 0x1B6C, 30554 }, + { 0x1B6D, 34878 }, + { 0x1B6E, 30579 }, + { 0x1B6F, 34844 }, + { 0x1B70, 30545 }, + { 0x1B71, 34654 }, + { 0x1B72, 30355 }, + { 0x1B73, 34662 }, + { 0x1B74, 30363 }, + { 0x1B75, 34645 }, + { 0x1B76, 30346 }, + { 0x1B77, 34670 }, + { 0x1B78, 30371 }, + { 0x1B79, 34636 }, + { 0x1B7A, 30337 }, + { 0x1B7B, 35243 }, + { 0x1B7C, 31116 }, + { 0x1B7D, 35250 }, + { 0x1B7E, 31123 }, + { 0x1B7F, 35281 }, + { 0x1B80, 31154 }, + { 0x1B81, 35289 }, + { 0x1B82, 31162 }, + { 0x1B83, 35272 }, + { 0x1B84, 31145 }, + { 0x1B85, 35297 }, + { 0x1B86, 31170 }, + { 0x1B87, 35263 }, + { 0x1B88, 31136 }, + { 0x1B89, 35600 }, + { 0x1B8A, 31574 }, + { 0x1B8B, 35568 }, + { 0x1B8C, 31535 }, + { 0x1B8D, 35581 }, + { 0x1B8E, 31548 }, + { 0x1B8F, 35606 }, + { 0x1B90, 31588 }, + { 0x1B91, 36180 }, + { 0x1B92, 32955 }, + { 0x1B93, 36175 }, + { 0x1B94, 32950 }, + { 0x1B95, 35588 }, + { 0x1B96, 31555 }, + { 0x1B97, 24220 }, + { 0x1B98, 24152 }, + { 0x1B99, 24244 }, + { 0x1B9A, 24176 }, + { 0x1B9B, 24226 }, + { 0x1B9C, 24158 }, + { 0x1B9D, 24262 }, + { 0x1B9E, 24194 }, + { 0x1B9F, 25509 }, + { 0x1BA0, 25441 }, + { 0x1BA1, 25533 }, + { 0x1BA2, 25465 }, + { 0x1BA3, 25515 }, + { 0x1BA4, 25447 }, + { 0x1BA5, 25551 }, + { 0x1BA6, 25483 }, + { 0x1BA7, 24621 }, + { 0x1BA8, 24599 }, + { 0x1BA9, 24635 }, + { 0x1BAA, 24613 }, + { 0x1BAB, 24627 }, + { 0x1BAC, 24605 }, + { 0x1BAD, 25832 }, + { 0x1BAE, 25810 }, + { 0x1BAF, 25846 }, + { 0x1BB0, 25824 }, + { 0x1BB1, 25838 }, + { 0x1BB2, 25816 }, + { 0x1BB3, 23840 }, + { 0x1BB4, 23772 }, + { 0x1BB5, 23864 }, + { 0x1BB6, 23796 }, + { 0x1BB7, 23846 }, + { 0x1BB8, 23778 }, + { 0x1BB9, 23882 }, + { 0x1BBA, 23814 }, + { 0x1BBB, 25199 }, + { 0x1BBC, 25131 }, + { 0x1BBD, 25223 }, + { 0x1BBE, 25155 }, + { 0x1BBF, 25205 }, + { 0x1BC0, 25137 }, + { 0x1BC1, 25241 }, + { 0x1BC2, 25173 }, + { 0x1BC3, 24032 }, + { 0x1BC4, 24002 }, + { 0x1BC5, 24046 }, + { 0x1BC6, 24016 }, + { 0x1BC7, 24038 }, + { 0x1BC8, 24008 }, + { 0x1BC9, 24054 }, + { 0x1BCA, 24024 }, + { 0x1BCB, 25367 }, + { 0x1BCC, 25337 }, + { 0x1BCD, 25381 }, + { 0x1BCE, 25351 }, + { 0x1BCF, 25373 }, + { 0x1BD0, 25343 }, + { 0x1BD1, 25389 }, + { 0x1BD2, 25359 }, + { 0x1BD3, 24687 }, + { 0x1BD4, 24665 }, + { 0x1BD5, 24701 }, + { 0x1BD6, 24679 }, + { 0x1BD7, 24693 }, + { 0x1BD8, 24671 }, + { 0x1BD9, 25898 }, + { 0x1BDA, 25876 }, + { 0x1BDB, 25912 }, + { 0x1BDC, 25890 }, + { 0x1BDD, 25904 }, + { 0x1BDE, 25882 }, + { 0x1BDF, 24761 }, + { 0x1BE0, 24731 }, + { 0x1BE1, 24775 }, + { 0x1BE2, 24745 }, + { 0x1BE3, 24767 }, + { 0x1BE4, 24737 }, + { 0x1BE5, 24783 }, + { 0x1BE6, 24753 }, + { 0x1BE7, 25942 }, + { 0x1BE8, 25956 }, + { 0x1BE9, 25948 }, + { 0x1BEA, 25964 }, + { 0x1BEB, 24451 }, + { 0x1BEC, 24383 }, + { 0x1BED, 24475 }, + { 0x1BEE, 24407 }, + { 0x1BEF, 24457 }, + { 0x1BF0, 24389 }, + { 0x1BF1, 24493 }, + { 0x1BF2, 24425 }, + { 0x1BF3, 25701 }, + { 0x1BF4, 25633 }, + { 0x1BF5, 25725 }, + { 0x1BF6, 25657 }, + { 0x1BF7, 25707 }, + { 0x1BF8, 25639 }, + { 0x1BF9, 25743 }, + { 0x1BFA, 25675 }, + { 0x1BFB, 24294 }, + { 0x1BFC, 24138 }, + { 0x1BFD, 24649 }, + { 0x1BFE, 24593 }, + { 0x1BFF, 23914 }, + { 0x1C00, 23758 }, + { 0x1C01, 24068 }, + { 0x1C02, 23996 }, + { 0x1C03, 24715 }, + { 0x1C04, 24659 }, + { 0x1C05, 24797 }, + { 0x1C06, 24725 }, + { 0x1C07, 24525 }, + { 0x1C08, 24369 }, + { 0x1C09, 24280 }, + { 0x1C0A, 24212 }, + { 0x1C0B, 24252 }, + { 0x1C0C, 24184 }, + { 0x1C0D, 24234 }, + { 0x1C0E, 24166 }, + { 0x1C0F, 24270 }, + { 0x1C10, 24202 }, + { 0x1C11, 25569 }, + { 0x1C12, 25501 }, + { 0x1C13, 25541 }, + { 0x1C14, 25473 }, + { 0x1C15, 25523 }, + { 0x1C16, 25455 }, + { 0x1C17, 25559 }, + { 0x1C18, 25491 }, + { 0x1C19, 23900 }, + { 0x1C1A, 23832 }, + { 0x1C1B, 23872 }, + { 0x1C1C, 23804 }, + { 0x1C1D, 23854 }, + { 0x1C1E, 23786 }, + { 0x1C1F, 23890 }, + { 0x1C20, 23822 }, + { 0x1C21, 25259 }, + { 0x1C22, 25191 }, + { 0x1C23, 25231 }, + { 0x1C24, 25163 }, + { 0x1C25, 25213 }, + { 0x1C26, 25145 }, + { 0x1C27, 25249 }, + { 0x1C28, 25181 }, + { 0x1C29, 24511 }, + { 0x1C2A, 24443 }, + { 0x1C2B, 24483 }, + { 0x1C2C, 24415 }, + { 0x1C2D, 24465 }, + { 0x1C2E, 24397 }, + { 0x1C2F, 24501 }, + { 0x1C30, 24433 }, + { 0x1C31, 25761 }, + { 0x1C32, 25693 }, + { 0x1C33, 25733 }, + { 0x1C34, 25665 }, + { 0x1C35, 25715 }, + { 0x1C36, 25647 }, + { 0x1C37, 25751 }, + { 0x1C38, 25683 }, + { 0x1C39, 24314 }, + { 0x1C3A, 24308 }, + { 0x1C3B, 24300 }, + { 0x1C3C, 24334 }, + { 0x1C3D, 24144 }, + { 0x1C3E, 24320 }, + { 0x1C3F, 24326 }, + { 0x1C40, 25595 }, + { 0x1C41, 25589 }, + { 0x1C42, 25583 }, + { 0x1C43, 25435 }, + { 0x1C44, 25601 }, + { 0x1C45, 26028 }, + { 0x1C46, 26533 }, + { 0x1C47, 23714 }, + { 0x1C48, 26381 }, + { 0x1C49, 26085 }, + { 0x1C4A, 23920 }, + { 0x1C4B, 23942 }, + { 0x1C4C, 23764 }, + { 0x1C4D, 23928 }, + { 0x1C4E, 23934 }, + { 0x1C4F, 25860 }, + { 0x1C50, 25804 }, + { 0x1C51, 25273 }, + { 0x1C52, 25125 }, + { 0x1C53, 25279 }, + { 0x1C54, 23720 }, + { 0x1C55, 23716 }, + { 0x1C56, 23724 }, + { 0x1C57, 24080 }, + { 0x1C58, 24074 }, + { 0x1C59, 24108 }, + { 0x1C5A, 24092 }, + { 0x1C5B, 24124 }, + { 0x1C5C, 24116 }, + { 0x1C5D, 25415 }, + { 0x1C5E, 25409 }, + { 0x1C5F, 25403 }, + { 0x1C60, 25331 }, + { 0x1C61, 23696 }, + { 0x1C62, 23692 }, + { 0x1C63, 23700 }, + { 0x1C64, 24809 }, + { 0x1C65, 24803 }, + { 0x1C66, 24837 }, + { 0x1C67, 24821 }, + { 0x1C68, 23966 }, + { 0x1C69, 23960 }, + { 0x1C6A, 24853 }, + { 0x1C6B, 24845 }, + { 0x1C6C, 25990 }, + { 0x1C6D, 25984 }, + { 0x1C6E, 25978 }, + { 0x1C6F, 25936 }, + { 0x1C70, 25297 }, + { 0x1C71, 26081 }, + { 0x1C72, 26077 }, + { 0x1C73, 24890 }, + { 0x1C74, 24531 }, + { 0x1C75, 24553 }, + { 0x1C76, 24375 }, + { 0x1C77, 24539 }, + { 0x1C78, 24545 }, + { 0x1C79, 25926 }, + { 0x1C7A, 25870 }, + { 0x1C7B, 25775 }, + { 0x1C7C, 25627 }, + { 0x1C7D, 25781 }, + { 0x1C7E, 23682 }, + { 0x1C7F, 23690 }, + { 0x1C80, 86 }, + { 0x1C81, 80 }, + { 0x1C82, 88 }, + { 0x1C83, 82 }, + { 0x1C84, 143502 }, + { 0x1C85, 133210 }, + { 0x1C86, 133088 }, + { 0x1C87, 54934 }, + { 0x1C88, 134502 }, + { 0x1C89, 17339 }, + { 0x1C8A, 14181 }, + { 0x1C8B, 17555 }, + { 0x1C8C, 17565 }, + { 0x1C8D, 17558 }, + { 0x1C8E, 143971 }, + { 0x1C8F, 144527 }, + { 0x1C90, 57548 }, + { 0x1C91, 143212 }, + { 0x1C92, 54932 }, + { 0x1C93, 84 }, + { 0x1C94, 78 }, + { 0x1C95, 131610 }, + { 0x1C96, 54830 }, + { 0x1C97, 54675 }, + { 0x1C98, 14945 }, + { 0x1C99, 40574 }, + { 0x1C9A, 64915 }, + { 0x1C9B, 64929 }, + { 0x1C9C, 14929 }, + { 0x1C9D, 40558 }, + { 0x1C9E, 54700 }, + { 0x1C9F, 54845 }, + { 0x1CA0, 54270 }, + { 0x1CA1, 54717 }, + { 0x1CA2, 52973 }, + { 0x1CA3, 133103 }, + { 0x1CA4, 10172 }, + { 0x1CA5, 12223 }, + { 0x1CA6, 131697 }, + { 0x1CA7, 133214 }, + { 0x1CA8, 15086 }, + { 0x1CA9, 127634 }, + { 0x1CAA, 143977 }, + { 0x1CAB, 144533 }, + { 0x1CAC, 10523 }, + { 0x1CAD, 143975 }, + { 0x1CAE, 144531 }, + { 0x1CAF, 63852 }, + { 0x1CB0, 10509 }, + { 0x1CB1, 10503 }, + { 0x1CB2, 40281 }, + { 0x1CB3, 54704 }, + { 0x1CB4, 68864 }, + { 0x1CB5, 110531 }, + { 0x1CB6, 110541 }, + { 0x1CB7, 110571 }, + { 0x1CB8, 22365 }, + { 0x1CB9, 64919 }, + { 0x1CBA, 64924 }, + { 0x1CBB, 127695 }, + { 0x1CBC, 54836 }, + { 0x1CBD, 133863 }, + { 0x1CBE, 109848 }, + { 0x1CBF, 111276 }, + { 0x1CC0, 116169 }, + { 0x1CC1, 22366 }, + { 0x1CC2, 83392 }, + { 0x1CC3, 57552 }, + { 0x1CC4, 103464 }, + { 0x1CC5, 14971 }, + { 0x1CC6, 40600 }, + { 0x1CC7, 54803 }, + { 0x1CC8, 110368 }, + { 0x1CC9, 133205 }, + { 0x1CCA, 111084 }, + { 0x1CCB, 110574 }, + { 0x1CCC, 21575 }, + { 0x1CCD, 21599 }, + { 0x1CCE, 6956 }, + { 0x1CCF, 110588 }, + { 0x1CD0, 22477 }, + { 0x1CD1, 12266 }, + { 0x1CD2, 129776 }, + { 0x1CD3, 41670 }, + { 0x1CD4, 105544 }, + { 0x1CD5, 54952 }, + { 0x1CD6, 42328 }, + { 0x1CD7, 127648 }, + { 0x1CD8, 14115 }, + { 0x1CD9, 14095 }, + { 0x1CDA, 12226 }, + { 0x1CDB, 14112 }, + { 0x1CDC, 54654 }, + { 0x1CDD, 111168 }, + { 0x1CDE, 111328 }, + { 0x1CDF, 63455 }, + { 0x1CE0, 17548 }, + { 0x1CE1, 103476 }, + { 0x1CE2, 125361 }, + { 0x1CE3, 125363 }, + { 0x1CE4, 125359 }, + { 0x1CE5, 143973 }, + { 0x1CE6, 144529 }, + { 0x1CE7, 23317 }, + { 0x1CE8, 10520 }, + { 0x1CE9, 73882 }, + { 0x1CEA, 82999 }, + { 0x1CEB, 73878 }, + { 0x1CEC, 82995 }, + { 0x1CED, 108879 }, + { 0x1CEE, 77646 }, + { 0x1CEF, 137683 }, + { 0x1CF0, 137687 }, + { 0x1CF1, 137673 }, + { 0x1CF2, 137671 }, + { 0x1CF3, 137667 }, + { 0x1CF4, 137702 }, + { 0x1CF5, 137685 }, + { 0x1CF6, 137678 }, + { 0x1CF7, 137680 }, + { 0x1CF8, 137697 }, + { 0x1CF9, 137706 }, + { 0x1CFA, 137675 }, + { 0x1CFB, 137699 }, + { 0x1CFC, 137692 }, + { 0x1CFD, 128243 }, + { 0x1CFE, 128225 }, + { 0x1CFF, 128229 }, + { 0x1D00, 128254 }, + { 0x1D01, 128233 }, + { 0x1D02, 128231 }, + { 0x1D03, 128227 }, + { 0x1D04, 128252 }, + { 0x1D05, 128245 }, + { 0x1D06, 128238 }, + { 0x1D07, 128240 }, + { 0x1D08, 128247 }, + { 0x1D09, 128256 }, + { 0x1D0A, 128235 }, + { 0x1D0B, 128249 }, + { 0x1D0C, 36203 }, + { 0x1D0D, 36208 }, + { 0x1D0E, 36248 }, + { 0x1D0F, 36283 }, + { 0x1D10, 36288 }, + { 0x1D11, 36213 }, + { 0x1D12, 36228 }, + { 0x1D13, 36233 }, + { 0x1D14, 36238 }, + { 0x1D15, 36243 }, + { 0x1D16, 36253 }, + { 0x1D17, 36263 }, + { 0x1D18, 36268 }, + { 0x1D19, 143683 }, + { 0x1D1A, 22495 }, + { 0x1D1B, 87645 }, + { 0x1D1C, 54976 }, + { 0x1D1D, 15113 }, + { 0x1D1E, 15921 }, + { 0x1D1F, 38532 }, + { 0x1D20, 64562 }, + { 0x1D21, 41204 }, + { 0x1D22, 13186 }, + { 0x1D23, 7782 }, + { 0x1D24, 13881 }, + { 0x1D25, 13919 }, + { 0x1D26, 6617 }, + { 0x1D27, 68917 }, + { 0x1D28, 73012 }, + { 0x1D29, 54984 }, + { 0x1D2A, 16596 }, + { 0x1D2B, 73541 }, + { 0x1D2C, 69884 }, + { 0x1D2D, 73871 }, + { 0x1D2E, 13523 }, + { 0x1D2F, 36624 }, + { 0x1D30, 110683 }, + { 0x1D31, 42315 }, + { 0x1D32, 57554 }, + { 0x1D33, 82597 }, + { 0x1D34, 63857 }, + { 0x1D35, 37273 }, + { 0x1D36, 40860 }, + { 0x1D37, 14503 }, + { 0x1D38, 70398 }, + { 0x1D39, 10573 }, + { 0x1D3A, 116376 }, + { 0x1D3B, 116849 }, + { 0x1D3C, 116411 }, + { 0x1D3D, 116893 }, + { 0x1D3E, 117851 }, + { 0x1D3F, 117513 }, + { 0x1D40, 116358 }, + { 0x1D41, 116841 }, + { 0x1D42, 116434 }, + { 0x1D43, 117509 }, + { 0x1D44, 117847 }, + { 0x1D45, 116901 }, + { 0x1D46, 116327 }, + { 0x1D47, 117525 }, + { 0x1D48, 117538 }, + { 0x1D49, 117546 }, + { 0x1D4A, 117528 }, + { 0x1D4B, 116366 }, + { 0x1D4C, 117535 }, + { 0x1D4D, 117532 }, + { 0x1D4E, 117541 }, + { 0x1D4F, 117184 }, + { 0x1D50, 117027 }, + { 0x1D51, 117125 }, + { 0x1D52, 117108 }, + { 0x1D53, 116437 }, + { 0x1D54, 117549 }, + { 0x1D55, 116398 }, + { 0x1D56, 117811 }, + { 0x1D57, 117553 }, + { 0x1D58, 116362 }, + { 0x1D59, 116845 }, + { 0x1D5A, 117195 }, + { 0x1D5B, 69871 }, + { 0x1D5C, 112600 }, + { 0x1D5D, 143616 }, + { 0x1D5E, 54293 }, + { 0x1D5F, 53139 }, + { 0x1D60, 13519 }, + { 0x1D61, 13506 }, + { 0x1D62, 23303 }, + { 0x1D63, 78761 }, + { 0x1D64, 54295 }, + { 0x1D65, 64856 }, + { 0x1D66, 64874 }, + { 0x1D67, 138041 }, + { 0x1D68, 143619 }, + { 0x1D69, 64570 }, + { 0x1D6A, 64572 }, + { 0x1D6B, 64877 }, + { 0x1D6C, 138044 }, + { 0x1D6D, 64880 }, + { 0x1D6E, 64859 }, + { 0x1D6F, 5 }, + { 0x1D70, 143622 }, + { 0x1D71, 63915 }, + { 0x1D72, 41493 }, + { 0x1D73, 64886 }, + { 0x1D74, 143625 }, + { 0x1D75, 143628 }, + { 0x1D76, 64889 }, + { 0x1D77, 138047 }, + { 0x1D78, 143631 }, + { 0x1D79, 143214 }, + { 0x1D7A, 110509 }, + { 0x1D7B, 78771 }, + { 0x1D7C, 128521 }, + { 0x1D7D, 42437 }, + { 0x1D7E, 111277 }, + { 0x1D7F, 143634 }, + { 0x1D80, 40231 }, + { 0x1D81, 8101 }, + { 0x1D82, 105535 }, + { 0x1D83, 138050 }, + { 0x1D84, 68944 }, + { 0x1D85, 58440 }, + { 0x1D86, 83011 }, + { 0x1D87, 64865 }, + { 0x1D88, 138038 }, + { 0x1D89, 124379 }, + { 0x1D8A, 64853 }, + { 0x1D8B, 64868 }, + { 0x1D8C, 64871 }, + { 0x1D8D, 68978 }, + { 0x1D8E, 64883 }, + { 0x1D8F, 64862 }, + { 0x1D90, 13411 }, + { 0x1D91, 4632 }, + { 0x1D92, 23613 }, + { 0x1D93, 22545 }, + { 0x1D94, 133846 }, + { 0x1D95, 78703 }, + { 0x1D96, 124418 }, + { 0x1D97, 143590 }, + { 0x1D98, 143593 }, + { 0x1D99, 143640 }, + { 0x1D9A, 143637 }, + { 0x1D9B, 143587 }, + { 0x1D9C, 68985 }, + { 0x1D9D, 68989 }, + { 0x1D9E, 110590 }, + { 0x1D9F, 68993 }, + { 0x1DA0, 143612 }, + { 0x1DA1, 143596 }, + { 0x1DA2, 143600 }, + { 0x1DA3, 143604 }, + { 0x1DA4, 143608 }, + { 0x1DA5, 110304 }, + { 0x1DA6, 68981 }, + { 0x1DA7, 10507 }, + { 0x1DA8, 137985 }, + { 0x1DA9, 68959 }, + { 0x1DAA, 66033 }, + { 0x1DAB, 69049 }, + { 0x1DAC, 69025 }, + { 0x1DAD, 69033 }, + { 0x1DAE, 69037 }, + { 0x1DAF, 69057 }, + { 0x1DB0, 69021 }, + { 0x1DB1, 69053 }, + { 0x1DB2, 69081 }, + { 0x1DB3, 69069 }, + { 0x1DB4, 69029 }, + { 0x1DB5, 69061 }, + { 0x1DB6, 69041 }, + { 0x1DB7, 69085 }, + { 0x1DB8, 69065 }, + { 0x1DB9, 69077 }, + { 0x1DBA, 103466 }, + { 0x1DBB, 40740 }, + { 0x1DBC, 40777 }, + { 0x1DBD, 40815 }, + { 0x1DBE, 40791 }, + { 0x1DBF, 40780 }, + { 0x1DC0, 40762 }, + { 0x1DC1, 40812 }, + { 0x1DC2, 40797 }, + { 0x1DC3, 40794 }, + { 0x1DC4, 40770 }, + { 0x1DC5, 40818 }, + { 0x1DC6, 40821 }, + { 0x1DC7, 40800 }, + { 0x1DC8, 40743 }, + { 0x1DC9, 40783 }, + { 0x1DCA, 40752 }, + { 0x1DCB, 41321 }, + { 0x1DCC, 41343 }, + { 0x1DCD, 41376 }, + { 0x1DCE, 41356 }, + { 0x1DCF, 41347 }, + { 0x1DD0, 41335 }, + { 0x1DD1, 41372 }, + { 0x1DD2, 41364 }, + { 0x1DD3, 41360 }, + { 0x1DD4, 41339 }, + { 0x1DD5, 41380 }, + { 0x1DD6, 41384 }, + { 0x1DD7, 41368 }, + { 0x1DD8, 41325 }, + { 0x1DD9, 41351 }, + { 0x1DDA, 41330 }, + { 0x1DDB, 40756 }, + { 0x1DDC, 40787 }, + { 0x1DDD, 40773 }, + { 0x1DDE, 40824 }, + { 0x1DDF, 32796 }, + { 0x1DE0, 40765 }, + { 0x1DE1, 40803 }, + { 0x1DE2, 40808 }, + { 0x1DE3, 40747 }, + { 0x1DE4, 69073 }, + { 0x1DE5, 68938 }, + { 0x1DE6, 68941 }, + { 0x1DE7, 125601 }, + { 0x1DE8, 82609 }, + { 0x1DE9, 132246 }, + { 0x1DEA, 124081 }, + { 0x1DEB, 14788 }, + { 0x1DEC, 526 }, + { 0x1DED, 38626 }, + { 0x1DEE, 38547 }, + { 0x1DEF, 41496 }, + { 0x1DF0, 41567 }, + { 0x1DF1, 125728 }, + { 0x1DF2, 132374 }, + { 0x1DF3, 125598 }, + { 0x1DF4, 132243 }, + { 0x1DF5, 125592 }, + { 0x1DF6, 82605 }, + { 0x1DF7, 132237 }, + { 0x1DF8, 124077 }, + { 0x1DF9, 125674 }, + { 0x1DFA, 132310 }, + { 0x1DFB, 125630 }, + { 0x1DFC, 82622 }, + { 0x1DFD, 132266 }, + { 0x1DFE, 124094 }, + { 0x1DFF, 529 }, + { 0x1E00, 125661 }, + { 0x1E01, 132297 }, + { 0x1E02, 125665 }, + { 0x1E03, 132301 }, + { 0x1E04, 14784 }, + { 0x1E05, 14798 }, + { 0x1E06, 124208 }, + { 0x1E07, 82626 }, + { 0x1E08, 82631 }, + { 0x1E09, 124098 }, + { 0x1E0A, 124103 }, + { 0x1E0B, 132352 }, + { 0x1E0C, 124126 }, + { 0x1E0D, 143510 }, + { 0x1E0E, 116187 }, + { 0x1E0F, 38629 }, + { 0x1E10, 125607 }, + { 0x1E11, 143514 }, + { 0x1E12, 116191 }, + { 0x1E13, 125936 }, + { 0x1E14, 125941 }, + { 0x1E15, 82825 }, + { 0x1E16, 82820 }, + { 0x1E17, 132592 }, + { 0x1E18, 132597 }, + { 0x1E19, 124266 }, + { 0x1E1A, 124261 }, + { 0x1E1B, 132282 }, + { 0x1E1C, 82680 }, + { 0x1E1D, 125646 }, + { 0x1E1E, 125842 }, + { 0x1E1F, 82762 }, + { 0x1E20, 132498 }, + { 0x1E21, 124200 }, + { 0x1E22, 125854 }, + { 0x1E23, 132510 }, + { 0x1E24, 125828 }, + { 0x1E25, 14827 }, + { 0x1E26, 132484 }, + { 0x1E27, 125820 }, + { 0x1E28, 82759 }, + { 0x1E29, 132476 }, + { 0x1E2A, 124197 }, + { 0x1E2B, 14823 }, + { 0x1E2C, 542 }, + { 0x1E2D, 38672 }, + { 0x1E2E, 38589 }, + { 0x1E2F, 41536 }, + { 0x1E30, 41595 }, + { 0x1E31, 125851 }, + { 0x1E32, 132507 }, + { 0x1E33, 125952 }, + { 0x1E34, 132608 }, + { 0x1E35, 82654 }, + { 0x1E36, 124131 }, + { 0x1E37, 125813 }, + { 0x1E38, 82756 }, + { 0x1E39, 132469 }, + { 0x1E3A, 124194 }, + { 0x1E3B, 125603 }, + { 0x1E3C, 132248 }, + { 0x1E3D, 125804 }, + { 0x1E3E, 82701 }, + { 0x1E3F, 132450 }, + { 0x1E40, 124183 }, + { 0x1E41, 82725 }, + { 0x1E42, 82704 }, + { 0x1E43, 82717 }, + { 0x1E44, 82709 }, + { 0x1E45, 82744 }, + { 0x1E46, 82748 }, + { 0x1E47, 132453 }, + { 0x1E48, 38635 }, + { 0x1E49, 41499 }, + { 0x1E4A, 538 }, + { 0x1E4B, 40436 }, + { 0x1E4C, 124157 }, + { 0x1E4D, 42367 }, + { 0x1E4E, 125737 }, + { 0x1E4F, 132383 }, + { 0x1E50, 14803 }, + { 0x1E51, 125716 }, + { 0x1E52, 132362 }, + { 0x1E53, 14791 }, + { 0x1E54, 126032 }, + { 0x1E55, 132688 }, + { 0x1E56, 14844 }, + { 0x1E57, 6587 }, + { 0x1E58, 129779 }, + { 0x1E59, 78102 }, + { 0x1E5A, 42321 }, + { 0x1E5B, 42317 }, + { 0x1E5C, 23229 }, + { 0x1E5D, 125356 }, + { 0x1E5E, 38531 }, + { 0x1E5F, 73135 }, + { 0x1E60, 8002 }, + { 0x1E61, 41402 }, + { 0x1E62, 87518 }, + { 0x1E63, 13846 }, + { 0x1E64, 41431 }, + { 0x1E65, 6572 }, + { 0x1E66, 38523 }, + { 0x1E67, 38525 }, + { 0x1E68, 38527 }, + { 0x1E69, 38420 }, + { 0x1E6A, 143979 }, + { 0x1E6B, 6550 }, + { 0x1E6C, 89737 }, + { 0x1E6D, 10546 }, + { 0x1E6E, 83390 }, + { 0x1E6F, 16688 }, + { 0x1E70, 52974 }, + { 0x1E71, 65312 }, + { 0x1E72, 13812 }, + { 0x1E73, 54974 }, + { 0x1E74, 143450 }, + { 0x1E75, 105480 }, + { 0x1E76, 40402 }, + { 0x1E77, 17951 }, + { 0x1E78, 106546 }, + { 0x1E79, 128211 }, + { 0x1E7A, 73000 }, + { 0x1E7B, 13836 }, + { 0x1E7C, 109850 }, + { 0x1E7D, 8047 }, + { 0x1E7E, 74277 }, + { 0x1E7F, 74245 }, + { 0x1E80, 138536 }, + { 0x1E81, 42443 }, + { 0x1E82, 105486 }, + { 0x1E83, 54799 }, + { 0x1E84, 68880 }, + { 0x1E85, 72247 }, + { 0x1E86, 81285 }, + { 0x1E87, 69015 }, + { 0x1E88, 116212 }, + { 0x1E89, 116209 }, + { 0x1E8A, 143526 }, + { 0x1E8B, 128795 }, + { 0x1E8C, 70061 }, + { 0x1E8D, 40289 }, + { 0x1E8E, 132210 }, + { 0x1E8F, 6554 }, + { 0x1E90, 54921 }, + { 0x1E91, 124831 }, + { 0x1E92, 131609 }, + { 0x1E93, 42396 }, + { 0x1E94, 110536 }, + { 0x1E95, 105538 }, + { 0x1E96, 16817 }, + { 0x1E97, 69713 }, + { 0x1E98, 8016 }, + { 0x1E99, 38446 }, + { 0x1E9A, 144804 }, + { 0x1E9B, 8060 }, + { 0x1E9C, 143574 }, + { 0x1E9D, 143563 }, + { 0x1E9E, 77463 }, + { 0x1E9F, 44199 }, + { 0x1EA0, 8018 }, + { 0x1EA1, 44194 }, + { 0x1EA2, 68866 }, + { 0x1EA3, 4253 }, + { 0x1EA4, 130320 }, + { 0x1EA5, 143688 }, + { 0x1EA6, 130316 }, + { 0x1EA7, 129670 }, + { 0x1EA8, 143685 }, + { 0x1EA9, 143577 }, + { 0x1EAA, 27050 }, + { 0x1EAB, 22497 }, + { 0x1EAC, 54919 }, + { 0x1EAD, 16675 }, + { 0x1EAE, 16683 }, + { 0x1EAF, 133151 }, + { 0x1EB0, 124381 }, + { 0x1EB1, 133201 }, + { 0x1EB2, 16995 }, + { 0x1EB3, 22548 }, + { 0x1EB4, 23271 }, + { 0x1EB5, 106544 }, + { 0x1EB6, 132215 }, + { 0x1EB7, 8013 }, + { 0x1EB8, 125343 }, + { 0x1EB9, 8050 }, + { 0x1EBA, 110694 }, + { 0x1EBB, 126130 }, + { 0x1EBC, 138392 }, + { 0x1EBD, 126194 }, + { 0x1EBE, 138456 }, + { 0x1EBF, 126184 }, + { 0x1EC0, 138446 }, + { 0x1EC1, 16191 }, + { 0x1EC2, 16193 }, + { 0x1EC3, 70396 }, + { 0x1EC4, 8055 }, + { 0x1EC5, 8053 }, + { 0x1EC6, 8058 }, + { 0x1EC7, 77435 }, + { 0x1EC8, 77449 }, + { 0x1EC9, 126164 }, + { 0x1ECA, 138429 }, + { 0x1ECB, 77440 }, + { 0x1ECC, 77458 }, + { 0x1ECD, 126171 }, + { 0x1ECE, 138426 }, + { 0x1ECF, 77445 }, + { 0x1ED0, 77454 }, + { 0x1ED1, 110247 }, + { 0x1ED2, 110697 }, + { 0x1ED3, 110248 }, + { 0x1ED4, 110698 }, + { 0x1ED5, 110252 }, + { 0x1ED6, 110702 }, + { 0x1ED7, 13865 }, + { 0x1ED8, 13873 }, + { 0x1ED9, 65616 }, + { 0x1EDA, 110745 }, + { 0x1EDB, 7994 }, + { 0x1EDC, 7998 }, + { 0x1EDD, 65618 }, + { 0x1EDE, 110747 }, + { 0x1EDF, 77421 }, + { 0x1EE0, 77428 }, + { 0x1EE1, 65631 }, + { 0x1EE2, 110760 }, + { 0x1EE3, 108869 }, + { 0x1EE4, 108872 }, + { 0x1EE5, 108870 }, + { 0x1EE6, 65422 }, + { 0x1EE7, 65564 }, + { 0x1EE8, 65432 }, + { 0x1EE9, 65574 }, + { 0x1EEA, 65184 }, + { 0x1EEB, 65186 }, + { 0x1EEC, 71213 }, + { 0x1EED, 71538 }, + { 0x1EEE, 71540 }, + { 0x1EEF, 71895 }, + { 0x1EF0, 71199 }, + { 0x1EF1, 71215 }, + { 0x1EF2, 71886 }, + { 0x1EF3, 71556 }, + { 0x1EF4, 71205 }, + { 0x1EF5, 80934 }, + { 0x1EF6, 81074 }, + { 0x1EF7, 81089 }, + { 0x1EF8, 80892 }, + { 0x1EF9, 40397 }, + { 0x1EFA, 14729 }, + { 0x1EFB, 13890 }, + { 0x1EFC, 557 }, + { 0x1EFD, 114376 }, + { 0x1EFE, 63840 }, + { 0x1EFF, 17453 }, + { 0x1F00, 54971 }, + { 0x1F01, 68888 }, + { 0x1F02, 54824 }, + { 0x1F03, 13833 }, + { 0x1F04, 8008 }, + { 0x1F05, 13830 }, + { 0x1F06, 77414 }, + { 0x1F07, 110292 }, + { 0x1F08, 110742 }, + { 0x1F09, 63860 }, + { 0x1F0A, 87521 }, + { 0x1F0B, 63863 }, + { 0x1F0C, 87525 }, + { 0x1F0D, 109672 }, + { 0x1F0E, 27048 }, + { 0x1F0F, 108865 }, + { 0x1F10, 125335 }, + { 0x1F11, 133848 }, + { 0x1F12, 13188 }, + { 0x1F13, 16199 }, + { 0x1F14, 7993 }, + { 0x1F15, 40404 }, + { 0x1F16, 40669 }, + { 0x1F17, 38520 }, + { 0x1F18, 38517 }, + { 0x1F19, 38529 }, + { 0x1F1A, 38481 }, + { 0x1F1B, 72827 }, + { 0x1F1C, 6556 }, + { 0x1F1D, 16997 }, + { 0x1F1E, 89739 }, + { 0x1F1F, 52550 }, + { 0x1F20, 14936 }, + { 0x1F21, 40565 }, + { 0x1F22, 15059 }, + { 0x1F23, 40701 }, + { 0x1F24, 110538 }, + { 0x1F25, 22536 }, + { 0x1F26, 22539 }, + { 0x1F27, 54742 }, + { 0x1F28, 54808 }, + { 0x1F29, 54839 }, + { 0x1F2A, 54715 }, + { 0x1F2B, 127643 }, + { 0x1F2C, 23291 }, + { 0x1F2D, 126200 }, + { 0x1F2E, 138462 }, + { 0x1F2F, 17464 }, + { 0x1F30, 17467 }, + { 0x1F31, 126247 }, + { 0x1F32, 138509 }, + { 0x1F33, 23283 }, + { 0x1F34, 23287 }, + { 0x1F35, 23275 }, + { 0x1F36, 23279 }, + { 0x1F37, 13868 }, + { 0x1F38, 13876 }, + { 0x1F39, 8033 }, + { 0x1F3A, 8040 }, + { 0x1F3B, 65425 }, + { 0x1F3C, 65567 }, + { 0x1F3D, 126189 }, + { 0x1F3E, 138451 }, + { 0x1F3F, 110256 }, + { 0x1F40, 110706 }, + { 0x1F41, 8022 }, + { 0x1F42, 13851 }, + { 0x1F43, 8026 }, + { 0x1F44, 13857 }, + { 0x1F45, 111415 }, + { 0x1F46, 75233 }, + { 0x1F47, 568 }, + { 0x1F48, 13897 }, + { 0x1F49, 73148 }, + { 0x1F4A, 73162 }, + { 0x1F4B, 41410 }, + { 0x1F4C, 73137 }, + { 0x1F4D, 73154 }, + { 0x1F4E, 41405 }, + { 0x1F4F, 73158 }, + { 0x1F50, 73142 }, + { 0x1F51, 87532 }, + { 0x1F52, 87540 }, + { 0x1F53, 41439 }, + { 0x1F54, 87537 }, + { 0x1F55, 41435 }, + { 0x1F56, 17 }, + { 0x1F57, 89731 }, + { 0x1F58, 101767 }, + { 0x1F59, 27040 }, + { 0x1F5A, 572 }, + { 0x1F5B, 13901 }, + { 0x1F5C, 132209 }, + { 0x1F5D, 134501 }, + { 0x1F5E, 17530 }, + { 0x1F5F, 15009 }, + { 0x1F60, 40638 }, + { 0x1F61, 14779 }, + { 0x1F62, 40473 }, + { 0x1F63, 52504 }, + { 0x1F64, 52483 }, + { 0x1F65, 12184 }, + { 0x1F66, 12152 }, + { 0x1F67, 110511 }, + { 0x1F68, 65533 }, + { 0x1F69, 4623 }, + { 0x1F6A, 78764 }, + { 0x1F6B, 64900 }, + { 0x1F6C, 128532 }, + { 0x1F6D, 110245 }, + { 0x1F6E, 111426 }, + { 0x1F6F, 40250 }, + { 0x1F70, 68924 }, + { 0x1F71, 43297 }, + { 0x1F72, 125338 }, + { 0x1F73, 12165 }, + { 0x1F74, 12191 }, + { 0x1F75, 52490 }, + { 0x1F76, 52511 }, + { 0x1F77, 12109 }, + { 0x1F78, 52424 }, + { 0x1F79, 23346 }, + { 0x1F7A, 41478 }, + { 0x1F7B, 580 }, + { 0x1F7C, 63923 }, + { 0x1F7D, 23299 }, + { 0x1F7E, 12 }, + { 0x1F7F, 106403 }, + { 0x1F80, 143928 }, + { 0x1F81, 144851 }, + { 0x1F82, 23295 }, + { 0x1F83, 70390 }, + { 0x1F84, 138059 }, + { 0x1F85, 4256 }, + { 0x1F86, 110825 }, + { 0x1F87, 42435 }, + { 0x1F88, 124073 }, + { 0x1F89, 72245 }, + { 0x1F8A, 41268 }, + { 0x1F8B, 133153 }, + { 0x1F8C, 133154 }, + { 0x1F8D, 4569 }, + { 0x1F8E, 4573 }, + { 0x1F8F, 4403 }, + { 0x1F90, 4418 }, + { 0x1F91, 4423 }, + { 0x1F92, 4376 }, + { 0x1F93, 4413 }, + { 0x1F94, 4549 }, + { 0x1F95, 4539 }, + { 0x1F96, 4520 }, + { 0x1F97, 4593 }, + { 0x1F98, 4408 }, + { 0x1F99, 4439 }, + { 0x1F9A, 4456 }, + { 0x1F9B, 4467 }, + { 0x1F9C, 4603 }, + { 0x1F9D, 4613 }, + { 0x1F9E, 4450 }, + { 0x1F9F, 4461 }, + { 0x1FA0, 4559 }, + { 0x1FA1, 4334 }, + { 0x1FA2, 4491 }, + { 0x1FA3, 4387 }, + { 0x1FA4, 4398 }, + { 0x1FA5, 4328 }, + { 0x1FA6, 4588 }, + { 0x1FA7, 4428 }, + { 0x1FA8, 4275 }, + { 0x1FA9, 4293 }, + { 0x1FAA, 4365 }, + { 0x1FAB, 4371 }, + { 0x1FAC, 4269 }, + { 0x1FAD, 4598 }, + { 0x1FAE, 4444 }, + { 0x1FAF, 4515 }, + { 0x1FB0, 4496 }, + { 0x1FB1, 4578 }, + { 0x1FB2, 4308 }, + { 0x1FB3, 4554 }, + { 0x1FB4, 4263 }, + { 0x1FB5, 4510 }, + { 0x1FB6, 4544 }, + { 0x1FB7, 4393 }, + { 0x1FB8, 4281 }, + { 0x1FB9, 4303 }, + { 0x1FBA, 4472 }, + { 0x1FBB, 4313 }, + { 0x1FBC, 4564 }, + { 0x1FBD, 4322 }, + { 0x1FBE, 4355 }, + { 0x1FBF, 4530 }, + { 0x1FC0, 4618 }, + { 0x1FC1, 4486 }, + { 0x1FC2, 4298 }, + { 0x1FC3, 4535 }, + { 0x1FC4, 4525 }, + { 0x1FC5, 4608 }, + { 0x1FC6, 4381 }, + { 0x1FC7, 4434 }, + { 0x1FC8, 4340 }, + { 0x1FC9, 4287 }, + { 0x1FCA, 4346 }, + { 0x1FCB, 4318 }, + { 0x1FCC, 4501 }, + { 0x1FCD, 4481 }, + { 0x1FCE, 4583 }, + { 0x1FCF, 4350 }, + { 0x1FD0, 4505 }, + { 0x1FD1, 4477 }, + { 0x1FD2, 8010 }, + { 0x1FD3, 40408 }, + { 0x1FD4, 133082 }, + { 0x1FD5, 13451 }, + { 0x1FD6, 111387 }, + { 0x1FD7, 125357 }, + { 0x1FD8, 129782 }, + { 0x1FD9, 143584 }, + { 0x1FDA, 101776 }, + { 0x1FDB, 133145 }, + { 0x1FDC, 43747 }, + { 0x1FDD, 23269 }, + { 0x1FDE, 133120 }, + { 0x1FDF, 14200 }, + { 0x1FE0, 72216 }, + { 0x1FE1, 72043 }, + { 0x1FE2, 52965 }, + { 0x1FE3, 17458 }, + { 0x1FE4, 132097 }, + { 0x1FE5, 131704 }, + { 0x1FE6, 144943 }, + { 0x1FE7, 144946 }, + { 0x1FE8, 144951 }, + { 0x1FE9, 144949 }, + { 0x1FEA, 54339 }, + { 0x1FEB, 144936 }, + { 0x1FEC, 4361 }, + { 0x1FED, 72447 }, + { 0x1FEE, 110301 }, + { 0x1FEF, 16516 }, + { 0x1FF0, 40282 }, + { 0x1FF1, 22390 }, + { 0x1FF2, 15073 }, + { 0x1FF3, 15077 }, + { 0x1FF4, 15069 }, + { 0x1FF5, 40715 }, + { 0x1FF6, 40719 }, + { 0x1FF7, 40711 }, + { 0x1FF8, 14997 }, + { 0x1FF9, 15002 }, + { 0x1FFA, 14992 }, + { 0x1FFB, 40626 }, + { 0x1FFC, 40631 }, + { 0x1FFD, 40621 }, + { 0x1FFE, 14769 }, + { 0x1FFF, 14774 }, + { 0x2000, 14764 }, + { 0x2001, 22533 }, + { 0x2002, 40463 }, + { 0x2003, 40468 }, + { 0x2004, 40458 }, + { 0x2005, 105522 }, + { 0x2006, 131660 }, + { 0x2007, 42569 }, + { 0x2008, 42783 }, + { 0x2009, 128259 }, + { 0x200A, 128264 }, + { 0x200B, 12202 }, + { 0x200C, 52522 }, + { 0x200D, 52525 }, + { 0x200E, 78627 }, + { 0x200F, 15043 }, + { 0x2010, 40681 }, + { 0x2011, 131668 }, + { 0x2012, 131671 }, + { 0x2013, 131674 }, + { 0x2014, 131677 }, + { 0x2015, 124033 }, + { 0x2016, 124053 }, + { 0x2017, 124060 }, + { 0x2018, 124010 }, + { 0x2019, 123980 }, + { 0x201A, 124066 }, + { 0x201B, 124018 }, + { 0x201C, 123988 }, + { 0x201D, 124040 }, + { 0x201E, 124002 }, + { 0x201F, 123972 }, + { 0x2020, 123996 }, + { 0x2021, 123966 }, + { 0x2022, 124026 }, + { 0x2023, 124046 }, + { 0x2024, 65261 }, + { 0x2025, 64789 }, + { 0x2026, 23192 }, + { 0x2027, 111392 }, + { 0x2028, 107225 }, + { 0x2029, 107221 }, + { 0x202A, 107227 }, + { 0x202B, 107216 }, + { 0x202C, 107207 }, + { 0x202D, 107212 }, + { 0x202E, 107231 }, + { 0x202F, 107235 }, + { 0x2030, 107233 }, + { 0x2031, 23159 }, + { 0x2032, 14157 }, + { 0x2033, 12221 }, + { 0x2034, 52548 }, + { 0x2035, 12181 }, + { 0x2036, 52501 }, + { 0x2037, 12205 }, + { 0x2038, 52532 }, + { 0x2039, 43896 }, + { 0x203A, 70392 }, + { 0x203B, 143500 }, + { 0x203C, 103462 }, + { 0x203D, 72 }, + { 0x203E, 130318 }, + { 0x203F, 72444 }, + { 0x2040, 21673 }, + { 0x2041, 21645 }, + { 0x2042, 21613 }, + { 0x2043, 21629 }, + { 0x2044, 21677 }, + { 0x2045, 21649 }, + { 0x2046, 21693 }, + { 0x2047, 17909 }, + { 0x2048, 128224 }, + { 0x2049, 42418 }, + { 0x204A, 125339 }, + { 0x204B, 21453 }, + { 0x204C, 21462 }, + { 0x204D, 21435 }, + { 0x204E, 21444 }, + { 0x204F, 54810 }, + { 0x2050, 21476 }, + { 0x2051, 21343 }, + { 0x2052, 40279 }, + { 0x2053, 40276 }, + { 0x2054, 40270 }, + { 0x2055, 40273 }, + { 0x2056, 109657 }, + { 0x2057, 65913 }, + { 0x2058, 65949 }, + { 0x2059, 65944 }, + { 0x205A, 65872 }, + { 0x205B, 65882 }, + { 0x205C, 66012 }, + { 0x205D, 66049 }, + { 0x205E, 65893 }, + { 0x205F, 66030 }, + { 0x2060, 66037 }, + { 0x2061, 65909 }, + { 0x2062, 66026 }, + { 0x2063, 65905 }, + { 0x2064, 66018 }, + { 0x2065, 65937 }, + { 0x2066, 65933 }, + { 0x2067, 65896 }, + { 0x2068, 65985 }, + { 0x2069, 65990 }, + { 0x206A, 66000 }, + { 0x206B, 65995 }, + { 0x206C, 66022 }, + { 0x206D, 66052 }, + { 0x206E, 65887 }, + { 0x206F, 65954 }, + { 0x2070, 65877 }, + { 0x2071, 66041 }, + { 0x2072, 66005 }, + { 0x2073, 65901 }, + { 0x2074, 65925 }, + { 0x2075, 66008 }, + { 0x2076, 65921 }, + { 0x2077, 65941 }, + { 0x2078, 65957 }, + { 0x2079, 21705 }, + { 0x207A, 16529 }, + { 0x207B, 66015 }, + { 0x207C, 65960 }, + { 0x207D, 66044 }, + { 0x207E, 65971 }, + { 0x207F, 65978 }, + { 0x2080, 65965 }, + { 0x2081, 8079 }, + { 0x2082, 8081 }, + { 0x2083, 8077 }, + { 0x2084, 8098 }, + { 0x2085, 8072 }, + { 0x2086, 8069 }, + { 0x2087, 8087 }, + { 0x2088, 8083 }, + { 0x2089, 8075 }, + { 0x208A, 8094 }, + { 0x208B, 8091 }, + { 0x208C, 71240 }, + { 0x208D, 71246 }, + { 0x208E, 71267 }, + { 0x208F, 71252 }, + { 0x2090, 71249 }, + { 0x2091, 71243 }, + { 0x2092, 71264 }, + { 0x2093, 71261 }, + { 0x2094, 71255 }, + { 0x2095, 71680 }, + { 0x2096, 71755 }, + { 0x2097, 71803 }, + { 0x2098, 71872 }, + { 0x2099, 71866 }, + { 0x209A, 71851 }, + { 0x209B, 71860 }, + { 0x209C, 71875 }, + { 0x209D, 71863 }, + { 0x209E, 71869 }, + { 0x209F, 71806 }, + { 0x20A0, 143984 }, + { 0x20A1, 143990 }, + { 0x20A2, 144008 }, + { 0x20A3, 143996 }, + { 0x20A4, 143993 }, + { 0x20A5, 143987 }, + { 0x20A6, 144005 }, + { 0x20A7, 144002 }, + { 0x20A8, 143999 }, + { 0x20A9, 144382 }, + { 0x20AA, 144385 }, + { 0x20AB, 144388 }, + { 0x20AC, 144409 }, + { 0x20AD, 144403 }, + { 0x20AE, 144394 }, + { 0x20AF, 144397 }, + { 0x20B0, 144412 }, + { 0x20B1, 144400 }, + { 0x20B2, 144406 }, + { 0x20B3, 144391 }, + { 0x20B4, 22559 }, + { 0x20B5, 22577 }, + { 0x20B6, 22640 }, + { 0x20B7, 22595 }, + { 0x20B8, 22586 }, + { 0x20B9, 22568 }, + { 0x20BA, 22631 }, + { 0x20BB, 22622 }, + { 0x20BC, 22604 }, + { 0x20BD, 63869 }, + { 0x20BE, 63875 }, + { 0x20BF, 63879 }, + { 0x20C0, 63907 }, + { 0x20C1, 63899 }, + { 0x20C2, 63887 }, + { 0x20C3, 63891 }, + { 0x20C4, 63911 }, + { 0x20C5, 63895 }, + { 0x20C6, 63903 }, + { 0x20C7, 63883 }, + { 0x20C8, 144011 }, + { 0x20C9, 144016 }, + { 0x20CA, 144021 }, + { 0x20CB, 144026 }, + { 0x20CC, 144031 }, + { 0x20CD, 144036 }, + { 0x20CE, 144041 }, + { 0x20CF, 144046 }, + { 0x20D0, 144051 }, + { 0x20D1, 144056 }, + { 0x20D2, 144061 }, + { 0x20D3, 144066 }, + { 0x20D4, 144071 }, + { 0x20D5, 144076 }, + { 0x20D6, 144081 }, + { 0x20D7, 144086 }, + { 0x20D8, 144091 }, + { 0x20D9, 144096 }, + { 0x20DA, 144101 }, + { 0x20DB, 144106 }, + { 0x20DC, 144111 }, + { 0x20DD, 144116 }, + { 0x20DE, 144121 }, + { 0x20DF, 144126 }, + { 0x20E0, 144131 }, + { 0x20E1, 144136 }, + { 0x20E2, 71408 }, + { 0x20E3, 71413 }, + { 0x20E4, 71418 }, + { 0x20E5, 71423 }, + { 0x20E6, 71428 }, + { 0x20E7, 71433 }, + { 0x20E8, 71438 }, + { 0x20E9, 71443 }, + { 0x20EA, 71448 }, + { 0x20EB, 71453 }, + { 0x20EC, 71458 }, + { 0x20ED, 71463 }, + { 0x20EE, 71468 }, + { 0x20EF, 71473 }, + { 0x20F0, 71478 }, + { 0x20F1, 71483 }, + { 0x20F2, 71488 }, + { 0x20F3, 71493 }, + { 0x20F4, 71498 }, + { 0x20F5, 71503 }, + { 0x20F6, 71508 }, + { 0x20F7, 71513 }, + { 0x20F8, 71518 }, + { 0x20F9, 71523 }, + { 0x20FA, 71528 }, + { 0x20FB, 71533 }, + { 0x20FC, 71278 }, + { 0x20FD, 71283 }, + { 0x20FE, 71288 }, + { 0x20FF, 71293 }, + { 0x2100, 71298 }, + { 0x2101, 71303 }, + { 0x2102, 71308 }, + { 0x2103, 71313 }, + { 0x2104, 71318 }, + { 0x2105, 71323 }, + { 0x2106, 71328 }, + { 0x2107, 71333 }, + { 0x2108, 71338 }, + { 0x2109, 71343 }, + { 0x210A, 71348 }, + { 0x210B, 71353 }, + { 0x210C, 71358 }, + { 0x210D, 71363 }, + { 0x210E, 71368 }, + { 0x210F, 71373 }, + { 0x2110, 71378 }, + { 0x2111, 71383 }, + { 0x2112, 71388 }, + { 0x2113, 71393 }, + { 0x2114, 71398 }, + { 0x2115, 71403 }, + { 0x2116, 71258 }, + { 0x2117, 109042 }, + { 0x2118, 109046 }, + { 0x2119, 109074 }, + { 0x211A, 109066 }, + { 0x211B, 109054 }, + { 0x211C, 109058 }, + { 0x211D, 109078 }, + { 0x211E, 109062 }, + { 0x211F, 109070 }, + { 0x2120, 109050 }, + { 0x2121, 54744 }, + { 0x2122, 54752 }, + { 0x2123, 54776 }, + { 0x2124, 54760 }, + { 0x2125, 54756 }, + { 0x2126, 54748 }, + { 0x2127, 54772 }, + { 0x2128, 54768 }, + { 0x2129, 54764 }, + { 0x212A, 54780 }, + { 0x212B, 108882 }, + { 0x212C, 5665 }, + { 0x212D, 5097 }, + { 0x212E, 5603 }, + { 0x212F, 5063 }, + { 0x2130, 5227 }, + { 0x2131, 5057 }, + { 0x2132, 5221 }, + { 0x2133, 5051 }, + { 0x2134, 5659 }, + { 0x2135, 5091 }, + { 0x2136, 5653 }, + { 0x2137, 5085 }, + { 0x2138, 5175 }, + { 0x2139, 4851 }, + { 0x213A, 4806 }, + { 0x213B, 5012 }, + { 0x213C, 5169 }, + { 0x213D, 4836 }, + { 0x213E, 4791 }, + { 0x213F, 5006 }, + { 0x2140, 5118 }, + { 0x2141, 4719 }, + { 0x2142, 4674 }, + { 0x2143, 4990 }, + { 0x2144, 5105 }, + { 0x2145, 4704 }, + { 0x2146, 4659 }, + { 0x2147, 4977 }, + { 0x2148, 5627 }, + { 0x2149, 5888 }, + { 0x214A, 4666 }, + { 0x214B, 4798 }, + { 0x214C, 5867 }, + { 0x214D, 4843 }, + { 0x214E, 4711 }, + { 0x214F, 5073 }, + { 0x2150, 5621 }, + { 0x2151, 5881 }, + { 0x2152, 4651 }, + { 0x2153, 4783 }, + { 0x2154, 5860 }, + { 0x2155, 4828 }, + { 0x2156, 4696 }, + { 0x2157, 5067 }, + { 0x2158, 5181 }, + { 0x2159, 4933 }, + { 0x215A, 5716 }, + { 0x215B, 4858 }, + { 0x215C, 4813 }, + { 0x215D, 5740 }, + { 0x215E, 4957 }, + { 0x215F, 5018 }, + { 0x2160, 5124 }, + { 0x2161, 4925 }, + { 0x2162, 5708 }, + { 0x2163, 4726 }, + { 0x2164, 4681 }, + { 0x2165, 5732 }, + { 0x2166, 4949 }, + { 0x2167, 4996 }, + { 0x2168, 5647 }, + { 0x2169, 4941 }, + { 0x216A, 5724 }, + { 0x216B, 5895 }, + { 0x216C, 4643 }, + { 0x216D, 4775 }, + { 0x216E, 5874 }, + { 0x216F, 4907 }, + { 0x2170, 5690 }, + { 0x2171, 4916 }, + { 0x2172, 5699 }, + { 0x2173, 4820 }, + { 0x2174, 4688 }, + { 0x2175, 5748 }, + { 0x2176, 4965 }, + { 0x2177, 5079 }, + { 0x2178, 5215 }, + { 0x2179, 5045 }, + { 0x217A, 5209 }, + { 0x217B, 5039 }, + { 0x217C, 5856 }, + { 0x217D, 5834 }, + { 0x217E, 4893 }, + { 0x217F, 4872 }, + { 0x2180, 5780 }, + { 0x2181, 4886 }, + { 0x2182, 4865 }, + { 0x2183, 5774 }, + { 0x2184, 4761 }, + { 0x2185, 4740 }, + { 0x2186, 5762 }, + { 0x2187, 4754 }, + { 0x2188, 4733 }, + { 0x2189, 5756 }, + { 0x218A, 5930 }, + { 0x218B, 5909 }, + { 0x218C, 5844 }, + { 0x218D, 5923 }, + { 0x218E, 5902 }, + { 0x218F, 5838 }, + { 0x2190, 4900 }, + { 0x2191, 4879 }, + { 0x2192, 5786 }, + { 0x2193, 4768 }, + { 0x2194, 4747 }, + { 0x2195, 5768 }, + { 0x2196, 5937 }, + { 0x2197, 5916 }, + { 0x2198, 5850 }, + { 0x2199, 5151 }, + { 0x219A, 5144 }, + { 0x219B, 5130 }, + { 0x219C, 5137 }, + { 0x219D, 5337 }, + { 0x219E, 5262 }, + { 0x219F, 5233 }, + { 0x21A0, 5187 }, + { 0x21A1, 5101 }, + { 0x21A2, 5198 }, + { 0x21A3, 5165 }, + { 0x21A4, 5024 }, + { 0x21A5, 4973 }, + { 0x21A6, 5035 }, + { 0x21A7, 5002 }, + { 0x21A8, 5191 }, + { 0x21A9, 5111 }, + { 0x21AA, 5028 }, + { 0x21AB, 4983 }, + { 0x21AC, 42517 }, + { 0x21AD, 36652 }, + { 0x21AE, 36656 }, + { 0x21AF, 37172 }, + { 0x21B0, 36677 }, + { 0x21B1, 36660 }, + { 0x21B2, 37183 }, + { 0x21B3, 37168 }, + { 0x21B4, 14152 }, + { 0x21B5, 14852 }, + { 0x21B6, 14869 }, + { 0x21B7, 14631 }, + { 0x21B8, 14643 }, + { 0x21B9, 14865 }, + { 0x21BA, 14592 }, + { 0x21BB, 14588 }, + { 0x21BC, 40342 }, + { 0x21BD, 36379 }, + { 0x21BE, 63418 }, + { 0x21BF, 13814 }, + { 0x21C0, 42499 }, + { 0x21C1, 40312 }, + { 0x21C2, 110306 }, + { 0x21C3, 110309 }, + { 0x21C4, 110312 }, + { 0x21C5, 110315 }, + { 0x21C6, 110324 }, + { 0x21C7, 110330 }, + { 0x21C8, 110339 }, + { 0x21C9, 110348 }, + { 0x21CA, 110351 }, + { 0x21CB, 110357 }, + { 0x21CC, 21474 }, + { 0x21CD, 43721 }, + { 0x21CE, 43753 }, + { 0x21CF, 43784 }, + { 0x21D0, 65391 }, + { 0x21D1, 65383 }, + { 0x21D2, 65395 }, + { 0x21D3, 65343 }, + { 0x21D4, 65358 }, + { 0x21D5, 65378 }, + { 0x21D6, 21309 }, + { 0x21D7, 43642 }, + { 0x21D8, 21582 }, + { 0x21D9, 43889 }, + { 0x21DA, 21566 }, + { 0x21DB, 43878 }, + { 0x21DC, 21667 }, + { 0x21DD, 43952 }, + { 0x21DE, 21617 }, + { 0x21DF, 43912 }, + { 0x21E0, 21609 }, + { 0x21E1, 43905 }, + { 0x21E2, 21690 }, + { 0x21E3, 43964 }, + { 0x21E4, 21669 }, + { 0x21E5, 43954 }, + { 0x21E6, 21684 }, + { 0x21E7, 43958 }, + { 0x21E8, 21633 }, + { 0x21E9, 43939 }, + { 0x21EA, 21625 }, + { 0x21EB, 43935 }, + { 0x21EC, 21659 }, + { 0x21ED, 43949 }, + { 0x21EE, 21641 }, + { 0x21EF, 43942 }, + { 0x21F0, 21656 }, + { 0x21F1, 43946 }, + { 0x21F2, 21486 }, + { 0x21F3, 43796 }, + { 0x21F4, 43817 }, + { 0x21F5, 73273 }, + { 0x21F6, 74308 }, + { 0x21F7, 43653 }, + { 0x21F8, 54658 }, + { 0x21F9, 53421 }, + { 0x21FA, 84266 }, + { 0x21FB, 21341 }, + { 0x21FC, 53388 }, + { 0x21FD, 53398 }, + { 0x21FE, 53393 }, + { 0x21FF, 53410 }, + { 0x2200, 53415 }, + { 0x2201, 53372 }, + { 0x2202, 14639 }, + { 0x2203, 40338 }, + { 0x2204, 73898 }, + { 0x2205, 73895 }, + { 0x2206, 42547 }, + { 0x2207, 36698 }, + { 0x2208, 42754 }, + { 0x2209, 42966 }, + { 0x220A, 37117 }, + { 0x220B, 36890 }, + { 0x220C, 42540 }, + { 0x220D, 36691 }, + { 0x220E, 21282 }, + { 0x220F, 21278 }, + { 0x2210, 21327 }, + { 0x2211, 21331 }, + { 0x2212, 43651 }, + { 0x2213, 65319 }, + { 0x2214, 65338 }, + { 0x2215, 65351 }, + { 0x2216, 65331 }, + { 0x2217, 43758 }, + { 0x2218, 43915 }, + { 0x2219, 137747 }, + { 0x221A, 137753 }, + { 0x221B, 28769 }, + { 0x221C, 43735 }, + { 0x221D, 43723 }, + { 0x221E, 43729 }, + { 0x221F, 43741 }, + { 0x2220, 43682 }, + { 0x2221, 43670 }, + { 0x2222, 43676 }, + { 0x2223, 43688 }, + { 0x2224, 42772 }, + { 0x2225, 42994 }, + { 0x2226, 36913 }, + { 0x2227, 43709 }, + { 0x2228, 21426 }, + { 0x2229, 43705 }, + { 0x222A, 21414 }, + { 0x222B, 37150 }, + { 0x222C, 20999 }, + { 0x222D, 22479 }, + { 0x222E, 111266 }, + { 0x222F, 80201 }, + { 0x2230, 22499 }, + { 0x2231, 21038 }, + { 0x2232, 43404 }, + { 0x2233, 126263 }, + { 0x2234, 143504 }, + { 0x2235, 10575 }, + { 0x2236, 114374 }, + { 0x2237, 129787 }, + { 0x2238, 133148 }, + { 0x2239, 132100 }, + { 0x223A, 21584 }, + { 0x223B, 43891 }, + { 0x223C, 52337 }, + { 0x223D, 52354 }, + { 0x223E, 52339 }, + { 0x223F, 78759 }, + { 0x2240, 111270 }, + { 0x2241, 6600 }, + { 0x2242, 43636 }, + { 0x2243, 21299 }, + { 0x2244, 110612 }, + { 0x2245, 110577 }, + { 0x2246, 21026 }, + { 0x2247, 21286 }, + { 0x2248, 43392 }, + { 0x2249, 43316 }, + { 0x224A, 43627 }, + { 0x224B, 43357 }, + { 0x224C, 41261 }, + { 0x224D, 71177 }, + { 0x224E, 134504 }, + { 0x224F, 114696 }, + { 0x2250, 84267 }, + { 0x2251, 13413 }, + { 0x2252, 109674 }, + { 0x2253, 5966 }, + { 0x2254, 22505 }, + { 0x2255, 22508 }, + { 0x2256, 16982 }, + { 0x2257, 23306 }, + { 0x2258, 4251 }, + { 0x2259, 55333 }, + { 0x225A, 40242 }, + { 0x225B, 13191 }, + { 0x225C, 82585 }, + { 0x225D, 82573 }, + { 0x225E, 82570 }, + { 0x225F, 82588 }, + { 0x2260, 82576 }, + { 0x2261, 82582 }, + { 0x2262, 82591 }, + { 0x2263, 82579 }, + { 0x2264, 43313 }, + { 0x2265, 43855 }, + { 0x2266, 43839 }, + { 0x2267, 21525 }, + { 0x2268, 43329 }, + { 0x2269, 23320 }, + { 0x226A, 14505 }, + { 0x226B, 75231 }, + { 0x226C, 54927 }, + { 0x226D, 23149 }, + { 0x226E, 15360 }, + { 0x226F, 73915 }, + { 0x2270, 64847 }, + { 0x2271, 69006 }, + { 0x2272, 77469 }, + { 0x2273, 40254 }, + { 0x2274, 17961 }, + { 0x2275, 68174 }, + { 0x2276, 54983 }, + { 0x2277, 52984 }, + { 0x2278, 6937 }, + { 0x2279, 43296 }, + { 0x227A, 36328 }, + { 0x227B, 110600 }, + { 0x227C, 134508 }, + { 0x227D, 115954 }, + { 0x227E, 83013 }, + { 0x227F, 64568 }, + { 0x2280, 43421 }, + { 0x2281, 43472 }, + { 0x2282, 43455 }, + { 0x2283, 43489 }, + { 0x2284, 43506 }, + { 0x2285, 43438 }, + { 0x2286, 21061 }, + { 0x2287, 21112 }, + { 0x2288, 21095 }, + { 0x2289, 21129 }, + { 0x228A, 21146 }, + { 0x228B, 21078 }, + { 0x228C, 21322 }, + { 0x228D, 43600 }, + { 0x228E, 43802 }, + { 0x228F, 21003 }, + { 0x2290, 43648 }, + { 0x2291, 21241 }, + { 0x2292, 21492 }, + { 0x2293, 43348 }, + { 0x2294, 6598 }, + { 0x2295, 78624 }, + { 0x2296, 54854 }, + { 0x2297, 52383 }, + { 0x2298, 52390 }, + { 0x2299, 38469 }, + { 0x229A, 38475 }, + { 0x229B, 38472 }, + { 0x229C, 17534 }, + { 0x229D, 13910 }, + { 0x229E, 128797 }, + { 0x229F, 127655 }, + { 0x22A0, 127660 }, + { 0x22A1, 127665 }, + { 0x22A2, 127670 }, + { 0x22A3, 127675 }, + { 0x22A4, 127680 }, + { 0x22A5, 127685 }, + { 0x22A6, 127690 }, + { 0x22A7, 21589 }, + { 0x22A8, 110372 }, + { 0x22A9, 144940 }, + { 0x22AA, 127639 }, + { 0x22AB, 133118 }, + { 0x22AC, 6532 }, + { 0x22AD, 6534 }, + { 0x22AE, 6536 }, + { 0x22AF, 6538 }, + { 0x22B0, 6540 }, + { 0x22B1, 6542 }, + { 0x22B2, 43655 }, + { 0x22B3, 43660 }, + { 0x22B4, 21358 }, + { 0x22B5, 21347 }, + { 0x22B6, 108849 }, + { 0x22B7, 108846 }, + { 0x22B8, 54329 }, + { 0x22B9, 54309 }, + { 0x22BA, 54313 }, + { 0x22BB, 54325 }, + { 0x22BC, 43366 }, + { 0x22BD, 21011 }, + { 0x22BE, 55330 }, + { 0x22BF, 44208 }, + { 0x22C0, 72262 }, + { 0x22C1, 41639 }, + { 0x22C2, 64848 }, + { 0x22C3, 69876 }, + { 0x22C4, 54948 }, + { 0x22C5, 14164 }, + { 0x22C6, 41636 }, + { 0x22C7, 13414 }, + { 0x22C8, 138383 }, + { 0x22C9, 109845 }, + { 0x22CA, 42347 }, + { 0x22CB, 42343 }, + { 0x22CC, 82940 }, + { 0x22CD, 14203 }, + { 0x22CE, 73007 }, + { 0x22CF, 73004 }, + { 0x22D0, 133858 }, + { 0x22D1, 15356 }, + { 0x22D2, 15370 }, + { 0x22D3, 15362 }, + { 0x22D4, 111395 }, + { 0x22D5, 131663 }, + { 0x22D6, 63434 }, + { 0x22D7, 63394 }, + { 0x22D8, 63420 }, + { 0x22D9, 106541 }, + { 0x22DA, 73001 }, + { 0x22DB, 128800 }, + { 0x22DC, 53494 }, + { 0x22DD, 73286 }, + { 0x22DE, 63856 }, + { 0x22DF, 22370 }, + { 0x22E0, 64510 }, + { 0x22E1, 14212 }, + { 0x22E2, 43291 }, + { 0x22E3, 53369 }, + { 0x22E4, 21035 }, + { 0x22E5, 78773 }, + { 0x22E6, 134512 }, + { 0x22E7, 110371 }, + { 0x22E8, 144894 }, + { 0x22E9, 64938 }, + { 0x22EA, 83921 }, + { 0x22EB, 80897 }, + { 0x22EC, 43847 }, + { 0x22ED, 43850 }, + { 0x22EE, 21539 }, + { 0x22EF, 21542 }, + { 0x22F0, 80202 }, + { 0x22F1, 10579 }, + { 0x22F2, 16667 }, + { 0x22F3, 21528 }, + { 0x22F4, 81394 }, + { 0x22F5, 68972 }, + { 0x22F6, 68929 }, + { 0x22F7, 43798 }, + { 0x22F8, 87643 }, + { 0x22F9, 89733 }, + { 0x22FA, 127533 }, + { 0x22FB, 16598 }, + { 0x22FC, 5949 }, + { 0x22FD, 57528 }, + { 0x22FE, 71889 }, + { 0x22FF, 53142 }, + { 0x2300, 95 }, + { 0x2301, 112606 }, + { 0x2302, 21530 }, + { 0x2303, 43842 }, + { 0x2304, 21022 }, + { 0x2305, 43388 }, + { 0x2306, 23145 }, + { 0x2307, 26781 }, + { 0x2308, 14911 }, + { 0x2309, 81112 }, + { 0x230A, 73251 }, + { 0x230B, 21325 }, + { 0x230C, 132221 }, + { 0x230D, 132224 }, + { 0x230E, 138034 }, + { 0x230F, 26795 }, + { 0x2310, 127638 }, + { 0x2311, 143489 }, + { 0x2312, 133899 }, + { 0x2313, 105546 }, + { 0x2314, 21235 }, + { 0x2315, 64909 }, + { 0x2316, 53370 }, + { 0x2317, 53136 }, + { 0x2318, 105342 }, + { 0x2319, 14168 }, + { 0x231A, 14165 }, + { 0x231B, 6989 }, + { 0x231C, 108858 }, + { 0x231D, 111267 }, + { 0x231E, 103463 }, + { 0x231F, 14098 }, + { 0x2320, 23308 }, + { 0x2321, 110594 }, + { 0x2322, 65276 }, + { 0x2323, 41259 }, + { 0x2324, 6607 }, + { 0x2325, 64525 }, + { 0x2326, 17006 }, + { 0x2327, 105553 }, + { 0x2328, 125332 }, + { 0x2329, 14141 }, + { 0x232A, 6522 }, + { 0x232B, 43368 }, + { 0x232C, 21471 }, + { 0x232D, 42780 }, + { 0x232E, 21553 }, + { 0x232F, 36933 }, + { 0x2330, 43864 }, + { 0x2331, 43603 }, + { 0x2332, 128523 }, + { 0x2333, 17001 }, + { 0x2334, 83004 }, + { 0x2335, 101778 }, + { 0x2336, 64629 }, + { 0x2337, 64631 }, + { 0x2338, 82937 }, + { 0x2339, 82949 }, + { 0x233A, 37059 }, + { 0x233B, 64514 }, + { 0x233C, 42911 }, + { 0x233D, 43325 }, + { 0x233E, 20997 }, + { 0x233F, 22387 }, + { 0x2340, 26658 }, + { 0x2341, 144815 }, + { 0x2342, 26981 }, + { 0x2343, 52335 }, + { 0x2344, 26785 }, + { 0x2345, 109709 }, + { 0x2346, 26686 }, + { 0x2347, 16545 }, + { 0x2348, 26606 }, + { 0x2349, 28797 }, + { 0x234A, 110605 }, + { 0x234B, 109712 }, + { 0x234C, 74586 }, + { 0x234D, 16979 }, + { 0x234E, 14136 }, + { 0x234F, 14133 }, + { 0x2350, 26602 }, + { 0x2351, 14130 }, + { 0x2352, 21013 }, + { 0x2353, 43379 }, + { 0x2354, 110678 }, + { 0x2355, 65610 }, + { 0x2356, 71542 }, + { 0x2357, 16541 }, + { 0x2358, 21337 }, + { 0x2359, 109676 }, + { 0x235A, 26888 }, + { 0x235B, 110240 }, + { 0x235C, 110602 }, + { 0x235D, 26878 }, + { 0x235E, 16548 }, + { 0x235F, 23167 }, + { 0x2360, 23170 }, + { 0x2361, 23174 }, + { 0x2362, 10555 }, + { 0x2363, 23178 }, + { 0x2364, 26675 }, + { 0x2365, 68998 }, + { 0x2366, 80061 }, + { 0x2367, 144909 }, + { 0x2368, 16551 }, + { 0x2369, 27014 }, + { 0x236A, 10563 }, + { 0x236B, 21545 }, + { 0x236C, 43853 }, + { 0x236D, 23183 }, + { 0x236E, 71207 }, + { 0x236F, 27017 }, + { 0x2370, 128206 }, + { 0x2371, 42380 }, + { 0x2372, 26855 }, + { 0x2373, 80671 }, + { 0x2374, 26863 }, + { 0x2375, 144807 }, + { 0x2376, 23188 }, + { 0x2377, 26681 }, + { 0x2378, 22511 }, + { 0x2379, 110609 }, + { 0x237A, 109103 }, + { 0x237B, 37163 }, + { 0x237C, 43002 }, + { 0x237D, 37145 }, + { 0x237E, 42989 }, + { 0x237F, 21549 }, + { 0x2380, 43860 }, + { 0x2381, 43901 }, + { 0x2382, 21500 }, + { 0x2383, 26947 }, + { 0x2384, 36396 }, + { 0x2385, 63442 }, + { 0x2386, 26892 }, + { 0x2387, 26838 }, + { 0x2388, 26832 }, + { 0x2389, 26817 }, + { 0x238A, 26811 }, + { 0x238B, 26577 }, + { 0x238C, 26570 }, + { 0x238D, 54265 }, + { 0x238E, 26951 }, + { 0x238F, 26689 }, + { 0x2390, 26641 }, + { 0x2391, 78683 }, + { 0x2392, 54946 }, + { 0x2393, 78699 }, + { 0x2394, 63390 }, + { 0x2395, 63414 }, + { 0x2396, 63445 }, + { 0x2397, 63450 }, + { 0x2398, 63458 }, + { 0x2399, 63463 }, + { 0x239A, 26975 }, + { 0x239B, 26989 }, + { 0x239C, 26970 }, + { 0x239D, 26984 }, + { 0x239E, 36355 }, + { 0x239F, 36373 }, + { 0x23A0, 63385 }, + { 0x23A1, 63409 }, + { 0x23A2, 72884 }, + { 0x23A3, 72894 }, + { 0x23A4, 72924 }, + { 0x23A5, 72904 }, + { 0x23A6, 72899 }, + { 0x23A7, 72889 }, + { 0x23A8, 72919 }, + { 0x23A9, 72914 }, + { 0x23AA, 72909 }, + { 0x23AB, 72929 }, + { 0x23AC, 72829 }, + { 0x23AD, 72839 }, + { 0x23AE, 72874 }, + { 0x23AF, 72849 }, + { 0x23B0, 72844 }, + { 0x23B1, 72834 }, + { 0x23B2, 72869 }, + { 0x23B3, 72864 }, + { 0x23B4, 72854 }, + { 0x23B5, 72879 }, + { 0x23B6, 72934 }, + { 0x23B7, 72946 }, + { 0x23B8, 72988 }, + { 0x23B9, 72958 }, + { 0x23BA, 72952 }, + { 0x23BB, 72940 }, + { 0x23BC, 72982 }, + { 0x23BD, 72976 }, + { 0x23BE, 72964 }, + { 0x23BF, 72994 }, + { 0x23C0, 26958 }, + { 0x23C1, 26615 }, + { 0x23C2, 26706 }, + { 0x23C3, 26880 }, + { 0x23C4, 26735 }, + { 0x23C5, 26927 }, + { 0x23C6, 26709 }, + { 0x23C7, 89772 }, + { 0x23C8, 26962 }, + { 0x23C9, 144911 }, + { 0x23CA, 27021 }, + { 0x23CB, 54287 }, + { 0x23CC, 26803 }, + { 0x23CD, 21596 }, + { 0x23CE, 81371 }, + { 0x23CF, 81390 }, + { 0x23D0, 21602 }, + { 0x23D1, 26651 }, + { 0x23D2, 26644 }, + { 0x23D3, 41631 }, + { 0x23D4, 27009 }, + { 0x23D5, 143492 }, + { 0x23D6, 133902 }, + { 0x23D7, 133125 }, + { 0x23D8, 138387 }, + { 0x23D9, 26700 }, + { 0x23DA, 26761 }, + { 0x23DB, 77657 }, + { 0x23DC, 22531 }, + { 0x23DD, 77669 }, + { 0x23DE, 71270 }, + { 0x23DF, 144914 }, + { 0x23E0, 144899 }, + { 0x23E1, 144903 }, + { 0x23E2, 144895 }, + { 0x23E3, 27000 }, + { 0x23E4, 27005 }, + { 0x23E5, 26995 }, + { 0x23E6, 144906 }, + { 0x23E7, 27025 }, + { 0x23E8, 143505 }, + { 0x23E9, 26966 }, + { 0x23EA, 143981 }, + { 0x23EB, 54697 }, + { 0x23EC, 42374 }, + { 0x23ED, 43866 }, + { 0x23EE, 144523 }, + { 0x23EF, 16557 }, + { 0x23F0, 16569 }, + { 0x23F1, 15021 }, + { 0x23F2, 40657 }, + { 0x23F3, 492 }, + { 0x23F4, 78667 }, + { 0x23F5, 110822 }, + { 0x23F6, 111278 }, + { 0x23F7, 140616 }, + { 0x23F8, 15305 }, + { 0x23F9, 140783 }, + { 0x23FA, 81109 }, + { 0x23FB, 81106 }, + { 0x23FC, 43805 }, + { 0x23FD, 4259 }, + { 0x23FE, 73172 }, + { 0x23FF, 37054 }, + { 0x2400, 42697 }, + { 0x2401, 14781 }, + { 0x2402, 40475 }, + { 0x2403, 14154 }, + { 0x2404, 28372 }, + { 0x2405, 28418 }, + { 0x2406, 14540 }, + { 0x2407, 14536 }, + { 0x2408, 15019 }, + { 0x2409, 15302 }, + { 0x240A, 15290 }, + { 0x240B, 559 }, + { 0x240C, 74309 }, + { 0x240D, 43920 }, + { 0x240E, 43923 }, + { 0x240F, 43929 }, + { 0x2410, 43764 }, + { 0x2411, 43769 }, + { 0x2412, 140125 }, + { 0x2413, 140149 }, + { 0x2414, 140121 }, + { 0x2415, 140145 }, + { 0x2416, 140136 }, + { 0x2417, 140160 }, + { 0x2418, 140130 }, + { 0x2419, 140154 }, + { 0x241A, 140141 }, + { 0x241B, 140165 }, + { 0x241C, 82836 }, + { 0x241D, 124277 }, + { 0x241E, 143522 }, + { 0x241F, 116205 }, + { 0x2420, 40441 }, + { 0x2421, 15307 }, + { 0x2422, 15329 }, + { 0x2423, 15293 }, + { 0x2424, 15315 }, + { 0x2425, 15337 }, + { 0x2426, 15297 }, + { 0x2427, 15310 }, + { 0x2428, 15332 }, + { 0x2429, 15319 }, + { 0x242A, 15341 }, + { 0x242B, 15347 }, + { 0x242C, 70406 }, + { 0x242D, 70409 }, + { 0x242E, 70412 }, + { 0x242F, 70433 }, + { 0x2430, 70415 }, + { 0x2431, 70436 }, + { 0x2432, 70454 }, + { 0x2433, 70517 }, + { 0x2434, 70418 }, + { 0x2435, 70439 }, + { 0x2436, 70457 }, + { 0x2437, 70520 }, + { 0x2438, 70472 }, + { 0x2439, 70535 }, + { 0x243A, 70580 }, + { 0x243B, 70685 }, + { 0x243C, 70421 }, + { 0x243D, 70442 }, + { 0x243E, 70460 }, + { 0x243F, 70523 }, + { 0x2440, 70475 }, + { 0x2441, 70538 }, + { 0x2442, 70583 }, + { 0x2443, 70688 }, + { 0x2444, 70487 }, + { 0x2445, 70550 }, + { 0x2446, 70595 }, + { 0x2447, 70700 }, + { 0x2448, 70625 }, + { 0x2449, 70730 }, + { 0x244A, 70790 }, + { 0x244B, 70895 }, + { 0x244C, 70424 }, + { 0x244D, 70445 }, + { 0x244E, 70463 }, + { 0x244F, 70526 }, + { 0x2450, 70478 }, + { 0x2451, 70541 }, + { 0x2452, 70586 }, + { 0x2453, 70691 }, + { 0x2454, 70490 }, + { 0x2455, 70553 }, + { 0x2456, 70598 }, + { 0x2457, 70703 }, + { 0x2458, 70628 }, + { 0x2459, 70733 }, + { 0x245A, 70793 }, + { 0x245B, 70898 }, + { 0x245C, 70499 }, + { 0x245D, 70562 }, + { 0x245E, 70607 }, + { 0x245F, 70712 }, + { 0x2460, 70637 }, + { 0x2461, 70742 }, + { 0x2462, 70802 }, + { 0x2463, 70907 }, + { 0x2464, 70655 }, + { 0x2465, 70760 }, + { 0x2466, 70820 }, + { 0x2467, 70925 }, + { 0x2468, 70850 }, + { 0x2469, 70955 }, + { 0x246A, 71000 }, + { 0x246B, 71063 }, + { 0x246C, 70427 }, + { 0x246D, 70448 }, + { 0x246E, 70466 }, + { 0x246F, 70529 }, + { 0x2470, 70481 }, + { 0x2471, 70544 }, + { 0x2472, 70589 }, + { 0x2473, 70694 }, + { 0x2474, 70493 }, + { 0x2475, 70556 }, + { 0x2476, 70601 }, + { 0x2477, 70706 }, + { 0x2478, 70631 }, + { 0x2479, 70736 }, + { 0x247A, 70796 }, + { 0x247B, 70901 }, + { 0x247C, 70502 }, + { 0x247D, 70565 }, + { 0x247E, 70610 }, + { 0x247F, 70715 }, + { 0x2480, 70640 }, + { 0x2481, 70745 }, + { 0x2482, 70805 }, + { 0x2483, 70910 }, + { 0x2484, 70658 }, + { 0x2485, 70763 }, + { 0x2486, 70823 }, + { 0x2487, 70928 }, + { 0x2488, 70853 }, + { 0x2489, 70958 }, + { 0x248A, 71003 }, + { 0x248B, 71066 }, + { 0x248C, 70508 }, + { 0x248D, 70571 }, + { 0x248E, 70616 }, + { 0x248F, 70721 }, + { 0x2490, 70646 }, + { 0x2491, 70751 }, + { 0x2492, 70811 }, + { 0x2493, 70916 }, + { 0x2494, 70664 }, + { 0x2495, 70769 }, + { 0x2496, 70829 }, + { 0x2497, 70934 }, + { 0x2498, 70859 }, + { 0x2499, 70964 }, + { 0x249A, 71009 }, + { 0x249B, 71072 }, + { 0x249C, 70673 }, + { 0x249D, 70778 }, + { 0x249E, 70838 }, + { 0x249F, 70943 }, + { 0x24A0, 70868 }, + { 0x24A1, 70973 }, + { 0x24A2, 71018 }, + { 0x24A3, 71081 }, + { 0x24A4, 70880 }, + { 0x24A5, 70985 }, + { 0x24A6, 71030 }, + { 0x24A7, 71093 }, + { 0x24A8, 71045 }, + { 0x24A9, 71108 }, + { 0x24AA, 71126 }, + { 0x24AB, 71147 }, + { 0x24AC, 70430 }, + { 0x24AD, 70451 }, + { 0x24AE, 70469 }, + { 0x24AF, 70532 }, + { 0x24B0, 70484 }, + { 0x24B1, 70547 }, + { 0x24B2, 70592 }, + { 0x24B3, 70697 }, + { 0x24B4, 70496 }, + { 0x24B5, 70559 }, + { 0x24B6, 70604 }, + { 0x24B7, 70709 }, + { 0x24B8, 70634 }, + { 0x24B9, 70739 }, + { 0x24BA, 70799 }, + { 0x24BB, 70904 }, + { 0x24BC, 70505 }, + { 0x24BD, 70568 }, + { 0x24BE, 70613 }, + { 0x24BF, 70718 }, + { 0x24C0, 70643 }, + { 0x24C1, 70748 }, + { 0x24C2, 70808 }, + { 0x24C3, 70913 }, + { 0x24C4, 70661 }, + { 0x24C5, 70766 }, + { 0x24C6, 70826 }, + { 0x24C7, 70931 }, + { 0x24C8, 70856 }, + { 0x24C9, 70961 }, + { 0x24CA, 71006 }, + { 0x24CB, 71069 }, + { 0x24CC, 70511 }, + { 0x24CD, 70574 }, + { 0x24CE, 70619 }, + { 0x24CF, 70724 }, + { 0x24D0, 70649 }, + { 0x24D1, 70754 }, + { 0x24D2, 70814 }, + { 0x24D3, 70919 }, + { 0x24D4, 70667 }, + { 0x24D5, 70772 }, + { 0x24D6, 70832 }, + { 0x24D7, 70937 }, + { 0x24D8, 70862 }, + { 0x24D9, 70967 }, + { 0x24DA, 71012 }, + { 0x24DB, 71075 }, + { 0x24DC, 70676 }, + { 0x24DD, 70781 }, + { 0x24DE, 70841 }, + { 0x24DF, 70946 }, + { 0x24E0, 70871 }, + { 0x24E1, 70976 }, + { 0x24E2, 71021 }, + { 0x24E3, 71084 }, + { 0x24E4, 70883 }, + { 0x24E5, 70988 }, + { 0x24E6, 71033 }, + { 0x24E7, 71096 }, + { 0x24E8, 71048 }, + { 0x24E9, 71111 }, + { 0x24EA, 71129 }, + { 0x24EB, 71150 }, + { 0x24EC, 70514 }, + { 0x24ED, 70577 }, + { 0x24EE, 70622 }, + { 0x24EF, 70727 }, + { 0x24F0, 70652 }, + { 0x24F1, 70757 }, + { 0x24F2, 70817 }, + { 0x24F3, 70922 }, + { 0x24F4, 70670 }, + { 0x24F5, 70775 }, + { 0x24F6, 70835 }, + { 0x24F7, 70940 }, + { 0x24F8, 70865 }, + { 0x24F9, 70970 }, + { 0x24FA, 71015 }, + { 0x24FB, 71078 }, + { 0x24FC, 70679 }, + { 0x24FD, 70784 }, + { 0x24FE, 70844 }, + { 0x24FF, 70949 }, + { 0x2500, 70874 }, + { 0x2501, 70979 }, + { 0x2502, 71024 }, + { 0x2503, 71087 }, + { 0x2504, 70886 }, + { 0x2505, 70991 }, + { 0x2506, 71036 }, + { 0x2507, 71099 }, + { 0x2508, 71051 }, + { 0x2509, 71114 }, + { 0x250A, 71132 }, + { 0x250B, 71153 }, + { 0x250C, 70682 }, + { 0x250D, 70787 }, + { 0x250E, 70847 }, + { 0x250F, 70952 }, + { 0x2510, 70877 }, + { 0x2511, 70982 }, + { 0x2512, 71027 }, + { 0x2513, 71090 }, + { 0x2514, 70889 }, + { 0x2515, 70994 }, + { 0x2516, 71039 }, + { 0x2517, 71102 }, + { 0x2518, 71054 }, + { 0x2519, 71117 }, + { 0x251A, 71135 }, + { 0x251B, 71156 }, + { 0x251C, 70892 }, + { 0x251D, 70997 }, + { 0x251E, 71042 }, + { 0x251F, 71105 }, + { 0x2520, 71057 }, + { 0x2521, 71120 }, + { 0x2522, 71138 }, + { 0x2523, 71159 }, + { 0x2524, 71060 }, + { 0x2525, 71123 }, + { 0x2526, 71141 }, + { 0x2527, 71162 }, + { 0x2528, 71144 }, + { 0x2529, 71165 }, + { 0x252A, 71168 }, + { 0x252B, 71171 }, + { 0x252C, 132665 }, + { 0x252D, 132652 }, + { 0x252E, 125833 }, + { 0x252F, 132489 }, + { 0x2530, 14833 }, + { 0x2531, 132625 }, + { 0x2532, 125823 }, + { 0x2533, 132479 }, + { 0x2534, 124147 }, + { 0x2535, 82670 }, + { 0x2536, 82767 }, + { 0x2537, 124205 }, + { 0x2538, 125816 }, + { 0x2539, 132472 }, + { 0x253A, 125847 }, + { 0x253B, 132503 }, + { 0x253C, 132671 }, + { 0x253D, 132357 }, + { 0x253E, 82611 }, + { 0x253F, 124083 }, + { 0x2540, 132322 }, + { 0x2541, 132314 }, + { 0x2542, 132630 }, + { 0x2543, 132644 }, + { 0x2544, 132635 }, + { 0x2545, 125961 }, + { 0x2546, 132617 }, + { 0x2547, 125839 }, + { 0x2548, 132495 }, + { 0x2549, 125616 }, + { 0x254A, 132252 }, + { 0x254B, 125634 }, + { 0x254C, 132270 }, + { 0x254D, 38620 }, + { 0x254E, 38541 }, + { 0x254F, 38652 }, + { 0x2550, 38562 }, + { 0x2551, 41516 }, + { 0x2552, 41582 }, + { 0x2553, 38640 }, + { 0x2554, 38550 }, + { 0x2555, 41504 }, + { 0x2556, 41570 }, + { 0x2557, 64832 }, + { 0x2558, 73265 }, + { 0x2559, 41521 }, + { 0x255A, 38574 }, + { 0x255B, 73259 }, + { 0x255C, 64826 }, + { 0x255D, 38567 }, + { 0x255E, 38657 }, + { 0x255F, 17520 }, + { 0x2560, 17987 }, + { 0x2561, 17993 }, + { 0x2562, 17968 }, + { 0x2563, 17974 }, + { 0x2564, 132228 }, + { 0x2565, 125583 }, + { 0x2566, 12071 }, + { 0x2567, 52408 }, + { 0x2568, 12065 }, + { 0x2569, 12075 }, + { 0x256A, 37158 }, + { 0x256B, 36928 }, + { 0x256C, 143518 }, + { 0x256D, 116201 }, + { 0x256E, 132393 }, + { 0x256F, 125747 }, + { 0x2570, 41248 }, + { 0x2571, 132305 }, + { 0x2572, 125669 }, + { 0x2573, 132423 }, + { 0x2574, 14809 }, + { 0x2575, 82845 }, + { 0x2576, 14607 }, + { 0x2577, 14614 }, + { 0x2578, 512 }, + { 0x2579, 505 }, + { 0x257A, 14600 }, + { 0x257B, 519 }, + { 0x257C, 14621 }, + { 0x257D, 498 }, + { 0x257E, 125859 }, + { 0x257F, 132515 }, + { 0x2580, 82806 }, + { 0x2581, 124247 }, + { 0x2582, 125903 }, + { 0x2583, 132559 }, + { 0x2584, 82770 }, + { 0x2585, 124211 }, + { 0x2586, 125866 }, + { 0x2587, 132522 }, + { 0x2588, 82813 }, + { 0x2589, 124254 }, + { 0x258A, 125910 }, + { 0x258B, 132566 }, + { 0x258C, 82777 }, + { 0x258D, 124218 }, + { 0x258E, 125881 }, + { 0x258F, 82784 }, + { 0x2590, 132548 }, + { 0x2591, 124236 }, + { 0x2592, 125892 }, + { 0x2593, 125917 }, + { 0x2594, 132537 }, + { 0x2595, 132573 }, + { 0x2596, 125873 }, + { 0x2597, 125928 }, + { 0x2598, 132529 }, + { 0x2599, 132584 }, + { 0x259A, 82795 }, + { 0x259B, 124225 }, + { 0x259C, 40548 }, + { 0x259D, 54911 }, + { 0x259E, 42413 }, + { 0x259F, 125753 }, + { 0x25A0, 132399 }, + { 0x25A1, 132404 }, + { 0x25A2, 126231 }, + { 0x25A3, 125785 }, + { 0x25A4, 138499 }, + { 0x25A5, 65678 }, + { 0x25A6, 125781 }, + { 0x25A7, 110807 }, + { 0x25A8, 14628 }, + { 0x25A9, 40320 }, + { 0x25AA, 554 }, + { 0x25AB, 13887 }, + { 0x25AC, 68898 }, + { 0x25AD, 31 }, + { 0x25AE, 34 }, + { 0x25AF, 14887 }, + { 0x25B0, 40513 }, + { 0x25B1, 14908 }, + { 0x25B2, 40534 }, + { 0x25B3, 21 }, + { 0x25B4, 42 }, + { 0x25B5, 26 }, + { 0x25B6, 47 }, + { 0x25B7, 14987 }, + { 0x25B8, 40616 }, + { 0x25B9, 14955 }, + { 0x25BA, 40592 }, + { 0x25BB, 14963 }, + { 0x25BC, 40584 }, + { 0x25BD, 14737 }, + { 0x25BE, 40422 }, + { 0x25BF, 14576 }, + { 0x25C0, 40304 }, + { 0x25C1, 54681 }, + { 0x25C2, 54710 }, + { 0x25C3, 14752 }, + { 0x25C4, 40446 }, + { 0x25C5, 54656 }, + { 0x25C6, 111407 }, + { 0x25C7, 106644 }, + { 0x25C8, 40427 }, + { 0x25C9, 106648 }, + { 0x25CA, 17952 }, + { 0x25CB, 17571 }, + { 0x25CC, 128217 }, + { 0x25CD, 128213 }, + { 0x25CE, 68927 }, + { 0x25CF, 110520 }, + { 0x25D0, 17956 }, + { 0x25D1, 110522 }, + { 0x25D2, 77675 }, + { 0x25D3, 77679 }, + { 0x25D4, 106560 }, + { 0x25D5, 106548 }, + { 0x25D6, 106584 }, + { 0x25D7, 106572 }, + { 0x25D8, 106620 }, + { 0x25D9, 106596 }, + { 0x25DA, 106632 }, + { 0x25DB, 106608 }, + { 0x25DC, 110528 }, + { 0x25DD, 23249 }, + { 0x25DE, 23243 }, + { 0x25DF, 23237 }, + { 0x25E0, 23231 }, + { 0x25E1, 53425 }, + { 0x25E2, 72046 }, + { 0x25E3, 72039 }, + { 0x25E4, 71883 }, + { 0x25E5, 72229 }, + { 0x25E6, 53433 }, + { 0x25E7, 53429 }, + { 0x25E8, 72237 }, + { 0x25E9, 564 }, + { 0x25EA, 71545 }, + { 0x25EB, 71548 }, + { 0x25EC, 72214 }, + { 0x25ED, 72224 }, + { 0x25EE, 53403 }, + { 0x25EF, 53380 }, + { 0x25F0, 81093 }, + { 0x25F1, 81102 }, + { 0x25F2, 81114 }, + { 0x25F3, 81083 }, + { 0x25F4, 81100 }, + { 0x25F5, 12252 }, + { 0x25F6, 111152 }, + { 0x25F7, 111165 }, + { 0x25F8, 9 }, + { 0x25F9, 111156 }, + { 0x25FA, 40671 }, + { 0x25FB, 15033 }, + { 0x25FC, 111283 }, + { 0x25FD, 52551 }, + { 0x25FE, 52556 }, + { 0x25FF, 21335 }, + { 0x2600, 42420 }, + { 0x2601, 42425 }, + { 0x2602, 43887 }, + { 0x2603, 21573 }, + { 0x2604, 15006 }, + { 0x2605, 40635 }, + { 0x2606, 14925 }, + { 0x2607, 40554 }, + { 0x2608, 131706 }, + { 0x2609, 12062 }, + { 0x260A, 105481 }, + { 0x260B, 138363 }, + { 0x260C, 65387 }, + { 0x260D, 125354 }, + { 0x260E, 79239 }, + { 0x260F, 54858 }, + { 0x2610, 54863 }, + { 0x2611, 125345 }, + { 0x2612, 54989 }, + { 0x2613, 144537 }, + { 0x2614, 143671 }, + { 0x2615, 143677 }, + { 0x2616, 21495 }, + { 0x2617, 21512 }, + { 0x2618, 43665 }, + { 0x2619, 21353 }, + { 0x261A, 138377 }, + { 0x261B, 138368 }, + { 0x261C, 138380 }, + { 0x261D, 138371 }, + { 0x261E, 138374 }, + { 0x261F, 138365 }, + { 0x2620, 143496 }, + { 0x2621, 78664 }, + { 0x2622, 80361 }, + { 0x2623, 78659 }, + { 0x2624, 4637 }, + { 0x2625, 4634 }, + { 0x2626, 54686 }, + { 0x2627, 68859 }, + { 0x2628, 143941 }, + { 0x2629, 144864 }, + { 0x262A, 17343 }, + { 0x262B, 15923 }, + { 0x262C, 38505 }, + { 0x262D, 38509 }, + { 0x262E, 38513 }, + { 0x262F, 38483 }, + { 0x2630, 38488 }, + { 0x2631, 38501 }, + { 0x2632, 38497 }, + { 0x2633, 12262 }, + { 0x2634, 12258 }, + { 0x2635, 38478 }, + { 0x2636, 63843 }, + { 0x2637, 128261 }, + { 0x2638, 127650 }, + { 0x2639, 54936 }, + { 0x263A, 105494 }, + { 0x263B, 105518 }, + { 0x263C, 133143 }, + { 0x263D, 143536 }, + { 0x263E, 15094 }, + { 0x263F, 15101 }, + { 0x2640, 15088 }, + { 0x2641, 105513 }, + { 0x2642, 132212 }, + { 0x2643, 105504 }, + { 0x2644, 105487 }, + { 0x2645, 105510 }, + { 0x2646, 105491 }, + { 0x2647, 105498 }, + { 0x2648, 105501 }, + { 0x2649, 14211 }, + { 0x264A, 28421 }, + { 0x264B, 64 }, + { 0x264C, 56 }, + { 0x264D, 60 }, + { 0x264E, 16635 }, + { 0x264F, 16656 }, + { 0x2650, 16641 }, + { 0x2651, 16625 }, + { 0x2652, 16646 }, + { 0x2653, 16651 }, + { 0x2654, 16630 }, + { 0x2655, 38431 }, + { 0x2656, 38426 }, + { 0x2657, 38441 }, + { 0x2658, 38436 }, + { 0x2659, 16609 }, + { 0x265A, 16615 }, + { 0x265B, 69007 }, + { 0x265C, 144840 }, + { 0x265D, 144845 }, + { 0x265E, 133077 }, + { 0x265F, 41476 }, + { 0x2660, 144819 }, + { 0x2661, 144825 }, + { 0x2662, 72231 }, + { 0x2663, 144831 }, + { 0x2664, 71892 }, + { 0x2665, 16621 }, + { 0x2666, 38422 }, + { 0x2667, 144836 }, + { 0x2668, 105524 }, + { 0x2669, 127699 }, + { 0x266A, 68 }, + { 0x266B, 137986 }, + { 0x266C, 138537 }, + { 0x266D, 42444 }, + { 0x266E, 42452 }, + { 0x266F, 138544 }, + { 0x2670, 138540 }, + { 0x2671, 42448 }, + { 0x2672, 42460 }, + { 0x2673, 138552 }, + { 0x2674, 42455 }, + { 0x2675, 138547 }, + { 0x2676, 42463 }, + { 0x2677, 138555 }, + { 0x2678, 53453 }, + { 0x2679, 53490 }, + { 0x267A, 54735 }, + { 0x267B, 54732 }, + { 0x267C, 53457 }, + { 0x267D, 74279 }, + { 0x267E, 74247 }, + { 0x267F, 54787 }, + { 0x2680, 54784 }, + { 0x2681, 12278 }, + { 0x2682, 12274 }, + { 0x2683, 80102 }, + { 0x2684, 80105 }, + { 0x2685, 74272 }, + { 0x2686, 74294 }, + { 0x2687, 74262 }, + { 0x2688, 74303 }, + { 0x2689, 74267 }, + { 0x268A, 74284 }, + { 0x268B, 74299 }, + { 0x268C, 74289 }, + { 0x268D, 41280 }, + { 0x268E, 74252 }, + { 0x268F, 74257 }, + { 0x2690, 52 }, + { 0x2691, 38 }, + { 0x2692, 54871 }, + { 0x2693, 125350 }, + { 0x2694, 68902 }, + { 0x2695, 68909 }, + { 0x2696, 42398 }, + { 0x2697, 42403 }, + { 0x2698, 79623 }, + { 0x2699, 117871 }, + { 0x269A, 54916 }, + { 0x269B, 44202 }, + { 0x269C, 143569 }, + { 0x269D, 54896 }, + { 0x269E, 16662 }, + { 0x269F, 54901 }, + { 0x26A0, 54694 }, + { 0x26A1, 12270 }, + { 0x26A2, 42370 }, + { 0x26A3, 54876 }, + { 0x26A4, 130322 }, + { 0x26A5, 126203 }, + { 0x26A6, 138465 }, + { 0x26A7, 126207 }, + { 0x26A8, 138469 }, + { 0x26A9, 126134 }, + { 0x26AA, 138396 }, + { 0x26AB, 126156 }, + { 0x26AC, 138418 }, + { 0x26AD, 126139 }, + { 0x26AE, 138401 }, + { 0x26AF, 126147 }, + { 0x26B0, 138409 }, + { 0x26B1, 126168 }, + { 0x26B2, 138433 }, + { 0x26B3, 126178 }, + { 0x26B4, 138440 }, + { 0x26B5, 126174 }, + { 0x26B6, 138436 }, + { 0x26B7, 126235 }, + { 0x26B8, 138503 }, + { 0x26B9, 126212 }, + { 0x26BA, 138474 }, + { 0x26BB, 126217 }, + { 0x26BC, 138479 }, + { 0x26BD, 126241 }, + { 0x26BE, 138493 }, + { 0x26BF, 126222 }, + { 0x26C0, 138484 }, + { 0x26C1, 80064 }, + { 0x26C2, 80077 }, + { 0x26C3, 80069 }, + { 0x26C4, 80082 }, + { 0x26C5, 133155 }, + { 0x26C6, 133160 }, + { 0x26C7, 133165 }, + { 0x26C8, 133171 }, + { 0x26C9, 79605 }, + { 0x26CA, 79608 }, + { 0x26CB, 79611 }, + { 0x26CC, 79617 }, + { 0x26CD, 54721 }, + { 0x26CE, 54729 }, + { 0x26CF, 54724 }, + { 0x26D0, 138528 }, + { 0x26D1, 138514 }, + { 0x26D2, 126252 }, + { 0x26D3, 138517 }, + { 0x26D4, 126256 }, + { 0x26D5, 138521 }, + { 0x26D6, 80108 }, + { 0x26D7, 60545 }, + { 0x26D8, 80110 }, + { 0x26D9, 60547 }, + { 0x26DA, 54886 }, + { 0x26DB, 110287 }, + { 0x26DC, 110737 }, + { 0x26DD, 110281 }, + { 0x26DE, 110731 }, + { 0x26DF, 110277 }, + { 0x26E0, 110727 }, + { 0x26E1, 110261 }, + { 0x26E2, 110711 }, + { 0x26E3, 110272 }, + { 0x26E4, 110722 }, + { 0x26E5, 110266 }, + { 0x26E6, 110716 }, + { 0x26E7, 54801 }, + { 0x26E8, 54806 }, + { 0x26E9, 65659 }, + { 0x26EA, 110788 }, + { 0x26EB, 65662 }, + { 0x26EC, 110791 }, + { 0x26ED, 65667 }, + { 0x26EE, 110796 }, + { 0x26EF, 65623 }, + { 0x26F0, 110752 }, + { 0x26F1, 65654 }, + { 0x26F2, 110783 }, + { 0x26F3, 65643 }, + { 0x26F4, 110772 }, + { 0x26F5, 65648 }, + { 0x26F6, 110777 }, + { 0x26F7, 65637 }, + { 0x26F8, 110766 }, + { 0x26F9, 65289 }, + { 0x26FA, 65458 }, + { 0x26FB, 53464 }, + { 0x26FC, 53481 }, + { 0x26FD, 53466 }, + { 0x26FE, 53483 }, + { 0x26FF, 65675 }, + { 0x2700, 110801 }, + { 0x2701, 65672 }, + { 0x2702, 110804 }, + { 0x2703, 110819 }, + { 0x2704, 110811 }, + { 0x2705, 73176 }, + { 0x2706, 127644 }, + { 0x2707, 137710 }, + { 0x2708, 73283 }, + { 0x2709, 132099 }, + { 0x270A, 41241 }, + { 0x270B, 41233 }, + { 0x270C, 41210 }, + { 0x270D, 144524 }, + { 0x270E, 111293 }, + { 0x270F, 54813 }, + { 0x2710, 111288 }, + { 0x2711, 54818 }, + { 0x2712, 15280 }, + { 0x2713, 41236 }, + { 0x2714, 41213 }, + { 0x2715, 41218 }, + { 0x2716, 54678 }, + { 0x2717, 54672 }, + { 0x2718, 54738 }, + { 0x2719, 110549 }, + { 0x271A, 13839 }, + { 0x271B, 111377 }, + { 0x271C, 111382 }, + { 0x271D, 13892 }, + { 0x271E, 109856 }, + { 0x271F, 109852 }, + { 0x2720, 68893 }, + { 0x2721, 68882 }, + { 0x2722, 68861 }, + { 0x2723, 68870 }, + { 0x2724, 68873 }, + { 0x2725, 133177 }, + { 0x2726, 133183 }, + { 0x2727, 68876 }, + { 0x2728, 28786 }, + { 0x2729, 54793 }, + { 0x272A, 43872 }, + { 0x272B, 38493 }, + { 0x272C, 38585 }, + { 0x272D, 38668 }, + { 0x272E, 41532 }, + { 0x272F, 41591 }, + { 0x2730, 14819 }, + { 0x2731, 125789 }, + { 0x2732, 82686 }, + { 0x2733, 124163 }, + { 0x2734, 38581 }, + { 0x2735, 38664 }, + { 0x2736, 41528 }, + { 0x2737, 41587 }, + { 0x2738, 14815 }, + { 0x2739, 534 }, + { 0x273A, 132292 }, + { 0x273B, 132287 }, + { 0x273C, 125656 }, + { 0x273D, 125651 }, + { 0x273E, 65314 }, + { 0x273F, 65373 }, + { 0x2740, 65366 }, + { 0x2741, 65324 }, + { 0x2742, 72804 }, + { 0x2743, 72809 }, + { 0x2744, 72799 }, + { 0x2745, 72814 }, + { 0x2746, 54662 }, + { 0x2747, 21275 }, + { 0x2748, 43613 }, + { 0x2749, 21049 }, + { 0x274A, 43406 }, + { 0x274B, 21547 }, + { 0x274C, 43858 }, + { 0x274D, 43829 }, + { 0x274E, 21510 }, + { 0x274F, 131680 }, + { 0x2750, 21244 }, + { 0x2751, 21429 }, + { 0x2752, 43712 }, + { 0x2753, 21432 }, + { 0x2754, 43715 }, + { 0x2755, 21312 }, + { 0x2756, 21315 }, + { 0x2757, 43645 }, + { 0x2758, 21593 }, + { 0x2759, 43898 }, + { 0x275A, 21563 }, + { 0x275B, 43875 }, + { 0x275C, 14742 }, + { 0x275D, 42361 }, + { 0x275E, 14747 }, + { 0x275F, 15325 }, + { 0x2760, 126009 }, + { 0x2761, 125996 }, + { 0x2762, 125969 }, + { 0x2763, 126015 }, + { 0x2764, 125711 }, + { 0x2765, 125686 }, + { 0x2766, 125678 }, + { 0x2767, 125974 }, + { 0x2768, 125988 }, + { 0x2769, 125979 }, + { 0x276A, 125777 }, + { 0x276B, 17515 }, + { 0x276C, 54906 }, + { 0x276D, 78642 }, + { 0x276E, 125770 }, + { 0x276F, 132431 }, + { 0x2770, 132427 }, + { 0x2771, 125958 }, + { 0x2772, 132614 }, + { 0x2773, 78648 }, + { 0x2774, 132416 }, + { 0x2775, 42408 }, + { 0x2776, 125758 }, + { 0x2777, 125764 }, + { 0x2778, 132410 }, + { 0x2779, 124371 }, + { 0x277A, 41244 }, + { 0x277B, 41254 }, + { 0x277C, 43702 }, + { 0x277D, 21306 }, + { 0x277E, 43639 }, + { 0x277F, 21687 }, + { 0x2780, 43961 }, + { 0x2781, 26694 }, + { 0x2782, 26610 }, + { 0x2783, 26790 }, + { 0x2784, 26788 }, + { 0x2785, 26858 }, + { 0x2786, 80090 }, + { 0x2787, 133130 }, + { 0x2788, 80096 }, + { 0x2789, 133136 }, + { 0x278A, 13453 }, + { 0x278B, 41225 }, + { 0x278C, 126048 }, + { 0x278D, 82860 }, + { 0x278E, 132700 }, + { 0x278F, 124295 }, + { 0x2790, 14848 }, + { 0x2791, 550 }, + { 0x2792, 38693 }, + { 0x2793, 38610 }, + { 0x2794, 41557 }, + { 0x2795, 41616 }, + { 0x2796, 126122 }, + { 0x2797, 82928 }, + { 0x2798, 132774 }, + { 0x2799, 124363 }, + { 0x279A, 116239 }, + { 0x279B, 143548 }, + { 0x279C, 126051 }, + { 0x279D, 82863 }, + { 0x279E, 132703 }, + { 0x279F, 124298 }, + { 0x27A0, 38697 }, + { 0x27A1, 38614 }, + { 0x27A2, 41561 }, + { 0x27A3, 41620 }, + { 0x27A4, 126103 }, + { 0x27A5, 82901 }, + { 0x27A6, 132755 }, + { 0x27A7, 124336 }, + { 0x27A8, 131640 }, + { 0x27A9, 111325 }, + { 0x27AA, 126056 }, + { 0x27AB, 82920 }, + { 0x27AC, 132708 }, + { 0x27AD, 124355 }, + { 0x27AE, 126126 }, + { 0x27AF, 82932 }, + { 0x27B0, 132778 }, + { 0x27B1, 124367 }, + { 0x27B2, 125792 }, + { 0x27B3, 82689 }, + { 0x27B4, 132438 }, + { 0x27B5, 124171 }, + { 0x27B6, 143553 }, + { 0x27B7, 143558 }, + { 0x27B8, 143543 }, + { 0x27B9, 143538 }, + { 0x27BA, 64785 }, + { 0x27BB, 64787 }, + { 0x27BC, 77642 }, + { 0x27BD, 77644 }, + { 0x27BE, 14121 }, + { 0x27BF, 132435 }, + { 0x27C0, 65916 }, + { 0x27C1, 81366 }, + { 0x27C2, 81385 }, + { 0x27C3, 81375 }, + { 0x27C4, 81380 }, + { 0x27C5, 21578 }, + { 0x27C6, 21535 }, + { 0x27C7, 21605 }, + { 0x27C8, 21569 }, + { 0x27C9, 124309 }, + { 0x27CA, 124316 }, + { 0x27CB, 82874 }, + { 0x27CC, 82881 }, + { 0x27CD, 126069 }, + { 0x27CE, 132721 }, + { 0x27CF, 126076 }, + { 0x27D0, 132728 }, + { 0x27D1, 21376 }, + { 0x27D2, 21382 }, + { 0x27D3, 21364 }, + { 0x27D4, 21370 }, + { 0x27D5, 21388 }, + { 0x27D6, 21400 }, + { 0x27D7, 21394 }, + { 0x27D8, 21406 }, + { 0x27D9, 64800 }, + { 0x27DA, 64804 }, + { 0x27DB, 64792 }, + { 0x27DC, 64796 }, + { 0x27DD, 64808 }, + { 0x27DE, 64816 }, + { 0x27DF, 64812 }, + { 0x27E0, 64820 }, + { 0x27E1, 82730 }, + { 0x27E2, 574 }, + { 0x27E3, 134491 }, + { 0x27E4, 134486 }, + { 0x27E5, 134483 }, + { 0x27E6, 52358 }, + { 0x27E7, 71191 }, + { 0x27E8, 71202 }, + { 0x27E9, 21483 }, + { 0x27EA, 21505 }, + { 0x27EB, 68933 }, + { 0x27EC, 131683 }, + { 0x27ED, 21517 }, + { 0x27EE, 21439 }, + { 0x27EF, 21448 }, + { 0x27F0, 21457 }, + { 0x27F1, 21466 }, + { 0x27F2, 77470 }, + { 0x27F3, 12087 }, + { 0x27F4, 52416 }, + { 0x27F5, 36345 }, + { 0x27F6, 78688 }, + { 0x27F7, 43375 }, + { 0x27F8, 78694 }, + { 0x27F9, 65582 }, + { 0x27FA, 137712 }, + { 0x27FB, 26543 }, + { 0x27FC, 40255 }, + { 0x27FD, 40264 }, + { 0x27FE, 40261 }, + { 0x27FF, 40258 }, + { 0x2800, 133096 }, + { 0x2801, 132211 }, + { 0x2802, 69883 }, + { 0x2803, 57547 }, + { 0x2804, 64564 }, + { 0x2805, 63855 }, + { 0x2806, 43401 }, + { 0x2807, 21488 }, + { 0x2808, 17454 }, + { 0x2809, 54264 }, + { 0x280A, 26547 }, + { 0x280B, 17568 }, + { 0x280C, 60543 }, + { 0x280D, 69882 }, + { 0x280E, 69873 }, + { 0x280F, 111708 }, + { 0x2810, 110244 }, + { 0x2811, 14635 }, + { 0x2812, 40334 }, + { 0x2813, 16985 }, + { 0x2814, 16990 }, + { 0x2815, 126003 }, + { 0x2816, 82851 }, + { 0x2817, 132659 }, + { 0x2818, 124286 }, + { 0x2819, 13913 }, + { 0x281A, 13916 }, + { 0x281B, 41207 }, + { 0x281C, 78755 }, + { 0x281D, 78735 }, + { 0x281E, 78743 }, + { 0x281F, 78739 }, + { 0x2820, 78747 }, + { 0x2821, 78751 }, + { 0x2822, 54891 }, + { 0x2823, 69004 }, + { 0x2824, 128187 }, + { 0x2825, 73010 }, + { 0x2826, 64512 }, + { 0x2827, 110533 }, + { 0x2828, 143691 }, + { 0x2829, 130551 }, + { 0x282A, 130580 }, + { 0x282B, 130604 }, + { 0x282C, 130685 }, + { 0x282D, 130620 }, + { 0x282E, 130656 }, + { 0x282F, 130727 }, + { 0x2830, 130624 }, + { 0x2831, 130676 }, + { 0x2832, 130592 }, + { 0x2833, 130689 }, + { 0x2834, 130535 }, + { 0x2835, 130664 }, + { 0x2836, 130596 }, + { 0x2837, 130710 }, + { 0x2838, 130714 }, + { 0x2839, 130632 }, + { 0x283A, 130560 }, + { 0x283B, 130668 }, + { 0x283C, 130636 }, + { 0x283D, 130640 }, + { 0x283E, 130672 }, + { 0x283F, 130576 }, + { 0x2840, 130628 }, + { 0x2841, 130588 }, + { 0x2842, 130564 }, + { 0x2843, 130539 }, + { 0x2844, 130600 }, + { 0x2845, 130572 }, + { 0x2846, 130660 }, + { 0x2847, 130568 }, + { 0x2848, 130616 }, + { 0x2849, 130612 }, + { 0x284A, 130608 }, + { 0x284B, 130722 }, + { 0x284C, 130547 }, + { 0x284D, 130644 }, + { 0x284E, 130649 }, + { 0x284F, 130543 }, + { 0x2850, 130700 }, + { 0x2851, 130555 }, + { 0x2852, 130694 }, + { 0x2853, 130584 }, + { 0x2854, 130706 }, + { 0x2855, 130718 }, + { 0x2856, 130736 }, + { 0x2857, 130731 }, + { 0x2858, 130680 }, + { 0x2859, 130345 }, + { 0x285A, 130374 }, + { 0x285B, 130398 }, + { 0x285C, 130479 }, + { 0x285D, 130414 }, + { 0x285E, 130450 }, + { 0x285F, 130521 }, + { 0x2860, 130418 }, + { 0x2861, 130470 }, + { 0x2862, 130386 }, + { 0x2863, 130483 }, + { 0x2864, 130329 }, + { 0x2865, 130458 }, + { 0x2866, 130390 }, + { 0x2867, 130504 }, + { 0x2868, 130508 }, + { 0x2869, 130426 }, + { 0x286A, 130354 }, + { 0x286B, 130462 }, + { 0x286C, 130430 }, + { 0x286D, 130434 }, + { 0x286E, 130466 }, + { 0x286F, 130370 }, + { 0x2870, 130422 }, + { 0x2871, 130382 }, + { 0x2872, 130358 }, + { 0x2873, 130333 }, + { 0x2874, 130394 }, + { 0x2875, 130366 }, + { 0x2876, 130454 }, + { 0x2877, 130362 }, + { 0x2878, 130410 }, + { 0x2879, 130406 }, + { 0x287A, 130402 }, + { 0x287B, 130516 }, + { 0x287C, 130341 }, + { 0x287D, 130438 }, + { 0x287E, 130443 }, + { 0x287F, 130337 }, + { 0x2880, 130494 }, + { 0x2881, 130349 }, + { 0x2882, 130488 }, + { 0x2883, 130378 }, + { 0x2884, 130500 }, + { 0x2885, 130512 }, + { 0x2886, 130530 }, + { 0x2887, 130525 }, + { 0x2888, 130474 }, + { 0x2889, 34428 }, + { 0x288A, 30001 }, + { 0x288B, 34442 }, + { 0x288C, 34909 }, + { 0x288D, 34989 }, + { 0x288E, 28955 }, + { 0x288F, 31063 }, + { 0x2890, 34131 }, + { 0x2891, 29675 }, + { 0x2892, 34356 }, + { 0x2893, 29922 }, + { 0x2894, 35699 }, + { 0x2895, 31694 }, + { 0x2896, 35909 }, + { 0x2897, 34486 }, + { 0x2898, 35998 }, + { 0x2899, 36033 }, + { 0x289A, 31380 }, + { 0x289B, 35510 }, + { 0x289C, 31425 }, + { 0x289D, 31368 }, + { 0x289E, 35854 }, + { 0x289F, 32104 }, + { 0x28A0, 32904 }, + { 0x28A1, 29347 }, + { 0x28A2, 32556 }, + { 0x28A3, 30316 }, + { 0x28A4, 33232 }, + { 0x28A5, 36223 }, + { 0x28A6, 108421 }, + { 0x28A7, 35124 }, + { 0x28A8, 35679 }, + { 0x28A9, 54106 }, + { 0x28AA, 53798 }, + { 0x28AB, 54134 }, + { 0x28AC, 53826 }, + { 0x28AD, 54146 }, + { 0x28AE, 53838 }, + { 0x28AF, 54142 }, + { 0x28B0, 53834 }, + { 0x28B1, 53984 }, + { 0x28B2, 53676 }, + { 0x28B3, 54098 }, + { 0x28B4, 53790 }, + { 0x28B5, 54138 }, + { 0x28B6, 53830 }, + { 0x28B7, 54110 }, + { 0x28B8, 53802 }, + { 0x28B9, 54170 }, + { 0x28BA, 53862 }, + { 0x28BB, 54150 }, + { 0x28BC, 53842 }, + { 0x28BD, 54118 }, + { 0x28BE, 53810 }, + { 0x28BF, 54154 }, + { 0x28C0, 53846 }, + { 0x28C1, 53960 }, + { 0x28C2, 53652 }, + { 0x28C3, 53964 }, + { 0x28C4, 53656 }, + { 0x28C5, 53996 }, + { 0x28C6, 53688 }, + { 0x28C7, 53952 }, + { 0x28C8, 53644 }, + { 0x28C9, 53968 }, + { 0x28CA, 53660 }, + { 0x28CB, 53972 }, + { 0x28CC, 53664 }, + { 0x28CD, 54130 }, + { 0x28CE, 53822 }, + { 0x28CF, 54102 }, + { 0x28D0, 53794 }, + { 0x28D1, 53976 }, + { 0x28D2, 53668 }, + { 0x28D3, 53956 }, + { 0x28D4, 53648 }, + { 0x28D5, 53992 }, + { 0x28D6, 53684 }, + { 0x28D7, 54094 }, + { 0x28D8, 53786 }, + { 0x28D9, 54090 }, + { 0x28DA, 53782 }, + { 0x28DB, 54199 }, + { 0x28DC, 53891 }, + { 0x28DD, 54006 }, + { 0x28DE, 53698 }, + { 0x28DF, 54219 }, + { 0x28E0, 53911 }, + { 0x28E1, 54209 }, + { 0x28E2, 53901 }, + { 0x28E3, 54194 }, + { 0x28E4, 53886 }, + { 0x28E5, 54214 }, + { 0x28E6, 53906 }, + { 0x28E7, 54036 }, + { 0x28E8, 53728 }, + { 0x28E9, 54158 }, + { 0x28EA, 53850 }, + { 0x28EB, 54174 }, + { 0x28EC, 53866 }, + { 0x28ED, 54048 }, + { 0x28EE, 53740 }, + { 0x28EF, 54018 }, + { 0x28F0, 53710 }, + { 0x28F1, 54179 }, + { 0x28F2, 53871 }, + { 0x28F3, 54204 }, + { 0x28F4, 53896 }, + { 0x28F5, 54042 }, + { 0x28F6, 53734 }, + { 0x28F7, 54000 }, + { 0x28F8, 53692 }, + { 0x28F9, 54189 }, + { 0x28FA, 53881 }, + { 0x28FB, 54030 }, + { 0x28FC, 53722 }, + { 0x28FD, 54024 }, + { 0x28FE, 53716 }, + { 0x28FF, 54060 }, + { 0x2900, 53752 }, + { 0x2901, 54012 }, + { 0x2902, 53704 }, + { 0x2903, 54054 }, + { 0x2904, 53746 }, + { 0x2905, 54084 }, + { 0x2906, 53776 }, + { 0x2907, 54066 }, + { 0x2908, 53758 }, + { 0x2909, 54072 }, + { 0x290A, 53764 }, + { 0x290B, 54078 }, + { 0x290C, 53770 }, + { 0x290D, 53934 }, + { 0x290E, 53926 }, + { 0x290F, 53930 }, + { 0x2910, 53949 }, + { 0x2911, 53941 }, + { 0x2912, 53937 }, + { 0x2913, 53945 }, + { 0x2914, 54224 }, + { 0x2915, 53916 }, + { 0x2916, 54229 }, + { 0x2917, 53921 }, + { 0x2918, 54238 }, + { 0x2919, 54242 }, + { 0x291A, 54246 }, + { 0x291B, 54184 }, + { 0x291C, 53876 }, + { 0x291D, 53498 }, + { 0x291E, 53508 }, + { 0x291F, 53514 }, + { 0x2920, 53503 }, + { 0x2921, 54234 }, + { 0x2922, 53520 }, + { 0x2923, 54250 }, + { 0x2924, 103478 }, + { 0x2925, 103514 }, + { 0x2926, 103530 }, + { 0x2927, 103526 }, + { 0x2928, 103482 }, + { 0x2929, 103594 }, + { 0x292A, 103602 }, + { 0x292B, 103586 }, + { 0x292C, 103490 }, + { 0x292D, 103554 }, + { 0x292E, 103558 }, + { 0x292F, 103562 }, + { 0x2930, 103566 }, + { 0x2931, 103494 }, + { 0x2932, 103570 }, + { 0x2933, 103634 }, + { 0x2934, 103578 }, + { 0x2935, 103582 }, + { 0x2936, 103590 }, + { 0x2937, 103498 }, + { 0x2938, 103626 }, + { 0x2939, 103622 }, + { 0x293A, 103614 }, + { 0x293B, 103574 }, + { 0x293C, 103630 }, + { 0x293D, 103610 }, + { 0x293E, 103518 }, + { 0x293F, 103550 }, + { 0x2940, 103522 }, + { 0x2941, 103606 }, + { 0x2942, 103598 }, + { 0x2943, 103618 }, + { 0x2944, 103534 }, + { 0x2945, 103486 }, + { 0x2946, 103542 }, + { 0x2947, 103502 }, + { 0x2948, 103538 }, + { 0x2949, 103546 }, + { 0x294A, 103506 }, + { 0x294B, 103510 }, + { 0x294C, 110890 }, + { 0x294D, 110908 }, + { 0x294E, 110972 }, + { 0x294F, 110917 }, + { 0x2950, 111017 }, + { 0x2951, 111028 }, + { 0x2952, 110923 }, + { 0x2953, 110911 }, + { 0x2954, 110981 }, + { 0x2955, 110978 }, + { 0x2956, 111014 }, + { 0x2957, 110965 }, + { 0x2958, 110914 }, + { 0x2959, 110926 }, + { 0x295A, 111037 }, + { 0x295B, 111020 }, + { 0x295C, 110920 }, + { 0x295D, 111023 }, + { 0x295E, 111033 }, + { 0x295F, 110987 }, + { 0x2960, 110905 }, + { 0x2961, 110990 }, + { 0x2962, 111053 }, + { 0x2963, 110941 }, + { 0x2964, 111041 }, + { 0x2965, 110896 }, + { 0x2966, 111008 }, + { 0x2967, 111065 }, + { 0x2968, 111061 }, + { 0x2969, 110929 }, + { 0x296A, 110932 }, + { 0x296B, 110935 }, + { 0x296C, 111049 }, + { 0x296D, 111057 }, + { 0x296E, 110938 }, + { 0x296F, 110902 }, + { 0x2970, 110944 }, + { 0x2971, 110993 }, + { 0x2972, 110984 }, + { 0x2973, 111045 }, + { 0x2974, 110968 }, + { 0x2975, 110947 }, + { 0x2976, 110999 }, + { 0x2977, 110996 }, + { 0x2978, 110950 }, + { 0x2979, 111002 }, + { 0x297A, 110975 }, + { 0x297B, 111005 }, + { 0x297C, 110953 }, + { 0x297D, 110956 }, + { 0x297E, 110959 }, + { 0x297F, 110962 }, + { 0x2980, 111069 }, + { 0x2981, 111011 }, + { 0x2982, 110893 }, + { 0x2983, 110899 }, + { 0x2984, 111073 }, + { 0x2985, 111081 }, + { 0x2986, 111078 }, + { 0x2987, 102490 }, + { 0x2988, 102502 }, + { 0x2989, 102631 }, + { 0x298A, 102661 }, + { 0x298B, 103078 }, + { 0x298C, 102241 }, + { 0x298D, 102718 }, + { 0x298E, 102289 }, + { 0x298F, 102523 }, + { 0x2990, 103024 }, + { 0x2991, 103334 }, + { 0x2992, 102835 }, + { 0x2993, 102316 }, + { 0x2994, 102916 }, + { 0x2995, 102430 }, + { 0x2996, 103105 }, + { 0x2997, 102892 }, + { 0x2998, 103036 }, + { 0x2999, 102565 }, + { 0x299A, 102937 }, + { 0x299B, 102943 }, + { 0x299C, 103198 }, + { 0x299D, 102940 }, + { 0x299E, 102664 }, + { 0x299F, 102676 }, + { 0x29A0, 102670 }, + { 0x29A1, 103084 }, + { 0x29A2, 103087 }, + { 0x29A3, 102667 }, + { 0x29A4, 102673 }, + { 0x29A5, 102256 }, + { 0x29A6, 102268 }, + { 0x29A7, 102262 }, + { 0x29A8, 102865 }, + { 0x29A9, 102868 }, + { 0x29AA, 102259 }, + { 0x29AB, 102265 }, + { 0x29AC, 102841 }, + { 0x29AD, 102853 }, + { 0x29AE, 102847 }, + { 0x29AF, 103162 }, + { 0x29B0, 103165 }, + { 0x29B1, 102844 }, + { 0x29B2, 102850 }, + { 0x29B3, 102871 }, + { 0x29B4, 102883 }, + { 0x29B5, 102877 }, + { 0x29B6, 103168 }, + { 0x29B7, 103171 }, + { 0x29B8, 102874 }, + { 0x29B9, 102880 }, + { 0x29BA, 102610 }, + { 0x29BB, 102622 }, + { 0x29BC, 102616 }, + { 0x29BD, 103066 }, + { 0x29BE, 103069 }, + { 0x29BF, 102613 }, + { 0x29C0, 102619 }, + { 0x29C1, 102469 }, + { 0x29C2, 102481 }, + { 0x29C3, 102475 }, + { 0x29C4, 103009 }, + { 0x29C5, 103012 }, + { 0x29C6, 102472 }, + { 0x29C7, 102478 }, + { 0x29C8, 102790 }, + { 0x29C9, 102802 }, + { 0x29CA, 102796 }, + { 0x29CB, 103147 }, + { 0x29CC, 103150 }, + { 0x29CD, 102793 }, + { 0x29CE, 102799 }, + { 0x29CF, 102385 }, + { 0x29D0, 102397 }, + { 0x29D1, 102391 }, + { 0x29D2, 102952 }, + { 0x29D3, 102955 }, + { 0x29D4, 102388 }, + { 0x29D5, 102394 }, + { 0x29D6, 117255 }, + { 0x29D7, 117307 }, + { 0x29D8, 117332 }, + { 0x29D9, 117259 }, + { 0x29DA, 117348 }, + { 0x29DB, 117319 }, + { 0x29DC, 117295 }, + { 0x29DD, 117267 }, + { 0x29DE, 117271 }, + { 0x29DF, 117275 }, + { 0x29E0, 117247 }, + { 0x29E1, 117299 }, + { 0x29E2, 117279 }, + { 0x29E3, 117283 }, + { 0x29E4, 117303 }, + { 0x29E5, 117287 }, + { 0x29E6, 117340 }, + { 0x29E7, 117328 }, + { 0x29E8, 117336 }, + { 0x29E9, 117382 }, + { 0x29EA, 117352 }, + { 0x29EB, 117374 }, + { 0x29EC, 117239 }, + { 0x29ED, 117291 }, + { 0x29EE, 117370 }, + { 0x29EF, 117407 }, + { 0x29F0, 117344 }, + { 0x29F1, 117315 }, + { 0x29F2, 117391 }, + { 0x29F3, 117386 }, + { 0x29F4, 117323 }, + { 0x29F5, 117401 }, + { 0x29F6, 40432 }, + { 0x29F7, 40414 }, + { 0x29F8, 15080 }, + { 0x29F9, 40722 }, + { 0x29FA, 14917 }, + { 0x29FB, 40540 }, + { 0x29FC, 64660 }, + { 0x29FD, 64654 }, + { 0x29FE, 54666 }, + { 0x29FF, 15083 }, + { 0x2A00, 40725 }, + { 0x2A01, 64658 }, + { 0x2A02, 14941 }, + { 0x2A03, 40570 }, + { 0x2A04, 124377 }, + { 0x2A05, 134494 }, + { 0x2A06, 54972 }, + { 0x2A07, 110554 }, + { 0x2A08, 138535 }, + { 0x2A09, 54660 }, + { 0x2A0A, 124192 }, + { 0x2A0B, 82754 }, + { 0x2A0C, 54669 }, + { 0x2A0D, 54790 }, + { 0x2A0E, 105551 }, + { 0x2A0F, 16590 }, + { 0x2A10, 57549 }, + { 0x2A11, 42392 }, + { 0x2A12, 14580 }, + { 0x2A13, 40308 }, + { 0x2A14, 42384 }, + { 0x2A15, 42388 }, + { 0x2A16, 15038 }, + { 0x2A17, 40676 }, + { 0x2A18, 12155 }, + { 0x2A19, 12187 }, + { 0x2A1A, 52486 }, + { 0x2A1B, 52507 }, + { 0x2A1C, 15025 }, + { 0x2A1D, 40661 }, + { 0x2A1E, 14933 }, + { 0x2A1F, 40562 }, + { 0x2A20, 12233 }, + { 0x2A21, 10166 }, + { 0x2A22, 80928 }, + { 0x2A23, 14092 }, + { 0x2A24, 110585 }, + { 0x2A25, 111400 }, + { 0x2A26, 16686 }, + { 0x2A27, 17550 }, + { 0x2A28, 68936 }, + { 0x2A29, 64623 }, + { 0x2A2A, 64647 }, + { 0x2A2B, 68983 }, + { 0x2A2C, 54271 }, + { 0x2A2D, 54275 }, + { 0x2A2E, 68976 }, + { 0x2A2F, 12095 }, + { 0x2A30, 69002 }, + { 0x2A31, 110888 }, + { 0x2A32, 143497 }, + { 0x2A33, 111322 }, + { 0x2A34, 69697 }, + { 0x2A35, 115953 }, + { 0x2A36, 54719 }, + { 0x2A37, 110526 }, + { 0x2A38, 54841 }, + { 0x2A39, 13818 }, + { 0x2A3A, 54833 }, + { 0x2A3B, 105526 }, + { 0x2A3C, 105529 }, + { 0x2A3D, 6948 }, + { 0x2A3E, 6950 }, + { 0x2A3F, 54796 }, + { 0x2A40, 54664 }, + { 0x2A41, 68868 }, + { 0x2A42, 106653 }, + { 0x2A43, 134495 }, + { 0x2A44, 78620 }, + { 0x2A45, 72252 }, + { 0x2A46, 22518 }, + { 0x2A47, 22513 }, + { 0x2A48, 111087 }, + { 0x2A49, 106658 }, + { 0x2A4A, 106655 }, + { 0x2A4B, 14982 }, + { 0x2A4C, 40611 }, + { 0x2A4D, 14976 }, + { 0x2A4E, 40605 }, + { 0x2A4F, 12083 }, + { 0x2A50, 12091 }, + { 0x2A51, 52412 }, + { 0x2A52, 52420 }, + { 0x2A53, 77683 }, + { 0x2A54, 6339 }, + { 0x2A55, 6246 }, + { 0x2A56, 6342 }, + { 0x2A57, 6346 }, + { 0x2A58, 6350 }, + { 0x2A59, 6336 }, + { 0x2A5A, 6082 }, + { 0x2A5B, 6313 }, + { 0x2A5C, 6275 }, + { 0x2A5D, 6279 }, + { 0x2A5E, 6374 }, + { 0x2A5F, 6213 }, + { 0x2A60, 6294 }, + { 0x2A61, 6298 }, + { 0x2A62, 6177 }, + { 0x2A63, 6181 }, + { 0x2A64, 6189 }, + { 0x2A65, 6185 }, + { 0x2A66, 6302 }, + { 0x2A67, 6362 }, + { 0x2A68, 6305 }, + { 0x2A69, 6309 }, + { 0x2A6A, 6267 }, + { 0x2A6B, 6271 }, + { 0x2A6C, 6165 }, + { 0x2A6D, 6139 }, + { 0x2A6E, 6243 }, + { 0x2A6F, 6142 }, + { 0x2A70, 6207 }, + { 0x2A71, 6249 }, + { 0x2A72, 6333 }, + { 0x2A73, 6371 }, + { 0x2A74, 6319 }, + { 0x2A75, 6323 }, + { 0x2A76, 6159 }, + { 0x2A77, 6128 }, + { 0x2A78, 6132 }, + { 0x2A79, 6377 }, + { 0x2A7A, 6085 }, + { 0x2A7B, 6088 }, + { 0x2A7C, 6174 }, + { 0x2A7D, 6148 }, + { 0x2A7E, 6106 }, + { 0x2A7F, 6354 }, + { 0x2A80, 6358 }, + { 0x2A81, 6327 }, + { 0x2A82, 6216 }, + { 0x2A83, 6451 }, + { 0x2A84, 6109 }, + { 0x2A85, 6113 }, + { 0x2A86, 6121 }, + { 0x2A87, 6117 }, + { 0x2A88, 6204 }, + { 0x2A89, 6291 }, + { 0x2A8A, 6136 }, + { 0x2A8B, 6103 }, + { 0x2A8C, 6125 }, + { 0x2A8D, 6235 }, + { 0x2A8E, 6239 }, + { 0x2A8F, 6201 }, + { 0x2A90, 6330 }, + { 0x2A91, 6255 }, + { 0x2A92, 6259 }, + { 0x2A93, 6263 }, + { 0x2A94, 6316 }, + { 0x2A95, 6368 }, + { 0x2A96, 6227 }, + { 0x2A97, 6231 }, + { 0x2A98, 6407 }, + { 0x2A99, 6383 }, + { 0x2A9A, 6171 }, + { 0x2A9B, 6475 }, + { 0x2A9C, 6463 }, + { 0x2A9D, 6162 }, + { 0x2A9E, 6415 }, + { 0x2A9F, 6387 }, + { 0x2AA0, 6219 }, + { 0x2AA1, 6223 }, + { 0x2AA2, 6156 }, + { 0x2AA3, 6435 }, + { 0x2AA4, 6193 }, + { 0x2AA5, 6197 }, + { 0x2AA6, 6443 }, + { 0x2AA7, 6431 }, + { 0x2AA8, 6283 }, + { 0x2AA9, 6287 }, + { 0x2AAA, 6210 }, + { 0x2AAB, 6145 }, + { 0x2AAC, 6479 }, + { 0x2AAD, 6439 }, + { 0x2AAE, 6455 }, + { 0x2AAF, 6403 }, + { 0x2AB0, 6091 }, + { 0x2AB1, 6095 }, + { 0x2AB2, 6099 }, + { 0x2AB3, 6399 }, + { 0x2AB4, 6168 }, + { 0x2AB5, 6459 }, + { 0x2AB6, 6153 }, + { 0x2AB7, 6252 }, + { 0x2AB8, 6423 }, + { 0x2AB9, 6411 }, + { 0x2ABA, 6447 }, + { 0x2ABB, 6391 }, + { 0x2ABC, 6395 }, + { 0x2ABD, 6427 }, + { 0x2ABE, 6488 }, + { 0x2ABF, 6419 }, + { 0x2AC0, 6492 }, + { 0x2AC1, 6467 }, + { 0x2AC2, 6496 }, + { 0x2AC3, 6471 }, + { 0x2AC4, 6365 }, + { 0x2AC5, 6500 }, + { 0x2AC6, 6484 }, + { 0x2AC7, 57847 }, + { 0x2AC8, 58015 }, + { 0x2AC9, 57805 }, + { 0x2ACA, 58206 }, + { 0x2ACB, 58327 }, + { 0x2ACC, 57985 }, + { 0x2ACD, 57877 }, + { 0x2ACE, 57832 }, + { 0x2ACF, 57835 }, + { 0x2AD0, 58009 }, + { 0x2AD1, 58138 }, + { 0x2AD2, 58135 }, + { 0x2AD3, 57934 }, + { 0x2AD4, 58126 }, + { 0x2AD5, 57826 }, + { 0x2AD6, 58242 }, + { 0x2AD7, 58034 }, + { 0x2AD8, 58165 }, + { 0x2AD9, 58177 }, + { 0x2ADA, 58099 }, + { 0x2ADB, 58227 }, + { 0x2ADC, 58180 }, + { 0x2ADD, 58308 }, + { 0x2ADE, 57874 }, + { 0x2ADF, 58427 }, + { 0x2AE0, 58053 }, + { 0x2AE1, 58120 }, + { 0x2AE2, 58394 }, + { 0x2AE3, 58102 }, + { 0x2AE4, 58174 }, + { 0x2AE5, 58424 }, + { 0x2AE6, 58132 }, + { 0x2AE7, 58397 }, + { 0x2AE8, 57780 }, + { 0x2AE9, 57783 }, + { 0x2AEA, 58376 }, + { 0x2AEB, 57793 }, + { 0x2AEC, 58263 }, + { 0x2AED, 58117 }, + { 0x2AEE, 58047 }, + { 0x2AEF, 57991 }, + { 0x2AF0, 58215 }, + { 0x2AF1, 58000 }, + { 0x2AF2, 58284 }, + { 0x2AF3, 58336 }, + { 0x2AF4, 58412 }, + { 0x2AF5, 58185 }, + { 0x2AF6, 58096 }, + { 0x2AF7, 58391 }, + { 0x2AF8, 58352 }, + { 0x2AF9, 57808 }, + { 0x2AFA, 58202 }, + { 0x2AFB, 58294 }, + { 0x2AFC, 58021 }, + { 0x2AFD, 57880 }, + { 0x2AFE, 58194 }, + { 0x2AFF, 57796 }, + { 0x2B00, 58218 }, + { 0x2B01, 58367 }, + { 0x2B02, 58065 }, + { 0x2B03, 58159 }, + { 0x2B04, 58382 }, + { 0x2B05, 57931 }, + { 0x2B06, 57976 }, + { 0x2B07, 58281 }, + { 0x2B08, 57853 }, + { 0x2B09, 58324 }, + { 0x2B0A, 58287 }, + { 0x2B0B, 57790 }, + { 0x2B0C, 58339 }, + { 0x2B0D, 57841 }, + { 0x2B0E, 57871 }, + { 0x2B0F, 57865 }, + { 0x2B10, 58028 }, + { 0x2B11, 58077 }, + { 0x2B12, 57997 }, + { 0x2B13, 58068 }, + { 0x2B14, 58129 }, + { 0x2B15, 58361 }, + { 0x2B16, 57776 }, + { 0x2B17, 58373 }, + { 0x2B18, 57823 }, + { 0x2B19, 57919 }, + { 0x2B1A, 58233 }, + { 0x2B1B, 58254 }, + { 0x2B1C, 57950 }, + { 0x2B1D, 57922 }, + { 0x2B1E, 58305 }, + { 0x2B1F, 58298 }, + { 0x2B20, 57971 }, + { 0x2B21, 58212 }, + { 0x2B22, 57947 }, + { 0x2B23, 57799 }, + { 0x2B24, 57802 }, + { 0x2B25, 58415 }, + { 0x2B26, 57994 }, + { 0x2B27, 58168 }, + { 0x2B28, 58074 }, + { 0x2B29, 58239 }, + { 0x2B2A, 58012 }, + { 0x2B2B, 57884 }, + { 0x2B2C, 58141 }, + { 0x2B2D, 57902 }, + { 0x2B2E, 58418 }, + { 0x2B2F, 58290 }, + { 0x2B30, 58260 }, + { 0x2B31, 58062 }, + { 0x2B32, 57928 }, + { 0x2B33, 57817 }, + { 0x2B34, 58224 }, + { 0x2B35, 58105 }, + { 0x2B36, 58236 }, + { 0x2B37, 58333 }, + { 0x2B38, 58251 }, + { 0x2B39, 58153 }, + { 0x2B3A, 57913 }, + { 0x2B3B, 58230 }, + { 0x2B3C, 58275 }, + { 0x2B3D, 58044 }, + { 0x2B3E, 58059 }, + { 0x2B3F, 57829 }, + { 0x2B40, 57838 }, + { 0x2B41, 58188 }, + { 0x2B42, 58379 }, + { 0x2B43, 57844 }, + { 0x2B44, 57787 }, + { 0x2B45, 58038 }, + { 0x2B46, 57811 }, + { 0x2B47, 58114 }, + { 0x2B48, 58025 }, + { 0x2B49, 58409 }, + { 0x2B4A, 58056 }, + { 0x2B4B, 58269 }, + { 0x2B4C, 58318 }, + { 0x2B4D, 58346 }, + { 0x2B4E, 58321 }, + { 0x2B4F, 57896 }, + { 0x2B50, 58421 }, + { 0x2B51, 58123 }, + { 0x2B52, 58156 }, + { 0x2B53, 58245 }, + { 0x2B54, 58312 }, + { 0x2B55, 58111 }, + { 0x2B56, 58083 }, + { 0x2B57, 58370 }, + { 0x2B58, 58087 }, + { 0x2B59, 57868 }, + { 0x2B5A, 57988 }, + { 0x2B5B, 58330 }, + { 0x2B5C, 58358 }, + { 0x2B5D, 57887 }, + { 0x2B5E, 57850 }, + { 0x2B5F, 58272 }, + { 0x2B60, 58191 }, + { 0x2B61, 57859 }, + { 0x2B62, 57862 }, + { 0x2B63, 57956 }, + { 0x2B64, 57899 }, + { 0x2B65, 57910 }, + { 0x2B66, 58278 }, + { 0x2B67, 58388 }, + { 0x2B68, 58080 }, + { 0x2B69, 57916 }, + { 0x2B6A, 58093 }, + { 0x2B6B, 58433 }, + { 0x2B6C, 58400 }, + { 0x2B6D, 57965 }, + { 0x2B6E, 58018 }, + { 0x2B6F, 57962 }, + { 0x2B70, 58171 }, + { 0x2B71, 58209 }, + { 0x2B72, 58197 }, + { 0x2B73, 58041 }, + { 0x2B74, 57893 }, + { 0x2B75, 58266 }, + { 0x2B76, 57944 }, + { 0x2B77, 58385 }, + { 0x2B78, 58342 }, + { 0x2B79, 58006 }, + { 0x2B7A, 58221 }, + { 0x2B7B, 58003 }, + { 0x2B7C, 58090 }, + { 0x2B7D, 57820 }, + { 0x2B7E, 57814 }, + { 0x2B7F, 57979 }, + { 0x2B80, 58406 }, + { 0x2B81, 58162 }, + { 0x2B82, 57907 }, + { 0x2B83, 58071 }, + { 0x2B84, 57968 }, + { 0x2B85, 58144 }, + { 0x2B86, 58436 }, + { 0x2B87, 58403 }, + { 0x2B88, 58150 }, + { 0x2B89, 57953 }, + { 0x2B8A, 57890 }, + { 0x2B8B, 58050 }, + { 0x2B8C, 57925 }, + { 0x2B8D, 58257 }, + { 0x2B8E, 57982 }, + { 0x2B8F, 58364 }, + { 0x2B90, 58315 }, + { 0x2B91, 58108 }, + { 0x2B92, 58430 }, + { 0x2B93, 57959 }, + { 0x2B94, 58349 }, + { 0x2B95, 57938 }, + { 0x2B96, 57856 }, + { 0x2B97, 58031 }, + { 0x2B98, 57941 }, + { 0x2B99, 58248 }, + { 0x2B9A, 58302 }, + { 0x2B9B, 58355 }, + { 0x2B9C, 58147 }, + { 0x2B9D, 133746 }, + { 0x2B9E, 133760 }, + { 0x2B9F, 133752 }, + { 0x2BA0, 133766 }, + { 0x2BA1, 133741 }, + { 0x2BA2, 133788 }, + { 0x2BA3, 133794 }, + { 0x2BA4, 133782 }, + { 0x2BA5, 133820 }, + { 0x2BA6, 133827 }, + { 0x2BA7, 133800 }, + { 0x2BA8, 133774 }, + { 0x2BA9, 133814 }, + { 0x2BAA, 133807 }, + { 0x2BAB, 133834 }, + { 0x2BAC, 133778 }, + { 0x2BAD, 133229 }, + { 0x2BAE, 133223 }, + { 0x2BAF, 133216 }, + { 0x2BB0, 22647 }, + { 0x2BB1, 105571 }, + { 0x2BB2, 133269 }, + { 0x2BB3, 133258 }, + { 0x2BB4, 133251 }, + { 0x2BB5, 14734 }, + { 0x2BB6, 40419 }, + { 0x2BB7, 14921 }, + { 0x2BB8, 40544 }, + { 0x2BB9, 14914 }, + { 0x2BBA, 40537 }, + { 0x2BBB, 14891 }, + { 0x2BBC, 40517 }, + { 0x2BBD, 14757 }, + { 0x2BBE, 40451 }, + { 0x2BBF, 64590 }, + { 0x2BC0, 14171 }, + { 0x2BC1, 15029 }, + { 0x2BC2, 40665 }, + { 0x2BC3, 14904 }, + { 0x2BC4, 40530 }, + { 0x2BC5, 14899 }, + { 0x2BC6, 40525 }, + { 0x2BC7, 14895 }, + { 0x2BC8, 40521 }, + { 0x2BC9, 17513 }, + { 0x2BCA, 110544 }, + { 0x2BCB, 54706 }, + { 0x2BCC, 6943 }, + { 0x2BCD, 64592 }, + { 0x2BCE, 104755 }, + { 0x2BCF, 104764 }, + { 0x2BD0, 104782 }, + { 0x2BD1, 104770 }, + { 0x2BD2, 104767 }, + { 0x2BD3, 104758 }, + { 0x2BD4, 104779 }, + { 0x2BD5, 104776 }, + { 0x2BD6, 104773 }, + { 0x2BD7, 133225 }, + { 0x2BD8, 133254 }, + { 0x2BD9, 133265 }, + { 0x2BDA, 133261 }, + { 0x2BDB, 55625 }, + { 0x2BDC, 55339 }, + { 0x2BDD, 17528 }, + { 0x2BDE, 111331 }, + { 0x2BDF, 111347 }, + { 0x2BE0, 111341 }, + { 0x2BE1, 111354 }, + { 0x2BE2, 111335 }, + { 0x2BE3, 71878 }, + { 0x2BE4, 133272 }, + { 0x2BE5, 104761 }, + { 0x2BE6, 104788 }, + { 0x2BE7, 104785 }, + { 0x2BE8, 111422 }, + { 0x2BE9, 15379 }, + { 0x2BEA, 16592 }, + { 0x2BEB, 133674 }, + { 0x2BEC, 133219 }, + { 0x2BED, 105260 }, + { 0x2BEE, 105038 }, + { 0x2BEF, 105268 }, + { 0x2BF0, 105044 }, + { 0x2BF1, 105276 }, + { 0x2BF2, 105053 }, + { 0x2BF3, 105264 }, + { 0x2BF4, 105041 }, + { 0x2BF5, 105272 }, + { 0x2BF6, 105050 }, + { 0x2BF7, 105116 }, + { 0x2BF8, 105086 }, + { 0x2BF9, 105122 }, + { 0x2BFA, 105092 }, + { 0x2BFB, 105128 }, + { 0x2BFC, 105098 }, + { 0x2BFD, 105119 }, + { 0x2BFE, 105089 }, + { 0x2BFF, 105125 }, + { 0x2C00, 105095 }, + { 0x2C01, 105191 }, + { 0x2C02, 105245 }, + { 0x2C03, 105197 }, + { 0x2C04, 105251 }, + { 0x2C05, 105203 }, + { 0x2C06, 105257 }, + { 0x2C07, 105194 }, + { 0x2C08, 105248 }, + { 0x2C09, 105200 }, + { 0x2C0A, 105254 }, + { 0x2C0B, 105206 }, + { 0x2C0C, 105071 }, + { 0x2C0D, 105212 }, + { 0x2C0E, 105077 }, + { 0x2C0F, 105292 }, + { 0x2C10, 105218 }, + { 0x2C11, 105083 }, + { 0x2C12, 105209 }, + { 0x2C13, 105074 }, + { 0x2C14, 105215 }, + { 0x2C15, 105080 }, + { 0x2C16, 105146 }, + { 0x2C17, 105152 }, + { 0x2C18, 105158 }, + { 0x2C19, 105149 }, + { 0x2C1A, 105155 }, + { 0x2C1B, 105101 }, + { 0x2C1C, 105056 }, + { 0x2C1D, 105161 }, + { 0x2C1E, 105107 }, + { 0x2C1F, 105062 }, + { 0x2C20, 105167 }, + { 0x2C21, 105113 }, + { 0x2C22, 105068 }, + { 0x2C23, 105173 }, + { 0x2C24, 105104 }, + { 0x2C25, 105059 }, + { 0x2C26, 105164 }, + { 0x2C27, 105110 }, + { 0x2C28, 105065 }, + { 0x2C29, 105170 }, + { 0x2C2A, 105131 }, + { 0x2C2B, 105137 }, + { 0x2C2C, 105143 }, + { 0x2C2D, 105134 }, + { 0x2C2E, 105140 }, + { 0x2C2F, 105312 }, + { 0x2C30, 105236 }, + { 0x2C31, 105320 }, + { 0x2C32, 105242 }, + { 0x2C33, 105316 }, + { 0x2C34, 105239 }, + { 0x2C35, 105176 }, + { 0x2C36, 105182 }, + { 0x2C37, 105188 }, + { 0x2C38, 105179 }, + { 0x2C39, 105185 }, + { 0x2C3A, 105296 }, + { 0x2C3B, 105224 }, + { 0x2C3C, 105230 }, + { 0x2C3D, 105227 }, + { 0x2C3E, 105233 }, + { 0x2C3F, 105047 }, + { 0x2C40, 105221 }, + { 0x2C41, 105280 }, + { 0x2C42, 105284 }, + { 0x2C43, 117861 }, + { 0x2C44, 117866 }, + { 0x2C45, 144924 }, + { 0x2C46, 144932 }, + { 0x2C47, 105339 }, + { 0x2C48, 105332 }, + { 0x2C49, 105336 }, + { 0x2C4A, 144921 }, + { 0x2C4B, 106183 }, + { 0x2C4C, 105949 }, + { 0x2C4D, 106191 }, + { 0x2C4E, 105955 }, + { 0x2C4F, 106203 }, + { 0x2C50, 105964 }, + { 0x2C51, 106187 }, + { 0x2C52, 105952 }, + { 0x2C53, 106199 }, + { 0x2C54, 105961 }, + { 0x2C55, 106027 }, + { 0x2C56, 105997 }, + { 0x2C57, 106033 }, + { 0x2C58, 106003 }, + { 0x2C59, 106039 }, + { 0x2C5A, 106009 }, + { 0x2C5B, 106030 }, + { 0x2C5C, 106000 }, + { 0x2C5D, 106036 }, + { 0x2C5E, 106006 }, + { 0x2C5F, 106102 }, + { 0x2C60, 106168 }, + { 0x2C61, 106108 }, + { 0x2C62, 106174 }, + { 0x2C63, 106114 }, + { 0x2C64, 106180 }, + { 0x2C65, 106105 }, + { 0x2C66, 106171 }, + { 0x2C67, 106111 }, + { 0x2C68, 106177 }, + { 0x2C69, 106117 }, + { 0x2C6A, 105982 }, + { 0x2C6B, 106123 }, + { 0x2C6C, 105988 }, + { 0x2C6D, 106283 }, + { 0x2C6E, 106129 }, + { 0x2C6F, 105994 }, + { 0x2C70, 106120 }, + { 0x2C71, 105985 }, + { 0x2C72, 106126 }, + { 0x2C73, 105991 }, + { 0x2C74, 106057 }, + { 0x2C75, 106063 }, + { 0x2C76, 106069 }, + { 0x2C77, 106060 }, + { 0x2C78, 106066 }, + { 0x2C79, 106012 }, + { 0x2C7A, 105967 }, + { 0x2C7B, 106072 }, + { 0x2C7C, 106018 }, + { 0x2C7D, 105973 }, + { 0x2C7E, 106078 }, + { 0x2C7F, 106024 }, + { 0x2C80, 105979 }, + { 0x2C81, 106084 }, + { 0x2C82, 106015 }, + { 0x2C83, 105970 }, + { 0x2C84, 106075 }, + { 0x2C85, 106021 }, + { 0x2C86, 105976 }, + { 0x2C87, 106081 }, + { 0x2C88, 106042 }, + { 0x2C89, 106048 }, + { 0x2C8A, 106054 }, + { 0x2C8B, 106045 }, + { 0x2C8C, 106051 }, + { 0x2C8D, 106303 }, + { 0x2C8E, 106159 }, + { 0x2C8F, 106311 }, + { 0x2C90, 106165 }, + { 0x2C91, 106307 }, + { 0x2C92, 106162 }, + { 0x2C93, 106087 }, + { 0x2C94, 106093 }, + { 0x2C95, 106099 }, + { 0x2C96, 106090 }, + { 0x2C97, 106096 }, + { 0x2C98, 106287 }, + { 0x2C99, 106147 }, + { 0x2C9A, 106153 }, + { 0x2C9B, 106150 }, + { 0x2C9C, 106156 }, + { 0x2C9D, 105958 }, + { 0x2C9E, 106144 }, + { 0x2C9F, 106227 }, + { 0x2CA0, 106231 }, + { 0x2CA1, 106132 }, + { 0x2CA2, 106138 }, + { 0x2CA3, 106135 }, + { 0x2CA4, 106141 }, + { 0x2CA5, 106390 }, + { 0x2CA6, 144928 }, + { 0x2CA7, 106400 }, + { 0x2CA8, 106393 }, + { 0x2CA9, 106397 }, + { 0x2CAA, 83953 }, + { 0x2CAB, 84001 }, + { 0x2CAC, 83986 }, + { 0x2CAD, 83965 }, + { 0x2CAE, 83959 }, + { 0x2CAF, 84013 }, + { 0x2CB0, 83989 }, + { 0x2CB1, 83983 }, + { 0x2CB2, 83968 }, + { 0x2CB3, 83980 }, + { 0x2CB4, 83971 }, + { 0x2CB5, 83977 }, + { 0x2CB6, 84004 }, + { 0x2CB7, 84022 }, + { 0x2CB8, 84118 }, + { 0x2CB9, 84046 }, + { 0x2CBA, 84115 }, + { 0x2CBB, 84007 }, + { 0x2CBC, 84025 }, + { 0x2CBD, 83956 }, + { 0x2CBE, 84010 }, + { 0x2CBF, 83950 }, + { 0x2CC0, 83992 }, + { 0x2CC1, 83962 }, + { 0x2CC2, 84052 }, + { 0x2CC3, 84031 }, + { 0x2CC4, 84055 }, + { 0x2CC5, 84040 }, + { 0x2CC6, 84112 }, + { 0x2CC7, 84037 }, + { 0x2CC8, 84058 }, + { 0x2CC9, 84127 }, + { 0x2CCA, 84133 }, + { 0x2CCB, 84061 }, + { 0x2CCC, 83974 }, + { 0x2CCD, 84016 }, + { 0x2CCE, 84085 }, + { 0x2CCF, 84019 }, + { 0x2CD0, 84097 }, + { 0x2CD1, 84067 }, + { 0x2CD2, 84076 }, + { 0x2CD3, 83995 }, + { 0x2CD4, 84100 }, + { 0x2CD5, 55451 }, + { 0x2CD6, 55550 }, + { 0x2CD7, 55520 }, + { 0x2CD8, 55433 }, + { 0x2CD9, 55526 }, + { 0x2CDA, 55529 }, + { 0x2CDB, 55454 }, + { 0x2CDC, 55553 }, + { 0x2CDD, 55439 }, + { 0x2CDE, 55568 }, + { 0x2CDF, 55538 }, + { 0x2CE0, 55541 }, + { 0x2CE1, 55493 }, + { 0x2CE2, 55595 }, + { 0x2CE3, 55592 }, + { 0x2CE4, 55535 }, + { 0x2CE5, 55430 }, + { 0x2CE6, 55436 }, + { 0x2CE7, 55517 }, + { 0x2CE8, 55490 }, + { 0x2CE9, 55409 }, + { 0x2CEA, 55481 }, + { 0x2CEB, 55427 }, + { 0x2CEC, 55421 }, + { 0x2CED, 55505 }, + { 0x2CEE, 55463 }, + { 0x2CEF, 55466 }, + { 0x2CF0, 55475 }, + { 0x2CF1, 55472 }, + { 0x2CF2, 55424 }, + { 0x2CF3, 55346 }, + { 0x2CF4, 55361 }, + { 0x2CF5, 55382 }, + { 0x2CF6, 55403 }, + { 0x2CF7, 55364 }, + { 0x2CF8, 55349 }, + { 0x2CF9, 55406 }, + { 0x2CFA, 55385 }, + { 0x2CFB, 55355 }, + { 0x2CFC, 55373 }, + { 0x2CFD, 55397 }, + { 0x2CFE, 55370 }, + { 0x2CFF, 55391 }, + { 0x2D00, 55358 }, + { 0x2D01, 55400 }, + { 0x2D02, 55376 }, + { 0x2D03, 55379 }, + { 0x2D04, 55394 }, + { 0x2D05, 55367 }, + { 0x2D06, 55388 }, + { 0x2D07, 55352 }, + { 0x2D08, 55344 }, + { 0x2D09, 55514 }, + { 0x2D0A, 55559 }, + { 0x2D0B, 55487 }, + { 0x2D0C, 55583 }, + { 0x2D0D, 55616 }, + { 0x2D0E, 55571 }, + { 0x2D0F, 55604 }, + { 0x2D10, 55589 }, + { 0x2D11, 55619 }, + { 0x2D12, 55523 }, + { 0x2D13, 55484 }, + { 0x2D14, 55580 }, + { 0x2D15, 55574 }, + { 0x2D16, 55562 }, + { 0x2D17, 55565 }, + { 0x2D18, 55610 }, + { 0x2D19, 55613 }, + { 0x2D1A, 55532 }, + { 0x2D1B, 55586 }, + { 0x2D1C, 55577 }, + { 0x2D1D, 55622 }, + { 0x2D1E, 55544 }, + { 0x2D1F, 55499 }, + { 0x2D20, 55547 }, + { 0x2D21, 55502 }, + { 0x2D22, 55496 }, + { 0x2D23, 55469 }, + { 0x2D24, 55511 }, + { 0x2D25, 55478 }, + { 0x2D26, 55598 }, + { 0x2D27, 55607 }, + { 0x2D28, 55601 }, + { 0x2D29, 55508 }, + { 0x2D2A, 55556 }, + { 0x2D2B, 55442 }, + { 0x2D2C, 55457 }, + { 0x2D2D, 55412 }, + { 0x2D2E, 55460 }, + { 0x2D2F, 55445 }, + { 0x2D30, 55415 }, + { 0x2D31, 55418 }, + { 0x2D32, 55448 }, + { 0x2D33, 133733 }, + { 0x2D34, 133737 }, + { 0x2D35, 133681 }, + { 0x2D36, 133689 }, + { 0x2D37, 133709 }, + { 0x2D38, 133693 }, + { 0x2D39, 133685 }, + { 0x2D3A, 133725 }, + { 0x2D3B, 133713 }, + { 0x2D3C, 133701 }, + { 0x2D3D, 133729 }, + { 0x2D3E, 133705 }, + { 0x2D3F, 133717 }, + { 0x2D40, 133721 }, + { 0x2D41, 133697 }, + { 0x2D42, 133677 }, + { 0x2D43, 84043 }, + { 0x2D44, 84121 }, + { 0x2D45, 84088 }, + { 0x2D46, 84070 }, + { 0x2D47, 84049 }, + { 0x2D48, 84136 }, + { 0x2D49, 84109 }, + { 0x2D4A, 84148 }, + { 0x2D4B, 84082 }, + { 0x2D4C, 84130 }, + { 0x2D4D, 84139 }, + { 0x2D4E, 84151 }, + { 0x2D4F, 84079 }, + { 0x2D50, 84142 }, + { 0x2D51, 84154 }, + { 0x2D52, 84157 }, + { 0x2D53, 84034 }, + { 0x2D54, 84106 }, + { 0x2D55, 84145 }, + { 0x2D56, 84160 }, + { 0x2D57, 83942 }, + { 0x2D58, 83946 }, + { 0x2D59, 83938 }, + { 0x2D5A, 83934 }, + { 0x2D5B, 84064 }, + { 0x2D5C, 84094 }, + { 0x2D5D, 84124 }, + { 0x2D5E, 83930 }, + { 0x2D5F, 84073 }, + { 0x2D60, 84091 }, + { 0x2D61, 84103 }, + { 0x2D62, 84028 }, + { 0x2D63, 5986 }, + { 0x2D64, 6025 }, + { 0x2D65, 6028 }, + { 0x2D66, 6031 }, + { 0x2D67, 6016 }, + { 0x2D68, 6046 }, + { 0x2D69, 6037 }, + { 0x2D6A, 5992 }, + { 0x2D6B, 6067 }, + { 0x2D6C, 6076 }, + { 0x2D6D, 6040 }, + { 0x2D6E, 6070 }, + { 0x2D6F, 6061 }, + { 0x2D70, 6043 }, + { 0x2D71, 6073 }, + { 0x2D72, 5974 }, + { 0x2D73, 5971 }, + { 0x2D74, 5983 }, + { 0x2D75, 5977 }, + { 0x2D76, 6010 }, + { 0x2D77, 5968 }, + { 0x2D78, 5995 }, + { 0x2D79, 5989 }, + { 0x2D7A, 6019 }, + { 0x2D7B, 6052 }, + { 0x2D7C, 6013 }, + { 0x2D7D, 6007 }, + { 0x2D7E, 5998 }, + { 0x2D7F, 6004 }, + { 0x2D80, 6022 }, + { 0x2D81, 6058 }, + { 0x2D82, 6049 }, + { 0x2D83, 6064 }, + { 0x2D84, 6079 }, + { 0x2D85, 6001 }, + { 0x2D86, 5980 }, + { 0x2D87, 6034 }, + { 0x2D88, 6055 }, + { 0x2D89, 133839 }, + { 0x2D8A, 106239 }, + { 0x2D8B, 106271 }, + { 0x2D8C, 106275 }, + { 0x2D8D, 106279 }, + { 0x2D8E, 106247 }, + { 0x2D8F, 106207 }, + { 0x2D90, 106215 }, + { 0x2D91, 106223 }, + { 0x2D92, 106211 }, + { 0x2D93, 106219 }, + { 0x2D94, 106243 }, + { 0x2D95, 106251 }, + { 0x2D96, 106259 }, + { 0x2D97, 106267 }, + { 0x2D98, 106255 }, + { 0x2D99, 106263 }, + { 0x2D9A, 144331 }, + { 0x2D9B, 144310 }, + { 0x2D9C, 144338 }, + { 0x2D9D, 144324 }, + { 0x2D9E, 144303 }, + { 0x2D9F, 144317 }, + { 0x2DA0, 144271 }, + { 0x2DA1, 144296 }, + { 0x2DA2, 144278 }, + { 0x2DA3, 144345 }, + { 0x2DA4, 144352 }, + { 0x2DA5, 144366 }, + { 0x2DA6, 144359 }, + { 0x2DA7, 144289 }, + { 0x2DA8, 144334 }, + { 0x2DA9, 144313 }, + { 0x2DAA, 144341 }, + { 0x2DAB, 144327 }, + { 0x2DAC, 144306 }, + { 0x2DAD, 144320 }, + { 0x2DAE, 144274 }, + { 0x2DAF, 144299 }, + { 0x2DB0, 144281 }, + { 0x2DB1, 144348 }, + { 0x2DB2, 144355 }, + { 0x2DB3, 144369 }, + { 0x2DB4, 144362 }, + { 0x2DB5, 144292 }, + { 0x2DB6, 144285 }, + { 0x2DB7, 144378 }, + { 0x2DB8, 144373 }, + { 0x2DB9, 144415 }, + { 0x2DBA, 144427 }, + { 0x2DBB, 144487 }, + { 0x2DBC, 144439 }, + { 0x2DBD, 144436 }, + { 0x2DBE, 144418 }, + { 0x2DBF, 144478 }, + { 0x2DC0, 144466 }, + { 0x2DC1, 144451 }, + { 0x2DC2, 144424 }, + { 0x2DC3, 144445 }, + { 0x2DC4, 144433 }, + { 0x2DC5, 144490 }, + { 0x2DC6, 144460 }, + { 0x2DC7, 144472 }, + { 0x2DC8, 144463 }, + { 0x2DC9, 144421 }, + { 0x2DCA, 144481 }, + { 0x2DCB, 144442 }, + { 0x2DCC, 144493 }, + { 0x2DCD, 144448 }, + { 0x2DCE, 144496 }, + { 0x2DCF, 144508 }, + { 0x2DD0, 144520 }, + { 0x2DD1, 144469 }, + { 0x2DD2, 144511 }, + { 0x2DD3, 144430 }, + { 0x2DD4, 144484 }, + { 0x2DD5, 144514 }, + { 0x2DD6, 144517 }, + { 0x2DD7, 144505 }, + { 0x2DD8, 144499 }, + { 0x2DD9, 144502 }, + { 0x2DDA, 144454 }, + { 0x2DDB, 144457 }, + { 0x2DDC, 144475 }, + { 0x2DDD, 72178 }, + { 0x2DDE, 72208 }, + { 0x2DDF, 72157 }, + { 0x2DE0, 72088 }, + { 0x2DE1, 71683 }, + { 0x2DE2, 71809 }, + { 0x2DE3, 71761 }, + { 0x2DE4, 71701 }, + { 0x2DE5, 71692 }, + { 0x2DE6, 71743 }, + { 0x2DE7, 71854 }, + { 0x2DE8, 71749 }, + { 0x2DE9, 134497 }, + { 0x2DEA, 71815 }, + { 0x2DEB, 71823 }, + { 0x2DEC, 71847 }, + { 0x2DED, 71831 }, + { 0x2DEE, 71827 }, + { 0x2DEF, 71819 }, + { 0x2DF0, 71843 }, + { 0x2DF1, 71839 }, + { 0x2DF2, 71835 }, + { 0x2DF3, 71758 }, + { 0x2DF4, 71767 }, + { 0x2DF5, 71775 }, + { 0x2DF6, 71799 }, + { 0x2DF7, 71783 }, + { 0x2DF8, 71779 }, + { 0x2DF9, 71618 }, + { 0x2DFA, 71597 }, + { 0x2DFB, 71625 }, + { 0x2DFC, 71611 }, + { 0x2DFD, 71590 }, + { 0x2DFE, 71604 }, + { 0x2DFF, 71558 }, + { 0x2E00, 71579 }, + { 0x2E01, 71565 }, + { 0x2E02, 71632 }, + { 0x2E03, 71639 }, + { 0x2E04, 71653 }, + { 0x2E05, 71646 }, + { 0x2E06, 71572 }, + { 0x2E07, 71621 }, + { 0x2E08, 71600 }, + { 0x2E09, 71628 }, + { 0x2E0A, 71614 }, + { 0x2E0B, 71593 }, + { 0x2E0C, 71607 }, + { 0x2E0D, 71561 }, + { 0x2E0E, 71582 }, + { 0x2E0F, 71568 }, + { 0x2E10, 71635 }, + { 0x2E11, 71642 }, + { 0x2E12, 71656 }, + { 0x2E13, 71649 }, + { 0x2E14, 71575 }, + { 0x2E15, 71676 }, + { 0x2E16, 71672 }, + { 0x2E17, 71586 }, + { 0x2E18, 60540 }, + { 0x2E19, 72052 }, + { 0x2E1A, 72064 }, + { 0x2E1B, 72142 }, + { 0x2E1C, 72076 }, + { 0x2E1D, 72073 }, + { 0x2E1E, 72055 }, + { 0x2E1F, 72133 }, + { 0x2E20, 72115 }, + { 0x2E21, 72103 }, + { 0x2E22, 72061 }, + { 0x2E23, 72097 }, + { 0x2E24, 72070 }, + { 0x2E25, 72145 }, + { 0x2E26, 72109 }, + { 0x2E27, 72121 }, + { 0x2E28, 72112 }, + { 0x2E29, 72058 }, + { 0x2E2A, 72136 }, + { 0x2E2B, 72079 }, + { 0x2E2C, 72166 }, + { 0x2E2D, 72100 }, + { 0x2E2E, 72169 }, + { 0x2E2F, 72199 }, + { 0x2E30, 72211 }, + { 0x2E31, 72118 }, + { 0x2E32, 72160 }, + { 0x2E33, 72094 }, + { 0x2E34, 72154 }, + { 0x2E35, 72187 }, + { 0x2E36, 72196 }, + { 0x2E37, 72127 }, + { 0x2E38, 72193 }, + { 0x2E39, 72085 }, + { 0x2E3A, 72106 }, + { 0x2E3B, 72067 }, + { 0x2E3C, 72163 }, + { 0x2E3D, 72082 }, + { 0x2E3E, 72151 }, + { 0x2E3F, 72049 }, + { 0x2E40, 72091 }, + { 0x2E41, 72130 }, + { 0x2E42, 72175 }, + { 0x2E43, 72181 }, + { 0x2E44, 72139 }, + { 0x2E45, 72202 }, + { 0x2E46, 72205 }, + { 0x2E47, 72184 }, + { 0x2E48, 72172 }, + { 0x2E49, 72124 }, + { 0x2E4A, 71771 }, + { 0x2E4B, 71795 }, + { 0x2E4C, 71791 }, + { 0x2E4D, 71787 }, + { 0x2E4E, 71698 }, + { 0x2E4F, 71707 }, + { 0x2E50, 71715 }, + { 0x2E51, 71739 }, + { 0x2E52, 71723 }, + { 0x2E53, 71719 }, + { 0x2E54, 71711 }, + { 0x2E55, 71735 }, + { 0x2E56, 71731 }, + { 0x2E57, 71727 }, + { 0x2E58, 71689 }, + { 0x2E59, 133644 }, + { 0x2E5A, 133659 }, + { 0x2E5B, 133634 }, + { 0x2E5C, 133629 }, + { 0x2E5D, 133464 }, + { 0x2E5E, 133624 }, + { 0x2E5F, 133619 }, + { 0x2E60, 133639 }, + { 0x2E61, 133669 }, + { 0x2E62, 133649 }, + { 0x2E63, 133664 }, + { 0x2E64, 133654 }, + { 0x2E65, 65041 }, + { 0x2E66, 65208 }, + { 0x2E67, 65031 }, + { 0x2E68, 74241 }, + { 0x2E69, 71898 }, + { 0x2E6A, 71904 }, + { 0x2E6B, 71910 }, + { 0x2E6C, 71901 }, + { 0x2E6D, 71907 }, + { 0x2E6E, 71928 }, + { 0x2E6F, 71934 }, + { 0x2E70, 71940 }, + { 0x2E71, 71931 }, + { 0x2E72, 71937 }, + { 0x2E73, 71988 }, + { 0x2E74, 71994 }, + { 0x2E75, 72000 }, + { 0x2E76, 71991 }, + { 0x2E77, 71997 }, + { 0x2E78, 72003 }, + { 0x2E79, 72009 }, + { 0x2E7A, 72015 }, + { 0x2E7B, 72006 }, + { 0x2E7C, 72012 }, + { 0x2E7D, 71958 }, + { 0x2E7E, 71964 }, + { 0x2E7F, 71970 }, + { 0x2E80, 71961 }, + { 0x2E81, 71967 }, + { 0x2E82, 71913 }, + { 0x2E83, 71919 }, + { 0x2E84, 71925 }, + { 0x2E85, 71916 }, + { 0x2E86, 71922 }, + { 0x2E87, 71943 }, + { 0x2E88, 71949 }, + { 0x2E89, 71955 }, + { 0x2E8A, 71946 }, + { 0x2E8B, 71952 }, + { 0x2E8C, 72030 }, + { 0x2E8D, 72036 }, + { 0x2E8E, 72033 }, + { 0x2E8F, 71973 }, + { 0x2E90, 71979 }, + { 0x2E91, 71985 }, + { 0x2E92, 71976 }, + { 0x2E93, 71982 }, + { 0x2E94, 72018 }, + { 0x2E95, 72024 }, + { 0x2E96, 72021 }, + { 0x2E97, 72027 }, + { 0x2E98, 65192 }, + { 0x2E99, 65475 }, + { 0x2E9A, 65477 }, + { 0x2E9B, 65402 }, + { 0x2E9C, 65253 }, + { 0x2E9D, 65487 }, + { 0x2E9E, 65283 }, + { 0x2E9F, 65251 }, + { 0x2EA0, 65557 }, + { 0x2EA1, 65408 }, + { 0x2EA2, 65300 }, + { 0x2EA3, 65302 }, + { 0x2EA4, 65438 }, + { 0x2EA5, 65527 }, + { 0x2EA6, 65529 }, + { 0x2EA7, 65412 }, + { 0x2EA8, 65410 }, + { 0x2EA9, 65279 }, + { 0x2EAA, 65414 }, + { 0x2EAB, 65491 }, + { 0x2EAC, 65525 }, + { 0x2EAD, 65287 }, + { 0x2EAE, 65601 }, + { 0x2EAF, 65605 }, + { 0x2EB0, 65593 }, + { 0x2EB1, 65481 }, + { 0x2EB2, 65589 }, + { 0x2EB3, 65595 }, + { 0x2EB4, 65531 }, + { 0x2EB5, 65440 }, + { 0x2EB6, 65489 }, + { 0x2EB7, 65442 }, + { 0x2EB8, 65549 }, + { 0x2EB9, 65587 }, + { 0x2EBA, 65551 }, + { 0x2EBB, 65465 }, + { 0x2EBC, 65467 }, + { 0x2EBD, 65406 }, + { 0x2EBE, 65257 }, + { 0x2EBF, 65259 }, + { 0x2EC0, 65249 }, + { 0x2EC1, 65298 }, + { 0x2EC2, 65448 }, + { 0x2EC3, 65416 }, + { 0x2EC4, 65580 }, + { 0x2EC5, 65450 }, + { 0x2EC6, 65523 }, + { 0x2EC7, 65599 }, + { 0x2EC8, 65497 }, + { 0x2EC9, 65306 }, + { 0x2ECA, 65255 }, + { 0x2ECB, 65562 }, + { 0x2ECC, 65485 }, + { 0x2ECD, 65555 }, + { 0x2ECE, 65420 }, + { 0x2ECF, 65591 }, + { 0x2ED0, 65304 }, + { 0x2ED1, 65495 }, + { 0x2ED2, 65483 }, + { 0x2ED3, 65454 }, + { 0x2ED4, 65452 }, + { 0x2ED5, 65404 }, + { 0x2ED6, 65499 }, + { 0x2ED7, 65479 }, + { 0x2ED8, 65216 }, + { 0x2ED9, 65456 }, + { 0x2EDA, 65418 }, + { 0x2EDB, 65281 }, + { 0x2EDC, 65535 }, + { 0x2EDD, 65446 }, + { 0x2EDE, 65444 }, + { 0x2EDF, 65493 }, + { 0x2EE0, 65537 }, + { 0x2EE1, 65543 }, + { 0x2EE2, 65296 }, + { 0x2EE3, 65597 }, + { 0x2EE4, 65294 }, + { 0x2EE5, 65541 }, + { 0x2EE6, 65539 }, + { 0x2EE7, 65471 }, + { 0x2EE8, 65473 }, + { 0x2EE9, 65400 }, + { 0x2EEA, 65545 }, + { 0x2EEB, 65310 }, + { 0x2EEC, 65463 }, + { 0x2EED, 65547 }, + { 0x2EEE, 65308 }, + { 0x2EEF, 65585 }, + { 0x2EF0, 65469 }, + { 0x2EF1, 133511 }, + { 0x2EF2, 133469 }, + { 0x2EF3, 133487 }, + { 0x2EF4, 133529 }, + { 0x2EF5, 133499 }, + { 0x2EF6, 133493 }, + { 0x2EF7, 133475 }, + { 0x2EF8, 133523 }, + { 0x2EF9, 133517 }, + { 0x2EFA, 133505 }, + { 0x2EFB, 133481 }, + { 0x2EFC, 133535 }, + { 0x2EFD, 133541 }, + { 0x2EFE, 133583 }, + { 0x2EFF, 133571 }, + { 0x2F00, 133553 }, + { 0x2F01, 133559 }, + { 0x2F02, 133589 }, + { 0x2F03, 133565 }, + { 0x2F04, 133577 }, + { 0x2F05, 133547 }, + { 0x2F06, 133595 }, + { 0x2F07, 133601 }, + { 0x2F08, 133613 }, + { 0x2F09, 133607 }, + { 0x2F0A, 65218 }, + { 0x2F0B, 65015 }, + { 0x2F0C, 64997 }, + { 0x2F0D, 65180 }, + { 0x2F0E, 65151 }, + { 0x2F0F, 65158 }, + { 0x2F10, 65023 }, + { 0x2F11, 65028 }, + { 0x2F12, 65025 }, + { 0x2F13, 65049 }, + { 0x2F14, 65196 }, + { 0x2F15, 65200 }, + { 0x2F16, 65204 }, + { 0x2F17, 65188 }, + { 0x2F18, 65603 }, + { 0x2F19, 65155 }, + { 0x2F1A, 65139 }, + { 0x2F1B, 65105 }, + { 0x2F1C, 65084 }, + { 0x2F1D, 65051 }, + { 0x2F1E, 65053 }, + { 0x2F1F, 65086 }, + { 0x2F20, 65035 }, + { 0x2F21, 65182 }, + { 0x2F22, 65285 }, + { 0x2F23, 65160 }, + { 0x2F24, 65141 }, + { 0x2F25, 65108 }, + { 0x2F26, 65111 }, + { 0x2F27, 65091 }, + { 0x2F28, 65055 }, + { 0x2F29, 65045 }, + { 0x2F2A, 65220 }, + { 0x2F2B, 65226 }, + { 0x2F2C, 65212 }, + { 0x2F2D, 65247 }, + { 0x2F2E, 65114 }, + { 0x2F2F, 65093 }, + { 0x2F30, 65021 }, + { 0x2F31, 65059 }, + { 0x2F32, 65033 }, + { 0x2F33, 65143 }, + { 0x2F34, 65117 }, + { 0x2F35, 65095 }, + { 0x2F36, 65005 }, + { 0x2F37, 65061 }, + { 0x2F38, 65100 }, + { 0x2F39, 65010 }, + { 0x2F3A, 64988 }, + { 0x2F3B, 65069 }, + { 0x2F3C, 65097 }, + { 0x2F3D, 65007 }, + { 0x2F3E, 64985 }, + { 0x2F3F, 65063 }, + { 0x2F40, 64976 }, + { 0x2F41, 64980 }, + { 0x2F42, 65153 }, + { 0x2F43, 65222 }, + { 0x2F44, 65232 }, + { 0x2F45, 65214 }, + { 0x2F46, 65236 }, + { 0x2F47, 65238 }, + { 0x2F48, 65242 }, + { 0x2F49, 65168 }, + { 0x2F4A, 65145 }, + { 0x2F4B, 65120 }, + { 0x2F4C, 65103 }, + { 0x2F4D, 65170 }, + { 0x2F4E, 65147 }, + { 0x2F4F, 65123 }, + { 0x2F50, 65129 }, + { 0x2F51, 65074 }, + { 0x2F52, 65131 }, + { 0x2F53, 65172 }, + { 0x2F54, 65149 }, + { 0x2F55, 65126 }, + { 0x2F56, 65134 }, + { 0x2F57, 65076 }, + { 0x2F58, 65136 }, + { 0x2F59, 64970 }, + { 0x2F5A, 64973 }, + { 0x2F5B, 64995 }, + { 0x2F5C, 64999 }, + { 0x2F5D, 65001 }, + { 0x2F5E, 65003 }, + { 0x2F5F, 64966 }, + { 0x2F60, 65013 }, + { 0x2F61, 65017 }, + { 0x2F62, 65037 }, + { 0x2F63, 65039 }, + { 0x2F64, 65043 }, + { 0x2F65, 65047 }, + { 0x2F66, 65057 }, + { 0x2F67, 65066 }, + { 0x2F68, 65072 }, + { 0x2F69, 65078 }, + { 0x2F6A, 65080 }, + { 0x2F6B, 65224 }, + { 0x2F6C, 65082 }, + { 0x2F6D, 65088 }, + { 0x2F6E, 65228 }, + { 0x2F6F, 65230 }, + { 0x2F70, 65162 }, + { 0x2F71, 65164 }, + { 0x2F72, 65234 }, + { 0x2F73, 65166 }, + { 0x2F74, 65174 }, + { 0x2F75, 65176 }, + { 0x2F76, 65178 }, + { 0x2F77, 64991 }, + { 0x2F78, 64962 }, + { 0x2F79, 133278 }, + { 0x2F7A, 133296 }, + { 0x2F7B, 133332 }, + { 0x2F7C, 133308 }, + { 0x2F7D, 133302 }, + { 0x2F7E, 133284 }, + { 0x2F7F, 133326 }, + { 0x2F80, 133320 }, + { 0x2F81, 133314 }, + { 0x2F82, 133290 }, + { 0x2F83, 133338 }, + { 0x2F84, 133350 }, + { 0x2F85, 133392 }, + { 0x2F86, 133380 }, + { 0x2F87, 133362 }, + { 0x2F88, 133368 }, + { 0x2F89, 133398 }, + { 0x2F8A, 133374 }, + { 0x2F8B, 133386 }, + { 0x2F8C, 133356 }, + { 0x2F8D, 133410 }, + { 0x2F8E, 133422 }, + { 0x2F8F, 133458 }, + { 0x2F90, 133434 }, + { 0x2F91, 133428 }, + { 0x2F92, 133416 }, + { 0x2F93, 133452 }, + { 0x2F94, 133446 }, + { 0x2F95, 133440 }, + { 0x2F96, 133344 }, + { 0x2F97, 133404 }, + { 0x2F98, 65210 }, + { 0x2F99, 104841 }, + { 0x2F9A, 104855 }, + { 0x2F9B, 104992 }, + { 0x2F9C, 104962 }, + { 0x2F9D, 104938 }, + { 0x2F9E, 104944 }, + { 0x2F9F, 104794 }, + { 0x2FA0, 104924 }, + { 0x2FA1, 104900 }, + { 0x2FA2, 104959 }, + { 0x2FA3, 104897 }, + { 0x2FA4, 105019 }, + { 0x2FA5, 105004 }, + { 0x2FA6, 104881 }, + { 0x2FA7, 104928 }, + { 0x2FA8, 105001 }, + { 0x2FA9, 104975 }, + { 0x2FAA, 104860 }, + { 0x2FAB, 104941 }, + { 0x2FAC, 105034 }, + { 0x2FAD, 104912 }, + { 0x2FAE, 104870 }, + { 0x2FAF, 104988 }, + { 0x2FB0, 104921 }, + { 0x2FB1, 104985 }, + { 0x2FB2, 104877 }, + { 0x2FB3, 104893 }, + { 0x2FB4, 104885 }, + { 0x2FB5, 104816 }, + { 0x2FB6, 104836 }, + { 0x2FB7, 104982 }, + { 0x2FB8, 104950 }, + { 0x2FB9, 104935 }, + { 0x2FBA, 104873 }, + { 0x2FBB, 104956 }, + { 0x2FBC, 104969 }, + { 0x2FBD, 104802 }, + { 0x2FBE, 105010 }, + { 0x2FBF, 105028 }, + { 0x2FC0, 105022 }, + { 0x2FC1, 104947 }, + { 0x2FC2, 104953 }, + { 0x2FC3, 105031 }, + { 0x2FC4, 104916 }, + { 0x2FC5, 104978 }, + { 0x2FC6, 104931 }, + { 0x2FC7, 105013 }, + { 0x2FC8, 104798 }, + { 0x2FC9, 105016 }, + { 0x2FCA, 104832 }, + { 0x2FCB, 104827 }, + { 0x2FCC, 104821 }, + { 0x2FCD, 105025 }, + { 0x2FCE, 104846 }, + { 0x2FCF, 104966 }, + { 0x2FD0, 104851 }, + { 0x2FD1, 104806 }, + { 0x2FD2, 104811 }, + { 0x2FD3, 104998 }, + { 0x2FD4, 105007 }, + { 0x2FD5, 104889 }, + { 0x2FD6, 104904 }, + { 0x2FD7, 104866 }, + { 0x2FD8, 104908 }, + { 0x2FD9, 872 }, + { 0x2FDA, 875 }, + { 0x2FDB, 758 }, + { 0x2FDC, 869 }, + { 0x2FDD, 1538 }, + { 0x2FDE, 1541 }, + { 0x2FDF, 866 }, + { 0x2FE0, 1535 }, + { 0x2FE1, 767 }, + { 0x2FE2, 770 }, + { 0x2FE3, 752 }, + { 0x2FE4, 764 }, + { 0x2FE5, 2249 }, + { 0x2FE6, 1040 }, + { 0x2FE7, 2246 }, + { 0x2FE8, 959 }, + { 0x2FE9, 962 }, + { 0x2FEA, 761 }, + { 0x2FEB, 956 }, + { 0x2FEC, 824 }, + { 0x2FED, 755 }, + { 0x2FEE, 1067 }, + { 0x2FEF, 1148 }, + { 0x2FF0, 1151 }, + { 0x2FF1, 779 }, + { 0x2FF2, 1145 }, + { 0x2FF3, 2579 }, + { 0x2FF4, 2582 }, + { 0x2FF5, 1142 }, + { 0x2FF6, 2576 }, + { 0x2FF7, 1112 }, + { 0x2FF8, 1115 }, + { 0x2FF9, 773 }, + { 0x2FFA, 1109 }, + { 0x2FFB, 2588 }, + { 0x2FFC, 1163 }, + { 0x2FFD, 2585 }, + { 0x2FFE, 1157 }, + { 0x2FFF, 1160 }, + { 0x3000, 782 }, + { 0x3001, 1154 }, + { 0x3002, 1139 }, + { 0x3003, 776 }, + { 0x3004, 1136 }, + { 0x3005, 1172 }, + { 0x3006, 1175 }, + { 0x3007, 785 }, + { 0x3008, 1166 }, + { 0x3009, 2591 }, + { 0x300A, 1169 }, + { 0x300B, 1184 }, + { 0x300C, 1187 }, + { 0x300D, 788 }, + { 0x300E, 1178 }, + { 0x300F, 2594 }, + { 0x3010, 1181 }, + { 0x3011, 1943 }, + { 0x3012, 1946 }, + { 0x3013, 968 }, + { 0x3014, 1940 }, + { 0x3015, 3512 }, + { 0x3016, 1937 }, + { 0x3017, 3509 }, + { 0x3018, 1931 }, + { 0x3019, 1934 }, + { 0x301A, 965 }, + { 0x301B, 1928 }, + { 0x301C, 3518 }, + { 0x301D, 1958 }, + { 0x301E, 3515 }, + { 0x301F, 1952 }, + { 0x3020, 1955 }, + { 0x3021, 971 }, + { 0x3022, 1949 }, + { 0x3023, 1967 }, + { 0x3024, 1970 }, + { 0x3025, 974 }, + { 0x3026, 1961 }, + { 0x3027, 3521 }, + { 0x3028, 1964 }, + { 0x3029, 1979 }, + { 0x302A, 1982 }, + { 0x302B, 977 }, + { 0x302C, 1973 }, + { 0x302D, 3524 }, + { 0x302E, 1976 }, + { 0x302F, 2537 }, + { 0x3030, 2540 }, + { 0x3031, 1124 }, + { 0x3032, 2534 }, + { 0x3033, 3947 }, + { 0x3034, 3950 }, + { 0x3035, 2531 }, + { 0x3036, 3944 }, + { 0x3037, 2519 }, + { 0x3038, 2522 }, + { 0x3039, 1118 }, + { 0x303A, 2516 }, + { 0x303B, 3956 }, + { 0x303C, 2552 }, + { 0x303D, 3953 }, + { 0x303E, 2546 }, + { 0x303F, 2549 }, + { 0x3040, 1127 }, + { 0x3041, 2543 }, + { 0x3042, 2528 }, + { 0x3043, 1121 }, + { 0x3044, 2525 }, + { 0x3045, 2561 }, + { 0x3046, 2564 }, + { 0x3047, 1130 }, + { 0x3048, 2555 }, + { 0x3049, 3959 }, + { 0x304A, 2558 }, + { 0x304B, 2570 }, + { 0x304C, 2573 }, + { 0x304D, 1133 }, + { 0x304E, 2567 }, + { 0x304F, 3197 }, + { 0x3050, 3200 }, + { 0x3051, 1799 }, + { 0x3052, 3194 }, + { 0x3053, 4109 }, + { 0x3054, 3191 }, + { 0x3055, 4106 }, + { 0x3056, 3185 }, + { 0x3057, 3188 }, + { 0x3058, 1796 }, + { 0x3059, 3182 }, + { 0x305A, 3206 }, + { 0x305B, 3209 }, + { 0x305C, 1802 }, + { 0x305D, 3203 }, + { 0x305E, 3218 }, + { 0x305F, 3221 }, + { 0x3060, 1805 }, + { 0x3061, 3212 }, + { 0x3062, 4112 }, + { 0x3063, 3215 }, + { 0x3064, 3230 }, + { 0x3065, 3233 }, + { 0x3066, 1808 }, + { 0x3067, 3224 }, + { 0x3068, 4115 }, + { 0x3069, 3227 }, + { 0x306A, 2885 }, + { 0x306B, 2888 }, + { 0x306C, 1490 }, + { 0x306D, 2882 }, + { 0x306E, 4031 }, + { 0x306F, 2879 }, + { 0x3070, 4028 }, + { 0x3071, 2873 }, + { 0x3072, 2876 }, + { 0x3073, 1487 }, + { 0x3074, 2870 }, + { 0x3075, 4037 }, + { 0x3076, 2900 }, + { 0x3077, 4034 }, + { 0x3078, 2894 }, + { 0x3079, 2897 }, + { 0x307A, 1493 }, + { 0x307B, 2891 }, + { 0x307C, 2909 }, + { 0x307D, 2912 }, + { 0x307E, 1496 }, + { 0x307F, 2903 }, + { 0x3080, 4040 }, + { 0x3081, 2906 }, + { 0x3082, 2921 }, + { 0x3083, 1499 }, + { 0x3084, 2915 }, + { 0x3085, 4043 }, + { 0x3086, 2918 }, + { 0x3087, 1751 }, + { 0x3088, 1754 }, + { 0x3089, 929 }, + { 0x308A, 1748 }, + { 0x308B, 3167 }, + { 0x308C, 1745 }, + { 0x308D, 3164 }, + { 0x308E, 1724 }, + { 0x308F, 1727 }, + { 0x3090, 923 }, + { 0x3091, 1721 }, + { 0x3092, 3173 }, + { 0x3093, 3176 }, + { 0x3094, 1766 }, + { 0x3095, 3170 }, + { 0x3096, 1760 }, + { 0x3097, 1763 }, + { 0x3098, 932 }, + { 0x3099, 1757 }, + { 0x309A, 1730 }, + { 0x309B, 926 }, + { 0x309C, 1775 }, + { 0x309D, 1778 }, + { 0x309E, 935 }, + { 0x309F, 1769 }, + { 0x30A0, 3179 }, + { 0x30A1, 1772 }, + { 0x30A2, 1784 }, + { 0x30A3, 1787 }, + { 0x30A4, 938 }, + { 0x30A5, 1781 }, + { 0x30A6, 1346 }, + { 0x30A7, 1349 }, + { 0x30A8, 830 }, + { 0x30A9, 1343 }, + { 0x30AA, 1337 }, + { 0x30AB, 1340 }, + { 0x30AC, 827 }, + { 0x30AD, 1334 }, + { 0x30AE, 1355 }, + { 0x30AF, 833 }, + { 0x30B0, 1352 }, + { 0x30B1, 1364 }, + { 0x30B2, 1367 }, + { 0x30B3, 836 }, + { 0x30B4, 1358 }, + { 0x30B5, 2732 }, + { 0x30B6, 1361 }, + { 0x30B7, 1373 }, + { 0x30B8, 1376 }, + { 0x30B9, 839 }, + { 0x30BA, 1370 }, + { 0x30BB, 2273 }, + { 0x30BC, 2276 }, + { 0x30BD, 1046 }, + { 0x30BE, 2270 }, + { 0x30BF, 3761 }, + { 0x30C0, 3764 }, + { 0x30C1, 2267 }, + { 0x30C2, 3758 }, + { 0x30C3, 2255 }, + { 0x30C4, 2258 }, + { 0x30C5, 1043 }, + { 0x30C6, 2252 }, + { 0x30C7, 2282 }, + { 0x30C8, 2285 }, + { 0x30C9, 1049 }, + { 0x30CA, 2279 }, + { 0x30CB, 2264 }, + { 0x30CC, 2261 }, + { 0x30CD, 2294 }, + { 0x30CE, 2297 }, + { 0x30CF, 1052 }, + { 0x30D0, 2288 }, + { 0x30D1, 3767 }, + { 0x30D2, 2291 }, + { 0x30D3, 2306 }, + { 0x30D4, 2309 }, + { 0x30D5, 1055 }, + { 0x30D6, 2300 }, + { 0x30D7, 3770 }, + { 0x30D8, 2303 }, + { 0x30D9, 1304 }, + { 0x30DA, 1307 }, + { 0x30DB, 815 }, + { 0x30DC, 1301 }, + { 0x30DD, 2723 }, + { 0x30DE, 1298 }, + { 0x30DF, 2720 }, + { 0x30E0, 1271 }, + { 0x30E1, 1274 }, + { 0x30E2, 809 }, + { 0x30E3, 1268 }, + { 0x30E4, 2726 }, + { 0x30E5, 1319 }, + { 0x30E6, 1313 }, + { 0x30E7, 1316 }, + { 0x30E8, 818 }, + { 0x30E9, 1310 }, + { 0x30EA, 1295 }, + { 0x30EB, 812 }, + { 0x30EC, 1292 }, + { 0x30ED, 1328 }, + { 0x30EE, 1331 }, + { 0x30EF, 821 }, + { 0x30F0, 1322 }, + { 0x30F1, 2729 }, + { 0x30F2, 1325 }, + { 0x30F3, 2216 }, + { 0x30F4, 2219 }, + { 0x30F5, 1031 }, + { 0x30F6, 2213 }, + { 0x30F7, 3743 }, + { 0x30F8, 2210 }, + { 0x30F9, 3740 }, + { 0x30FA, 2198 }, + { 0x30FB, 2201 }, + { 0x30FC, 1025 }, + { 0x30FD, 2195 }, + { 0x30FE, 3749 }, + { 0x30FF, 3752 }, + { 0x3100, 2231 }, + { 0x3101, 3746 }, + { 0x3102, 2225 }, + { 0x3103, 2228 }, + { 0x3104, 1034 }, + { 0x3105, 2222 }, + { 0x3106, 2207 }, + { 0x3107, 1028 }, + { 0x3108, 2204 }, + { 0x3109, 2240 }, + { 0x310A, 2243 }, + { 0x310B, 1037 }, + { 0x310C, 2234 }, + { 0x310D, 3755 }, + { 0x310E, 2237 }, + { 0x310F, 2690 }, + { 0x3110, 2693 }, + { 0x3111, 1283 }, + { 0x3112, 2687 }, + { 0x3113, 3980 }, + { 0x3114, 2684 }, + { 0x3115, 3977 }, + { 0x3116, 2672 }, + { 0x3117, 2675 }, + { 0x3118, 1277 }, + { 0x3119, 2669 }, + { 0x311A, 3986 }, + { 0x311B, 2705 }, + { 0x311C, 3983 }, + { 0x311D, 2699 }, + { 0x311E, 2702 }, + { 0x311F, 1286 }, + { 0x3120, 2696 }, + { 0x3121, 2681 }, + { 0x3122, 1280 }, + { 0x3123, 2678 }, + { 0x3124, 2714 }, + { 0x3125, 2717 }, + { 0x3126, 1289 }, + { 0x3127, 2708 }, + { 0x3128, 3989 }, + { 0x3129, 2711 }, + { 0x312A, 3257 }, + { 0x312B, 3260 }, + { 0x312C, 1817 }, + { 0x312D, 3254 }, + { 0x312E, 4118 }, + { 0x312F, 3251 }, + { 0x3130, 3239 }, + { 0x3131, 3242 }, + { 0x3132, 1811 }, + { 0x3133, 3236 }, + { 0x3134, 3266 }, + { 0x3135, 3269 }, + { 0x3136, 1820 }, + { 0x3137, 3263 }, + { 0x3138, 3248 }, + { 0x3139, 1814 }, + { 0x313A, 3245 }, + { 0x313B, 3278 }, + { 0x313C, 3281 }, + { 0x313D, 1823 }, + { 0x313E, 3272 }, + { 0x313F, 4121 }, + { 0x3140, 3275 }, + { 0x3141, 2945 }, + { 0x3142, 2948 }, + { 0x3143, 1508 }, + { 0x3144, 2942 }, + { 0x3145, 4049 }, + { 0x3146, 4052 }, + { 0x3147, 2939 }, + { 0x3148, 4046 }, + { 0x3149, 2927 }, + { 0x314A, 2930 }, + { 0x314B, 1502 }, + { 0x314C, 2924 }, + { 0x314D, 4055 }, + { 0x314E, 2960 }, + { 0x314F, 2954 }, + { 0x3150, 2957 }, + { 0x3151, 2951 }, + { 0x3152, 2936 }, + { 0x3153, 1505 }, + { 0x3154, 2933 }, + { 0x3155, 2963 }, + { 0x3156, 1847 }, + { 0x3157, 1850 }, + { 0x3158, 947 }, + { 0x3159, 1844 }, + { 0x315A, 3317 }, + { 0x315B, 1841 }, + { 0x315C, 3314 }, + { 0x315D, 1793 }, + { 0x315E, 941 }, + { 0x315F, 1790 }, + { 0x3160, 3416 }, + { 0x3161, 1889 }, + { 0x3162, 3413 }, + { 0x3163, 1868 }, + { 0x3164, 1871 }, + { 0x3165, 950 }, + { 0x3166, 1865 }, + { 0x3167, 1829 }, + { 0x3168, 944 }, + { 0x3169, 1826 }, + { 0x316A, 1898 }, + { 0x316B, 1901 }, + { 0x316C, 953 }, + { 0x316D, 1892 }, + { 0x316E, 3419 }, + { 0x316F, 1895 }, + { 0x3170, 2831 }, + { 0x3171, 2834 }, + { 0x3172, 1475 }, + { 0x3173, 2828 }, + { 0x3174, 4013 }, + { 0x3175, 2825 }, + { 0x3176, 4010 }, + { 0x3177, 2813 }, + { 0x3178, 2816 }, + { 0x3179, 1469 }, + { 0x317A, 2810 }, + { 0x317B, 4019 }, + { 0x317C, 2843 }, + { 0x317D, 4016 }, + { 0x317E, 2840 }, + { 0x317F, 1478 }, + { 0x3180, 2837 }, + { 0x3181, 2822 }, + { 0x3182, 1472 }, + { 0x3183, 2819 }, + { 0x3184, 2852 }, + { 0x3185, 2855 }, + { 0x3186, 1481 }, + { 0x3187, 2846 }, + { 0x3188, 4022 }, + { 0x3189, 2849 }, + { 0x318A, 2864 }, + { 0x318B, 2867 }, + { 0x318C, 1484 }, + { 0x318D, 2858 }, + { 0x318E, 4025 }, + { 0x318F, 2861 }, + { 0x3190, 1679 }, + { 0x3191, 1682 }, + { 0x3192, 911 }, + { 0x3193, 1676 }, + { 0x3194, 3101 }, + { 0x3195, 3104 }, + { 0x3196, 1673 }, + { 0x3197, 3098 }, + { 0x3198, 1661 }, + { 0x3199, 1664 }, + { 0x319A, 905 }, + { 0x319B, 1658 }, + { 0x319C, 3110 }, + { 0x319D, 3113 }, + { 0x319E, 1694 }, + { 0x319F, 3107 }, + { 0x31A0, 1688 }, + { 0x31A1, 1691 }, + { 0x31A2, 914 }, + { 0x31A3, 1685 }, + { 0x31A4, 1670 }, + { 0x31A5, 908 }, + { 0x31A6, 1667 }, + { 0x31A7, 1703 }, + { 0x31A8, 1706 }, + { 0x31A9, 917 }, + { 0x31AA, 1697 }, + { 0x31AB, 3116 }, + { 0x31AC, 1700 }, + { 0x31AD, 1715 }, + { 0x31AE, 1718 }, + { 0x31AF, 920 }, + { 0x31B0, 1709 }, + { 0x31B1, 3119 }, + { 0x31B2, 1712 }, + { 0x31B3, 1418 }, + { 0x31B4, 1421 }, + { 0x31B5, 848 }, + { 0x31B6, 1415 }, + { 0x31B7, 2789 }, + { 0x31B8, 2792 }, + { 0x31B9, 1412 }, + { 0x31BA, 2786 }, + { 0x31BB, 1382 }, + { 0x31BC, 1385 }, + { 0x31BD, 842 }, + { 0x31BE, 1379 }, + { 0x31BF, 2798 }, + { 0x31C0, 2801 }, + { 0x31C1, 1433 }, + { 0x31C2, 2795 }, + { 0x31C3, 1427 }, + { 0x31C4, 1430 }, + { 0x31C5, 851 }, + { 0x31C6, 1424 }, + { 0x31C7, 1391 }, + { 0x31C8, 1394 }, + { 0x31C9, 845 }, + { 0x31CA, 1388 }, + { 0x31CB, 1442 }, + { 0x31CC, 1445 }, + { 0x31CD, 854 }, + { 0x31CE, 1436 }, + { 0x31CF, 2804 }, + { 0x31D0, 1439 }, + { 0x31D1, 1628 }, + { 0x31D2, 1631 }, + { 0x31D3, 896 }, + { 0x31D4, 1625 }, + { 0x31D5, 3086 }, + { 0x31D6, 1622 }, + { 0x31D7, 3083 }, + { 0x31D8, 1607 }, + { 0x31D9, 1610 }, + { 0x31DA, 890 }, + { 0x31DB, 1604 }, + { 0x31DC, 3092 }, + { 0x31DD, 1643 }, + { 0x31DE, 3089 }, + { 0x31DF, 1637 }, + { 0x31E0, 1640 }, + { 0x31E1, 899 }, + { 0x31E2, 1634 }, + { 0x31E3, 1616 }, + { 0x31E4, 1619 }, + { 0x31E5, 893 }, + { 0x31E6, 1613 }, + { 0x31E7, 1652 }, + { 0x31E8, 1655 }, + { 0x31E9, 902 }, + { 0x31EA, 1646 }, + { 0x31EB, 3095 }, + { 0x31EC, 1649 }, + { 0x31ED, 2756 }, + { 0x31EE, 2759 }, + { 0x31EF, 1403 }, + { 0x31F0, 3995 }, + { 0x31F1, 2753 }, + { 0x31F2, 3992 }, + { 0x31F3, 2738 }, + { 0x31F4, 2741 }, + { 0x31F5, 1397 }, + { 0x31F6, 2735 }, + { 0x31F7, 4001 }, + { 0x31F8, 4004 }, + { 0x31F9, 2771 }, + { 0x31FA, 3998 }, + { 0x31FB, 2765 }, + { 0x31FC, 2768 }, + { 0x31FD, 1406 }, + { 0x31FE, 2762 }, + { 0x31FF, 2747 }, + { 0x3200, 2750 }, + { 0x3201, 1400 }, + { 0x3202, 2744 }, + { 0x3203, 2780 }, + { 0x3204, 2783 }, + { 0x3205, 1409 }, + { 0x3206, 2774 }, + { 0x3207, 4007 }, + { 0x3208, 2777 }, + { 0x3209, 4094 }, + { 0x320A, 3137 }, + { 0x320B, 3125 }, + { 0x320C, 3128 }, + { 0x320D, 1733 }, + { 0x320E, 3122 }, + { 0x320F, 4100 }, + { 0x3210, 3149 }, + { 0x3211, 4097 }, + { 0x3212, 3143 }, + { 0x3213, 3146 }, + { 0x3214, 1739 }, + { 0x3215, 3140 }, + { 0x3216, 3134 }, + { 0x3217, 1736 }, + { 0x3218, 3131 }, + { 0x3219, 3158 }, + { 0x321A, 3161 }, + { 0x321B, 1742 }, + { 0x321C, 3152 }, + { 0x321D, 4103 }, + { 0x321E, 3155 }, + { 0x321F, 2996 }, + { 0x3220, 2999 }, + { 0x3221, 1529 }, + { 0x3222, 2993 }, + { 0x3223, 4061 }, + { 0x3224, 4064 }, + { 0x3225, 2990 }, + { 0x3226, 4058 }, + { 0x3227, 2978 }, + { 0x3228, 2981 }, + { 0x3229, 1523 }, + { 0x322A, 2975 }, + { 0x322B, 4070 }, + { 0x322C, 4073 }, + { 0x322D, 3011 }, + { 0x322E, 4067 }, + { 0x322F, 3005 }, + { 0x3230, 3008 }, + { 0x3231, 1532 }, + { 0x3232, 3002 }, + { 0x3233, 2987 }, + { 0x3234, 1526 }, + { 0x3235, 2984 }, + { 0x3236, 4127 }, + { 0x3237, 3299 }, + { 0x3238, 4124 }, + { 0x3239, 3287 }, + { 0x323A, 3290 }, + { 0x323B, 1832 }, + { 0x323C, 3284 }, + { 0x323D, 4130 }, + { 0x323E, 4133 }, + { 0x323F, 3311 }, + { 0x3240, 3305 }, + { 0x3241, 3308 }, + { 0x3242, 1838 }, + { 0x3243, 3302 }, + { 0x3244, 3296 }, + { 0x3245, 1835 }, + { 0x3246, 3293 }, + { 0x3247, 1466 }, + { 0x3248, 2807 }, + { 0x3249, 1463 }, + { 0x324A, 1451 }, + { 0x324B, 1454 }, + { 0x324C, 857 }, + { 0x324D, 1448 }, + { 0x324E, 2969 }, + { 0x324F, 2972 }, + { 0x3250, 1520 }, + { 0x3251, 2966 }, + { 0x3252, 1514 }, + { 0x3253, 1517 }, + { 0x3254, 863 }, + { 0x3255, 1511 }, + { 0x3256, 1460 }, + { 0x3257, 860 }, + { 0x3258, 1457 }, + { 0x3259, 2315 }, + { 0x325A, 2318 }, + { 0x325B, 1058 }, + { 0x325C, 2312 }, + { 0x325D, 3776 }, + { 0x325E, 2333 }, + { 0x325F, 3773 }, + { 0x3260, 2330 }, + { 0x3261, 1064 }, + { 0x3262, 2327 }, + { 0x3263, 2324 }, + { 0x3264, 1061 }, + { 0x3265, 2321 }, + { 0x3266, 2456 }, + { 0x3267, 2459 }, + { 0x3268, 1097 }, + { 0x3269, 2453 }, + { 0x326A, 3875 }, + { 0x326B, 2450 }, + { 0x326C, 3872 }, + { 0x326D, 2423 }, + { 0x326E, 2426 }, + { 0x326F, 1091 }, + { 0x3270, 2420 }, + { 0x3271, 3881 }, + { 0x3272, 2471 }, + { 0x3273, 3878 }, + { 0x3274, 2465 }, + { 0x3275, 2468 }, + { 0x3276, 1100 }, + { 0x3277, 2462 }, + { 0x3278, 2432 }, + { 0x3279, 1094 }, + { 0x327A, 2429 }, + { 0x327B, 2480 }, + { 0x327C, 2483 }, + { 0x327D, 1103 }, + { 0x327E, 2474 }, + { 0x327F, 3884 }, + { 0x3280, 2477 }, + { 0x3281, 2492 }, + { 0x3282, 2495 }, + { 0x3283, 1106 }, + { 0x3284, 2486 }, + { 0x3285, 3887 }, + { 0x3286, 2489 }, + { 0x3287, 1226 }, + { 0x3288, 1229 }, + { 0x3289, 797 }, + { 0x328A, 1223 }, + { 0x328B, 2651 }, + { 0x328C, 2654 }, + { 0x328D, 1220 }, + { 0x328E, 2648 }, + { 0x328F, 1193 }, + { 0x3290, 1196 }, + { 0x3291, 791 }, + { 0x3292, 1190 }, + { 0x3293, 2660 }, + { 0x3294, 1241 }, + { 0x3295, 2657 }, + { 0x3296, 1235 }, + { 0x3297, 1238 }, + { 0x3298, 800 }, + { 0x3299, 1232 }, + { 0x329A, 1202 }, + { 0x329B, 794 }, + { 0x329C, 1199 }, + { 0x329D, 1250 }, + { 0x329E, 1253 }, + { 0x329F, 803 }, + { 0x32A0, 1244 }, + { 0x32A1, 2663 }, + { 0x32A2, 1247 }, + { 0x32A3, 1262 }, + { 0x32A4, 1265 }, + { 0x32A5, 806 }, + { 0x32A6, 1256 }, + { 0x32A7, 2666 }, + { 0x32A8, 1259 }, + { 0x32A9, 3911 }, + { 0x32AA, 3914 }, + { 0x32AB, 2504 }, + { 0x32AC, 3908 }, + { 0x32AD, 4235 }, + { 0x32AE, 4238 }, + { 0x32AF, 3905 }, + { 0x32B0, 4232 }, + { 0x32B1, 3893 }, + { 0x32B2, 3896 }, + { 0x32B3, 2498 }, + { 0x32B4, 3890 }, + { 0x32B5, 3920 }, + { 0x32B6, 2507 }, + { 0x32B7, 3917 }, + { 0x32B8, 3902 }, + { 0x32B9, 2501 }, + { 0x32BA, 3899 }, + { 0x32BB, 3929 }, + { 0x32BC, 2510 }, + { 0x32BD, 3923 }, + { 0x32BE, 4241 }, + { 0x32BF, 3926 }, + { 0x32C0, 3938 }, + { 0x32C1, 3941 }, + { 0x32C2, 2513 }, + { 0x32C3, 3932 }, + { 0x32C4, 4244 }, + { 0x32C5, 3935 }, + { 0x32C6, 3473 }, + { 0x32C7, 3476 }, + { 0x32C8, 1919 }, + { 0x32C9, 3470 }, + { 0x32CA, 4178 }, + { 0x32CB, 3467 }, + { 0x32CC, 4175 }, + { 0x32CD, 3458 }, + { 0x32CE, 3461 }, + { 0x32CF, 1913 }, + { 0x32D0, 3455 }, + { 0x32D1, 4181 }, + { 0x32D2, 3485 }, + { 0x32D3, 3482 }, + { 0x32D4, 3479 }, + { 0x32D5, 3464 }, + { 0x32D6, 1916 }, + { 0x32D7, 3494 }, + { 0x32D8, 1922 }, + { 0x32D9, 3488 }, + { 0x32DA, 4184 }, + { 0x32DB, 3491 }, + { 0x32DC, 3503 }, + { 0x32DD, 3506 }, + { 0x32DE, 1925 }, + { 0x32DF, 3497 }, + { 0x32E0, 4187 }, + { 0x32E1, 3500 }, + { 0x32E2, 2135 }, + { 0x32E3, 2138 }, + { 0x32E4, 1013 }, + { 0x32E5, 2132 }, + { 0x32E6, 3668 }, + { 0x32E7, 2129 }, + { 0x32E8, 3665 }, + { 0x32E9, 2102 }, + { 0x32EA, 2105 }, + { 0x32EB, 1007 }, + { 0x32EC, 2099 }, + { 0x32ED, 3731 }, + { 0x32EE, 2168 }, + { 0x32EF, 3728 }, + { 0x32F0, 2144 }, + { 0x32F1, 2147 }, + { 0x32F2, 1016 }, + { 0x32F3, 2141 }, + { 0x32F4, 2111 }, + { 0x32F5, 1010 }, + { 0x32F6, 2108 }, + { 0x32F7, 2177 }, + { 0x32F8, 2180 }, + { 0x32F9, 1019 }, + { 0x32FA, 2171 }, + { 0x32FB, 3734 }, + { 0x32FC, 2174 }, + { 0x32FD, 2189 }, + { 0x32FE, 2192 }, + { 0x32FF, 1022 }, + { 0x3300, 2183 }, + { 0x3301, 3737 }, + { 0x3302, 2186 }, + { 0x3303, 3692 }, + { 0x3304, 3695 }, + { 0x3305, 2156 }, + { 0x3306, 3689 }, + { 0x3307, 4214 }, + { 0x3308, 3686 }, + { 0x3309, 4211 }, + { 0x330A, 3674 }, + { 0x330B, 3677 }, + { 0x330C, 2150 }, + { 0x330D, 3671 }, + { 0x330E, 3701 }, + { 0x330F, 3704 }, + { 0x3310, 2159 }, + { 0x3311, 3698 }, + { 0x3312, 3683 }, + { 0x3313, 2153 }, + { 0x3314, 3680 }, + { 0x3315, 3710 }, + { 0x3316, 3713 }, + { 0x3317, 2162 }, + { 0x3318, 3707 }, + { 0x3319, 3722 }, + { 0x331A, 3725 }, + { 0x331B, 2165 }, + { 0x331C, 3716 }, + { 0x331D, 4217 }, + { 0x331E, 3719 }, + { 0x331F, 3821 }, + { 0x3320, 3824 }, + { 0x3321, 2435 }, + { 0x3322, 3818 }, + { 0x3323, 4223 }, + { 0x3324, 3845 }, + { 0x3325, 4220 }, + { 0x3326, 3839 }, + { 0x3327, 3842 }, + { 0x3328, 2441 }, + { 0x3329, 3836 }, + { 0x332A, 3830 }, + { 0x332B, 3833 }, + { 0x332C, 2438 }, + { 0x332D, 3827 }, + { 0x332E, 3854 }, + { 0x332F, 3857 }, + { 0x3330, 2444 }, + { 0x3331, 3848 }, + { 0x3332, 4226 }, + { 0x3333, 3851 }, + { 0x3334, 3866 }, + { 0x3335, 3869 }, + { 0x3336, 2447 }, + { 0x3337, 3860 }, + { 0x3338, 4229 }, + { 0x3339, 3863 }, + { 0x333A, 2600 }, + { 0x333B, 2603 }, + { 0x333C, 1205 }, + { 0x333D, 2597 }, + { 0x333E, 3965 }, + { 0x333F, 3968 }, + { 0x3340, 2624 }, + { 0x3341, 3962 }, + { 0x3342, 2618 }, + { 0x3343, 2621 }, + { 0x3344, 1211 }, + { 0x3345, 2615 }, + { 0x3346, 2609 }, + { 0x3347, 2612 }, + { 0x3348, 1208 }, + { 0x3349, 2606 }, + { 0x334A, 2633 }, + { 0x334B, 1214 }, + { 0x334C, 2627 }, + { 0x334D, 3971 }, + { 0x334E, 2630 }, + { 0x334F, 2642 }, + { 0x3350, 2645 }, + { 0x3351, 1217 }, + { 0x3352, 2636 }, + { 0x3353, 3974 }, + { 0x3354, 2639 }, + { 0x3355, 3551 }, + { 0x3356, 2057 }, + { 0x3357, 4190 }, + { 0x3358, 3572 }, + { 0x3359, 3566 }, + { 0x335A, 3569 }, + { 0x335B, 2063 }, + { 0x335C, 3563 }, + { 0x335D, 3557 }, + { 0x335E, 3560 }, + { 0x335F, 2060 }, + { 0x3360, 3554 }, + { 0x3361, 3581 }, + { 0x3362, 3584 }, + { 0x3363, 2066 }, + { 0x3364, 3575 }, + { 0x3365, 4193 }, + { 0x3366, 3578 }, + { 0x3367, 3593 }, + { 0x3368, 3596 }, + { 0x3369, 2069 }, + { 0x336A, 3587 }, + { 0x336B, 4196 }, + { 0x336C, 3590 }, + { 0x336D, 3368 }, + { 0x336E, 3371 }, + { 0x336F, 1874 }, + { 0x3370, 3365 }, + { 0x3371, 3386 }, + { 0x3372, 1880 }, + { 0x3373, 3383 }, + { 0x3374, 3377 }, + { 0x3375, 3380 }, + { 0x3376, 1877 }, + { 0x3377, 3374 }, + { 0x3378, 3395 }, + { 0x3379, 3398 }, + { 0x337A, 1883 }, + { 0x337B, 3389 }, + { 0x337C, 4154 }, + { 0x337D, 3392 }, + { 0x337E, 3407 }, + { 0x337F, 3410 }, + { 0x3380, 1886 }, + { 0x3381, 3401 }, + { 0x3382, 4157 }, + { 0x3383, 3404 }, + { 0x3384, 3614 }, + { 0x3385, 3617 }, + { 0x3386, 2114 }, + { 0x3387, 3611 }, + { 0x3388, 4202 }, + { 0x3389, 3638 }, + { 0x338A, 4199 }, + { 0x338B, 3632 }, + { 0x338C, 3635 }, + { 0x338D, 2120 }, + { 0x338E, 3629 }, + { 0x338F, 3623 }, + { 0x3390, 3626 }, + { 0x3391, 2117 }, + { 0x3392, 3620 }, + { 0x3393, 3647 }, + { 0x3394, 3650 }, + { 0x3395, 2123 }, + { 0x3396, 3641 }, + { 0x3397, 4205 }, + { 0x3398, 3644 }, + { 0x3399, 3659 }, + { 0x339A, 3662 }, + { 0x339B, 2126 }, + { 0x339C, 3653 }, + { 0x339D, 4208 }, + { 0x339E, 3656 }, + { 0x339F, 2036 }, + { 0x33A0, 2039 }, + { 0x33A1, 992 }, + { 0x33A2, 2033 }, + { 0x33A3, 3602 }, + { 0x33A4, 2072 }, + { 0x33A5, 3599 }, + { 0x33A6, 2051 }, + { 0x33A7, 2054 }, + { 0x33A8, 998 }, + { 0x33A9, 2048 }, + { 0x33AA, 2045 }, + { 0x33AB, 995 }, + { 0x33AC, 2042 }, + { 0x33AD, 2081 }, + { 0x33AE, 2084 }, + { 0x33AF, 1001 }, + { 0x33B0, 2075 }, + { 0x33B1, 3605 }, + { 0x33B2, 2078 }, + { 0x33B3, 2093 }, + { 0x33B4, 2096 }, + { 0x33B5, 1004 }, + { 0x33B6, 2087 }, + { 0x33B7, 3608 }, + { 0x33B8, 2090 }, + { 0x33B9, 1550 }, + { 0x33BA, 1553 }, + { 0x33BB, 878 }, + { 0x33BC, 1547 }, + { 0x33BD, 3017 }, + { 0x33BE, 3020 }, + { 0x33BF, 1544 }, + { 0x33C0, 3014 }, + { 0x33C1, 3071 }, + { 0x33C2, 3074 }, + { 0x33C3, 1577 }, + { 0x33C4, 3068 }, + { 0x33C5, 1571 }, + { 0x33C6, 1574 }, + { 0x33C7, 881 }, + { 0x33C8, 1568 }, + { 0x33C9, 1586 }, + { 0x33CA, 1589 }, + { 0x33CB, 884 }, + { 0x33CC, 1580 }, + { 0x33CD, 3077 }, + { 0x33CE, 1583 }, + { 0x33CF, 1598 }, + { 0x33D0, 1601 }, + { 0x33D1, 887 }, + { 0x33D2, 1592 }, + { 0x33D3, 3080 }, + { 0x33D4, 1595 }, + { 0x33D5, 1991 }, + { 0x33D6, 1994 }, + { 0x33D7, 980 }, + { 0x33D8, 1988 }, + { 0x33D9, 3530 }, + { 0x33DA, 3533 }, + { 0x33DB, 1985 }, + { 0x33DC, 3527 }, + { 0x33DD, 3539 }, + { 0x33DE, 3542 }, + { 0x33DF, 2006 }, + { 0x33E0, 3536 }, + { 0x33E1, 2000 }, + { 0x33E2, 2003 }, + { 0x33E3, 983 }, + { 0x33E4, 1997 }, + { 0x33E5, 2015 }, + { 0x33E6, 2018 }, + { 0x33E7, 986 }, + { 0x33E8, 2009 }, + { 0x33E9, 3545 }, + { 0x33EA, 2012 }, + { 0x33EB, 2027 }, + { 0x33EC, 2030 }, + { 0x33ED, 989 }, + { 0x33EE, 2021 }, + { 0x33EF, 3548 }, + { 0x33F0, 2024 }, + { 0x33F1, 3029 }, + { 0x33F2, 3032 }, + { 0x33F3, 1556 }, + { 0x33F4, 3026 }, + { 0x33F5, 4079 }, + { 0x33F6, 4082 }, + { 0x33F7, 3023 }, + { 0x33F8, 4076 }, + { 0x33F9, 4088 }, + { 0x33FA, 3044 }, + { 0x33FB, 4085 }, + { 0x33FC, 3038 }, + { 0x33FD, 3041 }, + { 0x33FE, 1559 }, + { 0x33FF, 3035 }, + { 0x3400, 3053 }, + { 0x3401, 3056 }, + { 0x3402, 1562 }, + { 0x3403, 3047 }, + { 0x3404, 4091 }, + { 0x3405, 3050 }, + { 0x3406, 3062 }, + { 0x3407, 3065 }, + { 0x3408, 1565 }, + { 0x3409, 3059 }, + { 0x340A, 3326 }, + { 0x340B, 3329 }, + { 0x340C, 1853 }, + { 0x340D, 3323 }, + { 0x340E, 4139 }, + { 0x340F, 4142 }, + { 0x3410, 3320 }, + { 0x3411, 4136 }, + { 0x3412, 4145 }, + { 0x3413, 3341 }, + { 0x3414, 3335 }, + { 0x3415, 3338 }, + { 0x3416, 1856 }, + { 0x3417, 3332 }, + { 0x3418, 3350 }, + { 0x3419, 1859 }, + { 0x341A, 3344 }, + { 0x341B, 4148 }, + { 0x341C, 3347 }, + { 0x341D, 3359 }, + { 0x341E, 3362 }, + { 0x341F, 1862 }, + { 0x3420, 3353 }, + { 0x3421, 4151 }, + { 0x3422, 3356 }, + { 0x3423, 3428 }, + { 0x3424, 3431 }, + { 0x3425, 1904 }, + { 0x3426, 3425 }, + { 0x3427, 4163 }, + { 0x3428, 4166 }, + { 0x3429, 3422 }, + { 0x342A, 4160 }, + { 0x342B, 4172 }, + { 0x342C, 3443 }, + { 0x342D, 4169 }, + { 0x342E, 3437 }, + { 0x342F, 3440 }, + { 0x3430, 1907 }, + { 0x3431, 3434 }, + { 0x3432, 3449 }, + { 0x3433, 3452 }, + { 0x3434, 1910 }, + { 0x3435, 3446 }, + { 0x3436, 2342 }, + { 0x3437, 2345 }, + { 0x3438, 1070 }, + { 0x3439, 2339 }, + { 0x343A, 3782 }, + { 0x343B, 3785 }, + { 0x343C, 2336 }, + { 0x343D, 3779 }, + { 0x343E, 3788 }, + { 0x343F, 2357 }, + { 0x3440, 2351 }, + { 0x3441, 2354 }, + { 0x3442, 1073 }, + { 0x3443, 2348 }, + { 0x3444, 2366 }, + { 0x3445, 2369 }, + { 0x3446, 1076 }, + { 0x3447, 2360 }, + { 0x3448, 3791 }, + { 0x3449, 2363 }, + { 0x344A, 2378 }, + { 0x344B, 2381 }, + { 0x344C, 1079 }, + { 0x344D, 2375 }, + { 0x344E, 3797 }, + { 0x344F, 3800 }, + { 0x3450, 2372 }, + { 0x3451, 3794 }, + { 0x3452, 3806 }, + { 0x3453, 3809 }, + { 0x3454, 2393 }, + { 0x3455, 3803 }, + { 0x3456, 2387 }, + { 0x3457, 2390 }, + { 0x3458, 1082 }, + { 0x3459, 2384 }, + { 0x345A, 2402 }, + { 0x345B, 2405 }, + { 0x345C, 1085 }, + { 0x345D, 2396 }, + { 0x345E, 3812 }, + { 0x345F, 2399 }, + { 0x3460, 2414 }, + { 0x3461, 2417 }, + { 0x3462, 1088 }, + { 0x3463, 2408 }, + { 0x3464, 3815 }, + { 0x3465, 2411 }, + { 0x3466, 668 }, + { 0x3467, 602 }, + { 0x3468, 650 }, + { 0x3469, 731 }, + { 0x346A, 632 }, + { 0x346B, 674 }, + { 0x346C, 707 }, + { 0x346D, 638 }, + { 0x346E, 605 }, + { 0x346F, 713 }, + { 0x3470, 656 }, + { 0x3471, 698 }, + { 0x3472, 659 }, + { 0x3473, 617 }, + { 0x3474, 662 }, + { 0x3475, 719 }, + { 0x3476, 677 }, + { 0x3477, 593 }, + { 0x3478, 692 }, + { 0x3479, 635 }, + { 0x347A, 704 }, + { 0x347B, 623 }, + { 0x347C, 710 }, + { 0x347D, 734 }, + { 0x347E, 611 }, + { 0x347F, 608 }, + { 0x3480, 725 }, + { 0x3481, 689 }, + { 0x3482, 665 }, + { 0x3483, 644 }, + { 0x3484, 686 }, + { 0x3485, 683 }, + { 0x3486, 671 }, + { 0x3487, 680 }, + { 0x3488, 620 }, + { 0x3489, 596 }, + { 0x348A, 737 }, + { 0x348B, 647 }, + { 0x348C, 641 }, + { 0x348D, 722 }, + { 0x348E, 614 }, + { 0x348F, 590 }, + { 0x3490, 746 }, + { 0x3491, 653 }, + { 0x3492, 587 }, + { 0x3493, 701 }, + { 0x3494, 629 }, + { 0x3495, 716 }, + { 0x3496, 740 }, + { 0x3497, 695 }, + { 0x3498, 743 }, + { 0x3499, 626 }, + { 0x349A, 749 }, + { 0x349B, 728 }, + { 0x349C, 599 }, + { 0x349D, 15133 }, + { 0x349E, 15172 }, + { 0x349F, 15217 }, + { 0x34A0, 15139 }, + { 0x34A1, 15178 }, + { 0x34A2, 15223 }, + { 0x34A3, 15148 }, + { 0x34A4, 15157 }, + { 0x34A5, 15211 }, + { 0x34A6, 15154 }, + { 0x34A7, 15136 }, + { 0x34A8, 15199 }, + { 0x34A9, 15202 }, + { 0x34AA, 15226 }, + { 0x34AB, 15265 }, + { 0x34AC, 15163 }, + { 0x34AD, 15166 }, + { 0x34AE, 15160 }, + { 0x34AF, 15175 }, + { 0x34B0, 15232 }, + { 0x34B1, 15196 }, + { 0x34B2, 15214 }, + { 0x34B3, 15151 }, + { 0x34B4, 15190 }, + { 0x34B5, 15208 }, + { 0x34B6, 15145 }, + { 0x34B7, 15187 }, + { 0x34B8, 15220 }, + { 0x34B9, 15193 }, + { 0x34BA, 15205 }, + { 0x34BB, 15115 }, + { 0x34BC, 15130 }, + { 0x34BD, 15118 }, + { 0x34BE, 15142 }, + { 0x34BF, 15121 }, + { 0x34C0, 15124 }, + { 0x34C1, 15127 }, + { 0x34C2, 15181 }, + { 0x34C3, 15184 }, + { 0x34C4, 15169 }, + { 0x34C5, 15250 }, + { 0x34C6, 15235 }, + { 0x34C7, 15255 }, + { 0x34C8, 15240 }, + { 0x34C9, 15245 }, + { 0x34CA, 15260 }, + { 0x34CB, 15272 }, + { 0x34CC, 15268 }, + { 0x34CD, 12422 }, + { 0x34CE, 12731 }, + { 0x34CF, 12767 }, + { 0x34D0, 12959 }, + { 0x34D1, 13130 }, + { 0x34D2, 12896 }, + { 0x34D3, 13004 }, + { 0x34D4, 12683 }, + { 0x34D5, 13055 }, + { 0x34D6, 13046 }, + { 0x34D7, 13148 }, + { 0x34D8, 13031 }, + { 0x34D9, 12734 }, + { 0x34DA, 12950 }, + { 0x34DB, 12929 }, + { 0x34DC, 13124 }, + { 0x34DD, 13010 }, + { 0x34DE, 13142 }, + { 0x34DF, 12815 }, + { 0x34E0, 12902 }, + { 0x34E1, 12710 }, + { 0x34E2, 13076 }, + { 0x34E3, 12908 }, + { 0x34E4, 13118 }, + { 0x34E5, 12983 }, + { 0x34E6, 13136 }, + { 0x34E7, 12704 }, + { 0x34E8, 12785 }, + { 0x34E9, 13106 }, + { 0x34EA, 12977 }, + { 0x34EB, 12794 }, + { 0x34EC, 13174 }, + { 0x34ED, 12755 }, + { 0x34EE, 12836 }, + { 0x34EF, 12857 }, + { 0x34F0, 13112 }, + { 0x34F1, 12365 }, + { 0x34F2, 12473 }, + { 0x34F3, 12464 }, + { 0x34F4, 12773 }, + { 0x34F5, 12644 }, + { 0x34F6, 12965 }, + { 0x34F7, 12566 }, + { 0x34F8, 12692 }, + { 0x34F9, 12383 }, + { 0x34FA, 12827 }, + { 0x34FB, 12806 }, + { 0x34FC, 13067 }, + { 0x34FD, 12746 }, + { 0x34FE, 12434 }, + { 0x34FF, 12629 }, + { 0x3500, 12611 }, + { 0x3501, 12938 }, + { 0x3502, 12719 }, + { 0x3503, 13019 }, + { 0x3504, 12512 }, + { 0x3505, 12581 }, + { 0x3506, 12413 }, + { 0x3507, 12848 }, + { 0x3508, 12596 }, + { 0x3509, 12917 }, + { 0x350A, 12674 }, + { 0x350B, 12992 }, + { 0x350C, 12398 }, + { 0x350D, 12482 }, + { 0x350E, 12866 }, + { 0x350F, 12659 }, + { 0x3510, 12497 }, + { 0x3511, 13094 }, + { 0x3512, 12449 }, + { 0x3513, 12527 }, + { 0x3514, 12545 }, + { 0x3515, 12884 }, + { 0x3516, 12359 }, + { 0x3517, 12374 }, + { 0x3518, 13082 }, + { 0x3519, 12458 }, + { 0x351A, 12764 }, + { 0x351B, 12638 }, + { 0x351C, 12956 }, + { 0x351D, 12560 }, + { 0x351E, 12686 }, + { 0x351F, 12377 }, + { 0x3520, 12821 }, + { 0x3521, 12800 }, + { 0x3522, 13043 }, + { 0x3523, 13061 }, + { 0x3524, 12740 }, + { 0x3525, 12428 }, + { 0x3526, 12623 }, + { 0x3527, 12605 }, + { 0x3528, 12932 }, + { 0x3529, 12713 }, + { 0x352A, 13013 }, + { 0x352B, 12506 }, + { 0x352C, 12575 }, + { 0x352D, 12407 }, + { 0x352E, 12842 }, + { 0x352F, 12590 }, + { 0x3530, 12911 }, + { 0x3531, 12668 }, + { 0x3532, 12986 }, + { 0x3533, 12392 }, + { 0x3534, 12476 }, + { 0x3535, 12860 }, + { 0x3536, 12653 }, + { 0x3537, 12491 }, + { 0x3538, 12791 }, + { 0x3539, 13088 }, + { 0x353A, 12443 }, + { 0x353B, 12521 }, + { 0x353C, 12536 }, + { 0x353D, 12878 }, + { 0x353E, 12557 }, + { 0x353F, 12893 }, + { 0x3540, 12779 }, + { 0x3541, 12971 }, + { 0x3542, 13133 }, + { 0x3543, 12899 }, + { 0x3544, 13007 }, + { 0x3545, 12701 }, + { 0x3546, 13058 }, + { 0x3547, 13052 }, + { 0x3548, 13151 }, + { 0x3549, 13040 }, + { 0x354A, 12737 }, + { 0x354B, 12953 }, + { 0x354C, 12947 }, + { 0x354D, 13127 }, + { 0x354E, 13028 }, + { 0x354F, 13145 }, + { 0x3550, 12818 }, + { 0x3551, 12905 }, + { 0x3552, 12728 }, + { 0x3553, 13079 }, + { 0x3554, 12926 }, + { 0x3555, 13121 }, + { 0x3556, 13001 }, + { 0x3557, 13139 }, + { 0x3558, 12707 }, + { 0x3559, 12788 }, + { 0x355A, 13109 }, + { 0x355B, 12980 }, + { 0x355C, 12797 }, + { 0x355D, 13180 }, + { 0x355E, 12761 }, + { 0x355F, 12839 }, + { 0x3560, 12875 }, + { 0x3561, 13115 }, + { 0x3562, 12371 }, + { 0x3563, 12620 }, + { 0x3564, 12470 }, + { 0x3565, 12782 }, + { 0x3566, 12650 }, + { 0x3567, 12974 }, + { 0x3568, 12572 }, + { 0x3569, 12698 }, + { 0x356A, 12389 }, + { 0x356B, 12833 }, + { 0x356C, 12812 }, + { 0x356D, 13073 }, + { 0x356E, 12752 }, + { 0x356F, 12440 }, + { 0x3570, 12635 }, + { 0x3571, 12617 }, + { 0x3572, 12944 }, + { 0x3573, 12725 }, + { 0x3574, 13025 }, + { 0x3575, 12518 }, + { 0x3576, 12587 }, + { 0x3577, 12419 }, + { 0x3578, 12854 }, + { 0x3579, 12602 }, + { 0x357A, 12923 }, + { 0x357B, 12680 }, + { 0x357C, 12998 }, + { 0x357D, 12404 }, + { 0x357E, 12488 }, + { 0x357F, 12872 }, + { 0x3580, 12665 }, + { 0x3581, 12503 }, + { 0x3582, 13100 }, + { 0x3583, 12455 }, + { 0x3584, 12533 }, + { 0x3585, 12551 }, + { 0x3586, 12890 }, + { 0x3587, 12368 }, + { 0x3588, 12554 }, + { 0x3589, 13103 }, + { 0x358A, 12467 }, + { 0x358B, 12776 }, + { 0x358C, 12647 }, + { 0x358D, 12968 }, + { 0x358E, 12569 }, + { 0x358F, 12695 }, + { 0x3590, 12386 }, + { 0x3591, 12830 }, + { 0x3592, 12809 }, + { 0x3593, 13070 }, + { 0x3594, 12749 }, + { 0x3595, 13037 }, + { 0x3596, 12437 }, + { 0x3597, 12632 }, + { 0x3598, 12614 }, + { 0x3599, 12941 }, + { 0x359A, 12722 }, + { 0x359B, 13022 }, + { 0x359C, 12515 }, + { 0x359D, 12584 }, + { 0x359E, 12416 }, + { 0x359F, 12851 }, + { 0x35A0, 12599 }, + { 0x35A1, 12920 }, + { 0x35A2, 12677 }, + { 0x35A3, 12995 }, + { 0x35A4, 12401 }, + { 0x35A5, 12485 }, + { 0x35A6, 12869 }, + { 0x35A7, 12662 }, + { 0x35A8, 12500 }, + { 0x35A9, 13097 }, + { 0x35AA, 12452 }, + { 0x35AB, 12530 }, + { 0x35AC, 12548 }, + { 0x35AD, 12887 }, + { 0x35AE, 12362 }, + { 0x35AF, 12425 }, + { 0x35B0, 13085 }, + { 0x35B1, 12461 }, + { 0x35B2, 12770 }, + { 0x35B3, 12641 }, + { 0x35B4, 12962 }, + { 0x35B5, 12563 }, + { 0x35B6, 12689 }, + { 0x35B7, 12380 }, + { 0x35B8, 12824 }, + { 0x35B9, 12803 }, + { 0x35BA, 13049 }, + { 0x35BB, 13064 }, + { 0x35BC, 12743 }, + { 0x35BD, 13034 }, + { 0x35BE, 12431 }, + { 0x35BF, 12626 }, + { 0x35C0, 12608 }, + { 0x35C1, 12935 }, + { 0x35C2, 12716 }, + { 0x35C3, 13016 }, + { 0x35C4, 12509 }, + { 0x35C5, 12578 }, + { 0x35C6, 12410 }, + { 0x35C7, 12845 }, + { 0x35C8, 12593 }, + { 0x35C9, 12914 }, + { 0x35CA, 12671 }, + { 0x35CB, 12989 }, + { 0x35CC, 12395 }, + { 0x35CD, 12479 }, + { 0x35CE, 12863 }, + { 0x35CF, 12656 }, + { 0x35D0, 12494 }, + { 0x35D1, 13091 }, + { 0x35D2, 13177 }, + { 0x35D3, 12446 }, + { 0x35D4, 12758 }, + { 0x35D5, 12524 }, + { 0x35D6, 12539 }, + { 0x35D7, 12881 }, + { 0x35D8, 12542 }, + { 0x35D9, 13183 }, + { 0x35DA, 12285 }, + { 0x35DB, 12282 }, + { 0x35DC, 12356 }, + { 0x35DD, 13158 }, + { 0x35DE, 13162 }, + { 0x35DF, 13170 }, + { 0x35E0, 12350 }, + { 0x35E1, 12353 }, + { 0x35E2, 12341 }, + { 0x35E3, 12320 }, + { 0x35E4, 12326 }, + { 0x35E5, 12317 }, + { 0x35E6, 12323 }, + { 0x35E7, 12329 }, + { 0x35E8, 12347 }, + { 0x35E9, 12338 }, + { 0x35EA, 12344 }, + { 0x35EB, 12332 }, + { 0x35EC, 12335 }, + { 0x35ED, 12305 }, + { 0x35EE, 12287 }, + { 0x35EF, 12293 }, + { 0x35F0, 12314 }, + { 0x35F1, 12299 }, + { 0x35F2, 12296 }, + { 0x35F3, 12290 }, + { 0x35F4, 12311 }, + { 0x35F5, 12308 }, + { 0x35F6, 12302 }, + { 0x35F7, 13166 }, + { 0x35F8, 13154 }, + { 0x35F9, 89406 }, + { 0x35FA, 88436 }, + { 0x35FB, 89314 }, + { 0x35FC, 88339 }, + { 0x35FD, 89486 }, + { 0x35FE, 88525 }, + { 0x35FF, 89185 }, + { 0x3600, 88189 }, + { 0x3601, 89310 }, + { 0x3602, 88335 }, + { 0x3603, 89545 }, + { 0x3604, 88584 }, + { 0x3605, 89305 }, + { 0x3606, 88330 }, + { 0x3607, 89437 }, + { 0x3608, 88467 }, + { 0x3609, 89283 }, + { 0x360A, 88308 }, + { 0x360B, 89458 }, + { 0x360C, 88493 }, + { 0x360D, 89476 }, + { 0x360E, 88515 }, + { 0x360F, 89442 }, + { 0x3610, 88477 }, + { 0x3611, 89384 }, + { 0x3612, 88409 }, + { 0x3613, 89415 }, + { 0x3614, 88445 }, + { 0x3615, 89463 }, + { 0x3616, 88498 }, + { 0x3617, 88973 }, + { 0x3618, 87977 }, + { 0x3619, 89491 }, + { 0x361A, 88530 }, + { 0x361B, 89243 }, + { 0x361C, 88247 }, + { 0x361D, 89248 }, + { 0x361E, 88252 }, + { 0x361F, 89253 }, + { 0x3620, 88257 }, + { 0x3621, 89540 }, + { 0x3622, 88579 }, + { 0x3623, 89535 }, + { 0x3624, 88574 }, + { 0x3625, 89395 }, + { 0x3626, 88420 }, + { 0x3627, 88644 }, + { 0x3628, 117233 }, + { 0x3629, 117201 }, + { 0x362A, 117417 }, + { 0x362B, 117437 }, + { 0x362C, 110659 }, + { 0x362D, 117412 }, + { 0x362E, 117243 }, + { 0x362F, 117311 }, + { 0x3630, 117251 }, + { 0x3631, 117356 }, + { 0x3632, 117366 }, + { 0x3633, 117361 }, + { 0x3634, 117378 }, + { 0x3635, 117236 }, + { 0x3636, 117427 }, + { 0x3637, 88634 }, + { 0x3638, 89580 }, + { 0x3639, 89029 }, + { 0x363A, 88033 }, + { 0x363B, 89168 }, + { 0x363C, 88172 }, + { 0x363D, 89296 }, + { 0x363E, 88321 }, + { 0x363F, 89156 }, + { 0x3640, 88160 }, + { 0x3641, 89172 }, + { 0x3642, 88176 }, + { 0x3643, 88940 }, + { 0x3644, 87944 }, + { 0x3645, 89122 }, + { 0x3646, 88126 }, + { 0x3647, 89275 }, + { 0x3648, 88295 }, + { 0x3649, 89271 }, + { 0x364A, 88291 }, + { 0x364B, 89263 }, + { 0x364C, 88283 }, + { 0x364D, 89078 }, + { 0x364E, 88082 }, + { 0x364F, 89239 }, + { 0x3650, 88243 }, + { 0x3651, 89390 }, + { 0x3652, 88415 }, + { 0x3653, 89420 }, + { 0x3654, 88450 }, + { 0x3655, 108541 }, + { 0x3656, 108546 }, + { 0x3657, 117263 }, + { 0x3658, 117396 }, + { 0x3659, 18010 }, + { 0x365A, 18031 }, + { 0x365B, 18022 }, + { 0x365C, 18040 }, + { 0x365D, 18025 }, + { 0x365E, 18130 }, + { 0x365F, 18151 }, + { 0x3660, 18019 }, + { 0x3661, 18118 }, + { 0x3662, 18013 }, + { 0x3663, 18043 }, + { 0x3664, 18073 }, + { 0x3665, 18136 }, + { 0x3666, 18211 }, + { 0x3667, 18223 }, + { 0x3668, 18226 }, + { 0x3669, 18148 }, + { 0x366A, 18181 }, + { 0x366B, 18229 }, + { 0x366C, 18016 }, + { 0x366D, 18145 }, + { 0x366E, 18061 }, + { 0x366F, 18217 }, + { 0x3670, 18082 }, + { 0x3671, 18238 }, + { 0x3672, 18214 }, + { 0x3673, 18172 }, + { 0x3674, 18103 }, + { 0x3675, 18199 }, + { 0x3676, 18070 }, + { 0x3677, 18232 }, + { 0x3678, 18163 }, + { 0x3679, 18142 }, + { 0x367A, 18166 }, + { 0x367B, 18091 }, + { 0x367C, 18190 }, + { 0x367D, 18169 }, + { 0x367E, 18202 }, + { 0x367F, 18187 }, + { 0x3680, 18193 }, + { 0x3681, 18124 }, + { 0x3682, 18160 }, + { 0x3683, 18121 }, + { 0x3684, 18094 }, + { 0x3685, 18079 }, + { 0x3686, 18049 }, + { 0x3687, 18055 }, + { 0x3688, 18067 }, + { 0x3689, 18208 }, + { 0x368A, 18127 }, + { 0x368B, 18100 }, + { 0x368C, 18247 }, + { 0x368D, 18184 }, + { 0x368E, 18115 }, + { 0x368F, 18139 }, + { 0x3690, 18205 }, + { 0x3691, 18028 }, + { 0x3692, 18097 }, + { 0x3693, 18088 }, + { 0x3694, 18064 }, + { 0x3695, 18046 }, + { 0x3696, 18076 }, + { 0x3697, 18109 }, + { 0x3698, 18037 }, + { 0x3699, 18178 }, + { 0x369A, 18133 }, + { 0x369B, 18112 }, + { 0x369C, 18052 }, + { 0x369D, 18085 }, + { 0x369E, 18034 }, + { 0x369F, 18058 }, + { 0x36A0, 18175 }, + { 0x36A1, 18157 }, + { 0x36A2, 18106 }, + { 0x36A3, 18154 }, + { 0x36A4, 18196 }, + { 0x36A5, 18235 }, + { 0x36A6, 18241 }, + { 0x36A7, 18220 }, + { 0x36A8, 18244 }, + { 0x36A9, 20620 }, + { 0x36AA, 20624 }, + { 0x36AB, 20615 }, + { 0x36AC, 18003 }, + { 0x36AD, 18006 }, + { 0x36AE, 18008 }, + { 0x36AF, 20628 }, + { 0x36B0, 20617 }, + { 0x36B1, 108476 }, + { 0x36B2, 108500 }, + { 0x36B3, 108482 }, + { 0x36B4, 108506 }, + { 0x36B5, 108464 }, + { 0x36B6, 108488 }, + { 0x36B7, 108470 }, + { 0x36B8, 108494 }, + { 0x36B9, 108809 }, + { 0x36BA, 107418 }, + { 0x36BB, 107375 }, + { 0x36BC, 107331 }, + { 0x36BD, 108771 }, + { 0x36BE, 108815 }, + { 0x36BF, 107424 }, + { 0x36C0, 107381 }, + { 0x36C1, 107337 }, + { 0x36C2, 108777 }, + { 0x36C3, 108822 }, + { 0x36C4, 107431 }, + { 0x36C5, 107388 }, + { 0x36C6, 107359 }, + { 0x36C7, 108784 }, + { 0x36C8, 107263 }, + { 0x36C9, 107259 }, + { 0x36CA, 107268 }, + { 0x36CB, 107489 }, + { 0x36CC, 108290 }, + { 0x36CD, 108295 }, + { 0x36CE, 108310 }, + { 0x36CF, 108304 }, + { 0x36D0, 107348 }, + { 0x36D1, 108325 }, + { 0x36D2, 108319 }, + { 0x36D3, 36190 }, + { 0x36D4, 32965 }, + { 0x36D5, 36185 }, + { 0x36D6, 32960 }, + { 0x36D7, 35859 }, + { 0x36D8, 32109 }, + { 0x36D9, 35792 }, + { 0x36DA, 31864 }, + { 0x36DB, 36151 }, + { 0x36DC, 32909 }, + { 0x36DD, 36160 }, + { 0x36DE, 32918 }, + { 0x36DF, 36164 }, + { 0x36E0, 32922 }, + { 0x36E1, 33061 }, + { 0x36E2, 33155 }, + { 0x36E3, 35711 }, + { 0x36E4, 31713 }, + { 0x36E5, 35731 }, + { 0x36E6, 31733 }, + { 0x36E7, 35735 }, + { 0x36E8, 31737 }, + { 0x36E9, 35739 }, + { 0x36EA, 31741 }, + { 0x36EB, 35743 }, + { 0x36EC, 31745 }, + { 0x36ED, 35750 }, + { 0x36EE, 31752 }, + { 0x36EF, 36123 }, + { 0x36F0, 32801 }, + { 0x36F1, 34321 }, + { 0x36F2, 29880 }, + { 0x36F3, 34349 }, + { 0x36F4, 29915 }, + { 0x36F5, 34327 }, + { 0x36F6, 29886 }, + { 0x36F7, 35966 }, + { 0x36F8, 32356 }, + { 0x36F9, 34394 }, + { 0x36FA, 29975 }, + { 0x36FB, 34678 }, + { 0x36FC, 30379 }, + { 0x36FD, 34686 }, + { 0x36FE, 30387 }, + { 0x36FF, 35784 }, + { 0x3700, 31825 }, + { 0x3701, 34915 }, + { 0x3702, 30623 }, + { 0x3703, 34923 }, + { 0x3704, 30638 }, + { 0x3705, 34929 }, + { 0x3706, 30644 }, + { 0x3707, 34940 }, + { 0x3708, 30668 }, + { 0x3709, 34948 }, + { 0x370A, 30676 }, + { 0x370B, 35040 }, + { 0x370C, 30827 }, + { 0x370D, 35845 }, + { 0x370E, 32052 }, + { 0x370F, 35485 }, + { 0x3710, 31400 }, + { 0x3711, 35796 }, + { 0x3712, 31884 }, + { 0x3713, 36170 }, + { 0x3714, 32928 }, + { 0x3715, 35952 }, + { 0x3716, 32321 }, + { 0x3717, 35958 }, + { 0x3718, 32327 }, + { 0x3719, 35897 }, + { 0x371A, 32248 }, + { 0x371B, 35764 }, + { 0x371C, 31791 }, + { 0x371D, 35768 }, + { 0x371E, 31799 }, + { 0x371F, 35804 }, + { 0x3720, 31908 }, + { 0x3721, 107256 }, + { 0x3722, 31912 }, + { 0x3723, 32026 }, + { 0x3724, 32030 }, + { 0x3725, 32034 }, + { 0x3726, 32048 }, + { 0x3727, 33215 }, + { 0x3728, 32063 }, + { 0x3729, 31876 }, + { 0x372A, 36069 }, + { 0x372B, 32711 }, + { 0x372C, 36074 }, + { 0x372D, 32716 }, + { 0x372E, 36079 }, + { 0x372F, 36038 }, + { 0x3730, 32659 }, + { 0x3731, 36013 }, + { 0x3732, 32493 }, + { 0x3733, 36084 }, + { 0x3734, 32726 }, + { 0x3735, 36089 }, + { 0x3736, 32731 }, + { 0x3737, 36094 }, + { 0x3738, 32736 }, + { 0x3739, 107365 }, + { 0x373A, 107478 }, + { 0x373B, 107518 }, + { 0x373C, 36147 }, + { 0x373D, 32865 }, + { 0x373E, 36003 }, + { 0x373F, 30077 }, + { 0x3740, 33376 }, + { 0x3741, 34583 }, + { 0x3742, 30248 }, + { 0x3743, 33656 }, + { 0x3744, 29109 }, + { 0x3745, 29166 }, + { 0x3746, 29668 }, + { 0x3747, 33646 }, + { 0x3748, 29099 }, + { 0x3749, 34010 }, + { 0x374A, 29526 }, + { 0x374B, 36108 }, + { 0x374C, 32761 }, + { 0x374D, 36113 }, + { 0x374E, 32766 }, + { 0x374F, 36118 }, + { 0x3750, 32771 }, + { 0x3751, 34069 }, + { 0x3752, 29592 }, + { 0x3753, 34342 }, + { 0x3754, 29901 }, + { 0x3755, 34576 }, + { 0x3756, 30234 }, + { 0x3757, 35026 }, + { 0x3758, 30768 }, + { 0x3759, 35137 }, + { 0x375A, 30943 }, + { 0x375B, 34100 }, + { 0x375C, 36141 }, + { 0x375D, 35993 }, + { 0x375E, 34388 }, + { 0x375F, 35942 }, + { 0x3760, 33137 }, + { 0x3761, 36008 }, + { 0x3762, 36023 }, + { 0x3763, 34279 }, + { 0x3764, 35800 }, + { 0x3765, 35850 }, + { 0x3766, 32067 }, + { 0x3767, 35921 }, + { 0x3768, 32280 }, + { 0x3769, 35391 }, + { 0x376A, 31279 }, + { 0x376B, 36049 }, + { 0x376C, 32691 }, + { 0x376D, 36054 }, + { 0x376E, 32696 }, + { 0x376F, 36059 }, + { 0x3770, 32701 }, + { 0x3771, 35839 }, + { 0x3772, 32038 }, + { 0x3773, 36155 }, + { 0x3774, 32913 }, + { 0x3775, 33707 }, + { 0x3776, 35073 }, + { 0x3777, 35692 }, + { 0x3778, 33757 }, + { 0x3779, 29243 }, + { 0x377A, 35116 }, + { 0x377B, 30915 }, + { 0x377C, 35877 }, + { 0x377D, 35144 }, + { 0x377E, 30957 }, + { 0x377F, 35971 }, + { 0x3780, 32372 }, + { 0x3781, 32402 }, + { 0x3782, 32397 }, + { 0x3783, 35987 }, + { 0x3784, 32417 }, + { 0x3785, 36099 }, + { 0x3786, 32741 }, + { 0x3787, 35977 }, + { 0x3788, 32407 }, + { 0x3789, 35981 }, + { 0x378A, 108343 }, + { 0x378B, 108355 }, + { 0x378C, 108405 }, + { 0x378D, 36135 }, + { 0x378E, 32830 }, + { 0x378F, 36318 }, + { 0x3790, 108367 }, + { 0x3791, 108231 }, + { 0x3792, 33250 }, + { 0x3793, 36308 }, + { 0x3794, 36313 }, + { 0x3795, 36303 }, + { 0x3796, 36293 }, + { 0x3797, 36298 }, + { 0x3798, 65728 }, + { 0x3799, 65736 }, + { 0x379A, 65694 }, + { 0x379B, 65744 }, + { 0x379C, 65732 }, + { 0x379D, 65740 }, + { 0x379E, 65686 }, + { 0x379F, 65772 }, + { 0x37A0, 65828 }, + { 0x37A1, 65760 }, + { 0x37A2, 65820 }, + { 0x37A3, 65690 }, + { 0x37A4, 65752 }, + { 0x37A5, 65808 }, + { 0x37A6, 65768 }, + { 0x37A7, 65824 }, + { 0x37A8, 65844 }, + { 0x37A9, 65852 }, + { 0x37AA, 65812 }, + { 0x37AB, 65848 }, + { 0x37AC, 65800 }, + { 0x37AD, 65840 }, + { 0x37AE, 65756 }, + { 0x37AF, 65816 }, + { 0x37B0, 65784 }, + { 0x37B1, 65788 }, + { 0x37B2, 65832 }, + { 0x37B3, 65748 }, + { 0x37B4, 65804 }, + { 0x37B5, 65780 }, + { 0x37B6, 65792 }, + { 0x37B7, 65776 }, + { 0x37B8, 65836 }, + { 0x37B9, 65796 }, + { 0x37BA, 65764 }, + { 0x37BB, 65703 }, + { 0x37BC, 65713 }, + { 0x37BD, 65718 }, + { 0x37BE, 65708 }, + { 0x37BF, 65723 }, + { 0x37C0, 65856 }, + { 0x37C1, 65860 }, + { 0x37C2, 65864 }, + { 0x37C3, 65868 }, + { 0x37C4, 65698 }, + { 0x37C5, 38721 }, + { 0x37C6, 38711 }, + { 0x37C7, 38731 }, + { 0x37C8, 38726 }, + { 0x37C9, 38716 }, + { 0x37CA, 38736 }, + { 0x37CB, 38707 }, + { 0x37CC, 38745 }, + { 0x37CD, 38703 }, + { 0x37CE, 38741 }, + { 0x37CF, 109914 }, + { 0x37D0, 109965 }, + { 0x37D1, 109905 }, + { 0x37D2, 109968 }, + { 0x37D3, 109893 }, + { 0x37D4, 109953 }, + { 0x37D5, 109911 }, + { 0x37D6, 109974 }, + { 0x37D7, 109938 }, + { 0x37D8, 109983 }, + { 0x37D9, 109896 }, + { 0x37DA, 109923 }, + { 0x37DB, 109926 }, + { 0x37DC, 109977 }, + { 0x37DD, 109890 }, + { 0x37DE, 109920 }, + { 0x37DF, 109986 }, + { 0x37E0, 109995 }, + { 0x37E1, 109959 }, + { 0x37E2, 109941 }, + { 0x37E3, 109992 }, + { 0x37E4, 109950 }, + { 0x37E5, 110001 }, + { 0x37E6, 109947 }, + { 0x37E7, 109932 }, + { 0x37E8, 109917 }, + { 0x37E9, 109980 }, + { 0x37EA, 109935 }, + { 0x37EB, 109908 }, + { 0x37EC, 109875 }, + { 0x37ED, 109881 }, + { 0x37EE, 109887 }, + { 0x37EF, 109878 }, + { 0x37F0, 109884 }, + { 0x37F1, 109929 }, + { 0x37F2, 109944 }, + { 0x37F3, 109902 }, + { 0x37F4, 109962 }, + { 0x37F5, 109899 }, + { 0x37F6, 110032 }, + { 0x37F7, 110036 }, + { 0x37F8, 109989 }, + { 0x37F9, 109998 }, + { 0x37FA, 109956 }, + { 0x37FB, 109971 }, + { 0x37FC, 110009 }, + { 0x37FD, 110017 }, + { 0x37FE, 110005 }, + { 0x37FF, 110013 }, + { 0x3800, 110028 }, + { 0x3801, 110040 }, + { 0x3802, 110021 }, + { 0x3803, 110024 }, + { 0x3804, 109871 }, + { 0x3805, 109864 }, + { 0x3806, 109867 }, + { 0x3807, 132814 }, + { 0x3808, 132811 }, + { 0x3809, 132919 }, + { 0x380A, 132934 }, + { 0x380B, 132925 }, + { 0x380C, 132961 }, + { 0x380D, 132931 }, + { 0x380E, 132994 }, + { 0x380F, 133061 }, + { 0x3810, 133069 }, + { 0x3811, 133057 }, + { 0x3812, 133065 }, + { 0x3813, 132922 }, + { 0x3814, 132952 }, + { 0x3815, 132937 }, + { 0x3816, 132928 }, + { 0x3817, 132979 }, + { 0x3818, 132940 }, + { 0x3819, 132967 }, + { 0x381A, 133021 }, + { 0x381B, 132955 }, + { 0x381C, 133015 }, + { 0x381D, 133027 }, + { 0x381E, 132946 }, + { 0x381F, 133006 }, + { 0x3820, 132964 }, + { 0x3821, 133018 }, + { 0x3822, 133033 }, + { 0x3823, 133048 }, + { 0x3824, 133054 }, + { 0x3825, 133009 }, + { 0x3826, 133051 }, + { 0x3827, 133030 }, + { 0x3828, 132991 }, + { 0x3829, 133045 }, + { 0x382A, 132949 }, + { 0x382B, 133012 }, + { 0x382C, 132976 }, + { 0x382D, 132982 }, + { 0x382E, 133036 }, + { 0x382F, 132943 }, + { 0x3830, 133003 }, + { 0x3831, 132973 }, + { 0x3832, 133000 }, + { 0x3833, 132985 }, + { 0x3834, 132970 }, + { 0x3835, 132997 }, + { 0x3836, 133039 }, + { 0x3837, 133042 }, + { 0x3838, 132988 }, + { 0x3839, 132958 }, + { 0x383A, 133024 }, + { 0x383B, 133073 }, + { 0x383C, 132868 }, + { 0x383D, 132856 }, + { 0x383E, 132884 }, + { 0x383F, 132864 }, + { 0x3840, 132892 }, + { 0x3841, 132901 }, + { 0x3842, 132911 }, + { 0x3843, 132896 }, + { 0x3844, 132906 }, + { 0x3845, 132852 }, + { 0x3846, 132880 }, + { 0x3847, 132872 }, + { 0x3848, 132860 }, + { 0x3849, 132888 }, + { 0x384A, 132876 }, + { 0x384B, 132808 }, + { 0x384C, 132817 }, + { 0x384D, 132820 }, + { 0x384E, 132916 }, + { 0x384F, 132840 }, + { 0x3850, 132822 }, + { 0x3851, 132828 }, + { 0x3852, 132849 }, + { 0x3853, 132834 }, + { 0x3854, 132831 }, + { 0x3855, 132825 }, + { 0x3856, 132846 }, + { 0x3857, 132843 }, + { 0x3858, 132837 }, + { 0x3859, 117605 }, + { 0x385A, 117581 }, + { 0x385B, 117589 }, + { 0x385C, 117617 }, + { 0x385D, 117597 }, + { 0x385E, 117593 }, + { 0x385F, 117585 }, + { 0x3860, 117613 }, + { 0x3861, 117609 }, + { 0x3862, 117601 }, + { 0x3863, 117621 }, + { 0x3864, 117625 }, + { 0x3865, 117629 }, + { 0x3866, 117633 }, + { 0x3867, 117637 }, + { 0x3868, 117641 }, + { 0x3869, 117645 }, + { 0x386A, 117577 }, + { 0x386B, 129835 }, + { 0x386C, 129891 }, + { 0x386D, 129824 }, + { 0x386E, 129883 }, + { 0x386F, 129887 }, + { 0x3870, 129895 }, + { 0x3871, 129872 }, + { 0x3872, 129791 }, + { 0x3873, 129902 }, + { 0x3874, 130311 }, + { 0x3875, 129832 }, + { 0x3876, 129802 }, + { 0x3877, 130080 }, + { 0x3878, 129971 }, + { 0x3879, 27450 }, + { 0x387A, 27426 }, + { 0x387B, 27434 }, + { 0x387C, 27462 }, + { 0x387D, 27442 }, + { 0x387E, 27438 }, + { 0x387F, 27430 }, + { 0x3880, 27458 }, + { 0x3881, 27454 }, + { 0x3882, 27446 }, + { 0x3883, 27514 }, + { 0x3884, 27574 }, + { 0x3885, 27506 }, + { 0x3886, 27578 }, + { 0x3887, 27546 }, + { 0x3888, 27590 }, + { 0x3889, 27566 }, + { 0x388A, 27582 }, + { 0x388B, 27550 }, + { 0x388C, 27570 }, + { 0x388D, 27526 }, + { 0x388E, 27538 }, + { 0x388F, 27586 }, + { 0x3890, 27522 }, + { 0x3891, 27502 }, + { 0x3892, 27494 }, + { 0x3893, 27542 }, + { 0x3894, 27562 }, + { 0x3895, 27518 }, + { 0x3896, 27558 }, + { 0x3897, 27594 }, + { 0x3898, 27510 }, + { 0x3899, 27554 }, + { 0x389A, 27498 }, + { 0x389B, 27486 }, + { 0x389C, 27530 }, + { 0x389D, 27490 }, + { 0x389E, 27534 }, + { 0x389F, 27482 }, + { 0x38A0, 27466 }, + { 0x38A1, 27474 }, + { 0x38A2, 27478 }, + { 0x38A3, 27470 }, + { 0x38A4, 27422 }, + { 0x38A5, 27413 }, + { 0x38A6, 27417 }, + { 0x38A7, 27405 }, + { 0x38A8, 27409 }, + { 0x38A9, 64716 }, + { 0x38AA, 64707 }, + { 0x38AB, 64752 }, + { 0x38AC, 64737 }, + { 0x38AD, 64704 }, + { 0x38AE, 64725 }, + { 0x38AF, 64728 }, + { 0x38B0, 64698 }, + { 0x38B1, 64722 }, + { 0x38B2, 64701 }, + { 0x38B3, 64713 }, + { 0x38B4, 64755 }, + { 0x38B5, 64734 }, + { 0x38B6, 64731 }, + { 0x38B7, 64719 }, + { 0x38B8, 64743 }, + { 0x38B9, 64740 }, + { 0x38BA, 64710 }, + { 0x38BB, 64746 }, + { 0x38BC, 64758 }, + { 0x38BD, 64749 }, + { 0x38BE, 64761 }, + { 0x38BF, 64695 }, + { 0x38C0, 64667 }, + { 0x38C1, 64675 }, + { 0x38C2, 64663 }, + { 0x38C3, 64679 }, + { 0x38C4, 64671 }, + { 0x38C5, 64683 }, + { 0x38C6, 64691 }, + { 0x38C7, 64687 }, + { 0x38C8, 64781 }, + { 0x38C9, 64773 }, + { 0x38CA, 64777 }, + { 0x38CB, 64769 }, + { 0x38CC, 64764 }, + { 0x38CD, 64766 }, + { 0x38CE, 55864 }, + { 0x38CF, 55867 }, + { 0x38D0, 55807 }, + { 0x38D1, 55861 }, + { 0x38D2, 55840 }, + { 0x38D3, 55975 }, + { 0x38D4, 55843 }, + { 0x38D5, 55978 }, + { 0x38D6, 55786 }, + { 0x38D7, 55792 }, + { 0x38D8, 55957 }, + { 0x38D9, 55996 }, + { 0x38DA, 55699 }, + { 0x38DB, 55780 }, + { 0x38DC, 55921 }, + { 0x38DD, 55822 }, + { 0x38DE, 55825 }, + { 0x38DF, 55690 }, + { 0x38E0, 55993 }, + { 0x38E1, 55912 }, + { 0x38E2, 55774 }, + { 0x38E3, 55945 }, + { 0x38E4, 55756 }, + { 0x38E5, 55747 }, + { 0x38E6, 55960 }, + { 0x38E7, 55858 }, + { 0x38E8, 55903 }, + { 0x38E9, 55684 }, + { 0x38EA, 55963 }, + { 0x38EB, 105629 }, + { 0x38EC, 105616 }, + { 0x38ED, 105623 }, + { 0x38EE, 105626 }, + { 0x38EF, 105704 }, + { 0x38F0, 105713 }, + { 0x38F1, 105710 }, + { 0x38F2, 105757 }, + { 0x38F3, 105720 }, + { 0x38F4, 105794 }, + { 0x38F5, 105843 }, + { 0x38F6, 105847 }, + { 0x38F7, 105707 }, + { 0x38F8, 105723 }, + { 0x38F9, 105717 }, + { 0x38FA, 105767 }, + { 0x38FB, 105774 }, + { 0x38FC, 105770 }, + { 0x38FD, 105747 }, + { 0x38FE, 105750 }, + { 0x38FF, 105840 }, + { 0x3900, 105733 }, + { 0x3901, 105736 }, + { 0x3902, 105760 }, + { 0x3903, 105855 }, + { 0x3904, 105763 }, + { 0x3905, 105852 }, + { 0x3906, 105859 }, + { 0x3907, 105862 }, + { 0x3908, 105833 }, + { 0x3909, 105836 }, + { 0x390A, 105787 }, + { 0x390B, 105820 }, + { 0x390C, 105823 }, + { 0x390D, 105740 }, + { 0x390E, 105743 }, + { 0x390F, 105784 }, + { 0x3910, 105791 }, + { 0x3911, 105798 }, + { 0x3912, 105726 }, + { 0x3913, 105729 }, + { 0x3914, 105781 }, + { 0x3915, 105830 }, + { 0x3916, 105802 }, + { 0x3917, 105805 }, + { 0x3918, 105778 }, + { 0x3919, 105827 }, + { 0x391A, 105812 }, + { 0x391B, 105816 }, + { 0x391C, 105809 }, + { 0x391D, 105754 }, + { 0x391E, 105619 }, + { 0x391F, 105696 }, + { 0x3920, 105700 }, + { 0x3921, 105674 }, + { 0x3922, 105678 }, + { 0x3923, 105665 }, + { 0x3924, 105669 }, + { 0x3925, 105692 }, + { 0x3926, 105683 }, + { 0x3927, 105688 }, + { 0x3928, 105876 }, + { 0x3929, 105880 }, + { 0x392A, 105872 }, + { 0x392B, 105870 }, + { 0x392C, 105575 }, + { 0x392D, 105662 }, + { 0x392E, 105585 }, + { 0x392F, 105591 }, + { 0x3930, 105588 }, + { 0x3931, 105598 }, + { 0x3932, 105607 }, + { 0x3933, 105601 }, + { 0x3934, 105604 }, + { 0x3935, 105578 }, + { 0x3936, 105581 }, + { 0x3937, 105610 }, + { 0x3938, 105866 }, + { 0x3939, 105884 }, + { 0x393A, 105650 }, + { 0x393B, 105632 }, + { 0x393C, 105638 }, + { 0x393D, 105659 }, + { 0x393E, 105644 }, + { 0x393F, 105641 }, + { 0x3940, 105635 }, + { 0x3941, 105656 }, + { 0x3942, 105653 }, + { 0x3943, 105647 }, + { 0x3944, 105594 }, + { 0x3945, 105613 }, + { 0x3946, 77075 }, + { 0x3947, 77071 }, + { 0x3948, 77079 }, + { 0x3949, 77087 }, + { 0x394A, 77067 }, + { 0x394B, 76527 }, + { 0x394C, 77359 }, + { 0x394D, 77000 }, + { 0x394E, 76950 }, + { 0x394F, 76955 }, + { 0x3950, 76980 }, + { 0x3951, 76960 }, + { 0x3952, 76985 }, + { 0x3953, 76970 }, + { 0x3954, 77005 }, + { 0x3955, 76995 }, + { 0x3956, 76445 }, + { 0x3957, 76415 }, + { 0x3958, 76425 }, + { 0x3959, 76460 }, + { 0x395A, 76435 }, + { 0x395B, 76430 }, + { 0x395C, 76420 }, + { 0x395D, 76455 }, + { 0x395E, 76450 }, + { 0x395F, 76440 }, + { 0x3960, 76990 }, + { 0x3961, 76945 }, + { 0x3962, 76975 }, + { 0x3963, 76940 }, + { 0x3964, 76965 }, + { 0x3965, 13597 }, + { 0x3966, 13603 }, + { 0x3967, 13609 }, + { 0x3968, 13600 }, + { 0x3969, 13612 }, + { 0x396A, 13606 }, + { 0x396B, 13630 }, + { 0x396C, 13681 }, + { 0x396D, 13621 }, + { 0x396E, 13675 }, + { 0x396F, 13711 }, + { 0x3970, 13687 }, + { 0x3971, 13666 }, + { 0x3972, 13708 }, + { 0x3973, 13627 }, + { 0x3974, 13678 }, + { 0x3975, 13717 }, + { 0x3976, 13690 }, + { 0x3977, 13714 }, + { 0x3978, 13651 }, + { 0x3979, 13705 }, + { 0x397A, 13618 }, + { 0x397B, 13672 }, + { 0x397C, 13693 }, + { 0x397D, 13639 }, + { 0x397E, 13669 }, + { 0x397F, 13642 }, + { 0x3980, 13699 }, + { 0x3981, 13696 }, + { 0x3982, 13615 }, + { 0x3983, 13663 }, + { 0x3984, 13684 }, + { 0x3985, 13636 }, + { 0x3986, 13660 }, + { 0x3987, 13657 }, + { 0x3988, 13645 }, + { 0x3989, 13633 }, + { 0x398A, 13654 }, + { 0x398B, 13702 }, + { 0x398C, 13648 }, + { 0x398D, 13624 }, + { 0x398E, 13569 }, + { 0x398F, 13557 }, + { 0x3990, 13585 }, + { 0x3991, 13581 }, + { 0x3992, 13565 }, + { 0x3993, 13589 }, + { 0x3994, 13561 }, + { 0x3995, 13573 }, + { 0x3996, 13577 }, + { 0x3997, 13593 }, + { 0x3998, 13776 }, + { 0x3999, 13768 }, + { 0x399A, 13764 }, + { 0x399B, 13772 }, + { 0x399C, 13724 }, + { 0x399D, 13720 }, + { 0x399E, 13756 }, + { 0x399F, 13790 }, + { 0x39A0, 13752 }, + { 0x39A1, 13744 }, + { 0x39A2, 13732 }, + { 0x39A3, 13736 }, + { 0x39A4, 13748 }, + { 0x39A5, 13740 }, + { 0x39A6, 13728 }, + { 0x39A7, 13760 }, + { 0x39A8, 13785 }, + { 0x39A9, 13780 }, + { 0x39AA, 13545 }, + { 0x39AB, 13527 }, + { 0x39AC, 13533 }, + { 0x39AD, 13554 }, + { 0x39AE, 13539 }, + { 0x39AF, 13536 }, + { 0x39B0, 13530 }, + { 0x39B1, 13551 }, + { 0x39B2, 13548 }, + { 0x39B3, 13542 }, + { 0x39B4, 13802 }, + { 0x39B5, 13795 }, + { 0x39B6, 13798 }, + { 0x39B7, 13805 }, + { 0x39B8, 77137 }, + { 0x39B9, 77129 }, + { 0x39BA, 77169 }, + { 0x39BB, 77145 }, + { 0x39BC, 77185 }, + { 0x39BD, 77193 }, + { 0x39BE, 77197 }, + { 0x39BF, 77205 }, + { 0x39C0, 77173 }, + { 0x39C1, 77201 }, + { 0x39C2, 77177 }, + { 0x39C3, 77149 }, + { 0x39C4, 77157 }, + { 0x39C5, 77141 }, + { 0x39C6, 77181 }, + { 0x39C7, 77133 }, + { 0x39C8, 77364 }, + { 0x39C9, 77161 }, + { 0x39CA, 77165 }, + { 0x39CB, 77153 }, + { 0x39CC, 77355 }, + { 0x39CD, 77351 }, + { 0x39CE, 77347 }, + { 0x39CF, 77271 }, + { 0x39D0, 77263 }, + { 0x39D1, 77267 }, + { 0x39D2, 77116 }, + { 0x39D3, 76509 }, + { 0x39D4, 76514 }, + { 0x39D5, 76519 }, + { 0x39D6, 77103 }, + { 0x39D7, 77108 }, + { 0x39D8, 11835 }, + { 0x39D9, 11955 }, + { 0x39DA, 11890 }, + { 0x39DB, 12010 }, + { 0x39DC, 11915 }, + { 0x39DD, 12035 }, + { 0x39DE, 11825 }, + { 0x39DF, 11945 }, + { 0x39E0, 11895 }, + { 0x39E1, 12015 }, + { 0x39E2, 11810 }, + { 0x39E3, 11930 }, + { 0x39E4, 11885 }, + { 0x39E5, 12005 }, + { 0x39E6, 11865 }, + { 0x39E7, 11985 }, + { 0x39E8, 11900 }, + { 0x39E9, 12020 }, + { 0x39EA, 11815 }, + { 0x39EB, 11935 }, + { 0x39EC, 11870 }, + { 0x39ED, 11990 }, + { 0x39EE, 11910 }, + { 0x39EF, 12030 }, + { 0x39F0, 11850 }, + { 0x39F1, 11970 }, + { 0x39F2, 11805 }, + { 0x39F3, 11925 }, + { 0x39F4, 11855 }, + { 0x39F5, 11975 }, + { 0x39F6, 11905 }, + { 0x39F7, 12025 }, + { 0x39F8, 11820 }, + { 0x39F9, 11940 }, + { 0x39FA, 11845 }, + { 0x39FB, 11965 }, + { 0x39FC, 11880 }, + { 0x39FD, 12000 }, + { 0x39FE, 11860 }, + { 0x39FF, 11980 }, + { 0x3A00, 11840 }, + { 0x3A01, 11960 }, + { 0x3A02, 11875 }, + { 0x3A03, 11995 }, + { 0x3A04, 11830 }, + { 0x3A05, 11950 }, + { 0x3A06, 11800 }, + { 0x3A07, 11920 }, + { 0x3A08, 11720 }, + { 0x3A09, 11764 }, + { 0x3A0A, 11752 }, + { 0x3A0B, 11788 }, + { 0x3A0C, 11760 }, + { 0x3A0D, 11748 }, + { 0x3A0E, 11756 }, + { 0x3A0F, 11724 }, + { 0x3A10, 11780 }, + { 0x3A11, 11796 }, + { 0x3A12, 11784 }, + { 0x3A13, 11792 }, + { 0x3A14, 11776 }, + { 0x3A15, 11772 }, + { 0x3A16, 11768 }, + { 0x3A17, 11728 }, + { 0x3A18, 11743 }, + { 0x3A19, 11733 }, + { 0x3A1A, 11738 }, + { 0x3A1B, 12050 }, + { 0x3A1C, 12058 }, + { 0x3A1D, 12054 }, + { 0x3A1E, 12040 }, + { 0x3A1F, 12045 }, + { 0x3A20, 63598 }, + { 0x3A21, 63611 }, + { 0x3A22, 63641 }, + { 0x3A23, 63696 }, + { 0x3A24, 63725 }, + { 0x3A25, 63778 }, + { 0x3A26, 63645 }, + { 0x3A27, 63741 }, + { 0x3A28, 63692 }, + { 0x3A29, 63708 }, + { 0x3A2A, 63712 }, + { 0x3A2B, 63533 }, + { 0x3A2C, 63538 }, + { 0x3A2D, 63543 }, + { 0x3A2E, 63528 }, + { 0x3A2F, 63548 }, + { 0x3A30, 63793 }, + { 0x3A31, 63484 }, + { 0x3A32, 63472 }, + { 0x3A33, 63799 }, + { 0x3A34, 63479 }, + { 0x3A35, 63593 }, + { 0x3A36, 63790 }, + { 0x3A37, 103129 }, + { 0x3A38, 103123 }, + { 0x3A39, 103222 }, + { 0x3A3A, 103225 }, + { 0x3A3B, 103120 }, + { 0x3A3C, 103126 }, + { 0x3A3D, 102913 }, + { 0x3A3E, 102907 }, + { 0x3A3F, 103189 }, + { 0x3A40, 103192 }, + { 0x3A41, 102904 }, + { 0x3A42, 102910 }, + { 0x3A43, 102331 }, + { 0x3A44, 102325 }, + { 0x3A45, 102922 }, + { 0x3A46, 102925 }, + { 0x3A47, 102322 }, + { 0x3A48, 102328 }, + { 0x3A49, 103174 }, + { 0x3A4A, 103186 }, + { 0x3A4B, 103180 }, + { 0x3A4C, 103228 }, + { 0x3A4D, 103231 }, + { 0x3A4E, 103177 }, + { 0x3A4F, 103183 }, + { 0x3A50, 102223 }, + { 0x3A51, 102235 }, + { 0x3A52, 102229 }, + { 0x3A53, 102856 }, + { 0x3A54, 102859 }, + { 0x3A55, 102226 }, + { 0x3A56, 102232 }, + { 0x3A57, 32345 }, + { 0x3A58, 29037 }, + { 0x3A59, 32933 }, + { 0x3A5A, 32335 }, + { 0x3A5B, 29421 }, + { 0x3A5C, 32275 }, + { 0x3A5D, 32428 }, + { 0x3A5E, 30062 }, + { 0x3A5F, 30008 }, + { 0x3A60, 30023 }, + { 0x3A61, 30145 }, + { 0x3A62, 30276 }, + { 0x3A63, 31927 }, + { 0x3A64, 32938 }, + { 0x3A65, 32943 }, + { 0x3A66, 32187 }, + { 0x3A67, 32781 }, + { 0x3A68, 32623 }, + { 0x3A69, 32630 }, + { 0x3A6A, 32511 }, + { 0x3A6B, 32517 }, + { 0x3A6C, 32746 }, + { 0x3A6D, 33147 }, + { 0x3A6E, 30832 }, + { 0x3A6F, 32385 }, + { 0x3A70, 30821 }, + { 0x3A71, 32390 }, + { 0x3A72, 32435 }, + { 0x3A73, 32440 }, + { 0x3A74, 32776 }, + { 0x3A75, 31216 }, + { 0x3A76, 31107 }, + { 0x3A77, 31872 }, + { 0x3A78, 32638 }, + { 0x3A79, 31178 }, + { 0x3A7A, 31888 }, + { 0x3A7B, 31900 }, + { 0x3A7C, 31892 }, + { 0x3A7D, 31473 }, + { 0x3A7E, 31481 }, + { 0x3A7F, 31489 }, + { 0x3A80, 31501 }, + { 0x3A81, 31580 }, + { 0x3A82, 107243 }, + { 0x3A83, 107929 }, + { 0x3A84, 107649 }, + { 0x3A85, 107635 }, + { 0x3A86, 107774 }, + { 0x3A87, 32284 }, + { 0x3A88, 32791 }, + { 0x3A89, 32202 }, + { 0x3A8A, 31880 }, + { 0x3A8B, 32786 }, + { 0x3A8C, 25051 }, + { 0x3A8D, 31783 }, + { 0x3A8E, 31856 }, + { 0x3A8F, 32563 }, + { 0x3A90, 108096 }, + { 0x3A91, 107442 }, + { 0x3A92, 107507 }, + { 0x3A93, 86897 }, + { 0x3A94, 86901 }, + { 0x3A95, 86905 }, + { 0x3A96, 86909 }, + { 0x3A97, 86917 }, + { 0x3A98, 86921 }, + { 0x3A99, 86949 }, + { 0x3A9A, 86997 }, + { 0x3A9B, 86953 }, + { 0x3A9C, 86957 }, + { 0x3A9D, 86961 }, + { 0x3A9E, 86965 }, + { 0x3A9F, 86969 }, + { 0x3AA0, 86973 }, + { 0x3AA1, 86977 }, + { 0x3AA2, 86981 }, + { 0x3AA3, 86985 }, + { 0x3AA4, 86989 }, + { 0x3AA5, 86993 }, + { 0x3AA6, 87001 }, + { 0x3AA7, 87005 }, + { 0x3AA8, 87009 }, + { 0x3AA9, 87013 }, + { 0x3AAA, 87017 }, + { 0x3AAB, 87021 }, + { 0x3AAC, 87025 }, + { 0x3AAD, 87029 }, + { 0x3AAE, 87033 }, + { 0x3AAF, 87037 }, + { 0x3AB0, 87041 }, + { 0x3AB1, 87049 }, + { 0x3AB2, 87161 }, + { 0x3AB3, 87165 }, + { 0x3AB4, 87053 }, + { 0x3AB5, 87057 }, + { 0x3AB6, 87061 }, + { 0x3AB7, 87065 }, + { 0x3AB8, 87069 }, + { 0x3AB9, 87169 }, + { 0x3ABA, 87173 }, + { 0x3ABB, 87177 }, + { 0x3ABC, 87181 }, + { 0x3ABD, 87185 }, + { 0x3ABE, 87189 }, + { 0x3ABF, 87073 }, + { 0x3AC0, 86913 }, + { 0x3AC1, 87077 }, + { 0x3AC2, 87081 }, + { 0x3AC3, 87085 }, + { 0x3AC4, 87089 }, + { 0x3AC5, 87093 }, + { 0x3AC6, 86925 }, + { 0x3AC7, 87097 }, + { 0x3AC8, 86929 }, + { 0x3AC9, 87101 }, + { 0x3ACA, 86933 }, + { 0x3ACB, 87105 }, + { 0x3ACC, 86937 }, + { 0x3ACD, 86941 }, + { 0x3ACE, 86945 }, + { 0x3ACF, 87157 }, + { 0x3AD0, 87193 }, + { 0x3AD1, 87197 }, + { 0x3AD2, 87201 }, + { 0x3AD3, 87205 }, + { 0x3AD4, 87209 }, + { 0x3AD5, 87213 }, + { 0x3AD6, 87217 }, + { 0x3AD7, 87221 }, + { 0x3AD8, 87225 }, + { 0x3AD9, 87229 }, + { 0x3ADA, 87233 }, + { 0x3ADB, 87237 }, + { 0x3ADC, 87109 }, + { 0x3ADD, 87113 }, + { 0x3ADE, 87117 }, + { 0x3ADF, 87121 }, + { 0x3AE0, 87125 }, + { 0x3AE1, 87129 }, + { 0x3AE2, 87133 }, + { 0x3AE3, 63665 }, + { 0x3AE4, 63704 }, + { 0x3AE5, 63674 }, + { 0x3AE6, 63683 }, + { 0x3AE7, 63628 }, + { 0x3AE8, 63619 }, + { 0x3AE9, 63737 }, + { 0x3AEA, 63716 }, + { 0x3AEB, 63757 }, + { 0x3AEC, 63761 }, + { 0x3AED, 63774 }, + { 0x3AEE, 63729 }, + { 0x3AEF, 63782 }, + { 0x3AF0, 63657 }, + { 0x3AF1, 63637 }, + { 0x3AF2, 63602 }, + { 0x3AF3, 63770 }, + { 0x3AF4, 63786 }, + { 0x3AF5, 63653 }, + { 0x3AF6, 63753 }, + { 0x3AF7, 63700 }, + { 0x3AF8, 63615 }, + { 0x3AF9, 63661 }, + { 0x3AFA, 63649 }, + { 0x3AFB, 63749 }, + { 0x3AFC, 63745 }, + { 0x3AFD, 63733 }, + { 0x3AFE, 63669 }, + { 0x3AFF, 63678 }, + { 0x3B00, 63687 }, + { 0x3B01, 63632 }, + { 0x3B02, 63623 }, + { 0x3B03, 63720 }, + { 0x3B04, 63765 }, + { 0x3B05, 63606 }, + { 0x3B06, 63568 }, + { 0x3B07, 63558 }, + { 0x3B08, 63553 }, + { 0x3B09, 63578 }, + { 0x3B0A, 63583 }, + { 0x3B0B, 63573 }, + { 0x3B0C, 63588 }, + { 0x3B0D, 63563 }, + { 0x3B0E, 63796 }, + { 0x3B0F, 63468 }, + { 0x3B10, 63475 }, + { 0x3B11, 63512 }, + { 0x3B12, 63488 }, + { 0x3B13, 63496 }, + { 0x3B14, 63524 }, + { 0x3B15, 63504 }, + { 0x3B16, 63500 }, + { 0x3B17, 63492 }, + { 0x3B18, 63520 }, + { 0x3B19, 63516 }, + { 0x3B1A, 63508 }, + { 0x3B1B, 56635 }, + { 0x3B1C, 56629 }, + { 0x3B1D, 56584 }, + { 0x3B1E, 56653 }, + { 0x3B1F, 56656 }, + { 0x3B20, 56641 }, + { 0x3B21, 56638 }, + { 0x3B22, 56662 }, + { 0x3B23, 56602 }, + { 0x3B24, 56533 }, + { 0x3B25, 56614 }, + { 0x3B26, 56536 }, + { 0x3B27, 56539 }, + { 0x3B28, 56674 }, + { 0x3B29, 56623 }, + { 0x3B2A, 56626 }, + { 0x3B2B, 56551 }, + { 0x3B2C, 56620 }, + { 0x3B2D, 56554 }, + { 0x3B2E, 56557 }, + { 0x3B2F, 56488 }, + { 0x3B30, 56689 }, + { 0x3B31, 56692 }, + { 0x3B32, 56140 }, + { 0x3B33, 56257 }, + { 0x3B34, 56176 }, + { 0x3B35, 56383 }, + { 0x3B36, 56233 }, + { 0x3B37, 56179 }, + { 0x3B38, 56407 }, + { 0x3B39, 56230 }, + { 0x3B3A, 56308 }, + { 0x3B3B, 56311 }, + { 0x3B3C, 56377 }, + { 0x3B3D, 56389 }, + { 0x3B3E, 56404 }, + { 0x3B3F, 56371 }, + { 0x3B40, 56395 }, + { 0x3B41, 56416 }, + { 0x3B42, 56305 }, + { 0x3B43, 56425 }, + { 0x3B44, 56248 }, + { 0x3B45, 56125 }, + { 0x3B46, 56341 }, + { 0x3B47, 56089 }, + { 0x3B48, 56338 }, + { 0x3B49, 56119 }, + { 0x3B4A, 56212 }, + { 0x3B4B, 56410 }, + { 0x3B4C, 56149 }, + { 0x3B4D, 56095 }, + { 0x3B4E, 56365 }, + { 0x3B4F, 56143 }, + { 0x3B50, 56272 }, + { 0x3B51, 56074 }, + { 0x3B52, 56401 }, + { 0x3B53, 56350 }, + { 0x3B54, 56353 }, + { 0x3B55, 56224 }, + { 0x3B56, 56068 }, + { 0x3B57, 56221 }, + { 0x3B58, 56227 }, + { 0x3B59, 56071 }, + { 0x3B5A, 56266 }, + { 0x3B5B, 56422 }, + { 0x3B5C, 56317 }, + { 0x3B5D, 56314 }, + { 0x3B5E, 56101 }, + { 0x3B5F, 56335 }, + { 0x3B60, 56083 }, + { 0x3B61, 56209 }, + { 0x3B62, 56326 }, + { 0x3B63, 6504 }, + { 0x3B64, 6507 }, + { 0x3B65, 6510 }, + { 0x3B66, 6513 }, + { 0x3B67, 6516 }, + { 0x3B68, 32984 }, + { 0x3B69, 32988 }, + { 0x3B6A, 32992 }, + { 0x3B6B, 33008 }, + { 0x3B6C, 33012 }, + { 0x3B6D, 33016 }, + { 0x3B6E, 33004 }, + { 0x3B6F, 83200 }, + { 0x3B70, 83190 }, + { 0x3B71, 83195 }, + { 0x3B72, 83210 }, + { 0x3B73, 83205 }, + { 0x3B74, 57286 }, + { 0x3B75, 57076 }, + { 0x3B76, 57492 }, + { 0x3B77, 57474 }, + { 0x3B78, 57373 }, + { 0x3B79, 57381 }, + { 0x3B7A, 57361 }, + { 0x3B7B, 57365 }, + { 0x3B7C, 57390 }, + { 0x3B7D, 57385 }, + { 0x3B7E, 57377 }, + { 0x3B7F, 57369 }, + { 0x3B80, 57478 }, + { 0x3B81, 57334 }, + { 0x3B82, 57328 }, + { 0x3B83, 57353 }, + { 0x3B84, 57345 }, + { 0x3B85, 57304 }, + { 0x3B86, 57309 }, + { 0x3B87, 57299 }, + { 0x3B88, 57209 }, + { 0x3B89, 57437 }, + { 0x3B8A, 57397 }, + { 0x3B8B, 57183 }, + { 0x3B8C, 57278 }, + { 0x3B8D, 57461 }, + { 0x3B8E, 57265 }, + { 0x3B8F, 57291 }, + { 0x3B90, 57416 }, + { 0x3B91, 57225 }, + { 0x3B92, 57445 }, + { 0x3B93, 57233 }, + { 0x3B94, 57241 }, + { 0x3B95, 57469 }, + { 0x3B96, 57406 }, + { 0x3B97, 57196 }, + { 0x3B98, 57453 }, + { 0x3B99, 57249 }, + { 0x3B9A, 57320 }, + { 0x3B9B, 57340 }, + { 0x3B9C, 57257 }, + { 0x3B9D, 57273 }, + { 0x3B9E, 57204 }, + { 0x3B9F, 57220 }, + { 0x3BA0, 57191 }, + { 0x3BA1, 57483 }, + { 0x3BA2, 46625 }, + { 0x3BA3, 46619 }, + { 0x3BA4, 46670 }, + { 0x3BA5, 46655 }, + { 0x3BA6, 46665 }, + { 0x3BA7, 46660 }, + { 0x3BA8, 45720 }, + { 0x3BA9, 45705 }, + { 0x3BAA, 45715 }, + { 0x3BAB, 45710 }, + { 0x3BAC, 47185 }, + { 0x3BAD, 47170 }, + { 0x3BAE, 47180 }, + { 0x3BAF, 47175 }, + { 0x3BB0, 47592 }, + { 0x3BB1, 47577 }, + { 0x3BB2, 47587 }, + { 0x3BB3, 47582 }, + { 0x3BB4, 47556 }, + { 0x3BB5, 47541 }, + { 0x3BB6, 47551 }, + { 0x3BB7, 47546 }, + { 0x3BB8, 47142 }, + { 0x3BB9, 47127 }, + { 0x3BBA, 47137 }, + { 0x3BBB, 47132 }, + { 0x3BBC, 46075 }, + { 0x3BBD, 46060 }, + { 0x3BBE, 46070 }, + { 0x3BBF, 46065 }, + { 0x3BC0, 47442 }, + { 0x3BC1, 47427 }, + { 0x3BC2, 47437 }, + { 0x3BC3, 47432 }, + { 0x3BC4, 46706 }, + { 0x3BC5, 46691 }, + { 0x3BC6, 46701 }, + { 0x3BC7, 46696 }, + { 0x3BC8, 46969 }, + { 0x3BC9, 46954 }, + { 0x3BCA, 46964 }, + { 0x3BCB, 46959 }, + { 0x3BCC, 47533 }, + { 0x3BCD, 47518 }, + { 0x3BCE, 47528 }, + { 0x3BCF, 47523 }, + { 0x3BD0, 47697 }, + { 0x3BD1, 47682 }, + { 0x3BD2, 47692 }, + { 0x3BD3, 47687 }, + { 0x3BD4, 47569 }, + { 0x3BD5, 47564 }, + { 0x3BD6, 47198 }, + { 0x3BD7, 47193 }, + { 0x3BD8, 45199 }, + { 0x3BD9, 45194 }, + { 0x3BDA, 46683 }, + { 0x3BDB, 46678 }, + { 0x3BDC, 45549 }, + { 0x3BDD, 45544 }, + { 0x3BDE, 46982 }, + { 0x3BDF, 46977 }, + { 0x3BE0, 47396 }, + { 0x3BE1, 47381 }, + { 0x3BE2, 47391 }, + { 0x3BE3, 47386 }, + { 0x3BE4, 45316 }, + { 0x3BE5, 45301 }, + { 0x3BE6, 45311 }, + { 0x3BE7, 45306 }, + { 0x3BE8, 46732 }, + { 0x3BE9, 46717 }, + { 0x3BEA, 46727 }, + { 0x3BEB, 46722 }, + { 0x3BEC, 47419 }, + { 0x3BED, 47404 }, + { 0x3BEE, 47414 }, + { 0x3BEF, 47409 }, + { 0x3BF0, 46930 }, + { 0x3BF1, 46924 }, + { 0x3BF2, 47465 }, + { 0x3BF3, 47450 }, + { 0x3BF4, 47460 }, + { 0x3BF5, 47455 }, + { 0x3BF6, 45479 }, + { 0x3BF7, 45471 }, + { 0x3BF8, 45459 }, + { 0x3BF9, 45441 }, + { 0x3BFA, 45453 }, + { 0x3BFB, 45447 }, + { 0x3BFC, 45535 }, + { 0x3BFD, 45517 }, + { 0x3BFE, 45529 }, + { 0x3BFF, 45523 }, + { 0x3C00, 46307 }, + { 0x3C01, 46301 }, + { 0x3C02, 46272 }, + { 0x3C03, 46263 }, + { 0x3C04, 47746 }, + { 0x3C05, 47750 }, + { 0x3C06, 47754 }, + { 0x3C07, 47759 }, + { 0x3C08, 47799 }, + { 0x3C09, 47804 }, + { 0x3C0A, 47809 }, + { 0x3C0B, 47816 }, + { 0x3C0C, 47776 }, + { 0x3C0D, 47781 }, + { 0x3C0E, 47827 }, + { 0x3C0F, 47764 }, + { 0x3C10, 47770 }, + { 0x3C11, 47786 }, + { 0x3C12, 47789 }, + { 0x3C13, 47794 }, + { 0x3C14, 47823 }, + { 0x3C15, 44862 }, + { 0x3C16, 44847 }, + { 0x3C17, 44857 }, + { 0x3C18, 44852 }, + { 0x3C19, 44836 }, + { 0x3C1A, 44831 }, + { 0x3C1B, 44875 }, + { 0x3C1C, 44870 }, + { 0x3C1D, 44901 }, + { 0x3C1E, 44896 }, + { 0x3C1F, 44823 }, + { 0x3C20, 44888 }, + { 0x3C21, 44883 }, + { 0x3C22, 47657 }, + { 0x3C23, 47651 }, + { 0x3C24, 47673 }, + { 0x3C25, 47667 }, + { 0x3C26, 44809 }, + { 0x3C27, 44794 }, + { 0x3C28, 44804 }, + { 0x3C29, 44799 }, + { 0x3C2A, 47606 }, + { 0x3C2B, 47597 }, + { 0x3C2C, 50069 }, + { 0x3C2D, 50037 }, + { 0x3C2E, 49897 }, + { 0x3C2F, 49887 }, + { 0x3C30, 50007 }, + { 0x3C31, 49997 }, + { 0x3C32, 49877 }, + { 0x3C33, 49867 }, + { 0x3C34, 49917 }, + { 0x3C35, 49907 }, + { 0x3C36, 49937 }, + { 0x3C37, 49927 }, + { 0x3C38, 49857 }, + { 0x3C39, 49837 }, + { 0x3C3A, 49847 }, + { 0x3C3B, 51664 }, + { 0x3C3C, 51638 }, + { 0x3C3D, 51651 }, + { 0x3C3E, 47278 }, + { 0x3C3F, 47260 }, + { 0x3C40, 47272 }, + { 0x3C41, 47266 }, + { 0x3C42, 50089 }, + { 0x3C43, 49957 }, + { 0x3C44, 50139 }, + { 0x3C45, 50058 }, + { 0x3C46, 50027 }, + { 0x3C47, 48112 }, + { 0x3C48, 48047 }, + { 0x3C49, 48135 }, + { 0x3C4A, 48163 }, + { 0x3C4B, 48097 }, + { 0x3C4C, 48082 }, + { 0x3C4D, 49520 }, + { 0x3C4E, 49427 }, + { 0x3C4F, 49562 }, + { 0x3C50, 49636 }, + { 0x3C51, 49477 }, + { 0x3C52, 49462 }, + { 0x3C53, 51148 }, + { 0x3C54, 51176 }, + { 0x3C55, 51140 }, + { 0x3C56, 51125 }, + { 0x3C57, 50253 }, + { 0x3C58, 50334 }, + { 0x3C59, 48480 }, + { 0x3C5A, 48513 }, + { 0x3C5B, 50385 }, + { 0x3C5C, 50341 }, + { 0x3C5D, 50399 }, + { 0x3C5E, 50983 }, + { 0x3C5F, 50885 }, + { 0x3C60, 51023 }, + { 0x3C61, 51089 }, + { 0x3C62, 49202 }, + { 0x3C63, 49285 }, + { 0x3C64, 48268 }, + { 0x3C65, 48210 }, + { 0x3C66, 48300 }, + { 0x3C67, 48314 }, + { 0x3C68, 49299 }, + { 0x3C69, 49386 }, + { 0x3C6A, 50183 }, + { 0x3C6B, 47973 }, + { 0x3C6C, 48024 }, + { 0x3C6D, 51244 }, + { 0x3C6E, 51286 }, + { 0x3C6F, 48372 }, + { 0x3C70, 48328 }, + { 0x3C71, 48404 }, + { 0x3C72, 48427 }, + { 0x3C73, 48357 }, + { 0x3C74, 48342 }, + { 0x3C75, 49073 }, + { 0x3C76, 49153 }, + { 0x3C77, 49102 }, + { 0x3C78, 49087 }, + { 0x3C79, 48668 }, + { 0x3C7A, 48682 }, + { 0x3C7B, 48596 }, + { 0x3C7C, 48696 }, + { 0x3C7D, 48624 }, + { 0x3C7E, 48751 }, + { 0x3C7F, 48660 }, + { 0x3C80, 48638 }, + { 0x3C81, 48972 }, + { 0x3C82, 48802 }, + { 0x3C83, 49004 }, + { 0x3C84, 49059 }, + { 0x3C85, 48905 }, + { 0x3C86, 48823 }, + { 0x3C87, 50512 }, + { 0x3C88, 50440 }, + { 0x3C89, 50553 }, + { 0x3C8A, 50583 }, + { 0x3C8B, 50461 }, + { 0x3C8C, 50447 }, + { 0x3C8D, 50745 }, + { 0x3C8E, 50625 }, + { 0x3C8F, 50759 }, + { 0x3C90, 50806 }, + { 0x3C91, 50675 }, + { 0x3C92, 50660 }, + { 0x3C93, 48542 }, + { 0x3C94, 48574 }, + { 0x3C95, 48527 }, + { 0x3C96, 48520 }, + { 0x3C97, 49747 }, + { 0x3C98, 49673 }, + { 0x3C99, 49761 }, + { 0x3C9A, 49816 }, + { 0x3C9B, 49723 }, + { 0x3C9C, 49708 }, + { 0x3C9D, 51096 }, + { 0x3C9E, 49160 }, + { 0x3C9F, 50213 }, + { 0x3CA0, 51616 }, + { 0x3CA1, 51623 }, + { 0x3CA2, 51595 }, + { 0x3CA3, 51581 }, + { 0x3CA4, 51609 }, + { 0x3CA5, 51630 }, + { 0x3CA6, 49987 }, + { 0x3CA7, 50159 }, + { 0x3CA8, 50109 }, + { 0x3CA9, 50149 }, + { 0x3CAA, 50047 }, + { 0x3CAB, 50017 }, + { 0x3CAC, 48068 }, + { 0x3CAD, 48177 }, + { 0x3CAE, 48142 }, + { 0x3CAF, 48170 }, + { 0x3CB0, 48089 }, + { 0x3CB1, 48075 }, + { 0x3CB2, 49448 }, + { 0x3CB3, 49650 }, + { 0x3CB4, 49615 }, + { 0x3CB5, 49643 }, + { 0x3CB6, 49469 }, + { 0x3CB7, 49455 }, + { 0x3CB8, 51111 }, + { 0x3CB9, 51190 }, + { 0x3CBA, 51155 }, + { 0x3CBB, 51183 }, + { 0x3CBC, 51132 }, + { 0x3CBD, 51118 }, + { 0x3CBE, 48349 }, + { 0x3CBF, 48335 }, + { 0x3CC0, 49094 }, + { 0x3CC1, 49080 }, + { 0x3CC2, 48645 }, + { 0x3CC3, 48603 }, + { 0x3CC4, 48730 }, + { 0x3CC5, 48652 }, + { 0x3CC6, 48631 }, + { 0x3CC7, 49038 }, + { 0x3CC8, 48897 }, + { 0x3CC9, 48816 }, + { 0x3CCA, 50454 }, + { 0x3CCB, 50569 }, + { 0x3CCC, 50646 }, + { 0x3CCD, 50820 }, + { 0x3CCE, 50785 }, + { 0x3CCF, 50813 }, + { 0x3CD0, 50667 }, + { 0x3CD1, 50653 }, + { 0x3CD2, 50204 }, + { 0x3CD3, 49694 }, + { 0x3CD4, 49830 }, + { 0x3CD5, 49795 }, + { 0x3CD6, 49823 }, + { 0x3CD7, 49715 }, + { 0x3CD8, 49701 }, + { 0x3CD9, 50079 }, + { 0x3CDA, 49947 }, + { 0x3CDB, 50099 }, + { 0x3CDC, 50129 }, + { 0x3CDD, 49977 }, + { 0x3CDE, 48105 }, + { 0x3CDF, 48040 }, + { 0x3CE0, 48128 }, + { 0x3CE1, 48156 }, + { 0x3CE2, 48061 }, + { 0x3CE3, 49513 }, + { 0x3CE4, 49420 }, + { 0x3CE5, 49555 }, + { 0x3CE6, 49629 }, + { 0x3CE7, 49441 }, + { 0x3CE8, 51169 }, + { 0x3CE9, 50246 }, + { 0x3CEA, 50327 }, + { 0x3CEB, 48473 }, + { 0x3CEC, 48506 }, + { 0x3CED, 50378 }, + { 0x3CEE, 50392 }, + { 0x3CEF, 50976 }, + { 0x3CF0, 50878 }, + { 0x3CF1, 51016 }, + { 0x3CF2, 51082 }, + { 0x3CF3, 49195 }, + { 0x3CF4, 49253 }, + { 0x3CF5, 49278 }, + { 0x3CF6, 48261 }, + { 0x3CF7, 48203 }, + { 0x3CF8, 48293 }, + { 0x3CF9, 48307 }, + { 0x3CFA, 49292 }, + { 0x3CFB, 50176 }, + { 0x3CFC, 47966 }, + { 0x3CFD, 48017 }, + { 0x3CFE, 51237 }, + { 0x3CFF, 51279 }, + { 0x3D00, 48365 }, + { 0x3D01, 48321 }, + { 0x3D02, 48397 }, + { 0x3D03, 48420 }, + { 0x3D04, 49066 }, + { 0x3D05, 49146 }, + { 0x3D06, 48675 }, + { 0x3D07, 48589 }, + { 0x3D08, 48689 }, + { 0x3D09, 48617 }, + { 0x3D0A, 48744 }, + { 0x3D0B, 48965 }, + { 0x3D0C, 48795 }, + { 0x3D0D, 48997 }, + { 0x3D0E, 49052 }, + { 0x3D0F, 48809 }, + { 0x3D10, 50505 }, + { 0x3D11, 50433 }, + { 0x3D12, 50546 }, + { 0x3D13, 50576 }, + { 0x3D14, 50738 }, + { 0x3D15, 50618 }, + { 0x3D16, 50752 }, + { 0x3D17, 50799 }, + { 0x3D18, 50639 }, + { 0x3D19, 48535 }, + { 0x3D1A, 48567 }, + { 0x3D1B, 48581 }, + { 0x3D1C, 49740 }, + { 0x3D1D, 49666 }, + { 0x3D1E, 49754 }, + { 0x3D1F, 49809 }, + { 0x3D20, 49687 }, + { 0x3D21, 50119 }, + { 0x3D22, 49967 }, + { 0x3D23, 48149 }, + { 0x3D24, 48054 }, + { 0x3D25, 49622 }, + { 0x3D26, 49434 }, + { 0x3D27, 51162 }, + { 0x3D28, 51104 }, + { 0x3D29, 51075 }, + { 0x3D2A, 50892 }, + { 0x3D2B, 51534 }, + { 0x3D2C, 51368 }, + { 0x3D2D, 48610 }, + { 0x3D2E, 48737 }, + { 0x3D2F, 49045 }, + { 0x3D30, 50792 }, + { 0x3D31, 50632 }, + { 0x3D32, 49802 }, + { 0x3D33, 49680 }, + { 0x3D34, 51588 }, + { 0x3D35, 51574 }, + { 0x3D36, 51602 }, + { 0x3D37, 49328 }, + { 0x3D38, 49313 }, + { 0x3D39, 47940 }, + { 0x3D3A, 47925 }, + { 0x3D3B, 51229 }, + { 0x3D3C, 51214 }, + { 0x3D3D, 50942 }, + { 0x3D3E, 50927 }, + { 0x3D3F, 51418 }, + { 0x3D40, 51403 }, + { 0x3D41, 48456 }, + { 0x3D42, 48441 }, + { 0x3D43, 50282 }, + { 0x3D44, 50267 }, + { 0x3D45, 50370 }, + { 0x3D46, 50355 }, + { 0x3D47, 49245 }, + { 0x3D48, 49230 }, + { 0x3D49, 48253 }, + { 0x3D4A, 48238 }, + { 0x3D4B, 51456 }, + { 0x3D4C, 51361 }, + { 0x3D4D, 51484 }, + { 0x3D4E, 51548 }, + { 0x3D4F, 51389 }, + { 0x3D50, 50913 }, + { 0x3D51, 49216 }, + { 0x3D52, 48224 }, + { 0x3D53, 49320 }, + { 0x3D54, 49306 }, + { 0x3D55, 47932 }, + { 0x3D56, 47918 }, + { 0x3D57, 51221 }, + { 0x3D58, 51207 }, + { 0x3D59, 50934 }, + { 0x3D5A, 50920 }, + { 0x3D5B, 51410 }, + { 0x3D5C, 51396 }, + { 0x3D5D, 48448 }, + { 0x3D5E, 48434 }, + { 0x3D5F, 50274 }, + { 0x3D60, 50260 }, + { 0x3D61, 50362 }, + { 0x3D62, 50348 }, + { 0x3D63, 49237 }, + { 0x3D64, 49223 }, + { 0x3D65, 48245 }, + { 0x3D66, 48231 }, + { 0x3D67, 51435 }, + { 0x3D68, 51340 }, + { 0x3D69, 51463 }, + { 0x3D6A, 51527 }, + { 0x3D6B, 51382 }, + { 0x3D6C, 50906 }, + { 0x3D6D, 49209 }, + { 0x3D6E, 48217 }, + { 0x3D6F, 51449 }, + { 0x3D70, 51354 }, + { 0x3D71, 51477 }, + { 0x3D72, 51541 }, + { 0x3D73, 50899 }, + { 0x3D74, 51375 }, + { 0x3D75, 49379 }, + { 0x3D76, 50969 }, + { 0x3D77, 50871 }, + { 0x3D78, 51009 }, + { 0x3D79, 51442 }, + { 0x3D7A, 51347 }, + { 0x3D7B, 51470 }, + { 0x3D7C, 49372 }, + { 0x3D7D, 50169 }, + { 0x3D7E, 50190 }, + { 0x3D7F, 50197 }, + { 0x3D80, 63929 }, + { 0x3D81, 63932 }, + { 0x3D82, 51694 }, + { 0x3D83, 50837 }, + { 0x3D84, 50842 }, + { 0x3D85, 50847 }, + { 0x3D86, 50852 }, + { 0x3D87, 50857 }, + { 0x3D88, 51735 }, + { 0x3D89, 51560 }, + { 0x3D8A, 51681 }, + { 0x3D8B, 51703 }, + { 0x3D8C, 51564 }, + { 0x3D8D, 51685 }, + { 0x3D8E, 51724 }, + { 0x3D8F, 51677 }, + { 0x3D90, 51720 }, + { 0x3D91, 51712 }, + { 0x3D92, 49504 }, + { 0x3D93, 49393 }, + { 0x3D94, 49402 }, + { 0x3D95, 49411 }, + { 0x3D96, 49546 }, + { 0x3D97, 49597 }, + { 0x3D98, 49569 }, + { 0x3D99, 49606 }, + { 0x3D9A, 50290 }, + { 0x3D9B, 50299 }, + { 0x3D9C, 48487 }, + { 0x3D9D, 48496 }, + { 0x3D9E, 50862 }, + { 0x3D9F, 50950 }, + { 0x3DA0, 50959 }, + { 0x3DA1, 51030 }, + { 0x3DA2, 51039 }, + { 0x3DA3, 51048 }, + { 0x3DA4, 51057 }, + { 0x3DA5, 51066 }, + { 0x3DA6, 49168 }, + { 0x3DA7, 49177 }, + { 0x3DA8, 49260 }, + { 0x3DA9, 51322 }, + { 0x3DAA, 51331 }, + { 0x3DAB, 51426 }, + { 0x3DAC, 51491 }, + { 0x3DAD, 51500 }, + { 0x3DAE, 51509 }, + { 0x3DAF, 51518 }, + { 0x3DB0, 48193 }, + { 0x3DB1, 48275 }, + { 0x3DB2, 48284 }, + { 0x3DB3, 49336 }, + { 0x3DB4, 49345 }, + { 0x3DB5, 49363 }, + { 0x3DB6, 49354 }, + { 0x3DB7, 47948 }, + { 0x3DB8, 47999 }, + { 0x3DB9, 48008 }, + { 0x3DBA, 47989 }, + { 0x3DBB, 51270 }, + { 0x3DBC, 51251 }, + { 0x3DBD, 51260 }, + { 0x3DBE, 48379 }, + { 0x3DBF, 48388 }, + { 0x3DC0, 49110 }, + { 0x3DC1, 49137 }, + { 0x3DC2, 48777 }, + { 0x3DC3, 48758 }, + { 0x3DC4, 48767 }, + { 0x3DC5, 48938 }, + { 0x3DC6, 48929 }, + { 0x3DC7, 48979 }, + { 0x3DC8, 48988 }, + { 0x3DC9, 49011 }, + { 0x3DCA, 49020 }, + { 0x3DCB, 50415 }, + { 0x3DCC, 50424 }, + { 0x3DCD, 50406 }, + { 0x3DCE, 50469 }, + { 0x3DCF, 50496 }, + { 0x3DD0, 50528 }, + { 0x3DD1, 50537 }, + { 0x3DD2, 50487 }, + { 0x3DD3, 48549 }, + { 0x3DD4, 48558 }, + { 0x3DD5, 50609 }, + { 0x3DD6, 50599 }, + { 0x3DD7, 50720 }, + { 0x3DD8, 50729 }, + { 0x3DD9, 50710 }, + { 0x3DDA, 50766 }, + { 0x3DDB, 50775 }, + { 0x3DDC, 49777 }, + { 0x3DDD, 49786 }, + { 0x3DDE, 48119 }, + { 0x3DDF, 49485 }, + { 0x3DE0, 49494 }, + { 0x3DE1, 49527 }, + { 0x3DE2, 49536 }, + { 0x3DE3, 49578 }, + { 0x3DE4, 49587 }, + { 0x3DE5, 50308 }, + { 0x3DE6, 50236 }, + { 0x3DE7, 50317 }, + { 0x3DE8, 50999 }, + { 0x3DE9, 49186 }, + { 0x3DEA, 51313 }, + { 0x3DEB, 48184 }, + { 0x3DEC, 48920 }, + { 0x3DED, 49029 }, + { 0x3DEE, 49657 }, + { 0x3DEF, 49731 }, + { 0x3DF0, 49768 }, + { 0x3DF1, 50560 }, + { 0x3DF2, 49128 }, + { 0x3DF3, 50590 }, + { 0x3DF4, 49119 }, + { 0x3DF5, 48786 }, + { 0x3DF6, 47980 }, + { 0x3DF7, 48703 }, + { 0x3DF8, 50692 }, + { 0x3DF9, 50519 }, + { 0x3DFA, 48956 }, + { 0x3DFB, 48712 }, + { 0x3DFC, 48947 }, + { 0x3DFD, 50683 }, + { 0x3DFE, 50227 }, + { 0x3DFF, 48464 }, + { 0x3E00, 50478 }, + { 0x3E01, 48411 }, + { 0x3E02, 48031 }, + { 0x3E03, 48721 }, + { 0x3E04, 47957 }, + { 0x3E05, 49269 }, + { 0x3E06, 50990 }, + { 0x3E07, 50701 }, + { 0x3E08, 51716 }, + { 0x3E09, 51298 }, + { 0x3E0A, 50827 }, + { 0x3E0B, 51202 }, + { 0x3E0C, 51197 }, + { 0x3E0D, 51689 }, + { 0x3E0E, 51293 }, + { 0x3E0F, 51569 }, + { 0x3E10, 51555 }, + { 0x3E11, 51698 }, + { 0x3E12, 51308 }, + { 0x3E13, 51740 }, + { 0x3E14, 51745 }, + { 0x3E15, 16668 }, + { 0x3E16, 51707 }, + { 0x3E17, 51730 }, + { 0x3E18, 50222 }, + { 0x3E19, 143327 }, + { 0x3E1A, 143444 }, + { 0x3E1B, 143437 }, + { 0x3E1C, 143322 }, + { 0x3E1D, 143420 }, + { 0x3E1E, 143431 }, + { 0x3E1F, 143414 }, + { 0x3E20, 143271 }, + { 0x3E21, 143370 }, + { 0x3E22, 143425 }, + { 0x3E23, 117474 }, + { 0x3E24, 117483 }, + { 0x3E25, 116988 }, + { 0x3E26, 116993 }, + { 0x3E27, 117059 }, + { 0x3E28, 117071 }, + { 0x3E29, 117570 }, + { 0x3E2A, 117478 }, + { 0x3E2B, 117487 }, + { 0x3E2C, 116907 }, + { 0x3E2D, 116915 }, + { 0x3E2E, 117063 }, + { 0x3E2F, 117075 }, + { 0x3E30, 117573 }, + { 0x3E31, 117223 }, + { 0x3E32, 117228 }, + { 0x3E33, 143234 }, + { 0x3E34, 143216 }, + { 0x3E35, 143222 }, + { 0x3E36, 143228 }, + { 0x3E37, 143315 }, + { 0x3E38, 143309 }, + { 0x3E39, 143408 }, + { 0x3E3A, 143256 }, + { 0x3E3B, 143347 }, + { 0x3E3C, 143301 }, + { 0x3E3D, 143400 }, + { 0x3E3E, 143248 }, + { 0x3E3F, 143339 }, + { 0x3E40, 143286 }, + { 0x3E41, 143385 }, + { 0x3E42, 143241 }, + { 0x3E43, 143332 }, + { 0x3E44, 143279 }, + { 0x3E45, 143378 }, + { 0x3E46, 143263 }, + { 0x3E47, 143354 }, + { 0x3E48, 64902 }, + { 0x3E49, 43718 }, + { 0x3E4A, 143294 }, + { 0x3E4B, 143393 }, + { 0x3E4C, 54285 }, + { 0x3E4D, 129682 }, + { 0x3E4E, 17532 }, + { 0x3E4F, 54688 }, + { 0x3E50, 54282 }, + { 0x3E51, 129679 }, + { 0x3E52, 17525 }, + { 0x3E53, 41307 }, + { 0x3E54, 41465 }, + { 0x3E55, 41287 }, + { 0x3E56, 41457 }, + { 0x3E57, 41305 }, + { 0x3E58, 41449 }, + { 0x3E59, 41462 }, + { 0x3E5A, 41270 }, + { 0x3E5B, 41299 }, + { 0x3E5C, 41318 }, + { 0x3E5D, 41290 }, + { 0x3E5E, 41309 }, + { 0x3E5F, 41294 }, + { 0x3E60, 41313 }, + { 0x3E61, 41396 }, + { 0x3E62, 41452 }, + { 0x3E63, 41429 }, + { 0x3E64, 41302 }, + { 0x3E65, 41474 }, + { 0x3E66, 41454 }, + { 0x3E67, 41471 }, + { 0x3E68, 41393 }, + { 0x3E69, 41424 }, + { 0x3E6A, 41390 }, + { 0x3E6B, 41421 }, + { 0x3E6C, 41459 }, + { 0x3E6D, 47902 }, + { 0x3E6E, 47870 }, + { 0x3E6F, 47891 }, + { 0x3E70, 44303 }, + { 0x3E71, 47914 }, + { 0x3E72, 44402 }, + { 0x3E73, 44398 }, + { 0x3E74, 44368 }, + { 0x3E75, 44364 }, + { 0x3E76, 44423 }, + { 0x3E77, 44419 }, + { 0x3E78, 47742 }, + { 0x3E79, 47738 }, + { 0x3E7A, 44757 }, + { 0x3E7B, 44753 }, + { 0x3E7C, 47323 }, + { 0x3E7D, 46439 }, + { 0x3E7E, 46431 }, + { 0x3E7F, 46395 }, + { 0x3E80, 46387 }, + { 0x3E81, 46121 }, + { 0x3E82, 46113 }, + { 0x3E83, 46417 }, + { 0x3E84, 46409 }, + { 0x3E85, 46226 }, + { 0x3E86, 46202 }, + { 0x3E87, 46218 }, + { 0x3E88, 46210 }, + { 0x3E89, 46647 }, + { 0x3E8A, 46610 }, + { 0x3E8B, 45069 }, + { 0x3E8C, 45054 }, + { 0x3E8D, 45064 }, + { 0x3E8E, 45059 }, + { 0x3E8F, 46046 }, + { 0x3E90, 46040 }, + { 0x3E91, 46052 }, + { 0x3E92, 46016 }, + { 0x3E93, 46026 }, + { 0x3E94, 46021 }, + { 0x3E95, 47109 }, + { 0x3E96, 47094 }, + { 0x3E97, 47104 }, + { 0x3E98, 47099 }, + { 0x3E99, 46795 }, + { 0x3E9A, 46780 }, + { 0x3E9B, 46790 }, + { 0x3E9C, 46785 }, + { 0x3E9D, 45422 }, + { 0x3E9E, 45407 }, + { 0x3E9F, 45417 }, + { 0x3EA0, 45412 }, + { 0x3EA1, 46818 }, + { 0x3EA2, 46803 }, + { 0x3EA3, 46813 }, + { 0x3EA4, 46808 }, + { 0x3EA5, 45186 }, + { 0x3EA6, 45181 }, + { 0x3EA7, 47086 }, + { 0x3EA8, 47081 }, + { 0x3EA9, 45880 }, + { 0x3EAA, 45875 }, + { 0x3EAB, 47162 }, + { 0x3EAC, 47157 }, + { 0x3EAD, 47073 }, + { 0x3EAE, 47058 }, + { 0x3EAF, 47068 }, + { 0x3EB0, 47063 }, + { 0x3EB1, 47494 }, + { 0x3EB2, 47479 }, + { 0x3EB3, 47489 }, + { 0x3EB4, 47484 }, + { 0x3EB5, 45924 }, + { 0x3EB6, 45909 }, + { 0x3EB7, 45919 }, + { 0x3EB8, 45914 }, + { 0x3EB9, 45098 }, + { 0x3EBA, 45083 }, + { 0x3EBB, 45093 }, + { 0x3EBC, 45088 }, + { 0x3EBD, 45982 }, + { 0x3EBE, 45967 }, + { 0x3EBF, 45977 }, + { 0x3EC0, 45972 }, + { 0x3EC1, 46346 }, + { 0x3EC2, 46331 }, + { 0x3EC3, 46341 }, + { 0x3EC4, 46336 }, + { 0x3EC5, 44962 }, + { 0x3EC6, 44947 }, + { 0x3EC7, 44957 }, + { 0x3EC8, 44952 }, + { 0x3EC9, 47315 }, + { 0x3ECA, 47300 }, + { 0x3ECB, 47310 }, + { 0x3ECC, 47305 }, + { 0x3ECD, 45268 }, + { 0x3ECE, 45253 }, + { 0x3ECF, 45263 }, + { 0x3ED0, 45258 }, + { 0x3ED1, 45772 }, + { 0x3ED2, 45757 }, + { 0x3ED3, 45767 }, + { 0x3ED4, 45762 }, + { 0x3ED5, 45611 }, + { 0x3ED6, 45596 }, + { 0x3ED7, 45606 }, + { 0x3ED8, 45601 }, + { 0x3ED9, 45680 }, + { 0x3EDA, 45665 }, + { 0x3EDB, 45675 }, + { 0x3EDC, 45670 }, + { 0x3EDD, 46863 }, + { 0x3EDE, 46848 }, + { 0x3EDF, 46858 }, + { 0x3EE0, 46853 }, + { 0x3EE1, 46946 }, + { 0x3EE2, 46915 }, + { 0x3EE3, 46941 }, + { 0x3EE4, 46936 }, + { 0x3EE5, 45508 }, + { 0x3EE6, 45493 }, + { 0x3EE7, 45503 }, + { 0x3EE8, 45498 }, + { 0x3EE9, 46152 }, + { 0x3EEA, 46147 }, + { 0x3EEB, 46641 }, + { 0x3EEC, 46635 }, + { 0x3EED, 46323 }, + { 0x3EEE, 46247 }, + { 0x3EEF, 46318 }, + { 0x3EF0, 46313 }, + { 0x3EF1, 48880 }, + { 0x3EF2, 48870 }, + { 0x3EF3, 48840 }, + { 0x3EF4, 48830 }, + { 0x3EF5, 48860 }, + { 0x3EF6, 48850 }, + { 0x3EF7, 48913 }, + { 0x3EF8, 48890 }, + { 0x3EF9, 17561 }, + { 0x3EFA, 124823 }, + { 0x3EFB, 124810 }, + { 0x3EFC, 124786 }, + { 0x3EFD, 124778 }, + { 0x3EFE, 124789 }, + { 0x3EFF, 124805 }, + { 0x3F00, 124815 }, + { 0x3F01, 124452 }, + { 0x3F02, 124770 }, + { 0x3F03, 124797 }, + { 0x3F04, 124455 }, + { 0x3F05, 124460 }, + { 0x3F06, 124829 }, + { 0x3F07, 124437 }, + { 0x3F08, 124795 }, + { 0x3F09, 124480 }, + { 0x3F0A, 124462 }, + { 0x3F0B, 124468 }, + { 0x3F0C, 124489 }, + { 0x3F0D, 124474 }, + { 0x3F0E, 124471 }, + { 0x3F0F, 124465 }, + { 0x3F10, 124486 }, + { 0x3F11, 124483 }, + { 0x3F12, 124477 }, + { 0x3F13, 124458 }, + { 0x3F14, 124813 }, + { 0x3F15, 124807 }, + { 0x3F16, 124781 }, + { 0x3F17, 124826 }, + { 0x3F18, 124799 }, + { 0x3F19, 124820 }, + { 0x3F1A, 124625 }, + { 0x3F1B, 124630 }, + { 0x3F1C, 124635 }, + { 0x3F1D, 124640 }, + { 0x3F1E, 124645 }, + { 0x3F1F, 124650 }, + { 0x3F20, 124655 }, + { 0x3F21, 124660 }, + { 0x3F22, 124665 }, + { 0x3F23, 124670 }, + { 0x3F24, 124675 }, + { 0x3F25, 124680 }, + { 0x3F26, 124685 }, + { 0x3F27, 124690 }, + { 0x3F28, 124695 }, + { 0x3F29, 124700 }, + { 0x3F2A, 124705 }, + { 0x3F2B, 124710 }, + { 0x3F2C, 124715 }, + { 0x3F2D, 124720 }, + { 0x3F2E, 124725 }, + { 0x3F2F, 124730 }, + { 0x3F30, 124735 }, + { 0x3F31, 124740 }, + { 0x3F32, 124745 }, + { 0x3F33, 124750 }, + { 0x3F34, 124448 }, + { 0x3F35, 124792 }, + { 0x3F36, 124766 }, + { 0x3F37, 124817 }, + { 0x3F38, 124422 }, + { 0x3F39, 124492 }, + { 0x3F3A, 124495 }, + { 0x3F3B, 124500 }, + { 0x3F3C, 124505 }, + { 0x3F3D, 124510 }, + { 0x3F3E, 124515 }, + { 0x3F3F, 124520 }, + { 0x3F40, 124525 }, + { 0x3F41, 124530 }, + { 0x3F42, 124535 }, + { 0x3F43, 124540 }, + { 0x3F44, 124545 }, + { 0x3F45, 124550 }, + { 0x3F46, 124555 }, + { 0x3F47, 124560 }, + { 0x3F48, 124565 }, + { 0x3F49, 124570 }, + { 0x3F4A, 124575 }, + { 0x3F4B, 124580 }, + { 0x3F4C, 124585 }, + { 0x3F4D, 124590 }, + { 0x3F4E, 124595 }, + { 0x3F4F, 124600 }, + { 0x3F50, 124605 }, + { 0x3F51, 124610 }, + { 0x3F52, 124615 }, + { 0x3F53, 124620 }, + { 0x3F54, 124440 }, + { 0x3F55, 124802 }, + { 0x3F56, 124758 }, + { 0x3F57, 124773 }, + { 0x3F58, 124444 }, + { 0x3F59, 124762 }, + { 0x3F5A, 125316 }, + { 0x3F5B, 124836 }, + { 0x3F5C, 124847 }, + { 0x3F5D, 125320 }, + { 0x3F5E, 125293 }, + { 0x3F5F, 125232 }, + { 0x3F60, 125248 }, + { 0x3F61, 125258 }, + { 0x3F62, 125268 }, + { 0x3F63, 125253 }, + { 0x3F64, 125263 }, + { 0x3F65, 125278 }, + { 0x3F66, 125288 }, + { 0x3F67, 125283 }, + { 0x3F68, 125273 }, + { 0x3F69, 125323 }, + { 0x3F6A, 125064 }, + { 0x3F6B, 125072 }, + { 0x3F6C, 125084 }, + { 0x3F6D, 125068 }, + { 0x3F6E, 125080 }, + { 0x3F6F, 125108 }, + { 0x3F70, 125116 }, + { 0x3F71, 125124 }, + { 0x3F72, 125112 }, + { 0x3F73, 125120 }, + { 0x3F74, 125188 }, + { 0x3F75, 125196 }, + { 0x3F76, 125204 }, + { 0x3F77, 125192 }, + { 0x3F78, 125200 }, + { 0x3F79, 125208 }, + { 0x3F7A, 125216 }, + { 0x3F7B, 125224 }, + { 0x3F7C, 125212 }, + { 0x3F7D, 125220 }, + { 0x3F7E, 125148 }, + { 0x3F7F, 125156 }, + { 0x3F80, 125164 }, + { 0x3F81, 125152 }, + { 0x3F82, 125160 }, + { 0x3F83, 125088 }, + { 0x3F84, 125096 }, + { 0x3F85, 125104 }, + { 0x3F86, 125092 }, + { 0x3F87, 125100 }, + { 0x3F88, 125128 }, + { 0x3F89, 125136 }, + { 0x3F8A, 125144 }, + { 0x3F8B, 125132 }, + { 0x3F8C, 125140 }, + { 0x3F8D, 125236 }, + { 0x3F8E, 125244 }, + { 0x3F8F, 125240 }, + { 0x3F90, 125168 }, + { 0x3F91, 125176 }, + { 0x3F92, 125184 }, + { 0x3F93, 125172 }, + { 0x3F94, 125180 }, + { 0x3F95, 125228 }, + { 0x3F96, 125076 }, + { 0x3F97, 125297 }, + { 0x3F98, 125302 }, + { 0x3F99, 124854 }, + { 0x3F9A, 124973 }, + { 0x3F9B, 125041 }, + { 0x3F9C, 125017 }, + { 0x3F9D, 124961 }, + { 0x3F9E, 125021 }, + { 0x3F9F, 125025 }, + { 0x3FA0, 124977 }, + { 0x3FA1, 125045 }, + { 0x3FA2, 124969 }, + { 0x3FA3, 125049 }, + { 0x3FA4, 125033 }, + { 0x3FA5, 125037 }, + { 0x3FA6, 125005 }, + { 0x3FA7, 125057 }, + { 0x3FA8, 125053 }, + { 0x3FA9, 125029 }, + { 0x3FAA, 124957 }, + { 0x3FAB, 124965 }, + { 0x3FAC, 125013 }, + { 0x3FAD, 125001 }, + { 0x3FAE, 124941 }, + { 0x3FAF, 124997 }, + { 0x3FB0, 124953 }, + { 0x3FB1, 124945 }, + { 0x3FB2, 125009 }, + { 0x3FB3, 124981 }, + { 0x3FB4, 124985 }, + { 0x3FB5, 124993 }, + { 0x3FB6, 124989 }, + { 0x3FB7, 124949 }, + { 0x3FB8, 124857 }, + { 0x3FB9, 124877 }, + { 0x3FBA, 124905 }, + { 0x3FBB, 124933 }, + { 0x3FBC, 124881 }, + { 0x3FBD, 124861 }, + { 0x3FBE, 124937 }, + { 0x3FBF, 124909 }, + { 0x3FC0, 124869 }, + { 0x3FC1, 124893 }, + { 0x3FC2, 124925 }, + { 0x3FC3, 124889 }, + { 0x3FC4, 124917 }, + { 0x3FC5, 124873 }, + { 0x3FC6, 124929 }, + { 0x3FC7, 124897 }, + { 0x3FC8, 124901 }, + { 0x3FC9, 124921 }, + { 0x3FCA, 124885 }, + { 0x3FCB, 124913 }, + { 0x3FCC, 124865 }, + { 0x3FCD, 124434 }, + { 0x3FCE, 124755 }, + { 0x3FCF, 124425 }, + { 0x3FD0, 124784 }, + { 0x3FD1, 124775 }, + { 0x3FD2, 124431 }, + { 0x3FD3, 124428 }, + { 0x3FD4, 124843 }, + { 0x3FD5, 125310 }, + { 0x3FD6, 125061 }, + { 0x3FD7, 125313 }, + { 0x3FD8, 125307 }, + { 0x3FD9, 124840 }, + { 0x3FDA, 124851 }, + { 0x3FDB, 133849 }, + { 0x3FDC, 133852 }, + { 0x3FDD, 133855 }, + { 0x3FDE, 63917 }, + { 0x3FDF, 134506 }, + { 0x3FE0, 62843 }, + { 0x3FE1, 62968 }, + { 0x3FE2, 62928 }, + { 0x3FE3, 63068 }, + { 0x3FE4, 62853 }, + { 0x3FE5, 62808 }, + { 0x3FE6, 63003 }, + { 0x3FE7, 62838 }, + { 0x3FE8, 62873 }, + { 0x3FE9, 63023 }, + { 0x3FEA, 63048 }, + { 0x3FEB, 63008 }, + { 0x3FEC, 62958 }, + { 0x3FED, 63078 }, + { 0x3FEE, 63138 }, + { 0x3FEF, 62998 }, + { 0x3FF0, 63088 }, + { 0x3FF1, 63103 }, + { 0x3FF2, 63153 }, + { 0x3FF3, 63148 }, + { 0x3FF4, 62868 }, + { 0x3FF5, 63118 }, + { 0x3FF6, 62878 }, + { 0x3FF7, 62903 }, + { 0x3FF8, 62833 }, + { 0x3FF9, 62908 }, + { 0x3FFA, 62938 }, + { 0x3FFB, 63028 }, + { 0x3FFC, 63043 }, + { 0x3FFD, 62818 }, + { 0x3FFE, 63113 }, + { 0x3FFF, 62973 }, + { 0x4000, 62858 }, + { 0x4001, 63018 }, + { 0x4002, 62883 }, + { 0x4003, 63143 }, + { 0x4004, 62898 }, + { 0x4005, 62948 }, + { 0x4006, 63063 }, + { 0x4007, 62923 }, + { 0x4008, 63033 }, + { 0x4009, 62813 }, + { 0x400A, 62918 }, + { 0x400B, 62943 }, + { 0x400C, 62848 }, + { 0x400D, 62983 }, + { 0x400E, 62863 }, + { 0x400F, 63053 }, + { 0x4010, 63058 }, + { 0x4011, 62823 }, + { 0x4012, 62963 }, + { 0x4013, 62828 }, + { 0x4014, 63098 }, + { 0x4015, 63038 }, + { 0x4016, 63128 }, + { 0x4017, 62978 }, + { 0x4018, 62988 }, + { 0x4019, 62888 }, + { 0x401A, 63123 }, + { 0x401B, 62893 }, + { 0x401C, 62913 }, + { 0x401D, 62993 }, + { 0x401E, 63158 }, + { 0x401F, 63108 }, + { 0x4020, 63168 }, + { 0x4021, 63013 }, + { 0x4022, 62933 }, + { 0x4023, 63073 }, + { 0x4024, 63133 }, + { 0x4025, 62953 }, + { 0x4026, 63093 }, + { 0x4027, 63083 }, + { 0x4028, 63163 }, + { 0x4029, 63173 }, + { 0x402A, 62182 }, + { 0x402B, 62186 }, + { 0x402C, 62190 }, + { 0x402D, 62194 }, + { 0x402E, 62198 }, + { 0x402F, 62202 }, + { 0x4030, 62206 }, + { 0x4031, 62210 }, + { 0x4032, 62214 }, + { 0x4033, 62218 }, + { 0x4034, 62222 }, + { 0x4035, 62226 }, + { 0x4036, 62230 }, + { 0x4037, 62234 }, + { 0x4038, 62238 }, + { 0x4039, 62243 }, + { 0x403A, 62248 }, + { 0x403B, 62253 }, + { 0x403C, 62583 }, + { 0x403D, 62588 }, + { 0x403E, 62593 }, + { 0x403F, 62598 }, + { 0x4040, 62603 }, + { 0x4041, 62608 }, + { 0x4042, 62613 }, + { 0x4043, 62618 }, + { 0x4044, 62623 }, + { 0x4045, 62628 }, + { 0x4046, 62258 }, + { 0x4047, 62263 }, + { 0x4048, 62268 }, + { 0x4049, 62273 }, + { 0x404A, 62278 }, + { 0x404B, 62778 }, + { 0x404C, 62783 }, + { 0x404D, 62283 }, + { 0x404E, 62288 }, + { 0x404F, 62293 }, + { 0x4050, 62788 }, + { 0x4051, 62793 }, + { 0x4052, 62297 }, + { 0x4053, 62302 }, + { 0x4054, 62307 }, + { 0x4055, 62311 }, + { 0x4056, 62316 }, + { 0x4057, 62320 }, + { 0x4058, 62324 }, + { 0x4059, 62329 }, + { 0x405A, 62333 }, + { 0x405B, 62337 }, + { 0x405C, 62798 }, + { 0x405D, 62341 }, + { 0x405E, 62345 }, + { 0x405F, 62349 }, + { 0x4060, 62354 }, + { 0x4061, 62358 }, + { 0x4062, 62362 }, + { 0x4063, 62367 }, + { 0x4064, 62372 }, + { 0x4065, 62376 }, + { 0x4066, 62380 }, + { 0x4067, 62384 }, + { 0x4068, 62388 }, + { 0x4069, 62392 }, + { 0x406A, 62396 }, + { 0x406B, 62400 }, + { 0x406C, 62404 }, + { 0x406D, 62408 }, + { 0x406E, 62413 }, + { 0x406F, 62417 }, + { 0x4070, 62422 }, + { 0x4071, 62426 }, + { 0x4072, 62430 }, + { 0x4073, 62434 }, + { 0x4074, 62438 }, + { 0x4075, 62442 }, + { 0x4076, 62446 }, + { 0x4077, 62450 }, + { 0x4078, 62454 }, + { 0x4079, 62458 }, + { 0x407A, 62462 }, + { 0x407B, 62466 }, + { 0x407C, 62471 }, + { 0x407D, 62476 }, + { 0x407E, 62481 }, + { 0x407F, 62486 }, + { 0x4080, 62491 }, + { 0x4081, 62495 }, + { 0x4082, 62500 }, + { 0x4083, 62504 }, + { 0x4084, 62508 }, + { 0x4085, 62514 }, + { 0x4086, 62519 }, + { 0x4087, 62525 }, + { 0x4088, 62530 }, + { 0x4089, 62534 }, + { 0x408A, 62803 }, + { 0x408B, 62538 }, + { 0x408C, 62542 }, + { 0x408D, 62546 }, + { 0x408E, 62550 }, + { 0x408F, 62554 }, + { 0x4090, 62558 }, + { 0x4091, 62563 }, + { 0x4092, 62567 }, + { 0x4093, 62571 }, + { 0x4094, 62575 }, + { 0x4095, 62579 }, + { 0x4096, 62633 }, + { 0x4097, 62638 }, + { 0x4098, 62643 }, + { 0x4099, 62648 }, + { 0x409A, 62653 }, + { 0x409B, 62658 }, + { 0x409C, 62663 }, + { 0x409D, 62668 }, + { 0x409E, 62673 }, + { 0x409F, 62678 }, + { 0x40A0, 62683 }, + { 0x40A1, 62688 }, + { 0x40A2, 62693 }, + { 0x40A3, 62698 }, + { 0x40A4, 62703 }, + { 0x40A5, 62708 }, + { 0x40A6, 62713 }, + { 0x40A7, 62718 }, + { 0x40A8, 62723 }, + { 0x40A9, 62728 }, + { 0x40AA, 62733 }, + { 0x40AB, 62738 }, + { 0x40AC, 62743 }, + { 0x40AD, 62748 }, + { 0x40AE, 62753 }, + { 0x40AF, 62758 }, + { 0x40B0, 62763 }, + { 0x40B1, 62768 }, + { 0x40B2, 62773 }, + { 0x40B3, 43990 }, + { 0x40B4, 43986 }, + { 0x40B5, 43994 }, + { 0x40B6, 44002 }, + { 0x40B7, 44031 }, + { 0x40B8, 44118 }, + { 0x40B9, 44053 }, + { 0x40BA, 44042 }, + { 0x40BB, 44013 }, + { 0x40BC, 44100 }, + { 0x40BD, 44075 }, + { 0x40BE, 44064 }, + { 0x40BF, 44024 }, + { 0x40C0, 44150 }, + { 0x40C1, 44143 }, + { 0x40C2, 44093 }, + { 0x40C3, 44086 }, + { 0x40C4, 44111 }, + { 0x40C5, 44157 }, + { 0x40C6, 44129 }, + { 0x40C7, 44136 }, + { 0x40C8, 44005 }, + { 0x40C9, 44034 }, + { 0x40CA, 44121 }, + { 0x40CB, 44056 }, + { 0x40CC, 44045 }, + { 0x40CD, 44016 }, + { 0x40CE, 44103 }, + { 0x40CF, 44078 }, + { 0x40D0, 44067 }, + { 0x40D1, 44009 }, + { 0x40D2, 44038 }, + { 0x40D3, 44125 }, + { 0x40D4, 44060 }, + { 0x40D5, 44049 }, + { 0x40D6, 44020 }, + { 0x40D7, 44107 }, + { 0x40D8, 44082 }, + { 0x40D9, 44071 }, + { 0x40DA, 44027 }, + { 0x40DB, 44153 }, + { 0x40DC, 44146 }, + { 0x40DD, 44096 }, + { 0x40DE, 44089 }, + { 0x40DF, 44114 }, + { 0x40E0, 44160 }, + { 0x40E1, 44132 }, + { 0x40E2, 44139 }, + { 0x40E3, 44164 }, + { 0x40E4, 44168 }, + { 0x40E5, 44180 }, + { 0x40E6, 44172 }, + { 0x40E7, 44176 }, + { 0x40E8, 43981 }, + { 0x40E9, 43997 }, + { 0x40EA, 44188 }, + { 0x40EB, 44184 }, + { 0x40EC, 26142 }, + { 0x40ED, 26120 }, + { 0x40EE, 26125 }, + { 0x40EF, 26180 }, + { 0x40F0, 26222 }, + { 0x40F1, 26184 }, + { 0x40F2, 26211 }, + { 0x40F3, 26236 }, + { 0x40F4, 26206 }, + { 0x40F5, 26169 }, + { 0x40F6, 26231 }, + { 0x40F7, 26136 }, + { 0x40F8, 26195 }, + { 0x40F9, 26153 }, + { 0x40FA, 26216 }, + { 0x40FB, 26201 }, + { 0x40FC, 26164 }, + { 0x40FD, 26226 }, + { 0x40FE, 26130 }, + { 0x40FF, 26189 }, + { 0x4100, 26147 }, + { 0x4101, 26174 }, + { 0x4102, 26241 }, + { 0x4103, 26159 }, + { 0x4104, 26257 }, + { 0x4105, 26272 }, + { 0x4106, 26340 }, + { 0x4107, 26326 }, + { 0x4108, 26290 }, + { 0x4109, 26262 }, + { 0x410A, 26330 }, + { 0x410B, 26362 }, + { 0x410C, 26352 }, + { 0x410D, 26356 }, + { 0x410E, 26344 }, + { 0x410F, 26322 }, + { 0x4110, 26286 }, + { 0x4111, 26313 }, + { 0x4112, 26371 }, + { 0x4113, 26375 }, + { 0x4114, 26348 }, + { 0x4115, 26304 }, + { 0x4116, 26276 }, + { 0x4117, 26308 }, + { 0x4118, 26335 }, + { 0x4119, 26366 }, + { 0x411A, 26294 }, + { 0x411B, 26317 }, + { 0x411C, 26247 }, + { 0x411D, 26281 }, + { 0x411E, 26299 }, + { 0x411F, 26252 }, + { 0x4120, 26267 }, + { 0x4121, 23635 }, + { 0x4122, 23639 }, + { 0x4123, 23664 }, + { 0x4124, 24884 }, + { 0x4125, 23684 }, + { 0x4126, 25081 }, + { 0x4127, 26025 }, + { 0x4128, 23679 }, + { 0x4129, 23660 }, + { 0x412A, 24880 }, + { 0x412B, 23675 }, + { 0x412C, 23671 }, + { 0x412D, 26059 }, + { 0x412E, 26030 }, + { 0x412F, 23707 }, + { 0x4130, 25074 }, + { 0x4131, 25084 }, + { 0x4132, 25011 }, + { 0x4133, 25008 }, + { 0x4134, 25014 }, + { 0x4135, 26073 }, + { 0x4136, 23687 }, + { 0x4137, 23645 }, + { 0x4138, 26070 }, + { 0x4139, 26092 }, + { 0x413A, 77649 }, + { 0x413B, 40829 }, + { 0x413C, 40733 }, + { 0x413D, 40841 }, + { 0x413E, 40832 }, + { 0x413F, 40736 }, + { 0x4140, 40835 }, + { 0x4141, 40838 }, + { 0x4142, 40850 }, + { 0x4143, 40853 }, + { 0x4144, 40847 }, + { 0x4145, 40730 }, + { 0x4146, 40844 }, + { 0x4147, 17999 }, + { 0x4148, 25077 }, + { 0x4149, 110234 }, + { 0x414A, 110173 }, + { 0x414B, 110214 }, + { 0x414C, 110186 }, + { 0x414D, 110119 }, + { 0x414E, 110153 }, + { 0x414F, 110169 }, + { 0x4150, 110202 }, + { 0x4151, 110145 }, + { 0x4152, 110110 }, + { 0x4153, 110053 }, + { 0x4154, 110178 }, + { 0x4155, 110073 }, + { 0x4156, 110206 }, + { 0x4157, 110190 }, + { 0x4158, 110069 }, + { 0x4159, 110061 }, + { 0x415A, 110219 }, + { 0x415B, 110223 }, + { 0x415C, 110161 }, + { 0x415D, 110077 }, + { 0x415E, 110136 }, + { 0x415F, 110157 }, + { 0x4160, 110182 }, + { 0x4161, 110097 }, + { 0x4162, 110089 }, + { 0x4163, 110085 }, + { 0x4164, 110114 }, + { 0x4165, 110057 }, + { 0x4166, 110065 }, + { 0x4167, 110123 }, + { 0x4168, 110081 }, + { 0x4169, 110149 }, + { 0x416A, 110049 }, + { 0x416B, 110131 }, + { 0x416C, 110101 }, + { 0x416D, 110194 }, + { 0x416E, 110198 }, + { 0x416F, 110093 }, + { 0x4170, 110044 }, + { 0x4171, 110127 }, + { 0x4172, 110165 }, + { 0x4173, 110210 }, + { 0x4174, 110140 }, + { 0x4175, 110105 }, + { 0x4176, 110228 }, + { 0x4177, 63186 }, + { 0x4178, 63195 }, + { 0x4179, 63189 }, + { 0x417A, 63252 }, + { 0x417B, 63198 }, + { 0x417C, 63192 }, + { 0x417D, 63204 }, + { 0x417E, 63240 }, + { 0x417F, 63246 }, + { 0x4180, 63267 }, + { 0x4181, 63207 }, + { 0x4182, 63210 }, + { 0x4183, 63225 }, + { 0x4184, 63213 }, + { 0x4185, 63216 }, + { 0x4186, 63219 }, + { 0x4187, 63261 }, + { 0x4188, 63264 }, + { 0x4189, 63237 }, + { 0x418A, 63222 }, + { 0x418B, 63258 }, + { 0x418C, 63228 }, + { 0x418D, 63231 }, + { 0x418E, 63234 }, + { 0x418F, 63270 }, + { 0x4190, 63249 }, + { 0x4191, 63255 }, + { 0x4192, 63201 }, + { 0x4193, 63243 }, + { 0x4194, 52988 }, + { 0x4195, 53075 }, + { 0x4196, 52994 }, + { 0x4197, 53009 }, + { 0x4198, 53117 }, + { 0x4199, 53027 }, + { 0x419A, 53060 }, + { 0x419B, 53042 }, + { 0x419C, 53024 }, + { 0x419D, 52991 }, + { 0x419E, 53012 }, + { 0x419F, 53018 }, + { 0x41A0, 53045 }, + { 0x41A1, 53033 }, + { 0x41A2, 53081 }, + { 0x41A3, 53108 }, + { 0x41A4, 53030 }, + { 0x41A5, 53120 }, + { 0x41A6, 53036 }, + { 0x41A7, 53072 }, + { 0x41A8, 53039 }, + { 0x41A9, 53015 }, + { 0x41AA, 53114 }, + { 0x41AB, 53021 }, + { 0x41AC, 53084 }, + { 0x41AD, 53003 }, + { 0x41AE, 52997 }, + { 0x41AF, 53132 }, + { 0x41B0, 53006 }, + { 0x41B1, 53057 }, + { 0x41B2, 53066 }, + { 0x41B3, 53093 }, + { 0x41B4, 53000 }, + { 0x41B5, 53051 }, + { 0x41B6, 53087 }, + { 0x41B7, 53111 }, + { 0x41B8, 53069 }, + { 0x41B9, 53054 }, + { 0x41BA, 53123 }, + { 0x41BB, 53090 }, + { 0x41BC, 53126 }, + { 0x41BD, 53078 }, + { 0x41BE, 53063 }, + { 0x41BF, 53099 }, + { 0x41C0, 53102 }, + { 0x41C1, 53105 }, + { 0x41C2, 53096 }, + { 0x41C3, 53048 }, + { 0x41C4, 53129 }, + { 0x41C5, 53640 }, + { 0x41C6, 53523 }, + { 0x41C7, 53531 }, + { 0x41C8, 53555 }, + { 0x41C9, 53539 }, + { 0x41CA, 53535 }, + { 0x41CB, 53527 }, + { 0x41CC, 53551 }, + { 0x41CD, 53547 }, + { 0x41CE, 53543 }, + { 0x41CF, 53569 }, + { 0x41D0, 53632 }, + { 0x41D1, 53628 }, + { 0x41D2, 53602 }, + { 0x41D3, 53598 }, + { 0x41D4, 53611 }, + { 0x41D5, 53636 }, + { 0x41D6, 53620 }, + { 0x41D7, 53624 }, + { 0x41D8, 53559 }, + { 0x41D9, 53573 }, + { 0x41DA, 53615 }, + { 0x41DB, 53583 }, + { 0x41DC, 53578 }, + { 0x41DD, 53564 }, + { 0x41DE, 53606 }, + { 0x41DF, 53593 }, + { 0x41E0, 53588 }, + { 0x41E1, 8427 }, + { 0x41E2, 8447 }, + { 0x41E3, 8491 }, + { 0x41E4, 8451 }, + { 0x41E5, 8431 }, + { 0x41E6, 8511 }, + { 0x41E7, 8519 }, + { 0x41E8, 8479 }, + { 0x41E9, 8555 }, + { 0x41EA, 8435 }, + { 0x41EB, 8487 }, + { 0x41EC, 8459 }, + { 0x41ED, 8463 }, + { 0x41EE, 8467 }, + { 0x41EF, 8535 }, + { 0x41F0, 8439 }, + { 0x41F1, 8499 }, + { 0x41F2, 8551 }, + { 0x41F3, 8495 }, + { 0x41F4, 8471 }, + { 0x41F5, 8475 }, + { 0x41F6, 8503 }, + { 0x41F7, 8443 }, + { 0x41F8, 8527 }, + { 0x41F9, 8547 }, + { 0x41FA, 8543 }, + { 0x41FB, 8455 }, + { 0x41FC, 8531 }, + { 0x41FD, 8523 }, + { 0x41FE, 8483 }, + { 0x41FF, 8507 }, + { 0x4200, 8539 }, + { 0x4201, 8569 }, + { 0x4202, 8577 }, + { 0x4203, 8573 }, + { 0x4204, 8581 }, + { 0x4205, 8515 }, + { 0x4206, 8559 }, + { 0x4207, 8564 }, + { 0x4208, 54999 }, + { 0x4209, 55066 }, + { 0x420A, 55005 }, + { 0x420B, 55002 }, + { 0x420C, 55054 }, + { 0x420D, 55072 }, + { 0x420E, 55011 }, + { 0x420F, 55008 }, + { 0x4210, 55063 }, + { 0x4211, 54993 }, + { 0x4212, 55030 }, + { 0x4213, 55033 }, + { 0x4214, 55036 }, + { 0x4215, 55057 }, + { 0x4216, 54996 }, + { 0x4217, 55018 }, + { 0x4218, 55069 }, + { 0x4219, 55060 }, + { 0x421A, 55042 }, + { 0x421B, 55045 }, + { 0x421C, 55048 }, + { 0x421D, 55051 }, + { 0x421E, 55021 }, + { 0x421F, 55027 }, + { 0x4220, 55024 }, + { 0x4221, 55039 }, + { 0x4222, 55014 }, + { 0x4223, 8601 }, + { 0x4224, 8633 }, + { 0x4225, 8641 }, + { 0x4226, 8637 }, + { 0x4227, 8585 }, + { 0x4228, 8705 }, + { 0x4229, 8713 }, + { 0x422A, 8701 }, + { 0x422B, 8717 }, + { 0x422C, 8589 }, + { 0x422D, 8677 }, + { 0x422E, 8645 }, + { 0x422F, 8721 }, + { 0x4230, 8725 }, + { 0x4231, 8689 }, + { 0x4232, 8681 }, + { 0x4233, 8649 }, + { 0x4234, 8653 }, + { 0x4235, 8657 }, + { 0x4236, 8597 }, + { 0x4237, 8709 }, + { 0x4238, 8729 }, + { 0x4239, 8733 }, + { 0x423A, 8673 }, + { 0x423B, 8697 }, + { 0x423C, 8593 }, + { 0x423D, 8621 }, + { 0x423E, 8605 }, + { 0x423F, 8609 }, + { 0x4240, 8685 }, + { 0x4241, 8661 }, + { 0x4242, 8669 }, + { 0x4243, 8693 }, + { 0x4244, 8665 }, + { 0x4245, 8617 }, + { 0x4246, 8629 }, + { 0x4247, 8625 }, + { 0x4248, 8613 }, + { 0x4249, 116295 }, + { 0x424A, 116300 }, + { 0x424B, 116310 }, + { 0x424C, 116315 }, + { 0x424D, 116305 }, + { 0x424E, 111221 }, + { 0x424F, 111224 }, + { 0x4250, 111248 }, + { 0x4251, 111203 }, + { 0x4252, 111245 }, + { 0x4253, 111182 }, + { 0x4254, 111191 }, + { 0x4255, 111242 }, + { 0x4256, 111230 }, + { 0x4257, 111215 }, + { 0x4258, 111218 }, + { 0x4259, 111200 }, + { 0x425A, 111239 }, + { 0x425B, 111254 }, + { 0x425C, 111206 }, + { 0x425D, 111227 }, + { 0x425E, 111209 }, + { 0x425F, 111194 }, + { 0x4260, 111260 }, + { 0x4261, 111197 }, + { 0x4262, 111185 }, + { 0x4263, 111236 }, + { 0x4264, 111233 }, + { 0x4265, 111257 }, + { 0x4266, 111263 }, + { 0x4267, 111251 }, + { 0x4268, 111188 }, + { 0x4269, 111176 }, + { 0x426A, 111179 }, + { 0x426B, 111212 }, + { 0x426C, 111173 }, + { 0x426D, 9224 }, + { 0x426E, 9228 }, + { 0x426F, 9232 }, + { 0x4270, 9280 }, + { 0x4271, 9284 }, + { 0x4272, 9260 }, + { 0x4273, 9264 }, + { 0x4274, 9344 }, + { 0x4275, 9240 }, + { 0x4276, 9272 }, + { 0x4277, 9276 }, + { 0x4278, 9328 }, + { 0x4279, 9332 }, + { 0x427A, 9244 }, + { 0x427B, 9248 }, + { 0x427C, 9252 }, + { 0x427D, 9364 }, + { 0x427E, 9312 }, + { 0x427F, 9236 }, + { 0x4280, 9256 }, + { 0x4281, 9304 }, + { 0x4282, 9308 }, + { 0x4283, 9292 }, + { 0x4284, 9296 }, + { 0x4285, 9300 }, + { 0x4286, 9348 }, + { 0x4287, 9336 }, + { 0x4288, 9340 }, + { 0x4289, 9316 }, + { 0x428A, 9320 }, + { 0x428B, 9288 }, + { 0x428C, 9324 }, + { 0x428D, 9352 }, + { 0x428E, 9356 }, + { 0x428F, 9360 }, + { 0x4290, 9268 }, + { 0x4291, 9380 }, + { 0x4292, 9388 }, + { 0x4293, 9392 }, + { 0x4294, 9396 }, + { 0x4295, 9376 }, + { 0x4296, 9384 }, + { 0x4297, 9368 }, + { 0x4298, 9372 }, + { 0x4299, 9400 }, + { 0x429A, 9404 }, + { 0x429B, 9412 }, + { 0x429C, 9408 }, + { 0x429D, 9416 }, + { 0x429E, 9420 }, + { 0x429F, 72737 }, + { 0x42A0, 72732 }, + { 0x42A1, 72727 }, + { 0x42A2, 72747 }, + { 0x42A3, 72742 }, + { 0x42A4, 72752 }, + { 0x42A5, 72775 }, + { 0x42A6, 72770 }, + { 0x42A7, 72765 }, + { 0x42A8, 72785 }, + { 0x42A9, 72780 }, + { 0x42AA, 72790 }, + { 0x42AB, 72627 }, + { 0x42AC, 72663 }, + { 0x42AD, 72667 }, + { 0x42AE, 72715 }, + { 0x42AF, 72623 }, + { 0x42B0, 72703 }, + { 0x42B1, 72671 }, + { 0x42B2, 72707 }, + { 0x42B3, 72675 }, + { 0x42B4, 72723 }, + { 0x42B5, 72695 }, + { 0x42B6, 72699 }, + { 0x42B7, 72691 }, + { 0x42B8, 72631 }, + { 0x42B9, 72711 }, + { 0x42BA, 72687 }, + { 0x42BB, 72757 }, + { 0x42BC, 72651 }, + { 0x42BD, 72719 }, + { 0x42BE, 72683 }, + { 0x42BF, 72761 }, + { 0x42C0, 72647 }, + { 0x42C1, 72635 }, + { 0x42C2, 72639 }, + { 0x42C3, 72643 }, + { 0x42C4, 72679 }, + { 0x42C5, 72659 }, + { 0x42C6, 72655 }, + { 0x42C7, 72565 }, + { 0x42C8, 72560 }, + { 0x42C9, 72555 }, + { 0x42CA, 72575 }, + { 0x42CB, 72570 }, + { 0x42CC, 72580 }, + { 0x42CD, 72603 }, + { 0x42CE, 72598 }, + { 0x42CF, 72593 }, + { 0x42D0, 72613 }, + { 0x42D1, 72608 }, + { 0x42D2, 72618 }, + { 0x42D3, 72455 }, + { 0x42D4, 72491 }, + { 0x42D5, 72495 }, + { 0x42D6, 72543 }, + { 0x42D7, 72451 }, + { 0x42D8, 72531 }, + { 0x42D9, 72499 }, + { 0x42DA, 72535 }, + { 0x42DB, 72503 }, + { 0x42DC, 72551 }, + { 0x42DD, 72523 }, + { 0x42DE, 72527 }, + { 0x42DF, 72519 }, + { 0x42E0, 72459 }, + { 0x42E1, 72539 }, + { 0x42E2, 72515 }, + { 0x42E3, 72585 }, + { 0x42E4, 72479 }, + { 0x42E5, 72547 }, + { 0x42E6, 72511 }, + { 0x42E7, 72589 }, + { 0x42E8, 72475 }, + { 0x42E9, 72463 }, + { 0x42EA, 72467 }, + { 0x42EB, 72471 }, + { 0x42EC, 72507 }, + { 0x42ED, 72487 }, + { 0x42EE, 72483 }, + { 0x42EF, 79201 }, + { 0x42F0, 79165 }, + { 0x42F1, 79189 }, + { 0x42F2, 79141 }, + { 0x42F3, 79225 }, + { 0x42F4, 79102 }, + { 0x42F5, 79207 }, + { 0x42F6, 79228 }, + { 0x42F7, 79174 }, + { 0x42F8, 79186 }, + { 0x42F9, 79126 }, + { 0x42FA, 79183 }, + { 0x42FB, 79144 }, + { 0x42FC, 79168 }, + { 0x42FD, 79210 }, + { 0x42FE, 79180 }, + { 0x42FF, 79231 }, + { 0x4300, 79222 }, + { 0x4301, 79171 }, + { 0x4302, 79219 }, + { 0x4303, 79192 }, + { 0x4304, 79195 }, + { 0x4305, 79093 }, + { 0x4306, 79135 }, + { 0x4307, 79120 }, + { 0x4308, 79108 }, + { 0x4309, 79096 }, + { 0x430A, 79213 }, + { 0x430B, 79162 }, + { 0x430C, 79090 }, + { 0x430D, 79204 }, + { 0x430E, 79153 }, + { 0x430F, 79132 }, + { 0x4310, 79111 }, + { 0x4311, 79150 }, + { 0x4312, 79105 }, + { 0x4313, 79156 }, + { 0x4314, 79198 }, + { 0x4315, 79159 }, + { 0x4316, 79123 }, + { 0x4317, 79117 }, + { 0x4318, 79099 }, + { 0x4319, 79114 }, + { 0x431A, 79138 }, + { 0x431B, 79216 }, + { 0x431C, 79129 }, + { 0x431D, 79147 }, + { 0x431E, 79177 }, + { 0x431F, 77784 }, + { 0x4320, 77739 }, + { 0x4321, 77766 }, + { 0x4322, 77754 }, + { 0x4323, 77769 }, + { 0x4324, 77778 }, + { 0x4325, 77790 }, + { 0x4326, 77760 }, + { 0x4327, 77763 }, + { 0x4328, 77808 }, + { 0x4329, 77775 }, + { 0x432A, 77787 }, + { 0x432B, 77748 }, + { 0x432C, 77745 }, + { 0x432D, 77805 }, + { 0x432E, 77793 }, + { 0x432F, 77796 }, + { 0x4330, 77799 }, + { 0x4331, 77802 }, + { 0x4332, 77781 }, + { 0x4333, 77751 }, + { 0x4334, 77772 }, + { 0x4335, 77721 }, + { 0x4336, 77724 }, + { 0x4337, 77727 }, + { 0x4338, 77730 }, + { 0x4339, 77733 }, + { 0x433A, 77736 }, + { 0x433B, 77742 }, + { 0x433C, 77757 }, + { 0x433D, 77709 }, + { 0x433E, 77691 }, + { 0x433F, 77697 }, + { 0x4340, 77718 }, + { 0x4341, 77703 }, + { 0x4342, 77700 }, + { 0x4343, 77694 }, + { 0x4344, 77715 }, + { 0x4345, 77712 }, + { 0x4346, 77706 }, + { 0x4347, 40086 }, + { 0x4348, 40110 }, + { 0x4349, 40154 }, + { 0x434A, 40106 }, + { 0x434B, 40158 }, + { 0x434C, 40162 }, + { 0x434D, 40222 }, + { 0x434E, 40090 }, + { 0x434F, 40170 }, + { 0x4350, 40114 }, + { 0x4351, 40178 }, + { 0x4352, 40094 }, + { 0x4353, 40118 }, + { 0x4354, 40206 }, + { 0x4355, 40186 }, + { 0x4356, 40122 }, + { 0x4357, 40126 }, + { 0x4358, 40130 }, + { 0x4359, 40098 }, + { 0x435A, 40190 }, + { 0x435B, 40134 }, + { 0x435C, 40210 }, + { 0x435D, 40138 }, + { 0x435E, 40194 }, + { 0x435F, 40142 }, + { 0x4360, 40214 }, + { 0x4361, 40198 }, + { 0x4362, 40226 }, + { 0x4363, 40218 }, + { 0x4364, 40166 }, + { 0x4365, 40102 }, + { 0x4366, 40146 }, + { 0x4367, 40182 }, + { 0x4368, 40174 }, + { 0x4369, 40150 }, + { 0x436A, 40202 }, + { 0x436B, 39942 }, + { 0x436C, 39966 }, + { 0x436D, 40010 }, + { 0x436E, 39962 }, + { 0x436F, 40014 }, + { 0x4370, 40018 }, + { 0x4371, 40078 }, + { 0x4372, 39946 }, + { 0x4373, 40026 }, + { 0x4374, 39970 }, + { 0x4375, 40034 }, + { 0x4376, 39950 }, + { 0x4377, 39974 }, + { 0x4378, 40062 }, + { 0x4379, 40042 }, + { 0x437A, 39978 }, + { 0x437B, 39982 }, + { 0x437C, 39986 }, + { 0x437D, 39954 }, + { 0x437E, 40046 }, + { 0x437F, 39990 }, + { 0x4380, 40066 }, + { 0x4381, 39994 }, + { 0x4382, 40050 }, + { 0x4383, 39998 }, + { 0x4384, 40070 }, + { 0x4385, 40054 }, + { 0x4386, 40082 }, + { 0x4387, 40074 }, + { 0x4388, 40022 }, + { 0x4389, 39958 }, + { 0x438A, 40002 }, + { 0x438B, 40038 }, + { 0x438C, 40030 }, + { 0x438D, 40006 }, + { 0x438E, 40058 }, + { 0x438F, 73015 }, + { 0x4390, 73033 }, + { 0x4391, 73036 }, + { 0x4392, 73096 }, + { 0x4393, 73039 }, + { 0x4394, 73114 }, + { 0x4395, 73099 }, + { 0x4396, 73042 }, + { 0x4397, 73018 }, + { 0x4398, 73045 }, + { 0x4399, 73048 }, + { 0x439A, 73105 }, + { 0x439B, 73051 }, + { 0x439C, 73021 }, + { 0x439D, 73054 }, + { 0x439E, 73057 }, + { 0x439F, 73060 }, + { 0x43A0, 73111 }, + { 0x43A1, 73063 }, + { 0x43A2, 73069 }, + { 0x43A3, 73066 }, + { 0x43A4, 73117 }, + { 0x43A5, 73024 }, + { 0x43A6, 73072 }, + { 0x43A7, 73075 }, + { 0x43A8, 73078 }, + { 0x43A9, 73120 }, + { 0x43AA, 73081 }, + { 0x43AB, 73123 }, + { 0x43AC, 73084 }, + { 0x43AD, 73126 }, + { 0x43AE, 73027 }, + { 0x43AF, 73087 }, + { 0x43B0, 73090 }, + { 0x43B1, 73030 }, + { 0x43B2, 73093 }, + { 0x43B3, 73129 }, + { 0x43B4, 73102 }, + { 0x43B5, 73132 }, + { 0x43B6, 73108 }, + { 0x43B7, 115965 }, + { 0x43B8, 115973 }, + { 0x43B9, 116001 }, + { 0x43BA, 115989 }, + { 0x43BB, 115957 }, + { 0x43BC, 116149 }, + { 0x43BD, 115993 }, + { 0x43BE, 116153 }, + { 0x43BF, 116049 }, + { 0x43C0, 115981 }, + { 0x43C1, 116145 }, + { 0x43C2, 116053 }, + { 0x43C3, 116005 }, + { 0x43C4, 116045 }, + { 0x43C5, 116021 }, + { 0x43C6, 116089 }, + { 0x43C7, 116137 }, + { 0x43C8, 116077 }, + { 0x43C9, 115977 }, + { 0x43CA, 116097 }, + { 0x43CB, 116013 }, + { 0x43CC, 116101 }, + { 0x43CD, 116085 }, + { 0x43CE, 116037 }, + { 0x43CF, 115969 }, + { 0x43D0, 116065 }, + { 0x43D1, 115985 }, + { 0x43D2, 116073 }, + { 0x43D3, 116025 }, + { 0x43D4, 116033 }, + { 0x43D5, 116105 }, + { 0x43D6, 116157 }, + { 0x43D7, 116117 }, + { 0x43D8, 116093 }, + { 0x43D9, 115961 }, + { 0x43DA, 116129 }, + { 0x43DB, 115997 }, + { 0x43DC, 116081 }, + { 0x43DD, 116061 }, + { 0x43DE, 116029 }, + { 0x43DF, 116161 }, + { 0x43E0, 116041 }, + { 0x43E1, 116113 }, + { 0x43E2, 116133 }, + { 0x43E3, 116125 }, + { 0x43E4, 116121 }, + { 0x43E5, 116009 }, + { 0x43E6, 116069 }, + { 0x43E7, 116057 }, + { 0x43E8, 116141 }, + { 0x43E9, 116109 }, + { 0x43EA, 116017 }, + { 0x43EB, 116165 }, + { 0x43EC, 111568 }, + { 0x43ED, 111672 }, + { 0x43EE, 111592 }, + { 0x43EF, 111596 }, + { 0x43F0, 111676 }, + { 0x43F1, 111600 }, + { 0x43F2, 111680 }, + { 0x43F3, 111604 }, + { 0x43F4, 111572 }, + { 0x43F5, 111608 }, + { 0x43F6, 111612 }, + { 0x43F7, 111616 }, + { 0x43F8, 111684 }, + { 0x43F9, 111576 }, + { 0x43FA, 111688 }, + { 0x43FB, 111620 }, + { 0x43FC, 111624 }, + { 0x43FD, 111628 }, + { 0x43FE, 111692 }, + { 0x43FF, 111632 }, + { 0x4400, 111636 }, + { 0x4401, 111696 }, + { 0x4402, 111580 }, + { 0x4403, 111640 }, + { 0x4404, 111644 }, + { 0x4405, 111648 }, + { 0x4406, 111652 }, + { 0x4407, 111700 }, + { 0x4408, 111656 }, + { 0x4409, 111704 }, + { 0x440A, 111584 }, + { 0x440B, 111660 }, + { 0x440C, 111664 }, + { 0x440D, 111588 }, + { 0x440E, 111668 }, + { 0x440F, 111428 }, + { 0x4410, 111532 }, + { 0x4411, 111452 }, + { 0x4412, 111456 }, + { 0x4413, 111536 }, + { 0x4414, 111460 }, + { 0x4415, 111540 }, + { 0x4416, 111464 }, + { 0x4417, 111432 }, + { 0x4418, 111468 }, + { 0x4419, 111472 }, + { 0x441A, 111476 }, + { 0x441B, 111544 }, + { 0x441C, 111436 }, + { 0x441D, 111548 }, + { 0x441E, 111480 }, + { 0x441F, 111484 }, + { 0x4420, 111488 }, + { 0x4421, 111552 }, + { 0x4422, 111492 }, + { 0x4423, 111496 }, + { 0x4424, 111556 }, + { 0x4425, 111440 }, + { 0x4426, 111500 }, + { 0x4427, 111504 }, + { 0x4428, 111508 }, + { 0x4429, 111512 }, + { 0x442A, 111560 }, + { 0x442B, 111516 }, + { 0x442C, 111564 }, + { 0x442D, 111444 }, + { 0x442E, 111520 }, + { 0x442F, 111524 }, + { 0x4430, 111448 }, + { 0x4431, 111528 }, + { 0x4432, 68700 }, + { 0x4433, 68718 }, + { 0x4434, 68721 }, + { 0x4435, 68808 }, + { 0x4436, 68724 }, + { 0x4437, 68787 }, + { 0x4438, 68727 }, + { 0x4439, 68811 }, + { 0x443A, 68790 }, + { 0x443B, 68730 }, + { 0x443C, 68703 }, + { 0x443D, 68733 }, + { 0x443E, 68736 }, + { 0x443F, 68814 }, + { 0x4440, 68796 }, + { 0x4441, 68841 }, + { 0x4442, 68739 }, + { 0x4443, 68799 }, + { 0x4444, 68706 }, + { 0x4445, 68742 }, + { 0x4446, 68748 }, + { 0x4447, 68751 }, + { 0x4448, 68805 }, + { 0x4449, 68754 }, + { 0x444A, 68757 }, + { 0x444B, 68844 }, + { 0x444C, 68709 }, + { 0x444D, 68763 }, + { 0x444E, 68766 }, + { 0x444F, 68769 }, + { 0x4450, 68823 }, + { 0x4451, 68772 }, + { 0x4452, 68826 }, + { 0x4453, 68850 }, + { 0x4454, 68775 }, + { 0x4455, 68832 }, + { 0x4456, 68712 }, + { 0x4457, 68778 }, + { 0x4458, 68781 }, + { 0x4459, 68817 }, + { 0x445A, 68835 }, + { 0x445B, 68847 }, + { 0x445C, 68715 }, + { 0x445D, 68745 }, + { 0x445E, 68784 }, + { 0x445F, 68838 }, + { 0x4460, 68793 }, + { 0x4461, 68829 }, + { 0x4462, 68853 }, + { 0x4463, 68802 }, + { 0x4464, 68820 }, + { 0x4465, 68760 }, + { 0x4466, 61758 }, + { 0x4467, 61762 }, + { 0x4468, 61766 }, + { 0x4469, 61770 }, + { 0x446A, 61774 }, + { 0x446B, 61778 }, + { 0x446C, 61782 }, + { 0x446D, 61786 }, + { 0x446E, 61790 }, + { 0x446F, 61794 }, + { 0x4470, 61798 }, + { 0x4471, 61802 }, + { 0x4472, 61806 }, + { 0x4473, 61810 }, + { 0x4474, 61814 }, + { 0x4475, 61818 }, + { 0x4476, 62074 }, + { 0x4477, 62078 }, + { 0x4478, 61822 }, + { 0x4479, 62082 }, + { 0x447A, 62086 }, + { 0x447B, 61826 }, + { 0x447C, 62090 }, + { 0x447D, 61830 }, + { 0x447E, 61834 }, + { 0x447F, 61838 }, + { 0x4480, 61842 }, + { 0x4481, 61722 }, + { 0x4482, 61846 }, + { 0x4483, 61850 }, + { 0x4484, 61854 }, + { 0x4485, 61858 }, + { 0x4486, 61862 }, + { 0x4487, 61866 }, + { 0x4488, 61870 }, + { 0x4489, 61874 }, + { 0x448A, 61878 }, + { 0x448B, 61882 }, + { 0x448C, 61886 }, + { 0x448D, 61890 }, + { 0x448E, 61894 }, + { 0x448F, 61898 }, + { 0x4490, 61902 }, + { 0x4491, 61906 }, + { 0x4492, 61910 }, + { 0x4493, 61914 }, + { 0x4494, 61918 }, + { 0x4495, 61922 }, + { 0x4496, 61926 }, + { 0x4497, 61930 }, + { 0x4498, 61934 }, + { 0x4499, 61938 }, + { 0x449A, 61942 }, + { 0x449B, 61946 }, + { 0x449C, 61950 }, + { 0x449D, 61954 }, + { 0x449E, 61958 }, + { 0x449F, 61962 }, + { 0x44A0, 61966 }, + { 0x44A1, 61970 }, + { 0x44A2, 61974 }, + { 0x44A3, 61978 }, + { 0x44A4, 61982 }, + { 0x44A5, 61986 }, + { 0x44A6, 61990 }, + { 0x44A7, 61994 }, + { 0x44A8, 61998 }, + { 0x44A9, 62002 }, + { 0x44AA, 62006 }, + { 0x44AB, 62010 }, + { 0x44AC, 62014 }, + { 0x44AD, 62102 }, + { 0x44AE, 62018 }, + { 0x44AF, 62022 }, + { 0x44B0, 61726 }, + { 0x44B1, 62026 }, + { 0x44B2, 62030 }, + { 0x44B3, 62094 }, + { 0x44B4, 62098 }, + { 0x44B5, 61730 }, + { 0x44B6, 62034 }, + { 0x44B7, 62038 }, + { 0x44B8, 62042 }, + { 0x44B9, 62046 }, + { 0x44BA, 62050 }, + { 0x44BB, 60796 }, + { 0x44BC, 60800 }, + { 0x44BD, 60804 }, + { 0x44BE, 60808 }, + { 0x44BF, 60812 }, + { 0x44C0, 60816 }, + { 0x44C1, 60820 }, + { 0x44C2, 60824 }, + { 0x44C3, 61734 }, + { 0x44C4, 61738 }, + { 0x44C5, 61742 }, + { 0x44C6, 60828 }, + { 0x44C7, 60832 }, + { 0x44C8, 60836 }, + { 0x44C9, 61746 }, + { 0x44CA, 61750 }, + { 0x44CB, 61754 }, + { 0x44CC, 60840 }, + { 0x44CD, 60844 }, + { 0x44CE, 60848 }, + { 0x44CF, 60852 }, + { 0x44D0, 60856 }, + { 0x44D1, 60860 }, + { 0x44D2, 60864 }, + { 0x44D3, 60868 }, + { 0x44D4, 60872 }, + { 0x44D5, 60876 }, + { 0x44D6, 60880 }, + { 0x44D7, 60884 }, + { 0x44D8, 60888 }, + { 0x44D9, 60892 }, + { 0x44DA, 60896 }, + { 0x44DB, 60900 }, + { 0x44DC, 60904 }, + { 0x44DD, 60908 }, + { 0x44DE, 60912 }, + { 0x44DF, 60916 }, + { 0x44E0, 60920 }, + { 0x44E1, 60924 }, + { 0x44E2, 60928 }, + { 0x44E3, 60932 }, + { 0x44E4, 60936 }, + { 0x44E5, 60940 }, + { 0x44E6, 60944 }, + { 0x44E7, 60948 }, + { 0x44E8, 60952 }, + { 0x44E9, 60956 }, + { 0x44EA, 60960 }, + { 0x44EB, 60964 }, + { 0x44EC, 60968 }, + { 0x44ED, 60972 }, + { 0x44EE, 60976 }, + { 0x44EF, 60980 }, + { 0x44F0, 60984 }, + { 0x44F1, 60988 }, + { 0x44F2, 60992 }, + { 0x44F3, 60996 }, + { 0x44F4, 61000 }, + { 0x44F5, 61004 }, + { 0x44F6, 61008 }, + { 0x44F7, 61012 }, + { 0x44F8, 61016 }, + { 0x44F9, 61020 }, + { 0x44FA, 61024 }, + { 0x44FB, 61028 }, + { 0x44FC, 61032 }, + { 0x44FD, 61036 }, + { 0x44FE, 61040 }, + { 0x44FF, 61044 }, + { 0x4500, 61048 }, + { 0x4501, 61052 }, + { 0x4502, 61056 }, + { 0x4503, 61060 }, + { 0x4504, 61064 }, + { 0x4505, 61068 }, + { 0x4506, 62106 }, + { 0x4507, 62110 }, + { 0x4508, 62114 }, + { 0x4509, 62118 }, + { 0x450A, 62122 }, + { 0x450B, 62126 }, + { 0x450C, 62130 }, + { 0x450D, 62134 }, + { 0x450E, 62138 }, + { 0x450F, 62142 }, + { 0x4510, 62146 }, + { 0x4511, 62150 }, + { 0x4512, 62154 }, + { 0x4513, 62158 }, + { 0x4514, 62162 }, + { 0x4515, 62166 }, + { 0x4516, 62170 }, + { 0x4517, 62174 }, + { 0x4518, 62178 }, + { 0x4519, 61072 }, + { 0x451A, 61076 }, + { 0x451B, 61080 }, + { 0x451C, 61084 }, + { 0x451D, 61088 }, + { 0x451E, 61092 }, + { 0x451F, 61096 }, + { 0x4520, 61100 }, + { 0x4521, 61104 }, + { 0x4522, 61108 }, + { 0x4523, 61112 }, + { 0x4524, 61116 }, + { 0x4525, 61120 }, + { 0x4526, 61124 }, + { 0x4527, 61128 }, + { 0x4528, 61132 }, + { 0x4529, 61136 }, + { 0x452A, 61140 }, + { 0x452B, 61144 }, + { 0x452C, 61148 }, + { 0x452D, 61152 }, + { 0x452E, 61156 }, + { 0x452F, 61160 }, + { 0x4530, 61164 }, + { 0x4531, 61168 }, + { 0x4532, 61172 }, + { 0x4533, 61176 }, + { 0x4534, 61180 }, + { 0x4535, 61184 }, + { 0x4536, 61188 }, + { 0x4537, 61192 }, + { 0x4538, 61196 }, + { 0x4539, 61200 }, + { 0x453A, 61204 }, + { 0x453B, 61208 }, + { 0x453C, 61212 }, + { 0x453D, 61216 }, + { 0x453E, 61220 }, + { 0x453F, 61224 }, + { 0x4540, 61228 }, + { 0x4541, 61232 }, + { 0x4542, 61236 }, + { 0x4543, 61240 }, + { 0x4544, 61244 }, + { 0x4545, 61248 }, + { 0x4546, 61252 }, + { 0x4547, 61256 }, + { 0x4548, 61260 }, + { 0x4549, 61264 }, + { 0x454A, 61268 }, + { 0x454B, 61272 }, + { 0x454C, 61276 }, + { 0x454D, 61280 }, + { 0x454E, 61284 }, + { 0x454F, 61288 }, + { 0x4550, 61292 }, + { 0x4551, 61296 }, + { 0x4552, 61300 }, + { 0x4553, 61304 }, + { 0x4554, 61308 }, + { 0x4555, 61312 }, + { 0x4556, 61316 }, + { 0x4557, 61320 }, + { 0x4558, 61324 }, + { 0x4559, 61328 }, + { 0x455A, 61332 }, + { 0x455B, 61336 }, + { 0x455C, 61340 }, + { 0x455D, 61344 }, + { 0x455E, 61348 }, + { 0x455F, 61352 }, + { 0x4560, 61356 }, + { 0x4561, 61360 }, + { 0x4562, 61364 }, + { 0x4563, 61368 }, + { 0x4564, 61372 }, + { 0x4565, 61376 }, + { 0x4566, 61380 }, + { 0x4567, 61384 }, + { 0x4568, 61388 }, + { 0x4569, 61392 }, + { 0x456A, 61396 }, + { 0x456B, 61400 }, + { 0x456C, 61404 }, + { 0x456D, 61408 }, + { 0x456E, 61412 }, + { 0x456F, 61416 }, + { 0x4570, 61420 }, + { 0x4571, 61424 }, + { 0x4572, 61428 }, + { 0x4573, 61432 }, + { 0x4574, 61436 }, + { 0x4575, 61440 }, + { 0x4576, 61444 }, + { 0x4577, 61448 }, + { 0x4578, 61452 }, + { 0x4579, 61456 }, + { 0x457A, 61460 }, + { 0x457B, 61464 }, + { 0x457C, 61468 }, + { 0x457D, 61472 }, + { 0x457E, 61476 }, + { 0x457F, 61480 }, + { 0x4580, 61484 }, + { 0x4581, 61488 }, + { 0x4582, 61492 }, + { 0x4583, 61496 }, + { 0x4584, 61500 }, + { 0x4585, 61504 }, + { 0x4586, 61508 }, + { 0x4587, 61512 }, + { 0x4588, 61516 }, + { 0x4589, 61520 }, + { 0x458A, 61524 }, + { 0x458B, 61528 }, + { 0x458C, 61532 }, + { 0x458D, 61536 }, + { 0x458E, 61540 }, + { 0x458F, 61544 }, + { 0x4590, 61548 }, + { 0x4591, 61552 }, + { 0x4592, 61556 }, + { 0x4593, 61560 }, + { 0x4594, 61564 }, + { 0x4595, 61568 }, + { 0x4596, 61572 }, + { 0x4597, 61576 }, + { 0x4598, 61580 }, + { 0x4599, 61584 }, + { 0x459A, 61588 }, + { 0x459B, 61592 }, + { 0x459C, 61596 }, + { 0x459D, 61600 }, + { 0x459E, 61605 }, + { 0x459F, 61610 }, + { 0x45A0, 61615 }, + { 0x45A1, 61620 }, + { 0x45A2, 61625 }, + { 0x45A3, 61630 }, + { 0x45A4, 61635 }, + { 0x45A5, 61640 }, + { 0x45A6, 62054 }, + { 0x45A7, 62059 }, + { 0x45A8, 62064 }, + { 0x45A9, 62069 }, + { 0x45AA, 61645 }, + { 0x45AB, 61650 }, + { 0x45AC, 61655 }, + { 0x45AD, 61660 }, + { 0x45AE, 61665 }, + { 0x45AF, 61670 }, + { 0x45B0, 61675 }, + { 0x45B1, 61680 }, + { 0x45B2, 61685 }, + { 0x45B3, 61690 }, + { 0x45B4, 61694 }, + { 0x45B5, 61698 }, + { 0x45B6, 61702 }, + { 0x45B7, 61706 }, + { 0x45B8, 61710 }, + { 0x45B9, 61714 }, + { 0x45BA, 61718 }, + { 0x45BB, 108195 }, + { 0x45BC, 108838 }, + { 0x45BD, 108832 }, + { 0x45BE, 107827 }, + { 0x45BF, 108129 }, + { 0x45C0, 107531 }, + { 0x45C1, 107831 }, + { 0x45C2, 107843 }, + { 0x45C3, 107836 }, + { 0x45C4, 107919 }, + { 0x45C5, 107565 }, + { 0x45C6, 107551 }, + { 0x45C7, 107557 }, + { 0x45C8, 108236 }, + { 0x45C9, 108020 }, + { 0x45CA, 107924 }, + { 0x45CB, 107964 }, + { 0x45CC, 108134 }, + { 0x45CD, 107583 }, + { 0x45CE, 108139 }, + { 0x45CF, 107599 }, + { 0x45D0, 108146 }, + { 0x45D1, 107933 }, + { 0x45D2, 108218 }, + { 0x45D3, 107851 }, + { 0x45D4, 107856 }, + { 0x45D5, 107629 }, + { 0x45D6, 108168 }, + { 0x45D7, 107664 }, + { 0x45D8, 107943 }, + { 0x45D9, 107947 }, + { 0x45DA, 108101 }, + { 0x45DB, 108106 }, + { 0x45DC, 107701 }, + { 0x45DD, 108200 }, + { 0x45DE, 108015 }, + { 0x45DF, 107711 }, + { 0x45E0, 108072 }, + { 0x45E1, 108080 }, + { 0x45E2, 107719 }, + { 0x45E3, 107725 }, + { 0x45E4, 108180 }, + { 0x45E5, 107861 }, + { 0x45E6, 107868 }, + { 0x45E7, 107873 }, + { 0x45E8, 107969 }, + { 0x45E9, 107758 }, + { 0x45EA, 107791 }, + { 0x45EB, 108190 }, + { 0x45EC, 108516 }, + { 0x45ED, 108755 }, + { 0x45EE, 108533 }, + { 0x45EF, 108258 }, + { 0x45F0, 108522 }, + { 0x45F1, 108529 }, + { 0x45F2, 108790 }, + { 0x45F3, 107735 }, + { 0x45F4, 72279 }, + { 0x45F5, 72282 }, + { 0x45F6, 72285 }, + { 0x45F7, 72288 }, + { 0x45F8, 72291 }, + { 0x45F9, 72294 }, + { 0x45FA, 72297 }, + { 0x45FB, 72300 }, + { 0x45FC, 72303 }, + { 0x45FD, 72306 }, + { 0x45FE, 72309 }, + { 0x45FF, 72312 }, + { 0x4600, 72315 }, + { 0x4601, 72318 }, + { 0x4602, 72321 }, + { 0x4603, 72324 }, + { 0x4604, 72327 }, + { 0x4605, 72330 }, + { 0x4606, 72333 }, + { 0x4607, 72336 }, + { 0x4608, 72339 }, + { 0x4609, 72342 }, + { 0x460A, 72345 }, + { 0x460B, 72348 }, + { 0x460C, 72351 }, + { 0x460D, 72354 }, + { 0x460E, 72357 }, + { 0x460F, 72360 }, + { 0x4610, 72363 }, + { 0x4611, 72366 }, + { 0x4612, 72369 }, + { 0x4613, 72372 }, + { 0x4614, 72375 }, + { 0x4615, 72378 }, + { 0x4616, 72381 }, + { 0x4617, 72384 }, + { 0x4618, 72387 }, + { 0x4619, 72390 }, + { 0x461A, 72393 }, + { 0x461B, 72396 }, + { 0x461C, 72399 }, + { 0x461D, 72402 }, + { 0x461E, 72405 }, + { 0x461F, 72408 }, + { 0x4620, 72411 }, + { 0x4621, 72414 }, + { 0x4622, 72417 }, + { 0x4623, 72420 }, + { 0x4624, 72423 }, + { 0x4625, 72426 }, + { 0x4626, 72429 }, + { 0x4627, 72432 }, + { 0x4628, 72435 }, + { 0x4629, 72438 }, + { 0x462A, 72441 }, + { 0x462B, 105407 }, + { 0x462C, 105375 }, + { 0x462D, 105411 }, + { 0x462E, 105423 }, + { 0x462F, 105347 }, + { 0x4630, 105367 }, + { 0x4631, 105419 }, + { 0x4632, 105379 }, + { 0x4633, 105399 }, + { 0x4634, 105403 }, + { 0x4635, 105383 }, + { 0x4636, 105427 }, + { 0x4637, 105355 }, + { 0x4638, 105359 }, + { 0x4639, 105431 }, + { 0x463A, 105371 }, + { 0x463B, 105351 }, + { 0x463C, 105415 }, + { 0x463D, 105387 }, + { 0x463E, 105391 }, + { 0x463F, 105395 }, + { 0x4640, 105363 }, + { 0x4641, 105470 }, + { 0x4642, 105435 }, + { 0x4643, 105458 }, + { 0x4644, 105462 }, + { 0x4645, 105449 }, + { 0x4646, 105466 }, + { 0x4647, 105439 }, + { 0x4648, 105444 }, + { 0x4649, 105453 }, + { 0x464A, 127580 }, + { 0x464B, 127556 }, + { 0x464C, 127587 }, + { 0x464D, 127596 }, + { 0x464E, 127535 }, + { 0x464F, 127550 }, + { 0x4650, 127593 }, + { 0x4651, 127559 }, + { 0x4652, 127574 }, + { 0x4653, 127577 }, + { 0x4654, 127562 }, + { 0x4655, 127599 }, + { 0x4656, 127541 }, + { 0x4657, 127583 }, + { 0x4658, 127544 }, + { 0x4659, 127602 }, + { 0x465A, 127553 }, + { 0x465B, 127538 }, + { 0x465C, 127590 }, + { 0x465D, 127565 }, + { 0x465E, 127568 }, + { 0x465F, 127571 }, + { 0x4660, 127547 }, + { 0x4661, 127626 }, + { 0x4662, 127629 }, + { 0x4663, 127605 }, + { 0x4664, 127611 }, + { 0x4665, 127620 }, + { 0x4666, 127617 }, + { 0x4667, 127614 }, + { 0x4668, 127608 }, + { 0x4669, 127623 }, + { 0x466A, 127471 }, + { 0x466B, 127440 }, + { 0x466C, 127455 }, + { 0x466D, 127416 }, + { 0x466E, 127479 }, + { 0x466F, 127488 }, + { 0x4670, 127443 }, + { 0x4671, 127395 }, + { 0x4672, 127410 }, + { 0x4673, 127485 }, + { 0x4674, 127419 }, + { 0x4675, 127434 }, + { 0x4676, 127467 }, + { 0x4677, 127437 }, + { 0x4678, 127459 }, + { 0x4679, 127422 }, + { 0x467A, 127475 }, + { 0x467B, 127491 }, + { 0x467C, 127447 }, + { 0x467D, 127401 }, + { 0x467E, 127451 }, + { 0x467F, 127404 }, + { 0x4680, 127494 }, + { 0x4681, 127413 }, + { 0x4682, 127398 }, + { 0x4683, 127482 }, + { 0x4684, 127425 }, + { 0x4685, 127428 }, + { 0x4686, 127463 }, + { 0x4687, 127431 }, + { 0x4688, 127407 }, + { 0x4689, 127497 }, + { 0x468A, 127507 }, + { 0x468B, 127516 }, + { 0x468C, 127513 }, + { 0x468D, 127522 }, + { 0x468E, 127510 }, + { 0x468F, 127504 }, + { 0x4690, 127519 }, + { 0x4691, 127500 }, + { 0x4692, 56961 }, + { 0x4693, 56937 }, + { 0x4694, 56964 }, + { 0x4695, 56976 }, + { 0x4696, 56916 }, + { 0x4697, 56934 }, + { 0x4698, 56958 }, + { 0x4699, 56940 }, + { 0x469A, 56952 }, + { 0x469B, 56955 }, + { 0x469C, 56943 }, + { 0x469D, 56970 }, + { 0x469E, 56925 }, + { 0x469F, 56928 }, + { 0x46A0, 56973 }, + { 0x46A1, 56922 }, + { 0x46A2, 56919 }, + { 0x46A3, 56967 }, + { 0x46A4, 56946 }, + { 0x46A5, 56949 }, + { 0x46A6, 56931 }, + { 0x46A7, 56979 }, + { 0x46A8, 56989 }, + { 0x46A9, 56986 }, + { 0x46AA, 56992 }, + { 0x46AB, 56982 }, + { 0x46AC, 132127 }, + { 0x46AD, 132130 }, + { 0x46AE, 132166 }, + { 0x46AF, 132163 }, + { 0x46B0, 132118 }, + { 0x46B1, 132154 }, + { 0x46B2, 132160 }, + { 0x46B3, 132133 }, + { 0x46B4, 132151 }, + { 0x46B5, 132157 }, + { 0x46B6, 132136 }, + { 0x46B7, 132169 }, + { 0x46B8, 132139 }, + { 0x46B9, 132142 }, + { 0x46BA, 132178 }, + { 0x46BB, 132124 }, + { 0x46BC, 132121 }, + { 0x46BD, 132175 }, + { 0x46BE, 132145 }, + { 0x46BF, 132172 }, + { 0x46C0, 132181 }, + { 0x46C1, 132148 }, + { 0x46C2, 132184 }, + { 0x46C3, 132191 }, + { 0x46C4, 132200 }, + { 0x46C5, 132187 }, + { 0x46C6, 132194 }, + { 0x46C7, 132197 }, + { 0x46C8, 132115 }, + { 0x46C9, 63273 }, + { 0x46CA, 63276 }, + { 0x46CB, 63291 }, + { 0x46CC, 63282 }, + { 0x46CD, 63285 }, + { 0x46CE, 63327 }, + { 0x46CF, 63294 }, + { 0x46D0, 63330 }, + { 0x46D1, 63297 }, + { 0x46D2, 63300 }, + { 0x46D3, 63303 }, + { 0x46D4, 63306 }, + { 0x46D5, 63309 }, + { 0x46D6, 63315 }, + { 0x46D7, 63345 }, + { 0x46D8, 63321 }, + { 0x46D9, 63324 }, + { 0x46DA, 63288 }, + { 0x46DB, 63312 }, + { 0x46DC, 63318 }, + { 0x46DD, 63348 }, + { 0x46DE, 63333 }, + { 0x46DF, 63336 }, + { 0x46E0, 63339 }, + { 0x46E1, 63342 }, + { 0x46E2, 63279 }, + { 0x46E3, 63351 }, + { 0x46E4, 107079 }, + { 0x46E5, 107083 }, + { 0x46E6, 107087 }, + { 0x46E7, 107091 }, + { 0x46E8, 107159 }, + { 0x46E9, 107155 }, + { 0x46EA, 107095 }, + { 0x46EB, 107171 }, + { 0x46EC, 107123 }, + { 0x46ED, 107111 }, + { 0x46EE, 107115 }, + { 0x46EF, 107175 }, + { 0x46F0, 107119 }, + { 0x46F1, 107179 }, + { 0x46F2, 107131 }, + { 0x46F3, 107183 }, + { 0x46F4, 107107 }, + { 0x46F5, 107167 }, + { 0x46F6, 107163 }, + { 0x46F7, 107135 }, + { 0x46F8, 107187 }, + { 0x46F9, 107139 }, + { 0x46FA, 107103 }, + { 0x46FB, 107127 }, + { 0x46FC, 107143 }, + { 0x46FD, 107191 }, + { 0x46FE, 107147 }, + { 0x46FF, 107195 }, + { 0x4700, 107151 }, + { 0x4701, 107099 }, + { 0x4702, 107199 }, + { 0x4703, 107203 }, + { 0x4704, 106661 }, + { 0x4705, 106665 }, + { 0x4706, 106669 }, + { 0x4707, 106673 }, + { 0x4708, 106741 }, + { 0x4709, 106737 }, + { 0x470A, 106677 }, + { 0x470B, 106705 }, + { 0x470C, 106693 }, + { 0x470D, 106697 }, + { 0x470E, 106701 }, + { 0x470F, 106713 }, + { 0x4710, 106689 }, + { 0x4711, 106749 }, + { 0x4712, 106745 }, + { 0x4713, 106717 }, + { 0x4714, 106753 }, + { 0x4715, 106721 }, + { 0x4716, 106685 }, + { 0x4717, 106709 }, + { 0x4718, 106725 }, + { 0x4719, 106729 }, + { 0x471A, 106733 }, + { 0x471B, 106681 }, + { 0x471C, 107066 }, + { 0x471D, 107011 }, + { 0x471E, 107075 }, + { 0x471F, 107071 }, + { 0x4720, 106758 }, + { 0x4721, 106807 }, + { 0x4722, 106954 }, + { 0x4723, 106847 }, + { 0x4724, 106827 }, + { 0x4725, 106778 }, + { 0x4726, 106925 }, + { 0x4727, 106887 }, + { 0x4728, 106867 }, + { 0x4729, 106798 }, + { 0x472A, 106993 }, + { 0x472B, 106984 }, + { 0x472C, 106916 }, + { 0x472D, 106907 }, + { 0x472E, 106945 }, + { 0x472F, 107002 }, + { 0x4730, 106762 }, + { 0x4731, 106811 }, + { 0x4732, 106958 }, + { 0x4733, 106851 }, + { 0x4734, 106831 }, + { 0x4735, 106782 }, + { 0x4736, 106929 }, + { 0x4737, 106891 }, + { 0x4738, 106871 }, + { 0x4739, 106773 }, + { 0x473A, 106822 }, + { 0x473B, 106969 }, + { 0x473C, 106862 }, + { 0x473D, 106842 }, + { 0x473E, 106793 }, + { 0x473F, 106940 }, + { 0x4740, 106902 }, + { 0x4741, 106882 }, + { 0x4742, 106802 }, + { 0x4743, 106997 }, + { 0x4744, 106988 }, + { 0x4745, 106920 }, + { 0x4746, 106911 }, + { 0x4747, 106949 }, + { 0x4748, 107006 }, + { 0x4749, 106974 }, + { 0x474A, 106979 }, + { 0x474B, 106767 }, + { 0x474C, 106816 }, + { 0x474D, 106963 }, + { 0x474E, 106856 }, + { 0x474F, 106836 }, + { 0x4750, 106787 }, + { 0x4751, 106934 }, + { 0x4752, 106896 }, + { 0x4753, 106876 }, + { 0x4754, 107016 }, + { 0x4755, 107031 }, + { 0x4756, 107061 }, + { 0x4757, 107041 }, + { 0x4758, 107036 }, + { 0x4759, 107021 }, + { 0x475A, 107056 }, + { 0x475B, 107051 }, + { 0x475C, 107046 }, + { 0x475D, 107026 }, + { 0x475E, 131767 }, + { 0x475F, 131746 }, + { 0x4760, 131754 }, + { 0x4761, 131758 }, + { 0x4762, 131742 }, + { 0x4763, 131750 }, + { 0x4764, 131763 }, + { 0x4765, 131719 }, + { 0x4766, 131727 }, + { 0x4767, 131724 }, + { 0x4768, 131788 }, + { 0x4769, 131836 }, + { 0x476A, 131779 }, + { 0x476B, 131833 }, + { 0x476C, 131773 }, + { 0x476D, 131824 }, + { 0x476E, 131785 }, + { 0x476F, 131845 }, + { 0x4770, 131860 }, + { 0x4771, 131869 }, + { 0x4772, 131827 }, + { 0x4773, 131866 }, + { 0x4774, 131842 }, + { 0x4775, 131809 }, + { 0x4776, 131857 }, + { 0x4777, 131776 }, + { 0x4778, 131830 }, + { 0x4779, 131797 }, + { 0x477A, 131800 }, + { 0x477B, 131848 }, + { 0x477C, 131770 }, + { 0x477D, 131821 }, + { 0x477E, 131794 }, + { 0x477F, 131815 }, + { 0x4780, 131803 }, + { 0x4781, 131791 }, + { 0x4782, 131812 }, + { 0x4783, 131851 }, + { 0x4784, 131854 }, + { 0x4785, 131806 }, + { 0x4786, 131818 }, + { 0x4787, 131782 }, + { 0x4788, 131839 }, + { 0x4789, 131875 }, + { 0x478A, 131872 }, + { 0x478B, 131863 }, + { 0x478C, 131708 }, + { 0x478D, 131716 }, + { 0x478E, 131712 }, + { 0x478F, 131892 }, + { 0x4790, 131730 }, + { 0x4791, 131733 }, + { 0x4792, 131739 }, + { 0x4793, 131736 }, + { 0x4794, 131886 }, + { 0x4795, 131889 }, + { 0x4796, 131878 }, + { 0x4797, 131882 }, + { 0x4798, 131894 }, + { 0x4799, 131898 }, + { 0x479A, 131910 }, + { 0x479B, 131914 }, + { 0x479C, 131921 }, + { 0x479D, 131925 }, + { 0x479E, 131907 }, + { 0x479F, 131901 }, + { 0x47A0, 131917 }, + { 0x47A1, 131904 }, + { 0x47A2, 8272 }, + { 0x47A3, 8397 }, + { 0x47A4, 8317 }, + { 0x47A5, 8282 }, + { 0x47A6, 8327 }, + { 0x47A7, 8302 }, + { 0x47A8, 8337 }, + { 0x47A9, 8332 }, + { 0x47AA, 8312 }, + { 0x47AB, 8297 }, + { 0x47AC, 8292 }, + { 0x47AD, 8322 }, + { 0x47AE, 8287 }, + { 0x47AF, 8372 }, + { 0x47B0, 8377 }, + { 0x47B1, 8402 }, + { 0x47B2, 8267 }, + { 0x47B3, 8307 }, + { 0x47B4, 8277 }, + { 0x47B5, 8392 }, + { 0x47B6, 8367 }, + { 0x47B7, 8387 }, + { 0x47B8, 8362 }, + { 0x47B9, 8342 }, + { 0x47BA, 8357 }, + { 0x47BB, 8407 }, + { 0x47BC, 8352 }, + { 0x47BD, 8347 }, + { 0x47BE, 8382 }, + { 0x47BF, 8412 }, + { 0x47C0, 8417 }, + { 0x47C1, 8422 }, + { 0x47C2, 8137 }, + { 0x47C3, 8147 }, + { 0x47C4, 8132 }, + { 0x47C5, 8222 }, + { 0x47C6, 8152 }, + { 0x47C7, 8177 }, + { 0x47C8, 8202 }, + { 0x47C9, 8157 }, + { 0x47CA, 8112 }, + { 0x47CB, 8172 }, + { 0x47CC, 8197 }, + { 0x47CD, 8142 }, + { 0x47CE, 8227 }, + { 0x47CF, 8217 }, + { 0x47D0, 8162 }, + { 0x47D1, 8207 }, + { 0x47D2, 8127 }, + { 0x47D3, 8192 }, + { 0x47D4, 8107 }, + { 0x47D5, 8117 }, + { 0x47D6, 8212 }, + { 0x47D7, 8122 }, + { 0x47D8, 8247 }, + { 0x47D9, 8167 }, + { 0x47DA, 8242 }, + { 0x47DB, 8232 }, + { 0x47DC, 8182 }, + { 0x47DD, 8237 }, + { 0x47DE, 8187 }, + { 0x47DF, 8252 }, + { 0x47E0, 8257 }, + { 0x47E1, 8262 }, + { 0x47E2, 131988 }, + { 0x47E3, 131955 }, + { 0x47E4, 131991 }, + { 0x47E5, 131994 }, + { 0x47E6, 132018 }, + { 0x47E7, 132015 }, + { 0x47E8, 131934 }, + { 0x47E9, 131949 }, + { 0x47EA, 131928 }, + { 0x47EB, 132012 }, + { 0x47EC, 132030 }, + { 0x47ED, 131997 }, + { 0x47EE, 132021 }, + { 0x47EF, 131958 }, + { 0x47F0, 131973 }, + { 0x47F1, 131982 }, + { 0x47F2, 131961 }, + { 0x47F3, 131976 }, + { 0x47F4, 132000 }, + { 0x47F5, 132024 }, + { 0x47F6, 132033 }, + { 0x47F7, 132036 }, + { 0x47F8, 131940 }, + { 0x47F9, 131943 }, + { 0x47FA, 132027 }, + { 0x47FB, 131952 }, + { 0x47FC, 131985 }, + { 0x47FD, 131937 }, + { 0x47FE, 131931 }, + { 0x47FF, 132006 }, + { 0x4800, 131964 }, + { 0x4801, 131979 }, + { 0x4802, 132003 }, + { 0x4803, 131967 }, + { 0x4804, 131970 }, + { 0x4805, 132009 }, + { 0x4806, 131946 }, + { 0x4807, 132083 }, + { 0x4808, 132087 }, + { 0x4809, 132039 }, + { 0x480A, 132049 }, + { 0x480B, 132046 }, + { 0x480C, 132052 }, + { 0x480D, 132042 }, + { 0x480E, 132071 }, + { 0x480F, 132080 }, + { 0x4810, 132074 }, + { 0x4811, 132058 }, + { 0x4812, 132055 }, + { 0x4813, 132063 }, + { 0x4814, 132067 }, + { 0x4815, 69886 }, + { 0x4816, 69901 }, + { 0x4817, 69910 }, + { 0x4818, 69985 }, + { 0x4819, 69907 }, + { 0x481A, 69982 }, + { 0x481B, 69904 }, + { 0x481C, 69988 }, + { 0x481D, 69889 }, + { 0x481E, 69922 }, + { 0x481F, 69895 }, + { 0x4820, 69952 }, + { 0x4821, 69892 }, + { 0x4822, 69934 }, + { 0x4823, 69898 }, + { 0x4824, 69967 }, + { 0x4825, 69940 }, + { 0x4826, 69973 }, + { 0x4827, 70027 }, + { 0x4828, 70024 }, + { 0x4829, 69928 }, + { 0x482A, 69997 }, + { 0x482B, 70000 }, + { 0x482C, 69916 }, + { 0x482D, 69937 }, + { 0x482E, 69964 }, + { 0x482F, 70018 }, + { 0x4830, 69919 }, + { 0x4831, 69994 }, + { 0x4832, 70021 }, + { 0x4833, 69955 }, + { 0x4834, 69925 }, + { 0x4835, 69913 }, + { 0x4836, 69991 }, + { 0x4837, 70006 }, + { 0x4838, 70039 }, + { 0x4839, 70036 }, + { 0x483A, 69949 }, + { 0x483B, 70012 }, + { 0x483C, 70009 }, + { 0x483D, 69946 }, + { 0x483E, 70003 }, + { 0x483F, 70030 }, + { 0x4840, 69976 }, + { 0x4841, 69970 }, + { 0x4842, 69958 }, + { 0x4843, 69943 }, + { 0x4844, 69961 }, + { 0x4845, 69979 }, + { 0x4846, 70015 }, + { 0x4847, 70033 }, + { 0x4848, 70042 }, + { 0x4849, 70045 }, + { 0x484A, 69931 }, + { 0x484B, 70048 }, + { 0x484C, 17344 }, + { 0x484D, 41273 }, + { 0x484E, 28395 }, + { 0x484F, 28375 }, + { 0x4850, 28402 }, + { 0x4851, 28382 }, + { 0x4852, 143864 }, + { 0x4853, 143832 }, + { 0x4854, 143868 }, + { 0x4855, 143880 }, + { 0x4856, 143804 }, + { 0x4857, 143824 }, + { 0x4858, 143876 }, + { 0x4859, 143836 }, + { 0x485A, 143856 }, + { 0x485B, 143860 }, + { 0x485C, 143840 }, + { 0x485D, 143884 }, + { 0x485E, 143812 }, + { 0x485F, 143816 }, + { 0x4860, 143888 }, + { 0x4861, 143828 }, + { 0x4862, 143808 }, + { 0x4863, 143872 }, + { 0x4864, 143844 }, + { 0x4865, 143848 }, + { 0x4866, 143852 }, + { 0x4867, 143820 }, + { 0x4868, 143892 }, + { 0x4869, 143910 }, + { 0x486A, 143918 }, + { 0x486B, 143914 }, + { 0x486C, 143906 }, + { 0x486D, 143922 }, + { 0x486E, 143896 }, + { 0x486F, 143901 }, + { 0x4870, 143734 }, + { 0x4871, 143710 }, + { 0x4872, 143738 }, + { 0x4873, 143750 }, + { 0x4874, 143694 }, + { 0x4875, 143766 }, + { 0x4876, 143746 }, + { 0x4877, 143714 }, + { 0x4878, 143726 }, + { 0x4879, 143730 }, + { 0x487A, 143718 }, + { 0x487B, 143754 }, + { 0x487C, 143762 }, + { 0x487D, 143702 }, + { 0x487E, 143758 }, + { 0x487F, 143698 }, + { 0x4880, 143742 }, + { 0x4881, 143722 }, + { 0x4882, 143706 }, + { 0x4883, 143770 }, + { 0x4884, 143788 }, + { 0x4885, 143796 }, + { 0x4886, 143792 }, + { 0x4887, 143784 }, + { 0x4888, 143800 }, + { 0x4889, 143774 }, + { 0x488A, 143779 }, + { 0x488B, 78546 }, + { 0x488C, 78526 }, + { 0x488D, 78550 }, + { 0x488E, 78562 }, + { 0x488F, 78510 }, + { 0x4890, 78578 }, + { 0x4891, 78558 }, + { 0x4892, 78530 }, + { 0x4893, 78542 }, + { 0x4894, 78534 }, + { 0x4895, 78566 }, + { 0x4896, 78574 }, + { 0x4897, 78518 }, + { 0x4898, 78570 }, + { 0x4899, 78514 }, + { 0x489A, 78554 }, + { 0x489B, 78538 }, + { 0x489C, 78522 }, + { 0x489D, 78616 }, + { 0x489E, 78611 }, + { 0x489F, 78504 }, + { 0x48A0, 78498 }, + { 0x48A1, 78582 }, + { 0x48A2, 78595 }, + { 0x48A3, 78603 }, + { 0x48A4, 78599 }, + { 0x48A5, 78591 }, + { 0x48A6, 78607 }, + { 0x48A7, 78586 }, + { 0x48A8, 8737 }, + { 0x48A9, 8947 }, + { 0x48AA, 8972 }, + { 0x48AB, 8742 }, + { 0x48AC, 8957 }, + { 0x48AD, 8952 }, + { 0x48AE, 8747 }, + { 0x48AF, 8832 }, + { 0x48B0, 9022 }, + { 0x48B1, 8752 }, + { 0x48B2, 8962 }, + { 0x48B3, 8852 }, + { 0x48B4, 9032 }, + { 0x48B5, 8762 }, + { 0x48B6, 8977 }, + { 0x48B7, 8862 }, + { 0x48B8, 9037 }, + { 0x48B9, 8757 }, + { 0x48BA, 8967 }, + { 0x48BB, 8857 }, + { 0x48BC, 8817 }, + { 0x48BD, 9012 }, + { 0x48BE, 8797 }, + { 0x48BF, 9002 }, + { 0x48C0, 8897 }, + { 0x48C1, 9057 }, + { 0x48C2, 8867 }, + { 0x48C3, 9042 }, + { 0x48C4, 8937 }, + { 0x48C5, 9092 }, + { 0x48C6, 8767 }, + { 0x48C7, 8982 }, + { 0x48C8, 8872 }, + { 0x48C9, 8907 }, + { 0x48CA, 8807 }, + { 0x48CB, 8772 }, + { 0x48CC, 8877 }, + { 0x48CD, 9047 }, + { 0x48CE, 8922 }, + { 0x48CF, 9077 }, + { 0x48D0, 8912 }, + { 0x48D1, 9072 }, + { 0x48D2, 8927 }, + { 0x48D3, 9082 }, + { 0x48D4, 9062 }, + { 0x48D5, 8917 }, + { 0x48D6, 9097 }, + { 0x48D7, 8812 }, + { 0x48D8, 8837 }, + { 0x48D9, 8822 }, + { 0x48DA, 8802 }, + { 0x48DB, 9007 }, + { 0x48DC, 8777 }, + { 0x48DD, 8987 }, + { 0x48DE, 8827 }, + { 0x48DF, 9017 }, + { 0x48E0, 8842 }, + { 0x48E1, 9027 }, + { 0x48E2, 8782 }, + { 0x48E3, 8992 }, + { 0x48E4, 8882 }, + { 0x48E5, 8787 }, + { 0x48E6, 8887 }, + { 0x48E7, 8902 }, + { 0x48E8, 9067 }, + { 0x48E9, 8932 }, + { 0x48EA, 9087 }, + { 0x48EB, 8792 }, + { 0x48EC, 8997 }, + { 0x48ED, 8892 }, + { 0x48EE, 9052 }, + { 0x48EF, 8847 }, + { 0x48F0, 8942 }, + { 0x48F1, 9904 }, + { 0x48F2, 9929 }, + { 0x48F3, 9939 }, + { 0x48F4, 10049 }, + { 0x48F5, 9944 }, + { 0x48F6, 10084 }, + { 0x48F7, 10064 }, + { 0x48F8, 9949 }, + { 0x48F9, 10054 }, + { 0x48FA, 9909 }, + { 0x48FB, 10124 }, + { 0x48FC, 9954 }, + { 0x48FD, 9959 }, + { 0x48FE, 9964 }, + { 0x48FF, 10069 }, + { 0x4900, 9969 }, + { 0x4901, 9914 }, + { 0x4902, 10029 }, + { 0x4903, 9974 }, + { 0x4904, 9979 }, + { 0x4905, 9934 }, + { 0x4906, 10119 }, + { 0x4907, 9984 }, + { 0x4908, 10074 }, + { 0x4909, 9989 }, + { 0x490A, 9994 }, + { 0x490B, 10094 }, + { 0x490C, 9919 }, + { 0x490D, 10034 }, + { 0x490E, 10154 }, + { 0x490F, 10136 }, + { 0x4910, 10114 }, + { 0x4911, 9999 }, + { 0x4912, 10079 }, + { 0x4913, 10004 }, + { 0x4914, 10130 }, + { 0x4915, 10009 }, + { 0x4916, 10099 }, + { 0x4917, 10014 }, + { 0x4918, 10089 }, + { 0x4919, 10104 }, + { 0x491A, 10059 }, + { 0x491B, 9924 }, + { 0x491C, 10044 }, + { 0x491D, 10160 }, + { 0x491E, 10142 }, + { 0x491F, 10019 }, + { 0x4920, 10024 }, + { 0x4921, 10109 }, + { 0x4922, 10148 }, + { 0x4923, 10039 }, + { 0x4924, 9616 }, + { 0x4925, 9641 }, + { 0x4926, 9651 }, + { 0x4927, 9761 }, + { 0x4928, 9656 }, + { 0x4929, 9796 }, + { 0x492A, 9776 }, + { 0x492B, 9661 }, + { 0x492C, 9766 }, + { 0x492D, 9621 }, + { 0x492E, 9836 }, + { 0x492F, 9666 }, + { 0x4930, 9671 }, + { 0x4931, 9676 }, + { 0x4932, 9781 }, + { 0x4933, 9681 }, + { 0x4934, 9626 }, + { 0x4935, 9741 }, + { 0x4936, 9686 }, + { 0x4937, 9691 }, + { 0x4938, 9646 }, + { 0x4939, 9831 }, + { 0x493A, 9696 }, + { 0x493B, 9786 }, + { 0x493C, 9701 }, + { 0x493D, 9706 }, + { 0x493E, 9806 }, + { 0x493F, 9631 }, + { 0x4940, 9746 }, + { 0x4941, 9866 }, + { 0x4942, 9848 }, + { 0x4943, 9826 }, + { 0x4944, 9711 }, + { 0x4945, 9791 }, + { 0x4946, 9716 }, + { 0x4947, 9842 }, + { 0x4948, 9721 }, + { 0x4949, 9811 }, + { 0x494A, 9726 }, + { 0x494B, 9801 }, + { 0x494C, 9816 }, + { 0x494D, 9771 }, + { 0x494E, 9636 }, + { 0x494F, 9756 }, + { 0x4950, 9872 }, + { 0x4951, 9854 }, + { 0x4952, 9731 }, + { 0x4953, 9736 }, + { 0x4954, 9821 }, + { 0x4955, 9860 }, + { 0x4956, 9751 }, + { 0x4957, 9878 }, + { 0x4958, 9896 }, + { 0x4959, 9892 }, + { 0x495A, 9900 }, + { 0x495B, 9882 }, + { 0x495C, 9887 }, + { 0x495D, 56798 }, + { 0x495E, 56802 }, + { 0x495F, 56846 }, + { 0x4960, 56858 }, + { 0x4961, 56902 }, + { 0x4962, 56826 }, + { 0x4963, 56806 }, + { 0x4964, 56822 }, + { 0x4965, 56882 }, + { 0x4966, 56814 }, + { 0x4967, 56810 }, + { 0x4968, 56878 }, + { 0x4969, 56850 }, + { 0x496A, 56894 }, + { 0x496B, 56874 }, + { 0x496C, 56854 }, + { 0x496D, 56898 }, + { 0x496E, 56830 }, + { 0x496F, 56818 }, + { 0x4970, 56834 }, + { 0x4971, 56838 }, + { 0x4972, 56842 }, + { 0x4973, 56866 }, + { 0x4974, 56906 }, + { 0x4975, 56870 }, + { 0x4976, 56911 }, + { 0x4977, 56886 }, + { 0x4978, 56890 }, + { 0x4979, 56862 }, + { 0x497A, 56778 }, + { 0x497B, 56786 }, + { 0x497C, 56794 }, + { 0x497D, 56782 }, + { 0x497E, 56790 }, + { 0x497F, 56718 }, + { 0x4980, 56713 }, + { 0x4981, 56734 }, + { 0x4982, 56730 }, + { 0x4983, 56722 }, + { 0x4984, 56726 }, + { 0x4985, 56762 }, + { 0x4986, 56738 }, + { 0x4987, 56746 }, + { 0x4988, 56774 }, + { 0x4989, 56754 }, + { 0x498A, 56750 }, + { 0x498B, 56742 }, + { 0x498C, 56770 }, + { 0x498D, 56766 }, + { 0x498E, 56758 }, + { 0x498F, 23368 }, + { 0x4990, 23350 }, + { 0x4991, 23356 }, + { 0x4992, 23377 }, + { 0x4993, 23362 }, + { 0x4994, 23359 }, + { 0x4995, 23353 }, + { 0x4996, 23374 }, + { 0x4997, 23371 }, + { 0x4998, 23365 }, + { 0x4999, 23475 }, + { 0x499A, 23483 }, + { 0x499B, 23487 }, + { 0x499C, 23491 }, + { 0x499D, 23495 }, + { 0x499E, 23473 }, + { 0x499F, 23501 }, + { 0x49A0, 23509 }, + { 0x49A1, 23541 }, + { 0x49A2, 23533 }, + { 0x49A3, 23505 }, + { 0x49A4, 23529 }, + { 0x49A5, 23557 }, + { 0x49A6, 23565 }, + { 0x49A7, 23537 }, + { 0x49A8, 23521 }, + { 0x49A9, 23513 }, + { 0x49AA, 23569 }, + { 0x49AB, 23573 }, + { 0x49AC, 23561 }, + { 0x49AD, 23553 }, + { 0x49AE, 23577 }, + { 0x49AF, 23517 }, + { 0x49B0, 23545 }, + { 0x49B1, 23549 }, + { 0x49B2, 23525 }, + { 0x49B3, 23581 }, + { 0x49B4, 23586 }, + { 0x49B5, 23479 }, + { 0x49B6, 23600 }, + { 0x49B7, 23591 }, + { 0x49B8, 23595 }, + { 0x49B9, 23604 }, + { 0x49BA, 23499 }, + { 0x49BB, 23608 }, + { 0x49BC, 23383 }, + { 0x49BD, 23391 }, + { 0x49BE, 23423 }, + { 0x49BF, 23415 }, + { 0x49C0, 23387 }, + { 0x49C1, 23411 }, + { 0x49C2, 23439 }, + { 0x49C3, 23447 }, + { 0x49C4, 23419 }, + { 0x49C5, 23403 }, + { 0x49C6, 23395 }, + { 0x49C7, 23451 }, + { 0x49C8, 23455 }, + { 0x49C9, 23443 }, + { 0x49CA, 23435 }, + { 0x49CB, 23459 }, + { 0x49CC, 23399 }, + { 0x49CD, 23427 }, + { 0x49CE, 23431 }, + { 0x49CF, 23407 }, + { 0x49D0, 23463 }, + { 0x49D1, 23468 }, + { 0x49D2, 23347 }, + { 0x49D3, 23380 }, + { 0x49D4, 16697 }, + { 0x49D5, 16703 }, + { 0x49D6, 16721 }, + { 0x49D7, 16709 }, + { 0x49D8, 16706 }, + { 0x49D9, 16700 }, + { 0x49DA, 16718 }, + { 0x49DB, 16715 }, + { 0x49DC, 16712 }, + { 0x49DD, 16732 }, + { 0x49DE, 16781 }, + { 0x49DF, 16778 }, + { 0x49E0, 16758 }, + { 0x49E1, 16755 }, + { 0x49E2, 16765 }, + { 0x49E3, 16784 }, + { 0x49E4, 16772 }, + { 0x49E5, 16775 }, + { 0x49E6, 16724 }, + { 0x49E7, 16735 }, + { 0x49E8, 16768 }, + { 0x49E9, 16743 }, + { 0x49EA, 16739 }, + { 0x49EB, 16728 }, + { 0x49EC, 16761 }, + { 0x49ED, 16751 }, + { 0x49EE, 16747 }, + { 0x49EF, 16787 }, + { 0x49F0, 16795 }, + { 0x49F1, 16791 }, + { 0x49F2, 16799 }, + { 0x49F3, 69843 }, + { 0x49F4, 69718 }, + { 0x49F5, 69736 }, + { 0x49F6, 69807 }, + { 0x49F7, 69822 }, + { 0x49F8, 69742 }, + { 0x49F9, 69768 }, + { 0x49FA, 69840 }, + { 0x49FB, 69852 }, + { 0x49FC, 69786 }, + { 0x49FD, 69759 }, + { 0x49FE, 69774 }, + { 0x49FF, 69837 }, + { 0x4A00, 69739 }, + { 0x4A01, 69813 }, + { 0x4A02, 69762 }, + { 0x4A03, 69730 }, + { 0x4A04, 69819 }, + { 0x4A05, 69849 }, + { 0x4A06, 69816 }, + { 0x4A07, 69771 }, + { 0x4A08, 69745 }, + { 0x4A09, 69765 }, + { 0x4A0A, 69777 }, + { 0x4A0B, 69855 }, + { 0x4A0C, 69727 }, + { 0x4A0D, 69751 }, + { 0x4A0E, 69754 }, + { 0x4A0F, 69810 }, + { 0x4A10, 69789 }, + { 0x4A11, 69846 }, + { 0x4A12, 69780 }, + { 0x4A13, 69792 }, + { 0x4A14, 69801 }, + { 0x4A15, 69804 }, + { 0x4A16, 69748 }, + { 0x4A17, 69825 }, + { 0x4A18, 69733 }, + { 0x4A19, 69724 }, + { 0x4A1A, 69783 }, + { 0x4A1B, 69828 }, + { 0x4A1C, 69721 }, + { 0x4A1D, 69858 }, + { 0x4A1E, 69862 }, + { 0x4A1F, 69866 }, + { 0x4A20, 69795 }, + { 0x4A21, 69831 }, + { 0x4A22, 45121 }, + { 0x4A23, 45945 }, + { 0x4A24, 45576 }, + { 0x4A25, 51759 }, + { 0x4A26, 44503 }, + { 0x4A27, 44493 }, + { 0x4A28, 44498 }, + { 0x4A29, 9472 }, + { 0x4A2A, 9512 }, + { 0x4A2B, 9452 }, + { 0x4A2C, 9507 }, + { 0x4A2D, 9530 }, + { 0x4A2E, 9424 }, + { 0x4A2F, 9476 }, + { 0x4A30, 9444 }, + { 0x4A31, 9538 }, + { 0x4A32, 9456 }, + { 0x4A33, 9468 }, + { 0x4A34, 9460 }, + { 0x4A35, 9542 }, + { 0x4A36, 9432 }, + { 0x4A37, 9436 }, + { 0x4A38, 9481 }, + { 0x4A39, 9486 }, + { 0x4A3A, 9546 }, + { 0x4A3B, 9448 }, + { 0x4A3C, 9550 }, + { 0x4A3D, 9428 }, + { 0x4A3E, 9534 }, + { 0x4A3F, 9517 }, + { 0x4A40, 9522 }, + { 0x4A41, 9555 }, + { 0x4A42, 9464 }, + { 0x4A43, 9440 }, + { 0x4A44, 9494 }, + { 0x4A45, 9499 }, + { 0x4A46, 9559 }, + { 0x4A47, 9572 }, + { 0x4A48, 9584 }, + { 0x4A49, 9580 }, + { 0x4A4A, 9576 }, + { 0x4A4B, 9568 }, + { 0x4A4C, 9592 }, + { 0x4A4D, 9588 }, + { 0x4A4E, 9563 }, + { 0x4A4F, 9596 }, + { 0x4A50, 9601 }, + { 0x4A51, 80247 }, + { 0x4A52, 80226 }, + { 0x4A53, 80250 }, + { 0x4A54, 80205 }, + { 0x4A55, 80220 }, + { 0x4A56, 80256 }, + { 0x4A57, 80232 }, + { 0x4A58, 80244 }, + { 0x4A59, 80235 }, + { 0x4A5A, 80259 }, + { 0x4A5B, 80211 }, + { 0x4A5C, 80214 }, + { 0x4A5D, 80262 }, + { 0x4A5E, 80223 }, + { 0x4A5F, 80208 }, + { 0x4A60, 80253 }, + { 0x4A61, 80265 }, + { 0x4A62, 80241 }, + { 0x4A63, 80217 }, + { 0x4A64, 80229 }, + { 0x4A65, 80238 }, + { 0x4A66, 80328 }, + { 0x4A67, 80285 }, + { 0x4A68, 80294 }, + { 0x4A69, 80281 }, + { 0x4A6A, 80289 }, + { 0x4A6B, 80316 }, + { 0x4A6C, 80320 }, + { 0x4A6D, 80299 }, + { 0x4A6E, 80303 }, + { 0x4A6F, 80307 }, + { 0x4A70, 80312 }, + { 0x4A71, 80324 }, + { 0x4A72, 80268 }, + { 0x4A73, 80275 }, + { 0x4A74, 80278 }, + { 0x4A75, 80271 }, + { 0x4A76, 80337 }, + { 0x4A77, 80342 }, + { 0x4A78, 80355 }, + { 0x4A79, 80331 }, + { 0x4A7A, 80349 }, + { 0x4A7B, 9146 }, + { 0x4A7C, 9122 }, + { 0x4A7D, 9171 }, + { 0x4A7E, 9118 }, + { 0x4A7F, 9159 }, + { 0x4A80, 9150 }, + { 0x4A81, 9142 }, + { 0x4A82, 9126 }, + { 0x4A83, 9163 }, + { 0x4A84, 9106 }, + { 0x4A85, 9110 }, + { 0x4A86, 9167 }, + { 0x4A87, 9102 }, + { 0x4A88, 9155 }, + { 0x4A89, 9134 }, + { 0x4A8A, 9138 }, + { 0x4A8B, 9114 }, + { 0x4A8C, 9130 }, + { 0x4A8D, 9175 }, + { 0x4A8E, 9180 }, + { 0x4A8F, 9185 }, + { 0x4A90, 9191 }, + { 0x4A91, 9197 }, + { 0x4A92, 9201 }, + { 0x4A93, 9206 }, + { 0x4A94, 9211 }, + { 0x4A95, 129724 }, + { 0x4A96, 129730 }, + { 0x4A97, 129706 }, + { 0x4A98, 129727 }, + { 0x4A99, 129741 }, + { 0x4A9A, 129685 }, + { 0x4A9B, 129700 }, + { 0x4A9C, 129737 }, + { 0x4A9D, 129734 }, + { 0x4A9E, 129709 }, + { 0x4A9F, 129721 }, + { 0x4AA0, 129712 }, + { 0x4AA1, 129744 }, + { 0x4AA2, 129691 }, + { 0x4AA3, 129694 }, + { 0x4AA4, 129747 }, + { 0x4AA5, 129703 }, + { 0x4AA6, 129688 }, + { 0x4AA7, 129715 }, + { 0x4AA8, 129718 }, + { 0x4AA9, 129697 }, + { 0x4AAA, 129750 }, + { 0x4AAB, 129760 }, + { 0x4AAC, 129766 }, + { 0x4AAD, 129763 }, + { 0x4AAE, 129757 }, + { 0x4AAF, 129769 }, + { 0x4AB0, 129753 }, + { 0x4AB1, 73225 }, + { 0x4AB2, 73201 }, + { 0x4AB3, 73228 }, + { 0x4AB4, 73237 }, + { 0x4AB5, 73180 }, + { 0x4AB6, 73195 }, + { 0x4AB7, 73234 }, + { 0x4AB8, 73204 }, + { 0x4AB9, 73219 }, + { 0x4ABA, 73222 }, + { 0x4ABB, 73207 }, + { 0x4ABC, 73240 }, + { 0x4ABD, 73186 }, + { 0x4ABE, 73189 }, + { 0x4ABF, 73243 }, + { 0x4AC0, 73198 }, + { 0x4AC1, 73183 }, + { 0x4AC2, 73231 }, + { 0x4AC3, 73210 }, + { 0x4AC4, 73213 }, + { 0x4AC5, 73216 }, + { 0x4AC6, 73192 }, + { 0x4AC7, 73246 }, + { 0x4AC8, 52574 }, + { 0x4AC9, 52571 }, + { 0x4ACA, 52568 }, + { 0x4ACB, 52577 }, + { 0x4ACC, 52580 }, + { 0x4ACD, 52693 }, + { 0x4ACE, 52708 }, + { 0x4ACF, 52699 }, + { 0x4AD0, 52732 }, + { 0x4AD1, 52705 }, + { 0x4AD2, 52762 }, + { 0x4AD3, 52861 }, + { 0x4AD4, 52869 }, + { 0x4AD5, 52857 }, + { 0x4AD6, 52865 }, + { 0x4AD7, 52696 }, + { 0x4AD8, 52711 }, + { 0x4AD9, 52702 }, + { 0x4ADA, 52714 }, + { 0x4ADB, 52738 }, + { 0x4ADC, 52789 }, + { 0x4ADD, 52726 }, + { 0x4ADE, 52783 }, + { 0x4ADF, 52795 }, + { 0x4AE0, 52720 }, + { 0x4AE1, 52774 }, + { 0x4AE2, 52735 }, + { 0x4AE3, 52786 }, + { 0x4AE4, 52801 }, + { 0x4AE5, 52848 }, + { 0x4AE6, 52854 }, + { 0x4AE7, 52777 }, + { 0x4AE8, 52851 }, + { 0x4AE9, 52798 }, + { 0x4AEA, 52759 }, + { 0x4AEB, 52845 }, + { 0x4AEC, 52723 }, + { 0x4AED, 52780 }, + { 0x4AEE, 52747 }, + { 0x4AEF, 52750 }, + { 0x4AF0, 52836 }, + { 0x4AF1, 52717 }, + { 0x4AF2, 52771 }, + { 0x4AF3, 52744 }, + { 0x4AF4, 52768 }, + { 0x4AF5, 52753 }, + { 0x4AF6, 52741 }, + { 0x4AF7, 52765 }, + { 0x4AF8, 52839 }, + { 0x4AF9, 52842 }, + { 0x4AFA, 52756 }, + { 0x4AFB, 52729 }, + { 0x4AFC, 52792 }, + { 0x4AFD, 52814 }, + { 0x4AFE, 52809 }, + { 0x4AFF, 52819 }, + { 0x4B00, 52631 }, + { 0x4B01, 52685 }, + { 0x4B02, 52619 }, + { 0x4B03, 52643 }, + { 0x4B04, 52627 }, + { 0x4B05, 52647 }, + { 0x4B06, 52670 }, + { 0x4B07, 52680 }, + { 0x4B08, 52665 }, + { 0x4B09, 52675 }, + { 0x4B0A, 52615 }, + { 0x4B0B, 52635 }, + { 0x4B0C, 52623 }, + { 0x4B0D, 52639 }, + { 0x4B0E, 52938 }, + { 0x4B0F, 52583 }, + { 0x4B10, 52690 }, + { 0x4B11, 52940 }, + { 0x4B12, 52949 }, + { 0x4B13, 52943 }, + { 0x4B14, 52953 }, + { 0x4B15, 52946 }, + { 0x4B16, 52873 }, + { 0x4B17, 52890 }, + { 0x4B18, 52917 }, + { 0x4B19, 52896 }, + { 0x4B1A, 52893 }, + { 0x4B1B, 52884 }, + { 0x4B1C, 52911 }, + { 0x4B1D, 52902 }, + { 0x4B1E, 52899 }, + { 0x4B1F, 52887 }, + { 0x4B20, 52932 }, + { 0x4B21, 52929 }, + { 0x4B22, 52908 }, + { 0x4B23, 52905 }, + { 0x4B24, 52914 }, + { 0x4B25, 52935 }, + { 0x4B26, 52920 }, + { 0x4B27, 52926 }, + { 0x4B28, 52876 }, + { 0x4B29, 52880 }, + { 0x4B2A, 52603 }, + { 0x4B2B, 52585 }, + { 0x4B2C, 52591 }, + { 0x4B2D, 52612 }, + { 0x4B2E, 52597 }, + { 0x4B2F, 52594 }, + { 0x4B30, 52588 }, + { 0x4B31, 52609 }, + { 0x4B32, 52606 }, + { 0x4B33, 52600 }, + { 0x4B34, 52563 }, + { 0x4B35, 52824 }, + { 0x4B36, 52830 }, + { 0x4B37, 52651 }, + { 0x4B38, 52658 }, + { 0x4B39, 52804 }, + { 0x4B3A, 52923 }, + { 0x4B3B, 57572 }, + { 0x4B3C, 57569 }, + { 0x4B3D, 57566 }, + { 0x4B3E, 57625 }, + { 0x4B3F, 57640 }, + { 0x4B40, 57631 }, + { 0x4B41, 57664 }, + { 0x4B42, 57637 }, + { 0x4B43, 57694 }, + { 0x4B44, 57628 }, + { 0x4B45, 57643 }, + { 0x4B46, 57634 }, + { 0x4B47, 57646 }, + { 0x4B48, 57670 }, + { 0x4B49, 57721 }, + { 0x4B4A, 57658 }, + { 0x4B4B, 57715 }, + { 0x4B4C, 57724 }, + { 0x4B4D, 57652 }, + { 0x4B4E, 57706 }, + { 0x4B4F, 57667 }, + { 0x4B50, 57718 }, + { 0x4B51, 57730 }, + { 0x4B52, 57748 }, + { 0x4B53, 57754 }, + { 0x4B54, 57709 }, + { 0x4B55, 57757 }, + { 0x4B56, 57751 }, + { 0x4B57, 57736 }, + { 0x4B58, 57727 }, + { 0x4B59, 57691 }, + { 0x4B5A, 57745 }, + { 0x4B5B, 57655 }, + { 0x4B5C, 57712 }, + { 0x4B5D, 57679 }, + { 0x4B5E, 57682 }, + { 0x4B5F, 57733 }, + { 0x4B60, 57649 }, + { 0x4B61, 57703 }, + { 0x4B62, 57676 }, + { 0x4B63, 57700 }, + { 0x4B64, 57685 }, + { 0x4B65, 57673 }, + { 0x4B66, 57697 }, + { 0x4B67, 57739 }, + { 0x4B68, 57742 }, + { 0x4B69, 57688 }, + { 0x4B6A, 57661 }, + { 0x4B6B, 57593 }, + { 0x4B6C, 57581 }, + { 0x4B6D, 57605 }, + { 0x4B6E, 57589 }, + { 0x4B6F, 57609 }, + { 0x4B70, 57577 }, + { 0x4B71, 57597 }, + { 0x4B72, 57585 }, + { 0x4B73, 57601 }, + { 0x4B74, 57563 }, + { 0x4B75, 57560 }, + { 0x4B76, 57773 }, + { 0x4B77, 57770 }, + { 0x4B78, 57760 }, + { 0x4B79, 57767 }, + { 0x4B7A, 57621 }, + { 0x4B7B, 57575 }, + { 0x4B7C, 57618 }, + { 0x4B7D, 57613 }, + { 0x4B7E, 57763 }, + { 0x4B7F, 16955 }, + { 0x4B80, 16959 }, + { 0x4B81, 16899 }, + { 0x4B82, 16903 }, + { 0x4B83, 16907 }, + { 0x4B84, 16915 }, + { 0x4B85, 16939 }, + { 0x4B86, 16971 }, + { 0x4B87, 16931 }, + { 0x4B88, 16943 }, + { 0x4B89, 16963 }, + { 0x4B8A, 16947 }, + { 0x4B8B, 16967 }, + { 0x4B8C, 16951 }, + { 0x4B8D, 16919 }, + { 0x4B8E, 16927 }, + { 0x4B8F, 16923 }, + { 0x4B90, 16975 }, + { 0x4B91, 16879 }, + { 0x4B92, 16911 }, + { 0x4B93, 16887 }, + { 0x4B94, 16895 }, + { 0x4B95, 16891 }, + { 0x4B96, 16883 }, + { 0x4B97, 16935 }, + { 0x4B98, 16863 }, + { 0x4B99, 16839 }, + { 0x4B9A, 16847 }, + { 0x4B9B, 16875 }, + { 0x4B9C, 16855 }, + { 0x4B9D, 16851 }, + { 0x4B9E, 16843 }, + { 0x4B9F, 16871 }, + { 0x4BA0, 16867 }, + { 0x4BA1, 16859 }, + { 0x4BA2, 53155 }, + { 0x4BA3, 53152 }, + { 0x4BA4, 53149 }, + { 0x4BA5, 53250 }, + { 0x4BA6, 53244 }, + { 0x4BA7, 53247 }, + { 0x4BA8, 53241 }, + { 0x4BA9, 53271 }, + { 0x4BAA, 53322 }, + { 0x4BAB, 53262 }, + { 0x4BAC, 53316 }, + { 0x4BAD, 53328 }, + { 0x4BAE, 53256 }, + { 0x4BAF, 53307 }, + { 0x4BB0, 53268 }, + { 0x4BB1, 53319 }, + { 0x4BB2, 53334 }, + { 0x4BB3, 53343 }, + { 0x4BB4, 53352 }, + { 0x4BB5, 53310 }, + { 0x4BB6, 53349 }, + { 0x4BB7, 53331 }, + { 0x4BB8, 53292 }, + { 0x4BB9, 53340 }, + { 0x4BBA, 53259 }, + { 0x4BBB, 53313 }, + { 0x4BBC, 53280 }, + { 0x4BBD, 53283 }, + { 0x4BBE, 53337 }, + { 0x4BBF, 53253 }, + { 0x4BC0, 53304 }, + { 0x4BC1, 53277 }, + { 0x4BC2, 53346 }, + { 0x4BC3, 53301 }, + { 0x4BC4, 53286 }, + { 0x4BC5, 53274 }, + { 0x4BC6, 53298 }, + { 0x4BC7, 53289 }, + { 0x4BC8, 53265 }, + { 0x4BC9, 53190 }, + { 0x4BCA, 53198 }, + { 0x4BCB, 53226 }, + { 0x4BCC, 53206 }, + { 0x4BCD, 53234 }, + { 0x4BCE, 53194 }, + { 0x4BCF, 53214 }, + { 0x4BD0, 53202 }, + { 0x4BD1, 53218 }, + { 0x4BD2, 53230 }, + { 0x4BD3, 53143 }, + { 0x4BD4, 53146 }, + { 0x4BD5, 53355 }, + { 0x4BD6, 53357 }, + { 0x4BD7, 53178 }, + { 0x4BD8, 53160 }, + { 0x4BD9, 53166 }, + { 0x4BDA, 53187 }, + { 0x4BDB, 53172 }, + { 0x4BDC, 53169 }, + { 0x4BDD, 53163 }, + { 0x4BDE, 53184 }, + { 0x4BDF, 53181 }, + { 0x4BE0, 53175 }, + { 0x4BE1, 53359 }, + { 0x4BE2, 53158 }, + { 0x4BE3, 53238 }, + { 0x4BE4, 53362 }, + { 0x4BE5, 53325 }, + { 0x4BE6, 53210 }, + { 0x4BE7, 53222 }, + { 0x4BE8, 53295 }, + { 0x4BE9, 106426 }, + { 0x4BEA, 106432 }, + { 0x4BEB, 106438 }, + { 0x4BEC, 106429 }, + { 0x4BED, 106435 }, + { 0x4BEE, 106459 }, + { 0x4BEF, 106504 }, + { 0x4BF0, 106450 }, + { 0x4BF1, 106498 }, + { 0x4BF2, 106444 }, + { 0x4BF3, 106489 }, + { 0x4BF4, 106456 }, + { 0x4BF5, 106501 }, + { 0x4BF6, 106510 }, + { 0x4BF7, 106522 }, + { 0x4BF8, 106528 }, + { 0x4BF9, 106492 }, + { 0x4BFA, 106525 }, + { 0x4BFB, 106507 }, + { 0x4BFC, 106480 }, + { 0x4BFD, 106519 }, + { 0x4BFE, 106447 }, + { 0x4BFF, 106495 }, + { 0x4C00, 106468 }, + { 0x4C01, 106471 }, + { 0x4C02, 106513 }, + { 0x4C03, 106441 }, + { 0x4C04, 106486 }, + { 0x4C05, 106465 }, + { 0x4C06, 106474 }, + { 0x4C07, 106462 }, + { 0x4C08, 106483 }, + { 0x4C09, 106477 }, + { 0x4C0A, 106453 }, + { 0x4C0B, 106516 }, + { 0x4C0C, 106423 }, + { 0x4C0D, 106537 }, + { 0x4C0E, 106531 }, + { 0x4C0F, 106534 }, + { 0x4C10, 78806 }, + { 0x4C11, 78796 }, + { 0x4C12, 78793 }, + { 0x4C13, 78923 }, + { 0x4C14, 78938 }, + { 0x4C15, 78929 }, + { 0x4C16, 78962 }, + { 0x4C17, 78935 }, + { 0x4C18, 78992 }, + { 0x4C19, 79059 }, + { 0x4C1A, 79067 }, + { 0x4C1B, 79055 }, + { 0x4C1C, 79063 }, + { 0x4C1D, 78926 }, + { 0x4C1E, 78941 }, + { 0x4C1F, 78932 }, + { 0x4C20, 78944 }, + { 0x4C21, 78968 }, + { 0x4C22, 79019 }, + { 0x4C23, 78956 }, + { 0x4C24, 79013 }, + { 0x4C25, 79025 }, + { 0x4C26, 78950 }, + { 0x4C27, 79004 }, + { 0x4C28, 78965 }, + { 0x4C29, 79016 }, + { 0x4C2A, 79031 }, + { 0x4C2B, 79046 }, + { 0x4C2C, 79052 }, + { 0x4C2D, 79007 }, + { 0x4C2E, 79049 }, + { 0x4C2F, 79028 }, + { 0x4C30, 78989 }, + { 0x4C31, 79043 }, + { 0x4C32, 78953 }, + { 0x4C33, 79010 }, + { 0x4C34, 78977 }, + { 0x4C35, 78980 }, + { 0x4C36, 79034 }, + { 0x4C37, 78947 }, + { 0x4C38, 79001 }, + { 0x4C39, 78974 }, + { 0x4C3A, 78998 }, + { 0x4C3B, 78983 }, + { 0x4C3C, 78971 }, + { 0x4C3D, 79022 }, + { 0x4C3E, 78995 }, + { 0x4C3F, 79037 }, + { 0x4C40, 79040 }, + { 0x4C41, 78986 }, + { 0x4C42, 78959 }, + { 0x4C43, 78871 }, + { 0x4C44, 78859 }, + { 0x4C45, 78883 }, + { 0x4C46, 78867 }, + { 0x4C47, 78887 }, + { 0x4C48, 78896 }, + { 0x4C49, 78906 }, + { 0x4C4A, 78891 }, + { 0x4C4B, 78901 }, + { 0x4C4C, 78855 }, + { 0x4C4D, 78875 }, + { 0x4C4E, 78863 }, + { 0x4C4F, 78879 }, + { 0x4C50, 78787 }, + { 0x4C51, 78799 }, + { 0x4C52, 78809 }, + { 0x4C53, 78812 }, + { 0x4C54, 78780 }, + { 0x4C55, 78815 }, + { 0x4C56, 78920 }, + { 0x4C57, 79084 }, + { 0x4C58, 79080 }, + { 0x4C59, 79071 }, + { 0x4C5A, 78784 }, + { 0x4C5B, 78916 }, + { 0x4C5C, 78847 }, + { 0x4C5D, 78852 }, + { 0x4C5E, 78911 }, + { 0x4C5F, 78802 }, + { 0x4C60, 78835 }, + { 0x4C61, 78817 }, + { 0x4C62, 78823 }, + { 0x4C63, 78844 }, + { 0x4C64, 78829 }, + { 0x4C65, 78826 }, + { 0x4C66, 78820 }, + { 0x4C67, 78841 }, + { 0x4C68, 78838 }, + { 0x4C69, 78832 }, + { 0x4C6A, 78782 }, + { 0x4C6B, 78790 }, + { 0x4C6C, 79082 }, + { 0x4C6D, 79087 }, + { 0x4C6E, 79074 }, + { 0x4C6F, 79077 }, + { 0x4C70, 79976 }, + { 0x4C71, 79984 }, + { 0x4C72, 80008 }, + { 0x4C73, 79992 }, + { 0x4C74, 79988 }, + { 0x4C75, 79980 }, + { 0x4C76, 80004 }, + { 0x4C77, 80000 }, + { 0x4C78, 79996 }, + { 0x4C79, 80022 }, + { 0x4C7A, 80050 }, + { 0x4C7B, 80046 }, + { 0x4C7C, 80030 }, + { 0x4C7D, 80026 }, + { 0x4C7E, 80034 }, + { 0x4C7F, 80054 }, + { 0x4C80, 80038 }, + { 0x4C81, 80042 }, + { 0x4C82, 80012 }, + { 0x4C83, 80017 }, + { 0x4C84, 60397 }, + { 0x4C85, 60412 }, + { 0x4C86, 60403 }, + { 0x4C87, 60409 }, + { 0x4C88, 60400 }, + { 0x4C89, 60415 }, + { 0x4C8A, 60406 }, + { 0x4C8B, 60418 }, + { 0x4C8C, 60439 }, + { 0x4C8D, 60496 }, + { 0x4C8E, 60430 }, + { 0x4C8F, 60487 }, + { 0x4C90, 60490 }, + { 0x4C91, 60502 }, + { 0x4C92, 60424 }, + { 0x4C93, 60478 }, + { 0x4C94, 60436 }, + { 0x4C95, 60493 }, + { 0x4C96, 60508 }, + { 0x4C97, 60517 }, + { 0x4C98, 60526 }, + { 0x4C99, 60481 }, + { 0x4C9A, 60523 }, + { 0x4C9B, 60505 }, + { 0x4C9C, 60463 }, + { 0x4C9D, 60514 }, + { 0x4C9E, 60427 }, + { 0x4C9F, 60520 }, + { 0x4CA0, 60484 }, + { 0x4CA1, 60448 }, + { 0x4CA2, 60451 }, + { 0x4CA3, 60511 }, + { 0x4CA4, 60421 }, + { 0x4CA5, 60472 }, + { 0x4CA6, 60475 }, + { 0x4CA7, 60445 }, + { 0x4CA8, 60469 }, + { 0x4CA9, 60457 }, + { 0x4CAA, 60442 }, + { 0x4CAB, 60466 }, + { 0x4CAC, 60460 }, + { 0x4CAD, 60433 }, + { 0x4CAE, 60499 }, + { 0x4CAF, 60369 }, + { 0x4CB0, 60357 }, + { 0x4CB1, 60381 }, + { 0x4CB2, 60365 }, + { 0x4CB3, 60353 }, + { 0x4CB4, 60373 }, + { 0x4CB5, 60361 }, + { 0x4CB6, 60377 }, + { 0x4CB7, 60345 }, + { 0x4CB8, 60342 }, + { 0x4CB9, 60333 }, + { 0x4CBA, 60339 }, + { 0x4CBB, 60351 }, + { 0x4CBC, 60390 }, + { 0x4CBD, 60348 }, + { 0x4CBE, 60533 }, + { 0x4CBF, 60393 }, + { 0x4CC0, 60536 }, + { 0x4CC1, 60336 }, + { 0x4CC2, 60454 }, + { 0x4CC3, 60529 }, + { 0x4CC4, 60385 }, + { 0x4CC5, 75237 }, + { 0x4CC6, 75243 }, + { 0x4CC7, 75246 }, + { 0x4CC8, 75240 }, + { 0x4CC9, 75267 }, + { 0x4CCA, 75315 }, + { 0x4CCB, 75258 }, + { 0x4CCC, 75309 }, + { 0x4CCD, 75252 }, + { 0x4CCE, 75300 }, + { 0x4CCF, 75264 }, + { 0x4CD0, 75312 }, + { 0x4CD1, 75321 }, + { 0x4CD2, 75336 }, + { 0x4CD3, 75345 }, + { 0x4CD4, 75303 }, + { 0x4CD5, 75339 }, + { 0x4CD6, 75342 }, + { 0x4CD7, 75318 }, + { 0x4CD8, 75288 }, + { 0x4CD9, 75333 }, + { 0x4CDA, 75255 }, + { 0x4CDB, 75306 }, + { 0x4CDC, 75276 }, + { 0x4CDD, 75279 }, + { 0x4CDE, 75324 }, + { 0x4CDF, 75249 }, + { 0x4CE0, 75297 }, + { 0x4CE1, 75273 }, + { 0x4CE2, 75294 }, + { 0x4CE3, 75282 }, + { 0x4CE4, 75270 }, + { 0x4CE5, 75291 }, + { 0x4CE6, 75285 }, + { 0x4CE7, 75261 }, + { 0x4CE8, 75330 }, + { 0x4CE9, 75327 }, + { 0x4CEA, 75348 }, + { 0x4CEB, 125441 }, + { 0x4CEC, 125456 }, + { 0x4CED, 125447 }, + { 0x4CEE, 125480 }, + { 0x4CEF, 125453 }, + { 0x4CF0, 125510 }, + { 0x4CF1, 125444 }, + { 0x4CF2, 125459 }, + { 0x4CF3, 125450 }, + { 0x4CF4, 125462 }, + { 0x4CF5, 125486 }, + { 0x4CF6, 125546 }, + { 0x4CF7, 125474 }, + { 0x4CF8, 125534 }, + { 0x4CF9, 125537 }, + { 0x4CFA, 125549 }, + { 0x4CFB, 125468 }, + { 0x4CFC, 125525 }, + { 0x4CFD, 125483 }, + { 0x4CFE, 125543 }, + { 0x4CFF, 125540 }, + { 0x4D00, 125555 }, + { 0x4D01, 125570 }, + { 0x4D02, 125579 }, + { 0x4D03, 125528 }, + { 0x4D04, 125573 }, + { 0x4D05, 125561 }, + { 0x4D06, 125576 }, + { 0x4D07, 125552 }, + { 0x4D08, 125507 }, + { 0x4D09, 125567 }, + { 0x4D0A, 125471 }, + { 0x4D0B, 125531 }, + { 0x4D0C, 125495 }, + { 0x4D0D, 125498 }, + { 0x4D0E, 125558 }, + { 0x4D0F, 125465 }, + { 0x4D10, 125519 }, + { 0x4D11, 125522 }, + { 0x4D12, 125492 }, + { 0x4D13, 125516 }, + { 0x4D14, 125501 }, + { 0x4D15, 125489 }, + { 0x4D16, 125513 }, + { 0x4D17, 125564 }, + { 0x4D18, 125504 }, + { 0x4D19, 125477 }, + { 0x4D1A, 125372 }, + { 0x4D1B, 125421 }, + { 0x4D1C, 125409 }, + { 0x4D1D, 125433 }, + { 0x4D1E, 125417 }, + { 0x4D1F, 125437 }, + { 0x4D20, 125405 }, + { 0x4D21, 125425 }, + { 0x4D22, 125413 }, + { 0x4D23, 125429 }, + { 0x4D24, 125366 }, + { 0x4D25, 125369 }, + { 0x4D26, 125393 }, + { 0x4D27, 125375 }, + { 0x4D28, 125381 }, + { 0x4D29, 125402 }, + { 0x4D2A, 125387 }, + { 0x4D2B, 125384 }, + { 0x4D2C, 125378 }, + { 0x4D2D, 125399 }, + { 0x4D2E, 125396 }, + { 0x4D2F, 125390 }, + { 0x4D30, 73318 }, + { 0x4D31, 73323 }, + { 0x4D32, 73312 }, + { 0x4D33, 73309 }, + { 0x4D34, 73382 }, + { 0x4D35, 73391 }, + { 0x4D36, 73385 }, + { 0x4D37, 73418 }, + { 0x4D38, 73388 }, + { 0x4D39, 73451 }, + { 0x4D3A, 73527 }, + { 0x4D3B, 73523 }, + { 0x4D3C, 73409 }, + { 0x4D3D, 73394 }, + { 0x4D3E, 73436 }, + { 0x4D3F, 73397 }, + { 0x4D40, 73424 }, + { 0x4D41, 73478 }, + { 0x4D42, 73412 }, + { 0x4D43, 73472 }, + { 0x4D44, 73484 }, + { 0x4D45, 73403 }, + { 0x4D46, 73463 }, + { 0x4D47, 73421 }, + { 0x4D48, 73475 }, + { 0x4D49, 73490 }, + { 0x4D4A, 73505 }, + { 0x4D4B, 73511 }, + { 0x4D4C, 73466 }, + { 0x4D4D, 73508 }, + { 0x4D4E, 73487 }, + { 0x4D4F, 73448 }, + { 0x4D50, 73502 }, + { 0x4D51, 73406 }, + { 0x4D52, 73469 }, + { 0x4D53, 73433 }, + { 0x4D54, 73439 }, + { 0x4D55, 73493 }, + { 0x4D56, 73400 }, + { 0x4D57, 73460 }, + { 0x4D58, 73430 }, + { 0x4D59, 73457 }, + { 0x4D5A, 73442 }, + { 0x4D5B, 73427 }, + { 0x4D5C, 73481 }, + { 0x4D5D, 73454 }, + { 0x4D5E, 73496 }, + { 0x4D5F, 73499 }, + { 0x4D60, 73445 }, + { 0x4D61, 73415 }, + { 0x4D62, 116457 }, + { 0x4D63, 73300 }, + { 0x4D64, 73315 }, + { 0x4D65, 73334 }, + { 0x4D66, 73326 }, + { 0x4D67, 73350 }, + { 0x4D68, 73330 }, + { 0x4D69, 73358 }, + { 0x4D6A, 73367 }, + { 0x4D6B, 73377 }, + { 0x4D6C, 73346 }, + { 0x4D6D, 73338 }, + { 0x4D6E, 73354 }, + { 0x4D6F, 73342 }, + { 0x4D70, 73306 }, + { 0x4D71, 73298 }, + { 0x4D72, 73294 }, + { 0x4D73, 73303 }, + { 0x4D74, 73519 }, + { 0x4D75, 73514 }, + { 0x4D76, 73535 }, + { 0x4D77, 73531 }, + { 0x4D78, 73362 }, + { 0x4D79, 73372 }, + { 0x4D7A, 117156 }, + { 0x4D7B, 117136 }, + { 0x4D7C, 117144 }, + { 0x4D7D, 117160 }, + { 0x4D7E, 117152 }, + { 0x4D7F, 117148 }, + { 0x4D80, 117140 }, + { 0x4D81, 117164 }, + { 0x4D82, 117168 }, + { 0x4D83, 117172 }, + { 0x4D84, 117180 }, + { 0x4D85, 117176 }, + { 0x4D86, 144644 }, + { 0x4D87, 144653 }, + { 0x4D88, 144647 }, + { 0x4D89, 144680 }, + { 0x4D8A, 144650 }, + { 0x4D8B, 144713 }, + { 0x4D8C, 144786 }, + { 0x4D8D, 144794 }, + { 0x4D8E, 144782 }, + { 0x4D8F, 144790 }, + { 0x4D90, 144671 }, + { 0x4D91, 144656 }, + { 0x4D92, 144698 }, + { 0x4D93, 144659 }, + { 0x4D94, 144686 }, + { 0x4D95, 144740 }, + { 0x4D96, 144674 }, + { 0x4D97, 144734 }, + { 0x4D98, 144746 }, + { 0x4D99, 144665 }, + { 0x4D9A, 144725 }, + { 0x4D9B, 144683 }, + { 0x4D9C, 144737 }, + { 0x4D9D, 144752 }, + { 0x4D9E, 144770 }, + { 0x4D9F, 144779 }, + { 0x4DA0, 144728 }, + { 0x4DA1, 144773 }, + { 0x4DA2, 144749 }, + { 0x4DA3, 144710 }, + { 0x4DA4, 144767 }, + { 0x4DA5, 144668 }, + { 0x4DA6, 144731 }, + { 0x4DA7, 144695 }, + { 0x4DA8, 144701 }, + { 0x4DA9, 144755 }, + { 0x4DAA, 144662 }, + { 0x4DAB, 144722 }, + { 0x4DAC, 144692 }, + { 0x4DAD, 144719 }, + { 0x4DAE, 144704 }, + { 0x4DAF, 144689 }, + { 0x4DB0, 144716 }, + { 0x4DB1, 144761 }, + { 0x4DB2, 144764 }, + { 0x4DB3, 144707 }, + { 0x4DB4, 144677 }, + { 0x4DB5, 144743 }, + { 0x4DB6, 144758 }, + { 0x4DB7, 144776 }, + { 0x4DB8, 144570 }, + { 0x4DB9, 144593 }, + { 0x4DBA, 144585 }, + { 0x4DBB, 144609 }, + { 0x4DBC, 144589 }, + { 0x4DBD, 144617 }, + { 0x4DBE, 144626 }, + { 0x4DBF, 144636 }, + { 0x4DC0, 144621 }, + { 0x4DC1, 144631 }, + { 0x4DC2, 144605 }, + { 0x4DC3, 144597 }, + { 0x4DC4, 144613 }, + { 0x4DC5, 144601 }, + { 0x4DC6, 144538 }, + { 0x4DC7, 144553 }, + { 0x4DC8, 144567 }, + { 0x4DC9, 144564 }, + { 0x4DCA, 144561 }, + { 0x4DCB, 144557 }, + { 0x4DCC, 144798 }, + { 0x4DCD, 144575 }, + { 0x4DCE, 144800 }, + { 0x4DCF, 144546 }, + { 0x4DD0, 144573 }, + { 0x4DD1, 144641 }, + { 0x4DD2, 144542 }, + { 0x4DD3, 144549 }, + { 0x4DD4, 144577 }, + { 0x4DD5, 144581 }, + { 0x4DD6, 16335 }, + { 0x4DD7, 16350 }, + { 0x4DD8, 16341 }, + { 0x4DD9, 16374 }, + { 0x4DDA, 16347 }, + { 0x4DDB, 16404 }, + { 0x4DDC, 16490 }, + { 0x4DDD, 16498 }, + { 0x4DDE, 16486 }, + { 0x4DDF, 16494 }, + { 0x4DE0, 16338 }, + { 0x4DE1, 16353 }, + { 0x4DE2, 16344 }, + { 0x4DE3, 16356 }, + { 0x4DE4, 16380 }, + { 0x4DE5, 16431 }, + { 0x4DE6, 16368 }, + { 0x4DE7, 16425 }, + { 0x4DE8, 16440 }, + { 0x4DE9, 16473 }, + { 0x4DEA, 16362 }, + { 0x4DEB, 16416 }, + { 0x4DEC, 16377 }, + { 0x4DED, 16428 }, + { 0x4DEE, 16449 }, + { 0x4DEF, 16476 }, + { 0x4DF0, 16467 }, + { 0x4DF1, 16479 }, + { 0x4DF2, 16419 }, + { 0x4DF3, 16470 }, + { 0x4DF4, 16446 }, + { 0x4DF5, 16401 }, + { 0x4DF6, 16464 }, + { 0x4DF7, 16365 }, + { 0x4DF8, 16422 }, + { 0x4DF9, 16389 }, + { 0x4DFA, 16443 }, + { 0x4DFB, 16392 }, + { 0x4DFC, 16452 }, + { 0x4DFD, 16359 }, + { 0x4DFE, 16413 }, + { 0x4DFF, 16386 }, + { 0x4E00, 16437 }, + { 0x4E01, 16410 }, + { 0x4E02, 16395 }, + { 0x4E03, 16455 }, + { 0x4E04, 16383 }, + { 0x4E05, 16434 }, + { 0x4E06, 16407 }, + { 0x4E07, 16458 }, + { 0x4E08, 16461 }, + { 0x4E09, 16398 }, + { 0x4E0A, 16371 }, + { 0x4E0B, 16289 }, + { 0x4E0C, 16277 }, + { 0x4E0D, 16301 }, + { 0x4E0E, 16285 }, + { 0x4E0F, 16305 }, + { 0x4E10, 16314 }, + { 0x4E11, 16324 }, + { 0x4E12, 16309 }, + { 0x4E13, 16319 }, + { 0x4E14, 16273 }, + { 0x4E15, 16293 }, + { 0x4E16, 16281 }, + { 0x4E17, 16297 }, + { 0x4E18, 16218 }, + { 0x4E19, 16230 }, + { 0x4E1A, 16224 }, + { 0x4E1B, 16221 }, + { 0x4E1C, 16215 }, + { 0x4E1D, 16227 }, + { 0x4E1E, 16211 }, + { 0x4E1F, 16206 }, + { 0x4E20, 16505 }, + { 0x4E21, 16241 }, + { 0x4E22, 16332 }, + { 0x4E23, 16239 }, + { 0x4E24, 16208 }, + { 0x4E25, 16513 }, + { 0x4E26, 16261 }, + { 0x4E27, 16243 }, + { 0x4E28, 16249 }, + { 0x4E29, 16270 }, + { 0x4E2A, 16255 }, + { 0x4E2B, 16252 }, + { 0x4E2C, 16246 }, + { 0x4E2D, 16267 }, + { 0x4E2E, 16264 }, + { 0x4E2F, 16258 }, + { 0x4E30, 16329 }, + { 0x4E31, 16510 }, + { 0x4E32, 16507 }, + { 0x4E33, 16502 }, + { 0x4E34, 16482 }, + { 0x4E35, 16233 }, + { 0x4E36, 16236 }, + { 0x4E37, 82300 }, + { 0x4E38, 82418 }, + { 0x4E39, 82433 }, + { 0x4E3A, 82424 }, + { 0x4E3B, 82457 }, + { 0x4E3C, 82430 }, + { 0x4E3D, 82487 }, + { 0x4E3E, 82551 }, + { 0x4E3F, 82559 }, + { 0x4E40, 82547 }, + { 0x4E41, 82555 }, + { 0x4E42, 82421 }, + { 0x4E43, 82436 }, + { 0x4E44, 82427 }, + { 0x4E45, 82439 }, + { 0x4E46, 82463 }, + { 0x4E47, 82514 }, + { 0x4E48, 82451 }, + { 0x4E49, 82508 }, + { 0x4E4A, 82517 }, + { 0x4E4B, 82445 }, + { 0x4E4C, 82499 }, + { 0x4E4D, 82460 }, + { 0x4E4E, 82511 }, + { 0x4E4F, 82523 }, + { 0x4E50, 82538 }, + { 0x4E51, 82544 }, + { 0x4E52, 82502 }, + { 0x4E53, 82541 }, + { 0x4E54, 82520 }, + { 0x4E55, 82484 }, + { 0x4E56, 82535 }, + { 0x4E57, 82448 }, + { 0x4E58, 82505 }, + { 0x4E59, 82472 }, + { 0x4E5A, 82475 }, + { 0x4E5B, 82526 }, + { 0x4E5C, 82442 }, + { 0x4E5D, 82496 }, + { 0x4E5E, 82469 }, + { 0x4E5F, 82493 }, + { 0x4E60, 82478 }, + { 0x4E61, 82466 }, + { 0x4E62, 82490 }, + { 0x4E63, 82529 }, + { 0x4E64, 82532 }, + { 0x4E65, 82481 }, + { 0x4E66, 82454 }, + { 0x4E67, 82368 }, + { 0x4E68, 82356 }, + { 0x4E69, 82380 }, + { 0x4E6A, 82364 }, + { 0x4E6B, 82384 }, + { 0x4E6C, 82403 }, + { 0x4E6D, 82413 }, + { 0x4E6E, 82398 }, + { 0x4E6F, 82408 }, + { 0x4E70, 82352 }, + { 0x4E71, 82388 }, + { 0x4E72, 82372 }, + { 0x4E73, 82360 }, + { 0x4E74, 82393 }, + { 0x4E75, 82376 }, + { 0x4E76, 82317 }, + { 0x4E77, 82311 }, + { 0x4E78, 82308 }, + { 0x4E79, 82305 }, + { 0x4E7A, 82302 }, + { 0x4E7B, 82314 }, + { 0x4E7C, 82350 }, + { 0x4E7D, 82563 }, + { 0x4E7E, 82298 }, + { 0x4E7F, 82338 }, + { 0x4E80, 82320 }, + { 0x4E81, 82326 }, + { 0x4E82, 82347 }, + { 0x4E83, 82332 }, + { 0x4E84, 82329 }, + { 0x4E85, 82323 }, + { 0x4E86, 82344 }, + { 0x4E87, 82341 }, + { 0x4E88, 82335 }, + { 0x4E89, 79325 }, + { 0x4E8A, 79340 }, + { 0x4E8B, 79331 }, + { 0x4E8C, 79364 }, + { 0x4E8D, 79337 }, + { 0x4E8E, 79394 }, + { 0x4E8F, 79458 }, + { 0x4E90, 79466 }, + { 0x4E91, 79454 }, + { 0x4E92, 79462 }, + { 0x4E93, 79328 }, + { 0x4E94, 79343 }, + { 0x4E95, 79334 }, + { 0x4E96, 79346 }, + { 0x4E97, 79370 }, + { 0x4E98, 79421 }, + { 0x4E99, 79358 }, + { 0x4E9A, 79415 }, + { 0x4E9B, 79424 }, + { 0x4E9C, 79352 }, + { 0x4E9D, 79406 }, + { 0x4E9E, 79367 }, + { 0x4E9F, 79418 }, + { 0x4EA0, 79430 }, + { 0x4EA1, 79445 }, + { 0x4EA2, 79451 }, + { 0x4EA3, 79409 }, + { 0x4EA4, 79448 }, + { 0x4EA5, 79427 }, + { 0x4EA6, 79391 }, + { 0x4EA7, 79442 }, + { 0x4EA8, 79355 }, + { 0x4EA9, 79412 }, + { 0x4EAA, 79379 }, + { 0x4EAB, 79382 }, + { 0x4EAC, 79433 }, + { 0x4EAD, 79349 }, + { 0x4EAE, 79403 }, + { 0x4EAF, 79376 }, + { 0x4EB0, 79400 }, + { 0x4EB1, 79385 }, + { 0x4EB2, 79373 }, + { 0x4EB3, 79397 }, + { 0x4EB4, 79436 }, + { 0x4EB5, 79439 }, + { 0x4EB6, 79388 }, + { 0x4EB7, 79361 }, + { 0x4EB8, 79282 }, + { 0x4EB9, 79270 }, + { 0x4EBA, 79294 }, + { 0x4EBB, 79278 }, + { 0x4EBC, 79298 }, + { 0x4EBD, 79302 }, + { 0x4EBE, 79307 }, + { 0x4EBF, 79266 }, + { 0x4EC0, 79286 }, + { 0x4EC1, 79274 }, + { 0x4EC2, 79290 }, + { 0x4EC3, 79261 }, + { 0x4EC4, 79258 }, + { 0x4EC5, 79255 }, + { 0x4EC6, 79249 }, + { 0x4EC7, 79246 }, + { 0x4EC8, 79252 }, + { 0x4EC9, 79264 }, + { 0x4ECA, 79322 }, + { 0x4ECB, 79593 }, + { 0x4ECC, 79590 }, + { 0x4ECD, 79596 }, + { 0x4ECE, 79599 }, + { 0x4ECF, 79602 }, + { 0x4ED0, 79241 }, + { 0x4ED1, 79558 }, + { 0x4ED2, 79550 }, + { 0x4ED3, 79507 }, + { 0x4ED4, 79489 }, + { 0x4ED5, 79498 }, + { 0x4ED6, 79578 }, + { 0x4ED7, 79583 }, + { 0x4ED8, 79515 }, + { 0x4ED9, 79521 }, + { 0x4EDA, 79572 }, + { 0x4EDB, 79566 }, + { 0x4EDC, 79543 }, + { 0x4EDD, 79527 }, + { 0x4EDE, 79535 }, + { 0x4EDF, 79484 }, + { 0x4EE0, 79474 }, + { 0x4EE1, 79479 }, + { 0x4EE2, 79470 }, + { 0x4EE3, 79312 }, + { 0x4EE4, 79317 }, + { 0x4EE5, 16031 }, + { 0x4EE6, 16046 }, + { 0x4EE7, 16037 }, + { 0x4EE8, 16070 }, + { 0x4EE9, 16043 }, + { 0x4EEA, 16100 }, + { 0x4EEB, 16167 }, + { 0x4EEC, 16175 }, + { 0x4EED, 16163 }, + { 0x4EEE, 16171 }, + { 0x4EEF, 16034 }, + { 0x4EF0, 16049 }, + { 0x4EF1, 16040 }, + { 0x4EF2, 16052 }, + { 0x4EF3, 16076 }, + { 0x4EF4, 16127 }, + { 0x4EF5, 16064 }, + { 0x4EF6, 16121 }, + { 0x4EF7, 16133 }, + { 0x4EF8, 16058 }, + { 0x4EF9, 16112 }, + { 0x4EFA, 16073 }, + { 0x4EFB, 16124 }, + { 0x4EFC, 16139 }, + { 0x4EFD, 16154 }, + { 0x4EFE, 16160 }, + { 0x4EFF, 16115 }, + { 0x4F00, 16157 }, + { 0x4F01, 16136 }, + { 0x4F02, 16097 }, + { 0x4F03, 16151 }, + { 0x4F04, 16061 }, + { 0x4F05, 16118 }, + { 0x4F06, 16085 }, + { 0x4F07, 16088 }, + { 0x4F08, 16142 }, + { 0x4F09, 16055 }, + { 0x4F0A, 16109 }, + { 0x4F0B, 16082 }, + { 0x4F0C, 16106 }, + { 0x4F0D, 16091 }, + { 0x4F0E, 16079 }, + { 0x4F0F, 16103 }, + { 0x4F10, 16145 }, + { 0x4F11, 16148 }, + { 0x4F12, 16094 }, + { 0x4F13, 16067 }, + { 0x4F14, 16130 }, + { 0x4F15, 15988 }, + { 0x4F16, 15976 }, + { 0x4F17, 16000 }, + { 0x4F18, 15984 }, + { 0x4F19, 16004 }, + { 0x4F1A, 16013 }, + { 0x4F1B, 16023 }, + { 0x4F1C, 16008 }, + { 0x4F1D, 16018 }, + { 0x4F1E, 15972 }, + { 0x4F1F, 15992 }, + { 0x4F20, 15980 }, + { 0x4F21, 15996 }, + { 0x4F22, 15934 }, + { 0x4F23, 15931 }, + { 0x4F24, 15928 }, + { 0x4F25, 15937 }, + { 0x4F26, 15940 }, + { 0x4F27, 16028 }, + { 0x4F28, 16179 }, + { 0x4F29, 15925 }, + { 0x4F2A, 15960 }, + { 0x4F2B, 15942 }, + { 0x4F2C, 15948 }, + { 0x4F2D, 15969 }, + { 0x4F2E, 15954 }, + { 0x4F2F, 15951 }, + { 0x4F30, 15945 }, + { 0x4F31, 15966 }, + { 0x4F32, 15963 }, + { 0x4F33, 15957 }, + { 0x4F34, 126725 }, + { 0x4F35, 127368 }, + { 0x4F36, 126780 }, + { 0x4F37, 127356 }, + { 0x4F38, 126720 }, + { 0x4F39, 127377 }, + { 0x4F3A, 127371 }, + { 0x4F3B, 127384 }, + { 0x4F3C, 127387 }, + { 0x4F3D, 126763 }, + { 0x4F3E, 126772 }, + { 0x4F3F, 126766 }, + { 0x4F40, 127361 }, + { 0x4F41, 41756 }, + { 0x4F42, 41771 }, + { 0x4F43, 41762 }, + { 0x4F44, 41795 }, + { 0x4F45, 41768 }, + { 0x4F46, 41825 }, + { 0x4F47, 41759 }, + { 0x4F48, 41774 }, + { 0x4F49, 41765 }, + { 0x4F4A, 41777 }, + { 0x4F4B, 41801 }, + { 0x4F4C, 41852 }, + { 0x4F4D, 41789 }, + { 0x4F4E, 41846 }, + { 0x4F4F, 41855 }, + { 0x4F50, 41783 }, + { 0x4F51, 41837 }, + { 0x4F52, 41798 }, + { 0x4F53, 41849 }, + { 0x4F54, 41861 }, + { 0x4F55, 41876 }, + { 0x4F56, 41882 }, + { 0x4F57, 41840 }, + { 0x4F58, 41879 }, + { 0x4F59, 41858 }, + { 0x4F5A, 41822 }, + { 0x4F5B, 41873 }, + { 0x4F5C, 41786 }, + { 0x4F5D, 41843 }, + { 0x4F5E, 41810 }, + { 0x4F5F, 41813 }, + { 0x4F60, 41864 }, + { 0x4F61, 41780 }, + { 0x4F62, 41834 }, + { 0x4F63, 41807 }, + { 0x4F64, 41831 }, + { 0x4F65, 41816 }, + { 0x4F66, 41804 }, + { 0x4F67, 41828 }, + { 0x4F68, 41870 }, + { 0x4F69, 41819 }, + { 0x4F6A, 41792 }, + { 0x4F6B, 41867 }, + { 0x4F6C, 41687 }, + { 0x4F6D, 41684 }, + { 0x4F6E, 41736 }, + { 0x4F6F, 41724 }, + { 0x4F70, 41748 }, + { 0x4F71, 41732 }, + { 0x4F72, 41752 }, + { 0x4F73, 41720 }, + { 0x4F74, 41740 }, + { 0x4F75, 41728 }, + { 0x4F76, 41744 }, + { 0x4F77, 41681 }, + { 0x4F78, 41678 }, + { 0x4F79, 41885 }, + { 0x4F7A, 41889 }, + { 0x4F7B, 41708 }, + { 0x4F7C, 41690 }, + { 0x4F7D, 41696 }, + { 0x4F7E, 41717 }, + { 0x4F7F, 41702 }, + { 0x4F80, 41699 }, + { 0x4F81, 41693 }, + { 0x4F82, 41714 }, + { 0x4F83, 41711 }, + { 0x4F84, 41705 }, + { 0x4F85, 76399 }, + { 0x4F86, 76375 }, + { 0x4F87, 76383 }, + { 0x4F88, 76411 }, + { 0x4F89, 76391 }, + { 0x4F8A, 76387 }, + { 0x4F8B, 76379 }, + { 0x4F8C, 76407 }, + { 0x4F8D, 76403 }, + { 0x4F8E, 76395 }, + { 0x4F8F, 77323 }, + { 0x4F90, 77287 }, + { 0x4F91, 77299 }, + { 0x4F92, 77341 }, + { 0x4F93, 77311 }, + { 0x4F94, 77305 }, + { 0x4F95, 77293 }, + { 0x4F96, 77335 }, + { 0x4F97, 77329 }, + { 0x4F98, 77317 }, + { 0x4F99, 13302 }, + { 0x4F9A, 13344 }, + { 0x4F9B, 13350 }, + { 0x4F9C, 13311 }, + { 0x4F9D, 13323 }, + { 0x4F9E, 13382 }, + { 0x4F9F, 13314 }, + { 0x4FA0, 13359 }, + { 0x4FA1, 13284 }, + { 0x4FA2, 13308 }, + { 0x4FA3, 13299 }, + { 0x4FA4, 13329 }, + { 0x4FA5, 13362 }, + { 0x4FA6, 13317 }, + { 0x4FA7, 13305 }, + { 0x4FA8, 13320 }, + { 0x4FA9, 13356 }, + { 0x4FAA, 13296 }, + { 0x4FAB, 13281 }, + { 0x4FAC, 13290 }, + { 0x4FAD, 13335 }, + { 0x4FAE, 13293 }, + { 0x4FAF, 13378 }, + { 0x4FB0, 13338 }, + { 0x4FB1, 13326 }, + { 0x4FB2, 13341 }, + { 0x4FB3, 13374 }, + { 0x4FB4, 13395 }, + { 0x4FB5, 13400 }, + { 0x4FB6, 13405 }, + { 0x4FB7, 13237 }, + { 0x4FB8, 13257 }, + { 0x4FB9, 13245 }, + { 0x4FBA, 13273 }, + { 0x4FBB, 13253 }, + { 0x4FBC, 13277 }, + { 0x4FBD, 13241 }, + { 0x4FBE, 13269 }, + { 0x4FBF, 13249 }, + { 0x4FC0, 13261 }, + { 0x4FC1, 13265 }, + { 0x4FC2, 13201 }, + { 0x4FC3, 13225 }, + { 0x4FC4, 13207 }, + { 0x4FC5, 13213 }, + { 0x4FC6, 13234 }, + { 0x4FC7, 13219 }, + { 0x4FC8, 13216 }, + { 0x4FC9, 13210 }, + { 0x4FCA, 13231 }, + { 0x4FCB, 13228 }, + { 0x4FCC, 13222 }, + { 0x4FCD, 13386 }, + { 0x4FCE, 13389 }, + { 0x4FCF, 13197 }, + { 0x4FD0, 13204 }, + { 0x4FD1, 13194 }, + { 0x4FD2, 13392 }, + { 0x4FD3, 13287 }, + { 0x4FD4, 13365 }, + { 0x4FD5, 13371 }, + { 0x4FD6, 13332 }, + { 0x4FD7, 13368 }, + { 0x4FD8, 13353 }, + { 0x4FD9, 13347 }, + { 0x4FDA, 23009 }, + { 0x4FDB, 23024 }, + { 0x4FDC, 23015 }, + { 0x4FDD, 23048 }, + { 0x4FDE, 23021 }, + { 0x4FDF, 23078 }, + { 0x4FE0, 23012 }, + { 0x4FE1, 23027 }, + { 0x4FE2, 23018 }, + { 0x4FE3, 23030 }, + { 0x4FE4, 23054 }, + { 0x4FE5, 23105 }, + { 0x4FE6, 23042 }, + { 0x4FE7, 23099 }, + { 0x4FE8, 23108 }, + { 0x4FE9, 23036 }, + { 0x4FEA, 23090 }, + { 0x4FEB, 23051 }, + { 0x4FEC, 23102 }, + { 0x4FED, 23114 }, + { 0x4FEE, 23132 }, + { 0x4FEF, 23138 }, + { 0x4FF0, 23093 }, + { 0x4FF1, 23135 }, + { 0x4FF2, 23111 }, + { 0x4FF3, 23075 }, + { 0x4FF4, 23129 }, + { 0x4FF5, 23039 }, + { 0x4FF6, 23096 }, + { 0x4FF7, 23063 }, + { 0x4FF8, 23066 }, + { 0x4FF9, 23117 }, + { 0x4FFA, 23033 }, + { 0x4FFB, 23087 }, + { 0x4FFC, 23060 }, + { 0x4FFD, 23084 }, + { 0x4FFE, 23069 }, + { 0x4FFF, 23057 }, + { 0x5000, 23081 }, + { 0x5001, 23123 }, + { 0x5002, 23126 }, + { 0x5003, 23072 }, + { 0x5004, 23045 }, + { 0x5005, 23120 }, + { 0x5006, 22979 }, + { 0x5007, 22967 }, + { 0x5008, 22991 }, + { 0x5009, 22975 }, + { 0x500A, 22995 }, + { 0x500B, 22999 }, + { 0x500C, 23004 }, + { 0x500D, 22963 }, + { 0x500E, 22983 }, + { 0x500F, 22971 }, + { 0x5010, 22987 }, + { 0x5011, 22960 }, + { 0x5012, 22957 }, + { 0x5013, 22954 }, + { 0x5014, 22951 }, + { 0x5015, 23141 }, + { 0x5016, 69658 }, + { 0x5017, 69518 }, + { 0x5018, 69583 }, + { 0x5019, 69598 }, + { 0x501A, 69588 }, + { 0x501B, 69593 }, + { 0x501C, 69558 }, + { 0x501D, 69578 }, + { 0x501E, 69523 }, + { 0x501F, 69528 }, + { 0x5020, 69603 }, + { 0x5021, 69553 }, + { 0x5022, 69563 }, + { 0x5023, 69613 }, + { 0x5024, 69638 }, + { 0x5025, 69573 }, + { 0x5026, 69608 }, + { 0x5027, 69623 }, + { 0x5028, 69633 }, + { 0x5029, 69663 }, + { 0x502A, 69548 }, + { 0x502B, 69538 }, + { 0x502C, 69533 }, + { 0x502D, 69543 }, + { 0x502E, 69568 }, + { 0x502F, 69643 }, + { 0x5030, 69648 }, + { 0x5031, 69653 }, + { 0x5032, 69618 }, + { 0x5033, 69668 }, + { 0x5034, 69628 }, + { 0x5035, 69673 }, + { 0x5036, 69462 }, + { 0x5037, 69322 }, + { 0x5038, 69387 }, + { 0x5039, 69402 }, + { 0x503A, 69392 }, + { 0x503B, 69397 }, + { 0x503C, 69362 }, + { 0x503D, 69382 }, + { 0x503E, 69327 }, + { 0x503F, 69332 }, + { 0x5040, 69407 }, + { 0x5041, 69357 }, + { 0x5042, 69367 }, + { 0x5043, 69417 }, + { 0x5044, 69442 }, + { 0x5045, 69377 }, + { 0x5046, 69412 }, + { 0x5047, 69427 }, + { 0x5048, 69437 }, + { 0x5049, 69467 }, + { 0x504A, 69352 }, + { 0x504B, 69342 }, + { 0x504C, 69337 }, + { 0x504D, 69347 }, + { 0x504E, 69372 }, + { 0x504F, 69447 }, + { 0x5050, 69452 }, + { 0x5051, 69457 }, + { 0x5052, 69422 }, + { 0x5053, 69472 }, + { 0x5054, 69432 }, + { 0x5055, 69477 }, + { 0x5056, 69306 }, + { 0x5057, 69282 }, + { 0x5058, 69290 }, + { 0x5059, 69318 }, + { 0x505A, 69298 }, + { 0x505B, 69294 }, + { 0x505C, 69286 }, + { 0x505D, 69314 }, + { 0x505E, 69310 }, + { 0x505F, 69302 }, + { 0x5060, 69482 }, + { 0x5061, 69510 }, + { 0x5062, 69506 }, + { 0x5063, 69490 }, + { 0x5064, 69486 }, + { 0x5065, 69494 }, + { 0x5066, 69514 }, + { 0x5067, 69498 }, + { 0x5068, 69502 }, + { 0x5069, 69279 }, + { 0x506A, 22759 }, + { 0x506B, 22779 }, + { 0x506C, 22767 }, + { 0x506D, 22803 }, + { 0x506E, 22775 }, + { 0x506F, 22843 }, + { 0x5070, 22763 }, + { 0x5071, 22771 }, + { 0x5072, 22811 }, + { 0x5073, 22879 }, + { 0x5074, 22795 }, + { 0x5075, 22875 }, + { 0x5076, 22887 }, + { 0x5077, 22787 }, + { 0x5078, 22863 }, + { 0x5079, 22807 }, + { 0x507A, 22895 }, + { 0x507B, 22915 }, + { 0x507C, 22867 }, + { 0x507D, 22923 }, + { 0x507E, 22891 }, + { 0x507F, 22839 }, + { 0x5080, 22911 }, + { 0x5081, 22791 }, + { 0x5082, 22871 }, + { 0x5083, 22823 }, + { 0x5084, 22827 }, + { 0x5085, 22899 }, + { 0x5086, 22783 }, + { 0x5087, 22859 }, + { 0x5088, 22819 }, + { 0x5089, 22851 }, + { 0x508A, 22919 }, + { 0x508B, 22831 }, + { 0x508C, 22815 }, + { 0x508D, 22847 }, + { 0x508E, 22903 }, + { 0x508F, 22907 }, + { 0x5090, 22835 }, + { 0x5091, 22799 }, + { 0x5092, 22883 }, + { 0x5093, 22855 }, + { 0x5094, 22735 }, + { 0x5095, 22720 }, + { 0x5096, 22745 }, + { 0x5097, 22730 }, + { 0x5098, 22750 }, + { 0x5099, 22715 }, + { 0x509A, 22740 }, + { 0x509B, 22725 }, + { 0x509C, 22667 }, + { 0x509D, 22671 }, + { 0x509E, 22663 }, + { 0x509F, 22935 }, + { 0x50A0, 22942 }, + { 0x50A1, 22931 }, + { 0x50A2, 22938 }, + { 0x50A3, 22927 }, + { 0x50A4, 22659 }, + { 0x50A5, 22755 }, + { 0x50A6, 22655 }, + { 0x50A7, 22649 }, + { 0x50A8, 22699 }, + { 0x50A9, 22675 }, + { 0x50AA, 22683 }, + { 0x50AB, 22711 }, + { 0x50AC, 22691 }, + { 0x50AD, 22687 }, + { 0x50AE, 22679 }, + { 0x50AF, 22707 }, + { 0x50B0, 22703 }, + { 0x50B1, 22695 }, + { 0x50B2, 134334 }, + { 0x50B3, 134349 }, + { 0x50B4, 134340 }, + { 0x50B5, 134373 }, + { 0x50B6, 134346 }, + { 0x50B7, 134403 }, + { 0x50B8, 134469 }, + { 0x50B9, 134473 }, + { 0x50BA, 134337 }, + { 0x50BB, 134352 }, + { 0x50BC, 134343 }, + { 0x50BD, 134355 }, + { 0x50BE, 134379 }, + { 0x50BF, 134430 }, + { 0x50C0, 134367 }, + { 0x50C1, 134424 }, + { 0x50C2, 134436 }, + { 0x50C3, 134361 }, + { 0x50C4, 134415 }, + { 0x50C5, 134376 }, + { 0x50C6, 134427 }, + { 0x50C7, 134442 }, + { 0x50C8, 134460 }, + { 0x50C9, 134466 }, + { 0x50CA, 134418 }, + { 0x50CB, 134463 }, + { 0x50CC, 134439 }, + { 0x50CD, 134400 }, + { 0x50CE, 134457 }, + { 0x50CF, 134364 }, + { 0x50D0, 134421 }, + { 0x50D1, 134388 }, + { 0x50D2, 134391 }, + { 0x50D3, 134445 }, + { 0x50D4, 134358 }, + { 0x50D5, 134412 }, + { 0x50D6, 134385 }, + { 0x50D7, 134409 }, + { 0x50D8, 134394 }, + { 0x50D9, 134382 }, + { 0x50DA, 134406 }, + { 0x50DB, 134451 }, + { 0x50DC, 134454 }, + { 0x50DD, 134397 }, + { 0x50DE, 134370 }, + { 0x50DF, 134433 }, + { 0x50E0, 134448 }, + { 0x50E1, 134299 }, + { 0x50E2, 134287 }, + { 0x50E3, 134311 }, + { 0x50E4, 134295 }, + { 0x50E5, 134315 }, + { 0x50E6, 134319 }, + { 0x50E7, 134324 }, + { 0x50E8, 134283 }, + { 0x50E9, 134303 }, + { 0x50EA, 134291 }, + { 0x50EB, 134307 }, + { 0x50EC, 134277 }, + { 0x50ED, 134274 }, + { 0x50EE, 134268 }, + { 0x50EF, 134280 }, + { 0x50F0, 134271 }, + { 0x50F1, 134477 }, + { 0x50F2, 134329 }, + { 0x50F3, 128920 }, + { 0x50F4, 128874 }, + { 0x50F5, 128904 }, + { 0x50F6, 128884 }, + { 0x50F7, 128869 }, + { 0x50F8, 128899 }, + { 0x50F9, 128879 }, + { 0x50FA, 128889 }, + { 0x50FB, 128894 }, + { 0x50FC, 128909 }, + { 0x50FD, 128915 }, + { 0x50FE, 128952 }, + { 0x50FF, 129020 }, + { 0x5100, 128940 }, + { 0x5101, 129016 }, + { 0x5102, 129024 }, + { 0x5103, 128932 }, + { 0x5104, 129000 }, + { 0x5105, 128948 }, + { 0x5106, 129032 }, + { 0x5107, 129056 }, + { 0x5108, 129080 }, + { 0x5109, 129004 }, + { 0x510A, 129064 }, + { 0x510B, 129028 }, + { 0x510C, 128980 }, + { 0x510D, 129048 }, + { 0x510E, 128936 }, + { 0x510F, 129008 }, + { 0x5110, 128964 }, + { 0x5111, 128968 }, + { 0x5112, 129036 }, + { 0x5113, 128928 }, + { 0x5114, 128996 }, + { 0x5115, 128960 }, + { 0x5116, 129052 }, + { 0x5117, 129076 }, + { 0x5118, 129012 }, + { 0x5119, 129068 }, + { 0x511A, 129060 }, + { 0x511B, 128992 }, + { 0x511C, 128924 }, + { 0x511D, 128988 }, + { 0x511E, 128972 }, + { 0x511F, 128956 }, + { 0x5120, 128984 }, + { 0x5121, 129040 }, + { 0x5122, 129044 }, + { 0x5123, 128976 }, + { 0x5124, 128944 }, + { 0x5125, 129072 }, + { 0x5126, 128864 }, + { 0x5127, 128842 }, + { 0x5128, 128854 }, + { 0x5129, 128858 }, + { 0x512A, 128836 }, + { 0x512B, 128850 }, + { 0x512C, 128846 }, + { 0x512D, 129129 }, + { 0x512E, 129124 }, + { 0x512F, 129114 }, + { 0x5130, 129109 }, + { 0x5131, 129119 }, + { 0x5132, 129095 }, + { 0x5133, 129084 }, + { 0x5134, 128827 }, + { 0x5135, 128823 }, + { 0x5136, 128831 }, + { 0x5137, 128818 }, + { 0x5138, 129100 }, + { 0x5139, 129089 }, + { 0x513A, 129106 }, + { 0x513B, 80521 }, + { 0x513C, 80479 }, + { 0x513D, 80503 }, + { 0x513E, 80487 }, + { 0x513F, 80475 }, + { 0x5140, 80483 }, + { 0x5141, 80499 }, + { 0x5142, 80491 }, + { 0x5143, 80495 }, + { 0x5144, 80512 }, + { 0x5145, 80507 }, + { 0x5146, 80517 }, + { 0x5147, 80545 }, + { 0x5148, 80599 }, + { 0x5149, 80536 }, + { 0x514A, 80593 }, + { 0x514B, 80602 }, + { 0x514C, 80530 }, + { 0x514D, 80581 }, + { 0x514E, 80542 }, + { 0x514F, 80596 }, + { 0x5150, 80608 }, + { 0x5151, 80626 }, + { 0x5152, 80641 }, + { 0x5153, 80584 }, + { 0x5154, 80632 }, + { 0x5155, 80605 }, + { 0x5156, 80566 }, + { 0x5157, 80620 }, + { 0x5158, 80533 }, + { 0x5159, 80587 }, + { 0x515A, 80554 }, + { 0x515B, 80557 }, + { 0x515C, 80611 }, + { 0x515D, 80527 }, + { 0x515E, 80578 }, + { 0x515F, 80551 }, + { 0x5160, 80623 }, + { 0x5161, 80638 }, + { 0x5162, 80590 }, + { 0x5163, 80629 }, + { 0x5164, 80575 }, + { 0x5165, 80524 }, + { 0x5166, 80572 }, + { 0x5167, 80560 }, + { 0x5168, 80548 }, + { 0x5169, 80569 }, + { 0x516A, 80614 }, + { 0x516B, 80617 }, + { 0x516C, 80563 }, + { 0x516D, 80539 }, + { 0x516E, 80635 }, + { 0x516F, 80409 }, + { 0x5170, 80412 }, + { 0x5171, 80659 }, + { 0x5172, 80655 }, + { 0x5173, 80667 }, + { 0x5174, 80663 }, + { 0x5175, 80425 }, + { 0x5176, 80430 }, + { 0x5177, 80465 }, + { 0x5178, 80420 }, + { 0x5179, 80445 }, + { 0x517A, 80415 }, + { 0x517B, 80440 }, + { 0x517C, 80450 }, + { 0x517D, 80435 }, + { 0x517E, 80470 }, + { 0x517F, 80455 }, + { 0x5180, 80460 }, + { 0x5181, 80406 }, + { 0x5182, 80403 }, + { 0x5183, 80652 }, + { 0x5184, 80650 }, + { 0x5185, 80396 }, + { 0x5186, 80390 }, + { 0x5187, 80399 }, + { 0x5188, 80393 }, + { 0x5189, 80380 }, + { 0x518A, 80371 }, + { 0x518B, 80364 }, + { 0x518C, 80644 }, + { 0x518D, 80647 }, + { 0x518E, 86332 }, + { 0x518F, 86344 }, + { 0x5190, 86336 }, + { 0x5191, 86348 }, + { 0x5192, 86328 }, + { 0x5193, 86340 }, + { 0x5194, 86356 }, + { 0x5195, 86368 }, + { 0x5196, 86360 }, + { 0x5197, 86372 }, + { 0x5198, 86352 }, + { 0x5199, 86364 }, + { 0x519A, 84777 }, + { 0x519B, 84780 }, + { 0x519C, 84783 }, + { 0x519D, 84774 }, + { 0x519E, 10259 }, + { 0x519F, 10239 }, + { 0x51A0, 10244 }, + { 0x51A1, 10249 }, + { 0x51A2, 10214 }, + { 0x51A3, 10289 }, + { 0x51A4, 10284 }, + { 0x51A5, 10304 }, + { 0x51A6, 10229 }, + { 0x51A7, 10224 }, + { 0x51A8, 10299 }, + { 0x51A9, 10269 }, + { 0x51AA, 10204 }, + { 0x51AB, 10209 }, + { 0x51AC, 10274 }, + { 0x51AD, 10314 }, + { 0x51AE, 10254 }, + { 0x51AF, 10309 }, + { 0x51B0, 10264 }, + { 0x51B1, 10219 }, + { 0x51B2, 10294 }, + { 0x51B3, 10179 }, + { 0x51B4, 10184 }, + { 0x51B5, 10189 }, + { 0x51B6, 10194 }, + { 0x51B7, 10199 }, + { 0x51B8, 10279 }, + { 0x51B9, 10234 }, + { 0x51BA, 10343 }, + { 0x51BB, 10319 }, + { 0x51BC, 10349 }, + { 0x51BD, 10331 }, + { 0x51BE, 10337 }, + { 0x51BF, 10325 }, + { 0x51C0, 10355 }, + { 0x51C1, 10367 }, + { 0x51C2, 10361 }, + { 0x51C3, 10378 }, + { 0x51C4, 10373 }, + { 0x51C5, 10421 }, + { 0x51C6, 10384 }, + { 0x51C7, 10391 }, + { 0x51C8, 10427 }, + { 0x51C9, 10402 }, + { 0x51CA, 10397 }, + { 0x51CB, 10408 }, + { 0x51CC, 10415 }, + { 0x51CD, 10451 }, + { 0x51CE, 10445 }, + { 0x51CF, 10456 }, + { 0x51D0, 10463 }, + { 0x51D1, 10474 }, + { 0x51D2, 10469 }, + { 0x51D3, 10434 }, + { 0x51D4, 10480 }, + { 0x51D5, 10487 }, + { 0x51D6, 10439 }, + { 0x51D7, 129794 }, + { 0x51D8, 129797 }, + { 0x51D9, 129810 }, + { 0x51DA, 129813 }, + { 0x51DB, 129858 }, + { 0x51DC, 129862 }, + { 0x51DD, 129842 }, + { 0x51DE, 129847 }, + { 0x51DF, 129875 }, + { 0x51E0, 129818 }, + { 0x51E1, 81222 }, + { 0x51E2, 81258 }, + { 0x51E3, 81198 }, + { 0x51E4, 81225 }, + { 0x51E5, 81216 }, + { 0x51E6, 81270 }, + { 0x51E7, 81207 }, + { 0x51E8, 81186 }, + { 0x51E9, 81237 }, + { 0x51EA, 81213 }, + { 0x51EB, 81201 }, + { 0x51EC, 81246 }, + { 0x51ED, 81240 }, + { 0x51EE, 81210 }, + { 0x51EF, 81195 }, + { 0x51F0, 81228 }, + { 0x51F1, 81279 }, + { 0x51F2, 81252 }, + { 0x51F3, 81282 }, + { 0x51F4, 81273 }, + { 0x51F5, 81219 }, + { 0x51F6, 81192 }, + { 0x51F7, 81189 }, + { 0x51F8, 81243 }, + { 0x51F9, 81264 }, + { 0x51FA, 81234 }, + { 0x51FB, 81231 }, + { 0x51FC, 81204 }, + { 0x51FD, 81255 }, + { 0x51FE, 81276 }, + { 0x51FF, 81261 }, + { 0x5200, 81267 }, + { 0x5201, 81249 }, + { 0x5202, 81153 }, + { 0x5203, 81174 }, + { 0x5204, 81156 }, + { 0x5205, 81162 }, + { 0x5206, 81183 }, + { 0x5207, 81168 }, + { 0x5208, 81165 }, + { 0x5209, 81159 }, + { 0x520A, 81180 }, + { 0x520B, 81177 }, + { 0x520C, 81171 }, + { 0x520D, 114495 }, + { 0x520E, 114510 }, + { 0x520F, 114501 }, + { 0x5210, 114534 }, + { 0x5211, 114507 }, + { 0x5212, 114564 }, + { 0x5213, 114628 }, + { 0x5214, 114632 }, + { 0x5215, 114624 }, + { 0x5216, 114498 }, + { 0x5217, 114513 }, + { 0x5218, 114504 }, + { 0x5219, 114516 }, + { 0x521A, 114540 }, + { 0x521B, 114591 }, + { 0x521C, 114528 }, + { 0x521D, 114585 }, + { 0x521E, 114594 }, + { 0x521F, 114522 }, + { 0x5220, 114576 }, + { 0x5221, 114537 }, + { 0x5222, 114588 }, + { 0x5223, 114600 }, + { 0x5224, 114615 }, + { 0x5225, 114621 }, + { 0x5226, 114579 }, + { 0x5227, 114618 }, + { 0x5228, 114597 }, + { 0x5229, 114561 }, + { 0x522A, 114612 }, + { 0x522B, 114525 }, + { 0x522C, 114582 }, + { 0x522D, 114549 }, + { 0x522E, 114552 }, + { 0x522F, 114603 }, + { 0x5230, 114519 }, + { 0x5231, 114573 }, + { 0x5232, 114546 }, + { 0x5233, 114570 }, + { 0x5234, 114555 }, + { 0x5235, 114543 }, + { 0x5236, 114567 }, + { 0x5237, 114606 }, + { 0x5238, 114609 }, + { 0x5239, 114558 }, + { 0x523A, 114531 }, + { 0x523B, 114457 }, + { 0x523C, 114445 }, + { 0x523D, 114469 }, + { 0x523E, 114453 }, + { 0x523F, 114473 }, + { 0x5240, 114482 }, + { 0x5241, 114487 }, + { 0x5242, 114477 }, + { 0x5243, 114441 }, + { 0x5244, 114461 }, + { 0x5245, 114449 }, + { 0x5246, 114465 }, + { 0x5247, 114403 }, + { 0x5248, 114397 }, + { 0x5249, 114394 }, + { 0x524A, 114391 }, + { 0x524B, 114400 }, + { 0x524C, 114409 }, + { 0x524D, 114492 }, + { 0x524E, 114406 }, + { 0x524F, 114385 }, + { 0x5250, 114388 }, + { 0x5251, 114429 }, + { 0x5252, 114411 }, + { 0x5253, 114417 }, + { 0x5254, 114438 }, + { 0x5255, 114423 }, + { 0x5256, 114420 }, + { 0x5257, 114414 }, + { 0x5258, 114435 }, + { 0x5259, 114432 }, + { 0x525A, 114426 }, + { 0x525B, 114636 }, + { 0x525C, 114645 }, + { 0x525D, 114672 }, + { 0x525E, 114651 }, + { 0x525F, 114648 }, + { 0x5260, 114639 }, + { 0x5261, 114666 }, + { 0x5262, 114657 }, + { 0x5263, 114654 }, + { 0x5264, 114642 }, + { 0x5265, 114684 }, + { 0x5266, 114681 }, + { 0x5267, 114663 }, + { 0x5268, 114660 }, + { 0x5269, 114669 }, + { 0x526A, 114687 }, + { 0x526B, 114675 }, + { 0x526C, 114678 }, + { 0x526D, 114690 }, + { 0x526E, 74676 }, + { 0x526F, 74679 }, + { 0x5270, 74732 }, + { 0x5271, 74771 }, + { 0x5272, 74723 }, + { 0x5273, 74774 }, + { 0x5274, 74717 }, + { 0x5275, 74765 }, + { 0x5276, 74729 }, + { 0x5277, 74777 }, + { 0x5278, 74753 }, + { 0x5279, 74786 }, + { 0x527A, 74720 }, + { 0x527B, 74741 }, + { 0x527C, 74744 }, + { 0x527D, 74780 }, + { 0x527E, 74714 }, + { 0x527F, 74738 }, + { 0x5280, 74789 }, + { 0x5281, 74795 }, + { 0x5282, 74768 }, + { 0x5283, 74756 }, + { 0x5284, 74792 }, + { 0x5285, 74762 }, + { 0x5286, 74711 }, + { 0x5287, 74759 }, + { 0x5288, 74747 }, + { 0x5289, 74735 }, + { 0x528A, 74783 }, + { 0x528B, 74750 }, + { 0x528C, 74726 }, + { 0x528D, 74708 }, + { 0x528E, 74826 }, + { 0x528F, 74878 }, + { 0x5290, 74814 }, + { 0x5291, 74882 }, + { 0x5292, 74806 }, + { 0x5293, 74870 }, + { 0x5294, 74822 }, + { 0x5295, 74886 }, + { 0x5296, 74854 }, + { 0x5297, 74898 }, + { 0x5298, 74810 }, + { 0x5299, 74838 }, + { 0x529A, 74842 }, + { 0x529B, 74890 }, + { 0x529C, 74802 }, + { 0x529D, 74834 }, + { 0x529E, 74902 }, + { 0x529F, 74910 }, + { 0x52A0, 74874 }, + { 0x52A1, 74858 }, + { 0x52A2, 74906 }, + { 0x52A3, 74866 }, + { 0x52A4, 74862 }, + { 0x52A5, 74846 }, + { 0x52A6, 74830 }, + { 0x52A7, 74894 }, + { 0x52A8, 74850 }, + { 0x52A9, 74818 }, + { 0x52AA, 74798 }, + { 0x52AB, 74704 }, + { 0x52AC, 74692 }, + { 0x52AD, 74700 }, + { 0x52AE, 74688 }, + { 0x52AF, 74696 }, + { 0x52B0, 74682 }, + { 0x52B1, 74685 }, + { 0x52B2, 75031 }, + { 0x52B3, 75051 }, + { 0x52B4, 75039 }, + { 0x52B5, 75083 }, + { 0x52B6, 75047 }, + { 0x52B7, 75123 }, + { 0x52B8, 75035 }, + { 0x52B9, 75055 }, + { 0x52BA, 75043 }, + { 0x52BB, 75059 }, + { 0x52BC, 75091 }, + { 0x52BD, 75159 }, + { 0x52BE, 75075 }, + { 0x52BF, 75151 }, + { 0x52C0, 75167 }, + { 0x52C1, 75067 }, + { 0x52C2, 75139 }, + { 0x52C3, 75087 }, + { 0x52C4, 75155 }, + { 0x52C5, 75175 }, + { 0x52C6, 75199 }, + { 0x52C7, 75215 }, + { 0x52C8, 75143 }, + { 0x52C9, 75203 }, + { 0x52CA, 75171 }, + { 0x52CB, 75119 }, + { 0x52CC, 75191 }, + { 0x52CD, 75071 }, + { 0x52CE, 75147 }, + { 0x52CF, 75103 }, + { 0x52D0, 75107 }, + { 0x52D1, 75179 }, + { 0x52D2, 75063 }, + { 0x52D3, 75135 }, + { 0x52D4, 75099 }, + { 0x52D5, 75131 }, + { 0x52D6, 75111 }, + { 0x52D7, 75095 }, + { 0x52D8, 75127 }, + { 0x52D9, 75183 }, + { 0x52DA, 75187 }, + { 0x52DB, 75115 }, + { 0x52DC, 75079 }, + { 0x52DD, 75163 }, + { 0x52DE, 75211 }, + { 0x52DF, 75207 }, + { 0x52E0, 75195 }, + { 0x52E1, 75000 }, + { 0x52E2, 74985 }, + { 0x52E3, 75015 }, + { 0x52E4, 74995 }, + { 0x52E5, 75020 }, + { 0x52E6, 75025 }, + { 0x52E7, 74980 }, + { 0x52E8, 75005 }, + { 0x52E9, 74990 }, + { 0x52EA, 75010 }, + { 0x52EB, 74933 }, + { 0x52EC, 74929 }, + { 0x52ED, 74917 }, + { 0x52EE, 74921 }, + { 0x52EF, 74925 }, + { 0x52F0, 75219 }, + { 0x52F1, 74977 }, + { 0x52F2, 75222 }, + { 0x52F3, 74961 }, + { 0x52F4, 74937 }, + { 0x52F5, 74945 }, + { 0x52F6, 74973 }, + { 0x52F7, 74953 }, + { 0x52F8, 74949 }, + { 0x52F9, 74941 }, + { 0x52FA, 74969 }, + { 0x52FB, 74965 }, + { 0x52FC, 74957 }, + { 0x52FD, 73639 }, + { 0x52FE, 73651 }, + { 0x52FF, 73643 }, + { 0x5300, 73687 }, + { 0x5301, 73647 }, + { 0x5302, 73731 }, + { 0x5303, 73675 }, + { 0x5304, 73655 }, + { 0x5305, 73711 }, + { 0x5306, 73659 }, + { 0x5307, 73739 }, + { 0x5308, 73735 }, + { 0x5309, 73663 }, + { 0x530A, 73743 }, + { 0x530B, 73703 }, + { 0x530C, 73695 }, + { 0x530D, 73767 }, + { 0x530E, 73727 }, + { 0x530F, 73783 }, + { 0x5310, 73699 }, + { 0x5311, 73679 }, + { 0x5312, 73759 }, + { 0x5313, 73671 }, + { 0x5314, 73755 }, + { 0x5315, 73707 }, + { 0x5316, 73667 }, + { 0x5317, 73747 }, + { 0x5318, 73787 }, + { 0x5319, 73795 }, + { 0x531A, 73771 }, + { 0x531B, 73691 }, + { 0x531C, 73763 }, + { 0x531D, 73751 }, + { 0x531E, 73791 }, + { 0x531F, 73775 }, + { 0x5320, 73715 }, + { 0x5321, 73779 }, + { 0x5322, 73683 }, + { 0x5323, 73719 }, + { 0x5324, 73723 }, + { 0x5325, 73604 }, + { 0x5326, 73594 }, + { 0x5327, 73624 }, + { 0x5328, 73599 }, + { 0x5329, 73634 }, + { 0x532A, 73619 }, + { 0x532B, 73609 }, + { 0x532C, 73629 }, + { 0x532D, 73614 }, + { 0x532E, 73550 }, + { 0x532F, 73546 }, + { 0x5330, 73799 }, + { 0x5331, 73543 }, + { 0x5332, 73578 }, + { 0x5333, 73554 }, + { 0x5334, 73562 }, + { 0x5335, 73590 }, + { 0x5336, 73570 }, + { 0x5337, 73566 }, + { 0x5338, 73558 }, + { 0x5339, 73586 }, + { 0x533A, 73582 }, + { 0x533B, 73574 }, + { 0x533C, 74548 }, + { 0x533D, 74542 }, + { 0x533E, 74578 }, + { 0x533F, 74560 }, + { 0x5340, 74533 }, + { 0x5341, 74554 }, + { 0x5342, 74569 }, + { 0x5343, 74539 }, + { 0x5344, 74557 }, + { 0x5345, 74536 }, + { 0x5346, 74545 }, + { 0x5347, 74581 }, + { 0x5348, 74575 }, + { 0x5349, 74563 }, + { 0x534A, 74551 }, + { 0x534B, 74572 }, + { 0x534C, 74566 }, + { 0x534D, 74530 }, + { 0x534E, 74512 }, + { 0x534F, 74518 }, + { 0x5350, 74526 }, + { 0x5351, 74514 }, + { 0x5352, 74522 }, + { 0x5353, 74584 }, + { 0x5354, 74508 }, + { 0x5355, 14228 }, + { 0x5356, 14225 }, + { 0x5357, 14216 }, + { 0x5358, 14222 }, + { 0x5359, 14308 }, + { 0x535A, 14323 }, + { 0x535B, 14314 }, + { 0x535C, 14344 }, + { 0x535D, 14320 }, + { 0x535E, 14374 }, + { 0x535F, 14441 }, + { 0x5360, 14449 }, + { 0x5361, 14437 }, + { 0x5362, 14445 }, + { 0x5363, 14311 }, + { 0x5364, 14326 }, + { 0x5365, 14317 }, + { 0x5366, 14350 }, + { 0x5367, 14401 }, + { 0x5368, 14338 }, + { 0x5369, 14395 }, + { 0x536A, 14404 }, + { 0x536B, 14332 }, + { 0x536C, 14386 }, + { 0x536D, 14347 }, + { 0x536E, 14398 }, + { 0x536F, 14410 }, + { 0x5370, 14425 }, + { 0x5371, 14434 }, + { 0x5372, 14389 }, + { 0x5373, 14428 }, + { 0x5374, 14407 }, + { 0x5375, 14371 }, + { 0x5376, 14422 }, + { 0x5377, 14335 }, + { 0x5378, 14392 }, + { 0x5379, 14359 }, + { 0x537A, 14362 }, + { 0x537B, 14413 }, + { 0x537C, 14329 }, + { 0x537D, 14383 }, + { 0x537E, 14356 }, + { 0x537F, 14380 }, + { 0x5380, 14365 }, + { 0x5381, 14353 }, + { 0x5382, 14377 }, + { 0x5383, 14416 }, + { 0x5384, 14419 }, + { 0x5385, 14368 }, + { 0x5386, 14341 }, + { 0x5387, 14431 }, + { 0x5388, 14275 }, + { 0x5389, 14300 }, + { 0x538A, 14267 }, + { 0x538B, 14287 }, + { 0x538C, 14271 }, + { 0x538D, 14291 }, + { 0x538E, 14295 }, + { 0x538F, 14263 }, + { 0x5390, 14279 }, + { 0x5391, 14283 }, + { 0x5392, 14219 }, + { 0x5393, 14453 }, + { 0x5394, 14231 }, + { 0x5395, 14305 }, + { 0x5396, 14487 }, + { 0x5397, 14491 }, + { 0x5398, 14473 }, + { 0x5399, 14458 }, + { 0x539A, 14455 }, + { 0x539B, 14465 }, + { 0x539C, 14479 }, + { 0x539D, 14462 }, + { 0x539E, 14469 }, + { 0x539F, 14476 }, + { 0x53A0, 14483 }, + { 0x53A1, 14251 }, + { 0x53A2, 14233 }, + { 0x53A3, 14239 }, + { 0x53A4, 14260 }, + { 0x53A5, 14245 }, + { 0x53A6, 14242 }, + { 0x53A7, 14236 }, + { 0x53A8, 14257 }, + { 0x53A9, 14254 }, + { 0x53AA, 14248 }, + { 0x53AB, 14213 }, + { 0x53AC, 15229 }, + { 0x53AD, 42267 }, + { 0x53AE, 42263 }, + { 0x53AF, 42239 }, + { 0x53B0, 42255 }, + { 0x53B1, 42235 }, + { 0x53B2, 42259 }, + { 0x53B3, 42275 }, + { 0x53B4, 42287 }, + { 0x53B5, 42243 }, + { 0x53B6, 42247 }, + { 0x53B7, 42251 }, + { 0x53B8, 42215 }, + { 0x53B9, 42219 }, + { 0x53BA, 42283 }, + { 0x53BB, 42279 }, + { 0x53BC, 42211 }, + { 0x53BD, 42231 }, + { 0x53BE, 42223 }, + { 0x53BF, 42227 }, + { 0x53C0, 42271 }, + { 0x53C1, 42291 }, + { 0x53C2, 41934 }, + { 0x53C3, 41952 }, + { 0x53C4, 41979 }, + { 0x53C5, 41964 }, + { 0x53C6, 41991 }, + { 0x53C7, 41955 }, + { 0x53C8, 41973 }, + { 0x53C9, 41982 }, + { 0x53CA, 41943 }, + { 0x53CB, 41949 }, + { 0x53CC, 41937 }, + { 0x53CD, 41976 }, + { 0x53CE, 41958 }, + { 0x53CF, 41946 }, + { 0x53D0, 41940 }, + { 0x53D1, 41923 }, + { 0x53D2, 41919 }, + { 0x53D3, 41927 }, + { 0x53D4, 41930 }, + { 0x53D5, 42305 }, + { 0x53D6, 42309 }, + { 0x53D7, 42208 }, + { 0x53D8, 41912 }, + { 0x53D9, 42036 }, + { 0x53DA, 42039 }, + { 0x53DB, 41906 }, + { 0x53DC, 42296 }, + { 0x53DD, 41985 }, + { 0x53DE, 41988 }, + { 0x53DF, 42300 }, + { 0x53E0, 117879 }, + { 0x53E1, 117882 }, + { 0x53E2, 117892 }, + { 0x53E3, 117907 }, + { 0x53E4, 117887 }, + { 0x53E5, 117897 }, + { 0x53E6, 117918 }, + { 0x53E7, 117913 }, + { 0x53E8, 117902 }, + { 0x53E9, 117992 }, + { 0x53EA, 117995 }, + { 0x53EB, 118038 }, + { 0x53EC, 118043 }, + { 0x53ED, 118016 }, + { 0x53EE, 118049 }, + { 0x53EF, 118011 }, + { 0x53F0, 118021 }, + { 0x53F1, 118055 }, + { 0x53F2, 118065 }, + { 0x53F3, 118070 }, + { 0x53F4, 118002 }, + { 0x53F5, 117998 }, + { 0x53F6, 119214 }, + { 0x53F7, 119245 }, + { 0x53F8, 119229 }, + { 0x53F9, 119222 }, + { 0x53FA, 119235 }, + { 0x53FB, 119240 }, + { 0x53FC, 118075 }, + { 0x53FD, 118083 }, + { 0x53FE, 118086 }, + { 0x53FF, 118091 }, + { 0x5400, 118098 }, + { 0x5401, 118101 }, + { 0x5402, 118126 }, + { 0x5403, 118131 }, + { 0x5404, 118106 }, + { 0x5405, 118136 }, + { 0x5406, 118111 }, + { 0x5407, 118116 }, + { 0x5408, 118121 }, + { 0x5409, 121363 }, + { 0x540A, 122146 }, + { 0x540B, 121366 }, + { 0x540C, 121374 }, + { 0x540D, 118141 }, + { 0x540E, 118144 }, + { 0x540F, 118164 }, + { 0x5410, 118155 }, + { 0x5411, 118149 }, + { 0x5412, 122149 }, + { 0x5413, 121379 }, + { 0x5414, 121382 }, + { 0x5415, 121385 }, + { 0x5416, 122152 }, + { 0x5417, 122155 }, + { 0x5418, 119250 }, + { 0x5419, 119290 }, + { 0x541A, 119253 }, + { 0x541B, 119278 }, + { 0x541C, 119258 }, + { 0x541D, 119265 }, + { 0x541E, 121390 }, + { 0x541F, 122755 }, + { 0x5420, 118169 }, + { 0x5421, 119295 }, + { 0x5422, 121393 }, + { 0x5423, 122758 }, + { 0x5424, 119304 }, + { 0x5425, 119307 }, + { 0x5426, 122158 }, + { 0x5427, 119312 }, + { 0x5428, 122161 }, + { 0x5429, 118172 }, + { 0x542A, 118175 }, + { 0x542B, 118180 }, + { 0x542C, 118185 }, + { 0x542D, 118191 }, + { 0x542E, 118194 }, + { 0x542F, 118200 }, + { 0x5430, 118213 }, + { 0x5431, 122164 }, + { 0x5432, 122167 }, + { 0x5433, 119315 }, + { 0x5434, 121396 }, + { 0x5435, 118218 }, + { 0x5436, 119318 }, + { 0x5437, 119326 }, + { 0x5438, 119460 }, + { 0x5439, 119478 }, + { 0x543A, 119334 }, + { 0x543B, 119340 }, + { 0x543C, 119346 }, + { 0x543D, 119354 }, + { 0x543E, 119466 }, + { 0x543F, 119428 }, + { 0x5440, 119360 }, + { 0x5441, 119366 }, + { 0x5442, 119372 }, + { 0x5443, 119434 }, + { 0x5444, 119380 }, + { 0x5445, 119386 }, + { 0x5446, 119392 }, + { 0x5447, 119440 }, + { 0x5448, 119400 }, + { 0x5449, 119446 }, + { 0x544A, 119406 }, + { 0x544B, 119472 }, + { 0x544C, 119412 }, + { 0x544D, 119454 }, + { 0x544E, 119484 }, + { 0x544F, 119487 }, + { 0x5450, 122172 }, + { 0x5451, 122175 }, + { 0x5452, 118226 }, + { 0x5453, 119490 }, + { 0x5454, 119493 }, + { 0x5455, 119508 }, + { 0x5456, 121402 }, + { 0x5457, 119513 }, + { 0x5458, 119516 }, + { 0x5459, 121410 }, + { 0x545A, 118229 }, + { 0x545B, 118236 }, + { 0x545C, 118232 }, + { 0x545D, 118241 }, + { 0x545E, 119523 }, + { 0x545F, 119531 }, + { 0x5460, 121418 }, + { 0x5461, 119536 }, + { 0x5462, 122178 }, + { 0x5463, 119690 }, + { 0x5464, 119693 }, + { 0x5465, 121421 }, + { 0x5466, 121424 }, + { 0x5467, 121428 }, + { 0x5468, 121433 }, + { 0x5469, 121436 }, + { 0x546A, 117924 }, + { 0x546B, 117935 }, + { 0x546C, 117927 }, + { 0x546D, 118245 }, + { 0x546E, 118248 }, + { 0x546F, 118267 }, + { 0x5470, 118262 }, + { 0x5471, 118282 }, + { 0x5472, 118287 }, + { 0x5473, 118257 }, + { 0x5474, 121439 }, + { 0x5475, 121442 }, + { 0x5476, 118292 }, + { 0x5477, 118295 }, + { 0x5478, 118303 }, + { 0x5479, 118308 }, + { 0x547A, 118298 }, + { 0x547B, 118318 }, + { 0x547C, 118323 }, + { 0x547D, 118314 }, + { 0x547E, 121445 }, + { 0x547F, 122181 }, + { 0x5480, 121448 }, + { 0x5481, 121456 }, + { 0x5482, 121459 }, + { 0x5483, 121464 }, + { 0x5484, 121471 }, + { 0x5485, 121480 }, + { 0x5486, 121526 }, + { 0x5487, 121559 }, + { 0x5488, 121565 }, + { 0x5489, 121485 }, + { 0x548A, 121490 }, + { 0x548B, 121536 }, + { 0x548C, 121572 }, + { 0x548D, 121577 }, + { 0x548E, 121542 }, + { 0x548F, 121496 }, + { 0x5490, 121547 }, + { 0x5491, 121501 }, + { 0x5492, 121506 }, + { 0x5493, 121516 }, + { 0x5494, 121521 }, + { 0x5495, 118328 }, + { 0x5496, 118331 }, + { 0x5497, 119696 }, + { 0x5498, 119704 }, + { 0x5499, 119713 }, + { 0x549A, 119720 }, + { 0x549B, 119867 }, + { 0x549C, 119732 }, + { 0x549D, 119875 }, + { 0x549E, 120080 }, + { 0x549F, 119880 }, + { 0x54A0, 119885 }, + { 0x54A1, 119892 }, + { 0x54A2, 119897 }, + { 0x54A3, 119746 }, + { 0x54A4, 119751 }, + { 0x54A5, 119910 }, + { 0x54A6, 119917 }, + { 0x54A7, 119756 }, + { 0x54A8, 119761 }, + { 0x54A9, 119768 }, + { 0x54AA, 119773 }, + { 0x54AB, 120092 }, + { 0x54AC, 119937 }, + { 0x54AD, 119786 }, + { 0x54AE, 119956 }, + { 0x54AF, 119961 }, + { 0x54B0, 120098 }, + { 0x54B1, 119798 }, + { 0x54B2, 119968 }, + { 0x54B3, 119973 }, + { 0x54B4, 119807 }, + { 0x54B5, 120105 }, + { 0x54B6, 119980 }, + { 0x54B7, 119986 }, + { 0x54B8, 119995 }, + { 0x54B9, 120140 }, + { 0x54BA, 120000 }, + { 0x54BB, 120005 }, + { 0x54BC, 120012 }, + { 0x54BD, 119814 }, + { 0x54BE, 119819 }, + { 0x54BF, 119826 }, + { 0x54C0, 120036 }, + { 0x54C1, 120041 }, + { 0x54C2, 119850 }, + { 0x54C3, 120048 }, + { 0x54C4, 120053 }, + { 0x54C5, 120058 }, + { 0x54C6, 120063 }, + { 0x54C7, 120115 }, + { 0x54C8, 120070 }, + { 0x54C9, 120125 }, + { 0x54CA, 119727 }, + { 0x54CB, 119855 }, + { 0x54CC, 119860 }, + { 0x54CD, 119699 }, + { 0x54CE, 121632 }, + { 0x54CF, 121641 }, + { 0x54D0, 120152 }, + { 0x54D1, 120155 }, + { 0x54D2, 120163 }, + { 0x54D3, 120166 }, + { 0x54D4, 122188 }, + { 0x54D5, 120175 }, + { 0x54D6, 120178 }, + { 0x54D7, 121646 }, + { 0x54D8, 121654 }, + { 0x54D9, 121649 }, + { 0x54DA, 121658 }, + { 0x54DB, 120181 }, + { 0x54DC, 121663 }, + { 0x54DD, 122776 }, + { 0x54DE, 123005 }, + { 0x54DF, 123013 }, + { 0x54E0, 118335 }, + { 0x54E1, 118338 }, + { 0x54E2, 118343 }, + { 0x54E3, 118348 }, + { 0x54E4, 120184 }, + { 0x54E5, 120187 }, + { 0x54E6, 120192 }, + { 0x54E7, 122191 }, + { 0x54E8, 121669 }, + { 0x54E9, 121672 }, + { 0x54EA, 121676 }, + { 0x54EB, 121679 }, + { 0x54EC, 121703 }, + { 0x54ED, 121698 }, + { 0x54EE, 121686 }, + { 0x54EF, 121693 }, + { 0x54F0, 122194 }, + { 0x54F1, 121709 }, + { 0x54F2, 121733 }, + { 0x54F3, 121716 }, + { 0x54F4, 121728 }, + { 0x54F5, 121712 }, + { 0x54F6, 118353 }, + { 0x54F7, 118356 }, + { 0x54F8, 120200 }, + { 0x54F9, 120213 }, + { 0x54FA, 120218 }, + { 0x54FB, 120226 }, + { 0x54FC, 120231 }, + { 0x54FD, 120203 }, + { 0x54FE, 120238 }, + { 0x54FF, 120254 }, + { 0x5500, 120261 }, + { 0x5501, 120241 }, + { 0x5502, 120266 }, + { 0x5503, 120269 }, + { 0x5504, 120272 }, + { 0x5505, 120277 }, + { 0x5506, 121738 }, + { 0x5507, 122197 }, + { 0x5508, 122779 }, + { 0x5509, 118361 }, + { 0x550A, 118368 }, + { 0x550B, 118364 }, + { 0x550C, 120280 }, + { 0x550D, 118377 }, + { 0x550E, 118385 }, + { 0x550F, 118424 }, + { 0x5510, 118399 }, + { 0x5511, 118429 }, + { 0x5512, 118404 }, + { 0x5513, 118409 }, + { 0x5514, 118414 }, + { 0x5515, 118419 }, + { 0x5516, 118380 }, + { 0x5517, 118434 }, + { 0x5518, 121741 }, + { 0x5519, 121744 }, + { 0x551A, 121754 }, + { 0x551B, 121764 }, + { 0x551C, 121759 }, + { 0x551D, 121749 }, + { 0x551E, 121769 }, + { 0x551F, 117940 }, + { 0x5520, 117943 }, + { 0x5521, 118437 }, + { 0x5522, 121775 }, + { 0x5523, 121778 }, + { 0x5524, 121784 }, + { 0x5525, 118440 }, + { 0x5526, 120283 }, + { 0x5527, 120290 }, + { 0x5528, 120286 }, + { 0x5529, 120298 }, + { 0x552A, 120294 }, + { 0x552B, 118443 }, + { 0x552C, 118446 }, + { 0x552D, 120309 }, + { 0x552E, 118452 }, + { 0x552F, 118455 }, + { 0x5530, 118464 }, + { 0x5531, 118469 }, + { 0x5532, 118460 }, + { 0x5533, 121790 }, + { 0x5534, 118474 }, + { 0x5535, 118477 }, + { 0x5536, 120312 }, + { 0x5537, 118480 }, + { 0x5538, 118483 }, + { 0x5539, 118500 }, + { 0x553A, 118505 }, + { 0x553B, 118756 }, + { 0x553C, 118657 }, + { 0x553D, 118828 }, + { 0x553E, 118662 }, + { 0x553F, 118512 }, + { 0x5540, 118833 }, + { 0x5541, 118766 }, + { 0x5542, 118522 }, + { 0x5543, 118667 }, + { 0x5544, 118771 }, + { 0x5545, 118672 }, + { 0x5546, 118677 }, + { 0x5547, 118527 }, + { 0x5548, 118777 }, + { 0x5549, 118787 }, + { 0x554A, 118794 }, + { 0x554B, 118532 }, + { 0x554C, 118801 }, + { 0x554D, 118691 }, + { 0x554E, 118544 }, + { 0x554F, 118696 }, + { 0x5550, 118554 }, + { 0x5551, 118701 }, + { 0x5552, 118559 }, + { 0x5553, 118564 }, + { 0x5554, 118569 }, + { 0x5555, 118574 }, + { 0x5556, 118581 }, + { 0x5557, 118588 }, + { 0x5558, 118595 }, + { 0x5559, 118600 }, + { 0x555A, 118607 }, + { 0x555B, 118711 }, + { 0x555C, 118617 }, + { 0x555D, 118622 }, + { 0x555E, 118627 }, + { 0x555F, 118716 }, + { 0x5560, 118721 }, + { 0x5561, 118726 }, + { 0x5562, 118806 }, + { 0x5563, 118731 }, + { 0x5564, 118736 }, + { 0x5565, 118838 }, + { 0x5566, 118741 }, + { 0x5567, 118488 }, + { 0x5568, 118637 }, + { 0x5569, 118642 }, + { 0x556A, 118816 }, + { 0x556B, 118751 }, + { 0x556C, 118652 }, + { 0x556D, 120315 }, + { 0x556E, 120318 }, + { 0x556F, 120323 }, + { 0x5570, 121793 }, + { 0x5571, 121796 }, + { 0x5572, 121799 }, + { 0x5573, 121802 }, + { 0x5574, 121805 }, + { 0x5575, 120326 }, + { 0x5576, 120329 }, + { 0x5577, 120335 }, + { 0x5578, 120338 }, + { 0x5579, 120343 }, + { 0x557A, 121810 }, + { 0x557B, 121813 }, + { 0x557C, 122782 }, + { 0x557D, 122797 }, + { 0x557E, 122785 }, + { 0x557F, 122203 }, + { 0x5580, 118843 }, + { 0x5581, 118856 }, + { 0x5582, 118846 }, + { 0x5583, 118851 }, + { 0x5584, 120352 }, + { 0x5585, 120355 }, + { 0x5586, 122206 }, + { 0x5587, 121816 }, + { 0x5588, 122807 }, + { 0x5589, 122810 }, + { 0x558A, 118861 }, + { 0x558B, 118864 }, + { 0x558C, 120358 }, + { 0x558D, 120361 }, + { 0x558E, 120364 }, + { 0x558F, 120369 }, + { 0x5590, 120372 }, + { 0x5591, 120375 }, + { 0x5592, 120379 }, + { 0x5593, 120382 }, + { 0x5594, 120385 }, + { 0x5595, 122815 }, + { 0x5596, 122818 }, + { 0x5597, 118876 }, + { 0x5598, 122209 }, + { 0x5599, 122212 }, + { 0x559A, 122217 }, + { 0x559B, 122226 }, + { 0x559C, 122233 }, + { 0x559D, 122261 }, + { 0x559E, 122266 }, + { 0x559F, 122379 }, + { 0x55A0, 122386 }, + { 0x55A1, 122271 }, + { 0x55A2, 122391 }, + { 0x55A3, 122276 }, + { 0x55A4, 122281 }, + { 0x55A5, 122396 }, + { 0x55A6, 122401 }, + { 0x55A7, 122406 }, + { 0x55A8, 122291 }, + { 0x55A9, 122413 }, + { 0x55AA, 122296 }, + { 0x55AB, 122418 }, + { 0x55AC, 122303 }, + { 0x55AD, 122308 }, + { 0x55AE, 122315 }, + { 0x55AF, 122322 }, + { 0x55B0, 122424 }, + { 0x55B1, 122429 }, + { 0x55B2, 122434 }, + { 0x55B3, 122439 }, + { 0x55B4, 122502 }, + { 0x55B5, 122475 }, + { 0x55B6, 122327 }, + { 0x55B7, 122448 }, + { 0x55B8, 122332 }, + { 0x55B9, 122337 }, + { 0x55BA, 122480 }, + { 0x55BB, 122344 }, + { 0x55BC, 122453 }, + { 0x55BD, 122507 }, + { 0x55BE, 122516 }, + { 0x55BF, 122485 }, + { 0x55C0, 122490 }, + { 0x55C1, 122460 }, + { 0x55C2, 122465 }, + { 0x55C3, 122497 }, + { 0x55C4, 122349 }, + { 0x55C5, 122240 }, + { 0x55C6, 122245 }, + { 0x55C7, 122252 }, + { 0x55C8, 122360 }, + { 0x55C9, 122367 }, + { 0x55CA, 122470 }, + { 0x55CB, 122524 }, + { 0x55CC, 122528 }, + { 0x55CD, 122543 }, + { 0x55CE, 122548 }, + { 0x55CF, 122531 }, + { 0x55D0, 122535 }, + { 0x55D1, 122821 }, + { 0x55D2, 120390 }, + { 0x55D3, 120393 }, + { 0x55D4, 120398 }, + { 0x55D5, 120401 }, + { 0x55D6, 120406 }, + { 0x55D7, 118879 }, + { 0x55D8, 120413 }, + { 0x55D9, 122824 }, + { 0x55DA, 121819 }, + { 0x55DB, 118882 }, + { 0x55DC, 118885 }, + { 0x55DD, 120416 }, + { 0x55DE, 120429 }, + { 0x55DF, 120482 }, + { 0x55E0, 120516 }, + { 0x55E1, 120528 }, + { 0x55E2, 120534 }, + { 0x55E3, 120434 }, + { 0x55E4, 120441 }, + { 0x55E5, 120540 }, + { 0x55E6, 120545 }, + { 0x55E7, 120550 }, + { 0x55E8, 120446 }, + { 0x55E9, 120451 }, + { 0x55EA, 120574 }, + { 0x55EB, 120458 }, + { 0x55EC, 120465 }, + { 0x55ED, 120470 }, + { 0x55EE, 120475 }, + { 0x55EF, 120557 }, + { 0x55F0, 120569 }, + { 0x55F1, 120425 }, + { 0x55F2, 120593 }, + { 0x55F3, 120598 }, + { 0x55F4, 120589 }, + { 0x55F5, 120579 }, + { 0x55F6, 120603 }, + { 0x55F7, 122555 }, + { 0x55F8, 122558 }, + { 0x55F9, 122567 }, + { 0x55FA, 122563 }, + { 0x55FB, 120606 }, + { 0x55FC, 120609 }, + { 0x55FD, 120612 }, + { 0x55FE, 120615 }, + { 0x55FF, 120620 }, + { 0x5600, 118890 }, + { 0x5601, 118897 }, + { 0x5602, 118893 }, + { 0x5603, 120628 }, + { 0x5604, 120631 }, + { 0x5605, 120634 }, + { 0x5606, 121822 }, + { 0x5607, 122572 }, + { 0x5608, 118902 }, + { 0x5609, 120637 }, + { 0x560A, 118905 }, + { 0x560B, 120640 }, + { 0x560C, 118913 }, + { 0x560D, 118916 }, + { 0x560E, 120643 }, + { 0x560F, 120646 }, + { 0x5610, 122827 }, + { 0x5611, 122830 }, + { 0x5612, 121828 }, + { 0x5613, 121859 }, + { 0x5614, 121869 }, + { 0x5615, 121864 }, + { 0x5616, 121831 }, + { 0x5617, 121836 }, + { 0x5618, 121874 }, + { 0x5619, 122575 }, + { 0x561A, 122582 }, + { 0x561B, 122587 }, + { 0x561C, 122594 }, + { 0x561D, 122578 }, + { 0x561E, 118921 }, + { 0x561F, 120650 }, + { 0x5620, 121879 }, + { 0x5621, 121888 }, + { 0x5622, 121882 }, + { 0x5623, 121892 }, + { 0x5624, 122604 }, + { 0x5625, 120659 }, + { 0x5626, 120656 }, + { 0x5627, 121897 }, + { 0x5628, 118924 }, + { 0x5629, 118927 }, + { 0x562A, 118932 }, + { 0x562B, 118937 }, + { 0x562C, 118941 }, + { 0x562D, 118944 }, + { 0x562E, 120663 }, + { 0x562F, 120666 }, + { 0x5630, 120677 }, + { 0x5631, 120669 }, + { 0x5632, 122833 }, + { 0x5633, 122848 }, + { 0x5634, 122883 }, + { 0x5635, 122888 }, + { 0x5636, 122906 }, + { 0x5637, 122863 }, + { 0x5638, 122871 }, + { 0x5639, 122916 }, + { 0x563A, 122928 }, + { 0x563B, 122933 }, + { 0x563C, 122941 }, + { 0x563D, 122948 }, + { 0x563E, 122876 }, + { 0x563F, 122957 }, + { 0x5640, 122607 }, + { 0x5641, 118949 }, + { 0x5642, 121903 }, + { 0x5643, 120686 }, + { 0x5644, 120698 }, + { 0x5645, 120727 }, + { 0x5646, 120704 }, + { 0x5647, 120710 }, + { 0x5648, 120721 }, + { 0x5649, 120694 }, + { 0x564A, 120689 }, + { 0x564B, 120733 }, + { 0x564C, 120738 }, + { 0x564D, 122610 }, + { 0x564E, 122668 }, + { 0x564F, 122613 }, + { 0x5650, 122637 }, + { 0x5651, 122643 }, + { 0x5652, 122649 }, + { 0x5653, 122656 }, + { 0x5654, 122619 }, + { 0x5655, 122625 }, + { 0x5656, 122662 }, + { 0x5657, 122631 }, + { 0x5658, 122674 }, + { 0x5659, 122680 }, + { 0x565A, 118952 }, + { 0x565B, 120746 }, + { 0x565C, 120749 }, + { 0x565D, 120752 }, + { 0x565E, 122687 }, + { 0x565F, 118955 }, + { 0x5660, 118958 }, + { 0x5661, 118978 }, + { 0x5662, 118983 }, + { 0x5663, 118988 }, + { 0x5664, 118963 }, + { 0x5665, 118968 }, + { 0x5666, 118993 }, + { 0x5667, 118973 }, + { 0x5668, 118998 }, + { 0x5669, 119003 }, + { 0x566A, 122694 }, + { 0x566B, 122707 }, + { 0x566C, 122697 }, + { 0x566D, 122702 }, + { 0x566E, 122712 }, + { 0x566F, 119008 }, + { 0x5670, 120755 }, + { 0x5671, 119011 }, + { 0x5672, 119014 }, + { 0x5673, 119017 }, + { 0x5674, 120884 }, + { 0x5675, 120758 }, + { 0x5676, 120776 }, + { 0x5677, 120781 }, + { 0x5678, 120821 }, + { 0x5679, 120791 }, + { 0x567A, 120832 }, + { 0x567B, 120837 }, + { 0x567C, 120842 }, + { 0x567D, 120796 }, + { 0x567E, 120847 }, + { 0x567F, 120852 }, + { 0x5680, 120874 }, + { 0x5681, 120864 }, + { 0x5682, 120801 }, + { 0x5683, 120806 }, + { 0x5684, 120811 }, + { 0x5685, 120816 }, + { 0x5686, 120869 }, + { 0x5687, 120771 }, + { 0x5688, 120761 }, + { 0x5689, 120888 }, + { 0x568A, 120891 }, + { 0x568B, 122987 }, + { 0x568C, 120897 }, + { 0x568D, 120900 }, + { 0x568E, 121927 }, + { 0x568F, 121930 }, + { 0x5690, 121952 }, + { 0x5691, 121962 }, + { 0x5692, 121947 }, + { 0x5693, 121967 }, + { 0x5694, 121957 }, + { 0x5695, 121935 }, + { 0x5696, 121940 }, + { 0x5697, 121972 }, + { 0x5698, 122717 }, + { 0x5699, 122720 }, + { 0x569A, 120903 }, + { 0x569B, 120906 }, + { 0x569C, 120915 }, + { 0x569D, 120926 }, + { 0x569E, 122723 }, + { 0x569F, 121979 }, + { 0x56A0, 122726 }, + { 0x56A1, 122990 }, + { 0x56A2, 123292 }, + { 0x56A3, 121982 }, + { 0x56A4, 121985 }, + { 0x56A5, 121990 }, + { 0x56A6, 121995 }, + { 0x56A7, 121998 }, + { 0x56A8, 122003 }, + { 0x56A9, 122044 }, + { 0x56AA, 122008 }, + { 0x56AB, 122013 }, + { 0x56AC, 122018 }, + { 0x56AD, 122023 }, + { 0x56AE, 122049 }, + { 0x56AF, 122029 }, + { 0x56B0, 122034 }, + { 0x56B1, 122039 }, + { 0x56B2, 122993 }, + { 0x56B3, 122054 }, + { 0x56B4, 122065 }, + { 0x56B5, 122057 }, + { 0x56B6, 122729 }, + { 0x56B7, 120952 }, + { 0x56B8, 120955 }, + { 0x56B9, 122069 }, + { 0x56BA, 122996 }, + { 0x56BB, 119020 }, + { 0x56BC, 119023 }, + { 0x56BD, 120961 }, + { 0x56BE, 122086 }, + { 0x56BF, 122089 }, + { 0x56C0, 122095 }, + { 0x56C1, 122732 }, + { 0x56C2, 119032 }, + { 0x56C3, 119035 }, + { 0x56C4, 120964 }, + { 0x56C5, 122098 }, + { 0x56C6, 122735 }, + { 0x56C7, 120967 }, + { 0x56C8, 122999 }, + { 0x56C9, 120970 }, + { 0x56CA, 122101 }, + { 0x56CB, 119040 }, + { 0x56CC, 119057 }, + { 0x56CD, 119047 }, + { 0x56CE, 119052 }, + { 0x56CF, 119043 }, + { 0x56D0, 120973 }, + { 0x56D1, 120976 }, + { 0x56D2, 120987 }, + { 0x56D3, 120991 }, + { 0x56D4, 120994 }, + { 0x56D5, 121004 }, + { 0x56D6, 121009 }, + { 0x56D7, 121014 }, + { 0x56D8, 121019 }, + { 0x56D9, 120999 }, + { 0x56DA, 122104 }, + { 0x56DB, 121024 }, + { 0x56DC, 119061 }, + { 0x56DD, 119064 }, + { 0x56DE, 119068 }, + { 0x56DF, 119071 }, + { 0x56E0, 121030 }, + { 0x56E1, 121033 }, + { 0x56E2, 121052 }, + { 0x56E3, 121036 }, + { 0x56E4, 121041 }, + { 0x56E5, 119075 }, + { 0x56E6, 122112 }, + { 0x56E7, 121057 }, + { 0x56E8, 121060 }, + { 0x56E9, 121075 }, + { 0x56EA, 121078 }, + { 0x56EB, 117947 }, + { 0x56EC, 117959 }, + { 0x56ED, 117954 }, + { 0x56EE, 117973 }, + { 0x56EF, 117984 }, + { 0x56F0, 117963 }, + { 0x56F1, 119078 }, + { 0x56F2, 119081 }, + { 0x56F3, 119084 }, + { 0x56F4, 119120 }, + { 0x56F5, 119115 }, + { 0x56F6, 119110 }, + { 0x56F7, 119091 }, + { 0x56F8, 119100 }, + { 0x56F9, 119087 }, + { 0x56FA, 119124 }, + { 0x56FB, 119128 }, + { 0x56FC, 122115 }, + { 0x56FD, 119134 }, + { 0x56FE, 119159 }, + { 0x56FF, 119147 }, + { 0x5700, 119154 }, + { 0x5701, 119137 }, + { 0x5702, 122738 }, + { 0x5703, 122118 }, + { 0x5704, 122126 }, + { 0x5705, 122121 }, + { 0x5706, 119164 }, + { 0x5707, 119167 }, + { 0x5708, 119171 }, + { 0x5709, 119178 }, + { 0x570A, 119174 }, + { 0x570B, 121086 }, + { 0x570C, 121089 }, + { 0x570D, 121096 }, + { 0x570E, 121103 }, + { 0x570F, 121108 }, + { 0x5710, 121137 }, + { 0x5711, 121113 }, + { 0x5712, 121125 }, + { 0x5713, 121118 }, + { 0x5714, 121146 }, + { 0x5715, 121149 }, + { 0x5716, 122131 }, + { 0x5717, 121152 }, + { 0x5718, 121155 }, + { 0x5719, 121278 }, + { 0x571A, 121207 }, + { 0x571B, 121212 }, + { 0x571C, 121167 }, + { 0x571D, 121217 }, + { 0x571E, 121257 }, + { 0x571F, 121222 }, + { 0x5720, 121172 }, + { 0x5721, 121177 }, + { 0x5722, 121227 }, + { 0x5723, 121182 }, + { 0x5724, 121232 }, + { 0x5725, 121187 }, + { 0x5726, 121242 }, + { 0x5727, 121247 }, + { 0x5728, 121192 }, + { 0x5729, 121252 }, + { 0x572A, 121263 }, + { 0x572B, 121197 }, + { 0x572C, 121160 }, + { 0x572D, 121202 }, + { 0x572E, 121273 }, + { 0x572F, 122741 }, + { 0x5730, 122744 }, + { 0x5731, 121288 }, + { 0x5732, 121291 }, + { 0x5733, 121296 }, + { 0x5734, 121301 }, + { 0x5735, 121306 }, + { 0x5736, 122137 }, + { 0x5737, 122134 }, + { 0x5738, 123002 }, + { 0x5739, 122749 }, + { 0x573A, 121311 }, + { 0x573B, 121314 }, + { 0x573C, 121319 }, + { 0x573D, 119183 }, + { 0x573E, 119186 }, + { 0x573F, 119190 }, + { 0x5740, 121325 }, + { 0x5741, 122140 }, + { 0x5742, 121328 }, + { 0x5743, 119196 }, + { 0x5744, 119199 }, + { 0x5745, 121331 }, + { 0x5746, 121334 }, + { 0x5747, 121337 }, + { 0x5748, 121342 }, + { 0x5749, 122143 }, + { 0x574A, 119204 }, + { 0x574B, 121345 }, + { 0x574C, 121348 }, + { 0x574D, 122752 }, + { 0x574E, 121360 }, + { 0x574F, 120348 }, + { 0x5750, 118027 }, + { 0x5751, 119217 }, + { 0x5752, 121369 }, + { 0x5753, 119420 }, + { 0x5754, 121399 }, + { 0x5755, 121413 }, + { 0x5756, 119526 }, + { 0x5757, 121531 }, + { 0x5758, 121554 }, + { 0x5759, 119737 }, + { 0x575A, 120075 }, + { 0x575B, 121666 }, + { 0x575C, 120197 }, + { 0x575D, 121772 }, + { 0x575E, 118823 }, + { 0x575F, 118761 }, + { 0x5760, 118782 }, + { 0x5761, 118686 }, + { 0x5762, 118537 }, + { 0x5763, 118706 }, + { 0x5764, 118612 }, + { 0x5765, 118811 }, + { 0x5766, 118632 }, + { 0x5767, 118746 }, + { 0x5768, 122286 }, + { 0x5769, 120583 }, + { 0x576A, 120521 }, + { 0x576B, 120506 }, + { 0x576C, 121825 }, + { 0x576D, 122599 }, + { 0x576E, 120653 }, + { 0x576F, 120683 }, + { 0x5770, 121900 }, + { 0x5771, 122895 }, + { 0x5772, 122853 }, + { 0x5773, 121918 }, + { 0x5774, 122690 }, + { 0x5775, 121924 }, + { 0x5776, 120826 }, + { 0x5777, 121027 }, + { 0x5778, 119142 }, + { 0x5779, 117950 }, + { 0x577A, 123422 }, + { 0x577B, 123826 }, + { 0x577C, 123565 }, + { 0x577D, 123494 }, + { 0x577E, 123389 }, + { 0x577F, 123767 }, + { 0x5780, 123721 }, + { 0x5781, 123660 }, + { 0x5782, 123854 }, + { 0x5783, 123593 }, + { 0x5784, 123522 }, + { 0x5785, 123400 }, + { 0x5786, 123772 }, + { 0x5787, 123726 }, + { 0x5788, 123665 }, + { 0x5789, 123553 }, + { 0x578A, 123482 }, + { 0x578B, 123377 }, + { 0x578C, 123755 }, + { 0x578D, 123709 }, + { 0x578E, 123648 }, + { 0x578F, 123330 }, + { 0x5790, 123448 }, + { 0x5791, 123859 }, + { 0x5792, 123598 }, + { 0x5793, 123527 }, + { 0x5794, 123405 }, + { 0x5795, 123777 }, + { 0x5796, 123731 }, + { 0x5797, 123670 }, + { 0x5798, 123335 }, + { 0x5799, 123453 }, + { 0x579A, 123864 }, + { 0x579B, 123603 }, + { 0x579C, 123532 }, + { 0x579D, 123458 }, + { 0x579E, 123869 }, + { 0x579F, 123874 }, + { 0x57A0, 123608 }, + { 0x57A1, 123537 }, + { 0x57A2, 123410 }, + { 0x57A3, 123782 }, + { 0x57A4, 123736 }, + { 0x57A5, 123675 }, + { 0x57A6, 123340 }, + { 0x57A7, 123463 }, + { 0x57A8, 123881 }, + { 0x57A9, 123886 }, + { 0x57AA, 123613 }, + { 0x57AB, 123542 }, + { 0x57AC, 123818 }, + { 0x57AD, 123810 }, + { 0x57AE, 123314 }, + { 0x57AF, 123438 }, + { 0x57B0, 123842 }, + { 0x57B1, 123847 }, + { 0x57B2, 123588 }, + { 0x57B3, 123517 }, + { 0x57B4, 123893 }, + { 0x57B5, 123900 }, + { 0x57B6, 123618 }, + { 0x57B7, 123641 }, + { 0x57B8, 123625 }, + { 0x57B9, 123633 }, + { 0x57BA, 123415 }, + { 0x57BB, 123803 }, + { 0x57BC, 123787 }, + { 0x57BD, 123795 }, + { 0x57BE, 123741 }, + { 0x57BF, 123748 }, + { 0x57C0, 123680 }, + { 0x57C1, 123695 }, + { 0x57C2, 123702 }, + { 0x57C3, 123687 }, + { 0x57C4, 123427 }, + { 0x57C5, 123831 }, + { 0x57C6, 123570 }, + { 0x57C7, 123499 }, + { 0x57C8, 123394 }, + { 0x57C9, 123309 }, + { 0x57CA, 123433 }, + { 0x57CB, 123837 }, + { 0x57CC, 123576 }, + { 0x57CD, 123581 }, + { 0x57CE, 123505 }, + { 0x57CF, 123510 }, + { 0x57D0, 123933 }, + { 0x57D1, 123929 }, + { 0x57D2, 123325 }, + { 0x57D3, 123443 }, + { 0x57D4, 123345 }, + { 0x57D5, 123468 }, + { 0x57D6, 123547 }, + { 0x57D7, 123351 }, + { 0x57D8, 123474 }, + { 0x57D9, 123359 }, + { 0x57DA, 123365 }, + { 0x57DB, 123295 }, + { 0x57DC, 123302 }, + { 0x57DD, 123371 }, + { 0x57DE, 123319 }, + { 0x57DF, 123907 }, + { 0x57E0, 123913 }, + { 0x57E1, 123924 }, + { 0x57E2, 123919 }, + { 0x57E3, 123558 }, + { 0x57E4, 123487 }, + { 0x57E5, 123382 }, + { 0x57E6, 123760 }, + { 0x57E7, 123714 }, + { 0x57E8, 123653 }, + { 0x57E9, 123937 }, + { 0x57EA, 123959 }, + { 0x57EB, 123944 }, + { 0x57EC, 123949 }, + { 0x57ED, 123954 }, + { 0x57EE, 118032 }, + { 0x57EF, 118060 }, + { 0x57F0, 118078 }, + { 0x57F1, 119298 }, + { 0x57F2, 122771 }, + { 0x57F3, 122761 }, + { 0x57F4, 122766 }, + { 0x57F5, 118206 }, + { 0x57F6, 118221 }, + { 0x57F7, 119321 }, + { 0x57F8, 119503 }, + { 0x57F9, 119496 }, + { 0x57FA, 121405 }, + { 0x57FB, 119658 }, + { 0x57FC, 119580 }, + { 0x57FD, 119585 }, + { 0x57FE, 119592 }, + { 0x57FF, 119597 }, + { 0x5800, 119663 }, + { 0x5801, 119539 }, + { 0x5802, 119544 }, + { 0x5803, 119642 }, + { 0x5804, 119648 }, + { 0x5805, 119549 }, + { 0x5806, 119554 }, + { 0x5807, 119602 }, + { 0x5808, 119668 }, + { 0x5809, 119608 }, + { 0x580A, 119673 }, + { 0x580B, 119678 }, + { 0x580C, 119685 }, + { 0x580D, 119613 }, + { 0x580E, 119618 }, + { 0x580F, 119625 }, + { 0x5810, 119653 }, + { 0x5811, 119632 }, + { 0x5812, 119559 }, + { 0x5813, 119564 }, + { 0x5814, 119569 }, + { 0x5815, 119637 }, + { 0x5816, 119574 }, + { 0x5817, 118272 }, + { 0x5818, 118277 }, + { 0x5819, 122184 }, + { 0x581A, 121451 }, + { 0x581B, 121607 }, + { 0x581C, 121583 }, + { 0x581D, 121613 }, + { 0x581E, 121589 }, + { 0x581F, 121620 }, + { 0x5820, 121595 }, + { 0x5821, 121626 }, + { 0x5822, 121601 }, + { 0x5823, 121511 }, + { 0x5824, 120135 }, + { 0x5825, 119904 }, + { 0x5826, 119922 }, + { 0x5827, 119930 }, + { 0x5828, 120087 }, + { 0x5829, 119781 }, + { 0x582A, 119942 }, + { 0x582B, 119949 }, + { 0x582C, 119791 }, + { 0x582D, 120145 }, + { 0x582E, 120019 }, + { 0x582F, 120024 }, + { 0x5830, 120031 }, + { 0x5831, 120110 }, + { 0x5832, 119831 }, + { 0x5833, 119836 }, + { 0x5834, 119843 }, + { 0x5835, 120120 }, + { 0x5836, 120130 }, + { 0x5837, 121635 }, + { 0x5838, 123008 }, + { 0x5839, 121721 }, + { 0x583A, 120207 }, + { 0x583B, 120247 }, + { 0x583C, 118372 }, + { 0x583D, 118390 }, + { 0x583E, 118517 }, + { 0x583F, 118549 }, + { 0x5840, 118493 }, + { 0x5841, 118647 }, + { 0x5842, 122372 }, + { 0x5843, 123018 }, + { 0x5844, 123021 }, + { 0x5845, 123024 }, + { 0x5846, 123027 }, + { 0x5847, 123030 }, + { 0x5848, 123033 }, + { 0x5849, 123036 }, + { 0x584A, 123039 }, + { 0x584B, 123045 }, + { 0x584C, 123048 }, + { 0x584D, 123053 }, + { 0x584E, 123056 }, + { 0x584F, 123059 }, + { 0x5850, 123062 }, + { 0x5851, 123065 }, + { 0x5852, 123068 }, + { 0x5853, 123071 }, + { 0x5854, 123074 }, + { 0x5855, 123077 }, + { 0x5856, 123080 }, + { 0x5857, 123083 }, + { 0x5858, 123086 }, + { 0x5859, 123089 }, + { 0x585A, 123092 }, + { 0x585B, 123095 }, + { 0x585C, 123098 }, + { 0x585D, 123101 }, + { 0x585E, 123104 }, + { 0x585F, 123107 }, + { 0x5860, 123110 }, + { 0x5861, 123122 }, + { 0x5862, 123127 }, + { 0x5863, 123134 }, + { 0x5864, 123115 }, + { 0x5865, 123143 }, + { 0x5866, 123146 }, + { 0x5867, 123149 }, + { 0x5868, 123152 }, + { 0x5869, 123155 }, + { 0x586A, 123158 }, + { 0x586B, 123161 }, + { 0x586C, 123164 }, + { 0x586D, 123167 }, + { 0x586E, 123170 }, + { 0x586F, 123173 }, + { 0x5870, 123196 }, + { 0x5871, 123201 }, + { 0x5872, 123216 }, + { 0x5873, 123206 }, + { 0x5874, 123176 }, + { 0x5875, 123211 }, + { 0x5876, 123181 }, + { 0x5877, 123186 }, + { 0x5878, 123191 }, + { 0x5879, 123223 }, + { 0x587A, 123228 }, + { 0x587B, 123231 }, + { 0x587C, 123249 }, + { 0x587D, 123234 }, + { 0x587E, 123254 }, + { 0x587F, 123259 }, + { 0x5880, 123239 }, + { 0x5881, 123265 }, + { 0x5882, 123274 }, + { 0x5883, 123244 }, + { 0x5884, 123281 }, + { 0x5885, 123286 }, + { 0x5886, 123289 }, + { 0x5887, 120419 }, + { 0x5888, 120511 }, + { 0x5889, 120487 }, + { 0x588A, 120492 }, + { 0x588B, 120497 }, + { 0x588C, 120564 }, + { 0x588D, 118908 }, + { 0x588E, 121845 }, + { 0x588F, 121852 }, + { 0x5890, 122900 }, + { 0x5891, 122962 }, + { 0x5892, 122911 }, + { 0x5893, 122858 }, + { 0x5894, 122972 }, + { 0x5895, 122982 }, + { 0x5896, 122967 }, + { 0x5897, 122921 }, + { 0x5898, 122836 }, + { 0x5899, 122841 }, + { 0x589A, 122977 }, + { 0x589B, 120765 }, + { 0x589C, 120786 }, + { 0x589D, 120857 }, + { 0x589E, 120879 }, + { 0x589F, 121975 }, + { 0x58A0, 120910 }, + { 0x58A1, 120942 }, + { 0x58A2, 120947 }, + { 0x58A3, 120937 }, + { 0x58A4, 122079 }, + { 0x58A5, 122072 }, + { 0x58A6, 119027 }, + { 0x58A7, 122107 }, + { 0x58A8, 121063 }, + { 0x58A9, 121069 }, + { 0x58AA, 121142 }, + { 0x58AB, 121132 }, + { 0x58AC, 121268 }, + { 0x58AD, 121283 }, + { 0x58AE, 121237 }, + { 0x58AF, 121322 }, + { 0x58B0, 119207 }, + { 0x58B1, 121353 }, + { 0x58B2, 138060 }, + { 0x58B3, 138063 }, + { 0x58B4, 138066 }, + { 0x58B5, 138069 }, + { 0x58B6, 138072 }, + { 0x58B7, 138075 }, + { 0x58B8, 138078 }, + { 0x58B9, 138081 }, + { 0x58BA, 138084 }, + { 0x58BB, 138087 }, + { 0x58BC, 138090 }, + { 0x58BD, 138351 }, + { 0x58BE, 138093 }, + { 0x58BF, 138096 }, + { 0x58C0, 138099 }, + { 0x58C1, 138102 }, + { 0x58C2, 138105 }, + { 0x58C3, 138108 }, + { 0x58C4, 138111 }, + { 0x58C5, 138114 }, + { 0x58C6, 138117 }, + { 0x58C7, 138120 }, + { 0x58C8, 138123 }, + { 0x58C9, 138126 }, + { 0x58CA, 138129 }, + { 0x58CB, 138132 }, + { 0x58CC, 138135 }, + { 0x58CD, 138138 }, + { 0x58CE, 138141 }, + { 0x58CF, 138144 }, + { 0x58D0, 138147 }, + { 0x58D1, 138150 }, + { 0x58D2, 138153 }, + { 0x58D3, 138156 }, + { 0x58D4, 138159 }, + { 0x58D5, 138162 }, + { 0x58D6, 138165 }, + { 0x58D7, 138168 }, + { 0x58D8, 138171 }, + { 0x58D9, 138174 }, + { 0x58DA, 138177 }, + { 0x58DB, 138180 }, + { 0x58DC, 138183 }, + { 0x58DD, 138186 }, + { 0x58DE, 138189 }, + { 0x58DF, 138192 }, + { 0x58E0, 138195 }, + { 0x58E1, 138198 }, + { 0x58E2, 138201 }, + { 0x58E3, 138204 }, + { 0x58E4, 138207 }, + { 0x58E5, 138210 }, + { 0x58E6, 138213 }, + { 0x58E7, 138216 }, + { 0x58E8, 138219 }, + { 0x58E9, 138222 }, + { 0x58EA, 138225 }, + { 0x58EB, 138228 }, + { 0x58EC, 138231 }, + { 0x58ED, 138234 }, + { 0x58EE, 138237 }, + { 0x58EF, 138240 }, + { 0x58F0, 138354 }, + { 0x58F1, 138243 }, + { 0x58F2, 138246 }, + { 0x58F3, 138249 }, + { 0x58F4, 138252 }, + { 0x58F5, 138255 }, + { 0x58F6, 138258 }, + { 0x58F7, 138261 }, + { 0x58F8, 138264 }, + { 0x58F9, 138267 }, + { 0x58FA, 138270 }, + { 0x58FB, 138273 }, + { 0x58FC, 138276 }, + { 0x58FD, 138279 }, + { 0x58FE, 138282 }, + { 0x58FF, 138285 }, + { 0x5900, 138288 }, + { 0x5901, 138291 }, + { 0x5902, 138294 }, + { 0x5903, 138297 }, + { 0x5904, 138300 }, + { 0x5905, 138303 }, + { 0x5906, 138306 }, + { 0x5907, 138309 }, + { 0x5908, 138312 }, + { 0x5909, 138315 }, + { 0x590A, 138318 }, + { 0x590B, 138321 }, + { 0x590C, 138324 }, + { 0x590D, 138327 }, + { 0x590E, 138330 }, + { 0x590F, 138333 }, + { 0x5910, 138336 }, + { 0x5911, 138339 }, + { 0x5912, 138342 }, + { 0x5913, 138345 }, + { 0x5914, 138348 }, + { 0x5915, 90356 }, + { 0x5916, 90359 }, + { 0x5917, 90362 }, + { 0x5918, 90365 }, + { 0x5919, 90368 }, + { 0x591A, 92657 }, + { 0x591B, 90371 }, + { 0x591C, 92660 }, + { 0x591D, 92663 }, + { 0x591E, 90374 }, + { 0x591F, 90377 }, + { 0x5920, 90380 }, + { 0x5921, 90383 }, + { 0x5922, 90386 }, + { 0x5923, 90389 }, + { 0x5924, 90392 }, + { 0x5925, 90395 }, + { 0x5926, 92666 }, + { 0x5927, 90398 }, + { 0x5928, 90401 }, + { 0x5929, 90404 }, + { 0x592A, 92669 }, + { 0x592B, 90407 }, + { 0x592C, 90410 }, + { 0x592D, 90413 }, + { 0x592E, 90416 }, + { 0x592F, 90419 }, + { 0x5930, 90422 }, + { 0x5931, 90425 }, + { 0x5932, 90428 }, + { 0x5933, 90431 }, + { 0x5934, 90434 }, + { 0x5935, 90437 }, + { 0x5936, 90440 }, + { 0x5937, 90443 }, + { 0x5938, 90446 }, + { 0x5939, 90449 }, + { 0x593A, 92672 }, + { 0x593B, 90452 }, + { 0x593C, 90455 }, + { 0x593D, 90458 }, + { 0x593E, 90461 }, + { 0x593F, 90464 }, + { 0x5940, 90467 }, + { 0x5941, 90470 }, + { 0x5942, 90473 }, + { 0x5943, 92675 }, + { 0x5944, 90476 }, + { 0x5945, 90479 }, + { 0x5946, 92678 }, + { 0x5947, 90482 }, + { 0x5948, 92681 }, + { 0x5949, 90485 }, + { 0x594A, 90488 }, + { 0x594B, 92684 }, + { 0x594C, 90491 }, + { 0x594D, 90494 }, + { 0x594E, 90497 }, + { 0x594F, 90500 }, + { 0x5950, 90503 }, + { 0x5951, 90506 }, + { 0x5952, 90509 }, + { 0x5953, 90512 }, + { 0x5954, 90515 }, + { 0x5955, 90518 }, + { 0x5956, 90521 }, + { 0x5957, 90524 }, + { 0x5958, 90527 }, + { 0x5959, 90530 }, + { 0x595A, 90533 }, + { 0x595B, 90536 }, + { 0x595C, 90539 }, + { 0x595D, 90542 }, + { 0x595E, 90545 }, + { 0x595F, 90548 }, + { 0x5960, 90551 }, + { 0x5961, 90554 }, + { 0x5962, 90557 }, + { 0x5963, 90560 }, + { 0x5964, 90563 }, + { 0x5965, 90566 }, + { 0x5966, 90569 }, + { 0x5967, 90572 }, + { 0x5968, 90575 }, + { 0x5969, 90578 }, + { 0x596A, 92783 }, + { 0x596B, 90581 }, + { 0x596C, 90584 }, + { 0x596D, 90587 }, + { 0x596E, 90590 }, + { 0x596F, 90593 }, + { 0x5970, 90596 }, + { 0x5971, 92799 }, + { 0x5972, 92802 }, + { 0x5973, 92805 }, + { 0x5974, 90599 }, + { 0x5975, 90602 }, + { 0x5976, 90605 }, + { 0x5977, 90608 }, + { 0x5978, 90611 }, + { 0x5979, 90614 }, + { 0x597A, 90617 }, + { 0x597B, 90620 }, + { 0x597C, 92808 }, + { 0x597D, 90623 }, + { 0x597E, 90626 }, + { 0x597F, 90629 }, + { 0x5980, 90632 }, + { 0x5981, 90635 }, + { 0x5982, 90638 }, + { 0x5983, 90641 }, + { 0x5984, 90644 }, + { 0x5985, 90647 }, + { 0x5986, 90650 }, + { 0x5987, 90653 }, + { 0x5988, 90656 }, + { 0x5989, 90659 }, + { 0x598A, 90662 }, + { 0x598B, 90665 }, + { 0x598C, 90668 }, + { 0x598D, 90671 }, + { 0x598E, 90674 }, + { 0x598F, 90677 }, + { 0x5990, 90680 }, + { 0x5991, 90683 }, + { 0x5992, 90686 }, + { 0x5993, 92811 }, + { 0x5994, 90689 }, + { 0x5995, 90692 }, + { 0x5996, 90695 }, + { 0x5997, 90698 }, + { 0x5998, 90701 }, + { 0x5999, 90704 }, + { 0x599A, 90707 }, + { 0x599B, 90710 }, + { 0x599C, 90713 }, + { 0x599D, 90716 }, + { 0x599E, 90719 }, + { 0x599F, 90722 }, + { 0x59A0, 90725 }, + { 0x59A1, 90728 }, + { 0x59A2, 90731 }, + { 0x59A3, 90734 }, + { 0x59A4, 90737 }, + { 0x59A5, 90740 }, + { 0x59A6, 90743 }, + { 0x59A7, 92814 }, + { 0x59A8, 90746 }, + { 0x59A9, 90749 }, + { 0x59AA, 90752 }, + { 0x59AB, 90755 }, + { 0x59AC, 92817 }, + { 0x59AD, 90758 }, + { 0x59AE, 90761 }, + { 0x59AF, 90764 }, + { 0x59B0, 92820 }, + { 0x59B1, 90767 }, + { 0x59B2, 90770 }, + { 0x59B3, 90773 }, + { 0x59B4, 90776 }, + { 0x59B5, 90779 }, + { 0x59B6, 90782 }, + { 0x59B7, 90785 }, + { 0x59B8, 90788 }, + { 0x59B9, 90791 }, + { 0x59BA, 90794 }, + { 0x59BB, 90797 }, + { 0x59BC, 90800 }, + { 0x59BD, 92823 }, + { 0x59BE, 90803 }, + { 0x59BF, 90806 }, + { 0x59C0, 92826 }, + { 0x59C1, 90809 }, + { 0x59C2, 90812 }, + { 0x59C3, 92829 }, + { 0x59C4, 92832 }, + { 0x59C5, 92835 }, + { 0x59C6, 92838 }, + { 0x59C7, 92841 }, + { 0x59C8, 92844 }, + { 0x59C9, 92847 }, + { 0x59CA, 92850 }, + { 0x59CB, 92853 }, + { 0x59CC, 90815 }, + { 0x59CD, 90818 }, + { 0x59CE, 92856 }, + { 0x59CF, 90821 }, + { 0x59D0, 90824 }, + { 0x59D1, 92859 }, + { 0x59D2, 90827 }, + { 0x59D3, 90830 }, + { 0x59D4, 90833 }, + { 0x59D5, 90836 }, + { 0x59D6, 90839 }, + { 0x59D7, 90842 }, + { 0x59D8, 90845 }, + { 0x59D9, 90848 }, + { 0x59DA, 90851 }, + { 0x59DB, 90854 }, + { 0x59DC, 90857 }, + { 0x59DD, 90860 }, + { 0x59DE, 90863 }, + { 0x59DF, 92862 }, + { 0x59E0, 92865 }, + { 0x59E1, 92868 }, + { 0x59E2, 92871 }, + { 0x59E3, 92874 }, + { 0x59E4, 92877 }, + { 0x59E5, 92880 }, + { 0x59E6, 92883 }, + { 0x59E7, 90866 }, + { 0x59E8, 90869 }, + { 0x59E9, 90872 }, + { 0x59EA, 90875 }, + { 0x59EB, 90878 }, + { 0x59EC, 90881 }, + { 0x59ED, 90884 }, + { 0x59EE, 90887 }, + { 0x59EF, 92886 }, + { 0x59F0, 90890 }, + { 0x59F1, 92889 }, + { 0x59F2, 90893 }, + { 0x59F3, 90896 }, + { 0x59F4, 90899 }, + { 0x59F5, 90902 }, + { 0x59F6, 90905 }, + { 0x59F7, 90908 }, + { 0x59F8, 90911 }, + { 0x59F9, 92892 }, + { 0x59FA, 90914 }, + { 0x59FB, 92895 }, + { 0x59FC, 90917 }, + { 0x59FD, 90920 }, + { 0x59FE, 90923 }, + { 0x59FF, 92898 }, + { 0x5A00, 90926 }, + { 0x5A01, 90929 }, + { 0x5A02, 90932 }, + { 0x5A03, 90935 }, + { 0x5A04, 90938 }, + { 0x5A05, 90941 }, + { 0x5A06, 90944 }, + { 0x5A07, 90947 }, + { 0x5A08, 92901 }, + { 0x5A09, 90950 }, + { 0x5A0A, 90953 }, + { 0x5A0B, 90956 }, + { 0x5A0C, 90959 }, + { 0x5A0D, 90962 }, + { 0x5A0E, 90965 }, + { 0x5A0F, 92904 }, + { 0x5A10, 90968 }, + { 0x5A11, 90971 }, + { 0x5A12, 90974 }, + { 0x5A13, 90977 }, + { 0x5A14, 92907 }, + { 0x5A15, 90980 }, + { 0x5A16, 90983 }, + { 0x5A17, 90986 }, + { 0x5A18, 90989 }, + { 0x5A19, 90992 }, + { 0x5A1A, 90995 }, + { 0x5A1B, 90998 }, + { 0x5A1C, 91001 }, + { 0x5A1D, 91004 }, + { 0x5A1E, 91007 }, + { 0x5A1F, 91010 }, + { 0x5A20, 91013 }, + { 0x5A21, 92910 }, + { 0x5A22, 91016 }, + { 0x5A23, 91019 }, + { 0x5A24, 91022 }, + { 0x5A25, 91025 }, + { 0x5A26, 91028 }, + { 0x5A27, 91031 }, + { 0x5A28, 91034 }, + { 0x5A29, 91037 }, + { 0x5A2A, 92913 }, + { 0x5A2B, 91040 }, + { 0x5A2C, 91043 }, + { 0x5A2D, 91046 }, + { 0x5A2E, 91049 }, + { 0x5A2F, 91052 }, + { 0x5A30, 91055 }, + { 0x5A31, 91058 }, + { 0x5A32, 91061 }, + { 0x5A33, 91064 }, + { 0x5A34, 91067 }, + { 0x5A35, 92916 }, + { 0x5A36, 91070 }, + { 0x5A37, 91073 }, + { 0x5A38, 91076 }, + { 0x5A39, 91079 }, + { 0x5A3A, 91082 }, + { 0x5A3B, 91085 }, + { 0x5A3C, 92919 }, + { 0x5A3D, 91088 }, + { 0x5A3E, 92922 }, + { 0x5A3F, 91091 }, + { 0x5A40, 91094 }, + { 0x5A41, 91097 }, + { 0x5A42, 91100 }, + { 0x5A43, 91103 }, + { 0x5A44, 91106 }, + { 0x5A45, 91109 }, + { 0x5A46, 92925 }, + { 0x5A47, 91112 }, + { 0x5A48, 92928 }, + { 0x5A49, 91115 }, + { 0x5A4A, 92931 }, + { 0x5A4B, 91118 }, + { 0x5A4C, 91121 }, + { 0x5A4D, 91124 }, + { 0x5A4E, 91127 }, + { 0x5A4F, 92934 }, + { 0x5A50, 92937 }, + { 0x5A51, 92940 }, + { 0x5A52, 91130 }, + { 0x5A53, 91133 }, + { 0x5A54, 91140 }, + { 0x5A55, 91143 }, + { 0x5A56, 91146 }, + { 0x5A57, 91149 }, + { 0x5A58, 91152 }, + { 0x5A59, 91155 }, + { 0x5A5A, 92943 }, + { 0x5A5B, 91158 }, + { 0x5A5C, 92946 }, + { 0x5A5D, 92949 }, + { 0x5A5E, 91161 }, + { 0x5A5F, 91164 }, + { 0x5A60, 91167 }, + { 0x5A61, 91170 }, + { 0x5A62, 92952 }, + { 0x5A63, 91173 }, + { 0x5A64, 91176 }, + { 0x5A65, 91179 }, + { 0x5A66, 91182 }, + { 0x5A67, 91185 }, + { 0x5A68, 91188 }, + { 0x5A69, 91191 }, + { 0x5A6A, 91194 }, + { 0x5A6B, 91197 }, + { 0x5A6C, 92955 }, + { 0x5A6D, 91200 }, + { 0x5A6E, 91203 }, + { 0x5A6F, 91206 }, + { 0x5A70, 91209 }, + { 0x5A71, 91212 }, + { 0x5A72, 91215 }, + { 0x5A73, 92958 }, + { 0x5A74, 91218 }, + { 0x5A75, 91221 }, + { 0x5A76, 91224 }, + { 0x5A77, 91227 }, + { 0x5A78, 91230 }, + { 0x5A79, 91233 }, + { 0x5A7A, 91236 }, + { 0x5A7B, 91239 }, + { 0x5A7C, 91242 }, + { 0x5A7D, 91245 }, + { 0x5A7E, 92961 }, + { 0x5A7F, 91248 }, + { 0x5A80, 92964 }, + { 0x5A81, 91251 }, + { 0x5A82, 91254 }, + { 0x5A83, 91257 }, + { 0x5A84, 91260 }, + { 0x5A85, 91263 }, + { 0x5A86, 91266 }, + { 0x5A87, 92967 }, + { 0x5A88, 91269 }, + { 0x5A89, 91272 }, + { 0x5A8A, 92970 }, + { 0x5A8B, 91275 }, + { 0x5A8C, 91278 }, + { 0x5A8D, 91281 }, + { 0x5A8E, 91284 }, + { 0x5A8F, 91287 }, + { 0x5A90, 91290 }, + { 0x5A91, 91293 }, + { 0x5A92, 91296 }, + { 0x5A93, 91299 }, + { 0x5A94, 91302 }, + { 0x5A95, 91305 }, + { 0x5A96, 91308 }, + { 0x5A97, 91311 }, + { 0x5A98, 91314 }, + { 0x5A99, 91317 }, + { 0x5A9A, 92973 }, + { 0x5A9B, 91320 }, + { 0x5A9C, 91323 }, + { 0x5A9D, 91335 }, + { 0x5A9E, 91338 }, + { 0x5A9F, 91341 }, + { 0x5AA0, 91344 }, + { 0x5AA1, 91347 }, + { 0x5AA2, 92976 }, + { 0x5AA3, 91350 }, + { 0x5AA4, 91353 }, + { 0x5AA5, 91356 }, + { 0x5AA6, 91359 }, + { 0x5AA7, 92979 }, + { 0x5AA8, 91362 }, + { 0x5AA9, 92982 }, + { 0x5AAA, 91365 }, + { 0x5AAB, 92985 }, + { 0x5AAC, 91368 }, + { 0x5AAD, 91371 }, + { 0x5AAE, 91374 }, + { 0x5AAF, 91377 }, + { 0x5AB0, 91380 }, + { 0x5AB1, 91383 }, + { 0x5AB2, 91386 }, + { 0x5AB3, 91389 }, + { 0x5AB4, 91392 }, + { 0x5AB5, 91395 }, + { 0x5AB6, 91398 }, + { 0x5AB7, 91401 }, + { 0x5AB8, 91404 }, + { 0x5AB9, 91407 }, + { 0x5ABA, 92988 }, + { 0x5ABB, 91410 }, + { 0x5ABC, 91413 }, + { 0x5ABD, 91416 }, + { 0x5ABE, 91419 }, + { 0x5ABF, 92991 }, + { 0x5AC0, 91422 }, + { 0x5AC1, 91425 }, + { 0x5AC2, 91432 }, + { 0x5AC3, 92994 }, + { 0x5AC4, 92997 }, + { 0x5AC5, 91435 }, + { 0x5AC6, 91438 }, + { 0x5AC7, 93000 }, + { 0x5AC8, 91441 }, + { 0x5AC9, 91444 }, + { 0x5ACA, 91447 }, + { 0x5ACB, 91450 }, + { 0x5ACC, 91453 }, + { 0x5ACD, 91456 }, + { 0x5ACE, 91459 }, + { 0x5ACF, 93003 }, + { 0x5AD0, 91462 }, + { 0x5AD1, 91465 }, + { 0x5AD2, 93006 }, + { 0x5AD3, 93009 }, + { 0x5AD4, 93012 }, + { 0x5AD5, 93015 }, + { 0x5AD6, 93018 }, + { 0x5AD7, 93021 }, + { 0x5AD8, 93024 }, + { 0x5AD9, 93027 }, + { 0x5ADA, 91468 }, + { 0x5ADB, 91471 }, + { 0x5ADC, 91474 }, + { 0x5ADD, 93030 }, + { 0x5ADE, 91477 }, + { 0x5ADF, 93033 }, + { 0x5AE0, 91480 }, + { 0x5AE1, 93036 }, + { 0x5AE2, 91483 }, + { 0x5AE3, 91486 }, + { 0x5AE4, 91489 }, + { 0x5AE5, 91492 }, + { 0x5AE6, 91495 }, + { 0x5AE7, 93039 }, + { 0x5AE8, 91498 }, + { 0x5AE9, 91501 }, + { 0x5AEA, 93042 }, + { 0x5AEB, 91504 }, + { 0x5AEC, 91507 }, + { 0x5AED, 91510 }, + { 0x5AEE, 91513 }, + { 0x5AEF, 93045 }, + { 0x5AF0, 91516 }, + { 0x5AF1, 91519 }, + { 0x5AF2, 91522 }, + { 0x5AF3, 93048 }, + { 0x5AF4, 91525 }, + { 0x5AF5, 91528 }, + { 0x5AF6, 93051 }, + { 0x5AF7, 93054 }, + { 0x5AF8, 91531 }, + { 0x5AF9, 91534 }, + { 0x5AFA, 91537 }, + { 0x5AFB, 91540 }, + { 0x5AFC, 91543 }, + { 0x5AFD, 91546 }, + { 0x5AFE, 91549 }, + { 0x5AFF, 93057 }, + { 0x5B00, 91552 }, + { 0x5B01, 91555 }, + { 0x5B02, 91558 }, + { 0x5B03, 91561 }, + { 0x5B04, 91564 }, + { 0x5B05, 91567 }, + { 0x5B06, 91570 }, + { 0x5B07, 91573 }, + { 0x5B08, 91576 }, + { 0x5B09, 91579 }, + { 0x5B0A, 91582 }, + { 0x5B0B, 91585 }, + { 0x5B0C, 91588 }, + { 0x5B0D, 91591 }, + { 0x5B0E, 91594 }, + { 0x5B0F, 91597 }, + { 0x5B10, 91600 }, + { 0x5B11, 91603 }, + { 0x5B12, 91606 }, + { 0x5B13, 91609 }, + { 0x5B14, 91612 }, + { 0x5B15, 91615 }, + { 0x5B16, 93060 }, + { 0x5B17, 93063 }, + { 0x5B18, 91618 }, + { 0x5B19, 91621 }, + { 0x5B1A, 91624 }, + { 0x5B1B, 91627 }, + { 0x5B1C, 91630 }, + { 0x5B1D, 91633 }, + { 0x5B1E, 91636 }, + { 0x5B1F, 93066 }, + { 0x5B20, 91639 }, + { 0x5B21, 91642 }, + { 0x5B22, 91645 }, + { 0x5B23, 91648 }, + { 0x5B24, 91651 }, + { 0x5B25, 91654 }, + { 0x5B26, 91657 }, + { 0x5B27, 91660 }, + { 0x5B28, 93069 }, + { 0x5B29, 91663 }, + { 0x5B2A, 93072 }, + { 0x5B2B, 91666 }, + { 0x5B2C, 93075 }, + { 0x5B2D, 91669 }, + { 0x5B2E, 91672 }, + { 0x5B2F, 93078 }, + { 0x5B30, 91675 }, + { 0x5B31, 91678 }, + { 0x5B32, 91681 }, + { 0x5B33, 91684 }, + { 0x5B34, 91687 }, + { 0x5B35, 93081 }, + { 0x5B36, 93084 }, + { 0x5B37, 93087 }, + { 0x5B38, 93090 }, + { 0x5B39, 93093 }, + { 0x5B3A, 93637 }, + { 0x5B3B, 93096 }, + { 0x5B3C, 93099 }, + { 0x5B3D, 93102 }, + { 0x5B3E, 93105 }, + { 0x5B3F, 93108 }, + { 0x5B40, 93111 }, + { 0x5B41, 93114 }, + { 0x5B42, 93117 }, + { 0x5B43, 93120 }, + { 0x5B44, 93123 }, + { 0x5B45, 93126 }, + { 0x5B46, 93129 }, + { 0x5B47, 93640 }, + { 0x5B48, 93132 }, + { 0x5B49, 93135 }, + { 0x5B4A, 93138 }, + { 0x5B4B, 93141 }, + { 0x5B4C, 93144 }, + { 0x5B4D, 93147 }, + { 0x5B4E, 93150 }, + { 0x5B4F, 93153 }, + { 0x5B50, 93156 }, + { 0x5B51, 93159 }, + { 0x5B52, 93162 }, + { 0x5B53, 93165 }, + { 0x5B54, 93168 }, + { 0x5B55, 93643 }, + { 0x5B56, 93171 }, + { 0x5B57, 93646 }, + { 0x5B58, 93174 }, + { 0x5B59, 93177 }, + { 0x5B5A, 93180 }, + { 0x5B5B, 93183 }, + { 0x5B5C, 93186 }, + { 0x5B5D, 93189 }, + { 0x5B5E, 93192 }, + { 0x5B5F, 93649 }, + { 0x5B60, 93195 }, + { 0x5B61, 93198 }, + { 0x5B62, 93201 }, + { 0x5B63, 93204 }, + { 0x5B64, 93652 }, + { 0x5B65, 91690 }, + { 0x5B66, 93207 }, + { 0x5B67, 91693 }, + { 0x5B68, 91696 }, + { 0x5B69, 91699 }, + { 0x5B6A, 91702 }, + { 0x5B6B, 93210 }, + { 0x5B6C, 91705 }, + { 0x5B6D, 93213 }, + { 0x5B6E, 93216 }, + { 0x5B6F, 93219 }, + { 0x5B70, 93222 }, + { 0x5B71, 93225 }, + { 0x5B72, 93228 }, + { 0x5B73, 91708 }, + { 0x5B74, 91711 }, + { 0x5B75, 91714 }, + { 0x5B76, 91717 }, + { 0x5B77, 93231 }, + { 0x5B78, 93234 }, + { 0x5B79, 93237 }, + { 0x5B7A, 91720 }, + { 0x5B7B, 91723 }, + { 0x5B7C, 91726 }, + { 0x5B7D, 91729 }, + { 0x5B7E, 91732 }, + { 0x5B7F, 91735 }, + { 0x5B80, 91738 }, + { 0x5B81, 91741 }, + { 0x5B82, 91744 }, + { 0x5B83, 93240 }, + { 0x5B84, 91747 }, + { 0x5B85, 93243 }, + { 0x5B86, 91750 }, + { 0x5B87, 91753 }, + { 0x5B88, 91756 }, + { 0x5B89, 91759 }, + { 0x5B8A, 93246 }, + { 0x5B8B, 91762 }, + { 0x5B8C, 93249 }, + { 0x5B8D, 91765 }, + { 0x5B8E, 91768 }, + { 0x5B8F, 91771 }, + { 0x5B90, 91774 }, + { 0x5B91, 93252 }, + { 0x5B92, 91777 }, + { 0x5B93, 93255 }, + { 0x5B94, 91780 }, + { 0x5B95, 91783 }, + { 0x5B96, 91786 }, + { 0x5B97, 93258 }, + { 0x5B98, 91789 }, + { 0x5B99, 91792 }, + { 0x5B9A, 91795 }, + { 0x5B9B, 93261 }, + { 0x5B9C, 93264 }, + { 0x5B9D, 93267 }, + { 0x5B9E, 93270 }, + { 0x5B9F, 91798 }, + { 0x5BA0, 91801 }, + { 0x5BA1, 91804 }, + { 0x5BA2, 91807 }, + { 0x5BA3, 91810 }, + { 0x5BA4, 91813 }, + { 0x5BA5, 91816 }, + { 0x5BA6, 91819 }, + { 0x5BA7, 91822 }, + { 0x5BA8, 91825 }, + { 0x5BA9, 91828 }, + { 0x5BAA, 91831 }, + { 0x5BAB, 91834 }, + { 0x5BAC, 91837 }, + { 0x5BAD, 93273 }, + { 0x5BAE, 93276 }, + { 0x5BAF, 91840 }, + { 0x5BB0, 91843 }, + { 0x5BB1, 93279 }, + { 0x5BB2, 91846 }, + { 0x5BB3, 91849 }, + { 0x5BB4, 93282 }, + { 0x5BB5, 91852 }, + { 0x5BB6, 91855 }, + { 0x5BB7, 91858 }, + { 0x5BB8, 91861 }, + { 0x5BB9, 91864 }, + { 0x5BBA, 91867 }, + { 0x5BBB, 91870 }, + { 0x5BBC, 91873 }, + { 0x5BBD, 91876 }, + { 0x5BBE, 91879 }, + { 0x5BBF, 91882 }, + { 0x5BC0, 91885 }, + { 0x5BC1, 91888 }, + { 0x5BC2, 91891 }, + { 0x5BC3, 91894 }, + { 0x5BC4, 91897 }, + { 0x5BC5, 91900 }, + { 0x5BC6, 93285 }, + { 0x5BC7, 91903 }, + { 0x5BC8, 93288 }, + { 0x5BC9, 93291 }, + { 0x5BCA, 91906 }, + { 0x5BCB, 91909 }, + { 0x5BCC, 91912 }, + { 0x5BCD, 91915 }, + { 0x5BCE, 91918 }, + { 0x5BCF, 91921 }, + { 0x5BD0, 91924 }, + { 0x5BD1, 93294 }, + { 0x5BD2, 91927 }, + { 0x5BD3, 91930 }, + { 0x5BD4, 91933 }, + { 0x5BD5, 91936 }, + { 0x5BD6, 91939 }, + { 0x5BD7, 91942 }, + { 0x5BD8, 93297 }, + { 0x5BD9, 91945 }, + { 0x5BDA, 91948 }, + { 0x5BDB, 91951 }, + { 0x5BDC, 91954 }, + { 0x5BDD, 91957 }, + { 0x5BDE, 91960 }, + { 0x5BDF, 91963 }, + { 0x5BE0, 91966 }, + { 0x5BE1, 91969 }, + { 0x5BE2, 91972 }, + { 0x5BE3, 91975 }, + { 0x5BE4, 91978 }, + { 0x5BE5, 91981 }, + { 0x5BE6, 91984 }, + { 0x5BE7, 91987 }, + { 0x5BE8, 93300 }, + { 0x5BE9, 91990 }, + { 0x5BEA, 91993 }, + { 0x5BEB, 91996 }, + { 0x5BEC, 91999 }, + { 0x5BED, 93303 }, + { 0x5BEE, 92002 }, + { 0x5BEF, 92005 }, + { 0x5BF0, 92008 }, + { 0x5BF1, 92011 }, + { 0x5BF2, 92014 }, + { 0x5BF3, 92017 }, + { 0x5BF4, 92020 }, + { 0x5BF5, 92023 }, + { 0x5BF6, 93306 }, + { 0x5BF7, 93309 }, + { 0x5BF8, 92026 }, + { 0x5BF9, 92029 }, + { 0x5BFA, 92032 }, + { 0x5BFB, 93312 }, + { 0x5BFC, 92035 }, + { 0x5BFD, 92038 }, + { 0x5BFE, 92041 }, + { 0x5BFF, 92044 }, + { 0x5C00, 92047 }, + { 0x5C01, 92050 }, + { 0x5C02, 92053 }, + { 0x5C03, 92056 }, + { 0x5C04, 92059 }, + { 0x5C05, 93315 }, + { 0x5C06, 93318 }, + { 0x5C07, 92062 }, + { 0x5C08, 92065 }, + { 0x5C09, 92068 }, + { 0x5C0A, 92071 }, + { 0x5C0B, 92074 }, + { 0x5C0C, 92077 }, + { 0x5C0D, 92080 }, + { 0x5C0E, 92083 }, + { 0x5C0F, 92086 }, + { 0x5C10, 93321 }, + { 0x5C11, 92089 }, + { 0x5C12, 92092 }, + { 0x5C13, 92095 }, + { 0x5C14, 92098 }, + { 0x5C15, 92101 }, + { 0x5C16, 92104 }, + { 0x5C17, 92107 }, + { 0x5C18, 92110 }, + { 0x5C19, 92113 }, + { 0x5C1A, 92116 }, + { 0x5C1B, 92119 }, + { 0x5C1C, 92122 }, + { 0x5C1D, 92125 }, + { 0x5C1E, 92128 }, + { 0x5C1F, 93324 }, + { 0x5C20, 92131 }, + { 0x5C21, 92134 }, + { 0x5C22, 92137 }, + { 0x5C23, 92140 }, + { 0x5C24, 93327 }, + { 0x5C25, 92143 }, + { 0x5C26, 93330 }, + { 0x5C27, 92146 }, + { 0x5C28, 93333 }, + { 0x5C29, 92149 }, + { 0x5C2A, 92152 }, + { 0x5C2B, 93336 }, + { 0x5C2C, 92155 }, + { 0x5C2D, 92158 }, + { 0x5C2E, 92161 }, + { 0x5C2F, 92164 }, + { 0x5C30, 92167 }, + { 0x5C31, 93339 }, + { 0x5C32, 92170 }, + { 0x5C33, 92173 }, + { 0x5C34, 92176 }, + { 0x5C35, 92179 }, + { 0x5C36, 92182 }, + { 0x5C37, 92185 }, + { 0x5C38, 92188 }, + { 0x5C39, 92191 }, + { 0x5C3A, 92194 }, + { 0x5C3B, 92197 }, + { 0x5C3C, 92200 }, + { 0x5C3D, 92203 }, + { 0x5C3E, 92206 }, + { 0x5C3F, 92209 }, + { 0x5C40, 92212 }, + { 0x5C41, 92215 }, + { 0x5C42, 93342 }, + { 0x5C43, 92218 }, + { 0x5C44, 93345 }, + { 0x5C45, 92221 }, + { 0x5C46, 92224 }, + { 0x5C47, 92227 }, + { 0x5C48, 92235 }, + { 0x5C49, 92238 }, + { 0x5C4A, 92241 }, + { 0x5C4B, 92244 }, + { 0x5C4C, 92247 }, + { 0x5C4D, 92250 }, + { 0x5C4E, 93348 }, + { 0x5C4F, 93351 }, + { 0x5C50, 92253 }, + { 0x5C51, 92256 }, + { 0x5C52, 92259 }, + { 0x5C53, 92262 }, + { 0x5C54, 92265 }, + { 0x5C55, 92268 }, + { 0x5C56, 92271 }, + { 0x5C57, 92274 }, + { 0x5C58, 92277 }, + { 0x5C59, 92280 }, + { 0x5C5A, 92283 }, + { 0x5C5B, 92286 }, + { 0x5C5C, 92289 }, + { 0x5C5D, 92292 }, + { 0x5C5E, 92295 }, + { 0x5C5F, 92298 }, + { 0x5C60, 92301 }, + { 0x5C61, 93354 }, + { 0x5C62, 92304 }, + { 0x5C63, 92307 }, + { 0x5C64, 92310 }, + { 0x5C65, 92313 }, + { 0x5C66, 92316 }, + { 0x5C67, 92319 }, + { 0x5C68, 93357 }, + { 0x5C69, 92322 }, + { 0x5C6A, 92325 }, + { 0x5C6B, 92328 }, + { 0x5C6C, 93360 }, + { 0x5C6D, 92331 }, + { 0x5C6E, 92334 }, + { 0x5C6F, 92337 }, + { 0x5C70, 92340 }, + { 0x5C71, 92343 }, + { 0x5C72, 92346 }, + { 0x5C73, 92349 }, + { 0x5C74, 92352 }, + { 0x5C75, 92355 }, + { 0x5C76, 92358 }, + { 0x5C77, 92361 }, + { 0x5C78, 93363 }, + { 0x5C79, 93366 }, + { 0x5C7A, 93369 }, + { 0x5C7B, 93372 }, + { 0x5C7C, 93375 }, + { 0x5C7D, 93378 }, + { 0x5C7E, 93381 }, + { 0x5C7F, 93384 }, + { 0x5C80, 93387 }, + { 0x5C81, 92364 }, + { 0x5C82, 93390 }, + { 0x5C83, 92367 }, + { 0x5C84, 92370 }, + { 0x5C85, 92373 }, + { 0x5C86, 92376 }, + { 0x5C87, 92379 }, + { 0x5C88, 93393 }, + { 0x5C89, 93396 }, + { 0x5C8A, 92382 }, + { 0x5C8B, 92385 }, + { 0x5C8C, 92388 }, + { 0x5C8D, 92391 }, + { 0x5C8E, 93399 }, + { 0x5C8F, 93402 }, + { 0x5C90, 93405 }, + { 0x5C91, 92394 }, + { 0x5C92, 93411 }, + { 0x5C93, 93414 }, + { 0x5C94, 92397 }, + { 0x5C95, 92400 }, + { 0x5C96, 92403 }, + { 0x5C97, 92406 }, + { 0x5C98, 92409 }, + { 0x5C99, 92412 }, + { 0x5C9A, 92415 }, + { 0x5C9B, 92418 }, + { 0x5C9C, 93417 }, + { 0x5C9D, 93420 }, + { 0x5C9E, 93423 }, + { 0x5C9F, 93426 }, + { 0x5CA0, 93429 }, + { 0x5CA1, 93432 }, + { 0x5CA2, 93435 }, + { 0x5CA3, 93438 }, + { 0x5CA4, 93441 }, + { 0x5CA5, 93444 }, + { 0x5CA6, 93447 }, + { 0x5CA7, 93450 }, + { 0x5CA8, 92421 }, + { 0x5CA9, 92424 }, + { 0x5CAA, 92427 }, + { 0x5CAB, 93453 }, + { 0x5CAC, 92430 }, + { 0x5CAD, 92433 }, + { 0x5CAE, 92436 }, + { 0x5CAF, 92439 }, + { 0x5CB0, 92442 }, + { 0x5CB1, 93456 }, + { 0x5CB2, 92445 }, + { 0x5CB3, 93459 }, + { 0x5CB4, 92448 }, + { 0x5CB5, 93462 }, + { 0x5CB6, 92451 }, + { 0x5CB7, 93465 }, + { 0x5CB8, 92454 }, + { 0x5CB9, 92457 }, + { 0x5CBA, 93468 }, + { 0x5CBB, 92460 }, + { 0x5CBC, 92463 }, + { 0x5CBD, 92466 }, + { 0x5CBE, 92469 }, + { 0x5CBF, 93471 }, + { 0x5CC0, 92472 }, + { 0x5CC1, 92475 }, + { 0x5CC2, 92478 }, + { 0x5CC3, 93474 }, + { 0x5CC4, 92481 }, + { 0x5CC5, 92484 }, + { 0x5CC6, 92487 }, + { 0x5CC7, 93477 }, + { 0x5CC8, 92490 }, + { 0x5CC9, 92493 }, + { 0x5CCA, 92496 }, + { 0x5CCB, 92499 }, + { 0x5CCC, 92502 }, + { 0x5CCD, 92505 }, + { 0x5CCE, 93480 }, + { 0x5CCF, 92508 }, + { 0x5CD0, 93483 }, + { 0x5CD1, 92511 }, + { 0x5CD2, 92514 }, + { 0x5CD3, 92517 }, + { 0x5CD4, 92520 }, + { 0x5CD5, 93486 }, + { 0x5CD6, 92523 }, + { 0x5CD7, 92526 }, + { 0x5CD8, 92529 }, + { 0x5CD9, 93489 }, + { 0x5CDA, 92532 }, + { 0x5CDB, 93492 }, + { 0x5CDC, 92535 }, + { 0x5CDD, 92538 }, + { 0x5CDE, 92541 }, + { 0x5CDF, 92544 }, + { 0x5CE0, 92547 }, + { 0x5CE1, 92550 }, + { 0x5CE2, 93495 }, + { 0x5CE3, 92553 }, + { 0x5CE4, 92561 }, + { 0x5CE5, 92564 }, + { 0x5CE6, 92567 }, + { 0x5CE7, 92570 }, + { 0x5CE8, 93498 }, + { 0x5CE9, 93501 }, + { 0x5CEA, 92573 }, + { 0x5CEB, 92576 }, + { 0x5CEC, 93504 }, + { 0x5CED, 92579 }, + { 0x5CEE, 92582 }, + { 0x5CEF, 93507 }, + { 0x5CF0, 92585 }, + { 0x5CF1, 93510 }, + { 0x5CF2, 92588 }, + { 0x5CF3, 92591 }, + { 0x5CF4, 92594 }, + { 0x5CF5, 92597 }, + { 0x5CF6, 92600 }, + { 0x5CF7, 92603 }, + { 0x5CF8, 92606 }, + { 0x5CF9, 92609 }, + { 0x5CFA, 92612 }, + { 0x5CFB, 93513 }, + { 0x5CFC, 93516 }, + { 0x5CFD, 93519 }, + { 0x5CFE, 93522 }, + { 0x5CFF, 92615 }, + { 0x5D00, 93525 }, + { 0x5D01, 93528 }, + { 0x5D02, 92618 }, + { 0x5D03, 93531 }, + { 0x5D04, 92621 }, + { 0x5D05, 93534 }, + { 0x5D06, 92624 }, + { 0x5D07, 92627 }, + { 0x5D08, 92630 }, + { 0x5D09, 92633 }, + { 0x5D0A, 92636 }, + { 0x5D0B, 92639 }, + { 0x5D0C, 92642 }, + { 0x5D0D, 92645 }, + { 0x5D0E, 92648 }, + { 0x5D0F, 92651 }, + { 0x5D10, 93537 }, + { 0x5D11, 93540 }, + { 0x5D12, 93543 }, + { 0x5D13, 93546 }, + { 0x5D14, 93549 }, + { 0x5D15, 93552 }, + { 0x5D16, 93555 }, + { 0x5D17, 93558 }, + { 0x5D18, 93561 }, + { 0x5D19, 92654 }, + { 0x5D1A, 93564 }, + { 0x5D1B, 93567 }, + { 0x5D1C, 93570 }, + { 0x5D1D, 93573 }, + { 0x5D1E, 93576 }, + { 0x5D1F, 93579 }, + { 0x5D20, 93582 }, + { 0x5D21, 93585 }, + { 0x5D22, 92687 }, + { 0x5D23, 92690 }, + { 0x5D24, 92693 }, + { 0x5D25, 92696 }, + { 0x5D26, 92699 }, + { 0x5D27, 92702 }, + { 0x5D28, 92705 }, + { 0x5D29, 93588 }, + { 0x5D2A, 93591 }, + { 0x5D2B, 92708 }, + { 0x5D2C, 92711 }, + { 0x5D2D, 92714 }, + { 0x5D2E, 92717 }, + { 0x5D2F, 92720 }, + { 0x5D30, 92723 }, + { 0x5D31, 92726 }, + { 0x5D32, 92729 }, + { 0x5D33, 92732 }, + { 0x5D34, 92735 }, + { 0x5D35, 92738 }, + { 0x5D36, 92741 }, + { 0x5D37, 92744 }, + { 0x5D38, 92747 }, + { 0x5D39, 92750 }, + { 0x5D3A, 92753 }, + { 0x5D3B, 92756 }, + { 0x5D3C, 92759 }, + { 0x5D3D, 92762 }, + { 0x5D3E, 92765 }, + { 0x5D3F, 92768 }, + { 0x5D40, 92771 }, + { 0x5D41, 92774 }, + { 0x5D42, 92777 }, + { 0x5D43, 92780 }, + { 0x5D44, 93408 }, + { 0x5D45, 93767 }, + { 0x5D46, 93771 }, + { 0x5D47, 93605 }, + { 0x5D48, 93622 }, + { 0x5D49, 93599 }, + { 0x5D4A, 93616 }, + { 0x5D4B, 93655 }, + { 0x5D4C, 92791 }, + { 0x5D4D, 90348 }, + { 0x5D4E, 93628 }, + { 0x5D4F, 93594 }, + { 0x5D50, 93611 }, + { 0x5D51, 92795 }, + { 0x5D52, 90352 }, + { 0x5D53, 92786 }, + { 0x5D54, 90343 }, + { 0x5D55, 93633 }, + { 0x5D56, 91136 }, + { 0x5D57, 91331 }, + { 0x5D58, 91428 }, + { 0x5D59, 91326 }, + { 0x5D5A, 92230 }, + { 0x5D5B, 92556 }, + { 0x5D5C, 93690 }, + { 0x5D5D, 93750 }, + { 0x5D5E, 93707 }, + { 0x5D5F, 93683 }, + { 0x5D60, 93669 }, + { 0x5D61, 93757 }, + { 0x5D62, 93713 }, + { 0x5D63, 93743 }, + { 0x5D64, 93697 }, + { 0x5D65, 93729 }, + { 0x5D66, 93721 }, + { 0x5D67, 93663 }, + { 0x5D68, 93675 }, + { 0x5D69, 93735 }, + { 0x5D6A, 93659 }, + { 0x5D6B, 93775 }, + { 0x5D6C, 93777 }, + { 0x5D6D, 93779 }, + { 0x5D6E, 93781 }, + { 0x5D6F, 93783 }, + { 0x5D70, 93785 }, + { 0x5D71, 93787 }, + { 0x5D72, 93789 }, + { 0x5D73, 93791 }, + { 0x5D74, 93793 }, + { 0x5D75, 93795 }, + { 0x5D76, 93797 }, + { 0x5D77, 93799 }, + { 0x5D78, 93801 }, + { 0x5D79, 93803 }, + { 0x5D7A, 93805 }, + { 0x5D7B, 93807 }, + { 0x5D7C, 93809 }, + { 0x5D7D, 93811 }, + { 0x5D7E, 93813 }, + { 0x5D7F, 93815 }, + { 0x5D80, 93817 }, + { 0x5D81, 93819 }, + { 0x5D82, 93821 }, + { 0x5D83, 93823 }, + { 0x5D84, 93825 }, + { 0x5D85, 93827 }, + { 0x5D86, 93829 }, + { 0x5D87, 93831 }, + { 0x5D88, 93833 }, + { 0x5D89, 93835 }, + { 0x5D8A, 93837 }, + { 0x5D8B, 93839 }, + { 0x5D8C, 93841 }, + { 0x5D8D, 93843 }, + { 0x5D8E, 93845 }, + { 0x5D8F, 93847 }, + { 0x5D90, 93849 }, + { 0x5D91, 93851 }, + { 0x5D92, 93853 }, + { 0x5D93, 93855 }, + { 0x5D94, 93857 }, + { 0x5D95, 93859 }, + { 0x5D96, 93861 }, + { 0x5D97, 93863 }, + { 0x5D98, 93865 }, + { 0x5D99, 93867 }, + { 0x5D9A, 93869 }, + { 0x5D9B, 93871 }, + { 0x5D9C, 93873 }, + { 0x5D9D, 93875 }, + { 0x5D9E, 93877 }, + { 0x5D9F, 93879 }, + { 0x5DA0, 93881 }, + { 0x5DA1, 93883 }, + { 0x5DA2, 93885 }, + { 0x5DA3, 93887 }, + { 0x5DA4, 93889 }, + { 0x5DA5, 93891 }, + { 0x5DA6, 93893 }, + { 0x5DA7, 93895 }, + { 0x5DA8, 93897 }, + { 0x5DA9, 93899 }, + { 0x5DAA, 93901 }, + { 0x5DAB, 93903 }, + { 0x5DAC, 93905 }, + { 0x5DAD, 93907 }, + { 0x5DAE, 93909 }, + { 0x5DAF, 93911 }, + { 0x5DB0, 93913 }, + { 0x5DB1, 93915 }, + { 0x5DB2, 93917 }, + { 0x5DB3, 93919 }, + { 0x5DB4, 93921 }, + { 0x5DB5, 93923 }, + { 0x5DB6, 93925 }, + { 0x5DB7, 93927 }, + { 0x5DB8, 93929 }, + { 0x5DB9, 93931 }, + { 0x5DBA, 93933 }, + { 0x5DBB, 93935 }, + { 0x5DBC, 93937 }, + { 0x5DBD, 93939 }, + { 0x5DBE, 93941 }, + { 0x5DBF, 93943 }, + { 0x5DC0, 93945 }, + { 0x5DC1, 93947 }, + { 0x5DC2, 93949 }, + { 0x5DC3, 93951 }, + { 0x5DC4, 93953 }, + { 0x5DC5, 93955 }, + { 0x5DC6, 93957 }, + { 0x5DC7, 93959 }, + { 0x5DC8, 93961 }, + { 0x5DC9, 93963 }, + { 0x5DCA, 93965 }, + { 0x5DCB, 93967 }, + { 0x5DCC, 93969 }, + { 0x5DCD, 93971 }, + { 0x5DCE, 93973 }, + { 0x5DCF, 93975 }, + { 0x5DD0, 93977 }, + { 0x5DD1, 93979 }, + { 0x5DD2, 93981 }, + { 0x5DD3, 93983 }, + { 0x5DD4, 93985 }, + { 0x5DD5, 93987 }, + { 0x5DD6, 93989 }, + { 0x5DD7, 93991 }, + { 0x5DD8, 93993 }, + { 0x5DD9, 93995 }, + { 0x5DDA, 93997 }, + { 0x5DDB, 93999 }, + { 0x5DDC, 94001 }, + { 0x5DDD, 94003 }, + { 0x5DDE, 94005 }, + { 0x5DDF, 94007 }, + { 0x5DE0, 94009 }, + { 0x5DE1, 94011 }, + { 0x5DE2, 94013 }, + { 0x5DE3, 94015 }, + { 0x5DE4, 94017 }, + { 0x5DE5, 94019 }, + { 0x5DE6, 94021 }, + { 0x5DE7, 94023 }, + { 0x5DE8, 94025 }, + { 0x5DE9, 94027 }, + { 0x5DEA, 94029 }, + { 0x5DEB, 94031 }, + { 0x5DEC, 94033 }, + { 0x5DED, 94035 }, + { 0x5DEE, 94037 }, + { 0x5DEF, 94039 }, + { 0x5DF0, 94041 }, + { 0x5DF1, 94043 }, + { 0x5DF2, 94045 }, + { 0x5DF3, 94047 }, + { 0x5DF4, 94049 }, + { 0x5DF5, 94051 }, + { 0x5DF6, 94053 }, + { 0x5DF7, 94055 }, + { 0x5DF8, 94057 }, + { 0x5DF9, 94059 }, + { 0x5DFA, 94061 }, + { 0x5DFB, 94063 }, + { 0x5DFC, 94065 }, + { 0x5DFD, 94067 }, + { 0x5DFE, 94069 }, + { 0x5DFF, 94071 }, + { 0x5E00, 94073 }, + { 0x5E01, 94075 }, + { 0x5E02, 94077 }, + { 0x5E03, 94079 }, + { 0x5E04, 94081 }, + { 0x5E05, 94083 }, + { 0x5E06, 94085 }, + { 0x5E07, 94087 }, + { 0x5E08, 94089 }, + { 0x5E09, 94091 }, + { 0x5E0A, 94093 }, + { 0x5E0B, 94095 }, + { 0x5E0C, 94097 }, + { 0x5E0D, 94099 }, + { 0x5E0E, 94101 }, + { 0x5E0F, 94103 }, + { 0x5E10, 94105 }, + { 0x5E11, 94107 }, + { 0x5E12, 94109 }, + { 0x5E13, 94111 }, + { 0x5E14, 94113 }, + { 0x5E15, 94115 }, + { 0x5E16, 94117 }, + { 0x5E17, 94119 }, + { 0x5E18, 94121 }, + { 0x5E19, 94123 }, + { 0x5E1A, 94125 }, + { 0x5E1B, 94127 }, + { 0x5E1C, 94129 }, + { 0x5E1D, 94131 }, + { 0x5E1E, 94133 }, + { 0x5E1F, 94135 }, + { 0x5E20, 94137 }, + { 0x5E21, 94139 }, + { 0x5E22, 94141 }, + { 0x5E23, 94143 }, + { 0x5E24, 94145 }, + { 0x5E25, 94147 }, + { 0x5E26, 94149 }, + { 0x5E27, 94151 }, + { 0x5E28, 94153 }, + { 0x5E29, 94155 }, + { 0x5E2A, 94157 }, + { 0x5E2B, 94159 }, + { 0x5E2C, 94161 }, + { 0x5E2D, 94163 }, + { 0x5E2E, 94165 }, + { 0x5E2F, 94167 }, + { 0x5E30, 94169 }, + { 0x5E31, 94171 }, + { 0x5E32, 94173 }, + { 0x5E33, 94175 }, + { 0x5E34, 94177 }, + { 0x5E35, 94179 }, + { 0x5E36, 94181 }, + { 0x5E37, 94183 }, + { 0x5E38, 94185 }, + { 0x5E39, 94187 }, + { 0x5E3A, 94189 }, + { 0x5E3B, 94191 }, + { 0x5E3C, 94193 }, + { 0x5E3D, 94195 }, + { 0x5E3E, 94197 }, + { 0x5E3F, 94199 }, + { 0x5E40, 94201 }, + { 0x5E41, 94203 }, + { 0x5E42, 94205 }, + { 0x5E43, 94207 }, + { 0x5E44, 94209 }, + { 0x5E45, 94211 }, + { 0x5E46, 94213 }, + { 0x5E47, 94215 }, + { 0x5E48, 94217 }, + { 0x5E49, 94219 }, + { 0x5E4A, 94221 }, + { 0x5E4B, 94223 }, + { 0x5E4C, 94225 }, + { 0x5E4D, 94227 }, + { 0x5E4E, 94229 }, + { 0x5E4F, 94231 }, + { 0x5E50, 94233 }, + { 0x5E51, 94235 }, + { 0x5E52, 94237 }, + { 0x5E53, 94239 }, + { 0x5E54, 94241 }, + { 0x5E55, 94243 }, + { 0x5E56, 94245 }, + { 0x5E57, 94247 }, + { 0x5E58, 94249 }, + { 0x5E59, 94251 }, + { 0x5E5A, 94253 }, + { 0x5E5B, 94255 }, + { 0x5E5C, 94257 }, + { 0x5E5D, 94259 }, + { 0x5E5E, 94261 }, + { 0x5E5F, 94263 }, + { 0x5E60, 94265 }, + { 0x5E61, 94267 }, + { 0x5E62, 94269 }, + { 0x5E63, 94271 }, + { 0x5E64, 94273 }, + { 0x5E65, 94275 }, + { 0x5E66, 94277 }, + { 0x5E67, 94279 }, + { 0x5E68, 94281 }, + { 0x5E69, 94283 }, + { 0x5E6A, 94285 }, + { 0x5E6B, 94287 }, + { 0x5E6C, 94289 }, + { 0x5E6D, 94291 }, + { 0x5E6E, 94293 }, + { 0x5E6F, 94295 }, + { 0x5E70, 94297 }, + { 0x5E71, 94299 }, + { 0x5E72, 94301 }, + { 0x5E73, 94303 }, + { 0x5E74, 94305 }, + { 0x5E75, 94307 }, + { 0x5E76, 94309 }, + { 0x5E77, 94311 }, + { 0x5E78, 94313 }, + { 0x5E79, 94315 }, + { 0x5E7A, 94317 }, + { 0x5E7B, 94319 }, + { 0x5E7C, 94321 }, + { 0x5E7D, 94323 }, + { 0x5E7E, 94325 }, + { 0x5E7F, 94327 }, + { 0x5E80, 94329 }, + { 0x5E81, 94331 }, + { 0x5E82, 94333 }, + { 0x5E83, 94335 }, + { 0x5E84, 94337 }, + { 0x5E85, 94339 }, + { 0x5E86, 94341 }, + { 0x5E87, 94343 }, + { 0x5E88, 94345 }, + { 0x5E89, 94347 }, + { 0x5E8A, 94349 }, + { 0x5E8B, 94351 }, + { 0x5E8C, 94353 }, + { 0x5E8D, 94355 }, + { 0x5E8E, 94357 }, + { 0x5E8F, 94359 }, + { 0x5E90, 94361 }, + { 0x5E91, 94363 }, + { 0x5E92, 94365 }, + { 0x5E93, 94367 }, + { 0x5E94, 94369 }, + { 0x5E95, 94371 }, + { 0x5E96, 94373 }, + { 0x5E97, 94375 }, + { 0x5E98, 94377 }, + { 0x5E99, 94379 }, + { 0x5E9A, 94381 }, + { 0x5E9B, 94383 }, + { 0x5E9C, 94385 }, + { 0x5E9D, 94387 }, + { 0x5E9E, 94389 }, + { 0x5E9F, 94391 }, + { 0x5EA0, 94393 }, + { 0x5EA1, 94395 }, + { 0x5EA2, 94397 }, + { 0x5EA3, 94399 }, + { 0x5EA4, 94401 }, + { 0x5EA5, 94403 }, + { 0x5EA6, 94405 }, + { 0x5EA7, 94407 }, + { 0x5EA8, 94409 }, + { 0x5EA9, 94411 }, + { 0x5EAA, 94413 }, + { 0x5EAB, 94415 }, + { 0x5EAC, 94417 }, + { 0x5EAD, 94419 }, + { 0x5EAE, 94421 }, + { 0x5EAF, 94423 }, + { 0x5EB0, 94425 }, + { 0x5EB1, 94427 }, + { 0x5EB2, 94429 }, + { 0x5EB3, 94431 }, + { 0x5EB4, 94433 }, + { 0x5EB5, 94435 }, + { 0x5EB6, 94437 }, + { 0x5EB7, 94439 }, + { 0x5EB8, 94441 }, + { 0x5EB9, 94443 }, + { 0x5EBA, 94445 }, + { 0x5EBB, 94447 }, + { 0x5EBC, 94449 }, + { 0x5EBD, 94451 }, + { 0x5EBE, 94453 }, + { 0x5EBF, 94455 }, + { 0x5EC0, 94457 }, + { 0x5EC1, 94459 }, + { 0x5EC2, 94461 }, + { 0x5EC3, 94463 }, + { 0x5EC4, 94465 }, + { 0x5EC5, 94467 }, + { 0x5EC6, 94469 }, + { 0x5EC7, 94471 }, + { 0x5EC8, 94473 }, + { 0x5EC9, 94475 }, + { 0x5ECA, 94477 }, + { 0x5ECB, 94479 }, + { 0x5ECC, 94481 }, + { 0x5ECD, 94483 }, + { 0x5ECE, 94485 }, + { 0x5ECF, 94487 }, + { 0x5ED0, 94489 }, + { 0x5ED1, 94491 }, + { 0x5ED2, 94493 }, + { 0x5ED3, 94495 }, + { 0x5ED4, 94497 }, + { 0x5ED5, 94499 }, + { 0x5ED6, 94501 }, + { 0x5ED7, 94503 }, + { 0x5ED8, 94505 }, + { 0x5ED9, 94507 }, + { 0x5EDA, 94509 }, + { 0x5EDB, 94511 }, + { 0x5EDC, 94513 }, + { 0x5EDD, 94515 }, + { 0x5EDE, 94517 }, + { 0x5EDF, 94519 }, + { 0x5EE0, 94521 }, + { 0x5EE1, 94523 }, + { 0x5EE2, 94525 }, + { 0x5EE3, 94527 }, + { 0x5EE4, 94529 }, + { 0x5EE5, 94531 }, + { 0x5EE6, 94533 }, + { 0x5EE7, 94535 }, + { 0x5EE8, 94537 }, + { 0x5EE9, 94539 }, + { 0x5EEA, 94541 }, + { 0x5EEB, 94543 }, + { 0x5EEC, 94545 }, + { 0x5EED, 94547 }, + { 0x5EEE, 94549 }, + { 0x5EEF, 94551 }, + { 0x5EF0, 94553 }, + { 0x5EF1, 94555 }, + { 0x5EF2, 94557 }, + { 0x5EF3, 94559 }, + { 0x5EF4, 94561 }, + { 0x5EF5, 94563 }, + { 0x5EF6, 94565 }, + { 0x5EF7, 94567 }, + { 0x5EF8, 94569 }, + { 0x5EF9, 94571 }, + { 0x5EFA, 94573 }, + { 0x5EFB, 94575 }, + { 0x5EFC, 94577 }, + { 0x5EFD, 94579 }, + { 0x5EFE, 94581 }, + { 0x5EFF, 94583 }, + { 0x5F00, 94585 }, + { 0x5F01, 94587 }, + { 0x5F02, 94589 }, + { 0x5F03, 94591 }, + { 0x5F04, 94593 }, + { 0x5F05, 94595 }, + { 0x5F06, 94597 }, + { 0x5F07, 94599 }, + { 0x5F08, 94601 }, + { 0x5F09, 94603 }, + { 0x5F0A, 94605 }, + { 0x5F0B, 94607 }, + { 0x5F0C, 94609 }, + { 0x5F0D, 94611 }, + { 0x5F0E, 94613 }, + { 0x5F0F, 94615 }, + { 0x5F10, 94617 }, + { 0x5F11, 94619 }, + { 0x5F12, 94621 }, + { 0x5F13, 94623 }, + { 0x5F14, 94625 }, + { 0x5F15, 94627 }, + { 0x5F16, 94629 }, + { 0x5F17, 94631 }, + { 0x5F18, 94633 }, + { 0x5F19, 94635 }, + { 0x5F1A, 94637 }, + { 0x5F1B, 94639 }, + { 0x5F1C, 94641 }, + { 0x5F1D, 94643 }, + { 0x5F1E, 94645 }, + { 0x5F1F, 94647 }, + { 0x5F20, 94649 }, + { 0x5F21, 94651 }, + { 0x5F22, 94653 }, + { 0x5F23, 94655 }, + { 0x5F24, 94657 }, + { 0x5F25, 94659 }, + { 0x5F26, 94661 }, + { 0x5F27, 94663 }, + { 0x5F28, 94665 }, + { 0x5F29, 94667 }, + { 0x5F2A, 94669 }, + { 0x5F2B, 94671 }, + { 0x5F2C, 94673 }, + { 0x5F2D, 94675 }, + { 0x5F2E, 94677 }, + { 0x5F2F, 94679 }, + { 0x5F30, 94681 }, + { 0x5F31, 94683 }, + { 0x5F32, 94685 }, + { 0x5F33, 94687 }, + { 0x5F34, 94689 }, + { 0x5F35, 94691 }, + { 0x5F36, 94693 }, + { 0x5F37, 94695 }, + { 0x5F38, 94697 }, + { 0x5F39, 94699 }, + { 0x5F3A, 94701 }, + { 0x5F3B, 94703 }, + { 0x5F3C, 94705 }, + { 0x5F3D, 94707 }, + { 0x5F3E, 94709 }, + { 0x5F3F, 94711 }, + { 0x5F40, 94713 }, + { 0x5F41, 94715 }, + { 0x5F42, 94717 }, + { 0x5F43, 94719 }, + { 0x5F44, 94721 }, + { 0x5F45, 94723 }, + { 0x5F46, 94725 }, + { 0x5F47, 94727 }, + { 0x5F48, 94729 }, + { 0x5F49, 94731 }, + { 0x5F4A, 94733 }, + { 0x5F4B, 94735 }, + { 0x5F4C, 94737 }, + { 0x5F4D, 94739 }, + { 0x5F4E, 94741 }, + { 0x5F4F, 94743 }, + { 0x5F50, 94745 }, + { 0x5F51, 94747 }, + { 0x5F52, 94749 }, + { 0x5F53, 94751 }, + { 0x5F54, 94753 }, + { 0x5F55, 94755 }, + { 0x5F56, 94757 }, + { 0x5F57, 94759 }, + { 0x5F58, 94761 }, + { 0x5F59, 94763 }, + { 0x5F5A, 94765 }, + { 0x5F5B, 94767 }, + { 0x5F5C, 94769 }, + { 0x5F5D, 94771 }, + { 0x5F5E, 94773 }, + { 0x5F5F, 94775 }, + { 0x5F60, 94777 }, + { 0x5F61, 94779 }, + { 0x5F62, 94781 }, + { 0x5F63, 94783 }, + { 0x5F64, 94785 }, + { 0x5F65, 94787 }, + { 0x5F66, 94789 }, + { 0x5F67, 94791 }, + { 0x5F68, 94793 }, + { 0x5F69, 94795 }, + { 0x5F6A, 94797 }, + { 0x5F6B, 94799 }, + { 0x5F6C, 94801 }, + { 0x5F6D, 94803 }, + { 0x5F6E, 94805 }, + { 0x5F6F, 94807 }, + { 0x5F70, 94809 }, + { 0x5F71, 94811 }, + { 0x5F72, 94813 }, + { 0x5F73, 94815 }, + { 0x5F74, 94817 }, + { 0x5F75, 94819 }, + { 0x5F76, 94821 }, + { 0x5F77, 94823 }, + { 0x5F78, 94825 }, + { 0x5F79, 94827 }, + { 0x5F7A, 94829 }, + { 0x5F7B, 94831 }, + { 0x5F7C, 94833 }, + { 0x5F7D, 94835 }, + { 0x5F7E, 94837 }, + { 0x5F7F, 94839 }, + { 0x5F80, 94841 }, + { 0x5F81, 94843 }, + { 0x5F82, 94845 }, + { 0x5F83, 94847 }, + { 0x5F84, 94849 }, + { 0x5F85, 94851 }, + { 0x5F86, 94853 }, + { 0x5F87, 94855 }, + { 0x5F88, 94857 }, + { 0x5F89, 94859 }, + { 0x5F8A, 94861 }, + { 0x5F8B, 94863 }, + { 0x5F8C, 94865 }, + { 0x5F8D, 94867 }, + { 0x5F8E, 94869 }, + { 0x5F8F, 94871 }, + { 0x5F90, 94873 }, + { 0x5F91, 94875 }, + { 0x5F92, 94877 }, + { 0x5F93, 94879 }, + { 0x5F94, 94881 }, + { 0x5F95, 94883 }, + { 0x5F96, 94885 }, + { 0x5F97, 94887 }, + { 0x5F98, 94889 }, + { 0x5F99, 94891 }, + { 0x5F9A, 94893 }, + { 0x5F9B, 94895 }, + { 0x5F9C, 94897 }, + { 0x5F9D, 94899 }, + { 0x5F9E, 94901 }, + { 0x5F9F, 94903 }, + { 0x5FA0, 94905 }, + { 0x5FA1, 94907 }, + { 0x5FA2, 94909 }, + { 0x5FA3, 94911 }, + { 0x5FA4, 94913 }, + { 0x5FA5, 94915 }, + { 0x5FA6, 94917 }, + { 0x5FA7, 94919 }, + { 0x5FA8, 94921 }, + { 0x5FA9, 94923 }, + { 0x5FAA, 94925 }, + { 0x5FAB, 94927 }, + { 0x5FAC, 94929 }, + { 0x5FAD, 94931 }, + { 0x5FAE, 94933 }, + { 0x5FAF, 94935 }, + { 0x5FB0, 94937 }, + { 0x5FB1, 94939 }, + { 0x5FB2, 94941 }, + { 0x5FB3, 94943 }, + { 0x5FB4, 94945 }, + { 0x5FB5, 94947 }, + { 0x5FB6, 94949 }, + { 0x5FB7, 94951 }, + { 0x5FB8, 94953 }, + { 0x5FB9, 94955 }, + { 0x5FBA, 94957 }, + { 0x5FBB, 94959 }, + { 0x5FBC, 94961 }, + { 0x5FBD, 94963 }, + { 0x5FBE, 94965 }, + { 0x5FBF, 94967 }, + { 0x5FC0, 94969 }, + { 0x5FC1, 94971 }, + { 0x5FC2, 94973 }, + { 0x5FC3, 94975 }, + { 0x5FC4, 94977 }, + { 0x5FC5, 94979 }, + { 0x5FC6, 94981 }, + { 0x5FC7, 94983 }, + { 0x5FC8, 94985 }, + { 0x5FC9, 94987 }, + { 0x5FCA, 94989 }, + { 0x5FCB, 94991 }, + { 0x5FCC, 94993 }, + { 0x5FCD, 94995 }, + { 0x5FCE, 94997 }, + { 0x5FCF, 94999 }, + { 0x5FD0, 95001 }, + { 0x5FD1, 95003 }, + { 0x5FD2, 95005 }, + { 0x5FD3, 95007 }, + { 0x5FD4, 95009 }, + { 0x5FD5, 95011 }, + { 0x5FD6, 95013 }, + { 0x5FD7, 95015 }, + { 0x5FD8, 95017 }, + { 0x5FD9, 95019 }, + { 0x5FDA, 95021 }, + { 0x5FDB, 95023 }, + { 0x5FDC, 95025 }, + { 0x5FDD, 95027 }, + { 0x5FDE, 95029 }, + { 0x5FDF, 95031 }, + { 0x5FE0, 95033 }, + { 0x5FE1, 95035 }, + { 0x5FE2, 95037 }, + { 0x5FE3, 95039 }, + { 0x5FE4, 95041 }, + { 0x5FE5, 95043 }, + { 0x5FE6, 95045 }, + { 0x5FE7, 95047 }, + { 0x5FE8, 95049 }, + { 0x5FE9, 95051 }, + { 0x5FEA, 95053 }, + { 0x5FEB, 95055 }, + { 0x5FEC, 95057 }, + { 0x5FED, 95059 }, + { 0x5FEE, 95061 }, + { 0x5FEF, 95063 }, + { 0x5FF0, 95065 }, + { 0x5FF1, 95067 }, + { 0x5FF2, 95069 }, + { 0x5FF3, 95071 }, + { 0x5FF4, 95073 }, + { 0x5FF5, 95075 }, + { 0x5FF6, 95077 }, + { 0x5FF7, 95079 }, + { 0x5FF8, 95081 }, + { 0x5FF9, 95083 }, + { 0x5FFA, 95085 }, + { 0x5FFB, 95087 }, + { 0x5FFC, 95089 }, + { 0x5FFD, 95091 }, + { 0x5FFE, 95093 }, + { 0x5FFF, 95095 }, + { 0x6000, 95097 }, + { 0x6001, 95099 }, + { 0x6002, 95101 }, + { 0x6003, 95103 }, + { 0x6004, 95105 }, + { 0x6005, 95107 }, + { 0x6006, 95109 }, + { 0x6007, 95111 }, + { 0x6008, 95113 }, + { 0x6009, 95115 }, + { 0x600A, 95117 }, + { 0x600B, 95119 }, + { 0x600C, 95121 }, + { 0x600D, 95123 }, + { 0x600E, 95125 }, + { 0x600F, 95127 }, + { 0x6010, 95129 }, + { 0x6011, 95131 }, + { 0x6012, 95133 }, + { 0x6013, 95135 }, + { 0x6014, 95137 }, + { 0x6015, 95139 }, + { 0x6016, 95141 }, + { 0x6017, 95143 }, + { 0x6018, 95145 }, + { 0x6019, 95147 }, + { 0x601A, 95149 }, + { 0x601B, 95151 }, + { 0x601C, 95153 }, + { 0x601D, 95155 }, + { 0x601E, 95157 }, + { 0x601F, 95159 }, + { 0x6020, 95161 }, + { 0x6021, 95163 }, + { 0x6022, 95165 }, + { 0x6023, 95167 }, + { 0x6024, 95169 }, + { 0x6025, 95171 }, + { 0x6026, 95173 }, + { 0x6027, 95175 }, + { 0x6028, 95177 }, + { 0x6029, 95179 }, + { 0x602A, 95181 }, + { 0x602B, 95183 }, + { 0x602C, 95185 }, + { 0x602D, 95187 }, + { 0x602E, 95189 }, + { 0x602F, 95191 }, + { 0x6030, 95193 }, + { 0x6031, 95195 }, + { 0x6032, 95197 }, + { 0x6033, 95199 }, + { 0x6034, 95201 }, + { 0x6035, 95203 }, + { 0x6036, 95205 }, + { 0x6037, 95207 }, + { 0x6038, 95209 }, + { 0x6039, 95211 }, + { 0x603A, 95213 }, + { 0x603B, 95215 }, + { 0x603C, 95217 }, + { 0x603D, 95219 }, + { 0x603E, 95221 }, + { 0x603F, 95223 }, + { 0x6040, 95225 }, + { 0x6041, 95227 }, + { 0x6042, 95229 }, + { 0x6043, 95231 }, + { 0x6044, 95233 }, + { 0x6045, 95235 }, + { 0x6046, 95237 }, + { 0x6047, 95239 }, + { 0x6048, 95241 }, + { 0x6049, 95243 }, + { 0x604A, 95245 }, + { 0x604B, 95247 }, + { 0x604C, 95249 }, + { 0x604D, 95251 }, + { 0x604E, 95253 }, + { 0x604F, 95255 }, + { 0x6050, 95257 }, + { 0x6051, 95259 }, + { 0x6052, 95261 }, + { 0x6053, 95263 }, + { 0x6054, 95265 }, + { 0x6055, 95267 }, + { 0x6056, 95269 }, + { 0x6057, 95271 }, + { 0x6058, 95273 }, + { 0x6059, 95275 }, + { 0x605A, 95277 }, + { 0x605B, 95279 }, + { 0x605C, 95281 }, + { 0x605D, 95283 }, + { 0x605E, 95285 }, + { 0x605F, 95287 }, + { 0x6060, 95289 }, + { 0x6061, 95291 }, + { 0x6062, 95293 }, + { 0x6063, 95295 }, + { 0x6064, 95297 }, + { 0x6065, 95299 }, + { 0x6066, 95301 }, + { 0x6067, 95303 }, + { 0x6068, 95305 }, + { 0x6069, 95307 }, + { 0x606A, 95309 }, + { 0x606B, 95311 }, + { 0x606C, 95313 }, + { 0x606D, 95315 }, + { 0x606E, 95317 }, + { 0x606F, 95319 }, + { 0x6070, 95321 }, + { 0x6071, 95323 }, + { 0x6072, 95325 }, + { 0x6073, 95327 }, + { 0x6074, 95329 }, + { 0x6075, 95331 }, + { 0x6076, 95333 }, + { 0x6077, 95335 }, + { 0x6078, 95337 }, + { 0x6079, 95339 }, + { 0x607A, 95341 }, + { 0x607B, 95343 }, + { 0x607C, 95345 }, + { 0x607D, 95347 }, + { 0x607E, 95349 }, + { 0x607F, 95351 }, + { 0x6080, 95353 }, + { 0x6081, 95355 }, + { 0x6082, 95357 }, + { 0x6083, 95359 }, + { 0x6084, 95361 }, + { 0x6085, 95363 }, + { 0x6086, 95365 }, + { 0x6087, 95367 }, + { 0x6088, 95369 }, + { 0x6089, 95371 }, + { 0x608A, 95373 }, + { 0x608B, 95375 }, + { 0x608C, 95377 }, + { 0x608D, 95379 }, + { 0x608E, 95381 }, + { 0x608F, 95383 }, + { 0x6090, 95385 }, + { 0x6091, 95387 }, + { 0x6092, 95389 }, + { 0x6093, 95391 }, + { 0x6094, 95393 }, + { 0x6095, 95395 }, + { 0x6096, 95397 }, + { 0x6097, 95399 }, + { 0x6098, 95401 }, + { 0x6099, 95403 }, + { 0x609A, 95405 }, + { 0x609B, 95407 }, + { 0x609C, 95409 }, + { 0x609D, 95411 }, + { 0x609E, 95413 }, + { 0x609F, 95415 }, + { 0x60A0, 95417 }, + { 0x60A1, 95419 }, + { 0x60A2, 95421 }, + { 0x60A3, 95423 }, + { 0x60A4, 95425 }, + { 0x60A5, 95427 }, + { 0x60A6, 95429 }, + { 0x60A7, 95431 }, + { 0x60A8, 95433 }, + { 0x60A9, 95435 }, + { 0x60AA, 95437 }, + { 0x60AB, 95439 }, + { 0x60AC, 95441 }, + { 0x60AD, 95443 }, + { 0x60AE, 95445 }, + { 0x60AF, 95447 }, + { 0x60B0, 95449 }, + { 0x60B1, 95451 }, + { 0x60B2, 95453 }, + { 0x60B3, 95455 }, + { 0x60B4, 95457 }, + { 0x60B5, 95459 }, + { 0x60B6, 95461 }, + { 0x60B7, 95463 }, + { 0x60B8, 95465 }, + { 0x60B9, 95467 }, + { 0x60BA, 95469 }, + { 0x60BB, 95471 }, + { 0x60BC, 95473 }, + { 0x60BD, 95475 }, + { 0x60BE, 95477 }, + { 0x60BF, 95479 }, + { 0x60C0, 95481 }, + { 0x60C1, 95483 }, + { 0x60C2, 95485 }, + { 0x60C3, 95487 }, + { 0x60C4, 95489 }, + { 0x60C5, 95491 }, + { 0x60C6, 95493 }, + { 0x60C7, 95495 }, + { 0x60C8, 95497 }, + { 0x60C9, 95499 }, + { 0x60CA, 95501 }, + { 0x60CB, 95503 }, + { 0x60CC, 95505 }, + { 0x60CD, 95507 }, + { 0x60CE, 95509 }, + { 0x60CF, 95511 }, + { 0x60D0, 95513 }, + { 0x60D1, 95515 }, + { 0x60D2, 95517 }, + { 0x60D3, 95519 }, + { 0x60D4, 95521 }, + { 0x60D5, 95523 }, + { 0x60D6, 95525 }, + { 0x60D7, 95527 }, + { 0x60D8, 95529 }, + { 0x60D9, 95531 }, + { 0x60DA, 95533 }, + { 0x60DB, 95535 }, + { 0x60DC, 95537 }, + { 0x60DD, 95539 }, + { 0x60DE, 95541 }, + { 0x60DF, 95543 }, + { 0x60E0, 95545 }, + { 0x60E1, 95547 }, + { 0x60E2, 95549 }, + { 0x60E3, 95551 }, + { 0x60E4, 95553 }, + { 0x60E5, 95555 }, + { 0x60E6, 95557 }, + { 0x60E7, 95559 }, + { 0x60E8, 95561 }, + { 0x60E9, 95563 }, + { 0x60EA, 95565 }, + { 0x60EB, 95567 }, + { 0x60EC, 95569 }, + { 0x60ED, 95571 }, + { 0x60EE, 95573 }, + { 0x60EF, 95575 }, + { 0x60F0, 95577 }, + { 0x60F1, 95579 }, + { 0x60F2, 95581 }, + { 0x60F3, 95583 }, + { 0x60F4, 95585 }, + { 0x60F5, 95587 }, + { 0x60F6, 95589 }, + { 0x60F7, 95591 }, + { 0x60F8, 95593 }, + { 0x60F9, 95595 }, + { 0x60FA, 95597 }, + { 0x60FB, 95599 }, + { 0x60FC, 95601 }, + { 0x60FD, 95603 }, + { 0x60FE, 95605 }, + { 0x60FF, 95607 }, + { 0x6100, 95609 }, + { 0x6101, 95611 }, + { 0x6102, 95613 }, + { 0x6103, 95615 }, + { 0x6104, 95617 }, + { 0x6105, 95619 }, + { 0x6106, 95621 }, + { 0x6107, 95623 }, + { 0x6108, 95625 }, + { 0x6109, 95627 }, + { 0x610A, 95629 }, + { 0x610B, 95631 }, + { 0x610C, 95633 }, + { 0x610D, 95635 }, + { 0x610E, 95637 }, + { 0x610F, 95639 }, + { 0x6110, 95641 }, + { 0x6111, 95643 }, + { 0x6112, 95645 }, + { 0x6113, 95647 }, + { 0x6114, 95649 }, + { 0x6115, 95651 }, + { 0x6116, 95653 }, + { 0x6117, 95655 }, + { 0x6118, 95657 }, + { 0x6119, 95659 }, + { 0x611A, 95661 }, + { 0x611B, 95663 }, + { 0x611C, 95665 }, + { 0x611D, 95667 }, + { 0x611E, 95669 }, + { 0x611F, 95671 }, + { 0x6120, 95673 }, + { 0x6121, 95675 }, + { 0x6122, 95677 }, + { 0x6123, 95679 }, + { 0x6124, 95681 }, + { 0x6125, 95683 }, + { 0x6126, 95685 }, + { 0x6127, 95687 }, + { 0x6128, 95689 }, + { 0x6129, 95691 }, + { 0x612A, 95693 }, + { 0x612B, 95695 }, + { 0x612C, 95697 }, + { 0x612D, 95699 }, + { 0x612E, 95701 }, + { 0x612F, 95703 }, + { 0x6130, 95705 }, + { 0x6131, 95707 }, + { 0x6132, 95709 }, + { 0x6133, 95711 }, + { 0x6134, 95713 }, + { 0x6135, 95715 }, + { 0x6136, 95717 }, + { 0x6137, 95719 }, + { 0x6138, 95721 }, + { 0x6139, 95723 }, + { 0x613A, 95725 }, + { 0x613B, 95727 }, + { 0x613C, 95729 }, + { 0x613D, 95731 }, + { 0x613E, 95733 }, + { 0x613F, 95735 }, + { 0x6140, 95737 }, + { 0x6141, 95739 }, + { 0x6142, 95741 }, + { 0x6143, 95743 }, + { 0x6144, 95745 }, + { 0x6145, 95747 }, + { 0x6146, 95749 }, + { 0x6147, 95751 }, + { 0x6148, 95753 }, + { 0x6149, 95755 }, + { 0x614A, 95757 }, + { 0x614B, 95759 }, + { 0x614C, 95761 }, + { 0x614D, 95763 }, + { 0x614E, 95765 }, + { 0x614F, 95767 }, + { 0x6150, 95769 }, + { 0x6151, 95771 }, + { 0x6152, 95773 }, + { 0x6153, 95775 }, + { 0x6154, 95777 }, + { 0x6155, 95779 }, + { 0x6156, 95781 }, + { 0x6157, 95783 }, + { 0x6158, 95785 }, + { 0x6159, 95787 }, + { 0x615A, 95789 }, + { 0x615B, 95791 }, + { 0x615C, 95793 }, + { 0x615D, 95795 }, + { 0x615E, 95797 }, + { 0x615F, 95799 }, + { 0x6160, 95801 }, + { 0x6161, 95803 }, + { 0x6162, 95805 }, + { 0x6163, 95807 }, + { 0x6164, 95809 }, + { 0x6165, 95811 }, + { 0x6166, 95813 }, + { 0x6167, 95815 }, + { 0x6168, 95817 }, + { 0x6169, 95819 }, + { 0x616A, 95821 }, + { 0x616B, 95823 }, + { 0x616C, 95825 }, + { 0x616D, 95827 }, + { 0x616E, 95829 }, + { 0x616F, 95831 }, + { 0x6170, 95833 }, + { 0x6171, 95835 }, + { 0x6172, 95837 }, + { 0x6173, 95839 }, + { 0x6174, 95841 }, + { 0x6175, 95843 }, + { 0x6176, 95845 }, + { 0x6177, 95847 }, + { 0x6178, 95849 }, + { 0x6179, 95851 }, + { 0x617A, 95853 }, + { 0x617B, 95855 }, + { 0x617C, 95857 }, + { 0x617D, 95859 }, + { 0x617E, 95861 }, + { 0x617F, 95863 }, + { 0x6180, 95865 }, + { 0x6181, 95867 }, + { 0x6182, 95869 }, + { 0x6183, 95871 }, + { 0x6184, 95873 }, + { 0x6185, 95875 }, + { 0x6186, 95877 }, + { 0x6187, 95879 }, + { 0x6188, 95881 }, + { 0x6189, 95883 }, + { 0x618A, 95885 }, + { 0x618B, 95887 }, + { 0x618C, 95889 }, + { 0x618D, 95891 }, + { 0x618E, 95893 }, + { 0x618F, 95895 }, + { 0x6190, 95897 }, + { 0x6191, 95899 }, + { 0x6192, 95901 }, + { 0x6193, 95903 }, + { 0x6194, 95905 }, + { 0x6195, 95907 }, + { 0x6196, 95909 }, + { 0x6197, 95911 }, + { 0x6198, 95913 }, + { 0x6199, 95915 }, + { 0x619A, 95917 }, + { 0x619B, 95919 }, + { 0x619C, 95921 }, + { 0x619D, 95923 }, + { 0x619E, 95925 }, + { 0x619F, 95927 }, + { 0x61A0, 95929 }, + { 0x61A1, 95931 }, + { 0x61A2, 95933 }, + { 0x61A3, 95935 }, + { 0x61A4, 95937 }, + { 0x61A5, 95939 }, + { 0x61A6, 95941 }, + { 0x61A7, 95943 }, + { 0x61A8, 95945 }, + { 0x61A9, 95947 }, + { 0x61AA, 95949 }, + { 0x61AB, 95951 }, + { 0x61AC, 95953 }, + { 0x61AD, 95955 }, + { 0x61AE, 95957 }, + { 0x61AF, 95959 }, + { 0x61B0, 95961 }, + { 0x61B1, 95963 }, + { 0x61B2, 95965 }, + { 0x61B3, 95967 }, + { 0x61B4, 95969 }, + { 0x61B5, 95971 }, + { 0x61B6, 95973 }, + { 0x61B7, 95975 }, + { 0x61B8, 95977 }, + { 0x61B9, 95979 }, + { 0x61BA, 95981 }, + { 0x61BB, 95983 }, + { 0x61BC, 95985 }, + { 0x61BD, 95987 }, + { 0x61BE, 95989 }, + { 0x61BF, 95991 }, + { 0x61C0, 95993 }, + { 0x61C1, 95995 }, + { 0x61C2, 95997 }, + { 0x61C3, 95999 }, + { 0x61C4, 96001 }, + { 0x61C5, 96003 }, + { 0x61C6, 96005 }, + { 0x61C7, 96007 }, + { 0x61C8, 96009 }, + { 0x61C9, 96011 }, + { 0x61CA, 96013 }, + { 0x61CB, 96015 }, + { 0x61CC, 96017 }, + { 0x61CD, 96019 }, + { 0x61CE, 96021 }, + { 0x61CF, 96023 }, + { 0x61D0, 96025 }, + { 0x61D1, 96027 }, + { 0x61D2, 96029 }, + { 0x61D3, 96031 }, + { 0x61D4, 96033 }, + { 0x61D5, 96035 }, + { 0x61D6, 96037 }, + { 0x61D7, 96039 }, + { 0x61D8, 96041 }, + { 0x61D9, 96043 }, + { 0x61DA, 96045 }, + { 0x61DB, 96047 }, + { 0x61DC, 96049 }, + { 0x61DD, 96051 }, + { 0x61DE, 96053 }, + { 0x61DF, 96055 }, + { 0x61E0, 96057 }, + { 0x61E1, 96059 }, + { 0x61E2, 96061 }, + { 0x61E3, 96063 }, + { 0x61E4, 96065 }, + { 0x61E5, 96067 }, + { 0x61E6, 96069 }, + { 0x61E7, 96071 }, + { 0x61E8, 96073 }, + { 0x61E9, 96075 }, + { 0x61EA, 96077 }, + { 0x61EB, 96079 }, + { 0x61EC, 96081 }, + { 0x61ED, 96083 }, + { 0x61EE, 96085 }, + { 0x61EF, 96087 }, + { 0x61F0, 96089 }, + { 0x61F1, 96091 }, + { 0x61F2, 96093 }, + { 0x61F3, 96095 }, + { 0x61F4, 96097 }, + { 0x61F5, 96099 }, + { 0x61F6, 96101 }, + { 0x61F7, 96103 }, + { 0x61F8, 96105 }, + { 0x61F9, 96107 }, + { 0x61FA, 96109 }, + { 0x61FB, 96111 }, + { 0x61FC, 96113 }, + { 0x61FD, 96115 }, + { 0x61FE, 96117 }, + { 0x61FF, 96119 }, + { 0x6200, 96121 }, + { 0x6201, 96123 }, + { 0x6202, 96125 }, + { 0x6203, 96127 }, + { 0x6204, 96129 }, + { 0x6205, 96131 }, + { 0x6206, 96133 }, + { 0x6207, 96135 }, + { 0x6208, 96137 }, + { 0x6209, 96139 }, + { 0x620A, 96141 }, + { 0x620B, 96143 }, + { 0x620C, 96145 }, + { 0x620D, 96147 }, + { 0x620E, 96149 }, + { 0x620F, 96151 }, + { 0x6210, 96153 }, + { 0x6211, 96155 }, + { 0x6212, 96157 }, + { 0x6213, 96159 }, + { 0x6214, 96161 }, + { 0x6215, 96163 }, + { 0x6216, 96165 }, + { 0x6217, 96167 }, + { 0x6218, 96169 }, + { 0x6219, 96171 }, + { 0x621A, 96173 }, + { 0x621B, 96175 }, + { 0x621C, 96177 }, + { 0x621D, 96179 }, + { 0x621E, 96181 }, + { 0x621F, 96183 }, + { 0x6220, 96185 }, + { 0x6221, 96187 }, + { 0x6222, 96189 }, + { 0x6223, 96191 }, + { 0x6224, 96193 }, + { 0x6225, 96195 }, + { 0x6226, 96197 }, + { 0x6227, 96199 }, + { 0x6228, 96201 }, + { 0x6229, 96203 }, + { 0x622A, 96205 }, + { 0x622B, 96207 }, + { 0x622C, 96209 }, + { 0x622D, 96211 }, + { 0x622E, 96213 }, + { 0x622F, 96215 }, + { 0x6230, 96217 }, + { 0x6231, 96219 }, + { 0x6232, 96221 }, + { 0x6233, 96223 }, + { 0x6234, 96225 }, + { 0x6235, 96227 }, + { 0x6236, 96229 }, + { 0x6237, 96231 }, + { 0x6238, 96233 }, + { 0x6239, 96235 }, + { 0x623A, 96237 }, + { 0x623B, 96239 }, + { 0x623C, 96241 }, + { 0x623D, 96243 }, + { 0x623E, 96245 }, + { 0x623F, 96247 }, + { 0x6240, 96249 }, + { 0x6241, 96251 }, + { 0x6242, 96253 }, + { 0x6243, 96255 }, + { 0x6244, 96257 }, + { 0x6245, 96259 }, + { 0x6246, 96261 }, + { 0x6247, 96263 }, + { 0x6248, 96265 }, + { 0x6249, 96267 }, + { 0x624A, 96269 }, + { 0x624B, 96271 }, + { 0x624C, 96273 }, + { 0x624D, 96275 }, + { 0x624E, 96277 }, + { 0x624F, 96279 }, + { 0x6250, 96281 }, + { 0x6251, 96283 }, + { 0x6252, 96285 }, + { 0x6253, 96287 }, + { 0x6254, 96289 }, + { 0x6255, 96291 }, + { 0x6256, 96293 }, + { 0x6257, 96295 }, + { 0x6258, 96297 }, + { 0x6259, 96299 }, + { 0x625A, 96301 }, + { 0x625B, 96303 }, + { 0x625C, 96305 }, + { 0x625D, 96307 }, + { 0x625E, 96309 }, + { 0x625F, 96311 }, + { 0x6260, 96313 }, + { 0x6261, 96315 }, + { 0x6262, 96317 }, + { 0x6263, 96319 }, + { 0x6264, 96321 }, + { 0x6265, 96323 }, + { 0x6266, 96325 }, + { 0x6267, 96327 }, + { 0x6268, 96329 }, + { 0x6269, 96331 }, + { 0x626A, 96333 }, + { 0x626B, 96335 }, + { 0x626C, 96337 }, + { 0x626D, 96339 }, + { 0x626E, 96341 }, + { 0x626F, 96343 }, + { 0x6270, 96345 }, + { 0x6271, 96347 }, + { 0x6272, 96349 }, + { 0x6273, 96351 }, + { 0x6274, 96353 }, + { 0x6275, 96355 }, + { 0x6276, 96357 }, + { 0x6277, 96359 }, + { 0x6278, 96361 }, + { 0x6279, 96363 }, + { 0x627A, 96365 }, + { 0x627B, 96367 }, + { 0x627C, 96369 }, + { 0x627D, 96371 }, + { 0x627E, 96373 }, + { 0x627F, 96375 }, + { 0x6280, 96377 }, + { 0x6281, 96379 }, + { 0x6282, 96381 }, + { 0x6283, 96383 }, + { 0x6284, 96385 }, + { 0x6285, 96387 }, + { 0x6286, 96389 }, + { 0x6287, 96391 }, + { 0x6288, 96393 }, + { 0x6289, 96395 }, + { 0x628A, 96397 }, + { 0x628B, 96399 }, + { 0x628C, 96401 }, + { 0x628D, 96403 }, + { 0x628E, 96405 }, + { 0x628F, 96407 }, + { 0x6290, 96409 }, + { 0x6291, 96411 }, + { 0x6292, 96413 }, + { 0x6293, 96415 }, + { 0x6294, 96417 }, + { 0x6295, 96419 }, + { 0x6296, 96421 }, + { 0x6297, 96423 }, + { 0x6298, 96425 }, + { 0x6299, 96427 }, + { 0x629A, 96429 }, + { 0x629B, 96431 }, + { 0x629C, 96433 }, + { 0x629D, 96435 }, + { 0x629E, 96437 }, + { 0x629F, 96439 }, + { 0x62A0, 96441 }, + { 0x62A1, 96443 }, + { 0x62A2, 96445 }, + { 0x62A3, 96447 }, + { 0x62A4, 96449 }, + { 0x62A5, 96451 }, + { 0x62A6, 96453 }, + { 0x62A7, 96455 }, + { 0x62A8, 96457 }, + { 0x62A9, 96459 }, + { 0x62AA, 96461 }, + { 0x62AB, 96463 }, + { 0x62AC, 96465 }, + { 0x62AD, 96467 }, + { 0x62AE, 96469 }, + { 0x62AF, 96471 }, + { 0x62B0, 96473 }, + { 0x62B1, 96475 }, + { 0x62B2, 96477 }, + { 0x62B3, 96479 }, + { 0x62B4, 96481 }, + { 0x62B5, 96483 }, + { 0x62B6, 96485 }, + { 0x62B7, 96487 }, + { 0x62B8, 96489 }, + { 0x62B9, 96491 }, + { 0x62BA, 96493 }, + { 0x62BB, 96495 }, + { 0x62BC, 96497 }, + { 0x62BD, 96499 }, + { 0x62BE, 96501 }, + { 0x62BF, 96503 }, + { 0x62C0, 96505 }, + { 0x62C1, 96507 }, + { 0x62C2, 96509 }, + { 0x62C3, 96511 }, + { 0x62C4, 96513 }, + { 0x62C5, 96515 }, + { 0x62C6, 96517 }, + { 0x62C7, 96519 }, + { 0x62C8, 96521 }, + { 0x62C9, 96523 }, + { 0x62CA, 96525 }, + { 0x62CB, 96527 }, + { 0x62CC, 96529 }, + { 0x62CD, 96531 }, + { 0x62CE, 96533 }, + { 0x62CF, 96535 }, + { 0x62D0, 96537 }, + { 0x62D1, 96539 }, + { 0x62D2, 96541 }, + { 0x62D3, 96543 }, + { 0x62D4, 96545 }, + { 0x62D5, 96547 }, + { 0x62D6, 96549 }, + { 0x62D7, 96551 }, + { 0x62D8, 96553 }, + { 0x62D9, 96555 }, + { 0x62DA, 96557 }, + { 0x62DB, 96559 }, + { 0x62DC, 96561 }, + { 0x62DD, 96563 }, + { 0x62DE, 96565 }, + { 0x62DF, 96567 }, + { 0x62E0, 96569 }, + { 0x62E1, 96571 }, + { 0x62E2, 96573 }, + { 0x62E3, 96575 }, + { 0x62E4, 96577 }, + { 0x62E5, 96579 }, + { 0x62E6, 96581 }, + { 0x62E7, 96583 }, + { 0x62E8, 96585 }, + { 0x62E9, 96587 }, + { 0x62EA, 96589 }, + { 0x62EB, 96591 }, + { 0x62EC, 96593 }, + { 0x62ED, 96595 }, + { 0x62EE, 96597 }, + { 0x62EF, 96599 }, + { 0x62F0, 96601 }, + { 0x62F1, 96603 }, + { 0x62F2, 96605 }, + { 0x62F3, 96607 }, + { 0x62F4, 96609 }, + { 0x62F5, 96611 }, + { 0x62F6, 96613 }, + { 0x62F7, 96615 }, + { 0x62F8, 96617 }, + { 0x62F9, 96619 }, + { 0x62FA, 96621 }, + { 0x62FB, 96623 }, + { 0x62FC, 96625 }, + { 0x62FD, 96627 }, + { 0x62FE, 96629 }, + { 0x62FF, 96631 }, + { 0x6300, 96633 }, + { 0x6301, 96635 }, + { 0x6302, 96637 }, + { 0x6303, 96639 }, + { 0x6304, 96641 }, + { 0x6305, 96643 }, + { 0x6306, 96645 }, + { 0x6307, 96647 }, + { 0x6308, 96649 }, + { 0x6309, 96651 }, + { 0x630A, 96653 }, + { 0x630B, 96655 }, + { 0x630C, 96657 }, + { 0x630D, 96659 }, + { 0x630E, 96661 }, + { 0x630F, 96663 }, + { 0x6310, 96665 }, + { 0x6311, 96667 }, + { 0x6312, 96669 }, + { 0x6313, 96671 }, + { 0x6314, 96673 }, + { 0x6315, 96675 }, + { 0x6316, 96677 }, + { 0x6317, 96679 }, + { 0x6318, 96681 }, + { 0x6319, 96683 }, + { 0x631A, 96685 }, + { 0x631B, 96687 }, + { 0x631C, 96689 }, + { 0x631D, 96691 }, + { 0x631E, 96693 }, + { 0x631F, 96695 }, + { 0x6320, 96697 }, + { 0x6321, 96699 }, + { 0x6322, 96701 }, + { 0x6323, 96703 }, + { 0x6324, 96705 }, + { 0x6325, 96707 }, + { 0x6326, 96709 }, + { 0x6327, 96711 }, + { 0x6328, 96713 }, + { 0x6329, 96715 }, + { 0x632A, 96717 }, + { 0x632B, 96719 }, + { 0x632C, 96721 }, + { 0x632D, 96723 }, + { 0x632E, 96725 }, + { 0x632F, 96727 }, + { 0x6330, 96729 }, + { 0x6331, 96731 }, + { 0x6332, 96733 }, + { 0x6333, 96735 }, + { 0x6334, 96737 }, + { 0x6335, 96739 }, + { 0x6336, 96741 }, + { 0x6337, 96743 }, + { 0x6338, 96745 }, + { 0x6339, 96747 }, + { 0x633A, 96749 }, + { 0x633B, 96751 }, + { 0x633C, 96753 }, + { 0x633D, 96755 }, + { 0x633E, 96757 }, + { 0x633F, 96759 }, + { 0x6340, 96761 }, + { 0x6341, 96763 }, + { 0x6342, 96765 }, + { 0x6343, 96767 }, + { 0x6344, 96769 }, + { 0x6345, 96771 }, + { 0x6346, 96773 }, + { 0x6347, 96775 }, + { 0x6348, 96777 }, + { 0x6349, 96779 }, + { 0x634A, 96781 }, + { 0x634B, 96783 }, + { 0x634C, 96785 }, + { 0x634D, 96787 }, + { 0x634E, 96789 }, + { 0x634F, 96791 }, + { 0x6350, 96793 }, + { 0x6351, 96795 }, + { 0x6352, 96797 }, + { 0x6353, 96799 }, + { 0x6354, 96801 }, + { 0x6355, 96803 }, + { 0x6356, 96805 }, + { 0x6357, 96807 }, + { 0x6358, 96809 }, + { 0x6359, 96811 }, + { 0x635A, 96813 }, + { 0x635B, 96815 }, + { 0x635C, 96817 }, + { 0x635D, 96819 }, + { 0x635E, 96821 }, + { 0x635F, 96823 }, + { 0x6360, 96825 }, + { 0x6361, 96827 }, + { 0x6362, 96829 }, + { 0x6363, 96831 }, + { 0x6364, 96833 }, + { 0x6365, 96835 }, + { 0x6366, 96837 }, + { 0x6367, 96839 }, + { 0x6368, 96841 }, + { 0x6369, 96843 }, + { 0x636A, 96845 }, + { 0x636B, 96847 }, + { 0x636C, 96849 }, + { 0x636D, 96851 }, + { 0x636E, 96853 }, + { 0x636F, 96855 }, + { 0x6370, 96857 }, + { 0x6371, 96859 }, + { 0x6372, 96861 }, + { 0x6373, 96863 }, + { 0x6374, 96865 }, + { 0x6375, 96867 }, + { 0x6376, 96869 }, + { 0x6377, 96871 }, + { 0x6378, 96873 }, + { 0x6379, 96875 }, + { 0x637A, 96877 }, + { 0x637B, 96879 }, + { 0x637C, 96881 }, + { 0x637D, 96883 }, + { 0x637E, 96885 }, + { 0x637F, 96887 }, + { 0x6380, 96889 }, + { 0x6381, 96891 }, + { 0x6382, 96893 }, + { 0x6383, 96895 }, + { 0x6384, 96897 }, + { 0x6385, 96899 }, + { 0x6386, 96901 }, + { 0x6387, 96903 }, + { 0x6388, 96905 }, + { 0x6389, 96907 }, + { 0x638A, 96909 }, + { 0x638B, 96911 }, + { 0x638C, 96913 }, + { 0x638D, 96915 }, + { 0x638E, 96917 }, + { 0x638F, 96919 }, + { 0x6390, 96921 }, + { 0x6391, 96923 }, + { 0x6392, 96925 }, + { 0x6393, 96927 }, + { 0x6394, 96929 }, + { 0x6395, 96931 }, + { 0x6396, 96933 }, + { 0x6397, 96935 }, + { 0x6398, 96937 }, + { 0x6399, 96939 }, + { 0x639A, 96941 }, + { 0x639B, 96943 }, + { 0x639C, 96945 }, + { 0x639D, 96947 }, + { 0x639E, 96949 }, + { 0x639F, 96951 }, + { 0x63A0, 96953 }, + { 0x63A1, 96955 }, + { 0x63A2, 96957 }, + { 0x63A3, 96959 }, + { 0x63A4, 96961 }, + { 0x63A5, 96963 }, + { 0x63A6, 96965 }, + { 0x63A7, 96967 }, + { 0x63A8, 96969 }, + { 0x63A9, 96971 }, + { 0x63AA, 96973 }, + { 0x63AB, 96975 }, + { 0x63AC, 96977 }, + { 0x63AD, 96979 }, + { 0x63AE, 96981 }, + { 0x63AF, 96983 }, + { 0x63B0, 96985 }, + { 0x63B1, 96987 }, + { 0x63B2, 96989 }, + { 0x63B3, 96991 }, + { 0x63B4, 96993 }, + { 0x63B5, 96995 }, + { 0x63B6, 96997 }, + { 0x63B7, 96999 }, + { 0x63B8, 97001 }, + { 0x63B9, 97003 }, + { 0x63BA, 97005 }, + { 0x63BB, 97007 }, + { 0x63BC, 97009 }, + { 0x63BD, 97011 }, + { 0x63BE, 97013 }, + { 0x63BF, 97015 }, + { 0x63C0, 97017 }, + { 0x63C1, 97019 }, + { 0x63C2, 97021 }, + { 0x63C3, 97023 }, + { 0x63C4, 97025 }, + { 0x63C5, 97027 }, + { 0x63C6, 97029 }, + { 0x63C7, 97031 }, + { 0x63C8, 97033 }, + { 0x63C9, 97035 }, + { 0x63CA, 97037 }, + { 0x63CB, 97039 }, + { 0x63CC, 97041 }, + { 0x63CD, 97043 }, + { 0x63CE, 97045 }, + { 0x63CF, 97047 }, + { 0x63D0, 97049 }, + { 0x63D1, 97051 }, + { 0x63D2, 97053 }, + { 0x63D3, 97055 }, + { 0x63D4, 97057 }, + { 0x63D5, 97059 }, + { 0x63D6, 97061 }, + { 0x63D7, 97063 }, + { 0x63D8, 97065 }, + { 0x63D9, 97067 }, + { 0x63DA, 97069 }, + { 0x63DB, 97071 }, + { 0x63DC, 97073 }, + { 0x63DD, 97075 }, + { 0x63DE, 97077 }, + { 0x63DF, 97079 }, + { 0x63E0, 97081 }, + { 0x63E1, 97083 }, + { 0x63E2, 97085 }, + { 0x63E3, 97087 }, + { 0x63E4, 97089 }, + { 0x63E5, 97091 }, + { 0x63E6, 97093 }, + { 0x63E7, 97095 }, + { 0x63E8, 97097 }, + { 0x63E9, 97099 }, + { 0x63EA, 97101 }, + { 0x63EB, 97103 }, + { 0x63EC, 97105 }, + { 0x63ED, 97107 }, + { 0x63EE, 97109 }, + { 0x63EF, 97111 }, + { 0x63F0, 97113 }, + { 0x63F1, 97115 }, + { 0x63F2, 97117 }, + { 0x63F3, 97119 }, + { 0x63F4, 97121 }, + { 0x63F5, 97123 }, + { 0x63F6, 97125 }, + { 0x63F7, 97127 }, + { 0x63F8, 97129 }, + { 0x63F9, 97131 }, + { 0x63FA, 97133 }, + { 0x63FB, 97135 }, + { 0x63FC, 97137 }, + { 0x63FD, 97139 }, + { 0x63FE, 97141 }, + { 0x63FF, 97143 }, + { 0x6400, 97145 }, + { 0x6401, 97147 }, + { 0x6402, 97149 }, + { 0x6403, 97151 }, + { 0x6404, 97153 }, + { 0x6405, 97155 }, + { 0x6406, 97157 }, + { 0x6407, 97159 }, + { 0x6408, 97161 }, + { 0x6409, 97163 }, + { 0x640A, 97165 }, + { 0x640B, 97167 }, + { 0x640C, 97169 }, + { 0x640D, 97171 }, + { 0x640E, 97173 }, + { 0x640F, 97175 }, + { 0x6410, 97177 }, + { 0x6411, 97179 }, + { 0x6412, 97181 }, + { 0x6413, 97183 }, + { 0x6414, 97185 }, + { 0x6415, 97187 }, + { 0x6416, 97189 }, + { 0x6417, 97191 }, + { 0x6418, 97193 }, + { 0x6419, 97195 }, + { 0x641A, 97197 }, + { 0x641B, 97199 }, + { 0x641C, 97201 }, + { 0x641D, 97203 }, + { 0x641E, 97205 }, + { 0x641F, 97207 }, + { 0x6420, 97209 }, + { 0x6421, 97211 }, + { 0x6422, 97213 }, + { 0x6423, 97215 }, + { 0x6424, 97217 }, + { 0x6425, 97219 }, + { 0x6426, 97221 }, + { 0x6427, 97223 }, + { 0x6428, 97225 }, + { 0x6429, 97227 }, + { 0x642A, 97229 }, + { 0x642B, 97231 }, + { 0x642C, 97233 }, + { 0x642D, 97235 }, + { 0x642E, 97237 }, + { 0x642F, 97239 }, + { 0x6430, 97241 }, + { 0x6431, 97243 }, + { 0x6432, 97245 }, + { 0x6433, 97247 }, + { 0x6434, 97249 }, + { 0x6435, 97251 }, + { 0x6436, 97253 }, + { 0x6437, 97255 }, + { 0x6438, 97257 }, + { 0x6439, 97259 }, + { 0x643A, 97261 }, + { 0x643B, 97263 }, + { 0x643C, 97265 }, + { 0x643D, 97267 }, + { 0x643E, 97269 }, + { 0x643F, 97271 }, + { 0x6440, 97273 }, + { 0x6441, 97275 }, + { 0x6442, 97277 }, + { 0x6443, 97279 }, + { 0x6444, 97281 }, + { 0x6445, 97283 }, + { 0x6446, 97285 }, + { 0x6447, 97287 }, + { 0x6448, 97289 }, + { 0x6449, 97291 }, + { 0x644A, 97293 }, + { 0x644B, 97295 }, + { 0x644C, 97297 }, + { 0x644D, 97299 }, + { 0x644E, 97301 }, + { 0x644F, 97303 }, + { 0x6450, 97305 }, + { 0x6451, 97307 }, + { 0x6452, 97309 }, + { 0x6453, 97311 }, + { 0x6454, 97313 }, + { 0x6455, 97315 }, + { 0x6456, 97317 }, + { 0x6457, 97319 }, + { 0x6458, 97321 }, + { 0x6459, 97323 }, + { 0x645A, 97325 }, + { 0x645B, 97327 }, + { 0x645C, 97329 }, + { 0x645D, 97331 }, + { 0x645E, 97333 }, + { 0x645F, 97335 }, + { 0x6460, 97337 }, + { 0x6461, 97339 }, + { 0x6462, 97341 }, + { 0x6463, 97343 }, + { 0x6464, 97345 }, + { 0x6465, 97347 }, + { 0x6466, 97349 }, + { 0x6467, 97351 }, + { 0x6468, 97353 }, + { 0x6469, 97355 }, + { 0x646A, 97357 }, + { 0x646B, 97359 }, + { 0x646C, 97361 }, + { 0x646D, 97363 }, + { 0x646E, 97365 }, + { 0x646F, 97367 }, + { 0x6470, 97369 }, + { 0x6471, 97371 }, + { 0x6472, 97373 }, + { 0x6473, 97375 }, + { 0x6474, 97377 }, + { 0x6475, 97379 }, + { 0x6476, 97381 }, + { 0x6477, 97383 }, + { 0x6478, 97385 }, + { 0x6479, 97387 }, + { 0x647A, 97389 }, + { 0x647B, 97391 }, + { 0x647C, 97393 }, + { 0x647D, 97395 }, + { 0x647E, 97397 }, + { 0x647F, 97399 }, + { 0x6480, 97401 }, + { 0x6481, 97403 }, + { 0x6482, 97405 }, + { 0x6483, 97407 }, + { 0x6484, 97409 }, + { 0x6485, 97411 }, + { 0x6486, 97413 }, + { 0x6487, 97415 }, + { 0x6488, 97417 }, + { 0x6489, 97419 }, + { 0x648A, 97421 }, + { 0x648B, 97423 }, + { 0x648C, 97425 }, + { 0x648D, 97427 }, + { 0x648E, 97429 }, + { 0x648F, 97431 }, + { 0x6490, 97433 }, + { 0x6491, 97435 }, + { 0x6492, 97437 }, + { 0x6493, 97439 }, + { 0x6494, 97441 }, + { 0x6495, 97443 }, + { 0x6496, 97445 }, + { 0x6497, 97447 }, + { 0x6498, 97449 }, + { 0x6499, 97451 }, + { 0x649A, 97453 }, + { 0x649B, 97455 }, + { 0x649C, 97457 }, + { 0x649D, 97459 }, + { 0x649E, 97461 }, + { 0x649F, 97463 }, + { 0x64A0, 97465 }, + { 0x64A1, 97467 }, + { 0x64A2, 97469 }, + { 0x64A3, 97471 }, + { 0x64A4, 97473 }, + { 0x64A5, 97475 }, + { 0x64A6, 97477 }, + { 0x64A7, 97479 }, + { 0x64A8, 97481 }, + { 0x64A9, 97483 }, + { 0x64AA, 97485 }, + { 0x64AB, 97487 }, + { 0x64AC, 97489 }, + { 0x64AD, 97491 }, + { 0x64AE, 97493 }, + { 0x64AF, 97495 }, + { 0x64B0, 97497 }, + { 0x64B1, 97499 }, + { 0x64B2, 97501 }, + { 0x64B3, 97503 }, + { 0x64B4, 97505 }, + { 0x64B5, 97507 }, + { 0x64B6, 97509 }, + { 0x64B7, 97511 }, + { 0x64B8, 97513 }, + { 0x64B9, 97515 }, + { 0x64BA, 97517 }, + { 0x64BB, 97519 }, + { 0x64BC, 97521 }, + { 0x64BD, 97523 }, + { 0x64BE, 97525 }, + { 0x64BF, 97527 }, + { 0x64C0, 97529 }, + { 0x64C1, 97531 }, + { 0x64C2, 97533 }, + { 0x64C3, 97535 }, + { 0x64C4, 97537 }, + { 0x64C5, 97539 }, + { 0x64C6, 97541 }, + { 0x64C7, 97543 }, + { 0x64C8, 97545 }, + { 0x64C9, 97547 }, + { 0x64CA, 97549 }, + { 0x64CB, 97551 }, + { 0x64CC, 97553 }, + { 0x64CD, 97555 }, + { 0x64CE, 97557 }, + { 0x64CF, 97559 }, + { 0x64D0, 97561 }, + { 0x64D1, 97563 }, + { 0x64D2, 97565 }, + { 0x64D3, 97567 }, + { 0x64D4, 97569 }, + { 0x64D5, 97571 }, + { 0x64D6, 97573 }, + { 0x64D7, 97575 }, + { 0x64D8, 97577 }, + { 0x64D9, 97579 }, + { 0x64DA, 97581 }, + { 0x64DB, 97583 }, + { 0x64DC, 97585 }, + { 0x64DD, 97587 }, + { 0x64DE, 97589 }, + { 0x64DF, 97591 }, + { 0x64E0, 97593 }, + { 0x64E1, 97595 }, + { 0x64E2, 97597 }, + { 0x64E3, 97599 }, + { 0x64E4, 97601 }, + { 0x64E5, 97603 }, + { 0x64E6, 97605 }, + { 0x64E7, 97607 }, + { 0x64E8, 97609 }, + { 0x64E9, 97611 }, + { 0x64EA, 97613 }, + { 0x64EB, 97615 }, + { 0x64EC, 97617 }, + { 0x64ED, 97619 }, + { 0x64EE, 97621 }, + { 0x64EF, 97623 }, + { 0x64F0, 97625 }, + { 0x64F1, 97627 }, + { 0x64F2, 97629 }, + { 0x64F3, 97631 }, + { 0x64F4, 97633 }, + { 0x64F5, 97635 }, + { 0x64F6, 97637 }, + { 0x64F7, 97639 }, + { 0x64F8, 97641 }, + { 0x64F9, 97643 }, + { 0x64FA, 97645 }, + { 0x64FB, 97647 }, + { 0x64FC, 97649 }, + { 0x64FD, 97651 }, + { 0x64FE, 97653 }, + { 0x64FF, 97655 }, + { 0x6500, 97657 }, + { 0x6501, 97659 }, + { 0x6502, 97661 }, + { 0x6503, 97663 }, + { 0x6504, 97665 }, + { 0x6505, 97667 }, + { 0x6506, 97669 }, + { 0x6507, 97671 }, + { 0x6508, 97673 }, + { 0x6509, 97675 }, + { 0x650A, 97677 }, + { 0x650B, 97679 }, + { 0x650C, 97681 }, + { 0x650D, 97683 }, + { 0x650E, 97685 }, + { 0x650F, 97687 }, + { 0x6510, 97689 }, + { 0x6511, 97691 }, + { 0x6512, 97693 }, + { 0x6513, 97695 }, + { 0x6514, 97697 }, + { 0x6515, 97699 }, + { 0x6516, 97701 }, + { 0x6517, 97703 }, + { 0x6518, 97705 }, + { 0x6519, 97707 }, + { 0x651A, 97709 }, + { 0x651B, 97711 }, + { 0x651C, 97713 }, + { 0x651D, 97715 }, + { 0x651E, 97717 }, + { 0x651F, 97719 }, + { 0x6520, 97721 }, + { 0x6521, 97723 }, + { 0x6522, 97725 }, + { 0x6523, 97727 }, + { 0x6524, 97729 }, + { 0x6525, 97731 }, + { 0x6526, 97733 }, + { 0x6527, 97735 }, + { 0x6528, 97737 }, + { 0x6529, 97739 }, + { 0x652A, 97741 }, + { 0x652B, 97743 }, + { 0x652C, 97745 }, + { 0x652D, 97747 }, + { 0x652E, 97749 }, + { 0x652F, 97751 }, + { 0x6530, 97753 }, + { 0x6531, 97755 }, + { 0x6532, 97757 }, + { 0x6533, 97759 }, + { 0x6534, 97761 }, + { 0x6535, 97763 }, + { 0x6536, 97765 }, + { 0x6537, 97767 }, + { 0x6538, 97769 }, + { 0x6539, 97771 }, + { 0x653A, 97773 }, + { 0x653B, 97775 }, + { 0x653C, 97777 }, + { 0x653D, 97779 }, + { 0x653E, 97781 }, + { 0x653F, 97783 }, + { 0x6540, 97785 }, + { 0x6541, 97787 }, + { 0x6542, 97789 }, + { 0x6543, 97791 }, + { 0x6544, 97793 }, + { 0x6545, 97795 }, + { 0x6546, 97797 }, + { 0x6547, 97799 }, + { 0x6548, 97801 }, + { 0x6549, 97803 }, + { 0x654A, 97805 }, + { 0x654B, 97807 }, + { 0x654C, 97809 }, + { 0x654D, 97811 }, + { 0x654E, 97813 }, + { 0x654F, 97815 }, + { 0x6550, 97817 }, + { 0x6551, 97819 }, + { 0x6552, 97821 }, + { 0x6553, 97823 }, + { 0x6554, 97825 }, + { 0x6555, 97827 }, + { 0x6556, 97829 }, + { 0x6557, 97831 }, + { 0x6558, 97833 }, + { 0x6559, 97835 }, + { 0x655A, 97837 }, + { 0x655B, 97839 }, + { 0x655C, 97841 }, + { 0x655D, 97843 }, + { 0x655E, 97845 }, + { 0x655F, 97847 }, + { 0x6560, 97849 }, + { 0x6561, 97851 }, + { 0x6562, 97853 }, + { 0x6563, 97855 }, + { 0x6564, 97857 }, + { 0x6565, 97859 }, + { 0x6566, 97861 }, + { 0x6567, 97863 }, + { 0x6568, 97865 }, + { 0x6569, 97867 }, + { 0x656A, 97869 }, + { 0x656B, 97871 }, + { 0x656C, 97873 }, + { 0x656D, 97875 }, + { 0x656E, 97877 }, + { 0x656F, 97879 }, + { 0x6570, 97881 }, + { 0x6571, 97883 }, + { 0x6572, 97885 }, + { 0x6573, 97887 }, + { 0x6574, 97889 }, + { 0x6575, 97891 }, + { 0x6576, 97893 }, + { 0x6577, 97895 }, + { 0x6578, 97897 }, + { 0x6579, 97899 }, + { 0x657A, 97901 }, + { 0x657B, 97903 }, + { 0x657C, 97905 }, + { 0x657D, 97907 }, + { 0x657E, 97909 }, + { 0x657F, 97911 }, + { 0x6580, 97913 }, + { 0x6581, 97915 }, + { 0x6582, 97917 }, + { 0x6583, 97919 }, + { 0x6584, 97921 }, + { 0x6585, 97923 }, + { 0x6586, 97925 }, + { 0x6587, 97927 }, + { 0x6588, 97929 }, + { 0x6589, 97931 }, + { 0x658A, 97933 }, + { 0x658B, 97935 }, + { 0x658C, 97937 }, + { 0x658D, 97939 }, + { 0x658E, 97941 }, + { 0x658F, 97943 }, + { 0x6590, 97945 }, + { 0x6591, 97947 }, + { 0x6592, 97949 }, + { 0x6593, 97951 }, + { 0x6594, 97953 }, + { 0x6595, 97955 }, + { 0x6596, 97957 }, + { 0x6597, 97959 }, + { 0x6598, 97961 }, + { 0x6599, 97963 }, + { 0x659A, 97965 }, + { 0x659B, 97967 }, + { 0x659C, 97969 }, + { 0x659D, 97971 }, + { 0x659E, 97973 }, + { 0x659F, 97975 }, + { 0x65A0, 97977 }, + { 0x65A1, 97979 }, + { 0x65A2, 97981 }, + { 0x65A3, 97983 }, + { 0x65A4, 97985 }, + { 0x65A5, 97987 }, + { 0x65A6, 97989 }, + { 0x65A7, 97991 }, + { 0x65A8, 97993 }, + { 0x65A9, 97995 }, + { 0x65AA, 97997 }, + { 0x65AB, 97999 }, + { 0x65AC, 98001 }, + { 0x65AD, 98003 }, + { 0x65AE, 98005 }, + { 0x65AF, 98007 }, + { 0x65B0, 98009 }, + { 0x65B1, 98011 }, + { 0x65B2, 98013 }, + { 0x65B3, 98015 }, + { 0x65B4, 98017 }, + { 0x65B5, 98019 }, + { 0x65B6, 98021 }, + { 0x65B7, 98023 }, + { 0x65B8, 98025 }, + { 0x65B9, 98027 }, + { 0x65BA, 98029 }, + { 0x65BB, 98031 }, + { 0x65BC, 98033 }, + { 0x65BD, 98035 }, + { 0x65BE, 98037 }, + { 0x65BF, 98039 }, + { 0x65C0, 98041 }, + { 0x65C1, 98043 }, + { 0x65C2, 98045 }, + { 0x65C3, 98047 }, + { 0x65C4, 98049 }, + { 0x65C5, 98051 }, + { 0x65C6, 98053 }, + { 0x65C7, 98055 }, + { 0x65C8, 98057 }, + { 0x65C9, 98059 }, + { 0x65CA, 98061 }, + { 0x65CB, 98063 }, + { 0x65CC, 98065 }, + { 0x65CD, 98067 }, + { 0x65CE, 98069 }, + { 0x65CF, 98071 }, + { 0x65D0, 98073 }, + { 0x65D1, 98075 }, + { 0x65D2, 98077 }, + { 0x65D3, 98079 }, + { 0x65D4, 98081 }, + { 0x65D5, 98083 }, + { 0x65D6, 98085 }, + { 0x65D7, 98087 }, + { 0x65D8, 98089 }, + { 0x65D9, 98091 }, + { 0x65DA, 98093 }, + { 0x65DB, 98095 }, + { 0x65DC, 98097 }, + { 0x65DD, 98099 }, + { 0x65DE, 98101 }, + { 0x65DF, 98103 }, + { 0x65E0, 98105 }, + { 0x65E1, 98107 }, + { 0x65E2, 98109 }, + { 0x65E3, 98111 }, + { 0x65E4, 98113 }, + { 0x65E5, 98115 }, + { 0x65E6, 98117 }, + { 0x65E7, 98119 }, + { 0x65E8, 98121 }, + { 0x65E9, 98123 }, + { 0x65EA, 98125 }, + { 0x65EB, 98127 }, + { 0x65EC, 98129 }, + { 0x65ED, 98131 }, + { 0x65EE, 98133 }, + { 0x65EF, 98135 }, + { 0x65F0, 98137 }, + { 0x65F1, 98139 }, + { 0x65F2, 98141 }, + { 0x65F3, 98143 }, + { 0x65F4, 98145 }, + { 0x65F5, 98147 }, + { 0x65F6, 98149 }, + { 0x65F7, 98151 }, + { 0x65F8, 98153 }, + { 0x65F9, 98155 }, + { 0x65FA, 98157 }, + { 0x65FB, 98159 }, + { 0x65FC, 98161 }, + { 0x65FD, 98163 }, + { 0x65FE, 98165 }, + { 0x65FF, 98167 }, + { 0x6600, 98169 }, + { 0x6601, 98171 }, + { 0x6602, 98173 }, + { 0x6603, 98175 }, + { 0x6604, 98177 }, + { 0x6605, 98179 }, + { 0x6606, 98181 }, + { 0x6607, 98183 }, + { 0x6608, 98185 }, + { 0x6609, 98187 }, + { 0x660A, 98189 }, + { 0x660B, 98191 }, + { 0x660C, 98193 }, + { 0x660D, 98195 }, + { 0x660E, 98197 }, + { 0x660F, 98199 }, + { 0x6610, 98201 }, + { 0x6611, 98203 }, + { 0x6612, 98205 }, + { 0x6613, 98207 }, + { 0x6614, 98209 }, + { 0x6615, 98211 }, + { 0x6616, 98213 }, + { 0x6617, 98215 }, + { 0x6618, 98217 }, + { 0x6619, 98219 }, + { 0x661A, 98221 }, + { 0x661B, 98223 }, + { 0x661C, 98225 }, + { 0x661D, 98227 }, + { 0x661E, 98229 }, + { 0x661F, 98231 }, + { 0x6620, 98233 }, + { 0x6621, 98235 }, + { 0x6622, 98237 }, + { 0x6623, 98239 }, + { 0x6624, 98241 }, + { 0x6625, 98243 }, + { 0x6626, 98245 }, + { 0x6627, 98247 }, + { 0x6628, 98249 }, + { 0x6629, 98251 }, + { 0x662A, 98253 }, + { 0x662B, 98255 }, + { 0x662C, 98257 }, + { 0x662D, 98259 }, + { 0x662E, 98261 }, + { 0x662F, 98263 }, + { 0x6630, 98265 }, + { 0x6631, 98267 }, + { 0x6632, 98269 }, + { 0x6633, 98271 }, + { 0x6634, 98273 }, + { 0x6635, 98275 }, + { 0x6636, 98277 }, + { 0x6637, 98279 }, + { 0x6638, 98281 }, + { 0x6639, 98283 }, + { 0x663A, 98285 }, + { 0x663B, 98287 }, + { 0x663C, 98289 }, + { 0x663D, 98291 }, + { 0x663E, 98293 }, + { 0x663F, 98295 }, + { 0x6640, 98297 }, + { 0x6641, 98299 }, + { 0x6642, 98301 }, + { 0x6643, 98303 }, + { 0x6644, 98305 }, + { 0x6645, 98307 }, + { 0x6646, 98309 }, + { 0x6647, 98311 }, + { 0x6648, 98313 }, + { 0x6649, 98315 }, + { 0x664A, 98317 }, + { 0x664B, 98319 }, + { 0x664C, 98321 }, + { 0x664D, 98323 }, + { 0x664E, 98325 }, + { 0x664F, 98327 }, + { 0x6650, 98329 }, + { 0x6651, 98331 }, + { 0x6652, 98333 }, + { 0x6653, 98335 }, + { 0x6654, 98337 }, + { 0x6655, 98339 }, + { 0x6656, 98341 }, + { 0x6657, 98343 }, + { 0x6658, 98345 }, + { 0x6659, 98347 }, + { 0x665A, 98349 }, + { 0x665B, 98351 }, + { 0x665C, 98353 }, + { 0x665D, 98355 }, + { 0x665E, 98357 }, + { 0x665F, 98359 }, + { 0x6660, 98361 }, + { 0x6661, 98363 }, + { 0x6662, 98365 }, + { 0x6663, 98367 }, + { 0x6664, 98369 }, + { 0x6665, 98371 }, + { 0x6666, 98373 }, + { 0x6667, 98375 }, + { 0x6668, 98377 }, + { 0x6669, 98379 }, + { 0x666A, 98381 }, + { 0x666B, 98383 }, + { 0x666C, 98385 }, + { 0x666D, 98387 }, + { 0x666E, 98389 }, + { 0x666F, 98391 }, + { 0x6670, 98393 }, + { 0x6671, 98395 }, + { 0x6672, 98397 }, + { 0x6673, 98399 }, + { 0x6674, 98401 }, + { 0x6675, 98403 }, + { 0x6676, 98405 }, + { 0x6677, 98407 }, + { 0x6678, 98409 }, + { 0x6679, 98411 }, + { 0x667A, 98413 }, + { 0x667B, 98415 }, + { 0x667C, 98417 }, + { 0x667D, 98419 }, + { 0x667E, 98421 }, + { 0x667F, 98423 }, + { 0x6680, 98425 }, + { 0x6681, 98427 }, + { 0x6682, 98429 }, + { 0x6683, 98431 }, + { 0x6684, 98433 }, + { 0x6685, 98435 }, + { 0x6686, 98437 }, + { 0x6687, 98439 }, + { 0x6688, 98441 }, + { 0x6689, 98443 }, + { 0x668A, 98445 }, + { 0x668B, 98447 }, + { 0x668C, 98449 }, + { 0x668D, 98451 }, + { 0x668E, 98453 }, + { 0x668F, 98455 }, + { 0x6690, 98457 }, + { 0x6691, 98459 }, + { 0x6692, 98461 }, + { 0x6693, 98463 }, + { 0x6694, 98465 }, + { 0x6695, 98467 }, + { 0x6696, 98469 }, + { 0x6697, 98471 }, + { 0x6698, 98473 }, + { 0x6699, 98475 }, + { 0x669A, 98477 }, + { 0x669B, 98479 }, + { 0x669C, 98481 }, + { 0x669D, 98483 }, + { 0x669E, 98485 }, + { 0x669F, 98487 }, + { 0x66A0, 98489 }, + { 0x66A1, 98491 }, + { 0x66A2, 98493 }, + { 0x66A3, 98495 }, + { 0x66A4, 98497 }, + { 0x66A5, 98499 }, + { 0x66A6, 98501 }, + { 0x66A7, 98503 }, + { 0x66A8, 98505 }, + { 0x66A9, 98507 }, + { 0x66AA, 98509 }, + { 0x66AB, 98511 }, + { 0x66AC, 98513 }, + { 0x66AD, 98515 }, + { 0x66AE, 98517 }, + { 0x66AF, 98519 }, + { 0x66B0, 98521 }, + { 0x66B1, 98523 }, + { 0x66B2, 98525 }, + { 0x66B3, 98527 }, + { 0x66B4, 98529 }, + { 0x66B5, 98531 }, + { 0x66B6, 98533 }, + { 0x66B7, 98535 }, + { 0x66B8, 98537 }, + { 0x66B9, 98539 }, + { 0x66BA, 98541 }, + { 0x66BB, 98543 }, + { 0x66BC, 98545 }, + { 0x66BD, 98547 }, + { 0x66BE, 98549 }, + { 0x66BF, 98551 }, + { 0x66C0, 98553 }, + { 0x66C1, 98555 }, + { 0x66C2, 98557 }, + { 0x66C3, 98559 }, + { 0x66C4, 98561 }, + { 0x66C5, 98563 }, + { 0x66C6, 98565 }, + { 0x66C7, 98567 }, + { 0x66C8, 98569 }, + { 0x66C9, 98571 }, + { 0x66CA, 98573 }, + { 0x66CB, 98575 }, + { 0x66CC, 98577 }, + { 0x66CD, 98579 }, + { 0x66CE, 98581 }, + { 0x66CF, 98583 }, + { 0x66D0, 98585 }, + { 0x66D1, 98587 }, + { 0x66D2, 98589 }, + { 0x66D3, 98591 }, + { 0x66D4, 98593 }, + { 0x66D5, 98595 }, + { 0x66D6, 98597 }, + { 0x66D7, 98599 }, + { 0x66D8, 98601 }, + { 0x66D9, 98603 }, + { 0x66DA, 98605 }, + { 0x66DB, 98607 }, + { 0x66DC, 98609 }, + { 0x66DD, 98611 }, + { 0x66DE, 98613 }, + { 0x66DF, 98615 }, + { 0x66E0, 98617 }, + { 0x66E1, 98619 }, + { 0x66E2, 98621 }, + { 0x66E3, 98623 }, + { 0x66E4, 98625 }, + { 0x66E5, 98627 }, + { 0x66E6, 98629 }, + { 0x66E7, 98631 }, + { 0x66E8, 98633 }, + { 0x66E9, 98635 }, + { 0x66EA, 98637 }, + { 0x66EB, 98639 }, + { 0x66EC, 98641 }, + { 0x66ED, 98643 }, + { 0x66EE, 98645 }, + { 0x66EF, 98647 }, + { 0x66F0, 98649 }, + { 0x66F1, 98651 }, + { 0x66F2, 98653 }, + { 0x66F3, 98655 }, + { 0x66F4, 98657 }, + { 0x66F5, 98659 }, + { 0x66F6, 98661 }, + { 0x66F7, 98663 }, + { 0x66F8, 98665 }, + { 0x66F9, 98667 }, + { 0x66FA, 98669 }, + { 0x66FB, 98671 }, + { 0x66FC, 98673 }, + { 0x66FD, 98675 }, + { 0x66FE, 98677 }, + { 0x66FF, 98679 }, + { 0x6700, 98681 }, + { 0x6701, 98683 }, + { 0x6702, 98685 }, + { 0x6703, 98687 }, + { 0x6704, 98689 }, + { 0x6705, 98691 }, + { 0x6706, 98693 }, + { 0x6707, 98695 }, + { 0x6708, 98697 }, + { 0x6709, 98699 }, + { 0x670A, 98701 }, + { 0x670B, 98703 }, + { 0x670C, 98705 }, + { 0x670D, 98707 }, + { 0x670E, 98709 }, + { 0x670F, 98711 }, + { 0x6710, 98713 }, + { 0x6711, 98715 }, + { 0x6712, 98717 }, + { 0x6713, 98719 }, + { 0x6714, 98721 }, + { 0x6715, 98723 }, + { 0x6716, 98725 }, + { 0x6717, 98727 }, + { 0x6718, 98729 }, + { 0x6719, 98731 }, + { 0x671A, 98733 }, + { 0x671B, 98735 }, + { 0x671C, 98737 }, + { 0x671D, 98739 }, + { 0x671E, 98741 }, + { 0x671F, 98743 }, + { 0x6720, 98745 }, + { 0x6721, 98747 }, + { 0x6722, 98749 }, + { 0x6723, 98751 }, + { 0x6724, 98753 }, + { 0x6725, 98755 }, + { 0x6726, 98757 }, + { 0x6727, 98759 }, + { 0x6728, 98761 }, + { 0x6729, 98763 }, + { 0x672A, 98765 }, + { 0x672B, 98767 }, + { 0x672C, 98769 }, + { 0x672D, 98771 }, + { 0x672E, 98773 }, + { 0x672F, 98775 }, + { 0x6730, 98777 }, + { 0x6731, 98779 }, + { 0x6732, 98781 }, + { 0x6733, 98783 }, + { 0x6734, 98785 }, + { 0x6735, 98787 }, + { 0x6736, 98789 }, + { 0x6737, 98791 }, + { 0x6738, 98793 }, + { 0x6739, 98795 }, + { 0x673A, 98797 }, + { 0x673B, 98799 }, + { 0x673C, 98801 }, + { 0x673D, 98803 }, + { 0x673E, 98805 }, + { 0x673F, 98807 }, + { 0x6740, 98809 }, + { 0x6741, 98811 }, + { 0x6742, 98813 }, + { 0x6743, 98815 }, + { 0x6744, 98817 }, + { 0x6745, 98819 }, + { 0x6746, 98821 }, + { 0x6747, 98823 }, + { 0x6748, 98825 }, + { 0x6749, 98827 }, + { 0x674A, 98829 }, + { 0x674B, 98831 }, + { 0x674C, 98833 }, + { 0x674D, 98835 }, + { 0x674E, 98837 }, + { 0x674F, 98839 }, + { 0x6750, 98841 }, + { 0x6751, 98843 }, + { 0x6752, 98845 }, + { 0x6753, 98847 }, + { 0x6754, 98849 }, + { 0x6755, 98851 }, + { 0x6756, 98853 }, + { 0x6757, 98855 }, + { 0x6758, 98857 }, + { 0x6759, 98859 }, + { 0x675A, 98861 }, + { 0x675B, 98863 }, + { 0x675C, 98865 }, + { 0x675D, 98867 }, + { 0x675E, 98869 }, + { 0x675F, 98871 }, + { 0x6760, 98873 }, + { 0x6761, 98875 }, + { 0x6762, 98877 }, + { 0x6763, 98879 }, + { 0x6764, 98881 }, + { 0x6765, 98883 }, + { 0x6766, 98885 }, + { 0x6767, 98887 }, + { 0x6768, 98889 }, + { 0x6769, 98891 }, + { 0x676A, 98893 }, + { 0x676B, 98895 }, + { 0x676C, 98897 }, + { 0x676D, 98899 }, + { 0x676E, 98901 }, + { 0x676F, 98903 }, + { 0x6770, 98905 }, + { 0x6771, 98907 }, + { 0x6772, 98909 }, + { 0x6773, 98911 }, + { 0x6774, 98913 }, + { 0x6775, 98915 }, + { 0x6776, 98917 }, + { 0x6777, 98919 }, + { 0x6778, 98921 }, + { 0x6779, 98923 }, + { 0x677A, 98925 }, + { 0x677B, 98927 }, + { 0x677C, 98929 }, + { 0x677D, 98931 }, + { 0x677E, 98933 }, + { 0x677F, 98935 }, + { 0x6780, 98937 }, + { 0x6781, 98939 }, + { 0x6782, 98941 }, + { 0x6783, 98943 }, + { 0x6784, 98945 }, + { 0x6785, 98947 }, + { 0x6786, 98949 }, + { 0x6787, 98951 }, + { 0x6788, 98953 }, + { 0x6789, 98955 }, + { 0x678A, 98957 }, + { 0x678B, 98959 }, + { 0x678C, 98961 }, + { 0x678D, 98963 }, + { 0x678E, 98965 }, + { 0x678F, 98967 }, + { 0x6790, 98969 }, + { 0x6791, 98971 }, + { 0x6792, 98973 }, + { 0x6793, 98975 }, + { 0x6794, 98977 }, + { 0x6795, 98979 }, + { 0x6796, 98981 }, + { 0x6797, 98983 }, + { 0x6798, 98985 }, + { 0x6799, 98987 }, + { 0x679A, 98989 }, + { 0x679B, 98991 }, + { 0x679C, 98993 }, + { 0x679D, 98995 }, + { 0x679E, 98997 }, + { 0x679F, 98999 }, + { 0x67A0, 99001 }, + { 0x67A1, 99003 }, + { 0x67A2, 99005 }, + { 0x67A3, 99007 }, + { 0x67A4, 99009 }, + { 0x67A5, 99011 }, + { 0x67A6, 99013 }, + { 0x67A7, 99015 }, + { 0x67A8, 99017 }, + { 0x67A9, 99019 }, + { 0x67AA, 99021 }, + { 0x67AB, 99023 }, + { 0x67AC, 99025 }, + { 0x67AD, 99027 }, + { 0x67AE, 99029 }, + { 0x67AF, 99031 }, + { 0x67B0, 99033 }, + { 0x67B1, 99035 }, + { 0x67B2, 99037 }, + { 0x67B3, 99039 }, + { 0x67B4, 99041 }, + { 0x67B5, 99043 }, + { 0x67B6, 99045 }, + { 0x67B7, 99047 }, + { 0x67B8, 99049 }, + { 0x67B9, 99051 }, + { 0x67BA, 99053 }, + { 0x67BB, 99055 }, + { 0x67BC, 99057 }, + { 0x67BD, 99059 }, + { 0x67BE, 99061 }, + { 0x67BF, 99063 }, + { 0x67C0, 99065 }, + { 0x67C1, 99067 }, + { 0x67C2, 99069 }, + { 0x67C3, 99071 }, + { 0x67C4, 99073 }, + { 0x67C5, 99075 }, + { 0x67C6, 99077 }, + { 0x67C7, 99079 }, + { 0x67C8, 99081 }, + { 0x67C9, 99083 }, + { 0x67CA, 99085 }, + { 0x67CB, 99087 }, + { 0x67CC, 99089 }, + { 0x67CD, 99091 }, + { 0x67CE, 99093 }, + { 0x67CF, 99095 }, + { 0x67D0, 99097 }, + { 0x67D1, 99099 }, + { 0x67D2, 99101 }, + { 0x67D3, 99103 }, + { 0x67D4, 99105 }, + { 0x67D5, 99107 }, + { 0x67D6, 99109 }, + { 0x67D7, 99111 }, + { 0x67D8, 99113 }, + { 0x67D9, 99115 }, + { 0x67DA, 99117 }, + { 0x67DB, 99119 }, + { 0x67DC, 99121 }, + { 0x67DD, 99123 }, + { 0x67DE, 99125 }, + { 0x67DF, 99127 }, + { 0x67E0, 99129 }, + { 0x67E1, 99131 }, + { 0x67E2, 99133 }, + { 0x67E3, 99135 }, + { 0x67E4, 99137 }, + { 0x67E5, 99139 }, + { 0x67E6, 99141 }, + { 0x67E7, 99143 }, + { 0x67E8, 99145 }, + { 0x67E9, 99147 }, + { 0x67EA, 99149 }, + { 0x67EB, 99151 }, + { 0x67EC, 99153 }, + { 0x67ED, 99155 }, + { 0x67EE, 99157 }, + { 0x67EF, 99159 }, + { 0x67F0, 99161 }, + { 0x67F1, 99163 }, + { 0x67F2, 99165 }, + { 0x67F3, 99167 }, + { 0x67F4, 99169 }, + { 0x67F5, 99171 }, + { 0x67F6, 99173 }, + { 0x67F7, 99175 }, + { 0x67F8, 99177 }, + { 0x67F9, 99179 }, + { 0x67FA, 99181 }, + { 0x67FB, 99183 }, + { 0x67FC, 99185 }, + { 0x67FD, 99187 }, + { 0x67FE, 99189 }, + { 0x67FF, 99191 }, + { 0x6800, 99193 }, + { 0x6801, 99195 }, + { 0x6802, 99197 }, + { 0x6803, 99199 }, + { 0x6804, 99201 }, + { 0x6805, 99203 }, + { 0x6806, 99205 }, + { 0x6807, 99207 }, + { 0x6808, 99209 }, + { 0x6809, 99211 }, + { 0x680A, 99213 }, + { 0x680B, 99215 }, + { 0x680C, 99217 }, + { 0x680D, 99219 }, + { 0x680E, 99221 }, + { 0x680F, 99223 }, + { 0x6810, 99225 }, + { 0x6811, 99227 }, + { 0x6812, 99229 }, + { 0x6813, 99231 }, + { 0x6814, 99233 }, + { 0x6815, 99235 }, + { 0x6816, 99237 }, + { 0x6817, 99239 }, + { 0x6818, 99241 }, + { 0x6819, 99243 }, + { 0x681A, 99245 }, + { 0x681B, 99247 }, + { 0x681C, 99249 }, + { 0x681D, 99251 }, + { 0x681E, 99253 }, + { 0x681F, 99255 }, + { 0x6820, 99257 }, + { 0x6821, 99259 }, + { 0x6822, 99261 }, + { 0x6823, 99263 }, + { 0x6824, 99265 }, + { 0x6825, 99267 }, + { 0x6826, 99269 }, + { 0x6827, 99271 }, + { 0x6828, 99273 }, + { 0x6829, 99275 }, + { 0x682A, 99277 }, + { 0x682B, 99279 }, + { 0x682C, 99281 }, + { 0x682D, 99283 }, + { 0x682E, 99285 }, + { 0x682F, 99287 }, + { 0x6830, 99289 }, + { 0x6831, 99291 }, + { 0x6832, 99293 }, + { 0x6833, 99295 }, + { 0x6834, 99297 }, + { 0x6835, 99299 }, + { 0x6836, 99301 }, + { 0x6837, 99303 }, + { 0x6838, 99305 }, + { 0x6839, 99307 }, + { 0x683A, 99309 }, + { 0x683B, 99311 }, + { 0x683C, 99313 }, + { 0x683D, 99315 }, + { 0x683E, 99317 }, + { 0x683F, 99319 }, + { 0x6840, 99321 }, + { 0x6841, 99323 }, + { 0x6842, 99325 }, + { 0x6843, 99327 }, + { 0x6844, 99329 }, + { 0x6845, 99331 }, + { 0x6846, 99333 }, + { 0x6847, 99335 }, + { 0x6848, 99337 }, + { 0x6849, 99339 }, + { 0x684A, 99341 }, + { 0x684B, 99343 }, + { 0x684C, 99345 }, + { 0x684D, 99347 }, + { 0x684E, 99349 }, + { 0x684F, 99351 }, + { 0x6850, 99353 }, + { 0x6851, 99355 }, + { 0x6852, 99357 }, + { 0x6853, 99359 }, + { 0x6854, 99361 }, + { 0x6855, 99363 }, + { 0x6856, 99365 }, + { 0x6857, 99367 }, + { 0x6858, 99369 }, + { 0x6859, 99371 }, + { 0x685A, 99373 }, + { 0x685B, 99375 }, + { 0x685C, 99377 }, + { 0x685D, 99379 }, + { 0x685E, 99381 }, + { 0x685F, 99383 }, + { 0x6860, 99385 }, + { 0x6861, 99387 }, + { 0x6862, 99389 }, + { 0x6863, 99391 }, + { 0x6864, 99393 }, + { 0x6865, 99395 }, + { 0x6866, 99397 }, + { 0x6867, 99399 }, + { 0x6868, 99401 }, + { 0x6869, 99403 }, + { 0x686A, 99405 }, + { 0x686B, 99407 }, + { 0x686C, 99409 }, + { 0x686D, 99411 }, + { 0x686E, 99413 }, + { 0x686F, 99415 }, + { 0x6870, 99417 }, + { 0x6871, 99419 }, + { 0x6872, 99421 }, + { 0x6873, 99423 }, + { 0x6874, 99425 }, + { 0x6875, 99427 }, + { 0x6876, 99429 }, + { 0x6877, 99431 }, + { 0x6878, 99433 }, + { 0x6879, 99435 }, + { 0x687A, 99437 }, + { 0x687B, 99439 }, + { 0x687C, 99441 }, + { 0x687D, 99443 }, + { 0x687E, 99445 }, + { 0x687F, 99447 }, + { 0x6880, 99449 }, + { 0x6881, 99451 }, + { 0x6882, 99453 }, + { 0x6883, 99455 }, + { 0x6884, 99457 }, + { 0x6885, 99459 }, + { 0x6886, 99461 }, + { 0x6887, 99463 }, + { 0x6888, 99465 }, + { 0x6889, 99467 }, + { 0x688A, 99469 }, + { 0x688B, 99471 }, + { 0x688C, 99473 }, + { 0x688D, 99475 }, + { 0x688E, 99477 }, + { 0x688F, 99479 }, + { 0x6890, 99481 }, + { 0x6891, 99483 }, + { 0x6892, 99485 }, + { 0x6893, 99487 }, + { 0x6894, 99489 }, + { 0x6895, 99491 }, + { 0x6896, 99493 }, + { 0x6897, 99495 }, + { 0x6898, 99497 }, + { 0x6899, 99499 }, + { 0x689A, 99501 }, + { 0x689B, 99503 }, + { 0x689C, 99505 }, + { 0x689D, 99507 }, + { 0x689E, 99509 }, + { 0x689F, 99511 }, + { 0x68A0, 99513 }, + { 0x68A1, 99515 }, + { 0x68A2, 99517 }, + { 0x68A3, 99519 }, + { 0x68A4, 99521 }, + { 0x68A5, 99523 }, + { 0x68A6, 99525 }, + { 0x68A7, 99527 }, + { 0x68A8, 99529 }, + { 0x68A9, 99531 }, + { 0x68AA, 99533 }, + { 0x68AB, 99535 }, + { 0x68AC, 99537 }, + { 0x68AD, 99539 }, + { 0x68AE, 99541 }, + { 0x68AF, 99543 }, + { 0x68B0, 99545 }, + { 0x68B1, 99547 }, + { 0x68B2, 99549 }, + { 0x68B3, 99551 }, + { 0x68B4, 99553 }, + { 0x68B5, 99555 }, + { 0x68B6, 99557 }, + { 0x68B7, 99559 }, + { 0x68B8, 99561 }, + { 0x68B9, 99563 }, + { 0x68BA, 99565 }, + { 0x68BB, 99567 }, + { 0x68BC, 99569 }, + { 0x68BD, 99571 }, + { 0x68BE, 99573 }, + { 0x68BF, 99575 }, + { 0x68C0, 99577 }, + { 0x68C1, 99579 }, + { 0x68C2, 99581 }, + { 0x68C3, 99583 }, + { 0x68C4, 99585 }, + { 0x68C5, 99587 }, + { 0x68C6, 99589 }, + { 0x68C7, 99591 }, + { 0x68C8, 99593 }, + { 0x68C9, 99595 }, + { 0x68CA, 99597 }, + { 0x68CB, 99599 }, + { 0x68CC, 99601 }, + { 0x68CD, 99603 }, + { 0x68CE, 99605 }, + { 0x68CF, 99607 }, + { 0x68D0, 99609 }, + { 0x68D1, 99611 }, + { 0x68D2, 99613 }, + { 0x68D3, 99615 }, + { 0x68D4, 99617 }, + { 0x68D5, 99619 }, + { 0x68D6, 99621 }, + { 0x68D7, 99623 }, + { 0x68D8, 99625 }, + { 0x68D9, 99627 }, + { 0x68DA, 99629 }, + { 0x68DB, 99631 }, + { 0x68DC, 99633 }, + { 0x68DD, 99635 }, + { 0x68DE, 99637 }, + { 0x68DF, 99639 }, + { 0x68E0, 99641 }, + { 0x68E1, 99643 }, + { 0x68E2, 99645 }, + { 0x68E3, 99647 }, + { 0x68E4, 99649 }, + { 0x68E5, 99651 }, + { 0x68E6, 99653 }, + { 0x68E7, 99655 }, + { 0x68E8, 99657 }, + { 0x68E9, 99659 }, + { 0x68EA, 99661 }, + { 0x68EB, 99663 }, + { 0x68EC, 99665 }, + { 0x68ED, 99667 }, + { 0x68EE, 99669 }, + { 0x68EF, 99671 }, + { 0x68F0, 99673 }, + { 0x68F1, 99675 }, + { 0x68F2, 99677 }, + { 0x68F3, 99679 }, + { 0x68F4, 99681 }, + { 0x68F5, 99683 }, + { 0x68F6, 99685 }, + { 0x68F7, 99687 }, + { 0x68F8, 99689 }, + { 0x68F9, 99691 }, + { 0x68FA, 99693 }, + { 0x68FB, 99695 }, + { 0x68FC, 99697 }, + { 0x68FD, 99699 }, + { 0x68FE, 99701 }, + { 0x68FF, 99703 }, + { 0x6900, 99705 }, + { 0x6901, 99707 }, + { 0x6902, 99709 }, + { 0x6903, 99711 }, + { 0x6904, 99713 }, + { 0x6905, 99715 }, + { 0x6906, 99717 }, + { 0x6907, 99719 }, + { 0x6908, 99721 }, + { 0x6909, 99723 }, + { 0x690A, 99725 }, + { 0x690B, 99727 }, + { 0x690C, 99729 }, + { 0x690D, 99731 }, + { 0x690E, 99733 }, + { 0x690F, 99735 }, + { 0x6910, 99737 }, + { 0x6911, 99739 }, + { 0x6912, 99741 }, + { 0x6913, 99743 }, + { 0x6914, 99745 }, + { 0x6915, 99747 }, + { 0x6916, 99749 }, + { 0x6917, 99751 }, + { 0x6918, 99753 }, + { 0x6919, 99755 }, + { 0x691A, 99757 }, + { 0x691B, 99759 }, + { 0x691C, 99761 }, + { 0x691D, 99763 }, + { 0x691E, 99765 }, + { 0x691F, 99767 }, + { 0x6920, 99769 }, + { 0x6921, 99771 }, + { 0x6922, 99773 }, + { 0x6923, 99775 }, + { 0x6924, 99777 }, + { 0x6925, 99779 }, + { 0x6926, 99781 }, + { 0x6927, 99783 }, + { 0x6928, 99785 }, + { 0x6929, 99787 }, + { 0x692A, 99789 }, + { 0x692B, 99791 }, + { 0x692C, 99793 }, + { 0x692D, 99795 }, + { 0x692E, 99797 }, + { 0x692F, 99799 }, + { 0x6930, 99801 }, + { 0x6931, 99803 }, + { 0x6932, 99805 }, + { 0x6933, 99807 }, + { 0x6934, 99809 }, + { 0x6935, 99811 }, + { 0x6936, 99813 }, + { 0x6937, 99815 }, + { 0x6938, 99817 }, + { 0x6939, 99819 }, + { 0x693A, 99821 }, + { 0x693B, 99823 }, + { 0x693C, 99825 }, + { 0x693D, 99827 }, + { 0x693E, 99829 }, + { 0x693F, 99831 }, + { 0x6940, 99833 }, + { 0x6941, 99835 }, + { 0x6942, 99837 }, + { 0x6943, 99839 }, + { 0x6944, 99841 }, + { 0x6945, 99843 }, + { 0x6946, 99845 }, + { 0x6947, 99847 }, + { 0x6948, 99849 }, + { 0x6949, 99851 }, + { 0x694A, 99853 }, + { 0x694B, 99855 }, + { 0x694C, 99857 }, + { 0x694D, 99859 }, + { 0x694E, 99861 }, + { 0x694F, 99863 }, + { 0x6950, 99865 }, + { 0x6951, 99867 }, + { 0x6952, 99869 }, + { 0x6953, 99871 }, + { 0x6954, 99873 }, + { 0x6955, 99875 }, + { 0x6956, 99877 }, + { 0x6957, 99879 }, + { 0x6958, 99881 }, + { 0x6959, 99883 }, + { 0x695A, 99885 }, + { 0x695B, 99887 }, + { 0x695C, 99889 }, + { 0x695D, 99891 }, + { 0x695E, 99893 }, + { 0x695F, 99895 }, + { 0x6960, 99897 }, + { 0x6961, 99899 }, + { 0x6962, 99901 }, + { 0x6963, 99903 }, + { 0x6964, 99905 }, + { 0x6965, 99907 }, + { 0x6966, 99909 }, + { 0x6967, 99911 }, + { 0x6968, 99913 }, + { 0x6969, 99915 }, + { 0x696A, 99917 }, + { 0x696B, 99919 }, + { 0x696C, 99921 }, + { 0x696D, 99923 }, + { 0x696E, 99925 }, + { 0x696F, 99927 }, + { 0x6970, 99929 }, + { 0x6971, 99931 }, + { 0x6972, 99933 }, + { 0x6973, 99935 }, + { 0x6974, 99937 }, + { 0x6975, 99939 }, + { 0x6976, 99941 }, + { 0x6977, 99943 }, + { 0x6978, 99945 }, + { 0x6979, 99947 }, + { 0x697A, 99949 }, + { 0x697B, 99951 }, + { 0x697C, 99953 }, + { 0x697D, 99955 }, + { 0x697E, 99957 }, + { 0x697F, 99959 }, + { 0x6980, 99961 }, + { 0x6981, 99963 }, + { 0x6982, 99965 }, + { 0x6983, 99967 }, + { 0x6984, 99969 }, + { 0x6985, 99971 }, + { 0x6986, 99973 }, + { 0x6987, 99975 }, + { 0x6988, 99977 }, + { 0x6989, 99979 }, + { 0x698A, 99981 }, + { 0x698B, 99983 }, + { 0x698C, 99985 }, + { 0x698D, 99987 }, + { 0x698E, 99989 }, + { 0x698F, 99991 }, + { 0x6990, 99993 }, + { 0x6991, 99995 }, + { 0x6992, 99997 }, + { 0x6993, 99999 }, + { 0x6994, 100001 }, + { 0x6995, 100003 }, + { 0x6996, 100005 }, + { 0x6997, 100007 }, + { 0x6998, 100009 }, + { 0x6999, 100011 }, + { 0x699A, 100013 }, + { 0x699B, 100015 }, + { 0x699C, 100017 }, + { 0x699D, 100019 }, + { 0x699E, 100021 }, + { 0x699F, 100023 }, + { 0x69A0, 100025 }, + { 0x69A1, 100027 }, + { 0x69A2, 100029 }, + { 0x69A3, 100031 }, + { 0x69A4, 100033 }, + { 0x69A5, 100035 }, + { 0x69A6, 100037 }, + { 0x69A7, 100039 }, + { 0x69A8, 100041 }, + { 0x69A9, 100043 }, + { 0x69AA, 100045 }, + { 0x69AB, 100047 }, + { 0x69AC, 100049 }, + { 0x69AD, 100051 }, + { 0x69AE, 100053 }, + { 0x69AF, 100055 }, + { 0x69B0, 100057 }, + { 0x69B1, 100059 }, + { 0x69B2, 100061 }, + { 0x69B3, 100063 }, + { 0x69B4, 100065 }, + { 0x69B5, 100067 }, + { 0x69B6, 100069 }, + { 0x69B7, 100071 }, + { 0x69B8, 100073 }, + { 0x69B9, 100075 }, + { 0x69BA, 100077 }, + { 0x69BB, 100079 }, + { 0x69BC, 100081 }, + { 0x69BD, 100083 }, + { 0x69BE, 100085 }, + { 0x69BF, 100087 }, + { 0x69C0, 100089 }, + { 0x69C1, 100091 }, + { 0x69C2, 100093 }, + { 0x69C3, 100095 }, + { 0x69C4, 100097 }, + { 0x69C5, 100099 }, + { 0x69C6, 100101 }, + { 0x69C7, 100103 }, + { 0x69C8, 100105 }, + { 0x69C9, 100107 }, + { 0x69CA, 100109 }, + { 0x69CB, 100111 }, + { 0x69CC, 100113 }, + { 0x69CD, 100115 }, + { 0x69CE, 100117 }, + { 0x69CF, 100119 }, + { 0x69D0, 100121 }, + { 0x69D1, 100123 }, + { 0x69D2, 100125 }, + { 0x69D3, 100127 }, + { 0x69D4, 100129 }, + { 0x69D5, 100131 }, + { 0x69D6, 100133 }, + { 0x69D7, 100135 }, + { 0x69D8, 100137 }, + { 0x69D9, 100139 }, + { 0x69DA, 100141 }, + { 0x69DB, 100143 }, + { 0x69DC, 100145 }, + { 0x69DD, 100147 }, + { 0x69DE, 100149 }, + { 0x69DF, 100151 }, + { 0x69E0, 100153 }, + { 0x69E1, 100155 }, + { 0x69E2, 100157 }, + { 0x69E3, 100159 }, + { 0x69E4, 100161 }, + { 0x69E5, 100163 }, + { 0x69E6, 100165 }, + { 0x69E7, 100167 }, + { 0x69E8, 100169 }, + { 0x69E9, 100171 }, + { 0x69EA, 100173 }, + { 0x69EB, 100175 }, + { 0x69EC, 100177 }, + { 0x69ED, 100179 }, + { 0x69EE, 100181 }, + { 0x69EF, 100183 }, + { 0x69F0, 100185 }, + { 0x69F1, 100187 }, + { 0x69F2, 100189 }, + { 0x69F3, 100191 }, + { 0x69F4, 100193 }, + { 0x69F5, 100195 }, + { 0x69F6, 100197 }, + { 0x69F7, 100199 }, + { 0x69F8, 100201 }, + { 0x69F9, 100203 }, + { 0x69FA, 100205 }, + { 0x69FB, 100207 }, + { 0x69FC, 100209 }, + { 0x69FD, 100211 }, + { 0x69FE, 100213 }, + { 0x69FF, 100215 }, + { 0x6A00, 100217 }, + { 0x6A01, 100219 }, + { 0x6A02, 100221 }, + { 0x6A03, 100223 }, + { 0x6A04, 100225 }, + { 0x6A05, 100227 }, + { 0x6A06, 100229 }, + { 0x6A07, 100231 }, + { 0x6A08, 100233 }, + { 0x6A09, 100235 }, + { 0x6A0A, 100237 }, + { 0x6A0B, 100239 }, + { 0x6A0C, 100241 }, + { 0x6A0D, 100243 }, + { 0x6A0E, 100245 }, + { 0x6A0F, 100247 }, + { 0x6A10, 100249 }, + { 0x6A11, 100251 }, + { 0x6A12, 100253 }, + { 0x6A13, 100255 }, + { 0x6A14, 100257 }, + { 0x6A15, 100259 }, + { 0x6A16, 100261 }, + { 0x6A17, 100263 }, + { 0x6A18, 100265 }, + { 0x6A19, 100267 }, + { 0x6A1A, 100269 }, + { 0x6A1B, 100271 }, + { 0x6A1C, 100273 }, + { 0x6A1D, 100275 }, + { 0x6A1E, 100277 }, + { 0x6A1F, 100279 }, + { 0x6A20, 100281 }, + { 0x6A21, 100283 }, + { 0x6A22, 100285 }, + { 0x6A23, 100287 }, + { 0x6A24, 100289 }, + { 0x6A25, 100291 }, + { 0x6A26, 100293 }, + { 0x6A27, 100295 }, + { 0x6A28, 100297 }, + { 0x6A29, 100299 }, + { 0x6A2A, 100301 }, + { 0x6A2B, 100303 }, + { 0x6A2C, 100305 }, + { 0x6A2D, 100307 }, + { 0x6A2E, 100309 }, + { 0x6A2F, 100311 }, + { 0x6A30, 100313 }, + { 0x6A31, 100315 }, + { 0x6A32, 100317 }, + { 0x6A33, 100319 }, + { 0x6A34, 100321 }, + { 0x6A35, 100323 }, + { 0x6A36, 100325 }, + { 0x6A37, 100327 }, + { 0x6A38, 100329 }, + { 0x6A39, 100331 }, + { 0x6A3A, 100333 }, + { 0x6A3B, 100335 }, + { 0x6A3C, 100337 }, + { 0x6A3D, 100339 }, + { 0x6A3E, 100341 }, + { 0x6A3F, 100343 }, + { 0x6A40, 100345 }, + { 0x6A41, 100347 }, + { 0x6A42, 100349 }, + { 0x6A43, 100351 }, + { 0x6A44, 100353 }, + { 0x6A45, 100355 }, + { 0x6A46, 100357 }, + { 0x6A47, 100359 }, + { 0x6A48, 100361 }, + { 0x6A49, 100363 }, + { 0x6A4A, 100365 }, + { 0x6A4B, 100367 }, + { 0x6A4C, 100369 }, + { 0x6A4D, 100371 }, + { 0x6A4E, 100373 }, + { 0x6A4F, 100375 }, + { 0x6A50, 100377 }, + { 0x6A51, 100379 }, + { 0x6A52, 100381 }, + { 0x6A53, 100383 }, + { 0x6A54, 100385 }, + { 0x6A55, 100387 }, + { 0x6A56, 100389 }, + { 0x6A57, 100391 }, + { 0x6A58, 100393 }, + { 0x6A59, 100395 }, + { 0x6A5A, 100397 }, + { 0x6A5B, 100399 }, + { 0x6A5C, 100401 }, + { 0x6A5D, 100403 }, + { 0x6A5E, 100405 }, + { 0x6A5F, 100407 }, + { 0x6A60, 100409 }, + { 0x6A61, 100411 }, + { 0x6A62, 100413 }, + { 0x6A63, 100415 }, + { 0x6A64, 100417 }, + { 0x6A65, 100419 }, + { 0x6A66, 100421 }, + { 0x6A67, 100423 }, + { 0x6A68, 100425 }, + { 0x6A69, 100427 }, + { 0x6A6A, 100429 }, + { 0x6A6B, 100431 }, + { 0x6A6C, 100433 }, + { 0x6A6D, 100435 }, + { 0x6A6E, 100437 }, + { 0x6A6F, 100439 }, + { 0x6A70, 100441 }, + { 0x6A71, 100443 }, + { 0x6A72, 100445 }, + { 0x6A73, 100447 }, + { 0x6A74, 100449 }, + { 0x6A75, 100451 }, + { 0x6A76, 100453 }, + { 0x6A77, 100455 }, + { 0x6A78, 100457 }, + { 0x6A79, 100459 }, + { 0x6A7A, 100461 }, + { 0x6A7B, 100463 }, + { 0x6A7C, 100465 }, + { 0x6A7D, 100467 }, + { 0x6A7E, 100469 }, + { 0x6A7F, 100471 }, + { 0x6A80, 100473 }, + { 0x6A81, 100475 }, + { 0x6A82, 100477 }, + { 0x6A83, 100479 }, + { 0x6A84, 100481 }, + { 0x6A85, 100483 }, + { 0x6A86, 100485 }, + { 0x6A87, 100487 }, + { 0x6A88, 100489 }, + { 0x6A89, 100491 }, + { 0x6A8A, 100493 }, + { 0x6A8B, 100495 }, + { 0x6A8C, 100497 }, + { 0x6A8D, 100499 }, + { 0x6A8E, 100501 }, + { 0x6A8F, 100503 }, + { 0x6A90, 100505 }, + { 0x6A91, 100507 }, + { 0x6A92, 100509 }, + { 0x6A93, 100511 }, + { 0x6A94, 100513 }, + { 0x6A95, 100515 }, + { 0x6A96, 100517 }, + { 0x6A97, 100519 }, + { 0x6A98, 100521 }, + { 0x6A99, 100523 }, + { 0x6A9A, 100525 }, + { 0x6A9B, 100527 }, + { 0x6A9C, 100529 }, + { 0x6A9D, 100531 }, + { 0x6A9E, 100533 }, + { 0x6A9F, 100535 }, + { 0x6AA0, 100537 }, + { 0x6AA1, 100539 }, + { 0x6AA2, 100541 }, + { 0x6AA3, 100543 }, + { 0x6AA4, 100545 }, + { 0x6AA5, 100547 }, + { 0x6AA6, 100549 }, + { 0x6AA7, 100551 }, + { 0x6AA8, 100553 }, + { 0x6AA9, 100555 }, + { 0x6AAA, 100557 }, + { 0x6AAB, 100559 }, + { 0x6AAC, 100561 }, + { 0x6AAD, 100563 }, + { 0x6AAE, 100565 }, + { 0x6AAF, 100567 }, + { 0x6AB0, 100569 }, + { 0x6AB1, 100571 }, + { 0x6AB2, 100573 }, + { 0x6AB3, 100575 }, + { 0x6AB4, 100577 }, + { 0x6AB5, 100579 }, + { 0x6AB6, 100581 }, + { 0x6AB7, 100583 }, + { 0x6AB8, 100585 }, + { 0x6AB9, 100587 }, + { 0x6ABA, 100589 }, + { 0x6ABB, 100591 }, + { 0x6ABC, 100593 }, + { 0x6ABD, 100595 }, + { 0x6ABE, 100597 }, + { 0x6ABF, 100599 }, + { 0x6AC0, 100601 }, + { 0x6AC1, 100603 }, + { 0x6AC2, 100605 }, + { 0x6AC3, 100607 }, + { 0x6AC4, 100609 }, + { 0x6AC5, 100611 }, + { 0x6AC6, 100613 }, + { 0x6AC7, 100615 }, + { 0x6AC8, 100617 }, + { 0x6AC9, 100619 }, + { 0x6ACA, 100621 }, + { 0x6ACB, 100623 }, + { 0x6ACC, 100625 }, + { 0x6ACD, 100627 }, + { 0x6ACE, 100629 }, + { 0x6ACF, 100631 }, + { 0x6AD0, 100633 }, + { 0x6AD1, 100635 }, + { 0x6AD2, 100637 }, + { 0x6AD3, 100639 }, + { 0x6AD4, 100641 }, + { 0x6AD5, 100643 }, + { 0x6AD6, 100645 }, + { 0x6AD7, 100647 }, + { 0x6AD8, 100649 }, + { 0x6AD9, 100651 }, + { 0x6ADA, 100653 }, + { 0x6ADB, 100655 }, + { 0x6ADC, 100657 }, + { 0x6ADD, 100659 }, + { 0x6ADE, 100661 }, + { 0x6ADF, 100663 }, + { 0x6AE0, 100665 }, + { 0x6AE1, 100667 }, + { 0x6AE2, 100669 }, + { 0x6AE3, 100671 }, + { 0x6AE4, 100673 }, + { 0x6AE5, 100675 }, + { 0x6AE6, 100677 }, + { 0x6AE7, 100679 }, + { 0x6AE8, 100681 }, + { 0x6AE9, 100683 }, + { 0x6AEA, 100685 }, + { 0x6AEB, 100687 }, + { 0x6AEC, 100689 }, + { 0x6AED, 100691 }, + { 0x6AEE, 100693 }, + { 0x6AEF, 100695 }, + { 0x6AF0, 100697 }, + { 0x6AF1, 100699 }, + { 0x6AF2, 100701 }, + { 0x6AF3, 100703 }, + { 0x6AF4, 100705 }, + { 0x6AF5, 100707 }, + { 0x6AF6, 100709 }, + { 0x6AF7, 100711 }, + { 0x6AF8, 100713 }, + { 0x6AF9, 100715 }, + { 0x6AFA, 100717 }, + { 0x6AFB, 100719 }, + { 0x6AFC, 100721 }, + { 0x6AFD, 100723 }, + { 0x6AFE, 100725 }, + { 0x6AFF, 100727 }, + { 0x6B00, 100729 }, + { 0x6B01, 100731 }, + { 0x6B02, 100733 }, + { 0x6B03, 100735 }, + { 0x6B04, 100737 }, + { 0x6B05, 100739 }, + { 0x6B06, 100741 }, + { 0x6B07, 100743 }, + { 0x6B08, 100745 }, + { 0x6B09, 100747 }, + { 0x6B0A, 100749 }, + { 0x6B0B, 100751 }, + { 0x6B0C, 100753 }, + { 0x6B0D, 100755 }, + { 0x6B0E, 100757 }, + { 0x6B0F, 100759 }, + { 0x6B10, 100761 }, + { 0x6B11, 100763 }, + { 0x6B12, 100765 }, + { 0x6B13, 100767 }, + { 0x6B14, 100769 }, + { 0x6B15, 100771 }, + { 0x6B16, 100773 }, + { 0x6B17, 100775 }, + { 0x6B18, 100777 }, + { 0x6B19, 100779 }, + { 0x6B1A, 100781 }, + { 0x6B1B, 100783 }, + { 0x6B1C, 100785 }, + { 0x6B1D, 100787 }, + { 0x6B1E, 100789 }, + { 0x6B1F, 100791 }, + { 0x6B20, 100793 }, + { 0x6B21, 100795 }, + { 0x6B22, 100797 }, + { 0x6B23, 100799 }, + { 0x6B24, 100801 }, + { 0x6B25, 100803 }, + { 0x6B26, 100805 }, + { 0x6B27, 100807 }, + { 0x6B28, 100809 }, + { 0x6B29, 100811 }, + { 0x6B2A, 100813 }, + { 0x6B2B, 100815 }, + { 0x6B2C, 100817 }, + { 0x6B2D, 100819 }, + { 0x6B2E, 100821 }, + { 0x6B2F, 100823 }, + { 0x6B30, 100825 }, + { 0x6B31, 100827 }, + { 0x6B32, 100829 }, + { 0x6B33, 100831 }, + { 0x6B34, 100833 }, + { 0x6B35, 100835 }, + { 0x6B36, 100837 }, + { 0x6B37, 100839 }, + { 0x6B38, 100841 }, + { 0x6B39, 100843 }, + { 0x6B3A, 100845 }, + { 0x6B3B, 100847 }, + { 0x6B3C, 100849 }, + { 0x6B3D, 100851 }, + { 0x6B3E, 100853 }, + { 0x6B3F, 100855 }, + { 0x6B40, 100857 }, + { 0x6B41, 100859 }, + { 0x6B42, 100861 }, + { 0x6B43, 100863 }, + { 0x6B44, 100865 }, + { 0x6B45, 100867 }, + { 0x6B46, 100869 }, + { 0x6B47, 100871 }, + { 0x6B48, 100873 }, + { 0x6B49, 100875 }, + { 0x6B4A, 100877 }, + { 0x6B4B, 100879 }, + { 0x6B4C, 100881 }, + { 0x6B4D, 100883 }, + { 0x6B4E, 100885 }, + { 0x6B4F, 100887 }, + { 0x6B50, 100889 }, + { 0x6B51, 100891 }, + { 0x6B52, 100893 }, + { 0x6B53, 100895 }, + { 0x6B54, 100897 }, + { 0x6B55, 100899 }, + { 0x6B56, 100901 }, + { 0x6B57, 100903 }, + { 0x6B58, 100905 }, + { 0x6B59, 100907 }, + { 0x6B5A, 100909 }, + { 0x6B5B, 100911 }, + { 0x6B5C, 100913 }, + { 0x6B5D, 100915 }, + { 0x6B5E, 100917 }, + { 0x6B5F, 100919 }, + { 0x6B60, 100921 }, + { 0x6B61, 100923 }, + { 0x6B62, 100925 }, + { 0x6B63, 100927 }, + { 0x6B64, 100929 }, + { 0x6B65, 100931 }, + { 0x6B66, 100933 }, + { 0x6B67, 100935 }, + { 0x6B68, 100937 }, + { 0x6B69, 100939 }, + { 0x6B6A, 100941 }, + { 0x6B6B, 100943 }, + { 0x6B6C, 100945 }, + { 0x6B6D, 100947 }, + { 0x6B6E, 100949 }, + { 0x6B6F, 100951 }, + { 0x6B70, 100953 }, + { 0x6B71, 100955 }, + { 0x6B72, 100957 }, + { 0x6B73, 100959 }, + { 0x6B74, 100961 }, + { 0x6B75, 100963 }, + { 0x6B76, 100965 }, + { 0x6B77, 100967 }, + { 0x6B78, 100969 }, + { 0x6B79, 100971 }, + { 0x6B7A, 100973 }, + { 0x6B7B, 100975 }, + { 0x6B7C, 100977 }, + { 0x6B7D, 100979 }, + { 0x6B7E, 100981 }, + { 0x6B7F, 100983 }, + { 0x6B80, 100985 }, + { 0x6B81, 100987 }, + { 0x6B82, 100989 }, + { 0x6B83, 100991 }, + { 0x6B84, 100993 }, + { 0x6B85, 100995 }, + { 0x6B86, 100997 }, + { 0x6B87, 100999 }, + { 0x6B88, 101001 }, + { 0x6B89, 101003 }, + { 0x6B8A, 101005 }, + { 0x6B8B, 101007 }, + { 0x6B8C, 101009 }, + { 0x6B8D, 101011 }, + { 0x6B8E, 101013 }, + { 0x6B8F, 101015 }, + { 0x6B90, 101017 }, + { 0x6B91, 101019 }, + { 0x6B92, 101021 }, + { 0x6B93, 101023 }, + { 0x6B94, 101025 }, + { 0x6B95, 101027 }, + { 0x6B96, 101029 }, + { 0x6B97, 101031 }, + { 0x6B98, 101033 }, + { 0x6B99, 101035 }, + { 0x6B9A, 101037 }, + { 0x6B9B, 101039 }, + { 0x6B9C, 101041 }, + { 0x6B9D, 101043 }, + { 0x6B9E, 101045 }, + { 0x6B9F, 101047 }, + { 0x6BA0, 101049 }, + { 0x6BA1, 101051 }, + { 0x6BA2, 101053 }, + { 0x6BA3, 101055 }, + { 0x6BA4, 101057 }, + { 0x6BA5, 101059 }, + { 0x6BA6, 101061 }, + { 0x6BA7, 101063 }, + { 0x6BA8, 101065 }, + { 0x6BA9, 101067 }, + { 0x6BAA, 101069 }, + { 0x6BAB, 101071 }, + { 0x6BAC, 101073 }, + { 0x6BAD, 101075 }, + { 0x6BAE, 101077 }, + { 0x6BAF, 101079 }, + { 0x6BB0, 101081 }, + { 0x6BB1, 101083 }, + { 0x6BB2, 101085 }, + { 0x6BB3, 101087 }, + { 0x6BB4, 101089 }, + { 0x6BB5, 101091 }, + { 0x6BB6, 101093 }, + { 0x6BB7, 101095 }, + { 0x6BB8, 101097 }, + { 0x6BB9, 101099 }, + { 0x6BBA, 101101 }, + { 0x6BBB, 101103 }, + { 0x6BBC, 101105 }, + { 0x6BBD, 101107 }, + { 0x6BBE, 101109 }, + { 0x6BBF, 101111 }, + { 0x6BC0, 101113 }, + { 0x6BC1, 101115 }, + { 0x6BC2, 101117 }, + { 0x6BC3, 101119 }, + { 0x6BC4, 101121 }, + { 0x6BC5, 101123 }, + { 0x6BC6, 101125 }, + { 0x6BC7, 101127 }, + { 0x6BC8, 101129 }, + { 0x6BC9, 101131 }, + { 0x6BCA, 101133 }, + { 0x6BCB, 101135 }, + { 0x6BCC, 101137 }, + { 0x6BCD, 101139 }, + { 0x6BCE, 101141 }, + { 0x6BCF, 101143 }, + { 0x6BD0, 101145 }, + { 0x6BD1, 101147 }, + { 0x6BD2, 101149 }, + { 0x6BD3, 101151 }, + { 0x6BD4, 101153 }, + { 0x6BD5, 101155 }, + { 0x6BD6, 101157 }, + { 0x6BD7, 101159 }, + { 0x6BD8, 101161 }, + { 0x6BD9, 101163 }, + { 0x6BDA, 101165 }, + { 0x6BDB, 101167 }, + { 0x6BDC, 101169 }, + { 0x6BDD, 101171 }, + { 0x6BDE, 101173 }, + { 0x6BDF, 101175 }, + { 0x6BE0, 101177 }, + { 0x6BE1, 101179 }, + { 0x6BE2, 101181 }, + { 0x6BE3, 101183 }, + { 0x6BE4, 101185 }, + { 0x6BE5, 101187 }, + { 0x6BE6, 101189 }, + { 0x6BE7, 101191 }, + { 0x6BE8, 101193 }, + { 0x6BE9, 101195 }, + { 0x6BEA, 101197 }, + { 0x6BEB, 101199 }, + { 0x6BEC, 101201 }, + { 0x6BED, 101203 }, + { 0x6BEE, 101205 }, + { 0x6BEF, 101207 }, + { 0x6BF0, 101209 }, + { 0x6BF1, 101211 }, + { 0x6BF2, 101213 }, + { 0x6BF3, 101215 }, + { 0x6BF4, 101217 }, + { 0x6BF5, 101219 }, + { 0x6BF6, 101221 }, + { 0x6BF7, 101223 }, + { 0x6BF8, 101225 }, + { 0x6BF9, 101227 }, + { 0x6BFA, 101229 }, + { 0x6BFB, 101231 }, + { 0x6BFC, 101233 }, + { 0x6BFD, 101235 }, + { 0x6BFE, 101237 }, + { 0x6BFF, 101239 }, + { 0x6C00, 101241 }, + { 0x6C01, 101243 }, + { 0x6C02, 101245 }, + { 0x6C03, 101247 }, + { 0x6C04, 101249 }, + { 0x6C05, 101251 }, + { 0x6C06, 101253 }, + { 0x6C07, 101255 }, + { 0x6C08, 101257 }, + { 0x6C09, 101259 }, + { 0x6C0A, 101261 }, + { 0x6C0B, 101263 }, + { 0x6C0C, 101265 }, + { 0x6C0D, 101267 }, + { 0x6C0E, 101269 }, + { 0x6C0F, 101271 }, + { 0x6C10, 101273 }, + { 0x6C11, 101275 }, + { 0x6C12, 101277 }, + { 0x6C13, 101279 }, + { 0x6C14, 101281 }, + { 0x6C15, 101283 }, + { 0x6C16, 101285 }, + { 0x6C17, 101287 }, + { 0x6C18, 101289 }, + { 0x6C19, 101291 }, + { 0x6C1A, 101293 }, + { 0x6C1B, 101295 }, + { 0x6C1C, 101297 }, + { 0x6C1D, 101299 }, + { 0x6C1E, 101301 }, + { 0x6C1F, 101303 }, + { 0x6C20, 101305 }, + { 0x6C21, 101307 }, + { 0x6C22, 101309 }, + { 0x6C23, 101311 }, + { 0x6C24, 101313 }, + { 0x6C25, 101315 }, + { 0x6C26, 101317 }, + { 0x6C27, 101319 }, + { 0x6C28, 101321 }, + { 0x6C29, 101323 }, + { 0x6C2A, 101325 }, + { 0x6C2B, 101327 }, + { 0x6C2C, 101329 }, + { 0x6C2D, 101331 }, + { 0x6C2E, 101333 }, + { 0x6C2F, 101335 }, + { 0x6C30, 101337 }, + { 0x6C31, 101339 }, + { 0x6C32, 101341 }, + { 0x6C33, 101343 }, + { 0x6C34, 101345 }, + { 0x6C35, 101347 }, + { 0x6C36, 101349 }, + { 0x6C37, 101351 }, + { 0x6C38, 101353 }, + { 0x6C39, 101355 }, + { 0x6C3A, 101357 }, + { 0x6C3B, 101359 }, + { 0x6C3C, 101361 }, + { 0x6C3D, 101363 }, + { 0x6C3E, 101365 }, + { 0x6C3F, 101367 }, + { 0x6C40, 101369 }, + { 0x6C41, 101371 }, + { 0x6C42, 101373 }, + { 0x6C43, 101375 }, + { 0x6C44, 101377 }, + { 0x6C45, 101379 }, + { 0x6C46, 101381 }, + { 0x6C47, 101383 }, + { 0x6C48, 101385 }, + { 0x6C49, 101387 }, + { 0x6C4A, 101389 }, + { 0x6C4B, 101391 }, + { 0x6C4C, 101393 }, + { 0x6C4D, 101395 }, + { 0x6C4E, 101397 }, + { 0x6C4F, 101399 }, + { 0x6C50, 101401 }, + { 0x6C51, 101403 }, + { 0x6C52, 101405 }, + { 0x6C53, 101407 }, + { 0x6C54, 101409 }, + { 0x6C55, 101411 }, + { 0x6C56, 101413 }, + { 0x6C57, 101415 }, + { 0x6C58, 101417 }, + { 0x6C59, 101419 }, + { 0x6C5A, 101421 }, + { 0x6C5B, 101423 }, + { 0x6C5C, 101425 }, + { 0x6C5D, 101427 }, + { 0x6C5E, 101429 }, + { 0x6C5F, 101431 }, + { 0x6C60, 101433 }, + { 0x6C61, 101435 }, + { 0x6C62, 101437 }, + { 0x6C63, 101439 }, + { 0x6C64, 101441 }, + { 0x6C65, 101443 }, + { 0x6C66, 101445 }, + { 0x6C67, 101447 }, + { 0x6C68, 101449 }, + { 0x6C69, 101451 }, + { 0x6C6A, 101453 }, + { 0x6C6B, 101455 }, + { 0x6C6C, 101457 }, + { 0x6C6D, 101459 }, + { 0x6C6E, 101461 }, + { 0x6C6F, 101463 }, + { 0x6C70, 101465 }, + { 0x6C71, 101467 }, + { 0x6C72, 101469 }, + { 0x6C73, 101471 }, + { 0x6C74, 101473 }, + { 0x6C75, 101475 }, + { 0x6C76, 101477 }, + { 0x6C77, 101479 }, + { 0x6C78, 101481 }, + { 0x6C79, 101483 }, + { 0x6C7A, 101485 }, + { 0x6C7B, 101487 }, + { 0x6C7C, 101489 }, + { 0x6C7D, 101491 }, + { 0x6C7E, 101493 }, + { 0x6C7F, 101495 }, + { 0x6C80, 101497 }, + { 0x6C81, 101499 }, + { 0x6C82, 101501 }, + { 0x6C83, 101503 }, + { 0x6C84, 101505 }, + { 0x6C85, 101507 }, + { 0x6C86, 101509 }, + { 0x6C87, 101511 }, + { 0x6C88, 101513 }, + { 0x6C89, 101515 }, + { 0x6C8A, 101517 }, + { 0x6C8B, 101519 }, + { 0x6C8C, 101521 }, + { 0x6C8D, 101523 }, + { 0x6C8E, 101525 }, + { 0x6C8F, 101527 }, + { 0x6C90, 101529 }, + { 0x6C91, 101531 }, + { 0x6C92, 101533 }, + { 0x6C93, 101535 }, + { 0x6C94, 101537 }, + { 0x6C95, 101539 }, + { 0x6C96, 101541 }, + { 0x6C97, 101543 }, + { 0x6C98, 101545 }, + { 0x6C99, 101547 }, + { 0x6C9A, 101549 }, + { 0x6C9B, 101551 }, + { 0x6C9C, 101553 }, + { 0x6C9D, 101555 }, + { 0x6C9E, 101557 }, + { 0x6C9F, 101559 }, + { 0x6CA0, 101561 }, + { 0x6CA1, 101563 }, + { 0x6CA2, 101565 }, + { 0x6CA3, 101567 }, + { 0x6CA4, 101569 }, + { 0x6CA5, 101571 }, + { 0x6CA6, 101573 }, + { 0x6CA7, 101575 }, + { 0x6CA8, 101577 }, + { 0x6CA9, 101579 }, + { 0x6CAA, 101581 }, + { 0x6CAB, 101583 }, + { 0x6CAC, 101585 }, + { 0x6CAD, 101587 }, + { 0x6CAE, 101589 }, + { 0x6CAF, 101591 }, + { 0x6CB0, 101593 }, + { 0x6CB1, 101595 }, + { 0x6CB2, 101597 }, + { 0x6CB3, 101599 }, + { 0x6CB4, 101601 }, + { 0x6CB5, 101603 }, + { 0x6CB6, 101605 }, + { 0x6CB7, 101607 }, + { 0x6CB8, 101609 }, + { 0x6CB9, 101611 }, + { 0x6CBA, 101613 }, + { 0x6CBB, 101615 }, + { 0x6CBC, 101617 }, + { 0x6CBD, 101619 }, + { 0x6CBE, 101621 }, + { 0x6CBF, 101623 }, + { 0x6CC0, 101625 }, + { 0x6CC1, 101627 }, + { 0x6CC2, 101629 }, + { 0x6CC3, 101631 }, + { 0x6CC4, 101633 }, + { 0x6CC5, 101635 }, + { 0x6CC6, 101637 }, + { 0x6CC7, 101639 }, + { 0x6CC8, 101641 }, + { 0x6CC9, 101643 }, + { 0x6CCA, 101645 }, + { 0x6CCB, 101647 }, + { 0x6CCC, 101649 }, + { 0x6CCD, 101651 }, + { 0x6CCE, 101653 }, + { 0x6CCF, 101655 }, + { 0x6CD0, 101657 }, + { 0x6CD1, 101659 }, + { 0x6CD2, 101661 }, + { 0x6CD3, 101663 }, + { 0x6CD4, 101665 }, + { 0x6CD5, 101667 }, + { 0x6CD6, 101669 }, + { 0x6CD7, 101671 }, + { 0x6CD8, 101673 }, + { 0x6CD9, 101675 }, + { 0x6CDA, 101677 }, + { 0x6CDB, 101679 }, + { 0x6CDC, 101681 }, + { 0x6CDD, 101683 }, + { 0x6CDE, 101685 }, + { 0x6CDF, 101687 }, + { 0x6CE0, 101689 }, + { 0x6CE1, 101691 }, + { 0x6CE2, 101693 }, + { 0x6CE3, 101695 }, + { 0x6CE4, 101697 }, + { 0x6CE5, 101699 }, + { 0x6CE6, 101701 }, + { 0x6CE7, 101703 }, + { 0x6CE8, 101705 }, + { 0x6CE9, 101707 }, + { 0x6CEA, 101709 }, + { 0x6CEB, 101711 }, + { 0x6CEC, 101713 }, + { 0x6CED, 101715 }, + { 0x6CEE, 101717 }, + { 0x6CEF, 101719 }, + { 0x6CF0, 101721 }, + { 0x6CF1, 101723 }, + { 0x6CF2, 101725 }, + { 0x6CF3, 101727 }, + { 0x6CF4, 101729 }, + { 0x6CF5, 101731 }, + { 0x6CF6, 101733 }, + { 0x6CF7, 101735 }, + { 0x6CF8, 101737 }, + { 0x6CF9, 101739 }, + { 0x6CFA, 101741 }, + { 0x6CFB, 101743 }, + { 0x6CFC, 101745 }, + { 0x6CFD, 101747 }, + { 0x6CFE, 101749 }, + { 0x6CFF, 101751 }, + { 0x6D00, 101753 }, + { 0x6D01, 101755 }, + { 0x6D02, 101757 }, + { 0x6D03, 101759 }, + { 0x6D04, 101761 }, + { 0x6D05, 101763 }, + { 0x6D06, 112613 }, + { 0x6D07, 112616 }, + { 0x6D08, 112619 }, + { 0x6D09, 112622 }, + { 0x6D0A, 112625 }, + { 0x6D0B, 112628 }, + { 0x6D0C, 112631 }, + { 0x6D0D, 112634 }, + { 0x6D0E, 112637 }, + { 0x6D0F, 112640 }, + { 0x6D10, 114198 }, + { 0x6D11, 112643 }, + { 0x6D12, 112646 }, + { 0x6D13, 112649 }, + { 0x6D14, 112652 }, + { 0x6D15, 112655 }, + { 0x6D16, 112658 }, + { 0x6D17, 112661 }, + { 0x6D18, 112664 }, + { 0x6D19, 112667 }, + { 0x6D1A, 112670 }, + { 0x6D1B, 112673 }, + { 0x6D1C, 112676 }, + { 0x6D1D, 112679 }, + { 0x6D1E, 112682 }, + { 0x6D1F, 112685 }, + { 0x6D20, 112688 }, + { 0x6D21, 114201 }, + { 0x6D22, 112691 }, + { 0x6D23, 112694 }, + { 0x6D24, 112697 }, + { 0x6D25, 112700 }, + { 0x6D26, 112703 }, + { 0x6D27, 112706 }, + { 0x6D28, 112709 }, + { 0x6D29, 112712 }, + { 0x6D2A, 112715 }, + { 0x6D2B, 112718 }, + { 0x6D2C, 112721 }, + { 0x6D2D, 112724 }, + { 0x6D2E, 112727 }, + { 0x6D2F, 114204 }, + { 0x6D30, 112730 }, + { 0x6D31, 112733 }, + { 0x6D32, 114207 }, + { 0x6D33, 112736 }, + { 0x6D34, 112739 }, + { 0x6D35, 112742 }, + { 0x6D36, 112745 }, + { 0x6D37, 114210 }, + { 0x6D38, 112748 }, + { 0x6D39, 114213 }, + { 0x6D3A, 114216 }, + { 0x6D3B, 112751 }, + { 0x6D3C, 112754 }, + { 0x6D3D, 112757 }, + { 0x6D3E, 112760 }, + { 0x6D3F, 112763 }, + { 0x6D40, 112766 }, + { 0x6D41, 112769 }, + { 0x6D42, 112772 }, + { 0x6D43, 112775 }, + { 0x6D44, 112778 }, + { 0x6D45, 112781 }, + { 0x6D46, 112784 }, + { 0x6D47, 112787 }, + { 0x6D48, 112790 }, + { 0x6D49, 112793 }, + { 0x6D4A, 112796 }, + { 0x6D4B, 112799 }, + { 0x6D4C, 112802 }, + { 0x6D4D, 112805 }, + { 0x6D4E, 112808 }, + { 0x6D4F, 114219 }, + { 0x6D50, 114222 }, + { 0x6D51, 114225 }, + { 0x6D52, 112811 }, + { 0x6D53, 112814 }, + { 0x6D54, 112817 }, + { 0x6D55, 112820 }, + { 0x6D56, 112823 }, + { 0x6D57, 112826 }, + { 0x6D58, 112829 }, + { 0x6D59, 112832 }, + { 0x6D5A, 112835 }, + { 0x6D5B, 112838 }, + { 0x6D5C, 112841 }, + { 0x6D5D, 112844 }, + { 0x6D5E, 112847 }, + { 0x6D5F, 112850 }, + { 0x6D60, 112853 }, + { 0x6D61, 112856 }, + { 0x6D62, 112859 }, + { 0x6D63, 112862 }, + { 0x6D64, 112865 }, + { 0x6D65, 112868 }, + { 0x6D66, 112871 }, + { 0x6D67, 112874 }, + { 0x6D68, 112877 }, + { 0x6D69, 112880 }, + { 0x6D6A, 112883 }, + { 0x6D6B, 112886 }, + { 0x6D6C, 112889 }, + { 0x6D6D, 112892 }, + { 0x6D6E, 112895 }, + { 0x6D6F, 112898 }, + { 0x6D70, 112901 }, + { 0x6D71, 114228 }, + { 0x6D72, 112904 }, + { 0x6D73, 114231 }, + { 0x6D74, 112907 }, + { 0x6D75, 112910 }, + { 0x6D76, 114234 }, + { 0x6D77, 112913 }, + { 0x6D78, 114237 }, + { 0x6D79, 112916 }, + { 0x6D7A, 114240 }, + { 0x6D7B, 112919 }, + { 0x6D7C, 112922 }, + { 0x6D7D, 114243 }, + { 0x6D7E, 114246 }, + { 0x6D7F, 114249 }, + { 0x6D80, 112925 }, + { 0x6D81, 114252 }, + { 0x6D82, 114255 }, + { 0x6D83, 112928 }, + { 0x6D84, 112931 }, + { 0x6D85, 114258 }, + { 0x6D86, 114261 }, + { 0x6D87, 114264 }, + { 0x6D88, 112934 }, + { 0x6D89, 112937 }, + { 0x6D8A, 112940 }, + { 0x6D8B, 114267 }, + { 0x6D8C, 114270 }, + { 0x6D8D, 112943 }, + { 0x6D8E, 112946 }, + { 0x6D8F, 112949 }, + { 0x6D90, 112952 }, + { 0x6D91, 112955 }, + { 0x6D92, 114273 }, + { 0x6D93, 112958 }, + { 0x6D94, 112961 }, + { 0x6D95, 112964 }, + { 0x6D96, 112967 }, + { 0x6D97, 112970 }, + { 0x6D98, 112973 }, + { 0x6D99, 112976 }, + { 0x6D9A, 112979 }, + { 0x6D9B, 112982 }, + { 0x6D9C, 112985 }, + { 0x6D9D, 114276 }, + { 0x6D9E, 112988 }, + { 0x6D9F, 112991 }, + { 0x6DA0, 112994 }, + { 0x6DA1, 112997 }, + { 0x6DA2, 113000 }, + { 0x6DA3, 113003 }, + { 0x6DA4, 113006 }, + { 0x6DA5, 113009 }, + { 0x6DA6, 113012 }, + { 0x6DA7, 113015 }, + { 0x6DA8, 114279 }, + { 0x6DA9, 113018 }, + { 0x6DAA, 113021 }, + { 0x6DAB, 113024 }, + { 0x6DAC, 113027 }, + { 0x6DAD, 113030 }, + { 0x6DAE, 113033 }, + { 0x6DAF, 113036 }, + { 0x6DB0, 113039 }, + { 0x6DB1, 113042 }, + { 0x6DB2, 113045 }, + { 0x6DB3, 113048 }, + { 0x6DB4, 113051 }, + { 0x6DB5, 113054 }, + { 0x6DB6, 113057 }, + { 0x6DB7, 113060 }, + { 0x6DB8, 113063 }, + { 0x6DB9, 113066 }, + { 0x6DBA, 113069 }, + { 0x6DBB, 113072 }, + { 0x6DBC, 113075 }, + { 0x6DBD, 113078 }, + { 0x6DBE, 113081 }, + { 0x6DBF, 113084 }, + { 0x6DC0, 113087 }, + { 0x6DC1, 113090 }, + { 0x6DC2, 113093 }, + { 0x6DC3, 113096 }, + { 0x6DC4, 113099 }, + { 0x6DC5, 113102 }, + { 0x6DC6, 113105 }, + { 0x6DC7, 113108 }, + { 0x6DC8, 113111 }, + { 0x6DC9, 113114 }, + { 0x6DCA, 113117 }, + { 0x6DCB, 113120 }, + { 0x6DCC, 113123 }, + { 0x6DCD, 113126 }, + { 0x6DCE, 113129 }, + { 0x6DCF, 113132 }, + { 0x6DD0, 113135 }, + { 0x6DD1, 113138 }, + { 0x6DD2, 113141 }, + { 0x6DD3, 113144 }, + { 0x6DD4, 113147 }, + { 0x6DD5, 113150 }, + { 0x6DD6, 113153 }, + { 0x6DD7, 113156 }, + { 0x6DD8, 113159 }, + { 0x6DD9, 113162 }, + { 0x6DDA, 113165 }, + { 0x6DDB, 113168 }, + { 0x6DDC, 113171 }, + { 0x6DDD, 113174 }, + { 0x6DDE, 113177 }, + { 0x6DDF, 113180 }, + { 0x6DE0, 113183 }, + { 0x6DE1, 113186 }, + { 0x6DE2, 113189 }, + { 0x6DE3, 113192 }, + { 0x6DE4, 113195 }, + { 0x6DE5, 113198 }, + { 0x6DE6, 113201 }, + { 0x6DE7, 113204 }, + { 0x6DE8, 113207 }, + { 0x6DE9, 113210 }, + { 0x6DEA, 113213 }, + { 0x6DEB, 113216 }, + { 0x6DEC, 114282 }, + { 0x6DED, 114285 }, + { 0x6DEE, 113219 }, + { 0x6DEF, 113222 }, + { 0x6DF0, 113225 }, + { 0x6DF1, 113228 }, + { 0x6DF2, 113231 }, + { 0x6DF3, 114288 }, + { 0x6DF4, 113234 }, + { 0x6DF5, 113237 }, + { 0x6DF6, 114291 }, + { 0x6DF7, 113240 }, + { 0x6DF8, 113243 }, + { 0x6DF9, 113246 }, + { 0x6DFA, 113249 }, + { 0x6DFB, 113252 }, + { 0x6DFC, 113255 }, + { 0x6DFD, 114294 }, + { 0x6DFE, 113258 }, + { 0x6DFF, 114297 }, + { 0x6E00, 113261 }, + { 0x6E01, 113264 }, + { 0x6E02, 113267 }, + { 0x6E03, 113270 }, + { 0x6E04, 113273 }, + { 0x6E05, 113276 }, + { 0x6E06, 113279 }, + { 0x6E07, 113282 }, + { 0x6E08, 113285 }, + { 0x6E09, 113288 }, + { 0x6E0A, 113291 }, + { 0x6E0B, 114300 }, + { 0x6E0C, 113294 }, + { 0x6E0D, 113297 }, + { 0x6E0E, 113300 }, + { 0x6E0F, 113303 }, + { 0x6E10, 113306 }, + { 0x6E11, 113309 }, + { 0x6E12, 113312 }, + { 0x6E13, 113315 }, + { 0x6E14, 113318 }, + { 0x6E15, 113321 }, + { 0x6E16, 113324 }, + { 0x6E17, 113327 }, + { 0x6E18, 113330 }, + { 0x6E19, 113333 }, + { 0x6E1A, 113336 }, + { 0x6E1B, 113339 }, + { 0x6E1C, 113342 }, + { 0x6E1D, 113345 }, + { 0x6E1E, 113348 }, + { 0x6E1F, 113351 }, + { 0x6E20, 113354 }, + { 0x6E21, 113357 }, + { 0x6E22, 113360 }, + { 0x6E23, 113363 }, + { 0x6E24, 113366 }, + { 0x6E25, 113369 }, + { 0x6E26, 113372 }, + { 0x6E27, 113375 }, + { 0x6E28, 113378 }, + { 0x6E29, 113381 }, + { 0x6E2A, 113384 }, + { 0x6E2B, 113387 }, + { 0x6E2C, 113390 }, + { 0x6E2D, 113393 }, + { 0x6E2E, 113396 }, + { 0x6E2F, 113399 }, + { 0x6E30, 113402 }, + { 0x6E31, 113405 }, + { 0x6E32, 113408 }, + { 0x6E33, 113411 }, + { 0x6E34, 114303 }, + { 0x6E35, 113414 }, + { 0x6E36, 113417 }, + { 0x6E37, 113420 }, + { 0x6E38, 113423 }, + { 0x6E39, 113426 }, + { 0x6E3A, 113429 }, + { 0x6E3B, 113432 }, + { 0x6E3C, 113435 }, + { 0x6E3D, 113438 }, + { 0x6E3E, 113441 }, + { 0x6E3F, 113444 }, + { 0x6E40, 113447 }, + { 0x6E41, 113450 }, + { 0x6E42, 113453 }, + { 0x6E43, 113456 }, + { 0x6E44, 113459 }, + { 0x6E45, 113462 }, + { 0x6E46, 113465 }, + { 0x6E47, 113468 }, + { 0x6E48, 113471 }, + { 0x6E49, 113474 }, + { 0x6E4A, 113477 }, + { 0x6E4B, 114306 }, + { 0x6E4C, 113480 }, + { 0x6E4D, 113483 }, + { 0x6E4E, 113486 }, + { 0x6E4F, 113489 }, + { 0x6E50, 113492 }, + { 0x6E51, 114309 }, + { 0x6E52, 113495 }, + { 0x6E53, 113498 }, + { 0x6E54, 113501 }, + { 0x6E55, 113504 }, + { 0x6E56, 113507 }, + { 0x6E57, 114312 }, + { 0x6E58, 113510 }, + { 0x6E59, 113513 }, + { 0x6E5A, 113516 }, + { 0x6E5B, 113519 }, + { 0x6E5C, 113522 }, + { 0x6E5D, 113525 }, + { 0x6E5E, 113528 }, + { 0x6E5F, 113531 }, + { 0x6E60, 113534 }, + { 0x6E61, 113537 }, + { 0x6E62, 114315 }, + { 0x6E63, 113540 }, + { 0x6E64, 113543 }, + { 0x6E65, 113546 }, + { 0x6E66, 113549 }, + { 0x6E67, 113552 }, + { 0x6E68, 113555 }, + { 0x6E69, 113558 }, + { 0x6E6A, 113561 }, + { 0x6E6B, 113564 }, + { 0x6E6C, 113567 }, + { 0x6E6D, 113570 }, + { 0x6E6E, 113573 }, + { 0x6E6F, 113576 }, + { 0x6E70, 113579 }, + { 0x6E71, 113582 }, + { 0x6E72, 113585 }, + { 0x6E73, 113588 }, + { 0x6E74, 113591 }, + { 0x6E75, 113594 }, + { 0x6E76, 113597 }, + { 0x6E77, 114318 }, + { 0x6E78, 113600 }, + { 0x6E79, 113603 }, + { 0x6E7A, 114321 }, + { 0x6E7B, 114324 }, + { 0x6E7C, 114327 }, + { 0x6E7D, 113606 }, + { 0x6E7E, 113609 }, + { 0x6E7F, 113612 }, + { 0x6E80, 113615 }, + { 0x6E81, 114330 }, + { 0x6E82, 114333 }, + { 0x6E83, 114336 }, + { 0x6E84, 113618 }, + { 0x6E85, 113621 }, + { 0x6E86, 113624 }, + { 0x6E87, 113627 }, + { 0x6E88, 113630 }, + { 0x6E89, 113633 }, + { 0x6E8A, 113636 }, + { 0x6E8B, 113639 }, + { 0x6E8C, 113642 }, + { 0x6E8D, 113645 }, + { 0x6E8E, 113648 }, + { 0x6E8F, 113651 }, + { 0x6E90, 113654 }, + { 0x6E91, 113657 }, + { 0x6E92, 113660 }, + { 0x6E93, 113663 }, + { 0x6E94, 113666 }, + { 0x6E95, 113669 }, + { 0x6E96, 113672 }, + { 0x6E97, 113675 }, + { 0x6E98, 113678 }, + { 0x6E99, 113681 }, + { 0x6E9A, 113684 }, + { 0x6E9B, 114339 }, + { 0x6E9C, 113687 }, + { 0x6E9D, 113690 }, + { 0x6E9E, 113693 }, + { 0x6E9F, 113696 }, + { 0x6EA0, 113699 }, + { 0x6EA1, 114342 }, + { 0x6EA2, 113702 }, + { 0x6EA3, 113705 }, + { 0x6EA4, 113708 }, + { 0x6EA5, 113711 }, + { 0x6EA6, 114345 }, + { 0x6EA7, 113714 }, + { 0x6EA8, 113717 }, + { 0x6EA9, 113720 }, + { 0x6EAA, 114348 }, + { 0x6EAB, 113723 }, + { 0x6EAC, 113726 }, + { 0x6EAD, 113729 }, + { 0x6EAE, 113732 }, + { 0x6EAF, 113735 }, + { 0x6EB0, 113738 }, + { 0x6EB1, 113741 }, + { 0x6EB2, 113744 }, + { 0x6EB3, 113747 }, + { 0x6EB4, 113750 }, + { 0x6EB5, 114351 }, + { 0x6EB6, 113753 }, + { 0x6EB7, 113756 }, + { 0x6EB8, 114354 }, + { 0x6EB9, 113762 }, + { 0x6EBA, 113765 }, + { 0x6EBB, 113768 }, + { 0x6EBC, 114357 }, + { 0x6EBD, 113771 }, + { 0x6EBE, 113774 }, + { 0x6EBF, 113777 }, + { 0x6EC0, 113780 }, + { 0x6EC1, 113783 }, + { 0x6EC2, 113786 }, + { 0x6EC3, 113789 }, + { 0x6EC4, 113793 }, + { 0x6EC5, 113796 }, + { 0x6EC6, 113799 }, + { 0x6EC7, 113802 }, + { 0x6EC8, 113805 }, + { 0x6EC9, 113808 }, + { 0x6ECA, 113811 }, + { 0x6ECB, 113814 }, + { 0x6ECC, 113817 }, + { 0x6ECD, 113820 }, + { 0x6ECE, 113823 }, + { 0x6ECF, 113826 }, + { 0x6ED0, 113829 }, + { 0x6ED1, 113832 }, + { 0x6ED2, 113835 }, + { 0x6ED3, 113838 }, + { 0x6ED4, 113841 }, + { 0x6ED5, 114360 }, + { 0x6ED6, 113847 }, + { 0x6ED7, 113850 }, + { 0x6ED8, 113853 }, + { 0x6ED9, 113856 }, + { 0x6EDA, 113859 }, + { 0x6EDB, 113862 }, + { 0x6EDC, 113865 }, + { 0x6EDD, 113868 }, + { 0x6EDE, 113871 }, + { 0x6EDF, 113874 }, + { 0x6EE0, 113877 }, + { 0x6EE1, 113880 }, + { 0x6EE2, 113883 }, + { 0x6EE3, 113886 }, + { 0x6EE4, 113889 }, + { 0x6EE5, 113892 }, + { 0x6EE6, 113895 }, + { 0x6EE7, 113898 }, + { 0x6EE8, 113901 }, + { 0x6EE9, 113904 }, + { 0x6EEA, 113907 }, + { 0x6EEB, 113910 }, + { 0x6EEC, 113913 }, + { 0x6EED, 113916 }, + { 0x6EEE, 113919 }, + { 0x6EEF, 113922 }, + { 0x6EF0, 113925 }, + { 0x6EF1, 113928 }, + { 0x6EF2, 113931 }, + { 0x6EF3, 113934 }, + { 0x6EF4, 113937 }, + { 0x6EF5, 113940 }, + { 0x6EF6, 113943 }, + { 0x6EF7, 113946 }, + { 0x6EF8, 113949 }, + { 0x6EF9, 113952 }, + { 0x6EFA, 113955 }, + { 0x6EFB, 113958 }, + { 0x6EFC, 113961 }, + { 0x6EFD, 113964 }, + { 0x6EFE, 114366 }, + { 0x6EFF, 113967 }, + { 0x6F00, 113970 }, + { 0x6F01, 113973 }, + { 0x6F02, 113976 }, + { 0x6F03, 113979 }, + { 0x6F04, 113982 }, + { 0x6F05, 113985 }, + { 0x6F06, 114369 }, + { 0x6F07, 113988 }, + { 0x6F08, 113991 }, + { 0x6F09, 113994 }, + { 0x6F0A, 113997 }, + { 0x6F0B, 114000 }, + { 0x6F0C, 114003 }, + { 0x6F0D, 114006 }, + { 0x6F0E, 114009 }, + { 0x6F0F, 114012 }, + { 0x6F10, 114015 }, + { 0x6F11, 114018 }, + { 0x6F12, 114021 }, + { 0x6F13, 114024 }, + { 0x6F14, 114027 }, + { 0x6F15, 114030 }, + { 0x6F16, 114033 }, + { 0x6F17, 114036 }, + { 0x6F18, 114039 }, + { 0x6F19, 114042 }, + { 0x6F1A, 114045 }, + { 0x6F1B, 114048 }, + { 0x6F1C, 114051 }, + { 0x6F1D, 114054 }, + { 0x6F1E, 114057 }, + { 0x6F1F, 114060 }, + { 0x6F20, 114063 }, + { 0x6F21, 114066 }, + { 0x6F22, 114069 }, + { 0x6F23, 114072 }, + { 0x6F24, 114075 }, + { 0x6F25, 114078 }, + { 0x6F26, 114081 }, + { 0x6F27, 114084 }, + { 0x6F28, 114087 }, + { 0x6F29, 114090 }, + { 0x6F2A, 114093 }, + { 0x6F2B, 114096 }, + { 0x6F2C, 114099 }, + { 0x6F2D, 114102 }, + { 0x6F2E, 114105 }, + { 0x6F2F, 114108 }, + { 0x6F30, 114111 }, + { 0x6F31, 114114 }, + { 0x6F32, 114117 }, + { 0x6F33, 114120 }, + { 0x6F34, 114123 }, + { 0x6F35, 114126 }, + { 0x6F36, 114129 }, + { 0x6F37, 114132 }, + { 0x6F38, 114135 }, + { 0x6F39, 114138 }, + { 0x6F3A, 114141 }, + { 0x6F3B, 114144 }, + { 0x6F3C, 114147 }, + { 0x6F3D, 114150 }, + { 0x6F3E, 114153 }, + { 0x6F3F, 114156 }, + { 0x6F40, 114159 }, + { 0x6F41, 114162 }, + { 0x6F42, 114165 }, + { 0x6F43, 114168 }, + { 0x6F44, 114171 }, + { 0x6F45, 114174 }, + { 0x6F46, 114177 }, + { 0x6F47, 114180 }, + { 0x6F48, 114183 }, + { 0x6F49, 114186 }, + { 0x6F4A, 114189 }, + { 0x6F4B, 114192 }, + { 0x6F4C, 114195 }, + { 0x6F4D, 55185 }, + { 0x6F4E, 55213 }, + { 0x6F4F, 55277 }, + { 0x6F50, 55201 }, + { 0x6F51, 55269 }, + { 0x6F52, 55281 }, + { 0x6F53, 55193 }, + { 0x6F54, 55257 }, + { 0x6F55, 55209 }, + { 0x6F56, 55273 }, + { 0x6F57, 55205 }, + { 0x6F58, 55293 }, + { 0x6F59, 55301 }, + { 0x6F5A, 55261 }, + { 0x6F5B, 55297 }, + { 0x6F5C, 55245 }, + { 0x6F5D, 55241 }, + { 0x6F5E, 55289 }, + { 0x6F5F, 55197 }, + { 0x6F60, 55265 }, + { 0x6F61, 55225 }, + { 0x6F62, 55229 }, + { 0x6F63, 55285 }, + { 0x6F64, 55189 }, + { 0x6F65, 55253 }, + { 0x6F66, 55221 }, + { 0x6F67, 55249 }, + { 0x6F68, 55233 }, + { 0x6F69, 55217 }, + { 0x6F6A, 55237 }, + { 0x6F6B, 55145 }, + { 0x6F6C, 55130 }, + { 0x6F6D, 55165 }, + { 0x6F6E, 55140 }, + { 0x6F6F, 55175 }, + { 0x6F70, 55125 }, + { 0x6F71, 55160 }, + { 0x6F72, 55150 }, + { 0x6F73, 55135 }, + { 0x6F74, 55170 }, + { 0x6F75, 55155 }, + { 0x6F76, 55180 }, + { 0x6F77, 55323 }, + { 0x6F78, 55317 }, + { 0x6F79, 55305 }, + { 0x6F7A, 55077 }, + { 0x6F7B, 55311 }, + { 0x6F7C, 55081 }, + { 0x6F7D, 55109 }, + { 0x6F7E, 55085 }, + { 0x6F7F, 55093 }, + { 0x6F80, 55121 }, + { 0x6F81, 55101 }, + { 0x6F82, 55097 }, + { 0x6F83, 55089 }, + { 0x6F84, 55117 }, + { 0x6F85, 55113 }, + { 0x6F86, 55105 }, + { 0x6F87, 18482 }, + { 0x6F88, 18461 }, + { 0x6F89, 18344 }, + { 0x6F8A, 18338 }, + { 0x6F8B, 18293 }, + { 0x6F8C, 18617 }, + { 0x6F8D, 18456 }, + { 0x6F8E, 18315 }, + { 0x6F8F, 18527 }, + { 0x6F90, 18331 }, + { 0x6F91, 18324 }, + { 0x6F92, 18605 }, + { 0x6F93, 18265 }, + { 0x6F94, 18507 }, + { 0x6F95, 18585 }, + { 0x6F96, 18549 }, + { 0x6F97, 18609 }, + { 0x6F98, 18573 }, + { 0x6F99, 18565 }, + { 0x6F9A, 18601 }, + { 0x6F9B, 18511 }, + { 0x6F9C, 18366 }, + { 0x6F9D, 18613 }, + { 0x6F9E, 18466 }, + { 0x6F9F, 18278 }, + { 0x6FA0, 18414 }, + { 0x6FA1, 18545 }, + { 0x6FA2, 18523 }, + { 0x6FA3, 18589 }, + { 0x6FA4, 18569 }, + { 0x6FA5, 18288 }, + { 0x6FA6, 18433 }, + { 0x6FA7, 18250 }, + { 0x6FA8, 18621 }, + { 0x6FA9, 18419 }, + { 0x6FAA, 18452 }, + { 0x6FAB, 18503 }, + { 0x6FAC, 18625 }, + { 0x6FAD, 18557 }, + { 0x6FAE, 18378 }, + { 0x6FAF, 18260 }, + { 0x6FB0, 18302 }, + { 0x6FB1, 18320 }, + { 0x6FB2, 18581 }, + { 0x6FB3, 18398 }, + { 0x6FB4, 18350 }, + { 0x6FB5, 18487 }, + { 0x6FB6, 18470 }, + { 0x6FB7, 18537 }, + { 0x6FB8, 18597 }, + { 0x6FB9, 18495 }, + { 0x6FBA, 18274 }, + { 0x6FBB, 18629 }, + { 0x6FBC, 18386 }, + { 0x6FBD, 18553 }, + { 0x6FBE, 18448 }, + { 0x6FBF, 18491 }, + { 0x6FC0, 18374 }, + { 0x6FC1, 18354 }, + { 0x6FC2, 18382 }, + { 0x6FC3, 18358 }, + { 0x6FC4, 18283 }, + { 0x6FC5, 18533 }, + { 0x6FC6, 18410 }, + { 0x6FC7, 18442 }, + { 0x6FC8, 18428 }, + { 0x6FC9, 18519 }, + { 0x6FCA, 18561 }, + { 0x6FCB, 18577 }, + { 0x6FCC, 18478 }, + { 0x6FCD, 18474 }, + { 0x6FCE, 18402 }, + { 0x6FCF, 18499 }, + { 0x6FD0, 18424 }, + { 0x6FD1, 18541 }, + { 0x6FD2, 18362 }, + { 0x6FD3, 18438 }, + { 0x6FD4, 18515 }, + { 0x6FD5, 18390 }, + { 0x6FD6, 18311 }, + { 0x6FD7, 18270 }, + { 0x6FD8, 18406 }, + { 0x6FD9, 18370 }, + { 0x6FDA, 18256 }, + { 0x6FDB, 18307 }, + { 0x6FDC, 18298 }, + { 0x6FDD, 18394 }, + { 0x6FDE, 18824 }, + { 0x6FDF, 18652 }, + { 0x6FE0, 18748 }, + { 0x6FE1, 18703 }, + { 0x6FE2, 18679 }, + { 0x6FE3, 18684 }, + { 0x6FE4, 18765 }, + { 0x6FE5, 18832 }, + { 0x6FE6, 18840 }, + { 0x6FE7, 18661 }, + { 0x6FE8, 18828 }, + { 0x6FE9, 18760 }, + { 0x6FEA, 18669 }, + { 0x6FEB, 18778 }, + { 0x6FEC, 18689 }, + { 0x6FED, 18873 }, + { 0x6FEE, 18699 }, + { 0x6FEF, 18647 }, + { 0x6FF0, 18743 }, + { 0x6FF1, 18869 }, + { 0x6FF2, 18730 }, + { 0x6FF3, 18716 }, + { 0x6FF4, 18694 }, + { 0x6FF5, 18795 }, + { 0x6FF6, 18861 }, + { 0x6FF7, 18836 }, + { 0x6FF8, 18799 }, + { 0x6FF9, 18783 }, + { 0x6FFA, 18756 }, + { 0x6FFB, 18844 }, + { 0x6FFC, 18773 }, + { 0x6FFD, 18787 }, + { 0x6FFE, 18857 }, + { 0x6FFF, 18752 }, + { 0x7000, 18721 }, + { 0x7001, 18815 }, + { 0x7002, 18819 }, + { 0x7003, 18807 }, + { 0x7004, 18708 }, + { 0x7005, 18803 }, + { 0x7006, 18865 }, + { 0x7007, 18849 }, + { 0x7008, 18853 }, + { 0x7009, 18725 }, + { 0x700A, 18712 }, + { 0x700B, 18769 }, + { 0x700C, 18657 }, + { 0x700D, 18791 }, + { 0x700E, 18642 }, + { 0x700F, 18637 }, + { 0x7010, 18675 }, + { 0x7011, 18811 }, + { 0x7012, 18739 }, + { 0x7013, 18633 }, + { 0x7014, 18665 }, + { 0x7015, 18735 }, + { 0x7016, 19129 }, + { 0x7017, 18955 }, + { 0x7018, 18979 }, + { 0x7019, 19272 }, + { 0x701A, 19117 }, + { 0x701B, 19276 }, + { 0x701C, 19125 }, + { 0x701D, 19171 }, + { 0x701E, 19252 }, + { 0x701F, 19093 }, + { 0x7020, 19066 }, + { 0x7021, 18950 }, + { 0x7022, 19101 }, + { 0x7023, 19236 }, + { 0x7024, 19199 }, + { 0x7025, 19005 }, + { 0x7026, 19280 }, + { 0x7027, 18987 }, + { 0x7028, 19175 }, + { 0x7029, 18895 }, + { 0x702A, 19155 }, + { 0x702B, 19014 }, + { 0x702C, 19232 }, + { 0x702D, 19010 }, + { 0x702E, 19089 }, + { 0x702F, 19179 }, + { 0x7030, 18904 }, + { 0x7031, 19072 }, + { 0x7032, 19113 }, + { 0x7033, 19240 }, + { 0x7034, 19142 }, + { 0x7035, 19080 }, + { 0x7036, 19163 }, + { 0x7037, 19223 }, + { 0x7038, 19085 }, + { 0x7039, 19260 }, + { 0x703A, 18886 }, + { 0x703B, 19058 }, + { 0x703C, 19203 }, + { 0x703D, 18930 }, + { 0x703E, 19256 }, + { 0x703F, 19219 }, + { 0x7040, 19264 }, + { 0x7041, 19244 }, + { 0x7042, 19121 }, + { 0x7043, 18900 }, + { 0x7044, 19109 }, + { 0x7045, 18946 }, + { 0x7046, 19146 }, + { 0x7047, 18983 }, + { 0x7048, 19268 }, + { 0x7049, 19191 }, + { 0x704A, 18891 }, + { 0x704B, 19134 }, + { 0x704C, 18926 }, + { 0x704D, 19248 }, + { 0x704E, 19150 }, + { 0x704F, 19207 }, + { 0x7050, 18918 }, + { 0x7051, 19038 }, + { 0x7052, 19097 }, + { 0x7053, 19195 }, + { 0x7054, 18877 }, + { 0x7055, 18922 }, + { 0x7056, 19046 }, + { 0x7057, 19042 }, + { 0x7058, 18971 }, + { 0x7059, 19228 }, + { 0x705A, 19050 }, + { 0x705B, 19062 }, + { 0x705C, 18995 }, + { 0x705D, 19054 }, + { 0x705E, 19026 }, + { 0x705F, 18881 }, + { 0x7060, 18975 }, + { 0x7061, 19030 }, + { 0x7062, 19159 }, + { 0x7063, 19211 }, + { 0x7064, 18938 }, + { 0x7065, 19183 }, + { 0x7066, 19187 }, + { 0x7067, 19215 }, + { 0x7068, 19105 }, + { 0x7069, 18991 }, + { 0x706A, 19000 }, + { 0x706B, 19167 }, + { 0x706C, 19138 }, + { 0x706D, 19018 }, + { 0x706E, 19022 }, + { 0x706F, 19076 }, + { 0x7070, 18908 }, + { 0x7071, 18913 }, + { 0x7072, 19034 }, + { 0x7073, 18942 }, + { 0x7074, 18934 }, + { 0x7075, 18963 }, + { 0x7076, 18959 }, + { 0x7077, 18967 }, + { 0x7078, 19459 }, + { 0x7079, 19414 }, + { 0x707A, 19344 }, + { 0x707B, 19471 }, + { 0x707C, 19612 }, + { 0x707D, 19446 }, + { 0x707E, 19608 }, + { 0x707F, 19620 }, + { 0x7080, 19740 }, + { 0x7081, 19511 }, + { 0x7082, 19640 }, + { 0x7083, 19604 }, + { 0x7084, 19531 }, + { 0x7085, 19600 }, + { 0x7086, 19752 }, + { 0x7087, 19551 }, + { 0x7088, 19704 }, + { 0x7089, 19495 }, + { 0x708A, 19398 }, + { 0x708B, 19316 }, + { 0x708C, 19736 }, + { 0x708D, 19434 }, + { 0x708E, 19382 }, + { 0x708F, 19584 }, + { 0x7090, 19592 }, + { 0x7091, 19716 }, + { 0x7092, 19467 }, + { 0x7093, 19700 }, + { 0x7094, 19418 }, + { 0x7095, 19732 }, + { 0x7096, 19567 }, + { 0x7097, 19728 }, + { 0x7098, 19308 }, + { 0x7099, 19422 }, + { 0x709A, 19684 }, + { 0x709B, 19748 }, + { 0x709C, 19487 }, + { 0x709D, 19720 }, + { 0x709E, 19652 }, + { 0x709F, 19491 }, + { 0x70A0, 19475 }, + { 0x70A1, 19660 }, + { 0x70A2, 19523 }, + { 0x70A3, 19664 }, + { 0x70A4, 19340 }, + { 0x70A5, 19336 }, + { 0x70A6, 19688 }, + { 0x70A7, 19450 }, + { 0x70A8, 19572 }, + { 0x70A9, 19515 }, + { 0x70AA, 19708 }, + { 0x70AB, 19394 }, + { 0x70AC, 19644 }, + { 0x70AD, 19426 }, + { 0x70AE, 19527 }, + { 0x70AF, 19636 }, + { 0x70B0, 19744 }, + { 0x70B1, 19656 }, + { 0x70B2, 19692 }, + { 0x70B3, 19430 }, + { 0x70B4, 19360 }, + { 0x70B5, 19696 }, + { 0x70B6, 19519 }, + { 0x70B7, 19328 }, + { 0x70B8, 19668 }, + { 0x70B9, 19588 }, + { 0x70BA, 19724 }, + { 0x70BB, 19559 }, + { 0x70BC, 19352 }, + { 0x70BD, 19563 }, + { 0x70BE, 19483 }, + { 0x70BF, 19628 }, + { 0x70C0, 19543 }, + { 0x70C1, 19320 }, + { 0x70C2, 19672 }, + { 0x70C3, 19680 }, + { 0x70C4, 19555 }, + { 0x70C5, 19463 }, + { 0x70C6, 19324 }, + { 0x70C7, 19499 }, + { 0x70C8, 19547 }, + { 0x70C9, 19712 }, + { 0x70CA, 19596 }, + { 0x70CB, 19442 }, + { 0x70CC, 19676 }, + { 0x70CD, 19624 }, + { 0x70CE, 19616 }, + { 0x70CF, 19648 }, + { 0x70D0, 19288 }, + { 0x70D1, 19368 }, + { 0x70D2, 19406 }, + { 0x70D3, 19410 }, + { 0x70D4, 19348 }, + { 0x70D5, 19378 }, + { 0x70D6, 19576 }, + { 0x70D7, 19580 }, + { 0x70D8, 19284 }, + { 0x70D9, 19402 }, + { 0x70DA, 19292 }, + { 0x70DB, 19535 }, + { 0x70DC, 19632 }, + { 0x70DD, 19438 }, + { 0x70DE, 19300 }, + { 0x70DF, 19390 }, + { 0x70E0, 19503 }, + { 0x70E1, 19356 }, + { 0x70E2, 19296 }, + { 0x70E3, 19539 }, + { 0x70E4, 19364 }, + { 0x70E5, 19479 }, + { 0x70E6, 19332 }, + { 0x70E7, 19373 }, + { 0x70E8, 19304 }, + { 0x70E9, 19507 }, + { 0x70EA, 19454 }, + { 0x70EB, 19386 }, + { 0x70EC, 19312 }, + { 0x70ED, 20100 }, + { 0x70EE, 20206 }, + { 0x70EF, 20254 }, + { 0x70F0, 19857 }, + { 0x70F1, 19991 }, + { 0x70F2, 20061 }, + { 0x70F3, 19915 }, + { 0x70F4, 19951 }, + { 0x70F5, 19931 }, + { 0x70F6, 20338 }, + { 0x70F7, 20108 }, + { 0x70F8, 20177 }, + { 0x70F9, 19959 }, + { 0x70FA, 20112 }, + { 0x70FB, 20250 }, + { 0x70FC, 19999 }, + { 0x70FD, 19939 }, + { 0x70FE, 20386 }, + { 0x70FF, 20153 }, + { 0x7100, 19975 }, + { 0x7101, 20053 }, + { 0x7102, 19865 }, + { 0x7103, 20334 }, + { 0x7104, 20116 }, + { 0x7105, 20069 }, + { 0x7106, 20326 }, + { 0x7107, 20120 }, + { 0x7108, 20290 }, + { 0x7109, 20342 }, + { 0x710A, 20286 }, + { 0x710B, 20157 }, + { 0x710C, 19935 }, + { 0x710D, 20366 }, + { 0x710E, 20077 }, + { 0x710F, 20242 }, + { 0x7110, 20390 }, + { 0x7111, 20374 }, + { 0x7112, 19877 }, + { 0x7113, 20065 }, + { 0x7114, 20358 }, + { 0x7115, 20104 }, + { 0x7116, 20201 }, + { 0x7117, 19943 }, + { 0x7118, 19923 }, + { 0x7119, 20095 }, + { 0x711A, 20394 }, + { 0x711B, 20226 }, + { 0x711C, 20238 }, + { 0x711D, 20210 }, + { 0x711E, 20310 }, + { 0x711F, 19825 }, + { 0x7120, 20302 }, + { 0x7121, 20246 }, + { 0x7122, 20298 }, + { 0x7123, 20346 }, + { 0x7124, 20306 }, + { 0x7125, 20214 }, + { 0x7126, 20057 }, + { 0x7127, 19829 }, + { 0x7128, 20197 }, + { 0x7129, 20354 }, + { 0x712A, 20382 }, + { 0x712B, 20378 }, + { 0x712C, 20262 }, + { 0x712D, 20073 }, + { 0x712E, 20145 }, + { 0x712F, 20133 }, + { 0x7130, 20033 }, + { 0x7131, 19983 }, + { 0x7132, 20049 }, + { 0x7133, 20003 }, + { 0x7134, 19910 }, + { 0x7135, 20007 }, + { 0x7136, 20258 }, + { 0x7137, 20266 }, + { 0x7138, 20294 }, + { 0x7139, 20230 }, + { 0x713A, 20322 }, + { 0x713B, 19845 }, + { 0x713C, 20234 }, + { 0x713D, 20278 }, + { 0x713E, 19849 }, + { 0x713F, 19873 }, + { 0x7140, 20370 }, + { 0x7141, 20037 }, + { 0x7142, 19768 }, + { 0x7143, 20141 }, + { 0x7144, 20161 }, + { 0x7145, 20218 }, + { 0x7146, 20362 }, + { 0x7147, 19905 }, + { 0x7148, 20149 }, + { 0x7149, 20173 }, + { 0x714A, 20081 }, + { 0x714B, 20029 }, + { 0x714C, 19897 }, + { 0x714D, 20085 }, + { 0x714E, 20318 }, + { 0x714F, 19772 }, + { 0x7150, 19893 }, + { 0x7151, 20181 }, + { 0x7152, 20274 }, + { 0x7153, 19853 }, + { 0x7154, 20169 }, + { 0x7155, 20137 }, + { 0x7156, 20350 }, + { 0x7157, 20270 }, + { 0x7158, 19811 }, + { 0x7159, 19777 }, + { 0x715A, 19841 }, + { 0x715B, 20124 }, + { 0x715C, 19756 }, + { 0x715D, 19979 }, + { 0x715E, 19764 }, + { 0x715F, 19760 }, + { 0x7160, 19861 }, + { 0x7161, 19816 }, + { 0x7162, 19955 }, + { 0x7163, 19963 }, + { 0x7164, 20089 }, + { 0x7165, 20189 }, + { 0x7166, 20222 }, + { 0x7167, 20282 }, + { 0x7168, 20314 }, + { 0x7169, 20016 }, + { 0x716A, 20011 }, + { 0x716B, 20025 }, + { 0x716C, 20021 }, + { 0x716D, 20045 }, + { 0x716E, 20165 }, + { 0x716F, 20128 }, + { 0x7170, 19919 }, + { 0x7171, 19995 }, + { 0x7172, 19837 }, + { 0x7173, 19987 }, + { 0x7174, 19795 }, + { 0x7175, 19803 }, + { 0x7176, 20185 }, + { 0x7177, 19927 }, + { 0x7178, 20330 }, + { 0x7179, 19901 }, + { 0x717A, 19947 }, + { 0x717B, 20193 }, + { 0x717C, 19782 }, + { 0x717D, 19807 }, + { 0x717E, 19821 }, + { 0x717F, 19869 }, + { 0x7180, 19791 }, + { 0x7181, 19885 }, + { 0x7182, 19799 }, + { 0x7183, 19881 }, + { 0x7184, 19971 }, + { 0x7185, 19787 }, + { 0x7186, 19889 }, + { 0x7187, 19967 }, + { 0x7188, 19833 }, + { 0x7189, 20041 }, + { 0x718A, 20411 }, + { 0x718B, 20403 }, + { 0x718C, 20419 }, + { 0x718D, 20407 }, + { 0x718E, 20491 }, + { 0x718F, 20519 }, + { 0x7190, 20483 }, + { 0x7191, 20423 }, + { 0x7192, 20499 }, + { 0x7193, 20579 }, + { 0x7194, 20595 }, + { 0x7195, 20515 }, + { 0x7196, 20547 }, + { 0x7197, 20599 }, + { 0x7198, 20399 }, + { 0x7199, 20511 }, + { 0x719A, 20587 }, + { 0x719B, 20451 }, + { 0x719C, 20583 }, + { 0x719D, 20535 }, + { 0x719E, 20471 }, + { 0x719F, 20563 }, + { 0x71A0, 20443 }, + { 0x71A1, 20603 }, + { 0x71A2, 20531 }, + { 0x71A3, 20507 }, + { 0x71A4, 20459 }, + { 0x71A5, 20555 }, + { 0x71A6, 20567 }, + { 0x71A7, 20559 }, + { 0x71A8, 20527 }, + { 0x71A9, 20487 }, + { 0x71AA, 20447 }, + { 0x71AB, 20439 }, + { 0x71AC, 20575 }, + { 0x71AD, 20467 }, + { 0x71AE, 20611 }, + { 0x71AF, 20551 }, + { 0x71B0, 20503 }, + { 0x71B1, 20571 }, + { 0x71B2, 20463 }, + { 0x71B3, 20455 }, + { 0x71B4, 20427 }, + { 0x71B5, 20479 }, + { 0x71B6, 20415 }, + { 0x71B7, 20543 }, + { 0x71B8, 20495 }, + { 0x71B9, 20431 }, + { 0x71BA, 20435 }, + { 0x71BB, 20539 }, + { 0x71BC, 20523 }, + { 0x71BD, 20475 }, + { 0x71BE, 20607 }, + { 0x71BF, 20591 }, + { 0x71C0, 7067 }, + { 0x71C1, 7094 }, + { 0x71C2, 7073 }, + { 0x71C3, 7091 }, + { 0x71C4, 7037 }, + { 0x71C5, 7040 }, + { 0x71C6, 7028 }, + { 0x71C7, 7100 }, + { 0x71C8, 7109 }, + { 0x71C9, 7085 }, + { 0x71CA, 7079 }, + { 0x71CB, 7076 }, + { 0x71CC, 7118 }, + { 0x71CD, 7052 }, + { 0x71CE, 7112 }, + { 0x71CF, 7097 }, + { 0x71D0, 7058 }, + { 0x71D1, 7055 }, + { 0x71D2, 7034 }, + { 0x71D3, 7064 }, + { 0x71D4, 7103 }, + { 0x71D5, 7115 }, + { 0x71D6, 7043 }, + { 0x71D7, 7070 }, + { 0x71D8, 7031 }, + { 0x71D9, 7046 }, + { 0x71DA, 7088 }, + { 0x71DB, 7049 }, + { 0x71DC, 7082 }, + { 0x71DD, 7061 }, + { 0x71DE, 7106 }, + { 0x71DF, 7013 }, + { 0x71E0, 6995 }, + { 0x71E1, 7001 }, + { 0x71E2, 7022 }, + { 0x71E3, 7007 }, + { 0x71E4, 7004 }, + { 0x71E5, 6998 }, + { 0x71E6, 7019 }, + { 0x71E7, 7016 }, + { 0x71E8, 7010 }, + { 0x71E9, 6993 }, + { 0x71EA, 7025 }, + { 0x71EB, 66481 }, + { 0x71EC, 66472 }, + { 0x71ED, 66475 }, + { 0x71EE, 66478 }, + { 0x71EF, 66403 }, + { 0x71F0, 66394 }, + { 0x71F1, 66397 }, + { 0x71F2, 66400 }, + { 0x71F3, 66517 }, + { 0x71F4, 66508 }, + { 0x71F5, 66511 }, + { 0x71F6, 66514 }, + { 0x71F7, 66424 }, + { 0x71F8, 66415 }, + { 0x71F9, 66418 }, + { 0x71FA, 66421 }, + { 0x71FB, 66445 }, + { 0x71FC, 66436 }, + { 0x71FD, 66439 }, + { 0x71FE, 66442 }, + { 0x71FF, 66505 }, + { 0x7200, 66496 }, + { 0x7201, 66499 }, + { 0x7202, 66502 }, + { 0x7203, 66541 }, + { 0x7204, 66532 }, + { 0x7205, 66535 }, + { 0x7206, 66538 }, + { 0x7207, 66601 }, + { 0x7208, 66592 }, + { 0x7209, 66595 }, + { 0x720A, 66598 }, + { 0x720B, 66623 }, + { 0x720C, 66607 }, + { 0x720D, 66631 }, + { 0x720E, 66627 }, + { 0x720F, 66580 }, + { 0x7210, 66589 }, + { 0x7211, 66583 }, + { 0x7212, 66586 }, + { 0x7213, 66620 }, + { 0x7214, 66611 }, + { 0x7215, 66614 }, + { 0x7216, 66617 }, + { 0x7217, 66466 }, + { 0x7218, 66457 }, + { 0x7219, 66460 }, + { 0x721A, 66463 }, + { 0x721B, 66448 }, + { 0x721C, 66556 }, + { 0x721D, 66430 }, + { 0x721E, 66559 }, + { 0x721F, 66490 }, + { 0x7220, 66526 }, + { 0x7221, 66520 }, + { 0x7222, 66484 }, + { 0x7223, 66565 }, + { 0x7224, 66568 }, + { 0x7225, 66406 }, + { 0x7226, 66454 }, + { 0x7227, 66469 }, + { 0x7228, 66433 }, + { 0x7229, 66451 }, + { 0x722A, 66553 }, + { 0x722B, 66493 }, + { 0x722C, 66412 }, + { 0x722D, 66487 }, + { 0x722E, 66562 }, + { 0x722F, 66571 }, + { 0x7230, 66409 }, + { 0x7231, 66577 }, + { 0x7232, 66550 }, + { 0x7233, 66604 }, + { 0x7234, 66574 }, + { 0x7235, 66523 }, + { 0x7236, 66427 }, + { 0x7237, 66547 }, + { 0x7238, 66544 }, + { 0x7239, 66529 }, + { 0x723A, 66382 }, + { 0x723B, 66364 }, + { 0x723C, 66370 }, + { 0x723D, 66391 }, + { 0x723E, 66376 }, + { 0x723F, 66373 }, + { 0x7240, 66367 }, + { 0x7241, 66388 }, + { 0x7242, 66385 }, + { 0x7243, 66379 }, + { 0x7244, 20735 }, + { 0x7245, 20679 }, + { 0x7246, 20691 }, + { 0x7247, 20671 }, + { 0x7248, 20719 }, + { 0x7249, 20727 }, + { 0x724A, 20711 }, + { 0x724B, 20731 }, + { 0x724C, 20743 }, + { 0x724D, 20675 }, + { 0x724E, 20739 }, + { 0x724F, 20703 }, + { 0x7250, 20707 }, + { 0x7251, 20715 }, + { 0x7252, 20663 }, + { 0x7253, 20659 }, + { 0x7254, 20723 }, + { 0x7255, 20695 }, + { 0x7256, 20655 }, + { 0x7257, 20699 }, + { 0x7258, 20747 }, + { 0x7259, 20687 }, + { 0x725A, 20751 }, + { 0x725B, 20635 }, + { 0x725C, 20647 }, + { 0x725D, 20683 }, + { 0x725E, 20651 }, + { 0x725F, 20667 }, + { 0x7260, 20639 }, + { 0x7261, 20643 }, + { 0x7262, 20765 }, + { 0x7263, 20755 }, + { 0x7264, 20760 }, + { 0x7265, 20770 }, + { 0x7266, 20775 }, + { 0x7267, 20631 }, + { 0x7268, 64367 }, + { 0x7269, 64371 }, + { 0x726A, 64303 }, + { 0x726B, 64307 }, + { 0x726C, 64351 }, + { 0x726D, 64355 }, + { 0x726E, 64319 }, + { 0x726F, 64323 }, + { 0x7270, 64295 }, + { 0x7271, 64299 }, + { 0x7272, 64343 }, + { 0x7273, 64347 }, + { 0x7274, 64383 }, + { 0x7275, 64387 }, + { 0x7276, 64359 }, + { 0x7277, 64363 }, + { 0x7278, 64391 }, + { 0x7279, 64395 }, + { 0x727A, 64311 }, + { 0x727B, 64315 }, + { 0x727C, 64375 }, + { 0x727D, 64379 }, + { 0x727E, 64287 }, + { 0x727F, 64291 }, + { 0x7280, 64327 }, + { 0x7281, 64331 }, + { 0x7282, 64335 }, + { 0x7283, 64339 }, + { 0x7284, 64458 }, + { 0x7285, 64502 }, + { 0x7286, 64442 }, + { 0x7287, 64438 }, + { 0x7288, 64486 }, + { 0x7289, 64454 }, + { 0x728A, 64482 }, + { 0x728B, 64490 }, + { 0x728C, 64466 }, + { 0x728D, 64474 }, + { 0x728E, 64446 }, + { 0x728F, 64470 }, + { 0x7290, 64494 }, + { 0x7291, 64478 }, + { 0x7292, 64506 }, + { 0x7293, 64498 }, + { 0x7294, 64450 }, + { 0x7295, 64430 }, + { 0x7296, 64462 }, + { 0x7297, 64434 }, + { 0x7298, 64049 }, + { 0x7299, 64034 }, + { 0x729A, 64044 }, + { 0x729B, 64054 }, + { 0x729C, 64059 }, + { 0x729D, 64039 }, + { 0x729E, 64064 }, + { 0x729F, 64162 }, + { 0x72A0, 64172 }, + { 0x72A1, 64121 }, + { 0x72A2, 64167 }, + { 0x72A3, 64147 }, + { 0x72A4, 64232 }, + { 0x72A5, 64217 }, + { 0x72A6, 64222 }, + { 0x72A7, 64227 }, + { 0x72A8, 64157 }, + { 0x72A9, 64187 }, + { 0x72AA, 64152 }, + { 0x72AB, 64073 }, + { 0x72AC, 64205 }, + { 0x72AD, 64104 }, + { 0x72AE, 64271 }, + { 0x72AF, 64247 }, + { 0x72B0, 64255 }, + { 0x72B1, 64283 }, + { 0x72B2, 64263 }, + { 0x72B3, 64259 }, + { 0x72B4, 64251 }, + { 0x72B5, 64279 }, + { 0x72B6, 64275 }, + { 0x72B7, 64267 }, + { 0x72B8, 64409 }, + { 0x72B9, 64418 }, + { 0x72BA, 64404 }, + { 0x72BB, 64422 }, + { 0x72BC, 64413 }, + { 0x72BD, 64399 }, + { 0x72BE, 64426 }, + { 0x72BF, 64142 }, + { 0x72C0, 64213 }, + { 0x72C1, 64126 }, + { 0x72C2, 64242 }, + { 0x72C3, 64178 }, + { 0x72C4, 64183 }, + { 0x72C5, 64197 }, + { 0x72C6, 64209 }, + { 0x72C7, 64201 }, + { 0x72C8, 64069 }, + { 0x72C9, 64237 }, + { 0x72CA, 64192 }, + { 0x72CB, 64138 }, + { 0x72CC, 64130 }, + { 0x72CD, 64134 }, + { 0x72CE, 64090 }, + { 0x72CF, 64084 }, + { 0x72D0, 64110 }, + { 0x72D1, 64115 }, + { 0x72D2, 64078 }, + { 0x72D3, 64098 }, + { 0x72D4, 64029 }, + { 0x72D5, 64019 }, + { 0x72D6, 63959 }, + { 0x72D7, 63989 }, + { 0x72D8, 64024 }, + { 0x72D9, 63949 }, + { 0x72DA, 63979 }, + { 0x72DB, 63994 }, + { 0x72DC, 64004 }, + { 0x72DD, 64009 }, + { 0x72DE, 63999 }, + { 0x72DF, 63984 }, + { 0x72E0, 63944 }, + { 0x72E1, 63964 }, + { 0x72E2, 63939 }, + { 0x72E3, 63974 }, + { 0x72E4, 64014 }, + { 0x72E5, 63954 }, + { 0x72E6, 63969 }, + { 0x72E7, 28151 }, + { 0x72E8, 28139 }, + { 0x72E9, 28147 }, + { 0x72EA, 28242 }, + { 0x72EB, 28270 }, + { 0x72EC, 28334 }, + { 0x72ED, 28258 }, + { 0x72EE, 28326 }, + { 0x72EF, 28338 }, + { 0x72F0, 28250 }, + { 0x72F1, 28314 }, + { 0x72F2, 28266 }, + { 0x72F3, 28330 }, + { 0x72F4, 28342 }, + { 0x72F5, 28358 }, + { 0x72F6, 28366 }, + { 0x72F7, 28318 }, + { 0x72F8, 28362 }, + { 0x72F9, 28298 }, + { 0x72FA, 28354 }, + { 0x72FB, 28254 }, + { 0x72FC, 28322 }, + { 0x72FD, 28282 }, + { 0x72FE, 28286 }, + { 0x72FF, 28346 }, + { 0x7300, 28246 }, + { 0x7301, 28310 }, + { 0x7302, 28278 }, + { 0x7303, 28306 }, + { 0x7304, 28290 }, + { 0x7305, 28274 }, + { 0x7306, 28302 }, + { 0x7307, 28294 }, + { 0x7308, 28350 }, + { 0x7309, 28262 }, + { 0x730A, 28218 }, + { 0x730B, 28203 }, + { 0x730C, 28213 }, + { 0x730D, 28233 }, + { 0x730E, 28198 }, + { 0x730F, 28223 }, + { 0x7310, 28208 }, + { 0x7311, 28228 }, + { 0x7312, 28143 }, + { 0x7313, 28131 }, + { 0x7314, 28135 }, + { 0x7315, 28155 }, + { 0x7316, 28238 }, + { 0x7317, 28182 }, + { 0x7318, 28158 }, + { 0x7319, 28166 }, + { 0x731A, 28194 }, + { 0x731B, 28174 }, + { 0x731C, 28170 }, + { 0x731D, 28162 }, + { 0x731E, 28190 }, + { 0x731F, 28186 }, + { 0x7320, 28178 }, + { 0x7321, 134175 }, + { 0x7322, 134199 }, + { 0x7323, 134211 }, + { 0x7324, 134215 }, + { 0x7325, 134259 }, + { 0x7326, 134227 }, + { 0x7327, 134239 }, + { 0x7328, 134187 }, + { 0x7329, 134203 }, + { 0x732A, 134151 }, + { 0x732B, 134147 }, + { 0x732C, 134159 }, + { 0x732D, 134167 }, + { 0x732E, 134127 }, + { 0x732F, 134163 }, + { 0x7330, 134143 }, + { 0x7331, 134131 }, + { 0x7332, 134135 }, + { 0x7333, 134207 }, + { 0x7334, 134255 }, + { 0x7335, 134171 }, + { 0x7336, 134191 }, + { 0x7337, 134235 }, + { 0x7338, 134247 }, + { 0x7339, 134219 }, + { 0x733A, 134139 }, + { 0x733B, 134251 }, + { 0x733C, 134179 }, + { 0x733D, 134195 }, + { 0x733E, 134183 }, + { 0x733F, 134231 }, + { 0x7340, 134223 }, + { 0x7341, 134006 }, + { 0x7342, 134030 }, + { 0x7343, 134042 }, + { 0x7344, 134046 }, + { 0x7345, 134090 }, + { 0x7346, 134058 }, + { 0x7347, 134070 }, + { 0x7348, 134018 }, + { 0x7349, 134034 }, + { 0x734A, 133982 }, + { 0x734B, 133978 }, + { 0x734C, 133990 }, + { 0x734D, 133998 }, + { 0x734E, 133958 }, + { 0x734F, 133994 }, + { 0x7350, 133974 }, + { 0x7351, 133962 }, + { 0x7352, 133966 }, + { 0x7353, 134038 }, + { 0x7354, 134086 }, + { 0x7355, 134002 }, + { 0x7356, 134022 }, + { 0x7357, 134066 }, + { 0x7358, 134078 }, + { 0x7359, 134050 }, + { 0x735A, 133970 }, + { 0x735B, 134082 }, + { 0x735C, 134010 }, + { 0x735D, 134026 }, + { 0x735E, 134014 }, + { 0x735F, 134062 }, + { 0x7360, 134054 }, + { 0x7361, 133941 }, + { 0x7362, 133913 }, + { 0x7363, 133924 }, + { 0x7364, 133950 }, + { 0x7365, 133935 }, + { 0x7366, 133932 }, + { 0x7367, 133921 }, + { 0x7368, 133947 }, + { 0x7369, 133944 }, + { 0x736A, 133938 }, + { 0x736B, 134094 }, + { 0x736C, 134097 }, + { 0x736D, 134100 }, + { 0x736E, 134118 }, + { 0x736F, 134112 }, + { 0x7370, 134103 }, + { 0x7371, 134106 }, + { 0x7372, 134121 }, + { 0x7373, 134109 }, + { 0x7374, 134115 }, + { 0x7375, 133916 }, + { 0x7376, 133927 }, + { 0x7377, 133953 }, + { 0x7378, 133911 }, + { 0x7379, 133908 }, + { 0x737A, 134124 }, + { 0x737B, 134263 }, + { 0x737C, 15658 }, + { 0x737D, 15631 }, + { 0x737E, 15686 }, + { 0x737F, 15753 }, + { 0x7380, 15652 }, + { 0x7381, 15738 }, + { 0x7382, 15867 }, + { 0x7383, 15637 }, + { 0x7384, 15673 }, + { 0x7385, 15780 }, + { 0x7386, 15667 }, + { 0x7387, 15634 }, + { 0x7388, 15702 }, + { 0x7389, 15690 }, + { 0x738A, 15777 }, + { 0x738B, 15720 }, + { 0x738C, 15655 }, + { 0x738D, 15744 }, + { 0x738E, 15694 }, + { 0x738F, 15871 }, + { 0x7390, 15747 }, + { 0x7391, 15813 }, + { 0x7392, 15649 }, + { 0x7393, 15735 }, + { 0x7394, 15732 }, + { 0x7395, 15807 }, + { 0x7396, 15819 }, + { 0x7397, 15792 }, + { 0x7398, 15840 }, + { 0x7399, 15837 }, + { 0x739A, 15646 }, + { 0x739B, 15640 }, + { 0x739C, 15682 }, + { 0x739D, 15661 }, + { 0x739E, 15756 }, + { 0x739F, 15741 }, + { 0x73A0, 15810 }, + { 0x73A1, 15875 }, + { 0x73A2, 15643 }, + { 0x73A3, 15679 }, + { 0x73A4, 15726 }, + { 0x73A5, 15804 }, + { 0x73A6, 15825 }, + { 0x73A7, 15801 }, + { 0x73A8, 15750 }, + { 0x73A9, 15816 }, + { 0x73AA, 15822 }, + { 0x73AB, 15795 }, + { 0x73AC, 15710 }, + { 0x73AD, 15706 }, + { 0x73AE, 15883 }, + { 0x73AF, 15762 }, + { 0x73B0, 15765 }, + { 0x73B1, 15783 }, + { 0x73B2, 15828 }, + { 0x73B3, 15771 }, + { 0x73B4, 15723 }, + { 0x73B5, 15698 }, + { 0x73B6, 15664 }, + { 0x73B7, 15714 }, + { 0x73B8, 15786 }, + { 0x73B9, 15789 }, + { 0x73BA, 15831 }, + { 0x73BB, 15879 }, + { 0x73BC, 15834 }, + { 0x73BD, 15843 }, + { 0x73BE, 15676 }, + { 0x73BF, 15628 }, + { 0x73C0, 15729 }, + { 0x73C1, 15717 }, + { 0x73C2, 15768 }, + { 0x73C3, 15798 }, + { 0x73C4, 15670 }, + { 0x73C5, 15774 }, + { 0x73C6, 15759 }, + { 0x73C7, 15397 }, + { 0x73C8, 15911 }, + { 0x73C9, 15402 }, + { 0x73CA, 15389 }, + { 0x73CB, 15393 }, + { 0x73CC, 15418 }, + { 0x73CD, 15450 }, + { 0x73CE, 15554 }, + { 0x73CF, 15462 }, + { 0x73D0, 15558 }, + { 0x73D1, 15434 }, + { 0x73D2, 15518 }, + { 0x73D3, 15542 }, + { 0x73D4, 15442 }, + { 0x73D5, 15422 }, + { 0x73D6, 15478 }, + { 0x73D7, 15562 }, + { 0x73D8, 15582 }, + { 0x73D9, 15426 }, + { 0x73DA, 15486 }, + { 0x73DB, 15570 }, + { 0x73DC, 15606 }, + { 0x73DD, 15502 }, + { 0x73DE, 15490 }, + { 0x73DF, 15498 }, + { 0x73E0, 15506 }, + { 0x73E1, 15574 }, + { 0x73E2, 15438 }, + { 0x73E3, 15526 }, + { 0x73E4, 15586 }, + { 0x73E5, 15614 }, + { 0x73E6, 15534 }, + { 0x73E7, 15590 }, + { 0x73E8, 15594 }, + { 0x73E9, 15446 }, + { 0x73EA, 15546 }, + { 0x73EB, 15454 }, + { 0x73EC, 15550 }, + { 0x73ED, 15566 }, + { 0x73EE, 15623 }, + { 0x73EF, 15482 }, + { 0x73F0, 15618 }, + { 0x73F1, 15458 }, + { 0x73F2, 15474 }, + { 0x73F3, 15466 }, + { 0x73F4, 15522 }, + { 0x73F5, 15430 }, + { 0x73F6, 15510 }, + { 0x73F7, 15598 }, + { 0x73F8, 15602 }, + { 0x73F9, 15514 }, + { 0x73FA, 15578 }, + { 0x73FB, 15538 }, + { 0x73FC, 15494 }, + { 0x73FD, 15470 }, + { 0x73FE, 15610 }, + { 0x73FF, 15530 }, + { 0x7400, 15415 }, + { 0x7401, 15405 }, + { 0x7402, 15409 }, + { 0x7403, 15412 }, + { 0x7404, 15846 }, + { 0x7405, 15849 }, + { 0x7406, 15852 }, + { 0x7407, 15855 }, + { 0x7408, 15858 }, + { 0x7409, 15861 }, + { 0x740A, 15864 }, + { 0x740B, 15887 }, + { 0x740C, 15891 }, + { 0x740D, 15895 }, + { 0x740E, 15899 }, + { 0x740F, 15903 }, + { 0x7410, 15907 }, + { 0x7411, 66635 }, + { 0x7412, 38749 }, + { 0x7413, 9216 }, + { 0x7414, 9220 }, + { 0x7415, 58445 }, + { 0x7416, 133106 }, + { 0x7417, 133111 }, + { 0x7418, 66638 }, + { 0x7419, 66640 }, + { 0x741A, 66642 }, + { 0x741B, 66644 }, + { 0x741C, 66646 }, + { 0x741D, 66648 }, + { 0x741E, 66650 }, + { 0x741F, 66652 }, + { 0x7420, 66654 }, + { 0x7421, 66656 }, + { 0x7422, 66658 }, + { 0x7423, 66660 }, + { 0x7424, 66662 }, + { 0x7425, 66664 }, + { 0x7426, 66666 }, + { 0x7427, 66668 }, + { 0x7428, 66670 }, + { 0x7429, 66672 }, + { 0x742A, 66674 }, + { 0x742B, 66676 }, + { 0x742C, 66678 }, + { 0x742D, 66680 }, + { 0x742E, 66682 }, + { 0x742F, 66684 }, + { 0x7430, 66686 }, + { 0x7431, 66688 }, + { 0x7432, 66690 }, + { 0x7433, 66692 }, + { 0x7434, 66694 }, + { 0x7435, 66696 }, + { 0x7436, 66698 }, + { 0x7437, 66700 }, + { 0x7438, 66702 }, + { 0x7439, 66704 }, + { 0x743A, 66706 }, + { 0x743B, 66708 }, + { 0x743C, 66710 }, + { 0x743D, 66712 }, + { 0x743E, 66714 }, + { 0x743F, 66716 }, + { 0x7440, 66718 }, + { 0x7441, 66720 }, + { 0x7442, 66722 }, + { 0x7443, 66724 }, + { 0x7444, 66726 }, + { 0x7445, 66728 }, + { 0x7446, 66730 }, + { 0x7447, 66732 }, + { 0x7448, 66734 }, + { 0x7449, 66736 }, + { 0x744A, 66738 }, + { 0x744B, 66740 }, + { 0x744C, 66742 }, + { 0x744D, 66744 }, + { 0x744E, 66746 }, + { 0x744F, 66748 }, + { 0x7450, 66750 }, + { 0x7451, 66752 }, + { 0x7452, 66754 }, + { 0x7453, 66756 }, + { 0x7454, 66758 }, + { 0x7455, 66760 }, + { 0x7456, 66762 }, + { 0x7457, 66764 }, + { 0x7458, 66766 }, + { 0x7459, 66768 }, + { 0x745A, 66770 }, + { 0x745B, 66772 }, + { 0x745C, 66774 }, + { 0x745D, 66776 }, + { 0x745E, 66778 }, + { 0x745F, 66780 }, + { 0x7460, 66782 }, + { 0x7461, 66784 }, + { 0x7462, 66786 }, + { 0x7463, 66788 }, + { 0x7464, 66790 }, + { 0x7465, 66792 }, + { 0x7466, 66794 }, + { 0x7467, 66796 }, + { 0x7468, 66798 }, + { 0x7469, 66800 }, + { 0x746A, 66802 }, + { 0x746B, 66804 }, + { 0x746C, 66806 }, + { 0x746D, 66808 }, + { 0x746E, 66810 }, + { 0x746F, 66812 }, + { 0x7470, 66814 }, + { 0x7471, 66816 }, + { 0x7472, 66818 }, + { 0x7473, 66820 }, + { 0x7474, 66822 }, + { 0x7475, 66824 }, + { 0x7476, 66826 }, + { 0x7477, 66828 }, + { 0x7478, 66830 }, + { 0x7479, 66832 }, + { 0x747A, 66834 }, + { 0x747B, 66836 }, + { 0x747C, 66838 }, + { 0x747D, 66840 }, + { 0x747E, 66842 }, + { 0x747F, 66844 }, + { 0x7480, 66846 }, + { 0x7481, 66848 }, + { 0x7482, 66850 }, + { 0x7483, 66852 }, + { 0x7484, 66854 }, + { 0x7485, 66856 }, + { 0x7486, 66858 }, + { 0x7487, 66860 }, + { 0x7488, 66862 }, + { 0x7489, 66864 }, + { 0x748A, 66866 }, + { 0x748B, 66868 }, + { 0x748C, 66870 }, + { 0x748D, 66872 }, + { 0x748E, 66874 }, + { 0x748F, 66876 }, + { 0x7490, 66878 }, + { 0x7491, 66880 }, + { 0x7492, 66882 }, + { 0x7493, 66884 }, + { 0x7494, 66886 }, + { 0x7495, 66888 }, + { 0x7496, 66890 }, + { 0x7497, 66892 }, + { 0x7498, 66894 }, + { 0x7499, 66896 }, + { 0x749A, 66898 }, + { 0x749B, 66900 }, + { 0x749C, 66902 }, + { 0x749D, 66904 }, + { 0x749E, 66906 }, + { 0x749F, 66908 }, + { 0x74A0, 66910 }, + { 0x74A1, 66912 }, + { 0x74A2, 66914 }, + { 0x74A3, 66916 }, + { 0x74A4, 66918 }, + { 0x74A5, 66920 }, + { 0x74A6, 66922 }, + { 0x74A7, 66924 }, + { 0x74A8, 66926 }, + { 0x74A9, 66928 }, + { 0x74AA, 66930 }, + { 0x74AB, 66932 }, + { 0x74AC, 66934 }, + { 0x74AD, 66936 }, + { 0x74AE, 66938 }, + { 0x74AF, 66940 }, + { 0x74B0, 66942 }, + { 0x74B1, 66944 }, + { 0x74B2, 66946 }, + { 0x74B3, 66948 }, + { 0x74B4, 66950 }, + { 0x74B5, 66952 }, + { 0x74B6, 66954 }, + { 0x74B7, 66956 }, + { 0x74B8, 66958 }, + { 0x74B9, 66960 }, + { 0x74BA, 66962 }, + { 0x74BB, 66964 }, + { 0x74BC, 66966 }, + { 0x74BD, 66968 }, + { 0x74BE, 66970 }, + { 0x74BF, 66972 }, + { 0x74C0, 66974 }, + { 0x74C1, 66976 }, + { 0x74C2, 66978 }, + { 0x74C3, 66980 }, + { 0x74C4, 66982 }, + { 0x74C5, 66984 }, + { 0x74C6, 66986 }, + { 0x74C7, 66988 }, + { 0x74C8, 66990 }, + { 0x74C9, 66992 }, + { 0x74CA, 66994 }, + { 0x74CB, 66996 }, + { 0x74CC, 66998 }, + { 0x74CD, 67000 }, + { 0x74CE, 67002 }, + { 0x74CF, 67004 }, + { 0x74D0, 67006 }, + { 0x74D1, 67008 }, + { 0x74D2, 67010 }, + { 0x74D3, 67012 }, + { 0x74D4, 67014 }, + { 0x74D5, 67016 }, + { 0x74D6, 67018 }, + { 0x74D7, 67020 }, + { 0x74D8, 67022 }, + { 0x74D9, 67024 }, + { 0x74DA, 67026 }, + { 0x74DB, 67028 }, + { 0x74DC, 67030 }, + { 0x74DD, 67032 }, + { 0x74DE, 67034 }, + { 0x74DF, 67036 }, + { 0x74E0, 67038 }, + { 0x74E1, 67040 }, + { 0x74E2, 67042 }, + { 0x74E3, 67044 }, + { 0x74E4, 67046 }, + { 0x74E5, 67048 }, + { 0x74E6, 67050 }, + { 0x74E7, 67052 }, + { 0x74E8, 67054 }, + { 0x74E9, 67056 }, + { 0x74EA, 67058 }, + { 0x74EB, 67060 }, + { 0x74EC, 67062 }, + { 0x74ED, 67064 }, + { 0x74EE, 67066 }, + { 0x74EF, 67068 }, + { 0x74F0, 67070 }, + { 0x74F1, 67072 }, + { 0x74F2, 67074 }, + { 0x74F3, 67076 }, + { 0x74F4, 67078 }, + { 0x74F5, 67080 }, + { 0x74F6, 67082 }, + { 0x74F7, 67084 }, + { 0x74F8, 67086 }, + { 0x74F9, 67088 }, + { 0x74FA, 67090 }, + { 0x74FB, 67092 }, + { 0x74FC, 67094 }, + { 0x74FD, 67096 }, + { 0x74FE, 67098 }, + { 0x74FF, 67100 }, + { 0x7500, 67102 }, + { 0x7501, 67104 }, + { 0x7502, 67106 }, + { 0x7503, 67108 }, + { 0x7504, 67110 }, + { 0x7505, 67112 }, + { 0x7506, 67114 }, + { 0x7507, 67116 }, + { 0x7508, 67118 }, + { 0x7509, 67120 }, + { 0x750A, 67122 }, + { 0x750B, 67124 }, + { 0x750C, 67126 }, + { 0x750D, 67128 }, + { 0x750E, 67130 }, + { 0x750F, 67132 }, + { 0x7510, 67134 }, + { 0x7511, 67136 }, + { 0x7512, 67138 }, + { 0x7513, 67140 }, + { 0x7514, 67142 }, + { 0x7515, 67144 }, + { 0x7516, 67146 }, + { 0x7517, 67148 }, + { 0x7518, 67150 }, + { 0x7519, 67152 }, + { 0x751A, 67154 }, + { 0x751B, 67156 }, + { 0x751C, 67158 }, + { 0x751D, 67160 }, + { 0x751E, 67162 }, + { 0x751F, 67164 }, + { 0x7520, 67166 }, + { 0x7521, 67168 }, + { 0x7522, 67170 }, + { 0x7523, 67172 }, + { 0x7524, 67174 }, + { 0x7525, 67176 }, + { 0x7526, 67178 }, + { 0x7527, 67180 }, + { 0x7528, 67182 }, + { 0x7529, 67184 }, + { 0x752A, 67186 }, + { 0x752B, 67188 }, + { 0x752C, 67190 }, + { 0x752D, 67192 }, + { 0x752E, 67194 }, + { 0x752F, 67196 }, + { 0x7530, 67198 }, + { 0x7531, 67200 }, + { 0x7532, 67202 }, + { 0x7533, 67204 }, + { 0x7534, 67206 }, + { 0x7535, 67208 }, + { 0x7536, 67210 }, + { 0x7537, 67212 }, + { 0x7538, 67214 }, + { 0x7539, 67216 }, + { 0x753A, 67218 }, + { 0x753B, 67220 }, + { 0x753C, 67222 }, + { 0x753D, 67224 }, + { 0x753E, 67226 }, + { 0x753F, 67228 }, + { 0x7540, 67230 }, + { 0x7541, 67232 }, + { 0x7542, 67234 }, + { 0x7543, 67236 }, + { 0x7544, 67238 }, + { 0x7545, 67240 }, + { 0x7546, 67242 }, + { 0x7547, 67244 }, + { 0x7548, 67246 }, + { 0x7549, 67248 }, + { 0x754A, 67250 }, + { 0x754B, 67252 }, + { 0x754C, 67254 }, + { 0x754D, 67256 }, + { 0x754E, 67258 }, + { 0x754F, 67260 }, + { 0x7550, 67262 }, + { 0x7551, 67264 }, + { 0x7552, 67266 }, + { 0x7553, 67268 }, + { 0x7554, 67270 }, + { 0x7555, 67272 }, + { 0x7556, 67274 }, + { 0x7557, 67276 }, + { 0x7558, 67278 }, + { 0x7559, 67280 }, + { 0x755A, 67282 }, + { 0x755B, 67284 }, + { 0x755C, 67286 }, + { 0x755D, 67288 }, + { 0x755E, 67290 }, + { 0x755F, 67292 }, + { 0x7560, 67294 }, + { 0x7561, 67296 }, + { 0x7562, 67298 }, + { 0x7563, 67300 }, + { 0x7564, 67302 }, + { 0x7565, 67304 }, + { 0x7566, 67306 }, + { 0x7567, 67308 }, + { 0x7568, 67310 }, + { 0x7569, 67312 }, + { 0x756A, 67314 }, + { 0x756B, 67316 }, + { 0x756C, 67318 }, + { 0x756D, 67320 }, + { 0x756E, 67322 }, + { 0x756F, 67324 }, + { 0x7570, 67326 }, + { 0x7571, 67328 }, + { 0x7572, 67330 }, + { 0x7573, 67332 }, + { 0x7574, 67334 }, + { 0x7575, 67336 }, + { 0x7576, 67338 }, + { 0x7577, 67340 }, + { 0x7578, 67342 }, + { 0x7579, 67344 }, + { 0x757A, 67346 }, + { 0x757B, 67348 }, + { 0x757C, 67350 }, + { 0x757D, 67352 }, + { 0x757E, 67354 }, + { 0x757F, 67356 }, + { 0x7580, 67358 }, + { 0x7581, 67360 }, + { 0x7582, 67362 }, + { 0x7583, 67364 }, + { 0x7584, 67366 }, + { 0x7585, 67368 }, + { 0x7586, 67370 }, + { 0x7587, 67372 }, + { 0x7588, 67374 }, + { 0x7589, 67376 }, + { 0x758A, 67378 }, + { 0x758B, 67380 }, + { 0x758C, 67382 }, + { 0x758D, 67384 }, + { 0x758E, 67386 }, + { 0x758F, 67388 }, + { 0x7590, 67390 }, + { 0x7591, 67392 }, + { 0x7592, 67394 }, + { 0x7593, 67396 }, + { 0x7594, 67398 }, + { 0x7595, 67400 }, + { 0x7596, 67402 }, + { 0x7597, 67404 }, + { 0x7598, 67406 }, + { 0x7599, 67408 }, + { 0x759A, 67410 }, + { 0x759B, 67412 }, + { 0x759C, 67414 }, + { 0x759D, 67416 }, + { 0x759E, 67418 }, + { 0x759F, 67420 }, + { 0x75A0, 67422 }, + { 0x75A1, 67424 }, + { 0x75A2, 67426 }, + { 0x75A3, 67428 }, + { 0x75A4, 67430 }, + { 0x75A5, 67432 }, + { 0x75A6, 67434 }, + { 0x75A7, 67436 }, + { 0x75A8, 67438 }, + { 0x75A9, 67440 }, + { 0x75AA, 67442 }, + { 0x75AB, 67444 }, + { 0x75AC, 67446 }, + { 0x75AD, 67448 }, + { 0x75AE, 67450 }, + { 0x75AF, 67452 }, + { 0x75B0, 67454 }, + { 0x75B1, 67456 }, + { 0x75B2, 67458 }, + { 0x75B3, 67460 }, + { 0x75B4, 67462 }, + { 0x75B5, 67464 }, + { 0x75B6, 67466 }, + { 0x75B7, 67468 }, + { 0x75B8, 67470 }, + { 0x75B9, 67472 }, + { 0x75BA, 67474 }, + { 0x75BB, 67476 }, + { 0x75BC, 67478 }, + { 0x75BD, 67480 }, + { 0x75BE, 67482 }, + { 0x75BF, 67484 }, + { 0x75C0, 67486 }, + { 0x75C1, 67488 }, + { 0x75C2, 67490 }, + { 0x75C3, 67492 }, + { 0x75C4, 67494 }, + { 0x75C5, 67496 }, + { 0x75C6, 67498 }, + { 0x75C7, 67500 }, + { 0x75C8, 67502 }, + { 0x75C9, 67504 }, + { 0x75CA, 67506 }, + { 0x75CB, 67508 }, + { 0x75CC, 67510 }, + { 0x75CD, 67512 }, + { 0x75CE, 67514 }, + { 0x75CF, 67516 }, + { 0x75D0, 67518 }, + { 0x75D1, 67520 }, + { 0x75D2, 67522 }, + { 0x75D3, 67524 }, + { 0x75D4, 67526 }, + { 0x75D5, 67528 }, + { 0x75D6, 67530 }, + { 0x75D7, 67532 }, + { 0x75D8, 67534 }, + { 0x75D9, 67536 }, + { 0x75DA, 67538 }, + { 0x75DB, 67540 }, + { 0x75DC, 67542 }, + { 0x75DD, 67544 }, + { 0x75DE, 67546 }, + { 0x75DF, 67548 }, + { 0x75E0, 67550 }, + { 0x75E1, 67552 }, + { 0x75E2, 67554 }, + { 0x75E3, 67556 }, + { 0x75E4, 67558 }, + { 0x75E5, 67560 }, + { 0x75E6, 67562 }, + { 0x75E7, 67564 }, + { 0x75E8, 67566 }, + { 0x75E9, 67568 }, + { 0x75EA, 67570 }, + { 0x75EB, 67572 }, + { 0x75EC, 67574 }, + { 0x75ED, 67576 }, + { 0x75EE, 67578 }, + { 0x75EF, 67580 }, + { 0x75F0, 67582 }, + { 0x75F1, 67584 }, + { 0x75F2, 67586 }, + { 0x75F3, 67588 }, + { 0x75F4, 67590 }, + { 0x75F5, 67592 }, + { 0x75F6, 67594 }, + { 0x75F7, 67596 }, + { 0x75F8, 67598 }, + { 0x75F9, 67600 }, + { 0x75FA, 67602 }, + { 0x75FB, 67604 }, + { 0x75FC, 67606 }, + { 0x75FD, 67608 }, + { 0x75FE, 67610 }, + { 0x75FF, 67612 }, + { 0x7600, 67614 }, + { 0x7601, 67616 }, + { 0x7602, 67618 }, + { 0x7603, 67620 }, + { 0x7604, 67622 }, + { 0x7605, 67624 }, + { 0x7606, 67626 }, + { 0x7607, 67628 }, + { 0x7608, 67630 }, + { 0x7609, 67632 }, + { 0x760A, 67634 }, + { 0x760B, 67636 }, + { 0x760C, 67638 }, + { 0x760D, 67640 }, + { 0x760E, 67642 }, + { 0x760F, 67644 }, + { 0x7610, 67646 }, + { 0x7611, 67648 }, + { 0x7612, 67650 }, + { 0x7613, 67652 }, + { 0x7614, 67654 }, + { 0x7615, 67656 }, + { 0x7616, 67658 }, + { 0x7617, 67660 }, + { 0x7618, 67662 }, + { 0x7619, 67664 }, + { 0x761A, 67666 }, + { 0x761B, 67668 }, + { 0x761C, 67670 }, + { 0x761D, 67672 }, + { 0x761E, 67674 }, + { 0x761F, 67676 }, + { 0x7620, 67678 }, + { 0x7621, 67680 }, + { 0x7622, 67682 }, + { 0x7623, 67684 }, + { 0x7624, 67686 }, + { 0x7625, 67688 }, + { 0x7626, 67690 }, + { 0x7627, 67692 }, + { 0x7628, 67694 }, + { 0x7629, 67696 }, + { 0x762A, 67698 }, + { 0x762B, 67700 }, + { 0x762C, 67702 }, + { 0x762D, 67704 }, + { 0x762E, 67706 }, + { 0x762F, 67708 }, + { 0x7630, 67710 }, + { 0x7631, 67712 }, + { 0x7632, 67714 }, + { 0x7633, 67716 }, + { 0x7634, 67718 }, + { 0x7635, 67720 }, + { 0x7636, 67722 }, + { 0x7637, 67724 }, + { 0x7638, 67726 }, + { 0x7639, 67728 }, + { 0x763A, 67730 }, + { 0x763B, 67732 }, + { 0x763C, 67734 }, + { 0x763D, 67736 }, + { 0x763E, 67738 }, + { 0x763F, 67740 }, + { 0x7640, 67742 }, + { 0x7641, 67744 }, + { 0x7642, 67746 }, + { 0x7643, 67748 }, + { 0x7644, 67750 }, + { 0x7645, 67752 }, + { 0x7646, 67754 }, + { 0x7647, 67756 }, + { 0x7648, 67758 }, + { 0x7649, 67760 }, + { 0x764A, 67762 }, + { 0x764B, 67764 }, + { 0x764C, 67766 }, + { 0x764D, 67768 }, + { 0x764E, 67770 }, + { 0x764F, 67772 }, + { 0x7650, 67774 }, + { 0x7651, 67776 }, + { 0x7652, 67778 }, + { 0x7653, 67780 }, + { 0x7654, 67782 }, + { 0x7655, 67784 }, + { 0x7656, 67786 }, + { 0x7657, 67788 }, + { 0x7658, 67790 }, + { 0x7659, 67792 }, + { 0x765A, 67794 }, + { 0x765B, 67796 }, + { 0x765C, 67798 }, + { 0x765D, 67800 }, + { 0x765E, 67802 }, + { 0x765F, 67804 }, + { 0x7660, 67806 }, + { 0x7661, 67808 }, + { 0x7662, 67810 }, + { 0x7663, 67812 }, + { 0x7664, 67814 }, + { 0x7665, 67816 }, + { 0x7666, 67818 }, + { 0x7667, 67820 }, + { 0x7668, 67822 }, + { 0x7669, 67824 }, + { 0x766A, 67826 }, + { 0x766B, 67828 }, + { 0x766C, 67830 }, + { 0x766D, 67832 }, + { 0x766E, 67834 }, + { 0x766F, 67836 }, + { 0x7670, 67838 }, + { 0x7671, 67840 }, + { 0x7672, 67842 }, + { 0x7673, 67844 }, + { 0x7674, 67846 }, + { 0x7675, 67848 }, + { 0x7676, 67850 }, + { 0x7677, 67852 }, + { 0x7678, 67854 }, + { 0x7679, 67856 }, + { 0x767A, 67858 }, + { 0x767B, 67860 }, + { 0x767C, 67862 }, + { 0x767D, 67864 }, + { 0x767E, 67866 }, + { 0x767F, 67868 }, + { 0x7680, 67870 }, + { 0x7681, 67872 }, + { 0x7682, 67874 }, + { 0x7683, 67876 }, + { 0x7684, 67878 }, + { 0x7685, 67880 }, + { 0x7686, 67882 }, + { 0x7687, 67884 }, + { 0x7688, 67886 }, + { 0x7689, 67888 }, + { 0x768A, 67890 }, + { 0x768B, 67892 }, + { 0x768C, 67894 }, + { 0x768D, 67896 }, + { 0x768E, 67898 }, + { 0x768F, 67900 }, + { 0x7690, 67902 }, + { 0x7691, 67904 }, + { 0x7692, 67906 }, + { 0x7693, 67908 }, + { 0x7694, 67910 }, + { 0x7695, 67912 }, + { 0x7696, 67914 }, + { 0x7697, 67916 }, + { 0x7698, 67918 }, + { 0x7699, 67920 }, + { 0x769A, 67922 }, + { 0x769B, 67924 }, + { 0x769C, 67926 }, + { 0x769D, 67928 }, + { 0x769E, 67930 }, + { 0x769F, 67932 }, + { 0x76A0, 67934 }, + { 0x76A1, 67936 }, + { 0x76A2, 67938 }, + { 0x76A3, 67940 }, + { 0x76A4, 67942 }, + { 0x76A5, 67944 }, + { 0x76A6, 67946 }, + { 0x76A7, 67948 }, + { 0x76A8, 67950 }, + { 0x76A9, 67952 }, + { 0x76AA, 67954 }, + { 0x76AB, 67956 }, + { 0x76AC, 67958 }, + { 0x76AD, 67960 }, + { 0x76AE, 67962 }, + { 0x76AF, 67964 }, + { 0x76B0, 67966 }, + { 0x76B1, 67968 }, + { 0x76B2, 67970 }, + { 0x76B3, 67972 }, + { 0x76B4, 67974 }, + { 0x76B5, 67976 }, + { 0x76B6, 67978 }, + { 0x76B7, 67980 }, + { 0x76B8, 67982 }, + { 0x76B9, 67984 }, + { 0x76BA, 67986 }, + { 0x76BB, 67988 }, + { 0x76BC, 67990 }, + { 0x76BD, 67992 }, + { 0x76BE, 67994 }, + { 0x76BF, 67996 }, + { 0x76C0, 67998 }, + { 0x76C1, 68000 }, + { 0x76C2, 68002 }, + { 0x76C3, 68004 }, + { 0x76C4, 68006 }, + { 0x76C5, 68008 }, + { 0x76C6, 68010 }, + { 0x76C7, 68012 }, + { 0x76C8, 68014 }, + { 0x76C9, 68016 }, + { 0x76CA, 68018 }, + { 0x76CB, 68020 }, + { 0x76CC, 68022 }, + { 0x76CD, 68024 }, + { 0x76CE, 68026 }, + { 0x76CF, 68028 }, + { 0x76D0, 68030 }, + { 0x76D1, 68032 }, + { 0x76D2, 68034 }, + { 0x76D3, 68036 }, + { 0x76D4, 68038 }, + { 0x76D5, 68040 }, + { 0x76D6, 68042 }, + { 0x76D7, 68044 }, + { 0x76D8, 68046 }, + { 0x76D9, 68048 }, + { 0x76DA, 68050 }, + { 0x76DB, 68052 }, + { 0x76DC, 68054 }, + { 0x76DD, 68056 }, + { 0x76DE, 68058 }, + { 0x76DF, 68060 }, + { 0x76E0, 68062 }, + { 0x76E1, 68064 }, + { 0x76E2, 68066 }, + { 0x76E3, 68068 }, + { 0x76E4, 68070 }, + { 0x76E5, 68072 }, + { 0x76E6, 68074 }, + { 0x76E7, 68076 }, + { 0x76E8, 68078 }, + { 0x76E9, 68080 }, + { 0x76EA, 68082 }, + { 0x76EB, 68084 }, + { 0x76EC, 68086 }, + { 0x76ED, 68088 }, + { 0x76EE, 68090 }, + { 0x76EF, 68092 }, + { 0x76F0, 68094 }, + { 0x76F1, 68096 }, + { 0x76F2, 68098 }, + { 0x76F3, 68100 }, + { 0x76F4, 68102 }, + { 0x76F5, 68104 }, + { 0x76F6, 68106 }, + { 0x76F7, 68108 }, + { 0x76F8, 68110 }, + { 0x76F9, 68112 }, + { 0x76FA, 68114 }, + { 0x76FB, 68116 }, + { 0x76FC, 68118 }, + { 0x76FD, 68120 }, + { 0x76FE, 68122 }, + { 0x76FF, 68124 }, + { 0x7700, 68126 }, + { 0x7701, 68128 }, + { 0x7702, 68130 }, + { 0x7703, 68132 }, + { 0x7704, 68134 }, + { 0x7705, 68136 }, + { 0x7706, 68138 }, + { 0x7707, 68140 }, + { 0x7708, 68142 }, + { 0x7709, 68144 }, + { 0x770A, 68146 }, + { 0x770B, 68148 }, + { 0x770C, 68150 }, + { 0x770D, 68152 }, + { 0x770E, 68154 }, + { 0x770F, 68156 }, + { 0x7710, 68158 }, + { 0x7711, 68160 }, + { 0x7712, 68162 }, + { 0x7713, 68164 }, + { 0x7714, 68166 }, + { 0x7715, 68168 }, + { 0x7716, 68170 }, + { 0x7717, 68172 }, + { 0x7718, 58449 }, + { 0x7719, 58453 }, + { 0x771A, 58457 }, + { 0x771B, 58461 }, + { 0x771C, 58465 }, + { 0x771D, 58469 }, + { 0x771E, 58473 }, + { 0x771F, 58477 }, + { 0x7720, 58481 }, + { 0x7721, 58485 }, + { 0x7722, 58489 }, + { 0x7723, 58493 }, + { 0x7724, 58497 }, + { 0x7725, 58501 }, + { 0x7726, 58505 }, + { 0x7727, 58509 }, + { 0x7728, 58513 }, + { 0x7729, 58517 }, + { 0x772A, 58521 }, + { 0x772B, 58525 }, + { 0x772C, 58529 }, + { 0x772D, 58533 }, + { 0x772E, 58537 }, + { 0x772F, 58541 }, + { 0x7730, 58545 }, + { 0x7731, 58549 }, + { 0x7732, 58553 }, + { 0x7733, 58557 }, + { 0x7734, 58561 }, + { 0x7735, 58565 }, + { 0x7736, 58569 }, + { 0x7737, 58573 }, + { 0x7738, 58577 }, + { 0x7739, 58581 }, + { 0x773A, 58585 }, + { 0x773B, 58589 }, + { 0x773C, 58593 }, + { 0x773D, 58597 }, + { 0x773E, 58601 }, + { 0x773F, 58605 }, + { 0x7740, 58609 }, + { 0x7741, 58613 }, + { 0x7742, 58617 }, + { 0x7743, 58621 }, + { 0x7744, 58625 }, + { 0x7745, 58629 }, + { 0x7746, 58633 }, + { 0x7747, 58637 }, + { 0x7748, 58641 }, + { 0x7749, 58645 }, + { 0x774A, 58649 }, + { 0x774B, 58653 }, + { 0x774C, 58657 }, + { 0x774D, 58661 }, + { 0x774E, 58665 }, + { 0x774F, 58669 }, + { 0x7750, 58673 }, + { 0x7751, 58677 }, + { 0x7752, 58681 }, + { 0x7753, 58685 }, + { 0x7754, 58689 }, + { 0x7755, 58693 }, + { 0x7756, 58697 }, + { 0x7757, 58701 }, + { 0x7758, 58705 }, + { 0x7759, 58709 }, + { 0x775A, 58713 }, + { 0x775B, 58717 }, + { 0x775C, 58721 }, + { 0x775D, 58725 }, + { 0x775E, 58729 }, + { 0x775F, 58733 }, + { 0x7760, 58737 }, + { 0x7761, 58741 }, + { 0x7762, 58745 }, + { 0x7763, 58749 }, + { 0x7764, 58753 }, + { 0x7765, 58757 }, + { 0x7766, 58761 }, + { 0x7767, 58765 }, + { 0x7768, 58769 }, + { 0x7769, 58773 }, + { 0x776A, 58777 }, + { 0x776B, 58781 }, + { 0x776C, 58785 }, + { 0x776D, 58789 }, + { 0x776E, 58793 }, + { 0x776F, 58797 }, + { 0x7770, 58801 }, + { 0x7771, 58805 }, + { 0x7772, 58809 }, + { 0x7773, 58813 }, + { 0x7774, 58817 }, + { 0x7775, 58821 }, + { 0x7776, 58825 }, + { 0x7777, 58829 }, + { 0x7778, 58833 }, + { 0x7779, 58837 }, + { 0x777A, 58841 }, + { 0x777B, 58845 }, + { 0x777C, 58849 }, + { 0x777D, 58853 }, + { 0x777E, 58857 }, + { 0x777F, 58861 }, + { 0x7780, 58865 }, + { 0x7781, 58869 }, + { 0x7782, 58873 }, + { 0x7783, 58877 }, + { 0x7784, 58881 }, + { 0x7785, 58885 }, + { 0x7786, 58889 }, + { 0x7787, 58893 }, + { 0x7788, 58897 }, + { 0x7789, 58901 }, + { 0x778A, 58905 }, + { 0x778B, 58909 }, + { 0x778C, 58913 }, + { 0x778D, 58917 }, + { 0x778E, 58921 }, + { 0x778F, 58925 }, + { 0x7790, 58929 }, + { 0x7791, 58933 }, + { 0x7792, 58937 }, + { 0x7793, 58941 }, + { 0x7794, 58945 }, + { 0x7795, 58949 }, + { 0x7796, 58953 }, + { 0x7797, 58957 }, + { 0x7798, 58961 }, + { 0x7799, 58965 }, + { 0x779A, 58969 }, + { 0x779B, 58973 }, + { 0x779C, 58977 }, + { 0x779D, 58981 }, + { 0x779E, 58985 }, + { 0x779F, 58989 }, + { 0x77A0, 58993 }, + { 0x77A1, 58997 }, + { 0x77A2, 59001 }, + { 0x77A3, 59005 }, + { 0x77A4, 59009 }, + { 0x77A5, 59013 }, + { 0x77A6, 59017 }, + { 0x77A7, 59021 }, + { 0x77A8, 59025 }, + { 0x77A9, 59029 }, + { 0x77AA, 59033 }, + { 0x77AB, 59037 }, + { 0x77AC, 59041 }, + { 0x77AD, 59045 }, + { 0x77AE, 59049 }, + { 0x77AF, 59053 }, + { 0x77B0, 59057 }, + { 0x77B1, 59061 }, + { 0x77B2, 59065 }, + { 0x77B3, 59069 }, + { 0x77B4, 59073 }, + { 0x77B5, 59077 }, + { 0x77B6, 59081 }, + { 0x77B7, 59085 }, + { 0x77B8, 59089 }, + { 0x77B9, 59093 }, + { 0x77BA, 59097 }, + { 0x77BB, 59101 }, + { 0x77BC, 59105 }, + { 0x77BD, 59109 }, + { 0x77BE, 59113 }, + { 0x77BF, 59117 }, + { 0x77C0, 59121 }, + { 0x77C1, 59125 }, + { 0x77C2, 59129 }, + { 0x77C3, 59133 }, + { 0x77C4, 59137 }, + { 0x77C5, 59141 }, + { 0x77C6, 59145 }, + { 0x77C7, 59149 }, + { 0x77C8, 59153 }, + { 0x77C9, 59157 }, + { 0x77CA, 59161 }, + { 0x77CB, 59165 }, + { 0x77CC, 59169 }, + { 0x77CD, 59173 }, + { 0x77CE, 59177 }, + { 0x77CF, 59181 }, + { 0x77D0, 59185 }, + { 0x77D1, 59189 }, + { 0x77D2, 59193 }, + { 0x77D3, 59197 }, + { 0x77D4, 59201 }, + { 0x77D5, 59205 }, + { 0x77D6, 59209 }, + { 0x77D7, 59213 }, + { 0x77D8, 59217 }, + { 0x77D9, 59221 }, + { 0x77DA, 59225 }, + { 0x77DB, 59229 }, + { 0x77DC, 59233 }, + { 0x77DD, 59237 }, + { 0x77DE, 59241 }, + { 0x77DF, 59245 }, + { 0x77E0, 59249 }, + { 0x77E1, 59253 }, + { 0x77E2, 59257 }, + { 0x77E3, 59261 }, + { 0x77E4, 59265 }, + { 0x77E5, 59269 }, + { 0x77E6, 59273 }, + { 0x77E7, 59277 }, + { 0x77E8, 59281 }, + { 0x77E9, 59285 }, + { 0x77EA, 59289 }, + { 0x77EB, 59293 }, + { 0x77EC, 59297 }, + { 0x77ED, 59301 }, + { 0x77EE, 59305 }, + { 0x77EF, 59309 }, + { 0x77F0, 59313 }, + { 0x77F1, 59317 }, + { 0x77F2, 59321 }, + { 0x77F3, 59325 }, + { 0x77F4, 59329 }, + { 0x77F5, 59333 }, + { 0x77F6, 59337 }, + { 0x77F7, 59341 }, + { 0x77F8, 59345 }, + { 0x77F9, 59349 }, + { 0x77FA, 59353 }, + { 0x77FB, 59357 }, + { 0x77FC, 59361 }, + { 0x77FD, 59365 }, + { 0x77FE, 59369 }, + { 0x77FF, 59373 }, + { 0x7800, 59377 }, + { 0x7801, 59381 }, + { 0x7802, 59385 }, + { 0x7803, 59389 }, + { 0x7804, 59393 }, + { 0x7805, 59397 }, + { 0x7806, 59401 }, + { 0x7807, 59405 }, + { 0x7808, 59409 }, + { 0x7809, 59413 }, + { 0x780A, 59417 }, + { 0x780B, 59421 }, + { 0x780C, 59425 }, + { 0x780D, 59429 }, + { 0x780E, 59433 }, + { 0x780F, 59437 }, + { 0x7810, 59441 }, + { 0x7811, 59445 }, + { 0x7812, 59449 }, + { 0x7813, 59453 }, + { 0x7814, 59457 }, + { 0x7815, 59461 }, + { 0x7816, 59465 }, + { 0x7817, 59469 }, + { 0x7818, 59473 }, + { 0x7819, 59477 }, + { 0x781A, 59481 }, + { 0x781B, 59485 }, + { 0x781C, 59489 }, + { 0x781D, 59493 }, + { 0x781E, 59497 }, + { 0x781F, 59501 }, + { 0x7820, 59505 }, + { 0x7821, 59509 }, + { 0x7822, 59513 }, + { 0x7823, 59517 }, + { 0x7824, 59521 }, + { 0x7825, 59525 }, + { 0x7826, 59529 }, + { 0x7827, 59533 }, + { 0x7828, 59537 }, + { 0x7829, 59541 }, + { 0x782A, 59545 }, + { 0x782B, 59549 }, + { 0x782C, 59553 }, + { 0x782D, 59557 }, + { 0x782E, 59561 }, + { 0x782F, 59565 }, + { 0x7830, 59569 }, + { 0x7831, 59573 }, + { 0x7832, 59577 }, + { 0x7833, 59581 }, + { 0x7834, 59585 }, + { 0x7835, 59589 }, + { 0x7836, 59593 }, + { 0x7837, 59597 }, + { 0x7838, 59601 }, + { 0x7839, 59605 }, + { 0x783A, 59609 }, + { 0x783B, 59613 }, + { 0x783C, 59617 }, + { 0x783D, 59621 }, + { 0x783E, 59625 }, + { 0x783F, 59629 }, + { 0x7840, 59633 }, + { 0x7841, 59637 }, + { 0x7842, 59641 }, + { 0x7843, 59645 }, + { 0x7844, 59649 }, + { 0x7845, 59653 }, + { 0x7846, 59657 }, + { 0x7847, 59661 }, + { 0x7848, 59665 }, + { 0x7849, 59669 }, + { 0x784A, 59673 }, + { 0x784B, 59677 }, + { 0x784C, 59681 }, + { 0x784D, 59685 }, + { 0x784E, 59689 }, + { 0x784F, 59693 }, + { 0x7850, 59697 }, + { 0x7851, 59701 }, + { 0x7852, 59705 }, + { 0x7853, 59709 }, + { 0x7854, 59713 }, + { 0x7855, 59717 }, + { 0x7856, 59721 }, + { 0x7857, 59725 }, + { 0x7858, 59729 }, + { 0x7859, 59733 }, + { 0x785A, 59737 }, + { 0x785B, 59741 }, + { 0x785C, 59745 }, + { 0x785D, 59749 }, + { 0x785E, 59753 }, + { 0x785F, 59757 }, + { 0x7860, 59761 }, + { 0x7861, 59765 }, + { 0x7862, 59769 }, + { 0x7863, 59773 }, + { 0x7864, 59777 }, + { 0x7865, 59781 }, + { 0x7866, 59785 }, + { 0x7867, 59789 }, + { 0x7868, 59793 }, + { 0x7869, 59797 }, + { 0x786A, 59801 }, + { 0x786B, 59805 }, + { 0x786C, 59809 }, + { 0x786D, 59813 }, + { 0x786E, 59817 }, + { 0x786F, 59821 }, + { 0x7870, 59825 }, + { 0x7871, 59829 }, + { 0x7872, 59833 }, + { 0x7873, 59837 }, + { 0x7874, 59841 }, + { 0x7875, 59845 }, + { 0x7876, 59849 }, + { 0x7877, 59853 }, + { 0x7878, 59857 }, + { 0x7879, 59861 }, + { 0x787A, 59865 }, + { 0x787B, 59869 }, + { 0x787C, 59873 }, + { 0x787D, 59877 }, + { 0x787E, 59881 }, + { 0x787F, 59885 }, + { 0x7880, 59889 }, + { 0x7881, 59893 }, + { 0x7882, 59897 }, + { 0x7883, 59901 }, + { 0x7884, 59905 }, + { 0x7885, 59909 }, + { 0x7886, 59913 }, + { 0x7887, 59917 }, + { 0x7888, 59921 }, + { 0x7889, 59925 }, + { 0x788A, 59929 }, + { 0x788B, 59933 }, + { 0x788C, 59937 }, + { 0x788D, 59941 }, + { 0x788E, 59945 }, + { 0x788F, 59949 }, + { 0x7890, 59953 }, + { 0x7891, 59957 }, + { 0x7892, 59961 }, + { 0x7893, 59965 }, + { 0x7894, 59969 }, + { 0x7895, 59973 }, + { 0x7896, 59977 }, + { 0x7897, 59981 }, + { 0x7898, 59985 }, + { 0x7899, 59989 }, + { 0x789A, 59993 }, + { 0x789B, 59997 }, + { 0x789C, 60001 }, + { 0x789D, 60005 }, + { 0x789E, 60009 }, + { 0x789F, 60013 }, + { 0x78A0, 60017 }, + { 0x78A1, 60021 }, + { 0x78A2, 60025 }, + { 0x78A3, 60029 }, + { 0x78A4, 60033 }, + { 0x78A5, 60037 }, + { 0x78A6, 60041 }, + { 0x78A7, 60045 }, + { 0x78A8, 60049 }, + { 0x78A9, 60053 }, + { 0x78AA, 60057 }, + { 0x78AB, 60061 }, + { 0x78AC, 60065 }, + { 0x78AD, 60069 }, + { 0x78AE, 60073 }, + { 0x78AF, 60077 }, + { 0x78B0, 60081 }, + { 0x78B1, 60085 }, + { 0x78B2, 60089 }, + { 0x78B3, 60093 }, + { 0x78B4, 60097 }, + { 0x78B5, 60101 }, + { 0x78B6, 60105 }, + { 0x78B7, 60109 }, + { 0x78B8, 60113 }, + { 0x78B9, 60117 }, + { 0x78BA, 60121 }, + { 0x78BB, 60125 }, + { 0x78BC, 60129 }, + { 0x78BD, 60133 }, + { 0x78BE, 60137 }, + { 0x78BF, 60141 }, + { 0x78C0, 60145 }, + { 0x78C1, 60149 }, + { 0x78C2, 60153 }, + { 0x78C3, 60157 }, + { 0x78C4, 60161 }, + { 0x78C5, 60165 }, + { 0x78C6, 60169 }, + { 0x78C7, 60173 }, + { 0x78C8, 60177 }, + { 0x78C9, 60181 }, + { 0x78CA, 60185 }, + { 0x78CB, 60189 }, + { 0x78CC, 60193 }, + { 0x78CD, 60197 }, + { 0x78CE, 60201 }, + { 0x78CF, 60205 }, + { 0x78D0, 60209 }, + { 0x78D1, 60213 }, + { 0x78D2, 60217 }, + { 0x78D3, 60221 }, + { 0x78D4, 60225 }, + { 0x78D5, 60229 }, + { 0x78D6, 60233 }, + { 0x78D7, 60237 }, + { 0x78D8, 60241 }, + { 0x78D9, 60245 }, + { 0x78DA, 60249 }, + { 0x78DB, 60253 }, + { 0x78DC, 60257 }, + { 0x78DD, 60261 }, + { 0x78DE, 60265 }, + { 0x78DF, 60269 }, + { 0x78E0, 60273 }, + { 0x78E1, 60277 }, + { 0x78E2, 60281 }, + { 0x78E3, 60285 }, + { 0x78E4, 60289 }, + { 0x78E5, 60293 }, + { 0x78E6, 60297 }, + { 0x78E7, 60301 }, + { 0x78E8, 60305 }, + { 0x78E9, 60309 }, + { 0x78EA, 60313 }, + { 0x78EB, 60317 }, + { 0x78EC, 60321 }, + { 0x78ED, 60325 }, + { 0x78EE, 60329 }, + { 0x78EF, 106315 }, + { 0x78F0, 106319 }, + { 0x78F1, 106323 }, + { 0x78F2, 106327 }, + { 0x78F3, 106331 }, + { 0x78F4, 106335 }, + { 0x78F5, 106339 }, + { 0x78F6, 106344 }, + { 0x78F7, 106349 }, + { 0x78F8, 106354 }, + { 0x78F9, 106359 }, + { 0x78FA, 106364 }, + { 0x78FB, 106369 }, + { 0x78FC, 106374 }, + { 0x78FD, 105328 }, + { 0x78FE, 130744 }, + { 0x78FF, 130747 }, + { 0x7900, 130750 }, + { 0x7901, 130807 }, + { 0x7902, 130771 }, + { 0x7903, 130774 }, + { 0x7904, 130777 }, + { 0x7905, 130780 }, + { 0x7906, 130792 }, + { 0x7907, 130795 }, + { 0x7908, 130798 }, + { 0x7909, 130801 }, + { 0x790A, 130804 }, + { 0x790B, 130756 }, + { 0x790C, 130759 }, + { 0x790D, 130762 }, + { 0x790E, 130765 }, + { 0x790F, 130768 }, + { 0x7910, 130783 }, + { 0x7911, 130786 }, + { 0x7912, 130789 }, + { 0x7913, 130912 }, + { 0x7914, 130915 }, + { 0x7915, 130918 }, + { 0x7916, 130921 }, + { 0x7917, 130924 }, + { 0x7918, 130927 }, + { 0x7919, 130930 }, + { 0x791A, 130933 }, + { 0x791B, 130936 }, + { 0x791C, 131566 }, + { 0x791D, 131569 }, + { 0x791E, 131572 }, + { 0x791F, 130957 }, + { 0x7920, 130960 }, + { 0x7921, 130963 }, + { 0x7922, 130966 }, + { 0x7923, 130969 }, + { 0x7924, 130972 }, + { 0x7925, 130975 }, + { 0x7926, 130978 }, + { 0x7927, 130990 }, + { 0x7928, 130993 }, + { 0x7929, 130996 }, + { 0x792A, 130999 }, + { 0x792B, 131002 }, + { 0x792C, 131005 }, + { 0x792D, 131008 }, + { 0x792E, 130939 }, + { 0x792F, 130942 }, + { 0x7930, 130945 }, + { 0x7931, 130948 }, + { 0x7932, 130951 }, + { 0x7933, 130954 }, + { 0x7934, 130981 }, + { 0x7935, 130984 }, + { 0x7936, 130987 }, + { 0x7937, 131575 }, + { 0x7938, 131260 }, + { 0x7939, 131263 }, + { 0x793A, 131266 }, + { 0x793B, 131269 }, + { 0x793C, 131272 }, + { 0x793D, 131275 }, + { 0x793E, 131278 }, + { 0x793F, 131281 }, + { 0x7940, 131299 }, + { 0x7941, 131302 }, + { 0x7942, 131305 }, + { 0x7943, 131308 }, + { 0x7944, 131311 }, + { 0x7945, 131314 }, + { 0x7946, 131338 }, + { 0x7947, 131341 }, + { 0x7948, 131344 }, + { 0x7949, 131347 }, + { 0x794A, 131350 }, + { 0x794B, 131353 }, + { 0x794C, 131356 }, + { 0x794D, 131359 }, + { 0x794E, 131284 }, + { 0x794F, 131287 }, + { 0x7950, 131290 }, + { 0x7951, 131293 }, + { 0x7952, 131296 }, + { 0x7953, 131317 }, + { 0x7954, 131320 }, + { 0x7955, 131323 }, + { 0x7956, 131326 }, + { 0x7957, 131329 }, + { 0x7958, 131332 }, + { 0x7959, 131335 }, + { 0x795A, 131362 }, + { 0x795B, 131365 }, + { 0x795C, 131368 }, + { 0x795D, 131371 }, + { 0x795E, 131401 }, + { 0x795F, 131404 }, + { 0x7960, 131407 }, + { 0x7961, 131410 }, + { 0x7962, 131413 }, + { 0x7963, 131416 }, + { 0x7964, 131419 }, + { 0x7965, 131440 }, + { 0x7966, 131443 }, + { 0x7967, 131446 }, + { 0x7968, 131449 }, + { 0x7969, 131590 }, + { 0x796A, 131374 }, + { 0x796B, 131377 }, + { 0x796C, 131380 }, + { 0x796D, 131383 }, + { 0x796E, 131386 }, + { 0x796F, 131389 }, + { 0x7970, 131392 }, + { 0x7971, 131395 }, + { 0x7972, 131398 }, + { 0x7973, 131422 }, + { 0x7974, 131425 }, + { 0x7975, 131428 }, + { 0x7976, 131431 }, + { 0x7977, 131434 }, + { 0x7978, 131437 }, + { 0x7979, 131587 }, + { 0x797A, 131089 }, + { 0x797B, 131092 }, + { 0x797C, 131095 }, + { 0x797D, 131098 }, + { 0x797E, 131101 }, + { 0x797F, 131104 }, + { 0x7980, 131107 }, + { 0x7981, 131110 }, + { 0x7982, 131113 }, + { 0x7983, 131134 }, + { 0x7984, 131137 }, + { 0x7985, 131140 }, + { 0x7986, 131143 }, + { 0x7987, 131146 }, + { 0x7988, 131149 }, + { 0x7989, 131152 }, + { 0x798A, 131584 }, + { 0x798B, 131170 }, + { 0x798C, 131173 }, + { 0x798D, 131176 }, + { 0x798E, 131116 }, + { 0x798F, 131119 }, + { 0x7990, 131122 }, + { 0x7991, 131125 }, + { 0x7992, 131128 }, + { 0x7993, 131131 }, + { 0x7994, 131581 }, + { 0x7995, 131155 }, + { 0x7996, 131158 }, + { 0x7997, 131161 }, + { 0x7998, 131164 }, + { 0x7999, 131167 }, + { 0x799A, 130810 }, + { 0x799B, 130813 }, + { 0x799C, 130816 }, + { 0x799D, 130819 }, + { 0x799E, 130822 }, + { 0x799F, 130825 }, + { 0x79A0, 130828 }, + { 0x79A1, 130831 }, + { 0x79A2, 130834 }, + { 0x79A3, 131560 }, + { 0x79A4, 131563 }, + { 0x79A5, 130858 }, + { 0x79A6, 130861 }, + { 0x79A7, 130864 }, + { 0x79A8, 130867 }, + { 0x79A9, 130870 }, + { 0x79AA, 130873 }, + { 0x79AB, 130876 }, + { 0x79AC, 130903 }, + { 0x79AD, 130906 }, + { 0x79AE, 130909 }, + { 0x79AF, 130837 }, + { 0x79B0, 130840 }, + { 0x79B1, 130843 }, + { 0x79B2, 130846 }, + { 0x79B3, 130849 }, + { 0x79B4, 130852 }, + { 0x79B5, 130855 }, + { 0x79B6, 130879 }, + { 0x79B7, 130882 }, + { 0x79B8, 130885 }, + { 0x79B9, 130888 }, + { 0x79BA, 130891 }, + { 0x79BB, 130894 }, + { 0x79BC, 130897 }, + { 0x79BD, 130900 }, + { 0x79BE, 131011 }, + { 0x79BF, 131014 }, + { 0x79C0, 131017 }, + { 0x79C1, 131020 }, + { 0x79C2, 131023 }, + { 0x79C3, 131026 }, + { 0x79C4, 131029 }, + { 0x79C5, 131038 }, + { 0x79C6, 131041 }, + { 0x79C7, 131044 }, + { 0x79C8, 131047 }, + { 0x79C9, 131050 }, + { 0x79CA, 131053 }, + { 0x79CB, 131056 }, + { 0x79CC, 131077 }, + { 0x79CD, 131080 }, + { 0x79CE, 131083 }, + { 0x79CF, 131086 }, + { 0x79D0, 131032 }, + { 0x79D1, 131035 }, + { 0x79D2, 131578 }, + { 0x79D3, 131059 }, + { 0x79D4, 131062 }, + { 0x79D5, 131065 }, + { 0x79D6, 131068 }, + { 0x79D7, 131071 }, + { 0x79D8, 131074 }, + { 0x79D9, 131515 }, + { 0x79DA, 131518 }, + { 0x79DB, 131521 }, + { 0x79DC, 131524 }, + { 0x79DD, 131527 }, + { 0x79DE, 131593 }, + { 0x79DF, 131548 }, + { 0x79E0, 131551 }, + { 0x79E1, 131554 }, + { 0x79E2, 131557 }, + { 0x79E3, 131530 }, + { 0x79E4, 131533 }, + { 0x79E5, 131536 }, + { 0x79E6, 131539 }, + { 0x79E7, 131542 }, + { 0x79E8, 131545 }, + { 0x79E9, 131179 }, + { 0x79EA, 131182 }, + { 0x79EB, 131185 }, + { 0x79EC, 131188 }, + { 0x79ED, 131203 }, + { 0x79EE, 131206 }, + { 0x79EF, 131209 }, + { 0x79F0, 131212 }, + { 0x79F1, 131215 }, + { 0x79F2, 131218 }, + { 0x79F3, 131221 }, + { 0x79F4, 131242 }, + { 0x79F5, 131245 }, + { 0x79F6, 131248 }, + { 0x79F7, 131251 }, + { 0x79F8, 131254 }, + { 0x79F9, 131257 }, + { 0x79FA, 131191 }, + { 0x79FB, 131194 }, + { 0x79FC, 131197 }, + { 0x79FD, 131200 }, + { 0x79FE, 131224 }, + { 0x79FF, 131227 }, + { 0x7A00, 131230 }, + { 0x7A01, 131233 }, + { 0x7A02, 131236 }, + { 0x7A03, 131239 }, + { 0x7A04, 131452 }, + { 0x7A05, 131455 }, + { 0x7A06, 131458 }, + { 0x7A07, 131461 }, + { 0x7A08, 131464 }, + { 0x7A09, 131479 }, + { 0x7A0A, 131482 }, + { 0x7A0B, 131485 }, + { 0x7A0C, 131488 }, + { 0x7A0D, 131491 }, + { 0x7A0E, 131467 }, + { 0x7A0F, 131470 }, + { 0x7A10, 131473 }, + { 0x7A11, 131476 }, + { 0x7A12, 131494 }, + { 0x7A13, 131497 }, + { 0x7A14, 131500 }, + { 0x7A15, 131503 }, + { 0x7A16, 131506 }, + { 0x7A17, 131509 }, + { 0x7A18, 131512 }, + { 0x7A19, 131596 }, + { 0x7A1A, 131599 }, + { 0x7A1B, 105324 }, + { 0x7A1C, 106386 }, + { 0x7A1D, 106382 }, + { 0x7A1E, 106378 }, + { 0x7A1F, 105288 }, + { 0x7A20, 105304 }, + { 0x7A21, 105300 }, + { 0x7A22, 105308 }, + { 0x7A23, 106235 }, + { 0x7A24, 106295 }, + { 0x7A25, 106291 }, + { 0x7A26, 106299 }, + { 0x7A27, 106195 }, + { 0x7A28, 38752 }, + { 0x7A29, 38754 }, + { 0x7A2A, 38756 }, + { 0x7A2B, 38758 }, + { 0x7A2C, 38760 }, + { 0x7A2D, 38762 }, + { 0x7A2E, 38764 }, + { 0x7A2F, 38766 }, + { 0x7A30, 38768 }, + { 0x7A31, 38770 }, + { 0x7A32, 38772 }, + { 0x7A33, 38774 }, + { 0x7A34, 38776 }, + { 0x7A35, 38778 }, + { 0x7A36, 38780 }, + { 0x7A37, 38782 }, + { 0x7A38, 38784 }, + { 0x7A39, 38786 }, + { 0x7A3A, 38788 }, + { 0x7A3B, 38790 }, + { 0x7A3C, 38792 }, + { 0x7A3D, 38794 }, + { 0x7A3E, 38796 }, + { 0x7A3F, 38798 }, + { 0x7A40, 38800 }, + { 0x7A41, 38802 }, + { 0x7A42, 38804 }, + { 0x7A43, 38806 }, + { 0x7A44, 38808 }, + { 0x7A45, 38810 }, + { 0x7A46, 38812 }, + { 0x7A47, 38814 }, + { 0x7A48, 38816 }, + { 0x7A49, 38818 }, + { 0x7A4A, 38820 }, + { 0x7A4B, 38822 }, + { 0x7A4C, 38824 }, + { 0x7A4D, 38826 }, + { 0x7A4E, 38828 }, + { 0x7A4F, 38830 }, + { 0x7A50, 38832 }, + { 0x7A51, 38834 }, + { 0x7A52, 38836 }, + { 0x7A53, 38838 }, + { 0x7A54, 38840 }, + { 0x7A55, 38842 }, + { 0x7A56, 38844 }, + { 0x7A57, 38846 }, + { 0x7A58, 38848 }, + { 0x7A59, 38850 }, + { 0x7A5A, 38852 }, + { 0x7A5B, 38854 }, + { 0x7A5C, 38856 }, + { 0x7A5D, 38858 }, + { 0x7A5E, 38860 }, + { 0x7A5F, 38862 }, + { 0x7A60, 38864 }, + { 0x7A61, 38866 }, + { 0x7A62, 38868 }, + { 0x7A63, 38870 }, + { 0x7A64, 38872 }, + { 0x7A65, 38874 }, + { 0x7A66, 38876 }, + { 0x7A67, 38878 }, + { 0x7A68, 38880 }, + { 0x7A69, 38882 }, + { 0x7A6A, 38884 }, + { 0x7A6B, 38886 }, + { 0x7A6C, 38888 }, + { 0x7A6D, 38890 }, + { 0x7A6E, 38892 }, + { 0x7A6F, 38894 }, + { 0x7A70, 38896 }, + { 0x7A71, 38898 }, + { 0x7A72, 38900 }, + { 0x7A73, 38902 }, + { 0x7A74, 38904 }, + { 0x7A75, 38906 }, + { 0x7A76, 38908 }, + { 0x7A77, 38910 }, + { 0x7A78, 38912 }, + { 0x7A79, 38914 }, + { 0x7A7A, 38916 }, + { 0x7A7B, 38918 }, + { 0x7A7C, 38920 }, + { 0x7A7D, 38922 }, + { 0x7A7E, 38924 }, + { 0x7A7F, 38926 }, + { 0x7A80, 38928 }, + { 0x7A81, 38930 }, + { 0x7A82, 38932 }, + { 0x7A83, 38934 }, + { 0x7A84, 38936 }, + { 0x7A85, 38938 }, + { 0x7A86, 38940 }, + { 0x7A87, 38942 }, + { 0x7A88, 38944 }, + { 0x7A89, 38946 }, + { 0x7A8A, 38948 }, + { 0x7A8B, 38950 }, + { 0x7A8C, 38952 }, + { 0x7A8D, 38954 }, + { 0x7A8E, 38956 }, + { 0x7A8F, 38958 }, + { 0x7A90, 38960 }, + { 0x7A91, 38962 }, + { 0x7A92, 38964 }, + { 0x7A93, 38966 }, + { 0x7A94, 38968 }, + { 0x7A95, 38970 }, + { 0x7A96, 38972 }, + { 0x7A97, 38974 }, + { 0x7A98, 38976 }, + { 0x7A99, 38978 }, + { 0x7A9A, 38980 }, + { 0x7A9B, 38982 }, + { 0x7A9C, 38984 }, + { 0x7A9D, 38986 }, + { 0x7A9E, 38988 }, + { 0x7A9F, 38990 }, + { 0x7AA0, 38992 }, + { 0x7AA1, 38994 }, + { 0x7AA2, 38996 }, + { 0x7AA3, 38998 }, + { 0x7AA4, 39000 }, + { 0x7AA5, 39002 }, + { 0x7AA6, 39004 }, + { 0x7AA7, 39006 }, + { 0x7AA8, 39008 }, + { 0x7AA9, 39010 }, + { 0x7AAA, 39012 }, + { 0x7AAB, 39014 }, + { 0x7AAC, 39016 }, + { 0x7AAD, 39018 }, + { 0x7AAE, 39020 }, + { 0x7AAF, 39022 }, + { 0x7AB0, 39024 }, + { 0x7AB1, 39026 }, + { 0x7AB2, 39028 }, + { 0x7AB3, 39030 }, + { 0x7AB4, 39032 }, + { 0x7AB5, 39034 }, + { 0x7AB6, 39036 }, + { 0x7AB7, 39038 }, + { 0x7AB8, 39040 }, + { 0x7AB9, 39042 }, + { 0x7ABA, 39044 }, + { 0x7ABB, 39046 }, + { 0x7ABC, 39048 }, + { 0x7ABD, 39050 }, + { 0x7ABE, 39052 }, + { 0x7ABF, 39054 }, + { 0x7AC0, 39056 }, + { 0x7AC1, 39058 }, + { 0x7AC2, 39060 }, + { 0x7AC3, 39062 }, + { 0x7AC4, 39064 }, + { 0x7AC5, 39066 }, + { 0x7AC6, 39068 }, + { 0x7AC7, 39070 }, + { 0x7AC8, 39072 }, + { 0x7AC9, 39074 }, + { 0x7ACA, 39076 }, + { 0x7ACB, 39078 }, + { 0x7ACC, 39080 }, + { 0x7ACD, 39082 }, + { 0x7ACE, 39084 }, + { 0x7ACF, 39086 }, + { 0x7AD0, 39088 }, + { 0x7AD1, 39090 }, + { 0x7AD2, 39092 }, + { 0x7AD3, 39094 }, + { 0x7AD4, 39096 }, + { 0x7AD5, 39098 }, + { 0x7AD6, 39100 }, + { 0x7AD7, 39102 }, + { 0x7AD8, 39104 }, + { 0x7AD9, 39106 }, + { 0x7ADA, 39108 }, + { 0x7ADB, 39110 }, + { 0x7ADC, 39112 }, + { 0x7ADD, 39114 }, + { 0x7ADE, 39116 }, + { 0x7ADF, 39118 }, + { 0x7AE0, 39120 }, + { 0x7AE1, 39122 }, + { 0x7AE2, 39124 }, + { 0x7AE3, 39126 }, + { 0x7AE4, 39128 }, + { 0x7AE5, 39130 }, + { 0x7AE6, 39132 }, + { 0x7AE7, 39134 }, + { 0x7AE8, 39136 }, + { 0x7AE9, 39138 }, + { 0x7AEA, 39140 }, + { 0x7AEB, 39142 }, + { 0x7AEC, 39144 }, + { 0x7AED, 39146 }, + { 0x7AEE, 39148 }, + { 0x7AEF, 39150 }, + { 0x7AF0, 39152 }, + { 0x7AF1, 39154 }, + { 0x7AF2, 39156 }, + { 0x7AF3, 39158 }, + { 0x7AF4, 39160 }, + { 0x7AF5, 39162 }, + { 0x7AF6, 39164 }, + { 0x7AF7, 39166 }, + { 0x7AF8, 39168 }, + { 0x7AF9, 39170 }, + { 0x7AFA, 39172 }, + { 0x7AFB, 39174 }, + { 0x7AFC, 39176 }, + { 0x7AFD, 39178 }, + { 0x7AFE, 39180 }, + { 0x7AFF, 39182 }, + { 0x7B00, 39184 }, + { 0x7B01, 39186 }, + { 0x7B02, 39188 }, + { 0x7B03, 39190 }, + { 0x7B04, 39192 }, + { 0x7B05, 39194 }, + { 0x7B06, 39196 }, + { 0x7B07, 39198 }, + { 0x7B08, 39200 }, + { 0x7B09, 39202 }, + { 0x7B0A, 39204 }, + { 0x7B0B, 39206 }, + { 0x7B0C, 39208 }, + { 0x7B0D, 39210 }, + { 0x7B0E, 39212 }, + { 0x7B0F, 39214 }, + { 0x7B10, 39216 }, + { 0x7B11, 39218 }, + { 0x7B12, 39220 }, + { 0x7B13, 39222 }, + { 0x7B14, 39224 }, + { 0x7B15, 39226 }, + { 0x7B16, 39228 }, + { 0x7B17, 39230 }, + { 0x7B18, 39232 }, + { 0x7B19, 39234 }, + { 0x7B1A, 39236 }, + { 0x7B1B, 39238 }, + { 0x7B1C, 39240 }, + { 0x7B1D, 39242 }, + { 0x7B1E, 39244 }, + { 0x7B1F, 39246 }, + { 0x7B20, 39248 }, + { 0x7B21, 39250 }, + { 0x7B22, 39252 }, + { 0x7B23, 39254 }, + { 0x7B24, 39256 }, + { 0x7B25, 39258 }, + { 0x7B26, 39260 }, + { 0x7B27, 39262 }, + { 0x7B28, 39264 }, + { 0x7B29, 39266 }, + { 0x7B2A, 39268 }, + { 0x7B2B, 39270 }, + { 0x7B2C, 39272 }, + { 0x7B2D, 39274 }, + { 0x7B2E, 39276 }, + { 0x7B2F, 39278 }, + { 0x7B30, 39280 }, + { 0x7B31, 39282 }, + { 0x7B32, 39284 }, + { 0x7B33, 39286 }, + { 0x7B34, 39288 }, + { 0x7B35, 39290 }, + { 0x7B36, 39292 }, + { 0x7B37, 39294 }, + { 0x7B38, 39296 }, + { 0x7B39, 39298 }, + { 0x7B3A, 39300 }, + { 0x7B3B, 39302 }, + { 0x7B3C, 39304 }, + { 0x7B3D, 39306 }, + { 0x7B3E, 39308 }, + { 0x7B3F, 39310 }, + { 0x7B40, 39312 }, + { 0x7B41, 39314 }, + { 0x7B42, 39316 }, + { 0x7B43, 39318 }, + { 0x7B44, 39320 }, + { 0x7B45, 39322 }, + { 0x7B46, 39324 }, + { 0x7B47, 39326 }, + { 0x7B48, 39328 }, + { 0x7B49, 39330 }, + { 0x7B4A, 39332 }, + { 0x7B4B, 39334 }, + { 0x7B4C, 39336 }, + { 0x7B4D, 39338 }, + { 0x7B4E, 39340 }, + { 0x7B4F, 39342 }, + { 0x7B50, 39344 }, + { 0x7B51, 39346 }, + { 0x7B52, 39348 }, + { 0x7B53, 39350 }, + { 0x7B54, 39352 }, + { 0x7B55, 39354 }, + { 0x7B56, 39356 }, + { 0x7B57, 39358 }, + { 0x7B58, 39360 }, + { 0x7B59, 39362 }, + { 0x7B5A, 39364 }, + { 0x7B5B, 39366 }, + { 0x7B5C, 39368 }, + { 0x7B5D, 39370 }, + { 0x7B5E, 39372 }, + { 0x7B5F, 39374 }, + { 0x7B60, 39376 }, + { 0x7B61, 39378 }, + { 0x7B62, 39380 }, + { 0x7B63, 39382 }, + { 0x7B64, 39384 }, + { 0x7B65, 39386 }, + { 0x7B66, 39388 }, + { 0x7B67, 39390 }, + { 0x7B68, 39392 }, + { 0x7B69, 39394 }, + { 0x7B6A, 39396 }, + { 0x7B6B, 39398 }, + { 0x7B6C, 39400 }, + { 0x7B6D, 39402 }, + { 0x7B6E, 39404 }, + { 0x7B6F, 39406 }, + { 0x7B70, 39408 }, + { 0x7B71, 39410 }, + { 0x7B72, 39412 }, + { 0x7B73, 39414 }, + { 0x7B74, 39416 }, + { 0x7B75, 39418 }, + { 0x7B76, 39420 }, + { 0x7B77, 39422 }, + { 0x7B78, 39424 }, + { 0x7B79, 39426 }, + { 0x7B7A, 39428 }, + { 0x7B7B, 39430 }, + { 0x7B7C, 39432 }, + { 0x7B7D, 39434 }, + { 0x7B7E, 39436 }, + { 0x7B7F, 39438 }, + { 0x7B80, 39440 }, + { 0x7B81, 39442 }, + { 0x7B82, 39444 }, + { 0x7B83, 39446 }, + { 0x7B84, 39448 }, + { 0x7B85, 39450 }, + { 0x7B86, 39452 }, + { 0x7B87, 39454 }, + { 0x7B88, 39456 }, + { 0x7B89, 39458 }, + { 0x7B8A, 39460 }, + { 0x7B8B, 39462 }, + { 0x7B8C, 39464 }, + { 0x7B8D, 39466 }, + { 0x7B8E, 39468 }, + { 0x7B8F, 39470 }, + { 0x7B90, 39472 }, + { 0x7B91, 39474 }, + { 0x7B92, 39476 }, + { 0x7B93, 39478 }, + { 0x7B94, 39480 }, + { 0x7B95, 39482 }, + { 0x7B96, 39484 }, + { 0x7B97, 39486 }, + { 0x7B98, 39488 }, + { 0x7B99, 39490 }, + { 0x7B9A, 39492 }, + { 0x7B9B, 39494 }, + { 0x7B9C, 39496 }, + { 0x7B9D, 39498 }, + { 0x7B9E, 39500 }, + { 0x7B9F, 39502 }, + { 0x7BA0, 39504 }, + { 0x7BA1, 39506 }, + { 0x7BA2, 39508 }, + { 0x7BA3, 39510 }, + { 0x7BA4, 39512 }, + { 0x7BA5, 39514 }, + { 0x7BA6, 39516 }, + { 0x7BA7, 39518 }, + { 0x7BA8, 39520 }, + { 0x7BA9, 39522 }, + { 0x7BAA, 39524 }, + { 0x7BAB, 39526 }, + { 0x7BAC, 39528 }, + { 0x7BAD, 39530 }, + { 0x7BAE, 39532 }, + { 0x7BAF, 39534 }, + { 0x7BB0, 39536 }, + { 0x7BB1, 39538 }, + { 0x7BB2, 39540 }, + { 0x7BB3, 39542 }, + { 0x7BB4, 89964 }, + { 0x7BB5, 90179 }, + { 0x7BB6, 90074 }, + { 0x7BB7, 90150 }, + { 0x7BB8, 89949 }, + { 0x7BB9, 90014 }, + { 0x7BBA, 90026 }, + { 0x7BBB, 89936 }, + { 0x7BBC, 89939 }, + { 0x7BBD, 90169 }, + { 0x7BBE, 89956 }, + { 0x7BBF, 90081 }, + { 0x7BC0, 90077 }, + { 0x7BC1, 89942 }, + { 0x7BC2, 89952 }, + { 0x7BC3, 90017 }, + { 0x7BC4, 90084 }, + { 0x7BC5, 90215 }, + { 0x7BC6, 90294 }, + { 0x7BC7, 90182 }, + { 0x7BC8, 90197 }, + { 0x7BC9, 90282 }, + { 0x7BCA, 90191 }, + { 0x7BCB, 90200 }, + { 0x7BCC, 90212 }, + { 0x7BCD, 90029 }, + { 0x7BCE, 90050 }, + { 0x7BCF, 89970 }, + { 0x7BD0, 90088 }, + { 0x7BD1, 90032 }, + { 0x7BD2, 90053 }, + { 0x7BD3, 89973 }, + { 0x7BD4, 90091 }, + { 0x7BD5, 90045 }, + { 0x7BD6, 90066 }, + { 0x7BD7, 90001 }, + { 0x7BD8, 90006 }, + { 0x7BD9, 90139 }, + { 0x7BDA, 90144 }, + { 0x7BDB, 90041 }, + { 0x7BDC, 90062 }, + { 0x7BDD, 89991 }, + { 0x7BDE, 90126 }, + { 0x7BDF, 90036 }, + { 0x7BE0, 90057 }, + { 0x7BE1, 89977 }, + { 0x7BE2, 90095 }, + { 0x7BE3, 89995 }, + { 0x7BE4, 89982 }, + { 0x7BE5, 89986 }, + { 0x7BE6, 90130 }, + { 0x7BE7, 90134 }, + { 0x7BE8, 90117 }, + { 0x7BE9, 90121 }, + { 0x7BEA, 90158 }, + { 0x7BEB, 90153 }, + { 0x7BEC, 90172 }, + { 0x7BED, 90227 }, + { 0x7BEE, 90175 }, + { 0x7BEF, 90113 }, + { 0x7BF0, 90109 }, + { 0x7BF1, 90021 }, + { 0x7BF2, 89959 }, + { 0x7BF3, 90100 }, + { 0x7BF4, 90104 }, + { 0x7BF5, 89933 }, + { 0x7BF6, 90314 }, + { 0x7BF7, 90203 }, + { 0x7BF8, 90071 }, + { 0x7BF9, 90242 }, + { 0x7BFA, 89967 }, + { 0x7BFB, 89946 }, + { 0x7BFC, 90194 }, + { 0x7BFD, 90278 }, + { 0x7BFE, 90221 }, + { 0x7BFF, 90185 }, + { 0x7C00, 90302 }, + { 0x7C01, 90330 }, + { 0x7C02, 90298 }, + { 0x7C03, 90254 }, + { 0x7C04, 90239 }, + { 0x7C05, 90162 }, + { 0x7C06, 90188 }, + { 0x7C07, 90236 }, + { 0x7C08, 90165 }, + { 0x7C09, 90258 }, + { 0x7C0A, 90334 }, + { 0x7C0B, 90218 }, + { 0x7C0C, 90286 }, + { 0x7C0D, 90245 }, + { 0x7C0E, 90209 }, + { 0x7C0F, 90206 }, + { 0x7C10, 90224 }, + { 0x7C11, 90233 }, + { 0x7C12, 90230 }, + { 0x7C13, 90248 }, + { 0x7C14, 90251 }, + { 0x7C15, 90274 }, + { 0x7C16, 90270 }, + { 0x7C17, 90266 }, + { 0x7C18, 90262 }, + { 0x7C19, 90322 }, + { 0x7C1A, 90318 }, + { 0x7C1B, 90306 }, + { 0x7C1C, 90290 }, + { 0x7C1D, 90310 }, + { 0x7C1E, 90326 }, + { 0x7C1F, 89884 }, + { 0x7C20, 89836 }, + { 0x7C21, 89889 }, + { 0x7C22, 89826 }, + { 0x7C23, 89831 }, + { 0x7C24, 89879 }, + { 0x7C25, 89908 }, + { 0x7C26, 89921 }, + { 0x7C27, 89912 }, + { 0x7C28, 89904 }, + { 0x7C29, 89894 }, + { 0x7C2A, 89899 }, + { 0x7C2B, 89916 }, + { 0x7C2C, 89858 }, + { 0x7C2D, 89866 }, + { 0x7C2E, 89862 }, + { 0x7C2F, 89849 }, + { 0x7C30, 89841 }, + { 0x7C31, 89871 }, + { 0x7C32, 89845 }, + { 0x7C33, 89854 }, + { 0x7C34, 89875 }, + { 0x7C35, 89801 }, + { 0x7C36, 89813 }, + { 0x7C37, 89809 }, + { 0x7C38, 89792 }, + { 0x7C39, 89784 }, + { 0x7C3A, 89818 }, + { 0x7C3B, 89788 }, + { 0x7C3C, 89797 }, + { 0x7C3D, 89822 }, + { 0x7C3E, 89805 }, + { 0x7C3F, 89779 }, + { 0x7C40, 89926 }, + { 0x7C41, 89930 }, + { 0x7C42, 90338 }, + { 0x7C43, 128198 }, + { 0x7C44, 128202 }, + { 0x7C45, 128194 }, + { 0x7C46, 128190 }, + { 0x7C47, 137740 }, + { 0x7C48, 144889 }, + { 0x7C49, 143935 }, + { 0x7C4A, 144858 }, + { 0x7C4B, 143654 }, + { 0x7C4C, 37257 }, + { 0x7C4D, 40685 }, + { 0x7C4E, 37050 }, + { 0x7C4F, 69878 }, + { 0x7C50, 131699 }, + { 0x7C51, 111417 }, + { 0x7C52, 14862 }, + { 0x7C53, 63822 }, + { 0x7C54, 40488 }, + { 0x7C55, 143931 }, + { 0x7C56, 144854 }, + { 0x7C57, 8064 }, + { 0x7C58, 10518 }, + { 0x7C59, 132218 }, + { 0x7C5A, 131702 }, + { 0x7C5B, 111420 }, + { 0x7C5C, 36628 }, + { 0x7C5D, 36631 }, + { 0x7C5E, 36643 }, + { 0x7C5F, 36647 }, + { 0x7C60, 36634 }, + { 0x7C61, 36637 }, + { 0x7C62, 5676 }, + { 0x7C63, 5669 }, + { 0x7C64, 5158 }, + { 0x7C65, 5202 }, + { 0x7C66, 5825 }, + { 0x7C67, 5804 }, + { 0x7C68, 127971 }, + { 0x7C69, 127974 }, + { 0x7C6A, 128028 }, + { 0x7C6B, 127977 }, + { 0x7C6C, 128031 }, + { 0x7C6D, 128037 }, + { 0x7C6E, 128106 }, + { 0x7C6F, 127980 }, + { 0x7C70, 128034 }, + { 0x7C71, 128040 }, + { 0x7C72, 128109 }, + { 0x7C73, 128043 }, + { 0x7C74, 128112 }, + { 0x7C75, 128115 }, + { 0x7C76, 128163 }, + { 0x7C77, 42706 }, + { 0x7C78, 43044 }, + { 0x7C79, 43055 }, + { 0x7C7A, 42918 }, + { 0x7C7B, 43066 }, + { 0x7C7C, 42702 }, + { 0x7C7D, 42914 }, + { 0x7C7E, 43077 }, + { 0x7C7F, 37227 }, + { 0x7C80, 36831 }, + { 0x7C81, 37062 }, + { 0x7C82, 37238 }, + { 0x7C83, 36835 }, + { 0x7C84, 37205 }, + { 0x7C85, 37216 }, + { 0x7C86, 37066 }, + { 0x7C87, 64943 }, + { 0x7C88, 64940 }, + { 0x7C89, 132101 }, + { 0x7C8A, 89728 }, + { 0x7C8B, 22551 }, + { 0x7C8C, 22554 }, + { 0x7C8D, 80687 }, + { 0x7C8E, 80690 }, + { 0x7C8F, 133897 }, + { 0x7C90, 143487 }, + { 0x7C91, 54959 }, + { 0x7C92, 54963 }, + { 0x7C93, 17935 }, + { 0x7C94, 17939 }, + { 0x7C95, 17919 }, + { 0x7C96, 17923 }, + { 0x7C97, 17915 }, + { 0x7C98, 17911 }, + { 0x7C99, 17930 }, + { 0x7C9A, 17927 }, + { 0x7C9B, 17943 }, + { 0x7C9C, 17946 }, + { 0x7C9D, 143956 }, + { 0x7C9E, 137737 }, + { 0x7C9F, 144879 }, + { 0x7CA0, 143666 }, + { 0x7CA1, 12116 }, + { 0x7CA2, 12144 }, + { 0x7CA3, 12130 }, + { 0x7CA4, 52431 }, + { 0x7CA5, 52459 }, + { 0x7CA6, 52445 }, + { 0x7CA7, 143938 }, + { 0x7CA8, 137728 }, + { 0x7CA9, 144861 }, + { 0x7CAA, 143657 }, + { 0x7CAB, 108875 }, + { 0x7CAC, 143933 }, + { 0x7CAD, 137719 }, + { 0x7CAE, 144856 }, + { 0x7CAF, 143648 }, + { 0x7CB0, 23161 }, + { 0x7CB1, 23164 }, + { 0x7CB2, 21247 }, + { 0x7CB3, 21268 }, + { 0x7CB4, 21261 }, + { 0x7CB5, 21254 }, + { 0x7CB6, 21514 }, + { 0x7CB7, 133873 }, + { 0x7CB8, 128803 }, + { 0x7CB9, 143463 }, + { 0x7CBA, 133189 }, + { 0x7CBB, 133879 }, + { 0x7CBC, 128809 }, + { 0x7CBD, 143469 }, + { 0x7CBE, 133195 }, + { 0x7CBF, 143950 }, + { 0x7CC0, 137731 }, + { 0x7CC1, 144873 }, + { 0x7CC2, 143660 }, + { 0x7CC3, 65501 }, + { 0x7CC4, 65506 }, + { 0x7CC5, 65516 }, + { 0x7CC6, 65511 }, + { 0x7CC7, 81141 }, + { 0x7CC8, 81135 }, + { 0x7CC9, 81144 }, + { 0x7CCA, 81138 }, + { 0x7CCB, 111402 }, + { 0x7CCC, 131686 }, + { 0x7CCD, 43619 }, + { 0x7CCE, 43623 }, + { 0x7CCF, 12239 }, + { 0x7CD0, 65268 }, + { 0x7CD1, 65272 }, + { 0x7CD2, 65263 }, + { 0x7CD3, 65553 }, + { 0x7CD4, 73889 }, + { 0x7CD5, 14566 }, + { 0x7CD6, 73885 }, + { 0x7CD7, 111365 }, + { 0x7CD8, 131643 }, + { 0x7CD9, 133864 }, + { 0x7CDA, 143454 }, + { 0x7CDB, 133866 }, + { 0x7CDC, 143456 }, + { 0x7CDD, 103460 }, + { 0x7CDE, 143953 }, + { 0x7CDF, 137734 }, + { 0x7CE0, 144876 }, + { 0x7CE1, 143663 }, + { 0x7CE2, 131688 }, + { 0x7CE3, 111404 }, + { 0x7CE4, 111410 }, + { 0x7CE5, 143926 }, + { 0x7CE6, 144849 }, + { 0x7CE7, 143959 }, + { 0x7CE8, 144882 }, + { 0x7CE9, 143962 }, + { 0x7CEA, 144885 }, + { 0x7CEB, 14688 }, + { 0x7CEC, 40361 }, + { 0x7CED, 42710 }, + { 0x7CEE, 42922 }, + { 0x7CEF, 42717 }, + { 0x7CF0, 42929 }, + { 0x7CF1, 36885 }, + { 0x7CF2, 37112 }, + { 0x7CF3, 36880 }, + { 0x7CF4, 37107 }, + { 0x7CF5, 36843 }, + { 0x7CF6, 37070 }, + { 0x7CF7, 36895 }, + { 0x7CF8, 37122 }, + { 0x7CF9, 42764 }, + { 0x7CFA, 42976 }, + { 0x7CFB, 36905 }, + { 0x7CFC, 37132 }, + { 0x7CFD, 42768 }, + { 0x7CFE, 42980 }, + { 0x7CFF, 36909 }, + { 0x7D00, 37136 }, + { 0x7D01, 42724 }, + { 0x7D02, 42936 }, + { 0x7D03, 36850 }, + { 0x7D04, 37077 }, + { 0x7D05, 42739 }, + { 0x7D06, 42951 }, + { 0x7D07, 36865 }, + { 0x7D08, 37092 }, + { 0x7D09, 42734 }, + { 0x7D0A, 42946 }, + { 0x7D0B, 36860 }, + { 0x7D0C, 37087 }, + { 0x7D0D, 42744 }, + { 0x7D0E, 42956 }, + { 0x7D0F, 36870 }, + { 0x7D10, 37097 }, + { 0x7D11, 42749 }, + { 0x7D12, 42961 }, + { 0x7D13, 36875 }, + { 0x7D14, 37102 }, + { 0x7D15, 42729 }, + { 0x7D16, 42941 }, + { 0x7D17, 36855 }, + { 0x7D18, 37082 }, + { 0x7D19, 42759 }, + { 0x7D1A, 42971 }, + { 0x7D1B, 36900 }, + { 0x7D1C, 37127 }, + { 0x7D1D, 109715 }, + { 0x7D1E, 109720 }, + { 0x7D1F, 109725 }, + { 0x7D20, 109730 }, + { 0x7D21, 109735 }, + { 0x7D22, 109740 }, + { 0x7D23, 109745 }, + { 0x7D24, 109750 }, + { 0x7D25, 109755 }, + { 0x7D26, 109760 }, + { 0x7D27, 109765 }, + { 0x7D28, 109770 }, + { 0x7D29, 109775 }, + { 0x7D2A, 109780 }, + { 0x7D2B, 109785 }, + { 0x7D2C, 109790 }, + { 0x7D2D, 109795 }, + { 0x7D2E, 109800 }, + { 0x7D2F, 109805 }, + { 0x7D30, 109810 }, + { 0x7D31, 109815 }, + { 0x7D32, 109820 }, + { 0x7D33, 109825 }, + { 0x7D34, 109830 }, + { 0x7D35, 109835 }, + { 0x7D36, 109840 }, + { 0x7D37, 109697 }, + { 0x7D38, 109679 }, + { 0x7D39, 109685 }, + { 0x7D3A, 109706 }, + { 0x7D3B, 109691 }, + { 0x7D3C, 109688 }, + { 0x7D3D, 109682 }, + { 0x7D3E, 109703 }, + { 0x7D3F, 109700 }, + { 0x7D40, 109694 }, + { 0x7D41, 21707 }, + { 0x7D42, 21725 }, + { 0x7D43, 21767 }, + { 0x7D44, 21709 }, + { 0x7D45, 21715 }, + { 0x7D46, 21769 }, + { 0x7D47, 21735 }, + { 0x7D48, 21779 }, + { 0x7D49, 21809 }, + { 0x7D4A, 21711 }, + { 0x7D4B, 21717 }, + { 0x7D4C, 21727 }, + { 0x7D4D, 21771 }, + { 0x7D4E, 21781 }, + { 0x7D4F, 21811 }, + { 0x7D50, 21909 }, + { 0x7D51, 21743 }, + { 0x7D52, 21789 }, + { 0x7D53, 21819 }, + { 0x7D54, 21917 }, + { 0x7D55, 21839 }, + { 0x7D56, 21937 }, + { 0x7D57, 21973 }, + { 0x7D58, 22073 }, + { 0x7D59, 21713 }, + { 0x7D5A, 21719 }, + { 0x7D5B, 21729 }, + { 0x7D5C, 21773 }, + { 0x7D5D, 21737 }, + { 0x7D5E, 21783 }, + { 0x7D5F, 21813 }, + { 0x7D60, 21911 }, + { 0x7D61, 21791 }, + { 0x7D62, 21821 }, + { 0x7D63, 21919 }, + { 0x7D64, 21841 }, + { 0x7D65, 21939 }, + { 0x7D66, 21975 }, + { 0x7D67, 22075 }, + { 0x7D68, 21749 }, + { 0x7D69, 21797 }, + { 0x7D6A, 21827 }, + { 0x7D6B, 21925 }, + { 0x7D6C, 21847 }, + { 0x7D6D, 21945 }, + { 0x7D6E, 21981 }, + { 0x7D6F, 22081 }, + { 0x7D70, 21859 }, + { 0x7D71, 21953 }, + { 0x7D72, 21993 }, + { 0x7D73, 22093 }, + { 0x7D74, 22009 }, + { 0x7D75, 22113 }, + { 0x7D76, 22143 }, + { 0x7D77, 21721 }, + { 0x7D78, 21731 }, + { 0x7D79, 21775 }, + { 0x7D7A, 21739 }, + { 0x7D7B, 21785 }, + { 0x7D7C, 21815 }, + { 0x7D7D, 21913 }, + { 0x7D7E, 21745 }, + { 0x7D7F, 21793 }, + { 0x7D80, 21823 }, + { 0x7D81, 21921 }, + { 0x7D82, 21843 }, + { 0x7D83, 21941 }, + { 0x7D84, 21977 }, + { 0x7D85, 22077 }, + { 0x7D86, 21799 }, + { 0x7D87, 21829 }, + { 0x7D88, 21927 }, + { 0x7D89, 21849 }, + { 0x7D8A, 21983 }, + { 0x7D8B, 22083 }, + { 0x7D8C, 21861 }, + { 0x7D8D, 21955 }, + { 0x7D8E, 22095 }, + { 0x7D8F, 22011 }, + { 0x7D90, 22115 }, + { 0x7D91, 22145 }, + { 0x7D92, 21753 }, + { 0x7D93, 21803 }, + { 0x7D94, 21833 }, + { 0x7D95, 21931 }, + { 0x7D96, 21853 }, + { 0x7D97, 21949 }, + { 0x7D98, 21987 }, + { 0x7D99, 22087 }, + { 0x7D9A, 21865 }, + { 0x7D9B, 21959 }, + { 0x7D9C, 21997 }, + { 0x7D9D, 22099 }, + { 0x7D9E, 22015 }, + { 0x7D9F, 22119 }, + { 0x7DA0, 22149 }, + { 0x7DA1, 22217 }, + { 0x7DA2, 21871 }, + { 0x7DA3, 21965 }, + { 0x7DA4, 22001 }, + { 0x7DA5, 22105 }, + { 0x7DA6, 22021 }, + { 0x7DA7, 22125 }, + { 0x7DA8, 22155 }, + { 0x7DA9, 22221 }, + { 0x7DAA, 22029 }, + { 0x7DAB, 22133 }, + { 0x7DAC, 22163 }, + { 0x7DAD, 22229 }, + { 0x7DAE, 22173 }, + { 0x7DAF, 22239 }, + { 0x7DB0, 22249 }, + { 0x7DB1, 22271 }, + { 0x7DB2, 21723 }, + { 0x7DB3, 21733 }, + { 0x7DB4, 21777 }, + { 0x7DB5, 21741 }, + { 0x7DB6, 21787 }, + { 0x7DB7, 21817 }, + { 0x7DB8, 21915 }, + { 0x7DB9, 21747 }, + { 0x7DBA, 21795 }, + { 0x7DBB, 21825 }, + { 0x7DBC, 21923 }, + { 0x7DBD, 21845 }, + { 0x7DBE, 21943 }, + { 0x7DBF, 21979 }, + { 0x7DC0, 22079 }, + { 0x7DC1, 21751 }, + { 0x7DC2, 21801 }, + { 0x7DC3, 21831 }, + { 0x7DC4, 21929 }, + { 0x7DC5, 21851 }, + { 0x7DC6, 21947 }, + { 0x7DC7, 21985 }, + { 0x7DC8, 22085 }, + { 0x7DC9, 21863 }, + { 0x7DCA, 21957 }, + { 0x7DCB, 21995 }, + { 0x7DCC, 22097 }, + { 0x7DCD, 22013 }, + { 0x7DCE, 22117 }, + { 0x7DCF, 22147 }, + { 0x7DD0, 22215 }, + { 0x7DD1, 21805 }, + { 0x7DD2, 21835 }, + { 0x7DD3, 21933 }, + { 0x7DD4, 21855 }, + { 0x7DD5, 21989 }, + { 0x7DD6, 22089 }, + { 0x7DD7, 21867 }, + { 0x7DD8, 21961 }, + { 0x7DD9, 22101 }, + { 0x7DDA, 22017 }, + { 0x7DDB, 22121 }, + { 0x7DDC, 22151 }, + { 0x7DDD, 21873 }, + { 0x7DDE, 21967 }, + { 0x7DDF, 22003 }, + { 0x7DE0, 22107 }, + { 0x7DE1, 22023 }, + { 0x7DE2, 22127 }, + { 0x7DE3, 22157 }, + { 0x7DE4, 22223 }, + { 0x7DE5, 22031 }, + { 0x7DE6, 22135 }, + { 0x7DE7, 22165 }, + { 0x7DE8, 22231 }, + { 0x7DE9, 22175 }, + { 0x7DEA, 22241 }, + { 0x7DEB, 22251 }, + { 0x7DEC, 22273 }, + { 0x7DED, 21807 }, + { 0x7DEE, 21837 }, + { 0x7DEF, 21935 }, + { 0x7DF0, 21857 }, + { 0x7DF1, 21951 }, + { 0x7DF2, 21991 }, + { 0x7DF3, 22091 }, + { 0x7DF4, 21869 }, + { 0x7DF5, 21963 }, + { 0x7DF6, 21999 }, + { 0x7DF7, 22103 }, + { 0x7DF8, 22019 }, + { 0x7DF9, 22123 }, + { 0x7DFA, 22153 }, + { 0x7DFB, 22219 }, + { 0x7DFC, 21875 }, + { 0x7DFD, 21969 }, + { 0x7DFE, 22005 }, + { 0x7DFF, 22109 }, + { 0x7E00, 22025 }, + { 0x7E01, 22129 }, + { 0x7E02, 22159 }, + { 0x7E03, 22225 }, + { 0x7E04, 22033 }, + { 0x7E05, 22137 }, + { 0x7E06, 22167 }, + { 0x7E07, 22233 }, + { 0x7E08, 22177 }, + { 0x7E09, 22243 }, + { 0x7E0A, 22253 }, + { 0x7E0B, 22275 }, + { 0x7E0C, 21877 }, + { 0x7E0D, 21971 }, + { 0x7E0E, 22007 }, + { 0x7E0F, 22111 }, + { 0x7E10, 22027 }, + { 0x7E11, 22131 }, + { 0x7E12, 22161 }, + { 0x7E13, 22227 }, + { 0x7E14, 22035 }, + { 0x7E15, 22139 }, + { 0x7E16, 22169 }, + { 0x7E17, 22235 }, + { 0x7E18, 22179 }, + { 0x7E19, 22245 }, + { 0x7E1A, 22255 }, + { 0x7E1B, 22277 }, + { 0x7E1C, 22141 }, + { 0x7E1D, 22171 }, + { 0x7E1E, 22237 }, + { 0x7E1F, 22181 }, + { 0x7E20, 22257 }, + { 0x7E21, 22279 }, + { 0x7E22, 22183 }, + { 0x7E23, 22247 }, + { 0x7E24, 22281 }, + { 0x7E25, 22283 }, + { 0x7E26, 22285 }, + { 0x7E27, 12112 }, + { 0x7E28, 52427 }, + { 0x7E29, 12134 }, + { 0x7E2A, 52449 }, + { 0x7E2B, 12139 }, + { 0x7E2C, 52454 }, + { 0x7E2D, 12120 }, + { 0x7E2E, 52435 }, + { 0x7E2F, 12125 }, + { 0x7E30, 52440 }, + { 0x7E31, 12148 }, + { 0x7E32, 52463 }, + { 0x7E33, 52468 }, + { 0x7E34, 52473 }, + { 0x7E35, 52478 }, + { 0x7E36, 16186 }, + { 0x7E37, 12099 }, + { 0x7E38, 12104 }, + { 0x7E39, 143669 }, + { 0x7E3A, 143966 }, + { 0x7E3B, 41468 }, + { 0x7E3C, 137717 }, + { 0x7E3D, 143646 }, + { 0x7E3E, 124387 }, + { 0x7E3F, 124389 }, + { 0x7E40, 124391 }, + { 0x7E41, 40327 }, + { 0x7E42, 36664 }, + { 0x7E43, 124384 }, + { 0x7E44, 42529 }, + { 0x7E45, 36680 }, + { 0x7E46, 26773 }, + { 0x7E47, 43881 }, + { 0x7E48, 12159 }, + { 0x7E49, 54981 }, + { 0x7E4A, 5792 }, + { 0x7E4B, 5813 }, + { 0x7E4C, 14658 }, + { 0x7E4D, 40357 }, + { 0x7E4E, 14699 }, + { 0x7E4F, 40372 }, + { 0x7E50, 131649 }, + { 0x7E51, 14717 }, + { 0x7E52, 40381 }, + { 0x7E53, 131654 }, + { 0x7E54, 36703 }, + { 0x7E55, 42561 }, + { 0x7E56, 111371 }, + { 0x7E57, 5614 }, + { 0x7E58, 5640 }, + { 0x7E59, 5607 }, + { 0x7E5A, 5633 }, + { 0x7E5B, 28577 }, + { 0x7E5C, 28583 }, + { 0x7E5D, 28613 }, + { 0x7E5E, 28589 }, + { 0x7E5F, 28425 }, + { 0x7E60, 28685 }, + { 0x7E61, 28689 }, + { 0x7E62, 28561 }, + { 0x7E63, 28703 }, + { 0x7E64, 28555 }, + { 0x7E65, 28595 }, + { 0x7E66, 28544 }, + { 0x7E67, 28607 }, + { 0x7E68, 28601 }, + { 0x7E69, 28448 }, + { 0x7E6A, 28430 }, + { 0x7E6B, 28736 }, + { 0x7E6C, 28730 }, + { 0x7E6D, 28709 }, + { 0x7E6E, 28549 }, + { 0x7E6F, 28477 }, + { 0x7E70, 28618 }, + { 0x7E71, 28461 }, + { 0x7E72, 28569 }, + { 0x7E73, 28624 }, + { 0x7E74, 28630 }, + { 0x7E75, 28636 }, + { 0x7E76, 28644 }, + { 0x7E77, 28441 }, + { 0x7E78, 28504 }, + { 0x7E79, 28721 }, + { 0x7E7A, 28434 }, + { 0x7E7B, 28455 }, + { 0x7E7C, 28715 }, + { 0x7E7D, 28539 }, + { 0x7E7E, 28492 }, + { 0x7E7F, 28486 }, + { 0x7E80, 28498 }, + { 0x7E81, 28696 }, + { 0x7E82, 28663 }, + { 0x7E83, 28469 }, + { 0x7E84, 28513 }, + { 0x7E85, 28527 }, + { 0x7E86, 28519 }, + { 0x7E87, 28533 }, + { 0x7E88, 28681 }, + { 0x7E89, 28753 }, + { 0x7E8A, 28659 }, + { 0x7E8B, 28677 }, + { 0x7E8C, 28745 }, + { 0x7E8D, 28749 }, + { 0x7E8E, 28655 }, + { 0x7E8F, 28673 }, + { 0x7E90, 28651 }, + { 0x7E91, 28669 }, + { 0x7E92, 127953 }, + { 0x7E93, 127956 }, + { 0x7E94, 127983 }, + { 0x7E95, 127959 }, + { 0x7E96, 127986 }, + { 0x7E97, 127998 }, + { 0x7E98, 128046 }, + { 0x7E99, 127962 }, + { 0x7E9A, 127989 }, + { 0x7E9B, 128001 }, + { 0x7E9C, 128049 }, + { 0x7E9D, 128010 }, + { 0x7E9E, 128058 }, + { 0x7E9F, 128076 }, + { 0x7EA0, 128118 }, + { 0x7EA1, 127965 }, + { 0x7EA2, 127992 }, + { 0x7EA3, 128004 }, + { 0x7EA4, 128052 }, + { 0x7EA5, 128013 }, + { 0x7EA6, 128061 }, + { 0x7EA7, 128079 }, + { 0x7EA8, 128121 }, + { 0x7EA9, 128019 }, + { 0x7EAA, 128067 }, + { 0x7EAB, 128085 }, + { 0x7EAC, 128127 }, + { 0x7EAD, 128094 }, + { 0x7EAE, 128136 }, + { 0x7EAF, 128148 }, + { 0x7EB0, 128166 }, + { 0x7EB1, 127968 }, + { 0x7EB2, 127995 }, + { 0x7EB3, 128007 }, + { 0x7EB4, 128055 }, + { 0x7EB5, 128016 }, + { 0x7EB6, 128064 }, + { 0x7EB7, 128082 }, + { 0x7EB8, 128124 }, + { 0x7EB9, 128022 }, + { 0x7EBA, 128070 }, + { 0x7EBB, 128088 }, + { 0x7EBC, 128130 }, + { 0x7EBD, 128097 }, + { 0x7EBE, 128139 }, + { 0x7EBF, 128151 }, + { 0x7EC0, 128169 }, + { 0x7EC1, 128025 }, + { 0x7EC2, 128073 }, + { 0x7EC3, 128091 }, + { 0x7EC4, 128133 }, + { 0x7EC5, 128100 }, + { 0x7EC6, 128142 }, + { 0x7EC7, 128154 }, + { 0x7EC8, 128172 }, + { 0x7EC9, 128103 }, + { 0x7ECA, 128145 }, + { 0x7ECB, 128157 }, + { 0x7ECC, 128175 }, + { 0x7ECD, 128160 }, + { 0x7ECE, 128178 }, + { 0x7ECF, 128181 }, + { 0x7ED0, 128184 }, + { 0x7ED1, 42583 }, + { 0x7ED2, 43038 }, + { 0x7ED3, 43049 }, + { 0x7ED4, 42797 }, + { 0x7ED5, 43060 }, + { 0x7ED6, 43082 }, + { 0x7ED7, 43089 }, + { 0x7ED8, 43071 }, + { 0x7ED9, 37221 }, + { 0x7EDA, 37243 }, + { 0x7EDB, 37250 }, + { 0x7EDC, 37232 }, + { 0x7EDD, 36711 }, + { 0x7EDE, 37199 }, + { 0x7EDF, 37210 }, + { 0x7EE0, 36936 }, + { 0x7EE1, 40345 }, + { 0x7EE2, 40499 }, + { 0x7EE3, 14873 }, + { 0x7EE4, 14646 }, + { 0x7EE5, 36671 }, + { 0x7EE6, 37176 }, + { 0x7EE7, 43015 }, + { 0x7EE8, 42511 }, + { 0x7EE9, 14652 }, + { 0x7EEA, 14880 }, + { 0x7EEB, 40506 }, + { 0x7EEC, 40351 }, + { 0x7EED, 42534 }, + { 0x7EEE, 43026 }, + { 0x7EEF, 37187 }, + { 0x7EF0, 36685 }, + { 0x7EF1, 131691 }, + { 0x7EF2, 74221 }, + { 0x7EF3, 9608 }, + { 0x7EF4, 21295 }, + { 0x7EF5, 112435 }, + { 0x7EF6, 112301 }, + { 0x7EF7, 112343 }, + { 0x7EF8, 112453 }, + { 0x7EF9, 112317 }, + { 0x7EFA, 112368 }, + { 0x7EFB, 112263 }, + { 0x7EFC, 112498 }, + { 0x7EFD, 112410 }, + { 0x7EFE, 112245 }, + { 0x7EFF, 112482 }, + { 0x7F00, 112394 }, + { 0x7F01, 112444 }, + { 0x7F02, 112309 }, + { 0x7F03, 112349 }, + { 0x7F04, 112460 }, + { 0x7F05, 112323 }, + { 0x7F06, 112374 }, + { 0x7F07, 112270 }, + { 0x7F08, 112504 }, + { 0x7F09, 112416 }, + { 0x7F0A, 112254 }, + { 0x7F0B, 112490 }, + { 0x7F0C, 112402 }, + { 0x7F0D, 112337 }, + { 0x7F0E, 112238 }, + { 0x7F0F, 112519 }, + { 0x7F10, 112476 }, + { 0x7F11, 112510 }, + { 0x7F12, 112388 }, + { 0x7F13, 112277 }, + { 0x7F14, 112467 }, + { 0x7F15, 112283 }, + { 0x7F16, 112234 }, + { 0x7F17, 112329 }, + { 0x7F18, 112525 }, + { 0x7F19, 112422 }, + { 0x7F1A, 112384 }, + { 0x7F1B, 112542 }, + { 0x7F1C, 112297 }, + { 0x7F1D, 112472 }, + { 0x7F1E, 112364 }, + { 0x7F1F, 112355 }, + { 0x7F20, 112333 }, + { 0x7F21, 112515 }, + { 0x7F22, 112291 }, + { 0x7F23, 112582 }, + { 0x7F24, 112576 }, + { 0x7F25, 112588 }, + { 0x7F26, 112546 }, + { 0x7F27, 112565 }, + { 0x7F28, 112533 }, + { 0x7F29, 112554 }, + { 0x7F2A, 112558 }, + { 0x7F2B, 112426 }, + { 0x7F2C, 112430 }, + { 0x7F2D, 112529 }, + { 0x7F2E, 112537 }, + { 0x7F2F, 112380 }, + { 0x7F30, 112550 }, + { 0x7F31, 112594 }, + { 0x7F32, 112359 }, + { 0x7F33, 112287 }, + { 0x7F34, 112570 }, + { 0x7F35, 112221 }, + { 0x7F36, 112225 }, + { 0x7F37, 112229 }, + { 0x7F38, 112217 }, + { 0x7F39, 112213 }, + { 0x7F3A, 111727 }, + { 0x7F3B, 111730 }, + { 0x7F3C, 112043 }, + { 0x7F3D, 111710 }, + { 0x7F3E, 111773 }, + { 0x7F3F, 112100 }, + { 0x7F40, 112050 }, + { 0x7F41, 112053 }, + { 0x7F42, 112123 }, + { 0x7F43, 112126 }, + { 0x7F44, 112058 }, + { 0x7F45, 112200 }, + { 0x7F46, 111766 }, + { 0x7F47, 112197 }, + { 0x7F48, 112103 }, + { 0x7F49, 112107 }, + { 0x7F4A, 112115 }, + { 0x7F4B, 112111 }, + { 0x7F4C, 112119 }, + { 0x7F4D, 112064 }, + { 0x7F4E, 112072 }, + { 0x7F4F, 112068 }, + { 0x7F50, 112096 }, + { 0x7F51, 112076 }, + { 0x7F52, 112086 }, + { 0x7F53, 112081 }, + { 0x7F54, 112091 }, + { 0x7F55, 111769 }, + { 0x7F56, 112046 }, + { 0x7F57, 112040 }, + { 0x7F58, 112031 }, + { 0x7F59, 112028 }, + { 0x7F5A, 112203 }, + { 0x7F5B, 112138 }, + { 0x7F5C, 112134 }, + { 0x7F5D, 112152 }, + { 0x7F5E, 112130 }, + { 0x7F5F, 112209 }, + { 0x7F60, 112147 }, + { 0x7F61, 112176 }, + { 0x7F62, 112142 }, + { 0x7F63, 112156 }, + { 0x7F64, 112161 }, + { 0x7F65, 112171 }, + { 0x7F66, 112166 }, + { 0x7F67, 112180 }, + { 0x7F68, 112188 }, + { 0x7F69, 112193 }, + { 0x7F6A, 112183 }, + { 0x7F6B, 111734 }, + { 0x7F6C, 111715 }, + { 0x7F6D, 111721 }, + { 0x7F6E, 111776 }, + { 0x7F6F, 112037 }, + { 0x7F70, 111801 }, + { 0x7F71, 111827 }, + { 0x7F72, 111815 }, + { 0x7F73, 111832 }, + { 0x7F74, 111820 }, + { 0x7F75, 111846 }, + { 0x7F76, 111850 }, + { 0x7F77, 111804 }, + { 0x7F78, 111809 }, + { 0x7F79, 111839 }, + { 0x7F7A, 112206 }, + { 0x7F7B, 111856 }, + { 0x7F7C, 111876 }, + { 0x7F7D, 111978 }, + { 0x7F7E, 111943 }, + { 0x7F7F, 111956 }, + { 0x7F80, 111880 }, + { 0x7F81, 111982 }, + { 0x7F82, 112007 }, + { 0x7F83, 112024 }, + { 0x7F84, 111860 }, + { 0x7F85, 111947 }, + { 0x7F86, 112020 }, + { 0x7F87, 112011 }, + { 0x7F88, 111951 }, + { 0x7F89, 112015 }, + { 0x7F8A, 111869 }, + { 0x7F8B, 111971 }, + { 0x7F8C, 111865 }, + { 0x7F8D, 111960 }, + { 0x7F8E, 111964 }, + { 0x7F8F, 111990 }, + { 0x7F90, 111994 }, + { 0x7F91, 111779 }, + { 0x7F92, 111782 }, + { 0x7F93, 111786 }, + { 0x7F94, 111790 }, + { 0x7F95, 111794 }, + { 0x7F96, 111986 }, + { 0x7F97, 111999 }, + { 0x7F98, 112003 }, + { 0x7F99, 111740 }, + { 0x7F9A, 111743 }, + { 0x7F9B, 111762 }, + { 0x7F9C, 111747 }, + { 0x7F9D, 111752 }, + { 0x7F9E, 111757 }, + { 0x7F9F, 111884 }, + { 0x7FA0, 111906 }, + { 0x7FA1, 111898 }, + { 0x7FA2, 111924 }, + { 0x7FA3, 111893 }, + { 0x7FA4, 111911 }, + { 0x7FA5, 111916 }, + { 0x7FA6, 111932 }, + { 0x7FA7, 111937 }, + { 0x7FA8, 111888 }, + { 0x7FA9, 112034 }, + { 0x7FAA, 111798 }, + { 0x7FAB, 111718 }, + { 0x7FAC, 111737 }, + { 0x7FAD, 111724 }, + { 0x7FAE, 114848 }, + { 0x7FAF, 114882 }, + { 0x7FB0, 115875 }, + { 0x7FB1, 114843 }, + { 0x7FB2, 114838 }, + { 0x7FB3, 115219 }, + { 0x7FB4, 115214 }, + { 0x7FB5, 115514 }, + { 0x7FB6, 115780 }, + { 0x7FB7, 115861 }, + { 0x7FB8, 115788 }, + { 0x7FB9, 115792 }, + { 0x7FBA, 115531 }, + { 0x7FBB, 114796 }, + { 0x7FBC, 114705 }, + { 0x7FBD, 115201 }, + { 0x7FBE, 115730 }, + { 0x7FBF, 115813 }, + { 0x7FC0, 115822 }, + { 0x7FC1, 115406 }, + { 0x7FC2, 114869 }, + { 0x7FC3, 115160 }, + { 0x7FC4, 115078 }, + { 0x7FC5, 115184 }, + { 0x7FC6, 115441 }, + { 0x7FC7, 114873 }, + { 0x7FC8, 114719 }, + { 0x7FC9, 115337 }, + { 0x7FCA, 115752 }, + { 0x7FCB, 115629 }, + { 0x7FCC, 115616 }, + { 0x7FCD, 115385 }, + { 0x7FCE, 115169 }, + { 0x7FCF, 115418 }, + { 0x7FD0, 115432 }, + { 0x7FD1, 115437 }, + { 0x7FD2, 115106 }, + { 0x7FD3, 114852 }, + { 0x7FD4, 115179 }, + { 0x7FD5, 115414 }, + { 0x7FD6, 115889 }, + { 0x7FD7, 115188 }, + { 0x7FD8, 115401 }, + { 0x7FD9, 115395 }, + { 0x7FDA, 115766 }, + { 0x7FDB, 114860 }, + { 0x7FDC, 114829 }, + { 0x7FDD, 114701 }, + { 0x7FDE, 114734 }, + { 0x7FDF, 115410 }, + { 0x7FE0, 115757 }, + { 0x7FE1, 114790 }, + { 0x7FE2, 114994 }, + { 0x7FE3, 115722 }, + { 0x7FE4, 115693 }, + { 0x7FE5, 115101 }, + { 0x7FE6, 115620 }, + { 0x7FE7, 115771 }, + { 0x7FE8, 115518 }, + { 0x7FE9, 115450 }, + { 0x7FEA, 115377 }, + { 0x7FEB, 115856 }, + { 0x7FEC, 115870 }, + { 0x7FED, 115315 }, + { 0x7FEE, 114724 }, + { 0x7FEF, 115369 }, + { 0x7FF0, 115522 }, + { 0x7FF1, 115688 }, + { 0x7FF2, 115897 }, + { 0x7FF3, 115893 }, + { 0x7FF4, 114714 }, + { 0x7FF5, 115155 }, + { 0x7FF6, 114833 }, + { 0x7FF7, 115373 }, + { 0x7FF8, 115527 }, + { 0x7FF9, 115929 }, + { 0x7FFA, 115921 }, + { 0x7FFB, 115624 }, + { 0x7FFC, 115734 }, + { 0x7FFD, 115319 }, + { 0x7FFE, 115257 }, + { 0x7FFF, 115817 }, + { 0x8000, 115807 }, + { 0x8001, 115423 }, + { 0x8002, 115925 }, + { 0x8003, 115304 }, + { 0x8004, 115296 }, + { 0x8005, 115150 }, + { 0x8006, 115209 }, + { 0x8007, 115174 }, + { 0x8008, 115775 }, + { 0x8009, 115165 }, + { 0x800A, 115797 }, + { 0x800B, 115365 }, + { 0x800C, 115865 }, + { 0x800D, 115851 }, + { 0x800E, 114924 }, + { 0x800F, 115361 }, + { 0x8010, 115917 }, + { 0x8011, 115683 }, + { 0x8012, 115827 }, + { 0x8013, 115390 }, + { 0x8014, 114856 }, + { 0x8015, 115445 }, + { 0x8016, 115506 }, + { 0x8017, 115192 }, + { 0x8018, 114877 }, + { 0x8019, 115941 }, + { 0x801A, 115933 }, + { 0x801B, 115909 }, + { 0x801C, 115945 }, + { 0x801D, 115949 }, + { 0x801E, 115913 }, + { 0x801F, 115937 }, + { 0x8020, 115905 }, + { 0x8021, 115901 }, + { 0x8022, 114929 }, + { 0x8023, 115761 }, + { 0x8024, 115879 }, + { 0x8025, 115884 }, + { 0x8026, 114864 }, + { 0x8027, 114728 }, + { 0x8028, 115726 }, + { 0x8029, 115703 }, + { 0x802A, 114743 }, + { 0x802B, 114738 }, + { 0x802C, 115381 }, + { 0x802D, 115110 }, + { 0x802E, 114824 }, + { 0x802F, 115356 }, + { 0x8030, 115351 }, + { 0x8031, 115346 }, + { 0x8032, 115427 }, + { 0x8033, 114710 }, + { 0x8034, 114820 }, + { 0x8035, 115205 }, + { 0x8036, 115679 }, + { 0x8037, 115342 }, + { 0x8038, 115126 }, + { 0x8039, 115120 }, + { 0x803A, 115132 }, + { 0x803B, 115144 }, + { 0x803C, 115138 }, + { 0x803D, 115066 }, + { 0x803E, 115089 }, + { 0x803F, 115083 }, + { 0x8040, 115477 }, + { 0x8041, 115494 }, + { 0x8042, 115487 }, + { 0x8043, 115481 }, + { 0x8044, 115784 }, + { 0x8045, 114801 }, + { 0x8046, 115843 }, + { 0x8047, 115300 }, + { 0x8048, 114758 }, + { 0x8049, 114780 }, + { 0x804A, 114748 }, + { 0x804B, 114775 }, + { 0x804C, 114753 }, + { 0x804D, 114770 }, + { 0x804E, 114785 }, + { 0x804F, 114764 }, + { 0x8050, 115555 }, + { 0x8051, 115535 }, + { 0x8052, 115586 }, + { 0x8053, 115542 }, + { 0x8054, 115561 }, + { 0x8055, 115605 }, + { 0x8056, 115592 }, + { 0x8057, 115598 }, + { 0x8058, 115567 }, + { 0x8059, 115573 }, + { 0x805A, 115095 }, + { 0x805B, 115801 }, + { 0x805C, 115717 }, + { 0x805D, 115712 }, + { 0x805E, 115707 }, + { 0x805F, 115549 }, + { 0x8060, 115610 }, + { 0x8061, 115579 }, + { 0x8062, 115831 }, + { 0x8063, 115837 }, + { 0x8064, 115308 }, + { 0x8065, 115510 }, + { 0x8066, 115847 }, + { 0x8067, 114999 }, + { 0x8068, 115032 }, + { 0x8069, 115044 }, + { 0x806A, 114948 }, + { 0x806B, 115006 }, + { 0x806C, 114987 }, + { 0x806D, 115012 }, + { 0x806E, 115038 }, + { 0x806F, 115025 }, + { 0x8070, 115018 }, + { 0x8071, 114959 }, + { 0x8072, 114966 }, + { 0x8073, 114934 }, + { 0x8074, 114980 }, + { 0x8075, 114954 }, + { 0x8076, 114805 }, + { 0x8077, 114810 }, + { 0x8078, 114815 }, + { 0x8079, 114941 }, + { 0x807A, 115050 }, + { 0x807B, 115252 }, + { 0x807C, 114914 }, + { 0x807D, 114919 }, + { 0x807E, 114886 }, + { 0x807F, 114907 }, + { 0x8080, 114893 }, + { 0x8081, 114900 }, + { 0x8082, 115224 }, + { 0x8083, 115245 }, + { 0x8084, 115231 }, + { 0x8085, 115238 }, + { 0x8086, 115056 }, + { 0x8087, 115061 }, + { 0x8088, 115455 }, + { 0x8089, 115461 }, + { 0x808A, 115467 }, + { 0x808B, 115472 }, + { 0x808C, 115656 }, + { 0x808D, 115661 }, + { 0x808E, 115667 }, + { 0x808F, 115673 }, + { 0x8090, 115633 }, + { 0x8091, 115638 }, + { 0x8092, 115644 }, + { 0x8093, 115650 }, + { 0x8094, 115501 }, + { 0x8095, 115698 }, + { 0x8096, 115197 }, + { 0x8097, 115281 }, + { 0x8098, 115291 }, + { 0x8099, 115266 }, + { 0x809A, 115261 }, + { 0x809B, 115271 }, + { 0x809C, 115286 }, + { 0x809D, 115276 }, + { 0x809E, 115746 }, + { 0x809F, 115331 }, + { 0x80A0, 115740 }, + { 0x80A1, 115325 }, + { 0x80A2, 115115 }, + { 0x80A3, 115072 }, + { 0x80A4, 75792 }, + { 0x80A5, 75690 }, + { 0x80A6, 75567 }, + { 0x80A7, 75925 }, + { 0x80A8, 75674 }, + { 0x80A9, 75636 }, + { 0x80AA, 75497 }, + { 0x80AB, 75620 }, + { 0x80AC, 75788 }, + { 0x80AD, 75409 }, + { 0x80AE, 75398 }, + { 0x80AF, 75625 }, + { 0x80B0, 75450 }, + { 0x80B1, 76006 }, + { 0x80B2, 76010 }, + { 0x80B3, 76014 }, + { 0x80B4, 75889 }, + { 0x80B5, 75892 }, + { 0x80B6, 75651 }, + { 0x80B7, 75876 }, + { 0x80B8, 75558 }, + { 0x80B9, 75873 }, + { 0x80BA, 75958 }, + { 0x80BB, 76091 }, + { 0x80BC, 76309 }, + { 0x80BD, 76229 }, + { 0x80BE, 76225 }, + { 0x80BF, 76018 }, + { 0x80C0, 76305 }, + { 0x80C1, 76316 }, + { 0x80C2, 75375 }, + { 0x80C3, 75379 }, + { 0x80C4, 75385 }, + { 0x80C5, 75355 }, + { 0x80C6, 75359 }, + { 0x80C7, 75363 }, + { 0x80C8, 75369 }, + { 0x80C9, 75460 }, + { 0x80CA, 75464 }, + { 0x80CB, 75949 }, + { 0x80CC, 75686 }, + { 0x80CD, 75682 }, + { 0x80CE, 75468 }, + { 0x80CF, 75472 }, + { 0x80D0, 75896 }, + { 0x80D1, 75900 }, + { 0x80D2, 75628 }, + { 0x80D3, 75632 }, + { 0x80D4, 75920 }, + { 0x80D5, 75915 }, + { 0x80D6, 75670 }, + { 0x80D7, 75405 }, + { 0x80D8, 75780 }, + { 0x80D9, 75784 }, + { 0x80DA, 76333 }, + { 0x80DB, 76337 }, + { 0x80DC, 75604 }, + { 0x80DD, 75647 }, + { 0x80DE, 75488 }, + { 0x80DF, 75911 }, + { 0x80E0, 75698 }, + { 0x80E1, 76269 }, + { 0x80E2, 76353 }, + { 0x80E3, 76345 }, + { 0x80E4, 75440 }, + { 0x80E5, 75391 }, + { 0x80E6, 75516 }, + { 0x80E7, 75662 }, + { 0x80E8, 75805 }, + { 0x80E9, 75800 }, + { 0x80EA, 76049 }, + { 0x80EB, 76029 }, + { 0x80EC, 76073 }, + { 0x80ED, 76067 }, + { 0x80EE, 76085 }, + { 0x80EF, 76079 }, + { 0x80F0, 76061 }, + { 0x80F1, 76055 }, + { 0x80F2, 76042 }, + { 0x80F3, 76035 }, + { 0x80F4, 75507 }, + { 0x80F5, 75502 }, + { 0x80F6, 76363 }, + { 0x80F7, 76357 }, + { 0x80F8, 76326 }, + { 0x80F9, 75534 }, + { 0x80FA, 75954 }, + { 0x80FB, 75512 }, + { 0x80FC, 75884 }, + { 0x80FD, 75879 }, + { 0x80FE, 75561 }, + { 0x80FF, 75643 }, + { 0x8100, 75484 }, + { 0x8101, 75907 }, + { 0x8102, 75694 }, + { 0x8103, 76265 }, + { 0x8104, 76349 }, + { 0x8105, 76341 }, + { 0x8106, 75434 }, + { 0x8107, 76126 }, + { 0x8108, 76205 }, + { 0x8109, 76188 }, + { 0x810A, 76192 }, + { 0x810B, 76196 }, + { 0x810C, 75933 }, + { 0x810D, 75937 }, + { 0x810E, 75941 }, + { 0x810F, 76200 }, + { 0x8110, 76147 }, + { 0x8111, 76151 }, + { 0x8112, 76155 }, + { 0x8113, 76159 }, + { 0x8114, 76163 }, + { 0x8115, 75546 }, + { 0x8116, 75422 }, + { 0x8117, 75542 }, + { 0x8118, 75418 }, + { 0x8119, 75550 }, + { 0x811A, 75426 }, + { 0x811B, 75554 }, + { 0x811C, 75430 }, + { 0x811D, 76138 }, + { 0x811E, 76184 }, + { 0x811F, 76167 }, + { 0x8120, 76210 }, + { 0x8121, 76176 }, + { 0x8122, 76218 }, + { 0x8123, 76214 }, + { 0x8124, 76130 }, + { 0x8125, 76273 }, + { 0x8126, 76277 }, + { 0x8127, 76108 }, + { 0x8128, 76100 }, + { 0x8129, 76117 }, + { 0x812A, 76134 }, + { 0x812B, 76104 }, + { 0x812C, 76142 }, + { 0x812D, 76171 }, + { 0x812E, 76330 }, + { 0x812F, 75810 }, + { 0x8130, 75395 }, + { 0x8131, 75617 }, + { 0x8132, 75601 }, + { 0x8133, 75571 }, + { 0x8134, 76222 }, + { 0x8135, 76313 }, + { 0x8136, 75580 }, + { 0x8137, 75574 }, + { 0x8138, 75402 }, + { 0x8139, 75523 }, + { 0x813A, 75945 }, + { 0x813B, 75530 }, + { 0x813C, 75526 }, + { 0x813D, 75962 }, + { 0x813E, 75966 }, + { 0x813F, 75970 }, + { 0x8140, 75974 }, + { 0x8141, 75978 }, + { 0x8142, 75982 }, + { 0x8143, 75986 }, + { 0x8144, 75990 }, + { 0x8145, 75994 }, + { 0x8146, 75998 }, + { 0x8147, 76002 }, + { 0x8148, 76320 }, + { 0x8149, 76323 }, + { 0x814A, 75413 }, + { 0x814B, 75678 }, + { 0x814C, 76112 }, + { 0x814D, 76095 }, + { 0x814E, 76180 }, + { 0x814F, 76121 }, + { 0x8150, 75613 }, + { 0x8151, 75608 }, + { 0x8152, 75492 }, + { 0x8153, 76233 }, + { 0x8154, 76237 }, + { 0x8155, 75538 }, + { 0x8156, 75453 }, + { 0x8157, 75456 }, + { 0x8158, 75766 }, + { 0x8159, 75588 }, + { 0x815A, 75655 }, + { 0x815B, 76289 }, + { 0x815C, 76285 }, + { 0x815D, 75769 }, + { 0x815E, 75776 }, + { 0x815F, 76301 }, + { 0x8160, 76297 }, + { 0x8161, 75480 }, + { 0x8162, 75476 }, + { 0x8163, 75591 }, + { 0x8164, 75596 }, + { 0x8165, 75658 }, + { 0x8166, 76281 }, + { 0x8167, 75772 }, + { 0x8168, 76293 }, + { 0x8169, 75813 }, + { 0x816A, 75828 }, + { 0x816B, 75820 }, + { 0x816C, 75835 }, + { 0x816D, 75842 }, + { 0x816E, 75849 }, + { 0x816F, 75857 }, + { 0x8170, 75865 }, + { 0x8171, 75564 }, + { 0x8172, 76241 }, + { 0x8173, 76246 }, + { 0x8174, 75796 }, + { 0x8175, 75640 }, + { 0x8176, 75904 }, + { 0x8177, 75667 }, + { 0x8178, 76258 }, + { 0x8179, 75930 }, + { 0x817A, 76022 }, + { 0x817B, 76251 }, + { 0x817C, 76254 }, + { 0x817D, 76261 }, + { 0x817E, 76025 }, + { 0x817F, 75446 }, + { 0x8180, 75702 }, + { 0x8181, 75707 }, + { 0x8182, 75723 }, + { 0x8183, 75761 }, + { 0x8184, 75728 }, + { 0x8185, 75718 }, + { 0x8186, 75754 }, + { 0x8187, 75747 }, + { 0x8188, 75740 }, + { 0x8189, 75733 }, + { 0x818A, 75713 }, + { 0x818B, 75520 }, + { 0x818C, 75585 }, + { 0x818D, 24892 }, + { 0x818E, 24896 }, + { 0x818F, 24900 }, + { 0x8190, 24904 }, + { 0x8191, 24908 }, + { 0x8192, 24912 }, + { 0x8193, 24916 }, + { 0x8194, 24920 }, + { 0x8195, 24924 }, + { 0x8196, 24928 }, + { 0x8197, 24932 }, + { 0x8198, 24936 }, + { 0x8199, 24940 }, + { 0x819A, 24944 }, + { 0x819B, 24948 }, + { 0x819C, 24952 }, + { 0x819D, 24956 }, + { 0x819E, 24960 }, + { 0x819F, 24964 }, + { 0x81A0, 24968 }, + { 0x81A1, 24972 }, + { 0x81A2, 24976 }, + { 0x81A3, 24980 }, + { 0x81A4, 24984 }, + { 0x81A5, 24988 }, + { 0x81A6, 24992 }, + { 0x81A7, 24996 }, + { 0x81A8, 25000 }, + { 0x81A9, 25004 }, + { 0x81AA, 26383 }, + { 0x81AB, 26387 }, + { 0x81AC, 26391 }, + { 0x81AD, 26395 }, + { 0x81AE, 26399 }, + { 0x81AF, 26403 }, + { 0x81B0, 26407 }, + { 0x81B1, 26411 }, + { 0x81B2, 26415 }, + { 0x81B3, 26419 }, + { 0x81B4, 26423 }, + { 0x81B5, 26427 }, + { 0x81B6, 26431 }, + { 0x81B7, 26435 }, + { 0x81B8, 26439 }, + { 0x81B9, 26443 }, + { 0x81BA, 26447 }, + { 0x81BB, 26451 }, + { 0x81BC, 26455 }, + { 0x81BD, 26459 }, + { 0x81BE, 26463 }, + { 0x81BF, 26467 }, + { 0x81C0, 26471 }, + { 0x81C1, 26475 }, + { 0x81C2, 26479 }, + { 0x81C3, 26483 }, + { 0x81C4, 26487 }, + { 0x81C5, 26491 }, + { 0x81C6, 26495 }, + { 0x81C7, 26499 }, + { 0x81C8, 26503 }, + { 0x81C9, 26507 }, + { 0x81CA, 26511 }, + { 0x81CB, 26515 }, + { 0x81CC, 26519 }, + { 0x81CD, 26523 }, + { 0x81CE, 26527 }, + { 0x81CF, 116494 }, + { 0x81D0, 116502 }, + { 0x81D1, 116498 }, + { 0x81D2, 26034 }, + { 0x81D3, 105909 }, + { 0x81D4, 105888 }, + { 0x81D5, 105897 }, + { 0x81D6, 105918 }, + { 0x81D7, 105903 }, + { 0x81D8, 105900 }, + { 0x81D9, 105891 }, + { 0x81DA, 105915 }, + { 0x81DB, 105912 }, + { 0x81DC, 105906 }, + { 0x81DD, 105894 }, + { 0x81DE, 105921 }, + { 0x81DF, 105924 }, + { 0x81E0, 105942 }, + { 0x81E1, 105936 }, + { 0x81E2, 105927 }, + { 0x81E3, 105930 }, + { 0x81E4, 105945 }, + { 0x81E5, 105933 }, + { 0x81E6, 105939 }, + { 0x81E7, 37299 }, + { 0x81E8, 37278 }, + { 0x81E9, 37287 }, + { 0x81EA, 37308 }, + { 0x81EB, 37293 }, + { 0x81EC, 37290 }, + { 0x81ED, 37281 }, + { 0x81EE, 37305 }, + { 0x81EF, 37302 }, + { 0x81F0, 37296 }, + { 0x81F1, 37284 }, + { 0x81F2, 37311 }, + { 0x81F3, 37314 }, + { 0x81F4, 37332 }, + { 0x81F5, 37326 }, + { 0x81F6, 37317 }, + { 0x81F7, 37320 }, + { 0x81F8, 37335 }, + { 0x81F9, 37323 }, + { 0x81FA, 37329 }, + { 0x81FB, 108852 }, + { 0x81FC, 54333 }, + { 0x81FD, 54305 }, + { 0x81FE, 54321 }, + { 0x81FF, 54317 }, + { 0x8200, 54302 }, + { 0x8201, 128588 }, + { 0x8202, 128555 }, + { 0x8203, 128570 }, + { 0x8204, 128616 }, + { 0x8205, 128635 }, + { 0x8206, 128760 }, + { 0x8207, 128585 }, + { 0x8208, 128751 }, + { 0x8209, 128689 }, + { 0x820A, 128787 }, + { 0x820B, 128742 }, + { 0x820C, 128784 }, + { 0x820D, 128672 }, + { 0x820E, 128769 }, + { 0x820F, 128573 }, + { 0x8210, 128622 }, + { 0x8211, 128631 }, + { 0x8212, 128660 }, + { 0x8213, 128708 }, + { 0x8214, 128613 }, + { 0x8215, 128654 }, + { 0x8216, 128754 }, + { 0x8217, 128552 }, + { 0x8218, 128540 }, + { 0x8219, 128739 }, + { 0x821A, 128705 }, + { 0x821B, 128598 }, + { 0x821C, 128591 }, + { 0x821D, 128775 }, + { 0x821E, 128548 }, + { 0x821F, 128648 }, + { 0x8220, 128604 }, + { 0x8221, 128693 }, + { 0x8222, 128639 }, + { 0x8223, 128714 }, + { 0x8224, 128681 }, + { 0x8225, 128607 }, + { 0x8226, 128666 }, + { 0x8227, 128727 }, + { 0x8228, 128543 }, + { 0x8229, 128675 }, + { 0x822A, 128562 }, + { 0x822B, 128745 }, + { 0x822C, 128576 }, + { 0x822D, 128721 }, + { 0x822E, 128763 }, + { 0x822F, 128651 }, + { 0x8230, 128610 }, + { 0x8231, 128601 }, + { 0x8232, 128684 }, + { 0x8233, 128696 }, + { 0x8234, 128645 }, + { 0x8235, 128663 }, + { 0x8236, 128579 }, + { 0x8237, 128781 }, + { 0x8238, 128594 }, + { 0x8239, 128766 }, + { 0x823A, 128717 }, + { 0x823B, 128642 }, + { 0x823C, 128772 }, + { 0x823D, 128792 }, + { 0x823E, 128559 }, + { 0x823F, 128582 }, + { 0x8240, 128657 }, + { 0x8241, 128567 }, + { 0x8242, 128702 }, + { 0x8243, 128699 }, + { 0x8244, 128625 }, + { 0x8245, 128748 }, + { 0x8246, 128730 }, + { 0x8247, 128678 }, + { 0x8248, 128669 }, + { 0x8249, 128733 }, + { 0x824A, 128619 }, + { 0x824B, 128628 }, + { 0x824C, 128757 }, + { 0x824D, 128736 }, + { 0x824E, 128535 }, + { 0x824F, 128778 }, + { 0x8250, 128724 }, + { 0x8251, 128711 }, + { 0x8252, 87596 }, + { 0x8253, 87606 }, + { 0x8254, 87636 }, + { 0x8255, 87616 }, + { 0x8256, 87611 }, + { 0x8257, 87601 }, + { 0x8258, 87631 }, + { 0x8259, 87626 }, + { 0x825A, 87621 }, + { 0x825B, 87551 }, + { 0x825C, 87561 }, + { 0x825D, 87591 }, + { 0x825E, 87571 }, + { 0x825F, 87566 }, + { 0x8260, 87556 }, + { 0x8261, 87586 }, + { 0x8262, 87581 }, + { 0x8263, 87576 }, + { 0x8264, 133231 }, + { 0x8265, 133235 }, + { 0x8266, 133247 }, + { 0x8267, 133243 }, + { 0x8268, 133239 }, + { 0x8269, 41892 }, + { 0x826A, 41895 }, + { 0x826B, 139644 }, + { 0x826C, 139648 }, + { 0x826D, 139652 }, + { 0x826E, 139656 }, + { 0x826F, 139660 }, + { 0x8270, 139664 }, + { 0x8271, 139668 }, + { 0x8272, 139672 }, + { 0x8273, 139676 }, + { 0x8274, 139680 }, + { 0x8275, 139684 }, + { 0x8276, 139688 }, + { 0x8277, 139692 }, + { 0x8278, 139696 }, + { 0x8279, 139700 }, + { 0x827A, 139704 }, + { 0x827B, 139708 }, + { 0x827C, 139712 }, + { 0x827D, 139716 }, + { 0x827E, 139720 }, + { 0x827F, 139724 }, + { 0x8280, 139728 }, + { 0x8281, 139732 }, + { 0x8282, 139736 }, + { 0x8283, 139740 }, + { 0x8284, 139744 }, + { 0x8285, 138620 }, + { 0x8286, 138624 }, + { 0x8287, 138628 }, + { 0x8288, 138632 }, + { 0x8289, 138636 }, + { 0x828A, 138640 }, + { 0x828B, 138644 }, + { 0x828C, 138648 }, + { 0x828D, 138652 }, + { 0x828E, 138656 }, + { 0x828F, 138660 }, + { 0x8290, 138664 }, + { 0x8291, 138668 }, + { 0x8292, 138672 }, + { 0x8293, 138676 }, + { 0x8294, 138680 }, + { 0x8295, 138684 }, + { 0x8296, 138688 }, + { 0x8297, 138692 }, + { 0x8298, 138696 }, + { 0x8299, 138700 }, + { 0x829A, 138704 }, + { 0x829B, 138708 }, + { 0x829C, 138712 }, + { 0x829D, 138716 }, + { 0x829E, 138720 }, + { 0x829F, 140403 }, + { 0x82A0, 140407 }, + { 0x82A1, 140411 }, + { 0x82A2, 140415 }, + { 0x82A3, 140419 }, + { 0x82A4, 140423 }, + { 0x82A5, 140427 }, + { 0x82A6, 140431 }, + { 0x82A7, 140435 }, + { 0x82A8, 140439 }, + { 0x82A9, 140443 }, + { 0x82AA, 140447 }, + { 0x82AB, 140451 }, + { 0x82AC, 140455 }, + { 0x82AD, 140459 }, + { 0x82AE, 140463 }, + { 0x82AF, 140467 }, + { 0x82B0, 140471 }, + { 0x82B1, 140475 }, + { 0x82B2, 140479 }, + { 0x82B3, 140483 }, + { 0x82B4, 140487 }, + { 0x82B5, 140491 }, + { 0x82B6, 140495 }, + { 0x82B7, 140499 }, + { 0x82B8, 140503 }, + { 0x82B9, 140188 }, + { 0x82BA, 140192 }, + { 0x82BB, 140196 }, + { 0x82BC, 140200 }, + { 0x82BD, 140204 }, + { 0x82BE, 140208 }, + { 0x82BF, 140212 }, + { 0x82C0, 140216 }, + { 0x82C1, 140220 }, + { 0x82C2, 140224 }, + { 0x82C3, 140228 }, + { 0x82C4, 140232 }, + { 0x82C5, 140236 }, + { 0x82C6, 140240 }, + { 0x82C7, 140244 }, + { 0x82C8, 140248 }, + { 0x82C9, 140252 }, + { 0x82CA, 140256 }, + { 0x82CB, 140260 }, + { 0x82CC, 140264 }, + { 0x82CD, 140268 }, + { 0x82CE, 140272 }, + { 0x82CF, 140276 }, + { 0x82D0, 140280 }, + { 0x82D1, 140284 }, + { 0x82D2, 139118 }, + { 0x82D3, 139123 }, + { 0x82D4, 139128 }, + { 0x82D5, 139133 }, + { 0x82D6, 139138 }, + { 0x82D7, 139143 }, + { 0x82D8, 139148 }, + { 0x82D9, 139153 }, + { 0x82DA, 139158 }, + { 0x82DB, 139163 }, + { 0x82DC, 139168 }, + { 0x82DD, 139173 }, + { 0x82DE, 139178 }, + { 0x82DF, 139183 }, + { 0x82E0, 139188 }, + { 0x82E1, 139193 }, + { 0x82E2, 139198 }, + { 0x82E3, 139203 }, + { 0x82E4, 139208 }, + { 0x82E5, 139213 }, + { 0x82E6, 139218 }, + { 0x82E7, 139223 }, + { 0x82E8, 139228 }, + { 0x82E9, 139233 }, + { 0x82EA, 139238 }, + { 0x82EB, 139243 }, + { 0x82EC, 138857 }, + { 0x82ED, 138862 }, + { 0x82EE, 138867 }, + { 0x82EF, 138872 }, + { 0x82F0, 138877 }, + { 0x82F1, 138882 }, + { 0x82F2, 138887 }, + { 0x82F3, 138892 }, + { 0x82F4, 138897 }, + { 0x82F5, 138902 }, + { 0x82F6, 138907 }, + { 0x82F7, 138912 }, + { 0x82F8, 138917 }, + { 0x82F9, 138922 }, + { 0x82FA, 138927 }, + { 0x82FB, 138932 }, + { 0x82FC, 138937 }, + { 0x82FD, 138942 }, + { 0x82FE, 138947 }, + { 0x82FF, 138952 }, + { 0x8300, 138957 }, + { 0x8301, 138962 }, + { 0x8302, 138967 }, + { 0x8303, 138972 }, + { 0x8304, 138977 }, + { 0x8305, 138982 }, + { 0x8306, 140711 }, + { 0x8307, 140715 }, + { 0x8308, 140719 }, + { 0x8309, 140723 }, + { 0x830A, 140727 }, + { 0x830B, 140731 }, + { 0x830C, 140735 }, + { 0x830D, 140739 }, + { 0x830E, 140743 }, + { 0x830F, 140747 }, + { 0x8310, 140751 }, + { 0x8311, 140755 }, + { 0x8312, 140759 }, + { 0x8313, 140763 }, + { 0x8314, 140767 }, + { 0x8315, 140771 }, + { 0x8316, 140775 }, + { 0x8317, 140779 }, + { 0x8318, 140619 }, + { 0x8319, 140623 }, + { 0x831A, 140627 }, + { 0x831B, 140631 }, + { 0x831C, 140635 }, + { 0x831D, 140639 }, + { 0x831E, 140643 }, + { 0x831F, 140647 }, + { 0x8320, 140651 }, + { 0x8321, 140655 }, + { 0x8322, 140659 }, + { 0x8323, 140663 }, + { 0x8324, 140667 }, + { 0x8325, 140671 }, + { 0x8326, 140675 }, + { 0x8327, 140679 }, + { 0x8328, 140683 }, + { 0x8329, 140687 }, + { 0x832A, 140691 }, + { 0x832B, 140695 }, + { 0x832C, 140699 }, + { 0x832D, 140703 }, + { 0x832E, 140707 }, + { 0x832F, 139514 }, + { 0x8330, 139519 }, + { 0x8331, 139524 }, + { 0x8332, 139529 }, + { 0x8333, 139534 }, + { 0x8334, 139539 }, + { 0x8335, 139544 }, + { 0x8336, 139549 }, + { 0x8337, 139554 }, + { 0x8338, 139559 }, + { 0x8339, 139564 }, + { 0x833A, 139569 }, + { 0x833B, 139574 }, + { 0x833C, 139579 }, + { 0x833D, 139584 }, + { 0x833E, 139589 }, + { 0x833F, 139594 }, + { 0x8340, 139599 }, + { 0x8341, 139604 }, + { 0x8342, 139609 }, + { 0x8343, 139614 }, + { 0x8344, 139619 }, + { 0x8345, 139624 }, + { 0x8346, 139629 }, + { 0x8347, 139634 }, + { 0x8348, 139639 }, + { 0x8349, 139384 }, + { 0x834A, 139389 }, + { 0x834B, 139394 }, + { 0x834C, 139399 }, + { 0x834D, 139404 }, + { 0x834E, 139409 }, + { 0x834F, 139414 }, + { 0x8350, 139419 }, + { 0x8351, 139424 }, + { 0x8352, 139429 }, + { 0x8353, 139434 }, + { 0x8354, 139439 }, + { 0x8355, 139444 }, + { 0x8356, 139449 }, + { 0x8357, 139454 }, + { 0x8358, 139459 }, + { 0x8359, 139464 }, + { 0x835A, 139469 }, + { 0x835B, 139474 }, + { 0x835C, 139479 }, + { 0x835D, 139484 }, + { 0x835E, 139489 }, + { 0x835F, 139494 }, + { 0x8360, 139499 }, + { 0x8361, 139504 }, + { 0x8362, 139509 }, + { 0x8363, 140890 }, + { 0x8364, 140894 }, + { 0x8365, 140898 }, + { 0x8366, 140902 }, + { 0x8367, 140906 }, + { 0x8368, 140910 }, + { 0x8369, 140914 }, + { 0x836A, 140918 }, + { 0x836B, 140922 }, + { 0x836C, 140926 }, + { 0x836D, 140930 }, + { 0x836E, 140934 }, + { 0x836F, 140938 }, + { 0x8370, 140942 }, + { 0x8371, 140946 }, + { 0x8372, 140950 }, + { 0x8373, 140954 }, + { 0x8374, 140958 }, + { 0x8375, 140962 }, + { 0x8376, 140966 }, + { 0x8377, 140970 }, + { 0x8378, 140786 }, + { 0x8379, 140790 }, + { 0x837A, 140794 }, + { 0x837B, 140798 }, + { 0x837C, 140802 }, + { 0x837D, 140806 }, + { 0x837E, 140810 }, + { 0x837F, 140814 }, + { 0x8380, 140818 }, + { 0x8381, 140822 }, + { 0x8382, 140826 }, + { 0x8383, 140830 }, + { 0x8384, 140834 }, + { 0x8385, 140838 }, + { 0x8386, 140842 }, + { 0x8387, 140846 }, + { 0x8388, 140850 }, + { 0x8389, 140854 }, + { 0x838A, 140858 }, + { 0x838B, 140862 }, + { 0x838C, 140866 }, + { 0x838D, 140870 }, + { 0x838E, 140874 }, + { 0x838F, 140878 }, + { 0x8390, 140882 }, + { 0x8391, 140886 }, + { 0x8392, 143136 }, + { 0x8393, 143140 }, + { 0x8394, 143144 }, + { 0x8395, 143148 }, + { 0x8396, 143152 }, + { 0x8397, 143156 }, + { 0x8398, 143160 }, + { 0x8399, 143164 }, + { 0x839A, 143168 }, + { 0x839B, 143172 }, + { 0x839C, 143176 }, + { 0x839D, 143180 }, + { 0x839E, 143184 }, + { 0x839F, 143188 }, + { 0x83A0, 143192 }, + { 0x83A1, 143196 }, + { 0x83A2, 143200 }, + { 0x83A3, 143204 }, + { 0x83A4, 143208 }, + { 0x83A5, 143032 }, + { 0x83A6, 143036 }, + { 0x83A7, 143040 }, + { 0x83A8, 143044 }, + { 0x83A9, 143048 }, + { 0x83AA, 143052 }, + { 0x83AB, 143056 }, + { 0x83AC, 143060 }, + { 0x83AD, 143064 }, + { 0x83AE, 143068 }, + { 0x83AF, 143072 }, + { 0x83B0, 143076 }, + { 0x83B1, 143080 }, + { 0x83B2, 143084 }, + { 0x83B3, 143088 }, + { 0x83B4, 143092 }, + { 0x83B5, 143096 }, + { 0x83B6, 143100 }, + { 0x83B7, 143104 }, + { 0x83B8, 143108 }, + { 0x83B9, 143112 }, + { 0x83BA, 143116 }, + { 0x83BB, 143120 }, + { 0x83BC, 143124 }, + { 0x83BD, 143128 }, + { 0x83BE, 143132 }, + { 0x83BF, 139987 }, + { 0x83C0, 139992 }, + { 0x83C1, 139997 }, + { 0x83C2, 140002 }, + { 0x83C3, 140007 }, + { 0x83C4, 140012 }, + { 0x83C5, 140017 }, + { 0x83C6, 140022 }, + { 0x83C7, 140027 }, + { 0x83C8, 140032 }, + { 0x83C9, 140037 }, + { 0x83CA, 140042 }, + { 0x83CB, 140047 }, + { 0x83CC, 140052 }, + { 0x83CD, 140057 }, + { 0x83CE, 140062 }, + { 0x83CF, 140067 }, + { 0x83D0, 140072 }, + { 0x83D1, 140077 }, + { 0x83D2, 140082 }, + { 0x83D3, 140087 }, + { 0x83D4, 140092 }, + { 0x83D5, 140097 }, + { 0x83D6, 140102 }, + { 0x83D7, 140107 }, + { 0x83D8, 140112 }, + { 0x83D9, 139857 }, + { 0x83DA, 139862 }, + { 0x83DB, 139867 }, + { 0x83DC, 139872 }, + { 0x83DD, 139877 }, + { 0x83DE, 139882 }, + { 0x83DF, 139887 }, + { 0x83E0, 139892 }, + { 0x83E1, 139897 }, + { 0x83E2, 139902 }, + { 0x83E3, 139907 }, + { 0x83E4, 139912 }, + { 0x83E5, 139917 }, + { 0x83E6, 139922 }, + { 0x83E7, 139927 }, + { 0x83E8, 139932 }, + { 0x83E9, 139937 }, + { 0x83EA, 139942 }, + { 0x83EB, 139947 }, + { 0x83EC, 139952 }, + { 0x83ED, 139957 }, + { 0x83EE, 139962 }, + { 0x83EF, 139967 }, + { 0x83F0, 139972 }, + { 0x83F1, 139977 }, + { 0x83F2, 139982 }, + { 0x83F3, 142888 }, + { 0x83F4, 142892 }, + { 0x83F5, 142896 }, + { 0x83F6, 142900 }, + { 0x83F7, 142904 }, + { 0x83F8, 142908 }, + { 0x83F9, 142912 }, + { 0x83FA, 142916 }, + { 0x83FB, 142920 }, + { 0x83FC, 142924 }, + { 0x83FD, 142928 }, + { 0x83FE, 142932 }, + { 0x83FF, 142936 }, + { 0x8400, 142940 }, + { 0x8401, 142944 }, + { 0x8402, 142948 }, + { 0x8403, 142952 }, + { 0x8404, 142956 }, + { 0x8405, 142960 }, + { 0x8406, 142964 }, + { 0x8407, 142968 }, + { 0x8408, 142972 }, + { 0x8409, 142976 }, + { 0x840A, 142980 }, + { 0x840B, 142984 }, + { 0x840C, 142988 }, + { 0x840D, 142524 }, + { 0x840E, 142528 }, + { 0x840F, 142532 }, + { 0x8410, 142536 }, + { 0x8411, 142540 }, + { 0x8412, 142544 }, + { 0x8413, 142548 }, + { 0x8414, 142552 }, + { 0x8415, 142556 }, + { 0x8416, 142560 }, + { 0x8417, 142564 }, + { 0x8418, 142568 }, + { 0x8419, 142572 }, + { 0x841A, 142576 }, + { 0x841B, 142580 }, + { 0x841C, 142584 }, + { 0x841D, 142588 }, + { 0x841E, 142592 }, + { 0x841F, 142596 }, + { 0x8420, 142600 }, + { 0x8421, 142604 }, + { 0x8422, 142608 }, + { 0x8423, 142612 }, + { 0x8424, 142616 }, + { 0x8425, 142620 }, + { 0x8426, 142624 }, + { 0x8427, 142218 }, + { 0x8428, 142223 }, + { 0x8429, 142228 }, + { 0x842A, 142233 }, + { 0x842B, 142238 }, + { 0x842C, 142243 }, + { 0x842D, 142248 }, + { 0x842E, 142253 }, + { 0x842F, 142258 }, + { 0x8430, 142263 }, + { 0x8431, 142268 }, + { 0x8432, 142273 }, + { 0x8433, 142278 }, + { 0x8434, 142283 }, + { 0x8435, 142288 }, + { 0x8436, 142293 }, + { 0x8437, 142298 }, + { 0x8438, 142303 }, + { 0x8439, 142308 }, + { 0x843A, 142313 }, + { 0x843B, 142318 }, + { 0x843C, 142323 }, + { 0x843D, 142328 }, + { 0x843E, 142333 }, + { 0x843F, 142338 }, + { 0x8440, 142343 }, + { 0x8441, 141296 }, + { 0x8442, 141301 }, + { 0x8443, 141306 }, + { 0x8444, 141311 }, + { 0x8445, 141316 }, + { 0x8446, 141321 }, + { 0x8447, 141326 }, + { 0x8448, 141331 }, + { 0x8449, 141336 }, + { 0x844A, 141341 }, + { 0x844B, 141346 }, + { 0x844C, 141351 }, + { 0x844D, 141356 }, + { 0x844E, 141361 }, + { 0x844F, 141366 }, + { 0x8450, 141371 }, + { 0x8451, 141376 }, + { 0x8452, 141381 }, + { 0x8453, 141386 }, + { 0x8454, 141391 }, + { 0x8455, 141396 }, + { 0x8456, 141401 }, + { 0x8457, 141406 }, + { 0x8458, 141411 }, + { 0x8459, 141416 }, + { 0x845A, 141421 }, + { 0x845B, 142758 }, + { 0x845C, 142763 }, + { 0x845D, 142768 }, + { 0x845E, 142773 }, + { 0x845F, 142778 }, + { 0x8460, 142783 }, + { 0x8461, 142788 }, + { 0x8462, 142793 }, + { 0x8463, 142798 }, + { 0x8464, 142803 }, + { 0x8465, 142808 }, + { 0x8466, 142813 }, + { 0x8467, 142818 }, + { 0x8468, 142823 }, + { 0x8469, 142828 }, + { 0x846A, 142833 }, + { 0x846B, 142838 }, + { 0x846C, 142843 }, + { 0x846D, 142848 }, + { 0x846E, 142853 }, + { 0x846F, 142858 }, + { 0x8470, 142863 }, + { 0x8471, 142868 }, + { 0x8472, 142873 }, + { 0x8473, 142878 }, + { 0x8474, 142883 }, + { 0x8475, 142628 }, + { 0x8476, 142633 }, + { 0x8477, 142638 }, + { 0x8478, 142643 }, + { 0x8479, 142648 }, + { 0x847A, 142653 }, + { 0x847B, 142658 }, + { 0x847C, 142663 }, + { 0x847D, 142668 }, + { 0x847E, 142673 }, + { 0x847F, 142678 }, + { 0x8480, 142683 }, + { 0x8481, 142688 }, + { 0x8482, 142693 }, + { 0x8483, 142698 }, + { 0x8484, 142703 }, + { 0x8485, 142708 }, + { 0x8486, 142713 }, + { 0x8487, 142718 }, + { 0x8488, 142723 }, + { 0x8489, 142728 }, + { 0x848A, 142733 }, + { 0x848B, 142738 }, + { 0x848C, 142743 }, + { 0x848D, 142748 }, + { 0x848E, 142753 }, + { 0x848F, 141899 }, + { 0x8490, 141905 }, + { 0x8491, 141911 }, + { 0x8492, 141917 }, + { 0x8493, 141923 }, + { 0x8494, 141929 }, + { 0x8495, 141935 }, + { 0x8496, 141941 }, + { 0x8497, 141947 }, + { 0x8498, 141953 }, + { 0x8499, 141959 }, + { 0x849A, 141965 }, + { 0x849B, 141971 }, + { 0x849C, 141977 }, + { 0x849D, 141983 }, + { 0x849E, 141989 }, + { 0x849F, 141995 }, + { 0x84A0, 142001 }, + { 0x84A1, 142007 }, + { 0x84A2, 142013 }, + { 0x84A3, 142019 }, + { 0x84A4, 142025 }, + { 0x84A5, 142031 }, + { 0x84A6, 142037 }, + { 0x84A7, 142043 }, + { 0x84A8, 142049 }, + { 0x84A9, 141586 }, + { 0x84AA, 141592 }, + { 0x84AB, 141598 }, + { 0x84AC, 141604 }, + { 0x84AD, 141610 }, + { 0x84AE, 141616 }, + { 0x84AF, 141622 }, + { 0x84B0, 141628 }, + { 0x84B1, 141634 }, + { 0x84B2, 141640 }, + { 0x84B3, 141646 }, + { 0x84B4, 141652 }, + { 0x84B5, 141658 }, + { 0x84B6, 141664 }, + { 0x84B7, 141670 }, + { 0x84B8, 141676 }, + { 0x84B9, 141682 }, + { 0x84BA, 141688 }, + { 0x84BB, 141694 }, + { 0x84BC, 141700 }, + { 0x84BD, 141706 }, + { 0x84BE, 141712 }, + { 0x84BF, 141718 }, + { 0x84C0, 141724 }, + { 0x84C1, 141730 }, + { 0x84C2, 141736 }, + { 0x84C3, 141118 }, + { 0x84C4, 141122 }, + { 0x84C5, 141126 }, + { 0x84C6, 141130 }, + { 0x84C7, 141134 }, + { 0x84C8, 141138 }, + { 0x84C9, 141142 }, + { 0x84CA, 141146 }, + { 0x84CB, 141150 }, + { 0x84CC, 141154 }, + { 0x84CD, 141158 }, + { 0x84CE, 141162 }, + { 0x84CF, 141166 }, + { 0x84D0, 141170 }, + { 0x84D1, 141174 }, + { 0x84D2, 141178 }, + { 0x84D3, 141182 }, + { 0x84D4, 141186 }, + { 0x84D5, 141190 }, + { 0x84D6, 141194 }, + { 0x84D7, 141198 }, + { 0x84D8, 141202 }, + { 0x84D9, 141206 }, + { 0x84DA, 141210 }, + { 0x84DB, 141214 }, + { 0x84DC, 141218 }, + { 0x84DD, 141014 }, + { 0x84DE, 141018 }, + { 0x84DF, 141022 }, + { 0x84E0, 141026 }, + { 0x84E1, 141030 }, + { 0x84E2, 141034 }, + { 0x84E3, 141038 }, + { 0x84E4, 141042 }, + { 0x84E5, 141046 }, + { 0x84E6, 141050 }, + { 0x84E7, 141054 }, + { 0x84E8, 141058 }, + { 0x84E9, 141062 }, + { 0x84EA, 141066 }, + { 0x84EB, 141070 }, + { 0x84EC, 141074 }, + { 0x84ED, 141078 }, + { 0x84EE, 141082 }, + { 0x84EF, 141086 }, + { 0x84F0, 141090 }, + { 0x84F1, 141094 }, + { 0x84F2, 141098 }, + { 0x84F3, 141102 }, + { 0x84F4, 141106 }, + { 0x84F5, 141110 }, + { 0x84F6, 141114 }, + { 0x84F7, 140377 }, + { 0x84F8, 140382 }, + { 0x84F9, 139800 }, + { 0x84FA, 139788 }, + { 0x84FB, 139808 }, + { 0x84FC, 139804 }, + { 0x84FD, 139841 }, + { 0x84FE, 139796 }, + { 0x84FF, 139768 }, + { 0x8500, 139828 }, + { 0x8501, 139792 }, + { 0x8502, 139812 }, + { 0x8503, 139816 }, + { 0x8504, 139748 }, + { 0x8505, 139752 }, + { 0x8506, 139760 }, + { 0x8507, 139845 }, + { 0x8508, 139756 }, + { 0x8509, 139780 }, + { 0x850A, 139832 }, + { 0x850B, 139824 }, + { 0x850C, 139784 }, + { 0x850D, 139849 }, + { 0x850E, 139772 }, + { 0x850F, 139764 }, + { 0x8510, 139776 }, + { 0x8511, 139820 }, + { 0x8512, 138617 }, + { 0x8513, 138776 }, + { 0x8514, 138764 }, + { 0x8515, 138789 }, + { 0x8516, 138780 }, + { 0x8517, 138817 }, + { 0x8518, 138772 }, + { 0x8519, 138744 }, + { 0x851A, 138809 }, + { 0x851B, 138768 }, + { 0x851C, 138793 }, + { 0x851D, 138797 }, + { 0x851E, 138724 }, + { 0x851F, 138728 }, + { 0x8520, 138736 }, + { 0x8521, 138821 }, + { 0x8522, 138732 }, + { 0x8523, 138756 }, + { 0x8524, 138784 }, + { 0x8525, 138805 }, + { 0x8526, 138760 }, + { 0x8527, 138825 }, + { 0x8528, 138748 }, + { 0x8529, 138740 }, + { 0x852A, 138752 }, + { 0x852B, 138801 }, + { 0x852C, 140117 }, + { 0x852D, 139853 }, + { 0x852E, 138829 }, + { 0x852F, 138613 }, + { 0x8530, 138565 }, + { 0x8531, 138569 }, + { 0x8532, 138561 }, + { 0x8533, 140559 }, + { 0x8534, 140547 }, + { 0x8535, 140567 }, + { 0x8536, 140563 }, + { 0x8537, 140596 }, + { 0x8538, 140555 }, + { 0x8539, 140527 }, + { 0x853A, 140587 }, + { 0x853B, 140551 }, + { 0x853C, 140571 }, + { 0x853D, 140575 }, + { 0x853E, 140507 }, + { 0x853F, 140511 }, + { 0x8540, 140519 }, + { 0x8541, 140600 }, + { 0x8542, 140515 }, + { 0x8543, 140539 }, + { 0x8544, 140591 }, + { 0x8545, 140583 }, + { 0x8546, 140543 }, + { 0x8547, 140604 }, + { 0x8548, 140531 }, + { 0x8549, 140523 }, + { 0x854A, 140535 }, + { 0x854B, 140579 }, + { 0x854C, 140185 }, + { 0x854D, 140340 }, + { 0x854E, 140328 }, + { 0x854F, 140353 }, + { 0x8550, 140344 }, + { 0x8551, 140387 }, + { 0x8552, 140336 }, + { 0x8553, 140308 }, + { 0x8554, 140373 }, + { 0x8555, 140332 }, + { 0x8556, 140357 }, + { 0x8557, 140361 }, + { 0x8558, 140288 }, + { 0x8559, 140292 }, + { 0x855A, 140300 }, + { 0x855B, 140391 }, + { 0x855C, 140296 }, + { 0x855D, 140320 }, + { 0x855E, 140348 }, + { 0x855F, 140369 }, + { 0x8560, 140324 }, + { 0x8561, 140395 }, + { 0x8562, 140312 }, + { 0x8563, 140304 }, + { 0x8564, 140316 }, + { 0x8565, 140365 }, + { 0x8566, 140612 }, + { 0x8567, 140608 }, + { 0x8568, 140399 }, + { 0x8569, 140181 }, + { 0x856A, 140173 }, + { 0x856B, 140177 }, + { 0x856C, 140169 }, + { 0x856D, 139313 }, + { 0x856E, 139298 }, + { 0x856F, 139323 }, + { 0x8570, 139318 }, + { 0x8571, 139359 }, + { 0x8572, 139308 }, + { 0x8573, 139273 }, + { 0x8574, 139348 }, + { 0x8575, 139303 }, + { 0x8576, 139328 }, + { 0x8577, 139333 }, + { 0x8578, 139248 }, + { 0x8579, 139253 }, + { 0x857A, 139263 }, + { 0x857B, 139364 }, + { 0x857C, 139258 }, + { 0x857D, 139288 }, + { 0x857E, 139353 }, + { 0x857F, 139343 }, + { 0x8580, 139293 }, + { 0x8581, 139369 }, + { 0x8582, 139278 }, + { 0x8583, 139268 }, + { 0x8584, 139283 }, + { 0x8585, 139338 }, + { 0x8586, 138853 }, + { 0x8587, 139052 }, + { 0x8588, 139037 }, + { 0x8589, 139068 }, + { 0x858A, 139057 }, + { 0x858B, 139098 }, + { 0x858C, 139047 }, + { 0x858D, 139012 }, + { 0x858E, 139093 }, + { 0x858F, 139042 }, + { 0x8590, 139073 }, + { 0x8591, 139078 }, + { 0x8592, 138987 }, + { 0x8593, 138992 }, + { 0x8594, 139002 }, + { 0x8595, 139103 }, + { 0x8596, 138997 }, + { 0x8597, 139027 }, + { 0x8598, 139062 }, + { 0x8599, 139088 }, + { 0x859A, 139032 }, + { 0x859B, 139108 }, + { 0x859C, 139017 }, + { 0x859D, 139007 }, + { 0x859E, 139022 }, + { 0x859F, 139083 }, + { 0x85A0, 139379 }, + { 0x85A1, 139374 }, + { 0x85A2, 139113 }, + { 0x85A3, 138848 }, + { 0x85A4, 138838 }, + { 0x85A5, 138843 }, + { 0x85A6, 138833 }, + { 0x85A7, 142413 }, + { 0x85A8, 142398 }, + { 0x85A9, 142423 }, + { 0x85AA, 142418 }, + { 0x85AB, 142459 }, + { 0x85AC, 142408 }, + { 0x85AD, 142373 }, + { 0x85AE, 142448 }, + { 0x85AF, 142403 }, + { 0x85B0, 142428 }, + { 0x85B1, 142433 }, + { 0x85B2, 142348 }, + { 0x85B3, 142353 }, + { 0x85B4, 142363 }, + { 0x85B5, 142464 }, + { 0x85B6, 142358 }, + { 0x85B7, 142388 }, + { 0x85B8, 142453 }, + { 0x85B9, 142443 }, + { 0x85BA, 142393 }, + { 0x85BB, 142469 }, + { 0x85BC, 142378 }, + { 0x85BD, 142368 }, + { 0x85BE, 142383 }, + { 0x85BF, 142438 }, + { 0x85C0, 141292 }, + { 0x85C1, 141491 }, + { 0x85C2, 141476 }, + { 0x85C3, 141507 }, + { 0x85C4, 141496 }, + { 0x85C5, 141537 }, + { 0x85C6, 141486 }, + { 0x85C7, 141451 }, + { 0x85C8, 141532 }, + { 0x85C9, 141481 }, + { 0x85CA, 141512 }, + { 0x85CB, 141517 }, + { 0x85CC, 141426 }, + { 0x85CD, 141431 }, + { 0x85CE, 141441 }, + { 0x85CF, 141542 }, + { 0x85D0, 141436 }, + { 0x85D1, 141466 }, + { 0x85D2, 141501 }, + { 0x85D3, 141527 }, + { 0x85D4, 141471 }, + { 0x85D5, 141547 }, + { 0x85D6, 141456 }, + { 0x85D7, 141446 }, + { 0x85D8, 141461 }, + { 0x85D9, 141522 }, + { 0x85DA, 142479 }, + { 0x85DB, 142474 }, + { 0x85DC, 141552 }, + { 0x85DD, 141287 }, + { 0x85DE, 141227 }, + { 0x85DF, 141232 }, + { 0x85E0, 141222 }, + { 0x85E1, 142133 }, + { 0x85E2, 142115 }, + { 0x85E3, 142145 }, + { 0x85E4, 142139 }, + { 0x85E5, 142188 }, + { 0x85E6, 142127 }, + { 0x85E7, 142085 }, + { 0x85E8, 142175 }, + { 0x85E9, 142121 }, + { 0x85EA, 142151 }, + { 0x85EB, 142157 }, + { 0x85EC, 142055 }, + { 0x85ED, 142061 }, + { 0x85EE, 142073 }, + { 0x85EF, 142194 }, + { 0x85F0, 142067 }, + { 0x85F1, 142103 }, + { 0x85F2, 142181 }, + { 0x85F3, 142169 }, + { 0x85F4, 142109 }, + { 0x85F5, 142200 }, + { 0x85F6, 142091 }, + { 0x85F7, 142079 }, + { 0x85F8, 142097 }, + { 0x85F9, 142163 }, + { 0x85FA, 141581 }, + { 0x85FB, 141820 }, + { 0x85FC, 141802 }, + { 0x85FD, 141839 }, + { 0x85FE, 141826 }, + { 0x85FF, 141875 }, + { 0x8600, 141814 }, + { 0x8601, 141772 }, + { 0x8602, 141869 }, + { 0x8603, 141808 }, + { 0x8604, 141845 }, + { 0x8605, 141851 }, + { 0x8606, 141742 }, + { 0x8607, 141748 }, + { 0x8608, 141760 }, + { 0x8609, 141881 }, + { 0x860A, 141754 }, + { 0x860B, 141790 }, + { 0x860C, 141832 }, + { 0x860D, 141863 }, + { 0x860E, 141796 }, + { 0x860F, 141887 }, + { 0x8610, 141778 }, + { 0x8611, 141766 }, + { 0x8612, 141784 }, + { 0x8613, 141857 }, + { 0x8614, 142212 }, + { 0x8615, 142206 }, + { 0x8616, 141893 }, + { 0x8617, 141575 }, + { 0x8618, 141563 }, + { 0x8619, 141569 }, + { 0x861A, 141557 }, + { 0x861B, 139837 }, + { 0x861C, 138813 }, + { 0x861D, 138597 }, + { 0x861E, 138573 }, + { 0x861F, 138581 }, + { 0x8620, 138609 }, + { 0x8621, 138589 }, + { 0x8622, 138585 }, + { 0x8623, 138577 }, + { 0x8624, 138605 }, + { 0x8625, 138601 }, + { 0x8626, 138593 }, + { 0x8627, 143016 }, + { 0x8628, 142992 }, + { 0x8629, 143000 }, + { 0x862A, 143028 }, + { 0x862B, 143008 }, + { 0x862C, 143004 }, + { 0x862D, 142996 }, + { 0x862E, 143024 }, + { 0x862F, 143020 }, + { 0x8630, 143012 }, + { 0x8631, 142508 }, + { 0x8632, 142484 }, + { 0x8633, 142492 }, + { 0x8634, 142520 }, + { 0x8635, 142500 }, + { 0x8636, 142496 }, + { 0x8637, 142488 }, + { 0x8638, 142516 }, + { 0x8639, 142512 }, + { 0x863A, 142504 }, + { 0x863B, 141267 }, + { 0x863C, 141237 }, + { 0x863D, 141247 }, + { 0x863E, 141282 }, + { 0x863F, 141257 }, + { 0x8640, 141252 }, + { 0x8641, 141242 }, + { 0x8642, 141277 }, + { 0x8643, 141272 }, + { 0x8644, 141262 }, + { 0x8645, 140998 }, + { 0x8646, 140974 }, + { 0x8647, 140982 }, + { 0x8648, 141010 }, + { 0x8649, 140990 }, + { 0x864A, 140986 }, + { 0x864B, 140978 }, + { 0x864C, 141006 }, + { 0x864D, 141002 }, + { 0x864E, 140994 }, + { 0x864F, 135319 }, + { 0x8650, 136465 }, + { 0x8651, 135112 }, + { 0x8652, 136197 }, + { 0x8653, 136364 }, + { 0x8654, 136240 }, + { 0x8655, 135344 }, + { 0x8656, 136468 }, + { 0x8657, 135794 }, + { 0x8658, 135742 }, + { 0x8659, 135493 }, + { 0x865A, 135497 }, + { 0x865B, 135501 }, + { 0x865C, 136477 }, + { 0x865D, 135520 }, + { 0x865E, 136481 }, + { 0x865F, 135532 }, + { 0x8660, 135640 }, + { 0x8661, 135622 }, + { 0x8662, 135322 }, + { 0x8663, 135506 }, + { 0x8664, 135665 }, + { 0x8665, 135670 }, + { 0x8666, 135735 }, + { 0x8667, 135707 }, + { 0x8668, 135721 }, + { 0x8669, 135646 }, + { 0x866A, 136506 }, + { 0x866B, 135904 }, + { 0x866C, 135348 }, + { 0x866D, 135567 }, + { 0x866E, 136496 }, + { 0x866F, 135658 }, + { 0x8670, 135537 }, + { 0x8671, 135572 }, + { 0x8672, 135627 }, + { 0x8673, 135328 }, + { 0x8674, 135336 }, + { 0x8675, 135512 }, + { 0x8676, 135524 }, + { 0x8677, 135591 }, + { 0x8678, 135609 }, + { 0x8679, 135603 }, + { 0x867A, 135597 }, + { 0x867B, 135824 }, + { 0x867C, 135677 }, + { 0x867D, 135692 }, + { 0x867E, 135684 }, + { 0x867F, 135949 }, + { 0x8680, 135453 }, + { 0x8681, 135727 }, + { 0x8682, 135651 }, + { 0x8683, 135700 }, + { 0x8684, 135713 }, + { 0x8685, 135942 }, + { 0x8686, 135446 }, + { 0x8687, 135961 }, + { 0x8688, 135968 }, + { 0x8689, 135433 }, + { 0x868A, 135425 }, + { 0x868B, 135467 }, + { 0x868C, 135615 }, + { 0x868D, 135584 }, + { 0x868E, 135578 }, + { 0x868F, 135919 }, + { 0x8690, 135927 }, + { 0x8691, 135935 }, + { 0x8692, 135460 }, + { 0x8693, 136033 }, + { 0x8694, 136037 }, + { 0x8695, 136042 }, + { 0x8696, 136047 }, + { 0x8697, 136052 }, + { 0x8698, 135235 }, + { 0x8699, 135270 }, + { 0x869A, 136330 }, + { 0x869B, 135986 }, + { 0x869C, 136061 }, + { 0x869D, 135997 }, + { 0x869E, 136074 }, + { 0x869F, 135991 }, + { 0x86A0, 136067 }, + { 0x86A1, 136004 }, + { 0x86A2, 135083 }, + { 0x86A3, 135088 }, + { 0x86A4, 136324 }, + { 0x86A5, 136188 }, + { 0x86A6, 136011 }, + { 0x86A7, 136025 }, + { 0x86A8, 136017 }, + { 0x86A9, 135984 }, + { 0x86AA, 136126 }, + { 0x86AB, 136058 }, + { 0x86AC, 136118 }, + { 0x86AD, 136082 }, + { 0x86AE, 136114 }, + { 0x86AF, 136122 }, + { 0x86B0, 136087 }, + { 0x86B1, 136093 }, + { 0x86B2, 136097 }, + { 0x86B3, 136103 }, + { 0x86B4, 136110 }, + { 0x86B5, 135229 }, + { 0x86B6, 135247 }, + { 0x86B7, 135231 }, + { 0x86B8, 135251 }, + { 0x86B9, 136179 }, + { 0x86BA, 136131 }, + { 0x86BB, 135094 }, + { 0x86BC, 135077 }, + { 0x86BD, 135102 }, + { 0x86BE, 135129 }, + { 0x86BF, 135097 }, + { 0x86C0, 135079 }, + { 0x86C1, 135107 }, + { 0x86C2, 135133 }, + { 0x86C3, 136538 }, + { 0x86C4, 136536 }, + { 0x86C5, 136459 }, + { 0x86C6, 136182 }, + { 0x86C7, 136200 }, + { 0x86C8, 136184 }, + { 0x86C9, 136204 }, + { 0x86CA, 136335 }, + { 0x86CB, 136348 }, + { 0x86CC, 136318 }, + { 0x86CD, 136416 }, + { 0x86CE, 136343 }, + { 0x86CF, 136419 }, + { 0x86D0, 136338 }, + { 0x86D1, 136320 }, + { 0x86D2, 136423 }, + { 0x86D3, 136429 }, + { 0x86D4, 136226 }, + { 0x86D5, 135544 }, + { 0x86D6, 136485 }, + { 0x86D7, 136400 }, + { 0x86D8, 136268 }, + { 0x86D9, 136435 }, + { 0x86DA, 135549 }, + { 0x86DB, 135555 }, + { 0x86DC, 136405 }, + { 0x86DD, 135849 }, + { 0x86DE, 135865 }, + { 0x86DF, 135859 }, + { 0x86E0, 135853 }, + { 0x86E1, 135841 }, + { 0x86E2, 135806 }, + { 0x86E3, 136511 }, + { 0x86E4, 136208 }, + { 0x86E5, 136278 }, + { 0x86E6, 135884 }, + { 0x86E7, 135845 }, + { 0x86E8, 135889 }, + { 0x86E9, 135880 }, + { 0x86EA, 136447 }, + { 0x86EB, 135875 }, + { 0x86EC, 136442 }, + { 0x86ED, 136293 }, + { 0x86EE, 136286 }, + { 0x86EF, 135871 }, + { 0x86F0, 136515 }, + { 0x86F1, 136438 }, + { 0x86F2, 136282 }, + { 0x86F3, 135635 }, + { 0x86F4, 136501 }, + { 0x86F5, 136411 }, + { 0x86F6, 136353 }, + { 0x86F7, 136273 }, + { 0x86F8, 135561 }, + { 0x86F9, 136490 }, + { 0x86FA, 135283 }, + { 0x86FB, 136356 }, + { 0x86FC, 136228 }, + { 0x86FD, 135279 }, + { 0x86FE, 135314 }, + { 0x86FF, 135295 }, + { 0x8700, 136461 }, + { 0x8701, 136193 }, + { 0x8702, 136236 }, + { 0x8703, 135299 }, + { 0x8704, 135309 }, + { 0x8705, 135303 }, + { 0x8706, 135287 }, + { 0x8707, 135291 }, + { 0x8708, 136133 }, + { 0x8709, 135354 }, + { 0x870A, 136472 }, + { 0x870B, 136541 }, + { 0x870C, 136143 }, + { 0x870D, 136137 }, + { 0x870E, 136149 }, + { 0x870F, 135115 }, + { 0x8710, 136367 }, + { 0x8711, 136248 }, + { 0x8712, 136243 }, + { 0x8713, 135910 }, + { 0x8714, 136451 }, + { 0x8715, 135894 }, + { 0x8716, 136519 }, + { 0x8717, 135979 }, + { 0x8718, 135898 }, + { 0x8719, 136175 }, + { 0x871A, 135956 }, + { 0x871B, 135975 }, + { 0x871C, 135914 }, + { 0x871D, 136523 }, + { 0x871E, 136547 }, + { 0x871F, 135137 }, + { 0x8720, 136454 }, + { 0x8721, 136312 }, + { 0x8722, 136306 }, + { 0x8723, 136301 }, + { 0x8724, 136528 }, + { 0x8725, 135255 }, + { 0x8726, 135261 }, + { 0x8727, 136168 }, + { 0x8728, 136161 }, + { 0x8729, 136155 }, + { 0x872A, 136396 }, + { 0x872B, 135364 }, + { 0x872C, 136381 }, + { 0x872D, 135397 }, + { 0x872E, 135404 }, + { 0x872F, 135390 }, + { 0x8730, 135376 }, + { 0x8731, 135369 }, + { 0x8732, 135383 }, + { 0x8733, 135481 }, + { 0x8734, 135474 }, + { 0x8735, 135359 }, + { 0x8736, 135488 }, + { 0x8737, 135418 }, + { 0x8738, 135240 }, + { 0x8739, 135411 }, + { 0x873A, 135441 }, + { 0x873B, 135120 }, + { 0x873C, 135124 }, + { 0x873D, 136376 }, + { 0x873E, 136386 }, + { 0x873F, 136372 }, + { 0x8740, 136391 }, + { 0x8741, 136263 }, + { 0x8742, 136258 }, + { 0x8743, 136254 }, + { 0x8744, 135747 }, + { 0x8745, 135750 }, + { 0x8746, 135772 }, + { 0x8747, 135777 }, + { 0x8748, 135767 }, + { 0x8749, 135837 }, + { 0x874A, 135818 }, + { 0x874B, 135831 }, + { 0x874C, 135812 }, + { 0x874D, 135782 }, + { 0x874E, 135754 }, + { 0x874F, 135800 }, + { 0x8750, 135788 }, + { 0x8751, 135760 }, + { 0x8752, 135268 }, + { 0x8753, 135276 }, + { 0x8754, 134890 }, + { 0x8755, 134896 }, + { 0x8756, 134893 }, + { 0x8757, 134735 }, + { 0x8758, 134741 }, + { 0x8759, 134738 }, + { 0x875A, 134943 }, + { 0x875B, 134949 }, + { 0x875C, 134946 }, + { 0x875D, 134703 }, + { 0x875E, 134709 }, + { 0x875F, 134706 }, + { 0x8760, 134552 }, + { 0x8761, 134558 }, + { 0x8762, 134555 }, + { 0x8763, 135053 }, + { 0x8764, 135050 }, + { 0x8765, 135031 }, + { 0x8766, 135039 }, + { 0x8767, 135035 }, + { 0x8768, 135043 }, + { 0x8769, 135047 }, + { 0x876A, 134716 }, + { 0x876B, 134724 }, + { 0x876C, 134720 }, + { 0x876D, 134728 }, + { 0x876E, 134732 }, + { 0x876F, 135027 }, + { 0x8770, 136553 }, + { 0x8771, 136558 }, + { 0x8772, 136575 }, + { 0x8773, 136579 }, + { 0x8774, 136563 }, + { 0x8775, 136569 }, + { 0x8776, 136583 }, + { 0x8777, 137104 }, + { 0x8778, 137558 }, + { 0x8779, 137118 }, + { 0x877A, 137123 }, + { 0x877B, 137113 }, + { 0x877C, 137128 }, + { 0x877D, 137108 }, + { 0x877E, 137080 }, + { 0x877F, 137075 }, + { 0x8780, 137084 }, + { 0x8781, 137088 }, + { 0x8782, 136954 }, + { 0x8783, 137138 }, + { 0x8784, 137133 }, + { 0x8785, 137143 }, + { 0x8786, 137147 }, + { 0x8787, 136818 }, + { 0x8788, 136822 }, + { 0x8789, 136814 }, + { 0x878A, 137053 }, + { 0x878B, 137057 }, + { 0x878C, 137049 }, + { 0x878D, 137061 }, + { 0x878E, 136946 }, + { 0x878F, 136950 }, + { 0x8790, 136942 }, + { 0x8791, 136803 }, + { 0x8792, 136807 }, + { 0x8793, 136799 }, + { 0x8794, 137157 }, + { 0x8795, 137161 }, + { 0x8796, 137153 }, + { 0x8797, 137029 }, + { 0x8798, 137033 }, + { 0x8799, 137025 }, + { 0x879A, 136622 }, + { 0x879B, 136618 }, + { 0x879C, 136626 }, + { 0x879D, 136634 }, + { 0x879E, 136630 }, + { 0x879F, 136638 }, + { 0x87A0, 136615 }, + { 0x87A1, 136605 }, + { 0x87A2, 136600 }, + { 0x87A3, 136610 }, + { 0x87A4, 136663 }, + { 0x87A5, 136667 }, + { 0x87A6, 136659 }, + { 0x87A7, 136671 }, + { 0x87A8, 136719 }, + { 0x87A9, 136723 }, + { 0x87AA, 136715 }, + { 0x87AB, 136727 }, + { 0x87AC, 136680 }, + { 0x87AD, 136685 }, + { 0x87AE, 136675 }, + { 0x87AF, 136690 }, + { 0x87B0, 136700 }, + { 0x87B1, 136705 }, + { 0x87B2, 136695 }, + { 0x87B3, 136710 }, + { 0x87B4, 137572 }, + { 0x87B5, 137577 }, + { 0x87B6, 137567 }, + { 0x87B7, 137582 }, + { 0x87B8, 137562 }, + { 0x87B9, 137530 }, + { 0x87BA, 137525 }, + { 0x87BB, 137534 }, + { 0x87BC, 137538 }, + { 0x87BD, 137440 }, + { 0x87BE, 137592 }, + { 0x87BF, 137587 }, + { 0x87C0, 137603 }, + { 0x87C1, 137597 }, + { 0x87C2, 137276 }, + { 0x87C3, 137517 }, + { 0x87C4, 137521 }, + { 0x87C5, 137513 }, + { 0x87C6, 137437 }, + { 0x87C7, 137265 }, + { 0x87C8, 137269 }, + { 0x87C9, 137261 }, + { 0x87CA, 137612 }, + { 0x87CB, 137616 }, + { 0x87CC, 137608 }, + { 0x87CD, 137491 }, + { 0x87CE, 137495 }, + { 0x87CF, 137487 }, + { 0x87D0, 136750 }, + { 0x87D1, 136746 }, + { 0x87D2, 136754 }, + { 0x87D3, 136738 }, + { 0x87D4, 136734 }, + { 0x87D5, 136742 }, + { 0x87D6, 136731 }, + { 0x87D7, 136978 }, + { 0x87D8, 136983 }, + { 0x87D9, 136973 }, + { 0x87DA, 136988 }, + { 0x87DB, 136998 }, + { 0x87DC, 137003 }, + { 0x87DD, 136993 }, + { 0x87DE, 137008 }, + { 0x87DF, 137013 }, + { 0x87E0, 137019 }, + { 0x87E1, 136830 }, + { 0x87E2, 136834 }, + { 0x87E3, 136826 }, + { 0x87E4, 136853 }, + { 0x87E5, 136862 }, + { 0x87E6, 136849 }, + { 0x87E7, 136857 }, + { 0x87E8, 136883 }, + { 0x87E9, 136889 }, + { 0x87EA, 136877 }, + { 0x87EB, 136901 }, + { 0x87EC, 136907 }, + { 0x87ED, 136895 }, + { 0x87EE, 136957 }, + { 0x87EF, 137065 }, + { 0x87F0, 137070 }, + { 0x87F1, 137182 }, + { 0x87F2, 137168 }, + { 0x87F3, 137196 }, + { 0x87F4, 137165 }, + { 0x87F5, 136967 }, + { 0x87F6, 136843 }, + { 0x87F7, 136871 }, + { 0x87F8, 136918 }, + { 0x87F9, 137190 }, + { 0x87FA, 137176 }, + { 0x87FB, 137204 }, + { 0x87FC, 136962 }, + { 0x87FD, 136838 }, + { 0x87FE, 136866 }, + { 0x87FF, 136913 }, + { 0x8800, 137185 }, + { 0x8801, 137171 }, + { 0x8802, 137199 }, + { 0x8803, 136930 }, + { 0x8804, 136936 }, + { 0x8805, 136924 }, + { 0x8806, 137473 }, + { 0x8807, 137467 }, + { 0x8808, 137327 }, + { 0x8809, 137313 }, + { 0x880A, 137334 }, + { 0x880B, 137320 }, + { 0x880C, 137394 }, + { 0x880D, 137380 }, + { 0x880E, 137387 }, + { 0x880F, 137373 }, + { 0x8810, 137431 }, + { 0x8811, 137425 }, + { 0x8812, 137645 }, + { 0x8813, 137632 }, + { 0x8814, 137658 }, + { 0x8815, 137461 }, + { 0x8816, 137455 }, + { 0x8817, 137290 }, + { 0x8818, 137283 }, + { 0x8819, 137305 }, + { 0x881A, 137297 }, + { 0x881B, 137366 }, + { 0x881C, 137352 }, + { 0x881D, 137359 }, + { 0x881E, 137345 }, + { 0x881F, 137419 }, + { 0x8820, 137413 }, + { 0x8821, 137640 }, + { 0x8822, 137627 }, + { 0x8823, 137653 }, + { 0x8824, 137447 }, + { 0x8825, 137451 }, + { 0x8826, 137443 }, + { 0x8827, 137479 }, + { 0x8828, 137483 }, + { 0x8829, 137279 }, + { 0x882A, 137341 }, + { 0x882B, 137409 }, + { 0x882C, 137405 }, + { 0x882D, 137401 }, + { 0x882E, 137637 }, + { 0x882F, 137624 }, + { 0x8830, 137650 }, + { 0x8831, 137620 }, + { 0x8832, 136781 }, + { 0x8833, 136793 }, + { 0x8834, 136775 }, + { 0x8835, 136787 }, + { 0x8836, 137237 }, + { 0x8837, 137253 }, + { 0x8838, 137221 }, + { 0x8839, 137229 }, + { 0x883A, 137245 }, + { 0x883B, 137213 }, + { 0x883C, 137043 }, + { 0x883D, 137037 }, + { 0x883E, 137506 }, + { 0x883F, 137499 }, + { 0x8840, 137099 }, + { 0x8841, 137094 }, + { 0x8842, 137551 }, + { 0x8843, 137544 }, + { 0x8844, 135016 }, + { 0x8845, 135012 }, + { 0x8846, 134992 }, + { 0x8847, 134995 }, + { 0x8848, 135003 }, + { 0x8849, 135009 }, + { 0x884A, 135020 }, + { 0x884B, 135023 }, + { 0x884C, 134998 }, + { 0x884D, 135006 }, + { 0x884E, 134632 }, + { 0x884F, 134634 }, + { 0x8850, 134649 }, + { 0x8851, 134641 }, + { 0x8852, 134657 }, + { 0x8853, 134645 }, + { 0x8854, 134653 }, + { 0x8855, 134637 }, + { 0x8856, 134605 }, + { 0x8857, 134588 }, + { 0x8858, 134596 }, + { 0x8859, 135056 }, + { 0x885A, 135064 }, + { 0x885B, 135060 }, + { 0x885C, 134936 }, + { 0x885D, 134926 }, + { 0x885E, 134921 }, + { 0x885F, 134931 }, + { 0x8860, 135071 }, + { 0x8861, 135068 }, + { 0x8862, 135074 }, + { 0x8863, 134571 }, + { 0x8864, 134581 }, + { 0x8865, 134578 }, + { 0x8866, 134534 }, + { 0x8867, 134538 }, + { 0x8868, 134563 }, + { 0x8869, 134574 }, + { 0x886A, 134567 }, + { 0x886B, 134584 }, + { 0x886C, 134531 }, + { 0x886D, 135220 }, + { 0x886E, 135223 }, + { 0x886F, 135226 }, + { 0x8870, 136648 }, + { 0x8871, 136651 }, + { 0x8872, 136655 }, + { 0x8873, 136761 }, + { 0x8874, 136764 }, + { 0x8875, 136768 }, + { 0x8876, 136642 }, + { 0x8877, 136758 }, + { 0x8878, 136645 }, + { 0x8879, 134912 }, + { 0x887A, 134918 }, + { 0x887B, 134915 }, + { 0x887C, 134882 }, + { 0x887D, 134886 }, + { 0x887E, 134878 }, + { 0x887F, 134561 }, + { 0x8880, 134694 }, + { 0x8881, 134691 }, + { 0x8882, 134700 }, + { 0x8883, 134697 }, + { 0x8884, 134523 }, + { 0x8885, 134527 }, + { 0x8886, 134513 }, + { 0x8887, 134518 }, + { 0x8888, 134909 }, + { 0x8889, 134906 }, + { 0x888A, 134836 }, + { 0x888B, 134832 }, + { 0x888C, 134828 }, + { 0x888D, 134806 }, + { 0x888E, 134813 }, + { 0x888F, 134809 }, + { 0x8890, 134795 }, + { 0x8891, 134802 }, + { 0x8892, 134798 }, + { 0x8893, 134769 }, + { 0x8894, 134773 }, + { 0x8895, 134777 }, + { 0x8896, 134755 }, + { 0x8897, 134764 }, + { 0x8898, 134759 }, + { 0x8899, 134781 }, + { 0x889A, 134790 }, + { 0x889B, 134785 }, + { 0x889C, 134744 }, + { 0x889D, 134747 }, + { 0x889E, 134751 }, + { 0x889F, 134817 }, + { 0x88A0, 134824 }, + { 0x88A1, 134820 }, + { 0x88A2, 134685 }, + { 0x88A3, 134542 }, + { 0x88A4, 134547 }, + { 0x88A5, 134840 }, + { 0x88A6, 134847 }, + { 0x88A7, 134843 }, + { 0x88A8, 134987 }, + { 0x88A9, 134983 }, + { 0x88AA, 134952 }, + { 0x88AB, 134957 }, + { 0x88AC, 134978 }, + { 0x88AD, 134963 }, + { 0x88AE, 134973 }, + { 0x88AF, 134968 }, + { 0x88B0, 134851 }, + { 0x88B1, 134875 }, + { 0x88B2, 134862 }, + { 0x88B3, 134866 }, + { 0x88B4, 134853 }, + { 0x88B5, 134857 }, + { 0x88B6, 134871 }, + { 0x88B7, 136811 }, + { 0x88B8, 137273 }, + { 0x88B9, 134689 }, + { 0x88BA, 134630 }, + { 0x88BB, 136219 }, + { 0x88BC, 135207 }, + { 0x88BD, 135211 }, + { 0x88BE, 136214 }, + { 0x88BF, 136221 }, + { 0x88C0, 135215 }, + { 0x88C1, 136593 }, + { 0x88C2, 136589 }, + { 0x88C3, 136597 }, + { 0x88C4, 134899 }, + { 0x88C5, 134682 }, + { 0x88C6, 134661 }, + { 0x88C7, 134664 }, + { 0x88C8, 134667 }, + { 0x88C9, 134670 }, + { 0x88CA, 134673 }, + { 0x88CB, 134676 }, + { 0x88CC, 134679 }, + { 0x88CD, 134941 }, + { 0x88CE, 136772 }, + { 0x88CF, 137210 }, + { 0x88D0, 135159 }, + { 0x88D1, 135156 }, + { 0x88D2, 135146 }, + { 0x88D3, 135142 }, + { 0x88D4, 135153 }, + { 0x88D5, 135149 }, + { 0x88D6, 134714 }, + { 0x88D7, 134627 }, + { 0x88D8, 136212 }, + { 0x88D9, 134712 }, + { 0x88DA, 136534 }, + { 0x88DB, 134612 }, + { 0x88DC, 134615 }, + { 0x88DD, 134618 }, + { 0x88DE, 134621 }, + { 0x88DF, 134624 }, + { 0x88E0, 135162 }, + { 0x88E1, 135165 }, + { 0x88E2, 135168 }, + { 0x88E3, 135171 }, + { 0x88E4, 135174 }, + { 0x88E5, 135177 }, + { 0x88E6, 135180 }, + { 0x88E7, 135183 }, + { 0x88E8, 135186 }, + { 0x88E9, 135189 }, + { 0x88EA, 135192 }, + { 0x88EB, 135195 }, + { 0x88EC, 135198 }, + { 0x88ED, 135201 }, + { 0x88EE, 135204 }, + { 0x88EF, 32097 }, + { 0x88F0, 32859 }, + { 0x88F1, 33238 }, + { 0x88F2, 32813 }, + { 0x88F3, 33103 }, + { 0x88F4, 32133 }, + { 0x88F5, 32606 }, + { 0x88F6, 32825 }, + { 0x88F7, 32545 }, + { 0x88F8, 31008 }, + { 0x88F9, 33354 }, + { 0x88FA, 31943 }, + { 0x88FB, 31950 }, + { 0x88FC, 32584 }, + { 0x88FD, 33324 }, + { 0x88FE, 33365 }, + { 0x88FF, 33244 }, + { 0x8900, 30056 }, + { 0x8901, 32076 }, + { 0x8902, 29960 }, + { 0x8903, 31920 }, + { 0x8904, 32571 }, + { 0x8905, 30797 }, + { 0x8906, 32217 }, + { 0x8907, 31999 }, + { 0x8908, 32084 }, + { 0x8909, 29773 }, + { 0x890A, 30532 }, + { 0x890B, 32225 }, + { 0x890C, 29173 }, + { 0x890D, 30866 }, + { 0x890E, 29290 }, + { 0x890F, 30093 }, + { 0x8910, 30268 }, + { 0x8911, 30813 }, + { 0x8912, 30970 }, + { 0x8913, 31090 }, + { 0x8914, 117661 }, + { 0x8915, 117686 }, + { 0x8916, 117710 }, + { 0x8917, 117775 }, + { 0x8918, 117726 }, + { 0x8919, 117751 }, + { 0x891A, 117804 }, + { 0x891B, 117771 }, + { 0x891C, 117698 }, + { 0x891D, 117779 }, + { 0x891E, 117649 }, + { 0x891F, 117759 }, + { 0x8920, 117702 }, + { 0x8921, 117796 }, + { 0x8922, 117800 }, + { 0x8923, 117734 }, + { 0x8924, 117670 }, + { 0x8925, 117763 }, + { 0x8926, 117738 }, + { 0x8927, 117742 }, + { 0x8928, 117767 }, + { 0x8929, 117682 }, + { 0x892A, 117730 }, + { 0x892B, 117694 }, + { 0x892C, 117706 }, + { 0x892D, 117678 }, + { 0x892E, 117755 }, + { 0x892F, 117674 }, + { 0x8930, 117722 }, + { 0x8931, 117718 }, + { 0x8932, 117714 }, + { 0x8933, 117657 }, + { 0x8934, 117746 }, + { 0x8935, 117653 }, + { 0x8936, 117790 }, + { 0x8937, 117665 }, + { 0x8938, 117784 }, + { 0x8939, 117690 }, + { 0x893A, 108551 }, + { 0x893B, 108576 }, + { 0x893C, 108648 }, + { 0x893D, 108668 }, + { 0x893E, 108581 }, + { 0x893F, 108623 }, + { 0x8940, 108683 }, + { 0x8941, 108658 }, + { 0x8942, 108561 }, + { 0x8943, 108633 }, + { 0x8944, 108591 }, + { 0x8945, 108596 }, + { 0x8946, 108566 }, + { 0x8947, 108638 }, + { 0x8948, 108601 }, + { 0x8949, 108606 }, + { 0x894A, 108643 }, + { 0x894B, 108571 }, + { 0x894C, 108586 }, + { 0x894D, 108618 }, + { 0x894E, 108678 }, + { 0x894F, 108663 }, + { 0x8950, 108673 }, + { 0x8951, 108693 }, + { 0x8952, 108556 }, + { 0x8953, 108653 }, + { 0x8954, 108688 }, + { 0x8955, 108706 }, + { 0x8956, 108736 }, + { 0x8957, 108628 }, + { 0x8958, 108711 }, + { 0x8959, 108722 }, + { 0x895A, 108717 }, + { 0x895B, 89582 }, + { 0x895C, 89602 }, + { 0x895D, 89647 }, + { 0x895E, 89667 }, + { 0x895F, 89607 }, + { 0x8960, 89632 }, + { 0x8961, 89689 }, + { 0x8962, 89652 }, + { 0x8963, 89587 }, + { 0x8964, 89637 }, + { 0x8965, 89617 }, + { 0x8966, 89592 }, + { 0x8967, 89642 }, + { 0x8968, 89622 }, + { 0x8969, 89597 }, + { 0x896A, 89612 }, + { 0x896B, 89627 }, + { 0x896C, 89684 }, + { 0x896D, 89657 }, + { 0x896E, 89679 }, + { 0x896F, 89699 }, + { 0x8970, 89705 }, + { 0x8971, 89672 }, + { 0x8972, 89710 }, + { 0x8973, 89662 }, + { 0x8974, 89694 }, + { 0x8975, 108611 }, + { 0x8976, 108698 }, + { 0x8977, 108728 }, + { 0x8978, 117214 }, + { 0x8979, 109464 }, + { 0x897A, 109584 }, + { 0x897B, 109564 }, + { 0x897C, 109499 }, + { 0x897D, 109449 }, + { 0x897E, 109469 }, + { 0x897F, 109509 }, + { 0x8980, 109544 }, + { 0x8981, 109424 }, + { 0x8982, 109459 }, + { 0x8983, 109494 }, + { 0x8984, 109519 }, + { 0x8985, 109539 }, + { 0x8986, 109604 }, + { 0x8987, 109454 }, + { 0x8988, 109429 }, + { 0x8989, 109569 }, + { 0x898A, 109559 }, + { 0x898B, 109504 }, + { 0x898C, 109609 }, + { 0x898D, 109589 }, + { 0x898E, 109439 }, + { 0x898F, 109489 }, + { 0x8990, 109484 }, + { 0x8991, 109514 }, + { 0x8992, 109554 }, + { 0x8993, 109479 }, + { 0x8994, 109594 }, + { 0x8995, 109549 }, + { 0x8996, 109524 }, + { 0x8997, 109599 }, + { 0x8998, 109529 }, + { 0x8999, 109534 }, + { 0x899A, 109574 }, + { 0x899B, 109444 }, + { 0x899C, 109579 }, + { 0x899D, 109389 }, + { 0x899E, 109419 }, + { 0x899F, 109399 }, + { 0x89A0, 109409 }, + { 0x89A1, 109404 }, + { 0x89A2, 109474 }, + { 0x89A3, 109394 }, + { 0x89A4, 109434 }, + { 0x89A5, 109414 }, + { 0x89A6, 109614 }, + { 0x89A7, 109630 }, + { 0x89A8, 109626 }, + { 0x89A9, 109638 }, + { 0x89AA, 109634 }, + { 0x89AB, 109622 }, + { 0x89AC, 109618 }, + { 0x89AD, 109321 }, + { 0x89AE, 109309 }, + { 0x89AF, 109327 }, + { 0x89B0, 109315 }, + { 0x89B1, 109333 }, + { 0x89B2, 109303 }, + { 0x89B3, 109652 }, + { 0x89B4, 109369 }, + { 0x89B5, 109339 }, + { 0x89B6, 109349 }, + { 0x89B7, 109384 }, + { 0x89B8, 109359 }, + { 0x89B9, 109354 }, + { 0x89BA, 109344 }, + { 0x89BB, 109379 }, + { 0x89BC, 109374 }, + { 0x89BD, 109364 }, + { 0x89BE, 109647 }, + { 0x89BF, 109642 }, + { 0x89C0, 17406 }, + { 0x89C1, 17373 }, + { 0x89C2, 17415 }, + { 0x89C3, 17376 }, + { 0x89C4, 17394 }, + { 0x89C5, 17382 }, + { 0x89C6, 17400 }, + { 0x89C7, 17403 }, + { 0x89C8, 17427 }, + { 0x89C9, 17412 }, + { 0x89CA, 17424 }, + { 0x89CB, 17421 }, + { 0x89CC, 17418 }, + { 0x89CD, 17391 }, + { 0x89CE, 17385 }, + { 0x89CF, 17409 }, + { 0x89D0, 17397 }, + { 0x89D1, 17361 }, + { 0x89D2, 17434 }, + { 0x89D3, 17388 }, + { 0x89D4, 17446 }, + { 0x89D5, 17367 }, + { 0x89D6, 17358 }, + { 0x89D7, 17430 }, + { 0x89D8, 17379 }, + { 0x89D9, 17442 }, + { 0x89DA, 17364 }, + { 0x89DB, 17370 }, + { 0x89DC, 17438 }, + { 0x89DD, 17355 }, + { 0x89DE, 17351 }, + { 0x89DF, 69154 }, + { 0x89E0, 69139 }, + { 0x89E1, 69160 }, + { 0x89E2, 69163 }, + { 0x89E3, 69166 }, + { 0x89E4, 69175 }, + { 0x89E5, 69217 }, + { 0x89E6, 69244 }, + { 0x89E7, 69187 }, + { 0x89E8, 69193 }, + { 0x89E9, 69199 }, + { 0x89EA, 69208 }, + { 0x89EB, 69250 }, + { 0x89EC, 69172 }, + { 0x89ED, 69205 }, + { 0x89EE, 69247 }, + { 0x89EF, 69181 }, + { 0x89F0, 69220 }, + { 0x89F1, 69214 }, + { 0x89F2, 69211 }, + { 0x89F3, 69184 }, + { 0x89F4, 69148 }, + { 0x89F5, 69157 }, + { 0x89F6, 69202 }, + { 0x89F7, 69190 }, + { 0x89F8, 69232 }, + { 0x89F9, 69178 }, + { 0x89FA, 69142 }, + { 0x89FB, 69145 }, + { 0x89FC, 69235 }, + { 0x89FD, 69151 }, + { 0x89FE, 69268 }, + { 0x89FF, 69256 }, + { 0x8A00, 69253 }, + { 0x8A01, 69241 }, + { 0x8A02, 69265 }, + { 0x8A03, 69226 }, + { 0x8A04, 69229 }, + { 0x8A05, 69196 }, + { 0x8A06, 69169 }, + { 0x8A07, 69223 }, + { 0x8A08, 69238 }, + { 0x8A09, 69259 }, + { 0x8A0A, 69262 }, + { 0x8A0B, 69100 }, + { 0x8A0C, 69106 }, + { 0x8A0D, 69097 }, + { 0x8A0E, 69103 }, + { 0x8A0F, 69127 }, + { 0x8A10, 69109 }, + { 0x8A11, 69115 }, + { 0x8A12, 69136 }, + { 0x8A13, 69121 }, + { 0x8A14, 69118 }, + { 0x8A15, 69112 }, + { 0x8A16, 69133 }, + { 0x8A17, 69130 }, + { 0x8A18, 69124 }, + { 0x8A19, 69094 }, + { 0x8A1A, 7194 }, + { 0x8A1B, 7242 }, + { 0x8A1C, 7238 }, + { 0x8A1D, 7246 }, + { 0x8A1E, 7286 }, + { 0x8A1F, 7182 }, + { 0x8A20, 7210 }, + { 0x8A21, 7202 }, + { 0x8A22, 7266 }, + { 0x8A23, 7206 }, + { 0x8A24, 7190 }, + { 0x8A25, 7230 }, + { 0x8A26, 7282 }, + { 0x8A27, 7234 }, + { 0x8A28, 7226 }, + { 0x8A29, 7198 }, + { 0x8A2A, 7250 }, + { 0x8A2B, 7254 }, + { 0x8A2C, 7258 }, + { 0x8A2D, 7262 }, + { 0x8A2E, 7186 }, + { 0x8A2F, 7274 }, + { 0x8A30, 7214 }, + { 0x8A31, 7218 }, + { 0x8A32, 7222 }, + { 0x8A33, 7278 }, + { 0x8A34, 7270 }, + { 0x8A35, 7126 }, + { 0x8A36, 7130 }, + { 0x8A37, 7138 }, + { 0x8A38, 7122 }, + { 0x8A39, 7134 }, + { 0x8A3A, 7166 }, + { 0x8A3B, 7142 }, + { 0x8A3C, 7150 }, + { 0x8A3D, 7178 }, + { 0x8A3E, 7158 }, + { 0x8A3F, 7154 }, + { 0x8A40, 7146 }, + { 0x8A41, 7174 }, + { 0x8A42, 7170 }, + { 0x8A43, 7162 }, + { 0x8A44, 179 }, + { 0x8A45, 239 }, + { 0x8A46, 271 }, + { 0x8A47, 275 }, + { 0x8A48, 243 }, + { 0x8A49, 247 }, + { 0x8A4A, 167 }, + { 0x8A4B, 191 }, + { 0x8A4C, 187 }, + { 0x8A4D, 195 }, + { 0x8A4E, 199 }, + { 0x8A4F, 203 }, + { 0x8A50, 175 }, + { 0x8A51, 235 }, + { 0x8A52, 231 }, + { 0x8A53, 267 }, + { 0x8A54, 223 }, + { 0x8A55, 227 }, + { 0x8A56, 183 }, + { 0x8A57, 255 }, + { 0x8A58, 279 }, + { 0x8A59, 251 }, + { 0x8A5A, 283 }, + { 0x8A5B, 259 }, + { 0x8A5C, 171 }, + { 0x8A5D, 219 }, + { 0x8A5E, 215 }, + { 0x8A5F, 207 }, + { 0x8A60, 263 }, + { 0x8A61, 211 }, + { 0x8A62, 115 }, + { 0x8A63, 119 }, + { 0x8A64, 123 }, + { 0x8A65, 151 }, + { 0x8A66, 127 }, + { 0x8A67, 135 }, + { 0x8A68, 163 }, + { 0x8A69, 143 }, + { 0x8A6A, 139 }, + { 0x8A6B, 131 }, + { 0x8A6C, 159 }, + { 0x8A6D, 155 }, + { 0x8A6E, 147 }, + { 0x8A6F, 287 }, + { 0x8A70, 102973 }, + { 0x8A71, 102985 }, + { 0x8A72, 102979 }, + { 0x8A73, 103204 }, + { 0x8A74, 103207 }, + { 0x8A75, 102976 }, + { 0x8A76, 102982 }, + { 0x8A77, 103286 }, + { 0x8A78, 102970 }, + { 0x8A79, 103201 }, + { 0x8A7A, 102967 }, + { 0x8A7B, 103258 }, + { 0x8A7C, 103294 }, + { 0x8A7D, 103270 }, + { 0x8A7E, 103302 }, + { 0x8A7F, 103266 }, + { 0x8A80, 103234 }, + { 0x8A81, 103274 }, + { 0x8A82, 103254 }, + { 0x8A83, 103290 }, + { 0x8A84, 103250 }, + { 0x8A85, 103246 }, + { 0x8A86, 103282 }, + { 0x8A87, 103242 }, + { 0x8A88, 103238 }, + { 0x8A89, 103278 }, + { 0x8A8A, 103262 }, + { 0x8A8B, 103298 }, + { 0x8A8C, 37375 }, + { 0x8A8D, 37380 }, + { 0x8A8E, 37385 }, + { 0x8A8F, 37695 }, + { 0x8A90, 37846 }, + { 0x8A91, 37750 }, + { 0x8A92, 37610 }, + { 0x8A93, 38282 }, + { 0x8A94, 37390 }, + { 0x8A95, 37395 }, + { 0x8A96, 37400 }, + { 0x8A97, 38004 }, + { 0x8A98, 37964 }, + { 0x8A99, 37944 }, + { 0x8A9A, 37595 }, + { 0x8A9B, 38358 }, + { 0x8A9C, 38090 }, + { 0x8A9D, 37675 }, + { 0x8A9E, 37615 }, + { 0x8A9F, 38069 }, + { 0x8AA0, 37405 }, + { 0x8AA1, 37410 }, + { 0x8AA2, 37415 }, + { 0x8AA3, 37665 }, + { 0x8AA4, 37841 }, + { 0x8AA5, 38145 }, + { 0x8AA6, 38333 }, + { 0x8AA7, 37420 }, + { 0x8AA8, 37425 }, + { 0x8AA9, 37430 }, + { 0x8AAA, 38125 }, + { 0x8AAB, 37856 }, + { 0x8AAC, 37886 }, + { 0x8AAD, 38064 }, + { 0x8AAE, 37435 }, + { 0x8AAF, 37440 }, + { 0x8AB0, 37445 }, + { 0x8AB1, 38191 }, + { 0x8AB2, 37871 }, + { 0x8AB3, 38201 }, + { 0x8AB4, 38110 }, + { 0x8AB5, 38059 }, + { 0x8AB6, 38029 }, + { 0x8AB7, 38049 }, + { 0x8AB8, 38363 }, + { 0x8AB9, 38277 }, + { 0x8ABA, 37465 }, + { 0x8ABB, 37470 }, + { 0x8ABC, 37475 }, + { 0x8ABD, 38186 }, + { 0x8ABE, 37954 }, + { 0x8ABF, 38054 }, + { 0x8AC0, 37765 }, + { 0x8AC1, 38368 }, + { 0x8AC2, 37495 }, + { 0x8AC3, 37500 }, + { 0x8AC4, 37505 }, + { 0x8AC5, 37790 }, + { 0x8AC6, 37735 }, + { 0x8AC7, 37640 }, + { 0x8AC8, 38140 }, + { 0x8AC9, 37923 }, + { 0x8ACA, 37450 }, + { 0x8ACB, 37455 }, + { 0x8ACC, 37460 }, + { 0x8ACD, 37816 }, + { 0x8ACE, 38287 }, + { 0x8ACF, 38292 }, + { 0x8AD0, 37480 }, + { 0x8AD1, 37485 }, + { 0x8AD2, 37490 }, + { 0x8AD3, 37826 }, + { 0x8AD4, 37645 }, + { 0x8AD5, 37891 }, + { 0x8AD6, 37715 }, + { 0x8AD7, 37510 }, + { 0x8AD8, 37515 }, + { 0x8AD9, 37520 }, + { 0x8ADA, 38160 }, + { 0x8ADB, 37939 }, + { 0x8ADC, 38175 }, + { 0x8ADD, 37685 }, + { 0x8ADE, 38261 }, + { 0x8ADF, 37525 }, + { 0x8AE0, 37530 }, + { 0x8AE1, 37535 }, + { 0x8AE2, 37918 }, + { 0x8AE3, 37770 }, + { 0x8AE4, 38079 }, + { 0x8AE5, 37979 }, + { 0x8AE6, 37540 }, + { 0x8AE7, 37545 }, + { 0x8AE8, 37550 }, + { 0x8AE9, 37760 }, + { 0x8AEA, 37745 }, + { 0x8AEB, 38039 }, + { 0x8AEC, 37811 }, + { 0x8AED, 38373 }, + { 0x8AEE, 37876 }, + { 0x8AEF, 37555 }, + { 0x8AF0, 37560 }, + { 0x8AF1, 37565 }, + { 0x8AF2, 37959 }, + { 0x8AF3, 38221 }, + { 0x8AF4, 38267 }, + { 0x8AF5, 37575 }, + { 0x8AF6, 38318 }, + { 0x8AF7, 37570 }, + { 0x8AF8, 37851 }, + { 0x8AF9, 37580 }, + { 0x8AFA, 38074 }, + { 0x8AFB, 37785 }, + { 0x8AFC, 38014 }, + { 0x8AFD, 37635 }, + { 0x8AFE, 38024 }, + { 0x8AFF, 37806 }, + { 0x8B00, 37630 }, + { 0x8B01, 38353 }, + { 0x8B02, 37600 }, + { 0x8B03, 37821 }, + { 0x8B04, 37585 }, + { 0x8B05, 37780 }, + { 0x8B06, 37949 }, + { 0x8B07, 38105 }, + { 0x8B08, 38155 }, + { 0x8B09, 37974 }, + { 0x8B0A, 38170 }, + { 0x8B0B, 38009 }, + { 0x8B0C, 37800 }, + { 0x8B0D, 37902 }, + { 0x8B0E, 38302 }, + { 0x8B0F, 38150 }, + { 0x8B10, 37929 }, + { 0x8B11, 38216 }, + { 0x8B12, 38338 }, + { 0x8B13, 38206 }, + { 0x8B14, 38211 }, + { 0x8B15, 38308 }, + { 0x8B16, 37655 }, + { 0x8B17, 38272 }, + { 0x8B18, 37710 }, + { 0x8B19, 37866 }, + { 0x8B1A, 37620 }, + { 0x8B1B, 37775 }, + { 0x8B1C, 37625 }, + { 0x8B1D, 37881 }, + { 0x8B1E, 37700 }, + { 0x8B1F, 38100 }, + { 0x8B20, 37680 }, + { 0x8B21, 37984 }, + { 0x8B22, 37605 }, + { 0x8B23, 38328 }, + { 0x8B24, 37730 }, + { 0x8B25, 38241 }, + { 0x8B26, 38251 }, + { 0x8B27, 38323 }, + { 0x8B28, 38180 }, + { 0x8B29, 37896 }, + { 0x8B2A, 38084 }, + { 0x8B2B, 38034 }, + { 0x8B2C, 37831 }, + { 0x8B2D, 37740 }, + { 0x8B2E, 37590 }, + { 0x8B2F, 37913 }, + { 0x8B30, 37934 }, + { 0x8B31, 38165 }, + { 0x8B32, 37994 }, + { 0x8B33, 37650 }, + { 0x8B34, 38115 }, + { 0x8B35, 37836 }, + { 0x8B36, 37908 }, + { 0x8B37, 37725 }, + { 0x8B38, 37720 }, + { 0x8B39, 38231 }, + { 0x8B3A, 37989 }, + { 0x8B3B, 38019 }, + { 0x8B3C, 37999 }, + { 0x8B3D, 38343 }, + { 0x8B3E, 37969 }, + { 0x8B3F, 37705 }, + { 0x8B40, 37690 }, + { 0x8B41, 38135 }, + { 0x8B42, 38348 }, + { 0x8B43, 38120 }, + { 0x8B44, 38044 }, + { 0x8B45, 38297 }, + { 0x8B46, 38313 }, + { 0x8B47, 38130 }, + { 0x8B48, 38246 }, + { 0x8B49, 37795 }, + { 0x8B4A, 38095 }, + { 0x8B4B, 37755 }, + { 0x8B4C, 38196 }, + { 0x8B4D, 37660 }, + { 0x8B4E, 38226 }, + { 0x8B4F, 37861 }, + { 0x8B50, 37670 }, + { 0x8B51, 37339 }, + { 0x8B52, 37347 }, + { 0x8B53, 37371 }, + { 0x8B54, 37355 }, + { 0x8B55, 37351 }, + { 0x8B56, 37343 }, + { 0x8B57, 37367 }, + { 0x8B58, 37363 }, + { 0x8B59, 37359 }, + { 0x8B5A, 38389 }, + { 0x8B5B, 38384 }, + { 0x8B5C, 38400 }, + { 0x8B5D, 38410 }, + { 0x8B5E, 38378 }, + { 0x8B5F, 38394 }, + { 0x8B60, 38405 }, + { 0x8B61, 17859 }, + { 0x8B62, 17879 }, + { 0x8B63, 17867 }, + { 0x8B64, 17871 }, + { 0x8B65, 17767 }, + { 0x8B66, 17883 }, + { 0x8B67, 17783 }, + { 0x8B68, 17803 }, + { 0x8B69, 17787 }, + { 0x8B6A, 17751 }, + { 0x8B6B, 17771 }, + { 0x8B6C, 17755 }, + { 0x8B6D, 17759 }, + { 0x8B6E, 17811 }, + { 0x8B6F, 17851 }, + { 0x8B70, 17847 }, + { 0x8B71, 17835 }, + { 0x8B72, 17819 }, + { 0x8B73, 17799 }, + { 0x8B74, 17763 }, + { 0x8B75, 17863 }, + { 0x8B76, 17807 }, + { 0x8B77, 17779 }, + { 0x8B78, 17875 }, + { 0x8B79, 17775 }, + { 0x8B7A, 17839 }, + { 0x8B7B, 17791 }, + { 0x8B7C, 17831 }, + { 0x8B7D, 17795 }, + { 0x8B7E, 17823 }, + { 0x8B7F, 17815 }, + { 0x8B80, 17855 }, + { 0x8B81, 17827 }, + { 0x8B82, 17843 }, + { 0x8B83, 17720 }, + { 0x8B84, 17740 }, + { 0x8B85, 17728 }, + { 0x8B86, 17732 }, + { 0x8B87, 17628 }, + { 0x8B88, 17744 }, + { 0x8B89, 17644 }, + { 0x8B8A, 17664 }, + { 0x8B8B, 17648 }, + { 0x8B8C, 17612 }, + { 0x8B8D, 17632 }, + { 0x8B8E, 17616 }, + { 0x8B8F, 17620 }, + { 0x8B90, 17672 }, + { 0x8B91, 17712 }, + { 0x8B92, 17708 }, + { 0x8B93, 17696 }, + { 0x8B94, 17680 }, + { 0x8B95, 17660 }, + { 0x8B96, 17624 }, + { 0x8B97, 17724 }, + { 0x8B98, 17668 }, + { 0x8B99, 17640 }, + { 0x8B9A, 17736 }, + { 0x8B9B, 17636 }, + { 0x8B9C, 17700 }, + { 0x8B9D, 17652 }, + { 0x8B9E, 17692 }, + { 0x8B9F, 17656 }, + { 0x8BA0, 17684 }, + { 0x8BA1, 17676 }, + { 0x8BA2, 17716 }, + { 0x8BA3, 17688 }, + { 0x8BA4, 17704 }, + { 0x8BA5, 17575 }, + { 0x8BA6, 17748 }, + { 0x8BA7, 17902 }, + { 0x8BA8, 17608 }, + { 0x8BA9, 17899 }, + { 0x8BAA, 17895 }, + { 0x8BAB, 17610 }, + { 0x8BAC, 17905 }, + { 0x8BAD, 17596 }, + { 0x8BAE, 17578 }, + { 0x8BAF, 17584 }, + { 0x8BB0, 17605 }, + { 0x8BB1, 17590 }, + { 0x8BB2, 17587 }, + { 0x8BB3, 17581 }, + { 0x8BB4, 17602 }, + { 0x8BB5, 17599 }, + { 0x8BB6, 17593 }, + { 0x8BB7, 17891 }, + { 0x8BB8, 17887 }, + { 0x8BB9, 27071 }, + { 0x8BBA, 27108 }, + { 0x8BBB, 27227 }, + { 0x8BBC, 27136 }, + { 0x8BBD, 27122 }, + { 0x8BBE, 27085 }, + { 0x8BBF, 27204 }, + { 0x8BC0, 27168 }, + { 0x8BC1, 27154 }, + { 0x8BC2, 27099 }, + { 0x8BC3, 27272 }, + { 0x8BC4, 27263 }, + { 0x8BC5, 27191 }, + { 0x8BC6, 27182 }, + { 0x8BC7, 27218 }, + { 0x8BC8, 27285 }, + { 0x8BC9, 27241 }, + { 0x8BCA, 27254 }, + { 0x8BCB, 27075 }, + { 0x8BCC, 27112 }, + { 0x8BCD, 27231 }, + { 0x8BCE, 27140 }, + { 0x8BCF, 27126 }, + { 0x8BD0, 27089 }, + { 0x8BD1, 27208 }, + { 0x8BD2, 27172 }, + { 0x8BD3, 27158 }, + { 0x8BD4, 27080 }, + { 0x8BD5, 27117 }, + { 0x8BD6, 27236 }, + { 0x8BD7, 27145 }, + { 0x8BD8, 27131 }, + { 0x8BD9, 27094 }, + { 0x8BDA, 27213 }, + { 0x8BDB, 27177 }, + { 0x8BDC, 27163 }, + { 0x8BDD, 27103 }, + { 0x8BDE, 27276 }, + { 0x8BDF, 27267 }, + { 0x8BE0, 27195 }, + { 0x8BE1, 27186 }, + { 0x8BE2, 27222 }, + { 0x8BE3, 27289 }, + { 0x8BE4, 27245 }, + { 0x8BE5, 27258 }, + { 0x8BE6, 27150 }, + { 0x8BE7, 27250 }, + { 0x8BE8, 27063 }, + { 0x8BE9, 27200 }, + { 0x8BEA, 27281 }, + { 0x8BEB, 27294 }, + { 0x8BEC, 27304 }, + { 0x8BED, 27334 }, + { 0x8BEE, 27314 }, + { 0x8BEF, 27309 }, + { 0x8BF0, 27299 }, + { 0x8BF1, 27329 }, + { 0x8BF2, 27324 }, + { 0x8BF3, 27319 }, + { 0x8BF4, 27375 }, + { 0x8BF5, 27360 }, + { 0x8BF6, 27355 }, + { 0x8BF7, 27365 }, + { 0x8BF8, 27067 }, + { 0x8BF9, 27339 }, + { 0x8BFA, 27350 }, + { 0x8BFB, 27344 }, + { 0x8BFC, 27370 }, + { 0x8BFD, 77811 }, + { 0x8BFE, 77848 }, + { 0x8BFF, 77959 }, + { 0x8C00, 77876 }, + { 0x8C01, 77862 }, + { 0x8C02, 77825 }, + { 0x8C03, 77936 }, + { 0x8C04, 77904 }, + { 0x8C05, 77890 }, + { 0x8C06, 77839 }, + { 0x8C07, 78000 }, + { 0x8C08, 77991 }, + { 0x8C09, 77927 }, + { 0x8C0A, 77918 }, + { 0x8C0B, 77950 }, + { 0x8C0C, 78009 }, + { 0x8C0D, 77973 }, + { 0x8C0E, 77982 }, + { 0x8C0F, 77815 }, + { 0x8C10, 77852 }, + { 0x8C11, 77963 }, + { 0x8C12, 77880 }, + { 0x8C13, 77866 }, + { 0x8C14, 77829 }, + { 0x8C15, 77940 }, + { 0x8C16, 77908 }, + { 0x8C17, 77894 }, + { 0x8C18, 77820 }, + { 0x8C19, 77857 }, + { 0x8C1A, 77968 }, + { 0x8C1B, 77885 }, + { 0x8C1C, 77871 }, + { 0x8C1D, 77834 }, + { 0x8C1E, 77945 }, + { 0x8C1F, 77913 }, + { 0x8C20, 77899 }, + { 0x8C21, 77843 }, + { 0x8C22, 78004 }, + { 0x8C23, 77995 }, + { 0x8C24, 77931 }, + { 0x8C25, 77922 }, + { 0x8C26, 77954 }, + { 0x8C27, 78013 }, + { 0x8C28, 77977 }, + { 0x8C29, 77986 }, + { 0x8C2A, 78028 }, + { 0x8C2B, 78053 }, + { 0x8C2C, 78095 }, + { 0x8C2D, 78069 }, + { 0x8C2E, 78064 }, + { 0x8C2F, 78031 }, + { 0x8C30, 78090 }, + { 0x8C31, 78085 }, + { 0x8C32, 78080 }, + { 0x8C33, 78042 }, + { 0x8C34, 78074 }, + { 0x8C35, 78036 }, + { 0x8C36, 78058 }, + { 0x8C37, 78047 }, + { 0x8C38, 78018 }, + { 0x8C39, 78023 }, + { 0x8C3A, 51823 }, + { 0x8C3B, 51778 }, + { 0x8C3C, 51826 }, + { 0x8C3D, 51784 }, + { 0x8C3E, 51814 }, + { 0x8C3F, 51847 }, + { 0x8C40, 51790 }, + { 0x8C41, 51808 }, + { 0x8C42, 51817 }, + { 0x8C43, 51793 }, + { 0x8C44, 51796 }, + { 0x8C45, 51832 }, + { 0x8C46, 51835 }, + { 0x8C47, 51838 }, + { 0x8C48, 51775 }, + { 0x8C49, 51787 }, + { 0x8C4A, 51805 }, + { 0x8C4B, 51799 }, + { 0x8C4C, 51802 }, + { 0x8C4D, 51853 }, + { 0x8C4E, 51811 }, + { 0x8C4F, 51844 }, + { 0x8C50, 51829 }, + { 0x8C51, 51841 }, + { 0x8C52, 51781 }, + { 0x8C53, 51820 }, + { 0x8C54, 51850 }, + { 0x8C55, 52026 }, + { 0x8C56, 52038 }, + { 0x8C57, 52030 }, + { 0x8C58, 52034 }, + { 0x8C59, 52046 }, + { 0x8C5A, 52090 }, + { 0x8C5B, 52062 }, + { 0x8C5C, 52058 }, + { 0x8C5D, 52086 }, + { 0x8C5E, 52066 }, + { 0x8C5F, 52070 }, + { 0x8C60, 52098 }, + { 0x8C61, 52102 }, + { 0x8C62, 52106 }, + { 0x8C63, 52042 }, + { 0x8C64, 52054 }, + { 0x8C65, 52078 }, + { 0x8C66, 52074 }, + { 0x8C67, 52118 }, + { 0x8C68, 52082 }, + { 0x8C69, 52110 }, + { 0x8C6A, 52094 }, + { 0x8C6B, 52050 }, + { 0x8C6C, 52114 }, + { 0x8C6D, 51992 }, + { 0x8C6E, 51972 }, + { 0x8C6F, 51988 }, + { 0x8C70, 51976 }, + { 0x8C71, 52000 }, + { 0x8C72, 52004 }, + { 0x8C73, 51964 }, + { 0x8C74, 51984 }, + { 0x8C75, 51980 }, + { 0x8C76, 52012 }, + { 0x8C77, 51996 }, + { 0x8C78, 51968 }, + { 0x8C79, 52008 }, + { 0x8C7A, 52021 }, + { 0x8C7B, 52016 }, + { 0x8C7C, 52140 }, + { 0x8C7D, 52188 }, + { 0x8C7E, 52156 }, + { 0x8C7F, 52152 }, + { 0x8C80, 52172 }, + { 0x8C81, 52180 }, + { 0x8C82, 52160 }, + { 0x8C83, 52196 }, + { 0x8C84, 52200 }, + { 0x8C85, 52204 }, + { 0x8C86, 52136 }, + { 0x8C87, 52148 }, + { 0x8C88, 52168 }, + { 0x8C89, 52164 }, + { 0x8C8A, 52216 }, + { 0x8C8B, 52176 }, + { 0x8C8C, 52208 }, + { 0x8C8D, 52192 }, + { 0x8C8E, 52144 }, + { 0x8C8F, 52184 }, + { 0x8C90, 52212 }, + { 0x8C91, 52220 }, + { 0x8C92, 52225 }, + { 0x8C93, 51920 }, + { 0x8C94, 51860 }, + { 0x8C95, 51924 }, + { 0x8C96, 51868 }, + { 0x8C97, 51880 }, + { 0x8C98, 51908 }, + { 0x8C99, 51952 }, + { 0x8C9A, 51876 }, + { 0x8C9B, 51900 }, + { 0x8C9C, 51912 }, + { 0x8C9D, 51884 }, + { 0x8C9E, 51932 }, + { 0x8C9F, 51936 }, + { 0x8CA0, 51940 }, + { 0x8CA1, 51856 }, + { 0x8CA2, 51872 }, + { 0x8CA3, 51896 }, + { 0x8CA4, 51888 }, + { 0x8CA5, 51892 }, + { 0x8CA6, 51960 }, + { 0x8CA7, 51904 }, + { 0x8CA8, 51948 }, + { 0x8CA9, 51928 }, + { 0x8CAA, 51944 }, + { 0x8CAB, 51864 }, + { 0x8CAC, 51916 }, + { 0x8CAD, 51956 }, + { 0x8CAE, 52234 }, + { 0x8CAF, 52290 }, + { 0x8CB0, 52242 }, + { 0x8CB1, 52278 }, + { 0x8CB2, 52318 }, + { 0x8CB3, 52250 }, + { 0x8CB4, 52270 }, + { 0x8CB5, 52282 }, + { 0x8CB6, 52254 }, + { 0x8CB7, 52298 }, + { 0x8CB8, 52302 }, + { 0x8CB9, 52306 }, + { 0x8CBA, 52230 }, + { 0x8CBB, 52246 }, + { 0x8CBC, 52266 }, + { 0x8CBD, 52258 }, + { 0x8CBE, 52262 }, + { 0x8CBF, 52326 }, + { 0x8CC0, 52274 }, + { 0x8CC1, 52314 }, + { 0x8CC2, 52294 }, + { 0x8CC3, 52310 }, + { 0x8CC4, 52238 }, + { 0x8CC5, 52286 }, + { 0x8CC6, 52322 }, + { 0x8CC7, 52128 }, + { 0x8CC8, 52122 }, + { 0x8CC9, 74367 }, + { 0x8CCA, 74464 }, + { 0x8CCB, 74419 }, + { 0x8CCC, 74445 }, + { 0x8CCD, 74330 }, + { 0x8CCE, 74438 }, + { 0x8CCF, 74483 }, + { 0x8CD0, 74325 }, + { 0x8CD1, 74359 }, + { 0x8CD2, 74478 }, + { 0x8CD3, 74396 }, + { 0x8CD4, 74381 }, + { 0x8CD5, 74344 }, + { 0x8CD6, 74459 }, + { 0x8CD7, 74433 }, + { 0x8CD8, 74411 }, + { 0x8CD9, 74315 }, + { 0x8CDA, 74349 }, + { 0x8CDB, 74468 }, + { 0x8CDC, 74386 }, + { 0x8CDD, 74371 }, + { 0x8CDE, 74334 }, + { 0x8CDF, 74449 }, + { 0x8CE0, 74423 }, + { 0x8CE1, 74401 }, + { 0x8CE2, 74320 }, + { 0x8CE3, 74354 }, + { 0x8CE4, 74473 }, + { 0x8CE5, 74391 }, + { 0x8CE6, 74376 }, + { 0x8CE7, 74339 }, + { 0x8CE8, 74454 }, + { 0x8CE9, 74428 }, + { 0x8CEA, 74406 }, + { 0x8CEB, 74416 }, + { 0x8CEC, 74493 }, + { 0x8CED, 74490 }, + { 0x8CEE, 74505 }, + { 0x8CEF, 74496 }, + { 0x8CF0, 74499 }, + { 0x8CF1, 74487 }, + { 0x8CF2, 74502 }, + { 0x8CF3, 74442 }, + { 0x8CF4, 74364 }, + { 0x8CF5, 54352 }, + { 0x8CF6, 54503 }, + { 0x8CF7, 54506 }, + { 0x8CF8, 54509 }, + { 0x8CF9, 54512 }, + { 0x8CFA, 54515 }, + { 0x8CFB, 54518 }, + { 0x8CFC, 54521 }, + { 0x8CFD, 54524 }, + { 0x8CFE, 54527 }, + { 0x8CFF, 54530 }, + { 0x8D00, 54533 }, + { 0x8D01, 54536 }, + { 0x8D02, 54539 }, + { 0x8D03, 54542 }, + { 0x8D04, 54545 }, + { 0x8D05, 54548 }, + { 0x8D06, 54551 }, + { 0x8D07, 54554 }, + { 0x8D08, 54557 }, + { 0x8D09, 54560 }, + { 0x8D0A, 54563 }, + { 0x8D0B, 54566 }, + { 0x8D0C, 54569 }, + { 0x8D0D, 54572 }, + { 0x8D0E, 54575 }, + { 0x8D0F, 54578 }, + { 0x8D10, 54581 }, + { 0x8D11, 54584 }, + { 0x8D12, 54587 }, + { 0x8D13, 54590 }, + { 0x8D14, 54593 }, + { 0x8D15, 54596 }, + { 0x8D16, 54599 }, + { 0x8D17, 54602 }, + { 0x8D18, 54605 }, + { 0x8D19, 54608 }, + { 0x8D1A, 54611 }, + { 0x8D1B, 54614 }, + { 0x8D1C, 54617 }, + { 0x8D1D, 54620 }, + { 0x8D1E, 54623 }, + { 0x8D1F, 54626 }, + { 0x8D20, 54629 }, + { 0x8D21, 54632 }, + { 0x8D22, 54635 }, + { 0x8D23, 54638 }, + { 0x8D24, 54641 }, + { 0x8D25, 54644 }, + { 0x8D26, 54647 }, + { 0x8D27, 54348 }, + { 0x8D28, 54356 }, + { 0x8D29, 54359 }, + { 0x8D2A, 54362 }, + { 0x8D2B, 54365 }, + { 0x8D2C, 54368 }, + { 0x8D2D, 54371 }, + { 0x8D2E, 54374 }, + { 0x8D2F, 54377 }, + { 0x8D30, 54380 }, + { 0x8D31, 54383 }, + { 0x8D32, 54386 }, + { 0x8D33, 54389 }, + { 0x8D34, 54392 }, + { 0x8D35, 54395 }, + { 0x8D36, 54398 }, + { 0x8D37, 54401 }, + { 0x8D38, 54404 }, + { 0x8D39, 54407 }, + { 0x8D3A, 54410 }, + { 0x8D3B, 54413 }, + { 0x8D3C, 54416 }, + { 0x8D3D, 54419 }, + { 0x8D3E, 54422 }, + { 0x8D3F, 54425 }, + { 0x8D40, 54428 }, + { 0x8D41, 54431 }, + { 0x8D42, 54434 }, + { 0x8D43, 54437 }, + { 0x8D44, 54440 }, + { 0x8D45, 54443 }, + { 0x8D46, 54446 }, + { 0x8D47, 54449 }, + { 0x8D48, 54452 }, + { 0x8D49, 54455 }, + { 0x8D4A, 54458 }, + { 0x8D4B, 54461 }, + { 0x8D4C, 54464 }, + { 0x8D4D, 54467 }, + { 0x8D4E, 54470 }, + { 0x8D4F, 54473 }, + { 0x8D50, 54476 }, + { 0x8D51, 54479 }, + { 0x8D52, 54482 }, + { 0x8D53, 54485 }, + { 0x8D54, 54488 }, + { 0x8D55, 54491 }, + { 0x8D56, 54494 }, + { 0x8D57, 54497 }, + { 0x8D58, 54500 }, + { 0x8D59, 78200 }, + { 0x8D5A, 78126 }, + { 0x8D5B, 78190 }, + { 0x8D5C, 78380 }, + { 0x8D5D, 78236 }, + { 0x8D5E, 78213 }, + { 0x8D5F, 78150 }, + { 0x8D60, 78360 }, + { 0x8D61, 78320 }, + { 0x8D62, 78296 }, + { 0x8D63, 78170 }, + { 0x8D64, 78256 }, + { 0x8D65, 78404 }, + { 0x8D66, 78340 }, + { 0x8D67, 78276 }, + { 0x8D68, 78121 }, + { 0x8D69, 78185 }, + { 0x8D6A, 78375 }, + { 0x8D6B, 78231 }, + { 0x8D6C, 78208 }, + { 0x8D6D, 78145 }, + { 0x8D6E, 78355 }, + { 0x8D6F, 78315 }, + { 0x8D70, 78291 }, + { 0x8D71, 78165 }, + { 0x8D72, 78251 }, + { 0x8D73, 78399 }, + { 0x8D74, 78335 }, + { 0x8D75, 78271 }, + { 0x8D76, 78136 }, + { 0x8D77, 78131 }, + { 0x8D78, 78195 }, + { 0x8D79, 78385 }, + { 0x8D7A, 78241 }, + { 0x8D7B, 78218 }, + { 0x8D7C, 78155 }, + { 0x8D7D, 78365 }, + { 0x8D7E, 78325 }, + { 0x8D7F, 78301 }, + { 0x8D80, 78175 }, + { 0x8D81, 78261 }, + { 0x8D82, 78409 }, + { 0x8D83, 78345 }, + { 0x8D84, 78281 }, + { 0x8D85, 78306 }, + { 0x8D86, 78116 }, + { 0x8D87, 78180 }, + { 0x8D88, 78370 }, + { 0x8D89, 78226 }, + { 0x8D8A, 78203 }, + { 0x8D8B, 78140 }, + { 0x8D8C, 78350 }, + { 0x8D8D, 78310 }, + { 0x8D8E, 78286 }, + { 0x8D8F, 78160 }, + { 0x8D90, 78246 }, + { 0x8D91, 78394 }, + { 0x8D92, 78330 }, + { 0x8D93, 78266 }, + { 0x8D94, 78390 }, + { 0x8D95, 78223 }, + { 0x8D96, 78414 }, + { 0x8D97, 78417 }, + { 0x8D98, 78420 }, + { 0x8D99, 78423 }, + { 0x8D9A, 78426 }, + { 0x8D9B, 78429 }, + { 0x8D9C, 78432 }, + { 0x8D9D, 78435 }, + { 0x8D9E, 78438 }, + { 0x8D9F, 78441 }, + { 0x8DA0, 78444 }, + { 0x8DA1, 78447 }, + { 0x8DA2, 78450 }, + { 0x8DA3, 78453 }, + { 0x8DA4, 78456 }, + { 0x8DA5, 78459 }, + { 0x8DA6, 78462 }, + { 0x8DA7, 78465 }, + { 0x8DA8, 78468 }, + { 0x8DA9, 78471 }, + { 0x8DAA, 78474 }, + { 0x8DAB, 22613 }, + { 0x8DAC, 22617 }, + { 0x8DAD, 22563 }, + { 0x8DAE, 22581 }, + { 0x8DAF, 22644 }, + { 0x8DB0, 22599 }, + { 0x8DB1, 22590 }, + { 0x8DB2, 22572 }, + { 0x8DB3, 22635 }, + { 0x8DB4, 22626 }, + { 0x8DB5, 22608 }, + { 0x8DB6, 72859 }, + { 0x8DB7, 72970 }, + { 0x8DB8, 71218 }, + { 0x8DB9, 72226 }, + { 0x8DBA, 71550 }, + { 0x8DBB, 144141 }, + { 0x8DBC, 144146 }, + { 0x8DBD, 144151 }, + { 0x8DBE, 144156 }, + { 0x8DBF, 144161 }, + { 0x8DC0, 144166 }, + { 0x8DC1, 144171 }, + { 0x8DC2, 144176 }, + { 0x8DC3, 144181 }, + { 0x8DC4, 144186 }, + { 0x8DC5, 144191 }, + { 0x8DC6, 144196 }, + { 0x8DC7, 144201 }, + { 0x8DC8, 144206 }, + { 0x8DC9, 144211 }, + { 0x8DCA, 144216 }, + { 0x8DCB, 144221 }, + { 0x8DCC, 144226 }, + { 0x8DCD, 144231 }, + { 0x8DCE, 144236 }, + { 0x8DCF, 144241 }, + { 0x8DD0, 144246 }, + { 0x8DD1, 144251 }, + { 0x8DD2, 144256 }, + { 0x8DD3, 144261 }, + { 0x8DD4, 144266 }, + { 0x8DD5, 111145 }, + { 0x8DD6, 71660 }, + { 0x8DD7, 71666 }, + { 0x8DD8, 71195 }, + { 0x8DD9, 71197 }, + { 0x8DDA, 87549 }, + { 0x8DDB, 80944 }, + { 0x8DDC, 80949 }, + { 0x8DDD, 80954 }, + { 0x8DDE, 80959 }, + { 0x8DDF, 80964 }, + { 0x8DE0, 80969 }, + { 0x8DE1, 80974 }, + { 0x8DE2, 80979 }, + { 0x8DE3, 80984 }, + { 0x8DE4, 80989 }, + { 0x8DE5, 80994 }, + { 0x8DE6, 80999 }, + { 0x8DE7, 81004 }, + { 0x8DE8, 81009 }, + { 0x8DE9, 81014 }, + { 0x8DEA, 81019 }, + { 0x8DEB, 81024 }, + { 0x8DEC, 81029 }, + { 0x8DED, 81034 }, + { 0x8DEE, 81039 }, + { 0x8DEF, 81044 }, + { 0x8DF0, 81049 }, + { 0x8DF1, 81054 }, + { 0x8DF2, 81059 }, + { 0x8DF3, 81064 }, + { 0x8DF4, 81069 }, + { 0x8DF5, 80697 }, + { 0x8DF6, 80701 }, + { 0x8DF7, 80707 }, + { 0x8DF8, 80709 }, + { 0x8DF9, 80906 }, + { 0x8DFA, 80718 }, + { 0x8DFB, 108886 }, + { 0x8DFC, 108892 }, + { 0x8DFD, 108898 }, + { 0x8DFE, 108904 }, + { 0x8DFF, 108910 }, + { 0x8E00, 108916 }, + { 0x8E01, 108922 }, + { 0x8E02, 108928 }, + { 0x8E03, 108934 }, + { 0x8E04, 108940 }, + { 0x8E05, 108946 }, + { 0x8E06, 108952 }, + { 0x8E07, 108958 }, + { 0x8E08, 108964 }, + { 0x8E09, 108970 }, + { 0x8E0A, 108976 }, + { 0x8E0B, 108982 }, + { 0x8E0C, 108988 }, + { 0x8E0D, 108994 }, + { 0x8E0E, 109000 }, + { 0x8E0F, 109006 }, + { 0x8E10, 109012 }, + { 0x8E11, 109018 }, + { 0x8E12, 109024 }, + { 0x8E13, 109030 }, + { 0x8E14, 109036 }, + { 0x8E15, 64614 }, + { 0x8E16, 64617 }, + { 0x8E17, 64620 }, + { 0x8E18, 71193 }, + { 0x8E19, 71186 }, + { 0x8E1A, 71275 }, + { 0x8E1B, 109107 }, + { 0x8E1C, 109113 }, + { 0x8E1D, 109119 }, + { 0x8E1E, 109125 }, + { 0x8E1F, 109131 }, + { 0x8E20, 109137 }, + { 0x8E21, 109143 }, + { 0x8E22, 109149 }, + { 0x8E23, 109155 }, + { 0x8E24, 109161 }, + { 0x8E25, 109167 }, + { 0x8E26, 109173 }, + { 0x8E27, 109179 }, + { 0x8E28, 109185 }, + { 0x8E29, 109191 }, + { 0x8E2A, 109197 }, + { 0x8E2B, 109203 }, + { 0x8E2C, 109209 }, + { 0x8E2D, 109215 }, + { 0x8E2E, 109221 }, + { 0x8E2F, 109227 }, + { 0x8E30, 109233 }, + { 0x8E31, 109239 }, + { 0x8E32, 109245 }, + { 0x8E33, 109251 }, + { 0x8E34, 109257 }, + { 0x8E35, 72264 }, + { 0x8E36, 109091 }, + { 0x8E37, 109094 }, + { 0x8E38, 109097 }, + { 0x8E39, 109088 }, + { 0x8E3A, 109100 }, + { 0x8E3B, 65019 }, + { 0x8E3C, 80693 }, + { 0x8E3D, 80919 }, + { 0x8E3E, 80932 }, + { 0x8E3F, 80699 }, + { 0x8E40, 80899 }, + { 0x8E41, 80703 }, + { 0x8E42, 80705 }, + { 0x8E43, 80910 }, + { 0x8E44, 80711 }, + { 0x8E45, 80716 }, + { 0x8E46, 81086 }, + { 0x8E47, 81097 }, + { 0x8E48, 80912 }, + { 0x8E49, 80925 }, + { 0x8E4A, 80936 }, + { 0x8E4B, 80921 }, + { 0x8E4C, 81076 }, + { 0x8E4D, 81127 }, + { 0x8E4E, 81080 }, + { 0x8E4F, 80901 }, + { 0x8E50, 80939 }, + { 0x8E51, 80695 }, + { 0x8E52, 80895 }, + { 0x8E53, 81091 }, + { 0x8E54, 81125 }, + { 0x8E55, 80908 }, + { 0x8E56, 80915 }, + { 0x8E57, 80917 }, + { 0x8E58, 15376 }, + { 0x8E59, 110375 }, + { 0x8E5A, 110380 }, + { 0x8E5B, 110385 }, + { 0x8E5C, 110390 }, + { 0x8E5D, 110395 }, + { 0x8E5E, 110400 }, + { 0x8E5F, 110405 }, + { 0x8E60, 110410 }, + { 0x8E61, 110415 }, + { 0x8E62, 110420 }, + { 0x8E63, 110425 }, + { 0x8E64, 110430 }, + { 0x8E65, 110435 }, + { 0x8E66, 110440 }, + { 0x8E67, 110445 }, + { 0x8E68, 110450 }, + { 0x8E69, 110455 }, + { 0x8E6A, 110460 }, + { 0x8E6B, 110465 }, + { 0x8E6C, 110470 }, + { 0x8E6D, 110475 }, + { 0x8E6E, 110480 }, + { 0x8E6F, 110485 }, + { 0x8E70, 110490 }, + { 0x8E71, 110495 }, + { 0x8E72, 110500 }, + { 0x8E73, 65559 }, + { 0x8E74, 81122 }, + { 0x8E75, 81119 }, + { 0x8E76, 80800 }, + { 0x8E77, 80788 }, + { 0x8E78, 80756 }, + { 0x8E79, 81116 }, + { 0x8E7A, 80732 }, + { 0x8E7B, 80780 }, + { 0x8E7C, 80872 }, + { 0x8E7D, 80784 }, + { 0x8E7E, 80736 }, + { 0x8E7F, 80828 }, + { 0x8E80, 80848 }, + { 0x8E81, 80820 }, + { 0x8E82, 80748 }, + { 0x8E83, 80796 }, + { 0x8E84, 80740 }, + { 0x8E85, 80824 }, + { 0x8E86, 80744 }, + { 0x8E87, 80868 }, + { 0x8E88, 80852 }, + { 0x8E89, 80876 }, + { 0x8E8A, 80776 }, + { 0x8E8B, 80768 }, + { 0x8E8C, 80844 }, + { 0x8E8D, 80808 }, + { 0x8E8E, 80816 }, + { 0x8E8F, 80720 }, + { 0x8E90, 80724 }, + { 0x8E91, 80884 }, + { 0x8E92, 80792 }, + { 0x8E93, 80728 }, + { 0x8E94, 80760 }, + { 0x8E95, 80812 }, + { 0x8E96, 80880 }, + { 0x8E97, 80804 }, + { 0x8E98, 80860 }, + { 0x8E99, 80864 }, + { 0x8E9A, 80764 }, + { 0x8E9B, 80840 }, + { 0x8E9C, 80836 }, + { 0x8E9D, 80832 }, + { 0x8E9E, 80856 }, + { 0x8E9F, 80752 }, + { 0x8EA0, 80772 }, + { 0x8EA1, 80888 }, + { 0x8EA2, 111127 }, + { 0x8EA3, 111091 }, + { 0x8EA4, 111097 }, + { 0x8EA5, 111109 }, + { 0x8EA6, 111133 }, + { 0x8EA7, 111115 }, + { 0x8EA8, 111139 }, + { 0x8EA9, 111103 }, + { 0x8EAA, 111121 }, + { 0x8EAB, 72190 }, + { 0x8EAC, 72148 }, + { 0x8EAD, 78706 }, + { 0x8EAE, 78710 }, + { 0x8EAF, 78722 }, + { 0x8EB0, 78714 }, + { 0x8EB1, 78726 }, + { 0x8EB2, 78718 }, + { 0x8EB3, 72278 }, + { 0x8EB4, 23333 }, + { 0x8EB5, 53488 }, + { 0x8EB6, 38536 }, + { 0x8EB7, 81150 }, + { 0x8EB8, 81149 }, + { 0x8EB9, 116178 }, + { 0x8EBA, 65682 }, + { 0x8EBB, 78634 }, + { 0x8EBC, 52957 }, + { 0x8EBD, 43300 }, + { 0x8EBE, 82939 }, + { 0x8EBF, 38418 }, + { 0x8EC0, 23153 }, + { 0x8EC1, 23150 }, + { 0x8EC2, 23156 }, + { 0x8EC3, 23620 }, + { 0x8EC4, 7779 }, + { 0x8EC5, 69691 }, + { 0x8EC6, 23328 }, + { 0x8EC7, 69687 }, + { 0x8EC8, 14147 }, + { 0x8EC9, 69271 }, + { 0x8ECA, 14513 }, + { 0x8ECB, 69275 }, + { 0x8ECC, 87641 }, + { 0x8ECD, 7775 }, + { 0x8ECE, 23323 }, + { 0x8ECF, 14508 }, + { 0x8ED0, 14143 }, + { 0x8ED1, 10576 }, + { 0x8ED2, 73290 }, + { 0x8ED3, 110613 }, + { 0x8ED4, 137709 }, + { 0x8ED5, 21508 }, + { 0x8ED6, 43327 }, + { 0x8ED7, 43333 }, + { 0x8ED8, 43338 }, + { 0x8ED9, 43342 }, + { 0x8EDA, 22480 }, + { 0x8EDB, 22483 }, + { 0x8EDC, 22489 }, + { 0x8EDD, 22486 }, + { 0x8EDE, 6586 }, + { 0x8EDF, 17539 }, + { 0x8EE0, 6594 }, + { 0x8EE1, 17000 }, + { 0x8EE2, 71175 }, + { 0x8EE3, 87500 }, + { 0x8EE4, 110601 }, + { 0x8EE5, 124382 }, + { 0x8EE6, 123964 }, + { 0x8EE7, 16588 }, + { 0x8EE8, 52977 }, + { 0x8EE9, 6596 }, + { 0x8EEA, 42442 }, + { 0x8EEB, 53367 }, + { 0x8EEC, 16696 }, + { 0x8EED, 105037 }, + { 0x8EEE, 128512 }, + { 0x8EEF, 70400 }, + { 0x8EF0, 6563 }, + { 0x8EF1, 6560 }, + { 0x8EF2, 14202 }, + { 0x8EF3, 14118 }, + { 0x8EF4, 37276 }, + { 0x8EF5, 54922 }, + { 0x8EF6, 14517 }, + { 0x8EF7, 108874 }, + { 0x8EF8, 68857 }, + { 0x8EF9, 114377 }, + { 0x8EFA, 55075 }, + { 0x8EFB, 37338 }, + { 0x8EFC, 133117 }, + { 0x8EFD, 128515 }, + { 0x8EFE, 36325 }, + { 0x8EFF, 52379 }, + { 0x8F00, 127642 }, + { 0x8F01, 10540 }, + { 0x8F02, 26537 }, + { 0x8F03, 16595 }, + { 0x8F04, 40244 }, + { 0x8F05, 87499 }, + { 0x8F06, 133091 }, + { 0x8F07, 125328 }, + { 0x8F08, 41265 }, + { 0x8F09, 15383 }, + { 0x8F0A, 78483 }, + { 0x8F0B, 16672 }, + { 0x8F0C, 16670 }, + { 0x8F0D, 53495 }, + { 0x8F0E, 22542 }, + { 0x8F0F, 110690 }, + { 0x8F10, 128207 }, + { 0x8F11, 22289 }, + { 0x8F12, 54979 }, + { 0x8F13, 78673 }, + { 0x8F14, 22547 }, + { 0x8F15, 16528 }, + { 0x8F16, 41666 }, + { 0x8F17, 23344 }, + { 0x8F18, 14087 }, + { 0x8F19, 16825 }, + { 0x8F1A, 64906 }, + { 0x8F1B, 6605 }, + { 0x8F1C, 89753 }, + { 0x8F1D, 53497 }, + { 0x8F1E, 116173 }, + { 0x8F1F, 22363 }, + { 0x8F20, 106422 }, + { 0x8F21, 72276 }, + { 0x8F22, 27032 }, + { 0x8F23, 128189 }, + { 0x8F24, 20989 }, + { 0x8F25, 10526 }, + { 0x8F26, 72251 }, + { 0x8F27, 14104 }, + { 0x8F28, 68175 }, + { 0x8F29, 16803 }, + { 0x8F2A, 17542 }, + { 0x8F2B, 87512 }, + { 0x8F2C, 111171 }, + { 0x8F2D, 13442 }, + { 0x8F2E, 87507 }, + { 0x8F2F, 13423 }, + { 0x8F30, 14107 }, + { 0x8F31, 52404 }, + { 0x8F32, 78478 }, + { 0x8F33, 64791 }, + { 0x8F34, 82947 }, + { 0x8F35, 83924 }, + { 0x8F36, 144814 }, + { 0x8F37, 116175 }, + { 0x8F38, 54925 }, + { 0x8F39, 124420 }, + { 0x8F3A, 103457 }, + { 0x8F3B, 70054 }, + { 0x8F3C, 40240 }, + { 0x8F3D, 87514 }, + { 0x8F3E, 110882 }, + { 0x8F3F, 72260 }, + { 0x8F40, 16603 }, + { 0x8F41, 105561 }, + { 0x8F42, 13521 }, + { 0x8F43, 17537 }, + { 0x8F44, 16188 }, + { 0x8F45, 64850 }, + { 0x8F46, 130741 }, + { 0x8F47, 26554 }, + { 0x8F48, 70402 }, + { 0x8F49, 107237 }, + { 0x8F4A, 110507 }, + { 0x8F4B, 76371 }, + { 0x8F4C, 65614 }, + { 0x8F4D, 36326 }, + { 0x8F4E, 72249 }, + { 0x8F4F, 52386 }, + { 0x8F50, 52393 }, + { 0x8F51, 14077 }, + { 0x8F52, 112604 }, + { 0x8F53, 86893 }, + { 0x8F54, 54930 }, + { 0x8F55, 64840 }, + { 0x8F56, 73274 }, + { 0x8F57, 132095 }, + { 0x8F58, 38466 }, + { 0x8F59, 53371 }, + { 0x8F5A, 125330 }, + { 0x8F5B, 52330 }, + { 0x8F5C, 12081 }, + { 0x8F5D, 53445 }, + { 0x8F5E, 68699 }, + { 0x8F5F, 72241 }, + { 0x8F60, 132107 }, + { 0x8F61, 43292 }, + { 0x8F62, 54337 }, + { 0x8F63, 16820 }, + { 0x8F64, 114695 }, + { 0x8F65, 14162 }, + { 0x8F66, 70405 }, + { 0x8F67, 54949 }, + { 0x8F68, 75351 }, + { 0x8F69, 108866 }, + { 0x8F6A, 127921 }, + { 0x8F6B, 55076 }, + { 0x8F6C, 76369 }, + { 0x8F6D, 82594 }, + { 0x8F6E, 69011 }, + { 0x8F6F, 75353 }, + { 0x8F70, 78731 }, + { 0x8F71, 68550 }, + { 0x8F72, 10569 }, + { 0x8F73, 129676 }, + { 0x8F74, 116171 }, + { 0x8F75, 137663 }, + { 0x8F76, 64842 }, + { 0x8F77, 65685 }, + { 0x8F78, 64960 }, + { 0x8F79, 68916 }, + { 0x8F7A, 27037 }, + { 0x8F7B, 83009 }, + { 0x8F7C, 40862 }, + { 0x8F7D, 81287 }, + { 0x8F7E, 69695 }, + { 0x8F7F, 54992 }, + { 0x8F80, 64612 }, + { 0x8F81, 64610 }, + { 0x8F82, 72256 }, + { 0x8F83, 133116 }, + { 0x8F84, 23309 }, + { 0x8F85, 6609 }, + { 0x8F86, 41673 }, + { 0x8F87, 16822 }, + { 0x8F88, 71176 }, + { 0x8F89, 20985 }, + { 0x8F8A, 84259 }, + { 0x8F8B, 27046 }, + { 0x8F8C, 116177 }, + { 0x8F8D, 89725 }, + { 0x8F8E, 116184 }, + { 0x8F8F, 54297 }, + { 0x8F90, 54298 }, + { 0x8F91, 108877 }, + { 0x8F92, 81131 }, + { 0x8F93, 27044 }, + { 0x8F94, 27041 }, + { 0x8F95, 63920 }, + { 0x8F96, 105558 }, + { 0x8F97, 103409 }, + { 0x8F98, 105345 }, + { 0x8F99, 13438 }, + { 0x8F9A, 114378 }, + { 0x8F9B, 27039 }, + { 0x8F9C, 15351 }, + { 0x8F9D, 133149 }, + { 0x8F9E, 64849 }, + { 0x8F9F, 129785 }, + { 0x8FA0, 73249 }, + { 0x8FA1, 73913 }, + { 0x8FA2, 105563 }, + { 0x8FA3, 103412 }, + { 0x8FA4, 43837 }, + { 0x8FA5, 21519 }, + { 0x8FA6, 69684 }, + { 0x8FA7, 69681 }, + { 0x8FA8, 78682 }, + { 0x8FA9, 21523 }, + { 0x8FAA, 28371 }, + { 0x8FAB, 114381 }, + { 0x8FAC, 4640 }, + { 0x8FAD, 69877 }, + { 0x8FAE, 23210 }, + { 0x8FAF, 23194 }, + { 0x8FB0, 23198 }, + { 0x8FB1, 23202 }, + { 0x8FB2, 23206 }, + { 0x8FB3, 10536 }, + { 0x8FB4, 38460 }, + { 0x8FB5, 496 }, + { 0x8FB6, 43304 }, + { 0x8FB7, 6519 }, + { 0x8FB8, 42377 }, + { 0x8FB9, 74240 }, + { 0x8FBA, 64607 }, + { 0x8FBB, 5951 }, + { 0x8FBC, 54849 }, + { 0x8FBD, 117877 }, + { 0x8FBE, 43311 }, + { 0x8FBF, 41479 }, + { 0x8FC0, 41480 }, + { 0x8FC1, 27034 }, + { 0x8FC2, 10535 }, + { 0x8FC3, 14176 }, + { 0x8FC4, 41209 }, + { 0x8FC5, 63846 }, + { 0x8FC6, 78681 }, + { 0x8FC7, 71185 }, + { 0x8FC8, 6547 }, + { 0x8FC9, 10513 }, + { 0x8FCA, 13465 }, + { 0x8FCB, 101774 }, + { 0x8FCC, 77685 }, + { 0x8FCD, 64954 }, + { 0x8FCE, 5945 }, + { 0x8FCF, 4262 }, + { 0x8FD0, 105344 }, + { 0x8FD1, 14501 }, + { 0x8FD2, 14086 }, + { 0x8FD3, 111169 }, + { 0x8FD4, 83926 }, + { 0x8FD5, 68997 }, + { 0x8FD6, 104791 }, + { 0x8FD7, 13421 }, + { 0x8FD8, 138384 }, + { 0x8FD9, 13460 }, + { 0x8FDA, 78106 }, + { 0x8FDB, 28370 }, + { 0x8FDC, 64587 }, + { 0x8FDD, 124375 }, + { 0x8FDE, 83395 }, + { 0x8FDF, 73003 }, + { 0x8FE0, 38461 }, + { 0x8FE1, 6520 }, + { 0x8FE2, 42378 }, + { 0x8FE3, 64608 }, + { 0x8FE4, 5952 }, + { 0x8FE5, 54850 }, + { 0x8FE6, 110686 }, + { 0x8FE7, 27035 }, + { 0x8FE8, 63847 }, + { 0x8FE9, 6548 }, + { 0x8FEA, 10514 }, + { 0x8FEB, 14139 }, + { 0x8FEC, 73803 }, + { 0x8FED, 17545 }, + { 0x8FEE, 13440 }, + { 0x8FEF, 40238 }, + { 0x8FF0, 10516 }, + { 0x8FF1, 10493 }, + { 0x8FF2, 87503 }, + { 0x8FF3, 13921 }, + { 0x8FF4, 6580 }, + { 0x8FF5, 6559 }, + { 0x8FF6, 16522 }, + { 0x8FF7, 38465 }, + { 0x8FF8, 68858 }, + { 0x8FF9, 43320 }, + { 0x8FFA, 43361 }, + { 0x8FFB, 43396 }, + { 0x8FFC, 43631 }, + { 0x8FFD, 54939 }, + { 0x8FFE, 69678 }, + { 0x8FFF, 112 }, + { 0x9000, 68693 }, + { 0x9001, 68696 }, + { 0x9002, 87504 }, + { 0x9003, 16538 }, + { 0x9004, 22530 }, + { 0x9005, 69703 }, + { 0x9006, 130327 }, + { 0x9007, 77413 }, + { 0x9008, 81289 }, + { 0x9009, 27403 }, + { 0x900A, 23144 }, + { 0x900B, 60539 }, + { 0x900C, 52399 }, + { 0x900D, 69709 }, + { 0x900E, 40285 }, + { 0x900F, 73805 }, + { 0x9010, 40267 }, + { 0x9011, 15374 }, + { 0x9012, 83393 }, + { 0x9013, 133212 }, + { 0x9014, 69707 }, + { 0x9015, 69705 }, + { 0x9016, 130328 }, + { 0x9017, 13500 }, + { 0x9018, 22360 }, + { 0x9019, 5944 }, + { 0x901A, 14173 }, + { 0x901B, 6965 }, + { 0x901C, 43969 }, + { 0x901D, 54924 }, + { 0x901E, 6974 }, + { 0x901F, 12229 }, + { 0x9020, 12243 }, + { 0x9021, 64585 }, + { 0x9022, 43970 }, + { 0x9023, 22292 }, + { 0x9024, 64528 }, + { 0x9025, 6979 }, + { 0x9026, 6984 }, + { 0x9027, 39632 }, + { 0x9028, 39636 }, + { 0x9029, 13418 }, + { 0x902A, 138057 }, + { 0x902B, 110303 }, + { 0x902C, 105556 }, + { 0x902D, 105565 }, + { 0x902E, 23612 }, + { 0x902F, 13419 }, + { 0x9030, 144919 }, + { 0x9031, 17933 }, + { 0x9032, 6614 }, + { 0x9033, 41260 }, + { 0x9034, 133843 }, + { 0x9035, 124835 }, + { 0x9036, 54281 }, + { 0x9037, 106421 }, + { 0x9038, 16195 }, + { 0x9039, 14056 }, + { 0x903A, 73802 }, + { 0x903B, 52380 }, + { 0x903C, 81288 }, + { 0x903D, 16602 }, + { 0x903E, 14497 }, + { 0x903F, 15353 }, + { 0x9040, 16674 }, + { 0x9041, 6592 }, + { 0x9042, 14496 }, + { 0x9043, 70401 }, + { 0x9044, 54253 }, + { 0x9045, 82942 }, + { 0x9046, 70059 }, + { 0x9047, 52963 }, + { 0x9048, 12250 }, + { 0x9049, 128208 }, + { 0x904A, 73539 }, + { 0x904B, 26560 }, + { 0x904C, 13463 }, + { 0x904D, 26539 }, + { 0x904E, 69716 }, + { 0x904F, 64604 }, + { 0x9050, 26563 }, + { 0x9051, 127697 }, + { 0x9052, 26568 }, + { 0x9053, 72819 }, + { 0x9054, 101769 }, + { 0x9055, 17949 }, + { 0x9056, 13489 }, + { 0x9057, 110663 }, + { 0x9058, 116245 }, + { 0x9059, 128221 }, + { 0x905A, 73014 }, + { 0x905B, 13822 }, + { 0x905C, 16599 }, + { 0x905D, 54942 }, + { 0x905E, 22949 }, + { 0x905F, 64946 }, + { 0x9060, 81364 }, + { 0x9061, 43700 }, + { 0x9062, 73875 }, + { 0x9063, 38448 }, + { 0x9064, 87650 }, + { 0x9065, 26808 }, + { 0x9066, 54256 }, + { 0x9067, 83905 }, + { 0x9068, 83917 }, + { 0x9069, 83909 }, + { 0x906A, 83913 }, + { 0x906B, 38450 }, + { 0x906C, 22376 }, + { 0x906D, 16811 }, + { 0x906E, 109862 }, + { 0x906F, 114699 }, + { 0x9070, 107241 }, + { 0x9071, 54944 }, + { 0x9072, 77686 }, + { 0x9073, 6558 }, + { 0x9074, 14073 }, + { 0x9075, 16533 }, + { 0x9076, 16572 }, + { 0x9077, 16579 }, + { 0x9078, 84268 }, + { 0x9079, 110884 }, + { 0x907A, 13514 }, + { 0x907B, 22372 }, + { 0x907C, 22383 }, + { 0x907D, 4628 }, + { 0x907E, 116186 }, + { 0x907F, 78623 }, + { 0x9080, 40858 }, + { 0x9081, 127632 }, + { 0x9082, 110692 }, + { 0x9083, 133101 }, + { 0x9084, 83928 }, + { 0x9085, 60552 }, + { 0x9086, 109298 }, + { 0x9087, 109299 }, + { 0x9088, 53447 }, + { 0x9089, 16531 }, + { 0x908A, 26535 }, + { 0x908B, 13461 }, + { 0x908C, 63925 }, + { 0x908D, 22287 }, + { 0x908E, 16197 }, + { 0x908F, 64896 }, + { 0x9090, 15386 }, + { 0x9091, 128526 }, + { 0x9092, 40233 }, + { 0x9093, 6583 }, + { 0x9094, 127919 }, + { 0x9095, 64601 }, + { 0x9096, 86895 }, + { 0x9097, 63935 }, + { 0x9098, 27056 }, + { 0x9099, 78101 }, + { 0x909A, 54852 }, + { 0x909B, 105474 }, + { 0x909C, 101779 }, + { 0x909D, 53476 }, + { 0x909E, 53471 }, + { 0x909F, 16559 }, + { 0x90A0, 16564 }, + { 0x90A1, 78479 }, + { 0x90A2, 64588 }, + { 0x90A3, 127528 }, + { 0x90A4, 63828 }, + { 0x90A5, 63833 }, + { 0x90A6, 128815 }, + { 0x90A7, 63830 }, + { 0x90A8, 100 }, + { 0x90A9, 69879 }, + { 0x90AA, 52978 }, + { 0x90AB, 52979 }, + { 0x90AC, 43294 }, + { 0x90AD, 133094 }, + { 0x90AE, 40286 }, + { 0x90AF, 144803 }, + { 0x90B0, 14079 }, + { 0x90B1, 110242 }, + { 0x90B2, 64598 }, + { 0x90B3, 82600 }, + { 0x90B4, 116221 }, + { 0x90B5, 116228 }, + { 0x90B6, 116214 }, + { 0x90B7, 143529 }, + { 0x90B8, 6958 }, + { 0x90B9, 14206 }, + { 0x90BA, 80683 }, + { 0x90BB, 80672 }, + { 0x90BC, 80673 }, + { 0x90BD, 80678 }, + { 0x90BE, 70056 }, + { 0x90BF, 101765 }, + { 0x90C0, 143968 }, + { 0x90C1, 144891 }, + { 0x90C2, 15276 }, + { 0x90C3, 53449 }, + { 0x90C4, 6616 }, + { 0x90C5, 15275 }, + { 0x90C6, 16536 }, + { 0x90C7, 13444 }, + { 0x90C8, 13445 }, + { 0x90C9, 83927 }, + { 0x90CA, 15108 }, + { 0x90CB, 40287 }, + { 0x90CC, 13430 }, + { 0x90CD, 6575 }, + { 0x90CE, 483 }, + { 0x90CF, 16834 }, + { 0x90D0, 12176 }, + { 0x90D1, 90 }, + { 0x90D2, 58442 }, + { 0x90D3, 27384 }, + { 0x90D4, 27378 }, + { 0x90D5, 27395 }, + { 0x90D6, 27399 }, + { 0x90D7, 27390 }, + { 0x90D8, 14081 }, + { 0x90D9, 101772 }, + { 0x90DA, 69715 }, + { 0x90DB, 55329 }, + { 0x90DC, 8066 }, + { 0x90DD, 27031 }, + { 0x90DE, 64569 }, + { 0x90DF, 132096 }, + { 0x90E0, 128534 }, + { 0x90E1, 72271 }, + { 0x90E2, 10549 }, + { 0x90E3, 105567 }, + { 0x90E4, 82568 }, + { 0x90E5, 21480 }, + { 0x90E6, 43774 }, + { 0x90E7, 28389 }, + { 0x90E8, 28409 }, + { 0x90E9, 28777 }, + { 0x90EA, 28415 }, + { 0x90EB, 41399 }, + { 0x90EC, 41284 }, + { 0x90ED, 137714 }, + { 0x90EE, 143643 }, + { 0x90EF, 137721 }, + { 0x90F0, 143650 }, + { 0x90F1, 37140 }, + { 0x90F2, 42984 }, + { 0x90F3, 71237 }, + { 0x90F4, 22525 }, + { 0x90F5, 22523 }, + { 0x90F6, 77651 }, + { 0x90F7, 77663 }, + { 0x90F8, 65929 }, + { 0x90F9, 43616 }, + { 0x90FA, 26697 }, + { 0x90FB, 53137 }, + { 0x90FC, 481 }, + { 0x90FD, 13884 }, + { 0x90FE, 27404 }, + { 0x90FF, 63849 }, + { 0x9100, 128514 }, + { 0x9101, 75227 }, + { 0x9102, 13492 }, + { 0x9103, 22393 }, + { 0x9104, 22405 }, + { 0x9105, 22429 }, + { 0x9106, 22413 }, + { 0x9107, 22409 }, + { 0x9108, 22397 }, + { 0x9109, 22425 }, + { 0x910A, 22421 }, + { 0x910B, 22417 }, + { 0x910C, 22401 }, + { 0x910D, 22433 }, + { 0x910E, 22437 }, + { 0x910F, 22441 }, + { 0x9110, 22450 }, + { 0x9111, 22468 }, + { 0x9112, 22456 }, + { 0x9113, 22453 }, + { 0x9114, 22444 }, + { 0x9115, 22465 }, + { 0x9116, 22462 }, + { 0x9117, 22459 }, + { 0x9118, 22447 }, + { 0x9119, 22471 }, + { 0x911A, 22474 }, + { 0x911B, 40640 }, + { 0x911C, 40642 }, + { 0x911D, 40648 }, + { 0x911E, 84261 }, + { 0x911F, 84262 }, + { 0x9120, 78671 }, + { 0x9121, 13491 }, + { 0x9122, 52985 }, + { 0x9123, 133906 }, + { 0x9124, 21302 }, + { 0x9125, 103 }, + { 0x9126, 14209 }, + { 0x9127, 6969 }, + { 0x9128, 64935 }, + { 0x9129, 13816 }, + { 0x912A, 64948 }, + { 0x912B, 64949 }, + { 0x912C, 105886 }, + { 0x912D, 6987 }, + { 0x912E, 14725 }, + { 0x912F, 128528 }, + { 0x9130, 40389 }, + { 0x9131, 43893 }, + { 0x9132, 21586 }, + { 0x9133, 128516 }, + { 0x9134, 116181 }, + { 0x9135, 13427 }, + { 0x9136, 81132 }, + { 0x9137, 101784 }, + { 0x9138, 54967 }, + { 0x9139, 10499 }, + { 0x913A, 63178 }, + { 0x913B, 21521 }, + { 0x913C, 36828 }, + { 0x913D, 36916 }, + { 0x913E, 36839 }, + { 0x913F, 36920 }, + { 0x9140, 36825 }, + { 0x9141, 15016 }, + { 0x9142, 68920 }, + { 0x9143, 64642 }, + { 0x9144, 110557 }, + { 0x9145, 110563 }, + { 0x9146, 110567 }, + { 0x9147, 110582 }, + { 0x9148, 110514 }, + { 0x9149, 64633 }, + { 0x914A, 43351 }, + { 0x914B, 110649 }, + { 0x914C, 110654 }, + { 0x914D, 110629 }, + { 0x914E, 110634 }, + { 0x914F, 21030 }, + { 0x9150, 21290 }, + { 0x9151, 110639 }, + { 0x9152, 110644 }, + { 0x9153, 110619 }, + { 0x9154, 110624 }, + { 0x9155, 20992 }, + { 0x9156, 21006 }, + { 0x9157, 21239 }, + { 0x9158, 72797 }, + { 0x9159, 106404 }, + { 0x915A, 42364 }, + { 0x915B, 78493 }, + { 0x915C, 64577 }, + { 0x915D, 21017 }, + { 0x915E, 43383 }, + { 0x915F, 16828 }, + { 0x9160, 17003 }, + { 0x9161, 43967 }, + { 0x9162, 10175 }, + { 0x9163, 12247 }, + { 0x9164, 42351 }, + { 0x9165, 128796 }, + { 0x9166, 9605 }, + { 0x9167, 14197 }, + { 0x9168, 64852 }, + { 0x9169, 78494 }, + { 0x916A, 6581 }, + { 0x916B, 77688 }, + { 0x916C, 89742 }, + { 0x916D, 89745 }, + { 0x916E, 89750 }, + { 0x916F, 23341 }, + { 0x9170, 23338 }, + { 0x9171, 23334 }, + { 0x9172, 21412 }, + { 0x9173, 54969 }, + { 0x9174, 16555 }, + { 0x9175, 13516 }, + { 0x9176, 13511 }, + { 0x9177, 14075 }, + { 0x9178, 23255 }, + { 0x9179, 23260 }, + { 0x917A, 23257 }, + { 0x917B, 16523 }, + { 0x917C, 16526 }, + { 0x917D, 16524 }, + { 0x917E, 23267 }, + { 0x917F, 23263 }, + { 0x9180, 23265 }, + { 0x9181, 89741 }, + { 0x9182, 16571 }, + { 0x9183, 40234 }, + { 0x9184, 137761 }, + { 0x9185, 64951 }, + { 0x9186, 64956 }, + { 0x9187, 72795 }, + { 0x9188, 107242 }, + { 0x9189, 106543 }, + { 0x918A, 78100 }, + { 0x918B, 116195 }, + { 0x918C, 138053 }, + { 0x918D, 105476 }, + { 0x918E, 89719 }, + { 0x918F, 133147 }, + { 0x9190, 8105 }, + { 0x9191, 127702 }, + { 0x9192, 16575 }, + { 0x9193, 41663 }, + { 0x9194, 54279 }, + { 0x9195, 15112 }, + { 0x9196, 110679 }, + { 0x9197, 42334 }, + { 0x9198, 42337 }, + { 0x9199, 42331 }, + { 0x919A, 42340 }, + { 0x919B, 14949 }, + { 0x919C, 40578 }, + { 0x919D, 12255 }, + { 0x919E, 42354 }, + { 0x919F, 15013 }, + { 0x91A0, 40654 }, + { 0x91A1, 14731 }, + { 0x91A2, 40399 }, + { 0x91A3, 16182 }, + { 0x91A4, 126266 }, + { 0x91A5, 126264 }, + { 0x91A6, 52363 }, + { 0x91A7, 52376 }, + { 0x91A8, 52367 }, + { 0x91A9, 52372 }, + { 0x91AA, 52348 }, + { 0x91AB, 36363 }, + { 0x91AC, 52343 }, + { 0x91AD, 43974 }, + { 0x91AE, 38458 }, + { 0x91AF, 42432 }, + { 0x91B0, 65607 }, + { 0x91B1, 133085 }, + { 0x91B2, 38468 }, + { 0x91B3, 104182 }, + { 0x91B4, 104198 }, + { 0x91B5, 13983 }, + { 0x91B6, 80131 }, + { 0x91B7, 80144 }, + { 0x91B8, 80136 }, + { 0x91B9, 80152 }, + { 0x91BA, 80127 }, + { 0x91BB, 80164 }, + { 0x91BC, 82943 }, + { 0x91BD, 80168 }, + { 0x91BE, 14065 }, + { 0x91BF, 110505 }, + { 0x91C0, 80194 }, + { 0x91C1, 80190 }, + { 0x91C2, 110673 }, + { 0x91C3, 77475 }, + { 0x91C4, 144810 }, + { 0x91C5, 111274 }, + { 0x91C6, 13943 }, + { 0x91C7, 78107 }, + { 0x91C8, 87516 }, + { 0x91C9, 129780 }, + { 0x91CA, 74228 }, + { 0x91CB, 14061 }, + { 0x91CC, 74235 }, + { 0x91CD, 74230 }, + { 0x91CE, 14028 }, + { 0x91CF, 14032 }, + { 0x91D0, 14039 }, + { 0x91D1, 138361 }, + { 0x91D2, 82945 }, + { 0x91D3, 17959 }, + { 0x91D4, 78490 }, + { 0x91D5, 54262 }, + { 0x91D6, 134499 }, + { 0x91D7, 13947 }, + { 0x91D8, 138357 }, + { 0x91D9, 103471 }, + { 0x91DA, 114372 }, + { 0x91DB, 73270 }, + { 0x91DC, 43309 }, + { 0x91DD, 64933 }, + { 0x91DE, 42430 }, + { 0x91DF, 124833 }, + { 0x91E0, 63183 }, + { 0x91E1, 13960 }, + { 0x91E2, 57545 }, + { 0x91E3, 13964 }, + { 0x91E4, 14069 }, + { 0x91E5, 129673 }, + { 0x91E6, 73278 }, + { 0x91E7, 110661 }, + { 0x91E8, 22947 }, + { 0x91E9, 14058 }, + { 0x91EA, 14005 }, + { 0x91EB, 104176 }, + { 0x91EC, 5959 }, + { 0x91ED, 80115 }, + { 0x91EE, 80121 }, + { 0x91EF, 5954 }, + { 0x91F0, 74222 }, + { 0x91F1, 78487 }, + { 0x91F2, 54259 }, + { 0x91F3, 43306 }, + { 0x91F4, 110670 }, + { 0x91F5, 110667 }, + { 0x91F6, 137759 }, + { 0x91F7, 14016 }, + { 0x91F8, 13924 }, + { 0x91F9, 13929 }, + { 0x91FA, 64549 }, + { 0x91FB, 134510 }, + { 0x91FC, 138531 }, + { 0x91FD, 144535 }, + { 0x91FE, 26549 }, + { 0x91FF, 64552 }, + { 0x9200, 64560 }, + { 0x9201, 64539 }, + { 0x9202, 64535 }, + { 0x9203, 38680 }, + { 0x9204, 41603 }, + { 0x9205, 38597 }, + { 0x9206, 41544 }, + { 0x9207, 68954 }, + { 0x9208, 68967 }, + { 0x9209, 68949 }, + { 0x920A, 68962 }, + { 0x920B, 38684 }, + { 0x920C, 41607 }, + { 0x920D, 38601 }, + { 0x920E, 41548 }, + { 0x920F, 26729 }, + { 0x9210, 26755 }, + { 0x9211, 26718 }, + { 0x9212, 26744 }, + { 0x9213, 38676 }, + { 0x9214, 41599 }, + { 0x9215, 38593 }, + { 0x9216, 41540 }, + { 0x9217, 26724 }, + { 0x9218, 26750 }, + { 0x9219, 26713 }, + { 0x921A, 26739 }, + { 0x921B, 57534 }, + { 0x921C, 57538 }, + { 0x921D, 41482 }, + { 0x921E, 41486 }, + { 0x921F, 125845 }, + { 0x9220, 82765 }, + { 0x9221, 132501 }, + { 0x9222, 124203 }, + { 0x9223, 64892 }, + { 0x9224, 26827 }, + { 0x9225, 106417 }, + { 0x9226, 26883 }, + { 0x9227, 26895 }, + { 0x9228, 41667 }, + { 0x9229, 132797 }, + { 0x922A, 132790 }, + { 0x922B, 132782 }, + { 0x922C, 26955 }, + { 0x922D, 132805 }, + { 0x922E, 26943 }, + { 0x922F, 17510 }, + { 0x9230, 17503 }, + { 0x9231, 71180 }, + { 0x9232, 78654 }, + { 0x9233, 64837 }, + { 0x9234, 130743 }, + { 0x9235, 41642 }, + { 0x9236, 78630 }, + { 0x9237, 131602 }, + { 0x9238, 131604 }, + { 0x9239, 42440 }, + { 0x923A, 38415 }, + { 0x923B, 36361 }, + { 0x923C, 81134 }, + { 0x923D, 17450 }, + { 0x923E, 17451 }, + { 0x923F, 5946 }, + { 0x9240, 109660 }, + { 0x9241, 133105 }, + { 0x9242, 5947 }, + { 0x9243, 75236 }, + { 0x9244, 112611 }, + { 0x9245, 14082 }, + { 0x9246, 64579 }, + { 0x9247, 109667 }, + { 0x9248, 17005 }, + { 0x9249, 109665 }, + { 0x924A, 129675 }, + { 0x924B, 109670 }, + { 0x924C, 143452 }, + { 0x924D, 89723 }, + { 0x924E, 133123 }, + { 0x924F, 82567 }, + { 0x9250, 108855 }, + { 0x9251, 108859 }, + { 0x9252, 133092 }, + { 0x9253, 108861 }, + { 0x9254, 44192 }, + { 0x9255, 16812 }, + { 0x9256, 78730 }, + { 0x9257, 128210 }, + { 0x9258, 131694 }, + { 0x9259, 111412 }, + { 0x925A, 138055 }, + { 0x925B, 64581 }, + { 0x925C, 133097 }, + { 0x925D, 13883 }, + { 0x925E, 97 }, + { 0x925F, 80199 }, + { 0x9260, 105 }, + { 0x9261, 10529 }, + { 0x9262, 74 }, + { 0x9263, 78480 }, + { 0x9264, 134479 }, + { 0x9265, 70397 }, + { 0x9266, 108 }, + { 0x9267, 114694 }, + { 0x9268, 108863 }, + { 0x9269, 132106 }, + { 0x926A, 110 }, + { 0x926B, 87501 }, + { 0x926C, 15387 }, + { 0x926D, 69711 }, + { 0x926E, 110510 }, + { 0x926F, 13425 }, + { 0x9270, 68856 }, + { 0x9271, 43302 }, + { 0x9272, 64913 }, + { 0x9273, 13439 }, + { 0x9274, 70055 }, + { 0x9275, 109860 }, + { 0x9276, 72277 }, + { 0x9277, 70052 }, + { 0x9278, 15011 }, + { 0x9279, 111161 }, + { 0x927A, 132207 }, + { 0x927B, 72221 }, + { 0x927C, 13498 }, + { 0x927D, 23615 }, + { 0x927E, 22502 }, + { 0x927F, 110665 }, + { 0x9280, 110615 }, + { 0x9281, 70062 }, + { 0x9282, 4631 }, + { 0x9283, 40247 }, + { 0x9284, 127529 }, + { 0x9285, 110617 }, + { 0x9286, 41665 }, + { 0x9287, 63938 }, + { 0x9288, 27029 }, + { 0x9289, 6602 }, + { 0x928A, 101775 }, + { 0x928B, 111709 }, + { 0x928C, 132203 }, + { 0x928D, 43312 }, + { 0x928E, 16679 }, + { 0x928F, 55336 }, + { 0x9290, 64908 }, + { 0x9291, 8103 }, + { 0x9292, 108857 }, + { 0x9293, 78632 }, + { 0x9294, 38454 }, + { 0x9295, 137744 }, + { 0x9296, 137742 }, + { 0x9297, 137725 }, + { 0x9298, 41427 }, + { 0x9299, 144938 }, + { 0x929A, 83007 }, + { 0x929B, 83005 }, + { 0x929C, 127918 }, + { 0x929D, 109662 }, + { 0x929E, 54300 }, + { 0x929F, 127636 }, + { 0x92A0, 78760 }, + { 0x92A1, 38456 }, + { 0x92A2, 22364 }, + { 0x92A3, 16819 }, + { 0x92A4, 54957 }, + { 0x92A5, 133090 }, + { 0x92A6, 13416 }, + { 0x92A7, 64565 }, + { 0x92A8, 64838 }, + { 0x92A9, 129659 }, + { 0x92AA, 129134 }, + { 0x92AB, 129200 }, + { 0x92AC, 129290 }, + { 0x92AD, 129324 }, + { 0x92AE, 129609 }, + { 0x92AF, 129164 }, + { 0x92B0, 129174 }, + { 0x92B1, 129169 }, + { 0x92B2, 129179 }, + { 0x92B3, 129485 }, + { 0x92B4, 129597 }, + { 0x92B5, 129601 }, + { 0x92B6, 129380 }, + { 0x92B7, 129650 }, + { 0x92B8, 129272 }, + { 0x92B9, 129417 }, + { 0x92BA, 129422 }, + { 0x92BB, 129427 }, + { 0x92BC, 129512 }, + { 0x92BD, 129247 }, + { 0x92BE, 129307 }, + { 0x92BF, 129495 }, + { 0x92C0, 129605 }, + { 0x92C1, 129237 }, + { 0x92C2, 129242 }, + { 0x92C3, 129204 }, + { 0x92C4, 129372 }, + { 0x92C5, 129222 }, + { 0x92C6, 129227 }, + { 0x92C7, 129342 }, + { 0x92C8, 129440 }, + { 0x92C9, 129332 }, + { 0x92CA, 129637 }, + { 0x92CB, 129581 }, + { 0x92CC, 129348 }, + { 0x92CD, 129354 }, + { 0x92CE, 129337 }, + { 0x92CF, 129251 }, + { 0x92D0, 129565 }, + { 0x92D1, 129593 }, + { 0x92D2, 129151 }, + { 0x92D3, 129232 }, + { 0x92D4, 129503 }, + { 0x92D5, 129587 }, + { 0x92D6, 129258 }, + { 0x92D7, 129573 }, + { 0x92D8, 129489 }, + { 0x92D9, 129446 }, + { 0x92DA, 129452 }, + { 0x92DB, 129436 }, + { 0x92DC, 129553 }, + { 0x92DD, 129557 }, + { 0x92DE, 129561 }, + { 0x92DF, 129328 }, + { 0x92E0, 129499 }, + { 0x92E1, 129545 }, + { 0x92E2, 129663 }, + { 0x92E3, 129396 }, + { 0x92E4, 129432 }, + { 0x92E5, 129549 }, + { 0x92E6, 129633 }, + { 0x92E7, 129400 }, + { 0x92E8, 129384 }, + { 0x92E9, 129529 }, + { 0x92EA, 129311 }, + { 0x92EB, 129277 }, + { 0x92EC, 129405 }, + { 0x92ED, 129409 }, + { 0x92EE, 129160 }, + { 0x92EF, 129142 }, + { 0x92F0, 129376 }, + { 0x92F1, 129533 }, + { 0x92F2, 129138 }, + { 0x92F3, 129156 }, + { 0x92F4, 129360 }, + { 0x92F5, 129196 }, + { 0x92F6, 129316 }, + { 0x92F7, 129285 }, + { 0x92F8, 129458 }, + { 0x92F9, 129508 }, + { 0x92FA, 129481 }, + { 0x92FB, 129464 }, + { 0x92FC, 129541 }, + { 0x92FD, 129264 }, + { 0x92FE, 129320 }, + { 0x92FF, 129294 }, + { 0x9300, 129268 }, + { 0x9301, 129146 }, + { 0x9302, 129281 }, + { 0x9303, 129524 }, + { 0x9304, 129392 }, + { 0x9305, 129469 }, + { 0x9306, 129475 }, + { 0x9307, 129646 }, + { 0x9308, 129642 }, + { 0x9309, 129413 }, + { 0x930A, 129520 }, + { 0x930B, 129629 }, + { 0x930C, 129364 }, + { 0x930D, 129655 }, + { 0x930E, 129516 }, + { 0x930F, 129613 }, + { 0x9310, 129617 }, + { 0x9311, 129621 }, + { 0x9312, 129625 }, + { 0x9313, 129388 }, + { 0x9314, 129184 }, + { 0x9315, 129190 }, + { 0x9316, 129368 }, + { 0x9317, 129218 }, + { 0x9318, 129303 }, + { 0x9319, 129537 }, + { 0x931A, 129299 }, + { 0x931B, 129208 }, + { 0x931C, 129213 }, + { 0x931D, 6938 }, + { 0x931E, 134482 }, + { 0x931F, 37266 }, + { 0x9320, 56995 }, + { 0x9321, 106540 }, + { 0x9322, 104175 }, + { 0x9323, 64606 }, + { 0x9324, 39640 }, + { 0x9325, 21662 }, + { 0x9326, 21620 }, + { 0x9327, 21700 }, + { 0x9328, 21636 }, + { 0x9329, 21555 }, + { 0x932A, 63367 }, + { 0x932B, 13481 }, + { 0x932C, 26767 }, + { 0x932D, 17495 }, + { 0x932E, 124407 }, + { 0x932F, 43694 }, + { 0x9330, 40856 }, + { 0x9331, 21040 }, + { 0x9332, 21559 }, + { 0x9333, 36386 }, + { 0x9334, 63437 }, + { 0x9335, 13484 }, + { 0x9336, 26770 }, + { 0x9337, 17499 }, + { 0x9338, 124411 }, + { 0x9339, 43777 }, + { 0x933A, 43790 }, + { 0x933B, 65521 }, + { 0x933C, 21043 }, + { 0x933D, 21053 }, + { 0x933E, 21418 }, + { 0x933F, 43810 }, + { 0x9340, 43823 }, + { 0x9341, 72825 }, + { 0x9342, 21046 }, + { 0x9343, 21057 }, + { 0x9344, 21422 }, + { 0x9345, 43831 }, + { 0x9346, 17336 }, + { 0x9347, 36370 }, + { 0x9348, 63406 }, + { 0x9349, 13478 }, + { 0x934A, 17460 }, + { 0x934B, 17491 }, + { 0x934C, 124403 }, + { 0x934D, 17341 }, + { 0x934E, 36394 }, + { 0x934F, 63440 }, + { 0x9350, 13487 }, + { 0x9351, 26861 }, + { 0x9352, 17507 }, + { 0x9353, 124415 }, + { 0x9354, 36336 }, + { 0x9355, 63371 }, + { 0x9356, 13470 }, + { 0x9357, 26593 }, + { 0x9358, 17475 }, + { 0x9359, 124398 }, + { 0x935A, 36329 }, + { 0x935B, 63358 }, + { 0x935C, 13466 }, + { 0x935D, 26584 }, + { 0x935E, 17470 }, + { 0x935F, 124393 }, + { 0x9360, 36366 }, + { 0x9361, 63397 }, + { 0x9362, 13474 }, + { 0x9363, 26661 }, + { 0x9364, 17480 }, + { 0x9365, 36381 }, + { 0x9366, 63424 }, + { 0x9367, 42357 }, + { 0x9368, 63429 }, + { 0x9369, 36350 }, + { 0x936A, 63375 }, + { 0x936B, 14126 }, + { 0x936C, 63380 }, + { 0x936D, 78636 }, + { 0x936E, 36340 }, + { 0x936F, 26597 }, + { 0x9370, 63362 }, + { 0x9371, 26588 }, + { 0x9372, 10559 }, + { 0x9373, 63401 }, + { 0x9374, 26665 }, + { 0x9375, 17485 }, + { 0x9376, 26670 }, + { 0x9377, 36389 }, + { 0x9378, 26845 }, + { 0x9379, 26850 }, + { 0x937A, 72041 }, + { 0x937B, 109085 }, + { 0x937C, 71881 }, + { 0x937D, 109082 }, + { 0x937E, 16518 }, + { 0x937F, 28771 }, + { 0x9380, 28791 }, + { 0x9381, 28763 }, + { 0x9382, 28780 }, + { 0x9383, 28757 }, + { 0x9384, 28392 }, + { 0x9385, 28412 }, + { 0x9386, 28774 }, + { 0x9387, 28794 }, + { 0x9388, 28766 }, + { 0x9389, 28783 }, + { 0x938A, 28760 }, + { 0x938B, 26824 }, + { 0x938C, 125699 }, + { 0x938D, 82642 }, + { 0x938E, 132340 }, + { 0x938F, 124114 }, + { 0x9390, 125722 }, + { 0x9391, 82659 }, + { 0x9392, 132368 }, + { 0x9393, 124136 }, + { 0x9394, 125693 }, + { 0x9395, 82636 }, + { 0x9396, 132329 }, + { 0x9397, 124108 }, + { 0x9398, 125705 }, + { 0x9399, 82648 }, + { 0x939A, 132346 }, + { 0x939B, 124120 }, + { 0x939C, 125742 }, + { 0x939D, 82675 }, + { 0x939E, 132388 }, + { 0x939F, 124152 }, + { 0x93A0, 26918 }, + { 0x93A1, 26872 }, + { 0x93A2, 26937 }, + { 0x93A3, 26905 }, + { 0x93A4, 26911 }, + { 0x93A5, 26865 }, + { 0x93A6, 26930 }, + { 0x93A7, 26898 }, + { 0x93A8, 126116 }, + { 0x93A9, 82914 }, + { 0x93AA, 132768 }, + { 0x93AB, 124349 }, + { 0x93AC, 126110 }, + { 0x93AD, 82908 }, + { 0x93AE, 132762 }, + { 0x93AF, 124343 }, + { 0x93B0, 126063 }, + { 0x93B1, 82868 }, + { 0x93B2, 132715 }, + { 0x93B3, 124303 }, + { 0x93B4, 126090 }, + { 0x93B5, 82895 }, + { 0x93B6, 132742 }, + { 0x93B7, 124330 }, + { 0x93B8, 126083 }, + { 0x93B9, 82888 }, + { 0x93BA, 132735 }, + { 0x93BB, 124323 }, + { 0x93BC, 126025 }, + { 0x93BD, 82857 }, + { 0x93BE, 132681 }, + { 0x93BF, 124292 }, + { 0x93C0, 125949 }, + { 0x93C1, 82830 }, + { 0x93C2, 132605 }, + { 0x93C3, 124271 }, + { 0x93C4, 125963 }, + { 0x93C5, 82839 }, + { 0x93C6, 132619 }, + { 0x93C7, 124280 }, + { 0x93C8, 125800 }, + { 0x93C9, 82697 }, + { 0x93CA, 132446 }, + { 0x93CB, 124179 }, + { 0x93CC, 125797 }, + { 0x93CD, 82694 }, + { 0x93CE, 132443 }, + { 0x93CF, 124176 }, + { 0x93D0, 125966 }, + { 0x93D1, 82842 }, + { 0x93D2, 132622 }, + { 0x93D3, 124283 }, + { 0x93D4, 38689 }, + { 0x93D5, 38606 }, + { 0x93D6, 41553 }, + { 0x93D7, 41612 }, + { 0x93D8, 14840 }, + { 0x93D9, 546 }, + { 0x93DA, 137950 }, + { 0x93DB, 137900 }, + { 0x93DC, 137975 }, + { 0x93DD, 137925 }, + { 0x93DE, 137813 }, + { 0x93DF, 137783 }, + { 0x93E0, 137843 }, + { 0x93E1, 137873 }, + { 0x93E2, 137935 }, + { 0x93E3, 137885 }, + { 0x93E4, 137960 }, + { 0x93E5, 137910 }, + { 0x93E6, 137795 }, + { 0x93E7, 137765 }, + { 0x93E8, 137825 }, + { 0x93E9, 137855 }, + { 0x93EA, 137955 }, + { 0x93EB, 137905 }, + { 0x93EC, 137980 }, + { 0x93ED, 137930 }, + { 0x93EE, 137819 }, + { 0x93EF, 137789 }, + { 0x93F0, 137849 }, + { 0x93F1, 137879 }, + { 0x93F2, 137945 }, + { 0x93F3, 137895 }, + { 0x93F4, 137970 }, + { 0x93F5, 137920 }, + { 0x93F6, 137807 }, + { 0x93F7, 137777 }, + { 0x93F8, 137837 }, + { 0x93F9, 137867 }, + { 0x93FA, 137939 }, + { 0x93FB, 137889 }, + { 0x93FC, 137964 }, + { 0x93FD, 137914 }, + { 0x93FE, 137800 }, + { 0x93FF, 137770 }, + { 0x9400, 137830 }, + { 0x9401, 137860 }, + { 0x9402, 125955 }, + { 0x9403, 82833 }, + { 0x9404, 132611 }, + { 0x9405, 124274 }, + { 0x9406, 125807 }, + { 0x9407, 82738 }, + { 0x9408, 132458 }, + { 0x9409, 124186 }, + { 0x940A, 125732 }, + { 0x940B, 82665 }, + { 0x940C, 132378 }, + { 0x940D, 124142 }, + { 0x940E, 26618 }, + { 0x940F, 26635 }, + { 0x9410, 26623 }, + { 0x9411, 26629 }, + { 0x9412, 126044 }, + { 0x9413, 132464 }, + { 0x9414, 125587 }, + { 0x9415, 132232 }, + { 0x9416, 126028 }, + { 0x9417, 132696 }, + { 0x9418, 126040 }, + { 0x9419, 132684 }, + { 0x941A, 126020 }, + { 0x941B, 132676 }, + { 0x941C, 126035 }, + { 0x941D, 132691 }, + { 0x941E, 43410 }, + { 0x941F, 43415 }, + { 0x9420, 17962 }, + { 0x9421, 17980 }, + { 0x9422, 132335 }, + { 0x9423, 124166 }, + { 0x9424, 109275 }, + { 0x9425, 109263 }, + { 0x9426, 109279 }, + { 0x9427, 109271 }, + { 0x9428, 38647 }, + { 0x9429, 38557 }, + { 0x942A, 41511 }, + { 0x942B, 41577 }, + { 0x942C, 125641 }, + { 0x942D, 132277 }, + { 0x942E, 71231 }, + { 0x942F, 71225 }, + { 0x9430, 71222 }, + { 0x9431, 14676 }, + { 0x9432, 14682 }, + { 0x9433, 14670 }, + { 0x9434, 14665 }, + { 0x9435, 14662 }, + { 0x9436, 89754 }, + { 0x9437, 89762 }, + { 0x9438, 89757 }, + { 0x9439, 89766 }, + { 0x943A, 78113 }, + { 0x943B, 43598 }, + { 0x943C, 22296 }, + { 0x943D, 110238 }, + { 0x943E, 143508 }, + { 0x943F, 134266 }, + { 0x9440, 14046 }, + { 0x9441, 16201 }, + { 0x9442, 110886 }, + { 0x9443, 14049 }, + { 0x9444, 40728 }, + { 0x9445, 73873 }, + { 0x9446, 16813 }, + { 0x9447, 13508 }, + { 0x9448, 64625 }, + { 0x9449, 133871 }, + { 0x944A, 143461 }, + { 0x944B, 125329 }, + { 0x944C, 14183 }, + { 0x944D, 0 }, + { 0x944E, 13988 }, + { 0x944F, 22492 }, + { 0x9450, 127526 }, + { 0x9451, 78676 }, + { 0x9452, 89776 }, + { 0x9453, 37269 }, + { 0x9454, 13922 }, + { 0x9455, 110675 }, + { 0x9456, 13933 }, + { 0x9457, 104193 }, + { 0x9458, 104184 }, + { 0x9459, 13992 }, + { 0x945A, 78765 }, + { 0x945B, 80173 }, + { 0x945C, 13971 }, + { 0x945D, 79234 }, + { 0x945E, 110297 }, + { 0x945F, 144809 }, + { 0x9460, 40235 }, + { 0x9461, 64901 }, + { 0x9462, 64600 }, + { 0x9463, 6966 }, + { 0x9464, 63850 }, + { 0x9465, 41258 }, + { 0x9466, 64546 }, + { 0x9467, 105887 }, + { 0x9468, 54929 }, + { 0x9469, 63841 }, + { 0x946A, 128817 }, + { 0x946B, 43298 }, + { 0x946C, 104754 }, + { 0x946D, 54344 }, + { 0x946E, 69700 }, + { 0x946F, 13906 }, + { 0x9470, 87510 }, + { 0x9471, 82595 }, + { 0x9472, 41630 }, + { 0x9473, 14174 }, + { 0x9474, 40291 }, + { 0x9475, 23314 }, + { 0x9476, 64897 }, + { 0x9477, 42323 }, + { 0x9478, 52561 }, + { 0x9479, 74914 }, + { 0x947A, 72274 }, + { 0x947B, 106409 }, + { 0x947C, 110677 }, + { 0x947D, 54955 }, + { 0x947E, 117878 }, + { 0x947F, 70051 }, + { 0x9480, 87647 }, + { 0x9481, 18001 }, + { 0x9482, 64595 }, + { 0x9483, 53135 }, + { 0x9484, 83397 }, + { 0x9485, 26541 }, + { 0x9486, 78776 }, + { 0x9487, 81147 }, + { 0x9488, 6570 }, + { 0x9489, 23617 }, + { 0x948A, 78105 }, + { 0x948B, 125582 }, + { 0x948C, 109849 }, + { 0x948D, 89778 }, + { 0x948E, 73284 }, + { 0x948F, 81362 }, + { 0x9490, 129684 }, + { 0x9491, 13495 }, + { 0x9492, 6526 }, + { 0x9493, 72243 }, + { 0x9494, 84163 }, + { 0x9495, 10512 }, + { 0x9496, 78492 }, + { 0x9497, 6529 }, + { 0x9498, 110597 }, + { 0x9499, 52986 }, + { 0x949A, 36323 }, + { 0x949B, 37275 }, + { 0x949C, 16184 }, + { 0x949D, 18002 }, + { 0x949E, 80182 }, + { 0x949F, 82993 }, + { 0x94A0, 80160 }, + { 0x94A1, 13976 }, + { 0x94A2, 13998 }, + { 0x94A3, 132104 }, + { 0x94A4, 103469 }, + { 0x94A5, 38539 }, + { 0x94A6, 124075 }, + { 0x94A7, 14052 }, + { 0x94A8, 14024 }, + { 0x94A9, 16809 }, + { 0x94AA, 6619 }, + { 0x94AB, 73292 }, + { 0x94AC, 57532 }, + { 0x94AD, 14101 }, + { 0x94AE, 13811 }, + { 0x94AF, 15110 }, + { 0x94B0, 110599 }, + { 0x94B1, 68919 }, + { 0x94B2, 82603 }, + { 0x94B3, 23148 }, + { 0x94B4, 13909 }, + { 0x94B5, 4630 }, + { 0x94B6, 41208 }, + { 0x94B7, 10178 }, + { 0x94B8, 6589 }, + { 0x94B9, 114700 }, + { 0x94BA, 13826 }, + { 0x94BB, 73293 }, + { 0x94BC, 63180 }, + { 0x94BD, 132227 }, + { 0x94BE, 64914 }, + { 0x94BF, 41635 }, + { 0x94C0, 73288 }, + { 0x94C1, 43978 }, + { 0x94C2, 104793 }, + { 0x94C3, 110598 }, + { 0x94C4, 41672 }, + { 0x94C5, 72255 }, + { 0x94C6, 105948 }, + { 0x94C7, 36627 }, + { 0x94C8, 78104 }, + { 0x94C9, 138533 }, + { 0x94CA, 64511 }, + { 0x94CB, 78626 }, + { 0x94CC, 74244 }, + { 0x94CD, 108856 }, + { 0x94CE, 75232 }, + { 0x94CF, 52332 }, + { 0x94D0, 16999 }, + { 0x94D1, 74588 }, + { 0x94D2, 13829 }, + { 0x94D3, 41269 }, + { 0x94D4, 40230 }, + { 0x94D5, 127534 }, + { 0x94D6, 41264 }, + { 0x94D7, 103459 }, + { 0x94D8, 63937 }, + { 0x94D9, 52397 }, + { 0x94DA, 20991 }, + { 0x94DB, 16810 }, + { 0x94DC, 26545 }, + { 0x94DD, 78496 }, + { 0x94DE, 23214 }, + { 0x94DF, 23221 }, + { 0x94E0, 23218 }, + { 0x94E1, 23225 }, + { 0x94E2, 13490 }, + { 0x94E3, 6936 }, + { 0x94E4, 14103 }, + { 0x94E5, 42434 }, + { 0x94E6, 128513 }, + { 0x94E7, 143501 }, + { 0x94E8, 64845 }, + { 0x94E9, 6566 }, + { 0x94EA, 127393 }, + { 0x94EB, 63356 }, + { 0x94EC, 132091 }, + { 0x94ED, 132093 }, + { 0x94EE, 53365 }, + { 0x94EF, 72273 }, + { 0x94F0, 16807 }, + { 0x94F1, 83922 }, + { 0x94F2, 54982 }, + { 0x94F3, 39639 }, + { 0x94F4, 73250 }, + { 0x94F5, 69093 }, + { 0x94F6, 52976 }, + { 0x94F7, 15381 }, + { 0x94F8, 6603 }, + { 0x94F9, 52970 }, + { 0x94FA, 42441 }, + { 0x94FB, 110688 }, + { 0x94FC, 106407 }, + { 0x94FD, 13824 }, + { 0x94FE, 14009 }, + { 0x94FF, 17908 }, + { 0x9500, 22389 }, + { 0x9501, 39634 }, + { 0x9502, 70057 }, + { 0x9503, 64543 }, + { 0x9504, 64521 }, + { 0x9505, 64558 }, + { 0x9506, 64517 }, + { 0x9507, 15355 }, + { 0x9508, 23305 }, + { 0x9509, 82936 }, + { 0x950A, 126682 }, + { 0x950B, 6571 }, + { 0x950C, 23611 }, + { 0x950D, 69869 }, + { 0x950E, 22288 }, + { 0x950F, 63927 }, + { 0x9510, 52400 }, + { 0x9511, 41206 }, + { 0x9512, 54991 }, + { 0x9513, 13809 }, + { 0x9514, 41481 }, + { 0x9515, 10537 }, + { 0x9516, 133209 }, + { 0x9517, 57557 }, + { 0x9518, 17007 }, + { 0x9519, 40245 }, + { 0x951A, 6544 }, + { 0x951B, 72244 }, + { 0x951C, 43980 }, + { 0x951D, 14084 }, + { 0x951E, 82566 }, + { 0x951F, 22291 }, + { 0x9520, 63355 }, + { 0x9521, 74314 }, + { 0x9522, 63181 }, + { 0x9523, 41627 }, + { 0x9524, 13435 }, + { 0x9525, 64843 }, + { 0x9526, 42313 }, + { 0x9527, 22295 }, + { 0x9528, 52382 }, + { 0x9529, 16691 }, + { 0x952A, 4625 }, + { 0x952B, 64959 }, + { 0x952C, 78635 }, + { 0x952D, 38534 }, + { 0x952E, 77477 }, + { 0x952F, 77528 }, + { 0x9530, 77511 }, + { 0x9531, 77545 }, + { 0x9532, 77562 }, + { 0x9533, 77494 }, + { 0x9534, 43547 }, + { 0x9535, 21187 }, + { 0x9536, 77603 }, + { 0x9537, 43432 }, + { 0x9538, 43483 }, + { 0x9539, 43466 }, + { 0x953A, 43500 }, + { 0x953B, 43541 }, + { 0x953C, 43449 }, + { 0x953D, 21072 }, + { 0x953E, 21123 }, + { 0x953F, 21106 }, + { 0x9540, 21140 }, + { 0x9541, 21181 }, + { 0x9542, 21089 }, + { 0x9543, 77488 }, + { 0x9544, 77539 }, + { 0x9545, 77522 }, + { 0x9546, 77556 }, + { 0x9547, 77597 }, + { 0x9548, 77505 }, + { 0x9549, 43509 }, + { 0x954A, 21149 }, + { 0x954B, 77565 }, + { 0x954C, 43553 }, + { 0x954D, 43565 }, + { 0x954E, 43561 }, + { 0x954F, 43569 }, + { 0x9550, 43573 }, + { 0x9551, 43557 }, + { 0x9552, 21193 }, + { 0x9553, 21205 }, + { 0x9554, 21201 }, + { 0x9555, 21209 }, + { 0x9556, 21213 }, + { 0x9557, 21197 }, + { 0x9558, 77609 }, + { 0x9559, 77621 }, + { 0x955A, 77617 }, + { 0x955B, 77625 }, + { 0x955C, 77629 }, + { 0x955D, 77613 }, + { 0x955E, 43525 }, + { 0x955F, 21165 }, + { 0x9560, 77581 }, + { 0x9561, 43424 }, + { 0x9562, 43475 }, + { 0x9563, 43458 }, + { 0x9564, 43492 }, + { 0x9565, 43517 }, + { 0x9566, 43441 }, + { 0x9567, 21064 }, + { 0x9568, 21115 }, + { 0x9569, 21098 }, + { 0x956A, 21132 }, + { 0x956B, 21157 }, + { 0x956C, 21081 }, + { 0x956D, 77480 }, + { 0x956E, 77531 }, + { 0x956F, 77514 }, + { 0x9570, 77548 }, + { 0x9571, 77573 }, + { 0x9572, 77497 }, + { 0x9573, 43533 }, + { 0x9574, 21173 }, + { 0x9575, 77589 }, + { 0x9576, 43577 }, + { 0x9577, 21217 }, + { 0x9578, 77633 }, + { 0x9579, 43580 }, + { 0x957A, 21220 }, + { 0x957B, 77636 }, + { 0x957C, 43589 }, + { 0x957D, 43586 }, + { 0x957E, 43592 }, + { 0x957F, 21229 }, + { 0x9580, 21226 }, + { 0x9581, 21232 }, + { 0x9582, 82960 }, + { 0x9583, 82969 }, + { 0x9584, 82966 }, + { 0x9585, 82951 }, + { 0x9586, 82957 }, + { 0x9587, 82954 }, + { 0x9588, 82963 }, + { 0x9589, 82981 }, + { 0x958A, 82990 }, + { 0x958B, 82987 }, + { 0x958C, 82972 }, + { 0x958D, 82978 }, + { 0x958E, 82975 }, + { 0x958F, 82984 }, + { 0x9590, 52333 }, + { 0x9591, 127531 }, + { 0x9592, 52960 }, + { 0x9593, 64911 }, + { 0x9594, 42326 }, + { 0x9595, 36333 }, + { 0x9596, 14177 }, + { 0x9597, 16605 }, + { 0x9598, 13903 }, + { 0x9599, 83002 }, + { 0x959A, 137664 }, + { 0x959B, 43976 }, + { 0x959C, 54258 }, + { 0x959D, 43977 }, + { 0x959E, 14499 }, + { 0x959F, 127633 }, + { 0x95A0, 114698 }, + { 0x95A1, 37271 }, + { 0x95A2, 64567 }, + { 0x95A3, 77473 }, + { 0x95A4, 74675 }, + { 0x95A5, 23332 }, + { 0x95A6, 14199 }, + { 0x95A7, 64912 }, + { 0x95A8, 64824 }, + { 0x95A9, 22371 }, + { 0x95AA, 40290 }, + { 0x95AB, 4624 }, + { 0x95AC, 13827 }, + { 0x95AD, 20630 }, + { 0x95AE, 107239 }, + { 0x95AF, 112599 }, + { 0x95B0, 15288 }, + { 0x95B1, 13810 }, + { 0x95B2, 115955 }, + { 0x95B3, 134509 }, + { 0x95B4, 60544 }, + { 0x95B5, 14210 }, + { 0x95B6, 63825 }, + { 0x95B7, 69702 }, + { 0x95B8, 78477 }, + { 0x95B9, 64904 }, + { 0x95BA, 14500 }, + { 0x95BB, 52972 }, + { 0x95BC, 38463 }, + { 0x95BD, 133095 }, + { 0x95BE, 125331 }, + { 0x95BF, 78115 }, + { 0x95C0, 16690 }, + { 0x95C1, 63826 }, + { 0x95C2, 144812 }, + { 0x95C3, 6954 }, + { 0x95C4, 26548 }, + { 0x95C5, 73280 }, + { 0x95C6, 14179 }, + { 0x95C7, 58444 }, + { 0x95C8, 6585 }, + { 0x95C9, 17554 }, + { 0x95CA, 52398 }, + { 0x95CB, 116244 }, + { 0x95CC, 64596 }, + { 0x95CD, 17547 }, + { 0x95CE, 73272 }, + { 0x95CF, 36651 }, + { 0x95D0, 22501 }, + { 0x95D1, 23253 }, + { 0x95D2, 16203 }, + { 0x95D3, 105346 }, + { 0x95D4, 125365 }, + { 0x95D5, 17544 }, + { 0x95D6, 106415 }, + { 0x95D7, 23623 }, + { 0x95D8, 129667 }, + { 0x95D9, 37268 }, + { 0x95DA, 64515 }, + { 0x95DB, 110295 }, + { 0x95DC, 110299 }, + { 0x95DD, 64532 }, + { 0x95DE, 133208 }, + { 0x95DF, 38453 }, + { 0x95E0, 54650 }, + { 0x95E1, 133142 }, + { 0x95E2, 13449 }, + { 0x95E3, 39638 }, + { 0x95E4, 124421 }, + { 0x95E5, 66363 }, + { 0x95E6, 54970 }, + { 0x95E7, 68178 }, + { 0x95E8, 78485 }, + { 0x95E9, 20988 }, + { 0x95EA, 6615 }, + { 0x95EB, 54987 }, + { 0x95EC, 10497 }, + { 0x95ED, 16694 }, + { 0x95EE, 110685 }, + { 0x95EF, 75225 }, + { 0x95F0, 110595 }, + { 0x95F1, 13952 }, + { 0x95F2, 14012 }, + { 0x95F3, 14020 }, + { 0x95F4, 54651 }, + { 0x95F5, 52402 }, + { 0x95F6, 71174 }, + { 0x95F7, 78774 }, + { 0x95F8, 13938 }, + { 0x95F9, 14190 }, + { 0x95FA, 132241 }, + { 0x95FB, 125596 }, + { 0x95FC, 16585 }, + { 0x95FD, 16582 }, + { 0x95FE, 27058 }, + { 0x95FF, 26566 }, + { 0x9600, 125946 }, + { 0x9601, 132602 }, + { 0x9602, 21755 }, + { 0x9603, 21757 }, + { 0x9604, 21879 }, + { 0x9605, 21759 }, + { 0x9606, 21881 }, + { 0x9607, 21889 }, + { 0x9608, 22037 }, + { 0x9609, 21761 }, + { 0x960A, 21883 }, + { 0x960B, 21891 }, + { 0x960C, 22039 }, + { 0x960D, 21897 }, + { 0x960E, 22045 }, + { 0x960F, 22055 }, + { 0x9610, 22185 }, + { 0x9611, 21763 }, + { 0x9612, 21885 }, + { 0x9613, 21893 }, + { 0x9614, 22041 }, + { 0x9615, 21899 }, + { 0x9616, 22057 }, + { 0x9617, 22187 }, + { 0x9618, 21903 }, + { 0x9619, 22049 }, + { 0x961A, 22061 }, + { 0x961B, 22191 }, + { 0x961C, 22065 }, + { 0x961D, 22197 }, + { 0x961E, 22205 }, + { 0x961F, 22259 }, + { 0x9620, 21765 }, + { 0x9621, 21887 }, + { 0x9622, 21895 }, + { 0x9623, 22043 }, + { 0x9624, 21901 }, + { 0x9625, 22047 }, + { 0x9626, 22059 }, + { 0x9627, 22189 }, + { 0x9628, 21905 }, + { 0x9629, 22051 }, + { 0x962A, 22193 }, + { 0x962B, 22067 }, + { 0x962C, 22199 }, + { 0x962D, 22207 }, + { 0x962E, 22261 }, + { 0x962F, 21907 }, + { 0x9630, 22053 }, + { 0x9631, 22063 }, + { 0x9632, 22195 }, + { 0x9633, 22069 }, + { 0x9634, 22201 }, + { 0x9635, 22209 }, + { 0x9636, 22263 }, + { 0x9637, 22071 }, + { 0x9638, 22203 }, + { 0x9639, 22211 }, + { 0x963A, 22265 }, + { 0x963B, 22213 }, + { 0x963C, 22267 }, + { 0x963D, 22269 }, + { 0x963E, 36726 }, + { 0x963F, 36716 }, + { 0x9640, 36804 }, + { 0x9641, 36794 }, + { 0x9642, 36736 }, + { 0x9643, 37040 }, + { 0x9644, 37030 }, + { 0x9645, 37009 }, + { 0x9646, 36999 }, + { 0x9647, 36951 }, + { 0x9648, 37019 }, + { 0x9649, 36970 }, + { 0x964A, 36941 }, + { 0x964B, 36989 }, + { 0x964C, 36960 }, + { 0x964D, 36980 }, + { 0x964E, 36784 }, + { 0x964F, 36755 }, + { 0x9650, 36774 }, + { 0x9651, 36745 }, + { 0x9652, 36765 }, + { 0x9653, 36814 }, + { 0x9654, 42812 }, + { 0x9655, 42802 }, + { 0x9656, 42890 }, + { 0x9657, 42880 }, + { 0x9658, 42822 }, + { 0x9659, 42687 }, + { 0x965A, 42677 }, + { 0x965B, 42656 }, + { 0x965C, 42646 }, + { 0x965D, 42598 }, + { 0x965E, 42666 }, + { 0x965F, 42617 }, + { 0x9660, 42588 }, + { 0x9661, 42636 }, + { 0x9662, 42607 }, + { 0x9663, 42627 }, + { 0x9664, 42870 }, + { 0x9665, 42841 }, + { 0x9666, 42860 }, + { 0x9667, 42831 }, + { 0x9668, 42851 }, + { 0x9669, 42900 }, + { 0x966A, 42490 }, + { 0x966B, 14521 }, + { 0x966C, 42469 }, + { 0x966D, 14551 }, + { 0x966E, 15062 }, + { 0x966F, 43096 }, + { 0x9670, 40704 }, + { 0x9671, 37261 }, + { 0x9672, 111298 }, + { 0x9673, 111302 }, + { 0x9674, 111306 }, + { 0x9675, 111310 }, + { 0x9676, 111314 }, + { 0x9677, 111318 }, + { 0x9678, 131612 }, + { 0x9679, 131616 }, + { 0x967A, 131620 }, + { 0x967B, 131624 }, + { 0x967C, 131628 }, + { 0x967D, 131632 }, + { 0x967E, 14530 }, + { 0x967F, 14560 }, + { 0x9680, 40298 }, + { 0x9681, 40292 }, + { 0x9682, 42478 }, + { 0x9683, 131636 }, + { 0x9684, 42503 }, + { 0x9685, 43011 }, + { 0x9686, 42507 }, + { 0x9687, 43022 }, + { 0x9688, 43007 }, + { 0x9689, 40316 }, + { 0x968A, 40491 }, + { 0x968B, 40323 }, + { 0x968C, 40495 }, + { 0x968D, 40478 }, + { 0x968E, 14695 }, + { 0x968F, 40368 }, + { 0x9690, 42543 }, + { 0x9691, 36694 }, + { 0x9692, 73900 }, + { 0x9693, 42520 }, + { 0x9694, 42552 }, + { 0x9695, 14704 }, + { 0x9696, 71182 }, + { 0x9697, 73903 }, + { 0x9698, 26924 }, + { 0x9699, 42577 }, + { 0x969A, 42791 }, + { 0x969B, 42484 }, + { 0x969C, 14545 }, + { 0x969D, 42775 }, + { 0x969E, 42997 }, + { 0x969F, 37153 }, + { 0x96A0, 36923 }, + { 0x96A1, 5406 }, + { 0x96A2, 5457 }, + { 0x96A3, 5517 }, + { 0x96A4, 5574 }, + { 0x96A5, 5415 }, + { 0x96A6, 5466 }, + { 0x96A7, 5526 }, + { 0x96A8, 5538 }, + { 0x96A9, 5442 }, + { 0x96AA, 5493 }, + { 0x96AB, 5478 }, + { 0x96AC, 5427 }, + { 0x96AD, 5550 }, + { 0x96AE, 5583 }, + { 0x96AF, 5598 }, + { 0x96B0, 5683 }, + { 0x96B1, 144917 }, + { 0x96B2, 73892 }, + { 0x96B3, 14713 }, + { 0x96B4, 40377 }, + { 0x96B5, 73907 }, + { 0x96B6, 125621 }, + { 0x96B7, 132257 }, + { 0x96B8, 124087 }, + { 0x96B9, 82615 }, + { 0x96BA, 14692 }, + { 0x96BB, 40365 }, + { 0x96BC, 69012 }, + { 0x96BD, 40393 }, + { 0x96BE, 109283 }, + { 0x96BF, 109286 }, + { 0x96C0, 109293 }, + { 0x96C1, 43607 }, + { 0x96C2, 14856 }, + { 0x96C3, 63816 }, + { 0x96C4, 40482 }, + { 0x96C5, 109267 }, + { 0x96C6, 41644 }, + { 0x96C7, 41646 }, + { 0x96C8, 41655 }, + { 0x96C9, 41659 }, + { 0x96CA, 41651 }, + { 0x96CB, 43909 }, + { 0x96CC, 43595 }, + { 0x96CD, 64649 }, + { 0x96CE, 21318 }, + { 0x96CF, 14596 }, + { 0x96D0, 14584 }, + { 0x96D1, 5565 }, + { 0x96D2, 5355 }, + { 0x96D3, 5292 }, + { 0x96D4, 5508 }, + { 0x96D5, 5271 }, + { 0x96D6, 5397 }, + { 0x96D7, 5346 }, + { 0x96D8, 5388 }, + { 0x96D9, 5325 }, + { 0x96DA, 5376 }, + { 0x96DB, 5250 }, + { 0x96DC, 5313 }, + { 0x96DD, 5280 }, + { 0x96DE, 5364 }, + { 0x96DF, 5238 }, + { 0x96E0, 5301 }, + { 0x96E1, 12215 }, + { 0x96E2, 40695 }, + { 0x96E3, 52542 }, + { 0x96E4, 15053 }, + { 0x96E5, 43033 }, + { 0x96E6, 37194 }, + { 0x96E7, 63806 }, + { 0x96E8, 63811 }, + { 0x96E9, 12209 }, + { 0x96EA, 40689 }, + { 0x96EB, 52536 }, + { 0x96EC, 15047 }, + { 0x96ED, 12194 }, + { 0x96EE, 52493 }, + { 0x96EF, 52514 }, + { 0x96F0, 12168 }, + { 0x96F1, 127940 }, + { 0x96F2, 127922 }, + { 0x96F3, 127928 }, + { 0x96F4, 127949 }, + { 0x96F5, 127934 }, + { 0x96F6, 127931 }, + { 0x96F7, 127925 }, + { 0x96F8, 127946 }, + { 0x96F9, 127943 }, + { 0x96FA, 127937 }, + { 0x96FB, 106413 }, + { 0x96FC, 10910 }, + { 0x96FD, 10957 }, + { 0x96FE, 10944 }, + { 0x96FF, 10920 }, + { 0x9700, 10914 }, + { 0x9701, 10923 }, + { 0x9702, 10939 }, + { 0x9703, 10949 }, + { 0x9704, 10596 }, + { 0x9705, 10907 }, + { 0x9706, 10931 }, + { 0x9707, 10599 }, + { 0x9708, 10604 }, + { 0x9709, 10963 }, + { 0x970A, 10585 }, + { 0x970B, 10929 }, + { 0x970C, 10624 }, + { 0x970D, 10606 }, + { 0x970E, 10612 }, + { 0x970F, 10633 }, + { 0x9710, 10618 }, + { 0x9711, 10615 }, + { 0x9712, 10609 }, + { 0x9713, 10630 }, + { 0x9714, 10627 }, + { 0x9715, 10621 }, + { 0x9716, 10602 }, + { 0x9717, 10947 }, + { 0x9718, 10941 }, + { 0x9719, 10917 }, + { 0x971A, 10960 }, + { 0x971B, 10933 }, + { 0x971C, 10954 }, + { 0x971D, 10769 }, + { 0x971E, 10774 }, + { 0x971F, 10779 }, + { 0x9720, 10784 }, + { 0x9721, 10789 }, + { 0x9722, 10794 }, + { 0x9723, 10799 }, + { 0x9724, 10804 }, + { 0x9725, 10809 }, + { 0x9726, 10814 }, + { 0x9727, 10819 }, + { 0x9728, 10824 }, + { 0x9729, 10829 }, + { 0x972A, 10834 }, + { 0x972B, 10839 }, + { 0x972C, 10844 }, + { 0x972D, 10849 }, + { 0x972E, 10854 }, + { 0x972F, 10859 }, + { 0x9730, 10864 }, + { 0x9731, 10869 }, + { 0x9732, 10874 }, + { 0x9733, 10879 }, + { 0x9734, 10884 }, + { 0x9735, 10889 }, + { 0x9736, 10894 }, + { 0x9737, 10592 }, + { 0x9738, 10926 }, + { 0x9739, 10903 }, + { 0x973A, 10951 }, + { 0x973B, 10582 }, + { 0x973C, 10636 }, + { 0x973D, 10639 }, + { 0x973E, 10644 }, + { 0x973F, 10649 }, + { 0x9740, 10654 }, + { 0x9741, 10659 }, + { 0x9742, 10664 }, + { 0x9743, 10669 }, + { 0x9744, 10674 }, + { 0x9745, 10679 }, + { 0x9746, 10684 }, + { 0x9747, 10689 }, + { 0x9748, 10694 }, + { 0x9749, 10699 }, + { 0x974A, 10704 }, + { 0x974B, 10709 }, + { 0x974C, 10714 }, + { 0x974D, 10719 }, + { 0x974E, 10724 }, + { 0x974F, 10729 }, + { 0x9750, 10734 }, + { 0x9751, 10739 }, + { 0x9752, 10744 }, + { 0x9753, 10749 }, + { 0x9754, 10754 }, + { 0x9755, 10759 }, + { 0x9756, 10764 }, + { 0x9757, 10588 }, + { 0x9758, 10936 }, + { 0x9759, 10899 }, + { 0x975A, 10912 }, + { 0x975B, 52982 }, +}; +#define UNICODE_CHARNAME_MAX_LENGTH 88 +#define UNICODE_CHARNAME_MAX_WORDS 15 +static const struct { uint16_t index; uint32_t gap; uint16_t length; } unicode_ranges[721] = { + { 0, 32, 95 }, + { 95, 65, 728 }, + { 823, 67, 6 }, + { 829, 71, 7 }, + { 836, 72, 1 }, + { 837, 73, 20 }, + { 857, 74, 397 }, + { 1254, 75, 38 }, + { 1292, 77, 50 }, + { 1342, 79, 3 }, + { 1345, 80, 55 }, + { 1400, 88, 27 }, + { 1427, 92, 6 }, + { 1433, 103, 270 }, + { 1703, 104, 60 }, + { 1763, 106, 101 }, + { 1864, 120, 59 }, + { 1923, 122, 49 }, + { 1972, 124, 15 }, + { 1987, 125, 28 }, + { 2015, 127, 1 }, + { 2016, 128, 11 }, + { 2027, 133, 31 }, + { 2058, 134, 2 }, + { 2060, 139, 237 }, + { 2297, 140, 8 }, + { 2305, 142, 2 }, + { 2307, 144, 22 }, + { 2329, 145, 7 }, + { 2336, 146, 1 }, + { 2337, 149, 4 }, + { 2341, 151, 9 }, + { 2350, 153, 2 }, + { 2352, 155, 4 }, + { 2356, 163, 1 }, + { 2357, 167, 2 }, + { 2359, 168, 5 }, + { 2364, 170, 25 }, + { 2389, 172, 3 }, + { 2392, 173, 6 }, + { 2398, 177, 2 }, + { 2400, 179, 22 }, + { 2422, 180, 7 }, + { 2429, 181, 2 }, + { 2431, 182, 2 }, + { 2433, 183, 2 }, + { 2435, 185, 1 }, + { 2436, 186, 5 }, + { 2441, 190, 2 }, + { 2443, 192, 3 }, + { 2446, 195, 1 }, + { 2447, 202, 4 }, + { 2451, 203, 1 }, + { 2452, 210, 17 }, + { 2469, 220, 3 }, + { 2472, 221, 9 }, + { 2481, 222, 3 }, + { 2484, 223, 22 }, + { 2506, 224, 7 }, + { 2513, 225, 2 }, + { 2515, 226, 5 }, + { 2520, 228, 10 }, + { 2530, 229, 3 }, + { 2533, 230, 3 }, + { 2536, 232, 1 }, + { 2537, 247, 4 }, + { 2541, 249, 12 }, + { 2553, 256, 7 }, + { 2560, 257, 3 }, + { 2563, 258, 8 }, + { 2571, 260, 2 }, + { 2573, 262, 22 }, + { 2595, 263, 7 }, + { 2602, 264, 2 }, + { 2604, 265, 5 }, + { 2609, 267, 9 }, + { 2618, 269, 2 }, + { 2620, 271, 3 }, + { 2623, 278, 3 }, + { 2626, 282, 2 }, + { 2628, 283, 5 }, + { 2633, 285, 18 }, + { 2651, 295, 2 }, + { 2653, 296, 6 }, + { 2659, 299, 3 }, + { 2662, 300, 4 }, + { 2666, 303, 2 }, + { 2668, 304, 1 }, + { 2669, 305, 2 }, + { 2671, 308, 2 }, + { 2673, 311, 3 }, + { 2676, 314, 12 }, + { 2688, 318, 5 }, + { 2693, 321, 3 }, + { 2696, 322, 4 }, + { 2700, 324, 1 }, + { 2701, 330, 1 }, + { 2702, 344, 21 }, + { 2723, 349, 13 }, + { 2736, 350, 3 }, + { 2739, 351, 23 }, + { 2762, 352, 16 }, + { 2778, 354, 9 }, + { 2787, 355, 3 }, + { 2790, 356, 4 }, + { 2794, 363, 2 }, + { 2796, 364, 3 }, + { 2799, 366, 1 }, + { 2800, 368, 4 }, + { 2804, 370, 10 }, + { 2814, 377, 22 }, + { 2836, 378, 3 }, + { 2839, 379, 23 }, + { 2862, 380, 10 }, + { 2872, 381, 5 }, + { 2877, 383, 9 }, + { 2886, 384, 3 }, + { 2889, 385, 4 }, + { 2893, 392, 2 }, + { 2895, 398, 2 }, + { 2897, 399, 4 }, + { 2901, 401, 10 }, + { 2911, 402, 3 }, + { 2914, 414, 13 }, + { 2927, 415, 3 }, + { 2930, 416, 51 }, + { 2981, 417, 3 }, + { 2984, 418, 6 }, + { 2990, 422, 16 }, + { 3006, 424, 26 }, + { 3032, 425, 3 }, + { 3035, 426, 18 }, + { 3053, 429, 24 }, + { 3077, 430, 9 }, + { 3086, 431, 1 }, + { 3087, 433, 7 }, + { 3094, 436, 1 }, + { 3095, 440, 6 }, + { 3101, 441, 1 }, + { 3102, 442, 8 }, + { 3110, 448, 10 }, + { 3120, 450, 3 }, + { 3123, 462, 58 }, + { 3181, 466, 29 }, + { 3210, 503, 2 }, + { 3212, 504, 1 }, + { 3213, 505, 5 }, + { 3218, 506, 24 }, + { 3242, 507, 1 }, + { 3243, 508, 23 }, + { 3266, 510, 5 }, + { 3271, 511, 1 }, + { 3272, 512, 7 }, + { 3279, 513, 10 }, + { 3289, 515, 4 }, + { 3293, 547, 72 }, + { 3365, 548, 36 }, + { 3401, 552, 39 }, + { 3440, 553, 36 }, + { 3476, 554, 15 }, + { 3491, 555, 13 }, + { 3504, 592, 198 }, + { 3702, 593, 1 }, + { 3703, 598, 1 }, + { 3704, 600, 377 }, + { 4081, 601, 4 }, + { 4085, 603, 7 }, + { 4092, 604, 1 }, + { 4093, 605, 4 }, + { 4097, 607, 41 }, + { 4138, 608, 4 }, + { 4142, 610, 33 }, + { 4175, 611, 4 }, + { 4179, 613, 7 }, + { 4186, 614, 1 }, + { 4187, 615, 4 }, + { 4191, 617, 15 }, + { 4206, 618, 57 }, + { 4263, 619, 4 }, + { 4267, 621, 67 }, + { 4334, 623, 32 }, + { 4366, 626, 26 }, + { 4392, 632, 86 }, + { 4478, 634, 6 }, + { 4484, 636, 669 }, + { 5153, 639, 89 }, + { 5242, 646, 22 }, + { 5264, 655, 24 }, + { 5288, 664, 20 }, + { 5308, 676, 13 }, + { 5321, 677, 3 }, + { 5324, 678, 2 }, + { 5326, 690, 94 }, + { 5420, 692, 10 }, + { 5430, 698, 10 }, + { 5440, 704, 26 }, + { 5466, 710, 89 }, + { 5555, 717, 43 }, + { 5598, 722, 70 }, + { 5668, 732, 31 }, + { 5699, 733, 12 }, + { 5711, 737, 12 }, + { 5723, 741, 1 }, + { 5724, 744, 42 }, + { 5766, 746, 5 }, + { 5771, 757, 44 }, + { 5815, 761, 26 }, + { 5841, 767, 11 }, + { 5852, 770, 62 }, + { 5914, 772, 65 }, + { 5979, 773, 29 }, + { 6008, 775, 11 }, + { 6019, 781, 10 }, + { 6029, 787, 14 }, + { 6043, 789, 31 }, + { 6074, 838, 77 }, + { 6151, 839, 166 }, + { 6317, 847, 60 }, + { 6377, 850, 15 }, + { 6392, 853, 62 }, + { 6454, 858, 43 }, + { 6497, 860, 11 }, + { 6508, 868, 43 }, + { 6551, 873, 534 }, + { 7085, 875, 6 }, + { 7091, 877, 38 }, + { 7129, 879, 6 }, + { 7135, 881, 8 }, + { 7143, 882, 1 }, + { 7144, 883, 1 }, + { 7145, 884, 1 }, + { 7146, 885, 31 }, + { 7177, 887, 53 }, + { 7230, 888, 15 }, + { 7245, 889, 14 }, + { 7259, 891, 6 }, + { 7265, 892, 19 }, + { 7284, 894, 3 }, + { 7287, 895, 9 }, + { 7296, 896, 101 }, + { 7397, 897, 12 }, + { 7409, 899, 27 }, + { 7436, 900, 13 }, + { 7449, 903, 33 }, + { 7482, 918, 33 }, + { 7515, 933, 140 }, + { 7655, 937, 666 }, + { 8321, 959, 11 }, + { 8332, 980, 1812 }, + { 10144, 982, 32 }, + { 10176, 983, 349 }, + { 10525, 988, 45 }, + { 10570, 989, 1 }, + { 10571, 994, 1 }, + { 10572, 996, 56 }, + { 10628, 1003, 2 }, + { 10630, 1017, 24 }, + { 10654, 1026, 7 }, + { 10661, 1027, 7 }, + { 10668, 1028, 7 }, + { 10675, 1029, 7 }, + { 10682, 1030, 7 }, + { 10689, 1031, 7 }, + { 10696, 1032, 7 }, + { 10703, 1033, 7 }, + { 10710, 1034, 126 }, + { 10836, 1068, 26 }, + { 10862, 1069, 89 }, + { 10951, 1081, 214 }, + { 11165, 1107, 80 }, + { 11245, 1108, 86 }, + { 11331, 1110, 103 }, + { 11434, 1115, 43 }, + { 11477, 1116, 94 }, + { 11571, 1117, 86 }, + { 11657, 1126, 48 }, + { 11705, 1127, 480 }, + { 12185, 7719, 64 }, + { 12249, 28711, 1165 }, + { 13414, 28714, 55 }, + { 13469, 28723, 348 }, + { 13817, 28743, 184 }, + { 14001, 28751, 206 }, + { 14207, 28753, 2 }, + { 14209, 28754, 1 }, + { 14210, 28755, 8 }, + { 14218, 28776, 59 }, + { 14277, 28779, 10 }, + { 14287, 28785, 56 }, + { 14343, 28793, 70 }, + { 14413, 28801, 12 }, + { 14425, 28807, 116 }, + { 14541, 28818, 30 }, + { 14571, 28821, 78 }, + { 14649, 28822, 11 }, + { 14660, 28826, 33 }, + { 14693, 28827, 55 }, + { 14748, 28836, 14 }, + { 14762, 28838, 10 }, + { 14772, 28840, 103 }, + { 14875, 28864, 28 }, + { 14903, 28874, 6 }, + { 14909, 28876, 6 }, + { 14915, 28878, 6 }, + { 14921, 28887, 7 }, + { 14928, 28888, 7 }, + { 14935, 28889, 60 }, + { 14995, 28893, 126 }, + { 15121, 28895, 10 }, + { 15131, 40085, 23 }, + { 15154, 40089, 49 }, + { 15203, 48843, 2 }, + { 15205, 48902, 3 }, + { 15208, 49048, 7 }, + { 15215, 49060, 5 }, + { 15220, 49065, 26 }, + { 15246, 49066, 5 }, + { 15251, 49067, 1 }, + { 15252, 49068, 2 }, + { 15254, 49069, 2 }, + { 15256, 49070, 125 }, + { 15381, 49086, 445 }, + { 15826, 49088, 54 }, + { 15880, 49095, 1 }, + { 15881, 49127, 16 }, + { 15897, 49143, 10 }, + { 15907, 49149, 51 }, + { 15958, 49150, 19 }, + { 15977, 49151, 4 }, + { 15981, 49155, 5 }, + { 15986, 49156, 135 }, + { 16121, 49158, 1 }, + { 16122, 49159, 190 }, + { 16312, 49162, 6 }, + { 16318, 49164, 6 }, + { 16324, 49166, 6 }, + { 16330, 49168, 3 }, + { 16333, 49171, 7 }, + { 16340, 49172, 7 }, + { 16347, 49182, 5 }, + { 16352, 49184, 12 }, + { 16364, 49185, 26 }, + { 16390, 49186, 19 }, + { 16409, 49187, 2 }, + { 16411, 49188, 15 }, + { 16426, 49190, 14 }, + { 16440, 49224, 123 }, + { 16563, 49229, 3 }, + { 16566, 49233, 45 }, + { 16611, 49236, 88 }, + { 16699, 49237, 13 }, + { 16712, 49240, 1 }, + { 16713, 49287, 46 }, + { 16759, 49417, 29 }, + { 16788, 49420, 49 }, + { 16837, 49435, 28 }, + { 16865, 49439, 36 }, + { 16901, 49448, 30 }, + { 16931, 49453, 43 }, + { 16974, 49458, 30 }, + { 17004, 49459, 37 }, + { 17041, 49463, 14 }, + { 17055, 49505, 158 }, + { 17213, 49507, 10 }, + { 17223, 49513, 36 }, + { 17259, 49517, 36 }, + { 17295, 49521, 40 }, + { 17335, 49529, 52 }, + { 17387, 49540, 12 }, + { 17399, 49541, 15 }, + { 17414, 49542, 7 }, + { 17421, 49543, 2 }, + { 17423, 49544, 11 }, + { 17434, 49545, 15 }, + { 17449, 49546, 7 }, + { 17456, 49547, 2 }, + { 17458, 49550, 52 }, + { 17510, 49562, 311 }, + { 17821, 49571, 22 }, + { 17843, 49581, 8 }, + { 17851, 49605, 6 }, + { 17857, 49606, 42 }, + { 17899, 49607, 9 }, + { 17908, 49676, 6 }, + { 17914, 49678, 1 }, + { 17915, 49679, 44 }, + { 17959, 49680, 2 }, + { 17961, 49683, 1 }, + { 17962, 49685, 23 }, + { 17985, 49686, 72 }, + { 18057, 49694, 9 }, + { 18066, 49742, 19 }, + { 18085, 49743, 2 }, + { 18087, 49748, 33 }, + { 18120, 49751, 27 }, + { 18147, 49756, 1 }, + { 18148, 49820, 56 }, + { 18204, 49824, 20 }, + { 18224, 49826, 50 }, + { 18274, 49827, 2 }, + { 18276, 49832, 8 }, + { 18284, 49833, 3 }, + { 18287, 49834, 29 }, + { 18316, 49836, 3 }, + { 18319, 49840, 10 }, + { 18329, 49847, 9 }, + { 18338, 49854, 64 }, + { 18402, 49886, 39 }, + { 18441, 49890, 12 }, + { 18453, 49899, 54 }, + { 18507, 49902, 29 }, + { 18536, 49904, 27 }, + { 18563, 49909, 26 }, + { 18589, 49916, 4 }, + { 18593, 49928, 7 }, + { 18600, 50008, 73 }, + { 18673, 50063, 51 }, + { 18724, 50076, 51 }, + { 18775, 50083, 46 }, + { 18821, 50091, 10 }, + { 18831, 50097, 38 }, + { 18869, 50100, 29 }, + { 18898, 50108, 2 }, + { 18900, 50316, 31 }, + { 18931, 50317, 42 }, + { 18973, 50318, 3 }, + { 18976, 50320, 2 }, + { 18978, 50336, 3 }, + { 18981, 50391, 44 }, + { 19025, 50399, 42 }, + { 19067, 50421, 26 }, + { 19093, 50459, 28 }, + { 19121, 50479, 23 }, + { 19144, 50488, 78 }, + { 19222, 50492, 36 }, + { 19258, 50501, 68 }, + { 19326, 50511, 1 }, + { 19327, 50513, 25 }, + { 19352, 50520, 10 }, + { 19362, 50526, 53 }, + { 19415, 50527, 18 }, + { 19433, 50535, 39 }, + { 19472, 50544, 96 }, + { 19568, 50545, 20 }, + { 19588, 50556, 18 }, + { 19606, 50557, 47 }, + { 19653, 50619, 7 }, + { 19660, 50620, 1 }, + { 19661, 50621, 4 }, + { 19665, 50622, 15 }, + { 19680, 50623, 11 }, + { 19691, 50629, 59 }, + { 19750, 50634, 10 }, + { 19760, 50640, 4 }, + { 19764, 50641, 8 }, + { 19772, 50643, 2 }, + { 19774, 50645, 22 }, + { 19796, 50646, 7 }, + { 19803, 50647, 2 }, + { 19805, 50648, 5 }, + { 19810, 50649, 10 }, + { 19820, 50651, 2 }, + { 19822, 50653, 3 }, + { 19825, 50655, 1 }, + { 19826, 50661, 1 }, + { 19827, 50666, 7 }, + { 19834, 50668, 7 }, + { 19841, 50671, 5 }, + { 19846, 50682, 10 }, + { 19856, 50683, 1 }, + { 19857, 50685, 1 }, + { 19858, 50686, 38 }, + { 19896, 50687, 10 }, + { 19906, 50688, 1 }, + { 19907, 50690, 1 }, + { 19908, 50691, 4 }, + { 19912, 50692, 10 }, + { 19922, 50693, 2 }, + { 19924, 50701, 2 }, + { 19926, 50730, 92 }, + { 20018, 50731, 5 }, + { 20023, 50761, 72 }, + { 20095, 50769, 10 }, + { 20105, 50935, 54 }, + { 20159, 50937, 38 }, + { 20197, 50971, 69 }, + { 20266, 50982, 10 }, + { 20276, 50988, 13 }, + { 20289, 51007, 58 }, + { 20347, 51013, 10 }, + { 20357, 51019, 20 }, + { 20377, 51047, 27 }, + { 20404, 51049, 15 }, + { 20419, 51053, 23 }, + { 20442, 51238, 60 }, + { 20502, 51338, 83 }, + { 20585, 51350, 8 }, + { 20593, 51352, 1 }, + { 20594, 51354, 8 }, + { 20602, 51355, 2 }, + { 20604, 51356, 30 }, + { 20634, 51357, 2 }, + { 20636, 51359, 12 }, + { 20648, 51368, 10 }, + { 20658, 51438, 8 }, + { 20666, 51440, 46 }, + { 20712, 51442, 11 }, + { 20723, 51469, 72 }, + { 20795, 51477, 83 }, + { 20878, 51490, 73 }, + { 20951, 51497, 10 }, + { 20961, 51679, 34 }, + { 20995, 51693, 10 }, + { 21005, 51699, 9 }, + { 21014, 51700, 45 }, + { 21059, 51701, 14 }, + { 21073, 51711, 29 }, + { 21102, 51714, 32 }, + { 21134, 51716, 22 }, + { 21156, 51717, 14 }, + { 21170, 51790, 7 }, + { 21177, 51791, 2 }, + { 21179, 51792, 44 }, + { 21223, 51795, 1 }, + { 21224, 51796, 2 }, + { 21226, 51797, 9 }, + { 21235, 51805, 10 }, + { 21245, 51811, 6 }, + { 21251, 51812, 2 }, + { 21253, 51813, 37 }, + { 21290, 51814, 2 }, + { 21292, 51815, 6 }, + { 21298, 51822, 10 }, + { 21308, 52132, 25 }, + { 21333, 52139, 17 }, + { 21350, 52140, 41 }, + { 21391, 52143, 29 }, + { 21420, 52228, 1 }, + { 21421, 52243, 50 }, + { 21471, 52256, 923 }, + { 22394, 52358, 111 }, + { 22505, 52359, 5 }, + { 22510, 52370, 196 }, + { 22706, 55006, 99 }, + { 22805, 55019, 1110 }, + { 23915, 55029, 3995 }, + { 27910, 55034, 583 }, + { 28493, 61875, 58 }, + { 28551, 63609, 569 }, + { 29120, 63616, 31 }, + { 29151, 63617, 10 }, + { 29161, 63621, 81 }, + { 29242, 63622, 10 }, + { 29252, 63628, 30 }, + { 29282, 63630, 6 }, + { 29288, 63640, 70 }, + { 29358, 63650, 10 }, + { 29368, 63651, 7 }, + { 29375, 63652, 21 }, + { 29396, 63657, 19 }, + { 29415, 64089, 58 }, + { 29473, 64287, 91 }, + { 29564, 64388, 75 }, + { 29639, 64392, 57 }, + { 29696, 64399, 17 }, + { 29713, 64463, 5 }, + { 29718, 64474, 2 }, + { 29720, 70632, 1238 }, + { 30958, 70673, 1 }, + { 30959, 79617, 4 }, + { 30963, 79618, 7 }, + { 30970, 79619, 2 }, + { 30972, 79620, 291 }, + { 31263, 79635, 1 }, + { 31264, 79664, 3 }, + { 31267, 79666, 1 }, + { 31268, 79680, 4 }, + { 31272, 79688, 396 }, + { 31668, 81996, 107 }, + { 31775, 82001, 13 }, + { 31788, 82004, 9 }, + { 31797, 82011, 10 }, + { 31807, 82013, 8 }, + { 31815, 85945, 250 }, + { 32065, 85951, 436 }, + { 32501, 86027, 46 }, + { 32547, 86029, 23 }, + { 32570, 86038, 116 }, + { 32686, 86098, 246 }, + { 32932, 86108, 39 }, + { 32971, 86110, 194 }, + { 33165, 86131, 70 }, + { 33235, 86253, 20 }, + { 33255, 86265, 20 }, + { 33275, 86277, 87 }, + { 33362, 86286, 25 }, + { 33387, 86421, 85 }, + { 33472, 86422, 71 }, + { 33543, 86423, 2 }, + { 33545, 86425, 1 }, + { 33546, 86427, 2 }, + { 33548, 86429, 4 }, + { 33552, 86430, 12 }, + { 33564, 86431, 1 }, + { 33565, 86432, 7 }, + { 33572, 86433, 65 }, + { 33637, 86434, 4 }, + { 33641, 86436, 8 }, + { 33649, 86437, 7 }, + { 33656, 86438, 28 }, + { 33684, 86439, 4 }, + { 33688, 86440, 5 }, + { 33693, 86441, 1 }, + { 33694, 86444, 7 }, + { 33701, 86445, 340 }, + { 34041, 86447, 292 }, + { 34333, 86449, 702 }, + { 35035, 86464, 5 }, + { 35040, 86465, 15 }, + { 35055, 87569, 31 }, + { 35086, 87575, 6 }, + { 35092, 87788, 7 }, + { 35099, 87789, 17 }, + { 35116, 87791, 7 }, + { 35123, 87792, 2 }, + { 35125, 87793, 5 }, + { 35130, 87798, 62 }, + { 35192, 87831, 1 }, + { 35193, 87943, 45 }, + { 35238, 87946, 14 }, + { 35252, 87948, 10 }, + { 35262, 87952, 2 }, + { 35264, 88272, 31 }, + { 35295, 88289, 58 }, + { 35353, 88294, 1 }, + { 35354, 88758, 42 }, + { 35396, 88972, 43 }, + { 35439, 88976, 1 }, + { 35440, 89456, 7 }, + { 35447, 89457, 4 }, + { 35451, 89458, 2 }, + { 35453, 89459, 15 }, + { 35468, 89460, 197 }, + { 35665, 89462, 16 }, + { 35681, 89503, 76 }, + { 35757, 89507, 10 }, + { 35767, 89511, 2 }, + { 35769, 90296, 68 }, + { 35837, 90372, 61 }, + { 35898, 90566, 4 }, + { 35902, 90567, 27 }, + { 35929, 90568, 2 }, + { 35931, 90569, 1 }, + { 35932, 90571, 1 }, + { 35933, 90572, 10 }, + { 35943, 90573, 4 }, + { 35947, 90574, 1 }, + { 35948, 90575, 1 }, + { 35949, 90581, 1 }, + { 35950, 90585, 1 }, + { 35951, 90586, 1 }, + { 35952, 90587, 1 }, + { 35953, 90588, 3 }, + { 35956, 90589, 2 }, + { 35958, 90590, 1 }, + { 35959, 90592, 1 }, + { 35960, 90593, 1 }, + { 35961, 90594, 1 }, + { 35962, 90595, 1 }, + { 35963, 90596, 1 }, + { 35964, 90597, 2 }, + { 35966, 90598, 1 }, + { 35967, 90600, 4 }, + { 35971, 90601, 7 }, + { 35978, 90602, 4 }, + { 35982, 90603, 4 }, + { 35986, 90604, 1 }, + { 35987, 90605, 10 }, + { 35997, 90606, 17 }, + { 36014, 90611, 3 }, + { 36017, 90612, 5 }, + { 36022, 90613, 17 }, + { 36039, 90665, 2 }, + { 36041, 90935, 44 }, + { 36085, 90939, 100 }, + { 36185, 90951, 15 }, + { 36200, 90953, 15 }, + { 36215, 90954, 15 }, + { 36230, 90955, 37 }, + { 36267, 90965, 174 }, + { 36441, 91021, 29 }, + { 36470, 91034, 44 }, + { 36514, 91038, 9 }, + { 36523, 91045, 2 }, + { 36525, 91059, 6 }, + { 36531, 91213, 984 }, + { 37515, 91217, 17 }, + { 37532, 91220, 13 }, + { 37545, 91223, 119 }, + { 37664, 91227, 95 }, + { 37759, 91233, 12 }, + { 37771, 91237, 1 }, + { 37772, 91252, 12 }, + { 37784, 91256, 56 }, + { 37840, 91264, 10 }, + { 37850, 91270, 40 }, + { 37890, 91278, 30 }, + { 37920, 91280, 12 }, + { 37932, 91284, 2 }, + { 37934, 91346, 340 }, + { 38274, 91358, 14 }, + { 38288, 91360, 13 }, + { 38301, 91363, 10 }, + { 38311, 91368, 56 }, + { 38367, 91375, 15 }, + { 38382, 91377, 11 }, + { 38393, 91383, 9 }, + { 38402, 91390, 147 }, + { 38549, 91391, 102 }, + { 38651, 878854, 1 }, + { 38652, 878884, 96 }, +}; diff --git a/include/libgnulib/uninorm/composition-table-bounds.h b/include/libgnulib/uninorm/composition-table-bounds.h new file mode 100755 index 0000000..ed90bf3 --- /dev/null +++ b/include/libgnulib/uninorm/composition-table-bounds.h @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Canonical composition of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Maximum value of the first argument for which gl_uninorm_compose_lookup + can return a non-NULL value. */ +#define UNINORM_COMPOSE_MAX_ARG1 0x16d69 +/* Maximum value of the second argument for which gl_uninorm_compose_lookup + can return a non-NULL value. */ +#define UNINORM_COMPOSE_MAX_ARG2 0x16d67 diff --git a/include/libgnulib/uninorm/composition-table.gperf b/include/libgnulib/uninorm/composition-table.gperf new file mode 100755 index 0000000..db4c751 --- /dev/null +++ b/include/libgnulib/uninorm/composition-table.gperf @@ -0,0 +1,991 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Canonical composition of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +struct composition_rule { char codes[6]; }; +%struct-type +%language=ANSI-C +%define slot-name codes +%define hash-function-name gl_uninorm_compose_hash +%define lookup-function-name gl_uninorm_compose_lookup +%compare-lengths +%compare-strncmp +%readonly-tables +%omit-struct-type +%% +"\x00\x00\x41\x00\x03\x00", 0x00c0 +"\x00\x00\x41\x00\x03\x01", 0x00c1 +"\x00\x00\x41\x00\x03\x02", 0x00c2 +"\x00\x00\x41\x00\x03\x03", 0x00c3 +"\x00\x00\x41\x00\x03\x08", 0x00c4 +"\x00\x00\x41\x00\x03\x0a", 0x00c5 +"\x00\x00\x43\x00\x03\x27", 0x00c7 +"\x00\x00\x45\x00\x03\x00", 0x00c8 +"\x00\x00\x45\x00\x03\x01", 0x00c9 +"\x00\x00\x45\x00\x03\x02", 0x00ca +"\x00\x00\x45\x00\x03\x08", 0x00cb +"\x00\x00\x49\x00\x03\x00", 0x00cc +"\x00\x00\x49\x00\x03\x01", 0x00cd +"\x00\x00\x49\x00\x03\x02", 0x00ce +"\x00\x00\x49\x00\x03\x08", 0x00cf +"\x00\x00\x4e\x00\x03\x03", 0x00d1 +"\x00\x00\x4f\x00\x03\x00", 0x00d2 +"\x00\x00\x4f\x00\x03\x01", 0x00d3 +"\x00\x00\x4f\x00\x03\x02", 0x00d4 +"\x00\x00\x4f\x00\x03\x03", 0x00d5 +"\x00\x00\x4f\x00\x03\x08", 0x00d6 +"\x00\x00\x55\x00\x03\x00", 0x00d9 +"\x00\x00\x55\x00\x03\x01", 0x00da +"\x00\x00\x55\x00\x03\x02", 0x00db +"\x00\x00\x55\x00\x03\x08", 0x00dc +"\x00\x00\x59\x00\x03\x01", 0x00dd +"\x00\x00\x61\x00\x03\x00", 0x00e0 +"\x00\x00\x61\x00\x03\x01", 0x00e1 +"\x00\x00\x61\x00\x03\x02", 0x00e2 +"\x00\x00\x61\x00\x03\x03", 0x00e3 +"\x00\x00\x61\x00\x03\x08", 0x00e4 +"\x00\x00\x61\x00\x03\x0a", 0x00e5 +"\x00\x00\x63\x00\x03\x27", 0x00e7 +"\x00\x00\x65\x00\x03\x00", 0x00e8 +"\x00\x00\x65\x00\x03\x01", 0x00e9 +"\x00\x00\x65\x00\x03\x02", 0x00ea +"\x00\x00\x65\x00\x03\x08", 0x00eb +"\x00\x00\x69\x00\x03\x00", 0x00ec +"\x00\x00\x69\x00\x03\x01", 0x00ed +"\x00\x00\x69\x00\x03\x02", 0x00ee +"\x00\x00\x69\x00\x03\x08", 0x00ef +"\x00\x00\x6e\x00\x03\x03", 0x00f1 +"\x00\x00\x6f\x00\x03\x00", 0x00f2 +"\x00\x00\x6f\x00\x03\x01", 0x00f3 +"\x00\x00\x6f\x00\x03\x02", 0x00f4 +"\x00\x00\x6f\x00\x03\x03", 0x00f5 +"\x00\x00\x6f\x00\x03\x08", 0x00f6 +"\x00\x00\x75\x00\x03\x00", 0x00f9 +"\x00\x00\x75\x00\x03\x01", 0x00fa +"\x00\x00\x75\x00\x03\x02", 0x00fb +"\x00\x00\x75\x00\x03\x08", 0x00fc +"\x00\x00\x79\x00\x03\x01", 0x00fd +"\x00\x00\x79\x00\x03\x08", 0x00ff +"\x00\x00\x41\x00\x03\x04", 0x0100 +"\x00\x00\x61\x00\x03\x04", 0x0101 +"\x00\x00\x41\x00\x03\x06", 0x0102 +"\x00\x00\x61\x00\x03\x06", 0x0103 +"\x00\x00\x41\x00\x03\x28", 0x0104 +"\x00\x00\x61\x00\x03\x28", 0x0105 +"\x00\x00\x43\x00\x03\x01", 0x0106 +"\x00\x00\x63\x00\x03\x01", 0x0107 +"\x00\x00\x43\x00\x03\x02", 0x0108 +"\x00\x00\x63\x00\x03\x02", 0x0109 +"\x00\x00\x43\x00\x03\x07", 0x010a +"\x00\x00\x63\x00\x03\x07", 0x010b +"\x00\x00\x43\x00\x03\x0c", 0x010c +"\x00\x00\x63\x00\x03\x0c", 0x010d +"\x00\x00\x44\x00\x03\x0c", 0x010e +"\x00\x00\x64\x00\x03\x0c", 0x010f +"\x00\x00\x45\x00\x03\x04", 0x0112 +"\x00\x00\x65\x00\x03\x04", 0x0113 +"\x00\x00\x45\x00\x03\x06", 0x0114 +"\x00\x00\x65\x00\x03\x06", 0x0115 +"\x00\x00\x45\x00\x03\x07", 0x0116 +"\x00\x00\x65\x00\x03\x07", 0x0117 +"\x00\x00\x45\x00\x03\x28", 0x0118 +"\x00\x00\x65\x00\x03\x28", 0x0119 +"\x00\x00\x45\x00\x03\x0c", 0x011a +"\x00\x00\x65\x00\x03\x0c", 0x011b +"\x00\x00\x47\x00\x03\x02", 0x011c +"\x00\x00\x67\x00\x03\x02", 0x011d +"\x00\x00\x47\x00\x03\x06", 0x011e +"\x00\x00\x67\x00\x03\x06", 0x011f +"\x00\x00\x47\x00\x03\x07", 0x0120 +"\x00\x00\x67\x00\x03\x07", 0x0121 +"\x00\x00\x47\x00\x03\x27", 0x0122 +"\x00\x00\x67\x00\x03\x27", 0x0123 +"\x00\x00\x48\x00\x03\x02", 0x0124 +"\x00\x00\x68\x00\x03\x02", 0x0125 +"\x00\x00\x49\x00\x03\x03", 0x0128 +"\x00\x00\x69\x00\x03\x03", 0x0129 +"\x00\x00\x49\x00\x03\x04", 0x012a +"\x00\x00\x69\x00\x03\x04", 0x012b +"\x00\x00\x49\x00\x03\x06", 0x012c +"\x00\x00\x69\x00\x03\x06", 0x012d +"\x00\x00\x49\x00\x03\x28", 0x012e +"\x00\x00\x69\x00\x03\x28", 0x012f +"\x00\x00\x49\x00\x03\x07", 0x0130 +"\x00\x00\x4a\x00\x03\x02", 0x0134 +"\x00\x00\x6a\x00\x03\x02", 0x0135 +"\x00\x00\x4b\x00\x03\x27", 0x0136 +"\x00\x00\x6b\x00\x03\x27", 0x0137 +"\x00\x00\x4c\x00\x03\x01", 0x0139 +"\x00\x00\x6c\x00\x03\x01", 0x013a +"\x00\x00\x4c\x00\x03\x27", 0x013b +"\x00\x00\x6c\x00\x03\x27", 0x013c +"\x00\x00\x4c\x00\x03\x0c", 0x013d +"\x00\x00\x6c\x00\x03\x0c", 0x013e +"\x00\x00\x4e\x00\x03\x01", 0x0143 +"\x00\x00\x6e\x00\x03\x01", 0x0144 +"\x00\x00\x4e\x00\x03\x27", 0x0145 +"\x00\x00\x6e\x00\x03\x27", 0x0146 +"\x00\x00\x4e\x00\x03\x0c", 0x0147 +"\x00\x00\x6e\x00\x03\x0c", 0x0148 +"\x00\x00\x4f\x00\x03\x04", 0x014c +"\x00\x00\x6f\x00\x03\x04", 0x014d +"\x00\x00\x4f\x00\x03\x06", 0x014e +"\x00\x00\x6f\x00\x03\x06", 0x014f +"\x00\x00\x4f\x00\x03\x0b", 0x0150 +"\x00\x00\x6f\x00\x03\x0b", 0x0151 +"\x00\x00\x52\x00\x03\x01", 0x0154 +"\x00\x00\x72\x00\x03\x01", 0x0155 +"\x00\x00\x52\x00\x03\x27", 0x0156 +"\x00\x00\x72\x00\x03\x27", 0x0157 +"\x00\x00\x52\x00\x03\x0c", 0x0158 +"\x00\x00\x72\x00\x03\x0c", 0x0159 +"\x00\x00\x53\x00\x03\x01", 0x015a +"\x00\x00\x73\x00\x03\x01", 0x015b +"\x00\x00\x53\x00\x03\x02", 0x015c +"\x00\x00\x73\x00\x03\x02", 0x015d +"\x00\x00\x53\x00\x03\x27", 0x015e +"\x00\x00\x73\x00\x03\x27", 0x015f +"\x00\x00\x53\x00\x03\x0c", 0x0160 +"\x00\x00\x73\x00\x03\x0c", 0x0161 +"\x00\x00\x54\x00\x03\x27", 0x0162 +"\x00\x00\x74\x00\x03\x27", 0x0163 +"\x00\x00\x54\x00\x03\x0c", 0x0164 +"\x00\x00\x74\x00\x03\x0c", 0x0165 +"\x00\x00\x55\x00\x03\x03", 0x0168 +"\x00\x00\x75\x00\x03\x03", 0x0169 +"\x00\x00\x55\x00\x03\x04", 0x016a +"\x00\x00\x75\x00\x03\x04", 0x016b +"\x00\x00\x55\x00\x03\x06", 0x016c +"\x00\x00\x75\x00\x03\x06", 0x016d +"\x00\x00\x55\x00\x03\x0a", 0x016e +"\x00\x00\x75\x00\x03\x0a", 0x016f +"\x00\x00\x55\x00\x03\x0b", 0x0170 +"\x00\x00\x75\x00\x03\x0b", 0x0171 +"\x00\x00\x55\x00\x03\x28", 0x0172 +"\x00\x00\x75\x00\x03\x28", 0x0173 +"\x00\x00\x57\x00\x03\x02", 0x0174 +"\x00\x00\x77\x00\x03\x02", 0x0175 +"\x00\x00\x59\x00\x03\x02", 0x0176 +"\x00\x00\x79\x00\x03\x02", 0x0177 +"\x00\x00\x59\x00\x03\x08", 0x0178 +"\x00\x00\x5a\x00\x03\x01", 0x0179 +"\x00\x00\x7a\x00\x03\x01", 0x017a +"\x00\x00\x5a\x00\x03\x07", 0x017b +"\x00\x00\x7a\x00\x03\x07", 0x017c +"\x00\x00\x5a\x00\x03\x0c", 0x017d +"\x00\x00\x7a\x00\x03\x0c", 0x017e +"\x00\x00\x4f\x00\x03\x1b", 0x01a0 +"\x00\x00\x6f\x00\x03\x1b", 0x01a1 +"\x00\x00\x55\x00\x03\x1b", 0x01af +"\x00\x00\x75\x00\x03\x1b", 0x01b0 +"\x00\x00\x41\x00\x03\x0c", 0x01cd +"\x00\x00\x61\x00\x03\x0c", 0x01ce +"\x00\x00\x49\x00\x03\x0c", 0x01cf +"\x00\x00\x69\x00\x03\x0c", 0x01d0 +"\x00\x00\x4f\x00\x03\x0c", 0x01d1 +"\x00\x00\x6f\x00\x03\x0c", 0x01d2 +"\x00\x00\x55\x00\x03\x0c", 0x01d3 +"\x00\x00\x75\x00\x03\x0c", 0x01d4 +"\x00\x00\xdc\x00\x03\x04", 0x01d5 +"\x00\x00\xfc\x00\x03\x04", 0x01d6 +"\x00\x00\xdc\x00\x03\x01", 0x01d7 +"\x00\x00\xfc\x00\x03\x01", 0x01d8 +"\x00\x00\xdc\x00\x03\x0c", 0x01d9 +"\x00\x00\xfc\x00\x03\x0c", 0x01da +"\x00\x00\xdc\x00\x03\x00", 0x01db +"\x00\x00\xfc\x00\x03\x00", 0x01dc +"\x00\x00\xc4\x00\x03\x04", 0x01de +"\x00\x00\xe4\x00\x03\x04", 0x01df +"\x00\x02\x26\x00\x03\x04", 0x01e0 +"\x00\x02\x27\x00\x03\x04", 0x01e1 +"\x00\x00\xc6\x00\x03\x04", 0x01e2 +"\x00\x00\xe6\x00\x03\x04", 0x01e3 +"\x00\x00\x47\x00\x03\x0c", 0x01e6 +"\x00\x00\x67\x00\x03\x0c", 0x01e7 +"\x00\x00\x4b\x00\x03\x0c", 0x01e8 +"\x00\x00\x6b\x00\x03\x0c", 0x01e9 +"\x00\x00\x4f\x00\x03\x28", 0x01ea +"\x00\x00\x6f\x00\x03\x28", 0x01eb +"\x00\x01\xea\x00\x03\x04", 0x01ec +"\x00\x01\xeb\x00\x03\x04", 0x01ed +"\x00\x01\xb7\x00\x03\x0c", 0x01ee +"\x00\x02\x92\x00\x03\x0c", 0x01ef +"\x00\x00\x6a\x00\x03\x0c", 0x01f0 +"\x00\x00\x47\x00\x03\x01", 0x01f4 +"\x00\x00\x67\x00\x03\x01", 0x01f5 +"\x00\x00\x4e\x00\x03\x00", 0x01f8 +"\x00\x00\x6e\x00\x03\x00", 0x01f9 +"\x00\x00\xc5\x00\x03\x01", 0x01fa +"\x00\x00\xe5\x00\x03\x01", 0x01fb +"\x00\x00\xc6\x00\x03\x01", 0x01fc +"\x00\x00\xe6\x00\x03\x01", 0x01fd +"\x00\x00\xd8\x00\x03\x01", 0x01fe +"\x00\x00\xf8\x00\x03\x01", 0x01ff +"\x00\x00\x41\x00\x03\x0f", 0x0200 +"\x00\x00\x61\x00\x03\x0f", 0x0201 +"\x00\x00\x41\x00\x03\x11", 0x0202 +"\x00\x00\x61\x00\x03\x11", 0x0203 +"\x00\x00\x45\x00\x03\x0f", 0x0204 +"\x00\x00\x65\x00\x03\x0f", 0x0205 +"\x00\x00\x45\x00\x03\x11", 0x0206 +"\x00\x00\x65\x00\x03\x11", 0x0207 +"\x00\x00\x49\x00\x03\x0f", 0x0208 +"\x00\x00\x69\x00\x03\x0f", 0x0209 +"\x00\x00\x49\x00\x03\x11", 0x020a +"\x00\x00\x69\x00\x03\x11", 0x020b +"\x00\x00\x4f\x00\x03\x0f", 0x020c +"\x00\x00\x6f\x00\x03\x0f", 0x020d +"\x00\x00\x4f\x00\x03\x11", 0x020e +"\x00\x00\x6f\x00\x03\x11", 0x020f +"\x00\x00\x52\x00\x03\x0f", 0x0210 +"\x00\x00\x72\x00\x03\x0f", 0x0211 +"\x00\x00\x52\x00\x03\x11", 0x0212 +"\x00\x00\x72\x00\x03\x11", 0x0213 +"\x00\x00\x55\x00\x03\x0f", 0x0214 +"\x00\x00\x75\x00\x03\x0f", 0x0215 +"\x00\x00\x55\x00\x03\x11", 0x0216 +"\x00\x00\x75\x00\x03\x11", 0x0217 +"\x00\x00\x53\x00\x03\x26", 0x0218 +"\x00\x00\x73\x00\x03\x26", 0x0219 +"\x00\x00\x54\x00\x03\x26", 0x021a +"\x00\x00\x74\x00\x03\x26", 0x021b +"\x00\x00\x48\x00\x03\x0c", 0x021e +"\x00\x00\x68\x00\x03\x0c", 0x021f +"\x00\x00\x41\x00\x03\x07", 0x0226 +"\x00\x00\x61\x00\x03\x07", 0x0227 +"\x00\x00\x45\x00\x03\x27", 0x0228 +"\x00\x00\x65\x00\x03\x27", 0x0229 +"\x00\x00\xd6\x00\x03\x04", 0x022a +"\x00\x00\xf6\x00\x03\x04", 0x022b +"\x00\x00\xd5\x00\x03\x04", 0x022c +"\x00\x00\xf5\x00\x03\x04", 0x022d +"\x00\x00\x4f\x00\x03\x07", 0x022e +"\x00\x00\x6f\x00\x03\x07", 0x022f +"\x00\x02\x2e\x00\x03\x04", 0x0230 +"\x00\x02\x2f\x00\x03\x04", 0x0231 +"\x00\x00\x59\x00\x03\x04", 0x0232 +"\x00\x00\x79\x00\x03\x04", 0x0233 +"\x00\x00\xa8\x00\x03\x01", 0x0385 +"\x00\x03\x91\x00\x03\x01", 0x0386 +"\x00\x03\x95\x00\x03\x01", 0x0388 +"\x00\x03\x97\x00\x03\x01", 0x0389 +"\x00\x03\x99\x00\x03\x01", 0x038a +"\x00\x03\x9f\x00\x03\x01", 0x038c +"\x00\x03\xa5\x00\x03\x01", 0x038e +"\x00\x03\xa9\x00\x03\x01", 0x038f +"\x00\x03\xca\x00\x03\x01", 0x0390 +"\x00\x03\x99\x00\x03\x08", 0x03aa +"\x00\x03\xa5\x00\x03\x08", 0x03ab +"\x00\x03\xb1\x00\x03\x01", 0x03ac +"\x00\x03\xb5\x00\x03\x01", 0x03ad +"\x00\x03\xb7\x00\x03\x01", 0x03ae +"\x00\x03\xb9\x00\x03\x01", 0x03af +"\x00\x03\xcb\x00\x03\x01", 0x03b0 +"\x00\x03\xb9\x00\x03\x08", 0x03ca +"\x00\x03\xc5\x00\x03\x08", 0x03cb +"\x00\x03\xbf\x00\x03\x01", 0x03cc +"\x00\x03\xc5\x00\x03\x01", 0x03cd +"\x00\x03\xc9\x00\x03\x01", 0x03ce +"\x00\x03\xd2\x00\x03\x01", 0x03d3 +"\x00\x03\xd2\x00\x03\x08", 0x03d4 +"\x00\x04\x15\x00\x03\x00", 0x0400 +"\x00\x04\x15\x00\x03\x08", 0x0401 +"\x00\x04\x13\x00\x03\x01", 0x0403 +"\x00\x04\x06\x00\x03\x08", 0x0407 +"\x00\x04\x1a\x00\x03\x01", 0x040c +"\x00\x04\x18\x00\x03\x00", 0x040d +"\x00\x04\x23\x00\x03\x06", 0x040e +"\x00\x04\x18\x00\x03\x06", 0x0419 +"\x00\x04\x38\x00\x03\x06", 0x0439 +"\x00\x04\x35\x00\x03\x00", 0x0450 +"\x00\x04\x35\x00\x03\x08", 0x0451 +"\x00\x04\x33\x00\x03\x01", 0x0453 +"\x00\x04\x56\x00\x03\x08", 0x0457 +"\x00\x04\x3a\x00\x03\x01", 0x045c +"\x00\x04\x38\x00\x03\x00", 0x045d +"\x00\x04\x43\x00\x03\x06", 0x045e +"\x00\x04\x74\x00\x03\x0f", 0x0476 +"\x00\x04\x75\x00\x03\x0f", 0x0477 +"\x00\x04\x16\x00\x03\x06", 0x04c1 +"\x00\x04\x36\x00\x03\x06", 0x04c2 +"\x00\x04\x10\x00\x03\x06", 0x04d0 +"\x00\x04\x30\x00\x03\x06", 0x04d1 +"\x00\x04\x10\x00\x03\x08", 0x04d2 +"\x00\x04\x30\x00\x03\x08", 0x04d3 +"\x00\x04\x15\x00\x03\x06", 0x04d6 +"\x00\x04\x35\x00\x03\x06", 0x04d7 +"\x00\x04\xd8\x00\x03\x08", 0x04da +"\x00\x04\xd9\x00\x03\x08", 0x04db +"\x00\x04\x16\x00\x03\x08", 0x04dc +"\x00\x04\x36\x00\x03\x08", 0x04dd +"\x00\x04\x17\x00\x03\x08", 0x04de +"\x00\x04\x37\x00\x03\x08", 0x04df +"\x00\x04\x18\x00\x03\x04", 0x04e2 +"\x00\x04\x38\x00\x03\x04", 0x04e3 +"\x00\x04\x18\x00\x03\x08", 0x04e4 +"\x00\x04\x38\x00\x03\x08", 0x04e5 +"\x00\x04\x1e\x00\x03\x08", 0x04e6 +"\x00\x04\x3e\x00\x03\x08", 0x04e7 +"\x00\x04\xe8\x00\x03\x08", 0x04ea +"\x00\x04\xe9\x00\x03\x08", 0x04eb +"\x00\x04\x2d\x00\x03\x08", 0x04ec +"\x00\x04\x4d\x00\x03\x08", 0x04ed +"\x00\x04\x23\x00\x03\x04", 0x04ee +"\x00\x04\x43\x00\x03\x04", 0x04ef +"\x00\x04\x23\x00\x03\x08", 0x04f0 +"\x00\x04\x43\x00\x03\x08", 0x04f1 +"\x00\x04\x23\x00\x03\x0b", 0x04f2 +"\x00\x04\x43\x00\x03\x0b", 0x04f3 +"\x00\x04\x27\x00\x03\x08", 0x04f4 +"\x00\x04\x47\x00\x03\x08", 0x04f5 +"\x00\x04\x2b\x00\x03\x08", 0x04f8 +"\x00\x04\x4b\x00\x03\x08", 0x04f9 +"\x00\x06\x27\x00\x06\x53", 0x0622 +"\x00\x06\x27\x00\x06\x54", 0x0623 +"\x00\x06\x48\x00\x06\x54", 0x0624 +"\x00\x06\x27\x00\x06\x55", 0x0625 +"\x00\x06\x4a\x00\x06\x54", 0x0626 +"\x00\x06\xd5\x00\x06\x54", 0x06c0 +"\x00\x06\xc1\x00\x06\x54", 0x06c2 +"\x00\x06\xd2\x00\x06\x54", 0x06d3 +"\x00\x09\x28\x00\x09\x3c", 0x0929 +"\x00\x09\x30\x00\x09\x3c", 0x0931 +"\x00\x09\x33\x00\x09\x3c", 0x0934 +"\x00\x09\xc7\x00\x09\xbe", 0x09cb +"\x00\x09\xc7\x00\x09\xd7", 0x09cc +"\x00\x0b\x47\x00\x0b\x56", 0x0b48 +"\x00\x0b\x47\x00\x0b\x3e", 0x0b4b +"\x00\x0b\x47\x00\x0b\x57", 0x0b4c +"\x00\x0b\x92\x00\x0b\xd7", 0x0b94 +"\x00\x0b\xc6\x00\x0b\xbe", 0x0bca +"\x00\x0b\xc7\x00\x0b\xbe", 0x0bcb +"\x00\x0b\xc6\x00\x0b\xd7", 0x0bcc +"\x00\x0c\x46\x00\x0c\x56", 0x0c48 +"\x00\x0c\xbf\x00\x0c\xd5", 0x0cc0 +"\x00\x0c\xc6\x00\x0c\xd5", 0x0cc7 +"\x00\x0c\xc6\x00\x0c\xd6", 0x0cc8 +"\x00\x0c\xc6\x00\x0c\xc2", 0x0cca +"\x00\x0c\xca\x00\x0c\xd5", 0x0ccb +"\x00\x0d\x46\x00\x0d\x3e", 0x0d4a +"\x00\x0d\x47\x00\x0d\x3e", 0x0d4b +"\x00\x0d\x46\x00\x0d\x57", 0x0d4c +"\x00\x0d\xd9\x00\x0d\xca", 0x0dda +"\x00\x0d\xd9\x00\x0d\xcf", 0x0ddc +"\x00\x0d\xdc\x00\x0d\xca", 0x0ddd +"\x00\x0d\xd9\x00\x0d\xdf", 0x0dde +"\x00\x10\x25\x00\x10\x2e", 0x1026 +"\x00\x1b\x05\x00\x1b\x35", 0x1b06 +"\x00\x1b\x07\x00\x1b\x35", 0x1b08 +"\x00\x1b\x09\x00\x1b\x35", 0x1b0a +"\x00\x1b\x0b\x00\x1b\x35", 0x1b0c +"\x00\x1b\x0d\x00\x1b\x35", 0x1b0e +"\x00\x1b\x11\x00\x1b\x35", 0x1b12 +"\x00\x1b\x3a\x00\x1b\x35", 0x1b3b +"\x00\x1b\x3c\x00\x1b\x35", 0x1b3d +"\x00\x1b\x3e\x00\x1b\x35", 0x1b40 +"\x00\x1b\x3f\x00\x1b\x35", 0x1b41 +"\x00\x1b\x42\x00\x1b\x35", 0x1b43 +"\x00\x00\x41\x00\x03\x25", 0x1e00 +"\x00\x00\x61\x00\x03\x25", 0x1e01 +"\x00\x00\x42\x00\x03\x07", 0x1e02 +"\x00\x00\x62\x00\x03\x07", 0x1e03 +"\x00\x00\x42\x00\x03\x23", 0x1e04 +"\x00\x00\x62\x00\x03\x23", 0x1e05 +"\x00\x00\x42\x00\x03\x31", 0x1e06 +"\x00\x00\x62\x00\x03\x31", 0x1e07 +"\x00\x00\xc7\x00\x03\x01", 0x1e08 +"\x00\x00\xe7\x00\x03\x01", 0x1e09 +"\x00\x00\x44\x00\x03\x07", 0x1e0a +"\x00\x00\x64\x00\x03\x07", 0x1e0b +"\x00\x00\x44\x00\x03\x23", 0x1e0c +"\x00\x00\x64\x00\x03\x23", 0x1e0d +"\x00\x00\x44\x00\x03\x31", 0x1e0e +"\x00\x00\x64\x00\x03\x31", 0x1e0f +"\x00\x00\x44\x00\x03\x27", 0x1e10 +"\x00\x00\x64\x00\x03\x27", 0x1e11 +"\x00\x00\x44\x00\x03\x2d", 0x1e12 +"\x00\x00\x64\x00\x03\x2d", 0x1e13 +"\x00\x01\x12\x00\x03\x00", 0x1e14 +"\x00\x01\x13\x00\x03\x00", 0x1e15 +"\x00\x01\x12\x00\x03\x01", 0x1e16 +"\x00\x01\x13\x00\x03\x01", 0x1e17 +"\x00\x00\x45\x00\x03\x2d", 0x1e18 +"\x00\x00\x65\x00\x03\x2d", 0x1e19 +"\x00\x00\x45\x00\x03\x30", 0x1e1a +"\x00\x00\x65\x00\x03\x30", 0x1e1b +"\x00\x02\x28\x00\x03\x06", 0x1e1c +"\x00\x02\x29\x00\x03\x06", 0x1e1d +"\x00\x00\x46\x00\x03\x07", 0x1e1e +"\x00\x00\x66\x00\x03\x07", 0x1e1f +"\x00\x00\x47\x00\x03\x04", 0x1e20 +"\x00\x00\x67\x00\x03\x04", 0x1e21 +"\x00\x00\x48\x00\x03\x07", 0x1e22 +"\x00\x00\x68\x00\x03\x07", 0x1e23 +"\x00\x00\x48\x00\x03\x23", 0x1e24 +"\x00\x00\x68\x00\x03\x23", 0x1e25 +"\x00\x00\x48\x00\x03\x08", 0x1e26 +"\x00\x00\x68\x00\x03\x08", 0x1e27 +"\x00\x00\x48\x00\x03\x27", 0x1e28 +"\x00\x00\x68\x00\x03\x27", 0x1e29 +"\x00\x00\x48\x00\x03\x2e", 0x1e2a +"\x00\x00\x68\x00\x03\x2e", 0x1e2b +"\x00\x00\x49\x00\x03\x30", 0x1e2c +"\x00\x00\x69\x00\x03\x30", 0x1e2d +"\x00\x00\xcf\x00\x03\x01", 0x1e2e +"\x00\x00\xef\x00\x03\x01", 0x1e2f +"\x00\x00\x4b\x00\x03\x01", 0x1e30 +"\x00\x00\x6b\x00\x03\x01", 0x1e31 +"\x00\x00\x4b\x00\x03\x23", 0x1e32 +"\x00\x00\x6b\x00\x03\x23", 0x1e33 +"\x00\x00\x4b\x00\x03\x31", 0x1e34 +"\x00\x00\x6b\x00\x03\x31", 0x1e35 +"\x00\x00\x4c\x00\x03\x23", 0x1e36 +"\x00\x00\x6c\x00\x03\x23", 0x1e37 +"\x00\x1e\x36\x00\x03\x04", 0x1e38 +"\x00\x1e\x37\x00\x03\x04", 0x1e39 +"\x00\x00\x4c\x00\x03\x31", 0x1e3a +"\x00\x00\x6c\x00\x03\x31", 0x1e3b +"\x00\x00\x4c\x00\x03\x2d", 0x1e3c +"\x00\x00\x6c\x00\x03\x2d", 0x1e3d +"\x00\x00\x4d\x00\x03\x01", 0x1e3e +"\x00\x00\x6d\x00\x03\x01", 0x1e3f +"\x00\x00\x4d\x00\x03\x07", 0x1e40 +"\x00\x00\x6d\x00\x03\x07", 0x1e41 +"\x00\x00\x4d\x00\x03\x23", 0x1e42 +"\x00\x00\x6d\x00\x03\x23", 0x1e43 +"\x00\x00\x4e\x00\x03\x07", 0x1e44 +"\x00\x00\x6e\x00\x03\x07", 0x1e45 +"\x00\x00\x4e\x00\x03\x23", 0x1e46 +"\x00\x00\x6e\x00\x03\x23", 0x1e47 +"\x00\x00\x4e\x00\x03\x31", 0x1e48 +"\x00\x00\x6e\x00\x03\x31", 0x1e49 +"\x00\x00\x4e\x00\x03\x2d", 0x1e4a +"\x00\x00\x6e\x00\x03\x2d", 0x1e4b +"\x00\x00\xd5\x00\x03\x01", 0x1e4c +"\x00\x00\xf5\x00\x03\x01", 0x1e4d +"\x00\x00\xd5\x00\x03\x08", 0x1e4e +"\x00\x00\xf5\x00\x03\x08", 0x1e4f +"\x00\x01\x4c\x00\x03\x00", 0x1e50 +"\x00\x01\x4d\x00\x03\x00", 0x1e51 +"\x00\x01\x4c\x00\x03\x01", 0x1e52 +"\x00\x01\x4d\x00\x03\x01", 0x1e53 +"\x00\x00\x50\x00\x03\x01", 0x1e54 +"\x00\x00\x70\x00\x03\x01", 0x1e55 +"\x00\x00\x50\x00\x03\x07", 0x1e56 +"\x00\x00\x70\x00\x03\x07", 0x1e57 +"\x00\x00\x52\x00\x03\x07", 0x1e58 +"\x00\x00\x72\x00\x03\x07", 0x1e59 +"\x00\x00\x52\x00\x03\x23", 0x1e5a +"\x00\x00\x72\x00\x03\x23", 0x1e5b +"\x00\x1e\x5a\x00\x03\x04", 0x1e5c +"\x00\x1e\x5b\x00\x03\x04", 0x1e5d +"\x00\x00\x52\x00\x03\x31", 0x1e5e +"\x00\x00\x72\x00\x03\x31", 0x1e5f +"\x00\x00\x53\x00\x03\x07", 0x1e60 +"\x00\x00\x73\x00\x03\x07", 0x1e61 +"\x00\x00\x53\x00\x03\x23", 0x1e62 +"\x00\x00\x73\x00\x03\x23", 0x1e63 +"\x00\x01\x5a\x00\x03\x07", 0x1e64 +"\x00\x01\x5b\x00\x03\x07", 0x1e65 +"\x00\x01\x60\x00\x03\x07", 0x1e66 +"\x00\x01\x61\x00\x03\x07", 0x1e67 +"\x00\x1e\x62\x00\x03\x07", 0x1e68 +"\x00\x1e\x63\x00\x03\x07", 0x1e69 +"\x00\x00\x54\x00\x03\x07", 0x1e6a +"\x00\x00\x74\x00\x03\x07", 0x1e6b +"\x00\x00\x54\x00\x03\x23", 0x1e6c +"\x00\x00\x74\x00\x03\x23", 0x1e6d +"\x00\x00\x54\x00\x03\x31", 0x1e6e +"\x00\x00\x74\x00\x03\x31", 0x1e6f +"\x00\x00\x54\x00\x03\x2d", 0x1e70 +"\x00\x00\x74\x00\x03\x2d", 0x1e71 +"\x00\x00\x55\x00\x03\x24", 0x1e72 +"\x00\x00\x75\x00\x03\x24", 0x1e73 +"\x00\x00\x55\x00\x03\x30", 0x1e74 +"\x00\x00\x75\x00\x03\x30", 0x1e75 +"\x00\x00\x55\x00\x03\x2d", 0x1e76 +"\x00\x00\x75\x00\x03\x2d", 0x1e77 +"\x00\x01\x68\x00\x03\x01", 0x1e78 +"\x00\x01\x69\x00\x03\x01", 0x1e79 +"\x00\x01\x6a\x00\x03\x08", 0x1e7a +"\x00\x01\x6b\x00\x03\x08", 0x1e7b +"\x00\x00\x56\x00\x03\x03", 0x1e7c +"\x00\x00\x76\x00\x03\x03", 0x1e7d +"\x00\x00\x56\x00\x03\x23", 0x1e7e +"\x00\x00\x76\x00\x03\x23", 0x1e7f +"\x00\x00\x57\x00\x03\x00", 0x1e80 +"\x00\x00\x77\x00\x03\x00", 0x1e81 +"\x00\x00\x57\x00\x03\x01", 0x1e82 +"\x00\x00\x77\x00\x03\x01", 0x1e83 +"\x00\x00\x57\x00\x03\x08", 0x1e84 +"\x00\x00\x77\x00\x03\x08", 0x1e85 +"\x00\x00\x57\x00\x03\x07", 0x1e86 +"\x00\x00\x77\x00\x03\x07", 0x1e87 +"\x00\x00\x57\x00\x03\x23", 0x1e88 +"\x00\x00\x77\x00\x03\x23", 0x1e89 +"\x00\x00\x58\x00\x03\x07", 0x1e8a +"\x00\x00\x78\x00\x03\x07", 0x1e8b +"\x00\x00\x58\x00\x03\x08", 0x1e8c +"\x00\x00\x78\x00\x03\x08", 0x1e8d +"\x00\x00\x59\x00\x03\x07", 0x1e8e +"\x00\x00\x79\x00\x03\x07", 0x1e8f +"\x00\x00\x5a\x00\x03\x02", 0x1e90 +"\x00\x00\x7a\x00\x03\x02", 0x1e91 +"\x00\x00\x5a\x00\x03\x23", 0x1e92 +"\x00\x00\x7a\x00\x03\x23", 0x1e93 +"\x00\x00\x5a\x00\x03\x31", 0x1e94 +"\x00\x00\x7a\x00\x03\x31", 0x1e95 +"\x00\x00\x68\x00\x03\x31", 0x1e96 +"\x00\x00\x74\x00\x03\x08", 0x1e97 +"\x00\x00\x77\x00\x03\x0a", 0x1e98 +"\x00\x00\x79\x00\x03\x0a", 0x1e99 +"\x00\x01\x7f\x00\x03\x07", 0x1e9b +"\x00\x00\x41\x00\x03\x23", 0x1ea0 +"\x00\x00\x61\x00\x03\x23", 0x1ea1 +"\x00\x00\x41\x00\x03\x09", 0x1ea2 +"\x00\x00\x61\x00\x03\x09", 0x1ea3 +"\x00\x00\xc2\x00\x03\x01", 0x1ea4 +"\x00\x00\xe2\x00\x03\x01", 0x1ea5 +"\x00\x00\xc2\x00\x03\x00", 0x1ea6 +"\x00\x00\xe2\x00\x03\x00", 0x1ea7 +"\x00\x00\xc2\x00\x03\x09", 0x1ea8 +"\x00\x00\xe2\x00\x03\x09", 0x1ea9 +"\x00\x00\xc2\x00\x03\x03", 0x1eaa +"\x00\x00\xe2\x00\x03\x03", 0x1eab +"\x00\x1e\xa0\x00\x03\x02", 0x1eac +"\x00\x1e\xa1\x00\x03\x02", 0x1ead +"\x00\x01\x02\x00\x03\x01", 0x1eae +"\x00\x01\x03\x00\x03\x01", 0x1eaf +"\x00\x01\x02\x00\x03\x00", 0x1eb0 +"\x00\x01\x03\x00\x03\x00", 0x1eb1 +"\x00\x01\x02\x00\x03\x09", 0x1eb2 +"\x00\x01\x03\x00\x03\x09", 0x1eb3 +"\x00\x01\x02\x00\x03\x03", 0x1eb4 +"\x00\x01\x03\x00\x03\x03", 0x1eb5 +"\x00\x1e\xa0\x00\x03\x06", 0x1eb6 +"\x00\x1e\xa1\x00\x03\x06", 0x1eb7 +"\x00\x00\x45\x00\x03\x23", 0x1eb8 +"\x00\x00\x65\x00\x03\x23", 0x1eb9 +"\x00\x00\x45\x00\x03\x09", 0x1eba +"\x00\x00\x65\x00\x03\x09", 0x1ebb +"\x00\x00\x45\x00\x03\x03", 0x1ebc +"\x00\x00\x65\x00\x03\x03", 0x1ebd +"\x00\x00\xca\x00\x03\x01", 0x1ebe +"\x00\x00\xea\x00\x03\x01", 0x1ebf +"\x00\x00\xca\x00\x03\x00", 0x1ec0 +"\x00\x00\xea\x00\x03\x00", 0x1ec1 +"\x00\x00\xca\x00\x03\x09", 0x1ec2 +"\x00\x00\xea\x00\x03\x09", 0x1ec3 +"\x00\x00\xca\x00\x03\x03", 0x1ec4 +"\x00\x00\xea\x00\x03\x03", 0x1ec5 +"\x00\x1e\xb8\x00\x03\x02", 0x1ec6 +"\x00\x1e\xb9\x00\x03\x02", 0x1ec7 +"\x00\x00\x49\x00\x03\x09", 0x1ec8 +"\x00\x00\x69\x00\x03\x09", 0x1ec9 +"\x00\x00\x49\x00\x03\x23", 0x1eca +"\x00\x00\x69\x00\x03\x23", 0x1ecb +"\x00\x00\x4f\x00\x03\x23", 0x1ecc +"\x00\x00\x6f\x00\x03\x23", 0x1ecd +"\x00\x00\x4f\x00\x03\x09", 0x1ece +"\x00\x00\x6f\x00\x03\x09", 0x1ecf +"\x00\x00\xd4\x00\x03\x01", 0x1ed0 +"\x00\x00\xf4\x00\x03\x01", 0x1ed1 +"\x00\x00\xd4\x00\x03\x00", 0x1ed2 +"\x00\x00\xf4\x00\x03\x00", 0x1ed3 +"\x00\x00\xd4\x00\x03\x09", 0x1ed4 +"\x00\x00\xf4\x00\x03\x09", 0x1ed5 +"\x00\x00\xd4\x00\x03\x03", 0x1ed6 +"\x00\x00\xf4\x00\x03\x03", 0x1ed7 +"\x00\x1e\xcc\x00\x03\x02", 0x1ed8 +"\x00\x1e\xcd\x00\x03\x02", 0x1ed9 +"\x00\x01\xa0\x00\x03\x01", 0x1eda +"\x00\x01\xa1\x00\x03\x01", 0x1edb +"\x00\x01\xa0\x00\x03\x00", 0x1edc +"\x00\x01\xa1\x00\x03\x00", 0x1edd +"\x00\x01\xa0\x00\x03\x09", 0x1ede +"\x00\x01\xa1\x00\x03\x09", 0x1edf +"\x00\x01\xa0\x00\x03\x03", 0x1ee0 +"\x00\x01\xa1\x00\x03\x03", 0x1ee1 +"\x00\x01\xa0\x00\x03\x23", 0x1ee2 +"\x00\x01\xa1\x00\x03\x23", 0x1ee3 +"\x00\x00\x55\x00\x03\x23", 0x1ee4 +"\x00\x00\x75\x00\x03\x23", 0x1ee5 +"\x00\x00\x55\x00\x03\x09", 0x1ee6 +"\x00\x00\x75\x00\x03\x09", 0x1ee7 +"\x00\x01\xaf\x00\x03\x01", 0x1ee8 +"\x00\x01\xb0\x00\x03\x01", 0x1ee9 +"\x00\x01\xaf\x00\x03\x00", 0x1eea +"\x00\x01\xb0\x00\x03\x00", 0x1eeb +"\x00\x01\xaf\x00\x03\x09", 0x1eec +"\x00\x01\xb0\x00\x03\x09", 0x1eed +"\x00\x01\xaf\x00\x03\x03", 0x1eee +"\x00\x01\xb0\x00\x03\x03", 0x1eef +"\x00\x01\xaf\x00\x03\x23", 0x1ef0 +"\x00\x01\xb0\x00\x03\x23", 0x1ef1 +"\x00\x00\x59\x00\x03\x00", 0x1ef2 +"\x00\x00\x79\x00\x03\x00", 0x1ef3 +"\x00\x00\x59\x00\x03\x23", 0x1ef4 +"\x00\x00\x79\x00\x03\x23", 0x1ef5 +"\x00\x00\x59\x00\x03\x09", 0x1ef6 +"\x00\x00\x79\x00\x03\x09", 0x1ef7 +"\x00\x00\x59\x00\x03\x03", 0x1ef8 +"\x00\x00\x79\x00\x03\x03", 0x1ef9 +"\x00\x03\xb1\x00\x03\x13", 0x1f00 +"\x00\x03\xb1\x00\x03\x14", 0x1f01 +"\x00\x1f\x00\x00\x03\x00", 0x1f02 +"\x00\x1f\x01\x00\x03\x00", 0x1f03 +"\x00\x1f\x00\x00\x03\x01", 0x1f04 +"\x00\x1f\x01\x00\x03\x01", 0x1f05 +"\x00\x1f\x00\x00\x03\x42", 0x1f06 +"\x00\x1f\x01\x00\x03\x42", 0x1f07 +"\x00\x03\x91\x00\x03\x13", 0x1f08 +"\x00\x03\x91\x00\x03\x14", 0x1f09 +"\x00\x1f\x08\x00\x03\x00", 0x1f0a +"\x00\x1f\x09\x00\x03\x00", 0x1f0b +"\x00\x1f\x08\x00\x03\x01", 0x1f0c +"\x00\x1f\x09\x00\x03\x01", 0x1f0d +"\x00\x1f\x08\x00\x03\x42", 0x1f0e +"\x00\x1f\x09\x00\x03\x42", 0x1f0f +"\x00\x03\xb5\x00\x03\x13", 0x1f10 +"\x00\x03\xb5\x00\x03\x14", 0x1f11 +"\x00\x1f\x10\x00\x03\x00", 0x1f12 +"\x00\x1f\x11\x00\x03\x00", 0x1f13 +"\x00\x1f\x10\x00\x03\x01", 0x1f14 +"\x00\x1f\x11\x00\x03\x01", 0x1f15 +"\x00\x03\x95\x00\x03\x13", 0x1f18 +"\x00\x03\x95\x00\x03\x14", 0x1f19 +"\x00\x1f\x18\x00\x03\x00", 0x1f1a +"\x00\x1f\x19\x00\x03\x00", 0x1f1b +"\x00\x1f\x18\x00\x03\x01", 0x1f1c +"\x00\x1f\x19\x00\x03\x01", 0x1f1d +"\x00\x03\xb7\x00\x03\x13", 0x1f20 +"\x00\x03\xb7\x00\x03\x14", 0x1f21 +"\x00\x1f\x20\x00\x03\x00", 0x1f22 +"\x00\x1f\x21\x00\x03\x00", 0x1f23 +"\x00\x1f\x20\x00\x03\x01", 0x1f24 +"\x00\x1f\x21\x00\x03\x01", 0x1f25 +"\x00\x1f\x20\x00\x03\x42", 0x1f26 +"\x00\x1f\x21\x00\x03\x42", 0x1f27 +"\x00\x03\x97\x00\x03\x13", 0x1f28 +"\x00\x03\x97\x00\x03\x14", 0x1f29 +"\x00\x1f\x28\x00\x03\x00", 0x1f2a +"\x00\x1f\x29\x00\x03\x00", 0x1f2b +"\x00\x1f\x28\x00\x03\x01", 0x1f2c +"\x00\x1f\x29\x00\x03\x01", 0x1f2d +"\x00\x1f\x28\x00\x03\x42", 0x1f2e +"\x00\x1f\x29\x00\x03\x42", 0x1f2f +"\x00\x03\xb9\x00\x03\x13", 0x1f30 +"\x00\x03\xb9\x00\x03\x14", 0x1f31 +"\x00\x1f\x30\x00\x03\x00", 0x1f32 +"\x00\x1f\x31\x00\x03\x00", 0x1f33 +"\x00\x1f\x30\x00\x03\x01", 0x1f34 +"\x00\x1f\x31\x00\x03\x01", 0x1f35 +"\x00\x1f\x30\x00\x03\x42", 0x1f36 +"\x00\x1f\x31\x00\x03\x42", 0x1f37 +"\x00\x03\x99\x00\x03\x13", 0x1f38 +"\x00\x03\x99\x00\x03\x14", 0x1f39 +"\x00\x1f\x38\x00\x03\x00", 0x1f3a +"\x00\x1f\x39\x00\x03\x00", 0x1f3b +"\x00\x1f\x38\x00\x03\x01", 0x1f3c +"\x00\x1f\x39\x00\x03\x01", 0x1f3d +"\x00\x1f\x38\x00\x03\x42", 0x1f3e +"\x00\x1f\x39\x00\x03\x42", 0x1f3f +"\x00\x03\xbf\x00\x03\x13", 0x1f40 +"\x00\x03\xbf\x00\x03\x14", 0x1f41 +"\x00\x1f\x40\x00\x03\x00", 0x1f42 +"\x00\x1f\x41\x00\x03\x00", 0x1f43 +"\x00\x1f\x40\x00\x03\x01", 0x1f44 +"\x00\x1f\x41\x00\x03\x01", 0x1f45 +"\x00\x03\x9f\x00\x03\x13", 0x1f48 +"\x00\x03\x9f\x00\x03\x14", 0x1f49 +"\x00\x1f\x48\x00\x03\x00", 0x1f4a +"\x00\x1f\x49\x00\x03\x00", 0x1f4b +"\x00\x1f\x48\x00\x03\x01", 0x1f4c +"\x00\x1f\x49\x00\x03\x01", 0x1f4d +"\x00\x03\xc5\x00\x03\x13", 0x1f50 +"\x00\x03\xc5\x00\x03\x14", 0x1f51 +"\x00\x1f\x50\x00\x03\x00", 0x1f52 +"\x00\x1f\x51\x00\x03\x00", 0x1f53 +"\x00\x1f\x50\x00\x03\x01", 0x1f54 +"\x00\x1f\x51\x00\x03\x01", 0x1f55 +"\x00\x1f\x50\x00\x03\x42", 0x1f56 +"\x00\x1f\x51\x00\x03\x42", 0x1f57 +"\x00\x03\xa5\x00\x03\x14", 0x1f59 +"\x00\x1f\x59\x00\x03\x00", 0x1f5b +"\x00\x1f\x59\x00\x03\x01", 0x1f5d +"\x00\x1f\x59\x00\x03\x42", 0x1f5f +"\x00\x03\xc9\x00\x03\x13", 0x1f60 +"\x00\x03\xc9\x00\x03\x14", 0x1f61 +"\x00\x1f\x60\x00\x03\x00", 0x1f62 +"\x00\x1f\x61\x00\x03\x00", 0x1f63 +"\x00\x1f\x60\x00\x03\x01", 0x1f64 +"\x00\x1f\x61\x00\x03\x01", 0x1f65 +"\x00\x1f\x60\x00\x03\x42", 0x1f66 +"\x00\x1f\x61\x00\x03\x42", 0x1f67 +"\x00\x03\xa9\x00\x03\x13", 0x1f68 +"\x00\x03\xa9\x00\x03\x14", 0x1f69 +"\x00\x1f\x68\x00\x03\x00", 0x1f6a +"\x00\x1f\x69\x00\x03\x00", 0x1f6b +"\x00\x1f\x68\x00\x03\x01", 0x1f6c +"\x00\x1f\x69\x00\x03\x01", 0x1f6d +"\x00\x1f\x68\x00\x03\x42", 0x1f6e +"\x00\x1f\x69\x00\x03\x42", 0x1f6f +"\x00\x03\xb1\x00\x03\x00", 0x1f70 +"\x00\x03\xb5\x00\x03\x00", 0x1f72 +"\x00\x03\xb7\x00\x03\x00", 0x1f74 +"\x00\x03\xb9\x00\x03\x00", 0x1f76 +"\x00\x03\xbf\x00\x03\x00", 0x1f78 +"\x00\x03\xc5\x00\x03\x00", 0x1f7a +"\x00\x03\xc9\x00\x03\x00", 0x1f7c +"\x00\x1f\x00\x00\x03\x45", 0x1f80 +"\x00\x1f\x01\x00\x03\x45", 0x1f81 +"\x00\x1f\x02\x00\x03\x45", 0x1f82 +"\x00\x1f\x03\x00\x03\x45", 0x1f83 +"\x00\x1f\x04\x00\x03\x45", 0x1f84 +"\x00\x1f\x05\x00\x03\x45", 0x1f85 +"\x00\x1f\x06\x00\x03\x45", 0x1f86 +"\x00\x1f\x07\x00\x03\x45", 0x1f87 +"\x00\x1f\x08\x00\x03\x45", 0x1f88 +"\x00\x1f\x09\x00\x03\x45", 0x1f89 +"\x00\x1f\x0a\x00\x03\x45", 0x1f8a +"\x00\x1f\x0b\x00\x03\x45", 0x1f8b +"\x00\x1f\x0c\x00\x03\x45", 0x1f8c +"\x00\x1f\x0d\x00\x03\x45", 0x1f8d +"\x00\x1f\x0e\x00\x03\x45", 0x1f8e +"\x00\x1f\x0f\x00\x03\x45", 0x1f8f +"\x00\x1f\x20\x00\x03\x45", 0x1f90 +"\x00\x1f\x21\x00\x03\x45", 0x1f91 +"\x00\x1f\x22\x00\x03\x45", 0x1f92 +"\x00\x1f\x23\x00\x03\x45", 0x1f93 +"\x00\x1f\x24\x00\x03\x45", 0x1f94 +"\x00\x1f\x25\x00\x03\x45", 0x1f95 +"\x00\x1f\x26\x00\x03\x45", 0x1f96 +"\x00\x1f\x27\x00\x03\x45", 0x1f97 +"\x00\x1f\x28\x00\x03\x45", 0x1f98 +"\x00\x1f\x29\x00\x03\x45", 0x1f99 +"\x00\x1f\x2a\x00\x03\x45", 0x1f9a +"\x00\x1f\x2b\x00\x03\x45", 0x1f9b +"\x00\x1f\x2c\x00\x03\x45", 0x1f9c +"\x00\x1f\x2d\x00\x03\x45", 0x1f9d +"\x00\x1f\x2e\x00\x03\x45", 0x1f9e +"\x00\x1f\x2f\x00\x03\x45", 0x1f9f +"\x00\x1f\x60\x00\x03\x45", 0x1fa0 +"\x00\x1f\x61\x00\x03\x45", 0x1fa1 +"\x00\x1f\x62\x00\x03\x45", 0x1fa2 +"\x00\x1f\x63\x00\x03\x45", 0x1fa3 +"\x00\x1f\x64\x00\x03\x45", 0x1fa4 +"\x00\x1f\x65\x00\x03\x45", 0x1fa5 +"\x00\x1f\x66\x00\x03\x45", 0x1fa6 +"\x00\x1f\x67\x00\x03\x45", 0x1fa7 +"\x00\x1f\x68\x00\x03\x45", 0x1fa8 +"\x00\x1f\x69\x00\x03\x45", 0x1fa9 +"\x00\x1f\x6a\x00\x03\x45", 0x1faa +"\x00\x1f\x6b\x00\x03\x45", 0x1fab +"\x00\x1f\x6c\x00\x03\x45", 0x1fac +"\x00\x1f\x6d\x00\x03\x45", 0x1fad +"\x00\x1f\x6e\x00\x03\x45", 0x1fae +"\x00\x1f\x6f\x00\x03\x45", 0x1faf +"\x00\x03\xb1\x00\x03\x06", 0x1fb0 +"\x00\x03\xb1\x00\x03\x04", 0x1fb1 +"\x00\x1f\x70\x00\x03\x45", 0x1fb2 +"\x00\x03\xb1\x00\x03\x45", 0x1fb3 +"\x00\x03\xac\x00\x03\x45", 0x1fb4 +"\x00\x03\xb1\x00\x03\x42", 0x1fb6 +"\x00\x1f\xb6\x00\x03\x45", 0x1fb7 +"\x00\x03\x91\x00\x03\x06", 0x1fb8 +"\x00\x03\x91\x00\x03\x04", 0x1fb9 +"\x00\x03\x91\x00\x03\x00", 0x1fba +"\x00\x03\x91\x00\x03\x45", 0x1fbc +"\x00\x00\xa8\x00\x03\x42", 0x1fc1 +"\x00\x1f\x74\x00\x03\x45", 0x1fc2 +"\x00\x03\xb7\x00\x03\x45", 0x1fc3 +"\x00\x03\xae\x00\x03\x45", 0x1fc4 +"\x00\x03\xb7\x00\x03\x42", 0x1fc6 +"\x00\x1f\xc6\x00\x03\x45", 0x1fc7 +"\x00\x03\x95\x00\x03\x00", 0x1fc8 +"\x00\x03\x97\x00\x03\x00", 0x1fca +"\x00\x03\x97\x00\x03\x45", 0x1fcc +"\x00\x1f\xbf\x00\x03\x00", 0x1fcd +"\x00\x1f\xbf\x00\x03\x01", 0x1fce +"\x00\x1f\xbf\x00\x03\x42", 0x1fcf +"\x00\x03\xb9\x00\x03\x06", 0x1fd0 +"\x00\x03\xb9\x00\x03\x04", 0x1fd1 +"\x00\x03\xca\x00\x03\x00", 0x1fd2 +"\x00\x03\xb9\x00\x03\x42", 0x1fd6 +"\x00\x03\xca\x00\x03\x42", 0x1fd7 +"\x00\x03\x99\x00\x03\x06", 0x1fd8 +"\x00\x03\x99\x00\x03\x04", 0x1fd9 +"\x00\x03\x99\x00\x03\x00", 0x1fda +"\x00\x1f\xfe\x00\x03\x00", 0x1fdd +"\x00\x1f\xfe\x00\x03\x01", 0x1fde +"\x00\x1f\xfe\x00\x03\x42", 0x1fdf +"\x00\x03\xc5\x00\x03\x06", 0x1fe0 +"\x00\x03\xc5\x00\x03\x04", 0x1fe1 +"\x00\x03\xcb\x00\x03\x00", 0x1fe2 +"\x00\x03\xc1\x00\x03\x13", 0x1fe4 +"\x00\x03\xc1\x00\x03\x14", 0x1fe5 +"\x00\x03\xc5\x00\x03\x42", 0x1fe6 +"\x00\x03\xcb\x00\x03\x42", 0x1fe7 +"\x00\x03\xa5\x00\x03\x06", 0x1fe8 +"\x00\x03\xa5\x00\x03\x04", 0x1fe9 +"\x00\x03\xa5\x00\x03\x00", 0x1fea +"\x00\x03\xa1\x00\x03\x14", 0x1fec +"\x00\x00\xa8\x00\x03\x00", 0x1fed +"\x00\x1f\x7c\x00\x03\x45", 0x1ff2 +"\x00\x03\xc9\x00\x03\x45", 0x1ff3 +"\x00\x03\xce\x00\x03\x45", 0x1ff4 +"\x00\x03\xc9\x00\x03\x42", 0x1ff6 +"\x00\x1f\xf6\x00\x03\x45", 0x1ff7 +"\x00\x03\x9f\x00\x03\x00", 0x1ff8 +"\x00\x03\xa9\x00\x03\x00", 0x1ffa +"\x00\x03\xa9\x00\x03\x45", 0x1ffc +"\x00\x21\x90\x00\x03\x38", 0x219a +"\x00\x21\x92\x00\x03\x38", 0x219b +"\x00\x21\x94\x00\x03\x38", 0x21ae +"\x00\x21\xd0\x00\x03\x38", 0x21cd +"\x00\x21\xd4\x00\x03\x38", 0x21ce +"\x00\x21\xd2\x00\x03\x38", 0x21cf +"\x00\x22\x03\x00\x03\x38", 0x2204 +"\x00\x22\x08\x00\x03\x38", 0x2209 +"\x00\x22\x0b\x00\x03\x38", 0x220c +"\x00\x22\x23\x00\x03\x38", 0x2224 +"\x00\x22\x25\x00\x03\x38", 0x2226 +"\x00\x22\x3c\x00\x03\x38", 0x2241 +"\x00\x22\x43\x00\x03\x38", 0x2244 +"\x00\x22\x45\x00\x03\x38", 0x2247 +"\x00\x22\x48\x00\x03\x38", 0x2249 +"\x00\x00\x3d\x00\x03\x38", 0x2260 +"\x00\x22\x61\x00\x03\x38", 0x2262 +"\x00\x22\x4d\x00\x03\x38", 0x226d +"\x00\x00\x3c\x00\x03\x38", 0x226e +"\x00\x00\x3e\x00\x03\x38", 0x226f +"\x00\x22\x64\x00\x03\x38", 0x2270 +"\x00\x22\x65\x00\x03\x38", 0x2271 +"\x00\x22\x72\x00\x03\x38", 0x2274 +"\x00\x22\x73\x00\x03\x38", 0x2275 +"\x00\x22\x76\x00\x03\x38", 0x2278 +"\x00\x22\x77\x00\x03\x38", 0x2279 +"\x00\x22\x7a\x00\x03\x38", 0x2280 +"\x00\x22\x7b\x00\x03\x38", 0x2281 +"\x00\x22\x82\x00\x03\x38", 0x2284 +"\x00\x22\x83\x00\x03\x38", 0x2285 +"\x00\x22\x86\x00\x03\x38", 0x2288 +"\x00\x22\x87\x00\x03\x38", 0x2289 +"\x00\x22\xa2\x00\x03\x38", 0x22ac +"\x00\x22\xa8\x00\x03\x38", 0x22ad +"\x00\x22\xa9\x00\x03\x38", 0x22ae +"\x00\x22\xab\x00\x03\x38", 0x22af +"\x00\x22\x7c\x00\x03\x38", 0x22e0 +"\x00\x22\x7d\x00\x03\x38", 0x22e1 +"\x00\x22\x91\x00\x03\x38", 0x22e2 +"\x00\x22\x92\x00\x03\x38", 0x22e3 +"\x00\x22\xb2\x00\x03\x38", 0x22ea +"\x00\x22\xb3\x00\x03\x38", 0x22eb +"\x00\x22\xb4\x00\x03\x38", 0x22ec +"\x00\x22\xb5\x00\x03\x38", 0x22ed +"\x00\x30\x4b\x00\x30\x99", 0x304c +"\x00\x30\x4d\x00\x30\x99", 0x304e +"\x00\x30\x4f\x00\x30\x99", 0x3050 +"\x00\x30\x51\x00\x30\x99", 0x3052 +"\x00\x30\x53\x00\x30\x99", 0x3054 +"\x00\x30\x55\x00\x30\x99", 0x3056 +"\x00\x30\x57\x00\x30\x99", 0x3058 +"\x00\x30\x59\x00\x30\x99", 0x305a +"\x00\x30\x5b\x00\x30\x99", 0x305c +"\x00\x30\x5d\x00\x30\x99", 0x305e +"\x00\x30\x5f\x00\x30\x99", 0x3060 +"\x00\x30\x61\x00\x30\x99", 0x3062 +"\x00\x30\x64\x00\x30\x99", 0x3065 +"\x00\x30\x66\x00\x30\x99", 0x3067 +"\x00\x30\x68\x00\x30\x99", 0x3069 +"\x00\x30\x6f\x00\x30\x99", 0x3070 +"\x00\x30\x6f\x00\x30\x9a", 0x3071 +"\x00\x30\x72\x00\x30\x99", 0x3073 +"\x00\x30\x72\x00\x30\x9a", 0x3074 +"\x00\x30\x75\x00\x30\x99", 0x3076 +"\x00\x30\x75\x00\x30\x9a", 0x3077 +"\x00\x30\x78\x00\x30\x99", 0x3079 +"\x00\x30\x78\x00\x30\x9a", 0x307a +"\x00\x30\x7b\x00\x30\x99", 0x307c +"\x00\x30\x7b\x00\x30\x9a", 0x307d +"\x00\x30\x46\x00\x30\x99", 0x3094 +"\x00\x30\x9d\x00\x30\x99", 0x309e +"\x00\x30\xab\x00\x30\x99", 0x30ac +"\x00\x30\xad\x00\x30\x99", 0x30ae +"\x00\x30\xaf\x00\x30\x99", 0x30b0 +"\x00\x30\xb1\x00\x30\x99", 0x30b2 +"\x00\x30\xb3\x00\x30\x99", 0x30b4 +"\x00\x30\xb5\x00\x30\x99", 0x30b6 +"\x00\x30\xb7\x00\x30\x99", 0x30b8 +"\x00\x30\xb9\x00\x30\x99", 0x30ba +"\x00\x30\xbb\x00\x30\x99", 0x30bc +"\x00\x30\xbd\x00\x30\x99", 0x30be +"\x00\x30\xbf\x00\x30\x99", 0x30c0 +"\x00\x30\xc1\x00\x30\x99", 0x30c2 +"\x00\x30\xc4\x00\x30\x99", 0x30c5 +"\x00\x30\xc6\x00\x30\x99", 0x30c7 +"\x00\x30\xc8\x00\x30\x99", 0x30c9 +"\x00\x30\xcf\x00\x30\x99", 0x30d0 +"\x00\x30\xcf\x00\x30\x9a", 0x30d1 +"\x00\x30\xd2\x00\x30\x99", 0x30d3 +"\x00\x30\xd2\x00\x30\x9a", 0x30d4 +"\x00\x30\xd5\x00\x30\x99", 0x30d6 +"\x00\x30\xd5\x00\x30\x9a", 0x30d7 +"\x00\x30\xd8\x00\x30\x99", 0x30d9 +"\x00\x30\xd8\x00\x30\x9a", 0x30da +"\x00\x30\xdb\x00\x30\x99", 0x30dc +"\x00\x30\xdb\x00\x30\x9a", 0x30dd +"\x00\x30\xa6\x00\x30\x99", 0x30f4 +"\x00\x30\xef\x00\x30\x99", 0x30f7 +"\x00\x30\xf0\x00\x30\x99", 0x30f8 +"\x00\x30\xf1\x00\x30\x99", 0x30f9 +"\x00\x30\xf2\x00\x30\x99", 0x30fa +"\x00\x30\xfd\x00\x30\x99", 0x30fe +"\x01\x05\xd2\x00\x03\x07", 0x105c9 +"\x01\x05\xda\x00\x03\x07", 0x105e4 +"\x01\x10\x99\x01\x10\xba", 0x1109a +"\x01\x10\x9b\x01\x10\xba", 0x1109c +"\x01\x10\xa5\x01\x10\xba", 0x110ab +"\x01\x11\x31\x01\x11\x27", 0x1112e +"\x01\x11\x32\x01\x11\x27", 0x1112f +"\x01\x13\x47\x01\x13\x3e", 0x1134b +"\x01\x13\x47\x01\x13\x57", 0x1134c +"\x01\x13\x82\x01\x13\xc9", 0x11383 +"\x01\x13\x84\x01\x13\xbb", 0x11385 +"\x01\x13\x8b\x01\x13\xc2", 0x1138e +"\x01\x13\x90\x01\x13\xc9", 0x11391 +"\x01\x13\xc2\x01\x13\xc2", 0x113c5 +"\x01\x13\xc2\x01\x13\xb8", 0x113c7 +"\x01\x13\xc2\x01\x13\xc9", 0x113c8 +"\x01\x14\xb9\x01\x14\xba", 0x114bb +"\x01\x14\xb9\x01\x14\xb0", 0x114bc +"\x01\x14\xb9\x01\x14\xbd", 0x114be +"\x01\x15\xb8\x01\x15\xaf", 0x115ba +"\x01\x15\xb9\x01\x15\xaf", 0x115bb +"\x01\x19\x35\x01\x19\x30", 0x11938 +"\x01\x61\x1e\x01\x61\x1e", 0x16121 +"\x01\x61\x1e\x01\x61\x29", 0x16122 +"\x01\x61\x1e\x01\x61\x1f", 0x16123 +"\x01\x61\x29\x01\x61\x1f", 0x16124 +"\x01\x61\x1e\x01\x61\x20", 0x16125 +"\x01\x61\x21\x01\x61\x1f", 0x16126 +"\x01\x61\x22\x01\x61\x1f", 0x16127 +"\x01\x61\x21\x01\x61\x20", 0x16128 +"\x01\x6d\x67\x01\x6d\x67", 0x16d68 +"\x01\x6d\x63\x01\x6d\x67", 0x16d69 +"\x01\x6d\x69\x01\x6d\x67", 0x16d6a diff --git a/include/libgnulib/uninorm/decompose-internal.h b/include/libgnulib/uninorm/decompose-internal.h new file mode 100755 index 0000000..c68671e --- /dev/null +++ b/include/libgnulib/uninorm/decompose-internal.h @@ -0,0 +1,46 @@ +/* Decomposition of Unicode strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "unitypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Variant of uc_decomposition that does not produce the 'tag'. */ +extern int + uc_compat_decomposition (ucs4_t uc, ucs4_t *decomposition); + +/* A Unicode character together with its canonical combining class. */ +struct ucs4_with_ccc +{ + ucs4_t code; + int ccc; /* range 0..255 */ +}; + +/* Stable-sort an array of 'struct ucs4_with_ccc'. */ +extern void + gl_uninorm_decompose_merge_sort_inplace (struct ucs4_with_ccc *src, size_t n, + struct ucs4_with_ccc *tmp); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/uninorm/decomposition-table.h b/include/libgnulib/uninorm/decomposition-table.h new file mode 100755 index 0000000..631d874 --- /dev/null +++ b/include/libgnulib/uninorm/decomposition-table.h @@ -0,0 +1,48 @@ +/* Decomposition of Unicode characters. + Copyright (C) 2001-2003, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +#include "unitypes.h" + +/* The decomposition table is made of two parts: + - A table containing the actual arrays of decomposed equivalents. + (This table is separate because the maximum length of a decomposition + is 18, much larger than the average length 1.497 of a decomposition). + - A 3-level table of indices into this array. */ + +#include "decomposition-table1.h" + +static inline unsigned short +decomp_index (ucs4_t uc) +{ + unsigned int index1 = uc >> decomp_header_0; + if (index1 < decomp_header_1) + { + int lookup1 = gl_uninorm_decomp_index_table.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> decomp_header_2) & decomp_header_3; + int lookup2 = gl_uninorm_decomp_index_table.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = uc & decomp_header_4; + return gl_uninorm_decomp_index_table.level3[lookup2 + index3]; + } + } + } + return (unsigned short)(-1); +} diff --git a/include/libgnulib/uninorm/decomposition-table1.h b/include/libgnulib/uninorm/decomposition-table1.h new file mode 100755 index 0000000..c6ee5ab --- /dev/null +++ b/include/libgnulib/uninorm/decomposition-table1.h @@ -0,0 +1,35 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Decomposition of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +extern const unsigned char gl_uninorm_decomp_chars_table[]; + +#define decomp_header_0 10 +#define decomp_header_1 191 +#define decomp_header_2 5 +#define decomp_header_3 31 +#define decomp_header_4 31 + +typedef struct + { + int level1[191]; + int level2[30 << 5]; + unsigned short level3[293 << 5]; + } +decomp_index_table_t; +extern const decomp_index_table_t gl_uninorm_decomp_index_table; diff --git a/include/libgnulib/uninorm/decomposition-table2.h b/include/libgnulib/uninorm/decomposition-table2.h new file mode 100755 index 0000000..3a8e540 --- /dev/null +++ b/include/libgnulib/uninorm/decomposition-table2.h @@ -0,0 +1,3533 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Decomposition of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +const unsigned char gl_uninorm_decomp_chars_table[] = +{ + 0x08, 0x00, 0x20, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x08, 0x20, 0x00, 0x61, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x04, 0x20, 0x00, 0x32, 0x20, 0x00, 0x33, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x01, 0x40, 0x03, 0xBC, 0xC0, 0x00, 0x20, + 0x00, 0x03, 0x27, 0x20, 0x00, 0x31, 0x20, 0x00, 0x6F, 0xBC, 0x00, 0x31, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x34, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, + 0x00, 0x00, 0x32, 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x34, + 0x80, 0x00, 0x41, 0x00, 0x03, 0x00, 0x80, 0x00, 0x41, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x41, 0x00, 0x03, 0x02, 0x80, 0x00, 0x41, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x41, 0x00, 0x03, 0x08, 0x80, 0x00, 0x41, 0x00, 0x03, 0x0A, + 0x80, 0x00, 0x43, 0x00, 0x03, 0x27, 0x80, 0x00, 0x45, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x45, 0x00, 0x03, 0x01, 0x80, 0x00, 0x45, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x45, 0x00, 0x03, 0x08, 0x80, 0x00, 0x49, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x49, 0x00, 0x03, 0x01, 0x80, 0x00, 0x49, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x49, 0x00, 0x03, 0x08, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x4F, 0x00, 0x03, 0x00, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x4F, 0x00, 0x03, 0x02, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x4F, 0x00, 0x03, 0x08, 0x80, 0x00, 0x55, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x55, 0x00, 0x03, 0x01, 0x80, 0x00, 0x55, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x55, 0x00, 0x03, 0x08, 0x80, 0x00, 0x59, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x00, 0x80, 0x00, 0x61, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x02, 0x80, 0x00, 0x61, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x08, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0A, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x27, 0x80, 0x00, 0x65, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x01, 0x80, 0x00, 0x65, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x08, 0x80, 0x00, 0x69, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x01, 0x80, 0x00, 0x69, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x08, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x02, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x08, 0x80, 0x00, 0x75, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x01, 0x80, 0x00, 0x75, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x08, 0x80, 0x00, 0x79, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x08, 0x80, 0x00, 0x41, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x04, 0x80, 0x00, 0x41, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x06, 0x80, 0x00, 0x41, 0x00, 0x03, 0x28, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x28, 0x80, 0x00, 0x43, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x01, 0x80, 0x00, 0x43, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x02, 0x80, 0x00, 0x43, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x07, 0x80, 0x00, 0x43, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x44, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x45, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x04, 0x80, 0x00, 0x45, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x06, 0x80, 0x00, 0x45, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x07, 0x80, 0x00, 0x45, 0x00, 0x03, 0x28, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x28, 0x80, 0x00, 0x45, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x47, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x02, 0x80, 0x00, 0x47, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x06, 0x80, 0x00, 0x47, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x07, 0x80, 0x00, 0x47, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x27, 0x80, 0x00, 0x48, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x02, 0x80, 0x00, 0x49, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x03, 0x80, 0x00, 0x49, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x04, 0x80, 0x00, 0x49, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x06, 0x80, 0x00, 0x49, 0x00, 0x03, 0x28, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x28, 0x80, 0x00, 0x49, 0x00, 0x03, 0x07, + 0xC0, 0x00, 0x49, 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x6A, + 0x80, 0x00, 0x4A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x6A, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x4B, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x4C, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x4C, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x4C, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x0C, + 0xC0, 0x00, 0x4C, 0x00, 0x00, 0xB7, 0xC0, 0x00, 0x6C, 0x00, 0x00, 0xB7, + 0x80, 0x00, 0x4E, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x4E, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x4E, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x0C, + 0xC0, 0x02, 0xBC, 0x00, 0x00, 0x6E, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x06, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x0B, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x52, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x01, 0x80, 0x00, 0x52, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x27, 0x80, 0x00, 0x52, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x53, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x01, 0x80, 0x00, 0x53, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x02, 0x80, 0x00, 0x53, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x27, 0x80, 0x00, 0x53, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x54, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x27, 0x80, 0x00, 0x54, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x55, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x03, 0x80, 0x00, 0x55, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x04, 0x80, 0x00, 0x55, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x06, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0A, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x0A, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0B, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x55, 0x00, 0x03, 0x28, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x28, 0x80, 0x00, 0x57, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x02, 0x80, 0x00, 0x59, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x02, 0x80, 0x00, 0x59, 0x00, 0x03, 0x08, + 0x80, 0x00, 0x5A, 0x00, 0x03, 0x01, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x5A, 0x00, 0x03, 0x07, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x5A, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x0C, + 0x40, 0x00, 0x73, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x1B, 0x80, 0x00, 0x6F, + 0x00, 0x03, 0x1B, 0x80, 0x00, 0x55, 0x00, 0x03, 0x1B, 0x80, 0x00, 0x75, + 0x00, 0x03, 0x1B, 0xC0, 0x00, 0x44, 0x00, 0x01, 0x7D, 0xC0, 0x00, 0x44, + 0x00, 0x01, 0x7E, 0xC0, 0x00, 0x64, 0x00, 0x01, 0x7E, 0xC0, 0x00, 0x4C, + 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x4C, 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x6C, + 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x4E, 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x4E, + 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x6E, 0x00, 0x00, 0x6A, 0x80, 0x00, 0x41, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x49, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x69, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x55, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0C, 0x80, 0x00, 0xDC, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x04, 0x80, 0x00, 0xDC, + 0x00, 0x03, 0x01, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x01, 0x80, 0x00, 0xDC, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x0C, 0x80, 0x00, 0xDC, + 0x00, 0x03, 0x00, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC4, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xE4, 0x00, 0x03, 0x04, 0x80, 0x02, 0x26, + 0x00, 0x03, 0x04, 0x80, 0x02, 0x27, 0x00, 0x03, 0x04, 0x80, 0x00, 0xC6, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xE6, 0x00, 0x03, 0x04, 0x80, 0x00, 0x47, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x67, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4B, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x28, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x28, 0x80, 0x01, 0xEA, + 0x00, 0x03, 0x04, 0x80, 0x01, 0xEB, 0x00, 0x03, 0x04, 0x80, 0x01, 0xB7, + 0x00, 0x03, 0x0C, 0x80, 0x02, 0x92, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6A, + 0x00, 0x03, 0x0C, 0xC0, 0x00, 0x44, 0x00, 0x00, 0x5A, 0xC0, 0x00, 0x44, + 0x00, 0x00, 0x7A, 0xC0, 0x00, 0x64, 0x00, 0x00, 0x7A, 0x80, 0x00, 0x47, + 0x00, 0x03, 0x01, 0x80, 0x00, 0x67, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4E, + 0x00, 0x03, 0x00, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC5, + 0x00, 0x03, 0x01, 0x80, 0x00, 0xE5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xC6, + 0x00, 0x03, 0x01, 0x80, 0x00, 0xE6, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD8, + 0x00, 0x03, 0x01, 0x80, 0x00, 0xF8, 0x00, 0x03, 0x01, 0x80, 0x00, 0x41, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x41, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x61, 0x00, 0x03, 0x11, 0x80, 0x00, 0x45, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x65, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x45, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x65, 0x00, 0x03, 0x11, 0x80, 0x00, 0x49, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x69, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x49, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x69, 0x00, 0x03, 0x11, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x11, 0x80, 0x00, 0x52, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x72, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x52, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x72, 0x00, 0x03, 0x11, 0x80, 0x00, 0x55, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x55, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x75, 0x00, 0x03, 0x11, 0x80, 0x00, 0x53, + 0x00, 0x03, 0x26, 0x80, 0x00, 0x73, 0x00, 0x03, 0x26, 0x80, 0x00, 0x54, + 0x00, 0x03, 0x26, 0x80, 0x00, 0x74, 0x00, 0x03, 0x26, 0x80, 0x00, 0x48, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x68, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x41, + 0x00, 0x03, 0x07, 0x80, 0x00, 0x61, 0x00, 0x03, 0x07, 0x80, 0x00, 0x45, + 0x00, 0x03, 0x27, 0x80, 0x00, 0x65, 0x00, 0x03, 0x27, 0x80, 0x00, 0xD6, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xF6, 0x00, 0x03, 0x04, 0x80, 0x00, 0xD5, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xF5, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x07, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x07, 0x80, 0x02, 0x2E, + 0x00, 0x03, 0x04, 0x80, 0x02, 0x2F, 0x00, 0x03, 0x04, 0x80, 0x00, 0x59, + 0x00, 0x03, 0x04, 0x80, 0x00, 0x79, 0x00, 0x03, 0x04, 0x20, 0x00, 0x68, + 0x20, 0x02, 0x66, 0x20, 0x00, 0x6A, 0x20, 0x00, 0x72, 0x20, 0x02, 0x79, + 0x20, 0x02, 0x7B, 0x20, 0x02, 0x81, 0x20, 0x00, 0x77, 0x20, 0x00, 0x79, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x06, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x07, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x0A, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x28, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x03, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x0B, + 0x20, 0x02, 0x63, 0x20, 0x00, 0x6C, 0x20, 0x00, 0x73, 0x20, 0x00, 0x78, + 0x20, 0x02, 0x95, 0x00, 0x03, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x08, 0x00, 0x03, 0x01, 0x00, 0x02, 0xB9, 0xC0, 0x00, 0x20, + 0x00, 0x03, 0x45, 0x00, 0x00, 0x3B, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xA8, 0x00, 0x03, 0x01, 0x80, 0x03, 0x91, 0x00, 0x03, 0x01, + 0x00, 0x00, 0xB7, 0x80, 0x03, 0x95, 0x00, 0x03, 0x01, 0x80, 0x03, 0x97, + 0x00, 0x03, 0x01, 0x80, 0x03, 0x99, 0x00, 0x03, 0x01, 0x80, 0x03, 0x9F, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x01, 0x80, 0x03, 0xA9, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xCA, 0x00, 0x03, 0x01, 0x80, 0x03, 0x99, + 0x00, 0x03, 0x08, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x08, 0x80, 0x03, 0xB1, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB7, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x01, 0x80, 0x03, 0xCB, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x08, 0x80, 0x03, 0xC5, + 0x00, 0x03, 0x08, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x01, 0x80, 0x03, 0xC5, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x01, 0x40, 0x03, 0xB2, + 0x40, 0x03, 0xB8, 0x40, 0x03, 0xA5, 0x80, 0x03, 0xD2, 0x00, 0x03, 0x01, + 0x80, 0x03, 0xD2, 0x00, 0x03, 0x08, 0x40, 0x03, 0xC6, 0x40, 0x03, 0xC0, + 0x40, 0x03, 0xBA, 0x40, 0x03, 0xC1, 0x40, 0x03, 0xC2, 0x40, 0x03, 0x98, + 0x40, 0x03, 0xB5, 0x40, 0x03, 0xA3, 0x80, 0x04, 0x15, 0x00, 0x03, 0x00, + 0x80, 0x04, 0x15, 0x00, 0x03, 0x08, 0x80, 0x04, 0x13, 0x00, 0x03, 0x01, + 0x80, 0x04, 0x06, 0x00, 0x03, 0x08, 0x80, 0x04, 0x1A, 0x00, 0x03, 0x01, + 0x80, 0x04, 0x18, 0x00, 0x03, 0x00, 0x80, 0x04, 0x23, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x18, 0x00, 0x03, 0x06, 0x80, 0x04, 0x38, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x35, 0x00, 0x03, 0x00, 0x80, 0x04, 0x35, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x33, 0x00, 0x03, 0x01, 0x80, 0x04, 0x56, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x3A, 0x00, 0x03, 0x01, 0x80, 0x04, 0x38, 0x00, 0x03, 0x00, + 0x80, 0x04, 0x43, 0x00, 0x03, 0x06, 0x80, 0x04, 0x74, 0x00, 0x03, 0x0F, + 0x80, 0x04, 0x75, 0x00, 0x03, 0x0F, 0x80, 0x04, 0x16, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x36, 0x00, 0x03, 0x06, 0x80, 0x04, 0x10, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x30, 0x00, 0x03, 0x06, 0x80, 0x04, 0x10, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x30, 0x00, 0x03, 0x08, 0x80, 0x04, 0x15, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x35, 0x00, 0x03, 0x06, 0x80, 0x04, 0xD8, 0x00, 0x03, 0x08, + 0x80, 0x04, 0xD9, 0x00, 0x03, 0x08, 0x80, 0x04, 0x16, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x36, 0x00, 0x03, 0x08, 0x80, 0x04, 0x17, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x37, 0x00, 0x03, 0x08, 0x80, 0x04, 0x18, 0x00, 0x03, 0x04, + 0x80, 0x04, 0x38, 0x00, 0x03, 0x04, 0x80, 0x04, 0x18, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x38, 0x00, 0x03, 0x08, 0x80, 0x04, 0x1E, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x3E, 0x00, 0x03, 0x08, 0x80, 0x04, 0xE8, 0x00, 0x03, 0x08, + 0x80, 0x04, 0xE9, 0x00, 0x03, 0x08, 0x80, 0x04, 0x2D, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x4D, 0x00, 0x03, 0x08, 0x80, 0x04, 0x23, 0x00, 0x03, 0x04, + 0x80, 0x04, 0x43, 0x00, 0x03, 0x04, 0x80, 0x04, 0x23, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x43, 0x00, 0x03, 0x08, 0x80, 0x04, 0x23, 0x00, 0x03, 0x0B, + 0x80, 0x04, 0x43, 0x00, 0x03, 0x0B, 0x80, 0x04, 0x27, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x47, 0x00, 0x03, 0x08, 0x80, 0x04, 0x2B, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x4B, 0x00, 0x03, 0x08, 0xC0, 0x05, 0x65, 0x00, 0x05, 0x82, + 0x80, 0x06, 0x27, 0x00, 0x06, 0x53, 0x80, 0x06, 0x27, 0x00, 0x06, 0x54, + 0x80, 0x06, 0x48, 0x00, 0x06, 0x54, 0x80, 0x06, 0x27, 0x00, 0x06, 0x55, + 0x80, 0x06, 0x4A, 0x00, 0x06, 0x54, 0xC0, 0x06, 0x27, 0x00, 0x06, 0x74, + 0xC0, 0x06, 0x48, 0x00, 0x06, 0x74, 0xC0, 0x06, 0xC7, 0x00, 0x06, 0x74, + 0xC0, 0x06, 0x4A, 0x00, 0x06, 0x74, 0x80, 0x06, 0xD5, 0x00, 0x06, 0x54, + 0x80, 0x06, 0xC1, 0x00, 0x06, 0x54, 0x80, 0x06, 0xD2, 0x00, 0x06, 0x54, + 0x80, 0x09, 0x28, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x30, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x33, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x15, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x16, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x17, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x1C, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x21, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x22, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x2B, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x2F, 0x00, 0x09, 0x3C, 0x80, 0x09, 0xC7, 0x00, 0x09, 0xBE, + 0x80, 0x09, 0xC7, 0x00, 0x09, 0xD7, 0x80, 0x09, 0xA1, 0x00, 0x09, 0xBC, + 0x80, 0x09, 0xA2, 0x00, 0x09, 0xBC, 0x80, 0x09, 0xAF, 0x00, 0x09, 0xBC, + 0x80, 0x0A, 0x32, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x38, 0x00, 0x0A, 0x3C, + 0x80, 0x0A, 0x16, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x17, 0x00, 0x0A, 0x3C, + 0x80, 0x0A, 0x1C, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x2B, 0x00, 0x0A, 0x3C, + 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x56, 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x3E, + 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x57, 0x80, 0x0B, 0x21, 0x00, 0x0B, 0x3C, + 0x80, 0x0B, 0x22, 0x00, 0x0B, 0x3C, 0x80, 0x0B, 0x92, 0x00, 0x0B, 0xD7, + 0x80, 0x0B, 0xC6, 0x00, 0x0B, 0xBE, 0x80, 0x0B, 0xC7, 0x00, 0x0B, 0xBE, + 0x80, 0x0B, 0xC6, 0x00, 0x0B, 0xD7, 0x80, 0x0C, 0x46, 0x00, 0x0C, 0x56, + 0x80, 0x0C, 0xBF, 0x00, 0x0C, 0xD5, 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xD5, + 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xD6, 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xC2, + 0x80, 0x0C, 0xCA, 0x00, 0x0C, 0xD5, 0x80, 0x0D, 0x46, 0x00, 0x0D, 0x3E, + 0x80, 0x0D, 0x47, 0x00, 0x0D, 0x3E, 0x80, 0x0D, 0x46, 0x00, 0x0D, 0x57, + 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xCA, 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xCF, + 0x80, 0x0D, 0xDC, 0x00, 0x0D, 0xCA, 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xDF, + 0xC0, 0x0E, 0x4D, 0x00, 0x0E, 0x32, 0xC0, 0x0E, 0xCD, 0x00, 0x0E, 0xB2, + 0xC0, 0x0E, 0xAB, 0x00, 0x0E, 0x99, 0xC0, 0x0E, 0xAB, 0x00, 0x0E, 0xA1, + 0x08, 0x0F, 0x0B, 0x80, 0x0F, 0x42, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x4C, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x51, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x56, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x5B, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x40, + 0x00, 0x0F, 0xB5, 0x80, 0x0F, 0x71, 0x00, 0x0F, 0x72, 0x80, 0x0F, 0x71, + 0x00, 0x0F, 0x74, 0x80, 0x0F, 0xB2, 0x00, 0x0F, 0x80, 0xC0, 0x0F, 0xB2, + 0x00, 0x0F, 0x81, 0x80, 0x0F, 0xB3, 0x00, 0x0F, 0x80, 0xC0, 0x0F, 0xB3, + 0x00, 0x0F, 0x81, 0x80, 0x0F, 0x71, 0x00, 0x0F, 0x80, 0x80, 0x0F, 0x92, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x9C, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xA1, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xA6, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xAB, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x90, 0x00, 0x0F, 0xB5, 0x80, 0x10, 0x25, + 0x00, 0x10, 0x2E, 0x20, 0x10, 0xDC, 0x80, 0x1B, 0x05, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x07, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x09, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x0B, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x0D, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x11, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3A, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x3C, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3E, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x3F, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x42, 0x00, 0x1B, 0x35, + 0x20, 0x00, 0x41, 0x20, 0x00, 0xC6, 0x20, 0x00, 0x42, 0x20, 0x00, 0x44, + 0x20, 0x00, 0x45, 0x20, 0x01, 0x8E, 0x20, 0x00, 0x47, 0x20, 0x00, 0x48, + 0x20, 0x00, 0x49, 0x20, 0x00, 0x4A, 0x20, 0x00, 0x4B, 0x20, 0x00, 0x4C, + 0x20, 0x00, 0x4D, 0x20, 0x00, 0x4E, 0x20, 0x00, 0x4F, 0x20, 0x02, 0x22, + 0x20, 0x00, 0x50, 0x20, 0x00, 0x52, 0x20, 0x00, 0x54, 0x20, 0x00, 0x55, + 0x20, 0x00, 0x57, 0x20, 0x00, 0x61, 0x20, 0x02, 0x50, 0x20, 0x02, 0x51, + 0x20, 0x1D, 0x02, 0x20, 0x00, 0x62, 0x20, 0x00, 0x64, 0x20, 0x00, 0x65, + 0x20, 0x02, 0x59, 0x20, 0x02, 0x5B, 0x20, 0x02, 0x5C, 0x20, 0x00, 0x67, + 0x20, 0x00, 0x6B, 0x20, 0x00, 0x6D, 0x20, 0x01, 0x4B, 0x20, 0x00, 0x6F, + 0x20, 0x02, 0x54, 0x20, 0x1D, 0x16, 0x20, 0x1D, 0x17, 0x20, 0x00, 0x70, + 0x20, 0x00, 0x74, 0x20, 0x00, 0x75, 0x20, 0x1D, 0x1D, 0x20, 0x02, 0x6F, + 0x20, 0x00, 0x76, 0x20, 0x1D, 0x25, 0x20, 0x03, 0xB2, 0x20, 0x03, 0xB3, + 0x20, 0x03, 0xB4, 0x20, 0x03, 0xC6, 0x20, 0x03, 0xC7, 0x24, 0x00, 0x69, + 0x24, 0x00, 0x72, 0x24, 0x00, 0x75, 0x24, 0x00, 0x76, 0x24, 0x03, 0xB2, + 0x24, 0x03, 0xB3, 0x24, 0x03, 0xC1, 0x24, 0x03, 0xC6, 0x24, 0x03, 0xC7, + 0x20, 0x04, 0x3D, 0x20, 0x02, 0x52, 0x20, 0x00, 0x63, 0x20, 0x02, 0x55, + 0x20, 0x00, 0xF0, 0x20, 0x02, 0x5C, 0x20, 0x00, 0x66, 0x20, 0x02, 0x5F, + 0x20, 0x02, 0x61, 0x20, 0x02, 0x65, 0x20, 0x02, 0x68, 0x20, 0x02, 0x69, + 0x20, 0x02, 0x6A, 0x20, 0x1D, 0x7B, 0x20, 0x02, 0x9D, 0x20, 0x02, 0x6D, + 0x20, 0x1D, 0x85, 0x20, 0x02, 0x9F, 0x20, 0x02, 0x71, 0x20, 0x02, 0x70, + 0x20, 0x02, 0x72, 0x20, 0x02, 0x73, 0x20, 0x02, 0x74, 0x20, 0x02, 0x75, + 0x20, 0x02, 0x78, 0x20, 0x02, 0x82, 0x20, 0x02, 0x83, 0x20, 0x01, 0xAB, + 0x20, 0x02, 0x89, 0x20, 0x02, 0x8A, 0x20, 0x1D, 0x1C, 0x20, 0x02, 0x8B, + 0x20, 0x02, 0x8C, 0x20, 0x00, 0x7A, 0x20, 0x02, 0x90, 0x20, 0x02, 0x91, + 0x20, 0x02, 0x92, 0x20, 0x03, 0xB8, 0x80, 0x00, 0x41, 0x00, 0x03, 0x25, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x25, 0x80, 0x00, 0x42, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x62, 0x00, 0x03, 0x07, 0x80, 0x00, 0x42, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x62, 0x00, 0x03, 0x23, 0x80, 0x00, 0x42, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x62, 0x00, 0x03, 0x31, 0x80, 0x00, 0xC7, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xE7, 0x00, 0x03, 0x01, 0x80, 0x00, 0x44, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x07, 0x80, 0x00, 0x44, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x23, 0x80, 0x00, 0x44, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x31, 0x80, 0x00, 0x44, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x27, 0x80, 0x00, 0x44, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x2D, 0x80, 0x01, 0x12, 0x00, 0x03, 0x00, + 0x80, 0x01, 0x13, 0x00, 0x03, 0x00, 0x80, 0x01, 0x12, 0x00, 0x03, 0x01, + 0x80, 0x01, 0x13, 0x00, 0x03, 0x01, 0x80, 0x00, 0x45, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x45, 0x00, 0x03, 0x30, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x30, 0x80, 0x02, 0x28, 0x00, 0x03, 0x06, + 0x80, 0x02, 0x29, 0x00, 0x03, 0x06, 0x80, 0x00, 0x46, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x66, 0x00, 0x03, 0x07, 0x80, 0x00, 0x47, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x04, 0x80, 0x00, 0x48, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x07, 0x80, 0x00, 0x48, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x23, 0x80, 0x00, 0x48, 0x00, 0x03, 0x08, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x08, 0x80, 0x00, 0x48, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x27, 0x80, 0x00, 0x48, 0x00, 0x03, 0x2E, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x2E, 0x80, 0x00, 0x49, 0x00, 0x03, 0x30, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x30, 0x80, 0x00, 0xCF, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xEF, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x6B, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6B, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x6B, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6C, 0x00, 0x03, 0x23, 0x80, 0x1E, 0x36, 0x00, 0x03, 0x04, + 0x80, 0x1E, 0x37, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x6C, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x6C, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x6D, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x6D, 0x00, 0x03, 0x07, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6D, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x6E, 0x00, 0x03, 0x07, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6E, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x6E, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x6E, 0x00, 0x03, 0x2D, 0x80, 0x00, 0xD5, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xF5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD5, 0x00, 0x03, 0x08, + 0x80, 0x00, 0xF5, 0x00, 0x03, 0x08, 0x80, 0x01, 0x4C, 0x00, 0x03, 0x00, + 0x80, 0x01, 0x4D, 0x00, 0x03, 0x00, 0x80, 0x01, 0x4C, 0x00, 0x03, 0x01, + 0x80, 0x01, 0x4D, 0x00, 0x03, 0x01, 0x80, 0x00, 0x50, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x70, 0x00, 0x03, 0x01, 0x80, 0x00, 0x50, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x70, 0x00, 0x03, 0x07, 0x80, 0x00, 0x52, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x07, 0x80, 0x00, 0x52, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x23, 0x80, 0x1E, 0x5A, 0x00, 0x03, 0x04, + 0x80, 0x1E, 0x5B, 0x00, 0x03, 0x04, 0x80, 0x00, 0x52, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x31, 0x80, 0x00, 0x53, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x07, 0x80, 0x00, 0x53, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x23, 0x80, 0x01, 0x5A, 0x00, 0x03, 0x07, + 0x80, 0x01, 0x5B, 0x00, 0x03, 0x07, 0x80, 0x01, 0x60, 0x00, 0x03, 0x07, + 0x80, 0x01, 0x61, 0x00, 0x03, 0x07, 0x80, 0x1E, 0x62, 0x00, 0x03, 0x07, + 0x80, 0x1E, 0x63, 0x00, 0x03, 0x07, 0x80, 0x00, 0x54, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x07, 0x80, 0x00, 0x54, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x23, 0x80, 0x00, 0x54, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x31, 0x80, 0x00, 0x54, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x55, 0x00, 0x03, 0x24, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x24, 0x80, 0x00, 0x55, 0x00, 0x03, 0x30, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x30, 0x80, 0x00, 0x55, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x2D, 0x80, 0x01, 0x68, 0x00, 0x03, 0x01, + 0x80, 0x01, 0x69, 0x00, 0x03, 0x01, 0x80, 0x01, 0x6A, 0x00, 0x03, 0x08, + 0x80, 0x01, 0x6B, 0x00, 0x03, 0x08, 0x80, 0x00, 0x56, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x76, 0x00, 0x03, 0x03, 0x80, 0x00, 0x56, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x76, 0x00, 0x03, 0x23, 0x80, 0x00, 0x57, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x00, 0x80, 0x00, 0x57, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x01, 0x80, 0x00, 0x57, 0x00, 0x03, 0x08, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x08, 0x80, 0x00, 0x57, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x07, 0x80, 0x00, 0x57, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x23, 0x80, 0x00, 0x58, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x78, 0x00, 0x03, 0x07, 0x80, 0x00, 0x58, 0x00, 0x03, 0x08, + 0x80, 0x00, 0x78, 0x00, 0x03, 0x08, 0x80, 0x00, 0x59, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x07, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x7A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x7A, 0x00, 0x03, 0x23, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x7A, 0x00, 0x03, 0x31, 0x80, 0x00, 0x68, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x08, 0x80, 0x00, 0x77, 0x00, 0x03, 0x0A, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x0A, 0xC0, 0x00, 0x61, 0x00, 0x02, 0xBE, + 0x80, 0x01, 0x7F, 0x00, 0x03, 0x07, 0x80, 0x00, 0x41, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x23, 0x80, 0x00, 0x41, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x09, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xE2, 0x00, 0x03, 0x01, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x00, + 0x80, 0x00, 0xE2, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x09, + 0x80, 0x00, 0xE2, 0x00, 0x03, 0x09, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x03, + 0x80, 0x00, 0xE2, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xA0, 0x00, 0x03, 0x02, + 0x80, 0x1E, 0xA1, 0x00, 0x03, 0x02, 0x80, 0x01, 0x02, 0x00, 0x03, 0x01, + 0x80, 0x01, 0x03, 0x00, 0x03, 0x01, 0x80, 0x01, 0x02, 0x00, 0x03, 0x00, + 0x80, 0x01, 0x03, 0x00, 0x03, 0x00, 0x80, 0x01, 0x02, 0x00, 0x03, 0x09, + 0x80, 0x01, 0x03, 0x00, 0x03, 0x09, 0x80, 0x01, 0x02, 0x00, 0x03, 0x03, + 0x80, 0x01, 0x03, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xA0, 0x00, 0x03, 0x06, + 0x80, 0x1E, 0xA1, 0x00, 0x03, 0x06, 0x80, 0x00, 0x45, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x23, 0x80, 0x00, 0x45, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x09, 0x80, 0x00, 0x45, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x03, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xEA, 0x00, 0x03, 0x01, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x00, + 0x80, 0x00, 0xEA, 0x00, 0x03, 0x00, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x09, + 0x80, 0x00, 0xEA, 0x00, 0x03, 0x09, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x03, + 0x80, 0x00, 0xEA, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xB8, 0x00, 0x03, 0x02, + 0x80, 0x1E, 0xB9, 0x00, 0x03, 0x02, 0x80, 0x00, 0x49, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x09, 0x80, 0x00, 0x49, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x09, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xF4, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x00, + 0x80, 0x00, 0xF4, 0x00, 0x03, 0x00, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x09, + 0x80, 0x00, 0xF4, 0x00, 0x03, 0x09, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x03, + 0x80, 0x00, 0xF4, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xCC, 0x00, 0x03, 0x02, + 0x80, 0x1E, 0xCD, 0x00, 0x03, 0x02, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x01, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x01, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x00, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x00, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x09, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x09, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x03, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x03, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x23, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x23, 0x80, 0x00, 0x55, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x23, 0x80, 0x00, 0x55, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x09, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x01, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x01, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x00, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x00, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x09, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x09, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x03, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x03, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x23, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x23, 0x80, 0x00, 0x59, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x00, 0x80, 0x00, 0x59, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x23, 0x80, 0x00, 0x59, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x09, 0x80, 0x00, 0x59, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x03, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xB1, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x01, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x01, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x01, 0x00, 0x03, 0x42, 0x80, 0x03, 0x91, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x91, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x09, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x09, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x09, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xB5, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x10, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x11, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x10, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x11, 0x00, 0x03, 0x01, 0x80, 0x03, 0x95, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x95, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x18, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x19, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x18, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x19, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xB7, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x21, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x21, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x21, 0x00, 0x03, 0x42, 0x80, 0x03, 0x97, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x97, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x29, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x29, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x29, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xB9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x31, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x31, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x31, 0x00, 0x03, 0x42, 0x80, 0x03, 0x99, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x99, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x39, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x39, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x39, 0x00, 0x03, 0x42, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xBF, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x40, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x41, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x40, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x41, 0x00, 0x03, 0x01, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x9F, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x48, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x49, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x48, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x49, 0x00, 0x03, 0x01, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xC5, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x51, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x51, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x51, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x14, + 0x80, 0x1F, 0x59, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x59, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x59, 0x00, 0x03, 0x42, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xC9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x61, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x61, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x61, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA9, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xA9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x69, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x69, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x69, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x00, + 0x00, 0x03, 0xAC, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAD, + 0x80, 0x03, 0xB7, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAE, 0x80, 0x03, 0xB9, + 0x00, 0x03, 0x00, 0x00, 0x03, 0xAF, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x00, + 0x00, 0x03, 0xCC, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x00, 0x00, 0x03, 0xCD, + 0x80, 0x03, 0xC9, 0x00, 0x03, 0x00, 0x00, 0x03, 0xCE, 0x80, 0x1F, 0x00, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x01, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x02, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x03, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x04, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x05, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x06, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x07, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x08, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x09, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0A, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0C, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0E, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0F, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x20, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x21, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x22, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x23, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x24, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x25, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x26, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x27, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x28, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x29, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2A, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2C, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2E, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2F, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x60, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x61, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x62, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x63, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x64, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x65, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x66, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x67, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x68, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x69, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6A, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6C, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6E, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6F, 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, + 0x00, 0x03, 0x06, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x04, 0x80, 0x1F, 0x70, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x45, 0x80, 0x03, 0xAC, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xB6, + 0x00, 0x03, 0x45, 0x80, 0x03, 0x91, 0x00, 0x03, 0x06, 0x80, 0x03, 0x91, + 0x00, 0x03, 0x04, 0x80, 0x03, 0x91, 0x00, 0x03, 0x00, 0x00, 0x03, 0x86, + 0x80, 0x03, 0x91, 0x00, 0x03, 0x45, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x13, + 0x00, 0x03, 0xB9, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x13, 0xC0, 0x00, 0x20, + 0x00, 0x03, 0x42, 0x80, 0x00, 0xA8, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x74, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x45, 0x80, 0x03, 0xAE, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xC6, + 0x00, 0x03, 0x45, 0x80, 0x03, 0x95, 0x00, 0x03, 0x00, 0x00, 0x03, 0x88, + 0x80, 0x03, 0x97, 0x00, 0x03, 0x00, 0x00, 0x03, 0x89, 0x80, 0x03, 0x97, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0xBF, 0x00, 0x03, 0x00, 0x80, 0x1F, 0xBF, + 0x00, 0x03, 0x01, 0x80, 0x1F, 0xBF, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB9, + 0x00, 0x03, 0x06, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x04, 0x80, 0x03, 0xCA, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x90, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x42, + 0x80, 0x03, 0xCA, 0x00, 0x03, 0x42, 0x80, 0x03, 0x99, 0x00, 0x03, 0x06, + 0x80, 0x03, 0x99, 0x00, 0x03, 0x04, 0x80, 0x03, 0x99, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x8A, 0x80, 0x1F, 0xFE, 0x00, 0x03, 0x00, 0x80, 0x1F, 0xFE, + 0x00, 0x03, 0x01, 0x80, 0x1F, 0xFE, 0x00, 0x03, 0x42, 0x80, 0x03, 0xC5, + 0x00, 0x03, 0x06, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x04, 0x80, 0x03, 0xCB, + 0x00, 0x03, 0x00, 0x00, 0x03, 0xB0, 0x80, 0x03, 0xC1, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xC1, 0x00, 0x03, 0x14, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x42, + 0x80, 0x03, 0xCB, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x06, + 0x80, 0x03, 0xA5, 0x00, 0x03, 0x04, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x8E, 0x80, 0x03, 0xA1, 0x00, 0x03, 0x14, 0x80, 0x00, 0xA8, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x85, 0x00, 0x00, 0x60, 0x80, 0x1F, 0x7C, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x45, 0x80, 0x03, 0xCE, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xF6, + 0x00, 0x03, 0x45, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8C, + 0x80, 0x03, 0xA9, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8F, 0x80, 0x03, 0xA9, + 0x00, 0x03, 0x45, 0x00, 0x00, 0xB4, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x14, + 0x00, 0x20, 0x02, 0x00, 0x20, 0x03, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, + 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x08, 0x00, 0x20, + 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x08, 0x20, 0x10, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x33, 0x40, 0x00, 0x2E, 0xC0, 0x00, 0x2E, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x2E, 0x80, 0x00, 0x2E, 0x00, 0x00, 0x2E, + 0x08, 0x00, 0x20, 0xC0, 0x20, 0x32, 0x00, 0x20, 0x32, 0xC0, 0x20, 0x32, + 0x80, 0x20, 0x32, 0x00, 0x20, 0x32, 0xC0, 0x20, 0x35, 0x00, 0x20, 0x35, + 0xC0, 0x20, 0x35, 0x80, 0x20, 0x35, 0x00, 0x20, 0x35, 0xC0, 0x00, 0x21, + 0x00, 0x00, 0x21, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x05, 0xC0, 0x00, 0x3F, + 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x21, 0xC0, 0x00, 0x21, + 0x00, 0x00, 0x3F, 0xC0, 0x20, 0x32, 0x80, 0x20, 0x32, 0x80, 0x20, 0x32, + 0x00, 0x20, 0x32, 0x40, 0x00, 0x20, 0x20, 0x00, 0x30, 0x20, 0x00, 0x69, + 0x20, 0x00, 0x34, 0x20, 0x00, 0x35, 0x20, 0x00, 0x36, 0x20, 0x00, 0x37, + 0x20, 0x00, 0x38, 0x20, 0x00, 0x39, 0x20, 0x00, 0x2B, 0x20, 0x22, 0x12, + 0x20, 0x00, 0x3D, 0x20, 0x00, 0x28, 0x20, 0x00, 0x29, 0x20, 0x00, 0x6E, + 0x24, 0x00, 0x30, 0x24, 0x00, 0x31, 0x24, 0x00, 0x32, 0x24, 0x00, 0x33, + 0x24, 0x00, 0x34, 0x24, 0x00, 0x35, 0x24, 0x00, 0x36, 0x24, 0x00, 0x37, + 0x24, 0x00, 0x38, 0x24, 0x00, 0x39, 0x24, 0x00, 0x2B, 0x24, 0x22, 0x12, + 0x24, 0x00, 0x3D, 0x24, 0x00, 0x28, 0x24, 0x00, 0x29, 0x24, 0x00, 0x61, + 0x24, 0x00, 0x65, 0x24, 0x00, 0x6F, 0x24, 0x00, 0x78, 0x24, 0x02, 0x59, + 0x24, 0x00, 0x68, 0x24, 0x00, 0x6B, 0x24, 0x00, 0x6C, 0x24, 0x00, 0x6D, + 0x24, 0x00, 0x6E, 0x24, 0x00, 0x70, 0x24, 0x00, 0x73, 0x24, 0x00, 0x74, + 0xC0, 0x00, 0x52, 0x00, 0x00, 0x73, 0xC0, 0x00, 0x61, 0x80, 0x00, 0x2F, + 0x00, 0x00, 0x63, 0xC0, 0x00, 0x61, 0x80, 0x00, 0x2F, 0x00, 0x00, 0x73, + 0x04, 0x00, 0x43, 0xC0, 0x00, 0xB0, 0x00, 0x00, 0x43, 0xC0, 0x00, 0x63, + 0x80, 0x00, 0x2F, 0x00, 0x00, 0x6F, 0xC0, 0x00, 0x63, 0x80, 0x00, 0x2F, + 0x00, 0x00, 0x75, 0x40, 0x01, 0x90, 0xC0, 0x00, 0xB0, 0x00, 0x00, 0x46, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x48, 0x04, 0x00, 0x48, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x68, 0x04, 0x01, 0x27, 0x04, 0x00, 0x49, 0x04, 0x00, 0x49, + 0x04, 0x00, 0x4C, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x4E, 0xC0, 0x00, 0x4E, + 0x00, 0x00, 0x6F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x52, 0x04, 0x00, 0x52, 0xA0, 0x00, 0x53, 0x00, 0x00, 0x4D, + 0xC0, 0x00, 0x54, 0x80, 0x00, 0x45, 0x00, 0x00, 0x4C, 0xA0, 0x00, 0x54, + 0x00, 0x00, 0x4D, 0x04, 0x00, 0x5A, 0x00, 0x03, 0xA9, 0x04, 0x00, 0x5A, + 0x00, 0x00, 0x4B, 0x00, 0x00, 0xC5, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x4D, + 0x04, 0x00, 0x6F, 0x40, 0x05, 0xD0, 0x40, 0x05, 0xD1, 0x40, 0x05, 0xD2, + 0x40, 0x05, 0xD3, 0x04, 0x00, 0x69, 0xC0, 0x00, 0x46, 0x80, 0x00, 0x41, + 0x00, 0x00, 0x58, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xB3, 0x04, 0x03, 0x93, + 0x04, 0x03, 0xA0, 0x04, 0x22, 0x11, 0x04, 0x00, 0x44, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0xBC, 0x00, 0x31, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x37, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, + 0x00, 0x00, 0x39, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x80, 0x00, 0x31, + 0x00, 0x00, 0x30, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, + 0xBC, 0x00, 0x32, 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, 0xBC, 0x00, 0x31, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x32, 0x80, 0x20, 0x44, + 0x00, 0x00, 0x35, 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, + 0xBC, 0x00, 0x34, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x31, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x36, 0xBC, 0x00, 0x35, 0x80, 0x20, 0x44, + 0x00, 0x00, 0x36, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, + 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x35, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x37, 0x80, 0x20, 0x44, + 0x00, 0x00, 0x38, 0xBC, 0x00, 0x31, 0x00, 0x20, 0x44, 0x40, 0x00, 0x49, + 0xC0, 0x00, 0x49, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x80, 0x00, 0x49, + 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x00, 0x00, 0x56, 0x40, 0x00, 0x56, + 0xC0, 0x00, 0x56, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x56, 0x80, 0x00, 0x49, + 0x00, 0x00, 0x49, 0xC0, 0x00, 0x56, 0x80, 0x00, 0x49, 0x80, 0x00, 0x49, + 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x00, 0x00, 0x58, 0x40, 0x00, 0x58, + 0xC0, 0x00, 0x58, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x58, 0x80, 0x00, 0x49, + 0x00, 0x00, 0x49, 0x40, 0x00, 0x4C, 0x40, 0x00, 0x43, 0x40, 0x00, 0x44, + 0x40, 0x00, 0x4D, 0x40, 0x00, 0x69, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x69, + 0xC0, 0x00, 0x69, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, + 0x00, 0x00, 0x76, 0x40, 0x00, 0x76, 0xC0, 0x00, 0x76, 0x00, 0x00, 0x69, + 0xC0, 0x00, 0x76, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x76, + 0x80, 0x00, 0x69, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, + 0x00, 0x00, 0x78, 0x40, 0x00, 0x78, 0xC0, 0x00, 0x78, 0x00, 0x00, 0x69, + 0xC0, 0x00, 0x78, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0x40, 0x00, 0x6C, + 0x40, 0x00, 0x63, 0x40, 0x00, 0x64, 0x40, 0x00, 0x6D, 0xBC, 0x00, 0x30, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, 0x80, 0x21, 0x90, 0x00, 0x03, 0x38, + 0x80, 0x21, 0x92, 0x00, 0x03, 0x38, 0x80, 0x21, 0x94, 0x00, 0x03, 0x38, + 0x80, 0x21, 0xD0, 0x00, 0x03, 0x38, 0x80, 0x21, 0xD4, 0x00, 0x03, 0x38, + 0x80, 0x21, 0xD2, 0x00, 0x03, 0x38, 0x80, 0x22, 0x03, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x08, 0x00, 0x03, 0x38, 0x80, 0x22, 0x0B, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x23, 0x00, 0x03, 0x38, 0x80, 0x22, 0x25, 0x00, 0x03, 0x38, + 0xC0, 0x22, 0x2B, 0x00, 0x22, 0x2B, 0xC0, 0x22, 0x2B, 0x80, 0x22, 0x2B, + 0x00, 0x22, 0x2B, 0xC0, 0x22, 0x2E, 0x00, 0x22, 0x2E, 0xC0, 0x22, 0x2E, + 0x80, 0x22, 0x2E, 0x00, 0x22, 0x2E, 0x80, 0x22, 0x3C, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x43, 0x00, 0x03, 0x38, 0x80, 0x22, 0x45, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x48, 0x00, 0x03, 0x38, 0x80, 0x00, 0x3D, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x61, 0x00, 0x03, 0x38, 0x80, 0x22, 0x4D, 0x00, 0x03, 0x38, + 0x80, 0x00, 0x3C, 0x00, 0x03, 0x38, 0x80, 0x00, 0x3E, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x64, 0x00, 0x03, 0x38, 0x80, 0x22, 0x65, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x72, 0x00, 0x03, 0x38, 0x80, 0x22, 0x73, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x76, 0x00, 0x03, 0x38, 0x80, 0x22, 0x77, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x7A, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7B, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x82, 0x00, 0x03, 0x38, 0x80, 0x22, 0x83, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x86, 0x00, 0x03, 0x38, 0x80, 0x22, 0x87, 0x00, 0x03, 0x38, + 0x80, 0x22, 0xA2, 0x00, 0x03, 0x38, 0x80, 0x22, 0xA8, 0x00, 0x03, 0x38, + 0x80, 0x22, 0xA9, 0x00, 0x03, 0x38, 0x80, 0x22, 0xAB, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x7C, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7D, 0x00, 0x03, 0x38, + 0x80, 0x22, 0x91, 0x00, 0x03, 0x38, 0x80, 0x22, 0x92, 0x00, 0x03, 0x38, + 0x80, 0x22, 0xB2, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB3, 0x00, 0x03, 0x38, + 0x80, 0x22, 0xB4, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB5, 0x00, 0x03, 0x38, + 0x00, 0x30, 0x08, 0x00, 0x30, 0x09, 0x1C, 0x00, 0x31, 0x1C, 0x00, 0x32, + 0x1C, 0x00, 0x33, 0x1C, 0x00, 0x34, 0x1C, 0x00, 0x35, 0x1C, 0x00, 0x36, + 0x1C, 0x00, 0x37, 0x1C, 0x00, 0x38, 0x1C, 0x00, 0x39, 0x9C, 0x00, 0x31, + 0x00, 0x00, 0x30, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x31, + 0x00, 0x00, 0x32, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x31, + 0x00, 0x00, 0x34, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x35, 0x9C, 0x00, 0x31, + 0x00, 0x00, 0x36, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x31, + 0x00, 0x00, 0x38, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x32, + 0x00, 0x00, 0x30, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x32, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x33, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x34, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x35, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x36, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x37, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x38, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x39, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x31, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x32, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x33, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x34, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x35, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x36, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x37, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x38, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x39, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x33, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x37, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x62, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x63, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x64, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x65, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x66, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x67, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x68, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x69, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6A, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6B, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x6D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6E, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x70, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x71, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x72, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x73, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x74, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x75, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x76, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x77, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x78, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x79, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x7A, + 0x00, 0x00, 0x29, 0x1C, 0x00, 0x41, 0x1C, 0x00, 0x42, 0x1C, 0x00, 0x43, + 0x1C, 0x00, 0x44, 0x1C, 0x00, 0x45, 0x1C, 0x00, 0x46, 0x1C, 0x00, 0x47, + 0x1C, 0x00, 0x48, 0x1C, 0x00, 0x49, 0x1C, 0x00, 0x4A, 0x1C, 0x00, 0x4B, + 0x1C, 0x00, 0x4C, 0x1C, 0x00, 0x4D, 0x1C, 0x00, 0x4E, 0x1C, 0x00, 0x4F, + 0x1C, 0x00, 0x50, 0x1C, 0x00, 0x51, 0x1C, 0x00, 0x52, 0x1C, 0x00, 0x53, + 0x1C, 0x00, 0x54, 0x1C, 0x00, 0x55, 0x1C, 0x00, 0x56, 0x1C, 0x00, 0x57, + 0x1C, 0x00, 0x58, 0x1C, 0x00, 0x59, 0x1C, 0x00, 0x5A, 0x1C, 0x00, 0x61, + 0x1C, 0x00, 0x62, 0x1C, 0x00, 0x63, 0x1C, 0x00, 0x64, 0x1C, 0x00, 0x65, + 0x1C, 0x00, 0x66, 0x1C, 0x00, 0x67, 0x1C, 0x00, 0x68, 0x1C, 0x00, 0x69, + 0x1C, 0x00, 0x6A, 0x1C, 0x00, 0x6B, 0x1C, 0x00, 0x6C, 0x1C, 0x00, 0x6D, + 0x1C, 0x00, 0x6E, 0x1C, 0x00, 0x6F, 0x1C, 0x00, 0x70, 0x1C, 0x00, 0x71, + 0x1C, 0x00, 0x72, 0x1C, 0x00, 0x73, 0x1C, 0x00, 0x74, 0x1C, 0x00, 0x75, + 0x1C, 0x00, 0x76, 0x1C, 0x00, 0x77, 0x1C, 0x00, 0x78, 0x1C, 0x00, 0x79, + 0x1C, 0x00, 0x7A, 0x1C, 0x00, 0x30, 0xC0, 0x22, 0x2B, 0x80, 0x22, 0x2B, + 0x80, 0x22, 0x2B, 0x00, 0x22, 0x2B, 0xC0, 0x00, 0x3A, 0x80, 0x00, 0x3A, + 0x00, 0x00, 0x3D, 0xC0, 0x00, 0x3D, 0x00, 0x00, 0x3D, 0xC0, 0x00, 0x3D, + 0x80, 0x00, 0x3D, 0x00, 0x00, 0x3D, 0x80, 0x2A, 0xDD, 0x00, 0x03, 0x38, + 0x24, 0x00, 0x6A, 0x20, 0x00, 0x56, 0x20, 0x2D, 0x61, 0x40, 0x6B, 0xCD, + 0x40, 0x9F, 0x9F, 0x40, 0x4E, 0x00, 0x40, 0x4E, 0x28, 0x40, 0x4E, 0x36, + 0x40, 0x4E, 0x3F, 0x40, 0x4E, 0x59, 0x40, 0x4E, 0x85, 0x40, 0x4E, 0x8C, + 0x40, 0x4E, 0xA0, 0x40, 0x4E, 0xBA, 0x40, 0x51, 0x3F, 0x40, 0x51, 0x65, + 0x40, 0x51, 0x6B, 0x40, 0x51, 0x82, 0x40, 0x51, 0x96, 0x40, 0x51, 0xAB, + 0x40, 0x51, 0xE0, 0x40, 0x51, 0xF5, 0x40, 0x52, 0x00, 0x40, 0x52, 0x9B, + 0x40, 0x52, 0xF9, 0x40, 0x53, 0x15, 0x40, 0x53, 0x1A, 0x40, 0x53, 0x38, + 0x40, 0x53, 0x41, 0x40, 0x53, 0x5C, 0x40, 0x53, 0x69, 0x40, 0x53, 0x82, + 0x40, 0x53, 0xB6, 0x40, 0x53, 0xC8, 0x40, 0x53, 0xE3, 0x40, 0x56, 0xD7, + 0x40, 0x57, 0x1F, 0x40, 0x58, 0xEB, 0x40, 0x59, 0x02, 0x40, 0x59, 0x0A, + 0x40, 0x59, 0x15, 0x40, 0x59, 0x27, 0x40, 0x59, 0x73, 0x40, 0x5B, 0x50, + 0x40, 0x5B, 0x80, 0x40, 0x5B, 0xF8, 0x40, 0x5C, 0x0F, 0x40, 0x5C, 0x22, + 0x40, 0x5C, 0x38, 0x40, 0x5C, 0x6E, 0x40, 0x5C, 0x71, 0x40, 0x5D, 0xDB, + 0x40, 0x5D, 0xE5, 0x40, 0x5D, 0xF1, 0x40, 0x5D, 0xFE, 0x40, 0x5E, 0x72, + 0x40, 0x5E, 0x7A, 0x40, 0x5E, 0x7F, 0x40, 0x5E, 0xF4, 0x40, 0x5E, 0xFE, + 0x40, 0x5F, 0x0B, 0x40, 0x5F, 0x13, 0x40, 0x5F, 0x50, 0x40, 0x5F, 0x61, + 0x40, 0x5F, 0x73, 0x40, 0x5F, 0xC3, 0x40, 0x62, 0x08, 0x40, 0x62, 0x36, + 0x40, 0x62, 0x4B, 0x40, 0x65, 0x2F, 0x40, 0x65, 0x34, 0x40, 0x65, 0x87, + 0x40, 0x65, 0x97, 0x40, 0x65, 0xA4, 0x40, 0x65, 0xB9, 0x40, 0x65, 0xE0, + 0x40, 0x65, 0xE5, 0x40, 0x66, 0xF0, 0x40, 0x67, 0x08, 0x40, 0x67, 0x28, + 0x40, 0x6B, 0x20, 0x40, 0x6B, 0x62, 0x40, 0x6B, 0x79, 0x40, 0x6B, 0xB3, + 0x40, 0x6B, 0xCB, 0x40, 0x6B, 0xD4, 0x40, 0x6B, 0xDB, 0x40, 0x6C, 0x0F, + 0x40, 0x6C, 0x14, 0x40, 0x6C, 0x34, 0x40, 0x70, 0x6B, 0x40, 0x72, 0x2A, + 0x40, 0x72, 0x36, 0x40, 0x72, 0x3B, 0x40, 0x72, 0x3F, 0x40, 0x72, 0x47, + 0x40, 0x72, 0x59, 0x40, 0x72, 0x5B, 0x40, 0x72, 0xAC, 0x40, 0x73, 0x84, + 0x40, 0x73, 0x89, 0x40, 0x74, 0xDC, 0x40, 0x74, 0xE6, 0x40, 0x75, 0x18, + 0x40, 0x75, 0x1F, 0x40, 0x75, 0x28, 0x40, 0x75, 0x30, 0x40, 0x75, 0x8B, + 0x40, 0x75, 0x92, 0x40, 0x76, 0x76, 0x40, 0x76, 0x7D, 0x40, 0x76, 0xAE, + 0x40, 0x76, 0xBF, 0x40, 0x76, 0xEE, 0x40, 0x77, 0xDB, 0x40, 0x77, 0xE2, + 0x40, 0x77, 0xF3, 0x40, 0x79, 0x3A, 0x40, 0x79, 0xB8, 0x40, 0x79, 0xBE, + 0x40, 0x7A, 0x74, 0x40, 0x7A, 0xCB, 0x40, 0x7A, 0xF9, 0x40, 0x7C, 0x73, + 0x40, 0x7C, 0xF8, 0x40, 0x7F, 0x36, 0x40, 0x7F, 0x51, 0x40, 0x7F, 0x8A, + 0x40, 0x7F, 0xBD, 0x40, 0x80, 0x01, 0x40, 0x80, 0x0C, 0x40, 0x80, 0x12, + 0x40, 0x80, 0x33, 0x40, 0x80, 0x7F, 0x40, 0x80, 0x89, 0x40, 0x81, 0xE3, + 0x40, 0x81, 0xEA, 0x40, 0x81, 0xF3, 0x40, 0x81, 0xFC, 0x40, 0x82, 0x0C, + 0x40, 0x82, 0x1B, 0x40, 0x82, 0x1F, 0x40, 0x82, 0x6E, 0x40, 0x82, 0x72, + 0x40, 0x82, 0x78, 0x40, 0x86, 0x4D, 0x40, 0x86, 0x6B, 0x40, 0x88, 0x40, + 0x40, 0x88, 0x4C, 0x40, 0x88, 0x63, 0x40, 0x89, 0x7E, 0x40, 0x89, 0x8B, + 0x40, 0x89, 0xD2, 0x40, 0x8A, 0x00, 0x40, 0x8C, 0x37, 0x40, 0x8C, 0x46, + 0x40, 0x8C, 0x55, 0x40, 0x8C, 0x78, 0x40, 0x8C, 0x9D, 0x40, 0x8D, 0x64, + 0x40, 0x8D, 0x70, 0x40, 0x8D, 0xB3, 0x40, 0x8E, 0xAB, 0x40, 0x8E, 0xCA, + 0x40, 0x8F, 0x9B, 0x40, 0x8F, 0xB0, 0x40, 0x8F, 0xB5, 0x40, 0x90, 0x91, + 0x40, 0x91, 0x49, 0x40, 0x91, 0xC6, 0x40, 0x91, 0xCC, 0x40, 0x91, 0xD1, + 0x40, 0x95, 0x77, 0x40, 0x95, 0x80, 0x40, 0x96, 0x1C, 0x40, 0x96, 0xB6, + 0x40, 0x96, 0xB9, 0x40, 0x96, 0xE8, 0x40, 0x97, 0x51, 0x40, 0x97, 0x5E, + 0x40, 0x97, 0x62, 0x40, 0x97, 0x69, 0x40, 0x97, 0xCB, 0x40, 0x97, 0xED, + 0x40, 0x97, 0xF3, 0x40, 0x98, 0x01, 0x40, 0x98, 0xA8, 0x40, 0x98, 0xDB, + 0x40, 0x98, 0xDF, 0x40, 0x99, 0x96, 0x40, 0x99, 0x99, 0x40, 0x99, 0xAC, + 0x40, 0x9A, 0xA8, 0x40, 0x9A, 0xD8, 0x40, 0x9A, 0xDF, 0x40, 0x9B, 0x25, + 0x40, 0x9B, 0x2F, 0x40, 0x9B, 0x32, 0x40, 0x9B, 0x3C, 0x40, 0x9B, 0x5A, + 0x40, 0x9C, 0xE5, 0x40, 0x9E, 0x75, 0x40, 0x9E, 0x7F, 0x40, 0x9E, 0xA5, + 0x40, 0x9E, 0xBB, 0x40, 0x9E, 0xC3, 0x40, 0x9E, 0xCD, 0x40, 0x9E, 0xD1, + 0x40, 0x9E, 0xF9, 0x40, 0x9E, 0xFD, 0x40, 0x9F, 0x0E, 0x40, 0x9F, 0x13, + 0x40, 0x9F, 0x20, 0x40, 0x9F, 0x3B, 0x40, 0x9F, 0x4A, 0x40, 0x9F, 0x52, + 0x40, 0x9F, 0x8D, 0x40, 0x9F, 0x9C, 0x40, 0x9F, 0xA0, 0x2C, 0x00, 0x20, + 0x40, 0x30, 0x12, 0x40, 0x53, 0x41, 0x40, 0x53, 0x44, 0x40, 0x53, 0x45, + 0x80, 0x30, 0x4B, 0x00, 0x30, 0x99, 0x80, 0x30, 0x4D, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x4F, 0x00, 0x30, 0x99, 0x80, 0x30, 0x51, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x53, 0x00, 0x30, 0x99, 0x80, 0x30, 0x55, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x57, 0x00, 0x30, 0x99, 0x80, 0x30, 0x59, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x5B, 0x00, 0x30, 0x99, 0x80, 0x30, 0x5D, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x5F, 0x00, 0x30, 0x99, 0x80, 0x30, 0x61, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x64, 0x00, 0x30, 0x99, 0x80, 0x30, 0x66, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x68, 0x00, 0x30, 0x99, 0x80, 0x30, 0x6F, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x6F, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x72, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x72, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x75, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x75, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x78, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x78, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x7B, 0x00, 0x30, 0x99, + 0x80, 0x30, 0x7B, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x46, 0x00, 0x30, 0x99, + 0xC0, 0x00, 0x20, 0x00, 0x30, 0x99, 0xC0, 0x00, 0x20, 0x00, 0x30, 0x9A, + 0x80, 0x30, 0x9D, 0x00, 0x30, 0x99, 0xA8, 0x30, 0x88, 0x00, 0x30, 0x8A, + 0x80, 0x30, 0xAB, 0x00, 0x30, 0x99, 0x80, 0x30, 0xAD, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xAF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB1, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xB3, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB5, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xB7, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB9, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xBB, 0x00, 0x30, 0x99, 0x80, 0x30, 0xBD, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xBF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC1, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xC4, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC6, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xC8, 0x00, 0x30, 0x99, 0x80, 0x30, 0xCF, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xCF, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD2, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xD2, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD5, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xD5, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD8, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xD8, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xDB, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xDB, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xA6, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xEF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xF0, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xF1, 0x00, 0x30, 0x99, 0x80, 0x30, 0xF2, 0x00, 0x30, 0x99, + 0x80, 0x30, 0xFD, 0x00, 0x30, 0x99, 0xA8, 0x30, 0xB3, 0x00, 0x30, 0xC8, + 0x40, 0x11, 0x00, 0x40, 0x11, 0x01, 0x40, 0x11, 0xAA, 0x40, 0x11, 0x02, + 0x40, 0x11, 0xAC, 0x40, 0x11, 0xAD, 0x40, 0x11, 0x03, 0x40, 0x11, 0x04, + 0x40, 0x11, 0x05, 0x40, 0x11, 0xB0, 0x40, 0x11, 0xB1, 0x40, 0x11, 0xB2, + 0x40, 0x11, 0xB3, 0x40, 0x11, 0xB4, 0x40, 0x11, 0xB5, 0x40, 0x11, 0x1A, + 0x40, 0x11, 0x06, 0x40, 0x11, 0x07, 0x40, 0x11, 0x08, 0x40, 0x11, 0x21, + 0x40, 0x11, 0x09, 0x40, 0x11, 0x0A, 0x40, 0x11, 0x0B, 0x40, 0x11, 0x0C, + 0x40, 0x11, 0x0D, 0x40, 0x11, 0x0E, 0x40, 0x11, 0x0F, 0x40, 0x11, 0x10, + 0x40, 0x11, 0x11, 0x40, 0x11, 0x12, 0x40, 0x11, 0x61, 0x40, 0x11, 0x62, + 0x40, 0x11, 0x63, 0x40, 0x11, 0x64, 0x40, 0x11, 0x65, 0x40, 0x11, 0x66, + 0x40, 0x11, 0x67, 0x40, 0x11, 0x68, 0x40, 0x11, 0x69, 0x40, 0x11, 0x6A, + 0x40, 0x11, 0x6B, 0x40, 0x11, 0x6C, 0x40, 0x11, 0x6D, 0x40, 0x11, 0x6E, + 0x40, 0x11, 0x6F, 0x40, 0x11, 0x70, 0x40, 0x11, 0x71, 0x40, 0x11, 0x72, + 0x40, 0x11, 0x73, 0x40, 0x11, 0x74, 0x40, 0x11, 0x75, 0x40, 0x11, 0x60, + 0x40, 0x11, 0x14, 0x40, 0x11, 0x15, 0x40, 0x11, 0xC7, 0x40, 0x11, 0xC8, + 0x40, 0x11, 0xCC, 0x40, 0x11, 0xCE, 0x40, 0x11, 0xD3, 0x40, 0x11, 0xD7, + 0x40, 0x11, 0xD9, 0x40, 0x11, 0x1C, 0x40, 0x11, 0xDD, 0x40, 0x11, 0xDF, + 0x40, 0x11, 0x1D, 0x40, 0x11, 0x1E, 0x40, 0x11, 0x20, 0x40, 0x11, 0x22, + 0x40, 0x11, 0x23, 0x40, 0x11, 0x27, 0x40, 0x11, 0x29, 0x40, 0x11, 0x2B, + 0x40, 0x11, 0x2C, 0x40, 0x11, 0x2D, 0x40, 0x11, 0x2E, 0x40, 0x11, 0x2F, + 0x40, 0x11, 0x32, 0x40, 0x11, 0x36, 0x40, 0x11, 0x40, 0x40, 0x11, 0x47, + 0x40, 0x11, 0x4C, 0x40, 0x11, 0xF1, 0x40, 0x11, 0xF2, 0x40, 0x11, 0x57, + 0x40, 0x11, 0x58, 0x40, 0x11, 0x59, 0x40, 0x11, 0x84, 0x40, 0x11, 0x85, + 0x40, 0x11, 0x88, 0x40, 0x11, 0x91, 0x40, 0x11, 0x92, 0x40, 0x11, 0x94, + 0x40, 0x11, 0x9E, 0x40, 0x11, 0xA1, 0x20, 0x4E, 0x00, 0x20, 0x4E, 0x8C, + 0x20, 0x4E, 0x09, 0x20, 0x56, 0xDB, 0x20, 0x4E, 0x0A, 0x20, 0x4E, 0x2D, + 0x20, 0x4E, 0x0B, 0x20, 0x75, 0x32, 0x20, 0x4E, 0x59, 0x20, 0x4E, 0x19, + 0x20, 0x4E, 0x01, 0x20, 0x59, 0x29, 0x20, 0x57, 0x30, 0x20, 0x4E, 0xBA, + 0xC0, 0x00, 0x28, 0x80, 0x11, 0x00, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x11, 0x02, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x03, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x05, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x11, 0x06, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x11, 0x07, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x09, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x11, 0x0E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0F, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x10, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x11, 0x11, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x11, 0x12, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x00, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x02, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x03, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x05, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x06, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x07, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x09, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0E, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0F, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x10, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x11, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x12, + 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, + 0x80, 0x11, 0x6E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, + 0x80, 0x11, 0x69, 0x80, 0x11, 0x0C, 0x80, 0x11, 0x65, 0x80, 0x11, 0xAB, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x80, 0x11, 0x69, + 0x80, 0x11, 0x12, 0x80, 0x11, 0x6E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x4E, 0x00, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x8C, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x09, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x56, 0xDB, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x4E, 0x94, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x51, 0x6D, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x03, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x51, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x4E, 0x5D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x53, 0x41, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x08, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x70, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x6C, 0x34, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x28, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x91, 0xD1, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x57, 0x1F, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x65, 0xE5, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x68, 0x2A, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x09, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x79, 0x3E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x54, 0x0D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x72, 0x79, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x8C, 0xA1, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x79, 0x5D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x52, 0xB4, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0xE3, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x54, 0x7C, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x5B, 0x66, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x76, 0xE3, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4F, 0x01, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x8C, 0xC7, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x53, 0x54, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x79, 0x6D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4F, 0x11, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x81, 0xEA, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x81, 0xF3, 0x00, 0x00, 0x29, 0x1C, 0x55, 0x4F, + 0x1C, 0x5E, 0x7C, 0x1C, 0x65, 0x87, 0x1C, 0x7B, 0x8F, 0xB8, 0x00, 0x50, + 0x80, 0x00, 0x54, 0x00, 0x00, 0x45, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x31, + 0x9C, 0x00, 0x32, 0x00, 0x00, 0x32, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x33, + 0x9C, 0x00, 0x32, 0x00, 0x00, 0x34, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x35, + 0x9C, 0x00, 0x32, 0x00, 0x00, 0x36, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x37, + 0x9C, 0x00, 0x32, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x39, + 0x9C, 0x00, 0x33, 0x00, 0x00, 0x30, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x31, + 0x9C, 0x00, 0x33, 0x00, 0x00, 0x32, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x33, + 0x9C, 0x00, 0x33, 0x00, 0x00, 0x34, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x35, + 0x1C, 0x11, 0x00, 0x1C, 0x11, 0x02, 0x1C, 0x11, 0x03, 0x1C, 0x11, 0x05, + 0x1C, 0x11, 0x06, 0x1C, 0x11, 0x07, 0x1C, 0x11, 0x09, 0x1C, 0x11, 0x0B, + 0x1C, 0x11, 0x0C, 0x1C, 0x11, 0x0E, 0x1C, 0x11, 0x0F, 0x1C, 0x11, 0x10, + 0x1C, 0x11, 0x11, 0x1C, 0x11, 0x12, 0x9C, 0x11, 0x00, 0x00, 0x11, 0x61, + 0x9C, 0x11, 0x02, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x03, 0x00, 0x11, 0x61, + 0x9C, 0x11, 0x05, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x06, 0x00, 0x11, 0x61, + 0x9C, 0x11, 0x07, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x09, 0x00, 0x11, 0x61, + 0x9C, 0x11, 0x0B, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0C, 0x00, 0x11, 0x61, + 0x9C, 0x11, 0x0E, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0F, 0x00, 0x11, 0x61, + 0x9C, 0x11, 0x10, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x11, 0x00, 0x11, 0x61, + 0x9C, 0x11, 0x12, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0E, 0x80, 0x11, 0x61, + 0x80, 0x11, 0xB7, 0x80, 0x11, 0x00, 0x00, 0x11, 0x69, 0x9C, 0x11, 0x0C, + 0x80, 0x11, 0x6E, 0x80, 0x11, 0x0B, 0x00, 0x11, 0x74, 0x9C, 0x11, 0x0B, + 0x00, 0x11, 0x6E, 0x1C, 0x4E, 0x00, 0x1C, 0x4E, 0x8C, 0x1C, 0x4E, 0x09, + 0x1C, 0x56, 0xDB, 0x1C, 0x4E, 0x94, 0x1C, 0x51, 0x6D, 0x1C, 0x4E, 0x03, + 0x1C, 0x51, 0x6B, 0x1C, 0x4E, 0x5D, 0x1C, 0x53, 0x41, 0x1C, 0x67, 0x08, + 0x1C, 0x70, 0x6B, 0x1C, 0x6C, 0x34, 0x1C, 0x67, 0x28, 0x1C, 0x91, 0xD1, + 0x1C, 0x57, 0x1F, 0x1C, 0x65, 0xE5, 0x1C, 0x68, 0x2A, 0x1C, 0x67, 0x09, + 0x1C, 0x79, 0x3E, 0x1C, 0x54, 0x0D, 0x1C, 0x72, 0x79, 0x1C, 0x8C, 0xA1, + 0x1C, 0x79, 0x5D, 0x1C, 0x52, 0xB4, 0x1C, 0x79, 0xD8, 0x1C, 0x75, 0x37, + 0x1C, 0x59, 0x73, 0x1C, 0x90, 0x69, 0x1C, 0x51, 0x2A, 0x1C, 0x53, 0x70, + 0x1C, 0x6C, 0xE8, 0x1C, 0x98, 0x05, 0x1C, 0x4F, 0x11, 0x1C, 0x51, 0x99, + 0x1C, 0x6B, 0x63, 0x1C, 0x4E, 0x0A, 0x1C, 0x4E, 0x2D, 0x1C, 0x4E, 0x0B, + 0x1C, 0x5D, 0xE6, 0x1C, 0x53, 0xF3, 0x1C, 0x53, 0x3B, 0x1C, 0x5B, 0x97, + 0x1C, 0x5B, 0x66, 0x1C, 0x76, 0xE3, 0x1C, 0x4F, 0x01, 0x1C, 0x8C, 0xC7, + 0x1C, 0x53, 0x54, 0x1C, 0x59, 0x1C, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x36, + 0x9C, 0x00, 0x33, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x38, + 0x9C, 0x00, 0x33, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x30, + 0x9C, 0x00, 0x34, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x32, + 0x9C, 0x00, 0x34, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x34, + 0x9C, 0x00, 0x34, 0x00, 0x00, 0x35, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x36, + 0x9C, 0x00, 0x34, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x38, + 0x9C, 0x00, 0x34, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x35, 0x00, 0x00, 0x30, + 0xC0, 0x00, 0x31, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x32, 0x00, 0x67, 0x08, + 0xC0, 0x00, 0x33, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x34, 0x00, 0x67, 0x08, + 0xC0, 0x00, 0x35, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x36, 0x00, 0x67, 0x08, + 0xC0, 0x00, 0x37, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x38, 0x00, 0x67, 0x08, + 0xC0, 0x00, 0x39, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, + 0x00, 0x67, 0x08, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x67, 0x08, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x67, 0x08, 0xB8, 0x00, 0x48, + 0x00, 0x00, 0x67, 0xB8, 0x00, 0x65, 0x80, 0x00, 0x72, 0x00, 0x00, 0x67, + 0xB8, 0x00, 0x65, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x4C, 0x80, 0x00, 0x54, + 0x00, 0x00, 0x44, 0x1C, 0x30, 0xA2, 0x1C, 0x30, 0xA4, 0x1C, 0x30, 0xA6, + 0x1C, 0x30, 0xA8, 0x1C, 0x30, 0xAA, 0x1C, 0x30, 0xAB, 0x1C, 0x30, 0xAD, + 0x1C, 0x30, 0xAF, 0x1C, 0x30, 0xB1, 0x1C, 0x30, 0xB3, 0x1C, 0x30, 0xB5, + 0x1C, 0x30, 0xB7, 0x1C, 0x30, 0xB9, 0x1C, 0x30, 0xBB, 0x1C, 0x30, 0xBD, + 0x1C, 0x30, 0xBF, 0x1C, 0x30, 0xC1, 0x1C, 0x30, 0xC4, 0x1C, 0x30, 0xC6, + 0x1C, 0x30, 0xC8, 0x1C, 0x30, 0xCA, 0x1C, 0x30, 0xCB, 0x1C, 0x30, 0xCC, + 0x1C, 0x30, 0xCD, 0x1C, 0x30, 0xCE, 0x1C, 0x30, 0xCF, 0x1C, 0x30, 0xD2, + 0x1C, 0x30, 0xD5, 0x1C, 0x30, 0xD8, 0x1C, 0x30, 0xDB, 0x1C, 0x30, 0xDE, + 0x1C, 0x30, 0xDF, 0x1C, 0x30, 0xE0, 0x1C, 0x30, 0xE1, 0x1C, 0x30, 0xE2, + 0x1C, 0x30, 0xE4, 0x1C, 0x30, 0xE6, 0x1C, 0x30, 0xE8, 0x1C, 0x30, 0xE9, + 0x1C, 0x30, 0xEA, 0x1C, 0x30, 0xEB, 0x1C, 0x30, 0xEC, 0x1C, 0x30, 0xED, + 0x1C, 0x30, 0xEF, 0x1C, 0x30, 0xF0, 0x1C, 0x30, 0xF1, 0x1C, 0x30, 0xF2, + 0xB8, 0x4E, 0xE4, 0x00, 0x54, 0x8C, 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xD1, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xEB, + 0x80, 0x30, 0xD5, 0x00, 0x30, 0xA1, 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xF3, + 0x80, 0x30, 0xDA, 0x00, 0x30, 0xA2, 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xFC, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xA4, 0x80, 0x30, 0xCB, 0x80, 0x30, 0xF3, + 0x00, 0x30, 0xB0, 0xB8, 0x30, 0xA4, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC1, + 0xB8, 0x30, 0xA6, 0x80, 0x30, 0xA9, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xA8, + 0x80, 0x30, 0xB9, 0x80, 0x30, 0xAF, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC9, + 0xB8, 0x30, 0xA8, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xAB, 0x00, 0x30, 0xFC, + 0xB8, 0x30, 0xAA, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xAA, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xAB, 0x80, 0x30, 0xA4, + 0x00, 0x30, 0xEA, 0xB8, 0x30, 0xAB, 0x80, 0x30, 0xE9, 0x80, 0x30, 0xC3, + 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xAB, 0x80, 0x30, 0xED, 0x80, 0x30, 0xEA, + 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAC, 0x80, 0x30, 0xED, 0x00, 0x30, 0xF3, + 0xB8, 0x30, 0xAC, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xDE, 0xB8, 0x30, 0xAE, + 0x00, 0x30, 0xAC, 0xB8, 0x30, 0xAE, 0x80, 0x30, 0xCB, 0x00, 0x30, 0xFC, + 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xE5, 0x80, 0x30, 0xEA, 0x00, 0x30, 0xFC, + 0xB8, 0x30, 0xAE, 0x80, 0x30, 0xEB, 0x80, 0x30, 0xC0, 0x00, 0x30, 0xFC, + 0xB8, 0x30, 0xAD, 0x00, 0x30, 0xED, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xED, + 0x80, 0x30, 0xB0, 0x80, 0x30, 0xE9, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xAD, + 0x80, 0x30, 0xED, 0x80, 0x30, 0xE1, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xC8, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xED, 0x80, 0x30, 0xEF, + 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xB0, 0x80, 0x30, 0xE9, + 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xB0, 0x80, 0x30, 0xE9, 0x80, 0x30, 0xE0, + 0x80, 0x30, 0xC8, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xAF, 0x80, 0x30, 0xEB, + 0x80, 0x30, 0xBC, 0x80, 0x30, 0xA4, 0x00, 0x30, 0xED, 0xB8, 0x30, 0xAF, + 0x80, 0x30, 0xED, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xCD, 0xB8, 0x30, 0xB1, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xB3, 0x80, 0x30, 0xEB, + 0x00, 0x30, 0xCA, 0xB8, 0x30, 0xB3, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xDD, + 0xB8, 0x30, 0xB5, 0x80, 0x30, 0xA4, 0x80, 0x30, 0xAF, 0x00, 0x30, 0xEB, + 0xB8, 0x30, 0xB5, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xC1, 0x80, 0x30, 0xFC, + 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xB7, 0x80, 0x30, 0xEA, 0x80, 0x30, 0xF3, + 0x00, 0x30, 0xB0, 0xB8, 0x30, 0xBB, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC1, + 0xB8, 0x30, 0xBB, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xC0, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xC7, 0x00, 0x30, 0xB7, + 0xB8, 0x30, 0xC9, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xC8, 0x00, 0x30, 0xF3, + 0xB8, 0x30, 0xCA, 0x00, 0x30, 0xCE, 0xB8, 0x30, 0xCE, 0x80, 0x30, 0xC3, + 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xCF, 0x80, 0x30, 0xA4, 0x00, 0x30, 0xC4, + 0xB8, 0x30, 0xD1, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xBB, 0x80, 0x30, 0xF3, + 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xD1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC4, + 0xB8, 0x30, 0xD0, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xEC, 0x00, 0x30, 0xEB, + 0xB8, 0x30, 0xD4, 0x80, 0x30, 0xA2, 0x80, 0x30, 0xB9, 0x80, 0x30, 0xC8, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, 0x80, 0x30, 0xAF, 0x00, 0x30, 0xEB, + 0xB8, 0x30, 0xD4, 0x00, 0x30, 0xB3, 0xB8, 0x30, 0xD3, 0x00, 0x30, 0xEB, + 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xA1, 0x80, 0x30, 0xE9, 0x80, 0x30, 0xC3, + 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xA3, 0x80, 0x30, 0xFC, + 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xD6, 0x80, 0x30, 0xC3, 0x80, 0x30, 0xB7, + 0x80, 0x30, 0xA7, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xE9, + 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xD8, 0x80, 0x30, 0xAF, 0x80, 0x30, 0xBF, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xDA, 0x00, 0x30, 0xBD, + 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xCB, 0x00, 0x30, 0xD2, 0xB8, 0x30, 0xD8, + 0x80, 0x30, 0xEB, 0x00, 0x30, 0xC4, 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xF3, + 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB8, + 0xB8, 0x30, 0xD9, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xBF, 0xB8, 0x30, 0xDD, + 0x80, 0x30, 0xA4, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xDC, + 0x80, 0x30, 0xEB, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xDB, 0x00, 0x30, 0xF3, + 0xB8, 0x30, 0xDD, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xDB, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xDB, 0x80, 0x30, 0xFC, + 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xA4, 0x80, 0x30, 0xAF, + 0x00, 0x30, 0xED, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xA4, 0x00, 0x30, 0xEB, + 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xCF, 0xB8, 0x30, 0xDE, + 0x80, 0x30, 0xEB, 0x00, 0x30, 0xAF, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xF3, + 0x80, 0x30, 0xB7, 0x80, 0x30, 0xE7, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDF, + 0x80, 0x30, 0xAF, 0x80, 0x30, 0xED, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDF, + 0x00, 0x30, 0xEA, 0xB8, 0x30, 0xDF, 0x80, 0x30, 0xEA, 0x80, 0x30, 0xD0, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xE1, 0x00, 0x30, 0xAC, + 0xB8, 0x30, 0xE1, 0x80, 0x30, 0xAC, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xF3, + 0xB8, 0x30, 0xE1, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, + 0xB8, 0x30, 0xE4, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xE4, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xE6, 0x80, 0x30, 0xA2, + 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xEA, 0x80, 0x30, 0xC3, 0x80, 0x30, 0xC8, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xEA, 0x00, 0x30, 0xE9, 0xB8, 0x30, 0xEB, + 0x80, 0x30, 0xD4, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xEB, 0x80, 0x30, 0xFC, + 0x80, 0x30, 0xD6, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xEC, 0x00, 0x30, 0xE0, + 0xB8, 0x30, 0xEC, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xC8, 0x80, 0x30, 0xB2, + 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xEF, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, + 0xC0, 0x00, 0x30, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x32, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x33, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x34, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x35, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x36, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x37, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x38, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x39, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x31, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x35, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x36, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x39, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x30, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x31, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x32, 0x80, 0x00, 0x32, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, + 0x80, 0x00, 0x33, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x34, + 0x00, 0x70, 0xB9, 0xB8, 0x00, 0x68, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, + 0xB8, 0x00, 0x64, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x41, 0x00, 0x00, 0x55, + 0xB8, 0x00, 0x62, 0x80, 0x00, 0x61, 0x00, 0x00, 0x72, 0xB8, 0x00, 0x6F, + 0x00, 0x00, 0x56, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x63, 0xB8, 0x00, 0x64, + 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x64, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, + 0xB8, 0x00, 0x64, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x49, + 0x00, 0x00, 0x55, 0xB8, 0x5E, 0x73, 0x00, 0x62, 0x10, 0xB8, 0x66, 0x2D, + 0x00, 0x54, 0x8C, 0xB8, 0x59, 0x27, 0x00, 0x6B, 0x63, 0xB8, 0x66, 0x0E, + 0x00, 0x6C, 0xBB, 0xB8, 0x68, 0x2A, 0x80, 0x5F, 0x0F, 0x80, 0x4F, 0x1A, + 0x00, 0x79, 0x3E, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6E, + 0x00, 0x00, 0x41, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6D, + 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x4B, + 0x00, 0x00, 0x42, 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x47, + 0x00, 0x00, 0x42, 0xB8, 0x00, 0x63, 0x80, 0x00, 0x61, 0x00, 0x00, 0x6C, + 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x63, 0x80, 0x00, 0x61, 0x00, 0x00, 0x6C, + 0xB8, 0x00, 0x70, 0x00, 0x00, 0x46, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x46, + 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x46, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x67, + 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x67, + 0xB8, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x48, + 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x4D, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, + 0xB8, 0x00, 0x47, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x54, + 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x03, 0xBC, 0x00, 0x21, 0x13, + 0xB8, 0x00, 0x6D, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x64, 0x00, 0x21, 0x13, + 0xB8, 0x00, 0x6B, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x66, 0x00, 0x00, 0x6D, + 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x6D, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x6D, + 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x63, 0x00, 0x00, 0x6D, + 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x6D, + 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x63, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, + 0xB8, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x6D, + 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, + 0xB8, 0x00, 0x63, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6D, + 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, + 0xB8, 0x00, 0x6D, 0x80, 0x22, 0x15, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x6D, + 0x80, 0x22, 0x15, 0x80, 0x00, 0x73, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x50, + 0x00, 0x00, 0x61, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, + 0xB8, 0x00, 0x4D, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x47, + 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x72, 0x80, 0x00, 0x61, + 0x00, 0x00, 0x64, 0xB8, 0x00, 0x72, 0x80, 0x00, 0x61, 0x80, 0x00, 0x64, + 0x80, 0x22, 0x15, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x72, 0x80, 0x00, 0x61, + 0x80, 0x00, 0x64, 0x80, 0x22, 0x15, 0x80, 0x00, 0x73, 0x00, 0x00, 0xB2, + 0xB8, 0x00, 0x70, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x73, + 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x73, + 0xB8, 0x00, 0x70, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x56, + 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x56, + 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x56, + 0xB8, 0x00, 0x70, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x57, + 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x57, + 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x57, + 0xB8, 0x00, 0x6B, 0x00, 0x03, 0xA9, 0xB8, 0x00, 0x4D, 0x00, 0x03, 0xA9, + 0xB8, 0x00, 0x61, 0x80, 0x00, 0x2E, 0x80, 0x00, 0x6D, 0x00, 0x00, 0x2E, + 0xB8, 0x00, 0x42, 0x00, 0x00, 0x71, 0xB8, 0x00, 0x63, 0x00, 0x00, 0x63, + 0xB8, 0x00, 0x63, 0x00, 0x00, 0x64, 0xB8, 0x00, 0x43, 0x80, 0x22, 0x15, + 0x80, 0x00, 0x6B, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x43, 0x80, 0x00, 0x6F, + 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x64, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x47, + 0x00, 0x00, 0x79, 0xB8, 0x00, 0x68, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x48, + 0x00, 0x00, 0x50, 0xB8, 0x00, 0x69, 0x00, 0x00, 0x6E, 0xB8, 0x00, 0x4B, + 0x00, 0x00, 0x4B, 0xB8, 0x00, 0x4B, 0x00, 0x00, 0x4D, 0xB8, 0x00, 0x6B, + 0x00, 0x00, 0x74, 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6C, + 0x00, 0x00, 0x6E, 0xB8, 0x00, 0x6C, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x67, + 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x78, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x62, + 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x69, 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x6D, + 0x80, 0x00, 0x6F, 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x50, 0x00, 0x00, 0x48, + 0xB8, 0x00, 0x70, 0x80, 0x00, 0x2E, 0x80, 0x00, 0x6D, 0x00, 0x00, 0x2E, + 0xB8, 0x00, 0x50, 0x80, 0x00, 0x50, 0x00, 0x00, 0x4D, 0xB8, 0x00, 0x50, + 0x00, 0x00, 0x52, 0xB8, 0x00, 0x73, 0x00, 0x00, 0x72, 0xB8, 0x00, 0x53, + 0x00, 0x00, 0x76, 0xB8, 0x00, 0x57, 0x00, 0x00, 0x62, 0xB8, 0x00, 0x56, + 0x80, 0x22, 0x15, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x41, 0x80, 0x22, 0x15, + 0x00, 0x00, 0x6D, 0xC0, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x34, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x35, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x36, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x37, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x38, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x39, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x34, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x38, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x32, 0x80, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, + 0x80, 0x00, 0x32, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x33, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x34, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x32, 0x80, 0x00, 0x35, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, + 0x80, 0x00, 0x36, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x37, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x38, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x32, 0x80, 0x00, 0x39, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, + 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, 0x80, 0x00, 0x31, + 0x00, 0x65, 0xE5, 0xB8, 0x00, 0x67, 0x80, 0x00, 0x61, 0x00, 0x00, 0x6C, + 0x20, 0x04, 0x4A, 0x20, 0x04, 0x4C, 0x20, 0xA7, 0x6F, 0x20, 0x00, 0x43, + 0x20, 0x00, 0x46, 0x20, 0x00, 0x51, 0x20, 0x01, 0x26, 0x20, 0x01, 0x53, + 0x20, 0xA7, 0x27, 0x20, 0xAB, 0x37, 0x20, 0x02, 0x6B, 0x20, 0xAB, 0x52, + 0x20, 0x02, 0x8D, 0x00, 0x8C, 0x48, 0x00, 0x66, 0xF4, 0x00, 0x8E, 0xCA, + 0x00, 0x8C, 0xC8, 0x00, 0x6E, 0xD1, 0x00, 0x4E, 0x32, 0x00, 0x53, 0xE5, + 0x00, 0x9F, 0x9C, 0x00, 0x9F, 0x9C, 0x00, 0x59, 0x51, 0x00, 0x91, 0xD1, + 0x00, 0x55, 0x87, 0x00, 0x59, 0x48, 0x00, 0x61, 0xF6, 0x00, 0x76, 0x69, + 0x00, 0x7F, 0x85, 0x00, 0x86, 0x3F, 0x00, 0x87, 0xBA, 0x00, 0x88, 0xF8, + 0x00, 0x90, 0x8F, 0x00, 0x6A, 0x02, 0x00, 0x6D, 0x1B, 0x00, 0x70, 0xD9, + 0x00, 0x73, 0xDE, 0x00, 0x84, 0x3D, 0x00, 0x91, 0x6A, 0x00, 0x99, 0xF1, + 0x00, 0x4E, 0x82, 0x00, 0x53, 0x75, 0x00, 0x6B, 0x04, 0x00, 0x72, 0x1B, + 0x00, 0x86, 0x2D, 0x00, 0x9E, 0x1E, 0x00, 0x5D, 0x50, 0x00, 0x6F, 0xEB, + 0x00, 0x85, 0xCD, 0x00, 0x89, 0x64, 0x00, 0x62, 0xC9, 0x00, 0x81, 0xD8, + 0x00, 0x88, 0x1F, 0x00, 0x5E, 0xCA, 0x00, 0x67, 0x17, 0x00, 0x6D, 0x6A, + 0x00, 0x72, 0xFC, 0x00, 0x90, 0xCE, 0x00, 0x4F, 0x86, 0x00, 0x51, 0xB7, + 0x00, 0x52, 0xDE, 0x00, 0x64, 0xC4, 0x00, 0x6A, 0xD3, 0x00, 0x72, 0x10, + 0x00, 0x76, 0xE7, 0x00, 0x80, 0x01, 0x00, 0x86, 0x06, 0x00, 0x86, 0x5C, + 0x00, 0x8D, 0xEF, 0x00, 0x97, 0x32, 0x00, 0x9B, 0x6F, 0x00, 0x9D, 0xFA, + 0x00, 0x78, 0x8C, 0x00, 0x79, 0x7F, 0x00, 0x7D, 0xA0, 0x00, 0x83, 0xC9, + 0x00, 0x93, 0x04, 0x00, 0x9E, 0x7F, 0x00, 0x8A, 0xD6, 0x00, 0x58, 0xDF, + 0x00, 0x5F, 0x04, 0x00, 0x7C, 0x60, 0x00, 0x80, 0x7E, 0x00, 0x72, 0x62, + 0x00, 0x78, 0xCA, 0x00, 0x8C, 0xC2, 0x00, 0x96, 0xF7, 0x00, 0x58, 0xD8, + 0x00, 0x5C, 0x62, 0x00, 0x6A, 0x13, 0x00, 0x6D, 0xDA, 0x00, 0x6F, 0x0F, + 0x00, 0x7D, 0x2F, 0x00, 0x7E, 0x37, 0x00, 0x96, 0x4B, 0x00, 0x52, 0xD2, + 0x00, 0x80, 0x8B, 0x00, 0x51, 0xDC, 0x00, 0x51, 0xCC, 0x00, 0x7A, 0x1C, + 0x00, 0x7D, 0xBE, 0x00, 0x83, 0xF1, 0x00, 0x96, 0x75, 0x00, 0x8B, 0x80, + 0x00, 0x62, 0xCF, 0x00, 0x6A, 0x02, 0x00, 0x8A, 0xFE, 0x00, 0x4E, 0x39, + 0x00, 0x5B, 0xE7, 0x00, 0x60, 0x12, 0x00, 0x73, 0x87, 0x00, 0x75, 0x70, + 0x00, 0x53, 0x17, 0x00, 0x78, 0xFB, 0x00, 0x4F, 0xBF, 0x00, 0x5F, 0xA9, + 0x00, 0x4E, 0x0D, 0x00, 0x6C, 0xCC, 0x00, 0x65, 0x78, 0x00, 0x7D, 0x22, + 0x00, 0x53, 0xC3, 0x00, 0x58, 0x5E, 0x00, 0x77, 0x01, 0x00, 0x84, 0x49, + 0x00, 0x8A, 0xAA, 0x00, 0x6B, 0xBA, 0x00, 0x8F, 0xB0, 0x00, 0x6C, 0x88, + 0x00, 0x62, 0xFE, 0x00, 0x82, 0xE5, 0x00, 0x63, 0xA0, 0x00, 0x75, 0x65, + 0x00, 0x4E, 0xAE, 0x00, 0x51, 0x69, 0x00, 0x51, 0xC9, 0x00, 0x68, 0x81, + 0x00, 0x7C, 0xE7, 0x00, 0x82, 0x6F, 0x00, 0x8A, 0xD2, 0x00, 0x91, 0xCF, + 0x00, 0x52, 0xF5, 0x00, 0x54, 0x42, 0x00, 0x59, 0x73, 0x00, 0x5E, 0xEC, + 0x00, 0x65, 0xC5, 0x00, 0x6F, 0xFE, 0x00, 0x79, 0x2A, 0x00, 0x95, 0xAD, + 0x00, 0x9A, 0x6A, 0x00, 0x9E, 0x97, 0x00, 0x9E, 0xCE, 0x00, 0x52, 0x9B, + 0x00, 0x66, 0xC6, 0x00, 0x6B, 0x77, 0x00, 0x8F, 0x62, 0x00, 0x5E, 0x74, + 0x00, 0x61, 0x90, 0x00, 0x62, 0x00, 0x00, 0x64, 0x9A, 0x00, 0x6F, 0x23, + 0x00, 0x71, 0x49, 0x00, 0x74, 0x89, 0x00, 0x79, 0xCA, 0x00, 0x7D, 0xF4, + 0x00, 0x80, 0x6F, 0x00, 0x8F, 0x26, 0x00, 0x84, 0xEE, 0x00, 0x90, 0x23, + 0x00, 0x93, 0x4A, 0x00, 0x52, 0x17, 0x00, 0x52, 0xA3, 0x00, 0x54, 0xBD, + 0x00, 0x70, 0xC8, 0x00, 0x88, 0xC2, 0x00, 0x8A, 0xAA, 0x00, 0x5E, 0xC9, + 0x00, 0x5F, 0xF5, 0x00, 0x63, 0x7B, 0x00, 0x6B, 0xAE, 0x00, 0x7C, 0x3E, + 0x00, 0x73, 0x75, 0x00, 0x4E, 0xE4, 0x00, 0x56, 0xF9, 0x00, 0x5B, 0xE7, + 0x00, 0x5D, 0xBA, 0x00, 0x60, 0x1C, 0x00, 0x73, 0xB2, 0x00, 0x74, 0x69, + 0x00, 0x7F, 0x9A, 0x00, 0x80, 0x46, 0x00, 0x92, 0x34, 0x00, 0x96, 0xF6, + 0x00, 0x97, 0x48, 0x00, 0x98, 0x18, 0x00, 0x4F, 0x8B, 0x00, 0x79, 0xAE, + 0x00, 0x91, 0xB4, 0x00, 0x96, 0xB8, 0x00, 0x60, 0xE1, 0x00, 0x4E, 0x86, + 0x00, 0x50, 0xDA, 0x00, 0x5B, 0xEE, 0x00, 0x5C, 0x3F, 0x00, 0x65, 0x99, + 0x00, 0x6A, 0x02, 0x00, 0x71, 0xCE, 0x00, 0x76, 0x42, 0x00, 0x84, 0xFC, + 0x00, 0x90, 0x7C, 0x00, 0x9F, 0x8D, 0x00, 0x66, 0x88, 0x00, 0x96, 0x2E, + 0x00, 0x52, 0x89, 0x00, 0x67, 0x7B, 0x00, 0x67, 0xF3, 0x00, 0x6D, 0x41, + 0x00, 0x6E, 0x9C, 0x00, 0x74, 0x09, 0x00, 0x75, 0x59, 0x00, 0x78, 0x6B, + 0x00, 0x7D, 0x10, 0x00, 0x98, 0x5E, 0x00, 0x51, 0x6D, 0x00, 0x62, 0x2E, + 0x00, 0x96, 0x78, 0x00, 0x50, 0x2B, 0x00, 0x5D, 0x19, 0x00, 0x6D, 0xEA, + 0x00, 0x8F, 0x2A, 0x00, 0x5F, 0x8B, 0x00, 0x61, 0x44, 0x00, 0x68, 0x17, + 0x00, 0x73, 0x87, 0x00, 0x96, 0x86, 0x00, 0x52, 0x29, 0x00, 0x54, 0x0F, + 0x00, 0x5C, 0x65, 0x00, 0x66, 0x13, 0x00, 0x67, 0x4E, 0x00, 0x68, 0xA8, + 0x00, 0x6C, 0xE5, 0x00, 0x74, 0x06, 0x00, 0x75, 0xE2, 0x00, 0x7F, 0x79, + 0x00, 0x88, 0xCF, 0x00, 0x88, 0xE1, 0x00, 0x91, 0xCC, 0x00, 0x96, 0xE2, + 0x00, 0x53, 0x3F, 0x00, 0x6E, 0xBA, 0x00, 0x54, 0x1D, 0x00, 0x71, 0xD0, + 0x00, 0x74, 0x98, 0x00, 0x85, 0xFA, 0x00, 0x96, 0xA3, 0x00, 0x9C, 0x57, + 0x00, 0x9E, 0x9F, 0x00, 0x67, 0x97, 0x00, 0x6D, 0xCB, 0x00, 0x81, 0xE8, + 0x00, 0x7A, 0xCB, 0x00, 0x7B, 0x20, 0x00, 0x7C, 0x92, 0x00, 0x72, 0xC0, + 0x00, 0x70, 0x99, 0x00, 0x8B, 0x58, 0x00, 0x4E, 0xC0, 0x00, 0x83, 0x36, + 0x00, 0x52, 0x3A, 0x00, 0x52, 0x07, 0x00, 0x5E, 0xA6, 0x00, 0x62, 0xD3, + 0x00, 0x7C, 0xD6, 0x00, 0x5B, 0x85, 0x00, 0x6D, 0x1E, 0x00, 0x66, 0xB4, + 0x00, 0x8F, 0x3B, 0x00, 0x88, 0x4C, 0x00, 0x96, 0x4D, 0x00, 0x89, 0x8B, + 0x00, 0x5E, 0xD3, 0x00, 0x51, 0x40, 0x00, 0x55, 0xC0, 0x00, 0x58, 0x5A, + 0x00, 0x66, 0x74, 0x00, 0x51, 0xDE, 0x00, 0x73, 0x2A, 0x00, 0x76, 0xCA, + 0x00, 0x79, 0x3C, 0x00, 0x79, 0x5E, 0x00, 0x79, 0x65, 0x00, 0x79, 0x8F, + 0x00, 0x97, 0x56, 0x00, 0x7C, 0xBE, 0x00, 0x7F, 0xBD, 0x00, 0x86, 0x12, + 0x00, 0x8A, 0xF8, 0x00, 0x90, 0x38, 0x00, 0x90, 0xFD, 0x00, 0x98, 0xEF, + 0x00, 0x98, 0xFC, 0x00, 0x99, 0x28, 0x00, 0x9D, 0xB4, 0x00, 0x90, 0xDE, + 0x00, 0x96, 0xB7, 0x00, 0x4F, 0xAE, 0x00, 0x50, 0xE7, 0x00, 0x51, 0x4D, + 0x00, 0x52, 0xC9, 0x00, 0x52, 0xE4, 0x00, 0x53, 0x51, 0x00, 0x55, 0x9D, + 0x00, 0x56, 0x06, 0x00, 0x56, 0x68, 0x00, 0x58, 0x40, 0x00, 0x58, 0xA8, + 0x00, 0x5C, 0x64, 0x00, 0x5C, 0x6E, 0x00, 0x60, 0x94, 0x00, 0x61, 0x68, + 0x00, 0x61, 0x8E, 0x00, 0x61, 0xF2, 0x00, 0x65, 0x4F, 0x00, 0x65, 0xE2, + 0x00, 0x66, 0x91, 0x00, 0x68, 0x85, 0x00, 0x6D, 0x77, 0x00, 0x6E, 0x1A, + 0x00, 0x6F, 0x22, 0x00, 0x71, 0x6E, 0x00, 0x72, 0x2B, 0x00, 0x74, 0x22, + 0x00, 0x78, 0x91, 0x00, 0x79, 0x3E, 0x00, 0x79, 0x49, 0x00, 0x79, 0x48, + 0x00, 0x79, 0x50, 0x00, 0x79, 0x56, 0x00, 0x79, 0x5D, 0x00, 0x79, 0x8D, + 0x00, 0x79, 0x8E, 0x00, 0x7A, 0x40, 0x00, 0x7A, 0x81, 0x00, 0x7B, 0xC0, + 0x00, 0x7D, 0xF4, 0x00, 0x7E, 0x09, 0x00, 0x7E, 0x41, 0x00, 0x7F, 0x72, + 0x00, 0x80, 0x05, 0x00, 0x81, 0xED, 0x00, 0x82, 0x79, 0x00, 0x82, 0x79, + 0x00, 0x84, 0x57, 0x00, 0x89, 0x10, 0x00, 0x89, 0x96, 0x00, 0x8B, 0x01, + 0x00, 0x8B, 0x39, 0x00, 0x8C, 0xD3, 0x00, 0x8D, 0x08, 0x00, 0x8F, 0xB6, + 0x00, 0x90, 0x38, 0x00, 0x96, 0xE3, 0x00, 0x97, 0xFF, 0x00, 0x98, 0x3B, + 0x00, 0x60, 0x75, 0x02, 0x42, 0xEE, 0x00, 0x82, 0x18, 0x00, 0x4E, 0x26, + 0x00, 0x51, 0xB5, 0x00, 0x51, 0x68, 0x00, 0x4F, 0x80, 0x00, 0x51, 0x45, + 0x00, 0x51, 0x80, 0x00, 0x52, 0xC7, 0x00, 0x52, 0xFA, 0x00, 0x55, 0x9D, + 0x00, 0x55, 0x55, 0x00, 0x55, 0x99, 0x00, 0x55, 0xE2, 0x00, 0x58, 0x5A, + 0x00, 0x58, 0xB3, 0x00, 0x59, 0x44, 0x00, 0x59, 0x54, 0x00, 0x5A, 0x62, + 0x00, 0x5B, 0x28, 0x00, 0x5E, 0xD2, 0x00, 0x5E, 0xD9, 0x00, 0x5F, 0x69, + 0x00, 0x5F, 0xAD, 0x00, 0x60, 0xD8, 0x00, 0x61, 0x4E, 0x00, 0x61, 0x08, + 0x00, 0x61, 0x8E, 0x00, 0x61, 0x60, 0x00, 0x61, 0xF2, 0x00, 0x62, 0x34, + 0x00, 0x63, 0xC4, 0x00, 0x64, 0x1C, 0x00, 0x64, 0x52, 0x00, 0x65, 0x56, + 0x00, 0x66, 0x74, 0x00, 0x67, 0x17, 0x00, 0x67, 0x1B, 0x00, 0x67, 0x56, + 0x00, 0x6B, 0x79, 0x00, 0x6B, 0xBA, 0x00, 0x6D, 0x41, 0x00, 0x6E, 0xDB, + 0x00, 0x6E, 0xCB, 0x00, 0x6F, 0x22, 0x00, 0x70, 0x1E, 0x00, 0x71, 0x6E, + 0x00, 0x77, 0xA7, 0x00, 0x72, 0x35, 0x00, 0x72, 0xAF, 0x00, 0x73, 0x2A, + 0x00, 0x74, 0x71, 0x00, 0x75, 0x06, 0x00, 0x75, 0x3B, 0x00, 0x76, 0x1D, + 0x00, 0x76, 0x1F, 0x00, 0x76, 0xCA, 0x00, 0x76, 0xDB, 0x00, 0x76, 0xF4, + 0x00, 0x77, 0x4A, 0x00, 0x77, 0x40, 0x00, 0x78, 0xCC, 0x00, 0x7A, 0xB1, + 0x00, 0x7B, 0xC0, 0x00, 0x7C, 0x7B, 0x00, 0x7D, 0x5B, 0x00, 0x7D, 0xF4, + 0x00, 0x7F, 0x3E, 0x00, 0x80, 0x05, 0x00, 0x83, 0x52, 0x00, 0x83, 0xEF, + 0x00, 0x87, 0x79, 0x00, 0x89, 0x41, 0x00, 0x89, 0x86, 0x00, 0x89, 0x96, + 0x00, 0x8A, 0xBF, 0x00, 0x8A, 0xF8, 0x00, 0x8A, 0xCB, 0x00, 0x8B, 0x01, + 0x00, 0x8A, 0xFE, 0x00, 0x8A, 0xED, 0x00, 0x8B, 0x39, 0x00, 0x8B, 0x8A, + 0x00, 0x8D, 0x08, 0x00, 0x8F, 0x38, 0x00, 0x90, 0x72, 0x00, 0x91, 0x99, + 0x00, 0x92, 0x76, 0x00, 0x96, 0x7C, 0x00, 0x96, 0xE3, 0x00, 0x97, 0x56, + 0x00, 0x97, 0xDB, 0x00, 0x97, 0xFF, 0x00, 0x98, 0x0B, 0x00, 0x98, 0x3B, + 0x00, 0x9B, 0x12, 0x00, 0x9F, 0x9C, 0x02, 0x28, 0x4A, 0x02, 0x28, 0x44, + 0x02, 0x33, 0xD5, 0x00, 0x3B, 0x9D, 0x00, 0x40, 0x18, 0x00, 0x40, 0x39, + 0x02, 0x52, 0x49, 0x02, 0x5C, 0xD0, 0x02, 0x7E, 0xD3, 0x00, 0x9F, 0x43, + 0x00, 0x9F, 0x8E, 0xC0, 0x00, 0x66, 0x00, 0x00, 0x66, 0xC0, 0x00, 0x66, + 0x00, 0x00, 0x69, 0xC0, 0x00, 0x66, 0x00, 0x00, 0x6C, 0xC0, 0x00, 0x66, + 0x80, 0x00, 0x66, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x66, 0x80, 0x00, 0x66, + 0x00, 0x00, 0x6C, 0xC0, 0x01, 0x7F, 0x00, 0x00, 0x74, 0xC0, 0x00, 0x73, + 0x00, 0x00, 0x74, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x76, 0xC0, 0x05, 0x74, + 0x00, 0x05, 0x65, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x6B, 0xC0, 0x05, 0x7E, + 0x00, 0x05, 0x76, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x6D, 0x80, 0x05, 0xD9, + 0x00, 0x05, 0xB4, 0x80, 0x05, 0xF2, 0x00, 0x05, 0xB7, 0x04, 0x05, 0xE2, + 0x04, 0x05, 0xD0, 0x04, 0x05, 0xD3, 0x04, 0x05, 0xD4, 0x04, 0x05, 0xDB, + 0x04, 0x05, 0xDC, 0x04, 0x05, 0xDD, 0x04, 0x05, 0xE8, 0x04, 0x05, 0xEA, + 0x04, 0x00, 0x2B, 0x80, 0x05, 0xE9, 0x00, 0x05, 0xC1, 0x80, 0x05, 0xE9, + 0x00, 0x05, 0xC2, 0x80, 0xFB, 0x49, 0x00, 0x05, 0xC1, 0x80, 0xFB, 0x49, + 0x00, 0x05, 0xC2, 0x80, 0x05, 0xD0, 0x00, 0x05, 0xB7, 0x80, 0x05, 0xD0, + 0x00, 0x05, 0xB8, 0x80, 0x05, 0xD0, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD1, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD2, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD3, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD4, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD5, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD6, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD8, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD9, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDA, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDB, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDC, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDE, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE0, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE1, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE3, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE4, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE6, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE7, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE8, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE9, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xEA, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD5, 0x00, 0x05, 0xB9, 0x80, 0x05, 0xD1, + 0x00, 0x05, 0xBF, 0x80, 0x05, 0xDB, 0x00, 0x05, 0xBF, 0x80, 0x05, 0xE4, + 0x00, 0x05, 0xBF, 0xC0, 0x05, 0xD0, 0x00, 0x05, 0xDC, 0x18, 0x06, 0x71, + 0x14, 0x06, 0x71, 0x18, 0x06, 0x7B, 0x14, 0x06, 0x7B, 0x0C, 0x06, 0x7B, + 0x10, 0x06, 0x7B, 0x18, 0x06, 0x7E, 0x14, 0x06, 0x7E, 0x0C, 0x06, 0x7E, + 0x10, 0x06, 0x7E, 0x18, 0x06, 0x80, 0x14, 0x06, 0x80, 0x0C, 0x06, 0x80, + 0x10, 0x06, 0x80, 0x18, 0x06, 0x7A, 0x14, 0x06, 0x7A, 0x0C, 0x06, 0x7A, + 0x10, 0x06, 0x7A, 0x18, 0x06, 0x7F, 0x14, 0x06, 0x7F, 0x0C, 0x06, 0x7F, + 0x10, 0x06, 0x7F, 0x18, 0x06, 0x79, 0x14, 0x06, 0x79, 0x0C, 0x06, 0x79, + 0x10, 0x06, 0x79, 0x18, 0x06, 0xA4, 0x14, 0x06, 0xA4, 0x0C, 0x06, 0xA4, + 0x10, 0x06, 0xA4, 0x18, 0x06, 0xA6, 0x14, 0x06, 0xA6, 0x0C, 0x06, 0xA6, + 0x10, 0x06, 0xA6, 0x18, 0x06, 0x84, 0x14, 0x06, 0x84, 0x0C, 0x06, 0x84, + 0x10, 0x06, 0x84, 0x18, 0x06, 0x83, 0x14, 0x06, 0x83, 0x0C, 0x06, 0x83, + 0x10, 0x06, 0x83, 0x18, 0x06, 0x86, 0x14, 0x06, 0x86, 0x0C, 0x06, 0x86, + 0x10, 0x06, 0x86, 0x18, 0x06, 0x87, 0x14, 0x06, 0x87, 0x0C, 0x06, 0x87, + 0x10, 0x06, 0x87, 0x18, 0x06, 0x8D, 0x14, 0x06, 0x8D, 0x18, 0x06, 0x8C, + 0x14, 0x06, 0x8C, 0x18, 0x06, 0x8E, 0x14, 0x06, 0x8E, 0x18, 0x06, 0x88, + 0x14, 0x06, 0x88, 0x18, 0x06, 0x98, 0x14, 0x06, 0x98, 0x18, 0x06, 0x91, + 0x14, 0x06, 0x91, 0x18, 0x06, 0xA9, 0x14, 0x06, 0xA9, 0x0C, 0x06, 0xA9, + 0x10, 0x06, 0xA9, 0x18, 0x06, 0xAF, 0x14, 0x06, 0xAF, 0x0C, 0x06, 0xAF, + 0x10, 0x06, 0xAF, 0x18, 0x06, 0xB3, 0x14, 0x06, 0xB3, 0x0C, 0x06, 0xB3, + 0x10, 0x06, 0xB3, 0x18, 0x06, 0xB1, 0x14, 0x06, 0xB1, 0x0C, 0x06, 0xB1, + 0x10, 0x06, 0xB1, 0x18, 0x06, 0xBA, 0x14, 0x06, 0xBA, 0x18, 0x06, 0xBB, + 0x14, 0x06, 0xBB, 0x0C, 0x06, 0xBB, 0x10, 0x06, 0xBB, 0x18, 0x06, 0xC0, + 0x14, 0x06, 0xC0, 0x18, 0x06, 0xC1, 0x14, 0x06, 0xC1, 0x0C, 0x06, 0xC1, + 0x10, 0x06, 0xC1, 0x18, 0x06, 0xBE, 0x14, 0x06, 0xBE, 0x0C, 0x06, 0xBE, + 0x10, 0x06, 0xBE, 0x18, 0x06, 0xD2, 0x14, 0x06, 0xD2, 0x18, 0x06, 0xD3, + 0x14, 0x06, 0xD3, 0x18, 0x06, 0xAD, 0x14, 0x06, 0xAD, 0x0C, 0x06, 0xAD, + 0x10, 0x06, 0xAD, 0x18, 0x06, 0xC7, 0x14, 0x06, 0xC7, 0x18, 0x06, 0xC6, + 0x14, 0x06, 0xC6, 0x18, 0x06, 0xC8, 0x14, 0x06, 0xC8, 0x18, 0x06, 0x77, + 0x18, 0x06, 0xCB, 0x14, 0x06, 0xCB, 0x18, 0x06, 0xC5, 0x14, 0x06, 0xC5, + 0x18, 0x06, 0xC9, 0x14, 0x06, 0xC9, 0x18, 0x06, 0xD0, 0x14, 0x06, 0xD0, + 0x0C, 0x06, 0xD0, 0x10, 0x06, 0xD0, 0x0C, 0x06, 0x49, 0x10, 0x06, 0x49, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x27, 0x94, 0x06, 0x26, 0x00, 0x06, 0x27, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xD5, 0x94, 0x06, 0x26, 0x00, 0x06, 0xD5, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x48, 0x94, 0x06, 0x26, 0x00, 0x06, 0x48, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xC7, 0x94, 0x06, 0x26, 0x00, 0x06, 0xC7, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xC6, 0x94, 0x06, 0x26, 0x00, 0x06, 0xC6, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xC8, 0x94, 0x06, 0x26, 0x00, 0x06, 0xC8, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xD0, 0x94, 0x06, 0x26, 0x00, 0x06, 0xD0, + 0x8C, 0x06, 0x26, 0x00, 0x06, 0xD0, 0x98, 0x06, 0x26, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x26, 0x00, 0x06, 0x49, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x49, + 0x18, 0x06, 0xCC, 0x14, 0x06, 0xCC, 0x0C, 0x06, 0xCC, 0x10, 0x06, 0xCC, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x26, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x45, 0x98, 0x06, 0x26, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x28, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x28, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x28, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x28, 0x00, 0x06, 0x45, 0x98, 0x06, 0x28, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x28, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x2A, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x2B, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x2E, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x33, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x33, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x33, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x33, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x35, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x35, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x36, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x36, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x36, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x36, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x37, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x37, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x38, 0x00, 0x06, 0x45, 0x98, 0x06, 0x39, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x39, 0x00, 0x06, 0x45, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x3A, 0x00, 0x06, 0x45, 0x98, 0x06, 0x41, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x41, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x41, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x41, 0x00, 0x06, 0x45, 0x98, 0x06, 0x41, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x41, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x42, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x42, 0x00, 0x06, 0x45, 0x98, 0x06, 0x42, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x42, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x43, 0x00, 0x06, 0x27, + 0x98, 0x06, 0x43, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x43, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x43, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x43, 0x00, 0x06, 0x44, + 0x98, 0x06, 0x43, 0x00, 0x06, 0x45, 0x98, 0x06, 0x43, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x43, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x44, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x44, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x44, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x44, 0x00, 0x06, 0x45, 0x98, 0x06, 0x44, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x44, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x45, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x45, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x45, 0x00, 0x06, 0x45, 0x98, 0x06, 0x45, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x46, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x46, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x46, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x46, 0x00, 0x06, 0x45, 0x98, 0x06, 0x46, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x46, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x47, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x47, 0x00, 0x06, 0x45, 0x98, 0x06, 0x47, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x47, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x4A, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x30, 0x00, 0x06, 0x70, + 0x98, 0x06, 0x31, 0x00, 0x06, 0x70, 0x98, 0x06, 0x49, 0x00, 0x06, 0x70, + 0x98, 0x00, 0x20, 0x80, 0x06, 0x4C, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, + 0x80, 0x06, 0x4D, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4E, + 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4F, 0x00, 0x06, 0x51, + 0x98, 0x00, 0x20, 0x80, 0x06, 0x50, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, + 0x80, 0x06, 0x51, 0x00, 0x06, 0x70, 0x94, 0x06, 0x26, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x26, 0x00, 0x06, 0x32, 0x94, 0x06, 0x26, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x26, 0x00, 0x06, 0x46, 0x94, 0x06, 0x26, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x26, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x28, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x28, 0x00, 0x06, 0x32, 0x94, 0x06, 0x28, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x28, 0x00, 0x06, 0x46, 0x94, 0x06, 0x28, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x28, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x2A, 0x00, 0x06, 0x32, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x2A, 0x00, 0x06, 0x46, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x2A, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x2B, 0x00, 0x06, 0x32, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x2B, 0x00, 0x06, 0x46, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x2B, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x41, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x41, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x42, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x42, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x43, 0x00, 0x06, 0x27, + 0x94, 0x06, 0x43, 0x00, 0x06, 0x44, 0x94, 0x06, 0x43, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x43, 0x00, 0x06, 0x49, 0x94, 0x06, 0x43, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x44, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x44, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, 0x00, 0x06, 0x27, + 0x94, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x46, 0x00, 0x06, 0x32, 0x94, 0x06, 0x46, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x46, 0x00, 0x06, 0x46, 0x94, 0x06, 0x46, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x46, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x49, 0x00, 0x06, 0x70, + 0x94, 0x06, 0x4A, 0x00, 0x06, 0x31, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x32, + 0x94, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x46, + 0x94, 0x06, 0x4A, 0x00, 0x06, 0x49, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x4A, + 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x26, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x28, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x47, + 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x2B, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2C, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2D, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2E, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x35, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x35, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x35, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x36, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x37, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x38, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x39, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x3A, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x3A, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x41, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x42, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x42, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x43, 0x00, 0x06, 0x44, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x44, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x46, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x47, + 0x8C, 0x06, 0x47, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x47, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x47, 0x00, 0x06, 0x70, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x26, 0x00, 0x06, 0x45, 0x90, 0x06, 0x26, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x28, 0x00, 0x06, 0x45, 0x90, 0x06, 0x28, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x90, 0x06, 0x2A, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x90, 0x06, 0x2B, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x33, 0x00, 0x06, 0x45, 0x90, 0x06, 0x33, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x34, 0x00, 0x06, 0x45, 0x90, 0x06, 0x34, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x43, 0x00, 0x06, 0x44, 0x90, 0x06, 0x43, 0x00, 0x06, 0x45, + 0x90, 0x06, 0x44, 0x00, 0x06, 0x45, 0x90, 0x06, 0x46, 0x00, 0x06, 0x45, + 0x90, 0x06, 0x46, 0x00, 0x06, 0x47, 0x90, 0x06, 0x4A, 0x00, 0x06, 0x45, + 0x90, 0x06, 0x4A, 0x00, 0x06, 0x47, 0x90, 0x06, 0x40, 0x80, 0x06, 0x4E, + 0x00, 0x06, 0x51, 0x90, 0x06, 0x40, 0x80, 0x06, 0x4F, 0x00, 0x06, 0x51, + 0x90, 0x06, 0x40, 0x80, 0x06, 0x50, 0x00, 0x06, 0x51, 0x98, 0x06, 0x37, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x37, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x39, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x39, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x3A, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x33, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x33, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x34, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x34, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2D, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2C, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2E, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x35, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x35, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x36, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x36, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x34, + 0x00, 0x06, 0x2C, 0x98, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x34, + 0x00, 0x06, 0x2E, 0x98, 0x06, 0x34, 0x00, 0x06, 0x45, 0x98, 0x06, 0x34, + 0x00, 0x06, 0x31, 0x98, 0x06, 0x33, 0x00, 0x06, 0x31, 0x98, 0x06, 0x35, + 0x00, 0x06, 0x31, 0x98, 0x06, 0x36, 0x00, 0x06, 0x31, 0x94, 0x06, 0x37, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x37, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x39, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x39, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x3A, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x3A, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x33, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x34, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2D, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2C, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2E, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x35, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x35, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x36, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x36, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, + 0x00, 0x06, 0x2C, 0x94, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x34, + 0x00, 0x06, 0x2E, 0x94, 0x06, 0x34, 0x00, 0x06, 0x45, 0x94, 0x06, 0x34, + 0x00, 0x06, 0x31, 0x94, 0x06, 0x33, 0x00, 0x06, 0x31, 0x94, 0x06, 0x35, + 0x00, 0x06, 0x31, 0x94, 0x06, 0x36, 0x00, 0x06, 0x31, 0x8C, 0x06, 0x34, + 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x34, + 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x33, + 0x00, 0x06, 0x47, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x37, + 0x00, 0x06, 0x45, 0x90, 0x06, 0x33, 0x00, 0x06, 0x2C, 0x90, 0x06, 0x33, + 0x00, 0x06, 0x2D, 0x90, 0x06, 0x33, 0x00, 0x06, 0x2E, 0x90, 0x06, 0x34, + 0x00, 0x06, 0x2C, 0x90, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x90, 0x06, 0x34, + 0x00, 0x06, 0x2E, 0x90, 0x06, 0x37, 0x00, 0x06, 0x45, 0x90, 0x06, 0x38, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x27, 0x00, 0x06, 0x4B, 0x98, 0x06, 0x27, + 0x00, 0x06, 0x4B, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, + 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2E, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x2D, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2D, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x49, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x33, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x33, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x94, 0x06, 0x33, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x35, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x35, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x35, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x34, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x45, 0x8C, 0x06, 0x34, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x34, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x34, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2E, 0x94, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x36, + 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x94, 0x06, 0x36, 0x80, 0x06, 0x2E, + 0x00, 0x06, 0x45, 0x8C, 0x06, 0x36, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x37, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x37, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x39, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x3A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x41, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x41, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x94, 0x06, 0x42, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x42, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, + 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2C, + 0x00, 0x06, 0x2C, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2C, + 0x94, 0x06, 0x44, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x44, + 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x45, + 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x45, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x45, + 0x80, 0x06, 0x2E, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2E, + 0x00, 0x06, 0x45, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x47, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x47, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x46, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x46, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x4A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x4A, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x28, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2E, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, + 0x80, 0x06, 0x2E, 0x00, 0x06, 0x49, 0x94, 0x06, 0x35, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x36, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x4A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x42, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x46, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x42, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x43, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x46, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x45, 0x80, 0x06, 0x2E, + 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x43, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, + 0x00, 0x06, 0x2D, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x2D, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x41, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x28, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, + 0x8C, 0x06, 0x43, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x35, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x33, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x35, + 0x80, 0x06, 0x44, 0x00, 0x06, 0xD2, 0x98, 0x06, 0x42, 0x80, 0x06, 0x44, + 0x00, 0x06, 0xD2, 0x98, 0x06, 0x27, 0x80, 0x06, 0x44, 0x80, 0x06, 0x44, + 0x00, 0x06, 0x47, 0x98, 0x06, 0x27, 0x80, 0x06, 0x43, 0x80, 0x06, 0x28, + 0x00, 0x06, 0x31, 0x98, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2F, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x80, 0x06, 0x39, + 0x00, 0x06, 0x45, 0x98, 0x06, 0x31, 0x80, 0x06, 0x33, 0x80, 0x06, 0x48, + 0x00, 0x06, 0x44, 0x98, 0x06, 0x39, 0x80, 0x06, 0x44, 0x80, 0x06, 0x4A, + 0x00, 0x06, 0x47, 0x98, 0x06, 0x48, 0x80, 0x06, 0x33, 0x80, 0x06, 0x44, + 0x00, 0x06, 0x45, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x80, 0x06, 0x49, 0x80, 0x00, 0x20, + 0x80, 0x06, 0x27, 0x80, 0x06, 0x44, 0x80, 0x06, 0x44, 0x80, 0x06, 0x47, + 0x80, 0x00, 0x20, 0x80, 0x06, 0x39, 0x80, 0x06, 0x44, 0x80, 0x06, 0x4A, + 0x80, 0x06, 0x47, 0x80, 0x00, 0x20, 0x80, 0x06, 0x48, 0x80, 0x06, 0x33, + 0x80, 0x06, 0x44, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2C, 0x80, 0x06, 0x44, + 0x80, 0x00, 0x20, 0x80, 0x06, 0x2C, 0x80, 0x06, 0x44, 0x80, 0x06, 0x27, + 0x80, 0x06, 0x44, 0x00, 0x06, 0x47, 0x98, 0x06, 0x31, 0x80, 0x06, 0xCC, + 0x80, 0x06, 0x27, 0x00, 0x06, 0x44, 0x28, 0x00, 0x2C, 0x28, 0x30, 0x01, + 0x28, 0x30, 0x02, 0x28, 0x00, 0x3A, 0x28, 0x00, 0x3B, 0x28, 0x00, 0x21, + 0x28, 0x00, 0x3F, 0x28, 0x30, 0x16, 0x28, 0x30, 0x17, 0x28, 0x20, 0x26, + 0x28, 0x20, 0x25, 0x28, 0x20, 0x14, 0x28, 0x20, 0x13, 0x28, 0x00, 0x5F, + 0x28, 0x00, 0x5F, 0x28, 0x00, 0x28, 0x28, 0x00, 0x29, 0x28, 0x00, 0x7B, + 0x28, 0x00, 0x7D, 0x28, 0x30, 0x14, 0x28, 0x30, 0x15, 0x28, 0x30, 0x10, + 0x28, 0x30, 0x11, 0x28, 0x30, 0x0A, 0x28, 0x30, 0x0B, 0x28, 0x30, 0x08, + 0x28, 0x30, 0x09, 0x28, 0x30, 0x0C, 0x28, 0x30, 0x0D, 0x28, 0x30, 0x0E, + 0x28, 0x30, 0x0F, 0x28, 0x00, 0x5B, 0x28, 0x00, 0x5D, 0x40, 0x20, 0x3E, + 0x40, 0x20, 0x3E, 0x40, 0x20, 0x3E, 0x40, 0x20, 0x3E, 0x40, 0x00, 0x5F, + 0x40, 0x00, 0x5F, 0x40, 0x00, 0x5F, 0x34, 0x00, 0x2C, 0x34, 0x30, 0x01, + 0x34, 0x00, 0x2E, 0x34, 0x00, 0x3B, 0x34, 0x00, 0x3A, 0x34, 0x00, 0x3F, + 0x34, 0x00, 0x21, 0x34, 0x20, 0x14, 0x34, 0x00, 0x28, 0x34, 0x00, 0x29, + 0x34, 0x00, 0x7B, 0x34, 0x00, 0x7D, 0x34, 0x30, 0x14, 0x34, 0x30, 0x15, + 0x34, 0x00, 0x23, 0x34, 0x00, 0x26, 0x34, 0x00, 0x2A, 0x34, 0x00, 0x2B, + 0x34, 0x00, 0x2D, 0x34, 0x00, 0x3C, 0x34, 0x00, 0x3E, 0x34, 0x00, 0x3D, + 0x34, 0x00, 0x5C, 0x34, 0x00, 0x24, 0x34, 0x00, 0x25, 0x34, 0x00, 0x40, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x4B, 0x90, 0x06, 0x40, 0x00, 0x06, 0x4B, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x4C, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4D, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x4E, 0x90, 0x06, 0x40, 0x00, 0x06, 0x4E, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x4F, 0x90, 0x06, 0x40, 0x00, 0x06, 0x4F, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x50, 0x90, 0x06, 0x40, 0x00, 0x06, 0x50, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x51, 0x90, 0x06, 0x40, 0x00, 0x06, 0x51, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x52, 0x90, 0x06, 0x40, 0x00, 0x06, 0x52, + 0x18, 0x06, 0x21, 0x18, 0x06, 0x22, 0x14, 0x06, 0x22, 0x18, 0x06, 0x23, + 0x14, 0x06, 0x23, 0x18, 0x06, 0x24, 0x14, 0x06, 0x24, 0x18, 0x06, 0x25, + 0x14, 0x06, 0x25, 0x18, 0x06, 0x26, 0x14, 0x06, 0x26, 0x0C, 0x06, 0x26, + 0x10, 0x06, 0x26, 0x18, 0x06, 0x27, 0x14, 0x06, 0x27, 0x18, 0x06, 0x28, + 0x14, 0x06, 0x28, 0x0C, 0x06, 0x28, 0x10, 0x06, 0x28, 0x18, 0x06, 0x29, + 0x14, 0x06, 0x29, 0x18, 0x06, 0x2A, 0x14, 0x06, 0x2A, 0x0C, 0x06, 0x2A, + 0x10, 0x06, 0x2A, 0x18, 0x06, 0x2B, 0x14, 0x06, 0x2B, 0x0C, 0x06, 0x2B, + 0x10, 0x06, 0x2B, 0x18, 0x06, 0x2C, 0x14, 0x06, 0x2C, 0x0C, 0x06, 0x2C, + 0x10, 0x06, 0x2C, 0x18, 0x06, 0x2D, 0x14, 0x06, 0x2D, 0x0C, 0x06, 0x2D, + 0x10, 0x06, 0x2D, 0x18, 0x06, 0x2E, 0x14, 0x06, 0x2E, 0x0C, 0x06, 0x2E, + 0x10, 0x06, 0x2E, 0x18, 0x06, 0x2F, 0x14, 0x06, 0x2F, 0x18, 0x06, 0x30, + 0x14, 0x06, 0x30, 0x18, 0x06, 0x31, 0x14, 0x06, 0x31, 0x18, 0x06, 0x32, + 0x14, 0x06, 0x32, 0x18, 0x06, 0x33, 0x14, 0x06, 0x33, 0x0C, 0x06, 0x33, + 0x10, 0x06, 0x33, 0x18, 0x06, 0x34, 0x14, 0x06, 0x34, 0x0C, 0x06, 0x34, + 0x10, 0x06, 0x34, 0x18, 0x06, 0x35, 0x14, 0x06, 0x35, 0x0C, 0x06, 0x35, + 0x10, 0x06, 0x35, 0x18, 0x06, 0x36, 0x14, 0x06, 0x36, 0x0C, 0x06, 0x36, + 0x10, 0x06, 0x36, 0x18, 0x06, 0x37, 0x14, 0x06, 0x37, 0x0C, 0x06, 0x37, + 0x10, 0x06, 0x37, 0x18, 0x06, 0x38, 0x14, 0x06, 0x38, 0x0C, 0x06, 0x38, + 0x10, 0x06, 0x38, 0x18, 0x06, 0x39, 0x14, 0x06, 0x39, 0x0C, 0x06, 0x39, + 0x10, 0x06, 0x39, 0x18, 0x06, 0x3A, 0x14, 0x06, 0x3A, 0x0C, 0x06, 0x3A, + 0x10, 0x06, 0x3A, 0x18, 0x06, 0x41, 0x14, 0x06, 0x41, 0x0C, 0x06, 0x41, + 0x10, 0x06, 0x41, 0x18, 0x06, 0x42, 0x14, 0x06, 0x42, 0x0C, 0x06, 0x42, + 0x10, 0x06, 0x42, 0x18, 0x06, 0x43, 0x14, 0x06, 0x43, 0x0C, 0x06, 0x43, + 0x10, 0x06, 0x43, 0x18, 0x06, 0x44, 0x14, 0x06, 0x44, 0x0C, 0x06, 0x44, + 0x10, 0x06, 0x44, 0x18, 0x06, 0x45, 0x14, 0x06, 0x45, 0x0C, 0x06, 0x45, + 0x10, 0x06, 0x45, 0x18, 0x06, 0x46, 0x14, 0x06, 0x46, 0x0C, 0x06, 0x46, + 0x10, 0x06, 0x46, 0x18, 0x06, 0x47, 0x14, 0x06, 0x47, 0x0C, 0x06, 0x47, + 0x10, 0x06, 0x47, 0x18, 0x06, 0x48, 0x14, 0x06, 0x48, 0x18, 0x06, 0x49, + 0x14, 0x06, 0x49, 0x18, 0x06, 0x4A, 0x14, 0x06, 0x4A, 0x0C, 0x06, 0x4A, + 0x10, 0x06, 0x4A, 0x98, 0x06, 0x44, 0x00, 0x06, 0x22, 0x94, 0x06, 0x44, + 0x00, 0x06, 0x22, 0x98, 0x06, 0x44, 0x00, 0x06, 0x23, 0x94, 0x06, 0x44, + 0x00, 0x06, 0x23, 0x98, 0x06, 0x44, 0x00, 0x06, 0x25, 0x94, 0x06, 0x44, + 0x00, 0x06, 0x25, 0x98, 0x06, 0x44, 0x00, 0x06, 0x27, 0x94, 0x06, 0x44, + 0x00, 0x06, 0x27, 0x2C, 0x00, 0x21, 0x2C, 0x00, 0x22, 0x2C, 0x00, 0x23, + 0x2C, 0x00, 0x24, 0x2C, 0x00, 0x25, 0x2C, 0x00, 0x26, 0x2C, 0x00, 0x27, + 0x2C, 0x00, 0x28, 0x2C, 0x00, 0x29, 0x2C, 0x00, 0x2A, 0x2C, 0x00, 0x2B, + 0x2C, 0x00, 0x2C, 0x2C, 0x00, 0x2D, 0x2C, 0x00, 0x2E, 0x2C, 0x00, 0x2F, + 0x2C, 0x00, 0x30, 0x2C, 0x00, 0x31, 0x2C, 0x00, 0x32, 0x2C, 0x00, 0x33, + 0x2C, 0x00, 0x34, 0x2C, 0x00, 0x35, 0x2C, 0x00, 0x36, 0x2C, 0x00, 0x37, + 0x2C, 0x00, 0x38, 0x2C, 0x00, 0x39, 0x2C, 0x00, 0x3A, 0x2C, 0x00, 0x3B, + 0x2C, 0x00, 0x3C, 0x2C, 0x00, 0x3D, 0x2C, 0x00, 0x3E, 0x2C, 0x00, 0x3F, + 0x2C, 0x00, 0x40, 0x2C, 0x00, 0x41, 0x2C, 0x00, 0x42, 0x2C, 0x00, 0x43, + 0x2C, 0x00, 0x44, 0x2C, 0x00, 0x45, 0x2C, 0x00, 0x46, 0x2C, 0x00, 0x47, + 0x2C, 0x00, 0x48, 0x2C, 0x00, 0x49, 0x2C, 0x00, 0x4A, 0x2C, 0x00, 0x4B, + 0x2C, 0x00, 0x4C, 0x2C, 0x00, 0x4D, 0x2C, 0x00, 0x4E, 0x2C, 0x00, 0x4F, + 0x2C, 0x00, 0x50, 0x2C, 0x00, 0x51, 0x2C, 0x00, 0x52, 0x2C, 0x00, 0x53, + 0x2C, 0x00, 0x54, 0x2C, 0x00, 0x55, 0x2C, 0x00, 0x56, 0x2C, 0x00, 0x57, + 0x2C, 0x00, 0x58, 0x2C, 0x00, 0x59, 0x2C, 0x00, 0x5A, 0x2C, 0x00, 0x5B, + 0x2C, 0x00, 0x5C, 0x2C, 0x00, 0x5D, 0x2C, 0x00, 0x5E, 0x2C, 0x00, 0x5F, + 0x2C, 0x00, 0x60, 0x2C, 0x00, 0x61, 0x2C, 0x00, 0x62, 0x2C, 0x00, 0x63, + 0x2C, 0x00, 0x64, 0x2C, 0x00, 0x65, 0x2C, 0x00, 0x66, 0x2C, 0x00, 0x67, + 0x2C, 0x00, 0x68, 0x2C, 0x00, 0x69, 0x2C, 0x00, 0x6A, 0x2C, 0x00, 0x6B, + 0x2C, 0x00, 0x6C, 0x2C, 0x00, 0x6D, 0x2C, 0x00, 0x6E, 0x2C, 0x00, 0x6F, + 0x2C, 0x00, 0x70, 0x2C, 0x00, 0x71, 0x2C, 0x00, 0x72, 0x2C, 0x00, 0x73, + 0x2C, 0x00, 0x74, 0x2C, 0x00, 0x75, 0x2C, 0x00, 0x76, 0x2C, 0x00, 0x77, + 0x2C, 0x00, 0x78, 0x2C, 0x00, 0x79, 0x2C, 0x00, 0x7A, 0x2C, 0x00, 0x7B, + 0x2C, 0x00, 0x7C, 0x2C, 0x00, 0x7D, 0x2C, 0x00, 0x7E, 0x2C, 0x29, 0x85, + 0x2C, 0x29, 0x86, 0x30, 0x30, 0x02, 0x30, 0x30, 0x0C, 0x30, 0x30, 0x0D, + 0x30, 0x30, 0x01, 0x30, 0x30, 0xFB, 0x30, 0x30, 0xF2, 0x30, 0x30, 0xA1, + 0x30, 0x30, 0xA3, 0x30, 0x30, 0xA5, 0x30, 0x30, 0xA7, 0x30, 0x30, 0xA9, + 0x30, 0x30, 0xE3, 0x30, 0x30, 0xE5, 0x30, 0x30, 0xE7, 0x30, 0x30, 0xC3, + 0x30, 0x30, 0xFC, 0x30, 0x30, 0xA2, 0x30, 0x30, 0xA4, 0x30, 0x30, 0xA6, + 0x30, 0x30, 0xA8, 0x30, 0x30, 0xAA, 0x30, 0x30, 0xAB, 0x30, 0x30, 0xAD, + 0x30, 0x30, 0xAF, 0x30, 0x30, 0xB1, 0x30, 0x30, 0xB3, 0x30, 0x30, 0xB5, + 0x30, 0x30, 0xB7, 0x30, 0x30, 0xB9, 0x30, 0x30, 0xBB, 0x30, 0x30, 0xBD, + 0x30, 0x30, 0xBF, 0x30, 0x30, 0xC1, 0x30, 0x30, 0xC4, 0x30, 0x30, 0xC6, + 0x30, 0x30, 0xC8, 0x30, 0x30, 0xCA, 0x30, 0x30, 0xCB, 0x30, 0x30, 0xCC, + 0x30, 0x30, 0xCD, 0x30, 0x30, 0xCE, 0x30, 0x30, 0xCF, 0x30, 0x30, 0xD2, + 0x30, 0x30, 0xD5, 0x30, 0x30, 0xD8, 0x30, 0x30, 0xDB, 0x30, 0x30, 0xDE, + 0x30, 0x30, 0xDF, 0x30, 0x30, 0xE0, 0x30, 0x30, 0xE1, 0x30, 0x30, 0xE2, + 0x30, 0x30, 0xE4, 0x30, 0x30, 0xE6, 0x30, 0x30, 0xE8, 0x30, 0x30, 0xE9, + 0x30, 0x30, 0xEA, 0x30, 0x30, 0xEB, 0x30, 0x30, 0xEC, 0x30, 0x30, 0xED, + 0x30, 0x30, 0xEF, 0x30, 0x30, 0xF3, 0x30, 0x30, 0x99, 0x30, 0x30, 0x9A, + 0x30, 0x31, 0x64, 0x30, 0x31, 0x31, 0x30, 0x31, 0x32, 0x30, 0x31, 0x33, + 0x30, 0x31, 0x34, 0x30, 0x31, 0x35, 0x30, 0x31, 0x36, 0x30, 0x31, 0x37, + 0x30, 0x31, 0x38, 0x30, 0x31, 0x39, 0x30, 0x31, 0x3A, 0x30, 0x31, 0x3B, + 0x30, 0x31, 0x3C, 0x30, 0x31, 0x3D, 0x30, 0x31, 0x3E, 0x30, 0x31, 0x3F, + 0x30, 0x31, 0x40, 0x30, 0x31, 0x41, 0x30, 0x31, 0x42, 0x30, 0x31, 0x43, + 0x30, 0x31, 0x44, 0x30, 0x31, 0x45, 0x30, 0x31, 0x46, 0x30, 0x31, 0x47, + 0x30, 0x31, 0x48, 0x30, 0x31, 0x49, 0x30, 0x31, 0x4A, 0x30, 0x31, 0x4B, + 0x30, 0x31, 0x4C, 0x30, 0x31, 0x4D, 0x30, 0x31, 0x4E, 0x30, 0x31, 0x4F, + 0x30, 0x31, 0x50, 0x30, 0x31, 0x51, 0x30, 0x31, 0x52, 0x30, 0x31, 0x53, + 0x30, 0x31, 0x54, 0x30, 0x31, 0x55, 0x30, 0x31, 0x56, 0x30, 0x31, 0x57, + 0x30, 0x31, 0x58, 0x30, 0x31, 0x59, 0x30, 0x31, 0x5A, 0x30, 0x31, 0x5B, + 0x30, 0x31, 0x5C, 0x30, 0x31, 0x5D, 0x30, 0x31, 0x5E, 0x30, 0x31, 0x5F, + 0x30, 0x31, 0x60, 0x30, 0x31, 0x61, 0x30, 0x31, 0x62, 0x30, 0x31, 0x63, + 0x2C, 0x00, 0xA2, 0x2C, 0x00, 0xA3, 0x2C, 0x00, 0xAC, 0x2C, 0x00, 0xAF, + 0x2C, 0x00, 0xA6, 0x2C, 0x00, 0xA5, 0x2C, 0x20, 0xA9, 0x30, 0x25, 0x02, + 0x30, 0x21, 0x90, 0x30, 0x21, 0x91, 0x30, 0x21, 0x92, 0x30, 0x21, 0x93, + 0x30, 0x25, 0xA0, 0x30, 0x25, 0xCB, 0x81, 0x05, 0xD2, 0x00, 0x03, 0x07, + 0x81, 0x05, 0xDA, 0x00, 0x03, 0x07, 0x20, 0x02, 0xD0, 0x20, 0x02, 0xD1, + 0x20, 0x00, 0xE6, 0x20, 0x02, 0x99, 0x20, 0x02, 0x53, 0x20, 0x02, 0xA3, + 0x20, 0xAB, 0x66, 0x20, 0x02, 0xA5, 0x20, 0x02, 0xA4, 0x20, 0x02, 0x56, + 0x20, 0x02, 0x57, 0x20, 0x1D, 0x91, 0x20, 0x02, 0x58, 0x20, 0x02, 0x5E, + 0x20, 0x02, 0xA9, 0x20, 0x02, 0x64, 0x20, 0x02, 0x62, 0x20, 0x02, 0x60, + 0x20, 0x02, 0x9B, 0x20, 0x01, 0x27, 0x20, 0x02, 0x9C, 0x20, 0x02, 0x67, + 0x20, 0x02, 0x84, 0x20, 0x02, 0xAA, 0x20, 0x02, 0xAB, 0x20, 0x02, 0x6C, + 0x21, 0xDF, 0x04, 0x20, 0xA7, 0x8E, 0x20, 0x02, 0x6E, 0x21, 0xDF, 0x05, + 0x20, 0x02, 0x8E, 0x21, 0xDF, 0x06, 0x20, 0x00, 0xF8, 0x20, 0x02, 0x76, + 0x20, 0x02, 0x77, 0x20, 0x00, 0x71, 0x20, 0x02, 0x7A, 0x21, 0xDF, 0x08, + 0x20, 0x02, 0x7D, 0x20, 0x02, 0x7E, 0x20, 0x02, 0x80, 0x20, 0x02, 0xA8, + 0x20, 0x02, 0xA6, 0x20, 0xAB, 0x67, 0x20, 0x02, 0xA7, 0x20, 0x02, 0x88, + 0x20, 0x2C, 0x71, 0x20, 0x02, 0x8F, 0x20, 0x02, 0xA1, 0x20, 0x02, 0xA2, + 0x20, 0x02, 0x98, 0x20, 0x01, 0xC0, 0x20, 0x01, 0xC1, 0x20, 0x01, 0xC2, + 0x21, 0xDF, 0x0A, 0x21, 0xDF, 0x1E, 0x81, 0x10, 0x99, 0x01, 0x10, 0xBA, + 0x81, 0x10, 0x9B, 0x01, 0x10, 0xBA, 0x81, 0x10, 0xA5, 0x01, 0x10, 0xBA, + 0x81, 0x11, 0x31, 0x01, 0x11, 0x27, 0x81, 0x11, 0x32, 0x01, 0x11, 0x27, + 0x81, 0x13, 0x47, 0x01, 0x13, 0x3E, 0x81, 0x13, 0x47, 0x01, 0x13, 0x57, + 0x81, 0x13, 0x82, 0x01, 0x13, 0xC9, 0x81, 0x13, 0x84, 0x01, 0x13, 0xBB, + 0x81, 0x13, 0x8B, 0x01, 0x13, 0xC2, 0x81, 0x13, 0x90, 0x01, 0x13, 0xC9, + 0x81, 0x13, 0xC2, 0x01, 0x13, 0xC2, 0x81, 0x13, 0xC2, 0x01, 0x13, 0xB8, + 0x81, 0x13, 0xC2, 0x01, 0x13, 0xC9, 0x81, 0x14, 0xB9, 0x01, 0x14, 0xBA, + 0x81, 0x14, 0xB9, 0x01, 0x14, 0xB0, 0x81, 0x14, 0xB9, 0x01, 0x14, 0xBD, + 0x81, 0x15, 0xB8, 0x01, 0x15, 0xAF, 0x81, 0x15, 0xB9, 0x01, 0x15, 0xAF, + 0x81, 0x19, 0x35, 0x01, 0x19, 0x30, 0x81, 0x61, 0x1E, 0x01, 0x61, 0x1E, + 0x81, 0x61, 0x1E, 0x01, 0x61, 0x29, 0x81, 0x61, 0x1E, 0x01, 0x61, 0x1F, + 0x81, 0x61, 0x29, 0x01, 0x61, 0x1F, 0x81, 0x61, 0x1E, 0x01, 0x61, 0x20, + 0x81, 0x61, 0x21, 0x01, 0x61, 0x1F, 0x81, 0x61, 0x22, 0x01, 0x61, 0x1F, + 0x81, 0x61, 0x21, 0x01, 0x61, 0x20, 0x81, 0x6D, 0x67, 0x01, 0x6D, 0x67, + 0x81, 0x6D, 0x63, 0x01, 0x6D, 0x67, 0x81, 0x6D, 0x69, 0x01, 0x6D, 0x67, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, + 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, + 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, + 0x81, 0xD1, 0x57, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0x58, 0x01, 0xD1, 0x65, + 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x6E, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x6F, + 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x70, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x71, + 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x72, 0x81, 0xD1, 0xB9, 0x01, 0xD1, 0x65, + 0x81, 0xD1, 0xBA, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0xBB, 0x01, 0xD1, 0x6E, + 0x81, 0xD1, 0xBC, 0x01, 0xD1, 0x6E, 0x81, 0xD1, 0xBB, 0x01, 0xD1, 0x6F, + 0x81, 0xD1, 0xBC, 0x01, 0xD1, 0x6F, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, + 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, + 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x69, + 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, + 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, + 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, + 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, + 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, + 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, + 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, + 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, + 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, + 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, + 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, + 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, + 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, + 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, + 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, + 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, + 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, + 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x53, + 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, + 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, + 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, + 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, + 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, + 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, + 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, + 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x61, + 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, + 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, + 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, + 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, + 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, + 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, + 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x49, + 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, + 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, + 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, + 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, + 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, + 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, + 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, + 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, + 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, + 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, + 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, + 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, + 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, + 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, + 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, + 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, + 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, + 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, + 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, + 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, + 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, + 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x01, 0x31, 0x04, 0x02, 0x37, + 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, + 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, + 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, + 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, + 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, + 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, + 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, + 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, + 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, + 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, + 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, + 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, + 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, + 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, + 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, + 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, + 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, + 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, + 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, + 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, + 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, + 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, + 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, + 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, + 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, + 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, + 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, + 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, + 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, + 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, + 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, + 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, + 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, + 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, + 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, + 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, + 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, + 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, + 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, + 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, + 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, + 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, + 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, + 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, + 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, + 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, + 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, + 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, + 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, + 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, + 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, + 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, + 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, + 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, + 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, + 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, + 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, + 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, + 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, + 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, + 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, + 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, + 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, + 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, + 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, + 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, + 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, + 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, + 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, + 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, + 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, + 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, + 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0xDC, 0x04, 0x03, 0xDD, + 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, + 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, + 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, + 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, + 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, + 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, + 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, + 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, + 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, + 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, + 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, + 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, + 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x20, 0x04, 0x30, 0x20, 0x04, 0x31, + 0x20, 0x04, 0x32, 0x20, 0x04, 0x33, 0x20, 0x04, 0x34, 0x20, 0x04, 0x35, + 0x20, 0x04, 0x36, 0x20, 0x04, 0x37, 0x20, 0x04, 0x38, 0x20, 0x04, 0x3A, + 0x20, 0x04, 0x3B, 0x20, 0x04, 0x3C, 0x20, 0x04, 0x3E, 0x20, 0x04, 0x3F, + 0x20, 0x04, 0x40, 0x20, 0x04, 0x41, 0x20, 0x04, 0x42, 0x20, 0x04, 0x43, + 0x20, 0x04, 0x44, 0x20, 0x04, 0x45, 0x20, 0x04, 0x46, 0x20, 0x04, 0x47, + 0x20, 0x04, 0x48, 0x20, 0x04, 0x4B, 0x20, 0x04, 0x4D, 0x20, 0x04, 0x4E, + 0x20, 0xA6, 0x89, 0x20, 0x04, 0xD9, 0x20, 0x04, 0x56, 0x20, 0x04, 0x58, + 0x20, 0x04, 0xE9, 0x20, 0x04, 0xAF, 0x20, 0x04, 0xCF, 0x24, 0x04, 0x30, + 0x24, 0x04, 0x31, 0x24, 0x04, 0x32, 0x24, 0x04, 0x33, 0x24, 0x04, 0x34, + 0x24, 0x04, 0x35, 0x24, 0x04, 0x36, 0x24, 0x04, 0x37, 0x24, 0x04, 0x38, + 0x24, 0x04, 0x3A, 0x24, 0x04, 0x3B, 0x24, 0x04, 0x3E, 0x24, 0x04, 0x3F, + 0x24, 0x04, 0x41, 0x24, 0x04, 0x43, 0x24, 0x04, 0x44, 0x24, 0x04, 0x45, + 0x24, 0x04, 0x46, 0x24, 0x04, 0x47, 0x24, 0x04, 0x48, 0x24, 0x04, 0x4A, + 0x24, 0x04, 0x4B, 0x24, 0x04, 0x91, 0x24, 0x04, 0x56, 0x24, 0x04, 0x55, + 0x24, 0x04, 0x5F, 0x20, 0x04, 0xAB, 0x20, 0xA6, 0x51, 0x20, 0x04, 0xB1, + 0x04, 0x06, 0x27, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x2F, + 0x04, 0x06, 0x48, 0x04, 0x06, 0x32, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, + 0x04, 0x06, 0x4A, 0x04, 0x06, 0x43, 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, + 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, + 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x31, 0x04, 0x06, 0x34, + 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x30, + 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, 0x04, 0x06, 0x3A, 0x04, 0x06, 0x6E, + 0x04, 0x06, 0xBA, 0x04, 0x06, 0xA1, 0x04, 0x06, 0x6F, 0x04, 0x06, 0x28, + 0x04, 0x06, 0x2C, 0x04, 0x06, 0x47, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x4A, + 0x04, 0x06, 0x43, 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, + 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, + 0x04, 0x06, 0x42, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, + 0x04, 0x06, 0x2E, 0x04, 0x06, 0x36, 0x04, 0x06, 0x3A, 0x04, 0x06, 0x2C, + 0x04, 0x06, 0x2D, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x44, 0x04, 0x06, 0x46, + 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, + 0x04, 0x06, 0x34, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x36, 0x04, 0x06, 0x3A, + 0x04, 0x06, 0xBA, 0x04, 0x06, 0x6F, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, + 0x04, 0x06, 0x47, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, + 0x04, 0x06, 0x43, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, + 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, + 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, + 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, 0x04, 0x06, 0x3A, 0x04, 0x06, 0x6E, + 0x04, 0x06, 0xA1, 0x04, 0x06, 0x27, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, + 0x04, 0x06, 0x2F, 0x04, 0x06, 0x47, 0x04, 0x06, 0x48, 0x04, 0x06, 0x32, + 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x44, + 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, + 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x31, + 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, + 0x04, 0x06, 0x30, 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, 0x04, 0x06, 0x3A, + 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x2F, 0x04, 0x06, 0x48, + 0x04, 0x06, 0x32, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, + 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, + 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, + 0x04, 0x06, 0x31, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, + 0x04, 0x06, 0x2E, 0x04, 0x06, 0x30, 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, + 0x04, 0x06, 0x3A, 0xC0, 0x00, 0x30, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x30, + 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x31, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x32, + 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x33, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x34, + 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x35, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x36, + 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x37, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x38, + 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x39, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x41, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x42, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x43, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x44, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x45, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x46, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x47, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x48, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x49, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4A, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4B, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x4D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4E, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4F, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x50, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x51, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x52, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x53, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x54, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x55, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x56, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x57, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x58, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x59, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x5A, + 0x00, 0x00, 0x29, 0xC0, 0x30, 0x14, 0x80, 0x00, 0x53, 0x00, 0x30, 0x15, + 0x1C, 0x00, 0x43, 0x1C, 0x00, 0x52, 0x9C, 0x00, 0x43, 0x00, 0x00, 0x44, + 0x9C, 0x00, 0x57, 0x00, 0x00, 0x5A, 0x38, 0x00, 0x41, 0x38, 0x00, 0x42, + 0x38, 0x00, 0x43, 0x38, 0x00, 0x44, 0x38, 0x00, 0x45, 0x38, 0x00, 0x46, + 0x38, 0x00, 0x47, 0x38, 0x00, 0x48, 0x38, 0x00, 0x49, 0x38, 0x00, 0x4A, + 0x38, 0x00, 0x4B, 0x38, 0x00, 0x4C, 0x38, 0x00, 0x4D, 0x38, 0x00, 0x4E, + 0x38, 0x00, 0x4F, 0x38, 0x00, 0x50, 0x38, 0x00, 0x51, 0x38, 0x00, 0x52, + 0x38, 0x00, 0x53, 0x38, 0x00, 0x54, 0x38, 0x00, 0x55, 0x38, 0x00, 0x56, + 0x38, 0x00, 0x57, 0x38, 0x00, 0x58, 0x38, 0x00, 0x59, 0x38, 0x00, 0x5A, + 0xB8, 0x00, 0x48, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x56, + 0xB8, 0x00, 0x53, 0x00, 0x00, 0x44, 0xB8, 0x00, 0x53, 0x00, 0x00, 0x53, + 0xB8, 0x00, 0x50, 0x80, 0x00, 0x50, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x57, + 0x00, 0x00, 0x43, 0xA0, 0x00, 0x4D, 0x00, 0x00, 0x43, 0xA0, 0x00, 0x4D, + 0x00, 0x00, 0x44, 0xA0, 0x00, 0x4D, 0x00, 0x00, 0x52, 0xB8, 0x00, 0x44, + 0x00, 0x00, 0x4A, 0xB8, 0x30, 0x7B, 0x00, 0x30, 0x4B, 0xB8, 0x30, 0xB3, + 0x00, 0x30, 0xB3, 0x38, 0x30, 0xB5, 0x38, 0x62, 0x4B, 0x38, 0x5B, 0x57, + 0x38, 0x53, 0xCC, 0x38, 0x30, 0xC7, 0x38, 0x4E, 0x8C, 0x38, 0x59, 0x1A, + 0x38, 0x89, 0xE3, 0x38, 0x59, 0x29, 0x38, 0x4E, 0xA4, 0x38, 0x66, 0x20, + 0x38, 0x71, 0x21, 0x38, 0x65, 0x99, 0x38, 0x52, 0x4D, 0x38, 0x5F, 0x8C, + 0x38, 0x51, 0x8D, 0x38, 0x65, 0xB0, 0x38, 0x52, 0x1D, 0x38, 0x7D, 0x42, + 0x38, 0x75, 0x1F, 0x38, 0x8C, 0xA9, 0x38, 0x58, 0xF0, 0x38, 0x54, 0x39, + 0x38, 0x6F, 0x14, 0x38, 0x62, 0x95, 0x38, 0x63, 0x55, 0x38, 0x4E, 0x00, + 0x38, 0x4E, 0x09, 0x38, 0x90, 0x4A, 0x38, 0x5D, 0xE6, 0x38, 0x4E, 0x2D, + 0x38, 0x53, 0xF3, 0x38, 0x63, 0x07, 0x38, 0x8D, 0x70, 0x38, 0x62, 0x53, + 0x38, 0x79, 0x81, 0x38, 0x7A, 0x7A, 0x38, 0x54, 0x08, 0x38, 0x6E, 0x80, + 0x38, 0x67, 0x09, 0x38, 0x67, 0x08, 0x38, 0x75, 0x33, 0x38, 0x52, 0x72, + 0x38, 0x55, 0xB6, 0x38, 0x91, 0x4D, 0xC0, 0x30, 0x14, 0x80, 0x67, 0x2C, + 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x4E, 0x09, 0x00, 0x30, 0x15, + 0xC0, 0x30, 0x14, 0x80, 0x4E, 0x8C, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, + 0x80, 0x5B, 0x89, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x70, 0xB9, + 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x62, 0x53, 0x00, 0x30, 0x15, + 0xC0, 0x30, 0x14, 0x80, 0x76, 0xD7, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, + 0x80, 0x52, 0xDD, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x65, 0x57, + 0x00, 0x30, 0x15, 0x1C, 0x5F, 0x97, 0x1C, 0x53, 0xEF, 0x04, 0x00, 0x30, + 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, + 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, + 0x04, 0x00, 0x39, 0x00, 0x4E, 0x3D, 0x00, 0x4E, 0x38, 0x00, 0x4E, 0x41, + 0x02, 0x01, 0x22, 0x00, 0x4F, 0x60, 0x00, 0x4F, 0xAE, 0x00, 0x4F, 0xBB, + 0x00, 0x50, 0x02, 0x00, 0x50, 0x7A, 0x00, 0x50, 0x99, 0x00, 0x50, 0xE7, + 0x00, 0x50, 0xCF, 0x00, 0x34, 0x9E, 0x02, 0x06, 0x3A, 0x00, 0x51, 0x4D, + 0x00, 0x51, 0x54, 0x00, 0x51, 0x64, 0x00, 0x51, 0x77, 0x02, 0x05, 0x1C, + 0x00, 0x34, 0xB9, 0x00, 0x51, 0x67, 0x00, 0x51, 0x8D, 0x02, 0x05, 0x4B, + 0x00, 0x51, 0x97, 0x00, 0x51, 0xA4, 0x00, 0x4E, 0xCC, 0x00, 0x51, 0xAC, + 0x00, 0x51, 0xB5, 0x02, 0x91, 0xDF, 0x00, 0x51, 0xF5, 0x00, 0x52, 0x03, + 0x00, 0x34, 0xDF, 0x00, 0x52, 0x3B, 0x00, 0x52, 0x46, 0x00, 0x52, 0x72, + 0x00, 0x52, 0x77, 0x00, 0x35, 0x15, 0x00, 0x52, 0xC7, 0x00, 0x52, 0xC9, + 0x00, 0x52, 0xE4, 0x00, 0x52, 0xFA, 0x00, 0x53, 0x05, 0x00, 0x53, 0x06, + 0x00, 0x53, 0x17, 0x00, 0x53, 0x49, 0x00, 0x53, 0x51, 0x00, 0x53, 0x5A, + 0x00, 0x53, 0x73, 0x00, 0x53, 0x7D, 0x00, 0x53, 0x7F, 0x00, 0x53, 0x7F, + 0x00, 0x53, 0x7F, 0x02, 0x0A, 0x2C, 0x00, 0x70, 0x70, 0x00, 0x53, 0xCA, + 0x00, 0x53, 0xDF, 0x02, 0x0B, 0x63, 0x00, 0x53, 0xEB, 0x00, 0x53, 0xF1, + 0x00, 0x54, 0x06, 0x00, 0x54, 0x9E, 0x00, 0x54, 0x38, 0x00, 0x54, 0x48, + 0x00, 0x54, 0x68, 0x00, 0x54, 0xA2, 0x00, 0x54, 0xF6, 0x00, 0x55, 0x10, + 0x00, 0x55, 0x53, 0x00, 0x55, 0x63, 0x00, 0x55, 0x84, 0x00, 0x55, 0x84, + 0x00, 0x55, 0x99, 0x00, 0x55, 0xAB, 0x00, 0x55, 0xB3, 0x00, 0x55, 0xC2, + 0x00, 0x57, 0x16, 0x00, 0x56, 0x06, 0x00, 0x57, 0x17, 0x00, 0x56, 0x51, + 0x00, 0x56, 0x74, 0x00, 0x52, 0x07, 0x00, 0x58, 0xEE, 0x00, 0x57, 0xCE, + 0x00, 0x57, 0xF4, 0x00, 0x58, 0x0D, 0x00, 0x57, 0x8B, 0x00, 0x58, 0x32, + 0x00, 0x58, 0x31, 0x00, 0x58, 0xAC, 0x02, 0x14, 0xE4, 0x00, 0x58, 0xF2, + 0x00, 0x58, 0xF7, 0x00, 0x59, 0x06, 0x00, 0x59, 0x1A, 0x00, 0x59, 0x22, + 0x00, 0x59, 0x62, 0x02, 0x16, 0xA8, 0x02, 0x16, 0xEA, 0x00, 0x59, 0xEC, + 0x00, 0x5A, 0x1B, 0x00, 0x5A, 0x27, 0x00, 0x59, 0xD8, 0x00, 0x5A, 0x66, + 0x00, 0x36, 0xEE, 0x00, 0x36, 0xFC, 0x00, 0x5B, 0x08, 0x00, 0x5B, 0x3E, + 0x00, 0x5B, 0x3E, 0x02, 0x19, 0xC8, 0x00, 0x5B, 0xC3, 0x00, 0x5B, 0xD8, + 0x00, 0x5B, 0xE7, 0x00, 0x5B, 0xF3, 0x02, 0x1B, 0x18, 0x00, 0x5B, 0xFF, + 0x00, 0x5C, 0x06, 0x00, 0x5F, 0x53, 0x00, 0x5C, 0x22, 0x00, 0x37, 0x81, + 0x00, 0x5C, 0x60, 0x00, 0x5C, 0x6E, 0x00, 0x5C, 0xC0, 0x00, 0x5C, 0x8D, + 0x02, 0x1D, 0xE4, 0x00, 0x5D, 0x43, 0x02, 0x1D, 0xE6, 0x00, 0x5D, 0x6E, + 0x00, 0x5D, 0x6B, 0x00, 0x5D, 0x7C, 0x00, 0x5D, 0xE1, 0x00, 0x5D, 0xE2, + 0x00, 0x38, 0x2F, 0x00, 0x5D, 0xFD, 0x00, 0x5E, 0x28, 0x00, 0x5E, 0x3D, + 0x00, 0x5E, 0x69, 0x00, 0x38, 0x62, 0x02, 0x21, 0x83, 0x00, 0x38, 0x7C, + 0x00, 0x5E, 0xB0, 0x00, 0x5E, 0xB3, 0x00, 0x5E, 0xB6, 0x00, 0x5E, 0xCA, + 0x02, 0xA3, 0x92, 0x00, 0x5E, 0xFE, 0x02, 0x23, 0x31, 0x02, 0x23, 0x31, + 0x00, 0x82, 0x01, 0x00, 0x5F, 0x22, 0x00, 0x5F, 0x22, 0x00, 0x38, 0xC7, + 0x02, 0x32, 0xB8, 0x02, 0x61, 0xDA, 0x00, 0x5F, 0x62, 0x00, 0x5F, 0x6B, + 0x00, 0x38, 0xE3, 0x00, 0x5F, 0x9A, 0x00, 0x5F, 0xCD, 0x00, 0x5F, 0xD7, + 0x00, 0x5F, 0xF9, 0x00, 0x60, 0x81, 0x00, 0x39, 0x3A, 0x00, 0x39, 0x1C, + 0x00, 0x60, 0x94, 0x02, 0x26, 0xD4, 0x00, 0x60, 0xC7, 0x00, 0x61, 0x48, + 0x00, 0x61, 0x4C, 0x00, 0x61, 0x4E, 0x00, 0x61, 0x4C, 0x00, 0x61, 0x7A, + 0x00, 0x61, 0x8E, 0x00, 0x61, 0xB2, 0x00, 0x61, 0xA4, 0x00, 0x61, 0xAF, + 0x00, 0x61, 0xDE, 0x00, 0x61, 0xF2, 0x00, 0x61, 0xF6, 0x00, 0x62, 0x10, + 0x00, 0x62, 0x1B, 0x00, 0x62, 0x5D, 0x00, 0x62, 0xB1, 0x00, 0x62, 0xD4, + 0x00, 0x63, 0x50, 0x02, 0x2B, 0x0C, 0x00, 0x63, 0x3D, 0x00, 0x62, 0xFC, + 0x00, 0x63, 0x68, 0x00, 0x63, 0x83, 0x00, 0x63, 0xE4, 0x02, 0x2B, 0xF1, + 0x00, 0x64, 0x22, 0x00, 0x63, 0xC5, 0x00, 0x63, 0xA9, 0x00, 0x3A, 0x2E, + 0x00, 0x64, 0x69, 0x00, 0x64, 0x7E, 0x00, 0x64, 0x9D, 0x00, 0x64, 0x77, + 0x00, 0x3A, 0x6C, 0x00, 0x65, 0x4F, 0x00, 0x65, 0x6C, 0x02, 0x30, 0x0A, + 0x00, 0x65, 0xE3, 0x00, 0x66, 0xF8, 0x00, 0x66, 0x49, 0x00, 0x3B, 0x19, + 0x00, 0x66, 0x91, 0x00, 0x3B, 0x08, 0x00, 0x3A, 0xE4, 0x00, 0x51, 0x92, + 0x00, 0x51, 0x95, 0x00, 0x67, 0x00, 0x00, 0x66, 0x9C, 0x00, 0x80, 0xAD, + 0x00, 0x43, 0xD9, 0x00, 0x67, 0x17, 0x00, 0x67, 0x1B, 0x00, 0x67, 0x21, + 0x00, 0x67, 0x5E, 0x00, 0x67, 0x53, 0x02, 0x33, 0xC3, 0x00, 0x3B, 0x49, + 0x00, 0x67, 0xFA, 0x00, 0x67, 0x85, 0x00, 0x68, 0x52, 0x00, 0x68, 0x85, + 0x02, 0x34, 0x6D, 0x00, 0x68, 0x8E, 0x00, 0x68, 0x1F, 0x00, 0x69, 0x14, + 0x00, 0x3B, 0x9D, 0x00, 0x69, 0x42, 0x00, 0x69, 0xA3, 0x00, 0x69, 0xEA, + 0x00, 0x6A, 0xA8, 0x02, 0x36, 0xA3, 0x00, 0x6A, 0xDB, 0x00, 0x3C, 0x18, + 0x00, 0x6B, 0x21, 0x02, 0x38, 0xA7, 0x00, 0x6B, 0x54, 0x00, 0x3C, 0x4E, + 0x00, 0x6B, 0x72, 0x00, 0x6B, 0x9F, 0x00, 0x6B, 0xBA, 0x00, 0x6B, 0xBB, + 0x02, 0x3A, 0x8D, 0x02, 0x1D, 0x0B, 0x02, 0x3A, 0xFA, 0x00, 0x6C, 0x4E, + 0x02, 0x3C, 0xBC, 0x00, 0x6C, 0xBF, 0x00, 0x6C, 0xCD, 0x00, 0x6C, 0x67, + 0x00, 0x6D, 0x16, 0x00, 0x6D, 0x3E, 0x00, 0x6D, 0x77, 0x00, 0x6D, 0x41, + 0x00, 0x6D, 0x69, 0x00, 0x6D, 0x78, 0x00, 0x6D, 0x85, 0x02, 0x3D, 0x1E, + 0x00, 0x6D, 0x34, 0x00, 0x6E, 0x2F, 0x00, 0x6E, 0x6E, 0x00, 0x3D, 0x33, + 0x00, 0x6E, 0xCB, 0x00, 0x6E, 0xC7, 0x02, 0x3E, 0xD1, 0x00, 0x6D, 0xF9, + 0x00, 0x6F, 0x6E, 0x02, 0x3F, 0x5E, 0x02, 0x3F, 0x8E, 0x00, 0x6F, 0xC6, + 0x00, 0x70, 0x39, 0x00, 0x70, 0x1E, 0x00, 0x70, 0x1B, 0x00, 0x3D, 0x96, + 0x00, 0x70, 0x4A, 0x00, 0x70, 0x7D, 0x00, 0x70, 0x77, 0x00, 0x70, 0xAD, + 0x02, 0x05, 0x25, 0x00, 0x71, 0x45, 0x02, 0x42, 0x63, 0x00, 0x71, 0x9C, + 0x02, 0x43, 0xAB, 0x00, 0x72, 0x28, 0x00, 0x72, 0x35, 0x00, 0x72, 0x50, + 0x02, 0x46, 0x08, 0x00, 0x72, 0x80, 0x00, 0x72, 0x95, 0x02, 0x47, 0x35, + 0x02, 0x48, 0x14, 0x00, 0x73, 0x7A, 0x00, 0x73, 0x8B, 0x00, 0x3E, 0xAC, + 0x00, 0x73, 0xA5, 0x00, 0x3E, 0xB8, 0x00, 0x3E, 0xB8, 0x00, 0x74, 0x47, + 0x00, 0x74, 0x5C, 0x00, 0x74, 0x71, 0x00, 0x74, 0x85, 0x00, 0x74, 0xCA, + 0x00, 0x3F, 0x1B, 0x00, 0x75, 0x24, 0x02, 0x4C, 0x36, 0x00, 0x75, 0x3E, + 0x02, 0x4C, 0x92, 0x00, 0x75, 0x70, 0x02, 0x21, 0x9F, 0x00, 0x76, 0x10, + 0x02, 0x4F, 0xA1, 0x02, 0x4F, 0xB8, 0x02, 0x50, 0x44, 0x00, 0x3F, 0xFC, + 0x00, 0x40, 0x08, 0x00, 0x76, 0xF4, 0x02, 0x50, 0xF3, 0x02, 0x50, 0xF2, + 0x02, 0x51, 0x19, 0x02, 0x51, 0x33, 0x00, 0x77, 0x1E, 0x00, 0x77, 0x1F, + 0x00, 0x77, 0x1F, 0x00, 0x77, 0x4A, 0x00, 0x40, 0x39, 0x00, 0x77, 0x8B, + 0x00, 0x40, 0x46, 0x00, 0x40, 0x96, 0x02, 0x54, 0x1D, 0x00, 0x78, 0x4E, + 0x00, 0x78, 0x8C, 0x00, 0x78, 0xCC, 0x00, 0x40, 0xE3, 0x02, 0x56, 0x26, + 0x00, 0x79, 0x56, 0x02, 0x56, 0x9A, 0x02, 0x56, 0xC5, 0x00, 0x79, 0x8F, + 0x00, 0x79, 0xEB, 0x00, 0x41, 0x2F, 0x00, 0x7A, 0x40, 0x00, 0x7A, 0x4A, + 0x00, 0x7A, 0x4F, 0x02, 0x59, 0x7C, 0x02, 0x5A, 0xA7, 0x02, 0x5A, 0xA7, + 0x00, 0x7A, 0xEE, 0x00, 0x42, 0x02, 0x02, 0x5B, 0xAB, 0x00, 0x7B, 0xC6, + 0x00, 0x7B, 0xC9, 0x00, 0x42, 0x27, 0x02, 0x5C, 0x80, 0x00, 0x7C, 0xD2, + 0x00, 0x42, 0xA0, 0x00, 0x7C, 0xE8, 0x00, 0x7C, 0xE3, 0x00, 0x7D, 0x00, + 0x02, 0x5F, 0x86, 0x00, 0x7D, 0x63, 0x00, 0x43, 0x01, 0x00, 0x7D, 0xC7, + 0x00, 0x7E, 0x02, 0x00, 0x7E, 0x45, 0x00, 0x43, 0x34, 0x02, 0x62, 0x28, + 0x02, 0x62, 0x47, 0x00, 0x43, 0x59, 0x02, 0x62, 0xD9, 0x00, 0x7F, 0x7A, + 0x02, 0x63, 0x3E, 0x00, 0x7F, 0x95, 0x00, 0x7F, 0xFA, 0x00, 0x80, 0x05, + 0x02, 0x64, 0xDA, 0x02, 0x65, 0x23, 0x00, 0x80, 0x60, 0x02, 0x65, 0xA8, + 0x00, 0x80, 0x70, 0x02, 0x33, 0x5F, 0x00, 0x43, 0xD5, 0x00, 0x80, 0xB2, + 0x00, 0x81, 0x03, 0x00, 0x44, 0x0B, 0x00, 0x81, 0x3E, 0x00, 0x5A, 0xB5, + 0x02, 0x67, 0xA7, 0x02, 0x67, 0xB5, 0x02, 0x33, 0x93, 0x02, 0x33, 0x9C, + 0x00, 0x82, 0x01, 0x00, 0x82, 0x04, 0x00, 0x8F, 0x9E, 0x00, 0x44, 0x6B, + 0x00, 0x82, 0x91, 0x00, 0x82, 0x8B, 0x00, 0x82, 0x9D, 0x00, 0x52, 0xB3, + 0x00, 0x82, 0xB1, 0x00, 0x82, 0xB3, 0x00, 0x82, 0xBD, 0x00, 0x82, 0xE6, + 0x02, 0x6B, 0x3C, 0x00, 0x82, 0xE5, 0x00, 0x83, 0x1D, 0x00, 0x83, 0x63, + 0x00, 0x83, 0xAD, 0x00, 0x83, 0x23, 0x00, 0x83, 0xBD, 0x00, 0x83, 0xE7, + 0x00, 0x84, 0x57, 0x00, 0x83, 0x53, 0x00, 0x83, 0xCA, 0x00, 0x83, 0xCC, + 0x00, 0x83, 0xDC, 0x02, 0x6C, 0x36, 0x02, 0x6D, 0x6B, 0x02, 0x6C, 0xD5, + 0x00, 0x45, 0x2B, 0x00, 0x84, 0xF1, 0x00, 0x84, 0xF3, 0x00, 0x85, 0x16, + 0x02, 0x73, 0xCA, 0x00, 0x85, 0x64, 0x02, 0x6F, 0x2C, 0x00, 0x45, 0x5D, + 0x00, 0x45, 0x61, 0x02, 0x6F, 0xB1, 0x02, 0x70, 0xD2, 0x00, 0x45, 0x6B, + 0x00, 0x86, 0x50, 0x00, 0x86, 0x5C, 0x00, 0x86, 0x67, 0x00, 0x86, 0x69, + 0x00, 0x86, 0xA9, 0x00, 0x86, 0x88, 0x00, 0x87, 0x0E, 0x00, 0x86, 0xE2, + 0x00, 0x87, 0x79, 0x00, 0x87, 0x28, 0x00, 0x87, 0x6B, 0x00, 0x87, 0x86, + 0x00, 0x45, 0xD7, 0x00, 0x87, 0xE1, 0x00, 0x88, 0x01, 0x00, 0x45, 0xF9, + 0x00, 0x88, 0x60, 0x00, 0x88, 0x63, 0x02, 0x76, 0x67, 0x00, 0x88, 0xD7, + 0x00, 0x88, 0xDE, 0x00, 0x46, 0x35, 0x00, 0x88, 0xFA, 0x00, 0x34, 0xBB, + 0x02, 0x78, 0xAE, 0x02, 0x79, 0x66, 0x00, 0x46, 0xBE, 0x00, 0x46, 0xC7, + 0x00, 0x8A, 0xA0, 0x00, 0x8A, 0xED, 0x00, 0x8B, 0x8A, 0x00, 0x8C, 0x55, + 0x02, 0x7C, 0xA8, 0x00, 0x8C, 0xAB, 0x00, 0x8C, 0xC1, 0x00, 0x8D, 0x1B, + 0x00, 0x8D, 0x77, 0x02, 0x7F, 0x2F, 0x02, 0x08, 0x04, 0x00, 0x8D, 0xCB, + 0x00, 0x8D, 0xBC, 0x00, 0x8D, 0xF0, 0x02, 0x08, 0xDE, 0x00, 0x8E, 0xD4, + 0x00, 0x8F, 0x38, 0x02, 0x85, 0xD2, 0x02, 0x85, 0xED, 0x00, 0x90, 0x94, + 0x00, 0x90, 0xF1, 0x00, 0x91, 0x11, 0x02, 0x87, 0x2E, 0x00, 0x91, 0x1B, + 0x00, 0x92, 0x38, 0x00, 0x92, 0xD7, 0x00, 0x92, 0xD8, 0x00, 0x92, 0x7C, + 0x00, 0x93, 0xF9, 0x00, 0x94, 0x15, 0x02, 0x8B, 0xFA, 0x00, 0x95, 0x8B, + 0x00, 0x49, 0x95, 0x00, 0x95, 0xB7, 0x02, 0x8D, 0x77, 0x00, 0x49, 0xE6, + 0x00, 0x96, 0xC3, 0x00, 0x5D, 0xB2, 0x00, 0x97, 0x23, 0x02, 0x91, 0x45, + 0x02, 0x92, 0x1A, 0x00, 0x4A, 0x6E, 0x00, 0x4A, 0x76, 0x00, 0x97, 0xE0, + 0x02, 0x94, 0x0A, 0x00, 0x4A, 0xB2, 0x02, 0x94, 0x96, 0x00, 0x98, 0x0B, + 0x00, 0x98, 0x0B, 0x00, 0x98, 0x29, 0x02, 0x95, 0xB6, 0x00, 0x98, 0xE2, + 0x00, 0x4B, 0x33, 0x00, 0x99, 0x29, 0x00, 0x99, 0xA7, 0x00, 0x99, 0xC2, + 0x00, 0x99, 0xFE, 0x00, 0x4B, 0xCE, 0x02, 0x9B, 0x30, 0x00, 0x9B, 0x12, + 0x00, 0x9C, 0x40, 0x00, 0x9C, 0xFD, 0x00, 0x4C, 0xCE, 0x00, 0x4C, 0xED, + 0x00, 0x9D, 0x67, 0x02, 0xA0, 0xCE, 0x00, 0x4C, 0xF8, 0x02, 0xA1, 0x05, + 0x02, 0xA2, 0x0E, 0x02, 0xA2, 0x91, 0x00, 0x9E, 0xBB, 0x00, 0x4D, 0x56, + 0x00, 0x9E, 0xF9, 0x00, 0x9E, 0xFE, 0x00, 0x9F, 0x05, 0x00, 0x9F, 0x0F, + 0x00, 0x9F, 0x16, 0x00, 0x9F, 0x3B, 0x02, 0xA6, 0x00 +}; + +const decomp_index_table_t gl_uninorm_decomp_index_table = +{ + { + 0, 32, 64, 96, 128, -1, 160, 192, + 224, 256, 288, 320, 352, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 384, 416, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 448, 480, + -1, 512, -1, -1, 544, 576, 608, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 640, -1, -1, 672, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 704, 736, 768, -1, -1, + 800, -1, -1, 832, 864, -1, 896, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 928 + }, + { + -1, -1, -1, -1, -1, 0, 32, 64, + 96, 128, 160, 192, -1, 224, 256, 288, + 320, 352, -1, -1, -1, 384, 416, 448, + -1, -1, 480, 512, 544, 576, 608, 640, + 672, 704, 736, 768, -1, -1, 800, 832, + -1, -1, -1, -1, 864, -1, -1, -1, + -1, 896, -1, 928, -1, -1, 960, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 992, 1024, -1, -1, -1, 1056, -1, + -1, 1088, 1120, -1, -1, -1, -1, -1, + -1, -1, 1152, -1, 1184, -1, 1216, -1, + -1, -1, 1248, -1, -1, -1, 1280, -1, + -1, -1, 1312, -1, -1, -1, 1344, -1, + -1, 1376, -1, -1, -1, 1408, 1440, -1, + 1472, -1, 1504, 1536, 1568, 1600, -1, -1, + -1, 1632, -1, -1, -1, -1, -1, 1664, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 1696, 1728, 1760, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1792, 1824, 1856, 1888, 1920, -1, -1, + 1952, 1984, 2016, 2048, 2080, 2112, 2144, 2176, + 2208, 2240, 2272, 2304, 2336, 2368, 2400, 2432, + 2464, 2496, 2528, 2560, 2592, 2624, -1, -1, + 2656, 2688, 2720, 2752, 2784, 2816, 2848, -1, + 2880, 2912, 2944, 2976, 3008, 3040, -1, 3072, + -1, 3104, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3136, 3168, 3200, 3232, 3264, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3296, -1, -1, 3328, -1, -1, 3360, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3392, -1, -1, -1, -1, + -1, -1, -1, 3424, -1, -1, -1, -1, + -1, -1, -1, -1, 3456, -1, -1, 3488, + 3520, 3552, 3584, 3616, 3648, 3680, 3712, -1, + 3744, 3776, 3808, 3840, 3872, 3904, 3936, 3968, + -1, 4000, 4032, 4064, 4096, -1, -1, -1, + 4128, 4160, 4192, 4224, 4256, 4288, 4320, 4352, + 4384, 4416, 4448, 4480, 4512, 4544, 4576, 4608, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4640, -1, -1, -1, + -1, -1, -1, 4672, -1, -1, -1, 4704, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4736, 4768, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4800, 4832, 4864, 4896, 4928, 4960, 4992, 5024, + 5056, 5088, 5120, 5152, 5184, 5216, 5248, -1, + 5280, 5312, 5344, 5376, 5408, 5440, 5472, 5504, + 5536, 5568, 5600, 5632, 5664, 5696, 5728, 5760, + 5792, 5824, 5856, 5888, 5920, 5952, 5984, 6016, + 6048, 6080, 6112, 6144, 6176, 6208, 6240, 6272, + 6304, 6336, 6368, 6400, 6432, 6464, 6496, 6528, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6560, 6592, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6624, 6656, -1, -1, + -1, -1, -1, -1, 6688, 6720, -1, -1, + -1, 6752, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6784, -1, 6816, -1, 6848, -1, + -1, -1, -1, -1, -1, 6880, -1, -1, + -1, -1, -1, -1, -1, 6912, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6944, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6976, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 7008, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 7040, 7072, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 7104, 7136, -1, 7168, 7200, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 7232, 7264, 7296, 7328, 7360, 7392, 7424, 7456, + 7488, 7520, 7552, 7584, 7616, 7648, 7680, 7712, + 7744, 7776, 7808, 7840, 7872, 7904, 7936, 7968, + 8000, 8032, 8064, 8096, 8128, 8160, 8192, 8224, + -1, 8256, 8288, 8320, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 8352, 8384, 8416, 8448, 8480, 8512, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 8544, 8576, 8608, 8640, 8672, -1, -1, -1, + 8704, 8736, 8768, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 8800, + 8832, 8864, 8896, 8928, 8960, 8992, 9024, 9056, + 9088, 9120, 9152, 9184, 9216, 9248, 9280, 9312, + 9344, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 32768, -1, -1, -1, -1, -1, -1, -1, + 32769, -1, 32771, -1, -1, -1, -1, 32772, + -1, -1, 32774, 32775, 32776, 32778, -1, -1, + 32779, 32781, 32782, -1, 32783, 32786, 32789, -1, + 24, 26, 28, 30, 32, 34, -1, 36, + 38, 40, 42, 44, 46, 48, 50, 52, + -1, 54, 56, 58, 60, 62, 64, -1, + -1, 66, 68, 70, 72, 74, -1, -1, + 76, 78, 80, 82, 84, 86, -1, 88, + 90, 92, 94, 96, 98, 100, 102, 104, + -1, 106, 108, 110, 112, 114, 116, -1, + -1, 118, 120, 122, 124, 126, -1, 128, + 130, 132, 134, 136, 138, 140, 142, 144, + 146, 148, 150, 152, 154, 156, 158, 160, + -1, -1, 162, 164, 166, 168, 170, 172, + 174, 176, 178, 180, 182, 184, 186, 188, + 190, 192, 194, 196, 198, 200, -1, -1, + 202, 204, 206, 208, 210, 212, 214, 216, + 218, -1, 32988, 32990, 224, 226, 228, 230, + -1, 232, 234, 236, 238, 240, 242, 33012, + 33014, -1, -1, 248, 250, 252, 254, 256, + 258, 33028, -1, -1, 262, 264, 266, 268, + 270, 272, -1, -1, 274, 276, 278, 280, + 282, 284, 286, 288, 290, 292, 294, 296, + 298, 300, 302, 304, 306, 308, -1, -1, + 310, 312, 314, 316, 318, 320, 322, 324, + 326, 328, 330, 332, 334, 336, 338, 340, + 342, 344, 346, 348, 350, 352, 354, 33124, + 357, 359, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 361, + 363, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33133, 33135, 33137, 33139, + 33141, 33143, 33145, 33147, 33149, 383, 385, 387, + 389, 391, 393, 395, 397, 399, 401, 403, + 405, 407, 409, 411, 413, -1, 415, 417, + 419, 421, 423, 425, -1, -1, 427, 429, + 431, 433, 435, 437, 439, 441, 443, 445, + 447, 33217, 33219, 33221, 455, 457, -1, -1, + 459, 461, 463, 465, 467, 469, 471, 473, + 475, 477, 479, 481, 483, 485, 487, 489, + 491, 493, 495, 497, 499, 501, 503, 505, + 507, 509, 511, 513, 515, 517, 519, 521, + 523, 525, 527, 529, -1, -1, 531, 533, + -1, -1, -1, -1, -1, -1, 535, 537, + 539, 541, 543, 545, 547, 549, 551, 553, + 555, 557, 559, 561, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 33331, 33332, 33333, 33334, 33335, 33336, 33337, 33338, + 33339, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 33340, 33342, 33344, 33346, 33348, 33350, -1, -1, + 33352, 33353, 33354, 33355, 33356, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 589, 590, -1, 591, 592, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 594, -1, -1, -1, + -1, -1, 33363, -1, -1, -1, 597, -1, + -1, -1, -1, -1, 33366, 600, 602, 604, + 605, 607, 609, -1, 611, -1, 613, 615, + 617, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 619, 621, 623, 625, 627, 629, + 631, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 633, 635, 637, 639, 641, -1, + 33411, 33412, 33413, 646, 648, 33418, 33419, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 33420, 33421, 33422, -1, 33423, 33424, -1, -1, + -1, 33425, -1, -1, -1, -1, -1, -1, + 658, 660, -1, 662, -1, -1, -1, 664, + -1, -1, -1, -1, 666, 668, 670, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 672, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 674, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 676, 678, -1, 680, -1, -1, -1, 682, + -1, -1, -1, -1, 684, 686, 688, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 690, 692, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 694, 696, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 698, 700, 702, 704, -1, -1, 706, 708, + -1, -1, 710, 712, 714, 716, 718, 720, + -1, -1, 722, 724, 726, 728, 730, 732, + -1, -1, 734, 736, 738, 740, 742, 744, + 746, 748, 750, 752, 754, 756, -1, -1, + 758, 760, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33530, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 764, 766, 768, 770, 772, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33542, 33544, 33546, + 33548, -1, -1, -1, -1, -1, -1, -1, + 782, -1, 784, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 786, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 788, -1, -1, -1, -1, -1, -1, + -1, 790, -1, -1, 792, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 794, 796, 798, 800, 802, 804, 806, 808, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 810, 812, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 814, 816, -1, 818, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 820, -1, -1, 822, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 824, 826, 828, -1, -1, 830, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 832, -1, -1, 834, 836, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 838, 840, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 842, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 844, 846, 848, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 850, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 852, -1, -1, -1, -1, -1, -1, 854, + 856, -1, 858, 860, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 862, 864, 866, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 868, -1, 870, 872, 874, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33644, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33646, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33648, 33650, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33652, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 885, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 887, -1, -1, + -1, -1, 889, -1, -1, -1, -1, 891, + -1, -1, -1, -1, 893, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 895, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 897, -1, 899, 901, 33671, + 905, 33675, -1, -1, -1, -1, -1, -1, + -1, 909, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 911, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 913, -1, -1, + -1, -1, 915, -1, -1, -1, -1, 917, + -1, -1, -1, -1, 919, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 921, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 923, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33693, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 926, -1, + 928, -1, 930, -1, 932, -1, 934, -1, + -1, -1, 936, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 938, -1, 940, -1, -1, + 942, 944, -1, 946, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33716, 33717, 33718, -1, + 33719, 33720, 33721, 33722, 33723, 33724, 33725, 33726, + 33727, 33728, 33729, -1, 33730, 33731, 33732, 33733, + 33734, 33735, 33736, 33737, 33738, 33739, 33740, 33741, + 33742, 33743, 33744, 33745, 33746, 33747, -1, 33748, + 33749, 33750, 33751, 33752, 33753, 33754, 33755, 33756, + 33757, 33758, 33759, 33760, 33761, 33762, 33763, 33764, + 33765, 33766, 33767, 33768, 33769, 33770, 33771, 33772, + 33773, 33774, 33775, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 33776, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33777, 33778, 33779, 33780, 33781, + 33782, 33783, 33784, 33785, 33786, 33787, 33788, 33789, + 33790, 33791, 33792, 33793, 33794, 33795, 33796, 33797, + 33798, 33799, 33800, 33801, 33802, 33803, 33804, 33805, + 33806, 33807, 33808, 33809, 33810, 33811, 33812, 33813, + 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, + 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, + 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, + 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, + 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, + 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, + 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, + 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, + 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, + 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, + 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, + 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, + 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, + 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, + 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, + 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, + 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, + 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, + 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, + 1350, 1352, 34122, 1356, -1, -1, -1, -1, + 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, + 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, + 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, + 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, + 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, + 1438, 1440, 1442, 1444, 1446, 1448, 1450, 1452, + 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, + 1470, 1472, 1474, 1476, 1478, 1480, 1482, 1484, + 1486, 1488, 1490, 1492, 1494, 1496, 1498, 1500, + 1502, 1504, 1506, 1508, 1510, 1512, 1514, 1516, + 1518, 1520, 1522, 1524, 1526, 1528, 1530, 1532, + 1534, 1536, -1, -1, -1, -1, -1, -1, + 1538, 1540, 1542, 1544, 1546, 1548, 1550, 1552, + 1554, 1556, 1558, 1560, 1562, 1564, 1566, 1568, + 1570, 1572, 1574, 1576, 1578, 1580, -1, -1, + 1582, 1584, 1586, 1588, 1590, 1592, -1, -1, + 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, + 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, + 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1640, + 1642, 1644, 1646, 1648, 1650, 1652, 1654, 1656, + 1658, 1660, 1662, 1664, 1666, 1668, -1, -1, + 1670, 1672, 1674, 1676, 1678, 1680, -1, -1, + 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, + -1, 1698, -1, 1700, -1, 1702, -1, 1704, + 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, + 1722, 1724, 1726, 1728, 1730, 1732, 1734, 1736, + 1738, 1740, 1741, 1743, 1744, 1746, 1747, 1749, + 1750, 1752, 1753, 1755, 1756, 1758, -1, -1, + 1759, 1761, 1763, 1765, 1767, 1769, 1771, 1773, + 1775, 1777, 1779, 1781, 1783, 1785, 1787, 1789, + 1791, 1793, 1795, 1797, 1799, 1801, 1803, 1805, + 1807, 1809, 1811, 1813, 1815, 1817, 1819, 1821, + 1823, 1825, 1827, 1829, 1831, 1833, 1835, 1837, + 1839, 1841, 1843, 1845, 1847, 1849, 1851, 1853, + 1855, 1857, 1859, 1861, 1863, -1, 1865, 1867, + 1869, 1871, 1873, 1875, 1876, 34646, 1880, 34649, + 34651, 1885, 1887, 1889, 1891, -1, 1893, 1895, + 1897, 1899, 1900, 1902, 1903, 1905, 1907, 1909, + 1911, 1913, 1915, 1917, -1, -1, 1918, 1920, + 1922, 1924, 1926, 1928, -1, 1929, 1931, 1933, + 1935, 1937, 1939, 1941, 1942, 1944, 1946, 1948, + 1950, 1952, 1954, 1956, 1957, 1959, 1961, 1962, + -1, -1, 1963, 1965, 1967, -1, 1969, 1971, + 1973, 1975, 1976, 1978, 1979, 1981, 34750, -1, + 1984, 1985, 34754, 34755, 34756, 34757, 34758, 34759, + 34760, 34761, 34762, -1, -1, -1, -1, -1, + -1, 34763, -1, -1, -1, -1, -1, 34764, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 34766, 34767, 34769, -1, + -1, -1, -1, -1, -1, -1, -1, 34772, + -1, -1, -1, 34773, 34775, -1, 34778, 34780, + -1, -1, -1, -1, 34783, -1, 34785, -1, + -1, -1, -1, -1, -1, -1, -1, 34787, + 34789, 34791, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 34793, + -1, -1, -1, -1, -1, -1, -1, 34797, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 34798, 34799, -1, -1, 34800, 34801, 34802, 34803, + 34804, 34805, 34806, 34807, 34808, 34809, 34810, 34811, + 34812, 34813, 34814, 34815, 34816, 34817, 34818, 34819, + 34820, 34821, 34822, 34823, 34824, 34825, 34826, -1, + 34827, 34828, 34829, 34830, 34831, 34832, 34833, 34834, + 34835, 34836, 34837, 34838, 34839, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 34840, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 34842, 34845, 34848, 34849, -1, 34851, 34854, 34857, + -1, 34858, 34860, 34861, 34862, 34863, 34864, 34865, + 34866, 34867, 34868, 34869, -1, 34870, 34871, -1, + -1, 34873, 34874, 34875, 34876, 34877, -1, -1, + 34878, 34880, 34883, -1, 34885, -1, 2118, -1, + 34887, -1, 2120, 2121, 34890, 34891, -1, 34892, + 34893, 34894, -1, 34895, 34896, 34897, 34898, 34899, + 34900, 34901, -1, 34902, 34905, 34906, 34907, 34908, + 34909, -1, -1, -1, -1, 34910, 34911, 34912, + 34913, 34914, -1, -1, -1, -1, -1, -1, + 34915, 34918, 34921, 34925, 34928, 34931, 34934, 34937, + 34940, 34943, 34946, 34949, 34952, 34955, 34958, 34961, + 34963, 34964, 34966, 34969, 34971, 34972, 34974, 34977, + 34981, 34983, 34984, 34986, 34989, 34990, 34991, 34992, + 34993, 34994, 34996, 34999, 35001, 35002, 35004, 35007, + 35011, 35013, 35014, 35016, 35019, 35020, 35021, 35022, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 35023, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2258, 2260, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2262, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2264, 2266, 2268, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2270, -1, -1, -1, + -1, 2272, -1, -1, 2274, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2276, -1, 2278, -1, + -1, -1, -1, -1, 35048, 35050, -1, 35053, + 35055, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2290, -1, -1, 2292, -1, -1, 2294, + -1, 2296, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2298, -1, 2300, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2302, 2304, 2306, + 2308, 2310, -1, -1, 2312, 2314, -1, -1, + 2316, 2318, -1, -1, -1, -1, -1, -1, + 2320, 2322, -1, -1, 2324, 2326, -1, -1, + 2328, 2330, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2332, 2334, 2336, 2338, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2340, 2342, 2344, 2346, -1, -1, -1, -1, + -1, -1, 2348, 2350, 2352, 2354, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2356, 2357, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 35126, 35127, 35128, 35129, 35130, 35131, 35132, 35133, + 35134, 35135, 35137, 35139, 35141, 35143, 35145, 35147, + 35149, 35151, 35153, 35155, 35157, 35160, 35163, 35166, + 35169, 35172, 35175, 35178, 35181, 35184, 35188, 35192, + 35196, 35200, 35204, 35208, 35212, 35216, 35220, 35224, + 35228, 35230, 35232, 35234, 35236, 35238, 35240, 35242, + 35244, 35246, 35249, 35252, 35255, 35258, 35261, 35264, + 35267, 35270, 35273, 35276, 35279, 35282, 35285, 35288, + 35291, 35294, 35297, 35300, 35303, 35306, 35309, 35312, + 35315, 35318, 35321, 35324, 35327, 35330, 35333, 35336, + 35339, 35342, 35345, 35348, 35351, 35354, 35357, 35358, + 35359, 35360, 35361, 35362, 35363, 35364, 35365, 35366, + 35367, 35368, 35369, 35370, 35371, 35372, 35373, 35374, + 35375, 35376, 35377, 35378, 35379, 35380, 35381, 35382, + 35383, 35384, 35385, 35386, 35387, 35388, 35389, 35390, + 35391, 35392, 35393, 35394, 35395, 35396, 35397, 35398, + 35399, 35400, 35401, 35402, 35403, 35404, 35405, 35406, + 35407, 35408, 35409, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 35410, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 35414, 35417, 35419, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2654, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 35424, 35425, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 35426, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 35427, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 35428, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 35429, 35430, 35431, 35432, 35433, 35434, 35435, 35436, + 35437, 35438, 35439, 35440, 35441, 35442, 35443, 35444, + 35445, 35446, 35447, 35448, 35449, 35450, 35451, 35452, + 35453, 35454, 35455, 35456, 35457, 35458, 35459, 35460, + 35461, 35462, 35463, 35464, 35465, 35466, 35467, 35468, + 35469, 35470, 35471, 35472, 35473, 35474, 35475, 35476, + 35477, 35478, 35479, 35480, 35481, 35482, 35483, 35484, + 35485, 35486, 35487, 35488, 35489, 35490, 35491, 35492, + 35493, 35494, 35495, 35496, 35497, 35498, 35499, 35500, + 35501, 35502, 35503, 35504, 35505, 35506, 35507, 35508, + 35509, 35510, 35511, 35512, 35513, 35514, 35515, 35516, + 35517, 35518, 35519, 35520, 35521, 35522, 35523, 35524, + 35525, 35526, 35527, 35528, 35529, 35530, 35531, 35532, + 35533, 35534, 35535, 35536, 35537, 35538, 35539, 35540, + 35541, 35542, 35543, 35544, 35545, 35546, 35547, 35548, + 35549, 35550, 35551, 35552, 35553, 35554, 35555, 35556, + 35557, 35558, 35559, 35560, 35561, 35562, 35563, 35564, + 35565, 35566, 35567, 35568, 35569, 35570, 35571, 35572, + 35573, 35574, 35575, 35576, 35577, 35578, 35579, 35580, + 35581, 35582, 35583, 35584, 35585, 35586, 35587, 35588, + 35589, 35590, 35591, 35592, 35593, 35594, 35595, 35596, + 35597, 35598, 35599, 35600, 35601, 35602, 35603, 35604, + 35605, 35606, 35607, 35608, 35609, 35610, 35611, 35612, + 35613, 35614, 35615, 35616, 35617, 35618, 35619, 35620, + 35621, 35622, 35623, 35624, 35625, 35626, 35627, 35628, + 35629, 35630, 35631, 35632, 35633, 35634, 35635, 35636, + 35637, 35638, 35639, 35640, 35641, 35642, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 35643, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 35644, -1, + 35645, 35646, 35647, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2880, -1, 2882, -1, + 2884, -1, 2886, -1, 2888, -1, 2890, -1, + 2892, -1, 2894, -1, 2896, -1, 2898, -1, + 2900, -1, 2902, -1, -1, 2904, -1, 2906, + -1, 2908, -1, -1, -1, -1, -1, -1, + 2910, 2912, -1, 2914, 2916, -1, 2918, 2920, + -1, 2922, 2924, -1, 2926, 2928, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2930, -1, -1, -1, + -1, -1, -1, 35700, 35702, -1, 2936, 35706, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2940, -1, 2942, -1, + 2944, -1, 2946, -1, 2948, -1, 2950, -1, + 2952, -1, 2954, -1, 2956, -1, 2958, -1, + 2960, -1, 2962, -1, -1, 2964, -1, 2966, + -1, 2968, -1, -1, -1, -1, -1, -1, + 2970, 2972, -1, 2974, 2976, -1, 2978, 2980, + -1, 2982, 2984, -1, 2986, 2988, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2990, -1, -1, 2992, + 2994, 2996, 2998, -1, -1, -1, 3000, 35770, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 35772, 35773, 35774, 35775, 35776, 35777, 35778, + 35779, 35780, 35781, 35782, 35783, 35784, 35785, 35786, + 35787, 35788, 35789, 35790, 35791, 35792, 35793, 35794, + 35795, 35796, 35797, 35798, 35799, 35800, 35801, 35802, + 35803, 35804, 35805, 35806, 35807, 35808, 35809, 35810, + 35811, 35812, 35813, 35814, 35815, 35816, 35817, 35818, + 35819, 35820, 35821, 35822, 35823, 35824, 35825, 35826, + 35827, 35828, 35829, 35830, 35831, 35832, 35833, 35834, + 35835, 35836, 35837, 35838, 35839, 35840, 35841, 35842, + 35843, 35844, 35845, 35846, 35847, 35848, 35849, 35850, + 35851, 35852, 35853, 35854, 35855, 35856, 35857, 35858, + 35859, 35860, 35861, 35862, 35863, 35864, 35865, -1, + -1, -1, 35866, 35867, 35868, 35869, 35870, 35871, + 35872, 35873, 35874, 35875, 35876, 35877, 35878, 35879, + 35880, 35883, 35886, 35889, 35892, 35895, 35898, 35901, + 35904, 35907, 35910, 35913, 35916, 35919, 35922, 35926, + 35930, 35934, 35938, 35942, 35946, 35950, 35954, 35958, + 35962, 35966, 35970, 35974, 35978, 35982, 35989, -1, + 35995, 35998, 36001, 36004, 36007, 36010, 36013, 36016, + 36019, 36022, 36025, 36028, 36031, 36034, 36037, 36040, + 36043, 36046, 36049, 36052, 36055, 36058, 36061, 36064, + 36067, 36070, 36073, 36076, 36079, 36082, 36085, 36088, + 36091, 36094, 36097, 36100, 36103, 36104, 36105, 36106, + -1, -1, -1, -1, -1, -1, -1, -1, + 36107, 36110, 36112, 36114, 36116, 36118, 36120, 36122, + 36124, 36126, 36128, 36130, 36132, 36134, 36136, 36138, + 36140, 36141, 36142, 36143, 36144, 36145, 36146, 36147, + 36148, 36149, 36150, 36151, 36152, 36153, 36154, 36156, + 36158, 36160, 36162, 36164, 36166, 36168, 36170, 36172, + 36174, 36176, 36178, 36180, 36182, 36187, 36191, -1, + 36193, 36194, 36195, 36196, 36197, 36198, 36199, 36200, + 36201, 36202, 36203, 36204, 36205, 36206, 36207, 36208, + 36209, 36210, 36211, 36212, 36213, 36214, 36215, 36216, + 36217, 36218, 36219, 36220, 36221, 36222, 36223, 36224, + 36225, 36226, 36227, 36228, 36229, 36230, 36231, 36232, + 36233, 36234, 36235, 36236, 36237, 36238, 36239, 36240, + 36241, 36242, 36244, 36246, 36248, 36250, 36252, 36254, + 36256, 36258, 36260, 36262, 36264, 36266, 36268, 36270, + 36272, 36274, 36276, 36278, 36280, 36282, 36284, 36286, + 36288, 36290, 36293, 36296, 36299, 36301, 36304, 36306, + 36309, 36310, 36311, 36312, 36313, 36314, 36315, 36316, + 36317, 36318, 36319, 36320, 36321, 36322, 36323, 36324, + 36325, 36326, 36327, 36328, 36329, 36330, 36331, 36332, + 36333, 36334, 36335, 36336, 36337, 36338, 36339, 36340, + 36341, 36342, 36343, 36344, 36345, 36346, 36347, 36348, + 36349, 36350, 36351, 36352, 36353, 36354, 36355, 36356, + 36358, 36362, 36366, 36370, 36373, 36377, 36380, 36383, + 36388, 36392, 36395, 36398, 36401, 36405, 36409, 36412, + 36415, 36417, 36420, 36424, 36428, 36430, 36435, 36441, + 36446, 36449, 36454, 36459, 36463, 36466, 36469, 36472, + 36476, 36481, 36485, 36488, 36491, 36494, 36496, 36498, + 36500, 36502, 36505, 36508, 36513, 36516, 36520, 36525, + 36528, 36530, 36532, 36537, 36541, 36546, 36549, 36554, + 36556, 36559, 36562, 36565, 36568, 36571, 36575, 36578, + 36580, 36583, 36586, 36589, 36593, 36596, 36599, 36602, + 36607, 36611, 36613, 36618, 36620, 36624, 36628, 36631, + 36634, 36637, 36641, 36643, 36646, 36650, 36652, 36657, + 36660, 36662, 36664, 36666, 36668, 36670, 36672, 36674, + 36676, 36678, 36680, 36683, 36686, 36689, 36692, 36695, + 36698, 36701, 36704, 36707, 36710, 36713, 36716, 36719, + 36722, 36725, 36728, 36730, 36732, 36735, 36737, 36739, + 36741, 36744, 36747, 36749, 36751, 36753, 36755, 36757, + 36761, 36763, 36765, 36767, 36769, 36771, 36773, 36775, + 36777, 36780, 36784, 36786, 36788, 36790, 36792, 36794, + 36796, 36798, 36801, 36804, 36807, 36810, 36812, 36814, + 36816, 36818, 36820, 36822, 36824, 36826, 36828, 36830, + 36833, 36836, 36838, 36841, 36844, 36847, 36849, 36852, + 36855, 36859, 36861, 36864, 36867, 36870, 36873, 36878, + 36884, 36886, 36888, 36890, 36892, 36894, 36896, 36898, + 36900, 36902, 36904, 36906, 36908, 36910, 36912, 36914, + 36916, 36918, 36920, 36924, 36926, 36928, 36930, 36934, + 36937, 36939, 36941, 36943, 36945, 36947, 36949, 36951, + 36953, 36955, 36957, 36960, 36962, 36964, 36967, 36970, + 36972, 36976, 36979, 36981, 36983, 36985, 36987, 36990, + 36993, 36995, 36997, 36999, 37001, 37003, 37005, 37007, + 37009, 37011, 37014, 37017, 37020, 37023, 37026, 37029, + 37032, 37035, 37038, 37041, 37044, 37047, 37050, 37053, + 37056, 37059, 37062, 37065, 37068, 37071, 37074, 37077, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 37080, 37081, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 37082, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 37083, 37084, 37085, -1, -1, -1, + 37086, 37087, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 37088, 37089, 37090, 37091, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37092, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4325, 4326, 4327, 4328, 4329, 4330, 4331, 4332, + 4333, 4334, 4335, 4336, 4337, 4338, 4339, 4340, + 4341, 4342, 4343, 4344, 4345, 4346, 4347, 4348, + 4349, 4350, 4351, 4352, 4353, 4354, 4355, 4356, + 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, + 4365, 4366, 4367, 4368, 4369, 4370, 4371, 4372, + 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4380, + 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388, + 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396, + 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404, + 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412, + 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420, + 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428, + 4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436, + 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, + 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452, + 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, + 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, + 4469, 4470, 4471, 4472, 4473, 4474, 4475, 4476, + 4477, 4478, 4479, 4480, 4481, 4482, 4483, 4484, + 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, + 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, + 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, + 4509, 4510, 4511, 4512, 4513, 4514, 4515, 4516, + 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, + 4525, 4526, 4527, 4528, 4529, 4530, 4531, 4532, + 4533, 4534, 4535, 4536, 4537, 4538, 4539, 4540, + 4541, 4542, 4543, 4544, 4545, 4546, 4547, 4548, + 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, + 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, + 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, + 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, + 4581, 4582, 4583, 4584, 4585, 4586, 4587, 4588, + 4589, 4590, 4591, 4592, 4593, 4594, -1, -1, + 4595, -1, 4596, -1, -1, 4597, 4598, 4599, + 4600, 4601, 4602, 4603, 4604, 4605, 4606, -1, + 4607, -1, 4608, -1, -1, 4609, 4610, -1, + -1, -1, 4611, 4612, 4613, 4614, 4615, 4616, + 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, + 4625, 4626, 4627, 4628, 4629, 4630, 4631, 4632, + 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, + 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, + 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, + 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, + 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, + 4673, 4674, 4675, 4676, 4677, 4678, -1, -1, + 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, + 4687, 4688, 4689, 4690, 4691, 4692, 4693, 4694, + 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, + 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, + 4711, 4712, 4713, 4714, 4715, 4716, 4717, 4718, + 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, + 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, + 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, + 4743, 4744, 4745, 4746, 4747, 4748, 4749, 4750, + 4751, 4752, 4753, 4754, 4755, 4756, 4757, 4758, + 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, + 4767, 4768, 4769, 4770, 4771, 4772, 4773, 4774, + 4775, 4776, 4777, 4778, 4779, 4780, 4781, 4782, + 4783, 4784, -1, -1, -1, -1, -1, -1, + 37553, 37555, 37557, 37559, 37562, 37565, 37567, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 37569, 37571, 37573, 37575, 37577, + -1, -1, -1, -1, -1, 4811, -1, 4813, + 37583, 37584, 37585, 37586, 37587, 37588, 37589, 37590, + 37591, 37592, 4825, 4827, 4829, 4831, 4833, 4835, + 4837, 4839, 4841, 4843, 4845, 4847, 4849, -1, + 4851, 4853, 4855, 4857, 4859, -1, 4861, -1, + 4863, 4865, -1, 4867, 4869, -1, 4871, 4873, + 4875, 4877, 4879, 4881, 4883, 4885, 4887, 37657, + 37659, 37660, 37661, 37662, 37663, 37664, 37665, 37666, + 37667, 37668, 37669, 37670, 37671, 37672, 37673, 37674, + 37675, 37676, 37677, 37678, 37679, 37680, 37681, 37682, + 37683, 37684, 37685, 37686, 37687, 37688, 37689, 37690, + 37691, 37692, 37693, 37694, 37695, 37696, 37697, 37698, + 37699, 37700, 37701, 37702, 37703, 37704, 37705, 37706, + 37707, 37708, 37709, 37710, 37711, 37712, 37713, 37714, + 37715, 37716, 37717, 37718, 37719, 37720, 37721, 37722, + 37723, 37724, 37725, 37726, 37727, 37728, 37729, 37730, + 37731, 37732, 37733, 37734, 37735, 37736, 37737, 37738, + 37739, 37740, 37741, 37742, 37743, 37744, 37745, 37746, + 37747, 37748, 37749, 37750, 37751, 37752, 37753, 37754, + 37755, 37756, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 37757, 37758, 37759, 37760, 37761, + 37762, 37763, 37764, 37765, 37766, 37767, 37768, 37769, + 37770, 37771, 37772, 37773, 37774, 37775, 37776, 37777, + 37778, 37779, 37780, 37782, 37784, 37786, 37788, 37790, + 37792, 37794, 37796, 37798, 37800, 37802, 37804, 37806, + 37808, 37810, 37812, 37814, 37816, 37817, 37818, 37819, + 37820, 37822, 37824, 37826, 37828, 37830, 37832, 37834, + 37836, 37838, 37840, 37842, 37844, 37846, 37848, 37850, + 37852, 37854, 37856, 37858, 37860, 37862, 37864, 37866, + 37868, 37870, 37872, 37874, 37876, 37878, 37880, 37882, + 37884, 37886, 37888, 37890, 37892, 37894, 37896, 37898, + 37900, 37902, 37904, 37906, 37908, 37910, 37912, 37914, + 37916, 37918, 37920, 37922, 37924, 37926, 37928, 37930, + 37932, 37934, 37936, 37938, 37940, 37942, 37944, 37946, + 37948, 37950, 37952, 37954, 37956, 37958, 37960, 37962, + 37964, 37966, 37968, 37970, 37972, 37974, 37976, 37978, + 37980, 37982, 37984, 37986, 37988, 37990, 37992, 37994, + 37996, 37998, 38000, 38002, 38004, 38006, 38008, 38011, + 38014, 38017, 38020, 38023, 38026, 38028, 38030, 38032, + 38034, 38036, 38038, 38040, 38042, 38044, 38046, 38048, + 38050, 38052, 38054, 38056, 38058, 38060, 38062, 38064, + 38066, 38068, 38070, 38072, 38074, 38076, 38078, 38080, + 38082, 38084, 38086, 38088, 38090, 38092, 38094, 38096, + 38098, 38100, 38102, 38104, 38106, 38108, 38110, 38112, + 38114, 38116, 38118, 38120, 38122, 38124, 38126, 38128, + 38130, 38132, 38134, 38136, 38138, 38140, 38142, 38144, + 38146, 38148, 38150, 38152, 38154, 38156, 38158, 38160, + 38162, 38164, 38166, 38168, 38170, 38172, 38174, 38176, + 38178, 38180, 38182, 38184, 38186, 38188, 38190, 38192, + 38194, 38196, 38198, 38200, 38202, 38204, 38206, 38208, + 38210, 38212, 38214, 38216, 38218, 38220, 38222, 38224, + 38226, 38228, 38230, 38232, 38234, 38236, 38238, 38240, + 38242, 38244, 38246, 38248, 38250, 38252, 38254, 38256, + 38258, 38260, 38262, 38264, 38266, 38268, 38270, 38272, + 38274, 38276, 38278, 38280, 38282, 38284, 38286, 38288, + 38290, 38292, 38294, 38296, 38298, 38300, 38302, 38304, + 38306, 38308, 38310, 38313, 38316, 38319, 38321, 38323, + 38325, 38327, 38329, 38331, 38333, 38335, 38337, 38339, + 38341, 38343, 38345, 38347, 38349, 38351, 38353, 38355, + 38357, 38359, 38361, 38363, 38365, 38367, 38369, 38371, + 38373, 38375, 38377, 38379, 38381, 38383, 38385, 38387, + 38389, 38391, 38393, 38395, 38397, 38399, 38401, 38403, + 38405, 38407, 38409, 38411, 38413, 38415, 38417, 38419, + 38421, 38423, 38425, 38427, 38429, 38431, 38433, 38435, + 38437, 38439, 38441, 38443, 38445, 38447, 38449, 38451, + 38453, 38455, 38457, 38459, 38461, 38463, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 38465, 38468, 38471, 38474, 38477, 38480, 38483, 38486, + 38489, 38492, 38495, 38498, 38501, 38504, 38507, 38510, + 38513, 38516, 38519, 38522, 38525, 38528, 38531, 38534, + 38537, 38540, 38543, 38546, 38549, 38552, 38555, 38558, + 38561, 38564, 38567, 38570, 38573, 38576, 38579, 38582, + 38585, 38588, 38591, 38594, 38597, 38600, 38603, 38606, + 38609, 38612, 38615, 38618, 38621, 38624, 38627, 38630, + 38633, 38636, 38639, 38642, 38645, 38648, 38651, 38654, + -1, -1, 38657, 38660, 38663, 38666, 38669, 38672, + 38675, 38678, 38681, 38684, 38687, 38690, 38693, 38696, + 38699, 38702, 38705, 38708, 38711, 38714, 38717, 38720, + 38723, 38726, 38729, 38732, 38735, 38738, 38741, 38744, + 38747, 38750, 38753, 38756, 38759, 38762, 38765, 38768, + 38771, 38774, 38777, 38780, 38783, 38786, 38789, 38792, + 38795, 38798, 38801, 38804, 38807, 38810, 38813, 38816, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 38819, 38822, 38825, 38829, 38833, 38837, 38841, 38845, + 38849, 38853, 38856, 38874, 38882, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 38886, 38887, 38888, 38889, 38890, 38891, 38892, 38893, + 38894, 38895, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 38896, 38897, 38898, 38899, 38900, 38901, 38902, 38903, + 38904, 38905, 38906, 38907, 38908, 38909, 38910, 38911, + 38912, 38913, 38914, 38915, 38916, -1, -1, 38917, + 38918, 38919, 38920, 38921, 38922, 38923, 38924, 38925, + 38926, 38927, 38928, -1, 38929, 38930, 38931, 38932, + 38933, 38934, 38935, 38936, 38937, 38938, 38939, 38940, + 38941, 38942, 38943, 38944, 38945, 38946, 38947, -1, + 38948, 38949, 38950, 38951, -1, -1, -1, -1, + 38952, 38954, 38956, -1, 38958, -1, 38960, 38962, + 38964, 38966, 38968, 38970, 38972, 38974, 38976, 38978, + 38980, 38981, 38982, 38983, 38984, 38985, 38986, 38987, + 38988, 38989, 38990, 38991, 38992, 38993, 38994, 38995, + 38996, 38997, 38998, 38999, 39000, 39001, 39002, 39003, + 39004, 39005, 39006, 39007, 39008, 39009, 39010, 39011, + 39012, 39013, 39014, 39015, 39016, 39017, 39018, 39019, + 39020, 39021, 39022, 39023, 39024, 39025, 39026, 39027, + 39028, 39029, 39030, 39031, 39032, 39033, 39034, 39035, + 39036, 39037, 39038, 39039, 39040, 39041, 39042, 39043, + 39044, 39045, 39046, 39047, 39048, 39049, 39050, 39051, + 39052, 39053, 39054, 39055, 39056, 39057, 39058, 39059, + 39060, 39061, 39062, 39063, 39064, 39065, 39066, 39067, + 39068, 39069, 39070, 39071, 39072, 39073, 39074, 39075, + 39076, 39077, 39078, 39079, 39080, 39081, 39082, 39083, + 39084, 39085, 39086, 39087, 39088, 39089, 39090, 39091, + 39092, 39093, 39094, 39095, 39096, 39097, 39099, 39101, + 39103, 39105, 39107, 39109, 39111, -1, -1, -1, + -1, 39113, 39114, 39115, 39116, 39117, 39118, 39119, + 39120, 39121, 39122, 39123, 39124, 39125, 39126, 39127, + 39128, 39129, 39130, 39131, 39132, 39133, 39134, 39135, + 39136, 39137, 39138, 39139, 39140, 39141, 39142, 39143, + 39144, 39145, 39146, 39147, 39148, 39149, 39150, 39151, + 39152, 39153, 39154, 39155, 39156, 39157, 39158, 39159, + 39160, 39161, 39162, 39163, 39164, 39165, 39166, 39167, + 39168, 39169, 39170, 39171, 39172, 39173, 39174, 39175, + 39176, 39177, 39178, 39179, 39180, 39181, 39182, 39183, + 39184, 39185, 39186, 39187, 39188, 39189, 39190, 39191, + 39192, 39193, 39194, 39195, 39196, 39197, 39198, 39199, + 39200, 39201, 39202, 39203, 39204, 39205, 39206, 39207, + 39208, 39209, 39210, 39211, 39212, 39213, 39214, 39215, + 39216, 39217, 39218, 39219, 39220, 39221, 39222, 39223, + 39224, 39225, 39226, 39227, 39228, 39229, 39230, 39231, + 39232, 39233, 39234, 39235, 39236, 39237, 39238, 39239, + 39240, 39241, 39242, 39243, 39244, 39245, 39246, 39247, + 39248, 39249, 39250, 39251, 39252, 39253, 39254, 39255, + 39256, 39257, 39258, 39259, 39260, 39261, 39262, 39263, + 39264, 39265, 39266, 39267, 39268, 39269, 39270, 39271, + 39272, 39273, 39274, 39275, 39276, 39277, 39278, 39279, + 39280, 39281, 39282, 39283, 39284, 39285, 39286, 39287, + 39288, 39289, 39290, 39291, 39292, 39293, 39294, 39295, + 39296, 39297, 39298, 39299, 39300, 39301, 39302, -1, + -1, -1, 39303, 39304, 39305, 39306, 39307, 39308, + -1, -1, 39309, 39310, 39311, 39312, 39313, 39314, + -1, -1, 39315, 39316, 39317, 39318, 39319, 39320, + -1, -1, 39321, 39322, 39323, -1, -1, -1, + 39324, 39325, 39326, 39327, 39328, 39329, 39330, -1, + 39331, 39332, 39333, 39334, 39335, 39336, 39337, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6570, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6572, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 39342, 39343, 39344, 39345, 39346, -1, 39347, + 39348, 39349, 39350, 39351, 39352, 39353, 39354, 39355, + 39356, 39357, 39358, 39359, 39360, 39361, 39362, 39363, + 39364, 39365, 39366, 39367, 39368, 39369, 39370, 39371, + 39372, 39373, 39374, 39375, 39376, 39377, 39378, 39379, + 39380, 39381, 39382, 39383, 39384, 39385, 39386, 39387, + 39388, -1, 39389, 39390, 39391, 39392, 39393, 39394, + 39395, 39396, 39397, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6630, -1, 6632, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6634, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6636, 6638, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6640, 6642, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6644, -1, 6646, -1, -1, + -1, -1, -1, -1, -1, -1, 6648, -1, + -1, 6650, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6652, -1, 6654, + 6656, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6658, 6660, -1, 6662, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6664, 6666, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 6668, -1, -1, -1, -1, -1, -1, -1, + -1, 6670, 6672, 6674, 6676, 6678, 6680, 6682, + 6684, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 6686, 6688, 6690, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 39460, 39461, + 39462, 39463, 39464, 39465, 39466, 39467, 39468, 39469, + 39470, 39471, 39472, 39473, 39474, 39475, 39476, 39477, + 39478, 39479, 39480, 39481, 39482, 39483, 39484, 39485, + 39486, 39487, 39488, 39489, 39490, 39491, 39492, 39493, + 39494, 39495, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6728, 6730, + 6732, 6734, 6736, 6738, 6740, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6742, 6744, 6746, 6748, 6750, + 6752, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 39522, 39523, 39524, 39525, 39526, 39527, 39528, 39529, + 39530, 39531, 39532, 39533, 39534, 39535, 39536, 39537, + 39538, 39539, 39540, 39541, 39542, 39543, 39544, 39545, + 39546, 39547, 39548, 39549, 39550, 39551, 39552, 39553, + 39554, 39555, 39556, 39557, 39558, 39559, 39560, 39561, + 39562, 39563, 39564, 39565, 39566, 39567, 39568, 39569, + 39570, 39571, 39572, 39573, 39574, 39575, 39576, 39577, + 39578, 39579, 39580, 39581, 39582, 39583, 39584, 39585, + 39586, 39587, 39588, 39589, 39590, 39591, 39592, 39593, + 39594, 39595, 39596, 39597, 39598, 39599, 39600, 39601, + 39602, 39603, 39604, 39605, 39606, -1, 39607, 39608, + 39609, 39610, 39611, 39612, 39613, 39614, 39615, 39616, + 39617, 39618, 39619, 39620, 39621, 39622, 39623, 39624, + 39625, 39626, 39627, 39628, 39629, 39630, 39631, 39632, + 39633, 39634, 39635, 39636, 39637, 39638, 39639, 39640, + 39641, 39642, 39643, 39644, 39645, 39646, 39647, 39648, + 39649, 39650, 39651, 39652, 39653, 39654, 39655, 39656, + 39657, 39658, 39659, 39660, 39661, 39662, 39663, 39664, + 39665, 39666, 39667, 39668, 39669, 39670, 39671, 39672, + 39673, 39674, 39675, 39676, 39677, -1, 39678, 39679, + -1, -1, 39680, -1, -1, 39681, 39682, -1, + -1, 39683, 39684, 39685, 39686, -1, 39687, 39688, + 39689, 39690, 39691, 39692, 39693, 39694, 39695, 39696, + 39697, 39698, -1, 39699, -1, 39700, 39701, 39702, + 39703, 39704, 39705, 39706, -1, 39707, 39708, 39709, + 39710, 39711, 39712, 39713, 39714, 39715, 39716, 39717, + 39718, 39719, 39720, 39721, 39722, 39723, 39724, 39725, + 39726, 39727, 39728, 39729, 39730, 39731, 39732, 39733, + 39734, 39735, 39736, 39737, 39738, 39739, 39740, 39741, + 39742, 39743, 39744, 39745, 39746, 39747, 39748, 39749, + 39750, 39751, 39752, 39753, 39754, 39755, 39756, 39757, + 39758, 39759, 39760, 39761, 39762, 39763, 39764, 39765, + 39766, 39767, 39768, 39769, 39770, 39771, -1, 39772, + 39773, 39774, 39775, -1, -1, 39776, 39777, 39778, + 39779, 39780, 39781, 39782, 39783, -1, 39784, 39785, + 39786, 39787, 39788, 39789, 39790, -1, 39791, 39792, + 39793, 39794, 39795, 39796, 39797, 39798, 39799, 39800, + 39801, 39802, 39803, 39804, 39805, 39806, 39807, 39808, + 39809, 39810, 39811, 39812, 39813, 39814, 39815, 39816, + 39817, 39818, -1, 39819, 39820, 39821, 39822, -1, + 39823, 39824, 39825, 39826, 39827, -1, 39828, -1, + -1, -1, 39829, 39830, 39831, 39832, 39833, 39834, + 39835, -1, 39836, 39837, 39838, 39839, 39840, 39841, + 39842, 39843, 39844, 39845, 39846, 39847, 39848, 39849, + 39850, 39851, 39852, 39853, 39854, 39855, 39856, 39857, + 39858, 39859, 39860, 39861, 39862, 39863, 39864, 39865, + 39866, 39867, 39868, 39869, 39870, 39871, 39872, 39873, + 39874, 39875, 39876, 39877, 39878, 39879, 39880, 39881, + 39882, 39883, 39884, 39885, 39886, 39887, 39888, 39889, + 39890, 39891, 39892, 39893, 39894, 39895, 39896, 39897, + 39898, 39899, 39900, 39901, 39902, 39903, 39904, 39905, + 39906, 39907, 39908, 39909, 39910, 39911, 39912, 39913, + 39914, 39915, 39916, 39917, 39918, 39919, 39920, 39921, + 39922, 39923, 39924, 39925, 39926, 39927, 39928, 39929, + 39930, 39931, 39932, 39933, 39934, 39935, 39936, 39937, + 39938, 39939, 39940, 39941, 39942, 39943, 39944, 39945, + 39946, 39947, 39948, 39949, 39950, 39951, 39952, 39953, + 39954, 39955, 39956, 39957, 39958, 39959, 39960, 39961, + 39962, 39963, 39964, 39965, 39966, 39967, 39968, 39969, + 39970, 39971, 39972, 39973, 39974, 39975, 39976, 39977, + 39978, 39979, 39980, 39981, 39982, 39983, 39984, 39985, + 39986, 39987, 39988, 39989, 39990, 39991, 39992, 39993, + 39994, 39995, 39996, 39997, 39998, 39999, 40000, 40001, + 40002, 40003, 40004, 40005, 40006, 40007, 40008, 40009, + 40010, 40011, 40012, 40013, 40014, 40015, 40016, 40017, + 40018, 40019, 40020, 40021, 40022, 40023, 40024, 40025, + 40026, 40027, 40028, 40029, 40030, 40031, 40032, 40033, + 40034, 40035, 40036, 40037, 40038, 40039, 40040, 40041, + 40042, 40043, 40044, 40045, 40046, 40047, 40048, 40049, + 40050, 40051, 40052, 40053, 40054, 40055, 40056, 40057, + 40058, 40059, 40060, 40061, 40062, 40063, 40064, 40065, + 40066, 40067, 40068, 40069, 40070, 40071, 40072, 40073, + 40074, 40075, 40076, 40077, 40078, 40079, 40080, 40081, + 40082, 40083, 40084, 40085, 40086, 40087, 40088, 40089, + 40090, 40091, 40092, 40093, 40094, 40095, 40096, 40097, + 40098, 40099, 40100, 40101, 40102, 40103, 40104, 40105, + 40106, 40107, 40108, 40109, 40110, 40111, 40112, 40113, + 40114, 40115, 40116, 40117, 40118, 40119, 40120, 40121, + 40122, 40123, 40124, 40125, 40126, 40127, 40128, 40129, + 40130, 40131, 40132, 40133, 40134, 40135, 40136, 40137, + 40138, 40139, 40140, 40141, 40142, 40143, 40144, 40145, + 40146, 40147, 40148, 40149, 40150, 40151, 40152, 40153, + 40154, 40155, 40156, 40157, 40158, 40159, 40160, 40161, + 40162, 40163, 40164, 40165, 40166, 40167, 40168, 40169, + 40170, 40171, 40172, 40173, 40174, 40175, -1, -1, + 40176, 40177, 40178, 40179, 40180, 40181, 40182, 40183, + 40184, 40185, 40186, 40187, 40188, 40189, 40190, 40191, + 40192, 40193, 40194, 40195, 40196, 40197, 40198, 40199, + 40200, 40201, 40202, 40203, 40204, 40205, 40206, 40207, + 40208, 40209, 40210, 40211, 40212, 40213, 40214, 40215, + 40216, 40217, 40218, 40219, 40220, 40221, 40222, 40223, + 40224, 40225, 40226, 40227, 40228, 40229, 40230, 40231, + 40232, 40233, 40234, 40235, 40236, 40237, 40238, 40239, + 40240, 40241, 40242, 40243, 40244, 40245, 40246, 40247, + 40248, 40249, 40250, 40251, 40252, 40253, 40254, 40255, + 40256, 40257, 40258, 40259, 40260, 40261, 40262, 40263, + 40264, 40265, 40266, 40267, 40268, 40269, 40270, 40271, + 40272, 40273, 40274, 40275, 40276, 40277, 40278, 40279, + 40280, 40281, 40282, 40283, 40284, 40285, 40286, 40287, + 40288, 40289, 40290, 40291, 40292, 40293, 40294, 40295, + 40296, 40297, 40298, 40299, 40300, 40301, 40302, 40303, + 40304, 40305, 40306, 40307, 40308, 40309, 40310, 40311, + 40312, 40313, 40314, 40315, 40316, 40317, 40318, 40319, + 40320, 40321, 40322, 40323, 40324, 40325, 40326, 40327, + 40328, 40329, 40330, 40331, 40332, 40333, 40334, 40335, + 40336, 40337, 40338, 40339, 40340, 40341, 40342, 40343, + 40344, 40345, 40346, 40347, 40348, 40349, 40350, 40351, + 40352, 40353, 40354, 40355, 40356, 40357, 40358, 40359, + 40360, 40361, 40362, 40363, 40364, 40365, 40366, 40367, + 40368, 40369, 40370, 40371, 40372, 40373, 40374, 40375, + 40376, 40377, 40378, 40379, 40380, 40381, 40382, 40383, + 40384, 40385, 40386, 40387, 40388, 40389, 40390, 40391, + 40392, 40393, 40394, 40395, 40396, 40397, 40398, 40399, + 40400, 40401, 40402, 40403, 40404, 40405, 40406, 40407, + 40408, 40409, 40410, 40411, 40412, 40413, 40414, 40415, + 40416, 40417, 40418, 40419, 40420, 40421, 40422, 40423, + 40424, 40425, 40426, 40427, 40428, 40429, 40430, 40431, + 40432, 40433, 40434, 40435, 40436, 40437, 40438, 40439, + 40440, 40441, 40442, 40443, 40444, 40445, 40446, 40447, + 40448, 40449, 40450, 40451, 40452, 40453, 40454, 40455, + 40456, 40457, 40458, 40459, 40460, 40461, 40462, 40463, + 40464, 40465, 40466, 40467, -1, -1, 40468, 40469, + 40470, 40471, 40472, 40473, 40474, 40475, 40476, 40477, + 40478, 40479, 40480, 40481, 40482, 40483, 40484, 40485, + 40486, 40487, 40488, 40489, 40490, 40491, 40492, 40493, + 40494, 40495, 40496, 40497, 40498, 40499, 40500, 40501, + 40502, 40503, 40504, 40505, 40506, 40507, 40508, 40509, + 40510, 40511, 40512, 40513, 40514, 40515, 40516, 40517, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 40518, 40519, 40520, 40521, 40522, 40523, 40524, 40525, + 40526, 40527, 40528, 40529, 40530, 40531, 40532, 40533, + 40534, 40535, 40536, 40537, 40538, 40539, 40540, 40541, + 40542, 40543, 40544, 40545, 40546, 40547, 40548, 40549, + 40550, 40551, 40552, 40553, 40554, 40555, 40556, 40557, + 40558, 40559, 40560, 40561, 40562, 40563, 40564, 40565, + 40566, 40567, 40568, 40569, 40570, 40571, 40572, 40573, + 40574, 40575, 40576, 40577, 40578, 40579, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 40580, 40581, 40582, 40583, -1, 40584, 40585, 40586, + 40587, 40588, 40589, 40590, 40591, 40592, 40593, 40594, + 40595, 40596, 40597, 40598, 40599, 40600, 40601, 40602, + 40603, 40604, 40605, 40606, 40607, 40608, 40609, 40610, + -1, 40611, 40612, -1, 40613, -1, -1, 40614, + -1, 40615, 40616, 40617, 40618, 40619, 40620, 40621, + 40622, 40623, 40624, -1, 40625, 40626, 40627, 40628, + -1, 40629, -1, 40630, -1, -1, -1, -1, + -1, -1, 40631, -1, -1, -1, -1, 40632, + -1, 40633, -1, 40634, -1, 40635, 40636, 40637, + -1, 40638, 40639, -1, 40640, -1, -1, 40641, + -1, 40642, -1, 40643, -1, 40644, -1, 40645, + -1, 40646, 40647, -1, 40648, -1, -1, 40649, + 40650, 40651, 40652, -1, 40653, 40654, 40655, 40656, + 40657, 40658, 40659, -1, 40660, 40661, 40662, 40663, + -1, 40664, 40665, 40666, 40667, -1, 40668, -1, + 40669, 40670, 40671, 40672, 40673, 40674, 40675, 40676, + 40677, 40678, -1, 40679, 40680, 40681, 40682, 40683, + 40684, 40685, 40686, 40687, 40688, 40689, 40690, 40691, + 40692, 40693, 40694, 40695, -1, -1, -1, -1, + -1, 40696, 40697, 40698, -1, 40699, 40700, 40701, + 40702, 40703, -1, 40704, 40705, 40706, 40707, 40708, + 40709, 40710, 40711, 40712, 40713, 40714, 40715, 40716, + 40717, 40718, 40719, 40720, -1, -1, -1, -1, + 40721, 40723, 40725, 40727, 40729, 40731, 40733, 40735, + 40737, 40739, 40741, -1, -1, -1, -1, -1, + 40743, 40746, 40749, 40752, 40755, 40758, 40761, 40764, + 40767, 40770, 40773, 40776, 40779, 40782, 40785, 40788, + 40791, 40794, 40797, 40800, 40803, 40806, 40809, 40812, + 40815, 40818, 40821, 40824, 40825, 40826, 40828, -1, + 40830, 40831, 40832, 40833, 40834, 40835, 40836, 40837, + 40838, 40839, 40840, 40841, 40842, 40843, 40844, 40845, + 40846, 40847, 40848, 40849, 40850, 40851, 40852, 40853, + 40854, 40855, 40856, 40858, 40860, 40862, 40864, 40867, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 40869, 40871, 40873, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 40875, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 40877, 40879, 40881, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 40882, 40883, 40884, 40885, 40886, 40887, 40888, 40889, + 40890, 40891, 40892, 40893, 40894, 40895, 40896, 40897, + 40898, 40899, 40900, 40901, 40902, 40903, 40904, 40905, + 40906, 40907, 40908, 40909, 40910, 40911, 40912, 40913, + 40914, 40915, 40916, 40917, 40918, 40919, 40920, 40921, + 40922, 40923, 40924, 40925, -1, -1, -1, -1, + 40926, 40929, 40932, 40935, 40938, 40941, 40944, 40947, + 40950, -1, -1, -1, -1, -1, -1, -1, + 40953, 40954, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 40955, 40956, 40957, 40958, 40959, 40960, 40961, 40962, + 40963, 40964, -1, -1, -1, -1, -1, -1, + 8197, 8198, 8199, 8200, 8201, 8202, 8203, 8204, + 8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212, + 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8220, + 8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228, + 8229, 8230, 8231, 8232, 8233, 8234, 8235, 8236, + 8237, 8238, 8239, 8240, 8241, 8242, 8243, 8244, + 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, + 8253, 8254, 8255, 8256, 8257, 8258, 8259, 8260, + 8261, 8262, 8263, 8264, 8265, 8266, 8267, 8268, + 8269, 8270, 8271, 8272, 8273, 8274, 8275, 8276, + 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284, + 8285, 8286, 8287, 8288, 8289, 8290, 8291, 8292, + 8293, 8294, 8295, 8296, 8297, 8298, 8299, 8300, + 8301, 8302, 8303, 8304, 8305, 8306, 8307, 8308, + 8309, 8310, 8311, 8312, 8313, 8314, 8315, 8316, + 8317, 8318, 8319, 8320, 8321, 8322, 8323, 8324, + 8325, 8326, 8327, 8328, 8329, 8330, 8331, 8332, + 8333, 8334, 8335, 8336, 8337, 8338, 8339, 8340, + 8341, 8342, 8343, 8344, 8345, 8346, 8347, 8348, + 8349, 8350, 8351, 8352, 8353, 8354, 8355, 8356, + 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, + 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, + 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, + 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, + 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, + 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, + 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, + 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, + 8421, 8422, 8423, 8424, 8425, 8426, 8427, 8428, + 8429, 8430, 8431, 8432, 8433, 8434, 8435, 8436, + 8437, 8438, 8439, 8440, 8441, 8442, 8443, 8444, + 8445, 8446, 8447, 8448, 8449, 8450, 8451, 8452, + 8453, 8454, 8455, 8456, 8457, 8458, 8459, 8460, + 8461, 8462, 8463, 8464, 8465, 8466, 8467, 8468, + 8469, 8470, 8471, 8472, 8473, 8474, 8475, 8476, + 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, + 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, + 8493, 8494, 8495, 8496, 8497, 8498, 8499, 8500, + 8501, 8502, 8503, 8504, 8505, 8506, 8507, 8508, + 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, + 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, + 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, + 8533, 8534, 8535, 8536, 8537, 8538, 8539, 8540, + 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, + 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, + 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, + 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, + 8573, 8574, 8575, 8576, 8577, 8578, 8579, 8580, + 8581, 8582, 8583, 8584, 8585, 8586, 8587, 8588, + 8589, 8590, 8591, 8592, 8593, 8594, 8595, 8596, + 8597, 8598, 8599, 8600, 8601, 8602, 8603, 8604, + 8605, 8606, 8607, 8608, 8609, 8610, 8611, 8612, + 8613, 8614, 8615, 8616, 8617, 8618, 8619, 8620, + 8621, 8622, 8623, 8624, 8625, 8626, 8627, 8628, + 8629, 8630, 8631, 8632, 8633, 8634, 8635, 8636, + 8637, 8638, 8639, 8640, 8641, 8642, 8643, 8644, + 8645, 8646, 8647, 8648, 8649, 8650, 8651, 8652, + 8653, 8654, 8655, 8656, 8657, 8658, 8659, 8660, + 8661, 8662, 8663, 8664, 8665, 8666, 8667, 8668, + 8669, 8670, 8671, 8672, 8673, 8674, 8675, 8676, + 8677, 8678, 8679, 8680, 8681, 8682, 8683, 8684, + 8685, 8686, 8687, 8688, 8689, 8690, 8691, 8692, + 8693, 8694, 8695, 8696, 8697, 8698, 8699, 8700, + 8701, 8702, 8703, 8704, 8705, 8706, 8707, 8708, + 8709, 8710, 8711, 8712, 8713, 8714, 8715, 8716, + 8717, 8718, 8719, 8720, 8721, 8722, 8723, 8724, + 8725, 8726, 8727, 8728, 8729, 8730, 8731, 8732, + 8733, 8734, 8735, 8736, 8737, 8738, -1, -1 + } +}; diff --git a/include/libgnulib/uninorm/normalize-internal.h b/include/libgnulib/uninorm/normalize-internal.h new file mode 100755 index 0000000..a53d2dd --- /dev/null +++ b/include/libgnulib/uninorm/normalize-internal.h @@ -0,0 +1,35 @@ +/* Normalization of Unicode strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include "unitypes.h" + +/* Complete definition of normalization form descriptor. */ +struct unicode_normalization_form +{ + /* Bit mask containing meta-information. + This must be the first field. */ + unsigned int description; + #define NF_IS_COMPAT_DECOMPOSING (1 << 0) + #define NF_IS_COMPOSING (1 << 1) + /* Function that decomposes a Unicode character. */ + int (*decomposer) (ucs4_t uc, ucs4_t *decomposition); + /* Function that combines two Unicode characters, a starter and another + character. */ + ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2); + /* Decomposing variant. */ + const struct unicode_normalization_form *decomposing_variant; +}; diff --git a/include/libgnulib/uninorm/u-normalize-internal.h b/include/libgnulib/uninorm/u-normalize-internal.h new file mode 100755 index 0000000..9f5e0b0 --- /dev/null +++ b/include/libgnulib/uninorm/u-normalize-internal.h @@ -0,0 +1,380 @@ +/* Decomposition and composition of Unicode strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (uninorm_t nf, const UNIT *s, size_t n, + UNIT *resultbuf, size_t *lengthp) +{ + int (*decomposer) (ucs4_t uc, ucs4_t *decomposition) = nf->decomposer; + ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2) = nf->composer; + + /* The result being accumulated. */ + UNIT *result; + size_t length; + size_t allocated; + /* The buffer for sorting. */ + #define SORTBUF_PREALLOCATED 64 + struct ucs4_with_ccc sortbuf_preallocated[2 * SORTBUF_PREALLOCATED]; + struct ucs4_with_ccc *sortbuf; /* array of size 2 * sortbuf_allocated */ + size_t sortbuf_allocated; + size_t sortbuf_count; + + /* Initialize the accumulator. */ + if (resultbuf == NULL) + { + result = NULL; + allocated = 0; + } + else + { + result = resultbuf; + allocated = *lengthp; + } + length = 0; + + /* Initialize the buffer for sorting. */ + sortbuf = sortbuf_preallocated; + sortbuf_allocated = SORTBUF_PREALLOCATED; + sortbuf_count = 0; + + { + const UNIT *s_end = s + n; + + for (;;) + { + int count; + ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; + int decomposed_count; + int i; + + if (s < s_end) + { + /* Fetch the next character. */ + count = U_MBTOUC_UNSAFE (&decomposed[0], s, s_end - s); + decomposed_count = 1; + + /* Decompose it, recursively. + It would be possible to precompute the recursive decomposition + and store it in a table. But this would significantly increase + the size of the decomposition tables, because for example for + U+1FC1 the recursive canonical decomposition and the recursive + compatibility decomposition are different. */ + { + int curr; + + for (curr = 0; curr < decomposed_count; ) + { + /* Invariant: decomposed[0..curr-1] is fully decomposed, i.e. + all elements are atomic. */ + ucs4_t curr_decomposed[UC_DECOMPOSITION_MAX_LENGTH]; + int curr_decomposed_count; + + curr_decomposed_count = decomposer (decomposed[curr], curr_decomposed); + if (curr_decomposed_count >= 0) + { + /* Move curr_decomposed[0..curr_decomposed_count-1] over + decomposed[curr], making room. It's not worth using + memcpy() here, since the counts are so small. */ + int shift = curr_decomposed_count - 1; + + if (shift < 0) + abort (); + if (shift > 0) + { + int j; + + decomposed_count += shift; + if (decomposed_count > UC_DECOMPOSITION_MAX_LENGTH) + abort (); + for (j = decomposed_count - 1 - shift; j > curr; j--) + decomposed[j + shift] = decomposed[j]; + } + for (; shift >= 0; shift--) + decomposed[curr + shift] = curr_decomposed[shift]; + } + else + { + /* decomposed[curr] is atomic. */ + curr++; + } + } + } + } + else + { + count = 0; + decomposed_count = 0; + } + + i = 0; + for (;;) + { + ucs4_t uc; + int ccc; + + if (s < s_end) + { + /* Fetch the next character from the decomposition. */ + if (i == decomposed_count) + break; + uc = decomposed[i]; + ccc = uc_combining_class (uc); + } + else + { + /* End of string reached. */ + uc = 0; + ccc = 0; + } + + if (ccc == 0) + { + size_t j; + + /* Apply the canonical ordering algorithm to the accumulated + sequence of characters. */ + if (sortbuf_count > 1) + gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count, + sortbuf + sortbuf_count); + + if (composer != NULL) + { + /* Attempt to combine decomposed characters, as specified + in the Unicode Standard Annex #15 "Unicode Normalization + Forms". We need to check + 1. whether the first accumulated character is a + "starter" (i.e. has ccc = 0). This is usually the + case. But when the string starts with a + non-starter, the sortbuf also starts with a + non-starter. Btw, this check could also be + omitted, because the composition table has only + entries (code1, code2) for which code1 is a + starter; if the first accumulated character is not + a starter, no lookup will succeed. + 2. If the sortbuf has more than one character, check + for each of these characters that are not "blocked" + from the starter (i.e. have a ccc that is higher + than the ccc of the previous character) whether it + can be combined with the first character. + 3. If only one character is left in sortbuf, check + whether it can be combined with the next character + (also a starter). */ + if (sortbuf_count > 0 && sortbuf[0].ccc == 0) + { + for (j = 1; j < sortbuf_count; ) + { + if (sortbuf[j].ccc > sortbuf[j - 1].ccc) + { + ucs4_t combined = + composer (sortbuf[0].code, sortbuf[j].code); + if (combined) + { + size_t k; + + sortbuf[0].code = combined; + /* sortbuf[0].ccc = 0, still valid. */ + for (k = j + 1; k < sortbuf_count; k++) + sortbuf[k - 1] = sortbuf[k]; + sortbuf_count--; + continue; + } + } + j++; + } + if (s < s_end && sortbuf_count == 1) + { + ucs4_t combined = + composer (sortbuf[0].code, uc); + if (combined) + { + uc = combined; + ccc = 0; + /* uc could be further combined with subsequent + characters. So don't put it into sortbuf[0] in + this round, only in the next round. */ + sortbuf_count = 0; + } + } + } + } + + for (j = 0; j < sortbuf_count; j++) + { + ucs4_t muc = sortbuf[j].code; + + /* Append muc to the result accumulator. */ + if (length < allocated) + { + int ret = + U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail; + } + if (ret >= 0) + { + length += ret; + goto done_appending; + } + } + { + size_t old_allocated = allocated; + size_t new_allocated = 2 * old_allocated; + if (new_allocated < 64) + new_allocated = 64; + if (new_allocated < old_allocated) /* integer overflow? */ + abort (); + { + UNIT *larger_result; + if (result == NULL) + { + larger_result = + (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + else if (result == resultbuf) + { + larger_result = + (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + U_CPY (larger_result, resultbuf, length); + } + else + { + larger_result = + (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + result = larger_result; + allocated = new_allocated; + { + int ret = + U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail; + } + if (ret < 0) + abort (); + length += ret; + goto done_appending; + } + } + } + done_appending: ; + } + + /* sortbuf is now empty. */ + sortbuf_count = 0; + } + + if (!(s < s_end)) + /* End of string reached. */ + break; + + /* Append (uc, ccc) to sortbuf. */ + if (sortbuf_count == sortbuf_allocated) + { + struct ucs4_with_ccc *new_sortbuf; + + sortbuf_allocated = 2 * sortbuf_allocated; + if (sortbuf_allocated < sortbuf_count) /* integer overflow? */ + abort (); + new_sortbuf = + (struct ucs4_with_ccc *) malloc (2 * sortbuf_allocated * sizeof (struct ucs4_with_ccc)); + if (new_sortbuf == NULL) + { + errno = ENOMEM; + goto fail; + } + memcpy (new_sortbuf, sortbuf, + sortbuf_count * sizeof (struct ucs4_with_ccc)); + if (sortbuf != sortbuf_preallocated) + free (sortbuf); + sortbuf = new_sortbuf; + } + sortbuf[sortbuf_count].code = uc; + sortbuf[sortbuf_count].ccc = ccc; + sortbuf_count++; + + i++; + } + + if (!(s < s_end)) + /* End of string reached. */ + break; + + s += count; + } + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + UNIT *memory; + + memory = (UNIT *) realloc (result, length * sizeof (UNIT)); + if (memory != NULL) + result = memory; + } + + if (sortbuf_count > 0) + abort (); + if (sortbuf != sortbuf_preallocated) + free (sortbuf); + + *lengthp = length; + return result; + + fail: + { + int saved_errno = errno; + if (sortbuf != sortbuf_preallocated) + free (sortbuf); + if (result != resultbuf) + free (result); + errno = saved_errno; + } + return NULL; +} diff --git a/include/libgnulib/uninorm/u-normcmp.h b/include/libgnulib/uninorm/u-normcmp.h new file mode 100755 index 0000000..f846d51 --- /dev/null +++ b/include/libgnulib/uninorm/u-normcmp.h @@ -0,0 +1,72 @@ +/* Normalization insensitive comparison of Unicode strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2, + uninorm_t nf, int *resultp) +{ + UNIT buf1[2048 / sizeof (UNIT)]; + UNIT buf2[2048 / sizeof (UNIT)]; + UNIT *norms1; + size_t norms1_length; + UNIT *norms2; + size_t norms2_length; + int cmp; + + /* Normalize S1. */ + norms1_length = sizeof (buf1) / sizeof (UNIT); + norms1 = U_NORMALIZE (nf, s1, n1, buf1, &norms1_length); + if (norms1 == NULL) + /* errno is set here. */ + return -1; + + /* Normalize S2. */ + norms2_length = sizeof (buf2) / sizeof (UNIT); + norms2 = U_NORMALIZE (nf, s2, n2, buf2, &norms2_length); + if (norms2 == NULL) + { + if (norms1 != buf1) + { + int saved_errno = errno; + free (norms1); + errno = saved_errno; + } + return -1; + } + + /* Compare the normalized strings. */ + cmp = U_CMP2 (norms1, norms1_length, norms2, norms2_length); + if (cmp > 0) + cmp = 1; + else if (cmp < 0) + cmp = -1; + + if (norms2 != buf2) + free (norms2); + if (norms1 != buf1) + free (norms1); + *resultp = cmp; + return 0; +} diff --git a/include/libgnulib/uninorm/u-normcoll.h b/include/libgnulib/uninorm/u-normcoll.h new file mode 100755 index 0000000..7543e48 --- /dev/null +++ b/include/libgnulib/uninorm/u-normcoll.h @@ -0,0 +1,73 @@ +/* Locale dependent, normalization insensitive comparison of Unicode strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2, + uninorm_t nf, int *resultp) +{ + char buf1[2048]; + char buf2[2048]; + char *transformed1; + size_t transformed1_length; + char *transformed2; + size_t transformed2_length; + int cmp; + + /* Normalize and transform S1. */ + transformed1_length = sizeof (buf1); + transformed1 = U_NORMXFRM (s1, n1, nf, buf1, &transformed1_length); + if (transformed1 == NULL) + /* errno is set here. */ + return -1; + + /* Normalize and transform S2. */ + transformed2_length = sizeof (buf2); + transformed2 = U_NORMXFRM (s2, n2, nf, buf2, &transformed2_length); + if (transformed2 == NULL) + { + if (transformed1 != buf1) + { + int saved_errno = errno; + free (transformed1); + errno = saved_errno; + } + return -1; + } + + /* Compare the transformed strings. */ + cmp = memcmp2 (transformed1, transformed1_length, + transformed2, transformed2_length); + if (cmp < 0) + cmp = -1; + else if (cmp > 0) + cmp = 1; + + if (transformed2 != buf2) + free (transformed2); + if (transformed1 != buf1) + free (transformed1); + *resultp = cmp; + return 0; +} diff --git a/include/libgnulib/uninorm/u-normxfrm.h b/include/libgnulib/uninorm/u-normxfrm.h new file mode 100755 index 0000000..2d7f10e --- /dev/null +++ b/include/libgnulib/uninorm/u-normxfrm.h @@ -0,0 +1,95 @@ +/* Locale dependent transformation for comparison of Unicode strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +char * +FUNC (const UNIT *s, size_t n, uninorm_t nf, + char *resultbuf, size_t *lengthp) +{ + UNIT normsbuf[2048 / sizeof (UNIT)]; + UNIT *norms; + size_t norms_length; + char convsbuf[2048]; + char *convs; + size_t convs_length; + char *result; + + /* Normalize the Unicode string. */ + norms_length = sizeof (normsbuf) / sizeof (UNIT); + norms = U_NORMALIZE (nf, s, n, normsbuf, &norms_length); + if (norms == NULL) + /* errno is set here. */ + return NULL; + + /* Convert it to locale encoding. */ + convs_length = sizeof (convsbuf) - 1; + convs = U_CONV_TO_ENCODING (locale_charset (), + iconveh_error, + norms, norms_length, + NULL, + convsbuf, &convs_length); + if (convs == NULL) + { + if (norms != normsbuf) + { + int saved_errno = errno; + free (norms); + errno = saved_errno; + } + return NULL; + } + + if (norms != normsbuf) + free (norms); + + /* Ensure one more byte is available. */ + if (convs != convsbuf) + { + char *memory = (char *) realloc (convs, convs_length + 1); + if (memory == NULL) + { + free (convs); + errno = ENOMEM; + return NULL; + } + convs = memory; + } + + /* Apply locale dependent transformations for comparison. */ + result = amemxfrm (convs, convs_length, resultbuf, lengthp); + if (result == NULL) + { + if (convs != convsbuf) + { + int saved_errno = errno; + free (convs); + errno = saved_errno; + } + return NULL; + } + + if (convs != convsbuf) + free (convs); + return result; +} diff --git a/include/libgnulib/unistd--.h b/include/libgnulib/unistd--.h new file mode 100755 index 0000000..4c555d4 --- /dev/null +++ b/include/libgnulib/unistd--.h @@ -0,0 +1,32 @@ +/* Like unistd.h, but redefine some names to avoid glitches. + + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#include +#include "unistd-safer.h" + +#undef dup +#define dup dup_safer + +#undef pipe +#define pipe pipe_safer + +#if GNULIB_PIPE2_SAFER +# undef pipe2 +# define pipe2 pipe2_safer +#endif diff --git a/include/libgnulib/unistd-safer.h b/include/libgnulib/unistd-safer.h new file mode 100755 index 0000000..70562c9 --- /dev/null +++ b/include/libgnulib/unistd-safer.h @@ -0,0 +1,41 @@ +/* Invoke unistd-like functions, but avoid some glitches. + + Copyright (C) 2001, 2003, 2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert and Eric Blake. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +int dup_safer (int); +int fd_safer (int); +int pipe_safer (int[2]); + +#if GNULIB_FD_SAFER_FLAG +int dup_safer_flag (int, int); +int fd_safer_flag (int, int); +#endif + +#if GNULIB_PIPE2_SAFER +int pipe2_safer (int[2], int); +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/unistdio/u-asnprintf.h b/include/libgnulib/unistdio/u-asnprintf.h new file mode 100755 index 0000000..302b3e5 --- /dev/null +++ b/include/libgnulib/unistdio/u-asnprintf.h @@ -0,0 +1,36 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007, 2009-2024 Free Software Foundation, + Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +DCHAR_T * +ASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, ...) +{ + va_list args; + DCHAR_T *result; + + va_start (args, format); + result = VASNPRINTF (resultbuf, lengthp, format, args); + va_end (args); + return result; +} diff --git a/include/libgnulib/unistdio/u-asprintf.h b/include/libgnulib/unistdio/u-asprintf.h new file mode 100755 index 0000000..bbec610 --- /dev/null +++ b/include/libgnulib/unistdio/u-asprintf.h @@ -0,0 +1,36 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007, 2009-2024 Free Software Foundation, + Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +ASPRINTF (DCHAR_T **resultp, const FCHAR_T *format, ...) +{ + va_list args; + int result; + + va_start (args, format); + result = VASPRINTF (resultp, format, args); + va_end (args); + return result; +} diff --git a/include/libgnulib/unistdio/u-printf-args.h b/include/libgnulib/unistdio/u-printf-args.h new file mode 100755 index 0000000..e8c3875 --- /dev/null +++ b/include/libgnulib/unistdio/u-printf-args.h @@ -0,0 +1,36 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002, 2005-2007, 2009-2024 Free Software Foundation, + Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#ifndef _U_PRINTF_ARGS_H +#define _U_PRINTF_ARGS_H + +#include "unitypes.h" + +/* Parametrization of printf-args.h. */ +#define ENABLE_UNISTDIO 1 +#define PRINTF_FETCHARGS u_printf_fetchargs +#include "printf-args.h" + +#endif /* _U_PRINTF_ARGS_H */ diff --git a/include/libgnulib/unistdio/u-printf-parse.h b/include/libgnulib/unistdio/u-printf-parse.h new file mode 100755 index 0000000..6292aa1 --- /dev/null +++ b/include/libgnulib/unistdio/u-printf-parse.h @@ -0,0 +1,36 @@ +/* Parse printf format string. + Copyright (C) 1999, 2002, 2005, 2007, 2009-2024 Free Software Foundation, + Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#ifndef _U_PRINTF_PARSE_H +#define _U_PRINTF_PARSE_H + +#include "unistdio/u-printf-args.h" + +/* Parametrization of printf-parse.h. */ +#undef ENABLE_UNISTDIO +#define ENABLE_UNISTDIO 1 +#include "printf-parse.h" + +#endif /* _U_PRINTF_PARSE_H */ diff --git a/include/libgnulib/unistdio/u-snprintf.h b/include/libgnulib/unistdio/u-snprintf.h new file mode 100755 index 0000000..c74bf87 --- /dev/null +++ b/include/libgnulib/unistdio/u-snprintf.h @@ -0,0 +1,36 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007, 2009-2024 Free Software Foundation, + Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +SNPRINTF (DCHAR_T *buf, size_t size, const FCHAR_T *format, ...) +{ + va_list args; + int result; + + va_start (args, format); + result = VSNPRINTF (buf, size, format, args); + va_end (args); + return result; +} diff --git a/include/libgnulib/unistdio/u-sprintf.h b/include/libgnulib/unistdio/u-sprintf.h new file mode 100755 index 0000000..8b65188 --- /dev/null +++ b/include/libgnulib/unistdio/u-sprintf.h @@ -0,0 +1,36 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007, 2009-2024 Free Software Foundation, + Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +SPRINTF (DCHAR_T *buf, const FCHAR_T *format, ...) +{ + va_list args; + int result; + + va_start (args, format); + result = VSPRINTF (buf, format, args); + va_end (args); + return result; +} diff --git a/include/libgnulib/unistdio/u-vasprintf.h b/include/libgnulib/unistdio/u-vasprintf.h new file mode 100755 index 0000000..bc04a0f --- /dev/null +++ b/include/libgnulib/unistdio/u-vasprintf.h @@ -0,0 +1,43 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +VASPRINTF (DCHAR_T **resultp, const FCHAR_T *format, va_list args) +{ + size_t length; + DCHAR_T *result = VASNPRINTF (NULL, &length, format, args); + if (result == NULL) + return -1; + + if (length > INT_MAX) + { + free (result); + errno = EOVERFLOW; + return -1; + } + + *resultp = result; + /* Return the number of resulting units, excluding the trailing NUL. */ + return length; +} diff --git a/include/libgnulib/unistdio/u-vsnprintf.h b/include/libgnulib/unistdio/u-vsnprintf.h new file mode 100755 index 0000000..50abaf3 --- /dev/null +++ b/include/libgnulib/unistdio/u-vsnprintf.h @@ -0,0 +1,60 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +VSNPRINTF (DCHAR_T *buf, size_t size, const FCHAR_T *format, va_list args) +{ + size_t length; + DCHAR_T *result; + + if (size == 0) + buf = NULL; + else + length = size; + result = VASNPRINTF (buf, &length, format, args); + if (result == NULL) + return -1; + + if (result != buf) + { + if (size != 0) + { + /* The result did not fit into the buffer. Copy the initial segment + into the buffer, truncating it if necessary. */ + size_t n = (length < size ? length : size - 1); + DCHAR_CPY (buf, result, n); + buf[n] = '\0'; + } + free (result); + } + + if (length > INT_MAX) + { + errno = EOVERFLOW; + return -1; + } + + /* Return the number of resulting units, excluding the trailing NUL. */ + return length; +} diff --git a/include/libgnulib/unistdio/u-vsprintf.h b/include/libgnulib/unistdio/u-vsprintf.h new file mode 100755 index 0000000..60b1b7f --- /dev/null +++ b/include/libgnulib/unistdio/u-vsprintf.h @@ -0,0 +1,66 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +int +VSPRINTF (DCHAR_T *buf, const FCHAR_T *format, va_list args) +{ + /* Pass an infinite length. But note that *vasnprintf may fail if the buffer + argument is larger than INT_MAX (if that fits into a 'size_t' at all). + Also note that glibc's iconv fails with E2BIG when we pass a length that + is so large that buf + length wraps around, i.e. + (uintptr_t) (buf + length) < (uintptr_t) buf. */ + size_t length; + DCHAR_T *result; + + /* Set length = min (SIZE_MAX, INT_MAX, - (uintptr_t) buf - 1). */ + length = (SIZE_MAX < INT_MAX ? SIZE_MAX : INT_MAX); + if (length > (~ (uintptr_t) buf) / sizeof (DCHAR_T)) + length = (~ (uintptr_t) buf) / sizeof (DCHAR_T); + + result = VASNPRINTF (buf, &length, format, args); + if (result == NULL) + return -1; + + /* The infinite buffer size guarantees that the result is not malloc()ed. */ + if (result != buf) + { + /* length is near SIZE_MAX. */ + free (result); + errno = EOVERFLOW; + return -1; + } + + if (length > INT_MAX) + { + errno = EOVERFLOW; + return -1; + } + + /* Return the number of resulting units, excluding the trailing NUL. */ + return length; +} diff --git a/include/libgnulib/unistr/u-cmp2.h b/include/libgnulib/unistr/u-cmp2.h new file mode 100755 index 0000000..8d5960b --- /dev/null +++ b/include/libgnulib/unistr/u-cmp2.h @@ -0,0 +1,35 @@ +/* Compare pieces of UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2) +{ + int cmp = U_CMP (s1, s2, MIN (n1, n2)); + + if (cmp == 0) + cmp = _GL_CMP (n1, n2); + + return cmp; +} diff --git a/include/libgnulib/unistr/u-cpy-alloc.h b/include/libgnulib/unistr/u-cpy-alloc.h new file mode 100755 index 0000000..ac22566 --- /dev/null +++ b/include/libgnulib/unistr/u-cpy-alloc.h @@ -0,0 +1,49 @@ +/* Copy piece of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006-2007, 2009-2024 Free Software Foundation, + Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#include +#include + +UNIT * +FUNC (const UNIT *s, size_t n) +{ + UNIT *dest; + + dest = (UNIT *) malloc (n > 0 ? n * sizeof (UNIT) : 1); + if (dest != NULL) + { +#if 0 + UNIT *destptr = dest; + + for (; n > 0; n--) + *destptr++ = *s++; +#else + if (n > 0) + memcpy ((char *) dest, (const char *) s, n * sizeof (UNIT)); +#endif + } + return dest; +} diff --git a/include/libgnulib/unistr/u-cpy.h b/include/libgnulib/unistr/u-cpy.h new file mode 100755 index 0000000..4848c14 --- /dev/null +++ b/include/libgnulib/unistr/u-cpy.h @@ -0,0 +1,33 @@ +/* Copy piece of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ +#if 0 + UNIT *destptr = dest; + + for (; n > 0; n--) + *destptr++ = *src++; +#else + if (n > 0) + memcpy ((char *) dest, (const char *) src, n * sizeof (UNIT)); +#endif + return dest; +} diff --git a/include/libgnulib/unistr/u-endswith.h b/include/libgnulib/unistr/u-endswith.h new file mode 100755 index 0000000..0c512ad --- /dev/null +++ b/include/libgnulib/unistr/u-endswith.h @@ -0,0 +1,36 @@ +/* Substring test for UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +bool +FUNC (const UNIT *str, const UNIT *suffix) +{ + size_t len = U_STRLEN (str); + size_t suffixlen = U_STRLEN (suffix); + + if (len >= suffixlen) + return (U_CMP (str + (len - suffixlen), suffix, suffixlen) == 0); + else + return false; +} diff --git a/include/libgnulib/unistr/u-move.h b/include/libgnulib/unistr/u-move.h new file mode 100755 index 0000000..9aa36c4 --- /dev/null +++ b/include/libgnulib/unistr/u-move.h @@ -0,0 +1,52 @@ +/* Copy piece of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#include + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ +#if 0 + if (dest < src) + { + UNIT *destptr = dest; + const UNIT *srcptr = src; + + for (; n > 0; n--) + *destptr++ = *srcptr++; + } + else if (dest > src) + { + UNIT *destptr = dest + n - 1; + const UNIT *srcptr = src + n - 1; + + for (; n > 0; n--) + *destptr-- = *srcptr--; + } +#else + memmove ((char *) dest, (const char *) src, n * sizeof (UNIT)); +#endif + return dest; +} diff --git a/include/libgnulib/unistr/u-pcpy.h b/include/libgnulib/unistr/u-pcpy.h new file mode 100755 index 0000000..8124197 --- /dev/null +++ b/include/libgnulib/unistr/u-pcpy.h @@ -0,0 +1,22 @@ +/* Copy piece of UTF-8/16/32 string, return pointer after last written unit. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2023. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ + return U_CPY (dest, src, n) + n; +} diff --git a/include/libgnulib/unistr/u-set.h b/include/libgnulib/unistr/u-set.h new file mode 100755 index 0000000..088cabe --- /dev/null +++ b/include/libgnulib/unistr/u-set.h @@ -0,0 +1,47 @@ +/* Fill UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#include + +UNIT * +FUNC (UNIT *s, ucs4_t uc, size_t n) +{ + if (n > 0) + { + if (IS_SINGLE_UNIT (uc)) + { + UNIT *ptr = s; + + for (; n > 0; n--) + *ptr++ = uc; + } + else + { + errno = EILSEQ; + return NULL; + } + } + return s; +} diff --git a/include/libgnulib/unistr/u-startswith.h b/include/libgnulib/unistr/u-startswith.h new file mode 100755 index 0000000..8346c26 --- /dev/null +++ b/include/libgnulib/unistr/u-startswith.h @@ -0,0 +1,38 @@ +/* Substring test for UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +bool +FUNC (const UNIT *str, const UNIT *prefix) +{ + for (;;) + { + UNIT uc1 = *str++; + UNIT uc2 = *prefix++; + if (uc2 == 0) + return true; + if (uc1 != uc2) + return false; + } +} diff --git a/include/libgnulib/unistr/u-stpcpy.h b/include/libgnulib/unistr/u-stpcpy.h new file mode 100755 index 0000000..22099ed --- /dev/null +++ b/include/libgnulib/unistr/u-stpcpy.h @@ -0,0 +1,32 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src) +{ + for (; (*dest = *src) != 0; src++, dest++) + ; + return dest; +} diff --git a/include/libgnulib/unistr/u-stpncpy.h b/include/libgnulib/unistr/u-stpncpy.h new file mode 100755 index 0000000..2e532e0 --- /dev/null +++ b/include/libgnulib/unistr/u-stpncpy.h @@ -0,0 +1,42 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ + for (; n > 0 && (*dest = *src) != 0; src++, dest++, n--) + ; + + /* This behavior is rarely useful, but it is here for consistency with + strncpy and wcsncpy. */ + { + UNIT *destptr = dest; + + for (; n > 0; n--) + *destptr++ = 0; + } + + return dest; +} diff --git a/include/libgnulib/unistr/u-strcat.h b/include/libgnulib/unistr/u-strcat.h new file mode 100755 index 0000000..a4a4e93 --- /dev/null +++ b/include/libgnulib/unistr/u-strcat.h @@ -0,0 +1,26 @@ +/* Concatenate UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src) +{ + UNIT *destptr = dest + U_STRLEN (dest); + + for (; (*destptr = *src) != 0; src++, destptr++) + ; + return dest; +} diff --git a/include/libgnulib/unistr/u-strcoll.h b/include/libgnulib/unistr/u-strcoll.h new file mode 100755 index 0000000..e26eac0 --- /dev/null +++ b/include/libgnulib/unistr/u-strcoll.h @@ -0,0 +1,100 @@ +/* Compare UTF-8/UTF-16/UTF-32 strings using the collation rules of the current + locale. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +int +FUNC (const UNIT *s1, const UNIT *s2) +{ + /* When this function succeeds, it sets errno back to its original value. + When it fails, it sets errno, but also returns a meaningful return value, + for the sake of callers which ignore errno. */ + int final_errno = errno; + const char *encoding = locale_charset (); + char *sl1; + char *sl2; + int result; + + /* Pass iconveh_error here, not iconveh_question_mark. Otherwise the + conversion to locale encoding can do transliteration or map some + characters to question marks, leading to results that depend on the + iconv() implementation and are not obvious. */ + sl1 = U_STRCONV_TO_ENCODING (s1, encoding, iconveh_error); + if (sl1 != NULL) + { + sl2 = U_STRCONV_TO_ENCODING (s2, encoding, iconveh_error); + if (sl2 != NULL) + { + /* Compare sl1 and sl2. */ + errno = 0; + result = strcoll (sl1, sl2); + if (errno == 0) + { + /* strcoll succeeded. */ + free (sl1); + free (sl2); + /* The conversion to locale encoding can drop Unicode TAG + characters. Therefore sl1 and sl2 may be equal when s1 + and s2 were in fact different. Return a nonzero result + in this case. */ + if (result == 0) + result = U_STRCMP (s1, s2); + } + else + { + /* strcoll failed. */ + final_errno = errno; + free (sl1); + free (sl2); + result = U_STRCMP (s1, s2); + } + } + else + { + /* s1 could be converted to locale encoding, s2 not. */ + final_errno = errno; + free (sl1); + result = -1; + } + } + else + { + final_errno = errno; + sl2 = U_STRCONV_TO_ENCODING (s2, encoding, iconveh_error); + if (sl2 != NULL) + { + /* s2 could be converted to locale encoding, s1 not. */ + free (sl2); + result = 1; + } + else + { + /* Neither s1 nor s2 could be converted to locale encoding. */ + result = U_STRCMP (s1, s2); + } + } + + errno = final_errno; + return result; +} diff --git a/include/libgnulib/unistr/u-strcpy.h b/include/libgnulib/unistr/u-strcpy.h new file mode 100755 index 0000000..4151d1c --- /dev/null +++ b/include/libgnulib/unistr/u-strcpy.h @@ -0,0 +1,34 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src) +{ + UNIT *destptr = dest; + + for (; (*destptr = *src) != 0; src++, destptr++) + ; + return dest; +} diff --git a/include/libgnulib/unistr/u-strcspn.h b/include/libgnulib/unistr/u-strcspn.h new file mode 100755 index 0000000..3cca61c --- /dev/null +++ b/include/libgnulib/unistr/u-strcspn.h @@ -0,0 +1,62 @@ +/* Search for some characters in UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +size_t +FUNC (const UNIT *str, const UNIT *reject) +{ + /* Optimize two cases. */ + if (reject[0] == 0) + return U_STRLEN (str); + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, reject); + if (count >= 0 && reject[count] == 0) + { + const UNIT *found = U_STRCHR (str, uc); + if (found != NULL) + return found - str; + else + return U_STRLEN (str); + } + } + /* General case. */ + { + const UNIT *ptr = str; + + for (;;) + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, ptr); + if (count == 0) + return ptr - str; + if (count < 0) + break; + if (U_STRCHR (reject, uc)) + return ptr - str; + ptr += count; + } + return U_STRLEN (str); + } +} diff --git a/include/libgnulib/unistr/u-strdup.h b/include/libgnulib/unistr/u-strdup.h new file mode 100755 index 0000000..978687b --- /dev/null +++ b/include/libgnulib/unistr/u-strdup.h @@ -0,0 +1,49 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006-2007, 2009-2024 Free Software Foundation, + Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#include +#include + +UNIT * +FUNC (const UNIT *s) +{ + size_t n = U_STRLEN (s) + 1; + UNIT *dest; + + dest = (UNIT *) malloc (n * sizeof (UNIT)); + if (dest != NULL) + { +#if 0 + UNIT *destptr = dest; + + for (; n > 0; n--) + *destptr++ = *s++; +#else + memcpy ((char *) dest, (const char *) s, n * sizeof (UNIT)); +#endif + } + return dest; +} diff --git a/include/libgnulib/unistr/u-strlen.h b/include/libgnulib/unistr/u-strlen.h new file mode 100755 index 0000000..03106a1 --- /dev/null +++ b/include/libgnulib/unistr/u-strlen.h @@ -0,0 +1,26 @@ +/* Determine length of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +FUNC (const UNIT *s) +{ + const UNIT *ptr; + + for (ptr = s; *ptr != 0; ptr++) + ; + return ptr - s; +} diff --git a/include/libgnulib/unistr/u-strncat.h b/include/libgnulib/unistr/u-strncat.h new file mode 100755 index 0000000..587960d --- /dev/null +++ b/include/libgnulib/unistr/u-strncat.h @@ -0,0 +1,36 @@ +/* Concatenate UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ + UNIT *destptr = dest + U_STRLEN (dest); + + for (; n > 0 && (*destptr = *src) != 0; src++, destptr++, n--) + ; + if (n == 0) + *destptr = 0; + return dest; +} diff --git a/include/libgnulib/unistr/u-strncpy.h b/include/libgnulib/unistr/u-strncpy.h new file mode 100755 index 0000000..c59db65 --- /dev/null +++ b/include/libgnulib/unistr/u-strncpy.h @@ -0,0 +1,40 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ + UNIT *destptr = dest; + + for (; n > 0 && (*destptr = *src) != 0; src++, destptr++, n--) + ; + + /* This behavior is rarely useful, but it is here for consistency with + strncpy and wcsncpy. */ + for (; n > 0; n--) + *destptr++ = 0; + + return dest; +} diff --git a/include/libgnulib/unistr/u-strnlen.h b/include/libgnulib/unistr/u-strnlen.h new file mode 100755 index 0000000..4ec1474 --- /dev/null +++ b/include/libgnulib/unistr/u-strnlen.h @@ -0,0 +1,34 @@ +/* Determine bounded length of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +size_t +FUNC (const UNIT *s, size_t maxlen) +{ + const UNIT *ptr; + + for (ptr = s; maxlen > 0 && *ptr != 0; ptr++, maxlen--) + ; + return ptr - s; +} diff --git a/include/libgnulib/unistr/u-strpbrk.h b/include/libgnulib/unistr/u-strpbrk.h new file mode 100755 index 0000000..c5f9d2d --- /dev/null +++ b/include/libgnulib/unistr/u-strpbrk.h @@ -0,0 +1,54 @@ +/* Search for some characters in UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (const UNIT *str, const UNIT *accept) +{ + /* Optimize two cases. */ + if (accept[0] == 0) + return NULL; + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, accept); + if (count >= 0 && accept[count] == 0) + return U_STRCHR (str, uc); + } + /* General case. */ + { + const UNIT *ptr = str; + + for (;;) + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, ptr); + if (count <= 0) + break; + if (U_STRCHR (accept, uc)) + return (UNIT *) ptr; + ptr += count; + } + return NULL; + } +} diff --git a/include/libgnulib/unistr/u-strspn.h b/include/libgnulib/unistr/u-strspn.h new file mode 100755 index 0000000..021ffcf --- /dev/null +++ b/include/libgnulib/unistr/u-strspn.h @@ -0,0 +1,62 @@ +/* Search for some characters in UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +size_t +FUNC (const UNIT *str, const UNIT *accept) +{ + /* Optimize two cases. */ + if (accept[0] == 0) + return 0; + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, accept); + if (count >= 0 && accept[count] == 0) + { + const UNIT *ptr = str; + for (; *ptr != 0; ptr += count) + if (U_CMP (ptr, accept, count) != 0) + break; + return ptr - str; + } + } + /* General case. */ + { + const UNIT *ptr = str; + + for (;;) + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, ptr); + if (count == 0) + return ptr - str; + if (count < 0) + break; + if (!U_STRCHR (accept, uc)) + return ptr - str; + ptr += count; + } + return U_STRLEN (str); + } +} diff --git a/include/libgnulib/unistr/u-strtok.h b/include/libgnulib/unistr/u-strtok.h new file mode 100755 index 0000000..823b545 --- /dev/null +++ b/include/libgnulib/unistr/u-strtok.h @@ -0,0 +1,60 @@ +/* Tokenize UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +UNIT * +FUNC (UNIT *str, const UNIT *delim, UNIT **ptr) +{ + if (str == NULL) + { + str = *ptr; + if (str == NULL) + return NULL; /* reminder that end of token sequence has been reached */ + } + + /* Skip leading delimiters. */ + str += U_STRSPN (str, delim); + + /* Found a token? */ + if (*str == 0) + { + *ptr = NULL; + return NULL; + } + + /* Move past the token. */ + { + UNIT *token_end = U_STRPBRK (str, delim); + if (token_end) + { + *ptr = token_end + U_STRMBLEN (token_end); + /* NUL-terminate the token. */ + *token_end = 0; + } + else + *ptr = NULL; + } + + return str; +} diff --git a/include/libgnulib/uniwbrk/u-wordbreaks.h b/include/libgnulib/uniwbrk/u-wordbreaks.h new file mode 100755 index 0000000..18abe69 --- /dev/null +++ b/include/libgnulib/uniwbrk/u-wordbreaks.h @@ -0,0 +1,182 @@ +/* Word breaks in UTF-8/UTF-16/UTF-32 strings. -*- coding: utf-8 -*- + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +/* This file implements section 4 "Word Boundaries" + of Unicode Standard Annex #29 . */ + +void +FUNC (const UNIT *s, size_t n, char *p) +{ + if (n > 0) + { + const UNIT *s_end = s + n; + + /* Word break property of the last character. + -1 at the very beginning of the string. */ + int last_char_prop = -1; + + /* Format and Extend characters are ignored; this means, the mostly used + unit is the complex character (= character with subsequent ignored + characters). + Word break property of the last complex character. + -1 at the very beginning of the string. */ + int last_compchar_prop = -1; + char *last_compchar_ptr = NULL; + + /* For recognizing rules involving 3 complex characters: + Word break property of the second-to-last complex character. + -1 at the very beginning of the string. */ + int secondlast_compchar_prop = -1; + + /* Number of consecutive regional indicator (RI) characters seen + immediately before the current point. */ + size_t ri_count = 0; + + /* Don't break inside multibyte characters. */ + memset (p, 0, n); + + while (s < s_end) + { + ucs4_t uc; + int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); + int prop = uc_wordbreak_property (uc); + + /* No break at the start of the string. */ + if (last_char_prop >= 0) + { + /* No break between CR and LF (WB3). */ + if (last_char_prop == WBP_CR && prop == WBP_LF) + /* *p = 0 */; + /* Break before and after newlines (WB3a, WB3b). */ + else if ((last_char_prop == WBP_CR + || last_char_prop == WBP_LF + || last_char_prop == WBP_NEWLINE) + || (prop == WBP_CR + || prop == WBP_LF + || prop == WBP_NEWLINE)) + *p = 1; + /* No break within emoji zwj sequence (WB3c). */ + else if (last_char_prop == WBP_ZWJ + && uc_is_property_extended_pictographic (uc)) + /* *p = 0 */; + /* Keep horizontal whitespace together (WB3d). */ + else if (last_char_prop == WBP_WSS && prop == WBP_WSS) + /* *p = 0 */; + /* Ignore Format and Extend characters (WB4). */ + else if (prop == WBP_EXTEND + || prop == WBP_FORMAT + || prop == WBP_ZWJ) + /* *p = 0 */; + else + { + /* No break in these situations (see UAX #29): + + secondlast last current + + (ALetter | HL) (MidLetter | MidNumLet | SQ) × (ALetter | HL) (WB7) + (ALetter | HL) × (MidLetter | MidNumLet | SQ) (ALetter | HL) (WB6) + Numeric (MidNum | MidNumLet | SQ) × Numeric (WB11) + Numeric × (MidNum | MidNumLet | SQ) Numeric (WB12) + HL × DQ HL (WB7b) + HL DQ × HL (WB7c) + ^ (RI RI)* RI × RI (WB15) + [^RI] (RI RI)* RI × RI (WB16) + */ + /* No break across certain punctuation. Also, disable word + breaks that were recognized earlier (due to lookahead of + only one complex character). */ + if (((prop == WBP_ALETTER + || prop == WBP_HL) + && (last_compchar_prop == WBP_MIDLETTER + || last_compchar_prop == WBP_MIDNUMLET + || last_compchar_prop == WBP_SQ) + && (secondlast_compchar_prop == WBP_ALETTER + || secondlast_compchar_prop == WBP_HL)) + || (prop == WBP_NUMERIC + && (last_compchar_prop == WBP_MIDNUM + || last_compchar_prop == WBP_MIDNUMLET + || last_compchar_prop == WBP_SQ) + && secondlast_compchar_prop == WBP_NUMERIC) + || (prop == WBP_HL + && last_compchar_prop == WBP_DQ + && secondlast_compchar_prop == WBP_HL)) + { + *last_compchar_ptr = 0; + /* *p = 0; */ + } + /* Break before RI, if odd number of RI's are + preceding (WB15, WB16). */ + else if (last_compchar_prop == WBP_RI && prop == WBP_RI) + { + if (ri_count % 2 == 0) + *p = 1; + /* else *p = 0 */ + } + /* Break after Format and Extend character. */ + else if (last_compchar_prop == WBP_EXTEND + || last_compchar_prop == WBP_FORMAT) + *p = 1; + else + { + int last_compchar_index = + uniwbrk_prop_index[last_compchar_prop]; + int index = uniwbrk_prop_index[prop]; + + /* Break between unknown pair (WB999). */ + if (last_compchar_index < 0 || index < 0) + *p = 1; + /* Perform a single table lookup. */ + else if (uniwbrk_table[last_compchar_index][index]) + *p = 1; + /* else *p = 0; */ + } + } + } + + last_char_prop = prop; + + /* Ignore Format and Extend characters, except at the + start of the line (WB4). */ + if (last_compchar_prop < 0 + || last_compchar_prop == WBP_CR + || last_compchar_prop == WBP_LF + || last_compchar_prop == WBP_NEWLINE + || !(prop == WBP_EXTEND || prop == WBP_FORMAT || prop == WBP_ZWJ)) + { + secondlast_compchar_prop = last_compchar_prop; + last_compchar_prop = prop; + last_compchar_ptr = p; + + if (prop == WBP_RI) + ri_count++; + else + ri_count = 0; + } + + s += count; + p += count; + } + } +} diff --git a/include/libgnulib/uniwbrk/wbrkprop.h b/include/libgnulib/uniwbrk/wbrkprop.h new file mode 100755 index 0000000..d138f65 --- /dev/null +++ b/include/libgnulib/uniwbrk/wbrkprop.h @@ -0,0 +1,6515 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Word breaking properties of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#define wbrkprop_header_0 16 +#define wbrkprop_header_1 15 +#define wbrkprop_header_2 7 +#define wbrkprop_header_3 511 +#define wbrkprop_header_4 127 + +typedef struct + { + int level1[15]; + int level2[3 << 9]; + unsigned char level3[196 << 7]; + } +wbrkprop_t; +static const wbrkprop_t uniwbrkprop = +{ + { + 0, 512, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1024 + }, + { + 0, 128, 256, 256, 256, 384, 512, 640, + 256, 768, 896, 1024, 1152, 1280, 1408, 1536, + 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, + 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, + 3712, 3840, 256, 256, 3968, 4096, 4224, 4352, + 4480, 256, 256, 256, 4608, 4736, 4864, 4992, + 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, + 6144, 6272, 256, 6400, 256, 256, 6528, 6656, + 6784, 6912, 7040, 7168, -1, -1, -1, -1, + -1, 7296, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 7424, 7552, 7680, 7808, -1, -1, -1, + 7936, 8064, 8192, 8320, -1, 8448, 8576, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 8704, 256, 256, 8832, 8960, 9088, 9216, + 9344, 9472, 9600, 9728, 9856, 9984, 10112, 10240, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 10368, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 10496, 10624, + 256, 256, 10752, 10880, 11008, 11136, 11264, 11392, + 11520, 11648, 11776, 11904, -1, 12032, 12160, 12288, + 256, 12416, 12544, 12672, 256, 256, 12800, 12928, + 13056, 13184, 13312, 13440, 13568, 13696, 13824, 13952, + 14080, 14208, 14336, 14464, -1, 14592, 14720, 14848, + 14976, 15104, 15232, 15360, 15488, 15616, 15744, 15872, + 16000, 16128, -1, 16256, 16384, 16512, 16640, -1, + 16768, 16896, 17024, 17152, 17280, 17408, -1, 17536, + 17664, 17792, 17920, 18048, -1, 18176, 18304, 18432, + 256, 256, 256, 256, 256, 256, 256, 18560, + 18688, 256, 18816, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 18944, + 256, 256, 256, 256, 256, 256, 256, 256, + 19072, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 11648, + 256, 256, 256, 256, 19200, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 19328, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 19456, 19584, 19712, 19840, + -1, -1, 19968, -1, 20096, -1, 20224, 20352, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20480, + 20608, -1, 20736, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 20864, 20992, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 21120, -1, -1, -1, -1, 21248, -1, + -1, -1, 21376, 21504, 21632, -1, -1, -1, + 21760, 21888, 22016, 256, 256, 22144, 22272, 22400, + -1, -1, -1, -1, 22528, 22656, -1, -1, + -1, -1, -1, -1, -1, -1, 22784, -1, + 22912, 23040, 23168, -1, -1, 23296, -1, -1, + -1, 23424, -1, 23552, -1, -1, -1, 23680, + 256, 23808, 23936, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 24064, 24192, -1, -1, + -1, -1, 24320, 24448, -1, -1, -1, 24576, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 21120, + -1, -1, -1, -1, -1, -1, -1, -1, + 24704, -1, 24832, 24960, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_LF, WBP_NEWLINE, + WBP_NEWLINE, WBP_CR, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_WSS, WBP_OTHER, WBP_DQ, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_SQ, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_MIDLETTER, WBP_MIDNUM, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_NEWLINE, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_FORMAT, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_MIDLETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_MIDNUM, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_MIDLETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_MIDLETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_MIDNUM, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_ALETTER, + WBP_MIDLETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_NUMERIC, + WBP_MIDNUM, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_NUMERIC, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_NUMERIC, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_WSS, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_FORMAT, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_WSS, WBP_WSS, WBP_WSS, WBP_WSS, + WBP_WSS, WBP_WSS, WBP_WSS, WBP_OTHER, + WBP_WSS, WBP_WSS, WBP_WSS, WBP_OTHER, + WBP_EXTEND, WBP_ZWJ, WBP_FORMAT, WBP_FORMAT, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUMLET, WBP_MIDNUMLET, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUMLET, WBP_OTHER, WBP_OTHER, WBP_MIDLETTER, + WBP_NEWLINE, WBP_NEWLINE, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_EXTENDNUMLET, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, + WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_WSS, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_OTHER, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_WSS, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_KATAKANA, + WBP_KATAKANA, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_HL, WBP_EXTEND, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_OTHER, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_OTHER, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_OTHER, WBP_HL, WBP_OTHER, + WBP_HL, WBP_HL, WBP_OTHER, WBP_HL, + WBP_HL, WBP_OTHER, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_HL, WBP_HL, WBP_HL, WBP_HL, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDLETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, + WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTENDNUMLET, WBP_EXTENDNUMLET, WBP_EXTENDNUMLET, + WBP_MIDNUM, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, + WBP_MIDNUM, WBP_MIDLETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUMLET, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_MIDLETTER, WBP_MIDNUM, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, + WBP_KATAKANA, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_KATAKANA, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_RI, WBP_RI, + WBP_RI, WBP_RI, WBP_RI, WBP_RI, + WBP_RI, WBP_RI, WBP_RI, WBP_RI, + WBP_RI, WBP_RI, WBP_RI, WBP_RI, + WBP_RI, WBP_RI, WBP_RI, WBP_RI, + WBP_RI, WBP_RI, WBP_RI, WBP_RI, + WBP_RI, WBP_RI, WBP_RI, WBP_RI, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_FORMAT, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER + } +}; diff --git a/include/libgnulib/uniwbrk/wbrktable.h b/include/libgnulib/uniwbrk/wbrktable.h new file mode 100755 index 0000000..d24d3ca --- /dev/null +++ b/include/libgnulib/uniwbrk/wbrktable.h @@ -0,0 +1,35 @@ +/* Word break auxiliary table. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern const int uniwbrk_prop_index[23]; +extern const unsigned char uniwbrk_table[12][12]; + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/uniwidth/cjk.h b/include/libgnulib/uniwidth/cjk.h new file mode 100755 index 0000000..5fab365 --- /dev/null +++ b/include/libgnulib/uniwidth/cjk.h @@ -0,0 +1,37 @@ +/* Test for CJK encoding. + Copyright (C) 2001-2002, 2005-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include "streq.h" + +static int +is_cjk_encoding (const char *encoding) +{ + if (0 + /* Legacy Japanese encodings */ + || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0) + /* Legacy Chinese encodings */ + || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0) + || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0) + || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0) + /* Legacy Korean encodings */ + || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0) + || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0)) + return 1; + return 0; +} diff --git a/include/libgnulib/uniwidth/width0.h b/include/libgnulib/uniwidth/width0.h new file mode 100755 index 0000000..2edbe24 --- /dev/null +++ b/include/libgnulib/uniwidth/width0.h @@ -0,0 +1,495 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Table of non-spacing or control characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +static const unsigned char nonspacing_table_data[49*64] = { + /* 0x0000-0x01ff */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */ + /* 0x0200-0x03ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */ + /* 0x0400-0x05ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */ + 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */ + 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */ + 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */ + /* 0x0600-0x07ff */ + 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ + 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */ + 0x00, 0x00, 0xc0, 0x9f, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x20, /* 0x07c0-0x07ff */ + /* 0x0800-0x09ff */ + 0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */ + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */ + 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ + 0x00, 0xfc, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, /* 0x08c0-0x08ff */ + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */ + 0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x40, /* 0x09c0-0x09ff */ + /* 0x0a00-0x0bff */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */ + 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */ + 0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xfc, /* 0x0ac0-0x0aff */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */ + 0x1e, 0x20, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */ + 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */ + /* 0x0c00-0x0dff */ + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, /* 0x0c00-0x0c3f */ + 0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */ + 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, /* 0x0d00-0x0d3f */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */ + 0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */ + /* 0x0e00-0x0fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */ + 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1f, /* 0x0e80-0x0ebf */ + 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */ + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */ + 0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */ + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */ + /* 0x1000-0x11ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */ + 0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */ + 0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x1140-0x117f */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x1180-0x11bf */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x11c0-0x11ff */ + /* 0x1200-0x13ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */ + 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */ + /* 0x1600-0x17ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */ + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1700-0x173f */ + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */ + 0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */ + /* 0x1800-0x19ff */ + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */ + 0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */ + /* 0x1a00-0x1bff */ + 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */ + 0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x1a80-0x1abf */ + 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */ + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */ + 0x03, 0x00, 0x00, 0x00, 0x3c, 0x3b, 0x00, 0x00, /* 0x1b80-0x1bbf */ + 0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */ + /* 0x1c00-0x1dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */ + 0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x10, 0x03, /* 0x1cc0-0x1cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x1dc0-0x1dff */ + /* 0x2000-0x21ff */ + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */ + 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x00, 0x00, /* 0x2040-0x207f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */ + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */ + /* 0x2c00-0x2dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */ + /* 0x3000-0x31ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x3000-0x303f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */ + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */ + /* 0xa600-0xa7ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf7, 0x3f, /* 0xa640-0xa67f */ + 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */ + /* 0xa800-0xa9ff */ + 0x44, 0x08, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, /* 0xa800-0xa83f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */ + 0x30, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x80, /* 0xa8c0-0xa8ff */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */ + 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */ + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x33, /* 0xa980-0xa9bf */ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */ + /* 0xaa00-0xabff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */ + 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0xaa40-0xaa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, /* 0xaac0-0xaaff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */ + /* 0xd600-0xd7ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd600-0xd63f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd640-0xd67f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd680-0xd6bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd6c0-0xd6ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd700-0xd73f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd740-0xd77f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0xd780-0xd7bf */ + 0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, /* 0xd7c0-0xd7ff */ + /* 0xfa00-0xfbff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */ + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */ + /* 0xfe00-0xffff */ + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, /* 0xfe00-0xfe3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */ + /* 0x10000-0x101ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */ + /* 0x10200-0x103ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10200-0x1023f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10240-0x1027f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10280-0x102bf */ + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, /* 0x102c0-0x102ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10300-0x1033f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x10340-0x1037f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10380-0x103bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x103c0-0x103ff */ + /* 0x10a00-0x10bff */ + 0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */ + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */ + /* 0x10c00-0x10dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c00-0x10c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c40-0x10c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c80-0x10cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10cc0-0x10cff */ + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, /* 0x10d00-0x10d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, /* 0x10d40-0x10d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10d80-0x10dbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10dc0-0x10dff */ + /* 0x10e00-0x10fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10e00-0x10e3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10e40-0x10e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, /* 0x10e80-0x10ebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, /* 0x10ec0-0x10eff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10f00-0x10f3f */ + 0xc0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10f40-0x10f7f */ + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10f80-0x10fbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10fc0-0x10fff */ + /* 0x11000-0x111ff */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */ + 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80, /* 0x11040-0x1107f */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x06, /* 0x11080-0x110bf */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */ + 0x07, 0x00, 0x00, 0x00, 0x80, 0xef, 0x1f, 0x00, /* 0x11100-0x1113f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0x11140-0x1117f */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, /* 0x11180-0x111bf */ + 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */ + /* 0x11200-0x113ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xd3, 0x40, /* 0x11200-0x1123f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11240-0x1127f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11280-0x112bf */ + 0x00, 0x00, 0x00, 0x80, 0xf8, 0x07, 0x00, 0x00, /* 0x112c0-0x112ff */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, /* 0x11300-0x1133f */ + 0x01, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x1f, 0x00, /* 0x11340-0x1137f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, /* 0x11380-0x113bf */ + 0x01, 0x40, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, /* 0x113c0-0x113ff */ + /* 0x11400-0x115ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11400-0x1143f */ + 0x5c, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0x11440-0x1147f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, /* 0x11480-0x114bf */ + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x114c0-0x114ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11500-0x1153f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11540-0x1157f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xb0, /* 0x11580-0x115bf */ + 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, /* 0x115c0-0x115ff */ + /* 0x11600-0x117ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xa7, /* 0x11600-0x1163f */ + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11640-0x1167f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbf, 0x00, /* 0x11680-0x116bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x116c0-0x116ff */ + 0x00, 0x00, 0x00, 0xa0, 0xbc, 0x0f, 0x00, 0x00, /* 0x11700-0x1173f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11740-0x1177f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11780-0x117bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x117c0-0x117ff */ + /* 0x11800-0x119ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x06, /* 0x11800-0x1183f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11840-0x1187f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11880-0x118bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118c0-0x118ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, /* 0x11900-0x1193f */ + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11940-0x1197f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11980-0x119bf */ + 0x00, 0x00, 0xf0, 0x0c, 0x01, 0x00, 0x00, 0x00, /* 0x119c0-0x119ff */ + /* 0x11a00-0x11bff */ + 0x7e, 0x06, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x79, /* 0x11a00-0x11a3f */ + 0x80, 0x00, 0x7e, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x11a40-0x11a7f */ + 0x00, 0xfc, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0x11a80-0x11abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11ac0-0x11aff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11b00-0x11b3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11b40-0x11b7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11b80-0x11bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11bc0-0x11bff */ + /* 0x11c00-0x11dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, /* 0x11c00-0x11c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c40-0x11c7f */ + 0x00, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0x6d, 0x00, /* 0x11c80-0x11cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11cc0-0x11cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xb4, /* 0x11d00-0x11d3f */ + 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d40-0x11d7f */ + 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d80-0x11dbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11dc0-0x11dff */ + /* 0x11e00-0x11fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11e00-0x11e3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11e40-0x11e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11e80-0x11ebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, /* 0x11ec0-0x11eff */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x11f00-0x11f3f */ + 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, /* 0x11f40-0x11f7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11f80-0x11fbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11fc0-0x11fff */ + /* 0x13400-0x135ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x13400-0x1343f */ + 0x81, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13440-0x1347f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13480-0x134bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x134c0-0x134ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13500-0x1353f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13540-0x1357f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13580-0x135bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x135c0-0x135ff */ + /* 0x16000-0x161ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16000-0x1603f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16040-0x1607f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16080-0x160bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x160c0-0x160ff */ + 0x00, 0x00, 0x00, 0xc0, 0xff, 0xe3, 0x00, 0x00, /* 0x16100-0x1613f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16140-0x1617f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16180-0x161bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x161c0-0x161ff */ + /* 0x16a00-0x16bff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a00-0x16a3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a40-0x16a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a80-0x16abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, /* 0x16ac0-0x16aff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x16b00-0x16b3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b40-0x16b7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b80-0x16bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16bc0-0x16bff */ + /* 0x16e00-0x16fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e00-0x16e3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e40-0x16e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e80-0x16ebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16ec0-0x16eff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f00-0x16f3f */ + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f40-0x16f7f */ + 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f80-0x16fbf */ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, /* 0x16fc0-0x16fff */ + /* 0x1bc00-0x1bdff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc00-0x1bc3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc40-0x1bc7f */ + 0x00, 0x00, 0x00, 0x60, 0x0f, 0x00, 0x00, 0x00, /* 0x1bc80-0x1bcbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bcc0-0x1bcff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd00-0x1bd3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd40-0x1bd7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd80-0x1bdbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bdc0-0x1bdff */ + /* 0x1ce00-0x1cfff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ce00-0x1ce3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ce40-0x1ce7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ce80-0x1cebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cec0-0x1ceff */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, /* 0x1cf00-0x1cf3f */ + 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cf40-0x1cf7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cf80-0x1cfbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cfc0-0x1cfff */ + /* 0x1d000-0x1d1ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */ + 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */ + /* 0x1d200-0x1d3ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */ + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d3c0-0x1d3ff */ + /* 0x1da00-0x1dbff */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, /* 0x1da00-0x1da3f */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x20, 0x00, /* 0x1da40-0x1da7f */ + 0x10, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x00, 0x00, /* 0x1da80-0x1dabf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dac0-0x1daff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db00-0x1db3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db40-0x1db7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db80-0x1dbbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dbc0-0x1dbff */ + /* 0x1e000-0x1e1ff */ + 0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, 0x00, 0x00, /* 0x1e000-0x1e03f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e040-0x1e07f */ + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e080-0x1e0bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0c0-0x1e0ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x1e100-0x1e13f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e140-0x1e17f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e180-0x1e1bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e1c0-0x1e1ff */ + /* 0x1e200-0x1e3ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e200-0x1e23f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e240-0x1e27f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, /* 0x1e280-0x1e2bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, /* 0x1e2c0-0x1e2ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e300-0x1e33f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e340-0x1e37f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e380-0x1e3bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e3c0-0x1e3ff */ + /* 0x1e400-0x1e5ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e400-0x1e43f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e440-0x1e47f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e480-0x1e4bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, /* 0x1e4c0-0x1e4ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e500-0x1e53f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e540-0x1e57f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e580-0x1e5bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, /* 0x1e5c0-0x1e5ff */ + /* 0x1e800-0x1e9ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e800-0x1e83f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e840-0x1e87f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e880-0x1e8bf */ + 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8c0-0x1e8ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e900-0x1e93f */ + 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e940-0x1e97f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e980-0x1e9bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x1e9c0-0x1e9ff */ +}; +static const signed char nonspacing_table_ind[248] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* 0x0000-0x0fff */ + 8, 9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */ + 14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */ + 16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */ + -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */ + -1, -1, -1, 20, -1, -1, -1, -1, /* 0xd000-0xdfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */ + -1, -1, -1, -1, -1, 21, -1, 22, /* 0xf000-0xffff */ + 23, 24, -1, -1, -1, 25, 26, 27, /* 0x10000-0x10fff */ + 28, 29, 30, 31, 32, 33, 34, 35, /* 0x11000-0x11fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */ + -1, -1, 36, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */ + 37, -1, -1, -1, -1, 38, -1, 39, /* 0x16000-0x16fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */ + -1, -1, -1, -1, -1, -1, 40, -1, /* 0x1b000-0x1bfff */ + -1, -1, -1, -1, -1, -1, -1, 41, /* 0x1c000-0x1cfff */ + 42, 43, -1, -1, -1, 44, -1, -1, /* 0x1d000-0x1dfff */ + 45, 46, 47, -1, 48, -1, -1, -1 /* 0x1e000-0x1efff */ +}; diff --git a/include/libgnulib/uniwidth/width2.h b/include/libgnulib/uniwidth/width2.h new file mode 100755 index 0000000..f919989 --- /dev/null +++ b/include/libgnulib/uniwidth/width2.h @@ -0,0 +1,541 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Width 2 property of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[4]; + short level2[3 << 7]; + unsigned int level3[28 << 4]; + } +u_width2 = +{ + { 4 }, + { + 5 * sizeof (int) / sizeof (short) + 0, + 5 * sizeof (int) / sizeof (short) + 128, + 5 * sizeof (int) / sizeof (short) + 256, + 5 * sizeof (int) / sizeof (short) + 256 + }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 16, + 5 + 384 * sizeof (short) / sizeof (int) + 32, + 5 + 384 * sizeof (short) / sizeof (int) + 48, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 64, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 80, + 5 + 384 * sizeof (short) / sizeof (int) + 96, + 5 + 384 * sizeof (short) / sizeof (int) + 112, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 144, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 160, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 176, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 208, + 5 + 384 * sizeof (short) / sizeof (int) + 224, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 256, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 272, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 304, + 5 + 384 * sizeof (short) / sizeof (int) + 320, + 5 + 384 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 352, + 5 + 384 * sizeof (short) / sizeof (int) + 368, + 5 + 384 * sizeof (short) / sizeof (int) + 384, + 5 + 384 * sizeof (short) / sizeof (int) + 400, + 5 + 384 * sizeof (short) / sizeof (int) + 416, + 5 + 384 * sizeof (short) / sizeof (int) + 432, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128 + }, + { + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x0C000000U, 0x00000600U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00091E00U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, + 0x00300000U, 0x00000000U, 0x000FFF00U, 0x80000000U, + 0x00080000U, 0x60000C02U, 0x00104030U, 0x242C0400U, + 0x00000C20U, 0x00000100U, 0x00B85000U, 0x00000000U, + 0x00E00000U, 0x80010000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x18000000U, 0x00000000U, 0x00210000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFF0000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x0000FFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000001U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x0000007FU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x0003000FU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, + 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x6FEF0000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x00000007U, 0x00070000U, 0xFFFF00F0U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x07FE4000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFBFE001U, 0xFFFFFFFFU, 0xDFFFFFFFU, + 0x000FFFFFU, 0xFFFFFFFFU, 0x000F87FFU, 0xFF11FFFFU, + 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFDU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FFFFFFFU, + 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF7800U, 0x040000FFU, + 0x00600000U, 0x00000010U, 0x00000000U, 0xF8000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE0E7103FU, 0x1FF01800U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00010FFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFF000U, 0xF7FFFFFFU, 0xFFFFFFBFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x1F1F0000U, + 0xFFFF007FU, 0x07FF1FFFU, 0x03FF003FU, 0x007F00FFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U + } +}; diff --git a/include/libgnulib/unlinkdir.h b/include/libgnulib/unlinkdir.h new file mode 100755 index 0000000..a142f23 --- /dev/null +++ b/include/libgnulib/unlinkdir.h @@ -0,0 +1,32 @@ +/* unlinkdir.h - determine (and maybe change) whether we can unlink directories + + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert and Jim Meyering. */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if UNLINK_CANNOT_UNLINK_DIR +# define cannot_unlink_dir() true +#else +bool cannot_unlink_dir (void); +#endif + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/unlocked-io.h b/include/libgnulib/unlocked-io.h new file mode 100755 index 0000000..0cd9bbf --- /dev/null +++ b/include/libgnulib/unlocked-io.h @@ -0,0 +1,141 @@ +/* Prefer faster, non-thread-safe stdio functions if available. + + Copyright (C) 2001-2004, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering. */ + +#ifndef UNLOCKED_IO_H +# define UNLOCKED_IO_H 1 + +/* These are wrappers for functions/macros from the GNU C library, and + from other C libraries supporting POSIX's optional thread-safe functions. + + The standard I/O functions are thread-safe. These *_unlocked ones are + more efficient but not thread-safe. That they're not thread-safe is + fine since all of the applications in this package are single threaded. + + Also, some code that is shared with the GNU C library may invoke + the *_unlocked functions directly. On hosts that lack those + functions, invoke the non-thread-safe versions instead. */ + +/* This file uses HAVE_DECL_*_UNLOCKED. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include + +# if HAVE_DECL_CLEARERR_UNLOCKED || defined clearerr_unlocked +# undef clearerr +# define clearerr(x) clearerr_unlocked (x) +# else +# define clearerr_unlocked(x) clearerr (x) +# endif + +# if HAVE_DECL_FEOF_UNLOCKED || defined feof_unlocked +# undef feof +# define feof(x) feof_unlocked (x) +# else +# define feof_unlocked(x) feof (x) +# endif + +# if HAVE_DECL_FERROR_UNLOCKED || defined ferror_unlocked +# undef ferror +# define ferror(x) ferror_unlocked (x) +# else +# define ferror_unlocked(x) ferror (x) +# endif + +# if HAVE_DECL_FFLUSH_UNLOCKED || defined fflush_unlocked +# undef fflush +# define fflush(x) fflush_unlocked (x) +# else +# define fflush_unlocked(x) fflush (x) +# endif + +# if HAVE_DECL_FGETS_UNLOCKED || defined fgets_unlocked +# undef fgets +# define fgets(x,y,z) fgets_unlocked (x,y,z) +# else +# define fgets_unlocked(x,y,z) fgets (x,y,z) +# endif + +# if HAVE_DECL_FPUTC_UNLOCKED || defined fputc_unlocked +# undef fputc +# define fputc(x,y) fputc_unlocked (x,y) +# else +# define fputc_unlocked(x,y) fputc (x,y) +# endif + +# if HAVE_DECL_FPUTS_UNLOCKED || defined fputs_unlocked +# undef fputs +# define fputs(x,y) fputs_unlocked (x,y) +# else +# define fputs_unlocked(x,y) fputs (x,y) +# endif + +# if HAVE_DECL_FREAD_UNLOCKED || defined fread_unlocked +# undef fread +# define fread(w,x,y,z) fread_unlocked (w,x,y,z) +# else +# define fread_unlocked(w,x,y,z) fread (w,x,y,z) +# endif + +# if HAVE_DECL_FWRITE_UNLOCKED || defined fwrite_unlocked +# undef fwrite +# define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z) +# else +# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) +# endif + +# if HAVE_DECL_GETC_UNLOCKED || defined getc_unlocked +# undef getc +# define getc(x) getc_unlocked (x) +# else +# define getc_unlocked(x) getc (x) +# endif + +# if HAVE_DECL_GETCHAR_UNLOCKED || defined getchar_unlocked +# undef getchar +# define getchar() getchar_unlocked () +# else +# define getchar_unlocked() getchar () +# endif + +# if HAVE_DECL_PUTC_UNLOCKED || defined putc_unlocked +# undef putc +# define putc(x,y) putc_unlocked (x,y) +# else +# define putc_unlocked(x,y) putc (x,y) +# endif + +# if HAVE_DECL_PUTCHAR_UNLOCKED || defined putchar_unlocked +# undef putchar +# define putchar(x) putchar_unlocked (x) +# else +# define putchar_unlocked(x) putchar (x) +# endif + +# undef flockfile +# define flockfile(x) ((void) 0) + +# undef ftrylockfile +# define ftrylockfile(x) 0 + +# undef funlockfile +# define funlockfile(x) ((void) 0) + +#endif /* UNLOCKED_IO_H */ diff --git a/include/libgnulib/unused-parameter.h b/include/libgnulib/unused-parameter.h new file mode 100755 index 0000000..83faefa --- /dev/null +++ b/include/libgnulib/unused-parameter.h @@ -0,0 +1,29 @@ +/* A C macro for declaring that specific function parameters are not used. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_UNUSED_PARAMETER is a marker that can be prepended to function parameter + declarations for parameters that are not used. This helps to reduce + warnings, such as from GCC -Wunused-parameter. The syntax is as follows: + _GL_UNUSED_PARAMETER type param + or more generally + _GL_UNUSED_PARAMETER param_decl + For example: + _GL_UNUSED_PARAMETER int param + _GL_UNUSED_PARAMETER int *(*param) (void) + */ +#ifndef _GL_UNUSED_PARAMETER +# define _GL_UNUSED_PARAMETER _GL_ATTRIBUTE_MAYBE_UNUSED +#endif diff --git a/include/libgnulib/userspec.h b/include/libgnulib/userspec.h new file mode 100755 index 0000000..dff2309 --- /dev/null +++ b/include/libgnulib/userspec.h @@ -0,0 +1,41 @@ +/* Parse a 'user:group' specifier (e.g. the first argument of chown utility). + Copyright (C) 2003-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering, 2003. */ + +#ifndef USERSPEC_H +#define USERSPEC_H 1 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +char const * +parse_user_spec (char const *spec_arg, uid_t *uid, gid_t *gid, + char **username_arg, char **groupname_arg); +char const * +parse_user_spec_warn (char const *spec_arg, uid_t *uid, gid_t *gid, + char **username_arg, char **groupname_arg, bool *pwarn); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/utimecmp.h b/include/libgnulib/utimecmp.h new file mode 100755 index 0000000..6af5b0b --- /dev/null +++ b/include/libgnulib/utimecmp.h @@ -0,0 +1,49 @@ +/* utimecmp.h -- compare file timestamps + + Copyright (C) 2004, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#ifndef UTIMECMP_H +#define UTIMECMP_H 1 + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Options for utimecmp. */ +enum +{ + /* Before comparing, truncate the source timestamp to the + resolution of the destination file system and to the resolution + of utimens. */ + UTIMECMP_TRUNCATE_SOURCE = 1 +}; + +int utimecmp (char const *, struct stat const *, struct stat const *, int); +int utimecmpat (int, char const *, struct stat const *, struct stat const *, + int); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/utimens.h b/include/libgnulib/utimens.h new file mode 100755 index 0000000..762c3f9 --- /dev/null +++ b/include/libgnulib/utimens.h @@ -0,0 +1,82 @@ +/* Set file access and modification times. + + Copyright 2012-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#if HAVE_UTIMENS || HAVE_LUTIMENS +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +int fdutimens (int, char const *, struct timespec const [2]); + +#if HAVE_UTIMENS +# define utimens rpl_utimens +#endif +int utimens (char const *, struct timespec const [2]); + +#if HAVE_LUTIMENS +# define lutimens rpl_lutimens +#endif +int lutimens (char const *, struct timespec const [2]); + +#ifdef __cplusplus +} +#endif + + +#if GNULIB_FDUTIMENSAT + +# include +# include + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_UTIMENS_INLINE +# define _GL_UTIMENS_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +int fdutimensat (int fd, int dir, char const *name, struct timespec const [2], + int atflag); + +/* Using this function makes application code slightly more readable. */ +_GL_UTIMENS_INLINE int +lutimensat (int dir, char const *file, struct timespec const times[2]) +{ + return utimensat (dir, file, times, AT_SYMLINK_NOFOLLOW); +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/include/libgnulib/vasnprintf.h b/include/libgnulib/vasnprintf.h new file mode 100755 index 0000000..7ed9145 --- /dev/null +++ b/include/libgnulib/vasnprintf.h @@ -0,0 +1,77 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 2002-2004, 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _VASNPRINTF_H +#define _VASNPRINTF_H + +/* This file uses _GL_ATTRIBUTE_FORMAT. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get va_list. */ +#include + +/* Get size_t. */ +#include + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Write formatted output to a string dynamically allocated with malloc(). + You can pass a preallocated buffer for the result in RESULTBUF and its + size in *LENGTHP; otherwise you pass RESULTBUF = NULL. + If successful, return the address of the string (this may be = RESULTBUF + if no dynamic memory allocation was necessary) and set *LENGTHP to the + number of resulting bytes, excluding the trailing NUL. Upon error, set + errno and return NULL. + + When dynamic memory allocation occurs, the preallocated buffer is left + alone (with possibly modified contents). This makes it possible to use + a statically allocated or stack-allocated buffer, like this: + + char buf[100]; + size_t len = sizeof (buf); + char *output = vasnprintf (buf, &len, format, args); + if (output == NULL) + ... error handling ...; + else + { + ... use the output string ...; + if (output != buf) + free (output); + } + */ +#if REPLACE_VASNPRINTF +# define asnprintf rpl_asnprintf +# define vasnprintf rpl_vasnprintf +#endif +extern char * asnprintf (char *restrict resultbuf, size_t *lengthp, + const char *format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); +extern char * vasnprintf (char *restrict resultbuf, size_t *lengthp, + const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); + +#ifdef __cplusplus +} +#endif + +#endif /* _VASNPRINTF_H */ diff --git a/include/libgnulib/vasnwprintf.h b/include/libgnulib/vasnwprintf.h new file mode 100755 index 0000000..3f134a3 --- /dev/null +++ b/include/libgnulib/vasnwprintf.h @@ -0,0 +1,63 @@ +/* vswprintf with automatic memory allocation. + Copyright (C) 2002-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _VASNWPRINTF_H +#define _VASNWPRINTF_H + +/* Get va_list. */ +#include + +/* Get wchar_t, size_t. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Write formatted output to a string dynamically allocated with malloc(). + You can pass a preallocated buffer for the result in RESULTBUF and its + size in *LENGTHP; otherwise you pass RESULTBUF = NULL. + If successful, return the address of the string (this may be = RESULTBUF + if no dynamic memory allocation was necessary) and set *LENGTHP to the + number of resulting bytes, excluding the trailing NUL. Upon error, set + errno and return NULL. + + When dynamic memory allocation occurs, the preallocated buffer is left + alone (with possibly modified contents). This makes it possible to use + a statically allocated or stack-allocated buffer, like this: + + wchar_t buf[100]; + size_t len = sizeof (buf) / sizeof (wchar_t); + wchar_t *output = vasnwprintf (buf, &len, format, args); + if (output == NULL) + ... error handling ...; + else + { + ... use the output string ...; + if (output != buf) + free (output); + } + */ +extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, + const wchar_t *format, ...); +extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, + const wchar_t *format, va_list args); + +#ifdef __cplusplus +} +#endif + +#endif /* _VASNWPRINTF_H */ diff --git a/include/libgnulib/verify.h b/include/libgnulib/verify.h new file mode 100755 index 0000000..49a73c0 --- /dev/null +++ b/include/libgnulib/verify.h @@ -0,0 +1,387 @@ +/* Compile-time assert-like macros. + + Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef _GL_VERIFY_H +#define _GL_VERIFY_H + + +/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC) + works as per C11. This is supported by GCC 4.6.0+ and by clang 4+. + + Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as + per C23. This is supported by GCC 9.1+. + + Support compilers claiming conformance to the relevant standard, + and also support GCC when not pedantic. If we were willing to slow + 'configure' down we could also use it with other compilers, but + since this affects only the quality of diagnostics, why bother? */ +#ifndef __cplusplus +# if (201112 <= __STDC_VERSION__ \ + || (!defined __STRICT_ANSI__ \ + && ((4 < __GNUC__ + (6 <= __GNUC_MINOR__) && !defined __clang__) \ + || 5 <= __clang_major__))) +# define _GL_HAVE__STATIC_ASSERT 1 +# endif +# if (202311 <= __STDC_VERSION__ \ + || (!defined __STRICT_ANSI__ && 9 <= __GNUC__ && !defined __clang__)) +# define _GL_HAVE__STATIC_ASSERT1 1 +# endif +#endif + +/* FreeBSD 9.1 , included by and lots of other + system headers, defines a conflicting _Static_assert that is no + better than ours; override it. */ +#ifndef _GL_HAVE__STATIC_ASSERT +# include +# undef _Static_assert +#endif + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + If _Static_assert works, verify (R) uses it directly. Similarly, + _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct + that is an operand of sizeof. + + The code below uses several ideas for C++ compilers, and for C + compilers that do not support _Static_assert: + + * The first step is ((R) ? 1 : -1). Given an expression R, of + integral or boolean or floating-point type, this yields an + expression of integral type, whose value is later verified to be + constant and nonnegative. + + * Next this expression W is wrapped in a type + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: W; + }. + If W is negative, this yields a compile-time error. No compiler can + deal with a bit-field of negative size. + + One might think that an array size check would have the same + effect, that is, that the type struct { unsigned int dummy[W]; } + would work as well. However, inside a function, some compilers + (such as C++ compilers and GNU C) allow local parameters and + variables inside array size expressions. With these compilers, + an array size check would not properly diagnose this misuse of + the verify macro: + + void function (int n) { verify (n < 0); } + + * For the verify macro, the struct _gl_verify_type will need to + somehow be embedded into a declaration. To be portable, this + declaration must declare an object, a constant, a function, or a + typedef name. If the declared entity uses the type directly, + such as in + + struct dummy {...}; + typedef struct {...} dummy; + extern struct {...} *dummy; + extern void dummy (struct {...} *); + extern struct {...} *dummy (void); + + two uses of the verify macro would yield colliding declarations + if the entity names are not disambiguated. A workaround is to + attach the current line number to the entity name: + + #define _GL_CONCAT0(x, y) x##y + #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) + extern struct {...} * _GL_CONCAT (dummy, __LINE__); + + But this has the problem that two invocations of verify from + within the same macro would collide, since the __LINE__ value + would be the same for both invocations. (The GCC __COUNTER__ + macro solves this problem, but is not portable.) + + A solution is to use the sizeof operator. It yields a number, + getting rid of the identity of the type. Declarations like + + extern int dummy [sizeof (struct {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + + can be repeated. + + * Should the implementation use a named struct or an unnamed struct? + Which of the following alternatives can be used? + + extern int dummy [sizeof (struct {...})]; + extern int dummy [sizeof (struct _gl_verify_type {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern void dummy (int [sizeof (struct _gl_verify_type {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; + + In the second and sixth case, the struct type is exported to the + outer scope; two such declarations therefore collide. GCC warns + about the first, third, and fourth cases. So the only remaining + possibility is the fifth case: + + extern int (*dummy (void)) [sizeof (struct {...})]; + + * GCC warns about duplicate declarations of the dummy function if + -Wredundant-decls is used. GCC 4.3 and later have a builtin + __COUNTER__ macro that can let us generate unique identifiers for + each dummy function, to suppress this warning. + + * This implementation exploits the fact that older versions of GCC, + which do not support _Static_assert, also do not warn about the + last declaration mentioned above. + + * GCC warns if -Wnested-externs is enabled and 'verify' is used + within a function body; but inside a function, you can always + arrange to use verify_expr instead. + + * In C++, any struct definition inside sizeof is invalid. + Use a template type to work around the problem. */ + +/* Concatenate two preprocessor tokens. */ +#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) +#define _GL_CONCAT0(x, y) x##y + +/* _GL_COUNTER is an integer, preferably one that changes each time we + use it. Use __COUNTER__ if it works, falling back on __LINE__ + otherwise. __LINE__ isn't perfect, but it's better than a + constant. */ +#if defined __COUNTER__ && __COUNTER__ != __COUNTER__ +# define _GL_COUNTER __COUNTER__ +#else +# define _GL_COUNTER __LINE__ +#endif + +/* Generate a symbol with the given prefix, making it unique if + possible. */ +#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) + +/* Verify requirement R at compile-time, as an integer constant expression + that returns 1. If R is false, fail at compile-time, preferably + with a diagnostic that includes the string-literal DIAGNOSTIC. */ + +#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ + (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) + +#ifdef __cplusplus +# if !GNULIB_defined_struct__gl_verify_type +template + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: w; + }; +# define GNULIB_defined_struct__gl_verify_type 1 +# endif +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + _gl_verify_type<(R) ? 1 : -1> +#elif defined _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { \ + _Static_assert (R, DIAGNOSTIC); \ + int _gl_dummy; \ + } +#else +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } +#endif + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. If R is false, fail at compile-time. + + This macro requires three or more arguments but uses at most the first + two, so that the _Static_assert macro optionally defined below supports + both the C11 two-argument syntax and the C23 one-argument syntax. + + Unfortunately, unlike C11, this implementation must appear as an + ordinary declaration, and cannot appear inside struct { ... }. */ + +#if 202311 <= __STDC_VERSION__ || 200410 <= __cpp_static_assert +# define _GL_VERIFY(R, DIAGNOSTIC, ...) static_assert (R, DIAGNOSTIC) +#elif defined _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC) +#else +# define _GL_VERIFY(R, DIAGNOSTIC, ...) \ + extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ + [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] +# if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) && !defined __clang__ +# pragma GCC diagnostic ignored "-Wnested-externs" +# endif +#endif + +/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ +#ifdef _GL_STATIC_ASSERT_H +/* Define _Static_assert if needed. */ +/* With clang ≥ 3.8.0 in C++ mode, _Static_assert already works and accepts + 1 or 2 arguments. We better don't override it, because clang's standard + C++ library uses static_assert inside classes in several places, and our + replacement via _GL_VERIFY does not work in these contexts. */ +# if (defined __cplusplus && defined __clang__ \ + && (4 <= __clang_major__ + (8 <= __clang_minor__))) +# if 5 <= __clang_major__ +/* Avoid "warning: 'static_assert' with no message is a C++17 extension". */ +# pragma clang diagnostic ignored "-Wc++17-extensions" +# else +/* Avoid "warning: static_assert with no message is a C++1z extension". */ +# pragma clang diagnostic ignored "-Wc++1z-extensions" +# endif +# elif !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert +# if !defined _MSC_VER || defined __clang__ +# define _Static_assert(...) \ + _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) +# else +# if defined __cplusplus && _MSC_VER >= 1910 + /* In MSVC 14.1 or newer, static_assert accepts one or two arguments, + but _Static_assert is not defined. */ +# define _Static_assert static_assert +# else + /* Work around MSVC preprocessor incompatibility with ISO C; see + . */ +# define _Static_assert(R, ...) \ + _GL_VERIFY ((R), "static assertion failed", -) +# endif +# endif +# endif +/* Define static_assert if needed. */ +# if (!defined static_assert \ + && __STDC_VERSION__ < 202311 \ + && (!defined __cplusplus \ + || (__cpp_static_assert < 201411 \ + && __GNUG__ < 6 && __clang_major__ < 6 && _MSC_VER < 1910))) +# if (defined __cplusplus && defined __GNUG__ && __GNUG__ < 6 \ + && __cplusplus == 201103L && !defined __clang__) +/* g++ >= 4.7, < 6 with option -std=c++11 or -std=gnu++11 supports the + two-arguments static_assert but not the one-argument static_assert, and + it does not support _Static_assert. + We have to play preprocessor tricks to distinguish the two cases. */ +# define _GL_SA1(a1) static_assert ((a1), "static assertion failed") +# define _GL_SA2 static_assert +# define _GL_SA3 static_assert +# define _GL_SA_PICK(x1,x2,x3,x4,...) x4 +# define static_assert(...) _GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1) (__VA_ARGS__) +# elif defined __cplusplus && _MSC_VER >= 1900 && !defined __clang__ +/* MSVC 14 in C++ mode supports the two-arguments static_assert but not + the one-argument static_assert, and it does not support _Static_assert. + We have to play preprocessor tricks to distinguish the two cases. + Since the MSVC preprocessor is not ISO C compliant (see above), + the solution is specific to MSVC. */ +# define _GL_EXPAND(x) x +# define _GL_SA1(a1) static_assert ((a1), "static assertion failed") +# define _GL_SA2 static_assert +# define _GL_SA3 static_assert +# define _GL_SA_PICK(x1,x2,x3,x4,...) x4 +# define static_assert(...) _GL_EXPAND(_GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1)) (__VA_ARGS__) +/* Avoid "fatal error C1189: #error: The C++ Standard Library forbids macroizing keywords." */ +# define _ALLOW_KEYWORD_MACROS 1 +# else +# define static_assert _Static_assert /* C11 requires this #define. */ +# endif +# endif +#endif + +/* @assert.h omit start@ */ + +#if defined __clang_major__ && __clang_major__ < 5 +# define _GL_HAS_BUILTIN_TRAP 0 +#elif 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) +# define _GL_HAS_BUILTIN_TRAP 1 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap) +#else +# define _GL_HAS_BUILTIN_TRAP 0 +#endif + +#ifndef _GL_HAS_BUILTIN_UNREACHABLE +# if defined __clang_major__ && __clang_major__ < 5 +# define _GL_HAS_BUILTIN_UNREACHABLE 0 +# elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__) && !defined __clang__ +# define _GL_HAS_BUILTIN_UNREACHABLE 1 +# elif defined __has_builtin +# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) +# else +# define _GL_HAS_BUILTIN_UNREACHABLE 0 +# endif +#endif + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + There are two macros, since no single macro can be used in all + contexts in C. verify_expr (R, E) is for scalar contexts, including + integer constant expression contexts. verify (R) is for declaration + contexts, e.g., the top level. */ + +/* Verify requirement R at compile-time. Return the value of the + expression E. */ + +#define verify_expr(R, E) \ + (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. verify (R) acts like static_assert (R) except that + it is portable to C11/C++14 and earlier, it can issue better + diagnostics, and its name is shorter and may be more convenient. */ + +#ifdef __PGI +/* PGI barfs if R is long. */ +# define verify(R) _GL_VERIFY (R, "verify (...)", -) +#else +# define verify(R) _GL_VERIFY (R, "verify (" #R ")", -) +#endif + +/* Assume that R always holds. Behavior is undefined if R is false, + fails to evaluate, or has side effects. + + 'assume (R)' is a directive from the programmer telling the + compiler that R is true so the compiler needn't generate code to + test R. This is why 'assume' is in verify.h: it's related to + static checking (in this case, static checking done by the + programmer), not dynamic checking. + + 'assume (R)' can affect compilation of all the code, not just code + that happens to be executed after the assume (R) is "executed". + For example, if the code mistakenly does 'assert (R); assume (R);' + the compiler is entitled to optimize away the 'assert (R)'. + + Although assuming R can help a compiler generate better code or + diagnostics, performance can suffer if R uses hard-to-optimize + features such as function calls not inlined by the compiler. + + Avoid Clang's __builtin_assume, as it breaks GNU Emacs master + as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see + . It's not known whether this breakage + is a Clang bug or an Emacs bug; play it safe for now. */ + +#if _GL_HAS_BUILTIN_UNREACHABLE +# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) +#elif 1200 <= _MSC_VER +# define assume(R) __assume (R) +#elif 202311 <= __STDC_VERSION__ +# include +# define assume(R) ((R) ? (void) 0 : unreachable ()) +#elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP + /* Doing it this way helps various packages when configured with + --enable-gcc-warnings, which compiles with -Dlint. It's nicer + if 'assume' silences warnings with GCC 3.4 through GCC 4.4.7 (2012). */ +# define assume(R) ((R) ? (void) 0 : __builtin_trap ()) +#else + /* Some older tools grok NOTREACHED, e.g., Oracle Studio 12.6 (2017). */ +# define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0) +#endif + +/* @assert.h omit end@ */ + +#endif diff --git a/include/libgnulib/version-etc.h b/include/libgnulib/version-etc.h new file mode 100755 index 0000000..505d2fa --- /dev/null +++ b/include/libgnulib/version-etc.h @@ -0,0 +1,83 @@ +/* Print --version and bug-reporting information in a consistent format. + Copyright (C) 1999, 2003, 2005, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#ifndef VERSION_ETC_H +# define VERSION_ETC_H 1 + +/* This file uses _GL_ATTRIBUTE_SENTINEL. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include +# include + +# ifdef __cplusplus +extern "C" +{ +# endif + +extern const char version_etc_copyright[]; + +/* The three functions below display the --version information in the + standard way: command and package names, package version, followed + by a short GPLv3+ notice and a list of up to 10 author names. + + If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of + the program. The formats are therefore: + + PACKAGE VERSION + + or + + COMMAND_NAME (PACKAGE) VERSION. + + The functions differ in the way they are passed author names: */ + +/* N_AUTHORS names are supplied in array AUTHORS. */ +extern void version_etc_arn (FILE *stream, + const char *command_name, const char *package, + const char *version, + const char * const * authors, size_t n_authors); + +/* Names are passed in the NULL-terminated array AUTHORS. */ +extern void version_etc_ar (FILE *stream, + const char *command_name, const char *package, + const char *version, const char * const * authors); + +/* Names are passed in the NULL-terminated va_list. */ +extern void version_etc_va (FILE *stream, + const char *command_name, const char *package, + const char *version, va_list authors); + +/* Names are passed as separate arguments, with an additional + NULL argument at the end. */ +extern void version_etc (FILE *stream, + const char *command_name, const char *package, + const char *version, + /* const char *author1, ..., NULL */ ...) + _GL_ATTRIBUTE_SENTINEL ((0)); + +/* Display the usual "Report bugs to" stanza. */ +extern void emit_bug_reporting_address (void); + +# ifdef __cplusplus +} +# endif + +#endif /* VERSION_ETC_H */ diff --git a/include/libgnulib/vla.h b/include/libgnulib/vla.h new file mode 100755 index 0000000..a999d12 --- /dev/null +++ b/include/libgnulib/vla.h @@ -0,0 +1,53 @@ +/* vla.h - variable length arrays + + Copyright 2014-2024 Free Software Foundation, Inc. + + 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 3 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, see . + + Written by Paul Eggert. */ + +/* The VLA_ELEMS macro does not allocate variable-length arrays (VLAs), + so it does not have the security or performance issues commonly + associated with VLAs. VLA_ELEMS is for exploiting a C11 feature + where a function can start like this: + + double scan_array (int n, double v[static n]) + + to require a caller to pass a vector V with at least N elements; + this allows better static checking and performance in some cases. + In C11 this feature means that V is a VLA, so the feature is + supported only if __STDC_NO_VLA__ is defined, and for compatibility + to platforms that do not support VLAs, VLA_ELEMS (n) expands to + nothing when __STDC_NO_VLA__ is not defined. */ + +/* A function's argument must point to an array with at least N elements. + Example: 'int main (int argc, char *argv[VLA_ELEMS (argc)]);'. */ + +#ifdef __STDC_NO_VLA__ +# define VLA_ELEMS(n) +#else +# define VLA_ELEMS(n) static n +#endif + +/* Although C99 requires support for variable-length arrays (VLAs), + some C compilers never supported VLAs and VLAs are optional in C11. + VLAs are controversial because their allocation may be unintended + or awkward to support, and large VLAs might cause security or + performance problems. GCC can diagnose the use of VLAs via the + -Wvla and -Wvla-larger-than warnings options, and defining the + macro GNULIB_NO_VLA disables the allocation of VLAs in Gnulib code. + + The VLA_ELEMS macro is unaffected by GNULIB_NO_VLA, since it does + not allocate VLAs. Programs that use VLA_ELEMS should be compiled + with 'gcc -Wvla-larger-than' instead of with 'gcc -Wvla'. */ diff --git a/include/libgnulib/vma-iter.h b/include/libgnulib/vma-iter.h new file mode 100755 index 0000000..f2eccdb --- /dev/null +++ b/include/libgnulib/vma-iter.h @@ -0,0 +1,69 @@ +/* Iteration over virtual memory areas. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file 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 file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _VMA_ITER_H +#define _VMA_ITER_H + +/* This file uses HAVE_PSTAT_GETPROCVM, HAVE_MQUERY. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Bit mask for the FLAGS parameter of a vma_iterate callback function. */ +#define VMA_PROT_READ (1<<0) +#define VMA_PROT_WRITE (1<<1) +#define VMA_PROT_EXECUTE (1<<2) + +typedef int (*vma_iterate_callback_fn) (void *data, + uintptr_t start, uintptr_t end, + unsigned int flags); + +/* Iterate over the virtual memory areas of the current process. + If such iteration is supported, the callback is called once for every + virtual memory area, in ascending order, with the following arguments: + - DATA is the same argument as passed to vma_iterate. + - START is the address of the first byte in the area, page-aligned. + - END is the address of the last byte in the area plus 1, page-aligned. + Note that it may be 0 for the last area in the address space. + - FLAGS is a combination of the VMA_* bits. + If the callback returns 0, the iteration continues. If it returns 1, + the iteration terminates prematurely. + This function may open file descriptors, but does not call malloc(). + Return 0 if all went well, or -1 in case of error. */ +extern int vma_iterate (vma_iterate_callback_fn callback, void *data); + +/* The macro VMA_ITERATE_SUPPORTED indicates that vma_iterate is supported on + this platform. + Note that even when this macro is defined, vma_iterate() may still fail to + find any virtual memory area, for example if /proc is not mounted. */ +#if defined __linux__ || defined __ANDROID__ || defined __GNU__ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sgi || defined __osf__ || defined __sun || HAVE_PSTAT_GETPROCVM || (defined __APPLE__ && defined __MACH__) || defined _WIN32 || defined __CYGWIN__ || defined __BEOS__ || defined __HAIKU__ || defined __minix || HAVE_MQUERY +# define VMA_ITERATE_SUPPORTED 1 +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _VMA_ITER_H */ diff --git a/include/libgnulib/vma-prot.h b/include/libgnulib/vma-prot.h new file mode 100755 index 0000000..aa99048 --- /dev/null +++ b/include/libgnulib/vma-prot.h @@ -0,0 +1,50 @@ +/* Determine the protection of a virtual memory area. + Copyright (C) 2024 Free Software Foundation, Inc. + + This file 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 file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2024. */ + +#ifndef _VMA_PROT_H +#define _VMA_PROT_H + +/* Get size_t. */ +#include + +/* Get VMA_PROT_READ, VMA_PROT_WRITE, VMA_PROT_EXECUTE. */ +#include "vma-iter.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Returns the declared permissions available on the memory area that + starts at START and is SIZE bytes long, as a combination of the bit masks + VMA_PROT_READ, VMA_PROT_WRITE, VMA_PROT_EXECUTE. + Note: The effective permissions may be larger. For example, some hardware + allows execute permission anywhere where read permission is present. + Returns -1 if it cannot be determined. + + Note: This function is expensive. If possible, an application should find + faster alternatives for memory areas that it has allocated itself, such as + through malloc(), mmap(), or shmat(). */ +extern int get_vma_prot (void *start, size_t size); + + +#ifdef __cplusplus +} +#endif + +#endif /* _VMA_PROT_H */ diff --git a/include/libgnulib/w32sock.h b/include/libgnulib/w32sock.h new file mode 100755 index 0000000..166a5f7 --- /dev/null +++ b/include/libgnulib/w32sock.h @@ -0,0 +1,140 @@ +/* w32sock.h --- internal auxiliary functions for Windows socket functions + + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paolo Bonzini */ + +#include + +/* Get O_RDWR and O_BINARY. */ +#include + +/* Get _open_osfhandle(). */ +#include + +/* Get _get_osfhandle(). */ +#if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +#else +# include +#endif + +#define FD_TO_SOCKET(fd) ((SOCKET) _get_osfhandle ((fd))) +#define SOCKET_TO_FD(fh) (_open_osfhandle ((intptr_t) (fh), O_RDWR | O_BINARY)) + +static inline void +set_winsock_errno (void) +{ + int err = WSAGetLastError (); + + /* Map some WSAE* errors to the runtime library's error codes. */ + switch (err) + { + case WSA_INVALID_HANDLE: + errno = EBADF; + break; + case WSA_NOT_ENOUGH_MEMORY: + errno = ENOMEM; + break; + case WSA_INVALID_PARAMETER: + errno = EINVAL; + break; + case WSAENAMETOOLONG: + errno = ENAMETOOLONG; + break; + case WSAENOTEMPTY: + errno = ENOTEMPTY; + break; + case WSAEWOULDBLOCK: + errno = EWOULDBLOCK; + break; + case WSAEINPROGRESS: + errno = EINPROGRESS; + break; + case WSAEALREADY: + errno = EALREADY; + break; + case WSAENOTSOCK: + errno = ENOTSOCK; + break; + case WSAEDESTADDRREQ: + errno = EDESTADDRREQ; + break; + case WSAEMSGSIZE: + errno = EMSGSIZE; + break; + case WSAEPROTOTYPE: + errno = EPROTOTYPE; + break; + case WSAENOPROTOOPT: + errno = ENOPROTOOPT; + break; + case WSAEPROTONOSUPPORT: + errno = EPROTONOSUPPORT; + break; + case WSAEOPNOTSUPP: + errno = EOPNOTSUPP; + break; + case WSAEAFNOSUPPORT: + errno = EAFNOSUPPORT; + break; + case WSAEADDRINUSE: + errno = EADDRINUSE; + break; + case WSAEADDRNOTAVAIL: + errno = EADDRNOTAVAIL; + break; + case WSAENETDOWN: + errno = ENETDOWN; + break; + case WSAENETUNREACH: + errno = ENETUNREACH; + break; + case WSAENETRESET: + errno = ENETRESET; + break; + case WSAECONNABORTED: + errno = ECONNABORTED; + break; + case WSAECONNRESET: + errno = ECONNRESET; + break; + case WSAENOBUFS: + errno = ENOBUFS; + break; + case WSAEISCONN: + errno = EISCONN; + break; + case WSAENOTCONN: + errno = ENOTCONN; + break; + case WSAETIMEDOUT: + errno = ETIMEDOUT; + break; + case WSAECONNREFUSED: + errno = ECONNREFUSED; + break; + case WSAELOOP: + errno = ELOOP; + break; + case WSAEHOSTUNREACH: + errno = EHOSTUNREACH; + break; + default: + errno = (err > 10000 && err < 10025) ? err - 10000 : err; + break; + } +} diff --git a/include/libgnulib/wait-process.h b/include/libgnulib/wait-process.h new file mode 100755 index 0000000..a09101c --- /dev/null +++ b/include/libgnulib/wait-process.h @@ -0,0 +1,72 @@ +/* Waiting for a subprocess to finish. + Copyright (C) 2001-2003, 2006, 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _WAIT_PROCESS_H +#define _WAIT_PROCESS_H + +/* Get pid_t. */ +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Wait for a subprocess to finish. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. + Arguments: + - child is the pid of the subprocess. + - progname is the name of the program executed by the subprocess, used for + error messages. + - If ignore_sigpipe is true, consider a subprocess termination due to + SIGPIPE as equivalent to a success. This is suitable for processes whose + only purpose is to write to standard output. This flag can be safely set + to false when the process' standard output is known to go to DEV_NULL. + - If null_stderr is true, the usual error message to stderr will be omitted. + This is suitable when the subprocess does not fulfill an important task. + - slave_process should be set to true if the process has been launched as a + slave process. + - If exit_on_error is true, any error will cause the main process to exit + with an error status. + - If termsigp is not NULL: *termsig will be set to the signal that + terminated the subprocess (if supported by the platform: not on native + Windows platforms), otherwise 0, and the error message about the signal + that terminated the subprocess will be omitted. + Prerequisites: The signal handler for SIGCHLD should not be set to SIG_IGN, + otherwise this function will not work. */ +extern int wait_subprocess (pid_t child, const char *progname, + bool ignore_sigpipe, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp); + +/* Register a subprocess as being a slave process. This means that the + subprocess will be terminated when its creator receives a catchable fatal + signal or exits normally. Registration ends when wait_subprocess() + notices that the subprocess has exited. */ +extern void register_slave_subprocess (pid_t child); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _WAIT_PROCESS_H */ diff --git a/include/libgnulib/warn-on-use.h b/include/libgnulib/warn-on-use.h new file mode 100755 index 0000000..73c4397 --- /dev/null +++ b/include/libgnulib/warn-on-use.h @@ -0,0 +1,153 @@ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif diff --git a/include/libgnulib/wcpcpy-impl.h b/include/libgnulib/wcpcpy-impl.h new file mode 100755 index 0000000..98066a6 --- /dev/null +++ b/include/libgnulib/wcpcpy-impl.h @@ -0,0 +1,24 @@ +/* Copy a wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcpcpy (wchar_t *dest, const wchar_t *src) +{ + for (; (*dest = *src) != (wchar_t)'\0'; src++, dest++) + ; + return dest; +} diff --git a/include/libgnulib/wcpncpy-impl.h b/include/libgnulib/wcpncpy-impl.h new file mode 100755 index 0000000..d212200 --- /dev/null +++ b/include/libgnulib/wcpncpy-impl.h @@ -0,0 +1,30 @@ +/* Copy a size-bounded wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcpncpy (wchar_t *dest, const wchar_t *src, size_t n) +{ + for (; n > 0 && (*dest = *src) != (wchar_t)'\0'; src++, dest++, n--) + ; + + /* This behavior is rarely useful, but it is here for consistency with + wcsncpy. */ + for (; n > 0; n--) + *dest++ = (wchar_t)'\0'; + + return dest-1; +} diff --git a/include/libgnulib/wcs-two-way.h b/include/libgnulib/wcs-two-way.h new file mode 100755 index 0000000..17011fe --- /dev/null +++ b/include/libgnulib/wcs-two-way.h @@ -0,0 +1,302 @@ +/* Wide character substring search, using the Two-Way algorithm. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Eric Blake , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Before including this file, you need to include and + , and define: + UNIT The element type of the needle and haystack. + RETURN_TYPE A macro that expands to the return type. + AVAILABLE(h, h_l, j, n_l) + A macro that returns nonzero if there are + at least N_L characters left starting at H[J]. + H is 'UNIT *', H_L, J, and N_L are 'size_t'; + H_L is an lvalue. For NUL-terminated searches, + H_L can be modified each iteration to avoid + having to compute the end of H up front. + + For case-insensitivity, you may optionally define: + CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L + characters of P1 and P2 are equal. + CANON_ELEMENT(c) A macro that canonicalizes an element right after + it has been fetched from one of the two strings. + The argument is a 'UNIT'; the result must be a + 'UNIT' as well. + + This file undefines the macros documented above, and defines + LONG_NEEDLE_THRESHOLD. +*/ + +#include +#include + +/* We use the Two-Way string matching algorithm (also known as + Chrochemore-Perrin), which guarantees linear complexity with + constant space. + + See https://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260 +*/ + +#ifndef MAX +# define MAX(a, b) ((a < b) ? (b) : (a)) +#endif + +#ifndef CANON_ELEMENT +# define CANON_ELEMENT(c) c +#endif +#ifndef CMP_FUNC +# define CMP_FUNC wmemcmp +#endif + +/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. + Return the index of the first character in the right half, and set + *PERIOD to the global period of the right half. + + The global period of a string is the smallest index (possibly its + length) at which all remaining bytes in the string are repetitions + of the prefix (the last repetition may be a subset of the prefix). + + When NEEDLE is factored into two halves, a local period is the + length of the smallest word that shares a suffix with the left half + and shares a prefix with the right half. All factorizations of a + non-empty NEEDLE have a local period of at least 1 and no greater + than NEEDLE_LEN. + + A critical factorization has the property that the local period + equals the global period. All strings have at least one critical + factorization with the left half smaller than the global period. + And while some strings have more than one critical factorization, + it is provable that with an ordered alphabet, at least one of the + critical factorizations corresponds to a maximal suffix. + + Given an ordered alphabet, a critical factorization can be computed + in linear time, with 2 * NEEDLE_LEN comparisons, by computing the + shorter of two ordered maximal suffixes. The ordered maximal + suffixes are determined by lexicographic comparison while tracking + periodicity. */ +static size_t +critical_factorization (const UNIT *needle, size_t needle_len, + size_t *period) +{ + /* Index of last character of left half, or SIZE_MAX. */ + size_t max_suffix, max_suffix_rev; + size_t j; /* Index into NEEDLE for current candidate suffix. */ + size_t k; /* Offset into current period. */ + size_t p; /* Intermediate period. */ + UNIT a, b; /* Current comparison characters. */ + + /* Special case NEEDLE_LEN of 1 or 2 (all callers already filtered + out 0-length needles. */ + if (needle_len < 3) + { + *period = 1; + return needle_len - 1; + } + + /* Invariants: + 0 <= j < NEEDLE_LEN - 1 + -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) + min(max_suffix, max_suffix_rev) < global period of NEEDLE + 1 <= p <= global period of NEEDLE + p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] + 1 <= k <= p + */ + + /* Perform lexicographic search. */ + max_suffix = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix + k]); + if (a < b) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* b < a */ + { + /* Suffix is larger, start over from current location. */ + max_suffix = j++; + k = p = 1; + } + } + *period = p; + + /* Perform reverse lexicographic search. */ + max_suffix_rev = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix_rev + k]); + if (b < a) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix_rev; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* a < b */ + { + /* Suffix is larger, start over from current location. */ + max_suffix_rev = j++; + k = p = 1; + } + } + + /* Choose the shorter suffix. Return the index of the first character + of the right half, rather than the last character of the left half. + + For some examples, 'banana' has two critical factorizations, both + exposed by the two lexicographic extreme suffixes of 'anana' and + 'nana', where both suffixes have a period of 2. On the other + hand, with 'aab' and 'bba', both strings have a single critical + factorization of the last character, with the suffix having a period + of 1. While the maximal lexicographic suffix of 'aab' is 'b', + the maximal lexicographic suffix of 'bba' is 'ba', which is not a + critical factorization. Conversely, the maximal reverse + lexicographic suffix of 'a' works for 'bba', but not 'ab' for + 'aab'. The shorter suffix of the two will always be a critical + factorization. */ + if (max_suffix_rev + 1 < max_suffix + 1) + return max_suffix + 1; + *period = p; + return max_suffix_rev + 1; +} + +/* Return the first location of non-empty NEEDLE within HAYSTACK, or + NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This + method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. + Performance is guaranteed to be linear, with an initialization cost + of 2 * NEEDLE_LEN comparisons. + + If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at + most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. + If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * + HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ +static RETURN_TYPE _GL_ATTRIBUTE_PURE +two_way_short_needle (const UNIT *haystack, size_t haystack_len, + const UNIT *needle, size_t needle_len) +{ + size_t i; /* Index into current character of NEEDLE. */ + size_t j; /* Index into current window of HAYSTACK. */ + size_t period; /* The period of the right half of needle. */ + size_t suffix; /* The index of the right half of needle. */ + + /* Factor the needle into two halves, such that the left half is + smaller than the global period, and the right half is + periodic (with a period as large as NEEDLE_LEN - suffix). */ + suffix = critical_factorization (needle, needle_len, &period); + + /* Perform the search. Each iteration compares the right half + first. */ + if (CMP_FUNC (needle, needle + period, suffix) == 0) + { + /* Entire needle is periodic; a mismatch in the left half can + only advance by the period, so use memory to avoid rescanning + known occurrences of the period in the right half. */ + size_t memory = 0; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = MAX (suffix, memory); + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (memory < i + 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i + 1 < memory + 1) + return (RETURN_TYPE) (haystack + j); + /* No match, so remember how many repetitions of period + on the right half were scanned. */ + j += period; + memory = needle_len - period; + } + else + { + j += i - suffix + 1; + memory = 0; + } + } + } + else + { + /* The two halves of needle are distinct; no extra memory is + required, and any mismatch results in a maximal shift. */ + period = MAX (suffix, needle_len - suffix) + 1; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = suffix; + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i == SIZE_MAX) + return (RETURN_TYPE) (haystack + j); + j += period; + } + else + j += i - suffix + 1; + } + } + return NULL; +} + +#undef AVAILABLE +#undef CANON_ELEMENT +#undef CMP_FUNC +#undef MAX diff --git a/include/libgnulib/wcscasecmp-impl.h b/include/libgnulib/wcscasecmp-impl.h new file mode 100755 index 0000000..bed3d2b --- /dev/null +++ b/include/libgnulib/wcscasecmp-impl.h @@ -0,0 +1,32 @@ +/* Compare two wide strings ignoring case. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +wcscasecmp (const wchar_t *s1, const wchar_t *s2) +{ + for (;;) + { + wchar_t wc1 = towlower (*s1++); + wchar_t wc2 = towlower (*s2++); + if (wc1 != (wchar_t)'\0' && wc1 == wc2) + continue; + /* Note that wc1 and wc2 each have at most 31 bits. */ + return (int)wc1 - (int)wc2; + /* > 0 if wc1 > wc2, < 0 if wc1 < wc2, + = 0 if wc1 and wc2 are both '\0'. */ + } +} diff --git a/include/libgnulib/wcscat-impl.h b/include/libgnulib/wcscat-impl.h new file mode 100755 index 0000000..a0e845f --- /dev/null +++ b/include/libgnulib/wcscat-impl.h @@ -0,0 +1,26 @@ +/* Concatenate two wide strings. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcscat (wchar_t *dest, const wchar_t *src) +{ + wchar_t *destptr = dest + wcslen (dest); + + for (; (*destptr = *src) != (wchar_t)'\0'; src++, destptr++) + ; + return dest; +} diff --git a/include/libgnulib/wcschr-impl.h b/include/libgnulib/wcschr-impl.h new file mode 100755 index 0000000..56b580f --- /dev/null +++ b/include/libgnulib/wcschr-impl.h @@ -0,0 +1,32 @@ +/* Search wide string for a wide character. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcschr (const wchar_t *wcs, wchar_t wc) +{ + for (;; wcs++) + { + if (*wcs == wc) + break; + if (*wcs == (wchar_t)'\0') + goto notfound; + } + return (wchar_t *) wcs; + + notfound: + return NULL; +} diff --git a/include/libgnulib/wcscmp-impl.h b/include/libgnulib/wcscmp-impl.h new file mode 100755 index 0000000..a25297f --- /dev/null +++ b/include/libgnulib/wcscmp-impl.h @@ -0,0 +1,33 @@ +/* Compare two wide strings. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +wcscmp (const wchar_t *s1, const wchar_t *s2) +{ + for (;;) + { + wchar_t wc1 = *s1++; + wchar_t wc2 = *s2++; + if (wc1 != (wchar_t)'\0' && wc1 == wc2) + continue; + /* ISO C requires wcscmp to work with all wchar_t values. + We cannot assume that wc1 and wc2 are in the range 0..INT_MAX. */ + return _GL_CMP (wc1, wc2); + /* > 0 if wc1 > wc2, < 0 if wc1 < wc2, + = 0 if wc1 and wc2 are both '\0'. */ + } +} diff --git a/include/libgnulib/wcscoll-impl.h b/include/libgnulib/wcscoll-impl.h new file mode 100755 index 0000000..dea22ce --- /dev/null +++ b/include/libgnulib/wcscoll-impl.h @@ -0,0 +1,103 @@ +/* Compare two wide strings using the current locale. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +wcscoll (const wchar_t *s1, const wchar_t *s2) +{ + char mbbuf1[1024]; + char mbbuf2[1024]; + char *mbs1; + char *mbs2; + + { + int saved_errno = errno; + + /* Convert s1 to a multibyte string, trying to avoid malloc(). */ + { + size_t ret; + + ret = wcstombs (mbbuf1, s1, sizeof (mbbuf1)); + if (ret == (size_t)-1) + goto failed1; + if (ret < sizeof (mbbuf1)) + mbs1 = mbbuf1; + else + { + size_t need = wcstombs (NULL, s1, 0); + if (need == (size_t)-1) + goto failed1; + mbs1 = (char *) malloc (need + 1); + if (mbs1 == NULL) + goto out_of_memory1; + ret = wcstombs (mbs1, s1, need + 1); + if (ret != need) + abort (); + } + } + + /* Convert s2 to a multibyte string, trying to avoid malloc(). */ + { + size_t ret; + + ret = wcstombs (mbbuf2, s2, sizeof (mbbuf2)); + if (ret == (size_t)-1) + goto failed2; + if (ret < sizeof (mbbuf2)) + mbs2 = mbbuf2; + else + { + size_t need = wcstombs (NULL, s2, 0); + if (need == (size_t)-1) + goto failed2; + mbs2 = (char *) malloc (need + 1); + if (mbs2 == NULL) + goto out_of_memory2; + ret = wcstombs (mbs2, s2, need + 1); + if (ret != need) + abort (); + } + } + + /* No error so far. */ + errno = saved_errno; + } + + /* Compare the two multibyte strings. */ + { + int result = strcoll (mbs1, mbs2); + + if (mbs1 != mbbuf1) + free (mbs1); + if (mbs2 != mbbuf2) + free (mbs2); + return result; + } + + out_of_memory2: + if (mbs1 != mbbuf1) + free (mbs1); + out_of_memory1: + errno = ENOMEM; + return 0; + + failed2: + if (mbs1 != mbbuf1) + free (mbs1); + failed1: + errno = EILSEQ; + return 0; +} diff --git a/include/libgnulib/wcscpy-impl.h b/include/libgnulib/wcscpy-impl.h new file mode 100755 index 0000000..fba8eb2 --- /dev/null +++ b/include/libgnulib/wcscpy-impl.h @@ -0,0 +1,26 @@ +/* Copy a wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcscpy (wchar_t *dest, const wchar_t *src) +{ + wchar_t *destptr = dest; + + for (; (*destptr = *src) != (wchar_t)'\0'; src++, destptr++) + ; + return dest; +} diff --git a/include/libgnulib/wcscspn-impl.h b/include/libgnulib/wcscspn-impl.h new file mode 100755 index 0000000..abc5e1a --- /dev/null +++ b/include/libgnulib/wcscspn-impl.h @@ -0,0 +1,47 @@ +/* Search a wide string for any of a set of wide characters. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +wcscspn (const wchar_t *wcs, const wchar_t *reject) +{ + /* Optimize two cases. */ + if (reject[0] == (wchar_t)'\0') + return wcslen (wcs); + + if (reject[1] == (wchar_t)'\0') + { + wchar_t wc = reject[0]; + const wchar_t *ptr = wcs; + for (; *ptr != (wchar_t)'\0'; ptr++) + { + if (*ptr == wc) + break; + } + return ptr - wcs; + } + + /* General case. */ + { + const wchar_t *ptr = wcs; + for (; *ptr != (wchar_t)'\0'; ptr++) + { + if (wcschr (reject, *ptr)) + break; + } + return ptr - wcs; + } +} diff --git a/include/libgnulib/wcsdup-impl.h b/include/libgnulib/wcsdup-impl.h new file mode 100755 index 0000000..1fe5179 --- /dev/null +++ b/include/libgnulib/wcsdup-impl.h @@ -0,0 +1,29 @@ +/* Duplicate a wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcsdup (const wchar_t *s) +{ + size_t n = wcslen (s) + 1; + wchar_t *copy = (wchar_t *) malloc (n * sizeof (wchar_t)); + if (copy != NULL) + return wmemcpy (copy, s, n); + else + /* The glibc documentation does not say that errno should be set to ENOMEM + here. */ + return NULL; +} diff --git a/include/libgnulib/wcslen-impl.h b/include/libgnulib/wcslen-impl.h new file mode 100755 index 0000000..269908f --- /dev/null +++ b/include/libgnulib/wcslen-impl.h @@ -0,0 +1,26 @@ +/* Determine the length of a wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +wcslen (const wchar_t *s) +{ + const wchar_t *ptr; + + for (ptr = s; *ptr != (wchar_t)'\0'; ptr++) + ; + return ptr - s; +} diff --git a/include/libgnulib/wcsncasecmp-impl.h b/include/libgnulib/wcsncasecmp-impl.h new file mode 100755 index 0000000..a8a58b7 --- /dev/null +++ b/include/libgnulib/wcsncasecmp-impl.h @@ -0,0 +1,36 @@ +/* Compare two wide strings ignoring case. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +wcsncasecmp (const wchar_t *s1, const wchar_t *s2, size_t n) +{ + for (; n > 0;) + { + wchar_t wc1 = towlower (*s1++); + wchar_t wc2 = towlower (*s2++); + if (wc1 != (wchar_t)'\0' && wc1 == wc2) + { + n--; + continue; + } + /* Note that wc1 and wc2 each have at most 31 bits. */ + return (int)wc1 - (int)wc2; + /* > 0 if wc1 > wc2, < 0 if wc1 < wc2, + = 0 if wc1 and wc2 are both '\0'. */ + } + return 0; +} diff --git a/include/libgnulib/wcsncat-impl.h b/include/libgnulib/wcsncat-impl.h new file mode 100755 index 0000000..2d31384 --- /dev/null +++ b/include/libgnulib/wcsncat-impl.h @@ -0,0 +1,28 @@ +/* Append part of a wide string to a wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcsncat (wchar_t *dest, const wchar_t *src, size_t n) +{ + wchar_t *destptr = dest + wcslen (dest); + + for (; n > 0 && (*destptr = *src) != (wchar_t)'\0'; src++, destptr++, n--) + ; + if (n == 0) + *destptr = (wchar_t)'\0'; + return dest; +} diff --git a/include/libgnulib/wcsncmp-impl.h b/include/libgnulib/wcsncmp-impl.h new file mode 100755 index 0000000..383b18b --- /dev/null +++ b/include/libgnulib/wcsncmp-impl.h @@ -0,0 +1,37 @@ +/* Compare two wide strings. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +wcsncmp (const wchar_t *s1, const wchar_t *s2, size_t n) +{ + for (; n > 0;) + { + wchar_t wc1 = *s1++; + wchar_t wc2 = *s2++; + if (wc1 != (wchar_t)'\0' && wc1 == wc2) + { + n--; + continue; + } + /* ISO C requires wcsncmp to work with all wchar_t values. + We cannot assume that wc1 and wc2 are in the range 0..INT_MAX. */ + return _GL_CMP (wc1, wc2); + /* > 0 if wc1 > wc2, < 0 if wc1 < wc2, + = 0 if wc1 and wc2 are both '\0'. */ + } + return 0; +} diff --git a/include/libgnulib/wcsncpy-impl.h b/include/libgnulib/wcsncpy-impl.h new file mode 100755 index 0000000..d29237c --- /dev/null +++ b/include/libgnulib/wcsncpy-impl.h @@ -0,0 +1,32 @@ +/* Copy a size-bounded wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcsncpy (wchar_t *dest, const wchar_t *src, size_t n) +{ + wchar_t *destptr = dest; + + for (; n > 0 && (*destptr = *src) != (wchar_t)'\0'; src++, destptr++, n--) + ; + + /* This behavior is rarely useful, but it is specified by the ISO C + standard. */ + for (; n > 0; n--) + *destptr++ = (wchar_t)'\0'; + + return dest; +} diff --git a/include/libgnulib/wcsnlen-impl.h b/include/libgnulib/wcsnlen-impl.h new file mode 100755 index 0000000..2e977f7 --- /dev/null +++ b/include/libgnulib/wcsnlen-impl.h @@ -0,0 +1,26 @@ +/* Determine the length of a size-bounded wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +wcsnlen (const wchar_t *s, size_t maxlen) +{ + const wchar_t *ptr; + + for (ptr = s; maxlen > 0 && *ptr != (wchar_t)'\0'; ptr++, maxlen--) + ; + return ptr - s; +} diff --git a/include/libgnulib/wcsnrtombs-impl.h b/include/libgnulib/wcsnrtombs-impl.h new file mode 100755 index 0000000..0961c05 --- /dev/null +++ b/include/libgnulib/wcsnrtombs-impl.h @@ -0,0 +1,90 @@ +/* Convert wide string to string. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +FUNC (char *dest, const SCHAR_T **srcp, size_t srclen, size_t len, mbstate_t *ps) +{ + if (ps == NULL) + ps = &INTERNAL_STATE; + { + const SCHAR_T *src = *srcp; + size_t cur_max = MB_CUR_MAX; + char buf[64]; + + if (!(cur_max <= sizeof (buf))) + abort (); + + if (dest != NULL) + { + char *destptr = dest; + + for (; srclen > 0 && len > 0; src++, srclen--) + { + SCHAR_T wc = *src; + size_t ret = WCRTOMB (len >= cur_max ? destptr : buf, wc, ps); + + if (ret == (size_t)(-1)) + goto bad_input; + if (!(ret <= cur_max)) + abort (); + if (len < ret) + break; + if (len < cur_max) + memcpy (destptr, buf, ret); + if (wc == 0) + { + src = NULL; + /* Here mbsinit (ps). */ + break; + } + destptr += ret; + len -= ret; + } + *srcp = src; + return destptr - dest; + } + else + { + /* Ignore dest and len, don't store *srcp at the end, and + don't clobber *ps. */ + mbstate_t state = *ps; + size_t totalcount = 0; + + for (; srclen > 0; src++, srclen--) + { + SCHAR_T wc = *src; + size_t ret = WCRTOMB (buf, wc, &state); + + if (ret == (size_t)(-1)) + goto bad_input2; + if (wc == 0) + { + /* Here mbsinit (&state). */ + break; + } + totalcount += ret; + } + return totalcount; + } + + bad_input: + *srcp = src; + bad_input2: + errno = EILSEQ; + return (size_t)(-1); + } +} diff --git a/include/libgnulib/wcspbrk-impl.h b/include/libgnulib/wcspbrk-impl.h new file mode 100755 index 0000000..43a5636 --- /dev/null +++ b/include/libgnulib/wcspbrk-impl.h @@ -0,0 +1,47 @@ +/* Search a wide string for any of a set of wide characters. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcspbrk (const wchar_t *wcs, const wchar_t *accept) +{ + /* Optimize two cases. */ + if (accept[0] == (wchar_t)'\0') + return NULL; + + if (accept[1] == (wchar_t)'\0') + { + wchar_t wc = accept[0]; + const wchar_t *ptr = wcs; + for (; *ptr != (wchar_t)'\0'; ptr++) + { + if (*ptr == wc) + return (wchar_t *) ptr; + } + return NULL; + } + + /* General case. */ + { + const wchar_t *ptr = wcs; + for (; *ptr != (wchar_t)'\0'; ptr++) + { + if (wcschr (accept, *ptr)) + return (wchar_t *) ptr; + } + return NULL; + } +} diff --git a/include/libgnulib/wcsrchr-impl.h b/include/libgnulib/wcsrchr-impl.h new file mode 100755 index 0000000..6341559 --- /dev/null +++ b/include/libgnulib/wcsrchr-impl.h @@ -0,0 +1,33 @@ +/* Search wide string for a wide character. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcsrchr (const wchar_t *wcs, wchar_t wc) +{ + /* Calling wcslen and then searching from the other end would cause more + memory accesses. Avoid that, at the cost of a few more comparisons. */ + wchar_t *result = NULL; + + for (;; wcs++) + { + if (*wcs == wc) + result = (wchar_t *) wcs; + if (*wcs == (wchar_t)'\0') + break; + } + return result; +} diff --git a/include/libgnulib/wcsrtombs-impl.h b/include/libgnulib/wcsrtombs-impl.h new file mode 100755 index 0000000..c969858 --- /dev/null +++ b/include/libgnulib/wcsrtombs-impl.h @@ -0,0 +1,90 @@ +/* Convert wide string to string. + Copyright (C) 2008, 2010-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +FUNC (char *dest, const SCHAR_T **srcp, size_t len, mbstate_t *ps) +{ + if (ps == NULL) + ps = &INTERNAL_STATE; + { + const SCHAR_T *src = *srcp; + size_t cur_max = MB_CUR_MAX; + char buf[64]; + + if (!(cur_max <= sizeof (buf))) + abort (); + + if (dest != NULL) + { + char *destptr = dest; + + for (; len > 0; src++) + { + SCHAR_T wc = *src; + size_t ret = WCRTOMB (len >= cur_max ? destptr : buf, wc, ps); + + if (ret == (size_t)(-1)) + goto bad_input; + if (!(ret <= cur_max)) + abort (); + if (len < ret) + break; + if (len < cur_max) + memcpy (destptr, buf, ret); + if (wc == 0) + { + src = NULL; + /* Here mbsinit (ps). */ + break; + } + destptr += ret; + len -= ret; + } + *srcp = src; + return destptr - dest; + } + else + { + /* Ignore dest and len, don't store *srcp at the end, and + don't clobber *ps. */ + mbstate_t state = *ps; + size_t totalcount = 0; + + for (;; src++) + { + SCHAR_T wc = *src; + size_t ret = WCRTOMB (buf, wc, &state); + + if (ret == (size_t)(-1)) + goto bad_input2; + if (wc == 0) + { + /* Here mbsinit (&state). */ + break; + } + totalcount += ret; + } + return totalcount; + } + + bad_input: + *srcp = src; + bad_input2: + errno = EILSEQ; + return (size_t)(-1); + } +} diff --git a/include/libgnulib/wcsspn-impl.h b/include/libgnulib/wcsspn-impl.h new file mode 100755 index 0000000..a95cff0 --- /dev/null +++ b/include/libgnulib/wcsspn-impl.h @@ -0,0 +1,47 @@ +/* Advance in a wide string, skipping any of a set of wide characters. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +wcsspn (const wchar_t *wcs, const wchar_t *accept) +{ + /* Optimize two cases. */ + if (accept[0] == (wchar_t)'\0') + return 0; + + if (accept[1] == (wchar_t)'\0') + { + wchar_t wc = accept[0]; + const wchar_t *ptr = wcs; + for (; *ptr != (wchar_t)'\0'; ptr++) + { + if (*ptr != wc) + break; + } + return ptr - wcs; + } + + /* General case. */ + { + const wchar_t *ptr = wcs; + for (; *ptr != (wchar_t)'\0'; ptr++) + { + if (!wcschr (accept, *ptr)) + break; + } + return ptr - wcs; + } +} diff --git a/include/libgnulib/wcsstr-impl.h b/include/libgnulib/wcsstr-impl.h new file mode 100755 index 0000000..b5f094e --- /dev/null +++ b/include/libgnulib/wcsstr-impl.h @@ -0,0 +1,56 @@ +/* Locate a substring in a wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake, 2008. */ + +#define AVAILABLE(h, h_l, j, n_l) \ + (!MEMCHR0 ((h) + (h_l), (j) + (n_l) - (h_l)) \ + && ((h_l) = (j) + (n_l))) +#include "wcs-two-way.h" + +RETURN_TYPE +FUNC (const UNIT *haystack_start, const UNIT *needle_start) +{ + const UNIT *haystack = haystack_start; + const UNIT *needle = needle_start; + size_t needle_len; /* Length of NEEDLE. */ + size_t haystack_len; /* Known minimum length of HAYSTACK. */ + bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ + + /* Determine length of NEEDLE, and in the process, make sure + HAYSTACK is at least as long (no point processing all of a long + NEEDLE if HAYSTACK is too short). */ + while (*haystack && *needle) + ok &= *haystack++ == *needle++; + if (*needle) + return NULL; + if (ok) + return (RETURN_TYPE) haystack_start; + + /* Reduce the size of haystack using STRCHR, since it has a smaller + linear coefficient than the Two-Way algorithm. */ + needle_len = needle - needle_start; + haystack = STRCHR (haystack_start + 1, *needle_start); + if (!haystack || __builtin_expect (needle_len == 1, 0)) + return (RETURN_TYPE) haystack; + needle -= needle_len; + haystack_len = (haystack > haystack_start + needle_len ? 1 + : needle_len + haystack_start - haystack); + + /* Perform the search. */ + return two_way_short_needle (haystack, haystack_len, + needle, needle_len); +} diff --git a/include/libgnulib/wcstok-impl.h b/include/libgnulib/wcstok-impl.h new file mode 100755 index 0000000..2437929 --- /dev/null +++ b/include/libgnulib/wcstok-impl.h @@ -0,0 +1,50 @@ +/* Split a wide string into tokens. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wcstok (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr) +{ + if (wcs == NULL) + { + wcs = *ptr; + if (wcs == NULL) + return NULL; /* reminder that end of token sequence has been reached */ + } + + /* Skip leading delimiters. */ + wcs += wcsspn (wcs, delim); + + /* Found a token? */ + if (*wcs == (wchar_t)'\0') + { + *ptr = NULL; + return NULL; + } + /* Move past the token. */ + { + wchar_t *token_end = wcspbrk (wcs, delim); + if (token_end) + { + /* NUL-terminate the token. */ + *token_end = (wchar_t)'\0'; + *ptr = token_end + 1; + } + else + *ptr = NULL; + } + return wcs; +} diff --git a/include/libgnulib/wcswidth-impl.h b/include/libgnulib/wcswidth-impl.h new file mode 100755 index 0000000..37b1c21 --- /dev/null +++ b/include/libgnulib/wcswidth-impl.h @@ -0,0 +1,56 @@ +/* Determine number of screen columns needed for a size-bounded wide string. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +FUNC (const UNIT *s, size_t n) +{ + int count = 0; + for (; n > 0; s++, n--) + { + UNIT c = *s; + if (c == (UNIT)'\0') + break; + { + int width = CHARACTER_WIDTH (c); + if (width < 0) + goto found_nonprinting; + if (width > INT_MAX - count) + goto overflow; + count += width; + } + } + return count; + + /* The total width has become > INT_MAX. + Continue searching for a non-printing wide character. */ + for (; n > 0; s++, n--) + { + UNIT c = *s; + if (c == (UNIT)'\0') + break; + { + int width = CHARACTER_WIDTH (c); + if (width < 0) + goto found_nonprinting; + } + overflow: ; + } + return INT_MAX; + + found_nonprinting: + return -1; +} diff --git a/include/libgnulib/wcsxfrm-impl.h b/include/libgnulib/wcsxfrm-impl.h new file mode 100755 index 0000000..f2eb6d1 --- /dev/null +++ b/include/libgnulib/wcsxfrm-impl.h @@ -0,0 +1,92 @@ +/* Transform wide string for comparison using the current locale. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +wcsxfrm (wchar_t *s1, const wchar_t *s2, size_t n) +{ + char mbbuf2[1024]; + char *mbs2; + + { + int saved_errno = errno; + size_t result; + + /* Convert s2 to a multibyte string, trying to avoid malloc(). */ + { + size_t ret; + + ret = wcstombs (mbbuf2, s2, sizeof (mbbuf2)); + if (ret == (size_t)-1) + goto failed; + if (ret < sizeof (mbbuf2)) + mbs2 = mbbuf2; + else + { + size_t need = wcstombs (NULL, s2, 0); + if (need == (size_t)-1) + goto failed; + mbs2 = (char *) malloc (need + 1); + if (mbs2 == NULL) + goto out_of_memory; + ret = wcstombs (mbs2, s2, need + 1); + if (ret != need) + abort (); + } + } + + /* Transform the multibyte string. */ + errno = 0; + result = strxfrm ((char *)s1, mbs2, n); + if (errno != 0) + { + /* An error occurred. */ + if (mbs2 != mbbuf2) + free (mbs2); + return 0; + } + + if (result < n) + { + /* Convert the result by mapping char[] -> wchar_t[]. + Since strcmp() compares the elements as 'unsigned char' values, + whereas wcscmp() compares the elements as 'wchar_t' values, we need + to map 1 'unsigned char' to 1 'wchar_t'. (We could also map 2 + consecutive 'unsigned char' values to 1 'wchar_t' value, but this is + not needed. */ + wchar_t *wcp = s1 + n; + char *cp = (char *)s1 + n; + + while (wcp > s1) + *--wcp = (wchar_t) (unsigned char) *--cp; + } + + if (mbs2 != mbbuf2) + free (mbs2); + + /* No error. */ + errno = saved_errno; + return result; + } + + out_of_memory: + errno = ENOMEM; + return 0; + + failed: + errno = EILSEQ; + return 0; +} diff --git a/include/libgnulib/wctomb-impl.h b/include/libgnulib/wctomb-impl.h new file mode 100755 index 0000000..ccec9ce --- /dev/null +++ b/include/libgnulib/wctomb-impl.h @@ -0,0 +1,34 @@ +/* Convert wide character to multibyte character. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +wctomb (char *s, wchar_t wc) +{ + if (s == NULL) + return 0; + else + { + mbstate_t state; + size_t result; + + mbszero (&state); + result = wcrtomb (s, wc, &state); + if (result == (size_t)-1) + return -1; + return result; + } +} diff --git a/include/libgnulib/wctrans-impl.h b/include/libgnulib/wctrans-impl.h new file mode 100755 index 0000000..284777d --- /dev/null +++ b/include/libgnulib/wctrans-impl.h @@ -0,0 +1,37 @@ +/* Get descriptor for a wide character case conversion. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wctrans_t +wctrans (const char *name) +{ + if (name[0] == 't' + && name[1] == 'o') + switch (name[2]) + { + case 'l': + if (strcmp (name + 3, "ower") == 0) + return (wctrans_t) towlower; + break; + case 'u': + if (strcmp (name + 3, "pper") == 0) + return (wctrans_t) towupper; + break; + default: + break; + } + return NULL; +} diff --git a/include/libgnulib/wctype-impl.h b/include/libgnulib/wctype-impl.h new file mode 100755 index 0000000..26d68b4 --- /dev/null +++ b/include/libgnulib/wctype-impl.h @@ -0,0 +1,96 @@ +/* Get descriptor for a wide character property. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wctype_t +wctype (const char* name) +{ + switch (name[0]) + { + case 'a': + switch (name[1]) + { + case 'l': + switch (name[2]) + { + case 'n': + if (strcmp (name + 3, "um") == 0) + return (wctype_t) iswalnum; + break; + case 'p': + if (strcmp (name + 3, "ha") == 0) + return (wctype_t) iswalpha; + break; + default: + break; + } + break; + default: + break; + } + break; + case 'b': + if (strcmp (name + 1, "lank") == 0) + return (wctype_t) iswblank; + break; + case 'c': + if (strcmp (name + 1, "ntrl") == 0) + return (wctype_t) iswcntrl; + break; + case 'd': + if (strcmp (name + 1, "igit") == 0) + return (wctype_t) iswdigit; + break; + case 'g': + if (strcmp (name + 1, "raph") == 0) + return (wctype_t) iswgraph; + break; + case 'l': + if (strcmp (name + 1, "ower") == 0) + return (wctype_t) iswlower; + break; + case 'p': + switch (name[1]) + { + case 'r': + if (strcmp (name + 2, "int") == 0) + return (wctype_t) iswprint; + break; + case 'u': + if (strcmp (name + 2, "nct") == 0) + return (wctype_t) iswpunct; + break; + default: + break; + } + break; + case 's': + if (strcmp (name + 1, "pace") == 0) + return (wctype_t) iswspace; + break; + case 'u': + if (strcmp (name + 1, "pper") == 0) + return (wctype_t) iswupper; + break; + case 'x': + if (strcmp (name + 1, "digit") == 0) + return (wctype_t) iswxdigit; + break; + default: + break; + } + return NULL; +} diff --git a/include/libgnulib/windows-cond.h b/include/libgnulib/windows-cond.h new file mode 100755 index 0000000..cfc160f --- /dev/null +++ b/include/libgnulib/windows-cond.h @@ -0,0 +1,79 @@ +/* Condition variables (native Windows implementation). + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Yoann Vandoorselaere , 2008. + Based on Bruno Haible lock.h */ + +#ifndef _WINDOWS_COND_H +#define _WINDOWS_COND_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +#include + +#include "windows-initguard.h" + +#ifndef _glwthread_linked_waitqueue_link_defined +#define _glwthread_linked_waitqueue_link_defined +struct glwthread_waitqueue_link +{ + struct glwthread_waitqueue_link *wql_next; + struct glwthread_waitqueue_link *wql_prev; +}; +#endif /* _glwthread_linked_waitqueue_link_defined */ + +typedef struct + { + struct glwthread_waitqueue_link wq_list; /* circular list of waiting threads */ + } + glwthread_linked_waitqueue_t; + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; /* protects the remaining fields */ + glwthread_linked_waitqueue_t waiters; /* waiting threads */ + } + glwthread_cond_t; + +#define GLWTHREAD_COND_INIT { GLWTHREAD_INITGUARD_INIT } + +#ifdef __cplusplus +extern "C" { +#endif + +extern int glwthread_cond_init (glwthread_cond_t *cond); +/* Here, to cope with the various types of mutexes, the mutex is a 'void *', and + the caller needs to pass the corresponding *_lock and *_unlock functions. */ +extern int glwthread_cond_wait (glwthread_cond_t *cond, + void *mutex, + int (*mutex_lock) (void *), + int (*mutex_unlock) (void *)); +extern int glwthread_cond_timedwait (glwthread_cond_t *cond, + void *mutex, + int (*mutex_lock) (void *), + int (*mutex_unlock) (void *), + const struct timespec *abstime); +extern int glwthread_cond_signal (glwthread_cond_t *cond); +extern int glwthread_cond_broadcast (glwthread_cond_t *cond); +extern int glwthread_cond_destroy (glwthread_cond_t *cond); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_COND_H */ diff --git a/include/libgnulib/windows-initguard.h b/include/libgnulib/windows-initguard.h new file mode 100755 index 0000000..6bace3f --- /dev/null +++ b/include/libgnulib/windows-initguard.h @@ -0,0 +1,35 @@ +/* Init guards, somewhat like spinlocks (native Windows implementation). + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_INITGUARD_H +#define _WINDOWS_INITGUARD_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +typedef struct + { + volatile int done; + volatile LONG started; + } + glwthread_initguard_t; + +#define GLWTHREAD_INITGUARD_INIT { 0, -1 } + +#endif /* _WINDOWS_INITGUARD_H */ diff --git a/include/libgnulib/windows-mutex.h b/include/libgnulib/windows-mutex.h new file mode 100755 index 0000000..cb676c1 --- /dev/null +++ b/include/libgnulib/windows-mutex.h @@ -0,0 +1,52 @@ +/* Plain mutexes (native Windows implementation). + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_MUTEX_H +#define _WINDOWS_MUTEX_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +#include "windows-initguard.h" + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + DWORD owner; + CRITICAL_SECTION lock; + } + glwthread_mutex_t; + +#define GLWTHREAD_MUTEX_INIT { GLWTHREAD_INITGUARD_INIT } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_mutex_init (glwthread_mutex_t *mutex); +extern int glwthread_mutex_lock (glwthread_mutex_t *mutex); +extern int glwthread_mutex_trylock (glwthread_mutex_t *mutex); +extern int glwthread_mutex_unlock (glwthread_mutex_t *mutex); +extern int glwthread_mutex_destroy (glwthread_mutex_t *mutex); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_MUTEX_H */ diff --git a/include/libgnulib/windows-once.h b/include/libgnulib/windows-once.h new file mode 100755 index 0000000..18ed8d8 --- /dev/null +++ b/include/libgnulib/windows-once.h @@ -0,0 +1,48 @@ +/* Once-only control (native Windows implementation). + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_ONCE_H +#define _WINDOWS_ONCE_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +typedef struct + { + volatile LONG inited; + volatile LONG num_threads; + volatile LONG started; + CRITICAL_SECTION lock; + } + glwthread_once_t; + +#define GLWTHREAD_ONCE_INIT { -1, 0, -1 } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_once (glwthread_once_t *once_control, + void (*initfunction) (void)); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_ONCE_H */ diff --git a/include/libgnulib/windows-path.h b/include/libgnulib/windows-path.h new file mode 100755 index 0000000..f4199db --- /dev/null +++ b/include/libgnulib/windows-path.h @@ -0,0 +1,54 @@ +/* Auxiliary functions for the creation of subprocesses on Windows. + Copyright (C) 2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2024. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _WINDOWS_PATH_H +#define _WINDOWS_PATH_H + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Returns an augmented "PATH=..." string for the environment of a child process. + dll_dirs is a NULL-terminated list of directories that contain DLLs needed to + execute the program, or NULL if none is needed. + Returns a freshly allocated string. In case of memory allocation failure, + NULL is returned, with errno set. */ +extern char * extended_PATH (const char * const *dll_dirs) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +/* Returns an augmented environment for a child process. + dll_dirs is a NULL-terminated list of directories that contain DLLs needed to + execute the program, or NULL if none is needed. + Returns a freshly allocated string array, with a freshly allocated first + string. In case of memory allocation failure, NULL is returned, with errno + set. */ +extern char ** extended_environ (const char * const *dll_dirs) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_PATH_H */ diff --git a/include/libgnulib/windows-recmutex.h b/include/libgnulib/windows-recmutex.h new file mode 100755 index 0000000..9fa445b --- /dev/null +++ b/include/libgnulib/windows-recmutex.h @@ -0,0 +1,57 @@ +/* Plain recursive mutexes (native Windows implementation). + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_RECMUTEX_H +#define _WINDOWS_RECMUTEX_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +#include "windows-initguard.h" + +/* The native Windows documentation says that CRITICAL_SECTION already + implements a recursive lock. But we need not rely on it: It's easy to + implement a recursive lock without this assumption. */ + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + DWORD owner; + unsigned long depth; + CRITICAL_SECTION lock; + } + glwthread_recmutex_t; + +#define GLWTHREAD_RECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_recmutex_init (glwthread_recmutex_t *mutex); +extern int glwthread_recmutex_lock (glwthread_recmutex_t *mutex); +extern int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex); +extern int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex); +extern int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_RECMUTEX_H */ diff --git a/include/libgnulib/windows-rwlock.h b/include/libgnulib/windows-rwlock.h new file mode 100755 index 0000000..08d6775 --- /dev/null +++ b/include/libgnulib/windows-rwlock.h @@ -0,0 +1,68 @@ +/* Read-write locks (native Windows implementation). + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_RWLOCK_H +#define _WINDOWS_RWLOCK_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +#include "windows-initguard.h" + +/* It is impossible to implement read-write locks using plain locks, without + introducing an extra thread dedicated to managing read-write locks. + Therefore here we need to use the low-level Event type. */ + +typedef struct + { + HANDLE *array; /* array of waiting threads, each represented by an event */ + unsigned int count; /* number of waiting threads */ + unsigned int alloc; /* length of allocated array */ + unsigned int offset; /* index of first waiting thread in array */ + } + glwthread_carray_waitqueue_t; +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; /* protects the remaining fields */ + glwthread_carray_waitqueue_t waiting_readers; /* waiting readers */ + glwthread_carray_waitqueue_t waiting_writers; /* waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + glwthread_rwlock_t; + +#define GLWTHREAD_RWLOCK_INIT { GLWTHREAD_INITGUARD_INIT } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_rwlock_init (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_unlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_destroy (glwthread_rwlock_t *lock); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_RWLOCK_H */ diff --git a/include/libgnulib/windows-spawn.h b/include/libgnulib/windows-spawn.h new file mode 100755 index 0000000..3a33016 --- /dev/null +++ b/include/libgnulib/windows-spawn.h @@ -0,0 +1,206 @@ +/* Auxiliary functions for the creation of subprocesses. Native Windows API. + Copyright (C) 2001, 2003-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _WINDOWS_SPAWN_H +#define _WINDOWS_SPAWN_H + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +/* Get declarations of the native Windows API functions. */ +#define WIN32_LEAN_AND_MEAN +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Prepares an argument vector before calling spawn(). + + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Windows CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + - '*', '?' characters may get expanded through wildcard expansion in the + callee: By default, in the callee, the initialization code before main() + takes the result of GetCommandLine(), wildcard-expands it, and passes it + to main(). The exceptions to this rule are: + - programs that inspect GetCommandLine() and ignore argv, + - mingw programs that have a global variable 'int _CRT_glob = 0;', + - Cygwin programs, when invoked from a Cygwin program. + + prepare_spawn creates and returns a new argument vector, where the arguments + are appropriately quoted and an additional argument "sh.exe" has been added + at the beginning. The new argument vector is freshly allocated. The memory + for all its elements is allocated within *MEM_TO_FREE, which is freshly + allocated as well. In case of memory allocation failure, NULL is returned, + with errno set. + */ +extern const char ** prepare_spawn (const char * const *argv, + char **mem_to_free); + +/* Composes the command to be passed to CreateProcess(). + ARGV must contain appropriately quoted arguments, as returned by + prepare_spawn. + Returns a freshly allocated string. In case of memory allocation failure, + NULL is returned, with errno set. */ +extern char * compose_command (const char * const *argv) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +/* Composes the block of memory that contains the environment variables. + ENVP must contain an environment (a NULL-terminated array of string of the + form VARIABLE=VALUE). + NEW_PATH must be a string of the form PATH=VALUE, or NULL if the PATH + environment variable from this process is suitable for the child process. + Returns a freshly allocated block of memory. In case of memory allocation + failure, NULL is returned, with errno set. */ +extern char * compose_envblock (const char * const *envp, const char *new_PATH) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +/* An inheritable handle with some additional information. */ +struct IHANDLE +{ + /* Either INVALID_HANDLE_VALUE or an inheritable handle. */ + HANDLE handle; + /* Only relevant if handle != INVALID_HANDLE_VALUE. + It is a bit mask consisting of: + - 32 for O_APPEND. + - KEEP_OPEN_IN_CHILD if the handle is scheduled to be preserved in the + child process. + - KEEP_OPEN_IN_PARENT if the handle is shared with (and needs to be kept + open in) the parent process. + - DELAYED_DUP2_OLDFD if there is a delayed dup2 (oldfd, newfd) and + this IHANDLE is at position oldfd. + - DELAYED_DUP2_NEWFD if there is a delayed dup2 (oldfd, newfd) and + this IHANDLE is at position newfd. + Note that DELAYED_DUP2_OLDFD and DELAYED_DUP2_NEWFD cannot be set in the + same IHANDLE. */ + unsigned short flags; + #define KEEP_OPEN_IN_CHILD 0x100 + #define KEEP_OPEN_IN_PARENT 0x200 + #define DELAYED_DUP2_OLDFD 0x400 + #define DELAYED_DUP2_NEWFD 0x800 + /* Only relevant if handle != INVALID_HANDLE_VALUE and flags contains + either DELAYED_DUP2_OLDFD or DELAYED_DUP2_NEWFD. + It is the other fd of the delayed dup2 (oldfd, newfd), i.e. + - for DELAYED_DUP2_OLDFD, the newfd, + - for DELAYED_DUP2_NEWFD, the oldfd. */ + int linked_fd; +}; + +/* This struct keeps track of which handles to potentially pass to a subprocess, + and with which flags. All of the handles here are inheritable. + Regarding handle inheritance, see + . + Whether a handle is actually scheduled for being preserved in the child + process is determined by the KEEP_OPEN_IN_CHILD bit in the flags. */ +struct inheritable_handles +{ + /* The number of occupied entries in the two arrays below. + 3 <= count <= allocated. */ + size_t count; + /* The number of allocated entries in the two arrays below. */ + size_t allocated; + /* ih[0..count-1] are the occupied entries. */ + struct IHANDLE *ih; +}; + +/* Initializes a set of inheritable handles, filling in all or part of the + file descriptors of the current process. + If DUPLICATE is true, the handles stored are those of all file descriptors, + and we use DuplicateHandle to make sure that they are all inheritable. + If DUPLICATE is false, the handles stored are only the inheritables ones; + this is a shortcut for spawnpvech(). + Returns 0 upon success. In case of failure, -1 is returned, with errno set. + */ +extern int init_inheritable_handles (struct inheritable_handles *inh_handles, + bool duplicate); + +/* Fills a set of inheritable handles into a STARTUPINFO for CreateProcess(). + Returns 0 upon success. In case of failure, -1 is returned, with errno set. + */ +extern int compose_handles_block (const struct inheritable_handles *inh_handles, + STARTUPINFOA *sinfo); + +/* Frees the memory held by a set of inheritable handles. */ +extern void free_inheritable_handles (struct inheritable_handles *inh_handles); + + +/* Converts a CreateProcess() error code (retrieved through GetLastError()) to + an errno value. */ +extern int convert_CreateProcess_error (DWORD error); + + +/* Creates a subprocess. + MODE is either P_WAIT or P_NOWAIT. + PROGNAME is the program to invoke. + ARGV is the NULL-terminated array of arguments, ARGV[0] being PROGNAME by + convention. + ENVP is the NULL-terminated set of environment variable assignments, or NULL + to inherit the initial environ variable assignments from the caller and + ignore all calls to putenv(), setenv(), unsetenv() done in the caller. + DLL_DIRS is, on Windows platforms, a NULL-terminated list of directories + that contain DLLs needed to execute the program, or NULL if none is needed. + On other platforms, always pass NULL. + CURRDIR is the directory in which to start the program, or NULL to inherit + the working directory from the caller. + STDIN_HANDLE, STDOUT_HANDLE, STDERR_HANDLE are the handles to use for the + first three file descriptors in the callee process. + Returns + - 0 for success (if MODE is P_WAIT), or + - a handle that be passed to _cwait (on Windows) or waitpid (on OS/2), or + - -1 upon error, with errno set. + */ +extern intptr_t spawnpvech (int mode, + const char *progname, const char * const *argv, + const char * const *envp, + const char * const *dll_dirs, + const char *currdir, + HANDLE stdin_handle, HANDLE stdout_handle, + HANDLE stderr_handle); + + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_SPAWN_H */ diff --git a/include/libgnulib/windows-spin.h b/include/libgnulib/windows-spin.h new file mode 100755 index 0000000..948b4f6 --- /dev/null +++ b/include/libgnulib/windows-spin.h @@ -0,0 +1,47 @@ +/* Spin locks (native Windows implementation). + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2019. */ + +#ifndef _WINDOWS_SPIN_H +#define _WINDOWS_SPIN_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +typedef struct + { + LONG volatile word; + } + glwthread_spinlock_t; + +#define GLWTHREAD_SPIN_INIT { 0 } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_spin_init (glwthread_spinlock_t *lock); +extern int glwthread_spin_lock (glwthread_spinlock_t *lock); +extern int glwthread_spin_trylock (glwthread_spinlock_t *lock); +extern int glwthread_spin_unlock (glwthread_spinlock_t *lock); +extern int glwthread_spin_destroy (glwthread_spinlock_t *lock); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_SPIN_H */ diff --git a/include/libgnulib/windows-thread.h b/include/libgnulib/windows-thread.h new file mode 100755 index 0000000..154bdfa --- /dev/null +++ b/include/libgnulib/windows-thread.h @@ -0,0 +1,60 @@ +/* Creating and controlling threads (native Windows implementation). + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_THREAD_H +#define _WINDOWS_THREAD_H + +/* This file uses _Noreturn. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +/* The glwthread_thread_t is a pointer to a structure in memory. + Why not the thread handle? If it were the thread handle, it would be hard + to implement glwthread_thread_self() (since GetCurrentThread () returns a + pseudo-handle, DuplicateHandle (GetCurrentThread ()) returns a handle that + must be closed afterwards, and there is no function for quickly retrieving + a thread handle from its id). + Why not the thread id? I tried it. It did not work: Sometimes ids appeared + that did not belong to running threads, and glthread_join failed with ESRCH. + */ +typedef struct glwthread_thread_struct *glwthread_thread_t; + +#ifdef __cplusplus +extern "C" { +#endif + +/* attr is a bit mask, consisting of the following bits: */ +#define GLWTHREAD_ATTR_DETACHED 1 +extern int glwthread_thread_create (glwthread_thread_t *threadp, + unsigned int attr, + void * (*func) (void *), void *arg); +extern int glwthread_thread_join (glwthread_thread_t thread, void **retvalp); +extern int glwthread_thread_detach (glwthread_thread_t thread); +extern glwthread_thread_t glwthread_thread_self (void); +extern _Noreturn void glwthread_thread_exit (void *retval); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_THREAD_H */ diff --git a/include/libgnulib/windows-timedmutex.h b/include/libgnulib/windows-timedmutex.h new file mode 100755 index 0000000..6ede4b2 --- /dev/null +++ b/include/libgnulib/windows-timedmutex.h @@ -0,0 +1,57 @@ +/* Timed mutexes (native Windows implementation). + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005, 2019. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_TIMEDMUTEX_H +#define _WINDOWS_TIMEDMUTEX_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +#include + +#include "windows-initguard.h" + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + DWORD owner; + HANDLE event; + CRITICAL_SECTION lock; + } + glwthread_timedmutex_t; + +#define GLWTHREAD_TIMEDMUTEX_INIT { GLWTHREAD_INITGUARD_INIT } + +#ifdef __cplusplus +extern "C" { +#endif + +extern int glwthread_timedmutex_init (glwthread_timedmutex_t *mutex); +extern int glwthread_timedmutex_lock (glwthread_timedmutex_t *mutex); +extern int glwthread_timedmutex_trylock (glwthread_timedmutex_t *mutex); +extern int glwthread_timedmutex_timedlock (glwthread_timedmutex_t *mutex, + const struct timespec *abstime); +extern int glwthread_timedmutex_unlock (glwthread_timedmutex_t *mutex); +extern int glwthread_timedmutex_destroy (glwthread_timedmutex_t *mutex); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_TIMEDMUTEX_H */ diff --git a/include/libgnulib/windows-timedrecmutex.h b/include/libgnulib/windows-timedrecmutex.h new file mode 100755 index 0000000..537070f --- /dev/null +++ b/include/libgnulib/windows-timedrecmutex.h @@ -0,0 +1,62 @@ +/* Timed recursive mutexes (native Windows implementation). + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005, 2019. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_TIMEDRECMUTEX_H +#define _WINDOWS_TIMEDRECMUTEX_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +#include + +#include "windows-initguard.h" + +/* The native Windows documentation says that CRITICAL_SECTION already + implements a recursive lock. But we need not rely on it: It's easy to + implement a recursive lock without this assumption. */ + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + DWORD owner; + unsigned long depth; + HANDLE event; + CRITICAL_SECTION lock; + } + glwthread_timedrecmutex_t; + +#define GLWTHREAD_TIMEDRECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 } + +#ifdef __cplusplus +extern "C" { +#endif + +extern int glwthread_timedrecmutex_init (glwthread_timedrecmutex_t *mutex); +extern int glwthread_timedrecmutex_lock (glwthread_timedrecmutex_t *mutex); +extern int glwthread_timedrecmutex_trylock (glwthread_timedrecmutex_t *mutex); +extern int glwthread_timedrecmutex_timedlock (glwthread_timedrecmutex_t *mutex, + const struct timespec *abstime); +extern int glwthread_timedrecmutex_unlock (glwthread_timedrecmutex_t *mutex); +extern int glwthread_timedrecmutex_destroy (glwthread_timedrecmutex_t *mutex); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_TIMEDRECMUTEX_H */ diff --git a/include/libgnulib/windows-timedrwlock.h b/include/libgnulib/windows-timedrwlock.h new file mode 100755 index 0000000..4520f08 --- /dev/null +++ b/include/libgnulib/windows-timedrwlock.h @@ -0,0 +1,76 @@ +/* Timed read-write locks (native Windows implementation). + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2019. */ + +#ifndef _WINDOWS_TIMEDRWLOCK_H +#define _WINDOWS_TIMEDRWLOCK_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +#include + +#include "windows-initguard.h" + +#ifndef _glwthread_linked_waitqueue_link_defined +#define _glwthread_linked_waitqueue_link_defined +struct glwthread_waitqueue_link +{ + struct glwthread_waitqueue_link *wql_next; + struct glwthread_waitqueue_link *wql_prev; +}; +#endif /* _glwthread_linked_waitqueue_link_defined */ +typedef struct + { + struct glwthread_waitqueue_link wq_list; /* circular list of waiting threads */ + unsigned int count; /* number of waiting threads */ + } + glwthread_clinked_waitqueue_t; + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; /* protects the remaining fields */ + glwthread_clinked_waitqueue_t waiting_readers; /* waiting readers */ + glwthread_clinked_waitqueue_t waiting_writers; /* waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + glwthread_timedrwlock_t; + +#define GLWTHREAD_TIMEDRWLOCK_INIT { GLWTHREAD_INITGUARD_INIT } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_timedrwlock_init (glwthread_timedrwlock_t *lock); +extern int glwthread_timedrwlock_rdlock (glwthread_timedrwlock_t *lock); +extern int glwthread_timedrwlock_wrlock (glwthread_timedrwlock_t *lock); +extern int glwthread_timedrwlock_tryrdlock (glwthread_timedrwlock_t *lock); +extern int glwthread_timedrwlock_trywrlock (glwthread_timedrwlock_t *lock); +extern int glwthread_timedrwlock_timedrdlock (glwthread_timedrwlock_t *lock, + const struct timespec *abstime); +extern int glwthread_timedrwlock_timedwrlock (glwthread_timedrwlock_t *lock, + const struct timespec *abstime); +extern int glwthread_timedrwlock_unlock (glwthread_timedrwlock_t *lock); +extern int glwthread_timedrwlock_destroy (glwthread_timedrwlock_t *lock); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_TIMEDRWLOCK_H */ diff --git a/include/libgnulib/windows-tls.h b/include/libgnulib/windows-tls.h new file mode 100755 index 0000000..d9393fe --- /dev/null +++ b/include/libgnulib/windows-tls.h @@ -0,0 +1,42 @@ +/* Thread-local storage (native Windows implementation). + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. */ + +#ifndef _WINDOWS_TLS_H +#define _WINDOWS_TLS_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +typedef DWORD glwthread_tls_key_t; + +#ifdef __cplusplus +extern "C" { +#endif + +extern int glwthread_tls_key_create (glwthread_tls_key_t *keyp, void (*destructor) (void *)); +extern void *glwthread_tls_get (glwthread_tls_key_t key); +extern int glwthread_tls_set (glwthread_tls_key_t key, void *value); +extern int glwthread_tls_key_delete (glwthread_tls_key_t key); +extern void glwthread_tls_process_destructors (void); +#define GLWTHREAD_DESTRUCTOR_ITERATIONS 4 + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_TLS_H */ diff --git a/include/libgnulib/wmemchr-impl.h b/include/libgnulib/wmemchr-impl.h new file mode 100755 index 0000000..0cdecb8 --- /dev/null +++ b/include/libgnulib/wmemchr-impl.h @@ -0,0 +1,27 @@ +/* Search wide character array for a wide character. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wmemchr (const wchar_t *s, wchar_t c, size_t n) +{ + for (; n > 0; s++, n--) + { + if (*s == c) + return (wchar_t *) s; + } + return NULL; +} diff --git a/include/libgnulib/wmemcmp-impl.h b/include/libgnulib/wmemcmp-impl.h new file mode 100755 index 0000000..71259ba --- /dev/null +++ b/include/libgnulib/wmemcmp-impl.h @@ -0,0 +1,36 @@ +/* Compare wide character arrays. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +wmemcmp (const wchar_t *s1, const wchar_t *s2, size_t n) +{ + for (; n > 0;) + { + wchar_t wc1 = *s1++; + wchar_t wc2 = *s2++; + if (wc1 == wc2) + { + n--; + continue; + } + /* ISO C requires wmemcmp to work with all wchar_t values. + We cannot assume that wc1 and wc2 are in the range 0..INT_MAX. */ + return _GL_CMP (wc1, wc2); + /* > 0 if wc1 > wc2, < 0 if wc1 < wc2. */ + } + return 0; +} diff --git a/include/libgnulib/wmemcpy-impl.h b/include/libgnulib/wmemcpy-impl.h new file mode 100755 index 0000000..60492b9 --- /dev/null +++ b/include/libgnulib/wmemcpy-impl.h @@ -0,0 +1,26 @@ +/* Copy wide character array. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wmemcpy (wchar_t *dest, const wchar_t *src, size_t n) +{ + wchar_t *destptr = dest; + + for (; n > 0; n--) + *destptr++ = *src++; + return dest; +} diff --git a/include/libgnulib/wmemmove-impl.h b/include/libgnulib/wmemmove-impl.h new file mode 100755 index 0000000..5174256 --- /dev/null +++ b/include/libgnulib/wmemmove-impl.h @@ -0,0 +1,36 @@ +/* Copy wide character array. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wmemmove (wchar_t *dest, const wchar_t *src, size_t n) +{ + if (dest < src) + { + wchar_t *destptr = dest; + const wchar_t *srcptr = src; + for (; n > 0; n--) + *destptr++ = *srcptr++; + } + else if (dest > src) + { + wchar_t *destptr = dest + n - 1; + const wchar_t *srcptr = src + n - 1; + for (; n > 0; n--) + *destptr-- = *srcptr--; + } + return dest; +} diff --git a/include/libgnulib/wmemset-impl.h b/include/libgnulib/wmemset-impl.h new file mode 100755 index 0000000..915cf7b --- /dev/null +++ b/include/libgnulib/wmemset-impl.h @@ -0,0 +1,26 @@ +/* Fill wide character array. + Copyright (C) 1999, 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 1999. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +wchar_t * +wmemset (wchar_t *s, wchar_t c, size_t n) +{ + wchar_t *ptr = s; + + for (; n > 0; n--) + *ptr++ = c; + return s; +} diff --git a/include/libgnulib/wprintf-parse.h b/include/libgnulib/wprintf-parse.h new file mode 100755 index 0000000..43a6430 --- /dev/null +++ b/include/libgnulib/wprintf-parse.h @@ -0,0 +1,86 @@ +/* Parse wprintf format string. + Copyright (C) 1999-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file can be parametrized with the following macros: + STATIC Set to 'static' to declare the function static. */ +#ifndef _WPRINTF_PARSE_H +#define _WPRINTF_PARSE_H + +#if HAVE_FEATURES_H +# include /* for __GLIBC__, __UCLIBC__ */ +#endif + +#include "printf-args.h" + + +/* Flags */ +#define FLAG_GROUP 1 /* ' flag */ +#define FLAG_LEFT 2 /* - flag */ +#define FLAG_SHOWSIGN 4 /* + flag */ +#define FLAG_SPACE 8 /* space flag */ +#define FLAG_ALT 16 /* # flag */ +#define FLAG_ZERO 32 +#if __GLIBC__ >= 2 && !defined __UCLIBC__ +# define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ +#endif + +/* arg_index value indicating that no argument is consumed. */ +#define ARG_NONE (~(size_t)0) + +/* Number of directly allocated directives (no malloc() needed). */ +#define N_DIRECT_ALLOC_DIRECTIVES 7 + +/* A parsed directive. */ +typedef struct +{ + const wchar_t* dir_start; + const wchar_t* dir_end; + int flags; + const wchar_t* width_start; + const wchar_t* width_end; + size_t width_arg_index; + const wchar_t* precision_start; + const wchar_t* precision_end; + size_t precision_arg_index; + wchar_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +wchar_t_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + wchar_t_directive *dir; + size_t max_width_length; + size_t max_precision_length; + wchar_t_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +wchar_t_directives; + + +/* Parses the format string. Fills in the number N of directives, and fills + in directives[0], ..., directives[N-1], and sets directives[N].dir_start + to the end of the format string. Also fills in the arg_type fields of the + arguments and the needed count of arguments. */ +#ifdef STATIC +STATIC +#else +extern +#endif +int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a); + +#endif /* _WPRINTF_PARSE_H */ diff --git a/include/libgnulib/write-any-file.h b/include/libgnulib/write-any-file.h new file mode 100755 index 0000000..412b981 --- /dev/null +++ b/include/libgnulib/write-any-file.h @@ -0,0 +1,28 @@ +/* Determine whether we can write any file. + + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + + +bool can_write_any_file (void); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xalloc-oversized.h b/include/libgnulib/xalloc-oversized.h new file mode 100755 index 0000000..cfa527d --- /dev/null +++ b/include/libgnulib/xalloc-oversized.h @@ -0,0 +1,65 @@ +/* xalloc-oversized.h -- memory allocation size checking + + Copyright (C) 1990-2000, 2003-2004, 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef XALLOC_OVERSIZED_H_ +#define XALLOC_OVERSIZED_H_ + +#include +#include + +/* True if N * S does not fit into both ptrdiff_t and size_t. + N and S should be nonnegative and free of side effects. + This expands to a constant expression if N and S are both constants. + By gnulib convention, SIZE_MAX represents overflow in size_t + calculations, so the conservative size_t-based dividend to use here + is SIZE_MAX - 1. */ +#define __xalloc_oversized(n, s) \ + ((s) != 0 \ + && (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n)) + +/* Return 1 if and only if an array of N objects, each of size S, + cannot exist reliably because its total size in bytes would exceed + MIN (PTRDIFF_MAX, SIZE_MAX - 1). + + N and S should be nonnegative and free of side effects. + + Warning: (xalloc_oversized (N, S) ? NULL : malloc (N * S)) can + misbehave if N and S are both narrower than ptrdiff_t and size_t, + and can be rewritten as (xalloc_oversized (N, S) ? NULL + : malloc (N * (size_t) S)). + + This is a macro, not a function, so that it works even if an + argument exceeds MAX (PTRDIFF_MAX, SIZE_MAX). */ +#if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX +# define xalloc_oversized(n, s) \ + __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1) +#elif 5 <= __GNUC__ && !defined __clang__ && !defined __ICC \ + && PTRDIFF_MAX < SIZE_MAX +# define xalloc_oversized(n, s) \ + (__builtin_constant_p (n) && __builtin_constant_p (s) \ + ? __xalloc_oversized (n, s) \ + : __extension__ \ + ({ ptrdiff_t __xalloc_count; \ + __builtin_mul_overflow (n, s, &__xalloc_count); })) + +/* Other compilers use integer division; this may be slower but is + more portable. */ +#else +# define xalloc_oversized(n, s) __xalloc_oversized (n, s) +#endif + +#endif /* !XALLOC_OVERSIZED_H_ */ diff --git a/include/libgnulib/xalloc.h b/include/libgnulib/xalloc.h new file mode 100755 index 0000000..75a5db3 --- /dev/null +++ b/include/libgnulib/xalloc.h @@ -0,0 +1,215 @@ +/* xalloc.h -- malloc with out-of-memory checking + + Copyright (C) 1990-2000, 2003-2004, 2006-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef XALLOC_H_ +#define XALLOC_H_ + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn, + _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#if GNULIB_XALLOC +# include "idx.h" +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef XALLOC_INLINE +# define XALLOC_INLINE _GL_INLINE +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if GNULIB_XALLOC_DIE + +/* This function is always triggered when memory is exhausted. + It must be defined by the application, either explicitly + or by using gnulib's xalloc-die module. This is the + function to call when one wants the program to die because of a + memory allocation failure. */ +_Noreturn void xalloc_die (void); + +#endif /* GNULIB_XALLOC_DIE */ + +#if GNULIB_XALLOC + +void *xmalloc (size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *ximalloc (idx_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *xinmalloc (idx_t n, idx_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *xzalloc (size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *xizalloc (idx_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *xcalloc (size_t n, size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *xicalloc (idx_t n, idx_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *xrealloc (void *p, size_t s) + _GL_ATTRIBUTE_ALLOC_SIZE ((2)); +void *xirealloc (void *p, idx_t s) + _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *xreallocarray (void *p, size_t n, size_t s) + _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); +void *xireallocarray (void *p, idx_t n, idx_t s) + _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *x2realloc (void *p, size_t *ps) /* superseded by xpalloc */ + _GL_ATTRIBUTE_RETURNS_NONNULL; +void *x2nrealloc (void *p, size_t *pn, size_t s) /* superseded by xpalloc */ + _GL_ATTRIBUTE_RETURNS_NONNULL; +void *xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) + _GL_ATTRIBUTE_RETURNS_NONNULL; +void *xmemdup (void const *p, size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; +void *ximemdup (void const *p, idx_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; +char *ximemdup0 (void const *p, idx_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; +char *xstrdup (char const *str) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* In the following macros, T must be an elementary or structure/union or + typedef'ed type, or a pointer to such a type. To apply one of the + following macros to a function pointer or array type, you need to typedef + it first and use the typedef name. */ + +/* Allocate an object of type T dynamically, with error checking. */ +/* extern t *XMALLOC (typename t); */ +# define XMALLOC(t) ((t *) xmalloc (sizeof (t))) + +/* Allocate memory for N elements of type T, with error checking. */ +/* extern t *XNMALLOC (size_t n, typename t); */ +# define XNMALLOC(n, t) \ + ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) + +/* Allocate an object of type T dynamically, with error checking, + and zero it. */ +/* extern t *XZALLOC (typename t); */ +# define XZALLOC(t) ((t *) xzalloc (sizeof (t))) + +/* Allocate memory for N elements of type T, with error checking, + and zero it. */ +/* extern t *XCALLOC (size_t n, typename t); */ +# define XCALLOC(n, t) \ + ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) + + +/* Allocate an array of N objects, each with S bytes of memory, + dynamically, with error checking. S must be nonzero. */ + +void *xnmalloc (size_t n, size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; + +/* FIXME: Deprecate this in favor of xreallocarray? */ +/* Change the size of an allocated block of memory P to an array of N + objects each of S bytes, with error checking. S must be nonzero. */ + +XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s) + _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); +XALLOC_INLINE void * +xnrealloc (void *p, size_t n, size_t s) +{ + return xreallocarray (p, n, s); +} + +/* Return a pointer to a new buffer of N bytes. This is like xmalloc, + except it returns char *. */ + +char *xcharalloc (size_t n) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; + +#endif /* GNULIB_XALLOC */ + + +#ifdef __cplusplus +} +#endif + + +#if GNULIB_XALLOC && defined __cplusplus + +/* C++ does not allow conversions from void * to other pointer types + without a cast. Use templates to work around the problem when + possible. */ + +template inline T * +xrealloc (T *p, size_t s) +{ + return (T *) xrealloc ((void *) p, s); +} + +template inline T * +xreallocarray (T *p, size_t n, size_t s) +{ + return (T *) xreallocarray ((void *) p, n, s); +} + +/* FIXME: Deprecate this in favor of xreallocarray? */ +template inline T * +xnrealloc (T *p, size_t n, size_t s) +{ + return xreallocarray (p, n, s); +} + +template inline T * +x2realloc (T *p, size_t *pn) +{ + return (T *) x2realloc ((void *) p, pn); +} + +template inline T * +x2nrealloc (T *p, size_t *pn, size_t s) +{ + return (T *) x2nrealloc ((void *) p, pn, s); +} + +template inline T * +xmemdup (T const *p, size_t s) +{ + return (T *) xmemdup ((void const *) p, s); +} + +#endif /* GNULIB_XALLOC && C++ */ + + +_GL_INLINE_HEADER_END + +#endif /* !XALLOC_H_ */ diff --git a/include/libgnulib/xbinary-io.h b/include/libgnulib/xbinary-io.h new file mode 100755 index 0000000..52310e0 --- /dev/null +++ b/include/libgnulib/xbinary-io.h @@ -0,0 +1,60 @@ +/* Binary mode I/O with checking + Copyright 2017-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _XBINARY_IO_H +#define _XBINARY_IO_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "binary-io.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef XBINARY_IO_INLINE +# define XBINARY_IO_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#if O_BINARY +extern _Noreturn void xset_binary_mode_error (void); +#else +XBINARY_IO_INLINE void xset_binary_mode_error (void) {} +#endif + +/* Set the mode of FD to MODE, which should be either O_TEXT or O_BINARY. + Report an error and exit if this fails. */ + +XBINARY_IO_INLINE void +xset_binary_mode (int fd, int mode) +{ + if (set_binary_mode (fd, mode) < 0) + xset_binary_mode_error (); +} + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _XBINARY_IO_H */ diff --git a/include/libgnulib/xfreopen.h b/include/libgnulib/xfreopen.h new file mode 100755 index 0000000..03cf68d --- /dev/null +++ b/include/libgnulib/xfreopen.h @@ -0,0 +1,29 @@ +/* Open a file, reusing a given stream, with error checking. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Opens the file FILENAME with mode MODE, reusing the given stream FP. + Upon failure, emits an error message and exits the program. */ +void xfreopen (char const *filename, char const *mode, FILE *fp); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xgetaname-impl.h b/include/libgnulib/xgetaname-impl.h new file mode 100755 index 0000000..4a76430 --- /dev/null +++ b/include/libgnulib/xgetaname-impl.h @@ -0,0 +1,63 @@ +/* xgetaname-impl.c -- common implementation of xgethostname and xgetdomainname + + Copyright (C) 1992, 1996, 2000-2001, 2003-2006, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* written by Jim Meyering and Paul Eggert */ + +#include +#include +#include +#include + +#include "xalloc.h" + +/* Return the current host or domain name in malloc'd storage. + If malloc fails, exit. + Upon any other failure, return NULL and set errno. */ +char * +XGETANAME (void) +{ + char buf[100]; + idx_t size = sizeof buf; + char *name = buf; + char *alloc = NULL; + + while (1) + { + /* Use SIZE_1 here rather than SIZE to work around the bug in + SunOS 5.5's gethostname whereby it NUL-terminates HOSTNAME + even when the name is as long as the supplied buffer. */ + idx_t size_1 = size - 1; + name[size_1] = '\0'; + errno = 0; + if (GETANAME (name, size_1) == 0) + { + /* Check whether the name was possibly truncated; POSIX does not + specify whether a truncated name is null-terminated. */ + idx_t actual_size = strlen (name) + 1; + if (actual_size < size_1) + return alloc ? alloc : ximemdup (name, actual_size); + errno = 0; + } + free (alloc); + if (errno != 0 && errno != ENAMETOOLONG && errno != EINVAL + /* macOS/Darwin does this when SIZE_1 is too small. */ + && errno != ENOMEM) + return NULL; + name = alloc = xpalloc (NULL, &size, 1, -1, 1); + } +} diff --git a/include/libgnulib/xgetcwd.h b/include/libgnulib/xgetcwd.h new file mode 100755 index 0000000..67749af --- /dev/null +++ b/include/libgnulib/xgetcwd.h @@ -0,0 +1,35 @@ +/* prototype for xgetcwd + Copyright (C) 1995, 2001, 2003, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +extern char *xgetcwd (void) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xgetdomainname.h b/include/libgnulib/xgetdomainname.h new file mode 100755 index 0000000..526d1a7 --- /dev/null +++ b/include/libgnulib/xgetdomainname.h @@ -0,0 +1,48 @@ +/* xgetdomainname.h -- Return the NIS domain name, without size limitations. + Copyright (C) 1992, 1996, 2000-2001, 2003, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#ifndef _XGETDOMAINNAME_H +#define _XGETDOMAINNAME_H + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return the NIS domain name of the machine, in malloc'd storage. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + If malloc fails, exit. + Upon any other failure, set errno and return NULL. */ +extern char *xgetdomainname (void) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif + +#endif /* _XGETDOMAINNAME_H */ diff --git a/include/libgnulib/xgethostname.h b/include/libgnulib/xgethostname.h new file mode 100755 index 0000000..4e293dc --- /dev/null +++ b/include/libgnulib/xgethostname.h @@ -0,0 +1,36 @@ +/* Return current hostname with unlimited length. + + Copyright (C) 2003-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +char *xgethostname (void) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xmalloca.h b/include/libgnulib/xmalloca.h new file mode 100755 index 0000000..a096511 --- /dev/null +++ b/include/libgnulib/xmalloca.h @@ -0,0 +1,77 @@ +/* Safe automatic memory allocation with out of memory checking. + Copyright (C) 2003, 2005, 2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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 3 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, see . */ + +#ifndef _XMALLOCA_H +#define _XMALLOCA_H + +/* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_DEALLOC, + _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL, HAVE_ALLOCA. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include "malloca.h" +#include "xalloc.h" +#include "xalloc-oversized.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* xmalloca(N) is a checking safe variant of alloca(N). It allocates N bytes + of memory allocated on the stack, that must be freed using freea() before + the function returns. N should not have side effects. + Upon failure, it exits with an error message. */ +#if HAVE_ALLOCA +# define xmalloca(N) \ + ((N) < 4032 - (2 * sa_alignment_max - 1) \ + ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + + (2 * sa_alignment_max - 1)) \ + & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ + : xmmalloca (N)) +extern void * xmmalloca (size_t n) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1) + _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; +#else +# define xmalloca(N) \ + xmalloc (N) +#endif + +/* xnmalloca(N,S) is an overflow-safe variant of xmalloca (N * S). + It allocates an array of N objects, each with S bytes of memory, + on the stack. S must be positive and N must be nonnegative, + and S and N should not have side effects. + The array must be freed using freea() before the function returns. + Upon failure, it exits with an error message. */ +#if HAVE_ALLOCA +/* Rely on xmalloca (SIZE_MAX) calling xalloc_die (). */ +# define xnmalloca(n, s) \ + xmalloca (xalloc_oversized (n, s) ? (size_t) (-1) : (n) * (size_t) (s)) +#else +# define xnmalloca(n, s) \ + xnmalloc (n, s) +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _XMALLOCA_H */ diff --git a/include/libgnulib/xmemcoll.h b/include/libgnulib/xmemcoll.h new file mode 100755 index 0000000..9a59948 --- /dev/null +++ b/include/libgnulib/xmemcoll.h @@ -0,0 +1,31 @@ +/* Locale-specific memory comparison. + + Copyright (C) 2002-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +int xmemcoll (char *restrict, size_t, char *restrict, size_t); +int xmemcoll0 (char const *, size_t, char const *, size_t); + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xmemdup0.h b/include/libgnulib/xmemdup0.h new file mode 100755 index 0000000..8a68a8d --- /dev/null +++ b/include/libgnulib/xmemdup0.h @@ -0,0 +1,41 @@ +/* xmemdup0.h -- copy a block of arbitrary bytes, plus a trailing NUL + + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef XMEMDUP_H_ +# define XMEMDUP_H_ + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +# include + + +# ifdef __cplusplus +extern "C" { +# endif + +char *xmemdup0 (void const *p, size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +# ifdef __cplusplus +} +# endif + +#endif /* !XMEMDUP0_H_ */ diff --git a/include/libgnulib/xnanosleep.h b/include/libgnulib/xnanosleep.h new file mode 100755 index 0000000..dcf2551 --- /dev/null +++ b/include/libgnulib/xnanosleep.h @@ -0,0 +1,25 @@ +/* A variant of nanosleep that takes a 'double' argument and handles EINTR. + Copyright (C) 2004-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + +int xnanosleep (double); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xprintf.h b/include/libgnulib/xprintf.h new file mode 100755 index 0000000..202dbd2 --- /dev/null +++ b/include/libgnulib/xprintf.h @@ -0,0 +1,71 @@ +/* printf wrappers that fail immediately for non-file-related errors + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef _XPRINTF_H +#define _XPRINTF_H + +/* This file uses _GL_ATTRIBUTE_FORMAT. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +extern int xprintf (char const *restrict format, ...) +#if GNULIB_VPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 1, 2)) +#endif + ; + +extern int xvprintf (char const *restrict format, va_list args) +#if GNULIB_VPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 1, 0)) +#endif + ; + +extern int xfprintf (FILE *restrict stream, char const *restrict format, ...) +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) +#endif + ; + +extern int xvfprintf (FILE *restrict stream, char const *restrict format, + va_list args) +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 0)) +#endif + ; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libgnulib/xreadlink.h b/include/libgnulib/xreadlink.h new file mode 100755 index 0000000..bfce10a --- /dev/null +++ b/include/libgnulib/xreadlink.h @@ -0,0 +1,44 @@ +/* Reading symbolic links without size limitation. + + Copyright (C) 2001, 2003-2004, 2007, 2009-2024 Free Software Foundation, + Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering */ + +/* This file uses _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +extern char *xreadlink (char const *filename) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#if GNULIB_XREADLINKAT +extern char *xreadlinkat (int fd, char const *filename) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xsetenv.h b/include/libgnulib/xsetenv.h new file mode 100755 index 0000000..4b5dbe8 --- /dev/null +++ b/include/libgnulib/xsetenv.h @@ -0,0 +1,31 @@ +/* Setting environment variables, with out-of-memory checking. + Copyright (C) 2001-2002, 2007, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Get unsetenv(). It can be used without error checking. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. + With error checking. */ +extern void xsetenv (const char *name, const char *value, int replace); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xsize.h b/include/libgnulib/xsize.h new file mode 100755 index 0000000..5ae8600 --- /dev/null +++ b/include/libgnulib/xsize.h @@ -0,0 +1,130 @@ +/* xsize.h -- Checked size_t computations. + + Copyright (C) 2003, 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _XSIZE_H +#define _XSIZE_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, HAVE_STDINT_H. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get size_t. */ +#include + +/* Get INT_MAX, SIZE_MAX. */ +#include +#if HAVE_STDINT_H +# include +#endif + +/* Get ATTRIBUTE_PURE. */ +#include "attribute.h" + +_GL_INLINE_HEADER_BEGIN +#ifndef XSIZE_INLINE +# define XSIZE_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The size of memory objects is often computed through expressions of + type size_t. Example: + void* p = malloc (header_size + n * element_size). + These computations can lead to overflow. When this happens, malloc() + returns a piece of memory that is way too small, and the program then + crashes while attempting to fill the memory. + To avoid this, the functions and macros in this file check for overflow. + The convention is that SIZE_MAX represents overflow. + malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc + implementation that uses mmap --, it's recommended to use size_overflow_p() + or size_in_bounds_p() before invoking malloc(). + The example thus becomes: + size_t size = xsum (header_size, xtimes (n, element_size)); + void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); +*/ + +/* Convert an arbitrary N >= 0 to type size_t. + N should not have side effects. */ +#define xcast_size_t(N) \ + ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) + +/* Sum of two sizes, with overflow check. */ +XSIZE_INLINE size_t ATTRIBUTE_PURE +xsum (size_t size1, size_t size2) +{ + if (INT_MAX < SIZE_MAX) + { + /* Optimize for the common case where size_t arithmetic wraps + around without undefined behavior. */ + size_t sum = size1 + size2; + return size1 <= sum ? sum : SIZE_MAX; + } + + return size1 <= SIZE_MAX - size2 ? size1 + size2 : SIZE_MAX; +} + +/* Sum of three sizes, with overflow check. */ +XSIZE_INLINE size_t ATTRIBUTE_PURE +xsum3 (size_t size1, size_t size2, size_t size3) +{ + return xsum (xsum (size1, size2), size3); +} + +/* Sum of four sizes, with overflow check. */ +XSIZE_INLINE size_t ATTRIBUTE_PURE +xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) +{ + return xsum (xsum (xsum (size1, size2), size3), size4); +} + +/* Maximum of two sizes, with overflow check. */ +XSIZE_INLINE size_t ATTRIBUTE_PURE +xmax (size_t size1, size_t size2) +{ + /* No explicit check is needed here, because for any n: + max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ + return (size1 >= size2 ? size1 : size2); +} + +/* Multiplication of a count with an element size, with overflow check. + The count must be >= 0 and the element size must be > 0. + Arguments should not have side effects. + The element size's type should be no wider than size_t. + This is a macro, not a function, so that it works correctly even + when N is of a wider type and N > SIZE_MAX. */ +#define xtimes(N, ELSIZE) \ + ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) + +/* Check for overflow. */ +#define size_overflow_p(SIZE) \ + ((SIZE) == SIZE_MAX) +/* Check against overflow. */ +#define size_in_bounds_p(SIZE) \ + ((SIZE) != SIZE_MAX) + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _XSIZE_H */ diff --git a/include/libgnulib/xstdopen.h b/include/libgnulib/xstdopen.h new file mode 100755 index 0000000..bb16872 --- /dev/null +++ b/include/libgnulib/xstdopen.h @@ -0,0 +1,28 @@ +/* Ensure that stdin, stdout, stderr are open. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Ensures that the file descriptors of stdin, stdout, stderr (0, 1, 2) are + open. Exits the program with an error message upon failure; the error + message may not appear if stderr is closed. */ +extern void xstdopen (void); + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xstrerror.h b/include/libgnulib/xstrerror.h new file mode 100755 index 0000000..db27a84 --- /dev/null +++ b/include/libgnulib/xstrerror.h @@ -0,0 +1,45 @@ +/* Return diagnostic string based on error code. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef _XSTRERROR_H +#define _XSTRERROR_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get 'free'. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return a freshly allocated diagnostic string that contains a given string + MESSAGE and the (internationalized) description of the error code ERRNUM. + Upon [ENOMEM] memory allocation error, call xalloc_die. + + This function is multithread-safe. */ +extern char *xstrerror (const char *message, int errnum) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + +#ifdef __cplusplus +} +#endif + +#endif /* _XSTRERROR_H */ diff --git a/include/libgnulib/xstriconv.h b/include/libgnulib/xstriconv.h new file mode 100755 index 0000000..d8abc20 --- /dev/null +++ b/include/libgnulib/xstriconv.h @@ -0,0 +1,85 @@ +/* Charset conversion with out-of-memory checking. + Copyright (C) 2001-2004, 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible and Simon Josefsson. + + 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 3 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, see . */ + +#ifndef _XSTRICONV_H +#define _XSTRICONV_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, HAVE_ICONV. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#if HAVE_ICONV +#include +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if HAVE_ICONV + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + The conversion descriptor is passed as CD. + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Upon memory allocation failure, report the error and exit. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int xmem_cd_iconv (const char *src, size_t srclen, iconv_t cd, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + The conversion descriptor is passed as CD. Both the "from" and the "to" + encoding must use a single NUL byte at the end of the string (i.e. not + UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Upon memory allocation failure, report the error and exit. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * xstr_cd_iconv (const char *src, iconv_t cd) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#endif + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Upon memory allocation failure, report the error and exit. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * xstr_iconv (const char *src, + const char *from_codeset, const char *to_codeset) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif + + +#endif /* _XSTRICONV_H */ diff --git a/include/libgnulib/xstriconveh.h b/include/libgnulib/xstriconveh.h new file mode 100755 index 0000000..39d7d3c --- /dev/null +++ b/include/libgnulib/xstriconveh.h @@ -0,0 +1,122 @@ +/* Charset conversion with out-of-memory checking. + Copyright (C) 2001-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible and Simon Josefsson. + + 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 3 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, see . */ + +#ifndef _XSTRICONVEH_H +#define _XSTRICONVEH_H + +/* This file uses _GL_ATTRIBUTE_MALLOC, HAVE_ICONV. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Get the 'enum iconv_ilseq_handler' and iconveh_t types, and the + iconveh_open, iconveh_close declarations. */ +#include "striconveh.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if HAVE_ICONV + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + CD points to the conversion descriptor from FROMCODE to TOCODE, created by + the function iconveh_open(). + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Upon memory allocation failure, report the error and exit. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + xmem_cd_iconveh (const char *src, size_t srclen, + const iconveh_t *cd, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + CD points to the conversion descriptor from FROMCODE to TOCODE, created by + the function iconveh_open(). + Both the "from" and the "to" encoding must use a single NUL byte at the end + of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Upon memory allocation failure, report the error and exit. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + xstr_cd_iconveh (const char *src, + const iconveh_t *cd, + enum iconv_ilseq_handler handler) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#endif + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Upon memory allocation failure, report the error and exit. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + xmem_iconveh (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Upon memory allocation failure, report the error and exit. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + xstr_iconveh (const char *src, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + + +#ifdef __cplusplus +} +#endif + + +#endif /* _XSTRICONVEH_H */ diff --git a/include/libgnulib/xstring-desc.h b/include/libgnulib/xstring-desc.h new file mode 100755 index 0000000..36124cb --- /dev/null +++ b/include/libgnulib/xstring-desc.h @@ -0,0 +1,116 @@ +/* String descriptors, with out-of-memory checking. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2023. */ + +#ifndef _XSTRING_DESC_H +#define _XSTRING_DESC_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include +#include "string-desc.h" +#include "xalloc.h" + + +_GL_INLINE_HEADER_BEGIN +#ifndef GL_XSTRING_DESC_INLINE +# define GL_XSTRING_DESC_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* ==== Memory-allocating operations on string descriptors ==== */ + +/* Return a string of length N, with uninitialized contents. */ +#if 0 /* Defined inline below. */ +extern string_desc_t xstring_desc_new (idx_t n); +#endif + +/* Return a string of length N, filled with C. */ +#if 0 /* Defined inline below. */ +extern string_desc_t xstring_desc_new_filled (idx_t n, char c); +#endif + +/* Return a copy of string S. */ +#if 0 /* Defined inline below. */ +extern string_desc_t xstring_desc_copy (string_desc_t s); +#endif + +/* Return the concatenation of N strings. N must be > 0. */ +extern string_desc_t xstring_desc_concat (idx_t n, string_desc_t string1, ...); + +/* Construct and return a copy of string S, as a NUL-terminated C string. */ +#if 0 /* Defined inline below. */ +extern char * xstring_desc_c (string_desc_t s) _GL_ATTRIBUTE_DEALLOC_FREE; +#endif + + +/* ==== Inline function definitions ==== */ + +GL_XSTRING_DESC_INLINE string_desc_t +xstring_desc_new (idx_t n) +{ + string_desc_t result; + if (string_desc_new (&result, n) < 0) + xalloc_die (); + return result; +} + +GL_XSTRING_DESC_INLINE string_desc_t +xstring_desc_new_filled (idx_t n, char c) +{ + string_desc_t result; + if (string_desc_new_filled (&result, n, c) < 0) + xalloc_die (); + return result; +} + +GL_XSTRING_DESC_INLINE string_desc_t +xstring_desc_copy (string_desc_t s) +{ + string_desc_t result; + if (string_desc_copy (&result, s) < 0) + xalloc_die (); + return result; +} + +GL_XSTRING_DESC_INLINE +_GL_ATTRIBUTE_DEALLOC_FREE +char * +xstring_desc_c (string_desc_t s) +{ + char *result = string_desc_c (s); + if (result == NULL) + xalloc_die (); + return result; +} + + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + + +#endif /* _XSTRING_DESC_H */ diff --git a/include/libgnulib/xstrndup.h b/include/libgnulib/xstrndup.h new file mode 100755 index 0000000..272265e --- /dev/null +++ b/include/libgnulib/xstrndup.h @@ -0,0 +1,40 @@ +/* Duplicate a bounded initial segment of a string, with out-of-memory + checking. + Copyright (C) 2003, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return a newly allocated copy of at most N bytes of STRING. + In other words, return a copy of the initial segment of length N of + STRING. */ +extern char *xstrndup (const char *string, size_t n) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; + + +#ifdef __cplusplus +} +#endif diff --git a/include/libgnulib/xstrtod.h b/include/libgnulib/xstrtod.h new file mode 100755 index 0000000..f6a1ed8 --- /dev/null +++ b/include/libgnulib/xstrtod.h @@ -0,0 +1,84 @@ +/* Error-checking interface to strtod-like functions. + + Copyright (C) 1996, 1998, 2003-2004, 2006, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering. */ + +#ifndef XSTRTOD_H +#define XSTRTOD_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Converts the initial portion of the string starting at STR (if PTR != NULL) + or the entire string starting at STR (if PTR == NULL) to a number of type + 'double'. + CONVERT should be a conversion function with the same calling conventions + as strtod, such as strtod or c_strtod. + If successful, it returns true, with *RESULT set to the result. + If it fails, it returns false, with *RESULT and errno set. + In total, there are the following cases: + + Condition RET *RESULT errno + ----------------------------------------------------------------------------- + conversion error: no number parsed false 0.0 EINVAL or 0 + PTR == NULL, number parsed but junk after number false value 0 + NaN true NaN 0 + ±Infinity true ±HUGE_VAL 0 + overflow false ±HUGE_VAL ERANGE + gradual underflow true near zero 0 + flush-to-zero underflow true ±0.0 ERANGE + other finite value true value 0 + + In both cases, if PTR != NULL, *PTR is set to point to the character after + the parsed number. */ +bool xstrtod (const char *str, const char **ptr, double *result, + double (*convert) (char const *, char **)); + +/* Converts the initial portion of the string starting at STR (if PTR != NULL) + or the entire string starting at STR (if PTR == NULL) to a number of type + 'long double'. + CONVERT should be a conversion function with the same calling conventions + as strtold, such as strtold or c_strtold. + If successful, it returns true, with *RESULT set to the result. + If it fails, it returns false, with *RESULT and errno set. + In total, there are the following cases: + + Condition RET *RESULT errno + ----------------------------------------------------------------------------- + conversion error: no number parsed false 0.0L EINVAL or 0 + PTR == NULL, number parsed but junk after number false value 0 + NaN true NaN 0 + ±Infinity true ±HUGE_VALL 0 + overflow false ±HUGE_VALL ERANGE + gradual underflow true near zero 0 + flush-to-zero underflow true ±0.0L ERANGE + other finite value true value 0 + + In both cases, if PTR != NULL, *PTR is set to point to the character after + the parsed number. */ +bool xstrtold (const char *str, const char **ptr, long double *result, + long double (*convert) (char const *, char **)); + + +#ifdef __cplusplus +} +#endif + +#endif /* not XSTRTOD_H */ diff --git a/include/libgnulib/xstrtol-error.h b/include/libgnulib/xstrtol-error.h new file mode 100755 index 0000000..ace787b --- /dev/null +++ b/include/libgnulib/xstrtol-error.h @@ -0,0 +1,51 @@ +/* Error reporting interface for xstrto* functions. + + Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#ifndef XSTRTOL_ERROR_H_ +# define XSTRTOL_ERROR_H_ 1 + +/* This file uses _Noreturn. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +# include "xstrtol.h" + +# include + +/* Report an error for an invalid integer in an option argument. + + ERR is the error code returned by one of the xstrto* functions. + + Use OPT_IDX to decide whether to print the short option string "C" + or "-C" or a long option string derived from LONG_OPTIONS. OPT_IDX + is -2 if the short option "C" was used, without any leading "-"; it + is -1 if the short option "-C" was used; otherwise it is an index + into LONG_OPTIONS, which should have a name preceded by two '-' + characters. + + ARG is the option-argument containing the integer. + + After reporting an error, exit with a failure status. */ + +_Noreturn void xstrtol_fatal (enum strtol_error /* err */, + int /* opt_idx */, char /* c */, + struct option const * /* long_options */, + char const * /* arg */); + +#endif /* not XSTRTOL_ERROR_H_ */ diff --git a/include/libgnulib/xstrtol.h b/include/libgnulib/xstrtol.h new file mode 100755 index 0000000..45c8921 --- /dev/null +++ b/include/libgnulib/xstrtol.h @@ -0,0 +1,81 @@ +/* A more useful interface to strtol. + + Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#ifndef XSTRTOL_H_ +#define XSTRTOL_H_ 1 + +/* Get intmax_t, uintmax_t. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +enum strtol_error + { + LONGINT_OK = 0, + + /* These two values can be ORed together, to indicate that both + errors occurred. */ + LONGINT_OVERFLOW = 1, + LONGINT_INVALID_SUFFIX_CHAR = 2, + + LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW = (LONGINT_INVALID_SUFFIX_CHAR + | LONGINT_OVERFLOW), + LONGINT_INVALID = 4 + }; +typedef enum strtol_error strtol_error; + +/* Act like the system's strtol (NPTR, ENDPTR, BASE) except: + - The TYPE of the result might be something other than long int. + - Return strtol_error, and store any result through an additional + TYPE *VAL pointer instead of returning the result. + - If TYPE is unsigned, reject leading '-'. + - Behavior is undefined if BASE is negative, 1, or greater than 36. + (In this respect xstrtol acts like the C standard, not like POSIX.) + - Accept an additional char const *VALID_SUFFIXES pointer to a + possibly-empty string containing allowed numeric suffixes, + which multiply the value. These include SI suffixes like 'k' and 'M'; + these normally stand for powers of 1024, but if VALID_SUFFIXES also + includes '0' they can be followed by "B" to stand for the usual + SI powers of 1000 (or by "iB" to stand for powers of 1024 as before). + Other supported suffixes include 'K' for 1024 or 1000, 'b' for 512, + 'c' for 1, and 'w' for 2. + - Suppose that after the initial whitespace, the number is missing + but there is a valid suffix. Then the number is treated as 1. */ + +#define _DECLARE_XSTRTOL(name, type) \ + strtol_error name (char const *restrict /*nptr*/, \ + char **restrict /*endptr*/, \ + int /*base*/, \ + type *restrict /*val*/, \ + char const *restrict /*valid_suffixes*/); +_DECLARE_XSTRTOL (xstrtol, long int) +_DECLARE_XSTRTOL (xstrtoul, unsigned long int) +_DECLARE_XSTRTOL (xstrtoll, long long int) +_DECLARE_XSTRTOL (xstrtoull, unsigned long long int) +_DECLARE_XSTRTOL (xstrtoimax, intmax_t) +_DECLARE_XSTRTOL (xstrtoumax, uintmax_t) + + +#ifdef __cplusplus +} +#endif + +#endif /* not XSTRTOL_H_ */ diff --git a/include/libgnulib/xtime.h b/include/libgnulib/xtime.h new file mode 100755 index 0000000..39cc5be --- /dev/null +++ b/include/libgnulib/xtime.h @@ -0,0 +1,92 @@ +/* xtime -- extended-resolution integer timestamps + + Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert. */ + +#ifndef XTIME_H_ +#define XTIME_H_ 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef XTIME_INLINE +# define XTIME_INLINE _GL_INLINE +#endif + +/* xtime_t is a signed type used for timestamps. It is an integer + type that is a count of nanoseconds. */ +typedef long long int xtime_t; +#define XTIME_PRECISION 1000000000 + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return an extended time value that contains S seconds and NS + nanoseconds. S and NS should be nonnegative; otherwise, integer + overflow can occur even if the result is in range. */ +XTIME_INLINE xtime_t +xtime_make (xtime_t s, long int ns) +{ + return XTIME_PRECISION * s + ns; +} + +/* The following functions split an extended time value: + T = XTIME_PRECISION * xtime_sec (T) + xtime_nsec (T) + with 0 <= xtime_nsec (T) < XTIME_PRECISION. */ + +/* Return the number of seconds in T, which must be nonnegative. */ +XTIME_INLINE xtime_t +xtime_nonnegative_sec (xtime_t t) +{ + return t / XTIME_PRECISION; +} + +/* Return the number of seconds in T. */ +XTIME_INLINE xtime_t +xtime_sec (xtime_t t) +{ + return (t + (t < 0)) / XTIME_PRECISION - (t < 0); +} + +/* Return the number of nanoseconds in T, which must be nonnegative. */ +XTIME_INLINE long int +xtime_nonnegative_nsec (xtime_t t) +{ + return t % XTIME_PRECISION; +} + +/* Return the number of nanoseconds in T. */ +XTIME_INLINE long int +xtime_nsec (xtime_t t) +{ + long int ns = t % XTIME_PRECISION; + if (ns < 0) + ns += XTIME_PRECISION; + return ns; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/include/libgnulib/xvasprintf.h b/include/libgnulib/xvasprintf.h new file mode 100755 index 0000000..fac633c --- /dev/null +++ b/include/libgnulib/xvasprintf.h @@ -0,0 +1,65 @@ +/* vasprintf and asprintf with out-of-memory checking. + Copyright (C) 2002-2004, 2006-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef _XVASPRINTF_H +#define _XVASPRINTF_H + +/* This file uses _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get va_list. */ +#include + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + +/* Get 'free'. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prints formatted output to a string dynamically allocated with malloc(), + and returns it. Upon [ENOMEM] memory allocation error, it calls xalloc_die. + + It is the responsibility of the programmer to ensure that + - the format string is valid, + - the format string does not use %ls or %lc directives, and + - all widths in the format string and passed as arguments are >= -INT_MAX + and <= INT_MAX, + so that other errors + - [EINVAL] invalid format string, + - [EILSEQ] error during conversion between wide and multibyte characters, + - [EOVERFLOW] some specified width is > INT_MAX, + cannot occur. */ +extern char *xasprintf (const char *format, ...) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)) + _GL_ATTRIBUTE_RETURNS_NONNULL; +extern char *xvasprintf (const char *format, va_list args) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)) + _GL_ATTRIBUTE_RETURNS_NONNULL; + +#ifdef __cplusplus +} +#endif + +#endif /* _XVASPRINTF_H */ diff --git a/include/libgnulib/yesno.h b/include/libgnulib/yesno.h new file mode 100755 index 0000000..81c0eca --- /dev/null +++ b/include/libgnulib/yesno.h @@ -0,0 +1,32 @@ +/* declare yesno + Copyright (C) 2004, 2009-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#ifndef YESNO_H_ +# define YESNO_H_ + +#ifdef __cplusplus +extern "C" { +#endif + + +bool yesno (void); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libiconv/export.h b/include/libiconv/export.h new file mode 100755 index 0000000..e9fb806 --- /dev/null +++ b/include/libiconv/export.h @@ -0,0 +1,8 @@ + +#if @HAVE_VISIBILITY@ && BUILDING_LIBICONV +#define LIBICONV_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_LIBICONV +#define LIBICONV_DLL_EXPORTED __declspec(dllexport) +#else +#define LIBICONV_DLL_EXPORTED +#endif diff --git a/include/libiconv/iconv.h b/include/libiconv/iconv.h new file mode 100755 index 0000000..2f0b61c --- /dev/null +++ b/include/libiconv/iconv.h @@ -0,0 +1,249 @@ +/* Copyright (C) 1999-2022 Free Software Foundation, Inc. + This file is part of the GNU LIBICONV Library. + + The GNU LIBICONV Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + The GNU LIBICONV Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU LIBICONV Library; see the file COPYING.LIB. + If not, see . */ + +/* When installed, this file is called "iconv.h". */ + +#ifndef _LIBICONV_H +#define _LIBICONV_H + +#define _LIBICONV_VERSION 0x0111 /* version number: (major<<8) + minor */ + +#if 1 && BUILDING_LIBICONV +#define LIBICONV_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_LIBICONV +#define LIBICONV_DLL_EXPORTED __declspec(dllexport) +#else +#define LIBICONV_DLL_EXPORTED +#endif +extern LIBICONV_DLL_EXPORTED int _libiconv_version; /* Likewise */ + +/* We would like to #include any system header file which could define + iconv_t, 1. in order to eliminate the risk that the user gets compilation + errors because some other system header file includes /usr/include/iconv.h + which defines iconv_t or declares iconv after this file, 2. when compiling + for LIBICONV_PLUG, we need the proper iconv_t type in order to produce + binary compatible code. + But gcc's #include_next is not portable. Thus, once libiconv's iconv.h + has been installed in /usr/local/include, there is no way any more to + include the original /usr/include/iconv.h. We simply have to get away + without it. + Ad 1. The risk that a system header file does + #include "iconv.h" or #include_next "iconv.h" + is small. They all do #include . + Ad 2. The iconv_t type is a pointer type in all cases I have seen. (It + has to be a scalar type because (iconv_t)(-1) is a possible return value + from iconv_open().) */ + +/* Define iconv_t ourselves. */ +#undef iconv_t +#define iconv_t libiconv_t +typedef void* iconv_t; + +/* Get size_t declaration. + Get wchar_t declaration if it exists. */ +#include + +/* Get errno declaration and values. */ +#include +/* Some systems, like SunOS 4, don't have EILSEQ. Some systems, like BSD/OS, + have EILSEQ in a different header. On these systems, define EILSEQ + ourselves. */ +#ifndef EILSEQ +#define EILSEQ +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Allocates descriptor for code conversion from encoding ‘fromcode’ to + encoding ‘tocode’. */ +#ifndef LIBICONV_PLUG +#define iconv_open libiconv_open +#endif +extern LIBICONV_DLL_EXPORTED iconv_t iconv_open (const char* tocode, const char* fromcode); + +/* Converts, using conversion descriptor ‘cd’, at most ‘*inbytesleft’ bytes + starting at ‘*inbuf’, writing at most ‘*outbytesleft’ bytes starting at + ‘*outbuf’. + Decrements ‘*inbytesleft’ and increments ‘*inbuf’ by the same amount. + Decrements ‘*outbytesleft’ and increments ‘*outbuf’ by the same amount. */ +#ifndef LIBICONV_PLUG +#define iconv libiconv +#endif +extern LIBICONV_DLL_EXPORTED size_t iconv (iconv_t cd, char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft); + +/* Frees resources allocated for conversion descriptor ‘cd’. */ +#ifndef LIBICONV_PLUG +#define iconv_close libiconv_close +#endif +extern LIBICONV_DLL_EXPORTED int iconv_close (iconv_t cd); + + +#ifdef __cplusplus +} +#endif + + +#ifndef LIBICONV_PLUG + +/* Nonstandard extensions. */ + +#if 1 +#if 0 +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#endif +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* A type that holds all memory needed by a conversion descriptor. + A pointer to such an object can be used as an iconv_t. */ +typedef struct { + void* dummy1[28]; +#if 1 + mbstate_t dummy2; +#endif +} iconv_allocation_t; + +/* Allocates descriptor for code conversion from encoding ‘fromcode’ to + encoding ‘tocode’ into preallocated memory. Returns an error indicator + (0 or -1 with errno set). */ +#define iconv_open_into libiconv_open_into +extern LIBICONV_DLL_EXPORTED int iconv_open_into (const char* tocode, const char* fromcode, + iconv_allocation_t* resultp); + +/* Control of attributes. */ +#define iconvctl libiconvctl +extern LIBICONV_DLL_EXPORTED int iconvctl (iconv_t cd, int request, void* argument); + +/* Hook performed after every successful conversion of a Unicode character. */ +typedef void (*iconv_unicode_char_hook) (unsigned int uc, void* data); +/* Hook performed after every successful conversion of a wide character. */ +typedef void (*iconv_wide_char_hook) (wchar_t wc, void* data); +/* Set of hooks. */ +struct iconv_hooks { + iconv_unicode_char_hook uc_hook; + iconv_wide_char_hook wc_hook; + void* data; +}; + +/* Fallback function. Invoked when a small number of bytes could not be + converted to a Unicode character. This function should process all + bytes from inbuf and may produce replacement Unicode characters by calling + the write_replacement callback repeatedly. */ +typedef void (*iconv_unicode_mb_to_uc_fallback) + (const char* inbuf, size_t inbufsize, + void (*write_replacement) (const unsigned int *buf, size_t buflen, + void* callback_arg), + void* callback_arg, + void* data); +/* Fallback function. Invoked when a Unicode character could not be converted + to the target encoding. This function should process the character and + may produce replacement bytes (in the target encoding) by calling the + write_replacement callback repeatedly. */ +typedef void (*iconv_unicode_uc_to_mb_fallback) + (unsigned int code, + void (*write_replacement) (const char *buf, size_t buflen, + void* callback_arg), + void* callback_arg, + void* data); +#if 1 +/* Fallback function. Invoked when a number of bytes could not be converted to + a wide character. This function should process all bytes from inbuf and may + produce replacement wide characters by calling the write_replacement + callback repeatedly. */ +typedef void (*iconv_wchar_mb_to_wc_fallback) + (const char* inbuf, size_t inbufsize, + void (*write_replacement) (const wchar_t *buf, size_t buflen, + void* callback_arg), + void* callback_arg, + void* data); +/* Fallback function. Invoked when a wide character could not be converted to + the target encoding. This function should process the character and may + produce replacement bytes (in the target encoding) by calling the + write_replacement callback repeatedly. */ +typedef void (*iconv_wchar_wc_to_mb_fallback) + (wchar_t code, + void (*write_replacement) (const char *buf, size_t buflen, + void* callback_arg), + void* callback_arg, + void* data); +#else +/* If the wchar_t type does not exist, these two fallback functions are never + invoked. Their argument list therefore does not matter. */ +typedef void (*iconv_wchar_mb_to_wc_fallback) (); +typedef void (*iconv_wchar_wc_to_mb_fallback) (); +#endif +/* Set of fallbacks. */ +struct iconv_fallbacks { + iconv_unicode_mb_to_uc_fallback mb_to_uc_fallback; + iconv_unicode_uc_to_mb_fallback uc_to_mb_fallback; + iconv_wchar_mb_to_wc_fallback mb_to_wc_fallback; + iconv_wchar_wc_to_mb_fallback wc_to_mb_fallback; + void* data; +}; + +/* Requests for iconvctl. */ +#define ICONV_TRIVIALP 0 /* int *argument */ +#define ICONV_GET_TRANSLITERATE 1 /* int *argument */ +#define ICONV_SET_TRANSLITERATE 2 /* const int *argument */ +#define ICONV_GET_DISCARD_ILSEQ 3 /* int *argument */ +#define ICONV_SET_DISCARD_ILSEQ 4 /* const int *argument */ +#define ICONV_SET_HOOKS 5 /* const struct iconv_hooks *argument */ +#define ICONV_SET_FALLBACKS 6 /* const struct iconv_fallbacks *argument */ + +/* Listing of locale independent encodings. */ +#define iconvlist libiconvlist +extern LIBICONV_DLL_EXPORTED void iconvlist (int (*do_one) (unsigned int namescount, + const char * const * names, + void* data), + void* data); + +/* Canonicalize an encoding name. + The result is either a canonical encoding name, or name itself. */ +extern LIBICONV_DLL_EXPORTED const char * iconv_canonicalize (const char * name); + +/* Support for relocatable packages. */ + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +extern LIBICONV_DLL_EXPORTED void libiconv_set_relocation_prefix (const char *orig_prefix, + const char *curr_prefix); + +#ifdef __cplusplus +} +#endif + +#endif + + +#endif /* _LIBICONV_H */ diff --git a/include/malloc.h b/include/malloc.h new file mode 100755 index 0000000..cc7a8b9 --- /dev/null +++ b/include/malloc.h @@ -0,0 +1,423 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * 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. + */ + +#pragma once + +/** + * @file malloc.h + * @brief Heap memory allocation. + * + * [Debugging Native Memory Use](https://source.android.com/devices/tech/debug/native-memory) + * is the canonical source for documentation on Android's heap debugging + * features. + */ + +#include +#include +#include + +__BEGIN_DECLS + +#define __BIONIC_ALLOC_SIZE(...) __attribute__((__alloc_size__(__VA_ARGS__))) + +/** + * [malloc(3)](http://man7.org/linux/man-pages/man3/malloc.3.html) allocates + * memory on the heap. + * + * Returns a pointer to the allocated memory on success and returns a null + * pointer and sets `errno` on failure. + * + * Note that Android (like most Unix systems) allows "overcommit". This + * allows processes to allocate more memory than the system has, provided + * they don't use it all. This works because only "dirty" pages that have + * been written to actually require physical memory. In practice, this + * means that it's rare to see memory allocation functions return a null + * pointer, and that a non-null pointer does not mean that you actually + * have all of the memory you asked for. + * + * Note also that the Linux Out Of Memory (OOM) killer behaves differently + * for code run via `adb shell`. The assumption is that if you ran + * something via `adb shell` you're a developer who actually wants the + * device to do what you're asking it to do _even if_ that means killing + * other processes. Obviously this is not the case for apps, which will + * be killed in preference to killing other processes. + */ +void* _Nullable malloc(size_t __byte_count) __mallocfunc __BIONIC_ALLOC_SIZE(1) __wur; + +/** + * [calloc(3)](http://man7.org/linux/man-pages/man3/calloc.3.html) allocates + * and clears memory on the heap. + * + * Returns a pointer to the allocated memory on success and returns a null + * pointer and sets `errno` on failure (but see the notes for malloc()). + */ +void* _Nullable calloc(size_t __item_count, size_t __item_size) __mallocfunc __BIONIC_ALLOC_SIZE(1,2) __wur; + +/** + * [realloc(3)](http://man7.org/linux/man-pages/man3/realloc.3.html) resizes + * allocated memory on the heap. + * + * Returns a pointer (which may be different from `__ptr`) to the resized + * memory on success and returns a null pointer and sets `errno` on failure + * (but see the notes for malloc()). + */ +void* _Nullable realloc(void* _Nullable __ptr, size_t __byte_count) __BIONIC_ALLOC_SIZE(2) __wur; + +/** + * [reallocarray(3)](http://man7.org/linux/man-pages/man3/realloc.3.html) resizes + * allocated memory on the heap. + * + * Equivalent to `realloc(__ptr, __item_count * __item_size)` but fails if the + * multiplication overflows. + * + * Returns a pointer (which may be different from `__ptr`) to the resized + * memory on success and returns a null pointer and sets `errno` on failure + * (but see the notes for malloc()). + */ + +/** +#if __ANDROID_API__ >= 29 +void* _Nullable reallocarray(void* _Nullable __ptr, size_t __item_count, size_t __item_size) __BIONIC_ALLOC_SIZE(2, 3) __wur __INTRODUCED_IN(29); +#endif +*/ + + +/** + * [free(3)](http://man7.org/linux/man-pages/man3/free.3.html) deallocates + * memory on the heap. + */ +void free(void* _Nullable __ptr); + +/** + * [memalign(3)](http://man7.org/linux/man-pages/man3/memalign.3.html) allocates + * memory on the heap with the required alignment. + * + * Returns a pointer to the allocated memory on success and returns a null + * pointer and sets `errno` on failure (but see the notes for malloc()). + * + * See also posix_memalign(). + */ +void* _Nullable memalign(size_t __alignment, size_t __byte_count) __mallocfunc __BIONIC_ALLOC_SIZE(2) __wur; + +/** + * [malloc_usable_size(3)](http://man7.org/linux/man-pages/man3/malloc_usable_size.3.html) + * returns the actual size of the given heap block. + */ +size_t malloc_usable_size(const void* _Nullable __ptr); + +#define __MALLINFO_BODY \ + /** Total number of non-mmapped bytes currently allocated from OS. */ \ + size_t arena; \ + /** Number of free chunks. */ \ + size_t ordblks; \ + /** (Unused.) */ \ + size_t smblks; \ + /** (Unused.) */ \ + size_t hblks; \ + /** Total number of bytes in mmapped regions. */ \ + size_t hblkhd; \ + /** Maximum total allocated space; greater than total if trimming has occurred. */ \ + size_t usmblks; \ + /** (Unused.) */ \ + size_t fsmblks; \ + /** Total allocated space (normal or mmapped.) */ \ + size_t uordblks; \ + /** Total free space. */ \ + size_t fordblks; \ + /** Upper bound on number of bytes releasable by a trim operation. */ \ + size_t keepcost; + +#ifndef STRUCT_MALLINFO_DECLARED +#define STRUCT_MALLINFO_DECLARED 1 +struct mallinfo { __MALLINFO_BODY }; +#endif + +/** + * [mallinfo(3)](http://man7.org/linux/man-pages/man3/mallinfo.3.html) returns + * information about the current state of the heap. Note that mallinfo() is + * inherently unreliable and consider using malloc_info() instead. + */ +struct mallinfo mallinfo(void); + +/** + * On Android the struct mallinfo and struct mallinfo2 are the same. + */ +struct mallinfo2 { __MALLINFO_BODY }; + +/** + * [mallinfo2(3)](http://man7.org/linux/man-pages/man3/mallinfo2.3.html) returns + * information about the current state of the heap. Note that mallinfo2() is + * inherently unreliable and consider using malloc_info() instead. + */ +struct mallinfo2 mallinfo2(void) __RENAME(mallinfo); + +/** + * [malloc_info(3)](http://man7.org/linux/man-pages/man3/malloc_info.3.html) + * writes information about the current state of the heap to the given stream. + * + * The XML structure for malloc_info() is as follows: + * ``` + * + * + * INT + * INT + * INT + * INT + * + * INT + * INT + * INT + * + * + * + * + * + * ``` + * + * Available since API level 23. + */ + +#if __ANDROID_API__ >= 23 +int malloc_info(int __must_be_zero, FILE* _Nonnull __fp) __INTRODUCED_IN(23); +#endif /* __ANDROID_API__ >= 23 */ + + +/** + * mallopt() option to set the decay time. Valid values are -1, 0 and 1. + * -1 : Disable the releasing of unused pages. This value is available since + * API level 35. + * 0 : Release the unused pages immediately. + * 1 : Release the unused pages at a device-specific interval. + * + * Available since API level 27. + */ +#define M_DECAY_TIME (-100) +/** + * mallopt() option to immediately purge any memory not in use. This + * will release the memory back to the kernel. The value is ignored. + * + * Available since API level 28. + */ +#define M_PURGE (-101) +/** + * mallopt() option to immediately purge all possible memory back to + * the kernel. This call can take longer than a normal purge since it + * examines everything. In some cases, it can take more than twice the + * time of a M_PURGE call. The value is ignored. + * + * Available since API level 34. + */ +#define M_PURGE_ALL (-104) + +/** + * mallopt() option to tune the allocator's choice of memory tags to + * make it more likely that a certain class of memory errors will be + * detected. This is only relevant if MTE is enabled in this process + * and ignored otherwise. The value argument should be one of the + * M_MEMTAG_TUNING_* flags. + * NOTE: This is only available in scudo. + * + * Available since API level 31. + */ +#define M_MEMTAG_TUNING (-102) + +/** + * When passed as a value of M_MEMTAG_TUNING mallopt() call, enables + * deterministic detection of linear buffer overflow and underflow + * bugs by assigning distinct tag values to adjacent allocations. This + * mode has a slightly reduced chance to detect use-after-free bugs + * because only half of the possible tag values are available for each + * memory location. + * + * Please keep in mind that MTE can not detect overflow within the + * same tag granule (16-byte aligned chunk), and can miss small + * overflows even in this mode. Such overflow can not be the cause of + * a memory corruption, because the memory within one granule is never + * used for multiple allocations. + */ +#define M_MEMTAG_TUNING_BUFFER_OVERFLOW 0 + +/** + * When passed as a value of M_MEMTAG_TUNING mallopt() call, enables + * independently randomized tags for uniform ~93% probability of + * detecting both spatial (buffer overflow) and temporal (use after + * free) bugs. + */ +#define M_MEMTAG_TUNING_UAF 1 + +/** + * mallopt() option for per-thread memory initialization tuning. + * The value argument should be one of: + * 1: Disable automatic heap initialization on this thread only. + * If memory tagging is enabled, disable as much as possible of the + * memory tagging initialization for this thread. + * 0: Normal behavior. + * + * Available since API level 31. + */ +#define M_THREAD_DISABLE_MEM_INIT (-103) +/** + * mallopt() option to set the maximum number of items in the secondary + * cache of the scudo allocator. + * + * Available since API level 31. + */ +#define M_CACHE_COUNT_MAX (-200) +/** + * mallopt() option to set the maximum size in bytes of a cacheable item in + * the secondary cache of the scudo allocator. + * + * Available since API level 31. + */ +#define M_CACHE_SIZE_MAX (-201) +/** + * mallopt() option to increase the maximum number of shared thread-specific + * data structures that can be created. This number cannot be decreased, + * only increased and only applies to the scudo allocator. + * + * Available since API level 31. + */ +#define M_TSDS_COUNT_MAX (-202) + +/** + * mallopt() option to decide whether heap memory is zero-initialized on + * allocation across the whole process. May be called at any time, including + * when multiple threads are running. An argument of zero indicates memory + * should not be zero-initialized, any other value indicates to initialize heap + * memory to zero. + * + * Note that this memory mitigation is only implemented in scudo and therefore + * this will have no effect when using another allocator (such as jemalloc on + * Android Go devices). + * + * Available since API level 31. + */ +#define M_BIONIC_ZERO_INIT (-203) + +/** + * mallopt() option to change the heap tagging state. May be called at any + * time, including when multiple threads are running. + * The value must be one of the M_HEAP_TAGGING_LEVEL_ constants. + * NOTE: This is only available in scudo. + * + * Available since API level 31. + */ +#define M_BIONIC_SET_HEAP_TAGGING_LEVEL (-204) + +/** + * Constants for use with the M_BIONIC_SET_HEAP_TAGGING_LEVEL mallopt() option. + */ +enum HeapTaggingLevel { + /** + * Disable heap tagging and memory tag checks (if supported). + * Heap tagging may not be re-enabled after being disabled. + */ + M_HEAP_TAGGING_LEVEL_NONE = 0, +#define M_HEAP_TAGGING_LEVEL_NONE M_HEAP_TAGGING_LEVEL_NONE + /** + * Address-only tagging. Heap pointers have a non-zero tag in the + * most significant ("top") byte which is checked in free(). Memory + * accesses ignore the tag using arm64's Top Byte Ignore (TBI) feature. + */ + M_HEAP_TAGGING_LEVEL_TBI = 1, +#define M_HEAP_TAGGING_LEVEL_TBI M_HEAP_TAGGING_LEVEL_TBI + /** + * Enable heap tagging and asynchronous memory tag checks (if supported). + * Disable stack trace collection. + */ + M_HEAP_TAGGING_LEVEL_ASYNC = 2, +#define M_HEAP_TAGGING_LEVEL_ASYNC M_HEAP_TAGGING_LEVEL_ASYNC + /** + * Enable heap tagging and synchronous memory tag checks (if supported). + * Enable stack trace collection. + */ + M_HEAP_TAGGING_LEVEL_SYNC = 3, +#define M_HEAP_TAGGING_LEVEL_SYNC M_HEAP_TAGGING_LEVEL_SYNC +}; + +/** + * mallopt() option to print human readable statistics about the memory + * allocator to the log. There is no format for this data, each allocator + * can use a different format, and the data that is printed can + * change at any time. This is expected to be used as a debugging aid. + * + * Available since API level 35. + */ +#define M_LOG_STATS (-205) + +/** + * [mallopt(3)](http://man7.org/linux/man-pages/man3/mallopt.3.html) modifies + * heap behavior. Values of `__option` are the `M_` constants from this header. + * + * Returns 1 on success, 0 on error. + * + * Available since API level 26. + */ + +#if __ANDROID_API__ >= 26 +int mallopt(int __option, int __value) __INTRODUCED_IN(26); +#endif /* __ANDROID_API__ >= 26 */ + + +/** + * [__malloc_hook(3)](http://man7.org/linux/man-pages/man3/__malloc_hook.3.html) + * is called to implement malloc(). By default this points to the system's + * implementation. + * + * Available since API level 28. + * + * See also: [extra documentation](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_hooks/README.md) + */ + +#if __ANDROID_API__ >= 28 +extern void* _Nonnull (*volatile _Nonnull __malloc_hook)(size_t __byte_count, const void* _Nonnull __caller) __INTRODUCED_IN(28); + +/** + * [__realloc_hook(3)](http://man7.org/linux/man-pages/man3/__realloc_hook.3.html) + * is called to implement realloc(). By default this points to the system's + * implementation. + * + * Available since API level 28. + * + * See also: [extra documentation](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_hooks/README.md) + */ +extern void* _Nonnull (*volatile _Nonnull __realloc_hook)(void* _Nullable __ptr, size_t __byte_count, const void* _Nonnull __caller) __INTRODUCED_IN(28); + +/** + * [__free_hook(3)](http://man7.org/linux/man-pages/man3/__free_hook.3.html) + * is called to implement free(). By default this points to the system's + * implementation. + * + * Available since API level 28. + * + * See also: [extra documentation](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_hooks/README.md) + */ +extern void (*volatile _Nonnull __free_hook)(void* _Nullable __ptr, const void* _Nonnull __caller) __INTRODUCED_IN(28); + +/** + * [__memalign_hook(3)](http://man7.org/linux/man-pages/man3/__memalign_hook.3.html) + * is called to implement memalign(). By default this points to the system's + * implementation. + * + * Available since API level 28. + * + * See also: [extra documentation](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_hooks/README.md) + */ +extern void* _Nonnull (*volatile _Nonnull __memalign_hook)(size_t __alignment, size_t __byte_count, const void* _Nonnull __caller) __INTRODUCED_IN(28); +#endif /* __ANDROID_API__ >= 28 */ + + +__END_DECLS \ No newline at end of file diff --git a/include/parted/constraint.h b/include/parted/constraint.h new file mode 100755 index 0000000..cfb411c --- /dev/null +++ b/include/parted/constraint.h @@ -0,0 +1,101 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef PED_CONSTRAINT_H_INCLUDED +#define PED_CONSTRAINT_H_INCLUDED + +typedef struct _PedConstraint PedConstraint; + +#include +#include +#include + +struct _PedConstraint { + PedAlignment* start_align; + PedAlignment* end_align; + PedGeometry* start_range; + PedGeometry* end_range; + PedSector min_size; + PedSector max_size; +}; + +extern int +ped_constraint_init ( + PedConstraint* constraint, + const PedAlignment* start_align, + const PedAlignment* end_align, + const PedGeometry* start_range, + const PedGeometry* end_range, + PedSector min_size, + PedSector max_size); + +extern PedConstraint* +ped_constraint_new ( + const PedAlignment* start_align, + const PedAlignment* end_align, + const PedGeometry* start_range, + const PedGeometry* end_range, + PedSector min_size, + PedSector max_size); + +extern PedConstraint* +ped_constraint_new_from_min_max ( + const PedGeometry* min, + const PedGeometry* max); + +extern PedConstraint* +ped_constraint_new_from_min (const PedGeometry* min); + +extern PedConstraint* +ped_constraint_new_from_max (const PedGeometry* max); + +extern PedConstraint* +ped_constraint_duplicate (const PedConstraint* constraint); + +extern void +ped_constraint_done (PedConstraint* constraint); + +extern void +ped_constraint_destroy (PedConstraint* constraint); + +extern PedConstraint* +ped_constraint_intersect (const PedConstraint* a, const PedConstraint* b); + +extern PedGeometry* +ped_constraint_solve_max (const PedConstraint* constraint); + +extern PedGeometry* +ped_constraint_solve_nearest ( + const PedConstraint* constraint, const PedGeometry* geom); + +extern int +ped_constraint_is_solution (const PedConstraint* constraint, + const PedGeometry* geom) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern PedConstraint* +ped_constraint_any (const PedDevice* dev); + +extern PedConstraint* +ped_constraint_exact (const PedGeometry* geom); + +#endif /* PED_CONSTRAINT_H_INCLUDED */ diff --git a/include/parted/crc32.h b/include/parted/crc32.h new file mode 100755 index 0000000..8c06b25 --- /dev/null +++ b/include/parted/crc32.h @@ -0,0 +1,39 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + crc32.h + + 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 3 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, see . +*/ + +#ifndef _CRC32_H +#define _CRC32_H + +#include + +/* + * This computes a 32 bit CRC of the data in the buffer, and returns the CRC. + * The polynomial used is 0xedb88320. + */ + +extern uint32_t __efi_crc32 (const void *buf, unsigned long len, + uint32_t seed) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +#endif /* _CRC32_H */ diff --git a/include/parted/debug.h b/include/parted/debug.h new file mode 100755 index 0000000..97cd000 --- /dev/null +++ b/include/parted/debug.h @@ -0,0 +1,88 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1998-2000, 2002, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef PED_DEBUG_H_INCLUDED +#define PED_DEBUG_H_INCLUDED + +#include + +#ifdef DEBUG + +typedef void (PedDebugHandler) ( const int level, const char* file, int line, + const char* function, const char* msg ); + +extern void ped_debug_set_handler (PedDebugHandler* handler); +extern void ped_debug ( const int level, const char* file, int line, + const char* function, const char* msg, ... ); + +extern void __attribute__((__noreturn__)) +ped_assert ( const char* cond_text, + const char* file, int line, const char* function ); + +#if defined __GNUC__ && !defined __JSFTRACE__ + +#define PED_DEBUG(level, ...) \ + ped_debug ( level, __FILE__, __LINE__, __PRETTY_FUNCTION__, \ + __VA_ARGS__ ) + +#define PED_ASSERT(cond) \ + do { \ + if (!(cond)) { \ + ped_assert ( \ + #cond, \ + __FILE__, \ + __LINE__, \ + __PRETTY_FUNCTION__ ); \ + } \ + } while (0) + +#else /* !__GNUC__ */ + +/* function because variadic macros are C99 */ +static void PED_DEBUG (int level, ...) +{ + va_list va_args; + + va_start (va_args, level); + ped_debug ( level, "unknown file", 0, "unknown function", va_args ); + va_end (va_args); +} + +#define PED_ASSERT(cond) \ + do { \ + if (!(cond)) { \ + ped_assert ( \ + #cond, \ + "unknown", \ + 0, \ + "unknown"); \ + } \ + } while (0) + +#endif /* __GNUC__ */ + +#else /* !DEBUG */ + +#define PED_ASSERT(cond) do {} while (0) +#define PED_DEBUG(level, ...) do {} while (0) + + +#endif /* DEBUG */ + +#endif /* PED_DEBUG_H_INCLUDED */ diff --git a/include/parted/device.h b/include/parted/device.h new file mode 100755 index 0000000..49a4fd2 --- /dev/null +++ b/include/parted/device.h @@ -0,0 +1,172 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1998-2001, 2005, 2007-2008, 2011-2014, 2019-2023 Free + Software Foundation, Inc. + + 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 3 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, see . +*/ + +/** + * \addtogroup PedDevice + * @{ + */ + +/** \file device.h */ + +#ifndef PED_DEVICE_H_INCLUDED +#define PED_DEVICE_H_INCLUDED + +/** We can address 2^63 sectors */ +typedef long long PedSector; + +typedef enum { + PED_DEVICE_UNKNOWN = 0, + PED_DEVICE_SCSI = 1, + PED_DEVICE_IDE = 2, + PED_DEVICE_DAC960 = 3, + PED_DEVICE_CPQARRAY = 4, + PED_DEVICE_FILE = 5, + PED_DEVICE_ATARAID = 6, + PED_DEVICE_I2O = 7, + PED_DEVICE_UBD = 8, + PED_DEVICE_DASD = 9, + PED_DEVICE_VIODASD = 10, + PED_DEVICE_SX8 = 11, + PED_DEVICE_DM = 12, + PED_DEVICE_XVD = 13, + PED_DEVICE_SDMMC = 14, + PED_DEVICE_VIRTBLK = 15, + PED_DEVICE_AOE = 16, + PED_DEVICE_MD = 17, + PED_DEVICE_LOOP = 18, + PED_DEVICE_NVME = 19, + PED_DEVICE_RAM = 20, + PED_DEVICE_PMEM = 21 +} PedDeviceType; + +typedef struct _PedDevice PedDevice; +typedef struct _PedDeviceArchOps PedDeviceArchOps; +typedef struct _PedCHSGeometry PedCHSGeometry; + +/** + * A cylinder-head-sector "old-style" geometry. + * + * A device addressed in this way has C*H*S sectors. + */ +struct _PedCHSGeometry { + int cylinders; + int heads; + int sectors; +}; + +/** A block device - for example, /dev/hda, not /dev/hda3 */ +struct _PedDevice { + PedDevice* next; + + char* model; /**< \brief description of hardware + (manufacturer, model) */ + char* path; /**< device /dev entry */ + + PedDeviceType type; /**< SCSI, IDE, etc. \sa PedDeviceType */ + long long sector_size; /**< logical sector size */ + long long phys_sector_size; /**< physical sector size */ + PedSector length; /**< device length (LBA) */ + + int open_count; /**< the number of times this device has + been opened with ped_device_open(). */ + int read_only; + int external_mode; + int dirty; + int boot_dirty; + + PedCHSGeometry hw_geom; + PedCHSGeometry bios_geom; + short host, did; + + void* arch_specific; +}; + +#include + +/** + * List of functions implementing architecture-specific operations. + */ +struct _PedDeviceArchOps { + PedDevice* (*_new) (const char* path); + void (*destroy) (PedDevice* dev); + int (*is_busy) (PedDevice* dev); + int (*open) (PedDevice* dev); + int (*refresh_open) (PedDevice* dev); + int (*close) (PedDevice* dev); + int (*refresh_close) (PedDevice* dev); + int (*read) (const PedDevice* dev, void* buffer, + PedSector start, PedSector count); + int (*write) (PedDevice* dev, const void* buffer, + PedSector start, PedSector count); + int (*sync) (PedDevice* dev); + int (*sync_fast) (PedDevice* dev); + PedSector (*check) (PedDevice* dev, void* buffer, + PedSector start, PedSector count); + void (*probe_all) (); + /* These functions are optional */ + PedAlignment *(*get_minimum_alignment)(const PedDevice *dev); + PedAlignment *(*get_optimum_alignment)(const PedDevice *dev); +}; + +#include +#include + +extern void ped_device_probe_all (); +extern void ped_device_free_all (); + +extern PedDevice* ped_device_get (const char* name); +extern PedDevice* ped_device_get_next (const PedDevice* dev) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern int ped_device_is_busy (PedDevice* dev); +extern int ped_device_open (PedDevice* dev); +extern int ped_device_close (PedDevice* dev); +extern void ped_device_destroy (PedDevice* dev); +extern void ped_device_cache_remove (PedDevice* dev); + +extern int ped_device_begin_external_access (PedDevice* dev); +extern int ped_device_end_external_access (PedDevice* dev); + +extern int ped_device_read (const PedDevice* dev, void* buffer, + PedSector start, PedSector count); +extern int ped_device_write (PedDevice* dev, const void* buffer, + PedSector start, PedSector count); +extern int ped_device_sync (PedDevice* dev); +extern int ped_device_sync_fast (PedDevice* dev); +extern PedSector ped_device_check (PedDevice* dev, void* buffer, + PedSector start, PedSector count); +extern PedConstraint* ped_device_get_constraint (const PedDevice* dev); + +extern PedConstraint *ped_device_get_minimal_aligned_constraint( + const PedDevice *dev); +extern PedConstraint *ped_device_get_optimal_aligned_constraint( + const PedDevice *dev); + +extern PedAlignment *ped_device_get_minimum_alignment(const PedDevice *dev); +extern PedAlignment *ped_device_get_optimum_alignment(const PedDevice *dev); + +/* private stuff ;-) */ + +extern void _ped_device_probe (const char* path); + +#endif /* PED_DEVICE_H_INCLUDED */ + +/** @} */ diff --git a/include/parted/disk.h b/include/parted/disk.h new file mode 100755 index 0000000..0b1d4b9 --- /dev/null +++ b/include/parted/disk.h @@ -0,0 +1,503 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2002, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +/** + * \addtogroup PedDisk + * @{ + */ + +/** \file disk.h */ + +#ifndef PED_DISK_H_INCLUDED +#define PED_DISK_H_INCLUDED + +/* Include these to work around gnulib redefining free, read, etc. which causes problems + * with pt-common.h + */ +#include +#include +#include + +/** + * Disk flags + */ +enum _PedDiskFlag { + /* This flag (which defaults to true) controls if disk types for + which cylinder alignment is optional do cylinder alignment when a + new partition gets added. + This flag is available for msdos and sun disklabels (for sun labels + it only controls the aligning of the end of the partition) */ + PED_DISK_CYLINDER_ALIGNMENT=1, + /* This flag controls whether the boot flag of a GPT PMBR is set */ + PED_DISK_GPT_PMBR_BOOT=2, +}; +// NOTE: DO NOT define using enums +#define PED_DISK_FIRST_FLAG 1 // PED_DISK_CYLINDER_ALIGNMENT +#define PED_DISK_LAST_FLAG 2 // PED_DISK_GPT_PMBR_BOOT + +/** + * Partition types + */ +enum _PedPartitionType { + PED_PARTITION_NORMAL = 0x00, + PED_PARTITION_LOGICAL = 0x01, + PED_PARTITION_EXTENDED = 0x02, + PED_PARTITION_FREESPACE = 0x04, + PED_PARTITION_METADATA = 0x08, + PED_PARTITION_PROTECTED = 0x10 +}; + +/** + * Partition flags. + */ +enum _PedPartitionFlag { + PED_PARTITION_BOOT=1, + PED_PARTITION_ROOT=2, + PED_PARTITION_SWAP=3, + PED_PARTITION_HIDDEN=4, + PED_PARTITION_RAID=5, + PED_PARTITION_LVM=6, + PED_PARTITION_LBA=7, + PED_PARTITION_HPSERVICE=8, + PED_PARTITION_PALO=9, + PED_PARTITION_PREP=10, + PED_PARTITION_MSFT_RESERVED=11, + PED_PARTITION_BIOS_GRUB=12, + PED_PARTITION_APPLE_TV_RECOVERY=13, + PED_PARTITION_DIAG=14, + PED_PARTITION_LEGACY_BOOT=15, + PED_PARTITION_MSFT_DATA=16, + PED_PARTITION_IRST=17, + PED_PARTITION_ESP=18, + PED_PARTITION_CHROMEOS_KERNEL=19, + PED_PARTITION_BLS_BOOT=20, + PED_PARTITION_LINUX_HOME=21, + PED_PARTITION_NO_AUTOMOUNT=22, +}; +// NOTE: DO NOT define using enums +#define PED_PARTITION_FIRST_FLAG 1 // PED_PARTITION_BOOT +#define PED_PARTITION_LAST_FLAG 22 // PED_PARTITION_NO_AUTOMOUNT + +enum _PedDiskTypeFeature { + PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */ + PED_DISK_TYPE_PARTITION_NAME=2, /**< supports partition names */ + PED_DISK_TYPE_PARTITION_TYPE_ID=4, /**< supports partition type-ids */ + PED_DISK_TYPE_PARTITION_TYPE_UUID=8, /**< supports partition type-uuids */ + PED_DISK_TYPE_DISK_UUID=16, /**< supports disk uuids */ + PED_DISK_TYPE_PARTITION_UUID=32, /**< supports partition uuids */ +}; +// NOTE: DO NOT define using enums +#define PED_DISK_TYPE_FIRST_FEATURE 1 // PED_DISK_TYPE_EXTENDED +#define PED_DISK_TYPE_LAST_FEATURE 32 // PED_DISK_TYPE_PARTITION_UUID + +struct _PedDisk; +struct _PedPartition; +struct _PedDiskOps; +struct _PedDiskType; +struct _PedDiskArchOps; + +typedef enum _PedDiskFlag PedDiskFlag; +typedef enum _PedPartitionType PedPartitionType; +typedef enum _PedPartitionFlag PedPartitionFlag; +typedef enum _PedDiskTypeFeature PedDiskTypeFeature; +typedef struct _PedDisk PedDisk; +typedef struct _PedPartition PedPartition; +typedef const struct _PedDiskOps PedDiskOps; +typedef struct _PedDiskType PedDiskType; +typedef const struct _PedDiskArchOps PedDiskArchOps; + +#include +#include +#include +#include +#include + +/** @} */ + +/** + * \addtogroup PedPartition + * + * @{ + */ + +/** \file disk.h */ + +/** + * PedPartition structure represents a partition. + */ +struct _PedPartition { + PedPartition* prev; + PedPartition* next; + + /**< the partition table of the partition */ + PedDisk* disk; + PedGeometry geom; /**< geometry of the partition */ + + /**< the partition number: In Linux, this is the + same as the minor number. No assumption + should be made about "num" and "type" + - different disk labels have different rules. */ + + int num; + PedPartitionType type; /**< the type of partition: a bit field of + PED_PARTITION_LOGICAL, PED_PARTITION_EXTENDED, + PED_PARTITION_METADATA + and PED_PARTITION_FREESPACE. + Both the first two, and the last two are + mutually exclusive. + An extended partition is a primary + partition that may contain logical partitions. + There is at most one extended partition on + a disk. + A logical partition is like a primary + partition, except it's inside an extended + partition. Internally, pseudo partitions are + allocated to represent free space, or disk + label meta-data. These have the + PED_PARTITION_FREESPACE or + PED_PARTITION_METADATA bit set. */ + + /**< The type of file system on the partition. NULL if unknown. */ + const PedFileSystemType* fs_type; + + /**< Only used for an extended partition. The list of logical + partitions (and free space and metadata within the extended + partition). */ + PedPartition* part_list; + + void* disk_specific; +}; + +/** @} */ + +/** + * \addtogroup PedDisk + * @{ + */ + +/** + * Represents a disk label (partition table). + */ +struct _PedDisk { + PedDevice* dev; /**< the device where the + partition table lies */ + const PedDiskType* type; /**< type of disk label */ + const int* block_sizes; /**< block sizes supported + by this label */ + PedPartition* part_list; /**< list of partitions. Access with + ped_disk_next_partition() */ + + void* disk_specific; + +/* office use only ;-) */ + int needs_clobber; /**< clobber before write? */ + int update_mode; /**< mode without free/metadata + partitions, for easier + update */ +}; + +struct _PedDiskOps { + /* disk label operations */ + int (*probe) (const PedDevice *dev); + int (*clobber) (PedDevice* dev); + PedDisk* (*alloc) (const PedDevice* dev); + PedDisk* (*duplicate) (const PedDisk* disk); + void (*free) (PedDisk* disk); + int (*read) (PedDisk* disk); + int (*write) (const PedDisk* disk); + int (*disk_set_flag) ( + PedDisk *disk, + PedDiskFlag flag, + int state); + int (*disk_get_flag) ( + const PedDisk *disk, + PedDiskFlag flag); + int (*disk_is_flag_available) ( + const PedDisk *disk, + PedDiskFlag flag); + uint8_t* (*disk_get_uuid) (const PedDisk* disk); + /** \todo add label guessing op here */ + + /* partition operations */ + PedPartition* (*partition_new) ( + const PedDisk* disk, + PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, + PedSector end); + PedPartition* (*partition_duplicate) (const PedPartition* part); + void (*partition_destroy) (PedPartition* part); + int (*partition_set_system) (PedPartition* part, + const PedFileSystemType* fs_type); + int (*partition_set_flag) ( + PedPartition* part, + PedPartitionFlag flag, + int state); + int (*partition_get_flag) ( + const PedPartition* part, + PedPartitionFlag flag); + int (*partition_is_flag_available) ( + const PedPartition* part, + PedPartitionFlag flag); + void (*partition_set_name) (PedPartition* part, const char* name); + const char* (*partition_get_name) (const PedPartition* part); + + int (*partition_set_type_id) (PedPartition* part, uint8_t id); + uint8_t (*partition_get_type_id) (const PedPartition* part); + + int (*partition_set_type_uuid) (PedPartition* part, const uint8_t* uuid); + uint8_t* (*partition_get_type_uuid) (const PedPartition* part); + + uint8_t* (*partition_get_uuid) (const PedPartition* part); + + int (*partition_align) (PedPartition* part, + const PedConstraint* constraint); + int (*partition_enumerate) (PedPartition* part); + bool (*partition_check) (const PedPartition* part); + + /* other */ + int (*alloc_metadata) (PedDisk* disk); + int (*get_max_primary_partition_count) (const PedDisk* disk); + bool (*get_max_supported_partition_count) (const PedDisk* disk, + int* supported); + PedAlignment *(*get_partition_alignment)(const PedDisk *disk); + PedSector (*max_length) (void); + PedSector (*max_start_sector) (void); +}; + +struct _PedDiskType { + PedDiskType* next; + const char* name; /**< the name of the partition table type. + \todo not very intuitive name */ + PedDiskOps* const ops; + + PedDiskTypeFeature features; /**< bitmap of supported features */ +}; + +/** + * Architecture-specific operations. i.e. communication with kernel (or + * whatever) about changes, etc. + */ +struct _PedDiskArchOps { + char* (*partition_get_path) (const PedPartition* part); + int (*partition_is_busy) (const PedPartition* part); + int (*disk_commit) (PedDisk* disk); +}; + +extern void ped_disk_type_register (PedDiskType* type); +extern void ped_disk_type_unregister (PedDiskType* type); + +extern PedDiskType* ped_disk_type_get_next (PedDiskType const *type) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern PedDiskType* ped_disk_type_get (const char* name) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern int ped_disk_type_check_feature (const PedDiskType* disk_type, + PedDiskTypeFeature feature) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern PedDiskType* ped_disk_probe (PedDevice* dev); +extern int ped_disk_clobber (PedDevice* dev); +extern PedDisk* ped_disk_new (PedDevice* dev); +extern PedDisk* ped_disk_new_fresh (PedDevice* dev, + const PedDiskType* disk_type); +extern PedDisk* ped_disk_duplicate (const PedDisk* old_disk); +extern void ped_disk_destroy (PedDisk* disk); +extern int ped_disk_commit (PedDisk* disk); +extern int ped_disk_commit_to_dev (PedDisk* disk); +extern int ped_disk_commit_to_os (PedDisk* disk); +extern int ped_disk_check (const PedDisk* disk); +extern void ped_disk_print (const PedDisk* disk); + +extern int ped_disk_get_primary_partition_count (const PedDisk* disk) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern int ped_disk_get_last_partition_num (const PedDisk* disk) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern int ped_disk_get_max_primary_partition_count (const PedDisk* disk); +extern bool ped_disk_get_max_supported_partition_count(const PedDisk* disk, + int* supported); +extern PedAlignment *ped_disk_get_partition_alignment(const PedDisk *disk); + +extern int ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int state); +extern int ped_disk_get_flag(const PedDisk *disk, PedDiskFlag flag); +extern int ped_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag); + +extern uint8_t* ped_disk_get_uuid (const PedDisk* disk); + +extern const char *ped_disk_flag_get_name(PedDiskFlag flag); +extern PedDiskFlag ped_disk_flag_get_by_name(const char *name); +extern PedDiskFlag ped_disk_flag_next(PedDiskFlag flag) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__const__)) +#endif +; + +/** @} */ + +/** + * \addtogroup PedPartition + * + * @{ + */ + +extern PedPartition* ped_partition_new (const PedDisk* disk, + PedPartitionType type, + const PedFileSystemType* fs_type, + PedSector start, + PedSector end); +extern void ped_partition_destroy (PedPartition* part); +extern int ped_partition_is_active (const PedPartition* part) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern int ped_partition_set_flag (PedPartition* part, PedPartitionFlag flag, + int state); +extern int ped_partition_get_flag (const PedPartition* part, + PedPartitionFlag flag); +extern int ped_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag); +extern int ped_partition_set_system (PedPartition* part, + const PedFileSystemType* fs_type); +extern int ped_partition_set_name (PedPartition* part, const char* name); +extern const char* ped_partition_get_name (const PedPartition* part); + +extern int ped_partition_set_type_id (PedPartition* part, uint8_t id); +extern uint8_t ped_partition_get_type_id (const PedPartition* part); + +extern int ped_partition_set_type_uuid (PedPartition* part, const uint8_t* uuid); +extern uint8_t* ped_partition_get_type_uuid (const PedPartition* part); + +extern uint8_t* ped_partition_get_uuid (const PedPartition* part); + +extern int ped_partition_is_busy (const PedPartition* part); +extern char* ped_partition_get_path (const PedPartition* part); + +extern const char* ped_partition_type_get_name (PedPartitionType part_type) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__const__)) +#endif +; +extern const char* ped_partition_flag_get_name (PedPartitionFlag flag); +extern PedPartitionFlag ped_partition_flag_get_by_name (const char* name); +extern PedPartitionFlag ped_partition_flag_next (PedPartitionFlag flag) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__const__)) +#endif +; + +/** @} */ + +/** + * \addtogroup PedDisk + * @{ + */ + +extern int ped_disk_add_partition (PedDisk* disk, PedPartition* part, + const PedConstraint* constraint); +extern int ped_disk_remove_partition (PedDisk* disk, PedPartition* part); +extern int ped_disk_delete_partition (PedDisk* disk, PedPartition* part); +extern int ped_disk_delete_all (PedDisk* disk); +extern int ped_disk_set_partition_geom (PedDisk* disk, PedPartition* part, + const PedConstraint* constraint, + PedSector start, PedSector end); +extern int ped_disk_maximize_partition (PedDisk* disk, PedPartition* part, + const PedConstraint* constraint); +extern PedGeometry* ped_disk_get_max_partition_geometry (PedDisk* disk, + PedPartition* part, const PedConstraint* constraint); +extern int ped_disk_minimize_extended_partition (PedDisk* disk); + +extern PedPartition* ped_disk_next_partition (const PedDisk* disk, + const PedPartition* part) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern PedPartition* ped_disk_get_partition (const PedDisk* disk, int num) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern PedPartition* ped_disk_get_partition_by_sector (const PedDisk* disk, + PedSector sect) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern PedPartition* ped_disk_extended_partition (const PedDisk* disk) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern PedSector ped_disk_max_partition_length (const PedDisk *disk); +extern PedSector ped_disk_max_partition_start_sector (const PedDisk *disk); + +/* internal functions */ +extern PedDisk* _ped_disk_alloc (const PedDevice* dev, const PedDiskType* type); +extern void _ped_disk_free (PedDisk* disk); + + +/** @} */ + +/** + * \addtogroup PedPartition + * + * @{ + */ + +extern PedPartition* _ped_partition_alloc (const PedDisk* disk, + PedPartitionType type, + const PedFileSystemType* fs_type, + PedSector start, + PedSector end); +extern void _ped_partition_free (PedPartition* part); + +extern int _ped_partition_attempt_align ( + PedPartition* part, const PedConstraint* external, + PedConstraint* internal); + +#endif /* PED_DISK_H_INCLUDED */ + +/** @} */ diff --git a/include/parted/endian.h b/include/parted/endian.h new file mode 100755 index 0000000..f9f473c --- /dev/null +++ b/include/parted/endian.h @@ -0,0 +1,85 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1998-2002, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/* should only be #included by files in libparted */ + +#ifndef PED_ENDIAN_H_INCLUDED +#define PED_ENDIAN_H_INCLUDED + +#include + +/* returns the n'th least significant byte */ +#define _GET_BYTE(x, n) ( ((x) >> (8 * (n))) & 0xff ) + +#define _PED_SWAP16(x) ( (_GET_BYTE(x, 0) << 8) \ + + (_GET_BYTE(x, 1) << 0) ) + +#define _PED_SWAP32(x) ( (_GET_BYTE(x, 0) << 24) \ + + (_GET_BYTE(x, 1) << 16) \ + + (_GET_BYTE(x, 2) << 8) \ + + (_GET_BYTE(x, 3) << 0) ) + +#define _PED_SWAP64(x) ( (_GET_BYTE(x, 0) << 56) \ + + (_GET_BYTE(x, 1) << 48) \ + + (_GET_BYTE(x, 2) << 40) \ + + (_GET_BYTE(x, 3) << 32) \ + + (_GET_BYTE(x, 4) << 24) \ + + (_GET_BYTE(x, 5) << 16) \ + + (_GET_BYTE(x, 6) << 8) \ + + (_GET_BYTE(x, 7) << 0) ) + +#define PED_SWAP16(x) ((uint16_t) _PED_SWAP16( (uint16_t) (x) )) +#define PED_SWAP32(x) ((uint32_t) _PED_SWAP32( (uint32_t) (x) )) +#define PED_SWAP64(x) ((uint64_t) _PED_SWAP64( (uint64_t) (x) )) + +#ifdef WORDS_BIGENDIAN + +#define PED_CPU_TO_LE16(x) PED_SWAP16(x) +#define PED_CPU_TO_BE16(x) (x) +#define PED_CPU_TO_LE32(x) PED_SWAP32(x) +#define PED_CPU_TO_BE32(x) (x) +#define PED_CPU_TO_LE64(x) PED_SWAP64(x) +#define PED_CPU_TO_BE64(x) (x) + +#define PED_LE16_TO_CPU(x) PED_SWAP16(x) +#define PED_BE16_TO_CPU(x) (x) +#define PED_LE32_TO_CPU(x) PED_SWAP32(x) +#define PED_BE32_TO_CPU(x) (x) +#define PED_LE64_TO_CPU(x) PED_SWAP64(x) +#define PED_BE64_TO_CPU(x) (x) + +#else /* !WORDS_BIGENDIAN */ + +#define PED_CPU_TO_LE16(x) (x) +#define PED_CPU_TO_BE16(x) PED_SWAP16(x) +#define PED_CPU_TO_LE32(x) (x) +#define PED_CPU_TO_BE32(x) PED_SWAP32(x) +#define PED_CPU_TO_LE64(x) (x) +#define PED_CPU_TO_BE64(x) PED_SWAP64(x) + +#define PED_LE16_TO_CPU(x) (x) +#define PED_BE16_TO_CPU(x) PED_SWAP16(x) +#define PED_LE32_TO_CPU(x) (x) +#define PED_BE32_TO_CPU(x) PED_SWAP32(x) +#define PED_LE64_TO_CPU(x) (x) +#define PED_BE64_TO_CPU(x) PED_SWAP64(x) + +#endif /* !WORDS_BIGENDIAN */ + +#endif /* PED_ENDIAN_H_INCLUDED */ diff --git a/include/parted/exception.h b/include/parted/exception.h new file mode 100755 index 0000000..527cc73 --- /dev/null +++ b/include/parted/exception.h @@ -0,0 +1,136 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/** + * \addtogroup PedException + * @{ + */ + +/** \file exception.h */ + +#ifndef PED_EXCEPTION_H_INCLUDED +#define PED_EXCEPTION_H_INCLUDED + +typedef struct _PedException PedException; + +/** + * Exception type + */ +enum _PedExceptionType { + PED_EXCEPTION_INFORMATION=1, + PED_EXCEPTION_WARNING=2, + PED_EXCEPTION_ERROR=3, + PED_EXCEPTION_FATAL=4, + PED_EXCEPTION_BUG=5, + PED_EXCEPTION_NO_FEATURE=6, +}; +typedef enum _PedExceptionType PedExceptionType; + +/** + * Option for resolving the exception + */ +enum _PedExceptionOption { + /* individual options */ + PED_EXCEPTION_UNHANDLED=0, + PED_EXCEPTION_FIX=1, + PED_EXCEPTION_YES=2, + PED_EXCEPTION_NO=4, + PED_EXCEPTION_OK=8, + PED_EXCEPTION_RETRY=16, + PED_EXCEPTION_IGNORE=32, + PED_EXCEPTION_CANCEL=64, + + /* combinations of individual options */ + PED_EXCEPTION_OK_CANCEL = PED_EXCEPTION_OK + PED_EXCEPTION_CANCEL, + PED_EXCEPTION_YES_NO = PED_EXCEPTION_YES + PED_EXCEPTION_NO, + PED_EXCEPTION_YES_NO_CANCEL = + PED_EXCEPTION_YES_NO + PED_EXCEPTION_CANCEL, + PED_EXCEPTION_IGNORE_CANCEL = + PED_EXCEPTION_IGNORE + PED_EXCEPTION_CANCEL, + PED_EXCEPTION_RETRY_CANCEL = PED_EXCEPTION_RETRY + PED_EXCEPTION_CANCEL, + PED_EXCEPTION_RETRY_IGNORE_CANCEL = + PED_EXCEPTION_RETRY + PED_EXCEPTION_IGNORE_CANCEL, +}; + +#define PED_EXCEPTION_OPTION_FIRST PED_EXCEPTION_FIX +#define PED_EXCEPTION_OPTION_LAST PED_EXCEPTION_CANCEL /* last individual option */ + +typedef enum _PedExceptionOption PedExceptionOption; + +/** + * Structure with information about exception + */ +struct _PedException { + char* message; /**< text describing what the event was */ + PedExceptionType type; /**< type of exception */ + PedExceptionOption options; /**< ORed list of options that + the exception handler can + return (the ways an exception + can be resolved) */ +}; + +typedef PedExceptionOption (PedExceptionHandler) (PedException* ex); + +extern int ped_exception; /* set to true if there's an exception */ + +extern char* ped_exception_get_type_string (PedExceptionType ex_type) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__const__)) +#endif +; +extern char* ped_exception_get_option_string (PedExceptionOption ex_opt) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern void ped_exception_set_handler (PedExceptionHandler* handler); +extern PedExceptionHandler *ped_exception_get_handler(void) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern PedExceptionOption ped_exception_default_handler (PedException* ex); + +extern PedExceptionOption ped_exception_throw (PedExceptionType ex_type, + PedExceptionOption ex_opt, + const char* message, + ...); +/* rethrows an exception - i.e. calls the exception handler, (or returns a + code to return to pass up higher) */ +extern PedExceptionOption ped_exception_rethrow (); + +/* frees an exception, indicating that the exception has been handled. + Calling an exception handler counts. */ +extern void ped_exception_catch (); + +/* indicate that exceptions should not go to the exception handler, but passed + up to the calling function(s) */ +extern void ped_exception_fetch_all (); + +/* indicate that exceptions should invoke the exception handler */ +extern void ped_exception_leave_all (); + +#endif /* PED_EXCEPTION_H_INCLUDED */ + +/** @} */ diff --git a/include/parted/fdasd.h b/include/parted/fdasd.h new file mode 100755 index 0000000..e3ba183 --- /dev/null +++ b/include/parted/fdasd.h @@ -0,0 +1,299 @@ +/* + * File...........: s390-tools/fdasd/fdasd.h + * Author(s)......: Volker Sameske + * Horst Hummel + * Bugreports.to..: + * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2001-2002 + * + * History of changes (starts March 2001) + * version 1.01 - menu entry 's' to show mapping devnode - DS name + * 1.02 - DS names count now from 0001 instead from 0000 + * 1.03 - volser checks: 'AA AAA' to 'AAAAA ' + * - removed dependency to kernel headers. + * 1.04 - added -p option + * 1.05 - new API policy, set it back to 0 + */ +#ifndef FDASD_H +#define FDASD_H + +#include + +/***************************************************************************** + * SECTION: Definitions needed for DASD-API (see dasd.h) * + *****************************************************************************/ + +#define DASD_IOCTL_LETTER 'D' + +#define DASD_PARTN_BITS 2 + +#define PARTITION_LINUX_SWAP 0x82 +#define PARTITION_LINUX 0x83 +#define PARTITION_LINUX_LVM 0x8e +#define PARTITION_LINUX_RAID 0xfd + +#define PART_TYPE_NATIVE "NATIVE" +#define PART_TYPE_SWAP "SWAP " +#define PART_TYPE_RAID "RAID " +#define PART_TYPE_LVM "LVM " + +#ifdef DEBUG_DASD +#define PDEBUG fprintf(stderr, "%s:%d:%s\n", \ + __FILE__, \ + __LINE__, \ + __PRETTY_FUNCTION__); +#else +#define PDEBUG +#endif + +/* + * struct dasd_information_t + * represents any data about the device, which is visible to userspace. + * including foramt and featueres. + */ +typedef struct dasd_information_t { + unsigned int devno; /* S/390 devno */ + unsigned int real_devno; /* for aliases */ + unsigned int schid; /* S/390 subchannel identifier */ + unsigned int cu_type : 16; /* from SenseID */ + unsigned int cu_model : 8; /* from SenseID */ + unsigned int dev_type : 16; /* from SenseID */ + unsigned int dev_model : 8; /* from SenseID */ + unsigned int open_count; + unsigned int req_queue_len; + unsigned int chanq_len; /* length of chanq */ + char type[4]; /* from discipline.name, 'none' for */ + /* unknown */ + unsigned int status; /* current device level */ + unsigned int label_block; /* where to find the VOLSER */ + unsigned int FBA_layout; /* fixed block size (like AIXVOL) */ + unsigned int characteristics_size; + unsigned int confdata_size; + char characteristics[64]; /* from read_device_characteristics */ + char configuration_data[256]; /* from read_configuration_data */ +} dasd_information_t; + +struct dasd_eckd_characteristics { + unsigned short cu_type; + struct { + unsigned char support:2; + unsigned char async:1; + unsigned char reserved:1; + unsigned char cache_info:1; + unsigned char model:3; + } __attribute__ ((packed)) cu_model; + unsigned short dev_type; + unsigned char dev_model; + struct { + unsigned char mult_burst:1; + unsigned char RT_in_LR:1; + unsigned char reserved1:1; + unsigned char RD_IN_LR:1; + unsigned char reserved2:4; + unsigned char reserved3:8; + unsigned char defect_wr:1; + unsigned char XRC_supported:1; + unsigned char reserved4:1; + unsigned char striping:1; + unsigned char reserved5:4; + unsigned char cfw:1; + unsigned char reserved6:2; + unsigned char cache:1; + unsigned char dual_copy:1; + unsigned char dfw:1; + unsigned char reset_alleg:1; + unsigned char sense_down:1; + } __attribute__ ((packed)) facilities; + unsigned char dev_class; + unsigned char unit_type; + unsigned short no_cyl; + unsigned short trk_per_cyl; + unsigned char sec_per_trk; + unsigned char byte_per_track[3]; + unsigned short home_bytes; + unsigned char formula; + union { + struct { + unsigned char f1; + unsigned short f2; + unsigned short f3; + } __attribute__ ((packed)) f_0x01; + struct { + unsigned char f1; + unsigned char f2; + unsigned char f3; + unsigned char f4; + unsigned char f5; + } __attribute__ ((packed)) f_0x02; + } __attribute__ ((packed)) factors; + unsigned short first_alt_trk; + unsigned short no_alt_trk; + unsigned short first_dia_trk; + unsigned short no_dia_trk; + unsigned short first_sup_trk; + unsigned short no_sup_trk; + unsigned char MDR_ID; + unsigned char OBR_ID; + unsigned char director; + unsigned char rd_trk_set; + unsigned short max_rec_zero; + unsigned char reserved1; + unsigned char RWANY_in_LR; + unsigned char factor6; + unsigned char factor7; + unsigned char factor8; + unsigned char reserved2[3]; + unsigned char reserved3[6]; + unsigned int long_no_cyl; +} __attribute__ ((packed)); + +/* + * struct format_data_t + * represents all data necessary to format a dasd + */ +typedef struct format_data_t { + int start_unit; /* from track */ + int stop_unit; /* to track */ + int blksize; /* sectorsize */ + int intensity; +} format_data_t; + +/* + * values to be used for format_data_t.intensity + * 0/8: normal format + * 1/9: also write record zero + * 3/11: also write home address + * 4/12: invalidate track + */ +#define DASD_FMT_INT_FMT_R0 1 /* write record zero */ +#define DASD_FMT_INT_FMT_HA 2 /* write home address, also set FMT_R0 ! */ +#define DASD_FMT_INT_INVAL 4 /* invalidate tracks */ +#define DASD_FMT_INT_COMPAT 8 /* use OS/390 compatible disk layout */ + + +/* Disable the volume (for Linux) */ +#define BIODASDDISABLE _IO(DASD_IOCTL_LETTER,0) +/* Enable the volume (for Linux) */ +#define BIODASDENABLE _IO(DASD_IOCTL_LETTER,1) + +/* retrieve API version number */ +#define DASDAPIVER _IOR(DASD_IOCTL_LETTER,0,int) +/* Get information on a dasd device (enhanced) */ +#define BIODASDINFO _IOR(DASD_IOCTL_LETTER,1,dasd_information_t) + + +/***************************************************************************** + * SECTION: Further IOCTL Definitions (see fs.h) * + *****************************************************************************/ +#define BLKROGET _IO(0x12,94) /* get read-only status (0 = read_write) */ +/* re-read partition table */ +#define BLKRRPART _IO(0x12,95) +/* get block device sector size */ +#define BLKSSZGET _IO(0x12,104) +/* device size in bytes (u64 *arg)*/ +#define BLKGETSIZE64 _IOR(0x12,114,size_t) +/* get device geometry */ +#define HDIO_GETGEO 0x0301 + +/***************************************************************************** + * SECTION: FDASD internal types * + *****************************************************************************/ +#define PARTN_MASK ((1 << DASD_PARTN_BITS) - 1) +#define USABLE_PARTITIONS ((1 << DASD_PARTN_BITS) - 1) + +#define DASD_MIN_API_VERSION 0 + +#define DEFAULT_FDASD_CONF "/etc/fdasd.conf" /* default config file */ + +#define FDASD_VERSION "1.32.0" +#define DEVICE "device" +#define DISC "disc" +#define PART "part" + +#define ALTERNATE_CYLINDERS_USED 0x10 + +typedef struct partition_info { + u_int8_t used; + unsigned long start_trk; + unsigned long end_trk; + unsigned long len_trk; + unsigned long fspace_trk; + format1_label_t *f1; + struct partition_info *next; + struct partition_info *prev; + u_int8_t type; +} partition_info_t; + +typedef struct config_data { + unsigned long start; + unsigned long stop; +} config_data_t; + +typedef struct fdasd_anchor { + int vlabel_changed; + int vtoc_changed; + int auto_partition; + int print_table; + int big_disk; + int silent; + int verbose; + int devno; + int option_reuse; + int option_recreate; + int partno[USABLE_PARTITIONS]; + u_int16_t dev_type; + unsigned int used_partitions; + unsigned long label_pos; + unsigned int blksize; + unsigned long fspace_trk; + format4_label_t *f4; + format5_label_t *f5; + format7_label_t *f7; + format9_label_t *f9; /* template for all f9 labels */ + partition_info_t *first; + partition_info_t *last; + volume_label_t *vlabel; + config_data_t confdata[USABLE_PARTITIONS]; + u_int32_t hw_cylinders; + u_int32_t formatted_cylinders; + struct fdasd_hd_geometry geo; + unsigned int label_block; + unsigned int FBA_layout; + bool is_file; +} fdasd_anchor_t; + +enum offset {lower, upper}; + +enum fdasd_failure { + unable_to_open_disk, + unable_to_seek_disk, + unable_to_read_disk, + read_only_disk, + unable_to_ioctl, + api_version_mismatch, + wrong_disk_type, + wrong_disk_format, + disk_in_use, + config_syntax_error, + vlabel_corrupted, + dsname_corrupted, + malloc_failed, + device_verification_failed, + volser_not_found +}; + +void fdasd_cleanup (fdasd_anchor_t *anchor); +void fdasd_initialize_anchor (fdasd_anchor_t * anc); +int fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int fd); +void fdasd_check_api_version (fdasd_anchor_t *anc, int fd); +int fdasd_check_volume (fdasd_anchor_t *anc, int fd); +int fdasd_write_labels (fdasd_anchor_t *anc, int fd); +void fdasd_recreate_vtoc(fdasd_anchor_t *anc); +partition_info_t * fdasd_add_partition (fdasd_anchor_t *anc, + unsigned int start, unsigned int stop); +int fdasd_prepare_labels (fdasd_anchor_t *anc, int fd) ; +void fdasd_check_volser(char *volser, int devno); +int fdasd_get_volser(fdasd_anchor_t *anc, char *volser, int fd); +void fdasd_change_volser(fdasd_anchor_t *anc, char *str); +void fdasd_reuse_vtoc(fdasd_anchor_t *anc); + +#endif /* FDASD_H */ diff --git a/include/parted/filesys.h b/include/parted/filesys.h new file mode 100755 index 0000000..9fe6b6c --- /dev/null +++ b/include/parted/filesys.h @@ -0,0 +1,116 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2001, 2006-2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/** + * \addtogroup PedFileSystem + * @{ + */ + +/** \file filesys.h */ + +#ifndef PED_FILESYS_H_INCLUDED +#define PED_FILESYS_H_INCLUDED + +typedef struct _PedFileSystem PedFileSystem; +typedef struct _PedFileSystemType PedFileSystemType; +typedef struct _PedFileSystemAlias PedFileSystemAlias; +typedef const struct _PedFileSystemOps PedFileSystemOps; + +#include +#include +#include + +struct _PedFileSystemOps { + PedGeometry* (*probe) (PedGeometry* geom); +}; + +/** + * Structure describing type of file system + */ +struct _PedFileSystemType { + PedFileSystemType* next; + const char* const name; /**< name of the file system type */ + PedFileSystemOps* const ops; +}; + +/** + * Structure describing a file system alias. This is separate from + * PedFileSystemType because probing only looks through the list of types, + * and does not probe aliases separately. + */ +struct _PedFileSystemAlias { + PedFileSystemAlias* next; + PedFileSystemType* fs_type; + const char* alias; + int deprecated; +}; + + +/** + * Structure describing file system + */ +struct _PedFileSystem { + PedFileSystemType* type; /**< the file system type */ + PedGeometry* geom; /**< where the file system actually is */ + int checked; /**< 1 if the file system has been checked. + 0 otherwise. */ + + void* type_specific; + +}; + +extern void ped_file_system_type_register (PedFileSystemType* type); +extern void ped_file_system_type_unregister (PedFileSystemType* type); + +extern void ped_file_system_alias_register (PedFileSystemType* type, + const char* alias, int deprecated); +extern void ped_file_system_alias_unregister (PedFileSystemType* type, + const char* alias); + +extern PedFileSystemType* ped_file_system_type_get (const char* name); +extern PedFileSystemType* +ped_file_system_type_get_next (const PedFileSystemType* fs_type) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern PedFileSystemAlias* +ped_file_system_alias_get_next (const PedFileSystemAlias* fs_alias) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern PedFileSystemType* ped_file_system_probe (PedGeometry* geom); +extern PedGeometry* ped_file_system_probe_specific ( + const PedFileSystemType* fs_type, + PedGeometry* geom); + +PedFileSystem *ped_file_system_open (PedGeometry *geom); +int ped_file_system_close (PedFileSystem *fs); +int ped_file_system_resize (PedFileSystem *fs, PedGeometry *geom, + PedTimer *timer); +PedConstraint *ped_file_system_get_resize_constraint (const PedFileSystem *fs); + +#endif /* PED_FILESYS_H_INCLUDED */ + +/** @} */ diff --git a/include/parted/geom.h b/include/parted/geom.h new file mode 100755 index 0000000..387b779 --- /dev/null +++ b/include/parted/geom.h @@ -0,0 +1,106 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1998-2001, 2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/** + * \addtogroup PedGeometry + * @{ + */ + +/** \file geom.h */ + +#ifndef PED_GEOM_H_INCLUDED +#define PED_GEOM_H_INCLUDED + +typedef struct _PedGeometry PedGeometry; + +/** + * Geometry of the partition + */ +struct _PedGeometry { + PedDevice* dev; + PedSector start; + PedSector length; + PedSector end; +}; + +#include +#include + +extern int ped_geometry_init (PedGeometry* geom, const PedDevice* dev, + PedSector start, PedSector length); +extern PedGeometry* ped_geometry_new (const PedDevice* dev, PedSector start, + PedSector length); +extern PedGeometry* ped_geometry_duplicate (const PedGeometry* geom); +extern PedGeometry* ped_geometry_intersect (const PedGeometry* a, + const PedGeometry* b); +extern void ped_geometry_destroy (PedGeometry* geom); +extern int ped_geometry_set (PedGeometry* geom, PedSector start, + PedSector length); +extern int ped_geometry_set_start (PedGeometry* geom, PedSector start); +extern int ped_geometry_set_end (PedGeometry* geom, PedSector end); +extern int ped_geometry_test_overlap (const PedGeometry* a, + const PedGeometry* b) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern int ped_geometry_test_inside (const PedGeometry* a, + const PedGeometry* b) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern int ped_geometry_test_equal (const PedGeometry* a, const PedGeometry* b) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern int ped_geometry_test_sector_inside (const PedGeometry* geom, + PedSector sect) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern int ped_geometry_read (const PedGeometry* geom, void* buffer, + PedSector offset, PedSector count); +extern int ped_geometry_read_alloc (const PedGeometry* geom, void** buffer, + PedSector offset, PedSector count); +extern int ped_geometry_write (PedGeometry* geom, const void* buffer, + PedSector offset, PedSector count); +extern PedSector ped_geometry_check (PedGeometry* geom, void* buffer, + PedSector buffer_size, PedSector offset, + PedSector granularity, PedSector count, + PedTimer* timer); +extern int ped_geometry_sync (PedGeometry* geom); +extern int ped_geometry_sync_fast (PedGeometry* geom); + +/* returns -1 if "sector" is not within dest's space. */ +extern PedSector ped_geometry_map (const PedGeometry* dst, + const PedGeometry* src, + PedSector sector) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +#endif /* PED_GEOM_H_INCLUDED */ + +/** @} */ diff --git a/include/parted/natmath.h b/include/parted/natmath.h new file mode 100755 index 0000000..e88c821 --- /dev/null +++ b/include/parted/natmath.h @@ -0,0 +1,144 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000, 2007-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +/** + * \addtogroup PedAlignment + * @{ + */ + +/** \file natmath.h */ + +#ifndef PED_NATMATH_H_INCLUDED +#define PED_NATMATH_H_INCLUDED + + +typedef struct _PedAlignment PedAlignment; + +#include +#include +#include + +#define PED_MIN(a, b) ( ((a)<(b)) ? (a) : (b) ) +#define PED_MAX(a, b) ( ((a)>(b)) ? (a) : (b) ) + +/* this is weird (I'm still not sure I should be doing this!) + * + * For the functions: new, destroy, duplicate and merge: the following values + * for align are valid: + * * align == NULL (!) represents no solution + * * align->grain_size == 0 represents a single solution + * (align->offset) + * * align->grain_size > 0 represents a set of solutions + * + * These are invalid: + * * align->offset < 0 Note: this gets "normalized" + * * align->grain_size < 0 + * + * For the align_* operations, there must be a solution. i.e. align != NULL + * All solutions must be greater than zero. + */ + +struct _PedAlignment { + PedSector offset; + PedSector grain_size; +}; + +extern PedSector ped_round_up_to (PedSector sector, PedSector grain_size) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__const__)) +#endif +; +extern PedSector ped_round_down_to (PedSector sector, PedSector grain_size) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__const__)) +#endif +; +extern PedSector ped_round_to_nearest (PedSector sector, PedSector grain_size) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__const__)) +#endif +; +extern PedSector ped_greatest_common_divisor (PedSector a, PedSector b) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern int ped_alignment_init (PedAlignment* align, PedSector offset, + PedSector grain_size); +extern PedAlignment* ped_alignment_new (PedSector offset, PedSector grain_size); +extern void ped_alignment_destroy (PedAlignment* align); +extern PedAlignment* ped_alignment_duplicate (const PedAlignment* align); +extern PedAlignment* ped_alignment_intersect (const PedAlignment* a, + const PedAlignment* b); + +extern PedSector +ped_alignment_align_up (const PedAlignment* align, const PedGeometry* geom, + PedSector sector) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern PedSector +ped_alignment_align_down (const PedAlignment* align, const PedGeometry* geom, + PedSector sector) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; +extern PedSector +ped_alignment_align_nearest (const PedAlignment* align, const PedGeometry* geom, + PedSector sector) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern int +ped_alignment_is_aligned (const PedAlignment* align, const PedGeometry* geom, + PedSector sector) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern const PedAlignment* ped_alignment_any; +extern const PedAlignment* ped_alignment_none; + +static inline PedSector +ped_div_round_up (PedSector numerator, PedSector divisor) +{ + return (numerator + divisor - 1) / divisor; +} + + +static inline PedSector +ped_div_round_to_nearest (PedSector numerator, PedSector divisor) +{ + return (numerator + divisor/2) / divisor; +} + +#endif /* PED_NATMATH_H_INCLUDED */ + +/** + * @} + */ diff --git a/include/parted/parted.h b/include/parted/parted.h new file mode 100755 index 0000000..e53655c --- /dev/null +++ b/include/parted/parted.h @@ -0,0 +1,61 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef PARTED_H_INCLUDED +#define PARTED_H_INCLUDED + +#define PED_DEFAULT_ALIGNMENT (1024 * 1024) + +#ifdef __cplusplus +extern "C" { +#endif + +#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define __attribute(arg) __attribute__ (arg) +#else +# define __attribute(arg) +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +extern const char *ped_get_version () +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__const__)) +#endif +; + +extern void* __attribute__ ((malloc)) ped_malloc (size_t size); +extern void* __attribute__ ((malloc)) ped_calloc (size_t size); +extern void free (void* ptr); + +#ifdef __cplusplus +} +#endif + +#endif /* PARTED_H_INCLUDED */ diff --git a/include/parted/timer.h b/include/parted/timer.h new file mode 100755 index 0000000..f3aef74 --- /dev/null +++ b/include/parted/timer.h @@ -0,0 +1,66 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2001-2002, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/** + * \addtogroup PedTimer + * @{ + */ + +/** \file timer.h */ + +#ifndef PED_TIMER_H_INCLUDED +#define PED_TIMER_H_INCLUDED + +#include + +typedef struct _PedTimer PedTimer; + +typedef void PedTimerHandler (PedTimer* timer, void* context); + +/* + * Structure keeping track of progress and time + */ +struct _PedTimer { + float frac; /**< fraction of operation done */ + time_t start; /**< time of start of op */ + time_t now; /**< time of last update (now!) */ + time_t predicted_end; /**< expected finish time */ + const char* state_name; /**< eg: "copying data" */ + PedTimerHandler* handler; /**< who to notify on updates */ + void* context; /**< context to pass to handler */ +}; + +extern PedTimer* ped_timer_new (PedTimerHandler* handler, void* context); +extern void ped_timer_destroy (PedTimer* timer); + +/* a nested timer automatically notifies it's parent. You should only + * create one when you are going to use it (not before) + */ +extern PedTimer* ped_timer_new_nested (PedTimer* parent, float nest_frac); +extern void ped_timer_destroy_nested (PedTimer* timer); + +extern void ped_timer_touch (PedTimer* timer); +extern void ped_timer_reset (PedTimer* timer); +extern void ped_timer_update (PedTimer* timer, float new_frac); +extern void ped_timer_set_state_name (PedTimer* timer, const char* state_name); + +#endif /* PED_TIMER_H_INCLUDED */ + + +/** @} */ diff --git a/include/parted/unit.h b/include/parted/unit.h new file mode 100755 index 0000000..bb8459b --- /dev/null +++ b/include/parted/unit.h @@ -0,0 +1,101 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2005, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +/** + * \addtogroup PedUnit + * @{ + */ + +/** \file unit.h */ + +#ifndef PED_UNIT_H_INCLUDED +#define PED_UNIT_H_INCLUDED + +#include + +#include +#include + +#define PED_SECTOR_SIZE_DEFAULT 512LL +#define PED_KILOBYTE_SIZE 1000LL +#define PED_MEGABYTE_SIZE 1000000LL +#define PED_GIGABYTE_SIZE 1000000000LL +#define PED_TERABYTE_SIZE 1000000000000LL +#define PED_KIBIBYTE_SIZE 1024LL +#define PED_MEBIBYTE_SIZE 1048576LL +#define PED_GIBIBYTE_SIZE 1073741824LL +#define PED_TEBIBYTE_SIZE 1099511627776LL + +/** + * Human-friendly unit for representation of a location within device + */ +typedef enum { + PED_UNIT_SECTOR, + PED_UNIT_BYTE, + PED_UNIT_KILOBYTE, + PED_UNIT_MEGABYTE, + PED_UNIT_GIGABYTE, + PED_UNIT_TERABYTE, + PED_UNIT_COMPACT, + PED_UNIT_CYLINDER, + PED_UNIT_CHS, + PED_UNIT_PERCENT, + PED_UNIT_KIBIBYTE, + PED_UNIT_MEBIBYTE, + PED_UNIT_GIBIBYTE, + PED_UNIT_TEBIBYTE +} PedUnit; + +#define PED_UNIT_FIRST PED_UNIT_SECTOR +#define PED_UNIT_LAST PED_UNIT_TEBIBYTE + +extern long long ped_unit_get_size (const PedDevice* dev, PedUnit unit); +extern const char *ped_unit_get_name (PedUnit unit) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__const__)) +#endif +; +extern PedUnit ped_unit_get_by_name (const char* unit_name) +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) + __attribute ((__pure__)) +#endif +; + +extern void ped_unit_set_default (PedUnit unit); +extern PedUnit ped_unit_get_default (); + +extern char* ped_unit_format_byte (const PedDevice* dev, PedSector byte); +extern char* ped_unit_format_custom_byte (const PedDevice* dev, PedSector byte, + PedUnit unit); + +extern char* ped_unit_format (const PedDevice* dev, PedSector sector); +extern char* ped_unit_format_custom (const PedDevice* dev, PedSector sector, + PedUnit unit); + +extern int ped_unit_parse (const char* str, const PedDevice* dev, + PedSector* sector, + PedGeometry** range); +extern int ped_unit_parse_custom (const char* str, const PedDevice* dev, + PedUnit unit, PedSector* sector, + PedGeometry** range); + +#endif /* PED_UNIT_H_INCLUDED */ + +/** @} */ diff --git a/include/parted/vtoc.h b/include/parted/vtoc.h new file mode 100755 index 0000000..c2756f9 --- /dev/null +++ b/include/parted/vtoc.h @@ -0,0 +1,387 @@ +/* + * File...........: s390-tools/dasdview/vtoc.h + * Author(s)......: Horst Hummel + * Bugreports.to..: + * + * This is a user-space copy of the kernel vtoc,h. + * + * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2002 + * + * History of changes (starts March 2002) + * 2002-03-12 initial + */ + +#ifndef VTOC_H +#define VTOC_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define LINE_LENGTH 80 +#define VTOC_START_CC 0x0 +#define VTOC_START_HH 0x1 +#define FIRST_USABLE_CYL 1 +#define FIRST_USABLE_TRK 2 + +#define DASD_3380_TYPE 13148 +#define DASD_3390_TYPE 13200 +#define DASD_9345_TYPE 37701 + +#define DASD_3380_VALUE 0xbb60 +#define DASD_3390_VALUE 0xe5a2 +#define DASD_9345_VALUE 0xbc98 + +#define VOLSER_LENGTH 6 +#define BIG_DISK_SIZE 0x10000 +#define LV_COMPAT_CYL 0xFFFE + +/***************************************************************************** + * SECTION: Definition from hdreq.h * + *****************************************************************************/ + +struct fdasd_hd_geometry { + unsigned char heads; + unsigned char sectors; + unsigned short cylinders; + unsigned long start; +}; + + +typedef struct ttr ttr_t; +typedef struct cchhb cchhb_t; +typedef struct cchh cchh_t; +typedef struct labeldate labeldate_t; +typedef struct volume_label volume_label_t; +typedef struct cms_volume_label cms_volume_label_t; +typedef struct extent extent_t; +typedef struct dev_const dev_const_t; +typedef struct format1_label format1_label_t; +typedef struct format4_label format4_label_t; +typedef struct ds5ext ds5ext_t; +typedef struct format5_label format5_label_t; +typedef struct ds7ext ds7ext_t; +typedef struct format7_label format7_label_t; +typedef struct format9_label format9_label_t; + +struct __attribute__ ((packed)) ttr { + u_int16_t tt; + u_int8_t r; +}; + +struct __attribute__ ((packed)) cchhb { + u_int16_t cc; + u_int16_t hh; + u_int8_t b; +}; + +struct __attribute__ ((packed)) cchh { + u_int16_t cc; + u_int16_t hh; +}; + +struct __attribute__ ((packed)) labeldate { + u_int8_t year; + u_int16_t day; +}; + +/* + * The following structure is a merger of the cdl and ldl volume label. + * On an ldl disk there is no key information, so when reading an + * ldl label from disk, the data should be copied at the address of vollbl. + * On the other side, the field ldl_version is reserved in a cdl record + * and the field formatted_blocks exists only for ldl labels. So when + * reading a cdl label from disk, the formatted_blocks field will contain + * arbitrary data. + * This layout may be a bit awkward, but the advantage of having the + * same label type for both disk layout types is bigger than the effort + * for taking a bit of extra care at the fringes. + */ + +struct __attribute__ ((packed)) volume_label { + char volkey[4]; /* volume key = volume label */ + char vollbl[4]; /* volume label ("VOL1" in EBCDIC) */ + char volid[6]; /* volume identifier */ + u_int8_t security; /* security byte */ + cchhb_t vtoc; /* VTOC address */ + char res1[5]; /* reserved */ + char cisize[4]; /* CI-size for FBA,... */ + /* ...blanks for CKD */ + char blkperci[4]; /* no of blocks per CI (FBA), blanks for CKD */ + char labperci[4]; /* no of labels per CI (FBA), blanks for CKD */ + char res2[4]; /* reserved */ + char lvtoc[14]; /* owner code for LVTOC */ + char res3[28]; /* reserved */ + char ldl_version; /* version number, valid for ldl format */ + u_int64_t formatted_blocks; /* valid when ldl_version >= "2" (in + EBCDIC) */ +}; + +/* + * See: + * z/VM V5R2.0 CMS Planning and Administration + * SC24-6078-01 + * What CMS Does / Disk and File Management / Disk File Format + * http://publib.boulder.ibm.com/infocenter/zvm/v5r4/topic/com.ibm.zvm.v54.dmsd1/hcsg2b1018.htm + */ +struct __attribute__ ((packed)) cms_volume_label { + char label_id[4]; /* Label identifier ("CMS1" in EBCDIC) */ + char vol_id[6]; /* Volume identifier */ + char version_id[2]; /* Version identifier ("\0\0") */ + u_int32_t block_size; /* Disk block size (512, 1024, 2048 or 4096) */ + u_int32_t origin_ptr; /* Disk origin pointer (4 or 5) */ + u_int32_t usable_count; /* Number of usable cylinders/blocks */ + u_int32_t formatted_count; /* Max # of formatted cylinders/blocks */ + u_int32_t block_count; /* Disk size in CMS blocks */ + u_int32_t used_count; /* Number of CMS blocks in use */ + u_int32_t fst_size; /* File Status Table (FST) size (64) */ + u_int32_t fst_count; /* Number of FSTs per CMS block */ + char format_date[6]; /* Disk FORMAT date (YYMMDDhhmmss) */ + char reserved1[2]; /* Reserved fields. + The low-order bit of the first byte is a + century flag. 0 = 1900s, 1 = 2000s. + It is used in conjunction with + "format_date" to determine the + four-digit year. */ + u_int32_t disk_offset; /* Offset in blocks to the start of the + reserved file when the disk is reserved. + This is the number of blocks to skip + before the partition starts. */ + u_int32_t map_block; /* Allocation map block with next hole */ + u_int32_t hblk_disp; /* Displacement in HBLK data of next hole */ + u_int32_t user_disp; /* Disp into user part of allocation map */ + u_int32_t open_files; /* Count of SFS open files for this ADT. + open_files is not really part of the + volume label. It is not used for + minidisks. */ + char segment_name[8]; /* Name of the shared segment. + segment_name is not really part of the + volume label. It is not stored on disk. */ +}; + +struct __attribute__ ((packed)) extent { + u_int8_t typeind; /* extent type indicator */ + u_int8_t seqno; /* extent sequence number */ + cchh_t llimit; /* starting point of this extent */ + cchh_t ulimit; /* ending point of this extent */ +}; + +struct __attribute__ ((packed)) dev_const { + u_int16_t DS4DSCYL; /* number of logical cyls */ + u_int16_t DS4DSTRK; /* number of tracks in a logical cylinder */ + u_int16_t DS4DEVTK; /* device track length */ + u_int8_t DS4DEVI; /* non-last keyed record overhead */ + u_int8_t DS4DEVL; /* last keyed record overhead */ + u_int8_t DS4DEVK; /* non-keyed record overhead differential */ + u_int8_t DS4DEVFG; /* flag byte */ + u_int16_t DS4DEVTL; /* device tolerance */ + u_int8_t DS4DEVDT; /* number of DSCB's per track */ + u_int8_t DS4DEVDB; /* number of directory blocks per track */ +}; + +/* + * format 1 and format 8 label have the same layout so we use the following + * structure for both. + */ +struct __attribute__ ((packed)) format1_label { + char DS1DSNAM[44]; /* data set name */ + u_int8_t DS1FMTID; /* format identifier */ + char DS1DSSN[6]; /* data set serial number */ + u_int16_t DS1VOLSQ; /* volume sequence number */ + labeldate_t DS1CREDT; /* creation date: ydd */ + labeldate_t DS1EXPDT; /* expiration date */ + u_int8_t DS1NOEPV; /* number of extents on volume */ + u_int8_t DS1NOBDB; /* no. of bytes used in last direction blk */ + u_int8_t DS1FLAG1; /* flag 1 */ + char DS1SYSCD[13]; /* system code */ + labeldate_t DS1REFD; /* date last referenced */ + u_int8_t DS1SMSFG; /* system managed storage indicators */ + u_int8_t DS1SCXTF; /* sec. space extension flag byte */ + u_int16_t DS1SCXTV; /* secondary space extension value */ + u_int8_t DS1DSRG1; /* data set organisation byte 1 */ + u_int8_t DS1DSRG2; /* data set organisation byte 2 */ + u_int8_t DS1RECFM; /* record format */ + u_int8_t DS1OPTCD; /* option code */ + u_int16_t DS1BLKL; /* block length */ + u_int16_t DS1LRECL; /* record length */ + u_int8_t DS1KEYL; /* key length */ + u_int16_t DS1RKP; /* relative key position */ + u_int8_t DS1DSIND; /* data set indicators */ + u_int8_t DS1SCAL1; /* secondary allocation flag byte */ + char DS1SCAL3[3]; /* secondary allocation quantity */ + ttr_t DS1LSTAR; /* last used track and block on track */ + u_int16_t DS1TRBAL; /* space remaining on last used track */ + u_int16_t res1; /* reserved */ + extent_t DS1EXT1; /* first extent description */ + extent_t DS1EXT2; /* second extent description */ + extent_t DS1EXT3; /* third extent description */ + cchhb_t DS1PTRDS; /* possible pointer to f2 or f3 DSCB */ +}; + +struct __attribute__ ((packed)) format4_label { + char DS4KEYCD[44]; /* key code for VTOC labels: 44 times 0x04 */ + u_int8_t DS4IDFMT; /* format identifier */ + cchhb_t DS4HPCHR; /* highest address of a format 1 DSCB */ + u_int16_t DS4DSREC; /* number of available DSCB's */ + cchh_t DS4HCCHH; /* CCHH of next available alternate track */ + u_int16_t DS4NOATK; /* number of remaining alternate tracks */ + u_int8_t DS4VTOCI; /* VTOC indicators */ + u_int8_t DS4NOEXT; /* number of extents in VTOC */ + u_int8_t DS4SMSFG; /* system managed storage indicators */ + u_int8_t DS4DEVAC; /* number of alternate cylinders. + Subtract from first two bytes of + DS4DEVSZ to get number of usable + cylinders. can be zero. valid + only if DS4DEVAV on. */ + dev_const_t DS4DEVCT; /* device constants */ + char DS4AMTIM[8]; /* VSAM timestamp */ + char DS4AMCAT[3]; /* VSAM catalog indicator */ + char DS4R2TIM[8]; /* VSAM volume/catalog match timestamp */ + char res1[5]; /* reserved */ + char DS4F6PTR[5]; /* pointer to first format 6 DSCB */ + extent_t DS4VTOCE; /* VTOC extent description */ + char res2[10]; /* reserved */ + u_int8_t DS4EFLVL; /* extended free-space management level */ + cchhb_t DS4EFPTR; /* pointer to extended free-space info */ + char res3; /* reserved */ + u_int32_t DS4DCYL; /* number of logical cyls */ + char res4[2]; /* reserved */ + u_int8_t DS4DEVF2; /* device flags */ + char res5; /* reserved */ +}; + +struct __attribute__ ((packed)) ds5ext { + u_int16_t t; /* RTA of the first track of free extent */ + u_int16_t fc; /* number of whole cylinders in free ext. */ + u_int8_t ft; /* number of remaining free tracks */ +}; + +struct __attribute__ ((packed)) format5_label { + char DS5KEYID[4]; /* key identifier */ + ds5ext_t DS5AVEXT; /* first available (free-space) extent. */ + ds5ext_t DS5EXTAV[7]; /* seven available extents */ + u_int8_t DS5FMTID; /* format identifier */ + ds5ext_t DS5MAVET[18]; /* eighteen available extents */ + cchhb_t DS5PTRDS; /* pointer to next format5 DSCB */ +}; + +struct __attribute__ ((packed)) ds7ext { + u_int32_t a; /* starting RTA value */ + u_int32_t b; /* ending RTA value + 1 */ +}; + +struct __attribute__ ((packed)) format7_label { + char DS7KEYID[4]; /* key identifier */ + ds7ext_t DS7EXTNT[5]; /* space for 5 extent descriptions */ + u_int8_t DS7FMTID; /* format identifier */ + ds7ext_t DS7ADEXT[11]; /* space for 11 extent descriptions */ + char res1[2]; /* reserved */ + cchhb_t DS7PTRDS; /* pointer to next FMT7 DSCB */ +}; + +struct __attribute__ ((packed)) format9_label { + u_int8_t DS9KEYID; /* key code for format 9 labels (0x09) */ + u_int8_t DS9SUBTY; /* subtype (0x01) */ + u_int8_t DS9NUMF9; /* number of F9 datasets */ + u_int8_t res1[41]; /* reserved */ + u_int8_t DS9FMTID; /* format identifier */ + u_int8_t res2[95]; /* reserved */ +}; + +char *vtoc_ebcdic_enc (char const *source, char *target, int l); +char *vtoc_ebcdic_dec (char const *source, char *target, int l); +void vtoc_set_extent (extent_t *ext, u_int8_t typeind, u_int8_t seqno, + cchh_t *lower, cchh_t *upper); +void vtoc_set_cchh (cchh_t *addr, u_int32_t cc, u_int16_t hh); +u_int32_t vtoc_get_cyl_from_cchh(cchh_t *addr); +u_int16_t vtoc_get_head_from_cchh(cchh_t *addr); +void vtoc_set_cchhb (cchhb_t *addr, u_int32_t cc, u_int16_t hh, u_int8_t b); +u_int32_t vtoc_get_cyl_from_cchhb(cchhb_t *addr); +u_int16_t vtoc_get_head_from_cchhb(cchhb_t *addr); +u_int64_t cchhb2blk(cchhb_t *p, struct fdasd_hd_geometry *geo); +u_int64_t cchh2blk (cchh_t *p, struct fdasd_hd_geometry *geo); +u_int32_t cchh2trk (cchh_t *p, struct fdasd_hd_geometry *geo); +void vtoc_set_date (labeldate_t *d, u_int8_t year, u_int16_t day); + +void vtoc_volume_label_init (volume_label_t *vlabel); + +int vtoc_read_volume_label (int fd, unsigned long vlabel_start, + volume_label_t *vlabel); + +int vtoc_write_volume_label (int fd, unsigned long vlabel_start, + volume_label_t const *vlabel); + +void vtoc_volume_label_set_volser (volume_label_t *vlabel, char const *volser); + +char *vtoc_volume_label_get_volser (volume_label_t *vlabel, char *volser); + +void vtoc_volume_label_set_key (volume_label_t *vlabel, char const *key); + +void vtoc_volume_label_set_label (volume_label_t *vlabel, char const *lbl); + +char *vtoc_volume_label_get_label (volume_label_t *vlabel, char *lbl); + +void vtoc_read_label (int fd, unsigned long position, format1_label_t *f1, + format4_label_t *f4, format5_label_t *f5, + format7_label_t *f7); + +void vtoc_write_label (int fd, unsigned long position, + format1_label_t const *f1, + format4_label_t const *f4, + format5_label_t const *f5, + format7_label_t const *f7, + format9_label_t const *f9); + +void vtoc_init_format1_label (unsigned int blksize, + extent_t *part_extent, format1_label_t *f1); + +void vtoc_init_format4_label (format4_label_t *f4lbl, + unsigned int compat_cylinders, + unsigned int real_cylinders, + unsigned int tracks, + unsigned int blocks, + unsigned int blksize, + u_int16_t dev_type); + +void vtoc_update_format4_label (format4_label_t *f4, cchhb_t *highest_f1, + u_int16_t unused_update); + +void vtoc_init_format5_label (format5_label_t *f5); + +void vtoc_update_format5_label_add (format5_label_t *f5, int verbose, + int trk, u_int16_t a, u_int16_t b, + u_int8_t c); + +void vtoc_update_format5_label_del (format5_label_t *f5, int verbose, + int trk, u_int16_t a, u_int16_t b, + u_int8_t c); + +void vtoc_init_format7_label (format7_label_t *f7); + +void vtoc_update_format7_label_add (format7_label_t *f7, int verbose, + u_int32_t a, u_int32_t b); + +void vtoc_update_format7_label_del (format7_label_t *f7, int verbose, + u_int32_t a, u_int32_t b); + +void vtoc_init_format8_label (unsigned int blksize, + extent_t *part_extent, format1_label_t *f1); + +void vtoc_update_format8_label (cchhb_t *associated_f9, format1_label_t *f8); + +void vtoc_init_format9_label (format9_label_t *f9); + +void vtoc_set_freespace(format4_label_t *f4, format5_label_t *f5, + format7_label_t *f7, char ch, int verbose, + u_int32_t start, u_int32_t stop, u_int32_t cyl, + u_int32_t trk); + +#endif /* VTOC_H */ diff --git a/jni/Android.mk b/jni/Android.mk index 1397b4a..8ae4206 100755 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -6,7 +6,7 @@ # 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 +# 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, @@ -15,7 +15,7 @@ # limitations under the License. ######## -# 2.9.6 +# 3.0.2 ######## LOCAL_PATH := $(call my-dir) @@ -23,31 +23,41 @@ LOCAL_PATH := $(call my-dir) include $(LOCAL_PATH)/../build/config/env.mk PMT_CXXFLAGS = \ - -O3 \ - -Wall \ - -Wextra \ - -Wno-vla-cxx-extension \ - -Wno-nullability-completeness \ - -Wno-writable-strings \ - -Wno-nullability-extension \ - -Wno-reorder-init-list \ - -Wno-gnu-zero-variadic-macro-arguments \ - -static \ - $(PMT_EXTRA_CXXFLAGS) + -O3 \ + -Wall \ + -Wextra \ + -Wno-vla-cxx-extension \ + -Wno-nullability-completeness \ + -Wno-writable-strings \ + -Wno-nullability-extension \ + -Wno-reorder-init-list \ + -Wno-gnu-zero-variadic-macro-arguments \ + -static \ + $(PMT_EXTRA_CXXFLAGS) E2FSPROGS_DEFAULT_CFLAGS = \ - -Werror \ - -Wno-pointer-arith \ - -Wno-sign-compare \ - -Wno-type-limits \ - -Wno-typedef-redefinition \ - -Wno-unused-parameter \ - -Wno-unused-command-line-argument + -Werror \ + -Wno-pointer-arith \ + -Wno-sign-compare \ + -Wno-type-limits \ + -Wno-typedef-redefinition \ + -Wno-unused-parameter \ + -Wno-unused-command-line-argument +PARTED_DEFAULTS_CFLAGS = \ + -Wno-pointer-sign \ + -Wno-sign-compare \ + -Wno-gnu-designator \ + -Wno-unused-variable \ + -Wno-unused-parameter \ + -Wno-unused-command-line-argument \ + -Wno-missing-field-initializers \ + -Wno-single-bit-bitfield-constant-conversion ifneq ($(PMT_ENABLE_DEBUG),) - PMT_CXXFLAGS += -gdwarf-5 -fsanitize=address + PMT_CXXFLAGS += -gdwarf-5 -fsanitize=address endif PMT := PartitionManager +PARTED := parted MKE2FS := e2fsprogs/mke2fs LIB := e2fsprogs/lib LIBEXT2FS := $(LIB)/ext2fs @@ -57,111 +67,116 @@ LIBEXT2_QUOTA := $(LIB)/support LIBEXT2_MISC := $(LIB)/misc LIBEXT2_COM_ERR := $(LIB)/et LIBEXT2_BLKID := $(LIB)/blkid +LIBGNULIB := $(PARTED)/libgnulib +LIBCHARSET := $(PARTED)/libcharset +LIBICRT := $(PARTED)/libiconv/icrt +LIBICONV := $(PARTED)/libiconv +LIBPARTED := $(PARTED)/libparted INC_DIR := $(LOCAL_PATH)/../include/e2fsprogs E2FSPROGS_INCLUDES := \ - $(INC_DIR)/misc \ - $(INC_DIR)/blkid \ - $(INC_DIR)/e2p \ - $(INC_DIR)/et \ - $(INC_DIR)/ext2fs \ - $(INC_DIR)/ss \ - $(INC_DIR)/support \ - $(INC_DIR)/uuid \ - $(INC_DIR)/e2fsck \ - $(INC_DIR) + $(INC_DIR)/misc \ + $(INC_DIR)/blkid \ + $(INC_DIR)/e2p \ + $(INC_DIR)/et \ + $(INC_DIR)/ext2fs \ + $(INC_DIR)/ss \ + $(INC_DIR)/support \ + $(INC_DIR)/uuid \ + $(INC_DIR)/e2fsck \ + $(INC_DIR) include $(CLEAR_VARS) LOCAL_MODULE := libext2fs LOCAL_SRC_FILES := \ - $(LIBEXT2FS)/ext2_err.c \ - $(LIBEXT2FS)/alloc.c \ - $(LIBEXT2FS)/alloc_sb.c \ - $(LIBEXT2FS)/alloc_stats.c \ - $(LIBEXT2FS)/alloc_tables.c \ - $(LIBEXT2FS)/atexit.c \ - $(LIBEXT2FS)/badblocks.c \ - $(LIBEXT2FS)/bb_inode.c \ - $(LIBEXT2FS)/bitmaps.c \ - $(LIBEXT2FS)/bitops.c \ - $(LIBEXT2FS)/blkmap64_ba.c \ - $(LIBEXT2FS)/blkmap64_rb.c \ - $(LIBEXT2FS)/blknum.c \ - $(LIBEXT2FS)/block.c \ - $(LIBEXT2FS)/bmap.c \ - $(LIBEXT2FS)/check_desc.c \ - $(LIBEXT2FS)/crc16.c \ - $(LIBEXT2FS)/crc32c.c \ - $(LIBEXT2FS)/csum.c \ - $(LIBEXT2FS)/closefs.c \ - $(LIBEXT2FS)/dblist.c \ - $(LIBEXT2FS)/dblist_dir.c \ - $(LIBEXT2FS)/digest_encode.c \ - $(LIBEXT2FS)/dirblock.c \ - $(LIBEXT2FS)/dirhash.c \ - $(LIBEXT2FS)/dir_iterate.c \ - $(LIBEXT2FS)/dupfs.c \ - $(LIBEXT2FS)/expanddir.c \ - $(LIBEXT2FS)/ext_attr.c \ - $(LIBEXT2FS)/extent.c \ - $(LIBEXT2FS)/fallocate.c \ - $(LIBEXT2FS)/fileio.c \ - $(LIBEXT2FS)/finddev.c \ - $(LIBEXT2FS)/flushb.c \ - $(LIBEXT2FS)/freefs.c \ - $(LIBEXT2FS)/gen_bitmap.c \ - $(LIBEXT2FS)/gen_bitmap64.c \ - $(LIBEXT2FS)/get_num_dirs.c \ - $(LIBEXT2FS)/get_pathname.c \ - $(LIBEXT2FS)/getsize.c \ - $(LIBEXT2FS)/getsectsize.c \ - $(LIBEXT2FS)/hashmap.c \ - $(LIBEXT2FS)/i_block.c \ - $(LIBEXT2FS)/icount.c \ - $(LIBEXT2FS)/imager.c \ - $(LIBEXT2FS)/ind_block.c \ - $(LIBEXT2FS)/initialize.c \ - $(LIBEXT2FS)/inline.c \ - $(LIBEXT2FS)/inline_data.c \ - $(LIBEXT2FS)/inode.c \ - $(LIBEXT2FS)/io_manager.c \ - $(LIBEXT2FS)/ismounted.c \ - $(LIBEXT2FS)/link.c \ - $(LIBEXT2FS)/llseek.c \ - $(LIBEXT2FS)/lookup.c \ - $(LIBEXT2FS)/mmp.c \ - $(LIBEXT2FS)/mkdir.c \ - $(LIBEXT2FS)/mkjournal.c \ - $(LIBEXT2FS)/namei.c \ - $(LIBEXT2FS)/native.c \ - $(LIBEXT2FS)/newdir.c \ - $(LIBEXT2FS)/nls_utf8.c \ - $(LIBEXT2FS)/openfs.c \ - $(LIBEXT2FS)/progress.c \ - $(LIBEXT2FS)/punch.c \ - $(LIBEXT2FS)/qcow2.c \ - $(LIBEXT2FS)/rbtree.c \ - $(LIBEXT2FS)/read_bb.c \ - $(LIBEXT2FS)/read_bb_file.c \ - $(LIBEXT2FS)/res_gdt.c \ - $(LIBEXT2FS)/rw_bitmaps.c \ - $(LIBEXT2FS)/sha256.c \ - $(LIBEXT2FS)/sha512.c \ - $(LIBEXT2FS)/swapfs.c \ - $(LIBEXT2FS)/symlink.c \ - $(LIBEXT2FS)/undo_io.c \ - $(LIBEXT2FS)/unix_io.c \ - $(LIBEXT2FS)/sparse_io.c \ - $(LIBEXT2FS)/unlink.c \ - $(LIBEXT2FS)/valid_blk.c \ - $(LIBEXT2FS)/version.c \ - $(LIBEXT2FS)/test_io.c + $(LIBEXT2FS)/ext2_err.c \ + $(LIBEXT2FS)/alloc.c \ + $(LIBEXT2FS)/alloc_sb.c \ + $(LIBEXT2FS)/alloc_stats.c \ + $(LIBEXT2FS)/alloc_tables.c \ + $(LIBEXT2FS)/atexit.c \ + $(LIBEXT2FS)/badblocks.c \ + $(LIBEXT2FS)/bb_inode.c \ + $(LIBEXT2FS)/bitmaps.c \ + $(LIBEXT2FS)/bitops.c \ + $(LIBEXT2FS)/blkmap64_ba.c \ + $(LIBEXT2FS)/blkmap64_rb.c \ + $(LIBEXT2FS)/blknum.c \ + $(LIBEXT2FS)/block.c \ + $(LIBEXT2FS)/bmap.c \ + $(LIBEXT2FS)/check_desc.c \ + $(LIBEXT2FS)/crc16.c \ + $(LIBEXT2FS)/crc32c.c \ + $(LIBEXT2FS)/csum.c \ + $(LIBEXT2FS)/closefs.c \ + $(LIBEXT2FS)/dblist.c \ + $(LIBEXT2FS)/dblist_dir.c \ + $(LIBEXT2FS)/digest_encode.c \ + $(LIBEXT2FS)/dirblock.c \ + $(LIBEXT2FS)/dirhash.c \ + $(LIBEXT2FS)/dir_iterate.c \ + $(LIBEXT2FS)/dupfs.c \ + $(LIBEXT2FS)/expanddir.c \ + $(LIBEXT2FS)/ext_attr.c \ + $(LIBEXT2FS)/extent.c \ + $(LIBEXT2FS)/fallocate.c \ + $(LIBEXT2FS)/fileio.c \ + $(LIBEXT2FS)/finddev.c \ + $(LIBEXT2FS)/flushb.c \ + $(LIBEXT2FS)/freefs.c \ + $(LIBEXT2FS)/gen_bitmap.c \ + $(LIBEXT2FS)/gen_bitmap64.c \ + $(LIBEXT2FS)/get_num_dirs.c \ + $(LIBEXT2FS)/get_pathname.c \ + $(LIBEXT2FS)/getsize.c \ + $(LIBEXT2FS)/getsectsize.c \ + $(LIBEXT2FS)/hashmap.c \ + $(LIBEXT2FS)/i_block.c \ + $(LIBEXT2FS)/icount.c \ + $(LIBEXT2FS)/imager.c \ + $(LIBEXT2FS)/ind_block.c \ + $(LIBEXT2FS)/initialize.c \ + $(LIBEXT2FS)/inline.c \ + $(LIBEXT2FS)/inline_data.c \ + $(LIBEXT2FS)/inode.c \ + $(LIBEXT2FS)/io_manager.c \ + $(LIBEXT2FS)/ismounted.c \ + $(LIBEXT2FS)/link.c \ + $(LIBEXT2FS)/llseek.c \ + $(LIBEXT2FS)/lookup.c \ + $(LIBEXT2FS)/mmp.c \ + $(LIBEXT2FS)/mkdir.c \ + $(LIBEXT2FS)/mkjournal.c \ + $(LIBEXT2FS)/namei.c \ + $(LIBEXT2FS)/native.c \ + $(LIBEXT2FS)/newdir.c \ + $(LIBEXT2FS)/nls_utf8.c \ + $(LIBEXT2FS)/openfs.c \ + $(LIBEXT2FS)/progress.c \ + $(LIBEXT2FS)/punch.c \ + $(LIBEXT2FS)/qcow2.c \ + $(LIBEXT2FS)/rbtree.c \ + $(LIBEXT2FS)/read_bb.c \ + $(LIBEXT2FS)/read_bb_file.c \ + $(LIBEXT2FS)/res_gdt.c \ + $(LIBEXT2FS)/rw_bitmaps.c \ + $(LIBEXT2FS)/sha256.c \ + $(LIBEXT2FS)/sha512.c \ + $(LIBEXT2FS)/swapfs.c \ + $(LIBEXT2FS)/symlink.c \ + $(LIBEXT2FS)/undo_io.c \ + $(LIBEXT2FS)/unix_io.c \ + $(LIBEXT2FS)/sparse_io.c \ + $(LIBEXT2FS)/unlink.c \ + $(LIBEXT2FS)/valid_blk.c \ + $(LIBEXT2FS)/version.c \ + $(LIBEXT2FS)/test_io.c LOCAL_C_INCLUDES := $(E2FSPROGS_INCLUDES) LOCAL_CFLAGS := \ - $(E2FSPROGS_DEFAULT_CFLAGS) \ - -Wno-unused-but-set-variable \ - -fPIC \ - -pthread + $(E2FSPROGS_DEFAULT_CFLAGS) \ + -Wno-unused-but-set-variable \ + -fPIC \ + -pthread include $(BUILD_STATIC_LIBRARY) @@ -169,27 +184,27 @@ include $(CLEAR_VARS) LOCAL_MODULE := libext2_blkid LOCAL_SRC_FILES := \ - $(LIBEXT2_BLKID)/cache.c \ - $(LIBEXT2_BLKID)/dev.c \ - $(LIBEXT2_BLKID)/devname.c \ - $(LIBEXT2_BLKID)/devno.c \ - $(LIBEXT2_BLKID)/getsize.c \ - $(LIBEXT2_BLKID)/llseek.c \ - $(LIBEXT2_BLKID)/probe.c \ - $(LIBEXT2_BLKID)/read.c \ - $(LIBEXT2_BLKID)/resolve.c \ - $(LIBEXT2_BLKID)/save.c \ - $(LIBEXT2_BLKID)/tag.c \ - $(LIBEXT2_BLKID)/version.c + $(LIBEXT2_BLKID)/cache.c \ + $(LIBEXT2_BLKID)/dev.c \ + $(LIBEXT2_BLKID)/devname.c \ + $(LIBEXT2_BLKID)/devno.c \ + $(LIBEXT2_BLKID)/getsize.c \ + $(LIBEXT2_BLKID)/llseek.c \ + $(LIBEXT2_BLKID)/probe.c \ + $(LIBEXT2_BLKID)/read.c \ + $(LIBEXT2_BLKID)/resolve.c \ + $(LIBEXT2_BLKID)/save.c \ + $(LIBEXT2_BLKID)/tag.c \ + $(LIBEXT2_BLKID)/version.c LOCAL_C_INCLUDES := $(E2FSPROGS_INCLUDES) LOCAL_CFLAGS := \ - $(E2FSPROGS_DEFAULT_CFLAGS) \ - -Wno-error=attributes \ - -Wno-error=pointer-sign \ - -Wno-unused-but-set-variable \ - -fno-strict-aliasing \ - -fPIC \ - -pthread + $(E2FSPROGS_DEFAULT_CFLAGS) \ + -Wno-error=attributes \ + -Wno-error=pointer-sign \ + -Wno-unused-but-set-variable \ + -fno-strict-aliasing \ + -fPIC \ + -pthread include $(BUILD_STATIC_LIBRARY) @@ -197,21 +212,21 @@ include $(CLEAR_VARS) LOCAL_MODULE := libext2_uuid LOCAL_SRC_FILES := \ - $(LIBEXT2_UUID)/clear.c \ - $(LIBEXT2_UUID)/compare.c \ - $(LIBEXT2_UUID)/copy.c \ - $(LIBEXT2_UUID)/gen_uuid.c \ - $(LIBEXT2_UUID)/isnull.c \ - $(LIBEXT2_UUID)/pack.c \ - $(LIBEXT2_UUID)/parse.c \ - $(LIBEXT2_UUID)/unpack.c \ - $(LIBEXT2_UUID)/unparse.c \ - $(LIBEXT2_UUID)/uuid_time.c + $(LIBEXT2_UUID)/clear.c \ + $(LIBEXT2_UUID)/compare.c \ + $(LIBEXT2_UUID)/copy.c \ + $(LIBEXT2_UUID)/gen_uuid.c \ + $(LIBEXT2_UUID)/isnull.c \ + $(LIBEXT2_UUID)/pack.c \ + $(LIBEXT2_UUID)/parse.c \ + $(LIBEXT2_UUID)/unpack.c \ + $(LIBEXT2_UUID)/unparse.c \ + $(LIBEXT2_UUID)/uuid_time.c LOCAL_C_INCLUDES := $(E2FSPROGS_INCLUDES) LOCAL_CFLAGS := \ - $(E2FSPROGS_DEFAULT_CFLAGS) \ - -fPIC \ - -pthread + $(E2FSPROGS_DEFAULT_CFLAGS) \ + -fPIC \ + -pthread include $(BUILD_STATIC_LIBRARY) @@ -219,38 +234,38 @@ include $(CLEAR_VARS) LOCAL_MODULE := libext2_e2p LOCAL_SRC_FILES := \ - $(LIBEXT2_E2P)/crypto_mode.c \ - $(LIBEXT2_E2P)/encoding.c \ - $(LIBEXT2_E2P)/errcode.c \ - $(LIBEXT2_E2P)/feature.c \ - $(LIBEXT2_E2P)/fgetflags.c \ - $(LIBEXT2_E2P)/fgetproject.c \ - $(LIBEXT2_E2P)/fgetversion.c \ - $(LIBEXT2_E2P)/fsetflags.c \ - $(LIBEXT2_E2P)/fsetproject.c \ - $(LIBEXT2_E2P)/fsetversion.c \ - $(LIBEXT2_E2P)/getflags.c \ - $(LIBEXT2_E2P)/getversion.c \ - $(LIBEXT2_E2P)/hashstr.c \ - $(LIBEXT2_E2P)/iod.c \ - $(LIBEXT2_E2P)/ljs.c \ - $(LIBEXT2_E2P)/ls.c \ - $(LIBEXT2_E2P)/mntopts.c \ - $(LIBEXT2_E2P)/ostype.c \ - $(LIBEXT2_E2P)/parse_num.c \ - $(LIBEXT2_E2P)/pe.c \ - $(LIBEXT2_E2P)/percent.c \ - $(LIBEXT2_E2P)/pf.c \ - $(LIBEXT2_E2P)/ps.c \ - $(LIBEXT2_E2P)/setflags.c \ - $(LIBEXT2_E2P)/setversion.c \ - $(LIBEXT2_E2P)/uuid.c + $(LIBEXT2_E2P)/crypto_mode.c \ + $(LIBEXT2_E2P)/encoding.c \ + $(LIBEXT2_E2P)/errcode.c \ + $(LIBEXT2_E2P)/feature.c \ + $(LIBEXT2_E2P)/fgetflags.c \ + $(LIBEXT2_E2P)/fgetproject.c \ + $(LIBEXT2_E2P)/fgetversion.c \ + $(LIBEXT2_E2P)/fsetflags.c \ + $(LIBEXT2_E2P)/fsetproject.c \ + $(LIBEXT2_E2P)/fsetversion.c \ + $(LIBEXT2_E2P)/getflags.c \ + $(LIBEXT2_E2P)/getversion.c \ + $(LIBEXT2_E2P)/hashstr.c \ + $(LIBEXT2_E2P)/iod.c \ + $(LIBEXT2_E2P)/ljs.c \ + $(LIBEXT2_E2P)/ls.c \ + $(LIBEXT2_E2P)/mntopts.c \ + $(LIBEXT2_E2P)/ostype.c \ + $(LIBEXT2_E2P)/parse_num.c \ + $(LIBEXT2_E2P)/pe.c \ + $(LIBEXT2_E2P)/percent.c \ + $(LIBEXT2_E2P)/pf.c \ + $(LIBEXT2_E2P)/ps.c \ + $(LIBEXT2_E2P)/setflags.c \ + $(LIBEXT2_E2P)/setversion.c \ + $(LIBEXT2_E2P)/uuid.c LOCAL_C_INCLUDES := $(E2FSPROGS_INCLUDES) LOCAL_CFLAGS := \ - $(E2FSPROGS_DEFAULT_CFLAGS) \ - -Wno-error=attributes \ - -fPIC \ - -pthread + $(E2FSPROGS_DEFAULT_CFLAGS) \ + -Wno-error=attributes \ + -fPIC \ + -pthread include $(BUILD_STATIC_LIBRARY) @@ -258,22 +273,22 @@ include $(CLEAR_VARS) LOCAL_MODULE := libext2_quota LOCAL_SRC_FILES := \ - $(LIBEXT2_QUOTA)/devname.c \ - $(LIBEXT2_QUOTA)/dict.c \ - $(LIBEXT2_QUOTA)/mkquota.c \ - $(LIBEXT2_QUOTA)/parse_qtype.c \ - $(LIBEXT2_QUOTA)/plausible.c \ - $(LIBEXT2_QUOTA)/prof_err.c \ - $(LIBEXT2_QUOTA)/profile.c \ - $(LIBEXT2_QUOTA)/profile_helpers.c \ - $(LIBEXT2_QUOTA)/quotaio.c \ - $(LIBEXT2_QUOTA)/quotaio_tree.c \ - $(LIBEXT2_QUOTA)/quotaio_v2.c + $(LIBEXT2_QUOTA)/devname.c \ + $(LIBEXT2_QUOTA)/dict.c \ + $(LIBEXT2_QUOTA)/mkquota.c \ + $(LIBEXT2_QUOTA)/parse_qtype.c \ + $(LIBEXT2_QUOTA)/plausible.c \ + $(LIBEXT2_QUOTA)/prof_err.c \ + $(LIBEXT2_QUOTA)/profile.c \ + $(LIBEXT2_QUOTA)/profile_helpers.c \ + $(LIBEXT2_QUOTA)/quotaio.c \ + $(LIBEXT2_QUOTA)/quotaio_tree.c \ + $(LIBEXT2_QUOTA)/quotaio_v2.c LOCAL_C_INCLUDES := $(E2FSPROGS_INCLUDES) LOCAL_CFLAGS := \ - $(E2FSPROGS_DEFAULT_CFLAGS) \ - -fPIC \ - -pthread + $(E2FSPROGS_DEFAULT_CFLAGS) \ + -fPIC \ + -pthread include $(BUILD_STATIC_LIBRARY) @@ -283,10 +298,10 @@ LOCAL_MODULE := libext2_misc LOCAL_SRC_FILES := $(LIBEXT2_MISC)/create_inode.c LOCAL_C_INCLUDES := $(E2FSPROGS_INCLUDES) LOCAL_CFLAGS := \ - $(E2FSPROGS_DEFAULT_CFLAGS) \ - -Wno-error=format-extra-args \ - -fPIC \ - -pthread + $(E2FSPROGS_DEFAULT_CFLAGS) \ + -Wno-error=format-extra-args \ + -fPIC \ + -pthread include $(BUILD_STATIC_LIBRARY) @@ -294,52 +309,76 @@ include $(CLEAR_VARS) LOCAL_MODULE := libext2_com_err LOCAL_SRC_FILES := \ - $(LIBEXT2_COM_ERR)/com_err.c \ - $(LIBEXT2_COM_ERR)/com_right.c \ - $(LIBEXT2_COM_ERR)/error_message.c \ - $(LIBEXT2_COM_ERR)/et_name.c \ - $(LIBEXT2_COM_ERR)/init_et.c + $(LIBEXT2_COM_ERR)/com_err.c \ + $(LIBEXT2_COM_ERR)/com_right.c \ + $(LIBEXT2_COM_ERR)/error_message.c \ + $(LIBEXT2_COM_ERR)/et_name.c \ + $(LIBEXT2_COM_ERR)/init_et.c LOCAL_C_INCLUDES := $(E2FSPROGS_INCLUDES) LOCAL_CFLAGS := \ - $(E2FSPROGS_DEFAULT_CFLAGS) \ - -fPIC \ - -pthread + $(E2FSPROGS_DEFAULT_CFLAGS) \ + -fPIC \ + -pthread include $(BUILD_STATIC_LIBRARY) +include $(LIBGNULIB)/Android.mk +include $(LIBCHARSET)/Android.mk +include $(LIBICRT)/Android.mk +include $(LIBICONV)/Android.mk +include $(LIBPARTED)/Android.mk + include $(CLEAR_VARS) LOCAL_MODULE := pmt LOCAL_SRC_FILES := \ - $(PMT)/Debug.cpp \ - $(PMT)/Root.cpp \ - $(PMT)/PartitionManager.cpp \ - $(PMT)/PartitionTool.cpp \ - $(PMT)/ListPartitions.cpp \ - $(PMT)/Version.cpp \ - $(PMT)/GetState.cpp \ - $(PMT)/Tools.cpp \ - $(PMT)/LanguageTools.cpp \ - $(PMT)/Languages.cpp \ - $(PMT)/Help.cpp \ - $(MKE2FS)/default_profile.c \ - $(MKE2FS)/mk_hugefiles.c \ - $(MKE2FS)/mke2fs.c \ - $(MKE2FS)/util.c + $(PMT)/Alternatives.c \ + $(PMT)/Debug.cpp \ + $(PMT)/Root.cpp \ + $(PMT)/PartedUtils.cpp \ + $(PMT)/PartitionManager.cpp \ + $(PMT)/PartitionTool.cpp \ + $(PMT)/ListPartitions.cpp \ + $(PMT)/Version.cpp \ + $(PMT)/GetState.cpp \ + $(PMT)/Tools.cpp \ + $(PMT)/LanguageTools.cpp \ + $(PMT)/Languages.cpp \ + $(PMT)/Help.cpp \ + $(MKE2FS)/default_profile.c \ + $(MKE2FS)/mk_hugefiles.c \ + $(MKE2FS)/mke2fs.c \ + $(MKE2FS)/util.c \ + $(PARTED)/parted/command.c \ + $(PARTED)/parted/jsonwrt.c \ + $(PARTED)/parted/parted.c \ + $(PARTED)/parted/strlist.c \ + $(PARTED)/parted/table.c \ + $(PARTED)/parted/ui.c \ + $(PARTED)/parted/version.c LOCAL_C_INCLUDES := \ - $(LOCAL_PATH)/../include \ - $(LOCAL_PATH)/../include/PartitionManager \ - $(E2FSPROGS_INCLUDES) + $(LOCAL_PATH)/../include \ + $(LOCAL_PATH)/../include/PartitionManager \ + $(LOCAL_PATH)/../include/libgnulib \ + $(LOCAL_PATH)/../include/libparted \ + $(LOCAL_PATH)/parted/lib + $(E2FSPROGS_INCLUDES) LOCAL_CFLAGS := \ - $(PMT_CXXFLAGS) \ - $(E2FSPROGS_DEFAULT_CFLAGS) + $(PMT_CXXFLAGS) \ + $(E2FSPROGS_DEFAULT_CFLAGS) \ + $(PARTED_DEFAULTS_CFLAGS) LOCAL_STATIC_LIBRARIES := \ - libext2fs \ - libext2_blkid \ - libext2_uuid \ - libext2_e2p \ - libext2_quota \ - libext2_misc \ - libext2_com_err + libext2fs \ + libext2_blkid \ + libext2_uuid \ + libext2_e2p \ + libext2_quota \ + libext2_misc \ + libext2_com_err \ + libgnulib \ + libparted \ + libiconv \ + libcharset \ + libicrt include $(BUILD_EXECUTABLE) diff --git a/jni/Application.mk b/jni/Application.mk index e5e12e8..d6eb60a 100755 --- a/jni/Application.mk +++ b/jni/Application.mk @@ -15,7 +15,7 @@ # limitations under the License. ######## -# 2.9.6 +# 3.0.2 ######## # architecture @@ -23,7 +23,7 @@ APP_ABI := \ arm64-v8a \ armeabi-v7a -APP_PLATFORM := android-29 +APP_PLATFORM := android-21 APP_OPTIM := release APP_STL := c++_static diff --git a/jni/PartitionManager/Alternatives.c b/jni/PartitionManager/Alternatives.c new file mode 100755 index 0000000..0054804 --- /dev/null +++ b/jni/PartitionManager/Alternatives.c @@ -0,0 +1,127 @@ +/* By YZBruh */ + +/** + * Copyright 2024 Partition Manager + * + * 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. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include +#include + +ssize_t getrandom(void* buf, size_t buflen, unsigned int flags) { + if (!buf || buflen == 0) { + errno = EINVAL; + return -1; + } + + const char* device = (flags & 1) ? "/dev/random" : "/dev/urandom"; + int fd = open(device, O_RDONLY); + if (fd < 0) { + perror("Failed to open random device"); + return -1; + } + + ssize_t total_read = 0; + while (total_read < (ssize_t)buflen) { + ssize_t bytes_read = read(fd, (char*)buf + total_read, buflen - total_read); + if (bytes_read < 0) { + if (errno == EINTR) continue; + perror("Failed to read random data"); + close(fd); + return -1; + } + total_read += bytes_read; + } + + close(fd); + return total_read; +} + +int getentropy(void* buf, size_t buflen) { + if (!buf || buflen == 0 || buflen > 256) { + errno = EINVAL; + return -1; + } + + int fd = open("/dev/urandom", O_RDONLY); + if (fd < 0) { + perror("Failed to open /dev/urandom"); + return -1; + } + + ssize_t total_read = 0; + while (total_read < (ssize_t)buflen) { + ssize_t bytes_read = read(fd, (char*)buf + total_read, buflen - total_read); + if (bytes_read < 0) { + if (errno == EINTR) continue; + perror("Failed to read random data"); + close(fd); + return -1; + } + total_read += bytes_read; + } + + close(fd); + return 0; +} + +char* _Nullable hasmntopt(const struct mntent* mnt, const char* opt) { + if (!mnt || !opt) return NULL; + + char* options = mnt->mnt_opts; + size_t opt_len = strlen(opt); + + while (*options) { + char *comma = strchr(options, ','); + size_t len = comma ? (size_t)(comma - options) : strlen(options); + + if (len == opt_len && strncmp(options, opt, len) == 0) + return (char*)options; + + if (!comma) break; + options = comma + 1; + } + + return NULL; +} + +void* _Nullable reallocarray(void* ptr, size_t count, size_t size) { + if (count == 0 || size == 0) { + free(ptr); + return NULL; + } + + if (count > SIZE_MAX / size) return NULL; + + size_t total_size = count * size; + void* new_ptr = realloc(ptr, total_size); + if (new_ptr == NULL) return NULL; + + return new_ptr; +} + +#ifdef __cplusplus +} +#endif + +/* end of code */ \ No newline at end of file diff --git a/jni/PartitionManager/Debug.cpp b/jni/PartitionManager/Debug.cpp index 676c2a4..0a77da6 100755 --- a/jni/PartitionManager/Debug.cpp +++ b/jni/PartitionManager/Debug.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,8 +16,8 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_STRINGKEYS +#define INC_MAIN_LIBS 1 +#define INC_STRINGKEYS 1 #include @@ -26,67 +26,67 @@ using namespace PartitionManager; /* it's prints standart logs */ void PartitionManager::DisplayLog(LogLevel LogPriority, const char* _Nonnull fmt, ...) { - va_list args; - va_start(args, fmt); + va_list args; + va_start(args, fmt); - if (!Config.SilentEnabled) - { - switch (LogPriority) - { - case LOG_LEVEL_ERROR: - fprintf(stderr, "%s: ", Strings::ExecutingName.c_str()); - vfprintf(stderr, fmt, args); - break; - case LOG_LEVEL_WARN: - fprintf(stdout, "%s: ", Display::UsingDispString->warn); - vfprintf(stdout, fmt, args); - break; - case LOG_LEVEL_FATAL: - fprintf(stderr, "%s: ", Display::UsingDispString->fatal); - vfprintf(stderr, fmt, args); - break; - case LOG_LEVEL_DEBUG: - vfprintf(stdout, fmt, args); - break; - } - } + if (!Config.SilentEnabled) + { + switch (LogPriority) + { + case LOG_LEVEL_ERROR: + fprintf(stderr, "%s: ", Strings::ExecutingName.c_str()); + vfprintf(stderr, fmt, args); + break; + case LOG_LEVEL_WARN: + fprintf(stdout, "%s: ", Display::UsingDispString->warn); + vfprintf(stdout, fmt, args); + break; + case LOG_LEVEL_FATAL: + fprintf(stderr, "%s: ", Display::UsingDispString->fatal); + vfprintf(stderr, fmt, args); + break; + case LOG_LEVEL_DEBUG: + vfprintf(stdout, fmt, args); + break; + } + } - if (LogPriority == LOG_LEVEL_ERROR) exit(1); - else if (LogPriority == LOG_LEVEL_FATAL) abort(); + if (LogPriority == LOG_LEVEL_ERROR) exit(1); + else if (LogPriority == LOG_LEVEL_FATAL) abort(); - va_end(args); + va_end(args); } /* it's prints verbose logs */ void PartitionManager::DisplayVerboseLog(LogLevel LogPriority, const char* func, const int& line, const char* _Nonnull fmt, ...) { - va_list args; - va_start(args, fmt); + va_list args; + va_start(args, fmt); - if (Config.VerboseMode) - { - switch (LogPriority) - { - case LOG_LEVEL_ERROR: - fprintf(stderr, " [%s() Line<%d>]: ", func, line); - vfprintf(stderr, fmt, args); - break; - case LOG_LEVEL_WARN: - fprintf(stdout, " [%s() Line<%d>]: ", func, line); - vfprintf(stdout, fmt, args); - break; - case LOG_LEVEL_FATAL: - fprintf(stderr, " [%s() Line<%d>]: ", func, line); - vfprintf(stderr, fmt, args); - break; - case LOG_LEVEL_DEBUG: - fprintf(stdout, " [%s() Line<%d>]: ", func, line); - vfprintf(stdout, fmt, args); - break; - } - } + if (Config.VerboseMode) + { + switch (LogPriority) + { + case LOG_LEVEL_ERROR: + fprintf(stderr, " [%s() Line<%d>]: ", func, line); + vfprintf(stderr, fmt, args); + break; + case LOG_LEVEL_WARN: + fprintf(stdout, " [%s() Line<%d>]: ", func, line); + vfprintf(stdout, fmt, args); + break; + case LOG_LEVEL_FATAL: + fprintf(stderr, " [%s() Line<%d>]: ", func, line); + vfprintf(stderr, fmt, args); + break; + case LOG_LEVEL_DEBUG: + fprintf(stdout, " [%s() Line<%d>]: ", func, line); + vfprintf(stdout, fmt, args); + break; + } + } - va_end(args); + va_end(args); } /** diff --git a/jni/PartitionManager/GetState.cpp b/jni/PartitionManager/GetState.cpp index 04bed8d..ace4558 100755 --- a/jni/PartitionManager/GetState.cpp +++ b/jni/PartitionManager/GetState.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,8 +16,8 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_STAT +#define INC_MAIN_LIBS 1 +#define INC_STAT 1 #include @@ -31,21 +31,22 @@ */ int PartitionManager::GetState(const string& filepath, const string& stype) { - struct stat GetStat; - VLOGD("Checking `%s' with 'stat '...\n", filepath.c_str()); + struct stat GetStat; + VLOGD("Checking `%s' with 'stat '...\n", filepath.c_str()); - if (stat(filepath.c_str(), &GetStat) != 0) return 1; - if (stype == "dir") - return (S_ISDIR(GetStat.st_mode)) ? 0 : -1; - else if (stype == "file") - return (S_ISREG(GetStat.st_mode)) ? 0 : -1; - else if (stype == "blk") - return (S_ISBLK(GetStat.st_mode)) ? 0 : -1; - else if (stype == "link") - return (S_ISLNK(GetStat.st_mode)) ? 0 : -1; - else return 3; + if (stat(filepath.c_str(), &GetStat) != 0) return 1; + if (stype == "none") return 0; + if (stype == "dir") + return (S_ISDIR(GetStat.st_mode)) ? 0 : -1; + else if (stype == "file") + return (S_ISREG(GetStat.st_mode)) ? 0 : -1; + else if (stype == "blk") + return (S_ISBLK(GetStat.st_mode)) ? 0 : -1; + else if (stype == "link") + return (S_ISLNK(GetStat.st_mode)) ? 0 : -1; + else return 3; - return 2; /* it's a dummy value */ + return 2; /* it's a dummy value */ } /* end of code */ diff --git a/jni/PartitionManager/Help.cpp b/jni/PartitionManager/Help.cpp index c60112e..f0bd455 100755 --- a/jni/PartitionManager/Help.cpp +++ b/jni/PartitionManager/Help.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,9 +16,9 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_STRINGKEYS -#define HELP +#define INC_MAIN_LIBS 1 +#define INC_STRINGKEYS 1 +#define HELP_CPP 1 #include #include @@ -30,45 +30,47 @@ struct langdb_docs* Display::UsingDocDispString = nullptr; static void PrepareLangconfDocs(void) { - if (Strings::CurrentLanguage == "en") - Display::UsingDocDispString = &Display::LangDocEn; - else if (Strings::CurrentLanguage == "tr") - Display::UsingDocDispString = &Display::LangDocTr; + if (Strings::CurrentLanguage == "en") + Display::UsingDocDispString = &Display::LangDocEn; + else if (Strings::CurrentLanguage == "tr") + Display::UsingDocDispString = &Display::LangDocTr; } void PartitionManager::DisplayHelp(void) { - VLOGD("Loading language for help messages... Calling PrepareLangconfDocs() ...\n"); - PrepareLangconfDocs(); - VLOGD("Printing...\n"); - LOGD("%s: %s %s\n", Display::UsingDocDispString->usage_docstr, Strings::ExecutingName.c_str(), Display::UsingDocDispString->docs_strs_l1); - LOGD(" %s: %s %s\n", Display::UsingDocDispString->or_str, Strings::ExecutingName.c_str(), Display::UsingDocDispString->docs_strs_l2); - LOGD(" %s: %s %s\n", Display::UsingDocDispString->or_str, Strings::ExecutingName.c_str(), Display::UsingDocDispString->docs_strs_l3); - LOGD(" %s: %s %s\n\n", Display::UsingDocDispString->or_str, Strings::ExecutingName.c_str(), Display::UsingDocDispString->docs_strs_l4); - LOGD("%s:\n", Display::UsingDocDispString->docs_strs_l5); - LOGD(" -l, --logical %s\n", Display::UsingDocDispString->docs_strs_l6); - LOGD(" -P, --search-path %s\n", Display::UsingDocDispString->docs_strs_l7); - LOGD(" -p, --list %s\n", Display::UsingDocDispString->docs_strs_l8); - LOGD(" -s, --silent %s\n", Display::UsingDocDispString->docs_strs_l9); - LOGD(" -f, --force %s\n", Display::UsingDocDispString->docs_strs_l10); - LOGD(" -V, --verbose %s\n", Display::UsingDocDispString->docs_strs_l11); - LOGD(" -S, --set-lang %s\n", Display::UsingDocDispString->docs_strs_l12); - LOGD(" -v, --version %s\n", Display::UsingDocDispString->docs_strs_l13); - LOGD(" --help %s\n\n", Display::UsingDocDispString->docs_strs_l14); - LOGD("%s:\n", Display::UsingDocDispString->docs_strs_l15); - LOGD(" --only-size %s\n", Display::UsingDocDispString->docs_strs_l16); - LOGD(" --as-byte %s\n", Display::UsingDocDispString->docs_strs_l17); - LOGD(" --as-kilobyte %s\n", Display::UsingDocDispString->docs_strs_l18); - LOGD(" --as-megabyte %s\n", Display::UsingDocDispString->docs_strs_l19); - LOGD(" --as-gigabyte %s\n\n", Display::UsingDocDispString->docs_strs_l20); - LOGD("%s:\n", Display::UsingDocDispString->docs_strs_l21); - LOGD(" %s backup boot_a -P /dev/block/platform/bootdevice/by-name\n", Strings::ExecutingName.c_str()); - LOGD(" %s flash boot_a /sdcard/twrp/boot.img -c /dev/block/platform/bootdevice/by-name\n", Strings::ExecutingName.c_str()); - LOGD(" %s format system_a ext4 --logical\n", Strings::ExecutingName.c_str()); - LOGD(" %s -P /dev/block/platform/bootdevice/by-name --list\n", Strings::ExecutingName.c_str()); - LOGD(" %s partition-size boot --as-byte\n", Strings::ExecutingName.c_str()); - LOGD(" %s partition-size system --only-size --as-gigabyte --logical\n\n", Strings::ExecutingName.c_str()); - LOGD("%s \n", Display::UsingDocDispString->docs_strs_l22); + VLOGD("Loading language for help messages... Calling PrepareLangconfDocs() ...\n"); + PrepareLangconfDocs(); + VLOGD("Printing...\n"); + LOGD("%s: %s %s\n", Display::UsingDocDispString->usage_docstr, Strings::ExecutingName.c_str(), Display::UsingDocDispString->docs_strs_l1); + LOGD(" %s: %s %s\n", Display::UsingDocDispString->or_str, Strings::ExecutingName.c_str(), Display::UsingDocDispString->docs_strs_l2); + LOGD(" %s: %s %s\n", Display::UsingDocDispString->or_str, Strings::ExecutingName.c_str(), Display::UsingDocDispString->docs_strs_l3); + LOGD(" %s: %s %s\n", Display::UsingDocDispString->or_str, Strings::ExecutingName.c_str(), Display::UsingDocDispString->docs_strs_l4); + LOGD(" %s: %s %s\n\n", Display::UsingDocDispString->or_str, Strings::ExecutingName.c_str(), Display::UsingDocDispString->docs_strs_l5); + LOGD("%s:\n", Display::UsingDocDispString->docs_strs_l6); + LOGD(" -l, --logical %s\n", Display::UsingDocDispString->docs_strs_l7); + LOGD(" -P, --search-path %s\n", Display::UsingDocDispString->docs_strs_l8); + LOGD(" -p, --list %s\n", Display::UsingDocDispString->docs_strs_l9); + LOGD(" -s, --silent %s\n", Display::UsingDocDispString->docs_strs_l10); + LOGD(" -f, --force %s\n", Display::UsingDocDispString->docs_strs_l11); + LOGD(" -V, --verbose %s\n", Display::UsingDocDispString->docs_strs_l12); + LOGD(" -S, --set-lang %s\n", Display::UsingDocDispString->docs_strs_l13); + LOGD(" -U, --view-langs %s\n", Display::UsingDocDispString->docs_strs_l14); + LOGD(" -v, --version %s\n", Display::UsingDocDispString->docs_strs_l15); + LOGD(" --help %s\n\n", Display::UsingDocDispString->docs_strs_l16); + LOGD("%s:\n", Display::UsingDocDispString->docs_strs_l17); + LOGD(" --only-size %s\n", Display::UsingDocDispString->docs_strs_l18); + LOGD(" --as-byte %s\n", Display::UsingDocDispString->docs_strs_l19); + LOGD(" --as-kilobyte %s\n", Display::UsingDocDispString->docs_strs_l20); + LOGD(" --as-megabyte %s\n", Display::UsingDocDispString->docs_strs_l21); + LOGD(" --as-gigabyte %s\n\n", Display::UsingDocDispString->docs_strs_l22); + LOGD("%s:\n", Display::UsingDocDispString->docs_strs_l23); + LOGD(" %s backup boot_a -P /dev/block/platform/bootdevice/by-name\n", Strings::ExecutingName.c_str()); + LOGD(" %s flash boot_a /sdcard/twrp/boot.img -c /dev/block/platform/bootdevice/by-name\n", Strings::ExecutingName.c_str()); + LOGD(" %s format system_a ext4 --logical\n", Strings::ExecutingName.c_str()); + LOGD(" %s -P /dev/block/platform/bootdevice/by-name --list\n", Strings::ExecutingName.c_str()); + LOGD(" %s partition-size boot --as-byte\n", Strings::ExecutingName.c_str()); + LOGD(" %s partition-size system --only-size --as-gigabyte --logical\n\n", Strings::ExecutingName.c_str()); + LOGD("%s \n", Display::UsingDocDispString->docs_strs_l24); } /* end of code */ diff --git a/jni/PartitionManager/LanguageTools.cpp b/jni/PartitionManager/LanguageTools.cpp index 4b9e93b..22ae394 100755 --- a/jni/PartitionManager/LanguageTools.cpp +++ b/jni/PartitionManager/LanguageTools.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,12 +16,13 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_DEBUGERS -#define INC_STAT -#define INC_STRINGKEYS +#define INC_MAIN_LIBS 1 +#define INC_DEBUGERS 1 +#define INC_STAT 1 +#define INC_STRINGKEYS 1 #include +#include using namespace PartitionManager; @@ -31,153 +32,147 @@ using namespace PartitionManager; #define PMTLANG_CONF "/sdcard/.pmtlang.conf" #define PMT_SW_POINT "/sdcard/.pmtlangsw" -struct langdb_general* Display::UsingDispString = nullptr; -static fstream langconf; -string supp_langs[] = { - "en", - "tr", - "" -}; +static fstream LanguageConfigFile; +static bool LanguageApplied = false; +static int StructSize = static_cast(sizeof(LanguageConfig) / sizeof(LanguageConfig[0])); static bool InternalStorageDirFound(void) { - return (GetState(INTERNAL_STORAGE_DIR, "dir") == 0) ? true : false; + return (GetState(INTERNAL_STORAGE_DIR, "dir") == 0) ? true : false; } -static bool -LanguageControl(const string& lang) +static inline void +LoadLanguageAs(const string& Name, struct langdb_general* &Language) { - for (int i = 0; !supp_langs[i].empty(); i++) - { - if (lang == supp_langs[i]) - return true; - } + if (LanguageConfigFile.is_open()) + LanguageConfigFile.close(); - return false; + VLOGD("Load language as '%s'...\n", Name.c_str()); + + Display::UsingDispString = Language; + Strings::CurrentLanguage = Name; + LanguageApplied = true; +} + +static inline bool +LanguageIsSupport(const string& Name) +{ + for (int i = 0; (i < StructSize && !LanguageConfig[i].Name.empty()); i++) + if (Name == LanguageConfig[i].Name) return true; + + return false; +} + +static int +IfLanguageIsSupport_Load(const string& Name) +{ + for (int i = 0; i < StructSize; i++) { + if (Name == LanguageConfig[i].Name) { + VLOGD("'Name' ('%s') is '%s'.\n", Name.c_str(), LanguageConfig[i].Name.c_str()); + LoadLanguageAs(LanguageConfig[i].Name, LanguageConfig[i].LanguageStructure); + return 0; + } + } + + return -1; } bool PartitionManager::LoadLanguage(void) { - string lang_fpr = "en"; - langconf.close(); + string TargetLanguage = "en"; + LanguageConfigFile.close(); - VLOGD("Checking install type...\n"); - if (GetState(TERMUX_PMT_MANDOC) == 0) - Config.InstalledOnTermux = true; + VLOGD("Checking install type...\n"); + if (GetState(TERMUX_PMT_MANDOC) == 0) + Config.InstalledOnTermux = true; - VLOGD("Checking internal storage dir: `%s'\n", INTERNAL_STORAGE_DIR); - if (!InternalStorageDirFound()) - LOGE("PartitionManagerLanguageTools: İnternal storage directory (`%s') not found or accessible.\n", INTERNAL_STORAGE_DIR); + VLOGD("Checking internal storage dir: `%s'\n", INTERNAL_STORAGE_DIR); + if (!InternalStorageDirFound()) + LOGE("PartitionManagerLanguageTools: İnternal storage directory (`%s') not found or accessible.\n", INTERNAL_STORAGE_DIR); - VLOGD("Trying to open `%s' with 'open '\n", PMTLANG_CONF); - langconf.open(PMTLANG_CONF, ios::in | ios::out); + VLOGD("Trying to open `%s' with 'open '\n", PMTLANG_CONF); + LanguageConfigFile.open(PMTLANG_CONF, ios::in | ios::out); - VLOGD("Checking status: `%s'...\n", PMTLANG_CONF); - if (!langconf.is_open()) - { - langconf.open(PMTLANG_CONF, ios::out | ios::trunc); + VLOGD("Checking status: `%s'...\n", PMTLANG_CONF); + if (!LanguageConfigFile.is_open()) { + LanguageConfigFile.open(PMTLANG_CONF, ios::out | ios::trunc); - VLOGD("Calling SetLanguage()...\n"); - SetLanguage("en", 1); - Display::UsingDispString = &Display::LangEn; - Strings::CurrentLanguage = "en"; + VLOGD("Calling SetLanguage()...\n"); + SetLanguage(LanguageConfig[0].Name, 1); + LoadLanguageAs(LanguageConfig[0].Name, LanguageConfig[0].LanguageStructure); // english - "en" - if (langconf.is_open()) - langconf.close(); + return true; + } else { + VLOGD("Reading `%s'\n", PMTLANG_CONF); + while (getline(LanguageConfigFile, TargetLanguage)) + IfLanguageIsSupport_Load(TargetLanguage); - return true; - } - else - { - VLOGD("Reading `%s'\n", PMTLANG_CONF); - while (getline(langconf, lang_fpr)) - { - if (lang_fpr == "en") - goto SetEn; - else if (lang_fpr == "tr") - goto SetTr; - else - { - VLOGD("Calling SetLanguage()\n"); - SetLanguage("en", 1); - VLOGD("Re-calling LoadLanguage()\n"); - PartitionManager::LoadLanguage(); - return true; - } - } + if (!LanguageApplied) { + VLOGD("Calling SetLanguage()\n"); + SetLanguage(LanguageConfig[0].Name, 1); + LoadLanguageAs(LanguageConfig[0].Name, LanguageConfig[0].LanguageStructure); // english - "en" + return true; + } + } - if (!getline(langconf, lang_fpr)) - { - VLOGD("Calling SetLanguage()\n"); - SetLanguage("en", 1); - VLOGD("Re-calling LoadLanguage()\n"); - PartitionManager::LoadLanguage(); - return true; - } - } + if (LanguageApplied) return true; -SetEn: - langconf.close(); - Display::UsingDispString = &Display::LangEn; - Strings::CurrentLanguage = "en"; - VLOGD("Loaded \"en\"\n"); - return true; - -SetTr: - langconf.close(); - Display::UsingDispString = &Display::LangTr; - Strings::CurrentLanguage = "tr"; - VLOGD("Loaded \"tr\"\n"); - return true; - - return false; + return false; } -void PartitionManager::SetLanguage(const string& lang, ushort_t null_conf_stat) +void PartitionManager::SetLanguage(const string& Language, ushort_t NullConfigState) { - VLOGD("Checking speficed language (from input).\n"); - if (!LanguageControl(lang)) - LOGE("Unknown language: %s.\n", lang.c_str()); + VLOGD("Checking speficed language (from input).\n"); + if (!LanguageIsSupport(Language)) + LOGE("Unknown language: %s.\n", Language.c_str()); - langconf.close(); + LanguageConfigFile.close(); - VLOGD("Checking internal storage dir: `%s'\n", INTERNAL_STORAGE_DIR); - if (!InternalStorageDirFound()) - LOGE("PartitionManagerSetLanguage: Internal storage directory (`%s') not found or accessible.\n", INTERNAL_STORAGE_DIR); + VLOGD("Checking internal storage dir: `%s'\n", INTERNAL_STORAGE_DIR); + if (!InternalStorageDirFound()) + LOGE("PartitionManagerSetLanguage: Internal storage directory (`%s') not found or accessible.\n", INTERNAL_STORAGE_DIR); - VLOGD("Trying to open `%s' with 'open '\n", PMTLANG_CONF); - langconf.open(PMTLANG_CONF, ios::out | ios::trunc); + VLOGD("Trying to open `%s' with 'open '\n", PMTLANG_CONF); + LanguageConfigFile.open(PMTLANG_CONF, ios::out | ios::trunc); - if (!langconf.is_open()) - LOGE("PartitionManagerLanguageTools: Cannot open/write config file!!!\n"); + if (!LanguageConfigFile.is_open()) + LOGE("PartitionManagerLanguageTools: Cannot open/write config file!!!\n"); - VLOGD("Write \"%s\" to `%s' with 'std '\n", lang.c_str(), PMTLANG_CONF); - langconf << lang; - if (!langconf) - LOGE("PartitionManagerLanguageTools: Couldn't write config!!!\n"); - else - langconf.close(); + VLOGD("Write \"%s\" to `%s' with 'std '\n", Language.c_str(), PMTLANG_CONF); + LanguageConfigFile << Language; + if (!LanguageConfigFile) + LOGE("PartitionManagerLanguageTools: Couldn't write config!!!\n"); + else + LanguageConfigFile.close(); - if (null_conf_stat != 1) - { - VLOGD("Generating dummy file `%s' with 'ofstream '\n", PMT_SW_POINT); - ofstream sw_point(PMT_SW_POINT, ios::trunc); - if (sw_point.is_open()) - sw_point.close(); - } + if (NullConfigState != 1) { + VLOGD("Generating dummy file `%s' with 'ofstream '\n", PMT_SW_POINT); + ofstream sw_point(PMT_SW_POINT, ios::trunc); + if (sw_point.is_open()) sw_point.close(); + } +} + +void PartitionManager::DisplaySupportedLanguages(void) +{ + VLOGD("Listing supported languages...\n"); + LOGD("%s: \n", Display::UsingDispString->list_of_supported); + + for (int i = 0; i < StructSize; i++) + LOGD(" - %s (%s)\n", + LanguageConfig[i].ExName.c_str(), + LanguageConfig[i].Name.c_str()); } bool PartitionManager::CleanSWPoint(void) { - if (GetState(PMT_SW_POINT) == 0) - { - VLOGD("Removing (force) `%s' with 'remove '\n", PMT_SW_POINT); - remove(PMT_SW_POINT); - return true; - } + if (GetState(PMT_SW_POINT) == 0) { + VLOGD("Removing (force) `%s' with 'remove '\n", PMT_SW_POINT); + remove(PMT_SW_POINT); + return true; + } - return false; + return false; } /* end of code */ diff --git a/jni/PartitionManager/Languages.cpp b/jni/PartitionManager/Languages.cpp index 0298106..1dd72f9 100755 --- a/jni/PartitionManager/Languages.cpp +++ b/jni/PartitionManager/Languages.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,8 +16,8 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_STRINGKEYS +#define INC_MAIN_LIBS 1 +#define INC_STRINGKEYS 1 #include @@ -25,221 +25,239 @@ namespace PartitionManager { namespace Display { struct langdb_general LangEn = { - .lang_by_s = "YZBruh & r0manas", - .language = "English", - .lang_prefix = "en", - .not_logical = "This device does not have logical partitions!", - .not_file = "is not a file.", - .not_dir = "is not a directory.", - .not_in_dev = "Nothing found in /dev. Use force mode to avoid this error.", - .not_open = "Couldn't open", - .not_block = "The specified partition is not recognized as a block device. Use force mode to avoid this error.", - .not_read = "Couldn't read", - .not_readdir = "Couldn't read directory", - .not_write = "Couldn't write", - .not_gen = "Couldn't generate", - .no_root = "Root access could not be detected! Please run this with root permissions.", - .expected_backup_arg = "Expected backup argument 2 (1 of them are not mandatory), retrieved", - .expected_flash_arg = "Expected flash argument 2, retrieved", - .expected_format_arg = "Expected format argument 2, retrieved", - .expected_partsz_arg = "Expacted partition-size argument 2, retrieved", - .missing_operand = "Missing operand", - .multiple_wiewers = "Multiple viewers can't be used on the same line.", - .symbol_rule = "When specifying arguments for an option, ensure they do not begin with '-'. Each argument must correspond correctly to its respective option.", - .req_part_name = "Partition name required.", - .part_not_found = "Partition not found! Maybe a logical partition?", - .unsupported_fs = "Formatter: unsupported filesystem", - .cannot_stat = "Cannot stat", - .ffile_more_part = "Flash file size exceeds partition capacity. Use force mode to avoid this error (not recommended, riscy!).", - .cannot_get_bsz = "Failed to retrieve partition block size.", - .format_fail = "Formatting failed! There is a possibility of data damage.", - .fail_get_psize = "Cannot get partition size", - .depr_backup_opt = "These options for the backup are unavailable.", - .depr_flash_opt = "These options for the flash are unavailable.", - .depr_format_opt = "These options for the format are unavailable.", - .depr_Vlicense_opt = "Deprecated because it was unnecessary.", - .depr_ch_list_opt = "Use -p argument for listing partitions.", - .depr_ch_sp_opt = "Use -P (--search-path) argument instead of -c (--context).", - .not_spec_opt = "Specify the necessary arguments, not option", - .some_spec = "You may have indicated options, but they don't work much unless you speficy a main transaction", - .logical_warn = "This device uses logical partitions.", - .ab_warn = "This device uses A/B partition style.", - .out_not_spec = "Output file name not specified. Using created name", - .no_found_on_process = "The file that was processed was not found. Something wen wrong...", - .please_rerun = "Please rerun the command.", - .part_disk_sz = "Partition (backup) size", - .flash_file_sz = "Flash file size", - .part_disk_sz_fail = "Failed to retrieve partition disk size.", - .flash_file_sz_fail = "Failed to retrieve flash file size.", - .unknown_opr = "Unknown operand", - .req_an_arg = "option requires an argument", - .list_of_general = "List of general partitions", - .list_of_logc = "List of logical partitions", - .success_backup = "Backup successful. Output", - .success_flash = "Flash successful", - .success_format = "Format successful", - .formatting = "Formatting", - .warn = "WARNING", - .fatal = "FATAL ERROR", - .is_requires_arg = "requires an argument", - .only_partsz_args = "Flags can be used only in partition size view were identified. But target not this", - .unknw_arg = "unknown option", - .switching_lang = "Switching language...", - .welcome = "language!", - .welcome_ = "Welcome to ", - .for_more = "for more information", - .s_and_v = "Silent and verbose mode cannot be used together!", - .try_h = "Try", - .usage_head = "Usage", - .depr_opt_str = "DEPRECATED OPTION", - .switched_opt_str = "SWITCHED OPTION", - .not_changed_opt = "not changed", - .compiler_str = "compiler", - .version_str = "version", - .bin_str = "binary", - .part_name = "Partition name", - .part_type = "Partition is dynamic", - .fs_str = "Filesystem", - .unknw_str = "unknown", - .by_str = "By", - .yes = "true", - .no = "false" + .lang_by_s = "YZBruh & r0manas", + .language = "English", + .lang_prefix = "en", + .not_logical = "This device does not have logical partitions!", + .not_file = "is not a file.", + .not_dir = "is not a directory.", + .not_in_dev = "Nothing found in /dev. Use force mode to avoid this error.", + .not_open = "Couldn't open", + .not_block = "The specified partition is not recognized as a block device. Use force mode to avoid this error.", + .not_read = "Couldn't read", + .not_readdir = "Couldn't read directory", + .not_write = "Couldn't write", + .not_gen = "Couldn't generate", + .no_root = "Root access could not be detected! Please run this with root permissions.", + .expected_backup_arg = "Expected backup argument 2 (1 of them are not mandatory), retrieved", + .expected_flash_arg = "Expected flash argument 2, retrieved", + .expected_format_arg = "Expected format argument 2, retrieved", + .expected_partsz_arg = "Expected partition-size argument 1, retrieved", + .missing_operand = "Missing operand", + .multiple_wiewers = "Multiple viewers can't be used on the same line.", + .symbol_rule = "When specifying arguments for an option, ensure they do not begin with '-'. Each argument must correspond correctly to its respective option.", + .req_part_name = "Partition name required.", + .part_not_found = "Partition not found! Maybe a logical partition?", + .unsupported_fs = "Formatter: unsupported filesystem", + .cannot_stat = "Cannot stat", + .ffile_more_part = "Flash file size exceeds partition capacity. Use force mode to avoid this error (not recommended, riscy!).", + .cannot_get_bsz = "Failed to retrieve partition block size.", + .format_fail = "Formatting failed! There is a possibility of data damage.", + .fail_get_psize = "Cannot get partition size", + .depr_backup_opt = "These options for the backup are unavailable.", + .depr_flash_opt = "These options for the flash are unavailable.", + .depr_format_opt = "These options for the format are unavailable.", + .depr_Vlicense_opt = "Deprecated because it was unnecessary.", + .depr_ch_list_opt = "Use -p argument for listing partitions.", + .depr_ch_sp_opt = "Use -P (--search-path) argument instead of -c (--context).", + .not_spec_opt = "Specify the necessary arguments, not option", + .some_spec = "You may have indicated options, but they don't work much unless you speficy a main transaction", + .logical_warn = "This device uses logical partitions.", + .ab_warn = "This device uses A/B partition style.", + .out_not_spec = "Output file name not specified. Using created name", + .no_found_on_process = "The file that was processed was not found. Something wen wrong...", + .please_rerun = "Please rerun the command.", + .part_disk_sz = "Partition (backup) size", + .flash_file_sz = "Flash file size", + .part_disk_sz_fail = "Failed to retrieve partition disk size.", + .flash_file_sz_fail = "Failed to retrieve flash file size.", + .cannot_find_any_defdevice = "Couldn't find any default device", + .cannot_find_device = "Device not founded", + .found_defdevice = "Founded a default device", + .not_spec_device_on_args = "Device is not speficed in arguments. Searching default devices (by pmt)", + .starting_parted = "Starting parted", + .exited_with = "Exited parted with exit code", + .unknown_opr = "Unknown operand", + .req_an_arg = "option requires an argument", + .list_of_general = "List of general partitions", + .list_of_logc = "List of logical partitions", + .success_backup = "Backup successful. Output", + .success_flash = "Flash successful", + .success_format = "Format successful", + .formatting = "Formatting", + .warn = "WARNING", + .fatal = "FATAL ERROR", + .is_requires_arg = "requires an argument", + .list_of_supported = "List of supported languages", + .only_partsz_args = "Flags can be used only in partition size view were identified. But target not this", + .unknw_arg = "unknown option", + .switching_lang = "Switching language...", + .welcome = "language!", + .welcome_ = "Welcome to ", + .for_more = "for more information", + .s_and_v = "Silent and verbose mode cannot be used together!", + .try_h = "Try", + .usage_head = "Usage", + .depr_opt_str = "DEPRECATED OPTION", + .switched_opt_str = "SWITCHED OPTION", + .not_changed_opt = "not changed", + .compiler_str = "compiler", + .version_str = "version", + .bin_str = "binary", + .part_name = "Partition name", + .part_type = "Partition is dynamic", + .fs_str = "Filesystem", + .unknw_str = "unknown", + .by_str = "By", + .yes = "true", + .no = "false" }; struct langdb_general LangTr = { - .lang_by_s = "YZBruh", - .language = "Türkçe", - .lang_prefix = "tr", - .not_logical = "Bu cihaz mantıksal (logical) bölümlere sahip değil!", - .not_file = "Bu bir dosya değil", - .not_dir = "Bu bir dizin değil", - .not_in_dev = "Bu bir şakamı? Bunun /dev dizini ile bir ilgisi yok (içermiyor). Bu hatayla karşılaşmak istemiyorsanız zorlama (force) modu kullanın.", - .not_open = "Açılamıyor", - .not_block = "Belirtilen bölüm bir blok değil. Yani aslında bu bir bölüm bile değil (disk). Bu hatayı almak için şanslı olmak gerek..! Bu hatayla karşılaşmak istemiyorsanız zorlama (force) modu kullanın.", - .not_read = "Veri okunamıyor", - .not_readdir = "Dizin verisi okunamıyor", - .not_write = "Veri yazılamıyor", - .not_gen = "Oluşturulamıyor", - .no_root = "Root erişimi tespit edilemedi! Lütfen root erişimi ile çalıştırın.", - .expected_backup_arg = "Beklenen yedekleme argümanı 2 (bir tanesi zorunlu değil), alınan", - .expected_flash_arg = "Beklenen flaş argümanı 2, alınan", - .expected_format_arg = "Beklenen format argümanı 2, alınan", - .expected_partsz_arg = "Beklenen partition-size argümanı 1, alınan", - .missing_operand = "İşlem belirtilmedi", - .multiple_wiewers = "Birden fazla görüntüleme işlemi yapan fonksiyonlar bir arada kullanılamaz. Aynı anda sadece bir tanesi kullanılabilir.", - .symbol_rule = "Bir seçeneğin argümanını verirken argüman önüne '-' sembolü getirilemez. Sembolü kaldırın ve tekrar deneyin.", - .req_part_name = "Bölüm adı gereklidir.", - .part_not_found = "Bölüm bulunamadı! Belki mantıksal (logical) bir bölümdür?", - .unsupported_fs = "Formatlayıcı: desteklenmeyen dosya sistemi:", - .cannot_stat = "Durumu tespit edilemedi", - .ffile_more_part = "Flaşlanacak dosyanın boyutu mevcut bölüm boyutundan fazla. Bu hatayla karşılaşmak istemiyorsanız zorlama (force) modu kullanın (bunu yapmanız asla önerilmez).", - .cannot_get_bsz = "Bölüm blok boyutu tespit edilemedi!", - .format_fail = "Formatlama başarısız oldu. Bazı şeyler zarar görmüş olabilir!", - .fail_get_psize = "Bölüm boyutu alınamadı", - .depr_backup_opt = "Yedek için artık bu seçeneği kullanamazsınız.", - .depr_flash_opt = "Flaşlama için artık bu seçeneği kullanamazsınız.", - .depr_format_opt = "Formatlama için artıi bu seçeneği kullanamazsınız.", - .depr_Vlicense_opt = "Gereksiz seçeneklere bellek yok!", - .depr_ch_list_opt = "Listeleme için -p seçeneğini kullanabilirsiniz.", - .depr_ch_sp_opt = "Özel arama dizini belirtmek için -P (--search-path) seçeneğini kullanabilirsiniz.", - .logical_warn = "Bu cihaz mantıksal (logical) bölümlere sahip.", - .not_spec_opt = "Seçenek değil, şuan gerekli argümanları verin", - .some_spec = "Seçenek belirtmiş olabilirsiniz fakat, ana işlem belirtmedikçe pek işe yaramazlar", - .ab_warn = "Bu cihazın bazı bölümleri A/B kullanıyor.", - .out_not_spec = "Çıktı dosya adı belirtilmedi. Oluşturulan çıktı adı", - .no_found_on_process = "İşlenmekte olan dosya bulunamadı. Bir şeyler yanlış...", - .please_rerun = "Lütfen yeniden çalıştırın", - .part_disk_sz = "Bölümün (yedek) boyutu", - .flash_file_sz = "Flaşlanacak dosyanın boyutu", - .flash_file_sz_fail = "Uyarı: flaşlanacak dosyanın boyutu tespit edilemedi.", - .part_disk_sz_fail = "Uyarı: bölüm boyutunun boyutu tespit edilemedi.", - .unknown_opr = "Bilinmeyen işlem", - .req_an_arg = "bu seçenek argüman gerektirir", - .list_of_general = "Genel bölümlerin listesi", - .list_of_logc = "Mantıksal (logical) bölümlerin listesi", - .success_backup = "Başarılı. Çıktı", - .success_flash = "Başarılı.", - .success_format = "Formatlama başarılı", - .formatting = "Formatlanıyor", - .warn = "UYARI", - .fatal = "KRİTİK HATA", - .is_requires_arg = "bir argüman gereklidir", - .only_partsz_args = "Sadece bölüm boyutu görüntülemesinde kullanılabilecek bayraklar tespit edildi. Ama hedef bu değil", - .unknw_arg = "bilinmeyen seçenek", - .switching_lang = "Dil değiştiriliyor...", - .welcome = "diline hoş geldiniz!", - .welcome_ = NULL, - .for_more = "komutunu kullanabilirsiniz", - .s_and_v = "Sessiz ve ayrıntılı günlüklenme aynı anda kullanılamaz!", - .try_h = "Daha fazla bilgi", - .usage_head = "Kullanımı", - .depr_opt_str = "KALDIRILMIŞ SEÇENEK", - .switched_opt_str = "DEĞİŞTİRİLMİŞ SEÇENEK", - .not_changed_opt = "değiştirilmedi", - .compiler_str = "derleyicisi", - .version_str = "versiyon", - .bin_str = "yapı", - .part_name = "Bölüm adı", - .part_type = "Dinamik bölüm", - .fs_str = "Dosya sistemi", - .unknw_str = "bilinmeyen", - .by_str = "Çeviriyi yapan(lar):", - .yes = "evet", - .no = "hayır" + .lang_by_s = "YZBruh", + .language = "Türkçe", + .lang_prefix = "tr", + .not_logical = "Bu cihaz mantıksal (logical) bölümlere sahip değil!", + .not_file = "Bu bir dosya değil", + .not_dir = "Bu bir dizin değil", + .not_in_dev = "Bu bir şakamı? Bunun /dev dizini ile bir ilgisi yok (içermiyor). Bu hatayla karşılaşmak istemiyorsanız zorlama (force) modu kullanın.", + .not_open = "Açılamıyor", + .not_block = "Belirtilen bölüm bir blok değil. Yani aslında bu bir bölüm bile değil (disk). Bu hatayı almak için şanslı olmak gerek..! Bu hatayla karşılaşmak istemiyorsanız zorlama (force) modu kullanın.", + .not_read = "Veri okunamıyor", + .not_readdir = "Dizin verisi okunamıyor", + .not_write = "Veri yazılamıyor", + .not_gen = "Oluşturulamıyor", + .no_root = "Root erişimi tespit edilemedi! Lütfen root erişimi ile çalıştırın.", + .expected_backup_arg = "Beklenen yedekleme argümanı 2 (bir tanesi zorunlu değil), alınan", + .expected_flash_arg = "Beklenen flaş argümanı 2, alınan", + .expected_format_arg = "Beklenen format argümanı 2, alınan", + .expected_partsz_arg = "Beklenen partition-size argümanı 1, alınan", + .missing_operand = "İşlem belirtilmedi", + .multiple_wiewers = "Birden fazla görüntüleme işlemi yapan fonksiyonlar bir arada kullanılamaz. Aynı anda sadece bir tanesi kullanılabilir.", + .symbol_rule = "Bir seçeneğin argümanını verirken argüman önüne '-' sembolü getirilemez. Sembolü kaldırın ve tekrar deneyin.", + .req_part_name = "Bölüm adı gereklidir.", + .part_not_found = "Bölüm bulunamadı! Belki mantıksal (logical) bir bölümdür?", + .unsupported_fs = "Formatlayıcı: desteklenmeyen dosya sistemi:", + .cannot_stat = "Durumu tespit edilemedi", + .ffile_more_part = "Flaşlanacak dosyanın boyutu mevcut bölüm boyutundan fazla. Bu hatayla karşılaşmak istemiyorsanız zorlama (force) modu kullanın (bunu yapmanız asla önerilmez).", + .cannot_get_bsz = "Bölüm blok boyutu tespit edilemedi!", + .format_fail = "Formatlama başarısız oldu. Bazı şeyler zarar görmüş olabilir!", + .fail_get_psize = "Bölüm boyutu alınamadı", + .depr_backup_opt = "Yedek için artık bu seçeneği kullanamazsınız.", + .depr_flash_opt = "Flaşlama için artık bu seçeneği kullanamazsınız.", + .depr_format_opt = "Formatlama için artıi bu seçeneği kullanamazsınız.", + .depr_Vlicense_opt = "Gereksiz seçeneklere bellek yok!", + .depr_ch_list_opt = "Listeleme için -p seçeneğini kullanabilirsiniz.", + .depr_ch_sp_opt = "Özel arama dizini belirtmek için -P (--search-path) seçeneğini kullanabilirsiniz.", + .logical_warn = "Bu cihaz mantıksal (logical) bölümlere sahip.", + .not_spec_opt = "Seçenek değil, şuan gerekli argümanları verin", + .some_spec = "Seçenek belirtmiş olabilirsiniz fakat, ana işlem belirtmedikçe pek işe yaramazlar", + .ab_warn = "Bu cihazın bazı bölümleri A/B kullanıyor.", + .out_not_spec = "Çıktı dosya adı belirtilmedi. Oluşturulan çıktı adı", + .no_found_on_process = "İşlenmekte olan dosya bulunamadı. Bir şeyler yanlış...", + .please_rerun = "Lütfen yeniden çalıştırın", + .part_disk_sz = "Bölümün (yedek) boyutu", + .flash_file_sz = "Flaşlanacak dosyanın boyutu", + .flash_file_sz_fail = "Uyarı: flaşlanacak dosyanın boyutu tespit edilemedi.", + .part_disk_sz_fail = "Uyarı: bölüm boyutunun boyutu tespit edilemedi.", + .found_defdevice = "Varsayılan bir cihaz bulundu", + .cannot_find_any_defdevice = "Herhangi bir varsayılan cihaz bulunamadı", + .cannot_find_device = "Cihaz bulunamadı", + .not_spec_device_on_args = "Cihaz argümanlarda belirtilmedi. Varsayılan cihazlar aranıyor (pmt tarafından tanımlanan cihazlar)", + .starting_parted = "Parted başlatılıyor", + .exited_with = "Parted çıkış kodu", + .unknown_opr = "Bilinmeyen işlem", + .req_an_arg = "bu seçenek argüman gerektirir", + .list_of_general = "Genel bölümlerin listesi", + .list_of_logc = "Mantıksal (logical) bölümlerin listesi", + .success_backup = "Başarılı. Çıktı", + .success_flash = "Başarılı.", + .success_format = "Formatlama başarılı", + .formatting = "Formatlanıyor", + .warn = "UYARI", + .fatal = "KRİTİK HATA", + .is_requires_arg = "bir argüman gereklidir", + .list_of_supported = "Desteklenen dillerin listesi", + .only_partsz_args = "Sadece bölüm boyutu görüntülemesinde kullanılabilecek bayraklar tespit edildi. Ama hedef bu değil", + .unknw_arg = "bilinmeyen seçenek", + .switching_lang = "Dil değiştiriliyor...", + .welcome = "diline hoş geldiniz!", + .welcome_ = NULL, + .for_more = "komutunu kullanabilirsiniz", + .s_and_v = "Sessiz ve ayrıntılı günlüklenme aynı anda kullanılamaz!", + .try_h = "Daha fazla bilgi", + .usage_head = "Kullanımı", + .depr_opt_str = "KALDIRILMIŞ SEÇENEK", + .switched_opt_str = "DEĞİŞTİRİLMİŞ SEÇENEK", + .not_changed_opt = "değiştirilmedi", + .compiler_str = "derleyicisi", + .version_str = "versiyon", + .bin_str = "yapı", + .part_name = "Bölüm adı", + .part_type = "Dinamik bölüm", + .fs_str = "Dosya sistemi", + .unknw_str = "bilinmeyen", + .by_str = "Çeviriyi yapan(lar):", + .yes = "evet", + .no = "hayır" }; struct langdb_docs LangDocEn = { - .docs_strs_l1 = "[OPTIONS] backup PARTITION [OUTPUT] [OPTIONS]...", - .docs_strs_l2 = "[OPTIONS] flash PARTITION FILE [OPTIONS]...", - .docs_strs_l3 = "[OPTIONS] format PARTITION FILE_SYSTEM[ext/2/3/4] [OPTIONS]...", - .docs_strs_l4 = "[OPTIONS] partition-size PARTITION [OPTIONS]...", - .docs_strs_l5 = "Options", - .docs_strs_l6 = "It is meant to determine whether the target partition is logical.", - .docs_strs_l7 = "It is meant to specify a custom partition search path. Only normal partitions (default: /dev/block/by-name).", - .docs_strs_l8 = "List partitions.", - .docs_strs_l9 = "Information and warning messages are silenced in normal work.", - .docs_strs_l10 = "Force mode. Some things are ignored.", - .docs_strs_l11 = "Verbose mode. Print detailed informations etc.", - .docs_strs_l12 = "Set current language.", - .docs_strs_l13 = "See version.", - .docs_strs_l14 = "See this help message.", - .docs_strs_l15 = "partition-size flags", - .docs_strs_l16 = "Only the size is displayed, the partition name etc is not displayed.", - .docs_strs_l17 = "Display size as byte.", - .docs_strs_l18 = "Display size as kilobyte.", - .docs_strs_l19 = "Display size as megabyte.", - .docs_strs_l20 = "Display size as gigabyte.", - .docs_strs_l21 = "Examples", - .docs_strs_l22 = "Report bugs and suggestions to", - .or_str = "or", - .usage_docstr = "Usage" + .docs_strs_l1 = "[OPTIONS] start-parted [DEVICE]...", + .docs_strs_l2 = "[OPTIONS] backup PARTITION [OUTPUT] [OPTIONS]...", + .docs_strs_l3 = "[OPTIONS] flash PARTITION FILE [OPTIONS]...", + .docs_strs_l4 = "[OPTIONS] format PARTITION FILE_SYSTEM[ext/2/3/4] [OPTIONS]...", + .docs_strs_l5 = "[OPTIONS] partition-size PARTITION [OPTIONS]...", + .docs_strs_l6 = "Options", + .docs_strs_l7 = "It is meant to determine whether the target partition is logical.", + .docs_strs_l8 = "It is meant to specify a custom partition search path. Only normal partitions (default: /dev/block/by-name).", + .docs_strs_l9 = "List partitions.", + .docs_strs_l10 = "Information and warning messages are silenced in normal work.", + .docs_strs_l11 = "Force mode. Some things are ignored.", + .docs_strs_l12 = "Verbose mode. Print detailed informations etc.", + .docs_strs_l13 = "Set current language.", + .docs_strs_l14 = "See supported languages.", + .docs_strs_l15 = "See version.", + .docs_strs_l16 = "See this help message.", + .docs_strs_l17 = "partition-size flags", + .docs_strs_l18 = "Only the size is displayed, the partition name etc is not displayed.", + .docs_strs_l19 = "Display size as byte.", + .docs_strs_l20 = "Display size as kilobyte.", + .docs_strs_l21 = "Display size as megabyte.", + .docs_strs_l22 = "Display size as gigabyte.", + .docs_strs_l23 = "Examples", + .docs_strs_l24 = "Report bugs and suggestions to", + .or_str = "or", + .usage_docstr = "Usage" }; struct langdb_docs LangDocTr = { - .docs_strs_l1 = "[SEÇENEKLER] backup BÖLÜM [ÇIKTI] [SEÇENEKLER]...", - .docs_strs_l2 = "[SEÇENEKLER] flash BÖLÜM DOSYA [SEÇENEKLER]...", - .docs_strs_l3 = "[SEÇENEKLER] format BÖLÜM DOSYA_SİSTEMİ[ext/2/3/4] [SEÇENEKLER]...", - .docs_strs_l4 = "[SEÇENEKLER] partition-size BÖLÜM [SEÇENEKLER]...", - .docs_strs_l5 = "Seçenekler", - .docs_strs_l6 = "Mantıksal (logical) bölüm ile işlem yapın.", - .docs_strs_l7 = "Özel bir bölüm arama dizini belirtin. Sadece normal bölümler içindir (Varsayılan: /dev/block/by-name).", - .docs_strs_l8 = "Bölümler listelenir.", - .docs_strs_l9 = "Bilgi ve uyarı mesajları susturulur.", - .docs_strs_l10 = "Zorlama modu. Bazı şeyler göz ardı edilir.", - .docs_strs_l11 = "Ayrıntılı bilgi modu. Daha fazla bilgi mesajı verilir.", - .docs_strs_l12 = "Mevcut dili ayarlayın.", - .docs_strs_l13 = "Sürümü görüntüleyin.", - .docs_strs_l14 = "Bu yardım mesajını görüntüleyin.", - .docs_strs_l15 = "partition-size bayrakları", - .docs_strs_l16 = "Boyut görüntülenirken bölüm adı vb gibi bilgiler verilmez, sadece boyut görüntülenir.", - .docs_strs_l17 = "Boyutu bayt olarak görüntüleyin.", - .docs_strs_l18 = "Boyutu kilobayt olarak görüntüleyin.", - .docs_strs_l19 = "Boyutu megabyte olarak görüntüleyin.", - .docs_strs_l20 = "Boyutu gigabayt olarak görüntüleyin.", - .docs_strs_l21 = "Örnekler", - .docs_strs_l22 = "Sorunları ve önerileri şuraya bildirin:", - .or_str = "yada", - .usage_docstr = "Kullanımı" + .docs_strs_l1 = "[SEÇENEKLER] start-parted [CİHAZ]...", + .docs_strs_l2 = "[SEÇENEKLER] backup BÖLÜM [ÇIKTI] [SEÇENEKLER]...", + .docs_strs_l3 = "[SEÇENEKLER] flash BÖLÜM DOSYA [SEÇENEKLER]...", + .docs_strs_l4 = "[SEÇENEKLER] format BÖLÜM DOSYA_SİSTEMİ[ext/2/3/4] [SEÇENEKLER]...", + .docs_strs_l5 = "[SEÇENEKLER] partition-size BÖLÜM [SEÇENEKLER]...", + .docs_strs_l6 = "Seçenekler", + .docs_strs_l7 = "Mantıksal (logical) bölüm ile işlem yapın.", + .docs_strs_l8 = "Özel bir bölüm arama dizini belirtin. Sadece normal bölümler içindir (Varsayılan: /dev/block/by-name).", + .docs_strs_l9 = "Bölümler listelenir.", + .docs_strs_l10 = "Bilgi ve uyarı mesajları susturulur.", + .docs_strs_l11 = "Zorlama modu. Bazı şeyler göz ardı edilir.", + .docs_strs_l12 = "Ayrıntılı bilgi modu. Daha fazla bilgi mesajı verilir.", + .docs_strs_l13 = "Mevcut dili ayarlayın.", + .docs_strs_l14 = "Desteklenen dilleri görüntüleyin.", + .docs_strs_l15 = "Sürümü görüntüleyin.", + .docs_strs_l16 = "Bu yardım mesajını görüntüleyin.", + .docs_strs_l17 = "partition-size bayrakları", + .docs_strs_l18 = "Boyut görüntülenirken bölüm adı vb gibi bilgiler verilmez, sadece boyut görüntülenir.", + .docs_strs_l19 = "Boyutu bayt olarak görüntüleyin.", + .docs_strs_l20 = "Boyutu kilobayt olarak görüntüleyin.", + .docs_strs_l21 = "Boyutu megabyte olarak görüntüleyin.", + .docs_strs_l22 = "Boyutu gigabayt olarak görüntüleyin.", + .docs_strs_l23 = "Örnekler", + .docs_strs_l24 = "Sorunları ve önerileri şuraya bildirin:", + .or_str = "yada", + .usage_docstr = "Kullanımı" }; } /* namespace Display */ diff --git a/jni/PartitionManager/ListPartitions.cpp b/jni/PartitionManager/ListPartitions.cpp index 4ad4eb9..dd38852 100755 --- a/jni/PartitionManager/ListPartitions.cpp +++ b/jni/PartitionManager/ListPartitions.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,10 +16,10 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_DEBUGERS -#define INC_DIRENT -#define INC_STRINGKEYS +#define INC_MAIN_LIBS 1 +#define INC_DEBUGERS 1 +#define INC_DIRENT 1 +#define INC_STRINGKEYS 1 #include @@ -33,108 +33,108 @@ static DIR* Directory; static int ListDir(const string& TargetDir, const bool ListTargetDir = false) { - static int count; - struct dirent **List; - bool ListParts = (ListTargetDir) ? true : false; + static int count; + struct dirent **List; + bool ListParts = (ListTargetDir) ? true : false; - Directory = nullptr; - Directory = opendir(TargetDir.c_str()); + Directory = nullptr; + Directory = opendir(TargetDir.c_str()); - if (ListParts) - { - count = scandir(TargetDir.c_str(), &List, nullptr, alphasort); + if (ListParts) + { + count = scandir(TargetDir.c_str(), &List, nullptr, alphasort); - if (count < 0) - LOGE("%s: `%s': %s\n", - Display::UsingDispString->not_readdir, - TargetDir.c_str(), - strqerror()); + if (count < 0) + LOGE("%s: `%s': %s\n", + Display::UsingDispString->not_readdir, + TargetDir.c_str(), + strqerror()); - for (int i = 0; i < count; i++) - { - if (List[i]->d_name[0] != '.' - && strncmp(List[i]->d_name, "com.", 4) != 0 - && strcmp(List[i]->d_name, "by-uuid") != 0 - && strcmp(List[i]->d_name, "userdata") != 0) - LOGD(" - [ %-16s ]\n", List[i]->d_name); + for (int i = 0; i < count; i++) + { + if (List[i]->d_name[0] != '.' + && strncmp(List[i]->d_name, "com.", 4) != 0 + && strcmp(List[i]->d_name, "by-uuid") != 0 + && strcmp(List[i]->d_name, "userdata") != 0) + LOGD(" - [ %-16s ]\n", List[i]->d_name); - free(List[i]); - } + free(List[i]); + } - free(List); - List = nullptr; + free(List); + List = nullptr; - goto directory; - } + goto directory; + } directory: - if (Directory != nullptr) - { - closedir(Directory); - return 0; - } - else - return -1; + if (Directory != nullptr) + { + closedir(Directory); + return 0; + } + else + return -1; - return 2; + return 2; } /* list existing partitions */ int PartitionManager::ListPartitions(void) { - VLOGD("Selecting search path...\n"); - string AccessDir = (Config.UseCustomSearchPath) ? Strings::CustomSearchPath : CUR_DEV_SP; + VLOGD("Selecting search path...\n"); + string AccessDir = (Config.UseCustomSearchPath) ? Strings::CustomSearchPath : CUR_DEV_SP; - VLOGD("Trying to access `%s'...\n", AccessDir.c_str()); - if (ListDir(AccessDir) != 0) - { - if (!Config.ForceMode) - LOGE("%s: `%s': %s\n", - Display::UsingDispString->not_open, - AccessDir.c_str(), - strqerror()); - else - return 1; - } - else - { - LOGD("%s:\n", Display::UsingDispString->list_of_general); - ListDir(AccessDir, true); - } + VLOGD("Trying to access `%s'...\n", AccessDir.c_str()); + if (ListDir(AccessDir) != 0) + { + if (!Config.ForceMode) + LOGE("%s: `%s': %s\n", + Display::UsingDispString->not_open, + AccessDir.c_str(), + strqerror()); + else + return 1; + } + else + { + LOGD("%s:\n", Display::UsingDispString->list_of_general); + ListDir(AccessDir, true); + } - if (Config.UsesLogical) - { - VLOGD("Checking for listing `%s'...\n", LGC_DEV_SP); + if (Config.UsesLogical) + { + VLOGD("Checking for listing `%s'...\n", LGC_DEV_SP); - if (ListDir(LGC_DEV_SP) != 0) - LOGE("%s: `%s': %s\n", - Display::UsingDispString->not_open, - LGC_DEV_SP, - strqerror()); - else - { - LOGD("\n%s:\n", Display::UsingDispString->list_of_logc); - ListDir(LGC_DEV_SP, true); - } - } + if (ListDir(LGC_DEV_SP) != 0) + LOGE("%s: `%s': %s\n", + Display::UsingDispString->not_open, + LGC_DEV_SP, + strqerror()); + else + { + LOGD("\n%s:\n", Display::UsingDispString->list_of_logc); + ListDir(LGC_DEV_SP, true); + } + } - VLOGD("(if have) warnings are printed...\n"); + VLOGD("(if have) warnings are printed...\n"); - if (Config.UsesLogical) - { - LOGD("\n"); - LOGW("%s\n", Display::UsingDispString->logical_warn); - } + if (Config.UsesLogical) + { + LOGD("\n"); + LOGW("%s\n", Display::UsingDispString->logical_warn); + } - if (Config.UsesSlots) - { - if (!Config.UsesLogical) - LOGD("\n"); + if (Config.UsesSlots) + { + if (!Config.UsesLogical) + LOGD("\n"); - LOGW("%s\n", Display::UsingDispString->ab_warn); - } + LOGW("%s\n", Display::UsingDispString->ab_warn); + } - return 0; + return 0; } /* end of code */ diff --git a/jni/PartitionManager/PartedUtils.cpp b/jni/PartitionManager/PartedUtils.cpp new file mode 100755 index 0000000..cd2f534 --- /dev/null +++ b/jni/PartitionManager/PartedUtils.cpp @@ -0,0 +1,137 @@ +/* By YZBruh */ + +/** + * Copyright 2024 Partition Manager + * + * 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. + */ + +#define INC_MAIN_LIBS 1 +#define INC_STRINGKEYS 1 +#define INC_DEBUGERS 1 +#define INC_PTHREAD 1 + +/* using by new devices */ +#define DEFAULT_DEVICE_NEW "/dev/block/sda" + +/* using by old devices */ +#define DEFAULT_DEVICE_OLD "/dev/block/mmcblk0" + +/** + * These macros will be added/deleted/modified + * according to user feedback. + */ + +#include +#include + +static bool started = false, o_ended = false; +static int ret = 0; +static pthread_mutex_t plock = PTHREAD_MUTEX_INITIALIZER; + +extern "C" void* __start_parted(void* dummy_arg); +extern "C" void* __watch_parted(void* dummy_arg); + +bool PartitionManager::SearchDevice(const string& DevicePath) +{ + VLOGD("Check '%s'.\n", DevicePath.c_str()); + + if (PartitionManager::GetState(DevicePath, "none") != 0) { + VLOGD("Cannot find '%s'.\n", DevicePath.c_str()); + return false; + } else VLOGD("Founded: '%s'.\n", DevicePath.c_str()); + + return true; +} + +bool PartitionManager::SearchDefaultDevices(void) +{ + VLOGD("Searching '%s'.\n", DEFAULT_DEVICE_NEW); + if (PartitionManager::SearchDevice(DEFAULT_DEVICE_NEW)) { + PartitionManager::Strings::Device = DEFAULT_DEVICE_NEW; + return true; + } + + VLOGD("Searching '%s'.\n", DEFAULT_DEVICE_NEW); + if (PartitionManager::SearchDevice(DEFAULT_DEVICE_OLD)) { + PartitionManager::Strings::Device = DEFAULT_DEVICE_OLD; + return true; + } + + return false; +} + +void* __watch_parted(void* dummy_arg) +{ + while (1) { + pthread_mutex_lock(&plock); + + if (started) { + if (o_ended) { + pthread_mutex_unlock(&plock); + return NULL; + } + if (set_ret) { + LOGD("%s: %d.\n", + PartitionManager::Display::UsingDispString->exited_with, + parted_ret); + pthread_mutex_unlock(&plock); + return NULL; + } + } else { + VLOGD("Parted is still not started...\n"); + sleep(1); + } + + pthread_mutex_unlock(&plock); + usleep(1000); + } +} + +void* __start_parted(void* dummy_arg) +{ + VLOGD("Generating arguments...\n"); + char* arguments[] = { + "parted-pmt", + (char*)PartitionManager::Strings::Device.c_str(), + }; + + LOGD("%s...\n", PartitionManager::Display::UsingDispString->starting_parted); + VLOGD("Calling parted_main...\n"); + + pthread_mutex_lock(&plock); + started = true; + pthread_mutex_unlock(&plock); + ret = parted_main(2, arguments); + pthread_mutex_lock(&plock); + o_ended = true; + pthread_mutex_unlock(&plock); + sleep(1); + + return NULL; +} + +int PartitionManager::StartParted(void) +{ + pthread_t t1, t2; + + pthread_create(&t1, NULL, __start_parted, NULL); + pthread_create(&t2, NULL, __watch_parted, NULL); + + pthread_join(t1, NULL); + pthread_join(t2, NULL); + + return ret; +} + +/* end of code */ diff --git a/jni/PartitionManager/PartitionManager.cpp b/jni/PartitionManager/PartitionManager.cpp index 535a919..909c4ab 100755 --- a/jni/PartitionManager/PartitionManager.cpp +++ b/jni/PartitionManager/PartitionManager.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,12 +16,12 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_DEBUGERS -#define INC_STAT -#define INC_LIBGEN -#define INC_STRINGKEYS -#define IS_MAIN +#define INC_MAIN_LIBS 1 +#define INC_DEBUGERS 1 +#define INC_STAT 1 +#define INC_LIBGEN 1 +#define INC_STRINGKEYS 1 +#define IS_MAIN 1 #include #include @@ -31,37 +31,43 @@ /* add value to variables that are added globally and are not worth */ namespace PartitionManager { - namespace Strings { - string OutputName = ""; - string CustomSearchPath = ""; - string TargetPartition = ""; - string TargetFlashFile = ""; - string TargetFormatFS = ""; - string PartitionType = ""; - string ExecutingName = ""; - string CurrentLanguage = ""; - } /* namespace Strings */ + namespace Strings { + string OutputName = ""; + string CustomSearchPath = ""; + string TargetPartition = ""; + string TargetFlashFile = ""; + string TargetFormatFS = ""; + string PartitionType = ""; + string Device = ""; + string ExecutingName = ""; + string CurrentLanguage = ""; + } /* namespace Strings */ - namespace Integers { - int PartSizeViewType = VIEW_AS_MIB; - } /* namespace Integers */ + namespace Integers { + int PartSizeViewType = VIEW_AS_MIB; + } /* namespace Integers */ } /* namespace PartitionManager */ /* configure struct body */ struct Configuration Config { - .UseLogical = false, - .UseCustomSearchPath = false, - .UsesSlots = false, - .UsesLogical = false, - .OnlyViewSize = false, - .SilentEnabled = false, - .FlashMode = false, - .BackupMode = false, - .FormatMode = false, - .PartSizeViewMode = false, - .ForceMode = false, - .VerboseMode = false, - .InstalledOnTermux = false + /* general boolean tab */ + .UseLogical = false, + .UseCustomSearchPath = false, + .UsesSlots = false, + .UsesLogical = false, + .SilentEnabled = false, + .FlashMode = false, + .BackupMode = false, + .FormatMode = false, + .PartedMode = false, + .PartSizeViewMode = false, + .PartUtilMode = false, + .ForceMode = false, + .VerboseMode = false, + .InstalledOnTermux = false, + + /* part-size argument bools */ + .OnlyViewSize = false, }; /* some variables. for parsing and processing arguments */ @@ -73,6 +79,7 @@ static bool MultipleViewers = false; static bool SetLanguageReq = false; static bool SomeSpec = false; static bool PartSizeArgSpeficed = false; +static bool ListSupportedLanguages = false; static char* SpeficedLanguagePr; static string Option; static string Target; @@ -86,172 +93,167 @@ namespace PartitionManager { * He controls whether the '-' sign at * the beginning of the given word */ -static void +static inline void CheckOptSymbol(const string& Symbol) { - if (!Symbol.empty()) - { - if (strncmp(Symbol.c_str(), "-", 1) == 0) - LOGE("%s\n", SymbolRule.c_str()); - } + if (!Symbol.empty()) { + if (strncmp(Symbol.c_str(), "-", 1) == 0) + LOGE("%s\n", SymbolRule.c_str()); + } } -static bool +static inline bool ControlArg(char* &ArgvHolder) { - if (ArgvHolder[0] != '-') return true; + if (ArgvHolder[0] != '-') return true; - return false; + return false; } } /* namespace PartitionManager */ static void -deprecated(const char &opt, const char* &deprecation_message, const char* opt_long = "ISNULL") +deprecated(const char &opt, const char* &deprecation_message, const char* opt_long = "IS_EMPTY") { - VLOGE("Deprecated Option: -%c (--%s). Printing error...\n", opt, opt_long); - DEPR_HANDLE(opt, opt_long, deprecation_message); + VLOGE("Deprecated Option: -%c (--%s). Printing error...\n", opt, opt_long); + DEPR_HANDLE(opt, opt_long, deprecation_message); - exit(1); + exit(1); } -static void +static inline void PrSpInput(const string& sp) { - Config.UseCustomSearchPath = true; - PartitionManager::Strings::CustomSearchPath = sp; - PartitionManager::CheckOptSymbol(PartitionManager::Strings::CustomSearchPath); + Config.UseCustomSearchPath = true; + PartitionManager::Strings::CustomSearchPath = sp; + PartitionManager::CheckOptSymbol(PartitionManager::Strings::CustomSearchPath); } class PartitionManagerBase { protected: - char* BaseFunctionName = nullptr; - int StartCode = -1; - bool IsRequiredOnlyOneArg = false; + char* BaseFunctionName = nullptr; + int StartCode = -1; + bool IsRequiredOnlyOneArg = false; public: - void CallTargetBaseFunction(void) - { - VLOGD("[class]: Call PartitionManagerMain(%d)\n", StartCode); - PartitionManager::PartitionManagerMain(StartCode); - } + void CallTargetBaseFunction(void) + { + VLOGD("[class]: Call PartitionManagerMain(%d)\n", StartCode); + PartitionManager::PartitionManagerMain(StartCode); + } - void GenericNumericalController(int& searchOn, int& total, const char* &MissingArgMessage) - { - if (total <= searchOn) - { - VLOGE("[class]: Missing argument total (for %s function).\n", BaseFunctionName); - LOGE("%s 0.\n", MissingArgMessage); - } + void GenericNumericalController(int& searchOn, int& total, const char* &MissingArgMessage) + { + if (total <= searchOn) { + VLOGE("[class]: Missing argument total (for %s function).\n", BaseFunctionName); + LOGE("%s 0.\n", MissingArgMessage); + } - if (!IsRequiredOnlyOneArg) - { - if (total <= (searchOn + 1)) - { - VLOGE("[class]: Missing argument total (for %s function).\n", BaseFunctionName); - LOGE("%s 1.\n", MissingArgMessage); - } - } - } + if (!IsRequiredOnlyOneArg) { + if (total <= (searchOn + 1)) { + VLOGE("[class]: Missing argument total (for %s function).\n", BaseFunctionName); + LOGE("%s 1.\n", MissingArgMessage); + } + } + } - virtual void ArgumentProcessor(int& searchOn, int& total, char** &arguments) { /* dummy */ } + virtual void ArgumentProcessor(int& searchOn, int& total, char** &arguments) { /* dummy */ } }; class PartitionManagerBackup : public PartitionManagerBase { public: - void ArgumentProcessor(int& searchOn, int& total, char** &arguments) override - { - BaseFunctionName = "backup"; - StartCode = 1; - IsRequiredOnlyOneArg = true; + void ArgumentProcessor(int& searchOn, int& total, char** &arguments) override + { + BaseFunctionName = "backup"; + StartCode = 1; + IsRequiredOnlyOneArg = true; - GenericNumericalController(searchOn, total, PartitionManager::Display::UsingDispString->expected_backup_arg); + GenericNumericalController(searchOn, total, PartitionManager::Display::UsingDispString->expected_backup_arg); - if (PartitionManager::ControlArg(arguments[searchOn])) - PartitionManager::Strings::TargetPartition = arguments[searchOn]; - else - LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); + if (PartitionManager::ControlArg(arguments[searchOn])) + PartitionManager::Strings::TargetPartition = arguments[searchOn]; + else + LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); - PartitionManager::Strings::OutputName = PartitionManager::Strings::TargetPartition; + PartitionManager::Strings::OutputName = PartitionManager::Strings::TargetPartition; - if (total > (searchOn + 1) && PartitionManager::ControlArg(arguments[(searchOn + 1)])) - { - VLOGD("[class]: Non-mandatory argument was detected and retrieved (for %s function).\n", BaseFunctionName); - PartitionManager::Strings::OutputName = arguments[(searchOn + 1)]; - } + if (total > (searchOn + 1) && PartitionManager::ControlArg(arguments[(searchOn + 1)])) { + VLOGD("[class]: Non-mandatory argument was detected and retrieved (for %s function).\n", BaseFunctionName); + PartitionManager::Strings::OutputName = arguments[(searchOn + 1)]; + } - PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetPartition); - PartitionManager::CheckOptSymbol(PartitionManager::Strings::OutputName); - } + PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetPartition); + PartitionManager::CheckOptSymbol(PartitionManager::Strings::OutputName); + } }; class PartitionManagerFlash : public PartitionManagerBase { public: - void ArgumentProcessor(int& searchOn, int& total, char** &arguments) override - { - BaseFunctionName = "flash"; - StartCode = 2; - IsRequiredOnlyOneArg = false; + void ArgumentProcessor(int& searchOn, int& total, char** &arguments) override + { + BaseFunctionName = "flash"; + StartCode = 2; + IsRequiredOnlyOneArg = false; - GenericNumericalController(searchOn, total, PartitionManager::Display::UsingDispString->expected_flash_arg); + GenericNumericalController(searchOn, total, PartitionManager::Display::UsingDispString->expected_flash_arg); - if (PartitionManager::ControlArg(arguments[searchOn])) - PartitionManager::Strings::TargetPartition = arguments[searchOn]; - else - LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); + if (PartitionManager::ControlArg(arguments[searchOn])) + PartitionManager::Strings::TargetPartition = arguments[searchOn]; + else + LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); - if (PartitionManager::ControlArg(arguments[(searchOn + 1)])) - PartitionManager::Strings::TargetFlashFile = arguments[(searchOn + 1)]; - else - LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); + if (PartitionManager::ControlArg(arguments[(searchOn + 1)])) + PartitionManager::Strings::TargetFlashFile = arguments[(searchOn + 1)]; + else + LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); - PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetFlashFile); - PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetPartition); - } + PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetFlashFile); + PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetPartition); + } }; class PartitionManagerFormat : public PartitionManagerBase { public: - void ArgumentProcessor(int& searchOn, int& total, char** &arguments) override - { - BaseFunctionName = "format"; - StartCode = 3; - IsRequiredOnlyOneArg = false; + void ArgumentProcessor(int& searchOn, int& total, char** &arguments) override + { + BaseFunctionName = "format"; + StartCode = 3; + IsRequiredOnlyOneArg = false; - GenericNumericalController(searchOn, total, PartitionManager::Display::UsingDispString->expected_format_arg); + GenericNumericalController(searchOn, total, PartitionManager::Display::UsingDispString->expected_format_arg); - if (PartitionManager::ControlArg(arguments[searchOn])) - PartitionManager::Strings::TargetPartition = arguments[searchOn]; - else - LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); + if (PartitionManager::ControlArg(arguments[searchOn])) + PartitionManager::Strings::TargetPartition = arguments[searchOn]; + else + LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); - if (PartitionManager::ControlArg(arguments[(searchOn + 1)])) - PartitionManager::Strings::TargetFormatFS = arguments[(searchOn + 1)]; - else - LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); + if (PartitionManager::ControlArg(arguments[(searchOn + 1)])) + PartitionManager::Strings::TargetFormatFS = arguments[(searchOn + 1)]; + else + LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); - PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetFormatFS); - PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetPartition); - } + PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetFormatFS); + PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetPartition); + } }; class PartitionManagerPartSize : public PartitionManagerBase { public: - void ArgumentProcessor(int& searchOn, int& total, char** &arguments) override - { - BaseFunctionName = "partition-size"; - StartCode = 4; - IsRequiredOnlyOneArg = true; + void ArgumentProcessor(int& searchOn, int& total, char** &arguments) override + { + BaseFunctionName = "partition-size"; + StartCode = 4; + IsRequiredOnlyOneArg = true; - GenericNumericalController(searchOn, total, PartitionManager::Display::UsingDispString->expected_partsz_arg); + GenericNumericalController(searchOn, total, PartitionManager::Display::UsingDispString->expected_partsz_arg); - if (PartitionManager::ControlArg(arguments[searchOn])) - PartitionManager::Strings::TargetPartition = arguments[searchOn]; - else - LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); + if (PartitionManager::ControlArg(arguments[searchOn])) + PartitionManager::Strings::TargetPartition = arguments[searchOn]; + else + LOGE("%s.\n", PartitionManager::Display::UsingDispString->not_spec_opt); - PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetPartition); - } + PartitionManager::CheckOptSymbol(PartitionManager::Strings::TargetPartition); + } }; /* Generate classes */ @@ -267,585 +269,571 @@ namespace PartitionManager { static void ParseMainOperations(int argc, char** argv) { - SearchOnMainInt = -1; - Base = &BaseTemplate; + SearchOnMainInt = -1; + Base = &BaseTemplate; - VLOGD("Starting cycle for trapping main options...\n"); - while (1) - { - if ((argc - 1) == 0) - { - VLOGD("argc - 1 = 0. Breaking...\n"); - break; - } + VLOGD("Starting cycle for trapping main options...\n"); + while (1) { + if ((argc - 1) == 0) { + VLOGD("argc - 1 = 0. Breaking...\n"); + break; + } - if (argv[(argc - 1)][0] == '-') - { - VLOGD("argv[%d] starts with '-'. Continue.\n", (argc - 1)); - argc--; - continue; - } - else - { - Target = argv[(argc - 1)]; - SearchOnMainInt = argc; - VLOGD("argv[%d] = %s\n", (argc - 1), argv[(argc - 1)]); - VLOGD("Variable of \"Target\" (string): %s\n", Target.c_str()); + if (argv[(argc - 1)][0] == '-') { + VLOGD("argv[%d] starts with '-'. Continue.\n", (argc - 1)); + argc--; + continue; + } else { + Target = argv[(argc - 1)]; + SearchOnMainInt = argc; + VLOGD("argv[%d] = %s\n", (argc - 1), argv[(argc - 1)]); + VLOGD("Variable of \"Target\" (string): %s\n", Target.c_str()); - if (Target == "backup") - { - Base = &BackupArgProcessorBase; - Config.BackupMode = true; - break; - } - else if (Target == "flash") - { - Base = &FlashArgProcessorBase; - Config.FlashMode = true; - break; - } - else if (Target == "format") - { - Base = &FormatArgProcessorBase; - Config.FormatMode = true; - break; - } - else if (Target == "partition-size") - { - Base = &PartSizeArgProcessorBase; - Config.PartSizeViewMode = true; - break; - } - else - { - Target = ""; - SearchOnMainInt = -1; - argc--; - continue; - } - } + if (Target == "backup") { + Base = &BackupArgProcessorBase; + Config.BackupMode = true; + break; + } else if (Target == "flash") { + Base = &FlashArgProcessorBase; + Config.FlashMode = true; + break; + } else if (Target == "format") { + Base = &FormatArgProcessorBase; + Config.FormatMode = true; + break; + } else if (Target == "partition-size") { + Base = &PartSizeArgProcessorBase; + Config.PartSizeViewMode = true; + break; + } else if (Target == "start-parted") { + Config.PartedMode = true; + break; + } else { + Target = ""; + SearchOnMainInt = -1; + argc--; + continue; + } + } - break; - } + break; + } } static char** ParseStdin(int argc, char** argv) { - StdinArgcTotal = 0; - char buf[256]; + StdinArgcTotal = 0; + char buf[256]; - VLOGD("Checking stdin status...\n"); - if (!isatty(fileno(stdin))) - { - VLOGD("stdin is not empty.\n"); - VLOGD("Parsing stdin arguments...\n"); + VLOGD("Checking stdin status...\n"); + if (!isatty(fileno(stdin))) { + VLOGD("stdin is not empty.\n"); + VLOGD("Parsing stdin arguments...\n"); - while (fgets(buf, sizeof(buf), stdin) != nullptr) - { - buf[strcspn(buf, "\n")] = 0; + while (fgets(buf, sizeof(buf), stdin) != nullptr) { + buf[strcspn(buf, "\n")] = 0; - argv[argc] = strdup(buf); - argc++; - StdinArgcTotal++; - } + argv[argc] = strdup(buf); + argc++; + StdinArgcTotal++; + } - VLOGD("Parsing completed.\n"); - } + VLOGD("Parsing completed.\n"); + } - VLOGD("stdin empty.\n"); - return argv; + VLOGD("stdin empty.\n"); + return argv; } static void ParseOptions(int argc, char** argv) { - argc--; - argv++; + argc--; + argv++; - VLOGD("Parsing standart arguments...\n"); - while (argc && argv[0] != nullptr) - { - if (argv[0][0] != '-') - { - argc--; - argv++; - continue; - } + VLOGD("Parsing standart arguments...\n"); + while (argc && argv[0] != nullptr) { + if (argv[0][0] != '-') { + argc--; + argv++; + continue; + } - for (int x = 1; true; x++) - { - Option = argv[0]; - SomeSpec = true; + for (int x = 1; true; x++) { + Option = argv[0]; + SomeSpec = true; - switch (argv[0][x]) - { - case '-': - if (Option == "--backup") - deprecated('b', - PartitionManager::Display::UsingDispString->depr_backup_opt, - "backup"); - else if (Option == "--flash") - deprecated('F', - PartitionManager::Display::UsingDispString->depr_flash_opt, - "flash"); - else if (Option == "--format") - deprecated('r', - PartitionManager::Display::UsingDispString->depr_format_opt, - "format"); - else if (Option == "--license") - deprecated('L', - PartitionManager::Display::UsingDispString->depr_Vlicense_opt, - "license"); - else if (Option == "--context") - deprecated('c', - PartitionManager::Display::UsingDispString->depr_ch_sp_opt, - "context"); - else if (Option == "--logical") - { - VLOGD("Logical partition type specified.\n"); - LogicalSpeficy = true; - break; - } - else if (Option == "--search-path") - { - VLOGD("Custom search path specified.\n"); - if (argc > 1) - PrSpInput(argv[1]); - else - LOGE("--search-path: %s.\n%s `%s --help' %s.\n", \ - PartitionManager::Display::UsingDispString->is_requires_arg, \ - PartitionManager::Display::UsingDispString->try_h, \ - PartitionManager::Strings::ExecutingName.c_str(), \ - PartitionManager::Display::UsingDispString->for_more); - break; - } - else if (Option == "--list") - { - VLOGD("It was requested to list the partitions.\n"); - ListRequired = true; - if (ViewVersion || ViewHelp) - MultipleViewers = true; - break; - } - else if (Option == "--force") - { - VLOGD("Force mode speficed.\n"); - Config.ForceMode = true; - break; - } - else if (Option == "--verbose") - { - VLOGD("Verbose mode speficed.\n"); - Config.VerboseMode = true; - break; - } - else if (Option == "--silent") - { - VLOGD("Silent mode speficed.\n"); - Config.SilentEnabled = true; - break; - } - else if (Option == "--set-language") - { - VLOGD("It was requested to adjust the language.\n"); - if (argc > 1) - { - VLOGE("Language inputs: getting inputs...\n"); - SetLanguageReq = true; - SpeficedLanguagePr = argv[1]; - } - else - LOGE("--set-language: %s.\n%s `%s --help' %s.\n", - PartitionManager::Display::UsingDispString->is_requires_arg, - PartitionManager::Display::UsingDispString->try_h, - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->for_more); - break; - } - else if (Option == "--as-byte") - { - PartSizeArgSpeficed = true; - PartitionManager::Integers::PartSizeViewType = VIEW_AS_BYTE; - break; - } - else if (Option == "--as-kilobyte") - { - PartSizeArgSpeficed = true; - PartitionManager::Integers::PartSizeViewType = VIEW_AS_KIB; - break; - } - else if (Option == "--as-megabyte") - { - PartSizeArgSpeficed = true; - PartitionManager::Integers::PartSizeViewType = VIEW_AS_MIB; - break; - } - else if (Option == "--as-gigabyte") - { - PartSizeArgSpeficed = true; - PartitionManager::Integers::PartSizeViewType = VIEW_AS_GIB; - break; - } - else if (Option == "--only-size") - { - PartSizeArgSpeficed = true; - Config.OnlyViewSize = true; - break; - } - else if (Option == "--version") - { - VLOGD("The version info was requested to be displayed.\n"); - ViewVersion = true; - if (ListRequired || ViewHelp) - MultipleViewers = true; - break; - } - else if (Option == "--help") - { - VLOGD("The help message was requested to be displayed.\n"); - ViewHelp = true; - if (ViewVersion || ListRequired) - MultipleViewers = true; - break; - } - else - { - VLOGE("Unknown Option: %s\n", argv[0]); - LOGE("%s: %s.\n%s `%s --help' %s.\n", argv[0], - PartitionManager::Display::UsingDispString->unknw_arg, - PartitionManager::Display::UsingDispString->try_h, - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->for_more); - } - break; - case 'b': - deprecated('b', - PartitionManager::Display::UsingDispString->depr_backup_opt, - "backup"); - break; - case 'F': - deprecated('F', - PartitionManager::Display::UsingDispString->depr_flash_opt, - "flash"); - break; - case 'r': - deprecated('r', - PartitionManager::Display::UsingDispString->depr_format_opt, - "format"); - break; - case 'L': - deprecated('L', - PartitionManager::Display::UsingDispString->depr_Vlicense_opt, - "license"); - break; - case 'D': - deprecated('D', - PartitionManager::Display::UsingDispString->depr_ch_list_opt); - break; - case 'c': - deprecated('c', - PartitionManager::Display::UsingDispString->depr_ch_sp_opt, - "context"); - case 'l': - VLOGD("Logical partition type specified.\n"); - LogicalSpeficy = true; - continue; - case 'P': - VLOGD("Custom search path speficed.\n"); - if (argc > 1) - { - VLOGE("Search-path inputs: getting inputs...\n"); - PrSpInput(argv[1]); - continue; - } - else - LOGE("-P: %s.\n%s `%s --help' %s.\n", - PartitionManager::Display::UsingDispString->is_requires_arg, - PartitionManager::Display::UsingDispString->try_h, - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->for_more); - break; - case 'p': - VLOGD("It was requested to list the partitions.\n"); - ListRequired = true; - if (ViewVersion || ViewHelp) - MultipleViewers = true; - continue; - case 'f': - VLOGD("Force mode speficed.\n"); - Config.ForceMode = true; - continue; - case 'V': - VLOGD("Verbose mode speficed.\n"); - Config.VerboseMode = true; - continue; - case 's': - VLOGD("Silent mode speficed.\n"); - Config.SilentEnabled = true; - continue; - case 'S': - VLOGD("It was requested to adjust the language.\n"); - if (argc > 1) - { - VLOGE("Language inputs: getting inputs...\n"); - SetLanguageReq = true; - SpeficedLanguagePr = argv[1]; - continue; - } - else - LOGE("-S: %s.\n%s `%s --help' %s.\n", - PartitionManager::Display::UsingDispString->is_requires_arg, - PartitionManager::Display::UsingDispString->try_h, - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->for_more); - case 'v': - VLOGD("The version info was requested to be displayed.\n"); - ViewVersion = true; - if (ListRequired || ViewHelp) - MultipleViewers = true; - continue; - case '\0': - break; - default: - VLOGE("Unknown Option: -%c\n", argv[0][x]); - LOGE("-%c: %s.\n%s `%s --help' %s.\n", - argv[0][x], - PartitionManager::Display::UsingDispString->unknw_arg, - PartitionManager::Display::UsingDispString->try_h, - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->for_more); - } + switch (argv[0][x]) { + case '-': + if (Option == "--backup") + deprecated('b', + PartitionManager::Display::UsingDispString->depr_backup_opt, + "backup"); + else if (Option == "--flash") + deprecated('F', + PartitionManager::Display::UsingDispString->depr_flash_opt, + "flash"); + else if (Option == "--format") + deprecated('r', + PartitionManager::Display::UsingDispString->depr_format_opt, + "format"); + else if (Option == "--license") + deprecated('L', + PartitionManager::Display::UsingDispString->depr_Vlicense_opt, + "license"); + else if (Option == "--context") + deprecated('c', + PartitionManager::Display::UsingDispString->depr_ch_sp_opt, + "context"); + else if (Option == "--logical") { + VLOGD("Logical partition type specified.\n"); + LogicalSpeficy = true; + break; + } else if (Option == "--search-path") { + VLOGD("Custom search path specified.\n"); + if (argc > 1) + PrSpInput(argv[1]); + else + LOGE("--search-path: %s.\n%s `%s --help' %s.\n", \ + PartitionManager::Display::UsingDispString->is_requires_arg, \ + PartitionManager::Display::UsingDispString->try_h, \ + PartitionManager::Strings::ExecutingName.c_str(), \ + PartitionManager::Display::UsingDispString->for_more); + break; + } else if (Option == "--list") { + VLOGD("It was requested to list the partitions.\n"); + ListRequired = true; + if (ViewVersion || ViewHelp) + MultipleViewers = true; + break; + } else if (Option == "--force") { + VLOGD("Force mode speficed.\n"); + Config.ForceMode = true; + break; + } else if (Option == "--verbose") { + VLOGD("Verbose mode speficed.\n"); + Config.VerboseMode = true; + break; + } else if (Option == "--silent") { + VLOGD("Silent mode speficed.\n"); + Config.SilentEnabled = true; + break; + } else if (Option == "--set-language") { + VLOGD("It was requested to adjust the language.\n"); + if (argc > 1) { + VLOGE("Language inputs: getting inputs...\n"); + SetLanguageReq = true; + SpeficedLanguagePr = argv[1]; + } + else + LOGE("--set-language: %s.\n%s `%s --help' %s.\n", + PartitionManager::Display::UsingDispString->is_requires_arg, + PartitionManager::Display::UsingDispString->try_h, + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->for_more); + break; + } else if (Option == "--view-langs") { + ListSupportedLanguages = true; + } else if (Option == "--as-byte") { + PartSizeArgSpeficed = true; + PartitionManager::Integers::PartSizeViewType = VIEW_AS_BYTE; + break; + } else if (Option == "--as-kilobyte") { + PartSizeArgSpeficed = true; + PartitionManager::Integers::PartSizeViewType = VIEW_AS_KIB; + break; + } else if (Option == "--as-megabyte") { + PartSizeArgSpeficed = true; + PartitionManager::Integers::PartSizeViewType = VIEW_AS_MIB; + break; + } else if (Option == "--as-gigabyte") { + PartSizeArgSpeficed = true; + PartitionManager::Integers::PartSizeViewType = VIEW_AS_GIB; + break; + } else if (Option == "--only-size") { + PartSizeArgSpeficed = true; + Config.OnlyViewSize = true; + break; + } else if (Option == "--version") { + VLOGD("The version info was requested to be displayed.\n"); + ViewVersion = true; + if (ListRequired || ViewHelp) + MultipleViewers = true; + break; + } else if (Option == "--help") { + VLOGD("The help message was requested to be displayed.\n"); + ViewHelp = true; + if (ViewVersion || ListRequired) + MultipleViewers = true; + break; + } else { + VLOGE("Unknown Option: %s\n", argv[0]); + LOGE("%s: %s.\n%s `%s --help' %s.\n", argv[0], + PartitionManager::Display::UsingDispString->unknw_arg, + PartitionManager::Display::UsingDispString->try_h, + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->for_more); + } + break; + case 'b': + deprecated('b', + PartitionManager::Display::UsingDispString->depr_backup_opt, + "backup"); + break; + case 'F': + deprecated('F', + PartitionManager::Display::UsingDispString->depr_flash_opt, + "flash"); + break; + case 'r': + deprecated('r', + PartitionManager::Display::UsingDispString->depr_format_opt, + "format"); + break; + case 'L': + deprecated('L', + PartitionManager::Display::UsingDispString->depr_Vlicense_opt, + "license"); + break; + case 'D': + deprecated('D', + PartitionManager::Display::UsingDispString->depr_ch_list_opt); + break; + case 'c': + deprecated('c', + PartitionManager::Display::UsingDispString->depr_ch_sp_opt, + "context"); + case 'l': + VLOGD("Logical partition type specified.\n"); + LogicalSpeficy = true; + continue; + case 'P': + VLOGD("Custom search path speficed.\n"); + if (argc > 1) { + VLOGE("Search-path inputs: getting inputs...\n"); + PrSpInput(argv[1]); + continue; + } else + LOGE("-P: %s.\n%s `%s --help' %s.\n", + PartitionManager::Display::UsingDispString->is_requires_arg, + PartitionManager::Display::UsingDispString->try_h, + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->for_more); + break; + case 'p': + VLOGD("It was requested to list the partitions.\n"); + ListRequired = true; + if (ViewVersion || ViewHelp) + MultipleViewers = true; + continue; + case 'f': + VLOGD("Force mode speficed.\n"); + Config.ForceMode = true; + continue; + case 'V': + VLOGD("Verbose mode speficed.\n"); + Config.VerboseMode = true; + continue; + case 's': + VLOGD("Silent mode speficed.\n"); + Config.SilentEnabled = true; + continue; + case 'S': + VLOGD("It was requested to adjust the language.\n"); + if (argc > 1) { + VLOGE("Language inputs: getting inputs...\n"); + SetLanguageReq = true; + SpeficedLanguagePr = argv[1]; + continue; + } else + LOGE("-S: %s.\n%s `%s --help' %s.\n", + PartitionManager::Display::UsingDispString->is_requires_arg, + PartitionManager::Display::UsingDispString->try_h, + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->for_more); + case 'U': + ListSupportedLanguages = true; + continue; + case 'v': + VLOGD("The version info was requested to be displayed.\n"); + ViewVersion = true; + if (ListRequired || ViewHelp) + MultipleViewers = true; + continue; + case '\0': + break; + default: + VLOGE("Unknown Option: -%c\n", argv[0][x]); + LOGE("-%c: %s.\n%s `%s --help' %s.\n", + argv[0][x], + PartitionManager::Display::UsingDispString->unknw_arg, + PartitionManager::Display::UsingDispString->try_h, + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->for_more); + } - break; - } + break; + } - argc--; - argv++; - } + argc--; + argv++; + } +} + +static bool +GetDeviceFromArguments(int argc, char** argv) +{ + VLOGD("Checking arguments for finding device path...\n"); + + if (argc <= 2) return false; + if (argc < 3) return false; + + if (strncmp(argv[2], "/dev", 4) != 0) return false; + else PartitionManager::Strings::Device = argv[2]; + + VLOGD("Device path founded in arguments.\n"); + return true; } } /* namespace PartitionManager */ int main(int argc, char** argv) { - PartitionManager::Strings::ExecutingName = basename(argv[0]); + PartitionManager::Strings::ExecutingName = basename(argv[0]); - for (int i = 0; i <= (argc - 1); i++) - { - if (strncmp(argv[i], "-V", 2) == 0 || strcmp(argv[i], "--verbose") == 0) - Config.VerboseMode = true; - else - continue; - } + for (int i = 0; i <= (argc - 1); i++) { + if (strncmp(argv[i], "-V", 2) == 0 || strcmp(argv[i], "--verbose") == 0) + Config.VerboseMode = true; + else + continue; + } - VLOGD("Main function started. Setting up locale. Calling 'setlocale '\n"); - setlocale(LC_ALL, ""); + VLOGD("Main function started. Setting up locale. Calling 'setlocale '\n"); + setlocale(LC_ALL, ""); - char** args = PartitionManager::ParseStdin(argc, argv); - argc = (argc + StdinArgcTotal); - /* It's not gonna be okay even 0. */ + char** args = PartitionManager::ParseStdin(argc, argv); + argc = (argc + StdinArgcTotal); + /* It's not gonna be okay even 0. */ - /* load language */ - VLOGD("Loading language... Calling LoadLanguage()...\n"); - if (!PartitionManager::LoadLanguage()) - { - cout << "LoadLanguage() process failed..!" << endl; - abort(); - } + /* load language */ + VLOGD("Loading language... Calling LoadLanguage()...\n"); + if (!PartitionManager::LoadLanguage()) { + cout << "LoadLanguage() process failed..!" << endl; + cout << "Loading english language!!! (pmt-defaults)" << endl; + PartitionManager::Display::UsingDispString = &PartitionManager::Display::LangEn; + PartitionManager::Strings::CurrentLanguage = "en"; + } - SymbolRule = PartitionManager::Display::UsingDispString->symbol_rule; - int SearchResult = 3; + SymbolRule = PartitionManager::Display::UsingDispString->symbol_rule; + int SearchResult = 3; - PartitionManager::ParseOptions(argc, argv); - PartitionManager::ParseMainOperations(argc, argv); + PartitionManager::ParseOptions(argc, argv); + PartitionManager::ParseMainOperations(argc, argv); - if (Config.SilentEnabled && Config.VerboseMode) - { - VLOGE("Silent and verbose mode is one-way.\n"); - cout << PartitionManager::Strings::ExecutingName << ": " << PartitionManager::Display::UsingDispString->s_and_v << endl; - exit(1); - } + if (Config.SilentEnabled && Config.VerboseMode) { + VLOGE("Silent and verbose mode is one-way.\n"); + cout << PartitionManager::Strings::ExecutingName << ": " << PartitionManager::Display::UsingDispString->s_and_v << endl; + exit(1); + } - VLOGD("Checking last language switch status...\n"); - if (PartitionManager::CleanSWPoint()) - { - VLOGD("Last transactions found that language was changed between.\n"); + VLOGD("Checking last language switch status...\n"); + if (PartitionManager::CleanSWPoint()) { + VLOGD("Last transactions found that language was changed between.\n"); - if (PartitionManager::Display::UsingDispString->welcome_ != nullptr) - LOGD("%s", PartitionManager::Display::UsingDispString->welcome_); + if (PartitionManager::Display::UsingDispString->welcome_ != nullptr) + LOGD("%s", PartitionManager::Display::UsingDispString->welcome_); - LOGD("%s %s %s %s.\n", - PartitionManager::Display::UsingDispString->language, - PartitionManager::Display::UsingDispString->welcome, - PartitionManager::Display::UsingDispString->by_str, - PartitionManager::Display::UsingDispString->lang_by_s); - } + LOGD("%s %s %s %s.\n", + PartitionManager::Display::UsingDispString->language, + PartitionManager::Display::UsingDispString->welcome, + PartitionManager::Display::UsingDispString->by_str, + PartitionManager::Display::UsingDispString->lang_by_s); + } - /* check argument total */ - VLOGD("argc (arguments) total: %d.\n", argc); - if (argc < 2) - LOGE("%s.\n%s '%s --help' %s.\n", - PartitionManager::Display::UsingDispString->missing_operand, - PartitionManager::Display::UsingDispString->try_h, - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->for_more); + /* check argument total */ + VLOGD("argc (arguments) total: %d.\n", argc); + if (argc < 2) + LOGE("%s.\n%s '%s --help' %s.\n", + PartitionManager::Display::UsingDispString->missing_operand, + PartitionManager::Display::UsingDispString->try_h, + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->for_more); - /* stop the program if multiple viewer is used */ - if (MultipleViewers) - { - VLOGE("Multiple viewer option selected!\n"); - LOGE("%s\n", PartitionManager::Display::UsingDispString->multiple_wiewers); - } + /* stop the program if multiple viewer is used */ + if (MultipleViewers) { + VLOGE("Multiple viewer option selected!\n"); + LOGE("%s\n", PartitionManager::Display::UsingDispString->multiple_wiewers); + } - if (!Config.PartSizeViewMode && PartSizeArgSpeficed) - { - VLOGE("Related flags were detected, although some partition size was not requested.\n"); - LOGE("%s.\n", PartitionManager::Display::UsingDispString->only_partsz_args); - } + if (!Config.PartSizeViewMode && PartSizeArgSpeficed) { + VLOGE("Related flags were detected, although some partition size was not requested.\n"); + LOGE("%s.\n", PartitionManager::Display::UsingDispString->only_partsz_args); + } - /* controller to handle viewer */ - if (ViewHelp) - { - VLOGD("The help message was asked to display. It's displayed... Calling DisplayHelp()\n"); - PartitionManager::DisplayHelp(); - return 0; - } - else if (ViewVersion) - { - VLOGD("The version info message was asked to display. It's displayed... Calling DisplayVersion()\n"); - PartitionManager::DisplayVersion(); - return 0; - } - else if (ListRequired) - { - VLOGD("Partitions were asked to be listed. It's listed... Calling CheckRoot() (root check is required), CheckDevPoint() (for generating warnings etc.) and ListPartitions()\n"); - PartitionManager::CheckRoot(); - VLOGD("CheckRoot() completed.\n"); - PartitionManager::CheckDevPoint(); - VLOGD("CheckDevPoint() completed.\n"); - return PartitionManager::ListPartitions(); - } + if (ListSupportedLanguages) { + PartitionManager::DisplaySupportedLanguages(); + return 0; + } - if (SetLanguageReq) - { - VLOGD("The language was asked to adjust. Calling SetLanguage()...\n"); - LOGD("%s: %s\n", - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->switching_lang); - PartitionManager::SetLanguage(SpeficedLanguagePr, 0); - sleep(2); - VLOGD("SetLanguage() completed.\n"); - LOGD("%s: %s.\n", - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->please_rerun); - return 0; - } + /* controller to handle viewer */ + if (ViewHelp) { + VLOGD("The help message was asked to display. It's displayed... Calling DisplayHelp()\n"); + PartitionManager::DisplayHelp(); + return 0; + } else if (ViewVersion) { + VLOGD("The version info message was asked to display. It's displayed... Calling DisplayVersion()\n"); + PartitionManager::DisplayVersion(); + return 0; + } else if (ListRequired) { + VLOGD("Partitions were asked to be listed. It's listed... Calling CheckRoot() (root check is required), CheckDevPoint() (for generating warnings etc.) and ListPartitions()\n"); + PartitionManager::CheckRoot(); + VLOGD("CheckRoot() completed.\n"); + PartitionManager::CheckDevPoint(); + VLOGD("CheckDevPoint() completed.\n"); + return PartitionManager::ListPartitions(); + } - if (Target.empty()) - { - VLOGE("There's no job to do.\n"); - LOGD("%s: %s.\n", - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->missing_operand); + if (SetLanguageReq) { + VLOGD("The language was asked to adjust. Calling SetLanguage()...\n"); + LOGD("%s: %s\n", + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->switching_lang); + PartitionManager::SetLanguage(SpeficedLanguagePr, 0); - if (SomeSpec) - LOGD("%s.\n", PartitionManager::Display::UsingDispString->some_spec); + sleep(2); - LOGD("%s '%s --help' %s.\n", - PartitionManager::Display::UsingDispString->try_h, - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->for_more); - exit(1); - } + VLOGD("SetLanguage() completed.\n"); + LOGD("%s: %s.\n", + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->please_rerun); - Base->ArgumentProcessor(SearchOnMainInt, argc, args); + return 0; + } - if (Config.FormatMode) - { - VLOGD("File system name specified for formatting is being contaminated...\n"); - if (PartitionManager::Strings::TargetFormatFS != "ext4" \ - && PartitionManager::Strings::TargetFormatFS != "ext3" \ - && PartitionManager::Strings::TargetFormatFS != "ext2") - { - VLOGE("Unsupported file system: %s.\n", PartitionManager::Strings::TargetFormatFS.c_str()); - LOGE("%s: %s\n", - PartitionManager::Display::UsingDispString->unsupported_fs, - PartitionManager::Strings::TargetFormatFS.c_str()); - } - } + if (Target.empty()) { + VLOGE("There's no job to do.\n"); + LOGD("%s: %s.\n", + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->missing_operand); - /* checks */ - VLOGD("Checking root status... Calling CheckRoot()...\n"); - PartitionManager::CheckRoot(); - VLOGD("Checking A/B and logical device status... Calling CheckDevPoint()...\n"); - PartitionManager::CheckDevPoint(); + if (SomeSpec) + LOGD("%s.\n", PartitionManager::Display::UsingDispString->some_spec); - if (LogicalSpeficy) - { - VLOGD("Logical partition type speficed. Checking partition statust's...\n"); - if (Config.UsesLogical) - Config.UseLogical = true; - else - LOGE("%s\n", PartitionManager::Display::UsingDispString->not_logical); - } + LOGD("%s '%s --help' %s.\n", + PartitionManager::Display::UsingDispString->try_h, + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->for_more); - if (Config.FlashMode) - { - VLOGD("The status of the specified file for flashing is being checked...\n"); - SearchResult = PartitionManager::GetState(PartitionManager::Strings::TargetFlashFile); + exit(1); + } - if (SearchResult == 1) - LOGE("%s: `%s': %s\n", - PartitionManager::Display::UsingDispString->cannot_stat, - PartitionManager::Strings::TargetFlashFile.c_str(), - strqerror()); - else if (SearchResult == -1) - LOGE("`%s': %s\n", - PartitionManager::Strings::TargetFlashFile.c_str(), - PartitionManager::Display::UsingDispString->not_file); - } + if (Config.PartedMode) { + VLOGD("Checking root status... Calling CheckRoot()...\n"); + PartitionManager::CheckRoot(); - /* custom search path checker */ - if (Config.UseCustomSearchPath) - { - VLOGD("The status of the \"dev\" is controlled in the specified custom /dev search path...\n"); - if (strncmp(PartitionManager::Strings::CustomSearchPath.c_str(), "/dev", 4) != 0) - { - if (!Config.ForceMode) - LOGE("%s\n", PartitionManager::Display::UsingDispString->not_in_dev); - } + VLOGD("Parted terminal open requested.\n"); - VLOGD("The specified custom /dev search path is being put in countless...\n"); - SearchResult = PartitionManager::GetState(PartitionManager::Strings::CustomSearchPath, "dir"); + if (!PartitionManager::GetDeviceFromArguments(argc, argv)) { + LOGW("%s...\n", PartitionManager::Display::UsingDispString->not_spec_device_on_args); + VLOGD("Device path not found in arguments. Searching default devices...\n"); - if (SearchResult == 1) - LOGE("%s: `%s': %s\n", - PartitionManager::Display::UsingDispString->cannot_stat, - PartitionManager::Strings::CustomSearchPath.c_str(), - strqerror()); - else if (SearchResult == -1) - LOGE("`%s': %s\n", - PartitionManager::Strings::CustomSearchPath.c_str(), - PartitionManager::Display::UsingDispString->not_dir); - } + if (!PartitionManager::SearchDefaultDevices()) + LOGE("%s.\n", PartitionManager::Display::UsingDispString->cannot_find_any_defdevice); + } else { + if (!PartitionManager::SearchDevice(PartitionManager::Strings::Device)) + LOGE("'%s': %s: %s\n", + PartitionManager::Strings::Device.c_str(), + PartitionManager::Display::UsingDispString->cannot_find_device, + strqerror()); + } - VLOGD("The partition specification status is controlled...\n"); - if (PartitionManager::Strings::TargetPartition.empty()) - { - if (!Config.ForceMode) - LOGE("%s\n%s `%s --help' %s\n", - PartitionManager::Display::UsingDispString->req_part_name, - PartitionManager::Display::UsingDispString->try_h, - PartitionManager::Strings::ExecutingName.c_str(), - PartitionManager::Display::UsingDispString->for_more); - } - else - { - VLOGD("The call of main operations is being checked in case of the call...\n"); - if (!Target.empty()) - Base->CallTargetBaseFunction(); - } + int ret = PartitionManager::StartParted(); + LOGD("%s: %d.\n", + PartitionManager::Display::UsingDispString->exited_with, + ret); + + return ret; + } + + Base->ArgumentProcessor(SearchOnMainInt, argc, args); + + if (Config.FormatMode) { + VLOGD("File system name specified for formatting is being contaminated...\n"); + if (PartitionManager::Strings::TargetFormatFS != "ext4" \ + && PartitionManager::Strings::TargetFormatFS != "ext3" \ + && PartitionManager::Strings::TargetFormatFS != "ext2") { + VLOGE("Unsupported file system: %s.\n", PartitionManager::Strings::TargetFormatFS.c_str()); + LOGE("%s: %s\n", + PartitionManager::Display::UsingDispString->unsupported_fs, + PartitionManager::Strings::TargetFormatFS.c_str()); + } + } + + /* checks */ + VLOGD("Checking root status... Calling CheckRoot()...\n"); + PartitionManager::CheckRoot(); + VLOGD("Checking A/B and logical device status... Calling CheckDevPoint()...\n"); + PartitionManager::CheckDevPoint(); + + if (LogicalSpeficy) { + VLOGD("Logical partition type speficed. Checking partition statust's...\n"); + if (Config.UsesLogical) + Config.UseLogical = true; + else + LOGE("%s\n", PartitionManager::Display::UsingDispString->not_logical); + } + + if (Config.FlashMode) { + VLOGD("The status of the specified file for flashing is being checked...\n"); + SearchResult = PartitionManager::GetState(PartitionManager::Strings::TargetFlashFile); + + if (SearchResult == 1) + LOGE("%s: `%s': %s\n", + PartitionManager::Display::UsingDispString->cannot_stat, + PartitionManager::Strings::TargetFlashFile.c_str(), + strqerror()); + else if (SearchResult == -1) + LOGE("`%s': %s\n", + PartitionManager::Strings::TargetFlashFile.c_str(), + PartitionManager::Display::UsingDispString->not_file); + } + + /* custom search path checker */ + if (Config.UseCustomSearchPath) { + VLOGD("The status of the \"dev\" is controlled in the specified custom /dev search path...\n"); + if (strncmp(PartitionManager::Strings::CustomSearchPath.c_str(), "/dev", 4) != 0) { + if (!Config.ForceMode) + LOGE("%s\n", PartitionManager::Display::UsingDispString->not_in_dev); + } + + VLOGD("The specified custom /dev search path is being put in countless...\n"); + SearchResult = PartitionManager::GetState(PartitionManager::Strings::CustomSearchPath, "dir"); + + if (SearchResult == 1) + LOGE("%s: `%s': %s\n", + PartitionManager::Display::UsingDispString->cannot_stat, + PartitionManager::Strings::CustomSearchPath.c_str(), + strqerror()); + else if (SearchResult == -1) + LOGE("`%s': %s\n", + PartitionManager::Strings::CustomSearchPath.c_str(), + PartitionManager::Display::UsingDispString->not_dir); + } + + VLOGD("The partition specification status is controlled...\n"); + if (PartitionManager::Strings::TargetPartition.empty()) { + if (!Config.ForceMode) + LOGE("%s\n%s `%s --help' %s\n", + PartitionManager::Display::UsingDispString->req_part_name, + PartitionManager::Display::UsingDispString->try_h, + PartitionManager::Strings::ExecutingName.c_str(), + PartitionManager::Display::UsingDispString->for_more); + } else { + VLOGD("The call of main operations is being checked in case of the call...\n"); + if (!Target.empty()) + Base->CallTargetBaseFunction(); + } } /* end of code */ diff --git a/jni/PartitionManager/PartitionTool.cpp b/jni/PartitionManager/PartitionTool.cpp index 36261be..bb0e291 100755 --- a/jni/PartitionManager/PartitionTool.cpp +++ b/jni/PartitionManager/PartitionTool.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,7 +16,7 @@ * limitations under the License. */ -#define INC_MAIN_LIBS +#define INC_MAIN_LIBS 1 #include #include @@ -24,51 +24,51 @@ static int GetProperty(const char* _Nonnull property, const char* _Nonnull val1, const char* _Nullable val2 = nullptr) { - char val[PROP_VALUE_MAX]; - int len = __system_property_get(property, val); + char val[PROP_VALUE_MAX]; + int len = __system_property_get(property, val); - VLOGD("Get property value: '%s'\n", property); - if (len > 0) - { - VLOGD("%s=%s\n", property, val); + VLOGD("Get property value: '%s'\n", property); + if (len > 0) + { + VLOGD("%s=%s\n", property, val); - VLOGD("Comparing '%s' property value '%s'\n", property, val1); - if (strcmp(val, val1) == 0) - { - VLOGD("'%s' is '%s'. Stop (0).\n", property, val1); - return 0; - } - else - { - VLOGE("'%s' property is not '%s'. Comparing desired value 2 (if speficed).\n", property, val1); + VLOGD("Comparing '%s' property value '%s'\n", property, val1); + if (strcmp(val, val1) == 0) + { + VLOGD("'%s' is '%s'. Stop (0).\n", property, val1); + return 0; + } + else + { + VLOGE("'%s' property is not '%s'. Comparing desired value 2 (if speficed).\n", property, val1); - if (val2 != nullptr) - { - if (strcmp(val, val2) == 0) - { - VLOGD("'%s' is '%s'.Stop (0).\n", property, val2); - return 0; - } - else - { - VLOGE("'%s' is not '%s'. Stop (1).\n", property, val2); - return 1; - } - } - else - { - VLOGE("'%s' is not '%s'. Stop (1).\n", property, val1); - return 1; - } - } - } - else - { - VLOGE("Cannot get property '%s'. No such property or empty. Stop (1).\n", property); - return 1; - } + if (val2 != nullptr) + { + if (strcmp(val, val2) == 0) + { + VLOGD("'%s' is '%s'.Stop (0).\n", property, val2); + return 0; + } + else + { + VLOGE("'%s' is not '%s'. Stop (1).\n", property, val2); + return 1; + } + } + else + { + VLOGE("'%s' is not '%s'. Stop (1).\n", property, val1); + return 1; + } + } + } + else + { + VLOGE("Cannot get property '%s'. No such property or empty. Stop (1).\n", property); + return 1; + } - return 2; + return 2; } using namespace PartitionManager; @@ -76,17 +76,17 @@ using namespace PartitionManager; /* check parts */ void PartitionManager::CheckDevPoint(void) { - /* true = ab | false = a only */ - Config.UsesSlots = (GetProperty("ro.boot.slot_suffix", "_a", "_b") == 0 || GetProperty("ro.boot.slot", "_a", "_b") == 0) ? true : false; + /* true = ab | false = a only */ + Config.UsesSlots = (GetProperty("ro.boot.slot_suffix", "_a", "_b") == 0 || GetProperty("ro.boot.slot", "_a", "_b") == 0) ? true : false; - if (Config.UsesSlots) - VLOGW("1 warning generated: A/B partitions status.\n"); + if (Config.UsesSlots) + VLOGW("1 warning generated: A/B partitions status.\n"); - /* true = logical | false = normal */ - Config.UsesLogical = (GetProperty("ro.boot.dynamic_partitions", "true") == 0) ? true : false; + /* true = logical | false = normal */ + Config.UsesLogical = (GetProperty("ro.boot.dynamic_partitions", "true") == 0) ? true : false; - if (Config.UsesLogical) - VLOGW("1 warning generated: logical partitions status.\n"); + if (Config.UsesLogical) + VLOGW("1 warning generated: logical partitions status.\n"); } /* end of code */ diff --git a/jni/PartitionManager/Root.cpp b/jni/PartitionManager/Root.cpp index 8646752..f13eff2 100755 --- a/jni/PartitionManager/Root.cpp +++ b/jni/PartitionManager/Root.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,22 +16,22 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_DEBUGERS -#define INC_STRINGKEYS +#define INC_MAIN_LIBS 1 +#define INC_DEBUGERS 1 +#define INC_STRINGKEYS 1 #include /* root checker function */ void PartitionManager::CheckRoot(void) { - VLOGD("Trying to get UID with 'getuid '\n"); + VLOGD("Trying to get UID with 'getuid '\n"); - if (getuid() != 0) - { - VLOGE("You are not superuser!\n"); - LOGE("%s\n", PartitionManager::Display::UsingDispString->no_root); - } + if (getuid() != 0) + { + VLOGE("You are not superuser!\n"); + LOGE("%s\n", PartitionManager::Display::UsingDispString->no_root); + } } /* end of code */ diff --git a/jni/PartitionManager/Tools.cpp b/jni/PartitionManager/Tools.cpp index 51bdbc7..89e31c2 100755 --- a/jni/PartitionManager/Tools.cpp +++ b/jni/PartitionManager/Tools.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,12 +16,12 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_STAT -#define INC_LIBGEN -#define INC_DEBUGERS -#define INC_TOOLS_REQS -#define INC_STRINGKEYS +#define INC_MAIN_LIBS 1 +#define INC_STAT 1 +#define INC_LIBGEN 1 +#define INC_DEBUGERS 1 +#define INC_TOOLS_REQS 1 +#define INC_STRINGKEYS 1 #include #include @@ -36,70 +36,69 @@ namespace PartitionManager { * it is meant to calculate the size of the quickly given file. * its purpose is for rapid processing */ -static long long +static inline long long CalculateSizeLongLong(const string& fp) { - VLOGD("Calculating file size: `%s'\n", fp.c_str()); + VLOGD("Calculating file size: `%s'\n", fp.c_str()); - VLOGD("Reading `%s' with 'ifstream '\n", fp.c_str()); - ifstream file(fp, ios::binary | ios::ate); + VLOGD("Reading `%s' with 'ifstream '\n", fp.c_str()); + ifstream file(fp, ios::binary | ios::ate); - return (!file) ? -1 : static_cast(file.tellg()); + return (!file) ? -1 : static_cast(file.tellg()); } /** * error that the partition is not found. * It's for quick action. */ -static void +static inline void PartitionNotFound(const string& part) { LOGE("%s: %s\n", part.c_str(), Display::UsingDispString->part_not_found); } /* the partitions are meant to quickly find. */ -static void +static inline void SearchPartition(const string& fp) { - VLOGD("Calling GetState()...\n"); - static int op = GetState(fp, "blk"); + VLOGD("Calling GetState()...\n"); + static int op = GetState(fp, "blk"); - if (op == 1) - PartitionNotFound(basename(fp.c_str())); - else if (op == -1 && !Config.ForceMode) - LOGE("%s\n", Display::UsingDispString->not_block); + if (op == 1) + PartitionNotFound(basename(fp.c_str())); + else if (op == -1 && !Config.ForceMode) + LOGE("%s\n", Display::UsingDispString->not_block); } static void PrintInfo(const ushort_t& pcode, const double& psz, const double& fsz) { - LOGD("##########################################\n"); - LOGD("# --> %s: %s\n", - Display::UsingDispString->part_name, - Strings::TargetPartition.c_str()); - LOGD("# --> %s: %s\n", - Display::UsingDispString->part_type, - (Config.UseLogical) ? Display::UsingDispString->yes : Display::UsingDispString->no); + LOGD("##########################################\n"); + LOGD("# --> %s: %s\n", + Display::UsingDispString->part_name, + Strings::TargetPartition.c_str()); + LOGD("# --> %s: %s\n", + Display::UsingDispString->part_type, + (Config.UseLogical) ? Display::UsingDispString->yes : Display::UsingDispString->no); - if (psz != -1) - LOGD("# --> %s: %.2fMB\n", - Display::UsingDispString->part_disk_sz, - psz); - else - LOGD("# --> %s: %s\n", - Display::UsingDispString->warn, - Display::UsingDispString->part_disk_sz_fail); + if (psz != -1) + LOGD("# --> %s: %.2fMB\n", + Display::UsingDispString->part_disk_sz, + psz); + else + LOGD("# --> %s: %s\n", + Display::UsingDispString->warn, + Display::UsingDispString->part_disk_sz_fail); - if (pcode == 3) - { - if (fsz != -1) - LOGD("# --> %s: %.2fMB\n", - Display::UsingDispString->flash_file_sz, - fsz); - else - LOGW("# --> %s: %s\n", - Display::UsingDispString->warn, - Display::UsingDispString->flash_file_sz_fail); - } + if (pcode == 3) { + if (fsz != -1) + LOGD("# --> %s: %.2fMB\n", + Display::UsingDispString->flash_file_sz, + fsz); + else + LOGW("# --> %s: %s\n", + Display::UsingDispString->warn, + Display::UsingDispString->flash_file_sz_fail); + } - LOGD("##########################################\n"); + LOGD("##########################################\n"); } template @@ -109,48 +108,47 @@ IsDoubleOf1024(T size) { return size % (T)1024 == 0; } static void ReadAndWrite(const string& FNameForMsg, const int& bfsize) { - long long copiedData = 0; - char buffer[bfsize]; + long long copiedData = 0; + char buffer[bfsize]; - while (sourceF.read(buffer, bfsize) && copiedData < Count) - { - streamsize readed_data = sourceF.gcount(); - targetF.write(buffer, readed_data); + while (sourceF.read(buffer, bfsize) && copiedData < Count) { + streamsize readed_data = sourceF.gcount(); + targetF.write(buffer, readed_data); - if (targetF.fail() || targetF.bad()) - LOGF("%s: %s: %s\n", - Display::UsingDispString->not_write, - FNameForMsg.c_str(), - strqerror()); + if (targetF.fail() || targetF.bad()) + LOGF("%s: %s: %s\n", + Display::UsingDispString->not_write, + FNameForMsg.c_str(), + strqerror()); - copiedData += readed_data; - } + copiedData += readed_data; + } } static void OpenSourceFile(const string& fp) { - VLOGD("Trying to open `%s' with 'open '.\n", fp.c_str()); + VLOGD("Trying to open `%s' with 'open '.\n", fp.c_str()); - sourceF.open(fp, ios::binary | ios::in); - if (!sourceF.is_open()) - LOGE("%s: %s: %s\n", - Display::UsingDispString->not_read, - fp.c_str(), - strqerror()); + sourceF.open(fp, ios::binary | ios::in); + if (!sourceF.is_open()) + LOGE("%s: %s: %s\n", + Display::UsingDispString->not_read, + fp.c_str(), + strqerror()); } static void OpenTargetFile(const string& fp) { - VLOGD("Trying to open `%s' with 'open '.\n", fp.c_str()); + VLOGD("Trying to open `%s' with 'open '.\n", fp.c_str()); - targetF.open(fp, ios::binary | ios::out); - if (!targetF.is_open()) - LOGE("%s: %s: %s\n", - Display::UsingDispString->not_gen, - fp.c_str(), - strqerror()); + targetF.open(fp, ios::binary | ios::out); + if (!targetF.is_open()) + LOGE("%s: %s: %s\n", + Display::UsingDispString->not_gen, + fp.c_str(), + strqerror()); } } /* namespace PartitionManager */ @@ -159,172 +157,159 @@ using namespace PartitionManager; int PartitionManager::PartitionManagerMain(const ushort_t& progress_code) { - /* Some required variables */ - string accessPrefix, opName; + /* Some required variables */ + string accessPrefix, opName; - if (Config.UseLogical) - accessPrefix = "/dev/block/mapper/" + Strings::TargetPartition; - else - accessPrefix = (Config.UseCustomSearchPath) ? (Strings::CustomSearchPath) + ("/") + (Strings::TargetPartition) : ("/dev/block/by-name/") + (Strings::TargetPartition); + if (Config.UseLogical) + accessPrefix = "/dev/block/mapper/" + Strings::TargetPartition; + else + accessPrefix = (Config.UseCustomSearchPath) ? (Strings::CustomSearchPath) + ("/") + (Strings::TargetPartition) : ("/dev/block/by-name/") + (Strings::TargetPartition); - VLOGD("Calling SearchPartition() for searching partition (path); `%s'\n", accessPrefix.c_str()); - SearchPartition(accessPrefix); + VLOGD("Calling SearchPartition() for searching partition (path); `%s'\n", accessPrefix.c_str()); + SearchPartition(accessPrefix); - Count = (long long)(CalculateSizeLongLong(accessPrefix) + ((1024 * 1024) * 4)); - const int BFSIZE = (IsDoubleOf1024(CalculateSizeLongLong(accessPrefix))) ? 1024 : 1; - double FlashFileSize = 0; + Count = (long long)(CalculateSizeLongLong(accessPrefix) + ((1024 * 1024) * 4)); + const int BFSIZE = (IsDoubleOf1024(CalculateSizeLongLong(accessPrefix))) ? 1024 : 1; + double FlashFileSize = 0; - double PartitionSize = (double)(static_cast(CalculateSizeLongLong(accessPrefix)) / (1024 * 1024)); - if (!Strings::TargetFlashFile.empty()) - FlashFileSize = (double)(static_cast(CalculateSizeLongLong(Strings::TargetFlashFile)) / (1024 * 1024)); + double PartitionSize = (double)(static_cast(CalculateSizeLongLong(accessPrefix)) / (1024 * 1024)); + if (!Strings::TargetFlashFile.empty()) + FlashFileSize = (double)(static_cast(CalculateSizeLongLong(Strings::TargetFlashFile)) / (1024 * 1024)); - if (progress_code != 4) PrintInfo(progress_code, PartitionSize, FlashFileSize); + if (progress_code != 4) PrintInfo(progress_code, PartitionSize, FlashFileSize); - if (progress_code == 1) - { - OpenSourceFile(accessPrefix); + if (progress_code == 1) { + OpenSourceFile(accessPrefix); - /* determine output */ - if (Strings::OutputName == Strings::TargetPartition) - { - opName = Strings::OutputName + ".img"; - VLOGW("Output not speficed. Selecting automaticly.\n"); - LOGW("%s: %s\n", - Display::UsingDispString->out_not_spec, - opName.c_str()); - } - else - opName = Strings::OutputName; + /* determine output */ + if (Strings::OutputName == Strings::TargetPartition) { + opName = Strings::OutputName + ".img"; + VLOGW("Output not speficed. Selecting automaticly.\n"); + LOGW("%s: %s\n", + Display::UsingDispString->out_not_spec, + opName.c_str()); + } else + opName = Strings::OutputName; - VLOGD("Checking output status...\n"); - if (GetState(opName) == 0) - LOGE("'%s': File exits.\n", opName.c_str()); + VLOGD("Checking output status...\n"); + if (GetState(opName) == 0) + LOGE("'%s': File exits.\n", opName.c_str()); - OpenTargetFile(opName); + OpenTargetFile(opName); - VLOGD("Read (partition) and write (output) 'read, write '\n"); - ReadAndWrite(opName.c_str(), BFSIZE); + VLOGD("Read (partition) and write (output) 'read, write '\n"); + ReadAndWrite(opName.c_str(), BFSIZE); - /* close files */ - sourceF.close(); - targetF.close(); + /* close files */ + sourceF.close(); + targetF.close(); - LOGD("%s: %s\n", - Display::UsingDispString->success_backup, - opName.c_str()); - } - else if (progress_code == 2) - { - if (PartitionSize != -1 && FlashFileSize != -1) - { - if (FlashFileSize > PartitionSize && !Config.ForceMode) - LOGE("%s\n", Display::UsingDispString->ffile_more_part); - } + LOGD("%s: %s\n", + Display::UsingDispString->success_backup, + opName.c_str()); + } else if (progress_code == 2) { + if (PartitionSize != -1 && FlashFileSize != -1) { + if (FlashFileSize > PartitionSize && !Config.ForceMode) + LOGE("%s\n", Display::UsingDispString->ffile_more_part); + } - OpenSourceFile(Strings::TargetFlashFile); - OpenTargetFile(accessPrefix); + OpenSourceFile(Strings::TargetFlashFile); + OpenTargetFile(accessPrefix); - VLOGD("Read (flash file) and write (partition) 'read, write '\n"); - ReadAndWrite(accessPrefix.c_str(), BFSIZE); + VLOGD("Read (flash file) and write (partition) 'read, write '\n"); + ReadAndWrite(accessPrefix.c_str(), BFSIZE); - sourceF.close(); - targetF.close(); + sourceF.close(); + targetF.close(); - LOGD("%s.\n", Display::UsingDispString->success_flash); - } - else if (progress_code == 3) - { - /* get target partition block size */ - VLOGD("Getting block size '%s' with 'statfs '\n", accessPrefix.c_str()); + LOGD("%s.\n", Display::UsingDispString->success_flash); + } else if (progress_code == 3) { + /* get target partition block size */ + VLOGD("Getting block size '%s' with 'statfs '\n", accessPrefix.c_str()); - struct statfs file_sys_inf; - if (statfs(accessPrefix.c_str(), &file_sys_inf) != 0) - LOGE("%s\n", Display::UsingDispString->cannot_get_bsz); + struct statfs file_sys_inf; + if (statfs(accessPrefix.c_str(), &file_sys_inf) != 0) + LOGE("%s\n", Display::UsingDispString->cannot_get_bsz); - /* generate mke2fs argument list */ - VLOGD("Generating mke2fs argument list...\n"); - char bsize[25] = ""; + /* generate mke2fs argument list */ + VLOGD("Generating mke2fs argument list...\n"); + char bsize[25] = ""; #ifdef __LP64__ - sprintf(bsize, "%lu", file_sys_inf.f_bsize); + sprintf(bsize, "%lu", file_sys_inf.f_bsize); #else - sprintf(bsize, "%u", file_sys_inf.f_bsize); + sprintf(bsize, "%u", file_sys_inf.f_bsize); #endif - char* arguments[] = { - "mke2fs-static", - "-Fq", - "-t", - (char*)Strings::TargetFormatFS.c_str(), - "-b", - (char*)bsize, - (char*)accessPrefix.c_str(), - }; + char* arguments[] = { + "mke2fs-static", + "-Fq", + "-t", + (char*)Strings::TargetFormatFS.c_str(), + "-b", + (char*)bsize, + (char*)accessPrefix.c_str(), + }; - LOGD("%s: `%s'. %s: %s\n", - Display::UsingDispString->formatting, - accessPrefix.c_str(), - Display::UsingDispString->fs_str, - Strings::TargetFormatFS.c_str()); + LOGD("%s: `%s'. %s: %s\n", + Display::UsingDispString->formatting, + accessPrefix.c_str(), + Display::UsingDispString->fs_str, + Strings::TargetFormatFS.c_str()); - /* run mke2fs */ - VLOGD("Calling mke2fs_main...\n"); - if (mke2fs_main(sizeof(arguments), arguments) != 0) - LOGF("%s\n", Display::UsingDispString->format_fail); + /* run mke2fs */ + VLOGD("Calling mke2fs_main...\n"); + if (mke2fs_main(sizeof(arguments), arguments) != 0) + LOGF("%s\n", Display::UsingDispString->format_fail); - LOGD("%s.\n", Display::UsingDispString->success_format); - } - else if (progress_code == 4) - { - VLOGD("Getting size of '%s' (long long)\n", accessPrefix.c_str()); - long long psize = (long long)CalculateSizeLongLong(accessPrefix); + LOGD("%s.\n", Display::UsingDispString->success_format); + } else if (progress_code == 4) { + VLOGD("Getting size of '%s' (long long)\n", accessPrefix.c_str()); + long long psize = (long long)CalculateSizeLongLong(accessPrefix); - if (psize == -1) - { - VLOGE("Cannot get partition size!\n"); - LOGE("%s: %s\n", - Display::UsingDispString->fail_get_psize, - strqerror()); - } + if (psize == -1) { + VLOGE("Cannot get partition size!\n"); + LOGE("%s: %s\n", + Display::UsingDispString->fail_get_psize, + strqerror()); + } - static char* SizeType; - static char Holder[50]; + static char* SizeType; + static char Holder[50]; - if (!Config.OnlyViewSize) - { - sprintf(Holder, "%s: ", Strings::TargetPartition.c_str()); + if (!Config.OnlyViewSize) { + sprintf(Holder, "%s: ", Strings::TargetPartition.c_str()); - if (Integers::PartSizeViewType == VIEW_AS_BYTE) SizeType = "B"; - else if (Integers::PartSizeViewType == VIEW_AS_KIB) SizeType = "KB"; - else if (Integers::PartSizeViewType == VIEW_AS_MIB) SizeType = "MB"; - else if (Integers::PartSizeViewType == VIEW_AS_GIB) SizeType = "GB"; - } - else - SizeType = ""; + if (Integers::PartSizeViewType == VIEW_AS_BYTE) SizeType = "B"; + else if (Integers::PartSizeViewType == VIEW_AS_KIB) SizeType = "KB"; + else if (Integers::PartSizeViewType == VIEW_AS_MIB) SizeType = "MB"; + else if (Integers::PartSizeViewType == VIEW_AS_GIB) SizeType = "GB"; + } else + SizeType = ""; - VLOGD("Displaying partition size...\n"); + VLOGD("Displaying partition size...\n"); - if (Integers::PartSizeViewType == VIEW_AS_BYTE) - LOGD("%s%llu%s\n", - Holder, - (long long)psize, - SizeType); - else if (Integers::PartSizeViewType == VIEW_AS_KIB) - LOGD("%s%lu%s\n", - Holder, - (long)(psize / 1024), - SizeType); - else if (Integers::PartSizeViewType == VIEW_AS_MIB) - LOGD("%s%.2f%s\n", - Holder, - (double)(static_cast(psize) / (1024 * 1024)), - SizeType); - else if (Integers::PartSizeViewType == VIEW_AS_GIB) - LOGD("%s%.2f%s\n", - Holder, - (double)(static_cast(psize) / (1024 * 1024 * 1024)), - SizeType); - } + if (Integers::PartSizeViewType == VIEW_AS_BYTE) + LOGD("%s%llu%s\n", + Holder, + (long long)psize, + SizeType); + else if (Integers::PartSizeViewType == VIEW_AS_KIB) + LOGD("%s%lu%s\n", + Holder, + (long)(psize / 1024), + SizeType); + else if (Integers::PartSizeViewType == VIEW_AS_MIB) + LOGD("%s%.2f%s\n", + Holder, + (double)(static_cast(psize) / (1024 * 1024)), + SizeType); + else if (Integers::PartSizeViewType == VIEW_AS_GIB) + LOGD("%s%.2f%s\n", + Holder, + (double)(static_cast(psize) / (1024 * 1024 * 1024)), + SizeType); + } - return 0; + return 0; } /* end of code */ diff --git a/jni/PartitionManager/Version.cpp b/jni/PartitionManager/Version.cpp index 0e0c788..7f6e51e 100755 --- a/jni/PartitionManager/Version.cpp +++ b/jni/PartitionManager/Version.cpp @@ -7,7 +7,7 @@ * 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 + * 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, @@ -16,9 +16,9 @@ * limitations under the License. */ -#define INC_MAIN_LIBS -#define INC_STRINGKEYS -#define VERSIONING +#define INC_MAIN_LIBS 1 +#define INC_STRINGKEYS 1 +#define VERSION_CPP 1 #include #include @@ -27,33 +27,34 @@ using namespace PartitionManager; void PartitionManager::DisplayVersion(void) { - VLOGD("Printing main info...\n"); - LOGD("%s %s %d.%d.%d (%d%d%d / C++) ", - Strings::ExecutingName.c_str(), - Display::UsingDispString->version_str, - PMT_MAJOR, - PMT_MINOR, - PMT_PATCHLEVEL, - PMT_MAJOR, - PMT_MINOR, - PMT_PATCHLEVEL); + VLOGD("Printing main info...\n"); + LOGD("%s %s %d.%d.%d (%d%d%d / C++) ", + Strings::ExecutingName.c_str(), + Display::UsingDispString->version_str, + PMT_MAJOR, + PMT_MINOR, + PMT_PATCHLEVEL, + PMT_MAJOR, + PMT_MINOR, + PMT_PATCHLEVEL); #ifdef __LP64__ - LOGD("64-bit %s\n", Display::UsingDispString->bin_str); + LOGD("64-bit %s\n", Display::UsingDispString->bin_str); #else - LOGD("32-bit %s\n", Display::UsingDispString->bin_str); + LOGD("32-bit %s\n", Display::UsingDispString->bin_str); #endif - LOGD("mke2fs %s %s (%s)\n", - Display::UsingDispString->version_str, - E2FSPROGS_VERSION_PRIVATE, - E2FSPROGS_DATE); - LOGD("libext2fs %s %s (%s / %s)\n", - Display::UsingDispString->version_str, - E2FSPROGS_VERSION_PRIVATE, - EXT2FS_LIB_VERSION_PRIVATE, - E2FSPROGS_DATE); - LOGD("\n%s\n", __NDK_CXX_VERSION__); + LOGD("mke2fs %s %s (%s)\n", + Display::UsingDispString->version_str, + E2FSPROGS_VERSION_PRIVATE, + E2FSPROGS_DATE); + LOGD("libext2fs %s %s (%s / %s)\n", + Display::UsingDispString->version_str, + E2FSPROGS_VERSION_PRIVATE, + EXT2FS_LIB_VERSION_PRIVATE, + E2FSPROGS_DATE); + + LOGD("\n%s\n", __NDK_CXX_VERSION__); } /* end of code */ diff --git a/jni/e2fsprogs/Makefile b/jni/e2fsprogs/Makefile new file mode 100755 index 0000000..df5fe9e --- /dev/null +++ b/jni/e2fsprogs/Makefile @@ -0,0 +1,382 @@ +# By YZBruh + +# Copyright 2024 Partition Manager +# +# 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. + +##### +# sub-make for building e2fsprogs (built-in mke2fs) +##### + +# Include required files +include ../../build/config/env.mk +ifeq ($(INC_OLDENV),true) +include ../../build/config/oldenv.mk +endif + +# Some variables, flags etc. +E := @ echo +INCLUDE := $(realpath ../../include/e2fsprogs) +E2FSPROGS_DEFAULT_CFLAGS = \ + -std=c17 \ + -Wall \ + -Werror \ + -Wno-pointer-arith \ + -Wno-sign-compare \ + -Wno-type-limits \ + -Wno-typedef-redefinition \ + -Wno-unused-parameter \ + -Wno-unused-command-line-argument \ + -Wno-nullability-completeness \ + -Wno-macro-redefined \ + -fPIC \ + -pthread \ + -include $(INCLUDE)/../PartitionManager/Alternatives.h +INCLUDE_DIRS := \ + $(INCLUDE)/misc \ + $(INCLUDE)/blkid \ + $(INCLUDE)/e2p \ + $(INCLUDE)/et \ + $(INCLUDE)/ext2fs \ + $(INCLUDE)/ss \ + $(INCLUDE)/support \ + $(INCLUDE)/uuid \ + $(INCLUDE)/e2fsck \ + $(INCLUDE) +INC_DIRS := $(foreach dir,$(INCLUDE_DIRS),$(shell echo -I$(dir))) +CFLAGS := $(E2FSPROGS_DEFAULT_CFLAGS) $(INC_DIRS) +ARFLAGS := rcs +OUT := $(realpath ../../out/e2fsprogs) +MKE2FS := $(CURDIR)/mke2fs +LIB := $(CURDIR)/lib +LIBEXT2FS := $(LIB)/ext2fs +LIBEXT2_UUID := $(LIB)/uuid +LIBEXT2_E2P := $(LIB)/e2p +LIBEXT2_QUOTA := $(LIB)/support +LIBEXT2_MISC := $(LIB)/misc +LIBEXT2_COM_ERR := $(LIB)/et +LIBEXT2_BLKID := $(LIB)/blkid + +# Source list of mke2fs +MKE2FS_SRCS := \ + $(MKE2FS)/default_profile.c \ + $(MKE2FS)/mk_hugefiles.c \ + $(MKE2FS)/mke2fs.c \ + $(MKE2FS)/util.c + +# Source list of libext2fs +LIBEXT2FS_SRCS := \ + $(LIBEXT2FS)/alloc.c \ + $(LIBEXT2FS)/alloc_sb.c \ + $(LIBEXT2FS)/alloc_stats.c \ + $(LIBEXT2FS)/alloc_tables.c \ + $(LIBEXT2FS)/atexit.c \ + $(LIBEXT2FS)/badblocks.c \ + $(LIBEXT2FS)/bb_inode.c \ + $(LIBEXT2FS)/bitmaps.c \ + $(LIBEXT2FS)/bitops.c \ + $(LIBEXT2FS)/blkmap64_ba.c \ + $(LIBEXT2FS)/blkmap64_rb.c \ + $(LIBEXT2FS)/blknum.c \ + $(LIBEXT2FS)/block.c \ + $(LIBEXT2FS)/bmap.c \ + $(LIBEXT2FS)/check_desc.c \ + $(LIBEXT2FS)/crc16.c \ + $(LIBEXT2FS)/crc32c.c \ + $(LIBEXT2FS)/csum.c \ + $(LIBEXT2FS)/closefs.c \ + $(LIBEXT2FS)/dblist.c \ + $(LIBEXT2FS)/dblist_dir.c \ + $(LIBEXT2FS)/digest_encode.c \ + $(LIBEXT2FS)/dirblock.c \ + $(LIBEXT2FS)/dirhash.c \ + $(LIBEXT2FS)/dir_iterate.c \ + $(LIBEXT2FS)/dupfs.c \ + $(LIBEXT2FS)/expanddir.c \ + $(LIBEXT2FS)/ext2_err.c \ + $(LIBEXT2FS)/ext_attr.c \ + $(LIBEXT2FS)/extent.c \ + $(LIBEXT2FS)/fallocate.c \ + $(LIBEXT2FS)/fileio.c \ + $(LIBEXT2FS)/finddev.c \ + $(LIBEXT2FS)/flushb.c \ + $(LIBEXT2FS)/freefs.c \ + $(LIBEXT2FS)/gen_bitmap.c \ + $(LIBEXT2FS)/gen_bitmap64.c \ + $(LIBEXT2FS)/get_num_dirs.c \ + $(LIBEXT2FS)/get_pathname.c \ + $(LIBEXT2FS)/getsize.c \ + $(LIBEXT2FS)/getsectsize.c \ + $(LIBEXT2FS)/hashmap.c \ + $(LIBEXT2FS)/i_block.c \ + $(LIBEXT2FS)/icount.c \ + $(LIBEXT2FS)/imager.c \ + $(LIBEXT2FS)/ind_block.c \ + $(LIBEXT2FS)/initialize.c \ + $(LIBEXT2FS)/inline.c \ + $(LIBEXT2FS)/inline_data.c \ + $(LIBEXT2FS)/inode.c \ + $(LIBEXT2FS)/io_manager.c \ + $(LIBEXT2FS)/ismounted.c \ + $(LIBEXT2FS)/link.c \ + $(LIBEXT2FS)/llseek.c \ + $(LIBEXT2FS)/lookup.c \ + $(LIBEXT2FS)/mmp.c \ + $(LIBEXT2FS)/mkdir.c \ + $(LIBEXT2FS)/mkjournal.c \ + $(LIBEXT2FS)/namei.c \ + $(LIBEXT2FS)/native.c \ + $(LIBEXT2FS)/newdir.c \ + $(LIBEXT2FS)/nls_utf8.c \ + $(LIBEXT2FS)/openfs.c \ + $(LIBEXT2FS)/progress.c \ + $(LIBEXT2FS)/punch.c \ + $(LIBEXT2FS)/qcow2.c \ + $(LIBEXT2FS)/rbtree.c \ + $(LIBEXT2FS)/read_bb.c \ + $(LIBEXT2FS)/read_bb_file.c \ + $(LIBEXT2FS)/res_gdt.c \ + $(LIBEXT2FS)/rw_bitmaps.c \ + $(LIBEXT2FS)/sha256.c \ + $(LIBEXT2FS)/sha512.c \ + $(LIBEXT2FS)/swapfs.c \ + $(LIBEXT2FS)/symlink.c \ + $(LIBEXT2FS)/undo_io.c \ + $(LIBEXT2FS)/unix_io.c \ + $(LIBEXT2FS)/sparse_io.c \ + $(LIBEXT2FS)/unlink.c \ + $(LIBEXT2FS)/valid_blk.c \ + $(LIBEXT2FS)/version.c \ + $(LIBEXT2FS)/test_io.c + +# Source list of libext2_uuid +LIBEXT2_UUID_SRCS := \ + $(LIBEXT2_UUID)/clear.c \ + $(LIBEXT2_UUID)/compare.c \ + $(LIBEXT2_UUID)/copy.c \ + $(LIBEXT2_UUID)/gen_uuid.c \ + $(LIBEXT2_UUID)/isnull.c \ + $(LIBEXT2_UUID)/pack.c \ + $(LIBEXT2_UUID)/parse.c \ + $(LIBEXT2_UUID)/unpack.c \ + $(LIBEXT2_UUID)/unparse.c \ + $(LIBEXT2_UUID)/uuid_time.c + +# Source list of libext2_blkid +LIBEXT2_BLKID_SRCS := \ + $(LIBEXT2_BLKID)/cache.c \ + $(LIBEXT2_BLKID)/dev.c \ + $(LIBEXT2_BLKID)/devname.c \ + $(LIBEXT2_BLKID)/devno.c \ + $(LIBEXT2_BLKID)/getsize.c \ + $(LIBEXT2_BLKID)/llseek.c \ + $(LIBEXT2_BLKID)/probe.c \ + $(LIBEXT2_BLKID)/read.c \ + $(LIBEXT2_BLKID)/resolve.c \ + $(LIBEXT2_BLKID)/save.c \ + $(LIBEXT2_BLKID)/tag.c \ + $(LIBEXT2_BLKID)/version.c + +# Source list of libext2_e2p +LIBEXT2_E2P_SRCS := \ + $(LIBEXT2_E2P)/crypto_mode.c \ + $(LIBEXT2_E2P)/encoding.c \ + $(LIBEXT2_E2P)/errcode.c \ + $(LIBEXT2_E2P)/feature.c \ + $(LIBEXT2_E2P)/fgetflags.c \ + $(LIBEXT2_E2P)/fgetproject.c \ + $(LIBEXT2_E2P)/fgetversion.c \ + $(LIBEXT2_E2P)/fsetflags.c \ + $(LIBEXT2_E2P)/fsetproject.c \ + $(LIBEXT2_E2P)/fsetversion.c \ + $(LIBEXT2_E2P)/getflags.c \ + $(LIBEXT2_E2P)/getversion.c \ + $(LIBEXT2_E2P)/hashstr.c \ + $(LIBEXT2_E2P)/iod.c \ + $(LIBEXT2_E2P)/ljs.c \ + $(LIBEXT2_E2P)/ls.c \ + $(LIBEXT2_E2P)/mntopts.c \ + $(LIBEXT2_E2P)/ostype.c \ + $(LIBEXT2_E2P)/parse_num.c \ + $(LIBEXT2_E2P)/pe.c \ + $(LIBEXT2_E2P)/percent.c \ + $(LIBEXT2_E2P)/pf.c \ + $(LIBEXT2_E2P)/ps.c \ + $(LIBEXT2_E2P)/setflags.c \ + $(LIBEXT2_E2P)/setversion.c \ + $(LIBEXT2_E2P)/uuid.c + +# Source list of libext2_quota +LIBEXT2_QUOTA_SRCS := \ + $(LIBEXT2_QUOTA)/devname.c \ + $(LIBEXT2_QUOTA)/dict.c \ + $(LIBEXT2_QUOTA)/mkquota.c \ + $(LIBEXT2_QUOTA)/parse_qtype.c \ + $(LIBEXT2_QUOTA)/plausible.c \ + $(LIBEXT2_QUOTA)/prof_err.c \ + $(LIBEXT2_QUOTA)/profile.c \ + $(LIBEXT2_QUOTA)/profile_helpers.c \ + $(LIBEXT2_QUOTA)/quotaio.c \ + $(LIBEXT2_QUOTA)/quotaio_tree.c \ + $(LIBEXT2_QUOTA)/quotaio_v2.c + +# Source od libext2_misc +LIBEXT2_MISC_SRCS := $(LIBEXT2_MISC)/create_inode.c + +# Source list of libext2_com_err +LIBEXT2_COM_ERR_SRCS := \ + $(LIBEXT2_COM_ERR)/com_err.c \ + $(LIBEXT2_COM_ERR)/com_right.c \ + $(LIBEXT2_COM_ERR)/error_message.c \ + $(LIBEXT2_COM_ERR)/et_name.c \ + $(LIBEXT2_COM_ERR)/init_et.c + +# Object lists +MKE2FS_OBJS := $(MKE2FS_SRCS:.c=.o) +LIBEXT2FS_OBJS := $(LIBEXT2FS_SRCS:.c=.o) +LIBEXT2_UUID_OBJS := $(LIBEXT2_UUID_SRCS:.c=.o) +LIBEXT2_BLKID_OBJS := $(LIBEXT2_BLKID_SRCS:.c=.o) +LIBEXT2_E2P_OBJS := $(LIBEXT2_E2P_SRCS:.c=.o) +LIBEXT2_QUOTA_OBJS := $(LIBEXT2_QUOTA_SRCS:.c=.o) +LIBEXT2_MISC_OBJS := $(LIBEXT2_MISC_SRCS:.c=.o) +LIBEXT2_COM_ERR_OBJS := $(LIBEXT2_COM_ERR_SRCS:.c=.o) + +# Compiler flags (CFLAGS) +LIBEXT2FS_CFLAGS := -Wno-unused-but-set-variable +LIBEXT2_E2P_CFLAGS := -Wno-error=attributes +LIBEXT2_MISC_CFLAGS := -Wno-error=format-extra-args +LIBEXT2_BLKID_CFLAGS := \ + -Wno-error=attributes \ + -Wno-error=pointer-sign \ + -Wno-unused-but-set-variable \ + -fno-strict-aliasing + +# Full object list +OBJS_ALL := \ + $(MKE2FS_OBJS) \ + $(LIBEXT2FS_OBJS) \ + $(LIBEXT2_BLKID_OBJS) \ + $(LIBEXT2_UUID_OBJS) \ + $(LIBEXT2_E2P_OBJS) \ + $(LIBEXT2_QUOTA_OBJS) \ + $(LIBEXT2_MISC_OBJS) \ + $(LIBEXT2_COM_ERR_OBJS) + +# Progress list +PROGRESS_LIST := \ + $(LIBEXT2_BLKID_OBJS) \ + libext2_blkid_ar \ + $(LIBEXT2_UUID_OBJS) \ + libext2_uuid_ar \ + $(LIBEXT2_E2P_OBJS) \ + libext2_e2p_ar \ + $(LIBEXT2FS_OBJS) \ + libext2fs_ar \ + $(LIBEXT2_QUOTA_OBJS) \ + libext2_quota_ar \ + $(LIBEXT2_MISC_OBJS) \ + libext2_misc_ar \ + $(LIBEXT2_COM_ERR_OBJS) \ + libext2_com_err_ar \ + $(MKE2FS_OBJS) \ + mke2fs_dummy_ld + +.PHONY: all +all: $(PROGRESS_LIST) + +# Cleaner +.PHONY: clean +clean: + @ rm -rf $(OBJS_ALL) + +####################################### +# 'MAKE' TARGETS FOR BUILDING OBJECTS # +####################################### + +$(MKE2FS)/%.o: $(MKE2FS)/%.c + $(E) " CC e2fsprogs/`basename $(MKE2FS)`/`basename $@`" + @ $(CC) -c $(CFLAGS) $(MKE2FS_CFLAGS) "$<" -o "$@" || exit 1 + +$(LIBEXT2FS)/%.o: $(LIBEXT2FS)/%.c + $(E) " CC e2fsprogs/lib/`basename $(LIBEXT2FS)`/`basename $@`" + @ $(CC) -c $(CFLAGS) $(LIBEXT2FS_CFLAGS) "$<" -o "$@" || exit 1 + +$(LIBEXT2_BLKID)/%.o: $(LIBEXT2_BLKID)/%.c + $(E) " CC e2fsprogs/lib/`basename $(LIBEXT2_BLKID)`/`basename $@`" + @ $(CC) -c $(CFLAGS) $(LIBEXT2_BLKID_CFLAGS) "$<" -o "$@" || exit 1 + +$(LIBEXT2_E2P)/%.o: $(LIBEXT2_E2P)/%.c + $(E) " CC e2fsprogs/lib/`basename $(LIBEXT2_E2P)`/`basename $@`" + @ $(CC) -c $(CFLAGS) "$<" -o "$@" || exit 1 + +$(LIBEXT2_UUID)/%.o: $(LIBEXT2_UUID)/%.c + $(E) " CC e2fsprogs/lib/`basename $(LIBEXT2_UUID)`/`basename $@`" + @ $(CC) -c $(CFLAGS) "$<" -o "$@" || exit 1 + +$(LIBEXT2_QUOTA)/%.o: $(LIBEXT2_QUOTA)/%.c + $(E) " CC e2fsprogs/lib/`basename $(LIBEXT2_QUOTA)`/`basename $@`" + @ $(CC) -c $(CFLAGS) "$<" -o "$@" || exit 1 + +$(LIBEXT2_MISC)/%.o: $(LIBEXT2_MISC)/%.c + $(E) " CC e2fsprogs/lib/`basename $(LIBEXT2_MISC)`/`basename $@`" + @ $(CC) -c $(CFLAGS) $(LIBEXT2_MISC_CFLAGS) "$<" -o "$@" || exit 1 + +$(LIBEXT2_COM_ERR)/%.o: $(LIBEXT2_COM_ERR)/%.c + $(E) " CC e2fsprogs/lib/`basename $(LIBEXT2_COM_ERR)`/`basename $@`" + @ $(CC) -c $(CFLAGS) "$<" -o "$@" || exit 1 + +############################################# +# 'MAKE' TARGETS FOR GENERATING STATIC LIBS # +############################################# + +libext2fs_ar: $(LIBEXT2FS_OBJS) + $(E) " AR out/e2fsprogs/libext2fs.a" + @ $(AR) $(ARFLAGS) $(OUT)/libext2fs.a $^ || exit 1 + $(E) " ----------- libext2_quota -----------" + +libext2_blkid_ar: $(LIBEXT2_BLKID_OBJS) + $(E) " AR out/e2fsprogs/libext2_blkid.a" + @ $(AR) $(ARFLAGS) $(OUT)/libext2_blkid.a $^ || exit 1 + $(E) " ----------- libext2_uuid ---------" + +libext2_e2p_ar: $(LIBEXT2_E2P_OBJS) + $(E) " AR out/e2fsprogs/libext2_e2p.a" + @ $(AR) $(ARFLAGS) $(OUT)/libext2_e2p.a $^ || exit 1 + $(E) " ----------- libext2fs -----------" + +libext2_uuid_ar: $(LIBEXT2_UUID_OBJS) + $(E) " AR out/e2fsprogs/libext2_uuid.a" + @ $(AR) $(ARFLAGS) $(OUT)/libext2_uuid.a $^ || exit 1 + $(E) " ----------- libext2_e2p -----------" + +libext2_quota_ar: $(LIBEXT2_QUOTA_OBJS) + $(E) " AR out/e2fsprogs/libext2_quota.a" + @ $(AR) $(ARFLAGS) $(OUT)/libext2_quota.a $^ || exit 1 + $(E) " ----------- libext2_misc -----------" + +libext2_misc_ar: $(LIBEXT2_MISC_OBJS) + $(E) " AR out/e2fsprogs/libext2_misc.a" + @ $(AR) $(ARFLAGS) $(OUT)/libext2_misc.a $^ || exit 1 + $(E) " ----------- libext2_com_err -----------" + +libext2_com_err_ar: $(LIBEXT2_COM_ERR_OBJS) + $(E) " AR out/e2fsprogs/libext2_com_err.a" + @ $(AR) $(ARFLAGS) $(OUT)/libext2_com_err.a $^ || exit 1 + $(E) " ----------- mke2fs -----------" + +############################################# +# DUMMY 'MAKE' TARGET FOR DISPLAYING MKE2FS # +############################################# + +mke2fs_dummy_ld: + $(E) " DMY mke2fs" diff --git a/jni/e2fsprogs/lib/ext2fs/unix_io.c b/jni/e2fsprogs/lib/ext2fs/unix_io.c index 353d85a..3cef643 100755 --- a/jni/e2fsprogs/lib/ext2fs/unix_io.c +++ b/jni/e2fsprogs/lib/ext2fs/unix_io.c @@ -17,7 +17,9 @@ #if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) #define _XOPEN_SOURCE 600 +#ifndef _DARWIN_C_SOURCE #define _DARWIN_C_SOURCE +#endif #define _FILE_OFFSET_BITS 64 #ifndef _LARGEFILE_SOURCE #define _LARGEFILE_SOURCE diff --git a/jni/e2fsprogs/mke2fs/mke2fs.c b/jni/e2fsprogs/mke2fs/mke2fs.c index c8ed67a..cc44f92 100755 --- a/jni/e2fsprogs/mke2fs/mke2fs.c +++ b/jni/e2fsprogs/mke2fs/mke2fs.c @@ -76,7 +76,7 @@ extern int optind; extern int isatty(int); extern FILE *fpopen(const char *cmd, const char *mode); -const char * program_name = "mke2fs"; +const char * ProgramName = "mke2fs"; static const char * device_name /* = NULL */; /* Command line options */ @@ -140,7 +140,7 @@ static void usage(void) "\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior]" "[-z undo_file]\n" "\t[-jnqvDFSV] device [blocks-count]\n"), - program_name); + ProgramName); exit(1); } @@ -1061,7 +1061,7 @@ static void parse_extended_opts(struct ext2_super_block *param, "Failed to parse quota type at %s", errtok); free(errtok); } else - com_err(program_name, ret, + com_err(ProgramName, ret, "while parsing quota type"); r_usage++; badopt = token; @@ -1320,9 +1320,9 @@ static char **parse_fs_type(const char *fs_type, ext_type = fs_type; else if (is_hurd) ext_type = "ext2"; - else if (!strcmp(program_name, "mke3fs")) + else if (!strcmp(ProgramName, "mke3fs")) ext_type = "ext3"; - else if (!strcmp(program_name, "mke4fs")) + else if (!strcmp(ProgramName, "mke4fs")) ext_type = "ext4"; else if (progname) { ext_type = strrchr(progname, '/'); @@ -1643,11 +1643,11 @@ profile_error: fs_param.s_rev_level = 0; if (argc && *argv) { - program_name = get_progname(*argv); + ProgramName = get_progname(*argv); /* If called as mkfs.ext3, create a journal inode */ - if (!strcmp(program_name, "mkfs.ext3") || - !strcmp(program_name, "mke3fs")) + if (!strcmp(ProgramName, "mkfs.ext3") || + !strcmp(ProgramName, "mke3fs")) journal_size = -1; } @@ -1659,7 +1659,7 @@ profile_error: b = (blocksize > 0) ? blocksize : -blocksize; if (b < EXT2_MIN_BLOCK_SIZE || b > EXT2_MAX_BLOCK_SIZE) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("invalid block size - %s"), optarg); exit(1); } @@ -1679,7 +1679,7 @@ profile_error: cluster_size = parse_num_blocks2(optarg, -1); if (cluster_size <= EXT2_MIN_CLUSTER_SIZE || cluster_size > EXT2_MAX_CLUSTER_SIZE) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("invalid cluster size - %s"), optarg); exit(1); @@ -1692,7 +1692,7 @@ profile_error: direct_io = 1; break; case 'R': - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("'-R' is deprecated, use '-E' instead")); /* fallthrough */ case 'E': @@ -1706,7 +1706,7 @@ profile_error: else if (strcmp(optarg, "panic") == 0) errors_behavior = EXT2_ERRORS_PANIC; else { - com_err(program_name, 0, + com_err(ProgramName, 0, _("bad error behavior - %s"), optarg); usage(); @@ -1718,12 +1718,12 @@ profile_error: case 'g': fs_param.s_blocks_per_group = strtoul(optarg, &tmp, 0); if (*tmp) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("Illegal number for blocks per group")); exit(1); } if ((fs_param.s_blocks_per_group % 8) != 0) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("blocks per group must be multiple of 8")); exit(1); } @@ -1731,18 +1731,18 @@ profile_error: case 'G': flex_bg_size = strtoul(optarg, &tmp, 0); if (*tmp) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("Illegal number for flex_bg size")); exit(1); } if (flex_bg_size < 1 || (flex_bg_size & (flex_bg_size-1)) != 0) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("flex_bg size must be a power of 2")); exit(1); } if (flex_bg_size > MAX_32_NUM) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("flex_bg size (%lu) must be less than" " or equal to 2^31"), flex_bg_size); exit(1); @@ -1752,7 +1752,7 @@ profile_error: inode_ratio = parse_num_blocks(optarg, -1); if (inode_ratio < EXT2_MIN_BLOCK_SIZE || inode_ratio > EXT2_MAX_BLOCK_SIZE * 1024) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("invalid inode ratio %s (min %d/max %d)"), optarg, EXT2_MIN_BLOCK_SIZE, EXT2_MAX_BLOCK_SIZE * 1024); @@ -1762,7 +1762,7 @@ profile_error: case 'I': inode_size = strtoul(optarg, &tmp, 0); if (*tmp) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("invalid inode size - %s"), optarg); exit(1); } @@ -1788,7 +1788,7 @@ profile_error: bad_blocks_filename = realloc(bad_blocks_filename, strlen(optarg) + 1); if (!bad_blocks_filename) { - com_err(program_name, ENOMEM, "%s", + com_err(ProgramName, ENOMEM, "%s", _("in malloc for bad_blocks_filename")); exit(1); } @@ -1806,7 +1806,7 @@ profile_error: reserved_ratio = strtod(optarg, &tmp); if ( *tmp || reserved_ratio > 50 || reserved_ratio < 0) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("invalid reserved blocks percent - %s"), optarg); exit(1); @@ -1821,7 +1821,7 @@ profile_error: case 'N': num_inodes = strtoul(optarg, &tmp, 0); if (*tmp) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("bad num inodes - %s"), optarg); exit(1); } @@ -1834,7 +1834,7 @@ profile_error: fs_features_size + 1 + strlen(optarg), &fs_features); if (retval) { - com_err(program_name, retval, + com_err(ProgramName, retval, _("while allocating fs_feature string")); exit(1); } @@ -1851,12 +1851,12 @@ profile_error: case 'r': r_opt = strtoul(optarg, &tmp, 0); if (*tmp) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("bad revision level - %s"), optarg); exit(1); } if (r_opt > EXT2_MAX_SUPP_REV) { - com_err(program_name, EXT2_ET_REV_TOO_HIGH, + com_err(ProgramName, EXT2_ET_REV_TOO_HIGH, _("while trying to create revision %d"), r_opt); exit(1); } @@ -1870,7 +1870,7 @@ profile_error: break; case 't': if (fs_type) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("The -t option may only be used once")); exit(1); } @@ -1878,7 +1878,7 @@ profile_error: break; case 'T': if (usage_types) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("The -T option may only be used once")); exit(1); } @@ -1933,13 +1933,13 @@ profile_error: EXT2_FLAG_JOURNAL_DEV_OK, 0, 0, io_ptr, &jfs); if (retval) { - com_err(program_name, retval, + com_err(ProgramName, retval, _("while trying to open journal device %s\n"), journal_device); exit(1); } if ((blocksize < 0) && (jfs->blocksize < (unsigned) (-blocksize))) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("Journal dev blocksize (%d) smaller than " "minimum blocksize %d\n"), jfs->blocksize, -blocksize); @@ -1956,7 +1956,7 @@ profile_error: fs_blocks_count = parse_num_blocks2(argv[optind++], fs_param.s_log_block_size); if (!fs_blocks_count) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("invalid blocks '%s' on device '%s'"), argv[optind - 1], device_name); exit(1); @@ -2008,20 +2008,20 @@ profile_error: } } if (retval && (retval != EXT2_ET_UNIMPLEMENTED)) { - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("while trying to determine filesystem size")); exit(1); } if (!fs_blocks_count) { if (retval == EXT2_ET_UNIMPLEMENTED) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("Couldn't determine device size; you " "must specify\nthe size of the " "filesystem\n")); exit(1); } else { if (dev_size == 0) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("Device size reported to be zero. " "Invalid partition specified, or\n\t" "partition table wasn't reread " @@ -2038,7 +2038,7 @@ profile_error: EXT2_BLOCK_SIZE(&fs_param))-1)); } } else if (!force && is_device && (fs_blocks_count > dev_size)) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("Filesystem larger than apparent device size.")); proceed_question(proceed_delay); } @@ -2136,13 +2136,13 @@ profile_error: /* Get the hardware sector sizes, if available */ retval = ext2fs_get_device_sectsize(device_name, &lsector_size); if (retval) { - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("while trying to determine hardware sector size")); exit(1); } retval = ext2fs_get_device_phys_sectsize(device_name, &psector_size); if (retval) { - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("while trying to determine physical sector size")); exit(1); } @@ -2174,7 +2174,7 @@ profile_error: fs_blocks_count /= (blocksize / 1024); } else { if (blocksize < lsector_size) { /* Impossible */ - com_err(program_name, EINVAL, "%s", + com_err(ProgramName, EINVAL, "%s", _("while setting blocksize; too small " "for device\n")); exit(1); @@ -2207,7 +2207,7 @@ profile_error: fprintf(stderr, _("%s: Size of device (0x%llx blocks) %s " "too big to be expressed\n\t" "in 32 bits using a blocksize of %d.\n"), - program_name, (unsigned long long) fs_blocks_count, + ProgramName, (unsigned long long) fs_blocks_count, device_name, EXT2_BLOCK_SIZE(&fs_param)); exit(1); } @@ -2221,7 +2221,7 @@ profile_error: fprintf(stderr, _("%s: Size of device (0x%llx blocks) %s " "too big to create\n\t" "a filesystem using a blocksize of %d.\n"), - program_name, (unsigned long long) fs_blocks_count, + ProgramName, (unsigned long long) fs_blocks_count, device_name, EXT2_BLOCK_SIZE(&fs_param)); exit(1); } @@ -2277,7 +2277,7 @@ profile_error: reserved_ratio = get_double_from_profile( fs_types, "reserved_ratio", 5.0); if (reserved_ratio > 50 || reserved_ratio < 0) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("invalid reserved blocks percent - %lf"), reserved_ratio); exit(1); @@ -2314,13 +2314,13 @@ profile_error: int_log2(cluster_size >> EXT2_MIN_CLUSTER_LOG_SIZE); if (fs_param.s_log_cluster_size && fs_param.s_log_cluster_size < fs_param.s_log_block_size) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("The cluster size may not be " "smaller than the block size.\n")); exit(1); } } else if (cluster_size) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("specifying a cluster size requires the " "bigalloc feature")); exit(1); @@ -2384,7 +2384,7 @@ profile_error: /* This check should happen beyond the last assignment to blocksize */ if (blocksize > sys_page_size) { if (!force) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("%d-byte blocks too big for system (max %d)"), blocksize, sys_page_size); proceed_question(proceed_delay); @@ -2442,7 +2442,7 @@ profile_error: int encoding = e2p_str2encoding(en); if (encoding < 0) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("Unknown filename encoding from profile: %s"), en); exit(1); @@ -2453,7 +2453,7 @@ profile_error: if (ef) { if (e2p_str2encoding_flags(encoding, ef, &fs_param.s_encoding_flags) < 0) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("Unknown encoding flags from profile: %s"), ef); exit(1); } @@ -2493,7 +2493,7 @@ profile_error: if (ext2fs_has_feature_project(&fs_param)) { quotatype_bits |= QUOTA_PRJ_BIT; if (inode_size == EXT2_GOOD_OLD_INODE_SIZE) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("%d byte inodes are too small for " "project quota"), inode_size); @@ -2515,7 +2515,7 @@ profile_error: /* Can't support bigalloc feature without extents feature */ if (ext2fs_has_feature_bigalloc(&fs_param) && !ext2fs_has_feature_extents(&fs_param)) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("Can't support bigalloc feature without " "extents feature")); exit(1); @@ -2543,7 +2543,7 @@ profile_error: */ if (ext2fs_has_feature_resize_inode(&fs_param) && !ext2fs_has_feature_sparse_super(&fs_param)) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("reserved online resize blocks not supported " "on non-sparse filesystem")); exit(1); @@ -2552,7 +2552,7 @@ profile_error: if (fs_param.s_blocks_per_group) { if (fs_param.s_blocks_per_group < 256 || fs_param.s_blocks_per_group > 8 * (unsigned) blocksize) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("blocks per group count out of range")); exit(1); } @@ -2574,7 +2574,7 @@ profile_error: "flex_bg_size", 16); if (flex_bg_size) { if (!ext2fs_has_feature_flex_bg(&fs_param)) { - com_err(program_name, 0, "%s", + com_err(ProgramName, 0, "%s", _("Flex_bg feature not enabled, so " "flex_bg size may not be specified")); exit(1); @@ -2586,7 +2586,7 @@ profile_error: if (inode_size < EXT2_GOOD_OLD_INODE_SIZE || inode_size > EXT2_BLOCK_SIZE(&fs_param) || inode_size & (inode_size - 1)) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("invalid inode size %d (min %d/max %d)"), inode_size, EXT2_GOOD_OLD_INODE_SIZE, blocksize); @@ -2601,7 +2601,7 @@ profile_error: */ if (ext2fs_has_feature_inline_data(&fs_param) && fs_param.s_inode_size == EXT2_GOOD_OLD_INODE_SIZE) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("%d byte inodes are too small for inline data; " "specify larger size"), fs_param.s_inode_size); @@ -2627,7 +2627,7 @@ _("128-byte inodes cannot handle dates beyond 2038 and are deprecated\n")); if (ext2fs_has_feature_64bit(&fs_param)) num_inodes = MAX_32_NUM; else { - com_err(program_name, 0, + com_err(ProgramName, 0, _("too many inodes (%llu), raise " "inode ratio?"), (unsigned long long) n); @@ -2635,7 +2635,7 @@ _("128-byte inodes cannot handle dates beyond 2038 and are deprecated\n")); } } } else if (num_inodes > MAX_32_NUM) { - com_err(program_name, 0, + com_err(ProgramName, 0, _("too many inodes (%llu), specify < 2^32 inodes"), (unsigned long long) num_inodes); exit(1); @@ -2650,7 +2650,7 @@ _("128-byte inodes cannot handle dates beyond 2038 and are deprecated\n")); (inode_size ? inode_size : EXT2_GOOD_OLD_INODE_SIZE)) >= ((ext2fs_blocks_count(&fs_param)) * EXT2_BLOCK_SIZE(&fs_param))) { - com_err(program_name, 0, _("inode_size (%u) * inodes_count " + com_err(ProgramName, 0, _("inode_size (%u) * inodes_count " "(%u) too big for a\n\t" "filesystem with %llu blocks, " "specify higher inode_ratio (-i)\n\t" @@ -2795,7 +2795,7 @@ static int mke2fs_setup_tdb(const char *name, io_manager *io_ptr) if ((unlink(tdb_file) < 0) && (errno != ENOENT)) { retval = errno; - com_err(program_name, retval, + com_err(ProgramName, retval, _("while trying to delete %s"), tdb_file); goto errout; } @@ -2821,7 +2821,7 @@ errout: free(tdb_dir); free(tdb_file); err: - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("while trying to setup undo file\n")); return retval; } @@ -2921,14 +2921,14 @@ static int create_quota_inodes(ext2_filsys fs) retval = quota_init_context(&qctx, fs, quotatype_bits); if (retval) { - com_err(program_name, retval, + com_err(ProgramName, retval, _("while initializing quota context")); exit(1); } quota_compute_usage(qctx); retval = quota_write_inode(qctx, quotatype_bits); if (retval) { - com_err(program_name, retval, + com_err(ProgramName, retval, _("while writing quota inodes")); exit(1); } @@ -2953,7 +2953,7 @@ static errcode_t set_error_behavior(ext2_filsys fs) else if (strcmp(arg, "panic") == 0) errors = EXT2_ERRORS_PANIC; else { - com_err(program_name, 0, + com_err(ProgramName, 0, _("bad error behavior in profile - %s"), arg); free(arg); @@ -3033,7 +3033,7 @@ int mke2fs_main (int argc, char *argv[]) char *android_sparse_params = malloc(strlen(device_name) + 48); if (!android_sparse_params) { - com_err(program_name, ENOMEM, "%s", + com_err(ProgramName, ENOMEM, "%s", _("in malloc for android_sparse_params")); exit(1); } @@ -3202,7 +3202,7 @@ int mke2fs_main (int argc, char *argv[]) * Override the creator OS, if applicable */ if (creator_os && !set_os(fs->super, creator_os)) { - com_err (program_name, 0, _("unknown os - %s"), creator_os); + com_err (ProgramName, 0, _("unknown os - %s"), creator_os); exit(1); } @@ -3272,7 +3272,7 @@ int mke2fs_main (int argc, char *argv[]) else retval = ext2fs_allocate_tables(fs); if (retval) { - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("while trying to allocate filesystem tables")); exit(1); } @@ -3298,7 +3298,7 @@ int mke2fs_main (int argc, char *argv[]) retval = ext2fs_convert_subcluster_bitmap(fs, &fs->block_map); if (retval) { - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("\n\twhile converting subcluster bitmap")); exit(1); } @@ -3307,7 +3307,7 @@ int mke2fs_main (int argc, char *argv[]) ext2fs_blocks_count(fs->super) - 1, &overhead); if (retval) { - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("while calculating overhead")); exit(1); } @@ -3367,7 +3367,7 @@ int mke2fs_main (int argc, char *argv[]) &ret_blk, NULL); if (retval) { - com_err(program_name, retval, + com_err(ProgramName, retval, _("while zeroing block %llu at end of filesystem"), (unsigned long long) ret_blk); } @@ -3399,7 +3399,7 @@ int mke2fs_main (int argc, char *argv[]) EXT2_FLAG_JOURNAL_DEV_OK, 0, fs->blocksize, default_io_manager, &jfs); if (retval) { - com_err(program_name, retval, + com_err(ProgramName, retval, _("while trying to open journal device %s\n"), journal_device); exit(1); @@ -3411,7 +3411,7 @@ int mke2fs_main (int argc, char *argv[]) } retval = ext2fs_add_journal_device(fs, jfs); if(retval) { - com_err (program_name, retval, + com_err (ProgramName, retval, _("\n\twhile trying to add journal to device %s"), journal_device); exit(1); @@ -3442,7 +3442,7 @@ int mke2fs_main (int argc, char *argv[]) journal_location, journal_flags); if (retval) { - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("\n\twhile trying to create journal")); exit(1); } @@ -3476,7 +3476,7 @@ no_journal: retval = mk_hugefiles(fs, device_name); if (retval) - com_err(program_name, retval, "while creating huge files"); + com_err(ProgramName, retval, "while creating huge files"); /* Copy files from the specified directory */ if (src_root_dir) { if (!quiet) @@ -3485,7 +3485,7 @@ no_journal: retval = populate_fs(fs, EXT2_ROOT_INO, src_root_dir, EXT2_ROOT_INO); if (retval) { - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("while populating file system")); exit(1); } else if (!quiet) @@ -3499,7 +3499,7 @@ no_journal: max_mnt_count = fs->super->s_max_mnt_count; retval = ext2fs_close_free(&fs); if (retval) { - com_err(program_name, retval, "%s", + com_err(ProgramName, retval, "%s", _("while writing out and closing file system")); retval = 1; } else if (!quiet) { diff --git a/jni/parted/COPYING b/jni/parted/COPYING new file mode 100755 index 0000000..24afbe2 --- /dev/null +++ b/jni/parted/COPYING @@ -0,0 +1,675 @@ + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + 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, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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 Lesser General +Public License instead of this License. But first, please read +. diff --git a/jni/parted/Makefile b/jni/parted/Makefile new file mode 100755 index 0000000..5499993 --- /dev/null +++ b/jni/parted/Makefile @@ -0,0 +1,219 @@ +# By YZBruh + +# Copyright 2024 Partition Manager +# +# 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. + +##### +# sub-make for building parted (built-in parted) +##### + +# Include required files +include ../../build/config/env.mk +ifeq ($(INC_OLDENV),true) +include ../../build/config/oldenv.mk +endif + +# Some flags etc +E := @ echo +INCLUDE_DIRS := \ + $(CURDIR)/../../include \ + $(CURDIR)/../../include/libgnulib \ + $(CURDIR)/parted \ + $(CURDIR)/libparted \ + $(CURDIR)/libparted/labels \ + $(CURDIR)/lib +CFLAGS := \ + -Wall \ + -Wextra \ + -fPIC \ + -Wno-pointer-sign \ + -Wno-sign-compare \ + -Wno-gnu-designator \ + -Wno-unused-variable \ + -Wno-unused-parameter \ + -Wno-unused-command-line-argument \ + -Wno-missing-field-initializers \ + -Wno-single-bit-bitfield-constant-conversion \ + $(foreach dir,$(INCLUDE_DIRS),$(shell echo -I$(dir))) +AR_FLAGS := rcs +OUT := $(realpath ../../out/parted) +LIBPARTED := libparted +PARTED := parted +PATH := $(shell echo $$PREFIX)/bin + +LIBPARTED_SRCS := \ + $(LIBPARTED)/architecture.c \ + $(LIBPARTED)/debug.c \ + $(LIBPARTED)/device.c \ + $(LIBPARTED)/disk.c \ + $(LIBPARTED)/exception.c \ + $(LIBPARTED)/filesys.c \ + $(LIBPARTED)/libparted.c \ + $(LIBPARTED)/timer.c \ + $(LIBPARTED)/unit.c \ + $(LIBPARTED)/arch/linux.c \ + $(LIBPARTED)/cs/constraint.c \ + $(LIBPARTED)/cs/geom.c \ + $(LIBPARTED)/cs/natmath.c \ + $(LIBPARTED)/fs/amiga/a-interface.c \ + $(LIBPARTED)/fs/amiga/affs.c \ + $(LIBPARTED)/fs/amiga/amiga.c \ + $(LIBPARTED)/fs/amiga/apfs.c \ + $(LIBPARTED)/fs/amiga/asfs.c \ + $(LIBPARTED)/fs/btrfs/btrfs.c \ + $(LIBPARTED)/fs/ext2/interface.c \ + $(LIBPARTED)/fs/f2fs/f2fs.c \ + $(LIBPARTED)/fs/fat/bootsector.c \ + $(LIBPARTED)/fs/fat/fat.c \ + $(LIBPARTED)/fs/hfs/hfs.c \ + $(LIBPARTED)/fs/hfs/probe.c \ + $(LIBPARTED)/fs/jfs/jfs.c \ + $(LIBPARTED)/fs/linux_swap/linux_swap.c \ + $(LIBPARTED)/fs/nilfs2/nilfs2.c \ + $(LIBPARTED)/fs/ntfs/ntfs.c \ + $(LIBPARTED)/fs/r/filesys.c \ + $(LIBPARTED)/fs/r/fat/bootsector.c \ + $(LIBPARTED)/fs/r/fat/calc.c \ + $(LIBPARTED)/fs/r/fat/clstdup.c \ + $(LIBPARTED)/fs/r/fat/context.c \ + $(LIBPARTED)/fs/r/fat/count.c \ + $(LIBPARTED)/fs/r/fat/fat.c \ + $(LIBPARTED)/fs/r/fat/fatio.c \ + $(LIBPARTED)/fs/r/fat/resize.c \ + $(LIBPARTED)/fs/r/fat/table.c \ + $(LIBPARTED)/fs/r/fat/traverse.c \ + $(LIBPARTED)/fs/r/hfs/advfs.c \ + $(LIBPARTED)/fs/r/hfs/advfs_plus.c \ + $(LIBPARTED)/fs/r/hfs/cache.c \ + $(LIBPARTED)/fs/r/hfs/file.c \ + $(LIBPARTED)/fs/r/hfs/file_plus.c \ + $(LIBPARTED)/fs/r/hfs/hfs.c \ + $(LIBPARTED)/fs/r/hfs/journal.c \ + $(LIBPARTED)/fs/r/hfs/probe.c \ + $(LIBPARTED)/fs/r/hfs/reloc.c \ + $(LIBPARTED)/fs/r/hfs/reloc_plus.c \ + $(LIBPARTED)/fs/reiserfs/reiserfs.c \ + $(LIBPARTED)/fs/udf/udf.c \ + $(LIBPARTED)/fs/ufs/ufs.c \ + $(LIBPARTED)/fs/xfs/xfs.c \ + $(LIBPARTED)/labels/aix.c \ + $(LIBPARTED)/labels/atari.c \ + $(LIBPARTED)/labels/bsd.c \ + $(LIBPARTED)/labels/dos.c \ + $(LIBPARTED)/labels/dvh.c \ + $(LIBPARTED)/labels/efi_crc32.c \ + $(LIBPARTED)/labels/fdasd.c \ + $(LIBPARTED)/labels/gpt.c \ + $(LIBPARTED)/labels/loop.c \ + $(LIBPARTED)/labels/mac.c \ + $(LIBPARTED)/labels/pt-tools.c \ + $(LIBPARTED)/labels/rdb.c \ + $(LIBPARTED)/labels/sun.c \ + $(LIBPARTED)/labels/vtoc.c + +PARTED_SRCS := \ + $(PARTED)/command.c \ + $(PARTED)/jsonwrt.c \ + $(PARTED)/parted.c \ + $(PARTED)/strlist.c \ + $(PARTED)/table.c \ + $(PARTED)/ui.c \ + $(PARTED)/version.c + +LIBPARTED_OBJS := $(LIBPARTED_SRCS:.c=.o) +PARTED_OBJS := $(PARTED_SRCS:.c=.o) + +OBJS_ALL := \ + $(LIBPARTED_OBJS) \ + $(PARTED_OBJS) + +PROGRESS_LIST := \ + make_outdir \ + build_libgnulib \ + build_libcharset \ + build_libiconv_and_libicrt \ + print_libparted \ + $(LIBPARTED_OBJS) \ + libparted_ar \ + print_parted \ + $(PARTED_OBJS) \ + dummy_parted + +.PHONY: all +all: $(PROGRESS_LIST) + +.PHONY: clean +clean: + @ rm -rf $(OBJS_ALL) $(OUT) *.a + @ $(MAKE) -C $(CURDIR)/libgnulib -s clean + @ $(MAKE) -C $(CURDIR)/libiconv -s clean + @ $(MAKE) -C $(CURDIR)/libcharset -s clean + +.PHONY: install +install: + @ abort() { \ + echo "$1"; \ + exit 1; \ + }; \ + [ -f $(PATH)/parted-test ] && \ + abort "Already installed."; \ + cp $(OUT)/parted $(PATH)/parted-test || \ + abort "Copying failed!"; \ + chmod 777 $(PATH)/parted-test || \ + abort "Cannot set permissions!" + +.PHONY: uninstall +uninstall: + @ if [ ! -f $(PATH)/parted-test ]; then echo "Already uninstalled"; exit 1; fi + @ rm -f $(PATH)/parted-test &>/dev/null + +.PHONY: +reinstall: + @ $(MAKE) -s uninstall + @ $(MAKE) -s install + +$(LIBPARTED)/%.o: $(LIBPARTED)/%.c + $(E) " CC $@" + @ $(CC) -c $(CFLAGS) -o $@ $^ || exit 1 + +$(PARTED)/%.o: $(PARTED)/%.c + $(E) " CC $@" + @ $(CC) -c $(CFLAGS) -o $@ $^ || exit 1 + +libparted_ar: $(LIBPARTED_OBJS) + $(E) " AR out/parted/libparted.a" + @ $(AR) $(AR_FLAGS) $(OUT)/libparted.a $(LIBPARTED_OBJS) + +build_libgnulib: + @ $(MAKE) -C $(CURDIR)/libgnulib -s + +build_libcharset: + $(E) " ----------- libcharset ----------- " + @ $(MAKE) -C $(CURDIR)/libcharset -s + +build_libiconv_and_libicrt: + $(E) " ----------- libicrt ----------- " + @ $(MAKE) -C $(CURDIR)/libiconv -s + +make_outdir: + @ if [ ! -d $(OUT) ]; then mkdir -p $(OUT); fi + +print_libparted: + $(E) " ----------- libparted ----------- " + +print_parted: + $(E) " ----------- parted ----------- " + +dummy_parted: + $(E) " DMY parted" diff --git a/jni/parted/lib/alloca.h b/jni/parted/lib/alloca.h new file mode 100755 index 0000000..dbf5fc1 --- /dev/null +++ b/jni/parted/lib/alloca.h @@ -0,0 +1,73 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Memory allocation on the stack. + + Copyright (C) 1995, 1999, 2001-2004, 2006-2024 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H + means there is a real alloca function. */ +#ifndef _GL_ALLOCA_H +#define _GL_ALLOCA_H + +/* alloca (N) returns a pointer to N bytes of memory + allocated on the stack, which will last until the function returns. + Use of alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns, + - for huge N (say, N >= 65536) - you never know how large (or small) + the stack is, and when the stack cannot fulfill the memory allocation + request, the program just crashes. + */ + +#ifndef alloca + /* Some version of mingw have an that causes trouble when + included after 'alloca' gets defined as a macro. As a workaround, + include this first and define 'alloca' as a macro afterwards + if needed. */ +# if defined __GNUC__ && (defined _WIN32 && ! defined __CYGWIN__) && 1 +# include_next +# endif +#endif +#ifndef alloca +# if defined __GNUC__ || (__clang_major__ >= 4) +# define alloca __builtin_alloca +# elif defined _AIX +# define alloca __alloca +# elif defined _MSC_VER +# include +# define alloca _alloca +# elif defined __DECC && defined __VMS +# define alloca __ALLOCA +# elif defined __TANDEM && defined _TNS_E_TARGET +# ifdef __cplusplus +extern "C" +# endif +void *_alloca (unsigned short); +# pragma intrinsic (_alloca) +# define alloca _alloca +# elif defined __MVS__ +# include +# else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/jni/parted/lib/assert.h b/jni/parted/lib/assert.h new file mode 100755 index 0000000..c302650 --- /dev/null +++ b/jni/parted/lib/assert.h @@ -0,0 +1,323 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Do not guard the include, since is supposed to define + the assert macro each time it is included. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#include_next + +/* The definition of static_assert is copied here. */ +/* Compile-time assert-like macros. + + Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef _GL_STATIC_ASSERT_H +#define _GL_STATIC_ASSERT_H + + +/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC) + works as per C11. This is supported by GCC 4.6.0+ and by clang 4+. + + Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as + per C23. This is supported by GCC 9.1+. + + Support compilers claiming conformance to the relevant standard, + and also support GCC when not pedantic. If we were willing to slow + 'configure' down we could also use it with other compilers, but + since this affects only the quality of diagnostics, why bother? */ +#ifndef __cplusplus +# if (201112 <= __STDC_VERSION__ \ + || (!defined __STRICT_ANSI__ \ + && ((4 < __GNUC__ + (6 <= __GNUC_MINOR__) && !defined __clang__) \ + || 5 <= __clang_major__))) +# define _GL_HAVE__STATIC_ASSERT 1 +# endif +# if (202311 <= __STDC_VERSION__ \ + || (!defined __STRICT_ANSI__ && 9 <= __GNUC__ && !defined __clang__)) +# define _GL_HAVE__STATIC_ASSERT1 1 +# endif +#endif + +/* FreeBSD 9.1 , included by and lots of other + system headers, defines a conflicting _Static_assert that is no + better than ours; override it. */ +#ifndef _GL_HAVE__STATIC_ASSERT +# include +# undef _Static_assert +#endif + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + If _Static_assert works, verify (R) uses it directly. Similarly, + _GL_STATIC_ASSERT_TRUE works by packaging a _Static_assert inside a struct + that is an operand of sizeof. + + The code below uses several ideas for C++ compilers, and for C + compilers that do not support _Static_assert: + + * The first step is ((R) ? 1 : -1). Given an expression R, of + integral or boolean or floating-point type, this yields an + expression of integral type, whose value is later verified to be + constant and nonnegative. + + * Next this expression W is wrapped in a type + struct _gl_static_assert_type { + unsigned int _gl_static_assert_error_if_negative: W; + }. + If W is negative, this yields a compile-time error. No compiler can + deal with a bit-field of negative size. + + One might think that an array size check would have the same + effect, that is, that the type struct { unsigned int dummy[W]; } + would work as well. However, inside a function, some compilers + (such as C++ compilers and GNU C) allow local parameters and + variables inside array size expressions. With these compilers, + an array size check would not properly diagnose this misuse of + the verify macro: + + void function (int n) { verify (n < 0); } + + * For the verify macro, the struct _gl_static_assert_type will need to + somehow be embedded into a declaration. To be portable, this + declaration must declare an object, a constant, a function, or a + typedef name. If the declared entity uses the type directly, + such as in + + struct dummy {...}; + typedef struct {...} dummy; + extern struct {...} *dummy; + extern void dummy (struct {...} *); + extern struct {...} *dummy (void); + + two uses of the verify macro would yield colliding declarations + if the entity names are not disambiguated. A workaround is to + attach the current line number to the entity name: + + #define _GL_CONCAT0(x, y) x##y + #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) + extern struct {...} * _GL_CONCAT (dummy, __LINE__); + + But this has the problem that two invocations of verify from + within the same macro would collide, since the __LINE__ value + would be the same for both invocations. (The GCC __COUNTER__ + macro solves this problem, but is not portable.) + + A solution is to use the sizeof operator. It yields a number, + getting rid of the identity of the type. Declarations like + + extern int dummy [sizeof (struct {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + + can be repeated. + + * Should the implementation use a named struct or an unnamed struct? + Which of the following alternatives can be used? + + extern int dummy [sizeof (struct {...})]; + extern int dummy [sizeof (struct _gl_static_assert_type {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern void dummy (int [sizeof (struct _gl_static_assert_type {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + extern int (*dummy (void)) [sizeof (struct _gl_static_assert_type {...})]; + + In the second and sixth case, the struct type is exported to the + outer scope; two such declarations therefore collide. GCC warns + about the first, third, and fourth cases. So the only remaining + possibility is the fifth case: + + extern int (*dummy (void)) [sizeof (struct {...})]; + + * GCC warns about duplicate declarations of the dummy function if + -Wredundant-decls is used. GCC 4.3 and later have a builtin + __COUNTER__ macro that can let us generate unique identifiers for + each dummy function, to suppress this warning. + + * This implementation exploits the fact that older versions of GCC, + which do not support _Static_assert, also do not warn about the + last declaration mentioned above. + + * GCC warns if -Wnested-externs is enabled and 'verify' is used + within a function body; but inside a function, you can always + arrange to use verify_expr instead. + + * In C++, any struct definition inside sizeof is invalid. + Use a template type to work around the problem. */ + +/* Concatenate two preprocessor tokens. */ +#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) +#define _GL_CONCAT0(x, y) x##y + +/* _GL_COUNTER is an integer, preferably one that changes each time we + use it. Use __COUNTER__ if it works, falling back on __LINE__ + otherwise. __LINE__ isn't perfect, but it's better than a + constant. */ +#if defined __COUNTER__ && __COUNTER__ != __COUNTER__ +# define _GL_COUNTER __COUNTER__ +#else +# define _GL_COUNTER __LINE__ +#endif + +/* Generate a symbol with the given prefix, making it unique if + possible. */ +#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) + +/* Verify requirement R at compile-time, as an integer constant expression + that returns 1. If R is false, fail at compile-time, preferably + with a diagnostic that includes the string-literal DIAGNOSTIC. */ + +#define _GL_STATIC_ASSERT_TRUE(R, DIAGNOSTIC) \ + (!!sizeof (_GL_STATIC_ASSERT_TYPE (R, DIAGNOSTIC))) + +#ifdef __cplusplus +# if !GNULIB_defined_struct__gl_static_assert_type +template + struct _gl_static_assert_type { + unsigned int _gl_static_assert_error_if_negative: w; + }; +# define GNULIB_defined_struct__gl_static_assert_type 1 +# endif +# define _GL_STATIC_ASSERT_TYPE(R, DIAGNOSTIC) \ + _gl_static_assert_type<(R) ? 1 : -1> +#elif defined _GL_HAVE__STATIC_ASSERT +# define _GL_STATIC_ASSERT_TYPE(R, DIAGNOSTIC) \ + struct { \ + _Static_assert (R, DIAGNOSTIC); \ + int _gl_dummy; \ + } +#else +# define _GL_STATIC_ASSERT_TYPE(R, DIAGNOSTIC) \ + struct { unsigned int _gl_static_assert_error_if_negative: (R) ? 1 : -1; } +#endif + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. If R is false, fail at compile-time. + + This macro requires three or more arguments but uses at most the first + two, so that the _Static_assert macro optionally defined below supports + both the C11 two-argument syntax and the C23 one-argument syntax. + + Unfortunately, unlike C11, this implementation must appear as an + ordinary declaration, and cannot appear inside struct { ... }. */ + +#if 202311 <= __STDC_VERSION__ || 200410 <= __cpp_static_assert +# define _GL_STATIC_ASSERT(R, DIAGNOSTIC, ...) static_assert (R, DIAGNOSTIC) +#elif defined _GL_HAVE__STATIC_ASSERT +# define _GL_STATIC_ASSERT(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC) +#else +# define _GL_STATIC_ASSERT(R, DIAGNOSTIC, ...) \ + extern int (*_GL_GENSYM (_gl_static_assert_function) (void)) \ + [_GL_STATIC_ASSERT_TRUE (R, DIAGNOSTIC)] +# if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) && !defined __clang__ +# pragma GCC diagnostic ignored "-Wnested-externs" +# endif +#endif + +/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ +#ifdef _GL_STATIC_ASSERT_H +/* Define _Static_assert if needed. */ +/* With clang ≥ 3.8.0 in C++ mode, _Static_assert already works and accepts + 1 or 2 arguments. We better don't override it, because clang's standard + C++ library uses static_assert inside classes in several places, and our + replacement via _GL_STATIC_ASSERT does not work in these contexts. */ +# if (defined __cplusplus && defined __clang__ \ + && (4 <= __clang_major__ + (8 <= __clang_minor__))) +# if 5 <= __clang_major__ +/* Avoid "warning: 'static_assert' with no message is a C++17 extension". */ +# pragma clang diagnostic ignored "-Wc++17-extensions" +# else +/* Avoid "warning: static_assert with no message is a C++1z extension". */ +# pragma clang diagnostic ignored "-Wc++1z-extensions" +# endif +# elif !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert +# if !defined _MSC_VER || defined __clang__ +# define _Static_assert(...) \ + _GL_STATIC_ASSERT (__VA_ARGS__, "static assertion failed", -) +# else +# if defined __cplusplus && _MSC_VER >= 1910 + /* In MSVC 14.1 or newer, static_assert accepts one or two arguments, + but _Static_assert is not defined. */ +# define _Static_assert static_assert +# else + /* Work around MSVC preprocessor incompatibility with ISO C; see + . */ +# define _Static_assert(R, ...) \ + _GL_STATIC_ASSERT ((R), "static assertion failed", -) +# endif +# endif +# endif +/* Define static_assert if needed. */ +# if (!defined static_assert \ + && __STDC_VERSION__ < 202311 \ + && (!defined __cplusplus \ + || (__cpp_static_assert < 201411 \ + && __GNUG__ < 6 && __clang_major__ < 6 && _MSC_VER < 1910))) +# if (defined __cplusplus && defined __GNUG__ && __GNUG__ < 6 \ + && __cplusplus == 201103L && !defined __clang__) +/* g++ >= 4.7, < 6 with option -std=c++11 or -std=gnu++11 supports the + two-arguments static_assert but not the one-argument static_assert, and + it does not support _Static_assert. + We have to play preprocessor tricks to distinguish the two cases. */ +# define _GL_SA1(a1) static_assert ((a1), "static assertion failed") +# define _GL_SA2 static_assert +# define _GL_SA3 static_assert +# define _GL_SA_PICK(x1,x2,x3,x4,...) x4 +# define static_assert(...) _GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1) (__VA_ARGS__) +# elif defined __cplusplus && _MSC_VER >= 1900 && !defined __clang__ +/* MSVC 14 in C++ mode supports the two-arguments static_assert but not + the one-argument static_assert, and it does not support _Static_assert. + We have to play preprocessor tricks to distinguish the two cases. + Since the MSVC preprocessor is not ISO C compliant (see above), + the solution is specific to MSVC. */ +# define _GL_EXPAND(x) x +# define _GL_SA1(a1) static_assert ((a1), "static assertion failed") +# define _GL_SA2 static_assert +# define _GL_SA3 static_assert +# define _GL_SA_PICK(x1,x2,x3,x4,...) x4 +# define static_assert(...) _GL_EXPAND(_GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1)) (__VA_ARGS__) +/* Avoid "fatal error C1189: #error: The C++ Standard Library forbids macroizing keywords." */ +# define _ALLOW_KEYWORD_MACROS 1 +# else +# define static_assert _Static_assert /* C11 requires this #define. */ +# endif +# endif +#endif + + +#endif diff --git a/jni/parted/lib/config.h b/jni/parted/lib/config.h new file mode 100755 index 0000000..cc0347d --- /dev/null +++ b/jni/parted/lib/config.h @@ -0,0 +1,3270 @@ +/* lib/config.h. Generated from config.h.in by configure. */ +/* lib/config.h.in. Generated from configure.ac by autoheader. */ + +/* Witness that has been included. */ +#define _GL_CONFIG_H_INCLUDED 1 + + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define if no multithread safety and no multithreading is desired. */ +/* #undef AVOID_ANY_THREADS */ + +/* Define to the number of bits in type 'ptrdiff_t'. */ +#define BITSIZEOF_PTRDIFF_T 64 + +/* Define to the number of bits in type 'sig_atomic_t'. */ +#define BITSIZEOF_SIG_ATOMIC_T 32 + +/* Define to the number of bits in type 'size_t'. */ +#define BITSIZEOF_SIZE_T 64 + +/* Define to the number of bits in type 'wchar_t'. */ +#define BITSIZEOF_WCHAR_T 32 + +/* Define to the number of bits in type 'wint_t'. */ +#define BITSIZEOF_WINT_T 32 + +/* Define if the c32rtomb function has an incorrect return value. */ +/* #undef C32RTOMB_RETVAL_BUG */ + +/* Define to 1 if using 'alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'double'. */ +#define DBL_EXPBIT0_BIT 20 + +/* Define as the word index where to find the exponent of 'double'. */ +#define DBL_EXPBIT0_WORD 1 + +/* Define as the bit index in the word where to find the sign of 'double'. */ +/* #undef DBL_SIGNBIT_BIT */ + +/* Define as the word index where to find the sign of 'double'. */ +/* #undef DBL_SIGNBIT_WORD */ + +/* Enable assertions, etc. */ +#define DEBUG 1 + +/* the name of the file descriptor member of DIR */ +/* #undef DIR_FD_MEMBER_NAME */ + +#ifdef DIR_FD_MEMBER_NAME +# define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME) +#else +# define DIR_TO_FD(Dir_p) -1 +#endif + + +/* Probing functionality only */ +/* #undef DISCOVER_ONLY */ + +/* Define to 1 if // is a file system root distinct from /. */ +/* #undef DOUBLE_SLASH_IS_DISTINCT_ROOT */ + +/* Define if struct dirent has a member d_ino that actually works. */ +#define D_INO_IN_DIRENT 1 + +/* device mapper (libdevmapper) support */ +/* #undef ENABLE_DEVICE_MAPPER */ + +/* Mtrace malloc() debugging */ +/* #undef ENABLE_MTRACE */ + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +/* #undef ENABLE_NLS */ + +/* Include PC98 partition tables. (Sometimes excluded to avoid collisions with + msdos partition tables */ +/* #undef ENABLE_PC98 */ + +/* Define this to 1 if F_DUPFD behavior does not match POSIX */ +/* #undef FCNTL_DUPFD_BUGGY */ + +/* Define to nothing if C supports flexible array members, and to 1 if it does + not. That way, with a declaration like 'struct s { int n; short + d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 + compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate + the size in bytes of such a struct containing an N-element array. */ +#define FLEXIBLE_ARRAY_MEMBER /**/ + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'float'. */ +#define FLT_EXPBIT0_BIT 23 + +/* Define as the word index where to find the exponent of 'float'. */ +#define FLT_EXPBIT0_WORD 0 + +/* Define as the bit index in the word where to find the sign of 'float'. */ +/* #undef FLT_SIGNBIT_BIT */ + +/* Define as the word index where to find the sign of 'float'. */ +/* #undef FLT_SIGNBIT_WORD */ + +/* Define to 1 if mkdir mistakenly creates a directory given with a trailing + dot component. */ +/* #undef FUNC_MKDIR_DOT_BUG */ + +/* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */ +#define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 + +/* Define to 1 if realpath() can malloc memory, always gives an absolute path, + and handles a trailing slash correctly. */ +/* #undef FUNC_REALPATH_NEARLY_WORKS */ + +/* Define to 1 if realpath() can malloc memory, always gives an absolute path, + and handles leading slashes and a trailing slash correctly. */ +#define FUNC_REALPATH_WORKS 1 + +/* Define this to 'void' or 'struct timezone' to match the system's + declaration of the second argument to gettimeofday. */ +#define GETTIMEOFDAY_TIMEZONE struct timezone + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module accept shall be considered present. */ +#define GNULIB_ACCEPT IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module bind shall be considered present. */ +#define GNULIB_BIND IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module canonicalize-lgpl shall be considered present. */ +#define GNULIB_CANONICALIZE_LGPL 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module close shall be considered present. */ +#define GNULIB_CLOSE 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module close-stream shall be considered present. */ +#define GNULIB_CLOSE_STREAM 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module connect shall be considered present. */ +#define GNULIB_CONNECT IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module dirname shall be considered present. */ +#define GNULIB_DIRNAME 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fdopendir shall be considered present. */ +#define GNULIB_FDOPENDIR IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fd-safer-flag shall be considered present. */ +#define GNULIB_FD_SAFER_FLAG IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fscanf shall be considered present. */ +#define GNULIB_FSCANF 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fstat shall be considered present. */ +#define GNULIB_FSTAT 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fstatat shall be considered present. */ +#define GNULIB_FSTATAT IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module getcwd shall be considered present. */ +#define GNULIB_GETCWD IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module ioctl shall be considered present. */ +#define GNULIB_IOCTL IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module isblank shall be considered present. */ +#define GNULIB_ISBLANK IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module listen shall be considered present. */ +#define GNULIB_LISTEN IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module localeconv shall be considered present. */ +#define GNULIB_LOCALECONV 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module lock shall be considered present. */ +#define GNULIB_LOCK 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module lstat shall be considered present. */ +#define GNULIB_LSTAT 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module msvc-nothrow shall be considered present. */ +#define GNULIB_MSVC_NOTHROW 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module openat shall be considered present. */ +#define GNULIB_OPENAT IN_PARTED_GNULIB_TESTS + +/* enable some gnulib portability checks */ +#define GNULIB_PORTCHECK 1 + +/* Define to 1 if printf and friends should be labeled with attribute + "__gnu_printf__" instead of "__printf__" */ +/* #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU */ + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module reallocarray shall be considered present. */ +#define GNULIB_REALLOCARRAY 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module scanf shall be considered present. */ +#define GNULIB_SCANF 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module select shall be considered present. */ +#define GNULIB_SELECT IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module setsockopt shall be considered present. */ +#define GNULIB_SETSOCKOPT IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module socket shall be considered present. */ +#define GNULIB_SOCKET IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module stat shall be considered present. */ +#define GNULIB_STAT 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module strerror shall be considered present. */ +#define GNULIB_STRERROR 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module strerror_r-posix shall be considered present. */ +#define GNULIB_STRERROR_R_POSIX IN_PARTED_GNULIB_TESTS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module tempname shall be considered present. */ +#define GNULIB_TEMPNAME 1 + +/* Define to 1 when the gnulib module accept should be tested. */ +#define GNULIB_TEST_ACCEPT 1 + +/* Define to 1 when the gnulib module bind should be tested. */ +#define GNULIB_TEST_BIND 1 + +/* Define to 1 when the gnulib module btoc32 should be tested. */ +#define GNULIB_TEST_BTOC32 1 + +/* Define to 1 when the gnulib module btowc should be tested. */ +#define GNULIB_TEST_BTOWC 1 + +/* Define to 1 when the gnulib module c32isprint should be tested. */ +#define GNULIB_TEST_C32ISPRINT 1 + +/* Define to 1 when the gnulib module c32rtomb should be tested. */ +#define GNULIB_TEST_C32RTOMB 1 + +/* Define to 1 when the gnulib module c32tob should be tested. */ +#define GNULIB_TEST_C32TOB 1 + +/* Define to 1 when the gnulib module calloc-gnu should be tested. */ +#define GNULIB_TEST_CALLOC_GNU 1 + +/* Define to 1 when the gnulib module calloc-posix should be tested. */ +#define GNULIB_TEST_CALLOC_POSIX 1 + +/* Define to 1 when the gnulib module canonicalize_file_name should be tested. + */ +#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 + +/* Define to 1 when the gnulib module chdir should be tested. */ +#define GNULIB_TEST_CHDIR 1 + +/* Define to 1 when the gnulib module cloexec should be tested. */ +#define GNULIB_TEST_CLOEXEC 1 + +/* Define to 1 when the gnulib module close should be tested. */ +#define GNULIB_TEST_CLOSE 1 + +/* Define to 1 when the gnulib module closedir should be tested. */ +#define GNULIB_TEST_CLOSEDIR 1 + +/* Define to 1 when the gnulib module connect should be tested. */ +#define GNULIB_TEST_CONNECT 1 + +/* Define to 1 when the gnulib module dirfd should be tested. */ +#define GNULIB_TEST_DIRFD 1 + +/* Define to 1 when the gnulib module dup should be tested. */ +#define GNULIB_TEST_DUP 1 + +/* Define to 1 when the gnulib module dup2 should be tested. */ +#define GNULIB_TEST_DUP2 1 + +/* Define to 1 when the gnulib module environ should be tested. */ +#define GNULIB_TEST_ENVIRON 1 + +/* Define to 1 when the gnulib module fchdir should be tested. */ +#define GNULIB_TEST_FCHDIR 1 + +/* Define to 1 when the gnulib module fcntl should be tested. */ +#define GNULIB_TEST_FCNTL 1 + +/* Define to 1 when the gnulib module fdopen should be tested. */ +#define GNULIB_TEST_FDOPEN 1 + +/* Define to 1 when the gnulib module fdopendir should be tested. */ +#define GNULIB_TEST_FDOPENDIR 1 + +/* Define to 1 when the gnulib module fgetc should be tested. */ +#define GNULIB_TEST_FGETC 1 + +/* Define to 1 when the gnulib module fgets should be tested. */ +#define GNULIB_TEST_FGETS 1 + +/* Define to 1 when the gnulib module fprintf should be tested. */ +#define GNULIB_TEST_FPRINTF 1 + +/* Define to 1 when the gnulib module fputc should be tested. */ +#define GNULIB_TEST_FPUTC 1 + +/* Define to 1 when the gnulib module fputs should be tested. */ +#define GNULIB_TEST_FPUTS 1 + +/* Define to 1 when the gnulib module fread should be tested. */ +#define GNULIB_TEST_FREAD 1 + +/* Define to 1 when the gnulib module free-posix should be tested. */ +#define GNULIB_TEST_FREE_POSIX 1 + +/* Define to 1 when the gnulib module fscanf should be tested. */ +#define GNULIB_TEST_FSCANF 1 + +/* Define to 1 when the gnulib module fstat should be tested. */ +#define GNULIB_TEST_FSTAT 1 + +/* Define to 1 when the gnulib module fstatat should be tested. */ +#define GNULIB_TEST_FSTATAT 1 + +/* Define to 1 when the gnulib module fsync should be tested. */ +#define GNULIB_TEST_FSYNC 1 + +/* Define to 1 when the gnulib module ftruncate should be tested. */ +#define GNULIB_TEST_FTRUNCATE 1 + +/* Define to 1 when the gnulib module fwrite should be tested. */ +#define GNULIB_TEST_FWRITE 1 + +/* Define to 1 when the gnulib module getc should be tested. */ +#define GNULIB_TEST_GETC 1 + +/* Define to 1 when the gnulib module getchar should be tested. */ +#define GNULIB_TEST_GETCHAR 1 + +/* Define to 1 when the gnulib module getcwd should be tested. */ +#define GNULIB_TEST_GETCWD 1 + +/* Define to 1 when the gnulib module getdtablesize should be tested. */ +#define GNULIB_TEST_GETDTABLESIZE 1 + +/* Define to 1 when the gnulib module getopt-posix should be tested. */ +#define GNULIB_TEST_GETOPT_POSIX 1 + +/* Define to 1 when the gnulib module getprogname should be tested. */ +#define GNULIB_TEST_GETPROGNAME 1 + +/* Define to 1 when the gnulib module getrandom should be tested. */ +#define GNULIB_TEST_GETRANDOM 1 + +/* Define to 1 when the gnulib module gettimeofday should be tested. */ +#define GNULIB_TEST_GETTIMEOFDAY 1 + +/* Define to 1 when the gnulib module ioctl should be tested. */ +#define GNULIB_TEST_IOCTL 1 + +/* Define to 1 when the gnulib module iswblank should be tested. */ +#define GNULIB_TEST_ISWBLANK 1 + +/* Define to 1 when the gnulib module iswctype should be tested. */ +#define GNULIB_TEST_ISWCTYPE 1 + +/* Define to 1 when the gnulib module iswdigit should be tested. */ +#define GNULIB_TEST_ISWDIGIT 1 + +/* Define to 1 when the gnulib module iswpunct should be tested. */ +#define GNULIB_TEST_ISWPUNCT 1 + +/* Define to 1 when the gnulib module iswxdigit should be tested. */ +#define GNULIB_TEST_ISWXDIGIT 1 + +/* Define to 1 when the gnulib module listen should be tested. */ +#define GNULIB_TEST_LISTEN 1 + +/* Define to 1 when the gnulib module localeconv should be tested. */ +#define GNULIB_TEST_LOCALECONV 1 + +/* Define to 1 when the gnulib module localename-unsafe should be tested. */ +#define GNULIB_TEST_LOCALENAME_UNSAFE 1 + +/* Define to 1 when the gnulib module lseek should be tested. */ +#define GNULIB_TEST_LSEEK 1 + +/* Define to 1 when the gnulib module lstat should be tested. */ +#define GNULIB_TEST_LSTAT 1 + +/* Define to 1 when the gnulib module malloc-gnu should be tested. */ +#define GNULIB_TEST_MALLOC_GNU 1 + +/* Define to 1 when the gnulib module malloc-posix should be tested. */ +#define GNULIB_TEST_MALLOC_POSIX 1 + +/* Define to 1 when the gnulib module mbrtoc32 should be tested. */ +#define GNULIB_TEST_MBRTOC32 1 + +/* Define to 1 when the gnulib module mbrtowc should be tested. */ +#define GNULIB_TEST_MBRTOWC 1 + +/* Define to 1 when the gnulib module mbsinit should be tested. */ +#define GNULIB_TEST_MBSINIT 1 + +/* Define to 1 when the gnulib module mbszero should be tested. */ +#define GNULIB_TEST_MBSZERO 1 + +/* Define to 1 when the gnulib module mbtowc should be tested. */ +#define GNULIB_TEST_MBTOWC 1 + +/* Define to 1 when the gnulib module memchr should be tested. */ +#define GNULIB_TEST_MEMCHR 1 + +/* Define to 1 when the gnulib module mempcpy should be tested. */ +#define GNULIB_TEST_MEMPCPY 1 + +/* Define to 1 when the gnulib module memrchr should be tested. */ +#define GNULIB_TEST_MEMRCHR 1 + +/* Define to 1 when the gnulib module mkdir should be tested. */ +#define GNULIB_TEST_MKDIR 1 + +/* Define to 1 when the gnulib module mkstemp should be tested. */ +#define GNULIB_TEST_MKSTEMP 1 + +/* Define to 1 when the gnulib module nanosleep should be tested. */ +#define GNULIB_TEST_NANOSLEEP 1 + +/* Define to 1 when the gnulib module nl_langinfo should be tested. */ +#define GNULIB_TEST_NL_LANGINFO 1 + +/* Define to 1 when the gnulib module open should be tested. */ +#define GNULIB_TEST_OPEN 1 + +/* Define to 1 when the gnulib module openat should be tested. */ +#define GNULIB_TEST_OPENAT 1 + +/* Define to 1 when the gnulib module opendir should be tested. */ +#define GNULIB_TEST_OPENDIR 1 + +/* Define to 1 when the gnulib module perror should be tested. */ +#define GNULIB_TEST_PERROR 1 + +/* Define to 1 when the gnulib module pipe should be tested. */ +#define GNULIB_TEST_PIPE 1 + +/* Define to 1 when the gnulib module printf should be tested. */ +#define GNULIB_TEST_PRINTF 1 + +/* Define to 1 when the gnulib module pselect should be tested. */ +#define GNULIB_TEST_PSELECT 1 + +/* Define to 1 when the gnulib module pthread-cond should be tested. */ +#define GNULIB_TEST_PTHREAD_COND 1 + +/* Define to 1 when the gnulib module pthread-mutex should be tested. */ +#define GNULIB_TEST_PTHREAD_MUTEX 1 + +/* Define to 1 when the gnulib module pthread_mutex_timedlock should be + tested. */ +#define GNULIB_TEST_PTHREAD_MUTEX_TIMEDLOCK 1 + +/* Define to 1 when the gnulib module pthread-once should be tested. */ +#define GNULIB_TEST_PTHREAD_ONCE 1 + +/* Define to 1 when the gnulib module pthread-rwlock should be tested. */ +#define GNULIB_TEST_PTHREAD_RWLOCK 1 + +/* Define to 1 when the gnulib module pthread_sigmask should be tested. */ +#define GNULIB_TEST_PTHREAD_SIGMASK 1 + +/* Define to 1 when the gnulib module pthread-thread should be tested. */ +#define GNULIB_TEST_PTHREAD_THREAD 1 + +/* Define to 1 when the gnulib module putc should be tested. */ +#define GNULIB_TEST_PUTC 1 + +/* Define to 1 when the gnulib module putchar should be tested. */ +#define GNULIB_TEST_PUTCHAR 1 + +/* Define to 1 when the gnulib module putenv should be tested. */ +#define GNULIB_TEST_PUTENV 1 + +/* Define to 1 when the gnulib module puts should be tested. */ +#define GNULIB_TEST_PUTS 1 + +/* Define to 1 when the gnulib module raise should be tested. */ +#define GNULIB_TEST_RAISE 1 + +/* Define to 1 when the gnulib module random should be tested. */ +#define GNULIB_TEST_RANDOM 1 + +/* Define to 1 when the gnulib module random_r should be tested. */ +#define GNULIB_TEST_RANDOM_R 1 + +/* Define to 1 when the gnulib module rawmemchr should be tested. */ +#define GNULIB_TEST_RAWMEMCHR 1 + +/* Define to 1 when the gnulib module read should be tested. */ +#define GNULIB_TEST_READ 1 + +/* Define to 1 when the gnulib module readdir should be tested. */ +#define GNULIB_TEST_READDIR 1 + +/* Define to 1 when the gnulib module readlink should be tested. */ +#define GNULIB_TEST_READLINK 1 + +/* Define to 1 when the gnulib module reallocarray should be tested. */ +#define GNULIB_TEST_REALLOCARRAY 1 + +/* Define to 1 when the gnulib module realloc-gnu should be tested. */ +#define GNULIB_TEST_REALLOC_GNU 1 + +/* Define to 1 when the gnulib module realloc-posix should be tested. */ +#define GNULIB_TEST_REALLOC_POSIX 1 + +/* Define to 1 when the gnulib module realpath should be tested. */ +#define GNULIB_TEST_REALPATH 1 + +/* Define to 1 when the gnulib module rewinddir should be tested. */ +#define GNULIB_TEST_REWINDDIR 1 + +/* Define to 1 when the gnulib module rpmatch should be tested. */ +#define GNULIB_TEST_RPMATCH 1 + +/* Define to 1 when the gnulib module scanf should be tested. */ +#define GNULIB_TEST_SCANF 1 + +/* Define to 1 when the gnulib module sched_yield should be tested. */ +#define GNULIB_TEST_SCHED_YIELD 1 + +/* Define to 1 when the gnulib module select should be tested. */ +#define GNULIB_TEST_SELECT 1 + +/* Define to 1 when the gnulib module setenv should be tested. */ +#define GNULIB_TEST_SETENV 1 + +/* Define to 1 when the gnulib module setlocale should be tested. */ +#define GNULIB_TEST_SETLOCALE 1 + +/* Define to 1 when the gnulib module setlocale_null should be tested. */ +#define GNULIB_TEST_SETLOCALE_NULL 1 + +/* Define to 1 when the gnulib module setsockopt should be tested. */ +#define GNULIB_TEST_SETSOCKOPT 1 + +/* Define to 1 when the gnulib module signbit should be tested. */ +#define GNULIB_TEST_SIGNBIT 1 + +/* Define to 1 when the gnulib module sigprocmask should be tested. */ +#define GNULIB_TEST_SIGPROCMASK 1 + +/* Define to 1 when the gnulib module sleep should be tested. */ +#define GNULIB_TEST_SLEEP 1 + +/* Define to 1 when the gnulib module socket should be tested. */ +#define GNULIB_TEST_SOCKET 1 + +/* Define to 1 when the gnulib module stat should be tested. */ +#define GNULIB_TEST_STAT 1 + +/* Define to 1 when the gnulib module stpcpy should be tested. */ +#define GNULIB_TEST_STPCPY 1 + +/* Define to 1 when the gnulib module strdup should be tested. */ +#define GNULIB_TEST_STRDUP 1 + +/* Define to 1 when the gnulib module strerror should be tested. */ +#define GNULIB_TEST_STRERROR 1 + +/* Define to 1 when the gnulib module strerror_r should be tested. */ +#define GNULIB_TEST_STRERROR_R 1 + +/* Define to 1 when the gnulib module strtoll should be tested. */ +#define GNULIB_TEST_STRTOLL 1 + +/* Define to 1 when the gnulib module strtoull should be tested. */ +#define GNULIB_TEST_STRTOULL 1 + +/* Define to 1 when the gnulib module symlink should be tested. */ +#define GNULIB_TEST_SYMLINK 1 + +/* Define to 1 when the gnulib module time should be tested. */ +#define GNULIB_TEST_TIME 1 + +/* Define to 1 when the gnulib module unlink should be tested. */ +#define GNULIB_TEST_UNLINK 1 + +/* Define to 1 when the gnulib module unsetenv should be tested. */ +#define GNULIB_TEST_UNSETENV 1 + +/* Define to 1 when the gnulib module usleep should be tested. */ +#define GNULIB_TEST_USLEEP 1 + +/* Define to 1 when the gnulib module vfprintf should be tested. */ +#define GNULIB_TEST_VFPRINTF 1 + +/* Define to 1 when the gnulib module vprintf should be tested. */ +#define GNULIB_TEST_VPRINTF 1 + +/* Define to 1 when the gnulib module wcrtomb should be tested. */ +#define GNULIB_TEST_WCRTOMB 1 + +/* Define to 1 when the gnulib module wctob should be tested. */ +#define GNULIB_TEST_WCTOB 1 + +/* Define to 1 when the gnulib module wctomb should be tested. */ +#define GNULIB_TEST_WCTOMB 1 + +/* Define to 1 when the gnulib module wctype should be tested. */ +#define GNULIB_TEST_WCTYPE 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module xalloc shall be considered present. */ +#define GNULIB_XALLOC 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module xalloc-die shall be considered present. */ +#define GNULIB_XALLOC_DIE 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AFUNIX_H */ + +/* Define if the __locale_t type contains the name of the LC_MESSAGES + category. */ +/* #undef HAVE_AIX72_LOCALES */ + +/* Define to 1 if you have 'alloca' after including , a header that + may be supplied by this distribution. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if works. */ +#define HAVE_ALLOCA_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_ARPA_INET_H 1 + +/* Has backtrace support */ +/* #undef HAVE_BACKTRACE */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_BCRYPT_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_BLKID_BLKID_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_BP_SYM_H */ + +/* Define to 1 if you have the 'btowc' function. */ +#define HAVE_BTOWC 1 + +/* Define to 1 if nanosleep mishandles large arguments. */ +#define HAVE_BUG_BIG_NANOSLEEP 1 + +/* Define to 1 if you have the 'canonicalize_file_name' function. */ +/* #undef HAVE_CANONICALIZE_FILE_NAME */ + +/* Define to 1 if you have the `catgets' function. */ +#define HAVE_CATGETS 1 + +/* Define to 1 if you have the Mac OS X function + CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES */ + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define to 1 if you have the 'clock_getres' function. */ +#define HAVE_CLOCK_GETRES 1 + +/* Define to 1 if you have the 'clock_gettime' function. */ +#define HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if you have the 'clock_settime' function. */ +#define HAVE_CLOCK_SETTIME 1 + +/* Define to 1 if you have the 'closedir' function. */ +#define HAVE_CLOSEDIR 1 + +/* Define if the copysignf function is declared in and available in + libc. */ +/* #undef HAVE_COPYSIGNF_IN_LIBC */ + +/* Define if the copysignl function is declared in and available in + libc. */ +/* #undef HAVE_COPYSIGNL_IN_LIBC */ + +/* Define if the copysign function is declared in and available in + libc. */ +/* #undef HAVE_COPYSIGN_IN_LIBC */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_CRTDEFS_H */ + +/* Define to 1 if the alignas and alignof keywords work. */ +/* #undef HAVE_C_ALIGNASOF */ + +/* Define to 1 if bool, true and false work as per C2023. */ +/* #undef HAVE_C_BOOL */ + +/* Define to 1 if the static_assert keyword works. */ +/* #undef HAVE_C_STATIC_ASSERT */ + +/* Define to 1 if C supports variable-length arrays. */ +#define HAVE_C_VARARRAYS 1 + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +/* #undef HAVE_DCGETTEXT */ + +/* Define to 1 if you have the declaration of 'alarm', and to 0 if you don't. + */ +#define HAVE_DECL_ALARM 1 + +/* Define to 1 if you have the declaration of 'copysign', and to 0 if you + don't. */ +/* #undef HAVE_DECL_COPYSIGN */ + +/* Define to 1 if you have the declaration of 'copysignf', and to 0 if you + don't. */ +/* #undef HAVE_DECL_COPYSIGNF */ + +/* Define to 1 if you have the declaration of 'copysignl', and to 0 if you + don't. */ +/* #undef HAVE_DECL_COPYSIGNL */ + +/* Define to 1 if you have the declaration of 'dirfd', and to 0 if you don't. + */ +#define HAVE_DECL_DIRFD 1 + +/* Define to 1 if you have the declaration of 'ecvt', and to 0 if you don't. + */ +#define HAVE_DECL_ECVT 0 + +/* Define to 1 if you have the declaration of 'execvpe', and to 0 if you + don't. */ +#define HAVE_DECL_EXECVPE 1 + +/* Define to 1 if you have the declaration of 'fchdir', and to 0 if you don't. + */ +#define HAVE_DECL_FCHDIR 1 + +/* Define to 1 if you have the declaration of 'fcloseall', and to 0 if you + don't. */ +#define HAVE_DECL_FCLOSEALL 0 + +/* Define to 1 if you have the declaration of 'fcvt', and to 0 if you don't. + */ +#define HAVE_DECL_FCVT 0 + +/* Define to 1 if you have the declaration of 'fdopendir', and to 0 if you + don't. */ +#define HAVE_DECL_FDOPENDIR 1 + +/* Define to 1 if you have the declaration of 'gcvt', and to 0 if you don't. + */ +#define HAVE_DECL_GCVT 0 + +/* Define to 1 if you have the declaration of 'getcwd', and to 0 if you don't. + */ +#define HAVE_DECL_GETCWD 1 + +/* Define to 1 if you have the declaration of 'getdtablesize', and to 0 if you + don't. */ +#define HAVE_DECL_GETDTABLESIZE 0 + +/* Define to 1 if you have the declaration of 'getw', and to 0 if you don't. + */ +#define HAVE_DECL_GETW 0 + +/* Define to 1 if you have the declaration of 'inet_pton', and to 0 if you + don't. */ +#define HAVE_DECL_INET_PTON 1 + +/* Define to 1 if you have the declaration of 'initstate', and to 0 if you + don't. */ +#define HAVE_DECL_INITSTATE 1 + +/* Define to 1 if you have the declaration of 'isblank', and to 0 if you + don't. */ +#define HAVE_DECL_ISBLANK 1 + +/* Define to 1 if you have the declaration of 'iswblank', and to 0 if you + don't. */ +#define HAVE_DECL_ISWBLANK 1 + +/* Define to 1 if you have the declaration of 'mbrtowc', and to 0 if you + don't. */ +/* #undef HAVE_DECL_MBRTOWC */ + +/* Define to 1 if you have the declaration of 'mbsinit', and to 0 if you + don't. */ +/* #undef HAVE_DECL_MBSINIT */ + +/* Define to 1 if you have the declaration of 'memrchr', and to 0 if you + don't. */ +#define HAVE_DECL_MEMRCHR 1 + +/* Define to 1 if you have the declaration of 'program_invocation_name', and + to 0 if you don't. */ +#define HAVE_DECL_PROGRAM_INVOCATION_NAME 0 + +/* Define to 1 if you have the declaration of 'program_invocation_short_name', + and to 0 if you don't. */ +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 0 + +/* Define to 1 if you have the declaration of 'putw', and to 0 if you don't. + */ +#define HAVE_DECL_PUTW 0 + +/* Define to 1 if you have the declaration of 'setenv', and to 0 if you don't. + */ +#define HAVE_DECL_SETENV 1 + +/* Define to 1 if you have the declaration of 'setstate', and to 0 if you + don't. */ +#define HAVE_DECL_SETSTATE 1 + +/* Define to 1 if you have the declaration of 'sleep', and to 0 if you don't. + */ +#define HAVE_DECL_SLEEP 1 + +/* Define to 1 if you have the declaration of 'strdup', and to 0 if you don't. + */ +#define HAVE_DECL_STRDUP 1 + +/* Define to 1 if you have the declaration of 'strerror_r', and to 0 if you + don't. */ +#define HAVE_DECL_STRERROR_R 1 + +/* Define to 1 if you have the declaration of 'towlower', and to 0 if you + don't. */ +/* #undef HAVE_DECL_TOWLOWER */ + +/* Define to 1 if you have the declaration of 'unsetenv', and to 0 if you + don't. */ +#define HAVE_DECL_UNSETENV 1 + +/* Define to 1 if you have the declaration of 'wcrtomb', and to 0 if you + don't. */ +/* #undef HAVE_DECL_WCRTOMB */ + +/* Define to 1 if you have the declaration of 'wcsdup', and to 0 if you don't. + */ +#define HAVE_DECL_WCSDUP 1 + +/* Define to 1 if you have the declaration of 'wctob', and to 0 if you don't. + */ +#define HAVE_DECL_WCTOB 1 + +/* Define to 1 if you have the declaration of '_putenv', and to 0 if you + don't. */ +#define HAVE_DECL__PUTENV 0 + +/* Define to 1 if you have the declaration of '__argv', and to 0 if you don't. + */ +/* #undef HAVE_DECL___ARGV */ + +/* Define to 1 if you have the declaration of '__fpending', and to 0 if you + don't. */ +#define HAVE_DECL___FPENDING 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DIRENT_H 1 + +/* Define to 1 if you have the 'dirfd' function. */ +#define HAVE_DIRFD 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the `duplocale' function. */ +#define HAVE_DUPLOCALE 1 + +/* Define if you have the declaration of environ. */ +#define HAVE_ENVIRON_DECL 1 + +/* Define to 1 if you have the `error' function. */ +#define HAVE_ERROR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_ERROR_H 1 + +/* Define to 1 if you have the `faccessat' function. */ +#define HAVE_FACCESSAT 1 + +/* Define if the locale_t type contains insufficient information, as on + OpenBSD. */ +/* #undef HAVE_FAKE_LOCALES */ + +/* Define to 1 if you have the 'fchdir' function. */ +#define HAVE_FCHDIR 1 + +/* Define to 1 if you have the 'fcntl' function. */ +#define HAVE_FCNTL 1 + +/* Define to 1 if you have the 'fdopendir' function. */ +#define HAVE_FDOPENDIR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FEATURES_H 1 + +/* Define to 1 if you have the `freelocale' function. */ +#define HAVE_FREELOCALE 1 + +/* Define if the 'free' function is guaranteed to preserve errno. */ +/* #undef HAVE_FREE_POSIX */ + +/* Define to 1 if you have the 'fstatat' function. */ +#define HAVE_FSTATAT 1 + +/* Define to 1 if you have the 'fsync' function. */ +#define HAVE_FSYNC 1 + +/* Define to 1 if you have the `ftruncate' function. */ +#define HAVE_FTRUNCATE 1 + +/* Define to 1 if you have the 'getcwd' function. */ +#define HAVE_GETCWD 1 + +/* Define to 1 if getcwd works, but with shorter paths than is generally + tested with the replacement. */ +/* #undef HAVE_GETCWD_SHORTER */ + +/* Define to 1 if you have the 'getdtablesize' function. */ +/* #undef HAVE_GETDTABLESIZE */ + +/* Define to 1 if you have the 'getexecname' function. */ +/* #undef HAVE_GETEXECNAME */ + +/* Define to 1 if you have the 'getlocalename_l' function. */ +/* #undef HAVE_GETLOCALENAME_L */ + +/* Define to 1 if you have the header file. */ +#define HAVE_GETOPT_H 1 + +/* Define to 1 if you have the 'getopt_long_only' function. */ +#define HAVE_GETOPT_LONG_ONLY 1 + +/* Define to 1 if you have the 'getppriv' function. */ +/* #undef HAVE_GETPPRIV */ + +/* Define to 1 if you have the `getprogname' function. */ +#define HAVE_GETPROGNAME 1 + +/* Define to 1 if you have the `getrandom' function. */ +#define HAVE_GETRANDOM 1 + +/* Define if the GNU gettext() function is already present or preinstalled. */ +/* #undef HAVE_GETTEXT */ + +/* Define to 1 if you have the 'gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the 'getuid' function. */ +#define HAVE_GETUID 1 + +/* Define if the uselocale function exists, may be safely called, and returns + sufficient information. */ +#define HAVE_GOOD_USELOCALE 1 + +/* Define if you have the iconv() function and it works. */ +#define HAVE_ICONV 1 + +/* Define to 1 if you have the 'inet_pton' function. */ +/* #undef HAVE_INET_PTON */ + +/* Define to 1 if you have the `initstate' function. */ +#define HAVE_INITSTATE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the 'ioctl' function. */ +#define HAVE_IOCTL 1 + +/* Define to 1 if defines AF_INET. */ +#define HAVE_IPV4 1 + +/* Define to 1 if defines AF_INET6. */ +#define HAVE_IPV6 1 + +/* Define to 1 if you have the 'isblank' function. */ +#define HAVE_ISBLANK 1 + +/* Define if the isnan(double) function is available in libc. */ +#define HAVE_ISNAND_IN_LIBC 1 + +/* Define if the isnan(float) function is available in libc. */ +#define HAVE_ISNANF_IN_LIBC 1 + +/* Define if the isnan(long double) function is available in libc. */ +#define HAVE_ISNANL_IN_LIBC 1 + +/* Define to 1 if you have the `iswblank' function. */ +#define HAVE_ISWBLANK 1 + +/* Define to 1 if you have the 'iswcntrl' function. */ +#define HAVE_ISWCNTRL 1 + +/* Define to 1 if you have the 'iswctype' function. */ +#define HAVE_ISWCTYPE 1 + +/* Define if you have and nl_langinfo(CODESET). */ +#define HAVE_LANGINFO_CODESET 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LANGINFO_H 1 + +/* Define if you have and nl_langinfo(YESEXPR). */ +#define HAVE_LANGINFO_YESEXPR 1 + +/* Define if your file defines LC_MESSAGES. */ +#define HAVE_LC_MESSAGES 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIBINTL_H 1 + +/* Define to 1 if you have the 'parted' library (-lparted). */ +/* #undef HAVE_LIBPARTED */ + +/* have readline */ +/* #undef HAVE_LIBREADLINE */ + +/* Define to 1 if the bcrypt library is guaranteed to be present. */ +/* #undef HAVE_LIB_BCRYPT */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LINUX_EXT2_FS_H */ + +/* Define to 1 if the system has the type 'long long int'. */ +#define HAVE_LONG_LONG_INT 1 + +/* Define to 1 if you have the 'lstat' function. */ +#define HAVE_LSTAT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MALLOC_H 1 + +/* Define if malloc, realloc, and calloc set errno on allocation failure. */ +#define HAVE_MALLOC_POSIX 1 + +/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including + config.h and . */ +#define HAVE_MAP_ANONYMOUS 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MATH_H 1 + +/* Define to 1 if you have the 'mbrtowc' function. */ +#define HAVE_MBRTOWC 1 + +/* Define to 1 if you have the 'mbsinit' function. */ +#define HAVE_MBSINIT 1 + +/* Define to 1 if declares mbstate_t. */ +#define HAVE_MBSTATE_T 1 + +/* Define to 1 if you have the `mbtowc' function. */ +#define HAVE_MBTOWC 1 + +/* Define to 1 if you have the `mempcpy' function. */ +#define HAVE_MEMPCPY 1 + +/* Define to 1 if you have the 'memrchr' function. */ +#define HAVE_MEMRCHR 1 + +/* Define to 1 if getcwd minimally works, that is, its result can be trusted + when it succeeds. */ +#define HAVE_MINIMALLY_WORKING_GETCWD 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MINIX_CONFIG_H */ + +/* Define to 1 if defines the MIN and MAX macros. */ +/* #undef HAVE_MINMAX_IN_LIMITS_H */ + +/* Define to 1 if defines the MIN and MAX macros. */ +#define HAVE_MINMAX_IN_SYS_PARAM_H 1 + +/* Define to 1 if you have the 'mkstemp' function. */ +#define HAVE_MKSTEMP 1 + +/* Define to 1 if you have the 'mprotect' function. */ +#define HAVE_MPROTECT 1 + +/* Define to 1 on MSVC platforms that have the "invalid parameter handler" + concept. */ +/* #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER */ + +/* Define if the locale_t type does not contain the name of each locale + category. */ +/* #undef HAVE_NAMELESS_LOCALES */ + +/* Define to 1 if you have the header file. */ +#define HAVE_NETDB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the `newlocale' function. */ +#define HAVE_NEWLOCALE 1 + +/* Define to 1 if you have the `nl_langinfo' function. */ +#define HAVE_NL_LANGINFO 1 + +/* Define to 1 if you have the 'openat' function. */ +#define HAVE_OPENAT 1 + +/* Define to 1 if you have the 'opendir' function. */ +#define HAVE_OPENDIR 1 + +/* Define to 1 if getcwd works, except it sometimes fails when it shouldn't, + setting errno to ERANGE, ENAMETOOLONG, or ENOENT. */ +#define HAVE_PARTLY_WORKING_GETCWD 1 + +/* Define to 1 if you have the 'pipe' function. */ +#define HAVE_PIPE 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_PRIV_H */ + +/* Define to 1 if you have the 'pselect' function. */ +#define HAVE_PSELECT 1 + +/* Define if you have the header and the POSIX threads API. */ +#define HAVE_PTHREAD_API 1 + +/* Define to 1 if you have the `pthread_atfork' function. */ +#define HAVE_PTHREAD_ATFORK 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_PTHREAD_H 1 + +/* Define if the defines PTHREAD_MUTEX_RECURSIVE. */ +#define HAVE_PTHREAD_MUTEX_RECURSIVE 1 + +/* Define if the POSIX multithreading library has read/write locks. */ +#define HAVE_PTHREAD_RWLOCK 1 + +/* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a + reader. */ +/* #undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER */ + +/* Define to 1 if the pthread_sigmask function can be used (despite bugs). */ +#define HAVE_PTHREAD_SIGMASK 1 + +/* Define to 1 if the system has the type 'pthread_spinlock_t'. */ +#define HAVE_PTHREAD_SPINLOCK_T 1 + +/* Define to 1 if the system has the type 'pthread_t'. */ +#define HAVE_PTHREAD_T 1 + +/* Define to 1 if you have the 'raise' function. */ +#define HAVE_RAISE 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_RANDOM_H */ + +/* Define to 1 if you have the 'random_r' function. */ +/* #undef HAVE_RANDOM_R */ + +/* Define to 1 if you have the 'rawmemchr' function. */ +/* #undef HAVE_RAWMEMCHR */ + +/* Define to 1 if you have the 'readdir' function. */ +#define HAVE_READDIR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_READLINE_HISTORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_READLINE_READLINE_H 1 + +/* Define to 1 if you have the 'readlink' function. */ +#define HAVE_READLINK 1 + +/* Define to 1 if you have the `reallocarray' function. */ +#define HAVE_REALLOCARRAY 1 + +/* Define to 1 if you have the 'realpath' function. */ +#define HAVE_REALPATH 1 + +/* Define to 1 if you have the 'rewinddir' function. */ +#define HAVE_REWINDDIR 1 + +/* Define to 1 if you have the 'rl_completion_matches' function. */ +#define HAVE_RL_COMPLETION_MATCHES 1 + +/* Define to 1 if you have the 'rpmatch' function. */ +/* #undef HAVE_RPMATCH */ + +/* Define to 1 if 'long double' and 'double' have the same representation. */ +/* #undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE */ + +/* Define to 1 if the system has the type 'sa_family_t'. */ +#define HAVE_SA_FAMILY_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SCHED_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SDKDDKVER_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SEARCH_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SEMAPHORE_H 1 + +/* Define to 1 if you have the 'setdtablesize' function. */ +/* #undef HAVE_SETDTABLESIZE */ + +/* Define to 1 if you have the 'setenv' function. */ +#define HAVE_SETENV 1 + +/* Define to 1 if you have the `setstate' function. */ +#define HAVE_SETSTATE 1 + +/* Define to 1 if you have the 'shutdown' function. */ +#define HAVE_SHUTDOWN 1 + +/* Define to 1 if you have the 'sigaction' function. */ +#define HAVE_SIGACTION 1 + +/* Define to 1 if 'sig_atomic_t' is a signed integer type. */ +#define HAVE_SIGNED_SIG_ATOMIC_T 1 + +/* Define to 1 if 'wchar_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_WCHAR_T */ + +/* Define to 1 if 'wint_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_WINT_T */ + +/* Define to 1 if the system has the type 'sigset_t'. */ +#define HAVE_SIGSET_T 1 + +/* Define to 1 if you have the 'sleep' function. */ +#define HAVE_SLEEP 1 + +/* Define to 1 if you have the 'snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define if the locale_t type is as on Solaris 11.4. */ +/* #undef HAVE_SOLARIS114_LOCALES */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDCKDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_EXT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `stpcpy' function. */ +#define HAVE_STPCPY 1 + +/* Define to 1 if you have the `strerror_r' function. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the 'strtoll' function. */ +#define HAVE_STRTOLL 1 + +/* Define to 1 if you have the 'strtoull' function. */ +#define HAVE_STRTOULL 1 + +/* Define to 1 if 'decimal_point' is a member of 'struct lconv'. */ +/* #undef HAVE_STRUCT_LCONV_DECIMAL_POINT */ + +/* Define to 1 if 'int_p_cs_precedes' is a member of 'struct lconv'. */ +/* #undef HAVE_STRUCT_LCONV_INT_P_CS_PRECEDES */ + +/* Define to 1 if the system has the type 'struct random_data'. */ +/* #undef HAVE_STRUCT_RANDOM_DATA */ + +/* Define to 1 if the system has the type 'struct sockaddr_storage'. */ +#define HAVE_STRUCT_SOCKADDR_STORAGE 1 + +/* Define to 1 if 'ss_family' is a member of 'struct sockaddr_storage'. */ +#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 + +/* Define to 1 if 'st_atimensec' is a member of 'struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIMENSEC */ + +/* Define to 1 if 'st_atimespec.tv_nsec' is a member of 'struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC */ + +/* Define to 1 if 'st_atim.st__tim.tv_nsec' is a member of 'struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC */ + +/* Define to 1 if 'st_atim.tv_nsec' is a member of 'struct stat'. */ +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 + +/* Define to 1 if 'st_birthtimensec' is a member of 'struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC */ + +/* Define to 1 if 'st_birthtimespec.tv_nsec' is a member of 'struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC */ + +/* Define to 1 if 'st_birthtim.tv_nsec' is a member of 'struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC */ + +/* Define to 1 if you have the 'symlink' function. */ +#define HAVE_SYMLINK 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_BITYPES_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_INTTYPES_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_RANDOM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SINGLE_THREADED_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_UIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_UN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TERMCAP_H 1 + +/* Define to 1 if you have the `thrd_create' function. */ +/* #undef HAVE_THRD_CREATE */ + +/* Define to 1 if you have the header file. */ +#define HAVE_THREADS_H 1 + +/* Define to 1 if you have the 'towlower' function. */ +#define HAVE_TOWLOWER 1 + +/* Define to 1 if you have the `tsearch' function. */ +#define HAVE_TSEARCH 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UCHAR_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_UNISTRING_WOE32DLL_H */ + +/* Define to 1 if defines AF_UNIX. */ +#define HAVE_UNIXSOCKET 1 + +/* Define to 1 if you have the 'unsetenv' function. */ +#define HAVE_UNSETENV 1 + +/* Define to 1 if the system has the type 'unsigned long long int'. */ +#define HAVE_UNSIGNED_LONG_LONG_INT 1 + +/* Define to 1 if you have the `uselocale' function. */ +#define HAVE_USELOCALE 1 + +/* Define to 1 if you have the 'usleep' function. */ +#define HAVE_USLEEP 1 + +/* Define if you have a global __progname variable */ +/* #undef HAVE_VAR___PROGNAME */ + +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#define HAVE_VISIBILITY 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_WCHAR_H 1 + +/* Define to 1 if you have the 'wcrtomb' function. */ +#define HAVE_WCRTOMB 1 + +/* Define to 1 if you have the 'wctob' function. */ +#define HAVE_WCTOB 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_WCTYPE_H 1 + +/* Define to 1 if the compiler and linker support weak declarations of + symbols. */ +#define HAVE_WEAK_SYMBOLS 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define if you have the 'wint_t' type. */ +#define HAVE_WINT_T 1 + +/* Define if the c32rtomb function basically works. */ +#define HAVE_WORKING_C32RTOMB 1 + +/* Define to 1 if fstatat (..., 0) works. For example, it does not work in AIX + 7.1. */ +/* #undef HAVE_WORKING_FSTATAT_ZERO_FLAG */ + +/* Define if the mbrtoc32 function basically works. */ +#define HAVE_WORKING_MBRTOC32 1 + +/* Define to 1 if O_NOATIME works. */ +#define HAVE_WORKING_O_NOATIME 1 + +/* Define to 1 if O_NOFOLLOW works. */ +#define HAVE_WORKING_O_NOFOLLOW 1 + +/* Define if the uselocale function exists and may safely be called. */ +#define HAVE_WORKING_USELOCALE 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WS2TCPIP_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_XLOCALE_H 1 + +/* Define to 1 if you have the '_chsize' function. */ +/* #undef HAVE__CHSIZE */ + +/* Define to 1 if you have the '_set_invalid_parameter_handler' function. */ +/* #undef HAVE__SET_INVALID_PARAMETER_HANDLER */ + +/* Define to 1 if the compiler supports __builtin_expect, + and to 2 if does. */ +#define HAVE___BUILTIN_EXPECT 1 +#ifndef HAVE___BUILTIN_EXPECT +# define __builtin_expect(e, c) (e) +#elif HAVE___BUILTIN_EXPECT == 2 +# include +#endif + + +/* Define to 1 if ctype.h defines __header_inline. */ +/* #undef HAVE___HEADER_INLINE */ + +/* Please see the Gnulib manual for how to use these macros. + + Suppress extern inline with HP-UX cc, as it appears to be broken; see + . + + Suppress extern inline with Sun C in standards-conformance mode, as it + mishandles inline functions that call each other. E.g., for 'inline void f + (void) { } inline void g (void) { f (); }', c99 incorrectly complains + 'reference to static identifier "f" in extern inline function'. + This bug was observed with Oracle Developer Studio 12.6 + (Sun C 5.15 SunOS_sparc 2017/05/30). + + Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) + on configurations that mistakenly use 'static inline' to implement + functions or macros in standard C headers like . For example, + if isdigit is mistakenly implemented via a static inline function, + a program containing an extern inline function that calls isdigit + may not work since the C standard prohibits extern inline functions + from calling static functions (ISO C 99 section 6.7.4.(3). + This bug is known to occur on: + + OS X 10.8 and earlier; see: + https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html + + DragonFly; see + http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log + + FreeBSD; see: + https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html + + OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and + for clang but remains for g++; see . + Assume DragonFly and FreeBSD will be similar. + + GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. + */ +#if (((defined __APPLE__ && defined __MACH__) \ + || defined __DragonFly__ || defined __FreeBSD__) \ + && (defined HAVE___HEADER_INLINE \ + ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ + && ! defined __clang__) \ + : ((! defined _DONT_USE_CTYPE_INLINE_ \ + && (defined __GNUC__ || defined __cplusplus)) \ + || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ + && defined __GNUC__ && ! defined __cplusplus)))) +# define _GL_EXTERN_INLINE_STDHEADER_BUG +#endif +#if ((__GNUC__ \ + ? (defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + && !defined __PCC__) \ + : (199901L <= __STDC_VERSION__ \ + && !defined __HP_cc \ + && !defined __PGI \ + && !(defined __SUNPRO_C && __STDC__))) \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# define _GL_INLINE inline +# define _GL_EXTERN_INLINE extern inline +# define _GL_EXTERN_INLINE_IN_USE +#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ + && !defined __PCC__ \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ + /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ +# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) +# else +# define _GL_INLINE extern inline +# endif +# define _GL_EXTERN_INLINE extern +# define _GL_EXTERN_INLINE_IN_USE +#else +# define _GL_INLINE _GL_UNUSED static +# define _GL_EXTERN_INLINE _GL_UNUSED static +#endif + +/* In GCC 4.6 (inclusive) to 5.1 (exclusive), + suppress bogus "no previous prototype for 'FOO'" + and "no previous declaration for 'FOO'" diagnostics, + when FOO is an inline function in the header; see + and + . */ +#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ +# define _GL_INLINE_HEADER_CONST_PRAGMA +# else +# define _GL_INLINE_HEADER_CONST_PRAGMA \ + _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") +# endif +# define _GL_INLINE_HEADER_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ + _GL_INLINE_HEADER_CONST_PRAGMA +# define _GL_INLINE_HEADER_END \ + _Pragma ("GCC diagnostic pop") +#else +# define _GL_INLINE_HEADER_BEGIN +# define _GL_INLINE_HEADER_END +#endif + +/* Define to 1 if the compiler supports the keyword '__inline'. */ +#define HAVE___INLINE 1 + +/* Define to 1 if you have the '__xpg_strerror_r' function. */ +/* #undef HAVE___XPG_STRERROR_R */ + +/* Extract low level special HFS(+) files for debugging purposes when using + the "check" command (NOT FOR PACKAGING) */ +/* #undef HFS_EXTRACT_FS */ + +/* Define as const if the declaration of iconv() needs const. */ +#define ICONV_CONST + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'long double'. */ +#define LDBL_EXPBIT0_BIT 16 + +/* Define as the word index where to find the exponent of 'long double'. */ +#define LDBL_EXPBIT0_WORD 3 + +/* Define as the bit index in the word where to find the sign of 'long + double'. */ +/* #undef LDBL_SIGNBIT_BIT */ + +/* Define as the word index where to find the sign of 'long double'. */ +/* #undef LDBL_SIGNBIT_WORD */ + +/* Define if localename.c overrides newlocale(), duplocale(), freelocale(). */ +/* #undef LOCALENAME_ENHANCE_LOCALE_FUNCS */ + +/* Define to 1 if lseek does not detect pipes. */ +/* #undef LSEEK_PIPE_BROKEN */ + +/* Define to 1 if 'lstat' dereferences a symlink specified with a trailing + slash. */ +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ +#define MALLOC_0_IS_NONNULL 1 + +/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ +/* #undef MAP_ANONYMOUS */ + +/* Define if the mbrtoc32 function does not return (size_t) -2 for empty + input. */ +#define MBRTOC32_EMPTY_INPUT_BUG 1 + +/* Define if the mbrtoc32 function may signal encoding errors in the C locale. + */ +#define MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ 1 + +/* Define if the mbrtoc32 function does not accept the input bytes one-by-one. + */ +/* #undef MBRTOC32_MULTIBYTE_LOCALE_BUG */ + +/* Define if the mbrtowc function does not return (size_t) -2 for empty input. + */ +#define MBRTOWC_EMPTY_INPUT_BUG 1 + +/* Define if the mbrtowc function may signal encoding errors in the C locale. + */ +#define MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ 1 + +/* Define if the mbrtowc function has the NULL pwc argument bug. */ +/* #undef MBRTOWC_NULL_ARG1_BUG */ + +/* Define if the mbrtowc function has the NULL string argument bug. */ +/* #undef MBRTOWC_NULL_ARG2_BUG */ + +/* Define if the mbrtowc function does not return 0 for a NUL character. */ +/* #undef MBRTOWC_NUL_RETVAL_BUG */ + +/* Define if the mbrtowc function returns a wrong return value. */ +/* #undef MBRTOWC_RETVAL_BUG */ + +/* Define if the mbrtowc function stores a wide character when reporting + incomplete input. */ +/* #undef MBRTOWC_STORES_INCOMPLETE_BUG */ + +/* Use GNU style printf and scanf. */ +#ifndef __USE_MINGW_ANSI_STDIO +# define __USE_MINGW_ANSI_STDIO 1 +#endif + + +/* Define to 1 if the encoding of NaN 'double's is as in IEEE 754-2008 § + 6.2.1. */ +/* #undef MIPS_NAN2008_DOUBLE */ + +/* Define to 1 if the encoding of NaN 'float's is as in IEEE 754-2008 § + 6.2.1. */ +/* #undef MIPS_NAN2008_FLOAT */ + +/* Define to 1 if the encoding of NaN 'long double's is as in IEEE 754-2008 § + 6.2.1. */ +/* #undef MIPS_NAN2008_LONG_DOUBLE */ + +/* Define to 1 on musl libc. */ +/* #undef MUSL_LIBC */ + +/* Define to 1 if assertions should be disabled. */ +/* #undef NDEBUG */ + +/* Define to 1 if realloc should abort upon undefined behaviour. */ +/* #undef NEED_SANITIZED_REALLOC */ + +/* Define to 1 to enable general improvements of setlocale. */ +#define NEED_SETLOCALE_IMPROVED 0 + +/* Define to 1 to enable a multithread-safety fix of setlocale. */ +#define NEED_SETLOCALE_MTSAFE 1 + +/* Define to 1 if nl_langinfo is multithread-safe. */ +#define NL_LANGINFO_MTSAFE 1 + +/* Define to 1 if open() fails to recognize a trailing slash. */ +/* #undef OPEN_TRAILING_SLASH_BUG */ + +/* Name of package */ +#define PACKAGE "parted" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "bug-parted@gnu.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "GNU parted" + +/* String identifying the packager of this software */ +/* #undef PACKAGE_PACKAGER */ + +/* Packager info for bug reports (URL/e-mail/...) */ +/* #undef PACKAGE_PACKAGER_BUG_REPORTS */ + +/* Packager-specific version information */ +/* #undef PACKAGE_PACKAGER_VERSION */ + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "GNU parted 3.6.6-c5bd" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "parted" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "https://www.gnu.org/software/parted/" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "3.6.6-c5bd" + +/* Define to the type that is the result of default argument promotions of + type mode_t. */ +#define PROMOTED_MODE_T mode_t + +/* Define if pthread_create is an inline function. */ +/* #undef PTHREAD_CREATE_IS_INLINE */ + +/* Define if the pthread_in_use() detection is hard. */ +/* #undef PTHREAD_IN_USE_DETECTION_HARD */ + +/* Define if the 'robust' attribute of pthread_mutex* doesn't exist. */ +#define PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED 1 + +/* Define if the pthread_rwlock wait queue handling is not reasonable. */ +/* #undef PTHREAD_RWLOCK_BAD_WAITQUEUE */ + +/* Define if the functions pthread_rwlock_timedrdlock and + pthread_rwlock_timedwrlock don't exist. */ +/* #undef PTHREAD_RWLOCK_LACKS_TIMEOUT */ + +/* Define if all pthread_rwlock* functions don't exist. */ +/* #undef PTHREAD_RWLOCK_UNIMPLEMENTED */ + +/* Define to 1 if pthread_sigmask(), when it fails, returns -1 and sets errno. + */ +/* #undef PTHREAD_SIGMASK_FAILS_WITH_ERRNO */ + +/* Define to 1 if pthread_sigmask may return 0 and have no effect. */ +/* #undef PTHREAD_SIGMASK_INEFFECTIVE */ + +/* Define to 1 if pthread_sigmask() unblocks signals incorrectly. */ +/* #undef PTHREAD_SIGMASK_UNBLOCK_BUG */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'ptrdiff_t'. */ +#define PTRDIFF_T_SUFFIX l + +/* Define to 1 if readlink fails to recognize a trailing slash. */ +/* #undef READLINK_TRAILING_SLASH_BUG */ + +/* Define to 1 if readlink sets errno instead of truncating a too-long link. + */ +/* #undef READLINK_TRUNCATE_BUG */ + +/* Disable all writing code */ +/* #undef READ_ONLY */ + +/* Define to 1 if gnulib's fchdir() replacement is used. */ +/* #undef REPLACE_FCHDIR */ + +/* Define to 1 if stat needs help when passed a file name with a trailing + slash */ +/* #undef REPLACE_FUNC_STAT_FILE */ + +/* Define if nl_langinfo exists but is overridden by gnulib. */ +#define REPLACE_NL_LANGINFO 1 + +/* Define to 1 if open() should work around the inability to open a directory. + */ +/* #undef REPLACE_OPEN_DIRECTORY */ + +/* Define to 1 if strerror(0) does not return a message implying success. */ +/* #undef REPLACE_STRERROR_0 */ + +/* Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe. */ +#define SETLOCALE_NULL_ALL_MTSAFE 0 + +/* Define to 1 if setlocale (category, NULL) is multithread-safe. */ +#define SETLOCALE_NULL_ONE_MTSAFE 0 + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'sig_atomic_t'. */ +#define SIG_ATOMIC_T_SUFFIX + +/* The size of 'off_t', as computed by sizeof. */ +#define SIZEOF_OFF_T 8 + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'size_t'. */ +#define SIZE_T_SUFFIX ul + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if the 'S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define to 1 if all of the C89 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#define STDC_HEADERS 1 + +/* Define to 1 if strerror_r returns char *. */ +#define STRERROR_R_CHAR_P 1 + +/* Define to 1 if the type of the st_atim member of a struct stat is struct + timespec. */ +#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 + +/* Define to 1 if unlink (dir) cannot possibly succeed. */ +#define UNLINK_CANNOT_UNLINK_DIR 1 + +/* Define to 1 if unlink() on a parent directory may succeed */ +/* #undef UNLINK_PARENT_BUG */ + +/* Define if you have sufficient blkid support. */ +/* #undef USE_BLKID */ + +/* Define if the combination of the ISO C and POSIX multithreading APIs can be + used. */ +/* #undef USE_ISOC_AND_POSIX_THREADS */ + +/* Define if the ISO C multithreading library can be used. */ +/* #undef USE_ISOC_THREADS */ + +/* Define to enable the declarations of ISO C 23 Annex K types and functions. */ +#if !(defined __STDC_WANT_LIB_EXT1__ && __STDC_WANT_LIB_EXT1__) +#undef/**/__STDC_WANT_LIB_EXT1__ +#define __STDC_WANT_LIB_EXT1__ 1 +#endif + + +/* Define if the POSIX multithreading library can be used. */ +#define USE_POSIX_THREADS 1 + +/* Define if references to the POSIX multithreading library are satisfied by + libc. */ +/* #undef USE_POSIX_THREADS_FROM_LIBC */ + +/* Define if references to the POSIX multithreading library should be made + weak. */ +#define USE_POSIX_THREADS_WEAK 1 + +/* Enable extensions on AIX, Interix, z/OS. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# define _DARWIN_C_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# define _HPUX_ALT_XOPEN_SOCKET_API 1 +#endif +/* Identify the host operating system as Minix. + This macro does not affect the system headers' behavior. + A future release of Autoconf may stop defining this macro. */ +#ifndef _MINIX +/* # undef _MINIX */ +#endif +/* Enable general extensions on NetBSD. + Enable NetBSD compatibility extensions on Minix. */ +#ifndef _NETBSD_SOURCE +# define _NETBSD_SOURCE 1 +#endif +/* Enable OpenBSD compatibility extensions on NetBSD. + Oddly enough, this does nothing on OpenBSD. */ +#ifndef _OPENBSD_SOURCE +# define _OPENBSD_SOURCE 1 +#endif +/* Define to 1 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_SOURCE +/* # undef _POSIX_SOURCE */ +#endif +/* Define to 2 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_1_SOURCE +/* # undef _POSIX_1_SOURCE */ +#endif +/* Enable POSIX-compatible threading on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +#endif +/* Enable extensions specified by C23 Annex F. */ +#ifndef __STDC_WANT_IEC_60559_EXT__ +# define __STDC_WANT_IEC_60559_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +#endif +/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# define __STDC_WANT_LIB_EXT2__ 1 +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable X/Open extensions. Define to 500 only if necessary + to make mbstate_t available. */ +#ifndef _XOPEN_SOURCE +/* # undef _XOPEN_SOURCE */ +#endif + + +/* Define if the native Windows multithreading API can be used. */ +/* #undef USE_WINDOWS_THREADS */ + +/* Version number of package */ +#define VERSION "3.6.6-c5bd" + +/* Define to 1 if unsetenv returns void instead of int. */ +/* #undef VOID_UNSETENV */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wchar_t'. */ +#define WCHAR_T_SUFFIX u + +/* Define if the wcrtomb function does not work in the C locale. */ +/* #undef WCRTOMB_C_LOCALE_BUG */ + +/* Define if the wcrtomb function has an incorrect return value. */ +/* #undef WCRTOMB_RETVAL_BUG */ + +/* Define if WSAStartup is needed. */ +/* #undef WINDOWS_SOCKETS */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wint_t'. */ +#define WINT_T_SUFFIX u + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* enable compile-time and run-time bounds-checking, and some warnings */ +#define _FORTIFY_SOURCE 2 + +/* True if the compiler says it groks GNU C version MAJOR.MINOR. + Except that + - clang groks GNU C 4.2, even on Windows, where it does not define + __GNUC__. + - The OpenMandriva-modified clang compiler pretends that it groks + GNU C version 13.1, but it doesn't: It does not support + __attribute__ ((__malloc__ (f, i))), nor does it support + __attribute__ ((__warning__ (message))) on a function redeclaration. + - Users can make clang lie as well, through the -fgnuc-version option. */ +#if defined __GNUC__ && defined __GNUC_MINOR__ && !defined __clang__ +# define _GL_GNUC_PREREQ(major, minor) \ + ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) +#elif defined __clang__ + /* clang really only groks GNU C 4.2. */ +# define _GL_GNUC_PREREQ(major, minor) \ + ((major) < 4 + ((minor) <= 2)) +#else +# define _GL_GNUC_PREREQ(major, minor) 0 +#endif + + +/* Define to enable the declarations of ISO C 11 types and functions. */ +/* #undef _ISOC11_SOURCE */ + +/* Define to 1 on platforms where this makes off_t a 64-bit type. */ +/* #undef _LARGE_FILES */ + +/* Define to 1 on Solaris. */ +/* #undef _LCONV_C99 */ + +/* Define so that AIX headers are more compatible with GNU/Linux. */ +#define _LINUX_SOURCE_COMPAT 1 + +/* The _Noreturn keyword of C11. */ +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif (defined __clang__ && __clang_major__ < 16 \ + && defined _GL_WORK_AROUND_LLVM_BUG_59792) + /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around + that rare LLVM bug, though you may get many false-alarm warnings. */ +# define _Noreturn +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || (!defined __STRICT_ANSI__ \ + && (_GL_GNUC_PREREQ (4, 7) \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))))) + /* _Noreturn works as-is. */ +# elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif + + +/* Define to 1 in order to get the POSIX compatible declarations of socket + functions. */ +/* #undef _POSIX_PII_SOCKET */ + +/* Define if you want to include , so that it consistently + overrides 's RE_DUP_MAX. */ +#define _REGEX_INCLUDE_LIMITS_H 1 + +/* Define if you want regoff_t to be at least as wide POSIX requires. */ +#define _REGEX_LARGE_OFFSETS 1 + +/* Number of bits in time_t, on hosts where this is settable. */ +/* #undef _TIME_BITS */ + +/* For standard stat data types on VMS. */ +#define _USE_STD_STAT 1 + +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +/* #undef __GETOPT_PREFIX */ + +/* Define to 1 on platforms where this makes time_t a 64-bit type. */ +/* #undef __MINGW_USE_VC2005_COMPAT */ + +/* Define to 1 if the system predates C++11. */ +/* #undef __STDC_CONSTANT_MACROS */ + +/* Define to 1 if the system predates C++11. */ +/* #undef __STDC_LIMIT_MACROS */ + +/* Define to 1 if C does not support variable-length arrays, and if the + compiler does not already define this. */ +/* #undef __STDC_NO_VLA__ */ + +/* The _GL_ASYNC_SAFE marker should be attached to functions that are + signal handlers (for signals other than SIGABRT, SIGPIPE) or can be + invoked from such signal handlers. Such functions have some restrictions: + * All functions that it calls should be marked _GL_ASYNC_SAFE as well, + or should be listed as async-signal-safe in POSIX + + section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in + particular, are NOT async-signal-safe. + * All memory locations (variables and struct fields) that these functions + access must be marked 'volatile'. This holds for both read and write + accesses. Otherwise the compiler might optimize away stores to and + reads from such locations that occur in the program, depending on its + data flow analysis. For example, when the program contains a loop + that is intended to inspect a variable set from within a signal handler + while (!signal_occurred) + ; + the compiler is allowed to transform this into an endless loop if the + variable 'signal_occurred' is not declared 'volatile'. + Additionally, recall that: + * A signal handler should not modify errno (except if it is a handler + for a fatal signal and ends by raising the same signal again, thus + provoking the termination of the process). If it invokes a function + that may clobber errno, it needs to save and restore the value of + errno. */ +#define _GL_ASYNC_SAFE + + +/* Attributes. */ +/* Define _GL_HAS_ATTRIBUTE only once, because on FreeBSD, with gcc < 5, if + gets included once again after , __has_attribute(x) + expands to 0 always, and redefining _GL_HAS_ATTRIBUTE would turn off all + attributes. */ +#ifndef _GL_HAS_ATTRIBUTE +# if (defined __has_attribute \ + && (!defined __clang_minor__ \ + || (defined __apple_build_version__ \ + ? 7000000 <= __apple_build_version__ \ + : 5 <= __clang_major__))) +# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) +# else +# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr +# define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) +# define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) +# define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) +# define _GL_ATTR_diagnose_if 0 +# define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) +# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) +# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) +# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) +# ifdef _ICC +# define _GL_ATTR_may_alias 0 +# else +# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) +# endif +# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) +# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) +# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) +# define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) +# define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) +# define _GL_ATTR_reproducible 0 /* not yet supported, as of GCC 14 */ +# define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) +# define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) +# define _GL_ATTR_unsequenced 0 /* not yet supported, as of GCC 14 */ +# define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) +# endif +#endif + +/* Use __has_c_attribute if available. However, do not use with + pre-C23 GCC, which can issue false positives if -Wpedantic. */ +#if (defined __has_c_attribute \ + && ! (_GL_GNUC_PREREQ (4, 6) \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710)) +# define _GL_HAVE___HAS_C_ATTRIBUTE 1 +#else +# define _GL_HAVE___HAS_C_ATTRIBUTE 0 +#endif + +/* Attributes in bracket syntax [[...]] vs. attributes in __attribute__((...)) + syntax, in function declarations. There are two problems here. + (Last tested with gcc/g++ 14 and clang/clang++ 18.) + + 1) We want that the _GL_ATTRIBUTE_* can be cumulated on the same declaration + in any order. + =========================== foo.c = foo.cc =========================== + __attribute__ ((__deprecated__)) [[__nodiscard__]] int bar1 (int); + [[__nodiscard__]] __attribute__ ((__deprecated__)) int bar2 (int); + ====================================================================== + This gives a syntax error + - in C mode with gcc + , and + - in C++ mode with clang++ version < 16, and + - in C++ mode, inside extern "C" {}, still in newer clang++ versions + . + */ +/* Define if, in a function declaration, the attributes in bracket syntax + [[...]] must come before the attributes in __attribute__((...)) syntax. + If this is defined, it is best to avoid the bracket syntax, so that the + various _GL_ATTRIBUTE_* can be cumulated on the same declaration in any + order. */ +#ifdef __cplusplus +# if defined __clang__ +# define _GL_BRACKET_BEFORE_ATTRIBUTE 1 +# endif +#else +# if defined __GNUC__ && !defined __clang__ +# define _GL_BRACKET_BEFORE_ATTRIBUTE 1 +# endif +#endif +/* + 2) We want that the _GL_ATTRIBUTE_* can be placed in a declaration + - without 'extern', in C as well as in C++, + - with 'extern', in C, + - with 'extern "C"', in C++ + in the same position. That is, we don't want to be forced to use a + macro which arranges for the attribute to come before 'extern' in + one case and after 'extern' in the other case, because such a macro + would make the source code of .h files pretty ugly. + =========================== foo.c = foo.cc =========================== + #ifdef __cplusplus + # define CC "C" + #else + # define CC + #endif + + #define ND [[__nodiscard__]] + #define WUR __attribute__((__warn_unused_result__)) + + #ifdef __cplusplus + extern "C" { + #endif + // gcc clang g++ clang++ + + ND int foo (int); + int ND foo (int); // warn error warn error + int foo ND (int); + int foo (int) ND; // warn error warn error + + WUR int foo (int); + int WUR foo (int); + int fo1 WUR (int); // error error error error + int foo (int) WUR; + + #ifdef __cplusplus + } + #endif + + // gcc clang g++ clang++ + + ND extern CC int foo (int); // error error + extern CC ND int foo (int); // error error + extern CC int ND foo (int); // warn error warn error + extern CC int foo ND (int); + extern CC int foo (int) ND; // warn error warn error + + WUR extern CC int foo (int); // warn + extern CC WUR int foo (int); + extern CC int WUR foo (int); + extern CC int foo WUR (int); // error error error error + extern CC int foo (int) WUR; + + ND EXTERN_C_FUNC int foo (int); // error error + EXTERN_C_FUNC ND int foo (int); + EXTERN_C_FUNC int ND foo (int); // warn error warn error + EXTERN_C_FUNC int foo ND (int); + EXTERN_C_FUNC int foo (int) ND; // warn error warn error + + WUR EXTERN_C_FUNC int foo (int); // warn + EXTERN_C_FUNC WUR int foo (int); + EXTERN_C_FUNC int WUR foo (int); + EXTERN_C_FUNC int fo2 WUR (int); // error error error error + EXTERN_C_FUNC int foo (int) WUR; + ====================================================================== + So, if we insist on using the 'extern' keyword ('extern CC' idiom): + * If _GL_ATTRIBUTE_* expands to bracket syntax [[...]] + in both C and C++, there is one available position: + - between the function name and the parameter list. + * If _GL_ATTRIBUTE_* expands to __attribute__((...)) syntax + in both C and C++, there are several available positions: + - before the return type, + - between return type and function name, + - at the end of the declaration. + * If _GL_ATTRIBUTE_* expands to bracket syntax [[...]] in C and to + __attribute__((...)) syntax in C++, there is no available position: + it would need to come before 'extern' in C but after 'extern "C"' + in C++. + * If _GL_ATTRIBUTE_* expands to __attribute__((...)) syntax in C and + to bracket syntax [[...]] in C++, there is one available position: + - before the return type. + Whereas, if we use the 'EXTERN_C_FUNC' idiom, which conditionally + omits the 'extern' keyword: + * If _GL_ATTRIBUTE_* expands to bracket syntax [[...]] + in both C and C++, there are two available positions: + - before the return type, + - between the function name and the parameter list. + * If _GL_ATTRIBUTE_* expands to __attribute__((...)) syntax + in both C and C++, there are several available positions: + - before the return type, + - between return type and function name, + - at the end of the declaration. + * If _GL_ATTRIBUTE_* expands to bracket syntax [[...]] in C and to + __attribute__((...)) syntax in C++, there is one available position: + - before the return type. + * If _GL_ATTRIBUTE_* expands to __attribute__((...)) syntax in C and + to bracket syntax [[...]] in C++, there is one available position: + - before the return type. + The best choice is therefore to use the 'EXTERN_C_FUNC' idiom and + put the attributes before the return type. This works regardless + to what the _GL_ATTRIBUTE_* macros expand. + */ + +/* Attributes in bracket syntax [[...]] vs. attributes in __attribute__((...)) + syntax, in static/inline function definitions. + + There are similar constraints as for function declarations. However, here, + we cannot omit the storage-class specifier. Therefore, the following rule + applies: + * The macros + _GL_ATTRIBUTE_CONST + _GL_ATTRIBUTE_DEPRECATED + _GL_ATTRIBUTE_MAYBE_UNUSED + _GL_ATTRIBUTE_NODISCARD + _GL_ATTRIBUTE_PURE + _GL_ATTRIBUTE_REPRODUCIBLE + _GL_ATTRIBUTE_UNSEQUENCED + which may expand to bracket syntax [[...]], must come first, before the + storage-class specifier. + * Other _GL_ATTRIBUTE_* macros, that expand to __attribute__((...)) syntax, + are better placed between the storage-class specifier and the return + type. + */ + +/* Attributes in bracket syntax [[...]] vs. attributes in __attribute__((...)) + syntax, in variable declarations. + + At which position can they be placed? + (Last tested with gcc/g++ 14 and clang/clang++ 18.) + + =========================== foo.c = foo.cc =========================== + #ifdef __cplusplus + # define CC "C" + #else + # define CC + #endif + + #define BD [[__deprecated__]] + #define AD __attribute__ ((__deprecated__)) + + // gcc clang g++ clang++ + + BD extern CC int var; // error error + extern CC BD int var; // error error + extern CC int BD var; // warn error warn error + extern CC int var BD; + + AD extern CC int var; // warn + extern CC AD int var; + extern CC int AD var; + extern CC int var AD; + + BD extern CC int z[]; // error error + extern CC BD int z[]; // error error + extern CC int BD z[]; // warn error warn error + extern CC int z1 BD []; + extern CC int z[] BD; // warn error error + + AD extern CC int z[]; // warn + extern CC AD int z[]; + extern CC int AD z[]; + extern CC int z2 AD []; // error error error error + extern CC int z[] AD; + ====================================================================== + + * For non-array variables, the only good position is after the variable name, + that is, at the end of the declaration. + * For array variables, you will need to distinguish C and C++: + - In C, before the 'extern' keyword. + - In C++, between the 'extern "C"' and the variable's type. + */ + +/* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function + is the size of the returned memory block. + _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied + by the Nth argument of the function is the size of the returned memory block. + */ +/* Applies to: functions, pointer to functions, function types. */ +#ifndef _GL_ATTRIBUTE_ALLOC_SIZE +# if _GL_HAS_ATTRIBUTE (alloc_size) +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) +# else +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) +# endif +#endif + +/* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the + function and report an error if it cannot do so. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_ALWAYS_INLINE +# if _GL_HAS_ATTRIBUTE (always_inline) +# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) +# else +# define _GL_ATTRIBUTE_ALWAYS_INLINE +# endif +#endif + +/* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show + in stack traces when debugging. The compiler should omit the function from + stack traces. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_ARTIFICIAL +# if _GL_HAS_ATTRIBUTE (artificial) +# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) +# else +# define _GL_ATTRIBUTE_ARTIFICIAL +# endif +#endif + +/* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */ +/* Applies to: functions. */ +/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at + . + Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ +#ifndef _GL_ATTRIBUTE_COLD +# if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ +# ifndef __SUNPRO_C +# define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) +# else +# define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) +# endif +# else +# define _GL_ATTRIBUTE_COLD +# endif +#endif + +/* _GL_ATTRIBUTE_CONST declares: + It is OK for a compiler to move calls to the function and to omit + calls to the function if another call has the same arguments or the + result is not used. + This attribute is safe for a function that neither depends on + nor affects state, and always returns exactly once - + e.g., does not raise an exception, call longjmp, or loop forever. + (This attribute is stricter than _GL_ATTRIBUTE_PURE because the + function cannot observe state. It is stricter than + _GL_ATTRIBUTE_UNSEQUENCED because the function must return exactly + once and cannot depend on state addressed by its arguments.) */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_CONST +# if _GL_HAS_ATTRIBUTE (const) +# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) +# else +# define _GL_ATTRIBUTE_CONST _GL_ATTRIBUTE_UNSEQUENCED +# endif +#endif + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. + _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that + can be freed via 'free'; it can be used only after declaring 'free'. */ +/* Applies to: functions. Cannot be used on inline functions. */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if _GL_GNUC_PREREQ (11, 0) +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif +/* If gnulib's or has already defined this macro, continue + to use this earlier definition, since may not have been included + yet. */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# if defined __cplusplus && defined __GNUC__ && !defined __clang__ +/* Work around GCC bug */ +# define _GL_ATTRIBUTE_DEALLOC_FREE \ + _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) +# else +# define _GL_ATTRIBUTE_DEALLOC_FREE \ + _GL_ATTRIBUTE_DEALLOC (free, 1) +# endif +#endif + +/* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated. + The compiler may warn if the entity is used. */ +/* Applies to: + - function, variable, + - struct, union, struct/union member, + - enumeration, enumeration item, + - typedef, + in C++ also: namespace, class, template specialization. */ +#ifndef _GL_ATTRIBUTE_DEPRECATED +# ifndef _GL_BRACKET_BEFORE_ATTRIBUTE +# if _GL_HAVE___HAS_C_ATTRIBUTE +# if __has_c_attribute (__deprecated__) +# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] +# endif +# endif +# endif +# if !defined _GL_ATTRIBUTE_DEPRECATED && _GL_HAS_ATTRIBUTE (deprecated) +# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) +# endif +# ifndef _GL_ATTRIBUTE_DEPRECATED +# define _GL_ATTRIBUTE_DEPRECATED +# endif +#endif + +/* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and + the function call is not optimized away. + _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and + the function call is not optimized away. */ +/* Applies to: functions. */ +#if !(defined _GL_ATTRIBUTE_ERROR && defined _GL_ATTRIBUTE_WARNING) +# if _GL_HAS_ATTRIBUTE (error) +# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) +# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) +# elif _GL_HAS_ATTRIBUTE (diagnose_if) +# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) +# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# else +# define _GL_ATTRIBUTE_ERROR(msg) +# define _GL_ATTRIBUTE_WARNING(msg) +# endif +#endif + +/* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain + visible to debuggers etc., even with '-fwhole-program'. */ +/* Applies to: functions, variables. */ +#ifndef _GL_ATTRIBUTE_EXTERNALLY_VISIBLE +# if _GL_HAS_ATTRIBUTE (externally_visible) +# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) +# else +# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE +# endif +#endif + +/* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if + the control flow falls through to the immediately following 'case' or + 'default' label. The compiler should not warn in this case. */ +/* Applies to: Empty statement (;), inside a 'switch' statement. */ +/* Always expands to something. */ +#ifndef _GL_ATTRIBUTE_FALLTHROUGH +# if _GL_HAVE___HAS_C_ATTRIBUTE +# if __has_c_attribute (__fallthrough__) +# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] +# endif +# endif +# if !defined _GL_ATTRIBUTE_FALLTHROUGH && _GL_HAS_ATTRIBUTE (fallthrough) +# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) +# endif +# ifndef _GL_ATTRIBUTE_FALLTHROUGH +# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) +# endif +#endif + +/* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) + declares that the STRING-INDEXth function argument is a format string of + style ARCHETYPE, which is one of: + printf, gnu_printf + scanf, gnu_scanf, + strftime, gnu_strftime, + strfmon, + or the same thing prefixed and suffixed with '__'. + If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK + are suitable for the format string. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_FORMAT +# if _GL_HAS_ATTRIBUTE (format) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +# else +# define _GL_ATTRIBUTE_FORMAT(spec) +# endif +#endif + +/* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other + compilation unit, it executes code from that unit only by return or by + exception handling. This declaration lets the compiler optimize that unit + more aggressively. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_LEAF +# if _GL_HAS_ATTRIBUTE (leaf) +# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) +# else +# define _GL_ATTRIBUTE_LEAF +# endif +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if _GL_HAS_ATTRIBUTE (malloc) +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the + same storage as pointers to other types. Thus this declaration disables + strict aliasing optimization. */ +/* Applies to: types. */ +/* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ +#ifndef _GL_ATTRIBUTE_MAY_ALIAS +# if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C +# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) +# else +# define _GL_ATTRIBUTE_MAY_ALIAS +# endif +#endif + +/* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if + the entity is not used. The compiler should not warn if the entity is not + used. */ +/* Applies to: + - function, variable, + - struct, union, struct/union member, + - enumeration, enumeration item, + - typedef, + in C++ also: class. */ +/* In C++ and C23, this is spelled [[__maybe_unused__]]. + GCC's syntax is __attribute__ ((__unused__)). + clang supports both syntaxes. Except that with clang ≥ 6, < 10, in C++ mode, + __has_c_attribute (__maybe_unused__) yields true but the use of + [[__maybe_unused__]] nevertheless produces a warning. */ +#ifndef _GL_ATTRIBUTE_MAYBE_UNUSED +# ifndef _GL_BRACKET_BEFORE_ATTRIBUTE +# if defined __clang__ && defined __cplusplus +# if !defined __apple_build_version__ && __clang_major__ >= 10 +# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] +# endif +# elif _GL_HAVE___HAS_C_ATTRIBUTE +# if __has_c_attribute (__maybe_unused__) +# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] +# endif +# endif +# endif +# ifndef _GL_ATTRIBUTE_MAYBE_UNUSED +# define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED +# endif +#endif +/* Alternative spelling of this macro, for convenience and for + compatibility with glibc/include/libc-symbols.h. */ +#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED +/* Earlier spellings of this macro. */ +#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED + +/* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not + discard the return value. The compiler may warn if the caller does not use + the return value, unless the caller uses something like ignore_value. */ +/* Applies to: function, enumeration, class. */ +#ifndef _GL_ATTRIBUTE_NODISCARD +# ifndef _GL_BRACKET_BEFORE_ATTRIBUTE +# if defined __clang__ && defined __cplusplus + /* With clang up to 15.0.6 (at least), in C++ mode, [[__nodiscard__]] produces + a warning. + The 1000 below means a yet unknown threshold. When clang++ version X + starts supporting [[__nodiscard__]] without warning about it, you can + replace the 1000 with X. */ +# if __clang_major__ >= 1000 +# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] +# endif +# elif _GL_HAVE___HAS_C_ATTRIBUTE +# if __has_c_attribute (__nodiscard__) +# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] +# endif +# endif +# endif +# if !defined _GL_ATTRIBUTE_NODISCARD && _GL_HAS_ATTRIBUTE (warn_unused_result) +# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) +# endif +# ifndef _GL_ATTRIBUTE_NODISCARD +# define _GL_ATTRIBUTE_NODISCARD +# endif +#endif + +/* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the + function. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_NOINLINE +# if _GL_HAS_ATTRIBUTE (noinline) +# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) +# else +# define _GL_ATTRIBUTE_NOINLINE +# endif +#endif + +/* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,... + must not be NULL. + _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be + null. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_NONNULL +# if _GL_HAS_ATTRIBUTE (nonnull) +# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) +# else +# define _GL_ATTRIBUTE_NONNULL(args) +# endif +#endif + +/* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is + not meant to be NUL-terminated. */ +/* Applies to: struct/union members and variables that are arrays of element + type '[[un]signed] char'. */ +#ifndef _GL_ATTRIBUTE_NONSTRING +# if _GL_HAS_ATTRIBUTE (nonstring) +# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) +# else +# define _GL_ATTRIBUTE_NONSTRING +# endif +#endif + +/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +/* Applies to: functions. */ +/* After a function's parameter list, this attribute must come first, before + other attributes. */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +# if _GL_GNUC_PREREQ (2, 8) || __clang_major__ >= 4 +# if __cplusplus >= 201103L +# define _GL_ATTRIBUTE_NOTHROW noexcept (true) +# else +# define _GL_ATTRIBUTE_NOTHROW throw () +# endif +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# else +# if _GL_HAS_ATTRIBUTE (nothrow) +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# endif +#endif + +/* _GL_ATTRIBUTE_PACKED declares: + For struct members: The member has the smallest possible alignment. + For struct, union, class: All members have the smallest possible alignment, + minimizing the memory required. */ +/* Applies to: struct members, struct, union, + in C++ also: class. */ +#ifndef _GL_ATTRIBUTE_PACKED +/* Oracle Studio 12.6 miscompiles code with __attribute__ ((__packed__)) despite + __has_attribute OK. */ +# if _GL_HAS_ATTRIBUTE (packed) && !defined __SUNPRO_C +# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) +# else +# define _GL_ATTRIBUTE_PACKED +# endif +#endif + +/* _GL_ATTRIBUTE_PURE declares: + It is OK for a compiler to move calls to the function and to omit + calls to the function if another call has the same arguments or the + result is not used, and if observable state is the same. + This attribute is safe for a function that does not affect observable state + and always returns exactly once. + (This attribute is looser than _GL_ATTRIBUTE_CONST because the function + can depend on observable state. It is stricter than + _GL_ATTRIBUTE_REPRODUCIBLE because the function must return exactly + once and cannot affect state addressed by its arguments.) */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_PURE +# if _GL_HAS_ATTRIBUTE (pure) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE _GL_ATTRIBUTE_REPRODUCIBLE +# endif +#endif + +/* _GL_ATTRIBUTE_REPRODUCIBLE declares: + It is OK for a compiler to move calls to the function and to omit duplicate + calls to the function with the same arguments, so long as the state + addressed by its arguments is the same and is updated in time for + the rest of the program. + This attribute is safe for a function that is effectless and idempotent; see + ISO C 23 § 6.7.12.7 for a definition of these terms. + (This attribute is looser than _GL_ATTRIBUTE_UNSEQUENCED because + the function need not be stateless and idempotent. It is looser + than _GL_ATTRIBUTE_PURE because the function need not return + exactly once and can affect state addressed by its arguments.) + See also and + . */ +/* Applies to: functions, pointer to functions, function types. */ +#ifndef _GL_ATTRIBUTE_REPRODUCIBLE +/* This may be revisited when gcc and clang support [[reproducible]] or possibly + __attribute__ ((__reproducible__)). */ +# ifndef _GL_BRACKET_BEFORE_ATTRIBUTE +# if _GL_HAS_ATTRIBUTE (reproducible) +# define _GL_ATTRIBUTE_REPRODUCIBLE [[reproducible]] +# endif +# endif +# ifndef _GL_ATTRIBUTE_REPRODUCIBLE +# define _GL_ATTRIBUTE_REPRODUCIBLE +# endif +#endif + +/* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is + a non-NULL pointer. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_RETURNS_NONNULL +# if _GL_HAS_ATTRIBUTE (returns_nonnull) +# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) +# else +# define _GL_ATTRIBUTE_RETURNS_NONNULL +# endif +#endif + +/* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a + trailing NULL argument. + _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). + _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_SENTINEL +# if _GL_HAS_ATTRIBUTE (sentinel) +# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) +# else +# define _GL_ATTRIBUTE_SENTINEL(pos) +# endif +#endif + +/* _GL_ATTRIBUTE_UNSEQUENCED declares: + It is OK for a compiler to move calls to the function and to omit duplicate + calls to the function with the same arguments, so long as the state + addressed by its arguments is the same. + This attribute is safe for a function that is effectless, idempotent, + stateless, and independent; see ISO C 23 § 6.7.12.7 for a definition of + these terms. + (This attribute is stricter than _GL_ATTRIBUTE_REPRODUCIBLE because + the function must be stateless and independent. It is looser than + _GL_ATTRIBUTE_CONST because the function need not return exactly + once and can depend on state addressed by its arguments.) + See also and + . */ +/* Applies to: functions, pointer to functions, function types. */ +#ifndef _GL_ATTRIBUTE_UNSEQUENCED +/* This may be revisited when gcc and clang support [[unsequenced]] or possibly + __attribute__ ((__unsequenced__)). */ +# ifndef _GL_BRACKET_BEFORE_ATTRIBUTE +# if _GL_HAS_ATTRIBUTE (unsequenced) +# define _GL_ATTRIBUTE_UNSEQUENCED [[unsequenced]] +# endif +# endif +# ifndef _GL_ATTRIBUTE_UNSEQUENCED +# define _GL_ATTRIBUTE_UNSEQUENCED +# endif +#endif + +/* A helper macro. Don't use it directly. */ +#ifndef _GL_ATTRIBUTE_UNUSED +# if _GL_HAS_ATTRIBUTE (unused) +# define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define _GL_ATTRIBUTE_UNUSED +# endif +#endif + + +/* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the + immediately preceding label is not used. The compiler should not warn + if the label is not used. */ +/* Applies to: label (both in C and C++). */ +/* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;' + syntax. But clang does. */ +#ifndef _GL_UNUSED_LABEL +# if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__ +# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED +# else +# define _GL_UNUSED_LABEL +# endif +#endif + +/* The following attributes enable detection of multithread-safety problems + and resource leaks at compile-time, by clang ≥ 15, when the warning option + -Wthread-safety is enabled. For usage, see + . */ +#ifndef _GL_ATTRIBUTE_CAPABILITY_TYPE +# if __clang_major__ >= 15 +# define _GL_ATTRIBUTE_CAPABILITY_TYPE(concept) \ + __attribute__ ((__capability__ (concept))) +#else +# define _GL_ATTRIBUTE_CAPABILITY_TYPE(concept) +# endif +#endif +#ifndef _GL_ATTRIBUTE_ACQUIRE_CAPABILITY +# if __clang_major__ >= 15 +# define _GL_ATTRIBUTE_ACQUIRE_CAPABILITY(resource) \ + __attribute__ ((__acquire_capability__ (resource))) +# else +# define _GL_ATTRIBUTE_ACQUIRE_CAPABILITY(resource) +# endif +#endif +#ifndef _GL_ATTRIBUTE_RELEASE_CAPABILITY +# if __clang_major__ >= 15 +# define _GL_ATTRIBUTE_RELEASE_CAPABILITY(resource) \ + __attribute__ ((__release_capability__ (resource))) +# else +# define _GL_ATTRIBUTE_RELEASE_CAPABILITY(resource) +# endif +#endif + + +/* In C++, there is the concept of "language linkage", that encompasses + name mangling and function calling conventions. + The following macros start and end a block of "C" linkage. */ +#ifdef __cplusplus +# define _GL_BEGIN_C_LINKAGE extern "C" { +# define _GL_END_C_LINKAGE } +#else +# define _GL_BEGIN_C_LINKAGE +# define _GL_END_C_LINKAGE +#endif + + +/* Define to empty if 'const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define as 'int' if doesn't define. */ +/* #undef gid_t */ + +/* A replacement for va_copy, if needed. */ +#define gl_va_copy(a,b) ((a) = (b)) + +/* Define to '__inline__' or '__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for Mac OS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif + +/* Define to 1 if the compiler is checking for lint. */ +#define lint 1 + +/* Define to a type if does not define. */ +/* #undef mbstate_t */ + +/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where + n1 and n2 are expressions without side effects, that evaluate to real + numbers (excluding NaN). + It returns + 1 if n1 > n2 + 0 if n1 == n2 + -1 if n1 < n2 + The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional + jump with nearly all GCC versions up to GCC 10. + This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many + GCC versions up to GCC 9. + The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 + avoids conditional jumps in all GCC versions >= 3.4. */ +#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) + + +/* Define to 'int' if does not define. */ +/* #undef mode_t */ + +/* Define to the type of st_nlink in struct stat, or a supertype. */ +/* #undef nlink_t */ + +/* Define as a signed integer type capable of holding a process identifier. */ +/* #undef pid_t */ + +/* Define to rpl_re_comp if the replacement should be used. */ +#define re_comp rpl_re_comp + +/* Define to rpl_re_compile_fastmap if the replacement should be used. */ +#define re_compile_fastmap rpl_re_compile_fastmap + +/* Define to rpl_re_compile_pattern if the replacement should be used. */ +#define re_compile_pattern rpl_re_compile_pattern + +/* Define to rpl_re_exec if the replacement should be used. */ +#define re_exec rpl_re_exec + +/* Define to rpl_re_match if the replacement should be used. */ +#define re_match rpl_re_match + +/* Define to rpl_re_match_2 if the replacement should be used. */ +#define re_match_2 rpl_re_match_2 + +/* Define to rpl_re_search if the replacement should be used. */ +#define re_search rpl_re_search + +/* Define to rpl_re_search_2 if the replacement should be used. */ +#define re_search_2 rpl_re_search_2 + +/* Define to rpl_re_set_registers if the replacement should be used. */ +#define re_set_registers rpl_re_set_registers + +/* Define to rpl_re_set_syntax if the replacement should be used. */ +#define re_set_syntax rpl_re_set_syntax + +/* Define to rpl_re_syntax_options if the replacement should be used. */ +#define re_syntax_options rpl_re_syntax_options + +/* Define to rpl_regcomp if the replacement should be used. */ +#define regcomp rpl_regcomp + +/* Define to rpl_regerror if the replacement should be used. */ +#define regerror rpl_regerror + +/* Define to rpl_regexec if the replacement should be used. */ +#define regexec rpl_regexec + +/* Define to rpl_regfree if the replacement should be used. */ +#define regfree rpl_regfree + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported only directly. */ +#define restrict __restrict__ +/* Work around a bug in older versions of Sun C++, which did not + #define __restrict__ or support _Restrict or __restrict__ + even though the corresponding Sun C compiler ended up with + "#define restrict _Restrict" or "#define restrict __restrict__" + in the previous line. This workaround can be removed once + we assume Oracle Developer Studio 12.5 (2016) or later. */ +#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ +# define _Restrict +# define __restrict__ +#endif + +/* Define as 'unsigned int' if doesn't define. */ +/* #undef size_t */ + +/* type to use in place of socklen_t if not defined */ +/* #undef socklen_t */ + +/* Define as a signed type of the same size as size_t. */ +/* #undef ssize_t */ + +/* Define as 'int' if doesn't define. */ +/* #undef uid_t */ + + + /* This definition is a duplicate of the one in unitypes.h. + It is here so that we can cope with an older version of unitypes.h + that does not contain this definition and that is pre-installed among + the public header files. */ + # if defined __restrict \ + || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ + || __clang_major__ >= 3 + # define _UC_RESTRICT __restrict + # elif 199901L <= __STDC_VERSION__ || defined restrict + # define _UC_RESTRICT restrict + # else + # define _UC_RESTRICT + # endif + + +/* Define to an unsigned 32-bit type if lacks this type. */ +/* #undef useconds_t */ + +/* Define as a macro for copying va_list variables. */ +/* #undef va_copy */ + +#if !defined HAVE_C_ALIGNASOF \ + && !(defined __cplusplus && 201103 <= __cplusplus) \ + && !defined alignof +# if defined HAVE_STDALIGN_H +# include +# endif + +/* ISO C23 alignas and alignof for platforms that lack it. + + References: + ISO C23 (latest free draft + ) + sections 6.5.3.4, 6.7.5, 7.15. + C++11 (latest free draft + ) + section 18.10. */ + +/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment + requirement of a structure member (i.e., slot or field) that is of + type TYPE, as an integer constant expression. + + This differs from GCC's and clang's __alignof__ operator, which can + yield a better-performing alignment for an object of that type. For + example, on x86 with GCC and on Linux/x86 with clang, + __alignof__ (double) and __alignof__ (long long) are 8, whereas + alignof (double) and alignof (long long) are 4 unless the option + '-malign-double' is used. + + The result cannot be used as a value for an 'enum' constant, if you + want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */ + +/* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 + . + clang versions < 8.0.0 have the same bug. */ +# if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ + || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \ + && !defined __clang__) \ + || (defined __clang__ && __clang_major__ < 8)) +# undef/**/_Alignof +# ifdef __cplusplus +# if (201103 <= __cplusplus || defined _MSC_VER) +# define _Alignof(type) alignof (type) +# else + template struct __alignof_helper { char __a; __t __b; }; +# if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__ +# define _Alignof(type) __builtin_offsetof (__alignof_helper, __b) +# else +# define _Alignof(type) offsetof (__alignof_helper, __b) +# endif +# define _GL_STDALIGN_NEEDS_STDDEF 1 +# endif +# else +# if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__ +# define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b) +# else +# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) +# define _GL_STDALIGN_NEEDS_STDDEF 1 +# endif +# endif +# endif +# if ! (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER)) +# undef/**/alignof +# define alignof _Alignof +# endif + +/* alignas (A), also known as _Alignas (A), aligns a variable or type + to the alignment A, where A is an integer constant expression. For + example: + + int alignas (8) foo; + struct s { int a; int alignas (8) bar; }; + + aligns the address of FOO and the offset of BAR to be multiples of 8. + + A should be a power of two that is at least the type's alignment + and at most the implementation's alignment limit. This limit is + 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable + to MSVC through at least version 10.0, A should be an integer + constant, as MSVC does not support expressions such as 1 << 3. + To be portable to Sun C 5.11, do not align auto variables to + anything stricter than their default alignment. + + The following C23 requirements are not supported here: + + - If A is zero, alignas has no effect. + - alignas can be used multiple times; the strictest one wins. + - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). + + */ +# if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 +# if defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER) +# define _Alignas(a) alignas (a) +# elif (!defined __attribute__ \ + && ((defined __APPLE__ && defined __MACH__ \ + ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ + : __GNUC__ && !defined __ibmxl__) \ + || (4 <= __clang_major__) \ + || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ + || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)) +# define _Alignas(a) __attribute__ ((__aligned__ (a))) +# elif 1300 <= _MSC_VER +# define _Alignas(a) __declspec (align (a)) +# endif +# endif +# if !defined HAVE_STDALIGN_H +# if ((defined _Alignas \ + && !(defined __cplusplus \ + && (201103 <= __cplusplus || defined _MSC_VER))) \ + || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) +# define alignas _Alignas +# endif +# endif + +# if defined _GL_STDALIGN_NEEDS_STDDEF +# include +# endif +#endif + +#ifndef HAVE_C_BOOL +# if !defined __cplusplus && !defined __bool_true_false_are_defined +# if HAVE_STDBOOL_H +# include +# else +# if defined __SUNPRO_C +# error " is not usable with this configuration. To make it usable, add -D_STDC_C99= to $CC." +# else +# error " does not exist on this platform. Use gnulib module 'stdbool-c99' instead of gnulib module 'stdbool'." +# endif +# endif +# endif +# if !true +# define true (!false) +# endif +#endif + +#if (!defined HAVE_C_STATIC_ASSERT && !defined assert \ + && (!defined __cplusplus \ + || (__cpp_static_assert < 201411 \ + && __GNUG__ < 6 && __clang_major__ < 6))) + #include + #undef/**/assert + #ifdef __sgi + #undef/**/__ASSERT_H__ + #endif + /* Solaris 11.4 defines static_assert as a macro with 2 arguments. + We need it also to be invocable with a single argument. */ + #if defined __sun && (__STDC_VERSION__ - 0 >= 201112L) && !defined __cplusplus + #undef/**/static_assert + #define static_assert _Static_assert + #endif +#endif diff --git a/jni/parted/lib/configmake.h b/jni/parted/lib/configmake.h new file mode 100755 index 0000000..1b70ece --- /dev/null +++ b/jni/parted/lib/configmake.h @@ -0,0 +1,31 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +#if HAVE_WINSOCK2_H +# include /* avoid mingw pollution on DATADIR */ +#endif +#define PREFIX "/usr/local" +#define EXEC_PREFIX "/usr/local" +#define BINDIR "/usr/local/bin" +#define SBINDIR "/usr/local/sbin" +#define LIBEXECDIR "/usr/local/libexec" +#define DATAROOTDIR "/usr/local/share" +#define DATADIR "/usr/local/share" +#define SYSCONFDIR "/usr/local/etc" +#define SHAREDSTATEDIR "/usr/local/com" +#define LOCALSTATEDIR "/usr/local/var" +#define RUNSTATEDIR "/usr/local/var/run" +#define INCLUDEDIR "/usr/local/include" +#define OLDINCLUDEDIR "/usr/include" +#define DOCDIR "/usr/local/share/doc/parted" +#define INFODIR "/usr/local/share/info" +#define HTMLDIR "/usr/local/share/doc/parted" +#define DVIDIR "/usr/local/share/doc/parted" +#define PDFDIR "/usr/local/share/doc/parted" +#define PSDIR "/usr/local/share/doc/parted" +#define LIBDIR "/usr/local/lib" +#define LISPDIR "/usr/local/share/emacs/site-lisp" +#define LOCALEDIR "/usr/local/share/locale" +#define MANDIR "/usr/local/share/man" +#define PKGDATADIR "/usr/local/share/parted" +#define PKGINCLUDEDIR "/usr/local/include/parted" +#define PKGLIBDIR "/usr/local/lib/parted" +#define PKGLIBEXECDIR "/usr/local/libexec/parted" diff --git a/jni/parted/lib/error.h b/jni/parted/lib/error.h new file mode 100755 index 0000000..e574ff9 --- /dev/null +++ b/jni/parted/lib/error.h @@ -0,0 +1,619 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Declarations for error-reporting functions. + Copyright (C) 1995-1997, 2003, 2006, 2008-2024 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_ERROR_H + +/* No @PRAGMA_SYSTEM_HEADER@ here, because it would prevent + -Wimplicit-fallthrough warnings for missing FALLTHROUGH after error(...) + or error_at_line(...) invocations. */ + +/* The include_next requires a split double-inclusion guard. */ +#if 1 && !defined __MINGW32__ +# include_next +#endif + +#ifndef _GL_ERROR_H +#define _GL_ERROR_H + +/* This file uses _GL_ATTRIBUTE_ALWAYS_INLINE, _GL_ATTRIBUTE_COLD, + _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_MAYBE_UNUSED. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get va_list. */ +#include + +/* Get 'unreachable'. */ +#include + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */ +#include + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +#if GNULIB_VFPRINTF_POSIX +# define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD +#else +# define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM +#endif + +/* Helper macro for supporting the compiler's control flow analysis better. + It evaluates its arguments only once. + Test case: Compile copy-file.c with "gcc -Wimplicit-fallthrough". */ +#if defined __GNUC__ || defined __clang__ +/* Use 'unreachable' to tell the compiler when the function call does not + return. */ +# define __gl_error_call1(function, status, ...) \ + ((function) (status, __VA_ARGS__), \ + (status) != 0 ? unreachable () : (void) 0) +/* If STATUS is a not a constant, the function call may or may not return; + therefore -Wimplicit-fallthrough will produce a warning. Use a compound + statement in order to evaluate STATUS only once. + If STATUS is a constant, we don't use a compound statement, because that + would trigger a -Wimplicit-fallthrough warning even when STATUS is != 0, + when not optimizing. This causes STATUS to be evaluated twice, but + that's OK since it does not have side effects. */ +# define __gl_error_call(function, status, ...) \ + (__builtin_constant_p (status) \ + ? __gl_error_call1 (function, status, __VA_ARGS__) \ + : __extension__ \ + ({ \ + int const __errstatus = status; \ + __gl_error_call1 (function, __errstatus, __VA_ARGS__); \ + })) +#else +# define __gl_error_call(function, status, ...) \ + (function) (status, __VA_ARGS__) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* 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)'. */ +#if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef error +# define error rpl_error +# endif +_GL_FUNCDECL_RPL (error, void, + (int __status, int __errnum, const char *__format, ...), + _GL_ATTRIBUTE_COLD + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); +_GL_CXXALIAS_RPL (error, void, + (int __status, int __errnum, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +# undef error +# define error(status, ...) \ + __gl_error_call (rpl_error, status, __VA_ARGS__) +# endif +#else +# if ! 1 +_GL_FUNCDECL_SYS (error, void, + (int __status, int __errnum, const char *__format, ...), + _GL_ATTRIBUTE_COLD + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); +# endif +_GL_CXXALIAS_SYS (error, void, + (int __status, int __errnum, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +# ifdef error +/* Only gcc ≥ 4.7 has __builtin_va_arg_pack. */ +# if _GL_GNUC_PREREQ (4, 7) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wattributes" +_GL_ATTRIBUTE_MAYBE_UNUSED +static void +_GL_ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_COLD +_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4)) +_gl_inline_error (int __status, int __errnum, const char *__format, ...) +{ + return error (__status, __errnum, __format, __builtin_va_arg_pack ()); +} +# pragma GCC diagnostic pop +# undef error +# define error(status, ...) \ + __gl_error_call (_gl_inline_error, status, __VA_ARGS__) +# endif +# else +# define error(status, ...) \ + __gl_error_call (error, status, __VA_ARGS__) +# endif +# endif +#endif +#if __GLIBC__ >= 2 +_GL_CXXALIASWARN (error); +#endif + +/* Likewise. If FILENAME is non-NULL, include FILENAME:LINENO: in the + message. */ +#if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef error_at_line +# define error_at_line rpl_error_at_line +# endif +_GL_FUNCDECL_RPL (error_at_line, void, + (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...), + _GL_ATTRIBUTE_COLD + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); +_GL_CXXALIAS_RPL (error_at_line, void, + (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +# undef error_at_line +# define error_at_line(status, ...) \ + __gl_error_call (rpl_error_at_line, status, __VA_ARGS__) +# endif +#else +# if ! 1 +_GL_FUNCDECL_SYS (error_at_line, void, + (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...), + _GL_ATTRIBUTE_COLD + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); +# endif +_GL_CXXALIAS_SYS (error_at_line, void, + (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +# ifdef error_at_line +/* Only gcc ≥ 4.7 has __builtin_va_arg_pack. */ +# if _GL_GNUC_PREREQ (4, 7) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wattributes" +_GL_ATTRIBUTE_MAYBE_UNUSED +static void +_GL_ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_COLD +_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6)) +_gl_inline_error_at_line (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...) +{ + return error_at_line (__status, __errnum, __filename, __lineno, __format, + __builtin_va_arg_pack ()); +} +# pragma GCC diagnostic pop +# undef error_at_line +# define error_at_line(status, ...) \ + __gl_error_call (_gl_inline_error_at_line, status, __VA_ARGS__) +# endif +# else +# define error_at_line(status, ...) \ + __gl_error_call (error_at_line, status, __VA_ARGS__) +# endif +# endif +#endif +_GL_CXXALIASWARN (error_at_line); + +/* Print a message with 'vfprintf (stderr, FORMAT, ARGS)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with 'exit (STATUS)'. + Use the globals error_print_progname and error_message_count similarly + to error(). */ + +extern void verror (int __status, int __errnum, const char *__format, + va_list __args) + _GL_ATTRIBUTE_COLD + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); +#ifndef _GL_NO_INLINE_ERROR +# ifndef verror +# define verror(status, ...) \ + __gl_error_call (verror, status, __VA_ARGS__) +# define GNULIB_defined_verror 1 +# endif +#endif + +/* Print a message with 'vfprintf (stderr, FORMAT, ARGS)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with 'exit (STATUS)'. + If FNAME is not NULL, prepend the message with "FNAME:LINENO:". + Use the globals error_print_progname, error_message_count, and + error_one_per_line similarly to error_at_line(). */ + +extern void verror_at_line (int __status, int __errnum, const char *__fname, + unsigned int __lineno, const char *__format, + va_list __args) + _GL_ATTRIBUTE_COLD + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 5, 0)); +#ifdef _GL_NO_INLINE_ERROR +# ifndef verror_at_line +# define verror_at_line(status, ...) \ + __gl_error_call (verror_at_line, status, __VA_ARGS__) +# define GNULIB_defined_verror_at_line 1 +# endif +#endif + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +extern void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called. */ +extern unsigned int error_message_count; + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +extern int error_one_per_line; + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ERROR_H */ +#endif /* _GL_ERROR_H */ diff --git a/jni/parted/lib/fcntl.h b/jni/parted/lib/fcntl.h new file mode 100755 index 0000000..3331954 --- /dev/null +++ b/jni/parted/lib/fcntl.h @@ -0,0 +1,988 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Like , but with non-working flags defined to 0. + + Copyright (C) 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* written by Paul Eggert */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_system_fcntl_h +/* Special invocation convention. */ + +/* Needed before . + May also define off_t to a 64-bit type on native Windows. */ +#include +/* On some systems other than glibc, is a prerequisite of + . On glibc systems, we would like to avoid namespace pollution. + But on glibc systems, includes inside an + extern "C" { ... } block, which leads to errors in C++ mode with the + overridden from gnulib. These errors are known to be gone + with g++ version >= 4.3. */ +#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) +# include +#endif +#include_next + +/* Native Windows platforms declare open(), creat() in . */ +#if (0 || 1 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include +#endif + +#else +/* Normal invocation convention. */ + +#ifndef _GL_FCNTL_H + +/* Needed before . + May also define off_t to a 64-bit type on native Windows. + Also defines off64_t on macOS, NetBSD, OpenBSD, MSVC, Cygwin, Haiku. */ +#include +/* On some systems other than glibc, is a prerequisite of + . On glibc systems, we would like to avoid namespace pollution. + But on glibc systems, includes inside an + extern "C" { ... } block, which leads to errors in C++ mode with the + overridden from gnulib. These errors are known to be gone + with g++ version >= 4.3. */ +#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) +# include +#endif +/* The include_next requires a split double-inclusion guard. */ +#include_next + +/* Native Windows platforms declare open(), creat() in . */ +#if (0 || 1 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include +#endif + +#ifndef _GL_FCNTL_H +#define _GL_FCNTL_H + +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ +# include +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Declare overridden functions. */ + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef creat +# define creat rpl_creat +# endif +_GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef creat +# define creat _creat +# endif +_GL_CXXALIAS_MDA (creat, int, (const char *filename, mode_t mode)); +# else +_GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); +# endif +_GL_CXXALIASWARN (creat); +#elif defined GNULIB_POSIXCHECK +# undef creat +/* Assume creat is always declared. */ +_GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - " + "use gnulib module creat for portability"); +#elif 1 +/* On native Windows, map 'creat' to '_creat', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::creat always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef creat +# define creat _creat +# endif +/* Need to cast, because in mingw the last argument is 'int mode'. */ +_GL_CXXALIAS_MDA_CAST (creat, int, (const char *filename, mode_t mode)); +# else +_GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); +# endif +_GL_CXXALIASWARN (creat); +#endif + +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fcntl +# define fcntl rpl_fcntl +# endif +_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...), ); +_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); +# if !GNULIB_defined_rpl_fcntl +# define GNULIB_defined_rpl_fcntl 1 +# endif +# else +# if !1 +_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...), ); +# if !GNULIB_defined_fcntl +# define GNULIB_defined_fcntl 1 +# endif +# endif +_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); +# endif +_GL_CXXALIASWARN (fcntl); +#elif defined GNULIB_POSIXCHECK +# undef fcntl +# if HAVE_RAW_DECL_FCNTL +_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " + "use gnulib module fcntl for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef open +# define open rpl_open +# endif +_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef open +# define open _open +# endif +_GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); +# else +_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); +# endif +/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a + default argument. _GL_CXXALIASWARN does not work in this case. */ +# if !defined __hpux +_GL_CXXALIASWARN (open); +# endif +#elif defined GNULIB_POSIXCHECK +# undef open +/* Assume open is always declared. */ +_GL_WARN_ON_USE (open, "open is not always POSIX compliant - " + "use gnulib module open for portability"); +#elif 1 +/* On native Windows, map 'open' to '_open', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::open always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef open +# define open _open +# endif +_GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); +# else +_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); +# endif +# if !defined __hpux +_GL_CXXALIASWARN (open); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef openat +# define openat rpl_openat +# endif +_GL_FUNCDECL_RPL (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...)); +# endif +_GL_CXXALIASWARN (openat); +#elif defined GNULIB_POSIXCHECK +# undef openat +# if HAVE_RAW_DECL_OPENAT +_GL_WARN_ON_USE (openat, "openat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +/* Fix up the FD_* macros, only known to be missing on mingw. */ + +#ifndef FD_CLOEXEC +# define FD_CLOEXEC 1 +#endif + +/* Fix up the supported F_* macros. Intentionally leave other F_* + macros undefined. Only known to be missing on mingw. */ + +#ifndef F_DUPFD_CLOEXEC +# define F_DUPFD_CLOEXEC 0x40000000 +/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ +# define GNULIB_defined_F_DUPFD_CLOEXEC 1 +#else +# define GNULIB_defined_F_DUPFD_CLOEXEC 0 +#endif + +#ifndef F_DUPFD +# define F_DUPFD 1 +#endif + +#ifndef F_GETFD +# define F_GETFD 2 +#endif + +/* Fix up the O_* macros. */ + +/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT + to values outside 'int' range, so omit these misdefinitions. + But avoid namespace pollution on non-AIX systems. */ +#ifdef _AIX +# include +# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) +# undef O_CLOEXEC +# endif +# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) +# undef O_NOFOLLOW +# endif +# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) +# undef O_TTY_INIT +# endif +#endif + +#if !defined O_DIRECT && defined O_DIRECTIO +/* Tru64 spells it 'O_DIRECTIO'. */ +# define O_DIRECT O_DIRECTIO +#endif + +#if !defined O_CLOEXEC && defined O_NOINHERIT +/* Mingw spells it 'O_NOINHERIT'. */ +# define O_CLOEXEC O_NOINHERIT +#endif + +#ifndef O_CLOEXEC +# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ +# define GNULIB_defined_O_CLOEXEC 1 +#else +# define GNULIB_defined_O_CLOEXEC 0 +#endif + +#ifndef O_DIRECT +# define O_DIRECT 0 +#endif + +#ifndef O_DIRECTORY +# define O_DIRECTORY 0 +#endif + +#ifndef O_DSYNC +# define O_DSYNC 0 +#endif + +#ifndef O_EXEC +# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ +#endif + +#ifndef O_IGNORE_CTTY +# define O_IGNORE_CTTY 0 +#endif + +#ifndef O_NDELAY +# define O_NDELAY 0 +#endif + +#ifndef O_NOATIME +# define O_NOATIME 0 +#endif + +#ifndef O_NONBLOCK +# define O_NONBLOCK O_NDELAY +#endif + +/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero + value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY + or to 0 as fallback. */ +#if 0 +# if O_NONBLOCK +# define GNULIB_defined_O_NONBLOCK 0 +# else +# define GNULIB_defined_O_NONBLOCK 1 +# undef O_NONBLOCK +# define O_NONBLOCK 0x40000000 +# endif +#endif + +#ifndef O_NOCTTY +# define O_NOCTTY 0 +#endif + +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +#ifndef O_NOLINK +# define O_NOLINK 0 +#endif + +#ifndef O_NOLINKS +# define O_NOLINKS 0 +#endif + +#ifndef O_NOTRANS +# define O_NOTRANS 0 +#endif + +#ifndef O_RSYNC +# define O_RSYNC 0 +#endif + +#ifndef O_SEARCH +# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ +#endif + +#ifndef O_SYNC +# define O_SYNC 0 +#endif + +#ifndef O_TTY_INIT +# define O_TTY_INIT 0 +#endif + +#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +# undef O_ACCMODE +# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +#endif + +/* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in fcntl.h */ +#if !defined O_BINARY && defined _O_BINARY + /* For MSC-compatible compilers. */ +# define O_BINARY _O_BINARY +# define O_TEXT _O_TEXT +#endif + +#if defined __BEOS__ || defined __HAIKU__ + /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ +# undef O_BINARY +# undef O_TEXT +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +# define O_TEXT 0 +#endif + +/* Fix up the AT_* macros. */ + +/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its + value exceeds INT_MAX, so its use as an int doesn't conform to the + C standard, and GCC and Sun C complain in some cases. If the bug + is present, undef AT_FDCWD here, so it can be redefined below. */ +#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 +# undef AT_FDCWD +#endif + +/* Use the same bit pattern as Solaris 9, but with the proper + signedness. The bit pattern is important, in case this actually is + Solaris with the above workaround. */ +#ifndef AT_FDCWD +# define AT_FDCWD (-3041965) +#endif + +/* Use the same values as Solaris 9. This shouldn't matter, but + there's no real reason to differ. */ +#ifndef AT_SYMLINK_NOFOLLOW +# define AT_SYMLINK_NOFOLLOW 4096 +#endif + +#ifndef AT_REMOVEDIR +# define AT_REMOVEDIR 1 +#endif + +/* Solaris 9 lacks these two, so just pick unique values. */ +#ifndef AT_SYMLINK_FOLLOW +# define AT_SYMLINK_FOLLOW 2 +#endif + +#ifndef AT_EACCESS +# define AT_EACCESS 4 +#endif + +/* Ignore this flag if not supported. */ +#ifndef AT_NO_AUTOMOUNT +# define AT_NO_AUTOMOUNT 0 +#endif + +#endif /* _GL_FCNTL_H */ +#endif /* _GL_FCNTL_H */ +#endif diff --git a/jni/parted/lib/inttypes.h b/jni/parted/lib/inttypes.h new file mode 100755 index 0000000..a25ead4 --- /dev/null +++ b/jni/parted/lib/inttypes.h @@ -0,0 +1,1570 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 2006-2024 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Derek Price. + This file is part of gnulib. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* + * ISO C 99 for platforms that lack it. + * + */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* Include the original if it exists, and if this file + has not been included yet or if this file includes gnulib stdint.h + which in turn includes this file. + The include_next requires a split double-inclusion guard. */ +#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H +# if 1 + + /* Some pre-C++11 implementations need this. */ +# if defined __cplusplus && ! defined __STDC_FORMAT_MACROS +# define __STDC_FORMAT_MACROS 1 +# endif + +# include_next + +# define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H +# endif +#endif + +#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H +#define INTTYPES_H + +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Include or the gnulib replacement. + But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include +#endif +/* Get CHAR_BIT, INT_MAX, LONG_MAX, etc. */ +#include +/* On mingw, __USE_MINGW_ANSI_STDIO only works if is also included */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include +#endif + +#if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1) +# error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to ." +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* 7.8.1 Macros for format specifiers */ + +#if defined _TNS_R_TARGET + /* Tandem NonStop R series and compatible platforms released before + July 2005 support %Ld but not %lld. */ +# define _LONG_LONG_FORMAT_PREFIX "L" +#else +# define _LONG_LONG_FORMAT_PREFIX "ll" +#endif + +#if !defined PRId8 +# ifdef INT8_MAX +# define PRId8 "d" +# endif +#endif +#if !defined PRIi8 +# ifdef INT8_MAX +# define PRIi8 "i" +# endif +#endif +#if !defined PRIo8 +# ifdef UINT8_MAX +# define PRIo8 "o" +# endif +#endif +#if !defined PRIu8 +# ifdef UINT8_MAX +# define PRIu8 "u" +# endif +#endif +#if !defined PRIx8 +# ifdef UINT8_MAX +# define PRIx8 "x" +# endif +#endif +#if !defined PRIX8 +# ifdef UINT8_MAX +# define PRIX8 "X" +# endif +#endif +#if !defined PRId16 +# ifdef INT16_MAX +# define PRId16 "d" +# endif +#endif +#if !defined PRIi16 +# ifdef INT16_MAX +# define PRIi16 "i" +# endif +#endif +#if !defined PRIo16 +# ifdef UINT16_MAX +# define PRIo16 "o" +# endif +#endif +#if !defined PRIu16 +# ifdef UINT16_MAX +# define PRIu16 "u" +# endif +#endif +#if !defined PRIx16 +# ifdef UINT16_MAX +# define PRIx16 "x" +# endif +#endif +#if !defined PRIX16 +# ifdef UINT16_MAX +# define PRIX16 "X" +# endif +#endif +#if !defined PRId32 +# ifdef INT32_MAX +# define PRId32 "d" +# endif +#endif +#if !defined PRIi32 +# ifdef INT32_MAX +# define PRIi32 "i" +# endif +#endif +#if !defined PRIo32 +# ifdef UINT32_MAX +# define PRIo32 "o" +# endif +#endif +#if !defined PRIu32 +# ifdef UINT32_MAX +# define PRIu32 "u" +# endif +#endif +#if !defined PRIx32 +# ifdef UINT32_MAX +# define PRIx32 "x" +# endif +#endif +#if !defined PRIX32 +# ifdef UINT32_MAX +# define PRIX32 "X" +# endif +#endif +#ifdef INT64_MAX +# if (0 ? defined _LP64 : 1) +# define _PRI64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _PRI64_PREFIX "I64" +# elif LONG_MAX >> 30 == 1 +# define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined PRId64 +# define PRId64 _PRI64_PREFIX "d" +# endif +# if !defined PRIi64 +# define PRIi64 _PRI64_PREFIX "i" +# endif +#endif +#ifdef UINT64_MAX +# if (0 ? defined _LP64 : 1) +# define _PRIu64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _PRIu64_PREFIX "I64" +# elif ULONG_MAX >> 31 == 1 +# define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined PRIo64 +# define PRIo64 _PRIu64_PREFIX "o" +# endif +# if !defined PRIu64 +# define PRIu64 _PRIu64_PREFIX "u" +# endif +# if !defined PRIx64 +# define PRIx64 _PRIu64_PREFIX "x" +# endif +# if !defined PRIX64 +# define PRIX64 _PRIu64_PREFIX "X" +# endif +#endif + +#if !defined PRIdLEAST8 +# define PRIdLEAST8 "d" +#endif +#if !defined PRIiLEAST8 +# define PRIiLEAST8 "i" +#endif +#if !defined PRIoLEAST8 +# define PRIoLEAST8 "o" +#endif +#if !defined PRIuLEAST8 +# define PRIuLEAST8 "u" +#endif +#if !defined PRIxLEAST8 +# define PRIxLEAST8 "x" +#endif +#if !defined PRIXLEAST8 +# define PRIXLEAST8 "X" +#endif +#if !defined PRIdLEAST16 +# define PRIdLEAST16 "d" +#endif +#if !defined PRIiLEAST16 +# define PRIiLEAST16 "i" +#endif +#if !defined PRIoLEAST16 +# define PRIoLEAST16 "o" +#endif +#if !defined PRIuLEAST16 +# define PRIuLEAST16 "u" +#endif +#if !defined PRIxLEAST16 +# define PRIxLEAST16 "x" +#endif +#if !defined PRIXLEAST16 +# define PRIXLEAST16 "X" +#endif +#if !defined PRIdLEAST32 +# define PRIdLEAST32 "d" +#endif +#if !defined PRIiLEAST32 +# define PRIiLEAST32 "i" +#endif +#if !defined PRIoLEAST32 +# define PRIoLEAST32 "o" +#endif +#if !defined PRIuLEAST32 +# define PRIuLEAST32 "u" +#endif +#if !defined PRIxLEAST32 +# define PRIxLEAST32 "x" +#endif +#if !defined PRIXLEAST32 +# define PRIXLEAST32 "X" +#endif +#ifdef INT64_MAX +# if !defined PRIdLEAST64 +# define PRIdLEAST64 PRId64 +# endif +# if !defined PRIiLEAST64 +# define PRIiLEAST64 PRIi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined PRIoLEAST64 +# define PRIoLEAST64 PRIo64 +# endif +# if !defined PRIuLEAST64 +# define PRIuLEAST64 PRIu64 +# endif +# if !defined PRIxLEAST64 +# define PRIxLEAST64 PRIx64 +# endif +# if !defined PRIXLEAST64 +# define PRIXLEAST64 PRIX64 +# endif +#endif + +#if !defined PRIdFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define PRIdFAST8 PRId64 +# else +# define PRIdFAST8 "d" +# endif +#endif +#if !defined PRIiFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define PRIiFAST8 PRIi64 +# else +# define PRIiFAST8 "i" +# endif +#endif +#if !defined PRIoFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIoFAST8 PRIo64 +# else +# define PRIoFAST8 "o" +# endif +#endif +#if !defined PRIuFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIuFAST8 PRIu64 +# else +# define PRIuFAST8 "u" +# endif +#endif +#if !defined PRIxFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIxFAST8 PRIx64 +# else +# define PRIxFAST8 "x" +# endif +#endif +#if !defined PRIXFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIXFAST8 PRIX64 +# else +# define PRIXFAST8 "X" +# endif +#endif +#if !defined PRIdFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define PRIdFAST16 PRId64 +# else +# define PRIdFAST16 "d" +# endif +#endif +#if !defined PRIiFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define PRIiFAST16 PRIi64 +# else +# define PRIiFAST16 "i" +# endif +#endif +#if !defined PRIoFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIoFAST16 PRIo64 +# else +# define PRIoFAST16 "o" +# endif +#endif +#if !defined PRIuFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIuFAST16 PRIu64 +# else +# define PRIuFAST16 "u" +# endif +#endif +#if !defined PRIxFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIxFAST16 PRIx64 +# else +# define PRIxFAST16 "x" +# endif +#endif +#if !defined PRIXFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIXFAST16 PRIX64 +# else +# define PRIXFAST16 "X" +# endif +#endif +#if !defined PRIdFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define PRIdFAST32 PRId64 +# else +# define PRIdFAST32 "d" +# endif +#endif +#if !defined PRIiFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define PRIiFAST32 PRIi64 +# else +# define PRIiFAST32 "i" +# endif +#endif +#if !defined PRIoFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIoFAST32 PRIo64 +# else +# define PRIoFAST32 "o" +# endif +#endif +#if !defined PRIuFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIuFAST32 PRIu64 +# else +# define PRIuFAST32 "u" +# endif +#endif +#if !defined PRIxFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIxFAST32 PRIx64 +# else +# define PRIxFAST32 "x" +# endif +#endif +#if !defined PRIXFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIXFAST32 PRIX64 +# else +# define PRIXFAST32 "X" +# endif +#endif +#ifdef INT64_MAX +# if !defined PRIdFAST64 +# define PRIdFAST64 PRId64 +# endif +# if !defined PRIiFAST64 +# define PRIiFAST64 PRIi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined PRIoFAST64 +# define PRIoFAST64 PRIo64 +# endif +# if !defined PRIuFAST64 +# define PRIuFAST64 PRIu64 +# endif +# if !defined PRIxFAST64 +# define PRIxFAST64 PRIx64 +# endif +# if !defined PRIXFAST64 +# define PRIXFAST64 PRIX64 +# endif +#endif + +#if !defined PRIdMAX +# if 1 +# define PRIdMAX PRId64 +# else +# define PRIdMAX "ld" +# endif +#endif +#if !defined PRIiMAX +# if 1 +# define PRIiMAX PRIi64 +# else +# define PRIiMAX "li" +# endif +#endif +#if !defined PRIoMAX +# if 1 +# define PRIoMAX PRIo64 +# else +# define PRIoMAX "lo" +# endif +#endif +#if !defined PRIuMAX +# if 1 +# define PRIuMAX PRIu64 +# else +# define PRIuMAX "lu" +# endif +#endif +#if !defined PRIxMAX +# if 1 +# define PRIxMAX PRIx64 +# else +# define PRIxMAX "lx" +# endif +#endif +#if !defined PRIXMAX +# if 1 +# define PRIXMAX PRIX64 +# else +# define PRIXMAX "lX" +# endif +#endif + +#if !defined PRIdPTR +# ifdef INTPTR_MAX +# define PRIdPTR "l" "d" +# endif +#endif +#if !defined PRIiPTR +# ifdef INTPTR_MAX +# define PRIiPTR "l" "i" +# endif +#endif +#if !defined PRIoPTR +# ifdef UINTPTR_MAX +# define PRIoPTR "l" "o" +# endif +#endif +#if !defined PRIuPTR +# ifdef UINTPTR_MAX +# define PRIuPTR "l" "u" +# endif +#endif +#if !defined PRIxPTR +# ifdef UINTPTR_MAX +# define PRIxPTR "l" "x" +# endif +#endif +#if !defined PRIXPTR +# ifdef UINTPTR_MAX +# define PRIXPTR "l" "X" +# endif +#endif + +#if !defined SCNd8 +# ifdef INT8_MAX +# define SCNd8 "hhd" +# endif +#endif +#if !defined SCNi8 +# ifdef INT8_MAX +# define SCNi8 "hhi" +# endif +#endif +#if !defined SCNo8 +# ifdef UINT8_MAX +# define SCNo8 "hho" +# endif +#endif +#if !defined SCNu8 +# ifdef UINT8_MAX +# define SCNu8 "hhu" +# endif +#endif +#if !defined SCNx8 +# ifdef UINT8_MAX +# define SCNx8 "hhx" +# endif +#endif +#if !defined SCNd16 +# ifdef INT16_MAX +# define SCNd16 "hd" +# endif +#endif +#if !defined SCNi16 +# ifdef INT16_MAX +# define SCNi16 "hi" +# endif +#endif +#if !defined SCNo16 +# ifdef UINT16_MAX +# define SCNo16 "ho" +# endif +#endif +#if !defined SCNu16 +# ifdef UINT16_MAX +# define SCNu16 "hu" +# endif +#endif +#if !defined SCNx16 +# ifdef UINT16_MAX +# define SCNx16 "hx" +# endif +#endif +#if !defined SCNd32 +# ifdef INT32_MAX +# define SCNd32 "d" +# endif +#endif +#if !defined SCNi32 +# ifdef INT32_MAX +# define SCNi32 "i" +# endif +#endif +#if !defined SCNo32 +# ifdef UINT32_MAX +# define SCNo32 "o" +# endif +#endif +#if !defined SCNu32 +# ifdef UINT32_MAX +# define SCNu32 "u" +# endif +#endif +#if !defined SCNx32 +# ifdef UINT32_MAX +# define SCNx32 "x" +# endif +#endif +#ifdef INT64_MAX +# if (0 ? defined _LP64 : 1) +# define _SCN64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _SCN64_PREFIX "I64" +# elif LONG_MAX >> 30 == 1 +# define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined SCNd64 +# define SCNd64 _SCN64_PREFIX "d" +# endif +# if !defined SCNi64 +# define SCNi64 _SCN64_PREFIX "i" +# endif +#endif +#ifdef UINT64_MAX +# if (0 ? defined _LP64 : 1) +# define _SCNu64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _SCNu64_PREFIX "I64" +# elif ULONG_MAX >> 31 == 1 +# define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined SCNo64 +# define SCNo64 _SCNu64_PREFIX "o" +# endif +# if !defined SCNu64 +# define SCNu64 _SCNu64_PREFIX "u" +# endif +# if !defined SCNx64 +# define SCNx64 _SCNu64_PREFIX "x" +# endif +#endif + +#if !defined SCNdLEAST8 +# define SCNdLEAST8 "hhd" +#endif +#if !defined SCNiLEAST8 +# define SCNiLEAST8 "hhi" +#endif +#if !defined SCNoLEAST8 +# define SCNoLEAST8 "hho" +#endif +#if !defined SCNuLEAST8 +# define SCNuLEAST8 "hhu" +#endif +#if !defined SCNxLEAST8 +# define SCNxLEAST8 "hhx" +#endif +#if !defined SCNdLEAST16 +# define SCNdLEAST16 "hd" +#endif +#if !defined SCNiLEAST16 +# define SCNiLEAST16 "hi" +#endif +#if !defined SCNoLEAST16 +# define SCNoLEAST16 "ho" +#endif +#if !defined SCNuLEAST16 +# define SCNuLEAST16 "hu" +#endif +#if !defined SCNxLEAST16 +# define SCNxLEAST16 "hx" +#endif +#if !defined SCNdLEAST32 +# define SCNdLEAST32 "d" +#endif +#if !defined SCNiLEAST32 +# define SCNiLEAST32 "i" +#endif +#if !defined SCNoLEAST32 +# define SCNoLEAST32 "o" +#endif +#if !defined SCNuLEAST32 +# define SCNuLEAST32 "u" +#endif +#if !defined SCNxLEAST32 +# define SCNxLEAST32 "x" +#endif +#ifdef INT64_MAX +# if !defined SCNdLEAST64 +# define SCNdLEAST64 SCNd64 +# endif +# if !defined SCNiLEAST64 +# define SCNiLEAST64 SCNi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined SCNoLEAST64 +# define SCNoLEAST64 SCNo64 +# endif +# if !defined SCNuLEAST64 +# define SCNuLEAST64 SCNu64 +# endif +# if !defined SCNxLEAST64 +# define SCNxLEAST64 SCNx64 +# endif +#endif + +#if !defined SCNdFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define SCNdFAST8 SCNd64 +# elif INT_FAST8_MAX == 0x7fff +# define SCNdFAST8 "hd" +# elif INT_FAST8_MAX == 0x7f +# define SCNdFAST8 "hhd" +# else +# define SCNdFAST8 "d" +# endif +#endif +#if !defined SCNiFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define SCNiFAST8 SCNi64 +# elif INT_FAST8_MAX == 0x7fff +# define SCNiFAST8 "hi" +# elif INT_FAST8_MAX == 0x7f +# define SCNiFAST8 "hhi" +# else +# define SCNiFAST8 "i" +# endif +#endif +#if !defined SCNoFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNoFAST8 SCNo64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNoFAST8 "ho" +# elif UINT_FAST8_MAX == 0xff +# define SCNoFAST8 "hho" +# else +# define SCNoFAST8 "o" +# endif +#endif +#if !defined SCNuFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNuFAST8 SCNu64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNuFAST8 "hu" +# elif UINT_FAST8_MAX == 0xff +# define SCNuFAST8 "hhu" +# else +# define SCNuFAST8 "u" +# endif +#endif +#if !defined SCNxFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNxFAST8 SCNx64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNxFAST8 "hx" +# elif UINT_FAST8_MAX == 0xff +# define SCNxFAST8 "hhx" +# else +# define SCNxFAST8 "x" +# endif +#endif +#if !defined SCNdFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define SCNdFAST16 SCNd64 +# elif INT_FAST16_MAX == 0x7fff +# define SCNdFAST16 "hd" +# else +# define SCNdFAST16 "d" +# endif +#endif +#if !defined SCNiFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define SCNiFAST16 SCNi64 +# elif INT_FAST16_MAX == 0x7fff +# define SCNiFAST16 "hi" +# else +# define SCNiFAST16 "i" +# endif +#endif +#if !defined SCNoFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNoFAST16 SCNo64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNoFAST16 "ho" +# else +# define SCNoFAST16 "o" +# endif +#endif +#if !defined SCNuFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNuFAST16 SCNu64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNuFAST16 "hu" +# else +# define SCNuFAST16 "u" +# endif +#endif +#if !defined SCNxFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNxFAST16 SCNx64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNxFAST16 "hx" +# else +# define SCNxFAST16 "x" +# endif +#endif +#if !defined SCNdFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define SCNdFAST32 SCNd64 +# else +# define SCNdFAST32 "d" +# endif +#endif +#if !defined SCNiFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define SCNiFAST32 SCNi64 +# else +# define SCNiFAST32 "i" +# endif +#endif +#if !defined SCNoFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNoFAST32 SCNo64 +# else +# define SCNoFAST32 "o" +# endif +#endif +#if !defined SCNuFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNuFAST32 SCNu64 +# else +# define SCNuFAST32 "u" +# endif +#endif +#if !defined SCNxFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNxFAST32 SCNx64 +# else +# define SCNxFAST32 "x" +# endif +#endif +#ifdef INT64_MAX +# if !defined SCNdFAST64 +# define SCNdFAST64 SCNd64 +# endif +# if !defined SCNiFAST64 +# define SCNiFAST64 SCNi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined SCNoFAST64 +# define SCNoFAST64 SCNo64 +# endif +# if !defined SCNuFAST64 +# define SCNuFAST64 SCNu64 +# endif +# if !defined SCNxFAST64 +# define SCNxFAST64 SCNx64 +# endif +#endif + +#if !defined SCNdMAX +# if 1 +# define SCNdMAX SCNd64 +# else +# define SCNdMAX "ld" +# endif +#endif +#if !defined SCNiMAX +# if 1 +# define SCNiMAX SCNi64 +# else +# define SCNiMAX "li" +# endif +#endif +#if !defined SCNoMAX +# if 1 +# define SCNoMAX SCNo64 +# else +# define SCNoMAX "lo" +# endif +#endif +#if !defined SCNuMAX +# if 1 +# define SCNuMAX SCNu64 +# else +# define SCNuMAX "lu" +# endif +#endif +#if !defined SCNxMAX +# if 1 +# define SCNxMAX SCNx64 +# else +# define SCNxMAX "lx" +# endif +#endif + +#if !defined SCNdPTR +# ifdef INTPTR_MAX +# define SCNdPTR "l" "d" +# endif +#endif +#if !defined SCNiPTR +# ifdef INTPTR_MAX +# define SCNiPTR "l" "i" +# endif +#endif +#if !defined SCNoPTR +# ifdef UINTPTR_MAX +# define SCNoPTR "l" "o" +# endif +#endif +#if !defined SCNuPTR +# ifdef UINTPTR_MAX +# define SCNuPTR "l" "u" +# endif +#endif +#if !defined SCNxPTR +# ifdef UINTPTR_MAX +# define SCNxPTR "l" "x" +# endif +#endif + +/* 7.8.2 Functions for greatest-width integer types */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef imaxabs +# define imaxabs rpl_imaxabs +# endif +_GL_FUNCDECL_RPL (imaxabs, intmax_t, (intmax_t x), ); +_GL_CXXALIAS_RPL (imaxabs, intmax_t, (intmax_t x)); +# else +# if !1 +_GL_FUNCDECL_SYS (imaxabs, intmax_t, (intmax_t x), ); +# endif +_GL_CXXALIAS_SYS (imaxabs, intmax_t, (intmax_t x)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (imaxabs); +# endif +#elif defined GNULIB_POSIXCHECK +# undef imaxabs +# if HAVE_RAW_DECL_IMAXABS +_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " + "use gnulib module imaxabs for portability"); +# endif +#endif + +#if 0 +# if !1 +# if !GNULIB_defined_imaxdiv_t +typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; +# define GNULIB_defined_imaxdiv_t 1 +# endif +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef imaxdiv +# define imaxdiv rpl_imaxdiv +# endif +_GL_FUNCDECL_RPL (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom), ); +_GL_CXXALIAS_RPL (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); +# else +# if !1 +_GL_FUNCDECL_SYS (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom), ); +# endif +_GL_CXXALIAS_SYS (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (imaxdiv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef imaxdiv +# if HAVE_RAW_DECL_IMAXDIV +_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " + "use gnulib module imaxdiv for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtoimax +# define strtoimax rpl_strtoimax +# endif +_GL_FUNCDECL_RPL (strtoimax, intmax_t, + (const char *restrict, char **restrict, int), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoimax, intmax_t, + (const char *restrict, char **restrict, int)); +# else +# if !1 +# undef strtoimax +_GL_FUNCDECL_SYS (strtoimax, intmax_t, + (const char *restrict, char **restrict, int), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoimax, intmax_t, + (const char *restrict, char **restrict, int)); +# endif +_GL_CXXALIASWARN (strtoimax); +#elif defined GNULIB_POSIXCHECK +# undef strtoimax +# if HAVE_RAW_DECL_STRTOIMAX +_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " + "use gnulib module strtoimax for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtoumax +# define strtoumax rpl_strtoumax +# endif +_GL_FUNCDECL_RPL (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int)); +# else +# if !1 +# undef strtoumax +_GL_FUNCDECL_SYS (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int)); +# endif +_GL_CXXALIASWARN (strtoumax); +#elif defined GNULIB_POSIXCHECK +# undef strtoumax +# if HAVE_RAW_DECL_STRTOUMAX +_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " + "use gnulib module strtoumax for portability"); +# endif +#endif + +/* Don't bother defining or declaring wcstoimax and wcstoumax, since + wide-character functions like this are hardly ever useful. */ + +#ifdef __cplusplus +} +#endif + +#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ diff --git a/jni/parted/lib/langinfo.h b/jni/parted/lib/langinfo.h new file mode 100755 index 0000000..7e80f9a --- /dev/null +++ b/jni/parted/lib/langinfo.h @@ -0,0 +1,740 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around . + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* + * POSIX for platforms that lack it or have an incomplete one. + * + */ + +#ifndef _GL_LANGINFO_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next +#endif + +#ifndef _GL_LANGINFO_H +#define _GL_LANGINFO_H + +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + + +#if !1 + +/* A platform that lacks . */ + +/* Assume that it also lacks and the nl_item type. */ +# if !GNULIB_defined_nl_item +typedef int nl_item; +# define GNULIB_defined_nl_item 1 +# endif + +/* nl_langinfo items of the LC_CTYPE category */ +# define CODESET 10000 +/* nl_langinfo items of the LC_NUMERIC category */ +# define RADIXCHAR 10001 +# define DECIMAL_POINT RADIXCHAR +# define THOUSEP 10002 +# define THOUSANDS_SEP THOUSEP +# define GROUPING 10114 +/* nl_langinfo items of the LC_TIME category */ +# define D_T_FMT 10003 +# define D_FMT 10004 +# define T_FMT 10005 +# define T_FMT_AMPM 10006 +# define AM_STR 10007 +# define PM_STR 10008 +# define DAY_1 10009 +# define DAY_2 (DAY_1 + 1) +# define DAY_3 (DAY_1 + 2) +# define DAY_4 (DAY_1 + 3) +# define DAY_5 (DAY_1 + 4) +# define DAY_6 (DAY_1 + 5) +# define DAY_7 (DAY_1 + 6) +# define ABDAY_1 10016 +# define ABDAY_2 (ABDAY_1 + 1) +# define ABDAY_3 (ABDAY_1 + 2) +# define ABDAY_4 (ABDAY_1 + 3) +# define ABDAY_5 (ABDAY_1 + 4) +# define ABDAY_6 (ABDAY_1 + 5) +# define ABDAY_7 (ABDAY_1 + 6) +# define MON_1 10023 +# define MON_2 (MON_1 + 1) +# define MON_3 (MON_1 + 2) +# define MON_4 (MON_1 + 3) +# define MON_5 (MON_1 + 4) +# define MON_6 (MON_1 + 5) +# define MON_7 (MON_1 + 6) +# define MON_8 (MON_1 + 7) +# define MON_9 (MON_1 + 8) +# define MON_10 (MON_1 + 9) +# define MON_11 (MON_1 + 10) +# define MON_12 (MON_1 + 11) +# define ALTMON_1 10200 +# define ALTMON_2 (ALTMON_1 + 1) +# define ALTMON_3 (ALTMON_1 + 2) +# define ALTMON_4 (ALTMON_1 + 3) +# define ALTMON_5 (ALTMON_1 + 4) +# define ALTMON_6 (ALTMON_1 + 5) +# define ALTMON_7 (ALTMON_1 + 6) +# define ALTMON_8 (ALTMON_1 + 7) +# define ALTMON_9 (ALTMON_1 + 8) +# define ALTMON_10 (ALTMON_1 + 9) +# define ALTMON_11 (ALTMON_1 + 10) +# define ALTMON_12 (ALTMON_1 + 11) +# define ABMON_1 10035 +# define ABMON_2 (ABMON_1 + 1) +# define ABMON_3 (ABMON_1 + 2) +# define ABMON_4 (ABMON_1 + 3) +# define ABMON_5 (ABMON_1 + 4) +# define ABMON_6 (ABMON_1 + 5) +# define ABMON_7 (ABMON_1 + 6) +# define ABMON_8 (ABMON_1 + 7) +# define ABMON_9 (ABMON_1 + 8) +# define ABMON_10 (ABMON_1 + 9) +# define ABMON_11 (ABMON_1 + 10) +# define ABMON_12 (ABMON_1 + 11) +# define ERA 10047 +# define ERA_D_FMT 10048 +# define ERA_D_T_FMT 10049 +# define ERA_T_FMT 10050 +# define ALT_DIGITS 10051 +/* nl_langinfo items of the LC_MONETARY category */ +# define CRNCYSTR 10052 +# define CURRENCY_SYMBOL CRNCYSTR +# define INT_CURR_SYMBOL 10100 +# define MON_DECIMAL_POINT 10101 +# define MON_THOUSANDS_SEP 10102 +# define MON_GROUPING 10103 +# define POSITIVE_SIGN 10104 +# define NEGATIVE_SIGN 10105 +# define FRAC_DIGITS 10106 +# define INT_FRAC_DIGITS 10107 +# define P_CS_PRECEDES 10108 +# define N_CS_PRECEDES 10109 +# define P_SEP_BY_SPACE 10110 +# define N_SEP_BY_SPACE 10111 +# define P_SIGN_POSN 10112 +# define N_SIGN_POSN 10113 +/* nl_langinfo items of the LC_MESSAGES category */ +# define YESEXPR 10053 +# define NOEXPR 10054 + +#else + +/* A platform that has . */ + +# if !1 +# define CODESET 10000 +# define GNULIB_defined_CODESET 1 +# endif + +# if !1 +# define T_FMT_AMPM 10006 +# define GNULIB_defined_T_FMT_AMPM 1 +# endif + +# if !0 +# define ALTMON_1 10200 +# define ALTMON_2 (ALTMON_1 + 1) +# define ALTMON_3 (ALTMON_1 + 2) +# define ALTMON_4 (ALTMON_1 + 3) +# define ALTMON_5 (ALTMON_1 + 4) +# define ALTMON_6 (ALTMON_1 + 5) +# define ALTMON_7 (ALTMON_1 + 6) +# define ALTMON_8 (ALTMON_1 + 7) +# define ALTMON_9 (ALTMON_1 + 8) +# define ALTMON_10 (ALTMON_1 + 9) +# define ALTMON_11 (ALTMON_1 + 10) +# define ALTMON_12 (ALTMON_1 + 11) +# define GNULIB_defined_ALTMON 1 +# endif + +# if !1 +# define ERA 10047 +# define ERA_D_FMT 10048 +# define ERA_D_T_FMT 10049 +# define ERA_T_FMT 10050 +# define ALT_DIGITS 10051 +# define GNULIB_defined_ERA 1 +# endif + +# if !1 +# define YESEXPR 10053 +# define NOEXPR 10054 +# define GNULIB_defined_YESEXPR 1 +# endif + +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Declare overridden functions. */ + + +/* Return a piece of locale dependent information. + Note: The difference between nl_langinfo (CODESET) and locale_charset () + is that the latter normalizes the encoding names to GNU conventions. */ + +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef nl_langinfo +# define nl_langinfo rpl_nl_langinfo +# endif +_GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item), ); +_GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item)); +# else +# if !1 +_GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item), ); +# endif +_GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (nl_langinfo); +# endif +#elif defined GNULIB_POSIXCHECK +# undef nl_langinfo +# if HAVE_RAW_DECL_NL_LANGINFO +_GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - " + "use gnulib module nl_langinfo for portability"); +# endif +#endif + + +#endif /* _GL_LANGINFO_H */ +#endif /* _GL_LANGINFO_H */ diff --git a/jni/parted/lib/limits.h b/jni/parted/lib/limits.h new file mode 100755 index 0000000..7a3de5a --- /dev/null +++ b/jni/parted/lib/limits.h @@ -0,0 +1,152 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright 2016-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined _GL_ALREADY_INCLUDING_LIMITS_H +/* Special invocation convention: + On Haiku/x86_64, we have a sequence of nested includes + -> -> . + In this situation, LONG_MAX and INT_MAX are not yet defined, + therefore we should not attempt to define LONG_BIT. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_LIMITS_H + +# define _GL_ALREADY_INCLUDING_LIMITS_H + +/* The include_next requires a split double-inclusion guard. */ +# include_next + +# undef _GL_ALREADY_INCLUDING_LIMITS_H + +#ifndef _GL_LIMITS_H +#define _GL_LIMITS_H + +#ifndef LLONG_MIN +# if defined LONG_LONG_MIN /* HP-UX 11.31 */ +# define LLONG_MIN LONG_LONG_MIN +# elif defined LONGLONG_MIN /* IRIX 6.5 */ +# define LLONG_MIN LONGLONG_MIN +# elif defined __GNUC__ +# define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) +# endif +#endif +#ifndef LLONG_MAX +# if defined LONG_LONG_MAX /* HP-UX 11.31 */ +# define LLONG_MAX LONG_LONG_MAX +# elif defined LONGLONG_MAX /* IRIX 6.5 */ +# define LLONG_MAX LONGLONG_MAX +# elif defined __GNUC__ +# define LLONG_MAX __LONG_LONG_MAX__ +# endif +#endif +#ifndef ULLONG_MAX +# if defined ULONG_LONG_MAX /* HP-UX 11.31 */ +# define ULLONG_MAX ULONG_LONG_MAX +# elif defined ULONGLONG_MAX /* IRIX 6.5 */ +# define ULLONG_MAX ULONGLONG_MAX +# elif defined __GNUC__ +# define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) +# endif +#endif + +/* The number of usable bits in an unsigned or signed integer type + with minimum value MIN and maximum value MAX, as an int expression + suitable in #if. Cover all known practical hosts. This + implementation exploits the fact that MAX is 1 less than a power of + 2, and merely counts the number of 1 bits in MAX; "COBn" means + "count the number of 1 bits in the low-order n bits"). */ +#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) +#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) +#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) +#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) +#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) +#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) +#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) + +#ifndef WORD_BIT +/* Assume 'int' is 32 bits wide. */ +# define WORD_BIT 32 +#endif +#ifndef LONG_BIT +/* Assume 'long' is 32 or 64 bits wide. */ +# if LONG_MAX == INT_MAX +# define LONG_BIT 32 +# else +# define LONG_BIT 64 +# endif +#endif + +/* Assume no multibyte character is longer than 16 bytes. */ +#ifndef MB_LEN_MAX +# define MB_LEN_MAX 16 +#endif + +/* Macros specified by C23 and by ISO/IEC TS 18661-1:2014. */ + +#if (! defined ULLONG_WIDTH \ + && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__ \ + || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))) +# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) +# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) +# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) +# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) +# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) +# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) +# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) +# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) +# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) +# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) +# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) +#endif + +/* Macros specified by C23. */ + +#if (defined _GNU_SOURCE \ + || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__)) +# if ! defined BOOL_WIDTH +# define BOOL_WIDTH 1 +# define BOOL_MAX 1 +# elif ! defined BOOL_MAX +# define BOOL_MAX 1 +# endif +#endif + +/* Macro specified by POSIX. */ + +/* The maximum ssize_t value. Although it might not be of ssize_t type + as it should be, it's too much trouble to fix this minor detail. */ +#ifndef SSIZE_MAX +# ifdef _WIN64 +# define SSIZE_MAX LLONG_MAX +# else +# define SSIZE_MAX LONG_MAX +# endif +#endif + +#endif /* _GL_LIMITS_H */ +#endif /* _GL_LIMITS_H */ +#endif diff --git a/jni/parted/lib/locale.h b/jni/parted/lib/locale.h new file mode 100755 index 0000000..8b77de7 --- /dev/null +++ b/jni/parted/lib/locale.h @@ -0,0 +1,849 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A POSIX . + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \ + || defined _GL_ALREADY_INCLUDING_LOCALE_H + +/* Special invocation convention: + - Inside mingw header files, + - To handle Solaris header files (through Solaris 10) when combined + with gettext's libintl.h. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_LOCALE_H + +#define _GL_ALREADY_INCLUDING_LOCALE_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#undef _GL_ALREADY_INCLUDING_LOCALE_H + +#ifndef _GL_LOCALE_H +#define _GL_LOCALE_H + +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* NetBSD 5.0 mis-defines NULL. */ +#include + +/* Mac OS X 10.5 defines the locale_t type in . */ +#if 1 +# include +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. + On systems that don't define it, use the same value as GNU libintl. */ +#if !defined LC_MESSAGES +# define LC_MESSAGES 1729 +#endif + +/* On native Windows with MSVC, 'struct lconv' lacks the members int_p_* and + int_n_*. Instead of overriding 'struct lconv', merely define these member + names as macros. This avoids trouble in C++ mode. */ +#if defined _MSC_VER +# define int_p_cs_precedes p_cs_precedes +# define int_p_sign_posn p_sign_posn +# define int_p_sep_by_space p_sep_by_space +# define int_n_cs_precedes n_cs_precedes +# define int_n_sign_posn n_sign_posn +# define int_n_sep_by_space n_sep_by_space +#endif + +/* Bionic libc's 'struct lconv' is just a dummy. */ +#if 0 +# define lconv rpl_lconv +struct lconv +{ + /* All 'char *' are actually 'const char *'. */ + + /* Members that depend on the LC_NUMERIC category of the locale. See + */ + + /* Symbol used as decimal point. */ + char *decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *grouping; + + /* Members that depend on the LC_MONETARY category of the locale. See + */ + + /* Symbol used as decimal point. */ + char *mon_decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *mon_thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *mon_grouping; + /* Sign used to indicate a value >= 0. */ + char *positive_sign; + /* Sign used to indicate a value < 0. */ + char *negative_sign; + + /* For formatting local currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *currency_symbol; + /* Number of digits after the decimal point. */ + char frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char n_cs_precedes; + /* For values < 0: Position of the sign. */ + char n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char n_sep_by_space; + + /* For formatting international currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *int_curr_symbol; + /* Number of digits after the decimal point. */ + char int_frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char int_p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_n_cs_precedes; + /* For values < 0: Position of the sign. */ + char int_n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_n_sep_by_space; +}; +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localeconv +# define localeconv rpl_localeconv +# endif +_GL_FUNCDECL_RPL (localeconv, struct lconv *, (void), ); +_GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); +# else +_GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (localeconv); +# endif +#elif 0 +# if !GNULIB_LOCALECONV +# undef localeconv +# define localeconv localeconv_used_without_requesting_gnulib_module_localeconv +# endif +#elif defined GNULIB_POSIXCHECK +# undef localeconv +# if HAVE_RAW_DECL_LOCALECONV +_GL_WARN_ON_USE (localeconv, + "localeconv returns too few information on some platforms - " + "use gnulib module localeconv for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setlocale +# define setlocale rpl_setlocale +# define GNULIB_defined_setlocale 1 +# endif +_GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale), ); +_GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); +# else +_GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (setlocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef setlocale +# if HAVE_RAW_DECL_SETLOCALE +_GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " + "use gnulib module setlocale for portability"); +# endif +#endif + +#if 1 +/* Included here for convenience. */ +# include "setlocale_null.h" +#endif + +#if /*@GNULIB_NEWLOCALE@ ||*/ (IN_PARTED_GNULIB_TESTS && 0 && 1) +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef newlocale +# define newlocale rpl_newlocale +# define GNULIB_defined_newlocale 1 +# endif +_GL_FUNCDECL_RPL (newlocale, locale_t, + (int category_mask, const char *name, locale_t base), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (newlocale, locale_t, + (int category_mask, const char *name, locale_t base)); +# else +# if 1 +_GL_CXXALIAS_SYS (newlocale, locale_t, + (int category_mask, const char *name, locale_t base)); +# endif +# endif +# if __GLIBC__ >= 2 && 1 +_GL_CXXALIASWARN (newlocale); +# endif +# if 1 || 0 +# ifndef HAVE_WORKING_NEWLOCALE +# define HAVE_WORKING_NEWLOCALE 1 +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef newlocale +# if HAVE_RAW_DECL_NEWLOCALE +_GL_WARN_ON_USE (newlocale, "newlocale is not portable"); +# endif +#endif + +#if 0 || (IN_PARTED_GNULIB_TESTS && 0 && 1) +# if 1 /* locale_t may be undefined if !1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef duplocale +# define duplocale rpl_duplocale +# define GNULIB_defined_duplocale 1 +# endif +_GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); +# else +_GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); +# endif +# endif +# if __GLIBC__ >= 2 && 1 +_GL_CXXALIASWARN (duplocale); +# endif +# if 1 +# ifndef HAVE_WORKING_DUPLOCALE +# define HAVE_WORKING_DUPLOCALE 1 +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef duplocale +# if HAVE_RAW_DECL_DUPLOCALE +_GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " + "use gnulib module duplocale for portability"); +# endif +#endif + +#if /*@GNULIB_FREELOCALE@ ||*/ (IN_PARTED_GNULIB_TESTS && 0 && 1) +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freelocale +# define freelocale rpl_freelocale +# define GNULIB_defined_freelocale 1 +# endif +_GL_FUNCDECL_RPL (freelocale, void, (locale_t locale), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (freelocale, void, (locale_t locale)); +# else +# if 1 +/* Need to cast, because on FreeBSD and Mac OS X 10.13, the return type is + int. */ +_GL_CXXALIAS_SYS_CAST (freelocale, void, (locale_t locale)); +# endif +# endif +# if __GLIBC__ >= 2 && 1 +_GL_CXXALIASWARN (freelocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef freelocale +# if HAVE_RAW_DECL_FREELOCALE +_GL_WARN_ON_USE (freelocale, "freelocale is not portable"); +# endif +#endif + +#endif /* _GL_LOCALE_H */ +#endif /* _GL_LOCALE_H */ +#endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */ diff --git a/jni/parted/lib/malloc/dynarray-skeleton.gl.h b/jni/parted/lib/malloc/dynarray-skeleton.gl.h new file mode 100755 index 0000000..01c545a --- /dev/null +++ b/jni/parted/lib/malloc/dynarray-skeleton.gl.h @@ -0,0 +1,529 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Type-safe arrays which grow dynamically. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* Pre-processor macros which act as parameters: + + DYNARRAY_STRUCT + The struct tag of dynamic array to be defined. + DYNARRAY_ELEMENT + The type name of the element type. Elements are copied + as if by memcpy, and can change address as the dynamic + array grows. + DYNARRAY_PREFIX + The prefix of the functions which are defined. + + The following parameters are optional: + + DYNARRAY_ELEMENT_FREE + DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the + contents of elements. E is of type DYNARRAY_ELEMENT *. + DYNARRAY_ELEMENT_INIT + DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new + element. E is of type DYNARRAY_ELEMENT *. + If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is + defined, new elements are automatically zero-initialized. + Otherwise, new elements have undefined contents. + DYNARRAY_INITIAL_SIZE + The size of the statically allocated array (default: + at least 2, more elements if they fit into 128 bytes). + Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, + there is no statically allocated array at, and all non-empty + arrays are heap-allocated. + DYNARRAY_FINAL_TYPE + The name of the type which holds the final array. If not + defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE + must be a struct type, with members of type DYNARRAY_ELEMENT and + size_t at the start (in this order). + + These macros are undefined after this header file has been + included. + + The following types are provided (their members are private to the + dynarray implementation): + + struct DYNARRAY_STRUCT + + The following functions are provided: + + void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *); + void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *); + bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *); + void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *); + size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *); + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *); + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *); + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *, size_t); + void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *, DYNARRAY_ELEMENT); + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *); + bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *, size_t); + void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *); + void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *); + + The following functions are provided are provided if the + prerequisites are met: + + bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, + DYNARRAY_FINAL_TYPE *); + (if DYNARRAY_FINAL_TYPE is defined) + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, + size_t *); + (if DYNARRAY_FINAL_TYPE is not defined) +*/ + +#include + +#include +#include +#include + +#ifndef DYNARRAY_STRUCT +# error "DYNARRAY_STRUCT must be defined" +#endif + +#ifndef DYNARRAY_ELEMENT +# error "DYNARRAY_ELEMENT must be defined" +#endif + +#ifndef DYNARRAY_PREFIX +# error "DYNARRAY_PREFIX must be defined" +#endif + +#ifdef DYNARRAY_INITIAL_SIZE +# if DYNARRAY_INITIAL_SIZE < 0 +# error "DYNARRAY_INITIAL_SIZE must be non-negative" +# endif +# if DYNARRAY_INITIAL_SIZE > 0 +# define DYNARRAY_HAVE_SCRATCH 1 +# else +# define DYNARRAY_HAVE_SCRATCH 0 +# endif +#else +/* Provide a reasonable default which limits the size of + DYNARRAY_STRUCT. */ +# define DYNARRAY_INITIAL_SIZE \ + (sizeof (DYNARRAY_ELEMENT) > 64 ? 2 : 128 / sizeof (DYNARRAY_ELEMENT)) +# define DYNARRAY_HAVE_SCRATCH 1 +#endif + +/* Public type definitions. */ + +/* All fields of this struct are private to the implementation. */ +struct DYNARRAY_STRUCT +{ + union + { + struct dynarray_header dynarray_abstract; + struct + { + /* These fields must match struct dynarray_header. */ + size_t used; + size_t allocated; + DYNARRAY_ELEMENT *array; + } dynarray_header; + } u; + +#if DYNARRAY_HAVE_SCRATCH + /* Initial inline allocation. */ + DYNARRAY_ELEMENT scratch[DYNARRAY_INITIAL_SIZE]; +#endif +}; + +/* Internal use only: Helper macros. */ + +/* Ensure macro-expansion of DYNARRAY_PREFIX. */ +#define DYNARRAY_CONCAT0(prefix, name) prefix##name +#define DYNARRAY_CONCAT1(prefix, name) DYNARRAY_CONCAT0(prefix, name) +#define DYNARRAY_NAME(name) DYNARRAY_CONCAT1(DYNARRAY_PREFIX, name) + +/* Use DYNARRAY_FREE instead of DYNARRAY_NAME (free), + so that Gnulib does not change 'free' to 'rpl_free'. */ +#define DYNARRAY_FREE DYNARRAY_CONCAT1 (DYNARRAY_NAME (f), ree) + +/* Address of the scratch buffer if any. */ +#if DYNARRAY_HAVE_SCRATCH +# define DYNARRAY_SCRATCH(list) (list)->scratch +#else +# define DYNARRAY_SCRATCH(list) NULL +#endif + +/* Internal use only: Helper functions. */ + +/* Internal function. Call DYNARRAY_ELEMENT_FREE with the array + elements. Name mangling needed due to the DYNARRAY_ELEMENT_FREE + macro expansion. */ +static inline void +DYNARRAY_NAME (free__elements__) (DYNARRAY_ELEMENT *__dynarray_array, + size_t __dynarray_used) +{ +#ifdef DYNARRAY_ELEMENT_FREE + for (size_t __dynarray_i = 0; __dynarray_i < __dynarray_used; ++__dynarray_i) + DYNARRAY_ELEMENT_FREE (&__dynarray_array[__dynarray_i]); +#endif /* DYNARRAY_ELEMENT_FREE */ +} + +/* Internal function. Free the non-scratch array allocation. */ +static inline void +DYNARRAY_NAME (free__array__) (struct DYNARRAY_STRUCT *list) +{ +#if DYNARRAY_HAVE_SCRATCH + if (list->u.dynarray_header.array != list->scratch) + free (list->u.dynarray_header.array); +#else + free (list->u.dynarray_header.array); +#endif +} + +/* Public functions. */ + +/* Initialize a dynamic array object. This must be called before any + use of the object. */ +_GL_ATTRIBUTE_NONNULL ((1)) +static void +DYNARRAY_NAME (init) (struct DYNARRAY_STRUCT *list) +{ + list->u.dynarray_header.used = 0; + list->u.dynarray_header.allocated = DYNARRAY_INITIAL_SIZE; + list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); +} + +/* Deallocate the dynamic array and its elements. */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NONNULL ((1)) +static void +DYNARRAY_FREE (struct DYNARRAY_STRUCT *list) +{ + DYNARRAY_NAME (free__elements__) + (list->u.dynarray_header.array, list->u.dynarray_header.used); + DYNARRAY_NAME (free__array__) (list); + DYNARRAY_NAME (init) (list); +} + +/* Return true if the dynamic array is in an error state. */ +_GL_ATTRIBUTE_NONNULL ((1)) +static inline bool +DYNARRAY_NAME (has_failed) (const struct DYNARRAY_STRUCT *list) +{ + return list->u.dynarray_header.allocated == __dynarray_error_marker (); +} + +/* Mark the dynamic array as failed. All elements are deallocated as + a side effect. */ +_GL_ATTRIBUTE_NONNULL ((1)) +static void +DYNARRAY_NAME (mark_failed) (struct DYNARRAY_STRUCT *list) +{ + DYNARRAY_NAME (free__elements__) + (list->u.dynarray_header.array, list->u.dynarray_header.used); + DYNARRAY_NAME (free__array__) (list); + list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); + list->u.dynarray_header.used = 0; + list->u.dynarray_header.allocated = __dynarray_error_marker (); +} + +/* Return the number of elements which have been added to the dynamic + array. */ +_GL_ATTRIBUTE_NONNULL ((1)) +static inline size_t +DYNARRAY_NAME (size) (const struct DYNARRAY_STRUCT *list) +{ + return list->u.dynarray_header.used; +} + +/* Return a pointer to the array element at INDEX. Terminate the + process if INDEX is out of bounds. */ +_GL_ATTRIBUTE_NONNULL ((1)) +static inline DYNARRAY_ELEMENT * +DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index) +{ + if (_GL_UNLIKELY (index >= DYNARRAY_NAME (size) (list))) + __libc_dynarray_at_failure (DYNARRAY_NAME (size) (list), index); + return list->u.dynarray_header.array + index; +} + +/* Return a pointer to the first array element, if any. For a + zero-length array, the pointer can be NULL even though the dynamic + array has not entered the failure state. */ +_GL_ATTRIBUTE_NONNULL ((1)) +static inline DYNARRAY_ELEMENT * +DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list) +{ + return list->u.dynarray_header.array; +} + +/* Return a pointer one element past the last array element. For a + zero-length array, the pointer can be NULL even though the dynamic + array has not entered the failure state. */ +_GL_ATTRIBUTE_NONNULL ((1)) +static inline DYNARRAY_ELEMENT * +DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list) +{ + return list->u.dynarray_header.array + list->u.dynarray_header.used; +} + +/* Internal function. Slow path for the add function below. */ +static void +DYNARRAY_NAME (add__) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) +{ + if (_GL_UNLIKELY + (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, + DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT)))) + { + DYNARRAY_NAME (mark_failed) (list); + return; + } + + /* Copy the new element and increase the array length. */ + list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; +} + +/* Add ITEM at the end of the array, enlarging it by one element. + Mark *LIST as failed if the dynamic array allocation size cannot be + increased. */ +_GL_ATTRIBUTE_NONNULL ((1)) +static inline void +DYNARRAY_NAME (add) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) +{ + /* Do nothing in case of previous error. */ + if (DYNARRAY_NAME (has_failed) (list)) + return; + + /* Enlarge the array if necessary. */ + if (_GL_UNLIKELY (list->u.dynarray_header.used + == list->u.dynarray_header.allocated)) + { + DYNARRAY_NAME (add__) (list, item); + return; + } + + /* Copy the new element and increase the array length. */ + list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; +} + +/* Internal function. Building block for the emplace functions below. + Assumes space for one more element in *LIST. */ +static inline DYNARRAY_ELEMENT * +DYNARRAY_NAME (emplace__tail__) (struct DYNARRAY_STRUCT *list) +{ + DYNARRAY_ELEMENT *result + = &list->u.dynarray_header.array[list->u.dynarray_header.used]; + ++list->u.dynarray_header.used; +#if defined (DYNARRAY_ELEMENT_INIT) + DYNARRAY_ELEMENT_INIT (result); +#elif defined (DYNARRAY_ELEMENT_FREE) + memset (result, 0, sizeof (*result)); +#endif + return result; +} + +/* Internal function. Slow path for the emplace function below. */ +static DYNARRAY_ELEMENT * +DYNARRAY_NAME (emplace__) (struct DYNARRAY_STRUCT *list) +{ + if (_GL_UNLIKELY + (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, + DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT)))) + { + DYNARRAY_NAME (mark_failed) (list); + return NULL; + } + return DYNARRAY_NAME (emplace__tail__) (list); +} + +/* Allocate a place for a new element in *LIST and return a pointer to + it. The pointer can be NULL if the dynamic array cannot be + enlarged due to a memory allocation failure. */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NODISCARD +_GL_ATTRIBUTE_NONNULL ((1)) +static +/* Avoid inlining with the larger initialization code. */ +#if !(defined (DYNARRAY_ELEMENT_INIT) || defined (DYNARRAY_ELEMENT_FREE)) +inline +#endif +DYNARRAY_ELEMENT * +DYNARRAY_NAME (emplace) (struct DYNARRAY_STRUCT *list) +{ + /* Do nothing in case of previous error. */ + if (DYNARRAY_NAME (has_failed) (list)) + return NULL; + + /* Enlarge the array if necessary. */ + if (_GL_UNLIKELY (list->u.dynarray_header.used + == list->u.dynarray_header.allocated)) + return (DYNARRAY_NAME (emplace__) (list)); + return DYNARRAY_NAME (emplace__tail__) (list); +} + +/* Change the size of *LIST to SIZE. If SIZE is larger than the + existing size, new elements are added (which can be initialized). + Otherwise, the list is truncated, and elements are freed. Return + false on memory allocation failure (and mark *LIST as failed). */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NONNULL ((1)) +static bool +DYNARRAY_NAME (resize) (struct DYNARRAY_STRUCT *list, size_t size) +{ + if (size > list->u.dynarray_header.used) + { + bool ok; +#if defined (DYNARRAY_ELEMENT_INIT) + /* The new elements have to be initialized. */ + size_t old_size = list->u.dynarray_header.used; + ok = __libc_dynarray_resize (&list->u.dynarray_abstract, + size, DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT)); + if (ok) + for (size_t i = old_size; i < size; ++i) + { + DYNARRAY_ELEMENT_INIT (&list->u.dynarray_header.array[i]); + } +#elif defined (DYNARRAY_ELEMENT_FREE) + /* Zero initialization is needed so that the elements can be + safely freed. */ + ok = __libc_dynarray_resize_clear + (&list->u.dynarray_abstract, size, + DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); +#else + ok = __libc_dynarray_resize (&list->u.dynarray_abstract, + size, DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT)); +#endif + if (_GL_UNLIKELY (!ok)) + DYNARRAY_NAME (mark_failed) (list); + return ok; + } + else + { + /* The list has shrunk in size. Free the removed elements. */ + DYNARRAY_NAME (free__elements__) + (list->u.dynarray_header.array + size, + list->u.dynarray_header.used - size); + list->u.dynarray_header.used = size; + return true; + } +} + +/* Remove the last element of LIST if it is present. */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NONNULL ((1)) +static void +DYNARRAY_NAME (remove_last) (struct DYNARRAY_STRUCT *list) +{ + /* used > 0 implies that the array is the non-failed state. */ + if (list->u.dynarray_header.used > 0) + { + size_t new_length = list->u.dynarray_header.used - 1; +#ifdef DYNARRAY_ELEMENT_FREE + DYNARRAY_ELEMENT_FREE (&list->u.dynarray_header.array[new_length]); +#endif + list->u.dynarray_header.used = new_length; + } +} + +/* Remove all elements from the list. The elements are freed, but the + list itself is not. */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NONNULL ((1)) +static void +DYNARRAY_NAME (clear) (struct DYNARRAY_STRUCT *list) +{ + /* free__elements__ does nothing if the list is in the failed + state. */ + DYNARRAY_NAME (free__elements__) + (list->u.dynarray_header.array, list->u.dynarray_header.used); + list->u.dynarray_header.used = 0; +} + +#ifdef DYNARRAY_FINAL_TYPE +/* Transfer the dynamic array to a permanent location at *RESULT. + Returns true on success on false on allocation failure. In either + case, *LIST is re-initialized and can be reused. A NULL pointer is + stored in *RESULT if LIST refers to an empty list. On success, the + pointer in *RESULT is heap-allocated and must be deallocated using + free. */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NODISCARD +_GL_ATTRIBUTE_NONNULL ((1, 2)) +static bool +DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, + DYNARRAY_FINAL_TYPE *result) +{ + struct dynarray_finalize_result res; + if (__libc_dynarray_finalize (&list->u.dynarray_abstract, + DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT), &res)) + { + /* On success, the result owns all the data. */ + DYNARRAY_NAME (init) (list); + *result = (DYNARRAY_FINAL_TYPE) { res.array, res.length }; + return true; + } + else + { + /* On error, we need to free all data. */ + DYNARRAY_FREE (list); + errno = ENOMEM; + return false; + } +} +#else /* !DYNARRAY_FINAL_TYPE */ +/* Transfer the dynamic array to a heap-allocated array and return a + pointer to it. The pointer is NULL if memory allocation fails, or + if the array is empty, so this function should be used only for + arrays which are known not be empty (usually because they always + have a sentinel at the end). If LENGTHP is not NULL, the array + length is written to *LENGTHP. *LIST is re-initialized and can be + reused. */ +_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NODISCARD +_GL_ATTRIBUTE_NONNULL ((1)) +static DYNARRAY_ELEMENT * +DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, size_t *lengthp) +{ + struct dynarray_finalize_result res; + if (__libc_dynarray_finalize (&list->u.dynarray_abstract, + DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT), &res)) + { + /* On success, the result owns all the data. */ + DYNARRAY_NAME (init) (list); + if (lengthp != NULL) + *lengthp = res.length; + return res.array; + } + else + { + /* On error, we need to free all data. */ + DYNARRAY_FREE (list); + errno = ENOMEM; + return NULL; + } +} +#endif /* !DYNARRAY_FINAL_TYPE */ + +/* Undo macro definitions. */ + +#undef DYNARRAY_CONCAT0 +#undef DYNARRAY_CONCAT1 +#undef DYNARRAY_NAME +#undef DYNARRAY_SCRATCH +#undef DYNARRAY_HAVE_SCRATCH + +#undef DYNARRAY_STRUCT +#undef DYNARRAY_ELEMENT +#undef DYNARRAY_PREFIX +#undef DYNARRAY_ELEMENT_FREE +#undef DYNARRAY_ELEMENT_INIT +#undef DYNARRAY_INITIAL_SIZE +#undef DYNARRAY_FINAL_TYPE diff --git a/jni/parted/lib/malloc/dynarray.gl.h b/jni/parted/lib/malloc/dynarray.gl.h new file mode 100755 index 0000000..87a2a88 --- /dev/null +++ b/jni/parted/lib/malloc/dynarray.gl.h @@ -0,0 +1,173 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Type-safe arrays which grow dynamically. Shared definitions. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* To use the dynarray facility, you need to include + and define the parameter macros + documented in that file. + + A minimal example which provides a growing list of integers can be + defined like this: + + struct int_array + { + // Pointer to result array followed by its length, + // as required by DYNARRAY_FINAL_TYPE. + int *array; + size_t length; + }; + + #define DYNARRAY_STRUCT dynarray_int + #define DYNARRAY_ELEMENT int + #define DYNARRAY_PREFIX dynarray_int_ + #define DYNARRAY_FINAL_TYPE struct int_array + #include + + To create a three-element array with elements 1, 2, 3, use this + code: + + struct dynarray_int dyn; + dynarray_int_init (&dyn); + for (int i = 1; i <= 3; ++i) + { + int *place = dynarray_int_emplace (&dyn); + assert (place != NULL); + *place = i; + } + struct int_array result; + bool ok = dynarray_int_finalize (&dyn, &result); + assert (ok); + assert (result.length == 3); + assert (result.array[0] == 1); + assert (result.array[1] == 2); + assert (result.array[2] == 3); + free (result.array); + + If the elements contain resources which must be freed, define + DYNARRAY_ELEMENT_FREE appropriately, like this: + + struct str_array + { + char **array; + size_t length; + }; + + #define DYNARRAY_STRUCT dynarray_str + #define DYNARRAY_ELEMENT char * + #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) + #define DYNARRAY_PREFIX dynarray_str_ + #define DYNARRAY_FINAL_TYPE struct str_array + #include + + Compared to scratch buffers, dynamic arrays have the following + features: + + - They have an element type, and are not just an untyped buffer of + bytes. + + - When growing, previously stored elements are preserved. (It is + expected that scratch_buffer_grow_preserve and + scratch_buffer_set_array_size eventually go away because all + current users are moved to dynamic arrays.) + + - Scratch buffers have a more aggressive growth policy because + growing them typically means a retry of an operation (across an + NSS service module boundary), which is expensive. + + - For the same reason, scratch buffers have a much larger initial + stack allocation. */ + +#ifndef _DYNARRAY_H +#define _DYNARRAY_H + +#include +#include + +struct dynarray_header +{ + size_t used; + size_t allocated; + void *array; +}; + +/* Marker used in the allocated member to indicate that an error was + encountered. */ +static inline size_t +__dynarray_error_marker (void) +{ + return -1; +} + +/* Internal function. See the has_failed function in + dynarray-skeleton.c. */ +static inline bool +__dynarray_error (struct dynarray_header *list) +{ + return list->allocated == __dynarray_error_marker (); +} + +/* Internal function. Enlarge the dynamically allocated area of the + array to make room for one more element. SCRATCH is a pointer to + the scratch area (which is not heap-allocated and must not be + freed). ELEMENT_SIZE is the size, in bytes, of one element. + Return false on failure, true on success. */ +bool __libc_dynarray_emplace_enlarge (struct dynarray_header *, + void *scratch, size_t element_size); + +/* Internal function. Enlarge the dynamically allocated area of the + array to make room for at least SIZE elements (which must be larger + than the existing used part of the dynamic array). SCRATCH is a + pointer to the scratch area (which is not heap-allocated and must + not be freed). ELEMENT_SIZE is the size, in bytes, of one element. + Return false on failure, true on success. */ +bool __libc_dynarray_resize (struct dynarray_header *, size_t size, + void *scratch, size_t element_size); + +/* Internal function. Like __libc_dynarray_resize, but clear the new + part of the dynamic array. */ +bool __libc_dynarray_resize_clear (struct dynarray_header *, size_t size, + void *scratch, size_t element_size); + +/* Internal type. */ +struct dynarray_finalize_result +{ + void *array; + size_t length; +}; + +/* Internal function. Copy the dynamically-allocated area to an + explicitly-sized heap allocation. SCRATCH is a pointer to the + embedded scratch space. ELEMENT_SIZE is the size, in bytes, of the + element type. On success, true is returned, and pointer and length + are written to *RESULT. On failure, false is returned. The caller + has to take care of some of the memory management; this function is + expected to be called from dynarray-skeleton.c. */ +bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, + size_t element_size, + struct dynarray_finalize_result *result); + + +/* Internal function. Terminate the process after an index error. + SIZE is the number of elements of the dynamic array. INDEX is the + lookup index which triggered the failure. */ +_Noreturn void __libc_dynarray_at_failure (size_t size, size_t index); + +#ifndef _ISOMAC +#endif + +#endif /* _DYNARRAY_H */ diff --git a/jni/parted/lib/malloc/scratch_buffer.gl.h b/jni/parted/lib/malloc/scratch_buffer.gl.h new file mode 100755 index 0000000..8d66d8b --- /dev/null +++ b/jni/parted/lib/malloc/scratch_buffer.gl.h @@ -0,0 +1,133 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SCRATCH_BUFFER_H +#define _SCRATCH_BUFFER_H + +/* Scratch buffers with a default stack allocation and fallback to + heap allocation. It is expected that this function is used in this + way: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + return -1; + + scratch_buffer_free (&tmpbuf); + return 0; + + The allocation functions (scratch_buffer_grow, + scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make + sure that the heap allocation, if any, is freed, so that the code + above does not have a memory leak. The buffer still remains in a + state that can be deallocated using scratch_buffer_free, so a loop + like this is valid as well: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + break; + + scratch_buffer_free (&tmpbuf); + + scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed + to grow the buffer by at least 512 bytes. This means that when + using the scratch buffer as a backing store for a non-character + array whose element size, in bytes, is 512 or smaller, the scratch + buffer only has to grow once to make room for at least one more + element. +*/ + +#include +#include +#include + +/* Scratch buffer. Must be initialized with scratch_buffer_init + before its use. */ +struct scratch_buffer { + void *data; /* Pointer to the beginning of the scratch area. */ + size_t length; /* Allocated space at the data pointer, in bytes. */ + union { max_align_t __align; char __c[1024]; } __space; +}; + +/* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space + and BUFFER->length reflects the available space. */ +static inline void +scratch_buffer_init (struct scratch_buffer *buffer) +{ + buffer->data = buffer->__space.__c; + buffer->length = sizeof (buffer->__space); +} + +/* Deallocates *BUFFER (if it was heap-allocated). */ +static inline void +scratch_buffer_free (struct scratch_buffer *buffer) +{ + if (buffer->data != buffer->__space.__c) + free (buffer->data); +} + +/* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT + preserved. Return true on success, false on allocation failure (in + which case the old buffer is freed). On success, the new buffer is + larger than the previous size. On failure, *BUFFER is deallocated, + but remains in a free-able state, and errno is set. */ +bool __libc_scratch_buffer_grow (struct scratch_buffer *buffer); + +/* Alias for __libc_scratch_buffer_grow. */ +static inline _GL_ATTRIBUTE_ALWAYS_INLINE bool +scratch_buffer_grow (struct scratch_buffer *buffer) +{ + return _GL_LIKELY (__libc_scratch_buffer_grow (buffer)); +} + +/* Like __libc_scratch_buffer_grow, but preserve the old buffer + contents on success, as a prefix of the new buffer. */ +bool __libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer); + +/* Alias for __libc_scratch_buffer_grow_preserve. */ +static inline _GL_ATTRIBUTE_ALWAYS_INLINE bool +scratch_buffer_grow_preserve (struct scratch_buffer *buffer) +{ + return _GL_LIKELY (__libc_scratch_buffer_grow_preserve (buffer)); +} + +/* Grow *BUFFER so that it can store at least NELEM elements of SIZE + bytes. The buffer contents are NOT preserved. Both NELEM and SIZE + can be zero. Return true on success, false on allocation failure + (in which case the old buffer is freed, but *BUFFER remains in a + free-able state, and errno is set). It is unspecified whether this + function can reduce the array size. */ +bool __libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size); + +/* Alias for __libc_scratch_set_array_size. */ +static inline _GL_ATTRIBUTE_ALWAYS_INLINE bool +scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size) +{ + return _GL_LIKELY (__libc_scratch_buffer_set_array_size + (buffer, nelem, size)); +} + +#endif /* _SCRATCH_BUFFER_H */ diff --git a/jni/parted/lib/pthread.h b/jni/parted/lib/pthread.h new file mode 100755 index 0000000..ace2f7c --- /dev/null +++ b/jni/parted/lib/pthread.h @@ -0,0 +1,2619 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Implement the most essential subset of POSIX pthread.h. + + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Glen Lenker, and Bruno Haible. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined _GL_ALREADY_INCLUDING_PTHREAD_H +/* Special invocation convention: + On Android, we have a sequence of nested includes + -> -> -> -> + -> . + In this situation, PTHREAD_COND_INITIALIZER is not yet defined, + therefore we should not attempt to define PTHREAD_MUTEX_NORMAL etc. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_PTHREAD_H_ + +#if 1 + +# define _GL_ALREADY_INCLUDING_PTHREAD_H + +/* The include_next requires a split double-inclusion guard. */ +# include_next + +# undef _GL_ALREADY_INCLUDING_PTHREAD_H + +#endif + +#ifndef _GL_PTHREAD_H_ +#define _GL_PTHREAD_H_ + +/* This file uses _Noreturn, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#define __need_system_stdlib_h +#include +#undef __need_system_stdlib_h + + +/* The pthreads-win32 defines a couple of broken macros. */ +#undef asctime_r +#undef ctime_r +#undef gmtime_r +#undef localtime_r +#undef rand_r +#undef strtok_r + +#include +#include +#include +#include + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _Noreturn is copied here. */ +/* A C macro for declaring that a function does not return. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif (defined __clang__ && __clang_major__ < 16 \ + && defined _GL_WORK_AROUND_LLVM_BUG_59792) + /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around + that rare LLVM bug, though you may get many false-alarm warnings. */ +# define _Noreturn +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || (!defined __STRICT_ANSI__ \ + && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __clang__ \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))))) + /* _Noreturn works as-is. */ +# elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ + || 0x5110 <= __SUNPRO_C) +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* =========== Thread types and macros =========== */ + +#if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS +# if IN_PARTED_GNULIB_TESTS +# include "windows-thread.h" +# if 1 +# define pthread_t rpl_pthread_t +# define pthread_attr_t rpl_pthread_attr_t +# endif +# if !GNULIB_defined_pthread_thread_types +typedef glwthread_thread_t pthread_t; +typedef unsigned int pthread_attr_t; +# define GNULIB_defined_pthread_thread_types 1 +# endif +# else +# if 1 +# define pthread_t rpl_pthread_t +# define pthread_attr_t rpl_pthread_attr_t +# endif +# if !GNULIB_defined_pthread_thread_types +typedef int pthread_t; +typedef unsigned int pthread_attr_t; +# define GNULIB_defined_pthread_thread_types 1 +# endif +# endif +# undef PTHREAD_CREATE_JOINABLE +# undef PTHREAD_CREATE_DETACHED +# define PTHREAD_CREATE_JOINABLE 0 +# define PTHREAD_CREATE_DETACHED 1 +#else +# if !1 +# if !GNULIB_defined_pthread_thread_types +typedef int pthread_t; +typedef unsigned int pthread_attr_t; +# define GNULIB_defined_pthread_thread_types 1 +# endif +# endif +# if !1 +# define PTHREAD_CREATE_JOINABLE 0 +# define PTHREAD_CREATE_DETACHED 1 +# endif +#endif + +/* =========== Once-only control (initialization) types and macros ========== */ + +#if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS +# if 1 +# include "windows-once.h" +# if 1 +# define pthread_once_t rpl_pthread_once_t +# endif +# if !GNULIB_defined_pthread_once_types +typedef glwthread_once_t pthread_once_t; +# define GNULIB_defined_pthread_once_types 1 +# endif +# undef PTHREAD_ONCE_INIT +# define PTHREAD_ONCE_INIT GLWTHREAD_ONCE_INIT +# else +# if 1 +# define pthread_once_t rpl_pthread_once_t +# endif +# if !GNULIB_defined_pthread_once_types +typedef int pthread_once_t; +# define GNULIB_defined_pthread_once_types 1 +# endif +# undef PTHREAD_ONCE_INIT +# define PTHREAD_ONCE_INIT { 0 } +# endif +#else +# if !1 +# if !GNULIB_defined_pthread_once_types +typedef int pthread_once_t; +# define GNULIB_defined_pthread_once_types 1 +# endif +# undef PTHREAD_ONCE_INIT +# define PTHREAD_ONCE_INIT { 0 } +# endif +#endif + +/* =========== Mutex types and macros =========== */ + +#if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS +# if IN_PARTED_GNULIB_TESTS +# include "windows-timedmutex.h" +# include "windows-timedrecmutex.h" +# if 1 +# define pthread_mutex_t rpl_pthread_mutex_t +# define pthread_mutexattr_t rpl_pthread_mutexattr_t +# endif +# if !GNULIB_defined_pthread_mutex_types +typedef struct + { + int type; + union + { + glwthread_timedmutex_t u_timedmutex; + glwthread_timedrecmutex_t u_timedrecmutex; + } + u; + } + pthread_mutex_t; +typedef unsigned int pthread_mutexattr_t; +# define GNULIB_defined_pthread_mutex_types 1 +# endif +# undef PTHREAD_MUTEX_INITIALIZER +# define PTHREAD_MUTEX_INITIALIZER { 1, { GLWTHREAD_TIMEDMUTEX_INIT } } +# else +# if 1 +# define pthread_mutex_t rpl_pthread_mutex_t +# define pthread_mutexattr_t rpl_pthread_mutexattr_t +# endif +# if !GNULIB_defined_pthread_mutex_types +typedef int pthread_mutex_t; +typedef unsigned int pthread_mutexattr_t; +# define GNULIB_defined_pthread_mutex_types 1 +# endif +# undef PTHREAD_MUTEX_INITIALIZER +# define PTHREAD_MUTEX_INITIALIZER { 0 } +# endif +# undef PTHREAD_MUTEX_DEFAULT +# undef PTHREAD_MUTEX_NORMAL +# undef PTHREAD_MUTEX_ERRORCHECK +# undef PTHREAD_MUTEX_RECURSIVE +# define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL +# define PTHREAD_MUTEX_NORMAL 0 +# define PTHREAD_MUTEX_ERRORCHECK 1 +# define PTHREAD_MUTEX_RECURSIVE 2 +# undef PTHREAD_MUTEX_STALLED +# undef PTHREAD_MUTEX_ROBUST +# define PTHREAD_MUTEX_STALLED 0 +# define PTHREAD_MUTEX_ROBUST 1 +#else +# if !1 +# if !GNULIB_defined_pthread_mutex_types +typedef int pthread_mutex_t; +typedef unsigned int pthread_mutexattr_t; +# define GNULIB_defined_pthread_mutex_types 1 +# endif +# undef PTHREAD_MUTEX_INITIALIZER +# define PTHREAD_MUTEX_INITIALIZER { 0 } +# endif +# if !1 +# define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL +# define PTHREAD_MUTEX_NORMAL 0 +# define PTHREAD_MUTEX_ERRORCHECK 1 +# define PTHREAD_MUTEX_RECURSIVE 2 +# endif +# if !0 +# define PTHREAD_MUTEX_STALLED 0 +# define PTHREAD_MUTEX_ROBUST 1 +# endif +#endif + +/* =========== Read-write lock types and macros =========== */ + +#if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS +# if IN_PARTED_GNULIB_TESTS +# include "windows-timedrwlock.h" +# if 1 +# define pthread_rwlock_t rpl_pthread_rwlock_t +# define pthread_rwlockattr_t rpl_pthread_rwlockattr_t +# endif +# if !GNULIB_defined_pthread_rwlock_types +typedef glwthread_timedrwlock_t pthread_rwlock_t; +typedef unsigned int pthread_rwlockattr_t; +# define GNULIB_defined_pthread_rwlock_types 1 +# endif +# undef PTHREAD_RWLOCK_INITIALIZER +# define PTHREAD_RWLOCK_INITIALIZER GLWTHREAD_TIMEDRWLOCK_INIT +# else +# if 1 +# define pthread_rwlock_t rpl_pthread_rwlock_t +# define pthread_rwlockattr_t rpl_pthread_rwlockattr_t +# endif +# if !GNULIB_defined_pthread_rwlock_types +typedef int pthread_rwlock_t; +typedef unsigned int pthread_rwlockattr_t; +# define GNULIB_defined_pthread_rwlock_types 1 +# endif +# undef PTHREAD_RWLOCK_INITIALIZER +# define PTHREAD_RWLOCK_INITIALIZER { 0 } +# endif +#elif IN_PARTED_GNULIB_TESTS && 0 /* i.e. PTHREAD_RWLOCK_UNIMPLEMENTED */ +# if 1 +# define pthread_rwlock_t rpl_pthread_rwlock_t +# define pthread_rwlockattr_t rpl_pthread_rwlockattr_t +# endif +# if !GNULIB_defined_pthread_rwlock_types +typedef struct + { + pthread_mutex_t lock; /* protects the remaining fields */ + pthread_cond_t waiting_readers; /* waiting readers */ + pthread_cond_t waiting_writers; /* waiting writers */ + unsigned int waiting_writers_count; /* number of waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + pthread_rwlock_t; +typedef unsigned int pthread_rwlockattr_t; +# define GNULIB_defined_pthread_rwlock_types 1 +# endif +# undef PTHREAD_RWLOCK_INITIALIZER +# define PTHREAD_RWLOCK_INITIALIZER \ + { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } +#elif IN_PARTED_GNULIB_TESTS && 0 /* i.e. PTHREAD_RWLOCK_BAD_WAITQUEUE */ +/* Use rwlocks of kind PREFER_WRITER or PREFER_WRITER_NONRECURSIVE instead of + the DEFAULT. */ +# undef PTHREAD_RWLOCK_INITIALIZER +# define PTHREAD_RWLOCK_INITIALIZER PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP +#else +# if 1 +# if !defined PTHREAD_RWLOCK_INITIALIZER && defined PTHREAD_RWLOCK_INITIALIZER_NP /* z/OS */ +# define PTHREAD_RWLOCK_INITIALIZER PTHREAD_RWLOCK_INITIALIZER_NP +# endif +# else +# if !GNULIB_defined_pthread_rwlock_types +typedef int pthread_rwlock_t; +typedef unsigned int pthread_rwlockattr_t; +# define GNULIB_defined_pthread_rwlock_types 1 +# endif +# undef PTHREAD_RWLOCK_INITIALIZER +# define PTHREAD_RWLOCK_INITIALIZER { 0 } +# endif +#endif + +/* =========== Condition variable types and macros =========== */ + +#if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS +# if IN_PARTED_GNULIB_TESTS +# include "windows-cond.h" +# if 1 +# define pthread_cond_t rpl_pthread_cond_t +# define pthread_condattr_t rpl_pthread_condattr_t +# endif +# if !GNULIB_defined_pthread_cond_types +typedef glwthread_cond_t pthread_cond_t; +typedef unsigned int pthread_condattr_t; +# define GNULIB_defined_pthread_cond_types 1 +# endif +# undef PTHREAD_COND_INITIALIZER +# define PTHREAD_COND_INITIALIZER GLWTHREAD_COND_INIT +# else +# if 1 +# define pthread_cond_t rpl_pthread_cond_t +# define pthread_condattr_t rpl_pthread_condattr_t +# endif +# if !GNULIB_defined_pthread_cond_types +typedef int pthread_cond_t; +typedef unsigned int pthread_condattr_t; +# define GNULIB_defined_pthread_cond_types 1 +# endif +# undef PTHREAD_COND_INITIALIZER +# define PTHREAD_COND_INITIALIZER { 0 } +# endif +#else +# if !1 +# if !GNULIB_defined_pthread_cond_types +typedef int pthread_cond_t; +typedef unsigned int pthread_condattr_t; +# define GNULIB_defined_pthread_cond_types 1 +# endif +# undef PTHREAD_COND_INITIALIZER +# define PTHREAD_COND_INITIALIZER { 0 } +# endif +#endif + +/* =========== Thread-specific storage types and macros =========== */ + +#if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS +# if 0 +# include "windows-tls.h" +# if 1 +# define pthread_key_t rpl_pthread_key_t +# endif +# if !GNULIB_defined_pthread_tss_types +typedef glwthread_tls_key_t pthread_key_t; +# define GNULIB_defined_pthread_tss_types 1 +# endif +# undef PTHREAD_DESTRUCTOR_ITERATIONS +# define PTHREAD_DESTRUCTOR_ITERATIONS GLWTHREAD_DESTRUCTOR_ITERATIONS +# else +# if 1 +# define pthread_key_t rpl_pthread_key_t +# endif +# if !GNULIB_defined_pthread_tss_types +typedef void ** pthread_key_t; +# define GNULIB_defined_pthread_tss_types 1 +# endif +# undef PTHREAD_DESTRUCTOR_ITERATIONS +# define PTHREAD_DESTRUCTOR_ITERATIONS 0 +# endif +#else +# if !1 +# if !GNULIB_defined_pthread_tss_types +typedef void ** pthread_key_t; +# define GNULIB_defined_pthread_tss_types 1 +# endif +# undef PTHREAD_DESTRUCTOR_ITERATIONS +# define PTHREAD_DESTRUCTOR_ITERATIONS 0 +# endif +#endif + +/* =========== Spinlock types and macros =========== */ + +#if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS +# if 0 +# include "windows-spin.h" +# if 1 +# define pthread_spinlock_t rpl_pthread_spinlock_t +# endif +# if !GNULIB_defined_pthread_spin_types +typedef glwthread_spinlock_t pthread_spinlock_t; +# define GNULIB_defined_pthread_spin_types 1 +# endif +# else +# if 1 +# define pthread_spinlock_t rpl_pthread_spinlock_t +# endif +# if !GNULIB_defined_pthread_spin_types +typedef pthread_mutex_t pthread_spinlock_t; +# define GNULIB_defined_pthread_spin_types 1 +# endif +# endif +# undef PTHREAD_PROCESS_PRIVATE +# undef PTHREAD_PROCESS_SHARED +# define PTHREAD_PROCESS_PRIVATE 0 +# define PTHREAD_PROCESS_SHARED 1 +#else +# if 1 +/* exists and defines pthread_spinlock_t. */ +# if !1 || 0 +/* If the 'pthread-spin' module is in use, it defines all the pthread_spin* + functions. Prepare for it by overriding pthread_spinlock_t if that might + be needed. */ +# if !(((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \ + || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \ + || (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \ + && !defined __ANDROID__) \ + || __clang_major__ >= 3)) \ + && !defined __ibmxl__) +/* We can't use GCC built-ins. Approximate spinlocks with mutexes. */ +# if !GNULIB_defined_pthread_spin_types +# define pthread_spinlock_t pthread_mutex_t +# define GNULIB_defined_pthread_spin_types 1 +# endif +# endif +# endif +# else +/* Approximate spinlocks with mutexes. */ +# if !GNULIB_defined_pthread_spin_types +typedef pthread_mutex_t pthread_spinlock_t; +# define GNULIB_defined_pthread_spin_types 1 +# endif +# endif +# if !1 +# define PTHREAD_PROCESS_PRIVATE 0 +# define PTHREAD_PROCESS_SHARED 1 +# endif +#endif + +/* =========== Other types and macros =========== */ + +#if !1 +# if !GNULIB_defined_other_pthread_types +typedef int pthread_barrier_t; +typedef unsigned int pthread_barrierattr_t; +# define GNULIB_defined_other_pthread_types 1 +# endif +#endif + +#if !defined PTHREAD_CANCELED + +# define PTHREAD_BARRIER_SERIAL_THREAD (-1) + +# define PTHREAD_CANCEL_DEFERRED 0 +# define PTHREAD_CANCEL_ASYNCHRONOUS 1 + +# define PTHREAD_CANCEL_ENABLE 0 +# define PTHREAD_CANCEL_DISABLE 1 + +# define PTHREAD_CANCELED ((void *) -1) + +# define PTHREAD_INHERIT_SCHED 0 +# define PTHREAD_EXPLICIT_SCHED 1 + +# define PTHREAD_PRIO_NONE 0 +# define PTHREAD_PRIO_INHERIT 1 +# define PTHREAD_PRIO_PROTECT 2 + +# define PTHREAD_SCOPE_SYSTEM 0 +# define PTHREAD_SCOPE_PROCESS 1 + +#endif + +/* =========== Thread functions =========== */ + +#if IN_PARTED_GNULIB_TESTS +/* The 'restrict' qualifier on ARG is nonsense, but POSIX specifies it this way. + Sigh. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_create +# define pthread_create rpl_pthread_create +# endif +_GL_FUNCDECL_RPL (pthread_create, int, + (pthread_t *restrict threadp, + const pthread_attr_t *restrict attr, + void * (*mainfunc) (void *), void *restrict arg), + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (pthread_create, int, + (pthread_t *restrict threadp, + const pthread_attr_t *restrict attr, + void * (*mainfunc) (void *), void *restrict arg)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_create, int, + (pthread_t *restrict threadp, + const pthread_attr_t *restrict attr, + void * (*mainfunc) (void *), void *restrict arg), + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS_CAST (pthread_create, int, + (pthread_t *restrict threadp, + const pthread_attr_t *restrict attr, + void * (*mainfunc) (void *), void *restrict arg)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_create); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_create +# if HAVE_RAW_DECL_PTHREAD_CREATE +_GL_WARN_ON_USE (pthread_create, "pthread_create is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_attr_init +# define pthread_attr_init rpl_pthread_attr_init +# endif +_GL_FUNCDECL_RPL (pthread_attr_init, int, (pthread_attr_t *attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_attr_init, int, (pthread_attr_t *attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_attr_init, int, (pthread_attr_t *attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_attr_init, int, (pthread_attr_t *attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_attr_init); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_attr_init +# if HAVE_RAW_DECL_PTHREAD_ATTR_INIT +_GL_WARN_ON_USE (pthread_attr_init, "pthread_attr_init is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_attr_getdetachstate +# define pthread_attr_getdetachstate rpl_pthread_attr_getdetachstate +# endif +_GL_FUNCDECL_RPL (pthread_attr_getdetachstate, int, + (const pthread_attr_t *attr, int *detachstatep), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (pthread_attr_getdetachstate, int, + (const pthread_attr_t *attr, int *detachstatep)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_attr_getdetachstate, int, + (const pthread_attr_t *attr, int *detachstatep), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (pthread_attr_getdetachstate, int, + (const pthread_attr_t *attr, int *detachstatep)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_attr_getdetachstate); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_attr_getdetachstate +# if HAVE_RAW_DECL_PTHREAD_ATTR_GETDETACHSTATE +_GL_WARN_ON_USE (pthread_attr_getdetachstate, "pthread_attr_getdetachstate is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_attr_setdetachstate +# define pthread_attr_setdetachstate rpl_pthread_attr_setdetachstate +# endif +_GL_FUNCDECL_RPL (pthread_attr_setdetachstate, int, + (pthread_attr_t *attr, int detachstate), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_attr_setdetachstate, int, + (pthread_attr_t *attr, int detachstate)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_attr_setdetachstate, int, + (pthread_attr_t *attr, int detachstate), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_attr_setdetachstate, int, + (pthread_attr_t *attr, int detachstate)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_attr_setdetachstate); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_attr_setdetachstate +# if HAVE_RAW_DECL_PTHREAD_ATTR_SETDETACHSTATE +_GL_WARN_ON_USE (pthread_attr_setdetachstate, "pthread_attr_setdetachstate is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_attr_destroy +# define pthread_attr_destroy rpl_pthread_attr_destroy +# endif +_GL_FUNCDECL_RPL (pthread_attr_destroy, int, (pthread_attr_t *attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_attr_destroy, int, (pthread_attr_t *attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_attr_destroy, int, (pthread_attr_t *attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_attr_destroy, int, (pthread_attr_t *attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_attr_destroy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_attr_destroy +# if HAVE_RAW_DECL_PTHREAD_ATTR_DESTROY +_GL_WARN_ON_USE (pthread_attr_destroy, "pthread_attr_destroy is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_self +# define pthread_self rpl_pthread_self +# endif +_GL_FUNCDECL_RPL (pthread_self, pthread_t, (void), _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (pthread_self, pthread_t, (void)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_self, pthread_t, (void), _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (pthread_self, pthread_t, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_self); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_self +# if HAVE_RAW_DECL_PTHREAD_SELF +_GL_WARN_ON_USE (pthread_self, "pthread_self is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_equal +# define pthread_equal rpl_pthread_equal +# endif +_GL_FUNCDECL_RPL (pthread_equal, int, (pthread_t thread1, pthread_t thread2), ); +_GL_CXXALIAS_RPL (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_equal, int, (pthread_t thread1, pthread_t thread2), ); +# endif +_GL_CXXALIAS_SYS (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_equal); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_equal +# if HAVE_RAW_DECL_PTHREAD_EQUAL +_GL_WARN_ON_USE (pthread_equal, "pthread_equal is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_detach +# define pthread_detach rpl_pthread_detach +# endif +_GL_FUNCDECL_RPL (pthread_detach, int, (pthread_t thread), ); +_GL_CXXALIAS_RPL (pthread_detach, int, (pthread_t thread)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_detach, int, (pthread_t thread), ); +# endif +_GL_CXXALIAS_SYS (pthread_detach, int, (pthread_t thread)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_detach); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_detach +# if HAVE_RAW_DECL_PTHREAD_DETACH +_GL_WARN_ON_USE (pthread_detach, "pthread_detach is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_join +# define pthread_join rpl_pthread_join +# endif +_GL_FUNCDECL_RPL (pthread_join, int, (pthread_t thread, void **valuep), ); +_GL_CXXALIAS_RPL (pthread_join, int, (pthread_t thread, void **valuep)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_join, int, (pthread_t thread, void **valuep), ); +# endif +_GL_CXXALIAS_SYS (pthread_join, int, (pthread_t thread, void **valuep)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_join); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_join +# if HAVE_RAW_DECL_PTHREAD_JOIN +_GL_WARN_ON_USE (pthread_join, "pthread_join is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_exit +# define pthread_exit rpl_pthread_exit +# endif +_GL_FUNCDECL_RPL (pthread_exit, _Noreturn void, (void *value), ); +_GL_CXXALIAS_RPL (pthread_exit, void, (void *value)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_exit, _Noreturn void, (void *value), ); +# endif +/* Need to cast because of AIX with xlclang++. */ +_GL_CXXALIAS_SYS_CAST (pthread_exit, void, (void *value)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_exit); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_exit +# if HAVE_RAW_DECL_PTHREAD_EXIT +_GL_WARN_ON_USE (pthread_exit, "pthread_exit is not portable - " + "use gnulib module pthread-thread for portability"); +# endif +#endif + +/* =========== Once-only control (initialization) functions =========== */ + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_once +# define pthread_once rpl_pthread_once +# endif +_GL_FUNCDECL_RPL (pthread_once, int, + (pthread_once_t *once_control, void (*initfunction) (void)), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (pthread_once, int, + (pthread_once_t *once_control, void (*initfunction) (void))); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_once, int, + (pthread_once_t *once_control, void (*initfunction) (void)), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS_CAST (pthread_once, int, + (pthread_once_t *once_control, + void (*initfunction) (void))); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_once); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_once +# if HAVE_RAW_DECL_PTHREAD_ONCE +_GL_WARN_ON_USE (pthread_once, "pthread_once is not portable - " + "use gnulib module pthread-once for portability"); +# endif +#endif + +/* =========== Mutex functions =========== */ + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutex_init +# define pthread_mutex_init rpl_pthread_mutex_init +# endif +_GL_FUNCDECL_RPL (pthread_mutex_init, int, + (pthread_mutex_t *restrict mutex, + const pthread_mutexattr_t *restrict attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_mutex_init, int, + (pthread_mutex_t *restrict mutex, + const pthread_mutexattr_t *restrict attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutex_init, int, + (pthread_mutex_t *restrict mutex, + const pthread_mutexattr_t *restrict attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_mutex_init, int, + (pthread_mutex_t *restrict mutex, + const pthread_mutexattr_t *restrict attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutex_init); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutex_init +# if HAVE_RAW_DECL_PTHREAD_MUTEX_INIT +_GL_WARN_ON_USE (pthread_mutex_init, "pthread_mutex_init is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutexattr_init +# define pthread_mutexattr_init rpl_pthread_mutexattr_init +# endif +_GL_FUNCDECL_RPL (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutexattr_init); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutexattr_init +# if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_INIT +_GL_WARN_ON_USE (pthread_mutexattr_init, "pthread_mutexattr_init is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutexattr_gettype +# define pthread_mutexattr_gettype rpl_pthread_mutexattr_gettype +# endif +_GL_FUNCDECL_RPL (pthread_mutexattr_gettype, int, + (const pthread_mutexattr_t *restrict attr, + int *restrict typep), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (pthread_mutexattr_gettype, int, + (const pthread_mutexattr_t *restrict attr, + int *restrict typep)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutexattr_gettype, int, + (const pthread_mutexattr_t *restrict attr, + int *restrict typep), + _GL_ARG_NONNULL ((1, 2))); +# endif +/* Need to cast, because on FreeBSD the first parameter is + pthread_mutexattr_t *attr. */ +_GL_CXXALIAS_SYS_CAST (pthread_mutexattr_gettype, int, + (const pthread_mutexattr_t *restrict attr, + int *restrict typep)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutexattr_gettype); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutexattr_gettype +# if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_GETTYPE +_GL_WARN_ON_USE (pthread_mutexattr_gettype, "pthread_mutexattr_gettype is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutexattr_settype +# define pthread_mutexattr_settype rpl_pthread_mutexattr_settype +# endif +_GL_FUNCDECL_RPL (pthread_mutexattr_settype, int, + (pthread_mutexattr_t *attr, int type), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_mutexattr_settype, int, + (pthread_mutexattr_t *attr, int type)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutexattr_settype, int, + (pthread_mutexattr_t *attr, int type), _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_mutexattr_settype, int, + (pthread_mutexattr_t *attr, int type)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutexattr_settype); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutexattr_settype +# if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_SETTYPE +_GL_WARN_ON_USE (pthread_mutexattr_settype, "pthread_mutexattr_settype is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutexattr_getrobust +# define pthread_mutexattr_getrobust rpl_pthread_mutexattr_getrobust +# endif +_GL_FUNCDECL_RPL (pthread_mutexattr_getrobust, int, + (const pthread_mutexattr_t *restrict attr, + int *restrict robustp), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (pthread_mutexattr_getrobust, int, + (const pthread_mutexattr_t *restrict attr, + int *restrict robustp)); +# else +# if !0 +_GL_FUNCDECL_SYS (pthread_mutexattr_getrobust, int, + (const pthread_mutexattr_t *restrict attr, + int *restrict robustp), + _GL_ARG_NONNULL ((1, 2))); +# endif +/* Need to cast, because on FreeBSD the first parameter is + pthread_mutexattr_t *attr. */ +_GL_CXXALIAS_SYS_CAST (pthread_mutexattr_getrobust, int, + (const pthread_mutexattr_t *restrict attr, + int *restrict robustp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutexattr_getrobust); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutexattr_getrobust +# if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_GETROBUST +_GL_WARN_ON_USE (pthread_mutexattr_getrobust, "pthread_mutexattr_getrobust is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutexattr_setrobust +# define pthread_mutexattr_setrobust rpl_pthread_mutexattr_setrobust +# endif +_GL_FUNCDECL_RPL (pthread_mutexattr_setrobust, int, + (pthread_mutexattr_t *attr, int robust), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_mutexattr_setrobust, int, + (pthread_mutexattr_t *attr, int robust)); +# else +# if !0 +_GL_FUNCDECL_SYS (pthread_mutexattr_setrobust, int, + (pthread_mutexattr_t *attr, int robust), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_mutexattr_setrobust, int, + (pthread_mutexattr_t *attr, int robust)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutexattr_setrobust); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutexattr_setrobust +# if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_SETROBUST +_GL_WARN_ON_USE (pthread_mutexattr_setrobust, "pthread_mutexattr_setrobust is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutexattr_destroy +# define pthread_mutexattr_destroy rpl_pthread_mutexattr_destroy +# endif +_GL_FUNCDECL_RPL (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutexattr_destroy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutexattr_destroy +# if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_DESTROY +_GL_WARN_ON_USE (pthread_mutexattr_destroy, "pthread_mutexattr_destroy is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutex_lock +# define pthread_mutex_lock rpl_pthread_mutex_lock +# endif +_GL_FUNCDECL_RPL (pthread_mutex_lock, int, (pthread_mutex_t *mutex), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_mutex_lock, int, (pthread_mutex_t *mutex)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutex_lock, int, (pthread_mutex_t *mutex), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_mutex_lock, int, (pthread_mutex_t *mutex)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutex_lock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutex_lock +# if HAVE_RAW_DECL_PTHREAD_MUTEX_LOCK +_GL_WARN_ON_USE (pthread_mutex_lock, "pthread_mutex_lock is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutex_trylock +# define pthread_mutex_trylock rpl_pthread_mutex_trylock +# endif +_GL_FUNCDECL_RPL (pthread_mutex_trylock, int, (pthread_mutex_t *mutex), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_mutex_trylock, int, (pthread_mutex_t *mutex)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutex_trylock, int, (pthread_mutex_t *mutex), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_mutex_trylock, int, (pthread_mutex_t *mutex)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutex_trylock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutex_trylock +# if HAVE_RAW_DECL_PTHREAD_MUTEX_TRYLOCK +_GL_WARN_ON_USE (pthread_mutex_trylock, "pthread_mutex_trylock is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutex_timedlock +# define pthread_mutex_timedlock rpl_pthread_mutex_timedlock +# endif +_GL_FUNCDECL_RPL (pthread_mutex_timedlock, int, + (pthread_mutex_t *restrict mutex, + const struct timespec *restrict abstime), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (pthread_mutex_timedlock, int, + (pthread_mutex_t *restrict mutex, + const struct timespec *restrict abstime)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutex_timedlock, int, + (pthread_mutex_t *restrict mutex, + const struct timespec *restrict abstime), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (pthread_mutex_timedlock, int, + (pthread_mutex_t *restrict mutex, + const struct timespec *restrict abstime)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutex_timedlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutex_timedlock +# if HAVE_RAW_DECL_PTHREAD_MUTEX_TIMEDLOCK +_GL_WARN_ON_USE (pthread_mutex_timedlock, "pthread_mutex_timedlock is not portable - " + "use gnulib module pthread_mutex_timedlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutex_unlock +# define pthread_mutex_unlock rpl_pthread_mutex_unlock +# endif +_GL_FUNCDECL_RPL (pthread_mutex_unlock, int, (pthread_mutex_t *mutex), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_mutex_unlock, int, (pthread_mutex_t *mutex)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutex_unlock, int, (pthread_mutex_t *mutex), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_mutex_unlock, int, (pthread_mutex_t *mutex)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutex_unlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutex_unlock +# if HAVE_RAW_DECL_PTHREAD_MUTEX_UNLOCK +_GL_WARN_ON_USE (pthread_mutex_unlock, "pthread_mutex_unlock is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_mutex_destroy +# define pthread_mutex_destroy rpl_pthread_mutex_destroy +# endif +_GL_FUNCDECL_RPL (pthread_mutex_destroy, int, (pthread_mutex_t *mutex), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_mutex_destroy, int, (pthread_mutex_t *mutex)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_mutex_destroy, int, (pthread_mutex_t *mutex), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_mutex_destroy, int, (pthread_mutex_t *mutex)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_mutex_destroy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_mutex_destroy +# if HAVE_RAW_DECL_PTHREAD_MUTEX_DESTROY +_GL_WARN_ON_USE (pthread_mutex_destroy, "pthread_mutex_destroy is not portable - " + "use gnulib module pthread-mutex for portability"); +# endif +#endif + +/* =========== Read-write lock functions =========== */ + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlock_init +# define pthread_rwlock_init rpl_pthread_rwlock_init +# endif +_GL_FUNCDECL_RPL (pthread_rwlock_init, int, + (pthread_rwlock_t *restrict lock, + const pthread_rwlockattr_t *restrict attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_rwlock_init, int, + (pthread_rwlock_t *restrict lock, + const pthread_rwlockattr_t *restrict attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlock_init, int, + (pthread_rwlock_t *restrict lock, + const pthread_rwlockattr_t *restrict attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlock_init, int, + (pthread_rwlock_t *restrict lock, + const pthread_rwlockattr_t *restrict attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlock_init); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlock_init +# if HAVE_RAW_DECL_PTHREAD_RWLOCK_INIT +_GL_WARN_ON_USE (pthread_rwlock_init, "pthread_rwlock_init is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlockattr_init +# define pthread_rwlockattr_init rpl_pthread_rwlockattr_init +# endif +_GL_FUNCDECL_RPL (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlockattr_init); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlockattr_init +# if HAVE_RAW_DECL_PTHREAD_RWLOCKATTR_INIT +_GL_WARN_ON_USE (pthread_rwlockattr_init, "pthread_rwlockattr_init is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlockattr_destroy +# define pthread_rwlockattr_destroy rpl_pthread_rwlockattr_destroy +# endif +_GL_FUNCDECL_RPL (pthread_rwlockattr_destroy, int, + (pthread_rwlockattr_t *attr), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_rwlockattr_destroy, int, + (pthread_rwlockattr_t *attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlockattr_destroy, int, + (pthread_rwlockattr_t *attr), _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlockattr_destroy, int, + (pthread_rwlockattr_t *attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlockattr_destroy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlockattr_destroy +# if HAVE_RAW_DECL_PTHREAD_RWLOCKATTR_DESTROY +_GL_WARN_ON_USE (pthread_rwlockattr_destroy, "pthread_rwlockattr_destroy is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlock_rdlock +# define pthread_rwlock_rdlock rpl_pthread_rwlock_rdlock +# endif +_GL_FUNCDECL_RPL (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlock_rdlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlock_rdlock +# if HAVE_RAW_DECL_PTHREAD_RWLOCK_RDLOCK +_GL_WARN_ON_USE (pthread_rwlock_rdlock, "pthread_rwlock_rdlock is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlock_wrlock +# define pthread_rwlock_wrlock rpl_pthread_rwlock_wrlock +# endif +_GL_FUNCDECL_RPL (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlock_wrlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlock_wrlock +# if HAVE_RAW_DECL_PTHREAD_RWLOCK_WRLOCK +_GL_WARN_ON_USE (pthread_rwlock_wrlock, "pthread_rwlock_wrlock is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlock_tryrdlock +# define pthread_rwlock_tryrdlock rpl_pthread_rwlock_tryrdlock +# endif +_GL_FUNCDECL_RPL (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlock_tryrdlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlock_tryrdlock +# if HAVE_RAW_DECL_PTHREAD_RWLOCK_TRYRDLOCK +_GL_WARN_ON_USE (pthread_rwlock_tryrdlock, "pthread_rwlock_tryrdlock is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlock_trywrlock +# define pthread_rwlock_trywrlock rpl_pthread_rwlock_trywrlock +# endif +_GL_FUNCDECL_RPL (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlock_trywrlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlock_trywrlock +# if HAVE_RAW_DECL_PTHREAD_RWLOCK_TRYWRLOCK +_GL_WARN_ON_USE (pthread_rwlock_trywrlock, "pthread_rwlock_trywrlock is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlock_timedrdlock +# define pthread_rwlock_timedrdlock rpl_pthread_rwlock_timedrdlock +# endif +_GL_FUNCDECL_RPL (pthread_rwlock_timedrdlock, int, + (pthread_rwlock_t *restrict lock, + const struct timespec *restrict abstime), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (pthread_rwlock_timedrdlock, int, + (pthread_rwlock_t *restrict lock, + const struct timespec *restrict abstime)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlock_timedrdlock, int, + (pthread_rwlock_t *restrict lock, + const struct timespec *restrict abstime), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlock_timedrdlock, int, + (pthread_rwlock_t *restrict lock, + const struct timespec *restrict abstime)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlock_timedrdlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlock_timedrdlock +# if HAVE_RAW_DECL_PTHREAD_RWLOCK_TIMEDRDLOCK +_GL_WARN_ON_USE (pthread_rwlock_timedrdlock, "pthread_rwlock_timedrdlock is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlock_timedwrlock +# define pthread_rwlock_timedwrlock rpl_pthread_rwlock_timedwrlock +# endif +_GL_FUNCDECL_RPL (pthread_rwlock_timedwrlock, int, + (pthread_rwlock_t *restrict lock, + const struct timespec *restrict abstime), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (pthread_rwlock_timedwrlock, int, + (pthread_rwlock_t *restrict lock, + const struct timespec *restrict abstime)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlock_timedwrlock, int, + (pthread_rwlock_t *restrict lock, + const struct timespec *restrict abstime), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlock_timedwrlock, int, + (pthread_rwlock_t *restrict lock, + const struct timespec *restrict abstime)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlock_timedwrlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlock_timedwrlock +# if HAVE_RAW_DECL_PTHREAD_RWLOCK_TIMEDWRLOCK +_GL_WARN_ON_USE (pthread_rwlock_timedwrlock, "pthread_rwlock_timedwrlock is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlock_unlock +# define pthread_rwlock_unlock rpl_pthread_rwlock_unlock +# endif +_GL_FUNCDECL_RPL (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlock_unlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlock_unlock +# if HAVE_RAW_DECL_PTHREAD_RWLOCK_UNLOCK +_GL_WARN_ON_USE (pthread_rwlock_unlock, "pthread_rwlock_unlock is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_rwlock_destroy +# define pthread_rwlock_destroy rpl_pthread_rwlock_destroy +# endif +_GL_FUNCDECL_RPL (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_rwlock_destroy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_rwlock_destroy +# if HAVE_RAW_DECL_PTHREAD_RWLOCK_DESTROY +_GL_WARN_ON_USE (pthread_rwlock_destroy, "pthread_rwlock_destroy is not portable - " + "use gnulib module pthread-rwlock for portability"); +# endif +#endif + +/* =========== Condition variable functions =========== */ + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_cond_init +# define pthread_cond_init rpl_pthread_cond_init +# endif +_GL_FUNCDECL_RPL (pthread_cond_init, int, + (pthread_cond_t *restrict cond, + const pthread_condattr_t *restrict attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_cond_init, int, + (pthread_cond_t *restrict cond, + const pthread_condattr_t *restrict attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_cond_init, int, + (pthread_cond_t *restrict cond, + const pthread_condattr_t *restrict attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_cond_init, int, + (pthread_cond_t *restrict cond, + const pthread_condattr_t *restrict attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_cond_init); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_cond_init +# if HAVE_RAW_DECL_PTHREAD_COND_INIT +_GL_WARN_ON_USE (pthread_cond_init, "pthread_cond_init is not portable - " + "use gnulib module pthread-cond for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_condattr_init +# define pthread_condattr_init rpl_pthread_condattr_init +# endif +_GL_FUNCDECL_RPL (pthread_condattr_init, int, (pthread_condattr_t *attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_condattr_init, int, (pthread_condattr_t *attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_condattr_init, int, (pthread_condattr_t *attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_condattr_init, int, (pthread_condattr_t *attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_condattr_init); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_condattr_init +# if HAVE_RAW_DECL_PTHREAD_CONDATTR_INIT +_GL_WARN_ON_USE (pthread_condattr_init, "pthread_condattr_init is not portable - " + "use gnulib module pthread-cond for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_condattr_destroy +# define pthread_condattr_destroy rpl_pthread_condattr_destroy +# endif +_GL_FUNCDECL_RPL (pthread_condattr_destroy, int, (pthread_condattr_t *attr), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_condattr_destroy, int, (pthread_condattr_t *attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_condattr_destroy, int, (pthread_condattr_t *attr), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_condattr_destroy, int, (pthread_condattr_t *attr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_condattr_destroy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_condattr_destroy +# if HAVE_RAW_DECL_PTHREAD_CONDATTR_DESTROY +_GL_WARN_ON_USE (pthread_condattr_destroy, "pthread_condattr_destroy is not portable - " + "use gnulib module pthread-cond for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_cond_wait +# define pthread_cond_wait rpl_pthread_cond_wait +# endif +_GL_FUNCDECL_RPL (pthread_cond_wait, int, + (pthread_cond_t *restrict cond, + pthread_mutex_t *restrict mutex), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (pthread_cond_wait, int, + (pthread_cond_t *restrict cond, + pthread_mutex_t *restrict mutex)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_cond_wait, int, + (pthread_cond_t *restrict cond, + pthread_mutex_t *restrict mutex), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (pthread_cond_wait, int, + (pthread_cond_t *restrict cond, + pthread_mutex_t *restrict mutex)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_cond_wait); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_cond_wait +# if HAVE_RAW_DECL_PTHREAD_COND_WAIT +_GL_WARN_ON_USE (pthread_cond_wait, "pthread_cond_wait is not portable - " + "use gnulib module pthread-cond for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_cond_timedwait +# define pthread_cond_timedwait rpl_pthread_cond_timedwait +# endif +_GL_FUNCDECL_RPL (pthread_cond_timedwait, int, + (pthread_cond_t *restrict cond, + pthread_mutex_t *restrict mutex, + const struct timespec *restrict abstime), + _GL_ARG_NONNULL ((1, 2, 3))); +_GL_CXXALIAS_RPL (pthread_cond_timedwait, int, + (pthread_cond_t *restrict cond, + pthread_mutex_t *restrict mutex, + const struct timespec *restrict abstime)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_cond_timedwait, int, + (pthread_cond_t *restrict cond, + pthread_mutex_t *restrict mutex, + const struct timespec *restrict abstime), + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (pthread_cond_timedwait, int, + (pthread_cond_t *restrict cond, + pthread_mutex_t *restrict mutex, + const struct timespec *restrict abstime)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_cond_timedwait); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_cond_timedwait +# if HAVE_RAW_DECL_PTHREAD_COND_TIMEDWAIT +_GL_WARN_ON_USE (pthread_cond_timedwait, "pthread_cond_timedwait is not portable - " + "use gnulib module pthread-cond for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_cond_signal +# define pthread_cond_signal rpl_pthread_cond_signal +# endif +_GL_FUNCDECL_RPL (pthread_cond_signal, int, (pthread_cond_t *cond), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_cond_signal, int, (pthread_cond_t *cond)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_cond_signal, int, (pthread_cond_t *cond), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_cond_signal, int, (pthread_cond_t *cond)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_cond_signal); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_cond_signal +# if HAVE_RAW_DECL_PTHREAD_COND_SIGNAL +_GL_WARN_ON_USE (pthread_cond_signal, "pthread_cond_signal is not portable - " + "use gnulib module pthread-cond for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_cond_broadcast +# define pthread_cond_broadcast rpl_pthread_cond_broadcast +# endif +_GL_FUNCDECL_RPL (pthread_cond_broadcast, int, (pthread_cond_t *cond), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_cond_broadcast, int, (pthread_cond_t *cond)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_cond_broadcast, int, (pthread_cond_t *cond), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_cond_broadcast, int, (pthread_cond_t *cond)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_cond_broadcast); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_cond_broadcast +# if HAVE_RAW_DECL_PTHREAD_COND_BROADCAST +_GL_WARN_ON_USE (pthread_cond_broadcast, "pthread_cond_broadcast is not portable - " + "use gnulib module pthread-cond for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_cond_destroy +# define pthread_cond_destroy rpl_pthread_cond_destroy +# endif +_GL_FUNCDECL_RPL (pthread_cond_destroy, int, (pthread_cond_t *cond), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_cond_destroy, int, (pthread_cond_t *cond)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_cond_destroy, int, (pthread_cond_t *cond), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_cond_destroy, int, (pthread_cond_t *cond)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_cond_destroy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_cond_destroy +# if HAVE_RAW_DECL_PTHREAD_COND_DESTROY +_GL_WARN_ON_USE (pthread_cond_destroy, "pthread_cond_destroy is not portable - " + "use gnulib module pthread-cond for portability"); +# endif +#endif + +/* =========== Thread-specific storage functions =========== */ + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_key_create +# define pthread_key_create rpl_pthread_key_create +# endif +_GL_FUNCDECL_RPL (pthread_key_create, int, + (pthread_key_t *keyp, void (*destructor) (void *)), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_key_create, int, + (pthread_key_t *keyp, void (*destructor) (void *))); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_key_create, int, + (pthread_key_t *keyp, void (*destructor) (void *)), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS_CAST (pthread_key_create, int, + (pthread_key_t *keyp, void (*destructor) (void *))); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_key_create); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_key_create +# if HAVE_RAW_DECL_PTHREAD_KEY_CREATE +_GL_WARN_ON_USE (pthread_key_create, "pthread_key_create is not portable - " + "use gnulib module pthread-tss for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_setspecific +# define pthread_setspecific rpl_pthread_setspecific +# endif +_GL_FUNCDECL_RPL (pthread_setspecific, int, + (pthread_key_t key, const void *value), ); +_GL_CXXALIAS_RPL (pthread_setspecific, int, + (pthread_key_t key, const void *value)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_setspecific, int, + (pthread_key_t key, const void *value), ); +# endif +_GL_CXXALIAS_SYS (pthread_setspecific, int, + (pthread_key_t key, const void *value)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_setspecific); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_setspecific +# if HAVE_RAW_DECL_PTHREAD_SETSPECIFIC +_GL_WARN_ON_USE (pthread_setspecific, "pthread_setspecific is not portable - " + "use gnulib module pthread-tss for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_getspecific +# define pthread_getspecific rpl_pthread_getspecific +# endif +_GL_FUNCDECL_RPL (pthread_getspecific, void *, (pthread_key_t key), ); +_GL_CXXALIAS_RPL (pthread_getspecific, void *, (pthread_key_t key)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_getspecific, void *, (pthread_key_t key), ); +# endif +_GL_CXXALIAS_SYS (pthread_getspecific, void *, (pthread_key_t key)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_getspecific); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_getspecific +# if HAVE_RAW_DECL_PTHREAD_GETSPECIFIC +_GL_WARN_ON_USE (pthread_getspecific, "pthread_getspecific is not portable - " + "use gnulib module pthread-tss for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_key_delete +# define pthread_key_delete rpl_pthread_key_delete +# endif +_GL_FUNCDECL_RPL (pthread_key_delete, int, (pthread_key_t key), ); +_GL_CXXALIAS_RPL (pthread_key_delete, int, (pthread_key_t key)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_key_delete, int, (pthread_key_t key), ); +# endif +_GL_CXXALIAS_SYS (pthread_key_delete, int, (pthread_key_t key)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_key_delete); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_key_delete +# if HAVE_RAW_DECL_PTHREAD_KEY_DELETE +_GL_WARN_ON_USE (pthread_key_delete, "pthread_key_delete is not portable - " + "use gnulib module pthread-tss for portability"); +# endif +#endif + +/* =========== Spinlock functions =========== */ + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_spin_init +# define pthread_spin_init rpl_pthread_spin_init +# endif +_GL_FUNCDECL_RPL (pthread_spin_init, int, + (pthread_spinlock_t *lock, int shared_across_processes), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_spin_init, int, + (pthread_spinlock_t *lock, int shared_across_processes)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_spin_init, int, + (pthread_spinlock_t *lock, int shared_across_processes), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_spin_init, int, + (pthread_spinlock_t *lock, int shared_across_processes)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_spin_init); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_spin_init +# if HAVE_RAW_DECL_PTHREAD_SPIN_INIT +_GL_WARN_ON_USE (pthread_spin_init, "pthread_spin_init is not portable - " + "use gnulib module pthread-spin for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_spin_lock +# define pthread_spin_lock rpl_pthread_spin_lock +# endif +_GL_FUNCDECL_RPL (pthread_spin_lock, int, (pthread_spinlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_spin_lock, int, (pthread_spinlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_spin_lock, int, (pthread_spinlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_spin_lock, int, (pthread_spinlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_spin_lock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_spin_lock +# if HAVE_RAW_DECL_PTHREAD_SPIN_LOCK +_GL_WARN_ON_USE (pthread_spin_lock, "pthread_spin_lock is not portable - " + "use gnulib module pthread-spin for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_spin_trylock +# define pthread_spin_trylock rpl_pthread_spin_trylock +# endif +_GL_FUNCDECL_RPL (pthread_spin_trylock, int, (pthread_spinlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_spin_trylock, int, (pthread_spinlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_spin_trylock, int, (pthread_spinlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_spin_trylock, int, (pthread_spinlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_spin_trylock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_spin_trylock +# if HAVE_RAW_DECL_PTHREAD_SPIN_TRYLOCK +_GL_WARN_ON_USE (pthread_spin_trylock, "pthread_spin_trylock is not portable - " + "use gnulib module pthread-spin for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_spin_unlock +# define pthread_spin_unlock rpl_pthread_spin_unlock +# endif +_GL_FUNCDECL_RPL (pthread_spin_unlock, int, (pthread_spinlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_spin_unlock, int, (pthread_spinlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_spin_unlock, int, (pthread_spinlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_spin_unlock, int, (pthread_spinlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_spin_unlock); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_spin_unlock +# if HAVE_RAW_DECL_PTHREAD_SPIN_UNLOCK +_GL_WARN_ON_USE (pthread_spin_unlock, "pthread_spin_unlock is not portable - " + "use gnulib module pthread-spin for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_spin_destroy +# define pthread_spin_destroy rpl_pthread_spin_destroy +# endif +_GL_FUNCDECL_RPL (pthread_spin_destroy, int, (pthread_spinlock_t *lock), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pthread_spin_destroy, int, (pthread_spinlock_t *lock)); +# else +# if !1 +_GL_FUNCDECL_SYS (pthread_spin_destroy, int, (pthread_spinlock_t *lock), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pthread_spin_destroy, int, (pthread_spinlock_t *lock)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_spin_destroy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_spin_destroy +# if HAVE_RAW_DECL_PTHREAD_SPIN_DESTROY +_GL_WARN_ON_USE (pthread_spin_destroy, "pthread_spin_destroy is not portable - " + "use gnulib module pthread-spin for portability"); +# endif +#endif + + +#if defined __cplusplus && defined GNULIB_NAMESPACE && !1 && defined __MINGW32__ +/* Provide the symbols required by mingw's . */ +using GNULIB_NAMESPACE::pthread_create; +using GNULIB_NAMESPACE::pthread_self; +using GNULIB_NAMESPACE::pthread_equal; +using GNULIB_NAMESPACE::pthread_detach; +using GNULIB_NAMESPACE::pthread_join; +using GNULIB_NAMESPACE::pthread_once; +using GNULIB_NAMESPACE::pthread_mutex_init; +using GNULIB_NAMESPACE::pthread_mutexattr_init; +using GNULIB_NAMESPACE::pthread_mutexattr_settype; +using GNULIB_NAMESPACE::pthread_mutexattr_destroy; +using GNULIB_NAMESPACE::pthread_mutex_lock; +using GNULIB_NAMESPACE::pthread_mutex_trylock; +using GNULIB_NAMESPACE::pthread_mutex_timedlock; +using GNULIB_NAMESPACE::pthread_mutex_unlock; +using GNULIB_NAMESPACE::pthread_mutex_destroy; +using GNULIB_NAMESPACE::pthread_cond_wait; +using GNULIB_NAMESPACE::pthread_cond_timedwait; +using GNULIB_NAMESPACE::pthread_cond_signal; +using GNULIB_NAMESPACE::pthread_cond_broadcast; +using GNULIB_NAMESPACE::pthread_cond_destroy; +using GNULIB_NAMESPACE::pthread_key_create; +using GNULIB_NAMESPACE::pthread_setspecific; +using GNULIB_NAMESPACE::pthread_getspecific; +using GNULIB_NAMESPACE::pthread_key_delete; +#endif + + +#endif /* _GL_PTHREAD_H_ */ +#endif /* _GL_PTHREAD_H_ */ +#endif diff --git a/jni/parted/lib/sched.h b/jni/parted/lib/sched.h new file mode 100755 index 0000000..19c3322 --- /dev/null +++ b/jni/parted/lib/sched.h @@ -0,0 +1,622 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_SCHED_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* This file uses #include_next of a system file that defines time_t. + For the 'year2038' module to work right, needs to have been + included before. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# if 0 +# include +# endif +# include_next +#endif + +#ifndef _GL_SCHED_H +#define _GL_SCHED_H + +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get pid_t. + This is needed on glibc 2.11 (see + glibc bug ) + and Mac OS X 10.5. */ +#include + +#ifdef __KLIBC__ +/* On OS/2 kLIBC, struct sched_param is in spawn.h. */ +# include +#endif + +#ifdef __VMS +/* On OpenVMS, struct sched_param is in . */ +# include +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +#if !1 + +# if !GNULIB_defined_struct_sched_param +struct sched_param +{ + int sched_priority; +}; +# define GNULIB_defined_struct_sched_param 1 +# endif + +#endif + +#if !(defined SCHED_FIFO && defined SCHED_RR && defined SCHED_OTHER) +# define SCHED_FIFO 1 +# define SCHED_RR 2 +# define SCHED_OTHER 0 +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sched_yield +# define sched_yield rpl_sched_yield +# endif +_GL_FUNCDECL_RPL (sched_yield, int, (void), ); +_GL_CXXALIAS_RPL (sched_yield, int, (void)); +# else +# if !1 +_GL_FUNCDECL_SYS (sched_yield, int, (void), ); +# endif +_GL_CXXALIAS_SYS (sched_yield, int, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (sched_yield); +# endif +#elif defined GNULIB_POSIXCHECK +# undef sched_yield +# if HAVE_RAW_DECL_SCHED_YIELD +_GL_WARN_ON_USE (sched_yield, "sched_yield is not portable - " + "use gnulib module sched_yield for portability"); +# endif +#endif + +#endif /* _GL_SCHED_H */ +#endif /* _GL_SCHED_H */ diff --git a/jni/parted/lib/stddef.h b/jni/parted/lib/stddef.h new file mode 100755 index 0000000..fd22366 --- /dev/null +++ b/jni/parted/lib/stddef.h @@ -0,0 +1,230 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute for POSIX 2008 , for platforms that have issues. + + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake. */ + +/* + * POSIX 2008 and ISO C 23 for platforms that have issues. + * + */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if (defined __need_wchar_t || defined __need_size_t \ + || defined __need_ptrdiff_t || defined __need_NULL \ + || defined __need_wint_t) \ + /* Avoid warning triggered by "gcc -std=gnu23 -Wsystem-headers" \ + in Fedora 40 with gcc 14.0.1. \ + . */ \ + && !0 +/* Special invocation convention inside gcc header files. In + particular, in some ancient versions of GCC blindly + redefined NULL when __need_wint_t was defined, even though wint_t + is not normally provided by . + (FIXME: It's not clear what GCC versions those were - perhaps so + ancient that we can stop worrying about this?) + Although glibc 2.26 (2017) and later do not use __need_wint_t, + for portability to macOS, Cygwin, Haiku, and older Glibc + GCC, + remember if special invocation has ever been used to obtain wint_t, + in which case we need to clean up NULL yet again. */ + +# if !(defined _GL_STDDEF_H && defined _GL_STDDEF_WINT_T) +# ifdef __need_wint_t +# define _GL_STDDEF_WINT_T +# endif +# include_next + /* On TinyCC, make sure that the macros that indicate the special invocation + convention get undefined. */ +# undef __need_wchar_t +# undef __need_size_t +# undef __need_ptrdiff_t +# undef __need_NULL +# undef __need_wint_t +# endif + +#else +/* For 0. */ +# undef __need_wchar_t +# undef __need_size_t +# undef __need_ptrdiff_t +# undef __need_NULL +# undef __need_wint_t + +/* Normal invocation convention. */ + +# ifndef _GL_STDDEF_H + +/* On AIX 7.2, with xlc in 64-bit mode, defines max_align_t to a + type with alignment 4, but 'long' has alignment 8. */ +# if defined _AIX && defined __LP64__ && !1 +# if !GNULIB_defined_max_align_t +# ifdef _MAX_ALIGN_T +/* /usr/include/stddef.h has already defined max_align_t. Override it. */ +typedef long rpl_max_align_t; +# define max_align_t rpl_max_align_t +# else +/* Prevent /usr/include/stddef.h from defining max_align_t. */ +typedef long max_align_t; +# define _MAX_ALIGN_T +# endif +# define __CLANG_MAX_ALIGN_T_DEFINED +# define GNULIB_defined_max_align_t 1 +# endif +# endif + +# if !defined _GCC_NULLPTR_T && !1 + /* Suppress unwanted nullptr_t typedef. See + . */ +# define _GCC_NULLPTR_T +# endif + +/* The include_next requires a split double-inclusion guard. */ + +# include_next + +/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ +# if (0 \ + && (!defined _GL_STDDEF_H || defined _GL_STDDEF_WINT_T)) +# undef NULL +# ifdef __cplusplus + /* ISO C++ says that the macro NULL must expand to an integer constant + expression, hence '((void *) 0)' is not allowed in C++. */ +# if __GNUG__ >= 3 + /* GNU C++ has a __null macro that behaves like an integer ('int' or + 'long') but has the same size as a pointer. Use that, to avoid + warnings. */ +# define NULL __null +# else +# define NULL 0L +# endif +# else +# define NULL ((void *) 0) +# endif +# endif + +# ifndef _GL_STDDEF_H +# define _GL_STDDEF_H + +/* This file uses _Noreturn, _GL_ATTRIBUTE_NOTHROW. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +# if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major__ >= 4 +# if __cplusplus >= 201103L +# define _GL_ATTRIBUTE_NOTHROW noexcept (true) +# else +# define _GL_ATTRIBUTE_NOTHROW throw () +# endif +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# else +# if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# endif +#endif + +/* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is + a hack in case the configure-time test was done with g++ even though + we are currently compiling with gcc. + On MSVC, max_align_t is defined only in C++ mode, after was + included. Its definition is good since it has an alignment of 8 (on x86 + and x86_64). + Similarly on OS/2 kLIBC. */ +#if (defined _MSC_VER || (defined __KLIBC__ && !defined __LIBCN__)) \ + && defined __cplusplus +# include +#else +# if ! (1 || (defined _GCC_MAX_ALIGN_T && !defined __clang__)) +# if !GNULIB_defined_max_align_t +/* On the x86, the maximum storage alignment of double, long, etc. is 4, + but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, + and the C11 standard allows this. Work around this problem by + using __alignof__ (which returns 8 for double) rather than _Alignof + (which returns 4), and align each union member accordingly. */ +# if defined __GNUC__ || (__clang_major__ >= 4) +# define _GL_STDDEF_ALIGNAS(type) \ + __attribute__ ((__aligned__ (__alignof__ (type)))) +# else +# define _GL_STDDEF_ALIGNAS(type) /* */ +# endif +typedef union +{ + char *__p _GL_STDDEF_ALIGNAS (char *); + double __d _GL_STDDEF_ALIGNAS (double); + long double __ld _GL_STDDEF_ALIGNAS (long double); + long int __i _GL_STDDEF_ALIGNAS (long int); +} rpl_max_align_t; +# define max_align_t rpl_max_align_t +# define __CLANG_MAX_ALIGN_T_DEFINED +# define GNULIB_defined_max_align_t 1 +# endif +# endif +#endif + +/* ISO C 23 § 7.21.1 The unreachable macro */ +#ifndef unreachable + +/* Code borrowed from verify.h. */ +# ifndef _GL_HAS_BUILTIN_UNREACHABLE +# if defined __clang_major__ && __clang_major__ < 5 +# define _GL_HAS_BUILTIN_UNREACHABLE 0 +# elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__) && !defined __clang__ +# define _GL_HAS_BUILTIN_UNREACHABLE 1 +# elif defined __has_builtin +# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) +# else +# define _GL_HAS_BUILTIN_UNREACHABLE 0 +# endif +# endif + +# if _GL_HAS_BUILTIN_UNREACHABLE +# define unreachable() __builtin_unreachable () +# elif 1200 <= _MSC_VER +# define unreachable() __assume (0) +# else +/* Declare abort(), without including . */ +extern +# if defined __cplusplus +"C" +# endif +_Noreturn +void abort (void) +# if defined __cplusplus && (__GLIBC__ >= 2) +_GL_ATTRIBUTE_NOTHROW +# endif +; +# define unreachable() abort () +# endif + +#endif + +# endif /* _GL_STDDEF_H */ +# endif /* _GL_STDDEF_H */ +#endif /* __need_XXX */ diff --git a/jni/parted/lib/stdint.h b/jni/parted/lib/stdint.h new file mode 100755 index 0000000..d880b09 --- /dev/null +++ b/jni/parted/lib/stdint.h @@ -0,0 +1,752 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 2001-2002, 2004-2024 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. + This file is part of gnulib. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* + * ISO C 99 for platforms that lack it. + * + */ + +#ifndef _GL_STDINT_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* When including a system file that in turn includes , + use the system , not our substitute. This avoids + problems with (for example) VMS, whose includes + . */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* On Android (Bionic libc), includes this file before + having defined 'time_t'. Therefore in this case avoid including + other system header files; just include the system's . + Ideally we should test __BIONIC__ here, but it is only defined after + has been included; hence test __ANDROID__ instead. */ +#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H +# include_next +#else + +/* Get those types that are already defined in other system include + files, so that we can "#define int8_t signed char" below without + worrying about a later system include file containing a "typedef + signed char int8_t;" that will get messed up by our macro. Our + macros should all be consistent with the system versions, except + for the "fast" types and macros, which we recommend against using + in public interfaces due to compiler differences. */ + +#if 1 +# if defined __sgi && ! defined __c99 + /* Bypass IRIX's if in C89 mode, since it merely annoys users + with "This header file is to be used only for c99 mode compilations" + diagnostics. */ +# define __STDINT_H__ +# endif + + /* Some pre-C++11 implementations need this. */ +# ifdef __cplusplus +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS 1 +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +# endif +# endif + + /* Other systems may have an incomplete or buggy . + Include it before , since any "#include " + in would reinclude us, skipping our contents because + _GL_STDINT_H is defined. + The include_next requires a split double-inclusion guard. */ +# include_next +#endif + +#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _GL_STDINT_H + +/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, + LONG_MIN, LONG_MAX, ULONG_MAX, CHAR_BIT, _GL_INTEGER_WIDTH. */ +#include + +/* Override WINT_MIN and WINT_MAX if gnulib's or overrides + wint_t. */ +#if 0 +# undef WINT_MIN +# undef WINT_MAX +# define WINT_MIN 0x0U +# define WINT_MAX 0xffffffffU +#endif + +#if ! 0 + +/* defines some of the stdint.h types as well, on glibc, + IRIX 6.5, and OpenBSD 3.8 (via ). + AIX 5.2 isn't needed and causes troubles. + Mac OS X 10.4.6 includes (which is us), but + relies on the system definitions, so include + after . */ +# if 1 && ! defined _AIX +# include +# endif + +# if 1 + /* In OpenBSD 3.8, includes , which defines + int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. + also defines intptr_t and uintptr_t. */ +# include +# elif 0 + /* Solaris 7 has the types except the *_fast*_t types, and + the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ +# include +# endif + +# if 0 && ! defined __BIT_TYPES_DEFINED__ + /* Linux libc4 >= 4.6.7 and libc5 have a that defines + int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is + included by . */ +# include +# endif + +# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Minimum and maximum values for an integer type under the usual assumption. + Return an unspecified value if BITS == 0, adding a check to pacify + picky compilers. */ + +/* These are separate macros, because if you try to merge these macros into + a single one, HP-UX cc rejects the resulting expression in constant + expressions. */ +# define _STDINT_UNSIGNED_MIN(bits, zero) \ + (zero) +# define _STDINT_SIGNED_MIN(bits, zero) \ + (~ _STDINT_MAX (1, bits, zero)) + +# define _STDINT_MAX(signed, bits, zero) \ + (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) + +#if !GNULIB_defined_stdint_types + +/* 7.18.1.1. Exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +# undef int8_t +# undef uint8_t +typedef signed char gl_int8_t; +typedef unsigned char gl_uint8_t; +# define int8_t gl_int8_t +# define uint8_t gl_uint8_t + +# undef int16_t +# undef uint16_t +typedef short int gl_int16_t; +typedef unsigned short int gl_uint16_t; +# define int16_t gl_int16_t +# define uint16_t gl_uint16_t + +# undef int32_t +# undef uint32_t +typedef int gl_int32_t; +typedef unsigned int gl_uint32_t; +# define int32_t gl_int32_t +# define uint32_t gl_uint32_t + +/* If the system defines INT64_MAX, assume int64_t works. That way, + if the underlying platform defines int64_t to be a 64-bit long long + int, the code below won't mistakenly define it to be a 64-bit long + int, which would mess up C++ name mangling. We must use #ifdef + rather than #if, to avoid an error with HP-UX 10.20 cc. */ + +# ifdef INT64_MAX +# define GL_INT64_T +# else +/* Do not undefine int64_t if gnulib is not being used with 64-bit + types, since otherwise it breaks platforms like Tandem/NSK. */ +# if LONG_MAX >> 31 >> 31 == 1 +# undef int64_t +typedef long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif defined _MSC_VER +# undef int64_t +typedef __int64 gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# else +/* Verify that 'long long' has exactly 64 bits. */ +typedef _gl_verify_int64_bits[ + _STDINT_MAX (1, sizeof (long long) * CHAR_BIT, 0ll) >> 31 >> 31 == 1 + ? 1 : -1]; +# undef int64_t +typedef long long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# endif +# endif + +# ifdef UINT64_MAX +# define GL_UINT64_T +# else +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# undef uint64_t +typedef unsigned long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif defined _MSC_VER +# undef uint64_t +typedef unsigned __int64 gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# else +/* Verify that 'unsigned long long' has exactly 64 bits. */ +typedef _gl_verify_uint64_bits[ + _STDINT_MAX (0, sizeof (unsigned long long) * CHAR_BIT, 0ull) + >> 31 >> 31 >> 1 == 1 + ? 1 : -1]; +# undef uint64_t +typedef unsigned long long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# endif +# endif + +/* Avoid collision with Solaris 2.5.1 etc. */ +# define _UINT8_T +# define _UINT32_T +# define _UINT64_T + + +/* 7.18.1.2. Minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +# undef int_least8_t +# undef uint_least8_t +# undef int_least16_t +# undef uint_least16_t +# undef int_least32_t +# undef uint_least32_t +# undef int_least64_t +# undef uint_least64_t +# define int_least8_t int8_t +# define uint_least8_t uint8_t +# define int_least16_t int16_t +# define uint_least16_t uint16_t +# define int_least32_t int32_t +# define uint_least32_t uint32_t +# ifdef GL_INT64_T +# define int_least64_t int64_t +# endif +# ifdef GL_UINT64_T +# define uint_least64_t uint64_t +# endif + +/* 7.18.1.3. Fastest minimum-width integer types */ + +/* Note: Other substitutes may define these types differently. + It is not recommended to use these types in public header files. */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. The following code normally + uses types consistent with glibc, as that lessens the chance of + incompatibility with older GNU hosts. */ + +# undef int_fast8_t +# undef uint_fast8_t +# undef int_fast16_t +# undef uint_fast16_t +# undef int_fast32_t +# undef uint_fast32_t +# undef int_fast64_t +# undef uint_fast64_t +typedef signed char gl_int_fast8_t; +typedef unsigned char gl_uint_fast8_t; + +# ifdef __sun +/* Define types compatible with SunOS 5.10, so that code compiled under + earlier SunOS versions works with code compiled under SunOS 5.10. */ +typedef int gl_int_fast32_t; +typedef unsigned int gl_uint_fast32_t; +# else +typedef long int gl_int_fast32_t; +typedef unsigned long int gl_uint_fast32_t; +# endif +typedef gl_int_fast32_t gl_int_fast16_t; +typedef gl_uint_fast32_t gl_uint_fast16_t; + +# define int_fast8_t gl_int_fast8_t +# define uint_fast8_t gl_uint_fast8_t +# define int_fast16_t gl_int_fast16_t +# define uint_fast16_t gl_uint_fast16_t +# define int_fast32_t gl_int_fast32_t +# define uint_fast32_t gl_uint_fast32_t +# ifdef GL_INT64_T +# define int_fast64_t int64_t +# endif +# ifdef GL_UINT64_T +# define uint_fast64_t uint64_t +# endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ + +/* kLIBC's defines _INTPTR_T_DECLARED and needs its own + definitions of intptr_t and uintptr_t (which use int and unsigned) + to avoid clashes with declarations of system functions like sbrk. + Similarly, MinGW WSL-5.4.1 needs its own intptr_t and + uintptr_t to avoid conflicting declarations of system functions like + _findclose in . */ +# if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \ + || (defined __INTPTR_WIDTH__ \ + && __INTPTR_WIDTH__ != (defined _WIN64 ? LLONG_WIDTH : LONG_WIDTH)) \ + || defined __MINGW32__) +# undef intptr_t +# undef uintptr_t +# ifdef _WIN64 +typedef long long int gl_intptr_t; +typedef unsigned long long int gl_uintptr_t; +# else +typedef long int gl_intptr_t; +typedef unsigned long int gl_uintptr_t; +# endif +# define intptr_t gl_intptr_t +# define uintptr_t gl_uintptr_t +# endif + +/* 7.18.1.5. Greatest-width integer types */ + +/* Note: These types are compiler dependent. It may be unwise to use them in + public header files. */ + +/* If the system defines INTMAX_MAX, assume that intmax_t works, and + similarly for UINTMAX_MAX and uintmax_t. This avoids problems with + assuming one type where another is used by the system. */ + +# ifndef INTMAX_MAX +# undef INTMAX_C +# undef intmax_t +# if LONG_MAX >> 30 == 1 +typedef long long int gl_intmax_t; +# define intmax_t gl_intmax_t +# elif defined GL_INT64_T +# define intmax_t int64_t +# else +typedef long int gl_intmax_t; +# define intmax_t gl_intmax_t +# endif +# endif + +# ifndef UINTMAX_MAX +# undef UINTMAX_C +# undef uintmax_t +# if ULONG_MAX >> 31 == 1 +typedef unsigned long long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# elif defined GL_UINT64_T +# define uintmax_t uint64_t +# else +typedef unsigned long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# endif +# endif + +/* Verify that intmax_t and uintmax_t have the same size. Too much code + breaks if this is not the case. If this check fails, the reason is likely + to be found in the autoconf macros. */ +typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) + ? 1 : -1]; + +# define GNULIB_defined_stdint_types 1 +# endif /* !GNULIB_defined_stdint_types */ + +/* 7.18.2. Limits of specified-width integer types */ + +/* 7.18.2.1. Limits of exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +# undef INT8_MIN +# undef INT8_MAX +# undef UINT8_MAX +# define INT8_MIN (~ INT8_MAX) +# define INT8_MAX 127 +# define UINT8_MAX 255 + +# undef INT16_MIN +# undef INT16_MAX +# undef UINT16_MAX +# define INT16_MIN (~ INT16_MAX) +# define INT16_MAX 32767 +# define UINT16_MAX 65535 + +# undef INT32_MIN +# undef INT32_MAX +# undef UINT32_MAX +# define INT32_MIN (~ INT32_MAX) +# define INT32_MAX 2147483647 +# define UINT32_MAX 4294967295U + +# if defined GL_INT64_T && ! defined INT64_MAX +/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 + evaluates the latter incorrectly in preprocessor expressions. */ +# define INT64_MIN (- INTMAX_C (1) << 63) +# define INT64_MAX INTMAX_C (9223372036854775807) +# endif + +# if defined GL_UINT64_T && ! defined UINT64_MAX +# define UINT64_MAX UINTMAX_C (18446744073709551615) +# endif + +/* 7.18.2.2. Limits of minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +# undef INT_LEAST8_MIN +# undef INT_LEAST8_MAX +# undef UINT_LEAST8_MAX +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST8_MAX INT8_MAX +# define UINT_LEAST8_MAX UINT8_MAX + +# undef INT_LEAST16_MIN +# undef INT_LEAST16_MAX +# undef UINT_LEAST16_MAX +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST16_MAX INT16_MAX +# define UINT_LEAST16_MAX UINT16_MAX + +# undef INT_LEAST32_MIN +# undef INT_LEAST32_MAX +# undef UINT_LEAST32_MAX +# define INT_LEAST32_MIN INT32_MIN +# define INT_LEAST32_MAX INT32_MAX +# define UINT_LEAST32_MAX UINT32_MAX + +# undef INT_LEAST64_MIN +# undef INT_LEAST64_MAX +# ifdef GL_INT64_T +# define INT_LEAST64_MIN INT64_MIN +# define INT_LEAST64_MAX INT64_MAX +# endif + +# undef UINT_LEAST64_MAX +# ifdef GL_UINT64_T +# define UINT_LEAST64_MAX UINT64_MAX +# endif + +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. */ + +# undef INT_FAST8_MIN +# undef INT_FAST8_MAX +# undef UINT_FAST8_MAX +# define INT_FAST8_MIN SCHAR_MIN +# define INT_FAST8_MAX SCHAR_MAX +# define UINT_FAST8_MAX UCHAR_MAX + +# undef INT_FAST16_MIN +# undef INT_FAST16_MAX +# undef UINT_FAST16_MAX +# define INT_FAST16_MIN INT_FAST32_MIN +# define INT_FAST16_MAX INT_FAST32_MAX +# define UINT_FAST16_MAX UINT_FAST32_MAX + +# undef INT_FAST32_MIN +# undef INT_FAST32_MAX +# undef UINT_FAST32_MAX +# ifdef __sun +# define INT_FAST32_MIN INT_MIN +# define INT_FAST32_MAX INT_MAX +# define UINT_FAST32_MAX UINT_MAX +# else +# define INT_FAST32_MIN LONG_MIN +# define INT_FAST32_MAX LONG_MAX +# define UINT_FAST32_MAX ULONG_MAX +# endif + +# undef INT_FAST64_MIN +# undef INT_FAST64_MAX +# ifdef GL_INT64_T +# define INT_FAST64_MIN INT64_MIN +# define INT_FAST64_MAX INT64_MAX +# endif + +# undef UINT_FAST64_MAX +# ifdef GL_UINT64_T +# define UINT_FAST64_MAX UINT64_MAX +# endif + +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +# undef INTPTR_MIN +# undef INTPTR_MAX +# undef UINTPTR_MAX +# ifdef _WIN64 +# define INTPTR_MIN LLONG_MIN +# define INTPTR_MAX LLONG_MAX +# define UINTPTR_MAX ULLONG_MAX +# else +# define INTPTR_MIN LONG_MIN +# define INTPTR_MAX LONG_MAX +# define UINTPTR_MAX ULONG_MAX +# endif + +/* 7.18.2.5. Limits of greatest-width integer types */ + +# ifndef INTMAX_MAX +# undef INTMAX_MIN +# ifdef INT64_MAX +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +# else +# define INTMAX_MIN INT32_MIN +# define INTMAX_MAX INT32_MAX +# endif +# endif + +# ifndef UINTMAX_MAX +# ifdef UINT64_MAX +# define UINTMAX_MAX UINT64_MAX +# else +# define UINTMAX_MAX UINT32_MAX +# endif +# endif + +/* 7.18.3. Limits of other integer types */ + +/* ptrdiff_t limits */ +# undef PTRDIFF_MIN +# undef PTRDIFF_MAX +# if 0 +# ifdef _LP64 +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) +# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) +# else +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) +# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) +# endif +# else +# define PTRDIFF_MIN \ + _STDINT_SIGNED_MIN (64, 0l) +# define PTRDIFF_MAX \ + _STDINT_MAX (1, 64, 0l) +# endif + +/* sig_atomic_t limits */ +# undef SIG_ATOMIC_MIN +# undef SIG_ATOMIC_MAX +# if 1 +# define SIG_ATOMIC_MIN \ + _STDINT_SIGNED_MIN (32, 0) +# else +# define SIG_ATOMIC_MIN \ + _STDINT_UNSIGNED_MIN (32, 0) +# endif +# define SIG_ATOMIC_MAX \ + _STDINT_MAX (1, 32, \ + 0) + + +/* size_t limit */ +# undef SIZE_MAX +# if 0 +# ifdef _LP64 +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# else +# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) +# endif +# else +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# endif + +/* wchar_t limits */ +/* Get WCHAR_MIN, WCHAR_MAX. + This include is not on the top, above, because on OSF/1 4.0 we have a + sequence of nested includes + -> -> -> , and the latter includes + and assumes its types are already defined. */ +# if 1 && ! (defined WCHAR_MIN && defined WCHAR_MAX) +# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# include +# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# endif +# undef WCHAR_MIN +# undef WCHAR_MAX +# if 0 +# define WCHAR_MIN \ + _STDINT_SIGNED_MIN (32, 0u) +# else +# define WCHAR_MIN \ + _STDINT_UNSIGNED_MIN (32, 0u) +# endif +# define WCHAR_MAX \ + _STDINT_MAX (0, 32, 0u) + +/* wint_t limits */ +/* If gnulib's or overrides wint_t, u is not + accurate, therefore use the definitions from above. */ +# if !0 +# undef WINT_MIN +# undef WINT_MAX +# if 0 +# define WINT_MIN \ + _STDINT_SIGNED_MIN (32, 0u) +# else +# define WINT_MIN \ + _STDINT_UNSIGNED_MIN (32, 0u) +# endif +# define WINT_MAX \ + _STDINT_MAX (0, 32, 0u) +# endif + +/* 7.18.4. Macros for integer constants */ + +/* 7.18.4.1. Macros for minimum-width integer constants */ +/* According to ISO C 99 Technical Corrigendum 1 */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ + +# undef INT8_C +# undef UINT8_C +# define INT8_C(x) x +# define UINT8_C(x) x + +# undef INT16_C +# undef UINT16_C +# define INT16_C(x) x +# define UINT16_C(x) x + +# undef INT32_C +# undef UINT32_C +# define INT32_C(x) x +# define UINT32_C(x) x ## U + +# undef INT64_C +# undef UINT64_C +# if LONG_MAX >> 31 >> 31 == 1 +# define INT64_C(x) x##L +# elif defined _MSC_VER +# define INT64_C(x) x##i64 +# else +# define INT64_C(x) x##LL +# endif +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# define UINT64_C(x) x##UL +# elif defined _MSC_VER +# define UINT64_C(x) x##ui64 +# else +# define UINT64_C(x) x##ULL +# endif + +/* 7.18.4.2. Macros for greatest-width integer constants */ + +# ifndef INTMAX_C +# if LONG_MAX >> 30 == 1 +# define INTMAX_C(x) x##LL +# elif defined GL_INT64_T +# define INTMAX_C(x) INT64_C(x) +# else +# define INTMAX_C(x) x##L +# endif +# endif + +# ifndef UINTMAX_C +# if ULONG_MAX >> 31 == 1 +# define UINTMAX_C(x) x##ULL +# elif defined GL_UINT64_T +# define UINTMAX_C(x) UINT64_C(x) +# else +# define UINTMAX_C(x) x##UL +# endif +# endif + +#endif /* !0 */ + +/* Macros specified by ISO/IEC TS 18661-1:2014. */ + +#if (!defined UINTMAX_WIDTH \ + && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) +# ifdef INT8_MAX +# define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) +# endif +# ifdef UINT8_MAX +# define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) +# endif +# ifdef INT16_MAX +# define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) +# endif +# ifdef UINT16_MAX +# define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) +# endif +# ifdef INT32_MAX +# define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) +# endif +# ifdef UINT32_MAX +# define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) +# endif +# ifdef INT64_MAX +# define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) +# endif +# ifdef UINT64_MAX +# define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) +# endif +# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) +# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) +# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) +# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) +# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) +# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) +# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) +# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) +# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) +# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) +# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) +# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) +# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) +# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) +# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) +# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) +# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) +# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) +# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) +# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) +# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) +# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) +# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) +# ifdef WINT_MAX +# define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) +# endif +# ifdef SIG_ATOMIC_MAX +# define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) +# endif +#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ + +#endif /* _GL_STDINT_H */ +#endif /* !(defined __ANDROID__ && ...) */ +#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/jni/parted/lib/stdio.h b/jni/parted/lib/stdio.h new file mode 100755 index 0000000..947a819 --- /dev/null +++ b/jni/parted/lib/stdio.h @@ -0,0 +1,2651 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 2004, 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H +/* Special invocation convention: + - Inside glibc header files. + - On OSF/1 5.1 we have a sequence of nested includes + -> -> -> -> + -> -> -> . + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDIO_H + +/* Suppress macOS deprecation warnings for sprintf and vsprintf. */ +#if (defined __APPLE__ && defined __MACH__) && !defined _POSIX_C_SOURCE +# ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +# include +# endif +# if (defined MAC_OS_X_VERSION_MIN_REQUIRED \ + && 130000 <= MAC_OS_X_VERSION_MIN_REQUIRED) +# define _POSIX_C_SOURCE 200809L +# define _GL_DEFINED__POSIX_C_SOURCE +# endif +#endif + +#define _GL_ALREADY_INCLUDING_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#undef _GL_ALREADY_INCLUDING_STDIO_H + +#ifdef _GL_DEFINED__POSIX_C_SOURCE +# undef _GL_DEFINED__POSIX_C_SOURCE +# undef _POSIX_C_SOURCE +#endif + +#ifndef _GL_STDIO_H +#define _GL_STDIO_H + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT, + _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOTHROW, + GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get va_list. Needed on many systems, including glibc 2.8. */ +#include + +#include + +/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 + and eglibc 2.11.2. + May also define off_t to a 64-bit type on native Windows. + Also defines off64_t on macOS, NetBSD, OpenBSD, MSVC, Cygwin, Haiku. */ +#include + +/* Solaris 10 and NetBSD 7.0 declare renameat in , not in . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ + && ! defined __GLIBC__ +# include +#endif + +/* Android 4.3 declares renameat in , not in . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ + && ! defined __GLIBC__ +# include +#endif + +/* MSVC declares 'perror' in , not in . We must include + it before we #define perror rpl_perror. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (IN_PARTED_GNULIB_TESTS || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include +#endif + +/* MSVC declares 'remove' in , not in . We must include + it before we #define remove rpl_remove. */ +/* MSVC declares 'rename' in , not in . We must include + it before we #define rename rpl_rename. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || 0 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include +#endif + + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 && !defined __clang__ +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#ifndef _GL_ATTRIBUTE_FORMAT +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || defined __clang__ +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +# else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +# endif +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +# if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major__ >= 4 +# if __cplusplus >= 201103L +# define _GL_ATTRIBUTE_NOTHROW noexcept (true) +# else +# define _GL_ATTRIBUTE_NOTHROW throw () +# endif +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# else +# if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# endif +#endif + +/* An __attribute__ __format__ specifier for a function that takes a format + string and arguments, where the format string directives are the ones + standardized by ISO C99 and POSIX. + _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD */ +/* __gnu_printf__ is supported in GCC >= 4.4. */ +#if (__GNUC__ + (__GNUC_MINOR__ >= 4) > 4) && !defined __clang__ +# define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __gnu_printf__ +#else +# define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __printf__ +#endif + +/* An __attribute__ __format__ specifier for a function that takes a format + string and arguments, where the format string directives are the ones of the + system printf(), rather than the ones standardized by ISO C99 and POSIX. + _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM */ +/* On mingw, Gnulib sets __USE_MINGW_ANSI_STDIO in order to get closer to + the standards. The macro GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU indicates + whether this change is effective. On older mingw, it is not. */ +#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU +# define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD +#else +# define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM __printf__ +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, formatstring_parameter, first_argument)) + +/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD, + except that it indicates to GCC that the supported format string directives + are the ones of the system printf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, formatstring_parameter, first_argument)) + +/* _GL_ATTRIBUTE_FORMAT_SCANF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, + except that it indicates to GCC that the supported format string directives + are the ones of the system scanf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Macros for stringification. */ +#define _GL_STDIO_STRINGIZE(token) #token +#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) + +/* When also using extern inline, suppress the use of static inline in + standard headers of problematic Apple configurations, as Libc at + least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., + . + Perhaps Apple will fix this some day. */ +#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ + && defined __GNUC__ && defined __STDC__) +# undef putc_unlocked +#endif + + +/* Maximum number of characters produced by printing a NaN value. */ +#ifndef _PRINTF_NAN_LEN_MAX +# if defined __FreeBSD__ || defined __DragonFly__ \ + || defined __NetBSD__ \ + || (defined __APPLE__ && defined __MACH__) +/* On BSD systems, a NaN value prints as just "nan", without a sign. */ +# define _PRINTF_NAN_LEN_MAX 3 +# elif (__GLIBC__ >= 2) || MUSL_LIBC || defined __OpenBSD__ || defined __sun || defined __CYGWIN__ +/* glibc, musl libc, OpenBSD, Solaris libc, and Cygwin produce "[-]nan". */ +# define _PRINTF_NAN_LEN_MAX 4 +# elif defined _AIX +/* AIX produces "[-]NaNQ". */ +# define _PRINTF_NAN_LEN_MAX 5 +# elif defined _WIN32 && !defined __CYGWIN__ +/* On native Windows, the output can be: + - with MSVC ucrt: "[-]nan" or "[-]nan(ind)" or "[-]nan(snan)", + - with mingw: "[-]1.#IND" or "[-]1.#QNAN". */ +# define _PRINTF_NAN_LEN_MAX 10 +# elif defined __sgi +/* On IRIX, the output typically is "[-]nan0xNNNNNNNN" with 8 hexadecimal + digits. */ +# define _PRINTF_NAN_LEN_MAX 14 +# else +/* We don't know, but 32 should be a safe maximum. */ +# define _PRINTF_NAN_LEN_MAX 32 +# endif +#endif + + +#if 0 +/* Prints formatted output to file descriptor FD. + Returns the number of bytes written to the file descriptor. Upon + failure, returns -1 with errno set. + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure codes are ENOMEM + and the possible failure codes from write(), excluding EINTR. */ +_GL_FUNCDECL_SYS (dzprintf, off64_t, + (int fd, const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_SYS (dzprintf, off64_t, + (int fd, const char *restrict format, ...)); +#endif + +#if 0 +/* Prints formatted output to file descriptor FD. + Returns the number of bytes written to the file descriptor. Upon + failure, returns a negative value. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dprintf rpl_dprintf +# endif +_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *restrict format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (dprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef dprintf +# if HAVE_RAW_DECL_DPRINTF +_GL_WARN_ON_USE (dprintf, "dprintf is unportable - " + "use gnulib module dprintf for portability"); +# endif +#endif + +#if 0 +/* Close STREAM and its underlying file descriptor. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fclose rpl_fclose +# endif +_GL_FUNCDECL_RPL (fclose, int, (FILE *stream), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fclose); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fclose +/* Assume fclose is always declared. */ +_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " + "use gnulib module fclose for portable POSIX compliance"); +#endif + +#if 1 +/* On native Windows, map 'fcloseall' to '_fcloseall', so that -loldnames is + not required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::fcloseall on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fcloseall +# define fcloseall _fcloseall +# endif +_GL_CXXALIAS_MDA (fcloseall, int, (void)); +# else +# if 0 +# if defined __FreeBSD__ || defined __DragonFly__ +_GL_CXXALIAS_SYS (fcloseall, void, (void)); +# else +_GL_CXXALIAS_SYS (fcloseall, int, (void)); +# endif +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 0 +_GL_CXXALIASWARN (fcloseall); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen rpl_fdopen +# endif +_GL_FUNCDECL_RPL (fdopen, FILE *, + (int fd, const char *mode), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen _fdopen +# endif +_GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); +# else +# if __GNUC__ >= 11 && !defined __clang__ +/* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (fdopen, FILE *, + (int fd, const char *mode), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC + _GL_ATTRIBUTE_NODISCARD) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (fdopen, FILE *, + (int fd, const char *mode), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC + _GL_ATTRIBUTE_NODISCARD); +# endif +# endif +_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); +# endif +_GL_CXXALIASWARN (fdopen); +#else +# if 0 && (__GNUC__ >= 11 && !defined __clang__) && !defined fdopen +/* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (fdopen, FILE *, + (int fd, const char *mode), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (fdopen, FILE *, + (int fd, const char *mode), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef fdopen +/* Assume fdopen is always declared. */ +_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fdopen for portability"); +# elif 1 +/* On native Windows, map 'fdopen' to '_fdopen', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::fdopen always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen _fdopen +# endif +_GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); +# else +_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); +# endif +_GL_CXXALIASWARN (fdopen); +# endif +#endif + +#if 0 +/* Flush all pending data on STREAM according to POSIX rules. Both + output and seekable input streams are supported. + Note! LOSS OF DATA can occur if fflush is applied on an input stream + that is _not_seekable_ or on an update stream that is _not_seekable_ + and in which the most recent operation was input. Seekability can + be tested with lseek(fileno(fp),0,SEEK_CUR). */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fflush rpl_fflush +# endif +_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream), ); +_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); +# else +_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fflush); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fflush +/* Assume fflush is always declared. */ +_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " + "use gnulib module fflush for portable POSIX compliance"); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgetc +# define fgetc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fgetc); +# endif +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgets +# define fgets rpl_fgets +# endif +_GL_FUNCDECL_RPL (fgets, char *, + (char *restrict s, int n, FILE *restrict stream), + _GL_ARG_NONNULL ((1, 3)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (fgets, char *, + (char *restrict s, int n, FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fgets, char *, + (char *restrict s, int n, FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fgets); +# endif +#endif + +#if 1 +/* On native Windows, map 'fileno' to '_fileno', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::fileno always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fileno +# define fileno _fileno +# endif +_GL_CXXALIAS_MDA (fileno, int, (FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fileno, int, (FILE *restrict stream)); +# endif +_GL_CXXALIASWARN (fileno); +#endif + +#if 0 +# if (0 && 0) \ + || (0 && 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fopen +# define fopen rpl_fopen +# endif +_GL_FUNCDECL_RPL (fopen, FILE *, + (const char *restrict filename, const char *restrict mode), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (fopen, FILE *, + (const char *restrict filename, const char *restrict mode)); +# else +# if __GNUC__ >= 11 && !defined __clang__ +/* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (fopen, FILE *, + (const char *restrict filename, const char *restrict mode), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (fopen, FILE *, + (const char *restrict filename, const char *restrict mode)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fopen); +# endif +#else +# if 0 && (__GNUC__ >= 11 && !defined __clang__) && !defined fopen +/* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (fopen, FILE *, + (const char *restrict filename, const char *restrict mode), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +# endif +# if defined GNULIB_POSIXCHECK +# undef fopen +/* Assume fopen is always declared. */ +_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fopen for portability"); +# endif +#endif + +#if 0 +/* Prints formatted output to stream FP. + Returns the number of bytes written to the stream. Upon failure, + returns -1 with the stream's error indicator set. + Failure cause EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure causes are ENOMEM + and the possible failure causes from fwrite(). */ +_GL_FUNCDECL_SYS (fzprintf, off64_t, + (FILE *restrict fp, const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (fzprintf, off64_t, + (FILE *restrict fp, const char *restrict format, ...)); +#endif + +#if 0 || 1 +/* Prints formatted output to stream FP. + Returns the number of bytes written to the stream. Upon failure, + returns a negative value with the stream's error indicator set. */ +# if (0 && 0) \ + || (1 && 0 && (0 || 0)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fprintf rpl_fprintf +# endif +# define GNULIB_overrides_fprintf 1 +# if 0 || 0 +_GL_FUNCDECL_RPL (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...)); +# else +_GL_CXXALIAS_SYS (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fprintf); +# endif +#endif +#if !0 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_fprintf +# undef fprintf +# endif +/* Assume fprintf is always declared. */ +_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " + "use gnulib module fprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +/* Discard all pending buffered I/O data on STREAM. + STREAM must not be wide-character oriented. + When discarding pending output, the file position is set back to where it + was before the write calls. When discarding pending input, the file + position is advanced to match the end of the previously read input. + Return 0 if successful. Upon error, return -1 and set errno. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fpurge rpl_fpurge +# endif +_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); +# else +# if !1 +_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream), _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fpurge); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fpurge +# if HAVE_RAW_DECL_FPURGE +_GL_WARN_ON_USE (fpurge, "fpurge is not always present - " + "use gnulib module fpurge for portability"); +# endif +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputc +# define fputc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream), _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fputc); +# endif +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputs +# define fputs rpl_fputs +# endif +_GL_FUNCDECL_RPL (fputs, int, + (const char *restrict string, FILE *restrict stream), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fputs, int, + (const char *restrict string, FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fputs, int, + (const char *restrict string, FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fputs); +# endif +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fread +# define fread rpl_fread +# endif +_GL_FUNCDECL_RPL (fread, size_t, + (void *restrict ptr, size_t s, size_t n, + FILE *restrict stream), + _GL_ARG_NONNULL ((4)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (fread, size_t, + (void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fread, size_t, + (void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fread); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freopen +# define freopen rpl_freopen +# endif +_GL_FUNCDECL_RPL (freopen, FILE *, + (const char *restrict filename, const char *restrict mode, + FILE *restrict stream), + _GL_ARG_NONNULL ((2, 3)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (freopen, FILE *, + (const char *restrict filename, const char *restrict mode, + FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (freopen, FILE *, + (const char *restrict filename, const char *restrict mode, + FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (freopen); +# endif +#elif defined GNULIB_POSIXCHECK +# undef freopen +/* Assume freopen is always declared. */ +_GL_WARN_ON_USE (freopen, + "freopen on native Windows platforms is not POSIX compliant - " + "use gnulib module freopen for portability"); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fscanf +# define fscanf rpl_fscanf +# endif +_GL_FUNCDECL_RPL (fscanf, int, + (FILE *restrict stream, const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (fscanf, int, + (FILE *restrict stream, const char *restrict format, ...)); +# else +_GL_CXXALIAS_SYS (fscanf, int, + (FILE *restrict stream, const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fscanf); +# endif +#endif + + +/* Set up the following warnings, based on which modules are in use. + GNU Coding Standards discourage the use of fseek, since it imposes + an arbitrary limitation on some 32-bit hosts. Remember that the + fseek module depends on the fseeko module, so we only have three + cases to consider: + + 1. The developer is not using either module. Issue a warning under + GNULIB_POSIXCHECK for both functions, to remind them that both + functions have bugs on some systems. _GL_NO_LARGE_FILES has no + impact on this warning. + + 2. The developer is using both modules. They may be unaware of the + arbitrary limitations of fseek, so issue a warning under + GNULIB_POSIXCHECK. On the other hand, they may be using both + modules intentionally, so the developer can define + _GL_NO_LARGE_FILES in the compilation units where the use of fseek + is safe, to silence the warning. + + 3. The developer is using the fseeko module, but not fseek. Gnulib + guarantees that fseek will still work around platform bugs in that + case, but we presume that the developer is aware of the pitfalls of + fseek and was trying to avoid it, so issue a warning even when + GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be + defined to silence the warning in particular compilation units. + In C++ compilations with GNULIB_NAMESPACE, in order to avoid that + fseek gets defined as a macro, it is recommended that the developer + uses the fseek module, even if he is not calling the fseek function. + + Most gnulib clients that perform stream operations should fall into + category 3. */ + +#if 0 +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 2, above. */ +# undef fseek +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseek +# define fseek rpl_fseek +# endif +_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); +# else +_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fseek); +# endif +#endif + +#if 0 +# if !0 && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 3, above. */ +# undef fseek +# endif +# if 0 +/* Provide an fseeko function that is aware of a preceding fflush(), and which + detects pipes. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseeko +# define fseeko rpl_fseeko +# endif +_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (fseeko); +#elif defined GNULIB_POSIXCHECK +# define _GL_FSEEK_WARN /* Category 1, above. */ +# undef fseek +# undef fseeko +# if HAVE_RAW_DECL_FSEEKO +_GL_WARN_ON_USE (fseeko, "fseeko is unportable - " + "use gnulib module fseeko for portability"); +# endif +#endif + +#ifdef _GL_FSEEK_WARN +# undef _GL_FSEEK_WARN +/* Here, either fseek is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_fseek (declared above). */ +_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use fseeko function for handling of large files"); +#endif + + +/* ftell, ftello. See the comments on fseek/fseeko. */ + +#if 0 +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 2, above. */ +# undef ftell +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftell +# define ftell rpl_ftell +# endif +_GL_FUNCDECL_RPL (ftell, long, (FILE *fp), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); +# else +_GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (ftell); +# endif +#endif + +#if 0 +# if !0 && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 3, above. */ +# undef ftell +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftello +# define ftello rpl_ftello +# endif +_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftello); +#elif defined GNULIB_POSIXCHECK +# define _GL_FTELL_WARN /* Category 1, above. */ +# undef ftell +# undef ftello +# if HAVE_RAW_DECL_FTELLO +_GL_WARN_ON_USE (ftello, "ftello is unportable - " + "use gnulib module ftello for portability"); +# endif +#endif + +#ifdef _GL_FTELL_WARN +# undef _GL_FTELL_WARN +/* Here, either ftell is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_ftell (declared above). */ +_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use ftello function for handling of large files"); +#endif + + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fwrite +# define fwrite rpl_fwrite +# endif +_GL_FUNCDECL_RPL (fwrite, size_t, + (const void *restrict ptr, size_t s, size_t n, + FILE *restrict stream), + _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (fwrite, size_t, + (const void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fwrite, size_t, + (const void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); + +/* Work around bug 11959 when fortifying glibc 2.4 through 2.15 + , + which sometimes causes an unwanted diagnostic for fwrite calls. + This affects only function declaration attributes under certain + versions of gcc and clang, and is not needed for C++. */ +# if (0 < __USE_FORTIFY_LEVEL \ + && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ + && (3 < __GNUC__ + (4 <= __GNUC_MINOR__) || defined __clang__) \ + && !defined __cplusplus) +# undef fwrite +# undef fwrite_unlocked +_GL_EXTERN_C size_t __REDIRECT (rpl_fwrite, + (const void *__restrict, size_t, size_t, + FILE *__restrict), + fwrite); +_GL_EXTERN_C size_t __REDIRECT (rpl_fwrite_unlocked, + (const void *__restrict, size_t, size_t, + FILE *__restrict), + fwrite_unlocked); +# define fwrite rpl_fwrite +# define fwrite_unlocked rpl_fwrite_unlocked +# endif +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fwrite); +# endif +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getc +# define getc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (getc, int, (FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getc); +# endif +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getchar +# define getchar rpl_getchar +# endif +_GL_FUNCDECL_RPL (getchar, int, (void), ); +_GL_CXXALIAS_RPL (getchar, int, (void)); +# else +_GL_CXXALIAS_SYS (getchar, int, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getchar); +# endif +#endif + +#if 0 +/* Read input, up to (and including) the next occurrence of DELIMITER, from + STREAM, store it in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdelim +# define getdelim rpl_getdelim +# endif +_GL_FUNCDECL_RPL (getdelim, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream), + _GL_ARG_NONNULL ((1, 2, 4)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (getdelim, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream)); +# else +# if !1 +_GL_FUNCDECL_SYS (getdelim, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream), + _GL_ARG_NONNULL ((1, 2, 4)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (getdelim, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getdelim); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdelim +# if HAVE_RAW_DECL_GETDELIM +_GL_WARN_ON_USE (getdelim, "getdelim is unportable - " + "use gnulib module getdelim for portability"); +# endif +#endif + +#if 0 +/* Read a line, up to (and including) the next newline, from STREAM, store it + in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getline +# define getline rpl_getline +# endif +_GL_FUNCDECL_RPL (getline, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream), + _GL_ARG_NONNULL ((1, 2, 3)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (getline, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream)); +# else +# if !1 +_GL_FUNCDECL_SYS (getline, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream), + _GL_ARG_NONNULL ((1, 2, 3)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (getline, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 && 1 +_GL_CXXALIASWARN (getline); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getline +# if HAVE_RAW_DECL_GETLINE +_GL_WARN_ON_USE (getline, "getline is unportable - " + "use gnulib module getline for portability"); +# endif +#endif + +/* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning; besides, C11 + removed it. */ +#undef gets +#if HAVE_RAW_DECL_GETS && !defined __cplusplus +_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); +#endif + +#if 1 +/* On native Windows, map 'getw' to '_getw', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::getw always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getw +# define getw _getw +# endif +_GL_CXXALIAS_MDA (getw, int, (FILE *restrict stream)); +# else +# if 0 +# if defined __APPLE__ && defined __MACH__ +/* The presence of the declaration depends on _POSIX_C_SOURCE. */ +_GL_FUNCDECL_SYS (getw, int, (FILE *restrict stream), ); +# endif +_GL_CXXALIAS_SYS (getw, int, (FILE *restrict stream)); +# endif +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getw); +# endif +#endif + +#if 0 +struct obstack; +/* Grows an obstack with formatted output. Returns the number of + bytes added to OBS. No trailing nul byte is added, and the + object should be closed with obstack_finish before use. + Upon memory allocation error, calls obstack_alloc_failed_handler. + Upon other error, returns -1 with errno set. + + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure code is through + obstack_alloc_failed_handler. */ +_GL_FUNCDECL_SYS (obstack_zprintf, ptrdiff_t, + (struct obstack *obs, const char *format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (obstack_zprintf, ptrdiff_t, + (struct obstack *obs, const char *format, ...)); +_GL_FUNCDECL_SYS (obstack_vzprintf, ptrdiff_t, + (struct obstack *obs, const char *format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (obstack_vzprintf, ptrdiff_t, + (struct obstack *obs, const char *format, va_list args)); +#endif + +#if 0 || 0 +struct obstack; +/* Grows an obstack with formatted output. Returns the number of + bytes added to OBS. No trailing nul byte is added, and the + object should be closed with obstack_finish before use. + Upon memory allocation error, calls obstack_alloc_failed_handler. + Upon other error, returns -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_printf rpl_obstack_printf +# endif +_GL_FUNCDECL_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# endif +_GL_CXXALIASWARN (obstack_printf); +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_vprintf rpl_obstack_vprintf +# endif +_GL_FUNCDECL_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (obstack_vprintf); +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (pclose, int, (FILE *stream), _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); +_GL_CXXALIASWARN (pclose); +#elif defined GNULIB_POSIXCHECK +# undef pclose +# if HAVE_RAW_DECL_PCLOSE +_GL_WARN_ON_USE (pclose, "pclose is unportable - " + "use gnulib module pclose for more portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +/* Print a message to standard error, describing the value of ERRNO, + (if STRING is not NULL and not empty) prefixed with STRING and ": ", + and terminated with a newline. */ +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define perror rpl_perror +# endif +_GL_FUNCDECL_RPL (perror, void, (const char *string), ); +_GL_CXXALIAS_RPL (perror, void, (const char *string)); +# else +_GL_CXXALIAS_SYS (perror, void, (const char *string)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (perror); +# endif +#elif defined GNULIB_POSIXCHECK +# undef perror +/* Assume perror is always declared. */ +_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " + "use gnulib module perror for portability"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef popen +# define popen rpl_popen +# endif +_GL_FUNCDECL_RPL (popen, FILE *, + (const char *cmd, const char *mode), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); +# else +# if !1 || (__GNUC__ >= 11 && !defined __clang__) +_GL_FUNCDECL_SYS (popen, FILE *, + (const char *cmd, const char *mode), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); +# endif +_GL_CXXALIASWARN (popen); +#else +# if 0 \ + && (__GNUC__ >= 11 && !defined __clang__) && !defined popen +/* For -Wmismatched-dealloc: Associate popen with pclose or rpl_pclose. */ +_GL_FUNCDECL_SYS (popen, FILE *, + (const char *cmd, const char *mode), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) + _GL_ATTRIBUTE_MALLOC); +# endif +# if defined GNULIB_POSIXCHECK +# undef popen +# if HAVE_RAW_DECL_POPEN +_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " + "use gnulib module popen or pipe for more portability"); +# endif +# endif +#endif + +#if 0 +/* Prints formatted output to standard output. + Returns the number of bytes written to standard output. Upon failure, + returns -1 with stdout's error indicator set. + Failure cause EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure causes are ENOMEM + and the possible failure causes from fwrite(). */ +_GL_FUNCDECL_SYS (zprintf, off64_t, (const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (zprintf, off64_t, (const char *restrict format, ...)); +#endif + +#if 0 || 1 +/* Prints formatted output to standard output. + Returns the number of bytes written to standard output. Upon failure, + returns a negative value with stdout's error indicator set. */ +# if (0 && 0) \ + || (1 && 0 && (0 || 0)) +# if defined __GNUC__ || defined __clang__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +# endif +# if 0 || 0 +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *restrict format, ...) + __asm__ ( + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *restrict format, ...) + __asm__ ( + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)), + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define printf rpl_printf +# endif +_GL_FUNCDECL_RPL (printf, int, + (const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (printf, int, (const char *restrict format, ...)); +# endif +# define GNULIB_overrides_printf 1 +# else +_GL_CXXALIAS_SYS (printf, int, (const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (printf); +# endif +#endif +#if !0 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_printf +# undef printf +# endif +/* Assume printf is always declared. */ +_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " + "use gnulib module printf-posix for portable " + "POSIX compliance"); +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putc +# define putc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream), _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (putc); +# endif +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putchar +# define putchar rpl_putchar +# endif +_GL_FUNCDECL_RPL (putchar, int, (int c), ); +_GL_CXXALIAS_RPL (putchar, int, (int c)); +# else +_GL_CXXALIAS_SYS (putchar, int, (int c)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (putchar); +# endif +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef puts +# define puts rpl_puts +# endif +_GL_FUNCDECL_RPL (puts, int, (const char *string), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (puts, int, (const char *string)); +# else +_GL_CXXALIAS_SYS (puts, int, (const char *string)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (puts); +# endif +#endif + +#if 1 +/* On native Windows, map 'putw' to '_putw', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::putw always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putw +# define putw _putw +# endif +_GL_CXXALIAS_MDA (putw, int, (int w, FILE *restrict stream)); +# else +# if 0 +# if defined __APPLE__ && defined __MACH__ +/* The presence of the declaration depends on _POSIX_C_SOURCE. */ +_GL_FUNCDECL_SYS (putw, int, (int w, FILE *restrict stream), ); +# endif +_GL_CXXALIAS_SYS (putw, int, (int w, FILE *restrict stream)); +# endif +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (putw); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remove +# define remove rpl_remove +# endif +_GL_FUNCDECL_RPL (remove, int, (const char *name), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (remove, int, (const char *name)); +# else +_GL_CXXALIAS_SYS (remove, int, (const char *name)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (remove); +# endif +#elif defined GNULIB_POSIXCHECK +# undef remove +/* Assume remove is always declared. */ +_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " + "use gnulib module remove for more portability"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rename +# define rename rpl_rename +# endif +_GL_FUNCDECL_RPL (rename, int, + (const char *old_filename, const char *new_filename), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (rename, int, + (const char *old_filename, const char *new_filename)); +# else +_GL_CXXALIAS_SYS (rename, int, + (const char *old_filename, const char *new_filename)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (rename); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rename +/* Assume rename is always declared. */ +_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " + "use gnulib module rename for more portability"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef renameat +# define renameat rpl_renameat +# endif +_GL_FUNCDECL_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2), + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# else +# if !1 +_GL_FUNCDECL_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2), + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# endif +_GL_CXXALIASWARN (renameat); +#elif defined GNULIB_POSIXCHECK +# undef renameat +# if HAVE_RAW_DECL_RENAMEAT +_GL_WARN_ON_USE (renameat, "renameat is not portable - " + "use gnulib module renameat for portability"); +# endif +#endif + +#if 1 +# if 0 && 0 +# if defined __GNUC__ || defined __clang__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +/* Don't break __attribute__((format(scanf,M,N))). */ +# define scanf __scanf__ +# endif +_GL_FUNCDECL_RPL_1 (__scanf__, int, + (const char *restrict format, ...) + __asm__ ( + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)), + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *restrict format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +# define scanf rpl_scanf +# endif +_GL_FUNCDECL_RPL (scanf, int, (const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (scanf, int, (const char *restrict format, ...)); +# endif +# else +_GL_CXXALIAS_SYS (scanf, int, (const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (scanf); +# endif +#endif + +#if 0 +/* Prints formatted output to string STR. Similar to sprintf, but the + additional parameter SIZE limits how much is written into STR. + STR may be NULL, in which case nothing will be written. + Returns the string length of the formatted string (which may be larger + than SIZE). Upon failure, returns -1 with errno set. + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure code is ENOMEM. */ +_GL_FUNCDECL_SYS (snzprintf, ptrdiff_t, + (char *restrict str, size_t size, + const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_SYS (snzprintf, ptrdiff_t, + (char *restrict str, size_t size, + const char *restrict format, ...)); +#endif + +#if 0 +/* Prints formatted output to string STR. Similar to sprintf, but the + additional parameter SIZE limits how much is written into STR. + STR may be NULL, in which case nothing will be written. + Returns the string length of the formatted string (which may be larger + than SIZE). Upon failure, returns a negative value. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define snprintf rpl_snprintf +# endif +# define GNULIB_overrides_snprintf 1 +_GL_FUNCDECL_RPL (snprintf, int, + (char *restrict str, size_t size, + const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (snprintf, int, + (char *restrict str, size_t size, + const char *restrict format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (snprintf, int, + (char *restrict str, size_t size, + const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (snprintf, int, + (char *restrict str, size_t size, + const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (snprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef snprintf +# if HAVE_RAW_DECL_SNPRINTF +_GL_WARN_ON_USE (snprintf, "snprintf is unportable - " + "use gnulib module snprintf for portability"); +# endif +#endif + +#if 0 +/* Prints formatted output to string STR. + Returns the string length of the formatted string. Upon failure, + returns -1 with errno set. + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure code is ENOMEM. */ +_GL_FUNCDECL_SYS (szprintf, ptrdiff_t, + (char *restrict str, + const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (szprintf, ptrdiff_t, + (char *restrict str, + const char *restrict format, ...)); +#endif + +/* Some people would argue that all sprintf uses should be warned about + (for example, OpenBSD issues a link warning for it), + since it can cause security holes due to buffer overruns. + However, we believe that sprintf can be used safely, and is more + efficient than snprintf in those safe cases; and as proof of our + belief, we use sprintf in several gnulib modules. So this header + intentionally avoids adding a warning to sprintf except when + GNULIB_POSIXCHECK is defined. */ + +#if 0 +/* Prints formatted output to string STR. + Returns the string length of the formatted string. Upon failure, + returns a negative value. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define sprintf rpl_sprintf +# endif +# define GNULIB_overrides_sprintf 1 +_GL_FUNCDECL_RPL (sprintf, int, + (char *restrict str, const char *restrict format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (sprintf, int, + (char *restrict str, const char *restrict format, ...)); +# else +_GL_CXXALIAS_SYS (sprintf, int, + (char *restrict str, const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (sprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef sprintf +/* Assume sprintf is always declared. */ +_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " + "use gnulib module sprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 1 +/* On native Windows, map 'tempnam' to '_tempnam', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::tempnam always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tempnam +# define tempnam _tempnam +# endif +_GL_CXXALIAS_MDA (tempnam, char *, (const char *dir, const char *prefix)); +# else +_GL_CXXALIAS_SYS (tempnam, char *, (const char *dir, const char *prefix)); +# endif +_GL_CXXALIASWARN (tempnam); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define tmpfile rpl_tmpfile +# endif +_GL_FUNCDECL_RPL (tmpfile, FILE *, (void), + _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); +# else +# if __GNUC__ >= 11 && !defined __clang__ +/* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (tmpfile, FILE *, (void), + _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC + _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (tmpfile); +# endif +#else +# if 0 \ + && (__GNUC__ >= 11 && !defined __clang__) && !defined tmpfile +/* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (tmpfile, FILE *, (void), + _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); +# endif +# if defined GNULIB_POSIXCHECK +# undef tmpfile +# if HAVE_RAW_DECL_TMPFILE +_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " + "use gnulib module tmpfile for portability"); +# endif +# endif +#endif + +#if 0 +/* Prints formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, it stores the address of the string in + *RESULT and returns the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, it returns -1 + with errno set. + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure code is ENOMEM. */ +_GL_FUNCDECL_SYS (aszprintf, ptrdiff_t, + (char **result, const char *format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2)) + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_SYS (aszprintf, ptrdiff_t, + (char **result, const char *format, ...)); +_GL_FUNCDECL_SYS (vaszprintf, ptrdiff_t, + (char **result, const char *format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2)) + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_SYS (vaszprintf, ptrdiff_t, + (char **result, const char *format, va_list args)); +#endif + +#if 0 +/* Write formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, store the address of the string in + *RESULT and return the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define asprintf rpl_asprintf +# endif +# define GNULIB_overrides_asprintf +_GL_FUNCDECL_RPL (asprintf, int, + (char **result, const char *format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2)) + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (asprintf, int, + (char **result, const char *format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (asprintf, int, + (char **result, const char *format, ...), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2)) + _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (asprintf, int, + (char **result, const char *format, ...)); +# endif +_GL_CXXALIASWARN (asprintf); +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vasprintf rpl_vasprintf +# endif +# define GNULIB_overrides_vasprintf 1 +_GL_FUNCDECL_RPL (vasprintf, int, + (char **result, const char *format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2)) + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (vasprintf, int, + (char **result, const char *format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (vasprintf, int, + (char **result, const char *format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2)) + _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (vasprintf, int, + (char **result, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vasprintf); +#endif + +#if 0 +/* Prints formatted output to file descriptor FD. + Returns the number of bytes written to the file descriptor. Upon + failure, returns -1 with errno set. + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure codes are ENOMEM + and the possible failure codes from write(), excluding EINTR. */ +_GL_FUNCDECL_SYS (vdzprintf, off64_t, + (int fd, const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_SYS (vdzprintf, off64_t, + (int fd, const char *restrict format, va_list args)); +#endif + +#if 0 +/* Prints formatted output to file descriptor FD. + Returns the number of bytes written to the file descriptor. Upon + failure, returns a negative value. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vdprintf rpl_vdprintf +# endif +_GL_FUNCDECL_RPL (vdprintf, int, + (int fd, const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (vdprintf, int, + (int fd, const char *restrict format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (vdprintf, int, + (int fd, const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((2))); +# endif +/* Need to cast, because on Solaris, the third parameter will likely be + __va_list args. */ +_GL_CXXALIAS_SYS_CAST (vdprintf, int, + (int fd, const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vdprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vdprintf +# if HAVE_RAW_DECL_VDPRINTF +_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " + "use gnulib module vdprintf for portability"); +# endif +#endif + +#if 0 +/* Prints formatted output to stream FP. + Returns the number of bytes written to the stream. Upon failure, + returns -1 with the stream's error indicator set. + Failure cause EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure causes are ENOMEM + and the possible failure causes from fwrite(). */ +_GL_FUNCDECL_SYS (vfzprintf, off64_t, + (FILE *restrict fp, + const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (vfzprintf, off64_t, + (FILE *restrict fp, + const char *restrict format, va_list args)); +#endif + +#if 0 || 1 +/* Prints formatted output to stream FP. + Returns the number of bytes written to the stream. Upon failure, + returns a negative value with the stream's error indicator set. */ +# if (0 && 0) \ + || (1 && 0 && (0 || 0)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vfprintf rpl_vfprintf +# endif +# define GNULIB_overrides_vfprintf 1 +# if 0 +_GL_FUNCDECL_RPL (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vfprintf); +# endif +#endif +#if !0 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vfprintf +# undef vfprintf +# endif +/* Assume vfprintf is always declared. */ +_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " + "use gnulib module vfprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vfscanf +# define vfscanf rpl_vfscanf +# endif +_GL_FUNCDECL_RPL (vfscanf, int, + (FILE *restrict stream, + const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (vfscanf, int, + (FILE *restrict stream, + const char *restrict format, va_list args)); +# else +_GL_CXXALIAS_SYS (vfscanf, int, + (FILE *restrict stream, + const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vfscanf); +# endif +#endif + +#if 0 +/* Prints formatted output to standard output. + Returns the number of bytes written to standard output. Upon failure, + returns -1 with stdout's error indicator set. + Failure cause EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure causes are ENOMEM + and the possible failure causes from fwrite(). */ +_GL_FUNCDECL_SYS (vzprintf, off64_t, + (const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 0) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (vzprintf, off64_t, + (const char *restrict format, va_list args)); +#endif + +#if 0 || 1 +/* Prints formatted output to standard output. + Returns the number of bytes written to standard output. Upon failure, + returns a negative value with stdout's error indicator set. */ +# if (0 && 0) \ + || (1 && 0 && (0 || 0)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vprintf rpl_vprintf +# endif +# define GNULIB_overrides_vprintf 1 +# if 0 || 0 +_GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 0) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL (vprintf, int, (const char *restrict format, va_list args)); +# else +/* Need to cast, because on Solaris, the second parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vprintf, int, + (const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vprintf); +# endif +#endif +#if !0 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vprintf +# undef vprintf +# endif +/* Assume vprintf is always declared. */ +_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " + "use gnulib module vprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vscanf +# define vscanf rpl_vscanf +# endif +_GL_FUNCDECL_RPL (vscanf, int, (const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (vscanf, int, (const char *restrict format, va_list args)); +# else +_GL_CXXALIAS_SYS (vscanf, int, (const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vscanf); +# endif +#endif + +#if 0 +/* Prints formatted output to string STR. Similar to sprintf, but the + additional parameter SIZE limits how much is written into STR. + STR may be NULL, in which case nothing will be written. + Returns the string length of the formatted string (which may be larger + than SIZE). Upon failure, returns -1 with errno set. + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure code is ENOMEM. */ +_GL_FUNCDECL_SYS (vsnzprintf, ptrdiff_t, + (char *restrict str, size_t size, + const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_SYS (vsnzprintf, ptrdiff_t, + (char *restrict str, size_t size, + const char *restrict format, va_list args)); +#endif + +#if 0 +/* Prints formatted output to string STR. Similar to vsprintf, but the + additional parameter SIZE limits how much is written into STR. + STR may be NULL, in which case nothing will be written. + Returns the string length of the formatted string (which may be larger + than SIZE). Upon failure, returns a negative value. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsnprintf rpl_vsnprintf +# endif +# define GNULIB_overrides_vsnprintf 1 +_GL_FUNCDECL_RPL (vsnprintf, int, + (char *restrict str, size_t size, + const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (vsnprintf, int, + (char *restrict str, size_t size, + const char *restrict format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (vsnprintf, int, + (char *restrict str, size_t size, + const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (vsnprintf, int, + (char *restrict str, size_t size, + const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vsnprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vsnprintf +# if HAVE_RAW_DECL_VSNPRINTF +_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " + "use gnulib module vsnprintf for portability"); +# endif +#endif + +#if 0 +/* Prints formatted output to string STR. + Returns the string length of the formatted string. Upon failure, + returns -1 with errno set. + Failure code EOVERFLOW can only occur when a width > INT_MAX is used. + Therefore, if the format string is valid and does not use %ls/%lc + directives nor widths, the only possible failure code is ENOMEM. */ +_GL_FUNCDECL_SYS (vszprintf, ptrdiff_t, + (char *restrict str, + const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (vszprintf, ptrdiff_t, + (char *restrict str, + const char *restrict format, va_list args)); +#endif + +#if 0 +/* Prints formatted output to string STR. + Returns the string length of the formatted string. Upon failure, + returns a negative value. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsprintf rpl_vsprintf +# endif +# define GNULIB_overrides_vsprintf 1 +_GL_FUNCDECL_RPL (vsprintf, int, + (char *restrict str, + const char *restrict format, va_list args), + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vsprintf, int, + (char *restrict str, + const char *restrict format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vsprintf, int, + (char *restrict str, + const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vsprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vsprintf +/* Assume vsprintf is always declared. */ +_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " + "use gnulib module vsprintf-posix for portable " + "POSIX compliance"); +#endif + +#endif /* _GL_STDIO_H */ +#endif /* _GL_STDIO_H */ +#endif diff --git a/jni/parted/lib/stdlib.h b/jni/parted/lib/stdlib.h new file mode 100755 index 0000000..fdc7581 --- /dev/null +++ b/jni/parted/lib/stdlib.h @@ -0,0 +1,2560 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 1995, 2001-2004, 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if ((defined __need_system_stdlib_h && !defined _GLIBCXX_STDLIB_H) \ + || defined __need_malloc_and_calloc) \ + && !defined __SUNPRO_CC +/* Special invocation conventions inside some gnulib header files, + and inside some glibc header files, respectively. + Do not recognize this special invocation convention when GCC's + c++/11/stdlib.h is being included or has been included. This is needed + to support the use of clang+llvm binaries on Ubuntu 22.04 with + CXX="$clangdir/bin/clang++ -I/usr/include/c++/11 \ + -I/usr/include/x86_64-linux-gnu/c++/11 + -L/usr/lib/gcc/x86_64-linux-gnu/11 + -Wl,-rpath,$clangdir/lib" + because in this case /usr/include/c++/11/stdlib.h (which does not support + the convention) is seen before the gnulib-generated stdlib.h. */ + +#include_next + +/* Make sure that the macros that indicate the special invocation convention + get undefined. This is needed at least on CentOS 7. */ +#undef __need_malloc_and_calloc + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_STDLIB_H +#define _GL_STDLIB_H + +/* This file uses _Noreturn, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, + GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* NetBSD 5.0 mis-defines NULL. */ +#include + +/* MirBSD 10 defines WEXITSTATUS in , not in . */ +#if 0 && !defined WEXITSTATUS +# include +#endif + +/* Solaris declares getloadavg() in . */ +#if (0 || defined GNULIB_POSIXCHECK) && 0 +/* OpenIndiana has a bug: must be included before + . */ +# include +# include +#endif + +/* Native Windows platforms declare _mktemp() in . */ +#if defined _WIN32 && !defined __CYGWIN__ +# include +#endif + +#if IN_PARTED_GNULIB_TESTS + +/* OSF/1 5.1 declares 'struct random_data' in , which is included + from if _REENTRANT is defined. Include it whenever we need + 'struct random_data'. */ +# if 0 +# include +# endif + +# include + +# if !0 +/* Define 'struct random_data'. + But allow multiple gnulib generated replacements to coexist. */ +# if !GNULIB_defined_struct_random_data +struct random_data +{ + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ +}; +# define GNULIB_defined_struct_random_data 1 +# endif +# endif +#endif + +#if (1 || 0 || 0 || 0 || 0 || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) +/* On Mac OS X 10.3, only declares mkstemp. */ +/* On Mac OS X 10.5, only declares mkstemps. */ +/* On Mac OS X 10.13, only declares mkostemp and mkostemps. */ +/* On Cygwin 1.7.1, only declares getsubopt. */ +/* But avoid namespace pollution on glibc systems and native Windows. */ +# include +#endif + +#if ((0 && 0) || (1 && 0) || (0 && 0) || (1 && 0)) && defined __cplusplus && !defined GNULIB_NAMESPACE && defined __GNUG__ && !defined __clang__ && defined __sun +/* When strtol, strtoll, strtoul, or strtoull is going to be defined as a macro + below, this may cause compilation errors later in the libstdc++ header files + (that are part of GCC), such as: + error: 'rpl_strtol' is not a member of 'std' + To avoid this, include the relevant header files here, before these symbols + get defined as macros. But do so only on Solaris 11 (where it is needed), + not on mingw (where it would cause other compilation errors). */ +# include +#endif + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 && !defined __clang__ +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that + can be freed via 'free'; it can be used only after declaring 'free'. */ +/* Applies to: functions. Cannot be used on inline functions. */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +# if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major__ >= 4 +# if __cplusplus >= 201103L +# define _GL_ATTRIBUTE_NOTHROW noexcept (true) +# else +# define _GL_ATTRIBUTE_NOTHROW throw () +# endif +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# else +# if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# endif +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif +#endif + +/* The definition of _Noreturn is copied here. */ +/* A C macro for declaring that a function does not return. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif (defined __clang__ && __clang_major__ < 16 \ + && defined _GL_WORK_AROUND_LLVM_BUG_59792) + /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around + that rare LLVM bug, though you may get many false-alarm warnings. */ +# define _Noreturn +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || (!defined __STRICT_ANSI__ \ + && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __clang__ \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))))) + /* _Noreturn works as-is. */ +# elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ + || 0x5110 <= __SUNPRO_C) +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere + with proper operation of xargs. */ +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#elif EXIT_FAILURE != 1 +# undef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +#if 0 +/* Terminate the current process with the given return code, without running + the 'atexit' handlers. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef _Exit +# define _Exit rpl__Exit +# endif +_GL_FUNCDECL_RPL (_Exit, _Noreturn void, (int status), ); +_GL_CXXALIAS_RPL (_Exit, void, (int status)); +# else +# if !1 +_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status), ); +# endif +_GL_CXXALIAS_SYS (_Exit, void, (int status)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (_Exit); +# endif +#elif defined GNULIB_POSIXCHECK +# undef _Exit +# if HAVE_RAW_DECL__EXIT +_GL_WARN_ON_USE (_Exit, "_Exit is unportable - " + "use gnulib module _Exit for portability"); +# endif +#endif + + +#if 0 +/* Terminates the current process with signal SIGABRT. + Note: While the original abort() function is safe to call in signal handlers, + the overridden abort() function is not. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef abort +# define abort rpl_abort +# endif +_GL_FUNCDECL_RPL (abort, _Noreturn void, (void), ); +_GL_CXXALIAS_RPL (abort, void, (void)); +# else +_GL_CXXALIAS_SYS (abort, void, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (abort); +# endif +#endif + + +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef free +# define free rpl_free +# endif +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_RPL (free, void, (void *ptr), ); +# endif +_GL_CXXALIAS_RPL (free, void, (void *ptr)); +# else +_GL_CXXALIAS_SYS (free, void, (void *ptr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (free); +# endif +#elif defined GNULIB_POSIXCHECK +# undef free +/* Assume free is always declared. */ +_GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - " + "use gnulib module free for portability"); +#endif + + +/* Allocate memory with indefinite extent and specified alignment. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef aligned_alloc +# define aligned_alloc rpl_aligned_alloc +# endif +_GL_FUNCDECL_RPL (aligned_alloc, void *, + (size_t alignment, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t alignment, size_t size)); +# else +# if 1 +# if __GNUC__ >= 11 && !defined __clang__ +/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 +_GL_FUNCDECL_SYS (aligned_alloc, void *, + (size_t alignment, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (aligned_alloc, void *, + (size_t alignment, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD); +# endif +# endif +_GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size)); +# endif +# endif +# if (__GLIBC__ >= 2) && 1 +_GL_CXXALIASWARN (aligned_alloc); +# endif +#else +# if 1 \ + && (__GNUC__ >= 11 && !defined __clang__) && !defined aligned_alloc +/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 +_GL_FUNCDECL_SYS (aligned_alloc, void *, + (size_t alignment, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (aligned_alloc, void *, + (size_t alignment, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef aligned_alloc +# if HAVE_RAW_DECL_ALIGNED_ALLOC +_GL_WARN_ON_USE (aligned_alloc, "aligned_alloc is not portable - " + "use gnulib module aligned_alloc for portability"); +# endif +# endif +#endif + +#if 0 +/* Parse a signed decimal integer. + Returns the value of the integer. Errors are not detected. */ +# if !1 +_GL_FUNCDECL_SYS (atoll, long long, + (const char *string), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (atoll, long long, (const char *string)); +_GL_CXXALIASWARN (atoll); +#elif defined GNULIB_POSIXCHECK +# undef atoll +# if HAVE_RAW_DECL_ATOLL +_GL_WARN_ON_USE (atoll, "atoll is unportable - " + "use gnulib module atoll for portability"); +# endif +#endif + +#if 1 +# if (1 && 0) \ + || (1 && 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef calloc +# define calloc rpl_calloc +# endif +_GL_FUNCDECL_RPL (calloc, void *, + (size_t nmemb, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); +# else +# if __GNUC__ >= 11 && !defined __clang__ +/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 +_GL_FUNCDECL_SYS (calloc, void *, + (size_t nmemb, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (calloc, void *, + (size_t nmemb, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD); +# endif +# endif +_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (calloc); +# endif +#else +# if 1 \ + && (__GNUC__ >= 11 && !defined __clang__) && !defined calloc +/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 +_GL_FUNCDECL_SYS (calloc, void *, + (size_t nmemb, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (calloc, void *, + (size_t nmemb, size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef calloc +/* Assume calloc is always declared. */ +_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " + "use gnulib module calloc-posix for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define canonicalize_file_name rpl_canonicalize_file_name +# endif +_GL_FUNCDECL_RPL (canonicalize_file_name, char *, + (const char *name), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); +# else +# if !0 || (__GNUC__ >= 11 && !defined __clang__) +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, + (const char *name), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, + (const char *name), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD); +# endif +# endif +_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); +# endif +# ifndef GNULIB_defined_canonicalize_file_name +# define GNULIB_defined_canonicalize_file_name \ + (!0 || 0) +# endif +_GL_CXXALIASWARN (canonicalize_file_name); +#else +# if 1 \ + && (__GNUC__ >= 11 && !defined __clang__) && !defined canonicalize_file_name +/* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or + rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, + (const char *name), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, + (const char *name), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef canonicalize_file_name +# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME +_GL_WARN_ON_USE (canonicalize_file_name, + "canonicalize_file_name is unportable - " + "use gnulib module canonicalize-lgpl for portability"); +# endif +# endif +#endif + +#if 1 +/* On native Windows, map 'ecvt' to '_ecvt', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::ecvt on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ecvt +# define ecvt _ecvt +# endif +_GL_CXXALIAS_MDA (ecvt, char *, + (double number, int ndigits, int *decptp, int *signp)); +# else +# if 0 +_GL_CXXALIAS_SYS (ecvt, char *, + (double number, int ndigits, int *decptp, int *signp)); +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 0 +_GL_CXXALIASWARN (ecvt); +# endif +#endif + +#if 1 +/* On native Windows, map 'fcvt' to '_fcvt', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::fcvt on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fcvt +# define fcvt _fcvt +# endif +_GL_CXXALIAS_MDA (fcvt, char *, + (double number, int ndigits, int *decptp, int *signp)); +# else +# if 0 +_GL_CXXALIAS_SYS (fcvt, char *, + (double number, int ndigits, int *decptp, int *signp)); +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 0 +_GL_CXXALIASWARN (fcvt); +# endif +#endif + +#if 1 +/* On native Windows, map 'gcvt' to '_gcvt', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::gcvt on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gcvt +# define gcvt _gcvt +# endif +_GL_CXXALIAS_MDA (gcvt, char *, (double number, int ndigits, char *buf)); +# else +# if 0 +_GL_CXXALIAS_SYS (gcvt, char *, (double number, int ndigits, char *buf)); +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 0 +_GL_CXXALIASWARN (gcvt); +# endif +#endif + +#if 0 +/* Store max(NELEM,3) load average numbers in LOADAVG[]. + The three numbers are the load average of the last 1 minute, the last 5 + minutes, and the last 15 minutes, respectively. + LOADAVG is an array of NELEM numbers. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getloadavg +# define getloadavg rpl_getloadavg +# endif +_GL_FUNCDECL_RPL (getloadavg, int, (double loadavg[], int nelem), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getloadavg, int, (double loadavg[], int nelem)); +# else +# if !1 +_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getloadavg); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getloadavg +# if HAVE_RAW_DECL_GETLOADAVG +_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " + "use gnulib module getloadavg for portability"); +# endif +#endif + +#if 1 +/* Return the base name of the executing program. + On native Windows this will usually end in ".exe" or ".EXE". */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getprogname +# define getprogname rpl_getprogname +# endif +# if 0 +_GL_FUNCDECL_RPL (getprogname, const char *, (void), _GL_ATTRIBUTE_PURE); +# else +_GL_FUNCDECL_RPL (getprogname, const char *, (void), ); +# endif +_GL_CXXALIAS_RPL (getprogname, const char *, (void)); +# else +# if !1 +# if 0 +_GL_FUNCDECL_SYS (getprogname, const char *, (void), _GL_ATTRIBUTE_PURE); +# else +_GL_FUNCDECL_SYS (getprogname, const char *, (void), ); +# endif +# endif +_GL_CXXALIAS_SYS (getprogname, const char *, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getprogname); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getprogname +# if HAVE_RAW_DECL_GETPROGNAME +_GL_WARN_ON_USE (getprogname, "getprogname is unportable - " + "use gnulib module getprogname for portability"); +# endif +#endif + +#if 0 +/* Assuming *OPTIONP is a comma separated list of elements of the form + "token" or "token=value", getsubopt parses the first of these elements. + If the first element refers to a "token" that is member of the given + NULL-terminated array of tokens: + - It replaces the comma with a NUL byte, updates *OPTIONP to point past + the first option and the comma, sets *VALUEP to the value of the + element (or NULL if it doesn't contain an "=" sign), + - It returns the index of the "token" in the given array of tokens. + Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. + For more details see the POSIX specification. + https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getsubopt +# define getsubopt rpl_getsubopt +# endif +_GL_FUNCDECL_RPL (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep), + _GL_ARG_NONNULL ((1, 2, 3)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep)); +# else +# if !1 +_GL_FUNCDECL_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep), + _GL_ARG_NONNULL ((1, 2, 3)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getsubopt); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getsubopt +# if HAVE_RAW_DECL_GETSUBOPT +_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " + "use gnulib module getsubopt for portability"); +# endif +#endif + +#if 0 +/* Change the ownership and access permission of the slave side of the + pseudo-terminal whose master side is specified by FD. */ +# if !1 +_GL_FUNCDECL_SYS (grantpt, int, (int fd), ); +# endif +_GL_CXXALIAS_SYS (grantpt, int, (int fd)); +_GL_CXXALIASWARN (grantpt); +#elif defined GNULIB_POSIXCHECK +# undef grantpt +# if HAVE_RAW_DECL_GRANTPT +_GL_WARN_ON_USE (grantpt, "grantpt is not portable - " + "use gnulib module grantpt for portability"); +# endif +#endif + +/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not + rely on GNU or POSIX semantics for malloc and realloc (for example, + by never specifying a zero size), so it does not need malloc or + realloc to be redefined. */ +#if 1 +# if (1 && 0) \ + || (1 && 0) +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef malloc +# define malloc rpl_malloc +# endif +_GL_FUNCDECL_RPL (malloc, void *, + (size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (malloc, void *, (size_t size)); +# else +# if __GNUC__ >= 11 && !defined __clang__ +/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 +_GL_FUNCDECL_SYS (malloc, void *, + (size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (malloc, void *, + (size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_NODISCARD); +# endif +# endif +_GL_CXXALIAS_SYS (malloc, void *, (size_t size)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (malloc); +# endif +#else +# if 1 \ + && (__GNUC__ >= 11 && !defined __clang__) && !defined malloc +/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 +_GL_FUNCDECL_SYS (malloc, void *, + (size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (malloc, void *, + (size_t size), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef malloc +/* Assume malloc is always declared. */ +_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " + "use gnulib module malloc-posix for portability"); +# endif +#endif + +/* Return maximum number of bytes of a multibyte character. */ +#if 0 +# if !GNULIB_defined_MB_CUR_MAX +static inline +int gl_MB_CUR_MAX (void) +{ + /* Turn the value 3 to the value 4, as needed for the UTF-8 encoding. */ + return MB_CUR_MAX + (MB_CUR_MAX == 3); +} +# undef MB_CUR_MAX +# define MB_CUR_MAX gl_MB_CUR_MAX () +# define GNULIB_defined_MB_CUR_MAX 1 +# endif +#endif + +/* Convert a string to a wide string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbstowcs +# define mbstowcs rpl_mbstowcs +# endif +_GL_FUNCDECL_RPL (mbstowcs, size_t, + (wchar_t *restrict dest, const char *restrict src, + size_t len), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbstowcs, size_t, + (wchar_t *restrict dest, const char *restrict src, + size_t len)); +# else +_GL_CXXALIAS_SYS (mbstowcs, size_t, + (wchar_t *restrict dest, const char *restrict src, + size_t len)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbstowcs); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbstowcs +# if HAVE_RAW_DECL_MBSTOWCS +_GL_WARN_ON_USE (mbstowcs, "mbstowcs is unportable - " + "use gnulib module mbstowcs for portability"); +# endif +#endif + +/* Convert a multibyte character to a wide character. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbtowc +# define mbtowc rpl_mbtowc +# endif +_GL_FUNCDECL_RPL (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n), ); +_GL_CXXALIAS_RPL (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n), ); +# endif +_GL_CXXALIAS_SYS (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbtowc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbtowc +# if HAVE_RAW_DECL_MBTOWC +_GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - " + "use gnulib module mbtowc for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +# if !1 +_GL_FUNCDECL_SYS (mkdtemp, char *, + (char * /*template*/), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); +_GL_CXXALIASWARN (mkdtemp); +#elif defined GNULIB_POSIXCHECK +# undef mkdtemp +# if HAVE_RAW_DECL_MKDTEMP +_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " + "use gnulib module mkdtemp for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkostemp +# define mkostemp rpl_mkostemp +# endif +_GL_FUNCDECL_RPL (mkostemp, int, (char * /*template*/, int /*flags*/), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (mkostemp, int, (char * /*template*/, int /*flags*/)); +# else +# if !1 +_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mkostemp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mkostemp +# if HAVE_RAW_DECL_MKOSTEMP +_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " + "use gnulib module mkostemp for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE before a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkostemps +# define mkostemps rpl_mkostemps +# endif +_GL_FUNCDECL_RPL (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/)); +# else +# if !1 +_GL_FUNCDECL_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mkostemps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mkostemps +# if HAVE_RAW_DECL_MKOSTEMPS +_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " + "use gnulib module mkostemps for portability"); +# endif +#endif + +#if 1 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mkstemp rpl_mkstemp +# endif +_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); +# endif +_GL_CXXALIASWARN (mkstemp); +#elif defined GNULIB_POSIXCHECK +# undef mkstemp +# if HAVE_RAW_DECL_MKSTEMP +_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " + "use gnulib module mkstemp for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE prior to a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !1 +_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); +_GL_CXXALIASWARN (mkstemps); +#elif defined GNULIB_POSIXCHECK +# undef mkstemps +# if HAVE_RAW_DECL_MKSTEMPS +_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " + "use gnulib module mkstemps for portability"); +# endif +#endif + +#if 1 +/* On native Windows, map 'mktemp' to '_mktemp', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::mktemp always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mktemp +# define mktemp _mktemp +# endif +_GL_CXXALIAS_MDA (mktemp, char *, (char * /*template*/)); +# else +_GL_CXXALIAS_SYS (mktemp, char *, (char * /*template*/)); +# endif +_GL_CXXALIASWARN (mktemp); +#endif + +/* Allocate memory with indefinite extent and specified alignment. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef posix_memalign +# define posix_memalign rpl_posix_memalign +# endif +_GL_FUNCDECL_RPL (posix_memalign, int, + (void **memptr, size_t alignment, size_t size), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (posix_memalign, int, + (void **memptr, size_t alignment, size_t size)); +# else +# if 1 +_GL_CXXALIAS_SYS (posix_memalign, int, + (void **memptr, size_t alignment, size_t size)); +# endif +# endif +# if __GLIBC__ >= 2 && 1 +_GL_CXXALIASWARN (posix_memalign); +# endif +#elif defined GNULIB_POSIXCHECK +# undef posix_memalign +# if HAVE_RAW_DECL_POSIX_MEMALIGN +_GL_WARN_ON_USE (posix_memalign, "posix_memalign is not portable - " + "use gnulib module posix_memalign for portability"); +# endif +#endif + +#if 0 +/* Return an FD open to the master side of a pseudo-terminal. Flags should + include O_RDWR, and may also include O_NOCTTY. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef posix_openpt +# define posix_openpt rpl_posix_openpt +# endif +_GL_FUNCDECL_RPL (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (posix_openpt, int, (int flags)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (posix_openpt); +# endif +#elif defined GNULIB_POSIXCHECK +# undef posix_openpt +# if HAVE_RAW_DECL_POSIX_OPENPT +_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " + "use gnulib module posix_openpt for portability"); +# endif +#endif + +#if 0 +/* Return the pathname of the pseudo-terminal slave associated with + the master FD is open on, or NULL on errors. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname +# define ptsname rpl_ptsname +# endif +_GL_FUNCDECL_RPL (ptsname, char *, (int fd), _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (ptsname, char *, (int fd)); +# else +# if !1 +_GL_FUNCDECL_SYS (ptsname, char *, (int fd), _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIASWARN (ptsname); +#elif defined GNULIB_POSIXCHECK +# undef ptsname +# if HAVE_RAW_DECL_PTSNAME +_GL_WARN_ON_USE (ptsname, "ptsname is not portable - " + "use gnulib module ptsname for portability"); +# endif +#endif + +#if 0 +/* Set the pathname of the pseudo-terminal slave associated with + the master FD is open on and return 0, or set errno and return + non-zero on errors. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname_r +# define ptsname_r rpl_ptsname_r +# endif +_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len), ); +_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len), ); +# endif +_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +# ifndef GNULIB_defined_ptsname_r +# define GNULIB_defined_ptsname_r (!1 || 0) +# endif +_GL_CXXALIASWARN (ptsname_r); +#elif defined GNULIB_POSIXCHECK +# undef ptsname_r +# if HAVE_RAW_DECL_PTSNAME_R +_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " + "use gnulib module ptsname_r for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv rpl_putenv +# endif +_GL_FUNCDECL_RPL (putenv, int, (char *string), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (putenv, int, (char *string)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv _putenv +# endif +_GL_CXXALIAS_MDA (putenv, int, (char *string)); +# elif defined __KLIBC__ +/* Need to cast, because on OS/2 kLIBC, the first parameter is + const char *string. */ +_GL_CXXALIAS_SYS_CAST (putenv, int, (char *string)); +# else +_GL_CXXALIAS_SYS (putenv, int, (char *string)); +# endif +_GL_CXXALIASWARN (putenv); +#elif 1 +/* On native Windows, map 'putenv' to '_putenv', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::putenv always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv _putenv +# endif +/* Need to cast, because on mingw, the parameter is either + 'const char *string' or 'char *string'. */ +_GL_CXXALIAS_MDA_CAST (putenv, int, (char *string)); +# elif defined __KLIBC__ +/* Need to cast, because on OS/2 kLIBC, the first parameter is + const char *string. */ +_GL_CXXALIAS_SYS_CAST (putenv, int, (char *string)); +# else +_GL_CXXALIAS_SYS (putenv, int, (char *string)); +# endif +_GL_CXXALIASWARN (putenv); +#endif + +#if 0 +/* Sort an array of NMEMB elements, starting at address BASE, each element + occupying SIZE bytes, in ascending order according to the comparison + function COMPARE. */ +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_qsort_r_fn_types +typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *); +# define GNULIB_defined_qsort_r_fn_types 1 +# endif +# ifdef __cplusplus +} +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef qsort_r +# define qsort_r rpl_qsort_r +# endif +_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, + _gl_qsort_r_compar_fn compare, + void *arg), + _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, + _gl_qsort_r_compar_fn compare, + void *arg)); +# else +# if !1 +_GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, + _gl_qsort_r_compar_fn compare, + void *arg), + _GL_ARG_NONNULL ((1, 4))); +# endif +_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, + _gl_qsort_r_compar_fn compare, + void *arg)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (qsort_r); +# endif +#elif defined GNULIB_POSIXCHECK +# undef qsort_r +# if HAVE_RAW_DECL_QSORT_R +_GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " + "use gnulib module qsort_r for portability"); +# endif +#endif + + +#if 0 || (IN_PARTED_GNULIB_TESTS && !0) +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rand +# define rand rpl_rand +# endif +_GL_FUNCDECL_RPL (rand, int, (void), ); +_GL_CXXALIAS_RPL (rand, int, (void)); +# else +_GL_CXXALIAS_SYS (rand, int, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (rand); +# endif +#endif + + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef random +# define random rpl_random +# endif +_GL_FUNCDECL_RPL (random, long, (void), ); +_GL_CXXALIAS_RPL (random, long, (void)); +# else +# if !1 +_GL_FUNCDECL_SYS (random, long, (void), ); +# endif +/* Need to cast, because on Haiku, the return type is + int. */ +_GL_CXXALIAS_SYS_CAST (random, long, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (random); +# endif +#elif defined GNULIB_POSIXCHECK +# undef random +# if HAVE_RAW_DECL_RANDOM +_GL_WARN_ON_USE (random, "random is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef srandom +# define srandom rpl_srandom +# endif +_GL_FUNCDECL_RPL (srandom, void, (unsigned int seed), ); +_GL_CXXALIAS_RPL (srandom, void, (unsigned int seed)); +# else +# if !1 +_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed), ); +# endif +/* Need to cast, because on FreeBSD, the first parameter is + unsigned long seed. */ +_GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (srandom); +# endif +#elif defined GNULIB_POSIXCHECK +# undef srandom +# if HAVE_RAW_DECL_SRANDOM +_GL_WARN_ON_USE (srandom, "srandom is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef initstate +# define initstate rpl_initstate +# endif +_GL_FUNCDECL_RPL (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); +# else +# if !1 || !1 +_GL_FUNCDECL_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size), + _GL_ARG_NONNULL ((2))); +# endif +/* Need to cast, because on FreeBSD, the first parameter is + unsigned long seed. */ +_GL_CXXALIAS_SYS_CAST (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (initstate); +# endif +#elif defined GNULIB_POSIXCHECK +# undef initstate +# if HAVE_RAW_DECL_INITSTATE +_GL_WARN_ON_USE (initstate, "initstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setstate +# define setstate rpl_setstate +# endif +_GL_FUNCDECL_RPL (setstate, char *, (char *arg_state), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setstate, char *, (char *arg_state)); +# else +# if !1 || !1 +_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state), _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter + is const char *arg_state. */ +_GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (setstate); +# endif +#elif defined GNULIB_POSIXCHECK +# undef setstate +# if HAVE_RAW_DECL_SETSTATE +_GL_WARN_ON_USE (setstate, "setstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef random_r +# define random_r rpl_random_r +# endif +_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); +# else +# if !0 +_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); +# endif +_GL_CXXALIASWARN (random_r); +#elif defined GNULIB_POSIXCHECK +# undef random_r +# if HAVE_RAW_DECL_RANDOM_R +_GL_WARN_ON_USE (random_r, "random_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef srandom_r +# define srandom_r rpl_srandom_r +# endif +_GL_FUNCDECL_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# else +# if !0 +_GL_FUNCDECL_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (srandom_r); +#elif defined GNULIB_POSIXCHECK +# undef srandom_r +# if HAVE_RAW_DECL_SRANDOM_R +_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef initstate_r +# define initstate_r rpl_initstate_r +# endif +_GL_FUNCDECL_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state), + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# else +# if !0 +_GL_FUNCDECL_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state), + _GL_ARG_NONNULL ((2, 4))); +# endif +/* Need to cast, because on Haiku, the third parameter is + unsigned long buf_size. */ +_GL_CXXALIAS_SYS_CAST (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (initstate_r); +#elif defined GNULIB_POSIXCHECK +# undef initstate_r +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setstate_r +# define setstate_r rpl_setstate_r +# endif +_GL_FUNCDECL_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# else +# if !0 +_GL_FUNCDECL_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state), + _GL_ARG_NONNULL ((1, 2))); +# endif +/* Need to cast, because on Haiku, the first parameter is + void *arg_state. */ +_GL_CXXALIAS_SYS_CAST (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (setstate_r); +#elif defined GNULIB_POSIXCHECK +# undef setstate_r +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + + +#if 1 +# if (1 && 0) \ + || (1 && 0) +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef realloc +# define realloc rpl_realloc +# endif +_GL_FUNCDECL_RPL (realloc, void *, + (void *ptr, size_t size), + _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); +# else +# if __GNUC__ >= 11 && !defined __clang__ +/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 +_GL_FUNCDECL_SYS (realloc, void *, + (void *ptr, size_t size), + _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_NODISCARD) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (realloc, void *, + (void *ptr, size_t size), + _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_NODISCARD); +# endif +# endif +_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (realloc); +# endif +#else +# if 1 \ + && (__GNUC__ >= 11 && !defined __clang__) && !defined realloc +/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 +_GL_FUNCDECL_SYS (realloc, void *, + (void *ptr, size_t size), + _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (realloc, void *, + (void *ptr, size_t size), + _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef realloc +/* Assume realloc is always declared. */ +_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " + "use gnulib module realloc-posix for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef reallocarray +# define reallocarray rpl_reallocarray +# endif +_GL_FUNCDECL_RPL (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size), + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size), + _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (reallocarray); +# endif +#elif defined GNULIB_POSIXCHECK +# undef reallocarray +# if HAVE_RAW_DECL_REALLOCARRAY +_GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " + "use gnulib module reallocarray for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define realpath rpl_realpath +# endif +_GL_FUNCDECL_RPL (realpath, char *, + (const char *restrict name, char *restrict resolved), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (realpath, char *, + (const char *restrict name, char *restrict resolved)); +# else +# if !1 +_GL_FUNCDECL_SYS (realpath, char *, + (const char *restrict name, char *restrict resolved), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (realpath, char *, + (const char *restrict name, char *restrict resolved)); +# endif +_GL_CXXALIASWARN (realpath); +#elif defined GNULIB_POSIXCHECK +# undef realpath +# if HAVE_RAW_DECL_REALPATH +_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " + "canonicalize or canonicalize-lgpl for portability"); +# endif +#endif + +#if 1 +/* Test a user response to a question. + Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ +# if !0 +_GL_FUNCDECL_SYS (rpmatch, int, (const char *response), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); +_GL_CXXALIASWARN (rpmatch); +#elif defined GNULIB_POSIXCHECK +# undef rpmatch +# if HAVE_RAW_DECL_RPMATCH +_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " + "use gnulib module rpmatch for portability"); +# endif +#endif + +#if 0 +/* Look up NAME in the environment, returning 0 in insecure situations. */ +# if !1 +_GL_FUNCDECL_SYS (secure_getenv, char *, + (char const *name), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); +_GL_CXXALIASWARN (secure_getenv); +#elif defined GNULIB_POSIXCHECK +# undef secure_getenv +# if HAVE_RAW_DECL_SECURE_GETENV +_GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " + "use gnulib module secure_getenv for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setenv +# define setenv rpl_setenv +# endif +_GL_FUNCDECL_RPL (setenv, int, + (const char *name, const char *value, int replace), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setenv, int, + (const char *name, const char *value, int replace)); +# else +# if !1 +_GL_FUNCDECL_SYS (setenv, int, + (const char *name, const char *value, int replace), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setenv, int, + (const char *name, const char *value, int replace)); +# endif +# if !(0 && !1) +_GL_CXXALIASWARN (setenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef setenv +# if HAVE_RAW_DECL_SETENV +_GL_WARN_ON_USE (setenv, "setenv is unportable - " + "use gnulib module setenv for portability"); +# endif +#endif + +#if 0 +/* Prints a stack trace of the current thread to standard error, + if possible. */ +# if 0 +_GL_EXTERN_C void print_stack_trace (void); +# else +# if !GNULIB_defined_print_stack_trace +# define print_stack_trace() /* nothing */ +# define GNULIB_defined_print_stack_trace 1 +# endif +# endif +#endif + +#if 0 + /* Parse a double from STRING, updating ENDP if appropriate. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtod rpl_strtod +# endif +# define GNULIB_defined_strtod_function 1 +_GL_FUNCDECL_RPL (strtod, double, + (const char *restrict str, char **restrict endp), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtod, double, + (const char *restrict str, char **restrict endp)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtod, double, + (const char *restrict str, char **restrict endp), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtod, double, + (const char *restrict str, char **restrict endp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strtod); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtod +# if HAVE_RAW_DECL_STRTOD +_GL_WARN_ON_USE (strtod, "strtod is unportable - " + "use gnulib module strtod for portability"); +# endif +#endif + +#if 0 + /* Parse a float from STRING, updating ENDP if appropriate. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtof rpl_strtof +# endif +# define GNULIB_defined_strtof_function 1 +_GL_FUNCDECL_RPL (strtof, float, + (const char *restrict str, char **restrict endp), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtof, float, + (const char *restrict str, char **restrict endp)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtof, float, + (const char *restrict str, char **restrict endp), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtof, float, + (const char *restrict str, char **restrict endp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strtof); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtof +# if HAVE_RAW_DECL_STRTOF +_GL_WARN_ON_USE (strtof, "strtof is unportable - " + "use gnulib module strtof for portability"); +# endif +#endif + +#if 0 + /* Parse a 'long double' from STRING, updating ENDP if appropriate. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtold rpl_strtold +# endif +# define GNULIB_defined_strtold_function 1 +_GL_FUNCDECL_RPL (strtold, long double, + (const char *restrict str, char **restrict endp), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtold, long double, + (const char *restrict str, char **restrict endp)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtold, long double, + (const char *restrict str, char **restrict endp), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtold, long double, + (const char *restrict str, char **restrict endp)); +# endif +_GL_CXXALIASWARN (strtold); +#elif defined GNULIB_POSIXCHECK +# undef strtold +# if HAVE_RAW_DECL_STRTOLD +_GL_WARN_ON_USE (strtold, "strtold is unportable - " + "use gnulib module strtold for portability"); +# endif +#endif + +#if 0 +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LONG_MAX or LONG_MIN, and errno is set + to ERANGE. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtol rpl_strtol +# endif +# define GNULIB_defined_strtol_function 1 +_GL_FUNCDECL_RPL (strtol, long, + (const char *restrict string, char **restrict endptr, + int base), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtol, long, + (const char *restrict string, char **restrict endptr, + int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtol, long, + (const char *restrict string, char **restrict endptr, + int base), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtol, long, + (const char *restrict string, char **restrict endptr, + int base)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strtol); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtol +# if HAVE_RAW_DECL_STRTOL +_GL_WARN_ON_USE (strtol, "strtol is unportable - " + "use gnulib module strtol for portability"); +# endif +#endif + +#if 1 +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set + to ERANGE. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtoll rpl_strtoll +# endif +# define GNULIB_defined_strtoll_function 1 +_GL_FUNCDECL_RPL (strtoll, long long, + (const char *restrict string, char **restrict endptr, + int base), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoll, long long, + (const char *restrict string, char **restrict endptr, + int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtoll, long long, + (const char *restrict string, char **restrict endptr, + int base), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoll, long long, + (const char *restrict string, char **restrict endptr, + int base)); +# endif +_GL_CXXALIASWARN (strtoll); +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# if HAVE_RAW_DECL_STRTOLL +_GL_WARN_ON_USE (strtoll, "strtoll is unportable - " + "use gnulib module strtoll for portability"); +# endif +#endif + +#if 0 +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULONG_MAX, and errno is set to ERANGE. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtoul rpl_strtoul +# endif +# define GNULIB_defined_strtoul_function 1 +_GL_FUNCDECL_RPL (strtoul, unsigned long, + (const char *restrict string, char **restrict endptr, + int base), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoul, unsigned long, + (const char *restrict string, char **restrict endptr, + int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtoul, unsigned long, + (const char *restrict string, char **restrict endptr, + int base), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoul, unsigned long, + (const char *restrict string, char **restrict endptr, + int base)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strtoul); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtoul +# if HAVE_RAW_DECL_STRTOUL +_GL_WARN_ON_USE (strtoul, "strtoul is unportable - " + "use gnulib module strtoul for portability"); +# endif +#endif + +#if 1 +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULLONG_MAX, and errno is set to + ERANGE. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtoull rpl_strtoull +# endif +# define GNULIB_defined_strtoull_function 1 +_GL_FUNCDECL_RPL (strtoull, unsigned long long, + (const char *restrict string, char **restrict endptr, + int base), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoull, unsigned long long, + (const char *restrict string, char **restrict endptr, + int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtoull, unsigned long long, + (const char *restrict string, char **restrict endptr, + int base), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoull, unsigned long long, + (const char *restrict string, char **restrict endptr, + int base)); +# endif +_GL_CXXALIASWARN (strtoull); +#elif defined GNULIB_POSIXCHECK +# undef strtoull +# if HAVE_RAW_DECL_STRTOULL +_GL_WARN_ON_USE (strtoull, "strtoull is unportable - " + "use gnulib module strtoull for portability"); +# endif +#endif + +#if 0 +/* Unlock the slave side of the pseudo-terminal whose master side is specified + by FD, so that it can be opened. */ +# if !1 +_GL_FUNCDECL_SYS (unlockpt, int, (int fd), ); +# endif +_GL_CXXALIAS_SYS (unlockpt, int, (int fd)); +_GL_CXXALIASWARN (unlockpt); +#elif defined GNULIB_POSIXCHECK +# undef unlockpt +# if HAVE_RAW_DECL_UNLOCKPT +_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " + "use gnulib module unlockpt for portability"); +# endif +#endif + +#if IN_PARTED_GNULIB_TESTS +/* Remove the variable NAME from the environment. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unsetenv +# define unsetenv rpl_unsetenv +# endif +_GL_FUNCDECL_RPL (unsetenv, int, (const char *name), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); +# else +# if !1 +_GL_FUNCDECL_SYS (unsetenv, int, (const char *name), _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); +# endif +# if !(0 && !1) +_GL_CXXALIASWARN (unsetenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef unsetenv +# if HAVE_RAW_DECL_UNSETENV +_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " + "use gnulib module unsetenv for portability"); +# endif +#endif + +/* Convert a wide character to a multibyte character. */ +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctomb +# define wctomb rpl_wctomb +# endif +_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc), ); +_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); +# else +_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wctomb); +# endif +#endif + + +#endif /* _GL_STDLIB_H */ +#endif /* _GL_STDLIB_H */ +#endif diff --git a/jni/parted/lib/string.h b/jni/parted/lib/string.h new file mode 100755 index 0000000..64a208c --- /dev/null +++ b/jni/parted/lib/string.h @@ -0,0 +1,1999 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 1995-1996, 2001-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined _GL_ALREADY_INCLUDING_STRING_H +/* Special invocation convention: + - On OS X/NetBSD we have a sequence of nested includes + -> -> "string.h" + In this situation system _chk variants due to -D_FORTIFY_SOURCE + might be used after any replacements defined here. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STRING_H + +#define _GL_ALREADY_INCLUDING_STRING_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#undef _GL_ALREADY_INCLUDING_STRING_H + +#ifndef _GL_STRING_H +#define _GL_STRING_H + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* NetBSD 5.0 mis-defines NULL. */ +#include + +/* MirBSD defines mbslen as a macro. */ +#if 0 && defined __MirBSD__ +# include +#endif + +/* NetBSD 5.0 declares strsignal in , not in . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ + && ! defined __GLIBC__ +# include +#endif + +/* AIX 7.2 and Android 13 declare ffsl and ffsll in , not in + . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if ((0 || 0 || defined GNULIB_POSIXCHECK) \ + && (defined _AIX || defined __ANDROID__)) \ + && ! defined __GLIBC__ +# include +#endif + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 && !defined __clang__ +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that + can be freed via 'free'; it can be used only after declaring 'free'. */ +/* Applies to: functions. Cannot be used on inline functions. */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# if defined __cplusplus && defined __GNUC__ && !defined __clang__ +/* Work around GCC bug */ +# define _GL_ATTRIBUTE_DEALLOC_FREE \ + _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) +# else +# define _GL_ATTRIBUTE_DEALLOC_FREE \ + _GL_ATTRIBUTE_DEALLOC (free, 1) +# endif +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +# if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major__ >= 4 +# if __cplusplus >= 201103L +# define _GL_ATTRIBUTE_NOTHROW noexcept (true) +# else +# define _GL_ATTRIBUTE_NOTHROW throw () +# endif +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# else +# if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# endif +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though may not have + been included yet. */ +#if 1 +# if (1 && !defined free \ + && !(defined __cplusplus && defined GNULIB_NAMESPACE)) +/* We can't do '#define free rpl_free' here. */ +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void rpl_free (void *) _GL_ATTRIBUTE_NOTHROW; +# else +_GL_EXTERN_C void rpl_free (void *); +# endif +# undef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) +# else +# if defined _MSC_VER && !defined free +_GL_EXTERN_C +# if defined _DLL + __declspec (dllimport) +# endif + void __cdecl free (void *); +# else +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW; +# else +_GL_EXTERN_C void free (void *); +# endif +# endif +# endif +#else +# if defined _MSC_VER && !defined free +_GL_EXTERN_C +# if defined _DLL + __declspec (dllimport) +# endif + void __cdecl free (void *); +# else +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW; +# else +_GL_EXTERN_C void free (void *); +# endif +# endif +#endif + +/* Clear a block of memory. The compiler will not delete a call to + this function, even if the block is dead after the call. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (explicit_bzero, void, + (void *__dest, size_t __n), _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); +_GL_CXXALIASWARN (explicit_bzero); +#elif defined GNULIB_POSIXCHECK +# undef explicit_bzero +# if HAVE_RAW_DECL_EXPLICIT_BZERO +_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " + "use gnulib module explicit_bzero for portability"); +# endif +#endif + +/* Find the index of the least-significant set bit. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (ffsl, int, (long int i), ); +# endif +_GL_CXXALIAS_SYS (ffsl, int, (long int i)); +_GL_CXXALIASWARN (ffsl); +#elif defined GNULIB_POSIXCHECK +# undef ffsl +# if HAVE_RAW_DECL_FFSL +_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); +# endif +#endif + + +/* Find the index of the least-significant set bit. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define ffsll rpl_ffsll +# endif +_GL_FUNCDECL_RPL (ffsll, int, (long long int i), ); +_GL_CXXALIAS_RPL (ffsll, int, (long long int i)); +# else +# if !1 +_GL_FUNCDECL_SYS (ffsll, int, (long long int i), ); +# endif +_GL_CXXALIAS_SYS (ffsll, int, (long long int i)); +# endif +_GL_CXXALIASWARN (ffsll); +#elif defined GNULIB_POSIXCHECK +# undef ffsll +# if HAVE_RAW_DECL_FFSLL +_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); +# endif +#endif + + +#if 1 +/* On native Windows, map 'memccpy' to '_memccpy', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::memccpy always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef memccpy +# define memccpy _memccpy +# endif +_GL_CXXALIAS_MDA (memccpy, void *, + (void *dest, const void *src, int c, size_t n)); +# else +_GL_CXXALIAS_SYS (memccpy, void *, + (void *dest, const void *src, int c, size_t n)); +# endif +_GL_CXXALIASWARN (memccpy); +#endif + + +/* Return the first instance of C within N bytes of S, or NULL. */ +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef memchr +# define memchr rpl_memchr +# endif +_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); +# else + /* On some systems, this function is defined as an overloaded function: + extern "C" { const void * std::memchr (const void *, int, size_t); } + extern "C++" { void * std::memchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memchr, + void *, (void const *__s, int __c, size_t __n), + void const *, (void const *__s, int __c, size_t __n)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (memchr, void *, + (void *__s, int __c, size_t __n) + _GL_ATTRIBUTE_NOTHROW); +_GL_CXXALIASWARN1 (memchr, void const *, + (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_NOTHROW); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (memchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memchr +/* Assume memchr is always declared. */ +_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " + "use gnulib module memchr for portability" ); +#endif + +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memmem rpl_memmem +# endif +_GL_FUNCDECL_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# endif +_GL_CXXALIASWARN (memmem); +#elif defined GNULIB_POSIXCHECK +# undef memmem +# if HAVE_RAW_DECL_MEMMEM +_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " + "use gnulib module memmem-simple for portability, " + "and module memmem for speed" ); +# endif +#endif + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mempcpy +# define mempcpy rpl_mempcpy +# endif +_GL_FUNCDECL_RPL (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n)); +# else +# if !1 +_GL_FUNCDECL_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mempcpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mempcpy +# if HAVE_RAW_DECL_MEMPCPY +_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " + "use gnulib module mempcpy for portability"); +# endif +#endif + +/* Search backwards through a block for a byte (specified as an int). */ +#if IN_PARTED_GNULIB_TESTS +# if ! 1 +_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::memrchr (const void *, int, size_t); } + extern "C++" { void * std::memrchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memrchr, + void *, (void const *, int, size_t), + void const *, (void const *, int, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (memrchr, void *, + (void *, int, size_t) + _GL_ATTRIBUTE_NOTHROW); +_GL_CXXALIASWARN1 (memrchr, void const *, + (void const *, int, size_t) + _GL_ATTRIBUTE_NOTHROW); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (memrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memrchr +# if HAVE_RAW_DECL_MEMRCHR +_GL_WARN_ON_USE (memrchr, "memrchr is unportable - " + "use gnulib module memrchr for portability"); +# endif +#endif + +/* Overwrite a block of memory. The compiler will not optimize + effects away, even if the block is dead after the call. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef memset_explicit +# define memset_explicit rpl_memset_explicit +# endif +_GL_FUNCDECL_RPL (memset_explicit, void *, + (void *__dest, int __c, size_t __n), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (memset_explicit, void *, (void *__dest, int __c, size_t __n)); +# else +# if !1 +_GL_FUNCDECL_SYS (memset_explicit, void *, + (void *__dest, int __c, size_t __n), _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (memset_explicit, void *, (void *__dest, int __c, size_t __n)); +# endif +_GL_CXXALIASWARN (memset_explicit); +#elif defined GNULIB_POSIXCHECK +# undef memset_explicit +# if HAVE_RAW_DECL_MEMSET_EXPLICIT +_GL_WARN_ON_USE (memset_explicit, "memset_explicit is unportable - " + "use gnulib module memset_explicit for portability"); +# endif +#endif + +/* Find the first occurrence of C in S. More efficient than + memchr(S,C,N), at the expense of undefined behavior if C does not + occur within N bytes. */ +#if 1 +# if ! 0 +_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::rawmemchr (const void *, int); } + extern "C++" { void * std::rawmemchr (void *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (rawmemchr, + void *, (void const *__s, int __c_in), + void const *, (void const *__s, int __c_in)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (rawmemchr, void *, + (void *__s, int __c_in) + _GL_ATTRIBUTE_NOTHROW); +_GL_CXXALIASWARN1 (rawmemchr, void const *, + (void const *__s, int __c_in) + _GL_ATTRIBUTE_NOTHROW); +# else +_GL_CXXALIASWARN (rawmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rawmemchr +# if HAVE_RAW_DECL_RAWMEMCHR +_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " + "use gnulib module rawmemchr for portability"); +# endif +#endif + +/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef stpcpy +# define stpcpy rpl_stpcpy +# endif +_GL_FUNCDECL_RPL (stpcpy, char *, + (char *restrict __dst, char const *restrict __src), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (stpcpy, char *, + (char *restrict __dst, char const *restrict __src)); +# else +# if !1 +_GL_FUNCDECL_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (stpcpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef stpcpy +# if HAVE_RAW_DECL_STPCPY +_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " + "use gnulib module stpcpy for portability"); +# endif +#endif + +/* Copy no more than N bytes of SRC to DST, returning a pointer past the + last non-NUL byte written into DST. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef stpncpy +# define stpncpy rpl_stpncpy +# endif +_GL_FUNCDECL_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (stpncpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef stpncpy +# if HAVE_RAW_DECL_STPNCPY +_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " + "use gnulib module stpncpy for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strchr +/* Assume strchr is always declared. */ +_GL_WARN_ON_USE_CXX (strchr, + const char *, char *, (const char *, int), + "strchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbschr if you care about internationalization"); +#endif + +/* Find the first occurrence of C in S or the final NUL byte. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strchrnul rpl_strchrnul +# endif +_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strchrnul, char *, + (const char *str, int ch)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * std::strchrnul (const char *, int); } + extern "C++" { char * std::strchrnul (char *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (strchrnul, + char *, (char const *__s, int __c_in), + char const *, (char const *__s, int __c_in)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (strchrnul, char *, + (char *__s, int __c_in) + _GL_ATTRIBUTE_NOTHROW); +_GL_CXXALIASWARN1 (strchrnul, char const *, + (char const *__s, int __c_in) + _GL_ATTRIBUTE_NOTHROW); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (strchrnul); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strchrnul +# if HAVE_RAW_DECL_STRCHRNUL +_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " + "use gnulib module strchrnul for portability"); +# endif +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup rpl_strdup +# endif +_GL_FUNCDECL_RPL (strdup, char *, + (char const *__s), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup _strdup +# endif +_GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); +# else +# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup + /* strdup exists as a function and as a macro. Get rid of the macro. */ +# undef strdup +# endif +# if (!1 || (__GNUC__ >= 11 && !defined __clang__)) \ + && !defined strdup +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (strdup, char *, + (char const *__s), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (strdup, char *, + (char const *__s), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); +# endif +_GL_CXXALIASWARN (strdup); +#else +# if (__GNUC__ >= 11 && !defined __clang__) && !defined strdup +/* For -Wmismatched-dealloc: Associate strdup with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (strdup, char *, + (char const *__s), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (strdup, char *, + (char const *__s), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef strdup +# if HAVE_RAW_DECL_STRDUP +_GL_WARN_ON_USE (strdup, "strdup is unportable - " + "use gnulib module strdup for portability"); +# endif +# elif 1 +/* On native Windows, map 'creat' to '_creat', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::strdup always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup _strdup +# endif +_GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); +# else +# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup +# undef strdup +# endif +_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); +# endif +_GL_CXXALIASWARN (strdup); +# endif +#endif + +/* Append no more than N characters from SRC onto DEST. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strncat +# define strncat rpl_strncat +# endif +_GL_FUNCDECL_RPL (strncat, char *, + (char *restrict dest, const char *restrict src, size_t n), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strncat, char *, + (char *restrict dest, const char *restrict src, size_t n)); +# else +_GL_CXXALIAS_SYS (strncat, char *, + (char *restrict dest, const char *restrict src, size_t n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strncat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strncat +# if HAVE_RAW_DECL_STRNCAT +_GL_WARN_ON_USE (strncat, "strncat is unportable - " + "use gnulib module strncat for portability"); +# endif +#endif + +/* Return a newly allocated copy of at most N bytes of STRING. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strndup +# define strndup rpl_strndup +# endif +_GL_FUNCDECL_RPL (strndup, char *, + (char const *__s, size_t __n), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); +# else +# if !1 \ + || ((__GNUC__ >= 11 && !defined __clang__) && !defined strndup) +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (strndup, char *, + (char const *__s, size_t __n), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (strndup, char *, + (char const *__s, size_t __n), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); +# endif +_GL_CXXALIASWARN (strndup); +#else +# if (__GNUC__ >= 11 && !defined __clang__) && !defined strndup +/* For -Wmismatched-dealloc: Associate strndup with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (strndup, char *, + (char const *__s, size_t __n), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (strndup, char *, + (char const *__s, size_t __n), + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef strndup +# if HAVE_RAW_DECL_STRNDUP +_GL_WARN_ON_USE (strndup, "strndup is unportable - " + "use gnulib module strndup for portability"); +# endif +# endif +#endif + +/* Find the length (number of bytes) of STRING, but scan at most + MAXLEN bytes. If no '\0' terminator is found in that many bytes, + return MAXLEN. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strnlen +# define strnlen rpl_strnlen +# endif +_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); +# endif +_GL_CXXALIASWARN (strnlen); +#elif defined GNULIB_POSIXCHECK +# undef strnlen +# if HAVE_RAW_DECL_STRNLEN +_GL_WARN_ON_USE (strnlen, "strnlen is unportable - " + "use gnulib module strnlen for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strcspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strcspn +/* Assume strcspn is always declared. */ +_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbscspn if you care about internationalization"); +#endif + +/* Find the first occurrence in S of any character in ACCEPT. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const char * strpbrk (const char *, const char *); } + extern "C++" { char * strpbrk (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strpbrk, + char *, (char const *__s, char const *__accept), + const char *, (char const *__s, char const *__accept)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (strpbrk, char *, + (char *__s, char const *__accept) + _GL_ATTRIBUTE_NOTHROW); +_GL_CXXALIASWARN1 (strpbrk, char const *, + (char const *__s, char const *__accept) + _GL_ATTRIBUTE_NOTHROW); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (strpbrk); +# endif +# if defined GNULIB_POSIXCHECK +/* strpbrk() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strpbrk +_GL_WARN_ON_USE_CXX (strpbrk, + const char *, char *, (const char *, const char *), + "strpbrk cannot work correctly on character strings " + "in multibyte locales - " + "use mbspbrk if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strpbrk +# if HAVE_RAW_DECL_STRPBRK +_GL_WARN_ON_USE_CXX (strpbrk, + const char *, char *, (const char *, const char *), + "strpbrk is unportable - " + "use gnulib module strpbrk for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it cannot work with multibyte strings. */ +# undef strspn +/* Assume strspn is always declared. */ +_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbsspn if you care about internationalization"); +#endif + +#if defined GNULIB_POSIXCHECK +/* strrchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strrchr +/* Assume strrchr is always declared. */ +_GL_WARN_ON_USE_CXX (strrchr, + const char *, char *, (const char *, int), + "strrchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbsrchr if you care about internationalization"); +#endif + +/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP + to point to the next char after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of strtok() that is multithread-safe and supports + empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strtok_r(). */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim)); +_GL_CXXALIASWARN (strsep); +# if defined GNULIB_POSIXCHECK +# undef strsep +_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " + "in multibyte locales - " + "use mbssep if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsep +# if HAVE_RAW_DECL_STRSEP +_GL_WARN_ON_USE (strsep, "strsep is unportable - " + "use gnulib module strsep for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strstr rpl_strstr +# endif +_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); +# else + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strstr (const char *, const char *); } + extern "C++" { char * strstr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strstr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (strstr, char *, + (char *haystack, const char *needle) + _GL_ATTRIBUTE_NOTHROW); +_GL_CXXALIASWARN1 (strstr, const char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_NOTHROW); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (strstr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strstr() does not work with multibyte strings if the locale encoding is + different from UTF-8: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strstr +/* Assume strstr is always declared. */ +_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " + "work correctly on character strings in most " + "multibyte locales - " + "use mbsstr if you care about internationalization, " + "or use strstr if you care about speed"); +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strcasestr rpl_strcasestr +# endif +_GL_FUNCDECL_RPL (strcasestr, char *, + (const char *haystack, const char *needle), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strcasestr, char *, + (const char *haystack, const char *needle)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strcasestr, char *, + (const char *haystack, const char *needle), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strcasestr (const char *, const char *); } + extern "C++" { char * strcasestr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strcasestr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (strcasestr, char *, + (char *haystack, const char *needle) + _GL_ATTRIBUTE_NOTHROW); +_GL_CXXALIASWARN1 (strcasestr, const char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_NOTHROW); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (strcasestr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strcasestr() does not work with multibyte strings: + It is a glibc extension, and glibc implements it only for unibyte + locales. */ +# undef strcasestr +# if HAVE_RAW_DECL_STRCASESTR +_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " + "strings in multibyte locales - " + "use mbscasestr if you care about " + "internationalization, or use c-strcasestr if you want " + "a locale independent function"); +# endif +#endif + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = strtok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + This is a variant of strtok() that is multithread-safe. + + For the POSIX documentation for this function, see: + https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strsep(). */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtok_r +# define strtok_r rpl_strtok_r +# endif +_GL_FUNCDECL_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr), + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# else +# if 0 || defined GNULIB_POSIXCHECK +# undef strtok_r +# endif +# if ! 1 +_GL_FUNCDECL_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr), + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# endif +_GL_CXXALIASWARN (strtok_r); +# if defined GNULIB_POSIXCHECK +_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " + "strings in multibyte locales - " + "use mbstok_r if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtok_r +# if HAVE_RAW_DECL_STRTOK_R +_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " + "use gnulib module strtok_r for portability"); +# endif +#endif + + +/* The following functions are not specified by POSIX. They are gnulib + extensions. */ + +#if 0 +/* Return the number of multibyte characters in the character string STRING. + This considers multibyte characters, unlike strlen, which counts bytes. */ +# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ +# undef mbslen +# endif +# if 0 /* AIX, OSF/1, MirBSD define mbslen already in libc. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbslen rpl_mbslen +# endif +_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); +# else +_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbslen); +# endif +#endif + +#if 0 +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1)); +#endif + +#if 0 +/* Locate the first single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbschr); +#endif + +#if 0 +/* Locate the last single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strrchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux || defined __INTERIX +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbsrchr rpl_mbsrchr /* avoid collision with system function */ +# endif +_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbsrchr); +#endif + +#if 0 +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. + Unlike strstr(), this function works correctly in multibyte locales with + encodings different from UTF-8. */ +_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Compare the character strings S1 and S2, ignoring case, returning less than, + equal to or greater than zero if S1 is lexicographically less than, equal to + or greater than S2. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! + Unlike strcasecmp(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Compare the initial segment of the character string S1 consisting of at most + N characters with the initial segment of the character string S2 consisting + of at most N characters, ignoring case, returning less than, equal to or + greater than zero if the initial segment of S1 is lexicographically less + than, equal to or greater than the initial segment of S2. + Note: This function may, in multibyte locales, return 0 for initial segments + of different lengths! + Unlike strncasecmp(), this function works correctly in multibyte locales. + But beware that N is not a byte count but a character count! */ +_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Compare the initial segment of the character string STRING consisting of + at most mbslen (PREFIX) characters with the character string PREFIX, + ignoring case. If the two match, return a pointer to the first byte + after this prefix in STRING. Otherwise, return NULL. + Note: This function may, in multibyte locales, return non-NULL if STRING + is of smaller length than PREFIX! + Unlike strncasecmp(), this function works correctly in multibyte + locales. */ +_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK, using case-insensitive comparison. + Note: This function may, in multibyte locales, return success even if + strlen (haystack) < strlen (needle) ! + Unlike strcasestr(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strcspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the pointer to it, or NULL if none + exists. + Unlike strpbrk(), this function works correctly in multibyte locales. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); +# else +_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); +# endif +_GL_CXXALIASWARN (mbspbrk); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + not in the character string REJECT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +_GL_EXTERN_C char * mbssep (char **stringp, const char *delim) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Parse the character string STRING into tokens separated by characters in + the character string DELIM. + If STRING is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = mbstok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ +_GL_EXTERN_C char * mbstok_r (char *restrict string, const char *delim, + char **save_ptr) + _GL_ARG_NONNULL ((2, 3)); +#endif + +/* Map any int, typically from errno, into an error message. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror +# define strerror rpl_strerror +# endif +_GL_FUNCDECL_RPL (strerror, char *, (int), ); +_GL_CXXALIAS_RPL (strerror, char *, (int)); +# else +_GL_CXXALIAS_SYS (strerror, char *, (int)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strerror); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror +/* Assume strerror is always declared. */ +_GL_WARN_ON_USE (strerror, "strerror is unportable - " + "use gnulib module strerror to guarantee non-NULL result"); +#endif + +/* Map any int, typically from errno, into an error message. Multithread-safe. + Uses the POSIX declaration, not the glibc declaration. */ +#if IN_PARTED_GNULIB_TESTS +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror_r +# define strerror_r rpl_strerror_r +# endif +_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# else +# if !1 +_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# endif +# if __GLIBC__ >= 2 && 1 +_GL_CXXALIASWARN (strerror_r); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror_r +# if HAVE_RAW_DECL_STRERROR_R +_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " + "use gnulib module strerror_r-posix for portability"); +# endif +#endif + +/* Return the name of the system error code ERRNUM. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerrorname_np +# define strerrorname_np rpl_strerrorname_np +# endif +_GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum), ); +_GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum)); +# else +# if !1 +_GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum), ); +# endif +_GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum)); +# endif +_GL_CXXALIASWARN (strerrorname_np); +#elif defined GNULIB_POSIXCHECK +# undef strerrorname_np +# if HAVE_RAW_DECL_STRERRORNAME_NP +_GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - " + "use gnulib module strerrorname_np for portability"); +# endif +#endif + +/* Return an abbreviation string for the signal number SIG. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (sigabbrev_np, const char *, (int sig), ); +# endif +_GL_CXXALIAS_SYS (sigabbrev_np, const char *, (int sig)); +_GL_CXXALIASWARN (sigabbrev_np); +#elif defined GNULIB_POSIXCHECK +# undef sigabbrev_np +# if HAVE_RAW_DECL_SIGABBREV_NP +_GL_WARN_ON_USE (sigabbrev_np, "sigabbrev_np is unportable - " + "use gnulib module sigabbrev_np for portability"); +# endif +#endif + +/* Return an English description string for the signal number SIG. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (sigdescr_np, const char *, (int sig), ); +# endif +_GL_CXXALIAS_SYS (sigdescr_np, const char *, (int sig)); +_GL_CXXALIASWARN (sigdescr_np); +#elif defined GNULIB_POSIXCHECK +# undef sigdescr_np +# if HAVE_RAW_DECL_SIGDESCR_NP +_GL_WARN_ON_USE (sigdescr_np, "sigdescr_np is unportable - " + "use gnulib module sigdescr_np for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strsignal rpl_strsignal +# endif +_GL_FUNCDECL_RPL (strsignal, char *, (int __sig), ); +_GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strsignal, char *, (int __sig), ); +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is + 'const char *'. */ +_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); +# endif +_GL_CXXALIASWARN (strsignal); +#elif defined GNULIB_POSIXCHECK +# undef strsignal +# if HAVE_RAW_DECL_STRSIGNAL +_GL_WARN_ON_USE (strsignal, "strsignal is unportable - " + "use gnulib module strsignal for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strverscmp rpl_strverscmp +# endif +_GL_FUNCDECL_RPL (strverscmp, int, (const char *, const char *), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strverscmp, int, (const char *, const char *)); +# else +# if !1 +_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *), + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); +# endif +_GL_CXXALIASWARN (strverscmp); +#elif defined GNULIB_POSIXCHECK +# undef strverscmp +# if HAVE_RAW_DECL_STRVERSCMP +_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " + "use gnulib module strverscmp for portability"); +# endif +#endif + + +#endif /* _GL_STRING_H */ +#endif /* _GL_STRING_H */ +#endif diff --git a/jni/parted/lib/sys/random.h b/jni/parted/lib/sys/random.h new file mode 100755 index 0000000..f812a72 --- /dev/null +++ b/jni/parted/lib/sys/random.h @@ -0,0 +1,643 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for . + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +# if __GNUC__ >= 3 +#pragma GCC system_header +# endif + + +#ifndef _GL_SYS_RANDOM_H + +#if 1 + +/* On uClibc < 1.0.35, assumes prior inclusion of . + Do not use __UCLIBC__ here, as it might not be defined yet. + But avoid namespace pollution on glibc systems. */ +# ifndef __GLIBC__ +# include +# endif +/* On Mac OS X 10.5, assumes prior inclusion of . + On Max OS X 10.13, assumes prior inclusion of a file that + includes , such as or . */ +# if defined __APPLE__ && defined __MACH__ /* Mac OS X */ +# include +# include +# endif + +/* The include_next requires a split double-inclusion guard. */ +# include_next + +#endif + +#ifndef _GL_SYS_RANDOM_H +#define _GL_SYS_RANDOM_H + +/* This file uses _GL_ATTRIBUTE_NODISCARD, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include + +/* Define the GRND_* constants. */ +#ifndef GRND_NONBLOCK +# define GRND_NONBLOCK 1 +# define GRND_RANDOM 2 +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Declare overridden functions. */ + + +#if 1 +/* Fill a buffer with random bytes. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getrandom +# define getrandom rpl_getrandom +# endif +_GL_FUNCDECL_RPL (getrandom, ssize_t, + (void *buffer, size_t length, unsigned int flags), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (getrandom, ssize_t, + (void *buffer, size_t length, unsigned int flags)); +# else +# if !1 +_GL_FUNCDECL_SYS (getrandom, ssize_t, + (void *buffer, size_t length, unsigned int flags), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (getrandom, ssize_t, + (void *buffer, size_t length, unsigned int flags)); +# endif +# if __GLIBC__ + (__GLIBC_MINOR__ >= 25) > 2 +_GL_CXXALIASWARN (getrandom); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getrandom +# if HAVE_RAW_DECL_GETRANDOM +_GL_WARN_ON_USE (getrandom, "getrandom is unportable - " + "use gnulib module getrandom for portability"); +# endif +#endif + + +#endif /* _GL_SYS_RANDOM_H */ +#endif /* _GL_SYS_RANDOM_H */ diff --git a/jni/parted/lib/sys/stat.h b/jni/parted/lib/sys/stat.h new file mode 100755 index 0000000..80f9430 --- /dev/null +++ b/jni/parted/lib/sys/stat.h @@ -0,0 +1,1545 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/stat.h header file. + Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ + +/* This file is supposed to be used on platforms where is + incomplete. It is intended to provide definitions and prototypes + needed by an application. Start with what the system provides. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* This file uses #include_next of a system file that defines time_t. + For the 'year2038' module to work right, needs to have been + included before. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if defined __need_system_sys_stat_h +/* Special invocation convention. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SYS_STAT_H + +/* Get nlink_t. + May also define off_t to a 64-bit type on native Windows. */ +#include + +/* Get struct timespec. */ +#include + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_SYS_STAT_H +#define _GL_SYS_STAT_H + +/* This file uses _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOTHROW, + GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +# if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major__ >= 4 +# if __cplusplus >= 201103L +# define _GL_ATTRIBUTE_NOTHROW noexcept (true) +# else +# define _GL_ATTRIBUTE_NOTHROW throw () +# endif +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# else +# if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Before doing "#define mknod rpl_mknod" below, we need to include all + headers that may declare mknod(). OS/2 kLIBC declares mknod() in + , not in . */ +#ifdef __KLIBC__ +# include +#endif + +/* Before doing "#define mkdir rpl_mkdir" below, we need to include all + headers that may declare mkdir(). Native Windows platforms declare mkdir + in and/or , not in . */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include /* mingw32, mingw64 */ +# include /* mingw64, MSVC 9 */ +#endif + +/* Native Windows platforms declare umask() in . */ +#if 0 && (defined _WIN32 && ! defined __CYGWIN__) +# include +#endif + +/* Large File Support on native Windows. */ +#if 0 +# define stat _stati64 +#endif + +/* Optionally, override 'struct stat' on native Windows. */ +#if 0 + +# undef stat +# if 1 +# define stat rpl_stat +# else +# if !GNULIB_STAT + /* Provoke a clear link error if stat() is used as a function and + module 'stat' is not in use. */ +# define stat stat_used_without_requesting_gnulib_module_stat +# endif +# endif + +# if !GNULIB_defined_struct_stat +struct stat +{ + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; +# if 0 + uid_t st_uid; +# else /* uid_t is not defined by default on native Windows. */ + short st_uid; +# endif +# if 0 + gid_t st_gid; +# else /* gid_t is not defined by default on native Windows. */ + short st_gid; +# endif + dev_t st_rdev; + off_t st_size; +# if 0 + blksize_t st_blksize; + blkcnt_t st_blocks; +# endif + +# if 0 + struct timespec st_atim; + struct timespec st_mtim; + struct timespec st_ctim; +# else + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +# endif +}; +# if 0 +# define st_atime st_atim.tv_sec +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec + /* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_TIMESPEC 1 +# endif +# define GNULIB_defined_struct_stat 1 +# endif + +/* Other possible values of st_mode. */ +# if 0 +# define _S_IFBLK 0x6000 +# endif +# if 0 +# define _S_IFLNK 0xA000 +# endif +# if 0 +# define _S_IFSOCK 0xC000 +# endif + +#endif + +#ifndef S_IFIFO +# ifdef _S_IFIFO +# define S_IFIFO _S_IFIFO +# endif +#endif + +#ifndef S_IFMT +# define S_IFMT 0170000 +#endif + +#if STAT_MACROS_BROKEN +# undef S_ISBLK +# undef S_ISCHR +# undef S_ISDIR +# undef S_ISFIFO +# undef S_ISLNK +# undef S_ISNAM +# undef S_ISMPB +# undef S_ISMPC +# undef S_ISNWK +# undef S_ISREG +# undef S_ISSOCK +#endif + +#ifndef S_ISBLK +# ifdef S_IFBLK +# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +# else +# define S_ISBLK(m) 0 +# endif +#endif + +#ifndef S_ISCHR +# ifdef S_IFCHR +# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +# else +# define S_ISCHR(m) 0 +# endif +#endif + +#ifndef S_ISDIR +# ifdef S_IFDIR +# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +# else +# define S_ISDIR(m) 0 +# endif +#endif + +#ifndef S_ISDOOR /* Solaris 2.5 and up */ +# define S_ISDOOR(m) 0 +#endif + +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(m) 0 +# endif +#endif + +#ifndef S_ISLNK +# ifdef S_IFLNK +# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +# else +# define S_ISLNK(m) 0 +# endif +#endif + +#ifndef S_ISMPB /* V7 */ +# ifdef S_IFMPB +# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) +# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) +# else +# define S_ISMPB(m) 0 +# define S_ISMPC(m) 0 +# endif +#endif + +#ifndef S_ISMPX /* AIX */ +# define S_ISMPX(m) 0 +#endif + +#ifndef S_ISNAM /* Xenix */ +# ifdef S_IFNAM +# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) +# else +# define S_ISNAM(m) 0 +# endif +#endif + +#ifndef S_ISNWK /* HP/UX */ +# ifdef S_IFNWK +# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) +# else +# define S_ISNWK(m) 0 +# endif +#endif + +#ifndef S_ISPORT /* Solaris 10 and up */ +# define S_ISPORT(m) 0 +#endif + +#ifndef S_ISREG +# ifdef S_IFREG +# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +# else +# define S_ISREG(m) 0 +# endif +#endif + +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(m) 0 +# endif +#endif + + +#ifndef S_TYPEISMQ +# define S_TYPEISMQ(p) 0 +#endif + +#ifndef S_TYPEISTMO +# define S_TYPEISTMO(p) 0 +#endif + + +#ifndef S_TYPEISSEM +# ifdef S_INSEM +# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) +# else +# define S_TYPEISSEM(p) 0 +# endif +#endif + +#ifndef S_TYPEISSHM +# ifdef S_INSHD +# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) +# else +# define S_TYPEISSHM(p) 0 +# endif +#endif + +/* high performance ("contiguous data") */ +#ifndef S_ISCTG +# define S_ISCTG(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with data */ +#ifndef S_ISOFD +# define S_ISOFD(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with no data */ +#ifndef S_ISOFL +# define S_ISOFL(p) 0 +#endif + +/* 4.4BSD whiteout */ +#ifndef S_ISWHT +# define S_ISWHT(m) 0 +#endif + +/* If any of the following are undefined, + define them to their de facto standard values. */ +#if !S_ISUID +# define S_ISUID 04000 +#endif +#if !S_ISGID +# define S_ISGID 02000 +#endif + +/* S_ISVTX is a common extension to POSIX. */ +#ifndef S_ISVTX +# define S_ISVTX 01000 +#endif + +#if !S_IRUSR && S_IREAD +# define S_IRUSR S_IREAD +#endif +#if !S_IRUSR +# define S_IRUSR 00400 +#endif +#if !S_IRGRP +# define S_IRGRP (S_IRUSR >> 3) +#endif +#if !S_IROTH +# define S_IROTH (S_IRUSR >> 6) +#endif + +#if !S_IWUSR && S_IWRITE +# define S_IWUSR S_IWRITE +#endif +#if !S_IWUSR +# define S_IWUSR 00200 +#endif +#if !S_IWGRP +# define S_IWGRP (S_IWUSR >> 3) +#endif +#if !S_IWOTH +# define S_IWOTH (S_IWUSR >> 6) +#endif + +#if !S_IXUSR && S_IEXEC +# define S_IXUSR S_IEXEC +#endif +#if !S_IXUSR +# define S_IXUSR 00100 +#endif +#if !S_IXGRP +# define S_IXGRP (S_IXUSR >> 3) +#endif +#if !S_IXOTH +# define S_IXOTH (S_IXUSR >> 6) +#endif + +#if !S_IRWXU +# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) +#endif +#if !S_IRWXG +# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) +#endif +#if !S_IRWXO +# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) +#endif + +/* Although S_IXUGO and S_IRWXUGO are not specified by POSIX and are + not implemented in GNU/Linux, some Gnulib-using apps use the macros. */ +#if !S_IXUGO +# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) +#endif +#ifndef S_IRWXUGO +# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) +#endif + +/* Macros for futimens and utimensat. */ +#ifndef UTIME_NOW +# define UTIME_NOW (-1) +# define UTIME_OMIT (-2) +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chmod +# define chmod rpl_chmod +# endif +_GL_FUNCDECL_RPL (chmod, int, (const char *filename, mode_t mode), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (chmod, int, (const char *filename, mode_t mode)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chmod +# define chmod _chmod +# endif +/* Need to cast, because in mingw the last argument is 'int mode'. */ +_GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode)); +# else +_GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode)); +# endif +_GL_CXXALIASWARN (chmod); +#elif defined GNULIB_POSIXCHECK +# undef chmod +# if HAVE_RAW_DECL_CHMOD +_GL_WARN_ON_USE (chmod, "chmod has portability problems - " + "use gnulib module chmod for portability"); +# endif +#elif 1 +/* On native Windows, map 'chmod' to '_chmod', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::chmod always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chmod +# define chmod _chmod +# endif +/* Need to cast, because in mingw the last argument is 'int mode'. */ +_GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode)); +# else +_GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode)); +# endif +_GL_CXXALIASWARN (chmod); +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchmodat +# define fchmodat rpl_fchmodat +# endif +_GL_FUNCDECL_RPL (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag)); +# endif +_GL_CXXALIASWARN (fchmodat); +#elif defined GNULIB_POSIXCHECK +# undef fchmodat +# if HAVE_RAW_DECL_FCHMODAT +_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fstat +# define fstat rpl_fstat +# endif +_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); +# else +_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fstat); +# endif +#elif 0 +# if !GNULIB_FSTAT +# undef fstat +# define fstat fstat_used_without_requesting_gnulib_module_fstat +# endif +#elif 0 +/* Above, we define stat to _stati64. */ +# define fstat _fstati64 +#elif defined GNULIB_POSIXCHECK +# undef fstat +# if HAVE_RAW_DECL_FSTAT +_GL_WARN_ON_USE (fstat, "fstat has portability problems - " + "use gnulib module fstat for portability"); +# endif +#endif + + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fstatat +# define fstatat rpl_fstatat +# endif +_GL_FUNCDECL_RPL (fstatat, int, + (int fd, char const *restrict name, struct stat *restrict st, + int flags), + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (fstatat, int, + (int fd, char const *restrict name, struct stat *restrict st, + int flags)); +# else +# if !1 +_GL_FUNCDECL_SYS (fstatat, int, + (int fd, char const *restrict name, struct stat *restrict st, + int flags), + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (fstatat, int, + (int fd, char const *restrict name, struct stat *restrict st, + int flags)); +# endif +_GL_CXXALIASWARN (fstatat); +#elif 0 +# if !GNULIB_FSTATAT +# undef fstatat +# define fstatat fstatat_used_without_requesting_gnulib_module_fstatat +# endif +#elif defined GNULIB_POSIXCHECK +# undef fstatat +# if HAVE_RAW_DECL_FSTATAT +_GL_WARN_ON_USE (fstatat, "fstatat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 0 +/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens + implementation relies on futimesat, which on Solaris 10 makes an invocation + to futimens that is meant to invoke the libc's futimens(), not gnulib's + futimens(). */ +# if 0 || (!1 && defined __sun) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef futimens +# define futimens rpl_futimens +# endif +_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]), ); +_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); +# else +# if !1 +_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]), ); +# endif +_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); +# endif +# if __GLIBC__ >= 2 && 1 +_GL_CXXALIASWARN (futimens); +# endif +#elif defined GNULIB_POSIXCHECK +# undef futimens +# if HAVE_RAW_DECL_FUTIMENS +_GL_WARN_ON_USE (futimens, "futimens is not portable - " + "use gnulib module futimens for portability"); +# endif +#endif + + +#if 0 +# if !1 +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (getumask, mode_t, (void), ); +# endif +# endif +_GL_CXXALIAS_SYS (getumask, mode_t, (void)); +# if 1 +_GL_CXXALIASWARN (getumask); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getumask +# if HAVE_RAW_DECL_GETUMASK +_GL_WARN_ON_USE (getumask, "getumask is not portable - " + "use gnulib module getumask for portability"); +# endif +#endif + + +#if 0 +/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME + denotes a symbolic link. */ +# if !1 || defined __hpux +_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); +_GL_CXXALIASWARN (lchmod); +#elif defined GNULIB_POSIXCHECK +# undef lchmod +# if HAVE_RAW_DECL_LCHMOD +_GL_WARN_ON_USE (lchmod, "lchmod is unportable - " + "use gnulib module lchmod for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkdir +# define mkdir rpl_mkdir +# endif +_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +# elif defined _WIN32 && !defined __CYGWIN__ +/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. + Additionally, it declares _mkdir (and depending on compile flags, an + alias mkdir), only in the nonstandard includes and , + which are included above. */ +# if !GNULIB_defined_rpl_mkdir +static int +rpl_mkdir (char const *name, mode_t mode) +{ + return _mkdir (name); +} +# define GNULIB_defined_rpl_mkdir 1 +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkdir +# define mkdir rpl_mkdir +# endif +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +# else +_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); +# endif +_GL_CXXALIASWARN (mkdir); +#elif 1 +/* On native Windows, map 'mkdir' to '_mkdir', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::mkdir always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !GNULIB_defined_rpl_mkdir +static int +rpl_mkdir (char const *name, mode_t mode) +{ + return _mkdir (name); +} +# define GNULIB_defined_rpl_mkdir 1 +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkdir +# define mkdir rpl_mkdir +# endif +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +# else +_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); +# endif +_GL_CXXALIASWARN (mkdir); +#elif defined GNULIB_POSIXCHECK +# undef mkdir +# if HAVE_RAW_DECL_MKDIR +_GL_WARN_ON_USE (mkdir, "mkdir does not always support two parameters - " + "use gnulib module mkdir for portability"); +# endif +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); +_GL_CXXALIASWARN (mkdirat); +#elif defined GNULIB_POSIXCHECK +# undef mkdirat +# if HAVE_RAW_DECL_MKDIRAT +_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkfifo +# define mkfifo rpl_mkfifo +# endif +_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); +# else +# if !1 +_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); +# endif +_GL_CXXALIASWARN (mkfifo); +#elif defined GNULIB_POSIXCHECK +# undef mkfifo +# if HAVE_RAW_DECL_MKFIFO +_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " + "use gnulib module mkfifo for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkfifoat +# define mkfifoat rpl_mkfifoat +# endif +_GL_FUNCDECL_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode)); +# else +# if !1 +_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mkfifoat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mkfifoat +# if HAVE_RAW_DECL_MKFIFOAT +_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " + "use gnulib module mkfifoat for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mknod +# define mknod rpl_mknod +# endif +_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); +# else +# if !1 +_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev), + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ +_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); +# endif +_GL_CXXALIASWARN (mknod); +#elif defined GNULIB_POSIXCHECK +# undef mknod +# if HAVE_RAW_DECL_MKNOD +_GL_WARN_ON_USE (mknod, "mknod is not portable - " + "use gnulib module mknod for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mknodat +# define mknodat rpl_mknodat +# endif +_GL_FUNCDECL_RPL (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev)); +# else +# if !1 +_GL_FUNCDECL_SYS (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mknodat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mknodat +# if HAVE_RAW_DECL_MKNODAT +_GL_WARN_ON_USE (mknodat, "mknodat is not portable - " + "use gnulib module mkfifoat for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !0 + /* We can't use the object-like #define stat rpl_stat, because of + struct stat. This means that rpl_stat will not be used if the user + does (stat)(a,b). Oh well. */ +# if defined _AIX && defined stat && defined _LARGE_FILES + /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, + so we have to replace stat64() instead of stat(). */ +# undef stat64 +# define stat64(name, st) rpl_stat (name, st) +# elif 0 + /* Above, we define stat to _stati64. */ +# if defined __MINGW32__ && defined _stati64 +# ifndef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined _stati64 +# ifdef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# else +# undef _stati64 +# define _stati64(name, st) rpl_stat (name, st) +# endif +# elif defined __MINGW32__ && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32. */ +# undef _stat32 +# define _stat32(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64i32. */ +# undef _stat64i32 +# define _stat64i32(name, st) rpl_stat (name, st) +# endif +# else /* !(_AIX || __MINGW32__ || _MSC_VER) */ +# undef stat +# define stat(name, st) rpl_stat (name, st) +# endif /* !_LARGE_FILES */ +# endif /* !0 */ +_GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf) + _GL_ARG_NONNULL ((1, 2)); +# endif +#elif 0 +/* see above: + #define stat stat_used_without_requesting_gnulib_module_stat + */ +#elif defined GNULIB_POSIXCHECK +# undef stat +# if HAVE_RAW_DECL_STAT +_GL_WARN_ON_USE (stat, "stat is unportable - " + "use gnulib module stat for portability"); +# endif +#endif + + +#if 1 +# if ! 1 +/* mingw does not support symlinks, therefore it does not have lstat. But + without links, stat does just fine. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lstat stat +# endif +_GL_CXXALIAS_RPL_1 (lstat, stat, int, + (const char *restrict name, struct stat *restrict buf)); +# elif 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lstat +# define lstat rpl_lstat +# endif +_GL_FUNCDECL_RPL (lstat, int, + (const char *restrict name, struct stat *restrict buf), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (lstat, int, + (const char *restrict name, struct stat *restrict buf)); +# else +_GL_CXXALIAS_SYS (lstat, int, + (const char *restrict name, struct stat *restrict buf)); +# endif +# if 1 +_GL_CXXALIASWARN (lstat); +# endif +#elif 0 +# if !GNULIB_LSTAT +# undef lstat +# define lstat lstat_used_without_requesting_gnulib_module_lstat +# endif +#elif defined GNULIB_POSIXCHECK +# undef lstat +# if HAVE_RAW_DECL_LSTAT +_GL_WARN_ON_USE (lstat, "lstat is unportable - " + "use gnulib module lstat for portability"); +# endif +#endif + + +#if 1 +/* On native Windows, map 'umask' to '_umask', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::umask always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef umask +# define umask _umask +# endif +/* Need to cast, because in mingw the last argument is 'int mode'. */ +_GL_CXXALIAS_MDA_CAST (umask, mode_t, (mode_t mask)); +# else +_GL_CXXALIAS_SYS (umask, mode_t, (mode_t mask)); +# endif +_GL_CXXALIASWARN (umask); +#endif + + +#if 0 +/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat + implementation relies on futimesat, which on Solaris 10 makes an invocation + to utimensat that is meant to invoke the libc's utimensat(), not gnulib's + utimensat(). */ +# if 0 || (!1 && defined __sun) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef utimensat +# define utimensat rpl_utimensat +# endif +_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag)); +# endif +# if __GLIBC__ >= 2 && 1 +_GL_CXXALIASWARN (utimensat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef utimensat +# if HAVE_RAW_DECL_UTIMENSAT +_GL_WARN_ON_USE (utimensat, "utimensat is not portable - " + "use gnulib module utimensat for portability"); +# endif +#endif + + +#endif /* _GL_SYS_STAT_H */ +#endif /* _GL_SYS_STAT_H */ +#endif diff --git a/jni/parted/lib/sys/types.h b/jni/parted/lib/sys/types.h new file mode 100755 index 0000000..f8b607a --- /dev/null +++ b/jni/parted/lib/sys/types.h @@ -0,0 +1,123 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/types.h. + + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* This file uses #include_next of a system file that defines time_t. + For the 'year2038' module to work right, needs to have been + included before. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if defined _WIN32 && !defined __CYGWIN__ \ + && (defined __need_off_t || defined __need___off64_t \ + || defined __need_ssize_t || defined __need_time_t) + +/* Special invocation convention inside mingw header files. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SYS_TYPES_H + +/* The include_next requires a split double-inclusion guard. */ +# define _GL_INCLUDING_SYS_TYPES_H +#include_next +# undef _GL_INCLUDING_SYS_TYPES_H + +#ifndef _GL_SYS_TYPES_H +#define _GL_SYS_TYPES_H + +/* Override off_t if Large File Support is requested on native Windows. */ +#if 0 +/* Same as int64_t in . */ +# if defined _MSC_VER +# define off_t __int64 +# else +# define off_t long long int +# endif +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_64_BIT_OFF_T 1 +#endif + +/* Define the off64_t type. */ +#if !1 +# if !GNULIB_defined_off64_t +/* Define off64_t to int64_t always. */ +typedef long long off64_t; +# define GNULIB_defined_off64_t 1 +# endif +#endif + +/* Override dev_t and ino_t if distinguishable inodes support is requested + on native Windows. */ +#if 0 + +# if 0 == 2 +/* Experimental, not useful in Windows 10. */ + +/* Define dev_t to a 64-bit type. */ +# if !defined GNULIB_defined_dev_t +typedef unsigned long long int rpl_dev_t; +# undef dev_t +# define dev_t rpl_dev_t +# define GNULIB_defined_dev_t 1 +# endif + +/* Define ino_t to a 128-bit type. */ +# if !defined GNULIB_defined_ino_t +/* MSVC does not have a 128-bit integer type. + GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ +typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# else /* 0 == 1 */ + +/* Define ino_t to a 64-bit type. */ +# if !defined GNULIB_defined_ino_t +typedef unsigned long long int rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# endif + +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_INODES 0 + +#endif + +/* MSVC 9 defines size_t in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ +# include +#endif + +#endif /* _GL_SYS_TYPES_H */ +#endif /* _GL_SYS_TYPES_H */ +#endif /* __need_XXX */ diff --git a/jni/parted/lib/time.h b/jni/parted/lib/time.h new file mode 100755 index 0000000..cab4bc2 --- /dev/null +++ b/jni/parted/lib/time.h @@ -0,0 +1,1188 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A more-standard . + + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* This file uses #include_next of a system file that defines time_t. + For the 'year2038' module to work right, needs to have been + included before. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Don't get in the way of glibc when it includes time.h merely to + declare a few standard symbols, rather than to declare all the + symbols. (However, skip this for MinGW as it treats __need_time_t + incompatibly.) Also, Solaris 8 eventually includes itself + recursively; if that is happening, just include the system + without adding our own declarations. */ +#if (((defined __need_time_t || defined __need_clock_t \ + || defined __need_timespec) \ + && !defined __MINGW32__) \ + || defined _GL_TIME_H) + +# include_next + +#else + +# define _GL_TIME_H + +/* mingw's provides the functions asctime_r, ctime_r, gmtime_r, + localtime_r only if or has been included before. */ +# if defined __MINGW32__ +# include +# endif + +# include_next + +/* This file uses _GL_ATTRIBUTE_DEPRECATED, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + +/* NetBSD 5.0 mis-defines NULL. */ +# include + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Some systems don't define struct timespec (e.g., AIX 4.1). + Or they define it with the wrong member names or define it in + (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, + but the pthreads-win32 library defines it in . */ +# if ! 1 +# if 0 +# include +# elif 0 +# include +# elif 0 +# include +# else + +# ifdef __cplusplus +extern "C" { +# endif + +# if !GNULIB_defined_struct_timespec +# undef timespec +# define timespec rpl_timespec +struct timespec +{ + time_t tv_sec; + long int tv_nsec; +}; +# define GNULIB_defined_struct_timespec 1 +# endif + +# ifdef __cplusplus +} +# endif + +# endif +# endif + +# if !GNULIB_defined_struct_time_t_must_be_integral +/* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html + requires time_t to be an integer type, even though C99 permits floating + point. We don't know of any implementation that uses floating + point, and it is much easier to write code that doesn't have to + worry about that corner case, so we force the issue. */ +struct __time_t_must_be_integral { + unsigned int __floating_time_t_unsupported : (time_t) 1; +}; +# define GNULIB_defined_struct_time_t_must_be_integral 1 +# endif + +/* Define TIME_UTC, a positive integer constant used for timespec_get(). */ +# if ! 1 +# if !GNULIB_defined_TIME_UTC +# define TIME_UTC 1 +# define GNULIB_defined_TIME_UTC 1 +# endif +# endif + +# if 0 +/* tzname[0..1]: Abbreviated time zone names, set by the tzset() function. */ +# if NEED_DECL_TZNAME +extern +# ifdef __cplusplus + "C" +# endif + char *tzname[]; +# endif +# if defined _WIN32 && !defined __CYGWIN__ +/* On native Windows, map 'tzname' to '_tzname' etc., so that -loldnames is not + required. */ +# undef tzname +# define tzname _tzname +# endif +# endif + +/* Set *TS to the current time, and return BASE. + Upon failure, return 0. */ +# if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef timespec_get +# define timespec_get rpl_timespec_get +# endif +_GL_FUNCDECL_RPL (timespec_get, int, (struct timespec *ts, int base), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timespec_get, int, (struct timespec *ts, int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (timespec_get); +# endif +# elif defined GNULIB_POSIXCHECK +# undef timespec_get +# if HAVE_RAW_DECL_TIMESPEC_GET +_GL_WARN_ON_USE (timespec_get, "timespec_get is unportable - " + "use gnulib module timespec_get for portability"); +# endif +# endif + +/* Set *TS to the current time resolution, and return BASE. + Upon failure, return 0. */ +# if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef timespec_getres +# define timespec_getres rpl_timespec_getres +# endif +_GL_FUNCDECL_RPL (timespec_getres, int, (struct timespec *ts, int base), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timespec_getres, int, (struct timespec *ts, int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); +# endif +_GL_CXXALIASWARN (timespec_getres); +# elif defined GNULIB_POSIXCHECK +# undef timespec_getres +# if HAVE_RAW_DECL_TIMESPEC_GETRES +_GL_WARN_ON_USE (timespec_getres, "timespec_getres is unportable - " + "use gnulib module timespec_getres for portability"); +# endif +# endif + +/* Return the number of seconds that have elapsed since the Epoch. */ +# if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define time rpl_time +# endif +_GL_FUNCDECL_RPL (time, time_t, (time_t *__tp), ); +_GL_CXXALIAS_RPL (time, time_t, (time_t *__tp)); +# else +_GL_CXXALIAS_SYS (time, time_t, (time_t *__tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (time); +# endif +# elif defined GNULIB_POSIXCHECK +# undef time +# if HAVE_RAW_DECL_TIME +_GL_WARN_ON_USE (time, "time has consistency problems - " + "use gnulib module time for portability"); +# endif +# endif + +/* Sleep for at least RQTP seconds unless interrupted, If interrupted, + return -1 and store the remaining time into RMTP. See + . */ +# if IN_PARTED_GNULIB_TESTS +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define nanosleep rpl_nanosleep +# endif +_GL_FUNCDECL_RPL (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp)); +# endif +_GL_CXXALIASWARN (nanosleep); +# elif defined GNULIB_POSIXCHECK +# undef nanosleep +# if HAVE_RAW_DECL_NANOSLEEP +_GL_WARN_ON_USE (nanosleep, "nanosleep is unportable - " + "use gnulib module nanosleep for portability"); +# endif +# endif + +/* Initialize time conversion information. */ +# if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tzset +# define tzset rpl_tzset +# endif +_GL_FUNCDECL_RPL (tzset, void, (void), ); +_GL_CXXALIAS_RPL (tzset, void, (void)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tzset +# define tzset _tzset +# endif +_GL_CXXALIAS_MDA (tzset, void, (void)); +# else +_GL_CXXALIAS_SYS (tzset, void, (void)); +# endif +_GL_CXXALIASWARN (tzset); +# elif 1 +/* On native Windows, map 'tzset' to '_tzset', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::tzset always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tzset +# define tzset _tzset +# endif +_GL_CXXALIAS_MDA (tzset, void, (void)); +# else +_GL_CXXALIAS_SYS (tzset, void, (void)); +# endif +_GL_CXXALIASWARN (tzset); +# elif defined GNULIB_POSIXCHECK +# undef tzset +# if HAVE_RAW_DECL_TZSET +_GL_WARN_ON_USE (tzset, "tzset has portability problems - " + "use gnulib module tzset for portability"); +# endif +# endif + +/* Return the 'time_t' representation of TP and normalize TP. */ +# if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mktime rpl_mktime +# endif +_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); +# else +_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mktime); +# endif +# elif defined GNULIB_POSIXCHECK +# undef mktime +# if HAVE_RAW_DECL_MKTIME +_GL_WARN_ON_USE (mktime, "mktime has portability problems - " + "use gnulib module mktime for portability"); +# endif +# endif + +/* Convert TIMER to RESULT, assuming local time and UTC respectively. See + and + . */ +# if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localtime_r +# define localtime_r rpl_localtime_r +# endif +_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# endif +# if 1 +_GL_CXXALIASWARN (localtime_r); +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gmtime_r +# define gmtime_r rpl_gmtime_r +# endif +_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# endif +# if 1 +_GL_CXXALIASWARN (gmtime_r); +# endif +# elif defined GNULIB_POSIXCHECK +# undef localtime_r +# if HAVE_RAW_DECL_LOCALTIME_R +_GL_WARN_ON_USE (localtime_r, "localtime_r is unportable - " + "use gnulib module time_r for portability"); +# endif +# undef gmtime_r +# if HAVE_RAW_DECL_GMTIME_R +_GL_WARN_ON_USE (gmtime_r, "gmtime_r is unportable - " + "use gnulib module time_r for portability"); +# endif +# endif + +/* Convert TIMER to RESULT, assuming local time and UTC respectively. See + and + . */ +# if 0 || 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localtime +# define localtime rpl_localtime +# endif +_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); +# else +_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (localtime); +# endif +# elif defined GNULIB_POSIXCHECK +# undef localtime +# if HAVE_RAW_DECL_LOCALTIME +_GL_WARN_ON_USE (localtime, "localtime has portability problems - " + "use gnulib module localtime for portability"); +# endif +# endif + +# if 0 || 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gmtime +# define gmtime rpl_gmtime +# endif +_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); +# else +_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); +# endif +_GL_CXXALIASWARN (gmtime); +# endif + +/* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store + the resulting broken-down time into TM. See + . */ +# if 0 +# if ! 1 +_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, + char const *restrict __format, + struct tm *restrict __tm), + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, + char const *restrict __format, + struct tm *restrict __tm)); +_GL_CXXALIASWARN (strptime); +# elif defined GNULIB_POSIXCHECK +# undef strptime +# if HAVE_RAW_DECL_STRPTIME +_GL_WARN_ON_USE (strptime, "strptime is unportable - " + "use gnulib module strptime for portability"); +# endif +# endif + +/* Convert *TP to a date and time string. See + . */ +# if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define ctime rpl_ctime +# endif +# ifndef __cplusplus +_GL_ATTRIBUTE_DEPRECATED +# endif +_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); +# else +_GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (ctime); +# endif +# elif defined GNULIB_POSIXCHECK +/* No need to warn about portability, as a more serious warning is below. */ +# endif + +/* Convert *TP to a date and time string. See + . */ +# if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strftime rpl_strftime +# endif +_GL_FUNCDECL_RPL (strftime, size_t, + (char *restrict __buf, size_t __bufsize, + const char *restrict __fmt, const struct tm *restrict __tp), + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (strftime, size_t, + (char *restrict __buf, size_t __bufsize, + const char *restrict __fmt, const struct tm *restrict __tp)); +# else +_GL_CXXALIAS_SYS (strftime, size_t, + (char *restrict __buf, size_t __bufsize, + const char *restrict __fmt, const struct tm *restrict __tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strftime); +# endif +# elif defined GNULIB_POSIXCHECK +# undef strftime +# if HAVE_RAW_DECL_STRFTIME +_GL_WARN_ON_USE (strftime, "strftime has portability problems - " + "use gnulib module strftime-fixes for portability"); +# endif +# endif + +# if 0 +/* Functions that use a first-class time zone data type, instead of + relying on an implicit global time zone. + Inspired by NetBSD. */ + +/* Represents a time zone. + (timezone_t) NULL stands for UTC. */ +# if !0 +# if !GNULIB_defined_timezone_t +# if !0 +typedef struct tm_zone *timezone_t; +# else +typedef struct tm_zone *rpl_timezone_t; +# define timezone_t rpl_timezone_t +# endif +# define GNULIB_defined_timezone_t 1 +# endif +# endif + +/* tzalloc (name) + Returns a time zone object for the given time zone NAME. This object + represents the time zone that other functions would use it the TZ + environment variable was set to NAME. + If NAME is NULL, the result represents the time zone that other functions + would use it the TZ environment variable was unset. + May return NULL if NAME is invalid (this is platform dependent) or + upon memory allocation failure. */ +# if !0 +_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name), ); +_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); +# endif + +/* tzfree (tz) + Frees a time zone object. + The argument must have been returned by tzalloc(). */ +# if !0 +_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz), ); +_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); +# endif + +/* localtime_rz (tz, &t, &result) + Converts an absolute time T to a broken-down time RESULT, assuming the + time zone TZ. + This function is like 'localtime_r', but relies on the argument TZ instead + of an implicit global time zone. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localtime_rz +# define localtime_rz rpl_localtime_rz +# endif +_GL_FUNCDECL_RPL (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result), + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result)); +# else +# if !0 +_GL_FUNCDECL_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result), + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result)); +# endif + +/* mktime_z (tz, &tm) + Normalizes the broken-down time TM and converts it to an absolute time, + assuming the time zone TZ. Returns the absolute time. + This function is like 'mktime', but relies on the argument TZ instead + of an implicit global time zone. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mktime_z +# define mktime_z rpl_mktime_z +# endif +_GL_FUNCDECL_RPL (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __tm), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __tm)); +# else +# if !0 +_GL_FUNCDECL_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __tm), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __tm)); +# endif + +/* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z' + in the 'tm_zone' member of 'struct tm') are valid as long as + - the 'struct tm' argument is not destroyed or overwritten, + and + - the 'timezone_t' argument is not freed through tzfree(). */ + +# endif + +/* Convert TM to a time_t value, assuming UTC. */ +# if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef timegm +# define timegm rpl_timegm +# endif +_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm), _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (timegm); +# endif +# elif defined GNULIB_POSIXCHECK +# undef timegm +# if HAVE_RAW_DECL_TIMEGM +_GL_WARN_ON_USE (timegm, "timegm is unportable - " + "use gnulib module timegm for portability"); +# endif +# endif + +/* Encourage applications to avoid unsafe functions that can overrun + buffers when given outlandish struct tm values. Portable + applications should use strftime (or even sprintf) instead. */ +# if defined GNULIB_POSIXCHECK +# undef asctime +# if HAVE_RAW_DECL_ASCTIME +_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef asctime_r +# if HAVE_RAW_DECL_ASCTIME_R +_GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef ctime +# if HAVE_RAW_DECL_CTIME +_GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef ctime_r +# if HAVE_RAW_DECL_CTIME_R +_GL_WARN_ON_USE (ctime_r, "ctime_r can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# endif + +#endif diff --git a/jni/parted/lib/uchar.h b/jni/parted/lib/uchar.h new file mode 100755 index 0000000..3e1a901 --- /dev/null +++ b/jni/parted/lib/uchar.h @@ -0,0 +1,1449 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* substitute - 16-bit and 32-bit wide character types. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2019. */ + +/* + * ISO C 23 for platforms that lack it. + */ + +#ifndef _GL_UCHAR_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# if defined __HAIKU__ +/* Work around . */ +# include +# endif +/* On AIX 7.2 with xlclang++, /usr/include/uchar.h produces compilation errors + because it contains typedef definitions of char16_t and char32_t, however + char16_t and char32_t are keywords in this situation. To work around it, + define char16_t and char32_t as macros. */ +# if defined __cplusplus && defined _AIX && defined __ibmxl__ && defined __clang__ +# define char16_t gl_char16_t +# define char32_t gl_char32_t +# endif +# include_next +#endif + +#ifndef _GL_UCHAR_H +#define _GL_UCHAR_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_BEGIN_C_LINKAGE, + _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get uint_least16_t, uint_least32_t. */ +#include + +/* Get mbstate_t, size_t. */ +#include + +/* For the inline functions. */ +#include +#include + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +_GL_INLINE_HEADER_BEGIN + + +#if !(1 || (defined __cplusplus && 0)) + +/* An 8-bit variant of wchar_t. + Note: This type is only mandated by ISO C 23 or newer, and it does + denote UTF-8 units. */ +typedef unsigned char char8_t; + +#elif 1 + +typedef unsigned char gl_char8_t; +# define char8_t gl_char8_t + +#endif + +#if !(1 || (defined __cplusplus && 0)) + +/* A 16-bit variant of wchar_t. + Note: This type is only mandated by ISO C 11 or newer. In ISO C 23 + and newer, it denotes UTF-16 units; in older versions of ISO C it did + so only on platforms on which __STDC_UTF_16__ was defined. */ +typedef uint_least16_t char16_t; + +#elif 0 + +typedef uint_least16_t gl_char16_t; +# define char16_t gl_char16_t + +#endif + +#if !(1 || (defined __cplusplus && 0)) + +/* A 32-bit variant of wchar_t. + Note: This type is only mandated by ISO C 11 or newer. In ISO C 23 + and newer, it denotes UTF-32 code points; in older versions of ISO C + it did so only on platforms on which __STDC_UTF_32__ was defined. + In gnulib, we guarantee that it denotes UTF-32 code points if and + only if the module 'uchar-c23' is in use. */ +typedef uint_least32_t char32_t; + +#elif 0 + +typedef uint_least32_t gl_char32_t; +# define char32_t gl_char32_t + +#endif + +/* Define if a 'char32_t' can hold more characters than a 'wchar_t'. */ +#if 0 /* 32-bit AIX, Cygwin, native Windows */ +# define _GL_SMALL_WCHAR_T 1 +#endif + +/* Define if 'wchar_t', like 'char32_t', + - is a 32-bit type, and + - represents Unicode code points. + For this test, we can use __STDC_ISO_10646__ (defined by glibc, musl libc, + Cygwin) but need to consider _GL_SMALL_WCHAR_T, so as to exclude Cygwin. + We cannot use __STDC_UTF_16__ or __STDC_UTF_32__ + - because these macros provide info about char16_t and char32_t (not + wchar_t!), and + - because GCC >= 4.9 defines these macros on all platforms, even on + FreeBSD and Solaris. + We should better not use __STD_UTF_16__, __STD_UTF_32__ either, because + these macros are misspellings, only defined by Android's . */ +#if defined __STDC_ISO_10646__ && !_GL_SMALL_WCHAR_T +/* glibc, musl libc */ +# define _GL_WCHAR_T_IS_UCS4 1 +#endif +#if _GL_WCHAR_T_IS_UCS4 +static_assert (sizeof (char32_t) == sizeof (wchar_t)); +#endif + + +/* Convert a single-byte character to a 32-bit wide character. */ +#if IN_PARTED_GNULIB_TESTS +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_BTOC32 +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ATTRIBUTE_PURE wint_t +btoc32 (int c) +{ + return +# if 1 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + btowc (c); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (btoc32, wint_t, (int c), _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (btoc32, wint_t, (int c)); +_GL_CXXALIASWARN (btoc32); +#endif + + +/* Test a specific property of a 32-bit wide character. */ +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISALNUM +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32isalnum (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswalnum (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32isalnum, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32isalnum, int, (wint_t wc)); +_GL_CXXALIASWARN (c32isalnum); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISALPHA +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32isalpha (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswalpha (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32isalpha, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32isalpha, int, (wint_t wc)); +_GL_CXXALIASWARN (c32isalpha); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISBLANK +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32isblank (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswblank (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32isblank, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32isblank, int, (wint_t wc)); +_GL_CXXALIASWARN (c32isblank); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISCNTRL +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32iscntrl (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswcntrl (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32iscntrl, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32iscntrl, int, (wint_t wc)); +_GL_CXXALIASWARN (c32iscntrl); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISDIGIT +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32isdigit (wint_t wc) +{ + return +# if 1 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswdigit (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32isdigit, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32isdigit, int, (wint_t wc)); +_GL_CXXALIASWARN (c32isdigit); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISGRAPH +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32isgraph (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswgraph (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32isgraph, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32isgraph, int, (wint_t wc)); +_GL_CXXALIASWARN (c32isgraph); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISLOWER +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32islower (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswlower (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32islower, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32islower, int, (wint_t wc)); +_GL_CXXALIASWARN (c32islower); +#endif +#if 1 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISPRINT +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32isprint (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswprint (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32isprint, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32isprint, int, (wint_t wc)); +_GL_CXXALIASWARN (c32isprint); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISPUNCT +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32ispunct (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswpunct (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32ispunct, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32ispunct, int, (wint_t wc)); +_GL_CXXALIASWARN (c32ispunct); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISSPACE +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32isspace (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswspace (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32isspace, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32isspace, int, (wint_t wc)); +_GL_CXXALIASWARN (c32isspace); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISUPPER +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32isupper (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswupper (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32isupper, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32isupper, int, (wint_t wc)); +_GL_CXXALIASWARN (c32isupper); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISXDIGIT +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32isxdigit (wint_t wc) +{ + return +# if 1 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswxdigit (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32isxdigit, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32isxdigit, int, (wint_t wc)); +_GL_CXXALIASWARN (c32isxdigit); +#endif + + +/* Case mapping of a 32-bit wide character. */ +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32TOLOWER +_GL_BEGIN_C_LINKAGE +_GL_INLINE wint_t +c32tolower (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + towlower (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32tolower, wint_t, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32tolower, wint_t, (wint_t wc)); +_GL_CXXALIASWARN (c32tolower); +#endif +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32TOUPPER +_GL_BEGIN_C_LINKAGE +_GL_INLINE wint_t +c32toupper (wint_t wc) +{ + return +# if defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + towupper (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32toupper, wint_t, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32toupper, wint_t, (wint_t wc)); +_GL_CXXALIASWARN (c32toupper); +#endif + + +/* Number of screen columns needed for a 32-bit wide character. */ +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32WIDTH +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32width (char32_t wc) +{ + return +# if 0 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + wcwidth (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32width, int, (char32_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32width, int, (char32_t wc)); +_GL_CXXALIASWARN (c32width); +#endif + + +/* Converts a 32-bit wide character to a multibyte character. */ +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef c32rtomb +# define c32rtomb rpl_c32rtomb +# endif +_GL_FUNCDECL_RPL (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps), ); +_GL_CXXALIAS_RPL (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps), ); +# endif +_GL_CXXALIAS_SYS (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); +# endif +# if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 +_GL_CXXALIASWARN (c32rtomb); +# endif +#elif defined GNULIB_POSIXCHECK +# undef c32rtomb +# if HAVE_RAW_DECL_C32RTOMB +_GL_WARN_ON_USE (c32rtomb, "c32rtomb is not portable - " + "use gnulib module c32rtomb for portability"); +# endif +#endif + + +/* Convert a 32-bit wide string to a string. */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32SNRTOMBS +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((2)) size_t +c32snrtombs (char *dest, const char32_t **srcp, size_t srclen, size_t len, + mbstate_t *ps) +{ + return +# if 0 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + wcsnrtombs (dest, (const wchar_t **) srcp, srclen, len, ps); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32snrtombs, size_t, + (char *dest, const char32_t **srcp, size_t srclen, size_t len, + mbstate_t *ps), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (c32snrtombs, size_t, + (char *dest, const char32_t **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +_GL_CXXALIASWARN (c32snrtombs); +#endif + + +/* Convert a 32-bit wide string to a string. */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32SRTOMBS +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((2)) size_t +c32srtombs (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps) +{ + return +# if 0 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + wcsrtombs (dest, (const wchar_t **) srcp, len, ps); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32srtombs, size_t, + (char *dest, const char32_t **srcp, size_t len, + mbstate_t *ps), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (c32srtombs, size_t, + (char *dest, const char32_t **srcp, size_t len, + mbstate_t *ps)); +_GL_CXXALIASWARN (c32srtombs); +#endif + + +/* Convert a 32-bit wide string to a string. */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32STOMBS +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((2)) size_t +c32stombs (char *dest, const char32_t *src, size_t len) +{ + mbstate_t state; + + mbszero (&state); + return c32srtombs (dest, &src, len, &state); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32stombs, size_t, + (char *dest, const char32_t *src, size_t len), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (c32stombs, size_t, + (char *dest, const char32_t *src, size_t len)); +_GL_CXXALIASWARN (c32stombs); +#endif + + +/* Number of screen columns needed for a size-bounded 32-bit wide string. */ +#if 0 +# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32SWIDTH +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((1)) int +c32swidth (const char32_t *s, size_t n) +{ + return +# if 0 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + wcswidth ((const wchar_t *) s, n); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32swidth, int, (const char32_t *s, size_t n), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (c32swidth, int, (const char32_t *s, size_t n)); +_GL_CXXALIASWARN (c32swidth); +#endif + + +/* Converts a 32-bit wide character to unibyte character. + Returns the single-byte representation of WC if it exists, + or EOF otherwise. */ +#if IN_PARTED_GNULIB_TESTS +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32TOB +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32tob (wint_t wc) +{ + return +# if IN_PARTED_GNULIB_TESTS && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + wctob (wc); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32tob, int, (wint_t wc), ); +# endif +_GL_CXXALIAS_SYS (c32tob, int, (wint_t wc)); +_GL_CXXALIASWARN (c32tob); +#endif + + +/* Converts a multibyte character to a 32-bit wide character. */ +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrtoc32 +# define mbrtoc32 rpl_mbrtoc32 +# endif +_GL_FUNCDECL_RPL (mbrtoc32, size_t, + (char32_t *pc, const char *s, size_t n, mbstate_t *ps), ); +_GL_CXXALIAS_RPL (mbrtoc32, size_t, + (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbrtoc32, size_t, + (char32_t *pc, const char *s, size_t n, mbstate_t *ps), ); +# endif +_GL_CXXALIAS_SYS (mbrtoc32, size_t, + (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); +# endif +# if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 +_GL_CXXALIASWARN (mbrtoc32); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrtoc32 +# if HAVE_RAW_DECL_MBRTOC32 +_GL_WARN_ON_USE (mbrtoc32, "mbrtoc32 is not portable - " + "use gnulib module mbrtoc32 for portability"); +# endif +#endif + + +/* Converts a multibyte character and returns the next 16-bit wide + character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrtoc16 +# define mbrtoc16 rpl_mbrtoc16 +# endif +_GL_FUNCDECL_RPL (mbrtoc16, size_t, + (char16_t *pc, const char *s, size_t n, mbstate_t *ps), ); +_GL_CXXALIAS_RPL (mbrtoc16, size_t, + (char16_t *pc, const char *s, size_t n, mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbrtoc16, size_t, + (char16_t *pc, const char *s, size_t n, mbstate_t *ps), ); +# endif +_GL_CXXALIAS_SYS (mbrtoc16, size_t, + (char16_t *pc, const char *s, size_t n, mbstate_t *ps)); +# endif +# if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 +_GL_CXXALIASWARN (mbrtoc16); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrtoc16 +# if HAVE_RAW_DECL_MBRTOC16 +_GL_WARN_ON_USE (mbrtoc16, "mbrtoc16 is not portable - " + "use gnulib module mbrtoc16 for portability"); +# endif +#endif + + +/* Convert a string to a 32-bit wide string. */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSNRTOC32S +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((2)) size_t +mbsnrtoc32s (char32_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps) +{ + return +# if 0 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + mbsnrtowcs ((wchar_t *) dest, srcp, srclen, len, ps); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (mbsnrtoc32s, size_t, + (char32_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsnrtoc32s, size_t, + (char32_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +_GL_CXXALIASWARN (mbsnrtoc32s); +#endif + + +/* Convert a string to a 32-bit wide string. */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSRTOC32S +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((2)) size_t +mbsrtoc32s (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps) +{ + return +# if 0 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + mbsrtowcs ((wchar_t *) dest, srcp, len, ps); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (mbsrtoc32s, size_t, + (char32_t *dest, const char **srcp, size_t len, + mbstate_t *ps), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsrtoc32s, size_t, + (char32_t *dest, const char **srcp, size_t len, + mbstate_t *ps)); +_GL_CXXALIASWARN (mbsrtoc32s); +#endif + + +/* Convert a string to a 32-bit wide string. */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSTOC32S +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((2)) size_t +mbstoc32s (char32_t *dest, const char *src, size_t len) +{ + mbstate_t state; + + mbszero (&state); + return mbsrtoc32s (dest, &src, len, &state); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (mbstoc32s, size_t, + (char32_t *dest, const char *src, size_t len), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbstoc32s, size_t, + (char32_t *dest, const char *src, size_t len)); +_GL_CXXALIASWARN (mbstoc32s); +#endif + + +#if 0 || 0 +/* A scalar type. Instances of this type, other than (c32_type_test_t) 0, + represent a character property, sometimes also viewed as a "character class". + It can be applied to 32-bit wide characters. It is the counterpart of + type 'wctype_t' for wide characters. + To test whether a given character has a certain property, use the function + 'c32_apply_type_test'. */ +# if _GL_WCHAR_T_IS_UCS4 +typedef wctype_t c32_type_test_t; +# else +typedef /*bool*/int (*c32_type_test_t) (wint_t wc); +# endif +#endif + +/* Return a character property with the given name, or (c32_type_test_t) 0 + if the designated property does not exist. + This function is the counterpart of function 'wctype' for wide characters. + */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_GET_TYPE_TEST +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((1)) c32_type_test_t +c32_get_type_test (const char *name) +{ + return +# if 1 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + wctype (name); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32_get_type_test, c32_type_test_t, (const char *name), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (c32_get_type_test, c32_type_test_t, (const char *name)); +_GL_CXXALIASWARN (c32_get_type_test); +#endif + +/* Test whether a given 32-bit wide character has the specified character + property. + Return non-zero if true, zero if false or if the argument is WEOF. + This function is the counterpart of function 'iswctype' for wide characters. + */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 +# if !defined IN_C32_APPLY_TYPE_TEST +_GL_BEGIN_C_LINKAGE +_GL_INLINE int +c32_apply_type_test (wint_t wc, c32_type_test_t property) +{ + return +# if 1 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + iswctype (wc, property); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32_apply_type_test, int, + (wint_t wc, c32_type_test_t property), ); +# endif +# else +_GL_FUNCDECL_SYS (c32_apply_type_test, int, + (wint_t wc, c32_type_test_t property), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (c32_apply_type_test, int, + (wint_t wc, c32_type_test_t property)); +_GL_CXXALIASWARN (c32_apply_type_test); +#endif + + +#if 0 || 0 +/* A scalar type. Instances of this type, other than (c32_mapping_t) 0, + represent a character mapping. It can be applied to 32-bit wide characters. + It is the counterpart of type 'wctrans_t' for wide characters. + To apply a certain mapping to a given character, use the function + 'c32_apply_mapping'. */ +# if _GL_WCHAR_T_IS_UCS4 +typedef wctrans_t c32_mapping_t; +# else +typedef wint_t (*c32_mapping_t) (wint_t wc); +# endif +#endif + +/* Return a character mapping with the given name, or (c32_mapping_t) 0 + if the designated mapping does not exist. + This function is the counterpart of function 'wctrans' for wide characters. + */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_GET_MAPPING +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((1)) c32_mapping_t +c32_get_mapping (const char *name) +{ + return +# if 0 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + wctrans (name); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32_get_mapping, c32_mapping_t, (const char *name), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (c32_get_mapping, c32_mapping_t, (const char *name)); +_GL_CXXALIASWARN (c32_get_mapping); +#endif + +/* Apply the specified character mapping to a given 32-bit wide character. + Return the result of this mapping. Return the WC argument unchanged if it is + WEOF. + This function is the counterpart of function 'towctrans' for wide characters. + */ +#if 0 +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_APPLY_MAPPING +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((2)) wint_t +c32_apply_mapping (wint_t wc, c32_mapping_t mapping) +{ + return +# if 0 && defined __cplusplus && defined GNULIB_NAMESPACE + GNULIB_NAMESPACE:: +# endif + towctrans (wc, mapping); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32_apply_mapping, wint_t, + (wint_t wc, c32_mapping_t mapping), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (c32_apply_mapping, wint_t, + (wint_t wc, c32_mapping_t mapping)); +_GL_CXXALIASWARN (c32_apply_mapping); +#endif + + +_GL_INLINE_HEADER_END + +#endif /* _GL_UCHAR_H */ +#endif /* _GL_UCHAR_H */ diff --git a/jni/parted/lib/unictype.h b/jni/parted/lib/unictype.h new file mode 100755 index 0000000..f551234 --- /dev/null +++ b/jni/parted/lib/unictype.h @@ -0,0 +1,1147 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Unicode character classification and properties. + Copyright (C) 2002, 2005-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNICTYPE_H +#define _UNICTYPE_H + +#include "unitypes.h" + +/* Get bool. */ +#include + +/* Get size_t. */ +#include + +#if 0 +# include +#else +# define LIBUNISTRING_DLL_VARIABLE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* ========================================================================= */ + +/* Field 1 of Unicode Character Database: Character name. + See "uniname.h". */ + +/* ========================================================================= */ + +/* Field 2 of Unicode Character Database: General category. */ + +/* Data type denoting a General category value. This is not just a bitmask, + but rather a bitmask and a pointer to the lookup table, so that programs + that use only the predefined bitmasks (i.e. don't combine bitmasks with & + and |) don't have a link-time dependency towards the big general table. */ +typedef struct +{ + uint32_t bitmask : 31; + /*bool*/ unsigned int generic : 1; + union + { + const void *table; /* when generic is 0 */ + bool (*lookup_fn) (ucs4_t uc, uint32_t bitmask); /* when generic is 1 */ + } lookup; +} +uc_general_category_t; + +/* Bits and bit masks denoting General category values. UnicodeData-3.2.0.html + says a 32-bit integer will always suffice to represent them. + These bit masks can only be used with the uc_is_general_category_withtable + function. */ +enum +{ + UC_CATEGORY_MASK_L = 0x0000001f, + UC_CATEGORY_MASK_LC = 0x00000007, + UC_CATEGORY_MASK_Lu = 0x00000001, + UC_CATEGORY_MASK_Ll = 0x00000002, + UC_CATEGORY_MASK_Lt = 0x00000004, + UC_CATEGORY_MASK_Lm = 0x00000008, + UC_CATEGORY_MASK_Lo = 0x00000010, + UC_CATEGORY_MASK_M = 0x000000e0, + UC_CATEGORY_MASK_Mn = 0x00000020, + UC_CATEGORY_MASK_Mc = 0x00000040, + UC_CATEGORY_MASK_Me = 0x00000080, + UC_CATEGORY_MASK_N = 0x00000700, + UC_CATEGORY_MASK_Nd = 0x00000100, + UC_CATEGORY_MASK_Nl = 0x00000200, + UC_CATEGORY_MASK_No = 0x00000400, + UC_CATEGORY_MASK_P = 0x0003f800, + UC_CATEGORY_MASK_Pc = 0x00000800, + UC_CATEGORY_MASK_Pd = 0x00001000, + UC_CATEGORY_MASK_Ps = 0x00002000, + UC_CATEGORY_MASK_Pe = 0x00004000, + UC_CATEGORY_MASK_Pi = 0x00008000, + UC_CATEGORY_MASK_Pf = 0x00010000, + UC_CATEGORY_MASK_Po = 0x00020000, + UC_CATEGORY_MASK_S = 0x003c0000, + UC_CATEGORY_MASK_Sm = 0x00040000, + UC_CATEGORY_MASK_Sc = 0x00080000, + UC_CATEGORY_MASK_Sk = 0x00100000, + UC_CATEGORY_MASK_So = 0x00200000, + UC_CATEGORY_MASK_Z = 0x01c00000, + UC_CATEGORY_MASK_Zs = 0x00400000, + UC_CATEGORY_MASK_Zl = 0x00800000, + UC_CATEGORY_MASK_Zp = 0x01000000, + UC_CATEGORY_MASK_C = 0x3e000000, + UC_CATEGORY_MASK_Cc = 0x02000000, + UC_CATEGORY_MASK_Cf = 0x04000000, + UC_CATEGORY_MASK_Cs = 0x08000000, + UC_CATEGORY_MASK_Co = 0x10000000, + UC_CATEGORY_MASK_Cn = 0x20000000 +}; + +/* Predefined General category values. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_L; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_LC; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Lu; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Ll; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Lt; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Lm; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Lo; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_M; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Mn; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Mc; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Me; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_N; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Nd; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Nl; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_No; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_P; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pc; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pd; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Ps; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pe; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pi; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pf; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Po; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_S; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Sm; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Sc; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Sk; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_So; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Z; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Zs; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Zl; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Zp; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_C; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Cc; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Cf; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Cs; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Co; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Cn; +/* Non-public. */ +extern const uc_general_category_t _UC_CATEGORY_NONE; + +/* Alias names for predefined General category values. */ +#define UC_LETTER UC_CATEGORY_L +#define UC_CASED_LETTER UC_CATEGORY_LC +#define UC_UPPERCASE_LETTER UC_CATEGORY_Lu +#define UC_LOWERCASE_LETTER UC_CATEGORY_Ll +#define UC_TITLECASE_LETTER UC_CATEGORY_Lt +#define UC_MODIFIER_LETTER UC_CATEGORY_Lm +#define UC_OTHER_LETTER UC_CATEGORY_Lo +#define UC_MARK UC_CATEGORY_M +#define UC_NON_SPACING_MARK UC_CATEGORY_Mn +#define UC_COMBINING_SPACING_MARK UC_CATEGORY_Mc +#define UC_ENCLOSING_MARK UC_CATEGORY_Me +#define UC_NUMBER UC_CATEGORY_N +#define UC_DECIMAL_DIGIT_NUMBER UC_CATEGORY_Nd +#define UC_LETTER_NUMBER UC_CATEGORY_Nl +#define UC_OTHER_NUMBER UC_CATEGORY_No +#define UC_PUNCTUATION UC_CATEGORY_P +#define UC_CONNECTOR_PUNCTUATION UC_CATEGORY_Pc +#define UC_DASH_PUNCTUATION UC_CATEGORY_Pd +#define UC_OPEN_PUNCTUATION UC_CATEGORY_Ps /* a.k.a. UC_START_PUNCTUATION */ +#define UC_CLOSE_PUNCTUATION UC_CATEGORY_Pe /* a.k.a. UC_END_PUNCTUATION */ +#define UC_INITIAL_QUOTE_PUNCTUATION UC_CATEGORY_Pi +#define UC_FINAL_QUOTE_PUNCTUATION UC_CATEGORY_Pf +#define UC_OTHER_PUNCTUATION UC_CATEGORY_Po +#define UC_SYMBOL UC_CATEGORY_S +#define UC_MATH_SYMBOL UC_CATEGORY_Sm +#define UC_CURRENCY_SYMBOL UC_CATEGORY_Sc +#define UC_MODIFIER_SYMBOL UC_CATEGORY_Sk +#define UC_OTHER_SYMBOL UC_CATEGORY_So +#define UC_SEPARATOR UC_CATEGORY_Z +#define UC_SPACE_SEPARATOR UC_CATEGORY_Zs +#define UC_LINE_SEPARATOR UC_CATEGORY_Zl +#define UC_PARAGRAPH_SEPARATOR UC_CATEGORY_Zp +#define UC_OTHER UC_CATEGORY_C +#define UC_CONTROL UC_CATEGORY_Cc +#define UC_FORMAT UC_CATEGORY_Cf +#define UC_SURROGATE UC_CATEGORY_Cs /* all of them are invalid characters */ +#define UC_PRIVATE_USE UC_CATEGORY_Co +#define UC_UNASSIGNED UC_CATEGORY_Cn /* some of them are invalid characters */ + +/* Return the union of two general categories. + This corresponds to the unions of the two sets of characters. */ +extern uc_general_category_t + uc_general_category_or (uc_general_category_t category1, + uc_general_category_t category2); + +/* Return the intersection of two general categories as bit masks. + This *does*not* correspond to the intersection of the two sets of + characters. */ +extern uc_general_category_t + uc_general_category_and (uc_general_category_t category1, + uc_general_category_t category2); + +/* Return the intersection of a general category with the complement of a + second general category, as bit masks. + This *does*not* correspond to the intersection with complement, when + viewing the categories as sets of characters. */ +extern uc_general_category_t + uc_general_category_and_not (uc_general_category_t category1, + uc_general_category_t category2); + +/* Return the name of a general category. */ +extern const char * + uc_general_category_name (uc_general_category_t category) + _UC_ATTRIBUTE_PURE; + +/* Return the long name of a general category. */ +extern const char * + uc_general_category_long_name (uc_general_category_t category) + _UC_ATTRIBUTE_PURE; + +/* Return the general category given by name, e.g. "Lu", or by long name, + e.g. "Uppercase Letter". */ +extern uc_general_category_t + uc_general_category_byname (const char *category_name) + _UC_ATTRIBUTE_PURE; + +/* Return the general category of a Unicode character. */ +extern uc_general_category_t + uc_general_category (ucs4_t uc) + _UC_ATTRIBUTE_PURE; + +/* Test whether a Unicode character belongs to a given category. + The CATEGORY argument can be the combination of several predefined + general categories. */ +extern bool + uc_is_general_category (ucs4_t uc, uc_general_category_t category) + _UC_ATTRIBUTE_PURE; +/* Likewise. This function uses a big table comprising all categories. */ +extern bool + uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Field 3 of Unicode Character Database: Canonical combining class. */ + +/* The possible results of uc_combining_class (0..255) are described in + UCD.html. The list here is not definitive; more values can be added + in future versions. */ +enum +{ + UC_CCC_NR = 0, /* Not Reordered */ + UC_CCC_OV = 1, /* Overlay */ + UC_CCC_NK = 7, /* Nukta */ + UC_CCC_KV = 8, /* Kana Voicing */ + UC_CCC_VR = 9, /* Virama */ + UC_CCC_ATBL = 200, /* Attached Below Left */ + UC_CCC_ATB = 202, /* Attached Below */ + UC_CCC_ATA = 214, /* Attached Above */ + UC_CCC_ATAR = 216, /* Attached Above Right */ + UC_CCC_BL = 218, /* Below Left */ + UC_CCC_B = 220, /* Below */ + UC_CCC_BR = 222, /* Below Right */ + UC_CCC_L = 224, /* Left */ + UC_CCC_R = 226, /* Right */ + UC_CCC_AL = 228, /* Above Left */ + UC_CCC_A = 230, /* Above */ + UC_CCC_AR = 232, /* Above Right */ + UC_CCC_DB = 233, /* Double Below */ + UC_CCC_DA = 234, /* Double Above */ + UC_CCC_IS = 240 /* Iota Subscript */ +}; + +/* Return the canonical combining class of a Unicode character. */ +extern int + uc_combining_class (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Return the name of a canonical combining class. */ +extern const char * + uc_combining_class_name (int ccc) + _UC_ATTRIBUTE_CONST; + +/* Return the long name of a canonical combining class. */ +extern const char * + uc_combining_class_long_name (int ccc) + _UC_ATTRIBUTE_CONST; + +/* Return the canonical combining class given by name, e.g. "BL", or by long + name, e.g. "Below Left". */ +extern int + uc_combining_class_byname (const char *ccc_name) + _UC_ATTRIBUTE_PURE; + +/* ========================================================================= */ + +/* Field 4 of Unicode Character Database: Bidi class. + Before Unicode 4.0, this field was called "Bidirectional category". */ + +enum +{ + UC_BIDI_L, /* Left-to-Right */ + UC_BIDI_LRE, /* Left-to-Right Embedding */ + UC_BIDI_LRO, /* Left-to-Right Override */ + UC_BIDI_R, /* Right-to-Left */ + UC_BIDI_AL, /* Right-to-Left Arabic */ + UC_BIDI_RLE, /* Right-to-Left Embedding */ + UC_BIDI_RLO, /* Right-to-Left Override */ + UC_BIDI_PDF, /* Pop Directional Format */ + UC_BIDI_EN, /* European Number */ + UC_BIDI_ES, /* European Number Separator */ + UC_BIDI_ET, /* European Number Terminator */ + UC_BIDI_AN, /* Arabic Number */ + UC_BIDI_CS, /* Common Number Separator */ + UC_BIDI_NSM, /* Non-Spacing Mark */ + UC_BIDI_BN, /* Boundary Neutral */ + UC_BIDI_B, /* Paragraph Separator */ + UC_BIDI_S, /* Segment Separator */ + UC_BIDI_WS, /* Whitespace */ + UC_BIDI_ON, /* Other Neutral */ + UC_BIDI_LRI, /* Left-to-Right Isolate */ + UC_BIDI_RLI, /* Right-to-Left Isolate */ + UC_BIDI_FSI, /* First Strong Isolate */ + UC_BIDI_PDI /* Pop Directional Isolate */ +}; + +/* Return the name of a bidi class. */ +extern const char * + uc_bidi_class_name (int bidi_class) + _UC_ATTRIBUTE_CONST; +/* Same; obsolete function name. */ +extern const char * + uc_bidi_category_name (int category) + _UC_ATTRIBUTE_CONST; + +/* Return the long name of a bidi class. */ +extern const char * + uc_bidi_class_long_name (int bidi_class) + _UC_ATTRIBUTE_CONST; + +/* Return the bidi class given by name, e.g. "LRE", or by long name, e.g. + "Left-to-Right Embedding". */ +extern int + uc_bidi_class_byname (const char *bidi_class_name) + _UC_ATTRIBUTE_PURE; +/* Same; obsolete function name. */ +extern int + uc_bidi_category_byname (const char *category_name) + _UC_ATTRIBUTE_PURE; + +/* Return the bidi class of a Unicode character. */ +extern int + uc_bidi_class (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +/* Same; obsolete function name. */ +extern int + uc_bidi_category (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test whether a Unicode character belongs to a given bidi class. */ +extern bool + uc_is_bidi_class (ucs4_t uc, int bidi_class) + _UC_ATTRIBUTE_CONST; +/* Same; obsolete function name. */ +extern bool + uc_is_bidi_category (ucs4_t uc, int category) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Field 5 of Unicode Character Database: Character decomposition mapping. + See "uninorm.h". */ + +/* ========================================================================= */ + +/* Field 6 of Unicode Character Database: Decimal digit value. */ + +/* Return the decimal digit value of a Unicode character. */ +extern int + uc_decimal_value (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Field 7 of Unicode Character Database: Digit value. */ + +/* Return the digit value of a Unicode character. */ +extern int + uc_digit_value (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Field 8 of Unicode Character Database: Numeric value. */ + +/* Return the numeric value of a Unicode character. */ +typedef struct +{ + int numerator; + int denominator; +} +uc_fraction_t; +extern uc_fraction_t + uc_numeric_value (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Field 9 of Unicode Character Database: Mirrored. */ + +/* Return the mirrored character of a Unicode character UC in *PUC. */ +extern bool + uc_mirror_char (ucs4_t uc, ucs4_t *puc); + +/* ========================================================================= */ + +/* Field 10 of Unicode Character Database: Unicode 1.0 Name. + Not available in this library. */ + +/* ========================================================================= */ + +/* Field 11 of Unicode Character Database: ISO 10646 comment. + Not available in this library. */ + +/* ========================================================================= */ + +/* Field 12, 13, 14 of Unicode Character Database: Uppercase mapping, + lowercase mapping, titlecase mapping. See "unicase.h". */ + +/* ========================================================================= */ + +/* Field 2 of the file ArabicShaping.txt in the Unicode Character Database. */ + +/* Possible joining types. */ +enum +{ + UC_JOINING_TYPE_U, /* Non_Joining */ + UC_JOINING_TYPE_T, /* Transparent */ + UC_JOINING_TYPE_C, /* Join_Causing */ + UC_JOINING_TYPE_L, /* Left_Joining */ + UC_JOINING_TYPE_R, /* Right_Joining */ + UC_JOINING_TYPE_D /* Dual_Joining */ +}; + +/* Return the name of a joining type. */ +extern const char * + uc_joining_type_name (int joining_type) + _UC_ATTRIBUTE_CONST; + +/* Return the long name of a joining type. */ +extern const char * + uc_joining_type_long_name (int joining_type) + _UC_ATTRIBUTE_CONST; + +/* Return the joining type given by name, e.g. "D", or by long name, e.g. + "Dual Joining". */ +extern int + uc_joining_type_byname (const char *joining_type_name) + _UC_ATTRIBUTE_PURE; + +/* Return the joining type of a Unicode character. */ +extern int + uc_joining_type (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Field 3 of the file ArabicShaping.txt in the Unicode Character Database. */ + +/* Possible joining groups. + This enumeration may be extended in the future. */ +enum +{ + UC_JOINING_GROUP_NONE, /* No_Joining_Group */ + UC_JOINING_GROUP_AIN, /* Ain */ + UC_JOINING_GROUP_ALAPH, /* Alaph */ + UC_JOINING_GROUP_ALEF, /* Alef */ + UC_JOINING_GROUP_BEH, /* Beh */ + UC_JOINING_GROUP_BETH, /* Beth */ + UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE, /* Burushaski_Yeh_Barree */ + UC_JOINING_GROUP_DAL, /* Dal */ + UC_JOINING_GROUP_DALATH_RISH, /* Dalath_Rish */ + UC_JOINING_GROUP_E, /* E */ + UC_JOINING_GROUP_FARSI_YEH, /* Farsi_Yeh */ + UC_JOINING_GROUP_FE, /* Fe */ + UC_JOINING_GROUP_FEH, /* Feh */ + UC_JOINING_GROUP_FINAL_SEMKATH, /* Final_Semkath */ + UC_JOINING_GROUP_GAF, /* Gaf */ + UC_JOINING_GROUP_GAMAL, /* Gamal */ + UC_JOINING_GROUP_HAH, /* Hah */ + UC_JOINING_GROUP_HE, /* He */ + UC_JOINING_GROUP_HEH, /* Heh */ + UC_JOINING_GROUP_HEH_GOAL, /* Heh_Goal */ + UC_JOINING_GROUP_HETH, /* Heth */ + UC_JOINING_GROUP_KAF, /* Kaf */ + UC_JOINING_GROUP_KAPH, /* Kaph */ + UC_JOINING_GROUP_KHAPH, /* Khaph */ + UC_JOINING_GROUP_KNOTTED_HEH, /* Knotted_Heh */ + UC_JOINING_GROUP_LAM, /* Lam */ + UC_JOINING_GROUP_LAMADH, /* Lamadh */ + UC_JOINING_GROUP_MEEM, /* Meem */ + UC_JOINING_GROUP_MIM, /* Mim */ + UC_JOINING_GROUP_NOON, /* Noon */ + UC_JOINING_GROUP_NUN, /* Nun */ + UC_JOINING_GROUP_NYA, /* Nya */ + UC_JOINING_GROUP_PE, /* Pe */ + UC_JOINING_GROUP_QAF, /* Qaf */ + UC_JOINING_GROUP_QAPH, /* Qaph */ + UC_JOINING_GROUP_REH, /* Reh */ + UC_JOINING_GROUP_REVERSED_PE, /* Reversed_Pe */ + UC_JOINING_GROUP_SAD, /* Sad */ + UC_JOINING_GROUP_SADHE, /* Sadhe */ + UC_JOINING_GROUP_SEEN, /* Seen */ + UC_JOINING_GROUP_SEMKATH, /* Semkath */ + UC_JOINING_GROUP_SHIN, /* Shin */ + UC_JOINING_GROUP_SWASH_KAF, /* Swash_Kaf */ + UC_JOINING_GROUP_SYRIAC_WAW, /* Syriac_Waw */ + UC_JOINING_GROUP_TAH, /* Tah */ + UC_JOINING_GROUP_TAW, /* Taw */ + UC_JOINING_GROUP_TEH_MARBUTA, /* Teh_Marbuta */ + UC_JOINING_GROUP_TEH_MARBUTA_GOAL, /* Teh_Marbuta_Goal */ + UC_JOINING_GROUP_TETH, /* Teth */ + UC_JOINING_GROUP_WAW, /* Waw */ + UC_JOINING_GROUP_YEH, /* Yeh */ + UC_JOINING_GROUP_YEH_BARREE, /* Yeh_Barree */ + UC_JOINING_GROUP_YEH_WITH_TAIL, /* Yeh_With_Tail */ + UC_JOINING_GROUP_YUDH, /* Yudh */ + UC_JOINING_GROUP_YUDH_HE, /* Yudh_He */ + UC_JOINING_GROUP_ZAIN, /* Zain */ + UC_JOINING_GROUP_ZHAIN, /* Zhain */ + UC_JOINING_GROUP_ROHINGYA_YEH, /* Rohingya_Yeh */ + UC_JOINING_GROUP_STRAIGHT_WAW, /* Straight_Waw */ + UC_JOINING_GROUP_MANICHAEAN_ALEPH, /* Manichaean_Aleph */ + UC_JOINING_GROUP_MANICHAEAN_BETH, /* Manichaean_Beth */ + UC_JOINING_GROUP_MANICHAEAN_GIMEL, /* Manichaean_Gimel */ + UC_JOINING_GROUP_MANICHAEAN_DALETH, /* Manichaean_Daleth */ + UC_JOINING_GROUP_MANICHAEAN_WAW, /* Manichaean_Waw */ + UC_JOINING_GROUP_MANICHAEAN_ZAYIN, /* Manichaean_Zayin */ + UC_JOINING_GROUP_MANICHAEAN_HETH, /* Manichaean_Heth */ + UC_JOINING_GROUP_MANICHAEAN_TETH, /* Manichaean_Teth */ + UC_JOINING_GROUP_MANICHAEAN_YODH, /* Manichaean_Yodh */ + UC_JOINING_GROUP_MANICHAEAN_KAPH, /* Manichaean_Kaph */ + UC_JOINING_GROUP_MANICHAEAN_LAMEDH, /* Manichaean_Lamedh */ + UC_JOINING_GROUP_MANICHAEAN_DHAMEDH, /* Manichaean_Dhamedh */ + UC_JOINING_GROUP_MANICHAEAN_THAMEDH, /* Manichaean_Thamedh */ + UC_JOINING_GROUP_MANICHAEAN_MEM, /* Manichaean_Mem */ + UC_JOINING_GROUP_MANICHAEAN_NUN, /* Manichaean_Nun */ + UC_JOINING_GROUP_MANICHAEAN_SAMEKH, /* Manichaean_Aleph */ + UC_JOINING_GROUP_MANICHAEAN_AYIN, /* Manichaean_Ayin */ + UC_JOINING_GROUP_MANICHAEAN_PE, /* Manichaean_Pe */ + UC_JOINING_GROUP_MANICHAEAN_SADHE, /* Manichaean_Sadhe */ + UC_JOINING_GROUP_MANICHAEAN_QOPH, /* Manichaean_Qoph */ + UC_JOINING_GROUP_MANICHAEAN_RESH, /* Manichaean_Resh */ + UC_JOINING_GROUP_MANICHAEAN_TAW, /* Manichaean_Taw */ + UC_JOINING_GROUP_MANICHAEAN_ONE, /* Manichaean_One */ + UC_JOINING_GROUP_MANICHAEAN_FIVE, /* Manichaean_Five */ + UC_JOINING_GROUP_MANICHAEAN_TEN, /* Manichaean_Ten */ + UC_JOINING_GROUP_MANICHAEAN_TWENTY, /* Manichaean_Twenty */ + UC_JOINING_GROUP_MANICHAEAN_HUNDRED, /* Manichaean_Hundred */ + UC_JOINING_GROUP_AFRICAN_FEH, /* African_Feh */ + UC_JOINING_GROUP_AFRICAN_QAF, /* African_Qaf */ + UC_JOINING_GROUP_AFRICAN_NOON, /* African_Noon */ + UC_JOINING_GROUP_MALAYALAM_NGA, /* Malayalam_Nga */ + UC_JOINING_GROUP_MALAYALAM_JA, /* Malayalam_Ja */ + UC_JOINING_GROUP_MALAYALAM_NYA, /* Malayalam_Nya */ + UC_JOINING_GROUP_MALAYALAM_TTA, /* Malayalam_Tta */ + UC_JOINING_GROUP_MALAYALAM_NNA, /* Malayalam_Nna */ + UC_JOINING_GROUP_MALAYALAM_NNNA, /* Malayalam_Nnna */ + UC_JOINING_GROUP_MALAYALAM_BHA, /* Malayalam_Bha */ + UC_JOINING_GROUP_MALAYALAM_RA, /* Malayalam_Ra */ + UC_JOINING_GROUP_MALAYALAM_LLA, /* Malayalam_Lla */ + UC_JOINING_GROUP_MALAYALAM_LLLA, /* Malayalam_Llla */ + UC_JOINING_GROUP_MALAYALAM_SSA, /* Malayalam_Ssa */ + UC_JOINING_GROUP_HANIFI_ROHINGYA_PA, /* Hanifi_Rohingya_Pa */ + UC_JOINING_GROUP_HANIFI_ROHINGYA_KINNA_YA, /* Hanifi_Rohingya_Kinna_Ya */ + UC_JOINING_GROUP_THIN_YEH, /* Thin_Yeh */ + UC_JOINING_GROUP_VERTICAL_TAIL, /* Vertical_Tail */ + UC_JOINING_GROUP_KASHMIRI_YEH /* Kashmiri_Yeh */ +}; + +/* Return the name of a joining group. */ +extern const char * + uc_joining_group_name (int joining_group) + _UC_ATTRIBUTE_CONST; + +/* Return the joining group given by name, e.g. "Teh_Marbuta". */ +extern int + uc_joining_group_byname (const char *joining_group_name) + _UC_ATTRIBUTE_PURE; + +/* Return the joining group of a Unicode character. */ +extern int + uc_joining_group (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Common API for properties. */ + +/* Data type denoting a property. This is not just a number, but rather a + pointer to the test functions, so that programs that use only few of the + properties don't have a link-time dependency towards all the tables. */ +typedef struct +{ + bool (*test_fn) (ucs4_t uc); +} +uc_property_t; + +/* Predefined properties. */ +/* General. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_WHITE_SPACE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ALPHABETIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_ALPHABETIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_NOT_A_CHARACTER; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DEPRECATED; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_VARIATION_SELECTOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PRIVATE_USE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE; +/* Case. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_UPPERCASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_UPPERCASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_LOWERCASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_LOWERCASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_TITLECASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_CASED; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_CASE_IGNORABLE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_CHANGES_WHEN_LOWERCASED; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_CHANGES_WHEN_UPPERCASED; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_CHANGES_WHEN_TITLECASED; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEFOLDED; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEMAPPED; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_SOFT_DOTTED; +/* Identifiers. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ID_START; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_ID_START; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ID_CONTINUE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_XID_START; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_XID_CONTINUE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ID_COMPAT_MATH_START; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ID_COMPAT_MATH_CONTINUE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PATTERN_SYNTAX; +/* Shaping and rendering. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_JOIN_CONTROL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_GRAPHEME_BASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_GRAPHEME_EXTEND; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_GRAPHEME_LINK; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_MODIFIER_COMBINING_MARK; +/* Bidi. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_CONTROL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_WHITESPACE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_PDF; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL; +/* Numeric. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_HEX_DIGIT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT; +/* CJK. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_IDEOGRAPHIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_RADICAL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_IDS_UNARY_OPERATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR; +/* Emoji. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_EMOJI; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_EMOJI_PRESENTATION; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_EMOJI_MODIFIER; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_EMOJI_MODIFIER_BASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_EMOJI_COMPONENT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_EXTENDED_PICTOGRAPHIC; +/* Misc. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ZERO_WIDTH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_SPACE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_NON_BREAK; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ISO_CONTROL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_FORMAT_CONTROL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PREPENDED_CONCATENATION_MARK; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DASH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_HYPHEN; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PUNCTUATION; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_LINE_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_QUOTATION_MARK; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_SENTENCE_TERMINAL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_CURRENCY_SYMBOL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_MATH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_MATH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_LEFT_OF_PAIR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_COMBINING; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_COMPOSITE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DECIMAL_DIGIT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_NUMERIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DIACRITIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_EXTENDER; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_IGNORABLE_CONTROL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_REGIONAL_INDICATOR; + +/* Return the property given by name, e.g. "White space". */ +extern uc_property_t + uc_property_byname (const char *property_name); + +/* Test whether a property is valid. */ +#define uc_property_is_valid(property) ((property).test_fn != NULL) + +/* Test whether a Unicode character has a given property. */ +extern bool + uc_is_property (ucs4_t uc, uc_property_t property); +extern bool uc_is_property_white_space (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_alphabetic (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_other_alphabetic (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_not_a_character (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_default_ignorable_code_point (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_other_default_ignorable_code_point (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_deprecated (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_logical_order_exception (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_variation_selector (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_private_use (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_unassigned_code_value (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_uppercase (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_other_uppercase (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_lowercase (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_other_lowercase (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_titlecase (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_cased (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_case_ignorable (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_changes_when_lowercased (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_changes_when_uppercased (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_changes_when_titlecased (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_changes_when_casefolded (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_changes_when_casemapped (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_soft_dotted (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_id_start (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_other_id_start (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_id_continue (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_other_id_continue (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_xid_start (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_xid_continue (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_id_compat_math_start (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_id_compat_math_continue (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_pattern_white_space (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_pattern_syntax (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_join_control (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_grapheme_base (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_grapheme_extend (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_other_grapheme_extend (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_grapheme_link (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_modifier_combining_mark (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_control (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_left_to_right (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_european_digit (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_eur_num_separator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_arabic_digit (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_common_separator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_block_separator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_segment_separator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_whitespace (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_boundary_neutral (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_pdf (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_embedding_or_override (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_bidi_other_neutral (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_hex_digit (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_ascii_hex_digit (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_ideographic (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_unified_ideograph (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_radical (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_ids_unary_operator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_ids_binary_operator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_ids_trinary_operator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_emoji (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_emoji_presentation (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_emoji_modifier (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_emoji_modifier_base (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_emoji_component (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_extended_pictographic (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_zero_width (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_space (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_non_break (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_iso_control (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_format_control (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_prepended_concatenation_mark (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_dash (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_hyphen (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_punctuation (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_line_separator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_paragraph_separator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_quotation_mark (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_sentence_terminal (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_terminal_punctuation (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_currency_symbol (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_math (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_other_math (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_paired_punctuation (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_left_of_pair (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_combining (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_composite (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_decimal_digit (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_numeric (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_diacritic (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_extender (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_ignorable_control (ucs4_t uc) + _UC_ATTRIBUTE_CONST; +extern bool uc_is_property_regional_indicator (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Other attributes. */ + +/* ------------------------------------------------------------------------- */ + +/* Indic_Conjunct_Break (InCB): from the file DerivedCoreProperties.txt + in the Unicode Character Database. */ + +/* Possible values of the Indic_Conjunct_Break attribute. + This enumeration may be extended in the future. */ +enum +{ + UC_INDIC_CONJUNCT_BREAK_NONE, /* None */ + UC_INDIC_CONJUNCT_BREAK_CONSONANT, /* Consonant */ + UC_INDIC_CONJUNCT_BREAK_LINKER, /* Linker */ + UC_INDIC_CONJUNCT_BREAK_EXTEND /* Extend */ +}; + +/* Return the name of an Indic_Conjunct_Break value. */ +extern const char * + uc_indic_conjunct_break_name (int indic_conjunct_break) + _UC_ATTRIBUTE_CONST; + +/* Return the Indic_Conjunct_Break value given by name, e.g. "Consonant". */ +extern int + uc_indic_conjunct_break_byname (const char *indic_conjunct_break_name) + _UC_ATTRIBUTE_PURE; + +/* Return the Indic_Conjunct_Break attribute of a Unicode character. */ +extern int + uc_indic_conjunct_break (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Subdivision of the Unicode characters into scripts. */ + +typedef struct +{ + unsigned int code : 21; + unsigned int start : 1; + unsigned int end : 1; +} +uc_interval_t; +typedef struct +{ + unsigned int nintervals; + const uc_interval_t *intervals; + const char *name; +} +uc_script_t; + +/* Return the script of a Unicode character. */ +extern const uc_script_t * + uc_script (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Return the script given by name, e.g. "HAN". */ +extern const uc_script_t * + uc_script_byname (const char *script_name) + _UC_ATTRIBUTE_PURE; + +/* Test whether a Unicode character belongs to a given script. */ +extern bool + uc_is_script (ucs4_t uc, const uc_script_t *script) + _UC_ATTRIBUTE_PURE; + +/* Get the list of all scripts. */ +extern void + uc_all_scripts (const uc_script_t **scripts, size_t *count); + +/* ========================================================================= */ + +/* Subdivision of the Unicode character range into blocks. */ + +typedef struct +{ + ucs4_t start; + ucs4_t end; + const char *name; +} +uc_block_t; + +/* Return the block a character belongs to. */ +extern const uc_block_t * + uc_block (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test whether a Unicode character belongs to a given block. */ +extern bool + uc_is_block (ucs4_t uc, const uc_block_t *block) + _UC_ATTRIBUTE_PURE; + +/* Get the list of all blocks. */ +extern void + uc_all_blocks (const uc_block_t **blocks, size_t *count); + +/* ========================================================================= */ + +/* Properties taken from language standards. */ + +/* Test whether a Unicode character is considered whitespace in ISO C 99. */ +extern bool + uc_is_c_whitespace (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test whether a Unicode character is considered whitespace in Java. */ +extern bool + uc_is_java_whitespace (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +enum +{ + UC_IDENTIFIER_START, /* valid as first or subsequent character */ + UC_IDENTIFIER_VALID, /* valid as subsequent character only */ + UC_IDENTIFIER_INVALID, /* not valid */ + UC_IDENTIFIER_IGNORABLE /* ignorable (Java only) */ +}; + +/* Return the categorization of a Unicode character w.r.t. the ISO C 99 + identifier syntax. */ +extern int + uc_c_ident_category (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Return the categorization of a Unicode character w.r.t. the Java + identifier syntax. */ +extern int + uc_java_ident_category (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +/* Like ISO C and . These functions are deprecated, + because this set of functions was designed with ASCII in mind and cannot + reflect the more diverse reality of the Unicode character set. But they + can be a quick-and-dirty porting aid when migrating from wchar_t APIs + to Unicode strings. */ + +/* Test for any character for which 'uc_is_alpha' or 'uc_is_digit' is true. */ +extern bool + uc_is_alnum (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any character for which 'uc_is_upper' or 'uc_is_lower' is true, + or any character that is one of a locale-specific set of characters for + which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' + is true. */ +extern bool + uc_is_alpha (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any control character. */ +extern bool + uc_is_cntrl (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any character that corresponds to a decimal-digit character. */ +extern bool + uc_is_digit (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any character for which 'uc_is_print' is true and 'uc_is_space' + is false. */ +extern bool + uc_is_graph (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any character that corresponds to a lowercase letter or is one + of a locale-specific set of characters for which none of 'uc_is_cntrl', + 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ +extern bool + uc_is_lower (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any printing character. */ +extern bool + uc_is_print (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any printing character that is one of a locale-specific set of + characters for which neither 'uc_is_space' nor 'uc_is_alnum' is true. */ +extern bool + uc_is_punct (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any character that corresponds to a locale-specific set of + characters for which none of 'uc_is_alnum', 'uc_is_graph', or 'uc_is_punct' + is true. */ +extern bool + uc_is_space (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any character that corresponds to an uppercase letter or is one + of a locale-specific set of character for which none of 'uc_is_cntrl', + 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ +extern bool + uc_is_upper (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* Test for any character that corresponds to a hexadecimal-digit + character. */ +extern bool + uc_is_xdigit (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* GNU extension. */ +/* Test for any character that corresponds to a standard blank character or + a locale-specific set of characters for which 'uc_is_alnum' is false. */ +extern bool + uc_is_blank (ucs4_t uc) + _UC_ATTRIBUTE_CONST; + +/* ========================================================================= */ + +#ifdef __cplusplus +} +#endif + +#endif /* _UNICTYPE_H */ diff --git a/jni/parted/lib/unistd.h b/jni/parted/lib/unistd.h new file mode 100755 index 0000000..94a2d5b --- /dev/null +++ b/jni/parted/lib/unistd.h @@ -0,0 +1,3017 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around . + Copyright (C) 2003-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_UNISTD_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if 1 && defined _GL_INCLUDING_UNISTD_H +/* Special invocation convention: + - On Mac OS X 10.3.9 we have a sequence of nested includes + -> -> -> + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#include_next + +#else +/* Normal invocation convention. */ + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# define _GL_INCLUDING_UNISTD_H +# include_next +# undef _GL_INCLUDING_UNISTD_H +#endif + +/* Avoid lseek bugs in FreeBSD, macOS . + This bug is fixed after FreeBSD 13; see . + Use macOS "9999" to stand for a future fixed macOS version. */ +#if defined __FreeBSD__ && __FreeBSD__ < 14 +# undef SEEK_DATA +# undef SEEK_HOLE +#elif defined __APPLE__ && defined __MACH__ && defined SEEK_DATA +# ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +# include +# endif +# if (!defined MAC_OS_X_VERSION_MIN_REQUIRED \ + || MAC_OS_X_VERSION_MIN_REQUIRED < 99990000) +# include /* It also defines the two macros. */ +# undef SEEK_DATA +# undef SEEK_HOLE +# endif +#endif + +/* Get all possible declarations of gethostname(). */ +#if 0 && 0 \ + && !defined _GL_INCLUDING_WINSOCK2_H +# define _GL_INCLUDING_WINSOCK2_H +# include +# undef _GL_INCLUDING_WINSOCK2_H +#endif + +#if !defined _GL_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H +#define _GL_UNISTD_H + +/* This file uses _GL_ATTRIBUTE_NODISCARD, _GL_INLINE_HEADER_BEGIN, _GL_INLINE, + GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* NetBSD 5.0 mis-defines NULL. Also get size_t. */ +/* But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include +#endif + +/* mingw doesn't define the SEEK_* or *_FILENO macros in . */ +/* MSVC declares 'unlink' in , not in . We must include + it before we #define unlink rpl_unlink. */ +/* Cygwin 1.7.1 declares symlinkat in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ + || ((1 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__)) \ + || ((0 || defined GNULIB_POSIXCHECK) \ + && defined __CYGWIN__)) \ + && ! defined __GLIBC__ +# include +#endif + +/* Cygwin 1.7.1 and Android 4.3 declare unlinkat in , not in + . */ +/* But avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) \ + && (defined __CYGWIN__ || defined __ANDROID__) \ + && ! defined __GLIBC__ +# include +#endif + +/* mingw fails to declare _exit in . */ +/* mingw, MSVC, BeOS, Haiku declare environ in , not in + . */ +/* Solaris declares getcwd not only in but also in . */ +/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system is + included here. */ +/* But avoid namespace pollution on glibc systems. */ +#if !defined __GLIBC__ && !defined __osf__ +# define __need_system_stdlib_h +# include +# undef __need_system_stdlib_h +#endif + +/* Native Windows platforms declare _chdir, _getcwd, _rmdir in + and/or , not in . + They also declare _access(), _chmod(), _close(), _dup(), _dup2(), _isatty(), + _lseek(), _read(), _unlink(), _write() in . */ +#if defined _WIN32 && !defined __CYGWIN__ +# include +# include +#endif + +/* Native Windows platforms declare _execl*, _execv* in . */ +#if defined _WIN32 && !defined __CYGWIN__ +# include +#endif + +/* AIX and OSF/1 5.1 declare getdomainname in , not in . + NonStop Kernel declares gethostname in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if ((0 && (defined _AIX || defined __osf__)) \ + || (0 && defined __TANDEM)) \ + && !defined __GLIBC__ +# include +#endif + +/* Mac OS X 10.13, Solaris 11.4, and Android 9.0 declare getentropy in + , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) \ + && ((defined __APPLE__ && defined __MACH__) || defined __sun \ + || defined __ANDROID__) \ + && 1 \ + && !defined __GLIBC__ +# include +#endif + +/* Android 4.3 declares fchownat in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ + && !defined __GLIBC__ +# include +#endif + +/* MSVC defines off_t in . + May also define off_t to a 64-bit type on native Windows. + Also defines off64_t on macOS, NetBSD, OpenBSD, MSVC, Cygwin, Haiku. */ +/* Get off_t, off64_t, ssize_t, mode_t. */ +#include + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Get getopt(), optarg, optind, opterr, optopt. */ +#if 1 && 00 && !defined _GL_SYSTEM_GETOPT +# include +# include +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_UNISTD_INLINE +# define _GL_UNISTD_INLINE _GL_INLINE +#endif + +/* Hide some function declarations from . */ + +#if 0 && 0 +# if !defined _GL_SYS_SOCKET_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# else + _GL_WARN_ON_USE (socket, + "socket() used without including "); + _GL_WARN_ON_USE (connect, + "connect() used without including "); + _GL_WARN_ON_USE (accept, + "accept() used without including "); + _GL_WARN_ON_USE (bind, + "bind() used without including "); + _GL_WARN_ON_USE (getpeername, + "getpeername() used without including "); + _GL_WARN_ON_USE (getsockname, + "getsockname() used without including "); + _GL_WARN_ON_USE (getsockopt, + "getsockopt() used without including "); + _GL_WARN_ON_USE (listen, + "listen() used without including "); + _GL_WARN_ON_USE (recv, + "recv() used without including "); + _GL_WARN_ON_USE (send, + "send() used without including "); + _GL_WARN_ON_USE (recvfrom, + "recvfrom() used without including "); + _GL_WARN_ON_USE (sendto, + "sendto() used without including "); + _GL_WARN_ON_USE (setsockopt, + "setsockopt() used without including "); + _GL_WARN_ON_USE (shutdown, + "shutdown() used without including "); +# endif +# endif +# if !defined _GL_SYS_SELECT_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef select +# define select select_used_without_including_sys_select_h +# else + _GL_WARN_ON_USE (select, + "select() used without including "); +# endif +# endif +#endif + + +/* OS/2 EMX lacks these macros. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Ensure *_OK macros exist. */ +#ifndef F_OK +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 +#endif + + +/* Declare overridden functions. */ + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef access +# define access rpl_access +# endif +_GL_FUNCDECL_RPL (access, int, (const char *file, int mode), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (access, int, (const char *file, int mode)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef access +# define access _access +# endif +_GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); +# else +_GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); +# endif +_GL_CXXALIASWARN (access); +#elif defined GNULIB_POSIXCHECK +# undef access +# if HAVE_RAW_DECL_ACCESS +/* The access() function is a security risk. */ +_GL_WARN_ON_USE (access, "access does not always support X_OK - " + "use gnulib module access for portability; " + "also, this function is a security risk - " + "use the gnulib module faccessat instead"); +# endif +#elif 1 +/* On native Windows, map 'access' to '_access', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::access always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef access +# define access _access +# endif +_GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); +# else +_GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); +# endif +_GL_CXXALIASWARN (access); +#endif + + +#if IN_PARTED_GNULIB_TESTS +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chdir +# define chdir _chdir +# endif +_GL_CXXALIAS_MDA (chdir, int, (const char *file)); +# else +_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIASWARN (chdir); +#elif defined GNULIB_POSIXCHECK +# undef chdir +# if HAVE_RAW_DECL_CHDIR +_GL_WARN_ON_USE (chdir, "chdir is not always in - " + "use gnulib module chdir for portability"); +# endif +#elif 1 +/* On native Windows, map 'chdir' to '_chdir', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::chdir always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chdir +# define chdir _chdir +# endif +_GL_CXXALIAS_MDA (chdir, int, (const char *file)); +# else +_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIASWARN (chdir); +#endif + + +#if 0 +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup2 rpl_dup2 +# endif +_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd), ); +_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef dup2 +# define dup2 _dup2 +# endif +_GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); +# else +_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIASWARN (dup2); +#elif defined GNULIB_POSIXCHECK +# undef dup2 +# if HAVE_RAW_DECL_DUP2 +_GL_WARN_ON_USE (dup2, "dup2 is unportable - " + "use gnulib module dup2 for portability"); +# endif +#elif 1 +/* On native Windows, map 'dup2' to '_dup2', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::dup2 always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef dup2 +# define dup2 _dup2 +# endif +_GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); +# else +_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIASWARN (dup2); +#endif + + +#if 0 +/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the + specified flags. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Close NEWFD first if it is open. + Return newfd if successful, otherwise -1 and errno set. + See the Linux man page at + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef dup3 +# define dup3 rpl_dup3 +# endif +_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags), ); +_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); +# else +# if !1 +_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags), ); +# endif +_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (dup3); +# endif +#elif defined GNULIB_POSIXCHECK +# undef dup3 +# if HAVE_RAW_DECL_DUP3 +_GL_WARN_ON_USE (dup3, "dup3 is unportable - " + "use gnulib module dup3 for portability"); +# endif +#endif + + +#if IN_PARTED_GNULIB_TESTS +# if defined __CYGWIN__ && !defined __i386__ +/* The 'environ' variable is defined in a DLL. Therefore its declaration needs + the '__declspec(dllimport)' attribute, but the system's lacks it. + This leads to a link error on 64-bit Cygwin when the option + -Wl,--disable-auto-import is in use. */ +_GL_EXTERN_C __declspec(dllimport) char **environ; +# endif +# if !1 +/* Set of environment variables and values. An array of strings of the form + "VARIABLE=VALUE", terminated with a NULL. */ +# if defined __APPLE__ && defined __MACH__ +# include +# if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR +# define _GL_USE_CRT_EXTERNS +# endif +# endif +# ifdef _GL_USE_CRT_EXTERNS +# include +# define environ (*_NSGetEnviron ()) +# else +# ifdef __cplusplus +extern "C" { +# endif +extern char **environ; +# ifdef __cplusplus +} +# endif +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if HAVE_RAW_DECL_ENVIRON +_GL_UNISTD_INLINE char *** +_GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " + "use gnulib module environ for portability") +rpl_environ (void) +{ + return &environ; +} +# undef environ +# define environ (*rpl_environ ()) +# endif +#endif + + +#if 0 +/* Like access(), except that it uses the effective user id and group id of + the current process. */ +# if !1 +_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); +_GL_CXXALIASWARN (euidaccess); +# if defined GNULIB_POSIXCHECK +/* Like access(), this function is a security risk. */ +_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " + "use the gnulib module faccessat instead"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef euidaccess +# if HAVE_RAW_DECL_EUIDACCESS +_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " + "use gnulib module euidaccess for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execl +# define execl rpl_execl +# endif +_GL_FUNCDECL_RPL (execl, int, (const char *program, const char *arg, ...), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (execl, int, (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execl); +#elif defined GNULIB_POSIXCHECK +# undef execl +# if HAVE_RAW_DECL_EXECL +_GL_WARN_ON_USE (execl, "execl behaves very differently on mingw - " + "use gnulib module execl for portability"); +# endif +#elif 1 +/* On native Windows, map 'execl' to '_execl', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execl always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execl +# define execl _execl +# endif +_GL_CXXALIAS_MDA (execl, intptr_t, (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execl); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execle +# define execle rpl_execle +# endif +_GL_FUNCDECL_RPL (execle, int, (const char *program, const char *arg, ...), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (execle, int, (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execle); +#elif defined GNULIB_POSIXCHECK +# undef execle +# if HAVE_RAW_DECL_EXECLE +_GL_WARN_ON_USE (execle, "execle behaves very differently on mingw - " + "use gnulib module execle for portability"); +# endif +#elif 1 +/* On native Windows, map 'execle' to '_execle', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execle always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execle +# define execle _execle +# endif +_GL_CXXALIAS_MDA (execle, intptr_t, + (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execle); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execlp +# define execlp rpl_execlp +# endif +_GL_FUNCDECL_RPL (execlp, int, (const char *program, const char *arg, ...), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (execlp, int, (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execlp); +#elif defined GNULIB_POSIXCHECK +# undef execlp +# if HAVE_RAW_DECL_EXECLP +_GL_WARN_ON_USE (execlp, "execlp behaves very differently on mingw - " + "use gnulib module execlp for portability"); +# endif +#elif 1 +/* On native Windows, map 'execlp' to '_execlp', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execlp always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execlp +# define execlp _execlp +# endif +_GL_CXXALIAS_MDA (execlp, intptr_t, + (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execlp); +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execv +# define execv rpl_execv +# endif +_GL_FUNCDECL_RPL (execv, int, (const char *program, char * const *argv), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (execv, int, (const char *program, char * const *argv)); +# else +_GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); +# endif +_GL_CXXALIASWARN (execv); +#elif defined GNULIB_POSIXCHECK +# undef execv +# if HAVE_RAW_DECL_EXECV +_GL_WARN_ON_USE (execv, "execv behaves very differently on mingw - " + "use gnulib module execv for portability"); +# endif +#elif 1 +/* On native Windows, map 'execv' to '_execv', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execv always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execv +# define execv _execv +# endif +_GL_CXXALIAS_MDA_CAST (execv, intptr_t, + (const char *program, char * const *argv)); +# else +_GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); +# endif +_GL_CXXALIASWARN (execv); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execve +# define execve rpl_execve +# endif +_GL_FUNCDECL_RPL (execve, int, + (const char *program, char * const *argv, char * const *env), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (execve, int, + (const char *program, char * const *argv, char * const *env)); +# else +_GL_CXXALIAS_SYS (execve, int, + (const char *program, char * const *argv, char * const *env)); +# endif +_GL_CXXALIASWARN (execve); +#elif defined GNULIB_POSIXCHECK +# undef execve +# if HAVE_RAW_DECL_EXECVE +_GL_WARN_ON_USE (execve, "execve behaves very differently on mingw - " + "use gnulib module execve for portability"); +# endif +#elif 1 +/* On native Windows, map 'execve' to '_execve', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execve always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execve +# define execve _execve +# endif +_GL_CXXALIAS_MDA_CAST (execve, intptr_t, + (const char *program, char * const *argv, + char * const *env)); +# else +_GL_CXXALIAS_SYS (execve, int, + (const char *program, char * const *argv, char * const *env)); +# endif +_GL_CXXALIASWARN (execve); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execvp +# define execvp rpl_execvp +# endif +_GL_FUNCDECL_RPL (execvp, int, (const char *program, char * const *argv), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (execvp, int, (const char *program, char * const *argv)); +# else +_GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); +# endif +_GL_CXXALIASWARN (execvp); +#elif defined GNULIB_POSIXCHECK +# undef execvp +# if HAVE_RAW_DECL_EXECVP +_GL_WARN_ON_USE (execvp, "execvp behaves very differently on mingw - " + "use gnulib module execvp for portability"); +# endif +#elif 1 +/* On native Windows, map 'execvp' to '_execvp', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execvp always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execvp +# define execvp _execvp +# endif +_GL_CXXALIAS_MDA_CAST (execvp, intptr_t, + (const char *program, char * const *argv)); +# else +_GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); +# endif +_GL_CXXALIASWARN (execvp); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execvpe +# define execvpe rpl_execvpe +# endif +_GL_FUNCDECL_RPL (execvpe, int, + (const char *program, char * const *argv, char * const *env), + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (execvpe, int, + (const char *program, char * const *argv, char * const *env)); +# else +# if !1 +_GL_FUNCDECL_SYS (execvpe, int, + (const char *program, char * const *argv, char * const *env), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (execvpe, int, + (const char *program, char * const *argv, char * const *env)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (execvpe); +# endif +#elif defined GNULIB_POSIXCHECK +# undef execvpe +# if HAVE_RAW_DECL_EXECVPE +_GL_WARN_ON_USE (execvpe, "execvpe behaves very differently on mingw - " + "use gnulib module execvpe for portability"); +# endif +#elif 1 +/* On native Windows, map 'execvpe' to '_execvpe', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execvpe on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execvpe +# define execvpe _execvpe +# endif +_GL_CXXALIAS_MDA_CAST (execvpe, intptr_t, + (const char *program, char * const *argv, + char * const *env)); +# elif 1 +# if !1 +_GL_FUNCDECL_SYS (execvpe, int, + (const char *program, char * const *argv, char * const *env), + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (execvpe, int, + (const char *program, char * const *argv, char * const *env)); +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 1 +_GL_CXXALIASWARN (execvpe); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef faccessat +# define faccessat rpl_faccessat +# endif +_GL_FUNCDECL_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (faccessat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef faccessat +# if HAVE_RAW_DECL_FACCESSAT +_GL_WARN_ON_USE (faccessat, "faccessat is not portable - " + "use gnulib module faccessat for portability"); +# endif +#endif + + +#if IN_PARTED_GNULIB_TESTS +/* Change the process' current working directory to the directory on which + the given file descriptor is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchdir +# define fchdir rpl_fchdir +# endif +_GL_FUNCDECL_RPL (fchdir, int, (int /*fd*/), _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (fchdir, int, (int /*fd*/)); +# else +# if !1 || !1 +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/), _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); +# endif +_GL_CXXALIASWARN (fchdir); +# if 0 || !1 +/* Gnulib internal hooks needed to maintain the fchdir metadata. */ +_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) + _GL_ARG_NONNULL ((2)); +_GL_EXTERN_C void _gl_unregister_fd (int fd); +_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); +_GL_EXTERN_C const char *_gl_directory_name (int fd); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fchdir +# if HAVE_RAW_DECL_FCHDIR +_GL_WARN_ON_USE (fchdir, "fchdir is unportable - " + "use gnulib module fchdir for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchownat +# define fchownat rpl_fchownat +# endif +_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# endif +_GL_CXXALIASWARN (fchownat); +#elif defined GNULIB_POSIXCHECK +# undef fchownat +# if HAVE_RAW_DECL_FCHOWNAT +_GL_WARN_ON_USE (fchownat, "fchownat is not portable - " + "use gnulib module fchownat for portability"); +# endif +#endif + + +#if 0 +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdatasync +# define fdatasync rpl_fdatasync +# endif +_GL_FUNCDECL_RPL (fdatasync, int, (int fd), ); +_GL_CXXALIAS_RPL (fdatasync, int, (int fd)); +# else +# if !1|| !1 +_GL_FUNCDECL_SYS (fdatasync, int, (int fd), ); +# endif +_GL_CXXALIAS_SYS (fdatasync, int, (int fd)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fdatasync); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fdatasync +# if HAVE_RAW_DECL_FDATASYNC +_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " + "use gnulib module fdatasync for portability"); +# endif +#endif + + +#if 1 +/* Synchronize changes, including metadata, to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + . */ +# if !1 +_GL_FUNCDECL_SYS (fsync, int, (int fd), ); +# endif +_GL_CXXALIAS_SYS (fsync, int, (int fd)); +_GL_CXXALIASWARN (fsync); +#elif defined GNULIB_POSIXCHECK +# undef fsync +# if HAVE_RAW_DECL_FSYNC +_GL_WARN_ON_USE (fsync, "fsync is unportable - " + "use gnulib module fsync for portability"); +# endif +#endif + + +#if IN_PARTED_GNULIB_TESTS +/* Change the size of the file to which FD is opened to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftruncate +# define ftruncate rpl_ftruncate +# endif +_GL_FUNCDECL_RPL (ftruncate, int, + (int fd, off_t length), _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (ftruncate, int, + (int fd, off_t length)); +# else +# if !1 +_GL_FUNCDECL_SYS (ftruncate, int, + (int fd, off_t length), _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (ftruncate, int, + (int fd, off_t length)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (ftruncate); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ftruncate +# if HAVE_RAW_DECL_FTRUNCATE +_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " + "use gnulib module ftruncate for portability"); +# endif +#endif + + +#if (IN_PARTED_GNULIB_TESTS || IN_PARTED_GNULIB_TESTS) +/* Get the name of the current working directory, and put it in SIZE bytes + of BUF. + Return BUF if successful, or NULL if the directory couldn't be determined + or SIZE was too small. + See the POSIX:2008 specification + . + Additionally, the gnulib module 'getcwd' or 'getcwd-lgpl' guarantees the + following GNU extension: If BUF is NULL, an array is allocated with + 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case + it is as big as necessary. */ +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getcwd rpl_getcwd +# endif +_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size), + _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getcwd +# define getcwd _getcwd +# endif +_GL_CXXALIAS_MDA (getcwd, char *, (char *buf, size_t size)); +# else +/* Need to cast, because on mingw, the second parameter is + int size. */ +_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); +# endif +_GL_CXXALIASWARN (getcwd); +#elif defined GNULIB_POSIXCHECK +# undef getcwd +# if HAVE_RAW_DECL_GETCWD +_GL_WARN_ON_USE (getcwd, "getcwd is unportable - " + "use gnulib module getcwd for portability"); +# endif +#elif 1 +/* On native Windows, map 'getcwd' to '_getcwd', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::getcwd always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getcwd +# define getcwd _getcwd +# endif +/* Need to cast, because on mingw, the second parameter is either + 'int size' or 'size_t size'. */ +_GL_CXXALIAS_MDA_CAST (getcwd, char *, (char *buf, size_t size)); +# else +_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); +# endif +_GL_CXXALIASWARN (getcwd); +#endif + + +#if 0 +/* Return the NIS domain name of the machine. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + + Put up to LEN bytes of the NIS domain name into NAME. + Null terminate it if the name is shorter than LEN. + If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdomainname +# define getdomainname rpl_getdomainname +# endif +_GL_FUNCDECL_RPL (getdomainname, int, + (char *name, size_t len), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (getdomainname, int, + (char *name, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (getdomainname, int, + (char *name, size_t len), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (getdomainname, int, + (char *name, size_t len)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getdomainname); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdomainname +# if HAVE_RAW_DECL_GETDOMAINNAME +_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " + "use gnulib module getdomainname for portability"); +# endif +#endif + + +#if 1 +/* Return the maximum number of file descriptors in the current process. + In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdtablesize +# define getdtablesize rpl_getdtablesize +# endif +_GL_FUNCDECL_RPL (getdtablesize, int, (void), ); +_GL_CXXALIAS_RPL (getdtablesize, int, (void)); +# else +# if !0 +_GL_FUNCDECL_SYS (getdtablesize, int, (void), ); +# endif +/* Need to cast, because on AIX, the parameter list is + (...). */ +_GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void)); +# endif +_GL_CXXALIASWARN (getdtablesize); +#elif defined GNULIB_POSIXCHECK +# undef getdtablesize +# if HAVE_RAW_DECL_GETDTABLESIZE +_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " + "use gnulib module getdtablesize for portability"); +# endif +#endif + + +#if 0 +/* Fill a buffer with random bytes. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getentropy +# define getentropy rpl_getentropy +# endif +_GL_FUNCDECL_RPL (getentropy, int, + (void *buffer, size_t length), _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (getentropy, int, + (void *buffer, size_t length)); +# else +# if !1 +_GL_FUNCDECL_SYS (getentropy, int, + (void *buffer, size_t length), _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (getentropy, int, + (void *buffer, size_t length)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getentropy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getentropy +# if HAVE_RAW_DECL_GETENTROPY +_GL_WARN_ON_USE (getentropy, "getentropy is unportable - " + "use gnulib module getentropy for portability"); +# endif +#endif + + +#if 0 +/* Return the supplemental groups that the current process belongs to. + It is unspecified whether the effective group id is in the list. + If N is 0, return the group count; otherwise, N describes how many + entries are available in GROUPS. Return -1 and set errno if N is + not 0 and not large enough. Fails with ENOSYS on some systems. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getgroups +# define getgroups rpl_getgroups +# endif +_GL_FUNCDECL_RPL (getgroups, int, + (int n, gid_t *groups), _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (getgroups, int, + (int n, gid_t *groups)); +# else +# if !1 +_GL_FUNCDECL_SYS (getgroups, int, + (int n, gid_t *groups), _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (getgroups, int, + (int n, gid_t *groups)); +# endif +_GL_CXXALIASWARN (getgroups); +#elif defined GNULIB_POSIXCHECK +# undef getgroups +# if HAVE_RAW_DECL_GETGROUPS +_GL_WARN_ON_USE (getgroups, "getgroups is unportable - " + "use gnulib module getgroups for portability"); +# endif +#endif + + +#if 0 +/* Return the standard host name of the machine. + WARNING! The host name may or may not be fully qualified. + + Put up to LEN bytes of the host name into NAME. + Null terminate it if the name is shorter than LEN. + If the host name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gethostname +# define gethostname rpl_gethostname +# endif +_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len), + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second + parameter is + int len. */ +_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (gethostname); +#elif 0 +# if !GNULIB_GETHOSTNAME +# undef gethostname +# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname +# endif +#elif defined GNULIB_POSIXCHECK +# undef gethostname +# if HAVE_RAW_DECL_GETHOSTNAME +_GL_WARN_ON_USE (gethostname, "gethostname is unportable - " + "use gnulib module gethostname for portability"); +# endif +#endif + + +#if 0 +/* Returns the user's login name, or NULL if it cannot be found. Upon error, + returns NULL with errno set. + + See . + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if !1 +_GL_FUNCDECL_SYS (getlogin, char *, (void), ); +# endif +_GL_CXXALIAS_SYS (getlogin, char *, (void)); +_GL_CXXALIASWARN (getlogin); +#elif defined GNULIB_POSIXCHECK +# undef getlogin +# if HAVE_RAW_DECL_GETLOGIN +_GL_WARN_ON_USE (getlogin, "getlogin is unportable - " + "use gnulib module getlogin for portability"); +# endif +#endif + + +#if 0 +/* Copies the user's login name to NAME. + The array pointed to by NAME has room for SIZE bytes. + + Returns 0 if successful. Upon error, an error number is returned, or -1 in + the case that the login name cannot be found but no specific error is + provided (this case is hopefully rare but is left open by the POSIX spec). + + See . + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getlogin_r rpl_getlogin_r +# endif +_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); +# else +# if !1 +_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size), + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 systems, the second argument is + int size. */ +_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getlogin_r); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getlogin_r +# if HAVE_RAW_DECL_GETLOGIN_R +_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " + "use gnulib module getlogin_r for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize rpl_getpagesize +# endif +_GL_FUNCDECL_RPL (getpagesize, int, (void), ); +_GL_CXXALIAS_RPL (getpagesize, int, (void)); +# else +/* On HP-UX, getpagesize exists, but it is not declared in even if + the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ +# if defined __hpux +_GL_FUNCDECL_SYS (getpagesize, int, (void), ); +# endif +# if !1 +# if !defined getpagesize +/* This is for POSIX systems. */ +# if !defined _gl_getpagesize && defined _SC_PAGESIZE +# if ! (defined __VMS && __VMS_VER < 70000000) +# define _gl_getpagesize() sysconf (_SC_PAGESIZE) +# endif +# endif +/* This is for older VMS. */ +# if !defined _gl_getpagesize && defined __VMS +# ifdef __ALPHA +# define _gl_getpagesize() 8192 +# else +# define _gl_getpagesize() 512 +# endif +# endif +/* This is for BeOS. */ +# if !defined _gl_getpagesize && 0 +# include +# if defined B_PAGE_SIZE +# define _gl_getpagesize() B_PAGE_SIZE +# endif +# endif +/* This is for AmigaOS4.0. */ +# if !defined _gl_getpagesize && defined __amigaos4__ +# define _gl_getpagesize() 2048 +# endif +/* This is for older Unix systems. */ +# if !defined _gl_getpagesize && 0 +# include +# ifdef EXEC_PAGESIZE +# define _gl_getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# define _gl_getpagesize() (NBPG * CLSIZE) +# else +# ifdef NBPC +# define _gl_getpagesize() NBPC +# endif +# endif +# endif +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize() _gl_getpagesize () +# else +# if !GNULIB_defined_getpagesize_function +_GL_UNISTD_INLINE int +getpagesize () +{ + return _gl_getpagesize (); +} +# define GNULIB_defined_getpagesize_function 1 +# endif +# endif +# endif +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ +_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); +# endif +# if 1 +_GL_CXXALIASWARN (getpagesize); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getpagesize +# if HAVE_RAW_DECL_GETPAGESIZE +_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " + "use gnulib module getpagesize for portability"); +# endif +#endif + + +#if 0 +/* Function getpass() from module 'getpass': + Read a password from /dev/tty or stdin. + Function getpass() from module 'getpass-gnu': + Read a password of arbitrary length from /dev/tty or stdin. */ +# if (0 && 0) \ + || (0 && 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getpass +# define getpass rpl_getpass +# endif +_GL_FUNCDECL_RPL (getpass, char *, (const char *prompt), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); +# else +# if !1 +_GL_FUNCDECL_SYS (getpass, char *, (const char *prompt), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); +# endif +_GL_CXXALIASWARN (getpass); +#elif defined GNULIB_POSIXCHECK +# undef getpass +# if HAVE_RAW_DECL_GETPASS +_GL_WARN_ON_USE (getpass, "getpass is unportable - " + "use gnulib module getpass or getpass-gnu for portability"); +# endif +#endif + + +#if 1 +/* On native Windows, map 'getpid' to '_getpid', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::getpid always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getpid +# define getpid _getpid +# endif +_GL_CXXALIAS_MDA (getpid, int, (void)); +# else +_GL_CXXALIAS_SYS (getpid, pid_t, (void)); +# endif +_GL_CXXALIASWARN (getpid); +#endif + + +#if 0 +# if 0 +/* Return the next valid login shell on the system, or NULL when the end of + the list has been reached. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getusershell +# define getusershell rpl_getusershell +# endif +_GL_FUNCDECL_RPL (getusershell, char *, (void), ); +_GL_CXXALIAS_RPL (getusershell, char *, (void)); +# else +# if !1 +_GL_FUNCDECL_SYS (getusershell, char *, (void), ); +# endif +_GL_CXXALIAS_SYS (getusershell, char *, (void)); +# endif +_GL_CXXALIASWARN (getusershell); +#elif defined GNULIB_POSIXCHECK +# undef getusershell +# if HAVE_RAW_DECL_GETUSERSHELL +_GL_WARN_ON_USE (getusershell, "getusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if 0 +/* Rewind to pointer that is advanced at each getusershell() call. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setusershell +# define setusershell rpl_setusershell +# endif +_GL_FUNCDECL_RPL (setusershell, void, (void), ); +_GL_CXXALIAS_RPL (setusershell, void, (void)); +# else +# if !1 +_GL_FUNCDECL_SYS (setusershell, void, (void), ); +# endif +_GL_CXXALIAS_SYS (setusershell, void, (void)); +# endif +_GL_CXXALIASWARN (setusershell); +#elif defined GNULIB_POSIXCHECK +# undef setusershell +# if HAVE_RAW_DECL_SETUSERSHELL +_GL_WARN_ON_USE (setusershell, "setusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if 0 +/* Free the pointer that is advanced at each getusershell() call and + associated resources. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef endusershell +# define endusershell rpl_endusershell +# endif +_GL_FUNCDECL_RPL (endusershell, void, (void), ); +_GL_CXXALIAS_RPL (endusershell, void, (void)); +# else +# if !1 +_GL_FUNCDECL_SYS (endusershell, void, (void), ); +# endif +_GL_CXXALIAS_SYS (endusershell, void, (void)); +# endif +_GL_CXXALIASWARN (endusershell); +#elif defined GNULIB_POSIXCHECK +# undef endusershell +# if HAVE_RAW_DECL_ENDUSERSHELL +_GL_WARN_ON_USE (endusershell, "endusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + + +#if 0 +/* Determine whether group id is in calling user's group list. */ +# if !1 +_GL_FUNCDECL_SYS (group_member, int, (gid_t gid), ); +# endif +_GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); +_GL_CXXALIASWARN (group_member); +#elif defined GNULIB_POSIXCHECK +# undef group_member +# if HAVE_RAW_DECL_GROUP_MEMBER +_GL_WARN_ON_USE (group_member, "group_member is unportable - " + "use gnulib module group-member for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty rpl_isatty +# endif +# define GNULIB_defined_isatty 1 +_GL_FUNCDECL_RPL (isatty, int, (int fd), ); +_GL_CXXALIAS_RPL (isatty, int, (int fd)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty _isatty +# endif +_GL_CXXALIAS_MDA (isatty, int, (int fd)); +# else +_GL_CXXALIAS_SYS (isatty, int, (int fd)); +# endif +_GL_CXXALIASWARN (isatty); +#elif defined GNULIB_POSIXCHECK +# undef isatty +# if HAVE_RAW_DECL_ISATTY +_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " + "use gnulib module isatty for portability"); +# endif +#elif 1 +/* On native Windows, map 'isatty' to '_isatty', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::isatty always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty _isatty +# endif +_GL_CXXALIAS_MDA (isatty, int, (int fd)); +# else +_GL_CXXALIAS_SYS (isatty, int, (int fd)); +# endif +_GL_CXXALIASWARN (isatty); +#endif + + +#if 0 +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Do not follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lchown +# define lchown rpl_lchown +# endif +_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); +# else +# if !1 +_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); +# endif +_GL_CXXALIASWARN (lchown); +#elif defined GNULIB_POSIXCHECK +# undef lchown +# if HAVE_RAW_DECL_LCHOWN +_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " + "use gnulib module lchown for portability"); +# endif +#endif + + +#if 0 +/* Create a new hard link for an existing file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define link rpl_link +# endif +_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); +# else +# if !1 +_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); +# endif +_GL_CXXALIASWARN (link); +#elif defined GNULIB_POSIXCHECK +# undef link +# if HAVE_RAW_DECL_LINK +_GL_WARN_ON_USE (link, "link is unportable - " + "use gnulib module link for portability"); +# endif +#endif + + +#if 0 +/* Create a new hard link for an existing file, relative to two + directories. FLAG controls whether symlinks are followed. + Return 0 if successful, otherwise -1 and errno set. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef linkat +# define linkat rpl_linkat +# endif +_GL_FUNCDECL_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag), + _GL_ARG_NONNULL ((2, 4)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag), + _GL_ARG_NONNULL ((2, 4)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (linkat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef linkat +# if HAVE_RAW_DECL_LINKAT +_GL_WARN_ON_USE (linkat, "linkat is unportable - " + "use gnulib module linkat for portability"); +# endif +#endif + + +#if 1 +/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. + Return the new offset if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lseek rpl_lseek +# endif +_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence), ); +_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lseek +# define lseek _lseek +# endif +_GL_CXXALIAS_MDA (lseek, off_t, (int fd, off_t offset, int whence)); +# else +_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (lseek); +#elif defined GNULIB_POSIXCHECK +# undef lseek +# if HAVE_RAW_DECL_LSEEK +_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " + "systems - use gnulib module lseek for portability"); +# endif +#elif 1 +/* On native Windows, map 'lseek' to '_lseek', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::lseek always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lseek +# define lseek _lseek +# endif +_GL_CXXALIAS_MDA (lseek, long, (int fd, long offset, int whence)); +# else +_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (lseek); +#endif + + +#if IN_PARTED_GNULIB_TESTS +/* Create a pipe, defaulting to O_BINARY mode. + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. */ +# if !1 +_GL_FUNCDECL_SYS (pipe, int, (int fd[2]), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (pipe, int, (int fd[2])); +_GL_CXXALIASWARN (pipe); +#elif defined GNULIB_POSIXCHECK +# undef pipe +# if HAVE_RAW_DECL_PIPE +_GL_WARN_ON_USE (pipe, "pipe is unportable - " + "use gnulib module pipe-posix for portability"); +# endif +#endif + + +#if 0 +/* Create a pipe, applying the given flags when opening the read-end of the + pipe and the write-end of the pipe. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. + See also the Linux man page at + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pipe2 +# define pipe2 rpl_pipe2 +# endif +_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); +# else +_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pipe2); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pipe2 +# if HAVE_RAW_DECL_PIPE2 +_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " + "use gnulib module pipe2 for portability"); +# endif +#endif + + +#if 0 +/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. + Return the number of bytes placed into BUF if successful, otherwise + set errno and return -1. 0 indicates EOF. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pread +# define pread rpl_pread +# endif +_GL_FUNCDECL_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# else +# if !1 +_GL_FUNCDECL_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pread); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pread +# if HAVE_RAW_DECL_PREAD +_GL_WARN_ON_USE (pread, "pread is unportable - " + "use gnulib module pread for portability"); +# endif +#endif + + +#if 0 +/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. + Return the number of bytes written if successful, otherwise + set errno and return -1. 0 indicates nothing written. See the + POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pwrite +# define pwrite rpl_pwrite +# endif +_GL_FUNCDECL_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# else +# if !1 +_GL_FUNCDECL_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pwrite); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pwrite +# if HAVE_RAW_DECL_PWRITE +_GL_WARN_ON_USE (pwrite, "pwrite is unportable - " + "use gnulib module pwrite for portability"); +# endif +#endif + + +#if 1 +/* Read up to COUNT bytes from file descriptor FD into the buffer starting + at BUF. See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read rpl_read +# endif + +_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read _read +# endif +_GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, size_t count)); +# else +_GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (read); +#elif 1 +/* On native Windows, map 'read' to '_read', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::read always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read _read +# endif +_GL_CXXALIAS_MDA_CAST (read, ssize_t, (int fd, void *buf, unsigned int count)); +# else +_GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (read); +#endif + + +#if 1 +/* Read the contents of the symbolic link FILE and place the first BUFSIZE + bytes of it into BUF. Return the number of bytes placed into BUF if + successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlink rpl_readlink +# endif +_GL_FUNCDECL_RPL (readlink, ssize_t, + (const char *restrict file, + char *restrict buf, size_t bufsize), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (readlink, ssize_t, + (const char *restrict file, + char *restrict buf, size_t bufsize)); +# else +# if !1 +_GL_FUNCDECL_SYS (readlink, ssize_t, + (const char *restrict file, + char *restrict buf, size_t bufsize), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (readlink, ssize_t, + (const char *restrict file, + char *restrict buf, size_t bufsize)); +# endif +_GL_CXXALIASWARN (readlink); +#elif defined GNULIB_POSIXCHECK +# undef readlink +# if HAVE_RAW_DECL_READLINK +_GL_WARN_ON_USE (readlink, "readlink is unportable - " + "use gnulib module readlink for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlinkat rpl_readlinkat +# endif +_GL_FUNCDECL_RPL (readlinkat, ssize_t, + (int fd, char const *restrict file, + char *restrict buf, size_t len), + _GL_ARG_NONNULL ((2, 3)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (readlinkat, ssize_t, + (int fd, char const *restrict file, + char *restrict buf, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (readlinkat, ssize_t, + (int fd, char const *restrict file, + char *restrict buf, size_t len), + _GL_ARG_NONNULL ((2, 3)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (readlinkat, ssize_t, + (int fd, char const *restrict file, + char *restrict buf, size_t len)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (readlinkat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef readlinkat +# if HAVE_RAW_DECL_READLINKAT +_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " + "use gnulib module readlinkat for portability"); +# endif +#endif + + +#if 0 +/* Remove the directory DIR. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define rmdir rpl_rmdir +# endif +_GL_FUNCDECL_RPL (rmdir, int, (char const *name), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (rmdir, int, (char const *name)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rmdir +# define rmdir _rmdir +# endif +_GL_CXXALIAS_MDA (rmdir, int, (char const *name)); +# else +_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); +# endif +_GL_CXXALIASWARN (rmdir); +#elif defined GNULIB_POSIXCHECK +# undef rmdir +# if HAVE_RAW_DECL_RMDIR +_GL_WARN_ON_USE (rmdir, "rmdir is unportable - " + "use gnulib module rmdir for portability"); +# endif +#elif 1 +/* On native Windows, map 'rmdir' to '_rmdir', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::rmdir always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rmdir +# define rmdir _rmdir +# endif +_GL_CXXALIAS_MDA (rmdir, int, (char const *name)); +# else +_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); +# endif +_GL_CXXALIASWARN (rmdir); +#endif + + +#if 0 +/* Set the host name of the machine. + The host name may or may not be fully qualified. + + Put LEN bytes of NAME into the host name. + Return 0 if successful, otherwise, set errno and return -1. + + Platforms with no ability to set the hostname return -1 and set + errno = ENOSYS. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sethostname +# define sethostname rpl_sethostname +# endif +_GL_FUNCDECL_RPL (sethostname, int, + (const char *name, size_t len), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (sethostname, int, + (const char *name, size_t len)); +# else +# if !1 || !1 +_GL_FUNCDECL_SYS (sethostname, int, + (const char *name, size_t len), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 + and FreeBSD 6.4 the second parameter is int. On Solaris 11 + 2011-10, the first parameter is not const. */ +_GL_CXXALIAS_SYS_CAST (sethostname, int, + (const char *name, size_t len)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (sethostname); +# endif +#elif defined GNULIB_POSIXCHECK +# undef sethostname +# if HAVE_RAW_DECL_SETHOSTNAME +_GL_WARN_ON_USE (sethostname, "sethostname is unportable - " + "use gnulib module sethostname for portability"); +# endif +#endif + + +#if 1 +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sleep +# define sleep rpl_sleep +# endif +_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n), ); +_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); +# else +# if !1 +_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n), ); +# endif +_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIASWARN (sleep); +#elif defined GNULIB_POSIXCHECK +# undef sleep +# if HAVE_RAW_DECL_SLEEP +_GL_WARN_ON_USE (sleep, "sleep is unportable - " + "use gnulib module sleep for portability"); +# endif +#endif + + +#if 1 +/* On native Windows, map 'swab' to '_swab', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::swab always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef swab +# define swab _swab +# endif +/* Need to cast, because in old mingw the arguments are + (const char *from, char *to, size_t n). */ +_GL_CXXALIAS_MDA_CAST (swab, void, (char *from, char *to, int n)); +# else +# if defined __hpux /* HP-UX */ +_GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, int n)); +# elif defined __sun && (defined __SunOS_5_10 || defined __XOPEN_OR_POSIX) && !defined _XPG4 /* Solaris */ +_GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, ssize_t n)); +# else +_GL_CXXALIAS_SYS (swab, void, (const void *from, void *to, ssize_t n)); +# endif +# endif +_GL_CXXALIASWARN (swab); +#endif + + +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlink +# define symlink rpl_symlink +# endif +_GL_FUNCDECL_RPL (symlink, int, + (char const *contents, char const *file), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (symlink, int, + (char const *contents, char const *file)); +# else +# if !1 +_GL_FUNCDECL_SYS (symlink, int, + (char const *contents, char const *file), + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (symlink, int, + (char const *contents, char const *file)); +# endif +_GL_CXXALIASWARN (symlink); +#elif defined GNULIB_POSIXCHECK +# undef symlink +# if HAVE_RAW_DECL_SYMLINK +_GL_WARN_ON_USE (symlink, "symlink is not portable - " + "use gnulib module symlink for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlinkat +# define symlinkat rpl_symlinkat +# endif +_GL_FUNCDECL_RPL (symlinkat, int, + (char const *contents, int fd, char const *file), + _GL_ARG_NONNULL ((1, 3)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (symlinkat, int, + (char const *contents, int fd, char const *file)); +# else +# if !1 +_GL_FUNCDECL_SYS (symlinkat, int, + (char const *contents, int fd, char const *file), + _GL_ARG_NONNULL ((1, 3)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (symlinkat, int, + (char const *contents, int fd, char const *file)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (symlinkat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef symlinkat +# if HAVE_RAW_DECL_SYMLINKAT +_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " + "use gnulib module symlinkat for portability"); +# endif +#endif + + +#if 0 +/* Change the size of the file designated by FILENAME to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef truncate +# define truncate rpl_truncate +# endif +_GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); +# else +# if !1 +_GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length), + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (truncate); +# endif +#elif defined GNULIB_POSIXCHECK +# undef truncate +# if HAVE_RAW_DECL_TRUNCATE +_GL_WARN_ON_USE (truncate, "truncate is unportable - " + "use gnulib module truncate for portability"); +# endif +#endif + + +#if 0 +/* Store at most BUFLEN characters of the pathname of the terminal FD is + open on in BUF. Return 0 on success, otherwise an error number. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ttyname_r +# define ttyname_r rpl_ttyname_r +# endif +_GL_FUNCDECL_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# else +# if !1 +_GL_FUNCDECL_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +# endif +_GL_CXXALIAS_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (ttyname_r); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ttyname_r +# if HAVE_RAW_DECL_TTYNAME_R +_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " + "use gnulib module ttyname_r for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink rpl_unlink +# endif +_GL_FUNCDECL_RPL (unlink, int, (char const *file), _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unlink, int, (char const *file)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink _unlink +# endif +_GL_CXXALIAS_MDA (unlink, int, (char const *file)); +# else +_GL_CXXALIAS_SYS (unlink, int, (char const *file)); +# endif +_GL_CXXALIASWARN (unlink); +#elif defined GNULIB_POSIXCHECK +# undef unlink +# if HAVE_RAW_DECL_UNLINK +_GL_WARN_ON_USE (unlink, "unlink is not portable - " + "use gnulib module unlink for portability"); +# endif +#elif 1 +/* On native Windows, map 'unlink' to '_unlink', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::unlink always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink _unlink +# endif +_GL_CXXALIAS_MDA (unlink, int, (char const *file)); +# else +_GL_CXXALIAS_SYS (unlink, int, (char const *file)); +# endif +_GL_CXXALIASWARN (unlink); +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlinkat +# define unlinkat rpl_unlinkat +# endif +_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); +# endif +_GL_CXXALIASWARN (unlinkat); +#elif defined GNULIB_POSIXCHECK +# undef unlinkat +# if HAVE_RAW_DECL_UNLINKAT +_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " + "use gnulib module unlinkat for portability"); +# endif +#endif + + +#if 1 +/* Pause the execution of the current thread for N microseconds. + Returns 0 on completion, or -1 on range error. + See the POSIX:2001 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef usleep +# define usleep rpl_usleep +# endif +_GL_FUNCDECL_RPL (usleep, int, (useconds_t n), ); +_GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (usleep, int, (useconds_t n), ); +# endif +/* Need to cast, because on Haiku, the first parameter is + unsigned int n. */ +_GL_CXXALIAS_SYS_CAST (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIASWARN (usleep); +#elif defined GNULIB_POSIXCHECK +# undef usleep +# if HAVE_RAW_DECL_USLEEP +_GL_WARN_ON_USE (usleep, "usleep is unportable - " + "use gnulib module usleep for portability"); +# endif +#endif + + +#if 0 +/* Write up to COUNT bytes starting at BUF to file descriptor FD. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write rpl_write +# endif +_GL_FUNCDECL_RPL (write, ssize_t, + (int fd, const void *buf, size_t count), + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_NODISCARD); +_GL_CXXALIAS_RPL (write, ssize_t, + (int fd, const void *buf, size_t count)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write _write +# endif +_GL_CXXALIAS_MDA (write, ssize_t, + (int fd, const void *buf, size_t count)); +# else +_GL_CXXALIAS_SYS (write, ssize_t, + (int fd, const void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (write); +#elif 1 +/* On native Windows, map 'write' to '_write', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::write always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write _write +# endif +_GL_CXXALIAS_MDA_CAST (write, ssize_t, + (int fd, const void *buf, unsigned int count)); +# else +_GL_CXXALIAS_SYS (write, ssize_t, + (int fd, const void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (write); +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_UNISTD_H */ +#endif /* _GL_INCLUDING_UNISTD_H */ +#endif /* _GL_UNISTD_H */ diff --git a/jni/parted/lib/unitypes.h b/jni/parted/lib/unitypes.h new file mode 100755 index 0000000..5e9df33 --- /dev/null +++ b/jni/parted/lib/unitypes.h @@ -0,0 +1,72 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Elementary types and macros for the GNU UniString library. + Copyright (C) 2002, 2005-2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNITYPES_H +#define _UNITYPES_H + +/* Get uint8_t, uint16_t, uint32_t. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Type representing a Unicode character. */ +typedef uint32_t ucs4_t; + +/* Attribute of a function whose result depends only on the arguments + (not pointers!) and which has no side effects. */ +#ifndef _UC_ATTRIBUTE_CONST +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) || defined __clang__ +# define _UC_ATTRIBUTE_CONST __attribute__ ((__const__)) +# else +# define _UC_ATTRIBUTE_CONST +# endif +#endif + +/* Attribute of a function whose result depends only on the arguments + (possibly pointers) and global memory, and which has no side effects. */ +#ifndef _UC_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _UC_ATTRIBUTE_PURE +# endif +#endif + +/* Qualifier in a function declaration, that asserts that the caller must + pass a pointer to a different object in the specified pointer argument + than in the other pointer arguments. */ +#ifndef _UC_RESTRICT +# if defined __restrict \ + || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ + || __clang_major__ >= 3 +# define _UC_RESTRICT __restrict +# elif 199901L <= __STDC_VERSION__ || defined restrict +# define _UC_RESTRICT restrict +# else +# define _UC_RESTRICT +# endif +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _UNITYPES_H */ diff --git a/jni/parted/lib/wchar.h b/jni/parted/lib/wchar.h new file mode 100755 index 0000000..544e241 --- /dev/null +++ b/jni/parted/lib/wchar.h @@ -0,0 +1,2250 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute for ISO C99 , for platforms that have issues. + + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake. */ + +/* + * ISO C 99 for platforms that have issues. + * + * + * For now, this just ensures proper prerequisite inclusion order and + * the declaration of wcwidth(). + */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if (((defined __need_mbstate_t || defined __need_wint_t) \ + && !defined __MINGW32__) \ + || (defined __hpux \ + && ((defined _INTTYPES_INCLUDED \ + && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H) \ + || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ + || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ + || defined _GL_ALREADY_INCLUDING_WCHAR_H) +/* Special invocation convention: + - Inside glibc and uClibc header files, but not MinGW. + - On HP-UX 11.00 we have a sequence of nested includes + -> -> , and the latter includes , + once indirectly -> -> -> + and once directly. In both situations 'wint_t' is not yet defined, + therefore we cannot provide the function overrides; instead include only + the system's . + - With MinGW 3.22, when includes , only some part of + is actually processed, and that doesn't include 'mbstate_t'. + - On IRIX 6.5, similarly, we have an include -> , and + the latter includes . But here, we have no way to detect whether + is completely included or is still being included. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_WCHAR_H + +#define _GL_ALREADY_INCLUDING_WCHAR_H + +#if 1 +# include /* for __GLIBC__ */ +#endif + +/* In some builds of uClibc, is nonexistent and wchar_t is defined + by . + But avoid namespace pollution on glibc systems. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include +#endif + +/* Include the original if it exists. + Some builds of uClibc lack it. */ +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next +#endif + +#undef _GL_ALREADY_INCLUDING_WCHAR_H + +#ifndef _GL_WCHAR_H +#define _GL_WCHAR_H + +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 && !defined __clang__ +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that + can be freed via 'free'; it can be used only after declaring 'free'. */ +/* Applies to: functions. Cannot be used on inline functions. */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# if defined __cplusplus && defined __GNUC__ && !defined __clang__ +/* Work around GCC bug */ +# define _GL_ATTRIBUTE_DEALLOC_FREE \ + _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) +# else +# define _GL_ATTRIBUTE_DEALLOC_FREE \ + _GL_ATTRIBUTE_DEALLOC (free, 1) +# endif +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif +#endif + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +# if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major__ >= 4 +# if __cplusplus >= 201103L +# define _GL_ATTRIBUTE_NOTHROW noexcept (true) +# else +# define _GL_ATTRIBUTE_NOTHROW throw () +# endif +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# else +# if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Define wint_t and WEOF. (Also done in wctype.in.h.) */ +#if !1 && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* mingw and MSVC define wint_t as 'unsigned short' in or + . This is too small: ISO C 99 section 7.24.1.(2) says that + wint_t must be "unchanged by default argument promotions". Override it. */ +# if 0 +# if !GNULIB_defined_wint_t +# if 0 +# include +# else +# include +# endif +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +/* Override mbstate_t if it is too small. + On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for + implementing mbrtowc for encodings like UTF-8. + On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is + large enough and overriding it would cause problems in C++ mode. */ +#if !(((defined _WIN32 && !defined __CYGWIN__) || 1) && 1) || 0 +# if !GNULIB_defined_mbstate_t +# if !(defined _AIX || defined _MSC_VER) +typedef int rpl_mbstate_t; +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# endif +# define GNULIB_defined_mbstate_t 1 +# endif +#endif + +/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though may not have + been included yet. */ +#if 1 +# if (1 && !defined free \ + && !(defined __cplusplus && defined GNULIB_NAMESPACE)) +/* We can't do '#define free rpl_free' here. */ +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void rpl_free (void *) _GL_ATTRIBUTE_NOTHROW; +# else +_GL_EXTERN_C void rpl_free (void *); +# endif +# undef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) +# else +# if defined _MSC_VER && !defined free +_GL_EXTERN_C +# if defined _DLL + __declspec (dllimport) +# endif + void __cdecl free (void *); +# else +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW; +# else +_GL_EXTERN_C void free (void *); +# endif +# endif +# endif +#else +# if defined _MSC_VER && !defined free +_GL_EXTERN_C +# if defined _DLL + __declspec (dllimport) +# endif + void __cdecl free (void *); +# else +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW; +# else +_GL_EXTERN_C void free (void *); +# endif +# endif +#endif + + +#if 1 +/* Get memset(). */ +# include +#endif + + +/* Convert a single-byte character to a wide character. */ +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef btowc +# define btowc rpl_btowc +# endif +_GL_FUNCDECL_RPL (btowc, wint_t, (int c), _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (btowc, wint_t, (int c)); +# else +# if !1 +_GL_FUNCDECL_SYS (btowc, wint_t, (int c), _GL_ATTRIBUTE_PURE); +# endif +/* Need to cast, because on mingw, the return type is 'unsigned short'. */ +_GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (btowc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef btowc +# if HAVE_RAW_DECL_BTOWC +_GL_WARN_ON_USE (btowc, "btowc is unportable - " + "use gnulib module btowc for portability"); +# endif +#endif + + +/* Convert a wide character to a single-byte character. */ +#if IN_PARTED_GNULIB_TESTS +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctob +# define wctob rpl_wctob +# endif +_GL_FUNCDECL_RPL (wctob, int, (wint_t wc), _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); +# else +# if !defined wctob && !1 +/* wctob is provided by gnulib, or wctob exists but is not declared. */ +_GL_FUNCDECL_SYS (wctob, int, (wint_t wc), _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wctob); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wctob +# if HAVE_RAW_DECL_WCTOB +_GL_WARN_ON_USE (wctob, "wctob is unportable - " + "use gnulib module wctob for portability"); +# endif +#endif + + +/* Test whether *PS is in an initial state. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsinit +# define mbsinit rpl_mbsinit +# endif +_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps), ); +_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps), ); +# endif +_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbsinit); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsinit +# if HAVE_RAW_DECL_MBSINIT +_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " + "use gnulib module mbsinit for portability"); +# endif +#endif + + +/* Put *PS into an initial state. */ +#if 1 +/* ISO C 23 § 7.31.6.(3) says that zeroing an mbstate_t is a way to put the + mbstate_t into an initial state. However, on many platforms an mbstate_t + is large, and it is possible - as an optimization - to get away with zeroing + only part of it. So, instead of + + mbstate_t state = { 0 }; + + or + + mbstate_t state; + memset (&state, 0, sizeof (mbstate_t)); + + we can write this faster code: + + mbstate_t state; + mbszero (&state); + */ +/* _GL_MBSTATE_INIT_SIZE describes how mbsinit() behaves: It is the number of + bytes at the beginning of an mbstate_t that need to be zero, for mbsinit() + to return true. + _GL_MBSTATE_ZERO_SIZE is the number of bytes at the beginning of an mbstate_t + that need to be zero, + - for mbsinit() to return true, and + - for all other multibyte-aware functions to operate properly. + 0 < _GL_MBSTATE_INIT_SIZE <= _GL_MBSTATE_ZERO_SIZE <= sizeof (mbstate_t). + These values are determined by source code inspection, where possible, and + by running the gnulib unit tests. + We need _GL_MBSTATE_INIT_SIZE because if we define _GL_MBSTATE_ZERO_SIZE + without considering what mbsinit() does, we get test failures such as + assertion "mbsinit (&iter->state)" failed + */ +# if GNULIB_defined_mbstate_t /* AIX, IRIX */ +/* mbstate_t has at least 4 bytes. They are used as coded in + gnulib/lib/mbrtowc.c. */ +# define _GL_MBSTATE_INIT_SIZE 1 +/* define _GL_MBSTATE_ZERO_SIZE 4 + does not work: it causes test failures. + So, use the safe fallback value, below. */ +# elif __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 /* glibc */ +/* mbstate_t is defined in . + For more details, see glibc/iconv/skeleton.c. */ +# define _GL_MBSTATE_INIT_SIZE 4 /* sizeof (((mbstate_t) {0}).__count) */ +# define _GL_MBSTATE_ZERO_SIZE /* 8 */ sizeof (mbstate_t) +# elif defined MUSL_LIBC /* musl libc */ +/* mbstate_t is defined in . + It is an opaque aligned 8-byte struct, of which at most the first + 4 bytes are used. + For more details, see src/multibyte/mbrtowc.c. */ +# define _GL_MBSTATE_INIT_SIZE 4 /* sizeof (unsigned) */ +# define _GL_MBSTATE_ZERO_SIZE 4 +# elif defined __APPLE__ && defined __MACH__ /* macOS */ +/* On macOS, mbstate_t is defined in . + It is an opaque aligned 128-byte struct, of which at most the first + 12 bytes are used. + For more details, see the __mbsinit implementations in + Libc-/locale/FreeBSD/ + {ascii,none,euc,mskanji,big5,gb2312,gbk,gb18030,utf8,utf2}.c. */ +/* File INIT_SIZE ZERO_SIZE + ascii.c 0 0 + none.c 0 0 + euc.c 12 12 + mskanji.c 4 4 + big5.c 4 4 + gb2312.c 4 6 + gbk.c 4 4 + gb18030.c 4 8 + utf8.c 8 10 + utf2.c 8 12 */ +# define _GL_MBSTATE_INIT_SIZE 12 +# define _GL_MBSTATE_ZERO_SIZE 12 +# elif defined __FreeBSD__ /* FreeBSD */ +/* On FreeBSD, mbstate_t is defined in src/sys/sys/_types.h. + It is an opaque aligned 128-byte struct, of which at most the first + 12 bytes are used. + For more details, see the __mbsinit implementations in + src/lib/libc/locale/ + {ascii,none,euc,mskanji,big5,gb2312,gbk,gb18030,utf8}.c. */ +/* File INIT_SIZE ZERO_SIZE + ascii.c 0 0 + none.c 0 0 + euc.c 12 12 + mskanji.c 4 4 + big5.c 4 4 + gb2312.c 4 6 + gbk.c 4 4 + gb18030.c 4 8 + utf8.c 8 12 */ +# define _GL_MBSTATE_INIT_SIZE 12 +# define _GL_MBSTATE_ZERO_SIZE 12 +# elif defined __NetBSD__ /* NetBSD */ +/* On NetBSD, mbstate_t is defined in src/sys/sys/ansi.h. + It is an opaque aligned 128-byte struct, of which at most the first + 28 bytes are used. + For more details, see the *State types in + src/lib/libc/citrus/modules/citrus_*.c + (ignoring citrus_{hz,iso2022,utf7,viqr,zw}.c, since these implement + stateful encodings, not usable as locale encodings). */ +/* File ZERO_SIZE + citrus/citrus_none.c 0 + citrus/modules/citrus_euc.c 8 + citrus/modules/citrus_euctw.c 8 + citrus/modules/citrus_mskanji.c 8 + citrus/modules/citrus_big5.c 8 + citrus/modules/citrus_gbk2k.c 8 + citrus/modules/citrus_dechanyu.c 8 + citrus/modules/citrus_johab.c 6 + citrus/modules/citrus_utf8.c 12 */ +/* But 12 is not the correct value for _GL_MBSTATE_ZERO_SIZE: we get test + failures for values < 28. */ +# define _GL_MBSTATE_ZERO_SIZE 28 +# elif defined __OpenBSD__ /* OpenBSD */ +/* On OpenBSD, mbstate_t is defined in src/sys/sys/_types.h. + It is an opaque aligned 128-byte struct, of which at most the first + 12 bytes are used. + For more details, see src/lib/libc/citrus/citrus_*.c. */ +/* File INIT_SIZE ZERO_SIZE + citrus_none.c 0 0 + citrus_utf8.c 12 12 */ +# define _GL_MBSTATE_INIT_SIZE 12 +# define _GL_MBSTATE_ZERO_SIZE 12 +# elif defined __minix /* Minix */ +/* On Minix, mbstate_t is defined in sys/sys/ansi.h. + It is an opaque aligned 128-byte struct. + For more details, see the *State types in + lib/libc/citrus/citrus_*.c. */ +/* File INIT_SIZE ZERO_SIZE + citrus_none.c 0 0 */ +/* But 1 is not the correct value for _GL_MBSTATE_ZERO_SIZE: we get test + failures for values < 4. */ +# define _GL_MBSTATE_ZERO_SIZE 4 +# elif defined __sun /* Solaris */ +/* On Solaris, mbstate_t is defined in . + It is an opaque aligned 24-byte or 32-byte struct, of which at most the first + 20 or 28 bytes are used. + For more details on OpenSolaris derivatives, see the *State types in + illumos-gate/usr/src/lib/libc/port/locale/ + {none,euc,mskanji,big5,gb2312,gbk,gb18030,utf8}.c. */ +/* File INIT_SIZE ZERO_SIZE + none.c 0 0 + euc.c 12 12 + mskanji.c 4 4 + big5.c 4 4 + gb2312.c 4 6 + gbk.c 4 4 + gb18030.c 4 8 + utf8.c 12 12 */ +/* But 12 is not the correct value for _GL_MBSTATE_ZERO_SIZE: we get test + failures + - in OpenIndiana and OmniOS: for values < 16, + - in Solaris 10 and 11: for values < 20 (in 32-bit mode) + or < 28 (in 64-bit mode). + Since we don't have a good way to distinguish the OpenSolaris derivatives + from the proprietary Solaris versions, and can't inspect the Solaris source + code, use the safe fallback values, below. */ +# elif defined __CYGWIN__ /* Cygwin */ +/* On Cygwin, mbstate_t is defined in . + For more details, see newlib/libc/stdlib/mbtowc_r.c and + winsup/cygwin/strfuncs.cc. */ +# define _GL_MBSTATE_INIT_SIZE 4 /* sizeof (int) */ +# define _GL_MBSTATE_ZERO_SIZE 8 +# elif defined _WIN32 && !defined __CYGWIN__ /* Native Windows. */ +/* MSVC defines 'mbstate_t' as an aligned 8-byte struct. + On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined + as an aligned 8-byte struct, of which the first 4 bytes matter. + Use the safe values, below. */ +# elif defined __ANDROID__ /* Android */ +/* Android defines 'mbstate_t' in . + It is an opaque 4-byte or 8-byte struct. + For more details, see + bionic/libc/private/bionic_mbstate.h + bionic/libc/bionic/mbrtoc32.cpp + bionic/libc/bionic/mbrtoc16.cpp + */ +# define _GL_MBSTATE_INIT_SIZE 4 +# define _GL_MBSTATE_ZERO_SIZE 4 +# endif +/* Use safe values as defaults. */ +# ifndef _GL_MBSTATE_INIT_SIZE +# define _GL_MBSTATE_INIT_SIZE sizeof (mbstate_t) +# endif +# ifndef _GL_MBSTATE_ZERO_SIZE +# define _GL_MBSTATE_ZERO_SIZE sizeof (mbstate_t) +# endif +_GL_BEGIN_C_LINKAGE +# if defined IN_MBSZERO +_GL_EXTERN_INLINE +# else +_GL_INLINE +# endif +_GL_ARG_NONNULL ((1)) void +mbszero (mbstate_t *ps) +{ + memset (ps, 0, _GL_MBSTATE_ZERO_SIZE); +} +_GL_END_C_LINKAGE +_GL_CXXALIAS_SYS (mbszero, void, (mbstate_t *ps)); +_GL_CXXALIASWARN (mbszero); +#endif + + +/* Convert a multibyte character to a wide character. */ +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrtowc +# define mbrtowc rpl_mbrtowc +# endif +_GL_FUNCDECL_RPL (mbrtowc, size_t, + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps), ); +_GL_CXXALIAS_RPL (mbrtowc, size_t, + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbrtowc, size_t, + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps), ); +# endif +_GL_CXXALIAS_SYS (mbrtowc, size_t, + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbrtowc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrtowc +# if HAVE_RAW_DECL_MBRTOWC +_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " + "use gnulib module mbrtowc for portability"); +# endif +#endif + + +/* Recognize a multibyte character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrlen +# define mbrlen rpl_mbrlen +# endif +_GL_FUNCDECL_RPL (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps), ); +_GL_CXXALIAS_RPL (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps), ); +# endif +_GL_CXXALIAS_SYS (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbrlen); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrlen +# if HAVE_RAW_DECL_MBRLEN +_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " + "use gnulib module mbrlen for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsrtowcs +# define mbsrtowcs rpl_mbsrtowcs +# endif +_GL_FUNCDECL_RPL (mbsrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbsrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbsrtowcs); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsrtowcs +# if HAVE_RAW_DECL_MBSRTOWCS +_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " + "use gnulib module mbsrtowcs for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsnrtowcs +# define mbsnrtowcs rpl_mbsnrtowcs +# endif +_GL_FUNCDECL_RPL (mbsnrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsnrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbsnrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsnrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbsnrtowcs); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsnrtowcs +# if HAVE_RAW_DECL_MBSNRTOWCS +_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " + "use gnulib module mbsnrtowcs for portability"); +# endif +#endif + + +/* Convert a wide character to a multibyte character. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcrtomb +# define wcrtomb rpl_wcrtomb +# endif +_GL_FUNCDECL_RPL (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps), ); +_GL_CXXALIAS_RPL (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps), ); +# endif +_GL_CXXALIAS_SYS (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcrtomb); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcrtomb +# if HAVE_RAW_DECL_WCRTOMB +_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " + "use gnulib module wcrtomb for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsrtombs +# define wcsrtombs rpl_wcsrtombs +# endif +_GL_FUNCDECL_RPL (wcsrtombs, size_t, + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsrtombs, size_t, + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcsrtombs, size_t, + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsrtombs, size_t, + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsrtombs); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrtombs +# if HAVE_RAW_DECL_WCSRTOMBS +_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " + "use gnulib module wcsrtombs for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsnrtombs +# define wcsnrtombs rpl_wcsnrtombs +# endif +_GL_FUNCDECL_RPL (wcsnrtombs, size_t, + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsnrtombs, size_t, + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps)); +# else +# if !1 || (defined __cplusplus && defined __sun) +_GL_FUNCDECL_SYS (wcsnrtombs, size_t, + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsnrtombs, size_t, + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsnrtombs); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsnrtombs +# if HAVE_RAW_DECL_WCSNRTOMBS +_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " + "use gnulib module wcsnrtombs for portability"); +# endif +#endif + + +/* Return the number of screen columns needed for WC. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcwidth +# define wcwidth rpl_wcwidth +# endif +_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t), _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); +# else +# if !1 +/* wcwidth exists but is not declared. */ +_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t), _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcwidth); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcwidth +# if HAVE_RAW_DECL_WCWIDTH +_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " + "use gnulib module wcwidth for portability"); +# endif +#endif + + +/* Search N wide characters of S for C. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n), + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); + wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wmemchr, + wchar_t *, (const wchar_t *, wchar_t, size_t), + const wchar_t *, (const wchar_t *, wchar_t, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) \ + && !defined __clang__ +_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN1 (wmemchr, const wchar_t *, + (const wchar_t *s, wchar_t c, size_t n)); +# elif __GLIBC__ >= 2 && !defined __CORRECT_ISO_CPP_WCHAR_H_PROTO +_GL_CXXALIASWARN (wmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemchr +# if HAVE_RAW_DECL_WMEMCHR +_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " + "use gnulib module wmemchr for portability"); +# endif +#endif + + +/* Compare N wide characters of S1 and S2. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wmemcmp +# define wmemcmp rpl_wmemcmp +# endif +_GL_FUNCDECL_RPL (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n), + _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n), + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmemcmp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemcmp +# if HAVE_RAW_DECL_WMEMCMP +_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " + "use gnulib module wmemcmp for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n), ); +# endif +_GL_CXXALIAS_SYS (wmemcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmemcpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemcpy +# if HAVE_RAW_DECL_WMEMCPY +_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " + "use gnulib module wmemcpy for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for + overlapping memory areas. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n), ); +# endif +_GL_CXXALIAS_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmemmove); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemmove +# if HAVE_RAW_DECL_WMEMMOVE +_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " + "use gnulib module wmemmove for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST. + Return pointer to wide characters after the last written wide character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wmempcpy +# define wmempcpy rpl_wmempcpy +# endif +_GL_FUNCDECL_RPL (wmempcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n), ); +_GL_CXXALIAS_RPL (wmempcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (wmempcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n), ); +# endif +_GL_CXXALIAS_SYS (wmempcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmempcpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmempcpy +# if HAVE_RAW_DECL_WMEMPCPY +_GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - " + "use gnulib module wmempcpy for portability"); +# endif +#endif + + +/* Set N wide characters of S to C. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n), ); +# endif +_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmemset); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemset +# if HAVE_RAW_DECL_WMEMSET +_GL_WARN_ON_USE (wmemset, "wmemset is unportable - " + "use gnulib module wmemset for portability"); +# endif +#endif + + +/* Return the number of wide characters in S. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s), _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcslen); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcslen +# if HAVE_RAW_DECL_WCSLEN +_GL_WARN_ON_USE (wcslen, "wcslen is unportable - " + "use gnulib module wcslen for portability"); +# endif +#endif + + +/* Return the number of wide characters in S, but at most MAXLEN. */ +#if 0 +/* On Solaris 11.3, the header files declare the function in the std:: + namespace, not in the global namespace. So, force a declaration in + the global namespace. */ +# if !1 || (defined __sun && defined __cplusplus) +_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen), + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); +_GL_CXXALIASWARN (wcsnlen); +#elif defined GNULIB_POSIXCHECK +# undef wcsnlen +# if HAVE_RAW_DECL_WCSNLEN +_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " + "use gnulib module wcsnlen for portability"); +# endif +#endif + + +/* Copy SRC to DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src), ); +# endif +_GL_CXXALIAS_SYS (wcscpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscpy +# if HAVE_RAW_DECL_WCSCPY +_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " + "use gnulib module wcscpy for portability"); +# endif +#endif + + +/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ +#if 0 +/* On Solaris 11.3, the header files declare the function in the std:: + namespace, not in the global namespace. So, force a declaration in + the global namespace. */ +# if !1 || (defined __sun && defined __cplusplus) +_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src), ); +# endif +_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +_GL_CXXALIASWARN (wcpcpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpcpy +# if HAVE_RAW_DECL_WCPCPY +_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " + "use gnulib module wcpcpy for portability"); +# endif +#endif + + +/* Copy no more than N wide characters of SRC to DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n), ); +# endif +_GL_CXXALIAS_SYS (wcsncpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsncpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsncpy +# if HAVE_RAW_DECL_WCSNCPY +_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " + "use gnulib module wcsncpy for portability"); +# endif +#endif + + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +#if 0 +/* On Solaris 11.3, the header files declare the function in the std:: + namespace, not in the global namespace. So, force a declaration in + the global namespace. */ +# if !1 || (defined __sun && defined __cplusplus) +_GL_FUNCDECL_SYS (wcpncpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n), ); +# endif +_GL_CXXALIAS_SYS (wcpncpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +_GL_CXXALIASWARN (wcpncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpncpy +# if HAVE_RAW_DECL_WCPNCPY +_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " + "use gnulib module wcpncpy for portability"); +# endif +#endif + + +/* Append SRC onto DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src), ); +# endif +_GL_CXXALIAS_SYS (wcscat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscat +# if HAVE_RAW_DECL_WCSCAT +_GL_WARN_ON_USE (wcscat, "wcscat is unportable - " + "use gnulib module wcscat for portability"); +# endif +#endif + + +/* Append no more than N wide characters of SRC onto DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src, + size_t n), ); +# endif +_GL_CXXALIAS_SYS (wcsncat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src, + size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsncat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsncat +# if HAVE_RAW_DECL_WCSNCAT +_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " + "use gnulib module wcsncat for portability"); +# endif +#endif + + +/* Compare S1 and S2. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcscmp +# define wcscmp rpl_wcscmp +# endif +_GL_FUNCDECL_RPL (wcscmp, int, (const wchar_t *s1, const wchar_t *s2), + _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2), + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscmp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscmp +# if HAVE_RAW_DECL_WCSCMP +_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " + "use gnulib module wcscmp for portability"); +# endif +#endif + + +/* Compare no more than N wide characters of S1 and S2. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsncmp +# define wcsncmp rpl_wcsncmp +# endif +_GL_FUNCDECL_RPL (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n), + _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n), + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsncmp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsncmp +# if HAVE_RAW_DECL_WCSNCMP +_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " + "use gnulib module wcsncmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, ignoring case. */ +#if 0 +/* On Solaris 11.3, the header files declare the function in the std:: + namespace, not in the global namespace. So, force a declaration in + the global namespace. */ +# if !1 || (defined __sun && defined __cplusplus) +_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2), + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscasecmp +# if HAVE_RAW_DECL_WCSCASECMP +_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " + "use gnulib module wcscasecmp for portability"); +# endif +#endif + + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +#if 0 +/* On Solaris 11.3, the header files declare the function in the std:: + namespace, not in the global namespace. So, force a declaration in + the global namespace. */ +# if !1 || (defined __sun && defined __cplusplus) +_GL_FUNCDECL_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n), + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncasecmp +# if HAVE_RAW_DECL_WCSNCASECMP +_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " + "use gnulib module wcsncasecmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE + category of the current locale. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2), ); +# endif +_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscoll); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscoll +# if HAVE_RAW_DECL_WCSCOLL +_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " + "use gnulib module wcscoll for portability"); +# endif +#endif + + +/* Transform S2 into array pointed to by S1 such that if wcscmp is applied + to two transformed strings the result is the as applying 'wcscoll' to the + original strings. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsxfrm, size_t, + (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n), ); +# endif +_GL_CXXALIAS_SYS (wcsxfrm, size_t, + (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsxfrm); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsxfrm +# if HAVE_RAW_DECL_WCSXFRM +_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " + "use gnulib module wcsxfrm for portability"); +# endif +#endif + + +/* Duplicate S, returning an identical malloc'd string. */ +#if 0 +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsdup +# define wcsdup _wcsdup +# endif +_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); +# else +/* On Solaris 11.3, the header files declare the function in the std:: + namespace, not in the global namespace. So, force a declaration in + the global namespace. */ +# if !1 || (defined __sun && defined __cplusplus) \ + || (__GNUC__ >= 11 && !defined __clang__) +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, + (const wchar_t *s), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, + (const wchar_t *s), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +# endif +_GL_CXXALIASWARN (wcsdup); +#else +# if (__GNUC__ >= 11 && !defined __clang__) && !defined wcsdup +/* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, + (const wchar_t *s), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, + (const wchar_t *s), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# endif +# if defined GNULIB_POSIXCHECK +# undef wcsdup +# if HAVE_RAW_DECL_WCSDUP +_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " + "use gnulib module wcsdup for portability"); +# endif +# elif 1 +/* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::wcsdup always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsdup +# define wcsdup _wcsdup +# endif +_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); +# else +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, + (const wchar_t *s), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) + _GL_ATTRIBUTE_NOTHROW; +# else +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, + (const wchar_t *s), + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if 1 +_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 1 +_GL_CXXALIASWARN (wcsdup); +# endif +# endif +#endif + + +/* Find the first occurrence of WC in WCS. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc), + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcschr (const wchar_t *, wchar_t); + wchar_t * std::wcschr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcschr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) \ + && !defined __clang__ +_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# elif __GLIBC__ >= 2 && !defined __CORRECT_ISO_CPP_WCHAR_H_PROTO +_GL_CXXALIASWARN (wcschr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcschr +# if HAVE_RAW_DECL_WCSCHR +_GL_WARN_ON_USE (wcschr, "wcschr is unportable - " + "use gnulib module wcschr for portability"); +# endif +#endif + + +/* Find the last occurrence of WC in WCS. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc), + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); + wchar_t * std::wcsrchr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsrchr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) \ + && !defined __clang__ +_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# elif __GLIBC__ >= 2 && !defined __CORRECT_ISO_CPP_WCHAR_H_PROTO +_GL_CXXALIASWARN (wcsrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrchr +# if HAVE_RAW_DECL_WCSRCHR +_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " + "use gnulib module wcsrchr for portability"); +# endif +#endif + + +/* Return the length of the initial segment of WCS which consists entirely + of wide characters not in REJECT. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject), + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscspn); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscspn +# if HAVE_RAW_DECL_WCSCSPN +_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " + "use gnulib module wcscspn for portability"); +# endif +#endif + + +/* Return the length of the initial segment of WCS which consists entirely + of wide characters in ACCEPT. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept), + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsspn); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsspn +# if HAVE_RAW_DECL_WCSSPN +_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " + "use gnulib module wcsspn for portability"); +# endif +#endif + + +/* Find the first occurrence in WCS of any character in ACCEPT. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcspbrk, wchar_t *, + (const wchar_t *wcs, const wchar_t *accept), + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); + wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcspbrk, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) \ + && !defined __clang__ +_GL_CXXALIASWARN1 (wcspbrk, wchar_t *, + (wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, + (const wchar_t *wcs, const wchar_t *accept)); +# elif __GLIBC__ >= 2 && !defined __CORRECT_ISO_CPP_WCHAR_H_PROTO +_GL_CXXALIASWARN (wcspbrk); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcspbrk +# if HAVE_RAW_DECL_WCSPBRK +_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " + "use gnulib module wcspbrk for portability"); +# endif +#endif + + +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsstr +# define wcsstr rpl_wcsstr +# endif +_GL_FUNCDECL_RPL (wcsstr, wchar_t *, + (const wchar_t *restrict haystack, + const wchar_t *restrict needle), + _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcsstr, wchar_t *, + (const wchar_t *restrict haystack, + const wchar_t *restrict needle)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcsstr, wchar_t *, + (const wchar_t *restrict haystack, + const wchar_t *restrict needle), + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); + wchar_t * std::wcsstr (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsstr, + wchar_t *, + (const wchar_t *restrict, const wchar_t *restrict), + const wchar_t *, + (const wchar_t *restrict, const wchar_t *restrict)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) \ + && !defined __clang__ +_GL_CXXALIASWARN1 (wcsstr, wchar_t *, + (wchar_t *restrict haystack, + const wchar_t *restrict needle)); +_GL_CXXALIASWARN1 (wcsstr, const wchar_t *, + (const wchar_t *restrict haystack, + const wchar_t *restrict needle)); +# elif __GLIBC__ >= 2 && !defined __CORRECT_ISO_CPP_WCHAR_H_PROTO +_GL_CXXALIASWARN (wcsstr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsstr +# if HAVE_RAW_DECL_WCSSTR +_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " + "use gnulib module wcsstr for portability"); +# endif +#endif + + +/* Divide WCS into tokens separated by characters in DELIM. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcstok +# define wcstok rpl_wcstok +# endif +_GL_FUNCDECL_RPL (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr), ); +_GL_CXXALIAS_RPL (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr), ); +# endif +_GL_CXXALIAS_SYS (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcstok); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcstok +# if HAVE_RAW_DECL_WCSTOK +_GL_WARN_ON_USE (wcstok, "wcstok is unportable - " + "use gnulib module wcstok for portability"); +# endif +#endif + + +/* Determine number of column positions required for first N wide + characters (or fewer if S ends before this) in S. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcswidth +# define wcswidth rpl_wcswidth +# endif +_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n), + _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n), + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcswidth); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcswidth +# if HAVE_RAW_DECL_WCSWIDTH +_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " + "use gnulib module wcswidth for portability"); +# endif +#endif + + +/* Convert *TP to a date and time wide string. See + . */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsftime +# define wcsftime rpl_wcsftime +# endif +_GL_FUNCDECL_RPL (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp), + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp), + _GL_ARG_NONNULL ((1, 3, 4))); +# endif +_GL_CXXALIAS_SYS (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsftime); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsftime +# if HAVE_RAW_DECL_WCSFTIME +_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " + "use gnulib module wcsftime for portability"); +# endif +#endif + + +#if 0 && (defined _WIN32 && !defined __CYGWIN__) +/* Gets the name of the current working directory. + (a) If BUF is non-NULL, it is assumed to have room for SIZE wide characters. + This function stores the working directory (NUL-terminated) in BUF and + returns BUF. + (b) If BUF is NULL, an array is allocated with 'malloc'. The array is SIZE + wide characters long, unless SIZE == 0, in which case it is as big as + necessary. + If the directory couldn't be determined or SIZE was too small, this function + returns NULL and sets errno. For a directory of length LEN, SIZE should be + >= LEN + 3 in case (a) or >= LEN + 1 in case (b). + Possible errno values include: + - ERANGE if SIZE is too small. + - ENOMEM if the memory could no be allocated. */ +_GL_FUNCDECL_SYS (wgetcwd, wchar_t *, (wchar_t *buf, size_t size), ); +#endif + + +#endif /* _GL_WCHAR_H */ +#endif /* _GL_WCHAR_H */ +#endif diff --git a/jni/parted/lib/wctype.h b/jni/parted/lib/wctype.h new file mode 100755 index 0000000..6faef88 --- /dev/null +++ b/jni/parted/lib/wctype.h @@ -0,0 +1,1334 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute for ISO C99 , for platforms that lack it. + + Copyright (C) 2006-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible and Paul Eggert. */ + +/* + * ISO C 99 for platforms that lack it. + * + * + * iswctype, towctrans, towlower, towupper, wctrans, wctype, + * wctrans_t, and wctype_t are not yet implemented. + */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__) + +/* Special invocation convention: + - With MinGW 3.22, when includes , only some part of + is being processed, which doesn't include the idempotency + guard. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_WCTYPE_H + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#if 1 +/* Solaris 2.5 has a bug: must be included before . */ +# include +#endif + +/* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and + isw* functions in , as well as in . Include + , in advance to avoid rpl_ prefix being added to the + declarations. */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include +# include +#endif + +/* Include the original if it exists. + BeOS 5 has the functions but no . */ +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next +#endif + +#ifndef _GL_WCTYPE_H +#define _GL_WCTYPE_H + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_WCTYPE_INLINE +# define _GL_WCTYPE_INLINE _GL_INLINE +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_EXTERN_C_FUNC declaration; + performs the declaration of a function with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C_FUNC extern "C" +#else +/* In C mode, omit the 'extern' keyword, because attributes in bracket syntax + are not allowed between 'extern' and the return type (see gnulib-common.m4). + */ +# define _GL_EXTERN_C_FUNC +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters, [attributes]); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_RPL (free, void, (void *ptr), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...), + _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" ; + is invalid syntax in C++.) + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters,...) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters, __VA_ARGS__) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters + +/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Although attributes are optional, the comma before them is required + for portability to C17 and earlier. The attribute _GL_ATTRIBUTE_NOTHROW, + if needed, must be placed after the _GL_FUNCDECL_RPL invocation, + at the end of the declaration. + Examples: + _GL_FUNCDECL_SYS (getumask, mode_t, (void), ) _GL_ATTRIBUTE_NOTHROW; + _GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \ + _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if (4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)) && !defined __clang__ +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif (__GNUC__ >= 3 || defined __clang__) && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Solaris 2.6 includes which includes which + #defines a number of identifiers in the application namespace. Revert + these #defines. */ +#ifdef __sun +# undef multibyte +# undef eucw1 +# undef eucw2 +# undef eucw3 +# undef scrw1 +# undef scrw2 +# undef scrw3 +#endif + +/* Define wint_t and WEOF. (Also done in wchar.in.h.) */ +#if !1 && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* mingw and MSVC define wint_t as 'unsigned short' in or + . This is too small: ISO C 99 section 7.24.1.(2) says that + wint_t must be "unchanged by default argument promotions". Override it. */ +# if 0 +# if !GNULIB_defined_wint_t +# if 0 +# include +# else +# include +# endif +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +#if !GNULIB_defined_wctype_functions + +/* FreeBSD 4.4 to 4.11 has but lacks the functions. + Linux libc5 has and the functions but they are broken. + mingw and MSVC have and the functions but they take a wchar_t + as argument, not an rpl_wint_t. Additionally, the mingw iswprint function + and the Android iswpunct function are broken. + Assume all 11 functions (all isw* except iswblank) are implemented the + same way, or not at all. */ +# if ! 1 || 0 + +# if 0 /* implies 0 */ + +_GL_WCTYPE_INLINE int +rpl_iswalnum (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswalnum ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswalpha (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswalpha ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswblank (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswblank ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswcntrl (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswcntrl ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswdigit (wint_t wc) +{ + return ((wchar_t) wc == wc ? wc >= '0' && wc <= '9' : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswgraph (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswgraph ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswlower (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswlower ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswprint (wint_t wc) +{ +# ifdef __MINGW32__ + return ((wchar_t) wc == wc ? wc == ' ' || iswgraph ((wchar_t) wc) : 0); +# else + return ((wchar_t) wc == wc ? iswprint ((wchar_t) wc) : 0); +# endif +} + +_GL_WCTYPE_INLINE int +rpl_iswpunct (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswpunct ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswspace (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswspace ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswupper (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswupper ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswxdigit (wint_t wc) +{ + return ((wchar_t) wc == wc + ? (wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F') + : 0); +} + +_GL_WCTYPE_INLINE wint_t +rpl_towlower (wint_t wc) +{ + return ((wchar_t) wc == wc ? (wchar_t) towlower ((wchar_t) wc) : wc); +} + +_GL_WCTYPE_INLINE wint_t +rpl_towupper (wint_t wc) +{ + return ((wchar_t) wc == wc ? (wchar_t) towupper ((wchar_t) wc) : wc); +} + +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit +# undef towlower +# undef towupper +# define iswalnum rpl_iswalnum +# define iswalpha rpl_iswalpha +# define iswblank rpl_iswblank +# define iswcntrl rpl_iswcntrl +# define iswdigit rpl_iswdigit +# define iswgraph rpl_iswgraph +# define iswlower rpl_iswlower +# define iswprint rpl_iswprint +# define iswpunct rpl_iswpunct +# define iswspace rpl_iswspace +# define iswupper rpl_iswupper +# define iswxdigit rpl_iswxdigit +# define towlower rpl_towlower +# define towupper rpl_towupper +# endif + +# else + +/* IRIX 5.3 has macros but no functions, its isw* macros refer to an + undefined variable _ctmp_ and to macros like _P, and they + refer to system functions like _iswctype that are not in the + standard C library. Rather than try to get ancient buggy + implementations like this to work, just disable them. */ +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit +# undef towlower +# undef towupper + +/* Linux libc5 has and the functions but they are broken. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswalnum rpl_iswalnum +# define iswalpha rpl_iswalpha +# define iswblank rpl_iswblank +# define iswcntrl rpl_iswcntrl +# define iswdigit rpl_iswdigit +# define iswgraph rpl_iswgraph +# define iswlower rpl_iswlower +# define iswprint rpl_iswprint +# define iswpunct rpl_iswpunct +# define iswspace rpl_iswspace +# define iswupper rpl_iswupper +# define iswxdigit rpl_iswxdigit +# endif +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towlower rpl_towlower +# define towupper rpl_towupper +# endif +# endif + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswalnum +# else +iswalnum +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswalpha +# else +iswalpha +# endif + (wint_t wc) +{ + return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswblank +# else +iswblank +# endif + (wint_t wc) +{ + return wc == ' ' || wc == '\t'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswcntrl +# else +iswcntrl +# endif + (wint_t wc) +{ + return (wc & ~0x1f) == 0 || wc == 0x7f; +} + +_GL_WCTYPE_INLINE int +# if 1 +rpl_iswdigit +# else +iswdigit +# endif + (wint_t wc) +{ + return wc >= '0' && wc <= '9'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswgraph +# else +iswgraph +# endif + (wint_t wc) +{ + return wc >= '!' && wc <= '~'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswlower +# else +iswlower +# endif + (wint_t wc) +{ + return wc >= 'a' && wc <= 'z'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswprint +# else +iswprint +# endif + (wint_t wc) +{ + return wc >= ' ' && wc <= '~'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswpunct +# else +iswpunct +# endif + (wint_t wc) +{ + return (wc >= '!' && wc <= '~' + && !((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswspace +# else +iswspace +# endif + (wint_t wc) +{ + return (wc == ' ' || wc == '\t' + || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswupper +# else +iswupper +# endif + (wint_t wc) +{ + return wc >= 'A' && wc <= 'Z'; +} + +_GL_WCTYPE_INLINE int +# if 1 +rpl_iswxdigit +# else +iswxdigit +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); +} + +_GL_WCTYPE_INLINE wint_t +# if 0 +rpl_towlower +# else +towlower +# endif + (wint_t wc) +{ + return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); +} + +_GL_WCTYPE_INLINE wint_t +# if 0 +rpl_towupper +# else +towupper +# endif + (wint_t wc) +{ + return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); +} + +# endif + +# else +/* Only some of the functions are missing or broken. */ + +# if 1 && (! 1 || 0) +/* Only the iswblank function is missing. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswblank rpl_iswblank +# endif +_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc), ); +# else +_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc), ); +# endif +# endif + +# if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef iswdigit +# define iswdigit rpl_iswdigit +# endif +_GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc), ); +# endif +# endif + +# if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef iswpunct +# define iswpunct rpl_iswpunct +# endif +_GL_FUNCDECL_RPL (iswpunct, int, (wint_t wc), ); +# endif +# endif + +# if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef iswxdigit +# define iswxdigit rpl_iswxdigit +# endif +_GL_FUNCDECL_RPL (iswxdigit, int, (wint_t wc), ); +# endif +# endif + +# endif + +# if defined __MINGW32__ && !0 + +/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. + The functions towlower and towupper are implemented in the MSVCRT library + to take a wchar_t argument and return a wchar_t result. mingw declares + these functions to take a wint_t argument and return a wint_t result. + This means that: + 1. When the user passes an argument outside the range 0x0000..0xFFFF, the + function will look only at the lower 16 bits. This is allowed according + to POSIX. + 2. The return value is returned in the lower 16 bits of the result register. + The upper 16 bits are random: whatever happened to be in that part of the + result register. We need to fix this by adding a zero-extend from + wchar_t to wint_t after the call. */ + +_GL_WCTYPE_INLINE wint_t +rpl_towlower (wint_t wc) +{ + return (wint_t) (wchar_t) towlower (wc); +} +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towlower rpl_towlower +# endif + +_GL_WCTYPE_INLINE wint_t +rpl_towupper (wint_t wc) +{ + return (wint_t) (wchar_t) towupper (wc); +} +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towupper rpl_towupper +# endif + +# endif /* __MINGW32__ && !0 */ + +# define GNULIB_defined_wctype_functions 1 +#endif + +#if 0 +_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); +#endif +#if 0 +_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); +#endif +#if 0 +_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); +#endif +#if 1 +# if 1 +_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); +# else +_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); +# endif +#endif +#if 0 +_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); +#endif +#if 0 +_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); +#endif +#if 0 +_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); +#endif +#if 0 +_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); +#endif +#if 0 +_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); +#endif +#if 0 +_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); +#endif +#if 1 +# if 1 +_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); +# else +_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); +# endif +#endif +#if __GLIBC__ >= 2 +_GL_CXXALIASWARN (iswalnum); +_GL_CXXALIASWARN (iswalpha); +_GL_CXXALIASWARN (iswcntrl); +_GL_CXXALIASWARN (iswdigit); +_GL_CXXALIASWARN (iswgraph); +_GL_CXXALIASWARN (iswlower); +_GL_CXXALIASWARN (iswprint); +_GL_CXXALIASWARN (iswpunct); +_GL_CXXALIASWARN (iswspace); +_GL_CXXALIASWARN (iswupper); +_GL_CXXALIASWARN (iswxdigit); +#endif + +#if 1 +# if 0 || 0 +_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); +# else +_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (iswblank); +# endif +#endif + +#if !1 +# if !GNULIB_defined_wctype_t +typedef void * wctype_t; +# define GNULIB_defined_wctype_t 1 +# endif +#elif 1 +# if !GNULIB_defined_wctype_t +typedef void *rpl_wctype_t; +# undef wctype_t +# define wctype_t rpl_wctype_t +# define GNULIB_defined_wctype_t 1 +# endif +#endif + +/* Get a descriptor for a wide character property. */ +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctype +# define wctype rpl_wctype +# endif +_GL_FUNCDECL_RPL (wctype, wctype_t, (const char *name), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (wctype, wctype_t, (const char *name)); +# else +# if !1 +_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wctype); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wctype +# if HAVE_RAW_DECL_WCTYPE +_GL_WARN_ON_USE (wctype, "wctype is unportable - " + "use gnulib module wctype for portability"); +# endif +#endif + +/* Test whether a wide character has a given property. + The argument WC must be either a wchar_t value or WEOF. + The argument DESC must have been returned by the wctype() function. */ +#if 1 +# if 0 || 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef iswctype +# define iswctype rpl_iswctype +# endif +_GL_FUNCDECL_RPL (iswctype, int, (wint_t wc, wctype_t desc), ); +_GL_CXXALIAS_RPL (iswctype, int, (wint_t wc, wctype_t desc)); +# else +# if !1 +_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc), ); +# endif +_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (iswctype); +# endif +#elif defined GNULIB_POSIXCHECK +# undef iswctype +# if HAVE_RAW_DECL_ISWCTYPE +_GL_WARN_ON_USE (iswctype, "iswctype is unportable - " + "use gnulib module iswctype for portability"); +# endif +#endif + +#if 0 || defined __MINGW32__ +_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); +_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); +_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); +#endif +#if __GLIBC__ >= 2 +_GL_CXXALIASWARN (towlower); +_GL_CXXALIASWARN (towupper); +#endif + +#if !1 +# if !GNULIB_defined_wctrans_t +typedef void * wctrans_t; +# define GNULIB_defined_wctrans_t 1 +# endif +#elif 0 +# if !GNULIB_defined_wctrans_t +typedef void *rpl_wctrans_t; +# undef wctrans_t +# define wctrans_t rpl_wctrans_t +# define GNULIB_defined_wctrans_t 1 +# endif +#endif + +/* Get a descriptor for a wide character case conversion. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctrans +# define wctrans rpl_wctrans +# endif +_GL_FUNCDECL_RPL (wctrans, wctrans_t, (const char *name), + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (wctrans, wctrans_t, (const char *name)); +# else +# if !1 +_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name), + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wctrans); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wctrans +# if HAVE_RAW_DECL_WCTRANS +_GL_WARN_ON_USE (wctrans, "wctrans is unportable - " + "use gnulib module wctrans for portability"); +# endif +#endif + +/* Perform a given case conversion on a wide character. + The argument WC must be either a wchar_t value or WEOF. + The argument DESC must have been returned by the wctrans() function. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef towctrans +# define towctrans rpl_towctrans +# endif +_GL_FUNCDECL_RPL (towctrans, wint_t, (wint_t wc, wctrans_t desc), ); +_GL_CXXALIAS_RPL (towctrans, wint_t, (wint_t wc, wctrans_t desc)); +# else +# if !1 +_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc), ); +# endif +_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (towctrans); +# endif +#elif defined GNULIB_POSIXCHECK +# undef towctrans +# if HAVE_RAW_DECL_TOWCTRANS +_GL_WARN_ON_USE (towctrans, "towctrans is unportable - " + "use gnulib module towctrans for portability"); +# endif +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_WCTYPE_H */ +#endif /* _GL_WCTYPE_H */ +#endif diff --git a/jni/parted/libcharset/Android.mk b/jni/parted/libcharset/Android.mk new file mode 100755 index 0000000..33bf619 --- /dev/null +++ b/jni/parted/libcharset/Android.mk @@ -0,0 +1,40 @@ +# By YZBruh + +# Copyright 2024 Partition Manager +# +# 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. + +######## +# 3.0.2 +######## + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libcharset +LOCAL_SRC_FILES := \ + $(LOCAL_PATH)/lib/localcharset.c \ + $(LOCAL_PATH)/lib/relocatable-stub.c +LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../include/libcharset +LOCAL_CFLAGS := \ + -Wall \ + -Wextra \ + -Wno-sign-compare \ + -Wno-unused-const-variable \ + -Wno-unused-parameter \ + -fPIC \ + -g \ + -fvisibility=hidden + +include $(BUILD_STATIC_LIBRARY) \ No newline at end of file diff --git a/jni/parted/libcharset/Makefile b/jni/parted/libcharset/Makefile new file mode 100755 index 0000000..5849ba8 --- /dev/null +++ b/jni/parted/libcharset/Makefile @@ -0,0 +1,68 @@ +# By YZBruh + +# Copyright 2024 Partition Manager +# +# 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. + +##### +# sub-make for building libcharset (built-in lib) +##### + +include ../../../build/config/env.mk +ifeq ($(INC_OLDENV),true) +include ../../../build/config/oldenv.mk +endif + +E := @ echo +INCLUDE_DIR := $(CURDIR)/../../../include/libcharset +CFLAGS := \ + -Wall \ + -Wextra \ + -Wno-sign-compare \ + -Wno-unused-const-variable \ + -Wno-unused-parameter \ + -fPIC \ + -g \ + -fvisibility=hidden \ + -I$(INCLUDE_DIR) +AR_FLAGS := rcs +OUT := $(realpath ../../../out/parted) +LIB := $(CURDIR)/lib + +LIBCHARSET_SRCS := \ + $(LIB)/localcharset.c \ + $(LIB)/relocatable-stub.c +LIBCHARSET_OBJS := $(LIBCHARSET_SRCS:.c=.o) + +PROGRESS_LIST := \ + outctrl \ + $(LIBCHARSET_OBJS) \ + libcharset_ar + +.PHONY: all +all: $(PROGRESS_LIST) + +.PHONY: clean +clean: + @ rm -f $(LIBCHARSET_OBJS) $(OUT)/libcharset.a + +outctrl: + @ if [ ! -d $(OUT) ]; then mkdir -p $(OUT); fi + +$(LIB)/%.o: $(LIB)/%.c + $(E) " CC libcharset/lib/`basename $@`" + @ $(CC) -c $(CFLAGS) -o $@ $^ || exit 1 + +libcharset_ar: $(LIBCHARSET_OBJS) + $(E) " AR out/parted/libcharset.a" + @ $(AR) $(AR_FLAGS) $(OUT)/libcharset.a $(LIBCHARSET_OBJS) diff --git a/jni/parted/libcharset/lib/localcharset.c b/jni/parted/libcharset/lib/localcharset.c new file mode 100755 index 0000000..dbcd384 --- /dev/null +++ b/jni/parted/libcharset/lib/localcharset.c @@ -0,0 +1,1159 @@ +/* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2006, 2008-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2, 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "localcharset.h" + +#include +#include +#include +#include + +#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET +# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ +#endif + +#if defined _WIN32 && !defined __CYGWIN__ +# define WINDOWS_NATIVE +# include +#endif + +#if defined __EMX__ +/* Assume EMX program runs on OS/2, even if compiled under DOS. */ +# ifndef OS2 +# define OS2 +# endif +#endif + +#if !defined WINDOWS_NATIVE +# if HAVE_LANGINFO_CODESET +# include +# else +# if 0 /* see comment regarding use of setlocale(), below */ +# include +# endif +# endif +# ifdef __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +# endif +#elif defined WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include + /* For the use of setlocale() below, the Gnulib override in setlocale.c is + not needed; see the platform lists in setlocale_null.m4. */ +# undef setlocale +#endif +#if defined OS2 +# define INCL_DOS +# include +#endif + +/* For MB_CUR_MAX_L */ +#if defined DARWIN7 +# include +#endif + + +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 + +/* On these platforms, we use a mapping from non-canonical encoding name + to GNU canonical encoding name. */ + +/* With glibc-2.1 or newer, we don't need any canonicalization, + because glibc has iconv and both glibc and libiconv support all + GNU canonical names directly. */ +# if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__) + +struct table_entry +{ + const char alias[11+1]; + const char canonical[11+1]; +}; + +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry alias_table[] = + { +# if defined __FreeBSD__ /* FreeBSD */ + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + { "Big5", "BIG5" }, + { "C", "ASCII" }, + /*{ "CP1131", "CP1131" },*/ + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + /*{ "GBK", "GBK" },*/ + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + { "SJIS", "SHIFT_JIS" }, + { "US-ASCII", "ASCII" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined __NetBSD__ /* NetBSD */ + { "646", "ASCII" }, + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + /*{ "PT154", "PT154" },*/ + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __OpenBSD__ /* OpenBSD */ + { "646", "ASCII" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "US-ASCII", "ASCII" } +# define alias_table_defined +# endif +# if defined __APPLE__ && defined __MACH__ /* Mac OS X */ + /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is + useless: + - It returns the empty string when LANG is set to a locale of the + form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 + LC_CTYPE file. + - The environment variables LANG, LC_CTYPE, LC_ALL are not set by + the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. + - The documentation says: + "... all code that calls BSD system routines should ensure + that the const *char parameters of these routines are in UTF-8 + encoding. All BSD system functions expect their string + parameters to be in UTF-8 encoding and nothing else." + It also says + "An additional caveat is that string parameters for files, + paths, and other file-system entities must be in canonical + UTF-8. In a canonical UTF-8 Unicode string, all decomposable + characters are decomposed ..." + but this is not true: You can pass non-decomposed UTF-8 strings + to file system functions, and it is the OS which will convert + them to decomposed UTF-8 before accessing the file system. + - The Apple Terminal application displays UTF-8 by default. + - However, other applications are free to use different encodings: + - xterm uses ISO-8859-1 by default. + - TextEdit uses MacRoman by default. + We prefer UTF-8 over decomposed UTF-8-MAC because one should + minimize the use of decomposed Unicode. Unfortunately, through the + Darwin file system, decomposed UTF-8 strings are leaked into user + space nevertheless. + Then there are also the locales with encodings other than US-ASCII + and UTF-8. These locales can be occasionally useful to users (e.g. + when grepping through ISO-8859-1 encoded text files), when all their + file names are in US-ASCII. + */ + { "ARMSCII-8", "ARMSCII-8" }, + { "Big5", "BIG5" }, + { "Big5HKSCS", "BIG5-HKSCS" }, + { "CP1131", "CP1131" }, + { "CP1251", "CP1251" }, + { "CP866", "CP866" }, + { "CP949", "CP949" }, + { "GB18030", "GB18030" }, + { "GB2312", "GB2312" }, + { "GBK", "GBK" }, + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KOI8-R", "KOI8-R" }, + { "KOI8-U", "KOI8-U" }, + { "PT154", "PT154" }, + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined _AIX /* AIX */ + /*{ "GBK", "GBK" },*/ + { "IBM-1046", "CP1046" }, + { "IBM-1124", "CP1124" }, + { "IBM-1129", "CP1129" }, + { "IBM-1252", "CP1252" }, + { "IBM-850", "CP850" }, + { "IBM-856", "CP856" }, + { "IBM-921", "ISO-8859-13" }, + { "IBM-922", "CP922" }, + { "IBM-932", "CP932" }, + { "IBM-943", "CP943" }, + { "IBM-eucCN", "GB2312" }, + { "IBM-eucJP", "EUC-JP" }, + { "IBM-eucKR", "EUC-KR" }, + { "IBM-eucTW", "EUC-TW" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "TIS-620", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" } +# define alias_table_defined +# endif +# if defined __hpux /* HP-UX */ + { "SJIS", "SHIFT_JIS" }, + { "arabic8", "HP-ARABIC8" }, + { "big5", "BIG5" }, + { "cp1251", "CP1251" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "gb18030", "GB18030" }, + { "greek8", "HP-GREEK8" }, + { "hebrew8", "HP-HEBREW8" }, + { "hkbig5", "BIG5-HKSCS" }, + { "hp15CN", "GB2312" }, + { "iso88591", "ISO-8859-1" }, + { "iso885913", "ISO-8859-13" }, + { "iso885915", "ISO-8859-15" }, + { "iso88592", "ISO-8859-2" }, + { "iso88594", "ISO-8859-4" }, + { "iso88595", "ISO-8859-5" }, + { "iso88596", "ISO-8859-6" }, + { "iso88597", "ISO-8859-7" }, + { "iso88598", "ISO-8859-8" }, + { "iso88599", "ISO-8859-9" }, + { "kana8", "HP-KANA8" }, + { "koi8r", "KOI8-R" }, + { "roman8", "HP-ROMAN8" }, + { "tis620", "TIS-620" }, + { "turkish8", "HP-TURKISH8" }, + { "utf8", "UTF-8" } +# define alias_table_defined +# endif +# if defined __sgi /* IRIX */ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __osf__ /* OSF/1 */ + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KSC5601", "CP949" }, + { "SJIS", "SHIFT_JIS" }, + { "TACTIS", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" }, + { "cp850", "CP850" }, + { "dechanyu", "DEC-HANYU" }, + { "dechanzi", "GB2312" }, + { "deckanji", "DEC-KANJI" }, + { "deckorean", "EUC-KR" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "sdeckanji", "EUC-JP" } +# define alias_table_defined +# endif +# if defined __sun /* Solaris */ + { "5601", "EUC-KR" }, + { "646", "ASCII" }, + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + { "GB18030", "GB18030" }, + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-11", "TIS-620" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-3", "ISO-8859-3" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "PCK", "SHIFT_JIS" }, + { "TIS620.2533", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "ansi-1251", "CP1251" }, + { "cns11643", "EUC-TW" }, + { "eucJP", "EUC-JP" }, + { "gb2312", "GB2312" }, + { "koi8-r", "KOI8-R" } +# define alias_table_defined +# endif +# if defined __minix /* Minix */ + { "646", "ASCII" } +# define alias_table_defined +# endif +# if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */ + { "CP1361", "JOHAB" }, + { "CP20127", "ASCII" }, + { "CP20866", "KOI8-R" }, + { "CP20936", "GB2312" }, + { "CP21866", "KOI8-RU" }, + { "CP28591", "ISO-8859-1" }, + { "CP28592", "ISO-8859-2" }, + { "CP28593", "ISO-8859-3" }, + { "CP28594", "ISO-8859-4" }, + { "CP28595", "ISO-8859-5" }, + { "CP28596", "ISO-8859-6" }, + { "CP28597", "ISO-8859-7" }, + { "CP28598", "ISO-8859-8" }, + { "CP28599", "ISO-8859-9" }, + { "CP28605", "ISO-8859-15" }, + { "CP38598", "ISO-8859-8" }, + { "CP51932", "EUC-JP" }, + { "CP51936", "GB2312" }, + { "CP51949", "EUC-KR" }, + { "CP51950", "EUC-TW" }, + { "CP54936", "GB18030" }, + { "CP65001", "UTF-8" }, + { "CP936", "GBK" } +# define alias_table_defined +# endif +# if defined OS2 /* OS/2 */ + /* The list of encodings is taken from "List of OS/2 Codepages" + by Alex Taylor: + . + See also "__convcp() of kLIBC": + . */ + { "CP1004", "CP1252" }, + /*{ "CP1041", "CP943" },*/ + /*{ "CP1088", "CP949" },*/ + { "CP1089", "ISO-8859-6" }, + /*{ "CP1114", "CP950" },*/ + /*{ "CP1115", "GB2312" },*/ + { "CP1208", "UTF-8" }, + /*{ "CP1380", "GB2312" },*/ + { "CP1381", "GB2312" }, + { "CP1383", "GB2312" }, + { "CP1386", "GBK" }, + /*{ "CP301", "CP943" },*/ + { "CP3372", "EUC-JP" }, + { "CP4946", "CP850" }, + /*{ "CP5048", "JIS_X0208-1990" },*/ + /*{ "CP5049", "JIS_X0212-1990" },*/ + /*{ "CP5067", "KS_C_5601-1987" },*/ + { "CP813", "ISO-8859-7" }, + { "CP819", "ISO-8859-1" }, + { "CP878", "KOI8-R" }, + /*{ "CP897", "CP943" },*/ + { "CP912", "ISO-8859-2" }, + { "CP913", "ISO-8859-3" }, + { "CP914", "ISO-8859-4" }, + { "CP915", "ISO-8859-5" }, + { "CP916", "ISO-8859-8" }, + { "CP920", "ISO-8859-9" }, + { "CP921", "ISO-8859-13" }, + { "CP923", "ISO-8859-15" }, + /*{ "CP941", "CP943" },*/ + /*{ "CP947", "CP950" },*/ + /*{ "CP951", "CP949" },*/ + /*{ "CP952", "JIS_X0208-1990" },*/ + /*{ "CP953", "JIS_X0212-1990" },*/ + { "CP954", "EUC-JP" }, + { "CP964", "EUC-TW" }, + { "CP970", "EUC-KR" }, + /*{ "CP971", "KS_C_5601-1987" },*/ + { "IBM-1004", "CP1252" }, + /*{ "IBM-1006", "?" },*/ + /*{ "IBM-1008", "?" },*/ + /*{ "IBM-1041", "CP943" },*/ + /*{ "IBM-1051", "?" },*/ + /*{ "IBM-1088", "CP949" },*/ + { "IBM-1089", "ISO-8859-6" }, + /*{ "IBM-1098", "?" },*/ + /*{ "IBM-1114", "CP950" },*/ + /*{ "IBM-1115", "GB2312" },*/ + /*{ "IBM-1116", "?" },*/ + /*{ "IBM-1117", "?" },*/ + /*{ "IBM-1118", "?" },*/ + /*{ "IBM-1119", "?" },*/ + { "IBM-1124", "CP1124" }, + { "IBM-1125", "CP1125" }, + { "IBM-1131", "CP1131" }, + { "IBM-1208", "UTF-8" }, + { "IBM-1250", "CP1250" }, + { "IBM-1251", "CP1251" }, + { "IBM-1252", "CP1252" }, + { "IBM-1253", "CP1253" }, + { "IBM-1254", "CP1254" }, + { "IBM-1255", "CP1255" }, + { "IBM-1256", "CP1256" }, + { "IBM-1257", "CP1257" }, + /*{ "IBM-1275", "?" },*/ + /*{ "IBM-1276", "?" },*/ + /*{ "IBM-1277", "?" },*/ + /*{ "IBM-1280", "?" },*/ + /*{ "IBM-1281", "?" },*/ + /*{ "IBM-1282", "?" },*/ + /*{ "IBM-1283", "?" },*/ + /*{ "IBM-1380", "GB2312" },*/ + { "IBM-1381", "GB2312" }, + { "IBM-1383", "GB2312" }, + { "IBM-1386", "GBK" }, + /*{ "IBM-301", "CP943" },*/ + { "IBM-3372", "EUC-JP" }, + { "IBM-367", "ASCII" }, + { "IBM-437", "CP437" }, + { "IBM-4946", "CP850" }, + /*{ "IBM-5048", "JIS_X0208-1990" },*/ + /*{ "IBM-5049", "JIS_X0212-1990" },*/ + /*{ "IBM-5067", "KS_C_5601-1987" },*/ + { "IBM-813", "ISO-8859-7" }, + { "IBM-819", "ISO-8859-1" }, + { "IBM-850", "CP850" }, + /*{ "IBM-851", "?" },*/ + { "IBM-852", "CP852" }, + { "IBM-855", "CP855" }, + { "IBM-856", "CP856" }, + { "IBM-857", "CP857" }, + /*{ "IBM-859", "?" },*/ + { "IBM-860", "CP860" }, + { "IBM-861", "CP861" }, + { "IBM-862", "CP862" }, + { "IBM-863", "CP863" }, + { "IBM-864", "CP864" }, + { "IBM-865", "CP865" }, + { "IBM-866", "CP866" }, + /*{ "IBM-868", "?" },*/ + { "IBM-869", "CP869" }, + { "IBM-874", "CP874" }, + { "IBM-878", "KOI8-R" }, + /*{ "IBM-895", "?" },*/ + /*{ "IBM-897", "CP943" },*/ + /*{ "IBM-907", "?" },*/ + /*{ "IBM-909", "?" },*/ + { "IBM-912", "ISO-8859-2" }, + { "IBM-913", "ISO-8859-3" }, + { "IBM-914", "ISO-8859-4" }, + { "IBM-915", "ISO-8859-5" }, + { "IBM-916", "ISO-8859-8" }, + { "IBM-920", "ISO-8859-9" }, + { "IBM-921", "ISO-8859-13" }, + { "IBM-922", "CP922" }, + { "IBM-923", "ISO-8859-15" }, + { "IBM-932", "CP932" }, + /*{ "IBM-941", "CP943" },*/ + /*{ "IBM-942", "?" },*/ + { "IBM-943", "CP943" }, + /*{ "IBM-947", "CP950" },*/ + { "IBM-949", "CP949" }, + { "IBM-950", "CP950" }, + /*{ "IBM-951", "CP949" },*/ + /*{ "IBM-952", "JIS_X0208-1990" },*/ + /*{ "IBM-953", "JIS_X0212-1990" },*/ + { "IBM-954", "EUC-JP" }, + /*{ "IBM-955", "?" },*/ + { "IBM-964", "EUC-TW" }, + { "IBM-970", "EUC-KR" }, + /*{ "IBM-971", "KS_C_5601-1987" },*/ + { "IBM-eucCN", "GB2312" }, + { "IBM-eucJP", "EUC-JP" }, + { "IBM-eucKR", "EUC-KR" }, + { "IBM-eucTW", "EUC-TW" }, + { "IBM33722", "EUC-JP" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-3", "ISO-8859-3" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + /*{ "JISX0201-1976", "JISX0201-1976" },*/ + /*{ "JISX0208-1978", "?" },*/ + /*{ "JISX0208-1983", "JIS_X0208-1983" },*/ + /*{ "JISX0208-1990", "JIS_X0208-1990" },*/ + /*{ "JISX0212-1990", "JIS_X0212-1990" },*/ + /*{ "KSC5601-1987", "KS_C_5601-1987" },*/ + { "SJIS-1", "CP943" }, + { "SJIS-2", "CP943" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW-1993", "EUC-TW" } +# define alias_table_defined +# endif +# if defined VMS /* OpenVMS */ + /* The list of encodings is taken from the OpenVMS 7.3-1 documentation + "Compaq C Run-Time Library Reference Manual for OpenVMS systems" + section 10.7 "Handling Different Character Sets". */ + { "DECHANYU", "DEC-HANYU" }, + { "DECHANZI", "GB2312" }, + { "DECKANJI", "DEC-KANJI" }, + { "DECKOREAN", "EUC-KR" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "SDECKANJI", "EUC-JP" }, + { "SJIS", "SHIFT_JIS" }, + { "eucJP", "EUC-JP" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# ifndef alias_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; + +# endif + +#else + +/* On these platforms, we use a mapping from locale name to GNU canonical + encoding name. */ + +struct table_entry +{ + const char locale[17+1]; + const char canonical[11+1]; +}; + +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry locale_table[] = + { +# if defined __FreeBSD__ /* FreeBSD 4.2 */ + { "cs_CZ.ISO_8859-2", "ISO-8859-2" }, + { "da_DK.DIS_8859-15", "ISO-8859-15" }, + { "da_DK.ISO_8859-1", "ISO-8859-1" }, + { "de_AT.DIS_8859-15", "ISO-8859-15" }, + { "de_AT.ISO_8859-1", "ISO-8859-1" }, + { "de_CH.DIS_8859-15", "ISO-8859-15" }, + { "de_CH.ISO_8859-1", "ISO-8859-1" }, + { "de_DE.DIS_8859-15", "ISO-8859-15" }, + { "de_DE.ISO_8859-1", "ISO-8859-1" }, + { "en_AU.DIS_8859-15", "ISO-8859-15" }, + { "en_AU.ISO_8859-1", "ISO-8859-1" }, + { "en_CA.DIS_8859-15", "ISO-8859-15" }, + { "en_CA.ISO_8859-1", "ISO-8859-1" }, + { "en_GB.DIS_8859-15", "ISO-8859-15" }, + { "en_GB.ISO_8859-1", "ISO-8859-1" }, + { "en_US.DIS_8859-15", "ISO-8859-15" }, + { "en_US.ISO_8859-1", "ISO-8859-1" }, + { "es_ES.DIS_8859-15", "ISO-8859-15" }, + { "es_ES.ISO_8859-1", "ISO-8859-1" }, + { "fi_FI.DIS_8859-15", "ISO-8859-15" }, + { "fi_FI.ISO_8859-1", "ISO-8859-1" }, + { "fr_BE.DIS_8859-15", "ISO-8859-15" }, + { "fr_BE.ISO_8859-1", "ISO-8859-1" }, + { "fr_CA.DIS_8859-15", "ISO-8859-15" }, + { "fr_CA.ISO_8859-1", "ISO-8859-1" }, + { "fr_CH.DIS_8859-15", "ISO-8859-15" }, + { "fr_CH.ISO_8859-1", "ISO-8859-1" }, + { "fr_FR.DIS_8859-15", "ISO-8859-15" }, + { "fr_FR.ISO_8859-1", "ISO-8859-1" }, + { "hr_HR.ISO_8859-2", "ISO-8859-2" }, + { "hu_HU.ISO_8859-2", "ISO-8859-2" }, + { "is_IS.DIS_8859-15", "ISO-8859-15" }, + { "is_IS.ISO_8859-1", "ISO-8859-1" }, + { "it_CH.DIS_8859-15", "ISO-8859-15" }, + { "it_CH.ISO_8859-1", "ISO-8859-1" }, + { "it_IT.DIS_8859-15", "ISO-8859-15" }, + { "it_IT.ISO_8859-1", "ISO-8859-1" }, + { "ja_JP.EUC", "EUC-JP" }, + { "ja_JP.SJIS", "SHIFT_JIS" }, + { "ja_JP.Shift_JIS", "SHIFT_JIS" }, + { "ko_KR.EUC", "EUC-KR" }, + { "la_LN.ASCII", "ASCII" }, + { "la_LN.DIS_8859-15", "ISO-8859-15" }, + { "la_LN.ISO_8859-1", "ISO-8859-1" }, + { "la_LN.ISO_8859-2", "ISO-8859-2" }, + { "la_LN.ISO_8859-4", "ISO-8859-4" }, + { "lt_LN.ASCII", "ASCII" }, + { "lt_LN.DIS_8859-15", "ISO-8859-15" }, + { "lt_LN.ISO_8859-1", "ISO-8859-1" }, + { "lt_LN.ISO_8859-2", "ISO-8859-2" }, + { "lt_LT.ISO_8859-4", "ISO-8859-4" }, + { "nl_BE.DIS_8859-15", "ISO-8859-15" }, + { "nl_BE.ISO_8859-1", "ISO-8859-1" }, + { "nl_NL.DIS_8859-15", "ISO-8859-15" }, + { "nl_NL.ISO_8859-1", "ISO-8859-1" }, + { "no_NO.DIS_8859-15", "ISO-8859-15" }, + { "no_NO.ISO_8859-1", "ISO-8859-1" }, + { "pl_PL.ISO_8859-2", "ISO-8859-2" }, + { "pt_PT.DIS_8859-15", "ISO-8859-15" }, + { "pt_PT.ISO_8859-1", "ISO-8859-1" }, + { "ru_RU.CP866", "CP866" }, + { "ru_RU.ISO_8859-5", "ISO-8859-5" }, + { "ru_RU.KOI8-R", "KOI8-R" }, + { "ru_SU.CP866", "CP866" }, + { "ru_SU.ISO_8859-5", "ISO-8859-5" }, + { "ru_SU.KOI8-R", "KOI8-R" }, + { "sl_SI.ISO_8859-2", "ISO-8859-2" }, + { "sv_SE.DIS_8859-15", "ISO-8859-15" }, + { "sv_SE.ISO_8859-1", "ISO-8859-1" }, + { "uk_UA.KOI8-U", "KOI8-U" }, + { "zh_CN.EUC", "GB2312" }, + { "zh_TW.BIG5", "BIG5" }, + { "zh_TW.Big5", "BIG5" } +# define locale_table_defined +# endif +# if defined __DJGPP__ /* DOS / DJGPP 2.03 */ + /* The encodings given here may not all be correct. + If you find that the encoding given for your language and + country is not the one your DOS machine actually uses, just + correct it in this file, and send a mail to + Juan Manuel Guerrero + and . */ + { "C", "ASCII" }, + { "ar", "CP864" }, + { "ar_AE", "CP864" }, + { "ar_DZ", "CP864" }, + { "ar_EG", "CP864" }, + { "ar_IQ", "CP864" }, + { "ar_IR", "CP864" }, + { "ar_JO", "CP864" }, + { "ar_KW", "CP864" }, + { "ar_MA", "CP864" }, + { "ar_OM", "CP864" }, + { "ar_QA", "CP864" }, + { "ar_SA", "CP864" }, + { "ar_SY", "CP864" }, + { "be", "CP866" }, + { "be_BE", "CP866" }, + { "bg", "CP866" }, /* not CP855 ?? */ + { "bg_BG", "CP866" }, /* not CP855 ?? */ + { "ca", "CP850" }, + { "ca_ES", "CP850" }, + { "cs", "CP852" }, + { "cs_CZ", "CP852" }, + { "da", "CP865" }, /* not CP850 ?? */ + { "da_DK", "CP865" }, /* not CP850 ?? */ + { "de", "CP850" }, + { "de_AT", "CP850" }, + { "de_CH", "CP850" }, + { "de_DE", "CP850" }, + { "el", "CP869" }, + { "el_GR", "CP869" }, + { "en", "CP850" }, + { "en_AU", "CP850" }, /* not CP437 ?? */ + { "en_CA", "CP850" }, + { "en_GB", "CP850" }, + { "en_NZ", "CP437" }, + { "en_US", "CP437" }, + { "en_ZA", "CP850" }, /* not CP437 ?? */ + { "eo", "CP850" }, + { "eo_EO", "CP850" }, + { "es", "CP850" }, + { "es_AR", "CP850" }, + { "es_BO", "CP850" }, + { "es_CL", "CP850" }, + { "es_CO", "CP850" }, + { "es_CR", "CP850" }, + { "es_CU", "CP850" }, + { "es_DO", "CP850" }, + { "es_EC", "CP850" }, + { "es_ES", "CP850" }, + { "es_GT", "CP850" }, + { "es_HN", "CP850" }, + { "es_MX", "CP850" }, + { "es_NI", "CP850" }, + { "es_PA", "CP850" }, + { "es_PE", "CP850" }, + { "es_PY", "CP850" }, + { "es_SV", "CP850" }, + { "es_UY", "CP850" }, + { "es_VE", "CP850" }, + { "et", "CP850" }, + { "et_EE", "CP850" }, + { "eu", "CP850" }, + { "eu_ES", "CP850" }, + { "fi", "CP850" }, + { "fi_FI", "CP850" }, + { "fr", "CP850" }, + { "fr_BE", "CP850" }, + { "fr_CA", "CP850" }, + { "fr_CH", "CP850" }, + { "fr_FR", "CP850" }, + { "ga", "CP850" }, + { "ga_IE", "CP850" }, + { "gd", "CP850" }, + { "gd_GB", "CP850" }, + { "gl", "CP850" }, + { "gl_ES", "CP850" }, + { "he", "CP862" }, + { "he_IL", "CP862" }, + { "hr", "CP852" }, + { "hr_HR", "CP852" }, + { "hu", "CP852" }, + { "hu_HU", "CP852" }, + { "id", "CP850" }, /* not CP437 ?? */ + { "id_ID", "CP850" }, /* not CP437 ?? */ + { "is", "CP861" }, /* not CP850 ?? */ + { "is_IS", "CP861" }, /* not CP850 ?? */ + { "it", "CP850" }, + { "it_CH", "CP850" }, + { "it_IT", "CP850" }, + { "ja", "CP932" }, + { "ja_JP", "CP932" }, + { "kr", "CP949" }, /* not CP934 ?? */ + { "kr_KR", "CP949" }, /* not CP934 ?? */ + { "lt", "CP775" }, + { "lt_LT", "CP775" }, + { "lv", "CP775" }, + { "lv_LV", "CP775" }, + { "mk", "CP866" }, /* not CP855 ?? */ + { "mk_MK", "CP866" }, /* not CP855 ?? */ + { "mt", "CP850" }, + { "mt_MT", "CP850" }, + { "nb", "CP865" }, /* not CP850 ?? */ + { "nb_NO", "CP865" }, /* not CP850 ?? */ + { "nl", "CP850" }, + { "nl_BE", "CP850" }, + { "nl_NL", "CP850" }, + { "nn", "CP865" }, /* not CP850 ?? */ + { "nn_NO", "CP865" }, /* not CP850 ?? */ + { "no", "CP865" }, /* not CP850 ?? */ + { "no_NO", "CP865" }, /* not CP850 ?? */ + { "pl", "CP852" }, + { "pl_PL", "CP852" }, + { "pt", "CP850" }, + { "pt_BR", "CP850" }, + { "pt_PT", "CP850" }, + { "ro", "CP852" }, + { "ro_RO", "CP852" }, + { "ru", "CP866" }, + { "ru_RU", "CP866" }, + { "sk", "CP852" }, + { "sk_SK", "CP852" }, + { "sl", "CP852" }, + { "sl_SI", "CP852" }, + { "sq", "CP852" }, + { "sq_AL", "CP852" }, + { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sv", "CP850" }, + { "sv_SE", "CP850" }, + { "th", "CP874" }, + { "th_TH", "CP874" }, + { "tr", "CP857" }, + { "tr_TR", "CP857" }, + { "uk", "CP1125" }, + { "uk_UA", "CP1125" }, + { "zh_CN", "GBK" }, + { "zh_TW", "CP950" } /* not CP938 ?? */ +# define locale_table_defined +# endif +# ifndef locale_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; + +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. + If the canonical name cannot be determined, the result is a non-canonical + name. */ + +#ifdef STATIC +STATIC +#endif +const char * +locale_charset (void) +{ + const char *codeset; + + /* This function must be multithread-safe. To achieve this without using + thread-local storage, we use a simple strcpy or memcpy to fill this static + buffer. Filling it through, for example, strcpy + strcat would not be + guaranteed to leave the buffer's contents intact if another thread is + currently accessing it. If necessary, the contents is first assembled in + a stack-allocated buffer. */ + +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 + +# if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + +# ifdef __CYGWIN__ + /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always + returns "US-ASCII". Return the suffix of the locale name from the + environment variables (if present) or the codepage as a number. */ + if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) + { + const char *locale; + static char resultbuf[2 + 10 + 1]; + + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return + it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (resultbuf)) + { + /* This way of filling resultbuf is multithread-safe. */ + memcpy (resultbuf, dot, modifier - dot); + resultbuf [modifier - dot] = '\0'; + return resultbuf; + } + } + } + + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). This encoding is used by Cygwin, unless the user + has set the environment variable CYGWIN=codepage:oem (which very few + people do). + Output directed to console windows needs to be converted (to + GetOEMCP() if the console is using a raster font, or to + GetConsoleOutputCP() if it is using a TrueType font). Cygwin does + this conversion transparently (see winsup/cygwin/fhandler_console.cc), + converting to GetConsoleOutputCP(). This leads to correct results, + except when SetConsoleOutputCP has been called and a raster font is + in use. */ + { + char buf[2 + 10 + 1]; + + sprintf (buf, "CP%u", GetACP ()); + strcpy (resultbuf, buf); + codeset = resultbuf; + } + } +# endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + +# elif defined WINDOWS_NATIVE + + char buf[2 + 10 + 1]; + static char resultbuf[2 + 10 + 1]; + + /* The Windows API has a function returning the locale's codepage as + a number, but the value doesn't change according to what the + 'setlocale' call specified. So we use it as a last resort, in + case the string returned by 'setlocale' doesn't specify the + codepage. */ + char *current_locale = setlocale (LC_CTYPE, NULL); + char *pdot = strrchr (current_locale, '.'); + + if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) + sprintf (buf, "CP%s", pdot + 1); + else + { + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). + When the output goes to a console window, it needs to be provided in + GetOEMCP() encoding if the console is using a raster font, or in + GetConsoleOutputCP() encoding if it is using a TrueType font. + But in GUI programs and for output sent to files and pipes, GetACP() + encoding is the best bet. */ + sprintf (buf, "CP%u", GetACP ()); + } + /* For a locale name such as "French_France.65001", in Windows 10, + setlocale now returns "French_France.utf8" instead. */ + if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) + codeset = "UTF-8"; + else + { + strcpy (resultbuf, buf); + codeset = resultbuf; + } + +# elif defined OS2 + + const char *locale; + static char resultbuf[2 + 10 + 1]; + ULONG cp[3]; + ULONG cplen; + + codeset = NULL; + + /* Allow user to override the codeset, as set in the operating system, + with standard language environment variables. */ + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (resultbuf)) + { + /* This way of filling resultbuf is multithread-safe. */ + memcpy (resultbuf, dot, modifier - dot); + resultbuf [modifier - dot] = '\0'; + return resultbuf; + } + } + + /* For the POSIX locale, don't use the system's codepage. */ + if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) + codeset = ""; + } + + if (codeset == NULL) + { + /* OS/2 has a function returning the locale's codepage as a number. */ + if (DosQueryCp (sizeof (cp), cp, &cplen)) + codeset = ""; + else + { + char buf[2 + 10 + 1]; + + sprintf (buf, "CP%u", cp[0]); + strcpy (resultbuf, buf); + codeset = resultbuf; + } + } + +# else + +# error "Add code for other platforms here." + +# endif + + /* Resolve alias. */ + { +# ifdef alias_table_defined + /* On some platforms, UTF-8 locales are the most frequently used ones. + Speed up the common case and slow down the less common cases by + testing for this case first. */ +# if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__ + if (strcmp (codeset, "UTF-8") == 0) + goto done_table_lookup; + else +# endif + { + const struct table_entry * const table = alias_table; + size_t const table_size = + sizeof (alias_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) + { + /* Invariant: + for i < lo, strcmp (table[i].alias, codeset) < 0, + for i >= hi, strcmp (table[i].alias, codeset) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].alias, codeset); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].alias, codeset) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + } + if (0) + done_table_lookup: ; + else +# endif + { + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + if (codeset[0] == '\0') + codeset = "ASCII"; +# endif + } + } + +#else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like DJGPP) have only the C locale. Therefore we don't use setlocale + here; it would return "C" when it doesn't support the locale name the + user has set. */ +# if 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + if (locale == NULL) + locale = ""; + } + } + + /* Map locale name to canonical encoding name. */ + { +# ifdef locale_table_defined + const struct table_entry * const table = locale_table; + size_t const table_size = + sizeof (locale_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) + { + /* Invariant: + for i < lo, strcmp (table[i].locale, locale) < 0, + for i >= hi, strcmp (table[i].locale, locale) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].locale, locale); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].locale, locale) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + if (0) + done_table_lookup: ; + else +# endif + { + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* The canonical name cannot be determined. */ + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + codeset = "ASCII"; +# endif + } + } + +#endif + +#ifdef DARWIN7 + /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" + (the default codeset) does not work when MB_CUR_MAX is 1. */ + if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) + codeset = "ASCII"; +#endif + + return codeset; +} diff --git a/jni/parted/libcharset/lib/relocatable-stub.c b/jni/parted/libcharset/lib/relocatable-stub.c new file mode 100755 index 0000000..cbfc595 --- /dev/null +++ b/jni/parted/libcharset/lib/relocatable-stub.c @@ -0,0 +1,29 @@ +/* Provide relocatable packages. + Copyright (C) 2018 Free Software Foundation, Inc. + Written by Bruno Haible , 2018. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2, 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . */ + +#include + +#include "libcharset.h" + +extern LIBCHARSET_DLL_EXPORTED void +libcharset_set_relocation_prefix (const char *orig_prefix, const char *curr_prefix); + +/* This is a stub for binary backward-compatibility. */ +void +libcharset_set_relocation_prefix (const char *orig_prefix, const char *curr_prefix) +{ +} diff --git a/jni/parted/libgnulib/Android.mk b/jni/parted/libgnulib/Android.mk new file mode 100755 index 0000000..1ceb7b9 --- /dev/null +++ b/jni/parted/libgnulib/Android.mk @@ -0,0 +1,97 @@ +# By YZBruh + +# Copyright 2024 Partition Manager +# +# 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. + +######## +# 3.0.2 +######## + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libgnulib +LOCAL_SRC_FILES := \ + $(LOCAL_PATH)/lib/argmatch.c \ + $(LOCAL_PATH)/lib/basename-lgpl.c \ + $(LOCAL_PATH)/lib/basename.c \ + $(LOCAL_PATH)/lib/btowc.c \ + $(LOCAL_PATH)/lib/c-ctype.c \ + $(LOCAL_PATH)/lib/c-strcasecmp.c \ + $(LOCAL_PATH)/lib/c-strncasecmp.c \ + $(LOCAL_PATH)/lib/c32isprint.c \ + $(LOCAL_PATH)/lib/canonicalize-lgpl.c \ + $(LOCAL_PATH)/lib/cloexec.c \ + $(LOCAL_PATH)/lib/close-stream.c \ + $(LOCAL_PATH)/lib/closeout.c \ + $(LOCAL_PATH)/lib/dirname-lgpl.c \ + $(LOCAL_PATH)/lib/dirname.c \ + $(LOCAL_PATH)/lib/error.c \ + $(LOCAL_PATH)/lib/exitfail.c \ + $(LOCAL_PATH)/lib/fcntl.c \ + $(LOCAL_PATH)/lib/free.c \ + $(LOCAL_PATH)/lib/getdtablesize.c \ + $(LOCAL_PATH)/lib/hard-locale.c \ + $(LOCAL_PATH)/lib/ialloc.c \ + $(LOCAL_PATH)/lib/iswctype.c \ + $(LOCAL_PATH)/lib/iswdigit.c \ + $(LOCAL_PATH)/lib/iswpunct.c \ + $(LOCAL_PATH)/lib/iswxdigit.c \ + $(LOCAL_PATH)/lib/localcharset.c \ + $(LOCAL_PATH)/lib/long-options.c \ + $(LOCAL_PATH)/lib/malloca.c \ + $(LOCAL_PATH)/lib/mbrtoc32.c \ + $(LOCAL_PATH)/lib/mbrtowc.c \ + $(LOCAL_PATH)/lib/mbszero.c \ + $(LOCAL_PATH)/lib/nl_langinfo.c \ + $(LOCAL_PATH)/lib/progname.c \ + $(LOCAL_PATH)/lib/quotearg.c \ + $(LOCAL_PATH)/lib/rawmemchr.c \ + $(LOCAL_PATH)/lib/regex.c \ + $(LOCAL_PATH)/lib/rpmatch.c \ + $(LOCAL_PATH)/lib/safe-read.c \ + $(LOCAL_PATH)/lib/setlocale-lock.c \ + $(LOCAL_PATH)/lib/setlocale_null-unlocked.c \ + $(LOCAL_PATH)/lib/setlocale_null.c \ + $(LOCAL_PATH)/lib/stat-time.c \ + $(LOCAL_PATH)/lib/stripslash.c \ + $(LOCAL_PATH)/lib/tempname.c \ + $(LOCAL_PATH)/lib/version-etc-fsf.c \ + $(LOCAL_PATH)/lib/version-etc.c \ + $(LOCAL_PATH)/lib/wctype.c \ + $(LOCAL_PATH)/lib/unictype/ctype_print.c \ + $(LOCAL_PATH)/lib/xalloc-die.c \ + $(LOCAL_PATH)/lib/xmalloc.c \ + $(LOCAL_PATH)/lib/xstrtol.c \ + $(LOCAL_PATH)/lib/xstrtoll.c \ + $(LOCAL_PATH)/lib/xstrtoul.c \ + $(LOCAL_PATH)/lib/xstrtoull.c +LOCAL_C_INCLUDES := \ + $(LOCAL_PATH)/../../../include/libgnulib \ + $(LOCAL_PATH)/../../../include \ + $(LOCAL_PATH)/../lib \ + $(LOCAL_PATH)/lib +LOCAL_CFLAGS := \ + -Wall \ + -Wextra \ + -Wno-sign-compare \ + -Wno-unused-const-variable \ + -Wno-unused-parameter \ + -Wno-nullability-completeness \ + -Wno-macro-redefined \ + -fPIC \ + -include $(LOCAL_PATH)/../../include/PartitionManager/Alternatives.h + +include $(BUILD_STATIC_LIBRARY) \ No newline at end of file diff --git a/jni/parted/libgnulib/lib/argmatch.c b/jni/parted/libgnulib/lib/argmatch.c new file mode 100755 index 0000000..c9d727c --- /dev/null +++ b/jni/parted/libgnulib/lib/argmatch.c @@ -0,0 +1,293 @@ +/* argmatch.c -- find a match for a string in an array + + Copyright (C) 1990, 1998-1999, 2001-2007, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* Written by David MacKenzie + Modified by Akim Demaille */ + +#include + +/* Specification. */ +#include "argmatch.h" + +#include +#include +#include + +#define _(msgid) gettext (msgid) + +#include +#include "quotearg.h" + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +/* When reporting an invalid argument, show nonprinting characters + by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use + literal_quoting_style. */ +#ifndef ARGMATCH_QUOTING_STYLE +# define ARGMATCH_QUOTING_STYLE locale_quoting_style +#endif + +/* Non failing version of argmatch call this function after failing. */ +#ifndef ARGMATCH_DIE +# include "exitfail.h" +# define ARGMATCH_DIE exit (exit_failure) +#endif + +#ifdef ARGMATCH_DIE_DECL +ARGMATCH_DIE_DECL; +#endif + +static void +__argmatch_die (void) +{ + ARGMATCH_DIE; +} + +/* Used by XARGMATCH. See description in argmatch.h. + Default to __argmatch_die, but allow caller to change this at run-time. */ +argmatch_exit_fn argmatch_die = __argmatch_die; + + +/* If ARG is an unambiguous match for an element of the + NULL-terminated array ARGLIST, return the index in ARGLIST + of the matched element, else -1 if it does not match any element + or -2 if it is ambiguous (is a prefix of more than one element). + + If VALLIST is none null, use it to resolve ambiguities limited to + synonyms, i.e., for + "yes", "yop" -> 0 + "no", "nope" -> 1 + "y" is a valid argument, for 0, and "n" for 1. */ + +ptrdiff_t +argmatch (const char *arg, const char *const *arglist, + const void *vallist, size_t valsize) +{ + size_t i; /* Temporary index in ARGLIST. */ + size_t arglen; /* Length of ARG. */ + ptrdiff_t matchind = -1; /* Index of first nonexact match. */ + bool ambiguous = false; /* If true, multiple nonexact match(es). */ + + arglen = strlen (arg); + + /* Test all elements for either exact match or abbreviated matches. */ + for (i = 0; arglist[i]; i++) + { + if (!strncmp (arglist[i], arg, arglen)) + { + if (strlen (arglist[i]) == arglen) + /* Exact match found. */ + return i; + else if (matchind == -1) + /* First nonexact match found. */ + matchind = i; + else + { + /* Second nonexact match found. */ + if (vallist == NULL + || memcmp ((char const *) vallist + valsize * matchind, + (char const *) vallist + valsize * i, valsize)) + { + /* There is a real ambiguity, or we could not + disambiguate. */ + ambiguous = true; + } + } + } + } + if (ambiguous) + return -2; + else + return matchind; +} + +ptrdiff_t +argmatch_exact (const char *arg, const char *const *arglist) +{ + size_t i; + + /* Test elements for exact match. */ + for (i = 0; arglist[i]; i++) + { + if (!strcmp (arglist[i], arg)) + return i; + } + + return -1; +} + +/* Error reporting for argmatch. + CONTEXT is a description of the type of entity that was being matched. + VALUE is the invalid value that was given. + PROBLEM is the return value from argmatch. */ + +void +argmatch_invalid (const char *context, const char *value, ptrdiff_t problem) +{ + char const *format = (problem == -1 + ? _("invalid argument %s for %s") + : _("ambiguous argument %s for %s")); + + error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value), + quote_n (1, context)); +} + +/* List the valid arguments for argmatch. + ARGLIST is the same as in argmatch. + VALLIST is a pointer to an array of values. + VALSIZE is the size of the elements of VALLIST */ +void +argmatch_valid (const char *const *arglist, + const void *vallist, size_t valsize) +{ + size_t i; + const char *last_val = NULL; + + /* We try to put synonyms on the same line. The assumption is that + synonyms follow each other */ + fputs (_("Valid arguments are:"), stderr); + for (i = 0; arglist[i]; i++) + if ((i == 0) + || memcmp (last_val, (char const *) vallist + valsize * i, valsize)) + { + fprintf (stderr, "\n - %s", quote (arglist[i])); + last_val = (char const *) vallist + valsize * i; + } + else + { + fprintf (stderr, ", %s", quote (arglist[i])); + } + putc ('\n', stderr); +} + +/* Never failing versions of the previous functions. + + CONTEXT is the context for which argmatch is called (e.g., + "--version-control", or "$VERSION_CONTROL" etc.). Upon failure, + calls the (supposed never to return) function EXIT_FN. */ + +ptrdiff_t +__xargmatch_internal (const char *context, + const char *arg, const char *const *arglist, + const void *vallist, size_t valsize, + argmatch_exit_fn exit_fn, + bool allow_abbreviation) +{ + ptrdiff_t res; + + if (allow_abbreviation) + res = argmatch (arg, arglist, vallist, valsize); + else + res = argmatch_exact (arg, arglist); + + if (res >= 0) + /* Success. */ + return res; + + /* We failed. Explain why. */ + argmatch_invalid (context, arg, res); + argmatch_valid (arglist, vallist, valsize); + (*exit_fn) (); + + return -1; /* To please the compilers. */ +} + +/* Look for VALUE in VALLIST, an array of objects of size VALSIZE and + return the first corresponding argument in ARGLIST */ +const char * +argmatch_to_argument (const void *value, + const char *const *arglist, + const void *vallist, size_t valsize) +{ + size_t i; + + for (i = 0; arglist[i]; i++) + if (!memcmp (value, (char const *) vallist + valsize * i, valsize)) + return arglist[i]; + return NULL; +} + +#ifdef TEST +/* + * Based on "getversion.c" by David MacKenzie + */ + +/* When to make backup files. */ +enum backup_type +{ + /* Never make backups. */ + no_backups, + + /* Make simple backups of every file. */ + simple_backups, + + /* Make numbered backups of files that already have numbered backups, + and simple backups of the others. */ + numbered_existing_backups, + + /* Make numbered backups of every file. */ + numbered_backups +}; + +/* Two tables describing arguments (keys) and their corresponding + values */ +static const char *const backup_args[] = +{ + "no", "none", "off", + "simple", "never", + "existing", "nil", + "numbered", "t", + 0 +}; + +static const enum backup_type backup_vals[] = +{ + no_backups, no_backups, no_backups, + simple_backups, simple_backups, + numbered_existing_backups, numbered_existing_backups, + numbered_backups, numbered_backups +}; + +int +main (int argc, const char *const *argv) +{ + const char *cp; + enum backup_type backup_type = no_backups; + + if (argc > 2) + { + fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", getprogname ()); + exit (1); + } + + if ((cp = getenv ("VERSION_CONTROL"))) + backup_type = XARGMATCH ("$VERSION_CONTROL", cp, + backup_args, backup_vals); + + if (argc == 2) + backup_type = XARGMATCH (getprogname (), argv[1], + backup_args, backup_vals); + + printf ("The version control is '%s'\n", + ARGMATCH_TO_ARGUMENT (&backup_type, backup_args, backup_vals)); + + return 0; +} +#endif diff --git a/jni/parted/libgnulib/lib/basename-lgpl.c b/jni/parted/libgnulib/lib/basename-lgpl.c new file mode 100755 index 0000000..256f846 --- /dev/null +++ b/jni/parted/libgnulib/lib/basename-lgpl.c @@ -0,0 +1,70 @@ +/* basename.c -- return the last element in a file name + + Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "basename-lgpl.h" + +#include + +#include "filename.h" + +char * +last_component (char const *name) +{ + char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); + char const *p; + bool last_was_slash = false; + + while (ISSLASH (*base)) + base++; + + for (p = base; *p; p++) + { + if (ISSLASH (*p)) + last_was_slash = true; + else if (last_was_slash) + { + base = p; + last_was_slash = false; + } + } + + return (char *) base; +} + +size_t +base_len (char const *name) +{ + size_t len; + size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); + + for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) + continue; + + if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 + && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) + return 2; + + if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len + && len == prefix_len && ISSLASH (name[prefix_len])) + return prefix_len + 1; + + return len; +} diff --git a/jni/parted/libgnulib/lib/basename.c b/jni/parted/libgnulib/lib/basename.c new file mode 100755 index 0000000..c5a6bdc --- /dev/null +++ b/jni/parted/libgnulib/lib/basename.c @@ -0,0 +1,64 @@ +/* basename.c -- return the last element in a file name + + Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#include + +#include "dirname.h" + +#include +#include "xalloc.h" + +char * +base_name (char const *name) +{ + char const *base = last_component (name); + idx_t length; + int dotslash_len; + if (*base) + { + length = base_len (base); + + /* Collapse a sequence of trailing slashes into one. */ + length += ISSLASH (base[length]); + + /* On systems with drive letters, "a/b:c" must return "./b:c" rather + than "b:c" to avoid confusion with a drive letter. On systems + with pure POSIX semantics, this is not an issue. */ + dotslash_len = FILE_SYSTEM_PREFIX_LEN (base) != 0 ? 2 : 0; + } + else + { + /* There is no last component, so NAME is a file system root or + the empty string. */ + base = name; + length = base_len (base); + dotslash_len = 0; + } + + char *p = ximalloc (dotslash_len + length + 1); + if (dotslash_len) + { + p[0] = '.'; + p[1] = '/'; + } + + /* Finally, copy the basename. */ + memcpy (p + dotslash_len, base, length); + p[dotslash_len + length] = '\0'; + return p; +} diff --git a/jni/parted/libgnulib/lib/btowc.c b/jni/parted/libgnulib/lib/btowc.c new file mode 100755 index 0000000..8bf21aa --- /dev/null +++ b/jni/parted/libgnulib/lib/btowc.c @@ -0,0 +1,47 @@ +/* Convert unibyte character to wide character. + Copyright (C) 2008, 2010-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include + +wint_t +btowc (int c) +{ + if (c != EOF) + { + char buf[1]; + wchar_t wc; + + buf[0] = c; +#if HAVE_MBRTOWC + mbstate_t state; + mbszero (&state); + size_t ret = mbrtowc (&wc, buf, 1, &state); + if (!(ret == (size_t)(-1) || ret == (size_t)(-2))) +#else + if (mbtowc (&wc, buf, 1) >= 0) +#endif + return wc; + } + return WEOF; +} diff --git a/jni/parted/libgnulib/lib/c-ctype.c b/jni/parted/libgnulib/lib/c-ctype.c new file mode 100755 index 0000000..d3f1b12 --- /dev/null +++ b/jni/parted/libgnulib/lib/c-ctype.c @@ -0,0 +1,21 @@ +/* Character handling in C locale. + + Copyright (C) 2003-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#define C_CTYPE_INLINE _GL_EXTERN_INLINE +#include "c-ctype.h" diff --git a/jni/parted/libgnulib/lib/c-strcasecmp.c b/jni/parted/libgnulib/lib/c-strcasecmp.c new file mode 100755 index 0000000..1fa575a --- /dev/null +++ b/jni/parted/libgnulib/lib/c-strcasecmp.c @@ -0,0 +1,56 @@ +/* c-strcasecmp.c -- case insensitive string comparator in C locale + Copyright (C) 1998-1999, 2005-2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "c-strcase.h" + +#include + +#include "c-ctype.h" + +int +c_strcasecmp (const char *s1, const char *s2) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + c1 = c_tolower (*p1); + c2 = c_tolower (*p2); + + if (c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return _GL_CMP (c1, c2); +} diff --git a/jni/parted/libgnulib/lib/c-strncasecmp.c b/jni/parted/libgnulib/lib/c-strncasecmp.c new file mode 100755 index 0000000..4c8b0b6 --- /dev/null +++ b/jni/parted/libgnulib/lib/c-strncasecmp.c @@ -0,0 +1,56 @@ +/* c-strncasecmp.c -- case insensitive string comparator in C locale + Copyright (C) 1998-1999, 2005-2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "c-strcase.h" + +#include + +#include "c-ctype.h" + +int +c_strncasecmp (const char *s1, const char *s2, size_t n) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2 || n == 0) + return 0; + + do + { + c1 = c_tolower (*p1); + c2 = c_tolower (*p2); + + if (--n == 0 || c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return _GL_CMP (c1, c2); +} diff --git a/jni/parted/libgnulib/lib/c32isprint.c b/jni/parted/libgnulib/lib/c32isprint.c new file mode 100755 index 0000000..fd8d7a6 --- /dev/null +++ b/jni/parted/libgnulib/lib/c32isprint.c @@ -0,0 +1,26 @@ +/* Test 32-bit wide character for being printable. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#define IN_C32ISPRINT +/* Specification. */ +#include + +#define FUNC c32isprint +#define WCHAR_FUNC iswprint +#define UCS_FUNC uc_is_print +#include "c32is-impl.h" diff --git a/jni/parted/libgnulib/lib/canonicalize-lgpl.c b/jni/parted/libgnulib/lib/canonicalize-lgpl.c new file mode 100755 index 0000000..efd79ce --- /dev/null +++ b/jni/parted/libgnulib/lib/canonicalize-lgpl.c @@ -0,0 +1,469 @@ +/* Return the canonical absolute name of a given file. + Copyright (C) 1996-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _LIBC +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the name == NULL test below. */ +# define _GL_ARG_NONNULL(params) + +# include +#endif + +/* Specification. */ +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#ifdef _LIBC +# include +# define GCC_LINT 1 +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define __canonicalize_file_name canonicalize_file_name +# define __realpath realpath +# define __strdup strdup +# include "pathmax.h" +# define __faccessat faccessat +# if defined _WIN32 && !defined __CYGWIN__ +# define __getcwd _getcwd +# elif HAVE_GETCWD +# if IN_RELOCWRAPPER + /* When building the relocatable program wrapper, use the system's getcwd + function, not the gnulib override, otherwise we would get a link error. + */ +# undef getcwd +# endif +# if defined VMS && !defined getcwd + /* We want the directory in Unix syntax, not in VMS syntax. + The gnulib override of 'getcwd' takes 2 arguments; the original VMS + 'getcwd' takes 3 arguments. */ +# define __getcwd(buf, max) getcwd (buf, max, 0) +# else +# define __getcwd getcwd +# endif +# else +# define __getcwd(buf, max) getwd (buf) +# endif +# define __mempcpy mempcpy +# define __pathconf pathconf +# define __rawmemchr rawmemchr +# define __readlink readlink +# if IN_RELOCWRAPPER + /* When building the relocatable program wrapper, use the system's memmove + function, not the gnulib override, otherwise we would get a link error. + */ +# undef memmove +# endif +#endif + +/* Suppress bogus GCC -Wmaybe-uninitialized warnings. */ +#if defined GCC_LINT || defined lint +# define IF_LINT(Code) Code +#else +# define IF_LINT(Code) /* empty */ +#endif + +#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT +# define DOUBLE_SLASH_IS_DISTINCT_ROOT false +#endif + +#if defined _LIBC || !FUNC_REALPATH_WORKS + +/* Return true if FILE's existence can be shown, false (setting errno) + otherwise. Follow symbolic links. */ +static bool +file_accessible (char const *file) +{ +# if defined _LIBC || HAVE_FACCESSAT + return __faccessat (AT_FDCWD, file, F_OK, AT_EACCESS) == 0; +# else + struct stat st; + return stat (file, &st) == 0 || errno == EOVERFLOW; +# endif +} + +/* True if concatenating END as a suffix to a file name means that the + code needs to check that the file name is that of a searchable + directory, since the canonicalize_filename_mode_stk code won't + check this later anyway when it checks an ordinary file name + component within END. END must either be empty, or start with a + slash. */ + +static bool _GL_ATTRIBUTE_PURE +suffix_requires_dir_check (char const *end) +{ + /* If END does not start with a slash, the suffix is OK. */ + while (ISSLASH (*end)) + { + /* Two or more slashes act like a single slash. */ + do + end++; + while (ISSLASH (*end)); + + switch (*end++) + { + default: return false; /* An ordinary file name component is OK. */ + case '\0': return true; /* Trailing "/" is trouble. */ + case '.': break; /* Possibly "." or "..". */ + } + /* Trailing "/.", or "/.." even if not trailing, is trouble. */ + if (!*end || (*end == '.' && (!end[1] || ISSLASH (end[1])))) + return true; + } + + return false; +} + +/* Append this to a file name to test whether it is a searchable directory. + On POSIX platforms "/" suffices, but "/./" is sometimes needed on + macOS 10.13 , and should also work on + platforms like AIX 7.2 that need at least "/.". */ + +# if defined _LIBC || defined LSTAT_FOLLOWS_SLASHED_SYMLINK +static char const dir_suffix[] = "/"; +# else +static char const dir_suffix[] = "/./"; +# endif + +/* Return true if DIR is a searchable dir, false (setting errno) otherwise. + DIREND points to the NUL byte at the end of the DIR string. + Store garbage into DIREND[0 .. strlen (dir_suffix)]. */ + +static bool +dir_check (char *dir, char *dirend) +{ + strcpy (dirend, dir_suffix); + return file_accessible (dir); +} + +static idx_t +get_path_max (void) +{ +# ifdef PATH_MAX + long int path_max = PATH_MAX; +# else + /* The caller invoked realpath with a null RESOLVED, even though + PATH_MAX is not defined as a constant. The glibc manual says + programs should not do this, and POSIX says the behavior is undefined. + Historically, glibc here used the result of pathconf, or 1024 if that + failed; stay consistent with this (dubious) historical practice. */ + int err = errno; + long int path_max = __pathconf ("/", _PC_PATH_MAX); + __set_errno (err); +# endif + return path_max < 0 ? 1024 : path_max <= IDX_MAX ? path_max : IDX_MAX; +} + +/* Scratch buffers used by realpath_stk and managed by __realpath. */ +struct realpath_bufs +{ + struct scratch_buffer rname; + struct scratch_buffer extra; + struct scratch_buffer link; +}; + +static char * +realpath_stk (const char *name, char *resolved, struct realpath_bufs *bufs) +{ + char *dest; + char const *start; + char const *end; + int num_links = 0; + + if (name == NULL) + { + /* As per Single Unix Specification V2 we must return an error if + either parameter is a null pointer. We extend this to allow + the RESOLVED parameter to be NULL in case the we are expected to + allocate the room for the return value. */ + __set_errno (EINVAL); + return NULL; + } + + if (name[0] == '\0') + { + /* As per Single Unix Specification V2 we must return an error if + the name argument points to an empty string. */ + __set_errno (ENOENT); + return NULL; + } + + char *rname = bufs->rname.data; + bool end_in_extra_buffer = false; + bool failed = true; + + /* This is always zero for Posix hosts, but can be 2 for MS-Windows + and MS-DOS X:/foo/bar file names. */ + idx_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); + + if (!IS_ABSOLUTE_FILE_NAME (name)) + { + while (!__getcwd (bufs->rname.data, bufs->rname.length)) + { + if (errno != ERANGE) + { + dest = rname; + goto error; + } + if (!scratch_buffer_grow (&bufs->rname)) + return NULL; + rname = bufs->rname.data; + } + dest = __rawmemchr (rname, '\0'); + start = name; + prefix_len = FILE_SYSTEM_PREFIX_LEN (rname); + } + else + { + dest = __mempcpy (rname, name, prefix_len); + *dest++ = '/'; + if (DOUBLE_SLASH_IS_DISTINCT_ROOT) + { + if (prefix_len == 0 /* implies ISSLASH (name[0]) */ + && ISSLASH (name[1]) && !ISSLASH (name[2])) + *dest++ = '/'; + *dest = '\0'; + } + start = name + prefix_len; + } + + for ( ; *start; start = end) + { + /* Skip sequence of multiple file name separators. */ + while (ISSLASH (*start)) + ++start; + + /* Find end of component. */ + for (end = start; *end && !ISSLASH (*end); ++end) + /* Nothing. */; + + /* Length of this file name component; it can be zero if a file + name ends in '/'. */ + idx_t startlen = end - start; + + if (startlen == 0) + break; + else if (startlen == 1 && start[0] == '.') + /* nothing */; + else if (startlen == 2 && start[0] == '.' && start[1] == '.') + { + /* Back up to previous component, ignore if at root already. */ + if (dest > rname + prefix_len + 1) + for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) + continue; + if (DOUBLE_SLASH_IS_DISTINCT_ROOT + && dest == rname + 1 && !prefix_len + && ISSLASH (*dest) && !ISSLASH (dest[1])) + dest++; + } + else + { + if (!ISSLASH (dest[-1])) + *dest++ = '/'; + + while (rname + bufs->rname.length - dest + < startlen + sizeof dir_suffix) + { + idx_t dest_offset = dest - rname; + if (!scratch_buffer_grow_preserve (&bufs->rname)) + return NULL; + rname = bufs->rname.data; + dest = rname + dest_offset; + } + + dest = __mempcpy (dest, start, startlen); + *dest = '\0'; + + char *buf; + ssize_t n; + while (true) + { + buf = bufs->link.data; + idx_t bufsize = bufs->link.length; + n = __readlink (rname, buf, bufsize - 1); + if (n < bufsize - 1) + break; + if (!scratch_buffer_grow (&bufs->link)) + return NULL; + } + if (0 <= n) + { + if (++num_links > __eloop_threshold ()) + { + __set_errno (ELOOP); + goto error; + } + + buf[n] = '\0'; + + char *extra_buf = bufs->extra.data; + idx_t end_idx IF_LINT (= 0); + if (end_in_extra_buffer) + end_idx = end - extra_buf; + size_t len = strlen (end); + if (INT_ADD_OVERFLOW (len, n)) + { + __set_errno (ENOMEM); + return NULL; + } + while (bufs->extra.length <= len + n) + { + if (!scratch_buffer_grow_preserve (&bufs->extra)) + return NULL; + extra_buf = bufs->extra.data; + } + if (end_in_extra_buffer) + end = extra_buf + end_idx; + + /* Careful here, end may be a pointer into extra_buf... */ + memmove (&extra_buf[n], end, len + 1); + name = end = memcpy (extra_buf, buf, n); + end_in_extra_buffer = true; + + if (IS_ABSOLUTE_FILE_NAME (buf)) + { + idx_t pfxlen = FILE_SYSTEM_PREFIX_LEN (buf); + + dest = __mempcpy (rname, buf, pfxlen); + *dest++ = '/'; /* It's an absolute symlink */ + if (DOUBLE_SLASH_IS_DISTINCT_ROOT) + { + if (ISSLASH (buf[1]) && !ISSLASH (buf[2]) && !pfxlen) + *dest++ = '/'; + *dest = '\0'; + } + /* Install the new prefix to be in effect hereafter. */ + prefix_len = pfxlen; + } + else + { + /* Back up to previous component, ignore if at root + already: */ + if (dest > rname + prefix_len + 1) + for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) + continue; + if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 + && ISSLASH (*dest) && !ISSLASH (dest[1]) && !prefix_len) + dest++; + } + } + else if (! (suffix_requires_dir_check (end) + ? dir_check (rname, dest) + : errno == EINVAL)) + goto error; + } + } + if (dest > rname + prefix_len + 1 && ISSLASH (dest[-1])) + --dest; + if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len + && ISSLASH (*dest) && !ISSLASH (dest[1])) + dest++; + failed = false; + +error: + *dest++ = '\0'; + if (resolved != NULL) + { + /* Copy the full result on success or partial result if failure was due + to the path not existing or not being accessible. */ + if ((!failed || errno == ENOENT || errno == EACCES) + && dest - rname <= get_path_max ()) + { + strcpy (resolved, rname); + if (failed) + return NULL; + else + return resolved; + } + if (!failed) + __set_errno (ENAMETOOLONG); + return NULL; + } + else + { + if (failed) + return NULL; + else + return __strdup (bufs->rname.data); + } +} + +/* Return the canonical absolute name of file NAME. A canonical name + does not contain any ".", ".." components nor any repeated file name + separators ('/') or symlinks. All file name components must exist. If + RESOLVED is null, the result is malloc'd; otherwise, if the + canonical name is PATH_MAX chars or more, returns null with 'errno' + set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars, + returns the name in RESOLVED. If the name cannot be resolved and + RESOLVED is non-NULL, it contains the name of the first component + that cannot be resolved. If the name can be resolved, RESOLVED + holds the same value as the value returned. */ + +char * +__realpath (const char *name, char *resolved) +{ + struct realpath_bufs bufs; + scratch_buffer_init (&bufs.rname); + scratch_buffer_init (&bufs.extra); + scratch_buffer_init (&bufs.link); + char *result = realpath_stk (name, resolved, &bufs); + scratch_buffer_free (&bufs.link); + scratch_buffer_free (&bufs.extra); + scratch_buffer_free (&bufs.rname); + return result; +} +libc_hidden_def (__realpath) +versioned_symbol (libc, __realpath, realpath, GLIBC_2_3); + +#endif /* defined _LIBC || !FUNC_REALPATH_WORKS */ + + +#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3) +char * +attribute_compat_text_section +__old_realpath (const char *name, char *resolved) +{ + if (resolved == NULL) + { + __set_errno (EINVAL); + return NULL; + } + + return __realpath (name, resolved); +} +compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0); +#endif + + +char * +__canonicalize_file_name (const char *name) +{ + return __realpath (name, NULL); +} +weak_alias (__canonicalize_file_name, canonicalize_file_name) diff --git a/jni/parted/libgnulib/lib/cloexec.c b/jni/parted/libgnulib/lib/cloexec.c new file mode 100755 index 0000000..cdb0d74 --- /dev/null +++ b/jni/parted/libgnulib/lib/cloexec.c @@ -0,0 +1,83 @@ +/* cloexec.c - set or clear the close-on-exec descriptor flag + + Copyright (C) 1991, 2004-2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* The code is taken from glibc/manual/llio.texi */ + +#include + +#include "cloexec.h" + +#include +#include +#include + +/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, + or clear the flag if VALUE is false. + Return 0 on success, or -1 on error with 'errno' set. + + Note that on MingW, this function does NOT protect DESC from being + inherited into spawned children. Instead, either use dup_cloexec + followed by closing the original DESC, or use interfaces such as + open or pipe2 that accept flags like O_CLOEXEC to create DESC + non-inheritable in the first place. */ + +int +set_cloexec_flag (int desc, bool value) +{ +#ifdef F_SETFD + + int flags = fcntl (desc, F_GETFD, 0); + + if (0 <= flags) + { + int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC); + + if (flags == newflags + || fcntl (desc, F_SETFD, newflags) != -1) + return 0; + } + + return -1; + +#else /* !F_SETFD */ + + /* Use dup2 to reject invalid file descriptors; the cloexec flag + will be unaffected. */ + if (desc < 0) + { + errno = EBADF; + return -1; + } + if (dup2 (desc, desc) < 0) + /* errno is EBADF here. */ + return -1; + + /* There is nothing we can do on this kind of platform. Punt. */ + return 0; +#endif /* !F_SETFD */ +} + + +/* Duplicates a file handle FD, while marking the copy to be closed + prior to exec or spawn. Returns -1 and sets errno if FD could not + be duplicated. */ + +int +dup_cloexec (int fd) +{ + return fcntl (fd, F_DUPFD_CLOEXEC, 0); +} diff --git a/jni/parted/libgnulib/lib/close-stream.c b/jni/parted/libgnulib/lib/close-stream.c new file mode 100755 index 0000000..81094c6 --- /dev/null +++ b/jni/parted/libgnulib/lib/close-stream.c @@ -0,0 +1,77 @@ +/* Close a stream, with nicer error checking than fclose's. + + Copyright (C) 1998-2002, 2004, 2006-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#include + +#include "close-stream.h" + +#include + +#include "fpending.h" + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +/* Close STREAM. Return 0 if successful, EOF (setting errno) + otherwise. A failure might set errno to 0 if the error number + cannot be determined. + + A failure with errno set to EPIPE may or may not indicate an error + situation worth signaling to the user. See the documentation of the + close_stdout_set_ignore_EPIPE function for details. + + If a program writes *anything* to STREAM, that program should close + STREAM and make sure that it succeeds before exiting. Otherwise, + suppose that you go to the extreme of checking the return status + of every function that does an explicit write to STREAM. The last + printf can succeed in writing to the internal stream buffer, and yet + the fclose(STREAM) could still fail (due e.g., to a disk full error) + when it tries to write out that buffered data. Thus, you would be + left with an incomplete output file and the offending program would + exit successfully. Even calling fflush is not always sufficient, + since some file systems (NFS and CODA) buffer written/flushed data + until an actual close call. + + Besides, it's wasteful to check the return value from every call + that writes to STREAM -- just let the internal stream state record + the failure. That's what the ferror test is checking below. */ + +int +close_stream (FILE *stream) +{ + const bool some_pending = (__fpending (stream) != 0); + const bool prev_fail = (ferror (stream) != 0); + const bool fclose_fail = (fclose (stream) != 0); + + /* Return an error indication if there was a previous failure or if + fclose failed, with one exception: ignore an fclose failure if + there was no previous error, no data remains to be flushed, and + fclose failed with EBADF. That can happen when a program like cp + is invoked like this 'cp a b >&-' (i.e., with standard output + closed) and doesn't generate any output (hence no previous error + and nothing to be flushed). */ + + if (prev_fail || (fclose_fail && (some_pending || errno != EBADF))) + { + if (! fclose_fail) + errno = 0; + return EOF; + } + + return 0; +} diff --git a/jni/parted/libgnulib/lib/closeout.c b/jni/parted/libgnulib/lib/closeout.c new file mode 100755 index 0000000..2ffdecb --- /dev/null +++ b/jni/parted/libgnulib/lib/closeout.c @@ -0,0 +1,135 @@ +/* Close standard output and standard error, exiting with a diagnostic on error. + + Copyright (C) 1998-2002, 2004, 2006, 2008-2024 Free Software Foundation, + Inc. + + 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 3 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, see . */ + +#include + +#include "closeout.h" + +#include +#include +#include + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +#include "close-stream.h" +#include +#include "exitfail.h" +#include "quotearg.h" + +#ifndef __has_feature +# define __has_feature(a) false +#endif + +#if defined __SANITIZE_ADDRESS__ || __has_feature (address_sanitizer) +enum { SANITIZE_ADDRESS = true }; +#else +enum { SANITIZE_ADDRESS = false }; +#endif + +static const char *file_name; + +/* Set the file name to be reported in the event an error is detected + by close_stdout. */ +void +close_stdout_set_file_name (const char *file) +{ + file_name = file; +} + +static bool ignore_EPIPE /* = false */; + +/* Specify the reaction to an EPIPE error during the closing of stdout: + - If ignore = true, it shall be ignored. + - If ignore = false, it shall evoke a diagnostic, along with a nonzero + exit status. + The default is ignore = false. + + This setting matters only if the SIGPIPE signal is ignored (i.e. its + handler set to SIG_IGN) or blocked. Only particular programs need to + temporarily ignore SIGPIPE. If SIGPIPE is ignored or blocked because + it was ignored or blocked in the parent process when it created the + child process, it usually is a bug in the parent process: It is bad + practice to have SIGPIPE ignored or blocked while creating a child + process. + + EPIPE occurs when writing to a pipe or socket that has no readers now, + when SIGPIPE is ignored or blocked. + + The ignore = false setting is suitable for a scenario where it is normally + guaranteed that the pipe writer terminates before the pipe reader. In + this case, an EPIPE is an indication of a premature termination of the + pipe reader and should lead to a diagnostic and a nonzero exit status. + + The ignore = true setting is suitable for a scenario where you don't know + ahead of time whether the pipe writer or the pipe reader will terminate + first. In this case, an EPIPE is an indication that the pipe writer can + stop doing useless write() calls; this is what close_stdout does anyway. + EPIPE is part of the normal pipe/socket shutdown protocol in this case, + and should not lead to a diagnostic message. */ + +void +close_stdout_set_ignore_EPIPE (bool ignore) +{ + ignore_EPIPE = ignore; +} + +/* Close standard output. On error, issue a diagnostic and _exit + with status 'exit_failure'. + + Also close standard error. On error, _exit with status 'exit_failure'. + + Since close_stdout is commonly registered via 'atexit', POSIX + and the C standard both say that it should not call 'exit', + because the behavior is undefined if 'exit' is called more than + once. So it calls '_exit' instead of 'exit'. If close_stdout + is registered via atexit before other functions are registered, + the other functions can act before this _exit is invoked. + + Applications that use close_stdout should flush any streams + other than stdout and stderr before exiting, since the call to + _exit will bypass other buffer flushing. Applications should + be flushing and closing other streams anyway, to check for I/O + errors. Also, applications should not use tmpfile, since _exit + can bypass the removal of these files. + + It's important to detect such failures and exit nonzero because many + tools (most notably 'make' and other build-management systems) depend + on being able to detect failure in other tools via their exit status. */ + +void +close_stdout (void) +{ + if (close_stream (stdout) != 0 + && !(ignore_EPIPE && errno == EPIPE)) + { + char const *write_error = _("write error"); + if (file_name) + error (0, errno, "%s: %s", quotearg_colon (file_name), + write_error); + else + error (0, errno, "%s", write_error); + + _exit (exit_failure); + } + + /* Close stderr only if not sanitizing, as sanitizers may report to + stderr after this function returns. */ + if (!SANITIZE_ADDRESS && close_stream (stderr) != 0) + _exit (exit_failure); +} diff --git a/jni/parted/libgnulib/lib/dirname-lgpl.c b/jni/parted/libgnulib/lib/dirname-lgpl.c new file mode 100755 index 0000000..8333c0e --- /dev/null +++ b/jni/parted/libgnulib/lib/dirname-lgpl.c @@ -0,0 +1,86 @@ +/* dirname.c -- return all but the last element in a file name + + Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "dirname.h" + +#include +#include + +/* Return the length of the prefix of FILE that will be used by + dir_name. If FILE is in the working directory, this returns zero + even though 'dir_name (FILE)' will return ".". Works properly even + if there are trailing slashes (by effectively ignoring them). */ + +size_t +dir_len (char const *file) +{ + size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); + size_t length; + + /* Advance prefix_length beyond important leading slashes. */ + prefix_length += (prefix_length != 0 + ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && ISSLASH (file[prefix_length])) + : (ISSLASH (file[0]) + ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT + && ISSLASH (file[1]) && ! ISSLASH (file[2]) + ? 2 : 1)) + : 0)); + + /* Strip the basename and any redundant slashes before it. */ + for (length = last_component (file) - file; + prefix_length < length; length--) + if (! ISSLASH (file[length - 1])) + break; + return length; +} + + +/* In general, we can't use the builtin 'dirname' function if available, + since it has different meanings in different environments. + In some environments the builtin 'dirname' modifies its argument. + + Return the leading directories part of FILE, allocated with malloc. + Works properly even if there are trailing slashes (by effectively + ignoring them). Return NULL on failure. + + If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); + lstat (base_name (FILE)); } will access the same file. Likewise, + if the sequence { chdir (dir_name (FILE)); + rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE + to "foo" in the same directory FILE was in. */ + +char * +mdir_name (char const *file) +{ + size_t length = dir_len (file); + bool append_dot = (length == 0 + || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && length == FILE_SYSTEM_PREFIX_LEN (file) + && file[2] != '\0' && ! ISSLASH (file[2]))); + char *dir = malloc (length + append_dot + 1); + if (!dir) + return NULL; + memcpy (dir, file, length); + if (append_dot) + dir[length++] = '.'; + dir[length] = '\0'; + return dir; +} diff --git a/jni/parted/libgnulib/lib/dirname.c b/jni/parted/libgnulib/lib/dirname.c new file mode 100755 index 0000000..393ec1b --- /dev/null +++ b/jni/parted/libgnulib/lib/dirname.c @@ -0,0 +1,38 @@ +/* dirname.c -- return all but the last element in a file name + + Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#include + +#include "dirname.h" + +#include +#include +#include "xalloc.h" + +/* Just like mdir_name (dirname-lgpl.c), except, rather than + returning NULL upon malloc failure, here, we report the + "memory exhausted" condition and exit. */ + +char * +dir_name (char const *file) +{ + char *result = mdir_name (file); + if (!result) + xalloc_die (); + return result; +} diff --git a/jni/parted/libgnulib/lib/error.c b/jni/parted/libgnulib/lib/error.c new file mode 100755 index 0000000..6816805 --- /dev/null +++ b/jni/parted/libgnulib/lib/error.c @@ -0,0 +1,375 @@ +/* Error handler for noninteractive utilities + Copyright (C) 1990-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* Written by David MacKenzie . */ + +#if !_LIBC +# include +# define _GL_NO_INLINE_ERROR +# define __error_internal(status, err, fmt, args, flags) \ + verror (status, err, fmt, args) +# define __error_at_line_internal(status, err, file, line, fmt, args, flags) \ + verror_at_line (status, err, file, line, fmt, args) +# define error_tail(status, err, fmt, args, flags) \ + error_tail (status, err, fmt, args) +#endif + +#include + +#include +#include +#include +#include + +#if !_LIBC && ENABLE_NLS +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#ifdef _LIBC +# include +# include +# include +# include +# define mbsrtowcs __mbsrtowcs +# define USE_UNLOCKED_IO 0 +# define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b) +# define _GL_ARG_NONNULL(a) +#endif + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#ifndef _ +# define _(String) String +#endif + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called. */ +unsigned int error_message_count; + +#ifdef _LIBC +/* In the GNU C library, there is a predefined variable for this. */ + +# define program_name program_invocation_name +# include +# include +# include + +/* In GNU libc we want do not want to use the common name 'error' directly. + Instead make it a weak alias. */ +extern void __error (int status, int errnum, const char *message, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); +extern void __error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, + ...) + __attribute__ ((__format__ (__printf__, 5, 6))); +# define error __error +# define error_at_line __error_at_line + +# include +# define fflush(s) _IO_fflush (s) +# undef putc +# define putc(c, fp) _IO_putc (c, fp) + +# include + +#else /* not _LIBC */ + +# include +# include + +# if defined _WIN32 && ! defined __CYGWIN__ +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include +/* Get _get_osfhandle. */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif +# endif + +/* The gnulib override of fcntl is not needed in this file. */ +# undef fcntl + +# if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) +# ifndef HAVE_DECL_STRERROR_R +"this configure-time declaration test was not run" +# endif +# if STRERROR_R_CHAR_P +char *strerror_r (int errnum, char *buf, size_t buflen); +# else +int strerror_r (int errnum, char *buf, size_t buflen); +# endif +# endif + +# define program_name getprogname () + +# if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r +# define __strerror_r strerror_r +# endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ + +# if GNULIB_defined_verror +# undef verror +# endif +# if GNULIB_defined_verror_at_line +# undef verror_at_line +# endif +#endif /* not _LIBC */ + +#if !_LIBC +/* Return non-zero if FD is open. */ +static int +is_open (int fd) +{ +# if defined _WIN32 && ! defined __CYGWIN__ + /* On native Windows: The initial state of unassigned standard file + descriptors is that they are open but point to an INVALID_HANDLE_VALUE. + There is no fcntl, and the gnulib replacement fcntl does not support + F_GETFL. */ + return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; +# else +# ifndef F_GETFL +# error Please port fcntl to your platform +# endif + return 0 <= fcntl (fd, F_GETFL); +# endif +} +#endif + +static void +flush_stdout (void) +{ +#if !_LIBC + int stdout_fd; + +# if GNULIB_FREOPEN_SAFER + /* Use of gnulib's freopen-safer module normally ensures that + fileno (stdout) == 1 + whenever stdout is open. */ + stdout_fd = STDOUT_FILENO; +# else + /* POSIX states that fileno (stdout) after fclose is unspecified. But in + practice it is not a problem, because stdout is statically allocated and + the fd of a FILE stream is stored as a field in its allocated memory. */ + stdout_fd = fileno (stdout); +# endif + /* POSIX states that fflush (stdout) after fclose is unspecified; it + is safe in glibc, but not on all other platforms. fflush (NULL) + is always defined, but too draconian. */ + if (0 <= stdout_fd && is_open (stdout_fd)) +#endif + fflush (stdout); +} + +static void +print_errno_message (int errnum) +{ + char const *s; + +#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R + char errbuf[1024]; +# if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) + s = __strerror_r (errnum, errbuf, sizeof errbuf); +# else + if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) + s = errbuf; + else + s = 0; +# endif +#else + s = strerror (errnum); +#endif + +#if !_LIBC + if (! s) + s = _("Unknown system error"); +#endif + +#if _LIBC + __fxprintf (NULL, ": %s", s); +#else + fprintf (stderr, ": %s", s); +#endif +} + +static void _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3)) +error_tail (int status, int errnum, const char *message, va_list args, + unsigned int mode_flags) +{ +#if _LIBC + int ret = __vfxprintf (stderr, message, args, mode_flags); + if (ret < 0 && errno == ENOMEM && _IO_fwide (stderr, 0) > 0) + /* Leave a trace in case the heap allocation of the message string + failed. */ + fputws_unlocked (L"out of memory\n", stderr); +#else + vfprintf (stderr, message, args); +#endif + + ++error_message_count; + if (errnum) + print_errno_message (errnum); +#if _LIBC + __fxprintf (NULL, "\n"); +#else + putc ('\n', stderr); +#endif + fflush (stderr); + if (status) + exit (status); +} + + +/* Print the program name and error message MESSAGE, which is a printf-style + format string with optional args. + If ERRNUM is nonzero, print its corresponding system error message. + Exit with status STATUS if it is nonzero. */ +void +__error_internal (int status, int errnum, const char *message, + va_list args, unsigned int mode_flags) +{ +#if defined _LIBC + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state); +#endif + + flush_stdout (); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s: ", program_name); +#else + fprintf (stderr, "%s: ", program_name); +#endif + } + + error_tail (status, errnum, message, args, mode_flags); + +#ifdef _LIBC + _IO_funlockfile (stderr); + __pthread_setcancelstate (state, NULL); +#endif +} + +void +error (int status, int errnum, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + __error_internal (status, errnum, message, ap, 0); + va_end (ap); +} + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +int error_one_per_line; + +void +__error_at_line_internal (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, + va_list args, unsigned int mode_flags) +{ + if (error_one_per_line) + { + static const char *old_file_name; + static unsigned int old_line_number; + + if (old_line_number == line_number + && (file_name == old_file_name + || (old_file_name != NULL + && file_name != NULL + && strcmp (old_file_name, file_name) == 0))) + + /* Simply return and print nothing. */ + return; + + old_file_name = file_name; + old_line_number = line_number; + } + +#if defined _LIBC + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state); +#endif + + flush_stdout (); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s:", program_name); +#else + fprintf (stderr, "%s:", program_name); +#endif + } + +#if _LIBC + __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", + file_name, line_number); +#else + fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", + file_name, line_number); +#endif + + error_tail (status, errnum, message, args, mode_flags); + +#ifdef _LIBC + _IO_funlockfile (stderr); + __pthread_setcancelstate (state, NULL); +#endif +} + +void +error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + __error_at_line_internal (status, errnum, file_name, line_number, + message, ap, 0); + va_end (ap); +} + +#ifdef _LIBC +/* Make the weak alias. */ +# undef error +# undef error_at_line +weak_alias (__error, error) +weak_alias (__error_at_line, error_at_line) +#endif diff --git a/jni/parted/libgnulib/lib/exitfail.c b/jni/parted/libgnulib/lib/exitfail.c new file mode 100755 index 0000000..8a5962e --- /dev/null +++ b/jni/parted/libgnulib/lib/exitfail.c @@ -0,0 +1,24 @@ +/* Failure exit status + + Copyright (C) 2002-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "exitfail.h" + +#include + +int volatile exit_failure = EXIT_FAILURE; diff --git a/jni/parted/libgnulib/lib/fcntl.c b/jni/parted/libgnulib/lib/fcntl.c new file mode 100755 index 0000000..7cd3a0f --- /dev/null +++ b/jni/parted/libgnulib/lib/fcntl.c @@ -0,0 +1,629 @@ +/* Provide file descriptor control. + + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include +#include +#include + +#ifdef __KLIBC__ +# define INCL_DOS +# include +#endif + +#if defined _WIN32 && ! defined __CYGWIN__ +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include + +/* Get _get_osfhandle. */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif + +/* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ +# define OPEN_MAX_MAX 0x10000 + +/* Duplicate OLDFD into the first available slot of at least NEWFD, + which must be positive, with FLAGS determining whether the duplicate + will be inheritable. */ +static int +dupfd (int oldfd, int newfd, int flags) +{ + /* Mingw has no way to create an arbitrary fd. Iterate until all + file descriptors less than newfd are filled up. */ + HANDLE curr_process = GetCurrentProcess (); + HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd); + unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT]; + unsigned int fds_to_close_bound = 0; + int result; + BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE; + int mode; + + if (newfd < 0 || getdtablesize () <= newfd) + { + errno = EINVAL; + return -1; + } + if (old_handle == INVALID_HANDLE_VALUE + || (mode = _setmode (oldfd, O_BINARY)) == -1) + { + /* oldfd is not open, or is an unassigned standard file + descriptor. */ + errno = EBADF; + return -1; + } + _setmode (oldfd, mode); + flags |= mode; + + for (;;) + { + HANDLE new_handle; + int duplicated_fd; + unsigned int index; + + if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ + old_handle, /* SourceHandle */ + curr_process, /* TargetProcessHandle */ + (PHANDLE) &new_handle, /* TargetHandle */ + (DWORD) 0, /* DesiredAccess */ + inherit, /* InheritHandle */ + DUPLICATE_SAME_ACCESS)) /* Options */ + { + switch (GetLastError ()) + { + case ERROR_TOO_MANY_OPEN_FILES: + errno = EMFILE; + break; + case ERROR_INVALID_HANDLE: + case ERROR_INVALID_TARGET_HANDLE: + case ERROR_DIRECT_ACCESS_HANDLE: + errno = EBADF; + break; + case ERROR_INVALID_PARAMETER: + case ERROR_INVALID_FUNCTION: + case ERROR_INVALID_ACCESS: + errno = EINVAL; + break; + default: + errno = EACCES; + break; + } + result = -1; + break; + } + duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags); + if (duplicated_fd < 0) + { + CloseHandle (new_handle); + result = -1; + break; + } + if (newfd <= duplicated_fd) + { + result = duplicated_fd; + break; + } + + /* Set the bit duplicated_fd in fds_to_close[]. */ + index = (unsigned int) duplicated_fd / CHAR_BIT; + if (fds_to_close_bound <= index) + { + if (sizeof fds_to_close <= index) + /* Need to increase OPEN_MAX_MAX. */ + abort (); + memset (fds_to_close + fds_to_close_bound, '\0', + index + 1 - fds_to_close_bound); + fds_to_close_bound = index + 1; + } + fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT); + } + + /* Close the previous fds that turned out to be too small. */ + { + int saved_errno = errno; + unsigned int duplicated_fd; + + for (duplicated_fd = 0; + duplicated_fd < fds_to_close_bound * CHAR_BIT; + duplicated_fd++) + if ((fds_to_close[duplicated_fd / CHAR_BIT] + >> (duplicated_fd % CHAR_BIT)) + & 1) + close (duplicated_fd); + + errno = saved_errno; + } + +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (oldfd, result); +# endif + return result; +} +#endif /* W32 */ + +/* Forward declarations, because we '#undef fcntl' in the middle of this + compilation unit. */ +/* Our implementation of fcntl (fd, F_DUPFD, target). */ +static int rpl_fcntl_DUPFD (int fd, int target); +/* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */ +static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target); +#ifdef __KLIBC__ +/* Adds support for fcntl on directories. */ +static int klibc_fcntl (int fd, int action, /* arg */...); +#endif + + +/* Perform the specified ACTION on the file descriptor FD, possibly + using the argument ARG further described below. This replacement + handles the following actions, and forwards all others on to the + native fcntl. An unrecognized ACTION returns -1 with errno set to + EINVAL. + + F_DUPFD - duplicate FD, with int ARG being the minimum target fd. + If successful, return the duplicate, which will be inheritable; + otherwise return -1 and set errno. + + F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum + target fd. If successful, return the duplicate, which will not be + inheritable; otherwise return -1 and set errno. + + F_GETFD - ARG need not be present. If successful, return a + non-negative value containing the descriptor flags of FD (only + FD_CLOEXEC is portable, but other flags may be present); otherwise + return -1 and set errno. */ + +int +fcntl (int fd, int action, /* arg */...) +#undef fcntl +#ifdef __KLIBC__ +# define fcntl klibc_fcntl +#endif +{ + va_list arg; + int result = -1; + va_start (arg, action); + switch (action) + { + case F_DUPFD: + { + int target = va_arg (arg, int); + result = rpl_fcntl_DUPFD (fd, target); + break; + } + + case F_DUPFD_CLOEXEC: + { + int target = va_arg (arg, int); + result = rpl_fcntl_DUPFD_CLOEXEC (fd, target); + break; + } + +#if !HAVE_FCNTL + case F_GETFD: + { +# if defined _WIN32 && ! defined __CYGWIN__ + HANDLE handle = (HANDLE) _get_osfhandle (fd); + DWORD flags; + if (handle == INVALID_HANDLE_VALUE + || GetHandleInformation (handle, &flags) == 0) + errno = EBADF; + else + result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC; +# else /* !W32 */ + /* Use dup2 to reject invalid file descriptors. No way to + access this information, so punt. */ + if (0 <= dup2 (fd, fd)) + result = 0; +# endif /* !W32 */ + break; + } /* F_GETFD */ +#endif /* !HAVE_FCNTL */ + + /* Implementing F_SETFD on mingw is not trivial - there is no + API for changing the O_NOINHERIT bit on an fd, and merely + changing the HANDLE_FLAG_INHERIT bit on the underlying handle + can lead to odd state. It may be possible by duplicating the + handle, using _open_osfhandle with the right flags, then + using dup2 to move the duplicate onto the original, but that + is not supported for now. */ + + default: + { +#if HAVE_FCNTL + switch (action) + { + #ifdef F_BARRIERFSYNC /* macOS */ + case F_BARRIERFSYNC: + #endif + #ifdef F_CHKCLEAN /* macOS */ + case F_CHKCLEAN: + #endif + #ifdef F_CLOSEM /* NetBSD, HP-UX */ + case F_CLOSEM: + #endif + #ifdef F_FLUSH_DATA /* macOS */ + case F_FLUSH_DATA: + #endif + #ifdef F_FREEZE_FS /* macOS */ + case F_FREEZE_FS: + #endif + #ifdef F_FULLFSYNC /* macOS */ + case F_FULLFSYNC: + #endif + #ifdef F_GETCONFINED /* macOS */ + case F_GETCONFINED: + #endif + #ifdef F_GETDEFAULTPROTLEVEL /* macOS */ + case F_GETDEFAULTPROTLEVEL: + #endif + #ifdef F_GETFD /* POSIX */ + case F_GETFD: + #endif + #ifdef F_GETFL /* POSIX */ + case F_GETFL: + #endif + #ifdef F_GETLEASE /* Linux */ + case F_GETLEASE: + #endif + #ifdef F_GETNOSIGPIPE /* macOS */ + case F_GETNOSIGPIPE: + #endif + #ifdef F_GETOWN /* POSIX */ + case F_GETOWN: + #endif + #ifdef F_GETPIPE_SZ /* Linux */ + case F_GETPIPE_SZ: + #endif + #ifdef F_GETPROTECTIONCLASS /* macOS */ + case F_GETPROTECTIONCLASS: + #endif + #ifdef F_GETPROTECTIONLEVEL /* macOS */ + case F_GETPROTECTIONLEVEL: + #endif + #ifdef F_GET_SEALS /* Linux */ + case F_GET_SEALS: + #endif + #ifdef F_GETSIG /* Linux */ + case F_GETSIG: + #endif + #ifdef F_MAXFD /* NetBSD */ + case F_MAXFD: + #endif + #ifdef F_RECYCLE /* macOS */ + case F_RECYCLE: + #endif + #ifdef F_SETFIFOENH /* HP-UX */ + case F_SETFIFOENH: + #endif + #ifdef F_THAW_FS /* macOS */ + case F_THAW_FS: + #endif + /* These actions take no argument. */ + result = fcntl (fd, action); + break; + + #ifdef F_ADD_SEALS /* Linux */ + case F_ADD_SEALS: + #endif + #ifdef F_BADFD /* Solaris */ + case F_BADFD: + #endif + #ifdef F_CHECK_OPENEVT /* macOS */ + case F_CHECK_OPENEVT: + #endif + #ifdef F_DUP2FD /* FreeBSD, AIX, Solaris */ + case F_DUP2FD: + #endif + #ifdef F_DUP2FD_CLOEXEC /* FreeBSD, Solaris */ + case F_DUP2FD_CLOEXEC: + #endif + #ifdef F_DUP2FD_CLOFORK /* Solaris */ + case F_DUP2FD_CLOFORK: + #endif + #ifdef F_DUPFD /* POSIX */ + case F_DUPFD: + #endif + #ifdef F_DUPFD_CLOEXEC /* POSIX */ + case F_DUPFD_CLOEXEC: + #endif + #ifdef F_DUPFD_CLOFORK /* Solaris */ + case F_DUPFD_CLOFORK: + #endif + #ifdef F_GETXFL /* Solaris */ + case F_GETXFL: + #endif + #ifdef F_GLOBAL_NOCACHE /* macOS */ + case F_GLOBAL_NOCACHE: + #endif + #ifdef F_MAKECOMPRESSED /* macOS */ + case F_MAKECOMPRESSED: + #endif + #ifdef F_MOVEDATAEXTENTS /* macOS */ + case F_MOVEDATAEXTENTS: + #endif + #ifdef F_NOCACHE /* macOS */ + case F_NOCACHE: + #endif + #ifdef F_NODIRECT /* macOS */ + case F_NODIRECT: + #endif + #ifdef F_NOTIFY /* Linux */ + case F_NOTIFY: + #endif + #ifdef F_OPLKACK /* IRIX */ + case F_OPLKACK: + #endif + #ifdef F_OPLKREG /* IRIX */ + case F_OPLKREG: + #endif + #ifdef F_RDAHEAD /* macOS */ + case F_RDAHEAD: + #endif + #ifdef F_SETBACKINGSTORE /* macOS */ + case F_SETBACKINGSTORE: + #endif + #ifdef F_SETCONFINED /* macOS */ + case F_SETCONFINED: + #endif + #ifdef F_SETFD /* POSIX */ + case F_SETFD: + #endif + #ifdef F_SETFL /* POSIX */ + case F_SETFL: + #endif + #ifdef F_SETLEASE /* Linux */ + case F_SETLEASE: + #endif + #ifdef F_SETNOSIGPIPE /* macOS */ + case F_SETNOSIGPIPE: + #endif + #ifdef F_SETOWN /* POSIX */ + case F_SETOWN: + #endif + #ifdef F_SETPIPE_SZ /* Linux */ + case F_SETPIPE_SZ: + #endif + #ifdef F_SETPROTECTIONCLASS /* macOS */ + case F_SETPROTECTIONCLASS: + #endif + #ifdef F_SETSIG /* Linux */ + case F_SETSIG: + #endif + #ifdef F_SINGLE_WRITER /* macOS */ + case F_SINGLE_WRITER: + #endif + /* These actions take an 'int' argument. */ + { + int x = va_arg (arg, int); + result = fcntl (fd, action, x); + } + break; + + default: + /* Other actions take a pointer argument. */ + { + void *p = va_arg (arg, void *); + result = fcntl (fd, action, p); + } + break; + } +#else + errno = EINVAL; +#endif + break; + } + } + va_end (arg); + return result; +} + +static int +rpl_fcntl_DUPFD (int fd, int target) +{ + int result; +#if !HAVE_FCNTL + result = dupfd (fd, target, 0); +#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR + /* Detect invalid target; needed for cygwin 1.5.x. */ + if (target < 0 || getdtablesize () <= target) + { + result = -1; + errno = EINVAL; + } + else + { + /* Haiku alpha 2 loses fd flags on original. */ + int flags = fcntl (fd, F_GETFD); + if (flags < 0) + result = -1; + else + { + result = fcntl (fd, F_DUPFD, target); + if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) + { + int saved_errno = errno; + close (result); + result = -1; + errno = saved_errno; + } +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif + } + } +#else + result = fcntl (fd, F_DUPFD, target); +#endif + return result; +} + +static int +rpl_fcntl_DUPFD_CLOEXEC (int fd, int target) +{ + int result; +#if !HAVE_FCNTL + result = dupfd (fd, target, O_CLOEXEC); +#else /* HAVE_FCNTL */ +# if defined __NetBSD__ || defined __HAIKU__ + /* On NetBSD 9.0, the system fcntl (fd, F_DUPFD_CLOEXEC, target) + has only the same effect as fcntl (fd, F_DUPFD, target). */ + /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets + the FD_CLOEXEC flag on fd, not on target. Therefore avoid the + system fcntl in this case. */ +# define have_dupfd_cloexec -1 +# else + /* Try the system call first, if the headers claim it exists + (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we + may be running with a glibc that has the macro but with an + older kernel that does not support it. Cache the + information on whether the system call really works, but + avoid caching failure if the corresponding F_DUPFD fails + for any reason. 0 = unknown, 1 = yes, -1 = no. */ + static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; + if (0 <= have_dupfd_cloexec) + { + result = fcntl (fd, F_DUPFD_CLOEXEC, target); + if (0 <= result || errno != EINVAL) + { + have_dupfd_cloexec = 1; +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif + } + else + { + result = rpl_fcntl_DUPFD (fd, target); + if (result >= 0) + have_dupfd_cloexec = -1; + } + } + else +# endif + result = rpl_fcntl_DUPFD (fd, target); + if (0 <= result && have_dupfd_cloexec == -1) + { + int flags = fcntl (result, F_GETFD); + if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) + { + int saved_errno = errno; + close (result); + errno = saved_errno; + result = -1; + } + } +#endif /* HAVE_FCNTL */ + return result; +} + +#undef fcntl + +#ifdef __KLIBC__ + +static int +klibc_fcntl (int fd, int action, /* arg */...) +{ + va_list arg_ptr; + int arg; + struct stat sbuf; + int result; + + va_start (arg_ptr, action); + arg = va_arg (arg_ptr, int); + result = fcntl (fd, action, arg); + /* EPERM for F_DUPFD, ENOTSUP for others */ + if (result == -1 && (errno == EPERM || errno == ENOTSUP) + && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) + { + ULONG ulMode; + + switch (action) + { + case F_DUPFD: + /* Find available fd */ + while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) + arg++; + + result = dup2 (fd, arg); + break; + + /* Using underlying APIs is right ? */ + case F_GETFD: + if (DosQueryFHState (fd, &ulMode)) + break; + + result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; + break; + + case F_SETFD: + if (arg & ~FD_CLOEXEC) + break; + + if (DosQueryFHState (fd, &ulMode)) + break; + + if (arg & FD_CLOEXEC) + ulMode |= OPEN_FLAGS_NOINHERIT; + else + ulMode &= ~OPEN_FLAGS_NOINHERIT; + + /* Filter supported flags. */ + ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR + | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); + + if (DosSetFHState (fd, ulMode)) + break; + + result = 0; + break; + + case F_GETFL: + result = 0; + break; + + case F_SETFL: + if (arg != 0) + break; + + result = 0; + break; + + default: + errno = EINVAL; + break; + } + } + + va_end (arg_ptr); + + return result; +} + +#endif diff --git a/jni/parted/libgnulib/lib/free.c b/jni/parted/libgnulib/lib/free.c new file mode 100755 index 0000000..2f0c40b --- /dev/null +++ b/jni/parted/libgnulib/lib/free.c @@ -0,0 +1,53 @@ +/* Make free() preserve errno. + + Copyright (C) 2003, 2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* written by Paul Eggert */ + +#include + +/* Specification. */ +#include + +/* A function definition is only needed if HAVE_FREE_POSIX is not defined. */ +#if !HAVE_FREE_POSIX + +# include + +void +rpl_free (void *p) +# undef free +{ +# if defined __GNUC__ && !defined __clang__ + /* An invalid GCC optimization + + would optimize away the assignments in the code below, when link-time + optimization (LTO) is enabled. Make the code more complicated, so that + GCC does not grok how to optimize it. */ + int err[2]; + err[0] = errno; + err[1] = errno; + errno = 0; + free (p); + errno = err[errno == 0]; +# else + int err = errno; + free (p); + errno = err; +# endif +} + +#endif diff --git a/jni/parted/libgnulib/lib/getdtablesize.c b/jni/parted/libgnulib/lib/getdtablesize.c new file mode 100755 index 0000000..762c100 --- /dev/null +++ b/jni/parted/libgnulib/lib/getdtablesize.c @@ -0,0 +1,124 @@ +/* getdtablesize() function: Return maximum possible file descriptor value + 1. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if defined _WIN32 && ! defined __CYGWIN__ + +# include + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +# endif + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +_setmaxstdio_nothrow (int newmax) +{ + int result; + + TRY_MSVC_INVAL + { + result = _setmaxstdio (newmax); + } + CATCH_MSVC_INVAL + { + result = -1; + } + DONE_MSVC_INVAL; + + return result; +} +# else +# define _setmaxstdio_nothrow _setmaxstdio +# endif + +/* Cache for the previous getdtablesize () result. Safe to cache because + Windows also lacks setrlimit. */ +static int dtablesize; + +int +getdtablesize (void) +{ + if (dtablesize == 0) + { + /* We are looking for the number N such that the valid file descriptors + are 0..N-1. It can be obtained through a loop as follows: + { + int fd; + for (fd = 3; fd < 65536; fd++) + if (dup2 (0, fd) == -1) + break; + return fd; + } + On Windows XP, the result is 2048. + The drawback of this loop is that it allocates memory for a libc + internal array that is never freed. + + The number N can also be obtained as the upper bound for + _getmaxstdio (). _getmaxstdio () returns the maximum number of open + FILE objects. The sanity check in _setmaxstdio reveals the maximum + number of file descriptors. This too allocates memory, but it is + freed when we call _setmaxstdio with the original value. */ + int orig_max_stdio = _getmaxstdio (); + unsigned int bound; + for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2) + ; + _setmaxstdio_nothrow (orig_max_stdio); + dtablesize = bound; + } + return dtablesize; +} + +#else + +# include +# include + +# ifndef RLIM_SAVED_CUR +# define RLIM_SAVED_CUR RLIM_INFINITY +# endif +# ifndef RLIM_SAVED_MAX +# define RLIM_SAVED_MAX RLIM_INFINITY +# endif + +# ifdef __CYGWIN__ + /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it + hits the compile-time constant hard limit of 3200. We might as + well just report the hard limit. */ +# define rlim_cur rlim_max +# endif + +int +getdtablesize (void) +{ + struct rlimit lim; + + if (getrlimit (RLIMIT_NOFILE, &lim) == 0 + && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX + && lim.rlim_cur != RLIM_INFINITY + && lim.rlim_cur != RLIM_SAVED_CUR + && lim.rlim_cur != RLIM_SAVED_MAX) + return lim.rlim_cur; + + return INT_MAX; +} + +#endif diff --git a/jni/parted/libgnulib/lib/hard-locale.c b/jni/parted/libgnulib/lib/hard-locale.c new file mode 100755 index 0000000..653c580 --- /dev/null +++ b/jni/parted/libgnulib/lib/hard-locale.c @@ -0,0 +1,47 @@ +/* hard-locale.c -- Determine whether a locale is hard. + + Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "hard-locale.h" + +#include +#include +#include + +bool +hard_locale (int category) +{ + char locale[SETLOCALE_NULL_MAX]; + + if (setlocale_null_r (category, locale, sizeof (locale))) + return false; + + if (!(strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0)) + return true; + +#if defined __ANDROID__ + /* On Android 5.0 or newer, it is possible to set a locale that has the same + name as the "C" locale but in fact uses UTF-8 encoding. Cf. test case 2 in + . */ + if (MB_CUR_MAX > 1) + return true; +#endif + + return false; +} diff --git a/jni/parted/libgnulib/lib/ialloc.c b/jni/parted/libgnulib/lib/ialloc.c new file mode 100755 index 0000000..8564a15 --- /dev/null +++ b/jni/parted/libgnulib/lib/ialloc.c @@ -0,0 +1,21 @@ +/* malloc with idx_t rather than size_t + + Copyright 2021-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#define IALLOC_INLINE _GL_EXTERN_INLINE +#include "ialloc.h" diff --git a/jni/parted/libgnulib/lib/iswctype.c b/jni/parted/libgnulib/lib/iswctype.c new file mode 100755 index 0000000..f4e6f01 --- /dev/null +++ b/jni/parted/libgnulib/lib/iswctype.c @@ -0,0 +1,36 @@ +/* Test whether a wide character has a given property. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if GNULIB_defined_wint_t && !GNULIB_defined_wctype_t + +int +iswctype (wint_t wc, wctype_t desc) +# undef iswctype +{ + return ((wchar_t) wc == wc ? iswctype ((wchar_t) wc, desc) : 0); +} + +#else + +# include "iswctype-impl.h" + +#endif diff --git a/jni/parted/libgnulib/lib/iswdigit.c b/jni/parted/libgnulib/lib/iswdigit.c new file mode 100755 index 0000000..57363ab --- /dev/null +++ b/jni/parted/libgnulib/lib/iswdigit.c @@ -0,0 +1,26 @@ +/* Test wide character for being a digit. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +int +iswdigit (wint_t wc) +{ + return wc >= '0' && wc <= '9'; +} diff --git a/jni/parted/libgnulib/lib/iswpunct.c b/jni/parted/libgnulib/lib/iswpunct.c new file mode 100755 index 0000000..c7cb28b --- /dev/null +++ b/jni/parted/libgnulib/lib/iswpunct.c @@ -0,0 +1,33 @@ +/* Test wide character for being a punctuation or symbol character. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +int +iswpunct (wint_t wc) +#undef iswpunct +{ +#if defined __ANDROID__ + if ((unsigned int) wc < 128) + return ispunct ((unsigned int) wc); +#endif + return iswpunct (wc); +} diff --git a/jni/parted/libgnulib/lib/iswxdigit.c b/jni/parted/libgnulib/lib/iswxdigit.c new file mode 100755 index 0000000..d32e3b0 --- /dev/null +++ b/jni/parted/libgnulib/lib/iswxdigit.c @@ -0,0 +1,33 @@ +/* Test wide character for being a hexadecimal digit. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +int +iswxdigit (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') +#if 'A' == 0x41 && 'a' == 0x61 + /* Optimization, assuming ASCII */ + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F') +#else + || (wc >= 'A' && wc <= 'F') || (wc >= 'a' && wc <= 'f') +#endif + ); +} diff --git a/jni/parted/libgnulib/lib/localcharset.c b/jni/parted/libgnulib/lib/localcharset.c new file mode 100755 index 0000000..93c4baa --- /dev/null +++ b/jni/parted/libgnulib/lib/localcharset.c @@ -0,0 +1,1159 @@ +/* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2006, 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "localcharset.h" + +#include +#include +#include +#include + +#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET +# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ +#endif + +#if defined _WIN32 && !defined __CYGWIN__ +# define WINDOWS_NATIVE +# include +#endif + +#if defined __EMX__ +/* Assume EMX program runs on OS/2, even if compiled under DOS. */ +# ifndef OS2 +# define OS2 +# endif +#endif + +#if !defined WINDOWS_NATIVE +# if HAVE_LANGINFO_CODESET +# include +# else +# if 0 /* see comment regarding use of setlocale(), below */ +# include +# endif +# endif +# ifdef __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +# endif +#elif defined WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include + /* For the use of setlocale() below, the Gnulib override in setlocale.c is + not needed; see the platform lists in setlocale_null.m4. */ +# undef setlocale +#endif +#if defined OS2 +# define INCL_DOS +# include +#endif + +/* For MB_CUR_MAX_L */ +#if defined DARWIN7 +# include +#endif + + +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 + +/* On these platforms, we use a mapping from non-canonical encoding name + to GNU canonical encoding name. */ + +/* With glibc-2.1 or newer, we don't need any canonicalization, + because glibc has iconv and both glibc and libiconv support all + GNU canonical names directly. */ +# if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__) + +struct table_entry +{ + const char alias[11+1]; + const char canonical[11+1]; +}; + +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry alias_table[] = + { +# if defined __FreeBSD__ /* FreeBSD */ + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + { "Big5", "BIG5" }, + { "C", "ASCII" }, + /*{ "CP1131", "CP1131" },*/ + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + /*{ "GBK", "GBK" },*/ + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + { "SJIS", "SHIFT_JIS" }, + { "US-ASCII", "ASCII" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined __NetBSD__ /* NetBSD */ + { "646", "ASCII" }, + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + /*{ "PT154", "PT154" },*/ + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __OpenBSD__ /* OpenBSD */ + { "646", "ASCII" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "US-ASCII", "ASCII" } +# define alias_table_defined +# endif +# if defined __APPLE__ && defined __MACH__ /* Mac OS X */ + /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is + useless: + - It returns the empty string when LANG is set to a locale of the + form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 + LC_CTYPE file. + - The environment variables LANG, LC_CTYPE, LC_ALL are not set by + the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. + - The documentation says: + "... all code that calls BSD system routines should ensure + that the const *char parameters of these routines are in UTF-8 + encoding. All BSD system functions expect their string + parameters to be in UTF-8 encoding and nothing else." + It also says + "An additional caveat is that string parameters for files, + paths, and other file-system entities must be in canonical + UTF-8. In a canonical UTF-8 Unicode string, all decomposable + characters are decomposed ..." + but this is not true: You can pass non-decomposed UTF-8 strings + to file system functions, and it is the OS which will convert + them to decomposed UTF-8 before accessing the file system. + - The Apple Terminal application displays UTF-8 by default. + - However, other applications are free to use different encodings: + - xterm uses ISO-8859-1 by default. + - TextEdit uses MacRoman by default. + We prefer UTF-8 over decomposed UTF-8-MAC because one should + minimize the use of decomposed Unicode. Unfortunately, through the + Darwin file system, decomposed UTF-8 strings are leaked into user + space nevertheless. + Then there are also the locales with encodings other than US-ASCII + and UTF-8. These locales can be occasionally useful to users (e.g. + when grepping through ISO-8859-1 encoded text files), when all their + file names are in US-ASCII. + */ + { "ARMSCII-8", "ARMSCII-8" }, + { "Big5", "BIG5" }, + { "Big5HKSCS", "BIG5-HKSCS" }, + { "CP1131", "CP1131" }, + { "CP1251", "CP1251" }, + { "CP866", "CP866" }, + { "CP949", "CP949" }, + { "GB18030", "GB18030" }, + { "GB2312", "GB2312" }, + { "GBK", "GBK" }, + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KOI8-R", "KOI8-R" }, + { "KOI8-U", "KOI8-U" }, + { "PT154", "PT154" }, + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined _AIX /* AIX */ + /*{ "GBK", "GBK" },*/ + { "IBM-1046", "CP1046" }, + { "IBM-1124", "CP1124" }, + { "IBM-1129", "CP1129" }, + { "IBM-1252", "CP1252" }, + { "IBM-850", "CP850" }, + { "IBM-856", "CP856" }, + { "IBM-921", "ISO-8859-13" }, + { "IBM-922", "CP922" }, + { "IBM-932", "CP932" }, + { "IBM-943", "CP943" }, + { "IBM-eucCN", "GB2312" }, + { "IBM-eucJP", "EUC-JP" }, + { "IBM-eucKR", "EUC-KR" }, + { "IBM-eucTW", "EUC-TW" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "TIS-620", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" } +# define alias_table_defined +# endif +# if defined __hpux /* HP-UX */ + { "SJIS", "SHIFT_JIS" }, + { "arabic8", "HP-ARABIC8" }, + { "big5", "BIG5" }, + { "cp1251", "CP1251" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "gb18030", "GB18030" }, + { "greek8", "HP-GREEK8" }, + { "hebrew8", "HP-HEBREW8" }, + { "hkbig5", "BIG5-HKSCS" }, + { "hp15CN", "GB2312" }, + { "iso88591", "ISO-8859-1" }, + { "iso885913", "ISO-8859-13" }, + { "iso885915", "ISO-8859-15" }, + { "iso88592", "ISO-8859-2" }, + { "iso88594", "ISO-8859-4" }, + { "iso88595", "ISO-8859-5" }, + { "iso88596", "ISO-8859-6" }, + { "iso88597", "ISO-8859-7" }, + { "iso88598", "ISO-8859-8" }, + { "iso88599", "ISO-8859-9" }, + { "kana8", "HP-KANA8" }, + { "koi8r", "KOI8-R" }, + { "roman8", "HP-ROMAN8" }, + { "tis620", "TIS-620" }, + { "turkish8", "HP-TURKISH8" }, + { "utf8", "UTF-8" } +# define alias_table_defined +# endif +# if defined __sgi /* IRIX */ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __osf__ /* OSF/1 */ + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KSC5601", "CP949" }, + { "SJIS", "SHIFT_JIS" }, + { "TACTIS", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" }, + { "cp850", "CP850" }, + { "dechanyu", "DEC-HANYU" }, + { "dechanzi", "GB2312" }, + { "deckanji", "DEC-KANJI" }, + { "deckorean", "EUC-KR" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "sdeckanji", "EUC-JP" } +# define alias_table_defined +# endif +# if defined __sun /* Solaris */ + { "5601", "EUC-KR" }, + { "646", "ASCII" }, + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + { "GB18030", "GB18030" }, + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-11", "TIS-620" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-3", "ISO-8859-3" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "PCK", "SHIFT_JIS" }, + { "TIS620.2533", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "ansi-1251", "CP1251" }, + { "cns11643", "EUC-TW" }, + { "eucJP", "EUC-JP" }, + { "gb2312", "GB2312" }, + { "koi8-r", "KOI8-R" } +# define alias_table_defined +# endif +# if defined __minix /* Minix */ + { "646", "ASCII" } +# define alias_table_defined +# endif +# if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */ + { "CP1361", "JOHAB" }, + { "CP20127", "ASCII" }, + { "CP20866", "KOI8-R" }, + { "CP20936", "GB2312" }, + { "CP21866", "KOI8-RU" }, + { "CP28591", "ISO-8859-1" }, + { "CP28592", "ISO-8859-2" }, + { "CP28593", "ISO-8859-3" }, + { "CP28594", "ISO-8859-4" }, + { "CP28595", "ISO-8859-5" }, + { "CP28596", "ISO-8859-6" }, + { "CP28597", "ISO-8859-7" }, + { "CP28598", "ISO-8859-8" }, + { "CP28599", "ISO-8859-9" }, + { "CP28605", "ISO-8859-15" }, + { "CP38598", "ISO-8859-8" }, + { "CP51932", "EUC-JP" }, + { "CP51936", "GB2312" }, + { "CP51949", "EUC-KR" }, + { "CP51950", "EUC-TW" }, + { "CP54936", "GB18030" }, + { "CP65001", "UTF-8" }, + { "CP936", "GBK" } +# define alias_table_defined +# endif +# if defined OS2 /* OS/2 */ + /* The list of encodings is taken from "List of OS/2 Codepages" + by Alex Taylor: + . + See also "__convcp() of kLIBC": + . */ + { "CP1004", "CP1252" }, + /*{ "CP1041", "CP943" },*/ + /*{ "CP1088", "CP949" },*/ + { "CP1089", "ISO-8859-6" }, + /*{ "CP1114", "CP950" },*/ + /*{ "CP1115", "GB2312" },*/ + { "CP1208", "UTF-8" }, + /*{ "CP1380", "GB2312" },*/ + { "CP1381", "GB2312" }, + { "CP1383", "GB2312" }, + { "CP1386", "GBK" }, + /*{ "CP301", "CP943" },*/ + { "CP3372", "EUC-JP" }, + { "CP4946", "CP850" }, + /*{ "CP5048", "JIS_X0208-1990" },*/ + /*{ "CP5049", "JIS_X0212-1990" },*/ + /*{ "CP5067", "KS_C_5601-1987" },*/ + { "CP813", "ISO-8859-7" }, + { "CP819", "ISO-8859-1" }, + { "CP878", "KOI8-R" }, + /*{ "CP897", "CP943" },*/ + { "CP912", "ISO-8859-2" }, + { "CP913", "ISO-8859-3" }, + { "CP914", "ISO-8859-4" }, + { "CP915", "ISO-8859-5" }, + { "CP916", "ISO-8859-8" }, + { "CP920", "ISO-8859-9" }, + { "CP921", "ISO-8859-13" }, + { "CP923", "ISO-8859-15" }, + /*{ "CP941", "CP943" },*/ + /*{ "CP947", "CP950" },*/ + /*{ "CP951", "CP949" },*/ + /*{ "CP952", "JIS_X0208-1990" },*/ + /*{ "CP953", "JIS_X0212-1990" },*/ + { "CP954", "EUC-JP" }, + { "CP964", "EUC-TW" }, + { "CP970", "EUC-KR" }, + /*{ "CP971", "KS_C_5601-1987" },*/ + { "IBM-1004", "CP1252" }, + /*{ "IBM-1006", "?" },*/ + /*{ "IBM-1008", "?" },*/ + /*{ "IBM-1041", "CP943" },*/ + /*{ "IBM-1051", "?" },*/ + /*{ "IBM-1088", "CP949" },*/ + { "IBM-1089", "ISO-8859-6" }, + /*{ "IBM-1098", "?" },*/ + /*{ "IBM-1114", "CP950" },*/ + /*{ "IBM-1115", "GB2312" },*/ + /*{ "IBM-1116", "?" },*/ + /*{ "IBM-1117", "?" },*/ + /*{ "IBM-1118", "?" },*/ + /*{ "IBM-1119", "?" },*/ + { "IBM-1124", "CP1124" }, + { "IBM-1125", "CP1125" }, + { "IBM-1131", "CP1131" }, + { "IBM-1208", "UTF-8" }, + { "IBM-1250", "CP1250" }, + { "IBM-1251", "CP1251" }, + { "IBM-1252", "CP1252" }, + { "IBM-1253", "CP1253" }, + { "IBM-1254", "CP1254" }, + { "IBM-1255", "CP1255" }, + { "IBM-1256", "CP1256" }, + { "IBM-1257", "CP1257" }, + /*{ "IBM-1275", "?" },*/ + /*{ "IBM-1276", "?" },*/ + /*{ "IBM-1277", "?" },*/ + /*{ "IBM-1280", "?" },*/ + /*{ "IBM-1281", "?" },*/ + /*{ "IBM-1282", "?" },*/ + /*{ "IBM-1283", "?" },*/ + /*{ "IBM-1380", "GB2312" },*/ + { "IBM-1381", "GB2312" }, + { "IBM-1383", "GB2312" }, + { "IBM-1386", "GBK" }, + /*{ "IBM-301", "CP943" },*/ + { "IBM-3372", "EUC-JP" }, + { "IBM-367", "ASCII" }, + { "IBM-437", "CP437" }, + { "IBM-4946", "CP850" }, + /*{ "IBM-5048", "JIS_X0208-1990" },*/ + /*{ "IBM-5049", "JIS_X0212-1990" },*/ + /*{ "IBM-5067", "KS_C_5601-1987" },*/ + { "IBM-813", "ISO-8859-7" }, + { "IBM-819", "ISO-8859-1" }, + { "IBM-850", "CP850" }, + /*{ "IBM-851", "?" },*/ + { "IBM-852", "CP852" }, + { "IBM-855", "CP855" }, + { "IBM-856", "CP856" }, + { "IBM-857", "CP857" }, + /*{ "IBM-859", "?" },*/ + { "IBM-860", "CP860" }, + { "IBM-861", "CP861" }, + { "IBM-862", "CP862" }, + { "IBM-863", "CP863" }, + { "IBM-864", "CP864" }, + { "IBM-865", "CP865" }, + { "IBM-866", "CP866" }, + /*{ "IBM-868", "?" },*/ + { "IBM-869", "CP869" }, + { "IBM-874", "CP874" }, + { "IBM-878", "KOI8-R" }, + /*{ "IBM-895", "?" },*/ + /*{ "IBM-897", "CP943" },*/ + /*{ "IBM-907", "?" },*/ + /*{ "IBM-909", "?" },*/ + { "IBM-912", "ISO-8859-2" }, + { "IBM-913", "ISO-8859-3" }, + { "IBM-914", "ISO-8859-4" }, + { "IBM-915", "ISO-8859-5" }, + { "IBM-916", "ISO-8859-8" }, + { "IBM-920", "ISO-8859-9" }, + { "IBM-921", "ISO-8859-13" }, + { "IBM-922", "CP922" }, + { "IBM-923", "ISO-8859-15" }, + { "IBM-932", "CP932" }, + /*{ "IBM-941", "CP943" },*/ + /*{ "IBM-942", "?" },*/ + { "IBM-943", "CP943" }, + /*{ "IBM-947", "CP950" },*/ + { "IBM-949", "CP949" }, + { "IBM-950", "CP950" }, + /*{ "IBM-951", "CP949" },*/ + /*{ "IBM-952", "JIS_X0208-1990" },*/ + /*{ "IBM-953", "JIS_X0212-1990" },*/ + { "IBM-954", "EUC-JP" }, + /*{ "IBM-955", "?" },*/ + { "IBM-964", "EUC-TW" }, + { "IBM-970", "EUC-KR" }, + /*{ "IBM-971", "KS_C_5601-1987" },*/ + { "IBM-eucCN", "GB2312" }, + { "IBM-eucJP", "EUC-JP" }, + { "IBM-eucKR", "EUC-KR" }, + { "IBM-eucTW", "EUC-TW" }, + { "IBM33722", "EUC-JP" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-3", "ISO-8859-3" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + /*{ "JISX0201-1976", "JISX0201-1976" },*/ + /*{ "JISX0208-1978", "?" },*/ + /*{ "JISX0208-1983", "JIS_X0208-1983" },*/ + /*{ "JISX0208-1990", "JIS_X0208-1990" },*/ + /*{ "JISX0212-1990", "JIS_X0212-1990" },*/ + /*{ "KSC5601-1987", "KS_C_5601-1987" },*/ + { "SJIS-1", "CP943" }, + { "SJIS-2", "CP943" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW-1993", "EUC-TW" } +# define alias_table_defined +# endif +# if defined VMS /* OpenVMS */ + /* The list of encodings is taken from the OpenVMS 7.3-1 documentation + "Compaq C Run-Time Library Reference Manual for OpenVMS systems" + section 10.7 "Handling Different Character Sets". */ + { "DECHANYU", "DEC-HANYU" }, + { "DECHANZI", "GB2312" }, + { "DECKANJI", "DEC-KANJI" }, + { "DECKOREAN", "EUC-KR" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "SDECKANJI", "EUC-JP" }, + { "SJIS", "SHIFT_JIS" }, + { "eucJP", "EUC-JP" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# ifndef alias_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; + +# endif + +#else + +/* On these platforms, we use a mapping from locale name to GNU canonical + encoding name. */ + +struct table_entry +{ + const char locale[17+1]; + const char canonical[11+1]; +}; + +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry locale_table[] = + { +# if defined __FreeBSD__ /* FreeBSD 4.2 */ + { "cs_CZ.ISO_8859-2", "ISO-8859-2" }, + { "da_DK.DIS_8859-15", "ISO-8859-15" }, + { "da_DK.ISO_8859-1", "ISO-8859-1" }, + { "de_AT.DIS_8859-15", "ISO-8859-15" }, + { "de_AT.ISO_8859-1", "ISO-8859-1" }, + { "de_CH.DIS_8859-15", "ISO-8859-15" }, + { "de_CH.ISO_8859-1", "ISO-8859-1" }, + { "de_DE.DIS_8859-15", "ISO-8859-15" }, + { "de_DE.ISO_8859-1", "ISO-8859-1" }, + { "en_AU.DIS_8859-15", "ISO-8859-15" }, + { "en_AU.ISO_8859-1", "ISO-8859-1" }, + { "en_CA.DIS_8859-15", "ISO-8859-15" }, + { "en_CA.ISO_8859-1", "ISO-8859-1" }, + { "en_GB.DIS_8859-15", "ISO-8859-15" }, + { "en_GB.ISO_8859-1", "ISO-8859-1" }, + { "en_US.DIS_8859-15", "ISO-8859-15" }, + { "en_US.ISO_8859-1", "ISO-8859-1" }, + { "es_ES.DIS_8859-15", "ISO-8859-15" }, + { "es_ES.ISO_8859-1", "ISO-8859-1" }, + { "fi_FI.DIS_8859-15", "ISO-8859-15" }, + { "fi_FI.ISO_8859-1", "ISO-8859-1" }, + { "fr_BE.DIS_8859-15", "ISO-8859-15" }, + { "fr_BE.ISO_8859-1", "ISO-8859-1" }, + { "fr_CA.DIS_8859-15", "ISO-8859-15" }, + { "fr_CA.ISO_8859-1", "ISO-8859-1" }, + { "fr_CH.DIS_8859-15", "ISO-8859-15" }, + { "fr_CH.ISO_8859-1", "ISO-8859-1" }, + { "fr_FR.DIS_8859-15", "ISO-8859-15" }, + { "fr_FR.ISO_8859-1", "ISO-8859-1" }, + { "hr_HR.ISO_8859-2", "ISO-8859-2" }, + { "hu_HU.ISO_8859-2", "ISO-8859-2" }, + { "is_IS.DIS_8859-15", "ISO-8859-15" }, + { "is_IS.ISO_8859-1", "ISO-8859-1" }, + { "it_CH.DIS_8859-15", "ISO-8859-15" }, + { "it_CH.ISO_8859-1", "ISO-8859-1" }, + { "it_IT.DIS_8859-15", "ISO-8859-15" }, + { "it_IT.ISO_8859-1", "ISO-8859-1" }, + { "ja_JP.EUC", "EUC-JP" }, + { "ja_JP.SJIS", "SHIFT_JIS" }, + { "ja_JP.Shift_JIS", "SHIFT_JIS" }, + { "ko_KR.EUC", "EUC-KR" }, + { "la_LN.ASCII", "ASCII" }, + { "la_LN.DIS_8859-15", "ISO-8859-15" }, + { "la_LN.ISO_8859-1", "ISO-8859-1" }, + { "la_LN.ISO_8859-2", "ISO-8859-2" }, + { "la_LN.ISO_8859-4", "ISO-8859-4" }, + { "lt_LN.ASCII", "ASCII" }, + { "lt_LN.DIS_8859-15", "ISO-8859-15" }, + { "lt_LN.ISO_8859-1", "ISO-8859-1" }, + { "lt_LN.ISO_8859-2", "ISO-8859-2" }, + { "lt_LT.ISO_8859-4", "ISO-8859-4" }, + { "nl_BE.DIS_8859-15", "ISO-8859-15" }, + { "nl_BE.ISO_8859-1", "ISO-8859-1" }, + { "nl_NL.DIS_8859-15", "ISO-8859-15" }, + { "nl_NL.ISO_8859-1", "ISO-8859-1" }, + { "no_NO.DIS_8859-15", "ISO-8859-15" }, + { "no_NO.ISO_8859-1", "ISO-8859-1" }, + { "pl_PL.ISO_8859-2", "ISO-8859-2" }, + { "pt_PT.DIS_8859-15", "ISO-8859-15" }, + { "pt_PT.ISO_8859-1", "ISO-8859-1" }, + { "ru_RU.CP866", "CP866" }, + { "ru_RU.ISO_8859-5", "ISO-8859-5" }, + { "ru_RU.KOI8-R", "KOI8-R" }, + { "ru_SU.CP866", "CP866" }, + { "ru_SU.ISO_8859-5", "ISO-8859-5" }, + { "ru_SU.KOI8-R", "KOI8-R" }, + { "sl_SI.ISO_8859-2", "ISO-8859-2" }, + { "sv_SE.DIS_8859-15", "ISO-8859-15" }, + { "sv_SE.ISO_8859-1", "ISO-8859-1" }, + { "uk_UA.KOI8-U", "KOI8-U" }, + { "zh_CN.EUC", "GB2312" }, + { "zh_TW.BIG5", "BIG5" }, + { "zh_TW.Big5", "BIG5" } +# define locale_table_defined +# endif +# if defined __DJGPP__ /* DOS / DJGPP 2.03 */ + /* The encodings given here may not all be correct. + If you find that the encoding given for your language and + country is not the one your DOS machine actually uses, just + correct it in this file, and send a mail to + Juan Manuel Guerrero + and . */ + { "C", "ASCII" }, + { "ar", "CP864" }, + { "ar_AE", "CP864" }, + { "ar_DZ", "CP864" }, + { "ar_EG", "CP864" }, + { "ar_IQ", "CP864" }, + { "ar_IR", "CP864" }, + { "ar_JO", "CP864" }, + { "ar_KW", "CP864" }, + { "ar_MA", "CP864" }, + { "ar_OM", "CP864" }, + { "ar_QA", "CP864" }, + { "ar_SA", "CP864" }, + { "ar_SY", "CP864" }, + { "be", "CP866" }, + { "be_BE", "CP866" }, + { "bg", "CP866" }, /* not CP855 ?? */ + { "bg_BG", "CP866" }, /* not CP855 ?? */ + { "ca", "CP850" }, + { "ca_ES", "CP850" }, + { "cs", "CP852" }, + { "cs_CZ", "CP852" }, + { "da", "CP865" }, /* not CP850 ?? */ + { "da_DK", "CP865" }, /* not CP850 ?? */ + { "de", "CP850" }, + { "de_AT", "CP850" }, + { "de_CH", "CP850" }, + { "de_DE", "CP850" }, + { "el", "CP869" }, + { "el_GR", "CP869" }, + { "en", "CP850" }, + { "en_AU", "CP850" }, /* not CP437 ?? */ + { "en_CA", "CP850" }, + { "en_GB", "CP850" }, + { "en_NZ", "CP437" }, + { "en_US", "CP437" }, + { "en_ZA", "CP850" }, /* not CP437 ?? */ + { "eo", "CP850" }, + { "eo_EO", "CP850" }, + { "es", "CP850" }, + { "es_AR", "CP850" }, + { "es_BO", "CP850" }, + { "es_CL", "CP850" }, + { "es_CO", "CP850" }, + { "es_CR", "CP850" }, + { "es_CU", "CP850" }, + { "es_DO", "CP850" }, + { "es_EC", "CP850" }, + { "es_ES", "CP850" }, + { "es_GT", "CP850" }, + { "es_HN", "CP850" }, + { "es_MX", "CP850" }, + { "es_NI", "CP850" }, + { "es_PA", "CP850" }, + { "es_PE", "CP850" }, + { "es_PY", "CP850" }, + { "es_SV", "CP850" }, + { "es_UY", "CP850" }, + { "es_VE", "CP850" }, + { "et", "CP850" }, + { "et_EE", "CP850" }, + { "eu", "CP850" }, + { "eu_ES", "CP850" }, + { "fi", "CP850" }, + { "fi_FI", "CP850" }, + { "fr", "CP850" }, + { "fr_BE", "CP850" }, + { "fr_CA", "CP850" }, + { "fr_CH", "CP850" }, + { "fr_FR", "CP850" }, + { "ga", "CP850" }, + { "ga_IE", "CP850" }, + { "gd", "CP850" }, + { "gd_GB", "CP850" }, + { "gl", "CP850" }, + { "gl_ES", "CP850" }, + { "he", "CP862" }, + { "he_IL", "CP862" }, + { "hr", "CP852" }, + { "hr_HR", "CP852" }, + { "hu", "CP852" }, + { "hu_HU", "CP852" }, + { "id", "CP850" }, /* not CP437 ?? */ + { "id_ID", "CP850" }, /* not CP437 ?? */ + { "is", "CP861" }, /* not CP850 ?? */ + { "is_IS", "CP861" }, /* not CP850 ?? */ + { "it", "CP850" }, + { "it_CH", "CP850" }, + { "it_IT", "CP850" }, + { "ja", "CP932" }, + { "ja_JP", "CP932" }, + { "kr", "CP949" }, /* not CP934 ?? */ + { "kr_KR", "CP949" }, /* not CP934 ?? */ + { "lt", "CP775" }, + { "lt_LT", "CP775" }, + { "lv", "CP775" }, + { "lv_LV", "CP775" }, + { "mk", "CP866" }, /* not CP855 ?? */ + { "mk_MK", "CP866" }, /* not CP855 ?? */ + { "mt", "CP850" }, + { "mt_MT", "CP850" }, + { "nb", "CP865" }, /* not CP850 ?? */ + { "nb_NO", "CP865" }, /* not CP850 ?? */ + { "nl", "CP850" }, + { "nl_BE", "CP850" }, + { "nl_NL", "CP850" }, + { "nn", "CP865" }, /* not CP850 ?? */ + { "nn_NO", "CP865" }, /* not CP850 ?? */ + { "no", "CP865" }, /* not CP850 ?? */ + { "no_NO", "CP865" }, /* not CP850 ?? */ + { "pl", "CP852" }, + { "pl_PL", "CP852" }, + { "pt", "CP850" }, + { "pt_BR", "CP850" }, + { "pt_PT", "CP850" }, + { "ro", "CP852" }, + { "ro_RO", "CP852" }, + { "ru", "CP866" }, + { "ru_RU", "CP866" }, + { "sk", "CP852" }, + { "sk_SK", "CP852" }, + { "sl", "CP852" }, + { "sl_SI", "CP852" }, + { "sq", "CP852" }, + { "sq_AL", "CP852" }, + { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sv", "CP850" }, + { "sv_SE", "CP850" }, + { "th", "CP874" }, + { "th_TH", "CP874" }, + { "tr", "CP857" }, + { "tr_TR", "CP857" }, + { "uk", "CP1125" }, + { "uk_UA", "CP1125" }, + { "zh_CN", "GBK" }, + { "zh_TW", "CP950" } /* not CP938 ?? */ +# define locale_table_defined +# endif +# ifndef locale_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; + +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. + If the canonical name cannot be determined, the result is a non-canonical + name. */ + +#ifdef STATIC +STATIC +#endif +const char * +locale_charset (void) +{ + const char *codeset; + + /* This function must be multithread-safe. To achieve this without using + thread-local storage, we use a simple strcpy or memcpy to fill this static + buffer. Filling it through, for example, strcpy + strcat would not be + guaranteed to leave the buffer's contents intact if another thread is + currently accessing it. If necessary, the contents is first assembled in + a stack-allocated buffer. */ + +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 + +# if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + +# ifdef __CYGWIN__ + /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always + returns "US-ASCII". Return the suffix of the locale name from the + environment variables (if present) or the codepage as a number. */ + if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) + { + const char *locale; + static char resultbuf[2 + 10 + 1]; + + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return + it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (resultbuf)) + { + /* This way of filling resultbuf is multithread-safe. */ + memcpy (resultbuf, dot, modifier - dot); + resultbuf [modifier - dot] = '\0'; + return resultbuf; + } + } + } + + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). This encoding is used by Cygwin, unless the user + has set the environment variable CYGWIN=codepage:oem (which very few + people do). + Output directed to console windows needs to be converted (to + GetOEMCP() if the console is using a raster font, or to + GetConsoleOutputCP() if it is using a TrueType font). Cygwin does + this conversion transparently (see winsup/cygwin/fhandler_console.cc), + converting to GetConsoleOutputCP(). This leads to correct results, + except when SetConsoleOutputCP has been called and a raster font is + in use. */ + { + char buf[2 + 10 + 1]; + + sprintf (buf, "CP%u", GetACP ()); + strcpy (resultbuf, buf); + codeset = resultbuf; + } + } +# endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + +# elif defined WINDOWS_NATIVE + + char buf[2 + 10 + 1]; + static char resultbuf[2 + 10 + 1]; + + /* The Windows API has a function returning the locale's codepage as + a number, but the value doesn't change according to what the + 'setlocale' call specified. So we use it as a last resort, in + case the string returned by 'setlocale' doesn't specify the + codepage. */ + char *current_locale = setlocale (LC_CTYPE, NULL); + char *pdot = strrchr (current_locale, '.'); + + if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) + sprintf (buf, "CP%s", pdot + 1); + else + { + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). + When the output goes to a console window, it needs to be provided in + GetOEMCP() encoding if the console is using a raster font, or in + GetConsoleOutputCP() encoding if it is using a TrueType font. + But in GUI programs and for output sent to files and pipes, GetACP() + encoding is the best bet. */ + sprintf (buf, "CP%u", GetACP ()); + } + /* For a locale name such as "French_France.65001", in Windows 10, + setlocale now returns "French_France.utf8" instead. */ + if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) + codeset = "UTF-8"; + else + { + strcpy (resultbuf, buf); + codeset = resultbuf; + } + +# elif defined OS2 + + const char *locale; + static char resultbuf[2 + 10 + 1]; + ULONG cp[3]; + ULONG cplen; + + codeset = NULL; + + /* Allow user to override the codeset, as set in the operating system, + with standard language environment variables. */ + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (resultbuf)) + { + /* This way of filling resultbuf is multithread-safe. */ + memcpy (resultbuf, dot, modifier - dot); + resultbuf [modifier - dot] = '\0'; + return resultbuf; + } + } + + /* For the POSIX locale, don't use the system's codepage. */ + if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) + codeset = ""; + } + + if (codeset == NULL) + { + /* OS/2 has a function returning the locale's codepage as a number. */ + if (DosQueryCp (sizeof (cp), cp, &cplen)) + codeset = ""; + else + { + char buf[2 + 10 + 1]; + + sprintf (buf, "CP%u", cp[0]); + strcpy (resultbuf, buf); + codeset = resultbuf; + } + } + +# else + +# error "Add code for other platforms here." + +# endif + + /* Resolve alias. */ + { +# ifdef alias_table_defined + /* On some platforms, UTF-8 locales are the most frequently used ones. + Speed up the common case and slow down the less common cases by + testing for this case first. */ +# if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__ + if (strcmp (codeset, "UTF-8") == 0) + goto done_table_lookup; + else +# endif + { + const struct table_entry * const table = alias_table; + size_t const table_size = + sizeof (alias_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) + { + /* Invariant: + for i < lo, strcmp (table[i].alias, codeset) < 0, + for i >= hi, strcmp (table[i].alias, codeset) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].alias, codeset); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].alias, codeset) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + } + if (0) + done_table_lookup: {} + else +# endif + { + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + if (codeset[0] == '\0') + codeset = "ASCII"; +# endif + } + } + +#else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like DJGPP) have only the C locale. Therefore we don't use setlocale + here; it would return "C" when it doesn't support the locale name the + user has set. */ +# if 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + if (locale == NULL) + locale = ""; + } + } + + /* Map locale name to canonical encoding name. */ + { +# ifdef locale_table_defined + const struct table_entry * const table = locale_table; + size_t const table_size = + sizeof (locale_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) + { + /* Invariant: + for i < lo, strcmp (table[i].locale, locale) < 0, + for i >= hi, strcmp (table[i].locale, locale) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].locale, locale); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].locale, locale) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + if (0) + done_table_lookup: ; + else +# endif + { + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* The canonical name cannot be determined. */ + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + codeset = "ASCII"; +# endif + } + } + +#endif + +#ifdef DARWIN7 + /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" + (the default codeset) does not work when MB_CUR_MAX is 1. */ + if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) + codeset = "ASCII"; +#endif + + return codeset; +} diff --git a/jni/parted/libgnulib/lib/long-options.c b/jni/parted/libgnulib/lib/long-options.c new file mode 100755 index 0000000..7f6600c --- /dev/null +++ b/jni/parted/libgnulib/lib/long-options.c @@ -0,0 +1,139 @@ +/* Utility to accept --help and --version options as unobtrusively as possible. + + Copyright (C) 1993-1994, 1998-2000, 2002-2006, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering. */ + +#include + +/* Specification. */ +#include "long-options.h" + +#include +#include +#include +#include + +#include "version-etc.h" +#include "exitfail.h" + +static struct option const long_options[] = +{ + {"help", no_argument, NULL, 'h'}, + {"version", no_argument, NULL, 'v'}, + {NULL, 0, NULL, 0} +}; + +/* Process long options --help and --version, but only if argc == 2. + Be careful not to gobble up "--". */ + +void +parse_long_options (int argc, + char **argv, + const char *command_name, + const char *package, + const char *version, + void (*usage_func) (int), + /* const char *author1, ...*/ ...) +{ + int c; + int saved_opterr; + + saved_opterr = opterr; + + /* Don't print an error message for unrecognized options. */ + opterr = 0; + + if (argc == 2 + && (c = getopt_long (argc, argv, "+", long_options, NULL)) != -1) + { + switch (c) + { + case 'h': + (*usage_func) (EXIT_SUCCESS); + break; + + case 'v': + { + va_list authors; + va_start (authors, usage_func); + version_etc_va (stdout, command_name, package, version, authors); + exit (EXIT_SUCCESS); + } + + default: + /* Don't process any other long-named options. */ + break; + } + } + + /* Restore previous value. */ + opterr = saved_opterr; + + /* Reset this to zero so that getopt internals get initialized from + the probably-new parameters when/if getopt is called later. */ + optind = 0; +} + +/* Process the GNU default long options --help and --version (see also + https://gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html), + and fail for any other unknown long or short option. + Use with SCAN_ALL=true to scan until "--", or with SCAN_ALL=false to stop + at the first non-option argument (or "--", whichever comes first). */ +void +parse_gnu_standard_options_only (int argc, + char **argv, + const char *command_name, + const char *package, + const char *version, + bool scan_all, + void (*usage_func) (int), + /* const char *author1, ...*/ ...) +{ + int c; + int saved_opterr = opterr; + + /* Print an error message for unrecognized options. */ + opterr = 1; + + const char *optstring = scan_all ? "" : "+"; + + if ((c = getopt_long (argc, argv, optstring, long_options, NULL)) != -1) + { + switch (c) + { + case 'h': + (*usage_func) (EXIT_SUCCESS); + break; + + case 'v': + { + va_list authors; + va_start (authors, usage_func); + version_etc_va (stdout, command_name, package, version, authors); + exit (EXIT_SUCCESS); + } + + default: + (*usage_func) (exit_failure); + break; + } + } + + /* Restore previous value. */ + opterr = saved_opterr; +} diff --git a/jni/parted/libgnulib/lib/malloc/dynarray-skeleton.c b/jni/parted/libgnulib/lib/malloc/dynarray-skeleton.c new file mode 100755 index 0000000..a95241a --- /dev/null +++ b/jni/parted/libgnulib/lib/malloc/dynarray-skeleton.c @@ -0,0 +1,528 @@ +/* Type-safe arrays which grow dynamically. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* Pre-processor macros which act as parameters: + + DYNARRAY_STRUCT + The struct tag of dynamic array to be defined. + DYNARRAY_ELEMENT + The type name of the element type. Elements are copied + as if by memcpy, and can change address as the dynamic + array grows. + DYNARRAY_PREFIX + The prefix of the functions which are defined. + + The following parameters are optional: + + DYNARRAY_ELEMENT_FREE + DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the + contents of elements. E is of type DYNARRAY_ELEMENT *. + DYNARRAY_ELEMENT_INIT + DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new + element. E is of type DYNARRAY_ELEMENT *. + If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is + defined, new elements are automatically zero-initialized. + Otherwise, new elements have undefined contents. + DYNARRAY_INITIAL_SIZE + The size of the statically allocated array (default: + at least 2, more elements if they fit into 128 bytes). + Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, + there is no statically allocated array at, and all non-empty + arrays are heap-allocated. + DYNARRAY_FINAL_TYPE + The name of the type which holds the final array. If not + defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE + must be a struct type, with members of type DYNARRAY_ELEMENT and + size_t at the start (in this order). + + These macros are undefined after this header file has been + included. + + The following types are provided (their members are private to the + dynarray implementation): + + struct DYNARRAY_STRUCT + + The following functions are provided: + + void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *); + void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *); + bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *); + void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *); + size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *); + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *); + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *); + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *, size_t); + void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *, DYNARRAY_ELEMENT); + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *); + bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *, size_t); + void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *); + void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *); + + The following functions are provided are provided if the + prerequisites are met: + + bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, + DYNARRAY_FINAL_TYPE *); + (if DYNARRAY_FINAL_TYPE is defined) + DYNARRAY_ELEMENT *DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, + size_t *); + (if DYNARRAY_FINAL_TYPE is not defined) +*/ + +#include + +#include +#include +#include + +#ifndef DYNARRAY_STRUCT +# error "DYNARRAY_STRUCT must be defined" +#endif + +#ifndef DYNARRAY_ELEMENT +# error "DYNARRAY_ELEMENT must be defined" +#endif + +#ifndef DYNARRAY_PREFIX +# error "DYNARRAY_PREFIX must be defined" +#endif + +#ifdef DYNARRAY_INITIAL_SIZE +# if DYNARRAY_INITIAL_SIZE < 0 +# error "DYNARRAY_INITIAL_SIZE must be non-negative" +# endif +# if DYNARRAY_INITIAL_SIZE > 0 +# define DYNARRAY_HAVE_SCRATCH 1 +# else +# define DYNARRAY_HAVE_SCRATCH 0 +# endif +#else +/* Provide a reasonable default which limits the size of + DYNARRAY_STRUCT. */ +# define DYNARRAY_INITIAL_SIZE \ + (sizeof (DYNARRAY_ELEMENT) > 64 ? 2 : 128 / sizeof (DYNARRAY_ELEMENT)) +# define DYNARRAY_HAVE_SCRATCH 1 +#endif + +/* Public type definitions. */ + +/* All fields of this struct are private to the implementation. */ +struct DYNARRAY_STRUCT +{ + union + { + struct dynarray_header dynarray_abstract; + struct + { + /* These fields must match struct dynarray_header. */ + size_t used; + size_t allocated; + DYNARRAY_ELEMENT *array; + } dynarray_header; + } u; + +#if DYNARRAY_HAVE_SCRATCH + /* Initial inline allocation. */ + DYNARRAY_ELEMENT scratch[DYNARRAY_INITIAL_SIZE]; +#endif +}; + +/* Internal use only: Helper macros. */ + +/* Ensure macro-expansion of DYNARRAY_PREFIX. */ +#define DYNARRAY_CONCAT0(prefix, name) prefix##name +#define DYNARRAY_CONCAT1(prefix, name) DYNARRAY_CONCAT0(prefix, name) +#define DYNARRAY_NAME(name) DYNARRAY_CONCAT1(DYNARRAY_PREFIX, name) + +/* Use DYNARRAY_FREE instead of DYNARRAY_NAME (free), + so that Gnulib does not change 'free' to 'rpl_free'. */ +#define DYNARRAY_FREE DYNARRAY_CONCAT1 (DYNARRAY_NAME (f), ree) + +/* Address of the scratch buffer if any. */ +#if DYNARRAY_HAVE_SCRATCH +# define DYNARRAY_SCRATCH(list) (list)->scratch +#else +# define DYNARRAY_SCRATCH(list) NULL +#endif + +/* Internal use only: Helper functions. */ + +/* Internal function. Call DYNARRAY_ELEMENT_FREE with the array + elements. Name mangling needed due to the DYNARRAY_ELEMENT_FREE + macro expansion. */ +static inline void +DYNARRAY_NAME (free__elements__) (DYNARRAY_ELEMENT *__dynarray_array, + size_t __dynarray_used) +{ +#ifdef DYNARRAY_ELEMENT_FREE + for (size_t __dynarray_i = 0; __dynarray_i < __dynarray_used; ++__dynarray_i) + DYNARRAY_ELEMENT_FREE (&__dynarray_array[__dynarray_i]); +#endif /* DYNARRAY_ELEMENT_FREE */ +} + +/* Internal function. Free the non-scratch array allocation. */ +static inline void +DYNARRAY_NAME (free__array__) (struct DYNARRAY_STRUCT *list) +{ +#if DYNARRAY_HAVE_SCRATCH + if (list->u.dynarray_header.array != list->scratch) + free (list->u.dynarray_header.array); +#else + free (list->u.dynarray_header.array); +#endif +} + +/* Public functions. */ + +/* Initialize a dynamic array object. This must be called before any + use of the object. */ +__attribute_nonnull__ ((1)) +static void +DYNARRAY_NAME (init) (struct DYNARRAY_STRUCT *list) +{ + list->u.dynarray_header.used = 0; + list->u.dynarray_header.allocated = DYNARRAY_INITIAL_SIZE; + list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); +} + +/* Deallocate the dynamic array and its elements. */ +__attribute_maybe_unused__ __attribute_nonnull__ ((1)) +static void +DYNARRAY_FREE (struct DYNARRAY_STRUCT *list) +{ + DYNARRAY_NAME (free__elements__) + (list->u.dynarray_header.array, list->u.dynarray_header.used); + DYNARRAY_NAME (free__array__) (list); + DYNARRAY_NAME (init) (list); +} + +/* Return true if the dynamic array is in an error state. */ +__attribute_nonnull__ ((1)) +static inline bool +DYNARRAY_NAME (has_failed) (const struct DYNARRAY_STRUCT *list) +{ + return list->u.dynarray_header.allocated == __dynarray_error_marker (); +} + +/* Mark the dynamic array as failed. All elements are deallocated as + a side effect. */ +__attribute_nonnull__ ((1)) +static void +DYNARRAY_NAME (mark_failed) (struct DYNARRAY_STRUCT *list) +{ + DYNARRAY_NAME (free__elements__) + (list->u.dynarray_header.array, list->u.dynarray_header.used); + DYNARRAY_NAME (free__array__) (list); + list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); + list->u.dynarray_header.used = 0; + list->u.dynarray_header.allocated = __dynarray_error_marker (); +} + +/* Return the number of elements which have been added to the dynamic + array. */ +__attribute_nonnull__ ((1)) +static inline size_t +DYNARRAY_NAME (size) (const struct DYNARRAY_STRUCT *list) +{ + return list->u.dynarray_header.used; +} + +/* Return a pointer to the array element at INDEX. Terminate the + process if INDEX is out of bounds. */ +__attribute_nonnull__ ((1)) +static inline DYNARRAY_ELEMENT * +DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index) +{ + if (__glibc_unlikely (index >= DYNARRAY_NAME (size) (list))) + __libc_dynarray_at_failure (DYNARRAY_NAME (size) (list), index); + return list->u.dynarray_header.array + index; +} + +/* Return a pointer to the first array element, if any. For a + zero-length array, the pointer can be NULL even though the dynamic + array has not entered the failure state. */ +__attribute_nonnull__ ((1)) +static inline DYNARRAY_ELEMENT * +DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list) +{ + return list->u.dynarray_header.array; +} + +/* Return a pointer one element past the last array element. For a + zero-length array, the pointer can be NULL even though the dynamic + array has not entered the failure state. */ +__attribute_nonnull__ ((1)) +static inline DYNARRAY_ELEMENT * +DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list) +{ + return list->u.dynarray_header.array + list->u.dynarray_header.used; +} + +/* Internal function. Slow path for the add function below. */ +static void +DYNARRAY_NAME (add__) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) +{ + if (__glibc_unlikely + (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, + DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT)))) + { + DYNARRAY_NAME (mark_failed) (list); + return; + } + + /* Copy the new element and increase the array length. */ + list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; +} + +/* Add ITEM at the end of the array, enlarging it by one element. + Mark *LIST as failed if the dynamic array allocation size cannot be + increased. */ +__attribute_nonnull__ ((1)) +static inline void +DYNARRAY_NAME (add) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) +{ + /* Do nothing in case of previous error. */ + if (DYNARRAY_NAME (has_failed) (list)) + return; + + /* Enlarge the array if necessary. */ + if (__glibc_unlikely (list->u.dynarray_header.used + == list->u.dynarray_header.allocated)) + { + DYNARRAY_NAME (add__) (list, item); + return; + } + + /* Copy the new element and increase the array length. */ + list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; +} + +/* Internal function. Building block for the emplace functions below. + Assumes space for one more element in *LIST. */ +static inline DYNARRAY_ELEMENT * +DYNARRAY_NAME (emplace__tail__) (struct DYNARRAY_STRUCT *list) +{ + DYNARRAY_ELEMENT *result + = &list->u.dynarray_header.array[list->u.dynarray_header.used]; + ++list->u.dynarray_header.used; +#if defined (DYNARRAY_ELEMENT_INIT) + DYNARRAY_ELEMENT_INIT (result); +#elif defined (DYNARRAY_ELEMENT_FREE) + memset (result, 0, sizeof (*result)); +#endif + return result; +} + +/* Internal function. Slow path for the emplace function below. */ +static DYNARRAY_ELEMENT * +DYNARRAY_NAME (emplace__) (struct DYNARRAY_STRUCT *list) +{ + if (__glibc_unlikely + (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, + DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT)))) + { + DYNARRAY_NAME (mark_failed) (list); + return NULL; + } + return DYNARRAY_NAME (emplace__tail__) (list); +} + +/* Allocate a place for a new element in *LIST and return a pointer to + it. The pointer can be NULL if the dynamic array cannot be + enlarged due to a memory allocation failure. */ +__attribute_maybe_unused__ __attribute_warn_unused_result__ +__attribute_nonnull__ ((1)) +static +/* Avoid inlining with the larger initialization code. */ +#if !(defined (DYNARRAY_ELEMENT_INIT) || defined (DYNARRAY_ELEMENT_FREE)) +inline +#endif +DYNARRAY_ELEMENT * +DYNARRAY_NAME (emplace) (struct DYNARRAY_STRUCT *list) +{ + /* Do nothing in case of previous error. */ + if (DYNARRAY_NAME (has_failed) (list)) + return NULL; + + /* Enlarge the array if necessary. */ + if (__glibc_unlikely (list->u.dynarray_header.used + == list->u.dynarray_header.allocated)) + return (DYNARRAY_NAME (emplace__) (list)); + return DYNARRAY_NAME (emplace__tail__) (list); +} + +/* Change the size of *LIST to SIZE. If SIZE is larger than the + existing size, new elements are added (which can be initialized). + Otherwise, the list is truncated, and elements are freed. Return + false on memory allocation failure (and mark *LIST as failed). */ +__attribute_maybe_unused__ __attribute_nonnull__ ((1)) +static bool +DYNARRAY_NAME (resize) (struct DYNARRAY_STRUCT *list, size_t size) +{ + if (size > list->u.dynarray_header.used) + { + bool ok; +#if defined (DYNARRAY_ELEMENT_INIT) + /* The new elements have to be initialized. */ + size_t old_size = list->u.dynarray_header.used; + ok = __libc_dynarray_resize (&list->u.dynarray_abstract, + size, DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT)); + if (ok) + for (size_t i = old_size; i < size; ++i) + { + DYNARRAY_ELEMENT_INIT (&list->u.dynarray_header.array[i]); + } +#elif defined (DYNARRAY_ELEMENT_FREE) + /* Zero initialization is needed so that the elements can be + safely freed. */ + ok = __libc_dynarray_resize_clear + (&list->u.dynarray_abstract, size, + DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); +#else + ok = __libc_dynarray_resize (&list->u.dynarray_abstract, + size, DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT)); +#endif + if (__glibc_unlikely (!ok)) + DYNARRAY_NAME (mark_failed) (list); + return ok; + } + else + { + /* The list has shrunk in size. Free the removed elements. */ + DYNARRAY_NAME (free__elements__) + (list->u.dynarray_header.array + size, + list->u.dynarray_header.used - size); + list->u.dynarray_header.used = size; + return true; + } +} + +/* Remove the last element of LIST if it is present. */ +__attribute_maybe_unused__ __attribute_nonnull__ ((1)) +static void +DYNARRAY_NAME (remove_last) (struct DYNARRAY_STRUCT *list) +{ + /* used > 0 implies that the array is the non-failed state. */ + if (list->u.dynarray_header.used > 0) + { + size_t new_length = list->u.dynarray_header.used - 1; +#ifdef DYNARRAY_ELEMENT_FREE + DYNARRAY_ELEMENT_FREE (&list->u.dynarray_header.array[new_length]); +#endif + list->u.dynarray_header.used = new_length; + } +} + +/* Remove all elements from the list. The elements are freed, but the + list itself is not. */ +__attribute_maybe_unused__ __attribute_nonnull__ ((1)) +static void +DYNARRAY_NAME (clear) (struct DYNARRAY_STRUCT *list) +{ + /* free__elements__ does nothing if the list is in the failed + state. */ + DYNARRAY_NAME (free__elements__) + (list->u.dynarray_header.array, list->u.dynarray_header.used); + list->u.dynarray_header.used = 0; +} + +#ifdef DYNARRAY_FINAL_TYPE +/* Transfer the dynamic array to a permanent location at *RESULT. + Returns true on success on false on allocation failure. In either + case, *LIST is re-initialized and can be reused. A NULL pointer is + stored in *RESULT if LIST refers to an empty list. On success, the + pointer in *RESULT is heap-allocated and must be deallocated using + free. */ +__attribute_maybe_unused__ __attribute_warn_unused_result__ +__attribute_nonnull__ ((1, 2)) +static bool +DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, + DYNARRAY_FINAL_TYPE *result) +{ + struct dynarray_finalize_result res; + if (__libc_dynarray_finalize (&list->u.dynarray_abstract, + DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT), &res)) + { + /* On success, the result owns all the data. */ + DYNARRAY_NAME (init) (list); + *result = (DYNARRAY_FINAL_TYPE) { res.array, res.length }; + return true; + } + else + { + /* On error, we need to free all data. */ + DYNARRAY_FREE (list); + errno = ENOMEM; + return false; + } +} +#else /* !DYNARRAY_FINAL_TYPE */ +/* Transfer the dynamic array to a heap-allocated array and return a + pointer to it. The pointer is NULL if memory allocation fails, or + if the array is empty, so this function should be used only for + arrays which are known not be empty (usually because they always + have a sentinel at the end). If LENGTHP is not NULL, the array + length is written to *LENGTHP. *LIST is re-initialized and can be + reused. */ +__attribute_maybe_unused__ __attribute_warn_unused_result__ +__attribute_nonnull__ ((1)) +static DYNARRAY_ELEMENT * +DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, size_t *lengthp) +{ + struct dynarray_finalize_result res; + if (__libc_dynarray_finalize (&list->u.dynarray_abstract, + DYNARRAY_SCRATCH (list), + sizeof (DYNARRAY_ELEMENT), &res)) + { + /* On success, the result owns all the data. */ + DYNARRAY_NAME (init) (list); + if (lengthp != NULL) + *lengthp = res.length; + return res.array; + } + else + { + /* On error, we need to free all data. */ + DYNARRAY_FREE (list); + errno = ENOMEM; + return NULL; + } +} +#endif /* !DYNARRAY_FINAL_TYPE */ + +/* Undo macro definitions. */ + +#undef DYNARRAY_CONCAT0 +#undef DYNARRAY_CONCAT1 +#undef DYNARRAY_NAME +#undef DYNARRAY_SCRATCH +#undef DYNARRAY_HAVE_SCRATCH + +#undef DYNARRAY_STRUCT +#undef DYNARRAY_ELEMENT +#undef DYNARRAY_PREFIX +#undef DYNARRAY_ELEMENT_FREE +#undef DYNARRAY_ELEMENT_INIT +#undef DYNARRAY_INITIAL_SIZE +#undef DYNARRAY_FINAL_TYPE diff --git a/jni/parted/libgnulib/lib/malloca.c b/jni/parted/libgnulib/lib/malloca.c new file mode 100755 index 0000000..e75c72d --- /dev/null +++ b/jni/parted/libgnulib/lib/malloca.c @@ -0,0 +1,135 @@ +/* Safe automatic memory allocation. + Copyright (C) 2003, 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2003, 2018. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include + +/* Specification. */ +#include "malloca.h" + +#include +#if defined __CHERI_PURE_CAPABILITY__ +# include +#endif + +#include "idx.h" + +/* The speed critical point in this file is freea() applied to an alloca() + result: it must be fast, to match the speed of alloca(). The speed of + mmalloca() and freea() in the other case are not critical, because they + are only invoked for big memory sizes. + Here we use a bit in the address as an indicator, an idea by Ondřej Bílka. + malloca() can return three types of pointers: + - Pointers ≡ 0 mod 2*sa_alignment_max come from stack allocation. + - Pointers ≡ sa_alignment_max mod 2*sa_alignment_max come from heap + allocation. + - NULL comes from a failed heap allocation. */ + +#if defined __CHERI_PURE_CAPABILITY__ +/* Type for holding the original malloc() result. */ +typedef uintptr_t small_t; +#else +/* Type for holding very small pointer differences. */ +typedef unsigned char small_t; +/* Verify that it is wide enough. */ +static_assert (2 * sa_alignment_max - 1 <= (small_t) -1); +#endif + +void * +mmalloca (size_t n) +{ +#if HAVE_ALLOCA + /* Allocate one more word, used to determine the address to pass to freea(), + and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max. */ + uintptr_t alignment2_mask = 2 * sa_alignment_max - 1; + int plus = sizeof (small_t) + alignment2_mask; + idx_t nplus; + if (!ckd_add (&nplus, n, plus) && !xalloc_oversized (nplus, 1)) + { + char *mem = (char *) malloc (nplus); + + if (mem != NULL) + { + uintptr_t umem = (uintptr_t) mem; + /* The ckd_add avoids signed integer overflow on + theoretical platforms where UINTPTR_MAX <= INT_MAX. */ + uintptr_t umemplus; + ckd_add (&umemplus, umem, sizeof (small_t) + sa_alignment_max - 1); + idx_t offset = (umemplus - umemplus % (2 * sa_alignment_max) + + sa_alignment_max - umem); + void *p = mem + offset; + /* Here p >= mem + sizeof (small_t), + and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1 + hence p + n <= mem + nplus. + So, the memory range [p, p+n) lies in the allocated memory range + [mem, mem + nplus). */ + small_t *sp = p; +# if defined __CHERI_PURE_CAPABILITY__ + sp[-1] = umem; + p = (char *) cheri_bounds_set ((char *) p - sizeof (small_t), + sizeof (small_t) + n) + + sizeof (small_t); +# else + sp[-1] = offset; +# endif + /* p ≡ sa_alignment_max mod 2*sa_alignment_max. */ + return p; + } + } + /* Out of memory. */ + return NULL; +#else +# if !MALLOC_0_IS_NONNULL + if (n == 0) + n = 1; +# endif + return malloc (n); +#endif +} + +#if HAVE_ALLOCA +void +freea (void *p) +{ + /* Check argument. */ + uintptr_t u = (uintptr_t) p; + if (u & (sa_alignment_max - 1)) + { + /* p was not the result of a malloca() call. Invalid argument. */ + abort (); + } + /* Determine whether p was a non-NULL pointer returned by mmalloca(). */ + if (u & sa_alignment_max) + { + char *cp = p; + small_t *sp = p; +# if defined __CHERI_PURE_CAPABILITY__ + void *mem = sp[-1]; +# else + void *mem = cp - sp[-1]; +# endif + free (mem); + } +} +#endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/jni/parted/libgnulib/lib/mbrtoc32.c b/jni/parted/libgnulib/lib/mbrtoc32.c new file mode 100755 index 0000000..771c857 --- /dev/null +++ b/jni/parted/libgnulib/lib/mbrtoc32.c @@ -0,0 +1,288 @@ +/* Convert multibyte character to 32-bit wide character. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +#include + +/* Specification. */ +#include + +#include "attribute.h" + +#include +#include + +#if GL_CHAR32_T_IS_UNICODE +# include "lc-charset-unicode.h" +#endif + +#if GNULIB_defined_mbstate_t /* AIX, IRIX */ +/* Implement mbrtoc32() on top of mbtowc() for the non-UTF-8 locales + and directly for the UTF-8 locales. */ + +/* Note: On AIX (64-bit) we can implement mbrtoc32 in two equivalent ways: + - in a way that parallels the override of mbrtowc; this is the code branch + here; + - in a way that invokes the overridden mbrtowc; this would be the #else + branch below. + They are equivalent. */ + +# if AVOID_ANY_THREADS + +/* The option '--disable-threads' explicitly requests no locking. */ + +# elif defined _WIN32 && !defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# elif HAVE_PTHREAD_API + +# include +# if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS +# include +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif + +# elif HAVE_THREADS_H + +# include + +# endif + +# include "lc-charset-dispatch.h" +# include "mbtowc-lock.h" + +static_assert (sizeof (mbstate_t) >= 4); +static char internal_state[4]; + +size_t +mbrtoc32 (char32_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ +# define FITS_IN_CHAR_TYPE(wc) 1 +# include "mbrtowc-impl.h" +} + +#else /* glibc, macOS, FreeBSD, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, mingw, MSVC, Minix, Android */ + +/* Implement mbrtoc32() based on the original mbrtoc32() or on mbrtowc(). */ + +# include + +# include "localcharset.h" +# include "streq.h" + +# if MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ +# include "hard-locale.h" +# include +# endif + +static mbstate_t internal_state; + +size_t +mbrtoc32 (char32_t *pwc, const char *s, size_t n, mbstate_t *ps) +# undef mbrtoc32 +{ + /* It's simpler to handle the case s == NULL upfront, than to worry about + this case later, before every test of pwc and n. */ + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } + +# if MBRTOC32_EMPTY_INPUT_BUG || _GL_SMALL_WCHAR_T + if (n == 0) + return (size_t) -2; +# endif + + if (ps == NULL) + ps = &internal_state; + +# if HAVE_WORKING_MBRTOC32 && HAVE_WORKING_C32RTOMB && !MBRTOC32_MULTIBYTE_LOCALE_BUG + /* mbrtoc32() may produce different values for wc than mbrtowc(). Therefore + use mbrtoc32(). */ + +# if defined _WIN32 && !defined __CYGWIN__ + char32_t wc; + size_t ret = mbrtoc32 (&wc, s, n, ps); + if (ret < (size_t) -2 && pwc != NULL) + *pwc = wc; +# else + size_t ret = mbrtoc32 (pwc, s, n, ps); +# endif + +# if GNULIB_MBRTOC32_REGULAR + /* Verify that mbrtoc32 is regular. */ + if (ret < (size_t) -3 && ! mbsinit (ps)) + /* This occurs on glibc 2.36. */ + mbszero (ps); + if (ret == (size_t) -3) + abort (); +# endif + +# if MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ + if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) + { + if (pwc != NULL) + *pwc = (unsigned char) *s; + return 1; + } +# endif + + return ret; + +# elif _GL_SMALL_WCHAR_T + + /* Special-case all encodings that may produce wide character values + > WCHAR_MAX. */ + const char *encoding = locale_charset (); + if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + { + /* Special-case the UTF-8 encoding. Assume that the wide-character + encoding in a UTF-8 locale is UCS-2 or, equivalently, UTF-16. */ + /* Here n > 0. */ + char *pstate = (char *)ps; + size_t nstate = pstate[0]; + char buf[4]; + const char *p; + size_t m; + int res; + + switch (nstate) + { + case 0: + p = s; + m = n; + break; + case 3: + buf[2] = pstate[3]; + FALLTHROUGH; + case 2: + buf[1] = pstate[2]; + FALLTHROUGH; + case 1: + buf[0] = pstate[1]; + p = buf; + m = nstate; + buf[m++] = s[0]; + if (n >= 2 && m < 4) + { + buf[m++] = s[1]; + if (n >= 3 && m < 4) + buf[m++] = s[2]; + } + break; + default: + errno = EINVAL; + return (size_t)(-1); + } + + /* Here m > 0. */ + + { +# define FITS_IN_CHAR_TYPE(wc) 1 +# include "mbrtowc-impl-utf8.h" + } + + success: + if (nstate >= (res > 0 ? res : 1)) + abort (); + res -= nstate; + /* Set *ps to an initial state. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* Native Windows. */ + /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. + On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined + as an 8-byte struct, of which the first 4 bytes matter. */ + *(unsigned int *)pstate = 0; +# elif defined __CYGWIN__ + /* Cygwin defines 'mbstate_t' as an 8-byte struct; the first 4 bytes + matter. */ + ps->__count = 0; +# else + pstate[0] = 0; +# endif + return res; + + incomplete: + { + size_t k = nstate; + /* Here 0 <= k < m < 4. */ + pstate[++k] = s[0]; + if (k < m) + { + pstate[++k] = s[1]; + if (k < m) + pstate[++k] = s[2]; + } + if (k != m) + abort (); + } + pstate[0] = m; + return (size_t)(-2); + + invalid: + errno = EILSEQ; + /* The conversion state is undefined, says POSIX. */ + return (size_t)(-1); + } + else + { + wchar_t wc; + size_t ret = mbrtowc (&wc, s, n, ps); + if (ret < (size_t) -2 && pwc != NULL) + *pwc = wc; + return ret; + } + +# else + + /* char32_t and wchar_t are equivalent. Use mbrtowc(). */ + wchar_t wc; + size_t ret = mbrtowc (&wc, s, n, ps); + +# if GNULIB_MBRTOC32_REGULAR + /* Ensure that mbrtoc32 is regular. */ + if (ret < (size_t) -2 && ! mbsinit (ps)) + /* This occurs on glibc 2.12. */ + mbszero (ps); +# endif + +# if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION + if (ret < (size_t) -2 && wc != 0) + { + wc = locale_encoding_to_unicode (wc); + if (wc == 0) + { + ret = (size_t) -1; + errno = EILSEQ; + } + } +# endif + if (ret < (size_t) -2 && pwc != NULL) + *pwc = wc; + return ret; + +# endif +} + +#endif diff --git a/jni/parted/libgnulib/lib/mbrtowc.c b/jni/parted/libgnulib/lib/mbrtowc.c new file mode 100755 index 0000000..8a1646d --- /dev/null +++ b/jni/parted/libgnulib/lib/mbrtowc.c @@ -0,0 +1,161 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if GNULIB_defined_mbstate_t +/* Implement mbrtowc() on top of mbtowc() for the non-UTF-8 locales + and directly for the UTF-8 locales. */ + +# include +# include +# include + +# if AVOID_ANY_THREADS + +/* The option '--disable-threads' explicitly requests no locking. */ + +# elif defined _WIN32 && !defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# elif HAVE_PTHREAD_API + +# include +# if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS +# include +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif + +# elif HAVE_THREADS_H + +# include + +# endif + +# include "attribute.h" +# include "lc-charset-dispatch.h" +# include "mbtowc-lock.h" + +static_assert (sizeof (mbstate_t) >= 4); +static char internal_state[4]; + +size_t +mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ +# define FITS_IN_CHAR_TYPE(wc) ((wc) <= WCHAR_MAX) +# include "mbrtowc-impl.h" +} + +#else +/* Override the system's mbrtowc() function. */ + +# if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ +# include "hard-locale.h" +# include +# endif + +# undef mbrtowc + +size_t +rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + size_t ret; + wchar_t wc; + +# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } +# endif + +# if MBRTOWC_EMPTY_INPUT_BUG + if (n == 0) + return (size_t) -2; +# endif + + if (! pwc) + pwc = &wc; + +# if MBRTOWC_RETVAL_BUG + { + static mbstate_t internal_state; + + /* Override mbrtowc's internal state. We cannot call mbsinit() on the + hidden internal state, but we can call it on our variable. */ + if (ps == NULL) + ps = &internal_state; + + if (!mbsinit (ps)) + { + /* Parse the rest of the multibyte character byte for byte. */ + size_t count = 0; + for (; n > 0; s++, n--) + { + ret = mbrtowc (&wc, s, 1, ps); + + if (ret == (size_t)(-1)) + return (size_t)(-1); + count++; + if (ret != (size_t)(-2)) + { + /* The multibyte character has been completed. */ + *pwc = wc; + return (wc == 0 ? 0 : count); + } + } + return (size_t)(-2); + } + } +# endif + +# if MBRTOWC_STORES_INCOMPLETE_BUG + ret = mbrtowc (&wc, s, n, ps); + if (ret < (size_t) -2 && pwc != NULL) + *pwc = wc; +# else + ret = mbrtowc (pwc, s, n, ps); +# endif + +# if MBRTOWC_NUL_RETVAL_BUG + if (ret < (size_t) -2 && !*pwc) + return 0; +# endif + +# if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ + if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) + { + unsigned char uc = *s; + *pwc = uc; + return 1; + } +# endif + + return ret; +} + +#endif diff --git a/jni/parted/libgnulib/lib/mbszero.c b/jni/parted/libgnulib/lib/mbszero.c new file mode 100755 index 0000000..25af284 --- /dev/null +++ b/jni/parted/libgnulib/lib/mbszero.c @@ -0,0 +1,23 @@ +/* Put an mbstate_t into an initial conversion state. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2023. */ + +#include + +#define IN_MBSZERO +/* Specification and implementation. */ +#include diff --git a/jni/parted/libgnulib/lib/nl_langinfo.c b/jni/parted/libgnulib/lib/nl_langinfo.c new file mode 100755 index 0000000..64ff93b --- /dev/null +++ b/jni/parted/libgnulib/lib/nl_langinfo.c @@ -0,0 +1,585 @@ +/* nl_langinfo() replacement: query locale dependent information. + + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include +#if defined _WIN32 && ! defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include +# include +#endif + +#if REPLACE_NL_LANGINFO && !NL_LANGINFO_MTSAFE + +# if AVOID_ANY_THREADS + +/* The option '--disable-threads' explicitly requests no locking. */ + +# elif defined _WIN32 && !defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# elif HAVE_PTHREAD_API + +# include +# if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS +# include +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif + +# elif HAVE_THREADS_H + +# include + +# endif + +#endif + +/* nl_langinfo() must be multithread-safe. To achieve this without using + thread-local storage: + 1. We use a specific static buffer for each possible argument. + So that different threads can call nl_langinfo with different arguments, + without interfering. + 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it + through, for example, strcpy + strcat would not be guaranteed to leave + the buffer's contents intact if another thread is currently accessing + it. If necessary, the contents is first assembled in a stack-allocated + buffer. */ + +#if !REPLACE_NL_LANGINFO || GNULIB_defined_CODESET +/* Return the codeset of the current locale, if this is easily deducible. + Otherwise, return "". */ +static char * +ctype_codeset (void) +{ + /* This function is only used on platforms which don't have uselocale(). + Therefore we don't need to look at the per-thread locale first, here. */ + static char result[2 + 10 + 1]; + char buf[2 + 10 + 1]; + char locale[SETLOCALE_NULL_MAX]; + char *codeset; + size_t codesetlen; + + if (setlocale_null_r (LC_CTYPE, locale, sizeof (locale))) + locale[0] = '\0'; + + codeset = buf; + codeset[0] = '\0'; + + if (locale[0]) + { + /* If the locale name contains an encoding after the dot, return it. */ + char *dot = strchr (locale, '.'); + + if (dot) + { + /* Look for the possible @... trailer and remove it, if any. */ + char *codeset_start = dot + 1; + char const *modifier = strchr (codeset_start, '@'); + + if (! modifier) + codeset = codeset_start; + else + { + codesetlen = modifier - codeset_start; + if (codesetlen < sizeof buf) + { + codeset = memcpy (buf, codeset_start, codesetlen); + codeset[codesetlen] = '\0'; + } + } + } + } + +# if defined _WIN32 && ! defined __CYGWIN__ + /* If setlocale is successful, it returns the number of the + codepage, as a string. Otherwise, fall back on Windows API + GetACP, which returns the locale's codepage as a number (although + this doesn't change according to what the 'setlocale' call specified). + Either way, prepend "CP" to make it a valid codeset name. */ + codesetlen = strlen (codeset); + if (0 < codesetlen && codesetlen < sizeof buf - 2) + memmove (buf + 2, codeset, codesetlen + 1); + else + sprintf (buf + 2, "%u", GetACP ()); + /* For a locale name such as "French_France.65001", in Windows 10, + setlocale now returns "French_France.utf8" instead. */ + if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) + return (char *) "UTF-8"; + else + { + memcpy (buf, "CP", 2); + strcpy (result, buf); + return result; + } +# else + strcpy (result, codeset); + return result; +#endif +} +#endif + + +#if REPLACE_NL_LANGINFO + +/* Override nl_langinfo with support for added nl_item values. */ + +# undef nl_langinfo + +/* Without locking, on Solaris 11.3, test-nl_langinfo-mt fails, with message + "thread5 disturbed by threadN!", even when threadN invokes only + nl_langinfo (CODESET); + nl_langinfo (CRNCYSTR); + Similarly on Solaris 10. */ + +# if !NL_LANGINFO_MTSAFE /* Solaris */ + +# define ITEMS (MAXSTRMSG + 1) +# define MAX_RESULT_LEN 80 + +static char * +nl_langinfo_unlocked (nl_item item) +{ + static char result[ITEMS][MAX_RESULT_LEN]; + + /* The result of nl_langinfo is in storage that can be overwritten by + other calls to nl_langinfo. */ + char *tmp = nl_langinfo (item); + if (item >= 0 && item < ITEMS && tmp != NULL) + { + size_t tmp_len = strlen (tmp); + if (tmp_len < MAX_RESULT_LEN) + strcpy (result[item], tmp); + else + { + /* Produce a truncated result. Oh well... */ + result[item][MAX_RESULT_LEN - 1] = '\0'; + memcpy (result[item], tmp, MAX_RESULT_LEN - 1); + } + return result[item]; + } + else + return tmp; +} + +/* Use a lock, so that no two threads can invoke nl_langinfo_unlocked + at the same time. */ + +/* Prohibit renaming this symbol. */ +# undef gl_get_nl_langinfo_lock + +# if AVOID_ANY_THREADS + +/* The option '--disable-threads' explicitly requests no locking. */ +# define nl_langinfo_with_lock nl_langinfo_unlocked + +# elif defined _WIN32 && !defined __CYGWIN__ + +extern __declspec(dllimport) CRITICAL_SECTION *gl_get_nl_langinfo_lock (void); + +static char * +nl_langinfo_with_lock (nl_item item) +{ + CRITICAL_SECTION *lock = gl_get_nl_langinfo_lock (); + char *ret; + + EnterCriticalSection (lock); + ret = nl_langinfo_unlocked (item); + LeaveCriticalSection (lock); + + return ret; +} + +# elif HAVE_PTHREAD_API + +extern +# if defined _WIN32 || defined __CYGWIN__ + __declspec(dllimport) +# endif + pthread_mutex_t *gl_get_nl_langinfo_lock (void); + +# if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ + + /* Avoid the need to link with '-lpthread'. */ +# pragma weak pthread_mutex_lock +# pragma weak pthread_mutex_unlock + + /* Determine whether libpthread is in use. */ +# pragma weak pthread_mutexattr_gettype + /* See the comments in lock.h. */ +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) + +# else +# define pthread_in_use() 1 +# endif + +static char * +nl_langinfo_with_lock (nl_item item) +{ + if (pthread_in_use()) + { + pthread_mutex_t *lock = gl_get_nl_langinfo_lock (); + char *ret; + + if (pthread_mutex_lock (lock)) + abort (); + ret = nl_langinfo_unlocked (item); + if (pthread_mutex_unlock (lock)) + abort (); + + return ret; + } + else + return nl_langinfo_unlocked (item); +} + +# elif HAVE_THREADS_H + +extern mtx_t *gl_get_nl_langinfo_lock (void); + +static char * +nl_langinfo_with_lock (nl_item item) +{ + mtx_t *lock = gl_get_nl_langinfo_lock (); + char *ret; + + if (mtx_lock (lock) != thrd_success) + abort (); + ret = nl_langinfo_unlocked (item); + if (mtx_unlock (lock) != thrd_success) + abort (); + + return ret; +} + +# endif + +# else + +/* On other platforms, no lock is needed. */ +# define nl_langinfo_with_lock nl_langinfo + +# endif + +char * +rpl_nl_langinfo (nl_item item) +{ + switch (item) + { +# if GNULIB_defined_CODESET + case CODESET: + return ctype_codeset (); +# endif +# if GNULIB_defined_T_FMT_AMPM + case T_FMT_AMPM: + return (char *) "%I:%M:%S %p"; +# endif +# if GNULIB_defined_ALTMON + case ALTMON_1: + case ALTMON_2: + case ALTMON_3: + case ALTMON_4: + case ALTMON_5: + case ALTMON_6: + case ALTMON_7: + case ALTMON_8: + case ALTMON_9: + case ALTMON_10: + case ALTMON_11: + case ALTMON_12: + /* We don't ship the appropriate localizations with gnulib. Therefore, + treat ALTMON_i like MON_i. */ + item = item - ALTMON_1 + MON_1; + break; +# endif +# if GNULIB_defined_ERA + case ERA: + /* The format is not standardized. In glibc it is a sequence of strings + of the form "direction:offset:start_date:end_date:era_name:era_format" + with an empty string at the end. */ + return (char *) ""; + case ERA_D_FMT: + /* The %Ex conversion in strftime behaves like %x if the locale does not + have an alternative time format. */ + item = D_FMT; + break; + case ERA_D_T_FMT: + /* The %Ec conversion in strftime behaves like %c if the locale does not + have an alternative time format. */ + item = D_T_FMT; + break; + case ERA_T_FMT: + /* The %EX conversion in strftime behaves like %X if the locale does not + have an alternative time format. */ + item = T_FMT; + break; + case ALT_DIGITS: + /* The format is not standardized. In glibc it is a sequence of 10 + strings, appended in memory. */ + return (char *) "\0\0\0\0\0\0\0\0\0\0"; +# endif +# if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS + case YESEXPR: + return (char *) "^[yY]"; + case NOEXPR: + return (char *) "^[nN]"; +# endif + default: + break; + } + return nl_langinfo_with_lock (item); +} + +#else + +/* Provide nl_langinfo from scratch, either for native MS-Windows, or + for old Unix platforms without locales, such as Linux libc5 or + BeOS. */ + +# include + +char * +nl_langinfo (nl_item item) +{ + char buf[100]; + struct tm tmm = { 0 }; + + switch (item) + { + /* nl_langinfo items of the LC_CTYPE category */ + case CODESET: + { + char *codeset = ctype_codeset (); + if (*codeset) + return codeset; + } +# ifdef __BEOS__ + return (char *) "UTF-8"; +# else + return (char *) "ISO-8859-1"; +# endif + /* nl_langinfo items of the LC_NUMERIC category */ + case RADIXCHAR: + return localeconv () ->decimal_point; + case THOUSEP: + return localeconv () ->thousands_sep; +# ifdef GROUPING + case GROUPING: + return localeconv () ->grouping; +# endif + /* nl_langinfo items of the LC_TIME category. + TODO: Really use the locale. */ + case D_T_FMT: + case ERA_D_T_FMT: + return (char *) "%a %b %e %H:%M:%S %Y"; + case D_FMT: + case ERA_D_FMT: + return (char *) "%m/%d/%y"; + case T_FMT: + case ERA_T_FMT: + return (char *) "%H:%M:%S"; + case T_FMT_AMPM: + return (char *) "%I:%M:%S %p"; + case AM_STR: + { + static char result[80]; + if (!strftime (buf, sizeof result, "%p", &tmm)) + return (char *) "AM"; + strcpy (result, buf); + return result; + } + case PM_STR: + { + static char result[80]; + tmm.tm_hour = 12; + if (!strftime (buf, sizeof result, "%p", &tmm)) + return (char *) "PM"; + strcpy (result, buf); + return result; + } + case DAY_1: + case DAY_2: + case DAY_3: + case DAY_4: + case DAY_5: + case DAY_6: + case DAY_7: + { + static char result[7][50]; + static char const days[][sizeof "Wednesday"] = { + "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", + "Friday", "Saturday" + }; + tmm.tm_wday = item - DAY_1; + if (!strftime (buf, sizeof result[0], "%A", &tmm)) + return (char *) days[item - DAY_1]; + strcpy (result[item - DAY_1], buf); + return result[item - DAY_1]; + } + case ABDAY_1: + case ABDAY_2: + case ABDAY_3: + case ABDAY_4: + case ABDAY_5: + case ABDAY_6: + case ABDAY_7: + { + static char result[7][30]; + static char const abdays[][sizeof "Sun"] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; + tmm.tm_wday = item - ABDAY_1; + if (!strftime (buf, sizeof result[0], "%a", &tmm)) + return (char *) abdays[item - ABDAY_1]; + strcpy (result[item - ABDAY_1], buf); + return result[item - ABDAY_1]; + } + { + static char const months[][sizeof "September"] = { + "January", "February", "March", "April", "May", "June", "July", + "August", "September", "October", "November", "December" + }; + case MON_1: + case MON_2: + case MON_3: + case MON_4: + case MON_5: + case MON_6: + case MON_7: + case MON_8: + case MON_9: + case MON_10: + case MON_11: + case MON_12: + { + static char result[12][50]; + tmm.tm_mon = item - MON_1; + if (!strftime (buf, sizeof result[0], "%B", &tmm)) + return (char *) months[item - MON_1]; + strcpy (result[item - MON_1], buf); + return result[item - MON_1]; + } + case ALTMON_1: + case ALTMON_2: + case ALTMON_3: + case ALTMON_4: + case ALTMON_5: + case ALTMON_6: + case ALTMON_7: + case ALTMON_8: + case ALTMON_9: + case ALTMON_10: + case ALTMON_11: + case ALTMON_12: + { + static char result[12][50]; + tmm.tm_mon = item - ALTMON_1; + /* The platforms without nl_langinfo() don't support strftime with + %OB. We don't even need to try. */ + #if 0 + if (!strftime (buf, sizeof result[0], "%OB", &tmm)) + #endif + if (!strftime (buf, sizeof result[0], "%B", &tmm)) + return (char *) months[item - ALTMON_1]; + strcpy (result[item - ALTMON_1], buf); + return result[item - ALTMON_1]; + } + } + case ABMON_1: + case ABMON_2: + case ABMON_3: + case ABMON_4: + case ABMON_5: + case ABMON_6: + case ABMON_7: + case ABMON_8: + case ABMON_9: + case ABMON_10: + case ABMON_11: + case ABMON_12: + { + static char result[12][30]; + static char const abmonths[][sizeof "Jan"] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", + "Aug", "Sep", "Oct", "Nov", "Dec" + }; + tmm.tm_mon = item - ABMON_1; + if (!strftime (buf, sizeof result[0], "%b", &tmm)) + return (char *) abmonths[item - ABMON_1]; + strcpy (result[item - ABMON_1], buf); + return result[item - ABMON_1]; + } + case ERA: + return (char *) ""; + case ALT_DIGITS: + return (char *) "\0\0\0\0\0\0\0\0\0\0"; + /* nl_langinfo items of the LC_MONETARY category. */ + case CRNCYSTR: + return localeconv () ->currency_symbol; +# ifdef INT_CURR_SYMBOL + case INT_CURR_SYMBOL: + return localeconv () ->int_curr_symbol; + case MON_DECIMAL_POINT: + return localeconv () ->mon_decimal_point; + case MON_THOUSANDS_SEP: + return localeconv () ->mon_thousands_sep; + case MON_GROUPING: + return localeconv () ->mon_grouping; + case POSITIVE_SIGN: + return localeconv () ->positive_sign; + case NEGATIVE_SIGN: + return localeconv () ->negative_sign; + case FRAC_DIGITS: + return & localeconv () ->frac_digits; + case INT_FRAC_DIGITS: + return & localeconv () ->int_frac_digits; + case P_CS_PRECEDES: + return & localeconv () ->p_cs_precedes; + case N_CS_PRECEDES: + return & localeconv () ->n_cs_precedes; + case P_SEP_BY_SPACE: + return & localeconv () ->p_sep_by_space; + case N_SEP_BY_SPACE: + return & localeconv () ->n_sep_by_space; + case P_SIGN_POSN: + return & localeconv () ->p_sign_posn; + case N_SIGN_POSN: + return & localeconv () ->n_sign_posn; +# endif + /* nl_langinfo items of the LC_MESSAGES category + TODO: Really use the locale. */ + case YESEXPR: + return (char *) "^[yY]"; + case NOEXPR: + return (char *) "^[nN]"; + default: + return (char *) ""; + } +} + +#endif diff --git a/jni/parted/libgnulib/lib/progname.c b/jni/parted/libgnulib/lib/progname.c new file mode 100755 index 0000000..db17f5b --- /dev/null +++ b/jni/parted/libgnulib/lib/progname.c @@ -0,0 +1,92 @@ +/* Program name management. + Copyright (C) 2001-2003, 2005-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + + +#include + +/* Specification. */ +#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ +#include "progname.h" + +#include /* get program_invocation_name declaration */ +#include +#include +#include + + +/* String containing name the program is called with. + To be initialized by main(). */ +const char *program_name = NULL; + +/* Set program_name, based on argv[0]. + argv0 must be a string allocated with indefinite extent, and must not be + modified after this call. */ +void +set_program_name (const char *argv0) +{ + /* libtool creates a temporary executable whose name is sometimes prefixed + with "lt-" (depends on the platform). It also makes argv[0] absolute. + But the name of the temporary executable is a detail that should not be + visible to the end user and to the test suite. + Remove this "/.libs/" or "/.libs/lt-" prefix here. */ + const char *slash; + const char *base; + + /* Sanity check. POSIX requires the invoking process to pass a non-NULL + argv[0]. */ + if (argv0 == NULL) + { + /* It's a bug in the invoking program. Help diagnosing it. */ + fputs ("A NULL argv[0] was passed through an exec system call.\n", + stderr); + abort (); + } + + slash = strrchr (argv0, '/'); + base = (slash != NULL ? slash + 1 : argv0); + if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) + { + argv0 = base; + if (strncmp (base, "lt-", 3) == 0) + { + argv0 = base + 3; + /* On glibc systems, remove the "lt-" prefix from the variable + program_invocation_short_name. */ +#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME + program_invocation_short_name = (char *) argv0; +#endif + } + } + + /* But don't strip off a leading / in general, because when the user + runs + /some/hidden/place/bin/cp foo foo + he should get the error message + /some/hidden/place/bin/cp: `foo' and `foo' are the same file + not + cp: `foo' and `foo' are the same file + */ + + program_name = argv0; + + /* On glibc systems, the error() function comes from libc and uses the + variable program_invocation_name, not program_name. So set this variable + as well. */ +#if HAVE_DECL_PROGRAM_INVOCATION_NAME + program_invocation_name = (char *) argv0; +#endif +} diff --git a/jni/parted/libgnulib/lib/quotearg.c b/jni/parted/libgnulib/lib/quotearg.c new file mode 100755 index 0000000..8e359be --- /dev/null +++ b/jni/parted/libgnulib/lib/quotearg.c @@ -0,0 +1,1084 @@ +/* quotearg.c - quote arguments for output + + Copyright (C) 1998-2002, 2004-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Paul Eggert */ + +#include + +/* Without this pragma, gcc 4.7.0 20111124 mistakenly suggests that + the quoting_options_from_style function might be candidate for + attribute 'pure' */ +#if _GL_GNUC_PREREQ (4, 6) +# pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" +#endif + +#include "quotearg.h" +#include "quote.h" + +#include "attribute.h" +#include "minmax.h" +#include "xalloc.h" +#include "c-strcaseeq.h" +#include "localcharset.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +#define INT_BITS (sizeof (int) * CHAR_BIT) + +struct quoting_options +{ + /* Basic quoting style. */ + enum quoting_style style; + + /* Additional flags. Bitwise combination of enum quoting_flags. */ + int flags; + + /* Quote the characters indicated by this bit vector even if the + quoting style would not normally require them to be quoted. */ + unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1]; + + /* The left quote for custom_quoting_style. */ + char const *left_quote; + + /* The right quote for custom_quoting_style. */ + char const *right_quote; +}; + +/* Names of quoting styles. */ +char const *const quoting_style_args[] = +{ + "literal", + "shell", + "shell-always", + "shell-escape", + "shell-escape-always", + "c", + "c-maybe", + "escape", + "locale", + "clocale", + 0 +}; + +/* Correspondences to quoting style names. */ +enum quoting_style const quoting_style_vals[] = +{ + literal_quoting_style, + shell_quoting_style, + shell_always_quoting_style, + shell_escape_quoting_style, + shell_escape_always_quoting_style, + c_quoting_style, + c_maybe_quoting_style, + escape_quoting_style, + locale_quoting_style, + clocale_quoting_style +}; + +/* The default quoting options. */ +static struct quoting_options default_quoting_options; + +/* Allocate a new set of quoting options, with contents initially identical + to O if O is not null, or to the default if O is null. + It is the caller's responsibility to free the result. */ +struct quoting_options * +clone_quoting_options (struct quoting_options *o) +{ + int e = errno; + struct quoting_options *p = xmemdup (o ? o : &default_quoting_options, + sizeof *o); + errno = e; + return p; +} + +/* Get the value of O's quoting style. If O is null, use the default. */ +enum quoting_style +get_quoting_style (struct quoting_options const *o) +{ + return (o ? o : &default_quoting_options)->style; +} + +/* In O (or in the default if O is null), + set the value of the quoting style to S. */ +void +set_quoting_style (struct quoting_options *o, enum quoting_style s) +{ + (o ? o : &default_quoting_options)->style = s; +} + +/* In O (or in the default if O is null), + set the value of the quoting options for character C to I. + Return the old value. Currently, the only values defined for I are + 0 (the default) and 1 (which means to quote the character even if + it would not otherwise be quoted). */ +int +set_char_quoting (struct quoting_options *o, char c, int i) +{ + unsigned char uc = c; + unsigned int *p = + (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS; + int shift = uc % INT_BITS; + int r = (*p >> shift) & 1; + *p ^= ((i & 1) ^ r) << shift; + return r; +} + +/* In O (or in the default if O is null), + set the value of the quoting options flag to I, which can be a + bitwise combination of enum quoting_flags, or 0 for default + behavior. Return the old value. */ +int +set_quoting_flags (struct quoting_options *o, int i) +{ + int r; + if (!o) + o = &default_quoting_options; + r = o->flags; + o->flags = i; + return r; +} + +void +set_custom_quoting (struct quoting_options *o, + char const *left_quote, char const *right_quote) +{ + if (!o) + o = &default_quoting_options; + o->style = custom_quoting_style; + if (!left_quote || !right_quote) + abort (); + o->left_quote = left_quote; + o->right_quote = right_quote; +} + +/* Return quoting options for STYLE, with no extra quoting. */ +static struct quoting_options /* NOT PURE!! */ +quoting_options_from_style (enum quoting_style style) +{ + struct quoting_options o = { literal_quoting_style, 0, { 0 }, NULL, NULL }; + if (style == custom_quoting_style) + abort (); + o.style = style; + return o; +} + +/* MSGID approximates a quotation mark. Return its translation if it + has one; otherwise, return either it or "\"", depending on S. + + S is either clocale_quoting_style or locale_quoting_style. */ +static char const * +gettext_quote (char const *msgid, enum quoting_style s) +{ + char const *translation = _(msgid); + char const *locale_code; + + if (translation != msgid) + return translation; + + /* For UTF-8 and GB-18030, use single quotes U+2018 and U+2019. + Here is a list of other locales that include U+2018 and U+2019: + + ISO-8859-7 0xA1 KOI8-T 0x91 + CP869 0x8B CP874 0x91 + CP932 0x81 0x65 CP936 0xA1 0xAE + CP949 0xA1 0xAE CP950 0xA1 0xA5 + CP1250 0x91 CP1251 0x91 + CP1252 0x91 CP1253 0x91 + CP1254 0x91 CP1255 0x91 + CP1256 0x91 CP1257 0x91 + EUC-JP 0xA1 0xC6 EUC-KR 0xA1 0xAE + EUC-TW 0xA1 0xE4 BIG5 0xA1 0xA5 + BIG5-HKSCS 0xA1 0xA5 EUC-CN 0xA1 0xAE + GBK 0xA1 0xAE Georgian-PS 0x91 + PT154 0x91 + + None of these is still in wide use; using iconv is overkill. */ + locale_code = locale_charset (); + if (STRCASEEQ (locale_code, "UTF-8", 'U','T','F','-','8',0,0,0,0)) + return msgid[0] == '`' ? "\xe2\x80\x98": "\xe2\x80\x99"; + if (STRCASEEQ (locale_code, "GB18030", 'G','B','1','8','0','3','0',0,0)) + return msgid[0] == '`' ? "\xa1\ae": "\xa1\xaf"; + + return (s == clocale_quoting_style ? "\"" : "'"); +} + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG (of size ARGSIZE), using QUOTING_STYLE, FLAGS, and + QUOTE_THESE_TOO to control quoting. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. + + This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG, + ARGSIZE, O), except it breaks O into its component pieces and is + not careful about errno. */ + +static size_t +quotearg_buffer_restyled (char *buffer, size_t buffersize, + char const *arg, size_t argsize, + enum quoting_style quoting_style, int flags, + unsigned int const *quote_these_too, + char const *left_quote, + char const *right_quote) +{ + size_t i; + size_t len = 0; + size_t orig_buffersize = 0; + char const *quote_string = 0; + size_t quote_string_len = 0; + bool backslash_escapes = false; + bool unibyte_locale = MB_CUR_MAX == 1; + bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0; + bool encountered_single_quote = false; + bool all_c_and_shell_quote_compat = true; + +#define STORE(c) \ + do \ + { \ + if (len < buffersize) \ + buffer[len] = (c); \ + len++; \ + } \ + while (0) + +#define START_ESC() \ + do \ + { \ + if (elide_outer_quotes) \ + goto force_outer_quoting_style; \ + escaping = true; \ + if (quoting_style == shell_always_quoting_style \ + && ! pending_shell_escape_end) \ + { \ + STORE ('\''); \ + STORE ('$'); \ + STORE ('\''); \ + pending_shell_escape_end = true; \ + } \ + STORE ('\\'); \ + } \ + while (0) + +#define END_ESC() \ + do \ + { \ + if (pending_shell_escape_end && ! escaping) \ + { \ + STORE ('\''); \ + STORE ('\''); \ + pending_shell_escape_end = false; \ + } \ + } \ + while (0) + + process_input: ; + bool pending_shell_escape_end = false; + + switch (quoting_style) + { + case c_maybe_quoting_style: + quoting_style = c_quoting_style; + elide_outer_quotes = true; + FALLTHROUGH; + case c_quoting_style: + if (!elide_outer_quotes) + STORE ('"'); + backslash_escapes = true; + quote_string = "\""; + quote_string_len = 1; + break; + + case escape_quoting_style: + backslash_escapes = true; + elide_outer_quotes = false; + break; + + case locale_quoting_style: + case clocale_quoting_style: + case custom_quoting_style: + { + if (quoting_style != custom_quoting_style) + { + /* TRANSLATORS: + Get translations for open and closing quotation marks. + The message catalog should translate "`" to a left + quotation mark suitable for the locale, and similarly for + "'". For example, a French Unicode local should translate + these to U+00AB (LEFT-POINTING DOUBLE ANGLE + QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE + QUOTATION MARK), respectively. + + If the catalog has no translation, we will try to + use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and + Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the + current locale is not Unicode, locale_quoting_style + will quote 'like this', and clocale_quoting_style will + quote "like this". You should always include translations + for "`" and "'" even if U+2018 and U+2019 are appropriate + for your locale. + + If you don't know what to put here, please see + + and use glyphs suitable for your language. */ + left_quote = gettext_quote (N_("`"), quoting_style); + right_quote = gettext_quote (N_("'"), quoting_style); + } + if (!elide_outer_quotes) + for (quote_string = left_quote; *quote_string; quote_string++) + STORE (*quote_string); + backslash_escapes = true; + quote_string = right_quote; + quote_string_len = strlen (quote_string); + } + break; + + case shell_escape_quoting_style: + backslash_escapes = true; + FALLTHROUGH; + case shell_quoting_style: + elide_outer_quotes = true; + FALLTHROUGH; + case shell_escape_always_quoting_style: + if (!elide_outer_quotes) + backslash_escapes = true; + FALLTHROUGH; + case shell_always_quoting_style: + quoting_style = shell_always_quoting_style; + if (!elide_outer_quotes) + STORE ('\''); + quote_string = "'"; + quote_string_len = 1; + break; + + case literal_quoting_style: + elide_outer_quotes = false; + break; + + default: + abort (); + } + + for (i = 0; ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize); i++) + { + unsigned char c; + unsigned char esc; + bool is_right_quote = false; + bool escaping = false; + bool c_and_shell_quote_compat = false; + + if (backslash_escapes + && quoting_style != shell_always_quoting_style + && quote_string_len + && (i + quote_string_len + <= (argsize == SIZE_MAX && 1 < quote_string_len + /* Use strlen only if we must: when argsize is SIZE_MAX, + and when the quote string is more than 1 byte long. + If we do call strlen, save the result. */ + ? (argsize = strlen (arg)) : argsize)) + && memcmp (arg + i, quote_string, quote_string_len) == 0) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + is_right_quote = true; + } + + c = arg[i]; + switch (c) + { + case '\0': + if (backslash_escapes) + { + START_ESC (); + /* If quote_string were to begin with digits, we'd need to + test for the end of the arg as well. However, it's + hard to imagine any locale that would use digits in + quotes, and set_custom_quoting is documented not to + accept them. Use only a single \0 with shell-escape + as currently digits are not printed within $'...' */ + if (quoting_style != shell_always_quoting_style + && i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9') + { + STORE ('0'); + STORE ('0'); + } + c = '0'; + /* We don't have to worry that this last '0' will be + backslash-escaped because, again, quote_string should + not start with it and because quote_these_too is + documented as not accepting it. */ + } + else if (flags & QA_ELIDE_NULL_BYTES) + continue; + break; + + case '?': + switch (quoting_style) + { + case shell_always_quoting_style: + if (elide_outer_quotes) + goto force_outer_quoting_style; + break; + + case c_quoting_style: + if ((flags & QA_SPLIT_TRIGRAPHS) + && i + 2 < argsize && arg[i + 1] == '?') + switch (arg[i + 2]) + { + case '!': case '\'': + case '(': case ')': case '-': case '/': + case '<': case '=': case '>': + /* Escape the second '?' in what would otherwise be + a trigraph. */ + if (elide_outer_quotes) + goto force_outer_quoting_style; + c = arg[i + 2]; + i += 2; + STORE ('?'); + STORE ('"'); + STORE ('"'); + STORE ('?'); + break; + + default: + break; + } + break; + + default: + break; + } + break; + + case '\a': esc = 'a'; goto c_escape; + case '\b': esc = 'b'; goto c_escape; + case '\f': esc = 'f'; goto c_escape; + case '\n': esc = 'n'; goto c_and_shell_escape; + case '\r': esc = 'r'; goto c_and_shell_escape; + case '\t': esc = 't'; goto c_and_shell_escape; + case '\v': esc = 'v'; goto c_escape; + case '\\': esc = c; + /* Never need to escape '\' in shell case. */ + if (quoting_style == shell_always_quoting_style) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + goto store_c; + } + + /* No need to escape the escape if we are trying to elide + outer quotes and nothing else is problematic. */ + if (backslash_escapes && elide_outer_quotes && quote_string_len) + goto store_c; + + c_and_shell_escape: + if (quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + /* fall through */ + c_escape: + if (backslash_escapes) + { + c = esc; + goto store_escape; + } + break; + + case '{': case '}': /* sometimes special if isolated */ + if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1)) + break; + FALLTHROUGH; + case '#': case '~': + if (i != 0) + break; + FALLTHROUGH; + case ' ': + c_and_shell_quote_compat = true; + FALLTHROUGH; + case '!': /* special in bash */ + case '"': case '$': case '&': + case '(': case ')': case '*': case ';': + case '<': + case '=': /* sometimes special in 0th or (with "set -k") later args */ + case '>': case '[': + case '^': /* special in old /bin/sh, e.g., Solaris 10 */ + case '`': case '|': + /* A shell special character. */ + if (quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + break; + + case '\'': + encountered_single_quote = true; + c_and_shell_quote_compat = true; + if (quoting_style == shell_always_quoting_style) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + + if (buffersize && ! orig_buffersize) + { + /* Just scan string to see if supports a more concise + representation, rather than writing a longer string + but returning the length of the more concise form. */ + orig_buffersize = buffersize; + buffersize = 0; + } + + STORE ('\''); + STORE ('\\'); + STORE ('\''); + pending_shell_escape_end = false; + } + break; + + case '%': case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': case ':': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': case ']': case '_': case 'a': case 'b': + case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': + case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': + case 'o': case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': + /* These characters don't cause problems, no matter what the + quoting style is. They cannot start multibyte sequences. + A digit or a special letter would cause trouble if it + appeared at the beginning of quote_string because we'd then + escape by prepending a backslash. However, it's hard to + imagine any locale that would use digits or letters as + quotes, and set_custom_quoting is documented not to accept + them. Also, a digit or a special letter would cause + trouble if it appeared in quote_these_too, but that's also + documented as not accepting them. */ + c_and_shell_quote_compat = true; + break; + + default: + /* If we have a multibyte sequence, copy it until we reach + its end, find an error, or come back to the initial shift + state. For C-like styles, if the sequence has + unprintable characters, escape the whole sequence, since + we can't easily escape single characters within it. */ + { + /* Length of multibyte sequence found so far. */ + size_t m; + + bool printable; + + if (unibyte_locale) + { + m = 1; + printable = isprint (c) != 0; + } + else + { + mbstate_t mbstate; + mbszero (&mbstate); + + m = 0; + printable = true; + if (argsize == SIZE_MAX) + argsize = strlen (arg); + + for (;;) + { + char32_t w; + size_t bytes = mbrtoc32 (&w, &arg[i + m], + argsize - (i + m), &mbstate); + if (bytes == 0) + break; + else if (bytes == (size_t) -1) + { + printable = false; + break; + } + else if (bytes == (size_t) -2) + { + printable = false; + while (i + m < argsize && arg[i + m]) + m++; + break; + } + else + { + #if !GNULIB_MBRTOC32_REGULAR + if (bytes == (size_t) -3) + bytes = 0; + #endif + /* Work around a bug with older shells that "see" a '\' + that is really the 2nd byte of a multibyte character. + In practice the problem is limited to ASCII + chars >= '@' that are shell special chars. */ + if ('[' == 0x5b && elide_outer_quotes + && quoting_style == shell_always_quoting_style) + { + size_t j; + for (j = 1; j < bytes; j++) + switch (arg[i + m + j]) + { + case '[': case '\\': case '^': + case '`': case '|': + goto force_outer_quoting_style; + + default: + break; + } + } + + if (! c32isprint (w)) + printable = false; + m += bytes; + } + #if !GNULIB_MBRTOC32_REGULAR + if (mbsinit (&mbstate)) + #endif + break; + } + } + + c_and_shell_quote_compat = printable; + + if (1 < m || (backslash_escapes && ! printable)) + { + /* Output a multibyte sequence, or an escaped + unprintable unibyte character. */ + size_t ilim = i + m; + + for (;;) + { + if (backslash_escapes && ! printable) + { + START_ESC (); + STORE ('0' + (c >> 6)); + STORE ('0' + ((c >> 3) & 7)); + c = '0' + (c & 7); + } + else if (is_right_quote) + { + STORE ('\\'); + is_right_quote = false; + } + if (ilim <= i + 1) + break; + END_ESC (); + STORE (c); + c = arg[++i]; + } + + goto store_c; + } + } + } + + if (! (((backslash_escapes && quoting_style != shell_always_quoting_style) + || elide_outer_quotes) + && quote_these_too + && quote_these_too[c / INT_BITS] >> (c % INT_BITS) & 1) + && !is_right_quote) + goto store_c; + + store_escape: + START_ESC (); + + store_c: + END_ESC (); + STORE (c); + + if (! c_and_shell_quote_compat) + all_c_and_shell_quote_compat = false; + } + + if (len == 0 && quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + + /* Single shell quotes (') are commonly enough used as an apostrophe, + that we attempt to minimize the quoting in this case. Note itʼs + better to use the apostrophe modifier "\u02BC" if possible, as that + renders better and works with the word match regex \W+ etc. */ + if (quoting_style == shell_always_quoting_style && ! elide_outer_quotes + && encountered_single_quote) + { + if (all_c_and_shell_quote_compat) + return quotearg_buffer_restyled (buffer, orig_buffersize, arg, argsize, + c_quoting_style, + flags, quote_these_too, + left_quote, right_quote); + else if (! buffersize && orig_buffersize) + { + /* Disable read-only scan, and reprocess to write quoted string. */ + buffersize = orig_buffersize; + len = 0; + goto process_input; + } + } + + if (quote_string && !elide_outer_quotes) + for (; *quote_string; quote_string++) + STORE (*quote_string); + + if (len < buffersize) + buffer[len] = '\0'; + return len; + + force_outer_quoting_style: + /* Don't reuse quote_these_too, since the addition of outer quotes + sufficiently quotes the specified characters. */ + if (quoting_style == shell_always_quoting_style && backslash_escapes) + quoting_style = shell_escape_always_quoting_style; + return quotearg_buffer_restyled (buffer, buffersize, arg, argsize, + quoting_style, + flags & ~QA_ELIDE_OUTER_QUOTES, NULL, + left_quote, right_quote); +} + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG (of size ARGSIZE), using O to control quoting. + If O is null, use the default. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + If ARGSIZE is SIZE_MAX, use the string length of the argument for + ARGSIZE. */ +size_t +quotearg_buffer (char *buffer, size_t buffersize, + char const *arg, size_t argsize, + struct quoting_options const *o) +{ + struct quoting_options const *p = o ? o : &default_quoting_options; + int e = errno; + size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize, + p->style, p->flags, p->quote_these_too, + p->left_quote, p->right_quote); + errno = e; + return r; +} + +char * +quotearg_alloc (char const *arg, size_t argsize, + struct quoting_options const *o) +{ + return quotearg_alloc_mem (arg, argsize, NULL, o); +} + +/* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly + allocated storage containing the quoted string, and store the + resulting size into *SIZE, if non-NULL. The result can contain + embedded null bytes only if ARGSIZE is not SIZE_MAX, SIZE is not + NULL, and set_quoting_flags has not set the null byte elision + flag. */ +char * +quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size, + struct quoting_options const *o) +{ + struct quoting_options const *p = o ? o : &default_quoting_options; + int e = errno; + /* Elide embedded null bytes if we can't return a size. */ + int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES); + size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style, + flags, p->quote_these_too, + p->left_quote, + p->right_quote) + 1; + char *buf = xcharalloc (bufsize); + quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags, + p->quote_these_too, + p->left_quote, p->right_quote); + errno = e; + if (size) + *size = bufsize - 1; + return buf; +} + +/* A storage slot with size and pointer to a value. */ +struct slotvec +{ + size_t size; + char *val; +}; + +/* Preallocate a slot 0 buffer, so that the caller can always quote + one small component of a "memory exhausted" message in slot 0. */ +static char slot0[256]; +static int nslots = 1; +static struct slotvec slotvec0 = {sizeof slot0, slot0}; +static struct slotvec *slotvec = &slotvec0; + +void +quotearg_free (void) +{ + struct slotvec *sv = slotvec; + int i; + for (i = 1; i < nslots; i++) + free (sv[i].val); + if (sv[0].val != slot0) + { + free (sv[0].val); + slotvec0.size = sizeof slot0; + slotvec0.val = slot0; + } + if (sv != &slotvec0) + { + free (sv); + slotvec = &slotvec0; + } + nslots = 1; +} + +/* Use storage slot N to return a quoted version of argument ARG. + ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a + null-terminated string. + OPTIONS specifies the quoting options. + The returned value points to static storage that can be + reused by the next call to this function with the same value of N. + N must be nonnegative; it is typically small, and must be + less than MIN (INT_MAX, IDX_MAX). The type of N is signed + to allow for future extensions (using negative values). */ +static char * +quotearg_n_options (int n, char const *arg, size_t argsize, + struct quoting_options const *options) +{ + int e = errno; + + struct slotvec *sv = slotvec; + + int nslots_max = MIN (INT_MAX, IDX_MAX); + if (! (0 <= n && n < nslots_max)) + abort (); + + if (nslots <= n) + { + bool preallocated = (sv == &slotvec0); + idx_t new_nslots = nslots; + + slotvec = sv = xpalloc (preallocated ? NULL : sv, &new_nslots, + n - nslots + 1, nslots_max, sizeof *sv); + if (preallocated) + *sv = slotvec0; + memset (sv + nslots, 0, (new_nslots - nslots) * sizeof *sv); + nslots = new_nslots; + } + + { + size_t size = sv[n].size; + char *val = sv[n].val; + /* Elide embedded null bytes since we don't return a size. */ + int flags = options->flags | QA_ELIDE_NULL_BYTES; + size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize, + options->style, flags, + options->quote_these_too, + options->left_quote, + options->right_quote); + + if (size <= qsize) + { + sv[n].size = size = qsize + 1; + if (val != slot0) + free (val); + sv[n].val = val = xcharalloc (size); + quotearg_buffer_restyled (val, size, arg, argsize, options->style, + flags, options->quote_these_too, + options->left_quote, + options->right_quote); + } + + errno = e; + return val; + } +} + +char * +quotearg_n (int n, char const *arg) +{ + return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options); +} + +char * +quotearg_n_mem (int n, char const *arg, size_t argsize) +{ + return quotearg_n_options (n, arg, argsize, &default_quoting_options); +} + +char * +quotearg (char const *arg) +{ + return quotearg_n (0, arg); +} + +char * +quotearg_mem (char const *arg, size_t argsize) +{ + return quotearg_n_mem (0, arg, argsize); +} + +char * +quotearg_n_style (int n, enum quoting_style s, char const *arg) +{ + struct quoting_options const o = quoting_options_from_style (s); + return quotearg_n_options (n, arg, SIZE_MAX, &o); +} + +char * +quotearg_n_style_mem (int n, enum quoting_style s, + char const *arg, size_t argsize) +{ + struct quoting_options const o = quoting_options_from_style (s); + return quotearg_n_options (n, arg, argsize, &o); +} + +char * +quotearg_style (enum quoting_style s, char const *arg) +{ + return quotearg_n_style (0, s, arg); +} + +char * +quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize) +{ + return quotearg_n_style_mem (0, s, arg, argsize); +} + +char * +quotearg_char_mem (char const *arg, size_t argsize, char ch) +{ + struct quoting_options options; + options = default_quoting_options; + set_char_quoting (&options, ch, 1); + return quotearg_n_options (0, arg, argsize, &options); +} + +char * +quotearg_char (char const *arg, char ch) +{ + return quotearg_char_mem (arg, SIZE_MAX, ch); +} + +char * +quotearg_colon (char const *arg) +{ + return quotearg_char (arg, ':'); +} + +char * +quotearg_colon_mem (char const *arg, size_t argsize) +{ + return quotearg_char_mem (arg, argsize, ':'); +} + +char * +quotearg_n_style_colon (int n, enum quoting_style s, char const *arg) +{ + struct quoting_options options; + options = quoting_options_from_style (s); + set_char_quoting (&options, ':', 1); + return quotearg_n_options (n, arg, SIZE_MAX, &options); +} + +char * +quotearg_n_custom (int n, char const *left_quote, + char const *right_quote, char const *arg) +{ + return quotearg_n_custom_mem (n, left_quote, right_quote, arg, + SIZE_MAX); +} + +char * +quotearg_n_custom_mem (int n, char const *left_quote, + char const *right_quote, + char const *arg, size_t argsize) +{ + struct quoting_options o = default_quoting_options; + set_custom_quoting (&o, left_quote, right_quote); + return quotearg_n_options (n, arg, argsize, &o); +} + +char * +quotearg_custom (char const *left_quote, char const *right_quote, + char const *arg) +{ + return quotearg_n_custom (0, left_quote, right_quote, arg); +} + +char * +quotearg_custom_mem (char const *left_quote, char const *right_quote, + char const *arg, size_t argsize) +{ + return quotearg_n_custom_mem (0, left_quote, right_quote, arg, + argsize); +} + + +/* The quoting option used by the functions of quote.h. */ +struct quoting_options quote_quoting_options = + { + locale_quoting_style, + 0, + { 0 }, + NULL, NULL + }; + +char const * +quote_n_mem (int n, char const *arg, size_t argsize) +{ + return quotearg_n_options (n, arg, argsize, "e_quoting_options); +} + +char const * +quote_mem (char const *arg, size_t argsize) +{ + return quote_n_mem (0, arg, argsize); +} + +char const * +quote_n (int n, char const *arg) +{ + return quote_n_mem (n, arg, SIZE_MAX); +} + +char const * +quote (char const *arg) +{ + return quote_n (0, arg); +} + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/jni/parted/libgnulib/lib/rawmemchr.c b/jni/parted/libgnulib/lib/rawmemchr.c new file mode 100755 index 0000000..013e7f8 --- /dev/null +++ b/jni/parted/libgnulib/lib/rawmemchr.c @@ -0,0 +1,135 @@ +/* Searching in a string. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* A function definition is needed only if HAVE_RAWMEMCHR is not defined. */ +#if !HAVE_RAWMEMCHR + +# include +# include + + +/* Find the first occurrence of C in S. */ +void * +rawmemchr (const void *s, int c_in) +{ +# ifdef __CHERI_PURE_CAPABILITY__ + /* Most architectures let you read an aligned word, + even if the unsigned char array at S ends in the middle of the word. + However CHERI does not, so call memchr + with the underlying object's remaining length. + This cannot return NULL if S points to a C_IN-terminated array. + Use builtins rather than including which is less stable. */ + return memchr (s, c_in, (__builtin_cheri_length_get (s) + - __builtin_cheri_offset_get (s))); +# else + + /* You can change this typedef to experiment with performance. */ + typedef uintptr_t longword; + /* Verify that the longword type lacks padding bits. */ + static_assert (UINTPTR_WIDTH == UCHAR_WIDTH * sizeof (uintptr_t)); + + const unsigned char *char_ptr; + unsigned char c = c_in; + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a natural longword boundary, + as using alignof (longword) might be slower. */ + for (char_ptr = (const unsigned char *) s; + (uintptr_t) char_ptr % sizeof (longword) != 0; + ++char_ptr) + if (*char_ptr == c) + return (void *) char_ptr; + + longword const *longword_ptr = s = char_ptr; + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + longword repeated_one = (longword) -1 / UCHAR_MAX; + longword repeated_c = repeated_one * c; + longword repeated_hibit = repeated_one * (UCHAR_MAX / 2 + 1); + + /* Instead of the traditional loop which tests each byte, we will + test a longword at a time. The tricky part is testing if any of + the bytes in the longword in question are equal to + c. We first use an xor with repeated_c. This reduces the task + to testing whether any of the bytes in longword1 is zero. + + (The following comments assume 8-bit bytes, as POSIX requires; + the code's use of UCHAR_MAX should work even if bytes have more + than 8 bits.) + + We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one * 0x80). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + The test whether any byte in longword1 is zero is equivalent + to testing whether tmp is nonzero. + + This test can read beyond the end of a string, depending on where + C_IN is encountered. However, this is considered safe since the + initialization phase ensured that the read will be aligned, + therefore, the read will not cross page boundaries and will not + cause a fault. */ + + while (1) + { + longword longword1 = *longword_ptr ^ repeated_c; + + if ((((longword1 - repeated_one) & ~longword1) & repeated_hibit) != 0) + break; + longword_ptr++; + } + + char_ptr = s = longword_ptr; + + /* At this point, we know that one of the sizeof (longword) bytes + starting at char_ptr is == c. If we knew endianness, we + could determine the first such byte without any further memory + accesses, just by looking at the tmp result from the last loop + iteration. However, the following simple and portable code does + not attempt this potential optimization. */ + + while (*char_ptr != c) + char_ptr++; + return (void *) char_ptr; +# endif +} + +#endif diff --git a/jni/parted/libgnulib/lib/regcomp.c b/jni/parted/libgnulib/lib/regcomp.c new file mode 100755 index 0000000..696cf81 --- /dev/null +++ b/jni/parted/libgnulib/lib/regcomp.c @@ -0,0 +1,3788 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifdef _LIBC +# include +#endif + +static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, + size_t length, reg_syntax_t syntax); +static void re_compile_fastmap_iter (regex_t *bufp, + const re_dfastate_t *init_state, + char *fastmap); +static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len); +static void free_charset (re_charset_t *cset); +static void free_workarea_compile (regex_t *preg); +static reg_errcode_t create_initial_state (re_dfa_t *dfa); +static void optimize_utf8 (re_dfa_t *dfa); +static reg_errcode_t analyze (regex_t *preg); +static reg_errcode_t preorder (bin_tree_t *root, + reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra); +static reg_errcode_t postorder (bin_tree_t *root, + reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra); +static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node); +static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node); +static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg, + bin_tree_t *node); +static reg_errcode_t calc_first (void *extra, bin_tree_t *node); +static reg_errcode_t calc_next (void *extra, bin_tree_t *node); +static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node); +static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint); +static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, + unsigned int constraint); +static reg_errcode_t calc_eclosure (re_dfa_t *dfa); +static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, + Idx node, bool root); +static reg_errcode_t calc_inveclosure (re_dfa_t *dfa); +static Idx fetch_number (re_string_t *input, re_token_t *token, + reg_syntax_t syntax); +static int peek_token (re_token_t *token, re_string_t *input, + reg_syntax_t syntax); +static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, + reg_syntax_t syntax, reg_errcode_t *err); +static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, + re_dfa_t *dfa, re_token_t *token, + reg_syntax_t syntax, reg_errcode_t *err); +static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, + re_token_t *token, reg_syntax_t syntax, + reg_errcode_t *err); +static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, + re_string_t *regexp, + re_token_t *token, int token_len, + re_dfa_t *dfa, + reg_syntax_t syntax, + bool accept_hyphen); +static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, + re_string_t *regexp, + re_token_t *token); +static reg_errcode_t build_equiv_class (bitset_t sbcset, + re_charset_t *mbcset, + Idx *equiv_class_alloc, + const unsigned char *name); +static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, + bitset_t sbcset, + re_charset_t *mbcset, + Idx *char_class_alloc, + const char *class_name, + reg_syntax_t syntax); +static bin_tree_t *build_charclass_op (re_dfa_t *dfa, + RE_TRANSLATE_TYPE trans, + const char *class_name, + const char *extra, + bool non_match, reg_errcode_t *err); +static bin_tree_t *create_tree (re_dfa_t *dfa, + bin_tree_t *left, bin_tree_t *right, + re_token_type_t type); +static bin_tree_t *create_token_tree (re_dfa_t *dfa, + bin_tree_t *left, bin_tree_t *right, + const re_token_t *token); +static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); +static void free_token (re_token_t *node); +static reg_errcode_t free_tree (void *extra, bin_tree_t *node); +static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node); + +/* This table gives an error message for each of the error codes listed + in regex.h. Obviously the order here has to be same as there. + POSIX doesn't require that we do anything for REG_NOERROR, + but why not be nice? */ + +static const char __re_error_msgid[] = + { +#define REG_NOERROR_IDX 0 + gettext_noop ("Success") /* REG_NOERROR */ + "\0" +#define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") + gettext_noop ("No match") /* REG_NOMATCH */ + "\0" +#define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") + gettext_noop ("Invalid regular expression") /* REG_BADPAT */ + "\0" +#define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") + gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ + "\0" +#define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") + gettext_noop ("Invalid character class name") /* REG_ECTYPE */ + "\0" +#define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") + gettext_noop ("Trailing backslash") /* REG_EESCAPE */ + "\0" +#define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") + gettext_noop ("Invalid back reference") /* REG_ESUBREG */ + "\0" +#define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") + gettext_noop ("Unmatched [, [^, [:, [., or [=") /* REG_EBRACK */ + "\0" +#define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [, [^, [:, [., or [=") + gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ + "\0" +#define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") + gettext_noop ("Unmatched \\{") /* REG_EBRACE */ + "\0" +#define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") + gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ + "\0" +#define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") + gettext_noop ("Invalid range end") /* REG_ERANGE */ + "\0" +#define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") + gettext_noop ("Memory exhausted") /* REG_ESPACE */ + "\0" +#define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") + gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ + "\0" +#define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") + gettext_noop ("Premature end of regular expression") /* REG_EEND */ + "\0" +#define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") + gettext_noop ("Regular expression too big") /* REG_ESIZE */ + "\0" +#define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") + gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ + }; + +static const size_t __re_error_msgid_idx[] = + { + REG_NOERROR_IDX, + REG_NOMATCH_IDX, + REG_BADPAT_IDX, + REG_ECOLLATE_IDX, + REG_ECTYPE_IDX, + REG_EESCAPE_IDX, + REG_ESUBREG_IDX, + REG_EBRACK_IDX, + REG_EPAREN_IDX, + REG_EBRACE_IDX, + REG_BADBR_IDX, + REG_ERANGE_IDX, + REG_ESPACE_IDX, + REG_BADRPT_IDX, + REG_EEND_IDX, + REG_ESIZE_IDX, + REG_ERPAREN_IDX + }; + +/* Entry points for GNU code. */ + +/* re_compile_pattern is the GNU regular expression compiler: it + compiles PATTERN (of length LENGTH) and puts the result in BUFP. + Returns 0 if the pattern was valid, otherwise an error string. + + Assumes the 'allocated' (and perhaps 'buffer') and 'translate' fields + are set in BUFP on entry. */ + +const char * +re_compile_pattern (const char *pattern, size_t length, + struct re_pattern_buffer *bufp) +{ + reg_errcode_t ret; + + /* And GNU code determines whether or not to get register information + by passing null for the REGS argument to re_match, etc., not by + setting no_sub, unless RE_NO_SUB is set. */ + bufp->no_sub = !!(re_syntax_options & RE_NO_SUB); + + /* Match anchors at newline. */ + bufp->newline_anchor = 1; + + ret = re_compile_internal (bufp, pattern, length, re_syntax_options); + + if (!ret) + return NULL; + return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); +} +weak_alias (__re_compile_pattern, re_compile_pattern) + +/* Set by 're_set_syntax' to the current regexp syntax to recognize. Can + also be assigned to arbitrarily: each pattern buffer stores its own + syntax, so it can be changed between regex compilations. */ +/* This has no initializer because initialized variables in Emacs + become read-only after dumping. */ +reg_syntax_t re_syntax_options; + + +/* Specify the precise syntax of regexps for compilation. This provides + for compatibility for various utilities which historically have + different, incompatible syntaxes. + + The argument SYNTAX is a bit mask comprised of the various bits + defined in regex.h. We return the old syntax. */ + +reg_syntax_t +re_set_syntax (reg_syntax_t syntax) +{ + reg_syntax_t ret = re_syntax_options; + + re_syntax_options = syntax; + return ret; +} +weak_alias (__re_set_syntax, re_set_syntax) + +int +re_compile_fastmap (struct re_pattern_buffer *bufp) +{ + re_dfa_t *dfa = bufp->buffer; + char *fastmap = bufp->fastmap; + + memset (fastmap, '\0', sizeof (char) * SBC_MAX); + re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); + if (dfa->init_state != dfa->init_state_word) + re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); + if (dfa->init_state != dfa->init_state_nl) + re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); + if (dfa->init_state != dfa->init_state_begbuf) + re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); + bufp->fastmap_accurate = 1; + return 0; +} +weak_alias (__re_compile_fastmap, re_compile_fastmap) + +static __always_inline void +re_set_fastmap (char *fastmap, bool icase, int ch) +{ + fastmap[ch] = 1; + if (icase) + fastmap[tolower (ch)] = 1; +} + +/* Helper function for re_compile_fastmap. + Compile fastmap for the initial_state INIT_STATE. */ + +static void +re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, + char *fastmap) +{ + re_dfa_t *dfa = bufp->buffer; + Idx node_cnt; + bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE)); + for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) + { + Idx node = init_state->nodes.elems[node_cnt]; + re_token_type_t type = dfa->nodes[node].type; + + if (type == CHARACTER) + { + re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c); + if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) + { + unsigned char buf[MB_LEN_MAX]; + unsigned char *p; + wchar_t wc; + mbstate_t state; + + p = buf; + *p++ = dfa->nodes[node].opr.c; + while (++node < dfa->nodes_len + && dfa->nodes[node].type == CHARACTER + && dfa->nodes[node].mb_partial) + *p++ = dfa->nodes[node].opr.c; + memset (&state, '\0', sizeof (state)); + if (__mbrtowc (&wc, (const char *) buf, p - buf, + &state) == p - buf + && (__wcrtomb ((char *) buf, __towlower (wc), &state) + != (size_t) -1)) + re_set_fastmap (fastmap, false, buf[0]); + } + } + else if (type == SIMPLE_BRACKET) + { + int i, ch; + for (i = 0, ch = 0; i < BITSET_WORDS; ++i) + { + int j; + bitset_word_t w = dfa->nodes[node].opr.sbcset[i]; + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + if (w & ((bitset_word_t) 1 << j)) + re_set_fastmap (fastmap, icase, ch); + } + } + else if (type == COMPLEX_BRACKET) + { + re_charset_t *cset = dfa->nodes[node].opr.mbcset; + Idx i; + +#ifdef _LIBC + /* See if we have to try all bytes which start multiple collation + elements. + e.g. In da_DK, we want to catch 'a' since "aa" is a valid + collation element, and don't catch 'b' since 'b' is + the only collation element which starts from 'b' (and + it is caught by SIMPLE_BRACKET). */ + if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0 + && (cset->ncoll_syms || cset->nranges)) + { + const int32_t *table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + for (i = 0; i < SBC_MAX; ++i) + if (table[i] < 0) + re_set_fastmap (fastmap, icase, i); + } +#endif /* _LIBC */ + + /* See if we have to start the match at all multibyte characters, + i.e. where we would not find an invalid sequence. This only + applies to multibyte character sets; for single byte character + sets, the SIMPLE_BRACKET again suffices. */ + if (dfa->mb_cur_max > 1 + && (cset->nchar_classes || cset->non_match || cset->nranges +#ifdef _LIBC + || cset->nequiv_classes +#endif /* _LIBC */ + )) + { + unsigned char c = 0; + do + { + mbstate_t mbs; + memset (&mbs, 0, sizeof (mbs)); + if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2) + re_set_fastmap (fastmap, false, (int) c); + } + while (++c != 0); + } + + else + { + /* ... Else catch all bytes which can start the mbchars. */ + for (i = 0; i < cset->nmbchars; ++i) + { + char buf[256]; + mbstate_t state; + memset (&state, '\0', sizeof (state)); + if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1) + re_set_fastmap (fastmap, icase, *(unsigned char *) buf); + if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) + { + if (__wcrtomb (buf, __towlower (cset->mbchars[i]), &state) + != (size_t) -1) + re_set_fastmap (fastmap, false, *(unsigned char *) buf); + } + } + } + } + else if (type == OP_PERIOD || type == OP_UTF8_PERIOD || type == END_OF_RE) + { + memset (fastmap, '\1', sizeof (char) * SBC_MAX); + if (type == END_OF_RE) + bufp->can_be_null = 1; + return; + } + } +} + +/* Entry point for POSIX code. */ +/* regcomp takes a regular expression as a string and compiles it. + + PREG is a regex_t *. We do not expect any fields to be initialized, + since POSIX says we shouldn't. Thus, we set + + 'buffer' to the compiled pattern; + 'used' to the length of the compiled pattern; + 'syntax' to RE_SYNTAX_POSIX_EXTENDED if the + REG_EXTENDED bit in CFLAGS is set; otherwise, to + RE_SYNTAX_POSIX_BASIC; + 'newline_anchor' to REG_NEWLINE being set in CFLAGS; + 'fastmap' to an allocated space for the fastmap; + 'fastmap_accurate' to zero; + 're_nsub' to the number of subexpressions in PATTERN. + + PATTERN is the address of the pattern string. + + CFLAGS is a series of bits which affect compilation. + + If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we + use POSIX basic syntax. + + If REG_NEWLINE is set, then . and [^...] don't match newline. + Also, regexec will try a match beginning after every newline. + + If REG_ICASE is set, then we considers upper- and lowercase + versions of letters to be equivalent when matching. + + If REG_NOSUB is set, then when PREG is passed to regexec, that + routine will report only success or failure, and nothing about the + registers. + + It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for + the return codes and their meanings.) */ + +int +regcomp (regex_t *__restrict preg, const char *__restrict pattern, int cflags) +{ + reg_errcode_t ret; + reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED + : RE_SYNTAX_POSIX_BASIC); + + preg->buffer = NULL; + preg->allocated = 0; + preg->used = 0; + + /* Try to allocate space for the fastmap. */ + preg->fastmap = re_malloc (char, SBC_MAX); + if (__glibc_unlikely (preg->fastmap == NULL)) + return REG_ESPACE; + + syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; + + /* If REG_NEWLINE is set, newlines are treated differently. */ + if (cflags & REG_NEWLINE) + { /* REG_NEWLINE implies neither . nor [^...] match newline. */ + syntax &= ~RE_DOT_NEWLINE; + syntax |= RE_HAT_LISTS_NOT_NEWLINE; + /* It also changes the matching behavior. */ + preg->newline_anchor = 1; + } + else + preg->newline_anchor = 0; + preg->no_sub = !!(cflags & REG_NOSUB); + preg->translate = NULL; + + ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); + + /* POSIX doesn't distinguish between an unmatched open-group and an + unmatched close-group: both are REG_EPAREN. */ + if (ret == REG_ERPAREN) + ret = REG_EPAREN; + + /* We have already checked preg->fastmap != NULL. */ + if (__glibc_likely (ret == REG_NOERROR)) + /* Compute the fastmap now, since regexec cannot modify the pattern + buffer. This function never fails in this implementation. */ + (void) re_compile_fastmap (preg); + else + { + /* Some error occurred while compiling the expression. */ + re_free (preg->fastmap); + preg->fastmap = NULL; + } + + return (int) ret; +} +libc_hidden_def (__regcomp) +weak_alias (__regcomp, regcomp) + +/* Returns a message corresponding to an error code, ERRCODE, returned + from either regcomp or regexec. We don't use PREG here. */ + +size_t +regerror (int errcode, const regex_t *__restrict preg, char *__restrict errbuf, + size_t errbuf_size) +{ + const char *msg; + size_t msg_size; + int nerrcodes = sizeof __re_error_msgid_idx / sizeof __re_error_msgid_idx[0]; + + if (__glibc_unlikely (errcode < 0 || errcode >= nerrcodes)) + /* Only error codes returned by the rest of the code should be passed + to this routine. If we are given anything else, or if other regex + code generates an invalid error code, then the program has a bug. + Dump core so we can fix it. */ + abort (); + + msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); + + msg_size = strlen (msg) + 1; /* Includes the null. */ + + if (__glibc_likely (errbuf_size != 0)) + { + size_t cpy_size = msg_size; + if (__glibc_unlikely (msg_size > errbuf_size)) + { + cpy_size = errbuf_size - 1; + errbuf[cpy_size] = '\0'; + } + memcpy (errbuf, msg, cpy_size); + } + + return msg_size; +} +weak_alias (__regerror, regerror) + + +/* This static array is used for the map to single-byte characters when + UTF-8 is used. Otherwise we would allocate memory just to initialize + it the same all the time. UTF-8 is the preferred encoding so this is + a worthwhile optimization. */ +static const bitset_t utf8_sb_map = +{ + /* Set the first 128 bits. */ +#if (defined __GNUC__ || __clang_major__ >= 4) && !defined __STRICT_ANSI__ + [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX +#else +# if 4 * BITSET_WORD_BITS < ASCII_CHARS +# error "bitset_word_t is narrower than 32 bits" +# elif 3 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX, +# elif 2 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, BITSET_WORD_MAX, +# elif 1 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, +# endif + (BITSET_WORD_MAX + >> (SBC_MAX % BITSET_WORD_BITS == 0 + ? 0 + : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS)) +#endif +}; + + +static void +free_dfa_content (re_dfa_t *dfa) +{ + Idx i, j; + + if (dfa->nodes) + for (i = 0; i < dfa->nodes_len; ++i) + free_token (dfa->nodes + i); + re_free (dfa->nexts); + for (i = 0; i < dfa->nodes_len; ++i) + { + if (dfa->eclosures != NULL) + re_node_set_free (dfa->eclosures + i); + if (dfa->inveclosures != NULL) + re_node_set_free (dfa->inveclosures + i); + if (dfa->edests != NULL) + re_node_set_free (dfa->edests + i); + } + re_free (dfa->edests); + re_free (dfa->eclosures); + re_free (dfa->inveclosures); + re_free (dfa->nodes); + + if (dfa->state_table) + for (i = 0; i <= dfa->state_hash_mask; ++i) + { + struct re_state_table_entry *entry = dfa->state_table + i; + for (j = 0; j < entry->num; ++j) + { + re_dfastate_t *state = entry->array[j]; + free_state (state); + } + re_free (entry->array); + } + re_free (dfa->state_table); + if (dfa->sb_char != utf8_sb_map) + re_free (dfa->sb_char); + re_free (dfa->subexp_map); +#ifdef DEBUG + re_free (dfa->re_str); +#endif + + re_free (dfa); +} + + +/* Free dynamically allocated space used by PREG. */ + +void +regfree (regex_t *preg) +{ + re_dfa_t *dfa = preg->buffer; + if (__glibc_likely (dfa != NULL)) + { + lock_fini (dfa->lock); + free_dfa_content (dfa); + } + preg->buffer = NULL; + preg->allocated = 0; + + re_free (preg->fastmap); + preg->fastmap = NULL; + + re_free (preg->translate); + preg->translate = NULL; +} +libc_hidden_def (__regfree) +weak_alias (__regfree, regfree) + +/* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + +#if defined _REGEX_RE_COMP || defined _LIBC + +/* BSD has one and only one pattern buffer. */ +static struct re_pattern_buffer re_comp_buf; + +char * +# ifdef _LIBC +/* Make these definitions weak in libc, so POSIX programs can redefine + these names if they don't use our functions, and still use + regcomp/regexec above without link errors. */ +weak_function +# endif +re_comp (const char *s) +{ + reg_errcode_t ret; + char *fastmap; + + if (!s) + { + if (!re_comp_buf.buffer) + return gettext ("No previous regular expression"); + return 0; + } + + if (re_comp_buf.buffer) + { + fastmap = re_comp_buf.fastmap; + re_comp_buf.fastmap = NULL; + __regfree (&re_comp_buf); + memset (&re_comp_buf, '\0', sizeof (re_comp_buf)); + re_comp_buf.fastmap = fastmap; + } + + if (re_comp_buf.fastmap == NULL) + { + re_comp_buf.fastmap = re_malloc (char, SBC_MAX); + if (re_comp_buf.fastmap == NULL) + return (char *) gettext (__re_error_msgid + + __re_error_msgid_idx[(int) REG_ESPACE]); + } + + /* Since 're_exec' always passes NULL for the 'regs' argument, we + don't need to initialize the pattern buffer fields which affect it. */ + + /* Match anchors at newlines. */ + re_comp_buf.newline_anchor = 1; + + ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); + + if (!ret) + return NULL; + + /* Yes, we're discarding 'const' here if !HAVE_LIBINTL. */ + return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); +} + +#ifdef _LIBC +libc_freeres_fn (free_mem) +{ + __regfree (&re_comp_buf); +} +#endif + +#endif /* _REGEX_RE_COMP */ + +/* Internal entry point. + Compile the regular expression PATTERN, whose length is LENGTH. + SYNTAX indicate regular expression's syntax. */ + +static reg_errcode_t +re_compile_internal (regex_t *preg, const char * pattern, size_t length, + reg_syntax_t syntax) +{ + reg_errcode_t err = REG_NOERROR; + re_dfa_t *dfa; + re_string_t regexp; + + /* Initialize the pattern buffer. */ + preg->fastmap_accurate = 0; + preg->syntax = syntax; + preg->not_bol = preg->not_eol = 0; + preg->used = 0; + preg->re_nsub = 0; + preg->can_be_null = 0; + preg->regs_allocated = REGS_UNALLOCATED; + + /* Initialize the dfa. */ + dfa = preg->buffer; + if (__glibc_unlikely (preg->allocated < sizeof (re_dfa_t))) + { + /* If zero allocated, but buffer is non-null, try to realloc + enough space. This loses if buffer's address is bogus, but + that is the user's responsibility. If ->buffer is NULL this + is a simple allocation. */ + dfa = re_realloc (preg->buffer, re_dfa_t, 1); + if (dfa == NULL) + return REG_ESPACE; + preg->allocated = sizeof (re_dfa_t); + preg->buffer = dfa; + } + preg->used = sizeof (re_dfa_t); + + err = init_dfa (dfa, length); + if (__glibc_unlikely (err == REG_NOERROR && lock_init (dfa->lock) != 0)) + err = REG_ESPACE; + if (__glibc_unlikely (err != REG_NOERROR)) + { + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + return err; + } +#ifdef DEBUG + /* Note: length+1 will not overflow since it is checked in init_dfa. */ + dfa->re_str = re_malloc (char, length + 1); + strncpy (dfa->re_str, pattern, length + 1); +#endif + + err = re_string_construct (®exp, pattern, length, preg->translate, + (syntax & RE_ICASE) != 0, dfa); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_compile_internal_free_return: + free_workarea_compile (preg); + re_string_destruct (®exp); + lock_fini (dfa->lock); + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + return err; + } + + /* Parse the regular expression, and build a structure tree. */ + preg->re_nsub = 0; + dfa->str_tree = parse (®exp, preg, syntax, &err); + if (__glibc_unlikely (dfa->str_tree == NULL)) + goto re_compile_internal_free_return; + + /* Analyze the tree and create the nfa. */ + err = analyze (preg); + if (__glibc_unlikely (err != REG_NOERROR)) + goto re_compile_internal_free_return; + + /* If possible, do searching in single byte encoding to speed things up. */ + if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL) + optimize_utf8 (dfa); + + /* Then create the initial state of the dfa. */ + err = create_initial_state (dfa); + + /* Release work areas. */ + free_workarea_compile (preg); + re_string_destruct (®exp); + + if (__glibc_unlikely (err != REG_NOERROR)) + { + lock_fini (dfa->lock); + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + } + + return err; +} + +/* Initialize DFA. We use the length of the regular expression PAT_LEN + as the initial length of some arrays. */ + +static reg_errcode_t +init_dfa (re_dfa_t *dfa, size_t pat_len) +{ + __re_size_t table_size; +#ifndef _LIBC + const char *codeset_name; +#endif + size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); + size_t max_object_size = + MAX (sizeof (struct re_state_table_entry), + MAX (sizeof (re_token_t), + MAX (sizeof (re_node_set), + MAX (sizeof (regmatch_t), + max_i18n_object_size)))); + + memset (dfa, '\0', sizeof (re_dfa_t)); + + /* Force allocation of str_tree_storage the first time. */ + dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; + + /* Avoid overflows. The extra "/ 2" is for the table_size doubling + calculation below, and for similar doubling calculations + elsewhere. And it's <= rather than <, because some of the + doubling calculations add 1 afterwards. */ + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) / 2 + <= pat_len)) + return REG_ESPACE; + + dfa->nodes_alloc = pat_len + 1; + dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); + + /* table_size = 2 ^ ceil(log pat_len) */ + for (table_size = 1; ; table_size <<= 1) + if (table_size > pat_len) + break; + + dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); + dfa->state_hash_mask = table_size - 1; + + dfa->mb_cur_max = MB_CUR_MAX; +#ifdef _LIBC + if (dfa->mb_cur_max == 6 + && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0) + dfa->is_utf8 = 1; + dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) + != 0); +#else + codeset_name = nl_langinfo (CODESET); + if ((codeset_name[0] == 'U' || codeset_name[0] == 'u') + && (codeset_name[1] == 'T' || codeset_name[1] == 't') + && (codeset_name[2] == 'F' || codeset_name[2] == 'f') + && strcmp (codeset_name + 3 + (codeset_name[3] == '-'), "8") == 0) + dfa->is_utf8 = 1; + + /* We check exhaustively in the loop below if this charset is a + superset of ASCII. */ + dfa->map_notascii = 0; +#endif + + if (dfa->mb_cur_max > 1) + { + if (dfa->is_utf8) + dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map; + else + { + int i, j, ch; + + dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); + if (__glibc_unlikely (dfa->sb_char == NULL)) + return REG_ESPACE; + + /* Set the bits corresponding to single byte chars. */ + for (i = 0, ch = 0; i < BITSET_WORDS; ++i) + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + { + wint_t wch = __btowc (ch); + if (wch != WEOF) + dfa->sb_char[i] |= (bitset_word_t) 1 << j; +#ifndef _LIBC + if (isascii (ch) && wch != ch) + dfa->map_notascii = 1; +#endif + } + } + } + + if (__glibc_unlikely (dfa->nodes == NULL || dfa->state_table == NULL)) + return REG_ESPACE; + return REG_NOERROR; +} + +/* Initialize WORD_CHAR table, which indicate which character is + "word". In this case "word" means that it is the word construction + character used by some operators like "\<", "\>", etc. */ + +static void +init_word_char (re_dfa_t *dfa) +{ + int i = 0; + int j; + int ch = 0; + dfa->word_ops_used = 1; + if (__glibc_likely (dfa->map_notascii == 0)) + { + bitset_word_t bits0 = 0x00000000; + bitset_word_t bits1 = 0x03ff0000; + bitset_word_t bits2 = 0x87fffffe; + bitset_word_t bits3 = 0x07fffffe; + if (BITSET_WORD_BITS == 64) + { + /* Pacify gcc -Woverflow on 32-bit platforms. */ + dfa->word_char[0] = bits1 << 31 << 1 | bits0; + dfa->word_char[1] = bits3 << 31 << 1 | bits2; + i = 2; + } + else if (BITSET_WORD_BITS == 32) + { + dfa->word_char[0] = bits0; + dfa->word_char[1] = bits1; + dfa->word_char[2] = bits2; + dfa->word_char[3] = bits3; + i = 4; + } + else + goto general_case; + ch = 128; + + if (__glibc_likely (dfa->is_utf8)) + { + memset (&dfa->word_char[i], '\0', (SBC_MAX - ch) / 8); + return; + } + } + + general_case: + for (; i < BITSET_WORDS; ++i) + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + if (isalnum (ch) || ch == '_') + dfa->word_char[i] |= (bitset_word_t) 1 << j; +} + +/* Free the work area which are only used while compiling. */ + +static void +free_workarea_compile (regex_t *preg) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_storage_t *storage, *next; + for (storage = dfa->str_tree_storage; storage; storage = next) + { + next = storage->next; + re_free (storage); + } + dfa->str_tree_storage = NULL; + dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; + dfa->str_tree = NULL; + re_free (dfa->org_indices); + dfa->org_indices = NULL; +} + +/* Create initial states for all contexts. */ + +static reg_errcode_t +create_initial_state (re_dfa_t *dfa) +{ + Idx first, i; + reg_errcode_t err; + re_node_set init_nodes; + + /* Initial states have the epsilon closure of the node which is + the first node of the regular expression. */ + first = dfa->str_tree->first->node_idx; + dfa->init_node = first; + err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + /* The back-references which are in initial states can epsilon transit, + since in this case all of the subexpressions can be null. + Then we add epsilon closures of the nodes which are the next nodes of + the back-references. */ + if (dfa->nbackref > 0) + for (i = 0; i < init_nodes.nelem; ++i) + { + Idx node_idx = init_nodes.elems[i]; + re_token_type_t type = dfa->nodes[node_idx].type; + + Idx clexp_idx; + if (type != OP_BACK_REF) + continue; + for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) + { + re_token_t *clexp_node; + clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; + if (clexp_node->type == OP_CLOSE_SUBEXP + && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx) + break; + } + if (clexp_idx == init_nodes.nelem) + continue; + + if (type == OP_BACK_REF) + { + Idx dest_idx = dfa->edests[node_idx].elems[0]; + if (!re_node_set_contains (&init_nodes, dest_idx)) + { + reg_errcode_t merge_err + = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx); + if (merge_err != REG_NOERROR) + return merge_err; + i = 0; + } + } + } + + /* It must be the first time to invoke acquire_state. */ + dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); + /* We don't check ERR here, since the initial state must not be NULL. */ + if (__glibc_unlikely (dfa->init_state == NULL)) + return err; + if (dfa->init_state->has_constraint) + { + dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, + CONTEXT_WORD); + dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, + CONTEXT_NEWLINE); + dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, + &init_nodes, + CONTEXT_NEWLINE + | CONTEXT_BEGBUF); + if (__glibc_unlikely (dfa->init_state_word == NULL + || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL)) + return err; + } + else + dfa->init_state_word = dfa->init_state_nl + = dfa->init_state_begbuf = dfa->init_state; + + re_node_set_free (&init_nodes); + return REG_NOERROR; +} + +/* If it is possible to do searching in single byte encoding instead of UTF-8 + to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change + DFA nodes where needed. */ + +static void +optimize_utf8 (re_dfa_t *dfa) +{ + Idx node; + int i; + bool mb_chars = false; + bool has_period = false; + + for (node = 0; node < dfa->nodes_len; ++node) + switch (dfa->nodes[node].type) + { + case CHARACTER: + if (dfa->nodes[node].opr.c >= ASCII_CHARS) + mb_chars = true; + break; + case ANCHOR: + switch (dfa->nodes[node].opr.ctx_type) + { + case LINE_FIRST: + case LINE_LAST: + case BUF_FIRST: + case BUF_LAST: + break; + default: + /* Word anchors etc. cannot be handled. It's okay to test + opr.ctx_type since constraints (for all DFA nodes) are + created by ORing one or more opr.ctx_type values. */ + return; + } + break; + case OP_PERIOD: + has_period = true; + break; + case OP_BACK_REF: + case OP_ALT: + case END_OF_RE: + case OP_DUP_ASTERISK: + case OP_OPEN_SUBEXP: + case OP_CLOSE_SUBEXP: + break; + case COMPLEX_BRACKET: + return; + case SIMPLE_BRACKET: + /* Just double check. */ + { + int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0 + ? 0 + : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS); + for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i) + { + if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0) + return; + rshift = 0; + } + } + break; + default: + abort (); + } + + if (mb_chars || has_period) + for (node = 0; node < dfa->nodes_len; ++node) + { + if (dfa->nodes[node].type == CHARACTER + && dfa->nodes[node].opr.c >= ASCII_CHARS) + dfa->nodes[node].mb_partial = 0; + else if (dfa->nodes[node].type == OP_PERIOD) + dfa->nodes[node].type = OP_UTF8_PERIOD; + } + + /* The search can be in single byte locale. */ + dfa->mb_cur_max = 1; + dfa->is_utf8 = 0; + dfa->has_mb_node = dfa->nbackref > 0 || has_period; +} + +/* Analyze the structure tree, and calculate "first", "next", "edest", + "eclosure", and "inveclosure". */ + +static reg_errcode_t +analyze (regex_t *preg) +{ + re_dfa_t *dfa = preg->buffer; + reg_errcode_t ret; + + /* Allocate arrays. */ + dfa->nexts = re_malloc (Idx, dfa->nodes_alloc); + dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc); + dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); + dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); + if (__glibc_unlikely (dfa->nexts == NULL || dfa->org_indices == NULL + || dfa->edests == NULL || dfa->eclosures == NULL)) + return REG_ESPACE; + + dfa->subexp_map = re_malloc (Idx, preg->re_nsub); + if (dfa->subexp_map != NULL) + { + Idx i; + for (i = 0; i < preg->re_nsub; i++) + dfa->subexp_map[i] = i; + preorder (dfa->str_tree, optimize_subexps, dfa); + for (i = 0; i < preg->re_nsub; i++) + if (dfa->subexp_map[i] != i) + break; + if (i == preg->re_nsub) + { + re_free (dfa->subexp_map); + dfa->subexp_map = NULL; + } + } + + ret = postorder (dfa->str_tree, lower_subexps, preg); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + ret = postorder (dfa->str_tree, calc_first, dfa); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + preorder (dfa->str_tree, calc_next, dfa); + ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + ret = calc_eclosure (dfa); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + + /* We only need this during the prune_impossible_nodes pass in regexec.c; + skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */ + if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match) + || dfa->nbackref) + { + dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); + if (__glibc_unlikely (dfa->inveclosures == NULL)) + return REG_ESPACE; + ret = calc_inveclosure (dfa); + } + + return ret; +} + +/* Our parse trees are very unbalanced, so we cannot use a stack to + implement parse tree visits. Instead, we use parent pointers and + some hairy code in these two functions. */ +static reg_errcode_t +postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra) +{ + bin_tree_t *node, *prev; + + for (node = root; ; ) + { + /* Descend down the tree, preferably to the left (or to the right + if that's the only child). */ + while (node->left || node->right) + if (node->left) + node = node->left; + else + node = node->right; + + do + { + reg_errcode_t err = fn (extra, node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + if (node->parent == NULL) + return REG_NOERROR; + prev = node; + node = node->parent; + } + /* Go up while we have a node that is reached from the right. */ + while (node->right == prev || node->right == NULL); + node = node->right; + } +} + +static reg_errcode_t +preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra) +{ + bin_tree_t *node; + + for (node = root; ; ) + { + reg_errcode_t err = fn (extra, node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + /* Go to the left node, or up and to the right. */ + if (node->left) + node = node->left; + else + { + bin_tree_t *prev = NULL; + while (node->right == prev || node->right == NULL) + { + prev = node; + node = node->parent; + if (!node) + return REG_NOERROR; + } + node = node->right; + } + } +} + +/* Optimization pass: if a SUBEXP is entirely contained, strip it and tell + re_search_internal to map the inner one's opr.idx to this one's. Adjust + backreferences as well. Requires a preorder visit. */ +static reg_errcode_t +optimize_subexps (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + + if (node->token.type == OP_BACK_REF && dfa->subexp_map) + { + int idx = node->token.opr.idx; + node->token.opr.idx = dfa->subexp_map[idx]; + dfa->used_bkref_map |= 1 << node->token.opr.idx; + } + + else if (node->token.type == SUBEXP + && node->left && node->left->token.type == SUBEXP) + { + Idx other_idx = node->left->token.opr.idx; + + node->left = node->left->left; + if (node->left) + node->left->parent = node; + + dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx]; + if (other_idx < BITSET_WORD_BITS) + dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx); + } + + return REG_NOERROR; +} + +/* Lowering pass: Turn each SUBEXP node into the appropriate concatenation + of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */ +static reg_errcode_t +lower_subexps (void *extra, bin_tree_t *node) +{ + regex_t *preg = (regex_t *) extra; + reg_errcode_t err = REG_NOERROR; + + if (node->left && node->left->token.type == SUBEXP) + { + node->left = lower_subexp (&err, preg, node->left); + if (node->left) + node->left->parent = node; + } + if (node->right && node->right->token.type == SUBEXP) + { + node->right = lower_subexp (&err, preg, node->right); + if (node->right) + node->right->parent = node; + } + + return err; +} + +static bin_tree_t * +lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *body = node->left; + bin_tree_t *op, *cls, *tree1, *tree; + + if (preg->no_sub + /* We do not optimize empty subexpressions, because otherwise we may + have bad CONCAT nodes with NULL children. This is obviously not + very common, so we do not lose much. An example that triggers + this case is the sed "script" /\(\)/x. */ + && node->left != NULL + && (node->token.opr.idx >= BITSET_WORD_BITS + || !(dfa->used_bkref_map + & ((bitset_word_t) 1 << node->token.opr.idx)))) + return node->left; + + /* Convert the SUBEXP node to the concatenation of an + OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */ + op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP); + cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP); + tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls; + tree = create_tree (dfa, op, tree1, CONCAT); + if (__glibc_unlikely (tree == NULL || tree1 == NULL + || op == NULL || cls == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + + op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx; + op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp; + return tree; +} + +/* Pass 1 in building the NFA: compute FIRST and create unlinked automaton + nodes. Requires a postorder visit. */ +static reg_errcode_t +calc_first (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + if (node->token.type == CONCAT) + { + node->first = node->left->first; + node->node_idx = node->left->node_idx; + } + else + { + node->first = node; + node->node_idx = re_dfa_add_node (dfa, node->token); + if (__glibc_unlikely (node->node_idx == -1)) + return REG_ESPACE; + if (node->token.type == ANCHOR) + dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; + } + return REG_NOERROR; +} + +/* Pass 2: compute NEXT on the tree. Preorder visit. */ +static reg_errcode_t +calc_next (void *extra, bin_tree_t *node) +{ + switch (node->token.type) + { + case OP_DUP_ASTERISK: + node->left->next = node; + break; + case CONCAT: + node->left->next = node->right->first; + node->right->next = node->next; + break; + default: + if (node->left) + node->left->next = node->next; + if (node->right) + node->right->next = node->next; + break; + } + return REG_NOERROR; +} + +/* Pass 3: link all DFA nodes to their NEXT node (any order will do). */ +static reg_errcode_t +link_nfa_nodes (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + Idx idx = node->node_idx; + reg_errcode_t err = REG_NOERROR; + + switch (node->token.type) + { + case CONCAT: + break; + + case END_OF_RE: + DEBUG_ASSERT (node->next == NULL); + break; + + case OP_DUP_ASTERISK: + case OP_ALT: + { + Idx left, right; + dfa->has_plural_match = 1; + if (node->left != NULL) + left = node->left->first->node_idx; + else + left = node->next->node_idx; + if (node->right != NULL) + right = node->right->first->node_idx; + else + right = node->next->node_idx; + DEBUG_ASSERT (left > -1); + DEBUG_ASSERT (right > -1); + err = re_node_set_init_2 (dfa->edests + idx, left, right); + } + break; + + case ANCHOR: + case OP_OPEN_SUBEXP: + case OP_CLOSE_SUBEXP: + err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx); + break; + + case OP_BACK_REF: + dfa->nexts[idx] = node->next->node_idx; + if (node->token.type == OP_BACK_REF) + err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]); + break; + + default: + DEBUG_ASSERT (!IS_EPSILON_NODE (node->token.type)); + dfa->nexts[idx] = node->next->node_idx; + break; + } + + return err; +} + +/* Duplicate the epsilon closure of the node ROOT_NODE. + Note that duplicated nodes have constraint INIT_CONSTRAINT in addition + to their own constraint. */ + +static reg_errcode_t +duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node, + Idx root_node, unsigned int init_constraint) +{ + Idx org_node, clone_node; + bool ok; + unsigned int constraint = init_constraint; + for (org_node = top_org_node, clone_node = top_clone_node;;) + { + Idx org_dest, clone_dest; + if (dfa->nodes[org_node].type == OP_BACK_REF) + { + /* If the back reference epsilon-transit, its destination must + also have the constraint. Then duplicate the epsilon closure + of the destination of the back reference, and store it in + edests of the back reference. */ + org_dest = dfa->nexts[org_node]; + re_node_set_empty (dfa->edests + clone_node); + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (__glibc_unlikely (clone_dest == -1)) + return REG_ESPACE; + dfa->nexts[clone_node] = dfa->nexts[org_node]; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + else if (dfa->edests[org_node].nelem == 0) + { + /* In case of the node can't epsilon-transit, don't duplicate the + destination and store the original destination as the + destination of the node. */ + dfa->nexts[clone_node] = dfa->nexts[org_node]; + break; + } + else if (dfa->edests[org_node].nelem == 1) + { + /* In case of the node can epsilon-transit, and it has only one + destination. */ + org_dest = dfa->edests[org_node].elems[0]; + re_node_set_empty (dfa->edests + clone_node); + /* If the node is root_node itself, it means the epsilon closure + has a loop. Then tie it to the destination of the root_node. */ + if (org_node == root_node && clone_node != org_node) + { + ok = re_node_set_insert (dfa->edests + clone_node, org_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + break; + } + /* In case the node has another constraint, append it. */ + constraint |= dfa->nodes[org_node].constraint; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (__glibc_unlikely (clone_dest == -1)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + else /* dfa->edests[org_node].nelem == 2 */ + { + /* In case of the node can epsilon-transit, and it has two + destinations. In the bin_tree_t and DFA, that's '|' and '*'. */ + org_dest = dfa->edests[org_node].elems[0]; + re_node_set_empty (dfa->edests + clone_node); + /* Search for a duplicated node which satisfies the constraint. */ + clone_dest = search_duplicated_node (dfa, org_dest, constraint); + if (clone_dest == -1) + { + /* There is no such duplicated node, create a new one. */ + reg_errcode_t err; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (__glibc_unlikely (clone_dest == -1)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + err = duplicate_node_closure (dfa, org_dest, clone_dest, + root_node, constraint); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + else + { + /* There is a duplicated node which satisfies the constraint, + use it to avoid infinite loop. */ + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + + org_dest = dfa->edests[org_node].elems[1]; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (__glibc_unlikely (clone_dest == -1)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + org_node = org_dest; + clone_node = clone_dest; + } + return REG_NOERROR; +} + +/* Search for a node which is duplicated from the node ORG_NODE, and + satisfies the constraint CONSTRAINT. */ + +static Idx +search_duplicated_node (const re_dfa_t *dfa, Idx org_node, + unsigned int constraint) +{ + Idx idx; + for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx) + { + if (org_node == dfa->org_indices[idx] + && constraint == dfa->nodes[idx].constraint) + return idx; /* Found. */ + } + return -1; /* Not found. */ +} + +/* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. + Return the index of the new node, or -1 if insufficient storage is + available. */ + +static Idx +duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint) +{ + Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]); + if (__glibc_likely (dup_idx != -1)) + { + dfa->nodes[dup_idx].constraint = constraint; + dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; + dfa->nodes[dup_idx].duplicated = 1; + + /* Store the index of the original node. */ + dfa->org_indices[dup_idx] = org_idx; + } + return dup_idx; +} + +static reg_errcode_t +calc_inveclosure (re_dfa_t *dfa) +{ + Idx src, idx; + bool ok; + for (idx = 0; idx < dfa->nodes_len; ++idx) + re_node_set_init_empty (dfa->inveclosures + idx); + + for (src = 0; src < dfa->nodes_len; ++src) + { + Idx *elems = dfa->eclosures[src].elems; + for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) + { + ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + } + + return REG_NOERROR; +} + +/* Calculate "eclosure" for all the node in DFA. */ + +static reg_errcode_t +calc_eclosure (re_dfa_t *dfa) +{ + Idx node_idx; + bool incomplete; + DEBUG_ASSERT (dfa->nodes_len > 0); + incomplete = false; + /* For each nodes, calculate epsilon closure. */ + for (node_idx = 0; ; ++node_idx) + { + reg_errcode_t err; + re_node_set eclosure_elem; + if (node_idx == dfa->nodes_len) + { + if (!incomplete) + break; + incomplete = false; + node_idx = 0; + } + + DEBUG_ASSERT (dfa->eclosures[node_idx].nelem != -1); + + /* If we have already calculated, skip it. */ + if (dfa->eclosures[node_idx].nelem != 0) + continue; + /* Calculate epsilon closure of 'node_idx'. */ + err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + if (dfa->eclosures[node_idx].nelem == 0) + { + incomplete = true; + re_node_set_free (&eclosure_elem); + } + } + return REG_NOERROR; +} + +/* Calculate epsilon closure of NODE. */ + +static reg_errcode_t +calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root) +{ + reg_errcode_t err; + Idx i; + re_node_set eclosure; + bool incomplete = false; + err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + /* An epsilon closure includes itself. */ + eclosure.elems[eclosure.nelem++] = node; + + /* This indicates that we are calculating this node now. + We reference this value to avoid infinite loop. */ + dfa->eclosures[node].nelem = -1; + + /* If the current node has constraints, duplicate all nodes + since they must inherit the constraints. */ + if (dfa->nodes[node].constraint + && dfa->edests[node].nelem + && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) + { + err = duplicate_node_closure (dfa, node, node, node, + dfa->nodes[node].constraint); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + /* Expand each epsilon destination nodes. */ + if (IS_EPSILON_NODE(dfa->nodes[node].type)) + for (i = 0; i < dfa->edests[node].nelem; ++i) + { + re_node_set eclosure_elem; + Idx edest = dfa->edests[node].elems[i]; + /* If calculating the epsilon closure of 'edest' is in progress, + return intermediate result. */ + if (dfa->eclosures[edest].nelem == -1) + { + incomplete = true; + continue; + } + /* If we haven't calculated the epsilon closure of 'edest' yet, + calculate now. Otherwise use calculated epsilon closure. */ + if (dfa->eclosures[edest].nelem == 0) + { + err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + else + eclosure_elem = dfa->eclosures[edest]; + /* Merge the epsilon closure of 'edest'. */ + err = re_node_set_merge (&eclosure, &eclosure_elem); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + /* If the epsilon closure of 'edest' is incomplete, + the epsilon closure of this node is also incomplete. */ + if (dfa->eclosures[edest].nelem == 0) + { + incomplete = true; + re_node_set_free (&eclosure_elem); + } + } + + if (incomplete && !root) + dfa->eclosures[node].nelem = 0; + else + dfa->eclosures[node] = eclosure; + *new_set = eclosure; + return REG_NOERROR; +} + +/* Functions for token which are used in the parser. */ + +/* Fetch a token from INPUT. + We must not use this function inside bracket expressions. */ + +static void +fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax) +{ + re_string_skip_bytes (input, peek_token (result, input, syntax)); +} + +/* Peek a token from INPUT, and return the length of the token. + We must not use this function inside bracket expressions. */ + +static int +peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax) +{ + unsigned char c; + + if (re_string_eoi (input)) + { + token->type = END_OF_RE; + return 0; + } + + c = re_string_peek_byte (input, 0); + token->opr.c = c; + + token->word_char = 0; + token->mb_partial = 0; + if (input->mb_cur_max > 1 + && !re_string_first_byte (input, re_string_cur_idx (input))) + { + token->type = CHARACTER; + token->mb_partial = 1; + return 1; + } + if (c == '\\') + { + unsigned char c2; + if (re_string_cur_idx (input) + 1 >= re_string_length (input)) + { + token->type = BACK_SLASH; + return 1; + } + + c2 = re_string_peek_byte_case (input, 1); + token->opr.c = c2; + token->type = CHARACTER; + if (input->mb_cur_max > 1) + { + wint_t wc = re_string_wchar_at (input, + re_string_cur_idx (input) + 1); + token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; + } + else + token->word_char = IS_WORD_CHAR (c2) != 0; + + switch (c2) + { + case '|': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) + token->type = OP_ALT; + break; + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + if (!(syntax & RE_NO_BK_REFS)) + { + token->type = OP_BACK_REF; + token->opr.idx = c2 - '1'; + } + break; + case '<': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_FIRST; + } + break; + case '>': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_LAST; + } + break; + case 'b': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_DELIM; + } + break; + case 'B': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = NOT_WORD_DELIM; + } + break; + case 'w': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_WORD; + break; + case 'W': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_NOTWORD; + break; + case 's': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_SPACE; + break; + case 'S': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_NOTSPACE; + break; + case '`': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = BUF_FIRST; + } + break; + case '\'': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = BUF_LAST; + } + break; + case '(': + if (!(syntax & RE_NO_BK_PARENS)) + token->type = OP_OPEN_SUBEXP; + break; + case ')': + if (!(syntax & RE_NO_BK_PARENS)) + token->type = OP_CLOSE_SUBEXP; + break; + case '+': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_PLUS; + break; + case '?': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_QUESTION; + break; + case '{': + if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) + token->type = OP_OPEN_DUP_NUM; + break; + case '}': + if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) + token->type = OP_CLOSE_DUP_NUM; + break; + default: + break; + } + return 2; + } + + token->type = CHARACTER; + if (input->mb_cur_max > 1) + { + wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input)); + token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; + } + else + token->word_char = IS_WORD_CHAR (token->opr.c); + + switch (c) + { + case '\n': + if (syntax & RE_NEWLINE_ALT) + token->type = OP_ALT; + break; + case '|': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) + token->type = OP_ALT; + break; + case '*': + token->type = OP_DUP_ASTERISK; + break; + case '+': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_PLUS; + break; + case '?': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_QUESTION; + break; + case '{': + if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) + token->type = OP_OPEN_DUP_NUM; + break; + case '}': + if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) + token->type = OP_CLOSE_DUP_NUM; + break; + case '(': + if (syntax & RE_NO_BK_PARENS) + token->type = OP_OPEN_SUBEXP; + break; + case ')': + if (syntax & RE_NO_BK_PARENS) + token->type = OP_CLOSE_SUBEXP; + break; + case '[': + token->type = OP_OPEN_BRACKET; + break; + case '.': + token->type = OP_PERIOD; + break; + case '^': + if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) + && re_string_cur_idx (input) != 0) + { + char prev = re_string_peek_byte (input, -1); + if (!(syntax & RE_NEWLINE_ALT) || prev != '\n') + break; + } + token->type = ANCHOR; + token->opr.ctx_type = LINE_FIRST; + break; + case '$': + if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) + && re_string_cur_idx (input) + 1 != re_string_length (input)) + { + re_token_t next; + re_string_skip_bytes (input, 1); + peek_token (&next, input, syntax); + re_string_skip_bytes (input, -1); + if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) + break; + } + token->type = ANCHOR; + token->opr.ctx_type = LINE_LAST; + break; + default: + break; + } + return 1; +} + +/* Peek a token from INPUT, and return the length of the token. + We must not use this function out of bracket expressions. */ + +static int +peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax) +{ + unsigned char c; + if (re_string_eoi (input)) + { + token->type = END_OF_RE; + return 0; + } + c = re_string_peek_byte (input, 0); + token->opr.c = c; + + if (input->mb_cur_max > 1 + && !re_string_first_byte (input, re_string_cur_idx (input))) + { + token->type = CHARACTER; + return 1; + } + + if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) + && re_string_cur_idx (input) + 1 < re_string_length (input)) + { + /* In this case, '\' escape a character. */ + unsigned char c2; + re_string_skip_bytes (input, 1); + c2 = re_string_peek_byte (input, 0); + token->opr.c = c2; + token->type = CHARACTER; + return 1; + } + if (c == '[') /* '[' is a special char in a bracket exps. */ + { + unsigned char c2; + int token_len; + if (re_string_cur_idx (input) + 1 < re_string_length (input)) + c2 = re_string_peek_byte (input, 1); + else + c2 = 0; + token->opr.c = c2; + token_len = 2; + switch (c2) + { + case '.': + token->type = OP_OPEN_COLL_ELEM; + break; + + case '=': + token->type = OP_OPEN_EQUIV_CLASS; + break; + + case ':': + if (syntax & RE_CHAR_CLASSES) + { + token->type = OP_OPEN_CHAR_CLASS; + break; + } + FALLTHROUGH; + default: + token->type = CHARACTER; + token->opr.c = c; + token_len = 1; + break; + } + return token_len; + } + switch (c) + { + case ']': + token->type = OP_CLOSE_BRACKET; + break; + case '^': + token->type = OP_NON_MATCH_LIST; + break; + case '-': + /* In V7 Unix grep and Unix awk and mawk, [...---...] + (3 adjacent minus signs) stands for a single minus sign. + Support that without breaking anything else. */ + if (! (re_string_cur_idx (input) + 2 < re_string_length (input) + && re_string_peek_byte (input, 1) == '-' + && re_string_peek_byte (input, 2) == '-')) + { + token->type = OP_CHARSET_RANGE; + break; + } + re_string_skip_bytes (input, 2); + FALLTHROUGH; + default: + token->type = CHARACTER; + } + return 1; +} + +/* Functions for parser. */ + +/* Entry point of the parser. + Parse the regular expression REGEXP and return the structure tree. + If an error occurs, ERR is set by error code, and return NULL. + This function build the following tree, from regular expression : + CAT + / \ + / \ + EOR + + CAT means concatenation. + EOR means end of regular expression. */ + +static bin_tree_t * +parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, + reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree, *eor, *root; + re_token_t current_token; + dfa->syntax = syntax; + fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); + tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + eor = create_tree (dfa, NULL, NULL, END_OF_RE); + if (tree != NULL) + root = create_tree (dfa, tree, eor, CONCAT); + else + root = eor; + if (__glibc_unlikely (eor == NULL || root == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + return root; +} + +/* This function build the following tree, from regular expression + |: + ALT + / \ + / \ + + + ALT means alternative, which represents the operator '|'. */ + +static bin_tree_t * +parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree, *branch = NULL; + bitset_word_t initial_bkref_map = dfa->completed_bkref_map; + tree = parse_branch (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + + while (token->type == OP_ALT) + { + fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); + if (token->type != OP_ALT && token->type != END_OF_RE + && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) + { + bitset_word_t accumulated_bkref_map = dfa->completed_bkref_map; + dfa->completed_bkref_map = initial_bkref_map; + branch = parse_branch (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err != REG_NOERROR && branch == NULL)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + return NULL; + } + dfa->completed_bkref_map |= accumulated_bkref_map; + } + else + branch = NULL; + tree = create_tree (dfa, tree, branch, OP_ALT); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + } + return tree; +} + +/* This function build the following tree, from regular expression + : + CAT + / \ + / \ + + + CAT means concatenation. */ + +static bin_tree_t * +parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + bin_tree_t *tree, *expr; + re_dfa_t *dfa = preg->buffer; + tree = parse_expression (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + + while (token->type != OP_ALT && token->type != END_OF_RE + && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) + { + expr = parse_expression (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err != REG_NOERROR && expr == NULL)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + return NULL; + } + if (tree != NULL && expr != NULL) + { + bin_tree_t *newtree = create_tree (dfa, tree, expr, CONCAT); + if (newtree == NULL) + { + postorder (expr, free_tree, NULL); + postorder (tree, free_tree, NULL); + *err = REG_ESPACE; + return NULL; + } + tree = newtree; + } + else if (tree == NULL) + tree = expr; + /* Otherwise expr == NULL, we don't need to create new tree. */ + } + return tree; +} + +/* This function build the following tree, from regular expression a*: + * + | + a +*/ + +static bin_tree_t * +parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree; + switch (token->type) + { + case CHARACTER: + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + if (dfa->mb_cur_max > 1) + { + while (!re_string_eoi (regexp) + && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) + { + bin_tree_t *mbc_remain; + fetch_token (token, regexp, syntax); + mbc_remain = create_token_tree (dfa, NULL, NULL, token); + tree = create_tree (dfa, tree, mbc_remain, CONCAT); + if (__glibc_unlikely (mbc_remain == NULL || tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + } + } + break; + + case OP_OPEN_SUBEXP: + tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + break; + + case OP_OPEN_BRACKET: + tree = parse_bracket_exp (regexp, dfa, token, syntax, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + break; + + case OP_BACK_REF: + if (!__glibc_likely (dfa->completed_bkref_map & (1 << token->opr.idx))) + { + *err = REG_ESUBREG; + return NULL; + } + dfa->used_bkref_map |= 1 << token->opr.idx; + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + ++dfa->nbackref; + dfa->has_mb_node = 1; + break; + + case OP_OPEN_DUP_NUM: + if (syntax & RE_CONTEXT_INVALID_DUP) + { + *err = REG_BADRPT; + return NULL; + } + FALLTHROUGH; + case OP_DUP_ASTERISK: + case OP_DUP_PLUS: + case OP_DUP_QUESTION: + if (syntax & RE_CONTEXT_INVALID_OPS) + { + *err = REG_BADRPT; + return NULL; + } + else if (syntax & RE_CONTEXT_INDEP_OPS) + { + fetch_token (token, regexp, syntax); + return parse_expression (regexp, preg, token, syntax, nest, err); + } + FALLTHROUGH; + case OP_CLOSE_SUBEXP: + if ((token->type == OP_CLOSE_SUBEXP) + && !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) + { + *err = REG_ERPAREN; + return NULL; + } + FALLTHROUGH; + case OP_CLOSE_DUP_NUM: + /* We treat it as a normal character. */ + + /* Then we can these characters as normal characters. */ + token->type = CHARACTER; + /* mb_partial and word_char bits should be initialized already + by peek_token. */ + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + break; + + case ANCHOR: + if ((token->opr.ctx_type + & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST)) + && dfa->word_ops_used == 0) + init_word_char (dfa); + if (token->opr.ctx_type == WORD_DELIM + || token->opr.ctx_type == NOT_WORD_DELIM) + { + bin_tree_t *tree_first, *tree_last; + if (token->opr.ctx_type == WORD_DELIM) + { + token->opr.ctx_type = WORD_FIRST; + tree_first = create_token_tree (dfa, NULL, NULL, token); + token->opr.ctx_type = WORD_LAST; + } + else + { + token->opr.ctx_type = INSIDE_WORD; + tree_first = create_token_tree (dfa, NULL, NULL, token); + token->opr.ctx_type = INSIDE_NOTWORD; + } + tree_last = create_token_tree (dfa, NULL, NULL, token); + tree = create_tree (dfa, tree_first, tree_last, OP_ALT); + if (__glibc_unlikely (tree_first == NULL || tree_last == NULL + || tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + } + else + { + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + } + /* We must return here, since ANCHORs can't be followed + by repetition operators. + eg. RE"^*" is invalid or "", + it must not be "". */ + fetch_token (token, regexp, syntax); + return tree; + + case OP_PERIOD: + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + if (dfa->mb_cur_max > 1) + dfa->has_mb_node = 1; + break; + + case OP_WORD: + case OP_NOTWORD: + tree = build_charclass_op (dfa, regexp->trans, + "alnum", + "_", + token->type == OP_NOTWORD, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + break; + + case OP_SPACE: + case OP_NOTSPACE: + tree = build_charclass_op (dfa, regexp->trans, + "space", + "", + token->type == OP_NOTSPACE, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + break; + + case OP_ALT: + case END_OF_RE: + return NULL; + + case BACK_SLASH: + *err = REG_EESCAPE; + return NULL; + + default: + /* Must not happen? */ + DEBUG_ASSERT (false); + return NULL; + } + fetch_token (token, regexp, syntax); + + while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS + || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) + { + bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token, + syntax, err); + if (__glibc_unlikely (*err != REG_NOERROR && dup_tree == NULL)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + return NULL; + } + tree = dup_tree; + /* In BRE consecutive duplications are not allowed. */ + if ((syntax & RE_CONTEXT_INVALID_DUP) + && (token->type == OP_DUP_ASTERISK + || token->type == OP_OPEN_DUP_NUM)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + *err = REG_BADRPT; + return NULL; + } + } + + return tree; +} + +/* This function build the following tree, from regular expression + (): + SUBEXP + | + +*/ + +static bin_tree_t * +parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree; + size_t cur_nsub; + cur_nsub = preg->re_nsub++; + + fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); + + /* The subexpression may be a null string. */ + if (token->type == OP_CLOSE_SUBEXP) + tree = NULL; + else + { + tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err == REG_NOERROR + && token->type != OP_CLOSE_SUBEXP)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + *err = REG_EPAREN; + } + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + } + + if (cur_nsub <= '9' - '1') + dfa->completed_bkref_map |= 1 << cur_nsub; + + tree = create_tree (dfa, tree, NULL, SUBEXP); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + tree->token.opr.idx = cur_nsub; + return tree; +} + +/* This function parse repetition operators like "*", "+", "{1,3}" etc. */ + +static bin_tree_t * +parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, + re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) +{ + bin_tree_t *tree = NULL, *old_tree = NULL; + Idx i, start, end, start_idx = re_string_cur_idx (regexp); + re_token_t start_token = *token; + + if (token->type == OP_OPEN_DUP_NUM) + { + end = 0; + start = fetch_number (regexp, token, syntax); + if (start == -1) + { + if (token->type == CHARACTER && token->opr.c == ',') + start = 0; /* We treat "{,m}" as "{0,m}". */ + else + { + *err = REG_BADBR; /* {} is invalid. */ + return NULL; + } + } + if (__glibc_likely (start != -2)) + { + /* We treat "{n}" as "{n,n}". */ + end = ((token->type == OP_CLOSE_DUP_NUM) ? start + : ((token->type == CHARACTER && token->opr.c == ',') + ? fetch_number (regexp, token, syntax) : -2)); + } + if (__glibc_unlikely (start == -2 || end == -2)) + { + /* Invalid sequence. */ + if (__glibc_unlikely (!(syntax & RE_INVALID_INTERVAL_ORD))) + { + if (token->type == END_OF_RE) + *err = REG_EBRACE; + else + *err = REG_BADBR; + + return NULL; + } + + /* If the syntax bit is set, rollback. */ + re_string_set_index (regexp, start_idx); + *token = start_token; + token->type = CHARACTER; + /* mb_partial and word_char bits should be already initialized by + peek_token. */ + return elem; + } + + if (__glibc_unlikely ((end != -1 && start > end) + || token->type != OP_CLOSE_DUP_NUM)) + { + /* First number greater than second. */ + *err = REG_BADBR; + return NULL; + } + + if (__glibc_unlikely (RE_DUP_MAX < (end == -1 ? start : end))) + { + *err = REG_ESIZE; + return NULL; + } + } + else + { + start = (token->type == OP_DUP_PLUS) ? 1 : 0; + end = (token->type == OP_DUP_QUESTION) ? 1 : -1; + } + + fetch_token (token, regexp, syntax); + + if (__glibc_unlikely (elem == NULL)) + return NULL; + if (__glibc_unlikely (start == 0 && end == 0)) + { + postorder (elem, free_tree, NULL); + return NULL; + } + + /* Extract "{n,m}" to "...{0,}". */ + if (__glibc_unlikely (start > 0)) + { + tree = elem; + for (i = 2; i <= start; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (__glibc_unlikely (elem == NULL || tree == NULL)) + goto parse_dup_op_espace; + } + + if (start == end) + return tree; + + /* Duplicate ELEM before it is marked optional. */ + elem = duplicate_tree (elem, dfa); + if (__glibc_unlikely (elem == NULL)) + goto parse_dup_op_espace; + old_tree = tree; + } + else + old_tree = NULL; + + if (elem->token.type == SUBEXP) + { + uintptr_t subidx = elem->token.opr.idx; + postorder (elem, mark_opt_subexp, (void *) subidx); + } + + tree = create_tree (dfa, elem, NULL, + (end == -1 ? OP_DUP_ASTERISK : OP_ALT)); + if (__glibc_unlikely (tree == NULL)) + goto parse_dup_op_espace; + + /* This loop is actually executed only when end != -1, + to rewrite {0,n} as ((...?)?)?... We have + already created the start+1-th copy. */ + if (TYPE_SIGNED (Idx) || end != -1) + for (i = start + 2; i <= end; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (__glibc_unlikely (elem == NULL || tree == NULL)) + goto parse_dup_op_espace; + + tree = create_tree (dfa, tree, NULL, OP_ALT); + if (__glibc_unlikely (tree == NULL)) + goto parse_dup_op_espace; + } + + if (old_tree) + tree = create_tree (dfa, old_tree, tree, CONCAT); + + return tree; + + parse_dup_op_espace: + *err = REG_ESPACE; + return NULL; +} + +/* Size of the names for collating symbol/equivalence_class/character_class. + I'm not sure, but maybe enough. */ +#define BRACKET_NAME_BUF_SIZE 32 + +#ifndef _LIBC + +/* Convert the byte B to the corresponding wide character. In a + unibyte locale, treat B as itself. In a multibyte locale, return + WEOF if B is an encoding error. */ +static wint_t +parse_byte (unsigned char b, re_dfa_t const *dfa) +{ + return dfa->mb_cur_max > 1 ? __btowc (b) : b; +} + +/* Local function for parse_bracket_exp used in _LIBC environment. + Build the range expression which starts from START_ELEM, and ends + at END_ELEM. The result are written to MBCSET and SBCSET. + RANGE_ALLOC is the allocated size of mbcset->range_starts, and + mbcset->range_ends, is a pointer argument since we may + update it. */ + +static reg_errcode_t +build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, + bracket_elem_t *start_elem, bracket_elem_t *end_elem, + re_dfa_t *dfa, reg_syntax_t syntax, uint_fast32_t nrules, + const unsigned char *collseqmb, const char *collseqwc, + int_fast32_t table_size, const void *symb_table, + const unsigned char *extra) +{ + /* Equivalence Classes and Character Classes can't be a range start/end. */ + if (__glibc_unlikely (start_elem->type == EQUIV_CLASS + || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS + || end_elem->type == CHAR_CLASS)) + return REG_ERANGE; + + /* We can handle no multi character collating elements without libc + support. */ + if (__glibc_unlikely ((start_elem->type == COLL_SYM + && strlen ((char *) start_elem->opr.name) > 1) + || (end_elem->type == COLL_SYM + && strlen ((char *) end_elem->opr.name) > 1))) + return REG_ECOLLATE; + + unsigned int + start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch + : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] + : 0)), + end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch + : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] + : 0)); + wint_t + start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) + ? parse_byte (start_ch, dfa) : start_elem->opr.wch), + end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) + ? parse_byte (end_ch, dfa) : end_elem->opr.wch); + + if (start_wc == WEOF || end_wc == WEOF) + return REG_ECOLLATE; + else if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) + && start_wc > end_wc)) + return REG_ERANGE; + + /* Got valid collation sequence values, add them as a new entry. + However, for !_LIBC we have no collation elements: if the + character set is single byte, the single byte character set + that we build below suffices. parse_bracket_exp passes + no MBCSET if dfa->mb_cur_max == 1. */ + if (dfa->mb_cur_max > 1) + { + /* Check the space of the arrays. */ + if (__glibc_unlikely (*range_alloc == mbcset->nranges)) + { + /* There is not enough space, need realloc. */ + wchar_t *new_array_start, *new_array_end; + Idx new_nranges; + + /* +1 in case of mbcset->nranges is 0. */ + new_nranges = 2 * mbcset->nranges + 1; + /* Use realloc since mbcset->range_starts and mbcset->range_ends + are NULL if *range_alloc == 0. */ + new_array_start = re_realloc (mbcset->range_starts, wchar_t, + new_nranges); + new_array_end = re_realloc (mbcset->range_ends, wchar_t, + new_nranges); + + if (__glibc_unlikely (new_array_start == NULL + || new_array_end == NULL)) + { + re_free (new_array_start); + re_free (new_array_end); + return REG_ESPACE; + } + + mbcset->range_starts = new_array_start; + mbcset->range_ends = new_array_end; + *range_alloc = new_nranges; + } + + mbcset->range_starts[mbcset->nranges] = start_wc; + mbcset->range_ends[mbcset->nranges++] = end_wc; + } + + /* Build the table for single byte characters. */ + for (wchar_t wc = 0; wc < SBC_MAX; ++wc) + { + if (start_wc <= wc && wc <= end_wc) + bitset_set (sbcset, wc); + } + + return REG_NOERROR; +} +#endif /* not _LIBC */ + +#ifndef _LIBC +/* Helper function for parse_bracket_exp only used in case of NOT _LIBC. + Build the collating element which is represented by NAME. + The result are written to MBCSET and SBCSET. + COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a + pointer argument since we may update it. */ + +static reg_errcode_t +build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, + Idx *coll_sym_alloc, const unsigned char *name, + uint_fast32_t nrules, int_fast32_t table_size, + const void *symb_table, const unsigned char *extra) +{ + size_t name_len = strlen ((const char *) name); + if (__glibc_unlikely (name_len != 1)) + return REG_ECOLLATE; + else + { + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } +} +#endif /* not _LIBC */ + +#ifdef _LIBC +/* Local function for parse_bracket_exp used in _LIBC environment. + Seek the collating symbol entry corresponding to NAME. + Return the index of the symbol in the SYMB_TABLE, + or -1 if not found. */ + +static __always_inline int32_t +seek_collating_symbol_entry (const unsigned char *name, size_t name_len, + const int32_t *symb_table, + int_fast32_t table_size, + const unsigned char *extra) +{ + int_fast32_t elem; + + for (elem = 0; elem < table_size; elem++) + if (symb_table[2 * elem] != 0) + { + int32_t idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + if (/* Compare the length of the name. */ + name_len == extra[idx] + /* Compare the name. */ + && memcmp (name, &extra[idx + 1], name_len) == 0) + /* Yep, this is the entry. */ + return elem; + } + return -1; +} + +/* Local function for parse_bracket_exp used in _LIBC environment. + Look up the collation sequence value of BR_ELEM. + Return the value if succeeded, UINT_MAX otherwise. */ + +static __always_inline unsigned int +lookup_collation_sequence_value (bracket_elem_t *br_elem, uint32_t nrules, + const unsigned char *collseqmb, + const char *collseqwc, + int_fast32_t table_size, + const int32_t *symb_table, + const unsigned char *extra) +{ + if (br_elem->type == SB_CHAR) + { + /* if (MB_CUR_MAX == 1) */ + if (nrules == 0) + return collseqmb[br_elem->opr.ch]; + else + { + wint_t wc = __btowc (br_elem->opr.ch); + return __collseq_table_lookup (collseqwc, wc); + } + } + else if (br_elem->type == MB_CHAR) + { + if (nrules != 0) + return __collseq_table_lookup (collseqwc, br_elem->opr.wch); + } + else if (br_elem->type == COLL_SYM) + { + size_t sym_name_len = strlen ((char *) br_elem->opr.name); + if (nrules != 0) + { + int32_t elem, idx; + elem = seek_collating_symbol_entry (br_elem->opr.name, + sym_name_len, + symb_table, table_size, + extra); + if (elem != -1) + { + /* We found the entry. */ + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + /* Skip the byte sequence of the collating element. */ + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + /* Skip the multibyte collation sequence value. */ + idx += sizeof (unsigned int); + /* Skip the wide char sequence of the collating element. */ + idx += sizeof (unsigned int) * + (1 + *(unsigned int *) (extra + idx)); + /* Return the collation sequence value. */ + return *(unsigned int *) (extra + idx); + } + else if (sym_name_len == 1) + { + /* No valid character. Match it as a single byte + character. */ + return collseqmb[br_elem->opr.name[0]]; + } + } + else if (sym_name_len == 1) + return collseqmb[br_elem->opr.name[0]]; + } + return UINT_MAX; +} + +/* Local function for parse_bracket_exp used in _LIBC environment. + Build the range expression which starts from START_ELEM, and ends + at END_ELEM. The result are written to MBCSET and SBCSET. + RANGE_ALLOC is the allocated size of mbcset->range_starts, and + mbcset->range_ends, is a pointer argument since we may + update it. */ + +static __always_inline reg_errcode_t +build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, + bracket_elem_t *start_elem, bracket_elem_t *end_elem, + re_dfa_t *dfa, reg_syntax_t syntax, uint32_t nrules, + const unsigned char *collseqmb, const char *collseqwc, + int_fast32_t table_size, const int32_t *symb_table, + const unsigned char *extra) +{ + unsigned int ch; + uint32_t start_collseq; + uint32_t end_collseq; + + /* Equivalence Classes and Character Classes can't be a range + start/end. */ + if (__glibc_unlikely (start_elem->type == EQUIV_CLASS + || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS + || end_elem->type == CHAR_CLASS)) + return REG_ERANGE; + + /* FIXME: Implement rational ranges here, too. */ + start_collseq = lookup_collation_sequence_value (start_elem, nrules, collseqmb, collseqwc, + table_size, symb_table, extra); + end_collseq = lookup_collation_sequence_value (end_elem, nrules, collseqmb, collseqwc, + table_size, symb_table, extra); + /* Check start/end collation sequence values. */ + if (__glibc_unlikely (start_collseq == UINT_MAX + || end_collseq == UINT_MAX)) + return REG_ECOLLATE; + if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) + && start_collseq > end_collseq)) + return REG_ERANGE; + + /* Got valid collation sequence values, add them as a new entry. + However, if we have no collation elements, and the character set + is single byte, the single byte character set that we + build below suffices. */ + if (nrules > 0 || dfa->mb_cur_max > 1) + { + /* Check the space of the arrays. */ + if (__glibc_unlikely (*range_alloc == mbcset->nranges)) + { + /* There is not enough space, need realloc. */ + uint32_t *new_array_start; + uint32_t *new_array_end; + int new_nranges; + + /* +1 in case of mbcset->nranges is 0. */ + new_nranges = 2 * mbcset->nranges + 1; + new_array_start = re_realloc (mbcset->range_starts, uint32_t, + new_nranges); + new_array_end = re_realloc (mbcset->range_ends, uint32_t, + new_nranges); + + if (__glibc_unlikely (new_array_start == NULL + || new_array_end == NULL)) + return REG_ESPACE; + + mbcset->range_starts = new_array_start; + mbcset->range_ends = new_array_end; + *range_alloc = new_nranges; + } + + mbcset->range_starts[mbcset->nranges] = start_collseq; + mbcset->range_ends[mbcset->nranges++] = end_collseq; + } + + /* Build the table for single byte characters. */ + for (ch = 0; ch < SBC_MAX; ch++) + { + uint32_t ch_collseq; + /* if (MB_CUR_MAX == 1) */ + if (nrules == 0) + ch_collseq = collseqmb[ch]; + else + ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch)); + if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) + bitset_set (sbcset, ch); + } + return REG_NOERROR; +} + +/* Local function for parse_bracket_exp used in _LIBC environment. + Build the collating element which is represented by NAME. + The result are written to MBCSET and SBCSET. + COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a + pointer argument since we may update it. */ + +static __always_inline reg_errcode_t +build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, + Idx *coll_sym_alloc, const unsigned char *name, + uint_fast32_t nrules, int_fast32_t table_size, + const int32_t *symb_table, const unsigned char *extra) +{ + int32_t elem, idx; + size_t name_len = strlen ((const char *) name); + if (nrules != 0) + { + elem = seek_collating_symbol_entry (name, name_len, symb_table, + table_size, extra); + if (elem != -1) + { + /* We found the entry. */ + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + } + else if (name_len == 1) + { + /* No valid character, treat it as a normal + character. */ + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } + else + return REG_ECOLLATE; + + /* Got valid collation sequence, add it as a new entry. */ + /* Check the space of the arrays. */ + if (__glibc_unlikely (*coll_sym_alloc == mbcset->ncoll_syms)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->ncoll_syms is 0. */ + int new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1; + /* Use realloc since mbcset->coll_syms is NULL + if *alloc == 0. */ + int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t, + new_coll_sym_alloc); + if (__glibc_unlikely (new_coll_syms == NULL)) + return REG_ESPACE; + mbcset->coll_syms = new_coll_syms; + *coll_sym_alloc = new_coll_sym_alloc; + } + mbcset->coll_syms[mbcset->ncoll_syms++] = idx; + return REG_NOERROR; + } + else + { + if (__glibc_unlikely (name_len != 1)) + return REG_ECOLLATE; + else + { + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } + } +} +#endif /* _LIBC */ + +/* This function parse bracket expression like "[abc]", "[a-c]", + "[[.a-a.]]" etc. */ + +static bin_tree_t * +parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, + reg_syntax_t syntax, reg_errcode_t *err) +{ + const unsigned char *collseqmb = NULL; + const char *collseqwc = NULL; + uint_fast32_t nrules = 0; + int_fast32_t table_size = 0; + const void *symb_table = NULL; + const unsigned char *extra = NULL; + + re_token_t br_token; + re_bitset_ptr_t sbcset; + re_charset_t *mbcset; + Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0; + Idx equiv_class_alloc = 0, char_class_alloc = 0; + bool non_match = false; + bin_tree_t *work_tree; + int token_len; + bool first_round = true; +#ifdef _LIBC + collseqmb = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules) + { + /* + if (MB_CUR_MAX > 1) + */ + collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); + table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); + symb_table = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); + extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_EXTRAMB); + } +#endif + sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); + mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); + if (__glibc_unlikely (sbcset == NULL || mbcset == NULL)) + { + re_free (sbcset); + re_free (mbcset); + *err = REG_ESPACE; + return NULL; + } + + token_len = peek_token_bracket (token, regexp, syntax); + if (__glibc_unlikely (token->type == END_OF_RE)) + { + *err = REG_BADPAT; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_NON_MATCH_LIST) + { + mbcset->non_match = 1; + non_match = true; + if (syntax & RE_HAT_LISTS_NOT_NEWLINE) + bitset_set (sbcset, '\n'); + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + token_len = peek_token_bracket (token, regexp, syntax); + if (__glibc_unlikely (token->type == END_OF_RE)) + { + *err = REG_BADPAT; + goto parse_bracket_exp_free_return; + } + } + + /* We treat the first ']' as a normal character. */ + if (token->type == OP_CLOSE_BRACKET) + token->type = CHARACTER; + + while (1) + { + bracket_elem_t start_elem, end_elem; + unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; + unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; + reg_errcode_t ret; + int token_len2 = 0; + bool is_range_exp = false; + re_token_t token2; + + start_elem.opr.name = start_name_buf; + start_elem.type = COLL_SYM; + ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, + syntax, first_round); + if (__glibc_unlikely (ret != REG_NOERROR)) + { + *err = ret; + goto parse_bracket_exp_free_return; + } + first_round = false; + + /* Get information about the next token. We need it in any case. */ + token_len = peek_token_bracket (token, regexp, syntax); + + /* Do not check for ranges if we know they are not allowed. */ + if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS) + { + if (__glibc_unlikely (token->type == END_OF_RE)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_CHARSET_RANGE) + { + re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ + token_len2 = peek_token_bracket (&token2, regexp, syntax); + if (__glibc_unlikely (token2.type == END_OF_RE)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token2.type == OP_CLOSE_BRACKET) + { + /* We treat the last '-' as a normal character. */ + re_string_skip_bytes (regexp, -token_len); + token->type = CHARACTER; + } + else + is_range_exp = true; + } + } + + if (is_range_exp == true) + { + end_elem.opr.name = end_name_buf; + end_elem.type = COLL_SYM; + ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, + dfa, syntax, true); + if (__glibc_unlikely (ret != REG_NOERROR)) + { + *err = ret; + goto parse_bracket_exp_free_return; + } + + token_len = peek_token_bracket (token, regexp, syntax); + + *err = build_range_exp (sbcset, mbcset, &range_alloc, + &start_elem, &end_elem, + dfa, syntax, nrules, collseqmb, collseqwc, + table_size, symb_table, extra); + if (__glibc_unlikely (*err != REG_NOERROR)) + goto parse_bracket_exp_free_return; + } + else + { + switch (start_elem.type) + { + case SB_CHAR: + bitset_set (sbcset, start_elem.opr.ch); + break; + case MB_CHAR: + /* Check whether the array has enough space. */ + if (__glibc_unlikely (mbchar_alloc == mbcset->nmbchars)) + { + wchar_t *new_mbchars; + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nmbchars is 0. */ + mbchar_alloc = 2 * mbcset->nmbchars + 1; + /* Use realloc since array is NULL if *alloc == 0. */ + new_mbchars = re_realloc (mbcset->mbchars, wchar_t, + mbchar_alloc); + if (__glibc_unlikely (new_mbchars == NULL)) + goto parse_bracket_exp_espace; + mbcset->mbchars = new_mbchars; + } + mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; + break; + case EQUIV_CLASS: + *err = build_equiv_class (sbcset, + mbcset, &equiv_class_alloc, + start_elem.opr.name); + if (__glibc_unlikely (*err != REG_NOERROR)) + goto parse_bracket_exp_free_return; + break; + case COLL_SYM: + *err = build_collating_symbol (sbcset, + mbcset, &coll_sym_alloc, + start_elem.opr.name, + nrules, table_size, symb_table, extra); + if (__glibc_unlikely (*err != REG_NOERROR)) + goto parse_bracket_exp_free_return; + break; + case CHAR_CLASS: + *err = build_charclass (regexp->trans, sbcset, + mbcset, &char_class_alloc, + (const char *) start_elem.opr.name, + syntax); + if (__glibc_unlikely (*err != REG_NOERROR)) + goto parse_bracket_exp_free_return; + break; + default: + DEBUG_ASSERT (false); + break; + } + } + if (__glibc_unlikely (token->type == END_OF_RE)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_CLOSE_BRACKET) + break; + } + + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + + /* If it is non-matching list. */ + if (non_match) + bitset_not (sbcset); + + /* Ensure only single byte characters are set. */ + if (dfa->mb_cur_max > 1) + bitset_mask (sbcset, dfa->sb_char); + + if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes + || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes + || mbcset->non_match))) + { + bin_tree_t *mbc_tree; + int sbc_idx; + /* Build a tree for complex bracket. */ + dfa->has_mb_node = 1; + br_token.type = COMPLEX_BRACKET; + br_token.opr.mbcset = mbcset; + mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (mbc_tree == NULL)) + goto parse_bracket_exp_espace; + for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx) + if (sbcset[sbc_idx]) + break; + /* If there are no bits set in sbcset, there is no point + of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */ + if (sbc_idx < BITSET_WORDS) + { + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + work_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (work_tree == NULL)) + goto parse_bracket_exp_espace; + + /* Then join them by ALT node. */ + work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); + if (__glibc_unlikely (work_tree == NULL)) + goto parse_bracket_exp_espace; + } + else + { + re_free (sbcset); + work_tree = mbc_tree; + } + } + else + { + free_charset (mbcset); + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + work_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (work_tree == NULL)) + goto parse_bracket_exp_espace; + } + return work_tree; + + parse_bracket_exp_espace: + *err = REG_ESPACE; + parse_bracket_exp_free_return: + re_free (sbcset); + free_charset (mbcset); + return NULL; +} + +/* Parse an element in the bracket expression. */ + +static reg_errcode_t +parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, + re_token_t *token, int token_len, re_dfa_t *dfa, + reg_syntax_t syntax, bool accept_hyphen) +{ + int cur_char_size; + cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); + if (cur_char_size > 1) + { + elem->type = MB_CHAR; + elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); + re_string_skip_bytes (regexp, cur_char_size); + return REG_NOERROR; + } + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS + || token->type == OP_OPEN_EQUIV_CLASS) + return parse_bracket_symbol (elem, regexp, token); + if (__glibc_unlikely (token->type == OP_CHARSET_RANGE) && !accept_hyphen) + { + /* A '-' must only appear as anything but a range indicator before + the closing bracket. Everything else is an error. */ + re_token_t token2; + (void) peek_token_bracket (&token2, regexp, syntax); + if (token2.type != OP_CLOSE_BRACKET) + /* The actual error value is not standardized since this whole + case is undefined. But ERANGE makes good sense. */ + return REG_ERANGE; + } + elem->type = SB_CHAR; + elem->opr.ch = token->opr.c; + return REG_NOERROR; +} + +/* Parse a bracket symbol in the bracket expression. Bracket symbols are + such as [::], [..], and + [==]. */ + +static reg_errcode_t +parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, + re_token_t *token) +{ + unsigned char ch, delim = token->opr.c; + int i = 0; + if (re_string_eoi(regexp)) + return REG_EBRACK; + for (;; ++i) + { + if (i >= BRACKET_NAME_BUF_SIZE) + return REG_EBRACK; + if (token->type == OP_OPEN_CHAR_CLASS) + ch = re_string_fetch_byte_case (regexp); + else + ch = re_string_fetch_byte (regexp); + if (re_string_eoi(regexp)) + return REG_EBRACK; + if (ch == delim && re_string_peek_byte (regexp, 0) == ']') + break; + elem->opr.name[i] = ch; + } + re_string_skip_bytes (regexp, 1); + elem->opr.name[i] = '\0'; + switch (token->type) + { + case OP_OPEN_COLL_ELEM: + elem->type = COLL_SYM; + break; + case OP_OPEN_EQUIV_CLASS: + elem->type = EQUIV_CLASS; + break; + case OP_OPEN_CHAR_CLASS: + elem->type = CHAR_CLASS; + break; + default: + break; + } + return REG_NOERROR; +} + + /* Helper function for parse_bracket_exp. + Build the equivalence class which is represented by NAME. + The result are written to MBCSET and SBCSET. + EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, + is a pointer argument since we may update it. */ + +static reg_errcode_t +build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, + Idx *equiv_class_alloc, const unsigned char *name) +{ +#ifdef _LIBC + uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules != 0) + { + const int32_t *table, *indirect; + const unsigned char *weights, *extra, *cp; + unsigned char char_buf[2]; + int32_t idx1, idx2; + unsigned int ch; + size_t len; + /* Calculate the index for equivalence class. */ + cp = name; + table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_INDIRECTMB); + idx1 = findidx (table, indirect, extra, &cp, -1); + if (__glibc_unlikely (idx1 == 0 || *cp != '\0')) + /* This isn't a valid character. */ + return REG_ECOLLATE; + + /* Build single byte matching table for this equivalence class. */ + len = weights[idx1 & 0xffffff]; + for (ch = 0; ch < SBC_MAX; ++ch) + { + char_buf[0] = ch; + cp = char_buf; + idx2 = findidx (table, indirect, extra, &cp, 1); +/* + idx2 = table[ch]; +*/ + if (idx2 == 0) + /* This isn't a valid character. */ + continue; + /* Compare only if the length matches and the collation rule + index is the same. */ + if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24) + && memcmp (weights + (idx1 & 0xffffff) + 1, + weights + (idx2 & 0xffffff) + 1, len) == 0) + bitset_set (sbcset, ch); + } + /* Check whether the array has enough space. */ + if (__glibc_unlikely (*equiv_class_alloc == mbcset->nequiv_classes)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nequiv_classes is 0. */ + Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; + /* Use realloc since the array is NULL if *alloc == 0. */ + int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes, + int32_t, + new_equiv_class_alloc); + if (__glibc_unlikely (new_equiv_classes == NULL)) + return REG_ESPACE; + mbcset->equiv_classes = new_equiv_classes; + *equiv_class_alloc = new_equiv_class_alloc; + } + mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; + } + else +#endif /* _LIBC */ + { + if (__glibc_unlikely (strlen ((const char *) name) != 1)) + return REG_ECOLLATE; + bitset_set (sbcset, *name); + } + return REG_NOERROR; +} + + /* Helper function for parse_bracket_exp. + Build the character class which is represented by NAME. + The result are written to MBCSET and SBCSET. + CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, + is a pointer argument since we may update it. */ + +static reg_errcode_t +build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, + re_charset_t *mbcset, Idx *char_class_alloc, + const char *class_name, reg_syntax_t syntax) +{ + int i; + const char *name = class_name; + + /* In case of REG_ICASE "upper" and "lower" match the both of + upper and lower cases. */ + if ((syntax & RE_ICASE) + && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) + name = "alpha"; + + /* Check the space of the arrays. */ + if (__glibc_unlikely (*char_class_alloc == mbcset->nchar_classes)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nchar_classes is 0. */ + Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1; + /* Use realloc since array is NULL if *alloc == 0. */ + wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t, + new_char_class_alloc); + if (__glibc_unlikely (new_char_classes == NULL)) + return REG_ESPACE; + mbcset->char_classes = new_char_classes; + *char_class_alloc = new_char_class_alloc; + } + mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); + +#define BUILD_CHARCLASS_LOOP(ctype_func) \ + do { \ + if (__glibc_unlikely (trans != NULL)) \ + { \ + for (i = 0; i < SBC_MAX; ++i) \ + if (ctype_func (i)) \ + bitset_set (sbcset, trans[i]); \ + } \ + else \ + { \ + for (i = 0; i < SBC_MAX; ++i) \ + if (ctype_func (i)) \ + bitset_set (sbcset, i); \ + } \ + } while (0) + + if (strcmp (name, "alnum") == 0) + BUILD_CHARCLASS_LOOP (isalnum); + else if (strcmp (name, "cntrl") == 0) + BUILD_CHARCLASS_LOOP (iscntrl); + else if (strcmp (name, "lower") == 0) + BUILD_CHARCLASS_LOOP (islower); + else if (strcmp (name, "space") == 0) + BUILD_CHARCLASS_LOOP (isspace); + else if (strcmp (name, "alpha") == 0) + BUILD_CHARCLASS_LOOP (isalpha); + else if (strcmp (name, "digit") == 0) + BUILD_CHARCLASS_LOOP (isdigit); + else if (strcmp (name, "print") == 0) + BUILD_CHARCLASS_LOOP (isprint); + else if (strcmp (name, "upper") == 0) + BUILD_CHARCLASS_LOOP (isupper); + else if (strcmp (name, "blank") == 0) + BUILD_CHARCLASS_LOOP (isblank); + else if (strcmp (name, "graph") == 0) + BUILD_CHARCLASS_LOOP (isgraph); + else if (strcmp (name, "punct") == 0) + BUILD_CHARCLASS_LOOP (ispunct); + else if (strcmp (name, "xdigit") == 0) + BUILD_CHARCLASS_LOOP (isxdigit); + else + return REG_ECTYPE; + + return REG_NOERROR; +} + +static bin_tree_t * +build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, + const char *class_name, + const char *extra, bool non_match, + reg_errcode_t *err) +{ + re_bitset_ptr_t sbcset; + re_charset_t *mbcset; + Idx alloc = 0; + reg_errcode_t ret; + bin_tree_t *tree; + + sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); + if (__glibc_unlikely (sbcset == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); + if (__glibc_unlikely (mbcset == NULL)) + { + re_free (sbcset); + *err = REG_ESPACE; + return NULL; + } + mbcset->non_match = non_match; + + /* We don't care the syntax in this case. */ + ret = build_charclass (trans, sbcset, mbcset, &alloc, class_name, 0); + + if (__glibc_unlikely (ret != REG_NOERROR)) + { + re_free (sbcset); + free_charset (mbcset); + *err = ret; + return NULL; + } + /* \w match '_' also. */ + for (; *extra; extra++) + bitset_set (sbcset, *extra); + + /* If it is non-matching list. */ + if (non_match) + bitset_not (sbcset); + + /* Ensure only single byte characters are set. */ + if (dfa->mb_cur_max > 1) + bitset_mask (sbcset, dfa->sb_char); + + /* Build a tree for simple bracket. */ + re_token_t br_token = { .type = SIMPLE_BRACKET, .opr.sbcset = sbcset }; + tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (tree == NULL)) + goto build_word_op_espace; + + if (dfa->mb_cur_max > 1) + { + bin_tree_t *mbc_tree; + /* Build a tree for complex bracket. */ + br_token.type = COMPLEX_BRACKET; + br_token.opr.mbcset = mbcset; + dfa->has_mb_node = 1; + mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (mbc_tree == NULL)) + goto build_word_op_espace; + /* Then join them by ALT node. */ + tree = create_tree (dfa, tree, mbc_tree, OP_ALT); + if (__glibc_likely (mbc_tree != NULL)) + return tree; + } + else + { + free_charset (mbcset); + return tree; + } + + build_word_op_espace: + re_free (sbcset); + free_charset (mbcset); + *err = REG_ESPACE; + return NULL; +} + +/* This is intended for the expressions like "a{1,3}". + Fetch a number from 'input', and return the number. + Return -1 if the number field is empty like "{,1}". + Return RE_DUP_MAX + 1 if the number field is too large. + Return -2 if an error occurred. */ + +static Idx +fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) +{ + Idx num = -1; + unsigned char c; + while (1) + { + fetch_token (token, input, syntax); + c = token->opr.c; + if (__glibc_unlikely (token->type == END_OF_RE)) + return -2; + if (token->type == OP_CLOSE_DUP_NUM || c == ',') + break; + num = ((token->type != CHARACTER || c < '0' || '9' < c || num == -2) + ? -2 + : num == -1 + ? c - '0' + : MIN (RE_DUP_MAX + 1, num * 10 + c - '0')); + } + return num; +} + +static void +free_charset (re_charset_t *cset) +{ + re_free (cset->mbchars); +#ifdef _LIBC + re_free (cset->coll_syms); + re_free (cset->equiv_classes); +#endif + re_free (cset->range_starts); + re_free (cset->range_ends); + re_free (cset->char_classes); + re_free (cset); +} + +/* Functions for binary tree operation. */ + +/* Create a tree node. */ + +static bin_tree_t * +create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, + re_token_type_t type) +{ + re_token_t t = { .type = type }; + return create_token_tree (dfa, left, right, &t); +} + +static bin_tree_t * +create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, + const re_token_t *token) +{ + bin_tree_t *tree; + if (__glibc_unlikely (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE)) + { + bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1); + + if (storage == NULL) + return NULL; + storage->next = dfa->str_tree_storage; + dfa->str_tree_storage = storage; + dfa->str_tree_storage_idx = 0; + } + tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++]; + + tree->parent = NULL; + tree->left = left; + tree->right = right; + tree->token = *token; + tree->token.duplicated = 0; + tree->token.opt_subexp = 0; + tree->first = NULL; + tree->next = NULL; + tree->node_idx = -1; + + if (left != NULL) + left->parent = tree; + if (right != NULL) + right->parent = tree; + return tree; +} + +/* Mark the tree SRC as an optional subexpression. + To be called from preorder or postorder. */ + +static reg_errcode_t +mark_opt_subexp (void *extra, bin_tree_t *node) +{ + Idx idx = (uintptr_t) extra; + if (node->token.type == SUBEXP && node->token.opr.idx == idx) + node->token.opt_subexp = 1; + + return REG_NOERROR; +} + +/* Free the allocated memory inside NODE. */ + +static void +free_token (re_token_t *node) +{ + if (node->type == COMPLEX_BRACKET && node->duplicated == 0) + free_charset (node->opr.mbcset); + else if (node->type == SIMPLE_BRACKET && node->duplicated == 0) + re_free (node->opr.sbcset); +} + +/* Worker function for tree walking. Free the allocated memory inside NODE + and its children. */ + +static reg_errcode_t +free_tree (void *extra, bin_tree_t *node) +{ + free_token (&node->token); + return REG_NOERROR; +} + + +/* Duplicate the node SRC, and return new node. This is a preorder + visit similar to the one implemented by the generic visitor, but + we need more infrastructure to maintain two parallel trees --- so, + it's easier to duplicate. */ + +static bin_tree_t * +duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa) +{ + const bin_tree_t *node; + bin_tree_t *dup_root; + bin_tree_t **p_new = &dup_root, *dup_node = root->parent; + + for (node = root; ; ) + { + /* Create a new tree and link it back to the current parent. */ + *p_new = create_token_tree (dfa, NULL, NULL, &node->token); + if (*p_new == NULL) + return NULL; + (*p_new)->parent = dup_node; + (*p_new)->token.duplicated = 1; + dup_node = *p_new; + + /* Go to the left node, or up and to the right. */ + if (node->left) + { + node = node->left; + p_new = &dup_node->left; + } + else + { + const bin_tree_t *prev = NULL; + while (node->right == prev || node->right == NULL) + { + prev = node; + node = node->parent; + dup_node = dup_node->parent; + if (!node) + return dup_root; + } + node = node->right; + p_new = &dup_node->right; + } + } +} diff --git a/jni/parted/libgnulib/lib/regex.c b/jni/parted/libgnulib/lib/regex.c new file mode 100755 index 0000000..4b1a6ed --- /dev/null +++ b/jni/parted/libgnulib/lib/regex.c @@ -0,0 +1,80 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#define __STDC_WANT_IEC_60559_BFP_EXT__ + +#ifndef _LIBC +# include + +# if __GNUC_PREREQ (4, 6) +# pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" +# pragma GCC diagnostic ignored "-Wvla" +# endif +#endif + +/* Make sure no one compiles this code with a C++ compiler. */ +#if defined __cplusplus && defined _LIBC +# error "This is C code, use a C compiler" +#endif + +#ifdef _LIBC +/* We have to keep the namespace clean. */ +# define regfree(preg) __regfree (preg) +# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) +# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) +# define regerror(errcode, preg, errbuf, errbuf_size) \ + __regerror(errcode, preg, errbuf, errbuf_size) +# define re_set_registers(bu, re, nu, st, en) \ + __re_set_registers (bu, re, nu, st, en) +# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ + __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) +# define re_match(bufp, string, size, pos, regs) \ + __re_match (bufp, string, size, pos, regs) +# define re_search(bufp, string, size, startpos, range, regs) \ + __re_search (bufp, string, size, startpos, range, regs) +# define re_compile_pattern(pattern, length, bufp) \ + __re_compile_pattern (pattern, length, bufp) +# define re_set_syntax(syntax) __re_set_syntax (syntax) +# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ + __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) +# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) + +# include "../locale/localeinfo.h" +#endif + +/* On some systems, limits.h sets RE_DUP_MAX to a lower value than + GNU regex allows. Include it before , which correctly + #undefs RE_DUP_MAX and sets it to the right value. */ +#include + +#include +#include "regex_internal.h" + +#include "regex_internal.c" +#include "regcomp.c" +#include "regexec.c" + +/* Binary backward compatibility. */ +#if _LIBC +# include +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) +link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") +int re_max_failures = 2000; +# endif +#endif diff --git a/jni/parted/libgnulib/lib/regex_internal.c b/jni/parted/libgnulib/lib/regex_internal.c new file mode 100755 index 0000000..98f9eb2 --- /dev/null +++ b/jni/parted/libgnulib/lib/regex_internal.c @@ -0,0 +1,1711 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +static void re_string_construct_common (const char *str, Idx len, + re_string_t *pstr, + RE_TRANSLATE_TYPE trans, bool icase, + const re_dfa_t *dfa); +static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + re_hashval_t hash); +static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + unsigned int context, + re_hashval_t hash); +static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, + Idx new_buf_len); +static void build_wcs_buffer (re_string_t *pstr); +static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr); +static void build_upper_buffer (re_string_t *pstr); +static void re_string_translate_buffer (re_string_t *pstr); +static unsigned int re_string_context_at (const re_string_t *input, Idx idx, + int eflags) __attribute__ ((pure)); + +/* Functions for string operation. */ + +/* This function allocate the buffers. It is necessary to call + re_string_reconstruct before using the object. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, + RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) +{ + reg_errcode_t ret; + Idx init_buf_len; + + /* Ensure at least one character fits into the buffers. */ + if (init_len < dfa->mb_cur_max) + init_len = dfa->mb_cur_max; + init_buf_len = (len + 1 < init_len) ? len + 1: init_len; + re_string_construct_common (str, len, pstr, trans, icase, dfa); + + ret = re_string_realloc_buffers (pstr, init_buf_len); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + + pstr->word_char = dfa->word_char; + pstr->word_ops_used = dfa->word_ops_used; + pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; + pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len; + pstr->valid_raw_len = pstr->valid_len; + return REG_NOERROR; +} + +/* This function allocate the buffers, and initialize them. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_string_construct (re_string_t *pstr, const char *str, Idx len, + RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) +{ + reg_errcode_t ret; + memset (pstr, '\0', sizeof (re_string_t)); + re_string_construct_common (str, len, pstr, trans, icase, dfa); + + if (len > 0) + { + ret = re_string_realloc_buffers (pstr, len + 1); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + } + pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; + + if (icase) + { + if (dfa->mb_cur_max > 1) + { + while (1) + { + ret = build_wcs_upper_buffer (pstr); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + if (pstr->valid_raw_len >= len) + break; + if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max) + break; + ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + } + } + else + build_upper_buffer (pstr); + } + else + { + if (dfa->mb_cur_max > 1) + build_wcs_buffer (pstr); + else + { + if (trans != NULL) + re_string_translate_buffer (pstr); + else + { + pstr->valid_len = pstr->bufs_len; + pstr->valid_raw_len = pstr->bufs_len; + } + } + } + + return REG_NOERROR; +} + +/* Helper functions for re_string_allocate, and re_string_construct. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) +{ + if (pstr->mb_cur_max > 1) + { + wint_t *new_wcs; + + /* Avoid overflow in realloc. */ + const size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) + < new_buf_len)) + return REG_ESPACE; + + new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); + if (__glibc_unlikely (new_wcs == NULL)) + return REG_ESPACE; + pstr->wcs = new_wcs; + if (pstr->offsets != NULL) + { + Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); + if (__glibc_unlikely (new_offsets == NULL)) + return REG_ESPACE; + pstr->offsets = new_offsets; + } + } + if (pstr->mbs_allocated) + { + unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char, + new_buf_len); + if (__glibc_unlikely (new_mbs == NULL)) + return REG_ESPACE; + pstr->mbs = new_mbs; + } + pstr->bufs_len = new_buf_len; + return REG_NOERROR; +} + + +static void +re_string_construct_common (const char *str, Idx len, re_string_t *pstr, + RE_TRANSLATE_TYPE trans, bool icase, + const re_dfa_t *dfa) +{ + pstr->raw_mbs = (const unsigned char *) str; + pstr->len = len; + pstr->raw_len = len; + pstr->trans = trans; + pstr->icase = icase; + pstr->mbs_allocated = (trans != NULL || icase); + pstr->mb_cur_max = dfa->mb_cur_max; + pstr->is_utf8 = dfa->is_utf8; + pstr->map_notascii = dfa->map_notascii; + pstr->stop = pstr->len; + pstr->raw_stop = pstr->stop; +} + + +/* Build wide character buffer PSTR->WCS. + If the byte sequence of the string are: + (0), (1), (0), (1), + Then wide character buffer will be: + , WEOF , , WEOF , + We use WEOF for padding, they indicate that the position isn't + a first byte of a multibyte character. + + Note that this function assumes PSTR->VALID_LEN elements are already + built and starts from PSTR->VALID_LEN. */ + +static void +build_wcs_buffer (re_string_t *pstr) +{ +#ifdef _LIBC + unsigned char buf[MB_LEN_MAX]; + DEBUG_ASSERT (MB_LEN_MAX >= pstr->mb_cur_max); +#else + unsigned char buf[64]; +#endif + mbstate_t prev_st; + Idx byte_idx, end_idx, remain_len; + size_t mbclen; + + /* Build the buffers from pstr->valid_len to either pstr->len or + pstr->bufs_len. */ + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + for (byte_idx = pstr->valid_len; byte_idx < end_idx;) + { + wchar_t wc; + const char *p; + + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + /* Apply the translation if we need. */ + if (__glibc_unlikely (pstr->trans != NULL)) + { + int i, ch; + + for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) + { + ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i]; + buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch]; + } + p = (const char *) buf; + } + else + p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx; + mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); + if (__glibc_unlikely (mbclen == (size_t) -1 || mbclen == 0 + || (mbclen == (size_t) -2 + && pstr->bufs_len >= pstr->len))) + { + /* We treat these cases as a singlebyte character. */ + mbclen = 1; + wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; + if (__glibc_unlikely (pstr->trans != NULL)) + wc = pstr->trans[wc]; + pstr->cur_state = prev_st; + } + else if (__glibc_unlikely (mbclen == (size_t) -2)) + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + + /* Write wide character and padding. */ + pstr->wcs[byte_idx++] = wc; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = byte_idx; +} + +/* Build wide character buffer PSTR->WCS like build_wcs_buffer, + but for REG_ICASE. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +build_wcs_upper_buffer (re_string_t *pstr) +{ + mbstate_t prev_st; + Idx src_idx, byte_idx, end_idx, remain_len; + size_t mbclen; +#ifdef _LIBC + char buf[MB_LEN_MAX]; + DEBUG_ASSERT (pstr->mb_cur_max <= MB_LEN_MAX); +#else + char buf[64]; +#endif + + byte_idx = pstr->valid_len; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + /* The following optimization assumes that ASCII characters can be + mapped to wide characters with a simple cast. */ + if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed) + { + while (byte_idx < end_idx) + { + wchar_t wc; + unsigned char ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; + + if (isascii (ch) && mbsinit (&pstr->cur_state)) + { + /* The next step uses the assumption that wchar_t is encoded + ASCII-safe: all ASCII values can be converted like this. */ + wchar_t wcu = __towupper (ch); + if (isascii (wcu)) + { + pstr->mbs[byte_idx] = wcu; + pstr->wcs[byte_idx] = wcu; + byte_idx++; + continue; + } + } + + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + mbclen = __mbrtowc (&wc, + ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + + byte_idx), remain_len, &pstr->cur_state); + if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) + { + wchar_t wcu = __towupper (wc); + if (wcu != wc) + { + size_t mbcdlen; + + mbcdlen = __wcrtomb (buf, wcu, &prev_st); + if (__glibc_likely (mbclen == mbcdlen)) + memcpy (pstr->mbs + byte_idx, buf, mbclen); + else + { + src_idx = byte_idx; + goto offsets_needed; + } + } + else + memcpy (pstr->mbs + byte_idx, + pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); + pstr->wcs[byte_idx++] = wcu; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + else if (mbclen == (size_t) -1 || mbclen == 0 + || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) + { + /* It is an invalid character, an incomplete character + at the end of the string, or '\0'. Just use the byte. */ + pstr->mbs[byte_idx] = ch; + /* And also cast it to wide char. */ + pstr->wcs[byte_idx++] = (wchar_t) ch; + if (__glibc_unlikely (mbclen == (size_t) -1)) + pstr->cur_state = prev_st; + } + else + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = byte_idx; + return REG_NOERROR; + } + else + for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;) + { + wchar_t wc; + const char *p; + offsets_needed: + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + if (__glibc_unlikely (pstr->trans != NULL)) + { + int i, ch; + + for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) + { + ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i]; + buf[i] = pstr->trans[ch]; + } + p = (const char *) buf; + } + else + p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx; + mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); + if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) + { + wchar_t wcu = __towupper (wc); + if (wcu != wc) + { + size_t mbcdlen; + + mbcdlen = __wcrtomb ((char *) buf, wcu, &prev_st); + if (__glibc_likely (mbclen == mbcdlen)) + memcpy (pstr->mbs + byte_idx, buf, mbclen); + else if (mbcdlen != (size_t) -1) + { + size_t i; + + if (byte_idx + mbcdlen > pstr->bufs_len) + { + pstr->cur_state = prev_st; + break; + } + + if (pstr->offsets == NULL) + { + pstr->offsets = re_malloc (Idx, pstr->bufs_len); + + if (pstr->offsets == NULL) + return REG_ESPACE; + } + if (!pstr->offsets_needed) + { + for (i = 0; i < (size_t) byte_idx; ++i) + pstr->offsets[i] = i; + pstr->offsets_needed = 1; + } + + memcpy (pstr->mbs + byte_idx, buf, mbcdlen); + pstr->wcs[byte_idx] = wcu; + pstr->offsets[byte_idx] = src_idx; + for (i = 1; i < mbcdlen; ++i) + { + pstr->offsets[byte_idx + i] + = src_idx + (i < mbclen ? i : mbclen - 1); + pstr->wcs[byte_idx + i] = WEOF; + } + pstr->len += mbcdlen - mbclen; + if (pstr->raw_stop > src_idx) + pstr->stop += mbcdlen - mbclen; + end_idx = (pstr->bufs_len > pstr->len) + ? pstr->len : pstr->bufs_len; + byte_idx += mbcdlen; + src_idx += mbclen; + continue; + } + else + memcpy (pstr->mbs + byte_idx, p, mbclen); + } + else + memcpy (pstr->mbs + byte_idx, p, mbclen); + + if (__glibc_unlikely (pstr->offsets_needed != 0)) + { + size_t i; + for (i = 0; i < mbclen; ++i) + pstr->offsets[byte_idx + i] = src_idx + i; + } + src_idx += mbclen; + + pstr->wcs[byte_idx++] = wcu; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + else if (mbclen == (size_t) -1 || mbclen == 0 + || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) + { + /* It is an invalid character or '\0'. Just use the byte. */ + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; + + if (__glibc_unlikely (pstr->trans != NULL)) + ch = pstr->trans [ch]; + pstr->mbs[byte_idx] = ch; + + if (__glibc_unlikely (pstr->offsets_needed != 0)) + pstr->offsets[byte_idx] = src_idx; + ++src_idx; + + /* And also cast it to wide char. */ + pstr->wcs[byte_idx++] = (wchar_t) ch; + if (__glibc_unlikely (mbclen == (size_t) -1)) + pstr->cur_state = prev_st; + } + else + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = src_idx; + return REG_NOERROR; +} + +/* Skip characters until the index becomes greater than NEW_RAW_IDX. + Return the index. */ + +static Idx +re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc) +{ + mbstate_t prev_st; + Idx rawbuf_idx; + size_t mbclen; + wint_t wc = WEOF; + + /* Skip the characters which are not necessary to check. */ + for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len; + rawbuf_idx < new_raw_idx;) + { + wchar_t wc2; + Idx remain_len = pstr->raw_len - rawbuf_idx; + prev_st = pstr->cur_state; + mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, + remain_len, &pstr->cur_state); + if (__glibc_unlikely (mbclen == (size_t) -2 || mbclen == (size_t) -1 + || mbclen == 0)) + { + /* We treat these cases as a single byte character. */ + if (mbclen == 0 || remain_len == 0) + wc = L'\0'; + else + wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx); + mbclen = 1; + pstr->cur_state = prev_st; + } + else + wc = wc2; + /* Then proceed the next character. */ + rawbuf_idx += mbclen; + } + *last_wc = wc; + return rawbuf_idx; +} + +/* Build the buffer PSTR->MBS, and apply the translation if we need. + This function is used in case of REG_ICASE. */ + +static void +build_upper_buffer (re_string_t *pstr) +{ + Idx char_idx, end_idx; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) + { + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; + if (__glibc_unlikely (pstr->trans != NULL)) + ch = pstr->trans[ch]; + pstr->mbs[char_idx] = toupper (ch); + } + pstr->valid_len = char_idx; + pstr->valid_raw_len = char_idx; +} + +/* Apply TRANS to the buffer in PSTR. */ + +static void +re_string_translate_buffer (re_string_t *pstr) +{ + Idx buf_idx, end_idx; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) + { + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; + pstr->mbs[buf_idx] = pstr->trans[ch]; + } + + pstr->valid_len = buf_idx; + pstr->valid_raw_len = buf_idx; +} + +/* This function re-construct the buffers. + Concretely, convert to wide character in case of pstr->mb_cur_max > 1, + convert to upper case in case of REG_ICASE, apply translation. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) +{ + Idx offset; + + if (__glibc_unlikely (pstr->raw_mbs_idx <= idx)) + offset = idx - pstr->raw_mbs_idx; + else + { + /* Reset buffer. */ + if (pstr->mb_cur_max > 1) + memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); + pstr->len = pstr->raw_len; + pstr->stop = pstr->raw_stop; + pstr->valid_len = 0; + pstr->raw_mbs_idx = 0; + pstr->valid_raw_len = 0; + pstr->offsets_needed = 0; + pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF + : CONTEXT_NEWLINE | CONTEXT_BEGBUF); + if (!pstr->mbs_allocated) + pstr->mbs = (unsigned char *) pstr->raw_mbs; + offset = idx; + } + + if (__glibc_likely (offset != 0)) + { + /* Should the already checked characters be kept? */ + if (__glibc_likely (offset < pstr->valid_raw_len)) + { + /* Yes, move them to the front of the buffer. */ + if (__glibc_unlikely (pstr->offsets_needed)) + { + Idx low = 0, high = pstr->valid_len, mid; + do + { + mid = (high + low) / 2; + if (pstr->offsets[mid] > offset) + high = mid; + else if (pstr->offsets[mid] < offset) + low = mid + 1; + else + break; + } + while (low < high); + if (pstr->offsets[mid] < offset) + ++mid; + pstr->tip_context = re_string_context_at (pstr, mid - 1, + eflags); + /* This can be quite complicated, so handle specially + only the common and easy case where the character with + different length representation of lower and upper + case is present at or after offset. */ + if (pstr->valid_len > offset + && mid == offset && pstr->offsets[mid] == offset) + { + memmove (pstr->wcs, pstr->wcs + offset, + (pstr->valid_len - offset) * sizeof (wint_t)); + memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); + pstr->valid_len -= offset; + pstr->valid_raw_len -= offset; + for (low = 0; low < pstr->valid_len; low++) + pstr->offsets[low] = pstr->offsets[low + offset] - offset; + } + else + { + /* Otherwise, just find out how long the partial multibyte + character at offset is and fill it with WEOF/255. */ + pstr->len = pstr->raw_len - idx + offset; + pstr->stop = pstr->raw_stop - idx + offset; + pstr->offsets_needed = 0; + while (mid > 0 && pstr->offsets[mid - 1] == offset) + --mid; + while (mid < pstr->valid_len) + if (pstr->wcs[mid] != WEOF) + break; + else + ++mid; + if (mid == pstr->valid_len) + pstr->valid_len = 0; + else + { + pstr->valid_len = pstr->offsets[mid] - offset; + if (pstr->valid_len) + { + for (low = 0; low < pstr->valid_len; ++low) + pstr->wcs[low] = WEOF; + memset (pstr->mbs, 255, pstr->valid_len); + } + } + pstr->valid_raw_len = pstr->valid_len; + } + } + else + { + pstr->tip_context = re_string_context_at (pstr, offset - 1, + eflags); + if (pstr->mb_cur_max > 1) + memmove (pstr->wcs, pstr->wcs + offset, + (pstr->valid_len - offset) * sizeof (wint_t)); + if (__glibc_unlikely (pstr->mbs_allocated)) + memmove (pstr->mbs, pstr->mbs + offset, + pstr->valid_len - offset); + pstr->valid_len -= offset; + pstr->valid_raw_len -= offset; + DEBUG_ASSERT (pstr->valid_len > 0); + } + } + else + { + /* No, skip all characters until IDX. */ + Idx prev_valid_len = pstr->valid_len; + + if (__glibc_unlikely (pstr->offsets_needed)) + { + pstr->len = pstr->raw_len - idx + offset; + pstr->stop = pstr->raw_stop - idx + offset; + pstr->offsets_needed = 0; + } + pstr->valid_len = 0; + if (pstr->mb_cur_max > 1) + { + Idx wcs_idx; + wint_t wc = WEOF; + + if (pstr->is_utf8) + { + const unsigned char *raw, *p, *end; + + /* Special case UTF-8. Multi-byte chars start with any + byte other than 0x80 - 0xbf. */ + raw = pstr->raw_mbs + pstr->raw_mbs_idx; + end = raw + (offset - pstr->mb_cur_max); + if (end < pstr->raw_mbs) + end = pstr->raw_mbs; + p = raw + offset - 1; +#ifdef _LIBC + /* We know the wchar_t encoding is UCS4, so for the simple + case, ASCII characters, skip the conversion step. */ + if (isascii (*p) && __glibc_likely (pstr->trans == NULL)) + { + memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); + /* pstr->valid_len = 0; */ + wc = (wchar_t) *p; + } + else +#endif + for (; p >= end; --p) + if ((*p & 0xc0) != 0x80) + { + mbstate_t cur_state; + wchar_t wc2; + Idx mlen = raw + pstr->len - p; + unsigned char buf[6]; + size_t mbclen; + + const unsigned char *pp = p; + if (__glibc_unlikely (pstr->trans != NULL)) + { + int i = mlen < 6 ? mlen : 6; + while (--i >= 0) + buf[i] = pstr->trans[p[i]]; + pp = buf; + } + /* XXX Don't use mbrtowc, we know which conversion + to use (UTF-8 -> UCS4). */ + memset (&cur_state, 0, sizeof (cur_state)); + mbclen = __mbrtowc (&wc2, (const char *) pp, mlen, + &cur_state); + if (raw + offset - p <= mbclen + && mbclen < (size_t) -2) + { + memset (&pstr->cur_state, '\0', + sizeof (mbstate_t)); + pstr->valid_len = mbclen - (raw + offset - p); + wc = wc2; + } + break; + } + } + + if (wc == WEOF) + pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx; + if (wc == WEOF) + pstr->tip_context + = re_string_context_at (pstr, prev_valid_len - 1, eflags); + else + pstr->tip_context = ((__glibc_unlikely (pstr->word_ops_used != 0) + && IS_WIDE_WORD_CHAR (wc)) + ? CONTEXT_WORD + : ((IS_WIDE_NEWLINE (wc) + && pstr->newline_anchor) + ? CONTEXT_NEWLINE : 0)); + if (__glibc_unlikely (pstr->valid_len)) + { + for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) + pstr->wcs[wcs_idx] = WEOF; + if (pstr->mbs_allocated) + memset (pstr->mbs, 255, pstr->valid_len); + } + pstr->valid_raw_len = pstr->valid_len; + } + else + { + int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1]; + pstr->valid_raw_len = 0; + if (pstr->trans) + c = pstr->trans[c]; + pstr->tip_context = (bitset_contain (pstr->word_char, c) + ? CONTEXT_WORD + : ((IS_NEWLINE (c) && pstr->newline_anchor) + ? CONTEXT_NEWLINE : 0)); + } + } + if (!__glibc_unlikely (pstr->mbs_allocated)) + pstr->mbs += offset; + } + pstr->raw_mbs_idx = idx; + pstr->len -= offset; + pstr->stop -= offset; + + /* Then build the buffers. */ + if (pstr->mb_cur_max > 1) + { + if (pstr->icase) + { + reg_errcode_t ret = build_wcs_upper_buffer (pstr); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + } + else + build_wcs_buffer (pstr); + } + else + if (__glibc_unlikely (pstr->mbs_allocated)) + { + if (pstr->icase) + build_upper_buffer (pstr); + else if (pstr->trans != NULL) + re_string_translate_buffer (pstr); + } + else + pstr->valid_len = pstr->len; + + pstr->cur_idx = 0; + return REG_NOERROR; +} + +static unsigned char +__attribute__ ((pure)) +re_string_peek_byte_case (const re_string_t *pstr, Idx idx) +{ + int ch; + Idx off; + + /* Handle the common (easiest) cases first. */ + if (__glibc_likely (!pstr->mbs_allocated)) + return re_string_peek_byte (pstr, idx); + + if (pstr->mb_cur_max > 1 + && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx)) + return re_string_peek_byte (pstr, idx); + + off = pstr->cur_idx + idx; + if (pstr->offsets_needed) + off = pstr->offsets[off]; + + ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; + + /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I + this function returns CAPITAL LETTER I instead of first byte of + DOTLESS SMALL LETTER I. The latter would confuse the parser, + since peek_byte_case doesn't advance cur_idx in any way. */ + if (pstr->offsets_needed && !isascii (ch)) + return re_string_peek_byte (pstr, idx); + + return ch; +} + +static unsigned char +re_string_fetch_byte_case (re_string_t *pstr) +{ + if (__glibc_likely (!pstr->mbs_allocated)) + return re_string_fetch_byte (pstr); + + if (pstr->offsets_needed) + { + Idx off; + int ch; + + /* For tr_TR.UTF-8 [[:islower:]] there is + [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip + in that case the whole multi-byte character and return + the original letter. On the other side, with + [[: DOTLESS SMALL LETTER I return [[:I, as doing + anything else would complicate things too much. */ + + if (!re_string_first_byte (pstr, pstr->cur_idx)) + return re_string_fetch_byte (pstr); + + off = pstr->offsets[pstr->cur_idx]; + ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; + + if (! isascii (ch)) + return re_string_fetch_byte (pstr); + + re_string_skip_bytes (pstr, + re_string_char_size_at (pstr, pstr->cur_idx)); + return ch; + } + + return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++]; +} + +static void +re_string_destruct (re_string_t *pstr) +{ + re_free (pstr->wcs); + re_free (pstr->offsets); + if (pstr->mbs_allocated) + re_free (pstr->mbs); +} + +/* Return the context at IDX in INPUT. */ + +static unsigned int +re_string_context_at (const re_string_t *input, Idx idx, int eflags) +{ + int c; + if (__glibc_unlikely (idx < 0)) + /* In this case, we use the value stored in input->tip_context, + since we can't know the character in input->mbs[-1] here. */ + return input->tip_context; + if (__glibc_unlikely (idx == input->len)) + return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF + : CONTEXT_NEWLINE | CONTEXT_ENDBUF); + if (input->mb_cur_max > 1) + { + wint_t wc; + Idx wc_idx = idx; + while(input->wcs[wc_idx] == WEOF) + { + DEBUG_ASSERT (wc_idx >= 0); + --wc_idx; + if (wc_idx < 0) + return input->tip_context; + } + wc = input->wcs[wc_idx]; + if (__glibc_unlikely (input->word_ops_used != 0) + && IS_WIDE_WORD_CHAR (wc)) + return CONTEXT_WORD; + return (IS_WIDE_NEWLINE (wc) && input->newline_anchor + ? CONTEXT_NEWLINE : 0); + } + else + { + c = re_string_byte_at (input, idx); + if (bitset_contain (input->word_char, c)) + return CONTEXT_WORD; + return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0; + } +} + +/* Functions for set operation. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_alloc (re_node_set *set, Idx size) +{ + set->alloc = size; + set->nelem = 0; + set->elems = re_malloc (Idx, size); + if (__glibc_unlikely (set->elems == NULL) + && (MALLOC_0_IS_NONNULL || size != 0)) + return REG_ESPACE; + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_init_1 (re_node_set *set, Idx elem) +{ + set->alloc = 1; + set->nelem = 1; + set->elems = re_malloc (Idx, 1); + if (__glibc_unlikely (set->elems == NULL)) + { + set->alloc = set->nelem = 0; + return REG_ESPACE; + } + set->elems[0] = elem; + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) +{ + set->alloc = 2; + set->elems = re_malloc (Idx, 2); + if (__glibc_unlikely (set->elems == NULL)) + return REG_ESPACE; + if (elem1 == elem2) + { + set->nelem = 1; + set->elems[0] = elem1; + } + else + { + set->nelem = 2; + if (elem1 < elem2) + { + set->elems[0] = elem1; + set->elems[1] = elem2; + } + else + { + set->elems[0] = elem2; + set->elems[1] = elem1; + } + } + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_init_copy (re_node_set *dest, const re_node_set *src) +{ + dest->nelem = src->nelem; + if (src->nelem > 0) + { + dest->alloc = dest->nelem; + dest->elems = re_malloc (Idx, dest->alloc); + if (__glibc_unlikely (dest->elems == NULL)) + { + dest->alloc = dest->nelem = 0; + return REG_ESPACE; + } + memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); + } + else + re_node_set_init_empty (dest); + return REG_NOERROR; +} + +/* Calculate the intersection of the sets SRC1 and SRC2. And merge it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. + Note: We assume dest->elems is NULL, when dest->alloc is 0. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, + const re_node_set *src2) +{ + Idx i1, i2, is, id, delta, sbase; + if (src1->nelem == 0 || src2->nelem == 0) + return REG_NOERROR; + + /* We need dest->nelem + 2 * elems_in_intersection; this is a + conservative estimate. */ + if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) + { + Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; + Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); + if (__glibc_unlikely (new_elems == NULL)) + return REG_ESPACE; + dest->elems = new_elems; + dest->alloc = new_alloc; + } + + /* Find the items in the intersection of SRC1 and SRC2, and copy + into the top of DEST those that are not already in DEST itself. */ + sbase = dest->nelem + src1->nelem + src2->nelem; + i1 = src1->nelem - 1; + i2 = src2->nelem - 1; + id = dest->nelem - 1; + for (;;) + { + if (src1->elems[i1] == src2->elems[i2]) + { + /* Try to find the item in DEST. Maybe we could binary search? */ + while (id >= 0 && dest->elems[id] > src1->elems[i1]) + --id; + + if (id < 0 || dest->elems[id] != src1->elems[i1]) + dest->elems[--sbase] = src1->elems[i1]; + + if (--i1 < 0 || --i2 < 0) + break; + } + + /* Lower the highest of the two items. */ + else if (src1->elems[i1] < src2->elems[i2]) + { + if (--i2 < 0) + break; + } + else + { + if (--i1 < 0) + break; + } + } + + id = dest->nelem - 1; + is = dest->nelem + src1->nelem + src2->nelem - 1; + delta = is - sbase + 1; + + /* Now copy. When DELTA becomes zero, the remaining + DEST elements are already in place; this is more or + less the same loop that is in re_node_set_merge. */ + dest->nelem += delta; + if (delta > 0 && id >= 0) + for (;;) + { + if (dest->elems[is] > dest->elems[id]) + { + /* Copy from the top. */ + dest->elems[id + delta--] = dest->elems[is--]; + if (delta == 0) + break; + } + else + { + /* Slide from the bottom. */ + dest->elems[id + delta] = dest->elems[id]; + if (--id < 0) + break; + } + } + + /* Copy remaining SRC elements. */ + memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); + + return REG_NOERROR; +} + +/* Calculate the union set of the sets SRC1 and SRC2. And store it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_init_union (re_node_set *dest, const re_node_set *src1, + const re_node_set *src2) +{ + Idx i1, i2, id; + if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) + { + dest->alloc = src1->nelem + src2->nelem; + dest->elems = re_malloc (Idx, dest->alloc); + if (__glibc_unlikely (dest->elems == NULL)) + return REG_ESPACE; + } + else + { + if (src1 != NULL && src1->nelem > 0) + return re_node_set_init_copy (dest, src1); + else if (src2 != NULL && src2->nelem > 0) + return re_node_set_init_copy (dest, src2); + else + re_node_set_init_empty (dest); + return REG_NOERROR; + } + for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) + { + if (src1->elems[i1] > src2->elems[i2]) + { + dest->elems[id++] = src2->elems[i2++]; + continue; + } + if (src1->elems[i1] == src2->elems[i2]) + ++i2; + dest->elems[id++] = src1->elems[i1++]; + } + if (i1 < src1->nelem) + { + memcpy (dest->elems + id, src1->elems + i1, + (src1->nelem - i1) * sizeof (Idx)); + id += src1->nelem - i1; + } + else if (i2 < src2->nelem) + { + memcpy (dest->elems + id, src2->elems + i2, + (src2->nelem - i2) * sizeof (Idx)); + id += src2->nelem - i2; + } + dest->nelem = id; + return REG_NOERROR; +} + +/* Calculate the union set of the sets DEST and SRC. And store it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_merge (re_node_set *dest, const re_node_set *src) +{ + Idx is, id, sbase, delta; + if (src == NULL || src->nelem == 0) + return REG_NOERROR; + if (dest->alloc < 2 * src->nelem + dest->nelem) + { + Idx new_alloc = 2 * (src->nelem + dest->alloc); + Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc); + if (__glibc_unlikely (new_buffer == NULL)) + return REG_ESPACE; + dest->elems = new_buffer; + dest->alloc = new_alloc; + } + + if (__glibc_unlikely (dest->nelem == 0)) + { + /* Although we already guaranteed above that dest->alloc != 0 and + therefore dest->elems != NULL, add a debug assertion to pacify + GCC 11.2.1's -fanalyzer. */ + DEBUG_ASSERT (dest->elems); + dest->nelem = src->nelem; + memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); + return REG_NOERROR; + } + + /* Copy into the top of DEST the items of SRC that are not + found in DEST. Maybe we could binary search in DEST? */ + for (sbase = dest->nelem + 2 * src->nelem, + is = src->nelem - 1, id = dest->nelem - 1; is >= 0 && id >= 0; ) + { + if (dest->elems[id] == src->elems[is]) + is--, id--; + else if (dest->elems[id] < src->elems[is]) + dest->elems[--sbase] = src->elems[is--]; + else /* if (dest->elems[id] > src->elems[is]) */ + --id; + } + + if (is >= 0) + { + /* If DEST is exhausted, the remaining items of SRC must be unique. */ + sbase -= is + 1; + memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx)); + } + + id = dest->nelem - 1; + is = dest->nelem + 2 * src->nelem - 1; + delta = is - sbase + 1; + if (delta == 0) + return REG_NOERROR; + + /* Now copy. When DELTA becomes zero, the remaining + DEST elements are already in place. */ + dest->nelem += delta; + for (;;) + { + if (dest->elems[is] > dest->elems[id]) + { + /* Copy from the top. */ + dest->elems[id + delta--] = dest->elems[is--]; + if (delta == 0) + break; + } + else + { + /* Slide from the bottom. */ + dest->elems[id + delta] = dest->elems[id]; + if (--id < 0) + { + /* Copy remaining SRC elements. */ + memcpy (dest->elems, dest->elems + sbase, + delta * sizeof (Idx)); + break; + } + } + } + + return REG_NOERROR; +} + +/* Insert the new element ELEM to the re_node_set* SET. + SET should not already have ELEM. + Return true if successful. */ + +static bool +__attribute_warn_unused_result__ +re_node_set_insert (re_node_set *set, Idx elem) +{ + Idx idx; + /* In case the set is empty. */ + if (set->alloc == 0) + return __glibc_likely (re_node_set_init_1 (set, elem) == REG_NOERROR); + + if (__glibc_unlikely (set->nelem) == 0) + { + /* Although we already guaranteed above that set->alloc != 0 and + therefore set->elems != NULL, add a debug assertion to pacify + GCC 11.2 -fanalyzer. */ + DEBUG_ASSERT (set->elems); + set->elems[0] = elem; + ++set->nelem; + return true; + } + + /* Realloc if we need. */ + if (set->alloc == set->nelem) + { + Idx *new_elems; + set->alloc = set->alloc * 2; + new_elems = re_realloc (set->elems, Idx, set->alloc); + if (__glibc_unlikely (new_elems == NULL)) + return false; + set->elems = new_elems; + } + + /* Move the elements which follows the new element. Test the + first element separately to skip a check in the inner loop. */ + if (elem < set->elems[0]) + { + for (idx = set->nelem; idx > 0; idx--) + set->elems[idx] = set->elems[idx - 1]; + } + else + { + for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) + set->elems[idx] = set->elems[idx - 1]; + DEBUG_ASSERT (set->elems[idx - 1] < elem); + } + + /* Insert the new element. */ + set->elems[idx] = elem; + ++set->nelem; + return true; +} + +/* Insert the new element ELEM to the re_node_set* SET. + SET should not already have any element greater than or equal to ELEM. + Return true if successful. */ + +static bool +__attribute_warn_unused_result__ +re_node_set_insert_last (re_node_set *set, Idx elem) +{ + /* Realloc if we need. */ + if (set->alloc == set->nelem) + { + Idx *new_elems; + set->alloc = (set->alloc + 1) * 2; + new_elems = re_realloc (set->elems, Idx, set->alloc); + if (__glibc_unlikely (new_elems == NULL)) + return false; + set->elems = new_elems; + } + + /* Insert the new element. */ + set->elems[set->nelem++] = elem; + return true; +} + +/* Compare two node sets SET1 and SET2. + Return true if SET1 and SET2 are equivalent. */ + +static bool +__attribute__ ((pure)) +re_node_set_compare (const re_node_set *set1, const re_node_set *set2) +{ + Idx i; + if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) + return false; + for (i = set1->nelem ; --i >= 0 ; ) + if (set1->elems[i] != set2->elems[i]) + return false; + return true; +} + +/* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ + +static Idx +__attribute__ ((pure)) +re_node_set_contains (const re_node_set *set, Idx elem) +{ + __re_size_t idx, right, mid; + if (set->nelem <= 0) + return 0; + + /* Binary search the element. */ + idx = 0; + right = set->nelem - 1; + while (idx < right) + { + mid = (idx + right) / 2; + if (set->elems[mid] < elem) + idx = mid + 1; + else + right = mid; + } + return set->elems[idx] == elem ? idx + 1 : 0; +} + +static void +re_node_set_remove_at (re_node_set *set, Idx idx) +{ + if (idx < 0 || idx >= set->nelem) + return; + --set->nelem; + for (; idx < set->nelem; idx++) + set->elems[idx] = set->elems[idx + 1]; +} + + +/* Add the token TOKEN to dfa->nodes, and return the index of the token. + Or return -1 if an error occurred. */ + +static Idx +re_dfa_add_node (re_dfa_t *dfa, re_token_t token) +{ + if (__glibc_unlikely (dfa->nodes_len >= dfa->nodes_alloc)) + { + size_t new_nodes_alloc = dfa->nodes_alloc * 2; + Idx *new_nexts, *new_indices; + re_node_set *new_edests, *new_eclosures; + re_token_t *new_nodes; + + /* Avoid overflows in realloc. */ + const size_t max_object_size = MAX (sizeof (re_token_t), + MAX (sizeof (re_node_set), + sizeof (Idx))); + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) + < new_nodes_alloc)) + return -1; + + new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); + if (__glibc_unlikely (new_nodes == NULL)) + return -1; + dfa->nodes = new_nodes; + dfa->nodes_alloc = new_nodes_alloc; + new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc); + if (new_nexts != NULL) + dfa->nexts = new_nexts; + new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc); + if (new_indices != NULL) + dfa->org_indices = new_indices; + new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc); + if (new_edests != NULL) + dfa->edests = new_edests; + new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc); + if (new_eclosures != NULL) + dfa->eclosures = new_eclosures; + if (__glibc_unlikely (new_nexts == NULL || new_indices == NULL + || new_edests == NULL || new_eclosures == NULL)) + return -1; + } + dfa->nodes[dfa->nodes_len] = token; + dfa->nodes[dfa->nodes_len].constraint = 0; + dfa->nodes[dfa->nodes_len].accept_mb = + ((token.type == OP_PERIOD && dfa->mb_cur_max > 1) + || token.type == COMPLEX_BRACKET); + dfa->nexts[dfa->nodes_len] = -1; + re_node_set_init_empty (dfa->edests + dfa->nodes_len); + re_node_set_init_empty (dfa->eclosures + dfa->nodes_len); + return dfa->nodes_len++; +} + +static re_hashval_t +calc_state_hash (const re_node_set *nodes, unsigned int context) +{ + re_hashval_t hash = nodes->nelem + context; + Idx i; + for (i = 0 ; i < nodes->nelem ; i++) + hash += nodes->elems[i]; + return hash; +} + +/* Search for the state whose node_set is equivalent to NODES. + Return the pointer to the state, if we found it in the DFA. + Otherwise create the new one and return it. In case of an error + return NULL and set the error code in ERR. + Note: - We assume NULL as the invalid state, then it is possible that + return value is NULL and ERR is REG_NOERROR. + - We never return non-NULL value in case of any errors, it is for + optimization. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, + const re_node_set *nodes) +{ + re_hashval_t hash; + re_dfastate_t *new_state; + struct re_state_table_entry *spot; + Idx i; +#if defined GCC_LINT || defined lint + /* Suppress bogus uninitialized-variable warnings. */ + *err = REG_NOERROR; +#endif + if (__glibc_unlikely (nodes->nelem == 0)) + { + *err = REG_NOERROR; + return NULL; + } + hash = calc_state_hash (nodes, 0); + spot = dfa->state_table + (hash & dfa->state_hash_mask); + + for (i = 0 ; i < spot->num ; i++) + { + re_dfastate_t *state = spot->array[i]; + if (hash != state->hash) + continue; + if (re_node_set_compare (&state->nodes, nodes)) + return state; + } + + /* There are no appropriate state in the dfa, create the new one. */ + new_state = create_ci_newstate (dfa, nodes, hash); + if (__glibc_unlikely (new_state == NULL)) + *err = REG_ESPACE; + + return new_state; +} + +/* Search for the state whose node_set is equivalent to NODES and + whose context is equivalent to CONTEXT. + Return the pointer to the state, if we found it in the DFA. + Otherwise create the new one and return it. In case of an error + return NULL and set the error code in ERR. + Note: - We assume NULL as the invalid state, then it is possible that + return value is NULL and ERR is REG_NOERROR. + - We never return non-NULL value in case of any errors, it is for + optimization. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, + const re_node_set *nodes, unsigned int context) +{ + re_hashval_t hash; + re_dfastate_t *new_state; + struct re_state_table_entry *spot; + Idx i; +#if defined GCC_LINT || defined lint + /* Suppress bogus uninitialized-variable warnings. */ + *err = REG_NOERROR; +#endif + if (nodes->nelem == 0) + { + *err = REG_NOERROR; + return NULL; + } + hash = calc_state_hash (nodes, context); + spot = dfa->state_table + (hash & dfa->state_hash_mask); + + for (i = 0 ; i < spot->num ; i++) + { + re_dfastate_t *state = spot->array[i]; + if (state->hash == hash + && state->context == context + && re_node_set_compare (state->entrance_nodes, nodes)) + return state; + } + /* There are no appropriate state in 'dfa', create the new one. */ + new_state = create_cd_newstate (dfa, nodes, context, hash); + if (__glibc_unlikely (new_state == NULL)) + *err = REG_ESPACE; + + return new_state; +} + +/* Finish initialization of the new state NEWSTATE, and using its hash value + HASH put in the appropriate bucket of DFA's state table. Return value + indicates the error code if failed. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, + re_hashval_t hash) +{ + struct re_state_table_entry *spot; + reg_errcode_t err; + Idx i; + + newstate->hash = hash; + err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem); + if (__glibc_unlikely (err != REG_NOERROR)) + return REG_ESPACE; + for (i = 0; i < newstate->nodes.nelem; i++) + { + Idx elem = newstate->nodes.elems[i]; + if (!IS_EPSILON_NODE (dfa->nodes[elem].type)) + if (! re_node_set_insert_last (&newstate->non_eps_nodes, elem)) + return REG_ESPACE; + } + + spot = dfa->state_table + (hash & dfa->state_hash_mask); + if (__glibc_unlikely (spot->alloc <= spot->num)) + { + Idx new_alloc = 2 * spot->num + 2; + re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, + new_alloc); + if (__glibc_unlikely (new_array == NULL)) + return REG_ESPACE; + spot->array = new_array; + spot->alloc = new_alloc; + } + spot->array[spot->num++] = newstate; + return REG_NOERROR; +} + +static void +free_state (re_dfastate_t *state) +{ + re_node_set_free (&state->non_eps_nodes); + re_node_set_free (&state->inveclosure); + if (state->entrance_nodes != &state->nodes) + { + re_node_set_free (state->entrance_nodes); + re_free (state->entrance_nodes); + } + re_node_set_free (&state->nodes); + re_free (state->word_trtable); + re_free (state->trtable); + re_free (state); +} + +/* Create the new state which is independent of contexts. + Return the new state if succeeded, otherwise return NULL. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, + re_hashval_t hash) +{ + Idx i; + reg_errcode_t err; + re_dfastate_t *newstate; + + newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + if (__glibc_unlikely (newstate == NULL)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_free (newstate); + return NULL; + } + + newstate->entrance_nodes = &newstate->nodes; + for (i = 0 ; i < nodes->nelem ; i++) + { + re_token_t *node = dfa->nodes + nodes->elems[i]; + re_token_type_t type = node->type; + if (type == CHARACTER && !node->constraint) + continue; + newstate->accept_mb |= node->accept_mb; + + /* If the state has the halt node, the state is a halt state. */ + if (type == END_OF_RE) + newstate->halt = 1; + else if (type == OP_BACK_REF) + newstate->has_backref = 1; + else if (type == ANCHOR || node->constraint) + newstate->has_constraint = 1; + } + err = register_state (dfa, newstate, hash); + if (__glibc_unlikely (err != REG_NOERROR)) + { + free_state (newstate); + newstate = NULL; + } + return newstate; +} + +/* Create the new state which is depend on the context CONTEXT. + Return the new state if succeeded, otherwise return NULL. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, + unsigned int context, re_hashval_t hash) +{ + Idx i, nctx_nodes = 0; + reg_errcode_t err; + re_dfastate_t *newstate; + + newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + if (__glibc_unlikely (newstate == NULL)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_free (newstate); + return NULL; + } + + newstate->context = context; + newstate->entrance_nodes = &newstate->nodes; + + for (i = 0 ; i < nodes->nelem ; i++) + { + re_token_t *node = dfa->nodes + nodes->elems[i]; + re_token_type_t type = node->type; + unsigned int constraint = node->constraint; + + if (type == CHARACTER && !constraint) + continue; + newstate->accept_mb |= node->accept_mb; + + /* If the state has the halt node, the state is a halt state. */ + if (type == END_OF_RE) + newstate->halt = 1; + else if (type == OP_BACK_REF) + newstate->has_backref = 1; + + if (constraint) + { + if (newstate->entrance_nodes == &newstate->nodes) + { + re_node_set *entrance_nodes = re_malloc (re_node_set, 1); + if (__glibc_unlikely (entrance_nodes == NULL)) + { + free_state (newstate); + return NULL; + } + newstate->entrance_nodes = entrance_nodes; + if (re_node_set_init_copy (newstate->entrance_nodes, nodes) + != REG_NOERROR) + { + free_state (newstate); + return NULL; + } + nctx_nodes = 0; + newstate->has_constraint = 1; + } + + if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) + { + re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); + ++nctx_nodes; + } + } + } + err = register_state (dfa, newstate, hash); + if (__glibc_unlikely (err != REG_NOERROR)) + { + free_state (newstate); + newstate = NULL; + } + return newstate; +} diff --git a/jni/parted/libgnulib/lib/regexec.c b/jni/parted/libgnulib/lib/regexec.c new file mode 100755 index 0000000..9f065df --- /dev/null +++ b/jni/parted/libgnulib/lib/regexec.c @@ -0,0 +1,4221 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, + Idx n); +static void match_ctx_clean (re_match_context_t *mctx); +static void match_ctx_free (re_match_context_t *cache); +static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, + Idx str_idx, Idx from, Idx to); +static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx); +static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, + Idx str_idx); +static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, + Idx node, Idx str_idx); +static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, + re_dfastate_t **limited_sts, Idx last_node, + Idx last_str_idx); +static reg_errcode_t re_search_internal (const regex_t *preg, + const char *string, Idx length, + Idx start, Idx last_start, Idx stop, + size_t nmatch, regmatch_t pmatch[], + int eflags); +static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, + const char *string1, Idx length1, + const char *string2, Idx length2, + Idx start, regoff_t range, + struct re_registers *regs, + Idx stop, bool ret_len); +static regoff_t re_search_stub (struct re_pattern_buffer *bufp, + const char *string, Idx length, Idx start, + regoff_t range, Idx stop, + struct re_registers *regs, + bool ret_len); +static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, + Idx nregs, int regs_allocated); +static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx); +static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, + Idx *p_match_first); +static Idx check_halt_state_context (const re_match_context_t *mctx, + const re_dfastate_t *state, Idx idx); +static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, + regmatch_t *prev_idx_match, Idx cur_node, + Idx cur_idx, Idx nmatch); +static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, + Idx str_idx, Idx dest_node, Idx nregs, + regmatch_t *regs, regmatch_t *prevregs, + re_node_set *eps_via_nodes); +static reg_errcode_t set_regs (const regex_t *preg, + const re_match_context_t *mctx, + size_t nmatch, regmatch_t *pmatch, + bool fl_backtrack); +static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs); + +static int sift_states_iter_mb (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx node_idx, Idx str_idx, Idx max_str_idx); +static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, + re_sift_context_t *sctx); +static reg_errcode_t build_sifted_states (const re_match_context_t *mctx, + re_sift_context_t *sctx, Idx str_idx, + re_node_set *cur_dest); +static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx str_idx, + re_node_set *dest_nodes); +static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, + re_node_set *dest_nodes, + const re_node_set *candidates); +static bool check_dst_limits (const re_match_context_t *mctx, + const re_node_set *limits, + Idx dst_node, Idx dst_idx, Idx src_node, + Idx src_idx); +static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, + int boundaries, Idx subexp_idx, + Idx from_node, Idx bkref_idx); +static int check_dst_limits_calc_pos (const re_match_context_t *mctx, + Idx limit, Idx subexp_idx, + Idx node, Idx str_idx, + Idx bkref_idx); +static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, + re_node_set *dest_nodes, + const re_node_set *candidates, + re_node_set *limits, + struct re_backref_cache_entry *bkref_ents, + Idx str_idx); +static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx str_idx, const re_node_set *candidates); +static reg_errcode_t merge_state_array (const re_dfa_t *dfa, + re_dfastate_t **dst, + re_dfastate_t **src, Idx num); +static re_dfastate_t *find_recover_state (reg_errcode_t *err, + re_match_context_t *mctx); +static re_dfastate_t *transit_state (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *state); +static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *next_state); +static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, + re_node_set *cur_nodes, + Idx str_idx); +#if 0 +static re_dfastate_t *transit_state_sb (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *pstate); +#endif +static reg_errcode_t transit_state_mb (re_match_context_t *mctx, + re_dfastate_t *pstate); +static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, + const re_node_set *nodes); +static reg_errcode_t get_subexp (re_match_context_t *mctx, + Idx bkref_node, Idx bkref_str_idx); +static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, + const re_sub_match_top_t *sub_top, + re_sub_match_last_t *sub_last, + Idx bkref_node, Idx bkref_str); +static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, + Idx subexp_idx, int type); +static reg_errcode_t check_arrival (re_match_context_t *mctx, + state_array_t *path, Idx top_node, + Idx top_str, Idx last_node, Idx last_str, + int type); +static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx, + Idx str_idx, + re_node_set *cur_nodes, + re_node_set *next_nodes); +static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, + re_node_set *cur_nodes, + Idx ex_subexp, int type); +static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa, + re_node_set *dst_nodes, + Idx target, Idx ex_subexp, + int type); +static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx, + re_node_set *cur_nodes, Idx cur_str, + Idx subexp_num, int type); +static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state); +static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, + const re_string_t *input, Idx idx); +#ifdef _LIBC +static unsigned int find_collation_sequence_value (const unsigned char *mbs, + size_t name_len); +#endif +static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, + const re_dfastate_t *state, + re_node_set *states_node, + bitset_t *states_ch); +static bool check_node_accept (const re_match_context_t *mctx, + const re_token_t *node, Idx idx); +static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len); + +/* Entry point for POSIX code. */ + +/* regexec searches for a given pattern, specified by PREG, in the + string STRING. + + If NMATCH is zero or REG_NOSUB was set in the cflags argument to + 'regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at + least NMATCH elements, and we set them to the offsets of the + corresponding matched substrings. + + EFLAGS specifies "execution flags" which affect matching: if + REG_NOTBOL is set, then ^ does not match at the beginning of the + string; if REG_NOTEOL is set, then $ does not match at the end. + + Return 0 if a match is found, REG_NOMATCH if not, REG_BADPAT if + EFLAGS is invalid. */ + +int +regexec (const regex_t *__restrict preg, const char *__restrict string, + size_t nmatch, regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) +{ + reg_errcode_t err; + Idx start, length; + re_dfa_t *dfa = preg->buffer; + + if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND)) + return REG_BADPAT; + + if (eflags & REG_STARTEND) + { + start = pmatch[0].rm_so; + length = pmatch[0].rm_eo; + } + else + { + start = 0; + length = strlen (string); + } + + lock_lock (dfa->lock); + if (preg->no_sub) + err = re_search_internal (preg, string, length, start, length, + length, 0, NULL, eflags); + else + err = re_search_internal (preg, string, length, start, length, + length, nmatch, pmatch, eflags); + lock_unlock (dfa->lock); + return err != REG_NOERROR; +} + +#ifdef _LIBC +libc_hidden_def (__regexec) + +# include +versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4); + +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) +__typeof__ (__regexec) __compat_regexec; + +int +attribute_compat_text_section +__compat_regexec (const regex_t *__restrict preg, + const char *__restrict string, size_t nmatch, + regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) +{ + return regexec (preg, string, nmatch, pmatch, + eflags & (REG_NOTBOL | REG_NOTEOL)); +} +compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0); +# endif +#endif + +/* Entry points for GNU code. */ + +/* re_match, re_search, re_match_2, re_search_2 + + The former two functions operate on STRING with length LENGTH, + while the later two operate on concatenation of STRING1 and STRING2 + with lengths LENGTH1 and LENGTH2, respectively. + + re_match() matches the compiled pattern in BUFP against the string, + starting at index START. + + re_search() first tries matching at index START, then it tries to match + starting from index START + 1, and so on. The last start position tried + is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same + way as re_match().) + + The parameter STOP of re_{match,search}_2 specifies that no match exceeding + the first STOP characters of the concatenation of the strings should be + concerned. + + If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match + and all groups is stored in REGS. (For the "_2" variants, the offsets are + computed relative to the concatenation, not relative to the individual + strings.) + + On success, re_match* functions return the length of the match, re_search* + return the position of the start of the match. They return -1 on + match failure, -2 on error. */ + +regoff_t +re_match (struct re_pattern_buffer *bufp, const char *string, Idx length, + Idx start, struct re_registers *regs) +{ + return re_search_stub (bufp, string, length, start, 0, length, regs, true); +} +#ifdef _LIBC +weak_alias (__re_match, re_match) +#endif + +regoff_t +re_search (struct re_pattern_buffer *bufp, const char *string, Idx length, + Idx start, regoff_t range, struct re_registers *regs) +{ + return re_search_stub (bufp, string, length, start, range, length, regs, + false); +} +#ifdef _LIBC +weak_alias (__re_search, re_search) +#endif + +regoff_t +re_match_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, + const char *string2, Idx length2, Idx start, + struct re_registers *regs, Idx stop) +{ + return re_search_2_stub (bufp, string1, length1, string2, length2, + start, 0, regs, stop, true); +} +#ifdef _LIBC +weak_alias (__re_match_2, re_match_2) +#endif + +regoff_t +re_search_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, + const char *string2, Idx length2, Idx start, regoff_t range, + struct re_registers *regs, Idx stop) +{ + return re_search_2_stub (bufp, string1, length1, string2, length2, + start, range, regs, stop, false); +} +#ifdef _LIBC +weak_alias (__re_search_2, re_search_2) +#endif + +static regoff_t +re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, + Idx length1, const char *string2, Idx length2, Idx start, + regoff_t range, struct re_registers *regs, + Idx stop, bool ret_len) +{ + const char *str; + regoff_t rval; + Idx len; + char *s = NULL; + + if (__glibc_unlikely ((length1 < 0 || length2 < 0 || stop < 0 + || ckd_add (&len, length1, length2)))) + return -2; + + /* Concatenate the strings. */ + if (length2 > 0) + if (length1 > 0) + { + s = re_malloc (char, len); + + if (__glibc_unlikely (s == NULL)) + return -2; +#ifdef _LIBC + memcpy (__mempcpy (s, string1, length1), string2, length2); +#else + memcpy (s, string1, length1); + memcpy (s + length1, string2, length2); +#endif + str = s; + } + else + str = string2; + else + str = string1; + + rval = re_search_stub (bufp, str, len, start, range, stop, regs, + ret_len); + re_free (s); + return rval; +} + +/* The parameters have the same meaning as those of re_search. + Additional parameters: + If RET_LEN is true the length of the match is returned (re_match style); + otherwise the position of the match is returned. */ + +static regoff_t +re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, + Idx start, regoff_t range, Idx stop, struct re_registers *regs, + bool ret_len) +{ + reg_errcode_t result; + regmatch_t *pmatch; + Idx nregs; + regoff_t rval; + int eflags = 0; + re_dfa_t *dfa = bufp->buffer; + Idx last_start = start + range; + + /* Check for out-of-range. */ + if (__glibc_unlikely (start < 0 || start > length)) + return -1; + if (__glibc_unlikely (length < last_start + || (0 <= range && last_start < start))) + last_start = length; + else if (__glibc_unlikely (last_start < 0 + || (range < 0 && start <= last_start))) + last_start = 0; + + lock_lock (dfa->lock); + + eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; + eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; + + /* Compile fastmap if we haven't yet. */ + if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate) + re_compile_fastmap (bufp); + + if (__glibc_unlikely (bufp->no_sub)) + regs = NULL; + + /* We need at least 1 register. */ + if (regs == NULL) + nregs = 1; + else if (__glibc_unlikely (bufp->regs_allocated == REGS_FIXED + && regs->num_regs <= bufp->re_nsub)) + { + nregs = regs->num_regs; + if (__glibc_unlikely (nregs < 1)) + { + /* Nothing can be copied to regs. */ + regs = NULL; + nregs = 1; + } + } + else + nregs = bufp->re_nsub + 1; + pmatch = re_malloc (regmatch_t, nregs); + if (__glibc_unlikely (pmatch == NULL)) + { + rval = -2; + goto out; + } + + result = re_search_internal (bufp, string, length, start, last_start, stop, + nregs, pmatch, eflags); + + rval = 0; + + /* I hope we needn't fill their regs with -1's when no match was found. */ + if (result != REG_NOERROR) + rval = result == REG_NOMATCH ? -1 : -2; + else if (regs != NULL) + { + /* If caller wants register contents data back, copy them. */ + bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, + bufp->regs_allocated); + if (__glibc_unlikely (bufp->regs_allocated == REGS_UNALLOCATED)) + rval = -2; + } + + if (__glibc_likely (rval == 0)) + { + if (ret_len) + { + DEBUG_ASSERT (pmatch[0].rm_so == start); + rval = pmatch[0].rm_eo - start; + } + else + rval = pmatch[0].rm_so; + } + re_free (pmatch); + out: + lock_unlock (dfa->lock); + return rval; +} + +static unsigned +re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, + int regs_allocated) +{ + int rval = REGS_REALLOCATE; + Idx i; + Idx need_regs = nregs + 1; + /* We need one extra element beyond 'num_regs' for the '-1' marker GNU code + uses. */ + + /* Have the register data arrays been allocated? */ + if (regs_allocated == REGS_UNALLOCATED) + { /* No. So allocate them with malloc. */ + regs->start = re_malloc (regoff_t, need_regs); + if (__glibc_unlikely (regs->start == NULL)) + return REGS_UNALLOCATED; + regs->end = re_malloc (regoff_t, need_regs); + if (__glibc_unlikely (regs->end == NULL)) + { + re_free (regs->start); + return REGS_UNALLOCATED; + } + regs->num_regs = need_regs; + } + else if (regs_allocated == REGS_REALLOCATE) + { /* Yes. If we need more elements than were already + allocated, reallocate them. If we need fewer, just + leave it alone. */ + if (__glibc_unlikely (need_regs > regs->num_regs)) + { + regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); + regoff_t *new_end; + if (__glibc_unlikely (new_start == NULL)) + return REGS_UNALLOCATED; + new_end = re_realloc (regs->end, regoff_t, need_regs); + if (__glibc_unlikely (new_end == NULL)) + { + re_free (new_start); + return REGS_UNALLOCATED; + } + regs->start = new_start; + regs->end = new_end; + regs->num_regs = need_regs; + } + } + else + { + DEBUG_ASSERT (regs_allocated == REGS_FIXED); + /* This function may not be called with REGS_FIXED and nregs too big. */ + DEBUG_ASSERT (nregs <= regs->num_regs); + rval = REGS_FIXED; + } + + /* Copy the regs. */ + for (i = 0; i < nregs; ++i) + { + regs->start[i] = pmatch[i].rm_so; + regs->end[i] = pmatch[i].rm_eo; + } + for ( ; i < regs->num_regs; ++i) + regs->start[i] = regs->end[i] = -1; + + return rval; +} + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use + this memory for recording register information. STARTS and ENDS + must be allocated using the malloc library routine, and must each + be at least NUM_REGS * sizeof (regoff_t) bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ + +void +re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs, + __re_size_t num_regs, regoff_t *starts, regoff_t *ends) +{ + if (num_regs) + { + bufp->regs_allocated = REGS_REALLOCATE; + regs->num_regs = num_regs; + regs->start = starts; + regs->end = ends; + } + else + { + bufp->regs_allocated = REGS_UNALLOCATED; + regs->num_regs = 0; + regs->start = regs->end = NULL; + } +} +#ifdef _LIBC +weak_alias (__re_set_registers, re_set_registers) +#endif + +/* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + +#if defined _REGEX_RE_COMP || defined _LIBC +int +# ifdef _LIBC +weak_function +# endif +re_exec (const char *s) +{ + return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); +} +#endif /* _REGEX_RE_COMP */ + +/* Internal entry point. */ + +/* Searches for a compiled pattern PREG in the string STRING, whose + length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same + meaning as with regexec. LAST_START is START + RANGE, where + START and RANGE have the same meaning as with re_search. + Return REG_NOERROR if we find a match, and REG_NOMATCH if not, + otherwise return the error code. + Note: We assume front end functions already check ranges. + (0 <= LAST_START && LAST_START <= LENGTH) */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_search_internal (const regex_t *preg, const char *string, Idx length, + Idx start, Idx last_start, Idx stop, size_t nmatch, + regmatch_t pmatch[], int eflags) +{ + reg_errcode_t err; + const re_dfa_t *dfa = preg->buffer; + Idx left_lim, right_lim; + int incr; + bool fl_longest_match; + int match_kind; + Idx match_first; + Idx match_last = -1; + Idx extra_nmatch; + bool sb; + int ch; + re_match_context_t mctx = { .dfa = dfa }; + char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate + && start != last_start && !preg->can_be_null) + ? preg->fastmap : NULL); + RE_TRANSLATE_TYPE t = preg->translate; + + extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; + nmatch -= extra_nmatch; + + /* Check if the DFA haven't been compiled. */ + if (__glibc_unlikely (preg->used == 0 || dfa->init_state == NULL + || dfa->init_state_word == NULL + || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL)) + return REG_NOMATCH; + + /* We assume front-end functions already check them. */ + DEBUG_ASSERT (0 <= last_start && last_start <= length); + + /* If initial states with non-begbuf contexts have no elements, + the regex must be anchored. If preg->newline_anchor is set, + we'll never use init_state_nl, so do not check it. */ + if (dfa->init_state->nodes.nelem == 0 + && dfa->init_state_word->nodes.nelem == 0 + && (dfa->init_state_nl->nodes.nelem == 0 + || !preg->newline_anchor)) + { + if (start != 0 && last_start != 0) + return REG_NOMATCH; + start = last_start = 0; + } + + /* We must check the longest matching, if nmatch > 0. */ + fl_longest_match = (nmatch != 0 || dfa->nbackref); + + err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, + preg->translate, (preg->syntax & RE_ICASE) != 0, + dfa); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + mctx.input.stop = stop; + mctx.input.raw_stop = stop; + mctx.input.newline_anchor = preg->newline_anchor; + + err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + + /* We will log all the DFA states through which the dfa pass, + if nmatch > 1, or this dfa has "multibyte node", which is a + back-reference or a node which can accept multibyte character or + multi character collating element. */ + if (nmatch > 1 || dfa->has_mb_node) + { + /* Avoid overflow. */ + if (__glibc_unlikely ((MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) + <= mctx.input.bufs_len))) + { + err = REG_ESPACE; + goto free_return; + } + + mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); + if (__glibc_unlikely (mctx.state_log == NULL)) + { + err = REG_ESPACE; + goto free_return; + } + } + + match_first = start; + mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF + : CONTEXT_NEWLINE | CONTEXT_BEGBUF; + + /* Check incrementally whether the input string matches. */ + incr = (last_start < start) ? -1 : 1; + left_lim = (last_start < start) ? last_start : start; + right_lim = (last_start < start) ? start : last_start; + sb = dfa->mb_cur_max == 1; + match_kind = + (fastmap + ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0) + | (start <= last_start ? 2 : 0) + | (t != NULL ? 1 : 0)) + : 8); + + for (;; match_first += incr) + { + err = REG_NOMATCH; + if (match_first < left_lim || right_lim < match_first) + goto free_return; + + /* Advance as rapidly as possible through the string, until we + find a plausible place to start matching. This may be done + with varying efficiency, so there are various possibilities: + only the most common of them are specialized, in order to + save on code size. We use a switch statement for speed. */ + switch (match_kind) + { + case 8: + /* No fastmap. */ + break; + + case 7: + /* Fastmap with single-byte translation, match forward. */ + while (__glibc_likely (match_first < right_lim) + && !fastmap[t[(unsigned char) string[match_first]]]) + ++match_first; + goto forward_match_found_start_or_reached_end; + + case 6: + /* Fastmap without translation, match forward. */ + while (__glibc_likely (match_first < right_lim) + && !fastmap[(unsigned char) string[match_first]]) + ++match_first; + + forward_match_found_start_or_reached_end: + if (__glibc_unlikely (match_first == right_lim)) + { + ch = match_first >= length + ? 0 : (unsigned char) string[match_first]; + if (!fastmap[t ? t[ch] : ch]) + goto free_return; + } + break; + + case 4: + case 5: + /* Fastmap without multi-byte translation, match backwards. */ + while (match_first >= left_lim) + { + ch = match_first >= length + ? 0 : (unsigned char) string[match_first]; + if (fastmap[t ? t[ch] : ch]) + break; + --match_first; + } + if (match_first < left_lim) + goto free_return; + break; + + default: + /* In this case, we can't determine easily the current byte, + since it might be a component byte of a multibyte + character. Then we use the constructed buffer instead. */ + for (;;) + { + /* If MATCH_FIRST is out of the valid range, reconstruct the + buffers. */ + __re_size_t offset = match_first - mctx.input.raw_mbs_idx; + if (__glibc_unlikely (offset + >= (__re_size_t) mctx.input.valid_raw_len)) + { + err = re_string_reconstruct (&mctx.input, match_first, + eflags); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + + offset = match_first - mctx.input.raw_mbs_idx; + } + /* Use buffer byte if OFFSET is in buffer, otherwise '\0'. */ + ch = (offset < mctx.input.valid_len + ? re_string_byte_at (&mctx.input, offset) : 0); + if (fastmap[ch]) + break; + match_first += incr; + if (match_first < left_lim || match_first > right_lim) + { + err = REG_NOMATCH; + goto free_return; + } + } + break; + } + + /* Reconstruct the buffers so that the matcher can assume that + the matching starts from the beginning of the buffer. */ + err = re_string_reconstruct (&mctx.input, match_first, eflags); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + + /* Don't consider this char as a possible match start if it part, + yet isn't the head, of a multibyte character. */ + if (!sb && !re_string_first_byte (&mctx.input, 0)) + continue; + + /* It seems to be appropriate one, then use the matcher. */ + /* We assume that the matching starts from 0. */ + mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; + match_last = check_matching (&mctx, fl_longest_match, + start <= last_start ? &match_first : NULL); + if (match_last != -1) + { + if (__glibc_unlikely (match_last == -2)) + { + err = REG_ESPACE; + goto free_return; + } + else + { + mctx.match_last = match_last; + if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) + { + re_dfastate_t *pstate = mctx.state_log[match_last]; + mctx.last_node = check_halt_state_context (&mctx, pstate, + match_last); + } + if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) + || dfa->nbackref) + { + err = prune_impossible_nodes (&mctx); + if (err == REG_NOERROR) + break; + if (__glibc_unlikely (err != REG_NOMATCH)) + goto free_return; + match_last = -1; + } + else + break; /* We found a match. */ + } + } + + match_ctx_clean (&mctx); + } + + DEBUG_ASSERT (match_last != -1); + DEBUG_ASSERT (err == REG_NOERROR); + + /* Set pmatch[] if we need. */ + if (nmatch > 0) + { + Idx reg_idx; + + /* Initialize registers. */ + for (reg_idx = 1; reg_idx < nmatch; ++reg_idx) + pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; + + /* Set the points where matching start/end. */ + pmatch[0].rm_so = 0; + pmatch[0].rm_eo = mctx.match_last; + /* FIXME: This function should fail if mctx.match_last exceeds + the maximum possible regoff_t value. We need a new error + code REG_OVERFLOW. */ + + if (!preg->no_sub && nmatch > 1) + { + err = set_regs (preg, &mctx, nmatch, pmatch, + dfa->has_plural_match && dfa->nbackref > 0); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + + /* At last, add the offset to each register, since we slid + the buffers so that we could assume that the matching starts + from 0. */ + for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) + if (pmatch[reg_idx].rm_so != -1) + { + if (__glibc_unlikely (mctx.input.offsets_needed != 0)) + { + pmatch[reg_idx].rm_so = + (pmatch[reg_idx].rm_so == mctx.input.valid_len + ? mctx.input.valid_raw_len + : mctx.input.offsets[pmatch[reg_idx].rm_so]); + pmatch[reg_idx].rm_eo = + (pmatch[reg_idx].rm_eo == mctx.input.valid_len + ? mctx.input.valid_raw_len + : mctx.input.offsets[pmatch[reg_idx].rm_eo]); + } + pmatch[reg_idx].rm_so += match_first; + pmatch[reg_idx].rm_eo += match_first; + } + for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx) + { + pmatch[nmatch + reg_idx].rm_so = -1; + pmatch[nmatch + reg_idx].rm_eo = -1; + } + + if (dfa->subexp_map) + for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++) + if (dfa->subexp_map[reg_idx] != reg_idx) + { + pmatch[reg_idx + 1].rm_so + = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so; + pmatch[reg_idx + 1].rm_eo + = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo; + } + } + + free_return: + re_free (mctx.state_log); + if (dfa->nbackref) + match_ctx_free (&mctx); + re_string_destruct (&mctx.input); + return err; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +prune_impossible_nodes (re_match_context_t *mctx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx halt_node, match_last; + reg_errcode_t ret; + re_dfastate_t **sifted_states; + re_dfastate_t **lim_states = NULL; + re_sift_context_t sctx; + DEBUG_ASSERT (mctx->state_log != NULL); + match_last = mctx->match_last; + halt_node = mctx->last_node; + + /* Avoid overflow. */ + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) + <= match_last)) + return REG_ESPACE; + + sifted_states = re_malloc (re_dfastate_t *, match_last + 1); + if (__glibc_unlikely (sifted_states == NULL)) + { + ret = REG_ESPACE; + goto free_return; + } + if (dfa->nbackref) + { + lim_states = re_malloc (re_dfastate_t *, match_last + 1); + if (__glibc_unlikely (lim_states == NULL)) + { + ret = REG_ESPACE; + goto free_return; + } + while (1) + { + memset (lim_states, '\0', + sizeof (re_dfastate_t *) * (match_last + 1)); + sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, + match_last); + ret = sift_states_backward (mctx, &sctx); + re_node_set_free (&sctx.limits); + if (__glibc_unlikely (ret != REG_NOERROR)) + goto free_return; + if (sifted_states[0] != NULL || lim_states[0] != NULL) + break; + do + { + --match_last; + if (match_last < 0) + { + ret = REG_NOMATCH; + goto free_return; + } + } while (mctx->state_log[match_last] == NULL + || !mctx->state_log[match_last]->halt); + halt_node = check_halt_state_context (mctx, + mctx->state_log[match_last], + match_last); + } + ret = merge_state_array (dfa, sifted_states, lim_states, + match_last + 1); + re_free (lim_states); + lim_states = NULL; + if (__glibc_unlikely (ret != REG_NOERROR)) + goto free_return; + } + else + { + sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); + ret = sift_states_backward (mctx, &sctx); + re_node_set_free (&sctx.limits); + if (__glibc_unlikely (ret != REG_NOERROR)) + goto free_return; + if (sifted_states[0] == NULL) + { + ret = REG_NOMATCH; + goto free_return; + } + } + re_free (mctx->state_log); + mctx->state_log = sifted_states; + sifted_states = NULL; + mctx->last_node = halt_node; + mctx->match_last = match_last; + ret = REG_NOERROR; + free_return: + re_free (sifted_states); + re_free (lim_states); + return ret; +} + +/* Acquire an initial state and return it. + We must select appropriate initial state depending on the context, + since initial states may have constraints like "\<", "^", etc.. */ + +static __always_inline re_dfastate_t * +acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, + Idx idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + if (dfa->init_state->has_constraint) + { + unsigned int context; + context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags); + if (IS_WORD_CONTEXT (context)) + return dfa->init_state_word; + else if (IS_ORDINARY_CONTEXT (context)) + return dfa->init_state; + else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) + return dfa->init_state_begbuf; + else if (IS_NEWLINE_CONTEXT (context)) + return dfa->init_state_nl; + else if (IS_BEGBUF_CONTEXT (context)) + { + /* It is relatively rare case, then calculate on demand. */ + return re_acquire_state_context (err, dfa, + dfa->init_state->entrance_nodes, + context); + } + else + /* Must not happen? */ + return dfa->init_state; + } + else + return dfa->init_state; +} + +/* Check whether the regular expression match input string INPUT or not, + and return the index where the matching end. Return -1 if + there is no match, and return -2 in case of an error. + FL_LONGEST_MATCH means we want the POSIX longest matching. + If P_MATCH_FIRST is not NULL, and the match fails, it is set to the + next place where we may want to try matching. + Note that the matcher assumes that the matching starts from the current + index of the buffer. */ + +static Idx +__attribute_warn_unused_result__ +check_matching (re_match_context_t *mctx, bool fl_longest_match, + Idx *p_match_first) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx match = 0; + Idx match_last = -1; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + re_dfastate_t *cur_state; + bool at_init_state = p_match_first != NULL; + Idx next_start_idx = cur_str_idx; + + err = REG_NOERROR; + cur_state = acquire_init_state_context (&err, mctx, cur_str_idx); + /* An initial state must not be NULL (invalid). */ + if (__glibc_unlikely (cur_state == NULL)) + { + DEBUG_ASSERT (err == REG_ESPACE); + return -2; + } + + if (mctx->state_log != NULL) + { + mctx->state_log[cur_str_idx] = cur_state; + + /* Check OP_OPEN_SUBEXP in the initial state in case that we use them + later. E.g. Processing back references. */ + if (__glibc_unlikely (dfa->nbackref)) + { + at_init_state = false; + err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + if (cur_state->has_backref) + { + err = transit_state_bkref (mctx, &cur_state->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + } + + /* If the RE accepts NULL string. */ + if (__glibc_unlikely (cur_state->halt)) + { + if (!cur_state->has_constraint + || check_halt_state_context (mctx, cur_state, cur_str_idx)) + { + if (!fl_longest_match) + return cur_str_idx; + else + { + match_last = cur_str_idx; + match = 1; + } + } + } + + while (!re_string_eoi (&mctx->input)) + { + re_dfastate_t *old_state = cur_state; + Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1; + + if ((__glibc_unlikely (next_char_idx >= mctx->input.bufs_len) + && mctx->input.bufs_len < mctx->input.len) + || (__glibc_unlikely (next_char_idx >= mctx->input.valid_len) + && mctx->input.valid_len < mctx->input.len)) + { + err = extend_buffers (mctx, next_char_idx + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + { + DEBUG_ASSERT (err == REG_ESPACE); + return -2; + } + } + + cur_state = transit_state (&err, mctx, cur_state); + if (mctx->state_log != NULL) + cur_state = merge_state_with_log (&err, mctx, cur_state); + + if (cur_state == NULL) + { + /* Reached the invalid state or an error. Try to recover a valid + state using the state log, if available and if we have not + already found a valid (even if not the longest) match. */ + if (__glibc_unlikely (err != REG_NOERROR)) + return -2; + + if (mctx->state_log == NULL + || (match && !fl_longest_match) + || (cur_state = find_recover_state (&err, mctx)) == NULL) + break; + } + + if (__glibc_unlikely (at_init_state)) + { + if (old_state == cur_state) + next_start_idx = next_char_idx; + else + at_init_state = false; + } + + if (cur_state->halt) + { + /* Reached a halt state. + Check the halt state can satisfy the current context. */ + if (!cur_state->has_constraint + || check_halt_state_context (mctx, cur_state, + re_string_cur_idx (&mctx->input))) + { + /* We found an appropriate halt state. */ + match_last = re_string_cur_idx (&mctx->input); + match = 1; + + /* We found a match, do not modify match_first below. */ + p_match_first = NULL; + if (!fl_longest_match) + break; + } + } + } + + if (p_match_first) + *p_match_first += next_start_idx; + + return match_last; +} + +/* Check NODE match the current context. */ + +static bool +check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context) +{ + re_token_type_t type = dfa->nodes[node].type; + unsigned int constraint = dfa->nodes[node].constraint; + if (type != END_OF_RE) + return false; + if (!constraint) + return true; + if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context)) + return false; + return true; +} + +/* Check the halt state STATE match the current context. + Return 0 if not match, if the node, STATE has, is a halt node and + match the context, return the node. */ + +static Idx +check_halt_state_context (const re_match_context_t *mctx, + const re_dfastate_t *state, Idx idx) +{ + Idx i; + unsigned int context; + DEBUG_ASSERT (state->halt); + context = re_string_context_at (&mctx->input, idx, mctx->eflags); + for (i = 0; i < state->nodes.nelem; ++i) + if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context)) + return state->nodes.elems[i]; + return 0; +} + +/* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA + corresponding to the DFA). + Return the destination node, and update EPS_VIA_NODES; + return -1 on match failure, -2 on error. */ + +static Idx +proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, + regmatch_t *prevregs, + Idx *pidx, Idx node, re_node_set *eps_via_nodes, + struct re_fail_stack_t *fs) +{ + const re_dfa_t *const dfa = mctx->dfa; + if (IS_EPSILON_NODE (dfa->nodes[node].type)) + { + re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes; + re_node_set *edests = &dfa->edests[node]; + + if (! re_node_set_contains (eps_via_nodes, node)) + { + bool ok = re_node_set_insert (eps_via_nodes, node); + if (__glibc_unlikely (! ok)) + return -2; + } + + /* Pick a valid destination, or return -1 if none is found. */ + Idx dest_node = -1; + for (Idx i = 0; i < edests->nelem; i++) + { + Idx candidate = edests->elems[i]; + if (!re_node_set_contains (cur_nodes, candidate)) + continue; + if (dest_node == -1) + dest_node = candidate; + + else + { + /* In order to avoid infinite loop like "(a*)*", return the second + epsilon-transition if the first was already considered. */ + if (re_node_set_contains (eps_via_nodes, dest_node)) + return candidate; + + /* Otherwise, push the second epsilon-transition on the fail stack. */ + else if (fs != NULL + && push_fail_stack (fs, *pidx, candidate, nregs, regs, + prevregs, eps_via_nodes)) + return -2; + + /* We know we are going to exit. */ + break; + } + } + return dest_node; + } + else + { + Idx naccepted = 0; + re_token_type_t type = dfa->nodes[node].type; + + if (dfa->nodes[node].accept_mb) + naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); + else if (type == OP_BACK_REF) + { + Idx subexp_idx = dfa->nodes[node].opr.idx + 1; + if (subexp_idx < nregs) + naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; + if (fs != NULL) + { + if (subexp_idx >= nregs + || regs[subexp_idx].rm_so == -1 + || regs[subexp_idx].rm_eo == -1) + return -1; + else if (naccepted) + { + char *buf = (char *) re_string_get_buffer (&mctx->input); + if (mctx->input.valid_len - *pidx < naccepted + || (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, + naccepted) + != 0)) + return -1; + } + } + + if (naccepted == 0) + { + Idx dest_node; + bool ok = re_node_set_insert (eps_via_nodes, node); + if (__glibc_unlikely (! ok)) + return -2; + dest_node = dfa->edests[node].elems[0]; + if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, + dest_node)) + return dest_node; + } + } + + if (naccepted != 0 + || check_node_accept (mctx, dfa->nodes + node, *pidx)) + { + Idx dest_node = dfa->nexts[node]; + *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; + if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL + || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, + dest_node))) + return -1; + re_node_set_empty (eps_via_nodes); + return dest_node; + } + } + return -1; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, + Idx nregs, regmatch_t *regs, regmatch_t *prevregs, + re_node_set *eps_via_nodes) +{ + reg_errcode_t err; + Idx num = fs->num; + if (num == fs->alloc) + { + struct re_fail_stack_ent_t *new_array; + new_array = re_realloc (fs->stack, struct re_fail_stack_ent_t, + fs->alloc * 2); + if (new_array == NULL) + return REG_ESPACE; + fs->alloc *= 2; + fs->stack = new_array; + } + fs->stack[num].idx = str_idx; + fs->stack[num].node = dest_node; + fs->stack[num].regs = re_malloc (regmatch_t, 2 * nregs); + if (fs->stack[num].regs == NULL) + return REG_ESPACE; + fs->num = num + 1; + memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); + memcpy (fs->stack[num].regs + nregs, prevregs, sizeof (regmatch_t) * nregs); + err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); + return err; +} + +static Idx +pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, + regmatch_t *regs, regmatch_t *prevregs, + re_node_set *eps_via_nodes) +{ + if (fs == NULL || fs->num == 0) + return -1; + Idx num = --fs->num; + *pidx = fs->stack[num].idx; + memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); + memcpy (prevregs, fs->stack[num].regs + nregs, sizeof (regmatch_t) * nregs); + re_node_set_free (eps_via_nodes); + re_free (fs->stack[num].regs); + *eps_via_nodes = fs->stack[num].eps_via_nodes; + DEBUG_ASSERT (0 <= fs->stack[num].node); + return fs->stack[num].node; +} + + +#define DYNARRAY_STRUCT regmatch_list +#define DYNARRAY_ELEMENT regmatch_t +#define DYNARRAY_PREFIX regmatch_list_ +#include + +/* Set the positions where the subexpressions are starts/ends to registers + PMATCH. + Note: We assume that pmatch[0] is already set, and + pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, + regmatch_t *pmatch, bool fl_backtrack) +{ + const re_dfa_t *dfa = preg->buffer; + Idx idx, cur_node; + re_node_set eps_via_nodes; + struct re_fail_stack_t *fs; + struct re_fail_stack_t fs_body = { 0, 2, NULL }; + struct regmatch_list prev_match; + regmatch_list_init (&prev_match); + + DEBUG_ASSERT (nmatch > 1); + DEBUG_ASSERT (mctx->state_log != NULL); + if (fl_backtrack) + { + fs = &fs_body; + fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); + if (fs->stack == NULL) + return REG_ESPACE; + } + else + fs = NULL; + + cur_node = dfa->init_node; + re_node_set_init_empty (&eps_via_nodes); + + if (!regmatch_list_resize (&prev_match, nmatch)) + { + regmatch_list_free (&prev_match); + free_fail_stack_return (fs); + return REG_ESPACE; + } + regmatch_t *prev_idx_match = regmatch_list_begin (&prev_match); + memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); + + for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) + { + update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch); + + if ((idx == pmatch[0].rm_eo && cur_node == mctx->last_node) + || (fs && re_node_set_contains (&eps_via_nodes, cur_node))) + { + Idx reg_idx; + cur_node = -1; + if (fs) + { + for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) + if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) + { + cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, + prev_idx_match, &eps_via_nodes); + break; + } + } + if (cur_node < 0) + { + re_node_set_free (&eps_via_nodes); + regmatch_list_free (&prev_match); + return free_fail_stack_return (fs); + } + } + + /* Proceed to next node. */ + cur_node = proceed_next_node (mctx, nmatch, pmatch, prev_idx_match, + &idx, cur_node, + &eps_via_nodes, fs); + + if (__glibc_unlikely (cur_node < 0)) + { + if (__glibc_unlikely (cur_node == -2)) + { + re_node_set_free (&eps_via_nodes); + regmatch_list_free (&prev_match); + free_fail_stack_return (fs); + return REG_ESPACE; + } + cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, + prev_idx_match, &eps_via_nodes); + if (cur_node < 0) + { + re_node_set_free (&eps_via_nodes); + regmatch_list_free (&prev_match); + free_fail_stack_return (fs); + return REG_NOMATCH; + } + } + } + re_node_set_free (&eps_via_nodes); + regmatch_list_free (&prev_match); + return free_fail_stack_return (fs); +} + +static reg_errcode_t +free_fail_stack_return (struct re_fail_stack_t *fs) +{ + if (fs) + { + Idx fs_idx; + for (fs_idx = 0; fs_idx < fs->num; ++fs_idx) + { + re_node_set_free (&fs->stack[fs_idx].eps_via_nodes); + re_free (fs->stack[fs_idx].regs); + } + re_free (fs->stack); + } + return REG_NOERROR; +} + +static void +update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, + regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch) +{ + int type = dfa->nodes[cur_node].type; + if (type == OP_OPEN_SUBEXP) + { + Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; + + /* We are at the first node of this sub expression. */ + if (reg_num < nmatch) + { + pmatch[reg_num].rm_so = cur_idx; + pmatch[reg_num].rm_eo = -1; + } + } + else if (type == OP_CLOSE_SUBEXP) + { + /* We are at the last node of this sub expression. */ + Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; + if (reg_num < nmatch) + { + if (pmatch[reg_num].rm_so < cur_idx) + { + pmatch[reg_num].rm_eo = cur_idx; + /* This is a non-empty match or we are not inside an optional + subexpression. Accept this right away. */ + memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); + } + else + { + if (dfa->nodes[cur_node].opt_subexp + && prev_idx_match[reg_num].rm_so != -1) + /* We transited through an empty match for an optional + subexpression, like (a?)*, and this is not the subexp's + first match. Copy back the old content of the registers + so that matches of an inner subexpression are undone as + well, like in ((a?))*. */ + memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch); + else + /* We completed a subexpression, but it may be part of + an optional one, so do not update PREV_IDX_MATCH. */ + pmatch[reg_num].rm_eo = cur_idx; + } + } + } +} + +/* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 + and sift the nodes in each states according to the following rules. + Updated state_log will be wrote to STATE_LOG. + + Rules: We throw away the Node 'a' in the STATE_LOG[STR_IDX] if... + 1. When STR_IDX == MATCH_LAST(the last index in the state_log): + If 'a' isn't the LAST_NODE and 'a' can't epsilon transit to + the LAST_NODE, we throw away the node 'a'. + 2. When 0 <= STR_IDX < MATCH_LAST and 'a' accepts + string 's' and transit to 'b': + i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw + away the node 'a'. + ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is + thrown away, we throw away the node 'a'. + 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b': + i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the + node 'a'. + ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away, + we throw away the node 'a'. */ + +#define STATE_NODE_CONTAINS(state,node) \ + ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) + +static reg_errcode_t +sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) +{ + reg_errcode_t err; + int null_cnt = 0; + Idx str_idx = sctx->last_str_idx; + re_node_set cur_dest; + + DEBUG_ASSERT (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); + + /* Build sifted state_log[str_idx]. It has the nodes which can epsilon + transit to the last_node and the last_node itself. */ + err = re_node_set_init_1 (&cur_dest, sctx->last_node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + + /* Then check each states in the state_log. */ + while (str_idx > 0) + { + /* Update counters. */ + null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; + if (null_cnt > mctx->max_mb_elem_len) + { + memset (sctx->sifted_states, '\0', + sizeof (re_dfastate_t *) * str_idx); + re_node_set_free (&cur_dest); + return REG_NOERROR; + } + re_node_set_empty (&cur_dest); + --str_idx; + + if (mctx->state_log[str_idx]) + { + err = build_sifted_states (mctx, sctx, str_idx, &cur_dest); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + + /* Add all the nodes which satisfy the following conditions: + - It can epsilon transit to a node in CUR_DEST. + - It is in CUR_SRC. + And update state_log. */ + err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + err = REG_NOERROR; + free_return: + re_node_set_free (&cur_dest); + return err; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx str_idx, re_node_set *cur_dest) +{ + const re_dfa_t *const dfa = mctx->dfa; + const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes; + Idx i; + + /* Then build the next sifted state. + We build the next sifted state on 'cur_dest', and update + 'sifted_states[str_idx]' with 'cur_dest'. + Note: + 'cur_dest' is the sifted state from 'state_log[str_idx + 1]'. + 'cur_src' points the node_set of the old 'state_log[str_idx]' + (with the epsilon nodes pre-filtered out). */ + for (i = 0; i < cur_src->nelem; i++) + { + Idx prev_node = cur_src->elems[i]; + int naccepted = 0; + bool ok; + DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[prev_node].type)); + + /* If the node may accept "multi byte". */ + if (dfa->nodes[prev_node].accept_mb) + naccepted = sift_states_iter_mb (mctx, sctx, prev_node, + str_idx, sctx->last_str_idx); + + /* We don't check backreferences here. + See update_cur_sifted_state(). */ + if (!naccepted + && check_node_accept (mctx, dfa->nodes + prev_node, str_idx) + && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], + dfa->nexts[prev_node])) + naccepted = 1; + + if (naccepted == 0) + continue; + + if (sctx->limits.nelem) + { + Idx to_idx = str_idx + naccepted; + if (check_dst_limits (mctx, &sctx->limits, + dfa->nexts[prev_node], to_idx, + prev_node, str_idx)) + continue; + } + ok = re_node_set_insert (cur_dest, prev_node); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + + return REG_NOERROR; +} + +/* Helper functions. */ + +static reg_errcode_t +clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) +{ + Idx top = mctx->state_log_top; + + if ((next_state_log_idx >= mctx->input.bufs_len + && mctx->input.bufs_len < mctx->input.len) + || (next_state_log_idx >= mctx->input.valid_len + && mctx->input.valid_len < mctx->input.len)) + { + reg_errcode_t err; + err = extend_buffers (mctx, next_state_log_idx + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + if (top < next_state_log_idx) + { + DEBUG_ASSERT (mctx->state_log != NULL); + memset (mctx->state_log + top + 1, '\0', + sizeof (re_dfastate_t *) * (next_state_log_idx - top)); + mctx->state_log_top = next_state_log_idx; + } + return REG_NOERROR; +} + +static reg_errcode_t +merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, + re_dfastate_t **src, Idx num) +{ + Idx st_idx; + reg_errcode_t err; + for (st_idx = 0; st_idx < num; ++st_idx) + { + if (dst[st_idx] == NULL) + dst[st_idx] = src[st_idx]; + else if (src[st_idx] != NULL) + { + re_node_set merged_set; + err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, + &src[st_idx]->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); + re_node_set_free (&merged_set); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + return REG_NOERROR; +} + +static reg_errcode_t +update_cur_sifted_state (const re_match_context_t *mctx, + re_sift_context_t *sctx, Idx str_idx, + re_node_set *dest_nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err = REG_NOERROR; + const re_node_set *candidates; + candidates = ((mctx->state_log[str_idx] == NULL) ? NULL + : &mctx->state_log[str_idx]->nodes); + + if (dest_nodes->nelem == 0) + sctx->sifted_states[str_idx] = NULL; + else + { + if (candidates) + { + /* At first, add the nodes which can epsilon transit to a node in + DEST_NODE. */ + err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + /* Then, check the limitations in the current sift_context. */ + if (sctx->limits.nelem) + { + err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, + mctx->bkref_ents, str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + + sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + if (candidates && mctx->state_log[str_idx]->has_backref) + { + err = sift_states_bkref (mctx, sctx, str_idx, candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, + const re_node_set *candidates) +{ + reg_errcode_t err = REG_NOERROR; + Idx i; + + re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + if (!state->inveclosure.alloc) + { + err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); + if (__glibc_unlikely (err != REG_NOERROR)) + return REG_ESPACE; + for (i = 0; i < dest_nodes->nelem; i++) + { + err = re_node_set_merge (&state->inveclosure, + dfa->inveclosures + dest_nodes->elems[i]); + if (__glibc_unlikely (err != REG_NOERROR)) + return REG_ESPACE; + } + } + return re_node_set_add_intersect (dest_nodes, candidates, + &state->inveclosure); +} + +static reg_errcode_t +sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes, + const re_node_set *candidates) +{ + Idx ecl_idx; + reg_errcode_t err; + re_node_set *inv_eclosure = dfa->inveclosures + node; + re_node_set except_nodes; + re_node_set_init_empty (&except_nodes); + for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) + { + Idx cur_node = inv_eclosure->elems[ecl_idx]; + if (cur_node == node) + continue; + if (IS_EPSILON_NODE (dfa->nodes[cur_node].type)) + { + Idx edst1 = dfa->edests[cur_node].elems[0]; + Idx edst2 = ((dfa->edests[cur_node].nelem > 1) + ? dfa->edests[cur_node].elems[1] : -1); + if ((!re_node_set_contains (inv_eclosure, edst1) + && re_node_set_contains (dest_nodes, edst1)) + || (edst2 > 0 + && !re_node_set_contains (inv_eclosure, edst2) + && re_node_set_contains (dest_nodes, edst2))) + { + err = re_node_set_add_intersect (&except_nodes, candidates, + dfa->inveclosures + cur_node); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&except_nodes); + return err; + } + } + } + } + for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) + { + Idx cur_node = inv_eclosure->elems[ecl_idx]; + if (!re_node_set_contains (&except_nodes, cur_node)) + { + Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1; + re_node_set_remove_at (dest_nodes, idx); + } + } + re_node_set_free (&except_nodes); + return REG_NOERROR; +} + +static bool +check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, + Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx lim_idx, src_pos, dst_pos; + + Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx); + Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx); + for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) + { + Idx subexp_idx; + struct re_backref_cache_entry *ent; + ent = mctx->bkref_ents + limits->elems[lim_idx]; + subexp_idx = dfa->nodes[ent->node].opr.idx; + + dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], + subexp_idx, dst_node, dst_idx, + dst_bkref_idx); + src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], + subexp_idx, src_node, src_idx, + src_bkref_idx); + + /* In case of: + ( ) + ( ) + ( ) */ + if (src_pos == dst_pos) + continue; /* This is unrelated limitation. */ + else + return true; + } + return false; +} + +static int +check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, + Idx subexp_idx, Idx from_node, Idx bkref_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + const re_node_set *eclosures = dfa->eclosures + from_node; + Idx node_idx; + + /* Else, we are on the boundary: examine the nodes on the epsilon + closure. */ + for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) + { + Idx node = eclosures->elems[node_idx]; + switch (dfa->nodes[node].type) + { + case OP_BACK_REF: + if (bkref_idx != -1) + { + struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx; + do + { + Idx dst; + int cpos; + + if (ent->node != node) + continue; + + if (subexp_idx < BITSET_WORD_BITS + && !(ent->eps_reachable_subexps_map + & ((bitset_word_t) 1 << subexp_idx))) + continue; + + /* Recurse trying to reach the OP_OPEN_SUBEXP and + OP_CLOSE_SUBEXP cases below. But, if the + destination node is the same node as the source + node, don't recurse because it would cause an + infinite loop: a regex that exhibits this behavior + is ()\1*\1* */ + dst = dfa->edests[node].elems[0]; + if (dst == from_node) + { + if (boundaries & 1) + return -1; + else /* if (boundaries & 2) */ + return 0; + } + + cpos = + check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, + dst, bkref_idx); + if (cpos == -1 /* && (boundaries & 1) */) + return -1; + if (cpos == 0 && (boundaries & 2)) + return 0; + + if (subexp_idx < BITSET_WORD_BITS) + ent->eps_reachable_subexps_map + &= ~((bitset_word_t) 1 << subexp_idx); + } + while (ent++->more); + } + break; + + case OP_OPEN_SUBEXP: + if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx) + return -1; + break; + + case OP_CLOSE_SUBEXP: + if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx) + return 0; + break; + + default: + break; + } + } + + return (boundaries & 2) ? 1 : 0; +} + +static int +check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, + Idx subexp_idx, Idx from_node, Idx str_idx, + Idx bkref_idx) +{ + struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; + int boundaries; + + /* If we are outside the range of the subexpression, return -1 or 1. */ + if (str_idx < lim->subexp_from) + return -1; + + if (lim->subexp_to < str_idx) + return 1; + + /* If we are within the subexpression, return 0. */ + boundaries = (str_idx == lim->subexp_from); + boundaries |= (str_idx == lim->subexp_to) << 1; + if (boundaries == 0) + return 0; + + /* Else, examine epsilon closure. */ + return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, + from_node, bkref_idx); +} + +/* Check the limitations of sub expressions LIMITS, and remove the nodes + which are against limitations from DEST_NODES. */ + +static reg_errcode_t +check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, + const re_node_set *candidates, re_node_set *limits, + struct re_backref_cache_entry *bkref_ents, Idx str_idx) +{ + reg_errcode_t err; + Idx node_idx, lim_idx; + + for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) + { + Idx subexp_idx; + struct re_backref_cache_entry *ent; + ent = bkref_ents + limits->elems[lim_idx]; + + if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) + continue; /* This is unrelated limitation. */ + + subexp_idx = dfa->nodes[ent->node].opr.idx; + if (ent->subexp_to == str_idx) + { + Idx ops_node = -1; + Idx cls_node = -1; + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + re_token_type_t type = dfa->nodes[node].type; + if (type == OP_OPEN_SUBEXP + && subexp_idx == dfa->nodes[node].opr.idx) + ops_node = node; + else if (type == OP_CLOSE_SUBEXP + && subexp_idx == dfa->nodes[node].opr.idx) + cls_node = node; + } + + /* Check the limitation of the open subexpression. */ + /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ + if (ops_node >= 0) + { + err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, + candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + /* Check the limitation of the close subexpression. */ + if (cls_node >= 0) + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + if (!re_node_set_contains (dfa->inveclosures + node, + cls_node) + && !re_node_set_contains (dfa->eclosures + node, + cls_node)) + { + /* It is against this limitation. + Remove it form the current sifted state. */ + err = sub_epsilon_src_nodes (dfa, node, dest_nodes, + candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + --node_idx; + } + } + } + else /* (ent->subexp_to != str_idx) */ + { + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + re_token_type_t type = dfa->nodes[node].type; + if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) + { + if (subexp_idx != dfa->nodes[node].opr.idx) + continue; + /* It is against this limitation. + Remove it form the current sifted state. */ + err = sub_epsilon_src_nodes (dfa, node, dest_nodes, + candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + } + } + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx str_idx, const re_node_set *candidates) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx node_idx, node; + re_sift_context_t local_sctx; + Idx first_idx = search_cur_bkref_entry (mctx, str_idx); + + if (first_idx == -1) + return REG_NOERROR; + + local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ + + for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) + { + Idx enabled_idx; + re_token_type_t type; + struct re_backref_cache_entry *entry; + node = candidates->elems[node_idx]; + type = dfa->nodes[node].type; + /* Avoid infinite loop for the REs like "()\1+". */ + if (node == sctx->last_node && str_idx == sctx->last_str_idx) + continue; + if (type != OP_BACK_REF) + continue; + + entry = mctx->bkref_ents + first_idx; + enabled_idx = first_idx; + do + { + Idx subexp_len; + Idx to_idx; + Idx dst_node; + bool ok; + re_dfastate_t *cur_state; + + if (entry->node != node) + continue; + subexp_len = entry->subexp_to - entry->subexp_from; + to_idx = str_idx + subexp_len; + dst_node = (subexp_len ? dfa->nexts[node] + : dfa->edests[node].elems[0]); + + if (to_idx > sctx->last_str_idx + || sctx->sifted_states[to_idx] == NULL + || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node) + || check_dst_limits (mctx, &sctx->limits, node, + str_idx, dst_node, to_idx)) + continue; + + if (local_sctx.sifted_states == NULL) + { + local_sctx = *sctx; + err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + local_sctx.last_node = node; + local_sctx.last_str_idx = str_idx; + ok = re_node_set_insert (&local_sctx.limits, enabled_idx); + if (__glibc_unlikely (! ok)) + { + err = REG_ESPACE; + goto free_return; + } + cur_state = local_sctx.sifted_states[str_idx]; + err = sift_states_backward (mctx, &local_sctx); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + if (sctx->limited_states != NULL) + { + err = merge_state_array (dfa, sctx->limited_states, + local_sctx.sifted_states, + str_idx + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + local_sctx.sifted_states[str_idx] = cur_state; + re_node_set_remove (&local_sctx.limits, enabled_idx); + + /* mctx->bkref_ents may have changed, reload the pointer. */ + entry = mctx->bkref_ents + enabled_idx; + } + while (enabled_idx++, entry++->more); + } + err = REG_NOERROR; + free_return: + if (local_sctx.sifted_states != NULL) + { + re_node_set_free (&local_sctx.limits); + } + + return err; +} + + +static int +sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx node_idx, Idx str_idx, Idx max_str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + int naccepted; + /* Check the node can accept "multi byte". */ + naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); + if (naccepted > 0 && str_idx + naccepted <= max_str_idx + && !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], + dfa->nexts[node_idx])) + /* The node can't accept the "multi byte", or the + destination was already thrown away, then the node + couldn't accept the current input "multi byte". */ + naccepted = 0; + /* Otherwise, it is sure that the node could accept + 'naccepted' bytes input. */ + return naccepted; +} + +/* Functions for state transition. */ + +/* Return the next state to which the current state STATE will transit by + accepting the current input byte, and update STATE_LOG if necessary. + Return NULL on failure. + If STATE can accept a multibyte char/collating element/back reference + update the destination of STATE_LOG. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +transit_state (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *state) +{ + re_dfastate_t **trtable; + unsigned char ch; + + /* If the current state can accept multibyte. */ + if (__glibc_unlikely (state->accept_mb)) + { + *err = transit_state_mb (mctx, state); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + } + + /* Then decide the next state with the single byte. */ +#if 0 + if (0) + /* don't use transition table */ + return transit_state_sb (err, mctx, state); +#endif + + /* Use transition table */ + ch = re_string_fetch_byte (&mctx->input); + for (;;) + { + trtable = state->trtable; + if (__glibc_likely (trtable != NULL)) + return trtable[ch]; + + trtable = state->word_trtable; + if (__glibc_likely (trtable != NULL)) + { + unsigned int context; + context + = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input) - 1, + mctx->eflags); + if (IS_WORD_CONTEXT (context)) + return trtable[ch + SBC_MAX]; + else + return trtable[ch]; + } + + if (!build_trtable (mctx->dfa, state)) + { + *err = REG_ESPACE; + return NULL; + } + + /* Retry, we now have a transition table. */ + } +} + +/* Update the state_log if we need */ +static re_dfastate_t * +merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *next_state) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx cur_idx = re_string_cur_idx (&mctx->input); + + if (cur_idx > mctx->state_log_top) + { + mctx->state_log[cur_idx] = next_state; + mctx->state_log_top = cur_idx; + } + else if (mctx->state_log[cur_idx] == 0) + { + mctx->state_log[cur_idx] = next_state; + } + else + { + re_dfastate_t *pstate; + unsigned int context; + re_node_set next_nodes, *log_nodes, *table_nodes = NULL; + /* If (state_log[cur_idx] != 0), it implies that cur_idx is + the destination of a multibyte char/collating element/ + back reference. Then the next state is the union set of + these destinations and the results of the transition table. */ + pstate = mctx->state_log[cur_idx]; + log_nodes = pstate->entrance_nodes; + if (next_state != NULL) + { + table_nodes = next_state->entrance_nodes; + *err = re_node_set_init_union (&next_nodes, table_nodes, + log_nodes); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + } + else + next_nodes = *log_nodes; + /* Note: We already add the nodes of the initial state, + then we don't need to add them here. */ + + context = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input) - 1, + mctx->eflags); + next_state = mctx->state_log[cur_idx] + = re_acquire_state_context (err, dfa, &next_nodes, context); + /* We don't need to check errors here, since the return value of + this function is next_state and ERR is already set. */ + + if (table_nodes != NULL) + re_node_set_free (&next_nodes); + } + + if (__glibc_unlikely (dfa->nbackref) && next_state != NULL) + { + /* Check OP_OPEN_SUBEXP in the current state in case that we use them + later. We must check them here, since the back references in the + next state might use them. */ + *err = check_subexp_matching_top (mctx, &next_state->nodes, + cur_idx); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + + /* If the next state has back references. */ + if (next_state->has_backref) + { + *err = transit_state_bkref (mctx, &next_state->nodes); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + next_state = mctx->state_log[cur_idx]; + } + } + + return next_state; +} + +/* Skip bytes in the input that correspond to part of a + multi-byte match, then look in the log for a state + from which to restart matching. */ +static re_dfastate_t * +find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) +{ + re_dfastate_t *cur_state; + do + { + Idx max = mctx->state_log_top; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + + do + { + if (++cur_str_idx > max) + return NULL; + re_string_skip_bytes (&mctx->input, 1); + } + while (mctx->state_log[cur_str_idx] == NULL); + + cur_state = merge_state_with_log (err, mctx, NULL); + } + while (*err == REG_NOERROR && cur_state == NULL); + return cur_state; +} + +/* Helper functions for transit_state. */ + +/* From the node set CUR_NODES, pick up the nodes whose types are + OP_OPEN_SUBEXP and which have corresponding back references in the regular + expression. And register them to use them later for evaluating the + corresponding back references. */ + +static reg_errcode_t +check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, + Idx str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx node_idx; + reg_errcode_t err; + + /* TODO: This isn't efficient. + Because there might be more than one nodes whose types are + OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all + nodes. + E.g. RE: (a){2} */ + for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx) + { + Idx node = cur_nodes->elems[node_idx]; + if (dfa->nodes[node].type == OP_OPEN_SUBEXP + && dfa->nodes[node].opr.idx < BITSET_WORD_BITS + && (dfa->used_bkref_map + & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx))) + { + err = match_ctx_add_subtop (mctx, node, str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + return REG_NOERROR; +} + +#if 0 +/* Return the next state to which the current state STATE will transit by + accepting the current input byte. Return NULL on failure. */ + +static re_dfastate_t * +transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *state) +{ + const re_dfa_t *const dfa = mctx->dfa; + re_node_set next_nodes; + re_dfastate_t *next_state; + Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); + unsigned int context; + + *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) + { + Idx cur_node = state->nodes.elems[node_cnt]; + if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx)) + { + *err = re_node_set_merge (&next_nodes, + dfa->eclosures + dfa->nexts[cur_node]); + if (__glibc_unlikely (*err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return NULL; + } + } + } + context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); + next_state = re_acquire_state_context (err, dfa, &next_nodes, context); + /* We don't need to check errors here, since the return value of + this function is next_state and ERR is already set. */ + + re_node_set_free (&next_nodes); + re_string_skip_bytes (&mctx->input, 1); + return next_state; +} +#endif + +static reg_errcode_t +transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx i; + + for (i = 0; i < pstate->nodes.nelem; ++i) + { + re_node_set dest_nodes, *new_nodes; + Idx cur_node_idx = pstate->nodes.elems[i]; + int naccepted; + Idx dest_idx; + unsigned int context; + re_dfastate_t *dest_state; + + if (!dfa->nodes[cur_node_idx].accept_mb) + continue; + + if (dfa->nodes[cur_node_idx].constraint) + { + context = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input), + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, + context)) + continue; + } + + /* How many bytes the node can accept? */ + naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, + re_string_cur_idx (&mctx->input)); + if (naccepted == 0) + continue; + + /* The node can accepts 'naccepted' bytes. */ + dest_idx = re_string_cur_idx (&mctx->input) + naccepted; + mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted + : mctx->max_mb_elem_len); + err = clean_state_log_if_needed (mctx, dest_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + DEBUG_ASSERT (dfa->nexts[cur_node_idx] != -1); + new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx]; + + dest_state = mctx->state_log[dest_idx]; + if (dest_state == NULL) + dest_nodes = *new_nodes; + else + { + err = re_node_set_init_union (&dest_nodes, + dest_state->entrance_nodes, new_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + context = re_string_context_at (&mctx->input, dest_idx - 1, + mctx->eflags); + mctx->state_log[dest_idx] + = re_acquire_state_context (&err, dfa, &dest_nodes, context); + if (dest_state != NULL) + re_node_set_free (&dest_nodes); + if (__glibc_unlikely (mctx->state_log[dest_idx] == NULL + && err != REG_NOERROR)) + return err; + } + return REG_NOERROR; +} + +static reg_errcode_t +transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx i; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + + for (i = 0; i < nodes->nelem; ++i) + { + Idx dest_str_idx, prev_nelem, bkc_idx; + Idx node_idx = nodes->elems[i]; + unsigned int context; + const re_token_t *node = dfa->nodes + node_idx; + re_node_set *new_dest_nodes; + + /* Check whether 'node' is a backreference or not. */ + if (node->type != OP_BACK_REF) + continue; + + if (node->constraint) + { + context = re_string_context_at (&mctx->input, cur_str_idx, + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) + continue; + } + + /* 'node' is a backreference. + Check the substring which the substring matched. */ + bkc_idx = mctx->nbkref_ents; + err = get_subexp (mctx, node_idx, cur_str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + + /* And add the epsilon closures (which is 'new_dest_nodes') of + the backreference to appropriate state_log. */ + DEBUG_ASSERT (dfa->nexts[node_idx] != -1); + for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx) + { + Idx subexp_len; + re_dfastate_t *dest_state; + struct re_backref_cache_entry *bkref_ent; + bkref_ent = mctx->bkref_ents + bkc_idx; + if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) + continue; + subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; + new_dest_nodes = (subexp_len == 0 + ? dfa->eclosures + dfa->edests[node_idx].elems[0] + : dfa->eclosures + dfa->nexts[node_idx]); + dest_str_idx = (cur_str_idx + bkref_ent->subexp_to + - bkref_ent->subexp_from); + context = re_string_context_at (&mctx->input, dest_str_idx - 1, + mctx->eflags); + dest_state = mctx->state_log[dest_str_idx]; + prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 + : mctx->state_log[cur_str_idx]->nodes.nelem); + /* Add 'new_dest_node' to state_log. */ + if (dest_state == NULL) + { + mctx->state_log[dest_str_idx] + = re_acquire_state_context (&err, dfa, new_dest_nodes, + context); + if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR)) + goto free_return; + } + else + { + re_node_set dest_nodes; + err = re_node_set_init_union (&dest_nodes, + dest_state->entrance_nodes, + new_dest_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&dest_nodes); + goto free_return; + } + mctx->state_log[dest_str_idx] + = re_acquire_state_context (&err, dfa, &dest_nodes, context); + re_node_set_free (&dest_nodes); + if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR)) + goto free_return; + } + /* We need to check recursively if the backreference can epsilon + transit. */ + if (subexp_len == 0 + && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) + { + err = check_subexp_matching_top (mctx, new_dest_nodes, + cur_str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + err = transit_state_bkref (mctx, new_dest_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + } + } + err = REG_NOERROR; + free_return: + return err; +} + +/* Enumerate all the candidates which the backreference BKREF_NODE can match + at BKREF_STR_IDX, and register them by match_ctx_add_entry(). + Note that we might collect inappropriate candidates here. + However, the cost of checking them strictly here is too high, then we + delay these checking for prune_impossible_nodes(). */ + +static reg_errcode_t +__attribute_warn_unused_result__ +get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx subexp_num, sub_top_idx; + const char *buf = (const char *) re_string_get_buffer (&mctx->input); + /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ + Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); + if (cache_idx != -1) + { + const struct re_backref_cache_entry *entry + = mctx->bkref_ents + cache_idx; + do + if (entry->node == bkref_node) + return REG_NOERROR; /* We already checked it. */ + while (entry++->more); + } + + subexp_num = dfa->nodes[bkref_node].opr.idx; + + /* For each sub expression */ + for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx) + { + reg_errcode_t err; + re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx]; + re_sub_match_last_t *sub_last; + Idx sub_last_idx, sl_str, bkref_str_off; + + if (dfa->nodes[sub_top->node].opr.idx != subexp_num) + continue; /* It isn't related. */ + + sl_str = sub_top->str_idx; + bkref_str_off = bkref_str_idx; + /* At first, check the last node of sub expressions we already + evaluated. */ + for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx) + { + regoff_t sl_str_diff; + sub_last = sub_top->lasts[sub_last_idx]; + sl_str_diff = sub_last->str_idx - sl_str; + /* The matched string by the sub expression match with the substring + at the back reference? */ + if (sl_str_diff > 0) + { + if (__glibc_unlikely (bkref_str_off + sl_str_diff + > mctx->input.valid_len)) + { + /* Not enough chars for a successful match. */ + if (bkref_str_off + sl_str_diff > mctx->input.len) + break; + + err = clean_state_log_if_needed (mctx, + bkref_str_off + + sl_str_diff); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + buf = (const char *) re_string_get_buffer (&mctx->input); + } + if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0) + /* We don't need to search this sub expression any more. */ + break; + } + bkref_str_off += sl_str_diff; + sl_str += sl_str_diff; + err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, + bkref_str_idx); + + /* Reload buf, since the preceding call might have reallocated + the buffer. */ + buf = (const char *) re_string_get_buffer (&mctx->input); + + if (err == REG_NOMATCH) + continue; + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + if (sub_last_idx < sub_top->nlasts) + continue; + if (sub_last_idx > 0) + ++sl_str; + /* Then, search for the other last nodes of the sub expression. */ + for (; sl_str <= bkref_str_idx; ++sl_str) + { + Idx cls_node; + regoff_t sl_str_off; + const re_node_set *nodes; + sl_str_off = sl_str - sub_top->str_idx; + /* The matched string by the sub expression match with the substring + at the back reference? */ + if (sl_str_off > 0) + { + if (__glibc_unlikely (bkref_str_off >= mctx->input.valid_len)) + { + /* If we are at the end of the input, we cannot match. */ + if (bkref_str_off >= mctx->input.len) + break; + + err = extend_buffers (mctx, bkref_str_off + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + buf = (const char *) re_string_get_buffer (&mctx->input); + } + if (buf [bkref_str_off++] != buf[sl_str - 1]) + break; /* We don't need to search this sub expression + any more. */ + } + if (mctx->state_log[sl_str] == NULL) + continue; + /* Does this state have a ')' of the sub expression? */ + nodes = &mctx->state_log[sl_str]->nodes; + cls_node = find_subexp_node (dfa, nodes, subexp_num, + OP_CLOSE_SUBEXP); + if (cls_node == -1) + continue; /* No. */ + if (sub_top->path == NULL) + { + sub_top->path = calloc (sizeof (state_array_t), + sl_str - sub_top->str_idx + 1); + if (sub_top->path == NULL) + return REG_ESPACE; + } + /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node + in the current context? */ + err = check_arrival (mctx, sub_top->path, sub_top->node, + sub_top->str_idx, cls_node, sl_str, + OP_CLOSE_SUBEXP); + if (err == REG_NOMATCH) + continue; + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); + if (__glibc_unlikely (sub_last == NULL)) + return REG_ESPACE; + err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, + bkref_str_idx); + buf = (const char *) re_string_get_buffer (&mctx->input); + if (err == REG_NOMATCH) + continue; + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + return REG_NOERROR; +} + +/* Helper functions for get_subexp(). */ + +/* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR. + If it can arrive, register the sub expression expressed with SUB_TOP + and SUB_LAST. */ + +static reg_errcode_t +get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, + re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str) +{ + reg_errcode_t err; + Idx to_idx; + /* Can the subexpression arrive the back reference? */ + err = check_arrival (mctx, &sub_last->path, sub_last->node, + sub_last->str_idx, bkref_node, bkref_str, + OP_OPEN_SUBEXP); + if (err != REG_NOERROR) + return err; + err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx, + sub_last->str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx; + return clean_state_log_if_needed (mctx, to_idx); +} + +/* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX. + Search '(' if FL_OPEN, or search ')' otherwise. + TODO: This function isn't efficient... + Because there might be more than one nodes whose types are + OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all + nodes. + E.g. RE: (a){2} */ + +static Idx +find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, + Idx subexp_idx, int type) +{ + Idx cls_idx; + for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx) + { + Idx cls_node = nodes->elems[cls_idx]; + const re_token_t *node = dfa->nodes + cls_node; + if (node->type == type + && node->opr.idx == subexp_idx) + return cls_node; + } + return -1; +} + +/* Check whether the node TOP_NODE at TOP_STR can arrive to the node + LAST_NODE at LAST_STR. We record the path onto PATH since it will be + heavily reused. + Return REG_NOERROR if it can arrive, REG_NOMATCH if it cannot, + REG_ESPACE if memory is exhausted. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, + Idx top_str, Idx last_node, Idx last_str, int type) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err = REG_NOERROR; + Idx subexp_num, backup_cur_idx, str_idx, null_cnt; + re_dfastate_t *cur_state = NULL; + re_node_set *cur_nodes, next_nodes; + re_dfastate_t **backup_state_log; + unsigned int context; + + subexp_num = dfa->nodes[top_node].opr.idx; + /* Extend the buffer if we need. */ + if (__glibc_unlikely (path->alloc < last_str + mctx->max_mb_elem_len + 1)) + { + re_dfastate_t **new_array; + Idx old_alloc = path->alloc; + Idx incr_alloc = last_str + mctx->max_mb_elem_len + 1; + Idx new_alloc; + if (__glibc_unlikely (IDX_MAX - old_alloc < incr_alloc)) + return REG_ESPACE; + new_alloc = old_alloc + incr_alloc; + if (__glibc_unlikely (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc)) + return REG_ESPACE; + new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); + if (__glibc_unlikely (new_array == NULL)) + return REG_ESPACE; + path->array = new_array; + path->alloc = new_alloc; + memset (new_array + old_alloc, '\0', + sizeof (re_dfastate_t *) * (path->alloc - old_alloc)); + } + + str_idx = path->next_idx ? path->next_idx : top_str; + + /* Temporary modify MCTX. */ + backup_state_log = mctx->state_log; + backup_cur_idx = mctx->input.cur_idx; + mctx->state_log = path->array; + mctx->input.cur_idx = str_idx; + + /* Setup initial node set. */ + context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); + if (str_idx == top_str) + { + err = re_node_set_init_1 (&next_nodes, top_node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + else + { + cur_state = mctx->state_log[str_idx]; + if (cur_state && cur_state->has_backref) + { + err = re_node_set_init_copy (&next_nodes, &cur_state->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + else + re_node_set_init_empty (&next_nodes); + } + if (str_idx == top_str || (cur_state && cur_state->has_backref)) + { + if (next_nodes.nelem) + { + err = expand_bkref_cache (mctx, &next_nodes, str_idx, + subexp_num, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); + if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + mctx->state_log[str_idx] = cur_state; + } + + for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;) + { + re_node_set_empty (&next_nodes); + if (mctx->state_log[str_idx + 1]) + { + err = re_node_set_merge (&next_nodes, + &mctx->state_log[str_idx + 1]->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + if (cur_state) + { + err = check_arrival_add_next_nodes (mctx, str_idx, + &cur_state->non_eps_nodes, + &next_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + ++str_idx; + if (next_nodes.nelem) + { + err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + err = expand_bkref_cache (mctx, &next_nodes, str_idx, + subexp_num, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); + cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); + if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + mctx->state_log[str_idx] = cur_state; + null_cnt = cur_state == NULL ? null_cnt + 1 : 0; + } + re_node_set_free (&next_nodes); + cur_nodes = (mctx->state_log[last_str] == NULL ? NULL + : &mctx->state_log[last_str]->nodes); + path->next_idx = str_idx; + + /* Fix MCTX. */ + mctx->state_log = backup_state_log; + mctx->input.cur_idx = backup_cur_idx; + + /* Then check the current node set has the node LAST_NODE. */ + if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node)) + return REG_NOERROR; + + return REG_NOMATCH; +} + +/* Helper functions for check_arrival. */ + +/* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them + to NEXT_NODES. + TODO: This function is similar to the functions transit_state*(), + however this function has many additional works. + Can't we unify them? */ + +static reg_errcode_t +__attribute_warn_unused_result__ +check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, + re_node_set *cur_nodes, re_node_set *next_nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + bool ok; + Idx cur_idx; + reg_errcode_t err = REG_NOERROR; + re_node_set union_set; + re_node_set_init_empty (&union_set); + for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) + { + int naccepted = 0; + Idx cur_node = cur_nodes->elems[cur_idx]; + DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[cur_node].type)); + + /* If the node may accept "multi byte". */ + if (dfa->nodes[cur_node].accept_mb) + { + naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, + str_idx); + if (naccepted > 1) + { + re_dfastate_t *dest_state; + Idx next_node = dfa->nexts[cur_node]; + Idx next_idx = str_idx + naccepted; + dest_state = mctx->state_log[next_idx]; + re_node_set_empty (&union_set); + if (dest_state) + { + err = re_node_set_merge (&union_set, &dest_state->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&union_set); + return err; + } + } + ok = re_node_set_insert (&union_set, next_node); + if (__glibc_unlikely (! ok)) + { + re_node_set_free (&union_set); + return REG_ESPACE; + } + mctx->state_log[next_idx] = re_acquire_state (&err, dfa, + &union_set); + if (__glibc_unlikely (mctx->state_log[next_idx] == NULL + && err != REG_NOERROR)) + { + re_node_set_free (&union_set); + return err; + } + } + } + + if (naccepted + || check_node_accept (mctx, dfa->nodes + cur_node, str_idx)) + { + ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); + if (__glibc_unlikely (! ok)) + { + re_node_set_free (&union_set); + return REG_ESPACE; + } + } + } + re_node_set_free (&union_set); + return REG_NOERROR; +} + +/* For all the nodes in CUR_NODES, add the epsilon closures of them to + CUR_NODES, however exclude the nodes which are: + - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN. + - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN. +*/ + +static reg_errcode_t +check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, + Idx ex_subexp, int type) +{ + reg_errcode_t err; + Idx idx, outside_node; + re_node_set new_nodes; + DEBUG_ASSERT (cur_nodes->nelem); + err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + /* Create a new node set NEW_NODES with the nodes which are epsilon + closures of the node in CUR_NODES. */ + + for (idx = 0; idx < cur_nodes->nelem; ++idx) + { + Idx cur_node = cur_nodes->elems[idx]; + const re_node_set *eclosure = dfa->eclosures + cur_node; + outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type); + if (outside_node == -1) + { + /* There are no problematic nodes, just merge them. */ + err = re_node_set_merge (&new_nodes, eclosure); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&new_nodes); + return err; + } + } + else + { + /* There are problematic nodes, re-calculate incrementally. */ + err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node, + ex_subexp, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&new_nodes); + return err; + } + } + } + re_node_set_free (cur_nodes); + *cur_nodes = new_nodes; + return REG_NOERROR; +} + +/* Helper function for check_arrival_expand_ecl. + Check incrementally the epsilon closure of TARGET, and if it isn't + problematic append it to DST_NODES. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, + Idx target, Idx ex_subexp, int type) +{ + Idx cur_node; + for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);) + { + bool ok; + + if (dfa->nodes[cur_node].type == type + && dfa->nodes[cur_node].opr.idx == ex_subexp) + { + if (type == OP_CLOSE_SUBEXP) + { + ok = re_node_set_insert (dst_nodes, cur_node); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + break; + } + ok = re_node_set_insert (dst_nodes, cur_node); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + if (dfa->edests[cur_node].nelem == 0) + break; + if (dfa->edests[cur_node].nelem == 2) + { + reg_errcode_t err; + err = check_arrival_expand_ecl_sub (dfa, dst_nodes, + dfa->edests[cur_node].elems[1], + ex_subexp, type); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + cur_node = dfa->edests[cur_node].elems[0]; + } + return REG_NOERROR; +} + + +/* For all the back references in the current state, calculate the + destination of the back references by the appropriate entry + in MCTX->BKREF_ENTS. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, + Idx cur_str, Idx subexp_num, int type) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str); + struct re_backref_cache_entry *ent; + + if (cache_idx_start == -1) + return REG_NOERROR; + + restart: + ent = mctx->bkref_ents + cache_idx_start; + do + { + Idx to_idx, next_node; + + /* Is this entry ENT is appropriate? */ + if (!re_node_set_contains (cur_nodes, ent->node)) + continue; /* No. */ + + to_idx = cur_str + ent->subexp_to - ent->subexp_from; + /* Calculate the destination of the back reference, and append it + to MCTX->STATE_LOG. */ + if (to_idx == cur_str) + { + /* The backreference did epsilon transit, we must re-check all the + node in the current state. */ + re_node_set new_dests; + reg_errcode_t err2, err3; + next_node = dfa->edests[ent->node].elems[0]; + if (re_node_set_contains (cur_nodes, next_node)) + continue; + err = re_node_set_init_1 (&new_dests, next_node); + err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type); + err3 = re_node_set_merge (cur_nodes, &new_dests); + re_node_set_free (&new_dests); + if (__glibc_unlikely (err != REG_NOERROR || err2 != REG_NOERROR + || err3 != REG_NOERROR)) + { + err = (err != REG_NOERROR ? err + : (err2 != REG_NOERROR ? err2 : err3)); + return err; + } + /* TODO: It is still inefficient... */ + goto restart; + } + else + { + re_node_set union_set; + next_node = dfa->nexts[ent->node]; + if (mctx->state_log[to_idx]) + { + bool ok; + if (re_node_set_contains (&mctx->state_log[to_idx]->nodes, + next_node)) + continue; + err = re_node_set_init_copy (&union_set, + &mctx->state_log[to_idx]->nodes); + ok = re_node_set_insert (&union_set, next_node); + if (__glibc_unlikely (err != REG_NOERROR || ! ok)) + { + re_node_set_free (&union_set); + err = err != REG_NOERROR ? err : REG_ESPACE; + return err; + } + } + else + { + err = re_node_set_init_1 (&union_set, next_node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); + re_node_set_free (&union_set); + if (__glibc_unlikely (mctx->state_log[to_idx] == NULL + && err != REG_NOERROR)) + return err; + } + } + while (ent++->more); + return REG_NOERROR; +} + +/* Build transition table for the state. + Return true if successful. */ + +static bool __attribute_noinline__ +build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) +{ + reg_errcode_t err; + Idx i, j; + int ch; + bool need_word_trtable = false; + bitset_word_t elem, mask; + Idx ndests; /* Number of the destination states from 'state'. */ + re_dfastate_t **trtable; + re_dfastate_t *dest_states[SBC_MAX]; + re_dfastate_t *dest_states_word[SBC_MAX]; + re_dfastate_t *dest_states_nl[SBC_MAX]; + re_node_set follows; + bitset_t acceptable; + + /* We build DFA states which corresponds to the destination nodes + from 'state'. 'dests_node[i]' represents the nodes which i-th + destination state contains, and 'dests_ch[i]' represents the + characters which i-th destination state accepts. */ + re_node_set dests_node[SBC_MAX]; + bitset_t dests_ch[SBC_MAX]; + + /* Initialize transition table. */ + state->word_trtable = state->trtable = NULL; + + /* At first, group all nodes belonging to 'state' into several + destinations. */ + ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); + if (__glibc_unlikely (ndests <= 0)) + { + /* Return false in case of an error, true otherwise. */ + if (ndests == 0) + { + state->trtable = (re_dfastate_t **) + calloc (sizeof (re_dfastate_t *), SBC_MAX); + if (__glibc_unlikely (state->trtable == NULL)) + return false; + return true; + } + return false; + } + + err = re_node_set_alloc (&follows, ndests + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + { + out_free: + re_node_set_free (&follows); + for (i = 0; i < ndests; ++i) + re_node_set_free (dests_node + i); + return false; + } + + bitset_empty (acceptable); + + /* Then build the states for all destinations. */ + for (i = 0; i < ndests; ++i) + { + Idx next_node; + re_node_set_empty (&follows); + /* Merge the follows of this destination states. */ + for (j = 0; j < dests_node[i].nelem; ++j) + { + next_node = dfa->nexts[dests_node[i].elems[j]]; + if (next_node != -1) + { + err = re_node_set_merge (&follows, dfa->eclosures + next_node); + if (__glibc_unlikely (err != REG_NOERROR)) + goto out_free; + } + } + dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); + if (__glibc_unlikely (dest_states[i] == NULL && err != REG_NOERROR)) + goto out_free; + /* If the new state has context constraint, + build appropriate states for these contexts. */ + if (dest_states[i]->has_constraint) + { + dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, + CONTEXT_WORD); + if (__glibc_unlikely (dest_states_word[i] == NULL + && err != REG_NOERROR)) + goto out_free; + + if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1) + need_word_trtable = true; + + dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, + CONTEXT_NEWLINE); + if (__glibc_unlikely (dest_states_nl[i] == NULL && err != REG_NOERROR)) + goto out_free; + } + else + { + dest_states_word[i] = dest_states[i]; + dest_states_nl[i] = dest_states[i]; + } + bitset_merge (acceptable, dests_ch[i]); + } + + if (!__glibc_unlikely (need_word_trtable)) + { + /* We don't care about whether the following character is a word + character, or we are in a single-byte character set so we can + discern by looking at the character code: allocate a + 256-entry transition table. */ + trtable = state->trtable = + (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); + if (__glibc_unlikely (trtable == NULL)) + goto out_free; + + /* For all characters ch...: */ + for (i = 0; i < BITSET_WORDS; ++i) + for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; + elem; + mask <<= 1, elem >>= 1, ++ch) + if (__glibc_unlikely (elem & 1)) + { + /* There must be exactly one destination which accepts + character ch. See group_nodes_into_DFAstates. */ + for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) + ; + + /* j-th destination accepts the word character ch. */ + if (dfa->word_char[i] & mask) + trtable[ch] = dest_states_word[j]; + else + trtable[ch] = dest_states[j]; + } + } + else + { + /* We care about whether the following character is a word + character, and we are in a multi-byte character set: discern + by looking at the character code: build two 256-entry + transition tables, one starting at trtable[0] and one + starting at trtable[SBC_MAX]. */ + trtable = state->word_trtable = + (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); + if (__glibc_unlikely (trtable == NULL)) + goto out_free; + + /* For all characters ch...: */ + for (i = 0; i < BITSET_WORDS; ++i) + for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; + elem; + mask <<= 1, elem >>= 1, ++ch) + if (__glibc_unlikely (elem & 1)) + { + /* There must be exactly one destination which accepts + character ch. See group_nodes_into_DFAstates. */ + for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) + ; + + /* j-th destination accepts the word character ch. */ + trtable[ch] = dest_states[j]; + trtable[ch + SBC_MAX] = dest_states_word[j]; + } + } + + /* new line */ + if (bitset_contain (acceptable, NEWLINE_CHAR)) + { + /* The current state accepts newline character. */ + for (j = 0; j < ndests; ++j) + if (bitset_contain (dests_ch[j], NEWLINE_CHAR)) + { + /* k-th destination accepts newline character. */ + trtable[NEWLINE_CHAR] = dest_states_nl[j]; + if (need_word_trtable) + trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j]; + /* There must be only one destination which accepts + newline. See group_nodes_into_DFAstates. */ + break; + } + } + + re_node_set_free (&follows); + for (i = 0; i < ndests; ++i) + re_node_set_free (dests_node + i); + return true; +} + +/* Group all nodes belonging to STATE into several destinations. + Then for all destinations, set the nodes belonging to the destination + to DESTS_NODE[i] and set the characters accepted by the destination + to DEST_CH[i]. Return the number of destinations if successful, + -1 on internal error. */ + +static Idx +group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, + re_node_set *dests_node, bitset_t *dests_ch) +{ + reg_errcode_t err; + bool ok; + Idx i, j, k; + Idx ndests; /* Number of the destinations from 'state'. */ + bitset_t accepts; /* Characters a node can accept. */ + const re_node_set *cur_nodes = &state->nodes; + bitset_empty (accepts); + ndests = 0; + + /* For all the nodes belonging to 'state', */ + for (i = 0; i < cur_nodes->nelem; ++i) + { + re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; + re_token_type_t type = node->type; + unsigned int constraint = node->constraint; + + /* Enumerate all single byte character this node can accept. */ + if (type == CHARACTER) + bitset_set (accepts, node->opr.c); + else if (type == SIMPLE_BRACKET) + { + bitset_merge (accepts, node->opr.sbcset); + } + else if (type == OP_PERIOD) + { + if (dfa->mb_cur_max > 1) + bitset_merge (accepts, dfa->sb_char); + else + bitset_set_all (accepts); + if (!(dfa->syntax & RE_DOT_NEWLINE)) + bitset_clear (accepts, '\n'); + if (dfa->syntax & RE_DOT_NOT_NULL) + bitset_clear (accepts, '\0'); + } + else if (type == OP_UTF8_PERIOD) + { + if (ASCII_CHARS % BITSET_WORD_BITS == 0) + memset (accepts, -1, ASCII_CHARS / CHAR_BIT); + else + bitset_merge (accepts, utf8_sb_map); + if (!(dfa->syntax & RE_DOT_NEWLINE)) + bitset_clear (accepts, '\n'); + if (dfa->syntax & RE_DOT_NOT_NULL) + bitset_clear (accepts, '\0'); + } + else + continue; + + /* Check the 'accepts' and sift the characters which are not + match it the context. */ + if (constraint) + { + if (constraint & NEXT_NEWLINE_CONSTRAINT) + { + bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); + bitset_empty (accepts); + if (accepts_newline) + bitset_set (accepts, NEWLINE_CHAR); + else + continue; + } + if (constraint & NEXT_ENDBUF_CONSTRAINT) + { + bitset_empty (accepts); + continue; + } + + if (constraint & NEXT_WORD_CONSTRAINT) + { + bitset_word_t any_set = 0; + if (type == CHARACTER && !node->word_char) + { + bitset_empty (accepts); + continue; + } + if (dfa->mb_cur_max > 1) + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); + else + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= dfa->word_char[j]); + if (!any_set) + continue; + } + if (constraint & NEXT_NOTWORD_CONSTRAINT) + { + bitset_word_t any_set = 0; + if (type == CHARACTER && node->word_char) + { + bitset_empty (accepts); + continue; + } + if (dfa->mb_cur_max > 1) + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); + else + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= ~dfa->word_char[j]); + if (!any_set) + continue; + } + } + + /* Then divide 'accepts' into DFA states, or create a new + state. Above, we make sure that accepts is not empty. */ + for (j = 0; j < ndests; ++j) + { + bitset_t intersec; /* Intersection sets, see below. */ + bitset_t remains; + /* Flags, see below. */ + bitset_word_t has_intersec, not_subset, not_consumed; + + /* Optimization, skip if this state doesn't accept the character. */ + if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) + continue; + + /* Enumerate the intersection set of this state and 'accepts'. */ + has_intersec = 0; + for (k = 0; k < BITSET_WORDS; ++k) + has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; + /* And skip if the intersection set is empty. */ + if (!has_intersec) + continue; + + /* Then check if this state is a subset of 'accepts'. */ + not_subset = not_consumed = 0; + for (k = 0; k < BITSET_WORDS; ++k) + { + not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; + not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; + } + + /* If this state isn't a subset of 'accepts', create a + new group state, which has the 'remains'. */ + if (not_subset) + { + bitset_copy (dests_ch[ndests], remains); + bitset_copy (dests_ch[j], intersec); + err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); + if (__glibc_unlikely (err != REG_NOERROR)) + goto error_return; + ++ndests; + } + + /* Put the position in the current group. */ + ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); + if (__glibc_unlikely (! ok)) + goto error_return; + + /* If all characters are consumed, go to next node. */ + if (!not_consumed) + break; + } + /* Some characters remain, create a new group. */ + if (j == ndests) + { + bitset_copy (dests_ch[ndests], accepts); + err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); + if (__glibc_unlikely (err != REG_NOERROR)) + goto error_return; + ++ndests; + bitset_empty (accepts); + } + } + assume (ndests <= SBC_MAX); + return ndests; + error_return: + for (j = 0; j < ndests; ++j) + re_node_set_free (dests_node + j); + return -1; +} + +/* Check how many bytes the node 'dfa->nodes[node_idx]' accepts. + Return the number of the bytes the node accepts. + STR_IDX is the current index of the input string. + + This function handles the nodes which can accept one character, or + one collating element like '.', '[a-z]', opposite to the other nodes + can only accept one byte. */ + +#ifdef _LIBC +# include +#endif + +static int +check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, + const re_string_t *input, Idx str_idx) +{ + const re_token_t *node = dfa->nodes + node_idx; + int char_len, elem_len; + Idx i; + + if (__glibc_unlikely (node->type == OP_UTF8_PERIOD)) + { + unsigned char c = re_string_byte_at (input, str_idx), d; + if (__glibc_likely (c < 0xc2)) + return 0; + + if (str_idx + 2 > input->len) + return 0; + + d = re_string_byte_at (input, str_idx + 1); + if (c < 0xe0) + return (d < 0x80 || d > 0xbf) ? 0 : 2; + else if (c < 0xf0) + { + char_len = 3; + if (c == 0xe0 && d < 0xa0) + return 0; + } + else if (c < 0xf8) + { + char_len = 4; + if (c == 0xf0 && d < 0x90) + return 0; + } + else if (c < 0xfc) + { + char_len = 5; + if (c == 0xf8 && d < 0x88) + return 0; + } + else if (c < 0xfe) + { + char_len = 6; + if (c == 0xfc && d < 0x84) + return 0; + } + else + return 0; + + if (str_idx + char_len > input->len) + return 0; + + for (i = 1; i < char_len; ++i) + { + d = re_string_byte_at (input, str_idx + i); + if (d < 0x80 || d > 0xbf) + return 0; + } + return char_len; + } + + char_len = re_string_char_size_at (input, str_idx); + if (node->type == OP_PERIOD) + { + if (char_len <= 1) + return 0; + /* FIXME: I don't think this if is needed, as both '\n' + and '\0' are char_len == 1. */ + /* '.' accepts any one character except the following two cases. */ + if ((!(dfa->syntax & RE_DOT_NEWLINE) + && re_string_byte_at (input, str_idx) == '\n') + || ((dfa->syntax & RE_DOT_NOT_NULL) + && re_string_byte_at (input, str_idx) == '\0')) + return 0; + return char_len; + } + + elem_len = re_string_elem_size_at (input, str_idx); + if ((elem_len <= 1 && char_len <= 1) || char_len == 0) + return 0; + + if (node->type == COMPLEX_BRACKET) + { + const re_charset_t *cset = node->opr.mbcset; +#ifdef _LIBC + const unsigned char *pin + = ((const unsigned char *) re_string_get_buffer (input) + str_idx); + Idx j; + uint32_t nrules; +#endif + int match_len = 0; + wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) + ? re_string_wchar_at (input, str_idx) : 0); + + /* match with multibyte character? */ + for (i = 0; i < cset->nmbchars; ++i) + if (wc == cset->mbchars[i]) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + /* match with character_class? */ + for (i = 0; i < cset->nchar_classes; ++i) + { + wctype_t wt = cset->char_classes[i]; + if (__iswctype (wc, wt)) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + } + +#ifdef _LIBC + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules != 0) + { + unsigned int in_collseq = 0; + const int32_t *table, *indirect; + const unsigned char *weights, *extra; + const char *collseqwc; + + /* match with collating_symbol? */ + if (cset->ncoll_syms) + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + for (i = 0; i < cset->ncoll_syms; ++i) + { + const unsigned char *coll_sym = extra + cset->coll_syms[i]; + /* Compare the length of input collating element and + the length of current collating element. */ + if (*coll_sym != elem_len) + continue; + /* Compare each bytes. */ + for (j = 0; j < *coll_sym; j++) + if (pin[j] != coll_sym[1 + j]) + break; + if (j == *coll_sym) + { + /* Match if every bytes is equal. */ + match_len = j; + goto check_node_accept_bytes_match; + } + } + + if (cset->nranges) + { + if (elem_len <= char_len) + { + collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); + in_collseq = __collseq_table_lookup (collseqwc, wc); + } + else + in_collseq = find_collation_sequence_value (pin, elem_len); + } + /* match with range expression? */ + /* FIXME: Implement rational ranges here, too. */ + for (i = 0; i < cset->nranges; ++i) + if (cset->range_starts[i] <= in_collseq + && in_collseq <= cset->range_ends[i]) + { + match_len = elem_len; + goto check_node_accept_bytes_match; + } + + /* match with equivalence_class? */ + if (cset->nequiv_classes) + { + const unsigned char *cp = pin; + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); + int32_t idx = findidx (table, indirect, extra, &cp, elem_len); + int32_t rule = idx >> 24; + idx &= 0xffffff; + if (idx > 0) + { + size_t weight_len = weights[idx]; + for (i = 0; i < cset->nequiv_classes; ++i) + { + int32_t equiv_class_idx = cset->equiv_classes[i]; + int32_t equiv_class_rule = equiv_class_idx >> 24; + equiv_class_idx &= 0xffffff; + if (weights[equiv_class_idx] == weight_len + && equiv_class_rule == rule + && memcmp (weights + idx + 1, + weights + equiv_class_idx + 1, + weight_len) == 0) + { + match_len = elem_len; + goto check_node_accept_bytes_match; + } + } + } + } + } + else +#endif /* _LIBC */ + { + /* match with range expression? */ + for (i = 0; i < cset->nranges; ++i) + { + if (cset->range_starts[i] <= wc && wc <= cset->range_ends[i]) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + } + } + check_node_accept_bytes_match: + if (!cset->non_match) + return match_len; + else + { + if (match_len > 0) + return 0; + else + return (elem_len > char_len) ? elem_len : char_len; + } + } + return 0; +} + +#ifdef _LIBC +static unsigned int +find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len) +{ + uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules == 0) + { + if (mbs_len == 1) + { + /* No valid character. Match it as a single byte character. */ + const unsigned char *collseq = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); + return collseq[mbs[0]]; + } + return UINT_MAX; + } + else + { + int32_t idx; + const unsigned char *extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + int32_t extrasize = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra; + + for (idx = 0; idx < extrasize;) + { + int mbs_cnt; + bool found = false; + int32_t elem_mbs_len; + /* Skip the name of collating element name. */ + idx = idx + extra[idx] + 1; + elem_mbs_len = extra[idx++]; + if (mbs_len == elem_mbs_len) + { + for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) + if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) + break; + if (mbs_cnt == elem_mbs_len) + /* Found the entry. */ + found = true; + } + /* Skip the byte sequence of the collating element. */ + idx += elem_mbs_len; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + /* Skip the collation sequence value. */ + idx += sizeof (uint32_t); + /* Skip the wide char sequence of the collating element. */ + idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1); + /* If we found the entry, return the sequence value. */ + if (found) + return *(uint32_t *) (extra + idx); + /* Skip the collation sequence value. */ + idx += sizeof (uint32_t); + } + return UINT_MAX; + } +} +#endif /* _LIBC */ + +/* Check whether the node accepts the byte which is IDX-th + byte of the INPUT. */ + +static bool +check_node_accept (const re_match_context_t *mctx, const re_token_t *node, + Idx idx) +{ + unsigned char ch; + ch = re_string_byte_at (&mctx->input, idx); + switch (node->type) + { + case CHARACTER: + if (node->opr.c != ch) + return false; + break; + + case SIMPLE_BRACKET: + if (!bitset_contain (node->opr.sbcset, ch)) + return false; + break; + + case OP_UTF8_PERIOD: + if (ch >= ASCII_CHARS) + return false; + FALLTHROUGH; + case OP_PERIOD: + if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE)) + || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL))) + return false; + break; + + default: + return false; + } + + if (node->constraint) + { + /* The node has constraints. Check whether the current context + satisfies the constraints. */ + unsigned int context = re_string_context_at (&mctx->input, idx, + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) + return false; + } + + return true; +} + +/* Extend the buffers, if the buffers have run out. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +extend_buffers (re_match_context_t *mctx, int min_len) +{ + reg_errcode_t ret; + re_string_t *pstr = &mctx->input; + + /* Avoid overflow. */ + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) / 2 + <= pstr->bufs_len)) + return REG_ESPACE; + + /* Double the lengths of the buffers, but allocate at least MIN_LEN. */ + ret = re_string_realloc_buffers (pstr, + MAX (min_len, + MIN (pstr->len, pstr->bufs_len * 2))); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + + if (mctx->state_log != NULL) + { + /* And double the length of state_log. */ + /* XXX We have no indication of the size of this buffer. If this + allocation fail we have no indication that the state_log array + does not have the right size. */ + re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *, + pstr->bufs_len + 1); + if (__glibc_unlikely (new_array == NULL)) + return REG_ESPACE; + mctx->state_log = new_array; + } + + /* Then reconstruct the buffers. */ + if (pstr->icase) + { + if (pstr->mb_cur_max > 1) + { + ret = build_wcs_upper_buffer (pstr); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + } + else + build_upper_buffer (pstr); + } + else + { + if (pstr->mb_cur_max > 1) + build_wcs_buffer (pstr); + else + { + if (pstr->trans != NULL) + re_string_translate_buffer (pstr); + } + } + return REG_NOERROR; +} + + +/* Functions for matching context. */ + +/* Initialize MCTX. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) +{ + mctx->eflags = eflags; + mctx->match_last = -1; + if (n > 0) + { + /* Avoid overflow. */ + size_t max_object_size = + MAX (sizeof (struct re_backref_cache_entry), + sizeof (re_sub_match_top_t *)); + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < n)) + return REG_ESPACE; + + mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); + mctx->sub_tops = re_malloc (re_sub_match_top_t *, n); + if (__glibc_unlikely (mctx->bkref_ents == NULL || mctx->sub_tops == NULL)) + return REG_ESPACE; + } + /* Already zero-ed by the caller. + else + mctx->bkref_ents = NULL; + mctx->nbkref_ents = 0; + mctx->nsub_tops = 0; */ + mctx->abkref_ents = n; + mctx->max_mb_elem_len = 1; + mctx->asub_tops = n; + return REG_NOERROR; +} + +/* Clean the entries which depend on the current input in MCTX. + This function must be invoked when the matcher changes the start index + of the input, or changes the input string. */ + +static void +match_ctx_clean (re_match_context_t *mctx) +{ + Idx st_idx; + for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx) + { + Idx sl_idx; + re_sub_match_top_t *top = mctx->sub_tops[st_idx]; + for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx) + { + re_sub_match_last_t *last = top->lasts[sl_idx]; + re_free (last->path.array); + re_free (last); + } + re_free (top->lasts); + if (top->path) + { + re_free (top->path->array); + re_free (top->path); + } + re_free (top); + } + + mctx->nsub_tops = 0; + mctx->nbkref_ents = 0; +} + +/* Free all the memory associated with MCTX. */ + +static void +match_ctx_free (re_match_context_t *mctx) +{ + /* First, free all the memory associated with MCTX->SUB_TOPS. */ + match_ctx_clean (mctx); + re_free (mctx->sub_tops); + re_free (mctx->bkref_ents); +} + +/* Add a new backreference entry to MCTX. + Note that we assume that caller never call this function with duplicate + entry, and call with STR_IDX which isn't smaller than any existing entry. +*/ + +static reg_errcode_t +__attribute_warn_unused_result__ +match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from, + Idx to) +{ + if (mctx->nbkref_ents >= mctx->abkref_ents) + { + struct re_backref_cache_entry* new_entry; + new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, + mctx->abkref_ents * 2); + if (__glibc_unlikely (new_entry == NULL)) + { + re_free (mctx->bkref_ents); + return REG_ESPACE; + } + mctx->bkref_ents = new_entry; + memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', + sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); + mctx->abkref_ents *= 2; + } + if (mctx->nbkref_ents > 0 + && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx) + mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1; + + mctx->bkref_ents[mctx->nbkref_ents].node = node; + mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; + mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; + mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; + + /* This is a cache that saves negative results of check_dst_limits_calc_pos. + If bit N is clear, means that this entry won't epsilon-transition to + an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If + it is set, check_dst_limits_calc_pos_1 will recurse and try to find one + such node. + + A backreference does not epsilon-transition unless it is empty, so set + to all zeros if FROM != TO. */ + mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map + = (from == to ? -1 : 0); + + mctx->bkref_ents[mctx->nbkref_ents++].more = 0; + if (mctx->max_mb_elem_len < to - from) + mctx->max_mb_elem_len = to - from; + return REG_NOERROR; +} + +/* Return the first entry with the same str_idx, or -1 if none is + found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ + +static Idx +search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) +{ + Idx left, right, mid, last; + last = right = mctx->nbkref_ents; + for (left = 0; left < right;) + { + mid = (left + right) / 2; + if (mctx->bkref_ents[mid].str_idx < str_idx) + left = mid + 1; + else + right = mid; + } + if (left < last && mctx->bkref_ents[left].str_idx == str_idx) + return left; + else + return -1; +} + +/* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches + at STR_IDX. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) +{ + DEBUG_ASSERT (mctx->sub_tops != NULL); + DEBUG_ASSERT (mctx->asub_tops > 0); + if (__glibc_unlikely (mctx->nsub_tops == mctx->asub_tops)) + { + Idx new_asub_tops = mctx->asub_tops * 2; + re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops, + re_sub_match_top_t *, + new_asub_tops); + if (__glibc_unlikely (new_array == NULL)) + return REG_ESPACE; + mctx->sub_tops = new_array; + mctx->asub_tops = new_asub_tops; + } + mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t)); + if (__glibc_unlikely (mctx->sub_tops[mctx->nsub_tops] == NULL)) + return REG_ESPACE; + mctx->sub_tops[mctx->nsub_tops]->node = node; + mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx; + return REG_NOERROR; +} + +/* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches + at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP. + Return the new entry if successful, NULL if memory is exhausted. */ + +static re_sub_match_last_t * +match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) +{ + re_sub_match_last_t *new_entry; + if (__glibc_unlikely (subtop->nlasts == subtop->alasts)) + { + Idx new_alasts = 2 * subtop->alasts + 1; + re_sub_match_last_t **new_array = re_realloc (subtop->lasts, + re_sub_match_last_t *, + new_alasts); + if (__glibc_unlikely (new_array == NULL)) + return NULL; + subtop->lasts = new_array; + subtop->alasts = new_alasts; + } + new_entry = calloc (1, sizeof (re_sub_match_last_t)); + if (__glibc_likely (new_entry != NULL)) + { + subtop->lasts[subtop->nlasts] = new_entry; + new_entry->node = node; + new_entry->str_idx = str_idx; + ++subtop->nlasts; + } + return new_entry; +} + +static void +sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, + re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx) +{ + sctx->sifted_states = sifted_sts; + sctx->limited_states = limited_sts; + sctx->last_node = last_node; + sctx->last_str_idx = last_str_idx; + re_node_set_init_empty (&sctx->limits); +} diff --git a/jni/parted/libgnulib/lib/rpmatch.c b/jni/parted/libgnulib/lib/rpmatch.c new file mode 100755 index 0000000..ac16fbf --- /dev/null +++ b/jni/parted/libgnulib/lib/rpmatch.c @@ -0,0 +1,175 @@ +/* Determine whether string value is affirmation or negative response + according to current locale's data. + + Copyright (C) 1996, 1998, 2000, 2002-2003, 2006-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#include + +/* Specification. */ +#include + +#include + +#if ENABLE_NLS +# include +# include +# include +# if HAVE_LANGINFO_YESEXPR +# include +# endif +# include +# include "gettext.h" +# define _(msgid) gettext (msgid) +# define N_(msgid) gettext_noop (msgid) + +# if HAVE_LANGINFO_YESEXPR +/* Return the localized regular expression pattern corresponding to + ENGLISH_PATTERN. NL_INDEX can be used with nl_langinfo. + The resulting string may only be used until the next nl_langinfo call. */ +static const char * +localized_pattern (const char *english_pattern, nl_item nl_index, + bool posixly_correct) +{ + const char *translated_pattern; + + /* We prefer to get the patterns from a PO file. It would be possible to + always use nl_langinfo (YESEXPR) instead of _("^[yY]"), and + nl_langinfo (NOEXPR) instead of _("^[nN]"), if we could assume that the + system's locale support is good. But this is not the case e.g. on Cygwin. + The localizations of gnulib.pot are of better quality in general. + Also, if we use locale info from non-free systems that don't have a + 'localedef' command, we deprive the users of the freedom to localize + this pattern for their preferred language. + But some programs, such as 'cp', 'mv', 'rm', 'find', 'xargs', are + specified by POSIX to use nl_langinfo (YESEXPR). We implement this + behaviour if POSIXLY_CORRECT is set, for the sake of these programs. */ + + /* If the user wants strict POSIX compliance, use nl_langinfo. */ + if (posixly_correct) + { + translated_pattern = nl_langinfo (nl_index); + /* Check against a broken system return value. */ + if (translated_pattern != NULL && translated_pattern[0] != '\0') + return translated_pattern; + } + + /* Look in the gnulib message catalog. */ + translated_pattern = _(english_pattern); + if (translated_pattern == english_pattern) + { + /* The gnulib message catalog provides no translation. + Try the system's message catalog. */ + translated_pattern = nl_langinfo (nl_index); + /* Check against a broken system return value. */ + if (translated_pattern != NULL && translated_pattern[0] != '\0') + return translated_pattern; + /* Fall back to English. */ + translated_pattern = english_pattern; + } + return translated_pattern; +} +# else +# define localized_pattern(english_pattern,nl_index,posixly_correct) \ + _(english_pattern) +# endif + +static int +try (const char *response, const char *pattern, char **lastp, regex_t *re) +{ + if (*lastp == NULL || strcmp (pattern, *lastp) != 0) + { + char *safe_pattern; + + /* The pattern has changed. */ + if (*lastp != NULL) + { + /* Free the old compiled pattern. */ + regfree (re); + free (*lastp); + *lastp = NULL; + } + /* Put the PATTERN into safe memory before calling regcomp. + (regcomp may call nl_langinfo, overwriting PATTERN's storage. */ + safe_pattern = strdup (pattern); + if (safe_pattern == NULL) + return -1; + /* Compile the pattern and cache it for future runs. */ + if (regcomp (re, safe_pattern, REG_EXTENDED) != 0) + { + free (safe_pattern); + return -1; + } + *lastp = safe_pattern; + } + + /* See if the regular expression matches RESPONSE. */ + return regexec (re, response, 0, NULL, 0) == 0; +} +#endif + + +int +rpmatch (const char *response) +{ +#if ENABLE_NLS + /* Match against one of the response patterns, compiling the pattern + first if necessary. */ + + /* We cache the response patterns and compiled regexps here. */ + static char *last_yesexpr, *last_noexpr; + static regex_t cached_yesre, cached_nore; + +# if HAVE_LANGINFO_YESEXPR + bool posixly_correct = (getenv ("POSIXLY_CORRECT") != NULL); +# endif + + const char *yesexpr, *noexpr; + int result; + + /* TRANSLATORS: A regular expression testing for an affirmative answer + (english: "yes"). Testing the first character may be sufficient. + Take care to consider upper and lower case. + To enquire the regular expression that your system uses for this + purpose, you can use the command + locale -k LC_MESSAGES | grep '^yesexpr=' */ + yesexpr = localized_pattern (N_("^[yY]"), YESEXPR, posixly_correct); + result = try (response, yesexpr, &last_yesexpr, &cached_yesre); + if (result < 0) + return -1; + if (result) + return 1; + + /* TRANSLATORS: A regular expression testing for a negative answer + (english: "no"). Testing the first character may be sufficient. + Take care to consider upper and lower case. + To enquire the regular expression that your system uses for this + purpose, you can use the command + locale -k LC_MESSAGES | grep '^noexpr=' */ + noexpr = localized_pattern (N_("^[nN]"), NOEXPR, posixly_correct); + result = try (response, noexpr, &last_noexpr, &cached_nore); + if (result < 0) + return -1; + if (result) + return 0; + + return -1; +#else + /* Test against "^[yY]" and "^[nN]", hardcoded to avoid requiring regex */ + return (*response == 'y' || *response == 'Y' ? 1 + : *response == 'n' || *response == 'N' ? 0 : -1); +#endif +} diff --git a/jni/parted/libgnulib/lib/safe-read.c b/jni/parted/libgnulib/lib/safe-read.c new file mode 100755 index 0000000..c7d31d5 --- /dev/null +++ b/jni/parted/libgnulib/lib/safe-read.c @@ -0,0 +1,71 @@ +/* An interface to read and write that retries after interrupts. + + Copyright (C) 1993-1994, 1998, 2002-2006, 2009-2024 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#ifdef SAFE_WRITE +# include "safe-write.h" +#else +# include "safe-read.h" +#endif + +/* Get ssize_t. */ +#include +#include + +#include + +#ifdef EINTR +# define IS_EINTR(x) ((x) == EINTR) +#else +# define IS_EINTR(x) 0 +#endif + +#include "sys-limits.h" + +#ifdef SAFE_WRITE +# define safe_rw safe_write +# define rw write +typedef void const *bufptr; +#else +# define safe_rw safe_read +# define rw read +typedef void *bufptr; +#endif + +/* Read(write) up to COUNT bytes at BUF from(to) descriptor FD, retrying if + interrupted. Return the number of bytes read(written), zero for EOF, + or -1 upon error. */ +ptrdiff_t +safe_rw (int fd, bufptr buf, idx_t count) +{ + for (;;) + { + ssize_t result = rw (fd, buf, count <= (size_t) -1 ? count : (size_t) -1); + + if (0 <= result) + return result; + else if (IS_EINTR (errno)) + continue; + else if (errno == EINVAL && SYS_BUFSIZE_MAX < count) + count = SYS_BUFSIZE_MAX; + else + return result; + } +} diff --git a/jni/parted/libgnulib/lib/setlocale-lock.c b/jni/parted/libgnulib/lib/setlocale-lock.c new file mode 100755 index 0000000..192489c --- /dev/null +++ b/jni/parted/libgnulib/lib/setlocale-lock.c @@ -0,0 +1,151 @@ +/* Return the internal lock used by setlocale_null_r. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2019. */ + +#include + +/* The option '--disable-threads' explicitly requests no locking. */ +/* When it is known that the gl_get_setlocale_null_lock function is defined + by a dependency library, it should not be defined here. */ +#if AVOID_ANY_THREADS || OMIT_SETLOCALE_LOCK + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; + +#else + +/* This file defines the internal lock used by setlocale_null_r. + It is a separate compilation unit, so that only one copy of it is + present when linking statically. */ + +/* Prohibit renaming this symbol. */ +# undef gl_get_setlocale_null_lock + +/* Macro for exporting a symbol (function, not variable) defined in this file, + when compiled into a shared library. */ +# ifndef SHLIB_EXPORTED +# if HAVE_VISIBILITY + /* Override the effect of the compiler option '-fvisibility=hidden'. */ +# define SHLIB_EXPORTED __attribute__((__visibility__("default"))) +# elif defined _WIN32 || defined __CYGWIN__ +# define SHLIB_EXPORTED __declspec(dllexport) +# else +# define SHLIB_EXPORTED +# endif +# endif + +# if defined _WIN32 && !defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# include "windows-initguard.h" + +/* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', + because the latter is not guaranteed to be a stable ABI in the future. */ + +/* Make sure the function gets exported from DLLs. */ +SHLIB_EXPORTED CRITICAL_SECTION *gl_get_setlocale_null_lock (void); + +static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; +static CRITICAL_SECTION lock; + +/* Returns the internal lock used by setlocale_null_r. */ +CRITICAL_SECTION * +gl_get_setlocale_null_lock (void) +{ + if (!guard.done) + { + if (InterlockedIncrement (&guard.started) == 0) + { + /* This thread is the first one to need the lock. Initialize it. */ + InitializeCriticalSection (&lock); + guard.done = 1; + } + else + { + /* Don't let guard.started grow and wrap around. */ + InterlockedDecrement (&guard.started); + /* Yield the CPU while waiting for another thread to finish + initializing this mutex. */ + while (!guard.done) + Sleep (0); + } + } + return &lock; +} + +# elif HAVE_PTHREAD_API + +# include + +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +/* Make sure the function gets exported from shared libraries. */ +SHLIB_EXPORTED pthread_mutex_t *gl_get_setlocale_null_lock (void); + +/* Returns the internal lock used by setlocale_null_r. */ +pthread_mutex_t * +gl_get_setlocale_null_lock (void) +{ + return &mutex; +} + +# elif HAVE_THREADS_H + +# include +# include + +static int volatile init_needed = 1; +static once_flag init_once = ONCE_FLAG_INIT; +static mtx_t mutex; + +static void +atomic_init (void) +{ + if (mtx_init (&mutex, mtx_plain) != thrd_success) + abort (); + init_needed = 0; +} + +/* Make sure the function gets exported from shared libraries. */ +SHLIB_EXPORTED mtx_t *gl_get_setlocale_null_lock (void); + +/* Returns the internal lock used by setlocale_null_r. */ +mtx_t * +gl_get_setlocale_null_lock (void) +{ + if (init_needed) + call_once (&init_once, atomic_init); + return &mutex; +} + +# endif + +# if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER +/* Make sure the '__declspec(dllimport)' in setlocale_null.c does not cause + a link failure when no DLLs are involved. */ +# if defined _WIN64 || defined _LP64 +# define IMP(x) __imp_##x +# else +# define IMP(x) _imp__##x +# endif +void * IMP(gl_get_setlocale_null_lock) = &gl_get_setlocale_null_lock; +# endif + +#endif diff --git a/jni/parted/libgnulib/lib/setlocale_null-unlocked.c b/jni/parted/libgnulib/lib/setlocale_null-unlocked.c new file mode 100755 index 0000000..0a86f0d --- /dev/null +++ b/jni/parted/libgnulib/lib/setlocale_null-unlocked.c @@ -0,0 +1,149 @@ +/* Query the name of the current global locale, without locking. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2019. */ + +#include + +/* Specification. */ +#include "setlocale_null.h" + +#include +#include +#include +#if defined _WIN32 && !defined __CYGWIN__ +# include +#endif + +/* Use the system's setlocale() function, not the gnulib override, here. */ +#undef setlocale + +const char * +setlocale_null_unlocked (int category) +{ + const char *result = setlocale (category, NULL); + +#ifdef __ANDROID__ + if (result == NULL) + switch (category) + { + case LC_CTYPE: + case LC_NUMERIC: + case LC_TIME: + case LC_COLLATE: + case LC_MONETARY: + case LC_MESSAGES: + case LC_ALL: + case LC_PAPER: + case LC_NAME: + case LC_ADDRESS: + case LC_TELEPHONE: + case LC_MEASUREMENT: + result = "C"; + break; + default: + break; + } +#endif + + return result; +} + +int +setlocale_null_r_unlocked (int category, char *buf, size_t bufsize) +{ +#if defined _WIN32 && !defined __CYGWIN__ && defined _MSC_VER + /* On native Windows, nowadays, the setlocale() implementation is based + on _wsetlocale() and uses malloc() for the result. We are better off + using _wsetlocale() directly. */ + const wchar_t *result = _wsetlocale (category, NULL); + + if (result == NULL) + { + /* CATEGORY is invalid. */ + if (bufsize > 0) + /* Return an empty string in BUF. + This is a convenience for callers that don't want to write explicit + code for handling EINVAL. */ + buf[0] = '\0'; + return EINVAL; + } + else + { + size_t length = wcslen (result); + if (length < bufsize) + { + size_t i; + + /* Convert wchar_t[] -> char[], assuming plain ASCII. */ + for (i = 0; i <= length; i++) + buf[i] = result[i]; + + return 0; + } + else + { + if (bufsize > 0) + { + /* Return a truncated result in BUF. + This is a convenience for callers that don't want to write + explicit code for handling ERANGE. */ + size_t i; + + /* Convert wchar_t[] -> char[], assuming plain ASCII. */ + for (i = 0; i < bufsize; i++) + buf[i] = result[i]; + buf[bufsize - 1] = '\0'; + } + return ERANGE; + } + } +#else + const char *result = setlocale_null_unlocked (category); + + if (result == NULL) + { + /* CATEGORY is invalid. */ + if (bufsize > 0) + /* Return an empty string in BUF. + This is a convenience for callers that don't want to write explicit + code for handling EINVAL. */ + buf[0] = '\0'; + return EINVAL; + } + else + { + size_t length = strlen (result); + if (length < bufsize) + { + memcpy (buf, result, length + 1); + return 0; + } + else + { + if (bufsize > 0) + { + /* Return a truncated result in BUF. + This is a convenience for callers that don't want to write + explicit code for handling ERANGE. */ + memcpy (buf, result, bufsize - 1); + buf[bufsize - 1] = '\0'; + } + return ERANGE; + } + } +#endif +} diff --git a/jni/parted/libgnulib/lib/setlocale_null.c b/jni/parted/libgnulib/lib/setlocale_null.c new file mode 100755 index 0000000..5ecf413 --- /dev/null +++ b/jni/parted/libgnulib/lib/setlocale_null.c @@ -0,0 +1,299 @@ +/* Query the name of the current global locale. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2019. */ + +#include + +/* Specification. */ +#include "setlocale_null.h" + +#include +#include +#include +#include + +#if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) + +# if AVOID_ANY_THREADS + +/* The option '--disable-threads' explicitly requests no locking. */ + +# elif defined _WIN32 && !defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# elif HAVE_PTHREAD_API + +# include +# if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS +# include +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif + +# elif HAVE_THREADS_H + +# include + +# endif + +#endif + +#if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin < 3.4.6 */ + +/* Use a lock, so that no two threads can invoke setlocale_null_r_unlocked + at the same time. */ + +/* Prohibit renaming this symbol. */ +# undef gl_get_setlocale_null_lock + +# if AVOID_ANY_THREADS + +/* The option '--disable-threads' explicitly requests no locking. */ +# define setlocale_null_r_with_lock setlocale_null_r_unlocked + +# elif defined _WIN32 && !defined __CYGWIN__ + +extern __declspec(dllimport) CRITICAL_SECTION *gl_get_setlocale_null_lock (void); + +static int +setlocale_null_r_with_lock (int category, char *buf, size_t bufsize) +{ + CRITICAL_SECTION *lock = gl_get_setlocale_null_lock (); + int ret; + + EnterCriticalSection (lock); + ret = setlocale_null_r_unlocked (category, buf, bufsize); + LeaveCriticalSection (lock); + + return ret; +} + +# elif HAVE_PTHREAD_API /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin < 3.4.6 */ + +extern +# if defined _WIN32 || defined __CYGWIN__ + __declspec(dllimport) +# endif + pthread_mutex_t *gl_get_setlocale_null_lock (void); + +# if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ + + /* Avoid the need to link with '-lpthread'. */ +# pragma weak pthread_mutex_lock +# pragma weak pthread_mutex_unlock + + /* Determine whether libpthread is in use. */ +# pragma weak pthread_mutexattr_gettype + /* See the comments in lock.h. */ +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) + +# else +# define pthread_in_use() 1 +# endif + +static int +setlocale_null_r_with_lock (int category, char *buf, size_t bufsize) +{ + if (pthread_in_use()) + { + pthread_mutex_t *lock = gl_get_setlocale_null_lock (); + int ret; + + if (pthread_mutex_lock (lock)) + abort (); + ret = setlocale_null_r_unlocked (category, buf, bufsize); + if (pthread_mutex_unlock (lock)) + abort (); + + return ret; + } + else + return setlocale_null_r_unlocked (category, buf, bufsize); +} + +# elif HAVE_THREADS_H + +extern mtx_t *gl_get_setlocale_null_lock (void); + +static int +setlocale_null_r_with_lock (int category, char *buf, size_t bufsize) +{ + mtx_t *lock = gl_get_setlocale_null_lock (); + int ret; + + if (mtx_lock (lock) != thrd_success) + abort (); + ret = setlocale_null_r_unlocked (category, buf, bufsize); + if (mtx_unlock (lock) != thrd_success) + abort (); + + return ret; +} + +# endif + +#endif + +int +setlocale_null_r (int category, char *buf, size_t bufsize) +{ +#if SETLOCALE_NULL_ALL_MTSAFE +# if SETLOCALE_NULL_ONE_MTSAFE + + return setlocale_null_r_unlocked (category, buf, bufsize); + +# else + + if (category == LC_ALL) + return setlocale_null_r_unlocked (category, buf, bufsize); + else + return setlocale_null_r_with_lock (category, buf, bufsize); + +# endif +#else +# if SETLOCALE_NULL_ONE_MTSAFE + + if (category == LC_ALL) + return setlocale_null_r_with_lock (category, buf, bufsize); + else + return setlocale_null_r_unlocked (category, buf, bufsize); + +# else + + return setlocale_null_r_with_lock (category, buf, bufsize); + +# endif +#endif +} + +const char * +setlocale_null (int category) +{ +#if SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE + return setlocale_null_unlocked (category); +#else + + /* This call must be multithread-safe. To achieve this without using + thread-local storage: + 1. We use a specific static buffer for each possible CATEGORY + argument. So that different threads can call setlocale_mtsafe + with different CATEGORY arguments, without interfering. + 2. We use a simple strcpy or memcpy to fill this static buffer. + Filling it through, for example, strcpy + strcat would not be + guaranteed to leave the buffer's contents intact if another thread + is currently accessing it. If necessary, the contents is first + assembled in a stack-allocated buffer. */ + if (category == LC_ALL) + { +# if SETLOCALE_NULL_ALL_MTSAFE + return setlocale_null_unlocked (LC_ALL); +# else + char buf[SETLOCALE_NULL_ALL_MAX]; + static char resultbuf[SETLOCALE_NULL_ALL_MAX]; + + if (setlocale_null_r (LC_ALL, buf, sizeof (buf))) + return "C"; + strcpy (resultbuf, buf); + return resultbuf; +# endif + } + else + { +# if SETLOCALE_NULL_ONE_MTSAFE + return setlocale_null_unlocked (category); +# else + enum + { + LC_CTYPE_INDEX, + LC_NUMERIC_INDEX, + LC_TIME_INDEX, + LC_COLLATE_INDEX, + LC_MONETARY_INDEX, + LC_MESSAGES_INDEX, +# ifdef LC_PAPER + LC_PAPER_INDEX, +# endif +# ifdef LC_NAME + LC_NAME_INDEX, +# endif +# ifdef LC_ADDRESS + LC_ADDRESS_INDEX, +# endif +# ifdef LC_TELEPHONE + LC_TELEPHONE_INDEX, +# endif +# ifdef LC_MEASUREMENT + LC_MEASUREMENT_INDEX, +# endif +# ifdef LC_IDENTIFICATION + LC_IDENTIFICATION_INDEX, +# endif + LC_INDICES_COUNT + } + i; + char buf[SETLOCALE_NULL_MAX]; + static char resultbuf[LC_INDICES_COUNT][SETLOCALE_NULL_MAX]; + int err; + + err = setlocale_null_r (category, buf, sizeof (buf)); + if (err == EINVAL) + return NULL; + if (err) + return "C"; + + switch (category) + { + case LC_CTYPE: i = LC_CTYPE_INDEX; break; + case LC_NUMERIC: i = LC_NUMERIC_INDEX; break; + case LC_TIME: i = LC_TIME_INDEX; break; + case LC_COLLATE: i = LC_COLLATE_INDEX; break; + case LC_MONETARY: i = LC_MONETARY_INDEX; break; + case LC_MESSAGES: i = LC_MESSAGES_INDEX; break; +# ifdef LC_PAPER + case LC_PAPER: i = LC_PAPER_INDEX; break; +# endif +# ifdef LC_NAME + case LC_NAME: i = LC_NAME_INDEX; break; +# endif +# ifdef LC_ADDRESS + case LC_ADDRESS: i = LC_ADDRESS_INDEX; break; +# endif +# ifdef LC_TELEPHONE + case LC_TELEPHONE: i = LC_TELEPHONE_INDEX; break; +# endif +# ifdef LC_MEASUREMENT + case LC_MEASUREMENT: i = LC_MEASUREMENT_INDEX; break; +# endif +# ifdef LC_IDENTIFICATION + case LC_IDENTIFICATION: i = LC_IDENTIFICATION_INDEX; break; +# endif + default: + /* If you get here, a #ifdef LC_xxx is missing. */ + abort (); + } + + strcpy (resultbuf[i], buf); + return resultbuf[i]; +# endif + } +#endif +} diff --git a/jni/parted/libgnulib/lib/stat-time.c b/jni/parted/libgnulib/lib/stat-time.c new file mode 100755 index 0000000..1ab01f5 --- /dev/null +++ b/jni/parted/libgnulib/lib/stat-time.c @@ -0,0 +1,21 @@ +/* stat-related time functions. + + Copyright (C) 2012-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE +#include "stat-time.h" diff --git a/jni/parted/libgnulib/lib/stripslash.c b/jni/parted/libgnulib/lib/stripslash.c new file mode 100755 index 0000000..c127ce7 --- /dev/null +++ b/jni/parted/libgnulib/lib/stripslash.c @@ -0,0 +1,45 @@ +/* stripslash.c -- remove redundant trailing slashes from a file name + + Copyright (C) 1990, 2001, 2003-2006, 2009-2024 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "dirname.h" + +/* Remove trailing slashes from FILE. Return true if a trailing slash + was removed. This is useful when using file name completion from a + shell that adds a "/" after directory names (such as tcsh and + bash), because on symlinks to directories, several system calls + have different semantics according to whether a trailing slash is + present. */ + +bool +strip_trailing_slashes (char *file) +{ + char *base = last_component (file); + char *base_lim; + bool had_slash; + + /* last_component returns "" for file system roots, but we need to turn + "///" into "/". */ + if (! *base) + base = file; + base_lim = base + base_len (base); + had_slash = (*base_lim != '\0'); + *base_lim = '\0'; + return had_slash; +} diff --git a/jni/parted/libgnulib/lib/tempname.c b/jni/parted/libgnulib/lib/tempname.c new file mode 100755 index 0000000..446ddea --- /dev/null +++ b/jni/parted/libgnulib/lib/tempname.c @@ -0,0 +1,286 @@ +/* Copyright (C) 1991-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#if !_LIBC +# include +# include "tempname.h" +#endif + +#include + +#include +#ifndef TMP_MAX +# define TMP_MAX 238328 +#endif +#ifndef __GT_FILE +# define __GT_FILE 0 +# define __GT_DIR 1 +# define __GT_NOCREATE 2 +#endif +#if !_LIBC && (GT_FILE != __GT_FILE || GT_DIR != __GT_DIR \ + || GT_NOCREATE != __GT_NOCREATE) +# error report this to bug-gnulib@gnu.org +#endif + +#include +#include + +#include +#include +#include +#include +#include + +#if _LIBC +# define struct_stat64 struct __stat64_t64 +#else +# define struct_stat64 struct stat +# define __gen_tempname gen_tempname +# define __mkdir mkdir +# define __open open +# define __lstat64_time64(file, buf) lstat (file, buf) +# define __getrandom getrandom +# define __clock_gettime64 clock_gettime +# define __timespec64 timespec +#endif + +/* Use getrandom if it works, falling back on a 64-bit linear + congruential generator that starts with Var's value + mixed in with a clock's low-order bits if available. */ +typedef uint_fast64_t random_value; +#define RANDOM_VALUE_MAX UINT_FAST64_MAX +#define BASE_62_DIGITS 10 /* 62**10 < UINT_FAST64_MAX */ +#define BASE_62_POWER (62LL * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62) + +/* Return the result of mixing the entropy from R and S. + Assume that R and S are not particularly random, + and that the result should look randomish to an untrained eye. */ + +static random_value +mix_random_values (random_value r, random_value s) +{ + /* As this code is used only when high-quality randomness is neither + available nor necessary, there is no need for fancier polynomials + such as those in the Linux kernel's 'random' driver. */ + return (2862933555777941757 * r + 3037000493) ^ s; +} + +/* Set *R to a random value. + Return true if *R is set to high-quality value taken from getrandom. + Otherwise return false, falling back to a low-quality *R that might + depend on S. + + This function returns false only when getrandom fails. + On GNU systems this should happen only early in the boot process, + when the fallback should be good enough for programs using tempname + because any attacker likely has root privileges already. */ + +static bool +random_bits (random_value *r, random_value s) +{ + /* Without GRND_NONBLOCK it can be blocked for minutes on some systems. */ + if (__getrandom (r, sizeof *r, GRND_NONBLOCK) == sizeof *r) + return true; + + /* If getrandom did not work, use ersatz entropy based on low-order + clock bits. On GNU systems getrandom should fail only + early in booting, when ersatz should be good enough. + Do not use ASLR-based entropy, as that would leak ASLR info into + the resulting file name which is typically public. + + Of course we are in a state of sin here. */ + + random_value v = s; + +#if _LIBC || (defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME) + struct __timespec64 tv; + __clock_gettime64 (CLOCK_REALTIME, &tv); + v = mix_random_values (v, tv.tv_sec); + v = mix_random_values (v, tv.tv_nsec); +#endif + + *r = mix_random_values (v, clock ()); + return false; +} + +#if _LIBC +static int try_tempname_len (char *, int, void *, int (*) (char *, void *), + size_t); +#endif + +static int +try_file (char *tmpl, void *flags) +{ + int *openflags = flags; + return __open (tmpl, + (*openflags & ~O_ACCMODE) + | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); +} + +static int +try_dir (char *tmpl, _GL_UNUSED void *flags) +{ + return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); +} + +static int +try_nocreate (char *tmpl, _GL_UNUSED void *flags) +{ + struct_stat64 st; + + if (__lstat64_time64 (tmpl, &st) == 0 || errno == EOVERFLOW) + __set_errno (EEXIST); + return errno == ENOENT ? 0 : -1; +} + +/* These are the characters used in temporary file names. */ +static const char letters[] = +"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp (i.e., end in at least X_SUFFIX_LEN "X"s, + possibly with a suffix). + The name constructed does not exist at the time of the call to + this function. TMPL is overwritten with the result. + + KIND may be one of: + __GT_NOCREATE: simply verify that the name does not exist + at the time of the call. + __GT_FILE: create the file using open(O_CREAT|O_EXCL) + and return a read-write fd. The file is mode 0600. + __GT_DIR: create a directory, which will be mode 0700. + + */ +#ifdef _LIBC +static +#endif +int +gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind, + size_t x_suffix_len) +{ + static int (*const tryfunc[]) (char *, void *) = + { + [__GT_FILE] = try_file, + [__GT_DIR] = try_dir, + [__GT_NOCREATE] = try_nocreate + }; + return try_tempname_len (tmpl, suffixlen, &flags, tryfunc[kind], + x_suffix_len); +} + +#ifdef _LIBC +static +#endif +int +try_tempname_len (char *tmpl, int suffixlen, void *args, + int (*tryfunc) (char *, void *), size_t x_suffix_len) +{ + size_t len; + char *XXXXXX; + unsigned int count; + int fd = -1; + int saved_errno = errno; + + /* A lower bound on the number of temporary files to attempt to + generate. The maximum total number of temporary file names that + can exist for a given template is 62**6. It should never be + necessary to try all of these combinations. Instead if a reasonable + number of names is tried (we define reasonable as 62**3) fail to + give the system administrator the chance to remove the problems. + This value requires that X_SUFFIX_LEN be at least 3. */ +#define ATTEMPTS_MIN (62 * 62 * 62) + + /* The number of times to attempt to generate a temporary file. To + conform to POSIX, this must be no smaller than TMP_MAX. */ +#if ATTEMPTS_MIN < TMP_MAX + unsigned int attempts = TMP_MAX; +#else + unsigned int attempts = ATTEMPTS_MIN; +#endif + + /* A random variable. */ + random_value v = 0; + + /* A value derived from the random variable, and how many random + base-62 digits can currently be extracted from VDIGBUF. */ + random_value vdigbuf; + int vdigits = 0; + + /* Least biased value for V. If V is less than this, V can generate + BASE_62_DIGITS unbiased digits. Otherwise the digits are biased. */ + random_value const biased_min + = RANDOM_VALUE_MAX - RANDOM_VALUE_MAX % BASE_62_POWER; + + len = strlen (tmpl); + if (len < x_suffix_len + suffixlen + || strspn (&tmpl[len - x_suffix_len - suffixlen], "X") < x_suffix_len) + { + __set_errno (EINVAL); + return -1; + } + + /* This is where the Xs start. */ + XXXXXX = &tmpl[len - x_suffix_len - suffixlen]; + + for (count = 0; count < attempts; ++count) + { + for (size_t i = 0; i < x_suffix_len; i++) + { + if (vdigits == 0) + { + /* Worry about bias only if the bits are high quality. */ + while (random_bits (&v, v) && biased_min <= v) + continue; + + vdigbuf = v; + vdigits = BASE_62_DIGITS; + } + + XXXXXX[i] = letters[vdigbuf % 62]; + vdigbuf /= 62; + vdigits--; + } + + fd = tryfunc (tmpl, args); + if (fd >= 0) + { + __set_errno (saved_errno); + return fd; + } + else if (errno != EEXIST) + return -1; + } + + /* We got out of the loop because we ran out of combinations to try. */ + __set_errno (EEXIST); + return -1; +} + +int +__gen_tempname (char *tmpl, int suffixlen, int flags, int kind) +{ + return gen_tempname_len (tmpl, suffixlen, flags, kind, 6); +} + +#if !_LIBC +int +try_tempname (char *tmpl, int suffixlen, void *args, + int (*tryfunc) (char *, void *)) +{ + return try_tempname_len (tmpl, suffixlen, args, tryfunc, 6); +} +#endif diff --git a/jni/parted/libgnulib/lib/unictype/bitmap.h b/jni/parted/libgnulib/lib/unictype/bitmap.h new file mode 100755 index 0000000..dba2365 --- /dev/null +++ b/jni/parted/libgnulib/lib/unictype/bitmap.h @@ -0,0 +1,48 @@ +/* Three-level bitmap lookup. + Copyright (C) 2000-2002, 2005-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2000-2002. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +static inline int bitmap_lookup (const void *table, ucs4_t uc); + +/* These values are currently hardcoded into gen-uni-tables.c, function + output_predicate(). */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 + +static inline int +bitmap_lookup (const void *table, ucs4_t uc) +{ + unsigned int index1 = uc >> header_0; + if (index1 < ((const int *) table)[0]) + { + int lookup1 = ((const int *) table)[1 + index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> header_2) & header_3; + int lookup2 = ((const short *) table)[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc >> 5) & header_4; + unsigned int lookup3 = ((const unsigned int *) table)[lookup2 + index3]; + + return (lookup3 >> (uc & 0x1f)) & 1; + } + } + } + return 0; +} diff --git a/jni/parted/libgnulib/lib/unictype/ctype_print.c b/jni/parted/libgnulib/lib/unictype/ctype_print.c new file mode 100755 index 0000000..5e73e42 --- /dev/null +++ b/jni/parted/libgnulib/lib/unictype/ctype_print.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_print table. */ +#include "ctype_print.h" + +bool +uc_is_print (ucs4_t uc) +{ + return bitmap_lookup (&u_is_print, uc); +} diff --git a/jni/parted/libgnulib/lib/unictype/ctype_print.h b/jni/parted/libgnulib/lib/unictype/ctype_print.h new file mode 100755 index 0000000..b700782 --- /dev/null +++ b/jni/parted/libgnulib/lib/unictype/ctype_print.h @@ -0,0 +1,1202 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[6 << 7]; + unsigned int level3[94 << 4]; + } +u_is_print = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 * sizeof (int) / sizeof (short) + 512, + 18 * sizeof (int) / sizeof (short) + 640, + 18 * sizeof (int) / sizeof (short) + 640 + }, + { + 18 + 768 * sizeof (short) / sizeof (int) + 0, + 18 + 768 * sizeof (short) / sizeof (int) + 16, + 18 + 768 * sizeof (short) / sizeof (int) + 32, + 18 + 768 * sizeof (short) / sizeof (int) + 48, + 18 + 768 * sizeof (short) / sizeof (int) + 64, + 18 + 768 * sizeof (short) / sizeof (int) + 80, + 18 + 768 * sizeof (short) / sizeof (int) + 96, + 18 + 768 * sizeof (short) / sizeof (int) + 112, + 18 + 768 * sizeof (short) / sizeof (int) + 128, + 18 + 768 * sizeof (short) / sizeof (int) + 144, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 176, + 18 + 768 * sizeof (short) / sizeof (int) + 192, + 18 + 768 * sizeof (short) / sizeof (int) + 208, + 18 + 768 * sizeof (short) / sizeof (int) + 224, + 18 + 768 * sizeof (short) / sizeof (int) + 240, + 18 + 768 * sizeof (short) / sizeof (int) + 256, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 272, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 288, + 18 + 768 * sizeof (short) / sizeof (int) + 304, + 18 + 768 * sizeof (short) / sizeof (int) + 320, + 18 + 768 * sizeof (short) / sizeof (int) + 336, + 18 + 768 * sizeof (short) / sizeof (int) + 352, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 368, + 18 + 768 * sizeof (short) / sizeof (int) + 384, + 18 + 768 * sizeof (short) / sizeof (int) + 400, + 18 + 768 * sizeof (short) / sizeof (int) + 416, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 432, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 448, + 18 + 768 * sizeof (short) / sizeof (int) + 464, + 18 + 768 * sizeof (short) / sizeof (int) + 480, + 18 + 768 * sizeof (short) / sizeof (int) + 496, + 18 + 768 * sizeof (short) / sizeof (int) + 512, + 18 + 768 * sizeof (short) / sizeof (int) + 528, + 18 + 768 * sizeof (short) / sizeof (int) + 544, + 18 + 768 * sizeof (short) / sizeof (int) + 560, + 18 + 768 * sizeof (short) / sizeof (int) + 576, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 608, + 18 + 768 * sizeof (short) / sizeof (int) + 624, + 18 + 768 * sizeof (short) / sizeof (int) + 640, + 18 + 768 * sizeof (short) / sizeof (int) + 656, + 18 + 768 * sizeof (short) / sizeof (int) + 672, + 18 + 768 * sizeof (short) / sizeof (int) + 688, + 18 + 768 * sizeof (short) / sizeof (int) + 704, + 18 + 768 * sizeof (short) / sizeof (int) + 720, + 18 + 768 * sizeof (short) / sizeof (int) + 736, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 752, + 18 + 768 * sizeof (short) / sizeof (int) + 768, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 784, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 800, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 816, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 832, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 848, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 864, + 18 + 768 * sizeof (short) / sizeof (int) + 880, + 18 + 768 * sizeof (short) / sizeof (int) + 896, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 912, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 928, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 944, + 18 + 768 * sizeof (short) / sizeof (int) + 960, + 18 + 768 * sizeof (short) / sizeof (int) + 976, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 992, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 1008, + 18 + 768 * sizeof (short) / sizeof (int) + 1024, + 18 + 768 * sizeof (short) / sizeof (int) + 1040, + 18 + 768 * sizeof (short) / sizeof (int) + 1056, + 18 + 768 * sizeof (short) / sizeof (int) + 1072, + 18 + 768 * sizeof (short) / sizeof (int) + 1088, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1104, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 1120, + 18 + 768 * sizeof (short) / sizeof (int) + 1136, + 18 + 768 * sizeof (short) / sizeof (int) + 1152, + 18 + 768 * sizeof (short) / sizeof (int) + 1168, + 18 + 768 * sizeof (short) / sizeof (int) + 1184, + 18 + 768 * sizeof (short) / sizeof (int) + 1200, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 1216, + 18 + 768 * sizeof (short) / sizeof (int) + 1232, + 18 + 768 * sizeof (short) / sizeof (int) + 1248, + 18 + 768 * sizeof (short) / sizeof (int) + 1264, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1280, + 18 + 768 * sizeof (short) / sizeof (int) + 1296, + 18 + 768 * sizeof (short) / sizeof (int) + 1312, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1328, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1344, + 18 + 768 * sizeof (short) / sizeof (int) + 1360, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1376, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1392, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1408, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1424, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1440, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1456, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 1472, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 1488 + }, + { + 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, + 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFCFFFFFFU, + 0xFFFFD7F0U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFEFFFFU, 0xFE7FFFFFU, 0xFFFFFFFFU, + 0xFFFEE7FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x001F87FFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFBFFFU, 0xFFFFFFFFU, 0xFFFFE7FFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x0003FFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, + 0xFFFFFFFFU, 0x7FFF3FFFU, 0x4FFFFFFFU, 0xFFFF07FFU, + 0xFF837FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFF99FEFU, 0xF3C5FDFFU, 0xB080799FU, 0x7FFFFFCFU, + 0xFFF987EEU, 0xD36DFDFFU, 0x5E023987U, 0x007FFFC0U, + 0xFFFBBFEEU, 0xF3EDFDFFU, 0x00013BBFU, 0xFE03FFCFU, + 0xFFF99FEEU, 0xF3EDFDFFU, 0xB0E0399FU, 0x00FFFFCFU, + 0xD63DC7ECU, 0xC3FFC718U, 0x00813DC7U, 0x07FFFFC0U, + 0xFFFDDFFFU, 0xF3FFFDFFU, 0x27603DDFU, 0xFF80FFCFU, + 0xFFFDDFFFU, 0xF3EFFDFFU, 0x60603DDFU, 0x000EFFCFU, + 0xFFFDDFFFU, 0xFFFFFFFFU, 0xFFF0FDDFU, 0xFFFFFFCFU, + 0xFC7FFFEEU, 0x2FFBFFFFU, 0xFF5F847FU, 0x001CFFC0U, + 0xFFFFFFFEU, 0x87FFFFFFU, 0x0FFFFFFFU, 0x00000000U, + 0xFFFFF7D6U, 0x3FFFFFAFU, 0xF3FF7F5FU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFEFFU, 0xFFFE1FFFU, + 0xFEFFFFFFU, 0xDFFFFFFFU, 0x07FFDFFFU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, + 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, + 0xFF3DFFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, 0x1FFFFFFFU, + 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, + 0x803FFFFFU, 0x007FFFFFU, 0x000FFFFFU, 0x000DDFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x03FF03FFU, + 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, + 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0x003FFFFFU, + 0x7FFFFFFFU, 0x0FFF0FFFU, 0xFFFFFFF1U, 0x001F3FFFU, + 0xFFFFFFFFU, 0xFFFF0FFFU, 0xC7FF03FFU, 0xFFFFFFFFU, + 0xCFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x9FFFFFFFU, + 0x03FF03FFU, 0xFFFF3FFFU, 0x00007FFFU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFDFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF00FFFFFU, + 0xFFFFFFFFU, 0xF8FFFFFFU, 0xFFFFE3FFU, 0xFFFFFFFFU, + 0xFFFF07FFU, 0xE7FFFFFFU, 0xFFFF00FFU, 0x07FFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, + 0xFFFFFFFFU, 0xFFDFFFFFU, 0xEFCFFFDFU, 0x7FDCFFFFU, + 0xFFFFFFFFU, 0xFFFFFCFFU, 0xFFFFFFFFU, 0xFFF3FFDFU, + 0x1FFF7FFFU, 0xFFFFFFFFU, 0xFFFF0001U, 0x0001FFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x000003FFU, 0x000007FFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, + 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFE0FFFFFU, + 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x800180FFU, + 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, + 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFF0000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, + 0xFE7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFE0U, 0xFFFEFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF803FU, + 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFF1FFFU, 0xFFFFFFFFU, 0xFFFF007FU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x00000FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FEB3FFFU, 0xFFFC0000U, + 0xFFFFFFFFU, 0x03FF1FFFU, 0xFFFFFFFFU, 0x00FFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFC03FU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800FFFFFU, 0x1FFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FFBFFFU, 0x7FFFFFFFU, + 0xFFFFFFFFU, 0x007FFFFFU, 0xF3FF3FFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000007U, 0x007FFFFFU, + 0x007E7E7EU, 0xFFFF7F7FU, 0xFFFFFFFFU, 0xFFFF0FFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF3FFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, + 0xE0F8007FU, 0x5F7FFFFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF80007U, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000080FFU, 0xFFFF0000U, + 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0xFFDF0F7FU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FFFFFFFU, + 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x3E007F7FU, + 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, + 0xFFFFFF87U, 0xFF8FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x1FFF7FFFU, 0x00000001U, 0xFFFF0000U, 0x3FFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x0FFFFFFFU, + 0xFFFFFFFFU, 0xFFFFE00FU, 0xFFFF07FFU, 0x07FFFFFFU, + 0xBFFFFFFFU, 0xFFFFFFFFU, 0x003FFF0FU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, + 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0xF7FF800FU, + 0xFFB7F7FFU, 0x1BFBFFFBU, 0xFFFFFFFFU, 0x000FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, + 0xFFFFFFBFU, 0x07FDFFFFU, 0x00000000U, 0x00000000U, + 0xFFFFFD3FU, 0x91BFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, + 0x7FFFFFFFU, 0x0000FF80U, 0x00000000U, 0xF837FFFFU, + 0x8FFFFFFFU, 0x83FFFFFFU, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xF0FFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, + 0xFEEFF06FU, 0x873FFFFFU, 0x01FF01FFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0x007FF87FU, + 0xFFFFFFFFU, 0xFE3FFFFFU, 0xFF3FFFFFU, 0xFF07FFFFU, + 0x1E03FFFFU, 0x0000FE00U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, + 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0xFC07FFFFU, + 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFFFE3FU, + 0x0000C03FU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, + 0xFFFFFFFFU, 0x00033BFFU, 0x0000001CU, 0xF0000000U, + 0xFFFFFFFFU, 0xFFFF00FFU, 0x03FFFFFFU, 0xFFFF0000U, + 0x000003FFU, 0xFFFF0000U, 0x00000FFFU, 0x007FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFC3FFFU, 0x803FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF2007U, 0x03FF01FFU, + 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFF00FFU, 0x007FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFEU, + 0xFFFBFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, + 0xBFFFBD7FU, 0xFFFF03FFU, 0xFFFFFFFFU, 0x03FF07FFU, + 0xFFF99FEFU, 0xFBEDFDFFU, 0xE081399FU, 0x001F1FCFU, + 0xFFFF4BFFU, 0xFFBFFFFFU, 0x01BFF7A5U, 0x00000006U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xEFFFFFFFU, 0x00000003U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFF3FFFFFU, 0x3FFFFFFFU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF001FU, 0x00001FFFU, + 0xFFFFFFFFU, 0x03FFFFFFU, 0xFFFF03FFU, 0x0000000FU, + 0xE7FFFFFFU, 0xFFFF0FFFU, 0x0000007FU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, + 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8007FFFFU, + 0xFF6FF27FU, 0xF9BFFFFFU, 0x03FF007FU, 0x00000000U, + 0x00000000U, 0xFFFFFCFFU, 0xFCFFFFFFU, 0x0000001FU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFF0007U, 0xFFFFFFFFU, 0x01FFFFFFU, + 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x03FF0003U, + 0xFFFFFDFFU, 0xFF7FFFFFU, 0xFFFF003FU, 0xFFFF1FFFU, + 0xFFFCFFFFU, 0x007FFEFFU, 0x00000000U, 0x00000000U, + 0xFFFFFB7FU, 0xB47FFFFFU, 0x03FF00FFU, 0xFFFFFDBFU, + 0x01FB7FFFU, 0x000003FFU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x01FFFFFFU, + 0xFFFDFFFFU, 0xC7FFFFFFU, 0x07FFFFFFU, 0x00000000U, + 0x00000000U, 0x00010000U, 0xFFFFFFFFU, 0x8003FFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001F7FFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0xFFFFC3FFU, + 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFF03FFU, 0x003F3FFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFBFF003FU, 0xE0FFFFFBU, + 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x03FFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF87FFU, 0xFFFFFFFFU, + 0xFFFF80FFU, 0x00000000U, 0x00000000U, 0x0003001FU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x80000000U, + 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x6FEF0000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x00040007U, 0x00270000U, 0xFFFF00F0U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, + 0xF3FF01FFU, 0x0000000FU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x000FFFFFU, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFF007FU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, + 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000007FFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x000FFFFFU, 0x000FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x01FFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, + 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, + 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFF3FU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFCFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xF8000FFFU, 0x0000FFFEU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x7FFFFFFFU, 0x000007E0U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xF9FFFF7FU, 0xFFFF07DBU, 0xFFFFFFFFU, 0x00003FFFU, + 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0x3FFF1FFFU, 0x0000C3FFU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFF0000U, 0x00007FFFU, 0xFFFFFFFFU, 0x83FFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x03FFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x87FFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFF6F7FU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFF9FU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FF0FFFU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, + 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, + 0xFFFFFFFEU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, + 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00030000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x00003FFFU, 0x00000000U, 0xFFFFFFC0U, + 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x0000003FU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF0FFFFFFU, 0x1FFF1FFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF87FFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00010FFFU, + 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, + 0xFFFF00FFU, 0x0FFF3FFFU, 0x00000003U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x1FFF3FFFU, + 0xFFFF83FFU, 0xFFFFFFFFU, 0x9FFFC07FU, 0x01FF03FFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFF7FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFF0003U, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0001U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, + 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU + } +}; diff --git a/jni/parted/libgnulib/lib/version-etc-fsf.c b/jni/parted/libgnulib/lib/version-etc-fsf.c new file mode 100755 index 0000000..894b1c3 --- /dev/null +++ b/jni/parted/libgnulib/lib/version-etc-fsf.c @@ -0,0 +1,30 @@ +/* Variable with FSF copyright information, for version-etc. + Copyright (C) 1999-2006, 2009-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#include + +/* Specification. */ +#include "version-etc.h" + +/* Default copyright goes to the FSF. */ + +const char version_etc_copyright[] = + /* Do *not* mark this string for translation. %s is a copyright + symbol suitable for this locale, and %d is the copyright + year. */ + "Copyright %s %d Free Software Foundation, Inc."; diff --git a/jni/parted/libgnulib/lib/version-etc.c b/jni/parted/libgnulib/lib/version-etc.c new file mode 100755 index 0000000..45d0c93 --- /dev/null +++ b/jni/parted/libgnulib/lib/version-etc.c @@ -0,0 +1,262 @@ +/* Print --version and bug-reporting information in a consistent format. + Copyright (C) 1999-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#include + +/* Specification. */ +#include "version-etc.h" + +#include +#include + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +/* If you use AM_INIT_AUTOMAKE's no-define option, + PACKAGE is not defined. Use PACKAGE_TARNAME instead. */ +#if ! defined PACKAGE && defined PACKAGE_TARNAME +# define PACKAGE PACKAGE_TARNAME +#endif + +enum { COPYRIGHT_YEAR = 2024 }; + +/* The three functions below display the --version information the + standard way. + + If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of + the program. The formats are therefore: + + PACKAGE VERSION + + or + + COMMAND_NAME (PACKAGE) VERSION. + + The functions differ in the way they are passed author names. */ + +/* Display the --version information the standard way. + + Author names are given in the array AUTHORS. N_AUTHORS is the + number of elements in the array. */ +void +version_etc_arn (FILE *stream, + const char *command_name, const char *package, + const char *version, + const char * const * authors, size_t n_authors) +{ + if (command_name) + fprintf (stream, "%s (%s) %s\n", command_name, package, version); + else + fprintf (stream, "%s %s\n", package, version); + +#ifdef PACKAGE_PACKAGER +# ifdef PACKAGE_PACKAGER_VERSION + fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER, + PACKAGE_PACKAGER_VERSION); +# else + fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER); +# endif +#endif + + /* TRANSLATORS: Translate "(C)" to the copyright symbol + (C-in-a-circle), if this symbol is available in the user's + locale. Otherwise, do not translate "(C)"; leave it as-is. */ + fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR); + + fputs ("\n", stream); + + /* TRANSLATORS: The %s placeholder is the web address of the GPL license. */ + fprintf (stream, _("\ +License GPLv3+: GNU GPL version 3 or later <%s>.\n\ +This is free software: you are free to change and redistribute it.\n\ +There is NO WARRANTY, to the extent permitted by law.\n\ +"), + "https://gnu.org/licenses/gpl.html"); + + fputs ("\n", stream); + + switch (n_authors) + { + case 0: + /* No authors are given. The caller should output authorship + info after calling this function. */ + break; + case 1: + /* TRANSLATORS: %s denotes an author name. */ + fprintf (stream, _("Written by %s.\n"), authors[0]); + break; + case 2: + /* TRANSLATORS: Each %s denotes an author name. */ + fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]); + break; + case 3: + /* TRANSLATORS: Each %s denotes an author name. */ + fprintf (stream, _("Written by %s, %s, and %s.\n"), + authors[0], authors[1], authors[2]); + break; + case 4: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"), + authors[0], authors[1], authors[2], authors[3]); + break; + case 5: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4]); + break; + case 6: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5]); + break; + case 7: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5], authors[6]); + break; + case 8: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("\ +Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5], authors[6], authors[7]); + break; + case 9: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("\ +Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5], authors[6], authors[7], authors[8]); + break; + default: + /* 10 or more authors. Use an abbreviation, since the human reader + will probably not want to read the entire list anyway. */ + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("\ +Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5], authors[6], authors[7], authors[8]); + break; + } +} + +/* Display the --version information the standard way. See the initial + comment to this module, for more information. + + Author names are given in the NULL-terminated array AUTHORS. */ +void +version_etc_ar (FILE *stream, + const char *command_name, const char *package, + const char *version, const char * const * authors) +{ + size_t n_authors; + + for (n_authors = 0; authors[n_authors]; n_authors++) + ; + version_etc_arn (stream, command_name, package, version, authors, n_authors); +} + +/* Display the --version information the standard way. See the initial + comment to this module, for more information. + + Author names are given in the NULL-terminated va_list AUTHORS. */ +void +version_etc_va (FILE *stream, + const char *command_name, const char *package, + const char *version, va_list authors) +{ + size_t n_authors; + const char *authtab[10]; + + for (n_authors = 0; + n_authors < 10 + && (authtab[n_authors] = va_arg (authors, const char *)) != NULL; + n_authors++) + ; + version_etc_arn (stream, command_name, package, version, + authtab, n_authors); +} + + +/* Display the --version information the standard way. + + If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of + the program. The formats are therefore: + + PACKAGE VERSION + + or + + COMMAND_NAME (PACKAGE) VERSION. + + The authors names are passed as separate arguments, with an additional + NULL argument at the end. */ +void +version_etc (FILE *stream, + const char *command_name, const char *package, + const char *version, /* const char *author1, ...*/ ...) +{ + va_list authors; + + va_start (authors, version); + version_etc_va (stream, command_name, package, version, authors); + va_end (authors); +} + +void +emit_bug_reporting_address (void) +{ + fputs ("\n", stdout); + /* TRANSLATORS: The placeholder indicates the bug-reporting address + for this package. Please add _another line_ saying + "Report translation bugs to <...>\n" with the address for translation + bugs (typically your translation team's web or email address). */ + printf (_("Report bugs to: %s\n"), PACKAGE_BUGREPORT); +#ifdef PACKAGE_PACKAGER_BUG_REPORTS + printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER, + PACKAGE_PACKAGER_BUG_REPORTS); +#endif +#ifdef PACKAGE_URL + printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); +#else + printf (_("%s home page: <%s>\n"), + PACKAGE_NAME, "https://www.gnu.org/software/" PACKAGE "/"); +#endif + printf (_("General help using GNU software: <%s>\n"), + "https://www.gnu.org/gethelp/"); +} diff --git a/jni/parted/libgnulib/lib/wctype.c b/jni/parted/libgnulib/lib/wctype.c new file mode 100755 index 0000000..914f684 --- /dev/null +++ b/jni/parted/libgnulib/lib/wctype.c @@ -0,0 +1,25 @@ +/* Get descriptor for a wide character property. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +#include "wctype-impl.h" diff --git a/jni/parted/libgnulib/lib/xalloc-die.c b/jni/parted/libgnulib/lib/xalloc-die.c new file mode 100755 index 0000000..c053c7a --- /dev/null +++ b/jni/parted/libgnulib/lib/xalloc-die.c @@ -0,0 +1,41 @@ +/* Report a memory allocation failure and exit. + + Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +#include + +#include "xalloc.h" + +#include + +#include +#include "exitfail.h" + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +void +xalloc_die (void) +{ + error (exit_failure, 0, "%s", _("memory exhausted")); + + /* _Noreturn cannot be given to error, since it may return if + its first argument is 0. To help compilers understand the + xalloc_die does not return, call abort. Also, the abort is a + safety feature if exit_failure is 0 (which shouldn't happen). */ + abort (); +} diff --git a/jni/parted/libgnulib/lib/xmalloc.c b/jni/parted/libgnulib/lib/xmalloc.c new file mode 100755 index 0000000..5befdab --- /dev/null +++ b/jni/parted/libgnulib/lib/xmalloc.c @@ -0,0 +1,340 @@ +/* xmalloc.c -- malloc with out of memory checking + + Copyright (C) 1990-2000, 2002-2006, 2008-2024 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#include + +#define XALLOC_INLINE _GL_EXTERN_INLINE + +#include "xalloc.h" + +#include "ialloc.h" +#include "minmax.h" + +#include +#include +#include +#include + +static void * _GL_ATTRIBUTE_PURE +check_nonnull (void *p) +{ + if (!p) + xalloc_die (); + return p; +} + +/* Allocate S bytes of memory dynamically, with error checking. */ + +void * +xmalloc (size_t s) +{ + return check_nonnull (malloc (s)); +} + +void * +ximalloc (idx_t s) +{ + return check_nonnull (imalloc (s)); +} + +char * +xcharalloc (size_t n) +{ + return XNMALLOC (n, char); +} + +/* Change the size of an allocated block of memory P to S bytes, + with error checking. */ + +void * +xrealloc (void *p, size_t s) +{ + void *r = realloc (p, s); + if (!r && (!p || s)) + xalloc_die (); + return r; +} + +void * +xirealloc (void *p, idx_t s) +{ + return check_nonnull (irealloc (p, s)); +} + +/* Change the size of an allocated block of memory P to an array of N + objects each of S bytes, with error checking. */ + +void * +xreallocarray (void *p, size_t n, size_t s) +{ + void *r = reallocarray (p, n, s); + if (!r && (!p || (n && s))) + xalloc_die (); + return r; +} + +void * +xireallocarray (void *p, idx_t n, idx_t s) +{ + return check_nonnull (ireallocarray (p, n, s)); +} + +/* Allocate an array of N objects, each with S bytes of memory, + dynamically, with error checking. S must be nonzero. */ + +void * +xnmalloc (size_t n, size_t s) +{ + return xreallocarray (NULL, n, s); +} + +void * +xinmalloc (idx_t n, idx_t s) +{ + return xireallocarray (NULL, n, s); +} + +/* If P is null, allocate a block of at least *PS bytes; otherwise, + reallocate P so that it contains more than *PS bytes. *PS must be + nonzero unless P is null. Set *PS to the new block's size, and + return the pointer to the new block. *PS is never set to zero, and + the returned pointer is never null. */ + +void * +x2realloc (void *p, size_t *ps) +{ + return x2nrealloc (p, ps, 1); +} + +/* If P is null, allocate a block of at least *PN such objects; + otherwise, reallocate P so that it contains more than *PN objects + each of S bytes. S must be nonzero. Set *PN to the new number of + objects, and return the pointer to the new block. *PN is never set + to zero, and the returned pointer is never null. + + Repeated reallocations are guaranteed to make progress, either by + allocating an initial block with a nonzero size, or by allocating a + larger block. + + In the following implementation, nonzero sizes are increased by a + factor of approximately 1.5 so that repeated reallocations have + O(N) overall cost rather than O(N**2) cost, but the + specification for this function does not guarantee that rate. + + Here is an example of use: + + int *p = NULL; + size_t used = 0; + size_t allocated = 0; + + void + append_int (int value) + { + if (used == allocated) + p = x2nrealloc (p, &allocated, sizeof *p); + p[used++] = value; + } + + This causes x2nrealloc to allocate a block of some nonzero size the + first time it is called. + + To have finer-grained control over the initial size, set *PN to a + nonzero value before calling this function with P == NULL. For + example: + + int *p = NULL; + size_t used = 0; + size_t allocated = 0; + size_t allocated1 = 1000; + + void + append_int (int value) + { + if (used == allocated) + { + p = x2nrealloc (p, &allocated1, sizeof *p); + allocated = allocated1; + } + p[used++] = value; + } + + */ + +void * +x2nrealloc (void *p, size_t *pn, size_t s) +{ + size_t n = *pn; + + if (! p) + { + if (! n) + { + /* The approximate size to use for initial small allocation + requests, when the invoking code specifies an old size of + zero. This is the largest "small" request for the GNU C + library malloc. */ + enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; + + n = DEFAULT_MXFAST / s; + n += !n; + } + } + else + { + /* Set N = floor (1.5 * N) + 1 to make progress even if N == 0. */ + if (ckd_add (&n, n, (n >> 1) + 1)) + xalloc_die (); + } + + p = xreallocarray (p, n, s); + *pn = n; + return p; +} + +/* Grow PA, which points to an array of *PN items, and return the + location of the reallocated array, updating *PN to reflect its + new size. The new array will contain at least N_INCR_MIN more + items, but will not contain more than N_MAX items total. + S is the size of each item, in bytes. + + S and N_INCR_MIN must be positive. *PN must be + nonnegative. If N_MAX is -1, it is treated as if it were + infinity. + + If PA is null, then allocate a new array instead of reallocating + the old one. + + Thus, to grow an array A without saving its old contents, do + { free (A); A = xpalloc (NULL, &AITEMS, ...); }. */ + +void * +xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) +{ + idx_t n0 = *pn; + + /* The approximate size to use for initial small allocation + requests. This is the largest "small" request for the GNU C + library malloc. */ + enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; + + /* If the array is tiny, grow it to about (but no greater than) + DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%. + Adjust the growth according to three constraints: N_INCR_MIN, + N_MAX, and what the C language can represent safely. */ + + idx_t n; + if (ckd_add (&n, n0, n0 >> 1)) + n = IDX_MAX; + if (0 <= n_max && n_max < n) + n = n_max; + + /* NBYTES is of a type suitable for holding the count of bytes in an object. + This is typically idx_t, but it should be size_t on (theoretical?) + platforms where SIZE_MAX < IDX_MAX so xpalloc does not pass + values greater than SIZE_MAX to xrealloc. */ +#if IDX_MAX <= SIZE_MAX + idx_t nbytes; +#else + size_t nbytes; +#endif + idx_t adjusted_nbytes + = (ckd_mul (&nbytes, n, s) + ? MIN (IDX_MAX, SIZE_MAX) + : nbytes < DEFAULT_MXFAST ? DEFAULT_MXFAST : 0); + if (adjusted_nbytes) + { + n = adjusted_nbytes / s; + nbytes = adjusted_nbytes - adjusted_nbytes % s; + } + + if (! pa) + *pn = 0; + if (n - n0 < n_incr_min + && (ckd_add (&n, n0, n_incr_min) + || (0 <= n_max && n_max < n) + || ckd_mul (&nbytes, n, s))) + xalloc_die (); + pa = xrealloc (pa, nbytes); + *pn = n; + return pa; +} + +/* Allocate S bytes of zeroed memory dynamically, with error checking. + There's no need for xnzalloc (N, S), since it would be equivalent + to xcalloc (N, S). */ + +void * +xzalloc (size_t s) +{ + return xcalloc (s, 1); +} + +void * +xizalloc (idx_t s) +{ + return xicalloc (s, 1); +} + +/* Allocate zeroed memory for N elements of S bytes, with error + checking. S must be nonzero. */ + +void * +xcalloc (size_t n, size_t s) +{ + return check_nonnull (calloc (n, s)); +} + +void * +xicalloc (idx_t n, idx_t s) +{ + return check_nonnull (icalloc (n, s)); +} + +/* Clone an object P of size S, with error checking. There's no need + for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any + need for an arithmetic overflow check. */ + +void * +xmemdup (void const *p, size_t s) +{ + return memcpy (xmalloc (s), p, s); +} + +void * +ximemdup (void const *p, idx_t s) +{ + return memcpy (ximalloc (s), p, s); +} + +/* Clone an object P of size S, with error checking. Append + a terminating NUL byte. */ + +char * +ximemdup0 (void const *p, idx_t s) +{ + char *result = ximalloc (s + 1); + result[s] = 0; + return memcpy (result, p, s); +} + +/* Clone STRING. */ + +char * +xstrdup (char const *string) +{ + return xmemdup (string, strlen (string) + 1); +} diff --git a/jni/parted/libgnulib/lib/xstrtol.c b/jni/parted/libgnulib/lib/xstrtol.c new file mode 100755 index 0000000..4e7c0fc --- /dev/null +++ b/jni/parted/libgnulib/lib/xstrtol.c @@ -0,0 +1,236 @@ +/* A more useful interface to strtol. + + Copyright (C) 1995-1996, 1998-2001, 2003-2007, 2009-2024 Free Software + Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering. */ + +#ifndef __strtol +# define __strtol strtol +# define __strtol_t long int +# define __xstrtol xstrtol +# define STRTOL_T_MINIMUM LONG_MIN +# define STRTOL_T_MAXIMUM LONG_MAX +#endif + +#include + +#include "xstrtol.h" + +#include +#include +#include +#include +#include +#include + +#if XSTRTOL_INCLUDE_INTTYPES_H +# include +#endif + +#include "intprops.h" + +static strtol_error +bkm_scale (__strtol_t *x, int scale_factor) +{ + __strtol_t scaled; + if (ckd_mul (&scaled, *x, scale_factor)) + { + *x = *x < 0 ? TYPE_MINIMUM (__strtol_t) : TYPE_MAXIMUM (__strtol_t); + return LONGINT_OVERFLOW; + } + + *x = scaled; + + return LONGINT_OK; +} + +static strtol_error +bkm_scale_by_power (__strtol_t *x, int base, int power) +{ + strtol_error err = LONGINT_OK; + while (power--) + err |= bkm_scale (x, base); + return err; +} + +strtol_error +__xstrtol (char const *nptr, char **endptr, int base, + __strtol_t *val, char const *valid_suffixes) +{ + char *t_ptr; + char **p = endptr ? endptr : &t_ptr; + + if (! TYPE_SIGNED (__strtol_t)) + { + char const *q = nptr; + unsigned char ch = *q; + while (isspace (ch)) + ch = *++q; + if (ch == '-') + { + *p = (char *) nptr; + return LONGINT_INVALID; + } + } + + errno = 0; + __strtol_t tmp = __strtol (nptr, p, base); + strtol_error err = LONGINT_OK; + + if (*p == nptr) + { + /* If there is no number but there is a valid suffix, assume the + number is 1. The string is invalid otherwise. */ + if (! (valid_suffixes && *nptr && strchr (valid_suffixes, *nptr))) + return LONGINT_INVALID; + tmp = 1; + } + else if (errno != 0) + { + if (errno != ERANGE) + return LONGINT_INVALID; + err = LONGINT_OVERFLOW; + } + + /* Let valid_suffixes == NULL mean "allow any suffix". */ + /* FIXME: update all callers except the ones that allow suffixes + after the number, changing last parameter NULL to "". */ + if (!valid_suffixes) + { + *val = tmp; + return err; + } + + if (**p != '\0') + { + int xbase = 1024; + int suffixes = 1; + strtol_error overflow; + + if (!strchr (valid_suffixes, **p)) + { + *val = tmp; + return err | LONGINT_INVALID_SUFFIX_CHAR; + } + + switch (**p) + { + case 'E': case 'G': case 'g': case 'k': case 'K': case 'M': case 'm': + case 'P': case 'Q': case 'R': case 'T': case 't': case 'Y': case 'Z': + + /* The "valid suffix" '0' is a special flag meaning that + an optional second suffix is allowed, which can change + the base. A suffix "B" (e.g. "100MB") stands for a power + of 1000, whereas a suffix "iB" (e.g. "100MiB") stands for + a power of 1024. If no suffix (e.g. "100M"), assume + power-of-1024. */ + + if (strchr (valid_suffixes, '0')) + switch (p[0][1]) + { + case 'i': + if (p[0][2] == 'B') + suffixes += 2; + break; + + case 'B': + case 'D': /* 'D' is obsolescent */ + xbase = 1000; + suffixes++; + break; + } + } + + switch (**p) + { + case 'b': + overflow = bkm_scale (&tmp, 512); + break; + + case 'B': + /* This obsolescent first suffix is distinct from the 'B' + second suffix above. E.g., 'tar -L 1000B' means change + the tape after writing 1000 KiB of data. */ + overflow = bkm_scale (&tmp, 1024); + break; + + case 'c': + overflow = LONGINT_OK; + break; + + case 'E': /* exa or exbi */ + overflow = bkm_scale_by_power (&tmp, xbase, 6); + break; + + case 'G': /* giga or gibi */ + case 'g': /* 'g' is undocumented; for compatibility only */ + overflow = bkm_scale_by_power (&tmp, xbase, 3); + break; + + case 'k': /* kilo */ + case 'K': /* kibi */ + overflow = bkm_scale_by_power (&tmp, xbase, 1); + break; + + case 'M': /* mega or mebi */ + case 'm': /* 'm' is undocumented; for compatibility only */ + overflow = bkm_scale_by_power (&tmp, xbase, 2); + break; + + case 'P': /* peta or pebi */ + overflow = bkm_scale_by_power (&tmp, xbase, 5); + break; + + case 'Q': /* quetta or 2**100 */ + overflow = bkm_scale_by_power (&tmp, xbase, 10); + break; + + case 'R': /* ronna or 2**90 */ + overflow = bkm_scale_by_power (&tmp, xbase, 9); + break; + + case 'T': /* tera or tebi */ + case 't': /* 't' is undocumented; for compatibility only */ + overflow = bkm_scale_by_power (&tmp, xbase, 4); + break; + + case 'w': + overflow = bkm_scale (&tmp, 2); + break; + + case 'Y': /* yotta or 2**80 */ + overflow = bkm_scale_by_power (&tmp, xbase, 8); + break; + + case 'Z': /* zetta or 2**70 */ + overflow = bkm_scale_by_power (&tmp, xbase, 7); + break; + + default: + *val = tmp; + return err | LONGINT_INVALID_SUFFIX_CHAR; + } + + err |= overflow; + *p += suffixes; + if (**p) + err |= LONGINT_INVALID_SUFFIX_CHAR; + } + + *val = tmp; + return err; +} diff --git a/jni/parted/libgnulib/lib/xstrtoll.c b/jni/parted/libgnulib/lib/xstrtoll.c new file mode 100755 index 0000000..aff6064 --- /dev/null +++ b/jni/parted/libgnulib/lib/xstrtoll.c @@ -0,0 +1,23 @@ +/* Convert string to 'long long', with error checking. + + Copyright (C) 2011-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#define __strtol strtoll +#define __strtol_t long long int +#define __xstrtol xstrtoll +#define STRTOL_T_MINIMUM LLONG_MIN +#define STRTOL_T_MAXIMUM LLONG_MAX +#include "xstrtol.c" diff --git a/jni/parted/libgnulib/lib/xstrtoul.c b/jni/parted/libgnulib/lib/xstrtoul.c new file mode 100755 index 0000000..6162af4 --- /dev/null +++ b/jni/parted/libgnulib/lib/xstrtoul.c @@ -0,0 +1,23 @@ +/* Convert string to 'unsigned long', with error checking. + + Copyright (C) 1994-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#define __strtol strtoul +#define __strtol_t unsigned long int +#define __xstrtol xstrtoul +#define STRTOL_T_MINIMUM 0 +#define STRTOL_T_MAXIMUM ULONG_MAX +#include "xstrtol.c" diff --git a/jni/parted/libgnulib/lib/xstrtoull.c b/jni/parted/libgnulib/lib/xstrtoull.c new file mode 100755 index 0000000..c82d322 --- /dev/null +++ b/jni/parted/libgnulib/lib/xstrtoull.c @@ -0,0 +1,23 @@ +/* Convert string to 'unsigned long long', with error checking. + + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#define __strtol strtoull +#define __strtol_t unsigned long long int +#define __xstrtol xstrtoull +#define STRTOL_T_MINIMUM 0 +#define STRTOL_T_MAXIMUM ULLONG_MAX +#include "xstrtol.c" diff --git a/jni/parted/libiconv/Android.mk b/jni/parted/libiconv/Android.mk new file mode 100755 index 0000000..edf72c7 --- /dev/null +++ b/jni/parted/libiconv/Android.mk @@ -0,0 +1,44 @@ +# By YZBruh + +# Copyright 2024 Partition Manager +# +# 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. + +######## +# 3.0.2 +######## + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libiconv +LOCAL_SRC_FILES := \ + $(LOCAL_PATH)/lib/iconv.c \ + $(LOCAL_PATH)/lib/relocatable.c +LOCAL_C_INCLUDES := \ + $(LOCAL_PATH)/../../../../include/libiconv \ + $(LOCAL_PATH)/lib \ + $(LOCAL_PATH)/srclib +LOCAL_CFLAGS := \ + -Wall \ + -Wextra \ + -Wno-sign-compare \ + -Wno-unused-const-variable \ + -Wno-unused-parameter \ + -Wno-unused-function \ + -Wno-unused-but-set-variable \ + -Wno-missing-field-initializers \ + -fPIC + +include $(BUILD_STATIC_LIBRARY) \ No newline at end of file diff --git a/jni/parted/libiconv/Makefile b/jni/parted/libiconv/Makefile new file mode 100755 index 0000000..40e1048 --- /dev/null +++ b/jni/parted/libiconv/Makefile @@ -0,0 +1,107 @@ +# By YZBruh + +# Copyright 2024 Partition Manager +# +# 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. + +##### +# sub-make for building libiconv and libicrt (built-in libs) +##### + +# Include required files +include ../../../build/config/env.mk +ifeq ($(INC_OLDENV),true) +include ../../../build/config/oldenv.mk +endif + +E := @ echo +INCLUDE_DIRS := \ + $(CURDIR)/../../../include/libiconv \ + $(CURDIR)/lib \ + $(CURDIR)/srclib +CFLAGS := \ + -Wall \ + -Wextra \ + -Wno-sign-compare \ + -Wno-unused-const-variable \ + -Wno-unused-parameter \ + -Wno-unused-function \ + -Wno-unused-but-set-variable \ + -Wno-missing-field-initializers \ + -fPIC \ + $(foreach dir,$(INCLUDE_DIRS),$(shell echo "-I$(dir)")) +AR_FLAGS := rcs +OUT := $(realpath ../../../out/parted) +LIB := $(CURDIR)/lib +SRC := $(CURDIR)/src +SRCLIB := $(CURDIR)/srclib +LIBICRT := $(CURDIR)/icrt + +LIBICRT_SRCS := \ + $(LIBICRT)/allocator.c \ + $(LIBICRT)/areadlink.c \ + $(LIBICRT)/binary-io.c \ + $(LIBICRT)/careadlinkat.c \ + $(LIBICRT)/fd-hook.c \ + $(LIBICRT)/getprogname.c \ + $(LIBICRT)/unistd.c \ + $(LIBICRT)/xreadlink.c + +LIBICRT_OBJS := $(LIBICRT_SRCS:.c=.o) + +LIBICONV_SRCS := \ + $(LIB)/iconv.c \ + $(LIB)/relocatable.c + +LIBICONV_OBJS := $(LIBICONV_SRCS:.c=.o) + +PROGRESS_LIST := \ + outctrl \ + $(LIBICRT_OBJS) \ + libicrt_ar \ + print_iconv \ + $(LIBICONV_OBJS) \ + libiconv_ar + +.PHONY: all +all: $(PROGRESS_LIST) + +.PHONY: clean +clean: + @ rm -rf $(LIBICONV_OBJS) $(LIBICRT_OBJS) $(OUT)/libicrt.a $(OUT)/libiconv.a + +outctrl: + @ if [ ! -d $(OUT) ]; then mkdir -p $(OUT); fi + +$(LIBICRT)/%.o: $(LIBICRT)/%.c + $(E) " CC libiconv/icrt/`basename $@`" + @ $(CC) -c $(CFLAGS) -o $@ $^ || exit 1 + +$(LIB)/%.o: $(LIB)/%.c + $(E) " CC libiconv/lib/`basename $@`" + @ $(CC) -c $(CFLAGS) -o $@ $^ || exit 1 + +$(SRC)/%.o: $(SRC)/%.c + $(E) " CC libiconv/src/`basename $@`" + @ $(CC) -c $(CFLAGS) -o $@ $^ || exit 1 + +libicrt_ar: $(LIBICRT_OBJS) + $(E) " AR out/parted/libicrt.a" + @ $(AR) $(AR_FLAGS) $(OUT)/libicrt.a $(LIBICRT_OBJS) + +libiconv_ar: $(LIBICONV_OBJS) + $(E) " AR out/parted/libiconv.a" + @ $(AR) $(AR_FLAGS) $(OUT)/libiconv.a $(LIBICONV_OBJS) + +print_iconv: + $(E) " ----------- libiconv ----------- " diff --git a/jni/parted/libiconv/icrt/Android.mk b/jni/parted/libiconv/icrt/Android.mk new file mode 100755 index 0000000..f6252f8 --- /dev/null +++ b/jni/parted/libiconv/icrt/Android.mk @@ -0,0 +1,49 @@ +# By YZBruh + +# Copyright 2024 Partition Manager +# +# 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. + +######## +# 3.0.2 +######## + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libicrt +LOCAL_SRC_FILES := \ + $(LOCAL_PATH)/allocator.c \ + $(LOCAL_PATH)/areadlink.c \ + $(LOCAL_PATH)/binary-io.c \ + $(LOCAL_PATH)/careadlinkat.c \ + $(LOCAL_PATH)/fd-hook.c \ + $(LOCAL_PATH)/getprogname.c \ + $(LOCAL_PATH)/unistd.c \ + $(LOCAL_PATH)/xreadlink.c +LOCAL_C_INCLUDES := \ + $(LOCAL_PATH)/../lib \ + $(LOCAL_PATH)/../srclib +LOCAL_CFLAGS := \ + -Wall \ + -Wextra \ + -Wno-sign-compare \ + -Wno-unused-const-variable \ + -Wno-unused-parameter \ + -Wno-unused-function \ + -Wno-unused-but-set-variable \ + -Wno-missing-field-initializers \ + -fPIC + +include $(BUILD_STATIC_LIBRARY) \ No newline at end of file diff --git a/jni/parted/libiconv/icrt/allocator.c b/jni/parted/libiconv/icrt/allocator.c new file mode 100755 index 0000000..42c8918 --- /dev/null +++ b/jni/parted/libiconv/icrt/allocator.c @@ -0,0 +1,22 @@ +/* Memory allocators such as malloc+free. + + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include +#include "allocator.h" +#include +struct allocator const stdlib_allocator = { malloc, realloc, free, NULL }; diff --git a/jni/parted/libiconv/icrt/areadlink.c b/jni/parted/libiconv/icrt/areadlink.c new file mode 100755 index 0000000..0bff4a9 --- /dev/null +++ b/jni/parted/libiconv/icrt/areadlink.c @@ -0,0 +1,56 @@ +/* areadlink.c -- readlink wrapper to return the link name in malloc'd storage + Unlike xreadlink and xreadlink_with_size, don't ever call exit. + + Copyright (C) 2001, 2003-2007, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering + and Bruno Haible . */ + +#include + +/* Specification. */ +#include "areadlink.h" + +#include "careadlinkat.h" + +#include +#include + +/* Get the symbolic link value of FILENAME and put it into BUFFER, with + size BUFFER_SIZE. This function acts like readlink but has + readlinkat's signature. */ +static ssize_t +careadlinkatcwd (int fd, char const *filename, char *buffer, + size_t buffer_size) +{ + /* FD must be AT_FDCWD here, otherwise the caller is using this + function in contexts it was not meant for. */ + if (fd != AT_FDCWD) + abort (); + return readlink (filename, buffer, buffer_size); +} + +/* Call readlink to get the symbolic link value of FILENAME. + Return a pointer to that NUL-terminated string in malloc'd storage. + If readlink fails, return NULL and set errno. + If allocation fails, or if the link value is longer than SIZE_MAX :-), + return NULL and set errno to ENOMEM. */ + +char * +areadlink (char const *filename) +{ + return careadlinkat (AT_FDCWD, filename, NULL, 0, NULL, careadlinkatcwd); +} diff --git a/jni/parted/libiconv/icrt/binary-io.c b/jni/parted/libiconv/icrt/binary-io.c new file mode 100755 index 0000000..ea407fd --- /dev/null +++ b/jni/parted/libiconv/icrt/binary-io.c @@ -0,0 +1,39 @@ +/* Binary mode I/O. + Copyright 2017-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#define BINARY_IO_INLINE _GL_EXTERN_INLINE +#include "binary-io.h" + +#if defined __DJGPP__ || defined __EMX__ +# include + +int +set_binary_mode (int fd, int mode) +{ + if (isatty (fd)) + /* If FD refers to a console (not a pipe, not a regular file), + O_TEXT is the only reasonable mode, both on input and on output. + Silently ignore the request. If we were to return -1 here, + all programs that use xset_binary_mode would fail when run + with console input or console output. */ + return O_TEXT; + else + return __gl_setmode (fd, mode); +} + +#endif diff --git a/jni/parted/libiconv/icrt/careadlinkat.c b/jni/parted/libiconv/icrt/careadlinkat.c new file mode 100755 index 0000000..6ddc35f --- /dev/null +++ b/jni/parted/libiconv/icrt/careadlinkat.c @@ -0,0 +1,184 @@ +/* Read symbolic links into a buffer without size limitation, relative to fd. + + Copyright (C) 2001, 2003-2004, 2007, 2009-2022 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#include + +#include "careadlinkat.h" + +#include "idx.h" +#include "minmax.h" + +#include +#include +#include +#include + +/* Define this independently so that stdint.h is not a prerequisite. */ +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +#ifndef SSIZE_MAX +# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) +#endif + +#include "allocator.h" + +enum { STACK_BUF_SIZE = 1024 }; + +/* Act like careadlinkat (see below), with an additional argument + STACK_BUF that can be used as temporary storage. + + If GCC_LINT is defined, do not inline this function with GCC 10.1 + and later, to avoid creating a pointer to the stack that GCC + -Wreturn-local-addr incorrectly complains about. See: + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644 + Although the noinline attribute can hurt performance a bit, no better way + to pacify GCC is known; even an explicit #pragma does not pacify GCC. + When the GCC bug is fixed this workaround should be limited to the + broken GCC versions. */ +#if _GL_GNUC_PREREQ (10, 1) +# if defined GCC_LINT || defined lint +__attribute__ ((__noinline__)) +# elif __OPTIMIZE__ && !__NO_INLINE__ +# define GCC_BOGUS_WRETURN_LOCAL_ADDR +# endif +#endif +static char * +readlink_stk (int fd, char const *filename, + char *buffer, size_t buffer_size, + struct allocator const *alloc, + ssize_t (*preadlinkat) (int, char const *, char *, size_t), + char stack_buf[STACK_BUF_SIZE]) +{ + if (! alloc) + alloc = &stdlib_allocator; + + if (!buffer) + { + buffer = stack_buf; + buffer_size = STACK_BUF_SIZE; + } + + char *buf = buffer; + idx_t buf_size_max = MIN (IDX_MAX, MIN (SSIZE_MAX, SIZE_MAX)); + idx_t buf_size = MIN (buffer_size, buf_size_max); + + while (buf) + { + /* Attempt to read the link into the current buffer. */ + idx_t link_length = preadlinkat (fd, filename, buf, buf_size); + if (link_length < 0) + { + if (buf != buffer) + { + int readlinkat_errno = errno; + alloc->free (buf); + errno = readlinkat_errno; + } + return NULL; + } + + idx_t link_size = link_length; + + if (link_size < buf_size) + { + buf[link_size++] = '\0'; + + if (buf == stack_buf) + { + char *b = alloc->allocate (link_size); + buf_size = link_size; + if (! b) + break; + return memcpy (b, buf, link_size); + } + + if (link_size < buf_size && buf != buffer && alloc->reallocate) + { + /* Shrink BUF before returning it. */ + char *b = alloc->reallocate (buf, link_size); + if (b) + return b; + } + + return buf; + } + + if (buf != buffer) + alloc->free (buf); + + if (buf_size_max / 2 <= buf_size) + { + errno = ENAMETOOLONG; + return NULL; + } + + buf_size = 2 * buf_size + 1; + buf = alloc->allocate (buf_size); + } + + if (alloc->die) + alloc->die (buf_size); + errno = ENOMEM; + return NULL; +} + + +/* Assuming the current directory is FD, get the symbolic link value + of FILENAME as a null-terminated string and put it into a buffer. + If FD is AT_FDCWD, FILENAME is interpreted relative to the current + working directory, as in openat. + + If the link is small enough to fit into BUFFER put it there. + BUFFER's size is BUFFER_SIZE, and BUFFER can be null + if BUFFER_SIZE is zero. + + If the link is not small, put it into a dynamically allocated + buffer managed by ALLOC. It is the caller's responsibility to free + the returned value if it is nonnull and is not BUFFER. A null + ALLOC stands for the standard allocator. + + The PREADLINKAT function specifies how to read links. It operates + like POSIX readlinkat() + + but can assume that its first argument is the same as FD. + + If successful, return the buffer address; otherwise return NULL and + set errno. */ + +char * +careadlinkat (int fd, char const *filename, + char *buffer, size_t buffer_size, + struct allocator const *alloc, + ssize_t (*preadlinkat) (int, char const *, char *, size_t)) +{ + /* Allocate the initial buffer on the stack. This way, in the + common case of a symlink of small size, we get away with a + single small malloc instead of a big malloc followed by a + shrinking realloc. */ + #ifdef GCC_BOGUS_WRETURN_LOCAL_ADDR + #warning "GCC might issue a bogus -Wreturn-local-addr warning here." + #warning "See ." + #endif + char stack_buf[STACK_BUF_SIZE]; + return readlink_stk (fd, filename, buffer, buffer_size, alloc, + preadlinkat, stack_buf); +} diff --git a/jni/parted/libiconv/icrt/fd-hook.c b/jni/parted/libiconv/icrt/fd-hook.c new file mode 100755 index 0000000..64a7a80 --- /dev/null +++ b/jni/parted/libiconv/icrt/fd-hook.c @@ -0,0 +1,116 @@ +/* Hook for making file descriptor functions close(), ioctl() extensible. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "fd-hook.h" + +#include + +/* Currently, this entire code is only needed for the handling of sockets + on native Windows platforms. */ +#if WINDOWS_SOCKETS + +/* The first and last link in the doubly linked list. + Initially the list is empty. */ +static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL }; + +int +execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, + int fd) +{ + if (remaining_list == &anchor) + /* End of list reached. */ + return primary (fd); + else + return remaining_list->private_close_fn (remaining_list->private_next, + primary, fd); +} + +int +execute_all_close_hooks (gl_close_fn primary, int fd) +{ + return execute_close_hooks (anchor.private_next, primary, fd); +} + +int +execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, + int fd, int request, void *arg) +{ + if (remaining_list == &anchor) + /* End of list reached. */ + return primary (fd, request, arg); + else + return remaining_list->private_ioctl_fn (remaining_list->private_next, + primary, fd, request, arg); +} + +int +execute_all_ioctl_hooks (gl_ioctl_fn primary, + int fd, int request, void *arg) +{ + return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg); +} + +void +register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link) +{ + if (close_hook == NULL) + close_hook = execute_close_hooks; + if (ioctl_hook == NULL) + ioctl_hook = execute_ioctl_hooks; + + if (link->private_next == NULL && link->private_prev == NULL) + { + /* Add the link to the doubly linked list. */ + link->private_next = anchor.private_next; + link->private_prev = &anchor; + link->private_close_fn = close_hook; + link->private_ioctl_fn = ioctl_hook; + anchor.private_next->private_prev = link; + anchor.private_next = link; + } + else + { + /* The link is already in use. */ + if (link->private_close_fn != close_hook + || link->private_ioctl_fn != ioctl_hook) + abort (); + } +} + +void +unregister_fd_hook (struct fd_hook *link) +{ + struct fd_hook *next = link->private_next; + struct fd_hook *prev = link->private_prev; + + if (next != NULL && prev != NULL) + { + /* The link is in use. Remove it from the doubly linked list. */ + prev->private_next = next; + next->private_prev = prev; + /* Clear the link, to mark it unused. */ + link->private_next = NULL; + link->private_prev = NULL; + link->private_close_fn = NULL; + link->private_ioctl_fn = NULL; + } +} + +#endif diff --git a/jni/parted/libiconv/icrt/getprogname.c b/jni/parted/libiconv/icrt/getprogname.c new file mode 100755 index 0000000..62a4800 --- /dev/null +++ b/jni/parted/libiconv/icrt/getprogname.c @@ -0,0 +1,302 @@ +/* Program name management. + Copyright (C) 2016-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "getprogname.h" + +#include /* get program_invocation_name declaration */ +#include /* get __argv declaration */ + +#ifdef _AIX +# include +# include +# include +#endif + +#ifdef __MVS__ +# ifndef _OPEN_SYS +# define _OPEN_SYS +# endif +# include +# include +#endif + +#ifdef __hpux +# include +# include +# include +# include +#endif + +#if defined __sgi || defined __osf__ +# include +# include +# include +# include +# include +#endif + +#if defined __SCO_VERSION__ || defined __sysv5__ +# include +# include +# include +#endif + +#include "basename-lgpl.h" + +#ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ +char const * +getprogname (void) +{ +# if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ + /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ + return program_invocation_short_name; +# elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ + /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ + return last_component (program_invocation_name); +# elif HAVE_GETEXECNAME /* Solaris */ + /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ + const char *p = getexecname (); + if (!p) + p = "?"; + return last_component (p); +# elif HAVE_DECL___ARGV /* mingw, MSVC */ + /* https://docs.microsoft.com/en-us/cpp/c-runtime-library/argc-argv-wargv */ + const char *p = __argv && __argv[0] ? __argv[0] : "?"; + return last_component (p); +# elif HAVE_VAR___PROGNAME /* OpenBSD, Android, QNX */ + /* https://man.openbsd.org/style.9 */ + /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ + /* Be careful to declare this only when we absolutely need it + (OpenBSD 5.1), rather than when it's available. Otherwise, + its mere declaration makes program_invocation_short_name + malfunction (have zero length) with Fedora 25's glibc. */ + extern char *__progname; + const char *p = __progname; +# if defined __ANDROID__ + return last_component (p); +# else + return p && p[0] ? p : "?"; +# endif +# elif _AIX /* AIX */ + /* Idea by Bastien ROUCARIÈS, + https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html + Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm + */ + static char *p; + static int first = 1; + if (first) + { + first = 0; + pid_t pid = getpid (); + struct procentry64 procs; + p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) + ? strdup (procs.pi_comm) + : NULL); + if (!p) + p = "?"; + } + return p; +# elif defined __hpux + static char *p; + static int first = 1; + if (first) + { + first = 0; + pid_t pid = getpid (); + struct pst_status status; + if (pstat_getproc (&status, sizeof status, 0, pid) > 0) + { + char *ucomm = status.pst_ucomm; + char *cmd = status.pst_cmd; + if (strlen (ucomm) < PST_UCOMMLEN - 1) + p = ucomm; + else + { + /* ucomm is truncated to length PST_UCOMMLEN - 1. + Look at cmd instead. */ + char *space = strchr (cmd, ' '); + if (space != NULL) + *space = '\0'; + p = strrchr (cmd, '/'); + if (p != NULL) + p++; + else + p = cmd; + if (strlen (p) > PST_UCOMMLEN - 1 + && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) + /* p is less truncated than ucomm. */ + ; + else + p = ucomm; + } + p = strdup (p); + } + else + { +# if !defined __LP64__ + /* Support for 32-bit programs running in 64-bit HP-UX. + The documented way to do this is to use the same source code + as above, but in a compilation unit where '#define _PSTAT64 1' + is in effect. I prefer a single compilation unit; the struct + size and the offsets are not going to change. */ + char status64[1216]; + if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) + { + char *ucomm = status64 + 288; + char *cmd = status64 + 168; + if (strlen (ucomm) < PST_UCOMMLEN - 1) + p = ucomm; + else + { + /* ucomm is truncated to length PST_UCOMMLEN - 1. + Look at cmd instead. */ + char *space = strchr (cmd, ' '); + if (space != NULL) + *space = '\0'; + p = strrchr (cmd, '/'); + if (p != NULL) + p++; + else + p = cmd; + if (strlen (p) > PST_UCOMMLEN - 1 + && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) + /* p is less truncated than ucomm. */ + ; + else + p = ucomm; + } + p = strdup (p); + } + else +# endif + p = NULL; + } + if (!p) + p = "?"; + } + return p; +# elif __MVS__ /* z/OS */ + /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ + static char *p = "?"; + static int first = 1; + if (first) + { + pid_t pid = getpid (); + int token; + W_PSPROC buf; + first = 0; + memset (&buf, 0, sizeof(buf)); + buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); + buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); + buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); + if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) + { + for (token = 0; token >= 0; + token = w_getpsent (token, &buf, sizeof(buf))) + { + if (token > 0 && buf.ps_pid == pid) + { + char *s = strdup (last_component (buf.ps_pathptr)); + if (s) + p = s; + break; + } + } + } + free (buf.ps_cmdptr); + free (buf.ps_conttyptr); + free (buf.ps_pathptr); + } + return p; +# elif defined __sgi || defined __osf__ /* IRIX or Tru64 */ + char filename[50]; + int fd; + + # if defined __sgi + sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); + # else + sprintf (filename, "/proc/%d", (int) getpid ()); + # endif + fd = open (filename, O_RDONLY | O_CLOEXEC); + if (0 <= fd) + { + prpsinfo_t buf; + int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); + close (fd); + if (ioctl_ok) + { + char *name = buf.pr_fname; + size_t namesize = sizeof buf.pr_fname; + /* It may not be NUL-terminated. */ + char *namenul = memchr (name, '\0', namesize); + size_t namelen = namenul ? namenul - name : namesize; + char *namecopy = malloc (namelen + 1); + if (namecopy) + { + namecopy[namelen] = '\0'; + return memcpy (namecopy, name, namelen); + } + } + } + return NULL; +# elif defined __SCO_VERSION__ || defined __sysv5__ /* SCO OpenServer6/UnixWare */ + char buf[80]; + int fd; + sprintf (buf, "/proc/%d/cmdline", getpid()); + fd = open (buf, O_RDONLY); + if (0 <= fd) + { + size_t n = read (fd, buf, 79); + if (n > 0) + { + buf[n] = '\0'; /* Guarantee null-termination */ + char *progname; + progname = strrchr (buf, '/'); + if (progname) + { + progname = progname + 1; /* Skip the '/' */ + } + else + { + progname = buf; + } + char *ret; + ret = malloc (strlen (progname) + 1); + if (ret) + { + strcpy (ret, progname); + return ret; + } + } + close (fd); + } + return "?"; +# else +# error "getprogname module not ported to this OS" +# endif +} + +#endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/jni/parted/libiconv/icrt/unistd.c b/jni/parted/libiconv/icrt/unistd.c new file mode 100755 index 0000000..95978e6 --- /dev/null +++ b/jni/parted/libiconv/icrt/unistd.c @@ -0,0 +1,22 @@ +/* Inline functions for . + + Copyright (C) 2012-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE +#include "unistd.h" +typedef int dummy; diff --git a/jni/parted/libiconv/icrt/xreadlink.c b/jni/parted/libiconv/icrt/xreadlink.c new file mode 100755 index 0000000..b496a52 --- /dev/null +++ b/jni/parted/libiconv/icrt/xreadlink.c @@ -0,0 +1,44 @@ +/* xreadlink.c -- readlink wrapper to return the link name in malloc'd storage + + Copyright (C) 2001, 2003-2007, 2009-2022 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering + and Bruno Haible . */ + +#include + +/* Specification. */ +#include "xreadlink.h" + +#include + +#include "areadlink.h" +#include "xalloc.h" + +/* Call readlink to get the symbolic link value of FILENAME. + Return a pointer to that NUL-terminated string in malloc'd storage. + If readlink fails, return NULL and set errno. + If realloc fails, or if the link value is longer than SIZE_MAX :-), + give a diagnostic and exit. */ + +char * +xreadlink (char const *filename) +{ + char *result = areadlink (filename); + if (result == NULL && errno == ENOMEM) + xalloc_die (); + return result; +} diff --git a/jni/parted/libiconv/lib/aliases.h b/jni/parted/libiconv/lib/aliases.h new file mode 100755 index 0000000..6d3039c --- /dev/null +++ b/jni/parted/libiconv/lib/aliases.h @@ -0,0 +1,1777 @@ +/* ANSI-C code produced by gperf version 3.2 */ +/* Command-line: gperf -m 10 lib/aliases.gperf */ +/* Computed positions: -k'1,3-11,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "lib/aliases.gperf" +struct alias { int name; unsigned int encoding_index; }; + +#define TOTAL_KEYWORDS 349 +#define MIN_WORD_LENGTH 2 +#define MAX_WORD_LENGTH 45 +#define MIN_HASH_VALUE 15 +#define MAX_HASH_VALUE 921 +/* maximum key range = 907, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +aliases_hash (register const char *str, register size_t len) +{ + static const unsigned short asso_values[] = + { + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 5, 6, 922, 97, 7, + 33, 102, 15, 17, 5, 173, 23, 25, 193, 922, + 922, 922, 922, 922, 922, 168, 159, 11, 32, 25, + 159, 13, 70, 6, 308, 186, 8, 132, 7, 6, + 62, 922, 5, 8, 30, 174, 163, 180, 79, 28, + 6, 922, 922, 922, 922, 6, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922 + }; + register unsigned int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[10]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 10: + hval += asso_values[(unsigned char)str[9]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 9: + hval += asso_values[(unsigned char)str[8]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 8: + hval += asso_values[(unsigned char)str[7]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 7: + hval += asso_values[(unsigned char)str[6]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 6: + hval += asso_values[(unsigned char)str[5]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 5: + hval += asso_values[(unsigned char)str[4]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 4: + hval += asso_values[(unsigned char)str[3]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 3: + hval += asso_values[(unsigned char)str[2]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 2: + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str15[sizeof("L6")]; + char stringpool_str17[sizeof("L1")]; + char stringpool_str20[sizeof("CN")]; + char stringpool_str25[sizeof("L4")]; + char stringpool_str27[sizeof("L5")]; + char stringpool_str30[sizeof("R8")]; + char stringpool_str33[sizeof("L8")]; + char stringpool_str34[sizeof("SJIS")]; + char stringpool_str36[sizeof("866")]; + char stringpool_str43[sizeof("L2")]; + char stringpool_str51[sizeof("ISO-IR-6")]; + char stringpool_str54[sizeof("CP866")]; + char stringpool_str64[sizeof("C99")]; + char stringpool_str65[sizeof("ISO-IR-166")]; + char stringpool_str66[sizeof("EUCCN")]; + char stringpool_str67[sizeof("LATIN6")]; + char stringpool_str70[sizeof("CP154")]; + char stringpool_str71[sizeof("LATIN1")]; + char stringpool_str72[sizeof("EUC-CN")]; + char stringpool_str74[sizeof("CYRILLIC")]; + char stringpool_str76[sizeof("ISO646-CN")]; + char stringpool_str78[sizeof("HZ")]; + char stringpool_str79[sizeof("ISO-IR-14")]; + char stringpool_str84[sizeof("CP1256")]; + char stringpool_str87[sizeof("LATIN4")]; + char stringpool_str88[sizeof("CP1251")]; + char stringpool_str89[sizeof("ISO-IR-165")]; + char stringpool_str91[sizeof("LATIN5")]; + char stringpool_str92[sizeof("862")]; + char stringpool_str93[sizeof("ISO-IR-126")]; + char stringpool_str95[sizeof("ISO-IR-144")]; + char stringpool_str96[sizeof("CP819")]; + char stringpool_str103[sizeof("LATIN8")]; + char stringpool_str104[sizeof("CP1254")]; + char stringpool_str105[sizeof("ISO-IR-58")]; + char stringpool_str106[sizeof("CP949")]; + char stringpool_str108[sizeof("CP1255")]; + char stringpool_str110[sizeof("CP862")]; + char stringpool_str111[sizeof("ISO-IR-148")]; + char stringpool_str112[sizeof("L3")]; + char stringpool_str113[sizeof("LATIN-9")]; + char stringpool_str114[sizeof("CHINESE")]; + char stringpool_str115[sizeof("ISO-IR-149")]; + char stringpool_str117[sizeof("ISO-IR-159")]; + char stringpool_str119[sizeof("ISO-IR-226")]; + char stringpool_str120[sizeof("CP1258")]; + char stringpool_str121[sizeof("PT154")]; + char stringpool_str123[sizeof("LATIN2")]; + char stringpool_str124[sizeof("ISO8859-6")]; + char stringpool_str125[sizeof("ISO-IR-199")]; + char stringpool_str128[sizeof("ISO8859-1")]; + char stringpool_str129[sizeof("ISO-CELTIC")]; + char stringpool_str130[sizeof("ISO-8859-6")]; + char stringpool_str131[sizeof("ISO_8859-6")]; + char stringpool_str132[sizeof("ISO8859-16")]; + char stringpool_str134[sizeof("ISO-8859-1")]; + char stringpool_str135[sizeof("ISO_8859-1")]; + char stringpool_str136[sizeof("ISO8859-11")]; + char stringpool_str138[sizeof("ISO-8859-16")]; + char stringpool_str139[sizeof("ISO_8859-16")]; + char stringpool_str140[sizeof("CP1252")]; + char stringpool_str142[sizeof("ISO-8859-11")]; + char stringpool_str143[sizeof("ISO_8859-11")]; + char stringpool_str144[sizeof("ISO8859-4")]; + char stringpool_str145[sizeof("CP1361")]; + char stringpool_str146[sizeof("ISO_8859-16:2001")]; + char stringpool_str147[sizeof("CP1131")]; + char stringpool_str148[sizeof("ISO8859-5")]; + char stringpool_str150[sizeof("ISO-8859-4")]; + char stringpool_str151[sizeof("ISO_8859-4")]; + char stringpool_str152[sizeof("ISO8859-14")]; + char stringpool_str153[sizeof("CP936")]; + char stringpool_str154[sizeof("ISO-8859-5")]; + char stringpool_str155[sizeof("ISO_8859-5")]; + char stringpool_str156[sizeof("ISO8859-15")]; + char stringpool_str157[sizeof("MAC")]; + char stringpool_str158[sizeof("ISO-8859-14")]; + char stringpool_str159[sizeof("ISO_8859-14")]; + char stringpool_str160[sizeof("ISO8859-8")]; + char stringpool_str161[sizeof("ISO-IR-101")]; + char stringpool_str162[sizeof("ISO-8859-15")]; + char stringpool_str163[sizeof("ISO_8859-15")]; + char stringpool_str164[sizeof("ISO8859-9")]; + char stringpool_str166[sizeof("ISO-8859-8")]; + char stringpool_str167[sizeof("ISO_8859-8")]; + char stringpool_str170[sizeof("ISO-8859-9")]; + char stringpool_str171[sizeof("ISO_8859-9")]; + char stringpool_str172[sizeof("ISO_8859-14:1998")]; + char stringpool_str174[sizeof("ISO_8859-15:1998")]; + char stringpool_str176[sizeof("RK1048")]; + char stringpool_str179[sizeof("ELOT_928")]; + char stringpool_str180[sizeof("ISO8859-2")]; + char stringpool_str182[sizeof("IBM866")]; + char stringpool_str183[sizeof("L7")]; + char stringpool_str184[sizeof("US")]; + char stringpool_str186[sizeof("ISO-8859-2")]; + char stringpool_str187[sizeof("ISO_8859-2")]; + char stringpool_str190[sizeof("X0212")]; + char stringpool_str193[sizeof("CHAR")]; + char stringpool_str196[sizeof("PTCP154")]; + char stringpool_str197[sizeof("ISO-IR-109")]; + char stringpool_str198[sizeof("ISO-IR-138")]; + char stringpool_str199[sizeof("UHC")]; + char stringpool_str202[sizeof("ASCII")]; + char stringpool_str204[sizeof("MS-CYRL")]; + char stringpool_str205[sizeof("L10")]; + char stringpool_str206[sizeof("VISCII")]; + char stringpool_str209[sizeof("CP932")]; + char stringpool_str210[sizeof("BIG5")]; + char stringpool_str211[sizeof("TCVN")]; + char stringpool_str212[sizeof("CP50221")]; + char stringpool_str216[sizeof("BIG-5")]; + char stringpool_str217[sizeof("MS-EE")]; + char stringpool_str220[sizeof("850")]; + char stringpool_str222[sizeof("UCS-4")]; + char stringpool_str223[sizeof("CSASCII")]; + char stringpool_str224[sizeof("IBM819")]; + char stringpool_str225[sizeof("CSVISCII")]; + char stringpool_str227[sizeof("GB2312")]; + char stringpool_str228[sizeof("X0201")]; + char stringpool_str229[sizeof("CSBIG5")]; + char stringpool_str235[sizeof("CN-BIG5")]; + char stringpool_str236[sizeof("KOI8-R")]; + char stringpool_str237[sizeof("EUCKR")]; + char stringpool_str238[sizeof("IBM862")]; + char stringpool_str239[sizeof("CSPTCP154")]; + char stringpool_str240[sizeof("CSUCS4")]; + char stringpool_str241[sizeof("ISO646-US")]; + char stringpool_str242[sizeof("CP874")]; + char stringpool_str243[sizeof("EUC-KR")]; + char stringpool_str244[sizeof("VISCII1.1-1")]; + char stringpool_str246[sizeof("ISO_646.IRV:1991")]; + char stringpool_str248[sizeof("MACCYRILLIC")]; + char stringpool_str249[sizeof("CSKOI8R")]; + char stringpool_str250[sizeof("CP850")]; + char stringpool_str251[sizeof("ISO-IR-110")]; + char stringpool_str252[sizeof("CP950")]; + char stringpool_str254[sizeof("ISO-2022-CN")]; + char stringpool_str255[sizeof("CN-GB-ISOIR165")]; + char stringpool_str257[sizeof("CYRILLIC-ASIAN")]; + char stringpool_str258[sizeof("UCS-2")]; + char stringpool_str259[sizeof("LATIN10")]; + char stringpool_str260[sizeof("X0208")]; + char stringpool_str261[sizeof("LATIN3")]; + char stringpool_str263[sizeof("CSISO2022CN")]; + char stringpool_str264[sizeof("ISO_8859-10:1992")]; + char stringpool_str267[sizeof("UCS-4LE")]; + char stringpool_str268[sizeof("CP1250")]; + char stringpool_str271[sizeof("CSISOLATIN6")]; + char stringpool_str273[sizeof("ISO-IR-179")]; + char stringpool_str274[sizeof("MS936")]; + char stringpool_str275[sizeof("CSISOLATIN1")]; + char stringpool_str276[sizeof("TIS620")]; + char stringpool_str278[sizeof("CP1253")]; + char stringpool_str281[sizeof("ISO-2022-CN-EXT")]; + char stringpool_str282[sizeof("TIS-620")]; + char stringpool_str285[sizeof("UCS-2LE")]; + char stringpool_str286[sizeof("KOI8-T")]; + char stringpool_str290[sizeof("CSISOLATINCYRILLIC")]; + char stringpool_str291[sizeof("CSISOLATIN4")]; + char stringpool_str295[sizeof("CSISOLATIN5")]; + char stringpool_str296[sizeof("UNICODE-1-1")]; + char stringpool_str301[sizeof("GREEK8")]; + char stringpool_str302[sizeof("UCS-4-INTERNAL")]; + char stringpool_str304[sizeof("CSUNICODE11")]; + char stringpool_str306[sizeof("CSUNICODE")]; + char stringpool_str307[sizeof("TIS620.2529-1")]; + char stringpool_str311[sizeof("NEXTSTEP")]; + char stringpool_str312[sizeof("GEORGIAN-PS")]; + char stringpool_str316[sizeof("ISO8859-10")]; + char stringpool_str318[sizeof("ISO8859-3")]; + char stringpool_str320[sizeof("UCS-2-INTERNAL")]; + char stringpool_str322[sizeof("ISO-8859-10")]; + char stringpool_str323[sizeof("ISO_8859-10")]; + char stringpool_str324[sizeof("ISO-8859-3")]; + char stringpool_str325[sizeof("ISO_8859-3")]; + char stringpool_str326[sizeof("ISO8859-13")]; + char stringpool_str327[sizeof("CSISOLATIN2")]; + char stringpool_str329[sizeof("GB_1988-80")]; + char stringpool_str332[sizeof("ISO-8859-13")]; + char stringpool_str333[sizeof("ISO_8859-13")]; + char stringpool_str337[sizeof("CP1133")]; + char stringpool_str339[sizeof("MS-ANSI")]; + char stringpool_str341[sizeof("ISO-IR-100")]; + char stringpool_str344[sizeof("KSC_5601")]; + char stringpool_str349[sizeof("MACINTOSH")]; + char stringpool_str352[sizeof("CN-GB")]; + char stringpool_str354[sizeof("CSIBM866")]; + char stringpool_str355[sizeof("ISO-10646-UCS-4")]; + char stringpool_str357[sizeof("ISO_8859-4:1988")]; + char stringpool_str359[sizeof("ISO_8859-5:1988")]; + char stringpool_str361[sizeof("UTF-16")]; + char stringpool_str363[sizeof("KZ-1048")]; + char stringpool_str364[sizeof("ROMAN8")]; + char stringpool_str365[sizeof("ISO_8859-8:1988")]; + char stringpool_str366[sizeof("UNICODELITTLE")]; + char stringpool_str369[sizeof("ISO_8859-9:1989")]; + char stringpool_str372[sizeof("JP")]; + char stringpool_str373[sizeof("ISO-10646-UCS-2")]; + char stringpool_str375[sizeof("MULELAO-1")]; + char stringpool_str376[sizeof("CSKZ1048")]; + char stringpool_str377[sizeof("ISO-IR-203")]; + char stringpool_str378[sizeof("IBM850")]; + char stringpool_str380[sizeof("TIS620-0")]; + char stringpool_str382[sizeof("ECMA-114")]; + char stringpool_str386[sizeof("KS_C_5601-1989")]; + char stringpool_str388[sizeof("GBK")]; + char stringpool_str389[sizeof("UTF-8")]; + char stringpool_str391[sizeof("ARMSCII-8")]; + char stringpool_str392[sizeof("US-ASCII")]; + char stringpool_str398[sizeof("ECMA-118")]; + char stringpool_str399[sizeof("CSGB2312")]; + char stringpool_str403[sizeof("LATIN7")]; + char stringpool_str404[sizeof("KOREAN")]; + char stringpool_str405[sizeof("ISO-IR-57")]; + char stringpool_str408[sizeof("MS-HEBR")]; + char stringpool_str409[sizeof("CSISO14JISC6220RO")]; + char stringpool_str411[sizeof("ISO-IR-87")]; + char stringpool_str413[sizeof("ISO-IR-157")]; + char stringpool_str416[sizeof("UTF-16LE")]; + char stringpool_str418[sizeof("UCS-4BE")]; + char stringpool_str420[sizeof("CP1257")]; + char stringpool_str421[sizeof("ANSI_X3.4-1986")]; + char stringpool_str424[sizeof("CSEUCKR")]; + char stringpool_str425[sizeof("ISO-2022-KR")]; + char stringpool_str426[sizeof("GB_2312-80")]; + char stringpool_str429[sizeof("ISO-IR-127")]; + char stringpool_str430[sizeof("MACTHAI")]; + char stringpool_str431[sizeof("EUCTW")]; + char stringpool_str433[sizeof("EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE")]; + char stringpool_str434[sizeof("CSISO2022KR")]; + char stringpool_str436[sizeof("UCS-2BE")]; + char stringpool_str437[sizeof("EUC-TW")]; + char stringpool_str439[sizeof("ANSI_X3.4-1968")]; + char stringpool_str440[sizeof("GREEK")]; + char stringpool_str442[sizeof("MACICELAND")]; + char stringpool_str443[sizeof("GB18030")]; + char stringpool_str444[sizeof("ISO_8859-3:1988")]; + char stringpool_str445[sizeof("CSISOLATINARABIC")]; + char stringpool_str446[sizeof("GEORGIAN-ACADEMY")]; + char stringpool_str448[sizeof("HP-ROMAN8")]; + char stringpool_str453[sizeof("TIS620.2533-1")]; + char stringpool_str455[sizeof("UNICODEBIG")]; + char stringpool_str459[sizeof("TCVN5712-1")]; + char stringpool_str460[sizeof("ISO8859-7")]; + char stringpool_str461[sizeof("CSISO57GB1988")]; + char stringpool_str463[sizeof("MACCENTRALEUROPE")]; + char stringpool_str464[sizeof("CSISOLATINGREEK")]; + char stringpool_str465[sizeof("CSISOLATIN3")]; + char stringpool_str466[sizeof("ISO-8859-7")]; + char stringpool_str467[sizeof("ISO_8859-7")]; + char stringpool_str468[sizeof("UNICODE-1-1-UTF-7")]; + char stringpool_str469[sizeof("CP367")]; + char stringpool_str470[sizeof("HZ-GB-2312")]; + char stringpool_str473[sizeof("EUCJP")]; + char stringpool_str474[sizeof("CSUNICODE11UTF7")]; + char stringpool_str476[sizeof("MACROMAN")]; + char stringpool_str477[sizeof("TCVN-5712")]; + char stringpool_str479[sizeof("EUC-JP")]; + char stringpool_str483[sizeof("ISO646-JP")]; + char stringpool_str489[sizeof("BIG5HKSCS")]; + char stringpool_str490[sizeof("CSISO58GB231280")]; + char stringpool_str492[sizeof("WINDOWS-1256")]; + char stringpool_str494[sizeof("WINDOWS-1251")]; + char stringpool_str495[sizeof("BIG5-HKSCS")]; + char stringpool_str496[sizeof("WCHAR_T")]; + char stringpool_str497[sizeof("ISO_8859-6:1987")]; + char stringpool_str499[sizeof("ISO_8859-1:1987")]; + char stringpool_str502[sizeof("WINDOWS-1254")]; + char stringpool_str504[sizeof("WINDOWS-1255")]; + char stringpool_str510[sizeof("WINDOWS-1258")]; + char stringpool_str512[sizeof("UTF-32")]; + char stringpool_str516[sizeof("CSISOLATINHEBREW")]; + char stringpool_str517[sizeof("CSHPROMAN8")]; + char stringpool_str519[sizeof("CSISO159JISX02121990")]; + char stringpool_str520[sizeof("WINDOWS-1252")]; + char stringpool_str522[sizeof("STRK1048-2002")]; + char stringpool_str525[sizeof("ISO_8859-2:1987")]; + char stringpool_str529[sizeof("ARABIC")]; + char stringpool_str530[sizeof("CSMACINTOSH")]; + char stringpool_str534[sizeof("KS_C_5601-1987")]; + char stringpool_str536[sizeof("JIS_C6220-1969-RO")]; + char stringpool_str537[sizeof("JIS_C6226-1983")]; + char stringpool_str539[sizeof("UTF-32LE")]; + char stringpool_str543[sizeof("TIS620.2533-0")]; + char stringpool_str546[sizeof("IBM-CP1133")]; + char stringpool_str547[sizeof("SHIFT-JIS")]; + char stringpool_str548[sizeof("SHIFT_JIS")]; + char stringpool_str555[sizeof("CSPC862LATINHEBREW")]; + char stringpool_str557[sizeof("BIGFIVE")]; + char stringpool_str560[sizeof("CSKSC56011987")]; + char stringpool_str562[sizeof("MACCROATIAN")]; + char stringpool_str563[sizeof("BIG-FIVE")]; + char stringpool_str566[sizeof("WINDOWS-936")]; + char stringpool_str567[sizeof("UTF-16BE")]; + char stringpool_str574[sizeof("KOI8-U")]; + char stringpool_str580[sizeof("KOI8-RU")]; + char stringpool_str584[sizeof("WINDOWS-1250")]; + char stringpool_str585[sizeof("MS-GREEK")]; + char stringpool_str589[sizeof("WINDOWS-1253")]; + char stringpool_str591[sizeof("MACGREEK")]; + char stringpool_str592[sizeof("CSPC850MULTILINGUAL")]; + char stringpool_str594[sizeof("ISO_8859-7:2003")]; + char stringpool_str596[sizeof("JIS0208")]; + char stringpool_str597[sizeof("IBM367")]; + char stringpool_str608[sizeof("ISO-2022-JP-1")]; + char stringpool_str610[sizeof("ISO-2022-JP-MS")]; + char stringpool_str613[sizeof("JIS_X0212")]; + char stringpool_str618[sizeof("CSEUCTW")]; + char stringpool_str624[sizeof("CSSHIFTJIS")]; + char stringpool_str625[sizeof("HEBREW")]; + char stringpool_str634[sizeof("ISO-2022-JP-2")]; + char stringpool_str635[sizeof("ASMO-708")]; + char stringpool_str642[sizeof("CSISO2022JP2")]; + char stringpool_str651[sizeof("JIS_X0201")]; + char stringpool_str655[sizeof("WINDOWS-874")]; + char stringpool_str660[sizeof("WINDOWS-1257")]; + char stringpool_str661[sizeof("ISO-2022-JP")]; + char stringpool_str665[sizeof("ISO_8859-7:1987")]; + char stringpool_str666[sizeof("CSISO87JISX0208")]; + char stringpool_str670[sizeof("CSISO2022JP")]; + char stringpool_str680[sizeof("MACARABIC")]; + char stringpool_str683[sizeof("JIS_X0208")]; + char stringpool_str684[sizeof("JISX0201-1976")]; + char stringpool_str689[sizeof("UTF-7")]; + char stringpool_str690[sizeof("UTF-32BE")]; + char stringpool_str692[sizeof("BIG5-HKSCS:2001")]; + char stringpool_str694[sizeof("JIS_X0212-1990")]; + char stringpool_str697[sizeof("JIS_X0212.1990-0")]; + char stringpool_str700[sizeof("BIG5-HKSCS:2004")]; + char stringpool_str702[sizeof("MACTURKISH")]; + char stringpool_str708[sizeof("BIG5-HKSCS:2008")]; + char stringpool_str710[sizeof("BIG5-HKSCS:1999")]; + char stringpool_str725[sizeof("MS-TURK")]; + char stringpool_str732[sizeof("UCS-4-SWAPPED")]; + char stringpool_str749[sizeof("MACUKRAINE")]; + char stringpool_str750[sizeof("UCS-2-SWAPPED")]; + char stringpool_str752[sizeof("TCVN5712-1:1993")]; + char stringpool_str774[sizeof("JIS_X0208-1990")]; + char stringpool_str779[sizeof("JIS_X0208-1983")]; + char stringpool_str796[sizeof("MACHEBREW")]; + char stringpool_str803[sizeof("MS-ARAB")]; + char stringpool_str811[sizeof("JAVA")]; + char stringpool_str813[sizeof("MACROMANIA")]; + char stringpool_str827[sizeof("MS_KANJI")]; + char stringpool_str837[sizeof("WINBALTRIM")]; + char stringpool_str866[sizeof("CSEUCPKDFMTJAPANESE")]; + char stringpool_str869[sizeof("JOHAB")]; + char stringpool_str921[sizeof("CSHALFWIDTHKATAKANA")]; + }; +static const struct stringpool_t stringpool_contents = + { + "L6", + "L1", + "CN", + "L4", + "L5", + "R8", + "L8", + "SJIS", + "866", + "L2", + "ISO-IR-6", + "CP866", + "C99", + "ISO-IR-166", + "EUCCN", + "LATIN6", + "CP154", + "LATIN1", + "EUC-CN", + "CYRILLIC", + "ISO646-CN", + "HZ", + "ISO-IR-14", + "CP1256", + "LATIN4", + "CP1251", + "ISO-IR-165", + "LATIN5", + "862", + "ISO-IR-126", + "ISO-IR-144", + "CP819", + "LATIN8", + "CP1254", + "ISO-IR-58", + "CP949", + "CP1255", + "CP862", + "ISO-IR-148", + "L3", + "LATIN-9", + "CHINESE", + "ISO-IR-149", + "ISO-IR-159", + "ISO-IR-226", + "CP1258", + "PT154", + "LATIN2", + "ISO8859-6", + "ISO-IR-199", + "ISO8859-1", + "ISO-CELTIC", + "ISO-8859-6", + "ISO_8859-6", + "ISO8859-16", + "ISO-8859-1", + "ISO_8859-1", + "ISO8859-11", + "ISO-8859-16", + "ISO_8859-16", + "CP1252", + "ISO-8859-11", + "ISO_8859-11", + "ISO8859-4", + "CP1361", + "ISO_8859-16:2001", + "CP1131", + "ISO8859-5", + "ISO-8859-4", + "ISO_8859-4", + "ISO8859-14", + "CP936", + "ISO-8859-5", + "ISO_8859-5", + "ISO8859-15", + "MAC", + "ISO-8859-14", + "ISO_8859-14", + "ISO8859-8", + "ISO-IR-101", + "ISO-8859-15", + "ISO_8859-15", + "ISO8859-9", + "ISO-8859-8", + "ISO_8859-8", + "ISO-8859-9", + "ISO_8859-9", + "ISO_8859-14:1998", + "ISO_8859-15:1998", + "RK1048", + "ELOT_928", + "ISO8859-2", + "IBM866", + "L7", + "US", + "ISO-8859-2", + "ISO_8859-2", + "X0212", + "CHAR", + "PTCP154", + "ISO-IR-109", + "ISO-IR-138", + "UHC", + "ASCII", + "MS-CYRL", + "L10", + "VISCII", + "CP932", + "BIG5", + "TCVN", + "CP50221", + "BIG-5", + "MS-EE", + "850", + "UCS-4", + "CSASCII", + "IBM819", + "CSVISCII", + "GB2312", + "X0201", + "CSBIG5", + "CN-BIG5", + "KOI8-R", + "EUCKR", + "IBM862", + "CSPTCP154", + "CSUCS4", + "ISO646-US", + "CP874", + "EUC-KR", + "VISCII1.1-1", + "ISO_646.IRV:1991", + "MACCYRILLIC", + "CSKOI8R", + "CP850", + "ISO-IR-110", + "CP950", + "ISO-2022-CN", + "CN-GB-ISOIR165", + "CYRILLIC-ASIAN", + "UCS-2", + "LATIN10", + "X0208", + "LATIN3", + "CSISO2022CN", + "ISO_8859-10:1992", + "UCS-4LE", + "CP1250", + "CSISOLATIN6", + "ISO-IR-179", + "MS936", + "CSISOLATIN1", + "TIS620", + "CP1253", + "ISO-2022-CN-EXT", + "TIS-620", + "UCS-2LE", + "KOI8-T", + "CSISOLATINCYRILLIC", + "CSISOLATIN4", + "CSISOLATIN5", + "UNICODE-1-1", + "GREEK8", + "UCS-4-INTERNAL", + "CSUNICODE11", + "CSUNICODE", + "TIS620.2529-1", + "NEXTSTEP", + "GEORGIAN-PS", + "ISO8859-10", + "ISO8859-3", + "UCS-2-INTERNAL", + "ISO-8859-10", + "ISO_8859-10", + "ISO-8859-3", + "ISO_8859-3", + "ISO8859-13", + "CSISOLATIN2", + "GB_1988-80", + "ISO-8859-13", + "ISO_8859-13", + "CP1133", + "MS-ANSI", + "ISO-IR-100", + "KSC_5601", + "MACINTOSH", + "CN-GB", + "CSIBM866", + "ISO-10646-UCS-4", + "ISO_8859-4:1988", + "ISO_8859-5:1988", + "UTF-16", + "KZ-1048", + "ROMAN8", + "ISO_8859-8:1988", + "UNICODELITTLE", + "ISO_8859-9:1989", + "JP", + "ISO-10646-UCS-2", + "MULELAO-1", + "CSKZ1048", + "ISO-IR-203", + "IBM850", + "TIS620-0", + "ECMA-114", + "KS_C_5601-1989", + "GBK", + "UTF-8", + "ARMSCII-8", + "US-ASCII", + "ECMA-118", + "CSGB2312", + "LATIN7", + "KOREAN", + "ISO-IR-57", + "MS-HEBR", + "CSISO14JISC6220RO", + "ISO-IR-87", + "ISO-IR-157", + "UTF-16LE", + "UCS-4BE", + "CP1257", + "ANSI_X3.4-1986", + "CSEUCKR", + "ISO-2022-KR", + "GB_2312-80", + "ISO-IR-127", + "MACTHAI", + "EUCTW", + "EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE", + "CSISO2022KR", + "UCS-2BE", + "EUC-TW", + "ANSI_X3.4-1968", + "GREEK", + "MACICELAND", + "GB18030", + "ISO_8859-3:1988", + "CSISOLATINARABIC", + "GEORGIAN-ACADEMY", + "HP-ROMAN8", + "TIS620.2533-1", + "UNICODEBIG", + "TCVN5712-1", + "ISO8859-7", + "CSISO57GB1988", + "MACCENTRALEUROPE", + "CSISOLATINGREEK", + "CSISOLATIN3", + "ISO-8859-7", + "ISO_8859-7", + "UNICODE-1-1-UTF-7", + "CP367", + "HZ-GB-2312", + "EUCJP", + "CSUNICODE11UTF7", + "MACROMAN", + "TCVN-5712", + "EUC-JP", + "ISO646-JP", + "BIG5HKSCS", + "CSISO58GB231280", + "WINDOWS-1256", + "WINDOWS-1251", + "BIG5-HKSCS", + "WCHAR_T", + "ISO_8859-6:1987", + "ISO_8859-1:1987", + "WINDOWS-1254", + "WINDOWS-1255", + "WINDOWS-1258", + "UTF-32", + "CSISOLATINHEBREW", + "CSHPROMAN8", + "CSISO159JISX02121990", + "WINDOWS-1252", + "STRK1048-2002", + "ISO_8859-2:1987", + "ARABIC", + "CSMACINTOSH", + "KS_C_5601-1987", + "JIS_C6220-1969-RO", + "JIS_C6226-1983", + "UTF-32LE", + "TIS620.2533-0", + "IBM-CP1133", + "SHIFT-JIS", + "SHIFT_JIS", + "CSPC862LATINHEBREW", + "BIGFIVE", + "CSKSC56011987", + "MACCROATIAN", + "BIG-FIVE", + "WINDOWS-936", + "UTF-16BE", + "KOI8-U", + "KOI8-RU", + "WINDOWS-1250", + "MS-GREEK", + "WINDOWS-1253", + "MACGREEK", + "CSPC850MULTILINGUAL", + "ISO_8859-7:2003", + "JIS0208", + "IBM367", + "ISO-2022-JP-1", + "ISO-2022-JP-MS", + "JIS_X0212", + "CSEUCTW", + "CSSHIFTJIS", + "HEBREW", + "ISO-2022-JP-2", + "ASMO-708", + "CSISO2022JP2", + "JIS_X0201", + "WINDOWS-874", + "WINDOWS-1257", + "ISO-2022-JP", + "ISO_8859-7:1987", + "CSISO87JISX0208", + "CSISO2022JP", + "MACARABIC", + "JIS_X0208", + "JISX0201-1976", + "UTF-7", + "UTF-32BE", + "BIG5-HKSCS:2001", + "JIS_X0212-1990", + "JIS_X0212.1990-0", + "BIG5-HKSCS:2004", + "MACTURKISH", + "BIG5-HKSCS:2008", + "BIG5-HKSCS:1999", + "MS-TURK", + "UCS-4-SWAPPED", + "MACUKRAINE", + "UCS-2-SWAPPED", + "TCVN5712-1:1993", + "JIS_X0208-1990", + "JIS_X0208-1983", + "MACHEBREW", + "MS-ARAB", + "JAVA", + "MACROMANIA", + "MS_KANJI", + "WINBALTRIM", + "CSEUCPKDFMTJAPANESE", + "JOHAB", + "CSHALFWIDTHKATAKANA" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct alias aliases[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 134 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str15, ei_iso8859_10}, + {-1}, +#line 60 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str17, ei_iso8859_1}, + {-1}, {-1}, +#line 288 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str20, ei_iso646_cn}, + {-1}, {-1}, {-1}, {-1}, +#line 84 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str25, ei_iso8859_4}, + {-1}, +#line 126 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str27, ei_iso8859_9}, + {-1}, {-1}, +#line 227 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str30, ei_hp_roman8}, + {-1}, {-1}, +#line 151 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str33, ei_iso8859_14}, +#line 308 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str34, ei_sjis}, + {-1}, +#line 207 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str36, ei_cp866}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 68 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str43, ei_iso8859_2}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 16 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str51, ei_ascii}, + {-1}, {-1}, +#line 205 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str54, ei_cp866}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 51 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str64, ei_c99}, +#line 252 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str65, ei_tis620}, +#line 320 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str66, ei_euc_cn}, +#line 133 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str67, ei_iso8859_10}, + {-1}, {-1}, +#line 236 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str70, ei_pt154}, +#line 59 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str71, ei_iso8859_1}, +#line 319 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str72, ei_euc_cn}, + {-1}, +#line 91 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str74, ei_iso8859_5}, + {-1}, +#line 286 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str76, ei_iso646_cn}, + {-1}, +#line 332 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str78, ei_hz}, +#line 264 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str79, ei_iso646_jp}, + {-1}, {-1}, {-1}, {-1}, +#line 189 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str84, ei_cp1256}, + {-1}, {-1}, +#line 83 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str87, ei_iso8859_4}, +#line 174 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str88, ei_cp1251}, +#line 294 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str89, ei_isoir165}, + {-1}, +#line 125 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str91, ei_iso8859_9}, +#line 203 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str92, ei_cp862}, +#line 107 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str93, ei_iso8859_7}, + {-1}, +#line 90 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str95, ei_iso8859_5}, +#line 57 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str96, ei_iso8859_1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 150 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str103, ei_iso8859_14}, +#line 183 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str104, ei_cp1254}, +#line 291 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str105, ei_gb2312}, +#line 353 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str106, ei_cp949}, + {-1}, +#line 186 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str108, ei_cp1255}, + {-1}, +#line 201 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str110, ei_cp862}, +#line 124 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str111, ei_iso8859_9}, +#line 76 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str112, ei_iso8859_3}, +#line 158 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str113, ei_iso8859_15}, +#line 293 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str114, ei_gb2312}, +#line 299 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str115, ei_ksc5601}, + {-1}, +#line 283 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str117, ei_jisx0212}, + {-1}, +#line 163 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str119, ei_iso8859_16}, +#line 195 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str120, ei_cp1258}, +#line 234 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str121, ei_pt154}, + {-1}, +#line 67 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str123, ei_iso8859_2}, +#line 102 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str124, ei_iso8859_6}, +#line 149 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str125, ei_iso8859_14}, + {-1}, {-1}, +#line 62 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str128, ei_iso8859_1}, +#line 152 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str129, ei_iso8859_14}, +#line 94 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str130, ei_iso8859_6}, +#line 95 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str131, ei_iso8859_6}, +#line 166 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str132, ei_iso8859_16}, + {-1}, +#line 53 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str134, ei_iso8859_1}, +#line 54 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str135, ei_iso8859_1}, +#line 139 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str136, ei_iso8859_11}, + {-1}, +#line 160 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str138, ei_iso8859_16}, +#line 161 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str139, ei_iso8859_16}, +#line 177 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str140, ei_cp1252}, + {-1}, +#line 137 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str142, ei_iso8859_11}, +#line 138 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str143, ei_iso8859_11}, +#line 86 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str144, ei_iso8859_4}, +#line 356 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str145, ei_johab}, +#line 162 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str146, ei_iso8859_16}, +#line 209 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str147, ei_cp1131}, +#line 93 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str148, ei_iso8859_5}, + {-1}, +#line 79 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str150, ei_iso8859_4}, +#line 80 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str151, ei_iso8859_4}, +#line 153 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str152, ei_iso8859_14}, +#line 325 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str153, ei_cp936}, +#line 87 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str154, ei_iso8859_5}, +#line 88 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str155, ei_iso8859_5}, +#line 159 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str156, ei_iso8859_15}, +#line 212 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str157, ei_mac_roman}, +#line 146 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str158, ei_iso8859_14}, +#line 147 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str159, ei_iso8859_14}, +#line 120 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str160, ei_iso8859_8}, +#line 66 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str161, ei_iso8859_2}, +#line 154 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str162, ei_iso8859_15}, +#line 155 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str163, ei_iso8859_15}, +#line 128 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str164, ei_iso8859_9}, + {-1}, +#line 114 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str166, ei_iso8859_8}, +#line 115 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str167, ei_iso8859_8}, + {-1}, {-1}, +#line 121 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str170, ei_iso8859_9}, +#line 122 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str171, ei_iso8859_9}, +#line 148 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str172, ei_iso8859_14}, + {-1}, +#line 156 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str174, ei_iso8859_15}, + {-1}, +#line 239 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str176, ei_rk1048}, + {-1}, {-1}, +#line 109 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str179, ei_iso8859_7}, +#line 70 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str180, ei_iso8859_2}, + {-1}, +#line 206 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str182, ei_cp866}, +#line 144 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str183, ei_iso8859_13}, +#line 21 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str184, ei_ascii}, + {-1}, +#line 63 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str186, ei_iso8859_2}, +#line 64 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str187, ei_iso8859_2}, + {-1}, {-1}, +#line 282 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str190, ei_jisx0212}, + {-1}, {-1}, +#line 359 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str193, ei_local_char}, + {-1}, {-1}, +#line 235 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str196, ei_pt154}, +#line 74 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str197, ei_iso8859_3}, +#line 117 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str198, ei_iso8859_8}, +#line 354 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str199, ei_cp949}, + {-1}, {-1}, +#line 13 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str202, ei_ascii}, + {-1}, +#line 176 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str204, ei_cp1251}, +#line 165 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str205, ei_iso8859_16}, +#line 255 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str206, ei_viscii}, + {-1}, {-1}, +#line 311 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str209, ei_cp932}, +#line 337 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str210, ei_ces_big5}, +#line 258 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str211, ei_tcvn}, +#line 318 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str212, ei_iso2022_jpms}, + {-1}, {-1}, {-1}, +#line 338 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str216, ei_ces_big5}, +#line 173 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str217, ei_cp1250}, + {-1}, {-1}, +#line 199 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str220, ei_cp850}, + {-1}, +#line 33 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str222, ei_ucs4}, +#line 22 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str223, ei_ascii}, +#line 58 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str224, ei_iso8859_1}, +#line 257 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str225, ei_viscii}, + {-1}, +#line 321 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str227, ei_euc_cn}, +#line 269 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str228, ei_jisx0201}, +#line 342 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str229, ei_ces_big5}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 341 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str235, ei_ces_big5}, +#line 167 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str236, ei_koi8_r}, +#line 351 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str237, ei_euc_kr}, +#line 202 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str238, ei_cp862}, +#line 238 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str239, ei_pt154}, +#line 35 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str240, ei_ucs4}, +#line 14 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str241, ei_ascii}, +#line 253 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str242, ei_cp874}, +#line 350 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str243, ei_euc_kr}, +#line 256 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str244, ei_viscii}, + {-1}, +#line 15 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str246, ei_ascii}, + {-1}, +#line 218 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str248, ei_mac_cyrillic}, +#line 168 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str249, ei_koi8_r}, +#line 197 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str250, ei_cp850}, +#line 82 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str251, ei_iso8859_4}, +#line 343 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str252, ei_cp950}, + {-1}, +#line 329 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str254, ei_iso2022_cn}, +#line 295 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str255, ei_isoir165}, + {-1}, +#line 237 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str257, ei_pt154}, +#line 24 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str258, ei_ucs2}, +#line 164 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str259, ei_iso8859_16}, +#line 275 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str260, ei_jisx0208}, +#line 75 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str261, ei_iso8859_3}, + {-1}, +#line 330 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str263, ei_iso2022_cn}, +#line 131 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str264, ei_iso8859_10}, + {-1}, {-1}, +#line 37 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str267, ei_ucs4le}, +#line 171 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str268, ei_cp1250}, + {-1}, {-1}, +#line 135 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str271, ei_iso8859_10}, + {-1}, +#line 142 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str273, ei_iso8859_13}, +#line 326 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str274, ei_cp936}, +#line 61 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str275, ei_iso8859_1}, +#line 247 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str276, ei_tis620}, + {-1}, +#line 180 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str278, ei_cp1253}, + {-1}, {-1}, +#line 331 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str281, ei_iso2022_cn_ext}, +#line 246 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str282, ei_tis620}, + {-1}, {-1}, +#line 31 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str285, ei_ucs2le}, +#line 233 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str286, ei_koi8_t}, + {-1}, {-1}, {-1}, +#line 92 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str290, ei_iso8859_5}, +#line 85 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str291, ei_iso8859_4}, + {-1}, {-1}, {-1}, +#line 127 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str295, ei_iso8859_9}, +#line 29 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str296, ei_ucs2be}, + {-1}, {-1}, {-1}, {-1}, +#line 110 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str301, ei_iso8859_7}, +#line 49 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str302, ei_ucs4internal}, + {-1}, +#line 30 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str304, ei_ucs2be}, + {-1}, +#line 26 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str306, ei_ucs2}, +#line 249 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str307, ei_tis620}, + {-1}, {-1}, {-1}, +#line 229 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str311, ei_nextstep}, +#line 232 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str312, ei_georgian_ps}, + {-1}, {-1}, {-1}, +#line 136 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str316, ei_iso8859_10}, + {-1}, +#line 78 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str318, ei_iso8859_3}, + {-1}, +#line 47 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str320, ei_ucs2internal}, + {-1}, +#line 129 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str322, ei_iso8859_10}, +#line 130 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str323, ei_iso8859_10}, +#line 71 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str324, ei_iso8859_3}, +#line 72 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str325, ei_iso8859_3}, +#line 145 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str326, ei_iso8859_13}, +#line 69 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str327, ei_iso8859_2}, + {-1}, +#line 285 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str329, ei_iso646_cn}, + {-1}, {-1}, +#line 140 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str332, ei_iso8859_13}, +#line 141 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str333, ei_iso8859_13}, + {-1}, {-1}, {-1}, +#line 244 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str337, ei_cp1133}, + {-1}, +#line 179 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str339, ei_cp1252}, + {-1}, +#line 56 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str341, ei_iso8859_1}, + {-1}, {-1}, +#line 296 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str344, ei_ksc5601}, + {-1}, {-1}, {-1}, {-1}, +#line 211 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str349, ei_mac_roman}, + {-1}, {-1}, +#line 322 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str352, ei_euc_cn}, + {-1}, +#line 208 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str354, ei_cp866}, +#line 34 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str355, ei_ucs4}, + {-1}, +#line 81 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str357, ei_iso8859_4}, + {-1}, +#line 89 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str359, ei_iso8859_5}, + {-1}, +#line 38 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str361, ei_utf16}, + {-1}, +#line 241 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str363, ei_rk1048}, +#line 226 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str364, ei_hp_roman8}, +#line 116 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str365, ei_iso8859_8}, +#line 32 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str366, ei_ucs2le}, + {-1}, {-1}, +#line 123 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str369, ei_iso8859_9}, + {-1}, {-1}, +#line 265 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str372, ei_iso646_jp}, +#line 25 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str373, ei_ucs2}, + {-1}, +#line 243 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str375, ei_mulelao}, +#line 242 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str376, ei_rk1048}, +#line 157 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str377, ei_iso8859_15}, +#line 198 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str378, ei_cp850}, + {-1}, +#line 248 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str380, ei_tis620}, + {-1}, +#line 98 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str382, ei_iso8859_6}, + {-1}, {-1}, {-1}, +#line 298 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str386, ei_ksc5601}, + {-1}, +#line 324 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str388, ei_ces_gbk}, +#line 23 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str389, ei_utf8}, + {-1}, +#line 230 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str391, ei_armscii_8}, +#line 12 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str392, ei_ascii}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 108 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str398, ei_iso8859_7}, +#line 323 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str399, ei_euc_cn}, + {-1}, {-1}, {-1}, +#line 143 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str403, ei_iso8859_13}, +#line 301 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str404, ei_ksc5601}, +#line 287 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str405, ei_iso646_cn}, + {-1}, {-1}, +#line 188 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str408, ei_cp1255}, +#line 266 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str409, ei_iso646_jp}, + {-1}, +#line 276 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str411, ei_jisx0208}, + {-1}, +#line 132 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str413, ei_iso8859_10}, + {-1}, {-1}, +#line 40 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str416, ei_utf16le}, + {-1}, +#line 36 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str418, ei_ucs4be}, + {-1}, +#line 192 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str420, ei_cp1257}, +#line 18 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str421, ei_ascii}, + {-1}, {-1}, +#line 352 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str424, ei_euc_kr}, +#line 357 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str425, ei_iso2022_kr}, +#line 290 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str426, ei_gb2312}, + {-1}, {-1}, +#line 97 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str429, ei_iso8859_6}, +#line 224 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str430, ei_mac_thai}, +#line 335 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str431, ei_euc_tw}, + {-1}, +#line 304 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str433, ei_euc_jp}, +#line 358 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str434, ei_iso2022_kr}, + {-1}, +#line 27 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str436, ei_ucs2be}, +#line 334 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str437, ei_euc_tw}, + {-1}, +#line 17 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str439, ei_ascii}, +#line 111 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str440, ei_iso8859_7}, + {-1}, +#line 215 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str442, ei_mac_iceland}, +#line 328 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str443, ei_gb18030}, +#line 73 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str444, ei_iso8859_3}, +#line 101 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str445, ei_iso8859_6}, +#line 231 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str446, ei_georgian_academy}, + {-1}, +#line 225 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str448, ei_hp_roman8}, + {-1}, {-1}, {-1}, {-1}, +#line 251 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str453, ei_tis620}, + {-1}, +#line 28 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str455, ei_ucs2be}, + {-1}, {-1}, {-1}, +#line 260 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str459, ei_tcvn}, +#line 113 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str460, ei_iso8859_7}, +#line 289 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str461, ei_iso646_cn}, + {-1}, +#line 214 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str463, ei_mac_centraleurope}, +#line 112 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str464, ei_iso8859_7}, +#line 77 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str465, ei_iso8859_3}, +#line 103 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str466, ei_iso8859_7}, +#line 104 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str467, ei_iso8859_7}, +#line 45 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str468, ei_utf7}, +#line 19 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str469, ei_ascii}, +#line 333 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str470, ei_hz}, + {-1}, {-1}, +#line 303 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str473, ei_euc_jp}, +#line 46 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str474, ei_utf7}, + {-1}, +#line 210 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str476, ei_mac_roman}, +#line 259 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str477, ei_tcvn}, + {-1}, +#line 302 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str479, ei_euc_jp}, + {-1}, {-1}, {-1}, +#line 263 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str483, ei_iso646_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 348 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str489, ei_big5hkscs2008}, +#line 292 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str490, ei_gb2312}, + {-1}, +#line 190 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str492, ei_cp1256}, + {-1}, +#line 175 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str494, ei_cp1251}, +#line 347 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str495, ei_big5hkscs2008}, +#line 360 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str496, ei_local_wchar_t}, +#line 96 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str497, ei_iso8859_6}, + {-1}, +#line 55 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str499, ei_iso8859_1}, + {-1}, {-1}, +#line 184 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str502, ei_cp1254}, + {-1}, +#line 187 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str504, ei_cp1255}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 196 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str510, ei_cp1258}, + {-1}, +#line 41 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str512, ei_utf32}, + {-1}, {-1}, {-1}, +#line 119 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str516, ei_iso8859_8}, +#line 228 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str517, ei_hp_roman8}, + {-1}, +#line 284 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str519, ei_jisx0212}, +#line 178 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str520, ei_cp1252}, + {-1}, +#line 240 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str522, ei_rk1048}, + {-1}, {-1}, +#line 65 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str525, ei_iso8859_2}, + {-1}, {-1}, {-1}, +#line 100 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str529, ei_iso8859_6}, +#line 213 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str530, ei_mac_roman}, + {-1}, {-1}, {-1}, +#line 297 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str534, ei_ksc5601}, + {-1}, +#line 262 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str536, ei_iso646_jp}, +#line 277 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str537, ei_jisx0208}, + {-1}, +#line 43 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str539, ei_utf32le}, + {-1}, {-1}, {-1}, +#line 250 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str543, ei_tis620}, + {-1}, {-1}, +#line 245 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str546, ei_cp1133}, +#line 307 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str547, ei_sjis}, +#line 306 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str548, ei_sjis}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 204 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str555, ei_cp862}, + {-1}, +#line 340 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str557, ei_ces_big5}, + {-1}, {-1}, +#line 300 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str560, ei_ksc5601}, + {-1}, +#line 216 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str562, ei_mac_croatian}, +#line 339 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str563, ei_ces_big5}, + {-1}, {-1}, +#line 327 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str566, ei_cp936}, +#line 39 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str567, ei_utf16be}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 169 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str574, ei_koi8_u}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 170 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str580, ei_koi8_ru}, + {-1}, {-1}, {-1}, +#line 172 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str584, ei_cp1250}, +#line 182 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str585, ei_cp1253}, + {-1}, {-1}, {-1}, +#line 181 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str589, ei_cp1253}, + {-1}, +#line 220 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str591, ei_mac_greek}, +#line 200 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str592, ei_cp850}, + {-1}, +#line 106 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str594, ei_iso8859_7}, + {-1}, +#line 274 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str596, ei_jisx0208}, +#line 20 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str597, ei_ascii}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 314 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str608, ei_iso2022_jp1}, + {-1}, +#line 317 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str610, ei_iso2022_jpms}, + {-1}, {-1}, +#line 279 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str613, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, +#line 336 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str618, ei_euc_tw}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 310 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str624, ei_sjis}, +#line 118 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str625, ei_iso8859_8}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 315 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str634, ei_iso2022_jp2}, +#line 99 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str635, ei_iso8859_6}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 316 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str642, ei_iso2022_jp2}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 267 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str651, ei_jisx0201}, + {-1}, {-1}, {-1}, +#line 254 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str655, ei_cp874}, + {-1}, {-1}, {-1}, {-1}, +#line 193 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str660, ei_cp1257}, +#line 312 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str661, ei_iso2022_jp}, + {-1}, {-1}, {-1}, +#line 105 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str665, ei_iso8859_7}, +#line 278 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str666, ei_jisx0208}, + {-1}, {-1}, {-1}, +#line 313 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str670, ei_iso2022_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 223 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str680, ei_mac_arabic}, + {-1}, {-1}, +#line 271 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str683, ei_jisx0208}, +#line 268 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str684, ei_jisx0201}, + {-1}, {-1}, {-1}, {-1}, +#line 44 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str689, ei_utf7}, +#line 42 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str690, ei_utf32be}, + {-1}, +#line 345 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str692, ei_big5hkscs2001}, + {-1}, +#line 281 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str694, ei_jisx0212}, + {-1}, {-1}, +#line 280 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str697, ei_jisx0212}, + {-1}, {-1}, +#line 346 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str700, ei_big5hkscs2004}, + {-1}, +#line 221 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str702, ei_mac_turkish}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 349 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str708, ei_big5hkscs2008}, + {-1}, +#line 344 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str710, ei_big5hkscs1999}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 185 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str725, ei_cp1254}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 50 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str732, ei_ucs4swapped}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 219 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str749, ei_mac_ukraine}, +#line 48 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str750, ei_ucs2swapped}, + {-1}, +#line 261 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str752, ei_tcvn}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, +#line 273 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str774, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, +#line 272 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str779, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 222 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str796, ei_mac_hebrew}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 191 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str803, ei_cp1256}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 52 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str811, ei_java}, + {-1}, +#line 217 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str813, ei_mac_romania}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, +#line 309 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str827, ei_sjis}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 194 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str837, ei_cp1257}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 305 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str866, ei_euc_jp}, + {-1}, {-1}, +#line 355 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str869, ei_johab}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 270 "lib/aliases.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str921, ei_jisx0201} + }; + +static const struct alias * +aliases_lookup (register const char *str, register size_t len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register unsigned int key = aliases_hash (str, len); + + if (key <= MAX_HASH_VALUE) + { + register int o = aliases[key].name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &aliases[key]; + } + } + } + return 0; +} diff --git a/jni/parted/libiconv/lib/aliases2.h b/jni/parted/libiconv/lib/aliases2.h new file mode 100755 index 0000000..6a65c42 --- /dev/null +++ b/jni/parted/libiconv/lib/aliases2.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 1999-2003, 2008, 2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +#ifdef USE_AIX +# if defined _AIX +# include "aliases_aix_sysaix.h" +# else +# include "aliases_aix.h" +# endif +#endif +#ifdef USE_OSF1 +# if defined __osf__ +# include "aliases_osf1_sysosf1.h" +# else +# include "aliases_osf1.h" +# endif +#endif +#ifdef USE_DOS +# include "aliases_dos.h" +#endif +#ifdef USE_ZOS +# include "aliases_zos.h" +#endif +#ifdef USE_EXTRA +# include "aliases_extra.h" +#endif diff --git a/jni/parted/libiconv/lib/aliases_aix.h b/jni/parted/libiconv/lib/aliases_aix.h new file mode 100755 index 0000000..5cbc77f --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_aix.h @@ -0,0 +1,18 @@ + S(aix_0, "CP856", ei_cp856 ) + S(aix_1, "CP922", ei_cp922 ) + S(aix_2, "CP943", ei_cp943 ) + S(aix_3, "CP1046", ei_cp1046 ) + S(aix_4, "CP1124", ei_cp1124 ) + S(aix_5, "CP1129", ei_cp1129 ) + S(aix_6, "CP1161", ei_cp1161 ) + S(aix_7, "IBM1161", ei_cp1161 ) + S(aix_8, "IBM-1161", ei_cp1161 ) + S(aix_9, "CSIBM1161", ei_cp1161 ) + S(aix_10, "CP1162", ei_cp1162 ) + S(aix_11, "IBM1162", ei_cp1162 ) + S(aix_12, "IBM-1162", ei_cp1162 ) + S(aix_13, "CSIBM1162", ei_cp1162 ) + S(aix_14, "CP1163", ei_cp1163 ) + S(aix_15, "IBM1163", ei_cp1163 ) + S(aix_16, "IBM-1163", ei_cp1163 ) + S(aix_17, "CSIBM1163", ei_cp1163 ) diff --git a/jni/parted/libiconv/lib/aliases_aix_sysaix.h b/jni/parted/libiconv/lib/aliases_aix_sysaix.h new file mode 100755 index 0000000..b7dc584 --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_aix_sysaix.h @@ -0,0 +1,24 @@ + S(aix_0, "CP856", ei_cp856 ) + S(aix_1, "IBM-856", ei_cp856 ) + S(aix_2, "CP922", ei_cp922 ) + S(aix_3, "IBM-922", ei_cp922 ) + S(aix_4, "CP943", ei_cp943 ) + S(aix_5, "IBM-943", ei_cp943 ) + S(aix_6, "CP1046", ei_cp1046 ) + S(aix_7, "IBM-1046", ei_cp1046 ) + S(aix_8, "CP1124", ei_cp1124 ) + S(aix_9, "IBM-1124", ei_cp1124 ) + S(aix_10, "CP1129", ei_cp1129 ) + S(aix_11, "IBM-1129", ei_cp1129 ) + S(aix_12, "CP1161", ei_cp1161 ) + S(aix_13, "IBM1161", ei_cp1161 ) + S(aix_14, "IBM-1161", ei_cp1161 ) + S(aix_15, "CSIBM1161", ei_cp1161 ) + S(aix_16, "CP1162", ei_cp1162 ) + S(aix_17, "IBM1162", ei_cp1162 ) + S(aix_18, "IBM-1162", ei_cp1162 ) + S(aix_19, "CSIBM1162", ei_cp1162 ) + S(aix_20, "CP1163", ei_cp1163 ) + S(aix_21, "IBM1163", ei_cp1163 ) + S(aix_22, "IBM-1163", ei_cp1163 ) + S(aix_23, "CSIBM1163", ei_cp1163 ) diff --git a/jni/parted/libiconv/lib/aliases_dos.h b/jni/parted/libiconv/lib/aliases_dos.h new file mode 100755 index 0000000..1dd4fcb --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_dos.h @@ -0,0 +1,48 @@ + S(dos_0, "CP437", ei_cp437 ) + S(dos_1, "IBM437", ei_cp437 ) + S(dos_2, "437", ei_cp437 ) + S(dos_3, "CSPC8CODEPAGE437", ei_cp437 ) + S(dos_4, "CP737", ei_cp737 ) + S(dos_5, "CP775", ei_cp775 ) + S(dos_6, "IBM775", ei_cp775 ) + S(dos_7, "CSPC775BALTIC", ei_cp775 ) + S(dos_8, "CP852", ei_cp852 ) + S(dos_9, "IBM852", ei_cp852 ) + S(dos_10, "852", ei_cp852 ) + S(dos_11, "CSPCP852", ei_cp852 ) + S(dos_12, "CP853", ei_cp853 ) + S(dos_13, "CP855", ei_cp855 ) + S(dos_14, "IBM855", ei_cp855 ) + S(dos_15, "855", ei_cp855 ) + S(dos_16, "CSIBM855", ei_cp855 ) + S(dos_17, "CP857", ei_cp857 ) + S(dos_18, "IBM857", ei_cp857 ) + S(dos_19, "857", ei_cp857 ) + S(dos_20, "CSIBM857", ei_cp857 ) + S(dos_21, "CP858", ei_cp858 ) + S(dos_22, "CP860", ei_cp860 ) + S(dos_23, "IBM860", ei_cp860 ) + S(dos_24, "860", ei_cp860 ) + S(dos_25, "CSIBM860", ei_cp860 ) + S(dos_26, "CP861", ei_cp861 ) + S(dos_27, "IBM861", ei_cp861 ) + S(dos_28, "861", ei_cp861 ) + S(dos_29, "CP-IS", ei_cp861 ) + S(dos_30, "CSIBM861", ei_cp861 ) + S(dos_31, "CP863", ei_cp863 ) + S(dos_32, "IBM863", ei_cp863 ) + S(dos_33, "863", ei_cp863 ) + S(dos_34, "CSIBM863", ei_cp863 ) + S(dos_35, "CP864", ei_cp864 ) + S(dos_36, "IBM864", ei_cp864 ) + S(dos_37, "CSIBM864", ei_cp864 ) + S(dos_38, "CP865", ei_cp865 ) + S(dos_39, "IBM865", ei_cp865 ) + S(dos_40, "865", ei_cp865 ) + S(dos_41, "CSIBM865", ei_cp865 ) + S(dos_42, "CP869", ei_cp869 ) + S(dos_43, "IBM869", ei_cp869 ) + S(dos_44, "869", ei_cp869 ) + S(dos_45, "CP-GR", ei_cp869 ) + S(dos_46, "CSIBM869", ei_cp869 ) + S(dos_47, "CP1125", ei_cp1125 ) diff --git a/jni/parted/libiconv/lib/aliases_extra.h b/jni/parted/libiconv/lib/aliases_extra.h new file mode 100755 index 0000000..9a54e16 --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_extra.h @@ -0,0 +1,12 @@ + S(extra_0, "EUC-JISX0213", ei_euc_jisx0213 ) + S(extra_1, "EUC-JIS-2004", ei_euc_jisx0213 ) + S(extra_2, "SHIFT_JISX0213", ei_shift_jisx0213 ) + S(extra_3, "SHIFT_JIS-2004", ei_shift_jisx0213 ) + S(extra_4, "ISO-2022-JP-3", ei_iso2022_jp3 ) + S(extra_5, "ISO-2022-JP-2004", ei_iso2022_jp3 ) + S(extra_6, "BIG5-2003", ei_big5_2003 ) + S(extra_7, "TDS565", ei_tds565 ) + S(extra_8, "ISO-IR-230", ei_tds565 ) + S(extra_9, "ATARIST", ei_atarist ) + S(extra_10, "ATARI", ei_atarist ) + S(extra_11, "RISCOS-LATIN1", ei_riscos1 ) diff --git a/jni/parted/libiconv/lib/aliases_osf1.h b/jni/parted/libiconv/lib/aliases_osf1.h new file mode 100755 index 0000000..9e4f685 --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_osf1.h @@ -0,0 +1,2 @@ + S(osf1_0, "DEC-KANJI", ei_dec_kanji ) + S(osf1_1, "DEC-HANYU", ei_dec_hanyu ) diff --git a/jni/parted/libiconv/lib/aliases_osf1_sysosf1.h b/jni/parted/libiconv/lib/aliases_osf1_sysosf1.h new file mode 100755 index 0000000..b1f802d --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_osf1_sysosf1.h @@ -0,0 +1,4 @@ + S(osf1_0, "DEC-KANJI", ei_dec_kanji ) + S(osf1_1, "DECKANJI", ei_dec_kanji ) + S(osf1_2, "DEC-HANYU", ei_dec_hanyu ) + S(osf1_3, "DECHANYU", ei_dec_hanyu ) diff --git a/jni/parted/libiconv/lib/aliases_sysaix.h b/jni/parted/libiconv/lib/aliases_sysaix.h new file mode 100755 index 0000000..56e6d7e --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_sysaix.h @@ -0,0 +1,1814 @@ +/* ANSI-C code produced by gperf version 3.2 */ +/* Command-line: gperf -m 10 lib/aliases_sysaix.gperf */ +/* Computed positions: -k'1,3-11,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "lib/aliases_sysaix.gperf" +struct alias { int name; unsigned int encoding_index; }; + +#define TOTAL_KEYWORDS 358 +#define MIN_WORD_LENGTH 2 +#define MAX_WORD_LENGTH 45 +#define MIN_HASH_VALUE 5 +#define MAX_HASH_VALUE 1039 +/* maximum key range = 1035, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +aliases_hash (register const char *str, register size_t len) +{ + static const unsigned short asso_values[] = + { + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, + 1040, 1040, 1040, 1040, 1040, 0, 174, 1040, 44, 2, + 16, 28, 9, 13, 5, 188, 20, 0, 170, 1040, + 1040, 1040, 1040, 1040, 1040, 9, 191, 2, 19, 65, + 140, 65, 42, 88, 376, 199, 6, 206, 3, 0, + 52, 1040, 0, 11, 118, 97, 59, 189, 220, 13, + 4, 1040, 1040, 1040, 1040, 1, 1040, 1040, 1040, 1040, + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040 + }; + register unsigned int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[10]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 10: + hval += asso_values[(unsigned char)str[9]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 9: + hval += asso_values[(unsigned char)str[8]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 8: + hval += asso_values[(unsigned char)str[7]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 7: + hval += asso_values[(unsigned char)str[6]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 6: + hval += asso_values[(unsigned char)str[5]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 5: + hval += asso_values[(unsigned char)str[4]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 4: + hval += asso_values[(unsigned char)str[3]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 3: + hval += asso_values[(unsigned char)str[2]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 2: + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str5[sizeof("C99")]; + char stringpool_str7[sizeof("CN")]; + char stringpool_str10[sizeof("L1")]; + char stringpool_str13[sizeof("L6")]; + char stringpool_str15[sizeof("CHAR")]; + char stringpool_str16[sizeof("CP949")]; + char stringpool_str17[sizeof("L4")]; + char stringpool_str21[sizeof("L5")]; + char stringpool_str22[sizeof("R8")]; + char stringpool_str24[sizeof("L2")]; + char stringpool_str28[sizeof("L8")]; + char stringpool_str29[sizeof("CP819")]; + char stringpool_str33[sizeof("866")]; + char stringpool_str36[sizeof("L3")]; + char stringpool_str40[sizeof("CP154")]; + char stringpool_str42[sizeof("CP866")]; + char stringpool_str43[sizeof("CP1251")]; + char stringpool_str44[sizeof("CP1131")]; + char stringpool_str45[sizeof("CP936")]; + char stringpool_str47[sizeof("CP1361")]; + char stringpool_str48[sizeof("HZ")]; + char stringpool_str49[sizeof("CP1256")]; + char stringpool_str55[sizeof("862")]; + char stringpool_str57[sizeof("CP1254")]; + char stringpool_str64[sizeof("CP862")]; + char stringpool_str65[sizeof("CP1255")]; + char stringpool_str67[sizeof("CP932")]; + char stringpool_str71[sizeof("CP1252")]; + char stringpool_str79[sizeof("CP1258")]; + char stringpool_str80[sizeof("EUCCN")]; + char stringpool_str81[sizeof("EUC-CN")]; + char stringpool_str90[sizeof("PT154")]; + char stringpool_str95[sizeof("CP1253")]; + char stringpool_str96[sizeof("CP1133")]; + char stringpool_str97[sizeof("L10")]; + char stringpool_str101[sizeof("RK1048")]; + char stringpool_str102[sizeof("CP50221")]; + char stringpool_str104[sizeof("UHC")]; + char stringpool_str108[sizeof("CP950")]; + char stringpool_str110[sizeof("US")]; + char stringpool_str111[sizeof("850")]; + char stringpool_str124[sizeof("ISO646-CN")]; + char stringpool_str125[sizeof("SJIS")]; + char stringpool_str127[sizeof("CP1250")]; + char stringpool_str128[sizeof("CP850")]; + char stringpool_str131[sizeof("UCS-4")]; + char stringpool_str136[sizeof("CSUCS4")]; + char stringpool_str145[sizeof("UCS-2")]; + char stringpool_str146[sizeof("PTCP154")]; + char stringpool_str149[sizeof("GB2312")]; + char stringpool_str150[sizeof("ISO8859-9")]; + char stringpool_str151[sizeof("ISO-8859-9")]; + char stringpool_str152[sizeof("ISO_8859-9")]; + char stringpool_str154[sizeof("ISO8859-1")]; + char stringpool_str155[sizeof("ISO-8859-1")]; + char stringpool_str156[sizeof("ISO_8859-1")]; + char stringpool_str157[sizeof("ISO8859-11")]; + char stringpool_str158[sizeof("ISO-8859-11")]; + char stringpool_str159[sizeof("ISO_8859-11")]; + char stringpool_str160[sizeof("ISO8859-6")]; + char stringpool_str161[sizeof("ISO-8859-6")]; + char stringpool_str162[sizeof("ISO_8859-6")]; + char stringpool_str163[sizeof("ISO8859-16")]; + char stringpool_str164[sizeof("ISO-8859-16")]; + char stringpool_str165[sizeof("ISO_8859-16")]; + char stringpool_str167[sizeof("ISO_8859-16:2001")]; + char stringpool_str168[sizeof("ISO8859-4")]; + char stringpool_str169[sizeof("ISO-8859-4")]; + char stringpool_str170[sizeof("ISO_8859-4")]; + char stringpool_str171[sizeof("ISO8859-14")]; + char stringpool_str172[sizeof("ISO-8859-14")]; + char stringpool_str173[sizeof("ISO_8859-14")]; + char stringpool_str176[sizeof("ISO8859-5")]; + char stringpool_str177[sizeof("ISO-8859-5")]; + char stringpool_str178[sizeof("ISO_8859-5")]; + char stringpool_str179[sizeof("ISO8859-15")]; + char stringpool_str180[sizeof("ISO-8859-15")]; + char stringpool_str181[sizeof("ISO_8859-15")]; + char stringpool_str182[sizeof("ISO8859-2")]; + char stringpool_str183[sizeof("ISO-8859-2")]; + char stringpool_str184[sizeof("ISO_8859-2")]; + char stringpool_str187[sizeof("TCVN")]; + char stringpool_str188[sizeof("ISO-IR-199")]; + char stringpool_str189[sizeof("ISO_8859-14:1998")]; + char stringpool_str190[sizeof("ISO8859-8")]; + char stringpool_str191[sizeof("ISO-8859-8")]; + char stringpool_str192[sizeof("ISO_8859-8")]; + char stringpool_str193[sizeof("ISO_8859-15:1998")]; + char stringpool_str194[sizeof("ISO-IR-6")]; + char stringpool_str196[sizeof("L7")]; + char stringpool_str197[sizeof("ISO-IR-149")]; + char stringpool_str199[sizeof("ISO-2022-CN")]; + char stringpool_str201[sizeof("ISO-IR-159")]; + char stringpool_str202[sizeof("CYRILLIC")]; + char stringpool_str203[sizeof("ISO-IR-166")]; + char stringpool_str205[sizeof("ISO-IR-14")]; + char stringpool_str206[sizeof("ISO8859-3")]; + char stringpool_str207[sizeof("ISO-8859-3")]; + char stringpool_str208[sizeof("ISO_8859-3")]; + char stringpool_str209[sizeof("ISO8859-13")]; + char stringpool_str210[sizeof("ISO-8859-13")]; + char stringpool_str211[sizeof("ISO_8859-13")]; + char stringpool_str212[sizeof("CSISO2022CN")]; + char stringpool_str213[sizeof("MAC")]; + char stringpool_str214[sizeof("ISO-IR-126")]; + char stringpool_str215[sizeof("ISO-IR-144")]; + char stringpool_str219[sizeof("ISO-IR-165")]; + char stringpool_str220[sizeof("ISO_8859-10:1992")]; + char stringpool_str222[sizeof("LATIN-9")]; + char stringpool_str225[sizeof("LATIN1")]; + char stringpool_str226[sizeof("GB_1988-80")]; + char stringpool_str228[sizeof("ISO-IR-226")]; + char stringpool_str229[sizeof("CYRILLIC-ASIAN")]; + char stringpool_str231[sizeof("LATIN6")]; + char stringpool_str232[sizeof("ISO-IR-109")]; + char stringpool_str233[sizeof("CP874")]; + char stringpool_str235[sizeof("ISO646-US")]; + char stringpool_str236[sizeof("ISO-IR-101")]; + char stringpool_str237[sizeof("ISO-IR-148")]; + char stringpool_str238[sizeof("ISO-IR-58")]; + char stringpool_str239[sizeof("LATIN4")]; + char stringpool_str240[sizeof("MS-CYRL")]; + char stringpool_str241[sizeof("ISO8859-10")]; + char stringpool_str242[sizeof("ISO-8859-10")]; + char stringpool_str243[sizeof("ISO_8859-10")]; + char stringpool_str244[sizeof("TIS620")]; + char stringpool_str245[sizeof("TIS-620")]; + char stringpool_str246[sizeof("GB_2312-80")]; + char stringpool_str247[sizeof("LATIN5")]; + char stringpool_str248[sizeof("ELOT_928")]; + char stringpool_str249[sizeof("MS936")]; + char stringpool_str253[sizeof("LATIN2")]; + char stringpool_str254[sizeof("GB18030")]; + char stringpool_str255[sizeof("UTF-16")]; + char stringpool_str256[sizeof("ISO-IR-138")]; + char stringpool_str260[sizeof("UCS-4LE")]; + char stringpool_str261[sizeof("LATIN8")]; + char stringpool_str264[sizeof("ROMAN8")]; + char stringpool_str267[sizeof("UCS-2LE")]; + char stringpool_str268[sizeof("CSPTCP154")]; + char stringpool_str270[sizeof("GEORGIAN-ACADEMY")]; + char stringpool_str271[sizeof("EUCKR")]; + char stringpool_str272[sizeof("EUC-KR")]; + char stringpool_str274[sizeof("ISO-10646-UCS-4")]; + char stringpool_str275[sizeof("X0212")]; + char stringpool_str276[sizeof("KSC_5601")]; + char stringpool_str277[sizeof("LATIN3")]; + char stringpool_str278[sizeof("ISO-IR-110")]; + char stringpool_str280[sizeof("ASCII")]; + char stringpool_str281[sizeof("ISO-10646-UCS-2")]; + char stringpool_str282[sizeof("UTF-8")]; + char stringpool_str283[sizeof("KS_C_5601-1989")]; + char stringpool_str285[sizeof("KOREAN")]; + char stringpool_str286[sizeof("BIG5")]; + char stringpool_str287[sizeof("BIG-5")]; + char stringpool_str288[sizeof("UNICODE-1-1")]; + char stringpool_str289[sizeof("X0201")]; + char stringpool_str290[sizeof("TIS620-0")]; + char stringpool_str293[sizeof("CSUNICODE11")]; + char stringpool_str295[sizeof("CSASCII")]; + char stringpool_str301[sizeof("KZ-1048")]; + char stringpool_str302[sizeof("ISO-IR-203")]; + char stringpool_str303[sizeof("UTF-32")]; + char stringpool_str305[sizeof("MULELAO-1")]; + char stringpool_str306[sizeof("CHINESE")]; + char stringpool_str307[sizeof("ARABIC")]; + char stringpool_str308[sizeof("CSKZ1048")]; + char stringpool_str309[sizeof("HP-ROMAN8")]; + char stringpool_str310[sizeof("ECMA-114")]; + char stringpool_str312[sizeof("LATIN10")]; + char stringpool_str313[sizeof("KOI8-R")]; + char stringpool_str315[sizeof("GEORGIAN-PS")]; + char stringpool_str316[sizeof("CSKOI8R")]; + char stringpool_str318[sizeof("ISO-2022-CN-EXT")]; + char stringpool_str320[sizeof("ISO-IR-100")]; + char stringpool_str321[sizeof("IBM-921")]; + char stringpool_str322[sizeof("IBM819")]; + char stringpool_str325[sizeof("X0208")]; + char stringpool_str327[sizeof("ISO_8859-9:1989")]; + char stringpool_str332[sizeof("ECMA-118")]; + char stringpool_str335[sizeof("IBM866")]; + char stringpool_str338[sizeof("IBM-1131")]; + char stringpool_str340[sizeof("CSISOLATIN1")]; + char stringpool_str342[sizeof("VISCII")]; + char stringpool_str344[sizeof("CSGB2312")]; + char stringpool_str346[sizeof("CSISOLATIN6")]; + char stringpool_str347[sizeof("CSISOLATINCYRILLIC")]; + char stringpool_str350[sizeof("CSUNICODE")]; + char stringpool_str352[sizeof("CSISOLATINARABIC")]; + char stringpool_str354[sizeof("CSISOLATIN4")]; + char stringpool_str356[sizeof("ISO_8859-4:1988")]; + char stringpool_str357[sizeof("IBM862")]; + char stringpool_str360[sizeof("ISO_8859-5:1988")]; + char stringpool_str361[sizeof("IBM-932")]; + char stringpool_str362[sizeof("CSISOLATIN5")]; + char stringpool_str364[sizeof("CSHPROMAN8")]; + char stringpool_str365[sizeof("IBM-1252")]; + char stringpool_str367[sizeof("ISO_8859-8:1988")]; + char stringpool_str368[sizeof("CSISOLATIN2")]; + char stringpool_str372[sizeof("CSEUCKR")]; + char stringpool_str374[sizeof("STRK1048-2002")]; + char stringpool_str375[sizeof("ISO_8859-3:1988")]; + char stringpool_str376[sizeof("ISO-IR-179")]; + char stringpool_str378[sizeof("CSBIG5")]; + char stringpool_str379[sizeof("CN-BIG5")]; + char stringpool_str381[sizeof("ISO-CELTIC")]; + char stringpool_str386[sizeof("HZ-GB-2312")]; + char stringpool_str388[sizeof("UTF-16LE")]; + char stringpool_str390[sizeof("ISO-2022-KR")]; + char stringpool_str391[sizeof("US-ASCII")]; + char stringpool_str392[sizeof("CSISOLATIN3")]; + char stringpool_str403[sizeof("CSISO2022KR")]; + char stringpool_str406[sizeof("MS-EE")]; + char stringpool_str411[sizeof("UCS-4-INTERNAL")]; + char stringpool_str412[sizeof("MS-ANSI")]; + char stringpool_str413[sizeof("TCVN5712-1")]; + char stringpool_str415[sizeof("CP1257")]; + char stringpool_str416[sizeof("CP367")]; + char stringpool_str418[sizeof("UCS-2-INTERNAL")]; + char stringpool_str421[sizeof("IBM850")]; + char stringpool_str422[sizeof("IBM-850")]; + char stringpool_str424[sizeof("TCVN-5712")]; + char stringpool_str425[sizeof("UTF-32LE")]; + char stringpool_str426[sizeof("MACCYRILLIC")]; + char stringpool_str428[sizeof("TIS620.2529-1")]; + char stringpool_str429[sizeof("MACICELAND")]; + char stringpool_str430[sizeof("JP")]; + char stringpool_str434[sizeof("CSVISCII")]; + char stringpool_str437[sizeof("MACROMAN")]; + char stringpool_str440[sizeof("GREEK8")]; + char stringpool_str441[sizeof("VISCII1.1-1")]; + char stringpool_str445[sizeof("UCS-4BE")]; + char stringpool_str446[sizeof("IBM-CP1133")]; + char stringpool_str447[sizeof("ISO_646.IRV:1991")]; + char stringpool_str451[sizeof("MACCROATIAN")]; + char stringpool_str452[sizeof("UCS-2BE")]; + char stringpool_str453[sizeof("ARMSCII-8")]; + char stringpool_str454[sizeof("CN-GB")]; + char stringpool_str456[sizeof("WINDOWS-1251")]; + char stringpool_str457[sizeof("JAVA")]; + char stringpool_str459[sizeof("WINDOWS-1256")]; + char stringpool_str460[sizeof("WINDOWS-936")]; + char stringpool_str462[sizeof("UCS-4-SWAPPED")]; + char stringpool_str463[sizeof("WINDOWS-1254")]; + char stringpool_str466[sizeof("GBK")]; + char stringpool_str467[sizeof("WINDOWS-1255")]; + char stringpool_str468[sizeof("TIS620.2533-1")]; + char stringpool_str469[sizeof("UCS-2-SWAPPED")]; + char stringpool_str470[sizeof("WINDOWS-1252")]; + char stringpool_str471[sizeof("KS_C_5601-1987")]; + char stringpool_str472[sizeof("CN-GB-ISOIR165")]; + char stringpool_str474[sizeof("WINDOWS-1258")]; + char stringpool_str475[sizeof("IBM-EUCCN")]; + char stringpool_str476[sizeof("JIS_C6226-1983")]; + char stringpool_str480[sizeof("UNICODE-1-1-UTF-7")]; + char stringpool_str481[sizeof("CSKSC56011987")]; + char stringpool_str482[sizeof("WINDOWS-1253")]; + char stringpool_str483[sizeof("CSUNICODE11UTF7")]; + char stringpool_str484[sizeof("WCHAR_T")]; + char stringpool_str490[sizeof("JIS_C6220-1969-RO")]; + char stringpool_str493[sizeof("CSISO58GB231280")]; + char stringpool_str495[sizeof("ASMO-708")]; + char stringpool_str498[sizeof("WINDOWS-1250")]; + char stringpool_str507[sizeof("KOI8-U")]; + char stringpool_str508[sizeof("KOI8-RU")]; + char stringpool_str510[sizeof("TIS620.2533-0")]; + char stringpool_str511[sizeof("MS-HEBR")]; + char stringpool_str517[sizeof("ISO_8859-1:1987")]; + char stringpool_str518[sizeof("MACARABIC")]; + char stringpool_str520[sizeof("ISO_8859-6:1987")]; + char stringpool_str521[sizeof("MACINTOSH")]; + char stringpool_str525[sizeof("CSPC862LATINHEBREW")]; + char stringpool_str526[sizeof("ISO8859-7")]; + char stringpool_str527[sizeof("ISO-8859-7")]; + char stringpool_str528[sizeof("ISO_8859-7")]; + char stringpool_str530[sizeof("CSIBM866")]; + char stringpool_str531[sizeof("ISO_8859-2:1987")]; + char stringpool_str534[sizeof("CSMACINTOSH")]; + char stringpool_str538[sizeof("JIS0208")]; + char stringpool_str542[sizeof("MACROMANIA")]; + char stringpool_str543[sizeof("ISO_8859-7:2003")]; + char stringpool_str549[sizeof("KOI8-T")]; + char stringpool_str552[sizeof("EUCJP")]; + char stringpool_str553[sizeof("EUC-JP")]; + char stringpool_str554[sizeof("BIG5HKSCS")]; + char stringpool_str555[sizeof("BIG5-HKSCS")]; + char stringpool_str557[sizeof("MACCENTRALEUROPE")]; + char stringpool_str560[sizeof("MACTHAI")]; + char stringpool_str561[sizeof("ANSI_X3.4-1986")]; + char stringpool_str565[sizeof("EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE")]; + char stringpool_str568[sizeof("EUCTW")]; + char stringpool_str569[sizeof("EUC-TW")]; + char stringpool_str572[sizeof("CSISOLATINHEBREW")]; + char stringpool_str573[sizeof("UTF-16BE")]; + char stringpool_str574[sizeof("ISO-IR-57")]; + char stringpool_str576[sizeof("ANSI_X3.4-1968")]; + char stringpool_str577[sizeof("ISO-IR-157")]; + char stringpool_str580[sizeof("ISO-IR-127")]; + char stringpool_str581[sizeof("ISO-IR-87")]; + char stringpool_str585[sizeof("CSPC850MULTILINGUAL")]; + char stringpool_str593[sizeof("CSISO57GB1988")]; + char stringpool_str596[sizeof("ISO646-JP")]; + char stringpool_str597[sizeof("LATIN7")]; + char stringpool_str598[sizeof("GREEK")]; + char stringpool_str604[sizeof("CSISOLATINGREEK")]; + char stringpool_str606[sizeof("CSISO14JISC6220RO")]; + char stringpool_str610[sizeof("UTF-32BE")]; + char stringpool_str613[sizeof("MS-ARAB")]; + char stringpool_str614[sizeof("TCVN5712-1:1993")]; + char stringpool_str618[sizeof("UTF-7")]; + char stringpool_str623[sizeof("ISO-2022-JP-1")]; + char stringpool_str633[sizeof("ISO-2022-JP-MS")]; + char stringpool_str637[sizeof("ISO-2022-JP-2")]; + char stringpool_str642[sizeof("WINDOWS-1257")]; + char stringpool_str647[sizeof("NEXTSTEP")]; + char stringpool_str648[sizeof("WINDOWS-874")]; + char stringpool_str649[sizeof("CSISO2022JP2")]; + char stringpool_str655[sizeof("CSISO159JISX02121990")]; + char stringpool_str666[sizeof("IBM-EUCKR")]; + char stringpool_str669[sizeof("CSEUCTW")]; + char stringpool_str671[sizeof("ISO-2022-JP")]; + char stringpool_str679[sizeof("UNICODELITTLE")]; + char stringpool_str680[sizeof("BIGFIVE")]; + char stringpool_str681[sizeof("BIG-FIVE")]; + char stringpool_str682[sizeof("HEBREW")]; + char stringpool_str683[sizeof("CSHALFWIDTHKATAKANA")]; + char stringpool_str684[sizeof("CSISO2022JP")]; + char stringpool_str690[sizeof("UNICODEBIG")]; + char stringpool_str703[sizeof("ISO_8859-7:1987")]; + char stringpool_str709[sizeof("IBM367")]; + char stringpool_str711[sizeof("JIS_X0212")]; + char stringpool_str719[sizeof("BIG5-HKSCS:1999")]; + char stringpool_str721[sizeof("BIG5-HKSCS:2001")]; + char stringpool_str725[sizeof("JIS_X0201")]; + char stringpool_str728[sizeof("BIG5-HKSCS:2004")]; + char stringpool_str733[sizeof("JISX0201-1976")]; + char stringpool_str739[sizeof("BIG5-HKSCS:2008")]; + char stringpool_str744[sizeof("MACUKRAINE")]; + char stringpool_str746[sizeof("JIS_X0212-1990")]; + char stringpool_str761[sizeof("JIS_X0208")]; + char stringpool_str776[sizeof("JIS_X0208-1983")]; + char stringpool_str792[sizeof("JIS_X0208-1990")]; + char stringpool_str807[sizeof("MS-GREEK")]; + char stringpool_str809[sizeof("MACGREEK")]; + char stringpool_str814[sizeof("JOHAB")]; + char stringpool_str815[sizeof("MACTURKISH")]; + char stringpool_str826[sizeof("MS-TURK")]; + char stringpool_str852[sizeof("SHIFT-JIS")]; + char stringpool_str853[sizeof("SHIFT_JIS")]; + char stringpool_str897[sizeof("CSSHIFTJIS")]; + char stringpool_str922[sizeof("JIS_X0212.1990-0")]; + char stringpool_str947[sizeof("IBM-EUCJP")]; + char stringpool_str958[sizeof("MACHEBREW")]; + char stringpool_str963[sizeof("IBM-EUCTW")]; + char stringpool_str978[sizeof("MS_KANJI")]; + char stringpool_str984[sizeof("CSEUCPKDFMTJAPANESE")]; + char stringpool_str1026[sizeof("WINBALTRIM")]; + char stringpool_str1039[sizeof("CSISO87JISX0208")]; + }; +static const struct stringpool_t stringpool_contents = + { + "C99", + "CN", + "L1", + "L6", + "CHAR", + "CP949", + "L4", + "L5", + "R8", + "L2", + "L8", + "CP819", + "866", + "L3", + "CP154", + "CP866", + "CP1251", + "CP1131", + "CP936", + "CP1361", + "HZ", + "CP1256", + "862", + "CP1254", + "CP862", + "CP1255", + "CP932", + "CP1252", + "CP1258", + "EUCCN", + "EUC-CN", + "PT154", + "CP1253", + "CP1133", + "L10", + "RK1048", + "CP50221", + "UHC", + "CP950", + "US", + "850", + "ISO646-CN", + "SJIS", + "CP1250", + "CP850", + "UCS-4", + "CSUCS4", + "UCS-2", + "PTCP154", + "GB2312", + "ISO8859-9", + "ISO-8859-9", + "ISO_8859-9", + "ISO8859-1", + "ISO-8859-1", + "ISO_8859-1", + "ISO8859-11", + "ISO-8859-11", + "ISO_8859-11", + "ISO8859-6", + "ISO-8859-6", + "ISO_8859-6", + "ISO8859-16", + "ISO-8859-16", + "ISO_8859-16", + "ISO_8859-16:2001", + "ISO8859-4", + "ISO-8859-4", + "ISO_8859-4", + "ISO8859-14", + "ISO-8859-14", + "ISO_8859-14", + "ISO8859-5", + "ISO-8859-5", + "ISO_8859-5", + "ISO8859-15", + "ISO-8859-15", + "ISO_8859-15", + "ISO8859-2", + "ISO-8859-2", + "ISO_8859-2", + "TCVN", + "ISO-IR-199", + "ISO_8859-14:1998", + "ISO8859-8", + "ISO-8859-8", + "ISO_8859-8", + "ISO_8859-15:1998", + "ISO-IR-6", + "L7", + "ISO-IR-149", + "ISO-2022-CN", + "ISO-IR-159", + "CYRILLIC", + "ISO-IR-166", + "ISO-IR-14", + "ISO8859-3", + "ISO-8859-3", + "ISO_8859-3", + "ISO8859-13", + "ISO-8859-13", + "ISO_8859-13", + "CSISO2022CN", + "MAC", + "ISO-IR-126", + "ISO-IR-144", + "ISO-IR-165", + "ISO_8859-10:1992", + "LATIN-9", + "LATIN1", + "GB_1988-80", + "ISO-IR-226", + "CYRILLIC-ASIAN", + "LATIN6", + "ISO-IR-109", + "CP874", + "ISO646-US", + "ISO-IR-101", + "ISO-IR-148", + "ISO-IR-58", + "LATIN4", + "MS-CYRL", + "ISO8859-10", + "ISO-8859-10", + "ISO_8859-10", + "TIS620", + "TIS-620", + "GB_2312-80", + "LATIN5", + "ELOT_928", + "MS936", + "LATIN2", + "GB18030", + "UTF-16", + "ISO-IR-138", + "UCS-4LE", + "LATIN8", + "ROMAN8", + "UCS-2LE", + "CSPTCP154", + "GEORGIAN-ACADEMY", + "EUCKR", + "EUC-KR", + "ISO-10646-UCS-4", + "X0212", + "KSC_5601", + "LATIN3", + "ISO-IR-110", + "ASCII", + "ISO-10646-UCS-2", + "UTF-8", + "KS_C_5601-1989", + "KOREAN", + "BIG5", + "BIG-5", + "UNICODE-1-1", + "X0201", + "TIS620-0", + "CSUNICODE11", + "CSASCII", + "KZ-1048", + "ISO-IR-203", + "UTF-32", + "MULELAO-1", + "CHINESE", + "ARABIC", + "CSKZ1048", + "HP-ROMAN8", + "ECMA-114", + "LATIN10", + "KOI8-R", + "GEORGIAN-PS", + "CSKOI8R", + "ISO-2022-CN-EXT", + "ISO-IR-100", + "IBM-921", + "IBM819", + "X0208", + "ISO_8859-9:1989", + "ECMA-118", + "IBM866", + "IBM-1131", + "CSISOLATIN1", + "VISCII", + "CSGB2312", + "CSISOLATIN6", + "CSISOLATINCYRILLIC", + "CSUNICODE", + "CSISOLATINARABIC", + "CSISOLATIN4", + "ISO_8859-4:1988", + "IBM862", + "ISO_8859-5:1988", + "IBM-932", + "CSISOLATIN5", + "CSHPROMAN8", + "IBM-1252", + "ISO_8859-8:1988", + "CSISOLATIN2", + "CSEUCKR", + "STRK1048-2002", + "ISO_8859-3:1988", + "ISO-IR-179", + "CSBIG5", + "CN-BIG5", + "ISO-CELTIC", + "HZ-GB-2312", + "UTF-16LE", + "ISO-2022-KR", + "US-ASCII", + "CSISOLATIN3", + "CSISO2022KR", + "MS-EE", + "UCS-4-INTERNAL", + "MS-ANSI", + "TCVN5712-1", + "CP1257", + "CP367", + "UCS-2-INTERNAL", + "IBM850", + "IBM-850", + "TCVN-5712", + "UTF-32LE", + "MACCYRILLIC", + "TIS620.2529-1", + "MACICELAND", + "JP", + "CSVISCII", + "MACROMAN", + "GREEK8", + "VISCII1.1-1", + "UCS-4BE", + "IBM-CP1133", + "ISO_646.IRV:1991", + "MACCROATIAN", + "UCS-2BE", + "ARMSCII-8", + "CN-GB", + "WINDOWS-1251", + "JAVA", + "WINDOWS-1256", + "WINDOWS-936", + "UCS-4-SWAPPED", + "WINDOWS-1254", + "GBK", + "WINDOWS-1255", + "TIS620.2533-1", + "UCS-2-SWAPPED", + "WINDOWS-1252", + "KS_C_5601-1987", + "CN-GB-ISOIR165", + "WINDOWS-1258", + "IBM-EUCCN", + "JIS_C6226-1983", + "UNICODE-1-1-UTF-7", + "CSKSC56011987", + "WINDOWS-1253", + "CSUNICODE11UTF7", + "WCHAR_T", + "JIS_C6220-1969-RO", + "CSISO58GB231280", + "ASMO-708", + "WINDOWS-1250", + "KOI8-U", + "KOI8-RU", + "TIS620.2533-0", + "MS-HEBR", + "ISO_8859-1:1987", + "MACARABIC", + "ISO_8859-6:1987", + "MACINTOSH", + "CSPC862LATINHEBREW", + "ISO8859-7", + "ISO-8859-7", + "ISO_8859-7", + "CSIBM866", + "ISO_8859-2:1987", + "CSMACINTOSH", + "JIS0208", + "MACROMANIA", + "ISO_8859-7:2003", + "KOI8-T", + "EUCJP", + "EUC-JP", + "BIG5HKSCS", + "BIG5-HKSCS", + "MACCENTRALEUROPE", + "MACTHAI", + "ANSI_X3.4-1986", + "EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE", + "EUCTW", + "EUC-TW", + "CSISOLATINHEBREW", + "UTF-16BE", + "ISO-IR-57", + "ANSI_X3.4-1968", + "ISO-IR-157", + "ISO-IR-127", + "ISO-IR-87", + "CSPC850MULTILINGUAL", + "CSISO57GB1988", + "ISO646-JP", + "LATIN7", + "GREEK", + "CSISOLATINGREEK", + "CSISO14JISC6220RO", + "UTF-32BE", + "MS-ARAB", + "TCVN5712-1:1993", + "UTF-7", + "ISO-2022-JP-1", + "ISO-2022-JP-MS", + "ISO-2022-JP-2", + "WINDOWS-1257", + "NEXTSTEP", + "WINDOWS-874", + "CSISO2022JP2", + "CSISO159JISX02121990", + "IBM-EUCKR", + "CSEUCTW", + "ISO-2022-JP", + "UNICODELITTLE", + "BIGFIVE", + "BIG-FIVE", + "HEBREW", + "CSHALFWIDTHKATAKANA", + "CSISO2022JP", + "UNICODEBIG", + "ISO_8859-7:1987", + "IBM367", + "JIS_X0212", + "BIG5-HKSCS:1999", + "BIG5-HKSCS:2001", + "JIS_X0201", + "BIG5-HKSCS:2004", + "JISX0201-1976", + "BIG5-HKSCS:2008", + "MACUKRAINE", + "JIS_X0212-1990", + "JIS_X0208", + "JIS_X0208-1983", + "JIS_X0208-1990", + "MS-GREEK", + "MACGREEK", + "JOHAB", + "MACTURKISH", + "MS-TURK", + "SHIFT-JIS", + "SHIFT_JIS", + "CSSHIFTJIS", + "JIS_X0212.1990-0", + "IBM-EUCJP", + "MACHEBREW", + "IBM-EUCTW", + "MS_KANJI", + "CSEUCPKDFMTJAPANESE", + "WINBALTRIM", + "CSISO87JISX0208" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct alias aliases[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 51 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str5, ei_c99}, + {-1}, +#line 292 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str7, ei_iso646_cn}, + {-1}, {-1}, +#line 60 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str10, ei_iso8859_1}, + {-1}, {-1}, +#line 134 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str13, ei_iso8859_10}, + {-1}, +#line 368 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str15, ei_local_char}, +#line 362 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str16, ei_cp949}, +#line 84 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str17, ei_iso8859_4}, + {-1}, {-1}, {-1}, +#line 126 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str21, ei_iso8859_9}, +#line 231 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str22, ei_hp_roman8}, + {-1}, +#line 68 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str24, ei_iso8859_2}, + {-1}, {-1}, {-1}, +#line 152 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str28, ei_iso8859_14}, +#line 57 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str29, ei_iso8859_1}, + {-1}, {-1}, {-1}, +#line 210 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str33, ei_cp866}, + {-1}, {-1}, +#line 76 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str36, ei_iso8859_3}, + {-1}, {-1}, {-1}, +#line 240 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str40, ei_pt154}, + {-1}, +#line 208 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str42, ei_cp866}, +#line 175 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str43, ei_cp1251}, +#line 212 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str44, ei_cp1131}, +#line 332 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str45, ei_cp936}, + {-1}, +#line 365 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str47, ei_johab}, +#line 339 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str48, ei_hz}, +#line 191 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str49, ei_cp1256}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 206 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str55, ei_cp862}, + {-1}, +#line 185 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str57, ei_cp1254}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 204 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str64, ei_cp862}, +#line 188 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str65, ei_cp1255}, + {-1}, +#line 316 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str67, ei_cp932}, + {-1}, {-1}, {-1}, +#line 178 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str71, ei_cp1252}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 197 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str79, ei_cp1258}, +#line 326 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str80, ei_euc_cn}, +#line 325 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str81, ei_euc_cn}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 238 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str90, ei_pt154}, + {-1}, {-1}, {-1}, {-1}, +#line 182 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str95, ei_cp1253}, +#line 248 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str96, ei_cp1133}, +#line 166 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str97, ei_iso8859_16}, + {-1}, {-1}, {-1}, +#line 243 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str101, ei_rk1048}, +#line 324 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str102, ei_iso2022_jpms}, + {-1}, +#line 363 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str104, ei_cp949}, + {-1}, {-1}, {-1}, +#line 351 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str108, ei_cp950}, + {-1}, +#line 21 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str110, ei_ascii}, +#line 201 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str111, ei_cp850}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, +#line 290 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str124, ei_iso646_cn}, +#line 313 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str125, ei_sjis}, + {-1}, +#line 172 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str127, ei_cp1250}, +#line 199 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str128, ei_cp850}, + {-1}, {-1}, +#line 33 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str131, ei_ucs4}, + {-1}, {-1}, {-1}, {-1}, +#line 35 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str136, ei_ucs4}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 24 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str145, ei_ucs2}, +#line 239 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str146, ei_pt154}, + {-1}, {-1}, +#line 327 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str149, ei_euc_cn}, +#line 128 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str150, ei_iso8859_9}, +#line 121 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str151, ei_iso8859_9}, +#line 122 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str152, ei_iso8859_9}, + {-1}, +#line 62 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str154, ei_iso8859_1}, +#line 53 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str155, ei_iso8859_1}, +#line 54 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str156, ei_iso8859_1}, +#line 139 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str157, ei_iso8859_11}, +#line 137 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str158, ei_iso8859_11}, +#line 138 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str159, ei_iso8859_11}, +#line 102 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str160, ei_iso8859_6}, +#line 94 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str161, ei_iso8859_6}, +#line 95 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str162, ei_iso8859_6}, +#line 167 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str163, ei_iso8859_16}, +#line 161 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str164, ei_iso8859_16}, +#line 162 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str165, ei_iso8859_16}, + {-1}, +#line 163 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str167, ei_iso8859_16}, +#line 86 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str168, ei_iso8859_4}, +#line 79 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str169, ei_iso8859_4}, +#line 80 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str170, ei_iso8859_4}, +#line 154 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str171, ei_iso8859_14}, +#line 147 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str172, ei_iso8859_14}, +#line 148 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str173, ei_iso8859_14}, + {-1}, {-1}, +#line 93 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str176, ei_iso8859_5}, +#line 87 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str177, ei_iso8859_5}, +#line 88 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str178, ei_iso8859_5}, +#line 160 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str179, ei_iso8859_15}, +#line 155 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str180, ei_iso8859_15}, +#line 156 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str181, ei_iso8859_15}, +#line 70 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str182, ei_iso8859_2}, +#line 63 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str183, ei_iso8859_2}, +#line 64 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str184, ei_iso8859_2}, + {-1}, {-1}, +#line 262 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str187, ei_tcvn}, +#line 150 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str188, ei_iso8859_14}, +#line 149 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str189, ei_iso8859_14}, +#line 120 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str190, ei_iso8859_8}, +#line 114 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str191, ei_iso8859_8}, +#line 115 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str192, ei_iso8859_8}, +#line 157 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str193, ei_iso8859_15}, +#line 16 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str194, ei_ascii}, + {-1}, +#line 144 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str196, ei_iso8859_13}, +#line 303 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str197, ei_ksc5601}, + {-1}, +#line 336 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str199, ei_iso2022_cn}, + {-1}, +#line 287 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str201, ei_jisx0212}, +#line 91 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str202, ei_iso8859_5}, +#line 256 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str203, ei_tis620}, + {-1}, +#line 268 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str205, ei_iso646_jp}, +#line 78 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str206, ei_iso8859_3}, +#line 71 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str207, ei_iso8859_3}, +#line 72 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str208, ei_iso8859_3}, +#line 145 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str209, ei_iso8859_13}, +#line 140 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str210, ei_iso8859_13}, +#line 141 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str211, ei_iso8859_13}, +#line 337 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str212, ei_iso2022_cn}, +#line 216 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str213, ei_mac_roman}, +#line 107 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str214, ei_iso8859_7}, +#line 90 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str215, ei_iso8859_5}, + {-1}, {-1}, {-1}, +#line 298 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str219, ei_isoir165}, +#line 131 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str220, ei_iso8859_10}, + {-1}, +#line 159 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str222, ei_iso8859_15}, + {-1}, {-1}, +#line 59 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str225, ei_iso8859_1}, +#line 289 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str226, ei_iso646_cn}, + {-1}, +#line 164 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str228, ei_iso8859_16}, +#line 241 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str229, ei_pt154}, + {-1}, +#line 133 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str231, ei_iso8859_10}, +#line 74 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str232, ei_iso8859_3}, +#line 257 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str233, ei_cp874}, + {-1}, +#line 14 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str235, ei_ascii}, +#line 66 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str236, ei_iso8859_2}, +#line 124 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str237, ei_iso8859_9}, +#line 295 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str238, ei_gb2312}, +#line 83 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str239, ei_iso8859_4}, +#line 177 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str240, ei_cp1251}, +#line 136 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str241, ei_iso8859_10}, +#line 129 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str242, ei_iso8859_10}, +#line 130 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str243, ei_iso8859_10}, +#line 251 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str244, ei_tis620}, +#line 250 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str245, ei_tis620}, +#line 294 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str246, ei_gb2312}, +#line 125 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str247, ei_iso8859_9}, +#line 109 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str248, ei_iso8859_7}, +#line 333 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str249, ei_cp936}, + {-1}, {-1}, {-1}, +#line 67 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str253, ei_iso8859_2}, +#line 335 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str254, ei_gb18030}, +#line 38 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str255, ei_utf16}, +#line 117 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str256, ei_iso8859_8}, + {-1}, {-1}, {-1}, +#line 37 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str260, ei_ucs4le}, +#line 151 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str261, ei_iso8859_14}, + {-1}, {-1}, +#line 230 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str264, ei_hp_roman8}, + {-1}, {-1}, +#line 31 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str267, ei_ucs2le}, +#line 242 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str268, ei_pt154}, + {-1}, +#line 235 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str270, ei_georgian_academy}, +#line 359 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str271, ei_euc_kr}, +#line 358 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str272, ei_euc_kr}, + {-1}, +#line 34 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str274, ei_ucs4}, +#line 286 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str275, ei_jisx0212}, +#line 300 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str276, ei_ksc5601}, +#line 75 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str277, ei_iso8859_3}, +#line 82 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str278, ei_iso8859_4}, + {-1}, +#line 13 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str280, ei_ascii}, +#line 25 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str281, ei_ucs2}, +#line 23 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str282, ei_utf8}, +#line 302 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str283, ei_ksc5601}, + {-1}, +#line 305 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str285, ei_ksc5601}, +#line 345 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str286, ei_ces_big5}, +#line 346 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str287, ei_ces_big5}, +#line 29 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str288, ei_ucs2be}, +#line 273 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str289, ei_jisx0201}, +#line 252 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str290, ei_tis620}, + {-1}, {-1}, +#line 30 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str293, ei_ucs2be}, + {-1}, +#line 22 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str295, ei_ascii}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 245 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str301, ei_rk1048}, +#line 158 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str302, ei_iso8859_15}, +#line 41 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str303, ei_utf32}, + {-1}, +#line 247 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str305, ei_mulelao}, +#line 297 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str306, ei_gb2312}, +#line 100 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str307, ei_iso8859_6}, +#line 246 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str308, ei_rk1048}, +#line 229 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str309, ei_hp_roman8}, +#line 98 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str310, ei_iso8859_6}, + {-1}, +#line 165 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str312, ei_iso8859_16}, +#line 168 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str313, ei_koi8_r}, + {-1}, +#line 236 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str315, ei_georgian_ps}, +#line 169 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str316, ei_koi8_r}, + {-1}, +#line 338 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str318, ei_iso2022_cn_ext}, + {-1}, +#line 56 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str320, ei_iso8859_1}, +#line 146 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str321, ei_iso8859_13}, +#line 58 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str322, ei_iso8859_1}, + {-1}, {-1}, +#line 279 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str325, ei_jisx0208}, + {-1}, +#line 123 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str327, ei_iso8859_9}, + {-1}, {-1}, {-1}, {-1}, +#line 108 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str332, ei_iso8859_7}, + {-1}, {-1}, +#line 209 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str335, ei_cp866}, + {-1}, {-1}, +#line 213 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str338, ei_cp1131}, + {-1}, +#line 61 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str340, ei_iso8859_1}, + {-1}, +#line 259 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str342, ei_viscii}, + {-1}, +#line 329 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str344, ei_euc_cn}, + {-1}, +#line 135 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str346, ei_iso8859_10}, +#line 92 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str347, ei_iso8859_5}, + {-1}, {-1}, +#line 26 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str350, ei_ucs2}, + {-1}, +#line 101 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str352, ei_iso8859_6}, + {-1}, +#line 85 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str354, ei_iso8859_4}, + {-1}, +#line 81 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str356, ei_iso8859_4}, +#line 205 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str357, ei_cp862}, + {-1}, {-1}, +#line 89 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str360, ei_iso8859_5}, +#line 317 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str361, ei_cp932}, +#line 127 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str362, ei_iso8859_9}, + {-1}, +#line 232 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str364, ei_hp_roman8}, +#line 181 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str365, ei_cp1252}, + {-1}, +#line 116 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str367, ei_iso8859_8}, +#line 69 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str368, ei_iso8859_2}, + {-1}, {-1}, {-1}, +#line 360 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str372, ei_euc_kr}, + {-1}, +#line 244 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str374, ei_rk1048}, +#line 73 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str375, ei_iso8859_3}, +#line 142 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str376, ei_iso8859_13}, + {-1}, +#line 350 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str378, ei_ces_big5}, +#line 349 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str379, ei_ces_big5}, + {-1}, +#line 153 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str381, ei_iso8859_14}, + {-1}, {-1}, {-1}, {-1}, +#line 340 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str386, ei_hz}, + {-1}, +#line 40 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str388, ei_utf16le}, + {-1}, +#line 366 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str390, ei_iso2022_kr}, +#line 12 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str391, ei_ascii}, +#line 77 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str392, ei_iso8859_3}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 367 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str403, ei_iso2022_kr}, + {-1}, {-1}, +#line 174 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str406, ei_cp1250}, + {-1}, {-1}, {-1}, {-1}, +#line 49 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str411, ei_ucs4internal}, +#line 180 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str412, ei_cp1252}, +#line 264 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str413, ei_tcvn}, + {-1}, +#line 194 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str415, ei_cp1257}, +#line 19 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str416, ei_ascii}, + {-1}, +#line 47 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str418, ei_ucs2internal}, + {-1}, {-1}, +#line 200 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str421, ei_cp850}, +#line 203 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str422, ei_cp850}, + {-1}, +#line 263 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str424, ei_tcvn}, +#line 43 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str425, ei_utf32le}, +#line 222 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str426, ei_mac_cyrillic}, + {-1}, +#line 253 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str428, ei_tis620}, +#line 219 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str429, ei_mac_iceland}, +#line 269 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str430, ei_iso646_jp}, + {-1}, {-1}, {-1}, +#line 261 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str434, ei_viscii}, + {-1}, {-1}, +#line 214 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str437, ei_mac_roman}, + {-1}, {-1}, +#line 110 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str440, ei_iso8859_7}, +#line 260 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str441, ei_viscii}, + {-1}, {-1}, {-1}, +#line 36 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str445, ei_ucs4be}, +#line 249 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str446, ei_cp1133}, +#line 15 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str447, ei_ascii}, + {-1}, {-1}, {-1}, +#line 220 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str451, ei_mac_croatian}, +#line 27 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str452, ei_ucs2be}, +#line 234 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str453, ei_armscii_8}, +#line 328 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str454, ei_euc_cn}, + {-1}, +#line 176 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str456, ei_cp1251}, +#line 52 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str457, ei_java}, + {-1}, +#line 192 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str459, ei_cp1256}, +#line 334 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str460, ei_cp936}, + {-1}, +#line 50 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str462, ei_ucs4swapped}, +#line 186 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str463, ei_cp1254}, + {-1}, {-1}, +#line 331 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str466, ei_ces_gbk}, +#line 189 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str467, ei_cp1255}, +#line 255 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str468, ei_tis620}, +#line 48 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str469, ei_ucs2swapped}, +#line 179 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str470, ei_cp1252}, +#line 301 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str471, ei_ksc5601}, +#line 299 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str472, ei_isoir165}, + {-1}, +#line 198 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str474, ei_cp1258}, +#line 330 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str475, ei_euc_cn}, +#line 281 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str476, ei_jisx0208}, + {-1}, {-1}, {-1}, +#line 45 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str480, ei_utf7}, +#line 304 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str481, ei_ksc5601}, +#line 183 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str482, ei_cp1253}, +#line 46 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str483, ei_utf7}, +#line 369 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str484, ei_local_wchar_t}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 266 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str490, ei_iso646_jp}, + {-1}, {-1}, +#line 296 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str493, ei_gb2312}, + {-1}, +#line 99 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str495, ei_iso8859_6}, + {-1}, {-1}, +#line 173 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str498, ei_cp1250}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 170 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str507, ei_koi8_u}, +#line 171 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str508, ei_koi8_ru}, + {-1}, +#line 254 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str510, ei_tis620}, +#line 190 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str511, ei_cp1255}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 55 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str517, ei_iso8859_1}, +#line 227 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str518, ei_mac_arabic}, + {-1}, +#line 96 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str520, ei_iso8859_6}, +#line 215 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str521, ei_mac_roman}, + {-1}, {-1}, {-1}, +#line 207 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str525, ei_cp862}, +#line 113 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str526, ei_iso8859_7}, +#line 103 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str527, ei_iso8859_7}, +#line 104 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str528, ei_iso8859_7}, + {-1}, +#line 211 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str530, ei_cp866}, +#line 65 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str531, ei_iso8859_2}, + {-1}, {-1}, +#line 217 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str534, ei_mac_roman}, + {-1}, {-1}, {-1}, +#line 278 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str538, ei_jisx0208}, + {-1}, {-1}, {-1}, +#line 221 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str542, ei_mac_romania}, +#line 106 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str543, ei_iso8859_7}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 237 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str549, ei_koi8_t}, + {-1}, {-1}, +#line 307 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str552, ei_euc_jp}, +#line 306 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str553, ei_euc_jp}, +#line 356 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str554, ei_big5hkscs2008}, +#line 355 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str555, ei_big5hkscs2008}, + {-1}, +#line 218 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str557, ei_mac_centraleurope}, + {-1}, {-1}, +#line 228 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str560, ei_mac_thai}, +#line 18 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str561, ei_ascii}, + {-1}, {-1}, {-1}, +#line 308 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str565, ei_euc_jp}, + {-1}, {-1}, +#line 342 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str568, ei_euc_tw}, +#line 341 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str569, ei_euc_tw}, + {-1}, {-1}, +#line 119 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str572, ei_iso8859_8}, +#line 39 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str573, ei_utf16be}, +#line 291 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str574, ei_iso646_cn}, + {-1}, +#line 17 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str576, ei_ascii}, +#line 132 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str577, ei_iso8859_10}, + {-1}, {-1}, +#line 97 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str580, ei_iso8859_6}, +#line 280 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str581, ei_jisx0208}, + {-1}, {-1}, {-1}, +#line 202 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str585, ei_cp850}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 293 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str593, ei_iso646_cn}, + {-1}, {-1}, +#line 267 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str596, ei_iso646_jp}, +#line 143 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str597, ei_iso8859_13}, +#line 111 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str598, ei_iso8859_7}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 112 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str604, ei_iso8859_7}, + {-1}, +#line 270 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str606, ei_iso646_jp}, + {-1}, {-1}, {-1}, +#line 42 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str610, ei_utf32be}, + {-1}, {-1}, +#line 193 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str613, ei_cp1256}, +#line 265 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str614, ei_tcvn}, + {-1}, {-1}, {-1}, +#line 44 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str618, ei_utf7}, + {-1}, {-1}, {-1}, {-1}, +#line 320 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str623, ei_iso2022_jp1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 323 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str633, ei_iso2022_jpms}, + {-1}, {-1}, {-1}, +#line 321 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str637, ei_iso2022_jp2}, + {-1}, {-1}, {-1}, {-1}, +#line 195 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str642, ei_cp1257}, + {-1}, {-1}, {-1}, {-1}, +#line 233 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str647, ei_nextstep}, +#line 258 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str648, ei_cp874}, +#line 322 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str649, ei_iso2022_jp2}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 288 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str655, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 361 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str666, ei_euc_kr}, + {-1}, {-1}, +#line 343 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str669, ei_euc_tw}, + {-1}, +#line 318 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str671, ei_iso2022_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 32 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str679, ei_ucs2le}, +#line 348 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str680, ei_ces_big5}, +#line 347 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str681, ei_ces_big5}, +#line 118 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str682, ei_iso8859_8}, +#line 274 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str683, ei_jisx0201}, +#line 319 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str684, ei_iso2022_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 28 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str690, ei_ucs2be}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, +#line 105 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str703, ei_iso8859_7}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 20 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str709, ei_ascii}, + {-1}, +#line 283 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str711, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 352 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str719, ei_big5hkscs1999}, + {-1}, +#line 353 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str721, ei_big5hkscs2001}, + {-1}, {-1}, {-1}, +#line 271 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str725, ei_jisx0201}, + {-1}, {-1}, +#line 354 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str728, ei_big5hkscs2004}, + {-1}, {-1}, {-1}, {-1}, +#line 272 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str733, ei_jisx0201}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 357 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str739, ei_big5hkscs2008}, + {-1}, {-1}, {-1}, {-1}, +#line 223 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str744, ei_mac_ukraine}, + {-1}, +#line 285 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str746, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 275 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str761, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 276 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str776, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 277 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str792, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 184 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str807, ei_cp1253}, + {-1}, +#line 224 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str809, ei_mac_greek}, + {-1}, {-1}, {-1}, {-1}, +#line 364 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str814, ei_johab}, +#line 225 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str815, ei_mac_turkish}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 187 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str826, ei_cp1254}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 312 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str852, ei_sjis}, +#line 311 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str853, ei_sjis}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 315 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str897, ei_sjis}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 284 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str922, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 310 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str947, ei_euc_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 226 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str958, ei_mac_hebrew}, + {-1}, {-1}, {-1}, {-1}, +#line 344 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str963, ei_euc_tw}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 314 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str978, ei_sjis}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 309 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str984, ei_euc_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 196 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str1026, ei_cp1257}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, +#line 282 "lib/aliases_sysaix.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str1039, ei_jisx0208} + }; + +static const struct alias * +aliases_lookup (register const char *str, register size_t len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register unsigned int key = aliases_hash (str, len); + + if (key <= MAX_HASH_VALUE) + { + register int o = aliases[key].name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &aliases[key]; + } + } + } + return 0; +} diff --git a/jni/parted/libiconv/lib/aliases_syshpux.h b/jni/parted/libiconv/lib/aliases_syshpux.h new file mode 100755 index 0000000..b54cc7c --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_syshpux.h @@ -0,0 +1,1819 @@ +/* ANSI-C code produced by gperf version 3.2 */ +/* Command-line: gperf -m 10 lib/aliases_syshpux.gperf */ +/* Computed positions: -k'1,3-11,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "lib/aliases_syshpux.gperf" +struct alias { int name; unsigned int encoding_index; }; + +#define TOTAL_KEYWORDS 359 +#define MIN_WORD_LENGTH 2 +#define MAX_WORD_LENGTH 45 +#define MIN_HASH_VALUE 19 +#define MAX_HASH_VALUE 1033 +/* maximum key range = 1015, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +aliases_hash (register const char *str, register size_t len) +{ + static const unsigned short asso_values[] = + { + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 2, 22, 1034, 56, 4, + 36, 62, 23, 18, 11, 100, 30, 3, 115, 1034, + 1034, 1034, 1034, 1034, 1034, 62, 170, 101, 3, 35, + 78, 78, 169, 3, 375, 55, 16, 149, 18, 8, + 3, 1034, 2, 4, 161, 210, 136, 158, 191, 6, + 5, 1034, 1034, 1034, 1034, 3, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034 + }; + register unsigned int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[10]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 10: + hval += asso_values[(unsigned char)str[9]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 9: + hval += asso_values[(unsigned char)str[8]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 8: + hval += asso_values[(unsigned char)str[7]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 7: + hval += asso_values[(unsigned char)str[6]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 6: + hval += asso_values[(unsigned char)str[5]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 5: + hval += asso_values[(unsigned char)str[4]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 4: + hval += asso_values[(unsigned char)str[3]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 3: + hval += asso_values[(unsigned char)str[2]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 2: + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str19[sizeof("SJIS")]; + char stringpool_str22[sizeof("L1")]; + char stringpool_str29[sizeof("L6")]; + char stringpool_str34[sizeof("R8")]; + char stringpool_str36[sizeof("L5")]; + char stringpool_str41[sizeof("L4")]; + char stringpool_str43[sizeof("ISO-IR-199")]; + char stringpool_str48[sizeof("L8")]; + char stringpool_str50[sizeof("ISO-IR-6")]; + char stringpool_str54[sizeof("L2")]; + char stringpool_str55[sizeof("866")]; + char stringpool_str58[sizeof("ISO-IR-159")]; + char stringpool_str63[sizeof("ISO-IR-149")]; + char stringpool_str67[sizeof("ISO-IR-166")]; + char stringpool_str76[sizeof("PT154")]; + char stringpool_str79[sizeof("ISO-IR-14")]; + char stringpool_str80[sizeof("L3")]; + char stringpool_str81[sizeof("ISO-IR-165")]; + char stringpool_str92[sizeof("ISO-IR-126")]; + char stringpool_str96[sizeof("ISO-IR-109")]; + char stringpool_str98[sizeof("ISO-IR-101")]; + char stringpool_str100[sizeof("KOI8-R")]; + char stringpool_str103[sizeof("ISO-IR-144")]; + char stringpool_str105[sizeof("862")]; + char stringpool_str106[sizeof("ISO88599")]; + char stringpool_str107[sizeof("ISO-IR-58")]; + char stringpool_str108[sizeof("ISO88591")]; + char stringpool_str109[sizeof("ISO8859-9")]; + char stringpool_str110[sizeof("C99")]; + char stringpool_str111[sizeof("ISO8859-1")]; + char stringpool_str112[sizeof("ISO-8859-9")]; + char stringpool_str113[sizeof("ISO_8859-9")]; + char stringpool_str114[sizeof("ISO-8859-1")]; + char stringpool_str115[sizeof("ISO_8859-1")]; + char stringpool_str116[sizeof("ISO8859-11")]; + char stringpool_str117[sizeof("ISO-IR-148")]; + char stringpool_str118[sizeof("L7")]; + char stringpool_str119[sizeof("ISO-8859-11")]; + char stringpool_str120[sizeof("ISO_8859-11")]; + char stringpool_str121[sizeof("CN")]; + char stringpool_str122[sizeof("ISO88596")]; + char stringpool_str124[sizeof("ISO-IR-226")]; + char stringpool_str125[sizeof("ISO8859-6")]; + char stringpool_str128[sizeof("ISO-8859-6")]; + char stringpool_str129[sizeof("ISO_8859-6")]; + char stringpool_str130[sizeof("ISO8859-16")]; + char stringpool_str131[sizeof("L10")]; + char stringpool_str132[sizeof("ISO_8859-16:2001")]; + char stringpool_str133[sizeof("ISO-8859-16")]; + char stringpool_str134[sizeof("ISO_8859-16")]; + char stringpool_str136[sizeof("ISO88595")]; + char stringpool_str138[sizeof("CP949")]; + char stringpool_str139[sizeof("ISO8859-5")]; + char stringpool_str140[sizeof("ISO-IR-179")]; + char stringpool_str141[sizeof("ISO885915")]; + char stringpool_str142[sizeof("ISO-8859-5")]; + char stringpool_str143[sizeof("ISO_8859-5")]; + char stringpool_str144[sizeof("ISO8859-15")]; + char stringpool_str145[sizeof("850")]; + char stringpool_str146[sizeof("CP819")]; + char stringpool_str147[sizeof("ISO-8859-15")]; + char stringpool_str148[sizeof("ISO_8859-15")]; + char stringpool_str149[sizeof("ISO8859-4")]; + char stringpool_str150[sizeof("ISO-IR-110")]; + char stringpool_str151[sizeof("RK1048")]; + char stringpool_str152[sizeof("ISO-8859-4")]; + char stringpool_str153[sizeof("ISO_8859-4")]; + char stringpool_str154[sizeof("ISO8859-14")]; + char stringpool_str156[sizeof("ISO-IR-138")]; + char stringpool_str157[sizeof("ISO-8859-14")]; + char stringpool_str158[sizeof("ISO_8859-14")]; + char stringpool_str160[sizeof("ISO88598")]; + char stringpool_str163[sizeof("ISO8859-8")]; + char stringpool_str165[sizeof("ISO_8859-15:1998")]; + char stringpool_str166[sizeof("ISO-8859-8")]; + char stringpool_str167[sizeof("ISO_8859-8")]; + char stringpool_str169[sizeof("CP866")]; + char stringpool_str170[sizeof("ISO_8859-14:1998")]; + char stringpool_str171[sizeof("CHAR")]; + char stringpool_str172[sizeof("ISO88592")]; + char stringpool_str173[sizeof("CP1251")]; + char stringpool_str174[sizeof("CP154")]; + char stringpool_str175[sizeof("ISO8859-2")]; + char stringpool_str176[sizeof("HZ")]; + char stringpool_str177[sizeof("ASCII")]; + char stringpool_str178[sizeof("ISO-8859-2")]; + char stringpool_str179[sizeof("ISO_8859-2")]; + char stringpool_str182[sizeof("PTCP154")]; + char stringpool_str185[sizeof("CP1131")]; + char stringpool_str187[sizeof("CP1256")]; + char stringpool_str191[sizeof("GBK")]; + char stringpool_str192[sizeof("CP1361")]; + char stringpool_str193[sizeof("CP936")]; + char stringpool_str196[sizeof("KOREAN")]; + char stringpool_str198[sizeof("IBM819")]; + char stringpool_str200[sizeof("EUCKR")]; + char stringpool_str201[sizeof("CP1255")]; + char stringpool_str202[sizeof("ISO-IR-100")]; + char stringpool_str203[sizeof("EUC-KR")]; + char stringpool_str204[sizeof("ISO646-CN")]; + char stringpool_str207[sizeof("KZ-1048")]; + char stringpool_str208[sizeof("CSKOI8R")]; + char stringpool_str209[sizeof("ISO_8859-10:1992")]; + char stringpool_str211[sizeof("CP1254")]; + char stringpool_str212[sizeof("LATIN1")]; + char stringpool_str213[sizeof("LATIN-9")]; + char stringpool_str216[sizeof("US")]; + char stringpool_str219[sizeof("CP862")]; + char stringpool_str220[sizeof("ISO8859-10")]; + char stringpool_str221[sizeof("IBM866")]; + char stringpool_str223[sizeof("ISO-8859-10")]; + char stringpool_str224[sizeof("ISO_8859-10")]; + char stringpool_str225[sizeof("CP1258")]; + char stringpool_str226[sizeof("LATIN6")]; + char stringpool_str227[sizeof("ISO8859-3")]; + char stringpool_str230[sizeof("ISO-8859-3")]; + char stringpool_str231[sizeof("ISO_8859-3")]; + char stringpool_str232[sizeof("ISO8859-13")]; + char stringpool_str233[sizeof("ISO_8859-9:1989")]; + char stringpool_str235[sizeof("ISO-8859-13")]; + char stringpool_str236[sizeof("ISO_8859-13")]; + char stringpool_str237[sizeof("CP1252")]; + char stringpool_str238[sizeof("CHINESE")]; + char stringpool_str239[sizeof("CP950")]; + char stringpool_str240[sizeof("LATIN5")]; + char stringpool_str241[sizeof("MS936")]; + char stringpool_str242[sizeof("ISO_646.IRV:1991")]; + char stringpool_str243[sizeof("CP932")]; + char stringpool_str246[sizeof("ISO-IR-203")]; + char stringpool_str247[sizeof("ISO-IR-57")]; + char stringpool_str248[sizeof("MS-ANSI")]; + char stringpool_str249[sizeof("ISO-2022-KR")]; + char stringpool_str250[sizeof("LATIN4")]; + char stringpool_str252[sizeof("ISO-IR-157")]; + char stringpool_str256[sizeof("VISCII")]; + char stringpool_str258[sizeof("GB2312")]; + char stringpool_str259[sizeof("ISO-IR-87")]; + char stringpool_str260[sizeof("KSC_5601")]; + char stringpool_str261[sizeof("MS-EE")]; + char stringpool_str262[sizeof("CP50221")]; + char stringpool_str263[sizeof("GREEK")]; + char stringpool_str264[sizeof("LATIN8")]; + char stringpool_str266[sizeof("CP850")]; + char stringpool_str267[sizeof("UCS-4")]; + char stringpool_str269[sizeof("GREEK8")]; + char stringpool_str270[sizeof("ISO-IR-127")]; + char stringpool_str271[sizeof("IBM862")]; + char stringpool_str273[sizeof("GEORGIAN-PS")]; + char stringpool_str274[sizeof("KS_C_5601-1989")]; + char stringpool_str275[sizeof("ISO_8859-5:1988")]; + char stringpool_str276[sizeof("LATIN2")]; + char stringpool_str277[sizeof("CP1250")]; + char stringpool_str278[sizeof("EUCCN")]; + char stringpool_str280[sizeof("ISO_8859-4:1988")]; + char stringpool_str281[sizeof("EUC-CN")]; + char stringpool_str282[sizeof("CP874")]; + char stringpool_str284[sizeof("CSASCII")]; + char stringpool_str285[sizeof("ISO646-US")]; + char stringpool_str287[sizeof("ISO_8859-8:1988")]; + char stringpool_str288[sizeof("BIG5")]; + char stringpool_str289[sizeof("CP1253")]; + char stringpool_str291[sizeof("BIG-5")]; + char stringpool_str293[sizeof("UCS-2")]; + char stringpool_str296[sizeof("X0201")]; + char stringpool_str297[sizeof("ROMAN8")]; + char stringpool_str298[sizeof("VISCII1.1-1")]; + char stringpool_str299[sizeof("MS-CYRL")]; + char stringpool_str300[sizeof("ISO88597")]; + char stringpool_str301[sizeof("CP1133")]; + char stringpool_str302[sizeof("GB_1988-80")]; + char stringpool_str303[sizeof("ISO8859-7")]; + char stringpool_str305[sizeof("MULELAO-1")]; + char stringpool_str306[sizeof("ISO-8859-7")]; + char stringpool_str307[sizeof("ISO_8859-7")]; + char stringpool_str308[sizeof("X0212")]; + char stringpool_str310[sizeof("ECMA-114")]; + char stringpool_str312[sizeof("CSKZ1048")]; + char stringpool_str314[sizeof("ELOT_928")]; + char stringpool_str317[sizeof("STRK1048-2002")]; + char stringpool_str318[sizeof("IBM850")]; + char stringpool_str319[sizeof("ISO_8859-3:1988")]; + char stringpool_str321[sizeof("LATIN10")]; + char stringpool_str322[sizeof("UTF-16")]; + char stringpool_str324[sizeof("ECMA-118")]; + char stringpool_str327[sizeof("ISO-2022-CN")]; + char stringpool_str328[sizeof("LATIN3")]; + char stringpool_str330[sizeof("TIS620")]; + char stringpool_str331[sizeof("ISO_8859-1:1987")]; + char stringpool_str332[sizeof("UCS-4LE")]; + char stringpool_str333[sizeof("TIS-620")]; + char stringpool_str334[sizeof("HP15CN")]; + char stringpool_str337[sizeof("TCVN")]; + char stringpool_str338[sizeof("ISO_8859-6:1987")]; + char stringpool_str342[sizeof("CYRILLIC-ASIAN")]; + char stringpool_str345[sizeof("UCS-2LE")]; + char stringpool_str348[sizeof("X0208")]; + char stringpool_str349[sizeof("GB18030")]; + char stringpool_str350[sizeof("CSISO2022KR")]; + char stringpool_str351[sizeof("CYRILLIC")]; + char stringpool_str352[sizeof("UTF8")]; + char stringpool_str354[sizeof("MAC")]; + char stringpool_str355[sizeof("UTF-8")]; + char stringpool_str362[sizeof("CSVISCII")]; + char stringpool_str363[sizeof("ISO_8859-2:1987")]; + char stringpool_str365[sizeof("CP1257")]; + char stringpool_str368[sizeof("ISO-10646-UCS-4")]; + char stringpool_str371[sizeof("KS_C_5601-1987")]; + char stringpool_str373[sizeof("GB_2312-80")]; + char stringpool_str379[sizeof("CP367")]; + char stringpool_str380[sizeof("JP")]; + char stringpool_str381[sizeof("ISO-10646-UCS-2")]; + char stringpool_str387[sizeof("UNICODE-1-1")]; + char stringpool_str389[sizeof("ISO_8859-7:2003")]; + char stringpool_str390[sizeof("TIS620-0")]; + char stringpool_str393[sizeof("ARMSCII-8")]; + char stringpool_str394[sizeof("CSBIG5")]; + char stringpool_str395[sizeof("CSISOLATIN1")]; + char stringpool_str396[sizeof("US-ASCII")]; + char stringpool_str397[sizeof("CN-BIG5")]; + char stringpool_str399[sizeof("UTF-16LE")]; + char stringpool_str400[sizeof("TIS620.2529-1")]; + char stringpool_str401[sizeof("ANSI_X3.4-1986")]; + char stringpool_str404[sizeof("LATIN7")]; + char stringpool_str405[sizeof("CN-GB-ISOIR165")]; + char stringpool_str409[sizeof("CSISOLATIN6")]; + char stringpool_str415[sizeof("UHC")]; + char stringpool_str418[sizeof("KOI8-T")]; + char stringpool_str419[sizeof("MS-GREEK")]; + char stringpool_str420[sizeof("ANSI_X3.4-1968")]; + char stringpool_str423[sizeof("CSISOLATIN5")]; + char stringpool_str425[sizeof("WINDOWS-1251")]; + char stringpool_str427[sizeof("ISO_8859-7:1987")]; + char stringpool_str428[sizeof("CSISO2022CN")]; + char stringpool_str430[sizeof("UTF-32")]; + char stringpool_str431[sizeof("IBM367")]; + char stringpool_str432[sizeof("WINDOWS-1256")]; + char stringpool_str433[sizeof("CSISOLATIN4")]; + char stringpool_str436[sizeof("GEORGIAN-ACADEMY")]; + char stringpool_str439[sizeof("WINDOWS-1255")]; + char stringpool_str444[sizeof("WINDOWS-1254")]; + char stringpool_str445[sizeof("ASMO-708")]; + char stringpool_str446[sizeof("CSPTCP154")]; + char stringpool_str448[sizeof("ISO646-JP")]; + char stringpool_str449[sizeof("WINDOWS-936")]; + char stringpool_str451[sizeof("WINDOWS-1258")]; + char stringpool_str457[sizeof("WINDOWS-1252")]; + char stringpool_str459[sizeof("CSISOLATIN2")]; + char stringpool_str462[sizeof("IBM-CP1133")]; + char stringpool_str468[sizeof("CSUCS4")]; + char stringpool_str470[sizeof("CSKSC56011987")]; + char stringpool_str474[sizeof("ISO-2022-CN-EXT")]; + char stringpool_str477[sizeof("WINDOWS-1250")]; + char stringpool_str479[sizeof("HP-ROMAN8")]; + char stringpool_str482[sizeof("UTF-32LE")]; + char stringpool_str483[sizeof("WINDOWS-1253")]; + char stringpool_str485[sizeof("TIS620.2533-1")]; + char stringpool_str486[sizeof("UCS-4BE")]; + char stringpool_str487[sizeof("UCS-4-SWAPPED")]; + char stringpool_str489[sizeof("UNICODE-1-1-UTF-7")]; + char stringpool_str490[sizeof("UCS-4-INTERNAL")]; + char stringpool_str493[sizeof("TCVN5712-1")]; + char stringpool_str494[sizeof("CSIBM866")]; + char stringpool_str495[sizeof("UTF-7")]; + char stringpool_str499[sizeof("UCS-2BE")]; + char stringpool_str500[sizeof("UCS-2-SWAPPED")]; + char stringpool_str501[sizeof("MACICELAND")]; + char stringpool_str502[sizeof("CSUNICODE11")]; + char stringpool_str503[sizeof("UCS-2-INTERNAL")]; + char stringpool_str505[sizeof("ARABIC")]; + char stringpool_str511[sizeof("CSISOLATIN3")]; + char stringpool_str513[sizeof("CSEUCKR")]; + char stringpool_str515[sizeof("MACROMAN")]; + char stringpool_str516[sizeof("KOI8-U")]; + char stringpool_str518[sizeof("MACGREEK")]; + char stringpool_str519[sizeof("KOI8-RU")]; + char stringpool_str520[sizeof("TCVN-5712")]; + char stringpool_str521[sizeof("WINDOWS-1257")]; + char stringpool_str522[sizeof("EUCJP")]; + char stringpool_str523[sizeof("CSUNICODE")]; + char stringpool_str524[sizeof("CSISOLATINGREEK")]; + char stringpool_str525[sizeof("EUC-JP")]; + char stringpool_str526[sizeof("CN-GB")]; + char stringpool_str531[sizeof("CSGB2312")]; + char stringpool_str532[sizeof("CSISO57GB1988")]; + char stringpool_str536[sizeof("MS-HEBR")]; + char stringpool_str537[sizeof("TIS620.2533-0")]; + char stringpool_str538[sizeof("WINDOWS-874")]; + char stringpool_str541[sizeof("ISO-CELTIC")]; + char stringpool_str542[sizeof("BIGFIVE")]; + char stringpool_str545[sizeof("BIG-FIVE")]; + char stringpool_str553[sizeof("UTF-16BE")]; + char stringpool_str555[sizeof("CSISOLATINARABIC")]; + char stringpool_str571[sizeof("ISO-2022-JP")]; + char stringpool_str574[sizeof("ISO-2022-JP-1")]; + char stringpool_str575[sizeof("ISO-2022-JP-MS")]; + char stringpool_str581[sizeof("CSISO58GB231280")]; + char stringpool_str582[sizeof("CSHPROMAN8")]; + char stringpool_str584[sizeof("NEXTSTEP")]; + char stringpool_str594[sizeof("JIS0208")]; + char stringpool_str596[sizeof("CSISOLATINCYRILLIC")]; + char stringpool_str599[sizeof("CSISO159JISX02121990")]; + char stringpool_str601[sizeof("EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE")]; + char stringpool_str602[sizeof("CSUNICODE11UTF7")]; + char stringpool_str605[sizeof("HZ-GB-2312")]; + char stringpool_str606[sizeof("ISO-2022-JP-2")]; + char stringpool_str610[sizeof("MACCYRILLIC")]; + char stringpool_str612[sizeof("BIG5HKSCS")]; + char stringpool_str615[sizeof("BIG5-HKSCS")]; + char stringpool_str618[sizeof("EUCTW")]; + char stringpool_str621[sizeof("EUC-TW")]; + char stringpool_str624[sizeof("MS-ARAB")]; + char stringpool_str626[sizeof("MACROMANIA")]; + char stringpool_str636[sizeof("UTF-32BE")]; + char stringpool_str639[sizeof("JAVA")]; + char stringpool_str641[sizeof("MS-TURK")]; + char stringpool_str643[sizeof("SHIFT-JIS")]; + char stringpool_str644[sizeof("SHIFT_JIS")]; + char stringpool_str651[sizeof("CSISO14JISC6220RO")]; + char stringpool_str653[sizeof("JIS_C6220-1969-RO")]; + char stringpool_str655[sizeof("MACTHAI")]; + char stringpool_str659[sizeof("JIS_C6226-1983")]; + char stringpool_str671[sizeof("TCVN5712-1:1993")]; + char stringpool_str672[sizeof("CSISO2022JP")]; + char stringpool_str676[sizeof("MS_KANJI")]; + char stringpool_str680[sizeof("MACUKRAINE")]; + char stringpool_str696[sizeof("MACCROATIAN")]; + char stringpool_str698[sizeof("HEBREW")]; + char stringpool_str699[sizeof("UNICODEBIG")]; + char stringpool_str700[sizeof("CSPC862LATINHEBREW")]; + char stringpool_str706[sizeof("CSISO2022JP2")]; + char stringpool_str719[sizeof("CSISOLATINHEBREW")]; + char stringpool_str723[sizeof("WCHAR_T")]; + char stringpool_str731[sizeof("MACCENTRALEUROPE")]; + char stringpool_str734[sizeof("BIG5-HKSCS:1999")]; + char stringpool_str735[sizeof("BIG5-HKSCS:2001")]; + char stringpool_str738[sizeof("JIS_X0201")]; + char stringpool_str749[sizeof("UNICODELITTLE")]; + char stringpool_str750[sizeof("JIS_X0212")]; + char stringpool_str754[sizeof("BIG5-HKSCS:2004")]; + char stringpool_str755[sizeof("JISX0201-1976")]; + char stringpool_str760[sizeof("MACARABIC")]; + char stringpool_str761[sizeof("BIG5-HKSCS:2008")]; + char stringpool_str781[sizeof("JIS_X0212-1990")]; + char stringpool_str790[sizeof("JIS_X0208")]; + char stringpool_str791[sizeof("MACINTOSH")]; + char stringpool_str803[sizeof("JIS_X0212.1990-0")]; + char stringpool_str827[sizeof("JIS_X0208-1990")]; + char stringpool_str833[sizeof("JIS_X0208-1983")]; + char stringpool_str864[sizeof("CSISO87JISX0208")]; + char stringpool_str880[sizeof("CSPC850MULTILINGUAL")]; + char stringpool_str898[sizeof("WINBALTRIM")]; + char stringpool_str912[sizeof("CSSHIFTJIS")]; + char stringpool_str931[sizeof("CSEUCTW")]; + char stringpool_str950[sizeof("CSEUCPKDFMTJAPANESE")]; + char stringpool_str951[sizeof("JOHAB")]; + char stringpool_str956[sizeof("CSMACINTOSH")]; + char stringpool_str986[sizeof("MACHEBREW")]; + char stringpool_str1001[sizeof("CSHALFWIDTHKATAKANA")]; + char stringpool_str1033[sizeof("MACTURKISH")]; + }; +static const struct stringpool_t stringpool_contents = + { + "SJIS", + "L1", + "L6", + "R8", + "L5", + "L4", + "ISO-IR-199", + "L8", + "ISO-IR-6", + "L2", + "866", + "ISO-IR-159", + "ISO-IR-149", + "ISO-IR-166", + "PT154", + "ISO-IR-14", + "L3", + "ISO-IR-165", + "ISO-IR-126", + "ISO-IR-109", + "ISO-IR-101", + "KOI8-R", + "ISO-IR-144", + "862", + "ISO88599", + "ISO-IR-58", + "ISO88591", + "ISO8859-9", + "C99", + "ISO8859-1", + "ISO-8859-9", + "ISO_8859-9", + "ISO-8859-1", + "ISO_8859-1", + "ISO8859-11", + "ISO-IR-148", + "L7", + "ISO-8859-11", + "ISO_8859-11", + "CN", + "ISO88596", + "ISO-IR-226", + "ISO8859-6", + "ISO-8859-6", + "ISO_8859-6", + "ISO8859-16", + "L10", + "ISO_8859-16:2001", + "ISO-8859-16", + "ISO_8859-16", + "ISO88595", + "CP949", + "ISO8859-5", + "ISO-IR-179", + "ISO885915", + "ISO-8859-5", + "ISO_8859-5", + "ISO8859-15", + "850", + "CP819", + "ISO-8859-15", + "ISO_8859-15", + "ISO8859-4", + "ISO-IR-110", + "RK1048", + "ISO-8859-4", + "ISO_8859-4", + "ISO8859-14", + "ISO-IR-138", + "ISO-8859-14", + "ISO_8859-14", + "ISO88598", + "ISO8859-8", + "ISO_8859-15:1998", + "ISO-8859-8", + "ISO_8859-8", + "CP866", + "ISO_8859-14:1998", + "CHAR", + "ISO88592", + "CP1251", + "CP154", + "ISO8859-2", + "HZ", + "ASCII", + "ISO-8859-2", + "ISO_8859-2", + "PTCP154", + "CP1131", + "CP1256", + "GBK", + "CP1361", + "CP936", + "KOREAN", + "IBM819", + "EUCKR", + "CP1255", + "ISO-IR-100", + "EUC-KR", + "ISO646-CN", + "KZ-1048", + "CSKOI8R", + "ISO_8859-10:1992", + "CP1254", + "LATIN1", + "LATIN-9", + "US", + "CP862", + "ISO8859-10", + "IBM866", + "ISO-8859-10", + "ISO_8859-10", + "CP1258", + "LATIN6", + "ISO8859-3", + "ISO-8859-3", + "ISO_8859-3", + "ISO8859-13", + "ISO_8859-9:1989", + "ISO-8859-13", + "ISO_8859-13", + "CP1252", + "CHINESE", + "CP950", + "LATIN5", + "MS936", + "ISO_646.IRV:1991", + "CP932", + "ISO-IR-203", + "ISO-IR-57", + "MS-ANSI", + "ISO-2022-KR", + "LATIN4", + "ISO-IR-157", + "VISCII", + "GB2312", + "ISO-IR-87", + "KSC_5601", + "MS-EE", + "CP50221", + "GREEK", + "LATIN8", + "CP850", + "UCS-4", + "GREEK8", + "ISO-IR-127", + "IBM862", + "GEORGIAN-PS", + "KS_C_5601-1989", + "ISO_8859-5:1988", + "LATIN2", + "CP1250", + "EUCCN", + "ISO_8859-4:1988", + "EUC-CN", + "CP874", + "CSASCII", + "ISO646-US", + "ISO_8859-8:1988", + "BIG5", + "CP1253", + "BIG-5", + "UCS-2", + "X0201", + "ROMAN8", + "VISCII1.1-1", + "MS-CYRL", + "ISO88597", + "CP1133", + "GB_1988-80", + "ISO8859-7", + "MULELAO-1", + "ISO-8859-7", + "ISO_8859-7", + "X0212", + "ECMA-114", + "CSKZ1048", + "ELOT_928", + "STRK1048-2002", + "IBM850", + "ISO_8859-3:1988", + "LATIN10", + "UTF-16", + "ECMA-118", + "ISO-2022-CN", + "LATIN3", + "TIS620", + "ISO_8859-1:1987", + "UCS-4LE", + "TIS-620", + "HP15CN", + "TCVN", + "ISO_8859-6:1987", + "CYRILLIC-ASIAN", + "UCS-2LE", + "X0208", + "GB18030", + "CSISO2022KR", + "CYRILLIC", + "UTF8", + "MAC", + "UTF-8", + "CSVISCII", + "ISO_8859-2:1987", + "CP1257", + "ISO-10646-UCS-4", + "KS_C_5601-1987", + "GB_2312-80", + "CP367", + "JP", + "ISO-10646-UCS-2", + "UNICODE-1-1", + "ISO_8859-7:2003", + "TIS620-0", + "ARMSCII-8", + "CSBIG5", + "CSISOLATIN1", + "US-ASCII", + "CN-BIG5", + "UTF-16LE", + "TIS620.2529-1", + "ANSI_X3.4-1986", + "LATIN7", + "CN-GB-ISOIR165", + "CSISOLATIN6", + "UHC", + "KOI8-T", + "MS-GREEK", + "ANSI_X3.4-1968", + "CSISOLATIN5", + "WINDOWS-1251", + "ISO_8859-7:1987", + "CSISO2022CN", + "UTF-32", + "IBM367", + "WINDOWS-1256", + "CSISOLATIN4", + "GEORGIAN-ACADEMY", + "WINDOWS-1255", + "WINDOWS-1254", + "ASMO-708", + "CSPTCP154", + "ISO646-JP", + "WINDOWS-936", + "WINDOWS-1258", + "WINDOWS-1252", + "CSISOLATIN2", + "IBM-CP1133", + "CSUCS4", + "CSKSC56011987", + "ISO-2022-CN-EXT", + "WINDOWS-1250", + "HP-ROMAN8", + "UTF-32LE", + "WINDOWS-1253", + "TIS620.2533-1", + "UCS-4BE", + "UCS-4-SWAPPED", + "UNICODE-1-1-UTF-7", + "UCS-4-INTERNAL", + "TCVN5712-1", + "CSIBM866", + "UTF-7", + "UCS-2BE", + "UCS-2-SWAPPED", + "MACICELAND", + "CSUNICODE11", + "UCS-2-INTERNAL", + "ARABIC", + "CSISOLATIN3", + "CSEUCKR", + "MACROMAN", + "KOI8-U", + "MACGREEK", + "KOI8-RU", + "TCVN-5712", + "WINDOWS-1257", + "EUCJP", + "CSUNICODE", + "CSISOLATINGREEK", + "EUC-JP", + "CN-GB", + "CSGB2312", + "CSISO57GB1988", + "MS-HEBR", + "TIS620.2533-0", + "WINDOWS-874", + "ISO-CELTIC", + "BIGFIVE", + "BIG-FIVE", + "UTF-16BE", + "CSISOLATINARABIC", + "ISO-2022-JP", + "ISO-2022-JP-1", + "ISO-2022-JP-MS", + "CSISO58GB231280", + "CSHPROMAN8", + "NEXTSTEP", + "JIS0208", + "CSISOLATINCYRILLIC", + "CSISO159JISX02121990", + "EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE", + "CSUNICODE11UTF7", + "HZ-GB-2312", + "ISO-2022-JP-2", + "MACCYRILLIC", + "BIG5HKSCS", + "BIG5-HKSCS", + "EUCTW", + "EUC-TW", + "MS-ARAB", + "MACROMANIA", + "UTF-32BE", + "JAVA", + "MS-TURK", + "SHIFT-JIS", + "SHIFT_JIS", + "CSISO14JISC6220RO", + "JIS_C6220-1969-RO", + "MACTHAI", + "JIS_C6226-1983", + "TCVN5712-1:1993", + "CSISO2022JP", + "MS_KANJI", + "MACUKRAINE", + "MACCROATIAN", + "HEBREW", + "UNICODEBIG", + "CSPC862LATINHEBREW", + "CSISO2022JP2", + "CSISOLATINHEBREW", + "WCHAR_T", + "MACCENTRALEUROPE", + "BIG5-HKSCS:1999", + "BIG5-HKSCS:2001", + "JIS_X0201", + "UNICODELITTLE", + "JIS_X0212", + "BIG5-HKSCS:2004", + "JISX0201-1976", + "MACARABIC", + "BIG5-HKSCS:2008", + "JIS_X0212-1990", + "JIS_X0208", + "MACINTOSH", + "JIS_X0212.1990-0", + "JIS_X0208-1990", + "JIS_X0208-1983", + "CSISO87JISX0208", + "CSPC850MULTILINGUAL", + "WINBALTRIM", + "CSSHIFTJIS", + "CSEUCTW", + "CSEUCPKDFMTJAPANESE", + "JOHAB", + "CSMACINTOSH", + "MACHEBREW", + "CSHALFWIDTHKATAKANA", + "MACTURKISH" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct alias aliases[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 317 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str19, ei_sjis}, + {-1}, {-1}, +#line 61 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str22, ei_iso8859_1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 142 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str29, ei_iso8859_10}, + {-1}, {-1}, {-1}, {-1}, +#line 236 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str34, ei_hp_roman8}, + {-1}, +#line 133 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str36, ei_iso8859_9}, + {-1}, {-1}, {-1}, {-1}, +#line 87 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str41, ei_iso8859_4}, + {-1}, +#line 157 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str43, ei_iso8859_14}, + {-1}, {-1}, {-1}, {-1}, +#line 159 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str48, ei_iso8859_14}, + {-1}, +#line 16 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str50, ei_ascii}, + {-1}, {-1}, {-1}, +#line 70 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str54, ei_iso8859_2}, +#line 216 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str55, ei_cp866}, + {-1}, {-1}, +#line 292 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str58, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, +#line 308 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str63, ei_ksc5601}, + {-1}, {-1}, {-1}, +#line 261 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str67, ei_tis620}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 243 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str76, ei_pt154}, + {-1}, {-1}, +#line 273 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str79, ei_iso646_jp}, +#line 79 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str80, ei_iso8859_3}, +#line 303 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str81, ei_isoir165}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 112 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str92, ei_iso8859_7}, + {-1}, {-1}, {-1}, +#line 77 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str96, ei_iso8859_3}, + {-1}, +#line 68 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str98, ei_iso8859_2}, + {-1}, +#line 176 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str100, ei_koi8_r}, + {-1}, {-1}, +#line 93 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str103, ei_iso8859_5}, + {-1}, +#line 212 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str105, ei_cp862}, +#line 136 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str106, ei_iso8859_9}, +#line 300 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str107, ei_gb2312}, +#line 64 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str108, ei_iso8859_1}, +#line 135 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str109, ei_iso8859_9}, +#line 52 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str110, ei_c99}, +#line 63 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str111, ei_iso8859_1}, +#line 128 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str112, ei_iso8859_9}, +#line 129 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str113, ei_iso8859_9}, +#line 54 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str114, ei_iso8859_1}, +#line 55 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str115, ei_iso8859_1}, +#line 147 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str116, ei_iso8859_11}, +#line 131 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str117, ei_iso8859_9}, +#line 152 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str118, ei_iso8859_13}, +#line 145 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str119, ei_iso8859_11}, +#line 146 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str120, ei_iso8859_11}, +#line 297 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str121, ei_iso646_cn}, +#line 107 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str122, ei_iso8859_6}, + {-1}, +#line 172 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str124, ei_iso8859_16}, +#line 106 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str125, ei_iso8859_6}, + {-1}, {-1}, +#line 98 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str128, ei_iso8859_6}, +#line 99 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str129, ei_iso8859_6}, +#line 175 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str130, ei_iso8859_16}, +#line 174 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str131, ei_iso8859_16}, +#line 171 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str132, ei_iso8859_16}, +#line 169 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str133, ei_iso8859_16}, +#line 170 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str134, ei_iso8859_16}, + {-1}, +#line 97 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str136, ei_iso8859_5}, + {-1}, +#line 363 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str138, ei_cp949}, +#line 96 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str139, ei_iso8859_5}, +#line 150 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str140, ei_iso8859_13}, +#line 168 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str141, ei_iso8859_15}, +#line 90 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str142, ei_iso8859_5}, +#line 91 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str143, ei_iso8859_5}, +#line 167 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str144, ei_iso8859_15}, +#line 208 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str145, ei_cp850}, +#line 58 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str146, ei_iso8859_1}, +#line 162 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str147, ei_iso8859_15}, +#line 163 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str148, ei_iso8859_15}, +#line 89 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str149, ei_iso8859_4}, +#line 85 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str150, ei_iso8859_4}, +#line 248 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str151, ei_rk1048}, +#line 82 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str152, ei_iso8859_4}, +#line 83 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str153, ei_iso8859_4}, +#line 161 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str154, ei_iso8859_14}, + {-1}, +#line 123 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str156, ei_iso8859_8}, +#line 154 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str157, ei_iso8859_14}, +#line 155 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str158, ei_iso8859_14}, + {-1}, +#line 127 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str160, ei_iso8859_8}, + {-1}, {-1}, +#line 126 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str163, ei_iso8859_8}, + {-1}, +#line 164 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str165, ei_iso8859_15}, +#line 120 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str166, ei_iso8859_8}, +#line 121 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str167, ei_iso8859_8}, + {-1}, +#line 214 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str169, ei_cp866}, +#line 156 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str170, ei_iso8859_14}, +#line 369 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str171, ei_local_char}, +#line 73 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str172, ei_iso8859_2}, +#line 183 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str173, ei_cp1251}, +#line 245 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str174, ei_pt154}, +#line 72 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str175, ei_iso8859_2}, +#line 342 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str176, ei_hz}, +#line 13 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str177, ei_ascii}, +#line 65 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str178, ei_iso8859_2}, +#line 66 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str179, ei_iso8859_2}, + {-1}, {-1}, +#line 244 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str182, ei_pt154}, + {-1}, {-1}, +#line 218 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str185, ei_cp1131}, + {-1}, +#line 198 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str187, ei_cp1256}, + {-1}, {-1}, {-1}, +#line 334 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str191, ei_ces_gbk}, +#line 366 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str192, ei_johab}, +#line 335 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str193, ei_cp936}, + {-1}, {-1}, +#line 310 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str196, ei_ksc5601}, + {-1}, +#line 59 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str198, ei_iso8859_1}, + {-1}, +#line 361 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str200, ei_euc_kr}, +#line 195 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str201, ei_cp1255}, +#line 57 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str202, ei_iso8859_1}, +#line 360 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str203, ei_euc_kr}, +#line 295 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str204, ei_iso646_cn}, + {-1}, {-1}, +#line 250 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str207, ei_rk1048}, +#line 177 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str208, ei_koi8_r}, +#line 139 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str209, ei_iso8859_10}, + {-1}, +#line 192 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str211, ei_cp1254}, +#line 60 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str212, ei_iso8859_1}, +#line 166 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str213, ei_iso8859_15}, + {-1}, {-1}, +#line 21 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str216, ei_ascii}, + {-1}, {-1}, +#line 210 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str219, ei_cp862}, +#line 144 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str220, ei_iso8859_10}, +#line 215 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str221, ei_cp866}, + {-1}, +#line 137 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str223, ei_iso8859_10}, +#line 138 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str224, ei_iso8859_10}, +#line 204 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str225, ei_cp1258}, +#line 141 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str226, ei_iso8859_10}, +#line 81 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str227, ei_iso8859_3}, + {-1}, {-1}, +#line 74 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str230, ei_iso8859_3}, +#line 75 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str231, ei_iso8859_3}, +#line 153 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str232, ei_iso8859_13}, +#line 130 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str233, ei_iso8859_9}, + {-1}, +#line 148 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str235, ei_iso8859_13}, +#line 149 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str236, ei_iso8859_13}, +#line 186 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str237, ei_cp1252}, +#line 302 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str238, ei_gb2312}, +#line 353 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str239, ei_cp950}, +#line 132 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str240, ei_iso8859_9}, +#line 336 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str241, ei_cp936}, +#line 15 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str242, ei_ascii}, +#line 320 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str243, ei_cp932}, + {-1}, {-1}, +#line 165 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str246, ei_iso8859_15}, +#line 296 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str247, ei_iso646_cn}, +#line 188 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str248, ei_cp1252}, +#line 367 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str249, ei_iso2022_kr}, +#line 86 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str250, ei_iso8859_4}, + {-1}, +#line 140 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str252, ei_iso8859_10}, + {-1}, {-1}, {-1}, +#line 264 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str256, ei_viscii}, + {-1}, +#line 330 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str258, ei_euc_cn}, +#line 285 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str259, ei_jisx0208}, +#line 305 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str260, ei_ksc5601}, +#line 182 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str261, ei_cp1250}, +#line 327 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str262, ei_iso2022_jpms}, +#line 116 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str263, ei_iso8859_7}, +#line 158 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str264, ei_iso8859_14}, + {-1}, +#line 206 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str266, ei_cp850}, +#line 34 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str267, ei_ucs4}, + {-1}, +#line 115 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str269, ei_iso8859_7}, +#line 101 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str270, ei_iso8859_6}, +#line 211 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str271, ei_cp862}, + {-1}, +#line 241 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str273, ei_georgian_ps}, +#line 307 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str274, ei_ksc5601}, +#line 92 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str275, ei_iso8859_5}, +#line 69 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str276, ei_iso8859_2}, +#line 180 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str277, ei_cp1250}, +#line 329 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str278, ei_euc_cn}, + {-1}, +#line 84 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str280, ei_iso8859_4}, +#line 328 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str281, ei_euc_cn}, +#line 262 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str282, ei_cp874}, + {-1}, +#line 22 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str284, ei_ascii}, +#line 14 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str285, ei_ascii}, + {-1}, +#line 122 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str287, ei_iso8859_8}, +#line 347 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str288, ei_ces_big5}, +#line 189 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str289, ei_cp1253}, + {-1}, +#line 348 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str291, ei_ces_big5}, + {-1}, +#line 25 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str293, ei_ucs2}, + {-1}, {-1}, +#line 278 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str296, ei_jisx0201}, +#line 235 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str297, ei_hp_roman8}, +#line 265 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str298, ei_viscii}, +#line 185 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str299, ei_cp1251}, +#line 119 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str300, ei_iso8859_7}, +#line 253 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str301, ei_cp1133}, +#line 294 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str302, ei_iso646_cn}, +#line 118 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str303, ei_iso8859_7}, + {-1}, +#line 252 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str305, ei_mulelao}, +#line 108 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str306, ei_iso8859_7}, +#line 109 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str307, ei_iso8859_7}, +#line 291 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str308, ei_jisx0212}, + {-1}, +#line 102 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str310, ei_iso8859_6}, + {-1}, +#line 251 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str312, ei_rk1048}, + {-1}, +#line 114 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str314, ei_iso8859_7}, + {-1}, {-1}, +#line 249 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str317, ei_rk1048}, +#line 207 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str318, ei_cp850}, +#line 76 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str319, ei_iso8859_3}, + {-1}, +#line 173 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str321, ei_iso8859_16}, +#line 39 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str322, ei_utf16}, + {-1}, +#line 113 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str324, ei_iso8859_7}, + {-1}, {-1}, +#line 339 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str327, ei_iso2022_cn}, +#line 78 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str328, ei_iso8859_3}, + {-1}, +#line 256 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str330, ei_tis620}, +#line 56 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str331, ei_iso8859_1}, +#line 38 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str332, ei_ucs4le}, +#line 255 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str333, ei_tis620}, +#line 333 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str334, ei_euc_cn}, + {-1}, {-1}, +#line 267 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str337, ei_tcvn}, +#line 100 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str338, ei_iso8859_6}, + {-1}, {-1}, {-1}, +#line 246 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str342, ei_pt154}, + {-1}, {-1}, +#line 32 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str345, ei_ucs2le}, + {-1}, {-1}, +#line 284 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str348, ei_jisx0208}, +#line 338 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str349, ei_gb18030}, +#line 368 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str350, ei_iso2022_kr}, +#line 94 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str351, ei_iso8859_5}, +#line 24 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str352, ei_utf8}, + {-1}, +#line 221 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str354, ei_mac_roman}, +#line 23 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str355, ei_utf8}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 266 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str362, ei_viscii}, +#line 67 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str363, ei_iso8859_2}, + {-1}, +#line 201 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str365, ei_cp1257}, + {-1}, {-1}, +#line 35 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str368, ei_ucs4}, + {-1}, {-1}, +#line 306 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str371, ei_ksc5601}, + {-1}, +#line 299 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str373, ei_gb2312}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 19 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str379, ei_ascii}, +#line 274 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str380, ei_iso646_jp}, +#line 26 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str381, ei_ucs2}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 30 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str387, ei_ucs2be}, + {-1}, +#line 111 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str389, ei_iso8859_7}, +#line 257 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str390, ei_tis620}, + {-1}, {-1}, +#line 239 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str393, ei_armscii_8}, +#line 352 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str394, ei_ces_big5}, +#line 62 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str395, ei_iso8859_1}, +#line 12 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str396, ei_ascii}, +#line 351 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str397, ei_ces_big5}, + {-1}, +#line 41 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str399, ei_utf16le}, +#line 258 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str400, ei_tis620}, +#line 18 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str401, ei_ascii}, + {-1}, {-1}, +#line 151 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str404, ei_iso8859_13}, +#line 304 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str405, ei_isoir165}, + {-1}, {-1}, {-1}, +#line 143 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str409, ei_iso8859_10}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 364 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str415, ei_cp949}, + {-1}, {-1}, +#line 242 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str418, ei_koi8_t}, +#line 191 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str419, ei_cp1253}, +#line 17 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str420, ei_ascii}, + {-1}, {-1}, +#line 134 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str423, ei_iso8859_9}, + {-1}, +#line 184 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str425, ei_cp1251}, + {-1}, +#line 110 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str427, ei_iso8859_7}, +#line 340 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str428, ei_iso2022_cn}, + {-1}, +#line 42 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str430, ei_utf32}, +#line 20 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str431, ei_ascii}, +#line 199 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str432, ei_cp1256}, +#line 88 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str433, ei_iso8859_4}, + {-1}, {-1}, +#line 240 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str436, ei_georgian_academy}, + {-1}, {-1}, +#line 196 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str439, ei_cp1255}, + {-1}, {-1}, {-1}, {-1}, +#line 193 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str444, ei_cp1254}, +#line 103 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str445, ei_iso8859_6}, +#line 247 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str446, ei_pt154}, + {-1}, +#line 272 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str448, ei_iso646_jp}, +#line 337 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str449, ei_cp936}, + {-1}, +#line 205 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str451, ei_cp1258}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 187 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str457, ei_cp1252}, + {-1}, +#line 71 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str459, ei_iso8859_2}, + {-1}, {-1}, +#line 254 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str462, ei_cp1133}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 36 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str468, ei_ucs4}, + {-1}, +#line 309 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str470, ei_ksc5601}, + {-1}, {-1}, {-1}, +#line 341 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str474, ei_iso2022_cn_ext}, + {-1}, {-1}, +#line 181 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str477, ei_cp1250}, + {-1}, +#line 234 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str479, ei_hp_roman8}, + {-1}, {-1}, +#line 44 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str482, ei_utf32le}, +#line 190 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str483, ei_cp1253}, + {-1}, +#line 260 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str485, ei_tis620}, +#line 37 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str486, ei_ucs4be}, +#line 51 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str487, ei_ucs4swapped}, + {-1}, +#line 46 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str489, ei_utf7}, +#line 50 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str490, ei_ucs4internal}, + {-1}, {-1}, +#line 269 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str493, ei_tcvn}, +#line 217 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str494, ei_cp866}, +#line 45 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str495, ei_utf7}, + {-1}, {-1}, {-1}, +#line 28 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str499, ei_ucs2be}, +#line 49 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str500, ei_ucs2swapped}, +#line 224 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str501, ei_mac_iceland}, +#line 31 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str502, ei_ucs2be}, +#line 48 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str503, ei_ucs2internal}, + {-1}, +#line 104 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str505, ei_iso8859_6}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 80 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str511, ei_iso8859_3}, + {-1}, +#line 362 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str513, ei_euc_kr}, + {-1}, +#line 219 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str515, ei_mac_roman}, +#line 178 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str516, ei_koi8_u}, + {-1}, +#line 229 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str518, ei_mac_greek}, +#line 179 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str519, ei_koi8_ru}, +#line 268 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str520, ei_tcvn}, +#line 202 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str521, ei_cp1257}, +#line 312 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str522, ei_euc_jp}, +#line 27 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str523, ei_ucs2}, +#line 117 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str524, ei_iso8859_7}, +#line 311 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str525, ei_euc_jp}, +#line 331 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str526, ei_euc_cn}, + {-1}, {-1}, {-1}, {-1}, +#line 332 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str531, ei_euc_cn}, +#line 298 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str532, ei_iso646_cn}, + {-1}, {-1}, {-1}, +#line 197 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str536, ei_cp1255}, +#line 259 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str537, ei_tis620}, +#line 263 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str538, ei_cp874}, + {-1}, {-1}, +#line 160 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str541, ei_iso8859_14}, +#line 350 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str542, ei_ces_big5}, + {-1}, {-1}, +#line 349 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str545, ei_ces_big5}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 40 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str553, ei_utf16be}, + {-1}, +#line 105 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str555, ei_iso8859_6}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 321 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str571, ei_iso2022_jp}, + {-1}, {-1}, +#line 323 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str574, ei_iso2022_jp1}, +#line 326 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str575, ei_iso2022_jpms}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 301 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str581, ei_gb2312}, +#line 237 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str582, ei_hp_roman8}, + {-1}, +#line 238 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str584, ei_nextstep}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 283 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str594, ei_jisx0208}, + {-1}, +#line 95 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str596, ei_iso8859_5}, + {-1}, {-1}, +#line 293 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str599, ei_jisx0212}, + {-1}, +#line 313 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str601, ei_euc_jp}, +#line 47 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str602, ei_utf7}, + {-1}, {-1}, +#line 343 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str605, ei_hz}, +#line 324 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str606, ei_iso2022_jp2}, + {-1}, {-1}, {-1}, +#line 227 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str610, ei_mac_cyrillic}, + {-1}, +#line 358 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str612, ei_big5hkscs2008}, + {-1}, {-1}, +#line 357 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str615, ei_big5hkscs2008}, + {-1}, {-1}, +#line 345 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str618, ei_euc_tw}, + {-1}, {-1}, +#line 344 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str621, ei_euc_tw}, + {-1}, {-1}, +#line 200 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str624, ei_cp1256}, + {-1}, +#line 226 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str626, ei_mac_romania}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 43 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str636, ei_utf32be}, + {-1}, {-1}, +#line 53 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str639, ei_java}, + {-1}, +#line 194 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str641, ei_cp1254}, + {-1}, +#line 316 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str643, ei_sjis}, +#line 315 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str644, ei_sjis}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 275 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str651, ei_iso646_jp}, + {-1}, +#line 271 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str653, ei_iso646_jp}, + {-1}, +#line 233 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str655, ei_mac_thai}, + {-1}, {-1}, {-1}, +#line 286 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str659, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, +#line 270 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str671, ei_tcvn}, +#line 322 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str672, ei_iso2022_jp}, + {-1}, {-1}, {-1}, +#line 318 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str676, ei_sjis}, + {-1}, {-1}, {-1}, +#line 228 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str680, ei_mac_ukraine}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 225 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str696, ei_mac_croatian}, + {-1}, +#line 124 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str698, ei_iso8859_8}, +#line 29 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str699, ei_ucs2be}, +#line 213 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str700, ei_cp862}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 325 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str706, ei_iso2022_jp2}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, +#line 125 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str719, ei_iso8859_8}, + {-1}, {-1}, {-1}, +#line 370 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str723, ei_local_wchar_t}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 223 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str731, ei_mac_centraleurope}, + {-1}, {-1}, +#line 354 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str734, ei_big5hkscs1999}, +#line 355 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str735, ei_big5hkscs2001}, + {-1}, {-1}, +#line 276 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str738, ei_jisx0201}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 33 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str749, ei_ucs2le}, +#line 288 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str750, ei_jisx0212}, + {-1}, {-1}, {-1}, +#line 356 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str754, ei_big5hkscs2004}, +#line 277 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str755, ei_jisx0201}, + {-1}, {-1}, {-1}, {-1}, +#line 232 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str760, ei_mac_arabic}, +#line 359 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str761, ei_big5hkscs2008}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 290 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str781, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 280 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str790, ei_jisx0208}, +#line 220 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str791, ei_mac_roman}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, +#line 289 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str803, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 282 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str827, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 281 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str833, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, +#line 287 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str864, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 209 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str880, ei_cp850}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 203 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str898, ei_cp1257}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, +#line 319 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str912, ei_sjis}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 346 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str931, ei_euc_tw}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 314 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str950, ei_euc_jp}, +#line 365 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str951, ei_johab}, + {-1}, {-1}, {-1}, {-1}, +#line 222 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str956, ei_mac_roman}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, +#line 231 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str986, ei_mac_hebrew}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 279 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str1001, ei_jisx0201}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, +#line 230 "lib/aliases_syshpux.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str1033, ei_mac_turkish} + }; + +static const struct alias * +aliases_lookup (register const char *str, register size_t len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register unsigned int key = aliases_hash (str, len); + + if (key <= MAX_HASH_VALUE) + { + register int o = aliases[key].name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &aliases[key]; + } + } + } + return 0; +} diff --git a/jni/parted/libiconv/lib/aliases_sysosf1.h b/jni/parted/libiconv/lib/aliases_sysosf1.h new file mode 100755 index 0000000..035e840 --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_sysosf1.h @@ -0,0 +1,1789 @@ +/* ANSI-C code produced by gperf version 3.2 */ +/* Command-line: gperf -m 10 lib/aliases_sysosf1.gperf */ +/* Computed positions: -k'1,3-11,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "lib/aliases_sysosf1.gperf" +struct alias { int name; unsigned int encoding_index; }; + +#define TOTAL_KEYWORDS 354 +#define MIN_WORD_LENGTH 2 +#define MAX_WORD_LENGTH 45 +#define MIN_HASH_VALUE 15 +#define MAX_HASH_VALUE 981 +/* maximum key range = 967, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +aliases_hash (register const char *str, register size_t len) +{ + static const unsigned short asso_values[] = + { + 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 5, 96, 982, 97, 7, + 33, 102, 15, 17, 5, 173, 23, 25, 298, 982, + 982, 982, 982, 982, 982, 168, 248, 11, 26, 25, + 17, 29, 29, 6, 139, 153, 8, 132, 7, 6, + 114, 982, 5, 8, 30, 235, 185, 182, 225, 5, + 18, 982, 982, 982, 982, 6, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 982, 982, 982 + }; + register unsigned int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[10]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 10: + hval += asso_values[(unsigned char)str[9]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 9: + hval += asso_values[(unsigned char)str[8]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 8: + hval += asso_values[(unsigned char)str[7]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 7: + hval += asso_values[(unsigned char)str[6]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 6: + hval += asso_values[(unsigned char)str[5]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 5: + hval += asso_values[(unsigned char)str[4]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 4: + hval += asso_values[(unsigned char)str[3]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 3: + hval += asso_values[(unsigned char)str[2]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 2: + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str15[sizeof("L6")]; + char stringpool_str17[sizeof("L1")]; + char stringpool_str20[sizeof("CN")]; + char stringpool_str25[sizeof("L4")]; + char stringpool_str27[sizeof("L5")]; + char stringpool_str30[sizeof("R8")]; + char stringpool_str33[sizeof("L8")]; + char stringpool_str34[sizeof("SJIS")]; + char stringpool_str36[sizeof("866")]; + char stringpool_str43[sizeof("L2")]; + char stringpool_str49[sizeof("HZ")]; + char stringpool_str51[sizeof("ISO-IR-6")]; + char stringpool_str54[sizeof("CP866")]; + char stringpool_str64[sizeof("C99")]; + char stringpool_str65[sizeof("ISO-IR-166")]; + char stringpool_str66[sizeof("EUCCN")]; + char stringpool_str67[sizeof("LATIN6")]; + char stringpool_str70[sizeof("CP154")]; + char stringpool_str71[sizeof("LATIN1")]; + char stringpool_str72[sizeof("EUC-CN")]; + char stringpool_str74[sizeof("CYRILLIC")]; + char stringpool_str76[sizeof("ISO646-CN")]; + char stringpool_str79[sizeof("ISO-IR-14")]; + char stringpool_str84[sizeof("CP1256")]; + char stringpool_str87[sizeof("LATIN4")]; + char stringpool_str88[sizeof("CP1251")]; + char stringpool_str89[sizeof("ISO-IR-165")]; + char stringpool_str91[sizeof("LATIN5")]; + char stringpool_str92[sizeof("862")]; + char stringpool_str93[sizeof("ISO-IR-126")]; + char stringpool_str95[sizeof("ISO-IR-144")]; + char stringpool_str96[sizeof("CP819")]; + char stringpool_str99[sizeof("TACTIS")]; + char stringpool_str103[sizeof("LATIN8")]; + char stringpool_str104[sizeof("CP1254")]; + char stringpool_str105[sizeof("ISO-IR-58")]; + char stringpool_str106[sizeof("CP949")]; + char stringpool_str108[sizeof("CP1255")]; + char stringpool_str110[sizeof("CP862")]; + char stringpool_str111[sizeof("ISO-IR-148")]; + char stringpool_str112[sizeof("L3")]; + char stringpool_str113[sizeof("LATIN-9")]; + char stringpool_str114[sizeof("CHINESE")]; + char stringpool_str115[sizeof("ISO-IR-149")]; + char stringpool_str117[sizeof("ISO-IR-159")]; + char stringpool_str119[sizeof("ISO-IR-226")]; + char stringpool_str120[sizeof("CP1258")]; + char stringpool_str123[sizeof("LATIN2")]; + char stringpool_str124[sizeof("ISO8859-6")]; + char stringpool_str125[sizeof("ISO-IR-199")]; + char stringpool_str128[sizeof("ISO8859-1")]; + char stringpool_str129[sizeof("ISO-CELTIC")]; + char stringpool_str130[sizeof("ISO-8859-6")]; + char stringpool_str131[sizeof("ISO_8859-6")]; + char stringpool_str132[sizeof("ISO8859-16")]; + char stringpool_str134[sizeof("ISO-8859-1")]; + char stringpool_str135[sizeof("ISO_8859-1")]; + char stringpool_str136[sizeof("ISO8859-11")]; + char stringpool_str138[sizeof("ISO-8859-16")]; + char stringpool_str139[sizeof("ISO_8859-16")]; + char stringpool_str140[sizeof("CP1252")]; + char stringpool_str142[sizeof("ISO-8859-11")]; + char stringpool_str143[sizeof("ISO_8859-11")]; + char stringpool_str144[sizeof("ISO8859-4")]; + char stringpool_str145[sizeof("CP1361")]; + char stringpool_str146[sizeof("ISO_8859-16:2001")]; + char stringpool_str147[sizeof("CP1131")]; + char stringpool_str148[sizeof("ISO8859-5")]; + char stringpool_str150[sizeof("ISO-8859-4")]; + char stringpool_str151[sizeof("ISO_8859-4")]; + char stringpool_str152[sizeof("ISO8859-14")]; + char stringpool_str153[sizeof("CP936")]; + char stringpool_str154[sizeof("ISO-8859-5")]; + char stringpool_str155[sizeof("ISO_8859-5")]; + char stringpool_str156[sizeof("ISO8859-15")]; + char stringpool_str157[sizeof("MAC")]; + char stringpool_str158[sizeof("ISO-8859-14")]; + char stringpool_str159[sizeof("ISO_8859-14")]; + char stringpool_str160[sizeof("ISO8859-8")]; + char stringpool_str161[sizeof("ISO-IR-101")]; + char stringpool_str162[sizeof("ISO-8859-15")]; + char stringpool_str163[sizeof("ISO_8859-15")]; + char stringpool_str164[sizeof("ISO8859-9")]; + char stringpool_str166[sizeof("ISO-8859-8")]; + char stringpool_str167[sizeof("ISO_8859-8")]; + char stringpool_str170[sizeof("ISO-8859-9")]; + char stringpool_str171[sizeof("ISO_8859-9")]; + char stringpool_str172[sizeof("ISO_8859-14:1998")]; + char stringpool_str173[sizeof("PT154")]; + char stringpool_str174[sizeof("ISO_8859-15:1998")]; + char stringpool_str176[sizeof("RK1048")]; + char stringpool_str179[sizeof("ELOT_928")]; + char stringpool_str180[sizeof("ISO8859-2")]; + char stringpool_str181[sizeof("MS-CYRL")]; + char stringpool_str182[sizeof("IBM866")]; + char stringpool_str183[sizeof("L7")]; + char stringpool_str186[sizeof("ISO-8859-2")]; + char stringpool_str187[sizeof("ISO_8859-2")]; + char stringpool_str193[sizeof("CHAR")]; + char stringpool_str197[sizeof("ISO-IR-109")]; + char stringpool_str198[sizeof("ISO-IR-138")]; + char stringpool_str202[sizeof("ASCII")]; + char stringpool_str203[sizeof("KOI8-R")]; + char stringpool_str204[sizeof("EUCKR")]; + char stringpool_str205[sizeof("L10")]; + char stringpool_str209[sizeof("CP932")]; + char stringpool_str210[sizeof("EUC-KR")]; + char stringpool_str212[sizeof("CP50221")]; + char stringpool_str216[sizeof("CSKOI8R")]; + char stringpool_str217[sizeof("MS-EE")]; + char stringpool_str220[sizeof("850")]; + char stringpool_str223[sizeof("CSASCII")]; + char stringpool_str224[sizeof("IBM819")]; + char stringpool_str225[sizeof("MACCYRILLIC")]; + char stringpool_str228[sizeof("VISCII")]; + char stringpool_str233[sizeof("TCVN")]; + char stringpool_str236[sizeof("SHIFT-JIS")]; + char stringpool_str237[sizeof("SHIFT_JIS")]; + char stringpool_str238[sizeof("IBM862")]; + char stringpool_str240[sizeof("CSISO14JISC6220RO")]; + char stringpool_str242[sizeof("CP874")]; + char stringpool_str243[sizeof("GB2312")]; + char stringpool_str245[sizeof("US")]; + char stringpool_str247[sizeof("CSVISCII")]; + char stringpool_str250[sizeof("CP850")]; + char stringpool_str251[sizeof("ISO-IR-110")]; + char stringpool_str252[sizeof("CP950")]; + char stringpool_str253[sizeof("KOI8-T")]; + char stringpool_str254[sizeof("ISO-2022-CN")]; + char stringpool_str255[sizeof("JP")]; + char stringpool_str257[sizeof("CYRILLIC-ASIAN")]; + char stringpool_str259[sizeof("LATIN10")]; + char stringpool_str260[sizeof("UHC")]; + char stringpool_str261[sizeof("LATIN3")]; + char stringpool_str263[sizeof("CSISO2022CN")]; + char stringpool_str264[sizeof("ISO_8859-10:1992")]; + char stringpool_str267[sizeof("MACINTOSH")]; + char stringpool_str268[sizeof("CP1250")]; + char stringpool_str271[sizeof("CSISOLATIN6")]; + char stringpool_str272[sizeof("CSSHIFTJIS")]; + char stringpool_str273[sizeof("ISO-IR-179")]; + char stringpool_str274[sizeof("MS936")]; + char stringpool_str275[sizeof("CSISOLATIN1")]; + char stringpool_str276[sizeof("TIS620")]; + char stringpool_str278[sizeof("CP1253")]; + char stringpool_str279[sizeof("DECHANZI")]; + char stringpool_str280[sizeof("UTF-16")]; + char stringpool_str281[sizeof("ISO-2022-CN-EXT")]; + char stringpool_str282[sizeof("TIS-620")]; + char stringpool_str283[sizeof("UCS-4")]; + char stringpool_str284[sizeof("GREEK8")]; + char stringpool_str290[sizeof("CSISOLATINCYRILLIC")]; + char stringpool_str291[sizeof("CSISOLATIN4")]; + char stringpool_str295[sizeof("CSISOLATIN5")]; + char stringpool_str300[sizeof("PTCP154")]; + char stringpool_str301[sizeof("CSUCS4")]; + char stringpool_str302[sizeof("ISO646-US")]; + char stringpool_str304[sizeof("KSC5601")]; + char stringpool_str308[sizeof("UTF-8")]; + char stringpool_str311[sizeof("KSC_5601")]; + char stringpool_str315[sizeof("BIG5")]; + char stringpool_str316[sizeof("ISO8859-10")]; + char stringpool_str318[sizeof("ISO8859-3")]; + char stringpool_str319[sizeof("UCS-2")]; + char stringpool_str321[sizeof("BIG-5")]; + char stringpool_str322[sizeof("ISO-8859-10")]; + char stringpool_str323[sizeof("ISO_8859-10")]; + char stringpool_str324[sizeof("ISO-8859-3")]; + char stringpool_str325[sizeof("ISO_8859-3")]; + char stringpool_str326[sizeof("ISO8859-13")]; + char stringpool_str327[sizeof("CSISOLATIN2")]; + char stringpool_str328[sizeof("UCS-4LE")]; + char stringpool_str330[sizeof("KZ-1048")]; + char stringpool_str332[sizeof("ISO-8859-13")]; + char stringpool_str333[sizeof("ISO_8859-13")]; + char stringpool_str334[sizeof("CSBIG5")]; + char stringpool_str335[sizeof("UTF-16LE")]; + char stringpool_str336[sizeof("X0212")]; + char stringpool_str337[sizeof("CP1133")]; + char stringpool_str338[sizeof("GBK")]; + char stringpool_str339[sizeof("MS-ANSI")]; + char stringpool_str340[sizeof("CN-BIG5")]; + char stringpool_str341[sizeof("ISO-IR-100")]; + char stringpool_str343[sizeof("CSPTCP154")]; + char stringpool_str345[sizeof("GB_1988-80")]; + char stringpool_str346[sizeof("UCS-2LE")]; + char stringpool_str350[sizeof("CSISO159JISX02121990")]; + char stringpool_str351[sizeof("UNICODE-1-1")]; + char stringpool_str353[sizeof("KS_C_5601-1989")]; + char stringpool_str355[sizeof("CSKZ1048")]; + char stringpool_str356[sizeof("VISCII1.1-1")]; + char stringpool_str358[sizeof("ISO_646.IRV:1991")]; + char stringpool_str359[sizeof("CSUNICODE11")]; + char stringpool_str360[sizeof("CN-GB-ISOIR165")]; + char stringpool_str361[sizeof("CSUNICODE")]; + char stringpool_str363[sizeof("UCS-4-INTERNAL")]; + char stringpool_str364[sizeof("ROMAN8")]; + char stringpool_str367[sizeof("JIS_C6220-1969-RO")]; + char stringpool_str368[sizeof("JIS_C6226-1983")]; + char stringpool_str371[sizeof("KOREAN")]; + char stringpool_str374[sizeof("X0201")]; + char stringpool_str375[sizeof("MULELAO-1")]; + char stringpool_str377[sizeof("ISO-IR-203")]; + char stringpool_str378[sizeof("IBM850")]; + char stringpool_str380[sizeof("TIS620-0")]; + char stringpool_str381[sizeof("UCS-2-INTERNAL")]; + char stringpool_str382[sizeof("ECMA-114")]; + char stringpool_str389[sizeof("MACTHAI")]; + char stringpool_str390[sizeof("GREEK")]; + char stringpool_str391[sizeof("ARMSCII-8")]; + char stringpool_str392[sizeof("ISO-2022-KR")]; + char stringpool_str396[sizeof("GEORGIAN-PS")]; + char stringpool_str397[sizeof("TIS620.2529-1")]; + char stringpool_str398[sizeof("ECMA-118")]; + char stringpool_str401[sizeof("CSISO2022KR")]; + char stringpool_str403[sizeof("LATIN7")]; + char stringpool_str405[sizeof("ISO-IR-57")]; + char stringpool_str406[sizeof("X0208")]; + char stringpool_str407[sizeof("HP-ROMAN8")]; + char stringpool_str408[sizeof("EUCJP")]; + char stringpool_str411[sizeof("ISO-IR-87")]; + char stringpool_str413[sizeof("ISO-IR-157")]; + char stringpool_str414[sizeof("EUC-JP")]; + char stringpool_str416[sizeof("ISO-10646-UCS-4")]; + char stringpool_str417[sizeof("DECKOREAN")]; + char stringpool_str418[sizeof("ISO646-JP")]; + char stringpool_str420[sizeof("CP1257")]; + char stringpool_str421[sizeof("UNICODELITTLE")]; + char stringpool_str427[sizeof("JIS0208")]; + char stringpool_str429[sizeof("ISO-IR-127")]; + char stringpool_str430[sizeof("MACICELAND")]; + char stringpool_str431[sizeof("UTF-32")]; + char stringpool_str434[sizeof("ISO-10646-UCS-2")]; + char stringpool_str435[sizeof("EUCTW")]; + char stringpool_str441[sizeof("EUC-TW")]; + char stringpool_str442[sizeof("GB_2312-80")]; + char stringpool_str443[sizeof("CSIBM866")]; + char stringpool_str445[sizeof("CSISOLATINARABIC")]; + char stringpool_str447[sizeof("CSISOLATINGREEK")]; + char stringpool_str448[sizeof("CSMACINTOSH")]; + char stringpool_str452[sizeof("CSEUCKR")]; + char stringpool_str453[sizeof("US-ASCII")]; + char stringpool_str455[sizeof("GEORGIAN-ACADEMY")]; + char stringpool_str456[sizeof("MS-HEBR")]; + char stringpool_str457[sizeof("WCHAR_T")]; + char stringpool_str458[sizeof("UTF-32LE")]; + char stringpool_str459[sizeof("GB18030")]; + char stringpool_str460[sizeof("ISO8859-7")]; + char stringpool_str462[sizeof("ISO_8859-4:1988")]; + char stringpool_str463[sizeof("MACCENTRALEUROPE")]; + char stringpool_str464[sizeof("ISO_8859-5:1988")]; + char stringpool_str465[sizeof("CSISOLATIN3")]; + char stringpool_str466[sizeof("ISO-8859-7")]; + char stringpool_str467[sizeof("ISO_8859-7")]; + char stringpool_str469[sizeof("CP367")]; + char stringpool_str470[sizeof("ISO_8859-8:1988")]; + char stringpool_str474[sizeof("ISO_8859-9:1989")]; + char stringpool_str476[sizeof("MACROMAN")]; + char stringpool_str477[sizeof("CSISOLATINHEBREW")]; + char stringpool_str481[sizeof("TCVN5712-1")]; + char stringpool_str482[sizeof("EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE")]; + char stringpool_str489[sizeof("STRK1048-2002")]; + char stringpool_str490[sizeof("WINDOWS-1256")]; + char stringpool_str491[sizeof("ISO-2022-JP-1")]; + char stringpool_str492[sizeof("WINDOWS-1251")]; + char stringpool_str493[sizeof("ISO-2022-JP-MS")]; + char stringpool_str499[sizeof("TCVN-5712")]; + char stringpool_str500[sizeof("WINDOWS-1254")]; + char stringpool_str501[sizeof("KS_C_5601-1987")]; + char stringpool_str502[sizeof("WINDOWS-1255")]; + char stringpool_str504[sizeof("CSGB2312")]; + char stringpool_str508[sizeof("WINDOWS-1258")]; + char stringpool_str517[sizeof("ISO-2022-JP-2")]; + char stringpool_str518[sizeof("WINDOWS-1252")]; + char stringpool_str520[sizeof("BIG5HKSCS")]; + char stringpool_str523[sizeof("UNICODE-1-1-UTF-7")]; + char stringpool_str525[sizeof("CSISO2022JP2")]; + char stringpool_str526[sizeof("BIG5-HKSCS")]; + char stringpool_str527[sizeof("CSKSC56011987")]; + char stringpool_str528[sizeof("CSHPROMAN8")]; + char stringpool_str529[sizeof("CSUNICODE11UTF7")]; + char stringpool_str532[sizeof("SDECKANJI")]; + char stringpool_str534[sizeof("HZ-GB-2312")]; + char stringpool_str535[sizeof("MS-GREEK")]; + char stringpool_str541[sizeof("MACGREEK")]; + char stringpool_str542[sizeof("BIGFIVE")]; + char stringpool_str543[sizeof("TIS620.2533-1")]; + char stringpool_str546[sizeof("CN-GB")]; + char stringpool_str548[sizeof("BIG-FIVE")]; + char stringpool_str549[sizeof("ISO_8859-3:1988")]; + char stringpool_str561[sizeof("NEXTSTEP")]; + char stringpool_str562[sizeof("MACCROATIAN")]; + char stringpool_str564[sizeof("WINDOWS-936")]; + char stringpool_str566[sizeof("CSISO57GB1988")]; + char stringpool_str568[sizeof("UCS-4BE")]; + char stringpool_str575[sizeof("UTF-16BE")]; + char stringpool_str582[sizeof("WINDOWS-1250")]; + char stringpool_str586[sizeof("UCS-2BE")]; + char stringpool_str587[sizeof("WINDOWS-1253")]; + char stringpool_str590[sizeof("JIS_X0212")]; + char stringpool_str595[sizeof("CSISO58GB231280")]; + char stringpool_str596[sizeof("ISO-2022-JP")]; + char stringpool_str597[sizeof("IBM367")]; + char stringpool_str598[sizeof("IBM-CP1133")]; + char stringpool_str602[sizeof("ISO_8859-6:1987")]; + char stringpool_str604[sizeof("ISO_8859-1:1987")]; + char stringpool_str605[sizeof("CSISO2022JP")]; + char stringpool_str608[sizeof("UTF-7")]; + char stringpool_str609[sizeof("CSPC862LATINHEBREW")]; + char stringpool_str618[sizeof("ARABIC")]; + char stringpool_str625[sizeof("MS_KANJI")]; + char stringpool_str628[sizeof("JIS_X0201")]; + char stringpool_str630[sizeof("ISO_8859-2:1987")]; + char stringpool_str631[sizeof("UNICODEBIG")]; + char stringpool_str633[sizeof("TIS620.2533-0")]; + char stringpool_str635[sizeof("ASMO-708")]; + char stringpool_str643[sizeof("CSISO87JISX0208")]; + char stringpool_str648[sizeof("MACTURKISH")]; + char stringpool_str653[sizeof("WINDOWS-874")]; + char stringpool_str657[sizeof("ANSI_X3.4-1986")]; + char stringpool_str658[sizeof("WINDOWS-1257")]; + char stringpool_str660[sizeof("JIS_X0208")]; + char stringpool_str661[sizeof("JISX0201-1976")]; + char stringpool_str663[sizeof("KOI8-U")]; + char stringpool_str664[sizeof("JAVA")]; + char stringpool_str669[sizeof("KOI8-RU")]; + char stringpool_str671[sizeof("JIS_X0212-1990")]; + char stringpool_str675[sizeof("ANSI_X3.4-1968")]; + char stringpool_str677[sizeof("HEBREW")]; + char stringpool_str683[sizeof("CSEUCTW")]; + char stringpool_str693[sizeof("CSHALFWIDTHKATAKANA")]; + char stringpool_str698[sizeof("UTF-32BE")]; + char stringpool_str699[sizeof("ISO_8859-7:2003")]; + char stringpool_str705[sizeof("CSPC850MULTILINGUAL")]; + char stringpool_str720[sizeof("MS-TURK")]; + char stringpool_str751[sizeof("JIS_X0208-1990")]; + char stringpool_str756[sizeof("JIS_X0208-1983")]; + char stringpool_str764[sizeof("JIS_X0212.1990-0")]; + char stringpool_str769[sizeof("MACARABIC")]; + char stringpool_str770[sizeof("ISO_8859-7:1987")]; + char stringpool_str777[sizeof("MACUKRAINE")]; + char stringpool_str798[sizeof("CSEUCPKDFMTJAPANESE")]; + char stringpool_str813[sizeof("MACROMANIA")]; + char stringpool_str828[sizeof("BIG5-HKSCS:2001")]; + char stringpool_str836[sizeof("BIG5-HKSCS:2004")]; + char stringpool_str837[sizeof("JOHAB")]; + char stringpool_str844[sizeof("BIG5-HKSCS:2008")]; + char stringpool_str846[sizeof("BIG5-HKSCS:1999")]; + char stringpool_str848[sizeof("MACHEBREW")]; + char stringpool_str879[sizeof("TCVN5712-1:1993")]; + char stringpool_str893[sizeof("UCS-4-SWAPPED")]; + char stringpool_str911[sizeof("UCS-2-SWAPPED")]; + char stringpool_str928[sizeof("WINBALTRIM")]; + char stringpool_str981[sizeof("MS-ARAB")]; + }; +static const struct stringpool_t stringpool_contents = + { + "L6", + "L1", + "CN", + "L4", + "L5", + "R8", + "L8", + "SJIS", + "866", + "L2", + "HZ", + "ISO-IR-6", + "CP866", + "C99", + "ISO-IR-166", + "EUCCN", + "LATIN6", + "CP154", + "LATIN1", + "EUC-CN", + "CYRILLIC", + "ISO646-CN", + "ISO-IR-14", + "CP1256", + "LATIN4", + "CP1251", + "ISO-IR-165", + "LATIN5", + "862", + "ISO-IR-126", + "ISO-IR-144", + "CP819", + "TACTIS", + "LATIN8", + "CP1254", + "ISO-IR-58", + "CP949", + "CP1255", + "CP862", + "ISO-IR-148", + "L3", + "LATIN-9", + "CHINESE", + "ISO-IR-149", + "ISO-IR-159", + "ISO-IR-226", + "CP1258", + "LATIN2", + "ISO8859-6", + "ISO-IR-199", + "ISO8859-1", + "ISO-CELTIC", + "ISO-8859-6", + "ISO_8859-6", + "ISO8859-16", + "ISO-8859-1", + "ISO_8859-1", + "ISO8859-11", + "ISO-8859-16", + "ISO_8859-16", + "CP1252", + "ISO-8859-11", + "ISO_8859-11", + "ISO8859-4", + "CP1361", + "ISO_8859-16:2001", + "CP1131", + "ISO8859-5", + "ISO-8859-4", + "ISO_8859-4", + "ISO8859-14", + "CP936", + "ISO-8859-5", + "ISO_8859-5", + "ISO8859-15", + "MAC", + "ISO-8859-14", + "ISO_8859-14", + "ISO8859-8", + "ISO-IR-101", + "ISO-8859-15", + "ISO_8859-15", + "ISO8859-9", + "ISO-8859-8", + "ISO_8859-8", + "ISO-8859-9", + "ISO_8859-9", + "ISO_8859-14:1998", + "PT154", + "ISO_8859-15:1998", + "RK1048", + "ELOT_928", + "ISO8859-2", + "MS-CYRL", + "IBM866", + "L7", + "ISO-8859-2", + "ISO_8859-2", + "CHAR", + "ISO-IR-109", + "ISO-IR-138", + "ASCII", + "KOI8-R", + "EUCKR", + "L10", + "CP932", + "EUC-KR", + "CP50221", + "CSKOI8R", + "MS-EE", + "850", + "CSASCII", + "IBM819", + "MACCYRILLIC", + "VISCII", + "TCVN", + "SHIFT-JIS", + "SHIFT_JIS", + "IBM862", + "CSISO14JISC6220RO", + "CP874", + "GB2312", + "US", + "CSVISCII", + "CP850", + "ISO-IR-110", + "CP950", + "KOI8-T", + "ISO-2022-CN", + "JP", + "CYRILLIC-ASIAN", + "LATIN10", + "UHC", + "LATIN3", + "CSISO2022CN", + "ISO_8859-10:1992", + "MACINTOSH", + "CP1250", + "CSISOLATIN6", + "CSSHIFTJIS", + "ISO-IR-179", + "MS936", + "CSISOLATIN1", + "TIS620", + "CP1253", + "DECHANZI", + "UTF-16", + "ISO-2022-CN-EXT", + "TIS-620", + "UCS-4", + "GREEK8", + "CSISOLATINCYRILLIC", + "CSISOLATIN4", + "CSISOLATIN5", + "PTCP154", + "CSUCS4", + "ISO646-US", + "KSC5601", + "UTF-8", + "KSC_5601", + "BIG5", + "ISO8859-10", + "ISO8859-3", + "UCS-2", + "BIG-5", + "ISO-8859-10", + "ISO_8859-10", + "ISO-8859-3", + "ISO_8859-3", + "ISO8859-13", + "CSISOLATIN2", + "UCS-4LE", + "KZ-1048", + "ISO-8859-13", + "ISO_8859-13", + "CSBIG5", + "UTF-16LE", + "X0212", + "CP1133", + "GBK", + "MS-ANSI", + "CN-BIG5", + "ISO-IR-100", + "CSPTCP154", + "GB_1988-80", + "UCS-2LE", + "CSISO159JISX02121990", + "UNICODE-1-1", + "KS_C_5601-1989", + "CSKZ1048", + "VISCII1.1-1", + "ISO_646.IRV:1991", + "CSUNICODE11", + "CN-GB-ISOIR165", + "CSUNICODE", + "UCS-4-INTERNAL", + "ROMAN8", + "JIS_C6220-1969-RO", + "JIS_C6226-1983", + "KOREAN", + "X0201", + "MULELAO-1", + "ISO-IR-203", + "IBM850", + "TIS620-0", + "UCS-2-INTERNAL", + "ECMA-114", + "MACTHAI", + "GREEK", + "ARMSCII-8", + "ISO-2022-KR", + "GEORGIAN-PS", + "TIS620.2529-1", + "ECMA-118", + "CSISO2022KR", + "LATIN7", + "ISO-IR-57", + "X0208", + "HP-ROMAN8", + "EUCJP", + "ISO-IR-87", + "ISO-IR-157", + "EUC-JP", + "ISO-10646-UCS-4", + "DECKOREAN", + "ISO646-JP", + "CP1257", + "UNICODELITTLE", + "JIS0208", + "ISO-IR-127", + "MACICELAND", + "UTF-32", + "ISO-10646-UCS-2", + "EUCTW", + "EUC-TW", + "GB_2312-80", + "CSIBM866", + "CSISOLATINARABIC", + "CSISOLATINGREEK", + "CSMACINTOSH", + "CSEUCKR", + "US-ASCII", + "GEORGIAN-ACADEMY", + "MS-HEBR", + "WCHAR_T", + "UTF-32LE", + "GB18030", + "ISO8859-7", + "ISO_8859-4:1988", + "MACCENTRALEUROPE", + "ISO_8859-5:1988", + "CSISOLATIN3", + "ISO-8859-7", + "ISO_8859-7", + "CP367", + "ISO_8859-8:1988", + "ISO_8859-9:1989", + "MACROMAN", + "CSISOLATINHEBREW", + "TCVN5712-1", + "EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE", + "STRK1048-2002", + "WINDOWS-1256", + "ISO-2022-JP-1", + "WINDOWS-1251", + "ISO-2022-JP-MS", + "TCVN-5712", + "WINDOWS-1254", + "KS_C_5601-1987", + "WINDOWS-1255", + "CSGB2312", + "WINDOWS-1258", + "ISO-2022-JP-2", + "WINDOWS-1252", + "BIG5HKSCS", + "UNICODE-1-1-UTF-7", + "CSISO2022JP2", + "BIG5-HKSCS", + "CSKSC56011987", + "CSHPROMAN8", + "CSUNICODE11UTF7", + "SDECKANJI", + "HZ-GB-2312", + "MS-GREEK", + "MACGREEK", + "BIGFIVE", + "TIS620.2533-1", + "CN-GB", + "BIG-FIVE", + "ISO_8859-3:1988", + "NEXTSTEP", + "MACCROATIAN", + "WINDOWS-936", + "CSISO57GB1988", + "UCS-4BE", + "UTF-16BE", + "WINDOWS-1250", + "UCS-2BE", + "WINDOWS-1253", + "JIS_X0212", + "CSISO58GB231280", + "ISO-2022-JP", + "IBM367", + "IBM-CP1133", + "ISO_8859-6:1987", + "ISO_8859-1:1987", + "CSISO2022JP", + "UTF-7", + "CSPC862LATINHEBREW", + "ARABIC", + "MS_KANJI", + "JIS_X0201", + "ISO_8859-2:1987", + "UNICODEBIG", + "TIS620.2533-0", + "ASMO-708", + "CSISO87JISX0208", + "MACTURKISH", + "WINDOWS-874", + "ANSI_X3.4-1986", + "WINDOWS-1257", + "JIS_X0208", + "JISX0201-1976", + "KOI8-U", + "JAVA", + "KOI8-RU", + "JIS_X0212-1990", + "ANSI_X3.4-1968", + "HEBREW", + "CSEUCTW", + "CSHALFWIDTHKATAKANA", + "UTF-32BE", + "ISO_8859-7:2003", + "CSPC850MULTILINGUAL", + "MS-TURK", + "JIS_X0208-1990", + "JIS_X0208-1983", + "JIS_X0212.1990-0", + "MACARABIC", + "ISO_8859-7:1987", + "MACUKRAINE", + "CSEUCPKDFMTJAPANESE", + "MACROMANIA", + "BIG5-HKSCS:2001", + "BIG5-HKSCS:2004", + "JOHAB", + "BIG5-HKSCS:2008", + "BIG5-HKSCS:1999", + "MACHEBREW", + "TCVN5712-1:1993", + "UCS-4-SWAPPED", + "UCS-2-SWAPPED", + "WINBALTRIM", + "MS-ARAB" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct alias aliases[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 134 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str15, ei_iso8859_10}, + {-1}, +#line 60 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str17, ei_iso8859_1}, + {-1}, {-1}, +#line 289 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str20, ei_iso646_cn}, + {-1}, {-1}, {-1}, {-1}, +#line 84 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str25, ei_iso8859_4}, + {-1}, +#line 126 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str27, ei_iso8859_9}, + {-1}, {-1}, +#line 227 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str30, ei_hp_roman8}, + {-1}, {-1}, +#line 151 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str33, ei_iso8859_14}, +#line 310 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str34, ei_sjis}, + {-1}, +#line 207 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str36, ei_cp866}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 68 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str43, ei_iso8859_2}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 335 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str49, ei_hz}, + {-1}, +#line 16 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str51, ei_ascii}, + {-1}, {-1}, +#line 205 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str54, ei_cp866}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 51 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str64, ei_c99}, +#line 252 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str65, ei_tis620}, +#line 322 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str66, ei_euc_cn}, +#line 133 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str67, ei_iso8859_10}, + {-1}, {-1}, +#line 236 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str70, ei_pt154}, +#line 59 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str71, ei_iso8859_1}, +#line 321 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str72, ei_euc_cn}, + {-1}, +#line 91 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str74, ei_iso8859_5}, + {-1}, +#line 287 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str76, ei_iso646_cn}, + {-1}, {-1}, +#line 265 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str79, ei_iso646_jp}, + {-1}, {-1}, {-1}, {-1}, +#line 189 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str84, ei_cp1256}, + {-1}, {-1}, +#line 83 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str87, ei_iso8859_4}, +#line 174 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str88, ei_cp1251}, +#line 295 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str89, ei_isoir165}, + {-1}, +#line 125 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str91, ei_iso8859_9}, +#line 203 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str92, ei_cp862}, +#line 107 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str93, ei_iso8859_7}, + {-1}, +#line 90 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str95, ei_iso8859_5}, +#line 57 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str96, ei_iso8859_1}, + {-1}, {-1}, +#line 253 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str99, ei_tis620}, + {-1}, {-1}, {-1}, +#line 150 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str103, ei_iso8859_14}, +#line 183 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str104, ei_cp1254}, +#line 292 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str105, ei_gb2312}, +#line 357 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str106, ei_cp949}, + {-1}, +#line 186 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str108, ei_cp1255}, + {-1}, +#line 201 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str110, ei_cp862}, +#line 124 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str111, ei_iso8859_9}, +#line 76 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str112, ei_iso8859_3}, +#line 158 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str113, ei_iso8859_15}, +#line 294 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str114, ei_gb2312}, +#line 300 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str115, ei_ksc5601}, + {-1}, +#line 284 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str117, ei_jisx0212}, + {-1}, +#line 163 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str119, ei_iso8859_16}, +#line 195 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str120, ei_cp1258}, + {-1}, {-1}, +#line 67 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str123, ei_iso8859_2}, +#line 102 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str124, ei_iso8859_6}, +#line 149 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str125, ei_iso8859_14}, + {-1}, {-1}, +#line 62 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str128, ei_iso8859_1}, +#line 152 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str129, ei_iso8859_14}, +#line 94 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str130, ei_iso8859_6}, +#line 95 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str131, ei_iso8859_6}, +#line 166 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str132, ei_iso8859_16}, + {-1}, +#line 53 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str134, ei_iso8859_1}, +#line 54 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str135, ei_iso8859_1}, +#line 139 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str136, ei_iso8859_11}, + {-1}, +#line 160 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str138, ei_iso8859_16}, +#line 161 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str139, ei_iso8859_16}, +#line 177 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str140, ei_cp1252}, + {-1}, +#line 137 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str142, ei_iso8859_11}, +#line 138 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str143, ei_iso8859_11}, +#line 86 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str144, ei_iso8859_4}, +#line 361 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str145, ei_johab}, +#line 162 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str146, ei_iso8859_16}, +#line 209 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str147, ei_cp1131}, +#line 93 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str148, ei_iso8859_5}, + {-1}, +#line 79 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str150, ei_iso8859_4}, +#line 80 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str151, ei_iso8859_4}, +#line 153 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str152, ei_iso8859_14}, +#line 328 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str153, ei_cp936}, +#line 87 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str154, ei_iso8859_5}, +#line 88 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str155, ei_iso8859_5}, +#line 159 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str156, ei_iso8859_15}, +#line 212 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str157, ei_mac_roman}, +#line 146 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str158, ei_iso8859_14}, +#line 147 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str159, ei_iso8859_14}, +#line 120 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str160, ei_iso8859_8}, +#line 66 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str161, ei_iso8859_2}, +#line 154 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str162, ei_iso8859_15}, +#line 155 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str163, ei_iso8859_15}, +#line 128 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str164, ei_iso8859_9}, + {-1}, +#line 114 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str166, ei_iso8859_8}, +#line 115 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str167, ei_iso8859_8}, + {-1}, {-1}, +#line 121 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str170, ei_iso8859_9}, +#line 122 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str171, ei_iso8859_9}, +#line 148 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str172, ei_iso8859_14}, +#line 234 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str173, ei_pt154}, +#line 156 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str174, ei_iso8859_15}, + {-1}, +#line 239 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str176, ei_rk1048}, + {-1}, {-1}, +#line 109 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str179, ei_iso8859_7}, +#line 70 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str180, ei_iso8859_2}, +#line 176 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str181, ei_cp1251}, +#line 206 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str182, ei_cp866}, +#line 144 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str183, ei_iso8859_13}, + {-1}, {-1}, +#line 63 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str186, ei_iso8859_2}, +#line 64 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str187, ei_iso8859_2}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 364 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str193, ei_local_char}, + {-1}, {-1}, {-1}, +#line 74 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str197, ei_iso8859_3}, +#line 117 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str198, ei_iso8859_8}, + {-1}, {-1}, {-1}, +#line 13 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str202, ei_ascii}, +#line 167 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str203, ei_koi8_r}, +#line 354 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str204, ei_euc_kr}, +#line 165 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str205, ei_iso8859_16}, + {-1}, {-1}, {-1}, +#line 313 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str209, ei_cp932}, +#line 353 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str210, ei_euc_kr}, + {-1}, +#line 320 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str212, ei_iso2022_jpms}, + {-1}, {-1}, {-1}, +#line 168 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str216, ei_koi8_r}, +#line 173 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str217, ei_cp1250}, + {-1}, {-1}, +#line 199 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str220, ei_cp850}, + {-1}, {-1}, +#line 22 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str223, ei_ascii}, +#line 58 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str224, ei_iso8859_1}, +#line 218 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str225, ei_mac_cyrillic}, + {-1}, {-1}, +#line 256 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str228, ei_viscii}, + {-1}, {-1}, {-1}, {-1}, +#line 259 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str233, ei_tcvn}, + {-1}, {-1}, +#line 309 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str236, ei_sjis}, +#line 308 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str237, ei_sjis}, +#line 202 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str238, ei_cp862}, + {-1}, +#line 267 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str240, ei_iso646_jp}, + {-1}, +#line 254 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str242, ei_cp874}, +#line 323 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str243, ei_euc_cn}, + {-1}, +#line 21 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str245, ei_ascii}, + {-1}, +#line 258 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str247, ei_viscii}, + {-1}, {-1}, +#line 197 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str250, ei_cp850}, +#line 82 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str251, ei_iso8859_4}, +#line 346 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str252, ei_cp950}, +#line 233 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str253, ei_koi8_t}, +#line 332 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str254, ei_iso2022_cn}, +#line 266 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str255, ei_iso646_jp}, + {-1}, +#line 237 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str257, ei_pt154}, + {-1}, +#line 164 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str259, ei_iso8859_16}, +#line 358 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str260, ei_cp949}, +#line 75 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str261, ei_iso8859_3}, + {-1}, +#line 333 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str263, ei_iso2022_cn}, +#line 131 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str264, ei_iso8859_10}, + {-1}, {-1}, +#line 211 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str267, ei_mac_roman}, +#line 171 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str268, ei_cp1250}, + {-1}, {-1}, +#line 135 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str271, ei_iso8859_10}, +#line 312 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str272, ei_sjis}, +#line 142 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str273, ei_iso8859_13}, +#line 329 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str274, ei_cp936}, +#line 61 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str275, ei_iso8859_1}, +#line 247 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str276, ei_tis620}, + {-1}, +#line 180 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str278, ei_cp1253}, +#line 326 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str279, ei_euc_cn}, +#line 38 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str280, ei_utf16}, +#line 334 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str281, ei_iso2022_cn_ext}, +#line 246 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str282, ei_tis620}, +#line 33 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str283, ei_ucs4}, +#line 110 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str284, ei_iso8859_7}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 92 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str290, ei_iso8859_5}, +#line 85 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str291, ei_iso8859_4}, + {-1}, {-1}, {-1}, +#line 127 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str295, ei_iso8859_9}, + {-1}, {-1}, {-1}, {-1}, +#line 235 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str300, ei_pt154}, +#line 35 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str301, ei_ucs4}, +#line 14 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str302, ei_ascii}, + {-1}, +#line 359 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str304, ei_cp949}, + {-1}, {-1}, {-1}, +#line 23 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str308, ei_utf8}, + {-1}, {-1}, +#line 297 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str311, ei_ksc5601}, + {-1}, {-1}, {-1}, +#line 340 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str315, ei_ces_big5}, +#line 136 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str316, ei_iso8859_10}, + {-1}, +#line 78 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str318, ei_iso8859_3}, +#line 24 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str319, ei_ucs2}, + {-1}, +#line 341 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str321, ei_ces_big5}, +#line 129 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str322, ei_iso8859_10}, +#line 130 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str323, ei_iso8859_10}, +#line 71 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str324, ei_iso8859_3}, +#line 72 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str325, ei_iso8859_3}, +#line 145 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str326, ei_iso8859_13}, +#line 69 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str327, ei_iso8859_2}, +#line 37 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str328, ei_ucs4le}, + {-1}, +#line 241 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str330, ei_rk1048}, + {-1}, +#line 140 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str332, ei_iso8859_13}, +#line 141 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str333, ei_iso8859_13}, +#line 345 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str334, ei_ces_big5}, +#line 40 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str335, ei_utf16le}, +#line 283 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str336, ei_jisx0212}, +#line 244 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str337, ei_cp1133}, +#line 327 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str338, ei_ces_gbk}, +#line 179 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str339, ei_cp1252}, +#line 344 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str340, ei_ces_big5}, +#line 56 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str341, ei_iso8859_1}, + {-1}, +#line 238 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str343, ei_pt154}, + {-1}, +#line 286 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str345, ei_iso646_cn}, +#line 31 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str346, ei_ucs2le}, + {-1}, {-1}, {-1}, +#line 285 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str350, ei_jisx0212}, +#line 29 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str351, ei_ucs2be}, + {-1}, +#line 299 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str353, ei_ksc5601}, + {-1}, +#line 242 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str355, ei_rk1048}, +#line 257 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str356, ei_viscii}, + {-1}, +#line 15 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str358, ei_ascii}, +#line 30 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str359, ei_ucs2be}, +#line 296 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str360, ei_isoir165}, +#line 26 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str361, ei_ucs2}, + {-1}, +#line 49 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str363, ei_ucs4internal}, +#line 226 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str364, ei_hp_roman8}, + {-1}, {-1}, +#line 263 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str367, ei_iso646_jp}, +#line 278 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str368, ei_jisx0208}, + {-1}, {-1}, +#line 302 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str371, ei_ksc5601}, + {-1}, {-1}, +#line 270 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str374, ei_jisx0201}, +#line 243 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str375, ei_mulelao}, + {-1}, +#line 157 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str377, ei_iso8859_15}, +#line 198 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str378, ei_cp850}, + {-1}, +#line 248 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str380, ei_tis620}, +#line 47 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str381, ei_ucs2internal}, +#line 98 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str382, ei_iso8859_6}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 224 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str389, ei_mac_thai}, +#line 111 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str390, ei_iso8859_7}, +#line 230 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str391, ei_armscii_8}, +#line 362 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str392, ei_iso2022_kr}, + {-1}, {-1}, {-1}, +#line 232 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str396, ei_georgian_ps}, +#line 249 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str397, ei_tis620}, +#line 108 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str398, ei_iso8859_7}, + {-1}, {-1}, +#line 363 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str401, ei_iso2022_kr}, + {-1}, +#line 143 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str403, ei_iso8859_13}, + {-1}, +#line 288 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str405, ei_iso646_cn}, +#line 276 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str406, ei_jisx0208}, +#line 225 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str407, ei_hp_roman8}, +#line 304 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str408, ei_euc_jp}, + {-1}, {-1}, +#line 277 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str411, ei_jisx0208}, + {-1}, +#line 132 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str413, ei_iso8859_10}, +#line 303 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str414, ei_euc_jp}, + {-1}, +#line 34 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str416, ei_ucs4}, +#line 356 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str417, ei_euc_kr}, +#line 264 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str418, ei_iso646_jp}, + {-1}, +#line 192 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str420, ei_cp1257}, +#line 32 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str421, ei_ucs2le}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 275 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str427, ei_jisx0208}, + {-1}, +#line 97 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str429, ei_iso8859_6}, +#line 215 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str430, ei_mac_iceland}, +#line 41 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str431, ei_utf32}, + {-1}, {-1}, +#line 25 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str434, ei_ucs2}, +#line 338 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str435, ei_euc_tw}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 337 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str441, ei_euc_tw}, +#line 291 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str442, ei_gb2312}, +#line 208 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str443, ei_cp866}, + {-1}, +#line 101 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str445, ei_iso8859_6}, + {-1}, +#line 112 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str447, ei_iso8859_7}, +#line 213 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str448, ei_mac_roman}, + {-1}, {-1}, {-1}, +#line 355 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str452, ei_euc_kr}, +#line 12 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str453, ei_ascii}, + {-1}, +#line 231 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str455, ei_georgian_academy}, +#line 188 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str456, ei_cp1255}, +#line 365 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str457, ei_local_wchar_t}, +#line 43 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str458, ei_utf32le}, +#line 331 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str459, ei_gb18030}, +#line 113 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str460, ei_iso8859_7}, + {-1}, +#line 81 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str462, ei_iso8859_4}, +#line 214 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str463, ei_mac_centraleurope}, +#line 89 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str464, ei_iso8859_5}, +#line 77 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str465, ei_iso8859_3}, +#line 103 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str466, ei_iso8859_7}, +#line 104 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str467, ei_iso8859_7}, + {-1}, +#line 19 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str469, ei_ascii}, +#line 116 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str470, ei_iso8859_8}, + {-1}, {-1}, {-1}, +#line 123 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str474, ei_iso8859_9}, + {-1}, +#line 210 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str476, ei_mac_roman}, +#line 119 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str477, ei_iso8859_8}, + {-1}, {-1}, {-1}, +#line 261 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str481, ei_tcvn}, +#line 305 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str482, ei_euc_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 240 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str489, ei_rk1048}, +#line 190 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str490, ei_cp1256}, +#line 316 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str491, ei_iso2022_jp1}, +#line 175 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str492, ei_cp1251}, +#line 319 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str493, ei_iso2022_jpms}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 260 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str499, ei_tcvn}, +#line 184 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str500, ei_cp1254}, +#line 298 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str501, ei_ksc5601}, +#line 187 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str502, ei_cp1255}, + {-1}, +#line 325 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str504, ei_euc_cn}, + {-1}, {-1}, {-1}, +#line 196 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str508, ei_cp1258}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 317 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str517, ei_iso2022_jp2}, +#line 178 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str518, ei_cp1252}, + {-1}, +#line 351 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str520, ei_big5hkscs2008}, + {-1}, {-1}, +#line 45 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str523, ei_utf7}, + {-1}, +#line 318 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str525, ei_iso2022_jp2}, +#line 350 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str526, ei_big5hkscs2008}, +#line 301 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str527, ei_ksc5601}, +#line 228 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str528, ei_hp_roman8}, +#line 46 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str529, ei_utf7}, + {-1}, {-1}, +#line 307 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str532, ei_euc_jp}, + {-1}, +#line 336 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str534, ei_hz}, +#line 182 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str535, ei_cp1253}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 220 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str541, ei_mac_greek}, +#line 343 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str542, ei_ces_big5}, +#line 251 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str543, ei_tis620}, + {-1}, {-1}, +#line 324 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str546, ei_euc_cn}, + {-1}, +#line 342 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str548, ei_ces_big5}, +#line 73 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str549, ei_iso8859_3}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, +#line 229 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str561, ei_nextstep}, +#line 216 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str562, ei_mac_croatian}, + {-1}, +#line 330 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str564, ei_cp936}, + {-1}, +#line 290 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str566, ei_iso646_cn}, + {-1}, +#line 36 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str568, ei_ucs4be}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 39 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str575, ei_utf16be}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 172 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str582, ei_cp1250}, + {-1}, {-1}, {-1}, +#line 27 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str586, ei_ucs2be}, +#line 181 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str587, ei_cp1253}, + {-1}, {-1}, +#line 280 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str590, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, +#line 293 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str595, ei_gb2312}, +#line 314 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str596, ei_iso2022_jp}, +#line 20 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str597, ei_ascii}, +#line 245 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str598, ei_cp1133}, + {-1}, {-1}, {-1}, +#line 96 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str602, ei_iso8859_6}, + {-1}, +#line 55 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str604, ei_iso8859_1}, +#line 315 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str605, ei_iso2022_jp}, + {-1}, {-1}, +#line 44 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str608, ei_utf7}, +#line 204 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str609, ei_cp862}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 100 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str618, ei_iso8859_6}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 311 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str625, ei_sjis}, + {-1}, {-1}, +#line 268 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str628, ei_jisx0201}, + {-1}, +#line 65 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str630, ei_iso8859_2}, +#line 28 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str631, ei_ucs2be}, + {-1}, +#line 250 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str633, ei_tis620}, + {-1}, +#line 99 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str635, ei_iso8859_6}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 279 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str643, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, +#line 221 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str648, ei_mac_turkish}, + {-1}, {-1}, {-1}, {-1}, +#line 255 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str653, ei_cp874}, + {-1}, {-1}, {-1}, +#line 18 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str657, ei_ascii}, +#line 193 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str658, ei_cp1257}, + {-1}, +#line 272 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str660, ei_jisx0208}, +#line 269 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str661, ei_jisx0201}, + {-1}, +#line 169 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str663, ei_koi8_u}, +#line 52 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str664, ei_java}, + {-1}, {-1}, {-1}, {-1}, +#line 170 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str669, ei_koi8_ru}, + {-1}, +#line 282 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str671, ei_jisx0212}, + {-1}, {-1}, {-1}, +#line 17 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str675, ei_ascii}, + {-1}, +#line 118 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str677, ei_iso8859_8}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 339 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str683, ei_euc_tw}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 271 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str693, ei_jisx0201}, + {-1}, {-1}, {-1}, {-1}, +#line 42 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str698, ei_utf32be}, +#line 106 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str699, ei_iso8859_7}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 200 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str705, ei_cp850}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 185 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str720, ei_cp1254}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, +#line 274 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str751, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, +#line 273 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str756, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 281 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str764, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, +#line 223 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str769, ei_mac_arabic}, +#line 105 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str770, ei_iso8859_7}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 219 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str777, ei_mac_ukraine}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, +#line 306 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str798, ei_euc_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 217 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str813, ei_mac_romania}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 348 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str828, ei_big5hkscs2001}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 349 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str836, ei_big5hkscs2004}, +#line 360 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str837, ei_johab}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 352 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str844, ei_big5hkscs2008}, + {-1}, +#line 347 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str846, ei_big5hkscs1999}, + {-1}, +#line 222 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str848, ei_mac_hebrew}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, +#line 262 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str879, ei_tcvn}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, +#line 50 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str893, ei_ucs4swapped}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 48 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str911, ei_ucs2swapped}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 194 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str928, ei_cp1257}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 191 "lib/aliases_sysosf1.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str981, ei_cp1256} + }; + +static const struct alias * +aliases_lookup (register const char *str, register size_t len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register unsigned int key = aliases_hash (str, len); + + if (key <= MAX_HASH_VALUE) + { + register int o = aliases[key].name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &aliases[key]; + } + } + } + return 0; +} diff --git a/jni/parted/libiconv/lib/aliases_syssolaris.h b/jni/parted/libiconv/lib/aliases_syssolaris.h new file mode 100755 index 0000000..d112305 --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_syssolaris.h @@ -0,0 +1,1799 @@ +/* ANSI-C code produced by gperf version 3.2 */ +/* Command-line: gperf -m 10 lib/aliases_syssolaris.gperf */ +/* Computed positions: -k'1,3-11,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "lib/aliases_syssolaris.gperf" +struct alias { int name; unsigned int encoding_index; }; + +#define TOTAL_KEYWORDS 356 +#define MIN_WORD_LENGTH 2 +#define MAX_WORD_LENGTH 45 +#define MIN_HASH_VALUE 8 +#define MAX_HASH_VALUE 956 +/* maximum key range = 949, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +aliases_hash (register const char *str, register size_t len) +{ + static const unsigned short asso_values[] = + { + 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 10, 110, 957, 34, 2, + 8, 85, 31, 4, 3, 170, 6, 7, 192, 957, + 957, 957, 957, 957, 957, 26, 164, 2, 39, 78, + 125, 98, 118, 2, 168, 103, 149, 143, 4, 2, + 139, 957, 40, 64, 28, 123, 106, 162, 190, 5, + 4, 957, 957, 957, 957, 82, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957 + }; + register unsigned int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[10]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 10: + hval += asso_values[(unsigned char)str[9]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 9: + hval += asso_values[(unsigned char)str[8]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 8: + hval += asso_values[(unsigned char)str[7]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 7: + hval += asso_values[(unsigned char)str[6]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 6: + hval += asso_values[(unsigned char)str[5]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 5: + hval += asso_values[(unsigned char)str[4]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 4: + hval += asso_values[(unsigned char)str[3]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 3: + hval += asso_values[(unsigned char)str[2]]; +#if defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang_major__ && defined __clang_minor__ && __clang_major__ + (__clang_minor__ >= 9) > 3)) + [[fallthrough]]; +#elif defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((__fallthrough__)); +#endif + /*FALLTHROUGH*/ + case 2: + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str8[sizeof("CN")]; + char stringpool_str12[sizeof("646")]; + char stringpool_str15[sizeof("866")]; + char stringpool_str19[sizeof("C99")]; + char stringpool_str22[sizeof("CP866")]; + char stringpool_str25[sizeof("862")]; + char stringpool_str26[sizeof("CP1251")]; + char stringpool_str28[sizeof("CP1256")]; + char stringpool_str29[sizeof("CP819")]; + char stringpool_str30[sizeof("CP1255")]; + char stringpool_str32[sizeof("CP862")]; + char stringpool_str34[sizeof("CP1258")]; + char stringpool_str38[sizeof("CP1252")]; + char stringpool_str39[sizeof("ASCII")]; + char stringpool_str46[sizeof("5601")]; + char stringpool_str48[sizeof("R8")]; + char stringpool_str50[sizeof("ISO8859-1")]; + char stringpool_str52[sizeof("ISO8859-6")]; + char stringpool_str53[sizeof("ISO8859-11")]; + char stringpool_str54[sizeof("ISO8859-5")]; + char stringpool_str55[sizeof("ISO8859-16")]; + char stringpool_str57[sizeof("ISO8859-15")]; + char stringpool_str58[sizeof("ISO8859-8")]; + char stringpool_str59[sizeof("CP949")]; + char stringpool_str60[sizeof("ISO8859-9")]; + char stringpool_str61[sizeof("ISO-8859-1")]; + char stringpool_str62[sizeof("ISO8859-2")]; + char stringpool_str63[sizeof("ISO-8859-6")]; + char stringpool_str64[sizeof("ISO-8859-11")]; + char stringpool_str65[sizeof("ISO-8859-5")]; + char stringpool_str66[sizeof("ISO-8859-16")]; + char stringpool_str67[sizeof("CP50221")]; + char stringpool_str68[sizeof("ISO-8859-15")]; + char stringpool_str69[sizeof("ISO-8859-8")]; + char stringpool_str70[sizeof("ISO646-CN")]; + char stringpool_str71[sizeof("ISO-8859-9")]; + char stringpool_str73[sizeof("ISO-8859-2")]; + char stringpool_str75[sizeof("CP154")]; + char stringpool_str77[sizeof("850")]; + char stringpool_str80[sizeof("ISO-IR-6")]; + char stringpool_str84[sizeof("CP1254")]; + char stringpool_str85[sizeof("CP850")]; + char stringpool_str86[sizeof("CP950")]; + char stringpool_str87[sizeof("ISO-IR-166")]; + char stringpool_str89[sizeof("ISO-IR-165")]; + char stringpool_str90[sizeof("CP1250")]; + char stringpool_str91[sizeof("ISO-IR-58")]; + char stringpool_str92[sizeof("ISO-IR-126")]; + char stringpool_str95[sizeof("EUCCN")]; + char stringpool_str96[sizeof("ISO-IR-159")]; + char stringpool_str98[sizeof("ISO-IR-226")]; + char stringpool_str99[sizeof("ISO-IR-199")]; + char stringpool_str101[sizeof("CP1131")]; + char stringpool_str102[sizeof("CP1361")]; + char stringpool_str103[sizeof("ISO-2022-CN")]; + char stringpool_str105[sizeof("CP936")]; + char stringpool_str106[sizeof("EUC-CN")]; + char stringpool_str107[sizeof("CSASCII")]; + char stringpool_str108[sizeof("ISO8859-4")]; + char stringpool_str111[sizeof("ISO8859-14")]; + char stringpool_str112[sizeof("CHAR")]; + char stringpool_str115[sizeof("CP932")]; + char stringpool_str116[sizeof("ISO-IR-101")]; + char stringpool_str117[sizeof("ISO8859-10")]; + char stringpool_str119[sizeof("ISO-8859-4")]; + char stringpool_str121[sizeof("ISO-IR-148")]; + char stringpool_str122[sizeof("ISO-8859-14")]; + char stringpool_str123[sizeof("ISO-IR-149")]; + char stringpool_str124[sizeof("HZ")]; + char stringpool_str125[sizeof("RK1048")]; + char stringpool_str126[sizeof("ISO-IR-109")]; + char stringpool_str128[sizeof("ISO-8859-10")]; + char stringpool_str129[sizeof("ANSI-1251")]; + char stringpool_str130[sizeof("UHC")]; + char stringpool_str131[sizeof("ISO-2022-CN-EXT")]; + char stringpool_str133[sizeof("ISO_8859-1")]; + char stringpool_str135[sizeof("ISO_8859-6")]; + char stringpool_str136[sizeof("ISO_8859-11")]; + char stringpool_str137[sizeof("ISO_8859-5")]; + char stringpool_str138[sizeof("ISO_8859-16")]; + char stringpool_str139[sizeof("ISO-IR-14")]; + char stringpool_str140[sizeof("ISO_8859-15")]; + char stringpool_str141[sizeof("ISO_8859-8")]; + char stringpool_str142[sizeof("ISO_8859-16:2001")]; + char stringpool_str143[sizeof("ISO_8859-9")]; + char stringpool_str145[sizeof("ISO_8859-2")]; + char stringpool_str146[sizeof("TCVN")]; + char stringpool_str147[sizeof("ISO_8859-15:1998")]; + char stringpool_str148[sizeof("ISO-IR-110")]; + char stringpool_str149[sizeof("CSISO2022CN")]; + char stringpool_str150[sizeof("MAC")]; + char stringpool_str153[sizeof("L1")]; + char stringpool_str154[sizeof("L6")]; + char stringpool_str155[sizeof("L5")]; + char stringpool_str157[sizeof("L8")]; + char stringpool_str159[sizeof("L2")]; + char stringpool_str166[sizeof("IBM866")]; + char stringpool_str171[sizeof("ISO-IR-144")]; + char stringpool_str173[sizeof("IBM819")]; + char stringpool_str174[sizeof("ISO_8859-14:1998")]; + char stringpool_str175[sizeof("ISO-IR-138")]; + char stringpool_str176[sizeof("IBM862")]; + char stringpool_str177[sizeof("TIS620")]; + char stringpool_str179[sizeof("ISO_8859-10:1992")]; + char stringpool_str180[sizeof("ISO-IR-100")]; + char stringpool_str182[sizeof("L4")]; + char stringpool_str183[sizeof("KOI8-T")]; + char stringpool_str184[sizeof("VISCII")]; + char stringpool_str188[sizeof("TIS-620")]; + char stringpool_str189[sizeof("US")]; + char stringpool_str190[sizeof("CSVISCII")]; + char stringpool_str191[sizeof("ISO_8859-4")]; + char stringpool_str192[sizeof("CP1253")]; + char stringpool_str193[sizeof("LATIN1")]; + char stringpool_str194[sizeof("ISO_8859-14")]; + char stringpool_str195[sizeof("LATIN6")]; + char stringpool_str196[sizeof("CSKZ1048")]; + char stringpool_str197[sizeof("LATIN5")]; + char stringpool_str198[sizeof("SJIS")]; + char stringpool_str199[sizeof("KZ-1048")]; + char stringpool_str200[sizeof("ISO_8859-10")]; + char stringpool_str201[sizeof("LATIN8")]; + char stringpool_str202[sizeof("CSKOI8R")]; + char stringpool_str205[sizeof("LATIN2")]; + char stringpool_str207[sizeof("KOI8-R")]; + char stringpool_str212[sizeof("PT154")]; + char stringpool_str214[sizeof("LATIN-9")]; + char stringpool_str215[sizeof("GB2312")]; + char stringpool_str216[sizeof("ISO8859-3")]; + char stringpool_str218[sizeof("UCS-2")]; + char stringpool_str219[sizeof("ISO8859-13")]; + char stringpool_str220[sizeof("L10")]; + char stringpool_str221[sizeof("X0212")]; + char stringpool_str223[sizeof("TIS620-0")]; + char stringpool_str225[sizeof("ELOT_928")]; + char stringpool_str227[sizeof("ISO-8859-3")]; + char stringpool_str228[sizeof("ARABIC")]; + char stringpool_str229[sizeof("IBM850")]; + char stringpool_str230[sizeof("ISO-8859-13")]; + char stringpool_str231[sizeof("ROMAN8")]; + char stringpool_str236[sizeof("L3")]; + char stringpool_str239[sizeof("US-ASCII")]; + char stringpool_str240[sizeof("KSC_5601")]; + char stringpool_str241[sizeof("X0201")]; + char stringpool_str243[sizeof("ISO-10646-UCS-2")]; + char stringpool_str245[sizeof("CP874")]; + char stringpool_str246[sizeof("MS936")]; + char stringpool_str249[sizeof("X0208")]; + char stringpool_str251[sizeof("LATIN4")]; + char stringpool_str258[sizeof("MS-ANSI")]; + char stringpool_str259[sizeof("CSUCS4")]; + char stringpool_str260[sizeof("LATIN10")]; + char stringpool_str261[sizeof("KOREAN")]; + char stringpool_str262[sizeof("ISO-IR-179")]; + char stringpool_str264[sizeof("UCS-4")]; + char stringpool_str266[sizeof("ISO-10646-UCS-4")]; + char stringpool_str267[sizeof("CP1133")]; + char stringpool_str268[sizeof("EUCKR")]; + char stringpool_str269[sizeof("CSUNICODE11")]; + char stringpool_str270[sizeof("ARMSCII-8")]; + char stringpool_str272[sizeof("UTF-16")]; + char stringpool_str274[sizeof("BIG5")]; + char stringpool_str275[sizeof("UTF-8")]; + char stringpool_str276[sizeof("ISO-2022-KR")]; + char stringpool_str279[sizeof("EUC-KR")]; + char stringpool_str280[sizeof("CSBIG5")]; + char stringpool_str281[sizeof("ECMA-118")]; + char stringpool_str282[sizeof("CNS11643")]; + char stringpool_str283[sizeof("UNICODE-1-1")]; + char stringpool_str285[sizeof("BIG-5")]; + char stringpool_str287[sizeof("ISO-CELTIC")]; + char stringpool_str288[sizeof("ISO-IR-203")]; + char stringpool_str289[sizeof("TIS620.2529-1")]; + char stringpool_str290[sizeof("MACCROATIAN")]; + char stringpool_str291[sizeof("CN-BIG5")]; + char stringpool_str294[sizeof("CSISOLATIN1")]; + char stringpool_str295[sizeof("GB_1988-80")]; + char stringpool_str296[sizeof("CSISOLATIN6")]; + char stringpool_str298[sizeof("CSISOLATIN5")]; + char stringpool_str299[sizeof("ISO_8859-3")]; + char stringpool_str300[sizeof("GB18030")]; + char stringpool_str301[sizeof("CSISOLATINCYRILLIC")]; + char stringpool_str302[sizeof("ISO_8859-13")]; + char stringpool_str306[sizeof("CSISOLATIN2")]; + char stringpool_str307[sizeof("GBK")]; + char stringpool_str309[sizeof("JP")]; + char stringpool_str311[sizeof("ISO646-US")]; + char stringpool_str313[sizeof("CHINESE")]; + char stringpool_str315[sizeof("VISCII1.1-1")]; + char stringpool_str321[sizeof("L7")]; + char stringpool_str322[sizeof("CSISO2022KR")]; + char stringpool_str323[sizeof("CSISOLATINARABIC")]; + char stringpool_str327[sizeof("JIS0208")]; + char stringpool_str328[sizeof("MACTHAI")]; + char stringpool_str329[sizeof("GEORGIAN-ACADEMY")]; + char stringpool_str330[sizeof("JAVA")]; + char stringpool_str331[sizeof("ECMA-114")]; + char stringpool_str334[sizeof("CSIBM866")]; + char stringpool_str336[sizeof("ISO_8859-5:1988")]; + char stringpool_str338[sizeof("ISO_8859-8:1988")]; + char stringpool_str339[sizeof("CSUNICODE")]; + char stringpool_str340[sizeof("ISO_8859-9:1989")]; + char stringpool_str345[sizeof("KS_C_5601-1989")]; + char stringpool_str346[sizeof("TCVN5712-1")]; + char stringpool_str348[sizeof("PCK")]; + char stringpool_str349[sizeof("TCVN-5712")]; + char stringpool_str352[sizeof("CSISOLATIN4")]; + char stringpool_str353[sizeof("STRK1048-2002")]; + char stringpool_str355[sizeof("PTCP154")]; + char stringpool_str356[sizeof("CYRILLIC")]; + char stringpool_str358[sizeof("CSISO14JISC6220RO")]; + char stringpool_str359[sizeof("LATIN3")]; + char stringpool_str362[sizeof("CP1257")]; + char stringpool_str363[sizeof("ISO_8859-4:1988")]; + char stringpool_str364[sizeof("HP-ROMAN8")]; + char stringpool_str365[sizeof("UTF-32")]; + char stringpool_str371[sizeof("CSISO159JISX02121990")]; + char stringpool_str372[sizeof("MACROMAN")]; + char stringpool_str373[sizeof("KOI8-U")]; + char stringpool_str375[sizeof("GREEK8")]; + char stringpool_str377[sizeof("GB_2312-80")]; + char stringpool_str383[sizeof("CSGB2312")]; + char stringpool_str386[sizeof("ISO8859-7")]; + char stringpool_str387[sizeof("CSPTCP154")]; + char stringpool_str392[sizeof("MS-EE")]; + char stringpool_str395[sizeof("CSEUCKR")]; + char stringpool_str397[sizeof("ISO-8859-7")]; + char stringpool_str399[sizeof("ISO_646.IRV:1991")]; + char stringpool_str400[sizeof("JIS_C6220-1969-RO")]; + char stringpool_str404[sizeof("ISO-2022-JP-1")]; + char stringpool_str405[sizeof("ASMO-708")]; + char stringpool_str406[sizeof("CSKSC56011987")]; + char stringpool_str410[sizeof("ISO-2022-JP-2")]; + char stringpool_str412[sizeof("CN-GB-ISOIR165")]; + char stringpool_str414[sizeof("KOI8-RU")]; + char stringpool_str416[sizeof("MACARABIC")]; + char stringpool_str417[sizeof("ISO_8859-3:1988")]; + char stringpool_str419[sizeof("ISO-IR-57")]; + char stringpool_str421[sizeof("ISO-IR-87")]; + char stringpool_str422[sizeof("ISO-IR-157")]; + char stringpool_str424[sizeof("MACROMANIA")]; + char stringpool_str426[sizeof("ISO-IR-127")]; + char stringpool_str435[sizeof("CP367")]; + char stringpool_str437[sizeof("EUCTW")]; + char stringpool_str441[sizeof("CSUNICODE11UTF7")]; + char stringpool_str443[sizeof("CN-GB")]; + char stringpool_str444[sizeof("TIS620.2533-1")]; + char stringpool_str448[sizeof("EUC-TW")]; + char stringpool_str449[sizeof("JIS_C6226-1983")]; + char stringpool_str455[sizeof("CSISO2022JP2")]; + char stringpool_str457[sizeof("UNICODE-1-1-UTF-7")]; + char stringpool_str460[sizeof("CSISOLATIN3")]; + char stringpool_str464[sizeof("CYRILLIC-ASIAN")]; + char stringpool_str465[sizeof("GREEK")]; + char stringpool_str467[sizeof("ISO-2022-JP-MS")]; + char stringpool_str469[sizeof("ISO_8859-7")]; + char stringpool_str471[sizeof("WINDOWS-1251")]; + char stringpool_str472[sizeof("WINDOWS-1256")]; + char stringpool_str473[sizeof("WINDOWS-1255")]; + char stringpool_str475[sizeof("WINDOWS-1258")]; + char stringpool_str476[sizeof("TIS620.2533-0")]; + char stringpool_str477[sizeof("WINDOWS-1252")]; + char stringpool_str484[sizeof("CSISO58GB231280")]; + char stringpool_str490[sizeof("MACINTOSH")]; + char stringpool_str491[sizeof("WCHAR_T")]; + char stringpool_str494[sizeof("MACICELAND")]; + char stringpool_str495[sizeof("CSISOLATINGREEK")]; + char stringpool_str496[sizeof("CSHPROMAN8")]; + char stringpool_str498[sizeof("ISO_8859-1:1987")]; + char stringpool_str499[sizeof("ISO_8859-6:1987")]; + char stringpool_str500[sizeof("WINDOWS-1254")]; + char stringpool_str503[sizeof("WINDOWS-1250")]; + char stringpool_str504[sizeof("ISO_8859-2:1987")]; + char stringpool_str505[sizeof("MS-CYRL")]; + char stringpool_str506[sizeof("ISO646-JP")]; + char stringpool_str508[sizeof("KS_C_5601-1987")]; + char stringpool_str509[sizeof("MACCYRILLIC")]; + char stringpool_str517[sizeof("UCS-2LE")]; + char stringpool_str520[sizeof("CSMACINTOSH")]; + char stringpool_str521[sizeof("HZ-GB-2312")]; + char stringpool_str525[sizeof("TIS620.2533")]; + char stringpool_str529[sizeof("LATIN7")]; + char stringpool_str530[sizeof("UCS-2-INTERNAL")]; + char stringpool_str531[sizeof("EUCJP")]; + char stringpool_str532[sizeof("UCS-2BE")]; + char stringpool_str534[sizeof("CSISO57GB1988")]; + char stringpool_str535[sizeof("JISX0201-1976")]; + char stringpool_str536[sizeof("SHIFT-JIS")]; + char stringpool_str538[sizeof("MS_KANJI")]; + char stringpool_str539[sizeof("ISO-2022-JP")]; + char stringpool_str540[sizeof("UCS-4LE")]; + char stringpool_str542[sizeof("EUC-JP")]; + char stringpool_str544[sizeof("UNICODELITTLE")]; + char stringpool_str545[sizeof("CSPC862LATINHEBREW")]; + char stringpool_str552[sizeof("WINDOWS-936")]; + char stringpool_str553[sizeof("UCS-4-INTERNAL")]; + char stringpool_str554[sizeof("WINDOWS-1253")]; + char stringpool_str555[sizeof("UCS-4BE")]; + char stringpool_str557[sizeof("MS-TURK")]; + char stringpool_str558[sizeof("GEORGIAN-PS")]; + char stringpool_str564[sizeof("CSEUCTW")]; + char stringpool_str565[sizeof("IBM-CP1133")]; + char stringpool_str570[sizeof("MULELAO-1")]; + char stringpool_str573[sizeof("JIS_X0212")]; + char stringpool_str575[sizeof("CSISOLATINHEBREW")]; + char stringpool_str576[sizeof("UTF-16LE")]; + char stringpool_str579[sizeof("IBM367")]; + char stringpool_str580[sizeof("MS-ARAB")]; + char stringpool_str581[sizeof("ISO_8859-7:2003")]; + char stringpool_str585[sizeof("CSISO2022JP")]; + char stringpool_str591[sizeof("UTF-16BE")]; + char stringpool_str593[sizeof("JIS_X0201")]; + char stringpool_str600[sizeof("MS-HEBR")]; + char stringpool_str601[sizeof("JIS_X0208")]; + char stringpool_str603[sizeof("UTF-7")]; + char stringpool_str608[sizeof("SHIFT_JIS")]; + char stringpool_str609[sizeof("MACUKRAINE")]; + char stringpool_str616[sizeof("JIS_X0212-1990")]; + char stringpool_str618[sizeof("UNICODEBIG")]; + char stringpool_str619[sizeof("ANSI_X3.4-1986")]; + char stringpool_str622[sizeof("ANSI_X3.4-1968")]; + char stringpool_str626[sizeof("TCVN5712-1:1993")]; + char stringpool_str639[sizeof("WINDOWS-1257")]; + char stringpool_str644[sizeof("MACCENTRALEUROPE")]; + char stringpool_str645[sizeof("JOHAB")]; + char stringpool_str646[sizeof("JIS_X0208-1990")]; + char stringpool_str647[sizeof("CSSHIFTJIS")]; + char stringpool_str653[sizeof("MACGREEK")]; + char stringpool_str658[sizeof("BIGFIVE")]; + char stringpool_str661[sizeof("MS-GREEK")]; + char stringpool_str664[sizeof("UTF-32LE")]; + char stringpool_str666[sizeof("ISO_8859-7:1987")]; + char stringpool_str669[sizeof("BIG-FIVE")]; + char stringpool_str676[sizeof("EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE")]; + char stringpool_str678[sizeof("NEXTSTEP")]; + char stringpool_str679[sizeof("UTF-32BE")]; + char stringpool_str690[sizeof("BIG5HKSCS")]; + char stringpool_str691[sizeof("CSISO87JISX0208")]; + char stringpool_str692[sizeof("WINDOWS-874")]; + char stringpool_str697[sizeof("JIS_X0208-1983")]; + char stringpool_str701[sizeof("BIG5-HKSCS")]; + char stringpool_str718[sizeof("JIS_X0212.1990-0")]; + char stringpool_str730[sizeof("HEBREW")]; + char stringpool_str751[sizeof("MACTURKISH")]; + char stringpool_str797[sizeof("UCS-2-SWAPPED")]; + char stringpool_str798[sizeof("CSPC850MULTILINGUAL")]; + char stringpool_str814[sizeof("CSHALFWIDTHKATAKANA")]; + char stringpool_str820[sizeof("UCS-4-SWAPPED")]; + char stringpool_str836[sizeof("BIG5-HKSCS:2001")]; + char stringpool_str840[sizeof("BIG5-HKSCS:2008")]; + char stringpool_str841[sizeof("BIG5-HKSCS:1999")]; + char stringpool_str865[sizeof("BIG5-HKSCS:2004")]; + char stringpool_str871[sizeof("WINBALTRIM")]; + char stringpool_str879[sizeof("CSEUCPKDFMTJAPANESE")]; + char stringpool_str912[sizeof("KO_KR.JOHAP92")]; + char stringpool_str956[sizeof("MACHEBREW")]; + }; +static const struct stringpool_t stringpool_contents = + { + "CN", + "646", + "866", + "C99", + "CP866", + "862", + "CP1251", + "CP1256", + "CP819", + "CP1255", + "CP862", + "CP1258", + "CP1252", + "ASCII", + "5601", + "R8", + "ISO8859-1", + "ISO8859-6", + "ISO8859-11", + "ISO8859-5", + "ISO8859-16", + "ISO8859-15", + "ISO8859-8", + "CP949", + "ISO8859-9", + "ISO-8859-1", + "ISO8859-2", + "ISO-8859-6", + "ISO-8859-11", + "ISO-8859-5", + "ISO-8859-16", + "CP50221", + "ISO-8859-15", + "ISO-8859-8", + "ISO646-CN", + "ISO-8859-9", + "ISO-8859-2", + "CP154", + "850", + "ISO-IR-6", + "CP1254", + "CP850", + "CP950", + "ISO-IR-166", + "ISO-IR-165", + "CP1250", + "ISO-IR-58", + "ISO-IR-126", + "EUCCN", + "ISO-IR-159", + "ISO-IR-226", + "ISO-IR-199", + "CP1131", + "CP1361", + "ISO-2022-CN", + "CP936", + "EUC-CN", + "CSASCII", + "ISO8859-4", + "ISO8859-14", + "CHAR", + "CP932", + "ISO-IR-101", + "ISO8859-10", + "ISO-8859-4", + "ISO-IR-148", + "ISO-8859-14", + "ISO-IR-149", + "HZ", + "RK1048", + "ISO-IR-109", + "ISO-8859-10", + "ANSI-1251", + "UHC", + "ISO-2022-CN-EXT", + "ISO_8859-1", + "ISO_8859-6", + "ISO_8859-11", + "ISO_8859-5", + "ISO_8859-16", + "ISO-IR-14", + "ISO_8859-15", + "ISO_8859-8", + "ISO_8859-16:2001", + "ISO_8859-9", + "ISO_8859-2", + "TCVN", + "ISO_8859-15:1998", + "ISO-IR-110", + "CSISO2022CN", + "MAC", + "L1", + "L6", + "L5", + "L8", + "L2", + "IBM866", + "ISO-IR-144", + "IBM819", + "ISO_8859-14:1998", + "ISO-IR-138", + "IBM862", + "TIS620", + "ISO_8859-10:1992", + "ISO-IR-100", + "L4", + "KOI8-T", + "VISCII", + "TIS-620", + "US", + "CSVISCII", + "ISO_8859-4", + "CP1253", + "LATIN1", + "ISO_8859-14", + "LATIN6", + "CSKZ1048", + "LATIN5", + "SJIS", + "KZ-1048", + "ISO_8859-10", + "LATIN8", + "CSKOI8R", + "LATIN2", + "KOI8-R", + "PT154", + "LATIN-9", + "GB2312", + "ISO8859-3", + "UCS-2", + "ISO8859-13", + "L10", + "X0212", + "TIS620-0", + "ELOT_928", + "ISO-8859-3", + "ARABIC", + "IBM850", + "ISO-8859-13", + "ROMAN8", + "L3", + "US-ASCII", + "KSC_5601", + "X0201", + "ISO-10646-UCS-2", + "CP874", + "MS936", + "X0208", + "LATIN4", + "MS-ANSI", + "CSUCS4", + "LATIN10", + "KOREAN", + "ISO-IR-179", + "UCS-4", + "ISO-10646-UCS-4", + "CP1133", + "EUCKR", + "CSUNICODE11", + "ARMSCII-8", + "UTF-16", + "BIG5", + "UTF-8", + "ISO-2022-KR", + "EUC-KR", + "CSBIG5", + "ECMA-118", + "CNS11643", + "UNICODE-1-1", + "BIG-5", + "ISO-CELTIC", + "ISO-IR-203", + "TIS620.2529-1", + "MACCROATIAN", + "CN-BIG5", + "CSISOLATIN1", + "GB_1988-80", + "CSISOLATIN6", + "CSISOLATIN5", + "ISO_8859-3", + "GB18030", + "CSISOLATINCYRILLIC", + "ISO_8859-13", + "CSISOLATIN2", + "GBK", + "JP", + "ISO646-US", + "CHINESE", + "VISCII1.1-1", + "L7", + "CSISO2022KR", + "CSISOLATINARABIC", + "JIS0208", + "MACTHAI", + "GEORGIAN-ACADEMY", + "JAVA", + "ECMA-114", + "CSIBM866", + "ISO_8859-5:1988", + "ISO_8859-8:1988", + "CSUNICODE", + "ISO_8859-9:1989", + "KS_C_5601-1989", + "TCVN5712-1", + "PCK", + "TCVN-5712", + "CSISOLATIN4", + "STRK1048-2002", + "PTCP154", + "CYRILLIC", + "CSISO14JISC6220RO", + "LATIN3", + "CP1257", + "ISO_8859-4:1988", + "HP-ROMAN8", + "UTF-32", + "CSISO159JISX02121990", + "MACROMAN", + "KOI8-U", + "GREEK8", + "GB_2312-80", + "CSGB2312", + "ISO8859-7", + "CSPTCP154", + "MS-EE", + "CSEUCKR", + "ISO-8859-7", + "ISO_646.IRV:1991", + "JIS_C6220-1969-RO", + "ISO-2022-JP-1", + "ASMO-708", + "CSKSC56011987", + "ISO-2022-JP-2", + "CN-GB-ISOIR165", + "KOI8-RU", + "MACARABIC", + "ISO_8859-3:1988", + "ISO-IR-57", + "ISO-IR-87", + "ISO-IR-157", + "MACROMANIA", + "ISO-IR-127", + "CP367", + "EUCTW", + "CSUNICODE11UTF7", + "CN-GB", + "TIS620.2533-1", + "EUC-TW", + "JIS_C6226-1983", + "CSISO2022JP2", + "UNICODE-1-1-UTF-7", + "CSISOLATIN3", + "CYRILLIC-ASIAN", + "GREEK", + "ISO-2022-JP-MS", + "ISO_8859-7", + "WINDOWS-1251", + "WINDOWS-1256", + "WINDOWS-1255", + "WINDOWS-1258", + "TIS620.2533-0", + "WINDOWS-1252", + "CSISO58GB231280", + "MACINTOSH", + "WCHAR_T", + "MACICELAND", + "CSISOLATINGREEK", + "CSHPROMAN8", + "ISO_8859-1:1987", + "ISO_8859-6:1987", + "WINDOWS-1254", + "WINDOWS-1250", + "ISO_8859-2:1987", + "MS-CYRL", + "ISO646-JP", + "KS_C_5601-1987", + "MACCYRILLIC", + "UCS-2LE", + "CSMACINTOSH", + "HZ-GB-2312", + "TIS620.2533", + "LATIN7", + "UCS-2-INTERNAL", + "EUCJP", + "UCS-2BE", + "CSISO57GB1988", + "JISX0201-1976", + "SHIFT-JIS", + "MS_KANJI", + "ISO-2022-JP", + "UCS-4LE", + "EUC-JP", + "UNICODELITTLE", + "CSPC862LATINHEBREW", + "WINDOWS-936", + "UCS-4-INTERNAL", + "WINDOWS-1253", + "UCS-4BE", + "MS-TURK", + "GEORGIAN-PS", + "CSEUCTW", + "IBM-CP1133", + "MULELAO-1", + "JIS_X0212", + "CSISOLATINHEBREW", + "UTF-16LE", + "IBM367", + "MS-ARAB", + "ISO_8859-7:2003", + "CSISO2022JP", + "UTF-16BE", + "JIS_X0201", + "MS-HEBR", + "JIS_X0208", + "UTF-7", + "SHIFT_JIS", + "MACUKRAINE", + "JIS_X0212-1990", + "UNICODEBIG", + "ANSI_X3.4-1986", + "ANSI_X3.4-1968", + "TCVN5712-1:1993", + "WINDOWS-1257", + "MACCENTRALEUROPE", + "JOHAB", + "JIS_X0208-1990", + "CSSHIFTJIS", + "MACGREEK", + "BIGFIVE", + "MS-GREEK", + "UTF-32LE", + "ISO_8859-7:1987", + "BIG-FIVE", + "EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE", + "NEXTSTEP", + "UTF-32BE", + "BIG5HKSCS", + "CSISO87JISX0208", + "WINDOWS-874", + "JIS_X0208-1983", + "BIG5-HKSCS", + "JIS_X0212.1990-0", + "HEBREW", + "MACTURKISH", + "UCS-2-SWAPPED", + "CSPC850MULTILINGUAL", + "CSHALFWIDTHKATAKANA", + "UCS-4-SWAPPED", + "BIG5-HKSCS:2001", + "BIG5-HKSCS:2008", + "BIG5-HKSCS:1999", + "BIG5-HKSCS:2004", + "WINBALTRIM", + "CSEUCPKDFMTJAPANESE", + "KO_KR.JOHAP92", + "MACHEBREW" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct alias aliases[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 291 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str8, ei_iso646_cn}, + {-1}, {-1}, {-1}, +#line 23 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str12, ei_ascii}, + {-1}, {-1}, +#line 209 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str15, ei_cp866}, + {-1}, {-1}, {-1}, +#line 52 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str19, ei_c99}, + {-1}, {-1}, +#line 207 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str22, ei_cp866}, + {-1}, {-1}, +#line 205 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str25, ei_cp862}, +#line 175 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str26, ei_cp1251}, + {-1}, +#line 191 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str28, ei_cp1256}, +#line 58 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str29, ei_iso8859_1}, +#line 188 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str30, ei_cp1255}, + {-1}, +#line 203 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str32, ei_cp862}, + {-1}, +#line 197 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str34, ei_cp1258}, + {-1}, {-1}, {-1}, +#line 179 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str38, ei_cp1252}, +#line 13 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str39, ei_ascii}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 358 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str46, ei_euc_kr}, + {-1}, +#line 229 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str48, ei_hp_roman8}, + {-1}, +#line 63 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str50, ei_iso8859_1}, + {-1}, +#line 103 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str52, ei_iso8859_6}, +#line 140 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str53, ei_iso8859_11}, +#line 94 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str54, ei_iso8859_5}, +#line 167 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str55, ei_iso8859_16}, + {-1}, +#line 160 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str57, ei_iso8859_15}, +#line 121 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str58, ei_iso8859_8}, +#line 359 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str59, ei_cp949}, +#line 129 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str60, ei_iso8859_9}, +#line 54 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str61, ei_iso8859_1}, +#line 71 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str62, ei_iso8859_2}, +#line 95 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str63, ei_iso8859_6}, +#line 138 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str64, ei_iso8859_11}, +#line 88 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str65, ei_iso8859_5}, +#line 161 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str66, ei_iso8859_16}, +#line 322 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str67, ei_iso2022_jpms}, +#line 155 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str68, ei_iso8859_15}, +#line 115 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str69, ei_iso8859_8}, +#line 289 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str70, ei_iso646_cn}, +#line 122 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str71, ei_iso8859_9}, + {-1}, +#line 64 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str73, ei_iso8859_2}, + {-1}, +#line 238 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str75, ei_pt154}, + {-1}, +#line 201 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str77, ei_cp850}, + {-1}, {-1}, +#line 16 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str80, ei_ascii}, + {-1}, {-1}, {-1}, +#line 185 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str84, ei_cp1254}, +#line 199 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str85, ei_cp850}, +#line 348 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str86, ei_cp950}, +#line 254 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str87, ei_tis620}, + {-1}, +#line 297 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str89, ei_isoir165}, +#line 172 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str90, ei_cp1250}, +#line 294 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str91, ei_gb2312}, +#line 108 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str92, ei_iso8859_7}, + {-1}, {-1}, +#line 324 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str95, ei_euc_cn}, +#line 286 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str96, ei_jisx0212}, + {-1}, +#line 164 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str98, ei_iso8859_16}, +#line 150 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str99, ei_iso8859_14}, + {-1}, +#line 211 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str101, ei_cp1131}, +#line 362 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str102, ei_johab}, +#line 333 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str103, ei_iso2022_cn}, + {-1}, +#line 329 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str105, ei_cp936}, +#line 323 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str106, ei_euc_cn}, +#line 22 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str107, ei_ascii}, +#line 87 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str108, ei_iso8859_4}, + {-1}, {-1}, +#line 154 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str111, ei_iso8859_14}, +#line 366 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str112, ei_local_char}, + {-1}, {-1}, +#line 315 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str115, ei_cp932}, +#line 67 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str116, ei_iso8859_2}, +#line 137 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str117, ei_iso8859_10}, + {-1}, +#line 80 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str119, ei_iso8859_4}, + {-1}, +#line 125 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str121, ei_iso8859_9}, +#line 147 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str122, ei_iso8859_14}, +#line 302 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str123, ei_ksc5601}, +#line 336 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str124, ei_hz}, +#line 241 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str125, ei_rk1048}, +#line 75 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str126, ei_iso8859_3}, + {-1}, +#line 130 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str128, ei_iso8859_10}, +#line 178 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str129, ei_cp1251}, +#line 360 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str130, ei_cp949}, +#line 335 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str131, ei_iso2022_cn_ext}, + {-1}, +#line 55 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str133, ei_iso8859_1}, + {-1}, +#line 96 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str135, ei_iso8859_6}, +#line 139 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str136, ei_iso8859_11}, +#line 89 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str137, ei_iso8859_5}, +#line 162 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str138, ei_iso8859_16}, +#line 267 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str139, ei_iso646_jp}, +#line 156 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str140, ei_iso8859_15}, +#line 116 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str141, ei_iso8859_8}, +#line 163 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str142, ei_iso8859_16}, +#line 123 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str143, ei_iso8859_9}, + {-1}, +#line 65 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str145, ei_iso8859_2}, +#line 261 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str146, ei_tcvn}, +#line 157 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str147, ei_iso8859_15}, +#line 83 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str148, ei_iso8859_4}, +#line 334 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str149, ei_iso2022_cn}, +#line 214 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str150, ei_mac_roman}, + {-1}, {-1}, +#line 61 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str153, ei_iso8859_1}, +#line 135 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str154, ei_iso8859_10}, +#line 127 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str155, ei_iso8859_9}, + {-1}, +#line 152 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str157, ei_iso8859_14}, + {-1}, +#line 69 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str159, ei_iso8859_2}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 208 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str166, ei_cp866}, + {-1}, {-1}, {-1}, {-1}, +#line 91 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str171, ei_iso8859_5}, + {-1}, +#line 59 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str173, ei_iso8859_1}, +#line 149 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str174, ei_iso8859_14}, +#line 118 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str175, ei_iso8859_8}, +#line 204 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str176, ei_cp862}, +#line 249 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str177, ei_tis620}, + {-1}, +#line 132 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str179, ei_iso8859_10}, +#line 57 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str180, ei_iso8859_1}, + {-1}, +#line 85 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str182, ei_iso8859_4}, +#line 235 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str183, ei_koi8_t}, +#line 258 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str184, ei_viscii}, + {-1}, {-1}, {-1}, +#line 248 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str188, ei_tis620}, +#line 21 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str189, ei_ascii}, +#line 260 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str190, ei_viscii}, +#line 81 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str191, ei_iso8859_4}, +#line 182 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str192, ei_cp1253}, +#line 60 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str193, ei_iso8859_1}, +#line 148 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str194, ei_iso8859_14}, +#line 134 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str195, ei_iso8859_10}, +#line 244 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str196, ei_rk1048}, +#line 126 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str197, ei_iso8859_9}, +#line 311 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str198, ei_sjis}, +#line 243 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str199, ei_rk1048}, +#line 131 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str200, ei_iso8859_10}, +#line 151 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str201, ei_iso8859_14}, +#line 169 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str202, ei_koi8_r}, + {-1}, {-1}, +#line 68 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str205, ei_iso8859_2}, + {-1}, +#line 168 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str207, ei_koi8_r}, + {-1}, {-1}, {-1}, {-1}, +#line 236 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str212, ei_pt154}, + {-1}, +#line 159 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str214, ei_iso8859_15}, +#line 325 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str215, ei_euc_cn}, +#line 79 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str216, ei_iso8859_3}, + {-1}, +#line 25 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str218, ei_ucs2}, +#line 146 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str219, ei_iso8859_13}, +#line 166 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str220, ei_iso8859_16}, +#line 285 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str221, ei_jisx0212}, + {-1}, +#line 250 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str223, ei_tis620}, + {-1}, +#line 110 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str225, ei_iso8859_7}, + {-1}, +#line 72 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str227, ei_iso8859_3}, +#line 101 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str228, ei_iso8859_6}, +#line 200 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str229, ei_cp850}, +#line 141 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str230, ei_iso8859_13}, +#line 228 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str231, ei_hp_roman8}, + {-1}, {-1}, {-1}, {-1}, +#line 77 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str236, ei_iso8859_3}, + {-1}, {-1}, +#line 12 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str239, ei_ascii}, +#line 299 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str240, ei_ksc5601}, +#line 272 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str241, ei_jisx0201}, + {-1}, +#line 26 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str243, ei_ucs2}, + {-1}, +#line 256 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str245, ei_cp874}, +#line 330 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str246, ei_cp936}, + {-1}, {-1}, +#line 278 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str249, ei_jisx0208}, + {-1}, +#line 84 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str251, ei_iso8859_4}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 181 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str258, ei_cp1252}, +#line 36 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str259, ei_ucs4}, +#line 165 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str260, ei_iso8859_16}, +#line 304 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str261, ei_ksc5601}, +#line 143 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str262, ei_iso8859_13}, + {-1}, +#line 34 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str264, ei_ucs4}, + {-1}, +#line 35 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str266, ei_ucs4}, +#line 246 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str267, ei_cp1133}, +#line 356 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str268, ei_euc_kr}, +#line 31 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str269, ei_ucs2be}, +#line 232 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str270, ei_armscii_8}, + {-1}, +#line 39 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str272, ei_utf16}, + {-1}, +#line 342 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str274, ei_ces_big5}, +#line 24 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str275, ei_utf8}, +#line 364 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str276, ei_iso2022_kr}, + {-1}, {-1}, +#line 355 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str279, ei_euc_kr}, +#line 347 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str280, ei_ces_big5}, +#line 109 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str281, ei_iso8859_7}, +#line 341 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str282, ei_euc_tw}, +#line 30 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str283, ei_ucs2be}, + {-1}, +#line 343 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str285, ei_ces_big5}, + {-1}, +#line 153 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str287, ei_iso8859_14}, +#line 158 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str288, ei_iso8859_15}, +#line 251 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str289, ei_tis620}, +#line 218 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str290, ei_mac_croatian}, +#line 346 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str291, ei_ces_big5}, + {-1}, {-1}, +#line 62 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str294, ei_iso8859_1}, +#line 288 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str295, ei_iso646_cn}, +#line 136 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str296, ei_iso8859_10}, + {-1}, +#line 128 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str298, ei_iso8859_9}, +#line 73 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str299, ei_iso8859_3}, +#line 332 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str300, ei_gb18030}, +#line 93 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str301, ei_iso8859_5}, +#line 142 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str302, ei_iso8859_13}, + {-1}, {-1}, {-1}, +#line 70 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str306, ei_iso8859_2}, +#line 328 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str307, ei_ces_gbk}, + {-1}, +#line 268 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str309, ei_iso646_jp}, + {-1}, +#line 14 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str311, ei_ascii}, + {-1}, +#line 296 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str313, ei_gb2312}, + {-1}, +#line 259 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str315, ei_viscii}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 145 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str321, ei_iso8859_13}, +#line 365 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str322, ei_iso2022_kr}, +#line 102 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str323, ei_iso8859_6}, + {-1}, {-1}, {-1}, +#line 277 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str327, ei_jisx0208}, +#line 226 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str328, ei_mac_thai}, +#line 233 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str329, ei_georgian_academy}, +#line 53 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str330, ei_java}, +#line 99 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str331, ei_iso8859_6}, + {-1}, {-1}, +#line 210 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str334, ei_cp866}, + {-1}, +#line 90 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str336, ei_iso8859_5}, + {-1}, +#line 117 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str338, ei_iso8859_8}, +#line 27 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str339, ei_ucs2}, +#line 124 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str340, ei_iso8859_9}, + {-1}, {-1}, {-1}, {-1}, +#line 301 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str345, ei_ksc5601}, +#line 263 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str346, ei_tcvn}, + {-1}, +#line 314 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str348, ei_sjis}, +#line 262 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str349, ei_tcvn}, + {-1}, {-1}, +#line 86 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str352, ei_iso8859_4}, +#line 242 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str353, ei_rk1048}, + {-1}, +#line 237 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str355, ei_pt154}, +#line 92 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str356, ei_iso8859_5}, + {-1}, +#line 269 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str358, ei_iso646_jp}, +#line 76 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str359, ei_iso8859_3}, + {-1}, {-1}, +#line 194 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str362, ei_cp1257}, +#line 82 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str363, ei_iso8859_4}, +#line 227 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str364, ei_hp_roman8}, +#line 42 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str365, ei_utf32}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 287 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str371, ei_jisx0212}, +#line 212 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str372, ei_mac_roman}, +#line 170 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str373, ei_koi8_u}, + {-1}, +#line 111 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str375, ei_iso8859_7}, + {-1}, +#line 293 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str377, ei_gb2312}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 327 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str383, ei_euc_cn}, + {-1}, {-1}, +#line 114 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str386, ei_iso8859_7}, +#line 240 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str387, ei_pt154}, + {-1}, {-1}, {-1}, {-1}, +#line 174 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str392, ei_cp1250}, + {-1}, {-1}, +#line 357 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str395, ei_euc_kr}, + {-1}, +#line 104 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str397, ei_iso8859_7}, + {-1}, +#line 15 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str399, ei_ascii}, +#line 265 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str400, ei_iso646_jp}, + {-1}, {-1}, {-1}, +#line 318 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str404, ei_iso2022_jp1}, +#line 100 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str405, ei_iso8859_6}, +#line 303 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str406, ei_ksc5601}, + {-1}, {-1}, {-1}, +#line 319 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str410, ei_iso2022_jp2}, + {-1}, +#line 298 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str412, ei_isoir165}, + {-1}, +#line 171 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str414, ei_koi8_ru}, + {-1}, +#line 225 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str416, ei_mac_arabic}, +#line 74 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str417, ei_iso8859_3}, + {-1}, +#line 290 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str419, ei_iso646_cn}, + {-1}, +#line 279 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str421, ei_jisx0208}, +#line 133 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str422, ei_iso8859_10}, + {-1}, +#line 219 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str424, ei_mac_romania}, + {-1}, +#line 98 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str426, ei_iso8859_6}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 19 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str435, ei_ascii}, + {-1}, +#line 339 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str437, ei_euc_tw}, + {-1}, {-1}, {-1}, +#line 47 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str441, ei_utf7}, + {-1}, +#line 326 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str443, ei_euc_cn}, +#line 253 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str444, ei_tis620}, + {-1}, {-1}, {-1}, +#line 338 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str448, ei_euc_tw}, +#line 280 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str449, ei_jisx0208}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 320 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str455, ei_iso2022_jp2}, + {-1}, +#line 46 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str457, ei_utf7}, + {-1}, {-1}, +#line 78 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str460, ei_iso8859_3}, + {-1}, {-1}, {-1}, +#line 239 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str464, ei_pt154}, +#line 112 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str465, ei_iso8859_7}, + {-1}, +#line 321 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str467, ei_iso2022_jpms}, + {-1}, +#line 105 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str469, ei_iso8859_7}, + {-1}, +#line 176 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str471, ei_cp1251}, +#line 192 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str472, ei_cp1256}, +#line 189 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str473, ei_cp1255}, + {-1}, +#line 198 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str475, ei_cp1258}, +#line 252 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str476, ei_tis620}, +#line 180 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str477, ei_cp1252}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 295 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str484, ei_gb2312}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 213 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str490, ei_mac_roman}, +#line 367 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str491, ei_local_wchar_t}, + {-1}, {-1}, +#line 217 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str494, ei_mac_iceland}, +#line 113 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str495, ei_iso8859_7}, +#line 230 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str496, ei_hp_roman8}, + {-1}, +#line 56 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str498, ei_iso8859_1}, +#line 97 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str499, ei_iso8859_6}, +#line 186 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str500, ei_cp1254}, + {-1}, {-1}, +#line 173 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str503, ei_cp1250}, +#line 66 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str504, ei_iso8859_2}, +#line 177 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str505, ei_cp1251}, +#line 266 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str506, ei_iso646_jp}, + {-1}, +#line 300 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str508, ei_ksc5601}, +#line 220 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str509, ei_mac_cyrillic}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 32 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str517, ei_ucs2le}, + {-1}, {-1}, +#line 215 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str520, ei_mac_roman}, +#line 337 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str521, ei_hz}, + {-1}, {-1}, {-1}, +#line 255 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str525, ei_tis620}, + {-1}, {-1}, {-1}, +#line 144 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str529, ei_iso8859_13}, +#line 48 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str530, ei_ucs2internal}, +#line 306 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str531, ei_euc_jp}, +#line 28 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str532, ei_ucs2be}, + {-1}, +#line 292 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str534, ei_iso646_cn}, +#line 271 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str535, ei_jisx0201}, +#line 310 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str536, ei_sjis}, + {-1}, +#line 312 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str538, ei_sjis}, +#line 316 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str539, ei_iso2022_jp}, +#line 38 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str540, ei_ucs4le}, + {-1}, +#line 305 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str542, ei_euc_jp}, + {-1}, +#line 33 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str544, ei_ucs2le}, +#line 206 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str545, ei_cp862}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 331 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str552, ei_cp936}, +#line 50 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str553, ei_ucs4internal}, +#line 183 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str554, ei_cp1253}, +#line 37 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str555, ei_ucs4be}, + {-1}, +#line 187 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str557, ei_cp1254}, +#line 234 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str558, ei_georgian_ps}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 340 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str564, ei_euc_tw}, +#line 247 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str565, ei_cp1133}, + {-1}, {-1}, {-1}, {-1}, +#line 245 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str570, ei_mulelao}, + {-1}, {-1}, +#line 282 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str573, ei_jisx0212}, + {-1}, +#line 120 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str575, ei_iso8859_8}, +#line 41 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str576, ei_utf16le}, + {-1}, {-1}, +#line 20 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str579, ei_ascii}, +#line 193 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str580, ei_cp1256}, +#line 107 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str581, ei_iso8859_7}, + {-1}, {-1}, {-1}, +#line 317 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str585, ei_iso2022_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 40 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str591, ei_utf16be}, + {-1}, +#line 270 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str593, ei_jisx0201}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 190 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str600, ei_cp1255}, +#line 274 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str601, ei_jisx0208}, + {-1}, +#line 45 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str603, ei_utf7}, + {-1}, {-1}, {-1}, {-1}, +#line 309 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str608, ei_sjis}, +#line 221 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str609, ei_mac_ukraine}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 284 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str616, ei_jisx0212}, + {-1}, +#line 29 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str618, ei_ucs2be}, +#line 18 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str619, ei_ascii}, + {-1}, {-1}, +#line 17 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str622, ei_ascii}, + {-1}, {-1}, {-1}, +#line 264 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str626, ei_tcvn}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, +#line 195 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str639, ei_cp1257}, + {-1}, {-1}, {-1}, {-1}, +#line 216 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str644, ei_mac_centraleurope}, +#line 361 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str645, ei_johab}, +#line 276 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str646, ei_jisx0208}, +#line 313 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str647, ei_sjis}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 222 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str653, ei_mac_greek}, + {-1}, {-1}, {-1}, {-1}, +#line 345 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str658, ei_ces_big5}, + {-1}, {-1}, +#line 184 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str661, ei_cp1253}, + {-1}, {-1}, +#line 44 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str664, ei_utf32le}, + {-1}, +#line 106 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str666, ei_iso8859_7}, + {-1}, {-1}, +#line 344 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str669, ei_ces_big5}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 307 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str676, ei_euc_jp}, + {-1}, +#line 231 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str678, ei_nextstep}, +#line 43 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str679, ei_utf32be}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, +#line 353 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str690, ei_big5hkscs2008}, +#line 281 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str691, ei_jisx0208}, +#line 257 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str692, ei_cp874}, + {-1}, {-1}, {-1}, {-1}, +#line 275 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str697, ei_jisx0208}, + {-1}, {-1}, {-1}, +#line 352 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str701, ei_big5hkscs2008}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 283 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str718, ei_jisx0212}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, +#line 119 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str730, ei_iso8859_8}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, +#line 223 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str751, ei_mac_turkish}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 49 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str797, ei_ucs2swapped}, +#line 202 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str798, ei_cp850}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 273 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str814, ei_jisx0201}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 51 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str820, ei_ucs4swapped}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 350 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str836, ei_big5hkscs2001}, + {-1}, {-1}, {-1}, +#line 354 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str840, ei_big5hkscs2008}, +#line 349 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str841, ei_big5hkscs1999}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 351 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str865, ei_big5hkscs2004}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 196 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str871, ei_cp1257}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 308 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str879, ei_euc_jp}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 363 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str912, ei_johab}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 224 "lib/aliases_syssolaris.gperf" + {(int)(size_t)&((struct stringpool_t *)0)->stringpool_str956, ei_mac_hebrew} + }; + +static const struct alias * +aliases_lookup (register const char *str, register size_t len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register unsigned int key = aliases_hash (str, len); + + if (key <= MAX_HASH_VALUE) + { + register int o = aliases[key].name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &aliases[key]; + } + } + } + return 0; +} diff --git a/jni/parted/libiconv/lib/aliases_zos.h b/jni/parted/libiconv/lib/aliases_zos.h new file mode 100755 index 0000000..9143ea1 --- /dev/null +++ b/jni/parted/libiconv/lib/aliases_zos.h @@ -0,0 +1,241 @@ + S(zos_0, "IBM-037", ei_ebcdic037 ) + S(zos_1, "IBM037", ei_ebcdic037 ) + S(zos_2, "CP037", ei_ebcdic037 ) + S(zos_3, "EBCDIC-CP-US", ei_ebcdic037 ) + S(zos_4, "EBCDIC-CP-CA", ei_ebcdic037 ) + S(zos_5, "EBCDIC-CP-WT", ei_ebcdic037 ) + S(zos_6, "EBCDIC-CP-NL", ei_ebcdic037 ) + S(zos_7, "CSIBM037", ei_ebcdic037 ) + S(zos_8, "IBM-273", ei_ebcdic273 ) + S(zos_9, "IBM273", ei_ebcdic273 ) + S(zos_10, "CP273", ei_ebcdic273 ) + S(zos_11, "CSIBM273", ei_ebcdic273 ) + S(zos_12, "IBM-277", ei_ebcdic277 ) + S(zos_13, "IBM277", ei_ebcdic277 ) + S(zos_14, "EBCDIC-CP-DK", ei_ebcdic277 ) + S(zos_15, "EBCDIC-CP-NO", ei_ebcdic277 ) + S(zos_16, "CSIBM277", ei_ebcdic277 ) + S(zos_17, "IBM-278", ei_ebcdic278 ) + S(zos_18, "IBM278", ei_ebcdic278 ) + S(zos_19, "CP278", ei_ebcdic278 ) + S(zos_20, "EBCDIC-CP-FI", ei_ebcdic278 ) + S(zos_21, "EBCDIC-CP-SE", ei_ebcdic278 ) + S(zos_22, "CSIBM278", ei_ebcdic278 ) + S(zos_23, "IBM-280", ei_ebcdic280 ) + S(zos_24, "IBM280", ei_ebcdic280 ) + S(zos_25, "CP280", ei_ebcdic280 ) + S(zos_26, "EBCDIC-CP-IT", ei_ebcdic280 ) + S(zos_27, "CSIBM280", ei_ebcdic280 ) + S(zos_28, "IBM-282", ei_ebcdic282 ) + S(zos_29, "IBM282", ei_ebcdic282 ) + S(zos_30, "IBM-284", ei_ebcdic284 ) + S(zos_31, "IBM284", ei_ebcdic284 ) + S(zos_32, "CP284", ei_ebcdic284 ) + S(zos_33, "EBCDIC-CP-ES", ei_ebcdic284 ) + S(zos_34, "CSIBM284", ei_ebcdic284 ) + S(zos_35, "IBM-285", ei_ebcdic285 ) + S(zos_36, "IBM285", ei_ebcdic285 ) + S(zos_37, "CP285", ei_ebcdic285 ) + S(zos_38, "EBCDIC-CP-GB", ei_ebcdic285 ) + S(zos_39, "CSIBM285", ei_ebcdic285 ) + S(zos_40, "IBM-297", ei_ebcdic297 ) + S(zos_41, "IBM297", ei_ebcdic297 ) + S(zos_42, "CP297", ei_ebcdic297 ) + S(zos_43, "EBCDIC-CP-FR", ei_ebcdic297 ) + S(zos_44, "CSIBM297", ei_ebcdic297 ) + S(zos_45, "IBM-423", ei_ebcdic423 ) + S(zos_46, "IBM423", ei_ebcdic423 ) + S(zos_47, "CP423", ei_ebcdic423 ) + S(zos_48, "EBCDIC-CP-GR", ei_ebcdic423 ) + S(zos_49, "CSIBM423", ei_ebcdic423 ) + S(zos_50, "IBM-424", ei_ebcdic424 ) + S(zos_51, "IBM424", ei_ebcdic424 ) + S(zos_52, "CP424", ei_ebcdic424 ) + S(zos_53, "EBCDIC-CP-HE", ei_ebcdic424 ) + S(zos_54, "CSIBM424", ei_ebcdic424 ) + S(zos_55, "IBM-425", ei_ebcdic425 ) + S(zos_56, "IBM425", ei_ebcdic425 ) + S(zos_57, "IBM-500", ei_ebcdic500 ) + S(zos_58, "IBM500", ei_ebcdic500 ) + S(zos_59, "CP500", ei_ebcdic500 ) + S(zos_60, "EBCDIC-CP-BE", ei_ebcdic500 ) + S(zos_61, "EBCDIC-CP-CH", ei_ebcdic500 ) + S(zos_62, "CSIBM500", ei_ebcdic500 ) + S(zos_63, "IBM-838", ei_ebcdic838 ) + S(zos_64, "IBM838", ei_ebcdic838 ) + S(zos_65, "IBM-THAI", ei_ebcdic838 ) + S(zos_66, "CSIBMTHAI", ei_ebcdic838 ) + S(zos_67, "IBM-870", ei_ebcdic870 ) + S(zos_68, "IBM870", ei_ebcdic870 ) + S(zos_69, "CP870", ei_ebcdic870 ) + S(zos_70, "EBCDIC-CP-ROECE", ei_ebcdic870 ) + S(zos_71, "EBCDIC-CP-YU", ei_ebcdic870 ) + S(zos_72, "CSIBM870", ei_ebcdic870 ) + S(zos_73, "IBM-871", ei_ebcdic871 ) + S(zos_74, "IBM871", ei_ebcdic871 ) + S(zos_75, "CP871", ei_ebcdic871 ) + S(zos_76, "EBCDIC-CP-IS", ei_ebcdic871 ) + S(zos_77, "CSIBM871", ei_ebcdic871 ) + S(zos_78, "IBM-875", ei_ebcdic875 ) + S(zos_79, "IBM875", ei_ebcdic875 ) + S(zos_80, "CP875", ei_ebcdic875 ) + S(zos_81, "EBCDIC-GREEK", ei_ebcdic875 ) + S(zos_82, "IBM-880", ei_ebcdic880 ) + S(zos_83, "IBM880", ei_ebcdic880 ) + S(zos_84, "CP880", ei_ebcdic880 ) + S(zos_85, "EBCDIC-CYRILLIC", ei_ebcdic880 ) + S(zos_86, "CSIBM880", ei_ebcdic880 ) + S(zos_87, "IBM-905", ei_ebcdic905 ) + S(zos_88, "IBM905", ei_ebcdic905 ) + S(zos_89, "CP905", ei_ebcdic905 ) + S(zos_90, "EBCDIC-CP-TR", ei_ebcdic905 ) + S(zos_91, "CSIBM905", ei_ebcdic905 ) + S(zos_92, "IBM-924", ei_ebcdic924 ) + S(zos_93, "IBM924", ei_ebcdic924 ) + S(zos_94, "IBM00924", ei_ebcdic924 ) + S(zos_95, "CCSID00924", ei_ebcdic924 ) + S(zos_96, "CP00924", ei_ebcdic924 ) + S(zos_97, "EBCDIC-LATIN9-EURO", ei_ebcdic924 ) + S(zos_98, "CSIBM00924", ei_ebcdic924 ) + S(zos_99, "IBM-1025", ei_ebcdic1025 ) + S(zos_100, "IBM1025", ei_ebcdic1025 ) + S(zos_101, "CP1025", ei_ebcdic1025 ) + S(zos_102, "IBM-1026", ei_ebcdic1026 ) + S(zos_103, "IBM1026", ei_ebcdic1026 ) + S(zos_104, "CP1026", ei_ebcdic1026 ) + S(zos_105, "CSIBM1026", ei_ebcdic1026 ) + S(zos_106, "IBM-1047", ei_ebcdic1047 ) + S(zos_107, "IBM1047", ei_ebcdic1047 ) + S(zos_108, "CP1047", ei_ebcdic1047 ) + S(zos_109, "CSIBM1047", ei_ebcdic1047 ) + S(zos_110, "IBM-1097", ei_ebcdic1097 ) + S(zos_111, "IBM1097", ei_ebcdic1097 ) + S(zos_112, "CP1097", ei_ebcdic1097 ) + S(zos_113, "IBM-1112", ei_ebcdic1112 ) + S(zos_114, "IBM1112", ei_ebcdic1112 ) + S(zos_115, "CP1112", ei_ebcdic1112 ) + S(zos_116, "IBM-1122", ei_ebcdic1122 ) + S(zos_117, "IBM1122", ei_ebcdic1122 ) + S(zos_118, "CP1122", ei_ebcdic1122 ) + S(zos_119, "IBM-1123", ei_ebcdic1123 ) + S(zos_120, "IBM1123", ei_ebcdic1123 ) + S(zos_121, "CP1123", ei_ebcdic1123 ) + S(zos_122, "IBM-1130", ei_ebcdic1130 ) + S(zos_123, "IBM1130", ei_ebcdic1130 ) + S(zos_124, "CP1130", ei_ebcdic1130 ) + S(zos_125, "IBM-1132", ei_ebcdic1132 ) + S(zos_126, "IBM1132", ei_ebcdic1132 ) + S(zos_127, "CP1132", ei_ebcdic1132 ) + S(zos_128, "IBM-1137", ei_ebcdic1137 ) + S(zos_129, "IBM1137", ei_ebcdic1137 ) + S(zos_130, "CP1137", ei_ebcdic1137 ) + S(zos_131, "IBM-1140", ei_ebcdic1140 ) + S(zos_132, "IBM1140", ei_ebcdic1140 ) + S(zos_133, "IBM01140", ei_ebcdic1140 ) + S(zos_134, "CCSID01140", ei_ebcdic1140 ) + S(zos_135, "CP01140", ei_ebcdic1140 ) + S(zos_136, "EBCDIC-US-37+EURO", ei_ebcdic1140 ) + S(zos_137, "CSIBM01140", ei_ebcdic1140 ) + S(zos_138, "IBM-1141", ei_ebcdic1141 ) + S(zos_139, "IBM1141", ei_ebcdic1141 ) + S(zos_140, "IBM01141", ei_ebcdic1141 ) + S(zos_141, "CCSID01141", ei_ebcdic1141 ) + S(zos_142, "CP01141", ei_ebcdic1141 ) + S(zos_143, "EBCDIC-DE-273+EURO", ei_ebcdic1141 ) + S(zos_144, "CSIBM01141", ei_ebcdic1141 ) + S(zos_145, "IBM-1142", ei_ebcdic1142 ) + S(zos_146, "IBM1142", ei_ebcdic1142 ) + S(zos_147, "IBM01142", ei_ebcdic1142 ) + S(zos_148, "CCSID01142", ei_ebcdic1142 ) + S(zos_149, "CP01142", ei_ebcdic1142 ) + S(zos_150, "EBCDIC-DK-277+EURO", ei_ebcdic1142 ) + S(zos_151, "EBCDIC-NO-277+EURO", ei_ebcdic1142 ) + S(zos_152, "CSIBM01142", ei_ebcdic1142 ) + S(zos_153, "IBM-1143", ei_ebcdic1143 ) + S(zos_154, "IBM1143", ei_ebcdic1143 ) + S(zos_155, "IBM01143", ei_ebcdic1143 ) + S(zos_156, "CCSID01143", ei_ebcdic1143 ) + S(zos_157, "CP01143", ei_ebcdic1143 ) + S(zos_158, "EBCDIC-FI-278+EURO", ei_ebcdic1143 ) + S(zos_159, "EBCDIC-SE-278+EURO", ei_ebcdic1143 ) + S(zos_160, "CSIBM01143", ei_ebcdic1143 ) + S(zos_161, "IBM-1144", ei_ebcdic1144 ) + S(zos_162, "IBM1144", ei_ebcdic1144 ) + S(zos_163, "IBM01144", ei_ebcdic1144 ) + S(zos_164, "CCSID01144", ei_ebcdic1144 ) + S(zos_165, "CP01144", ei_ebcdic1144 ) + S(zos_166, "EBCDIC-IT-280+EURO", ei_ebcdic1144 ) + S(zos_167, "CSPC8CODEPAGE1144", ei_ebcdic1144 ) + S(zos_168, "IBM-1145", ei_ebcdic1145 ) + S(zos_169, "IBM1145", ei_ebcdic1145 ) + S(zos_170, "IBM01145", ei_ebcdic1145 ) + S(zos_171, "CCSID01145", ei_ebcdic1145 ) + S(zos_172, "CP01145", ei_ebcdic1145 ) + S(zos_173, "EBCDIC-ES-284+EURO", ei_ebcdic1145 ) + S(zos_174, "CSIBM01145", ei_ebcdic1145 ) + S(zos_175, "IBM-1146", ei_ebcdic1146 ) + S(zos_176, "IBM1146", ei_ebcdic1146 ) + S(zos_177, "IBM01146", ei_ebcdic1146 ) + S(zos_178, "CCSID01146", ei_ebcdic1146 ) + S(zos_179, "CP01146", ei_ebcdic1146 ) + S(zos_180, "EBCDIC-GB-285+EURO", ei_ebcdic1146 ) + S(zos_181, "CSPC8CODEPAGE1146", ei_ebcdic1146 ) + S(zos_182, "IBM-1147", ei_ebcdic1147 ) + S(zos_183, "IBM1147", ei_ebcdic1147 ) + S(zos_184, "IBM01147", ei_ebcdic1147 ) + S(zos_185, "CCSID01147", ei_ebcdic1147 ) + S(zos_186, "CP01147", ei_ebcdic1147 ) + S(zos_187, "EBCDIC-FR-297+EURO", ei_ebcdic1147 ) + S(zos_188, "CSIBM01147", ei_ebcdic1147 ) + S(zos_189, "IBM-1148", ei_ebcdic1148 ) + S(zos_190, "IBM1148", ei_ebcdic1148 ) + S(zos_191, "IBM01148", ei_ebcdic1148 ) + S(zos_192, "CCSID01148", ei_ebcdic1148 ) + S(zos_193, "CP01148", ei_ebcdic1148 ) + S(zos_194, "EBCDIC-INTERNATIONAL-500+EURO", ei_ebcdic1148 ) + S(zos_195, "CSIBM01148", ei_ebcdic1148 ) + S(zos_196, "IBM-1149", ei_ebcdic1149 ) + S(zos_197, "IBM1149", ei_ebcdic1149 ) + S(zos_198, "IBM01149", ei_ebcdic1149 ) + S(zos_199, "CCSID01149", ei_ebcdic1149 ) + S(zos_200, "CP01149", ei_ebcdic1149 ) + S(zos_201, "EBCDIC-IS-871+EURO", ei_ebcdic1149 ) + S(zos_202, "CSIBM01149", ei_ebcdic1149 ) + S(zos_203, "IBM-1153", ei_ebcdic1153 ) + S(zos_204, "IBM1153", ei_ebcdic1153 ) + S(zos_205, "CP1153", ei_ebcdic1153 ) + S(zos_206, "IBM-1154", ei_ebcdic1154 ) + S(zos_207, "IBM1154", ei_ebcdic1154 ) + S(zos_208, "CP1154", ei_ebcdic1154 ) + S(zos_209, "IBM-1155", ei_ebcdic1155 ) + S(zos_210, "IBM1155", ei_ebcdic1155 ) + S(zos_211, "CP1155", ei_ebcdic1155 ) + S(zos_212, "IBM-1156", ei_ebcdic1156 ) + S(zos_213, "IBM1156", ei_ebcdic1156 ) + S(zos_214, "CP1156", ei_ebcdic1156 ) + S(zos_215, "IBM-1157", ei_ebcdic1157 ) + S(zos_216, "IBM1157", ei_ebcdic1157 ) + S(zos_217, "CP1157", ei_ebcdic1157 ) + S(zos_218, "IBM-1158", ei_ebcdic1158 ) + S(zos_219, "IBM1158", ei_ebcdic1158 ) + S(zos_220, "CP1158", ei_ebcdic1158 ) + S(zos_221, "IBM-1160", ei_ebcdic1160 ) + S(zos_222, "IBM1160", ei_ebcdic1160 ) + S(zos_223, "CP1160", ei_ebcdic1160 ) + S(zos_224, "IBM-1164", ei_ebcdic1164 ) + S(zos_225, "IBM1164", ei_ebcdic1164 ) + S(zos_226, "CP1164", ei_ebcdic1164 ) + S(zos_227, "IBM-1165", ei_ebcdic1165 ) + S(zos_228, "IBM1165", ei_ebcdic1165 ) + S(zos_229, "IBM-1166", ei_ebcdic1166 ) + S(zos_230, "IBM1166", ei_ebcdic1166 ) + S(zos_231, "CP1166", ei_ebcdic1166 ) + S(zos_232, "IBM-4971", ei_ebcdic4971 ) + S(zos_233, "IBM4971", ei_ebcdic4971 ) + S(zos_234, "CP4971", ei_ebcdic4971 ) + S(zos_235, "IBM-12712", ei_ebcdic12712 ) + S(zos_236, "IBM12712", ei_ebcdic12712 ) + S(zos_237, "CP12712", ei_ebcdic12712 ) + S(zos_238, "IBM-16804", ei_ebcdic16804 ) + S(zos_239, "IBM16804", ei_ebcdic16804 ) + S(zos_240, "CP16804", ei_ebcdic16804 ) diff --git a/jni/parted/libiconv/lib/armscii_8.h b/jni/parted/libiconv/lib/armscii_8.h new file mode 100755 index 0000000..6acee33 --- /dev/null +++ b/jni/parted/libiconv/lib/armscii_8.h @@ -0,0 +1,115 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ARMSCII-8 + */ + +static const unsigned short armscii_8_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0xfffd, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab, + 0x2014, 0x002e, 0x055d, 0x002c, 0x002d, 0x058a, 0x2026, 0x055c, + /* 0xb0 */ + 0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563, + 0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567, + /* 0xc0 */ + 0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b, + 0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f, + /* 0xd0 */ + 0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573, + 0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577, + /* 0xe0 */ + 0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b, + 0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f, + /* 0xf0 */ + 0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583, + 0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0xfffd, +}; + +static int +armscii_8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = armscii_8_2uni[c-0xa0]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char armscii_8_page00[8] = { + 0xa5, 0xa4, 0x2a, 0x2b, 0xab, 0xac, 0xa9, 0x2f, /* 0x28-0x2f */ +}; +static const unsigned char armscii_8_page00_1[32] = { + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char armscii_8_page05[96] = { + 0x00, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, /* 0x30-0x37 */ + 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, /* 0x38-0x3f */ + 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, /* 0x40-0x47 */ + 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, /* 0x48-0x4f */ + 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0xfe, 0xb0, 0xaf, 0xaa, 0xb1, 0x00, /* 0x58-0x5f */ + 0x00, 0xb3, 0xb5, 0xb7, 0xb9, 0xbb, 0xbd, 0xbf, /* 0x60-0x67 */ + 0xc1, 0xc3, 0xc5, 0xc7, 0xc9, 0xcb, 0xcd, 0xcf, /* 0x68-0x6f */ + 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, /* 0x70-0x77 */ + 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, /* 0x78-0x7f */ + 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0xa2, /* 0x80-0x87 */ + 0x00, 0xa3, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ +}; +static const unsigned char armscii_8_page20[24] = { + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x00, /* 0x20-0x27 */ +}; + +static int +armscii_8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0028) { + *r = wc; + return 1; + } + else if (wc >= 0x0028 && wc < 0x0030) + c = armscii_8_page00[wc-0x0028]; + else if (wc >= 0x0030 && wc < 0x00a0) + c = wc; + else if (wc >= 0x00a0 && wc < 0x00c0) + c = armscii_8_page00_1[wc-0x00a0]; + else if (wc >= 0x0530 && wc < 0x0590) + c = armscii_8_page05[wc-0x0530]; + else if (wc >= 0x2010 && wc < 0x2028) + c = armscii_8_page20[wc-0x2010]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ascii.h b/jni/parted/libiconv/lib/ascii.h new file mode 100755 index 0000000..ec3da6c --- /dev/null +++ b/jni/parted/libiconv/lib/ascii.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ASCII + */ + +static int +ascii_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + return RET_ILSEQ; +} + +static int +ascii_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x0080) { + *r = wc; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/atarist.h b/jni/parted/libiconv/lib/atarist.h new file mode 100755 index 0000000..f728664 --- /dev/null +++ b/jni/parted/libiconv/lib/atarist.h @@ -0,0 +1,157 @@ +/* + * Copyright (C) 1999-2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * Atari ST + */ + +static const unsigned short atarist_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, + /* 0x90 */ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x00df, 0x0192, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x00e3, 0x00f5, 0x00d8, 0x00f8, 0x0153, 0x0152, 0x00c0, 0x00c3, + 0x00d5, 0x00a8, 0x00b4, 0x2020, 0x00b6, 0x00a9, 0x00ae, 0x2122, + /* 0xc0 */ + 0x0133, 0x0132, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, + 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05db, 0x05dc, 0x05de, 0x05e0, + /* 0xd0 */ + 0x05e1, 0x05e2, 0x05e4, 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, + 0x05df, 0x05da, 0x05dd, 0x05e3, 0x05e5, 0x00a7, 0x2227, 0x221e, + /* 0xe0 */ + 0x03b1, 0x03b2, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x222e, 0x03c6, 0x2208, 0x2229, + /* 0xf0 */ + 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x00b3, 0x00af, +}; + +static int +atarist_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) atarist_2uni[c-0x80]; + return 1; +} + +static const unsigned char atarist_page00[96] = { + 0x00, 0xad, 0x9b, 0x9c, 0x00, 0x9d, 0x00, 0xdd, /* 0xa0-0xa7 */ + 0xb9, 0xbd, 0xa6, 0xae, 0xaa, 0x00, 0xbe, 0xff, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xfe, 0xba, 0xe6, 0xbc, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xa7, 0xaf, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0xb6, 0x00, 0x00, 0xb7, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0xa5, 0x00, 0x00, 0x00, 0xb8, 0x99, 0x00, /* 0xd0-0xd7 */ + 0xb2, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x9e, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0xb0, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0xb1, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0xb3, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0x98, /* 0xf8-0xff */ +}; +static const unsigned char atarist_page01[104] = { + 0x00, 0x00, 0xc1, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0xb5, 0xb4, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char atarist_page03[56] = { + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0xe1, 0x00, 0xeb, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; +static const unsigned char atarist_page05[32] = { + 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, /* 0xd0-0xd7 */ + 0xca, 0xcb, 0xd9, 0xcc, 0xcd, 0xda, 0xce, 0xd8, /* 0xd8-0xdf */ + 0xcf, 0xd0, 0xd1, 0xdb, 0xd2, 0xdc, 0xd3, 0xd4, /* 0xe0-0xe7 */ + 0xd5, 0xd6, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; +static const unsigned char atarist_page22[96] = { + 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xdf, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char atarist_page23[24] = { + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static int +atarist_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = atarist_page00[wc-0x00a0]; + else if (wc >= 0x0130 && wc < 0x0198) + c = atarist_page01[wc-0x0130]; + else if (wc >= 0x0390 && wc < 0x03c8) + c = atarist_page03[wc-0x0390]; + else if (wc >= 0x05d0 && wc < 0x05f0) + c = atarist_page05[wc-0x05d0]; + else if (wc == 0x2020) + c = 0xbb; + else if (wc == 0x207f) + c = 0xfc; + else if (wc == 0x2122) + c = 0xbf; + else if (wc >= 0x2208 && wc < 0x2268) + c = atarist_page22[wc-0x2208]; + else if (wc >= 0x2310 && wc < 0x2328) + c = atarist_page23[wc-0x2310]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/big5.h b/jni/parted/libiconv/lib/big5.h new file mode 100755 index 0000000..2b60aca --- /dev/null +++ b/jni/parted/libiconv/lib/big5.h @@ -0,0 +1,4159 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * BIG5 + */ + +static const unsigned short big5_2uni_pagea1[6121] = { + /* 0xa1 */ + 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2022, 0xff1b, 0xff1a, + 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xff64, 0xfe52, + 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31, + 0x2014, 0xfe33, 0xfffd, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35, + 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39, + 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d, + 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41, + 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0xfe5b, + 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d, + 0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7, + 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605, + 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, 0x32a3, 0x2105, + 0x203e, 0xfffd, 0xff3f, 0xfffd, 0xfe49, 0xfe4a, 0xfe4d, 0xfe4e, + 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, 0xff0d, 0x00d7, + 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, 0x2266, 0x2267, + 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, 0xfe64, 0xfe65, + 0xfe66, 0x223c, 0x2229, 0x222a, 0x22a5, 0x2220, 0x221f, 0x22bf, + 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, 0x2640, 0x2642, + 0x2641, 0x2609, 0x2191, 0x2193, 0x2190, 0x2192, 0x2196, 0x2197, + 0x2199, 0x2198, 0x2225, 0x2223, 0xfffd, + /* 0xa2 */ + 0xfffd, 0xff0f, 0xff3c, 0xff04, 0x00a5, 0x3012, 0x00a2, 0x00a3, + 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5, + 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4, + 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7, + 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, + 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a, + 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500, + 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x256e, + 0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561, 0x25e2, 0x25e3, + 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10, 0xff11, 0xff12, + 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0x2160, + 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, + 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, + 0x3028, 0x3029, 0xfffd, 0x5344, 0xfffd, 0xff21, 0xff22, 0xff23, + 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, + 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, + 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff41, + 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, + 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, + 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, + /* 0xa3 */ + 0xff57, 0xff58, 0xff59, 0xff5a, 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, 0x03c4, 0x03c5, + 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, 0x3107, 0x3108, + 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110, + 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, + 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120, + 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, + 0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xa4 */ + 0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c, + 0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b, + 0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a, + 0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e, + 0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f, + 0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8, + 0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2, + 0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x4e11, + 0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b, 0x5c39, 0x4e88, + 0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1, 0x4ec0, 0x4ec3, + 0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4, 0x5143, 0x5141, + 0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6, 0x5206, 0x5207, + 0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339, 0x5348, 0x5347, + 0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd, 0x58ec, 0x5929, + 0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24, 0x5c3a, 0x5c6f, + 0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3, 0x6208, 0x6236, + 0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4, 0x65b9, 0x65e5, + 0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79, 0x6bcb, 0x6bd4, + 0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236, 0x723b, 0x7247, + 0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19, + /* 0xa5 */ + 0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e, + 0x4ee5, 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4, + 0x4ed9, 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9, + 0x51fa, 0x51f8, 0x520a, 0x52a0, 0x529f, 0x5305, 0x5306, 0x5317, + 0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, 0x536e, + 0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, 0x53e8, + 0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, 0x53f1, + 0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, 0x592e, + 0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c, 0x5de8, 0x5de7, + 0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01, 0x5f18, 0x5f17, + 0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251, 0x65a5, 0x65e6, + 0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63, 0x6bcd, 0x6c11, + 0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af, 0x7384, 0x7389, + 0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529, 0x7530, 0x7531, + 0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf, 0x76ee, 0x77db, + 0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb, 0x4e1e, 0x4e1f, + 0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6, 0x4ea5, 0x4eff, + 0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10, 0x4f11, 0x4f0f, + 0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd, 0x4f01, 0x4f0b, + 0x5149, 0x5147, 0x5146, 0x5148, 0x5168, + /* 0xa6 */ + 0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216, + 0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f, + 0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d, + 0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd, + 0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919, + 0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979, + 0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89, + 0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, 0x5e74, 0x5f0f, + 0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d, 0x6210, 0x6263, + 0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec, 0x65ed, 0x66f2, + 0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735, 0x6b21, 0x6b64, + 0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f, 0x6c60, 0x6c50, + 0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070, 0x725f, 0x725d, + 0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a, 0x7fbd, 0x8001, + 0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089, 0x808b, 0x808c, + 0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b, 0x821f, 0x826e, + 0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863, 0x897f, 0x9621, + 0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57, 0x4f5e, 0x4f34, + 0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d, 0x4f3a, 0x4f38, + 0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63, + /* 0xa7 */ + 0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48, + 0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225, + 0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac, + 0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, 0x5426, + 0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541b, + 0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, 0x5436, + 0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, 0x56ea, + 0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 0x5747, + 0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef, 0x593e, 0x599d, + 0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996, 0x598d, 0x59a4, + 0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a, 0x5b5b, 0x5b8c, + 0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, 0x5c3f, 0x5c3e, 0x5c90, + 0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, 0x5e8f, 0x5e87, 0x5e8a, + 0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, 0x5f77, 0x5f79, 0x5fd8, + 0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8, 0x5fea, 0x6212, + 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, 0x6289, 0x626d, + 0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292, 0x626f, 0x6298, + 0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, 0x653b, 0x6538, + 0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750, 0x6751, 0x675c, + 0x6756, 0x675e, 0x6749, 0x6746, 0x6760, + /* 0xa8 */ + 0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81, + 0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70, + 0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e, + 0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076, + 0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2, + 0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3, + 0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093, + 0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, 0x8292, 0x828b, + 0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46, 0x8c55, 0x8c9d, + 0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b, 0x8fb0, 0x8fc2, + 0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2, 0x90aa, 0x90a6, + 0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e, 0x9631, 0x962a, + 0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b, 0x4e9e, 0x4eab, + 0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f, 0x4f6c, 0x4f9b, + 0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88, 0x4f69, 0x4f7b, + 0x4f96, 0x4f7e, 0x4f8f, 0x4f91, 0x4f7a, 0x5154, 0x5152, 0x5155, + 0x5169, 0x5177, 0x5176, 0x5178, 0x51bd, 0x51fd, 0x523b, 0x5238, + 0x5237, 0x523a, 0x5230, 0x522e, 0x5236, 0x5241, 0x52be, 0x52bb, + 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379, + 0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475, + /* 0xa9 */ + 0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492, + 0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, 0x5462, + 0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, 0x576a, + 0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, 0x5947, + 0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, 0x59ae, + 0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, 0x59af, + 0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a, + 0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 0x5c46, + 0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1, 0x5cb3, 0x5e18, + 0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, 0x5e78, 0x5e9a, 0x5e97, + 0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, 0x5f27, 0x5f29, 0x5f80, + 0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, 0x5ffd, 0x5ff5, 0x5fff, + 0x600f, 0x6014, 0x602f, 0x6035, 0x6016, 0x602a, 0x6015, 0x6021, + 0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215, 0x623f, 0x623e, + 0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf, 0x62c2, 0x62b9, + 0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb, 0x62c8, 0x62a8, + 0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd, 0x62b5, 0x62da, + 0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac, 0x62ce, 0x653e, + 0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, 0x660c, 0x6606, 0x6602, + 0x660e, 0x6600, 0x660f, 0x6615, 0x660a, + /* 0xaa */ + 0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, 0x679c, + 0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f, + 0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a, + 0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3, + 0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe, + 0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9, + 0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1, + 0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, 0x6ce0, 0x7095, + 0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d, 0x7238, 0x7248, + 0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7, 0x72d0, 0x73a9, + 0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d, 0x7599, 0x759a, + 0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd, 0x793e, 0x7940, + 0x7941, 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa, 0x7cfe, 0x7f54, + 0x7f8c, 0x7f8b, 0x8005, 0x80ba, 0x80a5, 0x80a2, 0x80b1, 0x80a1, + 0x80ab, 0x80a9, 0x80b4, 0x80aa, 0x80af, 0x81e5, 0x81fe, 0x820d, + 0x82b3, 0x829d, 0x8299, 0x82ad, 0x82bd, 0x829f, 0x82b9, 0x82b1, + 0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, 0x82b0, 0x82be, 0x82b7, + 0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce, 0x8fd4, 0x8fd1, + 0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1, 0x9577, 0x9580, + 0x961c, 0x9640, 0x963f, 0x963b, 0x9644, + /* 0xab */ + 0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae, + 0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd, + 0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, 0x4fd0, + 0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, 0x5157, 0x5192, + 0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, 0x524b, + 0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b, + 0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8, + 0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 0x54c4, + 0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, 0x54a9, 0x54a7, 0x54bf, + 0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, 0x57a2, 0x57ce, 0x57ae, + 0x5793, 0x5955, 0x5951, 0x594f, 0x594e, 0x5950, 0x59dc, 0x59d8, + 0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, 0x59ea, 0x59da, 0x59e6, + 0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4, 0x5ba2, 0x5ba5, + 0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9, 0x5cd2, 0x5df7, + 0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6, 0x5efa, 0x5f08, + 0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b, 0x5f87, 0x5f8c, + 0x5f89, 0x6012, 0x601d, 0x6020, 0x6025, 0x600e, 0x6028, 0x604d, + 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606c, 0x606b, 0x606a, + 0x6064, 0x6241, 0x62dc, 0x6316, 0x6309, 0x62fc, 0x62ed, 0x6301, + 0x62ee, 0x62fd, 0x6307, 0x62f1, 0x62f7, + /* 0xac */ + 0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545, + 0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f, + 0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1, + 0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef, + 0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de, + 0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, 0x6b6a, 0x6b83, + 0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, 0x6d0b, 0x6d32, + 0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, 0x6d17, 0x6d3b, + 0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39, 0x6d27, 0x6d38, + 0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab, 0x70ba, 0x70b3, + 0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4, 0x7230, 0x7272, + 0x726f, 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7, 0x73ca, 0x73bb, + 0x73b2, 0x73cd, 0x73c0, 0x73b3, 0x751a, 0x752d, 0x754f, 0x754c, + 0x754e, 0x754b, 0x75ab, 0x75a4, 0x75a5, 0x75a2, 0x75a3, 0x7678, + 0x7686, 0x7687, 0x7688, 0x76c8, 0x76c6, 0x76c3, 0x76c5, 0x7701, + 0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, 0x76fc, 0x7707, 0x77dc, + 0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949, 0x7948, 0x7947, + 0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f, 0x7a81, 0x7aff, + 0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09, 0x7d07, 0x7d04, + 0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8004, + /* 0xad */ + 0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, 0x80da, 0x80c3, + 0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, 0x80e4, 0x80dd, + 0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, 0x82e6, + 0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301, + 0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306, + 0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4, + 0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4, + 0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 0x8fed, + 0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1, 0x90c3, 0x914b, + 0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c, 0x964d, 0x9762, + 0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8, 0x98db, 0x98df, + 0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d, 0x5023, 0x4fef, + 0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006, 0x503c, 0x501f, + 0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014, 0x5028, 0x4ff1, + 0x5021, 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee, 0x502d, 0x502a, + 0x4ffe, 0x502b, 0x5009, 0x517c, 0x51a4, 0x51a5, 0x51a2, 0x51cd, + 0x51cc, 0x51c6, 0x51cb, 0x5256, 0x525c, 0x5254, 0x525b, 0x525d, + 0x532a, 0x537f, 0x539f, 0x539d, 0x53df, 0x54e8, 0x5510, 0x5501, + 0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, 0x54fa, 0x5514, 0x54e9, + 0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea, + /* 0xae */ + 0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2, + 0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a, + 0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20, + 0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, 0x5b6b, 0x5c58, 0x5bb0, + 0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, 0x5bb9, 0x5bb8, 0x5c04, + 0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, 0x5cea, 0x5ce8, + 0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, 0x5eab, + 0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 0x6063, + 0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f, 0x6084, 0x609f, + 0x609a, 0x608d, 0x6094, 0x608c, 0x6085, 0x6096, 0x6247, 0x62f3, + 0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, 0x6355, 0x6342, 0x6346, + 0x634f, 0x6349, 0x633a, 0x6350, 0x633d, 0x632a, 0x632b, 0x6328, + 0x634d, 0x634c, 0x6548, 0x6549, 0x6599, 0x65c1, 0x65c5, 0x6642, + 0x6649, 0x664f, 0x6643, 0x6652, 0x664c, 0x6645, 0x6641, 0x66f8, + 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, 0x6846, 0x6853, + 0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817, 0x684c, 0x6851, + 0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843, 0x682a, 0x6845, + 0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7, 0x6c23, 0x6c27, + 0x6c28, 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95, 0x6d88, 0x6d87, + 0x6d66, 0x6d78, 0x6d77, 0x6d59, 0x6d93, + /* 0xaf */ + 0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, 0x6d8c, 0x6d8a, + 0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, 0x70d9, + 0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8, + 0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de, + 0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7, + 0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b, + 0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728, + 0x77e9, 0x7830, 0x7827, 0x7838, 0x781d, 0x7834, 0x7837, 0x7825, + 0x782d, 0x7820, 0x781f, 0x7832, 0x7955, 0x7950, 0x7960, 0x795f, + 0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4, 0x79e3, 0x79e7, + 0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88, 0x7ad9, 0x7b06, + 0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a, 0x7d20, 0x7d22, + 0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d, 0x7d19, 0x7d1b, + 0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006, 0x8018, 0x8015, + 0x8019, 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102, 0x80f0, 0x8105, + 0x80ed, 0x80f4, 0x8106, 0x80f8, 0x80f3, 0x8108, 0x80fd, 0x810a, + 0x80fc, 0x80ef, 0x81ed, 0x81ec, 0x8200, 0x8210, 0x822a, 0x822b, + 0x8228, 0x822c, 0x82bb, 0x832b, 0x8352, 0x8354, 0x834a, 0x8338, + 0x8350, 0x8349, 0x8335, 0x8334, 0x834f, 0x8332, 0x8339, 0x8336, + 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, + /* 0xb0 */ + 0x8654, 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3, + 0x869c, 0x8870, 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18, + 0x8a10, 0x8a0e, 0x8a0c, 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16, + 0x8a0f, 0x8a11, 0x8c48, 0x8c7a, 0x8c79, 0x8ca1, 0x8ca2, 0x8d77, + 0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, 0x9001, 0x9006, 0x8ff7, + 0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, 0x8ff8, 0x9095, + 0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, 0x91dd, + 0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 0x965b, + 0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2, 0x99ac, 0x9aa8, + 0x9ad8, 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a, 0x507d, 0x505c, + 0x5047, 0x5043, 0x504c, 0x505a, 0x5049, 0x5065, 0x5076, 0x504e, + 0x5055, 0x5075, 0x5074, 0x5077, 0x504f, 0x500f, 0x506f, 0x506d, + 0x515c, 0x5195, 0x51f0, 0x526a, 0x526f, 0x52d2, 0x52d9, 0x52d8, + 0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, 0x5340, 0x533e, 0x53c3, + 0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e, 0x5561, 0x5543, + 0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f, 0x5564, 0x5538, + 0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, + 0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806, 0x57e0, 0x57e4, + 0x57fa, 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920, 0x5962, 0x5a36, + 0x5a41, 0x5a49, 0x5a66, 0x5a6a, 0x5a40, + /* 0xb1 */ + 0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, 0x5bc7, 0x5bc5, + 0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, 0x5c60, + 0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22, + 0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2, + 0x5e38, 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5, + 0x5ebe, 0x5f35, 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97, + 0x5f99, 0x5f9e, 0x5f98, 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3, + 0x6089, 0x60a0, 0x60a8, 0x60cb, 0x60b4, 0x60e6, 0x60bd, 0x60c5, + 0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, 0x60d5, 0x60c6, 0x60df, + 0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248, 0x63a0, 0x63a7, + 0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367, 0x6398, 0x63aa, + 0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b, 0x63a8, 0x6384, + 0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f, 0x6380, 0x637b, + 0x6369, 0x6368, 0x637a, 0x655d, 0x6556, 0x6551, 0x6559, 0x6557, + 0x555f, 0x654f, 0x6558, 0x6555, 0x6554, 0x659c, 0x659b, 0x65ac, + 0x65cf, 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a, 0x6664, 0x6668, + 0x6666, 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881, 0x68af, 0x68a2, + 0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7, 0x6897, 0x68b0, + 0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894, 0x689d, 0x68a8, + 0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba, + /* 0xb2 */ + 0x6beb, 0x6bec, 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2, + 0x6de1, 0x6dcc, 0x6de4, 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb, + 0x6daf, 0x6dd1, 0x6dae, 0x6dde, 0x6df9, 0x6db8, 0x6df7, 0x6df5, + 0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, 0x6deb, 0x6dd8, 0x6dea, + 0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, 0x6dec, 0x6dbf, + 0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, 0x727d, + 0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405, + 0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x74f7, + 0x751c, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758f, 0x75d4, + 0x75d5, 0x75b5, 0x75ca, 0x75cd, 0x768e, 0x76d4, 0x76d2, 0x76db, + 0x7737, 0x773e, 0x773c, 0x7736, 0x7738, 0x773a, 0x786b, 0x7843, + 0x784e, 0x7965, 0x7968, 0x796d, 0x79fb, 0x7a92, 0x7a95, 0x7b20, + 0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, 0x7b1e, 0x7b2e, 0x7c92, + 0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e, 0x7d39, 0x7d3c, + 0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42, 0x7d32, 0x7d31, + 0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2, 0x801c, 0x804a, + 0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129, 0x8130, 0x8124, + 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838e, 0x839e, 0x8398, + 0x8378, 0x83a2, 0x8396, 0x83bd, 0x83ab, 0x8392, 0x838a, 0x8393, + 0x8389, 0x83a0, 0x8377, 0x837b, 0x837c, + /* 0xb3 */ + 0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4, + 0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e, + 0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f, + 0x8a2a, 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b, + 0x8a22, 0x8c49, 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa, + 0x8ca7, 0x8d67, 0x8d66, 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019, + 0x900d, 0x901a, 0x9017, 0x9023, 0x901f, 0x901d, 0x9010, 0x9015, + 0x901e, 0x9020, 0x900f, 0x9022, 0x9016, 0x901b, 0x9014, 0x90e8, + 0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6, 0x91e3, 0x91e7, + 0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673, 0x9678, 0x9670, + 0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea, 0x96e9, 0x7ae0, + 0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75, 0x9e7f, 0x9ea5, + 0x9ebb, 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096, + 0x5098, 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274, 0x5275, 0x5269, + 0x52de, 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b, 0x5580, 0x55a7, + 0x557c, 0x558a, 0x559d, 0x5598, 0x5582, 0x559c, 0x55aa, 0x5594, + 0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f, 0x553e, 0x55b2, + 0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589, 0x55ab, 0x5599, + 0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821, + 0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960, + /* 0xb4 */ + 0x5a77, 0x5a9a, 0x5a7f, 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71, + 0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c, + 0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, 0x5e3d, 0x5e40, 0x5e43, + 0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9, + 0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c, + 0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1, + 0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3, + 0x638c, 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x63d2, + 0x63e3, 0x63d0, 0x63e1, 0x63d6, 0x63ed, 0x63ee, 0x6376, 0x63f4, + 0x63ea, 0x63db, 0x6452, 0x63da, 0x63f9, 0x655e, 0x6566, 0x6562, + 0x6563, 0x6591, 0x6590, 0x65af, 0x666e, 0x6670, 0x6674, 0x6676, + 0x666f, 0x6691, 0x667a, 0x667e, 0x6677, 0x66fe, 0x66ff, 0x671f, + 0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7, 0x6905, 0x68df, + 0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2, 0x68e3, 0x68cb, + 0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da, 0x696e, 0x68fb, + 0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc, 0x6bef, 0x6c2e, + 0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21, 0x6e32, 0x6e67, + 0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b, 0x6e58, 0x6e24, + 0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34, 0x6e4d, 0x6e3a, + 0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb, + /* 0xb5 */ + 0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f, + 0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c, + 0x724c, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a, + 0x742a, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f, + 0x741b, 0x7426, 0x7428, 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2, + 0x75db, 0x75e3, 0x75d9, 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c, + 0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c, + 0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 0x7a97, + 0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46, 0x7b50, 0x7b52, + 0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f, 0x7ca5, 0x7d5e, + 0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72, 0x7d61, 0x7d66, + 0x7d62, 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5, 0x800b, 0x8052, + 0x8085, 0x8155, 0x8154, 0x814b, 0x8151, 0x814e, 0x8139, 0x8146, + 0x813e, 0x814c, 0x8153, 0x8174, 0x8212, 0x821c, 0x83e9, 0x8403, + 0x83f8, 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1, 0x83ef, 0x83f1, + 0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc, 0x83fd, 0x83f2, + 0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407, 0x83d4, 0x83df, + 0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db, 0x86e4, 0x86d0, + 0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983, 0x8996, 0x8a3b, + 0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41, + /* 0xb6 */ + 0x8a54, 0x8a5b, 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56, + 0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb, + 0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85, + 0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb, + 0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031, + 0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163, + 0x9165, 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d, + 0x9210, 0x9207, 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x9593, + 0x9592, 0x958e, 0x968a, 0x968e, 0x968b, 0x967d, 0x9685, 0x9686, + 0x968d, 0x9672, 0x9684, 0x96c1, 0x96c5, 0x96c4, 0x96c6, 0x96c7, + 0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, 0x9808, 0x98e7, 0x98ea, + 0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad, 0x9ec3, 0x9ecd, + 0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3, 0x50c5, 0x50be, + 0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f, 0x5277, 0x527d, + 0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f, 0x55df, 0x55e8, + 0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1, 0x55e3, 0x55e4, + 0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5, 0x55c9, 0x5712, + 0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a, 0x5854, 0x586b, + 0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b, 0x5967, 0x5ac1, + 0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc, + /* 0xb7 */ + 0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9, + 0x5ec8, 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148, + 0x611f, 0x60f3, 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c, + 0x6144, 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137, + 0x6221, 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d, + 0x642c, 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417, + 0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688, + 0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 0x695a, + 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, 0x694a, 0x6968, + 0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d, 0x6963, 0x695b, + 0x6b47, 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd, 0x6ea2, 0x6eaf, + 0x6ed3, 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7, 0x6ec5, 0x6ea5, + 0x6e98, 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96, 0x6e9c, 0x6ec4, + 0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159, 0x7169, 0x7164, + 0x7149, 0x7167, 0x715c, 0x716c, 0x7166, 0x714c, 0x7165, 0x715e, + 0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337, 0x7345, 0x733f, + 0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e, 0x7441, 0x743f, + 0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600, 0x75f0, 0x7601, + 0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3, 0x76de, 0x76df, + 0x775b, 0x776b, 0x7766, 0x775e, 0x7763, + /* 0xb8 */ + 0x7779, 0x776a, 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee, + 0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891, + 0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c, + 0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77, + 0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93, + 0x7d79, 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a, + 0x7f72, 0x7fa9, 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084, + 0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 0x8179, + 0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843d, 0x8431, + 0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b, 0x843c, 0x8435, + 0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e, 0x865c, 0x865f, + 0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe, 0x86fb, 0x8702, + 0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4, 0x88d9, 0x88dc, + 0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2, 0x899c, 0x89e3, + 0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70, 0x8a87, 0x8a7c, + 0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62, 0x8a6e, 0x8a6c, + 0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a, 0x8c89, 0x8cca, + 0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2, 0x8cc5, 0x8de1, + 0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea, 0x8de4, 0x8de6, + 0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a, + /* 0xb9 */ + 0x8f9f, 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c, + 0x9055, 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e, + 0x9041, 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237, + 0x9257, 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264, + 0x9251, 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a, + 0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca, + 0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810, + 0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x98fd, + 0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9, 0x9e82, 0x9f0e, + 0x9f13, 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6, 0x50ed, 0x50da, + 0x50d5, 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9, 0x5162, 0x51f3, + 0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600, 0x561b, 0x5617, + 0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e, 0x55f7, 0x5616, + 0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716, 0x5875, 0x587e, + 0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d, 0x58fd, 0x5925, + 0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6, 0x5ae9, 0x5ad7, + 0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7, 0x5be1, 0x5be5, + 0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d, 0x5c62, 0x5d84, + 0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54, 0x5ed3, 0x5ed6, + 0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147, + /* 0xba */ + 0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158, + 0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f, + 0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1, + 0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995, + 0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab, + 0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3, + 0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4, + 0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 0x6eff, + 0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23, 0x6f15, 0x6f2b, + 0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2, 0x6ecc, 0x6ef7, + 0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192, 0x723e, 0x7292, + 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a, 0x7470, 0x746d, + 0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609, 0x7613, 0x76e1, + 0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1, 0x789f, 0x78a7, + 0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d, 0x7a2e, 0x7a31, + 0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95, 0x7b8b, 0x7b75, + 0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87, 0x7b84, 0x7cb9, + 0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd, 0x7dbe, 0x7da0, + 0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2, 0x7dbf, 0x7db5, + 0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac, + /* 0xbb */ + 0x7f70, 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150, + 0x8180, 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa, + 0x8207, 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4, + 0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3, + 0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722, + 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902, + 0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6, + 0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 0x8aaa, + 0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7, 0x8c6a, 0x8c8d, + 0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99, 0x8d95, 0x8dfc, + 0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060, 0x9058, 0x905c, + 0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b, 0x9119, 0x9118, + 0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, 0x9280, 0x9285, + 0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8, 0x927c, 0x9291, + 0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4, 0x9699, 0x969c, + 0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785, 0x97f6, 0x9817, + 0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c, 0x9909, 0x99c1, + 0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4, 0x9cf6, 0x9cf3, + 0x9ebc, 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb, 0x50f5, 0x50f9, + 0x5102, 0x5108, 0x5109, 0x5105, 0x51dc, + /* 0xbc */ + 0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, 0x562e, + 0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, 0x564e, + 0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e, + 0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb, + 0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb, + 0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2, + 0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7, + 0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, 0x617c, + 0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab, 0x618e, 0x61ac, + 0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469, 0x646f, 0x6479, + 0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5, 0x6493, 0x6495, + 0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a, 0x64ac, 0x6499, + 0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae, 0x66ab, 0x66b4, + 0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e, 0x6a19, 0x69fd, + 0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, 0x6a05, 0x69ed, 0x6a11, + 0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, 0x6f3f, 0x6f7c, 0x6f84, + 0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, 0x6f5b, 0x6f78, 0x6f6e, + 0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, 0x6f58, 0x6ed5, 0x6f6f, + 0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8, 0x7256, 0x729b, + 0x734e, 0x7357, 0x7469, 0x748b, 0x7483, + /* 0xbd */ + 0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626, + 0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c, + 0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, 0x78be, 0x78d5, + 0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, 0x7a37, 0x7a3b, + 0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, 0x7bc6, 0x7bc7, + 0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, 0x7dfb, + 0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9, + 0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 0x7fe9, + 0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a, 0x8198, 0x8517, + 0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513, 0x8511, 0x8523, + 0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506, 0x8782, 0x8774, + 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, 0x8757, 0x874c, + 0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912, 0x8913, 0x8915, + 0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95, 0x8acb, 0x8af8, + 0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6, 0x8acd, 0x8ab6, + 0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0, 0x8cde, 0x8ce6, + 0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc, 0x8cea, 0x8ce1, + 0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d, 0x8e22, 0x8e0f, + 0x8e29, 0x8e1f, 0x8e21, 0x8e1e, 0x8eba, 0x8f1d, 0x8f1b, 0x8f1f, + 0x8f29, 0x8f26, 0x8f2a, 0x8f1c, 0x8f1e, + /* 0xbe */ + 0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, 0x912d, + 0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb, + 0x92b7, 0x92ea, 0x92ac, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2, + 0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707, + 0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c, + 0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df, + 0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, 0x9aee, 0x9aef, + 0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, 0x9d09, 0x9d03, + 0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112, 0x5118, 0x5114, + 0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291, 0x5293, 0x52f3, + 0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678, 0x566a, 0x5668, + 0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676, 0x58c1, 0x58be, + 0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78, 0x5bf0, 0x5c0e, + 0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd, 0x61b6, 0x61be, + 0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb, 0x64bb, 0x64bc, + 0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf, 0x64d2, 0x64d4, + 0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4, 0x66c7, 0x66b8, + 0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58, 0x6a39, 0x6a44, + 0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f, 0x6a48, 0x6b59, + 0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1, + /* 0xbf */ + 0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6, + 0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, 0x71c8, + 0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, 0x7368, + 0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, 0x750d, + 0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f, + 0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e, + 0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4, + 0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 0x7e11, + 0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09, 0x7e10, 0x7f79, + 0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3, 0x81a9, 0x81a8, + 0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, 0x8559, 0x8548, 0x8568, + 0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e, 0x8783, 0x879f, + 0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932, 0x8925, 0x892b, + 0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb, 0x8af1, 0x8b00, + 0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02, 0x8af7, 0x8aed, + 0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93, 0x8cf4, 0x8e44, + 0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, 0x8f3b, 0x8f2f, 0x8f38, + 0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, 0x9078, 0x9072, 0x907c, + 0x907a, 0x9134, 0x9192, 0x9320, 0x9336, 0x92f8, 0x9333, 0x932f, + 0x9322, 0x92fc, 0x932b, 0x9304, 0x931a, + /* 0xc0 */ + 0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7, + 0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713, + 0x970f, 0x975b, 0x975c, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b, + 0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, 0x991e, 0x991b, + 0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, 0x9abc, 0x9afb, + 0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, 0x9d28, 0x9d12, + 0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, 0x511f, 0x5121, + 0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, 0x568f, + 0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a, 0x5b24, 0x5b7a, + 0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8, 0x5e6b, 0x5f4c, + 0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb, 0x6232, 0x6234, + 0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6, 0x64ec, 0x64f1, + 0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6, 0x6a80, 0x6a94, + 0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e, 0x6a97, 0x6a90, + 0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, 0x6fd8, 0x6ff1, 0x6fdf, + 0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80, 0x6fec, 0x6fe1, + 0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df, 0x71ee, 0x71e6, + 0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235, 0x7246, 0x7370, + 0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646, 0x7642, 0x764c, + 0x76ea, 0x77b3, 0x77aa, 0x77b0, 0x77ac, + /* 0xc1 */ + 0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, 0x7901, + 0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, 0x7bf7, + 0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, 0x7cd9, + 0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b, + 0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35, + 0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070, + 0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf, + 0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, 0x8271, 0x85aa, 0x8584, + 0x857e, 0x859c, 0x8591, 0x8594, 0x85af, 0x859b, 0x8587, 0x85a8, + 0x858a, 0x8667, 0x87c0, 0x87d1, 0x87b3, 0x87d2, 0x87c6, 0x87ab, + 0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, 0x8936, 0x8944, 0x8938, + 0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b, 0x8b0a, 0x8b20, + 0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73, 0x8cfa, 0x8cfd, + 0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b, 0x8e48, 0x8e4a, + 0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f, 0x907d, 0x9084, + 0x9081, 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e, 0x919c, 0x934d, + 0x9382, 0x9328, 0x9375, 0x934a, 0x9365, 0x934b, 0x9318, 0x937e, + 0x936c, 0x935b, 0x9370, 0x935a, 0x9354, 0x95ca, 0x95cb, 0x95cc, + 0x95c8, 0x95c6, 0x96b1, 0x96b8, 0x96d6, 0x971c, 0x971e, 0x97a0, + 0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01, + /* 0xc2 */ + 0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b, + 0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2, + 0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, 0x5f5d, 0x61e3, 0x6233, + 0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7, + 0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2, + 0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, 0x7009, 0x700b, 0x6ffe, + 0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, 0x71fe, 0x71f8, + 0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, 0x7652, + 0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae, 0x7a61, 0x7a62, + 0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a, 0x7c1e, 0x7c23, + 0x7c21, 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a, 0x7e61, 0x7e52, + 0x7e59, 0x7f48, 0x7ff9, 0x7ffb, 0x8077, 0x8076, 0x81cd, 0x81cf, + 0x820a, 0x85cf, 0x85a9, 0x85cd, 0x85d0, 0x85c9, 0x85b0, 0x85ba, + 0x85b9, 0x85a6, 0x87ef, 0x87ec, 0x87f2, 0x87e0, 0x8986, 0x89b2, + 0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50, 0x8d05, 0x8e59, + 0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0, 0x8f49, 0x8f4d, + 0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0, 0x9394, 0x938a, + 0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0, 0x9398, 0x939a, + 0x9397, 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2, 0x96dc, 0x96d9, + 0x96db, 0x96de, 0x9724, 0x97a3, 0x97a6, + /* 0xc3 */ + 0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, 0x98ba, + 0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, 0x9b03, + 0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8, + 0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133, + 0x56a5, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2, + 0x61f7, 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5, + 0x6add, 0x6ada, 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d, + 0x7015, 0x7018, 0x7206, 0x720d, 0x7258, 0x72a2, 0x7378, 0x737a, + 0x74bd, 0x74ca, 0x74e3, 0x7587, 0x7586, 0x765f, 0x7661, 0x77c7, + 0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, 0x7c3f, 0x7c38, 0x7c3d, + 0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69, 0x7e6a, 0x7f85, + 0x7e73, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9, 0x85dd, 0x85ea, + 0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805, 0x880d, 0x87f9, + 0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41, 0x8b5c, 0x8b58, + 0x8b49, 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59, 0x8d08, 0x8d0a, + 0x8e7c, 0x8e72, 0x8e87, 0x8e76, 0x8e6c, 0x8e7a, 0x8e74, 0x8f54, + 0x8f4e, 0x8fad, 0x908a, 0x908b, 0x91b1, 0x91ae, 0x93e1, 0x93d1, + 0x93df, 0x93c3, 0x93c8, 0x93dc, 0x93dd, 0x93d6, 0x93e2, 0x93cd, + 0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, 0x96b4, 0x96e3, 0x972a, + 0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e, + /* 0xc4 */ + 0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d, + 0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a, + 0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, 0x52f8, 0x56a8, 0x56b7, + 0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, 0x5b7d, 0x5bf6, + 0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, 0x66e6, 0x6727, + 0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, 0x7662, + 0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c, + 0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 0x7e82, + 0x7f4c, 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9, 0x8611, 0x85fa, + 0x8606, 0x860b, 0x8607, 0x860a, 0x8814, 0x8815, 0x8964, 0x89ba, + 0x89f8, 0x8b70, 0x8b6c, 0x8b66, 0x8b6f, 0x8b5f, 0x8b6b, 0x8d0f, + 0x8d0d, 0x8e89, 0x8e81, 0x8e85, 0x8e82, 0x91b4, 0x91cb, 0x9418, + 0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, 0x9952, 0x9951, 0x99a8, + 0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d, 0x9e79, 0x9eb5, + 0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137, 0x5138, 0x56c1, + 0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc, 0x61fe, 0x651d, + 0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa, 0x6bb2, 0x704c, + 0x721b, 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3, 0x7c50, 0x7e8f, + 0x7e8c, 0x7fbc, 0x8617, 0x862d, 0x861a, 0x8823, 0x8822, 0x8821, + 0x881f, 0x896a, 0x896c, 0x89bd, 0x8b74, + /* 0xc5 */ + 0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, 0x8faf, + 0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b, + 0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957, + 0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d, + 0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19, + 0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9, + 0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, 0x6524, 0x6b0a, 0x6b61, + 0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, 0x766e, 0x766c, 0x79b3, + 0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972, 0x896f, 0x89fc, + 0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61, 0x9148, 0x9444, + 0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1, 0x986b, 0x9955, + 0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31, 0x9c3e, 0x9c3b, + 0x9dd3, 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94, 0x56cc, 0x5dd6, + 0x6200, 0x6523, 0x652b, 0x652a, 0x66ec, 0x6b10, 0x74da, 0x7aca, + 0x7c64, 0x7c63, 0x7c65, 0x7e93, 0x7e96, 0x7e94, 0x81e2, 0x8638, + 0x863f, 0x8831, 0x8b8a, 0x9090, 0x908f, 0x9463, 0x9460, 0x9464, + 0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, 0x9a57, 0x9ad3, 0x9ad4, + 0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f, 0x9ef4, 0x56d1, + 0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7, 0x7f50, 0x7f88, + 0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92, + /* 0xc6 */ + 0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744, + 0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, 0x9df9, 0x9dfa, + 0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, 0x5ef3, 0x6b16, 0x7063, + 0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, 0x9472, 0x9470, + 0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, 0x8b9a, + 0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5, + 0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f, + 0x9e1a, 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, 0x30fe, + 0x309d, 0x309e, 0x3005, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, + 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, + 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, + 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, + 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, + 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, + 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, + 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, + 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, + 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, + 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0x30a1, 0x30a2, + 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, + /* 0xc7 */ + 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, + 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, + 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, + 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, + 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, + 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, + 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, + 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, + 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, + 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x0414, + 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, + 0x041c, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, + 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431, + 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, + 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, + 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, + 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x2460, + 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, + 0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, + 0x247b, 0x247c, 0x247d, +}; +static const unsigned short big5_2uni_pagec9[7652] = { + /* 0xc9 */ + 0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47, + 0x4e8d, 0x56d7, 0xfa0c, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e, + 0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c, + 0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3, + 0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9, + 0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x531c, 0x534c, 0x5722, 0x5723, + 0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73, + 0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x6c36, + 0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a, 0x79b8, 0x808a, + 0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14, 0x4ef1, 0x4f00, + 0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22, 0x4f13, 0x4f04, + 0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5209, 0x5210, 0x52a6, 0x5322, + 0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df, 0x572e, 0x572a, + 0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b, 0x597e, 0x5977, + 0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a, 0x5c7b, 0x5c7e, + 0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74, 0x5fd5, 0x5fd4, + 0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266, 0x6262, 0x6259, + 0x6260, 0x625a, 0x6265, 0x65ef, 0x65ee, 0x673e, 0x6739, 0x6738, + 0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18, 0x6c46, 0x6c52, + 0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b, + /* 0xca */ + 0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f, + 0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d, + 0x897e, 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624, + 0x9620, 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64, + 0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33, + 0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad, + 0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, 0x5437, + 0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, 0x543d, + 0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee, 0x56e7, 0x56e5, + 0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752, 0x5906, 0x5940, + 0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2, 0x5990, 0x598f, + 0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a, 0x5c8d, 0x5c8f, + 0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86, 0x5c93, 0x5c95, + 0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c, 0x5e88, 0x5e8d, + 0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1, 0x5fd0, 0x5fed, + 0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, 0x5fe3, 0x5ffa, 0x5fef, + 0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, 0x6283, 0x628c, 0x628e, + 0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a, 0x6270, 0x6281, + 0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x6537, 0x65f0, 0x65f4, + 0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747, + /* 0xcb */ + 0x6759, 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b, + 0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b, + 0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95, + 0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a, + 0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5, + 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594, + 0x7595, 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, + 0x809c, 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 0x828a, + 0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f, 0x90a1, 0x90a5, + 0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f, 0x962d, 0x4e33, + 0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87, 0x4f76, 0x4f74, + 0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a, 0x4f9a, 0x4f79, + 0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e, 0x4f92, 0x4f82, + 0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be, 0x5235, 0x5232, + 0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b, 0x533c, 0x5392, + 0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482, 0x5488, 0x546b, + 0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466, 0x548d, 0x546f, + 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, 0x56f7, 0x56f9, + 0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770, 0x5776, 0x5780, + 0x5775, 0x577b, 0x5773, 0x5774, 0x5762, + /* 0xcc */ + 0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce, + 0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1, + 0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93, + 0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf, + 0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7, + 0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19, + 0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d, + 0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 0x6034, + 0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c, 0x6022, 0x600d, + 0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009, 0x601c, 0x6214, + 0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa, 0x62b6, 0x62ca, + 0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0, 0x62b8, 0x653d, + 0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612, 0x6608, 0x65fb, + 0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611, 0x6610, 0x66f6, + 0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776, 0x677b, 0x6798, + 0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a, 0x679f, 0x6791, + 0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779, 0x6794, 0x6b25, + 0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec, 0x6ceb, 0x6cee, + 0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7, 0x6cd0, 0x6cc2, + 0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2, + /* 0xcd */ + 0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0, + 0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1, + 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, + 0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9, + 0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1, + 0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8, + 0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1, + 0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, 0x77f7, + 0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb, 0x7c75, 0x7cfd, + 0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5, 0x80ad, 0x8220, + 0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b, 0x82b5, 0x82a7, + 0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8, 0x82a1, 0x82a9, + 0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670, 0x866f, 0x866d, + 0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd, 0x8fd6, 0x8fd5, + 0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0, 0x9639, 0x963d, + 0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, 0x4fd3, 0x4fb2, 0x4fc9, + 0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, 0x4fbb, 0x4fb3, 0x4fdb, + 0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, 0x4fec, 0x5244, 0x5249, + 0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, 0x5396, 0x5399, 0x5398, + 0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf, + /* 0xce */ + 0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6, + 0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0, + 0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b, + 0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4, + 0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd, + 0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db, + 0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8, + 0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 0x5cde, + 0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3, 0x5cd4, 0x5ccf, + 0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9, 0x5e21, 0x5e22, + 0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2, 0x5e9b, 0x5ea3, + 0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037, 0x6039, 0x6054, + 0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049, 0x605b, 0x604c, + 0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058, 0x6066, 0x606e, + 0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5, 0x630e, 0x6303, + 0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6, 0x6300, 0x6313, + 0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541, 0x6543, 0x65aa, + 0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c, 0x6626, 0x6622, + 0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639, 0x662e, 0x670f, + 0x6710, 0x67c1, 0x67f2, 0x67c8, 0x67ba, + /* 0xcf */ + 0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, 0x67eb, + 0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, 0x67ee, + 0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc, + 0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9, + 0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6, + 0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d, + 0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04, + 0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, 0x6d01, + 0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07, 0x6d20, 0x6d2c, + 0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f, 0x70be, 0x70b1, + 0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241, 0x7249, 0x724a, + 0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4, 0x72e8, 0x72eb, + 0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc, 0x73c2, 0x73c8, + 0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb, 0x73bf, 0x73c7, + 0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, 0x74ec, 0x74ee, 0x752e, + 0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, 0x76c4, 0x7708, 0x7703, + 0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, 0x76fa, 0x77e7, 0x77e8, + 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780f, 0x780e, 0x7809, + 0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945, 0x7944, 0x79d5, + 0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80, + /* 0xd0 */ + 0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f, + 0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d, + 0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7, + 0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, 0x80e3, 0x80d9, + 0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, 0x80e6, 0x80cd, + 0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, 0x82e8, + 0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1, + 0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 0x82e4, + 0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674, 0x867c, 0x8673, + 0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3, 0x8a04, 0x8a07, + 0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1, 0x90bd, 0x90bf, + 0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8, 0x91d4, 0x91d3, + 0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e, 0x501e, 0x5005, + 0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5, 0x4ff4, 0x5033, + 0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c, 0x5020, 0x5027, + 0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194, 0x5193, 0x51ca, + 0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a, 0x5252, 0x525e, + 0x525f, 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e, 0x5526, 0x54e2, + 0x5517, 0x5512, 0x54e7, 0x54f3, 0x54e4, 0x551a, 0x54ff, 0x5504, + 0x5508, 0x54eb, 0x5511, 0x5505, 0x54f1, + /* 0xd1 */ + 0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, 0x550b, + 0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6, + 0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9, + 0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15, + 0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad, + 0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1, + 0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, 0x5eaa, + 0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, 0x605a, 0x6067, 0x6041, + 0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d, 0x6083, 0x6095, + 0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219, 0x6246, 0x62f2, + 0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336, 0x6343, 0x63e4, + 0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341, 0x6334, 0x6358, + 0x6354, 0x6359, 0x632d, 0x6347, 0x6333, 0x635a, 0x6351, 0x6338, + 0x6357, 0x6340, 0x6348, 0x654a, 0x6546, 0x65c6, 0x65c3, 0x65c4, + 0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, 0x6712, 0x6713, 0x681f, + 0x681a, 0x6849, 0x6832, 0x6833, 0x683b, 0x684b, 0x684f, 0x6816, + 0x6831, 0x681c, 0x6835, 0x682b, 0x682d, 0x682f, 0x684e, 0x6844, + 0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828, 0x682e, 0x684d, + 0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d, 0x6b31, 0x6b34, + 0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4, + /* 0xd2 */ + 0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64, + 0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, 0x6d6d, 0x6d6f, + 0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, 0x6d67, 0x6d60, + 0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, 0x6d2f, 0x6d68, + 0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, 0x6d7d, + 0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39, + 0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5, + 0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 0x7277, + 0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6, 0x72f3, 0x72fb, + 0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc, 0x73e7, 0x73e3, + 0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd, 0x73da, 0x73d7, + 0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, 0x74f5, 0x7521, 0x755b, + 0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0, 0x75bf, 0x75b6, + 0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710, 0x7713, 0x7712, + 0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722, 0x7727, 0x7823, + 0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e, 0x782b, 0x7821, + 0x7829, 0x7833, 0x782a, 0x7831, 0x7954, 0x795b, 0x794f, 0x795c, + 0x7953, 0x7952, 0x7951, 0x79eb, 0x79ec, 0x79e0, 0x79ee, 0x79ed, + 0x79ea, 0x79dc, 0x79de, 0x79dd, 0x7a86, 0x7a89, 0x7a85, 0x7a8b, + 0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, 0x7b10, + /* 0xd3 */ + 0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09, + 0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85, + 0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f, + 0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d, + 0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e, + 0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, 0x8101, 0x80fb, 0x8100, + 0x8201, 0x822f, 0x8225, 0x8333, 0x832d, 0x8344, 0x8319, 0x8351, + 0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, 0x8322, 0x8342, + 0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d, 0x8316, 0x8324, + 0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345, 0x834c, 0x8353, + 0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653, 0x8652, 0x86a2, + 0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, 0x8687, 0x8697, 0x8686, + 0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, 0x86a1, 0x86a7, 0x8695, + 0x8698, 0x868e, 0x869d, 0x8690, 0x8694, 0x8843, 0x8844, 0x886d, + 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887f, 0x886f, 0x8883, + 0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, 0x8c57, 0x8c7b, 0x8ca4, + 0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6, 0x8ed1, 0x8ed3, + 0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004, 0x8ffc, 0x8ff6, + 0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df, 0x90e5, 0x90d8, + 0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150, + /* 0xd4 */ + 0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, 0x965f, 0x96bc, + 0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, 0x5061, 0x505e, + 0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, 0x504d, 0x5041, + 0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, 0x506b, + 0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051, + 0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d, + 0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a, + 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0x550c, + 0x5532, 0x5565, 0x554e, 0x5539, 0x5548, 0x552d, 0x553b, 0x5540, + 0x554b, 0x570a, 0x5707, 0x57fb, 0x5814, 0x57e2, 0x57f6, 0x57dc, + 0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, 0x57f8, 0x580b, 0x57f3, + 0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5, 0x57ec, 0x57e1, + 0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c, 0x57f1, 0x57e9, + 0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58, 0x5a55, 0x5a67, + 0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f, 0x5a65, 0x5a6c, + 0x5a53, 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52, 0x5a44, 0x5a5b, + 0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c, 0x5a70, 0x5a69, + 0x5a47, 0x5a51, 0x5a56, 0x5a42, 0x5a5c, 0x5b72, 0x5b6e, 0x5bc1, + 0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, 0x5d1d, 0x5d1a, 0x5d20, 0x5d0c, + 0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f, + /* 0xd5 */ + 0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1, + 0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96, + 0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3, + 0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db, + 0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, 0x60c0, 0x6332, 0x6365, + 0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, 0x63ad, 0x639d, 0x6397, + 0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, 0x63af, 0x6375, + 0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, 0x6378, + 0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553, 0x65cd, 0x6665, + 0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718, 0x6879, 0x6887, + 0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab, 0x6956, 0x686f, + 0x68a3, 0x68ac, 0x68a9, 0x6875, 0x6874, 0x68b2, 0x688f, 0x6877, + 0x6892, 0x687c, 0x686b, 0x6872, 0x68aa, 0x6880, 0x6871, 0x687e, + 0x689b, 0x6896, 0x688b, 0x68a0, 0x6889, 0x68a4, 0x6878, 0x687b, + 0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, 0x6b33, 0x6b37, 0x6b38, + 0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a, 0x6dc0, 0x6dab, + 0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2, 0x6db7, 0x6df6, + 0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6, 0x6dbe, 0x6de5, + 0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd, 0x6ded, 0x6df0, + 0x6dba, 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9, + /* 0xd6 */ + 0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, 0x6de3, 0x6dbb, + 0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, 0x70f0, 0x7104, + 0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, 0x70f8, + 0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f, + 0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff, + 0x730f, 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401, + 0x73fd, 0x7407, 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b, + 0x73f4, 0x7408, 0x7564, 0x7563, 0x75ce, 0x75d2, 0x75cf, 0x75cb, + 0x75cc, 0x75d1, 0x75d0, 0x768f, 0x7689, 0x76d3, 0x7739, 0x772f, + 0x772d, 0x7731, 0x7732, 0x7734, 0x7733, 0x773d, 0x7725, 0x773b, + 0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a, 0x784c, 0x7826, + 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a, 0x7963, 0x796b, + 0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7, 0x7a8f, 0x7a94, + 0x7a90, 0x7b35, 0x7b47, 0x7b34, 0x7b25, 0x7b30, 0x7b22, 0x7b24, + 0x7b33, 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b, 0x7b2d, 0x7b2f, + 0x7b32, 0x7b38, 0x7b1a, 0x7b23, 0x7c94, 0x7c98, 0x7c96, 0x7ca3, + 0x7d35, 0x7d3d, 0x7d38, 0x7d36, 0x7d3a, 0x7d45, 0x7d2c, 0x7d29, + 0x7d41, 0x7d47, 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b, 0x7d28, 0x7f63, + 0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb, 0x7fcd, 0x7fd0, + 0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f, + /* 0xd7 */ + 0x801e, 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119, + 0x811b, 0x812d, 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127, + 0x811d, 0x8122, 0x8211, 0x8238, 0x8233, 0x823a, 0x8234, 0x8232, + 0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, 0x837a, 0x8373, 0x83a4, + 0x8374, 0x838f, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83a9, + 0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, 0x838b, 0x837e, + 0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, 0x8387, + 0x83ae, 0x8376, 0x839a, 0x8659, 0x8656, 0x86bf, 0x86b7, 0x86c2, + 0x86c1, 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9, 0x86b3, 0x86b8, + 0x86cc, 0x86b4, 0x86bb, 0x86bc, 0x86c3, 0x86bd, 0x86be, 0x8852, + 0x8889, 0x8895, 0x88a8, 0x88a2, 0x88aa, 0x889a, 0x8891, 0x88a1, + 0x889f, 0x8898, 0x88a7, 0x8899, 0x889b, 0x8897, 0x88a4, 0x88ac, + 0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, 0x89d9, 0x89d5, 0x8a30, + 0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c, 0x8c5d, 0x8c7d, + 0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2, 0x8db9, 0x8dbf, + 0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7, 0x8ee0, 0x8ee1, + 0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021, 0x90ef, 0x90ea, + 0x90f0, 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb, 0x90ec, 0x90e9, + 0x9156, 0x9158, 0x915a, 0x9153, 0x9155, 0x91ec, 0x91f4, 0x91f1, + 0x91f3, 0x91f8, 0x91e4, 0x91f9, 0x91ea, + /* 0xd8 */ + 0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, 0x967c, + 0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5, + 0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083, + 0x508c, 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087, + 0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8, + 0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f, + 0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, 0x557d, 0x558c, 0x55a6, + 0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, 0x5829, 0x5837, 0x5819, + 0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848, 0x5825, 0x581c, + 0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839, 0x5838, 0x582d, + 0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f, 0x5a7a, 0x5aa2, + 0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac, 0x5a95, 0x5aae, + 0x5a37, 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b, 0x5aa9, 0x5a7b, + 0x5a7d, 0x5a8c, 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d, 0x5bea, 0x5bcd, + 0x5bcb, 0x5bd4, 0x5bd1, 0x5bca, 0x5bce, 0x5c0c, 0x5c30, 0x5d37, + 0x5d43, 0x5d6b, 0x5d41, 0x5d4b, 0x5d3f, 0x5d35, 0x5d51, 0x5d4e, + 0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, 0x5d31, 0x5d59, 0x5d42, + 0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36, 0x5d40, 0x5d45, + 0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab, 0x60c9, 0x60b9, + 0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114, + /* 0xd9 */ + 0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc, + 0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, 0x60ff, 0x6104, + 0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, 0x63e5, 0x63e8, + 0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, 0x63f6, 0x63d5, + 0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, 0x63c4, + 0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0, + 0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568, + 0x6565, 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 0x667c, + 0x666c, 0x667b, 0x6680, 0x6671, 0x6679, 0x666a, 0x6672, 0x6701, + 0x690c, 0x68d3, 0x6904, 0x68dc, 0x692a, 0x68ec, 0x68ea, 0x68f1, + 0x690f, 0x68d6, 0x68f7, 0x68eb, 0x68e4, 0x68f6, 0x6913, 0x6910, + 0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, 0x6970, 0x68b4, 0x6911, + 0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd, 0x68fc, 0x68e8, + 0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd, 0x68de, 0x68e6, + 0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915, 0x6925, 0x68c7, + 0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97, 0x6b99, 0x6b95, + 0x6bbd, 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc, 0x6e46, 0x6e47, + 0x6e1f, 0x6e49, 0x6e88, 0x6e3c, 0x6e3d, 0x6e45, 0x6e62, 0x6e2b, + 0x6e3f, 0x6e41, 0x6e5d, 0x6e73, 0x6e1c, 0x6e33, 0x6e4b, 0x6e40, + 0x6e51, 0x6e3b, 0x6e03, 0x6e2e, 0x6e5e, + /* 0xda */ + 0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b, + 0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64, + 0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a, + 0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125, + 0x7122, 0x7132, 0x711f, 0x7128, 0x713a, 0x711b, 0x724b, 0x725a, + 0x7288, 0x7289, 0x7286, 0x7285, 0x728b, 0x7312, 0x730b, 0x7330, + 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732d, 0x7326, 0x7323, + 0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, 0x7416, 0x741a, + 0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d, 0x7429, 0x7420, + 0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7, 0x75da, 0x75e1, + 0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695, 0x7692, 0x76da, + 0x7746, 0x7747, 0x7744, 0x774d, 0x7745, 0x774a, 0x774e, 0x774b, + 0x774c, 0x77de, 0x77ec, 0x7860, 0x7864, 0x7865, 0x785c, 0x786d, + 0x7871, 0x786a, 0x786e, 0x7870, 0x7869, 0x7868, 0x785e, 0x7862, + 0x7974, 0x7973, 0x7972, 0x7970, 0x7a02, 0x7a0a, 0x7a03, 0x7a0c, + 0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, 0x7b3b, 0x7b44, 0x7b48, + 0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2, 0x7c9e, 0x7ca8, + 0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56, 0x7d67, 0x7d6a, + 0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54, 0x7d69, 0x7d51, + 0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65, + /* 0xdb */ + 0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, 0x7fd7, 0x8051, 0x804f, 0x8050, + 0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, 0x814f, 0x8147, 0x813d, + 0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, 0x81f9, 0x8204, + 0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, 0x8423, + 0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410, + 0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5, + 0x83d8, 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9, + 0x8409, 0x840f, 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 0x83d5, + 0x83fa, 0x83c7, 0x83d1, 0x83ea, 0x8413, 0x83c3, 0x83ec, 0x83ee, + 0x83c4, 0x83fb, 0x83d7, 0x83e2, 0x841b, 0x83db, 0x83fe, 0x86d8, + 0x86e2, 0x86e6, 0x86d3, 0x86e3, 0x86da, 0x86ea, 0x86dd, 0x86eb, + 0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1, 0x8848, 0x8856, + 0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0, 0x88be, 0x88b6, + 0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9, 0x8995, 0x8998, + 0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d, 0x8a39, 0x8a59, + 0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52, 0x8a48, 0x8a51, + 0x8a4a, 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80, 0x8cba, 0x8cbe, + 0x8cb0, 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89, 0x8dd8, 0x8dd3, + 0x8dcd, 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5, 0x8dd9, 0x8dc8, + 0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, 0x8efa, + /* 0xdc */ + 0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6, + 0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f, + 0x9106, 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb, + 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f, + 0x9162, 0x9160, 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226, + 0x920f, 0x920c, 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204, + 0x9227, 0x9202, 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216, + 0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 0x9689, + 0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1, 0x96f0, 0x976c, + 0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6, 0x9ef9, 0x4e83, + 0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae, 0x50c4, 0x50ca, + 0x50b4, 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba, 0x50b1, 0x50cb, + 0x50c9, 0x50b6, 0x50b8, 0x51d7, 0x527a, 0x5278, 0x527b, 0x527c, + 0x55c3, 0x55db, 0x55cc, 0x55d0, 0x55cb, 0x55ca, 0x55dd, 0x55c0, + 0x55d4, 0x55c4, 0x55e9, 0x55bf, 0x55d2, 0x558d, 0x55cf, 0x55d5, + 0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9, 0x55c2, 0x5714, + 0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849, 0x586f, 0x5855, + 0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d, 0x5863, 0x5871, + 0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8, 0x5ab1, 0x5ab5, + 0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6, + /* 0xdd */ + 0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90, + 0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a, + 0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0, + 0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6, + 0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a, + 0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f, + 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5, + 0x63f1, 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x6433, + 0x6443, 0x641f, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423, + 0x640c, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642f, 0x640a, + 0x641a, 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7, 0x641b, 0x642e, + 0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686, 0x668c, 0x6695, + 0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678, 0x6720, 0x6966, + 0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f, 0x6945, 0x696a, + 0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948, 0x6949, 0x6935, + 0x696c, 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978, 0x6934, 0x6969, + 0x6940, 0x696f, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694c, + 0x693b, 0x694b, 0x6937, 0x695c, 0x694f, 0x6951, 0x6932, 0x6952, + 0x692f, 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43, 0x6b42, 0x6b48, + 0x6b41, 0x6b9b, 0xfa0d, 0x6bfb, 0x6bfc, + /* 0xde */ + 0x6bf9, 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0, + 0x6e9f, 0x6e93, 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2, + 0x6ebd, 0x6ec1, 0x6e9e, 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6, + 0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92, + 0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca, + 0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160, + 0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, 0x7142, + 0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 0x7144, + 0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291, 0x7290, 0x728e, + 0x733c, 0x7342, 0x733b, 0x733a, 0x7340, 0x734a, 0x7349, 0x7444, + 0x744a, 0x744b, 0x7452, 0x7451, 0x7457, 0x7440, 0x744f, 0x7450, + 0x744e, 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1, 0x74ff, 0x74fe, + 0x74fd, 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef, 0x760f, 0x7603, + 0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610, 0x75fb, 0x75f6, + 0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd, 0x7755, 0x775f, + 0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767, 0x7754, 0x7759, + 0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f, 0x7884, 0x7895, + 0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899, 0x7880, 0x7896, + 0x787b, 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11, 0x7a18, 0x7a19, + 0x7a12, 0x7a17, 0x7a15, 0x7a22, 0x7a13, + /* 0xdf */ + 0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, 0x7b66, 0x7b64, + 0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, 0x7b70, + 0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88, + 0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b, + 0x7d83, 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d, + 0x7f6b, 0x7f67, 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb, + 0x7fdc, 0x8021, 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b, + 0x8162, 0x8172, 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 0x8144, + 0x8161, 0x821d, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84f1, + 0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d, 0x8465, 0x8451, + 0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d, 0x845a, 0x8459, + 0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437, 0x843a, 0x8434, + 0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, 0x83d9, 0x844b, + 0x842f, 0x8442, 0x842d, 0x845f, 0x8470, 0x8439, 0x844e, 0x844c, + 0x8452, 0x846f, 0x84c5, 0x848e, 0x843b, 0x8447, 0x8436, 0x8433, + 0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454, 0x846e, 0x8450, + 0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6, 0x86f5, 0x874d, + 0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d, 0x8705, 0x88d6, + 0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da, 0x88cc, 0x88d0, + 0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4, + /* 0xe0 */ + 0x89e1, 0x89e0, 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f, + 0x8a61, 0x8a3f, 0x8a77, 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81, + 0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66, + 0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c, + 0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0, + 0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2, + 0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00, + 0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x9044, + 0x9049, 0x903d, 0x9110, 0x910d, 0x910f, 0x9111, 0x9116, 0x9114, + 0x910b, 0x910e, 0x916e, 0x916f, 0x9248, 0x9252, 0x9230, 0x923a, + 0x9266, 0x9233, 0x9265, 0x925e, 0x9283, 0x922e, 0x924a, 0x9246, + 0x926d, 0x926c, 0x924f, 0x9260, 0x9267, 0x926f, 0x9236, 0x9261, + 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, 0x924e, 0x9253, + 0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e, 0x959b, 0x9692, + 0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd, 0x96f8, 0x96f5, + 0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d, 0x980e, 0x98ac, + 0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5, 0x9aad, 0x9aab, + 0x9b5b, 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd, 0x50e6, 0x50d4, + 0x50d7, 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd, 0x50e4, 0x50d3, + 0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0, + /* 0xe1 */ + 0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627, + 0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613, + 0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c, + 0x5890, 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a, + 0x5887, 0x5891, 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894, + 0x588f, 0x58fe, 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea, + 0x5ada, 0x5aed, 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec, + 0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 0x5be3, + 0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a, 0x5d81, 0x5d77, + 0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d, 0x5d79, 0x5d7f, + 0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7, 0x5ece, 0x5edc, + 0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43, 0x5f6f, 0x5fb6, + 0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173, 0x6152, 0x6153, + 0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a, 0x615b, 0x6165, + 0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227, 0x622b, 0x642b, + 0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472, 0x6473, 0x647d, + 0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e, 0x645c, 0x644b, + 0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c, 0x646b, 0x6459, + 0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0, 0x669f, 0x6705, + 0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9, + /* 0xe2 */ + 0x69a0, 0x69ce, 0x6996, 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999, + 0x698e, 0x69a7, 0x698d, 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4, + 0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3, + 0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2, + 0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f, + 0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03, + 0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19, + 0x6f1a, 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x6f36, + 0x6f73, 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30, 0x6f3c, 0x6f35, + 0x6eeb, 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd, 0x6ef6, 0x6f39, + 0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e, 0x6f08, 0x6f21, + 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718f, 0x717b, + 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293, + 0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473, 0x7471, 0x7475, + 0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503, 0x757d, 0x7590, + 0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a, 0x7614, 0x76b8, + 0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780, 0x776f, 0x777e, + 0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8, 0x787e, 0x78ab, + 0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4, 0x7998, 0x798a, + 0x798b, 0x7996, 0x7995, 0x7994, 0x7993, + /* 0xe3 */ + 0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f, + 0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c, + 0x7b8a, 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e, + 0x7b85, 0x7b98, 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf, + 0x7cbc, 0x7cba, 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1, + 0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc, + 0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9, + 0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 0x8024, + 0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187, 0x818d, 0x818c, + 0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f, 0x84ba, 0x84ce, + 0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4, 0x84c1, 0x84cd, + 0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7, 0x84bb, 0x84a2, + 0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af, 0x84a8, 0x84d6, + 0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4, 0x84d2, 0x84db, + 0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, 0x876b, 0x8740, + 0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743, 0x872c, 0x8741, + 0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d, 0x873c, 0x8712, + 0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, 0x8738, 0x8724, + 0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1, 0x88f2, 0x88fa, + 0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb, + /* 0xe4 */ + 0x88f0, 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9, + 0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96, + 0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09, + 0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06, + 0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d, + 0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124, + 0x9121, 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4, + 0x9276, 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x92a6, + 0x929a, 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3, 0x92ee, 0x928e, + 0x9282, 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1, 0x928a, 0x9286, + 0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9, 0x929d, 0x928b, + 0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d, 0x977a, 0x977e, + 0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781, 0x977f, 0x97ce, + 0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900, 0x9907, 0x999d, + 0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2, 0x99bd, 0x99c7, + 0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60, 0x9b61, 0x9b5f, + 0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103, 0x5130, 0x50f8, + 0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c, 0x50fd, 0x510a, + 0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642, 0x564c, 0x5635, + 0x5641, 0x564a, 0x5649, 0x5646, 0x5658, + /* 0xe5 */ + 0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a, + 0x563a, 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af, + 0x58ac, 0x58a5, 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7, + 0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05, + 0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93, + 0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d, + 0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2, + 0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 0x619b, + 0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa, 0x61a1, 0x618d, + 0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496, 0x64a0, 0x6485, + 0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c, 0x64a3, 0x649f, + 0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579, 0x657b, 0x65b2, + 0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7, 0x66aa, 0x66af, + 0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15, 0x69f1, 0x69e4, + 0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d, 0x69fe, 0x6a27, + 0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40, 0x6a08, 0x69e6, + 0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04, 0x6a18, 0x6a25, + 0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16, 0x6b51, 0x6ba5, + 0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff, 0x6c02, 0x6f41, + 0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92, + /* 0xe6 */ + 0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96, + 0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57, + 0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67, + 0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77, + 0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a, + 0x71a9, 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa, + 0x719c, 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e, + 0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, 0x7362, + 0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d, 0x7485, 0x7488, + 0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625, 0x761e, 0x7619, + 0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b, 0x769c, 0x769d, + 0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788, 0x78cd, 0x78bb, + 0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8, 0x78c3, 0x78c4, + 0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2, 0x799b, 0x6b76, + 0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb, 0x7bbe, 0x7bac, + 0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5, 0x7cc8, 0x7ccc, + 0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7, 0x7de1, 0x7e03, + 0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee, 0x7ddf, 0x7f76, + 0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, 0x7fea, 0x7fec, 0x7fe6, + 0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f, + /* 0xe7 */ + 0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253, + 0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500, + 0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c, + 0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2, + 0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9, + 0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e, + 0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9, + 0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x8756, + 0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758, 0x8754, 0x875b, + 0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d, 0x876a, 0x8750, + 0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a, 0x876e, 0x875c, + 0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767, 0x8769, 0x885a, + 0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918, 0x8919, 0x8906, + 0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4, 0x89a3, 0x89ed, + 0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3, 0x8ad1, 0x8ad4, + 0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5, 0x8ad8, 0x8ac3, + 0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f, 0x8ce5, 0x8cdf, + 0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0, 0x8d9c, 0x8da1, + 0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e, 0x8e15, 0x8e1b, + 0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27, + /* 0xe8 */ + 0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c, + 0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073, + 0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a, + 0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182, + 0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6, + 0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc, + 0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd, + 0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, 0x92b5, + 0x92e1, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab, 0x95ae, 0x95b0, + 0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702, 0x975a, 0x978a, + 0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d, 0x9826, 0x9829, + 0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908, 0x98fa, 0x9911, + 0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd, 0x99cf, 0x99d3, + 0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb, 0x99d7, 0x99cc, + 0x9ab3, 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1, 0x9b46, 0x9b43, + 0x9b67, 0x9b74, 0x9b71, 0x9b66, 0x9b76, 0x9b75, 0x9b70, 0x9b68, + 0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, 0x9cfd, 0x9cff, 0x9cf7, 0x9d07, + 0x9d00, 0x9cf9, 0x9cfb, 0x9d08, 0x9d05, 0x9d04, 0x9e83, 0x9ed3, + 0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, 0x511a, 0x5111, 0x51de, + 0x5334, 0x53e1, 0x5670, 0x5660, 0x566e, + /* 0xe9 */ + 0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c, + 0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc, + 0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10, + 0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, 0x5db1, + 0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, 0x5db2, + 0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, 0x5ee9, + 0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x619d, 0x61a8, + 0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, 0x61bf, + 0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf, 0x64c9, 0x64bd, + 0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533, 0x657f, 0x657c, + 0x65a2, 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb, 0x66cf, 0x66bd, + 0x66bb, 0x66ba, 0x66cc, 0x6723, 0x6a34, 0x6a66, 0x6a49, 0x6a67, + 0x6a32, 0x6a68, 0x6a3e, 0x6a5d, 0x6a6d, 0x6a76, 0x6a5b, 0x6a51, + 0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, 0x6a41, 0x6a6a, 0x6a64, 0x6a50, + 0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, 0x6a3c, 0x6a5e, 0x6a56, + 0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54, 0x6b56, 0x6ba7, + 0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03, 0x6c06, 0x6fad, + 0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8, 0x6f5e, 0x6fc4, + 0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5, 0x6fae, 0x6fba, + 0x6fac, 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8, + /* 0xea */ + 0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, 0x6fb2, 0x6fb0, 0x71c5, + 0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, 0x71cb, 0x71d4, + 0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, 0x71da, + 0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365, + 0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495, + 0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633, + 0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d, + 0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, 0x7795, 0x7799, 0x7797, + 0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, 0x78e3, 0x78db, 0x78e1, + 0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, 0x7a44, 0x7a48, 0x7a47, + 0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde, 0x7be3, 0x7be7, + 0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9, 0x7bd4, 0x7bea, + 0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2, 0x7cd4, 0x7cd7, + 0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c, 0x7e1f, 0x7e20, + 0x7e13, 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22, 0x7e0b, 0x7e0f, + 0x7e16, 0x7e0d, 0x7e14, 0x7e25, 0x7e24, 0x7f43, 0x7f7b, 0x7f7c, + 0x7f7a, 0x7fb1, 0x7fef, 0x802a, 0x8029, 0x806c, 0x81b1, 0x81a6, + 0x81ae, 0x81b9, 0x81b5, 0x81ab, 0x81b0, 0x81ac, 0x81b4, 0x81b2, + 0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, 0x8257, 0x8556, 0x8545, + 0x856b, 0x854d, 0x8553, 0x8561, 0x8558, + /* 0xeb */ + 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, + 0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555, + 0x8567, 0x8560, 0x858c, 0x8566, 0x855d, 0x8554, 0x8565, 0x856c, + 0x8663, 0x8665, 0x8664, 0x879b, 0x878f, 0x8797, 0x8793, 0x8792, + 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785, + 0x8790, 0x8791, 0x879d, 0x8784, 0x8794, 0x879c, 0x879a, 0x8789, + 0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, 0x8931, 0x8922, + 0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, 0x8ae2, + 0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4, 0x8adf, 0x8af0, + 0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef, 0x8afb, 0x8c91, + 0x8c92, 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0, 0x8cf3, 0x8d6c, + 0x8d6e, 0x8da5, 0x8da7, 0x8e33, 0x8e3e, 0x8e38, 0x8e40, 0x8e45, + 0x8e36, 0x8e3c, 0x8e3d, 0x8e41, 0x8e30, 0x8e3f, 0x8ebd, 0x8f36, + 0x8f2e, 0x8f35, 0x8f32, 0x8f39, 0x8f37, 0x8f34, 0x9076, 0x9079, + 0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190, + 0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308, 0x931f, 0x9306, + 0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323, 0x9312, 0x9301, + 0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d, 0x92fa, 0x9325, + 0x9313, 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324, 0x92ff, 0x9329, + 0x9339, 0x9335, 0x932a, 0x9314, 0x930c, + /* 0xec */ + 0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, 0x95bc, 0x95cd, + 0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, 0x96a9, + 0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0, + 0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929, + 0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea, + 0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa, + 0x9af9, 0x9af7, 0x9b33, 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e, + 0x9b7b, 0x9b82, 0x9b93, 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 0x9b7d, + 0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, 0x9d14, 0x9d29, 0x9d1d, + 0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88, 0x9e86, 0x9e87, + 0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12, 0x9f3d, 0x5126, + 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4, 0x5693, 0x568c, + 0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682, 0x567f, 0x5681, + 0x58d6, 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25, 0x5b32, 0x5b23, + 0x5b2c, 0x5b27, 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b, 0x5bf1, 0x5bf2, + 0x5db7, 0x5e6c, 0x5e6a, 0x5fbe, 0x5fbb, 0x61c3, 0x61b5, 0x61bc, + 0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, 0x61de, 0x64ef, 0x64e9, + 0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580, 0x65b6, 0x65da, + 0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89, 0x6a9f, 0x6a9b, + 0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e, + /* 0xed */ + 0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a, + 0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, 0x6c09, 0x6fcc, 0x6fa9, + 0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, 0x6fe7, 0x6fe6, 0x6fde, + 0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, 0x71e8, 0x71f2, + 0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, 0x74b2, + 0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510, + 0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, + 0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 0x77b4, + 0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, 0x7902, 0x78fb, 0x78fc, + 0x78f2, 0x7905, 0x78f9, 0x78fe, 0x7904, 0x79ab, 0x79a8, 0x7a5c, + 0x7a5b, 0x7a56, 0x7a58, 0x7a54, 0x7a5a, 0x7abe, 0x7ac0, 0x7ac1, + 0x7c05, 0x7c0f, 0x7bf2, 0x7c00, 0x7bff, 0x7bfb, 0x7c0e, 0x7bf4, + 0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, 0x7c01, 0x7bf8, 0x7bfd, + 0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8, 0x7e2d, 0x7e3c, + 0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49, 0x7e40, 0x7e47, + 0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44, 0x7e3a, 0x7f45, + 0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c, 0x81bb, 0x81c4, + 0x81cc, 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9, 0x825b, 0x825a, + 0x825c, 0x8583, 0x8580, 0x858f, 0x85a7, 0x8595, 0x85a0, 0x858b, + 0x85a3, 0x857b, 0x85a4, 0x859a, 0x859e, + /* 0xee */ + 0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, 0x858e, + 0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582, + 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668, + 0x87be, 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5, + 0x87bc, 0x87ae, 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af, + 0x87c4, 0x87ca, 0x87b4, 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de, + 0x87b2, 0x8935, 0x8933, 0x893c, 0x893e, 0x8941, 0x8952, 0x8937, + 0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 0x8b18, + 0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f, 0x8b12, 0x8b15, + 0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13, 0x8b1a, 0x8c4f, + 0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94, 0x8cf9, 0x8d6f, + 0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47, 0x8f43, 0x8f40, + 0x9085, 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b, 0x9199, 0x919f, + 0x91a1, 0x919d, 0x91a0, 0x93a1, 0x9383, 0x93af, 0x9364, 0x9356, + 0x9347, 0x937c, 0x9358, 0x935c, 0x9376, 0x9349, 0x9350, 0x9351, + 0x9360, 0x936d, 0x938f, 0x934c, 0x936a, 0x9379, 0x9357, 0x9355, + 0x9352, 0x934f, 0x9371, 0x9377, 0x937b, 0x9361, 0x935e, 0x9363, + 0x9367, 0x9380, 0x934e, 0x9359, 0x95c7, 0x95c0, 0x95c9, 0x95c3, + 0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720, 0x971f, 0x9718, + 0x971d, 0x9719, 0x979a, 0x97a1, 0x979c, + /* 0xef */ + 0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, 0x9841, 0x9844, 0x984a, + 0x9849, 0x9845, 0x9843, 0x9925, 0x992b, 0x992c, 0x992a, 0x9933, + 0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, 0x99a3, 0x99a1, + 0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, 0x99fb, + 0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01, + 0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1, + 0x9ba5, 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41, + 0x9d67, 0x9d36, 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x9d45, + 0x9d42, 0x9d43, 0x9d3e, 0x9d37, 0x9d40, 0x9d3d, 0x7ff5, 0x9d2d, + 0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, 0x9ec8, 0x9eda, 0x9efb, 0x9eff, + 0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, 0x5131, 0x512d, 0x512e, + 0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699, 0x5970, 0x5b3c, + 0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8, 0x61df, 0x61ed, + 0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6, 0x61e9, 0x64ff, + 0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc, 0x6594, 0x65db, + 0x66da, 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd, 0x6ae1, 0x6ac6, + 0x6aba, 0x6ab6, 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad, 0x6b5e, 0x6bc9, + 0x6c0b, 0x7007, 0x700c, 0x700d, 0x7001, 0x7005, 0x7014, 0x700e, + 0x6fff, 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7, 0x700a, 0x7201, + 0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376, + /* 0xf0 */ + 0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2, + 0x7514, 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, + 0x765a, 0x76a6, 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x78ff, 0x790c, + 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79ad, 0x79ac, + 0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, 0x7c1f, 0x7c2d, 0x7c1d, + 0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, 0x7e50, 0x7e56, + 0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, 0x7e53, + 0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 0x81d0, + 0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3, 0x85c2, 0x85b3, + 0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb, 0x85ce, 0x85c8, + 0x85c5, 0x85b1, 0x85b6, 0x85d2, 0x8624, 0x85b8, 0x85b7, 0x85be, + 0x8669, 0x87e7, 0x87e6, 0x87e2, 0x87db, 0x87eb, 0x87ea, 0x87e5, + 0x87df, 0x87f3, 0x87e4, 0x87d4, 0x87dc, 0x87d3, 0x87ed, 0x87d8, + 0x87e3, 0x87a4, 0x87d7, 0x87d9, 0x8801, 0x87f4, 0x87e8, 0x87dd, + 0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950, 0x8951, 0x8949, + 0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35, 0x8b47, 0x8b2f, + 0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26, 0x8b36, 0x8b2e, + 0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75, 0x8c99, 0x8c98, + 0x8c97, 0x8cfe, 0x8d04, 0x8d02, 0x8d00, 0x8e5c, 0x8e62, 0x8e60, + 0x8e57, 0x8e56, 0x8e5e, 0x8e65, 0x8e67, + /* 0xf1 */ + 0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, 0x8f47, + 0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5, + 0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b, + 0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395, + 0x9388, 0x9399, 0x939f, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4, + 0x93a8, 0x93b4, 0x93a3, 0x93a5, 0x95d2, 0x95d3, 0x95d1, 0x96b3, + 0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, 0x96dd, 0x9723, 0x9722, + 0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, 0x97a4, 0x97aa, 0x97a2, + 0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa, 0x9850, 0x9851, + 0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f, 0x9a0b, 0x9a09, + 0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07, 0x9a06, 0x9ac0, + 0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35, 0x9b4a, 0x9b4c, + 0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1, 0x9bb5, 0x9bb8, + 0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c, 0x9d53, 0x9d4f, + 0x9d4a, 0x9d5b, 0x9d4b, 0x9d59, 0x9d56, 0x9d4c, 0x9d57, 0x9d52, + 0x9d54, 0x9d5f, 0x9d58, 0x9d5a, 0x9e8e, 0x9e8c, 0x9edf, 0x9f01, + 0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, 0x9f29, 0x9f28, 0x9f4c, + 0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4, 0x56ab, 0x56ad, + 0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd, 0x58db, 0x5912, + 0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70, + /* 0xf2 */ + 0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, 0x650c, 0x650e, + 0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1, + 0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, 0x6acf, 0x6acd, + 0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, 0x7020, 0x7016, + 0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701c, + 0x702a, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6, + 0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516, + 0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 0x7921, + 0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, 0x7a68, 0x7c33, 0x7c3c, + 0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, 0x7e76, 0x7e75, 0x7e78, + 0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, 0x7e74, 0x7e68, 0x7f4b, + 0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe, 0x8078, 0x81d7, + 0x81d5, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1, 0x85ed, 0x85d9, + 0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2, 0x85f8, 0x85d8, + 0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6, 0x85ef, 0x85de, + 0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7, 0x8809, 0x880c, + 0x880b, 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a, 0x8802, 0x8962, + 0x895a, 0x895b, 0x8957, 0x8961, 0x895c, 0x8958, 0x895d, 0x8959, + 0x8988, 0x89b7, 0x89b6, 0x89f6, 0x8b50, 0x8b48, 0x8b4a, 0x8b40, + 0x8b53, 0x8b56, 0x8b54, 0x8b4b, 0x8b55, + /* 0xf3 */ + 0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a, + 0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d, + 0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51, + 0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad, + 0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec, + 0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, 0x93d4, 0x93ee, 0x93e3, + 0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, 0x93e7, 0x957d, 0x95da, + 0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, 0x9728, 0x9726, 0x97b3, + 0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c, 0x9859, 0x985d, + 0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948, 0x9947, 0x9943, + 0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d, 0x9a24, 0x9a1b, + 0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c, 0x9a14, 0x9ac2, + 0x9b0b, 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea, 0x9beb, 0x9be0, + 0x9bde, 0x9be4, 0x9be6, 0x9be2, 0x9bf0, 0x9bd4, 0x9bd7, 0x9bec, + 0x9bdc, 0x9bd9, 0x9be5, 0x9bd5, 0x9be1, 0x9bda, 0x9d77, 0x9d81, + 0x9d8a, 0x9d84, 0x9d88, 0x9d71, 0x9d80, 0x9d78, 0x9d86, 0x9d8b, + 0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, 0x9d70, 0x9d69, 0x9d85, + 0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f, 0x9d87, 0x9d68, + 0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40, 0x9f41, 0x9f4d, + 0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2, + /* 0xf4 */ + 0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef, + 0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65df, + 0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9, + 0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, 0x7037, 0x7034, + 0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x7040, 0x703b, + 0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba, + 0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd, + 0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x79b2, + 0x7a6e, 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48, 0x7c4a, 0x7c47, + 0x7c45, 0x7cee, 0x7e7b, 0x7e7e, 0x7e81, 0x7e80, 0x7fba, 0x7fff, + 0x8079, 0x81db, 0x81d9, 0x820b, 0x8268, 0x8269, 0x8622, 0x85ff, + 0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, 0x8604, 0x8609, 0x8605, + 0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817, 0x8813, 0x8816, + 0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a, 0x8b5d, 0x8b68, + 0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86, 0x8e88, 0x8e84, + 0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a, 0x908d, 0x9143, + 0x9141, 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b, 0x9413, 0x93fb, + 0x9420, 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410, 0x9428, 0x9419, + 0x940d, 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e, 0x9416, 0x9412, + 0x93fa, 0x9409, 0x93f8, 0x940a, 0x93ff, + /* 0xf5 */ + 0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df, + 0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862, + 0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c, + 0x994b, 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36, + 0x9a29, 0x9a2e, 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10, + 0x9b12, 0x9b11, 0x9c0b, 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8, + 0x9c40, 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f, + 0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 0x9da0, + 0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a, 0x9da2, 0x9da8, + 0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6, 0x9da7, 0x9e99, + 0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6, 0x9f30, 0x9f2e, + 0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91, 0x513a, 0x5139, + 0x5298, 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48, 0x5b47, 0x5dcb, + 0x5dcf, 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc, 0x6b03, 0x6af8, + 0x6b00, 0x7043, 0x7044, 0x704a, 0x7048, 0x7049, 0x7045, 0x7046, + 0x721d, 0x721a, 0x7219, 0x737e, 0x7517, 0x766a, 0x77d0, 0x792d, + 0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a, 0x7e87, 0x7e88, + 0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030, 0x81dd, 0x8618, + 0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619, 0x8627, 0x862e, + 0x8621, 0x8620, 0x8629, 0x861e, 0x8625, + /* 0xf6 */ + 0x8829, 0x881d, 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a, + 0x896d, 0x8969, 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45, + 0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e, + 0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b, + 0x9436, 0x9429, 0x943d, 0x943c, 0x9430, 0x9439, 0x942a, 0x9437, + 0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a, + 0x97bf, 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956, + 0x9a39, 0x9a3d, 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x9a3f, + 0x9acd, 0x9b15, 0x9b17, 0x9b18, 0x9b16, 0x9b3a, 0x9b52, 0x9c2b, + 0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, 0x9c28, 0x9c29, 0x9c24, 0x9c21, + 0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca, 0x9dcf, 0x9dbe, + 0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9, 0x9dba, 0x9dac, + 0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd, 0x9db2, 0x9e7a, + 0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18, 0x9f1a, 0x9f31, + 0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6, 0x56c5, 0x56cb, + 0x5971, 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2, 0x6521, 0x6520, + 0x6526, 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d, 0x7055, 0x7056, + 0x7057, 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f, 0x74d8, 0x74d5, + 0x74d9, 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4, 0x7a70, 0x7a71, + 0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a, + /* 0xf7 */ + 0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634, + 0x8635, 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826, + 0x882a, 0x8825, 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84, + 0x8b82, 0x8b86, 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a, + 0x8e92, 0x8e90, 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c, + 0x9450, 0x944a, 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449, + 0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b, + 0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 0x9a49, + 0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b, 0x9b56, 0x9b55, + 0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33, 0x9c41, 0x9c3c, + 0x9c37, 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb, 0x9dd2, 0x9dde, + 0x9dda, 0x9dcb, 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf, 0x9de9, 0x9dd9, + 0x9dd8, 0x9dd6, 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6, 0x9ef0, 0x9f35, + 0x9f33, 0x9f32, 0x9f42, 0x9f6b, 0x9f95, 0x9fa2, 0x513d, 0x5299, + 0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f, 0x5f4f, 0x6201, + 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb, 0x6b11, 0x6b12, + 0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382, 0x7381, 0x7383, + 0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c, 0x863a, 0x8640, + 0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830, 0x8832, 0x882e, + 0x8833, 0x8976, 0x8974, 0x8973, 0x89fe, + /* 0xf8 */ + 0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64, + 0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4, + 0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52, + 0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c, + 0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4, + 0x9df6, 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec, + 0x9df4, 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3, + 0x9f06, 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x9f71, + 0x9f70, 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e, 0x5c6d, 0x652d, + 0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d, 0x7060, 0x7223, + 0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6, 0x7c6a, 0x7e97, + 0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835, 0x884b, 0x8b94, + 0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be, 0x91bd, 0x91c2, + 0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743, 0x9747, 0x97c7, + 0x97e5, 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67, 0x9c66, 0x9c62, + 0x9c5e, 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03, 0x9e06, 0x9e05, + 0x9e00, 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04, 0x9ea0, 0x9f1e, + 0x9f46, 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e, 0x65b8, 0x6b18, + 0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa, 0x77d8, 0x77d9, + 0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a, + /* 0xf9 */ + 0x7e98, 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648, + 0x8979, 0x897a, 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5, + 0x8ea4, 0x8ea3, 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749, + 0x9872, 0x995f, 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10, + 0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78, + 0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2, + 0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9c74, + 0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 0x9fa4, + 0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d, 0x883f, 0x8b9e, + 0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874, 0x98cc, 0x9961, + 0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15, 0x9e17, 0x9f48, + 0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482, 0x9480, 0x9481, + 0x9a69, 0x9a68, 0x9b2e, 0x9e19, 0x7229, 0x864b, 0x8b9f, 0x9483, + 0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d, 0x7069, 0x706a, + 0x9ea4, 0x9f7e, 0x9f49, 0x9f98, +}; + +static int +big5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0xa1 && c1 <= 0xc7) || (c1 >= 0xc9 && c1 <= 0xf9)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + unsigned int i = 157 * (c1 - 0xa1) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + unsigned short wc = 0xfffd; + if (i < 6280) { + if (i < 6121) + wc = big5_2uni_pagea1[i]; + } else { + if (i < 13932) + wc = big5_2uni_pagec9[i-6280]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short big5_2charset[13703] = { + 0xa246, 0xa247, 0xa244, 0xa1b1, 0xa258, 0xa1d3, 0xa150, 0xa1d1, + 0xa1d2, 0xa3be, 0xa3bc, 0xa3bd, 0xa3bf, 0xa3bb, 0xa344, 0xa345, + 0xa346, 0xa347, 0xa348, 0xa349, 0xa34a, 0xa34b, 0xa34c, 0xa34d, + 0xa34e, 0xa34f, 0xa350, 0xa351, 0xa352, 0xa353, 0xa354, 0xa355, + 0xa356, 0xa357, 0xa358, 0xa359, 0xa35a, 0xa35b, 0xa35c, 0xa35d, + 0xa35e, 0xa35f, 0xa360, 0xa361, 0xa362, 0xa363, 0xa364, 0xa365, + 0xa366, 0xa367, 0xa368, 0xa369, 0xa36a, 0xa36b, 0xa36c, 0xa36d, + 0xa36e, 0xa36f, 0xa370, 0xa371, 0xa372, 0xa373, 0xc7b3, 0xc7b1, + 0xc7b2, 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba, + 0xc7bb, 0xc7bc, 0xc7bd, 0xc7be, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c2, + 0xc7c3, 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0xc7c8, 0xc7c9, 0xc7ca, + 0xc7cb, 0xc7cc, 0xc7cd, 0xc7cf, 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3, + 0xc7d4, 0xc7d5, 0xc7d6, 0xc7d7, 0xc7d8, 0xc7d9, 0xc7da, 0xc7db, + 0xc7dc, 0xc7dd, 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3, + 0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7ce, 0xa156, 0xa158, + 0xa1a5, 0xa1a6, 0xa1a7, 0xa1a8, 0xa145, 0xa14c, 0xa14b, 0xa1ac, + 0xa1ab, 0xa1b0, 0xa1c2, 0xa24a, 0xa1c1, 0xa24b, 0xa2b9, 0xa2ba, + 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, 0xa2c1, 0xa2c2, + 0xa1f6, 0xa1f4, 0xa1f7, 0xa1f5, 0xa1f8, 0xa1f9, 0xa1fb, 0xa1fa, + 0xa1d4, 0xa1db, 0xa1e8, 0xa1e7, 0xa1fd, 0xa1fc, 0xa1e4, 0xa1e5, + 0xa1ec, 0xa1ed, 0xa1ef, 0xa1ee, 0xa1e3, 0xa1dc, 0xa1da, 0xa1dd, + 0xa1d8, 0xa1d9, 0xa1e6, 0xa1e9, 0xc7e9, 0xc7ea, 0xc7eb, 0xc7ec, + 0xc7ed, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f2, 0xc7f3, 0xc7f4, + 0xc7f5, 0xc7f6, 0xc7f7, 0xc7f8, 0xc7f9, 0xc7fa, 0xc7fb, 0xc7fc, + 0xa277, 0xa278, 0xa27a, 0xa27b, 0xa27c, 0xa27d, 0xa275, 0xa274, + 0xa273, 0xa272, 0xa271, 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa27e, + 0xa2a1, 0xa2a3, 0xa2a2, 0xa2ac, 0xa2ad, 0xa2ae, 0xa262, 0xa263, + 0xa264, 0xa265, 0xa266, 0xa267, 0xa268, 0xa269, 0xa270, 0xa26f, + 0xa26e, 0xa26d, 0xa26c, 0xa26b, 0xa26a, 0xa276, 0xa279, 0xa1bd, + 0xa1bc, 0xa1b6, 0xa1b5, 0xa1bf, 0xa1be, 0xa1bb, 0xa1ba, 0xa1b3, + 0xa1b7, 0xa1b4, 0xa2a8, 0xa2a9, 0xa2ab, 0xa2aa, 0xa1b9, 0xa1b8, + 0xa1f3, 0xa1f0, 0xa1f2, 0xa1f1, 0xa140, 0xa142, 0xa143, 0xa1b2, + 0xc6a4, 0xa171, 0xa172, 0xa16d, 0xa16e, 0xa175, 0xa176, 0xa179, + 0xa17a, 0xa169, 0xa16a, 0xa245, 0xa165, 0xa166, 0xa1a9, 0xa1aa, + 0xa2c3, 0xa2c4, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, 0xa2ca, + 0xa2cb, 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9, 0xc6aa, 0xc6ab, + 0xc6ac, 0xc6ad, 0xc6ae, 0xc6af, 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3, + 0xc6b4, 0xc6b5, 0xc6b6, 0xc6b7, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb, + 0xc6bc, 0xc6bd, 0xc6be, 0xc6bf, 0xc6c0, 0xc6c1, 0xc6c2, 0xc6c3, + 0xc6c4, 0xc6c5, 0xc6c6, 0xc6c7, 0xc6c8, 0xc6c9, 0xc6ca, 0xc6cb, + 0xc6cc, 0xc6cd, 0xc6ce, 0xc6cf, 0xc6d0, 0xc6d1, 0xc6d2, 0xc6d3, + 0xc6d4, 0xc6d5, 0xc6d6, 0xc6d7, 0xc6d8, 0xc6d9, 0xc6da, 0xc6db, + 0xc6dc, 0xc6dd, 0xc6de, 0xc6df, 0xc6e0, 0xc6e1, 0xc6e2, 0xc6e3, + 0xc6e4, 0xc6e5, 0xc6e6, 0xc6e7, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb, + 0xc6ec, 0xc6ed, 0xc6ee, 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3, + 0xc6f4, 0xc6f5, 0xc6f6, 0xc6f7, 0xc6a2, 0xc6a3, 0xc6f8, 0xc6f9, + 0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd, 0xc6fe, 0xc740, 0xc741, 0xc742, + 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, 0xc74a, + 0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751, 0xc752, + 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a, + 0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f, 0xc760, 0xc761, 0xc762, + 0xc763, 0xc764, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, 0xc76a, + 0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc772, + 0xc773, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, + 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4, + 0xc7a5, 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0xc7ac, + 0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc6a1, 0xa374, 0xa375, 0xa376, + 0xa377, 0xa378, 0xa379, 0xa37a, 0xa37b, 0xa37c, 0xa37d, 0xa37e, + 0xa3a1, 0xa3a2, 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a6, 0xa3a7, 0xa3a8, + 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, 0xa3b0, + 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, 0xa3b8, + 0xa3b9, 0xa3ba, 0xa1c0, 0xa255, 0xa256, 0xa250, 0xa251, 0xa252, + 0xa254, 0xa257, 0xa253, 0xa1eb, 0xa1ea, 0xa24f, 0xa440, 0xa442, + 0xa443, 0xc945, 0xa456, 0xa454, 0xa457, 0xa455, 0xc946, 0xa4a3, + 0xc94f, 0xc94d, 0xa4a2, 0xa4a1, 0xa542, 0xa541, 0xa540, 0xa543, + 0xa4fe, 0xa5e0, 0xa5e1, 0xa8c3, 0xa458, 0xa4a4, 0xc950, 0xa4a5, + 0xc963, 0xa6ea, 0xcbb1, 0xa459, 0xa4a6, 0xa544, 0xc964, 0xc940, + 0xa444, 0xa45b, 0xc947, 0xa45c, 0xa4a7, 0xa545, 0xa547, 0xa546, + 0xa5e2, 0xa5e3, 0xa8c4, 0xadbc, 0xa441, 0xc941, 0xa445, 0xa45e, + 0xa45d, 0xa5e4, 0xa8c5, 0xb0ae, 0xd44b, 0xb6c3, 0xdcb1, 0xdcb2, + 0xa446, 0xa4a9, 0xa8c6, 0xa447, 0xc948, 0xa45f, 0xa4aa, 0xa4ac, + 0xc951, 0xa4ad, 0xa4ab, 0xa5e5, 0xa8c7, 0xa8c8, 0xab45, 0xa460, + 0xa4ae, 0xa5e6, 0xa5e8, 0xa5e7, 0xa6eb, 0xa8c9, 0xa8ca, 0xab46, + 0xab47, 0xadbd, 0xdcb3, 0xf6d6, 0xa448, 0xa4b0, 0xa4af, 0xc952, + 0xa4b1, 0xa4b7, 0xa4b2, 0xa4b3, 0xc954, 0xc953, 0xa4b5, 0xa4b6, + 0xa4b4, 0xa54a, 0xa54b, 0xa54c, 0xa54d, 0xa549, 0xa550, 0xc96a, + 0xc966, 0xc969, 0xa551, 0xa561, 0xc968, 0xa54e, 0xa54f, 0xa548, + 0xc965, 0xc967, 0xa5f5, 0xc9b0, 0xa5f2, 0xa5f6, 0xc9ba, 0xc9ae, + 0xa5f3, 0xc9b2, 0xa5f4, 0xa5f7, 0xa5e9, 0xc9b1, 0xa5f8, 0xc9b5, + 0xc9b9, 0xc9b6, 0xc9b3, 0xa5ea, 0xa5ec, 0xa5f9, 0xa5ee, 0xc9ab, + 0xa5f1, 0xa5ef, 0xa5f0, 0xc9bb, 0xc9b8, 0xc9af, 0xa5ed, 0xc9ac, + 0xa5eb, 0xc9b4, 0xc9b7, 0xc9ad, 0xca66, 0xa742, 0xa6f4, 0xca67, + 0xa6f1, 0xa744, 0xa6f9, 0xa6f8, 0xca5b, 0xa6fc, 0xa6f7, 0xca60, + 0xca68, 0xca64, 0xa6fa, 0xa6fd, 0xa6ee, 0xa747, 0xca5d, 0xcbbd, + 0xa6ec, 0xa743, 0xa6ed, 0xa6f5, 0xa6f6, 0xca62, 0xca5e, 0xa6fb, + 0xa6f3, 0xca5a, 0xa6ef, 0xca65, 0xa745, 0xa748, 0xa6f2, 0xa740, + 0xa746, 0xa6f0, 0xca63, 0xa741, 0xca69, 0xca5c, 0xa6fe, 0xca5f, + 0xca61, 0xa8d8, 0xcbbf, 0xcbcb, 0xa8d0, 0xcbcc, 0xa8cb, 0xa8d5, + 0xa8ce, 0xcbb9, 0xa8d6, 0xcbb8, 0xcbbc, 0xcbc3, 0xcbc1, 0xa8de, + 0xa8d9, 0xcbb3, 0xcbb5, 0xa8db, 0xa8cf, 0xcbb6, 0xcbc2, 0xcbc9, + 0xa8d4, 0xcbbb, 0xcbb4, 0xa8d3, 0xcbb7, 0xa8d7, 0xcbba, 0xa8d2, + 0xa8cd, 0xa8dc, 0xcbc4, 0xa8dd, 0xcbc8, 0xcbc6, 0xcbca, 0xa8da, + 0xcbbe, 0xcbb2, 0xcbc0, 0xa8d1, 0xcbc5, 0xa8cc, 0xcbc7, 0xab56, + 0xab4a, 0xcde0, 0xcde8, 0xab49, 0xab51, 0xab5d, 0xcdee, 0xcdec, + 0xcde7, 0xab4b, 0xcded, 0xcde3, 0xab59, 0xab50, 0xab58, 0xcdde, + 0xcdea, 0xcde1, 0xab54, 0xcde2, 0xcddd, 0xab5b, 0xab4e, 0xab57, + 0xab4d, 0xcddf, 0xcde4, 0xcdeb, 0xab55, 0xab52, 0xcde6, 0xab5a, + 0xcde9, 0xcde5, 0xab4f, 0xab5c, 0xab53, 0xab4c, 0xab48, 0xcdef, + 0xadd7, 0xadc1, 0xadd1, 0xadd6, 0xd0d0, 0xd0cf, 0xd0d4, 0xd0d5, + 0xadc4, 0xadcd, 0xadda, 0xadce, 0xd0c9, 0xadc7, 0xd0ca, 0xaddc, + 0xadd3, 0xadbe, 0xadbf, 0xd0dd, 0xb0bf, 0xadcc, 0xadcb, 0xd0cb, + 0xadcf, 0xd45b, 0xadc6, 0xd0d6, 0xadd5, 0xadd4, 0xadca, 0xd0ce, + 0xd0d7, 0xd0c8, 0xadc9, 0xd0d8, 0xadd2, 0xd0cc, 0xadc0, 0xadc3, + 0xadc2, 0xd0d9, 0xadd0, 0xadc5, 0xadd9, 0xaddb, 0xd0d3, 0xadd8, + 0xd0db, 0xd0cd, 0xd0dc, 0xd0d1, 0xd0da, 0xd0d2, 0xadc8, 0xd463, + 0xd457, 0xb0b3, 0xd45c, 0xd462, 0xb0b2, 0xd455, 0xb0b6, 0xd459, + 0xd452, 0xb0b4, 0xd456, 0xb0b9, 0xb0be, 0xd467, 0xd451, 0xb0ba, + 0xd466, 0xb0b5, 0xd458, 0xb0b1, 0xd453, 0xd44f, 0xd45d, 0xd450, + 0xd44e, 0xd45a, 0xd460, 0xd461, 0xb0b7, 0xd85b, 0xd45e, 0xd44d, + 0xd45f, 0xb0c1, 0xd464, 0xb0c0, 0xd44c, 0xd454, 0xd465, 0xb0bc, + 0xb0bb, 0xb0b8, 0xb0bd, 0xb0af, 0xb0b0, 0xb3c8, 0xd85e, 0xd857, + 0xb3c5, 0xd85f, 0xd855, 0xd858, 0xb3c4, 0xd859, 0xb3c7, 0xd85d, + 0xd853, 0xd852, 0xb3c9, 0xb3ca, 0xb3c6, 0xb3cb, 0xd851, 0xd85c, + 0xd85a, 0xd854, 0xb3c3, 0xd856, 0xb6ca, 0xb6c4, 0xdcb7, 0xb6cd, + 0xdcbd, 0xdcc0, 0xb6c6, 0xb6c7, 0xdcba, 0xb6c5, 0xdcc3, 0xb6cb, + 0xdcc4, 0xdcbf, 0xb6cc, 0xdcb4, 0xb6c9, 0xdcb5, 0xdcbe, 0xdcbc, + 0xdcb8, 0xb6c8, 0xdcb6, 0xb6ce, 0xdcbb, 0xdcc2, 0xdcb9, 0xdcc1, + 0xb9b6, 0xb9b3, 0xb9b4, 0xe0f9, 0xe0f1, 0xb9b2, 0xb9af, 0xe0f2, + 0xb9b1, 0xe0f5, 0xe0f7, 0xe0fe, 0xe0fd, 0xe0f8, 0xb9ae, 0xe0f0, + 0xb9ac, 0xe0f3, 0xb9b7, 0xe0f6, 0xe0fa, 0xb9b0, 0xb9ad, 0xe0fc, + 0xe0fb, 0xb9b5, 0xe0f4, 0xbbf8, 0xe4ec, 0xe4e9, 0xbbf9, 0xbbf7, + 0xe4f0, 0xe4ed, 0xe4e6, 0xbbf6, 0xbbfa, 0xe4e7, 0xbbf5, 0xbbfd, + 0xe4ea, 0xe4eb, 0xbbfb, 0xbbfc, 0xe4f1, 0xe4ee, 0xe4ef, 0xbeaa, + 0xe8f8, 0xbea7, 0xe8f5, 0xbea9, 0xbeab, 0xe8f6, 0xbea8, 0xe8f7, + 0xe8f4, 0xc076, 0xecbd, 0xc077, 0xecbb, 0xecbc, 0xecba, 0xecb9, + 0xecbe, 0xc075, 0xefb8, 0xefb9, 0xe4e8, 0xefb7, 0xc078, 0xc35f, + 0xf1eb, 0xf1ec, 0xc4d7, 0xc4d8, 0xf5c1, 0xf5c0, 0xc56c, 0xc56b, + 0xf7d0, 0xa449, 0xa461, 0xa4b9, 0xa4b8, 0xa553, 0xa552, 0xa5fc, + 0xa5fb, 0xa5fd, 0xa5fa, 0xa74a, 0xa749, 0xa74b, 0xa8e0, 0xa8df, + 0xa8e1, 0xab5e, 0xa259, 0xd0de, 0xa25a, 0xb0c2, 0xa25c, 0xa25b, + 0xd860, 0xa25d, 0xb9b8, 0xa25e, 0xa44a, 0xa4ba, 0xa5fe, 0xa8e2, + 0xa44b, 0xa4bd, 0xa4bb, 0xa4bc, 0xa640, 0xa74c, 0xa8e4, 0xa8e3, + 0xa8e5, 0xaddd, 0xbeac, 0xc94e, 0xa554, 0xa555, 0xa641, 0xca6a, + 0xab60, 0xab5f, 0xd0e0, 0xd0df, 0xb0c3, 0xa4be, 0xc955, 0xcbcd, + 0xab61, 0xade0, 0xadde, 0xaddf, 0xbead, 0xa556, 0xa642, 0xc9bc, + 0xa74d, 0xa74e, 0xca6b, 0xcbce, 0xa8e6, 0xcbcf, 0xd0e2, 0xd0e3, + 0xade3, 0xd0e4, 0xd0e1, 0xade4, 0xade2, 0xade1, 0xd0e5, 0xd468, + 0xd861, 0xdcc5, 0xe140, 0xbbfe, 0xbeae, 0xe8f9, 0xa44c, 0xa45a, + 0xb0c4, 0xb3cd, 0xb9b9, 0xc942, 0xa4bf, 0xa559, 0xa557, 0xa558, + 0xa8e7, 0xa44d, 0xa44e, 0xa462, 0xa4c0, 0xa4c1, 0xa4c2, 0xc9be, + 0xa55a, 0xc96b, 0xa646, 0xc9bf, 0xa644, 0xa645, 0xc9bd, 0xa647, + 0xa643, 0xca6c, 0xaaec, 0xca6d, 0xca6e, 0xa750, 0xa74f, 0xa753, + 0xa751, 0xa752, 0xa8ed, 0xa8ec, 0xcbd4, 0xcbd1, 0xcbd2, 0xcbd0, + 0xa8ee, 0xa8ea, 0xa8e9, 0xa8eb, 0xa8e8, 0xa8ef, 0xab63, 0xcdf0, + 0xcbd3, 0xab68, 0xcdf1, 0xab64, 0xab67, 0xab66, 0xab65, 0xab62, + 0xd0e8, 0xade7, 0xd0eb, 0xade5, 0xd0e7, 0xade8, 0xade6, 0xade9, + 0xd0e9, 0xd0ea, 0xd0e6, 0xd0ec, 0xb3d1, 0xb0c5, 0xd469, 0xd46b, + 0xd46a, 0xd46c, 0xb0c6, 0xb3ce, 0xb3cf, 0xb3d0, 0xb6d0, 0xdcc7, + 0xdcc6, 0xdcc8, 0xdcc9, 0xb6d1, 0xb6cf, 0xe141, 0xe142, 0xb9bb, + 0xb9ba, 0xe35a, 0xbc40, 0xbc41, 0xbc42, 0xbc44, 0xe4f2, 0xe4f3, + 0xbc43, 0xbeaf, 0xbeb0, 0xf1ed, 0xf5c3, 0xf5c2, 0xf7d1, 0xa44f, + 0xa55c, 0xa55b, 0xa648, 0xc9c0, 0xa755, 0xa756, 0xa754, 0xa757, + 0xca6f, 0xca70, 0xa8f1, 0xcbd5, 0xa8f0, 0xcdf2, 0xab6c, 0xcdf3, + 0xab6b, 0xab69, 0xab6a, 0xd0ed, 0xb0c7, 0xd46e, 0xb0ca, 0xd46d, + 0xb1e5, 0xb0c9, 0xb0c8, 0xb3d4, 0xb3d3, 0xb3d2, 0xb6d2, 0xb6d5, + 0xb6d6, 0xb6d4, 0xb6d3, 0xe143, 0xe144, 0xe4f5, 0xbc45, 0xe4f4, + 0xbeb1, 0xecbf, 0xc079, 0xf1ee, 0xc455, 0xa463, 0xa4c3, 0xc956, + 0xa4c4, 0xa4c5, 0xa55d, 0xa55e, 0xa649, 0xca71, 0xcbd6, 0xcbd7, + 0xab6d, 0xd0ee, 0xb0cc, 0xb0cb, 0xd863, 0xd862, 0xa450, 0xa4c6, + 0xa55f, 0xb0cd, 0xc943, 0xc96c, 0xa560, 0xc9c2, 0xa64b, 0xa64a, + 0xc9c1, 0xa758, 0xadea, 0xd46f, 0xb6d7, 0xe145, 0xb9bc, 0xe8fa, + 0xf3fd, 0xa4c7, 0xcbd8, 0xcdf4, 0xb0d0, 0xb0ce, 0xb0cf, 0xa451, + 0xa464, 0xa2cd, 0xa4ca, 0xa4c9, 0xa4c8, 0xa563, 0xa562, 0xc96d, + 0xc9c3, 0xa8f5, 0xa8f2, 0xa8f4, 0xa8f3, 0xab6e, 0xb3d5, 0xa452, + 0xa4cb, 0xa565, 0xa564, 0xca72, 0xa8f6, 0xc957, 0xa567, 0xa566, + 0xa64c, 0xa64d, 0xca73, 0xa759, 0xa75a, 0xa8f7, 0xa8f8, 0xa8f9, + 0xab6f, 0xcdf5, 0xadeb, 0xc944, 0xa4cc, 0xc9c4, 0xca74, 0xca75, + 0xcbd9, 0xcbda, 0xcdf7, 0xcdf6, 0xcdf9, 0xcdf8, 0xab70, 0xd470, + 0xaded, 0xd0ef, 0xadec, 0xd864, 0xb3d6, 0xd865, 0xe146, 0xb9bd, + 0xbc46, 0xf1ef, 0xc958, 0xa568, 0xb0d1, 0xa453, 0xa465, 0xa4ce, + 0xa4cd, 0xa4cf, 0xa8fb, 0xa8fa, 0xa8fc, 0xab71, 0xadee, 0xe8fb, + 0xc24f, 0xa466, 0xa56a, 0xa579, 0xa574, 0xa56f, 0xa56e, 0xa575, + 0xa573, 0xa56c, 0xa57a, 0xa56d, 0xa569, 0xa578, 0xa577, 0xa576, + 0xa56b, 0xa572, 0xa571, 0xa57b, 0xa570, 0xa653, 0xa659, 0xa655, + 0xa65b, 0xc9c5, 0xa658, 0xa64e, 0xa651, 0xa654, 0xa650, 0xa657, + 0xa65a, 0xa64f, 0xa652, 0xa656, 0xa65c, 0xca7e, 0xca7b, 0xa767, + 0xca7c, 0xa75b, 0xa75d, 0xa775, 0xa770, 0xcaa5, 0xca7d, 0xa75f, + 0xa761, 0xcaa4, 0xa768, 0xca78, 0xa774, 0xa776, 0xa75c, 0xa76d, + 0xca76, 0xa773, 0xa764, 0xa76e, 0xa76f, 0xca77, 0xa76c, 0xa76a, + 0xa76b, 0xa771, 0xcaa1, 0xa75e, 0xa772, 0xcaa3, 0xa766, 0xa763, + 0xca7a, 0xa762, 0xcaa6, 0xa765, 0xa769, 0xa760, 0xcaa2, 0xca79, + 0xcbeb, 0xcbea, 0xa94f, 0xcbed, 0xcbef, 0xcbe4, 0xcbe7, 0xcbee, + 0xa950, 0xcbe1, 0xcbe5, 0xcbe9, 0xce49, 0xa94b, 0xce4d, 0xa8fd, + 0xcbe6, 0xa8fe, 0xa94c, 0xa945, 0xa941, 0xcbe2, 0xa944, 0xa949, + 0xa952, 0xcbe3, 0xcbdc, 0xa943, 0xcbdd, 0xcbdf, 0xa946, 0xa948, + 0xcbdb, 0xcbe0, 0xa951, 0xa94d, 0xcbe8, 0xa953, 0xa94a, 0xcbde, + 0xa947, 0xa942, 0xa940, 0xcbec, 0xa94e, 0xce48, 0xcdfb, 0xce4b, + 0xcdfd, 0xab78, 0xaba8, 0xab74, 0xaba7, 0xab7d, 0xaba4, 0xab72, + 0xcdfc, 0xce43, 0xaba3, 0xce4f, 0xaba5, 0xab79, 0xce45, 0xce42, + 0xab77, 0xcdfa, 0xaba6, 0xce4a, 0xab7c, 0xce4c, 0xaba9, 0xab73, + 0xab7e, 0xab7b, 0xce40, 0xaba1, 0xce46, 0xce47, 0xab7a, 0xaba2, + 0xab76, 0xab75, 0xcdfe, 0xce44, 0xce4e, 0xd144, 0xadfb, 0xd0f1, + 0xd0f6, 0xadf4, 0xae40, 0xd0f4, 0xadef, 0xadf9, 0xadfe, 0xd0fb, + 0xadfa, 0xadfd, 0xd0fe, 0xadf5, 0xd0f5, 0xd142, 0xd143, 0xadf7, + 0xd141, 0xadf3, 0xae43, 0xd0f8, 0xadf1, 0xd146, 0xd0f9, 0xd0fd, + 0xadf6, 0xae42, 0xd0fa, 0xadfc, 0xd140, 0xd147, 0xd4a1, 0xd145, + 0xae44, 0xadf0, 0xd0fc, 0xd0f3, 0xadf8, 0xd0f2, 0xd0f7, 0xd0f0, + 0xae41, 0xd477, 0xb0e4, 0xd4a7, 0xb0e2, 0xb0df, 0xd47c, 0xb0db, + 0xd4a2, 0xb0e6, 0xd476, 0xd47b, 0xd47a, 0xadf2, 0xb0e1, 0xd4a5, + 0xd4a8, 0xd473, 0xb3e8, 0xd4a9, 0xb0e7, 0xb0d9, 0xb0d6, 0xd47e, + 0xb0d3, 0xd4a6, 0xb0da, 0xd4aa, 0xd474, 0xd4a4, 0xb0dd, 0xd475, + 0xd478, 0xd47d, 0xb0de, 0xb0dc, 0xb0e8, 0xb0e3, 0xb0d7, 0xb1d2, + 0xb0d8, 0xd479, 0xb0e5, 0xb0e0, 0xd4a3, 0xb0d5, 0xb0d4, 0xd471, + 0xd472, 0xd86a, 0xb3d7, 0xb3da, 0xd875, 0xb3ee, 0xd878, 0xb3d8, + 0xd871, 0xb3de, 0xb3e4, 0xb5bd, 0xb3e2, 0xd86e, 0xb3ef, 0xb3db, + 0xb3e3, 0xd876, 0xdcd7, 0xd87b, 0xd86f, 0xd866, 0xd873, 0xd86d, + 0xb3e1, 0xd879, 0xb3dd, 0xb3f1, 0xb3ea, 0xb3df, 0xb3dc, 0xb3e7, + 0xd87a, 0xd86c, 0xd872, 0xd874, 0xd868, 0xd877, 0xb3d9, 0xd867, + 0xb3e0, 0xb3f0, 0xb3ec, 0xd869, 0xb3e6, 0xb3ed, 0xb3e9, 0xb3e5, + 0xd870, 0xb3eb, 0xdcd5, 0xdcd1, 0xdce0, 0xdcca, 0xdcd3, 0xb6e5, + 0xb6e6, 0xb6de, 0xdcdc, 0xb6e8, 0xdccf, 0xdcce, 0xdccc, 0xdcde, + 0xb6dc, 0xdcd8, 0xdccd, 0xb6df, 0xdcd6, 0xb6da, 0xdcd2, 0xdcd9, + 0xdcdb, 0xdcdf, 0xb6e3, 0xdccb, 0xb6dd, 0xdcd0, 0xb6d8, 0xb6e4, + 0xdcda, 0xb6e0, 0xb6e1, 0xb6e7, 0xb6db, 0xa25f, 0xb6d9, 0xdcd4, + 0xb6e2, 0xdcdd, 0xb9cd, 0xb9c8, 0xe155, 0xe151, 0xe14b, 0xb9c2, + 0xb9be, 0xe154, 0xb9bf, 0xe14e, 0xe150, 0xe153, 0xb9c4, 0xb9cb, + 0xb9c5, 0xe149, 0xb9c6, 0xb9c7, 0xe14c, 0xb9cc, 0xe14a, 0xe14f, + 0xb9c3, 0xe148, 0xb9c9, 0xb9c1, 0xb9c0, 0xe14d, 0xe152, 0xb9ca, + 0xe147, 0xbc4d, 0xe547, 0xe544, 0xbc47, 0xbc53, 0xbc54, 0xbc4a, + 0xe542, 0xbc4c, 0xe4f9, 0xbc52, 0xe546, 0xbc49, 0xe548, 0xbc48, + 0xe543, 0xe545, 0xbc4b, 0xe541, 0xe4fa, 0xe4f7, 0xd86b, 0xe4fd, + 0xe4f6, 0xe4fc, 0xe4fb, 0xe4f8, 0xbc4f, 0xbc4e, 0xbc50, 0xe4fe, + 0xbeb2, 0xe540, 0xe945, 0xe8fd, 0xbebe, 0xe942, 0xbeb6, 0xbeba, + 0xe941, 0xbeb9, 0xbeb5, 0xbeb8, 0xbeb3, 0xbebd, 0xe943, 0xe8fe, + 0xbebc, 0xe8fc, 0xbebb, 0xe944, 0xe940, 0xbc51, 0xbebf, 0xe946, + 0xbeb7, 0xbeb4, 0xecc6, 0xecc8, 0xc07b, 0xecc9, 0xecc7, 0xecc5, + 0xecc4, 0xc07d, 0xecc3, 0xc07e, 0xecc1, 0xecc2, 0xc07a, 0xc0a1, + 0xc07c, 0xecc0, 0xc250, 0xefbc, 0xefba, 0xefbf, 0xefbd, 0xefbb, + 0xefbe, 0xc360, 0xf1f2, 0xf1f3, 0xc456, 0xf1f4, 0xf1f0, 0xf1f5, + 0xf1f1, 0xc251, 0xf3fe, 0xf441, 0xc459, 0xf440, 0xc458, 0xc457, + 0xc45a, 0xf5c5, 0xf5c6, 0xc4da, 0xc4d9, 0xc4db, 0xf5c4, 0xf6d8, + 0xf6d7, 0xc56d, 0xc56f, 0xc56e, 0xf6d9, 0xc5c8, 0xf8a6, 0xc5f1, + 0xf8a5, 0xf8ee, 0xc949, 0xa57d, 0xa57c, 0xa65f, 0xa65e, 0xc9c7, + 0xa65d, 0xc9c6, 0xa779, 0xcaa9, 0xcaa8, 0xa777, 0xa77a, 0xcaa7, + 0xa778, 0xcbf0, 0xcbf1, 0xa954, 0xabaa, 0xd148, 0xd149, 0xae45, + 0xae46, 0xd4ac, 0xb0e9, 0xb0eb, 0xd4ab, 0xb0ea, 0xd87c, 0xb3f2, + 0xb6e9, 0xb6ea, 0xdce1, 0xb9cf, 0xb9ce, 0xe549, 0xe948, 0xe947, + 0xf96b, 0xa467, 0xc959, 0xc96e, 0xc96f, 0xa662, 0xa666, 0xc9c9, + 0xa664, 0xa663, 0xc9c8, 0xa665, 0xa661, 0xa660, 0xc9ca, 0xa7a6, + 0xa7a3, 0xa77d, 0xcaaa, 0xcaab, 0xa7a1, 0xcaad, 0xa77b, 0xcaae, + 0xcaac, 0xa77e, 0xa7a2, 0xa7a5, 0xa7a4, 0xa77c, 0xcaaf, 0xa959, + 0xcbfe, 0xa95b, 0xa95a, 0xcc40, 0xa958, 0xa957, 0xcbf5, 0xcbf4, + 0xcbf2, 0xcbf7, 0xcbf6, 0xcbf3, 0xcbfc, 0xcbfd, 0xcbfa, 0xcbf8, + 0xa956, 0xcbfb, 0xa95c, 0xcc41, 0xcbf9, 0xabab, 0xa955, 0xabac, + 0xce54, 0xce5a, 0xabb2, 0xce58, 0xce5e, 0xce55, 0xce59, 0xce5b, + 0xce5d, 0xce57, 0xce56, 0xce51, 0xce52, 0xabad, 0xabaf, 0xabae, + 0xce53, 0xce5c, 0xabb1, 0xce50, 0xd153, 0xd152, 0xd157, 0xd14e, + 0xd151, 0xd150, 0xd154, 0xd158, 0xae47, 0xae4a, 0xd14f, 0xd155, + 0xae49, 0xd14a, 0xabb0, 0xd4ba, 0xd156, 0xd14d, 0xae48, 0xd14c, + 0xd4b1, 0xb0ec, 0xb0f0, 0xd4c1, 0xd4af, 0xd4bd, 0xb0f1, 0xd4bf, + 0xd4c5, 0xd4c9, 0xd4c0, 0xd4b4, 0xd4bc, 0xd4ca, 0xd4c8, 0xd4be, + 0xd4b9, 0xd4b2, 0xd8a6, 0xd4b0, 0xb0f5, 0xd4b7, 0xb0f6, 0xb0f2, + 0xd4ad, 0xd4c3, 0xd4b5, 0xd4b3, 0xd4c6, 0xb0f3, 0xd4cc, 0xb0ed, + 0xb0ef, 0xd4bb, 0xd4b6, 0xae4b, 0xb0ee, 0xd4b8, 0xd4c7, 0xd4cb, + 0xd4c2, 0xd4c4, 0xd4ae, 0xd8a1, 0xd8aa, 0xd8a9, 0xb3fa, 0xd8a2, + 0xb3fb, 0xb3f9, 0xd8a4, 0xb3f6, 0xd8a8, 0xd8a3, 0xd8a5, 0xd87d, + 0xb3f4, 0xd8b2, 0xd8b1, 0xd8ae, 0xb3f3, 0xb3f7, 0xb3f8, 0xd14b, + 0xd8ab, 0xb3f5, 0xb0f4, 0xd8ad, 0xd87e, 0xd8b0, 0xd8af, 0xd8b3, + 0xdcef, 0xd8ac, 0xd8a7, 0xdce7, 0xb6f4, 0xb6f7, 0xb6f2, 0xdce6, + 0xdcea, 0xdce5, 0xb6ec, 0xb6f6, 0xdce2, 0xb6f0, 0xdce9, 0xb6ee, + 0xb6ed, 0xdcec, 0xb6ef, 0xdcee, 0xdceb, 0xb6eb, 0xb6f5, 0xdcf0, + 0xdce4, 0xdced, 0xdce3, 0xb6f1, 0xb6f3, 0xdce8, 0xdcf1, 0xe15d, + 0xb9d0, 0xe163, 0xb9d5, 0xe15f, 0xe166, 0xe157, 0xb9d7, 0xb9d1, + 0xe15c, 0xbc55, 0xe15b, 0xe164, 0xb9d2, 0xb9d6, 0xe15a, 0xe160, + 0xe165, 0xe156, 0xb9d4, 0xe15e, 0xe162, 0xe168, 0xe158, 0xe161, + 0xb9d3, 0xe167, 0xe159, 0xbc59, 0xe54b, 0xbc57, 0xbc56, 0xe54d, + 0xe552, 0xe54e, 0xe551, 0xbc5c, 0xbea5, 0xbc5b, 0xe54a, 0xe550, + 0xbc5a, 0xe54f, 0xe54c, 0xbc58, 0xe94d, 0xe94f, 0xe94a, 0xbec1, + 0xe94c, 0xbec0, 0xe94e, 0xbec3, 0xe950, 0xbec2, 0xe949, 0xe94b, + 0xc0a5, 0xeccc, 0xc0a4, 0xeccd, 0xc0a3, 0xeccb, 0xc0a2, 0xecca, + 0xc253, 0xc252, 0xf1f6, 0xf1f8, 0xf1f7, 0xc361, 0xc362, 0xc363, + 0xf442, 0xc45b, 0xf7d3, 0xf7d2, 0xc5f2, 0xa468, 0xa4d0, 0xa7a7, + 0xce5f, 0xb3fc, 0xb3fd, 0xdcf2, 0xb9d8, 0xe169, 0xe553, 0xc95a, + 0xcab0, 0xcc42, 0xce60, 0xd159, 0xae4c, 0xf1f9, 0xc4dc, 0xa469, + 0xa57e, 0xc970, 0xa667, 0xa668, 0xa95d, 0xb0f7, 0xb9da, 0xb9db, + 0xb9d9, 0xa46a, 0xa4d1, 0xa4d3, 0xa4d2, 0xc95b, 0xa4d4, 0xa5a1, + 0xc971, 0xa5a2, 0xa669, 0xa66a, 0xc9cb, 0xa7a8, 0xcab1, 0xa961, + 0xcc43, 0xa95f, 0xa960, 0xa95e, 0xd15a, 0xabb6, 0xabb5, 0xabb7, + 0xabb4, 0xce61, 0xa962, 0xabb3, 0xae4d, 0xae4e, 0xae4f, 0xd4cd, + 0xb3fe, 0xd8b4, 0xb0f8, 0xb6f8, 0xb9dd, 0xb9dc, 0xe16a, 0xbc5d, + 0xbec4, 0xefc0, 0xf6da, 0xf7d4, 0xa46b, 0xa5a3, 0xa5a4, 0xc9d1, + 0xa66c, 0xa66f, 0xc9cf, 0xc9cd, 0xa66e, 0xc9d0, 0xc9d2, 0xc9cc, + 0xa671, 0xa670, 0xa66d, 0xa66b, 0xc9ce, 0xa7b3, 0xa7b0, 0xcab6, + 0xcab9, 0xcab8, 0xa7aa, 0xa7b2, 0xa7af, 0xcab5, 0xcab3, 0xa7ae, + 0xa7a9, 0xa7ac, 0xcab4, 0xcabb, 0xcab7, 0xa7ad, 0xa7b1, 0xa7b4, + 0xcab2, 0xcaba, 0xa7ab, 0xa967, 0xa96f, 0xcc4f, 0xcc48, 0xa970, + 0xcc53, 0xcc44, 0xcc4b, 0xa966, 0xcc45, 0xa964, 0xcc4c, 0xcc50, + 0xa963, 0xcc51, 0xcc4a, 0xcc4d, 0xa972, 0xa969, 0xcc54, 0xcc52, + 0xa96e, 0xa96c, 0xcc49, 0xa96b, 0xcc47, 0xcc46, 0xa96a, 0xa968, + 0xa971, 0xa96d, 0xa965, 0xcc4e, 0xabb9, 0xabc0, 0xce6f, 0xabb8, + 0xce67, 0xce63, 0xce73, 0xce62, 0xabbb, 0xce6c, 0xabbe, 0xabc1, + 0xabbc, 0xce70, 0xabbf, 0xae56, 0xce76, 0xce64, 0xce66, 0xce6d, + 0xce71, 0xce75, 0xce72, 0xce6b, 0xce6e, 0xce68, 0xabc3, 0xce6a, + 0xce69, 0xce74, 0xabba, 0xce65, 0xabc2, 0xabbd, 0xae5c, 0xd162, + 0xae5b, 0xd160, 0xae50, 0xae55, 0xd15f, 0xd15c, 0xd161, 0xae51, + 0xd15b, 0xae54, 0xae52, 0xd163, 0xae53, 0xae57, 0xae58, 0xae5a, + 0xae59, 0xd15d, 0xd15e, 0xd164, 0xd4d4, 0xb0f9, 0xd8c2, 0xd4d3, + 0xd4e6, 0xb140, 0xd4e4, 0xb0fe, 0xb0fa, 0xd4ed, 0xd4dd, 0xd4e0, + 0xb143, 0xd4ea, 0xd4e2, 0xb0fb, 0xb144, 0xd4e7, 0xd4e5, 0xd4d6, + 0xd4eb, 0xd4df, 0xd4da, 0xd4d0, 0xd4ec, 0xd4dc, 0xd4cf, 0xb142, + 0xd4e1, 0xd4ee, 0xd4de, 0xd4d2, 0xd4d7, 0xd4ce, 0xb141, 0xd4db, + 0xd4d8, 0xb0fc, 0xd4d1, 0xd4e9, 0xb0fd, 0xd4d9, 0xd4d5, 0xd4e8, + 0xb440, 0xd8bb, 0xd8b8, 0xd8c9, 0xd8bd, 0xd8ca, 0xb442, 0xd8c6, + 0xd8c3, 0xd8c4, 0xd8c7, 0xd8cb, 0xd4e3, 0xd8cd, 0xdd47, 0xb443, + 0xd8ce, 0xd8b6, 0xd8c0, 0xd8c5, 0xb441, 0xb444, 0xd8cc, 0xd8cf, + 0xd8ba, 0xd8b7, 0xd8b9, 0xd8be, 0xd8bc, 0xb445, 0xd8c8, 0xd8bf, + 0xd8c1, 0xd8b5, 0xdcfa, 0xdcf8, 0xb742, 0xb740, 0xdd43, 0xdcf9, + 0xdd44, 0xdd40, 0xdcf7, 0xdd46, 0xdcf6, 0xdcfd, 0xb6fe, 0xb6fd, + 0xb6fc, 0xdcfb, 0xdd41, 0xb6f9, 0xb741, 0xdcf4, 0xdcfe, 0xdcf3, + 0xdcfc, 0xb6fa, 0xdd42, 0xdcf5, 0xb6fb, 0xdd45, 0xe16e, 0xb9e2, + 0xb9e1, 0xb9e3, 0xe17a, 0xe170, 0xe176, 0xe16b, 0xe179, 0xe178, + 0xe17c, 0xe175, 0xb9de, 0xe174, 0xb9e4, 0xe16d, 0xb9df, 0xe17b, + 0xb9e0, 0xe16f, 0xe172, 0xe177, 0xe171, 0xe16c, 0xe173, 0xe555, + 0xbc61, 0xe558, 0xe557, 0xe55a, 0xe55c, 0xbc5f, 0xe556, 0xe554, + 0xe55d, 0xe55b, 0xe559, 0xe55f, 0xe55e, 0xbc63, 0xbc5e, 0xbc60, + 0xbc62, 0xe560, 0xe957, 0xe956, 0xe955, 0xe958, 0xe951, 0xe952, + 0xe95a, 0xe953, 0xbec5, 0xe95c, 0xe95b, 0xe954, 0xecd1, 0xc0a8, + 0xeccf, 0xecd4, 0xecd3, 0xe959, 0xc0a7, 0xecd2, 0xecce, 0xecd6, + 0xecd5, 0xc0a6, 0xecd0, 0xbec6, 0xc254, 0xefc1, 0xf1fa, 0xf1fb, + 0xf1fc, 0xc45c, 0xc45d, 0xf443, 0xf5c8, 0xf5c7, 0xf6db, 0xf6dc, + 0xf7d5, 0xf8a7, 0xa46c, 0xa46d, 0xa46e, 0xa4d5, 0xa5a5, 0xc9d3, + 0xa672, 0xa673, 0xa7b7, 0xa7b8, 0xa7b6, 0xa7b5, 0xa973, 0xcc55, + 0xa975, 0xa974, 0xcc56, 0xabc4, 0xae5d, 0xd165, 0xd4f0, 0xb145, + 0xb447, 0xd4ef, 0xb446, 0xb9e5, 0xe17d, 0xbec7, 0xc0a9, 0xecd7, + 0xc45e, 0xc570, 0xc972, 0xa5a6, 0xc973, 0xa676, 0xa674, 0xa675, + 0xa677, 0xa7ba, 0xa7b9, 0xcabc, 0xa7bb, 0xcabd, 0xcc57, 0xcc58, + 0xa976, 0xa978, 0xa97a, 0xa977, 0xa97b, 0xa979, 0xabc8, 0xabc5, + 0xabc7, 0xabc9, 0xabc6, 0xd166, 0xce77, 0xd168, 0xd167, 0xae63, + 0xae5f, 0xae60, 0xae62, 0xae64, 0xae61, 0xae66, 0xae65, 0xb14a, + 0xd4f2, 0xd4f1, 0xb149, 0xb148, 0xb147, 0xb14b, 0xb146, 0xd8d5, + 0xd8d2, 0xb449, 0xd8d1, 0xd8d6, 0xb44b, 0xd8d4, 0xb448, 0xb44a, + 0xd8d3, 0xdd48, 0xdd49, 0xdd4a, 0xb9e6, 0xb9ee, 0xe17e, 0xb9e8, + 0xb9ec, 0xe1a1, 0xb9ed, 0xb9e9, 0xb9ea, 0xb9e7, 0xb9eb, 0xbc66, + 0xd8d0, 0xbc67, 0xbc65, 0xbc64, 0xe95d, 0xbec8, 0xecd8, 0xecd9, + 0xc364, 0xc45f, 0xa46f, 0xa678, 0xabca, 0xd169, 0xae67, 0xb14e, + 0xb14d, 0xb14c, 0xb44c, 0xb44d, 0xd8d7, 0xb9ef, 0xbec9, 0xa470, + 0xc95c, 0xa4d6, 0xc974, 0xc9d4, 0xa679, 0xa97c, 0xdd4b, 0xa471, + 0xa4d7, 0xc9d5, 0xcabe, 0xcabf, 0xa7bc, 0xd8d8, 0xb44e, 0xdd4c, + 0xc0aa, 0xa472, 0xa4a8, 0xa4d8, 0xc975, 0xa5a7, 0xa7c0, 0xa7bf, + 0xa7bd, 0xa7be, 0xcc59, 0xa97e, 0xa9a1, 0xcc5a, 0xa97d, 0xabce, + 0xce78, 0xabcd, 0xabcb, 0xabcc, 0xae6a, 0xae68, 0xd16b, 0xae69, + 0xd16a, 0xae5e, 0xd4f3, 0xb150, 0xb151, 0xb14f, 0xb9f0, 0xe1a2, + 0xbc68, 0xbc69, 0xe561, 0xc0ab, 0xefc2, 0xefc3, 0xc4dd, 0xf8a8, + 0xc94b, 0xa4d9, 0xa473, 0xc977, 0xc976, 0xa67a, 0xc9d7, 0xc9d8, + 0xc9d6, 0xc9d9, 0xcac7, 0xcac2, 0xcac4, 0xcac6, 0xcac3, 0xa7c4, + 0xcac0, 0xcac1, 0xa7c1, 0xa7c2, 0xcac5, 0xcac8, 0xa7c3, 0xcac9, + 0xcc68, 0xcc62, 0xcc5d, 0xa9a3, 0xcc65, 0xcc63, 0xcc5c, 0xcc69, + 0xcc6c, 0xcc67, 0xcc60, 0xa9a5, 0xcc66, 0xa9a6, 0xcc61, 0xcc64, + 0xcc5b, 0xcc5f, 0xcc6b, 0xa9a7, 0xa9a8, 0xcc5e, 0xcc6a, 0xa9a2, + 0xa9a4, 0xceab, 0xcea4, 0xceaa, 0xcea3, 0xcea5, 0xce7d, 0xce7b, + 0xceac, 0xcea9, 0xce79, 0xabd0, 0xcea7, 0xcea8, 0xcea6, 0xce7c, + 0xce7a, 0xabcf, 0xcea2, 0xce7e, 0xcea1, 0xcead, 0xae6f, 0xae6e, + 0xd16c, 0xae6b, 0xd16e, 0xae70, 0xd16f, 0xae73, 0xae71, 0xd170, + 0xceae, 0xd172, 0xae6d, 0xae6c, 0xd16d, 0xd171, 0xae72, 0xb153, + 0xb152, 0xd4f5, 0xd4f9, 0xd4fb, 0xb154, 0xd4fe, 0xb158, 0xd541, + 0xb15a, 0xb156, 0xb15e, 0xb15b, 0xd4f7, 0xb155, 0xd4f6, 0xd4f4, + 0xd543, 0xd4f8, 0xb157, 0xd542, 0xb15c, 0xd4fd, 0xd4fc, 0xb15d, + 0xd4fa, 0xb159, 0xd544, 0xd540, 0xd8e7, 0xd8ee, 0xd8e3, 0xb451, + 0xd8df, 0xd8ef, 0xd8d9, 0xd8ec, 0xd8ea, 0xd8e4, 0xd8ed, 0xd8e6, + 0xd8de, 0xd8f0, 0xd8dc, 0xd8e9, 0xd8da, 0xd8f1, 0xb452, 0xd8eb, + 0xdd4f, 0xd8dd, 0xb44f, 0xd8e1, 0xb450, 0xd8e0, 0xd8e5, 0xd8e2, + 0xd8e8, 0xdd53, 0xdd56, 0xdd4e, 0xdd50, 0xdd55, 0xdd54, 0xb743, + 0xd8db, 0xdd52, 0xb744, 0xdd4d, 0xdd51, 0xe1a9, 0xe1b0, 0xe1a7, + 0xe1ae, 0xe1a5, 0xe1ad, 0xe1b1, 0xe1a4, 0xe1a8, 0xe1a3, 0xb9f1, + 0xe1a6, 0xb9f2, 0xe1ac, 0xe1ab, 0xe1aa, 0xe1af, 0xe565, 0xe567, + 0xbc6b, 0xe568, 0xe563, 0xe562, 0xe56c, 0xe56a, 0xbc6a, 0xe56d, + 0xe564, 0xe569, 0xe56b, 0xe566, 0xe961, 0xe966, 0xe960, 0xe965, + 0xe95e, 0xe968, 0xe964, 0xe969, 0xe963, 0xe95f, 0xe967, 0xe96a, + 0xe962, 0xecda, 0xc0af, 0xc0ad, 0xc0ac, 0xc0ae, 0xefc4, 0xf172, + 0xf1fd, 0xf444, 0xf445, 0xc460, 0xf5c9, 0xc4de, 0xf5ca, 0xf6de, + 0xc572, 0xc571, 0xf6dd, 0xc5c9, 0xf7d6, 0xa474, 0xa67b, 0xc9da, + 0xcaca, 0xa8b5, 0xb15f, 0xa475, 0xa5aa, 0xa5a9, 0xa5a8, 0xa7c5, + 0xae74, 0xdd57, 0xa476, 0xa477, 0xa478, 0xa4da, 0xabd1, 0xceaf, + 0xb453, 0xa479, 0xc95d, 0xa5ab, 0xa5ac, 0xc978, 0xa67c, 0xcacb, + 0xa7c6, 0xcacc, 0xa9ae, 0xcc6e, 0xa9ac, 0xa9ab, 0xcc6d, 0xa9a9, + 0xcc6f, 0xa9aa, 0xa9ad, 0xabd2, 0xabd4, 0xceb3, 0xceb0, 0xceb1, + 0xceb2, 0xceb4, 0xabd3, 0xd174, 0xd173, 0xae76, 0xae75, 0xb162, + 0xd546, 0xb161, 0xb163, 0xb160, 0xb455, 0xd545, 0xb456, 0xd8f3, + 0xb457, 0xd8f2, 0xb454, 0xdd5a, 0xdd5c, 0xb745, 0xdd5b, 0xdd59, + 0xdd58, 0xe1b4, 0xb9f7, 0xb9f5, 0xb9f6, 0xe1b2, 0xe1b3, 0xb9f3, + 0xe571, 0xe56f, 0xbc6d, 0xe570, 0xbc6e, 0xbc6c, 0xb9f4, 0xe96d, + 0xe96b, 0xe96c, 0xe56e, 0xecdc, 0xc0b0, 0xecdb, 0xefc5, 0xefc6, + 0xe96e, 0xf1fe, 0xa47a, 0xa5ad, 0xa67e, 0xc9db, 0xa67d, 0xa9af, + 0xb746, 0xa4db, 0xa5ae, 0xabd5, 0xb458, 0xc979, 0xc97a, 0xc9dc, + 0xa7c8, 0xcad0, 0xcace, 0xa7c9, 0xcacd, 0xcacf, 0xcad1, 0xa7c7, + 0xa9b3, 0xa9b4, 0xa9b1, 0xa9b0, 0xceb8, 0xa9b2, 0xabd6, 0xceb7, + 0xceb9, 0xceb6, 0xceba, 0xabd7, 0xae79, 0xd175, 0xd177, 0xae77, + 0xd178, 0xae78, 0xd176, 0xceb5, 0xd547, 0xd54a, 0xd54b, 0xd548, + 0xb167, 0xb166, 0xb164, 0xb165, 0xd549, 0xb168, 0xb45a, 0xb45b, + 0xb45c, 0xdd5d, 0xdd5f, 0xdd61, 0xb748, 0xb747, 0xb459, 0xdd60, + 0xdd5e, 0xe1b8, 0xe1b6, 0xe1bc, 0xb9f8, 0xe1bd, 0xe1ba, 0xb9f9, + 0xe1b7, 0xe1b5, 0xe1bb, 0xbc70, 0xe573, 0xe1b9, 0xbc72, 0xe574, + 0xbc71, 0xbc74, 0xe575, 0xbc6f, 0xbc73, 0xe973, 0xe971, 0xe970, + 0xe972, 0xe96f, 0xc366, 0xf446, 0xf447, 0xf5cb, 0xf6df, 0xc655, + 0xa9b5, 0xa7ca, 0xabd8, 0xa47b, 0xa4dc, 0xa5af, 0xc9dd, 0xa7cb, + 0xcad2, 0xcebb, 0xabd9, 0xb9fa, 0xa47c, 0xa6a1, 0xb749, 0xa47d, + 0xa4dd, 0xa4de, 0xa5b1, 0xa5b0, 0xc9de, 0xa6a2, 0xcad3, 0xa7cc, + 0xcc71, 0xcc72, 0xcc73, 0xa9b6, 0xa9b7, 0xcc70, 0xa9b8, 0xabda, + 0xcebc, 0xd17a, 0xae7a, 0xd179, 0xb169, 0xd54c, 0xb16a, 0xd54d, + 0xb45d, 0xdd62, 0xe1bf, 0xe1be, 0xb9fb, 0xbc75, 0xe576, 0xbeca, + 0xe974, 0xc0b1, 0xc573, 0xf7d8, 0xcc74, 0xcebd, 0xb16b, 0xd8f4, + 0xb74a, 0xc255, 0xa7ce, 0xa7cd, 0xabdb, 0xd17b, 0xb16d, 0xb343, + 0xb16e, 0xb16c, 0xb45e, 0xe1c0, 0xb9fc, 0xbc76, 0xc94c, 0xc9df, + 0xcad5, 0xa7cf, 0xcad4, 0xa7d0, 0xa9bc, 0xcc77, 0xcc76, 0xa9bb, + 0xa9b9, 0xa9ba, 0xcc75, 0xabdd, 0xcebe, 0xabe0, 0xabdc, 0xabe2, + 0xabde, 0xabdf, 0xabe1, 0xae7d, 0xae7c, 0xae7b, 0xd54f, 0xb16f, + 0xb172, 0xb170, 0xd54e, 0xb175, 0xb171, 0xd550, 0xb174, 0xb173, + 0xd8f6, 0xd8f5, 0xb461, 0xb45f, 0xb460, 0xd8f7, 0xb74b, 0xdd64, + 0xb74c, 0xdd63, 0xe577, 0xbc78, 0xe1c1, 0xbc77, 0xb9fd, 0xecde, + 0xe975, 0xc0b2, 0xecdd, 0xf240, 0xf448, 0xf449, 0xa4df, 0xa5b2, + 0xc97b, 0xa7d2, 0xa7d4, 0xc9e2, 0xcad8, 0xcad7, 0xcad6, 0xc9e1, + 0xc9e0, 0xa6a4, 0xa7d3, 0xa7d1, 0xa6a3, 0xa9bd, 0xcc78, 0xa9be, + 0xcadd, 0xcadf, 0xcade, 0xcc79, 0xcada, 0xa7d8, 0xa7d6, 0xcad9, + 0xcadb, 0xcae1, 0xa7d5, 0xcadc, 0xcae5, 0xa9c0, 0xcae2, 0xa7d7, + 0xcae0, 0xcae3, 0xa9bf, 0xa9c1, 0xcae4, 0xccaf, 0xcca2, 0xcc7e, + 0xccae, 0xcca9, 0xabe7, 0xa9c2, 0xccaa, 0xccad, 0xabe3, 0xccac, + 0xa9c3, 0xa9c8, 0xa9c6, 0xcca3, 0xcc7c, 0xcca5, 0xa9cd, 0xccb0, + 0xabe4, 0xcca6, 0xabe5, 0xa9c9, 0xcca8, 0xcecd, 0xabe6, 0xcc7b, + 0xa9ca, 0xabe8, 0xa9cb, 0xa9c7, 0xa9cc, 0xcca7, 0xcc7a, 0xccab, + 0xa9c4, 0xcc7d, 0xcca4, 0xcca1, 0xa9c5, 0xcebf, 0xcec0, 0xceca, + 0xd1a1, 0xcecb, 0xabee, 0xcece, 0xcec4, 0xabed, 0xcec6, 0xcec7, + 0xcec9, 0xabe9, 0xaea3, 0xcec5, 0xcec1, 0xaea4, 0xcecf, 0xae7e, + 0xd17d, 0xcec8, 0xd17c, 0xcec3, 0xcecc, 0xabec, 0xaea1, 0xabf2, + 0xaea2, 0xced0, 0xd17e, 0xabeb, 0xaea6, 0xabf1, 0xabf0, 0xabef, + 0xaea5, 0xced1, 0xaea7, 0xabea, 0xcec2, 0xb176, 0xd1a4, 0xd1a6, + 0xd1a8, 0xaea8, 0xaeae, 0xd553, 0xd1ac, 0xd1a3, 0xb178, 0xd551, + 0xaead, 0xaeab, 0xd1ae, 0xd552, 0xd1a5, 0xaeac, 0xd1a9, 0xaeaf, + 0xd1ab, 0xaeaa, 0xd1aa, 0xd1ad, 0xd1a7, 0xaea9, 0xb179, 0xd1a2, + 0xb177, 0xb17a, 0xd555, 0xd55e, 0xb464, 0xb17c, 0xb1a3, 0xb465, + 0xd560, 0xb1aa, 0xd8f9, 0xd556, 0xb1a2, 0xb1a5, 0xb17e, 0xd554, + 0xd562, 0xd565, 0xd949, 0xd563, 0xd8fd, 0xb1a1, 0xb1a8, 0xb1ac, + 0xd55d, 0xd8f8, 0xd561, 0xb17b, 0xd8fa, 0xd564, 0xd8fc, 0xd559, + 0xb462, 0xd557, 0xd558, 0xb1a7, 0xb1a6, 0xd55b, 0xb1ab, 0xd55f, + 0xb1a4, 0xd55c, 0xb1a9, 0xb466, 0xb463, 0xd8fb, 0xd55a, 0xb17d, + 0xb46b, 0xb46f, 0xd940, 0xb751, 0xb46d, 0xd944, 0xb471, 0xdd65, + 0xd946, 0xb753, 0xb469, 0xb46c, 0xd947, 0xd948, 0xd94e, 0xb473, + 0xb754, 0xd94a, 0xd94f, 0xd943, 0xb75e, 0xb755, 0xb472, 0xd941, + 0xd950, 0xb75d, 0xb470, 0xb74e, 0xd94d, 0xb474, 0xd945, 0xd8fe, + 0xb46a, 0xd942, 0xd94b, 0xb74d, 0xb752, 0xb467, 0xd94c, 0xb750, + 0xb468, 0xb75c, 0xe1c3, 0xdd70, 0xdd68, 0xe1c2, 0xdd6c, 0xdd6e, + 0xdd6b, 0xb75b, 0xdd6a, 0xb75f, 0xe1d2, 0xb75a, 0xba40, 0xdd71, + 0xe1c4, 0xb758, 0xdd69, 0xdd6d, 0xb9fe, 0xb74f, 0xdd66, 0xdd67, + 0xba41, 0xb757, 0xb759, 0xb756, 0xdd6f, 0xe1c8, 0xe1c9, 0xe1ce, + 0xbc7d, 0xe1d5, 0xba47, 0xba46, 0xe1d0, 0xbc7c, 0xe1c5, 0xba45, + 0xe1d4, 0xba43, 0xba44, 0xe1d1, 0xe5aa, 0xbc7a, 0xb46e, 0xe1d3, + 0xbca3, 0xe1cb, 0xbc7b, 0xbca2, 0xe1c6, 0xe1ca, 0xe1c7, 0xe1cd, + 0xba48, 0xbc79, 0xba42, 0xe57a, 0xe1cf, 0xbca1, 0xbca4, 0xe1cc, + 0xbc7e, 0xe579, 0xe57e, 0xbece, 0xe578, 0xe9a3, 0xe5a9, 0xbca8, + 0xbca6, 0xbecc, 0xe5a6, 0xe5a2, 0xbcac, 0xe978, 0xbcaa, 0xe5a1, + 0xe976, 0xe5a5, 0xe5a8, 0xe57d, 0xbcab, 0xbca5, 0xe977, 0xbecd, + 0xe5a7, 0xbca7, 0xbca9, 0xe5a4, 0xbcad, 0xe5a3, 0xe57c, 0xe57b, + 0xbecb, 0xe5ab, 0xe97a, 0xece0, 0xbed0, 0xe9a2, 0xe97e, 0xece1, + 0xbed1, 0xe9a1, 0xe97c, 0xc0b4, 0xecdf, 0xe979, 0xe97b, 0xc0b5, + 0xbed3, 0xc0b3, 0xbed2, 0xc0b7, 0xe97d, 0xbecf, 0xefcf, 0xefc7, + 0xece7, 0xefc8, 0xece3, 0xc256, 0xece5, 0xece4, 0xc0b6, 0xece2, + 0xece6, 0xefd0, 0xefcc, 0xefce, 0xefc9, 0xefca, 0xefcd, 0xefcb, + 0xc367, 0xc36a, 0xc369, 0xc368, 0xc461, 0xf44a, 0xc462, 0xf241, + 0xc4df, 0xf5cc, 0xc4e0, 0xc574, 0xc5ca, 0xf7d9, 0xf7da, 0xf7db, + 0xf9ba, 0xa4e0, 0xc97c, 0xa5b3, 0xa6a6, 0xa6a7, 0xa6a5, 0xa6a8, + 0xa7da, 0xa7d9, 0xccb1, 0xa9cf, 0xa9ce, 0xd1af, 0xb1ad, 0xb1ae, + 0xb475, 0xdd72, 0xb760, 0xb761, 0xdd74, 0xdd76, 0xdd75, 0xe1d7, + 0xe1d6, 0xba49, 0xe1d8, 0xe5ac, 0xbcae, 0xbed4, 0xc0b8, 0xc257, + 0xc0b9, 0xa4e1, 0xcae6, 0xccb2, 0xa9d1, 0xa9d0, 0xa9d2, 0xabf3, + 0xced2, 0xced3, 0xd1b0, 0xaeb0, 0xb1af, 0xb476, 0xd951, 0xa4e2, + 0xa47e, 0xa4e3, 0xc97d, 0xa5b7, 0xa5b6, 0xa5b4, 0xa5b5, 0xa6ab, + 0xc9e9, 0xc9eb, 0xa6aa, 0xc9e3, 0xc9e4, 0xc9ea, 0xc9e6, 0xc9e8, + 0xa6a9, 0xc9e5, 0xc9ec, 0xc9e7, 0xa7e1, 0xa7ea, 0xa7e8, 0xcaf0, + 0xcaed, 0xcaf5, 0xa7e6, 0xcaf6, 0xa7df, 0xcaf3, 0xa7e5, 0xcaef, + 0xcaee, 0xa7e3, 0xcaf4, 0xa7e4, 0xa9d3, 0xa7de, 0xcaf1, 0xcae7, + 0xa7db, 0xa7ee, 0xcaec, 0xcaf2, 0xa7e0, 0xa7e2, 0xcae8, 0xcae9, + 0xcaea, 0xa7ed, 0xa7e7, 0xa7ec, 0xcaeb, 0xa7eb, 0xa7dd, 0xa7dc, + 0xa7e9, 0xa9e1, 0xccbe, 0xccb7, 0xa9dc, 0xa9ef, 0xccb3, 0xccba, + 0xccbc, 0xccbf, 0xa9ea, 0xccbb, 0xccb4, 0xa9e8, 0xccb8, 0xccc0, + 0xa9d9, 0xccbd, 0xa9e3, 0xa9e2, 0xccb6, 0xa9d7, 0xa9d8, 0xa9d6, + 0xa9ee, 0xa9e6, 0xa9e0, 0xa9d4, 0xccb9, 0xa9df, 0xa9d5, 0xa9e7, + 0xa9f0, 0xced4, 0xa9e4, 0xccb5, 0xa9da, 0xa9dd, 0xa9de, 0xa9ec, + 0xa9ed, 0xa9eb, 0xa9e5, 0xa9e9, 0xa9db, 0xabf4, 0xceda, 0xac41, + 0xabf8, 0xabfa, 0xac40, 0xcee6, 0xabfd, 0xd1b1, 0xaeb1, 0xac43, + 0xced7, 0xcedf, 0xabfe, 0xcede, 0xcedb, 0xcee3, 0xcee5, 0xabf7, + 0xabfb, 0xac42, 0xaeb3, 0xcee0, 0xabf9, 0xac45, 0xced9, 0xabfc, + 0xaeb2, 0xabf6, 0xced6, 0xcedd, 0xced5, 0xced8, 0xcedc, 0xd1b2, + 0xac44, 0xcee1, 0xcee2, 0xcee4, 0xabf5, 0xaec1, 0xd1be, 0xaebf, + 0xaec0, 0xd1b4, 0xd1c4, 0xaeb6, 0xd566, 0xd1c6, 0xd1c0, 0xd1b7, + 0xd1c9, 0xd1ba, 0xaebc, 0xd57d, 0xd1bd, 0xaebe, 0xaeb5, 0xd1cb, + 0xd1bf, 0xaeb8, 0xd1b8, 0xd1b5, 0xd1b6, 0xaeb9, 0xd1c5, 0xd1cc, + 0xaebb, 0xd1bc, 0xd1bb, 0xaec3, 0xaec2, 0xaeb4, 0xaeba, 0xaebd, + 0xd1c8, 0xd1c2, 0xaeb7, 0xd1b3, 0xd1ca, 0xd1c1, 0xd1c3, 0xd1c7, + 0xd567, 0xb1b7, 0xb1cb, 0xb1ca, 0xb1bf, 0xd579, 0xd575, 0xd572, + 0xd5a6, 0xb1ba, 0xb1b2, 0xd577, 0xb4a8, 0xb1b6, 0xd5a1, 0xb1cc, + 0xb1c9, 0xd57b, 0xd56a, 0xb1c8, 0xd5a3, 0xd569, 0xb1bd, 0xb1c1, + 0xd5a2, 0xd573, 0xb1c2, 0xb1bc, 0xd568, 0xb478, 0xd5a5, 0xd571, + 0xb1c7, 0xd574, 0xd5a4, 0xb1c6, 0xd952, 0xb1b3, 0xd56f, 0xb1b8, + 0xb1c3, 0xb1be, 0xd578, 0xd56e, 0xd56c, 0xd57e, 0xb1b0, 0xb1c4, + 0xb1b4, 0xb477, 0xd57c, 0xb1b5, 0xb1b1, 0xb1c0, 0xb1bb, 0xb1b9, + 0xd570, 0xb1c5, 0xd56d, 0xd57a, 0xd576, 0xd954, 0xd953, 0xd56b, + 0xd964, 0xb47a, 0xd96a, 0xd959, 0xd967, 0xdd77, 0xb47d, 0xd96b, + 0xd96e, 0xb47c, 0xd95c, 0xd96d, 0xd96c, 0xb47e, 0xd955, 0xb479, + 0xb4a3, 0xb4a1, 0xd969, 0xd95f, 0xb4a5, 0xd970, 0xd968, 0xd971, + 0xb4ad, 0xb4ab, 0xd966, 0xd965, 0xd963, 0xd95d, 0xb4a4, 0xb4a2, + 0xd1b9, 0xd956, 0xddb7, 0xd957, 0xb47b, 0xb4aa, 0xdd79, 0xb4a6, + 0xb4a7, 0xd958, 0xd96f, 0xdd78, 0xd960, 0xd95b, 0xb4a9, 0xd961, + 0xd95e, 0xb4ae, 0xb770, 0xdd7c, 0xddb1, 0xddb6, 0xddaa, 0xb76c, + 0xddbb, 0xb769, 0xdd7a, 0xdd7b, 0xb762, 0xb76b, 0xdda4, 0xb76e, + 0xb76f, 0xdda5, 0xddb2, 0xddb8, 0xb76a, 0xb764, 0xdda3, 0xdd7d, + 0xddba, 0xdda8, 0xdda9, 0xdd7e, 0xddb4, 0xddab, 0xddb5, 0xddad, + 0xb765, 0xe1d9, 0xb768, 0xb766, 0xddb9, 0xddb0, 0xddac, 0xdda1, + 0xba53, 0xddaf, 0xb76d, 0xdda7, 0xdda6, 0xb767, 0xb763, 0xe1ee, + 0xddb3, 0xddae, 0xdda2, 0xe1e9, 0xe1da, 0xe1e5, 0xe1ec, 0xba51, + 0xb4ac, 0xe1ea, 0xba4c, 0xba4b, 0xe1f1, 0xe1db, 0xe1e8, 0xe1dc, + 0xe1e7, 0xba4f, 0xe1eb, 0xd962, 0xe1f2, 0xe1e3, 0xba52, 0xe5ba, + 0xbcaf, 0xe1f0, 0xe1ef, 0xba54, 0xe5ad, 0xbcb0, 0xe5ae, 0xe1df, + 0xe1e0, 0xe1dd, 0xe1e2, 0xe1de, 0xe1f3, 0xba4e, 0xbcb1, 0xba50, + 0xba55, 0xe1e1, 0xe1ed, 0xe1e6, 0xe5b1, 0xba4a, 0xbcb4, 0xe9aa, + 0xe5b6, 0xe5b5, 0xe5b7, 0xe5b4, 0xbcb5, 0xbcbb, 0xbcb8, 0xbcb9, + 0xe5af, 0xe5b2, 0xe5bc, 0xbcc1, 0xbcbf, 0xe5b3, 0xd95a, 0xbcb2, + 0xe5b9, 0xe5b0, 0xbcc2, 0xe5b8, 0xba4d, 0xbcb7, 0xe1e4, 0xbcba, + 0xbcbe, 0xbcc0, 0xbcbd, 0xbcbc, 0xbcb6, 0xe5bb, 0xbcb3, 0xbcc3, + 0xbed8, 0xbed9, 0xe9a9, 0xbee2, 0xbedf, 0xbed6, 0xbedd, 0xe9ab, + 0xbedb, 0xbed5, 0xbedc, 0xe9a8, 0xc0bb, 0xbed7, 0xbede, 0xc0ba, + 0xe9a7, 0xe9a6, 0xbee0, 0xbee1, 0xe9a5, 0xe9a4, 0xc0bc, 0xe9ae, + 0xbeda, 0xe9ac, 0xc0bd, 0xc0c2, 0xecea, 0xecec, 0xc0bf, 0xeced, + 0xece9, 0xeceb, 0xc0c0, 0xc0c3, 0xece8, 0xc0be, 0xc0c1, 0xc259, + 0xe9ad, 0xc258, 0xc25e, 0xefd4, 0xc25c, 0xc25d, 0xefd7, 0xefd3, + 0xc25a, 0xefd1, 0xc36b, 0xefd5, 0xefd6, 0xefd2, 0xc25b, 0xf242, + 0xf245, 0xf246, 0xf244, 0xf247, 0xc36c, 0xf243, 0xf44e, 0xc464, + 0xf44d, 0xf44c, 0xf44b, 0xc463, 0xc465, 0xf5cd, 0xc4e2, 0xc4e1, + 0xf6e1, 0xf6e0, 0xf6e3, 0xc5cb, 0xc575, 0xf7dd, 0xf6e2, 0xf7dc, + 0xc5cd, 0xc5cc, 0xc5f3, 0xf8a9, 0xf8ef, 0xa4e4, 0xd972, 0xe9af, + 0xa6ac, 0xcaf7, 0xa7f1, 0xa7ef, 0xa7f0, 0xccc1, 0xa9f1, 0xac46, + 0xcee7, 0xcee8, 0xac47, 0xd1ce, 0xaec4, 0xaec5, 0xd1cd, 0xb1d3, + 0xb1cf, 0xd5a7, 0xb1d6, 0xb1d5, 0xb1ce, 0xb1d1, 0xb1d4, 0xb1d0, + 0xd976, 0xb1cd, 0xb4af, 0xb4b1, 0xb4b2, 0xd975, 0xd978, 0xb4b0, + 0xd973, 0xd977, 0xd974, 0xb771, 0xddbc, 0xba56, 0xe1f4, 0xbee3, + 0xbcc4, 0xe5bd, 0xbcc5, 0xbcc6, 0xe5bf, 0xe5be, 0xe5c0, 0xe9b1, + 0xe9b0, 0xecef, 0xecee, 0xc0c4, 0xc0c5, 0xf248, 0xa4e5, 0xd979, + 0xb4b4, 0xb4b3, 0xddbd, 0xefd8, 0xc4e3, 0xf7de, 0xa4e6, 0xaec6, + 0xb1d8, 0xb1d7, 0xd97a, 0xd97b, 0xb772, 0xe1f5, 0xba57, 0xe9b2, + 0xa4e7, 0xa5b8, 0xa9f2, 0xccc2, 0xcee9, 0xac48, 0xb1d9, 0xd97c, + 0xb4b5, 0xb773, 0xe5c1, 0xe5c2, 0xecf0, 0xc25f, 0xf8f0, 0xa4e8, + 0xccc3, 0xa9f3, 0xac49, 0xceea, 0xaec7, 0xd1d2, 0xd1d0, 0xd1d1, + 0xaec8, 0xd1cf, 0xb1db, 0xb1dc, 0xd5a8, 0xb1dd, 0xb1da, 0xd97d, + 0xd97e, 0xddbe, 0xba59, 0xba58, 0xecf1, 0xefd9, 0xf24a, 0xf249, + 0xf44f, 0xc95e, 0xac4a, 0xa4e9, 0xa5b9, 0xa6ae, 0xa6ad, 0xa6af, + 0xa6b0, 0xc9ee, 0xc9ed, 0xcaf8, 0xa7f2, 0xcafb, 0xcafa, 0xcaf9, + 0xcafc, 0xa9f4, 0xccc9, 0xccc5, 0xccce, 0xa9fb, 0xa9f9, 0xccca, + 0xccc6, 0xcccd, 0xa9f8, 0xaa40, 0xccc8, 0xccc4, 0xa9fe, 0xcccb, + 0xa9f7, 0xcccc, 0xa9fa, 0xa9fc, 0xccd0, 0xcccf, 0xccc7, 0xa9f6, + 0xa9f5, 0xa9fd, 0xceef, 0xcef5, 0xac50, 0xac4d, 0xceec, 0xcef1, + 0xac53, 0xac4b, 0xcef0, 0xac4e, 0xac51, 0xcef3, 0xac4c, 0xcef8, + 0xac4f, 0xac52, 0xceed, 0xcef2, 0xcef6, 0xceee, 0xceeb, 0xcef7, + 0xcef4, 0xaed0, 0xaec9, 0xaecc, 0xaecf, 0xd1d5, 0xaeca, 0xd1d3, + 0xaece, 0xaecb, 0xd1d6, 0xaecd, 0xd5ac, 0xb1df, 0xd5ab, 0xd5ad, + 0xb1de, 0xb1e3, 0xd1d4, 0xd5aa, 0xd5ae, 0xb1e0, 0xd5a9, 0xb1e2, + 0xb1e1, 0xd9a7, 0xd9a2, 0xb4b6, 0xb4ba, 0xb4b7, 0xd9a5, 0xd9a8, + 0xb4b8, 0xb4b9, 0xb4be, 0xddc7, 0xd9a6, 0xb4bc, 0xd9a3, 0xd9a1, + 0xb4bd, 0xd9a4, 0xb779, 0xddbf, 0xb776, 0xb777, 0xb775, 0xddc4, + 0xddc3, 0xddc0, 0xb77b, 0xddc2, 0xb4bb, 0xddc6, 0xddc1, 0xb778, + 0xb774, 0xb77a, 0xddc5, 0xba5c, 0xe1f8, 0xe1f7, 0xe1f6, 0xba5a, + 0xba5b, 0xe5c5, 0xe5c8, 0xbcc8, 0xbcc7, 0xe5c9, 0xe5c4, 0xbcca, + 0xe5c6, 0xbcc9, 0xe5c3, 0xe5c7, 0xbee9, 0xbee6, 0xe9bb, 0xe9ba, + 0xe9b9, 0xe9b4, 0xe9b5, 0xbee7, 0xbee4, 0xbee8, 0xe9b3, 0xbee5, + 0xe9b6, 0xe9b7, 0xe9bc, 0xe9b8, 0xecf2, 0xc0c7, 0xefdc, 0xc0c6, + 0xefda, 0xefdb, 0xc260, 0xc36e, 0xf24b, 0xc36d, 0xf451, 0xf452, + 0xc466, 0xf450, 0xc4e4, 0xf7df, 0xc5ce, 0xf8aa, 0xf8ab, 0xa4ea, + 0xa6b1, 0xa6b2, 0xa7f3, 0xccd1, 0xac54, 0xaed1, 0xb1e4, 0xb0d2, + 0xb4bf, 0xb4c0, 0xb3cc, 0xd9a9, 0xb77c, 0xe1fa, 0xe1f9, 0xa4eb, + 0xa6b3, 0xccd2, 0xaa42, 0xaa41, 0xcef9, 0xcefa, 0xd1d7, 0xd1d8, + 0xaed2, 0xaed3, 0xaed4, 0xd5af, 0xb1e6, 0xb4c2, 0xb4c1, 0xddc8, + 0xdf7a, 0xe1fb, 0xe9bd, 0xc261, 0xc467, 0xa4ec, 0xa5bc, 0xa5bd, + 0xa5bb, 0xa5be, 0xa5ba, 0xa6b6, 0xc9f6, 0xa6b5, 0xa6b7, 0xc9f1, + 0xc9f0, 0xc9f3, 0xc9f2, 0xc9f5, 0xa6b4, 0xc9ef, 0xc9f4, 0xcafd, + 0xa7fd, 0xcafe, 0xcb43, 0xa7fc, 0xcb47, 0xcb42, 0xcb45, 0xa7f5, + 0xa7f6, 0xa7f7, 0xa7f8, 0xa840, 0xcb41, 0xa7fa, 0xa841, 0xcb40, + 0xcb46, 0xa7f9, 0xcb44, 0xa7fb, 0xa7f4, 0xa7fe, 0xaa57, 0xccd4, + 0xaa43, 0xaa4d, 0xaa4e, 0xaa46, 0xaa58, 0xaa48, 0xccdc, 0xaa53, + 0xccd7, 0xaa49, 0xcce6, 0xcce7, 0xccdf, 0xccd8, 0xaa56, 0xcce4, + 0xaa51, 0xaa4f, 0xcce5, 0xcce3, 0xccdb, 0xccd3, 0xccda, 0xaa4a, + 0xaa50, 0xaa44, 0xccde, 0xccdd, 0xccd5, 0xaa52, 0xcce1, 0xccd6, + 0xaa55, 0xcce8, 0xaa45, 0xaa4c, 0xccd9, 0xcce2, 0xaa54, 0xaa47, + 0xaa4b, 0xcce0, 0xcf5b, 0xac5c, 0xac69, 0xcf56, 0xcf4c, 0xac62, + 0xcf4a, 0xac5b, 0xcf45, 0xac65, 0xcf52, 0xcefe, 0xcf41, 0xcf44, + 0xcefb, 0xcf51, 0xcf61, 0xac60, 0xcf46, 0xcf58, 0xcefd, 0xcf5f, + 0xcf60, 0xcf63, 0xcf5a, 0xcf4b, 0xcf53, 0xac66, 0xac59, 0xac61, + 0xac6d, 0xac56, 0xac58, 0xcf43, 0xac6a, 0xac63, 0xcf5d, 0xcf40, + 0xac6c, 0xac67, 0xcf49, 0xac6b, 0xcf50, 0xcf48, 0xac64, 0xcf5c, + 0xcf54, 0xac5e, 0xcf62, 0xcf47, 0xac5a, 0xcf59, 0xcf4f, 0xac5f, + 0xcf55, 0xac57, 0xcefc, 0xac68, 0xaee3, 0xac5d, 0xcf4e, 0xcf4d, + 0xcf42, 0xcf5e, 0xcf57, 0xac55, 0xd1ec, 0xaeea, 0xd1ed, 0xd1e1, + 0xaedf, 0xaeeb, 0xd1da, 0xd1e3, 0xd1eb, 0xd1d9, 0xd1f4, 0xaed5, + 0xd1f3, 0xd1ee, 0xd1ef, 0xaedd, 0xaee8, 0xd1e5, 0xd1e6, 0xd1f0, + 0xd1e7, 0xd1e2, 0xd1dc, 0xd1dd, 0xd1ea, 0xd1e4, 0xaed6, 0xaeda, + 0xd1f2, 0xd1de, 0xaee6, 0xaee2, 0xaee5, 0xaeec, 0xaedb, 0xaee7, + 0xd1e9, 0xaee9, 0xaed8, 0xaed7, 0xd1db, 0xd1df, 0xaee0, 0xd1f1, + 0xd1e8, 0xd1e0, 0xaee4, 0xaee1, 0xaed9, 0xaedc, 0xd5c4, 0xd5b4, + 0xd5b5, 0xd5b9, 0xd5c8, 0xd5c5, 0xd5be, 0xd5bd, 0xb1ed, 0xd5c1, + 0xd5d0, 0xd5b0, 0xd5d1, 0xd5c3, 0xd5d5, 0xd5c9, 0xb1ec, 0xd5c7, + 0xb1e7, 0xb1fc, 0xb1f2, 0xb1f6, 0xb1f5, 0xd5b1, 0xd5ce, 0xd5d4, + 0xd5cc, 0xd5d3, 0xd5c0, 0xd5b2, 0xd5d2, 0xd5c2, 0xb1ea, 0xb1f7, + 0xd5cb, 0xb1f0, 0xd5ca, 0xd5b3, 0xb1f8, 0xb1fa, 0xd5cd, 0xb1fb, + 0xb1e9, 0xd5ba, 0xd5cf, 0xb1ef, 0xb1f9, 0xd5bc, 0xd5c6, 0xd5b7, + 0xd5bb, 0xb1f4, 0xd5b6, 0xb1e8, 0xb1f1, 0xb1ee, 0xd5bf, 0xaede, + 0xd9c0, 0xb1eb, 0xb1f3, 0xd9c3, 0xd9d9, 0xd9ce, 0xb4d6, 0xb4d1, + 0xd9bd, 0xb4d2, 0xd9cd, 0xd9c6, 0xd9d3, 0xb4ce, 0xd9ab, 0xd9d5, + 0xb4c4, 0xd9b3, 0xb4c7, 0xb4c6, 0xb4d7, 0xd9ad, 0xd9cf, 0xd9d0, + 0xb4c9, 0xb4c5, 0xd9bb, 0xb4d0, 0xd9b6, 0xd9d1, 0xb4cc, 0xd9c9, + 0xd9d6, 0xd9b0, 0xd9b5, 0xd9af, 0xb4cb, 0xd9c2, 0xddde, 0xd9b1, + 0xb4cf, 0xd9ba, 0xd9d2, 0xb4ca, 0xd9b7, 0xd9b4, 0xd9c5, 0xb4cd, + 0xb4c3, 0xb4d9, 0xd9c8, 0xd9c7, 0xd9ac, 0xb4c8, 0xd9d4, 0xd9bc, + 0xd9be, 0xd9cb, 0xd9ca, 0xd9aa, 0xb4d3, 0xb4d5, 0xd9b2, 0xd9b9, + 0xd9c1, 0xb4d4, 0xd9b8, 0xd9c4, 0xd9d7, 0xd9cc, 0xd9d8, 0xd9ae, + 0xddf2, 0xb7a6, 0xddf0, 0xdddb, 0xdde0, 0xddd9, 0xddec, 0xddcb, + 0xddd2, 0xddea, 0xddf4, 0xdddc, 0xddcf, 0xdde2, 0xdde7, 0xddd3, + 0xdde4, 0xddd0, 0xddd7, 0xddd8, 0xb7a8, 0xddeb, 0xdde9, 0xddcc, + 0xddee, 0xddef, 0xddf1, 0xb7ac, 0xb7a4, 0xd5b8, 0xddd4, 0xdde6, + 0xddd5, 0xb7a1, 0xb7b1, 0xdded, 0xb7af, 0xb7ab, 0xddca, 0xb7a3, + 0xddcd, 0xb7b0, 0xdddd, 0xddc9, 0xb7a9, 0xdde1, 0xddd1, 0xb7aa, + 0xddda, 0xb77e, 0xb4d8, 0xdde3, 0xd9bf, 0xddce, 0xdde8, 0xb7a5, + 0xdde5, 0xb7a2, 0xdddf, 0xb7ad, 0xddd6, 0xddf3, 0xb7a7, 0xdec6, + 0xb7ae, 0xe24a, 0xe248, 0xe25e, 0xe246, 0xe258, 0xb77d, 0xba5f, + 0xe242, 0xe25d, 0xe247, 0xe255, 0xba64, 0xba5d, 0xe25b, 0xe240, + 0xe25a, 0xba6f, 0xe251, 0xe261, 0xba6d, 0xe249, 0xba5e, 0xe24b, + 0xe259, 0xba67, 0xe244, 0xba6b, 0xba61, 0xe24d, 0xe243, 0xe1fc, + 0xe257, 0xba68, 0xe260, 0xe1fd, 0xba65, 0xe253, 0xba66, 0xe245, + 0xe250, 0xe24c, 0xe24e, 0xba60, 0xe25f, 0xba6e, 0xe24f, 0xe262, + 0xe1fe, 0xe254, 0xba63, 0xba6c, 0xba6a, 0xe241, 0xe256, 0xba69, + 0xba62, 0xe252, 0xe25c, 0xe5d5, 0xe5d1, 0xe5cd, 0xe5e1, 0xe5de, + 0xbccd, 0xe5e5, 0xe5d4, 0xbcd8, 0xe5db, 0xe5d0, 0xe5da, 0xbcd5, + 0xe5ee, 0xe5eb, 0xe5dd, 0xe5ce, 0xe5e2, 0xe5e4, 0xbcd1, 0xe5d8, + 0xe5d3, 0xe5ca, 0xbcce, 0xbcd6, 0xe5e7, 0xbcd7, 0xe5cb, 0xe5ed, + 0xe5e0, 0xe5e6, 0xbcd4, 0xe5e3, 0xe5ea, 0xbcd9, 0xbcd3, 0xe5dc, + 0xe5cf, 0xe5ef, 0xe5cc, 0xe5e8, 0xbcd0, 0xe5d6, 0xe5d7, 0xbccf, + 0xbccc, 0xe5d2, 0xbcd2, 0xbccb, 0xe5e9, 0xe5ec, 0xe5d9, 0xe9ca, + 0xe9c2, 0xe9be, 0xbef6, 0xbeeb, 0xbef0, 0xbeec, 0xe9cc, 0xe9d7, + 0xbeea, 0xe9c4, 0xe9cd, 0xe5df, 0xe9ce, 0xbef1, 0xe9dd, 0xbef5, + 0xbef8, 0xe9c0, 0xbef4, 0xe9db, 0xe9dc, 0xe9d2, 0xe9d1, 0xe9c9, + 0xe9d3, 0xe9da, 0xe9d9, 0xbeef, 0xbeed, 0xe9cb, 0xe9c8, 0xe9c5, + 0xe9d8, 0xbef7, 0xe9d6, 0xbef3, 0xbef2, 0xe9d0, 0xe9bf, 0xe9c1, + 0xe9c3, 0xe9d5, 0xe9cf, 0xbeee, 0xe9c6, 0xe9d4, 0xe9c7, 0xc0cf, + 0xed45, 0xc0c8, 0xecf5, 0xed41, 0xc0ca, 0xed48, 0xecfc, 0xecf7, + 0xed49, 0xecf3, 0xecfe, 0xc0d1, 0xed44, 0xed4a, 0xecfd, 0xc0c9, + 0xed40, 0xecf4, 0xc0d0, 0xed47, 0xecf9, 0xc0cc, 0xecfb, 0xecf8, + 0xc0d2, 0xecfa, 0xc0cb, 0xc0ce, 0xed43, 0xecf6, 0xed46, 0xed42, + 0xc263, 0xefe7, 0xc268, 0xc269, 0xc262, 0xefe6, 0xefe3, 0xefe4, + 0xc266, 0xefde, 0xefe2, 0xc265, 0xefdf, 0xc267, 0xc264, 0xefdd, + 0xefe1, 0xefe5, 0xf251, 0xf24e, 0xf257, 0xf256, 0xf254, 0xf24f, + 0xc372, 0xf250, 0xc371, 0xc0cd, 0xf253, 0xc370, 0xf258, 0xf252, + 0xf24d, 0xefe0, 0xc36f, 0xf24c, 0xf456, 0xf455, 0xf255, 0xc468, + 0xf459, 0xf45a, 0xf454, 0xf458, 0xf453, 0xf5d1, 0xf457, 0xc4e7, + 0xc4e5, 0xf5cf, 0xf5d2, 0xf5ce, 0xf5d0, 0xc4e6, 0xf6e5, 0xf6e6, + 0xc576, 0xf6e4, 0xf7e2, 0xc5cf, 0xf7e0, 0xf7e1, 0xf8ac, 0xc656, + 0xf8f3, 0xf8f1, 0xf8f2, 0xf8f4, 0xf9bb, 0xa4ed, 0xa6b8, 0xaa59, + 0xcce9, 0xcf64, 0xd1f5, 0xd1f7, 0xd1f6, 0xd1f8, 0xb1fd, 0xd5d7, + 0xd1f9, 0xd5d6, 0xd5d8, 0xd5d9, 0xd9da, 0xb4db, 0xd9db, 0xd9dd, + 0xb4dc, 0xb4da, 0xd9dc, 0xddfa, 0xddf8, 0xddf7, 0xddf6, 0xddf5, + 0xb7b2, 0xddf9, 0xba70, 0xe263, 0xe265, 0xba71, 0xe264, 0xbcdb, + 0xbcda, 0xe5f0, 0xe9df, 0xe9de, 0xe9e0, 0xbef9, 0xed4b, 0xc0d3, + 0xefe8, 0xc26a, 0xf259, 0xc577, 0xa4ee, 0xa5bf, 0xa6b9, 0xa842, + 0xaa5a, 0xaa5b, 0xac6e, 0xd1fa, 0xb7b3, 0xe6d1, 0xbefa, 0xc26b, + 0xa4ef, 0xa6ba, 0xcceb, 0xaa5c, 0xccea, 0xcf65, 0xac6f, 0xcf66, + 0xac70, 0xd1fc, 0xaeee, 0xaeed, 0xd5de, 0xd5dc, 0xd5dd, 0xd5db, + 0xd5da, 0xd9de, 0xd9e1, 0xb4de, 0xd9df, 0xb4dd, 0xd9e0, 0xddfb, + 0xe266, 0xe267, 0xe268, 0xe5f3, 0xe5f2, 0xbcdc, 0xe5f1, 0xe5f4, + 0xe9e1, 0xe9e2, 0xe9e3, 0xed4c, 0xc0d4, 0xc26c, 0xf25a, 0xc4e8, + 0xc95f, 0xac71, 0xcf67, 0xaeef, 0xb1fe, 0xb4df, 0xd9e2, 0xb7b5, + 0xb7b4, 0xe269, 0xe26a, 0xbcdd, 0xbcde, 0xe9e5, 0xe9e4, 0xefe9, + 0xf7e3, 0xa4f0, 0xc960, 0xa5c0, 0xa843, 0xcb48, 0xac72, 0xb7b6, + 0xa4f1, 0xcf68, 0xac73, 0xcf69, 0xc0d5, 0xa4f2, 0xccec, 0xcf6a, + 0xd242, 0xd241, 0xd1fe, 0xd1fd, 0xd243, 0xd240, 0xb240, 0xb241, + 0xb4e0, 0xd9e3, 0xd9e4, 0xd9e5, 0xde41, 0xde42, 0xde40, 0xddfd, + 0xddfe, 0xb7b7, 0xe26b, 0xe5f7, 0xe5f6, 0xe5f5, 0xe5f8, 0xe9e7, + 0xe9e6, 0xbefb, 0xe9e8, 0xc0d6, 0xed4d, 0xefea, 0xf25b, 0xf6e7, + 0xa4f3, 0xa5c2, 0xa5c1, 0xaa5d, 0xc961, 0xc97e, 0xa6bb, 0xc9f7, + 0xcb49, 0xcb4a, 0xaa5e, 0xcced, 0xac74, 0xcf6b, 0xcf6c, 0xaef0, + 0xaef4, 0xd244, 0xaef3, 0xaef1, 0xaef2, 0xd5df, 0xb242, 0xb4e3, + 0xb4e1, 0xb4e2, 0xd9e6, 0xba72, 0xa4f4, 0xc9a1, 0xa5c3, 0xc9a4, + 0xa5c6, 0xc9a3, 0xa5c5, 0xa5c4, 0xa844, 0xc9a2, 0xc9f8, 0xc9fc, + 0xc9fe, 0xca40, 0xa6c5, 0xa6c6, 0xc9fb, 0xa6c1, 0xc9f9, 0xc9fd, + 0xa6c2, 0xa6bd, 0xa6be, 0xa6c4, 0xc9fa, 0xa6bc, 0xa845, 0xa6bf, + 0xa6c0, 0xa6c3, 0xcb5b, 0xcb59, 0xcb4c, 0xa851, 0xcb53, 0xa84c, + 0xcb4d, 0xcb55, 0xcb52, 0xa84f, 0xcb51, 0xa856, 0xcb5a, 0xa858, + 0xa85a, 0xcb4b, 0xa84d, 0xcb5c, 0xa854, 0xa857, 0xcd45, 0xa847, + 0xa85e, 0xa855, 0xcb4e, 0xa84a, 0xa859, 0xcb56, 0xa848, 0xa849, + 0xcd43, 0xcb4f, 0xa850, 0xa85b, 0xcb5d, 0xcb50, 0xa84e, 0xa853, + 0xccee, 0xa85c, 0xcb57, 0xa852, 0xa85d, 0xa846, 0xcb54, 0xa84b, + 0xcb58, 0xcd44, 0xaa6a, 0xaa7a, 0xccf5, 0xaa71, 0xcd4b, 0xaa62, + 0xaa65, 0xcd42, 0xccf3, 0xccf7, 0xaa6d, 0xaa6f, 0xccfa, 0xaa76, + 0xaa68, 0xaa66, 0xaa67, 0xaa75, 0xcd47, 0xaa70, 0xccf9, 0xccfb, + 0xaa6e, 0xaa73, 0xccfc, 0xcd4a, 0xac75, 0xaa79, 0xaa63, 0xcd49, + 0xcd4d, 0xccf8, 0xcd4f, 0xcd40, 0xaa6c, 0xccf4, 0xaa6b, 0xaa7d, + 0xaa72, 0xccf2, 0xcf75, 0xaa78, 0xaa7c, 0xcd41, 0xcd46, 0xaa7e, + 0xaa77, 0xaa69, 0xaa5f, 0xaa64, 0xccf6, 0xaa60, 0xcd4e, 0xccf0, + 0xccef, 0xccfd, 0xccf1, 0xaa7b, 0xaef5, 0xaa74, 0xccfe, 0xaa61, + 0xaca6, 0xcd4c, 0xcf7c, 0xcfa1, 0xcfa4, 0xcf77, 0xcfa7, 0xcfaa, + 0xcfac, 0xcf74, 0xac76, 0xac7b, 0xd249, 0xacad, 0xcfa5, 0xcfad, + 0xcf7b, 0xcf73, 0xd264, 0xac7e, 0xcfa2, 0xcf78, 0xcf7a, 0xaca5, + 0xcf7d, 0xac7d, 0xcf70, 0xcfa8, 0xcfab, 0xac7a, 0xaca8, 0xcf6d, + 0xacaa, 0xac78, 0xacae, 0xcfa9, 0xcf6f, 0xacab, 0xd25e, 0xcd48, + 0xac7c, 0xac77, 0xcf76, 0xcf6e, 0xacac, 0xaca4, 0xcfa3, 0xaca9, + 0xaca7, 0xcf79, 0xaca1, 0xcf71, 0xaca2, 0xaca3, 0xcf72, 0xcfa6, + 0xac79, 0xcf7e, 0xd24c, 0xaefd, 0xaf43, 0xd255, 0xd25b, 0xd257, + 0xd24a, 0xd24d, 0xd246, 0xd247, 0xaf4a, 0xaefa, 0xd256, 0xd25f, + 0xaf45, 0xaef6, 0xaf40, 0xd24e, 0xaf42, 0xd24f, 0xd259, 0xaf44, + 0xd268, 0xd248, 0xaefc, 0xaefb, 0xaf48, 0xd245, 0xd266, 0xd25a, + 0xd267, 0xd261, 0xd253, 0xd262, 0xd25c, 0xd265, 0xd263, 0xaf49, + 0xd254, 0xaef9, 0xaef8, 0xaf41, 0xaf47, 0xd260, 0xaf46, 0xd251, + 0xb243, 0xd269, 0xd250, 0xd24b, 0xaefe, 0xaf4b, 0xaef7, 0xd258, + 0xd25d, 0xb265, 0xd5e1, 0xd5e5, 0xb252, 0xb250, 0xb247, 0xd5e3, + 0xd5e2, 0xb25b, 0xd5e8, 0xb255, 0xd5fa, 0xd647, 0xb244, 0xd5f7, + 0xd5f0, 0xb267, 0xd5e0, 0xd5fc, 0xb264, 0xb258, 0xb263, 0xb24e, + 0xd5ec, 0xd5fe, 0xd5f6, 0xb24f, 0xb249, 0xd645, 0xd5fd, 0xd640, + 0xb251, 0xb259, 0xd642, 0xd5ea, 0xd5fb, 0xd5ef, 0xd644, 0xb25e, + 0xb246, 0xb25c, 0xd5f4, 0xd5f2, 0xd5f3, 0xb253, 0xd5ee, 0xd5ed, + 0xb248, 0xd5e7, 0xd646, 0xb24a, 0xd5f1, 0xb268, 0xb262, 0xd5e6, + 0xb25f, 0xb25d, 0xb266, 0xd5f8, 0xb261, 0xd252, 0xd5f9, 0xb260, + 0xd641, 0xb245, 0xd5f5, 0xb257, 0xd5e9, 0xb256, 0xb254, 0xb24c, + 0xb24b, 0xd9e7, 0xd643, 0xd5eb, 0xd9fc, 0xb24d, 0xb541, 0xb25a, + 0xb4ee, 0xd9f6, 0xb4fc, 0xd9ea, 0xb4eb, 0xb4e7, 0xda49, 0xb4ed, + 0xb4f1, 0xb4ec, 0xb4f5, 0xda4d, 0xda44, 0xd9f1, 0xb4fa, 0xb4f4, + 0xd9fd, 0xb4e4, 0xda4a, 0xda43, 0xb4e8, 0xd9f7, 0xb4f7, 0xda55, + 0xda56, 0xb4e5, 0xda48, 0xb4f9, 0xd9fb, 0xd9ed, 0xd9ee, 0xb4fd, + 0xd9f2, 0xd9f9, 0xd9f3, 0xb4fb, 0xb544, 0xd9ef, 0xd9e8, 0xd9e9, + 0xd9eb, 0xb4ea, 0xd9f8, 0xb4f8, 0xb542, 0xd9fa, 0xda53, 0xda4b, + 0xb4e6, 0xda51, 0xb4f2, 0xb4f0, 0xda57, 0xb4ef, 0xda41, 0xd9f4, + 0xd9fe, 0xb547, 0xda45, 0xda42, 0xd9f0, 0xb543, 0xda4f, 0xda4c, + 0xda54, 0xb4e9, 0xda40, 0xb546, 0xda47, 0xb4f3, 0xb4f6, 0xda46, + 0xb545, 0xd9f5, 0xd5e4, 0xda50, 0xda4e, 0xda52, 0xd9ec, 0xb540, + 0xde61, 0xde60, 0xde46, 0xb7bd, 0xde5f, 0xde49, 0xde4a, 0xb7c7, + 0xde68, 0xb7c2, 0xde5e, 0xde43, 0xb7c8, 0xb7be, 0xde52, 0xde48, + 0xde4b, 0xde63, 0xb7b8, 0xde6a, 0xde62, 0xb7c1, 0xde57, 0xb7cc, + 0xb7cb, 0xb7c5, 0xde69, 0xb7b9, 0xde55, 0xde4c, 0xde59, 0xde65, + 0xb7cd, 0xb7bb, 0xde54, 0xde4d, 0xb7c4, 0xb7c3, 0xde50, 0xde5a, + 0xde64, 0xde47, 0xde51, 0xb7bc, 0xde5b, 0xb7c9, 0xb7c0, 0xde4e, + 0xb7bf, 0xde45, 0xde53, 0xde67, 0xb4fe, 0xbab0, 0xde56, 0xe26c, + 0xde58, 0xde66, 0xb7c6, 0xde4f, 0xb7ba, 0xb7ca, 0xbcf0, 0xde44, + 0xde5d, 0xde5c, 0xe2aa, 0xbaad, 0xe27d, 0xe2a4, 0xbaa2, 0xe26e, + 0xbaaf, 0xba77, 0xe26d, 0xe2b0, 0xbab1, 0xe271, 0xe2a3, 0xe273, + 0xe2b3, 0xe2af, 0xba75, 0xbaa1, 0xe653, 0xbaae, 0xba7d, 0xe26f, + 0xe2ae, 0xbaa3, 0xe2ab, 0xe2b8, 0xe275, 0xe27e, 0xe2b6, 0xe2ac, + 0xba7c, 0xe27c, 0xba76, 0xba74, 0xbaa8, 0xe27a, 0xe277, 0xe278, + 0xe2b2, 0xe2b7, 0xe2b5, 0xba7a, 0xe2b9, 0xba7e, 0xbaa7, 0xe270, + 0xe5fa, 0xe279, 0xba78, 0xbaac, 0xbaa9, 0xba7b, 0xe2a5, 0xe274, + 0xbaaa, 0xe2a7, 0xbaa4, 0xbaa6, 0xba73, 0xe2a9, 0xe2a1, 0xe272, + 0xbaa5, 0xe2b1, 0xe2b4, 0xe27b, 0xe2a8, 0xba79, 0xbcdf, 0xe2a6, + 0xe5f9, 0xe2ad, 0xe276, 0xe644, 0xe64e, 0xbce2, 0xe64d, 0xe659, + 0xbce4, 0xe64b, 0xe64f, 0xbcef, 0xe646, 0xbce7, 0xe652, 0xe9f0, + 0xbcf3, 0xbcf2, 0xe654, 0xe643, 0xe65e, 0xbced, 0xbce3, 0xe657, + 0xe65b, 0xe660, 0xe655, 0xe649, 0xbce6, 0xbce9, 0xbcf1, 0xbcec, + 0xe64c, 0xe2a2, 0xe648, 0xe65f, 0xbce8, 0xbceb, 0xe661, 0xbce0, + 0xe656, 0xe5fb, 0xe65c, 0xc0df, 0xe64a, 0xbce1, 0xe645, 0xbce5, + 0xe5fc, 0xbaab, 0xe641, 0xe65a, 0xe642, 0xe640, 0xbcea, 0xe658, + 0xe5fe, 0xe651, 0xe650, 0xe65d, 0xe647, 0xbcee, 0xe9f3, 0xbf49, + 0xbefe, 0xea40, 0xe9eb, 0xbf41, 0xe9f7, 0xbf48, 0xbf43, 0xe9f5, + 0xed4f, 0xe9fb, 0xea42, 0xe9fa, 0xe9e9, 0xe9f8, 0xea44, 0xea46, + 0xbefd, 0xea45, 0xbf44, 0xbf4a, 0xbf47, 0xe9fe, 0xbf46, 0xe9f9, + 0xe9ed, 0xe9f2, 0xe9fd, 0xbf45, 0xbf42, 0xbefc, 0xbf40, 0xe9f1, + 0xe5fd, 0xe9ec, 0xe9ef, 0xea41, 0xe9f4, 0xe9ea, 0xed4e, 0xea43, + 0xe9ee, 0xe9fc, 0xed51, 0xc0e3, 0xc0d7, 0xc0db, 0xed53, 0xed59, + 0xed57, 0xc0d9, 0xc0da, 0xc0e1, 0xed5a, 0xed52, 0xc0dc, 0xed56, + 0xed55, 0xed5b, 0xc0e2, 0xc0dd, 0xc0e0, 0xed54, 0xc0e4, 0xc0de, + 0xc0e5, 0xc0d8, 0xed58, 0xed50, 0xeff7, 0xc271, 0xeff4, 0xeff6, + 0xc26f, 0xeff2, 0xeff3, 0xefee, 0xe9f6, 0xefef, 0xc270, 0xefeb, + 0xc26d, 0xeff8, 0xc26e, 0xefec, 0xefed, 0xeff1, 0xc273, 0xc272, + 0xeff0, 0xc378, 0xf25f, 0xf265, 0xc379, 0xf25c, 0xc376, 0xc373, + 0xf267, 0xc377, 0xc374, 0xf25e, 0xf261, 0xf262, 0xf263, 0xf266, + 0xeff5, 0xf25d, 0xc375, 0xf264, 0xf268, 0xf260, 0xf45d, 0xc46a, + 0xf460, 0xc46b, 0xf468, 0xf45f, 0xf45c, 0xf45e, 0xf462, 0xf465, + 0xf464, 0xf467, 0xf45b, 0xc469, 0xf463, 0xf466, 0xf469, 0xf461, + 0xf5d3, 0xf5d4, 0xf5d8, 0xf5d9, 0xf5d6, 0xf5d7, 0xf5d5, 0xc4e9, + 0xc578, 0xf6eb, 0xf6e8, 0xf6e9, 0xf6ea, 0xc579, 0xf7e5, 0xf7e4, + 0xf8af, 0xc5f4, 0xf8ad, 0xf8b0, 0xf8ae, 0xf8f5, 0xc657, 0xc665, + 0xf9a3, 0xf96c, 0xf9a2, 0xf9d0, 0xf9d1, 0xa4f5, 0xa6c7, 0xca41, + 0xcb5e, 0xa85f, 0xa862, 0xcb5f, 0xa860, 0xa861, 0xcd58, 0xcd5a, + 0xcd55, 0xcd52, 0xcd54, 0xaaa4, 0xaaa2, 0xcd56, 0xaaa3, 0xcd53, + 0xcd50, 0xaaa1, 0xcd57, 0xcd51, 0xaaa5, 0xcd59, 0xcfaf, 0xcfb3, + 0xacb7, 0xcfb6, 0xacaf, 0xacb2, 0xacb4, 0xacb6, 0xacb3, 0xcfb2, + 0xcfb1, 0xacb1, 0xcfb4, 0xcfb5, 0xcfae, 0xacb5, 0xacb0, 0xcfb0, + 0xd277, 0xd278, 0xd279, 0xaf50, 0xaf4c, 0xd26e, 0xd276, 0xd27b, + 0xaf51, 0xd26c, 0xd272, 0xd26b, 0xd275, 0xd271, 0xaf4d, 0xaf4f, + 0xd27a, 0xd26a, 0xd26d, 0xd273, 0xd274, 0xd27c, 0xd270, 0xaf4e, + 0xb26d, 0xd64e, 0xd650, 0xd64c, 0xd658, 0xd64a, 0xd657, 0xb269, + 0xd648, 0xda5b, 0xd652, 0xb26c, 0xd653, 0xd656, 0xd65a, 0xd64f, + 0xd654, 0xb26a, 0xb26b, 0xd659, 0xd64d, 0xd649, 0xd65b, 0xd651, + 0xd655, 0xd64b, 0xb548, 0xb549, 0xda65, 0xb54f, 0xda59, 0xda62, + 0xda58, 0xb54c, 0xda60, 0xda5e, 0xda5f, 0xb54a, 0xda63, 0xda5c, + 0xda5a, 0xb54b, 0xda5d, 0xda61, 0xb54d, 0xda64, 0xde70, 0xde77, + 0xde79, 0xdea1, 0xb7da, 0xde6b, 0xb7d2, 0xde7a, 0xb7d7, 0xdea2, + 0xb7ce, 0xde7d, 0xde6d, 0xde7e, 0xde6c, 0xb7dc, 0xde78, 0xb7cf, + 0xdea3, 0xb7d4, 0xde71, 0xb7d9, 0xde7c, 0xde6f, 0xde76, 0xde72, + 0xde6e, 0xb7d1, 0xb7d8, 0xb7d6, 0xb7d3, 0xb7db, 0xb7d0, 0xde75, + 0xb7d5, 0xb54e, 0xde7b, 0xde73, 0xde74, 0xe2c1, 0xbab4, 0xe2bd, + 0xe2c3, 0xe2bf, 0xbab6, 0xe2be, 0xe2c2, 0xe2ba, 0xe2bc, 0xbab5, + 0xe2c0, 0xe2bb, 0xbab7, 0xbab2, 0xe2c4, 0xbab3, 0xe667, 0xe664, + 0xe670, 0xe66a, 0xe66c, 0xbcf4, 0xe666, 0xe66e, 0xe66d, 0xe66b, + 0xe671, 0xbcf7, 0xe668, 0xe66f, 0xbcf5, 0xe663, 0xe665, 0xbcf6, + 0xe662, 0xe672, 0xe669, 0xea4a, 0xbf51, 0xea55, 0xea53, 0xbf4b, + 0xea49, 0xea4c, 0xea4d, 0xea48, 0xbf55, 0xbf56, 0xea47, 0xea56, + 0xea51, 0xbf4f, 0xbf4c, 0xea50, 0xea4e, 0xbf52, 0xea52, 0xbf4d, + 0xbf4e, 0xea4f, 0xbf50, 0xea4b, 0xea54, 0xbf53, 0xea57, 0xea58, + 0xbf54, 0xc0e7, 0xc0ee, 0xed5c, 0xed62, 0xed60, 0xc0ea, 0xc0e9, + 0xc0e6, 0xed5e, 0xc0ec, 0xc0eb, 0xc0e8, 0xed61, 0xed5d, 0xed5f, + 0xc0ed, 0xc277, 0xeffb, 0xc274, 0xc275, 0xeffd, 0xc276, 0xeffa, + 0xeff9, 0xf26c, 0xeffc, 0xf26d, 0xc37a, 0xf26b, 0xf26a, 0xf269, + 0xc37b, 0xc46c, 0xf46a, 0xf46b, 0xf5dc, 0xf5db, 0xc4ea, 0xf5da, + 0xf6ec, 0xf6ed, 0xf7e6, 0xf8b1, 0xf8f6, 0xf9bc, 0xc679, 0xf9c6, + 0xa4f6, 0xaaa6, 0xaaa7, 0xacb8, 0xc0ef, 0xa4f7, 0xaaa8, 0xaf52, + 0xb7dd, 0xa4f8, 0xb26e, 0xbab8, 0xc962, 0xcfb7, 0xd27d, 0xe2c5, + 0xc0f0, 0xa4f9, 0xaaa9, 0xcfb8, 0xcfb9, 0xda66, 0xb550, 0xdea4, + 0xb7de, 0xe2c6, 0xbcf8, 0xc37c, 0xa4fa, 0xda67, 0xa4fb, 0xa6c9, + 0xca42, 0xa6c8, 0xa865, 0xa864, 0xa863, 0xcb60, 0xaaaa, 0xaaab, + 0xcd5b, 0xcfba, 0xcfbd, 0xacba, 0xcfbb, 0xacb9, 0xcfbc, 0xacbb, + 0xd2a2, 0xd2a1, 0xd27e, 0xaf53, 0xd65d, 0xd65e, 0xb26f, 0xd65c, + 0xd65f, 0xb552, 0xb270, 0xb551, 0xda6b, 0xda6a, 0xda68, 0xda69, + 0xda6c, 0xdea6, 0xdea5, 0xdea9, 0xdea8, 0xdea7, 0xbab9, 0xe2c9, + 0xe2c8, 0xbaba, 0xe2c7, 0xe673, 0xe674, 0xbcf9, 0xea59, 0xea5a, + 0xf272, 0xc37d, 0xf271, 0xf270, 0xf26e, 0xf26f, 0xc4eb, 0xf46c, + 0xf6ee, 0xf8f7, 0xa4fc, 0xc9a5, 0xa5c7, 0xc9a6, 0xca43, 0xca44, + 0xcb66, 0xcb62, 0xcb61, 0xaaac, 0xcb65, 0xa867, 0xcb63, 0xa866, + 0xcb67, 0xcb64, 0xcd5f, 0xcfbe, 0xcd5d, 0xcd64, 0xaaad, 0xaab0, + 0xcd65, 0xcd61, 0xcd62, 0xcd5c, 0xaaaf, 0xcd5e, 0xaaae, 0xcd63, + 0xcd60, 0xcfc2, 0xacbd, 0xacbe, 0xcfc5, 0xcfbf, 0xcfc4, 0xcfc0, + 0xacbc, 0xcfc3, 0xcfc1, 0xd2a8, 0xd2a5, 0xd2a7, 0xaf58, 0xaf57, + 0xaf55, 0xd2a4, 0xd2a9, 0xaf54, 0xaf56, 0xd2a6, 0xd667, 0xd2a3, + 0xd2aa, 0xd662, 0xd666, 0xd665, 0xda6e, 0xda79, 0xd668, 0xd663, + 0xda6d, 0xb274, 0xb273, 0xd661, 0xd664, 0xb275, 0xb272, 0xb271, + 0xd660, 0xd669, 0xda70, 0xda77, 0xb554, 0xda76, 0xda73, 0xb556, + 0xda75, 0xda6f, 0xda71, 0xda74, 0xda72, 0xb555, 0xda78, 0xb553, + 0xb7df, 0xdead, 0xdeac, 0xdeaa, 0xb7e2, 0xb7e1, 0xdeae, 0xdeab, + 0xe2ca, 0xbabb, 0xb7e0, 0xdeb0, 0xdeaf, 0xe2cd, 0xe2cb, 0xbcfa, + 0xbabc, 0xe2cc, 0xe676, 0xbcfb, 0xe675, 0xe67e, 0xe67d, 0xe67b, + 0xe67a, 0xe677, 0xe678, 0xe679, 0xe67c, 0xe6a1, 0xea5f, 0xea5c, + 0xea5d, 0xbf57, 0xea5b, 0xea61, 0xea60, 0xea5e, 0xed64, 0xed65, + 0xc0f1, 0xc0f2, 0xed63, 0xc279, 0xeffe, 0xc278, 0xc37e, 0xc3a1, + 0xc46d, 0xf46e, 0xf46d, 0xf5dd, 0xf6ef, 0xc57a, 0xf7e8, 0xf7e7, + 0xf7e9, 0xa5c8, 0xcfc6, 0xaf59, 0xb276, 0xd66a, 0xa5c9, 0xc9a7, + 0xa4fd, 0xca45, 0xcb6c, 0xcb6a, 0xcb6b, 0xcb68, 0xa868, 0xcb69, + 0xcd6d, 0xaab3, 0xcd6b, 0xcd67, 0xcd6a, 0xcd66, 0xaab5, 0xcd69, + 0xaab2, 0xaab1, 0xaab4, 0xcd6c, 0xcd68, 0xacc2, 0xacc5, 0xcfce, + 0xcfcd, 0xcfcc, 0xacbf, 0xcfd5, 0xcfcb, 0xacc1, 0xd2af, 0xcfd2, + 0xcfd0, 0xacc4, 0xcfc8, 0xcfd3, 0xcfca, 0xcfd4, 0xcfd1, 0xcfc9, + 0xacc0, 0xcfd6, 0xcfc7, 0xacc3, 0xd2b4, 0xd2ab, 0xd2b6, 0xd2ae, + 0xd2b9, 0xd2ba, 0xd2ac, 0xd2b8, 0xd2b5, 0xd2b3, 0xd2b7, 0xaf5f, + 0xaf5d, 0xd2b1, 0xd2ad, 0xd2b0, 0xd2bb, 0xd2b2, 0xaf5e, 0xcfcf, + 0xaf5a, 0xaf5c, 0xd678, 0xd66d, 0xd66b, 0xd66c, 0xd673, 0xd674, + 0xd670, 0xb27b, 0xd675, 0xd672, 0xd66f, 0xb279, 0xd66e, 0xb277, + 0xb27a, 0xd671, 0xd679, 0xaf5b, 0xb278, 0xd677, 0xd676, 0xb27c, + 0xda7e, 0xdaa1, 0xb560, 0xdaa7, 0xdaa9, 0xdaa2, 0xb55a, 0xdaa6, + 0xdaa5, 0xb55b, 0xb561, 0xb562, 0xdaa8, 0xb558, 0xda7d, 0xda7b, + 0xdaa3, 0xda7a, 0xb55f, 0xda7c, 0xdaa4, 0xdaaa, 0xb559, 0xb55e, + 0xb55c, 0xb55d, 0xb557, 0xb7e9, 0xdeb7, 0xb7e8, 0xdebb, 0xdeb1, + 0xdebc, 0xdeb2, 0xdeb3, 0xdebd, 0xdeba, 0xdeb8, 0xdeb9, 0xdeb5, + 0xdeb4, 0xdebe, 0xb7e5, 0xdeb6, 0xb7ea, 0xb7e4, 0xb7eb, 0xb7ec, + 0xb7e7, 0xb7e6, 0xe2ce, 0xbabe, 0xbabd, 0xe2d3, 0xbcfc, 0xbabf, + 0xbac1, 0xe2d4, 0xb7e3, 0xbac0, 0xe2d0, 0xe2d2, 0xe2cf, 0xe2d1, + 0xe6ab, 0xe6aa, 0xe6a7, 0xbd40, 0xea62, 0xbd41, 0xe6a6, 0xbcfe, + 0xe6a8, 0xe6a5, 0xe6a2, 0xe6a9, 0xe6a3, 0xe6a4, 0xbcfd, 0xed69, + 0xea66, 0xea65, 0xea67, 0xed66, 0xbf5a, 0xea63, 0xbf58, 0xbf5c, + 0xbf5b, 0xea64, 0xea68, 0xbf59, 0xed6d, 0xc0f5, 0xc27a, 0xc0f6, + 0xc0f3, 0xed6a, 0xed68, 0xed6b, 0xed6e, 0xc0f4, 0xed6c, 0xed67, + 0xf042, 0xf045, 0xf275, 0xf040, 0xf46f, 0xf046, 0xc3a2, 0xf044, + 0xc27b, 0xf041, 0xf043, 0xf047, 0xf276, 0xf274, 0xc3a3, 0xf273, + 0xc46e, 0xc4ed, 0xf6f1, 0xc4ec, 0xf6f3, 0xf6f0, 0xf6f2, 0xc5d0, + 0xf8b2, 0xa5ca, 0xcd6e, 0xd2bc, 0xd2bd, 0xb27d, 0xdebf, 0xbf5d, + 0xc3a4, 0xc57b, 0xf8b3, 0xa5cb, 0xcd6f, 0xa260, 0xcfd7, 0xcfd8, + 0xd2be, 0xd2bf, 0xb27e, 0xb2a1, 0xdaab, 0xdec2, 0xdec1, 0xdec0, + 0xe2d5, 0xe2d6, 0xe2d7, 0xbac2, 0xe6ad, 0xe6ac, 0xea69, 0xbf5e, + 0xbf5f, 0xed72, 0xed6f, 0xed70, 0xed71, 0xf049, 0xf048, 0xc27c, + 0xf277, 0xf5de, 0xa5cc, 0xacc6, 0xb2a2, 0xdec3, 0xa5cd, 0xd2c0, + 0xb2a3, 0xb563, 0xb564, 0xa5ce, 0xa5cf, 0xca46, 0xa86a, 0xa869, + 0xacc7, 0xcfd9, 0xdaac, 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa86b, + 0xa86c, 0xcb6e, 0xcb6d, 0xaab6, 0xcd72, 0xcd70, 0xcd71, 0xcfda, + 0xcfdb, 0xaccb, 0xacc9, 0xacca, 0xacc8, 0xaf60, 0xaf64, 0xaf63, + 0xd2c1, 0xaf62, 0xaf61, 0xd2c2, 0xb2a6, 0xd67b, 0xd67a, 0xb2a4, + 0xb2a5, 0xb566, 0xb565, 0xdaae, 0xdaad, 0xb2a7, 0xb7ed, 0xdec5, + 0xb7ee, 0xdec4, 0xe2d8, 0xe6ae, 0xbd42, 0xea6a, 0xed73, 0xc3a6, + 0xc3a5, 0xc57c, 0xa5d4, 0xcd73, 0xb2a8, 0xe2d9, 0xbac3, 0xcb6f, + 0xcb70, 0xcd74, 0xaab8, 0xaab9, 0xaab7, 0xaccf, 0xacd0, 0xaccd, + 0xacce, 0xcfdc, 0xcfdd, 0xaccc, 0xd2c3, 0xaf68, 0xaf69, 0xb2ab, + 0xd2c9, 0xaf6e, 0xaf6c, 0xd2ca, 0xd2c5, 0xaf6b, 0xaf6a, 0xaf65, + 0xd2c8, 0xd2c7, 0xd2c4, 0xaf6d, 0xd2c6, 0xaf66, 0xaf67, 0xb2ac, + 0xd6a1, 0xd6a2, 0xb2ad, 0xd67c, 0xd67e, 0xd6a4, 0xd6a3, 0xd67d, + 0xb2a9, 0xb2aa, 0xdab6, 0xb56b, 0xb56a, 0xdab0, 0xb568, 0xdab3, + 0xb56c, 0xdab4, 0xb56d, 0xdab1, 0xb567, 0xb569, 0xdab5, 0xdab2, + 0xdaaf, 0xded2, 0xdec7, 0xb7f0, 0xb7f3, 0xb7f2, 0xb7f7, 0xb7f6, + 0xded3, 0xded1, 0xdeca, 0xdece, 0xdecd, 0xb7f4, 0xded0, 0xdecc, + 0xded4, 0xdecb, 0xb7f5, 0xb7ef, 0xb7f1, 0xdec9, 0xe2db, 0xbac7, + 0xe2df, 0xbac6, 0xe2dc, 0xbac5, 0xdec8, 0xdecf, 0xe2de, 0xbac8, + 0xe2e0, 0xe2dd, 0xe2da, 0xe6b1, 0xe6b5, 0xe6b7, 0xe6b3, 0xe6b2, + 0xe6b0, 0xbd45, 0xbd43, 0xbd48, 0xbd49, 0xe6b4, 0xbd46, 0xe6af, + 0xbd47, 0xbac4, 0xe6b6, 0xbd44, 0xea6c, 0xea6b, 0xea73, 0xea6d, + 0xea72, 0xea6f, 0xbf60, 0xea71, 0xbf61, 0xbf62, 0xea70, 0xea6e, + 0xc0f8, 0xed74, 0xc0f7, 0xed77, 0xed75, 0xed76, 0xc0f9, 0xf04d, + 0xc2a1, 0xf04e, 0xc27d, 0xf04f, 0xc27e, 0xf04c, 0xf050, 0xf04a, + 0xc3a7, 0xf278, 0xc3a8, 0xc46f, 0xf04b, 0xc470, 0xc4ee, 0xf5df, + 0xc57e, 0xf6f4, 0xc57d, 0xf7ea, 0xc5f5, 0xc5f6, 0xf9cc, 0xacd1, + 0xcfde, 0xb56e, 0xb56f, 0xa5d5, 0xa6ca, 0xca47, 0xcb71, 0xa86d, + 0xaaba, 0xacd2, 0xacd3, 0xacd4, 0xd6a6, 0xd2cb, 0xaf6f, 0xb2ae, + 0xd6a5, 0xdab8, 0xb571, 0xdab7, 0xb570, 0xded5, 0xbd4a, 0xe6bb, + 0xe6b8, 0xe6b9, 0xe6ba, 0xed78, 0xf051, 0xf471, 0xf470, 0xf6f5, + 0xa5d6, 0xcd75, 0xaf70, 0xb572, 0xded6, 0xe2e1, 0xbd4b, 0xea74, + 0xf052, 0xf472, 0xa5d7, 0xaabb, 0xacd7, 0xcfdf, 0xacd8, 0xacd6, + 0xacd5, 0xd2cc, 0xaf71, 0xaf72, 0xaf73, 0xb2b0, 0xd6a7, 0xb2af, + 0xdab9, 0xb2b1, 0xb573, 0xded7, 0xb7f8, 0xb7f9, 0xbac9, 0xbaca, + 0xbd4c, 0xbf64, 0xea75, 0xbf63, 0xed79, 0xc0fa, 0xf053, 0xf473, + 0xa5d8, 0xa86e, 0xcd78, 0xcd77, 0xaabc, 0xcd76, 0xaabd, 0xcd79, + 0xcfe5, 0xacdb, 0xacda, 0xcfe7, 0xcfe6, 0xacdf, 0xacde, 0xacd9, + 0xcfe1, 0xcfe2, 0xcfe3, 0xace0, 0xcfe0, 0xacdc, 0xcfe4, 0xacdd, + 0xd2cf, 0xd2d3, 0xd2d1, 0xd2d0, 0xd2d4, 0xd2d5, 0xd2d6, 0xd2ce, + 0xd2cd, 0xaf75, 0xaf76, 0xd2d7, 0xd2d2, 0xd6b0, 0xd2d8, 0xaf77, + 0xaf74, 0xd6aa, 0xd6a9, 0xd6ab, 0xd6ac, 0xd6ae, 0xd6ad, 0xd6b2, + 0xb2b5, 0xb2b2, 0xb2b6, 0xd6a8, 0xb2b7, 0xd6b1, 0xb2b4, 0xd6af, + 0xb2b3, 0xdabc, 0xdabe, 0xdaba, 0xdabb, 0xdabf, 0xdac1, 0xdac2, + 0xdabd, 0xdac0, 0xb574, 0xdedb, 0xdee0, 0xded8, 0xdedc, 0xdee1, + 0xdedd, 0xb7fa, 0xb843, 0xb7fd, 0xded9, 0xdeda, 0xbace, 0xb846, + 0xb7fe, 0xb844, 0xb7fc, 0xdedf, 0xb845, 0xdede, 0xb841, 0xb7fb, + 0xb842, 0xdee2, 0xe2e6, 0xe2e8, 0xb840, 0xe2e3, 0xbacc, 0xe2e9, + 0xbacd, 0xe2e7, 0xe2e2, 0xe2e5, 0xe2ea, 0xbacb, 0xe2e4, 0xbd4e, + 0xe6bf, 0xe6be, 0xbd51, 0xbd4f, 0xe6bc, 0xbd4d, 0xe6bd, 0xbd50, + 0xea7d, 0xeaa1, 0xea7e, 0xea76, 0xea7a, 0xea79, 0xea77, 0xbf66, + 0xbf67, 0xbf65, 0xea78, 0xea7b, 0xea7c, 0xbf68, 0xc140, 0xeda3, + 0xc0fc, 0xed7b, 0xc0fe, 0xc141, 0xc0fd, 0xeda2, 0xed7c, 0xc0fb, + 0xeda1, 0xed7a, 0xed7e, 0xed7d, 0xf055, 0xc2a4, 0xc2a5, 0xc2a2, + 0xc2a3, 0xf054, 0xf27b, 0xc3a9, 0xf279, 0xf27a, 0xf474, 0xf477, + 0xf475, 0xf476, 0xf5e0, 0xc4ef, 0xf7eb, 0xf8b4, 0xc5f7, 0xf8f8, + 0xf8f9, 0xc666, 0xa5d9, 0xace1, 0xdac3, 0xdee3, 0xa5da, 0xa86f, + 0xaabe, 0xcfe8, 0xcfe9, 0xaf78, 0xdac4, 0xb575, 0xb847, 0xc142, + 0xeda4, 0xf27c, 0xf478, 0xa5db, 0xcda1, 0xcd7a, 0xcd7c, 0xcd7e, + 0xcd7d, 0xcd7b, 0xaabf, 0xace2, 0xcff2, 0xcfed, 0xcfea, 0xcff1, + 0xace4, 0xace5, 0xcff0, 0xcfef, 0xcfee, 0xcfeb, 0xcfec, 0xcff3, + 0xace3, 0xaf7c, 0xafa4, 0xafa3, 0xd2e1, 0xd2db, 0xd2d9, 0xafa1, + 0xd6b9, 0xaf7a, 0xd2de, 0xd2e2, 0xd2e4, 0xd2e0, 0xd2da, 0xafa2, + 0xd2df, 0xd2dd, 0xaf79, 0xd2e5, 0xafa5, 0xd2e3, 0xaf7d, 0xd2dc, + 0xaf7e, 0xaf7b, 0xb2b9, 0xd6ba, 0xd6b3, 0xd6b5, 0xd6b7, 0xd6b8, + 0xd6b6, 0xb2ba, 0xd6bb, 0xd6b4, 0xdac8, 0xb576, 0xdad0, 0xdac5, + 0xdad1, 0xdac6, 0xdac7, 0xdacf, 0xdace, 0xdacb, 0xb2b8, 0xb577, + 0xdac9, 0xdacc, 0xb578, 0xdacd, 0xdaca, 0xdeee, 0xdef2, 0xb84e, + 0xe2f0, 0xb851, 0xdef0, 0xdeed, 0xdee8, 0xdeea, 0xdeeb, 0xdee4, + 0xb84d, 0xb84c, 0xb848, 0xdee7, 0xb84f, 0xb850, 0xdee6, 0xdee9, + 0xdef1, 0xb84a, 0xb84b, 0xdeef, 0xdee5, 0xe2f2, 0xbad0, 0xe2f4, + 0xdeec, 0xe2f6, 0xbad4, 0xe2f7, 0xe2f3, 0xbad1, 0xe2ef, 0xbad3, + 0xe2ec, 0xe2f1, 0xe2f5, 0xe2ee, 0xb849, 0xe2eb, 0xbad2, 0xe2ed, + 0xbd54, 0xe6c1, 0xbd58, 0xbd56, 0xbacf, 0xe6c8, 0xe6c9, 0xbd53, + 0xe6c7, 0xe6ca, 0xbd55, 0xbd52, 0xe6c3, 0xe6c0, 0xe6c5, 0xe6c2, + 0xbd59, 0xe6c4, 0xe6c6, 0xbd57, 0xbf6a, 0xeaa8, 0xeaa2, 0xeaa6, + 0xeaac, 0xeaad, 0xeaa9, 0xeaaa, 0xeaa7, 0xeaa4, 0xbf6c, 0xbf69, + 0xeaa3, 0xeaa5, 0xbf6b, 0xeaab, 0xc146, 0xedaa, 0xeda5, 0xc145, + 0xc143, 0xedac, 0xc144, 0xeda8, 0xeda9, 0xeda6, 0xedad, 0xf056, + 0xc147, 0xeda7, 0xedae, 0xedab, 0xf05a, 0xf057, 0xc2a6, 0xf05b, + 0xf05d, 0xf05c, 0xf058, 0xf059, 0xf2a3, 0xc3aa, 0xf27e, 0xf2a2, + 0xf27d, 0xf2a4, 0xf2a1, 0xf47a, 0xf47d, 0xf479, 0xc471, 0xf47b, + 0xf47c, 0xf47e, 0xc472, 0xc474, 0xc473, 0xf5e1, 0xf5e3, 0xf5e2, + 0xf6f6, 0xf8b5, 0xf8fa, 0xa5dc, 0xcb72, 0xaac0, 0xcda3, 0xaac1, + 0xaac2, 0xcda2, 0xcff8, 0xcff7, 0xace6, 0xace9, 0xace8, 0xace7, + 0xcff4, 0xcff6, 0xcff5, 0xd2e8, 0xafa7, 0xd2ec, 0xd2eb, 0xd2ea, + 0xd2e6, 0xafa6, 0xafaa, 0xafad, 0xafae, 0xd2e7, 0xd2e9, 0xafac, + 0xafab, 0xafa9, 0xafa8, 0xd6c2, 0xd6c0, 0xd6bc, 0xb2bb, 0xd6bd, + 0xb2bc, 0xd6be, 0xd6bf, 0xd6c1, 0xb2bd, 0xdad5, 0xdad4, 0xdad3, + 0xdad2, 0xdef6, 0xb852, 0xdef3, 0xdef5, 0xb853, 0xb854, 0xdef4, + 0xe341, 0xe2f9, 0xe2fa, 0xbad7, 0xbad5, 0xbad6, 0xe343, 0xe342, + 0xe2fe, 0xe2fd, 0xe2fc, 0xe2fb, 0xe340, 0xe2f8, 0xe6cb, 0xe6d0, + 0xe6ce, 0xe6cd, 0xe6cc, 0xe6cf, 0xeaae, 0xbf6d, 0xc148, 0xedb0, + 0xc149, 0xedaf, 0xf05f, 0xf05e, 0xc2a7, 0xf2a5, 0xc3ab, 0xf4a1, + 0xc5a1, 0xf6f7, 0xf8b7, 0xf8b6, 0xc9a8, 0xacea, 0xaceb, 0xd6c3, + 0xb856, 0xa5dd, 0xa872, 0xa871, 0xa870, 0xcda4, 0xaac4, 0xaac3, + 0xacee, 0xcffa, 0xcffd, 0xcffb, 0xacec, 0xaced, 0xcff9, 0xcffc, + 0xafb5, 0xd2f3, 0xd2f5, 0xd2f4, 0xafb2, 0xd2ef, 0xafb0, 0xafaf, + 0xafb3, 0xafb1, 0xafb4, 0xd2f2, 0xd2ed, 0xd2ee, 0xd2f1, 0xd2f0, + 0xd6c6, 0xd6c7, 0xd6c5, 0xd6c4, 0xb2be, 0xb57d, 0xdad6, 0xdad8, + 0xdada, 0xb57c, 0xb57a, 0xdad7, 0xb57b, 0xdad9, 0xb579, 0xdf41, + 0xdef7, 0xdefa, 0xdefe, 0xb85a, 0xdefc, 0xdefb, 0xdef8, 0xdef9, + 0xb858, 0xdf40, 0xb857, 0xb85c, 0xb85b, 0xb859, 0xdefd, 0xe349, + 0xe348, 0xe344, 0xbad8, 0xe347, 0xe346, 0xbad9, 0xbd5e, 0xe6d2, + 0xbd5f, 0xbd5b, 0xbd5d, 0xbd5a, 0xbd5c, 0xeaaf, 0xbf70, 0xeab1, + 0xeab0, 0xe345, 0xbf72, 0xbf71, 0xbf6e, 0xbf6f, 0xedb5, 0xedb3, + 0xc14a, 0xedb4, 0xedb6, 0xedb2, 0xedb1, 0xf060, 0xc2aa, 0xc2a8, + 0xc2a9, 0xf2a6, 0xf2a7, 0xc3ad, 0xc3ac, 0xf4a3, 0xf4a4, 0xf4a2, + 0xf6f8, 0xf6f9, 0xa5de, 0xca48, 0xa873, 0xcda5, 0xaac6, 0xaac5, + 0xcda6, 0xd040, 0xacef, 0xcffe, 0xacf0, 0xafb6, 0xd2f8, 0xd2f6, + 0xd2fc, 0xafb7, 0xd2f7, 0xd2fb, 0xd2f9, 0xd2fa, 0xd6c8, 0xd6ca, + 0xb2bf, 0xd6c9, 0xb2c0, 0xb5a2, 0xb5a1, 0xb57e, 0xdadb, 0xdf44, + 0xb85d, 0xb85e, 0xdf43, 0xdf42, 0xe34a, 0xbadb, 0xbada, 0xe34b, + 0xe34c, 0xbd61, 0xbd60, 0xeab5, 0xe6d3, 0xe6d5, 0xe6d4, 0xeab4, + 0xeab2, 0xeab6, 0xeab3, 0xbf73, 0xedb7, 0xc14b, 0xedb8, 0xedb9, + 0xc2ab, 0xc2ac, 0xc475, 0xc5d1, 0xa5df, 0xd041, 0xd2fd, 0xafb8, + 0xb3ba, 0xb3b9, 0xb5a4, 0xdadd, 0xb5a3, 0xdadc, 0xdf45, 0xbadc, + 0xe34d, 0xbadd, 0xc476, 0xf4a5, 0xa6cb, 0xaac7, 0xcda7, 0xacf2, + 0xacf1, 0xd042, 0xd043, 0xd340, 0xd342, 0xafb9, 0xd344, 0xd347, + 0xd345, 0xd346, 0xd343, 0xd2fe, 0xafba, 0xd348, 0xd341, 0xd6d3, + 0xb2c6, 0xd6dc, 0xb2c3, 0xd6d5, 0xb2c7, 0xb2c1, 0xd6d0, 0xd6dd, + 0xd6d1, 0xd6ce, 0xb2c5, 0xb2c2, 0xd6d4, 0xd6d7, 0xb2c4, 0xd6d8, + 0xb2c8, 0xd6d9, 0xd6cf, 0xd6d6, 0xd6da, 0xd6d2, 0xd6cd, 0xd6cb, + 0xd6db, 0xdadf, 0xdae4, 0xdae0, 0xdae6, 0xb5a7, 0xd6cc, 0xdae1, + 0xb5a5, 0xdade, 0xb5ac, 0xdae2, 0xb5ab, 0xdae3, 0xb5ad, 0xb5a8, + 0xb5ae, 0xb5a9, 0xb5aa, 0xb5a6, 0xdae5, 0xb861, 0xdf50, 0xdf53, + 0xdf47, 0xdf4c, 0xdf46, 0xb863, 0xdf4a, 0xdf48, 0xb862, 0xdf4f, + 0xdf4e, 0xdf4b, 0xdf4d, 0xdf49, 0xbae1, 0xdf52, 0xb85f, 0xdf51, + 0xe35d, 0xbae8, 0xe358, 0xbae7, 0xe34e, 0xe350, 0xbae0, 0xe355, + 0xe354, 0xe357, 0xbae5, 0xe352, 0xe351, 0xbae4, 0xbadf, 0xe353, + 0xbae2, 0xe359, 0xe35b, 0xe356, 0xe34f, 0xbae3, 0xbd69, 0xbade, + 0xe35c, 0xe6d9, 0xbd62, 0xe6db, 0xbd63, 0xbd65, 0xe6de, 0xe6d6, + 0xbae6, 0xe6dc, 0xe6d8, 0xb860, 0xbd68, 0xbd64, 0xbd66, 0xbd67, + 0xbf76, 0xe6dd, 0xe6d7, 0xbd6a, 0xe6da, 0xeac0, 0xeabb, 0xeac5, + 0xbf74, 0xeabd, 0xbf78, 0xeac3, 0xeaba, 0xeab7, 0xeac6, 0xc151, + 0xbf79, 0xeac2, 0xeab8, 0xbf77, 0xeabc, 0xbf7b, 0xeab9, 0xeabe, + 0xbf7a, 0xeac1, 0xeac4, 0xedcb, 0xedcc, 0xedbc, 0xedc3, 0xedc1, + 0xc14f, 0xedc8, 0xeabf, 0xedbf, 0xedc9, 0xc14e, 0xedbe, 0xedbd, + 0xedc7, 0xedc4, 0xedc6, 0xedba, 0xedca, 0xc14c, 0xedc5, 0xedce, + 0xedc2, 0xc150, 0xc14d, 0xedc0, 0xedbb, 0xedcd, 0xbf75, 0xf063, + 0xf061, 0xf067, 0xc2b0, 0xf065, 0xf064, 0xc2b2, 0xf06a, 0xc2b1, + 0xf06b, 0xf068, 0xc2ae, 0xf069, 0xf062, 0xc2af, 0xc2ad, 0xf2ab, + 0xf066, 0xf06c, 0xf2a8, 0xc3b2, 0xc3b0, 0xf2aa, 0xf2ac, 0xf2a9, + 0xc3b1, 0xc3ae, 0xc3af, 0xc3b3, 0xc478, 0xf4aa, 0xf4a9, 0xf4a7, + 0xf4a6, 0xf4a8, 0xc477, 0xc479, 0xc4f0, 0xf5e5, 0xf5e4, 0xf6fa, + 0xf6fc, 0xf6fe, 0xf6fd, 0xf6fb, 0xc5a3, 0xc5a2, 0xc5d3, 0xc5d2, + 0xc5d4, 0xf7ed, 0xf7ec, 0xf8fb, 0xf8b8, 0xf8fc, 0xc658, 0xc659, + 0xf96d, 0xc67e, 0xa6cc, 0xcda8, 0xd045, 0xd046, 0xd044, 0xacf3, + 0xd047, 0xd048, 0xd049, 0xd349, 0xd34f, 0xd34d, 0xafbb, 0xd34b, + 0xd34c, 0xd34e, 0xd34a, 0xb2c9, 0xd6de, 0xb2cb, 0xd6e0, 0xb2ca, + 0xd6df, 0xdae8, 0xb5af, 0xdaea, 0xdae7, 0xd6e1, 0xb5b0, 0xdae9, + 0xdf56, 0xb864, 0xdf54, 0xb865, 0xdf55, 0xb866, 0xbae9, 0xe361, + 0xe35e, 0xe360, 0xbaea, 0xbaeb, 0xe35f, 0xe6df, 0xe6e0, 0xbd6b, + 0xe6e2, 0xe6e1, 0xa261, 0xeaca, 0xeacb, 0xeac7, 0xeac8, 0xbf7c, + 0xbf7d, 0xeac9, 0xc157, 0xc153, 0xc158, 0xc154, 0xc156, 0xc152, + 0xc155, 0xc2b3, 0xedcf, 0xf2ae, 0xf2ad, 0xf4ab, 0xc47a, 0xc47b, + 0xf741, 0xf5e6, 0xf740, 0xf8fd, 0xf9a4, 0xa6cd, 0xa874, 0xcda9, + 0xaac8, 0xacf6, 0xd04c, 0xacf4, 0xd04a, 0xacf9, 0xacf5, 0xacfa, + 0xacf8, 0xd04b, 0xacf7, 0xafbf, 0xafbe, 0xd35a, 0xafc7, 0xd353, + 0xd359, 0xafc3, 0xd352, 0xd358, 0xd356, 0xafc2, 0xafc4, 0xd355, + 0xafbd, 0xd354, 0xafc8, 0xafc5, 0xafc9, 0xafc6, 0xd351, 0xd350, + 0xd357, 0xafc0, 0xafbc, 0xafc1, 0xd6f0, 0xd6e9, 0xb5b5, 0xd6e8, + 0xb2cf, 0xb2d6, 0xb2d3, 0xb2d9, 0xb2d8, 0xb2d4, 0xd6e2, 0xd6e5, + 0xd6e4, 0xb2d0, 0xd6e6, 0xd6ef, 0xb2d1, 0xd6e3, 0xd6ec, 0xd6ed, + 0xb2d2, 0xd6ea, 0xb2d7, 0xb2cd, 0xb2d5, 0xd6e7, 0xb2cc, 0xd6eb, + 0xd6ee, 0xdafb, 0xdaf2, 0xb5b2, 0xdaf9, 0xdaf6, 0xdaee, 0xdaf7, + 0xb5b4, 0xdaef, 0xdaeb, 0xb86c, 0xdaf4, 0xb5b1, 0xdafa, 0xb5b8, + 0xb5ba, 0xdaed, 0xb5b9, 0xdaf0, 0xb5b3, 0xdaf8, 0xdaf1, 0xdaf5, + 0xdaf3, 0xb5b6, 0xdaec, 0xb5bb, 0xb2ce, 0xb5b7, 0xb5bc, 0xb868, + 0xdf5d, 0xdf5f, 0xdf61, 0xdf65, 0xdf5b, 0xdf59, 0xb86a, 0xdf60, + 0xdf64, 0xdf5c, 0xdf58, 0xdf57, 0xdf62, 0xdf5a, 0xdf5e, 0xb86b, + 0xb869, 0xdf66, 0xb867, 0xdf63, 0xe372, 0xbaee, 0xe36a, 0xbd78, + 0xe374, 0xbaf1, 0xe378, 0xbaf7, 0xe365, 0xe375, 0xe362, 0xe377, + 0xe366, 0xbafe, 0xbafb, 0xe376, 0xe370, 0xbaed, 0xbaf5, 0xbaf4, + 0xbaf3, 0xbaf9, 0xe363, 0xbafa, 0xe371, 0xbaf6, 0xbaec, 0xe373, + 0xbaef, 0xbaf0, 0xbaf8, 0xe368, 0xe367, 0xe364, 0xe36c, 0xe369, + 0xe36d, 0xbafd, 0xe379, 0xbaf2, 0xe36e, 0xe36f, 0xe36b, 0xbafc, + 0xe6e7, 0xbd70, 0xbd79, 0xbd75, 0xe6e4, 0xbd72, 0xbd76, 0xe6f0, + 0xbd6c, 0xe6e8, 0xbd74, 0xe6eb, 0xe6e6, 0xbd73, 0xbd77, 0xe6e5, + 0xbd71, 0xe6ef, 0xbd6e, 0xe6ee, 0xe6ed, 0xbd7a, 0xe572, 0xbd6d, + 0xe6ec, 0xe6e3, 0xbd7b, 0xe6ea, 0xbd6f, 0xe6e9, 0xbfa2, 0xbfa7, + 0xbf7e, 0xead8, 0xeacf, 0xeadb, 0xead3, 0xead9, 0xbfa8, 0xbfa1, + 0xeacc, 0xead2, 0xeadc, 0xead5, 0xeada, 0xeace, 0xead6, 0xbfa3, + 0xead4, 0xbfa6, 0xbfa5, 0xead0, 0xead1, 0xeacd, 0xead7, 0xbfa4, + 0xeade, 0xeadd, 0xedda, 0xedd6, 0xc15f, 0xedd0, 0xc159, 0xc169, + 0xeddc, 0xc161, 0xc15d, 0xedd3, 0xc164, 0xc167, 0xedde, 0xc15c, + 0xedd5, 0xc165, 0xede0, 0xeddd, 0xedd1, 0xc160, 0xc15a, 0xc168, + 0xedd8, 0xc163, 0xedd2, 0xc15e, 0xeddf, 0xc162, 0xc15b, 0xedd9, + 0xc166, 0xedd7, 0xeddb, 0xf06e, 0xf074, 0xc2b9, 0xf077, 0xc2b4, + 0xc2b5, 0xf06f, 0xf076, 0xf071, 0xc2ba, 0xc2b7, 0xf06d, 0xc2b6, + 0xf073, 0xf075, 0xc2b8, 0xf072, 0xf070, 0xf2b8, 0xc3b7, 0xc3b8, + 0xc3b4, 0xc3b5, 0xf2b4, 0xf2b2, 0xf2b6, 0xc3ba, 0xf2b7, 0xf2b0, + 0xf2af, 0xf2b3, 0xf2b1, 0xc3b6, 0xf2b5, 0xf4ac, 0xc47e, 0xc47d, + 0xf4ad, 0xf4af, 0xf4ae, 0xc4a1, 0xf5eb, 0xf5e8, 0xf5e9, 0xf5e7, + 0xf5ea, 0xc4f2, 0xf5ec, 0xc4f1, 0xf742, 0xc5d5, 0xc5d7, 0xf7ee, + 0xc5d6, 0xf8b9, 0xf940, 0xf942, 0xf8fe, 0xf941, 0xc66c, 0xa6ce, + 0xacfb, 0xd26f, 0xafca, 0xb2da, 0xdafc, 0xdafd, 0xeadf, 0xc16a, + 0xede1, 0xc2bb, 0xf2ba, 0xf2b9, 0xc4a2, 0xf5ed, 0xf743, 0xc5f8, + 0xca49, 0xaac9, 0xa875, 0xd04d, 0xd360, 0xd35b, 0xd35f, 0xd35d, + 0xafcb, 0xd35e, 0xd35c, 0xd6f1, 0xdafe, 0xdb40, 0xdf69, 0xdf6a, + 0xb86e, 0xb86f, 0xdf68, 0xdf6b, 0xdf67, 0xb86d, 0xbb40, 0xb870, + 0xe37a, 0xbd7c, 0xe6f1, 0xbd7d, 0xbfa9, 0xeae2, 0xeae0, 0xeae1, + 0xede4, 0xede3, 0xede2, 0xf2bb, 0xc3b9, 0xf2bc, 0xf744, 0xc5f9, + 0xf8ba, 0xa6cf, 0xaacb, 0xaaca, 0xd04f, 0xacfc, 0xd04e, 0xd362, + 0xafcc, 0xd6f2, 0xd361, 0xb2dc, 0xd6f5, 0xd6f3, 0xd6f4, 0xb2db, + 0xdb42, 0xdb43, 0xdb41, 0xb873, 0xdf6d, 0xdf6c, 0xdf6e, 0xb872, + 0xb871, 0xe6f2, 0xe6f4, 0xbd7e, 0xe6f3, 0xeae3, 0xbfaa, 0xf079, + 0xf078, 0xc3bb, 0xf2bd, 0xc3bd, 0xc3bc, 0xf4b0, 0xf5ee, 0xc4f3, + 0xa6d0, 0xd050, 0xacfd, 0xd365, 0xafce, 0xd364, 0xd363, 0xafcd, + 0xd6fb, 0xd6fd, 0xd6f6, 0xd6f7, 0xb2dd, 0xd6f8, 0xb2de, 0xd6fc, + 0xd6f9, 0xd6fa, 0xb2df, 0xb5be, 0xb5bf, 0xdb44, 0xdf6f, 0xdf70, + 0xe37e, 0xbb43, 0xbb41, 0xbb42, 0xe37b, 0xe37c, 0xe37d, 0xe6f9, + 0xe6fa, 0xbda1, 0xe6f7, 0xe6f6, 0xe6f8, 0xe6f5, 0xbfad, 0xeae4, + 0xbfab, 0xbfac, 0xede6, 0xc16b, 0xede5, 0xefa8, 0xf07a, 0xf07b, + 0xc2bc, 0xc2bd, 0xc16c, 0xf2be, 0xf2bf, 0xf4b1, 0xc4a3, 0xa6d1, + 0xa6d2, 0xacfe, 0xaacc, 0xafcf, 0xd051, 0xb5c0, 0xa6d3, 0xad41, + 0xd052, 0xd053, 0xad40, 0xad42, 0xa6d4, 0xd054, 0xafd1, 0xd366, + 0xafd3, 0xafd0, 0xafd2, 0xd741, 0xb2e0, 0xd740, 0xd6fe, 0xdf71, + 0xe3a1, 0xbda2, 0xbfae, 0xeae6, 0xeae5, 0xede7, 0xf5ef, 0xa6d5, + 0xcb73, 0xcdaa, 0xad43, 0xd055, 0xd368, 0xafd4, 0xd367, 0xafd5, + 0xd743, 0xb2e2, 0xd742, 0xd744, 0xb2e1, 0xdb46, 0xdb47, 0xdb45, + 0xb5c1, 0xb874, 0xb875, 0xbb45, 0xe3a3, 0xe3a2, 0xbb44, 0xe6fb, + 0xe6fc, 0xeae7, 0xc170, 0xc16f, 0xc16d, 0xc16e, 0xc171, 0xf07c, + 0xc2bf, 0xc2be, 0xf2c0, 0xf4b2, 0xc5a5, 0xc5a4, 0xa6d6, 0xd1fb, + 0xb877, 0xb5c2, 0xb876, 0xbb46, 0xa6d7, 0xc9a9, 0xa6d8, 0xa6d9, + 0xcdab, 0xcb76, 0xcb77, 0xa877, 0xcb74, 0xa876, 0xa879, 0xcb75, + 0xa87b, 0xa87a, 0xcb78, 0xa878, 0xaad1, 0xaacf, 0xcdad, 0xaace, + 0xaad3, 0xaad5, 0xaad2, 0xcdb0, 0xcdac, 0xaad6, 0xaad0, 0xa87c, + 0xaad4, 0xcdaf, 0xcdae, 0xaacd, 0xd05b, 0xad47, 0xad48, 0xd05d, + 0xd057, 0xd05a, 0xd063, 0xd061, 0xad49, 0xd067, 0xad4c, 0xd064, + 0xd05c, 0xd059, 0xdb49, 0xd062, 0xad44, 0xd065, 0xd056, 0xd05f, + 0xad46, 0xad4b, 0xd060, 0xad4f, 0xad4d, 0xd058, 0xad4a, 0xd05e, + 0xad4e, 0xad45, 0xd066, 0xafda, 0xafe3, 0xafd8, 0xafd6, 0xd36a, + 0xafde, 0xafdb, 0xd36c, 0xafdd, 0xd36b, 0xd369, 0xd36e, 0xafe2, + 0xafe0, 0xdb48, 0xd36f, 0xd36d, 0xafd7, 0xafd9, 0xafdc, 0xafdf, + 0xafe1, 0xd74e, 0xb2e4, 0xd745, 0xd747, 0xd748, 0xd750, 0xd74c, + 0xd74a, 0xd74d, 0xd751, 0xb2e5, 0xb2e9, 0xd746, 0xd74f, 0xb2e7, + 0xb2e6, 0xd74b, 0xd749, 0xb2e3, 0xb2e8, 0xb5c8, 0xdb51, 0xdb4f, + 0xb5ca, 0xdb4a, 0xdfa1, 0xb5c9, 0xdb4e, 0xdb4b, 0xb5c5, 0xb5cb, + 0xdb50, 0xb5c7, 0xdb4d, 0xbb47, 0xb5c6, 0xdb4c, 0xb5cc, 0xb5c4, + 0xb5c3, 0xdf77, 0xdf75, 0xdf7b, 0xdf73, 0xdfa2, 0xdf78, 0xdf72, + 0xb87b, 0xb8a3, 0xdf7d, 0xdf76, 0xb87e, 0xb87c, 0xdf7e, 0xb879, + 0xb878, 0xdf79, 0xb87d, 0xb5cd, 0xdf7c, 0xdf74, 0xb87a, 0xb8a1, + 0xb8a2, 0xbb4c, 0xbb48, 0xbb4d, 0xe3a6, 0xe3a5, 0xe3a7, 0xbb4a, + 0xe3a4, 0xbb4b, 0xe3aa, 0xe3a9, 0xe3a8, 0xbb49, 0xe741, 0xe744, + 0xbda8, 0xe743, 0xbda7, 0xbda3, 0xbda4, 0xbda5, 0xe740, 0xe6fe, + 0xbda6, 0xe742, 0xe6fd, 0xeae9, 0xeaf3, 0xbfb1, 0xbfb0, 0xeaed, + 0xeaef, 0xeaea, 0xeaee, 0xeae8, 0xeaf1, 0xbfaf, 0xeaf0, 0xeaec, + 0xeaf2, 0xeaeb, 0xc174, 0xede8, 0xedee, 0xc178, 0xc17a, 0xc177, + 0xc176, 0xc175, 0xc173, 0xede9, 0xedec, 0xc172, 0xeded, 0xc179, + 0xedeb, 0xedea, 0xc2c0, 0xc2c1, 0xf0a1, 0xf07d, 0xf07e, 0xf2c2, + 0xf2c1, 0xc3be, 0xf4b4, 0xc4a4, 0xf4b3, 0xf5f0, 0xf745, 0xc5a6, + 0xf943, 0xf944, 0xc5d8, 0xa6da, 0xaad7, 0xdb52, 0xbb4e, 0xc17b, + 0xedef, 0xa6db, 0xafe5, 0xafe4, 0xdb53, 0xeaf4, 0xa6dc, 0xad50, + 0xdb54, 0xdb55, 0xdb56, 0xbb4f, 0xbfb2, 0xa6dd, 0xaad8, 0xd068, + 0xafe6, 0xd370, 0xb2ea, 0xdb57, 0xb8a4, 0xbb50, 0xbfb3, 0xc17c, + 0xc2c2, 0xf4b5, 0xa6de, 0xaad9, 0xafe7, 0xd752, 0xb5ce, 0xbb51, + 0xe3ab, 0xe745, 0xa6df, 0xb5cf, 0xdfa3, 0xbb52, 0xa6e0, 0xcdb1, + 0xd069, 0xad51, 0xd372, 0xafea, 0xafe8, 0xafe9, 0xafeb, 0xd371, + 0xd757, 0xd754, 0xd756, 0xb2eb, 0xb2ed, 0xb2ec, 0xd753, 0xb2ee, + 0xd755, 0xdb58, 0xdb59, 0xdb5a, 0xdfa6, 0xdfa7, 0xdfa5, 0xdfa8, + 0xb8a5, 0xdfa4, 0xbb53, 0xe74a, 0xe746, 0xe749, 0xe74b, 0xe748, + 0xe747, 0xeaf5, 0xeaf6, 0xeaf7, 0xbfb4, 0xbfb5, 0xedf1, 0xedf0, + 0xedf2, 0xf0a3, 0xf0a2, 0xf2c4, 0xf2c5, 0xf2c3, 0xc4a5, 0xf4b6, + 0xf4b7, 0xf746, 0xf7ef, 0xf8bb, 0xa6e1, 0xa87d, 0xc17d, 0xa6e2, + 0xd758, 0xdb5b, 0xc641, 0xca4a, 0xca4b, 0xca4d, 0xa6e3, 0xca4e, + 0xca4c, 0xcba2, 0xcba3, 0xcb7b, 0xcba1, 0xa8a1, 0xa8a2, 0xcb7c, + 0xcb7a, 0xcb79, 0xcb7d, 0xa87e, 0xcb7e, 0xd06a, 0xcdb6, 0xaadc, + 0xcdb5, 0xcdb7, 0xaadb, 0xcdbc, 0xaadf, 0xcdb2, 0xcdc0, 0xcdc6, + 0xaae6, 0xcdc3, 0xaae3, 0xcdb9, 0xcdbf, 0xcdc1, 0xcdb4, 0xaae2, + 0xaadd, 0xcdba, 0xaae4, 0xaae7, 0xaae1, 0xaada, 0xcdbe, 0xcdb8, + 0xcdc5, 0xaae9, 0xaae5, 0xaae0, 0xcdbd, 0xafec, 0xcdbb, 0xaade, + 0xaae8, 0xcdb3, 0xcdc2, 0xcdc4, 0xad62, 0xad5c, 0xad64, 0xad61, + 0xd071, 0xd074, 0xad5d, 0xd06b, 0xad56, 0xad60, 0xad63, 0xad65, + 0xd0a2, 0xd077, 0xad55, 0xd0a1, 0xad59, 0xad57, 0xad52, 0xd06f, + 0xd07e, 0xd073, 0xd076, 0xd0a5, 0xad66, 0xd07d, 0xad5e, 0xd078, + 0xd0a4, 0xd075, 0xd079, 0xd07c, 0xd06d, 0xd0a3, 0xd07b, 0xd06c, + 0xd070, 0xad5f, 0xad5a, 0xad53, 0xad58, 0xad54, 0xad67, 0xd06e, + 0xd3a5, 0xad5b, 0xd07a, 0xce41, 0xd3a8, 0xaffa, 0xd376, 0xd3a3, + 0xd37d, 0xd3b2, 0xd3aa, 0xd37e, 0xd3a9, 0xd378, 0xd37c, 0xd3b5, + 0xaffd, 0xd3ad, 0xd3a4, 0xafed, 0xd3b3, 0xd374, 0xd3ac, 0xaffc, + 0xaff7, 0xd373, 0xaff5, 0xaff4, 0xaff9, 0xd3ab, 0xaff1, 0xaff8, + 0xd072, 0xdb5c, 0xd3a6, 0xd37a, 0xaffb, 0xd37b, 0xd3a1, 0xaffe, + 0xd375, 0xd3af, 0xd3ae, 0xd3b6, 0xaff3, 0xaff0, 0xd3b4, 0xd3b0, + 0xd3a7, 0xd3a2, 0xaff6, 0xaff2, 0xd377, 0xafee, 0xd3b1, 0xafef, + 0xd379, 0xd75e, 0xd760, 0xd765, 0xd779, 0xb2fc, 0xb2f2, 0xd75d, + 0xb2fd, 0xb2fe, 0xd768, 0xd76f, 0xd775, 0xd762, 0xd769, 0xb340, + 0xd777, 0xd772, 0xb2fa, 0xb2f8, 0xd76e, 0xd76a, 0xd75c, 0xb2ef, + 0xd761, 0xd759, 0xb2f7, 0xb2f9, 0xd766, 0xd763, 0xb2f4, 0xd773, + 0xb2f1, 0xd764, 0xd77a, 0xd76c, 0xd76b, 0xb2f0, 0xb2fb, 0xb2f3, + 0xd75a, 0xd75f, 0xd770, 0xd776, 0xb341, 0xd75b, 0xd767, 0xd76d, + 0xb2f6, 0xd778, 0xd771, 0xd774, 0xb2f5, 0xdb6c, 0xdb60, 0xb5d7, + 0xdb7d, 0xdba7, 0xdbaa, 0xb5d5, 0xdb68, 0xdba3, 0xdb69, 0xdb77, + 0xb5e2, 0xdb73, 0xb5df, 0xdb74, 0xdb5d, 0xdba4, 0xb5e8, 0xdba1, + 0xdb75, 0xdbac, 0xdb70, 0xdfc8, 0xdbaf, 0xb5e6, 0xdb6e, 0xdb7a, + 0xb5e9, 0xb5d4, 0xdb72, 0xdbad, 0xdb6b, 0xdb64, 0xdb6f, 0xdb63, + 0xdb61, 0xb5d0, 0xdba5, 0xdb6a, 0xdba8, 0xdba9, 0xb5d8, 0xb5dd, + 0xb5d9, 0xb5e1, 0xdb7e, 0xb5da, 0xdb76, 0xdb66, 0xb5d2, 0xdb5e, + 0xdba2, 0xdbab, 0xdb65, 0xb5e0, 0xdbb0, 0xdb71, 0xdb6d, 0xb5d1, + 0xb5e5, 0xdb7c, 0xb5e7, 0xdb78, 0xb5dc, 0xb5d6, 0xb5de, 0xb5d3, + 0xb5e4, 0xdb79, 0xdb67, 0xdb7b, 0xdb62, 0xdba6, 0xdbae, 0xdb5f, + 0xdfc7, 0xdfdd, 0xb855, 0xdfcc, 0xdfca, 0xdfb5, 0xb8a9, 0xdfc5, + 0xdfd9, 0xdfc1, 0xb8b1, 0xdfd8, 0xdfbf, 0xb5e3, 0xdfcf, 0xdfc0, + 0xdfd6, 0xb8b0, 0xb8a8, 0xdfaa, 0xdfb2, 0xdfcb, 0xdfc3, 0xdfdc, + 0xdfc6, 0xb8b6, 0xdfd7, 0xb8ad, 0xdfc9, 0xdfd1, 0xdfb6, 0xdfd0, + 0xdfe1, 0xdfb1, 0xdfd2, 0xdfdf, 0xdfab, 0xb5db, 0xdfb9, 0xdfb8, + 0xb8af, 0xdfbc, 0xdfbe, 0xdfcd, 0xdfde, 0xb8b2, 0xb8b3, 0xdfb0, + 0xb8ab, 0xdfb4, 0xdfda, 0xb8b4, 0xb8ac, 0xb8ae, 0xb8b5, 0xdfe0, + 0xdfd3, 0xdfce, 0xdfbb, 0xdfba, 0xb8aa, 0xdfac, 0xb8a7, 0xdfc4, + 0xdfad, 0xdfc2, 0xdfb7, 0xdfdb, 0xb8a6, 0xdfb3, 0xdfaf, 0xdfd5, + 0xdfae, 0xbb60, 0xe3d3, 0xe3c2, 0xe3ac, 0xe3ca, 0xbb58, 0xe3bb, + 0xe3c5, 0xbb5b, 0xe3be, 0xbb59, 0xe3af, 0xe3cd, 0xe3ae, 0xe3c1, + 0xe3ad, 0xe3bf, 0xe3c8, 0xe3c6, 0xe3ba, 0xe3b5, 0xe3b3, 0xe3b4, + 0xe3c7, 0xe3d2, 0xe3bc, 0xbb5a, 0xe3b7, 0xe3cb, 0xbb5d, 0xe3b6, + 0xe3b0, 0xe3c0, 0xbb61, 0xbb55, 0xbb5e, 0xe3b8, 0xe3b2, 0xbb57, + 0xdfd4, 0xbb56, 0xe3c3, 0xbb54, 0xbb63, 0xbb5c, 0xe3c4, 0xe3b9, + 0xe3b1, 0xe3cc, 0xe3bd, 0xbb62, 0xe3d0, 0xbb5f, 0xe3cf, 0xe3c9, + 0xe3ce, 0xe3d1, 0xe773, 0xe774, 0xe767, 0xe766, 0xe762, 0xbdb4, + 0xbdac, 0xe776, 0xe775, 0xdfa9, 0xe75f, 0xe763, 0xe75d, 0xe770, + 0xe761, 0xe777, 0xe75a, 0xe758, 0xe764, 0xe76e, 0xe769, 0xbdb6, + 0xe74f, 0xe76d, 0xbdb7, 0xdfbd, 0xe75b, 0xe752, 0xe755, 0xe77b, + 0xe75c, 0xe753, 0xe751, 0xe74e, 0xbdb0, 0xe765, 0xbdaf, 0xbdb3, + 0xe760, 0xe768, 0xbda9, 0xe778, 0xe77c, 0xbdab, 0xe757, 0xe76b, + 0xe76f, 0xe754, 0xe779, 0xbdb2, 0xbdb1, 0xe74c, 0xbdb5, 0xe772, + 0xe756, 0xe76a, 0xe750, 0xe75e, 0xe759, 0xbdad, 0xbdae, 0xe76c, + 0xe77d, 0xe77a, 0xe771, 0xe74d, 0xbdaa, 0xeb49, 0xeb40, 0xeb43, + 0xbfbb, 0xeb45, 0xeaf9, 0xeb41, 0xeb47, 0xbfb8, 0xbfbc, 0xbfb6, + 0xeafb, 0xeb4c, 0xeb46, 0xeafc, 0xeb55, 0xeb4f, 0xeaf8, 0xee46, + 0xeafe, 0xbfb7, 0xeb4a, 0xeb54, 0xbfbf, 0xeb51, 0xeafd, 0xeb44, + 0xeb48, 0xeb42, 0xeb56, 0xeb53, 0xeb50, 0xbfb9, 0xbfba, 0xbfbe, + 0xeafa, 0xeb57, 0xbfbd, 0xeb4d, 0xeb4b, 0xeb4e, 0xee53, 0xee40, + 0xee45, 0xee52, 0xee44, 0xedfb, 0xee41, 0xc1a2, 0xedf4, 0xee4d, + 0xee4f, 0xedf3, 0xc1a1, 0xee51, 0xee49, 0xc1a8, 0xee50, 0xee42, + 0xc1aa, 0xedf9, 0xeb52, 0xee4a, 0xee47, 0xedf5, 0xee55, 0xc1a4, + 0xc1a5, 0xedf7, 0xee48, 0xee54, 0xee4b, 0xedfd, 0xc1a7, 0xc1a3, + 0xee4c, 0xedfe, 0xee56, 0xedf8, 0xee43, 0xee4e, 0xedfa, 0xedfc, + 0xc2cb, 0xedf6, 0xc1a9, 0xc2c4, 0xc17e, 0xc1a6, 0xc2c8, 0xf0b3, + 0xf0a9, 0xf0a4, 0xf0aa, 0xf0b4, 0xf0b8, 0xf0b7, 0xc2ca, 0xc2c9, + 0xf0ab, 0xf0b9, 0xf0ae, 0xf0a6, 0xf0a8, 0xf0a7, 0xf0ad, 0xf0b2, + 0xf0a5, 0xf0ac, 0xf0b1, 0xc2c7, 0xf0af, 0xc2c5, 0xf0b0, 0xc2c3, + 0xc2c6, 0xf2d5, 0xf0b5, 0xc3c2, 0xf2cd, 0xf2d1, 0xf2c9, 0xf2cc, + 0xf2d4, 0xc3c0, 0xf2d9, 0xf2d2, 0xf2ca, 0xf2da, 0xf2d3, 0xc3c3, + 0xc3c4, 0xf2d7, 0xf2cb, 0xc3bf, 0xc3c1, 0xf2c6, 0xf2ce, 0xf2c8, + 0xf2d8, 0xf2d6, 0xf2c7, 0xf2cf, 0xf4be, 0xc3c5, 0xf2d0, 0xc4a7, + 0xc4a9, 0xc4a6, 0xf4c3, 0xf4bb, 0xf4b9, 0xf4bd, 0xf4ba, 0xf4bf, + 0xf4c1, 0xc4aa, 0xc4ac, 0xf4c0, 0xc4ad, 0xc4ab, 0xf4c2, 0xc4a8, + 0xc4f4, 0xf5f1, 0xf5f7, 0xc4f6, 0xf4bc, 0xf5f6, 0xf5fd, 0xf5f4, + 0xf5fb, 0xf5fa, 0xf4b8, 0xf5f5, 0xf0b6, 0xf5fe, 0xf5f3, 0xf5f8, + 0xf5fc, 0xf5f2, 0xf74a, 0xc4f5, 0xf5f9, 0xf7f4, 0xf74b, 0xf749, + 0xf747, 0xf748, 0xf74c, 0xc5d9, 0xf7f2, 0xf7f0, 0xf7f5, 0xf7f3, + 0xf7f6, 0xc5da, 0xf7f1, 0xf8bc, 0xf945, 0xf946, 0xf947, 0xf9c7, + 0xf9bd, 0xca4f, 0xaaea, 0xad68, 0xd3b8, 0xd3b7, 0xb040, 0xb342, + 0xd77c, 0xd77b, 0xb5ea, 0xb8b8, 0xb8b7, 0xb8b9, 0xe3d4, 0xe77e, + 0xeb58, 0xeb5a, 0xeb59, 0xc1ab, 0xee57, 0xf0ba, 0xf9a5, 0xa6e4, + 0xcdc9, 0xcdca, 0xcdc8, 0xcdc7, 0xaaeb, 0xd0a9, 0xd0a7, 0xd0a6, + 0xad69, 0xad6b, 0xad6a, 0xd0a8, 0xd3c4, 0xd3c1, 0xd3bf, 0xb041, + 0xd3c2, 0xb046, 0xd3bc, 0xd3cb, 0xd3cd, 0xd3bd, 0xb043, 0xd3ce, + 0xd3c9, 0xd3bb, 0xd3c0, 0xd3ca, 0xd3c6, 0xd3c3, 0xb048, 0xd3cc, + 0xd3be, 0xd3c7, 0xd3b9, 0xb047, 0xb044, 0xd3c5, 0xd3c8, 0xd3ba, + 0xb045, 0xb042, 0xb34c, 0xd7a5, 0xb34b, 0xd7a8, 0xd7ab, 0xb348, + 0xb346, 0xd77e, 0xd7a9, 0xd7a7, 0xd7a4, 0xd7ac, 0xd7ad, 0xd7af, + 0xd7b0, 0xd77d, 0xb345, 0xd7a2, 0xd7a1, 0xd7ae, 0xb347, 0xd7a3, + 0xb349, 0xb344, 0xd7a6, 0xb34d, 0xb34a, 0xd7aa, 0xb5f1, 0xdbbf, + 0xdbb4, 0xb5ee, 0xdfe7, 0xdbbd, 0xdbb1, 0xb5ec, 0xdbb6, 0xb5ef, + 0xdbba, 0xdbb8, 0xb5f2, 0xb5eb, 0xdbb2, 0xdbb5, 0xb5f0, 0xdbb3, + 0xdbbe, 0xdbbc, 0xdbb7, 0xdbb9, 0xdbbb, 0xb5ed, 0xdfe8, 0xdfee, + 0xdfe4, 0xdfea, 0xb8ba, 0xdfe6, 0xb8c0, 0xb8bf, 0xb8be, 0xdfed, + 0xb8c1, 0xb8c2, 0xdfe3, 0xdff0, 0xb8c3, 0xb8bd, 0xb8bc, 0xdfec, + 0xb8c4, 0xdfe2, 0xdfe5, 0xdfef, 0xdfeb, 0xe3f4, 0xe3e9, 0xb8bb, + 0xbb6a, 0xe3dd, 0xe3f2, 0xe3de, 0xbb65, 0xe3db, 0xe3e4, 0xe3dc, + 0xbb67, 0xe3d6, 0xe3f1, 0xbb68, 0xe3ee, 0xe3ef, 0xe3d7, 0xbb6d, + 0xe3e6, 0xe3e0, 0xe3e7, 0xe3da, 0xe3f3, 0xe3eb, 0xe3e5, 0xe3d5, + 0xbb69, 0xe3ec, 0xbb6c, 0xe3f0, 0xe3ea, 0xbb66, 0xe3e8, 0xe3e2, + 0xbb64, 0xe3d9, 0xe3e1, 0xe3ed, 0xe3df, 0xe3e3, 0xbdc1, 0xdfe9, + 0xe7b2, 0xe7bb, 0xe7b1, 0xe7ad, 0xe7aa, 0xbdc2, 0xe7a8, 0xbb6b, + 0xe7a1, 0xbdc0, 0xe7a7, 0xbdbf, 0xe7ac, 0xe7a9, 0xe7b9, 0xe7b4, + 0xe7ae, 0xe7b3, 0xbdbb, 0xe7ab, 0xe7be, 0xe7a2, 0xe7a3, 0xe7ba, + 0xbdbc, 0xe7bf, 0xbdbe, 0xe7c0, 0xe7b0, 0xe3d8, 0xe7b6, 0xe7af, + 0xe7b8, 0xe7b5, 0xe7a6, 0xbdb9, 0xe7bd, 0xbdba, 0xe7a4, 0xbdbd, + 0xeb64, 0xe7b7, 0xe7bc, 0xeb61, 0xbdb8, 0xbfc0, 0xeb6b, 0xeb67, + 0xeb65, 0xeb60, 0xeb6f, 0xbfc4, 0xeb5c, 0xeb68, 0xeb69, 0xeb5f, + 0xeb5e, 0xeb6c, 0xeb62, 0xeb5d, 0xeb63, 0xeb6e, 0xeb5b, 0xeb6d, + 0xeb6a, 0xbfc2, 0xbfc1, 0xbfc3, 0xeb66, 0xf0cb, 0xee59, 0xc1b1, + 0xee5d, 0xee5a, 0xee61, 0xee67, 0xee5c, 0xee70, 0xc1ae, 0xee6a, + 0xee5f, 0xee6b, 0xee66, 0xee6d, 0xee5e, 0xc1b3, 0xc1b2, 0xee60, + 0xee6e, 0xee58, 0xee6c, 0xc1ac, 0xee64, 0xee63, 0xee68, 0xee5b, + 0xc1b0, 0xc1b4, 0xee62, 0xee69, 0xc1b5, 0xee65, 0xc1ad, 0xc1af, + 0xf0c7, 0xf0c5, 0xf0cc, 0xf0c9, 0xf0cd, 0xf0be, 0xf0c6, 0xf0d1, + 0xee6f, 0xf0c2, 0xc2cf, 0xe7a5, 0xf0bd, 0xf0ca, 0xf0c4, 0xf0c1, + 0xf0bc, 0xf0bb, 0xf0d0, 0xf0c0, 0xf0bf, 0xc2cd, 0xf0c8, 0xc2cc, + 0xc2ce, 0xf0c3, 0xf0cf, 0xf2de, 0xf2df, 0xc3c9, 0xf2dc, 0xc3c6, + 0xf2e4, 0xc3ca, 0xf2e6, 0xf2db, 0xf0ce, 0xf2e8, 0xf2dd, 0xc3c7, + 0xf2e3, 0xf2e5, 0xf2e0, 0xf2e7, 0xf2e2, 0xf2e1, 0xc3c8, 0xf4c5, + 0xf4c6, 0xf4c8, 0xc4ae, 0xc4af, 0xf4c9, 0xf4c7, 0xf4c4, 0xf642, + 0xf645, 0xf641, 0xc4fa, 0xf643, 0xc4f9, 0xc4f8, 0xc4f7, 0xf644, + 0xf751, 0xf74f, 0xf74e, 0xf640, 0xf750, 0xf646, 0xf74d, 0xf7f9, + 0xf7d7, 0xf7f7, 0xc5db, 0xf7f8, 0xf7fa, 0xf8bf, 0xc5fa, 0xf8be, + 0xf8bd, 0xc5fb, 0xc65a, 0xf96e, 0xf9a7, 0xf9a6, 0xf9a8, 0xa6e5, + 0xd0aa, 0xd3cf, 0xd3d0, 0xdbc0, 0xf647, 0xf8c0, 0xa6e6, 0xad6c, + 0xd0ab, 0xd7b1, 0xb34e, 0xdbc2, 0xdbc1, 0xb5f3, 0xb8c5, 0xe7c1, + 0xbdc3, 0xbdc4, 0xbfc5, 0xc5fc, 0xa6e7, 0xd0ac, 0xaaed, 0xd0ae, + 0xd0ad, 0xad6d, 0xd3d1, 0xd3d8, 0xb049, 0xd3d6, 0xd3d4, 0xd3db, + 0xd3d2, 0xd3d3, 0xb04a, 0xb04e, 0xd3dc, 0xb04d, 0xd3da, 0xd3d7, + 0xd3d5, 0xb04b, 0xb04c, 0xd3d9, 0xb350, 0xd7b2, 0xb355, 0xd7c2, + 0xb354, 0xd7c4, 0xd7b8, 0xb352, 0xd7c3, 0xd7b3, 0xb353, 0xd7bf, + 0xd7bb, 0xd7bd, 0xd7b7, 0xd7be, 0xb34f, 0xd7ba, 0xd7b9, 0xd7b5, + 0xd7c0, 0xd7bc, 0xd7b4, 0xd7b6, 0xb351, 0xd7c1, 0xb5f6, 0xdbcd, + 0xdbc9, 0xdbcb, 0xdbc6, 0xdbc5, 0xdbc3, 0xdbca, 0xdbcc, 0xdbc8, + 0xdbc7, 0xb5f4, 0xb5f5, 0xdbcf, 0xb8cd, 0xdff2, 0xdff8, 0xdff3, + 0xdff4, 0xdff9, 0xb8cf, 0xb8c7, 0xb8ce, 0xdff1, 0xdbc4, 0xb8ca, + 0xb8c8, 0xdff7, 0xdff6, 0xb8c9, 0xb8cb, 0xdff5, 0xb8c6, 0xb8cc, + 0xe3f6, 0xbb74, 0xe442, 0xe441, 0xe3fb, 0xbb76, 0xe440, 0xe3f7, + 0xe3f8, 0xbb6e, 0xbb70, 0xe3fd, 0xe3f5, 0xbb72, 0xbb71, 0xe3f9, + 0xe3fe, 0xe3fc, 0xbb73, 0xe3fa, 0xdbce, 0xbb6f, 0xe7c2, 0xe7c9, + 0xbdc6, 0xe7cd, 0xbdca, 0xe7c5, 0xe7c3, 0xe7cc, 0xbdc5, 0xe7cb, + 0xbdc7, 0xbdc8, 0xe7c4, 0xbdc9, 0xe7ca, 0xe7c6, 0xe7c7, 0xe7c8, + 0xbb75, 0xeb70, 0xeb7c, 0xbfca, 0xeb77, 0xeb79, 0xbfc8, 0xeb71, + 0xeb75, 0xeb78, 0xbfc6, 0xbfc9, 0xeb7b, 0xeb73, 0xeb74, 0xeb7a, + 0xeb72, 0xeb76, 0xbfc7, 0xee72, 0xee71, 0xc1b7, 0xee77, 0xc1b9, + 0xc1b6, 0xee73, 0xc1ba, 0xee74, 0xee75, 0xee78, 0xc1b8, 0xf0d6, + 0xf0d9, 0xf0d3, 0xf0d5, 0xf0d4, 0xf0d7, 0xf0d8, 0xee76, 0xf0d2, + 0xc3cd, 0xf2ec, 0xf2ef, 0xf2f1, 0xf2ea, 0xf2eb, 0xf2ee, 0xf2f0, + 0xc3ce, 0xc3cc, 0xc3cb, 0xf2ed, 0xf2e9, 0xf4ca, 0xc4b0, 0xf4cb, + 0xf649, 0xc4fb, 0xf64b, 0xc4fc, 0xf648, 0xf64a, 0xc5a8, 0xf752, + 0xc5a7, 0xf7fd, 0xf7fc, 0xf7fb, 0xf948, 0xf949, 0xf94b, 0xf94a, + 0xca50, 0xa6e8, 0xad6e, 0xd7c5, 0xb5f7, 0xdffa, 0xc2d0, 0xf2f2, + 0xa8a3, 0xb357, 0xb356, 0xdbd0, 0xb5f8, 0xdbd2, 0xdbd1, 0xdffb, + 0xb8d0, 0xe443, 0xe446, 0xe445, 0xe444, 0xe7ce, 0xe7d0, 0xe7cf, + 0xbfcc, 0xbfcb, 0xc1bb, 0xee79, 0xee7b, 0xee7a, 0xc2d1, 0xf2f4, + 0xf2f3, 0xf4cc, 0xc4b1, 0xc4fd, 0xf754, 0xf753, 0xc65b, 0xa8a4, + 0xd0af, 0xad6f, 0xd7c8, 0xd7c6, 0xd7c7, 0xdbd4, 0xdbd5, 0xe043, + 0xdbd3, 0xdffc, 0xe041, 0xe040, 0xe042, 0xb8d1, 0xdffe, 0xdffd, + 0xe044, 0xe449, 0xe447, 0xe448, 0xe7d3, 0xe7d1, 0xe7d2, 0xeb7d, + 0xee7c, 0xee7d, 0xc2d2, 0xf2f5, 0xf4cd, 0xc4b2, 0xf64c, 0xf755, + 0xc5a9, 0xf7fe, 0xf94c, 0xa8a5, 0xad71, 0xad72, 0xd0b0, 0xd0b1, + 0xad70, 0xb054, 0xb052, 0xb051, 0xb058, 0xb050, 0xb059, 0xd3dd, + 0xb056, 0xb053, 0xb057, 0xb055, 0xb04f, 0xb35f, 0xb359, 0xd7cc, + 0xb35e, 0xb360, 0xb35a, 0xb35b, 0xd7ca, 0xb358, 0xd7cb, 0xb35d, + 0xd7c9, 0xb35c, 0xb644, 0xb646, 0xdbd8, 0xb645, 0xb5f9, 0xb5fd, + 0xb8e4, 0xe049, 0xdbda, 0xb5fe, 0xdbdd, 0xdbde, 0xb643, 0xdbe0, + 0xdbe2, 0xdbe3, 0xdbd7, 0xdbd6, 0xdbe4, 0xb642, 0xdbe1, 0xdbdf, + 0xb640, 0xb5fb, 0xb647, 0xdbdb, 0xdbdc, 0xdbd9, 0xb641, 0xb5fc, + 0xb5fa, 0xe048, 0xb8df, 0xb8da, 0xb8d5, 0xb8e5, 0xb8d6, 0xb8d2, + 0xb8e1, 0xb8de, 0xb8e0, 0xb8d7, 0xb8dc, 0xb8d3, 0xb8d4, 0xe050, + 0xe04d, 0xe045, 0xe04a, 0xb8e2, 0xe051, 0xb8e3, 0xb8d9, 0xe047, + 0xe04f, 0xe04b, 0xe04e, 0xe04c, 0xb8dd, 0xe046, 0xb8d8, 0xe44c, + 0xbb78, 0xbb7b, 0xe44e, 0xbba5, 0xe44d, 0xbb7d, 0xbdcf, 0xe44f, + 0xbba4, 0xe44b, 0xbba6, 0xbb79, 0xb8db, 0xbb7c, 0xbb7a, 0xbb7e, + 0xbba2, 0xbb77, 0xbba7, 0xbba3, 0xbba1, 0xe44a, 0xbdd6, 0xbdd2, + 0xbdd9, 0xe7d6, 0xbdda, 0xe7e2, 0xe7db, 0xbdcb, 0xe7e3, 0xe7dd, + 0xbdd5, 0xe7de, 0xbdd4, 0xe7e1, 0xbdce, 0xe7df, 0xe7d5, 0xbdcd, + 0xebaa, 0xbdd3, 0xbdd0, 0xbdd8, 0xe7d4, 0xe7d8, 0xbdcc, 0xe7d7, + 0xe7d9, 0xe7da, 0xbdd7, 0xe7dc, 0xe7e0, 0xe7e4, 0xbddb, 0xbfd2, + 0xeba5, 0xebab, 0xeba8, 0xeb7e, 0xebac, 0xeba1, 0xeba7, 0xbfcd, + 0xbfd3, 0xebad, 0xbfcf, 0xbfd9, 0xbfd4, 0xebaf, 0xeba9, 0xbfd0, + 0xeba2, 0xbfda, 0xeba3, 0xeba4, 0xbfdb, 0xbfd8, 0xbdd1, 0xbfce, + 0xebb0, 0xbfdc, 0xbfd5, 0xebae, 0xbfd1, 0xbfd6, 0xbfd7, 0xc1c3, + 0xeea4, 0xeead, 0xeeaa, 0xeeac, 0xc1c0, 0xeea5, 0xeeab, 0xc1bc, + 0xeea7, 0xc1c4, 0xeea3, 0xeea8, 0xeeaf, 0xeba6, 0xeea9, 0xeea2, + 0xc1bd, 0xeea1, 0xc1be, 0xeeb0, 0xc1bf, 0xeeae, 0xc1c2, 0xee7e, + 0xc1c1, 0xeea6, 0xf0dc, 0xf0ea, 0xf0e5, 0xf0e7, 0xf0db, 0xc2d3, + 0xf0da, 0xc2d6, 0xc2d5, 0xf0e9, 0xf0e1, 0xf0de, 0xf0e4, 0xf0dd, + 0xf0df, 0xf0e8, 0xf0e6, 0xc2d4, 0xf0ed, 0xf0eb, 0xf0e2, 0xf0ec, + 0xf0e3, 0xf2f9, 0xc3cf, 0xf341, 0xf64f, 0xc3d6, 0xf0e0, 0xf2f7, + 0xc3d2, 0xf2f8, 0xf2fd, 0xc3d4, 0xc3d5, 0xf2f6, 0xf340, 0xf342, + 0xf2fa, 0xf2fc, 0xf2fe, 0xf2fb, 0xf343, 0xc3d1, 0xc3d7, 0xc3d3, + 0xc3d0, 0xf4d0, 0xc4b7, 0xf4ce, 0xf4d2, 0xf4d3, 0xc4b5, 0xf4d4, + 0xf4d1, 0xf4cf, 0xc4b8, 0xc4b4, 0xf4d5, 0xc4b6, 0xc4b3, 0xc4fe, + 0xc540, 0xf64e, 0xf64d, 0xf650, 0xf651, 0xc541, 0xf756, 0xf75b, + 0xc5aa, 0xf758, 0xf757, 0xf75a, 0xf759, 0xf843, 0xc5dc, 0xf842, + 0xf840, 0xf841, 0xc5fe, 0xc5fd, 0xf8c1, 0xf8c2, 0xc640, 0xf94d, + 0xf94e, 0xc667, 0xc66d, 0xf9a9, 0xf9c8, 0xa8a6, 0xd7cd, 0xd7ce, + 0xe052, 0xe450, 0xe7e5, 0xc1c6, 0xc1c5, 0xf0ee, 0xf344, 0xf844, + 0xa8a7, 0xd3de, 0xb05a, 0xb361, 0xe054, 0xe053, 0xbddc, 0xe7e6, + 0xbddd, 0xeeb1, 0xc2d7, 0xc676, 0xa8a8, 0xcdcb, 0xd3df, 0xb362, + 0xd7cf, 0xd7d0, 0xdbe5, 0xb648, 0xb8e6, 0xe056, 0xe055, 0xe057, + 0xe451, 0xe452, 0xbba8, 0xbfdd, 0xbdde, 0xbfde, 0xeeb5, 0xeeb2, + 0xeeb4, 0xeeb3, 0xc1c7, 0xf0ef, 0xf346, 0xf345, 0xcba4, 0xb05c, + 0xb05b, 0xd3e0, 0xd7d1, 0xdbe7, 0xdbe6, 0xb649, 0xe059, 0xe05a, + 0xe058, 0xb8e8, 0xb8e7, 0xbbaa, 0xbba9, 0xe7e7, 0xebb3, 0xebb1, + 0xebb2, 0xbfdf, 0xeeb7, 0xeeb6, 0xf0f2, 0xf0f1, 0xf0f0, 0xf347, + 0xf9aa, 0xa8a9, 0xad73, 0xad74, 0xb05d, 0xb05e, 0xd3e2, 0xd3e1, + 0xd7d2, 0xb368, 0xb366, 0xb363, 0xb367, 0xb365, 0xb364, 0xb64a, + 0xdbea, 0xb8ed, 0xb64c, 0xb651, 0xdbec, 0xb653, 0xb652, 0xb655, + 0xdbeb, 0xdbe8, 0xb64f, 0xb64b, 0xb64d, 0xdbe9, 0xb654, 0xb650, + 0xb64e, 0xb8ef, 0xb8ee, 0xb8ec, 0xb8f0, 0xb8ea, 0xb8eb, 0xb8e9, + 0xe05b, 0xe454, 0xbbac, 0xbbad, 0xbbab, 0xe453, 0xe455, 0xe7ea, + 0xe7ec, 0xbde7, 0xe7ed, 0xbde0, 0xe7e9, 0xbddf, 0xbde9, 0xbde5, + 0xbde6, 0xbde2, 0xe7e8, 0xbde1, 0xe7ee, 0xe7eb, 0xbde8, 0xbde3, + 0xbde4, 0xebb5, 0xebb7, 0xebb6, 0xebb8, 0xbfe0, 0xebb4, 0xc1cb, + 0xeeb8, 0xc1c8, 0xc1cc, 0xc1ca, 0xc1c9, 0xf0f3, 0xf0f6, 0xf0f5, + 0xf0f4, 0xc2d8, 0xf348, 0xf349, 0xc3d8, 0xf34a, 0xc3d9, 0xc4ba, + 0xc4b9, 0xf652, 0xc542, 0xf653, 0xf75c, 0xc5ab, 0xc5ac, 0xf845, + 0xc642, 0xa8aa, 0xb36a, 0xb369, 0xe05c, 0xe05d, 0xbbae, 0xebb9, + 0xbdea, 0xebba, 0xeeb9, 0xa8ab, 0xd0b2, 0xad76, 0xad75, 0xd3e3, + 0xb05f, 0xd3e4, 0xd7d5, 0xd7d4, 0xd7d3, 0xdbee, 0xb658, 0xdbed, + 0xb657, 0xdbef, 0xb656, 0xe05f, 0xe062, 0xe060, 0xe061, 0xe065, + 0xe05e, 0xe066, 0xe063, 0xe064, 0xbbb0, 0xe456, 0xbbaf, 0xe7f2, + 0xe7f0, 0xbdeb, 0xe7ef, 0xe7f1, 0xbdec, 0xebbb, 0xebbc, 0xc1cd, + 0xf34c, 0xf34e, 0xf34b, 0xf34d, 0xf4d6, 0xf654, 0xf96f, 0xa8ac, + 0xad77, 0xd3e5, 0xd3e7, 0xd3e6, 0xd7d8, 0xb36c, 0xd7d6, 0xb36b, + 0xd7d9, 0xd7da, 0xd7d7, 0xdbfb, 0xb660, 0xdbf3, 0xdbf9, 0xb65b, + 0xb65e, 0xdbf2, 0xb659, 0xdbf6, 0xe06c, 0xb65d, 0xdbf1, 0xdbf7, + 0xdbf4, 0xdbfa, 0xdbf0, 0xdbf8, 0xb65c, 0xb65f, 0xdbf5, 0xb65a, + 0xb8f2, 0xe068, 0xb8f1, 0xe06f, 0xe06e, 0xb8f8, 0xb8f9, 0xe070, + 0xb8f3, 0xe06d, 0xb8f7, 0xe072, 0xe069, 0xe06b, 0xb8f4, 0xe067, + 0xe06a, 0xe071, 0xb8f5, 0xe073, 0xb8f6, 0xbbb1, 0xe45b, 0xe461, + 0xe459, 0xe462, 0xe458, 0xe45d, 0xe463, 0xe460, 0xe45f, 0xe45e, + 0xe457, 0xe45c, 0xe45a, 0xbdf1, 0xbdee, 0xe7fb, 0xe841, 0xe843, + 0xe840, 0xe7f8, 0xe7fa, 0xe845, 0xe842, 0xe7fc, 0xe846, 0xe7f9, + 0xe844, 0xbdef, 0xbdf5, 0xbdf3, 0xe7f3, 0xbdf4, 0xbdf0, 0xe7f4, + 0xe7f6, 0xe7f5, 0xe7fd, 0xe7fe, 0xbdf2, 0xbded, 0xe7f7, 0xebc6, + 0xbfe2, 0xebbd, 0xbfe3, 0xbfe6, 0xebc2, 0xebbf, 0xbfe5, 0xebc3, + 0xebc4, 0xebbe, 0xebc7, 0xebc0, 0xebc5, 0xbfe4, 0xbfe1, 0xebc1, + 0xeebf, 0xc1d0, 0xc1ce, 0xc1d1, 0xc1cf, 0xeebe, 0xeebb, 0xeeba, + 0xeebd, 0xeebc, 0xf145, 0xc2de, 0xf0fb, 0xf0fa, 0xc2d9, 0xf141, + 0xf140, 0xf0f7, 0xf143, 0xf0fc, 0xc2dd, 0xf0f9, 0xf142, 0xf0f8, + 0xc2da, 0xc2dc, 0xf0fd, 0xc2db, 0xf0fe, 0xf144, 0xf352, 0xc3de, + 0xf34f, 0xf353, 0xc3db, 0xf351, 0xc3e0, 0xc3dd, 0xf350, 0xc3df, + 0xf354, 0xc3da, 0xc4bc, 0xc4be, 0xf4d9, 0xc4bd, 0xf4d7, 0xc3dc, + 0xf4d8, 0xc4bb, 0xc543, 0xc545, 0xf656, 0xc544, 0xf655, 0xf761, + 0xc5ad, 0xf760, 0xc5ae, 0xf75e, 0xf75d, 0xf762, 0xf763, 0xf846, + 0xf75f, 0xf8c6, 0xf8c3, 0xf8c4, 0xf8c5, 0xc65c, 0xf951, 0xf950, + 0xf94f, 0xf970, 0xf9be, 0xf9ab, 0xc66e, 0xa8ad, 0xb060, 0xb8fa, + 0xbdf6, 0xebc8, 0xc2df, 0xf355, 0xf9ac, 0xa8ae, 0xaaee, 0xad79, + 0xad78, 0xb063, 0xd3e8, 0xb061, 0xd3e9, 0xb062, 0xd7df, 0xd7db, + 0xb36d, 0xd7de, 0xd7dd, 0xd7dc, 0xb36e, 0xd7e0, 0xd7e1, 0xdc43, + 0xdc41, 0xdc45, 0xdc46, 0xdc4c, 0xdc48, 0xdc4a, 0xdc42, 0xdbfc, + 0xdc49, 0xdc4b, 0xdc44, 0xdc47, 0xdbfd, 0xb662, 0xdc40, 0xdbfe, + 0xb661, 0xb663, 0xb8fd, 0xe075, 0xe077, 0xe076, 0xe07b, 0xb8fb, + 0xe078, 0xe074, 0xe079, 0xe07a, 0xb8fc, 0xb8fe, 0xe07c, 0xe467, + 0xe466, 0xe464, 0xe465, 0xbbb3, 0xbbb5, 0xbbb2, 0xbbb4, 0xe84d, + 0xe84e, 0xe849, 0xe84a, 0xbdf8, 0xbdfd, 0xbdf7, 0xbdfe, 0xbdf9, + 0xe84b, 0xe84c, 0xe848, 0xbe40, 0xbdfb, 0xbdfa, 0xbdfc, 0xe847, + 0xebca, 0xbfe8, 0xebcc, 0xbfea, 0xebcf, 0xebcb, 0xebc9, 0xebce, + 0xbfe9, 0xebcd, 0xbfe7, 0xc1d3, 0xc1d6, 0xeec1, 0xc1d4, 0xeec0, + 0xc1d2, 0xc1d5, 0xf146, 0xf147, 0xf148, 0xc2e0, 0xf149, 0xc2e1, + 0xc3e2, 0xf358, 0xf359, 0xf357, 0xf356, 0xf35a, 0xc3e1, 0xf4dd, + 0xf4db, 0xf4dc, 0xf4de, 0xf4da, 0xf4df, 0xf658, 0xf659, 0xf657, + 0xc546, 0xf764, 0xc5af, 0xf765, 0xf848, 0xf847, 0xa8af, 0xb664, + 0xb940, 0xbbb6, 0xbfec, 0xbfeb, 0xc3e3, 0xc47c, 0xc547, 0xa8b0, + 0xb064, 0xb941, 0xf35b, 0xcba6, 0xa8b1, 0xa8b4, 0xa8b3, 0xa8b2, + 0xcba5, 0xcdcd, 0xcdcf, 0xaaef, 0xaaf1, 0xcdcc, 0xcdce, 0xaaf0, + 0xcdd1, 0xcdd0, 0xcdd2, 0xd0b6, 0xd0b4, 0xad7c, 0xd0b3, 0xada3, + 0xad7e, 0xad7b, 0xada4, 0xad7d, 0xada2, 0xada1, 0xd0b5, 0xad7a, + 0xb06a, 0xd3eb, 0xd3f1, 0xb067, 0xb06e, 0xb069, 0xd3ee, 0xd3f0, + 0xb06c, 0xd3ea, 0xd3ed, 0xb068, 0xb065, 0xd3ec, 0xb06b, 0xd3ef, + 0xb06d, 0xb066, 0xd7e3, 0xd7e6, 0xb370, 0xb37a, 0xb376, 0xd7e4, + 0xb37e, 0xb377, 0xb37c, 0xb372, 0xb36f, 0xb371, 0xb37d, 0xd7e5, + 0xb375, 0xb378, 0xb374, 0xb379, 0xd7e7, 0xb37b, 0xb373, 0xd7e2, + 0xdc4d, 0xb665, 0xdc4f, 0xb667, 0xb669, 0xdc4e, 0xb666, 0xb66a, + 0xb668, 0xb947, 0xe0a3, 0xb94f, 0xe07e, 0xb950, 0xb945, 0xe0a1, + 0xb94a, 0xe0a2, 0xb943, 0xb942, 0xb94d, 0xb94c, 0xb94b, 0xb949, + 0xb94e, 0xe07d, 0xb944, 0xb946, 0xb948, 0xbbb8, 0xbbbb, 0xbbbf, + 0xbbb9, 0xbbbe, 0xbbbc, 0xbbb7, 0xbbbd, 0xbbba, 0xe852, 0xbe43, + 0xbe41, 0xe853, 0xbe44, 0xbe42, 0xe851, 0xe850, 0xbff0, 0xe84f, + 0xbfee, 0xbfed, 0xebd0, 0xbe45, 0xbfef, 0xebd1, 0xbff2, 0xebd2, + 0xbff1, 0xc1d8, 0xeec3, 0xc1d7, 0xc1dc, 0xc1da, 0xc1db, 0xc2e3, + 0xc1d9, 0xeec2, 0xebd3, 0xc2e2, 0xc2e4, 0xc3e4, 0xc3e5, 0xf4e0, + 0xc5de, 0xc5dd, 0xa8b6, 0xca55, 0xb06f, 0xca52, 0xca53, 0xca51, + 0xca54, 0xcbaa, 0xcba7, 0xcbac, 0xcba8, 0xa8b7, 0xa8ba, 0xcba9, + 0xa8b9, 0xcbab, 0xa8b8, 0xcdd5, 0xcdd7, 0xaaf4, 0xcdd3, 0xcdd6, + 0xcdd4, 0xaaf2, 0xaaf5, 0xaaf3, 0xd0b8, 0xd0bc, 0xd0b9, 0xada7, + 0xada8, 0xd0bb, 0xd0bd, 0xd0bf, 0xada5, 0xd0be, 0xada6, 0xd7ee, + 0xd0ba, 0xd3f2, 0xd3fb, 0xd3f9, 0xd3f4, 0xd3f5, 0xd3fa, 0xd3fc, + 0xb071, 0xd3f7, 0xd3f3, 0xb070, 0xb072, 0xd3f6, 0xd3fd, 0xd3f8, + 0xb3a1, 0xd7f1, 0xd7e9, 0xd7ef, 0xd7f0, 0xb3a2, 0xd7e8, 0xd7ea, + 0xd0b7, 0xd7ec, 0xd7ed, 0xd7eb, 0xb66c, 0xdc56, 0xebd4, 0xdc57, + 0xdc54, 0xb3a3, 0xb66e, 0xdc53, 0xdc59, 0xdc58, 0xb66b, 0xdc5c, + 0xdc52, 0xdc5b, 0xdc50, 0xdc5a, 0xdc55, 0xb66d, 0xe0aa, 0xe0a5, + 0xe0ab, 0xe0a6, 0xe0a4, 0xe0a7, 0xb951, 0xe0a9, 0xe0a8, 0xb952, + 0xbbc1, 0xbbc0, 0xe46e, 0xe471, 0xe469, 0xe46d, 0xbbc2, 0xe46c, + 0xe46a, 0xe470, 0xe46b, 0xe468, 0xe46f, 0xe859, 0xbe48, 0xf14a, + 0xe856, 0xe857, 0xe855, 0xdc51, 0xbe47, 0xe85a, 0xe854, 0xbe46, + 0xbe49, 0xe858, 0xebd5, 0xbff3, 0xebd6, 0xebd7, 0xeec4, 0xc1dd, + 0xf14b, 0xf14c, 0xf14d, 0xf35d, 0xf35c, 0xf4e2, 0xf4e1, 0xf65b, + 0xf65c, 0xf65a, 0xf766, 0xc5b0, 0xa8bb, 0xadaa, 0xada9, 0xb075, + 0xb074, 0xd440, 0xd441, 0xd3fe, 0xb073, 0xd7f5, 0xd7f6, 0xd7f2, + 0xb3a4, 0xd7f3, 0xd7f4, 0xdc5f, 0xdc61, 0xdc5d, 0xdc60, 0xb66f, + 0xdc5e, 0xb670, 0xdd73, 0xb955, 0xb954, 0xb953, 0xe0ac, 0xe0ad, + 0xe473, 0xe475, 0xbbc6, 0xbbc3, 0xbbc5, 0xbbc4, 0xe474, 0xe472, + 0xe861, 0xe85e, 0xe85f, 0xbe4d, 0xe860, 0xe85b, 0xe85c, 0xbe4a, + 0xbe4b, 0xe85d, 0xbe4c, 0xebdb, 0xebdc, 0xebd9, 0xebda, 0xbff4, + 0xebd8, 0xeec8, 0xeec5, 0xeec7, 0xc1e0, 0xeecb, 0xc1df, 0xeec9, + 0xeecc, 0xeeca, 0xeec6, 0xc1de, 0xf14f, 0xf150, 0xf14e, 0xf152, + 0xc2e5, 0xc2e6, 0xf35f, 0xc3e7, 0xf151, 0xf35e, 0xc3e6, 0xf4e5, + 0xf4e6, 0xc4bf, 0xf4e4, 0xf4e3, 0xf65d, 0xc548, 0xf849, 0xf8c8, + 0xf8c7, 0xc643, 0xc65d, 0xf8c9, 0xf971, 0xc66f, 0xa8bc, 0xaaf6, + 0xb956, 0xc4c0, 0xa8bd, 0xadab, 0xb3a5, 0xb671, 0xc2e7, 0xaaf7, + 0xd0c1, 0xd0c0, 0xd442, 0xb078, 0xb076, 0xb07a, 0xd444, 0xb079, + 0xb077, 0xd443, 0xb3a8, 0xd7fc, 0xb3a7, 0xb3a9, 0xd842, 0xb3ab, + 0xd7fe, 0xd840, 0xd7f7, 0xb3aa, 0xd843, 0xd7f9, 0xd7fa, 0xd7f8, + 0xb3a6, 0xd841, 0xd7fb, 0xd7fd, 0xdc6d, 0xdc6c, 0xdc6a, 0xdc62, + 0xdc71, 0xdc65, 0xdc6f, 0xdc76, 0xdc6e, 0xb679, 0xb675, 0xdc63, + 0xdc69, 0xb677, 0xdc68, 0xb678, 0xb67a, 0xdc6b, 0xb672, 0xb673, + 0xdc77, 0xdc75, 0xdc74, 0xdc66, 0xdc72, 0xb676, 0xb674, 0xdc73, + 0xdc64, 0xdc67, 0xdc70, 0xe4ba, 0xe0b7, 0xe0b0, 0xe0c3, 0xe0cc, + 0xe0b3, 0xb961, 0xe0c0, 0xb957, 0xb959, 0xb965, 0xe0b1, 0xb95a, + 0xb95c, 0xb966, 0xb95b, 0xb964, 0xe0b9, 0xe0ae, 0xb962, 0xe0b8, + 0xb95e, 0xe0ca, 0xb963, 0xe0c8, 0xe0bc, 0xe0c6, 0xb960, 0xe0af, + 0xe0c9, 0xe0c4, 0xe0cb, 0xb958, 0xb967, 0xb95d, 0xe0b5, 0xe0bd, + 0xe0c1, 0xe0c5, 0xb95f, 0xe0b4, 0xe0b2, 0xe0be, 0xe0bb, 0xe0ba, + 0xe0bf, 0xe0c2, 0xe0c7, 0xe478, 0xbbc7, 0xe4a4, 0xe47a, 0xbbcc, + 0xbbd0, 0xe4ad, 0xe4b5, 0xe4a6, 0xbbc8, 0xe4aa, 0xe0b6, 0xbbc9, + 0xe4b1, 0xe4b6, 0xe4ae, 0xe4b0, 0xe4b9, 0xe4b2, 0xe47e, 0xe4a9, + 0xbbd1, 0xbbcd, 0xe47c, 0xe4ab, 0xbbcb, 0xe4a5, 0xbbca, 0xe4b3, + 0xe4a2, 0xe479, 0xbbce, 0xe4b8, 0xe47b, 0xe4af, 0xe4ac, 0xe4a7, + 0xe477, 0xe476, 0xe4a1, 0xe4b4, 0xbbcf, 0xe4b7, 0xe47d, 0xe4a3, + 0xbe52, 0xbe5a, 0xbe55, 0xe8a4, 0xe8a1, 0xe867, 0xbe50, 0xbe4f, + 0xbe56, 0xe865, 0xbe54, 0xe871, 0xe863, 0xe864, 0xbe4e, 0xe8a3, + 0xbe58, 0xe874, 0xe879, 0xe873, 0xebee, 0xe86f, 0xe877, 0xe875, + 0xe868, 0xe862, 0xe87d, 0xbe57, 0xe87e, 0xe878, 0xe86d, 0xe86b, + 0xe866, 0xe86e, 0xe87b, 0xe86a, 0xe87a, 0xe8a2, 0xbe53, 0xe876, + 0xe87c, 0xe872, 0xe86c, 0xbe51, 0xe4a8, 0xe870, 0xbe59, 0xe869, + 0xebf4, 0xbff7, 0xebf3, 0xebf0, 0xec44, 0xbffb, 0xec41, 0xebf8, + 0xec43, 0xebe9, 0xebf6, 0xbffd, 0xebe1, 0xebdf, 0xec42, 0xec40, + 0xebfe, 0xebed, 0xebec, 0xebe2, 0xc040, 0xebe8, 0xebf2, 0xebfd, + 0xc043, 0xec45, 0xc1e8, 0xc045, 0xbffe, 0xebe6, 0xebef, 0xebde, + 0xebe0, 0xbff5, 0xc042, 0xbffa, 0xebe7, 0xebf7, 0xebf1, 0xc041, + 0xebdd, 0xc1e3, 0xebf9, 0xebfc, 0xbffc, 0xebeb, 0xc044, 0xbff9, + 0xbff8, 0xebf5, 0xebfb, 0xbff6, 0xebe4, 0xebfa, 0xebe5, 0xebea, + 0xeed2, 0xeed7, 0xc1e5, 0xc1e7, 0xeedd, 0xc1e1, 0xeeec, 0xeee3, + 0xeed8, 0xeed9, 0xeee2, 0xc1ee, 0xeee1, 0xeed1, 0xeee0, 0xeed4, + 0xeeed, 0xc1ed, 0xc1eb, 0xeed5, 0xeee8, 0xeeda, 0xeee7, 0xeee9, + 0xeed0, 0xc1e6, 0xeeea, 0xeede, 0xc1ea, 0xeedb, 0xc1ec, 0xeee4, + 0xc1e4, 0xeed6, 0xeee5, 0xeedf, 0xebe3, 0xeee6, 0xeed3, 0xc1e9, + 0xeeeb, 0xc1e2, 0xeece, 0xf160, 0xf159, 0xc2e9, 0xf154, 0xf163, + 0xf15b, 0xeedc, 0xf165, 0xf155, 0xc2e8, 0xf15f, 0xc2ea, 0xc2f2, + 0xc2f0, 0xf161, 0xc2f1, 0xf157, 0xf158, 0xf15d, 0xf162, 0xeecd, + 0xc2eb, 0xf16a, 0xf167, 0xf16b, 0xf15e, 0xf15a, 0xf168, 0xf36a, + 0xf15c, 0xc2ee, 0xc2ed, 0xeecf, 0xc2ef, 0xf164, 0xf166, 0xc2ec, + 0xf169, 0xf153, 0xf156, 0xf373, 0xf363, 0xc3eb, 0xf371, 0xf361, + 0xc3ec, 0xf36c, 0xf368, 0xc3f1, 0xf372, 0xf362, 0xf365, 0xc3e9, + 0xf374, 0xf36d, 0xf370, 0xc3ef, 0xc3f4, 0xc3f2, 0xf369, 0xf364, + 0xc3ed, 0xc3ee, 0xf360, 0xc3ea, 0xc3e8, 0xc3f0, 0xf36f, 0xc3f3, + 0xf36b, 0xf375, 0xc3f5, 0xf367, 0xf36e, 0xf4f3, 0xf542, 0xf4f5, + 0xf4fc, 0xf366, 0xf4fa, 0xf4e9, 0xf540, 0xc4c3, 0xf4ed, 0xf4fe, + 0xf4f4, 0xc4c2, 0xf544, 0xf4f6, 0xf4fb, 0xf4fd, 0xf4e7, 0xf541, + 0xf4f2, 0xf4f7, 0xf4eb, 0xf4ef, 0xf543, 0xf4f9, 0xf4e8, 0xf4ec, + 0xf4ee, 0xf4f8, 0xc4c1, 0xf4f1, 0xf4ea, 0xf4f0, 0xf661, 0xf666, + 0xc54f, 0xf668, 0xc549, 0xf664, 0xf66a, 0xc54e, 0xc54a, 0xc54b, + 0xf660, 0xf667, 0xc54d, 0xf665, 0xc54c, 0xf65f, 0xf663, 0xf662, + 0xf65e, 0xf669, 0xc5b1, 0xf76d, 0xf770, 0xf76c, 0xf76e, 0xf76f, + 0xf769, 0xf76a, 0xf767, 0xf76b, 0xf768, 0xc5b2, 0xc5b3, 0xf84b, + 0xf84d, 0xf84c, 0xf84e, 0xc5e0, 0xf84a, 0xc5df, 0xc5e1, 0xf8cb, + 0xf8cc, 0xc644, 0xf8ca, 0xf953, 0xf952, 0xf954, 0xc65f, 0xf955, + 0xc65e, 0xf956, 0xf972, 0xf975, 0xf974, 0xc668, 0xf973, 0xc672, + 0xc670, 0xc671, 0xc677, 0xf9c0, 0xf9c1, 0xf9bf, 0xf9c9, 0xaaf8, + 0xd844, 0xdc78, 0xe8a5, 0xf376, 0xaaf9, 0xadac, 0xb07b, 0xd845, + 0xd846, 0xb3ac, 0xb67d, 0xdc7a, 0xdc79, 0xb6a3, 0xb67c, 0xdc7b, + 0xb67e, 0xb6a2, 0xb6a1, 0xb67b, 0xb968, 0xe0d0, 0xe0ce, 0xe0cf, + 0xe0cd, 0xbbd2, 0xbbd5, 0xbbd7, 0xbbd6, 0xbbd3, 0xbbd4, 0xe8a7, + 0xe8a6, 0xbe5b, 0xe8a8, 0xe8a9, 0xbe5c, 0xec4d, 0xec4b, 0xeef3, + 0xec49, 0xec4a, 0xc046, 0xec46, 0xec4e, 0xec48, 0xec4c, 0xeeef, + 0xeef1, 0xeef2, 0xc1f3, 0xeeee, 0xc1f2, 0xeef0, 0xc1ef, 0xc1f0, + 0xc1f1, 0xec47, 0xc2f5, 0xf16e, 0xf16c, 0xf16d, 0xc2f3, 0xc2f6, + 0xc2f4, 0xf377, 0xf378, 0xc3f6, 0xf545, 0xf547, 0xf546, 0xc4c4, + 0xc550, 0xf66d, 0xf66c, 0xf66b, 0xaafa, 0xc9aa, 0xca58, 0xa6e9, + 0xca56, 0xca59, 0xca57, 0xcbae, 0xa8c1, 0xa8c2, 0xcbb0, 0xa8bf, + 0xcbaf, 0xcbad, 0xa8c0, 0xa8be, 0xcdd8, 0xcddb, 0xaafd, 0xcdda, + 0xcdd9, 0xaafc, 0xaafb, 0xab40, 0xcddc, 0xaafe, 0xd0c6, 0xadae, + 0xadaf, 0xadb0, 0xd0c7, 0xd0c3, 0xadad, 0xd0c4, 0xd0c5, 0xd0c2, + 0xb0a4, 0xb0a1, 0xd445, 0xb0a2, 0xb0a5, 0xd446, 0xb07e, 0xb07c, + 0xb07d, 0xb0a3, 0xb3ad, 0xd849, 0xb3b5, 0xd848, 0xd84b, 0xb3b1, + 0xd84a, 0xb6ab, 0xb3af, 0xb3b2, 0xb3ae, 0xb3b3, 0xb3b4, 0xb3b0, + 0xd847, 0xb6a7, 0xdc7d, 0xdca3, 0xdca2, 0xb6ac, 0xb6a8, 0xb6a9, + 0xdc7c, 0xdc7e, 0xdca1, 0xb6a4, 0xb6a6, 0xb6aa, 0xb6a5, 0xe0d3, + 0xe0d1, 0xe0d2, 0xb96a, 0xb96b, 0xe0d4, 0xb969, 0xbbd8, 0xbbda, + 0xbbd9, 0xe4bb, 0xe4bc, 0xe8ab, 0xe8aa, 0xc047, 0xc048, 0xec4f, + 0xc049, 0xeef6, 0xeef4, 0xeef5, 0xc1f4, 0xf16f, 0xc3f7, 0xc1f5, + 0xab41, 0xb0a6, 0xd447, 0xd84c, 0xb3b6, 0xb6ad, 0xdca4, 0xdca6, + 0xb6af, 0xb6ae, 0xb6b0, 0xb6b1, 0xdca5, 0xb96e, 0xb96f, 0xb96d, + 0xbbdb, 0xb96c, 0xe0d5, 0xbbdc, 0xe8ac, 0xec50, 0xc04a, 0xc1f6, + 0xf170, 0xf174, 0xc2f9, 0xf171, 0xc2fa, 0xc2f8, 0xf175, 0xc2fb, + 0xf173, 0xf379, 0xc2f7, 0xc3f8, 0xf8cd, 0xab42, 0xb3b8, 0xb3b7, + 0xb6b2, 0xdca8, 0xdca7, 0xb6b3, 0xe0d9, 0xb973, 0xb970, 0xe0d8, + 0xb972, 0xe0d6, 0xb971, 0xe0d7, 0xe4bd, 0xbbdd, 0xe8af, 0xbe5d, + 0xe8ad, 0xbe5e, 0xbe5f, 0xe8ae, 0xbe60, 0xec51, 0xc04e, 0xc04b, + 0xc050, 0xec53, 0xc04c, 0xec52, 0xc04f, 0xc04d, 0xeef9, 0xeefb, + 0xc1f7, 0xeefa, 0xc1f8, 0xeef8, 0xeef7, 0xf177, 0xf176, 0xc2fc, + 0xf178, 0xf37e, 0xc3fa, 0xf37d, 0xf37a, 0xc3f9, 0xf37b, 0xf37c, + 0xf548, 0xf549, 0xc4c5, 0xc553, 0xf66e, 0xc551, 0xc552, 0xf66f, + 0xc5b4, 0xc5b5, 0xf771, 0xc645, 0xf8cf, 0xc647, 0xf8ce, 0xf8d0, + 0xc646, 0xf957, 0xf9ad, 0xab43, 0xb974, 0xe4be, 0xe8b0, 0xc051, + 0xc052, 0xab44, 0xbe61, 0xc3fb, 0xadb1, 0xc053, 0xc5e2, 0xadb2, + 0xd84d, 0xdca9, 0xdcab, 0xdcaa, 0xe0dd, 0xe0da, 0xb975, 0xb976, + 0xe0db, 0xe0dc, 0xe4c0, 0xe4c5, 0xbbde, 0xe4bf, 0xe4c1, 0xe4c8, + 0xe4c3, 0xe4c7, 0xe4c4, 0xe4c2, 0xe4c6, 0xbbdf, 0xe8b3, 0xe8b1, + 0xbe63, 0xbe62, 0xe8b2, 0xbe64, 0xec56, 0xec55, 0xc054, 0xec54, + 0xeefc, 0xeefe, 0xef41, 0xef40, 0xc1f9, 0xeefd, 0xf1a1, 0xc2fd, + 0xf17d, 0xf1a2, 0xc2fe, 0xf17b, 0xf17e, 0xf17c, 0xf179, 0xc340, + 0xf17a, 0xf3a1, 0xf3a3, 0xf3a2, 0xf54a, 0xf54b, 0xf670, 0xc5b7, + 0xc5b6, 0xf84f, 0xf850, 0xc648, 0xf8d1, 0xc669, 0xadb3, 0xb6b4, + 0xe4ca, 0xe4c9, 0xe8b5, 0xe8b4, 0xc1fa, 0xef43, 0xef42, 0xf1a5, + 0xf1a3, 0xf1a6, 0xf1a4, 0xc3fc, 0xf3a4, 0xf3a5, 0xf3a6, 0xf671, + 0xf772, 0xf8d2, 0xadb4, 0xec57, 0xef44, 0xadb5, 0xbbe0, 0xec58, + 0xc341, 0xf1a7, 0xc3fd, 0xf54c, 0xf54d, 0xc554, 0xf851, 0xadb6, + 0xb3bb, 0xb3bc, 0xd84e, 0xb6b5, 0xb6b6, 0xdcac, 0xb6b7, 0xb97a, + 0xb97c, 0xe0df, 0xe0e0, 0xe0de, 0xb977, 0xb978, 0xb97b, 0xb979, + 0xe4cb, 0xbbe1, 0xbbe2, 0xe8bc, 0xbe67, 0xe8b7, 0xe8b6, 0xe8bb, + 0xbe65, 0xc05b, 0xe8b8, 0xe8bd, 0xe8ba, 0xe8b9, 0xbe66, 0xc059, + 0xec5a, 0xc055, 0xec5b, 0xec59, 0xc058, 0xc056, 0xc05a, 0xc057, + 0xef45, 0xef4a, 0xef46, 0xef49, 0xc1fb, 0xedd4, 0xef48, 0xef47, + 0xc344, 0xc342, 0xc345, 0xc343, 0xf1a8, 0xf1a9, 0xf1aa, 0xc346, + 0xf3aa, 0xc440, 0xf3a8, 0xc441, 0xf3a7, 0xf3a9, 0xc3fe, 0xf551, + 0xf54e, 0xf54f, 0xf550, 0xf672, 0xc556, 0xc555, 0xf774, 0xf773, + 0xc5b8, 0xc5e3, 0xc649, 0xc660, 0xf958, 0xf9ae, 0xf9af, 0xadb7, + 0xdcad, 0xe0e1, 0xe4cc, 0xe4cd, 0xbbe3, 0xbbe4, 0xe8be, 0xbe68, + 0xc1fc, 0xf1ab, 0xc347, 0xf3ad, 0xc442, 0xf3ac, 0xf3ae, 0xf3ab, + 0xf675, 0xf552, 0xf553, 0xc4c6, 0xf674, 0xf673, 0xf775, 0xf9b0, + 0xadb8, 0xadb9, 0xb0a7, 0xd448, 0xd84f, 0xb6b8, 0xb6bb, 0xb6b9, + 0xdcae, 0xb6bd, 0xb6ba, 0xb6bc, 0xb97e, 0xe0e2, 0xe0e3, 0xe8c0, + 0xb97d, 0xb9a1, 0xb9a2, 0xe4cf, 0xe4ce, 0xbbe5, 0xbbe6, 0xe4d0, + 0xe8bf, 0xbbe8, 0xbe69, 0xbbe7, 0xc05c, 0xe8c1, 0xbe6b, 0xbe6a, + 0xe8c2, 0xe8c5, 0xe8c3, 0xe8c4, 0xbe6c, 0xc061, 0xc05f, 0xc05e, + 0xec5d, 0xc060, 0xec5c, 0xef4b, 0xec5e, 0xc05d, 0xec5f, 0xef4e, + 0xef4c, 0xef4d, 0xef52, 0xc34b, 0xef51, 0xef54, 0xef53, 0xef50, + 0xef4f, 0xc1fd, 0xf1ae, 0xf1ad, 0xc34a, 0xc348, 0xc349, 0xf1ac, + 0xf3b1, 0xc443, 0xf3b0, 0xf3af, 0xc444, 0xf558, 0xf557, 0xf555, + 0xf554, 0xc4c8, 0xc4c7, 0xf559, 0xf776, 0xc5b9, 0xf677, 0xc557, + 0xf676, 0xf556, 0xf777, 0xc5e4, 0xc661, 0xf959, 0xf9b1, 0xadba, + 0xd850, 0xef55, 0xadbb, 0xe4d2, 0xe4d1, 0xec60, 0xef57, 0xef56, + 0xc34c, 0xf3b2, 0xf3b3, 0xc4c9, 0xf9b2, 0xb0a8, 0xb6bf, 0xb6be, + 0xe0e4, 0xe0e6, 0xb9a4, 0xe0e5, 0xb9a3, 0xb9a5, 0xe0e7, 0xe4d4, + 0xe4d6, 0xe4d5, 0xe4d8, 0xbbe9, 0xe4d7, 0xe4d3, 0xe4d9, 0xe8cc, + 0xe8cf, 0xe8d1, 0xe8c7, 0xe8cb, 0xe8c8, 0xbe6e, 0xbe71, 0xbe73, + 0xe8c9, 0xe8ca, 0xbe72, 0xe8cd, 0xe8d0, 0xe8ce, 0xbe74, 0xbe70, + 0xe8c6, 0xbe6d, 0xbe6f, 0xc063, 0xec66, 0xec64, 0xec63, 0xec69, + 0xec68, 0xec67, 0xec62, 0xc062, 0xec61, 0xec65, 0xc064, 0xef5a, + 0xef5e, 0xef5b, 0xef5d, 0xef5c, 0xef59, 0xef5f, 0xef62, 0xef60, + 0xef61, 0xc240, 0xc1fe, 0xef58, 0xef63, 0xf1b3, 0xf1b6, 0xf1b8, + 0xf1b7, 0xf1b1, 0xf1b5, 0xf1b0, 0xf1b2, 0xc34d, 0xf1af, 0xf1b4, + 0xf3c0, 0xf3b5, 0xc445, 0xc446, 0xf3b4, 0xf3b9, 0xf3bf, 0xf3b7, + 0xf3be, 0xf3bb, 0xf3ba, 0xf3bd, 0xf3b8, 0xf3b6, 0xf3bc, 0xf560, + 0xf55e, 0xc4ca, 0xf55d, 0xf563, 0xf561, 0xc4cb, 0xf55c, 0xf55a, + 0xf55b, 0xc4cd, 0xf55f, 0xc4cc, 0xf562, 0xf678, 0xf67e, 0xf679, + 0xc55b, 0xf6a1, 0xc55a, 0xf67d, 0xf67c, 0xc559, 0xf67b, 0xc558, + 0xf67a, 0xf77d, 0xf7a1, 0xf77e, 0xf77b, 0xc5bb, 0xf778, 0xf77c, + 0xf7a3, 0xf7a2, 0xf779, 0xf77a, 0xc5ba, 0xf852, 0xc5e7, 0xf853, + 0xc5e5, 0xc5e6, 0xf8d3, 0xc64a, 0xf976, 0xc66a, 0xf9b3, 0xc66b, + 0xf9b4, 0xf9b5, 0xf9c3, 0xf9c2, 0xc67a, 0xf9cd, 0xb0a9, 0xe0e9, + 0xe0e8, 0xbbea, 0xbbeb, 0xe4da, 0xe8d2, 0xec6c, 0xbe75, 0xc065, + 0xec6a, 0xec6d, 0xc066, 0xef64, 0xec6b, 0xf1b9, 0xc34e, 0xf3c1, + 0xf566, 0xf564, 0xf565, 0xf6a2, 0xc55c, 0xf7a4, 0xc5ea, 0xc5bc, + 0xc5e8, 0xc5e9, 0xf8d4, 0xc662, 0xb0aa, 0xf1ba, 0xd449, 0xb9a6, + 0xe4db, 0xbbec, 0xe4dc, 0xe8d4, 0xe8d3, 0xc068, 0xbe76, 0xbe77, + 0xe8d7, 0xe8d6, 0xe8d5, 0xec6e, 0xec71, 0xec70, 0xec6f, 0xc067, + 0xef68, 0xef66, 0xef65, 0xef67, 0xc34f, 0xf1bc, 0xf1bd, 0xc350, + 0xf1bb, 0xf3c3, 0xf3c2, 0xf3c5, 0xc447, 0xf3c4, 0xf567, 0xf569, + 0xf568, 0xf6a3, 0xf6a6, 0xf6a4, 0xf6a5, 0xf7a5, 0xc5bd, 0xf854, + 0xf855, 0xf856, 0xc64b, 0xc663, 0xf9b6, 0xb0ab, 0xbe78, 0xc069, + 0xf1be, 0xf7a6, 0xf9c4, 0xd44a, 0xc67b, 0xb0ac, 0xec72, 0xf1bf, + 0xf3c6, 0xf6a7, 0xf7a7, 0xb0ad, 0xe4dd, 0xe4de, 0xbbed, 0xbbee, + 0xe8d9, 0xbe7a, 0xbe79, 0xe8d8, 0xef69, 0xf1c0, 0xf1c2, 0xf1c1, + 0xc353, 0xc352, 0xc351, 0xc55e, 0xf6a8, 0xc55d, 0xf7a9, 0xf7a8, + 0xc64c, 0xf8d5, 0xb3bd, 0xe0ea, 0xe4e1, 0xe4df, 0xe4e0, 0xe8e2, + 0xe8dd, 0xe8da, 0xe8e1, 0xe8e3, 0xbe7c, 0xe8e0, 0xe8dc, 0xe8db, + 0xe8df, 0xe8de, 0xbe7b, 0xec7d, 0xec78, 0xec76, 0xeca1, 0xec77, + 0xec73, 0xec79, 0xec74, 0xef72, 0xec75, 0xeca2, 0xec7c, 0xc06a, + 0xec7b, 0xec7a, 0xec7e, 0xef6a, 0xef6d, 0xef6c, 0xef74, 0xef6f, + 0xef73, 0xef71, 0xef70, 0xef6e, 0xef6b, 0xc243, 0xc242, 0xc244, + 0xc241, 0xef75, 0xf1c8, 0xf1cb, 0xf1c9, 0xf1cd, 0xf1ce, 0xf1c6, + 0xc358, 0xf1c7, 0xf1c5, 0xf1cc, 0xf1c4, 0xf1c3, 0xc357, 0xc355, + 0xc354, 0xf1ca, 0xf3cf, 0xf3d5, 0xc44a, 0xf3d0, 0xf3d3, 0xf3d7, + 0xc44b, 0xf3d2, 0xf3ca, 0xf3c9, 0xf3d6, 0xf3cd, 0xf3cb, 0xf3d4, + 0xf3cc, 0xc449, 0xc448, 0xf3c7, 0xf3c8, 0xf3d1, 0xf3ce, 0xf56c, + 0xf56f, 0xc356, 0xf56d, 0xf573, 0xf571, 0xf56b, 0xf576, 0xf56a, + 0xc4cf, 0xf572, 0xf56e, 0xc4ce, 0xf575, 0xf574, 0xf6ab, 0xf6aa, + 0xf6b1, 0xf6ad, 0xf6b0, 0xc560, 0xf6ae, 0xf6af, 0xf6a9, 0xf6ac, + 0xc55f, 0xc5bf, 0xf7b4, 0xf7af, 0xf7b3, 0xf7b6, 0xf7b2, 0xf7ae, + 0xc5c1, 0xf7b1, 0xf7b5, 0xc5c0, 0xf7ac, 0xf570, 0xf7b0, 0xf7ad, + 0xf7aa, 0xf7ab, 0xc5be, 0xf85a, 0xf85c, 0xf85f, 0xf85b, 0xf860, + 0xf859, 0xf857, 0xc5eb, 0xf85d, 0xc5ed, 0xc5ec, 0xf858, 0xf85e, + 0xf8da, 0xc64d, 0xf8db, 0xf8d9, 0xf8d6, 0xf8d8, 0xf8d7, 0xf95a, + 0xf95c, 0xf95b, 0xf979, 0xf978, 0xf977, 0xf97a, 0xc673, 0xc674, + 0xf9ca, 0xf9ce, 0xb3be, 0xdcaf, 0xe0ed, 0xb9a7, 0xe0eb, 0xe0ec, + 0xe4e2, 0xe4e3, 0xbbf1, 0xbbef, 0xe4e4, 0xbbf0, 0xe8e8, 0xe8eb, + 0xe8e5, 0xe8ec, 0xe8e4, 0xe8e6, 0xe8e7, 0xe8ea, 0xbea1, 0xe8ef, + 0xe8ee, 0xbe7d, 0xe8e9, 0xe8ed, 0xbe7e, 0xecac, 0xc06f, 0xeca7, + 0xc06b, 0xeca4, 0xecaa, 0xecad, 0xc070, 0xeca9, 0xeca6, 0xecae, + 0xeca5, 0xecab, 0xc06c, 0xeca3, 0xc06d, 0xc06e, 0xeca8, 0xefa9, + 0xef7a, 0xef7b, 0xef7e, 0xef7c, 0xef76, 0xef79, 0xefa5, 0xef7d, + 0xc245, 0xefa7, 0xefa4, 0xc246, 0xefa6, 0xef77, 0xefa2, 0xefa3, + 0xefa1, 0xf1d2, 0xf1d4, 0xf1d7, 0xf1d1, 0xc359, 0xf1d9, 0xf1d0, + 0xf1da, 0xf1d6, 0xf1d8, 0xf1dc, 0xf1d5, 0xf1dd, 0xf1d3, 0xf1cf, + 0xc35a, 0xf1db, 0xc35b, 0xc44d, 0xef78, 0xf3f1, 0xf3e8, 0xc44f, + 0xf3e4, 0xc450, 0xf3ed, 0xf3e7, 0xf3dd, 0xc44e, 0xf3ea, 0xf3e5, + 0xf3e6, 0xf3d8, 0xf3df, 0xf3ee, 0xf3eb, 0xf3e3, 0xf3ef, 0xf3de, + 0xf3d9, 0xf3ec, 0xf3db, 0xf3e9, 0xf3e0, 0xf3f0, 0xf3dc, 0xc44c, + 0xf3da, 0xf3e1, 0xf3e2, 0xf57d, 0xf57b, 0xf5a2, 0xf5ae, 0xf5a5, + 0xf57c, 0xf578, 0xf5a7, 0xf57e, 0xf5a3, 0xf57a, 0xf5aa, 0xf577, + 0xf5a1, 0xf5a6, 0xf5a8, 0xf5ab, 0xf579, 0xf5af, 0xf5b0, 0xf5a9, + 0xf5ad, 0xf5a4, 0xf6c1, 0xf6c4, 0xc561, 0xf6c3, 0xf6c8, 0xf6c6, + 0xc562, 0xf6bd, 0xf6b3, 0xf6b2, 0xc564, 0xf6bf, 0xf6c0, 0xf6bc, + 0xf6b4, 0xf6b9, 0xf5ac, 0xf6b5, 0xc563, 0xf6bb, 0xf6ba, 0xf6b6, + 0xf6c2, 0xf6b7, 0xf7bb, 0xf6c5, 0xf6c7, 0xf6be, 0xf6b8, 0xf7bc, + 0xf7be, 0xf7b8, 0xc5c2, 0xf7c5, 0xf7c3, 0xc5c3, 0xf7c2, 0xf7c1, + 0xf7ba, 0xf7b7, 0xf7bd, 0xf7c6, 0xf7b9, 0xf7bf, 0xf869, 0xf86e, + 0xf864, 0xf867, 0xc5ee, 0xf86b, 0xf872, 0xf7c0, 0xf865, 0xf86f, + 0xf873, 0xf86a, 0xf863, 0xf86d, 0xf86c, 0xf871, 0xf870, 0xf7c4, + 0xf868, 0xf862, 0xf866, 0xc64e, 0xc64f, 0xf861, 0xf8e6, 0xf8dd, + 0xf8e5, 0xf8e2, 0xf8e3, 0xf8dc, 0xf8df, 0xf8e7, 0xf8e1, 0xf8e0, + 0xf8de, 0xf8e4, 0xf95d, 0xf95e, 0xf960, 0xf95f, 0xf962, 0xf961, + 0xf97c, 0xf97b, 0xf9b7, 0xf9b8, 0xf9c5, 0xc678, 0xc67c, 0xf9cf, + 0xc67d, 0xb3bf, 0xc4d0, 0xf6c9, 0xc650, 0xc651, 0xb3c0, 0xe0ee, + 0xb9a8, 0xe8f0, 0xecb0, 0xecb1, 0xecaf, 0xefab, 0xefaa, 0xc247, + 0xf1df, 0xefac, 0xf1de, 0xf3f3, 0xc451, 0xc453, 0xf3f2, 0xc452, + 0xf5b1, 0xf5b3, 0xf5b2, 0xf6ca, 0xc565, 0xc5ef, 0xf8e8, 0xf963, + 0xf9d2, 0xb3c1, 0xe4e5, 0xbea2, 0xecb3, 0xecb2, 0xefad, 0xc454, + 0xc4d1, 0xf7c7, 0xf9cb, 0xb3c2, 0xbbf2, 0xbea3, 0xf3f4, 0xf874, + 0xb6c0, 0xefae, 0xc664, 0xb6c1, 0xbea4, 0xc248, 0xf875, 0xb6c2, + 0xe8f1, 0xc072, 0xecb4, 0xecb5, 0xc071, 0xefaf, 0xc24c, 0xc24a, + 0xc24b, 0xc249, 0xf1e0, 0xc35c, 0xf5b5, 0xf5b4, 0xf5b7, 0xf5b6, + 0xc4d2, 0xf6cb, 0xf6cd, 0xf6cc, 0xc566, 0xf7c8, 0xf876, 0xf877, + 0xc5f0, 0xf964, 0xf97d, 0xc675, 0xdcb0, 0xecb6, 0xefb0, 0xf3f5, + 0xe0ef, 0xefb1, 0xf1e2, 0xf1e1, 0xf878, 0xc652, 0xf965, 0xf97e, + 0xb9a9, 0xe8f2, 0xe8f3, 0xecb7, 0xb9aa, 0xc35d, 0xf1e3, 0xf6cf, + 0xc567, 0xf6d0, 0xf6ce, 0xf879, 0xf8e9, 0xb9ab, 0xefb4, 0xefb3, + 0xefb2, 0xf1e4, 0xf1e8, 0xf1e7, 0xf1e6, 0xf1e5, 0xc35e, 0xf3f6, + 0xf5b9, 0xc4d3, 0xf5b8, 0xf6d1, 0xf7cb, 0xf7ca, 0xc5c4, 0xf7c9, + 0xf87c, 0xf87b, 0xf87a, 0xbbf3, 0xecb8, 0xc24d, 0xf3f7, 0xf3f8, + 0xf7cc, 0xf87d, 0xf8ea, 0xf966, 0xf9b9, 0xf9d4, 0xbbf4, 0xc24e, + 0xf1e9, 0xf3f9, 0xf6d2, 0xf87e, 0xbea6, 0xefb5, 0xf1ea, 0xf3fa, + 0xf3fb, 0xf3fc, 0xf5be, 0xf5ba, 0xc568, 0xf5bd, 0xf5bc, 0xc4d4, + 0xf5bb, 0xc4d6, 0xc4d5, 0xf6d4, 0xf6d3, 0xc569, 0xc56a, 0xc5c6, + 0xf7cd, 0xc5c5, 0xf8a3, 0xf8a4, 0xf8a2, 0xf8a1, 0xc654, 0xf8eb, + 0xf8ec, 0xf8ed, 0xc653, 0xf967, 0xf96a, 0xf969, 0xf968, 0xf9d3, + 0xc073, 0xc365, 0xf5bf, 0xf6d5, 0xc5c7, 0xf7ce, 0xf9d5, 0xc074, + 0xefb6, 0xf7cf, 0xf9a1, 0xc94a, 0xddfc, 0xa14a, 0xa157, 0xa159, + 0xa15b, 0xa15f, 0xa160, 0xa163, 0xa164, 0xa167, 0xa168, 0xa16b, + 0xa16c, 0xa16f, 0xa170, 0xa173, 0xa174, 0xa177, 0xa178, 0xa17b, + 0xa17c, 0xa1c6, 0xa1c7, 0xa1ca, 0xa1cb, 0xa1c8, 0xa1c9, 0xa15c, + 0xa14d, 0xa14f, 0xa151, 0xa152, 0xa153, 0xa154, 0xa17d, 0xa17e, + 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1cc, 0xa1cd, 0xa1ce, 0xa1de, + 0xa1df, 0xa1e0, 0xa1e1, 0xa1e2, 0xa24c, 0xa24d, 0xa24e, 0xa149, + 0xa1ad, 0xa243, 0xa248, 0xa1ae, 0xa15d, 0xa15e, 0xa1af, 0xa1cf, + 0xa141, 0xa1d0, 0xa144, 0xa241, 0xa2af, 0xa2b0, 0xa2b1, 0xa2b2, + 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, 0xa147, 0xa146, + 0xa1d5, 0xa1d7, 0xa1d6, 0xa148, 0xa249, 0xa2cf, 0xa2d0, 0xa2d1, + 0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, 0xa2d9, + 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, 0xa2e1, + 0xa2e2, 0xa2e3, 0xa2e4, 0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xa242, + 0xa1c4, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee, 0xa2ef, + 0xa2f0, 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7, + 0xa2f8, 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0xa2fd, 0xa2fe, 0xa340, + 0xa341, 0xa342, 0xa343, 0xa161, 0xa155, 0xa162, 0xa14e, +}; + +static const Summary16 big5_uni2indx_page00[16] = { + /* 0x0000 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x00ac }, { 4, 0x0083 }, + { 7, 0x0000 }, { 7, 0x0080 }, { 8, 0x0000 }, { 8, 0x0080 }, +}; +static const Summary16 big5_uni2indx_page02[38] = { + /* 0x0200 */ + { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, + { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, + { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, + { 9, 0x0e80 }, { 13, 0x0200 }, { 14, 0x0000 }, { 14, 0x0000 }, + /* 0x0300 */ + { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, + { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, + { 14, 0x0000 }, { 14, 0xfffe }, { 29, 0x03fb }, { 38, 0xfffe }, + { 53, 0x03fb }, { 62, 0x0000 }, { 62, 0x0000 }, { 62, 0x0000 }, + /* 0x0400 */ + { 62, 0x0002 }, { 63, 0x1ff0 }, { 72, 0xfff8 }, { 85, 0xffff }, + { 101, 0xffff }, { 117, 0x0002 }, +}; +static const Summary16 big5_uni2indx_page20[44] = { + /* 0x2000 */ + { 118, 0x0000 }, { 118, 0x3318 }, { 124, 0x0064 }, { 127, 0x4824 }, + { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, + { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, + { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, + /* 0x2100 */ + { 131, 0x0228 }, { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x0000 }, + { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x03ff }, { 144, 0x0000 }, + { 144, 0x0000 }, { 144, 0x03cf }, { 152, 0x0000 }, { 152, 0x0000 }, + { 152, 0x0000 }, { 152, 0x0000 }, { 152, 0x0000 }, { 152, 0x0000 }, + /* 0x2200 */ + { 152, 0x0000 }, { 152, 0xc400 }, { 155, 0x4e29 }, { 162, 0x1030 }, + { 165, 0x0000 }, { 165, 0x0004 }, { 166, 0x00c3 }, { 170, 0x0000 }, + { 170, 0x0000 }, { 170, 0x0000 }, { 170, 0x0020 }, { 171, 0x8000 }, +}; +static const Summary16 big5_uni2indx_page24[37] = { + /* 0x2400 */ + { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x0000 }, + { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x03ff }, { 182, 0x3ff0 }, + { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, + { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, + /* 0x2500 */ + { 192, 0x1005 }, { 195, 0x1111 }, { 199, 0x1010 }, { 201, 0x1010 }, + { 203, 0x0000 }, { 203, 0x4001 }, { 205, 0xe402 }, { 210, 0x000f }, + { 214, 0xfffe }, { 229, 0x0030 }, { 231, 0x0003 }, { 233, 0x300c }, + { 237, 0xc8c0 }, { 242, 0x0000 }, { 242, 0x003c }, { 246, 0x0000 }, + /* 0x2600 */ + { 246, 0x0260 }, { 249, 0x0000 }, { 249, 0x0000 }, { 249, 0x0000 }, + { 249, 0x0007 }, +}; +static const Summary16 big5_uni2indx_page30[62] = { + /* 0x3000 */ + { 252, 0xff2f }, { 265, 0x6037 }, { 272, 0x03fe }, { 281, 0x0000 }, + { 281, 0xfffe }, { 296, 0xffff }, { 312, 0xffff }, { 328, 0xffff }, + { 344, 0xffff }, { 360, 0x600f }, { 366, 0xfffe }, { 381, 0xffff }, + { 397, 0xffff }, { 413, 0xffff }, { 429, 0xffff }, { 445, 0x407f }, + /* 0x3100 */ + { 453, 0xffe0 }, { 464, 0xffff }, { 480, 0x03ff }, { 490, 0x0000 }, + { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, + { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, + { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, + /* 0x3200 */ + { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, + { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, + { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0008 }, { 491, 0x0000 }, + { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, + /* 0x3300 */ + { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, + { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, + { 491, 0xc000 }, { 493, 0x7000 }, { 496, 0x0002 }, { 497, 0x0000 }, + { 497, 0x4010 }, { 499, 0x0026 }, +}; +static const Summary16 big5_uni2indx_page4e[1307] = { + /* 0x4e00 */ + { 502, 0xff8b }, { 514, 0xc373 }, { 523, 0x6840 }, { 527, 0x1b0f }, + { 535, 0xe9ac }, { 544, 0xf34c }, { 553, 0x0200 }, { 554, 0xc008 }, + { 557, 0x795c }, { 566, 0xca3e }, { 575, 0x7976 }, { 585, 0x0648 }, + { 589, 0x2fdf }, { 601, 0xf7f0 }, { 612, 0x033a }, { 618, 0xa8ff }, + /* 0x4f00 */ + { 629, 0xef37 }, { 641, 0x233f }, { 650, 0xb004 }, { 654, 0xfd59 }, + { 665, 0xf3ca }, { 675, 0xffff }, { 691, 0xde9f }, { 703, 0xfff9 }, + { 717, 0xabff }, { 730, 0x7df7 }, { 743, 0xc000 }, { 745, 0x8eec }, + { 754, 0xeebf }, { 767, 0xffdb }, { 781, 0xd003 }, { 786, 0x45fa }, + /* 0x5000 */ + { 795, 0xfae1 }, { 805, 0xdffe }, { 819, 0xbfef }, { 833, 0x10ab }, + { 839, 0xffeb }, { 853, 0xfcaa }, { 863, 0xef3f }, { 876, 0x24fd }, + { 885, 0x78ad }, { 894, 0x7f76 }, { 906, 0xf00c }, { 912, 0xedff }, + { 926, 0xcff6 }, { 938, 0x2cfa }, { 947, 0xf7f9 }, { 960, 0xeb6b }, + /* 0x5100 */ + { 971, 0x1ffd }, { 983, 0x95bf }, { 994, 0x6677 }, { 1004, 0xbfbf }, + { 1018, 0x3bfb }, { 1030, 0xfeb4 }, { 1041, 0x7bae }, { 1052, 0x11e2 }, + { 1058, 0xa681 }, { 1064, 0x41be }, { 1072, 0x1435 }, { 1078, 0x72c3 }, + { 1086, 0x7d70 }, { 1095, 0x7191 }, { 1102, 0x0003 }, { 1104, 0x276b }, + /* 0x5200 */ + { 1113, 0x57cb }, { 1123, 0x70cf }, { 1132, 0x4732 }, { 1139, 0x0def }, + { 1149, 0x7eda }, { 1160, 0xfc74 }, { 1170, 0xfe06 }, { 1179, 0xbdb4 }, + { 1189, 0x3f9f }, { 1201, 0x8bca }, { 1209, 0x7e49 }, { 1218, 0x5800 }, + { 1221, 0x228f }, { 1228, 0xebec }, { 1239, 0x8a5c }, { 1246, 0xddbb }, + /* 0x5300 */ + { 1258, 0xef60 }, { 1267, 0xb6e7 }, { 1278, 0xa40f }, { 1285, 0xf293 }, + { 1294, 0x37bb }, { 1305, 0x549e }, { 1313, 0xd04b }, { 1320, 0x9baf }, + { 1331, 0xc414 }, { 1336, 0xf7d4 }, { 1347, 0x30b0 }, { 1352, 0x0a14 }, + { 1356, 0x2f08 }, { 1362, 0x88d0 }, { 1367, 0xff7e }, { 1381, 0x192f }, + /* 0x5400 */ + { 1389, 0xffda }, { 1402, 0xfb07 }, { 1412, 0x7ff1 }, { 1424, 0x7beb }, + { 1436, 0xc5ef }, { 1447, 0x0010 }, { 1448, 0x99ff }, { 1460, 0xfdff }, + { 1475, 0x79d7 }, { 1486, 0x0567 }, { 1493, 0xffe7 }, { 1507, 0xfdcb }, + { 1519, 0xc3ff }, { 1531, 0x4040 }, { 1533, 0x6ff7 }, { 1546, 0xbd8e }, + /* 0x5500 */ + { 1556, 0xdffa }, { 1569, 0x0497 }, { 1575, 0xf4c0 }, { 1582, 0x5bff }, + { 1595, 0xed7b }, { 1607, 0xd0e7 }, { 1616, 0x047e }, { 1623, 0xf8e0 }, + { 1631, 0xff9f }, { 1645, 0xb73e }, { 1656, 0x7dfe }, { 1669, 0x882e }, + { 1675, 0xfffd }, { 1690, 0xbe7f }, { 1703, 0x83fe }, { 1713, 0xf6c4 }, + /* 0x5600 */ + { 1722, 0xf357 }, { 1733, 0xb8fd }, { 1744, 0xd680 }, { 1750, 0xef7d }, + { 1763, 0x5767 }, { 1773, 0x4788 }, { 1779, 0xff7d }, { 1793, 0xc3df }, + { 1804, 0xf0ff }, { 1816, 0x37a9 }, { 1825, 0x7de0 }, { 1834, 0x70fc }, + { 1843, 0x3f6f }, { 1855, 0xec9a }, { 1864, 0x4cb3 }, { 1872, 0x8681 }, + /* 0x5700 */ + { 1877, 0x3f9e }, { 1888, 0xdd5c }, { 1898, 0xf70d }, { 1908, 0x4819 }, + { 1913, 0xfea3 }, { 1924, 0x0007 }, { 1927, 0xaf56 }, { 1937, 0x38ff }, + { 1948, 0x980d }, { 1954, 0xefb8 }, { 1965, 0x403d }, { 1971, 0xb760 }, + { 1979, 0xd8ce }, { 1988, 0x9035 }, { 1994, 0x72bf }, { 2005, 0x3fff }, + /* 0x5800 */ + { 2019, 0x7ff7 }, { 2033, 0x7a11 }, { 2040, 0xf7bb }, { 2053, 0xabff }, + { 2066, 0xff00 }, { 2074, 0x6fbe }, { 2086, 0xa93c }, { 2094, 0xfe72 }, + { 2105, 0xcfef }, { 2118, 0xf11b }, { 2127, 0xdb6b }, { 2138, 0xf40a }, + { 2145, 0xc3e6 }, { 2154, 0xef7e }, { 2167, 0x9b9c }, { 2176, 0xf610 }, + /* 0x5900 */ + { 2183, 0xf048 }, { 2189, 0x16f4 }, { 2197, 0xfeb5 }, { 2209, 0x5182 }, + { 2214, 0xc7b1 }, { 2223, 0x15bb }, { 2232, 0x6e87 }, { 2241, 0xfbdf }, + { 2255, 0xe43f }, { 2265, 0x63cd }, { 2274, 0xc1ff }, { 2285, 0x7e7e }, + { 2297, 0xfdeb }, { 2310, 0x7d5f }, { 2322, 0x777b }, { 2334, 0xfcfe }, + /* 0x5a00 */ + { 2347, 0x960b }, { 2354, 0xdbea }, { 2365, 0x6229 }, { 2371, 0x53e8 }, + { 2379, 0x37df }, { 2391, 0xfdef }, { 2405, 0x36f5 }, { 2415, 0xbd81 }, + { 2423, 0xdc18 }, { 2430, 0xfcbd }, { 2442, 0xd2e4 }, { 2450, 0xffff }, + { 2466, 0x3fd7 }, { 2478, 0xffe0 }, { 2489, 0x7f6f }, { 2502, 0xabf8 }, + /* 0x5b00 */ + { 2512, 0x9bae }, { 2522, 0x6ed9 }, { 2532, 0xf5fb }, { 2545, 0xf115 }, + { 2553, 0x79a9 }, { 2562, 0xbdfb }, { 2575, 0x5a3c }, { 2583, 0xadaf }, + { 2594, 0xdbba }, { 2605, 0x1fac }, { 2614, 0x71fc }, { 2624, 0x8379 }, + { 2632, 0x7cf7 }, { 2644, 0xc35f }, { 2654, 0xdfff }, { 2669, 0x0567 }, + /* 0x5c00 */ + { 2676, 0xff9a }, { 2688, 0x8467 }, { 2695, 0x1534 }, { 2701, 0xdf8b }, + { 2712, 0xf9f3 }, { 2724, 0x3373 }, { 2733, 0xf7bd }, { 2746, 0x5e1a }, + { 2754, 0xbf40 }, { 2762, 0xa03f }, { 2770, 0xffff }, { 2786, 0x01eb }, + { 2793, 0xdfc0 }, { 2802, 0xcfdd }, { 2814, 0x7500 }, { 2819, 0xabd3 }, + /* 0x5d00 */ + { 2829, 0xf8c3 }, { 2838, 0xeed6 }, { 2849, 0x43fd }, { 2859, 0xb7ff }, + { 2873, 0x5eaf }, { 2884, 0x4227 }, { 2890, 0x9bac }, { 2899, 0xf686 }, + { 2908, 0x27d7 }, { 2918, 0xf6bc }, { 2929, 0xf787 }, { 2940, 0x35b7 }, + { 2950, 0xaacd }, { 2959, 0xe176 }, { 2968, 0x49e7 }, { 2977, 0xe29f }, + /* 0x5e00 */ + { 2987, 0x545c }, { 2994, 0xaff2 }, { 3005, 0x2b3f }, { 3015, 0x61d8 }, + { 3022, 0xfc3b }, { 3033, 0xbbb8 }, { 3043, 0xffcf }, { 3057, 0x7b7d }, + { 3069, 0xbf95 }, { 3080, 0x1ce0 }, { 3086, 0x7dfd }, { 3099, 0x43ff }, + { 3110, 0x5ff6 }, { 3122, 0xfffe }, { 3137, 0xd3ef }, { 3149, 0xc4ce }, + /* 0x5f00 */ + { 3157, 0x8db6 }, { 3166, 0xadbc }, { 3176, 0x63dc }, { 3185, 0x11eb }, + { 3193, 0xdf59 }, { 3204, 0x23d0 }, { 3210, 0xbeb4 }, { 3220, 0xf3db }, + { 3232, 0x1fe7 }, { 3243, 0xdbc7 }, { 3254, 0xff63 }, { 3266, 0xfae4 }, + { 3276, 0xb22b }, { 3284, 0x63f7 }, { 3295, 0xed3b }, { 3306, 0xadba }, + /* 0x6000 */ + { 3316, 0xfe01 }, { 3324, 0x7eff }, { 3338, 0xfff7 }, { 3353, 0x02bc }, + { 3359, 0x32ff }, { 3370, 0xef39 }, { 3381, 0xfffc }, { 3395, 0x8005 }, + { 3398, 0x77fb }, { 3411, 0xbcf5 }, { 3422, 0x010d }, { 3426, 0xfff7 }, + { 3441, 0xfffb }, { 3456, 0xbf3a }, { 3467, 0x0057 }, { 3472, 0xdfff }, + /* 0x6100 */ + { 3487, 0xef7b }, { 3500, 0xbd7d }, { 3512, 0xdb88 }, { 3520, 0xc8d4 }, + { 3527, 0xfff3 }, { 3541, 0xed7c }, { 3552, 0x5dee }, { 3563, 0x56ff }, + { 3575, 0x7e0d }, { 3584, 0xac5f }, { 3594, 0xff96 }, { 3606, 0xd57f }, + { 3618, 0x3fee }, { 3630, 0xc140 }, { 3634, 0x6ff9 }, { 3646, 0xffe7 }, + /* 0x6200 */ + { 3660, 0x779b }, { 3671, 0x8e77 }, { 3681, 0x6ebf }, { 3693, 0xe45d }, + { 3702, 0x6fcf }, { 3714, 0x5f1f }, { 3725, 0xe07f }, { 3735, 0xfedf }, + { 3749, 0xd7db }, { 3761, 0x01fe }, { 3769, 0xff00 }, { 3777, 0xfb7b }, + { 3790, 0xffd4 }, { 3802, 0x1fdf }, { 3814, 0xf800 }, { 3819, 0xffff }, + /* 0x6300 */ + { 3835, 0xfb8f }, { 3847, 0x007b }, { 3853, 0xbf00 }, { 3860, 0x7f5c }, + { 3871, 0xffff }, { 3887, 0x07f3 }, { 3896, 0xeba0 }, { 3904, 0x3de7 }, + { 3915, 0xf7bf }, { 3929, 0xfbd7 }, { 3942, 0xffbf }, { 3957, 0x6003 }, + { 3961, 0xfffd }, { 3976, 0xbfed }, { 3989, 0xefbb }, { 4002, 0x027f }, + /* 0x6400 */ + { 4010, 0xfe40 }, { 4018, 0xddfd }, { 4031, 0xfdff }, { 4046, 0xe2f9 }, + { 4056, 0x680b }, { 4062, 0xfb1f }, { 4074, 0xfbe3 }, { 4086, 0xaffd }, + { 4099, 0x9fa4 }, { 4108, 0xf7ed }, { 4121, 0x7a7d }, { 4132, 0xf80f }, + { 4141, 0xeebe }, { 4153, 0x0fd5 }, { 4162, 0xbb5d }, { 4173, 0xfd9f }, + /* 0x6500 */ + { 4186, 0xf2db }, { 4197, 0x3bf9 }, { 4208, 0xfe7f }, { 4222, 0xebcc }, + { 4232, 0x876a }, { 4240, 0x73fa }, { 4251, 0x95fc }, { 4261, 0x9ffc }, + { 4273, 0x109f }, { 4280, 0xfaf7 }, { 4293, 0xddb7 }, { 4305, 0xbbcd }, + { 4316, 0xf87e }, { 4327, 0xeccd }, { 4337, 0xf366 }, { 4347, 0x3c3f }, + /* 0x6600 */ + { 4357, 0xfffd }, { 4372, 0xb03f }, { 4381, 0xe9f7 }, { 4393, 0x067e }, + { 4401, 0x96ae }, { 4410, 0xfe06 }, { 4419, 0xd576 }, { 4429, 0x5fd7 }, + { 4441, 0x3fd1 }, { 4451, 0xa3f3 }, { 4461, 0xcf07 }, { 4470, 0x6fb7 }, + { 4482, 0x9fd1 }, { 4492, 0x7f44 }, { 4501, 0x7b59 }, { 4511, 0xd3dd }, + /* 0x6700 */ + { 4522, 0xaf3b }, { 4533, 0xa9bd }, { 4543, 0x7dcf }, { 4555, 0xff3a }, + { 4567, 0xfbe0 }, { 4577, 0xf6eb }, { 4589, 0xb401 }, { 4594, 0xffff }, + { 4610, 0x7afa }, { 4621, 0xb7bf }, { 4634, 0xc000 }, { 4636, 0x0ffd }, + { 4647, 0xff7f }, { 4662, 0xff1f }, { 4675, 0xfefc }, { 4688, 0x95ff }, + /* 0x6800 */ + { 4700, 0x0000 }, { 4700, 0xb5dc }, { 4710, 0xef63 }, { 4721, 0x3f3e }, + { 4732, 0xfb7f }, { 4746, 0x001b }, { 4750, 0xe800 }, { 4754, 0xfbf6 }, + { 4767, 0x9eef }, { 4779, 0xb8df }, { 4790, 0xff9f }, { 4804, 0x003f }, + { 4810, 0x7bd0 }, { 4819, 0xf5ff }, { 4833, 0xdfdb }, { 4846, 0x3fff }, + /* 0x6900 */ + { 4860, 0xfdf0 }, { 4871, 0x00bf }, { 4878, 0x8420 }, { 4881, 0xbbbd }, + { 4893, 0xdf37 }, { 4905, 0xffde }, { 4919, 0xff6d }, { 4932, 0x0ff3 }, + { 4942, 0x604c }, { 4947, 0x5efb }, { 4959, 0xfffb }, { 4974, 0xfafb }, + { 4987, 0xfe5e }, { 4999, 0x0219 }, { 5003, 0x79f4 }, { 5013, 0xf9de }, + /* 0x6a00 */ + { 5025, 0xa7f7 }, { 5037, 0xebfa }, { 5049, 0x01eb }, { 5056, 0xff34 }, + { 5067, 0xebd3 }, { 5078, 0xef73 }, { 5090, 0xafd7 }, { 5102, 0xc040 }, + { 5105, 0x72bb }, { 5115, 0xdcff }, { 5128, 0xf17f }, { 5140, 0x2fd8 }, + { 5149, 0xb8ec }, { 5158, 0xfe0b }, { 5168, 0xdda3 }, { 5178, 0x1f0b }, + /* 0x6b00 */ + { 5186, 0x8f1d }, { 5195, 0x47cf }, { 5205, 0xb12b }, { 5213, 0xffde }, + { 5227, 0x7fee }, { 5240, 0xda73 }, { 5250, 0x24ff }, { 5260, 0xcbc4 }, + { 5268, 0xf75d }, { 5280, 0xcbf2 }, { 5290, 0xecfd }, { 5302, 0xb4ed }, + { 5312, 0xbff9 }, { 5325, 0x4ddd }, { 5335, 0x99dd }, { 5345, 0xfb8d }, + /* 0x6c00 */ + { 5356, 0xbb7f }, { 5369, 0xaf7b }, { 5381, 0xddfb }, { 5394, 0xc959 }, + { 5402, 0xfc4f }, { 5413, 0xfab5 }, { 5424, 0xafe3 }, { 5435, 0x6d5f }, + { 5446, 0xffff }, { 5462, 0x3f7d }, { 5474, 0x7800 }, { 5478, 0xffdb }, + { 5492, 0xb6ff }, { 5505, 0x7eff }, { 5519, 0xfbaf }, { 5532, 0x022f }, + /* 0x6d00 */ + { 5538, 0xff9b }, { 5551, 0xefc7 }, { 5563, 0xffa5 }, { 5575, 0xffff }, + { 5591, 0x0007 }, { 5594, 0xc700 }, { 5599, 0xf7ff }, { 5614, 0xfff1 }, + { 5627, 0x7ffd }, { 5641, 0x01bf }, { 5649, 0xdc00 }, { 5654, 0xfdbc }, + { 5666, 0xbff5 }, { 5679, 0xffff }, { 5695, 0xff7f }, { 5710, 0x3eff }, + /* 0x6e00 */ + { 5723, 0x0029 }, { 5726, 0xbe00 }, { 5732, 0xf9ff }, { 5746, 0xff7f }, + { 5761, 0x6efb }, { 5773, 0xfd7e }, { 5786, 0xcbff }, { 5799, 0x039e }, + { 5806, 0xe300 }, { 5811, 0xfbdd }, { 5824, 0xccff }, { 5836, 0xf6df }, + { 5849, 0xffff }, { 5865, 0x117f }, { 5874, 0xf800 }, { 5879, 0xfbf6 }, + /* 0x6f00 */ + { 5892, 0xe7ef }, { 5905, 0xd73c }, { 5915, 0xfeef }, { 5929, 0xdfef }, + { 5943, 0xc00b }, { 5948, 0xedbf }, { 5961, 0xfedf }, { 5975, 0xfdcd }, + { 5987, 0x7bf5 }, { 5999, 0x40fd }, { 6007, 0xffff }, { 6023, 0xb75f }, + { 6035, 0xffdf }, { 6050, 0xf930 }, { 6058, 0xfbdf }, { 6072, 0xdc97 }, + /* 0x7000 */ + { 6082, 0xfef3 }, { 6095, 0xbff2 }, { 6107, 0x8fdf }, { 6119, 0xdfbf }, + { 6133, 0x177f }, { 6144, 0xede6 }, { 6155, 0x0f7f }, { 6166, 0x3553 }, + { 6174, 0x447c }, { 6181, 0x877e }, { 6191, 0xfa12 }, { 6199, 0x45bb }, + { 6208, 0xede0 }, { 6217, 0x779e }, { 6228, 0x8017 }, { 6233, 0xbfd9 }, + /* 0x7100 */ + { 6245, 0x7e55 }, { 6255, 0xde89 }, { 6264, 0xc16f }, { 6273, 0x0447 }, + { 6278, 0x7ade }, { 6289, 0xf75d }, { 6301, 0x57ff }, { 6314, 0x2905 }, + { 6319, 0x86f7 }, { 6329, 0xfe95 }, { 6340, 0x97b3 }, { 6350, 0xf32f }, + { 6361, 0xcfff }, { 6375, 0x9f75 }, { 6386, 0x71f7 }, { 6397, 0xfb17 }, + /* 0x7200 */ + { 6408, 0x34ee }, { 6417, 0xee19 }, { 6426, 0x37cc }, { 6435, 0xef61 }, + { 6445, 0x9fd6 }, { 6456, 0xef4c }, { 6466, 0xd68f }, { 6476, 0xfbdd }, + { 6489, 0x7b73 }, { 6500, 0x6def }, { 6512, 0xd7fe }, { 6525, 0xa431 }, + { 6531, 0x5e7f }, { 6543, 0x97d7 }, { 6554, 0x0f5b }, { 6563, 0xffd8 }, + /* 0x7300 */ + { 6575, 0x9d83 }, { 6583, 0x7bce }, { 6594, 0x22ec }, { 6601, 0xdcff }, + { 6614, 0x763d }, { 6624, 0xef87 }, { 6635, 0xdfe7 }, { 6648, 0xfded }, + { 6661, 0x4fff }, { 6674, 0xa0fc }, { 6682, 0x3b77 }, { 6693, 0xdbfc }, + { 6705, 0x3ded }, { 6716, 0x7fdc }, { 6728, 0x6fa9 }, { 6738, 0xf570 }, + /* 0x7400 */ + { 6747, 0x3ffb }, { 6760, 0x2c40 }, { 6764, 0xff7f }, { 6779, 0x847f }, + { 6788, 0xec57 }, { 6798, 0xdeb7 }, { 6810, 0xe69c }, { 6819, 0xf22f }, + { 6829, 0x0feb }, { 6839, 0xd5b5 }, { 6849, 0xafeb }, { 6861, 0xede7 }, + { 6873, 0x8c2f }, { 6881, 0xfff0 }, { 6893, 0x537f }, { 6904, 0xe8f0 }, + /* 0x7500 */ + { 6912, 0xb99d }, { 6922, 0xb5ff }, { 6935, 0xff66 }, { 6947, 0xe78f }, + { 6958, 0xd981 }, { 6965, 0xbe10 }, { 6972, 0x9c7c }, { 6981, 0xe3c1 }, + { 6989, 0x9cd1 }, { 6997, 0x2733 }, { 7005, 0x0cbc }, { 7012, 0xff6d }, + { 7025, 0xfcb7 }, { 7037, 0xefb7 }, { 7050, 0xa0df }, { 7059, 0xffff }, + /* 0x7600 */ + { 7075, 0xbf0b }, { 7085, 0xfe7b }, { 7098, 0xa3ff }, { 7110, 0x353f }, + { 7120, 0x13cc }, { 7127, 0x97cd }, { 7137, 0x7637 }, { 7147, 0xfb27 }, + { 7158, 0xcfd6 }, { 7169, 0x7e6c }, { 7179, 0xec50 }, { 7186, 0xed31 }, + { 7195, 0x677c }, { 7205, 0xfc1c }, { 7214, 0xf6fa }, { 7226, 0x5fbf }, + /* 0x7700 */ + { 7239, 0x0fba }, { 7248, 0xae2f }, { 7258, 0xa3ad }, { 7267, 0x7ffe }, + { 7281, 0xfcf0 }, { 7291, 0xde74 }, { 7301, 0xffef }, { 7316, 0xf200 }, + { 7321, 0xfbbf }, { 7335, 0xfea2 }, { 7345, 0x3daf }, { 7356, 0xbcff }, + { 7369, 0xf694 }, { 7378, 0x5fb9 }, { 7389, 0xf3ad }, { 7400, 0x3f8f }, + /* 0x7800 */ + { 7411, 0xf26c }, { 7420, 0xa01f }, { 7427, 0xffef }, { 7442, 0x01bf }, + { 7450, 0x7728 }, { 7458, 0x7005 }, { 7463, 0xff35 }, { 7475, 0xda03 }, + { 7482, 0xd2f9 }, { 7492, 0xc7fa }, { 7503, 0x3fbf }, { 7516, 0x5c1d }, + { 7524, 0xff3a }, { 7536, 0xec33 }, { 7545, 0xb7af }, { 7557, 0xfe9c }, + /* 0x7900 */ + { 7568, 0x5236 }, { 7575, 0x7a9f }, { 7586, 0xbffa }, { 7599, 0xe722 }, + { 7607, 0x9ff7 }, { 7620, 0xfcff }, { 7634, 0x2fbb }, { 7645, 0xb61d }, + { 7654, 0xed06 }, { 7662, 0x1dfd }, { 7673, 0x7dd7 }, { 7685, 0xefdf }, + { 7699, 0xeb23 }, { 7708, 0xf166 }, { 7717, 0x7ed9 }, { 7728, 0x0dc0 }, + /* 0x7a00 */ + { 7733, 0x3d3d }, { 7743, 0xdfbf }, { 7757, 0xc945 }, { 7764, 0xba83 }, + { 7772, 0x7dd1 }, { 7782, 0x9dd0 }, { 7790, 0x7b87 }, { 7800, 0xcf73 }, + { 7811, 0x9ff3 }, { 7823, 0xc3f5 }, { 7833, 0xdf0d }, { 7843, 0xc5fe }, + { 7854, 0x0cb3 }, { 7861, 0x8302 }, { 7865, 0xe879 }, { 7874, 0xaec0 }, + /* 0x7b00 */ + { 7881, 0xc773 }, { 7891, 0x6f0f }, { 7901, 0xfd7d }, { 7914, 0x093f }, + { 7922, 0xfff1 }, { 7935, 0x0157 }, { 7941, 0x62fb }, { 7951, 0x01ff }, + { 7960, 0xfdb4 }, { 7971, 0x3bf3 }, { 7982, 0xb013 }, { 7988, 0x43b2 }, + { 7995, 0x5ed3 }, { 8005, 0xff30 }, { 8015, 0x0fff }, { 8027, 0xeb9f }, + /* 0x7c00 */ + { 8039, 0xfeef }, { 8053, 0xf203 }, { 8060, 0x3fef }, { 8073, 0xfb89 }, + { 8083, 0x37a9 }, { 8092, 0x9e99 }, { 8101, 0xdef9 }, { 8113, 0xa72c }, + { 8121, 0x3733 }, { 8130, 0xc1f6 }, { 8139, 0x812e }, { 8145, 0xfe3e }, + { 8157, 0x5d20 }, { 8163, 0xf2f7 }, { 8175, 0xd585 }, { 8183, 0x69d7 }, + /* 0x7d00 */ + { 8193, 0xffff }, { 8209, 0xffff }, { 8225, 0xdb07 }, { 8234, 0xff6f }, + { 8248, 0xc4ff }, { 8259, 0xd97f }, { 8271, 0xefce }, { 8283, 0xbe0f }, + { 8293, 0xf17b }, { 8304, 0xf05e }, { 8313, 0xf6cf }, { 8325, 0xffb7 }, + { 8339, 0x5ef7 }, { 8351, 0xef84 }, { 8360, 0xd7cb }, { 8371, 0x0edf }, + /* 0x7e00 */ + { 8381, 0xff08 }, { 8390, 0xfcff }, { 8404, 0xee3f }, { 8416, 0xffff }, + { 8432, 0x13ff }, { 8443, 0xd7ff }, { 8457, 0xaf0f }, { 8467, 0x7ffd }, + { 8481, 0xbdc7 }, { 8492, 0x1ffa }, { 8503, 0x0000 }, { 8503, 0x0000 }, + { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, + /* 0x7f00 */ + { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0xe740 }, + { 8510, 0xbd38 }, { 8519, 0xf933 }, { 8529, 0x7feb }, { 8542, 0xfeed }, + { 8555, 0x7fe8 }, { 8566, 0x7c76 }, { 8576, 0xb3f7 }, { 8588, 0xffef }, + { 8603, 0xfeaf }, { 8616, 0xd8b7 }, { 8626, 0xff6f }, { 8640, 0xfbbf }, + /* 0x8000 */ + { 8654, 0xf8fb }, { 8666, 0xdbf7 }, { 8679, 0x1752 }, { 8686, 0xe2f9 }, + { 8696, 0x85c8 }, { 8702, 0x7547 }, { 8711, 0x9090 }, { 8715, 0xe3ef }, + { 8727, 0x9ef4 }, { 8737, 0x3f6d }, { 8748, 0xee2e }, { 8758, 0x0536 }, + { 8764, 0xf7bc }, { 8776, 0x7ff3 }, { 8789, 0xa07b }, { 8797, 0x7f3f }, + /* 0x8100 */ + { 8810, 0x0567 }, { 8817, 0xeb60 }, { 8825, 0xbabe }, { 8836, 0x6601 }, + { 8841, 0xfcd8 }, { 8851, 0x583f }, { 8860, 0xcaf7 }, { 8871, 0x87df }, + { 8882, 0xbfcd }, { 8894, 0xffa0 }, { 8904, 0x5bcd }, { 8914, 0xfebf }, + { 8928, 0xb6fd }, { 8940, 0xefa7 }, { 8952, 0x77ef }, { 8965, 0xdf9c }, + /* 0x8200 */ + { 8976, 0x3fb7 }, { 8988, 0xf877 }, { 8999, 0x9d27 }, { 9008, 0xb7fc }, + { 9020, 0xcab5 }, { 9029, 0xdfef }, { 9043, 0xfb5a }, { 9054, 0xf1b6 }, + { 9064, 0xec39 }, { 9073, 0xef1f }, { 9085, 0xfbbf }, { 9099, 0x7ffb }, + { 9113, 0x000d }, { 9116, 0xdafe }, { 9128, 0xbdfb }, { 9141, 0x4e7f }, + /* 0x8300 */ + { 9152, 0x33ff }, { 9164, 0x5ac0 }, { 9170, 0xbff5 }, { 9183, 0x9ffe }, + { 9196, 0xffbf }, { 9211, 0x005f }, { 9217, 0x0000 }, { 9217, 0xfdf8 }, + { 9229, 0xffca }, { 9241, 0x6ffd }, { 9254, 0xcffd }, { 9267, 0xa001 }, + { 9270, 0xdfff }, { 9285, 0xfbf2 }, { 9297, 0xdfbf }, { 9311, 0xff7f }, + /* 0x8400 */ + { 9326, 0xfeda }, { 9338, 0x080f }, { 9343, 0xba08 }, { 9349, 0xbfff }, + { 9364, 0x7afd }, { 9376, 0xeed7 }, { 9388, 0xfbeb }, { 9401, 0x67f9 }, + { 9412, 0xe044 }, { 9417, 0xff93 }, { 9429, 0xdf97 }, { 9441, 0x9f57 }, + { 9452, 0xfef7 }, { 9466, 0x08df }, { 9474, 0xdf80 }, { 9482, 0xfedf }, + /* 0x8500 */ + { 9496, 0xffc5 }, { 9508, 0xf7fe }, { 9522, 0xfffb }, { 9537, 0x6803 }, + { 9542, 0x67fb }, { 9554, 0x6bfa }, { 9565, 0x7fff }, { 9580, 0x5fe2 }, + { 9590, 0xffff }, { 9606, 0xff73 }, { 9619, 0x87df }, { 9630, 0xe7fb }, + { 9643, 0xebfd }, { 9656, 0xf7a7 }, { 9668, 0xbf7e }, { 9681, 0xefc7 }, + /* 0x8600 */ + { 9693, 0x1ef3 }, { 9703, 0xdf82 }, { 9712, 0x76ff }, { 9725, 0xdf7e }, + { 9738, 0x79c9 }, { 9747, 0xda7d }, { 9758, 0xefbe }, { 9771, 0x1e9b }, + { 9780, 0x7ce0 }, { 9788, 0x77fb }, { 9801, 0x87be }, { 9811, 0xfffb }, + { 9826, 0x1bff }, { 9838, 0xffdb }, { 9852, 0x3f5c }, { 9862, 0x4fe0 }, + /* 0x8700 */ + { 9870, 0x7fff }, { 9885, 0x5f0e }, { 9894, 0x77ff }, { 9908, 0xddbf }, + { 9921, 0xf04f }, { 9930, 0xffff }, { 9946, 0xffff }, { 9962, 0x0ff8 }, + { 9971, 0xa3be }, { 9981, 0xfddf }, { 9995, 0xfc1c }, { 10004, 0xfffd }, + { 10019, 0x1f7d }, { 10030, 0xfb9e }, { 10042, 0xbdff }, { 10056, 0xdedc }, + /* 0x8800 */ + { 10067, 0x3f6f }, { 10079, 0xbafb }, { 10091, 0xdf7f }, { 10105, 0xfbef }, + { 10119, 0x7d1b }, { 10129, 0x2eec }, { 10138, 0xaf8e }, { 10148, 0xf2f7 }, + { 10160, 0x7b0f }, { 10170, 0xcfee }, { 10182, 0x1d96 }, { 10190, 0x77c6 }, + { 10200, 0x7e07 }, { 10209, 0xfff5 }, { 10223, 0xd982 }, { 10230, 0x7fdf }, + /* 0x8900 */ + { 10244, 0x5ee6 }, { 10254, 0xc7ff }, { 10267, 0xfeee }, { 10280, 0x79ef }, + { 10292, 0x9a56 }, { 10300, 0xffcf }, { 10314, 0xfe5f }, { 10327, 0xde5e }, + { 10338, 0x896e }, { 10346, 0xf9e8 }, { 10356, 0xf45e }, { 10366, 0xe6c4 }, + { 10374, 0x0001 }, { 10375, 0xbe7c }, { 10386, 0x3b7f }, { 10398, 0xdddf }, + /* 0x8a00 */ + { 10411, 0xd59d }, { 10421, 0xe9ef }, { 10433, 0x34ac }, { 10440, 0xde53 }, + { 10450, 0xf573 }, { 10461, 0x4bf7 }, { 10472, 0x7b4f }, { 10483, 0x9eff }, + { 10496, 0xb8fe }, { 10507, 0x476e }, { 10516, 0x0dfb }, { 10526, 0xff45 }, + { 10537, 0xabfd }, { 10549, 0xfbfe }, { 10563, 0xe9d7 }, { 10574, 0xddff }, + /* 0x8b00 */ + { 10588, 0xedf7 }, { 10601, 0x7fff }, { 10616, 0xddfd }, { 10629, 0x7eeb }, + { 10641, 0xcfe7 }, { 10653, 0xb7ff }, { 10667, 0xbde9 }, { 10678, 0xef91 }, + { 10688, 0x5d75 }, { 10698, 0xd77c }, { 10709, 0x0000 }, { 10709, 0x0000 }, + { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, + /* 0x8c00 */ + { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0xfa80 }, + { 10716, 0xffee }, { 10730, 0xb4f1 }, { 10739, 0xbf76 }, { 10751, 0x2fef }, + { 10763, 0xb677 }, { 10774, 0x77bf }, { 10787, 0x9fbf }, { 10800, 0xfffd }, + { 10815, 0x95bf }, { 10826, 0xf6ae }, { 10837, 0x75ff }, { 10850, 0x7f3b }, + /* 0x8d00 */ + { 10862, 0xa7f5 }, { 10873, 0x0af9 }, { 10881, 0x0000 }, { 10881, 0x0000 }, + { 10881, 0x0000 }, { 10881, 0x0000 }, { 10881, 0xfbd0 }, { 10891, 0x2bdd }, + { 10901, 0xf633 }, { 10911, 0x9a7f }, { 10922, 0xfdab }, { 10934, 0xd6fc }, + { 10945, 0xf9e6 }, { 10956, 0xbfeb }, { 10969, 0xdfdf }, { 10983, 0xf41f }, + /* 0x8e00 */ + { 10993, 0xa6fd }, { 11004, 0xffff }, { 11020, 0x4aff }, { 11031, 0xf37b }, + { 11043, 0x7fb7 }, { 11056, 0xfef9 }, { 11069, 0xb6ff }, { 11082, 0x1d5c }, + { 11090, 0x7ff6 }, { 11103, 0xe5ff }, { 11116, 0x1f7b }, { 11127, 0x2404 }, + { 11130, 0xbe05 }, { 11138, 0xf99e }, { 11149, 0xdbe3 }, { 11160, 0xdff2 }, + /* 0x8f00 */ + { 11172, 0x6fef }, { 11185, 0xfdff }, { 11200, 0xd679 }, { 11210, 0xcbfc }, + { 11221, 0xebfd }, { 11234, 0xefff }, { 11249, 0x001f }, { 11254, 0x0000 }, + { 11254, 0x0000 }, { 11254, 0x9800 }, { 11257, 0xe148 }, { 11263, 0x8017 }, + { 11268, 0x6a74 }, { 11276, 0x00fe }, { 11283, 0x6d7f }, { 11295, 0xfdf1 }, + /* 0x9000 */ + { 11307, 0xb87f }, { 11318, 0xfef3 }, { 11331, 0xe01f }, { 11339, 0xf176 }, + { 11349, 0xee96 }, { 11359, 0x7b3f }, { 11371, 0xeb8d }, { 11381, 0xfffd }, + { 11396, 0xadff }, { 11409, 0xcbb3 }, { 11419, 0x84ef }, { 11428, 0xe17f }, + { 11439, 0x4daa }, { 11447, 0xbff0 }, { 11458, 0xbf3f }, { 11471, 0xfe3f }, + /* 0x9100 */ + { 11484, 0xebff }, { 11498, 0xffd7 }, { 11512, 0xffdf }, { 11527, 0xcf7f }, + { 11540, 0xfffb }, { 11555, 0x85ed }, { 11564, 0xd73f }, { 11576, 0x07bc }, + { 11584, 0xaeff }, { 11597, 0xfe0f }, { 11608, 0xfdaf }, { 11621, 0x76bf }, + { 11633, 0xfaef }, { 11646, 0x37bb }, { 11657, 0x7fdc }, { 11669, 0xa3ba }, + /* 0x9200 */ + { 11678, 0xb6ff }, { 11691, 0x56f7 }, { 11702, 0x60f8 }, { 11709, 0xe7df }, + { 11722, 0xff61 }, { 11733, 0x4cdf }, { 11743, 0xb0fb }, { 11753, 0xff45 }, + { 11764, 0x7ded }, { 11776, 0x3ffa }, { 11788, 0x1fff }, { 11801, 0x18fc }, + { 11809, 0xffff }, { 11825, 0xe3af }, { 11836, 0xc7d3 }, { 11846, 0xdf83 }, + /* 0x9300 */ + { 11856, 0xfb57 }, { 11868, 0xef7d }, { 11881, 0xefff }, { 11896, 0x1378 }, + { 11903, 0xfec0 }, { 11912, 0x5ff7 }, { 11925, 0x34bb }, { 11934, 0x5ee3 }, + { 11944, 0xf70d }, { 11954, 0xeff6 }, { 11967, 0xd7fe }, { 11980, 0x00bf }, + { 11987, 0xf59d }, { 11998, 0xf7f7 }, { 12012, 0x51de }, { 12021, 0xffe0 }, + /* 0x9400 */ + { 12032, 0xfec9 }, { 12043, 0x037f }, { 12052, 0x5f01 }, { 12059, 0xbfef }, + { 12073, 0x9ff1 }, { 12084, 0x60a7 }, { 12091, 0xef1d }, { 12102, 0xf1ff }, + { 12115, 0x000f }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, + { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, + /* 0x9500 */ + { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, + { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x3c80 }, + { 12124, 0xfb4d }, { 12135, 0xd91f }, { 12145, 0x7b3a }, { 12155, 0xfee3 }, + { 12167, 0x3fe9 }, { 12178, 0xdc7f }, { 12190, 0x003f }, { 12196, 0x0000 }, + /* 0x9600 */ + { 12196, 0x0000 }, { 12196, 0x5000 }, { 12198, 0xf51f }, { 12209, 0xbe07 }, + { 12218, 0xfc1d }, { 12228, 0xf91b }, { 12238, 0xbc1e }, { 12247, 0x71ff }, + { 12259, 0x6ff9 }, { 12271, 0x5bbe }, { 12282, 0x5796 }, { 12291, 0x9b1b }, + { 12300, 0x7fff }, { 12315, 0xfffc }, { 12329, 0x872e }, { 12337, 0xafe7 }, + /* 0x9700 */ + { 12349, 0xebf5 }, { 12361, 0xf34f }, { 12372, 0xdffd }, { 12386, 0xe725 }, + { 12395, 0x0bdc }, { 12403, 0x5d44 }, { 12410, 0x5747 }, { 12419, 0xfddd }, + { 12432, 0xed3f }, { 12444, 0x7790 }, { 12452, 0x7d7f }, { 12465, 0x8ac8 }, + { 12471, 0xfafa }, { 12483, 0xf3f9 }, { 12495, 0x202a }, { 12499, 0xef4b }, + /* 0x9800 */ + { 12510, 0xf5ff }, { 12524, 0x79cf }, { 12535, 0xabd3 }, { 12545, 0x0ba5 }, + { 12552, 0xf77a }, { 12564, 0xfb8f }, { 12576, 0x8ebd }, { 12586, 0x001f }, + { 12591, 0x0000 }, { 12591, 0x0000 }, { 12591, 0xf300 }, { 12597, 0xfd4e }, + { 12608, 0x1a57 }, { 12616, 0x8800 }, { 12618, 0xaeac }, { 12627, 0x7654 }, + /* 0x9900 */ + { 12635, 0x17ad }, { 12644, 0xcdff }, { 12657, 0xffb2 }, { 12669, 0xf42f }, + { 12679, 0x5baa }, { 12688, 0xdbff }, { 12702, 0x0002 }, { 12703, 0x0000 }, + { 12703, 0x0000 }, { 12703, 0x73c0 }, { 12710, 0xf9ea }, { 12721, 0x2e3f }, + { 12731, 0xfa8e }, { 12741, 0xbbff }, { 12755, 0x76bc }, { 12765, 0xffd3 }, + /* 0x9a00 */ + { 12778, 0xeefe }, { 12791, 0x7e72 }, { 12801, 0x7ebd }, { 12813, 0xe7f7 }, + { 12826, 0xf77f }, { 12840, 0xcefd }, { 12852, 0x0ff5 }, { 12862, 0x0000 }, + { 12862, 0x0000 }, { 12862, 0x0000 }, { 12862, 0xa900 }, { 12866, 0xdb9b }, + { 12877, 0xa4c7 }, { 12885, 0x917f }, { 12895, 0xf8ca }, { 12904, 0x7ece }, + /* 0x9b00 */ + { 12915, 0x7d7a }, { 12926, 0xc7e7 }, { 12937, 0xcbbd }, { 12948, 0xdcae }, + { 12958, 0xfd7e }, { 12971, 0x8f76 }, { 12981, 0x91d3 }, { 12989, 0x7cf3 }, + { 13000, 0x01e5 }, { 13006, 0x4c2f }, { 13014, 0xed77 }, { 13026, 0xa360 }, + { 13032, 0x07db }, { 13041, 0x5ef8 }, { 13051, 0x1df7 }, { 13062, 0x2181 }, + /* 0x9c00 */ + { 13066, 0x6be0 }, { 13074, 0x309c }, { 13080, 0x3b3a }, { 13089, 0xfade }, + { 13101, 0x7f53 }, { 13112, 0xc3f5 }, { 13122, 0x61cd }, { 13130, 0x07ba }, + { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 }, + { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x26e0 }, { 13144, 0xbefe }, + /* 0x9d00 */ + { 13157, 0x03f9 }, { 13165, 0xebb5 }, { 13176, 0xe36d }, { 13186, 0xe9cb }, + { 13196, 0x9c2f }, { 13205, 0xbfde }, { 13218, 0x9f83 }, { 13227, 0xabbf }, + { 13239, 0x1ff7 }, { 13251, 0xffd5 }, { 13264, 0xb7df }, { 13277, 0xdffe }, + { 13291, 0xfdae }, { 13303, 0xffef }, { 13318, 0xfb7e }, { 13331, 0xeffd }, + /* 0x9e00 */ + { 13345, 0xaaff }, { 13357, 0x6ebf }, { 13369, 0x0000 }, { 13369, 0x0000 }, + { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0xb620 }, + { 13375, 0x7fcd }, { 13387, 0xbe9e }, { 13398, 0x62b3 }, { 13406, 0x58f1 }, + { 13414, 0xf10d }, { 13422, 0xfd7b }, { 13435, 0xe9f1 }, { 13445, 0xbefd }, + /* 0x9f00 */ + { 13458, 0xc6c3 }, { 13466, 0x5f6d }, { 13477, 0xff3d }, { 13490, 0x69ff }, + { 13502, 0xffcf }, { 13516, 0xfbf4 }, { 13528, 0xdcfb }, { 13540, 0x4ff7 }, + { 13552, 0x2000 }, { 13553, 0x1137 }, { 13560, 0x0015 }, +}; +static const Summary16 big5_uni2indx_pagefa[1] = { + /* 0xfa00 */ + { 13563, 0x3000 }, +}; +static const Summary16 big5_uni2indx_pagefe[23] = { + /* 0xfe00 */ + { 13565, 0x0000 }, { 13565, 0x0000 }, { 13565, 0x0000 }, { 13565, 0xfffb }, + { 13580, 0xfe1f }, { 13592, 0xfef5 }, { 13605, 0x0e7f }, { 13615, 0x0000 }, + { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, + { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, + /* 0xff00 */ + { 13615, 0xff7a }, { 13628, 0xffff }, { 13644, 0xffff }, { 13660, 0x97ff }, + { 13673, 0xfffe }, { 13688, 0x3fff }, { 13702, 0x0010 }, +}; + +static int +big5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0000 && wc < 0x0100) + summary = &big5_uni2indx_page00[(wc>>4)]; + else if (wc >= 0x0200 && wc < 0x0460) + summary = &big5_uni2indx_page02[(wc>>4)-0x020]; + else if (wc >= 0x2000 && wc < 0x22c0) + summary = &big5_uni2indx_page20[(wc>>4)-0x200]; + else if (wc >= 0x2400 && wc < 0x2650) + summary = &big5_uni2indx_page24[(wc>>4)-0x240]; + else if (wc >= 0x3000 && wc < 0x33e0) + summary = &big5_uni2indx_page30[(wc>>4)-0x300]; + else if (wc >= 0x4e00 && wc < 0x9fb0) + summary = &big5_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0xfa00 && wc < 0xfa10) + summary = &big5_uni2indx_pagefa[(wc>>4)-0xfa0]; + else if (wc >= 0xfe00 && wc < 0xff70) + summary = &big5_uni2indx_pagefe[(wc>>4)-0xfe0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = big5_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/big5_2003.h b/jni/parted/libiconv/lib/big5_2003.h new file mode 100755 index 0000000..a42e1cd --- /dev/null +++ b/jni/parted/libiconv/lib/big5_2003.h @@ -0,0 +1,475 @@ +/* + * Copyright (C) 1999-2001, 2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * BIG5-2003 + */ + +/* + * BIG5-2003 is a slightly extended and slightly modified version of BIG5. + * It is actually nearer to Microsoft CP950 than to BIG5. The differences + * between EASTASIA/OTHER/BIG5.TXT found on ftp.unicode.org and BIG5-2003.TXT + * are as follows: + * + * 1. Some characters in the symbols area (0xA140..0xA2CE) are defined + * differently: + * + * code BIG5.TXT BIG5-2003.TXT + * 0xA145 0x2022 # BULLET 0x2027 # HYPHENATION POINT + * 0xA14E 0xFF64 # HALFWIDTH IDEOGRAPHIC COMMA + * 0xFE51 # SMALL IDEOGRAPHIC COMMA + * 0xA156 0x2013 # EN DASH 0x2015 # HORIZONTAL BAR + * 0xA15A --- 0x2574 # BOX DRAWINGS LIGHT LEFT + * 0xA1C3 --- 0xFFE3 # FULLWIDTH MACRON + * 0xA1C5 --- 0x02CD # MODIFIER LETTER LOW MACRON + * 0xA1E3 0x223C # TILDE OPERATOR 0xFF5E # FULLWIDTH TILDE + * 0xA1F2 0x2641 # EARTH 0x2295 # CIRCLED PLUS + * 0xA1F3 0x2609 # SUN 0x2299 # CIRCLED DOT OPERATOR + * 0xA1FE --- 0xFF0F # FULLWIDTH SOLIDUS + * 0xA240 --- 0xFF3C # FULLWIDTH REVERSE SOLIDUS + * 0xA241 0xFF0F # FULLWIDTH SOLIDUS 0x2215 # DIVISION SLASH + * 0xA242 0xFF3C # FULLWIDTH REVERSE SOLIDUS + * 0xFE68 # SMALL REVERSE SOLIDUS + * 0xA244 0x00A5 # YEN SIGN 0xFFE5 # FULLWIDTH YEN SIGN + * 0xA246 0x00A2 # CENT SIGN 0xFFE0 # FULLWIDTH CENT SIGN + * 0xA247 0x00A3 # POUND SIGN 0xFFE1 # FULLWIDTH POUND SIGN + * 0xA2A4 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL + * 0x2501 # BOX DRAWINGS HEAVY HORIZONTAL + * 0xA2A5 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + * 0x251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + * 0xA2A6 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + * 0x253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + * 0xA2A7 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + * 0x2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + * 0xA2CC --- 0x3038 # HANGZHOU NUMERAL TEN + * 0xA2CD 0x5344 0x3039 # HANGZHOU NUMERAL TWENTY + * 0xA2CE --- 0x303A # HANGZHOU NUMERAL THIRTY + * + * 2. A control symbols area is added: + * + * code + * 0xA3C0..0xA3E0 U+2400..U+2421 + * + * 3. The Euro sign is added: + * + * code + * 0xA3E1 0x20AC # EURO SIGN + * + * 4. Some characters in the main area are defined differently: + * + * code BIG5.TXT BIG5-2003.TXT + * 0xC255 0x5F5D 0x5F5E + * + * 5. The area 0xC6A1..0xC7FE is organized differently: + * + * code + * 0xC6A1..0xC6BE numerals (was in BIG5.TXT at 0xC7E9..0xC7FC) + * 0xC6BF..0xC6D7 radicals + * 0xC6D8..0xC6E6 rarely used symbols + * 0xC6E7..0xC77A hiragana (U+3041..U+3093, was in BIG5.TXT at 0xC6A5..0xC6F7) + * 0xC77B..0xC7F2 katakana (U+30A1..U+30F6, was in BIG5.TXT at 0xC6F8..0xC7B0) + * + * 6. Some characters are added at 0xF9D6..0xF9DC. + * + * 7. Box drawing characters are added at 0xF9DD..0xF9FE. + * + * Note: 4 of these characters are mapped in a non-inversible way, because + * Unicode does not yet include the corresponding characters: + * + * code Unicode approximation + * 0xF9FA BOX DRAWINGS DOUBLE ARC DOWN AND RIGHT 0x2554 + * 0xF9FB BOX DRAWINGS DOUBLE ARC DOWN AND LEFT 0x2557 + * 0xF9FC BOX DRAWINGS DOUBLE ARC UP AND RIGHT 0x255A + * 0xF9FD BOX DRAWINGS DOUBLE ARC UP AND LEFT 0x255D + * + * 8. Private area mappings are added: + * + * code Unicode + * 0x{81..8D}{40..7E,A1..FE} U+EEB8..U+F6B0 + * 0x{8E..A0}{40..7E,A1..FE} U+E311..U+EEB7 + * 0x{FA..FE}{40..7E,A1..FE} U+E000..U+E310 + * + * These mappings are not contained in the BSMI Big5-2003 standard. However, + * they were contained in a draft of it. + */ + +static const unsigned short big5_2003_2uni_pagea1[314] = { + /* 0xa1 */ + 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2027, 0xff1b, 0xff1a, + 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xfe51, 0xfe52, + 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2015, 0xfe31, + 0x2014, 0xfe33, 0x2574, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35, + 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39, + 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d, + 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41, + 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0xfe5b, + 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d, + 0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7, + 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605, + 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, 0x32a3, 0x2105, + 0x203e, 0xffe3, 0xff3f, 0x02cd, 0xfe49, 0xfe4a, 0xfe4d, 0xfe4e, + 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, 0xff0d, 0x00d7, + 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, 0x2266, 0x2267, + 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, 0xfe64, 0xfe65, + 0xfe66, 0xff5e, 0x2229, 0x222a, 0x22a5, 0x2220, 0x221f, 0x22bf, + 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, 0x2640, 0x2642, + 0x2295, 0x2299, 0x2191, 0x2193, 0x2190, 0x2192, 0x2196, 0x2197, + 0x2199, 0x2198, 0x2225, 0x2223, 0xff0f, + /* 0xa2 */ + 0xff3c, 0x2215, 0xfe68, 0xff04, 0xffe5, 0x3012, 0xffe0, 0xffe1, + 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5, + 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4, + 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7, + 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, + 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a, + 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500, + 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x256e, + 0x2570, 0x256f, 0x2501, 0x251d, 0x253f, 0x2525, 0x25e2, 0x25e3, + 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10, 0xff11, 0xff12, + 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0x2160, + 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, + 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, + 0x3028, 0x3029, 0x3038, 0x3039, 0x303a, 0xff21, 0xff22, 0xff23, + 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, + 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, + 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff41, + 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, + 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, + 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, +}; + +static const unsigned short big5_2003_2uni_pagec6[70] = { + /* 0xc6a1 */ + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, + 0x2468, 0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, + 0x247a, 0x247b, 0x247c, 0x247d, 0x2170, 0x2171, 0x2172, 0x2173, + 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x2f02, 0x2f03, + 0x2f05, 0x2f07, 0x2f0c, 0x2f0d, 0x2f0e, 0x2f13, 0x2f16, 0x2f19, + 0x2f1b, 0x2f22, 0x2f27, 0x2f2e, 0x2f33, 0x2f34, 0x2f35, 0x2f39, + 0x2f3a, 0x2f41, 0x2f46, 0x2f67, 0x2f68, 0x2fa1, 0x2faa, 0x00a8, + 0xff3e, 0x30fd, 0x30fe, 0x309d, 0x309e, 0xfffd, 0xfffd, 0x3005, + 0x3006, 0x3007, 0x30fc, 0xff3b, 0xff3d, 0x273d, +}; + +static const unsigned short big5_2003_2uni_pagef9[41] = { + /* 0xf9d6 */ + 0x7881, 0x92b9, 0x88cf, 0x58bb, 0x6052, 0x7ca7, 0x5afa, + /* 0xf9dd */ + 0x2554, 0x2566, 0x2557, 0x2560, 0x256c, 0x2563, 0x255a, 0x2569, + 0x255d, 0x2552, 0x2564, 0x2555, 0x255e, 0x256a, 0x2561, 0x2558, + 0x2567, 0x255b, 0x2553, 0x2565, 0x2556, 0x255f, 0x256b, 0x2562, + 0x2559, 0x2568, 0x255c, 0x2551, 0x2550, + 0x2554, 0x2557, 0x255a, 0x255d, /* not invertible */ + 0x2593, +}; + +static int +big5_2003_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (BIG5 extended) */ + if (c >= 0x81 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + if (c >= 0xa1) { + if (c < 0xa3) { + unsigned int i = 157 * (c - 0xa1) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + unsigned short wc = big5_2003_2uni_pagea1[i]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + if (!((c == 0xc6 && c2 >= 0xa1) || c == 0xc7)) { + if (!(c == 0xc2 && c2 == 0x55)) { + int ret = big5_mbtowc(conv,pwc,s,2); + if (ret != RET_ILSEQ) + return ret; + if (c == 0xa3) { + if (c2 >= 0xc0 && c2 <= 0xe1) { + *pwc = (c2 == 0xe1 ? 0x20ac : c2 == 0xe0 ? 0x2421 : 0x2340 + c2); + return 2; + } + } else if (c == 0xf9) { + if (c2 >= 0xd6) { + *pwc = big5_2003_2uni_pagef9[c2-0xd6]; + return 2; + } + } else if (c >= 0xfa) { + *pwc = 0xe000 + 157 * (c - 0xfa) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + return 2; + } + } else { + /* c == 0xc2 && c2 == 0x55. */ + *pwc = 0x5f5e; + return 2; + } + } else { + /* (c == 0xc6 && c2 >= 0xa1) || c == 0xc7. */ + unsigned int i = 157 * (c - 0xc6) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + if (i < 133) { + /* 63 <= i < 133. */ + unsigned short wc = big5_2003_2uni_pagec6[i-63]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } else if (i < 216) { + /* 133 <= i < 216. Hiragana. */ + *pwc = 0x3041 - 133 + i; + return 2; + } else if (i < 302) { + /* 216 <= i < 302. Katakana. */ + *pwc = 0x30a1 - 216 + i; + return 2; + } + } + } else { + /* 0x81 <= c < 0xa1. */ + *pwc = (c >= 0x8e ? 0xdb18 : 0xeeb8) + 157 * (c - 0x81) + + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + return 2; + } + } + } + } + return RET_ILSEQ; +} + +static const unsigned char big5_2003_2charset_page25[29] = { + /* 0x2550 */ + 0xf9, 0xf8, 0xe6, 0xef, 0xdd, 0xe8, 0xf1, 0xdf, + 0xec, 0xf5, 0xe3, 0xee, 0xf7, 0xe5, 0xe9, 0xf2, + 0xe0, 0xeb, 0xf4, 0xe2, 0xe7, 0xf0, 0xde, 0xed, + 0xf6, 0xe4, 0xea, 0xf3, 0xe1, +}; + +static int +big5_2003_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (BIG5 extended) */ + switch (wc >> 8) { + case 0x00: + if (wc == 0x00a8) { buf[0] = 0xc6; buf[1] = 0xd8; ret = 2; break; } + if (wc == 0x00a2 || wc == 0x00a3 || wc == 0x00a5) + return RET_ILUNI; + break; + case 0x02: + if (wc == 0x02cd) { buf[0] = 0xa1; buf[1] = 0xc5; ret = 2; break; } + break; + case 0x04: + return RET_ILUNI; + case 0x20: + if (wc == 0x2015) { buf[0] = 0xa1; buf[1] = 0x56; ret = 2; break; } + if (wc == 0x2027) { buf[0] = 0xa1; buf[1] = 0x45; ret = 2; break; } + if (wc == 0x20ac) { buf[0] = 0xa3; buf[1] = 0xe1; ret = 2; break; } + if (wc == 0x2013 || wc == 0x2022) + return RET_ILUNI; + break; + case 0x21: + if (wc >= 0x2170 && wc <= 0x2179) { + buf[0] = 0xc6; buf[1] = wc - 0x20bb; ret = 2; + break; + } + break; + case 0x22: + if (wc == 0x2215) { buf[0] = 0xa2; buf[1] = 0x41; ret = 2; break; } + if (wc == 0x2295) { buf[0] = 0xa1; buf[1] = 0xf2; ret = 2; break; } + if (wc == 0x2299) { buf[0] = 0xa1; buf[1] = 0xf3; ret = 2; break; } + if (wc == 0x223c) + return RET_ILUNI; + break; + case 0x24: + if (wc <= 0x241f) { buf[0] = 0xa3; buf[1] = wc - 0x2340; ret = 2; break; } + if (wc == 0x2421) { buf[0] = 0xa3; buf[1] = 0xe0; ret = 2; break; } + if (wc >= 0x2460 && wc <= 0x2469) { + buf[0] = 0xc6; buf[1] = wc - 0x23bf; ret = 2; + break; + } + if (wc >= 0x2474 && wc <= 0x247d) { + buf[0] = 0xc6; buf[1] = wc - 0x23c9; ret = 2; + break; + } + break; + case 0x25: + if (wc == 0x2501) { buf[0] = 0xa2; buf[1] = 0xa4; ret = 2; break; } + if (wc == 0x251d) { buf[0] = 0xa2; buf[1] = 0xa5; ret = 2; break; } + if (wc == 0x2525) { buf[0] = 0xa2; buf[1] = 0xa7; ret = 2; break; } + if (wc == 0x253f) { buf[0] = 0xa2; buf[1] = 0xa6; ret = 2; break; } + if (wc >= 0x2550 && wc <= 0x256c) { + buf[0] = 0xf9; buf[1] = big5_2003_2charset_page25[wc-0x2550]; ret = 2; + break; + } + if (wc == 0x2574) { buf[0] = 0xa1; buf[1] = 0x5a; ret = 2; break; } + if (wc == 0x2593) { buf[0] = 0xf9; buf[1] = 0xfe; ret = 2; break; } + break; + case 0x26: + if (wc == 0x2609 || wc == 0x2641) + return RET_ILUNI; + break; + case 0x27: + if (wc == 0x273d) { buf[0] = 0xc6; buf[1] = 0xe6; ret = 2; break; } + break; + case 0x2f: + if (wc == 0x2f02) { buf[0] = 0xc6; buf[1] = 0xbf; ret = 2; break; } + if (wc == 0x2f03) { buf[0] = 0xc6; buf[1] = 0xc0; ret = 2; break; } + if (wc == 0x2f05) { buf[0] = 0xc6; buf[1] = 0xc1; ret = 2; break; } + if (wc == 0x2f07) { buf[0] = 0xc6; buf[1] = 0xc2; ret = 2; break; } + if (wc == 0x2f0c) { buf[0] = 0xc6; buf[1] = 0xc3; ret = 2; break; } + if (wc == 0x2f0d) { buf[0] = 0xc6; buf[1] = 0xc4; ret = 2; break; } + if (wc == 0x2f0e) { buf[0] = 0xc6; buf[1] = 0xc5; ret = 2; break; } + if (wc == 0x2f13) { buf[0] = 0xc6; buf[1] = 0xc6; ret = 2; break; } + if (wc == 0x2f16) { buf[0] = 0xc6; buf[1] = 0xc7; ret = 2; break; } + if (wc == 0x2f19) { buf[0] = 0xc6; buf[1] = 0xc8; ret = 2; break; } + if (wc == 0x2f1b) { buf[0] = 0xc6; buf[1] = 0xc9; ret = 2; break; } + if (wc == 0x2f22) { buf[0] = 0xc6; buf[1] = 0xca; ret = 2; break; } + if (wc == 0x2f27) { buf[0] = 0xc6; buf[1] = 0xcb; ret = 2; break; } + if (wc == 0x2f2e) { buf[0] = 0xc6; buf[1] = 0xcc; ret = 2; break; } + if (wc == 0x2f33) { buf[0] = 0xc6; buf[1] = 0xcd; ret = 2; break; } + if (wc == 0x2f34) { buf[0] = 0xc6; buf[1] = 0xce; ret = 2; break; } + if (wc == 0x2f35) { buf[0] = 0xc6; buf[1] = 0xcf; ret = 2; break; } + if (wc == 0x2f39) { buf[0] = 0xc6; buf[1] = 0xd0; ret = 2; break; } + if (wc == 0x2f3a) { buf[0] = 0xc6; buf[1] = 0xd1; ret = 2; break; } + if (wc == 0x2f41) { buf[0] = 0xc6; buf[1] = 0xd2; ret = 2; break; } + if (wc == 0x2f46) { buf[0] = 0xc6; buf[1] = 0xd3; ret = 2; break; } + if (wc == 0x2f67) { buf[0] = 0xc6; buf[1] = 0xd4; ret = 2; break; } + if (wc == 0x2f68) { buf[0] = 0xc6; buf[1] = 0xd5; ret = 2; break; } + if (wc == 0x2fa1) { buf[0] = 0xc6; buf[1] = 0xd6; ret = 2; break; } + if (wc == 0x2faa) { buf[0] = 0xc6; buf[1] = 0xd7; ret = 2; break; } + break; + case 0x30: + if (wc >= 0x3005 && wc <= 0x3007) { + buf[0] = 0xc6; buf[1] = wc - 0x2f25; ret = 2; + break; + } + if (wc >= 0x3038 && wc <= 0x303a) { + buf[0] = 0xa2; buf[1] = wc - 0x2f6c; ret = 2; + break; + } + if (wc >= 0x3041 && wc <= 0x3093) { + if (wc < 0x3059) { + buf[0] = 0xc6; buf[1] = wc - 0x2f5a; + } else { + buf[0] = 0xc7; buf[1] = wc - 0x3019; + } + ret = 2; + break; + } + if (wc == 0x309d) { buf[0] = 0xc6; buf[1] = 0xdc; ret = 2; break; } + if (wc == 0x309e) { buf[0] = 0xc6; buf[1] = 0xdd; ret = 2; break; } + if (wc >= 0x30a1 && wc <= 0x30f6) { + buf[0] = 0xc7; buf[1] = wc - (wc < 0x30a5 ? 0x3026 : 0x3004); ret = 2; + break; + } + if (wc == 0x30fc) { buf[0] = 0xc6; buf[1] = 0xe3; ret = 2; break; } + if (wc == 0x30fd) { buf[0] = 0xc6; buf[1] = 0xda; ret = 2; break; } + if (wc == 0x30fe) { buf[0] = 0xc6; buf[1] = 0xdb; ret = 2; break; } + break; + case 0x53: + if (wc == 0x5344) + return RET_ILUNI; + break; + case 0x58: + if (wc == 0x58bb) { buf[0] = 0xf9; buf[1] = 0xd9; ret = 2; break; } + break; + case 0x5a: + if (wc == 0x5afa) { buf[0] = 0xf9; buf[1] = 0xdc; ret = 2; break; } + break; + case 0x5f: + if (wc == 0x5f5e) { buf[0] = 0xc2; buf[1] = 0x55; ret = 2; break; } + if (wc == 0x5f5d) + return RET_ILUNI; + break; + case 0x60: + if (wc == 0x6052) { buf[0] = 0xf9; buf[1] = 0xda; ret = 2; break; } + break; + case 0x78: + if (wc == 0x7881) { buf[0] = 0xf9; buf[1] = 0xd6; ret = 2; break; } + break; + case 0x7c: + if (wc == 0x7ca7) { buf[0] = 0xf9; buf[1] = 0xdb; ret = 2; break; } + break; + case 0x88: + if (wc == 0x88cf) { buf[0] = 0xf9; buf[1] = 0xd8; ret = 2; break; } + break; + case 0x92: + if (wc == 0x92b9) { buf[0] = 0xf9; buf[1] = 0xd7; ret = 2; break; } + break; + case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: + case 0xe6: case 0xe7: case 0xe8: case 0xe9: case 0xea: case 0xeb: + case 0xec: case 0xed: case 0xee: case 0xef: case 0xf0: case 0xf1: + case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: + { + unsigned int i = wc - 0xe000; + if (i < 5809) { + unsigned int c1 = i / 157; + unsigned int c2 = i % 157; + buf[0] = c1 + (c1 < 5 ? 0xfa : c1 < 24 ? 0x89 : 0x69); + buf[1] = c2 + (c2 < 0x3f ? 0x40 : 0x62); + ret = 2; + break; + } + } + break; + case 0xfe: + if (wc == 0xfe51) { buf[0] = 0xa1; buf[1] = 0x4e; ret = 2; break; } + if (wc == 0xfe68) { buf[0] = 0xa2; buf[1] = 0x42; ret = 2; break; } + break; + case 0xff: + if (wc == 0xff0f) { buf[0] = 0xa1; buf[1] = 0xfe; ret = 2; break; } + if (wc == 0xff3b) { buf[0] = 0xc6; buf[1] = 0xe4; ret = 2; break; } + if (wc == 0xff3c) { buf[0] = 0xa2; buf[1] = 0x40; ret = 2; break; } + if (wc == 0xff3d) { buf[0] = 0xc6; buf[1] = 0xe5; ret = 2; break; } + if (wc == 0xff3e) { buf[0] = 0xc6; buf[1] = 0xd9; ret = 2; break; } + if (wc == 0xff5e) { buf[0] = 0xa1; buf[1] = 0xe3; ret = 2; break; } + if (wc == 0xffe0) { buf[0] = 0xa2; buf[1] = 0x46; ret = 2; break; } + if (wc == 0xffe1) { buf[0] = 0xa2; buf[1] = 0x47; ret = 2; break; } + if (wc == 0xffe3) { buf[0] = 0xa1; buf[1] = 0xc3; ret = 2; break; } + if (wc == 0xffe5) { buf[0] = 0xa2; buf[1] = 0x44; ret = 2; break; } + if (wc == 0xff64) + return RET_ILUNI; + break; + } + if (ret == RET_ILUNI) + ret = big5_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/big5hkscs1999.h b/jni/parted/libiconv/lib/big5hkscs1999.h new file mode 100755 index 0000000..cd563c0 --- /dev/null +++ b/jni/parted/libiconv/lib/big5hkscs1999.h @@ -0,0 +1,196 @@ +/* + * Copyright (C) 1999-2002, 2006, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * BIG5-HKSCS:1999 + */ + +/* + * BIG5-HKSCS:1999 can be downloaded from + * http://www.info.gov.hk/digital21/eng/hkscs/download.html + * http://www.info.gov.hk/digital21/eng/hkscs/index.html + * + * It extends BIG5 (without the rows 0xC6..0xC7) through the ranges + * + * 0x{88..8D}{40..7E,A1..FE} 641 characters + * 0x{8E..A0}{40..7E,A1..FE} 2898 characters + * 0x{C6..C8}{40..7E,A1..FE} 359 characters + * 0xF9{D6..FE} 41 characters + * 0x{FA..FE}{40..7E,A1..FE} 763 characters + * + * Note that some HKSCS characters are not contained in Unicode 3.2 + * and are therefore best represented as sequences of Unicode characters: + * 0x8862 U+00CA U+0304 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND MACRON + * 0x8864 U+00CA U+030C LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND CARON + * 0x88A3 U+00EA U+0304 LATIN SMALL LETTER E WITH CIRCUMFLEX AND MACRON + * 0x88A5 U+00EA U+030C LATIN SMALL LETTER E WITH CIRCUMFLEX AND CARON + */ + +#include "hkscs1999.h" +#include "flushwc.h" + +static int +big5hkscs1999_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + ucs4_t last_wc = conv->istate; + if (last_wc) { + /* Output the buffered character. */ + conv->istate = 0; + *pwc = last_wc; + return 0; /* Don't advance the input pointer. */ + } else { + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (BIG5 extended) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + if (!((c == 0xc6 && c2 >= 0xa1) || c == 0xc7)) { + int ret = big5_mbtowc(conv,pwc,s,2); + if (ret != RET_ILSEQ) + return ret; + } + } + } + } + { + int ret = hkscs1999_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + if (c == 0x88) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 == 0x62 || c2 == 0x64 || c2 == 0xa3 || c2 == 0xa5) { + /* It's a composed character. */ + ucs4_t wc1 = ((c2 >> 3) << 2) + 0x009a; /* = 0x00ca or 0x00ea */ + ucs4_t wc2 = ((c2 & 6) << 2) + 0x02fc; /* = 0x0304 or 0x030c */ + /* We cannot output two Unicode characters at once. So, + output the first character and buffer the second one. */ + *pwc = wc1; + conv->istate = wc2; + return 2; + } + } + } + return RET_ILSEQ; + } +} + +#define big5hkscs1999_flushwc normal_flushwc + +static int +big5hkscs1999_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + int count = 0; + unsigned char last = conv->ostate; + + if (last) { + /* last is = 0x66 or = 0xa7. */ + if (wc == 0x0304 || wc == 0x030c) { + /* Output the combined character. */ + if (n >= 2) { + r[0] = 0x88; + r[1] = last + ((wc & 24) >> 2) - 4; /* = 0x62 or 0x64 or 0xa3 or 0xa5 */ + conv->ostate = 0; + return 2; + } else + return RET_TOOSMALL; + } + + /* Output the buffered character. */ + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x88; + r[1] = last; + r += 2; + count = 2; + } + + /* Code set 0 (ASCII) */ + if (wc < 0x0080) { + /* Plain ASCII character. */ + if (n > count) { + r[0] = (unsigned char) wc; + conv->ostate = 0; + return count+1; + } else + return RET_TOOSMALL; + } else { + unsigned char buf[2]; + int ret; + + /* Code set 1 (BIG5 extended) */ + ret = big5_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (!((buf[0] == 0xc6 && buf[1] >= 0xa1) || buf[0] == 0xc7)) { + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + } + ret = hkscs1999_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if ((wc & ~0x0020) == 0x00ca) { + /* A possible first character of a multi-character sequence. We have to + buffer it. */ + if (!(buf[0] == 0x88 && (buf[1] == 0x66 || buf[1] == 0xa7))) abort(); + conv->ostate = buf[1]; /* = 0x66 or = 0xa7 */ + return count+0; + } + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; + } +} + +static int +big5hkscs1999_reset (conv_t conv, unsigned char *r, size_t n) +{ + unsigned char last = conv->ostate; + + if (last) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x88; + r[1] = last; + /* conv->ostate = 0; will be done by the caller */ + return 2; + } else + return 0; +} diff --git a/jni/parted/libiconv/lib/big5hkscs2001.h b/jni/parted/libiconv/lib/big5hkscs2001.h new file mode 100755 index 0000000..89c97cd --- /dev/null +++ b/jni/parted/libiconv/lib/big5hkscs2001.h @@ -0,0 +1,214 @@ +/* + * Copyright (C) 1999-2002, 2006, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * BIG5-HKSCS:2001 + */ + +/* + * BIG5-HKSCS:2001 can be downloaded from + * http://www.info.gov.hk/digital21/eng/hkscs/download.html + * http://www.info.gov.hk/digital21/eng/hkscs/index.html + * + * It extends BIG5-HKSCS:1999 through 116 characters. + * + * It extends BIG5 (without the rows 0xC6..0xC7) through the ranges + * + * 0x{88..8D}{40..7E,A1..FE} 757 characters + * 0x{8E..A0}{40..7E,A1..FE} 2898 characters + * 0x{C6..C8}{40..7E,A1..FE} 359 characters + * 0xF9{D6..FE} 41 characters + * 0x{FA..FE}{40..7E,A1..FE} 763 characters + * + * Note that some HKSCS characters are not contained in Unicode 3.2 + * and are therefore best represented as sequences of Unicode characters: + * 0x8862 U+00CA U+0304 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND MACRON + * 0x8864 U+00CA U+030C LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND CARON + * 0x88A3 U+00EA U+0304 LATIN SMALL LETTER E WITH CIRCUMFLEX AND MACRON + * 0x88A5 U+00EA U+030C LATIN SMALL LETTER E WITH CIRCUMFLEX AND CARON + */ + +#include "hkscs2001.h" +#include "flushwc.h" + +static int +big5hkscs2001_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + ucs4_t last_wc = conv->istate; + if (last_wc) { + /* Output the buffered character. */ + conv->istate = 0; + *pwc = last_wc; + return 0; /* Don't advance the input pointer. */ + } else { + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (BIG5 extended) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + if (!((c == 0xc6 && c2 >= 0xa1) || c == 0xc7)) { + int ret = big5_mbtowc(conv,pwc,s,2); + if (ret != RET_ILSEQ) + return ret; + } + } + } + } + { + int ret = hkscs1999_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + { + int ret = hkscs2001_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + if (c == 0x88) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 == 0x62 || c2 == 0x64 || c2 == 0xa3 || c2 == 0xa5) { + /* It's a composed character. */ + ucs4_t wc1 = ((c2 >> 3) << 2) + 0x009a; /* = 0x00ca or 0x00ea */ + ucs4_t wc2 = ((c2 & 6) << 2) + 0x02fc; /* = 0x0304 or 0x030c */ + /* We cannot output two Unicode characters at once. So, + output the first character and buffer the second one. */ + *pwc = wc1; + conv->istate = wc2; + return 2; + } + } + } + return RET_ILSEQ; + } +} + +#define big5hkscs2001_flushwc normal_flushwc + +static int +big5hkscs2001_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + int count = 0; + unsigned char last = conv->ostate; + + if (last) { + /* last is = 0x66 or = 0xa7. */ + if (wc == 0x0304 || wc == 0x030c) { + /* Output the combined character. */ + if (n >= 2) { + r[0] = 0x88; + r[1] = last + ((wc & 24) >> 2) - 4; /* = 0x62 or 0x64 or 0xa3 or 0xa5 */ + conv->ostate = 0; + return 2; + } else + return RET_TOOSMALL; + } + + /* Output the buffered character. */ + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x88; + r[1] = last; + r += 2; + count = 2; + } + + /* Code set 0 (ASCII) */ + if (wc < 0x0080) { + /* Plain ASCII character. */ + if (n > count) { + r[0] = (unsigned char) wc; + conv->ostate = 0; + return count+1; + } else + return RET_TOOSMALL; + } else { + unsigned char buf[2]; + int ret; + + /* Code set 1 (BIG5 extended) */ + ret = big5_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (!((buf[0] == 0xc6 && buf[1] >= 0xa1) || buf[0] == 0xc7)) { + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + } + ret = hkscs1999_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if ((wc & ~0x0020) == 0x00ca) { + /* A possible first character of a multi-character sequence. We have to + buffer it. */ + if (!(buf[0] == 0x88 && (buf[1] == 0x66 || buf[1] == 0xa7))) abort(); + conv->ostate = buf[1]; /* = 0x66 or = 0xa7 */ + return count+0; + } + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + ret = hkscs2001_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; + } +} + +static int +big5hkscs2001_reset (conv_t conv, unsigned char *r, size_t n) +{ + unsigned char last = conv->ostate; + + if (last) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x88; + r[1] = last; + /* conv->ostate = 0; will be done by the caller */ + return 2; + } else + return 0; +} diff --git a/jni/parted/libiconv/lib/big5hkscs2004.h b/jni/parted/libiconv/lib/big5hkscs2004.h new file mode 100755 index 0000000..87d8ae0 --- /dev/null +++ b/jni/parted/libiconv/lib/big5hkscs2004.h @@ -0,0 +1,230 @@ +/* + * Copyright (C) 1999-2002, 2006, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * BIG5-HKSCS:2004 + */ + +/* + * BIG5-HKSCS:2004 can be downloaded from + * http://www.info.gov.hk/digital21/eng/hkscs/download.html + * http://www.info.gov.hk/digital21/eng/hkscs/index.html + * + * It extends BIG5-HKSCS:2001 through 123 characters. + * + * It extends BIG5 (without the rows 0xC6..0xC7) through the ranges + * + * 0x{87..8D}{40..7E,A1..FE} 880 characters + * 0x{8E..A0}{40..7E,A1..FE} 2898 characters + * 0x{C6..C8}{40..7E,A1..FE} 359 characters + * 0xF9{D6..FE} 41 characters + * 0x{FA..FE}{40..7E,A1..FE} 763 characters + * + * Note that some HKSCS characters are not contained in Unicode 3.2 + * and are therefore best represented as sequences of Unicode characters: + * 0x8862 U+00CA U+0304 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND MACRON + * 0x8864 U+00CA U+030C LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND CARON + * 0x88A3 U+00EA U+0304 LATIN SMALL LETTER E WITH CIRCUMFLEX AND MACRON + * 0x88A5 U+00EA U+030C LATIN SMALL LETTER E WITH CIRCUMFLEX AND CARON + */ + +#include "hkscs2004.h" +#include "flushwc.h" + +static int +big5hkscs2004_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + ucs4_t last_wc = conv->istate; + if (last_wc) { + /* Output the buffered character. */ + conv->istate = 0; + *pwc = last_wc; + return 0; /* Don't advance the input pointer. */ + } else { + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (BIG5 extended) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + if (!((c == 0xc6 && c2 >= 0xa1) || c == 0xc7)) { + int ret = big5_mbtowc(conv,pwc,s,2); + if (ret != RET_ILSEQ) + return ret; + } + } + } + } + { + int ret = hkscs1999_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + { + int ret = hkscs2001_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + { + int ret = hkscs2004_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + if (c == 0x88) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 == 0x62 || c2 == 0x64 || c2 == 0xa3 || c2 == 0xa5) { + /* It's a composed character. */ + ucs4_t wc1 = ((c2 >> 3) << 2) + 0x009a; /* = 0x00ca or 0x00ea */ + ucs4_t wc2 = ((c2 & 6) << 2) + 0x02fc; /* = 0x0304 or 0x030c */ + /* We cannot output two Unicode characters at once. So, + output the first character and buffer the second one. */ + *pwc = wc1; + conv->istate = wc2; + return 2; + } + } + } + return RET_ILSEQ; + } +} + +#define big5hkscs2004_flushwc normal_flushwc + +static int +big5hkscs2004_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + int count = 0; + unsigned char last = conv->ostate; + + if (last) { + /* last is = 0x66 or = 0xa7. */ + if (wc == 0x0304 || wc == 0x030c) { + /* Output the combined character. */ + if (n >= 2) { + r[0] = 0x88; + r[1] = last + ((wc & 24) >> 2) - 4; /* = 0x62 or 0x64 or 0xa3 or 0xa5 */ + conv->ostate = 0; + return 2; + } else + return RET_TOOSMALL; + } + + /* Output the buffered character. */ + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x88; + r[1] = last; + r += 2; + count = 2; + } + + /* Code set 0 (ASCII) */ + if (wc < 0x0080) { + /* Plain ASCII character. */ + if (n > count) { + r[0] = (unsigned char) wc; + conv->ostate = 0; + return count+1; + } else + return RET_TOOSMALL; + } else { + unsigned char buf[2]; + int ret; + + /* Code set 1 (BIG5 extended) */ + ret = big5_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (!((buf[0] == 0xc6 && buf[1] >= 0xa1) || buf[0] == 0xc7)) { + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + } + ret = hkscs1999_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if ((wc & ~0x0020) == 0x00ca) { + /* A possible first character of a multi-character sequence. We have to + buffer it. */ + if (!(buf[0] == 0x88 && (buf[1] == 0x66 || buf[1] == 0xa7))) abort(); + conv->ostate = buf[1]; /* = 0x66 or = 0xa7 */ + return count+0; + } + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + ret = hkscs2001_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + ret = hkscs2004_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; + } +} + +static int +big5hkscs2004_reset (conv_t conv, unsigned char *r, size_t n) +{ + unsigned char last = conv->ostate; + + if (last) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x88; + r[1] = last; + /* conv->ostate = 0; will be done by the caller */ + return 2; + } else + return 0; +} diff --git a/jni/parted/libiconv/lib/big5hkscs2008.h b/jni/parted/libiconv/lib/big5hkscs2008.h new file mode 100755 index 0000000..c9818e4 --- /dev/null +++ b/jni/parted/libiconv/lib/big5hkscs2008.h @@ -0,0 +1,246 @@ +/* + * Copyright (C) 1999-2002, 2006, 2010 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * BIG5-HKSCS:2008 + */ + +/* + * BIG5-HKSCS:2008 can be downloaded from + * http://www.ogcio.gov.hk/ccli/eng/hkscs/download.html + * http://www.ogcio.gov.hk/ccli/eng/hkscs/introduction.html + * + * It extends BIG5-HKSCS:2004 through 68 characters. + * + * It extends BIG5 (without the rows 0xC6..0xC7) through the ranges + * + * 0x{87..8D}{40..7E,A1..FE} 880 characters + * 0x{8E..A0}{40..7E,A1..FE} 2898 characters + * 0x{C6..C8}{40..7E,A1..FE} 359 characters + * 0xF9{D6..FE} 41 characters + * 0x{FA..FE}{40..7E,A1..FE} 763 characters + * + * Note that some HKSCS characters are not contained in Unicode 3.2 + * and are therefore best represented as sequences of Unicode characters: + * 0x8862 U+00CA U+0304 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND MACRON + * 0x8864 U+00CA U+030C LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND CARON + * 0x88A3 U+00EA U+0304 LATIN SMALL LETTER E WITH CIRCUMFLEX AND MACRON + * 0x88A5 U+00EA U+030C LATIN SMALL LETTER E WITH CIRCUMFLEX AND CARON + */ + +#include "hkscs2008.h" +#include "flushwc.h" + +static int +big5hkscs2008_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + ucs4_t last_wc = conv->istate; + if (last_wc) { + /* Output the buffered character. */ + conv->istate = 0; + *pwc = last_wc; + return 0; /* Don't advance the input pointer. */ + } else { + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (BIG5 extended) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + if (!((c == 0xc6 && c2 >= 0xa1) || c == 0xc7)) { + int ret = big5_mbtowc(conv,pwc,s,2); + if (ret != RET_ILSEQ) + return ret; + } + } + } + } + { + int ret = hkscs1999_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + { + int ret = hkscs2001_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + { + int ret = hkscs2004_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + { + int ret = hkscs2008_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + if (c == 0x88) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 == 0x62 || c2 == 0x64 || c2 == 0xa3 || c2 == 0xa5) { + /* It's a composed character. */ + ucs4_t wc1 = ((c2 >> 3) << 2) + 0x009a; /* = 0x00ca or 0x00ea */ + ucs4_t wc2 = ((c2 & 6) << 2) + 0x02fc; /* = 0x0304 or 0x030c */ + /* We cannot output two Unicode characters at once. So, + output the first character and buffer the second one. */ + *pwc = wc1; + conv->istate = wc2; + return 2; + } + } + } + return RET_ILSEQ; + } +} + +#define big5hkscs2008_flushwc normal_flushwc + +static int +big5hkscs2008_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + int count = 0; + unsigned char last = conv->ostate; + + if (last) { + /* last is = 0x66 or = 0xa7. */ + if (wc == 0x0304 || wc == 0x030c) { + /* Output the combined character. */ + if (n >= 2) { + r[0] = 0x88; + r[1] = last + ((wc & 24) >> 2) - 4; /* = 0x62 or 0x64 or 0xa3 or 0xa5 */ + conv->ostate = 0; + return 2; + } else + return RET_TOOSMALL; + } + + /* Output the buffered character. */ + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x88; + r[1] = last; + r += 2; + count = 2; + } + + /* Code set 0 (ASCII) */ + if (wc < 0x0080) { + /* Plain ASCII character. */ + if (n > count) { + r[0] = (unsigned char) wc; + conv->ostate = 0; + return count+1; + } else + return RET_TOOSMALL; + } else { + unsigned char buf[2]; + int ret; + + /* Code set 1 (BIG5 extended) */ + ret = big5_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (!((buf[0] == 0xc6 && buf[1] >= 0xa1) || buf[0] == 0xc7)) { + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + } + ret = hkscs1999_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if ((wc & ~0x0020) == 0x00ca) { + /* A possible first character of a multi-character sequence. We have to + buffer it. */ + if (!(buf[0] == 0x88 && (buf[1] == 0x66 || buf[1] == 0xa7))) abort(); + conv->ostate = buf[1]; /* = 0x66 or = 0xa7 */ + return count+0; + } + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + ret = hkscs2001_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + ret = hkscs2004_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + ret = hkscs2008_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n >= count+2) { + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; + } +} + +static int +big5hkscs2008_reset (conv_t conv, unsigned char *r, size_t n) +{ + unsigned char last = conv->ostate; + + if (last) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x88; + r[1] = last; + /* conv->ostate = 0; will be done by the caller */ + return 2; + } else + return 0; +} diff --git a/jni/parted/libiconv/lib/c99.h b/jni/parted/libiconv/lib/c99.h new file mode 100755 index 0000000..290dd9a --- /dev/null +++ b/jni/parted/libiconv/lib/c99.h @@ -0,0 +1,124 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * C99 + * This is ASCII with \uXXXX and \UXXXXXXXX escape sequences, denoting Unicode + * characters. See ISO/IEC 9899:1999, section 6.4.3. + * The treatment of control characters in the range U+0080..U+009F is not + * specified; we pass them through unmodified. + */ + +static int +c99_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c; + ucs4_t wc; + int i; + + c = s[0]; + if (c < 0xa0) { + if (c != '\\') { + *pwc = c; + return 1; + } + if (n < 2) + return RET_TOOFEW(0); + c = s[1]; + if (c == 'u') { + wc = 0; + for (i = 2; i < 6; i++) { + if (n <= i) + return RET_TOOFEW(0); + c = s[i]; + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'Z') + c -= 'A'-10; + else if (c >= 'a' && c <= 'z') + c -= 'a'-10; + else + goto simply_backslash; + wc |= (ucs4_t) c << (4 * (5-i)); + } + if ((wc >= 0x00a0 && !(wc >= 0xd800 && wc < 0xe000)) + || wc == 0x0024 || wc == 0x0040 || wc == 0x0060) { + *pwc = wc; + return 6; + } + } else if (c == 'U') { + wc = 0; + for (i = 2; i < 10; i++) { + if (n <= i) + return RET_TOOFEW(0); + c = s[i]; + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'Z') + c -= 'A'-10; + else if (c >= 'a' && c <= 'z') + c -= 'a'-10; + else + goto simply_backslash; + wc |= (ucs4_t) c << (4 * (9-i)); + } + if ((wc >= 0x00a0 && !(wc >= 0xd800 && wc < 0xe000)) + || wc == 0x0024 || wc == 0x0040 || wc == 0x0060) { + *pwc = wc; + return 10; + } + } else + goto simply_backslash; + } + return RET_ILSEQ; +simply_backslash: + *pwc = '\\'; + return 1; +} + +static int +c99_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0xa0) { + *r = wc; + return 1; + } else { + int result; + unsigned char u; + if (wc < 0x10000) { + result = 6; + u = 'u'; + } else { + result = 10; + u = 'U'; + } + if (n >= result) { + int count; + r[0] = '\\'; + r[1] = u; + r += 2; + for (count = result-3; count >= 0; count--) { + unsigned int i = (wc >> (4*count)) & 0x0f; + *r++ = (i < 10 ? '0'+i : 'a'-10+i); + } + return result; + } else + return RET_TOOSMALL; + } +} diff --git a/jni/parted/libiconv/lib/canonical.h b/jni/parted/libiconv/lib/canonical.h new file mode 100755 index 0000000..fe7b18e --- /dev/null +++ b/jni/parted/libiconv/lib/canonical.h @@ -0,0 +1,111 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str392, + (int)(long)&((struct stringpool_t *)0)->stringpool_str389, + (int)(long)&((struct stringpool_t *)0)->stringpool_str258, + (int)(long)&((struct stringpool_t *)0)->stringpool_str436, + (int)(long)&((struct stringpool_t *)0)->stringpool_str285, + (int)(long)&((struct stringpool_t *)0)->stringpool_str222, + (int)(long)&((struct stringpool_t *)0)->stringpool_str418, + (int)(long)&((struct stringpool_t *)0)->stringpool_str267, + (int)(long)&((struct stringpool_t *)0)->stringpool_str361, + (int)(long)&((struct stringpool_t *)0)->stringpool_str567, + (int)(long)&((struct stringpool_t *)0)->stringpool_str416, + (int)(long)&((struct stringpool_t *)0)->stringpool_str512, + (int)(long)&((struct stringpool_t *)0)->stringpool_str690, + (int)(long)&((struct stringpool_t *)0)->stringpool_str539, + (int)(long)&((struct stringpool_t *)0)->stringpool_str689, + (int)(long)&((struct stringpool_t *)0)->stringpool_str320, + (int)(long)&((struct stringpool_t *)0)->stringpool_str750, + (int)(long)&((struct stringpool_t *)0)->stringpool_str302, + (int)(long)&((struct stringpool_t *)0)->stringpool_str732, + (int)(long)&((struct stringpool_t *)0)->stringpool_str64, + (int)(long)&((struct stringpool_t *)0)->stringpool_str811, + (int)(long)&((struct stringpool_t *)0)->stringpool_str134, + (int)(long)&((struct stringpool_t *)0)->stringpool_str186, + (int)(long)&((struct stringpool_t *)0)->stringpool_str324, + (int)(long)&((struct stringpool_t *)0)->stringpool_str150, + (int)(long)&((struct stringpool_t *)0)->stringpool_str154, + (int)(long)&((struct stringpool_t *)0)->stringpool_str130, + (int)(long)&((struct stringpool_t *)0)->stringpool_str466, + (int)(long)&((struct stringpool_t *)0)->stringpool_str166, + (int)(long)&((struct stringpool_t *)0)->stringpool_str170, + (int)(long)&((struct stringpool_t *)0)->stringpool_str322, + (int)(long)&((struct stringpool_t *)0)->stringpool_str142, + (int)(long)&((struct stringpool_t *)0)->stringpool_str332, + (int)(long)&((struct stringpool_t *)0)->stringpool_str158, + (int)(long)&((struct stringpool_t *)0)->stringpool_str162, + (int)(long)&((struct stringpool_t *)0)->stringpool_str138, + (int)(long)&((struct stringpool_t *)0)->stringpool_str236, + (int)(long)&((struct stringpool_t *)0)->stringpool_str574, + (int)(long)&((struct stringpool_t *)0)->stringpool_str580, + (int)(long)&((struct stringpool_t *)0)->stringpool_str268, + (int)(long)&((struct stringpool_t *)0)->stringpool_str88, + (int)(long)&((struct stringpool_t *)0)->stringpool_str140, + (int)(long)&((struct stringpool_t *)0)->stringpool_str278, + (int)(long)&((struct stringpool_t *)0)->stringpool_str104, + (int)(long)&((struct stringpool_t *)0)->stringpool_str108, + (int)(long)&((struct stringpool_t *)0)->stringpool_str84, + (int)(long)&((struct stringpool_t *)0)->stringpool_str420, + (int)(long)&((struct stringpool_t *)0)->stringpool_str120, + (int)(long)&((struct stringpool_t *)0)->stringpool_str250, + (int)(long)&((struct stringpool_t *)0)->stringpool_str110, + (int)(long)&((struct stringpool_t *)0)->stringpool_str54, + (int)(long)&((struct stringpool_t *)0)->stringpool_str147, + (int)(long)&((struct stringpool_t *)0)->stringpool_str476, + (int)(long)&((struct stringpool_t *)0)->stringpool_str463, + (int)(long)&((struct stringpool_t *)0)->stringpool_str442, + (int)(long)&((struct stringpool_t *)0)->stringpool_str562, + (int)(long)&((struct stringpool_t *)0)->stringpool_str813, + (int)(long)&((struct stringpool_t *)0)->stringpool_str248, + (int)(long)&((struct stringpool_t *)0)->stringpool_str749, + (int)(long)&((struct stringpool_t *)0)->stringpool_str591, + (int)(long)&((struct stringpool_t *)0)->stringpool_str702, + (int)(long)&((struct stringpool_t *)0)->stringpool_str796, + (int)(long)&((struct stringpool_t *)0)->stringpool_str680, + (int)(long)&((struct stringpool_t *)0)->stringpool_str430, + (int)(long)&((struct stringpool_t *)0)->stringpool_str448, + (int)(long)&((struct stringpool_t *)0)->stringpool_str311, + (int)(long)&((struct stringpool_t *)0)->stringpool_str391, + (int)(long)&((struct stringpool_t *)0)->stringpool_str446, + (int)(long)&((struct stringpool_t *)0)->stringpool_str312, + (int)(long)&((struct stringpool_t *)0)->stringpool_str286, + (int)(long)&((struct stringpool_t *)0)->stringpool_str121, + (int)(long)&((struct stringpool_t *)0)->stringpool_str176, + (int)(long)&((struct stringpool_t *)0)->stringpool_str375, + (int)(long)&((struct stringpool_t *)0)->stringpool_str337, + (int)(long)&((struct stringpool_t *)0)->stringpool_str282, + (int)(long)&((struct stringpool_t *)0)->stringpool_str242, + (int)(long)&((struct stringpool_t *)0)->stringpool_str206, + (int)(long)&((struct stringpool_t *)0)->stringpool_str211, + (int)(long)&((struct stringpool_t *)0)->stringpool_str536, + (int)(long)&((struct stringpool_t *)0)->stringpool_str651, + (int)(long)&((struct stringpool_t *)0)->stringpool_str683, + (int)(long)&((struct stringpool_t *)0)->stringpool_str613, + (int)(long)&((struct stringpool_t *)0)->stringpool_str329, + (int)(long)&((struct stringpool_t *)0)->stringpool_str426, + (int)(long)&((struct stringpool_t *)0)->stringpool_str89, + (int)(long)&((struct stringpool_t *)0)->stringpool_str344, + (int)(long)&((struct stringpool_t *)0)->stringpool_str479, + (int)(long)&((struct stringpool_t *)0)->stringpool_str548, + (int)(long)&((struct stringpool_t *)0)->stringpool_str209, + (int)(long)&((struct stringpool_t *)0)->stringpool_str661, + (int)(long)&((struct stringpool_t *)0)->stringpool_str608, + (int)(long)&((struct stringpool_t *)0)->stringpool_str634, + (int)(long)&((struct stringpool_t *)0)->stringpool_str610, + (int)(long)&((struct stringpool_t *)0)->stringpool_str72, + (int)(long)&((struct stringpool_t *)0)->stringpool_str388, + (int)(long)&((struct stringpool_t *)0)->stringpool_str153, + (int)(long)&((struct stringpool_t *)0)->stringpool_str443, + (int)(long)&((struct stringpool_t *)0)->stringpool_str254, + (int)(long)&((struct stringpool_t *)0)->stringpool_str281, + (int)(long)&((struct stringpool_t *)0)->stringpool_str78, + (int)(long)&((struct stringpool_t *)0)->stringpool_str437, + (int)(long)&((struct stringpool_t *)0)->stringpool_str210, + (int)(long)&((struct stringpool_t *)0)->stringpool_str252, + (int)(long)&((struct stringpool_t *)0)->stringpool_str710, + (int)(long)&((struct stringpool_t *)0)->stringpool_str692, + (int)(long)&((struct stringpool_t *)0)->stringpool_str700, + (int)(long)&((struct stringpool_t *)0)->stringpool_str495, + (int)(long)&((struct stringpool_t *)0)->stringpool_str243, + (int)(long)&((struct stringpool_t *)0)->stringpool_str106, + (int)(long)&((struct stringpool_t *)0)->stringpool_str869, + (int)(long)&((struct stringpool_t *)0)->stringpool_str425, diff --git a/jni/parted/libiconv/lib/canonical_aix.h b/jni/parted/libiconv/lib/canonical_aix.h new file mode 100755 index 0000000..6149bc1 --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_aix.h @@ -0,0 +1,9 @@ + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_0, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_1, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_2, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_3, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_4, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_5, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_6, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_10, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_14, diff --git a/jni/parted/libiconv/lib/canonical_aix_sysaix.h b/jni/parted/libiconv/lib/canonical_aix_sysaix.h new file mode 100755 index 0000000..8b58d1f --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_aix_sysaix.h @@ -0,0 +1,9 @@ + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_0, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_2, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_4, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_6, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_8, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_10, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_12, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_16, + (int)(long)&((struct stringpool2_t *)0)->stringpool_aix_20, diff --git a/jni/parted/libiconv/lib/canonical_dos.h b/jni/parted/libiconv/lib/canonical_dos.h new file mode 100755 index 0000000..aa82651 --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_dos.h @@ -0,0 +1,15 @@ + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_0, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_4, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_5, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_8, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_12, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_13, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_17, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_21, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_22, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_26, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_31, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_35, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_38, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_42, + (int)(long)&((struct stringpool2_t *)0)->stringpool_dos_47, diff --git a/jni/parted/libiconv/lib/canonical_extra.h b/jni/parted/libiconv/lib/canonical_extra.h new file mode 100755 index 0000000..29678a0 --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_extra.h @@ -0,0 +1,7 @@ + (int)(long)&((struct stringpool2_t *)0)->stringpool_extra_0, + (int)(long)&((struct stringpool2_t *)0)->stringpool_extra_2, + (int)(long)&((struct stringpool2_t *)0)->stringpool_extra_4, + (int)(long)&((struct stringpool2_t *)0)->stringpool_extra_6, + (int)(long)&((struct stringpool2_t *)0)->stringpool_extra_7, + (int)(long)&((struct stringpool2_t *)0)->stringpool_extra_9, + (int)(long)&((struct stringpool2_t *)0)->stringpool_extra_11, diff --git a/jni/parted/libiconv/lib/canonical_local.h b/jni/parted/libiconv/lib/canonical_local.h new file mode 100755 index 0000000..7018202 --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_local.h @@ -0,0 +1,2 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str193, + (int)(long)&((struct stringpool_t *)0)->stringpool_str496, diff --git a/jni/parted/libiconv/lib/canonical_local_sysaix.h b/jni/parted/libiconv/lib/canonical_local_sysaix.h new file mode 100755 index 0000000..f578791 --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_local_sysaix.h @@ -0,0 +1,2 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str15, + (int)(long)&((struct stringpool_t *)0)->stringpool_str484, diff --git a/jni/parted/libiconv/lib/canonical_local_syshpux.h b/jni/parted/libiconv/lib/canonical_local_syshpux.h new file mode 100755 index 0000000..47d6dcf --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_local_syshpux.h @@ -0,0 +1,2 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str171, + (int)(long)&((struct stringpool_t *)0)->stringpool_str723, diff --git a/jni/parted/libiconv/lib/canonical_local_sysosf1.h b/jni/parted/libiconv/lib/canonical_local_sysosf1.h new file mode 100755 index 0000000..216b7fc --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_local_sysosf1.h @@ -0,0 +1,2 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str193, + (int)(long)&((struct stringpool_t *)0)->stringpool_str457, diff --git a/jni/parted/libiconv/lib/canonical_local_syssolaris.h b/jni/parted/libiconv/lib/canonical_local_syssolaris.h new file mode 100755 index 0000000..895c7ee --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_local_syssolaris.h @@ -0,0 +1,2 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str112, + (int)(long)&((struct stringpool_t *)0)->stringpool_str491, diff --git a/jni/parted/libiconv/lib/canonical_osf1.h b/jni/parted/libiconv/lib/canonical_osf1.h new file mode 100755 index 0000000..0e134ac --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_osf1.h @@ -0,0 +1,2 @@ + (int)(long)&((struct stringpool2_t *)0)->stringpool_osf1_0, + (int)(long)&((struct stringpool2_t *)0)->stringpool_osf1_1, diff --git a/jni/parted/libiconv/lib/canonical_osf1_sysosf1.h b/jni/parted/libiconv/lib/canonical_osf1_sysosf1.h new file mode 100755 index 0000000..15c2769 --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_osf1_sysosf1.h @@ -0,0 +1,2 @@ + (int)(long)&((struct stringpool2_t *)0)->stringpool_osf1_0, + (int)(long)&((struct stringpool2_t *)0)->stringpool_osf1_2, diff --git a/jni/parted/libiconv/lib/canonical_sysaix.h b/jni/parted/libiconv/lib/canonical_sysaix.h new file mode 100755 index 0000000..a8013a2 --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_sysaix.h @@ -0,0 +1,111 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str391, + (int)(long)&((struct stringpool_t *)0)->stringpool_str282, + (int)(long)&((struct stringpool_t *)0)->stringpool_str145, + (int)(long)&((struct stringpool_t *)0)->stringpool_str452, + (int)(long)&((struct stringpool_t *)0)->stringpool_str267, + (int)(long)&((struct stringpool_t *)0)->stringpool_str131, + (int)(long)&((struct stringpool_t *)0)->stringpool_str445, + (int)(long)&((struct stringpool_t *)0)->stringpool_str260, + (int)(long)&((struct stringpool_t *)0)->stringpool_str255, + (int)(long)&((struct stringpool_t *)0)->stringpool_str573, + (int)(long)&((struct stringpool_t *)0)->stringpool_str388, + (int)(long)&((struct stringpool_t *)0)->stringpool_str303, + (int)(long)&((struct stringpool_t *)0)->stringpool_str610, + (int)(long)&((struct stringpool_t *)0)->stringpool_str425, + (int)(long)&((struct stringpool_t *)0)->stringpool_str618, + (int)(long)&((struct stringpool_t *)0)->stringpool_str418, + (int)(long)&((struct stringpool_t *)0)->stringpool_str469, + (int)(long)&((struct stringpool_t *)0)->stringpool_str411, + (int)(long)&((struct stringpool_t *)0)->stringpool_str462, + (int)(long)&((struct stringpool_t *)0)->stringpool_str5, + (int)(long)&((struct stringpool_t *)0)->stringpool_str457, + (int)(long)&((struct stringpool_t *)0)->stringpool_str155, + (int)(long)&((struct stringpool_t *)0)->stringpool_str183, + (int)(long)&((struct stringpool_t *)0)->stringpool_str207, + (int)(long)&((struct stringpool_t *)0)->stringpool_str169, + (int)(long)&((struct stringpool_t *)0)->stringpool_str177, + (int)(long)&((struct stringpool_t *)0)->stringpool_str161, + (int)(long)&((struct stringpool_t *)0)->stringpool_str527, + (int)(long)&((struct stringpool_t *)0)->stringpool_str191, + (int)(long)&((struct stringpool_t *)0)->stringpool_str151, + (int)(long)&((struct stringpool_t *)0)->stringpool_str242, + (int)(long)&((struct stringpool_t *)0)->stringpool_str158, + (int)(long)&((struct stringpool_t *)0)->stringpool_str210, + (int)(long)&((struct stringpool_t *)0)->stringpool_str172, + (int)(long)&((struct stringpool_t *)0)->stringpool_str180, + (int)(long)&((struct stringpool_t *)0)->stringpool_str164, + (int)(long)&((struct stringpool_t *)0)->stringpool_str313, + (int)(long)&((struct stringpool_t *)0)->stringpool_str507, + (int)(long)&((struct stringpool_t *)0)->stringpool_str508, + (int)(long)&((struct stringpool_t *)0)->stringpool_str127, + (int)(long)&((struct stringpool_t *)0)->stringpool_str43, + (int)(long)&((struct stringpool_t *)0)->stringpool_str71, + (int)(long)&((struct stringpool_t *)0)->stringpool_str95, + (int)(long)&((struct stringpool_t *)0)->stringpool_str57, + (int)(long)&((struct stringpool_t *)0)->stringpool_str65, + (int)(long)&((struct stringpool_t *)0)->stringpool_str49, + (int)(long)&((struct stringpool_t *)0)->stringpool_str415, + (int)(long)&((struct stringpool_t *)0)->stringpool_str79, + (int)(long)&((struct stringpool_t *)0)->stringpool_str128, + (int)(long)&((struct stringpool_t *)0)->stringpool_str64, + (int)(long)&((struct stringpool_t *)0)->stringpool_str42, + (int)(long)&((struct stringpool_t *)0)->stringpool_str44, + (int)(long)&((struct stringpool_t *)0)->stringpool_str437, + (int)(long)&((struct stringpool_t *)0)->stringpool_str557, + (int)(long)&((struct stringpool_t *)0)->stringpool_str429, + (int)(long)&((struct stringpool_t *)0)->stringpool_str451, + (int)(long)&((struct stringpool_t *)0)->stringpool_str542, + (int)(long)&((struct stringpool_t *)0)->stringpool_str426, + (int)(long)&((struct stringpool_t *)0)->stringpool_str744, + (int)(long)&((struct stringpool_t *)0)->stringpool_str809, + (int)(long)&((struct stringpool_t *)0)->stringpool_str815, + (int)(long)&((struct stringpool_t *)0)->stringpool_str958, + (int)(long)&((struct stringpool_t *)0)->stringpool_str518, + (int)(long)&((struct stringpool_t *)0)->stringpool_str560, + (int)(long)&((struct stringpool_t *)0)->stringpool_str309, + (int)(long)&((struct stringpool_t *)0)->stringpool_str647, + (int)(long)&((struct stringpool_t *)0)->stringpool_str453, + (int)(long)&((struct stringpool_t *)0)->stringpool_str270, + (int)(long)&((struct stringpool_t *)0)->stringpool_str315, + (int)(long)&((struct stringpool_t *)0)->stringpool_str549, + (int)(long)&((struct stringpool_t *)0)->stringpool_str90, + (int)(long)&((struct stringpool_t *)0)->stringpool_str101, + (int)(long)&((struct stringpool_t *)0)->stringpool_str305, + (int)(long)&((struct stringpool_t *)0)->stringpool_str96, + (int)(long)&((struct stringpool_t *)0)->stringpool_str245, + (int)(long)&((struct stringpool_t *)0)->stringpool_str233, + (int)(long)&((struct stringpool_t *)0)->stringpool_str342, + (int)(long)&((struct stringpool_t *)0)->stringpool_str187, + (int)(long)&((struct stringpool_t *)0)->stringpool_str490, + (int)(long)&((struct stringpool_t *)0)->stringpool_str725, + (int)(long)&((struct stringpool_t *)0)->stringpool_str761, + (int)(long)&((struct stringpool_t *)0)->stringpool_str711, + (int)(long)&((struct stringpool_t *)0)->stringpool_str226, + (int)(long)&((struct stringpool_t *)0)->stringpool_str246, + (int)(long)&((struct stringpool_t *)0)->stringpool_str219, + (int)(long)&((struct stringpool_t *)0)->stringpool_str276, + (int)(long)&((struct stringpool_t *)0)->stringpool_str553, + (int)(long)&((struct stringpool_t *)0)->stringpool_str853, + (int)(long)&((struct stringpool_t *)0)->stringpool_str67, + (int)(long)&((struct stringpool_t *)0)->stringpool_str671, + (int)(long)&((struct stringpool_t *)0)->stringpool_str623, + (int)(long)&((struct stringpool_t *)0)->stringpool_str637, + (int)(long)&((struct stringpool_t *)0)->stringpool_str633, + (int)(long)&((struct stringpool_t *)0)->stringpool_str81, + (int)(long)&((struct stringpool_t *)0)->stringpool_str466, + (int)(long)&((struct stringpool_t *)0)->stringpool_str45, + (int)(long)&((struct stringpool_t *)0)->stringpool_str254, + (int)(long)&((struct stringpool_t *)0)->stringpool_str199, + (int)(long)&((struct stringpool_t *)0)->stringpool_str318, + (int)(long)&((struct stringpool_t *)0)->stringpool_str48, + (int)(long)&((struct stringpool_t *)0)->stringpool_str569, + (int)(long)&((struct stringpool_t *)0)->stringpool_str286, + (int)(long)&((struct stringpool_t *)0)->stringpool_str108, + (int)(long)&((struct stringpool_t *)0)->stringpool_str719, + (int)(long)&((struct stringpool_t *)0)->stringpool_str721, + (int)(long)&((struct stringpool_t *)0)->stringpool_str728, + (int)(long)&((struct stringpool_t *)0)->stringpool_str555, + (int)(long)&((struct stringpool_t *)0)->stringpool_str272, + (int)(long)&((struct stringpool_t *)0)->stringpool_str16, + (int)(long)&((struct stringpool_t *)0)->stringpool_str814, + (int)(long)&((struct stringpool_t *)0)->stringpool_str390, diff --git a/jni/parted/libiconv/lib/canonical_syshpux.h b/jni/parted/libiconv/lib/canonical_syshpux.h new file mode 100755 index 0000000..d6c1ac8 --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_syshpux.h @@ -0,0 +1,111 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str396, + (int)(long)&((struct stringpool_t *)0)->stringpool_str355, + (int)(long)&((struct stringpool_t *)0)->stringpool_str293, + (int)(long)&((struct stringpool_t *)0)->stringpool_str499, + (int)(long)&((struct stringpool_t *)0)->stringpool_str345, + (int)(long)&((struct stringpool_t *)0)->stringpool_str267, + (int)(long)&((struct stringpool_t *)0)->stringpool_str486, + (int)(long)&((struct stringpool_t *)0)->stringpool_str332, + (int)(long)&((struct stringpool_t *)0)->stringpool_str322, + (int)(long)&((struct stringpool_t *)0)->stringpool_str553, + (int)(long)&((struct stringpool_t *)0)->stringpool_str399, + (int)(long)&((struct stringpool_t *)0)->stringpool_str430, + (int)(long)&((struct stringpool_t *)0)->stringpool_str636, + (int)(long)&((struct stringpool_t *)0)->stringpool_str482, + (int)(long)&((struct stringpool_t *)0)->stringpool_str495, + (int)(long)&((struct stringpool_t *)0)->stringpool_str503, + (int)(long)&((struct stringpool_t *)0)->stringpool_str500, + (int)(long)&((struct stringpool_t *)0)->stringpool_str490, + (int)(long)&((struct stringpool_t *)0)->stringpool_str487, + (int)(long)&((struct stringpool_t *)0)->stringpool_str110, + (int)(long)&((struct stringpool_t *)0)->stringpool_str639, + (int)(long)&((struct stringpool_t *)0)->stringpool_str114, + (int)(long)&((struct stringpool_t *)0)->stringpool_str178, + (int)(long)&((struct stringpool_t *)0)->stringpool_str230, + (int)(long)&((struct stringpool_t *)0)->stringpool_str152, + (int)(long)&((struct stringpool_t *)0)->stringpool_str142, + (int)(long)&((struct stringpool_t *)0)->stringpool_str128, + (int)(long)&((struct stringpool_t *)0)->stringpool_str306, + (int)(long)&((struct stringpool_t *)0)->stringpool_str166, + (int)(long)&((struct stringpool_t *)0)->stringpool_str112, + (int)(long)&((struct stringpool_t *)0)->stringpool_str223, + (int)(long)&((struct stringpool_t *)0)->stringpool_str119, + (int)(long)&((struct stringpool_t *)0)->stringpool_str235, + (int)(long)&((struct stringpool_t *)0)->stringpool_str157, + (int)(long)&((struct stringpool_t *)0)->stringpool_str147, + (int)(long)&((struct stringpool_t *)0)->stringpool_str133, + (int)(long)&((struct stringpool_t *)0)->stringpool_str100, + (int)(long)&((struct stringpool_t *)0)->stringpool_str516, + (int)(long)&((struct stringpool_t *)0)->stringpool_str519, + (int)(long)&((struct stringpool_t *)0)->stringpool_str277, + (int)(long)&((struct stringpool_t *)0)->stringpool_str173, + (int)(long)&((struct stringpool_t *)0)->stringpool_str237, + (int)(long)&((struct stringpool_t *)0)->stringpool_str289, + (int)(long)&((struct stringpool_t *)0)->stringpool_str211, + (int)(long)&((struct stringpool_t *)0)->stringpool_str201, + (int)(long)&((struct stringpool_t *)0)->stringpool_str187, + (int)(long)&((struct stringpool_t *)0)->stringpool_str365, + (int)(long)&((struct stringpool_t *)0)->stringpool_str225, + (int)(long)&((struct stringpool_t *)0)->stringpool_str266, + (int)(long)&((struct stringpool_t *)0)->stringpool_str219, + (int)(long)&((struct stringpool_t *)0)->stringpool_str169, + (int)(long)&((struct stringpool_t *)0)->stringpool_str185, + (int)(long)&((struct stringpool_t *)0)->stringpool_str515, + (int)(long)&((struct stringpool_t *)0)->stringpool_str731, + (int)(long)&((struct stringpool_t *)0)->stringpool_str501, + (int)(long)&((struct stringpool_t *)0)->stringpool_str696, + (int)(long)&((struct stringpool_t *)0)->stringpool_str626, + (int)(long)&((struct stringpool_t *)0)->stringpool_str610, + (int)(long)&((struct stringpool_t *)0)->stringpool_str680, + (int)(long)&((struct stringpool_t *)0)->stringpool_str518, + (int)(long)&((struct stringpool_t *)0)->stringpool_str1033, + (int)(long)&((struct stringpool_t *)0)->stringpool_str986, + (int)(long)&((struct stringpool_t *)0)->stringpool_str760, + (int)(long)&((struct stringpool_t *)0)->stringpool_str655, + (int)(long)&((struct stringpool_t *)0)->stringpool_str479, + (int)(long)&((struct stringpool_t *)0)->stringpool_str584, + (int)(long)&((struct stringpool_t *)0)->stringpool_str393, + (int)(long)&((struct stringpool_t *)0)->stringpool_str436, + (int)(long)&((struct stringpool_t *)0)->stringpool_str273, + (int)(long)&((struct stringpool_t *)0)->stringpool_str418, + (int)(long)&((struct stringpool_t *)0)->stringpool_str76, + (int)(long)&((struct stringpool_t *)0)->stringpool_str151, + (int)(long)&((struct stringpool_t *)0)->stringpool_str305, + (int)(long)&((struct stringpool_t *)0)->stringpool_str301, + (int)(long)&((struct stringpool_t *)0)->stringpool_str333, + (int)(long)&((struct stringpool_t *)0)->stringpool_str282, + (int)(long)&((struct stringpool_t *)0)->stringpool_str256, + (int)(long)&((struct stringpool_t *)0)->stringpool_str337, + (int)(long)&((struct stringpool_t *)0)->stringpool_str653, + (int)(long)&((struct stringpool_t *)0)->stringpool_str738, + (int)(long)&((struct stringpool_t *)0)->stringpool_str790, + (int)(long)&((struct stringpool_t *)0)->stringpool_str750, + (int)(long)&((struct stringpool_t *)0)->stringpool_str302, + (int)(long)&((struct stringpool_t *)0)->stringpool_str373, + (int)(long)&((struct stringpool_t *)0)->stringpool_str81, + (int)(long)&((struct stringpool_t *)0)->stringpool_str260, + (int)(long)&((struct stringpool_t *)0)->stringpool_str525, + (int)(long)&((struct stringpool_t *)0)->stringpool_str644, + (int)(long)&((struct stringpool_t *)0)->stringpool_str243, + (int)(long)&((struct stringpool_t *)0)->stringpool_str571, + (int)(long)&((struct stringpool_t *)0)->stringpool_str574, + (int)(long)&((struct stringpool_t *)0)->stringpool_str606, + (int)(long)&((struct stringpool_t *)0)->stringpool_str575, + (int)(long)&((struct stringpool_t *)0)->stringpool_str281, + (int)(long)&((struct stringpool_t *)0)->stringpool_str191, + (int)(long)&((struct stringpool_t *)0)->stringpool_str193, + (int)(long)&((struct stringpool_t *)0)->stringpool_str349, + (int)(long)&((struct stringpool_t *)0)->stringpool_str327, + (int)(long)&((struct stringpool_t *)0)->stringpool_str474, + (int)(long)&((struct stringpool_t *)0)->stringpool_str176, + (int)(long)&((struct stringpool_t *)0)->stringpool_str621, + (int)(long)&((struct stringpool_t *)0)->stringpool_str288, + (int)(long)&((struct stringpool_t *)0)->stringpool_str239, + (int)(long)&((struct stringpool_t *)0)->stringpool_str734, + (int)(long)&((struct stringpool_t *)0)->stringpool_str735, + (int)(long)&((struct stringpool_t *)0)->stringpool_str754, + (int)(long)&((struct stringpool_t *)0)->stringpool_str615, + (int)(long)&((struct stringpool_t *)0)->stringpool_str203, + (int)(long)&((struct stringpool_t *)0)->stringpool_str138, + (int)(long)&((struct stringpool_t *)0)->stringpool_str951, + (int)(long)&((struct stringpool_t *)0)->stringpool_str249, diff --git a/jni/parted/libiconv/lib/canonical_sysosf1.h b/jni/parted/libiconv/lib/canonical_sysosf1.h new file mode 100755 index 0000000..f6b4ddc --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_sysosf1.h @@ -0,0 +1,111 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str453, + (int)(long)&((struct stringpool_t *)0)->stringpool_str308, + (int)(long)&((struct stringpool_t *)0)->stringpool_str319, + (int)(long)&((struct stringpool_t *)0)->stringpool_str586, + (int)(long)&((struct stringpool_t *)0)->stringpool_str346, + (int)(long)&((struct stringpool_t *)0)->stringpool_str283, + (int)(long)&((struct stringpool_t *)0)->stringpool_str568, + (int)(long)&((struct stringpool_t *)0)->stringpool_str328, + (int)(long)&((struct stringpool_t *)0)->stringpool_str280, + (int)(long)&((struct stringpool_t *)0)->stringpool_str575, + (int)(long)&((struct stringpool_t *)0)->stringpool_str335, + (int)(long)&((struct stringpool_t *)0)->stringpool_str431, + (int)(long)&((struct stringpool_t *)0)->stringpool_str698, + (int)(long)&((struct stringpool_t *)0)->stringpool_str458, + (int)(long)&((struct stringpool_t *)0)->stringpool_str608, + (int)(long)&((struct stringpool_t *)0)->stringpool_str381, + (int)(long)&((struct stringpool_t *)0)->stringpool_str911, + (int)(long)&((struct stringpool_t *)0)->stringpool_str363, + (int)(long)&((struct stringpool_t *)0)->stringpool_str893, + (int)(long)&((struct stringpool_t *)0)->stringpool_str64, + (int)(long)&((struct stringpool_t *)0)->stringpool_str664, + (int)(long)&((struct stringpool_t *)0)->stringpool_str134, + (int)(long)&((struct stringpool_t *)0)->stringpool_str186, + (int)(long)&((struct stringpool_t *)0)->stringpool_str324, + (int)(long)&((struct stringpool_t *)0)->stringpool_str150, + (int)(long)&((struct stringpool_t *)0)->stringpool_str154, + (int)(long)&((struct stringpool_t *)0)->stringpool_str130, + (int)(long)&((struct stringpool_t *)0)->stringpool_str466, + (int)(long)&((struct stringpool_t *)0)->stringpool_str166, + (int)(long)&((struct stringpool_t *)0)->stringpool_str170, + (int)(long)&((struct stringpool_t *)0)->stringpool_str322, + (int)(long)&((struct stringpool_t *)0)->stringpool_str142, + (int)(long)&((struct stringpool_t *)0)->stringpool_str332, + (int)(long)&((struct stringpool_t *)0)->stringpool_str158, + (int)(long)&((struct stringpool_t *)0)->stringpool_str162, + (int)(long)&((struct stringpool_t *)0)->stringpool_str138, + (int)(long)&((struct stringpool_t *)0)->stringpool_str203, + (int)(long)&((struct stringpool_t *)0)->stringpool_str663, + (int)(long)&((struct stringpool_t *)0)->stringpool_str669, + (int)(long)&((struct stringpool_t *)0)->stringpool_str268, + (int)(long)&((struct stringpool_t *)0)->stringpool_str88, + (int)(long)&((struct stringpool_t *)0)->stringpool_str140, + (int)(long)&((struct stringpool_t *)0)->stringpool_str278, + (int)(long)&((struct stringpool_t *)0)->stringpool_str104, + (int)(long)&((struct stringpool_t *)0)->stringpool_str108, + (int)(long)&((struct stringpool_t *)0)->stringpool_str84, + (int)(long)&((struct stringpool_t *)0)->stringpool_str420, + (int)(long)&((struct stringpool_t *)0)->stringpool_str120, + (int)(long)&((struct stringpool_t *)0)->stringpool_str250, + (int)(long)&((struct stringpool_t *)0)->stringpool_str110, + (int)(long)&((struct stringpool_t *)0)->stringpool_str54, + (int)(long)&((struct stringpool_t *)0)->stringpool_str147, + (int)(long)&((struct stringpool_t *)0)->stringpool_str476, + (int)(long)&((struct stringpool_t *)0)->stringpool_str463, + (int)(long)&((struct stringpool_t *)0)->stringpool_str430, + (int)(long)&((struct stringpool_t *)0)->stringpool_str562, + (int)(long)&((struct stringpool_t *)0)->stringpool_str813, + (int)(long)&((struct stringpool_t *)0)->stringpool_str225, + (int)(long)&((struct stringpool_t *)0)->stringpool_str777, + (int)(long)&((struct stringpool_t *)0)->stringpool_str541, + (int)(long)&((struct stringpool_t *)0)->stringpool_str648, + (int)(long)&((struct stringpool_t *)0)->stringpool_str848, + (int)(long)&((struct stringpool_t *)0)->stringpool_str769, + (int)(long)&((struct stringpool_t *)0)->stringpool_str389, + (int)(long)&((struct stringpool_t *)0)->stringpool_str407, + (int)(long)&((struct stringpool_t *)0)->stringpool_str561, + (int)(long)&((struct stringpool_t *)0)->stringpool_str391, + (int)(long)&((struct stringpool_t *)0)->stringpool_str455, + (int)(long)&((struct stringpool_t *)0)->stringpool_str396, + (int)(long)&((struct stringpool_t *)0)->stringpool_str253, + (int)(long)&((struct stringpool_t *)0)->stringpool_str173, + (int)(long)&((struct stringpool_t *)0)->stringpool_str176, + (int)(long)&((struct stringpool_t *)0)->stringpool_str375, + (int)(long)&((struct stringpool_t *)0)->stringpool_str337, + (int)(long)&((struct stringpool_t *)0)->stringpool_str282, + (int)(long)&((struct stringpool_t *)0)->stringpool_str242, + (int)(long)&((struct stringpool_t *)0)->stringpool_str228, + (int)(long)&((struct stringpool_t *)0)->stringpool_str233, + (int)(long)&((struct stringpool_t *)0)->stringpool_str367, + (int)(long)&((struct stringpool_t *)0)->stringpool_str628, + (int)(long)&((struct stringpool_t *)0)->stringpool_str660, + (int)(long)&((struct stringpool_t *)0)->stringpool_str590, + (int)(long)&((struct stringpool_t *)0)->stringpool_str345, + (int)(long)&((struct stringpool_t *)0)->stringpool_str442, + (int)(long)&((struct stringpool_t *)0)->stringpool_str89, + (int)(long)&((struct stringpool_t *)0)->stringpool_str311, + (int)(long)&((struct stringpool_t *)0)->stringpool_str414, + (int)(long)&((struct stringpool_t *)0)->stringpool_str237, + (int)(long)&((struct stringpool_t *)0)->stringpool_str209, + (int)(long)&((struct stringpool_t *)0)->stringpool_str596, + (int)(long)&((struct stringpool_t *)0)->stringpool_str491, + (int)(long)&((struct stringpool_t *)0)->stringpool_str517, + (int)(long)&((struct stringpool_t *)0)->stringpool_str493, + (int)(long)&((struct stringpool_t *)0)->stringpool_str72, + (int)(long)&((struct stringpool_t *)0)->stringpool_str338, + (int)(long)&((struct stringpool_t *)0)->stringpool_str153, + (int)(long)&((struct stringpool_t *)0)->stringpool_str459, + (int)(long)&((struct stringpool_t *)0)->stringpool_str254, + (int)(long)&((struct stringpool_t *)0)->stringpool_str281, + (int)(long)&((struct stringpool_t *)0)->stringpool_str49, + (int)(long)&((struct stringpool_t *)0)->stringpool_str441, + (int)(long)&((struct stringpool_t *)0)->stringpool_str315, + (int)(long)&((struct stringpool_t *)0)->stringpool_str252, + (int)(long)&((struct stringpool_t *)0)->stringpool_str846, + (int)(long)&((struct stringpool_t *)0)->stringpool_str828, + (int)(long)&((struct stringpool_t *)0)->stringpool_str836, + (int)(long)&((struct stringpool_t *)0)->stringpool_str526, + (int)(long)&((struct stringpool_t *)0)->stringpool_str210, + (int)(long)&((struct stringpool_t *)0)->stringpool_str106, + (int)(long)&((struct stringpool_t *)0)->stringpool_str837, + (int)(long)&((struct stringpool_t *)0)->stringpool_str392, diff --git a/jni/parted/libiconv/lib/canonical_syssolaris.h b/jni/parted/libiconv/lib/canonical_syssolaris.h new file mode 100755 index 0000000..1d96fe5 --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_syssolaris.h @@ -0,0 +1,111 @@ + (int)(long)&((struct stringpool_t *)0)->stringpool_str239, + (int)(long)&((struct stringpool_t *)0)->stringpool_str275, + (int)(long)&((struct stringpool_t *)0)->stringpool_str218, + (int)(long)&((struct stringpool_t *)0)->stringpool_str532, + (int)(long)&((struct stringpool_t *)0)->stringpool_str517, + (int)(long)&((struct stringpool_t *)0)->stringpool_str264, + (int)(long)&((struct stringpool_t *)0)->stringpool_str555, + (int)(long)&((struct stringpool_t *)0)->stringpool_str540, + (int)(long)&((struct stringpool_t *)0)->stringpool_str272, + (int)(long)&((struct stringpool_t *)0)->stringpool_str591, + (int)(long)&((struct stringpool_t *)0)->stringpool_str576, + (int)(long)&((struct stringpool_t *)0)->stringpool_str365, + (int)(long)&((struct stringpool_t *)0)->stringpool_str679, + (int)(long)&((struct stringpool_t *)0)->stringpool_str664, + (int)(long)&((struct stringpool_t *)0)->stringpool_str603, + (int)(long)&((struct stringpool_t *)0)->stringpool_str530, + (int)(long)&((struct stringpool_t *)0)->stringpool_str797, + (int)(long)&((struct stringpool_t *)0)->stringpool_str553, + (int)(long)&((struct stringpool_t *)0)->stringpool_str820, + (int)(long)&((struct stringpool_t *)0)->stringpool_str19, + (int)(long)&((struct stringpool_t *)0)->stringpool_str330, + (int)(long)&((struct stringpool_t *)0)->stringpool_str61, + (int)(long)&((struct stringpool_t *)0)->stringpool_str73, + (int)(long)&((struct stringpool_t *)0)->stringpool_str227, + (int)(long)&((struct stringpool_t *)0)->stringpool_str119, + (int)(long)&((struct stringpool_t *)0)->stringpool_str65, + (int)(long)&((struct stringpool_t *)0)->stringpool_str63, + (int)(long)&((struct stringpool_t *)0)->stringpool_str397, + (int)(long)&((struct stringpool_t *)0)->stringpool_str69, + (int)(long)&((struct stringpool_t *)0)->stringpool_str71, + (int)(long)&((struct stringpool_t *)0)->stringpool_str128, + (int)(long)&((struct stringpool_t *)0)->stringpool_str64, + (int)(long)&((struct stringpool_t *)0)->stringpool_str230, + (int)(long)&((struct stringpool_t *)0)->stringpool_str122, + (int)(long)&((struct stringpool_t *)0)->stringpool_str68, + (int)(long)&((struct stringpool_t *)0)->stringpool_str66, + (int)(long)&((struct stringpool_t *)0)->stringpool_str207, + (int)(long)&((struct stringpool_t *)0)->stringpool_str373, + (int)(long)&((struct stringpool_t *)0)->stringpool_str414, + (int)(long)&((struct stringpool_t *)0)->stringpool_str90, + (int)(long)&((struct stringpool_t *)0)->stringpool_str26, + (int)(long)&((struct stringpool_t *)0)->stringpool_str38, + (int)(long)&((struct stringpool_t *)0)->stringpool_str192, + (int)(long)&((struct stringpool_t *)0)->stringpool_str84, + (int)(long)&((struct stringpool_t *)0)->stringpool_str30, + (int)(long)&((struct stringpool_t *)0)->stringpool_str28, + (int)(long)&((struct stringpool_t *)0)->stringpool_str362, + (int)(long)&((struct stringpool_t *)0)->stringpool_str34, + (int)(long)&((struct stringpool_t *)0)->stringpool_str85, + (int)(long)&((struct stringpool_t *)0)->stringpool_str32, + (int)(long)&((struct stringpool_t *)0)->stringpool_str22, + (int)(long)&((struct stringpool_t *)0)->stringpool_str101, + (int)(long)&((struct stringpool_t *)0)->stringpool_str372, + (int)(long)&((struct stringpool_t *)0)->stringpool_str644, + (int)(long)&((struct stringpool_t *)0)->stringpool_str494, + (int)(long)&((struct stringpool_t *)0)->stringpool_str290, + (int)(long)&((struct stringpool_t *)0)->stringpool_str424, + (int)(long)&((struct stringpool_t *)0)->stringpool_str509, + (int)(long)&((struct stringpool_t *)0)->stringpool_str609, + (int)(long)&((struct stringpool_t *)0)->stringpool_str653, + (int)(long)&((struct stringpool_t *)0)->stringpool_str751, + (int)(long)&((struct stringpool_t *)0)->stringpool_str956, + (int)(long)&((struct stringpool_t *)0)->stringpool_str416, + (int)(long)&((struct stringpool_t *)0)->stringpool_str328, + (int)(long)&((struct stringpool_t *)0)->stringpool_str364, + (int)(long)&((struct stringpool_t *)0)->stringpool_str678, + (int)(long)&((struct stringpool_t *)0)->stringpool_str270, + (int)(long)&((struct stringpool_t *)0)->stringpool_str329, + (int)(long)&((struct stringpool_t *)0)->stringpool_str558, + (int)(long)&((struct stringpool_t *)0)->stringpool_str183, + (int)(long)&((struct stringpool_t *)0)->stringpool_str212, + (int)(long)&((struct stringpool_t *)0)->stringpool_str125, + (int)(long)&((struct stringpool_t *)0)->stringpool_str570, + (int)(long)&((struct stringpool_t *)0)->stringpool_str267, + (int)(long)&((struct stringpool_t *)0)->stringpool_str188, + (int)(long)&((struct stringpool_t *)0)->stringpool_str245, + (int)(long)&((struct stringpool_t *)0)->stringpool_str184, + (int)(long)&((struct stringpool_t *)0)->stringpool_str146, + (int)(long)&((struct stringpool_t *)0)->stringpool_str400, + (int)(long)&((struct stringpool_t *)0)->stringpool_str593, + (int)(long)&((struct stringpool_t *)0)->stringpool_str601, + (int)(long)&((struct stringpool_t *)0)->stringpool_str573, + (int)(long)&((struct stringpool_t *)0)->stringpool_str295, + (int)(long)&((struct stringpool_t *)0)->stringpool_str377, + (int)(long)&((struct stringpool_t *)0)->stringpool_str89, + (int)(long)&((struct stringpool_t *)0)->stringpool_str240, + (int)(long)&((struct stringpool_t *)0)->stringpool_str542, + (int)(long)&((struct stringpool_t *)0)->stringpool_str608, + (int)(long)&((struct stringpool_t *)0)->stringpool_str115, + (int)(long)&((struct stringpool_t *)0)->stringpool_str539, + (int)(long)&((struct stringpool_t *)0)->stringpool_str404, + (int)(long)&((struct stringpool_t *)0)->stringpool_str410, + (int)(long)&((struct stringpool_t *)0)->stringpool_str467, + (int)(long)&((struct stringpool_t *)0)->stringpool_str106, + (int)(long)&((struct stringpool_t *)0)->stringpool_str307, + (int)(long)&((struct stringpool_t *)0)->stringpool_str105, + (int)(long)&((struct stringpool_t *)0)->stringpool_str300, + (int)(long)&((struct stringpool_t *)0)->stringpool_str103, + (int)(long)&((struct stringpool_t *)0)->stringpool_str131, + (int)(long)&((struct stringpool_t *)0)->stringpool_str124, + (int)(long)&((struct stringpool_t *)0)->stringpool_str448, + (int)(long)&((struct stringpool_t *)0)->stringpool_str274, + (int)(long)&((struct stringpool_t *)0)->stringpool_str86, + (int)(long)&((struct stringpool_t *)0)->stringpool_str841, + (int)(long)&((struct stringpool_t *)0)->stringpool_str836, + (int)(long)&((struct stringpool_t *)0)->stringpool_str865, + (int)(long)&((struct stringpool_t *)0)->stringpool_str701, + (int)(long)&((struct stringpool_t *)0)->stringpool_str279, + (int)(long)&((struct stringpool_t *)0)->stringpool_str59, + (int)(long)&((struct stringpool_t *)0)->stringpool_str645, + (int)(long)&((struct stringpool_t *)0)->stringpool_str276, diff --git a/jni/parted/libiconv/lib/canonical_zos.h b/jni/parted/libiconv/lib/canonical_zos.h new file mode 100755 index 0000000..bb9ff7e --- /dev/null +++ b/jni/parted/libiconv/lib/canonical_zos.h @@ -0,0 +1,53 @@ + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_0, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_8, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_12, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_17, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_23, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_28, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_30, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_35, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_40, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_45, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_50, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_55, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_57, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_63, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_67, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_73, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_78, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_82, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_87, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_92, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_99, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_102, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_106, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_110, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_113, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_116, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_119, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_122, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_125, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_128, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_131, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_138, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_145, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_153, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_161, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_168, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_175, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_182, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_189, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_196, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_203, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_206, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_209, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_212, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_215, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_218, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_221, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_224, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_227, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_229, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_232, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_235, + (int)(long)&((struct stringpool2_t *)0)->stringpool_zos_238, diff --git a/jni/parted/libiconv/lib/ces_big5.h b/jni/parted/libiconv/lib/ces_big5.h new file mode 100755 index 0000000..7a29204 --- /dev/null +++ b/jni/parted/libiconv/lib/ces_big5.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * BIG-5 + */ + +static int +ces_big5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (BIG5) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) + return big5_mbtowc(conv,pwc,s,2); + else + return RET_ILSEQ; + } + } + return RET_ILSEQ; +} + +static int +ces_big5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (BIG5) */ + ret = big5_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ces_gbk.h b/jni/parted/libiconv/lib/ces_gbk.h new file mode 100755 index 0000000..02e658d --- /dev/null +++ b/jni/parted/libiconv/lib/ces_gbk.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 1999-2001, 2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GBK + */ + +static int +ces_gbk_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + + /* Code set 0 (ASCII or GB 1988-89) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (GBK) */ + if (c >= 0x81 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + return gbk_mbtowc(conv,pwc,s,2); + } + return RET_ILSEQ; +} + +static int +ces_gbk_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII or GB 1988-89) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (GBK) */ + ret = gbk_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cjk_variants.h b/jni/parted/libiconv/lib/cjk_variants.h new file mode 100755 index 0000000..3a30840 --- /dev/null +++ b/jni/parted/libiconv/lib/cjk_variants.h @@ -0,0 +1,4240 @@ +/* + * Copyright (C) 1999-2001 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CJK variants table + */ + +static const unsigned short cjk_variants[12038] = { + 0x9e44, 0x1e2a, 0x200b, 0xcb87, 0xaf0c, 0x9e0a, 0x9e0b, 0xd42c, + 0x23c1, 0xaf0e, 0x9e04, 0x9e05, 0xa176, 0xd207, 0x2303, 0xa304, + 0x1e12, 0x619c, 0xeb57, 0x9e11, 0x2c02, 0xac08, 0x1e17, 0xa34b, + 0x1e16, 0xa34b, 0x1e20, 0xa775, 0xb96d, 0x23e2, 0x3a37, 0x3b09, + 0xd5c2, 0xb771, 0x4cf8, 0xcd72, 0x1e22, 0xa3be, 0x1e18, 0xa775, + 0x1e24, 0xa169, 0x1e1f, 0xa3be, 0xe149, 0x1e21, 0xa169, 0x23b3, + 0xa6b4, 0x20a1, 0x2e76, 0xcadd, 0xa5aa, 0x00f6, 0x200b, 0xcb87, + 0x3792, 0x3860, 0xb90f, 0xc23f, 0x5c4a, 0x5c50, 0x673b, 0x674a, + 0x68a8, 0xe8ce, 0x9e33, 0x9e32, 0xd1e8, 0x40ba, 0xc232, 0x2a6f, + 0xee97, 0x3319, 0x34e7, 0xd209, 0xa3ca, 0x2208, 0xd2c5, 0x2efc, + 0xdffa, 0x0006, 0x9e94, 0x1e46, 0xe579, 0x1e45, 0xe579, 0x2c1b, + 0x2e7a, 0x2e85, 0x6ebc, 0xeebd, 0xcfa9, 0xc0cf, 0x397d, 0xba02, + 0x1f17, 0x3500, 0x473e, 0xd846, 0xa5ac, 0x564e, 0xd65d, 0x1e58, + 0xb909, 0x1e57, 0xb909, 0x6690, 0x66a0, 0xe6b1, 0xcfd2, 0x60f7, + 0x6109, 0x610a, 0xe115, 0xb6f8, 0x2158, 0xa9cb, 0xdcb7, 0x1e82, + 0xe1e0, 0x1e7e, 0x1e81, 0xbf27, 0x1e79, 0x1e81, 0x2e72, 0xbf27, + 0x6f9c, 0xef9f, 0x1e79, 0x1e7e, 0xbf27, 0x1e71, 0xe1e0, 0x36b8, + 0xc7ad, 0xdc6b, 0xc22d, 0x1e8b, 0xa3d3, 0x1e8a, 0xa3d3, 0xaf0d, + 0x1e8f, 0x1e90, 0xb5bc, 0x1e8e, 0x1e90, 0x35bc, 0xd667, 0x1e8e, + 0x9e8f, 0x1f1d, 0xe6f2, 0x9e44, 0xa6db, 0x2c81, 0x2d57, 0x3b72, + 0xbb73, 0x9e99, 0x9e98, 0x1e9c, 0x9e9e, 0x1e9a, 0x9e9e, 0x3589, + 0x358a, 0x6f4a, 0xef50, 0x1e9a, 0x9e9c, 0xc10f, 0x1ebe, 0xa166, + 0x4522, 0xc523, 0x4546, 0x4552, 0x455d, 0xc55e, 0x9eaf, 0x9eb0, + 0x9eab, 0x9eac, 0xa91c, 0xd9aa, 0xd93b, 0xa6b2, 0x9ebb, 0x9eba, + 0x1ea1, 0xa166, 0xa104, 0xafce, 0x20cd, 0x22a8, 0xa2d5, 0x1ed8, + 0xa0c5, 0xa0d5, 0xdb8e, 0xa0df, 0x21ab, 0x21b0, 0xbc37, 0x2f93, + 0xaf9e, 0x9f5b, 0x1f1e, 0xa098, 0x1f96, 0x2d18, 0xad19, 0x1efa, + 0xa009, 0x9ec5, 0x20ca, 0xa0f2, 0xa40c, 0x9eed, 0xaf74, 0x214f, + 0x6577, 0x6578, 0xe57f, 0xa100, 0xa011, 0x9ede, 0x2047, 0xa3cd, + 0x1fa1, 0xa0f9, 0x1ed3, 0xa009, 0x9fc7, 0x2f6c, 0xb58c, 0x9f4e, + 0x2023, 0x2f77, 0x2fac, 0x4706, 0xeae3, 0x20a0, 0xc26b, 0xae11, + 0x1e51, 0x473e, 0xd846, 0xa12a, 0xa925, 0xb703, 0xa0b4, 0xa005, + 0x1e91, 0x1f20, 0xa0b3, 0x1ed0, 0x2098, 0xce56, 0xa049, 0x1f1d, + 0xa0b3, 0x9fe5, 0x9fd4, 0xa0b7, 0xa000, 0xa02b, 0xa096, 0x207d, + 0xa0de, 0x1f47, 0xcada, 0xa2aa, 0x1f32, 0x1f60, 0xa11e, 0x1f31, + 0x1f60, 0xa11e, 0x9f90, 0xd0c4, 0x9f40, 0x9f3c, 0xb014, 0x9f2b, + 0xae03, 0x9efe, 0x4b28, 0x5eb0, 0x5ec6, 0x6ab5, 0xead4, 0xa360, + 0x6918, 0xe980, 0x1ecf, 0x2f7f, 0xeaf4, 0xa05a, 0x9fab, 0x1f31, + 0x1f32, 0x211e, 0xa9b3, 0xa0ad, 0xa0c9, 0xaf8a, 0x3cd5, 0xc04b, + 0x2002, 0xae76, 0xaf88, 0xa058, 0x29b7, 0xa9ea, 0xb765, 0x6625, + 0x6634, 0x6670, 0xe682, 0xb549, 0x9f35, 0x9ed1, 0x5350, 0xd5a6, + 0x9fe0, 0x1ef7, 0xa0f9, 0x9fb6, 0xa0e5, 0x2075, 0xe049, 0xa074, + 0xa0d1, 0xa108, 0xa115, 0x9f5e, 0xa102, 0x2118, 0xac3d, 0xc7e6, + 0x9fa3, 0xac40, 0xc537, 0x9fe3, 0xccfb, 0x9efc, 0xa101, 0xdf14, + 0xc23c, 0x1f23, 0xb093, 0xa16a, 0xcae2, 0x9fa0, 0xda2b, 0x9fee, + 0x9fc1, 0x9f21, 0xa114, 0xa13c, 0xa006, 0xa137, 0xa008, 0x2039, + 0xa109, 0x1fe2, 0xd129, 0xa036, 0x209a, 0xb548, 0x2079, 0x2099, + 0x20c3, 0xa907, 0x4ca5, 0xeb3b, 0x30de, 0xbb23, 0x9f25, 0x1f75, + 0xae76, 0x207a, 0x24b1, 0xa592, 0x9f1c, 0x9fe9, 0x9feb, 0x1ed3, + 0x9efa, 0xa06c, 0x00f6, 0x1e2a, 0xcb87, 0xd146, 0xa010, 0xa00f, + 0x9eec, 0xae78, 0xa0b9, 0x2fa3, 0xd5c9, 0x1eff, 0xc706, 0xa03c, + 0x22b5, 0xa2cc, 0x9f26, 0xa25a, 0x9ff1, 0x1fed, 0xa109, 0xa0b5, + 0xa024, 0xa0be, 0xd2f1, 0xdcf0, 0x9eee, 0x9f1f, 0x5d0b, 0x5d17, + 0xdd5d, 0x9f83, 0xa0c0, 0x9f5c, 0xafa4, 0xe03c, 0x200a, 0xa0af, + 0x9fa7, 0x1fa6, 0xe049, 0xa078, 0xa077, 0x1ffb, 0x2099, 0x20c3, + 0xa907, 0x2003, 0x24b1, 0xa592, 0xa0c2, 0x1f2a, 0xa0de, 0xa0e8, + 0xa11f, 0x4f75, 0x69e1, 0xea82, 0xafac, 0xb770, 0x9f27, 0x1ed0, + 0x1f1e, 0xce56, 0x1ffb, 0x2079, 0x20c3, 0xa907, 0x1ff2, 0xb548, + 0xafad, 0x1f10, 0xc26b, 0x1e26, 0x2e76, 0xcadd, 0xabb6, 0xa10e, + 0xa13b, 0xa110, 0xa132, 0xa13a, 0x9f63, 0xa06c, 0x1f1d, 0x9f20, + 0x9f1b, 0xa03a, 0x9f24, 0xa01e, 0xa03e, 0xa059, 0xa07b, 0x1ffb, + 0x2079, 0x2099, 0xa907, 0xafb1, 0x9ec5, 0x9f65, 0x9ed9, 0x1ec2, + 0x22a8, 0xa2d5, 0x9fa8, 0x9ec6, 0xb55e, 0xc67b, 0x1f2a, 0xa07d, + 0x9ec9, 0xa0ed, 0x9fa5, 0xa07e, 0xa0f4, 0x3076, 0x30aa, 0xb0e1, + 0xa0e3, 0xe6c7, 0x9ed9, 0xa0e9, 0x1ef7, 0x9fa1, 0x9eea, 0x9fca, + 0x9fac, 0x9ebf, 0x9fa9, 0x1fed, 0xa039, 0xa0a4, 0xa0a7, 0x9fe6, + 0x9faa, 0x1fad, 0xac3d, 0x1f31, 0x1f32, 0x9f60, 0xa07f, 0xa139, + 0x9f18, 0xa0a8, 0x9fea, 0xa127, 0xa0a9, 0xa0a5, 0x9fe8, 0x2150, + 0xa152, 0xcc2a, 0xa1f6, 0x406e, 0xc097, 0x214c, 0xa151, 0x224b, + 0x22ca, 0xac05, 0x214a, 0xa151, 0xa154, 0x1ee7, 0x6577, 0x6578, + 0xe57f, 0x213f, 0xa152, 0x214a, 0xa14c, 0x213f, 0xa150, 0xa14e, + 0xa157, 0xa156, 0x1e68, 0xa9cb, 0xeee8, 0xa160, 0xa15c, 0xb5f7, + 0x1ea1, 0x9ebe, 0xa185, 0x1e21, 0x9e24, 0x9fde, 0xd62d, 0x2929, + 0x6754, 0xe75d, 0x24b2, 0x4b11, 0x65a2, 0x65d7, 0xe5dc, 0xd208, + 0x9e0c, 0x530a, 0xd332, 0x4faa, 0xe90a, 0x4363, 0xc378, 0xa180, + 0xa17e, 0xa6c5, 0xa18b, 0xae3d, 0xa189, 0xa167, 0x2706, 0x270e, + 0xa713, 0xaca1, 0xa184, 0x218c, 0xcb27, 0xa182, 0x218a, 0xcb27, + 0x226e, 0xa3e7, 0xa6e7, 0xa192, 0xd0c4, 0xa190, 0xab82, 0x21a9, + 0xabeb, 0xdecd, 0xdfb2, 0x2b90, 0xab9c, 0xa85a, 0xb700, 0xabc3, + 0x2bbc, 0xabc7, 0xabcc, 0x2199, 0xabeb, 0x2e42, 0xcf83, 0x1ecc, + 0x21b0, 0xbc37, 0x3638, 0xef15, 0xe9ae, 0x1ecc, 0x21ab, 0xbc37, + 0xa1b4, 0x3c96, 0xd85d, 0xbc7a, 0xa1b1, 0xbcc1, 0xbcef, 0xa1cd, + 0xbd0c, 0x21c8, 0xbde8, 0xbd7c, 0xbd82, 0x3053, 0x30bd, 0xbdd2, + 0xbdb8, 0x21d6, 0xbe96, 0xa1c0, 0xbdbc, 0xa1bb, 0xbe1b, 0xbe4a, + 0xc69a, 0xb817, 0x21c6, 0xbe96, 0x21dc, 0xbf9f, 0x21db, 0xbf9f, + 0x4108, 0x4155, 0x4188, 0xc199, 0x2e7e, 0xb73a, 0x21e2, 0xa1e3, + 0x21e1, 0xa1e3, 0x21e1, 0xa1e2, 0xecf3, 0xac45, 0x2904, 0xd655, + 0x21ec, 0x21ee, 0x68a8, 0x68cc, 0xe8ce, 0xece7, 0x21e8, 0x21ee, + 0x68a8, 0x68cc, 0xe8ce, 0x21f4, 0x317f, 0xb191, 0x21e8, 0x21ec, + 0x68a8, 0x68cc, 0xe8ce, 0xa1f1, 0xa1ef, 0x2c32, 0x2c34, 0x2c36, + 0x2c37, 0xeb50, 0xbac8, 0x21ed, 0x317f, 0xb191, 0xa147, 0x2757, + 0x284a, 0xa8a4, 0x2c80, 0xef63, 0x3483, 0xb4ca, 0xa1fe, 0xa1fd, + 0xe47f, 0x2202, 0xe1d6, 0x2200, 0xe1d6, 0xa204, 0xa203, 0x221b, + 0xa275, 0x1e42, 0xd2c5, 0xb81e, 0xd2bb, 0x2283, 0x2290, 0xc53b, + 0xa6ed, 0xb289, 0xa289, 0xa247, 0xa25b, 0x2205, 0x2231, 0x224f, + 0x2259, 0xa275, 0xa22a, 0xa22b, 0x2227, 0x223c, 0xa2ab, 0x2226, + 0x223c, 0xa2ab, 0x624b, 0x6464, 0xe4c7, 0xa220, 0x2225, 0xaf46, + 0x2257, 0x2277, 0x63df, 0xe4f2, 0xa244, 0xe8b3, 0x221b, 0x224f, + 0x2259, 0xa275, 0xa241, 0xd8fd, 0xa24e, 0xa23e, 0x2226, 0x2227, + 0xa2ab, 0xa28a, 0xa23a, 0xa28c, 0xa274, 0xa234, 0x2264, 0xa291, + 0xeb00, 0xa22d, 0xa219, 0x214b, 0x22ca, 0xac05, 0xbe82, 0xbb6c, + 0xa239, 0x221b, 0x2231, 0x2259, 0xa275, 0x226e, 0xa3e7, 0x2263, + 0x2271, 0x228d, 0x228e, 0x2292, 0x2294, 0x61f0, 0xe1fc, 0x222c, + 0x2277, 0x63df, 0xe4f2, 0x221b, 0x2231, 0x224f, 0xa275, 0xa033, + 0xa21a, 0xa265, 0x2251, 0x2271, 0x228d, 0x228e, 0x2292, 0x2294, + 0x61f0, 0xe1fc, 0x2242, 0xa291, 0xa25d, 0x65b9, 0xe609, 0xa287, + 0xa270, 0x218e, 0x2250, 0xa3e7, 0xa269, 0x2251, 0x2263, 0x228d, + 0x228e, 0x2292, 0x2294, 0x61f0, 0xe1fc, 0xb72d, 0xa240, 0x2205, + 0x221b, 0x2231, 0x224f, 0xa259, 0x222c, 0x2257, 0x63df, 0xe4f2, + 0xb22e, 0xa2e6, 0x2212, 0x2290, 0xc53b, 0xcb9a, 0xa267, 0xa218, + 0xa23d, 0xa23f, 0x2251, 0x2263, 0x2271, 0x228e, 0x2292, 0x2294, + 0x61f0, 0xe1fc, 0x2251, 0x2263, 0x2271, 0x228d, 0x2292, 0x2294, + 0x61f0, 0xe1fc, 0x2212, 0x2283, 0xc53b, 0x2242, 0xa264, 0x2251, + 0x2263, 0x2271, 0x228d, 0x228e, 0x2294, 0x61f0, 0xe1fc, 0x2251, + 0x2263, 0x2271, 0x228d, 0x228e, 0x2292, 0x61f0, 0xe1fc, 0x5cad, + 0xdcea, 0x22e7, 0xa2f8, 0xdfa6, 0x4cfc, 0xccff, 0xa2d9, 0xa2f1, + 0x1ec2, 0x20cd, 0xa2d5, 0x9f2e, 0x2226, 0x2227, 0xa23c, 0xa2f5, + 0xa2c1, 0x22b4, 0x22de, 0xb1a5, 0x22b3, 0x22de, 0xb1a5, 0x2026, + 0xa2cc, 0xb548, 0xa2e2, 0xa2b2, 0xb54f, 0x22d1, 0xb555, 0xa2c8, + 0xa2c7, 0x214b, 0x224b, 0xac05, 0x22db, 0x22f2, 0xa2f3, 0x2026, + 0xa2b5, 0x22c5, 0x2f95, 0x2fa0, 0xb555, 0x1ec2, 0x20cd, 0xa2a8, + 0x22d7, 0xb702, 0x22d6, 0xb702, 0xa2a1, 0xa2e9, 0x22cb, 0x22f2, + 0xa2f3, 0xd0dc, 0x22b3, 0x22b4, 0xb1a5, 0xb22e, 0xa2bf, 0xb1c3, + 0xa27f, 0x229d, 0xa2f8, 0xa2da, 0xa2a2, 0x22cb, 0x22db, 0xa2f3, + 0x22cb, 0x22db, 0xa2f2, 0xa2b1, 0x229d, 0xa2e7, 0xa300, 0xa2fb, + 0x1e10, 0xa304, 0x1e10, 0xa303, 0xeead, 0x2fe9, 0x3031, 0xb0a4, + 0xb3ac, 0x5133, 0xd166, 0xa338, 0x37e9, 0xb7fe, 0x2e00, 0xdfca, + 0xa320, 0xa31e, 0xa329, 0xa32d, 0xcbcb, 0x5535, 0xd5cf, 0xa321, + 0xa326, 0xa331, 0x3c47, 0xbed9, 0xa32e, 0x2333, 0x2941, 0xa969, + 0x2332, 0x2941, 0xa969, 0xa31a, 0xa340, 0x3bc9, 0xe1ab, 0xa33a, + 0xe7c6, 0xa352, 0x3607, 0x36fb, 0x6629, 0xe65e, 0xd294, 0x1e16, + 0x9e17, 0xa350, 0x2d0b, 0x53ef, 0xd550, 0x2354, 0x23f6, 0xb5ea, + 0xa34d, 0xa346, 0x384c, 0xb9d5, 0x234f, 0x23f6, 0xb5ea, 0x2358, + 0xa5ae, 0x28f2, 0xdce3, 0x2355, 0xa5ae, 0xb13d, 0xc387, 0x53d4, + 0xd514, 0x9f54, 0xc6e7, 0x2365, 0x2877, 0x3ef7, 0x3f9b, 0x4002, + 0x597f, 0xee75, 0x2364, 0xd97f, 0xd1e5, 0x585b, 0xd85e, 0xadf5, + 0x2918, 0xb23c, 0xae01, 0x237d, 0xc68d, 0xa37b, 0x2dfb, 0xb372, + 0xcf37, 0x3064, 0xdcc9, 0xa374, 0x2373, 0xc68d, 0x2388, 0x23b0, + 0xaee0, 0xb239, 0x2ef0, 0xaef3, 0x23a4, 0x23af, 0x36a6, 0x36c6, + 0x3b74, 0xbb77, 0xc8d4, 0xa382, 0xa3b2, 0x2727, 0xa8d3, 0xa3ad, + 0xa399, 0xc825, 0xef8e, 0xad16, 0x23a0, 0xaec1, 0x28e5, 0x2edb, + 0x613d, 0xe1d0, 0xa38d, 0xa795, 0xaef3, 0xa3a1, 0x2395, 0xaec1, + 0xa39f, 0xaec2, 0xa3b4, 0x2386, 0xb6c6, 0xaec8, 0xaeda, 0x2ecf, + 0xaed0, 0xa38c, 0xaedd, 0x2386, 0x36a6, 0x36c6, 0x3b74, 0xbb77, + 0x2382, 0xaee0, 0xa389, 0x1e25, 0xa6b4, 0xa3a3, 0xbe90, 0xc9c1, + 0xd0b1, 0x60bb, 0x6130, 0xe6a3, 0xa3bb, 0xa3ba, 0x1e1f, 0x9e22, + 0x470c, 0xce23, 0x1e09, 0xaf0e, 0x23c3, 0x23c4, 0xa3c5, 0x23c2, + 0x23c4, 0xa3c5, 0x23c2, 0x23c3, 0xa3c5, 0x23c2, 0x23c3, 0xa3c4, + 0xe749, 0xe746, 0xa3f9, 0xb268, 0x9e41, 0xe6d9, 0x1eee, 0x23db, + 0xc08d, 0xb536, 0xa92c, 0xc2ae, 0x467a, 0x467c, 0x6aea, 0xeaee, + 0x1e8a, 0x9e8b, 0xcdb4, 0x2909, 0xdb8a, 0x354d, 0xb558, 0x23cd, + 0xc08d, 0xac09, 0x4573, 0x4582, 0x4589, 0xc58a, 0x28e1, 0xc77f, + 0x1e1b, 0x3a37, 0x3b09, 0xd5c2, 0x218e, 0x2250, 0xa26e, 0x49d6, + 0x5879, 0xe6bb, 0xa44c, 0x276e, 0x37b1, 0x3aaf, 0x51fa, 0xe8b1, + 0x234f, 0x2354, 0x35ea, 0xd449, 0xd65f, 0x23c8, 0x2606, 0xbb4e, + 0xa630, 0x24a9, 0xa4f6, 0x4c72, 0xefa5, 0x25ab, 0xa644, 0xe5a4, + 0xaf14, 0x1edd, 0xd855, 0xaf8c, 0x26ae, 0xb6cf, 0xa687, 0xa442, + 0xa5ce, 0xb061, 0xa451, 0x252b, 0x2656, 0xda21, 0xa678, 0x5074, + 0xd07d, 0x2518, 0x2553, 0x2554, 0x255f, 0x5aec, 0xe5d9, 0x2434, + 0xa449, 0x2433, 0xa449, 0xa450, 0xd117, 0xa44d, 0xa44a, 0xa415, + 0x3282, 0xc2c2, 0x2433, 0xa434, 0xa43f, 0xa3eb, 0xa43d, 0xa436, + 0xa41e, 0xa638, 0xa6c8, 0xa614, 0xa6a6, 0xa504, 0x24e1, 0x5c9f, + 0xdd20, 0x24bc, 0xa58e, 0xa4fa, 0xa5c6, 0xa5da, 0xda46, 0xe031, + 0xa5dc, 0x2492, 0xda4b, 0xda4d, 0x2611, 0x5656, 0xdb3c, 0xa4e3, + 0x248c, 0x30d2, 0xefa2, 0x248a, 0x30d2, 0xefa2, 0xda60, 0x246a, + 0xda4b, 0xa6a8, 0xa680, 0xa4a4, 0xa65d, 0xa49c, 0x2400, 0xa4f6, + 0xef69, 0x2580, 0xd849, 0x2003, 0x207a, 0xa592, 0x2173, 0xcb11, + 0x618e, 0xee79, 0x2459, 0xa58e, 0xa6a5, 0x65a7, 0xeb28, 0xe7ff, + 0x2516, 0x255e, 0x45d6, 0xc602, 0xa660, 0xa635, 0xa5f6, 0xa666, + 0x2629, 0xdb41, 0xa672, 0xa68c, 0xa665, 0xa5b2, 0x2458, 0x5c9f, + 0xdd20, 0xa485, 0xda36, 0x2560, 0x2586, 0x269e, 0x27d1, 0xb08a, + 0x2400, 0xa4a9, 0xa45a, 0x5a98, 0xdbf1, 0xa457, 0xd123, 0xd39e, + 0xa57a, 0xa523, 0x24d1, 0x255e, 0x45d6, 0xc602, 0x242f, 0x2553, + 0x2554, 0x255f, 0x5aec, 0xe5d9, 0xa61c, 0xa5ca, 0xa62e, 0xa5e9, + 0xa515, 0xa59a, 0xa59e, 0xa41f, 0xdaaf, 0xaff5, 0xa60a, 0xdb2a, + 0xe5ee, 0x242f, 0x2518, 0x2554, 0x255f, 0x5aec, 0xe5d9, 0x242f, + 0x2518, 0x2553, 0x255f, 0x5aec, 0xe5d9, 0xa649, 0xa649, 0x24d1, + 0x2516, 0x45d6, 0xc602, 0x242f, 0x2518, 0x2553, 0x2554, 0x5aec, + 0xe5d9, 0x24f2, 0x2586, 0x269e, 0x27d1, 0xb08a, 0x5854, 0x5858, + 0xe29c, 0xa616, 0xa5c7, 0xa6c0, 0x265b, 0x2699, 0x26d3, 0xef67, + 0xa613, 0x26c9, 0xcf57, 0xa63d, 0xa62f, 0xa510, 0x24af, 0xd849, + 0x6927, 0xe935, 0xdb71, 0x24f2, 0x2560, 0x269e, 0x27d1, 0xb08a, + 0x2459, 0xa4bc, 0x267e, 0xc616, 0x2003, 0x207a, 0xa4b1, 0xa524, + 0x3198, 0x3199, 0xbb56, 0xa527, 0xa5bb, 0x9e27, 0x2403, 0xa644, + 0x9e54, 0x2355, 0xa358, 0x25b7, 0xa674, 0x68df, 0x68e0, 0xe963, + 0xa4df, 0x41df, 0xd425, 0x25af, 0xa674, 0xa5a9, 0xa60d, 0xa6b3, + 0xef45, 0xa45b, 0xa56c, 0xa51d, 0xa417, 0xa45c, 0xa469, 0xe16a, + 0xab60, 0xa637, 0xa522, 0xa6c1, 0xa66f, 0xa4d4, 0xdb30, 0x23f9, + 0xbb4e, 0xa540, 0xa5bd, 0x247c, 0xdb3c, 0xa56f, 0xa455, 0xa567, + 0x2690, 0x2c1d, 0xc51e, 0xa653, 0xa51b, 0xa6b6, 0xa62f, 0x24d7, + 0xdb41, 0xa520, 0x2578, 0xa628, 0xa3fd, 0xa6d1, 0xa4d3, 0xa5e5, + 0xa452, 0xa574, 0xb076, 0xdb50, 0x2403, 0xa5ab, 0xa655, 0x2556, + 0xa557, 0xa668, 0xa618, 0xa645, 0x241f, 0xda21, 0x256e, 0xa699, + 0xa695, 0xa49d, 0xa4d2, 0xdb6b, 0xa4dd, 0xa4d5, 0xa650, 0xdb5f, + 0xa5f3, 0xa4d9, 0x25af, 0xa5b7, 0x585c, 0x585f, 0xe053, 0xa428, + 0xaf53, 0xa591, 0xa49b, 0xa413, 0xa4dc, 0xa694, 0x2617, 0x2c1d, + 0xc51e, 0xa68f, 0xa65c, 0x256e, 0x265b, 0x26d3, 0xef67, 0x24f2, + 0x2560, 0x2586, 0x27d1, 0xb08a, 0xbd4f, 0xa6ca, 0xa6c2, 0xa4bd, + 0xa456, 0xa499, 0xa411, 0x9eb8, 0xa5be, 0x1e25, 0xa3b3, 0xa624, + 0xa6c2, 0xa56d, 0xa5eb, 0x26a3, 0xa6bb, 0xa181, 0xa453, 0x2570, + 0xcf57, 0xa6a2, 0xd2cf, 0xd271, 0xa631, 0x256e, 0x2699, 0xef67, + 0x26f2, 0x26f4, 0xa70d, 0x26de, 0x26ec, 0x2efb, 0x2efd, 0x5ff4, + 0xe025, 0xa6e0, 0x9e96, 0x26d8, 0x26ec, 0x2efb, 0x2efd, 0x5ff4, + 0xe025, 0xe856, 0xa6d9, 0x26e3, 0x2718, 0xccf0, 0x26e2, 0x2718, + 0xccf0, 0x3df5, 0x3e0a, 0xbe15, 0xa18f, 0xa6f1, 0x26d8, 0x26de, + 0x2efb, 0x2efd, 0x5ff4, 0xe025, 0x2213, 0x2712, 0xd597, 0x26f6, + 0x26fb, 0x26fd, 0x2700, 0xa70b, 0xc74f, 0xa6ea, 0x26d7, 0x26f4, + 0xa70d, 0x26fe, 0x2716, 0xa717, 0x26d7, 0x26f2, 0xa70d, 0xa707, + 0x26ef, 0x26fb, 0x26fd, 0x2700, 0xa70b, 0xb5e5, 0x26ef, 0x26f6, + 0x26fd, 0x2700, 0xa70b, 0x26ef, 0x26f6, 0x26fb, 0x2700, 0xa70b, + 0x26f3, 0x2716, 0xa717, 0x26ef, 0x26f6, 0x26fb, 0x26fd, 0xa70b, + 0xa711, 0x2186, 0x270e, 0xa713, 0xa6f5, 0xa70f, 0x26ef, 0x26f6, + 0x26fb, 0x26fd, 0xa700, 0x26d7, 0x26f2, 0xa6f4, 0x2186, 0x2706, + 0xa713, 0xa708, 0xa703, 0x26ed, 0xd597, 0x2186, 0x2706, 0xa70e, + 0x26f3, 0x26fe, 0xa717, 0x26f3, 0x26fe, 0xa716, 0x26e2, 0xa6e3, + 0x383e, 0xbb12, 0xa721, 0xa71f, 0x453a, 0xc53c, 0xd056, 0x238b, + 0xa8d3, 0xb257, 0xb747, 0xc3ea, 0x2754, 0x27ca, 0xadb3, 0xa8d9, + 0x2834, 0xa872, 0x3b7e, 0x3b7f, 0x3b81, 0xbca1, 0xe62f, 0x2c85, + 0xe62a, 0x276f, 0x28ca, 0x28de, 0xe62b, 0xaea7, 0xe62c, 0xa78b, + 0x2730, 0x27ca, 0xadb3, 0x21f7, 0x284a, 0xa8a4, 0xade0, 0xa805, + 0x28b0, 0x28b5, 0x28c7, 0x28dc, 0x4f48, 0xcf4e, 0xa8e2, 0x27bb, + 0xa8e9, 0x2862, 0xe696, 0x28b3, 0xe6ab, 0x289c, 0xc908, 0xa802, + 0xa803, 0xb1bb, 0xa88c, 0x6640, 0xe641, 0xbce5, 0x23f0, 0xd1fa, + 0x274f, 0xe62b, 0xa7a7, 0xa787, 0x1e18, 0x9e20, 0xa7a2, 0xa8a2, + 0xa7c0, 0xa8df, 0xa8e0, 0xa8da, 0xa773, 0xa753, 0x2841, 0xa8d8, + 0xc561, 0xe67b, 0xa39a, 0xa806, 0x282f, 0x2c27, 0xac2d, 0xa79c, + 0xa79b, 0xa8a2, 0xa778, 0xa8be, 0xa770, 0xab88, 0x280a, 0xd056, + 0xa88a, 0xa7e1, 0xa8b6, 0xa8cb, 0xa84f, 0xa816, 0x275d, 0xa8e9, + 0xa782, 0xc86e, 0xe656, 0x2730, 0x2754, 0xadb3, 0x24f2, 0x2560, + 0x2586, 0x269e, 0xb08a, 0xa7d3, 0xa7d2, 0xa852, 0x2864, 0xa8ce, + 0xa81d, 0x28c4, 0xe1ce, 0x2824, 0xe684, 0xa7ad, 0xc897, 0xb267, + 0x2d0e, 0x2d5c, 0xc895, 0xb383, 0xa763, 0xa764, 0xa75a, 0xa796, + 0xd3eb, 0xa7a9, 0xa879, 0x28ae, 0xa8af, 0xa7b4, 0xe67b, 0xa7da, + 0x27de, 0xe684, 0x6636, 0xe68e, 0x279a, 0x2c27, 0xac2d, 0x2895, + 0xe681, 0xb2a5, 0x273a, 0xa872, 0x454c, 0xc54d, 0x2792, 0xa8d8, + 0xa8ea, 0x21f7, 0x2757, 0xa8a4, 0xd314, 0xc57b, 0xa7b2, 0xa851, + 0xa850, 0xa7d8, 0xa896, 0xbd82, 0xa8a7, 0xa1a2, 0xd46c, 0xa86b, + 0xa75e, 0x27d9, 0xa8ce, 0xe663, 0x46d0, 0xee7d, 0xa861, 0x273a, + 0xa834, 0xac18, 0x2364, 0xee75, 0x2811, 0xa8cd, 0x450e, 0x4816, + 0xc8da, 0xc245, 0xa7ab, 0xa767, 0x2830, 0xe681, 0xa854, 0xa89e, + 0x28bb, 0xc246, 0x2760, 0xc908, 0xa897, 0x277a, 0xa7a1, 0x21f7, + 0x2757, 0xa84a, 0xa859, 0x2815, 0xa8af, 0x2815, 0xa8ae, 0x275b, + 0x28b5, 0x28dc, 0x4f48, 0xcf4e, 0x275f, 0xe6ab, 0x275b, 0x28b0, + 0x28dc, 0x4f48, 0xcf4e, 0xa7af, 0xde87, 0xa899, 0xa7a6, 0x27dc, + 0xe1ce, 0xa75b, 0x274f, 0xa8de, 0xa7b1, 0xa8e4, 0xa879, 0x27d9, + 0xa864, 0xc4bd, 0x238b, 0xa727, 0x2792, 0xa841, 0xa739, 0xa786, + 0x275b, 0x28b0, 0x28b5, 0x4f48, 0xcf4e, 0x274f, 0xa8ca, 0xa784, + 0xa785, 0x23e1, 0xc77f, 0xa75c, 0xa8cc, 0x2398, 0x2edb, 0xe13d, + 0x275d, 0xa7bb, 0xa846, 0x28ef, 0xa8f5, 0x28ee, 0xa8f5, 0xd072, + 0xa8f9, 0x2356, 0xdce3, 0x3bbb, 0xbbbc, 0x28ee, 0xa8ef, 0x28f7, + 0xa8fa, 0x28f6, 0xa8fa, 0xa8fc, 0xa8f1, 0x28f6, 0xa8f7, 0x2a7f, + 0xd05f, 0xa8f8, 0x2900, 0xabff, 0x28fd, 0xabff, 0xa90a, 0x21e6, + 0xd655, 0xe64d, 0x1ffb, 0x2079, 0x2099, 0xa0c3, 0x23d8, 0xdb8a, + 0xa902, 0x2fa9, 0x5907, 0xd986, 0xa913, 0xa90f, 0xd641, 0x236f, + 0xb23c, 0xa91b, 0xa91a, 0x9eb1, 0xa920, 0xa91f, 0x2923, 0xb8a6, + 0x2922, 0xb8a6, 0x9f19, 0x2172, 0x6754, 0xe75d, 0xa3cf, 0xbb80, + 0x372c, 0xb94d, 0xbcf0, 0xe82d, 0xbbd4, 0xda87, 0xa93e, 0xa96a, + 0xa939, 0x2332, 0x2333, 0xa969, 0xa950, 0xcad2, 0xb7f0, 0xa96e, + 0xeede, 0xa942, 0x4287, 0xe029, 0x2968, 0x296c, 0xc34e, 0xaf09, + 0xc55a, 0x2967, 0xadb4, 0x2965, 0xadb4, 0x2956, 0x296c, 0xc34e, + 0x2332, 0x2333, 0xa941, 0xa93a, 0x2956, 0x2968, 0xc34e, 0xa94b, + 0x29b3, 0xab2d, 0x29e6, 0xa9e7, 0x299d, 0x2a24, 0x4ca7, 0xccda, + 0x2a66, 0xaa8d, 0xaabd, 0xa9d9, 0x29f8, 0xd505, 0xa9ac, 0xc945, + 0xc385, 0xaab8, 0x2986, 0x2a24, 0x4ca7, 0xccda, 0xaaf5, 0xaad7, + 0x2aaf, 0xab00, 0xa992, 0x1f60, 0x2976, 0xab2d, 0x1f84, 0xa9ea, + 0x2a3f, 0xaa40, 0xaa12, 0xa9ca, 0xa9c9, 0x1e68, 0xa158, 0xa9d7, + 0xaa8e, 0xaa30, 0xa9cd, 0xa98a, 0xd591, 0xaa1f, 0x2978, 0xa9e7, + 0x2978, 0xa9e6, 0x1f84, 0xa9b7, 0xa9ec, 0xa9eb, 0xaae6, 0x298d, + 0xd505, 0xaa63, 0xaa41, 0xaa6d, 0xab08, 0xab0c, 0xab4c, 0xa9c6, + 0x2b22, 0xab43, 0x2a2f, 0xaa31, 0xa9e2, 0x2986, 0x299d, 0x4ca7, + 0xccda, 0xab2a, 0xab09, 0x2a1b, 0xaa31, 0xa9d2, 0x2a1b, 0xaa2f, + 0xaaa7, 0x2afa, 0xaafb, 0x29b8, 0xaa40, 0x29b8, 0x2a3f, 0xaa50, + 0xaa04, 0xaa40, 0xa9fb, 0x2987, 0xaa8d, 0xbdeb, 0xaa05, 0x1e3d, + 0xee97, 0xaaff, 0x2b30, 0x2b46, 0xab7e, 0xab0b, 0xab38, 0x28fb, + 0xd05f, 0x2987, 0xaa66, 0xa9d0, 0xaa32, 0xaabc, 0xab03, 0x29ab, + 0xab00, 0xa99b, 0xaaaa, 0xa988, 0x3127, 0xd06d, 0x2b1d, 0xd885, + 0xab32, 0xab21, 0xab2a, 0xa9aa, 0xa9ee, 0xab19, 0xa9a9, 0x3194, + 0xc644, 0x2a34, 0xaafb, 0x2a34, 0xaafa, 0xaa73, 0x29ab, 0xaaaf, + 0xaaad, 0xaa06, 0xaa2d, 0xaa75, 0xaa07, 0xaaf1, 0x2acb, 0xd885, + 0xaad2, 0x2a18, 0xab43, 0xab37, 0x2a26, 0xaad4, 0x2976, 0xa9b3, + 0x2a74, 0x2b46, 0xab7e, 0xaad0, 0xab24, 0xaa76, 0xb1d2, 0x2a18, + 0xab22, 0x2a74, 0x2b30, 0xab7e, 0xaa08, 0xab53, 0xab52, 0xab6b, + 0xa5e3, 0x2b78, 0x3569, 0x3585, 0x3586, 0xb588, 0xab7f, 0xab59, + 0x2b66, 0x3569, 0x3585, 0x3586, 0xb588, 0xab7d, 0xab7c, 0x2a74, + 0x2b30, 0xab46, 0xab6a, 0x2bcd, 0x2bd5, 0x2bd7, 0x2bdc, 0x2be7, + 0xc52f, 0xa197, 0x4260, 0x5675, 0xd6c7, 0xca79, 0xa7a8, 0xca81, + 0xd089, 0x219d, 0xab9c, 0x219d, 0xab90, 0x2bda, 0x2bf3, 0x2bf6, + 0xc3e4, 0x2b9f, 0xabe6, 0x2b9e, 0xabe6, 0xabf5, 0x2bb7, 0xabe9, + 0xac4e, 0xb1b2, 0xabae, 0xabab, 0x5b8c, 0xe1bc, 0xa0a2, 0x2ba1, + 0xabe9, 0xabc6, 0x21a6, 0xabc7, 0x2bdb, 0xabec, 0x5cd3, 0xdcd4, + 0xe1c7, 0xa1a4, 0xabbb, 0x21a6, 0xabbc, 0x6751, 0xe752, 0x66ba, + 0x674d, 0x674e, 0x674f, 0x6db4, 0x6e16, 0xee64, 0xa1a8, 0x2b81, + 0x2bd5, 0x2bd7, 0x2bdc, 0x2be7, 0xc52f, 0xaebd, 0x2b81, 0x2bcd, + 0x2bd7, 0x2bdc, 0x2be7, 0xc52f, 0x2b81, 0x2bcd, 0x2bd5, 0x2bdc, + 0x2be7, 0xc52f, 0x2b9d, 0x2bf3, 0x2bf6, 0xc3e4, 0x2bbd, 0xabec, + 0x2b81, 0x2bcd, 0x2bd5, 0x2bd7, 0x2be7, 0xc52f, 0xabe2, 0xda67, + 0x4aad, 0xcab6, 0xabdd, 0x2b9e, 0xab9f, 0x2b81, 0x2bcd, 0x2bd5, + 0x2bd7, 0x2bdc, 0xc52f, 0x2ba1, 0xabb7, 0x2199, 0xa1a9, 0x2bbd, + 0xabdb, 0x2b9d, 0x2bda, 0x2bf6, 0xc3e4, 0xaba0, 0x2b9d, 0x2bda, + 0x2bf3, 0xc3e4, 0x2bfe, 0xac0d, 0xac0b, 0xac0e, 0x2bf9, 0xac0d, + 0x28fd, 0xa900, 0x1e13, 0xac08, 0x214b, 0x224b, 0xa2ca, 0xac07, + 0xac06, 0x1e13, 0xac02, 0xa3de, 0xabfb, 0x2bf9, 0xabfe, 0xabfc, + 0x2c13, 0x2c14, 0xc23e, 0x2c12, 0x2c14, 0xc23e, 0x2c12, 0x2c13, + 0xc23e, 0xa875, 0xac1a, 0xac19, 0x1e48, 0x2e85, 0x6ebc, 0xeebd, + 0x2617, 0x2690, 0xc51e, 0xc1ce, 0x2c20, 0x5d7b, 0x6bae, 0x6c7b, + 0xec9c, 0x2c1f, 0x5d7b, 0x6bae, 0x6c7b, 0xec9c, 0x2c23, 0x2c24, + 0xb023, 0xac22, 0x2c22, 0xb023, 0xac26, 0xac25, 0x279a, 0x282f, + 0xac2d, 0xac2b, 0xac29, 0xeb40, 0x279a, 0x282f, 0xac27, 0x21f2, + 0x2c34, 0x2c36, 0x2c37, 0xeb50, 0x21f2, 0x2c32, 0x2c36, 0x2c37, + 0xeb50, 0x21f2, 0x2c32, 0x2c34, 0x2c37, 0xeb50, 0x21f2, 0x2c32, + 0x2c34, 0x2c36, 0xeb50, 0xac4d, 0x1fad, 0x2118, 0xc6e1, 0x1fb7, + 0xddfc, 0xac64, 0xac53, 0xa1e5, 0xac4a, 0xac46, 0x6ce5, 0xee1f, + 0xac38, 0xaba9, 0x2c5b, 0xae48, 0xac43, 0x2c4f, 0xae48, 0xac6c, + 0xac62, 0xac61, 0xac42, 0xac68, 0xac66, 0xac5e, 0xadbc, 0xa1fa, + 0x1e97, 0x2d57, 0x3b72, 0xbb73, 0xdc48, 0x2742, 0xe62a, 0xdc3a, + 0xad87, 0xad17, 0xacf4, 0xad50, 0x2cf6, 0x2d8b, 0x2d8c, 0x2db9, + 0x6666, 0x669d, 0xe6af, 0xa188, 0x2d52, 0x2d53, 0x2dcc, 0x2dd6, + 0x2dd7, 0xc89e, 0xadba, 0xadbd, 0xad87, 0xad2c, 0xadcb, 0xada8, + 0xada7, 0xacdd, 0xacd2, 0xacfd, 0xada2, 0xada0, 0xad22, 0xadd2, + 0xace9, 0xace8, 0xacf0, 0xacef, 0xac98, 0x2d58, 0x2db8, 0xadc6, + 0x2c9b, 0x2d8b, 0x2d8c, 0x2db9, 0x6666, 0x669d, 0xe6af, 0xace1, + 0xad97, 0xad0d, 0xadae, 0xad08, 0xad07, 0x234e, 0xd3ef, 0xad03, + 0x27fc, 0x2d5c, 0xc895, 0xa393, 0xac97, 0x1ed1, 0xad19, 0x1ed1, + 0xad18, 0xace5, 0xacbd, 0x2d83, 0xad84, 0xcbcf, 0xac9a, 0x2ca9, + 0x2d53, 0xc89e, 0x2ca9, 0x2d52, 0xc89e, 0x1e97, 0x2c81, 0x3b72, + 0xbb73, 0x2cf5, 0x2db8, 0xadc6, 0xad94, 0x27fc, 0x2d0e, 0xc895, + 0xad81, 0x3e13, 0xbeaa, 0xad73, 0xad6f, 0xad5d, 0xad2d, 0xad2d, + 0x2c96, 0xacb4, 0x2c9b, 0x2cf6, 0x2d8c, 0x2db9, 0x6666, 0x669d, + 0xe6af, 0x2c9b, 0x2cf6, 0x2d8b, 0x2db9, 0x6666, 0x669d, 0xe6af, + 0xad5a, 0xad02, 0xace4, 0xace3, 0xacc4, 0xacc3, 0xad04, 0xe6df, + 0x2730, 0x2754, 0xa7ca, 0x2965, 0xa967, 0x2cf5, 0x2d58, 0xadc6, + 0x2c9b, 0x2cf6, 0x2d8b, 0x2d8c, 0x6666, 0x669d, 0xe6af, 0xacad, + 0xac7f, 0xacb3, 0x2dd3, 0xadd4, 0x2cf5, 0x2d58, 0xadb8, 0xacbf, + 0x2ca9, 0x2dd6, 0xadd7, 0xace6, 0xadc5, 0xadc5, 0x2ca9, 0x2dcc, + 0xadd7, 0x2ca9, 0x2dcc, 0xadd6, 0xaddd, 0xaddb, 0xa759, 0xade3, + 0xade2, 0xe78f, 0xadf0, 0xadef, 0xa36e, 0xd856, 0xadfd, 0x2377, + 0xb372, 0xadfa, 0x67cd, 0xe7e8, 0x231d, 0xdfca, 0x2370, 0x2e63, + 0xae64, 0x9f48, 0xae25, 0xae2b, 0xcd19, 0xae43, 0xae33, 0x9f16, + 0xd88b, 0xcd48, 0xcc3e, 0xcb92, 0x2e5f, 0xb5d8, 0xae05, 0x2e2f, + 0xae36, 0xae40, 0xae08, 0xd4c6, 0x2e47, 0x2e5a, 0xae6b, 0x2e26, + 0xae36, 0x2f52, 0x3b78, 0xc688, 0xae6c, 0xae10, 0x2e26, 0xae2f, + 0xae58, 0xae57, 0xa183, 0xae27, 0x21aa, 0xcf83, 0xae0f, 0x2e2e, + 0x2e5a, 0xae6b, 0x2c4f, 0xac5b, 0xce28, 0xae3c, 0xae3b, 0x2e2e, + 0x2e47, 0xae6b, 0x2e1c, 0xb5d8, 0xb5d9, 0x2e01, 0xae64, 0x2e01, + 0xae63, 0x2e2e, 0x2e47, 0xae5a, 0xae31, 0x1e7e, 0x2e79, 0xb9a6, + 0xc9ca, 0x1e26, 0x1f75, 0x2002, 0x20a1, 0x2e77, 0xcadd, 0xae76, + 0xa016, 0x2e72, 0xb9a6, 0x9e48, 0xa1e0, 0x2e83, 0x2eb5, 0xaee3, + 0x2ef0, 0xaef3, 0x2e7f, 0xaee3, 0x5358, 0xd38a, 0x1e48, 0x2c1b, + 0x6ebc, 0xeebd, 0xb176, 0xc240, 0xaeec, 0xaee1, 0xaeab, 0x2fdc, + 0xb1c9, 0xaedf, 0xef90, 0x2ec3, 0xaee2, 0xa750, 0xae93, 0x2e7f, + 0x53f4, 0x544a, 0xd4ed, 0xaebb, 0x377e, 0x3780, 0x37a9, 0x37d7, + 0xb8a5, 0xaeb6, 0xaece, 0xabd3, 0xaedf, 0x2395, 0xa3a0, 0xa3a2, + 0x2e9f, 0xaee2, 0xa3a6, 0xaebc, 0x23a9, 0xaed0, 0x23a9, 0xaecf, + 0xa3a8, 0x2398, 0x28e5, 0xe13d, 0xa3ae, 0x2e99, 0xaebf, 0x2382, + 0xa3b0, 0xae91, 0x2e9f, 0xaec3, 0x2e7f, 0xae83, 0xaeea, 0xaee9, + 0xae90, 0x2385, 0x2e81, 0xaef3, 0x2385, 0x239b, 0x2e81, 0xaef0, + 0xdfea, 0x26d8, 0x26de, 0x26ec, 0x2efd, 0x5ff4, 0xe025, 0x1e43, + 0xdffa, 0x26d8, 0x26de, 0x26ec, 0x2efb, 0x5ff4, 0xe025, 0xe58b, + 0x44e3, 0x598d, 0x5fa1, 0x5fa7, 0x5fa8, 0x5fa9, 0xdfaf, 0xc570, + 0xb8c4, 0x330a, 0xb335, 0xa958, 0x9e00, 0x9e8c, 0x1e09, 0xa3c1, + 0x5cae, 0x5cb3, 0xdd30, 0xaf12, 0xaf11, 0xa40a, 0xaf35, 0x2f4c, + 0xc030, 0xcd43, 0xaf33, 0xaf4e, 0xaf2a, 0xaf20, 0xaf3a, 0x2f3e, + 0xaf48, 0xaf37, 0xaf3c, 0xaf3b, 0x2f39, 0xaf48, 0xa22b, 0x2f39, + 0xaf3e, 0xaf25, 0xaf2f, 0xaf51, 0xaf50, 0x2e30, 0x3b78, 0xc688, + 0x2679, 0xc576, 0xaf55, 0x2f54, 0x6304, 0xe332, 0xcbf2, 0x2f5a, + 0xbc47, 0x2f59, 0xbc47, 0x2f5c, 0x2f5d, 0xaf5e, 0x2f5b, 0x2f5d, + 0xaf5e, 0x2f5b, 0x2f5c, 0xaf5e, 0x2f5b, 0x2f5c, 0xaf5d, 0xaf60, + 0x2f5f, 0xd4a6, 0xaf66, 0xaf65, 0xaf72, 0xcdb5, 0xe6d5, 0x1efd, + 0xb58c, 0xaf68, 0x9ee2, 0x1eff, 0x2fac, 0xeae3, 0xafb9, 0x1f5b, + 0xeaf4, 0x2f83, 0xdfec, 0x2fb0, 0x2fb4, 0xafb5, 0xaf80, 0x2f91, + 0x5ff3, 0xe015, 0xc2e5, 0x9f77, 0x9f6a, 0xa40e, 0xe65f, 0x2f84, + 0x5ff3, 0xe015, 0x1ece, 0xaf9e, 0x22d1, 0xafa0, 0x1ece, 0xaf93, + 0x22d1, 0xaf95, 0xc9a6, 0x201f, 0xd5c9, 0xa065, 0x290d, 0xd986, + 0x1eff, 0x208d, 0xaf77, 0xa09c, 0xaf81, 0xa0c4, 0x2fb7, 0x3074, + 0xb0b3, 0x2f81, 0xafb5, 0x2f81, 0xafb4, 0x2fb3, 0x3074, 0xb0b3, + 0xaf7b, 0xafc4, 0xafc3, 0xb1b6, 0x9ec1, 0x31f4, 0xb1fa, 0xda8c, + 0xb07e, 0x2e94, 0xb1c9, 0xb09f, 0xb025, 0xb182, 0x2306, 0x3031, + 0xb0a4, 0xb0b4, 0xa538, 0xb13e, 0x31d0, 0xb1f7, 0xb14b, 0xb16b, + 0xb1ae, 0xb16a, 0xb0b5, 0xb134, 0x9f42, 0xb091, 0xb190, 0xb056, + 0x2c22, 0xac24, 0xafe3, 0xb060, 0x2306, 0x2fe9, 0xb0a4, 0x30e3, + 0x3374, 0x4dcf, 0x4deb, 0xce3d, 0xb1df, 0xb1cc, 0xb052, 0xb200, + 0xb046, 0x21c4, 0xb0bd, 0xb01d, 0xb02a, 0x241d, 0xb08b, 0x2379, + 0xdcc9, 0xd03b, 0xb119, 0x3085, 0xb0a6, 0xb1c7, 0x2fb3, 0x2fb7, + 0xb0b3, 0xb0e0, 0x20eb, 0x2641, 0x30aa, 0xb0e1, 0xb15f, 0xb1e8, + 0xb137, 0xb0fb, 0x30a9, 0xb0f1, 0xb0f2, 0xafd9, 0x30e5, 0xb142, + 0x3111, 0xb139, 0x3071, 0xb0a6, 0x24f2, 0x2560, 0x2586, 0x269e, + 0xa7d1, 0xb061, 0xc302, 0xb016, 0x9fd4, 0x3102, 0xda96, 0xdbef, + 0xafe2, 0xb0ca, 0x2306, 0x2fe9, 0xb031, 0x3071, 0xb085, 0x307c, + 0xb0f1, 0x20eb, 0x3076, 0xb0e1, 0xb164, 0xb1f8, 0xb173, 0xb1ab, + 0x2fb3, 0x2fb7, 0xb074, 0xaff0, 0xb005, 0xe5f7, 0x21c4, 0xb053, + 0x30a2, 0xea5a, 0x248a, 0x248c, 0xefa2, 0x1ffd, 0xbb23, 0xb075, + 0x20eb, 0x3076, 0xb0aa, 0xb03b, 0x307f, 0xb142, 0xb1fc, 0xb158, + 0xb1f2, 0xb18a, 0xb11c, 0x3159, 0xb15a, 0xb19a, 0xb163, 0x307c, + 0xb0a9, 0xb07d, 0xd822, 0xb07b, 0xd90a, 0x3096, 0xda96, 0x4609, + 0xc652, 0x3080, 0xb139, 0xb06a, 0xc231, 0xb0ec, 0xb14d, 0xb181, + 0xb1a4, 0xb192, 0x2abf, 0xd06d, 0xb1fc, 0xb006, 0xb07a, 0x3080, + 0xb111, 0xb14e, 0xa35a, 0xaffe, 0xe858, 0x307f, 0xb0e5, 0xb817, + 0xbbb7, 0xb001, 0xb120, 0x313c, 0x361a, 0xc718, 0x3174, 0xb1fe, + 0xb0e8, 0x30ed, 0xb15a, 0x30ed, 0xb159, 0x3078, 0xb185, 0xb0ef, + 0xb0ab, 0xb004, 0xb002, 0xb196, 0xd651, 0xb0ad, 0xb151, 0xae86, + 0x317d, 0xb21a, 0x317c, 0xb21a, 0xbb32, 0x21ed, 0x21f4, 0xb191, + 0xb121, 0xafe7, 0xb15f, 0xb1a9, 0xb0eb, 0xb01c, 0x21ed, 0x21f4, + 0xb17f, 0xb126, 0x2af6, 0xc644, 0x316d, 0xb197, 0xb196, 0x259c, + 0x3199, 0xbb56, 0x259c, 0x3198, 0xbb56, 0xb0ee, 0xb124, 0x22b3, + 0x22b4, 0xa2de, 0xb187, 0xb0af, 0xb003, 0xabaa, 0xafc6, 0xa766, + 0xa2e4, 0xb073, 0x2e94, 0xafdc, 0xb03f, 0xb1d4, 0x3000, 0xb1f7, + 0xb1e3, 0x2b3e, 0xb1f6, 0xb1cd, 0xb1f5, 0xd499, 0xb03c, 0xb1d1, + 0xb1e7, 0xb1e6, 0xb079, 0xb0e9, 0x2fcf, 0xb1ff, 0xb1dc, 0xb1d2, + 0x3000, 0xb1d0, 0xb0ac, 0xafcf, 0x30e7, 0xb133, 0xbb22, 0xb151, + 0xb1f4, 0xb04b, 0xb207, 0xb206, 0xb214, 0x322f, 0xb232, 0xb20b, + 0xb227, 0x3226, 0xb230, 0x317c, 0xb17d, 0xb21e, 0x5ca1, 0xdd22, + 0xb21b, 0x3218, 0xb230, 0xb217, 0xb22c, 0xb229, 0x2279, 0xa2e0, + 0x320f, 0xb232, 0x3218, 0xb226, 0x320f, 0xb22f, 0x3237, 0xb238, + 0x3236, 0xb238, 0x3236, 0xb237, 0xa384, 0xb23e, 0x236f, 0xa918, + 0xb23b, 0xb24c, 0xb24b, 0xce94, 0x33e0, 0xcd2e, 0x34b2, 0xb4c8, + 0xb2c2, 0xa728, 0x5a17, 0xdbac, 0xb34d, 0xb268, 0xe1e6, 0xa7f7, + 0x23c9, 0xb260, 0x32e1, 0xb4f4, 0xb36b, 0xb383, 0xb3da, 0xb4a6, + 0xb4fe, 0xb5bc, 0x2448, 0xc2c2, 0xa214, 0xb4ab, 0xb2cb, 0xb2d4, + 0xb2d7, 0x32e9, 0xb4c7, 0xb476, 0xb473, 0xb384, 0xb436, 0xdb77, + 0xa831, 0xb4e1, 0x32de, 0x4274, 0xd9dd, 0xb255, 0xb4d4, 0xb49a, + 0xb29b, 0xb2ff, 0x37b4, 0xb7fa, 0xb428, 0xb29c, 0xb2d6, 0xb2d5, + 0xb29d, 0xb2dd, 0xb2dc, 0xb2b5, 0xb4ec, 0x336e, 0xb4da, 0x3269, + 0x3304, 0xb4f4, 0xb50f, 0xb3c0, 0xb4c1, 0xb514, 0xb4f0, 0x34a5, + 0xc67a, 0x329e, 0xb4c7, 0xb2cf, 0xb39b, 0x32e1, 0xb4f4, 0x2f04, + 0xb335, 0x1e3e, 0x34e7, 0xd209, 0xb46f, 0xb523, 0xb397, 0xb4be, + 0xb4bb, 0xb33e, 0xb493, 0xb4cb, 0xb49f, 0xb399, 0xb4e0, 0xb3ee, + 0xb48f, 0x2f04, 0xb30a, 0xb412, 0xdf13, 0xb31f, 0xb3d2, 0x3405, + 0x34b9, 0xb52a, 0x38b1, 0x4975, 0xcd91, 0xb25e, 0xb3d1, 0xd379, + 0xb41c, 0xb488, 0xb40d, 0xb4bf, 0xb3db, 0x3417, 0xb4e3, 0xd20d, + 0xb26a, 0x32e0, 0xb4da, 0x2377, 0xadfb, 0xb03b, 0x3816, 0xb8f2, + 0x27fd, 0xb26b, 0xb2a1, 0xb31c, 0xb323, 0xb302, 0xe1c7, 0xb4d1, + 0xa30a, 0xb3ed, 0xb4c4, 0xb451, 0xb4f2, 0xb4a3, 0xb47b, 0xb414, + 0xb45c, 0xc8b0, 0xb2e3, 0xb34f, 0xb33f, 0xb26c, 0xb362, 0xb24e, + 0xb3b2, 0xb325, 0xd0cc, 0x3416, 0xb447, 0xb52c, 0xb4b3, 0xb519, + 0xb4f1, 0xb45f, 0xce3d, 0x3341, 0x34b9, 0xb52a, 0xb784, 0xb35f, + 0xb337, 0xb3bb, 0x33fa, 0xb447, 0xb363, 0x335c, 0xd490, 0xb2d3, + 0xb498, 0xb528, 0xb2a2, 0x34d5, 0xb51c, 0xb9a8, 0x3444, 0xb51d, + 0x3442, 0xb51d, 0xb504, 0x34fa, 0xd96c, 0x33fa, 0xb416, 0xb4ef, + 0xb524, 0xb3b4, 0xb3bc, 0xb402, 0x4dcf, 0x4deb, 0xce3d, 0xb4f5, + 0xb31a, 0xb2a0, 0xb29f, 0xb3ba, 0x21fb, 0xb4ca, 0xb516, 0xb35e, + 0xb326, 0xb491, 0xb490, 0xb320, 0xb42d, 0xb2c8, 0xb322, 0xb4cd, + 0xb3b8, 0x32e8, 0xc67a, 0xb26f, 0x4d55, 0x4d76, 0xcedd, 0xb29a, + 0x3251, 0xb4c8, 0xb3ff, 0xb506, 0xb4f7, 0xb4fc, 0x3341, 0x3405, + 0xb52a, 0xb51b, 0xb31e, 0xb31d, 0xb361, 0xb2e5, 0xb3b3, 0x329e, + 0xb2e9, 0x3251, 0xb4b2, 0x21fb, 0xb483, 0xb321, 0xb4a1, 0xb3a5, + 0xb2c5, 0x343a, 0xb51c, 0x32e0, 0xb36e, 0xb4fb, 0xb324, 0xb2ac, + 0xb363, 0xb52c, 0x1e3e, 0x3319, 0xd209, 0xb2df, 0xb448, 0xb2e7, + 0xb401, 0xb3b7, 0x3269, 0x32e1, 0xb304, 0xb469, 0x34b7, 0xd96d, + 0xb446, 0xb4de, 0xb4b8, 0xb50a, 0xb270, 0x9e51, 0xb445, 0xb522, + 0xb4b5, 0xb51f, 0xb4fd, 0xb2e2, 0xb522, 0xb2e6, 0xb484, 0xb400, + 0xb4ba, 0x343a, 0xb4d5, 0x3442, 0xb444, 0xb508, 0x3505, 0xb512, + 0xb31b, 0xb44a, 0xb432, 0x3341, 0x3405, 0xb4b9, 0xc234, 0x33fd, + 0xb4e5, 0xb535, 0xb534, 0xa3ce, 0xd003, 0x4b27, 0x4b56, 0x4b5e, + 0xcba3, 0x1ff2, 0x209a, 0xa2b9, 0x9f8e, 0xb575, 0x23d9, 0xb558, + 0xb559, 0xa2c4, 0x22c5, 0xa2d1, 0x5d01, 0xdd25, 0x23d9, 0xb54d, + 0xb54e, 0x3582, 0xbb5b, 0xa0d8, 0x2b66, 0x2b78, 0x3585, 0x3586, + 0xb588, 0xb578, 0xb54c, 0xb5c9, 0xb570, 0x69c6, 0x69c8, 0x6a45, + 0xea71, 0xbb5d, 0x355b, 0xbb5b, 0xbbd9, 0x2b66, 0x2b78, 0x3569, + 0x3586, 0xb588, 0x2b66, 0x2b78, 0x3569, 0x3585, 0xb588, 0x2b66, + 0x2b78, 0x3569, 0x3585, 0xb586, 0x1e9d, 0x358a, 0x6f4a, 0xef50, + 0x1e9d, 0x3589, 0x6f4a, 0xef50, 0x358e, 0xef4b, 0x1efd, 0xaf6c, + 0xd9ba, 0x358b, 0xef4b, 0xb595, 0x359e, 0xd7a4, 0xb593, 0x65d8, + 0x6b25, 0x6b26, 0x6b2a, 0xeb2d, 0x3594, 0xd7a4, 0xe159, 0xb5ac, + 0xb5a9, 0xb5b7, 0xb5b5, 0xb5b2, 0xb5ad, 0x1e8e, 0x1e8f, 0xb275, + 0xb5d2, 0xb577, 0xb5c8, 0x4c31, 0xcc4f, 0x2e1c, 0xae5f, 0x2e61, + 0xb5db, 0xb5d9, 0xc121, 0xa6f8, 0xd20a, 0x234f, 0x2354, 0xa3f6, + 0x35f9, 0xb642, 0x2164, 0x363f, 0xb6e0, 0xb698, 0x35f6, 0xb642, + 0xb680, 0xb625, 0xb664, 0xb63b, 0x2347, 0xb6fb, 0xb626, 0xb719, + 0xb62c, 0xb6c7, 0xb14e, 0xc6a8, 0xb5fe, 0xb60a, 0xb60f, 0xc0a4, + 0xb630, 0xb62f, 0xa1ac, 0xb602, 0x365d, 0xb6f8, 0xb6e8, 0x6855, + 0xe86f, 0x35f7, 0xb6e0, 0x35f6, 0xb5f9, 0xb644, 0xb643, 0xb64b, + 0xb649, 0xb6ec, 0x3681, 0xb6c9, 0xb6c4, 0xb688, 0xb689, 0xb669, + 0x363c, 0xb6f8, 0xb660, 0xb65f, 0xb5ff, 0xb6df, 0xb65a, 0xb69c, + 0x3692, 0xc520, 0xb697, 0xb5fa, 0x3653, 0xb6c9, 0xb6ab, 0x4f6a, + 0xdfa0, 0xb655, 0xb656, 0xb674, 0x4156, 0xc157, 0x367b, 0x5af3, + 0x5c19, 0x65c7, 0xe68c, 0xb5f8, 0xb66e, 0xc545, 0x36ad, 0x36cd, + 0xc6a5, 0x2386, 0x23af, 0xb6c6, 0xb6d6, 0xb6c1, 0xb682, 0x36a4, + 0xc6a5, 0x1e86, 0xc7ad, 0xb6a8, 0xb654, 0x2386, 0x23a4, 0x23af, + 0xb6a6, 0xb619, 0x3653, 0xb681, 0x40a4, 0x4167, 0x41f3, 0xc7be, + 0xb6a4, 0xa411, 0xb6a7, 0xb668, 0x35f7, 0xb63f, 0xb63d, 0xb652, + 0x3d40, 0x4cac, 0x6eaf, 0x6eb4, 0xeeb9, 0xb6f5, 0xb6f3, 0x1e66, + 0x363c, 0xb65d, 0xb6fa, 0xb6f9, 0x2347, 0xb607, 0xb6fe, 0xb6fd, + 0xa1a3, 0x22d6, 0xa2d7, 0x9f1a, 0xd8e8, 0xb717, 0xb716, 0xb60e, + 0xb722, 0xb71f, 0xb71e, 0xb71b, 0xd0e7, 0x2932, 0xb94d, 0xa273, + 0xb72f, 0x372e, 0xd853, 0xc843, 0x3a38, 0xba8f, 0xb736, 0xb735, + 0x21e0, 0xba5f, 0xbbba, 0x594d, 0x66d1, 0xe6dc, 0x3a29, 0xbb0a, + 0xb87f, 0xa72c, 0x3766, 0x3919, 0xba86, 0xe0a8, 0xb9d3, 0xb89d, + 0xb803, 0x9f86, 0xb749, 0xb94a, 0xb9aa, 0x386e, 0xc6c3, 0xa091, + 0x9e1c, 0x2eba, 0x3780, 0x37a9, 0x37d7, 0x38a5, 0xeb06, 0xe5c6, + 0x2eba, 0x377e, 0x37a9, 0x37d7, 0xb8a5, 0xb975, 0x3406, 0xb9cb, + 0xb960, 0x1e2b, 0x3860, 0x390f, 0xb930, 0x5edb, 0x5ef6, 0xdf6d, + 0xd3d3, 0xba05, 0xb85d, 0xba1e, 0xb8d7, 0xbaea, 0xb80c, 0xb898, + 0xb8d6, 0x2eba, 0x377e, 0x3780, 0x37d7, 0xb8a5, 0x39cd, 0x6397, + 0xe453, 0xb953, 0xb89f, 0x23f0, 0x3aaf, 0xd01c, 0x32d0, 0xb7fa, + 0xb827, 0xd235, 0xb822, 0xb959, 0x2eba, 0x377e, 0x3780, 0x37a9, + 0xb8a5, 0xbac3, 0xbab8, 0xb7fb, 0x231b, 0xb7fe, 0xa948, 0x3801, + 0x387a, 0xba6e, 0xb805, 0xb7ff, 0x32d0, 0xb7b4, 0xb7e5, 0xba89, + 0x231b, 0xb7e9, 0xb7f9, 0xb894, 0x37f3, 0x387a, 0xba6e, 0x3764, + 0xbad4, 0x39ae, 0xd363, 0xb7f5, 0xba19, 0x385f, 0xb8e7, 0xbadb, + 0x39de, 0xbaf3, 0xb8df, 0x37a6, 0xbae8, 0x3aaa, 0xbadf, 0x3b04, + 0xbb17, 0xba39, 0x337f, 0xb8f2, 0x21d3, 0xb144, 0xa20a, 0xb7cf, + 0xb7bb, 0x3a43, 0xcb4f, 0x39d8, 0xba23, 0xd988, 0x271d, 0xbb12, + 0xb97f, 0x2353, 0xb9d5, 0xb852, 0xb851, 0xb90e, 0x3a31, 0xbafb, + 0xb7a1, 0x3808, 0xb8e7, 0x1e2b, 0x3792, 0xb90f, 0xba48, 0xb968, + 0xba94, 0xb9bf, 0x39d7, 0xba4b, 0xba3a, 0xba9c, 0xb9f3, 0xba01, + 0xba33, 0x376f, 0xc6c3, 0xba03, 0x37f3, 0x3801, 0xba6e, 0xbf06, + 0xb746, 0x3a11, 0xcc17, 0xb9f1, 0x3973, 0xb9d1, 0x4681, 0xc682, + 0xb800, 0xb7a7, 0xb761, 0xb7ad, 0x2eba, 0x377e, 0x3780, 0x37a9, + 0xb7d7, 0x2922, 0xa923, 0x3346, 0xcd91, 0xbaae, 0xb8f6, 0xb9e4, + 0x391c, 0xbaa2, 0xbb1e, 0xaf03, 0x38cb, 0x3ab1, 0x3ac0, 0xc881, + 0x38ca, 0x3ab1, 0x3ac0, 0xc881, 0xb936, 0xb7a8, 0xb7a3, 0xb80b, + 0xba0a, 0x3808, 0xb85f, 0xca1c, 0x337f, 0xb816, 0xb8be, 0xbac2, + 0xc897, 0xb9e8, 0x1e57, 0x9e58, 0xb858, 0x1e2b, 0x3792, 0xb860, + 0x47f4, 0xc887, 0xb95a, 0xb749, 0x38c0, 0xbaa2, 0xbadd, 0xb9e7, + 0xb9f6, 0xbb0f, 0xba3f, 0xba62, 0xb792, 0xd46e, 0xb8d5, 0xd45a, + 0xb768, 0x2932, 0xb72c, 0xb7ab, 0xba62, 0xb7d5, 0xb918, 0xb78f, + 0xb986, 0xb966, 0xb965, 0xb862, 0xc243, 0xba9d, 0x9e1a, 0x3885, + 0xb9d1, 0xb781, 0xba13, 0x1e50, 0xba02, 0xb842, 0xbb16, 0xb9b2, + 0xb961, 0xbaec, 0xbada, 0x3af8, 0xbb05, 0xc253, 0x2e72, 0xae79, + 0xb43e, 0xb769, 0x3804, 0xd363, 0xb985, 0xba4a, 0xe198, 0xb864, + 0xb9d9, 0x5028, 0xe392, 0xb784, 0xb7aa, 0x3885, 0xb973, 0xb760, + 0x39f9, 0xba70, 0x2353, 0xb84c, 0x3865, 0xba4b, 0x3837, 0xba23, + 0xb9c7, 0xba9f, 0x3abb, 0xce7f, 0xb80a, 0xbab3, 0xbae7, 0xb8bf, + 0xb920, 0xb901, 0xb884, 0xb868, 0xb922, 0xb9d4, 0xb869, 0x1e50, + 0xb97d, 0xb879, 0xb79e, 0xb8e5, 0xbad3, 0x3881, 0xcc17, 0xbac1, + 0xb97c, 0xb807, 0xb7a2, 0x3837, 0xb9d8, 0x3743, 0xbb0a, 0x3a6b, + 0xbace, 0x3aa3, 0xd262, 0x385c, 0xbafb, 0xb86a, 0x1e1b, 0x23e2, + 0x3b09, 0xd5c2, 0x3734, 0xba8f, 0xb811, 0xb866, 0xcf47, 0xb92b, + 0x3830, 0xcb4f, 0xb861, 0xb9b4, 0x3865, 0xb9d7, 0xb73a, 0x392d, + 0xb955, 0x3a2a, 0xbace, 0x37f3, 0x3801, 0xb87a, 0xb9d4, 0xbae5, + 0x3ad3, 0x5263, 0xd26a, 0xbade, 0xbaa9, 0xbafd, 0xb749, 0xb7fd, + 0x3734, 0xba38, 0xcc37, 0xb863, 0x3a98, 0xd617, 0xba97, 0xb867, + 0xb96b, 0xb9da, 0x38c0, 0xb91c, 0xba2f, 0xba81, 0x380e, 0xbadf, + 0xb8bc, 0x23f0, 0xb7b1, 0x38ca, 0x38cb, 0x3ac0, 0xc881, 0xb9df, + 0xb7e0, 0xb9db, 0x38ca, 0x38cb, 0x3ab1, 0xc881, 0xba12, 0xb8f9, + 0xb7dc, 0xa1f3, 0xd030, 0x3a2a, 0xba6b, 0x3a10, 0xba79, 0xb803, + 0xbb11, 0xb988, 0xb809, 0xb91f, 0xba7c, 0x380e, 0xbaaa, 0xba71, + 0xb9e0, 0xb80c, 0xb7a5, 0xb987, 0xb80a, 0xb989, 0xbb1e, 0x385c, + 0xba31, 0xba83, 0x380f, 0xbb17, 0xb989, 0x1e1b, 0x23e2, 0x3a37, + 0xd5c2, 0x3743, 0xba29, 0xb924, 0xbad5, 0x271d, 0xb83e, 0xb984, + 0x380f, 0xbb04, 0x60c1, 0x6b30, 0xeb31, 0x38c2, 0xbafa, 0x4f3a, + 0xcf3c, 0x31fd, 0x3b53, 0x3b61, 0xea69, 0x1ffd, 0x30de, 0xda22, + 0xbb5f, 0xbb50, 0xb17e, 0xbb3e, 0xbb58, 0xe4a6, 0xbb35, 0xdb0c, + 0x23f9, 0xa606, 0xbb27, 0x3b22, 0xbb61, 0x259c, 0x3198, 0xb199, + 0xbb3b, 0x355b, 0xb582, 0xb581, 0xbb24, 0x3b22, 0xbb53, 0x3b68, + 0xbb69, 0x3b65, 0xbb69, 0x3b65, 0xbb68, 0xa24d, 0x3e0b, 0x3f80, + 0xbf81, 0x6f52, 0xef7f, 0x1e97, 0x2c81, 0x2d57, 0xbb73, 0x1e97, + 0x2c81, 0x2d57, 0xbb72, 0x2386, 0x23af, 0xbb77, 0x2386, 0x23af, + 0xbb74, 0x2e30, 0x2f52, 0xc688, 0xbb7a, 0xbb79, 0x3bb1, 0xbbb2, + 0x273d, 0x3b7f, 0x3b81, 0xbca1, 0x273d, 0x3b7e, 0x3b81, 0xbca1, + 0xa92d, 0x273d, 0x3b7e, 0x3b7f, 0xbca1, 0xbba4, 0xbb98, 0xbb9e, + 0xbbae, 0xbb8b, 0xbbab, 0xbb92, 0xbbaf, 0xbb87, 0xbb9a, 0xbb93, + 0xbba1, 0x3b7c, 0xbbb2, 0x3b7c, 0xbbb1, 0xbbc6, 0xb147, 0xb740, + 0x28f3, 0xbbbc, 0x28f3, 0xbbbb, 0xbbc1, 0x3bc0, 0x41ec, 0xdb6d, + 0xdf42, 0xbbb4, 0x233b, 0xe1ab, 0xbbcf, 0xbbce, 0x50b2, 0xd8ac, + 0xa936, 0xc562, 0xbbd8, 0xbbd7, 0xb583, 0xbbee, 0xbc08, 0xc403, + 0xbbdf, 0xbbff, 0xbbf5, 0x4266, 0xc29b, 0xbc0c, 0x3be1, 0xbc0a, + 0xbc08, 0xbc07, 0x3c17, 0x3c23, 0xc081, 0x3c14, 0x3c23, 0xc081, + 0xe6f0, 0xbc2b, 0x3c14, 0x3c17, 0xc081, 0xbc2c, 0xbc22, 0xbc29, + 0xbc33, 0xbc32, 0x3c35, 0xbc3a, 0x3c34, 0xbc3a, 0x1ecc, 0x21ab, + 0xa1b0, 0x3c34, 0xbc35, 0x232f, 0x2f59, 0x2f5a, 0xbed9, 0xbf22, + 0xbcdb, 0x3c5a, 0xbc61, 0x3c59, 0xbc61, 0x3c59, 0xbc5a, 0xbe6f, + 0xbc74, 0xbc73, 0xbd36, 0xa1b3, 0xbef8, 0x3c89, 0xc00b, 0xbc88, + 0xbca1, 0xa1b2, 0xbdfb, 0xbe9d, 0x273d, 0x3b7e, 0x3b7f, 0x3b81, + 0xbc92, 0x3cfd, 0xbfa4, 0xc043, 0xbf1a, 0xc01d, 0xbdea, 0xbec4, + 0xbe22, 0xbf59, 0x3eec, 0xcc04, 0xe63b, 0xbcb2, 0xbcb1, 0xbfd4, + 0xe711, 0xa1b5, 0x1f71, 0xc04b, 0xbc4e, 0xbeaf, 0xbfd8, 0xa76d, + 0xda3b, 0x3d99, 0xbdda, 0xa1ba, 0xa933, 0xbfa9, 0x3edd, 0xc027, + 0xc018, 0xbffc, 0xc009, 0x3e8c, 0x3f51, 0xc67a, 0x3ca2, 0xbfa4, + 0xbd87, 0xbf54, 0xa1bd, 0xc051, 0xbf54, 0xbc79, 0xcaaa, 0xb6f2, + 0xbd79, 0xbde8, 0xbdfa, 0xbf3f, 0xbf86, 0xbe5e, 0xbeae, 0xbfc1, + 0xbe2c, 0xbfae, 0x3e08, 0xbfdf, 0x26a0, 0xc00f, 0xbefb, 0xbe3e, + 0xbef8, 0xbfc3, 0xbf6f, 0xbfdc, 0x3ee8, 0x3ff1, 0xbff5, 0xbfa3, + 0x3f82, 0x3f84, 0xc013, 0xbf94, 0xbd43, 0xa1c2, 0x21c3, 0xa857, + 0xbe7c, 0xbcfe, 0xbe09, 0xbe67, 0x5385, 0xd49e, 0x3cea, 0xbdda, + 0xbfe4, 0x3e0e, 0xc006, 0xbf87, 0xbdf6, 0xbf23, 0xbf7f, 0xbe26, + 0xbeb3, 0xbe19, 0xbecc, 0xbf64, 0x3f97, 0xc900, 0xbf32, 0x3e0b, + 0x3f80, 0x3f81, 0xbfc7, 0xbf04, 0xa1c5, 0xa1c9, 0xbfb1, 0xbe7d, + 0xc5f3, 0xa1c4, 0x3cea, 0xbd99, 0xbe0c, 0x21c0, 0xbd44, 0xbca6, + 0x2a6c, 0xbedb, 0xbe7b, 0x26e6, 0x3e0a, 0xbe15, 0xbd9e, 0xbe05, + 0xbd45, 0xbc97, 0xbdf8, 0xbe34, 0x3d4e, 0xbfdf, 0xbd89, 0x26e6, + 0x3df5, 0xbe15, 0x3b6e, 0x3da9, 0x3f80, 0xbf81, 0xbde5, 0xbf2c, + 0x3d9c, 0xc006, 0xbf38, 0xbfa0, 0x2d60, 0x3eaa, 0x5c3f, 0xdc40, + 0xbf01, 0x26e6, 0x3df5, 0xbe0a, 0xc00b, 0xbef2, 0xbda3, 0xa1cf, + 0xbca8, 0xbda1, 0xbeab, 0xbd4b, 0xbe07, 0x6030, 0xe04a, 0xbd51, + 0xa1d1, 0xbd48, 0xbd8c, 0xbc64, 0xbdf3, 0xbd85, 0xbdc4, 0xc063, + 0x3ebc, 0xbfd5, 0x3ee1, 0xbeff, 0xbfda, 0xa24c, 0xbf70, 0xbffa, + 0xbf0a, 0xbf11, 0x3cfc, 0x3f51, 0xc67a, 0xa3b5, 0x3fdb, 0xd499, + 0x21c6, 0xa1d6, 0xbf91, 0xbc9f, 0x2d60, 0x3e13, 0x5c3f, 0xdc40, + 0xbe29, 0xbd49, 0x3cdd, 0xe061, 0xbda2, 0x4194, 0xe394, 0x3e7f, + 0xbfd5, 0xbca7, 0xc06d, 0xbda4, 0xd365, 0xbf77, 0x232f, 0xbc47, + 0xbefe, 0xbdeb, 0x3cf7, 0xc027, 0xbeef, 0x404e, 0x4054, 0xc067, + 0xc044, 0x3e80, 0xbeff, 0xc005, 0xbffe, 0xbfeb, 0xc064, 0x3d5c, + 0x3ff1, 0xbff5, 0xc058, 0xbfa6, 0x3caa, 0xcc04, 0xbede, 0xbe17, + 0x2364, 0x3f9b, 0xc002, 0x3c7b, 0xbd52, 0xbd50, 0xbeda, 0x3e80, + 0xbee1, 0xbe14, 0xbdaf, 0xb87c, 0xbe87, 0xbe89, 0xc055, 0xbca4, + 0xbc49, 0xbd9f, 0x1e79, 0x1e7e, 0x9e81, 0xc1b3, 0xbe0d, 0xbf44, + 0xbda8, 0xbe10, 0xbd46, 0xe88d, 0xbf31, 0xc04c, 0xc020, 0xc01f, + 0xc032, 0xbff0, 0x3cfc, 0x3e8c, 0xc67a, 0x3d01, 0xbd2f, 0xbca9, + 0x3f5c, 0xbff3, 0x3f5b, 0xbff3, 0xbda6, 0xbd54, 0xbe83, 0xc026, + 0xbed7, 0xbda0, 0x3b6e, 0x3da9, 0x3e0b, 0xbf81, 0x3b6e, 0x3da9, + 0x3e0b, 0xbf80, 0x3d67, 0x3f84, 0xc013, 0x3d67, 0x3f82, 0xc013, + 0xbd47, 0xbd9d, 0xbe9c, 0xbd69, 0xbda7, 0xbfb3, 0x2364, 0x3ef7, + 0xc002, 0xc03e, 0x21db, 0xa1dc, 0xbe11, 0xbd63, 0x3ca2, 0xbcfd, + 0xbeea, 0xbcf6, 0xbd4d, 0xc032, 0xbdc0, 0xbf9a, 0xbd4a, 0xbd53, + 0xbda9, 0x4028, 0xc02c, 0xc015, 0xbcb5, 0x3e7f, 0xbebc, 0xbcde, + 0x3e81, 0xc02f, 0x3e95, 0xd499, 0xbd55, 0x3d4e, 0xbe08, 0xbd9b, + 0xbee5, 0xbf4d, 0x3d5c, 0x3ee8, 0xbff5, 0x3f5b, 0xbf5c, 0x3d5c, + 0x3ee8, 0xbff1, 0x65ca, 0xe614, 0xbe85, 0xbcfa, 0xbee4, 0x2364, + 0x3ef7, 0xbf9b, 0xbee2, 0x3d9c, 0xbe0e, 0xbcfb, 0x3c88, 0xbe16, + 0xbd4f, 0x3d67, 0x3f82, 0xbf84, 0xbfd2, 0xbcf8, 0xbca5, 0xbf47, + 0xbf46, 0xbf74, 0x3cf7, 0xbedd, 0x3fd1, 0xc02c, 0x3fd1, 0xc028, + 0xbfda, 0xaf25, 0x3f4b, 0xbfb0, 0xbf9c, 0xbca3, 0xbee0, 0x1f71, + 0xbcd5, 0xbf45, 0x3edf, 0xc054, 0xc05d, 0xbd12, 0x3edf, 0xc04e, + 0xbf13, 0xbee9, 0xc04f, 0xbe7e, 0xbee6, 0xbedf, 0xbec5, 0x2149, + 0xc097, 0xc1c8, 0x670a, 0x671b, 0xe748, 0x4ac3, 0xcac8, 0x40fe, + 0xdd64, 0x407e, 0xc0d6, 0x407d, 0xc0d6, 0xc1e6, 0xc16c, 0x3c14, + 0x3c17, 0xbc23, 0x4210, 0x6229, 0xe46a, 0x23cd, 0xa3db, 0xc08f, + 0xc08e, 0x2149, 0xc06e, 0xc152, 0xc197, 0x362d, 0x36cc, 0x4167, + 0x41f3, 0xc7be, 0x4832, 0x491f, 0xc92e, 0xc0f1, 0xcf39, 0xeede, + 0x1e3a, 0xc232, 0x4149, 0x632c, 0xe34a, 0xc1be, 0xc20d, 0x41d7, + 0x421b, 0xc224, 0xc0f4, 0xc16c, 0x9e4c, 0x407d, 0xc07e, 0xc1ed, + 0xc159, 0xc169, 0x413c, 0xc1d2, 0x41c1, 0xc217, 0xc1f4, 0xc1d9, + 0xc1fc, 0xc1b1, 0xc0af, 0xc0c3, 0xc1a2, 0x407b, 0xdd64, 0xe2b7, + 0x21de, 0x4155, 0x4188, 0xc199, 0xe2b2, 0x9e9f, 0x4130, 0xc1c4, + 0xc165, 0xc1dc, 0xc1fe, 0x41cc, 0xc1d3, 0xb5e0, 0xc133, 0xc162, + 0x4114, 0xc1c4, 0xc126, 0x40e7, 0xc1d2, 0xe35b, 0x40bc, 0x632c, + 0xe34a, 0xc16e, 0xc09c, 0x21de, 0x4108, 0x4188, 0xc199, 0xb696, + 0xb696, 0xc0df, 0x412d, 0xd315, 0xc115, 0x36cc, 0x40a4, 0x41f3, + 0xc7be, 0xc0e6, 0x4080, 0xc0ca, 0xc151, 0x417e, 0xc185, 0x4174, + 0xc185, 0x4174, 0xc17e, 0x21de, 0x4108, 0x4155, 0xc199, 0xc1fb, + 0xd367, 0x3eb6, 0xe394, 0xc09d, 0x21de, 0x4108, 0x4155, 0xc188, + 0xc0fd, 0xc0ed, 0xe88e, 0xbf2b, 0xc1ba, 0xc1b9, 0xc0bd, 0x40e8, + 0xc217, 0x4114, 0xc130, 0xc06f, 0x411a, 0xc1d3, 0xac1e, 0x48f7, + 0xcca6, 0x40e7, 0xc13c, 0x411a, 0xc1cc, 0xedf0, 0x40c2, 0x421b, + 0xc224, 0xc0eb, 0xc116, 0x25b6, 0xd425, 0xc07f, 0xbbc1, 0xc0db, + 0x36cc, 0x40a4, 0x4167, 0xc7be, 0xc0e9, 0xc18f, 0xc0ec, 0xc118, + 0xd000, 0xc0c1, 0xc089, 0x40e8, 0xc1c1, 0x40c2, 0x41d7, 0xc224, + 0x40c2, 0x41d7, 0xc21b, 0x9e89, 0xb11b, 0x1e3a, 0xc0ba, 0xb52b, + 0xc23a, 0xc237, 0x9fce, 0x2c12, 0x2c13, 0xac14, 0x9e2c, 0xae8a, + 0xb96a, 0xa889, 0xa899, 0xcb3a, 0xc258, 0x4255, 0x4a93, 0x4a97, + 0xcabb, 0xb99c, 0x424e, 0x4a93, 0x4a97, 0xcabb, 0xc24d, 0xc25c, + 0xc25b, 0xab83, 0x3c02, 0xc29b, 0x1f10, 0xa0a0, 0xb2b5, 0xc27d, + 0x42a0, 0xc2a7, 0xc275, 0xc282, 0xc281, 0xa954, 0xc2a2, 0xd366, + 0x3c02, 0xc266, 0x427a, 0xc2a7, 0xc28a, 0x427a, 0xc2a0, 0xc2ad, + 0xc2ac, 0xa3d0, 0xdc7a, 0x5c7b, 0xdc8b, 0xc2c0, 0xc377, 0xc341, + 0xc336, 0xc2b6, 0x2448, 0xb282, 0xc2fd, 0xdc7e, 0xc329, 0xc36e, + 0xc370, 0xdc89, 0xaf87, 0xc368, 0xc2f9, 0xc345, 0xc36a, 0xc319, + 0xc344, 0xc33b, 0x430d, 0xdc8d, 0xc2ed, 0xc2c8, 0xc318, 0xb08d, + 0xc36b, 0xd653, 0xdc8e, 0x42f8, 0xdc8d, 0x431f, 0xc375, 0xc37c, + 0xc2fe, 0xc2f0, 0x430e, 0xc375, 0xc380, 0xc33f, 0xc2cc, 0xdc6c, + 0xdc93, 0xd75f, 0xc37b, 0xdc92, 0xc366, 0xc371, 0xc2b9, 0xc2f2, + 0x4328, 0xd76f, 0xc2b8, 0xc2f1, 0xc2ee, 0xe3e1, 0x2956, 0x2968, + 0xa96c, 0xdc98, 0xee9e, 0xc359, 0xc358, 0x217d, 0xc378, 0xc332, + 0xc2ec, 0xc2ef, 0x4303, 0xc381, 0xc37a, 0xc2dd, 0xc2de, 0xc335, + 0xd3b7, 0x430e, 0xc31f, 0xc2b7, 0x217d, 0xc363, 0xc36d, 0xc32e, + 0xc315, 0xdc9b, 0xc321, 0xc36b, 0x583c, 0xdc9c, 0xa999, 0xa35b, + 0xc4a3, 0xc4b5, 0xc452, 0xc46a, 0x43cf, 0xc474, 0xcfeb, 0xc44b, + 0xc4b0, 0xc3fe, 0xc472, 0xc447, 0xc4bd, 0x4409, 0x4460, 0xc4a2, + 0xc3ce, 0xc3cd, 0x43a8, 0xc474, 0xc43a, 0xc4cf, 0x4434, 0xc439, + 0x2b9d, 0x2bda, 0x2bf3, 0xabf6, 0xa72d, 0xc4ab, 0x448e, 0xc4d4, + 0xc43f, 0xc894, 0xc3b0, 0xbbec, 0xc46f, 0x43cb, 0x4460, 0xc4a2, + 0x4483, 0xc4c8, 0xc4a1, 0xc489, 0x4411, 0xc463, 0x4410, 0xc463, + 0xe6d5, 0x43e1, 0xc439, 0x43e1, 0xc434, 0xc3d0, 0xc4ca, 0xc3f2, + 0xc3b3, 0xc3ae, 0xc39a, 0xc8af, 0x43cb, 0x4409, 0xc4a2, 0x4410, + 0xc411, 0xc476, 0xc4a1, 0xd3b9, 0xc39b, 0xc405, 0xc4cc, 0xc3b1, + 0x43a8, 0xc3cf, 0xc464, 0xc4a6, 0xc4b8, 0x440d, 0xc4c8, 0xc4bf, + 0xc40f, 0x43f1, 0xc4d4, 0x440e, 0xc468, 0x43cb, 0x4409, 0xc460, + 0xc391, 0xc477, 0xc3f0, 0xc3af, 0xc399, 0xc478, 0x28d0, 0xc3ba, + 0xc487, 0x440d, 0xc483, 0xc4da, 0xc43c, 0xc470, 0xc3d1, 0xc4da, + 0x43f1, 0xc48e, 0x44c9, 0xc4d2, 0xaf01, 0xcf38, 0xc515, 0xc50c, + 0x4501, 0xcf3e, 0xc506, 0x44f6, 0xcf3e, 0xc4f7, 0xc4ef, 0x287c, + 0x4816, 0xc8da, 0xc4ee, 0x4f42, 0xcf4c, 0x2617, 0x2690, 0xac1d, + 0xb674, 0x1ea7, 0xc523, 0x1ea7, 0xc522, 0x4a4c, 0x52cf, 0xd607, + 0x2b81, 0x2bcd, 0x2bd5, 0x2bd7, 0x2bdc, 0xabe7, 0xe6fb, 0x9fbd, + 0x2722, 0xc53c, 0x2212, 0x2283, 0x2290, 0x456b, 0xc575, 0x2722, + 0xc53a, 0xc54e, 0xc55d, 0x4559, 0xc571, 0xb6a2, 0x1ea9, 0x4552, + 0x455d, 0xc55e, 0xd015, 0x283a, 0xc54d, 0x283a, 0xc54c, 0xc53d, + 0xc560, 0x1ea9, 0x4546, 0x455d, 0xc55e, 0x4544, 0xc571, 0xa959, + 0x1ea9, 0x4542, 0x4546, 0x4552, 0xc55e, 0x1ea9, 0x4546, 0x4552, + 0xc55d, 0xc551, 0xa793, 0xbbd5, 0xc567, 0xc565, 0xc56a, 0xc568, + 0x453b, 0xc575, 0xaf02, 0x4544, 0xc559, 0x23e0, 0x4582, 0x4589, + 0xc58a, 0xc587, 0x453b, 0xc56b, 0xaf53, 0xc585, 0xa84d, 0x23e0, + 0x4573, 0x4589, 0xc58a, 0x457a, 0xc586, 0xc585, 0xc574, 0x23e0, + 0x4573, 0x4582, 0xc58a, 0x23e0, 0x4573, 0x4582, 0xc589, 0x458f, + 0xde08, 0x458e, 0xde08, 0xc664, 0xc642, 0xc627, 0xc658, 0xc60d, + 0xd0ac, 0xc667, 0xc632, 0xc621, 0xc60b, 0x46b0, 0xe764, 0xc5fe, + 0xc665, 0xc670, 0xc5d9, 0xc662, 0x24d1, 0x2516, 0x255e, 0xc602, + 0xc5c9, 0xc646, 0xc626, 0xc613, 0xc647, 0xd139, 0x45f3, 0xeebb, + 0x3dcb, 0x45f2, 0xeebb, 0xc661, 0xc5fa, 0xc5f9, 0xc5b4, 0x24d1, + 0x2516, 0x255e, 0xc5d6, 0xc649, 0xc62e, 0x3108, 0xc652, 0xc5af, + 0xc5a1, 0xc5ea, 0xa591, 0xc61e, 0xc63b, 0xc617, 0xc5ae, 0xc645, + 0xc5e9, 0xc59f, 0xc65f, 0xc671, 0xc606, 0xc5ad, 0xc63b, 0x4618, + 0xc63a, 0xc66e, 0xc66d, 0xc597, 0x2af6, 0xb194, 0xc624, 0xc5e8, + 0xc5eb, 0xc605, 0x3108, 0xc609, 0x4670, 0xd1c3, 0xc5a0, 0xc669, + 0xc62a, 0xc5f4, 0xc5d2, 0xc66c, 0xc596, 0xc5c7, 0xc5ac, 0xc65e, + 0xc672, 0xc663, 0xc63f, 0xc63e, 0xd1de, 0x45c8, 0x4655, 0xd1c3, + 0xc62b, 0xc66b, 0xc675, 0xc674, 0x23d1, 0x32e8, 0x34a5, 0x3cfc, + 0x3e8c, 0x3f51, 0x467c, 0x6166, 0x6197, 0xe1b1, 0xa0dc, 0x23d1, + 0xc67a, 0x388d, 0xc682, 0x388d, 0xc681, 0xdc8c, 0x2e30, 0x2f52, + 0xbb78, 0xc690, 0x2373, 0xa37d, 0xdccb, 0xc68b, 0xc69a, 0x21d2, + 0xc691, 0xc6a1, 0xc69e, 0x36a4, 0xb6ad, 0xb61f, 0x45b1, 0xe764, + 0xc6ba, 0x46b8, 0xc6b9, 0xef13, 0x46b2, 0xc6b9, 0x46b2, 0xc6b8, + 0xc6b1, 0xef13, 0xc6c8, 0x376f, 0xb86e, 0xc6cd, 0xc6c1, 0x4f3d, + 0x6262, 0xe4b5, 0xc897, 0xc6c7, 0xc6de, 0x2869, 0xee7d, 0x46e3, + 0xdb7c, 0x5462, 0xd4cb, 0xc6dc, 0xc6e4, 0xcc20, 0xc6d7, 0xc6cf, + 0xac3d, 0x46d1, 0xdb7c, 0xc6d8, 0xa362, 0x5361, 0xd62f, 0x1eff, + 0xa023, 0xc742, 0x23bf, 0xce23, 0xc798, 0x5996, 0xd9c6, 0xb14e, + 0xc71f, 0xc71e, 0xc726, 0xc725, 0xc72f, 0xc7d3, 0x472b, 0xc787, + 0xc760, 0x1e51, 0x1f17, 0xd846, 0xd457, 0xc75c, 0xc709, 0xa6f0, + 0xc75e, 0xc7bc, 0xc741, 0xc750, 0xc737, 0xc765, 0xc764, 0xd9a9, + 0x23e1, 0xa8e1, 0xc7c1, 0xc7b6, 0xc72f, 0xc79e, 0xcff3, 0xc70d, + 0xc792, 0xc7aa, 0xc7d2, 0xc7da, 0xc7a0, 0x1e86, 0xb6b8, 0xc7d9, + 0xc786, 0xc751, 0x36cc, 0x40a4, 0x4167, 0xc1f3, 0xc785, 0xd499, + 0xc7a2, 0xc72c, 0xc7b0, 0xc7a9, 0xcb36, 0x47e7, 0xda20, 0x9faf, + 0x47e4, 0xda20, 0xc7ef, 0xc7eb, 0x3917, 0x4887, 0xc8f8, 0xc8ef, + 0xc92c, 0x483f, 0x4926, 0x6271, 0x62db, 0xe45b, 0xc8ad, 0xc8bc, + 0xc8c7, 0xc88e, 0x287c, 0x450e, 0xc8da, 0xc868, 0xc86f, 0xc8b8, + 0xa38e, 0xc8aa, 0xc8d6, 0x40ae, 0x491f, 0xc92e, 0xc92a, 0xc931, + 0xc92b, 0x47ff, 0x4926, 0x6271, 0x62db, 0xe45b, 0xc90e, 0xc85c, + 0xb731, 0xc8a9, 0xc864, 0xc8fd, 0xc8d1, 0xc904, 0xc841, 0xc856, + 0xc817, 0xc912, 0x27c6, 0x48ba, 0xc8bb, 0xc81a, 0xc8e0, 0x6e78, + 0x6e7b, 0xee7c, 0x38ca, 0x38cb, 0x3ab1, 0xbac0, 0x3917, 0xc7f4, + 0xc919, 0xc815, 0xc3f7, 0x27fc, 0x2d0e, 0xad5c, 0x27e6, 0x3900, + 0xc6cc, 0xc8e7, 0xc8e3, 0x2ca9, 0x2d52, 0xad53, 0xe7a8, 0xc855, + 0xc827, 0xc800, 0xc459, 0x33bd, 0xde2b, 0x6e78, 0xee7c, 0xc81c, + 0x486e, 0xc8bb, 0x486e, 0xc8ba, 0xc801, 0xc920, 0xc812, 0xc859, + 0xe695, 0xa387, 0xc82c, 0x287c, 0x450e, 0xc816, 0xc875, 0xc89c, + 0xc89b, 0xc7f6, 0xc1d0, 0xc7f4, 0xeec4, 0xc857, 0xbda7, 0xc85a, + 0x6669, 0x667a, 0xe6aa, 0x2760, 0xa89c, 0xc840, 0xc86a, 0xc88d, + 0x40ae, 0x4832, 0xc92e, 0xc8c1, 0x47ff, 0x483f, 0x6271, 0x62db, + 0xe45b, 0xc83a, 0xc83e, 0xc7fe, 0x40ae, 0x4832, 0xc91f, 0xc83b, + 0xc93b, 0xc93a, 0xc9ae, 0xc9b4, 0xc9a9, 0xc9a1, 0xa996, 0xc995, + 0xc9d8, 0xc9b0, 0xc98e, 0xb346, 0xc9b1, 0xc98d, 0xc984, 0xca1f, + 0xc97f, 0xc9aa, 0xc978, 0xc96f, 0xc94e, 0xc943, 0xafa1, 0xc940, + 0xc985, 0xc93c, 0xc962, 0xc977, 0xc93f, 0xe6e2, 0xc9c3, 0xa3b6, + 0xc9bf, 0xca08, 0x527a, 0x52b8, 0x541f, 0x54fa, 0xd5dd, 0xcc7c, + 0xae74, 0x49cc, 0x4a50, 0x67a6, 0x67a7, 0xef9d, 0x49cb, 0x4a50, + 0xef9d, 0xca2e, 0xd018, 0x4a09, 0xccb3, 0xcc83, 0xa3ea, 0xe8eb, + 0xc955, 0xca4d, 0x4a31, 0xca6a, 0xca2d, 0xca62, 0xca60, 0x4a3e, + 0x4a3f, 0x55c1, 0xd5f3, 0xca0e, 0x4a5e, 0xca6d, 0xc9c6, 0x49d4, + 0xccb3, 0xca05, 0x4cba, 0xd5ad, 0x4a3a, 0xca49, 0xb8f1, 0xc980, + 0xca4c, 0xc9f8, 0xc9cd, 0x49f0, 0xca6a, 0xca3b, 0x4a4f, 0xca69, + 0x4a1a, 0xca49, 0xca32, 0x4a01, 0x4a3f, 0x55c1, 0xd5f3, 0x4a01, + 0x4a3e, 0x55c1, 0xd5f3, 0x4cd3, 0xdc37, 0xca57, 0x4c87, 0xcce0, + 0x4a1a, 0xca3a, 0x4526, 0x4a23, 0x52cf, 0xd607, 0xc9ef, 0x6834, + 0xe896, 0x4a33, 0xca69, 0x49cb, 0x49cc, 0xef9d, 0xca61, 0xca42, + 0x4a06, 0xca6d, 0xc9fe, 0xca51, 0xc9fd, 0xca70, 0x6839, 0x683a, + 0x683d, 0xe893, 0x4a33, 0xca4f, 0x49f0, 0xca31, 0xd3b7, 0x4a06, + 0xca5e, 0xca63, 0x4aae, 0xcac6, 0xab86, 0xe631, 0xab8a, 0xcaca, + 0xcab3, 0xcac5, 0xcab5, 0x4aaf, 0xcab0, 0x424e, 0x4255, 0x4a97, + 0xcabb, 0x424e, 0x4255, 0x4a93, 0xcabb, 0xcac4, 0xcaa9, 0xcaba, + 0xcac7, 0xca9d, 0xbd3c, 0xde30, 0x2be0, 0xcab6, 0x4a77, 0xcac6, + 0x4a91, 0xcab0, 0x4a91, 0xcaaf, 0xca8a, 0xca8e, 0x2be0, 0xcaad, + 0xcaa5, 0x424e, 0x4255, 0x4a93, 0xca97, 0x4076, 0xcac8, 0xca9c, + 0xca8d, 0x4a77, 0xcaae, 0xcaa6, 0x4076, 0xcac3, 0xca83, 0xa947, + 0x4aea, 0xdc4e, 0x9f2b, 0x6f8d, 0xef92, 0x1e26, 0x20a1, 0xae76, + 0x4af6, 0xcaf8, 0x9fdf, 0x5abc, 0xdc0a, 0x4ad6, 0xdc4e, 0x4ade, + 0xcaf8, 0x4ade, 0xcaf6, 0xcbea, 0xcbe4, 0x4b4d, 0xcbb0, 0x2173, + 0xa4b2, 0xcb46, 0xcb67, 0xcb8d, 0x218a, 0x218c, 0x3547, 0x4b56, + 0x4b5e, 0xcba3, 0x9f53, 0x4bc4, 0xd303, 0xc7e2, 0x424b, 0xcb8b, + 0x4bed, 0xcc60, 0xcc69, 0xcbb2, 0xcb14, 0xd9d4, 0x4b0b, 0xcbb0, + 0x3830, 0xba43, 0xcb7a, 0xcbc9, 0x3547, 0x4b27, 0x4b5e, 0xcba3, + 0xcc06, 0xcb82, 0xcbf3, 0xcbe9, 0xcc39, 0xcb8f, 0x3547, 0x4b27, + 0x4b56, 0xcba3, 0xcb15, 0xcbe0, 0xcc4c, 0xcb50, 0xcbd4, 0x4c3d, + 0x4c56, 0xcc64, 0xcbe0, 0xcc21, 0xcb59, 0xcbe6, 0x00f6, 0x1e2a, + 0xa00b, 0xcb3a, 0xcb1f, 0xcb5d, 0xae1a, 0xcc59, 0xa284, 0x3547, + 0x4b27, 0x4b56, 0xcb5e, 0x4c00, 0xd536, 0xcbcb, 0xcc5c, 0xcc6e, + 0xcc1e, 0xcc2b, 0xcbdb, 0x4b0b, 0xcb4d, 0xcb45, 0xd282, 0x4b35, + 0xd303, 0xd483, 0xcb51, 0x2327, 0xcba7, 0xad4c, 0xcc23, 0xcc0d, + 0xcb7c, 0xcc46, 0xcbac, 0x4b71, 0xcb7f, 0xcc12, 0xcb03, 0xcb86, + 0x4b5b, 0x4c01, 0xcc6d, 0xcafe, 0x4b3c, 0xcc60, 0xcc43, 0xcc5b, + 0xcc6c, 0xaf57, 0xcb5a, 0x4ba6, 0xd536, 0x4be9, 0xcc6d, 0x3caa, + 0xbeec, 0xcb58, 0xcbd3, 0x4c14, 0xd4d1, 0xcbe1, 0x4c11, 0xd4d1, + 0xcc6a, 0x3881, 0xba11, 0xcc2b, 0xcbaa, 0xc6d9, 0xcb80, 0xcbd1, + 0xa142, 0x4bab, 0xcc18, 0x35d7, 0xcc4f, 0xba90, 0xcb5c, 0xcb7e, + 0xae18, 0x4c52, 0xcc55, 0xcc5f, 0xcbee, 0xcbd7, 0xcb79, 0x35d7, + 0xcc31, 0xcc58, 0xcc40, 0x55ae, 0xd5ea, 0xcc40, 0x4b7e, 0xcc64, + 0x4c50, 0xd5e4, 0xcb93, 0xcbef, 0xcba8, 0xcc41, 0x4b3c, 0xcbed, + 0x4b7e, 0xcc56, 0xcb3e, 0xcc16, 0xcbf1, 0x4be9, 0xcc01, 0xcba9, + 0x2401, 0xefa5, 0xccf4, 0xe85e, 0xc9c8, 0xc9d5, 0x4a45, 0xcce0, + 0xccb9, 0xeea4, 0xeecf, 0x5083, 0xd085, 0xccf6, 0xccf2, 0xccb5, + 0x1ffc, 0xeb3b, 0xc1d0, 0x2986, 0x299d, 0x2a24, 0xccda, 0xccde, + 0x36f2, 0x6eaf, 0x6eb4, 0xeeb9, 0xcce7, 0x49d4, 0xca09, 0xcca4, + 0xcc8b, 0xca17, 0xccc9, 0xccdd, 0x6762, 0x6eaa, 0x6eab, 0x6eb5, + 0xeeba, 0xe931, 0xccbd, 0xe92c, 0x4a40, 0xdc37, 0xe93b, 0x2986, + 0x299d, 0x2a24, 0xcca7, 0xccc1, 0xccaa, 0x4a45, 0xcc87, 0xe94e, + 0xccae, 0x26e2, 0xa6e3, 0xcc9d, 0xcc74, 0xcc9c, 0x1e1d, 0x4cf9, + 0x4d72, 0xce9f, 0x4cf8, 0xce9f, 0xccfe, 0x1fc2, 0x4e18, 0x4e4b, + 0xce6b, 0x229f, 0xccff, 0x4cfa, 0xcea0, 0x229f, 0xccfc, 0xceaa, + 0xcea3, 0xcea6, 0xcea2, 0xcea1, 0xcea5, 0xcea8, 0xceab, 0xceb9, + 0xceb3, 0xcebd, 0xcebe, 0xceaf, 0xceb0, 0xcebc, 0xceb1, 0x4d8b, + 0xceae, 0x2e0b, 0xceb8, 0xcea7, 0xceb7, 0xcead, 0x4d4d, 0xceb4, + 0xceba, 0xcdb7, 0xcd2e, 0xcdca, 0x4da2, 0xcef8, 0x324e, 0xcd25, + 0x4e32, 0x4e8d, 0x4e9d, 0xcf27, 0xcec6, 0xcec2, 0xcec1, 0xcec5, + 0xcebb, 0xcecd, 0xcec0, 0xcecb, 0xced0, 0xcecc, 0xcec8, 0xaf26, + 0xcec4, 0xcd97, 0x4eca, 0xe77d, 0xae15, 0xcea9, 0x4d93, 0xcecf, + 0xcd1d, 0xced7, 0xcec1, 0xced3, 0x34a7, 0x4d76, 0xcedd, 0xce8a, + 0xcdea, 0x4e27, 0xcee6, 0x4ed4, 0xd8b4, 0xcede, 0xcedc, 0xceda, + 0x4dab, 0x4dda, 0x4ebf, 0xcf10, 0xd32f, 0xced9, 0xced2, 0xced6, + 0x4d82, 0xcedf, 0x1e1d, 0xccf8, 0xcedb, 0x4e6a, 0xced8, 0x34a7, + 0x4d55, 0xcedd, 0xce36, 0x4e6d, 0xd812, 0xcee2, 0xced1, 0x4d71, + 0xcedf, 0xcee1, 0xcee0, 0xcee8, 0xcee3, 0xcd18, 0xcee4, 0xcee5, + 0x3346, 0xb8b1, 0x4d4c, 0xcecf, 0xcd45, 0x4e7c, 0xcee7, 0x4e8c, + 0x4eed, 0xdce1, 0xcefc, 0xcf0d, 0x4dd1, 0xceff, 0x4d2c, 0xcef8, + 0xcefb, 0x4d64, 0x4dda, 0x4ebf, 0xcf10, 0xcef6, 0xcef4, 0xcef9, + 0xcefe, 0xceb2, 0xcf51, 0x4e43, 0xcef7, 0x23d5, 0xcf00, 0xaf69, + 0xcd23, 0xceb6, 0xcefa, 0xceee, 0xcefd, 0x4e5b, 0xcef0, 0xceeb, + 0xcef5, 0xcef2, 0xcf01, 0xcd27, 0xceef, 0xcde1, 0x303b, 0x3460, + 0x4deb, 0xce3d, 0xce41, 0x4da0, 0xceff, 0x4dd6, 0xceea, 0xcef1, + 0xce83, 0x4dd2, 0xceea, 0xcf03, 0xcf04, 0xcf02, 0x4d64, 0x4dab, + 0x4ebf, 0xcf10, 0xcef5, 0xcf09, 0xcf0e, 0xcf14, 0x4dcd, 0xcf17, + 0x4e01, 0xcf18, 0xd913, 0xcf0c, 0xcf16, 0xcf13, 0xcd5a, 0x303b, + 0x3460, 0x4dcf, 0xce3d, 0xcf05, 0xceac, 0xcf11, 0xcf08, 0xcec3, + 0xcf0f, 0xcf07, 0xd1f4, 0x4e15, 0xcf0a, 0x4de3, 0xcf18, 0x4e69, + 0xcef3, 0xd426, 0xcf19, 0xcf22, 0xcf12, 0xcec9, 0xcf23, 0x4dfc, + 0xcf0a, 0xcf1e, 0x4cfb, 0x4e4b, 0xce6b, 0xcf1a, 0xcf1c, 0xcf1f, + 0xcf1b, 0x23bf, 0xc70c, 0x4e31, 0xceb5, 0x4d5b, 0xcee6, 0xae4c, + 0xcf1d, 0xcf21, 0xcf29, 0x4e26, 0xceb5, 0x4d2f, 0x4e9d, 0xcf27, + 0xcea4, 0xcf26, 0x4d77, 0xe9bd, 0xcf15, 0xcf25, 0x303b, 0x3403, + 0x3460, 0x4dcf, 0xcdeb, 0xcee9, 0xcdd0, 0x4db3, 0xcef7, 0x4e70, + 0xcf2b, 0xcf2a, 0xce66, 0x4e8e, 0x4e96, 0xcea4, 0x4cfb, 0x4e18, + 0xce6b, 0x4e61, 0xcee3, 0xcf2f, 0xcec7, 0xcf2e, 0x1f1e, 0xa098, + 0xcffb, 0xcf2d, 0xcdbd, 0xced5, 0x4e4d, 0xcee3, 0xcf0b, 0xce82, + 0xce48, 0x4e04, 0xcef3, 0x4d75, 0xced8, 0x4cfb, 0x4e18, 0xce4b, + 0x4d78, 0x5327, 0xd812, 0x4f30, 0xe7c1, 0xcf33, 0x4e45, 0x4f2b, + 0xcf32, 0xcf34, 0xcece, 0x4d99, 0xcee7, 0xcf24, 0xcf31, 0xb9db, + 0xce64, 0xcdd5, 0xe8a3, 0xcf2c, 0x4e98, 0xcf35, 0x4d56, 0xcea9, + 0x4d9a, 0x4eed, 0xdce1, 0xcd2f, 0x4e4a, 0x4e96, 0xcea4, 0x4e92, + 0xcf20, 0x4e8f, 0xcf20, 0xcf28, 0xb24d, 0x4e4a, 0x4e8e, 0xcea4, + 0x4e89, 0xcf35, 0xcf06, 0x4d2f, 0x4e32, 0xcf27, 0x4cf8, 0xccf9, + 0xccfe, 0xcd06, 0xcd05, 0xcd02, 0x4e34, 0x4e4a, 0x4e8e, 0xce96, + 0xcd07, 0xcd04, 0xcd1a, 0xcd08, 0x4d4b, 0xce8a, 0xcd00, 0xcd09, + 0xcdef, 0xcd1c, 0xcd18, 0xcd14, 0xcd15, 0xcd17, 0xcdb1, 0xcd0d, + 0xcd1d, 0x4e26, 0xce31, 0xcdb8, 0xcd1b, 0xcd19, 0xcd0b, 0xcd21, + 0xcd35, 0xcd16, 0xcd10, 0xcd13, 0x4d64, 0x4dab, 0x4dda, 0xcf10, + 0xcd3a, 0x4d32, 0xcd4f, 0xcd31, 0xcdf4, 0xcd44, 0xcd33, 0xcd30, + 0xce54, 0xcd42, 0xce10, 0xcd46, 0xcd3c, 0xcd40, 0xcd39, 0xce79, + 0x4d4c, 0xcd93, 0xcd3f, 0xcd81, 0xcd68, 0xcd50, 0xcd5d, 0x4e5e, + 0xe076, 0xcd70, 0xcd4e, 0x4d75, 0xce6a, 0xcd66, 0xcd62, 0xcd73, + 0xcd61, 0x34a7, 0x4d55, 0xcd76, 0xcd5e, 0x4d71, 0xcd82, 0xcd86, + 0xcd83, 0xcd79, 0x4d89, 0x4e4d, 0xce61, 0xcd8c, 0xcd8f, 0x4d5b, + 0xce27, 0x4d99, 0xce7c, 0xcd88, 0xce3e, 0x4dd2, 0xcdd6, 0xcdbe, + 0x4d9a, 0xce8c, 0xcdba, 0xcdcb, 0xcdbd, 0xcdd4, 0xcdc4, 0x4e04, + 0xce69, 0xcdad, 0x4dbf, 0xcddc, 0xcdac, 0x4db3, 0xce43, 0x4d2c, + 0xcda2, 0xcdaf, 0xcdb9, 0xcda3, 0xcd9c, 0xcdbb, 0xcdb0, 0x4da0, + 0xcdd1, 0xcdb4, 0xcdc7, 0xcdd9, 0xcdd7, 0xcdd8, 0xcdec, 0xce9c, + 0xcdf9, 0xcdf2, 0xcddd, 0x4dfc, 0xce15, 0xce62, 0xcde6, 0xcd9e, + 0xcdde, 0xcdf6, 0x4d64, 0x4dab, 0x4dda, 0xcebf, 0xcdf1, 0xce0b, + 0xcde9, 0xcde0, 0xce37, 0xcde8, 0xcde1, 0x4de3, 0xce01, 0xce09, + 0xce1b, 0xce1f, 0xce1d, 0xce2b, 0xce17, 0xce1e, 0x4e8f, 0xce92, + 0xce2d, 0xce0a, 0xce11, 0xce7d, 0xce39, 0xce35, 0x4d2f, 0x4e32, + 0xce9d, 0xce93, 0xce2e, 0xce46, 0x4e45, 0xce70, 0xce88, 0xce5a, + 0xce55, 0xce52, 0x4e6e, 0xe7c1, 0xce7e, 0xce70, 0xce6f, 0xce73, + 0x4e89, 0xce98, 0x4f3b, 0x4f50, 0xe475, 0xa378, 0xc4e8, 0xc0b0, + 0x3b20, 0xcf3c, 0xcf36, 0x3b20, 0xcf3a, 0x46cb, 0x6262, 0xe4b5, + 0x44f6, 0xc501, 0x4516, 0xcf4c, 0xba3d, 0x275b, 0x28b0, 0x28b5, + 0x28dc, 0xcf4e, 0x4516, 0xcf42, 0x275b, 0x28b0, 0x28b5, 0x28dc, + 0xcf48, 0x4f36, 0xe475, 0x4db2, 0x4f52, 0xcf53, 0x4f51, 0xcf53, + 0x4f51, 0xcf52, 0x2570, 0x26c9, 0xcf85, 0x4f70, 0xcf78, 0xcf77, + 0x3683, 0xdfa0, 0x4f5a, 0xcf78, 0xcf86, 0x208c, 0x69e1, 0xea82, + 0xcf80, 0xcf62, 0x4f5a, 0xcf70, 0xcf76, 0x4f88, 0xd98a, 0x21aa, + 0xae42, 0xcf57, 0xcf74, 0x4f88, 0x5989, 0xd98a, 0x4f81, 0x4f87, + 0x5989, 0xd98a, 0xd288, 0xd288, 0xcf97, 0xcf91, 0xcf90, 0xcf8c, + 0xcfa5, 0xcfa8, 0xcfa4, 0xcfa3, 0xcf9f, 0xcfa1, 0x9e49, 0x217b, + 0xe90a, 0xcfb9, 0x4fb6, 0xd1bb, 0x4fb4, 0xd1bb, 0xcfae, 0x4fc5, + 0xcfe4, 0x4fc4, 0xcfe4, 0xcfe0, 0x9e60, 0xcff9, 0xcffd, 0xcfec, + 0xcfc6, 0x4fc4, 0xcfc5, 0xc3a9, 0xcfda, 0xcffa, 0xc796, 0xcfd8, + 0xcff1, 0x4e59, 0xe8dc, 0xcfd9, 0xc1ff, 0xb537, 0xd008, 0xd007, + 0xd00b, 0xd00a, 0xc54a, 0xc9d0, 0xb7b1, 0xe504, 0xd02e, 0xd5c9, + 0xd02c, 0x39c8, 0xe392, 0xd027, 0xd022, 0xbacc, 0xd073, 0xb065, + 0xd043, 0xdead, 0x504c, 0x5077, 0xdec4, 0xd076, 0xd03c, 0xd07e, + 0x5040, 0x5077, 0xdec4, 0xd079, 0x5068, 0xd06f, 0x2723, 0xa7a9, + 0xe5fb, 0x28fb, 0xaa7f, 0x5066, 0x506a, 0xd070, 0x5061, 0x506a, + 0xd070, 0x5054, 0xd06f, 0xd075, 0x5061, 0x5066, 0xd070, 0xd06f, + 0x2abf, 0xb127, 0xd06f, 0x5054, 0x5068, 0x506b, 0xd06e, 0x5061, + 0x5066, 0xd06a, 0xa8f0, 0xd038, 0x242c, 0xd07d, 0xd069, 0xd042, + 0x5040, 0x504c, 0xdec4, 0xd04d, 0x242c, 0xd074, 0xd04b, 0x4c9b, + 0xd085, 0x4c9b, 0xd083, 0xd088, 0xd087, 0xab8d, 0xd0af, 0x5178, + 0xd193, 0xd135, 0xd19a, 0xd0da, 0xc5a3, 0xeaaf, 0x508e, 0xd0bb, + 0xa3b7, 0x3bd3, 0xd8ac, 0xe91a, 0xd0af, 0xd14e, 0xd16b, 0xd139, + 0x5105, 0x5107, 0xd10b, 0x1f37, 0xa191, 0x51bb, 0xd1bd, 0xb3f9, + 0xd0a7, 0xa2dd, 0x585a, 0xeb0d, 0xb727, 0xd156, 0xd1da, 0x511b, + 0xde01, 0xd1d9, 0xd1a0, 0x5106, 0xd13a, 0x50c1, 0xd10b, 0x5103, + 0xd13a, 0xd0c1, 0xd109, 0xd108, 0x50c1, 0xd105, 0xd1be, 0x51d3, + 0x51df, 0xead2, 0xd1cd, 0x5133, 0xd166, 0xd1bf, 0xd1e0, 0xa43b, + 0x5173, 0xde0b, 0x50eb, 0xde01, 0xa507, 0x9fee, 0xd131, 0xd12b, + 0x2318, 0x5111, 0xd166, 0xd0a1, 0xd161, 0xd1c9, 0x45ee, 0xd0c0, + 0x5103, 0xd106, 0xd157, 0xa00e, 0x51c8, 0xd1d8, 0xe183, 0xd0be, + 0xd0e8, 0xd13e, 0xd195, 0xd1a3, 0xd136, 0x2318, 0x5111, 0xd133, + 0xd0bf, 0xef76, 0xe84b, 0x511a, 0xde0b, 0x50a0, 0xd193, 0xd1a9, + 0xd183, 0xea30, 0xeac8, 0xd190, 0xd17d, 0xd182, 0xd1cf, 0x50a0, + 0xd178, 0xd158, 0xd0a4, 0xd0f6, 0xd15f, 0xecd5, 0xd17b, 0xe94d, + 0x6ac4, 0xead3, 0x4fb4, 0x4fb6, 0x50c6, 0xd1bd, 0x50c6, 0xd1bb, + 0xd10d, 0xd113, 0xd1cb, 0x4655, 0xc670, 0x514a, 0xd1d8, 0xd138, + 0xd1c0, 0xd110, 0x5191, 0xead5, 0x510f, 0xd1df, 0x514a, 0xd1c8, + 0xd0ed, 0xd0ea, 0xd1e2, 0xc66f, 0x510f, 0xd1d3, 0xd114, 0xd1dc, + 0xa367, 0x9e34, 0xd1f0, 0xd1ed, 0xcdfb, 0x23f0, 0xa76e, 0xdf3f, + 0x9e0e, 0xa174, 0x1e3e, 0x3319, 0xb4e7, 0xb5e7, 0x3368, 0xd20e, + 0xd20d, 0xd213, 0xd210, 0x5217, 0x62ea, 0xe4fa, 0x5216, 0x62ea, + 0xe4fa, 0xe928, 0xd264, 0xd239, 0x523b, 0xd26b, 0xd266, 0xd259, + 0xb7c1, 0xd24a, 0xd229, 0x522e, 0xd26b, 0xd236, 0xd231, 0xba2f, + 0x3a79, 0xd26a, 0xd223, 0xd230, 0x3a79, 0xd263, 0x522e, 0xd23b, + 0xd271, 0x26cf, 0xd270, 0x5276, 0x5277, 0x5c53, 0xdc54, 0x5273, + 0x5277, 0x5c53, 0xdc54, 0x5273, 0x5276, 0x5c53, 0xdc54, 0xd279, + 0xd278, 0x49c7, 0x52b8, 0x541f, 0x54fa, 0xd5dd, 0xcbc0, 0x4f8a, + 0xcf8b, 0xd28c, 0xd28b, 0xa349, 0xd58c, 0xd56a, 0xd606, 0xd2b2, + 0xd2b1, 0x49c7, 0x527a, 0x541f, 0x54b7, 0x54fa, 0x5553, 0xd5dd, + 0xa20d, 0xd4ef, 0x1e42, 0xa208, 0xd466, 0xd5f6, 0xd3a7, 0xd407, + 0xd4bc, 0xd2e7, 0x26cc, 0x4526, 0x4a4c, 0x5607, 0xd613, 0xd351, + 0xd2e2, 0xd2e1, 0xd2ce, 0xa040, 0x55b2, 0xd60b, 0xd393, 0xd3f0, + 0x4b35, 0xcbc4, 0x2179, 0xd332, 0xd396, 0xd622, 0xd526, 0xa84b, + 0xc162, 0xd354, 0x4e6d, 0xd812, 0xcd65, 0xd438, 0x2179, 0xd30a, + 0xd34a, 0xd395, 0xd346, 0x1f9f, 0xd5a6, 0xd2d0, 0xd318, 0x2e84, + 0xd38a, 0xd598, 0xd3a2, 0xd558, 0xd4fd, 0xd434, 0xd54e, 0xd588, + 0x5415, 0xd5ba, 0x46ea, 0x5569, 0xd62f, 0x3804, 0xb9ae, 0xd477, + 0xbece, 0xc296, 0xc192, 0xd541, 0xd5ce, 0xd4c0, 0xd52d, 0xd552, + 0xd452, 0xd464, 0x546f, 0x55ac, 0xd5e5, 0xdc46, 0xb357, 0xd510, + 0x3d96, 0xd49e, 0x2e84, 0xd358, 0xd2fa, 0xd347, 0xd30e, 0xa50d, + 0xd35a, 0xd2cb, 0xd40a, 0xd4ee, 0xd494, 0xd435, 0xd3df, 0xd59f, + 0x4372, 0xca6b, 0xd555, 0xc469, 0x6d2c, 0x6daf, 0xee0e, 0x5493, + 0xd4f4, 0xd3be, 0xd3bd, 0xd458, 0xb79c, 0x235c, 0xd514, 0xd3b5, + 0xa807, 0x234e, 0x2d0b, 0xd550, 0xd2fd, 0xd506, 0x2eb5, 0x544a, + 0xd4ed, 0xd445, 0xd2cc, 0xd3b1, 0xd420, 0xd4f1, 0x5360, 0xd5ba, + 0xd600, 0xd63f, 0x49c7, 0x527a, 0x52b8, 0x54fa, 0xd5dd, 0xd40c, + 0x56cd, 0xd7a2, 0x25b6, 0xc1df, 0xce08, 0xd56d, 0xd5a9, 0x9e07, + 0x557f, 0x55fc, 0xd610, 0xd35d, 0xd3b4, 0xd330, 0xd55a, 0xd3f9, + 0xa3f6, 0x2eb5, 0x53f4, 0xd4ed, 0xd36d, 0xc740, 0xd3d1, 0xb939, + 0xd593, 0x46d6, 0xd4cb, 0xd36e, 0xd2c7, 0xd58a, 0xa85f, 0xb934, + 0xd36f, 0xd525, 0xd364, 0xd515, 0xcbc6, 0xd546, 0xd562, 0xd523, + 0xd51e, 0xb41c, 0x53bc, 0xd4f4, 0xd3b3, 0x31de, 0x3e95, 0x3fdb, + 0xc7c7, 0x3d96, 0xd385, 0xaf60, 0xd533, 0xd2b8, 0xd2cd, 0xd36a, + 0xae2d, 0x46d6, 0xd462, 0x4c11, 0xcc14, 0xd5cd, 0xd58a, 0xd63a, + 0xd577, 0xe3a3, 0xea40, 0x2eb5, 0x53f4, 0xd44a, 0xd3b2, 0xd2c1, + 0xd40d, 0x53bc, 0xd493, 0x49c7, 0x527a, 0x52b8, 0x541f, 0xd5dd, + 0xd35c, 0x298d, 0xa9f8, 0xd3f1, 0xd37b, 0xd84a, 0x235c, 0xd3d4, + 0xd482, 0xd48c, 0xd48b, 0xd471, 0xd311, 0xd36b, 0xd5bc, 0xd53b, + 0xd4a8, 0xeebb, 0x2328, 0xd5cf, 0x4ba6, 0xcc00, 0xd594, 0xd61e, + 0xd5fa, 0xd532, 0x55f9, 0xdb6a, 0xd368, 0xd487, 0x554b, 0xd602, + 0x554a, 0xd602, 0xd35e, 0x234e, 0xd3ef, 0xd36c, 0xd2b8, 0xd3b8, + 0xd35b, 0xd43c, 0xd489, 0xd361, 0xd29c, 0xd427, 0xd580, 0xd604, + 0x55f4, 0xd60a, 0xd4e3, 0x5431, 0x55fc, 0xd610, 0xd570, 0xd35f, + 0x546a, 0xd4df, 0xd297, 0xa9dc, 0xd460, 0xd537, 0x26ed, 0xa712, + 0xd359, 0xd3b6, 0x1f9f, 0xd350, 0xd428, 0x55b0, 0xd60d, 0x536f, + 0xd5e5, 0xca17, 0x4c54, 0xd5ea, 0xd5f7, 0x55ab, 0xd60d, 0x52f9, + 0xd60b, 0x5360, 0xd415, 0xd52f, 0x4a01, 0x4a3e, 0x4a3f, 0xd5f3, + 0x1e1b, 0x23e2, 0x3a37, 0xbb09, 0x201f, 0x2fa3, 0xd024, 0xd4dd, + 0xd369, 0x2328, 0xd535, 0xd61a, 0x49c7, 0x527a, 0x52b8, 0x541f, + 0xd4fa, 0x563d, 0xd646, 0xcc58, 0x536f, 0xd5ac, 0x4c54, 0xd5ae, + 0x4a01, 0x4a3e, 0x4a3f, 0xd5c1, 0x5574, 0xd60a, 0xd2c8, 0xd5af, + 0x553c, 0xdb6a, 0xd53a, 0x5431, 0x557f, 0xd610, 0xd41a, 0x554a, + 0xd54b, 0xd572, 0xd2a6, 0x4526, 0x4a4c, 0x52cf, 0xd613, 0x5574, + 0xd5f4, 0x52f9, 0xd5b2, 0x55ab, 0xd5b0, 0x6a65, 0xeaa5, 0x5431, + 0x557f, 0xd5fc, 0x52cf, 0xd607, 0xba97, 0xd5d3, 0xd539, 0xd30f, + 0xa170, 0x46ea, 0xd361, 0xd4e0, 0x55df, 0xd646, 0xd41d, 0xa914, + 0x55df, 0xd63d, 0x1e55, 0xd65d, 0xd65c, 0xb16e, 0xc307, 0x21e6, + 0xa904, 0xa47c, 0x565a, 0xd65b, 0x5657, 0xd65b, 0x5657, 0xd65a, + 0xd64f, 0x1e55, 0xd64e, 0xa3f7, 0xd666, 0xd665, 0x9e8f, 0x567a, + 0xd7f2, 0xd66f, 0xd7e3, 0xd66c, 0xd768, 0x2b83, 0xd6c7, 0xd66b, + 0xd771, 0xe6d6, 0xd766, 0xd806, 0xd755, 0xd7fb, 0xd79e, 0xd801, + 0x57a1, 0xd7c1, 0xd739, 0xd72f, 0x5745, 0x5836, 0xd83a, 0xd788, + 0xd6d4, 0xd814, 0xd6ba, 0xec8d, 0xd706, 0xd6d4, 0xd6a6, 0x2b83, + 0xd675, 0xd831, 0x5424, 0xd7a2, 0x5807, 0xd823, 0xd7f6, 0x5698, + 0x56b4, 0xd716, 0xef03, 0xd83b, 0xd7a7, 0xd7c4, 0xd6fa, 0xd7ef, + 0xd784, 0xd810, 0xd6f1, 0xd715, 0x5c9d, 0xdd1d, 0xd82d, 0xd6ac, + 0xd782, 0xd6fb, 0xd6d4, 0xd778, 0x574b, 0xd81f, 0xd68c, 0xd68b, + 0xeb4e, 0x5695, 0x5836, 0xd83a, 0x577f, 0xd805, 0xd7c8, 0xd7ec, + 0x5721, 0xd81f, 0xd80d, 0xd680, 0xc32c, 0xd815, 0xd67e, 0xd671, + 0xc33f, 0xd67b, 0xd717, 0xd7bb, 0xd811, 0x5747, 0xd805, 0xd7bf, + 0xd70b, 0xd6f3, 0xd696, 0xd78e, 0xd78d, 0xd7fb, 0x5827, 0xd839, + 0xd682, 0xd68a, 0x5424, 0xd6cd, 0x3594, 0xb59e, 0xd6ef, 0xd7ce, + 0xd77c, 0xd780, 0xd68a, 0xd6f0, 0xd7c7, 0xd7c6, 0xd748, 0xd7a8, + 0xd828, 0xd80e, 0xd66e, 0xd749, 0xd6f2, 0xd66b, 0xd6cf, 0xd821, + 0xd80f, 0x5681, 0xd798, 0xd683, 0x5747, 0xd77f, 0xd67f, 0x56ce, + 0xd823, 0xd74e, 0xd7d2, 0xd7f9, 0xd6f4, 0xd77e, 0x4d78, 0x4e6d, + 0xd327, 0xd69d, 0xd761, 0x5721, 0xd74b, 0xd7f8, 0xb0f7, 0x56ce, + 0xd807, 0x5799, 0xd839, 0xd7cf, 0xd702, 0xd6ca, 0x5695, 0x5745, + 0xd83a, 0x5799, 0xd827, 0x5695, 0x5745, 0xd836, 0xd6ee, 0x4383, + 0xdc9c, 0xd844, 0xd842, 0xe1c1, 0x1e51, 0x1f17, 0xc73e, 0x24af, + 0xa580, 0xd511, 0xb72f, 0x2563, 0x5858, 0xe29c, 0xa40c, 0xadf7, + 0x2563, 0x5854, 0xe29c, 0xd0e1, 0x236b, 0xd85e, 0x2675, 0x585f, + 0xe053, 0xa1b2, 0x236b, 0xd85b, 0x2675, 0x585c, 0xe053, 0xd864, + 0xd863, 0xd8dc, 0xe336, 0xd96f, 0xd89e, 0xa3ea, 0xd8b5, 0xd956, + 0x2acb, 0x2b1d, 0xd8ca, 0xd918, 0xae12, 0x596a, 0x67c8, 0xe7e4, + 0xd86e, 0x3bd3, 0xd0b2, 0xd972, 0xeef9, 0xd94f, 0x4d5d, 0xd8e4, + 0xd87d, 0xd8cc, 0xd8dd, 0xd960, 0xd90c, 0xd885, 0xd8b7, 0x58e1, + 0xe1cc, 0xd8e0, 0xd865, 0xd8c5, 0xd8d9, 0x58cf, 0xe1cc, 0xd933, + 0xd95d, 0x58b4, 0xd932, 0xd947, 0x5912, 0xd943, 0xb707, 0xd92b, + 0xd8f5, 0xd8f4, 0xa236, 0xa90d, 0xb0fc, 0xd8c8, 0xd90f, 0xd90e, + 0x58e6, 0xd943, 0xcde5, 0xd886, 0xd938, 0xd94c, 0xd8ed, 0xd8e4, + 0xd8e2, 0xd964, 0xd91b, 0x9eb5, 0x58e6, 0xd912, 0xd8e5, 0xd91d, + 0xb742, 0xd8af, 0xd974, 0xd884, 0xd8e3, 0xd8c6, 0xd934, 0xd89c, + 0xb446, 0xb4f7, 0xd86c, 0xd8ad, 0x5955, 0xd97d, 0xd974, 0x2364, + 0xa365, 0x290d, 0xafa9, 0xe738, 0xb838, 0x4f87, 0x4f88, 0xd98a, + 0x4f81, 0x4f87, 0x4f88, 0xd989, 0xd9c1, 0xaf01, 0xd9c3, 0xd9c4, + 0x599a, 0x59ba, 0xd9c9, 0x5994, 0xd9c5, 0x5993, 0xd9c5, 0x470e, + 0xd9c6, 0xd9c7, 0x5990, 0x59ba, 0xd9c9, 0xd9cb, 0xd9cd, 0xd9ce, + 0x59bd, 0xd9c8, 0xc779, 0x9eb2, 0xd9ca, 0xd9cf, 0xd9b7, 0xd9d0, + 0x59c0, 0xd9c2, 0xd9bc, 0x59b0, 0xd9d1, 0x358d, 0x5990, 0x599a, + 0xd9c9, 0xd9b6, 0x59a7, 0xd9c8, 0xd9cc, 0x59b3, 0xd9c2, 0xd98b, + 0x59b3, 0xd9c0, 0xd98e, 0xd98f, 0x5993, 0xd994, 0x470e, 0xd996, + 0xd998, 0x59a7, 0xd9bd, 0x5990, 0x599a, 0xd9ba, 0xd9ac, 0xd9a1, + 0xd9bf, 0xd9a5, 0xd9a6, 0xd9af, 0xd9b2, 0xd9b7, 0xcb4b, 0x59ef, + 0xd9f6, 0xb2b5, 0xd9f4, 0xd9e7, 0xd9f8, 0xd9e3, 0x59d7, 0xd9f6, + 0xd9de, 0x59d7, 0xd9ef, 0xd9e6, 0x59fd, 0xd9ff, 0x59f9, 0xd9ff, + 0x59f9, 0xd9fd, 0x5a01, 0xdba0, 0x5a00, 0xdba0, 0xdba2, 0xdba3, + 0xdba1, 0xdbaf, 0xdba7, 0xdba8, 0xdba6, 0xdbb1, 0xdbad, 0xdbaa, + 0xdbab, 0x3258, 0xdbac, 0xdbb0, 0xdabe, 0xdbb9, 0xdbb6, 0xdbbc, + 0x47e4, 0xc7e7, 0x241f, 0xa656, 0xbb23, 0xdbc0, 0xdbb7, 0xdbbb, + 0xdbbf, 0x9fe1, 0xdbbe, 0xdbb8, 0x5b6f, 0xdbd1, 0xdbc9, 0x24ec, + 0xdbc3, 0xdbca, 0xbce8, 0x5b49, 0xdbc1, 0xda6c, 0xdbc2, 0x2467, + 0xdbcb, 0x246a, 0xa492, 0xa46d, 0xdbb5, 0xdbc8, 0xdbd2, 0xdbcf, + 0xdbc4, 0xdbd0, 0xdbc7, 0xdbce, 0xdbc5, 0xdbcd, 0xdb8b, 0xa48f, + 0xdbe9, 0xdbe2, 0xdbe3, 0xdbd5, 0xabdf, 0xdbd7, 0xdbe7, 0x5a3d, + 0xdbdf, 0xdbe1, 0xdbe0, 0xdbd8, 0x5b6e, 0xdbdd, 0xdbe5, 0xdbe6, + 0xdbdc, 0xdbd9, 0xdbd6, 0xdbd4, 0xdbdb, 0xdbd3, 0xa938, 0xdb7d, + 0xdb04, 0xafd7, 0xdba4, 0xdbf3, 0xdbf6, 0xdbde, 0x3096, 0xb102, + 0x2500, 0xdbf1, 0xdbee, 0xdbed, 0xdbda, 0xdbeb, 0xdbec, 0xdbef, + 0xdbf0, 0xdbf5, 0xdbf2, 0x5aac, 0xdbf4, 0x5aaa, 0xdbf4, 0x5b80, + 0xdbfb, 0xa531, 0xdc01, 0xdbfe, 0xdc07, 0xdbfd, 0x4ae9, 0xdc0a, + 0xda1a, 0xdc03, 0xdc04, 0xdc06, 0xdc08, 0xdbff, 0xdbf7, 0x5aeb, + 0xdc0f, 0xdbe4, 0xdbf9, 0xdbfc, 0xdc05, 0xdbba, 0xdc02, 0xdc00, + 0xdc0d, 0xdc1e, 0xdc1d, 0x5afc, 0xdc16, 0x5b1a, 0xdc25, 0xdbe8, + 0x5b8d, 0xdc14, 0xdc1b, 0xdc10, 0xdb5c, 0x5acc, 0xdc0f, 0x242f, + 0x2518, 0x2553, 0x2554, 0x255f, 0xe5d9, 0xdc15, 0xdc18, 0xdbb3, + 0x3697, 0xdc19, 0xdc0c, 0x5bbd, 0xe8a8, 0xdbf8, 0xdc1a, 0x5ae0, + 0xdc16, 0xdbfa, 0xdc0b, 0xdc12, 0xdc13, 0xda8a, 0xdbcc, 0xdc0e, + 0xbb4c, 0xdc1c, 0xdc27, 0xdc11, 0xdc21, 0xdc24, 0xdc26, 0x5ae1, + 0xdc25, 0xdbb2, 0xdc22, 0x5b21, 0xdc23, 0x5b20, 0xdc23, 0xdc1f, + 0xa546, 0x5b81, 0xdc2a, 0xdc2c, 0x5b7e, 0xdc2b, 0xa5f9, 0xdbb4, + 0xdc28, 0x247c, 0xa611, 0xdc29, 0x24d7, 0xa629, 0x5a3c, 0xdbc1, + 0xdbb9, 0xdc32, 0xdba5, 0xa642, 0x5b5b, 0xdc2e, 0xdbc6, 0xdc2f, + 0xdc2d, 0x5b56, 0xdc2e, 0x5ae9, 0xdc31, 0xa66a, 0x553c, 0xd5f9, + 0x2661, 0xdc35, 0xbbc1, 0x5a71, 0xdbdd, 0x5a33, 0xdbd1, 0xdbae, + 0xa584, 0x5b93, 0xdba9, 0xdc34, 0xb2a4, 0xdbea, 0x46d1, 0xc6e3, + 0xda89, 0x5b2d, 0xdc2b, 0x5aad, 0xdbfb, 0x5b2b, 0xdc2a, 0x5b9a, + 0xdd5e, 0xdc09, 0x23d8, 0xa909, 0xda5f, 0x2bb4, 0xe1bc, 0x5ae4, + 0xdc14, 0x1ec7, 0x5b90, 0xe6e0, 0x5b8e, 0xe6e0, 0xdc17, 0x5b72, + 0xdba9, 0xdc30, 0xdc36, 0x5b83, 0xdd5e, 0xdc20, 0xdc33, 0x5a00, + 0xda01, 0xda08, 0xda02, 0xda03, 0xda8d, 0xdb4f, 0xda10, 0xda0c, + 0xda0e, 0x5b72, 0xdb93, 0xda15, 0xda16, 0x3258, 0xda17, 0xda13, + 0xdb70, 0xda0a, 0xda18, 0xda12, 0xdb1b, 0xdaf1, 0xdb33, 0xda4e, + 0xda1d, 0xda25, 0xda31, 0x5a1b, 0xdb4c, 0xdad6, 0xda29, 0xda1f, + 0x5af7, 0xe8a8, 0xda2d, 0xda2a, 0xda23, 0x5a3c, 0xdb49, 0xda41, + 0xda36, 0xda55, 0xda5b, 0xdb58, 0xda57, 0xda50, 0xda34, 0xda3a, + 0xda46, 0xdb05, 0xda5e, 0xda58, 0xda54, 0xda56, 0x5a33, 0xdb6f, + 0xda52, 0xda86, 0xda84, 0xda66, 0xda7f, 0xda69, 0xda70, 0xda7c, + 0xdaa0, 0xda85, 0xda75, 0x5a71, 0xdb6e, 0xda95, 0xda6c, 0xda6e, + 0xda6d, 0xda62, 0xda63, 0xdacd, 0xda72, 0xda73, 0xda6b, 0xdae2, + 0xda61, 0xdb78, 0xdaa1, 0xdaa3, 0xda9e, 0xda9a, 0x309e, 0xdaa4, + 0xdaa5, 0x2500, 0xda98, 0xdaa8, 0xda91, 0x5aaa, 0xdaac, 0xdaa6, + 0xda92, 0xdacb, 0xdaf8, 0xdacf, 0xdafe, 0x5aad, 0xdb80, 0xdad1, + 0xdab9, 0xdab2, 0xdac9, 0xdadb, 0xdab0, 0xdad7, 0xdabf, 0xdac2, + 0xdad2, 0xdac4, 0xdab6, 0xdac7, 0xdb85, 0x4ae9, 0xdabc, 0xdb00, + 0xdaf6, 0xdadc, 0xdb0a, 0x5acc, 0xdaeb, 0xdae7, 0xdb14, 0xdb01, + 0xdb02, 0x5ae4, 0xdb8d, 0xdaed, 0x5ae0, 0xdafc, 0xdb92, 0xdaee, + 0x3697, 0xdaf3, 0xdafa, 0xdae6, 0xdb0e, 0xdade, 0xdadd, 0xdb28, + 0xdb9c, 0xdb16, 0xdb1d, 0x5b20, 0xdb21, 0xdb17, 0x5ae1, 0xdb1a, + 0xdb19, 0xdb10, 0xdb39, 0xdb3e, 0x5b2b, 0xdb81, 0x5b2d, 0xdb7e, + 0xdb2c, 0xdb5a, 0x5b56, 0xdb5b, 0xdb59, 0xdb95, 0xdb5c, 0xdb4e, + 0xdb9e, 0xdb74, 0xdb6b, 0xdb96, 0x4a40, 0xccd3, 0xac88, 0x3e13, + 0x3eaa, 0xdc40, 0x3e13, 0x3eaa, 0xdc3f, 0xd373, 0xac82, 0x1e30, + 0x5c50, 0x673b, 0xe74a, 0x4ad6, 0xcaea, 0x1e30, 0x5c4a, 0x673b, + 0xe74a, 0x5273, 0x5276, 0x5277, 0xdc54, 0x5273, 0x5276, 0x5277, + 0xdc53, 0xdc5a, 0xdc58, 0xdc87, 0x9e88, 0xc32a, 0xdc76, 0xdc6e, + 0xc2b2, 0xc2b4, 0xdc94, 0xc2c9, 0xef26, 0xdc64, 0xc2e2, 0xc2b4, + 0xc683, 0x42f8, 0xc30d, 0xc30a, 0xc32f, 0xc32b, 0xdc7c, 0xc34f, + 0xc37e, 0x4383, 0xd83c, 0x56fd, 0xdd1d, 0xdd1e, 0x2458, 0x24e1, + 0xdd20, 0xdd1f, 0x321d, 0xdd22, 0xdd21, 0xdd2b, 0xdd27, 0xdd29, + 0xdd2a, 0xdd2f, 0xdd23, 0x2295, 0x5cea, 0xdd28, 0x2f10, 0x5cb3, + 0xdd30, 0xdd2e, 0xdd33, 0xdd40, 0x2f10, 0x5cae, 0xdd30, 0xdd35, + 0xdd2c, 0x9e70, 0xdd37, 0xdd36, 0xdd39, 0xdd34, 0xdd3b, 0xdd38, + 0xdd3a, 0xdd32, 0xdd42, 0xdd41, 0xdd3f, 0xdd45, 0xdd44, 0xdd3e, + 0x2379, 0xb064, 0xdd3c, 0xc68e, 0x5d13, 0xdd43, 0x5ce4, 0xdd31, + 0xdd48, 0xdd4a, 0x2bbe, 0xdcd4, 0x2bbe, 0xdcd3, 0xdd47, 0xdd4a, + 0xdd52, 0xdd49, 0x5d0a, 0xdd5e, 0xdd50, 0xdd4f, 0xdd54, 0x4d9a, + 0x4e8c, 0xdd53, 0x5d12, 0xdd24, 0x2356, 0xa8f2, 0x5cce, 0xdd31, + 0xdd4b, 0xdd55, 0x2295, 0x5cad, 0xdd28, 0xdd4d, 0xdd26, 0xdd4c, + 0xa046, 0x5d56, 0xe83c, 0xdd57, 0x5d4d, 0xef4e, 0xdd5a, 0xdd59, + 0xdd2d, 0xdd5b, 0xdd5c, 0x3557, 0xdd25, 0xdd3d, 0xdd58, 0xdd5f, + 0xdd60, 0x5cdb, 0xdd5e, 0x2050, 0x5d17, 0xdd5d, 0xdd61, 0xdd62, + 0xdd46, 0x5ce2, 0xdd24, 0x5ccd, 0xdd43, 0xdd51, 0xdd4e, 0x2050, + 0x5d0b, 0xdd5d, 0xdd63, 0xdd43, 0x56fd, 0xdc9d, 0xdc9e, 0xdca0, + 0x2458, 0x24e1, 0xdc9f, 0xdca2, 0x321d, 0xdca1, 0xdcac, 0x5ce2, + 0xdd12, 0x3557, 0xdd01, 0xdcec, 0xdca8, 0x5cad, 0xdcea, 0xdca9, + 0xdcaa, 0xdca7, 0xdcb6, 0xdcfc, 0xdcaf, 0xdcab, 0x2f10, 0x5cae, + 0xdcb3, 0x5cce, 0xdce4, 0xdcc1, 0xdcb0, 0xdcbc, 0xdcb4, 0xdcba, + 0xdcb8, 0xdcbf, 0xdcbb, 0xdcc0, 0xdcbd, 0xdcca, 0xdd04, 0xdcc8, + 0xdcc4, 0xdcb2, 0xdcc3, 0xdcc2, 0x5ccd, 0x5d13, 0xdd1c, 0xdcc7, + 0xdcc5, 0xdd10, 0xdcd5, 0xdcd1, 0xdcda, 0x5cd2, 0xdcd6, 0xdce6, + 0xdced, 0x5ceb, 0x5cf7, 0xef4e, 0xdd16, 0xdcde, 0xdcdc, 0xdd14, + 0xdcd9, 0xdce1, 0xdce0, 0xdce7, 0x5cf4, 0xe83c, 0xdcf5, 0xdd05, + 0xdcfb, 0xdcfa, 0xdcfd, 0xdcfe, 0x2050, 0x5d0b, 0xdd17, 0x5b83, + 0x5b9a, 0x5cdb, 0xdd0a, 0xdd07, 0xdd08, 0xdd0d, 0xdd0f, 0xdd1b, + 0x407b, 0xc0fe, 0xdd6c, 0xdd6a, 0xdd71, 0xdd70, 0xdd99, 0xdd95, + 0x2c1f, 0x2c20, 0x6bae, 0x6c7b, 0xec9c, 0xdfdf, 0xdd82, 0xdd81, + 0xdda8, 0xdda6, 0xdd76, 0xdd75, 0xdd91, 0xdd8b, 0xde7a, 0x5dc3, + 0xde8d, 0xddb2, 0xddb1, 0xde89, 0xde38, 0x5daf, 0xde8d, 0xde4c, + 0xde92, 0xdff9, 0xddfa, 0xde29, 0xde10, 0xde82, 0xde7a, 0xde55, + 0xde9a, 0xdde5, 0xde8b, 0xac40, 0x50eb, 0xd11b, 0x458e, 0xc58f, + 0xde34, 0x511a, 0xd173, 0xde8a, 0xddf5, 0xde64, 0xddf4, 0xde64, + 0xc8b0, 0xde93, 0xde91, 0xcaac, 0xde0a, 0xddbb, 0xde4f, 0x5e79, + 0xdea2, 0xddc4, 0xde44, 0xdea1, 0xde63, 0xddf8, 0xdff9, 0xde52, + 0x5e28, 0xde2a, 0x5e8a, 0xde95, 0x5e4b, 0xdea2, 0x5dac, 0xddf7, + 0xdea5, 0xddf6, 0xde84, 0xde83, 0xa8b8, 0xddb8, 0x5e0c, 0x5e70, + 0xde95, 0x5dfb, 0xe6ae, 0x5daf, 0xddc3, 0xdeaa, 0xde2f, 0xddde, + 0xde2c, 0x5e70, 0xde8a, 0xdeaa, 0xddf9, 0xdea6, 0xde51, 0x5e4b, + 0xde79, 0xde7f, 0xde9c, 0x5e8f, 0xde99, 0xdeb3, 0xd03d, 0xdec0, + 0x1f53, 0x5ec6, 0x6ab5, 0xead4, 0xdeb2, 0xdeb1, 0xdeac, 0xdeaf, + 0x5040, 0x504c, 0xd077, 0x1f53, 0x5eb0, 0x6ab5, 0xead4, 0xdf66, + 0xdf67, 0xdf68, 0xa19b, 0xdf6a, 0xdf69, 0xdf6b, 0x3799, 0x5ef6, + 0xdf6d, 0xdf6f, 0x5f49, 0xdf6c, 0x5f5f, 0xdf70, 0xdf77, 0xdf78, + 0x5f29, 0xdf88, 0xdf71, 0x3799, 0x5edb, 0xdf6d, 0xdf74, 0xdf75, + 0xdf7a, 0xdf72, 0xdf76, 0x5f15, 0xdf7b, 0xdf7c, 0xdf5c, 0xdf83, + 0xdf82, 0xdf81, 0xdf80, 0xdf7d, 0xdf7e, 0x5f1b, 0xdf86, 0xdf36, + 0x5f19, 0xdf84, 0xb33d, 0x1fcc, 0xdf85, 0x5efd, 0xdf7b, 0x5f12, + 0xdf84, 0x5f0c, 0xdf86, 0x5f3a, 0xdf8e, 0xdf89, 0xdf8b, 0xdf8d, + 0xdf57, 0xdf8a, 0xdf87, 0x5ef0, 0xdf88, 0xdf6e, 0xdf8c, 0xdf6f, + 0xdf91, 0xdf8f, 0xdf0f, 0xdf93, 0x5f1c, 0xdf8e, 0xdf90, 0xdf92, + 0xdf97, 0xd206, 0x67b1, 0x67dc, 0xe7ec, 0xbbc2, 0x5f96, 0xe38b, + 0xdf95, 0xdf98, 0x5ee2, 0xdf6c, 0xdf99, 0xdf7f, 0xdf9a, 0xdf21, + 0xdf00, 0x5ee3, 0xdf70, 0xdf94, 0xdf79, 0xdf73, 0xdeca, 0xdecb, + 0xdecc, 0xded2, 0xded1, 0xded4, 0x5ee2, 0xdf49, 0x3799, 0x5edb, + 0xdef6, 0xdf2a, 0x5edf, 0xdf2d, 0x5ee3, 0xdf5f, 0xdef2, 0xdefb, + 0xdf64, 0xdef8, 0xdef9, 0xdefc, 0xdee4, 0xdeeb, 0xdf62, 0xdefa, + 0x5efd, 0xdf15, 0xdefe, 0xdf09, 0xdf0a, 0xdf4e, 0xdf08, 0xdf07, + 0xdf05, 0xdf03, 0x5f12, 0xdf19, 0xdf14, 0x5f0c, 0xdf1b, 0xdf26, + 0x5ef0, 0xdf29, 0xdf1d, 0xdf25, 0xdf1e, 0xdf2c, 0xdf1f, 0x5f1c, + 0xdf3a, 0xdf33, 0xdf3b, 0xdf2f, 0xdf3c, 0xdf38, 0xdf61, 0xdf45, + 0xdf44, 0xdf3e, 0xdf46, 0xdf4d, 0xdf54, 0x5f9e, 0x5fa4, 0xdfad, + 0x5f9d, 0x5fa4, 0xdfad, 0xe5e2, 0x3683, 0xcf6a, 0x2f01, 0x5fa9, + 0xdfaf, 0x5f9d, 0x5f9e, 0xdfad, 0xa29e, 0x2f01, 0xdfa8, 0x2f01, + 0xdfa7, 0x2f01, 0x5fa1, 0xdfaf, 0xdfae, 0x5f9d, 0x5f9e, 0xdfa4, + 0xdfab, 0x2f01, 0x5fa1, 0xdfa9, 0xa19c, 0xdfb6, 0xdfb5, 0x5fba, + 0x6089, 0xe08a, 0x5fb9, 0x6089, 0xe08a, 0xe07c, 0x6039, 0xe054, + 0xe077, 0xdfc3, 0xdfc2, 0xdfe4, 0xe04e, 0xe081, 0x231d, 0xae00, + 0xe04b, 0xe084, 0xe019, 0xe032, 0xe060, 0xe055, 0xe023, 0x5d7f, + 0x6045, 0xe072, 0xdfc6, 0xe008, 0xe087, 0xaef8, 0xaf80, 0xe003, + 0x2f84, 0x2f91, 0xe015, 0x26d8, 0x26de, 0x26ec, 0x2efb, 0x2efd, + 0xe025, 0x5de1, 0xde5f, 0x1e43, 0xaefc, 0xe069, 0xdfef, 0xdfe5, + 0xe078, 0xe05c, 0xe052, 0x6013, 0xe05e, 0x6012, 0xe05e, 0x2f84, + 0x2f91, 0xdff3, 0xdfd9, 0xdfde, 0x26d8, 0x26de, 0x26ec, 0x2efb, + 0x2efd, 0xdff4, 0xe090, 0xa954, 0x3e38, 0xe04a, 0xa468, 0xdfdb, + 0x5fbe, 0xe054, 0xe060, 0xe08f, 0xa06a, 0xe06f, 0x5fdf, 0xe072, + 0x1fa6, 0xa075, 0x3e38, 0xe030, 0xdfd0, 0xdfc7, 0xe00e, 0x2675, + 0x585c, 0xd85f, 0x5fbe, 0xe039, 0xdfdd, 0xe07a, 0xe065, 0xe00a, + 0x6012, 0xe013, 0x5fdc, 0xe03a, 0xbeaf, 0xe059, 0xe002, 0xe041, + 0x5fdf, 0xe045, 0xced5, 0xdfc1, 0xe009, 0xe057, 0xdfbd, 0xdfc8, + 0xdfd8, 0xdfe9, 0x5fb9, 0x5fba, 0xe08a, 0x5fb9, 0x5fba, 0xe089, + 0xe03b, 0xe026, 0xe61d, 0xe127, 0xe13a, 0xe0ab, 0xb751, 0xe0a6, + 0xe114, 0xe0f5, 0xe112, 0xe134, 0x23b8, 0x6130, 0xe6a3, 0xe0cc, + 0x3b1d, 0x6b30, 0xeb31, 0xe0bd, 0x60d2, 0xe0de, 0xe0df, 0xe136, + 0xe12d, 0x60ce, 0xe0de, 0xe106, 0x60ce, 0xe0d2, 0xe0cf, 0xe148, + 0xe116, 0xe0f6, 0xe0ae, 0xe0e8, 0x1e61, 0x6109, 0x610a, 0xe115, + 0xe132, 0xe0d3, 0x1e61, 0x60f7, 0x610a, 0xe115, 0x1e61, 0x60f7, + 0x6109, 0xe115, 0xe0b9, 0xe0ac, 0x1e61, 0x60f7, 0x6109, 0xe10a, + 0xe0e7, 0xe093, 0xe0d1, 0x23b8, 0x60bb, 0xe6a3, 0xe0f8, 0xe0ba, + 0xe0d0, 0xe146, 0xe09d, 0xe147, 0x2398, 0x28e5, 0xaedb, 0xe147, + 0xe137, 0x613c, 0xe142, 0xe0e6, 0x9e23, 0xe194, 0xe189, 0xb59f, + 0x6196, 0xe19e, 0xe18b, 0x467a, 0x6197, 0xe1b1, 0x616c, 0xe1bb, + 0xa5e0, 0x6167, 0xe1bb, 0x61a4, 0xe1ac, 0xe1c5, 0xe1c3, 0x61b8, + 0xe1c0, 0xd14c, 0xe195, 0xe154, 0xe91f, 0xe162, 0x24b8, 0xee79, + 0xe14b, 0xe187, 0x615d, 0xe19e, 0x467a, 0x6166, 0xe1b1, 0xb9bc, + 0x1e11, 0xeb57, 0x615d, 0xe196, 0x6171, 0xe1ac, 0x233b, 0xbbc9, + 0x6171, 0xe1a4, 0x467a, 0x6166, 0xe197, 0x617f, 0xe1c0, 0x6167, + 0xe16c, 0x2bb4, 0xdb8c, 0x617f, 0xe1b8, 0xd845, 0xe17e, 0xe17d, + 0x2bc0, 0xb3a1, 0x61ca, 0xe1cb, 0x61c8, 0xe1cb, 0x61c8, 0xe1ca, + 0x58cf, 0xd8e1, 0x27dc, 0xa8c4, 0xa398, 0x61d2, 0xe485, 0x61d1, + 0xe485, 0x61da, 0x61fb, 0xe486, 0xe487, 0xe48c, 0x2200, 0xa202, + 0xe48a, 0xe489, 0xe48b, 0x61d3, 0xe1fb, 0xe1e1, 0xe488, 0x1e71, + 0x9e82, 0xe1dc, 0x621f, 0xe493, 0xe490, 0xb263, 0xe48f, 0xe492, + 0xe2e9, 0x2251, 0x2263, 0x2271, 0x228d, 0x228e, 0x2292, 0x2294, + 0xe1fc, 0xe497, 0xe48d, 0xe495, 0xe48e, 0x61d3, 0x61da, 0xe486, + 0x2251, 0x2263, 0x2271, 0x228d, 0x228e, 0x2292, 0x2294, 0xe1f0, + 0xe4af, 0xe4ab, 0xe498, 0xe4ad, 0xe4a5, 0x625b, 0xe4c5, 0xe49a, + 0xe4a0, 0xe49d, 0x6264, 0xe4a9, 0xe4a4, 0xe4a3, 0xe491, 0xe49e, + 0xe4ae, 0x629e, 0xe4a7, 0xe1e3, 0xe49f, 0xe499, 0xe4ac, 0xe49b, + 0xe4aa, 0xe3ba, 0x4089, 0xe46a, 0x6438, 0xe4ce, 0x6268, 0xe4cc, + 0xe4c8, 0xe4b6, 0xe4c3, 0xe4b4, 0xe4b9, 0xe4cd, 0xe4b0, 0xe4b8, + 0xe4c0, 0xe4bf, 0xe4be, 0x6295, 0x62e8, 0x6421, 0x6435, 0xe4c1, + 0xe49c, 0xe4bb, 0xe4ca, 0xe4ca, 0xe4c9, 0x2228, 0xe4c7, 0xe4cb, + 0xe4c2, 0xe4b7, 0xe4b3, 0xe4c6, 0x6206, 0xe4c5, 0xe4ba, 0xe348, + 0x46cb, 0x4f3d, 0xe4b5, 0x620e, 0xe4a9, 0xe4b2, 0x622e, 0xe4cc, + 0xe4bc, 0xe4bd, 0x47ff, 0x483f, 0x4926, 0x62db, 0xe45b, 0x6373, + 0x6451, 0x6452, 0xe46c, 0xe4cf, 0xe4f0, 0xe4d2, 0xe4ec, 0xe4ea, + 0xe4f6, 0xe4f3, 0xe4dc, 0xe4da, 0xe4e3, 0xe4e8, 0x6244, 0x62e8, + 0x6421, 0xe435, 0xe4e2, 0xe4ed, 0x6443, 0xe4eb, 0x62bd, 0xe4e6, + 0x2563, 0x5854, 0xd858, 0xe21e, 0xe4d1, 0xe4f7, 0xe4f1, 0xe4df, + 0xe4f5, 0xe4e5, 0xe4d5, 0xe4ef, 0xe4d0, 0x6322, 0xe4b1, 0xe47e, + 0xe4de, 0xc10a, 0x62ed, 0xe510, 0x4107, 0xe500, 0xe508, 0xe511, + 0xe509, 0xe29b, 0xe4dd, 0xe512, 0xe50c, 0xe4a1, 0xe4e4, 0xe4d7, + 0xe50b, 0xe4fb, 0x47ff, 0x483f, 0x4926, 0x6271, 0xe45b, 0xe50a, + 0x646f, 0xe513, 0x6381, 0xe4d8, 0xe504, 0xe503, 0xe514, 0x6244, + 0x6295, 0x6421, 0x6435, 0xe507, 0x61ef, 0xe4d3, 0x5216, 0x5217, + 0xe4fa, 0x62b3, 0xe510, 0xe4d6, 0xe506, 0xe502, 0xe4fd, 0x6444, + 0xe4f8, 0xe50d, 0xe52f, 0xe4a2, 0xe51e, 0x2f55, 0xe332, 0xe516, + 0xe52b, 0xe529, 0x641a, 0xe4d4, 0xe525, 0xe515, 0xe51f, 0xe524, + 0x637f, 0xe531, 0xe4ee, 0xe51b, 0xe52c, 0xe52d, 0xe51c, 0x62ad, + 0xe4b1, 0xe526, 0xe51a, 0xe520, 0xe521, 0x40bc, 0x4149, 0xe34a, + 0xe522, 0xe519, 0x2f55, 0xe304, 0xe530, 0xd868, 0xe486, 0xe4fc, + 0xe3e8, 0xe51d, 0xe528, 0xe52a, 0xe494, 0xe534, 0x6260, 0xe533, + 0x40bc, 0x4149, 0xe32c, 0xe505, 0xe540, 0xe537, 0xe4e1, 0xe496, + 0x4145, 0xe53b, 0xe4ff, 0x6445, 0xe53d, 0xe538, 0xe532, 0xe518, + 0xe539, 0x63d3, 0xe52a, 0xe53e, 0x6274, 0x6451, 0x6452, 0xe46c, + 0xe52e, 0xe536, 0xe517, 0x649f, 0xe53a, 0xe319, 0xe2e3, 0xe541, + 0xe53f, 0xe545, 0xe551, 0xdf44, 0x642e, 0xe570, 0x39c8, 0xd028, + 0x3eb6, 0xc194, 0x63c1, 0xe501, 0xb7aa, 0xe549, 0xe524, 0xe548, + 0x6543, 0xef12, 0xe4a8, 0xd4e5, 0x6402, 0xe54f, 0xe4e0, 0xe4e9, + 0xe53c, 0xe550, 0x63ae, 0xe547, 0x63ad, 0xe547, 0xe552, 0xe54d, + 0xe553, 0xe54c, 0xe228, 0xe54e, 0xe396, 0xe55e, 0xe55f, 0xe4fe, + 0xe546, 0xe559, 0xe560, 0xe55d, 0xe36f, 0xe4ff, 0xe535, 0xe557, + 0xe558, 0xe55b, 0x222c, 0x2257, 0x2277, 0xe4f2, 0x434d, 0xe55c, + 0xe556, 0xe542, 0x63fd, 0xe508, 0xe33e, 0xe55a, 0xe4e7, 0xe564, + 0xe56a, 0x63e5, 0xe508, 0x63a6, 0xe54f, 0xe4d9, 0xe4f4, 0xe563, + 0xe4f9, 0xe566, 0xe561, 0xe50f, 0xe49f, 0xe56b, 0x630f, 0xe4d4, + 0x6481, 0xe562, 0xe568, 0x6244, 0x6295, 0x62e8, 0x6435, 0xe4c1, + 0xe50e, 0xe50f, 0xe544, 0xe54c, 0x638c, 0xe570, 0xe56f, 0xe56d, + 0x6244, 0x6295, 0x62e8, 0x6421, 0xe4c1, 0xe56e, 0x622c, 0xe4ce, + 0xe4db, 0xe571, 0x629a, 0xe4eb, 0x62f3, 0xe4f8, 0xe360, 0xe56c, + 0xe554, 0x6274, 0x6373, 0x6452, 0xe46c, 0x6274, 0x6373, 0x6451, + 0xe46c, 0xb7aa, 0xe572, 0xe527, 0x647d, 0xe4bb, 0x47ff, 0x483f, + 0x4926, 0x6271, 0xe2db, 0x6909, 0xe95f, 0xe574, 0xe4c4, 0xe573, + 0xa228, 0xe565, 0x4089, 0xe229, 0x6274, 0x6373, 0x6451, 0xe452, + 0xe567, 0xe2df, 0xe4a5, 0xe575, 0xe576, 0x4f36, 0xcf50, 0xe54a, + 0xe569, 0xe523, 0x645a, 0xe4bb, 0xe2ae, 0xa1ff, 0x641d, 0xe562, + 0xe54b, 0x61d1, 0xe1d2, 0x61d3, 0x61fb, 0xe337, 0xe1d4, 0xe1dd, + 0xe1d8, 0xe1d7, 0xe1d9, 0xe1d5, 0xe1f7, 0xe1fa, 0xe1e7, 0xe1e4, + 0xe212, 0xe1e9, 0xe1e3, 0xe346, 0xe1f9, 0xe35a, 0xe1f5, 0xe203, + 0xe223, 0xe208, 0xe226, 0xe245, 0xe20d, 0xe214, 0x6221, 0x637e, + 0x6418, 0xe53a, 0xe209, 0xe2c7, 0xe2fc, 0xe211, 0xe210, 0x6205, + 0xe470, 0xbb3d, 0xe21e, 0xe3a2, 0x620e, 0xe264, 0xe227, 0xe201, + 0xe225, 0xe204, 0xe215, 0xe200, 0xe23a, 0x62ad, 0xe322, 0xe266, + 0xe257, 0xe237, 0x46cb, 0x4f3d, 0xe262, 0xe233, 0xe255, 0xe23d, + 0xe238, 0xe25e, 0x6246, 0x645a, 0xe47d, 0xe26c, 0xe26d, 0xe240, + 0xe23f, 0xe23e, 0x6244, 0x6421, 0xe435, 0xe251, 0xe234, 0xe460, + 0x6206, 0xe25b, 0xe25a, 0x2228, 0xe24b, 0xe230, 0xe249, 0x6247, + 0xe248, 0xe24d, 0x622e, 0xe268, 0xe239, 0x622c, 0xe438, 0xe276, + 0xe2ac, 0xe2a0, 0xe27a, 0xe2e9, 0x630f, 0xe41a, 0xe2aa, 0xe2ee, + 0xe2cf, 0xe2e3, 0xe403, 0xe28d, 0xe43a, 0xe285, 0xe2c1, 0xe2b1, + 0xe2a6, 0xe3a7, 0xe358, 0xe296, 0xe291, 0xe2cc, 0xe2a9, 0xe29b, + 0xe3f5, 0xe293, 0xe3a9, 0xe27f, 0x629a, 0xe443, 0xe27b, 0xe298, + 0xe31a, 0xe2ab, 0xe278, 0xe2a5, 0x222c, 0x2257, 0x2277, 0xe3df, + 0xe283, 0xe40b, 0xe2a8, 0xe280, 0xe2a3, 0x62f3, 0xe444, 0xe412, + 0x5216, 0x5217, 0xe2ea, 0xe2d9, 0xe338, 0xe2f1, 0xe3c8, 0x635e, + 0xe3d7, 0xe2b7, 0xe396, 0xe2f0, 0xe2e5, 0x5021, 0xe2e4, 0xe34b, + 0xe2ef, 0xe2e8, 0x62b9, 0x63e5, 0xe3fd, 0xe2bc, 0xe2dd, 0xe2d2, + 0xe2c5, 0xe2f6, 0xe426, 0x6417, 0xe427, 0x62b3, 0xe2ed, 0xe2bb, + 0xe2c3, 0xe2df, 0xe2e6, 0xe312, 0xe306, 0xe37a, 0xe369, 0xe32f, + 0xe328, 0xe31b, 0xe321, 0xe340, 0xe301, 0xe315, 0xe329, 0xe32b, + 0xe32e, 0xe47c, 0x6318, 0xe39a, 0xe310, 0xe326, 0xe455, 0xe341, + 0xe308, 0x6343, 0xe36f, 0xe307, 0xe31f, 0xe320, 0xe375, 0xe2f8, + 0xe333, 0xe319, 0xe365, 0xe348, 0xe347, 0xe3d8, 0xe376, 0xe354, + 0xe364, 0xe36c, 0x637e, 0xe49f, 0xe35b, 0xe3aa, 0xe360, 0xe370, + 0xe384, 0xe34d, 0xe382, 0xe3e4, 0xe3a1, 0xe428, 0xe387, 0xe3cc, + 0x63ad, 0xe3ae, 0xe39b, 0xe398, 0xe477, 0xe482, 0x63b8, 0xe42b, + 0xe3b3, 0xe3bf, 0x63a6, 0xe402, 0xe3ac, 0xe38a, 0xe3b0, 0xe3b5, + 0xe44c, 0xe3e2, 0xe3dc, 0xe3dd, 0xe3cd, 0xe3f0, 0xe3de, 0xe3e1, + 0xe3d1, 0xe3c3, 0xe3c7, 0xe3d0, 0xe414, 0x641d, 0xe481, 0xe410, + 0xe3f7, 0xe465, 0xe413, 0xe46d, 0xe420, 0xe479, 0xe3f9, 0xe419, + 0xe44a, 0xe433, 0xe436, 0xe432, 0x638c, 0xe42e, 0xe43f, 0xe454, + 0xe463, 0xe45e, 0xe471, 0xe472, 0x1ee7, 0x214f, 0x6578, 0xe57f, + 0x1ee7, 0x214f, 0x6577, 0xe57f, 0x1e45, 0x9e46, 0x1ee7, 0x214f, + 0x6577, 0xe578, 0xe5e8, 0xe5e9, 0xe5ea, 0xe5eb, 0x6589, 0xe5ed, + 0xe5ec, 0x6587, 0xe5ed, 0xaf00, 0xe5f6, 0xe5f3, 0x65a0, 0xe5f0, + 0x6592, 0xe5f2, 0x6591, 0xe5f2, 0xe5f4, 0xe5f5, 0xe5f8, 0x65f9, + 0xeb27, 0x658f, 0xe5f0, 0xe602, 0x2173, 0x65d7, 0xe5dc, 0xe601, + 0xa408, 0xe600, 0xa4c4, 0xe5fa, 0xe5fd, 0xe603, 0xe606, 0xe5fe, + 0x65b2, 0xe605, 0x65b1, 0xe605, 0x65c3, 0xe612, 0xe60a, 0x2266, + 0xe609, 0xe60e, 0xe60f, 0xe60d, 0xe608, 0xe60c, 0x65b4, 0xe612, + 0xb77f, 0xb697, 0xe5f1, 0x3ff6, 0xe614, 0xe615, 0xe611, 0xe607, + 0xe617, 0xe618, 0xe5ff, 0xe616, 0xe619, 0xe5ef, 0x2173, 0x65a2, + 0xe5dc, 0x3597, 0x6b25, 0x6b26, 0x6b2a, 0xeb2d, 0x242f, 0x2518, + 0x2553, 0x2554, 0x255f, 0xdaec, 0x2173, 0x65a2, 0xe5d7, 0xe61a, + 0xe613, 0xe610, 0xdf9f, 0xe61b, 0xe5fc, 0xe580, 0xe582, 0xe583, + 0xe586, 0xe588, 0x6587, 0xe589, 0xa54f, 0xe5d6, 0x658f, 0xe5a0, + 0xe5c8, 0x6591, 0xe592, 0xe58e, 0xe593, 0xe594, 0xe58c, 0xb0b6, + 0xe598, 0x6599, 0xeb27, 0xe5a8, 0xd05e, 0xe5e5, 0xe5a9, 0xe5ad, + 0xe5d3, 0xe5a5, 0xe5a3, 0xe5a1, 0xe5ab, 0xeb2e, 0x65b1, 0xe5b2, + 0xe5ac, 0xe5cd, 0xe5be, 0x2266, 0xe5b9, 0xe5b6, 0xeb29, 0xe5bf, + 0xe5bd, 0xe5bb, 0xe5bc, 0xe5e1, 0xe5cc, 0x65b4, 0xe5c3, 0xe5e0, + 0x3ff6, 0xe5ca, 0xe5cb, 0xe5d4, 0xe5d0, 0xe5d2, 0xe5d5, 0x65de, + 0xeb2b, 0xe5e4, 0xe61d, 0x6091, 0xe61c, 0xe68a, 0x1f8c, 0x6634, + 0x6670, 0xe682, 0x6633, 0xe67d, 0xe638, 0x2347, 0xe65e, 0x2742, + 0xac85, 0x274f, 0xa76f, 0xa751, 0xa740, 0xca7d, 0x6626, 0xe67d, + 0x1f8c, 0x6625, 0x6670, 0xe682, 0xe663, 0x2826, 0xe68e, 0xe628, + 0xbcae, 0x2768, 0xe641, 0x2768, 0xe640, 0xe69b, 0xe678, 0xe6b4, + 0xe673, 0xe658, 0xa905, 0x665c, 0x665d, 0xe67f, 0xa7c8, 0xe649, + 0x6655, 0xe67f, 0xe655, 0x2347, 0xe629, 0xaf8f, 0x2866, 0xe635, + 0xe677, 0x2c9b, 0x2cf6, 0x2d8b, 0x2d8c, 0x2db9, 0x669d, 0xe6af, + 0xe695, 0x4906, 0x667a, 0xe6aa, 0x1f8c, 0x6625, 0x6634, 0xe682, + 0xe648, 0xe665, 0xe646, 0x4906, 0x6669, 0xe6aa, 0x2794, 0xa819, + 0x6626, 0xe633, 0x6655, 0xe65c, 0x2830, 0xa895, 0x1f8c, 0x6625, + 0x6634, 0xe670, 0x27de, 0xa824, 0xe61f, 0xb697, 0x2826, 0xe636, + 0xe6a8, 0x1e5a, 0x66a0, 0xe6b1, 0x48d2, 0xe668, 0xa75e, 0xe69f, + 0xe645, 0x2c9b, 0x2cf6, 0x2d8b, 0x2d8c, 0x2db9, 0x6666, 0xe6af, + 0xe699, 0x1e5a, 0x6690, 0xe6b1, 0x23b8, 0x60bb, 0xe130, 0xe68f, + 0x4906, 0x6669, 0xe67a, 0x275f, 0xa8b3, 0xde8b, 0x2c9b, 0x2cf6, + 0x2d8b, 0x2d8c, 0x2db9, 0x6666, 0xe69d, 0x1e5a, 0x6690, 0xe6a0, + 0xea98, 0xe647, 0x66b7, 0xe6b8, 0x66b6, 0xe6b8, 0x66b6, 0xe6b7, + 0x2bc9, 0x674d, 0x674e, 0x674f, 0x6db4, 0x6e16, 0xee64, 0xa3ea, + 0xe6cb, 0xe6e3, 0x6ceb, 0xed08, 0x20f1, 0xecf8, 0xe6bd, 0xe6dd, + 0xe6db, 0x3742, 0xe6dc, 0x2f6b, 0x4431, 0xed70, 0xd67d, 0xa3cc, + 0xee1b, 0x66cf, 0xedb5, 0x3742, 0xe6d1, 0xe6cd, 0x6d8f, 0x6dc4, + 0xee21, 0xadb2, 0x5b8e, 0xdb90, 0xc9bb, 0xe6be, 0xbc1b, 0x9e91, + 0xe742, 0xe717, 0xe741, 0x671a, 0xe727, 0xc535, 0x671a, 0xe727, + 0xe73d, 0xeef4, 0x4075, 0x671b, 0xe748, 0xbcbe, 0xe6f6, 0x66fa, + 0x66fe, 0xe727, 0x4075, 0x670a, 0xe748, 0xe722, 0xe721, 0x66fa, + 0x66fe, 0xe71a, 0xe744, 0xd987, 0x1e30, 0x5c4a, 0x5c50, 0xe74a, + 0xe701, 0xe6f7, 0xe6f3, 0xe72d, 0xa3c7, 0x4075, 0x670a, 0xe71b, + 0xa3c6, 0x1e30, 0x5c4a, 0x5c50, 0xe73b, 0x2bc9, 0x66ba, 0x674e, + 0x674f, 0x6db4, 0x6e16, 0xee64, 0x2bc9, 0x66ba, 0x674d, 0x674f, + 0x6db4, 0x6e16, 0xee64, 0x2bc9, 0x66ba, 0x674d, 0x674e, 0x6db4, + 0x6e16, 0xee64, 0x2bc8, 0xe752, 0x2bc8, 0xe751, 0xe75a, 0x2172, + 0x2929, 0xe75d, 0xe75c, 0xe753, 0xe759, 0x2172, 0x2929, 0xe754, + 0x4cc6, 0x6763, 0x6eaa, 0x6eab, 0x6eb5, 0xeeba, 0xe762, 0x45b1, + 0xc6b0, 0xe768, 0xe82e, 0xe765, 0x676d, 0xe771, 0x676b, 0x6771, + 0xe7e7, 0x676b, 0x676d, 0xe7e7, 0xe7be, 0xcd46, 0x6789, 0xef17, + 0x6780, 0xef17, 0xe7b5, 0xe78d, 0xe78c, 0xade9, 0xe7c3, 0xe7bd, + 0xe7b9, 0x49cb, 0xe7a7, 0x49cb, 0xe7a6, 0xc89f, 0xe7c9, 0x5f41, + 0xe7dc, 0xe7dd, 0xe78b, 0xe79f, 0xe792, 0xe774, 0x4e6e, 0xcf30, + 0xe791, 0xa343, 0x589c, 0xe7e4, 0xe7af, 0xe7e6, 0xe7e7, 0x2dff, + 0xe7e8, 0xe7e9, 0xe7ea, 0x5f41, 0x67b1, 0xe7ec, 0xe7b2, 0xe7eb, + 0x589c, 0xe7c8, 0xe7cb, 0x676d, 0x6771, 0xe7cc, 0x2dff, 0xe7cd, + 0xe7d3, 0xe7d9, 0xe7de, 0x5f41, 0xe7dc, 0xe7ee, 0xe7ed, 0xe7f1, + 0xe7ef, 0x6f4f, 0xef51, 0xe7fb, 0xe7f5, 0xa4cd, 0xe875, 0xe876, + 0xe877, 0xe879, 0xe87a, 0xe878, 0xe87b, 0xe87c, 0xe882, 0xe880, + 0xe883, 0xe884, 0xe87d, 0xe881, 0xe87f, 0xe887, 0xe886, 0x6838, + 0xe888, 0xe88c, 0xe889, 0x6825, 0xe890, 0x6824, 0xe890, 0xe88f, + 0x6830, 0xe88a, 0xa934, 0x6767, 0xe892, 0x682c, 0xe88a, 0xe88b, + 0x4a4e, 0xe896, 0xe894, 0x681a, 0xe888, 0x4a68, 0x683a, 0x683d, + 0xe893, 0x4a68, 0x6839, 0x683d, 0xe893, 0xe891, 0x5cf4, 0xdd56, + 0x4a68, 0x6839, 0x683a, 0xe893, 0xeaed, 0xe897, 0xd16e, 0xe898, + 0xe89d, 0xe89a, 0x6854, 0xe89c, 0xe899, 0xe89b, 0x684f, 0xe89c, + 0x363e, 0xe86f, 0xa6df, 0xb13f, 0xe8a1, 0x685b, 0xe8a0, 0x685a, + 0xe8a0, 0xcc7b, 0xe89f, 0xe8a2, 0xe87e, 0xe8a4, 0xe8a5, 0x363e, + 0xe855, 0xe8a6, 0x6885, 0x6ad7, 0xee15, 0xe89e, 0xe8a7, 0xe801, + 0xe802, 0xe803, 0xe807, 0xe805, 0xe806, 0x6808, 0xeb1a, 0xe80a, + 0xe811, 0xe867, 0xe813, 0xe80e, 0xe812, 0xe80c, 0xe80f, 0xe810, + 0x6871, 0xead7, 0xe818, 0xe817, 0x681a, 0xe838, 0xe821, 0x682c, + 0xe830, 0xe832, 0xe81c, 0xbf41, 0xc1b2, 0xe826, 0x6824, 0xe825, + 0xe83b, 0xe82e, 0x4a68, 0x6839, 0x683a, 0xe83d, 0xe837, 0x4a4e, + 0xe834, 0xe846, 0xe84c, 0xe852, 0xe84e, 0xe853, 0x684f, 0xe854, + 0xe84d, 0xe873, 0xe862, 0x685a, 0xe85b, 0xe859, 0xe865, 0xce87, + 0xe86b, 0xe86c, 0xe870, 0xe874, 0x1e30, 0x21e8, 0x21ec, 0x21ee, + 0x5af7, 0x5bbd, 0x68cc, 0xe8ce, 0xe8d0, 0x68b7, 0x68c6, 0x68c8, + 0xe8d1, 0xe8d2, 0xa3f0, 0xa22e, 0xe8d3, 0x68ae, 0x68c6, 0xe8c8, + 0xe8d4, 0xe8cf, 0xe8d6, 0xe8d5, 0xe8d7, 0x68c4, 0xe8d8, 0x68c3, + 0xe8d8, 0x68ae, 0x68b7, 0x68c7, 0x68c8, 0xe8d9, 0xe8c6, 0x68ae, + 0x68b7, 0x68c6, 0xe8da, 0x21e8, 0x21ec, 0x21ee, 0x68a8, 0xe8ce, + 0x1e30, 0x21e8, 0x21ec, 0x21ee, 0x68a8, 0xe8cc, 0xe8ba, 0xe8ad, + 0xe8ae, 0xe8af, 0xe8b6, 0xe8b8, 0xe8bc, 0xe8bb, 0xe8c0, 0x68c3, + 0xe8c4, 0xe8c6, 0xe8c8, 0xe8de, 0xcffb, 0xe8db, 0x25b0, 0x68e0, + 0xe963, 0x25b0, 0x68df, 0xe963, 0xe910, 0xe965, 0xe964, 0xe966, + 0xe957, 0xe968, 0xe96a, 0x49d7, 0xe96b, 0xe90a, 0xe96c, 0x68f2, + 0xe96e, 0x68f0, 0xe96d, 0xe8ef, 0x68ee, 0xe96e, 0xe974, 0xe99d, + 0xe972, 0xe971, 0xe970, 0xe973, 0xe97a, 0xe978, 0x6920, 0xe97c, + 0x645c, 0x695f, 0xe977, 0x217b, 0x4faa, 0xe8ec, 0xe975, 0xe95c, + 0xe979, 0xe97b, 0xe8e1, 0xe97d, 0x6927, 0xe981, 0xe97f, 0xe982, + 0xe97e, 0x1f59, 0xe980, 0xd0b4, 0xe984, 0xe983, 0xe96f, 0xe18a, + 0x6905, 0xe97c, 0xe985, 0x2582, 0x6912, 0x6935, 0xe981, 0x5218, + 0xe986, 0xccca, 0xccc7, 0xe967, 0xe959, 0x2582, 0xe927, 0xe989, + 0xe987, 0xe967, 0xe98e, 0xccd5, 0xe969, 0xe988, 0xe98f, 0xe98a, + 0xe98c, 0xe98d, 0xe992, 0xe990, 0xe991, 0xe993, 0xe988, 0xe994, + 0xd1b3, 0xcce6, 0xe965, 0xe976, 0xe8e8, 0xe934, 0xe90d, 0xe98b, + 0x645c, 0x6909, 0xe977, 0xe995, 0x25b0, 0x68df, 0xe8e0, 0xe8e3, + 0x68e2, 0xe951, 0xe8e5, 0x6933, 0xe939, 0xe8e9, 0xe93c, 0xe8ea, + 0xe8eb, 0xe8ed, 0xe8ef, 0x68ee, 0xe8f2, 0xe91e, 0xe8fe, 0xe8fd, + 0xe8fc, 0xe8ff, 0xe8f4, 0xe90c, 0xe952, 0x6909, 0xe95f, 0xe904, + 0xe90e, 0xe903, 0xe90f, 0x6905, 0xe920, 0xe911, 0xe916, 0xe913, + 0x1f59, 0xe918, 0x6912, 0xe927, 0xe915, 0xe91c, 0xe91b, 0xe921, + 0xe928, 0xe937, 0x693d, 0xe94b, 0xe936, 0xe93f, 0xe95e, 0xe941, + 0xe943, 0xe93a, 0xe93e, 0xe948, 0xe949, 0xe945, 0xe94a, 0xe94c, + 0xe962, 0xe8f6, 0xe99f, 0xe99e, 0xea6c, 0xea6d, 0xa1af, 0x69c4, + 0xea6e, 0xea5d, 0xea70, 0xea6f, 0xea72, 0xce36, 0x6a62, 0xea74, + 0xea73, 0x69b1, 0xea6e, 0x6a5b, 0xea7f, 0x357a, 0x69c8, 0x6a45, + 0xea71, 0x357a, 0x69c6, 0x6a45, 0xea71, 0xea7b, 0xea7d, 0xea79, + 0xea75, 0xea7e, 0xea80, 0xea78, 0xea76, 0x69de, 0xea7c, 0x69dd, + 0xea7c, 0xea77, 0x208c, 0x4f75, 0xea82, 0xea88, 0xea87, 0xea73, + 0xea83, 0xea86, 0x6a2e, 0xea51, 0xea8e, 0xea8f, 0xea8b, 0xea8d, + 0xea93, 0xea92, 0xea91, 0xea90, 0x6a13, 0x6a57, 0xea8c, 0x6a37, + 0xea9a, 0x6a10, 0x6a57, 0xea8c, 0xea9b, 0xea97, 0xea99, 0xea52, + 0xea9e, 0xea98, 0x69f5, 0x6a51, 0xea9d, 0xd17e, 0xea7a, 0x6a12, + 0xea9a, 0xea9f, 0xea47, 0xeaa1, 0xd4e6, 0xea9c, 0xea96, 0xeaa0, + 0xeaa2, 0x357a, 0x69c6, 0x69c8, 0xea71, 0xea3a, 0xea85, 0xea95, + 0xea81, 0xeaa3, 0x69f5, 0x6a2e, 0xea9d, 0xea28, 0xea84, 0x6a10, + 0x6a13, 0xea8c, 0xb0ca, 0x69c5, 0xea7f, 0xe9b2, 0xeaa4, 0x69bf, + 0xea74, 0xeaa7, 0x560e, 0xeaa5, 0xeaa6, 0xbb22, 0xea8a, 0xea89, + 0xe9ac, 0xe9ad, 0x69b1, 0xe9c4, 0xe9b4, 0xe9b3, 0x357a, 0x69c6, + 0x69c8, 0xea45, 0xe9b9, 0x69c1, 0xe9ee, 0x69bf, 0xea62, 0xe9d4, + 0xe9db, 0xe9df, 0xe9d9, 0xe9d2, 0xea36, 0xe9d0, 0x69dd, 0xe9de, + 0xe9d1, 0xe9d5, 0x69c5, 0xea5b, 0xe9d8, 0xea4d, 0x208c, 0x4f75, + 0xe9e1, 0xe9f0, 0xea55, 0xea4a, 0xe9f1, 0xe9ed, 0xe9e2, 0xea6b, + 0xea6a, 0xea01, 0x6a10, 0x6a13, 0xea57, 0xea02, 0xe9f8, 0xe9ff, + 0xea0f, 0xea0e, 0xea0d, 0xea05, 0xea4c, 0xea42, 0xea19, 0x66b2, + 0xea2d, 0xea24, 0x6a12, 0xea37, 0xea16, 0xea41, 0x6a2e, 0xea51, + 0xea2b, 0xea38, 0xea43, 0xea3e, 0xea44, 0xea4f, 0xea5f, 0x560e, + 0xea65, 0xea66, 0xea64, 0xd0ae, 0x1f53, 0x5eb0, 0x5ec6, 0xead4, + 0xeca0, 0x51b8, 0xead3, 0xeacf, 0xd180, 0xead6, 0xead5, 0xeac5, + 0xd10f, 0x51b8, 0xeac4, 0x1f53, 0x5eb0, 0x5ec6, 0xeab5, 0x51cf, + 0xeacc, 0xeacb, 0x6871, 0x6885, 0xee15, 0xead9, 0xead8, 0x1eff, + 0xaf77, 0xeaf9, 0xeaef, 0x6b02, 0xeb22, 0x23d1, 0xeaee, 0xe83e, + 0x23d1, 0xeaea, 0xeae5, 0x1f5b, 0xaf7f, 0xeae4, 0xa243, 0x6ae9, + 0x6b13, 0xeb22, 0xb77e, 0xd0e1, 0x6b02, 0xeb22, 0xe87b, 0xeb23, + 0x6ae9, 0x6b02, 0xeb13, 0xeb1b, 0x3597, 0x65d8, 0x6b26, 0x6b2a, + 0xeb2d, 0x3597, 0x65d8, 0x6b25, 0x6b2a, 0xeb2d, 0x6599, 0xe5f9, + 0xa4c4, 0xe60b, 0x3597, 0x65d8, 0x6b25, 0x6b26, 0xeb2d, 0xe61a, + 0x3597, 0x65d8, 0x6b25, 0x6b26, 0xeb2a, 0xe604, 0x3b1d, 0x60c1, + 0xeb31, 0x3b1d, 0x60c1, 0xeb30, 0xeb39, 0xeb36, 0x1ffc, 0xcca5, + 0xac2c, 0xeb58, 0xeb4e, 0x573d, 0xeb49, 0x21f2, 0x2c32, 0x2c34, + 0x2c36, 0xac37, 0x1e11, 0xe19c, 0xeb47, 0xec7c, 0xec7d, 0xec7e, + 0xec6e, 0xebbb, 0xec80, 0xeeff, 0xec81, 0x6c78, 0xec88, 0xec24, + 0xec82, 0xec7f, 0xec84, 0xec85, 0xec86, 0x6bdb, 0xecb7, 0xec8c, + 0xec89, 0xec8f, 0xec87, 0xebf9, 0xec90, 0xec8d, 0xec8b, 0xec8a, + 0xec92, 0xec98, 0x6bd7, 0x6c76, 0xec9e, 0xec95, 0xec96, 0x6bb7, + 0xebf7, 0xec94, 0xec9b, 0xec91, 0x2c1f, 0x2c20, 0x5d7b, 0x6c7b, + 0xec9c, 0xec93, 0xecaa, 0x6ba7, 0xebf7, 0xec9d, 0xeb66, 0xebd8, + 0xeca7, 0xeca0, 0x6c00, 0xeca9, 0xeca4, 0x6bcb, 0xeca8, 0xebca, + 0xecac, 0xecbb, 0xecaf, 0xecad, 0x6b9d, 0xec76, 0xebbe, 0x6b89, + 0xecb7, 0xecb4, 0xecb1, 0xecb5, 0xecb2, 0xecb3, 0xecb8, 0xecae, + 0xecb0, 0xecb6, 0xecba, 0xec3a, 0x6ba7, 0x6bb7, 0xecc0, 0xeb8f, + 0xecab, 0xecca, 0x6bc7, 0xeca9, 0xecc8, 0xec97, 0xecc2, 0x6c28, + 0xecbd, 0xecc7, 0x6c0d, 0xecc5, 0x6c0c, 0xecc5, 0xecbe, 0x6c77, + 0xecc4, 0xecc6, 0xecc3, 0x6c2e, 0xecc1, 0xecd2, 0xecd1, 0xeccb, + 0xeca5, 0xeb73, 0x6c5e, 0xeccf, 0x6c08, 0xecce, 0xecd0, 0xeccd, + 0xec1b, 0xeca2, 0x6ccc, 0xef07, 0xecd3, 0xecd8, 0xeca6, 0xeca3, + 0x6bf5, 0xecb9, 0xecd7, 0xecdb, 0xecd4, 0xecc9, 0xecd9, 0xecd5, + 0x6cd6, 0x6f08, 0xef9e, 0xecdf, 0xecdd, 0xecdd, 0xecdc, 0xecde, + 0xec9f, 0xecbc, 0xec25, 0xec8e, 0xec99, 0xece3, 0xece1, 0xece2, + 0xecbf, 0xec9a, 0xeb63, 0xece0, 0x6b9d, 0x6bd7, 0xec9e, 0x6c10, + 0xecc4, 0x6b72, 0xec88, 0xeca1, 0x2c1f, 0x2c20, 0x5d7b, 0x6bae, + 0xec9c, 0xeb5a, 0xeb5b, 0xeb62, 0xeb77, 0xeb68, 0xeb6f, 0xeb74, + 0xeb7a, 0xeb81, 0xeb83, 0xeb8e, 0x6b72, 0xec78, 0xeb8b, 0xeb93, + 0xeb92, 0xeb8a, 0x56ab, 0xeb91, 0xec5f, 0xeb8d, 0xeb90, 0xebad, + 0xeb9a, 0xebb3, 0xebaa, 0xeb9e, 0xeba6, 0xec02, 0xeb9c, 0xec60, + 0xec6d, 0xebab, 0x2c1f, 0x2c20, 0x5d7b, 0x6bae, 0xec7b, 0xebba, + 0x6b9d, 0xec76, 0xec58, 0x6abe, 0xebc1, 0xec7a, 0xec31, 0xec39, + 0xebc9, 0xec23, 0xec37, 0xebc0, 0xebca, 0x6bc7, 0xec00, 0xebb6, + 0xebfd, 0xebd2, 0xebd6, 0xebea, 0xebd5, 0xebeb, 0xebe1, 0xebe4, + 0xebe7, 0xebdd, 0xebe2, 0xebf0, 0x6b89, 0xebdb, 0xebe8, 0xec3a, + 0xebf4, 0xebd4, 0xec5d, 0xec08, 0xec0f, 0xec68, 0xebf7, 0xec1b, + 0xec03, 0xec13, 0x6c10, 0xec77, 0x6c0c, 0xec0d, 0xec12, 0xec09, + 0xec01, 0xec42, 0xebff, 0xec20, 0x6c32, 0xef07, 0xec2d, 0xec28, + 0xec25, 0xec29, 0xec1f, 0xec1c, 0xec33, 0xec3e, 0x51a4, 0xec48, + 0x6c49, 0xef08, 0xec3b, 0xec35, 0xec45, 0xec3c, 0xec56, 0x6c53, + 0xec54, 0xec57, 0xec52, 0xec6f, 0xec64, 0xec67, 0xec63, 0x2c4c, + 0xee1f, 0x21eb, 0xecec, 0xee20, 0x66c1, 0xed08, 0xece7, 0xee24, + 0xa1e4, 0xee23, 0xee22, 0xe6c7, 0xee29, 0xee28, 0x66c1, 0xeceb, + 0x6d76, 0xee26, 0x6dd7, 0xee25, 0xee30, 0xee35, 0xee33, 0x6e1c, + 0xee32, 0xee2e, 0x6d44, 0xee31, 0xee2a, 0xee2f, 0xee2d, 0x53ba, + 0xedaf, 0xee38, 0xee39, 0xedc3, 0xee3b, 0xee3f, 0xedfa, 0xee3d, + 0xee3a, 0xee3c, 0xed1f, 0xee40, 0xee43, 0xee46, 0xee41, 0xedaa, + 0xee48, 0x6d5e, 0xee45, 0x6d5d, 0xee45, 0xee44, 0xee49, 0xee4c, + 0xee4f, 0xee50, 0xee4e, 0xe6d5, 0xee4a, 0x6d09, 0xee26, 0xee53, + 0x6da4, 0xee4d, 0x6dab, 0xee2b, 0xee51, 0xee52, 0x66de, 0x6dc4, + 0xee21, 0xee4b, 0xee59, 0xee55, 0xee57, 0xee56, 0xed7e, 0xee5b, + 0xee5c, 0xed59, 0x6d87, 0xee2b, 0xee27, 0x53ba, 0xed2c, 0xee5f, + 0x2bc9, 0x66ba, 0x674d, 0x674e, 0x674f, 0x6e16, 0xee64, 0xe6db, + 0xee60, 0xee61, 0xee58, 0xee63, 0xee5a, 0xee5a, 0xee62, 0xee5e, + 0xed33, 0x66de, 0x6d8f, 0xee21, 0xedcf, 0xedc9, 0xedc8, 0xee5d, + 0xedc6, 0xee67, 0xee65, 0x6d0e, 0xee25, 0xee37, 0xee68, 0xee36, + 0xee6a, 0xee54, 0xee69, 0xc1d5, 0xee6b, 0x6df4, 0xee47, 0x6df3, + 0xee47, 0xee6c, 0xee70, 0x6d3c, 0xee6d, 0xee34, 0xee0a, 0xee6f, + 0xedff, 0xee71, 0xd3ba, 0xee72, 0x6871, 0x6ad7, 0xee2c, 0x2bc9, + 0x66ba, 0x674d, 0x674e, 0x674f, 0x6db4, 0xee64, 0xee74, 0xee66, + 0x66da, 0xee73, 0xed1d, 0xee42, 0xee3e, 0x2c4c, 0xece5, 0xece9, + 0x66de, 0x6d8f, 0xedc4, 0xecf6, 0xecf4, 0xecf2, 0x6d0e, 0xedd7, + 0x6d09, 0xed76, 0xedac, 0xed07, 0xed06, 0xed23, 0x6d87, 0xedab, + 0xee15, 0xed28, 0xed1e, 0xed26, 0xed12, 0xed1f, 0xed1d, 0xed1b, + 0xedfd, 0xed15, 0xede5, 0xedd9, 0xed2f, 0xed30, 0xed42, 0xed34, + 0xed43, 0xed3f, 0xee1e, 0xed3b, 0xed50, 0xed53, 0xee1d, 0xed51, + 0xed60, 0x6d5d, 0xed5e, 0xed52, 0x6df3, 0xedf4, 0xed5c, 0xed61, + 0xed72, 0xed93, 0xed6a, 0xed7e, 0xed6f, 0xed6c, 0xed6e, 0xed89, + 0xed8a, 0xed77, 0xedeb, 0xed98, 0xeda1, 0xed9a, 0xedbb, 0xed96, + 0x6dbf, 0xedc0, 0xeda5, 0xeda9, 0xedca, 0xedc2, 0xedb2, 0xedb9, + 0xedba, 0xedc1, 0xedbc, 0x2bc9, 0x66ba, 0x674d, 0x674e, 0x674f, + 0x6db4, 0xee16, 0xedd6, 0xee1a, 0xedd3, 0xedda, 0xedef, 0xede6, + 0xedf2, 0xedf8, 0xedfa, 0xee07, 0xedf9, 0xee0c, 0xee0f, 0xee1b, + 0xee18, 0x2364, 0xa877, 0x4877, 0x48b1, 0xee7c, 0x24b8, 0xe18e, + 0xee7e, 0xc877, 0x4877, 0x48b1, 0xee78, 0x2869, 0xc6d0, 0xee7a, + 0xee85, 0xeea4, 0xee83, 0xee8f, 0xee87, 0x1e3d, 0xaa6f, 0xc350, + 0x4c97, 0xee84, 0xeea6, 0xeea5, 0x6eac, 0xeeb8, 0x4cc6, 0x6762, + 0x6eab, 0x6eb5, 0xeeba, 0x4cc6, 0x6762, 0x6eaa, 0x6eb5, 0xeeba, + 0x6ea9, 0xeeb8, 0xa305, 0x36f2, 0x4cac, 0x6eb4, 0xeeb9, 0x36f2, + 0x4cac, 0x6eaf, 0xeeb9, 0x4cc6, 0x6762, 0x6eaa, 0x6eab, 0xeeba, + 0x6ea9, 0xeeac, 0x36f2, 0x4cac, 0x6eaf, 0xeeb4, 0x4cc6, 0x6762, + 0x6eaa, 0x6eab, 0xeeb5, 0x45f2, 0x45f3, 0xd534, 0x1e48, 0x2c1b, + 0x2e85, 0xeebd, 0x1e48, 0x2c1b, 0x2e85, 0xeebc, 0xeec4, 0x48fa, + 0xeec3, 0xeecc, 0xeec9, 0xcc98, 0xeed2, 0xeed1, 0xeed9, 0xeed8, + 0xeef1, 0x294c, 0xc0b9, 0xeef6, 0xeeed, 0xa15a, 0xeef7, 0xeef2, + 0xeee4, 0xeedb, 0xeeea, 0xe709, 0xeee1, 0xeee9, 0xd8ae, 0xeefe, + 0xeefd, 0x6b6d, 0xef0b, 0xef0c, 0xd6d9, 0x6c32, 0xeccc, 0x6c49, + 0x6cd6, 0xef9e, 0xef0d, 0xeeff, 0xef02, 0xef09, 0xef11, 0xef0e, + 0xe3a1, 0x46b7, 0xc6bc, 0xa1ac, 0x6780, 0xe789, 0xef21, 0xef20, + 0xdc82, 0xef39, 0xef34, 0xa5c5, 0x1e9d, 0x3589, 0x358a, 0xef50, + 0x358b, 0xb58e, 0x5cf7, 0xdd4d, 0x67f2, 0xef51, 0x1e9d, 0x3589, + 0x358a, 0xef4a, 0x67f2, 0xef4f, 0x3b6f, 0xef7f, 0xef54, 0x6f53, + 0xef80, 0xef81, 0xef82, 0xef85, 0xef70, 0xef87, 0xef83, 0xef86, + 0x6f62, 0xef84, 0x6f61, 0xef84, 0xa1fa, 0xef88, 0x256e, 0x2699, + 0xa6d3, 0xa4ac, 0x6f71, 0xef8a, 0xef89, 0xef5a, 0xef6a, 0xef8b, + 0xd16d, 0xef8c, 0x3b6f, 0xef52, 0xef54, 0xef55, 0xef57, 0xef5f, + 0x6f61, 0xef62, 0xef59, 0xef60, 0xef5c, 0xef66, 0xef6c, 0xef6a, + 0xef72, 0xef77, 0x4adc, 0x6f92, 0xef99, 0xa390, 0xae9e, 0x4adc, + 0x6f8d, 0xef99, 0xef9a, 0xef9b, 0x6f8d, 0xef92, 0xef94, 0xef95, + 0x1e80, 0xef9f, 0x49cb, 0x49cc, 0xca50, 0x6c49, 0xef08, 0x1e80, + 0xef9c, 0x248a, 0x248c, 0xb0d2, 0x2401, 0xcc72, +}; + +static const short cjk_variants_indx[0x5200] = { + /* 0x4e00 */ + 4, -1, -1, -1, 5, 6, -1, 7, + -1, 8, 10, 11, 12, -1, 13, -1, + 14, 16, 19, 20, -1, -1, 22, 24, + 26, -1, 28, 29, 33, 34, -1, 36, + 38, 40, 42, 44, 45, 47, 49, 52, + -1, -1, 53, 56, 59, -1, -1, -1, + 60, -1, 66, 67, 68, -1, -1, -1, + -1, -1, 69, -1, -1, 71, 73, -1, + -1, 76, 77, 79, 81, 83, 85, -1, + 87, 92, -1, -1, 93, -1, -1, -1, + 94, 96, -1, -1, 100, 101, -1, 103, + 105, -1, 107, -1, -1, -1, -1, -1, + 110, 111, -1, -1, -1, -1, 115, -1, + 116, -1, -1, -1, -1, -1, -1, -1, + 118, 119, -1, -1, -1, -1, -1, -1, + -1, 121, -1, -1, -1, -1, 124, -1, + 128, 130, 133, -1, -1, -1, 135, -1, + 137, 138, 139, 141, 143, -1, 144, 147, + 151, 153, -1, -1, 155, -1, 156, 157, + 161, 162, 163, -1, 165, 167, 171, 173, + -1, 174, -1, -1, -1, -1, -1, 176, + -1, 178, -1, 182, 183, -1, -1, 184, + 185, 186, 187, -1, -1, 188, -1, -1, + 189, -1, 190, 191, -1, -1, 192, 194, + -1, 195, 196, -1, -1, 199, 201, 202, + -1, 203, -1, -1, 204, -1, 207, 209, + 210, 212, -1, 215, -1, -1, -1, -1, + 217, 218, -1, -1, -1, 220, 221, -1, + -1, -1, 222, -1, -1, -1, -1, 223, + -1, -1, 227, -1, 228, 229, 230, -1, + -1, -1, -1, -1, -1, -1, -1, 232, + -1, -1, 234, -1, 236, 237, 239, 240, + /* 0x4f00 */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 245, -1, -1, -1, -1, -1, 247, 248, + 251, 252, 253, 254, 255, 256, 259, 262, + 263, 265, -1, 266, 267, 268, 269, 270, + -1, -1, 271, 273, -1, -1, 275, -1, + -1, 276, 279, -1, -1, 282, -1, 283, + -1, -1, -1, -1, 284, -1, -1, -1, + 285, -1, 286, -1, -1, -1, -1, 287, + 288, -1, -1, -1, -1, -1, 289, -1, + -1, -1, -1, 290, 295, -1, -1, -1, + -1, 296, -1, 298, 301, -1, 302, -1, + 303, -1, -1, 307, -1, 308, -1, -1, + -1, -1, 309, -1, -1, -1, -1, -1, + -1, 310, -1, -1, -1, 312, -1, 314, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 315, 316, -1, 318, -1, + -1, -1, -1, -1, 319, -1, 323, -1, + 324, -1, -1, -1, -1, -1, 325, -1, + -1, -1, -1, -1, -1, -1, -1, 326, + 328, 329, -1, 331, -1, 332, 333, 335, + 336, 337, 338, 339, 340, 341, -1, 343, + -1, -1, -1, -1, -1, -1, 344, 345, + -1, -1, -1, -1, -1, 346, -1, -1, + -1, 347, 348, -1, -1, -1, -1, 349, + -1, -1, 350, -1, 351, -1, 352, -1, + -1, -1, -1, -1, 353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 355, 356, + 357, 358, 359, 360, -1, 361, 362, -1, + 363, 364, 365, 366, -1, 367, 369, -1, + -1, 371, 372, -1, -1, -1, -1, -1, + -1, -1, -1, 374, 378, 380, -1, -1, + /* 0x5000 */ + 382, -1, 383, 385, -1, 388, 389, -1, + 390, 391, 393, 394, -1, -1, 397, 398, + 399, 400, -1, -1, -1, -1, 401, -1, + -1, -1, -1, -1, -1, -1, 402, 403, + -1, -1, -1, 405, 407, -1, 408, -1, + -1, -1, -1, 410, -1, -1, -1, -1, + -1, -1, -1, 411, -1, -1, 412, -1, + -1, 413, 415, -1, 416, -1, 417, -1, + 418, -1, -1, -1, -1, -1, 419, 420, + -1, 421, -1, -1, -1, -1, -1, -1, + 422, -1, -1, -1, -1, -1, -1, -1, + 425, 426, 427, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 428, -1, -1, + -1, -1, 429, -1, 430, -1, -1, -1, + -1, -1, -1, -1, 432, 433, -1, 435, + 436, 437, 441, 444, -1, 445, 447, 448, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 449, 452, -1, -1, + -1, 453, -1, -1, -1, -1, 454, -1, + 455, 458, 462, -1, 464, -1, -1, -1, + 465, 467, 470, -1, 471, 472, -1, 473, + 474, 475, -1, -1, -1, 476, -1, 477, + -1, -1, -1, 478, 480, 481, -1, 482, + -1, 483, -1, -1, -1, -1, 484, -1, + 485, -1, 486, 487, 491, 492, -1, -1, + -1, 493, 494, -1, -1, 495, -1, -1, + -1, 498, -1, -1, -1, 499, -1, -1, + 500, -1, -1, -1, 501, -1, 502, 504, + -1, -1, -1, 505, -1, 506, -1, -1, + 507, 508, -1, 509, -1, 512, -1, -1, + -1, 513, 514, -1, 515, -1, -1, -1, + -1, 516, -1, -1, -1, -1, -1, -1, + /* 0x5100 */ + 518, 519, 520, -1, 521, -1, -1, -1, + 522, 523, -1, -1, -1, -1, 525, -1, + 526, -1, -1, -1, 527, 528, -1, -1, + 529, -1, -1, -1, -1, -1, 531, 534, + -1, -1, -1, -1, -1, -1, -1, 535, + -1, -1, 536, -1, -1, -1, -1, -1, + -1, -1, 537, -1, -1, -1, -1, 538, + -1, 539, 540, 541, 542, -1, -1, 543, + -1, -1, 545, -1, -1, -1, -1, 546, + -1, 547, 549, 551, 554, -1, 556, 557, + 561, 563, 565, -1, 567, -1, 568, 569, + 570, -1, 572, -1, 573, -1, -1, -1, + 574, -1, -1, -1, 575, -1, 576, 578, + -1, 579, 581, -1, -1, -1, -1, -1, + 582, -1, 583, 586, 591, -1, 592, -1, + -1, 593, -1, 595, -1, 597, 599, -1, + 600, 601, 602, 603, 604, 605, 606, -1, + 609, 610, 611, 613, 614, -1, 616, 618, + 619, 620, 621, -1, -1, -1, -1, 622, + -1, 623, -1, 625, 626, 627, -1, -1, + -1, -1, 629, 630, 631, -1, 632, -1, + 634, 635, 637, 639, 642, -1, -1, 644, + 645, 648, 649, 651, 652, 653, -1, -1, + -1, -1, 654, 655, -1, 656, -1, -1, + 657, -1, 659, 660, 661, 664, 665, -1, + 667, 668, -1, -1, -1, 669, -1, 670, + -1, 671, 672, 673, -1, -1, 674, -1, + -1, -1, -1, 676, 678, -1, 680, -1, + 684, 686, 688, 690, 692, 693, 694, -1, + 696, -1, -1, 701, 702, 707, 710, 715, + -1, 716, 717, 722, 723, -1, 726, 727, + -1, -1, 730, 732, -1, 734, 735, 736, + /* 0x5200 */ + 737, -1, 739, 741, 742, 743, -1, -1, + 745, -1, 747, -1, -1, 748, -1, -1, + -1, -1, 749, 752, 753, -1, -1, -1, + 754, 755, 756, 757, -1, -1, -1, -1, + 762, -1, -1, -1, -1, 763, 764, 767, + 770, -1, 773, 774, 776, 780, 781, -1, + -1, 782, -1, -1, 786, -1, 787, -1, + -1, 788, 789, -1, 790, 793, 794, 795, + 796, 797, 798, 800, 801, -1, -1, 802, + -1, -1, -1, 803, 806, 807, 808, 809, + 813, 815, -1, -1, -1, -1, -1, 823, + -1, 827, 831, 832, -1, 833, -1, -1, + -1, -1, -1, 834, 842, 844, 845, 847, + -1, 848, -1, -1, -1, -1, 849, -1, + 852, 853, -1, 861, 862, 863, -1, 868, + -1, 872, -1, -1, -1, -1, -1, 873, + -1, -1, -1, 874, 877, -1, -1, 878, + -1, 879, 880, -1, 881, 882, 890, -1, + 898, 901, 903, -1, 911, 919, -1, -1, + -1, -1, -1, -1, -1, 921, 923, 924, + -1, 926, 927, -1, -1, -1, -1, -1, + 928, -1, 931, 932, -1, -1, -1, -1, + -1, 935, 936, 937, 940, 943, -1, -1, + -1, 945, -1, -1, -1, -1, -1, 946, + -1, 947, -1, -1, 948, 949, -1, 951, + 952, -1, 953, 956, 959, -1, -1, -1, + -1, 961, -1, -1, -1, 965, 968, 970, + -1, 972, 973, 974, -1, 977, 978, -1, + 981, -1, 982, -1, 983, -1, 984, 985, + -1, 987, -1, -1, -1, -1, -1, -1, + -1, 988, 989, 992, -1, 995, -1, -1, + 996, -1, -1, 998, -1, -1, -1, -1, + /* 0x5300 */ + 999, -1, -1, 1000, 1002, 1004, 1005, -1, + -1, -1, 1008, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 1009, -1, 1011, 1012, -1, 1014, 1016, -1, + 1017, 1018, -1, -1, -1, -1, 1019, 1020, + 1021, 1023, -1, -1, -1, 1024, 1025, 1026, + -1, 1028, 1029, 1032, -1, -1, -1, -1, + 1035, -1, 1036, 1037, -1, -1, -1, -1, + 1039, -1, -1, 1040, -1, -1, 1041, 1042, + -1, 1046, -1, 1047, -1, 1049, 1050, 1053, + 1056, -1, 1057, 1058, 1060, 1063, 1065, -1, + 1067, -1, 1069, 1070, 1071, -1, -1, -1, + 1073, -1, 1074, -1, 1075, 1082, -1, 1084, + -1, -1, -1, 1085, -1, -1, 1087, 1088, + 1090, -1, -1, 1091, 1093, -1, -1, 1094, + 1096, 1097, -1, 1099, -1, 1100, -1, -1, + -1, -1, 1102, -1, 1105, 1106, 1108, 1114, + 1115, 1116, -1, 1117, 1119, 1120, 1121, -1, + 1122, -1, -1, 1123, -1, 1124, -1, -1, + 1126, 1130, 1131, 1132, -1, -1, -1, 1133, + 1134, 1136, 1137, 1138, 1139, -1, 1141, -1, + 1142, 1143, -1, -1, -1, 1145, 1146, 1147, + 1152, -1, 1154, 1155, 1157, 1158, 1159, 1160, + 1161, -1, 1164, 1165, -1, -1, 1166, 1168, + -1, 1170, 1172, 1175, 1178, 1181, 1184, 1185, + 1186, 1187, 1188, -1, 1189, 1190, 1193, 1194, + 1195, 1196, -1, 1200, -1, 1202, -1, -1, + 1203, 1205, -1, 1207, -1, -1, 1209, -1, + 1210, 1214, 1216, -1, -1, -1, -1, 1220, + -1, -1, 1223, 1226, -1, -1, -1, -1, + 1227, -1, -1, -1, -1, -1, 1232, 1236, + -1, 1237, -1, -1, -1, 1240, -1, -1, + /* 0x5400 */ + 1241, 1243, -1, 1245, -1, -1, -1, -1, + 1247, -1, 1248, -1, 1249, -1, 1251, -1, + -1, 1252, -1, 1254, -1, 1255, -1, 1256, + -1, -1, -1, -1, -1, 1257, 1258, 1259, + -1, -1, -1, -1, -1, -1, -1, -1, + 1262, -1, -1, -1, 1263, -1, -1, 1265, + -1, -1, -1, 1271, 1273, -1, 1275, -1, + -1, -1, -1, 1276, -1, 1277, -1, 1278, + -1, -1, 1279, -1, -1, -1, -1, -1, + 1280, 1282, 1284, -1, 1285, 1286, -1, -1, + 1287, 1288, 1289, 1290, -1, 1291, 1292, 1293, + 1294, 1297, 1299, 1300, 1301, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1302, + 1303, 1304, 1305, -1, -1, 1307, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1308, -1, -1, -1, + -1, -1, -1, -1, -1, 1311, -1, -1, + -1, -1, 1312, -1, 1315, -1, -1, 1318, + -1, -1, 1319, -1, -1, -1, -1, -1, + -1, 1321, -1, 1322, 1323, 1324, -1, -1, + -1, -1, -1, -1, 1325, -1, -1, -1, + -1, 1326, -1, -1, 1328, -1, -1, 1329, + -1, 1331, 1334, -1, -1, -1, -1, -1, + 1336, -1, -1, -1, 1338, 1340, -1, -1, + -1, -1, -1, -1, 1341, -1, -1, -1, + -1, -1, -1, -1, -1, 1343, -1, -1, + -1, 1344, 1348, 1349, 1350, 1351, -1, 1352, + -1, 1354, -1, -1, 1355, 1356, -1, 1357, + -1, 1358, -1, 1361, -1, -1, -1, -1, + -1, -1, -1, -1, 1362, -1, -1, -1, + -1, -1, 1363, -1, -1, -1, 1368, -1, + -1, -1, 1370, -1, -1, -1, -1, -1, + /* 0x5500 */ + 1371, -1, -1, -1, 1373, -1, -1, 1374, + -1, -1, -1, -1, -1, 1375, -1, -1, + 1376, -1, -1, -1, -1, 1377, 1378, -1, + 1382, -1, -1, 1388, -1, 1389, -1, -1, + 1390, -1, 1391, 1392, 1393, -1, -1, 1394, + -1, -1, -1, 1395, -1, -1, -1, -1, + -1, 1396, -1, -1, -1, -1, -1, -1, + 1397, -1, -1, -1, -1, -1, -1, -1, + 1398, -1, -1, -1, -1, -1, 1399, -1, + -1, -1, -1, -1, -1, -1, -1, 1400, + -1, -1, -1, 1401, 1407, -1, 1413, 1414, + -1, -1, -1, -1, -1, -1, 1415, 1419, + 1425, -1, -1, 1430, -1, -1, -1, 1433, + -1, -1, -1, -1, 1434, 1435, 1436, 1440, + 1441, -1, -1, -1, 1443, -1, -1, -1, + 1444, -1, 1445, -1, -1, -1, -1, -1, + 1446, -1, 1448, -1, 1450, -1, 1451, -1, + -1, -1, -1, -1, -1, -1, 1456, -1, + -1, 1458, 1460, -1, -1, -1, -1, -1, + -1, -1, 1463, -1, 1464, -1, 1467, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1468, 1469, 1470, 1472, -1, 1473, 1475, + 1477, -1, 1480, -1, -1, -1, 1481, 1483, + -1, -1, -1, 1485, -1, 1486, 1487, -1, + -1, -1, -1, -1, -1, 1488, 1489, 1490, + -1, -1, 1491, -1, -1, -1, 1492, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1493, -1, 1494, -1, -1, -1, + 1495, -1, -1, 1496, -1, 1497, -1, -1, + -1, 1498, -1, 1499, -1, -1, -1, -1, + -1, -1, -1, 1500, -1, -1, 1501, -1, + -1, 1502, -1, -1, -1, -1, -1, -1, + /* 0x5600 */ + -1, -1, -1, -1, -1, -1, 1503, -1, + -1, -1, 1505, -1, -1, 1506, -1, -1, + -1, 1507, -1, 1509, 1510, -1, 1511, 1512, + 1515, -1, -1, -1, 1516, -1, -1, -1, + -1, -1, -1, -1, 1517, -1, -1, -1, + 1518, 1519, -1, -1, -1, -1, 1521, 1522, + 1524, 1525, -1, -1, -1, 1526, -1, 1527, + 1528, -1, -1, -1, -1, 1529, -1, -1, + -1, 1530, 1531, -1, 1532, 1534, -1, -1, + -1, 1535, -1, -1, -1, -1, -1, -1, + 1537, -1, -1, 1538, -1, 1539, 1540, -1, + -1, -1, -1, 1542, 1544, 1545, -1, -1, + 1546, 1547, -1, -1, -1, 1548, 1549, -1, + 1550, -1, 1551, -1, -1, -1, -1, 1552, + -1, -1, 1553, -1, 1554, 1556, -1, -1, + 1559, 1560, -1, -1, -1, -1, 1561, -1, + 1562, -1, -1, -1, -1, -1, -1, 1563, + -1, -1, -1, -1, 1564, -1, -1, 1565, + 1566, -1, -1, -1, 1569, 1570, -1, -1, + -1, 1571, -1, -1, -1, -1, 1575, -1, + 1580, -1, 1581, 1582, -1, 1583, 1584, -1, + 1585, -1, -1, -1, -1, -1, 1586, -1, + -1, -1, 1587, 1588, 1589, -1, 1591, -1, + -1, -1, -1, 1592, -1, -1, -1, -1, + 1593, 1594, 1595, -1, -1, 1597, -1, -1, + 1598, 1599, 1601, -1, 1602, -1, -1, 1603, + -1, 1604, -1, 1605, -1, -1, -1, 1608, + 1611, 1617, -1, 1618, -1, -1, 1619, 1625, + 1626, -1, 1627, 1630, -1, -1, 1633, 1636, + -1, -1, 1637, -1, 1638, 1644, -1, 1647, + 1652, 1653, 1654, 1657, 1660, 1663, 1664, -1, + 1669, -1, -1, 1670, -1, 1675, 1680, -1, + /* 0x5700 */ + 1683, -1, -1, 1688, -1, -1, 1689, 1692, + 1693, -1, -1, 1694, -1, 1699, 1702, 1705, + -1, 1706, 1707, 1709, -1, -1, 1712, 1715, + 1718, -1, -1, -1, -1, 1720, -1, 1722, + -1, 1723, 1724, 1726, -1, -1, -1, 1727, + 1729, -1, -1, -1, 1730, 1731, -1, -1, + 1732, -1, -1, -1, -1, -1, -1, -1, + -1, 1735, 1736, -1, -1, 1738, -1, -1, + 1742, -1, 1743, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1745, + 1749, 1750, -1, 1751, 1752, -1, -1, 1755, + -1, 1758, 1759, 1760, 1766, 1767, 1769, 1771, + 1773, -1, -1, 1775, 1776, -1, 1777, 1778, + 1779, -1, -1, -1, -1, 1781, 1782, 1784, + 1786, -1, -1, 1787, -1, 1788, -1, -1, + 1790, -1, 1791, -1, -1, -1, -1, -1, + -1, -1, 1792, -1, 1793, 1794, 1795, 1796, + -1, -1, -1, 1797, -1, -1, -1, -1, + -1, -1, 1798, 1800, 1801, 1802, 1803, -1, + -1, -1, 1804, 1807, 1808, -1, -1, -1, + -1, 1809, 1810, -1, -1, -1, 1811, 1812, + 1813, 1814, -1, 1816, -1, 1817, -1, 1818, + -1, 1819, 1820, -1, 1821, -1, -1, -1, + -1, -1, -1, 1822, -1, -1, -1, -1, + 1824, -1, -1, -1, -1, -1, 1825, -1, + 1826, -1, 1827, -1, -1, -1, -1, -1, + -1, 1830, 1835, 1836, -1, -1, -1, -1, + 1837, 1838, 1840, -1, 1841, -1, 1843, -1, + -1, 1845, -1, -1, -1, -1, 1846, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1847, + -1, -1, -1, -1, 1848, 1851, -1, -1, + /* 0x5800 */ + -1, -1, 1852, 1853, -1, 1854, 1855, 1856, + -1, -1, 1857, -1, -1, -1, -1, -1, + -1, 1858, -1, -1, -1, 1859, 1861, -1, + -1, 1862, -1, -1, -1, 1863, -1, -1, + -1, -1, -1, -1, 1864, -1, 1866, -1, + -1, -1, -1, -1, -1, -1, -1, 1868, + 1871, 1873, -1, -1, 1874, -1, -1, -1, + -1, -1, 1876, -1, -1, -1, -1, -1, + -1, 1878, -1, -1, -1, -1, 1880, -1, + -1, -1, 1881, 1884, -1, 1885, -1, 1886, + 1887, 1888, 1889, -1, 1890, -1, -1, 1891, + -1, 1892, 1893, -1, -1, -1, -1, 1894, + -1, 1895, 1896, -1, 1897, -1, 1899, -1, + -1, 1900, -1, 1902, -1, -1, -1, -1, + -1, -1, 1903, -1, -1, 1905, -1, 1906, + -1, 1908, -1, -1, 1910, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1913, 1914, -1, 1915, -1, -1, -1, + -1, -1, -1, -1, -1, 1916, 1918, 1919, + -1, 1920, -1, -1, 1922, -1, 1924, -1, + -1, -1, 1925, -1, 1927, -1, -1, 1930, + -1, -1, -1, -1, -1, -1, 1931, 1933, + 1935, -1, -1, 1940, -1, 1942, 1947, -1, + 1948, -1, -1, 1949, -1, -1, 1950, -1, + -1, -1, -1, -1, 1951, -1, -1, 1953, + -1, -1, 1954, 1956, 1957, 1958, 1959, -1, + 1961, -1, -1, 1962, -1, -1, -1, -1, + 1964, 1966, 1967, -1, 1968, -1, 1973, 1975, + 1976, 1977, 1979, -1, 1980, 1981, -1, -1, + -1, 1984, 1986, -1, -1, -1, 1987, 1989, + 1991, 1992, 1993, 1995, -1, 1997, 1999, 2001, + 2003, 2004, 2005, 2007, 2009, 2010, -1, -1, + /* 0x5900 */ + 2012, -1, 2014, -1, 2015, 2017, -1, 2018, + -1, 2022, 2024, -1, -1, 2025, -1, 2028, + -1, -1, -1, 2029, 2030, -1, -1, -1, + 2031, -1, 2033, 2034, 2035, -1, -1, 2036, + 2037, -1, 2038, 2040, -1, 2042, -1, -1, + -1, 2043, -1, -1, 2046, 2047, -1, -1, + -1, -1, 2048, 2050, 2051, -1, 2052, -1, + 2053, 2054, 2055, -1, -1, -1, 2056, -1, + -1, 2057, 2060, -1, -1, -1, -1, 2061, + 2062, -1, -1, 2063, 2064, -1, -1, -1, + 2065, -1, -1, -1, 2066, -1, 2068, -1, + 2071, 2072, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2073, -1, 2075, + 2077, 2080, 2083, -1, 2084, -1, 2087, -1, + -1, -1, -1, -1, -1, -1, 2088, -1, + 2090, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2092, 2096, + 2098, -1, 2099, -1, -1, 2100, -1, -1, + -1, -1, 2102, -1, -1, -1, 2103, -1, + -1, 2104, -1, 2105, -1, 2106, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2110, 2111, 2112, 2114, -1, -1, -1, + -1, -1, -1, 2115, -1, -1, -1, 2118, + 2120, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2122, -1, + -1, 2123, 2124, 2125, -1, 2127, -1, -1, + 2128, -1, 2129, -1, -1, -1, -1, 2130, + -1, 2131, -1, -1, 2132, -1, -1, -1, + -1, -1, 2133, -1, -1, -1, 2134, 2136, + -1, -1, 2138, 2140, 2141, -1, 2142, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2143, -1, -1, 2145, -1, -1, -1, -1, + /* 0x5a00 */ + -1, -1, -1, -1, 2146, 2147, 2148, 2149, + 2150, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2151, -1, -1, -1, -1, -1, + 2152, -1, -1, 2154, -1, -1, -1, 2156, + -1, -1, -1, -1, 2157, -1, 2161, -1, + -1, -1, -1, -1, -1, 2162, -1, 2163, + 2165, 2166, 2168, -1, 2169, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2171, + 2173, 2176, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2177, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2178, -1, -1, 2179, -1, + -1, -1, -1, -1, 2181, 2182, -1, 2183, + -1, -1, -1, 2185, 2186, 2189, 2190, -1, + -1, -1, -1, -1, -1, -1, -1, 2191, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2193, 2195, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2196, + -1, -1, 2197, -1, -1, 2198, -1, 2199, + -1, -1, -1, -1, -1, -1, -1, -1, + 2201, -1, -1, -1, 2202, 2203, -1, 2204, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2206, -1, -1, -1, -1, + 2208, -1, 2209, -1, 2210, -1, -1, 2211, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2212, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2213, -1, -1, -1, 2214, 2215, -1, + -1, -1, 2217, 2219, -1, -1, -1, 2221, + /* 0x5b00 */ + 2222, -1, -1, 2224, -1, -1, -1, -1, + 2225, 2226, -1, 2227, 2228, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2229, -1, -1, -1, 2230, -1, -1, + -1, 2232, 2233, -1, 2235, -1, -1, -1, + -1, -1, 2236, -1, -1, 2238, -1, -1, + 2240, -1, 2243, -1, -1, -1, -1, 2244, + 2245, -1, -1, -1, -1, -1, 2246, -1, + -1, -1, -1, 2247, -1, -1, 2249, -1, + -1, -1, -1, -1, 2252, -1, -1, -1, + -1, -1, 2253, 2254, -1, -1, -1, -1, + -1, 2255, -1, -1, -1, -1, -1, -1, + 2256, -1, -1, -1, -1, -1, 2257, -1, + -1, -1, 2262, 2263, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2264, -1, -1, -1, 2269, 2270, 2271, 2274, + -1, 2275, 2281, 2282, -1, -1, 2285, -1, + 2286, -1, 2287, -1, -1, 2288, -1, -1, + 2289, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2291, 2293, 2297, 2299, + 2301, 2302, -1, -1, -1, -1, -1, -1, + -1, 2304, 2305, 2306, -1, -1, 2307, -1, + -1, -1, -1, -1, 2308, -1, 2310, 2311, + -1, -1, -1, 2313, 2314, 2316, 2318, -1, + 2320, -1, -1, 2321, -1, -1, 2322, 2323, + 2325, 2327, -1, -1, 2334, 2335, -1, -1, + -1, -1, -1, 2341, -1, 2342, -1, 2348, + -1, -1, 2354, 2358, 2360, 2366, -1, 2367, + 2368, -1, 2370, -1, -1, -1, 2371, 2373, + -1, 2379, -1, 2381, 2383, -1, -1, -1, + -1, -1, -1, 2385, -1, 2389, 2390, -1, + -1, 2394, -1, 2396, 2397, -1, 2398, 2400, + /* 0x5c00 */ + -1, -1, 2402, -1, -1, 2404, 2407, 2408, + 2409, 2411, -1, 2412, -1, 2413, 2415, -1, + -1, -1, 2416, 2419, 2422, -1, -1, -1, + 2425, 2426, 2427, 2428, -1, 2432, 2435, 2436, + 2441, -1, 2446, 2449, 2450, 2452, 2453, 2454, + -1, 2457, -1, 2458, 2459, 2460, -1, -1, + -1, -1, 2463, -1, 2468, -1, 2473, 2478, + 2483, -1, -1, -1, -1, 2484, -1, -1, + 2487, -1, 2489, 2490, -1, 2491, 2492, -1, + -1, -1, 2493, -1, 2494, 2496, 2497, 2498, + -1, -1, -1, 2500, -1, -1, -1, -1, + -1, -1, -1, 2501, -1, -1, 2503, -1, + -1, 2504, 2505, -1, 2506, -1, 2507, -1, + 2508, -1, -1, -1, 2509, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2510, + 2511, 2512, 2516, -1, -1, 2517, -1, -1, + 2519, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2520, 2521, + 2522, -1, 2523, 2524, -1, -1, -1, -1, + -1, 2531, -1, -1, -1, -1, -1, -1, + -1, 2532, -1, -1, -1, 2538, -1, -1, + -1, -1, -1, 2539, 2540, -1, -1, -1, + -1, -1, -1, -1, -1, 2541, -1, 2542, + -1, -1, -1, 2543, 2544, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2545, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2546, -1, -1, + -1, 2547, -1, 2548, 2549, 2550, 2551, -1, + 2552, 2553, -1, -1, -1, -1, -1, 2554, + 2555, -1, -1, -1, 2556, 2557, 2560, -1, + -1, -1, -1, -1, -1, 2567, -1, -1, + /* 0x5d00 */ + -1, -1, 2568, 2569, 2570, -1, -1, 2571, + 2572, -1, -1, 2573, -1, 2575, 2576, -1, + -1, -1, -1, -1, -1, -1, 2579, 2580, + 2581, 2583, -1, -1, -1, -1, -1, -1, + -1, -1, 2585, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2586, 2587, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2589, -1, -1, -1, + 2590, -1, 2591, 2594, -1, -1, -1, 2597, + 2601, -1, 2604, -1, 2605, 2608, -1, -1, + 2609, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2611, + -1, -1, -1, 2612, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2613, -1, 2614, 2615, -1, -1, 2616, + -1, -1, -1, 2618, 2625, -1, -1, -1, + -1, -1, -1, -1, 2632, -1, -1, 2633, + -1, -1, -1, -1, -1, -1, -1, -1, + 2634, -1, 2635, -1, -1, -1, -1, 2636, + 2637, -1, -1, -1, -1, -1, 2638, -1, + -1, -1, 2639, 2640, 2643, -1, -1, -1, + 2645, 2648, 2655, -1, 2656, 2657, -1, -1, + -1, -1, -1, -1, -1, 2658, 2660, -1, + -1, -1, -1, 2663, 2664, -1, -1, -1, + -1, -1, 2667, 2668, 2669, -1, 2670, 2673, + -1, -1, -1, 2676, -1, 2677, -1, -1, + 2678, -1, 2679, 2680, -1, -1, -1, -1, + -1, 2681, -1, -1, -1, -1, -1, 2682, + 2683, -1, -1, -1, -1, 2684, -1, 2685, + -1, -1, 2686, 2687, -1, 2689, -1, 2690, + /* 0x5e00 */ + 2692, 2694, -1, 2697, -1, 2698, -1, -1, + 2699, -1, -1, 2700, -1, -1, -1, 2701, + 2702, 2703, 2704, -1, -1, 2705, -1, -1, + 2706, -1, 2707, -1, 2708, -1, -1, -1, + -1, -1, -1, -1, -1, 2710, 2711, 2713, + -1, -1, -1, 2714, -1, 2715, 2716, 2719, + 2721, 2724, -1, 2725, -1, -1, 2726, -1, + -1, -1, -1, 2728, 2729, 2730, -1, -1, + 2731, -1, 2732, 2734, -1, -1, -1, 2735, + 2738, -1, -1, -1, 2740, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2741, + 2742, -1, 2743, -1, -1, -1, -1, 2746, + -1, 2748, -1, 2749, 2751, -1, -1, -1, + -1, -1, -1, 2753, 2756, -1, -1, -1, + -1, -1, 2757, -1, 2760, -1, 2761, 2767, + 2768, 2769, 2771, -1, -1, -1, 2772, 2773, + -1, 2776, -1, 2778, 2780, 2782, 2786, -1, + -1, -1, 2787, -1, -1, -1, -1, -1, + 2788, 2789, -1, 2790, 2791, -1, -1, -1, + -1, 2793, -1, -1, -1, -1, 2794, 2795, + -1, -1, -1, -1, -1, -1, -1, 2797, + -1, -1, -1, 2798, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2799, 2803, -1, + -1, -1, 2804, 2809, 2810, 2811, -1, 2812, + -1, 2813, 2815, 2816, -1, -1, -1, -1, + 2818, -1, -1, -1, -1, -1, 2819, 2820, + 2822, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2824, 2825, -1, 2828, -1, 2829, + 2831, 2833, 2834, 2836, -1, -1, -1, -1, + -1, 2838, 2839, -1, 2840, -1, -1, -1, + 2841, -1, -1, 2844, -1, -1, -1, -1, + 2848, -1, -1, 2849, 2855, 2857, -1, -1, + /* 0x5f00 */ + 2863, 2864, 2871, 2872, 2873, -1, -1, -1, + -1, 2875, -1, -1, 2876, 2877, 2878, -1, + 2880, 2883, 2884, -1, 2885, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2886, -1, -1, -1, -1, 2887, 2889, -1, + -1, -1, 2890, -1, -1, -1, -1, 2891, + -1, -1, -1, 2892, -1, 2893, -1, 2894, + -1, 2895, 2897, 2898, 2899, -1, 2900, -1, + -1, -1, -1, -1, -1, -1, 2902, -1, + 2903, -1, -1, -1, 2905, -1, 2906, -1, + 2907, 2908, 2909, 2912, 2914, 2915, -1, 2918, + -1, 2919, 2921, 2923, 2926, 2929, 2932, 2935, + 2936, -1, -1, -1, -1, 2938, 2939, -1, + 2940, 2941, -1, 2942, 2943, -1, -1, -1, + -1, -1, 2945, -1, 2946, -1, -1, 2947, + -1, -1, -1, 2950, -1, -1, -1, 2951, + 2953, 2955, -1, 2958, 2959, -1, -1, 2962, + 2963, -1, 2964, -1, 2965, -1, -1, 2966, + -1, 2967, -1, 2970, -1, 2972, -1, -1, + -1, -1, -1, -1, -1, -1, 2974, -1, + 2976, 2978, -1, 2979, 2981, -1, -1, -1, + -1, 2982, -1, -1, 2984, 2987, -1, -1, + 2988, 2989, -1, 2990, 2993, 2995, -1, 2997, + -1, 3000, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3001, 3002, -1, 3003, -1, + -1, -1, -1, -1, -1, -1, 3004, 3005, + -1, -1, -1, -1, -1, -1, -1, 3007, + -1, 3008, -1, -1, 3009, -1, -1, -1, + -1, -1, 3011, 3012, -1, -1, -1, 3013, + -1, 3014, -1, -1, -1, -1, -1, -1, + 3017, -1, -1, -1, -1, 3018, -1, -1, + -1, -1, -1, -1, -1, -1, 3019, -1, + /* 0x6000 */ + 3020, 3022, 3023, 3024, 3025, 3026, 3027, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3028, -1, 3029, -1, + -1, -1, -1, -1, 3030, 3031, -1, -1, + -1, -1, -1, 3032, -1, 3034, -1, -1, + -1, -1, 3035, -1, -1, -1, -1, -1, + -1, 3036, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3039, 3044, -1, -1, 3045, + -1, -1, -1, -1, -1, -1, 3046, -1, + -1, -1, -1, 3047, -1, -1, -1, -1, + -1, -1, 3048, 3049, -1, -1, 3051, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3052, 3053, -1, -1, 3055, 3057, -1, -1, + -1, -1, 3058, -1, -1, -1, -1, -1, + -1, 3059, -1, 3061, 3062, 3065, 3066, -1, + 3070, 3071, 3072, 3073, 3074, 3076, 3077, 3078, + 3080, -1, -1, -1, -1, 3082, -1, -1, + -1, -1, 3084, 3089, -1, 3090, -1, -1, + -1, 3091, -1, 3092, -1, -1, 3093, -1, + -1, -1, -1, -1, -1, -1, 3095, 3096, + -1, -1, 3097, -1, 3098, -1, 3101, -1, + -1, 3103, 3105, 3108, 3109, 3110, -1, 3111, + -1, -1, -1, 3112, 3115, 3116, 3117, -1, + -1, -1, -1, -1, -1, 3118, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3120, -1, -1, -1, -1, -1, + -1, -1, 3122, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3125, -1, + 3127, 3128, -1, 3131, -1, 3132, -1, 3134, + 3135, 3136, -1, 3137, 3138, 3139, 3141, 3142, + -1, 3143, 3145, -1, -1, -1, -1, 3146, + -1, -1, -1, 3147, 3148, -1, -1, -1, + /* 0x6100 */ + -1, -1, 3149, -1, -1, -1, -1, -1, + 3151, -1, -1, -1, -1, -1, -1, -1, + -1, 3153, -1, -1, -1, -1, -1, -1, + -1, 3155, -1, 3156, 3157, -1, -1, -1, + 3158, 3159, -1, -1, 3160, -1, 3161, 3162, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3164, 3165, -1, -1, 3166, + -1, 3167, -1, -1, 3169, 3170, 3171, 3172, + -1, -1, 3173, -1, 3175, -1, -1, 3176, + -1, -1, -1, 3177, -1, 3178, 3179, -1, + -1, 3182, -1, -1, -1, -1, -1, -1, + 3184, 3185, 3187, -1, -1, -1, -1, 3189, + -1, -1, -1, 3191, 3192, -1, -1, -1, + -1, -1, 3193, 3194, -1, 3195, 3196, -1, + -1, -1, -1, 3197, 3198, -1, 3199, -1, + -1, -1, -1, -1, 3200, 3202, 3204, 3205, + -1, 3208, 3209, -1, -1, 3210, -1, 3211, + -1, -1, 3212, -1, -1, -1, -1, -1, + 3213, 3214, 3217, -1, 3218, -1, 3220, 3222, + 3223, 3226, 3229, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3230, 3231, -1, -1, + -1, 3234, -1, 3235, -1, -1, 3236, -1, + -1, -1, 3237, -1, -1, -1, 3238, -1, + -1, -1, -1, 3239, -1, -1, -1, -1, + -1, -1, -1, 3240, -1, -1, -1, 3241, + -1, 3242, -1, -1, 3244, 3245, -1, -1, + 3246, 3248, 3249, -1, 3251, -1, -1, -1, + -1, -1, -1, -1, 3252, -1, 3253, 3254, + -1, -1, -1, 3255, -1, -1, 3256, 3257, + 3258, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3259, -1, 3260, 3262, 3263, 3264, + 3266, -1, 3267, -1, 3268, 3270, 3271, 3272, + /* 0x6200 */ + 3273, -1, -1, -1, -1, -1, 3274, 3275, + -1, -1, -1, 3276, -1, -1, -1, 3277, + -1, -1, -1, -1, 3279, -1, -1, 3280, + 3281, -1, 3283, 3285, -1, 3286, 3288, -1, + -1, -1, -1, -1, -1, -1, 3289, 3291, + -1, 3292, -1, -1, 3293, -1, 3294, 3296, + 3298, -1, 3300, -1, -1, -1, 3302, 3304, + 3306, 3308, -1, 3309, 3310, -1, 3312, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3313, 3314, 3315, 3316, -1, + -1, 3318, -1, -1, -1, 3320, -1, 3321, + 3322, -1, -1, -1, -1, -1, 3324, -1, + 3325, -1, -1, 3326, -1, -1, -1, 3327, + 3328, 3330, 3332, 3333, 3334, -1, -1, 3335, + 3336, -1, -1, -1, -1, 3337, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3338, -1, -1, -1, -1, -1, + -1, 3340, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3341, 3342, 3343, 3344, 3345, 3347, + 3348, 3349, 3350, -1, 3351, 3352, -1, -1, + -1, -1, -1, -1, 3353, -1, -1, -1, + -1, -1, -1, -1, -1, 3354, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3357, -1, -1, 3358, -1, -1, + 3359, -1, -1, 3360, -1, -1, -1, 3361, + 3362, -1, -1, 3364, 3365, 3366, 3367, 3368, + -1, -1, -1, -1, 3369, 3370, 3371, 3372, + 3373, 3375, 3378, 3379, -1, 3380, 3381, 3382, + 3383, 3385, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3387, + /* 0x6300 */ + -1, -1, 3388, -1, 3389, -1, -1, -1, + -1, -1, 3391, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3393, 3396, 3397, 3398, 3399, 3400, 3401, + 3402, 3403, 3404, 3405, 3406, 3407, 3408, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3409, -1, 3411, + -1, -1, -1, -1, -1, 3412, 3413, 3414, + -1, 3415, -1, -1, -1, -1, 3418, -1, + -1, -1, -1, -1, -1, 3421, -1, 3422, + -1, -1, -1, -1, -1, -1, -1, 3423, + -1, -1, -1, -1, 3424, -1, 3425, 3426, + -1, 3427, 3428, 3429, -1, -1, -1, -1, + 3431, -1, -1, 3432, -1, -1, 3433, -1, + -1, -1, 3435, -1, 3437, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3438, + -1, -1, -1, 3440, 3442, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3443, + -1, 3444, -1, 3445, -1, -1, -1, -1, + -1, 3446, -1, -1, -1, 3447, -1, -1, + -1, -1, -1, -1, 3448, -1, -1, -1, + -1, -1, 3449, 3450, 3451, -1, -1, 3452, + 3453, -1, 3454, 3455, 3456, 3457, -1, -1, + 3458, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3459, 3460, -1, -1, -1, -1, -1, + -1, -1, 3461, 3462, -1, -1, -1, -1, + 3463, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3464, 3465, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3466, 3467, -1, -1, 3469, -1, 3470, + /* 0x6400 */ + 3471, 3472, 3473, 3474, -1, 3475, 3478, -1, + -1, -1, -1, -1, -1, 3479, -1, -1, + -1, -1, 3480, -1, 3481, -1, 3482, 3484, + -1, -1, -1, -1, 3485, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3487, -1, -1, -1, -1, 3488, -1, -1, + -1, -1, 3489, -1, -1, -1, 3490, -1, + -1, -1, 3491, -1, -1, -1, 3493, -1, + -1, -1, 3494, -1, 3496, 3498, 3499, 3501, + 3503, -1, 3504, -1, -1, -1, -1, -1, + -1, 3505, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3506, -1, -1, 3507, + 3508, -1, -1, -1, -1, -1, -1, -1, + -1, 3511, -1, -1, -1, -1, -1, 3512, + -1, -1, -1, 3513, -1, -1, 3514, -1, + -1, -1, -1, 3515, -1, -1, -1, -1, + -1, -1, -1, 3516, 3518, -1, -1, -1, + 3519, -1, -1, -1, -1, -1, -1, 3520, + 3521, 3522, -1, 3523, -1, -1, -1, -1, + 3524, -1, 3525, -1, -1, -1, -1, 3526, + -1, 3527, -1, 3528, -1, 3529, 3531, 3532, + -1, -1, -1, 3535, -1, -1, -1, -1, + -1, -1, 3536, 3538, -1, 3539, -1, 3540, + 3541, 3542, 3545, 3546, -1, -1, 3547, 3548, + -1, 3549, -1, -1, 3550, -1, -1, 3551, + 3553, -1, 3555, 3557, -1, 3558, -1, -1, + -1, 3559, -1, -1, 3560, 3561, -1, -1, + -1, -1, 3563, -1, -1, -1, 3565, -1, + 3566, 3567, -1, 3568, -1, 3569, -1, 3570, + -1, -1, -1, -1, 3573, -1, -1, 3574, + 3575, 3576, 3577, -1, 3578, 3581, -1, 3582, + -1, -1, 3584, 3585, 3586, 3587, 3588, -1, + /* 0x6500 */ + 3589, -1, -1, -1, 3590, 3591, 3592, -1, + 3593, -1, 3594, -1, -1, -1, -1, 3595, + -1, -1, 3596, -1, 3597, -1, 3598, -1, + -1, 3599, -1, 3600, 3601, 3603, -1, 3605, + -1, -1, 3606, 3608, 3609, -1, -1, -1, + 3610, -1, 3611, 3614, 3615, -1, -1, -1, + -1, -1, -1, -1, 3617, 3618, 3619, 3620, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3621, + 3625, 3628, -1, -1, 3629, 3630, 3632, 3633, + -1, -1, -1, -1, -1, 3634, -1, 3636, + 3638, 3640, -1, 3641, -1, -1, 3643, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3644, -1, -1, -1, -1, -1, -1, + 3649, -1, -1, -1, -1, 3650, -1, 3651, + 3652, -1, 3653, -1, -1, -1, -1, -1, + -1, 3657, 3658, 3660, -1, 3661, 3666, -1, + 3671, 3676, 3680, 3684, 3686, 3688, 3689, -1, + -1, -1, -1, 3691, 3692, 3694, -1, 3695, + -1, -1, -1, -1, -1, -1, 3700, 3702, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3703, -1, -1, 3704, 3705, -1, -1, + -1, -1, 3706, -1, -1, 3707, -1, 3708, + -1, -1, -1, -1, 3709, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3712, 3713, -1, -1, -1, -1, -1, -1, + -1, -1, 3714, -1, -1, -1, -1, 3715, + 3717, 3719, -1, 3721, -1, -1, -1, -1, + 3722, -1, -1, -1, -1, 3723, -1, 3724, + -1, -1, 3725, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3728, 3730, + 3733, 3734, 3736, -1, -1, -1, 3737, 3738, + /* 0x6600 */ + -1, -1, 3739, -1, -1, -1, -1, 3740, + -1, -1, 3742, -1, -1, -1, 3743, 3744, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3745, 3746, -1, -1, -1, -1, 3747, + -1, -1, -1, -1, -1, 3748, 3749, -1, + -1, -1, -1, -1, 3750, 3751, -1, 3752, + 3753, -1, -1, -1, -1, -1, -1, -1, + 3754, -1, -1, 3755, 3756, 3758, 3759, 3761, + -1, -1, 3763, 3765, 3766, -1, -1, -1, + -1, 3767, -1, 3768, -1, -1, -1, -1, + -1, -1, 3769, 3770, 3772, 3773, 3774, -1, + -1, -1, 3775, -1, -1, 3776, -1, 3778, + 3779, -1, -1, -1, 3780, -1, -1, -1, + 3781, 3782, -1, -1, -1, -1, 3783, -1, + -1, -1, -1, -1, 3784, -1, -1, -1, + -1, -1, -1, 3786, -1, -1, -1, -1, + 3787, 3788, 3790, 3791, -1, -1, -1, -1, + 3793, 3794, -1, -1, -1, -1, -1, -1, + -1, -1, 3795, -1, -1, -1, 3796, 3798, + 3803, -1, -1, -1, 3804, -1, -1, -1, + -1, -1, 3805, -1, 3806, -1, 3809, 3812, + 3813, -1, -1, 3814, -1, 3815, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3817, -1, -1, -1, -1, -1, -1, -1, + -1, 3819, -1, -1, 3820, -1, 3821, 3825, + -1, 3826, -1, -1, 3828, 3832, -1, 3833, + -1, -1, -1, -1, -1, -1, 3834, -1, + -1, -1, -1, -1, -1, -1, -1, 3835, + 3836, -1, -1, -1, -1, -1, -1, -1, + 3838, -1, -1, -1, 3839, -1, -1, -1, + -1, -1, 3840, 3845, -1, 3846, -1, -1, + 3847, 3850, 3851, 3852, -1, 3854, 3855, -1, + /* 0x6700 */ + 3856, -1, 3857, 3859, -1, -1, -1, 3860, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3861, 3862, + -1, 3863, -1, 3864, -1, -1, 3865, 3866, + -1, -1, 3867, -1, -1, -1, -1, 3868, + -1, -1, -1, -1, 3869, 3871, 3872, 3873, + -1, 3875, -1, -1, 3876, 3878, 3879, -1, + -1, -1, 3880, -1, -1, -1, -1, -1, + 3882, -1, 3883, 3886, -1, -1, 3888, 3889, + -1, 3890, -1, -1, -1, -1, -1, -1, + -1, 3893, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3894, 3895, -1, -1, 3896, 3897, 3898, -1, + 3899, 3900, -1, -1, -1, -1, -1, 3901, + 3903, 3904, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3905, 3911, + 3912, 3917, -1, -1, 3918, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3920, + -1, -1, 3921, -1, -1, -1, -1, -1, + -1, 3925, -1, -1, 3928, -1, 3929, -1, + -1, 3930, 3931, 3932, -1, 3933, 3934, 3935, + 3936, 3937, 3942, 3945, -1, 3946, -1, -1, + -1, 3947, -1, -1, 3950, -1, -1, -1, + -1, -1, -1, 3952, -1, -1, -1, -1, + -1, 3953, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3954, + -1, -1, -1, -1, -1, 3955, -1, 3956, + -1, -1, -1, -1, 3961, -1, -1, -1, + 3962, -1, -1, -1, -1, 3963, -1, -1, + -1, 3964, -1, -1, -1, -1, -1, -1, + 3966, -1, -1, 3967, -1, 3970, -1, -1, + -1, 3971, 3972, 3974, -1, 3975, 3976, 3978, + /* 0x6800 */ + 3979, 3980, -1, 3983, 3985, 3987, -1, 3988, + 3989, 3991, 3992, 3994, 3995, -1, 3997, 3999, + -1, 4001, -1, -1, -1, -1, 4002, 4004, + -1, -1, -1, -1, -1, -1, 4006, -1, + -1, -1, 4007, -1, -1, -1, -1, 4008, + -1, -1, -1, -1, -1, -1, -1, -1, + 4009, -1, -1, -1, -1, -1, -1, 4011, + 4013, -1, -1, -1, -1, -1, 4014, -1, + -1, -1, 4016, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4017, -1, -1, -1, + -1, 4019, 4020, -1, -1, -1, -1, -1, + 4021, -1, -1, -1, 4022, 4024, -1, 4025, + 4027, 4030, 4031, 4032, 4033, 4034, 4036, 4037, + 4038, 4039, 4040, -1, -1, -1, 4041, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4043, 4044, -1, 4047, -1, -1, 4048, + -1, 4049, -1, -1, 4051, 4052, -1, -1, + -1, -1, -1, -1, -1, 4054, -1, -1, + -1, -1, -1, -1, 4056, -1, -1, -1, + 4057, -1, -1, -1, -1, 4058, -1, 4059, + -1, -1, -1, -1, -1, 4060, 4065, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4067, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4069, -1, 4070, 4071, + 4072, -1, 4074, -1, 4075, -1, -1, -1, + -1, -1, 4076, 4080, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4084, 4085, 4086, + -1, -1, -1, -1, -1, -1, -1, 4087, + -1, -1, -1, -1, -1, 4088, -1, 4089, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4091, 4092, -1, -1, -1, 4094, -1, + -1, 4095, -1, -1, -1, -1, -1, -1, + /* 0x6900 */ + 4096, 4097, -1, -1, -1, -1, -1, -1, + -1, 4098, -1, -1, -1, -1, 4100, 4101, + -1, -1, -1, -1, -1, -1, -1, 4104, + 4106, 4107, -1, -1, 4108, -1, -1, 4110, + 4111, -1, 4112, -1, 4113, -1, -1, -1, + -1, -1, -1, 4114, -1, 4115, -1, -1, + 4116, -1, -1, -1, 4117, -1, 4118, -1, + -1, 4119, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4120, -1, -1, 4121, -1, -1, + -1, -1, -1, 4123, -1, 4124, -1, -1, + -1, 4125, 4126, -1, -1, -1, -1, -1, + 4127, 4128, -1, -1, -1, 4129, 4130, -1, + 4131, -1, 4132, 4133, -1, 4134, -1, -1, + -1, -1, -1, 4135, -1, 4137, -1, -1, + -1, -1, -1, -1, 4138, 4139, -1, 4141, + -1, -1, -1, -1, 4142, 4143, 4144, 4145, + 4146, 4147, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4149, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4150, -1, + 4152, -1, 4153, -1, -1, -1, 4154, -1, + -1, -1, 4156, -1, 4157, -1, -1, -1, + -1, -1, -1, -1, 4158, -1, -1, 4159, + -1, -1, -1, -1, -1, -1, -1, 4160, + 4161, -1, -1, 4163, -1, 4164, -1, -1, + -1, 4165, -1, 4167, 4168, 4170, -1, 4172, + 4174, 4176, 4177, 4178, -1, -1, 4180, 4181, + 4182, -1, -1, -1, 4183, -1, -1, 4184, + 4185, -1, -1, -1, -1, -1, -1, -1, + -1, 4186, -1, 4187, -1, -1, 4188, -1, + -1, 4189, -1, -1, -1, -1, -1, -1, + /* 0x6a00 */ + -1, 4190, 4191, 4193, -1, 4194, -1, -1, + -1, -1, 4195, -1, -1, -1, -1, -1, + 4196, 4197, 4199, 4200, -1, -1, -1, -1, + -1, 4201, -1, -1, -1, -1, 4202, -1, + -1, -1, -1, 4203, -1, -1, -1, -1, + -1, 4205, 4207, -1, -1, -1, -1, 4209, + -1, 4211, -1, 4213, -1, -1, -1, 4214, + 4218, 4220, 4221, -1, -1, 4222, -1, 4223, + -1, -1, -1, 4224, -1, -1, -1, -1, + 4226, -1, 4227, 4228, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4230, + -1, -1, 4231, -1, -1, -1, -1, -1, + -1, -1, -1, 4233, -1, -1, 4235, -1, + 4238, 4239, -1, -1, -1, -1, -1, -1, + -1, 4240, -1, -1, 4243, -1, -1, -1, + -1, 4244, -1, 4245, -1, -1, 4246, -1, + -1, 4247, -1, -1, -1, -1, -1, 4248, + 4250, -1, -1, -1, 4251, -1, -1, 4252, + 4254, -1, -1, -1, 4255, 4256, -1, 4257, + -1, -1, 4258, 4260, -1, -1, -1, -1, + -1, 4261, 4262, -1, -1, -1, 4264, 4265, + -1, 4267, -1, 4271, -1, -1, -1, -1, + 4272, -1, -1, 4273, -1, -1, -1, -1, + 4274, 4278, 4279, 4280, -1, -1, -1, -1, + 4281, -1, -1, -1, 4282, -1, 4283, -1, + -1, -1, -1, 4285, 4287, 4288, -1, -1, + -1, -1, 4289, 4290, -1, 4291, 4292, 4293, + -1, -1, -1, -1, -1, 4295, -1, 4296, + 4297, -1, 4298, -1, 4299, -1, -1, -1, + -1, -1, -1, 4300, -1, -1, -1, -1, + 4301, -1, 4302, 4303, -1, 4305, -1, -1, + /* 0x6b00 */ + -1, -1, -1, -1, 4306, 4308, -1, -1, + -1, 4309, 4313, -1, -1, -1, -1, 4315, + -1, 4316, 4317, -1, -1, -1, 4319, 4320, + -1, -1, -1, -1, -1, 4322, 4325, -1, + 4327, -1, 4329, 4333, 4336, -1, -1, 4337, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4338, -1, -1, 4339, -1, -1, + -1, -1, -1, 4340, -1, 4341, 4342, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4343, -1, 4344, -1, + 4346, -1, -1, 4347, -1, -1, 4349, -1, + 4352, -1, -1, 4353, -1, 4355, -1, 4356, + -1, 4357, -1, -1, -1, 4359, -1, -1, + 4361, 4363, -1, -1, 4365, -1, 4366, 4369, + -1, -1, 4371, 4375, 4379, -1, -1, 4382, + 4385, 4388, 4389, -1, 4390, -1, 4392, 4396, + 4400, 4401, -1, -1, -1, -1, -1, 4405, + -1, -1, -1, 4406, -1, -1, -1, -1, + -1, -1, 4407, 4408, -1, -1, -1, -1, + 4409, -1, 4410, -1, -1, -1, 4411, -1, + -1, 4412, -1, -1, 4413, -1, -1, -1, + -1, -1, -1, 4414, -1, -1, 4415, 4416, + -1, 4417, 4419, -1, 4421, -1, -1, 4422, + -1, -1, 4423, 4424, 4426, -1, -1, -1, + 4428, 4429, 4432, -1, -1, -1, 4433, -1, + -1, 4434, -1, -1, -1, -1, 4436, 4437, + -1, -1, -1, 4438, 4440, 4441, -1, 4442, + 4443, 4444, -1, -1, -1, -1, -1, 4445, + -1, 4446, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4447, -1, 4448, -1, + -1, -1, -1, -1, -1, 4449, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4450, + /* 0x6c00 */ + -1, -1, 4451, -1, -1, -1, -1, 4453, + 4454, -1, 4456, -1, 4457, -1, -1, -1, + -1, -1, -1, -1, 4458, -1, -1, 4461, + -1, -1, -1, 4464, -1, -1, -1, -1, + -1, -1, 4465, 4466, -1, -1, -1, -1, + -1, 4469, -1, 4470, 4471, -1, -1, -1, + -1, -1, 4472, 4473, 4474, 4476, -1, 4478, + -1, -1, 4481, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4483, + -1, 4487, -1, -1, -1, -1, 4488, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4489, 4491, -1, -1, -1, -1, -1, + -1, 4493, -1, -1, 4495, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4496, 4497, -1, -1, -1, + -1, 4498, 4499, 4500, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4501, 4503, -1, -1, -1, -1, -1, -1, + -1, -1, 4504, -1, -1, -1, 4505, 4506, + -1, -1, -1, -1, -1, -1, -1, 4507, + -1, 4508, 4513, 4515, 4516, 4517, 4518, 4519, + 4520, 4521, 4522, -1, -1, -1, 4524, -1, + -1, 4525, 4526, -1, -1, 4527, -1, -1, + -1, -1, -1, -1, -1, -1, 4528, -1, + -1, 4529, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4530, -1, -1, + -1, -1, -1, 4532, -1, 4533, 4534, -1, + -1, -1, -1, -1, -1, 4535, -1, -1, + 4536, -1, 4537, -1, -1, -1, -1, 4539, + 4540, -1, -1, -1, -1, -1, 4541, 4542, + 4544, -1, 4545, 4546, 4547, 4550, 4552, -1, + /* 0x6d00 */ + -1, 4553, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4554, -1, -1, -1, + -1, -1, 4555, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4556, + -1, -1, -1, -1, -1, -1, 4557, -1, + -1, -1, -1, -1, 4558, -1, -1, -1, + 4559, -1, -1, 4560, 4561, 4562, 4563, 4564, + 4565, 4566, 4567, 4568, -1, 4569, 4570, 4572, + 4574, 4575, 4576, 4577, 4578, 4579, -1, -1, + -1, -1, -1, -1, 4580, -1, -1, -1, + -1, -1, -1, 4583, -1, -1, -1, 4584, + -1, 4587, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4588, -1, -1, 4589, -1, -1, -1, + -1, -1, 4590, -1, -1, 4592, -1, 4593, + -1, 4594, -1, -1, 4595, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4596, -1, + -1, 4598, -1, 4600, 4601, 4603, 4604, 4605, + 4606, 4607, 4608, 4609, 4610, -1, 4611, 4612, + 4614, 4615, -1, -1, -1, -1, -1, 4619, + -1, -1, -1, -1, -1, -1, -1, -1, + 4620, -1, -1, -1, 4621, -1, -1, -1, + 4622, -1, -1, -1, 4623, -1, -1, -1, + -1, -1, -1, 4624, -1, -1, -1, -1, + -1, -1, 4625, -1, -1, -1, -1, -1, + -1, -1, 4626, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4628, -1, -1, + 4629, -1, 4631, 4632, -1, -1, -1, -1, + -1, -1, -1, 4634, -1, 4635, 4638, -1, + 4639, -1, 4640, 4641, -1, -1, -1, -1, + /* 0x6e00 */ + -1, -1, -1, -1, -1, 4642, -1, 4643, + 4644, 4646, 4647, 4650, 4654, 4655, 4656, -1, + 4658, 4659, -1, 4660, 4664, 4665, 4668, 4669, + -1, 4670, -1, 4671, -1, -1, -1, -1, + -1, -1, 4672, -1, -1, -1, 4673, -1, + -1, 4674, -1, -1, 4675, -1, -1, -1, + -1, -1, -1, -1, 4676, -1, -1, -1, + 4677, -1, -1, -1, -1, -1, 4679, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4680, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4681, -1, + -1, -1, -1, -1, -1, -1, -1, 4682, + -1, -1, -1, -1, -1, -1, -1, 4683, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4684, 4685, 4686, 4687, 4688, + 4690, 4692, 4693, 4694, -1, 4695, -1, 4696, + -1, 4697, -1, -1, 4698, -1, -1, -1, + 4701, -1, -1, -1, -1, 4702, 4704, -1, + -1, -1, -1, -1, 4706, 4707, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4708, 4712, -1, -1, 4713, 4714, + -1, -1, -1, 4716, -1, -1, 4717, -1, + -1, -1, -1, -1, 4719, -1, -1, -1, + -1, -1, -1, -1, 4721, 4722, -1, -1, + -1, -1, -1, -1, 4723, -1, 4724, -1, + -1, -1, -1, -1, -1, -1, -1, 4725, + -1, 4726, 4728, 4729, -1, 4730, 4732, 4733, + 4736, 4737, 4739, -1, 4740, 4741, 4742, -1, + 4743, 4746, 4747, -1, 4748, -1, -1, 4750, + -1, -1, 4751, -1, -1, -1, -1, 4752, + 4755, -1, -1, 4757, -1, -1, 4758, 4759, + /* 0x6f00 */ + -1, 4761, -1, -1, 4762, -1, 4763, -1, + -1, -1, 4764, -1, -1, -1, -1, -1, + -1, 4765, -1, 4766, -1, -1, -1, -1, + -1, -1, 4767, -1, -1, -1, -1, -1, + -1, -1, 4768, 4769, -1, -1, -1, 4770, + -1, -1, -1, 4773, 4774, -1, -1, -1, + -1, 4775, 4776, -1, -1, -1, -1, -1, + 4777, -1, -1, -1, -1, -1, -1, 4778, + -1, 4779, -1, -1, 4780, 4781, 4782, 4783, + -1, -1, -1, 4784, -1, 4785, -1, -1, + -1, 4786, -1, -1, 4789, -1, -1, -1, + -1, 4791, -1, 4792, 4794, -1, -1, -1, + -1, -1, -1, -1, 4796, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4797, + 4798, -1, -1, -1, 4799, -1, -1, 4800, + -1, -1, -1, -1, -1, -1, -1, 4801, + 4802, 4806, 4810, -1, 4813, -1, 4816, 4817, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4818, -1, -1, 4819, -1, -1, 4820, + -1, -1, 4821, 4822, 4825, -1, -1, 4826, + 4828, -1, -1, 4829, 4830, -1, 4832, -1, + -1, 4833, -1, -1, -1, -1, 4834, -1, + 4835, 4836, -1, 4837, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4838, -1, 4839, -1, -1, -1, 4840, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4841, 4843, -1, 4844, 4845, -1, -1, + 4847, -1, 4848, 4850, 4852, -1, -1, 4853, + -1, -1, -1, -1, 4855, -1, -1, -1, + -1, -1, -1, 4856, -1, -1, -1, -1, + 4857, 4858, -1, 4861, -1, 4863, 4866, -1, + -1, -1, 4868, -1, 4869, -1, 4870, -1, + /* 0x7000 */ + -1, -1, 4871, -1, -1, 4874, 4875, -1, + -1, 4877, -1, 4878, -1, -1, -1, 4880, + -1, -1, -1, 4881, -1, 4884, -1, -1, + 4885, -1, -1, -1, -1, 4886, -1, 4887, + 4888, -1, -1, -1, -1, -1, 4889, 4890, + 4892, -1, -1, -1, 4894, -1, -1, 4896, + 4897, -1, 4898, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4900, -1, + -1, -1, -1, 4901, 4902, -1, -1, -1, + -1, -1, -1, 4903, 4905, -1, 4906, 4908, + -1, 4909, -1, -1, 4910, 4912, -1, -1, + 4913, -1, -1, -1, -1, 4914, -1, -1, + -1, -1, -1, 4915, 4916, -1, -1, 4917, + -1, -1, -1, -1, -1, 4918, 4919, 4921, + -1, -1, -1, -1, -1, 4922, 4925, -1, + -1, -1, -1, 4927, -1, 4929, 4931, 4933, + 4934, 4935, -1, -1, -1, -1, -1, -1, + -1, 4938, -1, -1, -1, 4941, 4943, 4944, + -1, -1, -1, -1, -1, -1, -1, 4945, + -1, -1, -1, -1, 4947, 4948, -1, -1, + -1, -1, -1, -1, 4949, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4954, 4957, + 4958, -1, -1, -1, -1, -1, -1, -1, + -1, 4959, 4960, -1, 4962, 4965, -1, -1, + -1, 4966, 4967, 4970, -1, -1, -1, -1, + -1, -1, 4971, -1, -1, -1, -1, 4972, + -1, -1, -1, -1, -1, -1, 4973, -1, + -1, -1, -1, 4975, -1, -1, -1, 4976, + -1, -1, -1, -1, -1, -1, 4977, 4978, + 4980, 4982, -1, 4983, 4984, 4985, -1, -1, + -1, 4986, -1, -1, 4987, -1, -1, -1, + -1, -1, -1, -1, -1, 4988, 4989, -1, + /* 0x7100 */ + -1, -1, -1, -1, -1, -1, -1, 4991, + 4992, -1, 4996, -1, -1, -1, -1, 4997, + -1, -1, -1, -1, 4998, 5000, 5001, -1, + 5002, -1, 5003, -1, -1, -1, -1, -1, + -1, 5005, -1, -1, -1, -1, 5006, -1, + -1, -1, -1, -1, -1, 5007, -1, -1, + 5008, -1, -1, 5010, -1, -1, -1, -1, + -1, -1, -1, -1, 5011, -1, -1, -1, + -1, -1, -1, -1, -1, 5013, -1, -1, + -1, 5014, -1, -1, -1, -1, -1, -1, + -1, 5017, 5018, -1, -1, 5019, 5023, 5024, + -1, 5025, -1, -1, -1, -1, -1, -1, + -1, -1, 5026, -1, -1, 5028, -1, 5029, + -1, 5033, -1, -1, 5034, -1, 5036, -1, + -1, -1, -1, -1, 5037, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5039, -1, + -1, -1, -1, -1, -1, 5041, -1, -1, + 5043, -1, -1, -1, -1, -1, -1, 5047, + -1, -1, 5048, -1, 5049, -1, -1, 5051, + -1, 5052, -1, -1, -1, -1, -1, -1, + -1, -1, 5056, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5057, 5058, 5059, -1, -1, -1, -1, + -1, 5060, 5061, -1, -1, -1, 5062, -1, + -1, 5063, -1, -1, 5065, -1, -1, -1, + 5067, -1, -1, -1, 5068, -1, 5070, -1, + 5071, -1, 5073, 5075, -1, 5077, -1, 5078, + -1, 5081, -1, -1, 5082, -1, -1, 5083, + -1, -1, -1, -1, -1, -1, 5085, -1, + -1, -1, -1, -1, 5086, 5087, -1, -1, + -1, -1, -1, 5088, 5092, -1, -1, -1, + -1, -1, -1, 5093, 5094, -1, 5095, 5096, + /* 0x7200 */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5097, -1, -1, + 5098, -1, -1, -1, -1, -1, -1, 5099, + -1, -1, -1, 5101, -1, -1, -1, -1, + -1, -1, -1, -1, 5104, -1, -1, -1, + -1, -1, -1, -1, -1, 5107, -1, -1, + -1, 5108, 5109, -1, 5111, -1, -1, 5112, + -1, -1, 5113, -1, 5114, -1, 5115, 5118, + 5119, -1, -1, 5120, -1, 5121, 5122, -1, + -1, -1, -1, 5123, -1, 5124, 5125, -1, + -1, -1, -1, 5129, -1, 5130, -1, -1, + 5134, -1, -1, 5135, 5136, -1, -1, -1, + 5137, -1, -1, -1, -1, -1, 5138, -1, + -1, -1, -1, 5140, -1, -1, -1, -1, + -1, -1, -1, -1, 5142, 5143, -1, -1, + -1, -1, 5144, -1, -1, 5146, -1, -1, + -1, 5147, 5148, -1, -1, -1, -1, 5149, + -1, -1, 5150, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5151, -1, + -1, -1, -1, 5152, -1, -1, -1, -1, + 5154, -1, 5156, -1, -1, -1, -1, 5157, + -1, -1, -1, -1, 5159, 5160, 5161, -1, + -1, -1, 5162, -1, 5163, -1, 5165, 5166, + 5167, 5168, -1, -1, -1, -1, -1, -1, + 5169, -1, 5170, -1, -1, -1, -1, -1, + 5172, 5173, -1, -1, 5174, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5175, 5176, -1, + -1, -1, 5177, -1, -1, 5178, -1, -1, + -1, -1, -1, -1, 5179, 5180, 5181, 5182, + 5183, 5184, 5185, -1, -1, -1, -1, -1, + 5186, 5188, -1, -1, -1, 5189, 5190, -1, + /* 0x7300 */ + -1, -1, 5191, 5192, -1, -1, -1, 5193, + -1, -1, 5194, -1, -1, 5195, 5197, -1, + -1, -1, -1, -1, -1, 5199, -1, -1, + 5200, 5201, -1, -1, -1, -1, -1, 5202, + -1, 5204, -1, -1, -1, -1, -1, -1, + 5205, 5206, 5207, 5208, 5209, -1, 5210, 5211, + -1, -1, 5212, -1, -1, 5213, 5214, -1, + -1, -1, -1, 5215, -1, -1, -1, 5216, + -1, 5218, -1, -1, 5219, 5220, -1, -1, + -1, -1, -1, -1, -1, 5221, 5222, 5225, + 5226, -1, -1, -1, -1, -1, -1, -1, + 5227, 5228, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5229, -1, -1, 5231, -1, + 5232, -1, 5233, 5234, -1, 5236, 5237, -1, + 5238, 5239, 5240, -1, -1, 5241, -1, 5243, + 5244, -1, 5246, 5247, 5248, -1, 5249, -1, + 5250, 5251, -1, 5252, -1, 5254, -1, 5255, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5256, -1, -1, -1, -1, -1, -1, + -1, 5257, 5258, 5259, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 5260, 5262, -1, -1, -1, -1, 5263, 5264, + 5265, 5266, -1, 5267, -1, -1, -1, -1, + -1, -1, 5268, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5269, -1, 5272, 5273, 5274, + 5276, 5277, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5278, -1, -1, 5280, -1, -1, -1, + -1, -1, 5284, -1, -1, -1, -1, -1, + 5285, 5286, 5288, -1, -1, -1, -1, 5289, + -1, -1, -1, -1, -1, -1, 5290, -1, + /* 0x7400 */ + -1, -1, -1, 5291, -1, 5292, -1, -1, + -1, 5293, -1, -1, -1, 5296, 5298, 5299, + 5300, 5302, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5304, -1, -1, 5305, -1, -1, -1, + -1, 5307, 5309, -1, 5310, -1, -1, 5311, + -1, -1, -1, -1, -1, -1, -1, 5312, + -1, -1, -1, 5313, -1, -1, -1, -1, + -1, -1, 5314, -1, -1, -1, -1, -1, + -1, 5315, -1, -1, -1, -1, -1, -1, + 5316, -1, -1, 5319, 5321, -1, -1, -1, + 5322, 5323, 5324, -1, -1, -1, -1, 5325, + 5326, -1, 5327, -1, 5328, -1, 5330, 5331, + 5332, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5333, -1, -1, -1, 5335, + -1, 5336, -1, -1, -1, -1, 5337, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5339, 5341, 5344, -1, -1, 5345, -1, + -1, -1, -1, 5346, -1, -1, -1, -1, + 5347, -1, -1, -1, -1, 5348, -1, -1, + 5349, -1, -1, -1, -1, 5350, -1, 5352, + -1, -1, -1, -1, -1, -1, -1, -1, + 5353, 5355, 5356, -1, 5357, -1, -1, 5358, + -1, -1, 5359, -1, 5360, -1, -1, -1, + -1, -1, 5362, -1, -1, -1, -1, -1, + -1, -1, -1, 5364, -1, -1, -1, -1, + 5365, -1, -1, -1, -1, -1, 5366, 5367, + -1, -1, -1, -1, -1, -1, 5368, 5370, + -1, -1, -1, -1, -1, -1, -1, -1, + /* 0x7500 */ + -1, 5371, -1, -1, -1, -1, 5373, -1, + -1, -1, -1, -1, 5374, -1, 5375, -1, + -1, -1, -1, -1, -1, 5378, 5379, -1, + -1, -1, -1, -1, -1, -1, 5381, -1, + 5384, -1, 5385, 5387, -1, -1, 5389, -1, + -1, -1, -1, -1, -1, -1, -1, 5392, + -1, -1, -1, -1, -1, 5398, -1, 5399, + -1, -1, 5400, 5402, 5407, 5409, -1, -1, + -1, -1, 5410, -1, 5411, 5413, 5414, -1, + -1, -1, 5418, -1, 5419, 5421, 5423, -1, + -1, 5424, 5425, -1, -1, -1, -1, -1, + -1, 5429, 5431, -1, -1, 5432, 5437, -1, + 5441, 5442, 5443, -1, -1, 5444, -1, 5445, + 5446, -1, 5447, 5448, -1, -1, -1, -1, + 5450, 5451, -1, 5453, 5457, 5458, 5460, -1, + -1, -1, 5461, 5462, -1, -1, -1, -1, + -1, -1, 5463, -1, -1, 5467, 5469, 5470, + -1, 5471, 5475, -1, -1, -1, 5479, 5481, + -1, -1, -1, -1, -1, -1, 5483, 5484, + -1, -1, -1, -1, -1, -1, -1, 5485, + 5486, 5487, -1, 5488, -1, -1, -1, -1, + -1, -1, -1, -1, 5489, 5490, 5491, 5492, + -1, 5493, -1, -1, 5495, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5496, + 5497, 5498, -1, -1, -1, -1, -1, -1, + -1, -1, 5499, -1, -1, -1, 5500, -1, + -1, 5504, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 5505, 5506, 5507, 5508, -1, -1, 5509, -1, + -1, -1, 5510, 5512, 5515, -1, -1, -1, + -1, 5516, 5517, -1, -1, -1, 5518, -1, + /* 0x7600 */ + -1, -1, 5519, -1, -1, 5523, 5524, -1, + -1, 5525, -1, 5527, -1, 5528, -1, -1, + -1, -1, -1, 5529, -1, -1, 5530, 5531, + 5532, -1, -1, -1, -1, -1, 5533, -1, + -1, 5534, -1, -1, 5535, -1, 5536, 5537, + -1, -1, 5538, 5539, -1, -1, 5540, -1, + -1, -1, 5541, -1, -1, -1, -1, -1, + -1, -1, 5542, 5543, -1, -1, 5545, 5546, + -1, -1, 5547, -1, 5548, 5550, 5551, 5552, + -1, 5553, -1, -1, -1, -1, -1, -1, + -1, -1, 5554, -1, -1, 5556, -1, -1, + 5558, -1, -1, -1, -1, -1, 5559, 5560, + -1, 5561, 5562, 5563, 5564, 5565, -1, 5566, + -1, 5567, -1, 5568, 5569, 5570, 5571, 5572, + 5573, 5576, 5577, -1, 5578, 5579, -1, -1, + -1, -1, 5580, 5590, 5591, -1, -1, -1, + -1, 5593, 5595, 5597, -1, -1, -1, -1, + 5598, -1, -1, 5601, -1, 5602, 5604, -1, + 5605, 5606, -1, -1, -1, -1, -1, -1, + -1, -1, 5607, -1, -1, -1, 5609, -1, + -1, 5610, -1, -1, -1, 5611, -1, -1, + 5613, -1, -1, -1, -1, -1, -1, -1, + 5614, 5616, 5617, -1, -1, -1, -1, 5619, + 5620, 5622, 5624, -1, 5625, -1, -1, -1, + -1, 5626, -1, 5627, -1, -1, -1, 5629, + 5630, -1, -1, 5631, 5634, 5635, -1, 5636, + 5637, 5639, -1, -1, -1, -1, 5641, 5643, + 5644, 5645, -1, -1, 5646, -1, 5647, -1, + -1, 5648, -1, 5649, 5651, -1, -1, 5652, + -1, -1, 5653, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + /* 0x7700 */ + -1, -1, -1, -1, -1, -1, 5655, -1, + -1, 5657, -1, -1, 5658, 5660, 5661, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 5663, -1, -1, -1, -1, -1, 5664, 5665, + -1, -1, -1, -1, -1, 5666, 5667, -1, + -1, -1, -1, 5668, 5669, -1, -1, 5670, + -1, -1, -1, -1, -1, -1, -1, 5672, + -1, -1, -1, -1, -1, -1, 5673, -1, + 5676, 5677, 5678, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5679, + 5680, 5681, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5682, -1, 5683, -1, + 5684, -1, -1, -1, 5685, 5686, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5687, -1, -1, -1, -1, -1, 5688, + -1, -1, -1, -1, -1, 5690, 5691, 5692, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5693, -1, -1, -1, 5694, -1, + 5695, -1, -1, -1, -1, -1, 5696, -1, + 5697, -1, 5698, -1, -1, -1, -1, -1, + -1, 5699, 5700, -1, -1, 5701, -1, -1, + 5703, -1, -1, -1, -1, -1, 5704, -1, + -1, -1, -1, -1, 5705, -1, 5706, -1, + -1, 5710, -1, -1, -1, -1, -1, 5711, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5712, 5713, -1, -1, -1, -1, + -1, 5714, 5715, -1, -1, -1, -1, -1, + -1, -1, 5716, -1, 5717, -1, 5719, 5720, + -1, -1, -1, 5722, -1, -1, -1, 5723, + -1, -1, -1, -1, 5724, -1, 5727, -1, + -1, -1, -1, -1, -1, -1, 5728, 5729, + /* 0x7800 */ + 5734, 5735, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5736, -1, -1, 5737, 5738, 5741, + -1, -1, 5742, -1, 5743, -1, -1, -1, + -1, -1, -1, -1, -1, 5744, -1, 5745, + -1, -1, -1, -1, 5746, -1, -1, -1, + -1, -1, 5747, -1, -1, -1, -1, -1, + -1, -1, 5750, 5751, -1, -1, 5752, 5753, + 5758, 5759, -1, 5760, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5761, 5762, 5763, + -1, 5764, 5765, -1, 5766, -1, -1, -1, + -1, -1, -1, -1, 5767, -1, -1, -1, + 5768, -1, 5769, -1, -1, -1, 5770, 5773, + -1, -1, -1, -1, -1, 5774, -1, 5775, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5778, -1, -1, -1, -1, -1, 5782, + -1, -1, -1, -1, -1, 5784, 5785, -1, + -1, -1, -1, -1, 5786, 5787, -1, 5790, + -1, -1, -1, 5793, 5794, -1, 5795, 5798, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5799, 5800, -1, -1, 5801, -1, 5802, + 5803, 5805, -1, -1, -1, -1, -1, -1, + 5807, -1, 5808, 5810, 5812, -1, -1, -1, + -1, 5813, -1, -1, -1, -1, -1, 5814, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5815, 5816, -1, 5817, -1, 5818, -1, + -1, -1, 5819, -1, -1, -1, -1, -1, + 5822, -1, -1, 5823, -1, -1, -1, 5824, + -1, -1, -1, -1, -1, -1, -1, 5825, + -1, -1, -1, -1, -1, -1, -1, 5826, + 5827, -1, 5828, -1, -1, 5829, -1, -1, + /* 0x7900 */ + 5830, -1, -1, -1, 5831, -1, 5832, -1, + 5835, -1, -1, -1, -1, -1, 5837, -1, + -1, -1, 5838, -1, -1, -1, -1, -1, + -1, 5839, -1, -1, -1, -1, -1, 5840, + 5843, -1, -1, -1, -1, -1, 5844, -1, + -1, -1, 5849, 5850, 5851, -1, 5852, -1, + -1, 5855, -1, -1, -1, -1, -1, -1, + -1, -1, 5856, 5857, 5858, -1, -1, 5859, + 5860, -1, -1, 5861, -1, 5862, -1, -1, + -1, -1, -1, -1, -1, -1, 5863, -1, + -1, -1, -1, -1, -1, 5864, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5865, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5866, + -1, -1, -1, -1, -1, 5867, -1, 5868, + 5869, -1, -1, -1, -1, -1, -1, 5870, + 5871, -1, -1, -1, 5872, 5873, -1, -1, + -1, -1, -1, -1, -1, 5874, 5875, -1, + -1, -1, -1, -1, -1, 5876, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5877, -1, -1, -1, -1, 5878, -1, + -1, 5879, 5880, -1, -1, -1, 5881, -1, + 5882, 5883, -1, -1, 5884, -1, -1, -1, + -1, -1, -1, 5885, -1, -1, -1, 5886, + -1, 5887, -1, 5888, -1, -1, 5889, 5890, + 5895, -1, 5896, 5897, 5902, 5905, -1, -1, + 5906, -1, -1, -1, 5907, 5909, 5910, 5911, + 5912, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5913, + 5914, -1, -1, -1, -1, -1, -1, -1, + 5916, -1, -1, -1, -1, 5917, 5918, -1, + /* 0x7a00 */ + -1, 5919, -1, -1, -1, 5923, 5924, -1, + 5926, 5927, -1, -1, -1, -1, 5929, -1, + -1, -1, -1, -1, -1, -1, -1, 5930, + -1, -1, 5932, -1, 5934, -1, -1, 5935, + -1, -1, -1, 5936, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5937, 5938, -1, + -1, 5939, 5941, 5942, -1, -1, -1, -1, + -1, -1, 5944, 5946, -1, -1, 5947, 5951, + 5955, -1, 5957, -1, -1, 5958, -1, -1, + -1, 5960, -1, -1, 5962, 5966, 5967, 5969, + 5971, 5974, -1, -1, -1, -1, -1, 5975, + -1, -1, -1, -1, -1, -1, 5976, -1, + 5978, 5979, 5980, 5981, -1, -1, -1, -1, + 5982, 5986, 5988, 5990, -1, 5991, -1, -1, + 5993, -1, -1, -1, -1, -1, -1, 5994, + -1, 5996, -1, -1, -1, 5997, -1, -1, + -1, 5998, -1, 5999, -1, -1, -1, -1, + -1, -1, 6000, -1, -1, 6001, 6002, -1, + -1, 6003, -1, 6005, -1, -1, -1, 6009, + -1, -1, -1, -1, 6013, 6014, -1, -1, + -1, -1, -1, -1, -1, 6015, 6016, -1, + -1, 6017, 6018, -1, 6019, 6020, 6022, 6024, + 6026, -1, -1, 6028, -1, 6029, 6030, -1, + -1, -1, 6032, 6033, -1, -1, -1, -1, + -1, -1, -1, 6037, 6039, 6040, 6041, 6043, + 6044, -1, 6046, -1, -1, -1, -1, -1, + -1, -1, 6047, -1, -1, -1, 6048, -1, + -1, -1, 6050, -1, 6051, 6053, 6056, -1, + -1, -1, 6058, -1, -1, -1, -1, -1, + -1, 6059, 6061, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6063, -1, + 6065, -1, -1, -1, -1, -1, 6067, -1, + /* 0x7b00 */ + -1, -1, -1, 6068, -1, -1, -1, -1, + -1, -1, -1, 6069, -1, -1, -1, -1, + -1, 6071, -1, -1, 6073, 6074, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6075, + -1, -1, -1, -1, -1, -1, -1, 6076, + 6082, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6083, 6085, -1, + -1, -1, 6086, -1, 6088, -1, 6090, -1, + -1, -1, -1, -1, -1, 6091, 6092, -1, + -1, -1, -1, 6093, -1, 6094, -1, 6096, + 6098, 6099, -1, -1, -1, -1, 6100, -1, + 6104, 6105, 6106, 6107, 6108, 6109, 6110, -1, + -1, -1, -1, -1, -1, -1, -1, 6114, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6115, -1, -1, -1, -1, -1, -1, + -1, 6116, 6117, -1, 6118, -1, 6119, 6122, + 6123, -1, 6124, -1, -1, -1, 6125, 6126, + -1, -1, -1, 6129, -1, 6130, -1, 6131, + -1, -1, 6132, 6133, -1, -1, -1, -1, + -1, -1, 6134, -1, -1, -1, -1, -1, + -1, -1, -1, 6135, -1, -1, 6139, 6141, + 6142, 6143, 6144, 6145, 6146, -1, -1, -1, + 6147, -1, 6149, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 6150, -1, -1, -1, 6151, -1, 6153, -1, + -1, 6154, -1, 6155, -1, -1, -1, 6157, + -1, 6158, -1, 6159, 6160, -1, -1, 6161, + -1, -1, -1, 6162, -1, -1, -1, -1, + 6163, 6165, -1, -1, 6166, -1, 6167, -1, + -1, 6168, 6171, -1, -1, 6172, 6174, 6175, + -1, 6176, 6177, 6178, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + /* 0x7c00 */ + 6179, 6181, -1, -1, 6183, -1, 6185, -1, + -1, -1, -1, -1, -1, 6186, -1, -1, + -1, 6187, 6189, -1, 6190, -1, 6192, 6193, + 6195, -1, -1, -1, -1, -1, 6196, -1, + 6197, 6198, -1, 6199, -1, -1, -1, -1, + -1, -1, 6200, 6201, -1, -1, -1, -1, + -1, 6203, -1, -1, -1, -1, -1, 6205, + -1, 6206, -1, -1, -1, 6207, 6208, -1, + 6209, 6211, -1, 6212, -1, -1, 6213, -1, + -1, -1, -1, -1, 6214, -1, -1, 6215, + 6217, -1, 6218, -1, 6219, 6221, 6222, -1, + 6224, 6226, -1, 6227, 6228, -1, -1, 6229, + 6230, -1, -1, -1, 6232, -1, -1, -1, + -1, 6234, 6235, -1, 6236, 6237, 6239, -1, + -1, -1, 6240, -1, 6242, -1, -1, -1, + -1, -1, -1, 6243, 6244, -1, -1, -1, + -1, -1, -1, 6245, -1, -1, -1, 6246, + -1, -1, -1, 6248, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6249, + 6250, -1, -1, 6251, 6253, 6254, -1, -1, + -1, -1, -1, -1, 6255, 6256, 6258, 6259, + -1, -1, 6263, -1, 6264, -1, 6268, -1, + -1, -1, -1, 6269, -1, 6271, -1, -1, + -1, 6272, 6273, -1, -1, 6274, -1, -1, + -1, 6275, -1, -1, -1, -1, 6276, 6281, + -1, 6282, 6283, -1, -1, -1, -1, -1, + -1, -1, -1, 6284, -1, 6286, -1, -1, + -1, -1, 6287, -1, -1, 6291, 6292, -1, + 6293, -1, -1, -1, -1, -1, 6295, 6296, + -1, -1, -1, -1, -1, -1, -1, -1, + 6297, -1, 6299, -1, 6300, -1, 6301, -1, + 6302, 6306, 6308, 6309, 6313, -1, 6315, 6317, + /* 0x7d00 */ + 6319, -1, 6320, -1, 6321, 6322, 6323, 6324, + 6325, 6326, -1, 6327, -1, 6328, -1, -1, + 6329, -1, -1, 6330, 6331, 6332, 6333, 6334, + 6335, 6337, 6339, 6340, 6341, 6342, -1, -1, + -1, 6344, -1, 6345, -1, 6346, -1, 6347, + -1, -1, -1, -1, 6348, -1, 6350, 6352, + 6356, 6357, 6358, 6359, -1, 6360, -1, -1, + -1, 6361, 6362, -1, 6363, -1, -1, 6364, + 6365, -1, 6366, 6367, 6368, 6369, 6370, -1, + 6372, -1, -1, 6373, 6374, 6376, 6377, 6378, + 6379, -1, -1, -1, -1, 6380, 6383, -1, + -1, -1, 6384, 6385, -1, 6387, 6389, -1, + -1, 6390, 6391, -1, 6392, 6396, 6397, -1, + 6398, -1, -1, -1, -1, -1, -1, -1, + 6399, 6400, 6402, 6404, -1, 6405, 6407, 6410, + 6411, 6413, -1, -1, -1, -1, -1, -1, + -1, 6414, 6415, 6417, -1, -1, 6418, -1, + 6419, 6420, -1, 6421, 6422, -1, -1, 6423, + -1, 6424, -1, 6426, -1, -1, -1, 6428, + -1, 6429, 6431, -1, 6434, -1, 6435, -1, + 6436, -1, 6438, 6440, -1, -1, -1, -1, + -1, -1, -1, 6441, 6445, 6446, -1, 6447, + 6448, 6449, 6450, 6451, 6453, 6455, -1, 6456, + 6457, 6458, 6459, 6460, -1, 6461, 6463, 6464, + -1, -1, -1, -1, 6465, -1, -1, 6466, + -1, -1, 6467, 6468, -1, 6469, -1, 6470, + 6474, 6475, 6477, -1, 6479, 6480, 6481, 6483, + 6484, 6485, 6486, -1, 6490, 6491, 6492, -1, + 6493, 6494, -1, 6496, -1, 6498, 6499, -1, + 6500, 6501, 6502, 6503, 6507, -1, -1, 6508, + -1, 6509, 6510, -1, 6511, -1, 6512, -1, + -1, 6513, -1, 6514, 6515, -1, -1, -1, + /* 0x7e00 */ + -1, 6517, -1, -1, 6519, -1, -1, -1, + 6521, 6522, 6523, 6524, -1, -1, -1, -1, + 6525, 6526, -1, -1, -1, 6527, -1, 6529, + 6530, -1, -1, 6533, -1, 6534, 6535, 6536, + -1, -1, -1, 6537, -1, -1, 6539, 6541, + 6543, -1, -1, 6544, -1, 6545, 6546, -1, + -1, 6547, 6549, -1, 6552, 6553, 6554, 6556, + -1, 6557, -1, -1, -1, 6558, 6563, -1, + -1, 6564, -1, 6565, -1, 6567, 6569, -1, + 6570, -1, 6571, 6574, -1, 6577, -1, -1, + -1, -1, 6579, -1, 6580, 6581, 6582, -1, + -1, 6584, 6585, 6586, -1, -1, 6587, -1, + -1, 6588, 6590, -1, 6591, -1, 6592, -1, + -1, 6593, 6595, 6597, -1, 6600, 6603, 6605, + 6606, -1, -1, 6609, -1, -1, -1, -1, + -1, 6610, -1, -1, 6611, 6613, 6614, 6615, + -1, -1, 6616, 6617, -1, -1, -1, 6618, + 6619, 6620, 6622, -1, 6624, 6627, 6628, 6631, + -1, -1, 6633, 6635, 6636, -1, 6637, -1, + 6640, -1, -1, -1, 6642, 6643, -1, 6646, + 6648, 6649, 6650, 6651, 6652, 6656, 6657, 6658, + 6659, 6660, 6662, 6663, 6664, 6665, 6666, 6667, + 6668, 6669, 6670, 6671, 6672, 6673, 6675, 6676, + 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684, + 6688, 6689, 6691, 6692, 6693, 6694, 6695, 6696, + 6697, 6698, 6699, 6700, 6701, 6702, 6703, 6704, + 6706, 6707, 6708, 6709, 6710, 6711, 6713, 6714, + 6715, 6717, 6718, 6719, 6720, 6721, 6724, 6725, + 6727, 6728, 6729, 6730, 6733, 6734, 6735, 6737, + 6739, 6740, 6741, 6743, -1, 6744, 6746, 6747, + 6748, 6749, 6750, 6751, 6753, 6754, 6756, 6757, + 6759, 6761, 6762, 6763, 6764, 6765, 6766, 6767, + /* 0x7f00 */ + 6769, 6770, 6771, 6772, 6773, 6774, 6775, 6776, + 6777, 6778, 6779, 6781, 6782, 6783, 6784, 6785, + 6786, 6790, 6791, 6792, 6793, 6794, 6795, 6796, + 6797, 6799, 6800, 6801, 6802, 6803, 6804, 6805, + 6806, 6808, 6809, 6810, 6811, 6812, 6813, 6814, + 6817, 6818, 6819, 6820, 6822, 6823, 6824, 6825, + 6826, 6828, 6829, 6830, 6831, 6832, 6834, 6837, + 6838, 6839, 6840, 6842, 6843, 6845, 6848, -1, + -1, -1, 6850, -1, -1, -1, -1, 6852, + 6853, -1, -1, -1, 6858, -1, 6860, -1, + 6865, 6867, 6870, 6872, -1, -1, -1, 6874, + -1, -1, 6877, -1, -1, -1, -1, -1, + -1, -1, 6879, -1, -1, -1, -1, -1, + -1, -1, 6880, -1, -1, -1, -1, -1, + 6882, -1, -1, -1, 6884, 6885, 6888, 6889, + 6890, -1, -1, -1, -1, -1, -1, -1, + 6892, 6893, -1, 6895, -1, 6897, 6898, 6899, + 6902, -1, 6906, 6907, 6908, -1, -1, -1, + 6909, 6910, -1, -1, -1, -1, -1, 6911, + -1, -1, -1, -1, -1, -1, -1, 6912, + -1, 6913, -1, 6914, 6915, 6916, -1, -1, + 6917, 6918, 6919, -1, -1, -1, 6921, -1, + -1, -1, -1, -1, 6922, -1, 6924, -1, + -1, 6926, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6927, 6929, 6931, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6932, -1, -1, -1, -1, -1, + 6933, 6934, 6935, -1, -1, -1, -1, -1, + 6936, -1, -1, -1, 6937, -1, -1, -1, + -1, -1, -1, 6939, 6940, -1, -1, -1, + -1, 6941, -1, 6942, -1, -1, -1, -1, + -1, 6943, 6944, 6945, -1, 6947, -1, -1, + /* 0x8000 */ + 6948, -1, -1, 6949, -1, -1, -1, 6950, + 6951, -1, 6952, 6953, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6954, -1, -1, + 6955, -1, -1, -1, 6956, -1, -1, -1, + -1, 6957, 6958, -1, 6959, -1, -1, 6960, + 6961, -1, -1, -1, 6963, -1, 6964, -1, + 6965, -1, -1, -1, -1, -1, -1, -1, + 6966, -1, -1, 6967, 6968, 6969, -1, -1, + 6970, -1, 6973, 6974, -1, -1, -1, -1, + -1, -1, -1, 6975, 6976, 6979, -1, -1, + -1, -1, -1, -1, 6980, -1, 6982, -1, + -1, -1, -1, -1, -1, -1, 6984, 6985, + -1, 6987, -1, -1, -1, -1, 6990, -1, + 6993, 6995, 6996, 6999, -1, 7000, 7002, 7003, + 7007, -1, 7010, 7011, 7012, 7014, 7015, 7016, + -1, 7019, -1, -1, -1, 7020, 7022, -1, + -1, -1, -1, 7023, -1, 7025, -1, 7027, + 7028, 7029, -1, -1, -1, -1, 7030, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 7031, 7033, -1, -1, 7034, -1, -1, 7035, + -1, -1, -1, -1, 7036, -1, 7037, 7038, + -1, 7040, 7041, -1, 7043, -1, -1, -1, + -1, -1, -1, 7044, -1, -1, 7045, 7046, + 7047, 7048, -1, -1, 7051, -1, 7053, -1, + -1, -1, -1, -1, 7055, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 7056, -1, 7057, -1, -1, -1, + -1, 7058, -1, -1, -1, -1, -1, 7060, + 7061, -1, 7062, 7063, -1, 7065, -1, -1, + -1, -1, -1, -1, -1, -1, 7066, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + /* 0x8100 */ + -1, -1, -1, 7067, -1, 7069, 7071, 7073, + 7074, 7075, -1, 7076, -1, 7078, -1, 7079, + 7082, 7083, -1, 7085, 7086, -1, -1, 7087, + -1, -1, 7088, 7090, -1, -1, -1, -1, + -1, -1, -1, 7092, -1, -1, -1, -1, + -1, 7093, -1, 7094, -1, -1, -1, -1, + -1, 7095, -1, 7096, -1, 7099, 7100, -1, + 7101, 7102, 7104, -1, -1, -1, 7106, -1, + -1, -1, -1, -1, -1, -1, 7107, -1, + -1, -1, 7108, -1, 7110, -1, 7111, -1, + -1, -1, -1, -1, -1, -1, 7112, 7113, + 7114, -1, -1, -1, -1, -1, -1, 7115, + -1, 7116, -1, -1, -1, -1, 7117, -1, + -1, -1, -1, 7120, -1, 7121, 7122, -1, + -1, -1, -1, 7123, -1, -1, -1, -1, + 7125, -1, -1, 7127, -1, 7128, 7129, -1, + 7130, -1, 7131, 7132, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 7133, 7134, -1, 7135, -1, 7137, -1, -1, + -1, -1, 7138, -1, -1, -1, -1, -1, + 7139, -1, -1, 7140, 7141, -1, -1, -1, + -1, 7142, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 7143, -1, -1, -1, -1, + 7144, -1, -1, 7146, -1, 7150, 7152, 7153, + 7154, -1, -1, 7155, -1, -1, -1, -1, + 7157, 7159, -1, 7160, -1, 7161, -1, 7162, + -1, -1, -1, 7164, -1, -1, -1, -1, + 7166, 7168, 7169, -1, 7170, -1, 7171, 7172, + 7174, -1, 7175, -1, -1, 7176, -1, -1, + 7177, -1, -1, -1, -1, 7178, -1, -1, + 7179, -1, -1, -1, 7180, -1, -1, -1, + -1, -1, 7181, -1, -1, -1, -1, -1, + /* 0x8200 */ + -1, -1, -1, -1, -1, -1, 7183, 7184, + 7185, 7186, 7189, -1, -1, 7190, 7192, -1, + 7193, -1, -1, 7194, -1, -1, 7195, 7198, + 7201, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 7202, -1, -1, -1, -1, + -1, 7203, -1, -1, -1, -1, 7204, -1, + 7206, 7207, -1, -1, -1, 7208, 7209, -1, + -1, 7210, -1, 7211, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 7213, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7214, -1, -1, -1, -1, -1, -1, + -1, -1, 7215, 7216, 7218, -1, 7219, -1, + -1, -1, 7220, 7222, -1, -1, -1, -1, + 7224, 7225, -1, 7227, -1, -1, 7231, 7235, + 7239, 7240, 7241, -1, -1, -1, -1, -1, + -1, -1, 7246, -1, -1, -1, -1, -1, + 7247, -1, -1, 7249, 7250, -1, -1, -1, + -1, -1, -1, -1, 7251, -1, -1, 7252, + -1, -1, -1, -1, 7253, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 7254, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7255, 7256, -1, -1, -1, -1, -1, + 7257, -1, -1, 7264, -1, -1, -1, -1, + -1, 7265, -1, -1, -1, 7266, -1, 7268, + 7269, -1, -1, 7270, 7271, 7272, 7273, 7274, + 7279, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7280, 7281, -1, -1, -1, -1, 7282, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7283, -1, -1, -1, -1, -1, -1, + -1, 7284, 7286, -1, -1, 7287, -1, -1, + /* 0x8300 */ + -1, -1, -1, 7288, -1, -1, -1, -1, + -1, -1, 7290, -1, -1, -1, 7292, 7293, + -1, 7294, -1, -1, 7295, 7296, -1, -1, + 7297, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 7298, + -1, -1, -1, -1, -1, -1, -1, 7300, + 7301, -1, 7302, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 7304, 7305, + -1, -1, 7306, -1, -1, -1, -1, -1, + 7307, 7309, -1, -1, 7310, -1, -1, -1, + 7311, 7313, 7314, 7315, 7316, 7317, 7318, 7319, + 7320, 7322, -1, 7325, 7327, 7328, 7329, 7330, + 7331, 7332, 7333, 7334, 7335, 7336, 7337, 7338, + -1, -1, -1, 7341, -1, -1, -1, -1, + -1, 7342, -1, 7343, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 7344, -1, -1, + -1, -1, 7346, -1, -1, -1, -1, -1, + -1, -1, -1, 7348, -1, 7349, 7350, -1, + -1, -1, -1, -1, -1, -1, 7351, -1, + -1, -1, 7352, -1, -1, -1, -1, 7353, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7354, 7355, 7356, 7357, 7358, 7359, 7360, + 7362, 7363, 7364, -1, 7367, 7369, 7370, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7371, -1, 7372, 7373, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 7375, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 7376, -1, -1, -1, 7377, + 7380, 7381, -1, -1, 7382, -1, -1, -1, + -1, 7385, -1, -1, -1, -1, -1, -1, + /* 0x8400 */ + -1, -1, -1, -1, -1, -1, -1, 7386, + -1, -1, 7387, -1, 7388, 7389, -1, -1, + -1, -1, -1, -1, -1, 7390, -1, -1, + -1, -1, 7392, -1, -1, 7393, -1, 7394, + 7399, -1, -1, -1, 7400, 7402, 7404, 7405, + 7406, -1, -1, -1, 7407, -1, -1, -1, + -1, 7408, -1, -1, 7411, 7412, -1, -1, + 7413, -1, -1, -1, 7414, -1, -1, -1, + -1, -1, -1, -1, -1, 7415, -1, -1, + -1, 7416, 7417, -1, -1, -1, -1, -1, + -1, -1, 7420, -1, -1, -1, -1, 7421, + 7422, -1, 7423, -1, -1, -1, -1, -1, + 7424, -1, 7425, -1, 7427, -1, 7428, -1, + -1, -1, 7429, -1, 7430, -1, 7431, 7432, + -1, 7433, -1, -1, -1, -1, -1, 7434, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 7435, 7436, -1, -1, -1, 7437, + -1, 7438, -1, 7439, 7440, -1, -1, -1, + 7441, -1, -1, 7442, 7444, -1, -1, -1, + -1, 7445, -1, -1, -1, -1, 7449, -1, + -1, -1, -1, -1, -1, -1, 7451, -1, + 7452, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 7453, + -1, -1, -1, -1, 7454, -1, -1, -1, + 7455, -1, -1, -1, -1, -1, 7456, -1, + -1, -1, -1, 7457, -1, -1, -1, -1, + -1, 7459, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 7461, -1, 7462, + 7463, -1, -1, 7464, -1, 7465, 7466, -1, + -1, -1, -1, -1, -1, 7467, 7470, 7471, + -1, 7472, -1, -1, 7473, -1, -1, -1, + -1, -1, 7475, -1, -1, 7480, -1, -1, + /* 0x8500 */ + -1, -1, -1, -1, -1, 7481, 7483, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 7484, 7485, -1, -1, 7486, 7488, -1, -1, + -1, -1, -1, -1, -1, -1, 7489, -1, + -1, -1, -1, 7490, -1, 7491, 7492, -1, + -1, -1, -1, -1, -1, 7493, -1, 7494, + -1, -1, 7495, 7496, 7497, 7498, 7500, 7502, + -1, 7503, 7504, 7505, 7506, -1, -1, -1, + -1, 7508, -1, -1, -1, -1, 7509, -1, + -1, -1, 7510, 7512, -1, -1, 7514, -1, + 7515, -1, 7517, 7518, -1, 7519, -1, -1, + 7520, -1, 7521, -1, -1, -1, -1, -1, + -1, -1, 7522, -1, -1, -1, -1, -1, + -1, 7523, 7524, -1, -1, 7525, -1, -1, + 7526, -1, 7527, -1, 7528, -1, -1, 7530, + -1, -1, -1, -1, -1, -1, -1, 7531, + 7534, -1, -1, -1, -1, -1, -1, -1, + 7535, -1, 7536, -1, 7538, -1, -1, -1, + -1, 7539, -1, 7540, 7541, -1, -1, 7542, + 7544, -1, -1, -1, -1, -1, -1, 7545, + -1, -1, -1, -1, -1, -1, 7546, -1, + -1, 7548, -1, 7549, 7551, 7553, 7554, 7556, + 7557, -1, 7559, -1, -1, -1, -1, -1, + -1, -1, 7561, -1, 7563, -1, -1, -1, + -1, 7564, 7568, -1, -1, -1, -1, -1, + -1, 7572, -1, -1, -1, 7575, 7576, 7577, + -1, -1, -1, 7579, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 7580, -1, 7585, + -1, -1, -1, -1, 7587, 7588, -1, -1, + -1, -1, 7590, -1, -1, -1, -1, -1, + -1, -1, -1, 7592, 7596, -1, 7598, 7599, + -1, 7600, 7602, -1, 7603, -1, -1, -1, + /* 0x8600 */ + 7606, -1, 7607, -1, 7609, -1, 7610, 7611, + -1, -1, 7615, 7617, -1, 7619, 7621, -1, + 7623, -1, -1, 7626, -1, -1, -1, 7628, + -1, -1, 7629, -1, -1, -1, 7630, -1, + -1, -1, 7631, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 7632, -1, 7633, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 7635, -1, -1, 7636, -1, 7638, + -1, 7639, -1, -1, -1, -1, 7640, -1, + -1, -1, -1, -1, -1, -1, 7642, 7644, + -1, 7645, -1, 7646, -1, 7647, 7649, 7650, + -1, -1, 7652, 7654, 7656, 7657, -1, 7659, + -1, -1, -1, -1, -1, 7660, 7661, 7662, + -1, -1, -1, 7663, 7665, -1, 7666, 7667, + -1, 7668, -1, -1, -1, 7669, -1, -1, + -1, -1, 7671, 7672, -1, 7673, 7674, 7675, + 7676, 7677, 7678, 7679, -1, -1, -1, -1, + -1, -1, 7680, 7682, 7683, -1, -1, -1, + -1, -1, -1, -1, -1, 7684, 7687, -1, + 7688, -1, -1, -1, -1, 7689, -1, -1, + -1, -1, -1, -1, -1, -1, 7690, -1, + -1, -1, -1, 7691, 7692, -1, -1, -1, + -1, -1, -1, -1, 7693, -1, -1, -1, + -1, -1, 7694, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 7695, + -1, -1, 7697, -1, -1, 7698, 7700, 7702, + -1, -1, -1, -1, 7703, -1, -1, -1, + -1, 7706, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 7707, 7708, + 7709, 7710, 7711, 7712, 7713, -1, -1, -1, + -1, -1, 7714, 7715, -1, 7716, -1, -1, + /* 0x8700 */ + -1, -1, 7718, -1, -1, -1, 7719, -1, + -1, -1, -1, 7720, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 7721, 7722, 7723, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7724, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 7726, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7727, -1, -1, -1, 7728, -1, -1, + -1, -1, -1, -1, -1, 7729, -1, 7732, + 7734, 7735, -1, 7736, -1, -1, 7738, -1, + -1, -1, -1, -1, -1, 7739, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 7740, + -1, 7741, -1, -1, -1, -1, 7742, -1, + 7743, -1, -1, -1, -1, -1, -1, 7744, + -1, 7745, -1, -1, -1, -1, -1, -1, + 7746, -1, -1, -1, 7747, -1, 7748, 7749, + 7751, -1, 7752, -1, 7753, -1, -1, -1, + 7754, -1, -1, -1, -1, 7755, 7756, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 7757, 7758, -1, -1, -1, -1, 7760, -1, + -1, 7761, 7762, -1, 7764, -1, -1, 7766, + 7767, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 7768, -1, -1, -1, 7769, + -1, 7770, -1, -1, 7771, -1, 7772, 7773, + 7774, -1, -1, -1, -1, -1, 7775, 7776, + -1, -1, 7777, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 7778, -1, -1, -1, -1, + -1, -1, -1, -1, 7779, -1, -1, 7780, + -1, -1, 7781, -1, -1, -1, 7782, -1, + 7783, 7784, -1, 7785, -1, -1, -1, -1, + /* 0x8800 */ + -1, 7787, -1, -1, -1, 7788, 7790, 7791, + -1, -1, -1, -1, -1, 7793, 7794, 7795, + 7796, 7797, 7798, -1, 7801, 7802, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 7803, + -1, 7805, 7806, 7807, -1, -1, -1, 7809, + 7811, -1, -1, -1, -1, 7812, -1, -1, + -1, 7813, -1, -1, -1, -1, 7814, -1, + -1, 7817, 7819, 7822, 7823, -1, -1, -1, + -1, -1, 7825, -1, 7826, 7827, 7828, -1, + -1, 7831, 7833, -1, -1, -1, -1, -1, + -1, -1, -1, 7834, 7835, 7838, 7839, -1, + 7840, -1, 7843, 7844, 7846, 7849, 7850, 7852, + -1, -1, -1, 7855, 7856, 7857, -1, -1, + 7858, -1, -1, -1, 7859, -1, 7860, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7861, -1, -1, -1, 7862, -1, -1, + -1, -1, -1, -1, 7863, 7864, 7867, -1, + -1, -1, -1, 7868, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 7869, -1, 7872, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 7873, 7875, 7876, 7877, + -1, -1, -1, -1, 7878, 7880, -1, 7881, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 7882, 7883, -1, + 7884, -1, 7885, -1, 7886, -1, -1, 7887, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 7889, -1, -1, 7890, 7891, -1, -1, + 7892, 7893, 7895, 7896, 7897, 7899, 7900, -1, + 7902, -1, -1, -1, -1, 7903, -1, -1, + -1, -1, -1, -1, 7904, 7905, -1, -1, + -1, -1, -1, -1, -1, 7906, -1, -1, + /* 0x8900 */ + -1, -1, -1, -1, -1, -1, -1, 7907, + -1, -1, 7908, -1, 7909, -1, 7910, 7911, + -1, -1, 7912, 7914, -1, -1, -1, -1, + 7915, -1, -1, 7916, -1, 7917, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 7918, -1, -1, -1, -1, + -1, -1, 7919, 7920, 7921, -1, -1, -1, + 7922, -1, -1, 7923, -1, -1, -1, -1, + -1, -1, -1, 7924, -1, -1, -1, 7926, + -1, -1, -1, -1, 7927, 7928, -1, 7929, + -1, -1, -1, -1, -1, 7930, 7931, -1, + -1, -1, -1, -1, -1, 7932, -1, -1, + 7933, -1, -1, -1, 7934, -1, -1, -1, + -1, -1, 7935, -1, 7936, 7937, -1, 7938, + -1, -1, 7939, -1, 7940, -1, -1, -1, + -1, -1, -1, -1, -1, 7942, -1, 7943, + -1, -1, -1, -1, -1, -1, 7945, 7947, + 7948, 7949, 7952, 7956, -1, 7957, 7958, 7959, + 7960, -1, -1, 7963, 7965, -1, 7967, -1, + 7969, -1, 7970, -1, -1, -1, -1, -1, + -1, 7973, -1, -1, -1, 7974, 7975, 7976, + -1, 7978, 7979, -1, 7980, -1, -1, 7981, + 7982, -1, 7983, 7984, -1, -1, 7986, 7987, + -1, -1, 7989, -1, 7993, 7994, -1, 7996, + 7997, 7999, 8000, 8002, 8003, 8004, 8006, 8008, + 8009, 8011, 8014, 8015, 8016, 8017, 8018, 8019, + 8020, 8021, -1, -1, 8022, -1, -1, 8023, + -1, -1, -1, -1, -1, 8025, 8026, -1, + -1, -1, -1, 8027, -1, -1, 8028, 8029, + -1, -1, -1, -1, -1, -1, -1, 8030, + -1, -1, -1, -1, 8032, -1, 8033, -1, + 8035, 8036, -1, -1, -1, 8038, -1, 8040, + /* 0x8a00 */ + 8042, 8044, 8046, 8047, -1, -1, -1, -1, + 8048, -1, 8049, -1, 8050, -1, 8051, -1, + 8052, -1, 8053, 8054, -1, 8055, 8056, 8057, + 8059, -1, 8060, 8061, -1, 8062, -1, 8063, + 8064, 8066, 8068, 8069, -1, 8070, -1, -1, + -1, 8071, 8072, 8073, -1, 8074, -1, -1, + -1, 8075, -1, 8076, 8078, -1, 8079, -1, + -1, -1, 8081, 8082, 8083, 8085, -1, -1, + -1, 8086, -1, -1, -1, -1, 8087, -1, + -1, -1, -1, 8089, -1, 8091, 8092, -1, + 8093, -1, 8094, -1, 8095, 8096, 8097, 8098, + 8099, -1, -1, 8100, -1, -1, 8101, 8102, + 8103, 8104, 8105, 8106, -1, -1, 8107, 8108, + -1, 8109, -1, 8110, 8111, 8113, 8114, -1, + 8115, 8116, 8118, 8119, -1, 8120, -1, -1, + -1, -1, -1, -1, 8121, -1, -1, 8122, + -1, -1, -1, -1, 8123, 8124, 8125, 8126, + -1, 8127, 8128, -1, 8129, 8130, -1, -1, + -1, 8131, 8132, -1, -1, 8133, 8134, -1, + 8136, -1, 8138, -1, -1, -1, 8139, -1, + 8140, 8141, -1, 8142, 8143, 8144, 8145, -1, + 8146, -1, 8147, -1, 8149, 8151, -1, 8153, + 8154, -1, 8155, -1, -1, -1, 8156, -1, + -1, 8157, -1, -1, 8158, -1, 8160, 8161, + -1, -1, 8162, -1, 8163, -1, -1, 8164, + -1, 8165, -1, 8166, 8167, 8169, -1, 8170, + -1, 8171, 8172, -1, -1, -1, 8173, 8174, + -1, -1, -1, 8175, 8176, 8177, 8178, -1, + 8179, 8181, 8183, -1, 8184, -1, 8186, 8187, + -1, 8188, -1, 8189, 8191, 8197, 8198, -1, + -1, 8199, -1, 8200, -1, -1, 8202, 8203, + 8205, -1, 8206, -1, 8207, -1, 8209, -1, + /* 0x8b00 */ + 8210, 8211, 8212, -1, 8213, 8214, -1, -1, + -1, -1, 8215, -1, 8216, -1, 8217, -1, + 8218, -1, -1, -1, 8219, -1, 8220, 8221, + -1, 8222, 8223, 8225, -1, 8226, -1, -1, + 8227, 8229, -1, -1, -1, -1, -1, -1, + 8231, -1, 8232, 8233, 8235, 8236, -1, -1, + 8238, -1, -1, 8239, -1, -1, -1, -1, + -1, 8240, -1, -1, 8241, -1, 8243, -1, + -1, 8244, -1, -1, -1, -1, -1, -1, + -1, 8246, -1, -1, 8248, -1, 8249, 8250, + 8251, -1, -1, -1, -1, -1, 8252, -1, + 8254, 8255, 8256, 8257, 8259, -1, -1, 8261, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 8262, 8264, -1, 8266, 8267, 8269, + 8271, 8272, 8273, -1, 8275, -1, -1, 8276, + 8277, -1, -1, -1, 8278, 8280, 8281, -1, + 8283, 8285, -1, 8287, -1, 8289, -1, -1, + -1, -1, 8290, 8292, 8293, 8295, 8297, -1, + 8300, -1, 8302, 8303, -1, 8305, 8306, -1, + -1, -1, 8307, -1, 8309, -1, 8310, -1, + 8311, 8313, 8314, 8315, 8316, 8317, 8318, 8319, + 8320, 8321, 8323, 8324, 8325, 8327, 8328, 8329, + 8330, 8331, 8332, 8333, 8334, 8335, 8336, 8337, + 8338, 8339, 8341, 8342, 8343, 8344, 8346, 8347, + 8348, 8349, 8351, 8352, 8353, 8354, 8355, 8356, + 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, + 8365, 8366, 8368, 8369, 8370, 8371, 8372, 8373, + 8374, 8375, 8376, 8377, 8378, 8379, 8381, 8382, + 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, + 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, + 8400, 8401, 8403, 8404, 8405, 8407, 8408, 8409, + 8410, 8411, 8412, 8413, 8415, 8416, 8417, 8418, + /* 0x8c00 */ + 8419, 8420, 8421, 8422, 8423, 8424, 8425, 8426, + 8427, 8428, 8429, 8431, 8432, 8433, 8434, 8435, + 8437, 8438, 8439, 8440, 8441, 8443, 8444, 8446, + 8447, 8448, 8450, 8451, 8452, 8453, 8454, 8455, + 8456, 8457, 8458, 8459, 8461, 8462, 8464, 8465, + 8466, 8467, 8468, 8470, 8472, 8473, 8474, 8476, + 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, + -1, -1, 8486, -1, -1, -1, -1, 8487, + 8490, -1, -1, -1, -1, -1, 8493, -1, + 8494, -1, 8495, -1, -1, -1, 8499, -1, + 8501, -1, -1, 8505, 8509, -1, -1, -1, + 8513, -1, 8514, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 8515, -1, -1, -1, + -1, -1, -1, 8516, 8517, -1, 8518, -1, + -1, -1, -1, -1, -1, -1, 8519, -1, + -1, -1, 8520, 8521, 8522, -1, 8523, -1, + -1, -1, 8524, -1, -1, -1, -1, 8525, + -1, 8526, -1, 8527, 8528, 8529, 8531, -1, + -1, -1, 8532, 8533, 8534, -1, -1, -1, + 8535, -1, -1, 8536, 8537, 8539, 8541, 8542, + 8545, 8546, 8548, -1, -1, -1, -1, 8549, + 8550, 8551, 8552, 8553, 8554, 8555, 8558, 8561, + 8562, -1, 8563, 8564, 8567, -1, 8568, 8569, + 8570, -1, 8571, 8572, 8573, 8574, -1, 8575, + 8576, 8577, 8578, 8579, 8580, 8581, -1, 8582, + 8583, 8584, 8586, 8587, -1, 8588, 8590, -1, + -1, 8592, 8593, 8594, 8596, 8598, 8599, -1, + -1, 8600, 8601, 8602, 8604, -1, 8605, -1, + 8606, 8607, 8610, 8612, 8614, -1, 8616, 8617, + -1, -1, 8618, 8621, 8622, 8623, -1, -1, + 8624, -1, -1, -1, 8625, 8627, -1, 8628, + -1, -1, 8630, 8631, 8632, 8633, 8634, -1, + /* 0x8d00 */ + -1, 8635, -1, -1, 8637, 8638, -1, 8639, + 8640, -1, 8641, 8643, -1, 8646, -1, 8647, + 8648, -1, 8649, 8651, 8653, -1, 8654, 8655, + -1, -1, -1, 8658, 8659, 8660, 8662, 8663, + 8664, 8667, 8668, 8670, 8671, 8673, 8675, 8676, + 8677, 8679, 8680, 8681, 8682, 8683, 8684, 8685, + 8686, 8689, 8691, 8692, 8693, 8694, 8695, 8696, + 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, + 8705, 8706, 8707, 8708, 8711, 8712, 8713, 8714, + 8715, 8716, 8717, 8719, 8720, 8721, 8724, 8725, + 8726, 8727, 8728, 8729, 8730, 8731, 8732, 8734, + 8735, 8736, 8737, 8738, 8739, 8740, 8743, 8747, + 8748, 8749, 8750, 8751, 8752, -1, -1, -1, + -1, -1, 8754, -1, 8755, -1, -1, -1, + 8756, 8757, -1, -1, -1, 8758, 8759, -1, + -1, -1, -1, 8760, -1, -1, -1, 8765, + -1, 8766, 8767, -1, -1, -1, -1, -1, + -1, -1, -1, 8768, -1, -1, -1, -1, + -1, 8769, -1, -1, -1, 8770, -1, -1, + -1, 8771, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 8772, -1, + 8773, -1, -1, -1, 8774, -1, -1, 8775, + -1, 8777, 8778, -1, -1, -1, -1, -1, + 8779, -1, -1, 8780, -1, -1, -1, -1, + -1, -1, -1, 8781, 8783, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 8784, -1, + -1, 8785, -1, -1, -1, 8786, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 8787, 8788, 8789, 8790, + 8791, 8792, 8793, 8794, 8795, -1, -1, -1, + /* 0x8e00 */ + -1, 8796, -1, -1, -1, -1, -1, -1, + 8798, -1, 8800, 8801, 8803, -1, -1, -1, + 8804, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 8805, 8806, 8807, 8808, 8809, -1, -1, 8810, + 8811, -1, -1, -1, 8812, -1, -1, -1, + 8813, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 8814, -1, -1, -1, + -1, -1, -1, 8815, 8817, -1, -1, 8818, + -1, 8819, 8820, -1, -1, 8821, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 8822, + -1, -1, -1, 8823, 8824, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 8826, -1, -1, -1, -1, -1, -1, -1, + -1, 8828, 8830, -1, -1, -1, -1, 8832, + -1, -1, 8833, 8834, 8835, -1, -1, 8836, + -1, 8837, 8838, 8841, -1, 8843, -1, 8845, + -1, 8846, 8847, 8848, -1, 8849, -1, -1, + -1, 8851, 8852, -1, 8853, -1, -1, -1, + -1, 8854, 8855, -1, -1, 8857, 8858, -1, + -1, -1, 8859, -1, 8861, 8862, -1, 8863, + 8864, 8868, 8869, 8870, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 8871, -1, -1, -1, 8872, -1, 8875, -1, + -1, -1, 8879, 8880, 8881, 8882, -1, -1, + -1, 8883, 8884, -1, 8885, -1, -1, -1, + -1, -1, -1, 8886, -1, -1, -1, 8889, + -1, -1, 8890, 8892, 8894, -1, -1, -1, + -1, -1, -1, 8895, -1, -1, -1, -1, + 8896, -1, 8898, -1, -1, -1, 8899, -1, + 8902, 8903, 8904, 8905, 8906, 8907, 8909, -1, + /* 0x8f00 */ + 8910, -1, -1, 8911, -1, 8912, -1, 8913, + 8914, 8915, 8916, -1, 8917, -1, -1, 8919, + -1, -1, 8920, 8922, 8923, 8925, -1, -1, + -1, 8927, -1, 8929, 8931, 8933, 8934, 8935, + -1, 8936, -1, -1, -1, 8937, 8938, -1, + -1, 8939, 8941, -1, 8942, 8943, -1, 8944, + -1, -1, -1, 8945, -1, -1, 8946, -1, + 8947, -1, 8948, 8950, 8951, -1, 8952, 8953, + -1, 8954, 8957, -1, 8958, 8960, 8961, -1, + -1, 8962, -1, -1, -1, 8964, 8965, -1, + -1, -1, -1, -1, 8966, -1, -1, 8967, + -1, -1, -1, -1, 8968, -1, -1, 8969, + -1, 8971, 8972, -1, 8973, -1, 8974, 8975, + 8976, 8977, 8978, 8979, 8980, 8982, 8985, 8986, + 8988, 8990, 8991, 8992, 8993, 8994, 8995, 8996, + 8997, 8998, 8999, 9000, 9002, 9003, 9004, 9005, + 9006, 9007, 9008, 9009, 9010, 9012, 9013, 9015, + 9016, 9018, 9019, 9020, 9021, 9022, 9023, 9025, + 9026, 9027, 9028, 9029, 9030, 9031, 9032, 9033, + 9034, 9035, 9036, -1, -1, 9037, 9040, 9043, + 9044, 9046, -1, -1, 9049, -1, 9052, 9053, + 9055, 9057, -1, 9060, -1, 9061, 9064, 9065, + -1, -1, 9068, -1, -1, 9069, 9070, -1, + -1, 9071, 9074, -1, -1, 9077, 9078, -1, + -1, 9080, 9081, 9082, -1, -1, 9083, 9084, + 9085, -1, 9086, -1, -1, -1, -1, -1, + 9088, -1, -1, -1, -1, -1, -1, -1, + 9089, 9090, -1, 9091, 9092, 9093, 9094, 9095, + -1, -1, -1, -1, 9098, 9099, -1, -1, + -1, 9100, 9101, -1, 9102, -1, -1, 9103, + -1, -1, -1, 9104, 9107, -1, -1, -1, + -1, 9113, 9115, -1, -1, -1, -1, -1, + /* 0x9000 */ + -1, -1, 9117, 9118, -1, -1, -1, -1, + 9119, 9120, 9121, -1, -1, -1, 9122, -1, + -1, -1, 9123, 9125, -1, 9127, -1, -1, + -1, 9130, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 9131, -1, 9132, 9138, -1, + -1, 9139, -1, -1, -1, -1, -1, -1, + 9140, 9142, 9143, -1, -1, -1, -1, -1, + -1, 9144, 9146, 9147, 9148, -1, -1, -1, + -1, 9149, -1, -1, -1, 9150, -1, -1, + -1, 9152, 9154, 9156, -1, -1, 9157, -1, + -1, -1, 9158, 9159, 9162, 9164, -1, 9165, + -1, 9166, -1, -1, 9167, -1, 9168, -1, + 9170, 9172, -1, -1, -1, 9173, -1, -1, + -1, 9174, -1, -1, -1, -1, -1, 9175, + -1, -1, 9176, -1, -1, -1, 9178, 9179, + 9180, -1, 9181, -1, 9182, -1, -1, -1, + -1, 9183, -1, -1, 9184, -1, -1, 9185, + -1, 9186, 9189, -1, -1, -1, -1, 9192, + 9193, 9194, -1, 9195, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 9196, -1, -1, + -1, -1, -1, -1, -1, -1, 9197, -1, + 9198, -1, -1, 9199, 9200, -1, 9201, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 9202, 9203, 9204, -1, 9207, -1, -1, + -1, 9208, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 9211, -1, 9212, 9214, + 9215, 9216, 9217, 9219, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 9220, 9222, + -1, -1, -1, -1, -1, -1, 9223, 9224, + 9225, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 9226, 9227, 9228, + 9232, -1, -1, -1, -1, -1, -1, -1, + /* 0x9100 */ + -1, -1, -1, -1, -1, -1, 9233, -1, + -1, 9234, 9238, -1, -1, -1, -1, -1, + -1, -1, 9242, -1, 9243, 9244, 9248, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 9249, + -1, -1, -1, -1, -1, 9250, -1, -1, + 9251, -1, 9254, -1, 9255, -1, 9256, 9257, + -1, -1, 9258, -1, 9259, 9260, -1, -1, + -1, -1, 9263, -1, -1, -1, 9264, 9265, + 9267, 9268, -1, 9269, -1, -1, -1, -1, + -1, -1, -1, -1, 9270, -1, -1, -1, + -1, 9271, -1, -1, -1, 9272, -1, -1, + -1, -1, 9274, -1, -1, -1, 9275, 9278, + -1, -1, 9280, -1, 9281, -1, -1, -1, + -1, 9283, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 9285, 9286, 9287, + -1, -1, -1, 9289, -1, -1, -1, 9290, + -1, 9291, 9292, 9293, -1, -1, 9294, -1, + -1, -1, -1, -1, 9296, 9297, 9298, 9300, + 9303, -1, -1, -1, 9304, -1, 9306, -1, + -1, -1, -1, -1, 9308, -1, -1, -1, + -1, -1, -1, 9310, 9312, -1, -1, -1, + -1, 9314, -1, -1, -1, -1, -1, -1, + 9317, -1, -1, 9319, 9321, -1, -1, -1, + 9323, 9325, -1, 9326, -1, 9327, -1, 9328, + 9330, -1, 9332, 9334, 9336, -1, 9338, -1, + 9340, 9341, 9343, 9345, 9348, 9349, 9350, 9352, + 9353, 9354, 9355, -1, 9357, 9358, -1, -1, + 9359, 9361, -1, 9362, 9364, -1, 9365, 9366, + -1, 9367, -1, -1, -1, -1, -1, 9368, + 9369, -1, -1, -1, -1, 9377, -1, 9378, + -1, 9379, 9380, 9381, 9384, -1, -1, -1, + /* 0x9200 */ + 9392, 9393, -1, 9394, 9395, 9396, 9397, -1, + 9399, 9400, -1, -1, -1, 9401, 9402, -1, + 9404, 9405, 9406, -1, 9407, 9408, -1, -1, + -1, -1, -1, -1, -1, -1, 9409, 9411, + -1, 9412, -1, 9413, -1, 9414, 9415, 9416, + 9417, 9418, -1, -1, 9420, -1, 9422, -1, + 9424, -1, -1, 9425, 9426, -1, -1, 9427, + 9428, 9429, 9430, -1, -1, 9431, 9432, 9433, + 9434, -1, -1, -1, 9435, 9440, 9441, 9442, + 9443, 9444, -1, 9445, -1, 9447, -1, -1, + -1, 9448, -1, -1, -1, 9449, -1, 9450, + -1, -1, 9451, 9452, -1, -1, 9454, -1, + 9455, -1, 9456, -1, 9459, -1, 9461, -1, + 9462, -1, -1, -1, 9464, 9465, -1, -1, + -1, 9466, -1, -1, 9471, -1, 9475, -1, + 9476, -1, 9477, 9478, -1, -1, -1, 9479, + 9480, -1, -1, 9481, -1, 9482, -1, -1, + -1, -1, -1, -1, -1, 9483, -1, -1, + -1, 9484, -1, 9485, -1, 9486, 9490, -1, + 9491, -1, 9492, 9494, 9496, -1, 9499, -1, + 9500, -1, -1, 9501, -1, 9502, 9503, -1, + 9504, 9505, 9506, 9507, 9508, 9509, 9511, -1, + -1, 9512, 9513, 9514, -1, -1, -1, 9516, + -1, 9518, -1, 9519, 9520, 9521, -1, -1, + -1, 9522, -1, 9523, -1, 9524, -1, 9525, + -1, -1, -1, -1, 9526, -1, -1, 9527, + -1, -1, 9528, -1, -1, -1, -1, -1, + -1, 9529, -1, 9530, -1, 9535, -1, 9536, + -1, -1, -1, 9538, 9540, 9541, 9542, -1, + 9543, 9548, 9550, -1, -1, 9553, 9555, 9556, + 9557, 9558, -1, 9559, -1, -1, 9561, -1, + 9562, -1, -1, -1, 9563, -1, -1, -1, + /* 0x9300 */ + -1, 9564, -1, -1, 9565, -1, 9567, 9568, + 9569, -1, -1, -1, -1, -1, -1, 9570, + 9572, -1, 9573, -1, -1, 9574, -1, -1, + 9575, 9576, 9578, 9579, -1, -1, -1, 9580, + 9581, 9582, 9583, -1, -1, -1, 9585, -1, + 9586, 9587, -1, 9588, 9589, -1, 9592, 9593, + -1, -1, 9594, 9596, -1, -1, 9597, 9598, + 9599, -1, -1, -1, -1, -1, 9600, -1, + 9601, 9602, -1, 9603, -1, -1, 9604, 9605, + 9606, -1, 9608, 9611, -1, 9612, -1, -1, + -1, -1, -1, -1, 9613, -1, -1, -1, + 9614, -1, 9615, 9616, -1, -1, 9618, -1, + 9619, -1, -1, -1, 9621, 9622, -1, -1, + -1, 9623, -1, -1, 9624, -1, -1, 9625, + 9627, -1, -1, 9628, -1, 9632, 9633, -1, + -1, -1, 9634, -1, -1, -1, 9635, 9637, + -1, 9638, 9639, -1, 9640, -1, -1, 9641, + -1, -1, 9642, 9643, 9644, -1, -1, -1, + -1, -1, 9646, -1, 9648, -1, 9650, 9652, + 9653, -1, 9654, 9655, -1, -1, -1, -1, + -1, 9656, 9658, 9659, -1, -1, 9660, 9662, + -1, 9663, 9664, -1, 9665, 9666, 9668, -1, + 9670, -1, -1, 9671, -1, 9672, -1, -1, + 9673, -1, 9674, -1, -1, -1, -1, 9675, + -1, 9676, -1, 9677, -1, -1, -1, 9678, + 9679, -1, -1, -1, 9680, 9681, -1, -1, + 9682, 9683, -1, 9684, -1, -1, -1, 9685, + 9686, -1, -1, -1, 9687, 9688, 9689, 9690, + -1, 9694, 9696, -1, 9697, 9698, -1, -1, + 9700, -1, -1, -1, -1, -1, -1, -1, + 9701, -1, -1, -1, -1, 9702, -1, 9703, + -1, 9704, -1, -1, -1, 9705, -1, -1, + /* 0x9400 */ + -1, -1, 9707, 9709, -1, -1, -1, -1, + -1, -1, -1, 9710, -1, -1, -1, -1, + 9711, -1, 9712, 9713, 9714, -1, -1, 9715, + 9716, 9717, 9718, -1, -1, 9720, -1, -1, + 9722, 9723, -1, -1, -1, -1, 9728, 9729, + 9730, -1, -1, 9731, -1, -1, 9732, -1, + -1, -1, 9734, 9735, -1, 9736, 9741, -1, + 9742, -1, 9744, -1, -1, -1, -1, 9745, + -1, -1, -1, 9746, 9748, 9750, -1, -1, + -1, -1, 9751, -1, 9752, -1, -1, -1, + -1, 9753, 9757, 9761, 9762, 9763, -1, -1, + -1, -1, 9764, 9766, 9771, -1, 9773, -1, + 9774, -1, -1, 9775, 9776, 9777, -1, -1, + -1, -1, 9778, -1, 9780, 9784, -1, 9785, + 9786, 9787, 9788, -1, -1, 9789, -1, 9791, + -1, 9792, -1, -1, 9793, 9794, 9796, 9797, + -1, 9798, 9800, -1, -1, 9801, 9803, 9806, + 9807, 9808, 9809, 9810, 9811, 9812, 9813, 9814, + 9815, 9816, 9817, 9818, 9819, 9820, 9821, 9822, + 9823, 9824, 9825, 9826, 9827, 9828, 9829, 9830, + 9834, 9835, 9836, 9837, 9838, 9839, 9841, 9842, + 9843, 9844, 9846, 9847, 9848, 9849, 9850, 9851, + 9852, 9853, 9855, 9856, 9857, 9858, 9861, 9862, + 9863, 9864, 9865, 9866, 9869, 9870, 9871, 9872, + 9873, 9874, 9877, 9878, 9879, 9880, 9882, 9883, + 9885, 9886, 9887, 9889, 9890, 9892, 9893, 9895, + 9896, 9897, 9898, 9899, 9900, 9902, 9903, 9904, + 9905, 9906, 9907, 9908, 9909, 9910, 9911, 9912, + 9913, 9914, 9915, 9916, 9917, 9918, 9919, 9920, + 9921, 9922, 9923, 9924, 9926, 9927, 9928, 9929, + 9930, 9931, 9932, 9936, 9937, 9938, 9939, 9940, + 9941, 9943, 9944, 9947, 9948, 9949, 9950, 9951, + /* 0x9500 */ + 9953, 9954, 9955, 9956, 9957, 9959, 9960, 9961, + 9962, 9965, 9966, 9967, 9968, 9969, 9970, 9971, + 9973, 9975, 9976, 9977, 9978, 9979, 9980, 9981, + 9982, 9983, 9984, 9985, 9986, 9987, 9988, 9989, + 9990, 9991, 9992, 9993, 9994, 9996, 9997, 9998, + 9999, 10000, 10001, 10003, 10004, 10005, 10006, 10007, + 10008, 10009, 10010, 10011, 10012, 10013, 10014, 10015, + 10016, 10017, 10018, 10020, 10021, 10022, 10023, 10024, + 10025, 10026, 10027, 10028, 10029, 10030, 10031, 10032, + 10034, 10035, 10036, 10037, 10038, 10040, 10041, 10042, + 10044, 10045, 10046, 10047, 10048, -1, 10049, 10050, + 10051, 10052, 10053, 10054, 10055, 10056, 10057, 10058, + 10059, 10060, 10061, 10063, 10064, 10065, 10066, 10067, + 10068, 10069, 10070, 10071, 10072, 10073, 10074, 10075, + 10076, 10078, 10079, 10080, 10081, 10082, 10083, 10084, + 10088, 10092, -1, -1, -1, -1, -1, 10094, + 10098, -1, 10099, 10100, -1, -1, 10101, 10102, + 10104, 10105, -1, 10107, 10108, -1, 10109, 10110, + -1, 10112, 10114, 10116, 10117, -1, -1, -1, + 10118, 10119, -1, -1, -1, -1, -1, -1, + 10121, 10123, 10124, 10127, 10128, 10129, -1, 10130, + 10131, 10132, -1, 10133, 10134, 10135, -1, -1, + -1, 10136, 10138, -1, 10140, -1, 10142, -1, + -1, 10143, -1, 10145, 10146, 10147, 10148, 10149, + -1, -1, -1, 10150, -1, -1, 10152, 10153, + 10154, -1, 10155, 10157, 10158, 10159, -1, -1, + 10160, -1, 10161, 10162, 10163, 10164, 10165, 10166, + 10169, 10174, -1, -1, 10180, -1, 10183, -1, + 10184, 10185, 10186, -1, 10187, 10188, -1, -1, + 10189, 10190, 10191, 10192, 10193, 10194, 10196, 10197, + 10198, 10200, 10201, 10203, 10204, 10205, 10206, 10207, + 10208, 10209, 10211, 10212, 10213, 10214, 10215, 10216, + /* 0x9600 */ + 10217, 10218, 10219, 10220, 10221, 10222, 10224, 10225, + 10226, 10227, 10229, 10230, 10231, 10232, 10233, 10234, + 10235, 10236, 10237, 10239, 10240, 10242, 10243, 10244, + 10245, 10246, 10247, 10249, 10250, 10251, -1, 10253, + -1, -1, -1, -1, -1, 10254, 10258, -1, + 10260, 10261, 10263, 10265, 10267, -1, -1, 10268, + -1, 10269, -1, 10270, 10272, 10276, 10277, -1, + 10279, -1, -1, 10280, -1, -1, -1, -1, + 10281, 10283, -1, -1, -1, 10285, 10286, 10287, + 10288, 10289, -1, -1, -1, 10290, -1, -1, + -1, -1, -1, -1, -1, 10291, 10294, -1, + 10295, -1, -1, -1, 10296, 10298, 10299, 10301, + -1, -1, -1, 10302, -1, 10304, 10305, -1, + 10312, 10313, -1, -1, -1, -1, -1, -1, + 10316, -1, -1, 10320, -1, -1, -1, 10321, + 10322, -1, 10323, 10326, -1, 10328, -1, 10330, + -1, 10332, 10334, -1, 10338, -1, -1, -1, + -1, -1, 10340, -1, 10341, -1, 10342, 10344, + 10345, -1, -1, -1, -1, 10348, 10350, -1, + -1, 10351, -1, 10352, -1, 10353, -1, 10360, + 10361, -1, -1, 10364, -1, -1, -1, -1, + 10367, -1, 10368, 10371, -1, -1, 10373, 10374, + -1, 10381, 10384, -1, 10385, -1, 10386, 10388, + 10390, -1, 10392, 10399, -1, 10400, 10401, -1, + -1, 10402, -1, -1, -1, -1, -1, 10404, + -1, -1, -1, 10406, -1, 10407, -1, 10408, + -1, 10409, -1, -1, -1, 10411, 10414, -1, + -1, 10415, 10416, 10417, 10419, 10421, 10422, 10425, + 10426, -1, 10428, 10429, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 10430, -1, 10431, 10432, -1, -1, 10433, 10434, + -1, -1, 10435, 10437, -1, -1, 10438, -1, + /* 0x9700 */ + -1, 10440, -1, -1, -1, -1, -1, -1, + -1, 10441, 10442, -1, -1, -1, -1, -1, + -1, 10445, -1, -1, -1, -1, -1, 10446, + -1, -1, 10447, 10450, -1, -1, -1, -1, + -1, 10453, 10454, -1, -1, -1, -1, 10455, + -1, -1, -1, -1, -1, 10458, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 10459, -1, -1, 10460, -1, 10464, -1, -1, + -1, 10465, 10466, -1, 10467, -1, 10468, -1, + 10469, 10472, 10473, -1, -1, 10477, 10484, 10491, + -1, 10498, 10500, 10502, 10503, -1, -1, -1, + -1, 10506, 10507, -1, 10508, 10509, -1, -1, + -1, -1, 10512, 10518, 10519, 10521, -1, 10522, + 10523, -1, -1, 10524, -1, 10526, -1, -1, + -1, 10529, -1, -1, 10532, -1, -1, -1, + -1, -1, -1, -1, -1, 10533, -1, -1, + 10534, -1, -1, -1, -1, -1, -1, -1, + -1, 10536, -1, 10538, 10539, 10540, -1, 10541, + -1, 10542, 10543, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 10544, + -1, -1, -1, -1, -1, -1, 10545, 10547, + 10549, -1, -1, -1, -1, -1, -1, 10550, + -1, 10551, 10553, -1, -1, 10554, -1, -1, + -1, 10555, -1, -1, -1, 10556, 10557, -1, + -1, 10558, -1, 10560, -1, -1, 10561, -1, + 10562, 10564, -1, 10565, 10566, 10567, -1, -1, + -1, -1, -1, 10569, -1, -1, -1, -1, + -1, 10570, -1, -1, 10571, 10574, 10575, -1, + -1, -1, -1, -1, 10576, -1, 10578, 10579, + 10582, 10584, 10585, 10586, 10587, 10589, 10590, 10591, + -1, 10592, 10593, -1, -1, 10595, -1, -1, + -1, -1, -1, 10596, -1, -1, -1, 10597, + /* 0x9800 */ + -1, 10598, 10599, 10600, -1, 10601, 10602, 10603, + 10604, -1, 10605, -1, 10606, -1, 10607, 10608, + 10609, 10610, 10611, 10612, -1, -1, -1, 10613, + 10614, -1, 10615, -1, 10617, -1, -1, -1, + -1, 10618, -1, -1, 10619, 10621, 10623, -1, + -1, -1, -1, -1, 10624, 10626, 10627, -1, + 10629, -1, 10631, -1, 10632, -1, -1, 10634, + 10635, 10637, 10641, 10645, 10646, 10648, 10652, -1, + -1, -1, -1, -1, -1, -1, 10653, -1, + -1, -1, -1, 10654, 10655, 10656, 10657, 10658, + -1, -1, 10660, 10661, 10662, 10664, 10666, -1, + 10667, 10668, 10669, 10671, -1, -1, 10673, -1, + -1, -1, 10674, -1, -1, 10675, -1, 10676, + -1, -1, -1, 10677, 10678, -1, -1, 10679, + 10681, 10682, -1, 10685, 10686, 10687, 10688, 10689, + 10690, 10691, 10692, 10693, 10695, 10696, 10697, 10698, + 10699, 10700, 10701, 10702, 10703, 10704, 10706, 10707, + 10708, 10710, 10711, 10713, 10714, 10715, 10716, 10717, + 10718, 10720, 10721, 10722, 10726, -1, 10727, 10729, + 10730, 10731, 10732, 10733, 10734, 10736, 10737, 10738, + 10739, 10741, 10742, 10743, 10744, 10745, 10746, 10747, + 10748, -1, -1, -1, -1, 10756, 10757, 10761, + -1, 10762, -1, 10763, -1, -1, 10764, 10765, + 10768, -1, 10769, 10770, 10771, -1, -1, -1, + 10772, -1, -1, 10773, 10775, -1, 10777, 10782, + 10783, -1, -1, -1, 10787, -1, 10792, 10798, + 10799, 10800, 10801, 10802, 10803, 10804, 10805, 10806, + 10807, 10809, 10810, 10811, 10812, -1, 10813, 10814, + 10817, 10820, 10821, 10822, -1, 10823, -1, -1, + 10824, 10825, 10826, 10827, 10829, 10830, 10831, 10833, + 10835, -1, 10836, -1, 10838, -1, 10839, -1, + -1, -1, -1, -1, 10840, 10841, 10842, 10843, + /* 0x9900 */ + -1, -1, -1, 10844, 10845, 10846, -1, -1, + -1, 10848, 10851, -1, 10854, 10855, 10856, 10857, + 10858, 10859, 10860, 10862, -1, 10863, 10864, -1, + 10865, -1, 10867, 10868, 10869, -1, 10870, 10871, + 10872, 10874, -1, -1, -1, -1, -1, 10875, + 10879, -1, -1, -1, 10881, -1, -1, -1, + -1, 10882, -1, 10883, 10884, 10885, 10887, 10888, + -1, 10889, 10890, 10891, 10892, 10893, 10894, 10895, + -1, 10896, -1, 10897, -1, 10898, -1, -1, + 10899, 10900, 10901, 10902, 10903, 10904, 10905, -1, + -1, 10906, 10907, -1, -1, -1, -1, 10908, + -1, 10909, -1, -1, 10910, -1, 10911, 10912, + -1, -1, 10915, 10916, 10919, 10920, 10922, 10923, + 10925, 10926, 10927, 10928, 10929, 10930, 10931, 10933, + 10934, 10935, 10936, 10937, 10938, 10939, 10940, 10941, + 10943, 10944, 10945, 10946, 10947, 10949, 10950, 10951, + 10952, 10954, 10956, 10957, 10958, 10959, 10960, 10961, + 10962, 10964, 10965, 10966, 10967, 10968, 10969, 10970, + 10971, 10972, 10973, 10974, 10975, 10976, -1, -1, + -1, -1, -1, -1, -1, 10977, 10978, 10979, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 10980, 10981, 10982, -1, + -1, 10983, 10985, 10986, 10987, -1, -1, -1, + -1, 10988, -1, -1, -1, 10989, -1, 10990, + -1, 10992, -1, -1, 10993, 10995, 10997, -1, + 11001, -1, -1, -1, -1, -1, -1, -1, + 11005, 11006, 11007, -1, 11008, 11009, -1, -1, + 11010, 11011, -1, 11012, -1, 11013, 11015, 11017, + -1, 11018, 11021, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 11022, 11023, -1, + 11024, 11025, -1, -1, -1, 11026, -1, -1, + 11028, -1, -1, -1, -1, -1, -1, 11029, + /* 0x9a00 */ + -1, 11030, 11031, -1, -1, 11032, -1, -1, + -1, -1, -1, -1, -1, 11033, 11034, 11035, + 11036, -1, 11039, 11041, -1, -1, 11044, -1, + -1, 11045, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 11046, -1, -1, -1, + 11047, -1, -1, 11048, -1, 11049, 11050, -1, + 11053, -1, -1, -1, -1, -1, 11054, 11055, + 11057, -1, 11058, -1, -1, -1, 11059, -1, + 11060, 11061, 11062, 11063, 11064, 11065, -1, 11069, + -1, -1, 11070, -1, 11071, 11072, -1, 11073, + -1, 11074, 11077, -1, -1, 11078, -1, 11079, + -1, -1, 11082, 11083, -1, 11085, -1, 11086, + -1, -1, 11087, -1, 11089, 11090, 11092, -1, + -1, 11093, 11094, 11095, 11096, 11097, 11098, 11100, + 11101, 11102, 11106, 11107, 11109, 11111, 11112, 11113, + 11114, 11115, 11116, 11117, 11118, 11120, 11121, 11122, + 11124, 11125, 11126, 11129, 11130, 11131, 11132, 11133, + 11134, 11135, 11136, 11137, 11138, 11141, 11142, 11143, + 11144, 11145, 11146, 11147, -1, 11148, 11149, 11150, + 11151, 11153, 11154, 11156, 11157, 11158, 11160, 11161, + 11162, 11163, 11164, 11165, 11166, 11167, 11169, 11170, + -1, -1, -1, -1, -1, -1, -1, 11171, + -1, -1, -1, -1, -1, 11172, -1, -1, + -1, -1, -1, -1, -1, -1, 11176, -1, + -1, -1, -1, -1, 11177, 11179, -1, -1, + 11180, -1, -1, 11181, 11182, -1, -1, 11183, + -1, -1, 11184, 11185, 11187, 11191, 11193, 11194, + 11197, 11198, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 11199, 11201, 11202, -1, -1, + -1, 11203, 11205, -1, -1, 11207, 11208, 11210, + -1, -1, -1, -1, 11211, -1, -1, -1, + -1, 11213, -1, -1, -1, -1, -1, -1, + /* 0x9b00 */ + 11214, -1, 11215, -1, -1, -1, 11218, -1, + -1, -1, -1, -1, -1, 11219, -1, -1, + -1, -1, -1, 11220, -1, -1, -1, -1, + -1, -1, 11222, 11223, -1, -1, -1, -1, + -1, -1, 11224, 11227, -1, 11228, 11233, 11238, + 11240, 11241, 11242, 11247, -1, 11248, 11253, -1, + 11254, 11257, -1, -1, -1, -1, 11260, -1, + -1, 11261, -1, 11262, -1, -1, -1, -1, + 11264, -1, -1, -1, -1, -1, -1, 11265, + -1, 11266, -1, -1, -1, -1, 11267, -1, + 11269, -1, -1, -1, -1, -1, -1, 11274, + 11276, -1, 11277, 11278, -1, -1, -1, -1, + -1, -1, 11279, 11280, -1, -1, 11281, -1, + 11282, -1, -1, -1, -1, 11283, -1, 11284, + -1, -1, 11285, 11287, 11288, -1, -1, 11289, + -1, -1, 11290, -1, -1, -1, -1, -1, + -1, 11291, -1, 11292, -1, -1, -1, -1, + -1, 11293, 11295, 11296, -1, 11297, 11298, 11299, + 11300, 11301, 11302, 11303, -1, -1, -1, -1, + -1, -1, 11304, -1, 11305, 11306, 11309, -1, + -1, -1, -1, -1, -1, -1, 11310, 11311, + -1, -1, 11313, 11314, -1, 11315, 11316, -1, + -1, -1, -1, 11321, -1, -1, 11322, 11323, + -1, -1, 11325, 11326, -1, -1, 11327, -1, + 11328, 11329, -1, -1, -1, -1, -1, 11330, + -1, 11332, 11333, 11335, -1, -1, -1, -1, + -1, -1, 11336, -1, 11337, 11338, 11339, 11340, + 11342, -1, -1, 11343, -1, 11345, -1, -1, + -1, 11346, 11347, -1, 11348, -1, -1, 11349, + 11350, -1, 11351, 11352, -1, -1, -1, -1, + 11353, -1, -1, -1, 11354, 11355, -1, 11356, + -1, 11359, -1, -1, -1, 11360, -1, 11361, + /* 0x9c00 */ + 11362, 11364, 11365, 11366, -1, -1, -1, -1, + 11367, 11369, -1, -1, 11370, 11372, -1, 11374, + 11375, -1, 11377, 11378, -1, -1, -1, -1, + -1, -1, -1, 11379, 11381, -1, -1, 11382, + 11383, -1, -1, 11384, 11385, 11386, -1, -1, + 11388, 11390, -1, -1, -1, 11391, 11392, -1, + -1, 11393, 11394, 11396, -1, 11397, -1, 11398, + -1, 11399, 11400, 11402, 11403, -1, 11404, -1, + -1, -1, 11405, -1, -1, 11406, -1, -1, + 11407, 11408, -1, -1, -1, -1, -1, -1, + -1, -1, 11411, 11412, 11413, -1, 11414, 11415, + 11416, -1, -1, -1, -1, 11417, 11418, 11419, + 11420, -1, -1, 11421, 11422, -1, -1, 11423, + 11424, -1, -1, -1, -1, 11425, 11426, 11427, + -1, -1, -1, -1, -1, -1, 11428, 11431, + 11433, -1, 11435, 11436, 11441, 11442, 11443, 11444, + 11445, 11446, 11447, -1, 11448, 11449, 11450, 11451, + 11452, 11454, 11455, 11456, 11457, 11458, 11460, 11461, + 11462, 11463, 11464, 11465, 11466, 11467, 11468, 11469, + 11470, 11471, 11472, 11473, 11474, 11479, 11480, 11482, + 11483, 11485, 11486, 11487, 11488, 11489, 11490, 11491, + 11492, 11493, 11495, 11496, 11497, 11498, 11499, 11500, + 11501, 11502, 11503, 11504, 11505, 11506, 11507, 11508, + 11510, 11511, 11512, 11513, 11514, 11515, 11516, 11517, + 11518, 11519, 11520, 11521, 11522, 11524, 11526, 11527, + 11528, 11529, 11530, 11531, 11532, 11534, 11535, 11536, + 11537, 11538, 11539, 11540, 11541, 11542, 11544, 11546, + 11547, 11548, -1, 11549, 11550, 11551, 11553, 11554, + 11555, 11556, 11557, 11558, -1, 11559, -1, 11561, + -1, 11563, -1, 11564, 11566, -1, -1, -1, + -1, -1, 11567, 11568, 11569, -1, 11570, -1, + 11571, -1, -1, -1, -1, -1, -1, -1, + /* 0x9d00 */ + -1, -1, -1, -1, -1, -1, 11572, 11573, + 11574, 11576, -1, -1, -1, -1, 11578, -1, + -1, -1, 11580, -1, -1, 11581, -1, -1, + -1, -1, -1, 11582, -1, 11583, 11585, 11586, + -1, -1, -1, 11588, -1, -1, 11589, -1, + 11590, -1, -1, -1, 11591, -1, -1, 11593, + 11594, -1, -1, 11595, 11596, -1, -1, -1, + -1, -1, -1, 11597, 11598, -1, -1, 11599, + -1, -1, 11600, 11601, 11602, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 11603, 11604, 11605, 11606, -1, -1, -1, -1, + -1, 11607, -1, -1, 11608, 11609, 11611, -1, + 11613, 11614, -1, -1, -1, -1, -1, -1, + -1, -1, 11615, -1, 11616, -1, 11617, 11618, + 11619, -1, 11620, -1, -1, -1, 11621, 11623, + -1, -1, -1, -1, -1, -1, 11624, -1, + -1, -1, -1, -1, -1, -1, -1, 11626, + -1, 11628, 11629, -1, -1, -1, -1, 11630, + -1, -1, -1, 11633, -1, -1, 11634, -1, + 11635, -1, 11636, -1, -1, -1, -1, -1, + -1, 11637, -1, -1, 11638, 11639, -1, -1, + -1, 11640, 11641, 11642, 11644, -1, -1, 11645, + -1, -1, 11647, -1, 11648, 11655, -1, -1, + -1, 11656, 11657, 11658, 11659, -1, -1, 11660, + 11661, 11662, 11663, 11664, 11665, -1, 11668, -1, + 11669, 11670, 11671, -1, -1, -1, -1, 11672, + -1, -1, -1, 11673, -1, -1, 11674, 11675, + -1, 11677, 11678, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 11679, 11680, -1, + -1, -1, -1, 11681, -1, -1, -1, 11682, + 11683, -1, 11684, 11685, 11687, -1, -1, -1, + 11689, 11690, 11691, -1, -1, 11693, -1, 11694, + /* 0x9e00 */ + -1, -1, -1, -1, -1, -1, -1, 11695, + -1, -1, 11696, -1, 11697, -1, 11698, 11699, + -1, -1, -1, -1, -1, 11700, 11703, -1, + 11710, -1, 11711, 11712, 11714, 11715, 11716, 11717, + 11719, 11720, 11723, 11724, 11725, 11726, 11728, 11730, + 11731, 11732, 11733, 11734, 11736, 11737, 11738, 11739, + 11740, 11741, 11742, 11743, 11744, 11745, 11746, 11747, + 11748, 11749, 11750, 11751, 11752, 11753, 11754, 11755, + 11756, 11757, 11758, 11759, 11760, 11761, 11763, 11764, + 11766, 11767, 11768, 11769, 11770, 11771, 11772, 11773, + 11774, 11775, 11776, 11777, 11778, 11779, 11780, 11781, + 11782, 11783, 11784, 11786, 11787, 11788, 11789, 11790, + 11791, 11792, 11793, 11794, 11795, 11802, 11803, 11804, + 11805, 11806, 11807, 11808, 11809, 11810, -1, 11811, + 11812, 11813, 11814, 11815, 11816, 11817, -1, -1, + 11819, 11822, 11824, 11825, 11826, 11829, 11831, -1, + -1, -1, -1, 11832, 11833, 11834, -1, 11835, + -1, -1, -1, -1, -1, -1, -1, 11836, + -1, -1, -1, -1, -1, -1, -1, 11837, + -1, -1, -1, -1, -1, -1, 11839, -1, + -1, -1, -1, -1, 11840, 11842, 11843, -1, + -1, 11844, 11846, 11851, 11856, 11858, -1, 11859, + -1, -1, -1, -1, 11863, 11867, -1, -1, + 11872, 11874, 11878, 11883, 11886, 11890, -1, -1, + -1, -1, -1, 11894, 11895, -1, -1, -1, + -1, 11897, -1, -1, 11898, -1, -1, 11899, + -1, 11900, 11901, -1, -1, -1, -1, -1, + 11902, 11903, -1, 11904, -1, -1, 11905, -1, + -1, 11907, -1, -1, 11908, -1, -1, -1, + 11909, 11910, 11911, -1, -1, 11912, -1, -1, + -1, 11913, 11914, -1, 11915, -1, 11916, 11917, + -1, 11918, -1, -1, -1, 11919, 11920, 11921, + /* 0x9f00 */ + -1, -1, 11923, 11924, -1, -1, -1, 11925, + 11927, 11930, -1, 11931, 11932, 11933, 11934, -1, + -1, 11935, 11936, 11937, -1, 11939, -1, 11940, + -1, -1, -1, -1, -1, -1, -1, -1, + 11942, 11943, -1, -1, -1, -1, 11944, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 11945, -1, -1, -1, + -1, 11946, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 11947, -1, -1, + -1, -1, 11948, 11952, -1, -1, 11954, 11956, + 11958, 11962, 11964, 11966, 11967, 11969, -1, 11970, + -1, 11971, 11972, -1, 11973, -1, -1, 11974, + 11975, 11976, 11978, 11980, -1, -1, 11981, 11982, + -1, 11985, 11986, -1, 11988, -1, -1, -1, + 11989, 11990, 11991, -1, -1, -1, 11992, 11993, + -1, -1, -1, -1, -1, -1, -1, 11994, + 11996, 11997, 11998, 11999, 12000, 12002, 12003, 12004, + 12005, 12006, 12007, 12008, 12009, 12010, 12013, -1, + 12014, -1, 12015, -1, 12018, 12019, -1, -1, + -1, 12020, 12022, 12023, 12024, 12026, 12029, 12031, + -1, -1, 12033, -1, -1, 12036, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + diff --git a/jni/parted/libiconv/lib/cns11643.h b/jni/parted/libiconv/lib/cns11643.h new file mode 100755 index 0000000..044bf9d --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 1999-2001 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 + */ + +/* ISO-2022-CN and EUC-TW use CNS 11643-1992 planes 1 to 7. We also + * have a table for the older plane 15. We use a trick to keep the + * Unicode -> CNS 11643 table as small as possible (see cns11643_inv.h). + */ + +#include "cns11643_1.h" +#include "cns11643_2.h" +#include "cns11643_3.h" +#include "cns11643_4.h" +#include "cns11643_5.h" +#include "cns11643_6.h" +#include "cns11643_7.h" +#include "cns11643_15.h" +#include "cns11643_inv.h" + +/* Returns the plane number (1,...,7,15) in r[0], the two bytes in r[1],r[2]. */ +#define cns11643_wctomb cns11643_inv_wctomb diff --git a/jni/parted/libiconv/lib/cns11643_1.h b/jni/parted/libiconv/lib/cns11643_1.h new file mode 100755 index 0000000..a6673ef --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_1.h @@ -0,0 +1,892 @@ +/* + * Copyright (C) 1999-2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 1 + */ + +static const unsigned short cns11643_1_2uni_page21[500] = { + /* 0x21 */ + 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x30fb, 0xff1b, 0xff1a, + 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xfe51, 0xfe52, + 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xfe31, 0x2014, 0xfe32, + 0x2013, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff08, 0xff09, 0xfe35, + 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39, + 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d, + 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41, + 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0xfe5b, + 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d, + 0x301e, 0x2032, 0x2035, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7, + 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605, + 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, + /* 0x22 */ + 0x32a3, 0x2105, 0x203e, 0xfffd, 0xff3f, 0xfffd, 0xfe49, 0xfe4a, + 0xfe4d, 0xfe4e, 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, + 0xff0d, 0x00d7, 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, + 0x2266, 0x2267, 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, + 0xfe64, 0xfe66, 0xfe65, 0x223c, 0x2229, 0x222a, 0x22a5, 0x2220, + 0x221f, 0x22bf, 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, + 0x2640, 0x2642, 0x2641, 0x2609, 0x2191, 0x2193, 0x2192, 0x2190, + 0x2196, 0x2197, 0x2199, 0x2198, 0x2016, 0xff5c, 0xff0f, 0xff3c, + 0x2215, 0xfe68, 0xff04, 0xffe5, 0x3012, 0xffe0, 0xffe1, 0xff05, + 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5, 0x339c, + 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4, 0x00b0, + 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, + /* 0x23 */ + 0x55e7, 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, + 0x2586, 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, + 0x258a, 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, + 0x2500, 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, + 0x256e, 0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561, 0x25e2, + 0x25e3, 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x24 */ + 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, + 0xff18, 0xff19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, + 0x2166, 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, + 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0xfffd, 0x5344, 0xfffd, + 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, + 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, + 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, + 0xff39, 0xff3a, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, + 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, + 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, + 0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, 0x0394, + 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, + /* 0x25 */ + 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, + 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, + 0x3107, 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, + 0x310f, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, + 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, + 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, + 0x3127, 0x3128, 0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x26 */ + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, + 0x2468, 0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, + 0x247a, 0x247b, 0x247c, 0x247d, 0x2170, 0x2171, 0x2172, 0x2173, + 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, +}; +static const unsigned short cns11643_1_2uni_page42[34] = { + /* 0x42 */ + 0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405, 0x2406, 0x2407, + 0x2408, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x240e, 0x240f, + 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415, 0x2416, 0x2417, + 0x2418, 0x2419, 0x241a, 0x241b, 0x241c, 0x241d, 0x241e, 0x241f, + 0x2421, 0x20ac, +}; +static const unsigned short cns11643_1_2uni_page44[5401] = { + /* 0x44 */ + 0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c, + 0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b, + 0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a, + 0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e, + 0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f, + 0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8, + 0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2, + 0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x4e11, + 0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b, 0x5c39, 0x4e88, + 0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1, 0x4ec0, 0x4ec3, + 0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4, 0x5143, 0x5141, + 0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6, + /* 0x45 */ + 0x5206, 0x5207, 0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339, + 0x5348, 0x5347, 0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd, + 0x58ec, 0x5929, 0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24, + 0x5c3a, 0x5c6f, 0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3, + 0x6208, 0x6236, 0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4, + 0x65b9, 0x65e5, 0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79, + 0x6bcb, 0x6bd4, 0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236, + 0x723b, 0x7247, 0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19, 0x4e16, + 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e, 0x4ee5, + 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4, 0x4ed9, + 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9, 0x51fa, + 0x51f8, 0x520a, 0x52a0, 0x529f, 0x5305, 0x5306, + /* 0x46 */ + 0x5317, 0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, + 0x536e, 0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, + 0x53e8, 0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, + 0x53f1, 0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, + 0x592e, 0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c, 0x5de8, + 0x5de7, 0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01, 0x5f18, + 0x5f17, 0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251, 0x65a5, + 0x65e6, 0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63, 0x6bcd, + 0x6c11, 0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af, 0x7384, + 0x7389, 0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529, 0x7530, + 0x7531, 0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf, 0x76ee, + 0x77db, 0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, + /* 0x47 */ + 0x7acb, 0x4e1e, 0x4e1f, 0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, + 0x4ea6, 0x4ea5, 0x4eff, 0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, + 0x4f10, 0x4f11, 0x4f0f, 0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, + 0x4efd, 0x4f01, 0x4f0b, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168, + 0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216, + 0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f, + 0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d, + 0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd, + 0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919, + 0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979, + 0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89, + 0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, + /* 0x48 */ + 0x5e74, 0x5f0f, 0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d, + 0x6210, 0x6263, 0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec, + 0x65ed, 0x66f2, 0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735, + 0x6b21, 0x6b64, 0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f, + 0x6c60, 0x6c50, 0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070, + 0x725f, 0x725d, 0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a, + 0x7fbd, 0x8001, 0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089, + 0x808b, 0x808c, 0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b, + 0x821f, 0x826e, 0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863, + 0x897f, 0x9621, 0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57, + 0x4f5e, 0x4f34, 0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d, + 0x4f3a, 0x4f38, 0x4f43, 0x4f54, 0x4f3c, 0x4f46, + /* 0x49 */ + 0x4f63, 0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, + 0x4f48, 0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, + 0x5225, 0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, + 0x52ac, 0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, + 0x5426, 0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, + 0x541b, 0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, + 0x5436, 0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, + 0x56ea, 0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, + 0x5747, 0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef, 0x593e, + 0x599d, 0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996, 0x598d, + 0x59a4, 0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a, 0x5b5b, + 0x5b8c, 0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, + /* 0x4a */ + 0x5c3f, 0x5c3e, 0x5c90, 0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, + 0x5e8f, 0x5e87, 0x5e8a, 0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, + 0x5f77, 0x5f79, 0x5fd8, 0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, + 0x5ff8, 0x5fea, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, + 0x6276, 0x6289, 0x626d, 0x628a, 0x627c, 0x627e, 0x6279, 0x6273, + 0x6292, 0x626f, 0x6298, 0x626e, 0x6295, 0x6293, 0x6291, 0x6286, + 0x6539, 0x653b, 0x6538, 0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, + 0x6750, 0x6751, 0x675c, 0x6756, 0x675e, 0x6749, 0x6746, 0x6760, + 0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81, + 0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70, + 0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e, + 0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, + /* 0x4b */ + 0x6c82, 0x7076, 0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, + 0x72c4, 0x72c2, 0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, + 0x76ef, 0x77e3, 0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, + 0x8096, 0x8093, 0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, + 0x8292, 0x828b, 0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46, + 0x8c55, 0x8c9d, 0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b, + 0x8fb0, 0x8fc2, 0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2, + 0x90aa, 0x90a6, 0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e, + 0x9631, 0x962a, 0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b, + 0x4e9e, 0x4eab, 0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f, + 0x4f6c, 0x4f9b, 0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88, + 0x4f69, 0x4f7b, 0x4f96, 0x4f7e, 0x4f8f, 0x4f91, + /* 0x4c */ + 0x4f7a, 0x5154, 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, + 0x51bd, 0x51fd, 0x523b, 0x5238, 0x5237, 0x523a, 0x5230, 0x522e, + 0x5236, 0x5241, 0x52be, 0x52bb, 0x5352, 0x5354, 0x5353, 0x5351, + 0x5366, 0x5377, 0x5378, 0x5379, 0x53d6, 0x53d4, 0x53d7, 0x5473, + 0x5475, 0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, + 0x5492, 0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, + 0x5462, 0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, + 0x576a, 0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, + 0x5947, 0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, + 0x59ae, 0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, + 0x59af, 0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, + 0x5b9a, 0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, + /* 0x4d */ + 0x5c48, 0x5c45, 0x5c46, 0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, + 0x5cb1, 0x5cb3, 0x5e18, 0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, + 0x5e78, 0x5e9a, 0x5e97, 0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, + 0x5f27, 0x5f29, 0x5f80, 0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, + 0x5ffd, 0x5ff5, 0x5fff, 0x600f, 0x6014, 0x602f, 0x6035, 0x6016, + 0x602a, 0x6015, 0x6021, 0x6027, 0x6029, 0x602b, 0x601b, 0x6216, + 0x6215, 0x623f, 0x623e, 0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, + 0x62bf, 0x62c2, 0x62b9, 0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, + 0x62cb, 0x62c8, 0x62a8, 0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, + 0x62cd, 0x62b5, 0x62da, 0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, + 0x62ac, 0x62ce, 0x653e, 0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, + 0x660c, 0x6606, 0x6602, 0x660e, 0x6600, 0x660f, + /* 0x4e */ + 0x6615, 0x660a, 0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, + 0x6771, 0x679c, 0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, + 0x6770, 0x677f, 0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, + 0x677c, 0x676a, 0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, + 0x6c1b, 0x6ce3, 0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, + 0x6cbd, 0x6cbe, 0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, + 0x6cc4, 0x6cb9, 0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, + 0x6cbb, 0x6ce1, 0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, + 0x6ce0, 0x7095, 0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d, + 0x7238, 0x7248, 0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7, + 0x72d0, 0x73a9, 0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d, + 0x7599, 0x759a, 0x7684, 0x76c2, 0x76f2, 0x76f4, + /* 0x4f */ + 0x77e5, 0x77fd, 0x793e, 0x7940, 0x7941, 0x79c9, 0x79c8, 0x7a7a, + 0x7a79, 0x7afa, 0x7cfe, 0x7f54, 0x7f8c, 0x7f8b, 0x8005, 0x80ba, + 0x80a5, 0x80a2, 0x80b1, 0x80a1, 0x80ab, 0x80a9, 0x80b4, 0x80aa, + 0x80af, 0x81e5, 0x81fe, 0x820d, 0x82b3, 0x829d, 0x8299, 0x82ad, + 0x82bd, 0x829f, 0x82b9, 0x82b1, 0x82ac, 0x82a5, 0x82af, 0x82b8, + 0x82a3, 0x82b0, 0x82be, 0x82b7, 0x864e, 0x8671, 0x521d, 0x8868, + 0x8ecb, 0x8fce, 0x8fd4, 0x8fd1, 0x90b5, 0x90b8, 0x90b1, 0x90b6, + 0x91c7, 0x91d1, 0x9577, 0x9580, 0x961c, 0x9640, 0x963f, 0x963b, + 0x9644, 0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, + 0x4eae, 0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, + 0x4fdd, 0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, + 0x4fd0, 0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, + /* 0x50 */ + 0x4fb7, 0x5157, 0x5192, 0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, + 0x524d, 0x524c, 0x524b, 0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, + 0x530d, 0x5357, 0x537b, 0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, + 0x54ce, 0x54c9, 0x54b8, 0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, + 0x54aa, 0x54c1, 0x54c4, 0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, + 0x54a9, 0x54a7, 0x54bf, 0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, + 0x57a2, 0x57ce, 0x57ae, 0x5793, 0x5955, 0x5951, 0x594f, 0x594e, + 0x5950, 0x59dc, 0x59d8, 0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, + 0x59ea, 0x59da, 0x59e6, 0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, + 0x5ba4, 0x5ba2, 0x5ba5, 0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, + 0x5cd9, 0x5cd2, 0x5df7, 0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, + 0x5ea6, 0x5efa, 0x5f08, 0x5f2d, 0x5f65, 0x5f88, + /* 0x51 */ + 0x5f85, 0x5f8a, 0x5f8b, 0x5f87, 0x5f8c, 0x5f89, 0x6012, 0x601d, + 0x6020, 0x6025, 0x600e, 0x6028, 0x604d, 0x6070, 0x6068, 0x6062, + 0x6046, 0x6043, 0x606c, 0x606b, 0x606a, 0x6064, 0x6241, 0x62dc, + 0x6316, 0x6309, 0x62fc, 0x62ed, 0x6301, 0x62ee, 0x62fd, 0x6307, + 0x62f1, 0x62f7, 0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, + 0x653f, 0x6545, 0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, + 0x6627, 0x662f, 0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, + 0x67d3, 0x67f1, 0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, + 0x67e9, 0x67ef, 0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, + 0x67cf, 0x67de, 0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, + 0x6b6a, 0x6b83, 0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, + 0x6d0b, 0x6d32, 0x6d2a, 0x6d41, 0x6d25, 0x6d0c, + /* 0x52 */ + 0x6d31, 0x6d1e, 0x6d17, 0x6d3b, 0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, + 0x6cf5, 0x6d39, 0x6d27, 0x6d38, 0x6d29, 0x6d2e, 0x6d35, 0x6d0e, + 0x6d2b, 0x70ab, 0x70ba, 0x70b3, 0x70ac, 0x70af, 0x70ad, 0x70b8, + 0x70ae, 0x70a4, 0x7230, 0x7272, 0x726f, 0x7274, 0x72e9, 0x72e0, + 0x72e1, 0x73b7, 0x73ca, 0x73bb, 0x73b2, 0x73cd, 0x73c0, 0x73b3, + 0x751a, 0x752d, 0x754f, 0x754c, 0x754e, 0x754b, 0x75ab, 0x75a4, + 0x75a5, 0x75a2, 0x75a3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76c8, + 0x76c6, 0x76c3, 0x76c5, 0x7701, 0x76f9, 0x76f8, 0x7709, 0x770b, + 0x76fe, 0x76fc, 0x7707, 0x77dc, 0x7802, 0x7814, 0x780c, 0x780d, + 0x7946, 0x7949, 0x7948, 0x7947, 0x79b9, 0x79ba, 0x79d1, 0x79d2, + 0x79cb, 0x7a7f, 0x7a81, 0x7aff, 0x7afd, 0x7c7d, 0x7d02, 0x7d05, + 0x7d00, 0x7d09, 0x7d07, 0x7d04, 0x7d06, 0x7f38, + /* 0x53 */ + 0x7f8e, 0x7fbf, 0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, + 0x80da, 0x80c3, 0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, + 0x80e4, 0x80dd, 0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, + 0x82db, 0x82e6, 0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, + 0x82f1, 0x8301, 0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, + 0x82ef, 0x8306, 0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, + 0x8981, 0x89d4, 0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, + 0x8d73, 0x8db4, 0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, + 0x8fe5, 0x8fed, 0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1, + 0x90c3, 0x914b, 0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c, + 0x964d, 0x9762, 0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8, + 0x98db, 0x98df, 0x9996, 0x9999, 0x4e58, 0x4eb3, + /* 0x54 */ + 0x500c, 0x500d, 0x5023, 0x4fef, 0x5026, 0x5025, 0x4ff8, 0x5029, + 0x5016, 0x5006, 0x503c, 0x501f, 0x501a, 0x5012, 0x5011, 0x4ffa, + 0x5000, 0x5014, 0x5028, 0x4ff1, 0x5021, 0x500b, 0x5019, 0x5018, + 0x4ff3, 0x4fee, 0x502d, 0x502a, 0x4ffe, 0x502b, 0x5009, 0x517c, + 0x51a4, 0x51a5, 0x51a2, 0x51cd, 0x51cc, 0x51c6, 0x51cb, 0x5256, + 0x525c, 0x5254, 0x525b, 0x525d, 0x532a, 0x537f, 0x539f, 0x539d, + 0x53df, 0x54e8, 0x5510, 0x5501, 0x5537, 0x54fc, 0x54e5, 0x54f2, + 0x5506, 0x54fa, 0x5514, 0x54e9, 0x54ed, 0x54e1, 0x5509, 0x54ee, + 0x54ea, 0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, + 0x57c2, 0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, + 0x595a, 0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, + 0x5a20, 0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, + /* 0x55 */ + 0x5b6b, 0x5c58, 0x5bb0, 0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, + 0x5bb9, 0x5bb8, 0x5c04, 0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, + 0x5cfb, 0x5cea, 0x5ce8, 0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, + 0x5e2d, 0x5e2b, 0x5eab, 0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, + 0x5f90, 0x6059, 0x6063, 0x6065, 0x6050, 0x6055, 0x606d, 0x6069, + 0x606f, 0x6084, 0x609f, 0x609a, 0x608d, 0x6094, 0x608c, 0x6085, + 0x6096, 0x6247, 0x62f3, 0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, + 0x6355, 0x6342, 0x6346, 0x634f, 0x6349, 0x633a, 0x6350, 0x633d, + 0x632a, 0x632b, 0x6328, 0x634d, 0x634c, 0x6548, 0x6549, 0x6599, + 0x65c1, 0x65c5, 0x6642, 0x6649, 0x664f, 0x6643, 0x6652, 0x664c, + 0x6645, 0x6641, 0x66f8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, + 0x6848, 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, + /* 0x56 */ + 0x6829, 0x68b3, 0x6817, 0x684c, 0x6851, 0x683d, 0x67f4, 0x6850, + 0x6840, 0x683c, 0x6843, 0x682a, 0x6845, 0x6813, 0x6818, 0x6841, + 0x6b8a, 0x6b89, 0x6bb7, 0x6c23, 0x6c27, 0x6c28, 0x6c26, 0x6c24, + 0x6cf0, 0x6d6a, 0x6d95, 0x6d88, 0x6d87, 0x6d66, 0x6d78, 0x6d77, + 0x6d59, 0x6d93, 0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, + 0x6d8c, 0x6d8a, 0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, + 0x70e4, 0x70d9, 0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, + 0x72fd, 0x72f8, 0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, + 0x73ea, 0x73de, 0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, + 0x75c5, 0x75c7, 0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, + 0x75b8, 0x768b, 0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, + 0x7720, 0x7728, 0x77e9, 0x7830, 0x7827, 0x7838, + /* 0x57 */ + 0x781d, 0x7834, 0x7837, 0x7825, 0x782d, 0x7820, 0x781f, 0x7832, + 0x7955, 0x7950, 0x7960, 0x795f, 0x7956, 0x795e, 0x795d, 0x7957, + 0x795a, 0x79e4, 0x79e3, 0x79e7, 0x79df, 0x79e6, 0x79e9, 0x79d8, + 0x7a84, 0x7a88, 0x7ad9, 0x7b06, 0x7b11, 0x7c89, 0x7d21, 0x7d17, + 0x7d0b, 0x7d0a, 0x7d20, 0x7d22, 0x7d14, 0x7d10, 0x7d15, 0x7d1a, + 0x7d1c, 0x7d0d, 0x7d19, 0x7d1b, 0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, + 0x7fc1, 0x8006, 0x8004, 0x8018, 0x8015, 0x8019, 0x8017, 0x803d, + 0x803f, 0x80f1, 0x8102, 0x80f0, 0x8105, 0x80ed, 0x80f4, 0x8106, + 0x80f8, 0x80f3, 0x8108, 0x80fd, 0x810a, 0x80fc, 0x80ef, 0x81ed, + 0x81ec, 0x8200, 0x8210, 0x822a, 0x822b, 0x8228, 0x822c, 0x82bb, + 0x832b, 0x8352, 0x8354, 0x834a, 0x8338, 0x8350, 0x8349, 0x8335, + 0x8334, 0x834f, 0x8332, 0x8339, 0x8336, 0x8317, + /* 0x58 */ + 0x8340, 0x8331, 0x8328, 0x8343, 0x8654, 0x868a, 0x86aa, 0x8693, + 0x86a4, 0x86a9, 0x868c, 0x86a3, 0x869c, 0x8870, 0x8877, 0x8881, + 0x8882, 0x887d, 0x8879, 0x8a18, 0x8a10, 0x8a0e, 0x8a0c, 0x8a15, + 0x8a0a, 0x8a17, 0x8a13, 0x8a16, 0x8a0f, 0x8a11, 0x8c48, 0x8c7a, + 0x8c79, 0x8ca1, 0x8ca2, 0x8d77, 0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, + 0x8fb1, 0x9001, 0x9006, 0x8ff7, 0x9000, 0x8ffa, 0x8ff4, 0x9003, + 0x8ffd, 0x9005, 0x8ff8, 0x9095, 0x90e1, 0x90dd, 0x90e2, 0x9152, + 0x914d, 0x914c, 0x91d8, 0x91dd, 0x91d7, 0x91dc, 0x91d9, 0x9583, + 0x9662, 0x9663, 0x9661, 0x965b, 0x965d, 0x9664, 0x9658, 0x965e, + 0x96bb, 0x98e2, 0x99ac, 0x9aa8, 0x9ad8, 0x9b25, 0x9b32, 0x9b3c, + 0x4e7e, 0x507a, 0x507d, 0x505c, 0x5047, 0x5043, 0x504c, 0x505a, + 0x5049, 0x5065, 0x5076, 0x504e, 0x5055, 0x5075, + /* 0x59 */ + 0x5074, 0x5077, 0x504f, 0x500f, 0x506f, 0x506d, 0x515c, 0x5195, + 0x51f0, 0x526a, 0x526f, 0x52d2, 0x52d9, 0x52d8, 0x52d5, 0x5310, + 0x530f, 0x5319, 0x533f, 0x5340, 0x533e, 0x53c3, 0x66fc, 0x5546, + 0x556a, 0x5566, 0x5544, 0x555e, 0x5561, 0x5543, 0x554a, 0x5531, + 0x5556, 0x554f, 0x5555, 0x552f, 0x5564, 0x5538, 0x552e, 0x555c, + 0x552c, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, 0x570b, 0x5709, + 0x57df, 0x5805, 0x580a, 0x5806, 0x57e0, 0x57e4, 0x57fa, 0x5802, + 0x5835, 0x57f7, 0x57f9, 0x5920, 0x5962, 0x5a36, 0x5a41, 0x5a49, + 0x5a66, 0x5a6a, 0x5a40, 0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, + 0x5b70, 0x5bc7, 0x5bc5, 0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, + 0x5c08, 0x5c07, 0x5c60, 0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, + 0x5d1b, 0x5d16, 0x5d22, 0x5d11, 0x5d29, 0x5d14, + /* 0x5a */ + 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2, 0x5e38, 0x5e36, 0x5e33, + 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5, 0x5ebe, 0x5f35, 0x5f37, + 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97, 0x5f99, 0x5f9e, 0x5f98, + 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3, 0x6089, 0x60a0, 0x60a8, + 0x60cb, 0x60b4, 0x60e6, 0x60bd, 0x60c5, 0x60bb, 0x60b5, 0x60dc, + 0x60bc, 0x60d8, 0x60d5, 0x60c6, 0x60df, 0x60b8, 0x60da, 0x60c7, + 0x621a, 0x621b, 0x6248, 0x63a0, 0x63a7, 0x6372, 0x6396, 0x63a2, + 0x63a5, 0x6377, 0x6367, 0x6398, 0x63aa, 0x6371, 0x63a9, 0x6389, + 0x6383, 0x639b, 0x636b, 0x63a8, 0x6384, 0x6388, 0x6399, 0x63a1, + 0x63ac, 0x6392, 0x638f, 0x6380, 0x637b, 0x6369, 0x6368, 0x637a, + 0x655d, 0x6556, 0x6551, 0x6559, 0x6557, 0x555f, 0x654f, 0x6558, + 0x6555, 0x6554, 0x659c, 0x659b, 0x65ac, 0x65cf, + /* 0x5b */ + 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a, 0x6664, 0x6668, 0x6666, + 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881, 0x68af, 0x68a2, 0x6893, + 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7, 0x6897, 0x68b0, 0x6883, + 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894, 0x689d, 0x68a8, 0x689f, + 0x68a1, 0x6882, 0x6b32, 0x6bba, 0x6beb, 0x6bec, 0x6c2b, 0x6d8e, + 0x6dbc, 0x6df3, 0x6dd9, 0x6db2, 0x6de1, 0x6dcc, 0x6de4, 0x6dfb, + 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb, 0x6daf, 0x6dd1, 0x6dae, 0x6dde, + 0x6df9, 0x6db8, 0x6df7, 0x6df5, 0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, + 0x6dda, 0x6deb, 0x6dd8, 0x6dea, 0x6df1, 0x6dee, 0x6de8, 0x6dc6, + 0x6dc4, 0x6daa, 0x6dec, 0x6dbf, 0x6de6, 0x70f9, 0x7109, 0x710a, + 0x70fd, 0x70ef, 0x723d, 0x727d, 0x7281, 0x731c, 0x731b, 0x7316, + 0x7313, 0x7319, 0x7387, 0x7405, 0x740a, 0x7403, + /* 0x5c */ + 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x74f7, 0x751c, 0x7522, + 0x7565, 0x7566, 0x7562, 0x7570, 0x758f, 0x75d4, 0x75d5, 0x75b5, + 0x75ca, 0x75cd, 0x768e, 0x76d4, 0x76d2, 0x76db, 0x7737, 0x773e, + 0x773c, 0x7736, 0x7738, 0x773a, 0x786b, 0x7843, 0x784e, 0x7965, + 0x7968, 0x796d, 0x79fb, 0x7a92, 0x7a95, 0x7b20, 0x7b28, 0x7b1b, + 0x7b2c, 0x7b26, 0x7b19, 0x7b1e, 0x7b2e, 0x7c92, 0x7c97, 0x7c95, + 0x7d46, 0x7d43, 0x7d71, 0x7d2e, 0x7d39, 0x7d3c, 0x7d40, 0x7d30, + 0x7d33, 0x7d44, 0x7d2f, 0x7d42, 0x7d32, 0x7d31, 0x7f3d, 0x7f9e, + 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2, 0x801c, 0x804a, 0x8046, 0x812f, + 0x8116, 0x8123, 0x812b, 0x8129, 0x8130, 0x8124, 0x8202, 0x8235, + 0x8237, 0x8236, 0x8239, 0x838e, 0x839e, 0x8398, 0x8378, 0x83a2, + 0x8396, 0x83bd, 0x83ab, 0x8392, 0x838a, 0x8393, + /* 0x5d */ + 0x8389, 0x83a0, 0x8377, 0x837b, 0x837c, 0x8386, 0x83a7, 0x8655, + 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4, 0x86b5, 0x86c6, 0x86cb, + 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e, 0x8888, 0x88ab, 0x8892, + 0x8896, 0x888d, 0x888b, 0x8993, 0x898f, 0x8a2a, 0x8a1d, 0x8a23, + 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b, 0x8a22, 0x8c49, 0x8c5a, + 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa, 0x8ca7, 0x8d67, 0x8d66, + 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019, 0x900d, 0x901a, 0x9017, + 0x9023, 0x901f, 0x901d, 0x9010, 0x9015, 0x901e, 0x9020, 0x900f, + 0x9022, 0x9016, 0x901b, 0x9014, 0x90e8, 0x90ed, 0x90fd, 0x9157, + 0x91ce, 0x91f5, 0x91e6, 0x91e3, 0x91e7, 0x91ed, 0x91e9, 0x9589, + 0x966a, 0x9675, 0x9673, 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, + 0x966c, 0x96c0, 0x96ea, 0x96e9, 0x7ae0, 0x7adf, + /* 0x5e */ + 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75, 0x9e7f, 0x9ea5, 0x9ebb, + 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096, 0x5098, + 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274, 0x5275, 0x5269, 0x52de, + 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b, 0x5580, 0x55a7, 0x557c, + 0x558a, 0x559d, 0x5598, 0x5582, 0x559c, 0x55aa, 0x5594, 0x5587, + 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f, 0x553e, 0x55b2, 0x559a, + 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589, 0x55ab, 0x5599, 0x570d, + 0x582f, 0x582a, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821, 0x581d, + 0x5820, 0x58f9, 0x58fa, 0x5960, 0x5a77, 0x5a9a, 0x5a7f, 0x5a92, + 0x5a9b, 0x5aa7, 0x5b73, 0x5b71, 0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, + 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c, 0x5d50, 0x5d34, 0x5d47, 0x5dfd, + 0x5e45, 0x5e3d, 0x5e40, 0x5e43, 0x5e7e, 0x5eca, + /* 0x5f */ + 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9, 0x5faa, 0x5fa8, + 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c, 0x6123, 0x60fa, + 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1, 0x610e, 0x60f6, + 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3, 0x638c, 0x63cf, + 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x63d2, 0x63e3, 0x63d0, + 0x63e1, 0x63d6, 0x63ed, 0x63ee, 0x6376, 0x63f4, 0x63ea, 0x63db, + 0x6452, 0x63da, 0x63f9, 0x655e, 0x6566, 0x6562, 0x6563, 0x6591, + 0x6590, 0x65af, 0x666e, 0x6670, 0x6674, 0x6676, 0x666f, 0x6691, + 0x667a, 0x667e, 0x6677, 0x66fe, 0x66ff, 0x671f, 0x671d, 0x68fa, + 0x68d5, 0x68e0, 0x68d8, 0x68d7, 0x6905, 0x68df, 0x68f5, 0x68ee, + 0x68e7, 0x68f9, 0x68d2, 0x68f2, 0x68e3, 0x68cb, 0x68cd, 0x690d, + 0x6912, 0x690e, 0x68c9, 0x68da, 0x696e, 0x68fb, + /* 0x60 */ + 0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc, 0x6bef, 0x6c2e, + 0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21, 0x6e32, 0x6e67, + 0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b, 0x6e58, 0x6e24, + 0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34, 0x6e4d, 0x6e3a, + 0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb, 0x6e89, 0x6e19, 0x6e4e, + 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f, 0x7119, 0x711a, 0x7126, + 0x7130, 0x7121, 0x7136, 0x716e, 0x711c, 0x724c, 0x7284, 0x7280, + 0x7336, 0x7325, 0x7334, 0x7329, 0x743a, 0x742a, 0x7433, 0x7422, + 0x7425, 0x7435, 0x7436, 0x7434, 0x742f, 0x741b, 0x7426, 0x7428, + 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2, 0x75db, 0x75e3, 0x75d9, + 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c, 0x7696, 0x7693, 0x76b4, + 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c, 0x786f, + /* 0x61 */ + 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 0x7a97, 0x7a96, + 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46, 0x7b50, 0x7b52, 0x7b54, + 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f, 0x7ca5, 0x7d5e, 0x7d50, + 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72, 0x7d61, 0x7d66, 0x7d62, + 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5, 0x800b, 0x8052, 0x8085, + 0x8155, 0x8154, 0x814b, 0x8151, 0x814e, 0x8139, 0x8146, 0x813e, + 0x814c, 0x8153, 0x8174, 0x8212, 0x821c, 0x83e9, 0x8403, 0x83f8, + 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1, 0x83ef, 0x83f1, 0x83f4, + 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc, 0x83fd, 0x83f2, 0x83ca, + 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407, 0x83d4, 0x83df, 0x865b, + 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db, 0x86e4, 0x86d0, 0x86de, + 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983, 0x8996, + /* 0x62 */ + 0x8a3b, 0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41, 0x8a54, 0x8a5b, + 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56, 0x8c61, 0x8c82, + 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb, 0x8cc0, 0x8cb4, + 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85, 0x8d81, 0x8dce, + 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb, 0x8dc6, 0x8efb, + 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031, 0x9038, 0x9032, + 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163, 0x9165, 0x91cf, + 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d, 0x9210, 0x9207, + 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x9593, 0x9592, 0x958e, + 0x968a, 0x968e, 0x968b, 0x967d, 0x9685, 0x9686, 0x968d, 0x9672, + 0x9684, 0x96c1, 0x96c5, 0x96c4, 0x96c6, 0x96c7, 0x96ef, 0x96f2, + 0x97cc, 0x9805, 0x9806, 0x9808, 0x98e7, 0x98ea, + /* 0x63 */ + 0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad, 0x9ec3, 0x9ecd, + 0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3, 0x50c5, 0x50be, + 0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f, 0x5277, 0x527d, + 0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f, 0x55df, 0x55e8, + 0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1, 0x55e3, 0x55e4, + 0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5, 0x55c9, 0x5712, + 0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a, 0x5854, 0x586b, + 0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b, 0x5967, 0x5ac1, + 0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc, 0x5ab3, 0x5ac2, 0x5ab2, + 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9, 0x5ec8, 0x5f12, 0x5f59, + 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148, 0x611f, 0x60f3, 0x611b, + 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c, 0x6144, + /* 0x64 */ + 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137, 0x6221, + 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d, 0x642c, + 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417, 0x6406, + 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688, 0x6696, + 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 0x695a, 0x6977, + 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, 0x694a, 0x6968, 0x696b, + 0x695e, 0x6953, 0x6979, 0x6986, 0x695d, 0x6963, 0x695b, 0x6b47, + 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd, 0x6ea2, 0x6eaf, 0x6ed3, + 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7, 0x6ec5, 0x6ea5, 0x6e98, + 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96, 0x6e9c, 0x6ec4, 0x6ed4, + 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159, 0x7169, 0x7164, 0x7149, + 0x7167, 0x715c, 0x716c, 0x7166, 0x714c, 0x7165, + /* 0x65 */ + 0x715e, 0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337, 0x7345, + 0x733f, 0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e, 0x7441, + 0x743f, 0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600, 0x75f0, + 0x7601, 0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3, 0x76de, + 0x76df, 0x775b, 0x776b, 0x7766, 0x775e, 0x7763, 0x7779, 0x776a, + 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee, 0x788e, 0x78b0, + 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891, 0x7893, 0x787f, + 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c, 0x7a1a, 0x7a20, + 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77, 0x7bc0, 0x7b60, + 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93, 0x7d79, 0x7d91, + 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a, 0x7f72, 0x7fa9, + 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084, + /* 0x66 */ + 0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 0x8179, + 0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843d, 0x8431, + 0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b, 0x843c, 0x8435, + 0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e, 0x865c, 0x865f, + 0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe, 0x86fb, 0x8702, + 0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4, 0x88d9, 0x88dc, + 0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2, 0x899c, 0x89e3, + 0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70, 0x8a87, 0x8a7c, + 0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62, 0x8a6e, 0x8a6c, + 0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a, 0x8c89, 0x8cca, + 0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2, 0x8cc5, 0x8de1, + 0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea, + /* 0x67 */ + 0x8de4, 0x8de6, 0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a, 0x8f9f, + 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c, 0x9055, + 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e, 0x9041, + 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237, 0x9257, + 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264, 0x9251, + 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a, 0x9598, + 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca, 0x96f7, + 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810, 0x9811, + 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x98fd, 0x98fe, + 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9, 0x9e82, 0x9f0e, 0x9f13, + 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6, 0x50ed, 0x50da, 0x50d5, + 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9, 0x5162, + /* 0x68 */ + 0x51f3, 0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600, 0x561b, + 0x5617, 0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e, 0x55f7, + 0x5616, 0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716, 0x5875, + 0x587e, 0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d, 0x58fd, + 0x5925, 0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6, 0x5ae9, + 0x5ad7, 0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7, 0x5be1, + 0x5be5, 0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d, 0x5c62, + 0x5d84, 0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54, 0x5ed3, + 0x5ed6, 0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147, 0x613f, 0x614b, + 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158, 0x6175, 0x622a, + 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f, 0x647a, 0x6451, + 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1, + /* 0x69 */ + 0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995, + 0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab, + 0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3, + 0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4, + 0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 0x6eff, + 0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23, 0x6f15, 0x6f2b, + 0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2, 0x6ecc, 0x6ef7, + 0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192, 0x723e, 0x7292, + 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a, 0x7470, 0x746d, + 0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609, 0x7613, 0x76e1, + 0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1, 0x789f, 0x78a7, + 0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d, + /* 0x6a */ + 0x7a2e, 0x7a31, 0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95, + 0x7b8b, 0x7b75, 0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87, + 0x7b84, 0x7cb9, 0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd, + 0x7dbe, 0x7da0, 0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2, + 0x7dbf, 0x7db5, 0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac, 0x7f70, + 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150, 0x8180, + 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa, 0x8207, + 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4, 0x8499, + 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3, 0x8490, + 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722, 0x8725, + 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902, 0x88f4, + 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, + /* 0x6b */ + 0x8aa6, 0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, + 0x8aaa, 0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7, 0x8c6a, + 0x8c8d, 0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99, 0x8d95, + 0x8dfc, 0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060, 0x9058, + 0x905c, 0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b, 0x9119, + 0x9118, 0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, 0x92ac, + 0x9280, 0x9285, 0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8, + 0x927c, 0x9291, 0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4, + 0x9699, 0x969c, 0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785, + 0x97f6, 0x9817, 0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c, + 0x9909, 0x99c1, 0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4, + 0x9cf6, 0x9cf3, 0x9ebc, 0x9f3b, 0x9f4a, 0x5104, + /* 0x6c */ + 0x5100, 0x50fb, 0x50f5, 0x50f9, 0x5102, 0x5108, 0x5109, 0x5105, + 0x51dc, 0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, + 0x562e, 0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, + 0x564e, 0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, + 0x589e, 0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, + 0x5afb, 0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, + 0x5beb, 0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, + 0x5ee2, 0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, + 0x5fb7, 0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, + 0x617c, 0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab, 0x618e, + 0x61ac, 0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469, 0x646f, + 0x6479, 0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, + /* 0x6d */ + 0x64a5, 0x6493, 0x6495, 0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, + 0x649a, 0x64ac, 0x6499, 0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, + 0x66ae, 0x66ab, 0x66b4, 0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, + 0x6a1e, 0x6a19, 0x69fd, 0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, + 0x6a05, 0x69ed, 0x6a11, 0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, + 0x6f3f, 0x6f7c, 0x6f84, 0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, + 0x6f5b, 0x6f78, 0x6f6e, 0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, + 0x6f58, 0x6ed5, 0x6f6f, 0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, + 0x71a8, 0x7256, 0x729b, 0x734e, 0x7357, 0x7469, 0x748b, 0x7483, + 0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626, + 0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c, + 0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, + /* 0x6e */ + 0x78be, 0x78d5, 0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, + 0x7a37, 0x7a3b, 0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, + 0x7bc6, 0x7bc7, 0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, + 0x7def, 0x7dfb, 0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, + 0x7dde, 0x7de9, 0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, + 0x7faf, 0x7fe9, 0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a, + 0x8198, 0x8517, 0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513, + 0x8511, 0x8523, 0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506, + 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, + 0x8757, 0x874c, 0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912, + 0x8913, 0x8915, 0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95, + 0x8acb, 0x8af8, 0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, + /* 0x6f */ + 0x8ab0, 0x8ad6, 0x8acd, 0x8ab6, 0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, + 0x8c6c, 0x8ce0, 0x8cde, 0x8ce6, 0x8ce4, 0x8cec, 0x8ced, 0x8ce2, + 0x8ce3, 0x8cdc, 0x8cea, 0x8ce1, 0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, + 0x8e10, 0x8e1d, 0x8e22, 0x8e0f, 0x8e29, 0x8e1f, 0x8e21, 0x8e1e, + 0x8eba, 0x8f1d, 0x8f1b, 0x8f1f, 0x8f29, 0x8f26, 0x8f2a, 0x8f1c, + 0x8f1e, 0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, + 0x912d, 0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, + 0x92bb, 0x92b7, 0x92ea, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2, + 0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707, + 0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c, + 0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df, + 0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, + /* 0x70 */ + 0x9aee, 0x9aef, 0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, + 0x9d09, 0x9d03, 0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112, + 0x5118, 0x5114, 0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291, + 0x5293, 0x52f3, 0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678, + 0x566a, 0x5668, 0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676, + 0x58c1, 0x58be, 0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78, + 0x5bf0, 0x5c0e, 0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd, + 0x61b6, 0x61be, 0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb, + 0x64bb, 0x64bc, 0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf, + 0x64d2, 0x64d4, 0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4, + 0x66c7, 0x66b8, 0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58, + 0x6a39, 0x6a44, 0x6a62, 0x6a61, 0x6a4b, 0x6a47, + /* 0x71 */ + 0x6a35, 0x6a5f, 0x6a48, 0x6b59, 0x6b77, 0x6c05, 0x6fc2, 0x6fb1, + 0x6fa1, 0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, + 0x6fb6, 0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, + 0x71c8, 0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, + 0x7368, 0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, + 0x750d, 0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, + 0x779f, 0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, + 0x7a4e, 0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, + 0x7be4, 0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, + 0x7e11, 0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09, 0x7e10, + 0x7f79, 0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3, 0x81a9, + 0x81a8, 0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, + /* 0x72 */ + 0x8559, 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856d, 0x856a, + 0x855e, 0x8783, 0x879f, 0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, + 0x8932, 0x8925, 0x892b, 0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, + 0x8aeb, 0x8af1, 0x8b00, 0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, + 0x8b02, 0x8af7, 0x8aed, 0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, + 0x8c93, 0x8cf4, 0x8e44, 0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, + 0x8f3b, 0x8f2f, 0x8f38, 0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, + 0x9078, 0x9072, 0x907c, 0x907a, 0x9134, 0x9192, 0x9320, 0x9336, + 0x92f8, 0x9333, 0x932f, 0x9322, 0x92fc, 0x932b, 0x9304, 0x931a, + 0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7, + 0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713, + 0x970f, 0x975b, 0x975c, 0x9766, 0x9798, 0x9830, + /* 0x73 */ + 0x9838, 0x983b, 0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, + 0x991e, 0x991b, 0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, + 0x9abc, 0x9afb, 0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, + 0x9d28, 0x9d12, 0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, + 0x511f, 0x5121, 0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, + 0x5687, 0x568f, 0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a, + 0x5b24, 0x5b7a, 0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8, + 0x5e6b, 0x5f4c, 0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb, + 0x6232, 0x6234, 0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6, + 0x64ec, 0x64f1, 0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6, + 0x6a80, 0x6a94, 0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e, + 0x6a97, 0x6a90, 0x6aa0, 0x6b5c, 0x6bae, 0x6bda, + /* 0x74 */ + 0x6c08, 0x6fd8, 0x6ff1, 0x6fdf, 0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, + 0x6fef, 0x6f80, 0x6fec, 0x6fe1, 0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, + 0x71e7, 0x71df, 0x71ee, 0x71e6, 0x71e5, 0x71ed, 0x71ec, 0x71f4, + 0x71e0, 0x7235, 0x7246, 0x7370, 0x7372, 0x74a9, 0x74b0, 0x74a6, + 0x74a8, 0x7646, 0x7642, 0x764c, 0x76ea, 0x77b3, 0x77aa, 0x77b0, + 0x77ac, 0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, + 0x7901, 0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, + 0x7bf7, 0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, + 0x7cd9, 0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, + 0x7e2b, 0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, + 0x7e35, 0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, + 0x8070, 0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, + /* 0x75 */ + 0x81c2, 0x81c0, 0x81bf, 0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, + 0x8271, 0x85aa, 0x8584, 0x857e, 0x859c, 0x8591, 0x8594, 0x85af, + 0x859b, 0x8587, 0x85a8, 0x858a, 0x85a6, 0x8667, 0x87c0, 0x87d1, + 0x87b3, 0x87d2, 0x87c6, 0x87ab, 0x87bb, 0x87ba, 0x87c8, 0x87cb, + 0x893b, 0x8936, 0x8944, 0x8938, 0x893d, 0x89ac, 0x8b0e, 0x8b17, + 0x8b19, 0x8b1b, 0x8b0a, 0x8b20, 0x8b1d, 0x8b04, 0x8b10, 0x8c41, + 0x8c3f, 0x8c73, 0x8cfa, 0x8cfd, 0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, + 0x8e49, 0x8e4b, 0x8e48, 0x8e4a, 0x8f44, 0x8f3e, 0x8f42, 0x8f45, + 0x8f3f, 0x907f, 0x907d, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, + 0x91a3, 0x919e, 0x919c, 0x934d, 0x9382, 0x9328, 0x9375, 0x934a, + 0x9365, 0x934b, 0x9318, 0x937e, 0x936c, 0x935b, 0x9370, 0x935a, + 0x9354, 0x95ca, 0x95cb, 0x95cc, 0x95c8, 0x95c6, + /* 0x76 */ + 0x96b1, 0x96b8, 0x96d6, 0x971c, 0x971e, 0x97a0, 0x97d3, 0x9846, + 0x98b6, 0x9935, 0x9a01, 0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, + 0x9d3b, 0x9d3f, 0x9e8b, 0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, + 0x9f3e, 0x9f4b, 0x53e2, 0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, + 0x5f5e, 0x61e3, 0x6233, 0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, + 0x64fb, 0x64f7, 0x65b7, 0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, + 0x6abb, 0x6ab8, 0x6ac2, 0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, + 0x7009, 0x700b, 0x6ffe, 0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, + 0x71fc, 0x71fe, 0x71f8, 0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, + 0x7656, 0x7658, 0x7652, 0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, + 0x79ae, 0x7a61, 0x7a62, 0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, + 0x7c2a, 0x7c1e, 0x7c23, 0x7c21, 0x7ce7, 0x7e54, + /* 0x77 */ + 0x7e55, 0x7e5e, 0x7e5a, 0x7e61, 0x7e52, 0x7e59, 0x7f48, 0x7ff9, + 0x7ffb, 0x8077, 0x8076, 0x81cd, 0x81cf, 0x820a, 0x85cf, 0x85a9, + 0x85cd, 0x85d0, 0x85c9, 0x85b0, 0x85ba, 0x85b9, 0x87ef, 0x87ec, + 0x87f2, 0x87e0, 0x8986, 0x89b2, 0x89f4, 0x8b28, 0x8b39, 0x8b2c, + 0x8b2b, 0x8c50, 0x8d05, 0x8e59, 0x8e63, 0x8e66, 0x8e64, 0x8e5f, + 0x8e55, 0x8ec0, 0x8f49, 0x8f4d, 0x9087, 0x9083, 0x9088, 0x91ab, + 0x91ac, 0x91d0, 0x9394, 0x938a, 0x9396, 0x93a2, 0x93b3, 0x93ae, + 0x93ac, 0x93b0, 0x9398, 0x939a, 0x9397, 0x95d4, 0x95d6, 0x95d0, + 0x95d5, 0x96e2, 0x96dc, 0x96d9, 0x96db, 0x96de, 0x9724, 0x97a3, + 0x97a6, 0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, + 0x98ba, 0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, + 0x9b03, 0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, + /* 0x78 */ + 0x9bc9, 0x9bfd, 0x9bc8, 0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, + 0x9f15, 0x9f2c, 0x5133, 0x56a5, 0x56a8, 0x58de, 0x58df, 0x58e2, + 0x5bf5, 0x9f90, 0x5eec, 0x61f2, 0x61f7, 0x61f6, 0x61f5, 0x6500, + 0x650f, 0x66e0, 0x66dd, 0x6ae5, 0x6add, 0x6ada, 0x6ad3, 0x701b, + 0x701f, 0x7028, 0x701a, 0x701d, 0x7015, 0x7018, 0x7206, 0x720d, + 0x7258, 0x72a2, 0x7378, 0x737a, 0x74bd, 0x74ca, 0x74e3, 0x7587, + 0x7586, 0x765f, 0x7661, 0x77c7, 0x7919, 0x79b1, 0x7a6b, 0x7a69, + 0x7c3e, 0x7c3f, 0x7c38, 0x7c3d, 0x7c37, 0x7c40, 0x7e6b, 0x7e6d, + 0x7e79, 0x7e69, 0x7e6a, 0x7e73, 0x7f85, 0x7fb6, 0x7fb9, 0x7fb8, + 0x81d8, 0x85e9, 0x85dd, 0x85ea, 0x85d5, 0x85e4, 0x85e5, 0x85f7, + 0x87fb, 0x8805, 0x880d, 0x87f9, 0x87fe, 0x8960, 0x895f, 0x8956, + 0x895e, 0x8b41, 0x8b5c, 0x8b58, 0x8b49, 0x8b5a, + /* 0x79 */ + 0x8b4e, 0x8b4f, 0x8b46, 0x8b59, 0x8d08, 0x8d0a, 0x8e7c, 0x8e72, + 0x8e87, 0x8e76, 0x8e6c, 0x8e7a, 0x8e74, 0x8f54, 0x8f4e, 0x8fad, + 0x908a, 0x908b, 0x91b1, 0x91ae, 0x93e1, 0x93d1, 0x93df, 0x93c3, + 0x93c8, 0x93dc, 0x93dd, 0x93d6, 0x93e2, 0x93cd, 0x93d8, 0x93e4, + 0x93d7, 0x93e8, 0x95dc, 0x96b4, 0x96e3, 0x972a, 0x9727, 0x9761, + 0x97dc, 0x97fb, 0x985e, 0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, + 0x9a16, 0x9a19, 0x9b0d, 0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, + 0x9d61, 0x9d72, 0x9d6a, 0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, + 0x52f8, 0x56b7, 0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, + 0x5b7d, 0x5bf6, 0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, + 0x66e6, 0x6727, 0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, + 0x74cf, 0x7662, 0x7665, 0x7926, 0x792a, 0x792c, + /* 0x7a */ + 0x792b, 0x7ac7, 0x7af6, 0x7c4c, 0x7c43, 0x7c4d, 0x7cef, 0x7cf0, + 0x8fae, 0x7e7d, 0x7e7c, 0x7e82, 0x7f4c, 0x8000, 0x81da, 0x8266, + 0x85fb, 0x85f9, 0x8611, 0x85fa, 0x8606, 0x860b, 0x8607, 0x860a, + 0x8814, 0x8815, 0x8964, 0x89ba, 0x89f8, 0x8b70, 0x8b6c, 0x8b66, + 0x8b6f, 0x8b5f, 0x8b6b, 0x8d0f, 0x8d0d, 0x8e89, 0x8e81, 0x8e85, + 0x8e82, 0x91b4, 0x91cb, 0x9418, 0x9403, 0x93fd, 0x95e1, 0x9730, + 0x98c4, 0x9952, 0x9951, 0x99a8, 0x9a2b, 0x9a30, 0x9a37, 0x9a35, + 0x9c13, 0x9c0d, 0x9e79, 0x9eb5, 0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, + 0x9f61, 0x5137, 0x5138, 0x56c1, 0x56c0, 0x56c2, 0x5914, 0x5c6c, + 0x5dcd, 0x61fc, 0x61fe, 0x651d, 0x651c, 0x6595, 0x66e9, 0x6afb, + 0x6b04, 0x6afa, 0x6bb2, 0x704c, 0x721b, 0x72a7, 0x74d6, 0x74d4, + 0x7669, 0x77d3, 0x7c50, 0x7e8f, 0x7e8c, 0x7fbc, + /* 0x7b */ + 0x8617, 0x862d, 0x861a, 0x8823, 0x8822, 0x8821, 0x881f, 0x896a, + 0x896c, 0x89bd, 0x8b74, 0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, + 0x8e8b, 0x8f5f, 0x8faf, 0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, + 0x9438, 0x9432, 0x942b, 0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, + 0x9867, 0x9865, 0x9957, 0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, + 0x9b54, 0x9b51, 0x9c2d, 0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, + 0x9e9d, 0x9eef, 0x9f19, 0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, + 0x56c8, 0x56ca, 0x56c9, 0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, + 0x6524, 0x6b0a, 0x6b61, 0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, + 0x766e, 0x766c, 0x79b3, 0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, + 0x8972, 0x896f, 0x89fc, 0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, + 0x8f61, 0x9148, 0x9444, 0x9451, 0x9452, 0x973d, + /* 0x7c */ + 0x973e, 0x97c3, 0x97c1, 0x986b, 0x9955, 0x9a55, 0x9a4d, 0x9ad2, + 0x9b1a, 0x9c49, 0x9c31, 0x9c3e, 0x9c3b, 0x9dd3, 0x9dd7, 0x9f34, + 0x9f6c, 0x9f6a, 0x9f94, 0x56cc, 0x5dd6, 0x6200, 0x6523, 0x652b, + 0x652a, 0x66ec, 0x6b10, 0x74da, 0x7aca, 0x7c64, 0x7c63, 0x7c65, + 0x7e93, 0x7e96, 0x7e94, 0x81e2, 0x8638, 0x863f, 0x8831, 0x8b8a, + 0x9090, 0x908f, 0x9463, 0x9460, 0x9464, 0x9768, 0x986f, 0x995c, + 0x9a5a, 0x9a5b, 0x9a57, 0x9ad3, 0x9ad4, 0x9ad1, 0x9c54, 0x9c57, + 0x9c56, 0x9de5, 0x9e9f, 0x9ef4, 0x56d1, 0x58e9, 0x652c, 0x705e, + 0x7671, 0x7672, 0x77d7, 0x7f50, 0x7f88, 0x8836, 0x8839, 0x8862, + 0x8b93, 0x8b92, 0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, + 0x9748, 0x9744, 0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, + 0x9df9, 0x9dfa, 0x9e7c, 0x9e7d, 0x9f07, 0x9f77, + /* 0x7d */ + 0x9f72, 0x5ef3, 0x6b16, 0x7063, 0x7c6c, 0x7c6e, 0x883b, 0x89c0, + 0x8ea1, 0x91c1, 0x9472, 0x9470, 0x9871, 0x995e, 0x9ad6, 0x9b23, + 0x9ecc, 0x7064, 0x77da, 0x8b9a, 0x9477, 0x97c9, 0x9a62, 0x9a65, + 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5, 0x947d, 0x947e, 0x947c, 0x9c77, + 0x9c78, 0x9ef7, 0x8c54, 0x947f, 0x9e1a, 0x7228, 0x9a6a, 0x9b31, + 0x9e1b, 0x9e1e, 0x7c72, +}; + +static int +cns11643_1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x27) || (c1 == 0x42) || (c1 >= 0x44 && c1 <= 0x7d)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + unsigned short wc = 0xfffd; + if (i < 3102) { + if (i < 500) + wc = cns11643_1_2uni_page21[i]; + else if (i == 571) + wc = 0x4ea0; + else if (i == 578) + wc = 0x51ab; + else if (i == 583) + wc = 0x52f9; + } else if (i < 3290) { + if (i < 3136) + wc = cns11643_1_2uni_page42[i-3102]; + } else { + if (i < 8691) + wc = cns11643_1_2uni_page44[i-3290]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + diff --git a/jni/parted/libiconv/lib/cns11643_15.h b/jni/parted/libiconv/lib/cns11643_15.h new file mode 100755 index 0000000..672406b --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_15.h @@ -0,0 +1,1082 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 15 + */ + +static const unsigned short cns11643_15_2uni_page21[7169] = { + /* 0x21 */ + 0x5302, 0x538c, 0x53d4, 0x54a5, 0x5392, 0x5393, 0x53d8, 0x53d9, + 0x54a7, 0x592b, 0x592c, 0x592d, 0x5930, 0x592e, 0x59ab, 0x1a01, + 0x5c2d, 0x5c6d, 0xfa34, 0x5d0f, 0x52fd, 0x5e9d, 0x64a2, 0x68d4, + 0x6e56, 0x6ec3, 0x7314, 0x52fd, 0x9a1a, 0x530f, 0x5310, 0x539a, + 0x539b, 0x52fd, 0x54ac, 0x0036, 0x5397, 0x5846, 0x0e4f, 0x5876, + 0x5877, 0x58ae, 0x593a, 0x597d, 0x6ec5, 0x5ea8, 0x52fd, 0x1afa, + 0x6541, 0x6542, 0x68d8, 0x68d9, 0x69aa, 0x69ab, 0x6c42, 0x6c41, + 0x5099, 0x6ec6, 0x52fd, 0x7035, 0x7036, 0x7037, 0xfa83, 0xb64d, + 0x52fd, 0x74b5, 0x7617, 0x7782, 0x86b6, 0x2d49, 0x8f72, 0x985c, + 0x98a8, 0x45b7, 0x68e3, 0x0006, 0x52fd, 0x53e6, 0x5444, 0x5445, + 0x1729, 0x003e, 0x54c4, 0x54c5, 0x54c6, 0x54c7, 0x54c8, 0x54c9, + 0x54ca, 0x54d4, 0x587d, 0xb572, 0x58b2, 0x58b4, + /* 0x22 */ + 0x5982, 0x59c7, 0x59c8, 0x52fd, 0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f, + 0xfa24, 0x5bd3, 0x5447, 0x1a4e, 0x5d3d, 0x5de2, 0x5eb8, 0x5eb9, + 0x5ec2, 0x5eba, 0x5ec6, 0x5ebb, 0x64ad, 0x654c, 0x654d, 0x52fd, + 0x69b2, 0x69b3, 0x69b4, 0x69b5, 0x6cc3, 0x6cc4, 0x6cc5, 0x6cc6, + 0x6cc7, 0x52fd, 0x6ece, 0x6f30, 0x7047, 0x7048, 0x2281, 0x735c, + 0x52fd, 0x735f, 0x7618, 0x7619, 0x767e, 0x2410, 0x78b0, 0x7d75, + 0x2568, 0x7d76, 0x8341, 0x8442, 0x52fd, 0x86bd, 0x2842, 0x2840, + 0x18ea, 0x8e1e, 0x8e1f, 0x8f87, 0x2d62, 0x8f78, 0x9488, 0x9489, + 0x948a, 0x9917, 0x9915, 0x52fd, 0x52fd, 0x3291, 0xa3e5, 0xa909, + 0xaa3b, 0xaa4f, 0x52fd, 0xb92e, 0xb92f, 0xbdff, 0xbdfd, 0xbdfe, + 0x45bb, 0x45bc, 0x52fd, 0x5323, 0x53ea, 0x542a, 0x5449, 0x544a, + 0x544b, 0x54df, 0x54e0, 0x54e1, 0x54e2, 0x58c1, + /* 0x23 */ + 0x54e3, 0x54e4, 0x54e5, 0x58c0, 0x54e6, 0x54f7, 0x52fd, 0x54e7, + 0x54e8, 0x54e9, 0x54ea, 0x54eb, 0x580e, 0x5880, 0x5881, 0x58ba, + 0x58bb, 0x58bc, 0x58bd, 0x593f, 0x5940, 0x5988, 0xfa1f, 0x5b46, + 0x52fd, 0x5b47, 0x5b48, 0x5c36, 0x5c72, 0x5c96, 0x5d47, 0x5de7, + 0x5e34, 0x5e35, 0x5e36, 0x5e37, 0x5ee3, 0x5ee4, 0x5ee5, 0x5eeb, + 0x0175, 0x5ee6, 0x5ee7, 0x5ee8, 0x52fd, 0x52fd, 0x64b9, 0x1de8, + 0x64ba, 0x1e5b, 0x6563, 0x6564, 0x52fd, 0x6565, 0x52fd, 0x6566, + 0x657c, 0x6567, 0xfa5a, 0x6859, 0x68e9, 0x68ea, 0x68eb, 0x68ec, + 0x68ed, 0x68ee, 0x68ef, 0x69bf, 0x69cb, 0x69c3, 0x69d5, 0x69c4, + 0x69c5, 0x69d3, 0x69c6, 0x69c7, 0x69c8, 0x69c9, 0x69ca, 0x6c4a, + 0x52fd, 0x6cd1, 0x6e61, 0x6f37, 0x52fd, 0x7064, 0x7066, 0x2299, + 0x7067, 0x7068, 0x7069, 0x2297, 0x7073, 0x706a, + /* 0x24 */ + 0x706b, 0x2862, 0x52fd, 0x7372, 0x043c, 0x74b9, 0x761c, 0x7636, + 0x76bc, 0x76be, 0x76bf, 0x76c0, 0x7787, 0x78dc, 0x78dd, 0x78f5, + 0x78de, 0x78df, 0xfa9e, 0x78e0, 0x78e1, 0x78e2, 0x7d2c, 0x7d2d, + 0x25a4, 0x7da9, 0x7d9c, 0x7d9d, 0x7d9e, 0x7d9f, 0x7da0, 0x7da1, + 0x7da2, 0x52fd, 0x7da3, 0x7da4, 0x7da7, 0x8342, 0x8393, 0x8451, + 0x52fd, 0x8452, 0x8444, 0x8453, 0x8622, 0x86c6, 0x86c7, 0x86c9, + 0xfadd, 0x86ca, 0x2866, 0x86c8, 0x8e24, 0x8e25, 0x8e26, 0x52fd, + 0x8e27, 0x8e28, 0x52fd, 0x8f58, 0xfafb, 0x8fa7, 0x8f88, 0x8f89, + 0x8fa5, 0x8fa8, 0x8fa9, 0x8faa, 0x8fab, 0x8fac, 0x8fad, 0x2da3, + 0x8f79, 0x52fd, 0x9494, 0x9495, 0x9496, 0x09a5, 0x52fd, 0x9497, + 0x307f, 0x9498, 0x984e, 0x984f, 0x9919, 0x52fd, 0x9a41, 0xfb2a, + 0x9bf7, 0x9f04, 0x9f19, 0x9f17, 0xa340, 0xa3ec, + /* 0x25 */ + 0xa71b, 0xa71c, 0x36f6, 0xa90e, 0xaa52, 0xadd8, 0xb126, 0xb574, + 0x52fd, 0xb575, 0xbcc6, 0xbe0b, 0xbe0c, 0xbe0d, 0xbe0e, 0xbe0f, + 0xbe10, 0x45c8, 0xd759, 0xd75a, 0xd983, 0xd984, 0xd985, 0x52fd, + 0x4af5, 0xe120, 0xe121, 0xe122, 0xe123, 0xe124, 0xe129, 0x53f4, + 0x52fd, 0x688f, 0x5451, 0x17ab, 0x5517, 0x5518, 0x555b, 0x5519, + 0x551a, 0x0053, 0x551b, 0x551c, 0x551d, 0x551e, 0x551f, 0x5520, + 0x5521, 0x578b, 0x5788, 0x222d, 0x5885, 0xb587, 0x58c7, 0x594c, + 0x594d, 0x59fc, 0x59fd, 0x59fe, 0x59ff, 0x52fd, 0x52fd, 0x5b56, + 0x5b57, 0x5b58, 0x5b59, 0x5bdc, 0x5bdd, 0x5c73, 0x5c9d, 0x5ca1, + 0x5c9e, 0x5c9f, 0x5ca0, 0x5ce6, 0x5d51, 0x5d52, 0x5e3d, 0x5f22, + 0x1b9c, 0x5f23, 0x5f24, 0x5f25, 0x5f26, 0x5f27, 0x5f28, 0x5f29, + 0x5f2a, 0x5f2b, 0x52fd, 0x5f40, 0x5f2c, 0x5f2d, + /* 0x26 */ + 0x5f2e, 0x5f2f, 0x5f30, 0x64d0, 0x65a8, 0x6594, 0x6595, 0x6596, + 0x6597, 0x6598, 0x659c, 0x659b, 0x52fd, 0x65a1, 0x65a0, 0x6599, + 0x659a, 0x65a7, 0x1e88, 0x6864, 0x52fd, 0x6900, 0x6901, 0x52fd, + 0x52fd, 0x69e5, 0x69e9, 0x69fb, 0x69fc, 0x69ea, 0x69eb, 0x69ec, + 0x69ed, 0x69ee, 0x69ef, 0x69fa, 0x69f0, 0x69f1, 0x69f2, 0x69f3, + 0x69f4, 0x6c52, 0x6c53, 0x6c54, 0x6c55, 0x6c58, 0x6c56, 0x52fd, + 0x6cdd, 0x6cde, 0x6ce3, 0x6cdf, 0x6ce0, 0x6e22, 0x6e23, 0x6e68, + 0x6edf, 0x00ac, 0x6f44, 0x7094, 0x7095, 0x7096, 0x7097, 0x7098, + 0x7099, 0xfa79, 0x709a, 0x709b, 0x709d, 0x709e, 0x709f, 0x70a0, + 0x72f3, 0x72f2, 0x731f, 0x7388, 0x748f, 0x7490, 0x52fd, 0x74fd, + 0x74fe, 0x74ff, 0x7500, 0x7501, 0x791a, 0x52fd, 0x78e3, 0x78e4, + 0x78e5, 0x78e6, 0x78e7, 0x78eb, 0x78e8, 0x78e9, + /* 0x27 */ + 0x78ea, 0x791d, 0x7ca4, 0x7ca3, 0x7dd4, 0x7dc6, 0x7dc7, 0x7dc8, + 0x7dc9, 0x7dca, 0x7dcb, 0x7dcc, 0x7dcd, 0x05de, 0x7dce, 0x25c3, + 0x81b8, 0x81b9, 0x81ba, 0x836e, 0x83db, 0x83dc, 0x8468, 0x8469, + 0x846a, 0x846b, 0x846c, 0x846d, 0x846e, 0x2719, 0x8624, 0x8625, + 0x52fd, 0x8700, 0x86e5, 0x86f9, 0x86e7, 0x86e8, 0x86e9, 0x86fe, + 0x86ea, 0x86eb, 0x86ec, 0x0749, 0x86ed, 0x28a1, 0x86ee, 0x28a6, + 0x86ef, 0x52fd, 0x8717, 0x86f0, 0x86f1, 0x8b94, 0x8c5b, 0x8c5c, + 0x8c5d, 0x8e2f, 0x0891, 0x8e30, 0x8e31, 0x8e32, 0x8e33, 0x8fcc, + 0x8fcd, 0x8fce, 0x8fae, 0x8faf, 0x8fb0, 0x08d3, 0x8fcf, 0x8fd0, + 0x8fd1, 0x8fd2, 0x8fd3, 0x52fd, 0x8fd4, 0x09a9, 0x94a6, 0x94a7, + 0x94a8, 0x94b0, 0x94a9, 0x94aa, 0x94ab, 0x94ac, 0x94ad, 0x97fb, + 0x97fc, 0x52fd, 0x992d, 0x992e, 0x9950, 0x992f, + /* 0x28 */ + 0x9930, 0x9a65, 0x9be6, 0x9c0c, 0x9c02, 0x9c03, 0x9c04, 0x9c05, + 0x9c06, 0x52fd, 0x9ec0, 0x9f24, 0x9f25, 0xa016, 0xa032, 0xa720, + 0xa721, 0xa722, 0xa723, 0x36fe, 0xa725, 0xa919, 0xa924, 0xa91a, + 0xa91b, 0xa91c, 0xa91d, 0xfb52, 0xa91e, 0xaa5a, 0xaa5b, 0xaa5c, + 0xaa5d, 0xaa5e, 0xac31, 0x52fd, 0xb129, 0x52fd, 0xb288, 0xb289, + 0xb589, 0x3d57, 0xb656, 0xb7d1, 0xb7e6, 0xb832, 0xb833, 0xb952, + 0xb953, 0x0ed5, 0xb954, 0xb955, 0x52fd, 0x52fd, 0xbe29, 0xbe2a, + 0xbe2b, 0xbe2c, 0xbe2d, 0xfb92, 0xbe2e, 0xbe2f, 0xbe30, 0xbe31, + 0xbe32, 0xbe33, 0x3ec5, 0xbe34, 0xc49b, 0xc523, 0xc524, 0x52fd, + 0xc525, 0xc527, 0xc916, 0xcfa0, 0xd76f, 0x45df, 0xd770, 0xd771, + 0x45dc, 0x138c, 0xd772, 0xd773, 0xd774, 0xd99c, 0xd9aa, 0xd99d, + 0xd99e, 0x0c99, 0xd9ab, 0xd99f, 0xe135, 0xe138, + /* 0x29 */ + 0xf68d, 0x5335, 0x5336, 0xadee, 0x53b4, 0xf9c9, 0x5432, 0x5455, + 0x5544, 0x5545, 0x5546, 0x5547, 0x17e4, 0x5548, 0x5549, 0x52fd, + 0x554a, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5550, 0x5551, + 0xb599, 0x58d1, 0x52fd, 0x58d2, 0x58d3, 0x58d4, 0x58d5, 0x5a21, + 0x5a22, 0x5a23, 0x5b68, 0x5b69, 0x5b6a, 0x5be2, 0x5c45, 0x5cec, + 0x5ced, 0x5cee, 0x5cef, 0x52fd, 0x5d62, 0x5d63, 0x5df4, 0x536f, + 0x5e44, 0x5e45, 0x5f79, 0x1c1b, 0x5f7a, 0x5f7b, 0x5f7c, 0x5f7d, + 0x5f7e, 0x5f7f, 0x5f80, 0x0188, 0x52fd, 0x5f81, 0x5f82, 0x5f83, + 0x5f84, 0x5f85, 0x5f86, 0x5f87, 0x5f8f, 0x5f88, 0x5f89, 0x65c5, + 0x65c6, 0x1eaa, 0x65c7, 0x65c8, 0x65c9, 0x65ca, 0x65cb, 0x65cc, + 0x1eab, 0x65cd, 0x65ce, 0x65e3, 0x65cf, 0x65d0, 0x65d1, 0x65d2, + 0x65d3, 0x65c4, 0x65d4, 0x65d5, 0x65d6, 0x6820, + /* 0x2a */ + 0x6821, 0x691a, 0x6912, 0x6914, 0x6915, 0x6916, 0x6919, 0x6917, + 0x6918, 0x02c9, 0xfa61, 0x52fd, 0x6a12, 0x6a13, 0x6a14, 0x6a15, + 0x6a16, 0x6a17, 0x6a18, 0x6a19, 0x6c61, 0x6c62, 0x6c63, 0x6cf5, + 0x21a9, 0x6cf6, 0x6cf7, 0x6cf8, 0x6e29, 0x0517, 0x6f5d, 0x6f57, + 0x6f58, 0x6f59, 0x6f5a, 0x6f5b, 0x70bb, 0x70d1, 0x70bc, 0x70bd, + 0xbbdf, 0x70d0, 0x70be, 0x70bf, 0x70c0, 0x70c1, 0x70c2, 0x70c3, + 0x70c4, 0xbe6c, 0x73a1, 0x73a2, 0x73a3, 0x7493, 0x750d, 0x750f, + 0x750e, 0x7510, 0x7511, 0x7512, 0xfa95, 0x77e5, 0x792f, 0x52fd, + 0x7957, 0x7930, 0x7968, 0x792b, 0x7931, 0x7958, 0xfaa2, 0x7932, + 0x7959, 0x52fd, 0x795a, 0x7933, 0x795b, 0x795c, 0x795d, 0x791e, + 0x7cae, 0x7caf, 0x7d3b, 0x7d3c, 0x7d3d, 0x7e07, 0x7e08, 0x7e09, + 0x7e0a, 0x7e0b, 0x7e0c, 0x7e0d, 0x7e0e, 0x7e0f, + /* 0x2b */ + 0x7e10, 0x7e22, 0x7e11, 0x7e12, 0x7e13, 0x7e14, 0x7e15, 0x7e16, + 0x7e17, 0x7e18, 0xfab8, 0x52fd, 0x8346, 0x8347, 0x8348, 0x83e1, + 0x8481, 0x8483, 0x5f75, 0x52fd, 0x8485, 0x8486, 0x862a, 0xfad1, + 0x862b, 0x866b, 0x8718, 0x8719, 0x871a, 0x52fd, 0x871b, 0x871c, + 0x871d, 0x871e, 0x871f, 0x8720, 0x8721, 0x8722, 0x8723, 0x2911, + 0x8724, 0x8725, 0x8726, 0x8727, 0x8728, 0x8729, 0x872a, 0x8cef, + 0x8e49, 0x8e4a, 0x8e4b, 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50, + 0x8e51, 0x8e52, 0x8e53, 0x8e54, 0x8e5a, 0x8e55, 0x8f5f, 0x9002, + 0x9003, 0x9004, 0x9005, 0x8fd5, 0x9006, 0x9007, 0x8fd6, 0x9008, + 0x9009, 0x900a, 0x900b, 0x8fd7, 0x900c, 0x900d, 0x94c8, 0x94c9, + 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94cf, 0x94d0, 0x94d1, + 0x94d2, 0x3451, 0x94d3, 0x94d4, 0x94d5, 0x94d6, + /* 0x2c */ + 0x94d7, 0x94e2, 0x94d8, 0x9804, 0x9805, 0x9806, 0x52fd, 0x9943, + 0x9944, 0x9a84, 0x9a8f, 0x9a85, 0x9a86, 0x9c2f, 0x9c1a, 0x9c1b, + 0x9c1c, 0x0abd, 0x9c1d, 0x9c1e, 0x9c1f, 0x9c20, 0x9c21, 0x9c22, + 0xfb2c, 0x9c23, 0x9c24, 0x9c0e, 0x9c25, 0x9c2b, 0x9c2c, 0x9c0b, + 0x9dee, 0x52fd, 0x9ec3, 0x9ed8, 0x9ed9, 0x9f38, 0x9f39, 0x9f3a, + 0x9f3b, 0x3453, 0x9f3c, 0x9f3d, 0x9f3e, 0x9f3f, 0x9f40, 0xa048, + 0xa04c, 0xa228, 0xa251, 0xa252, 0xa34c, 0xa423, 0xfb45, 0xa424, + 0xa731, 0xa732, 0xa733, 0x3718, 0xa734, 0xa735, 0xa736, 0xa740, + 0xa737, 0x52fd, 0xa738, 0xa73d, 0xa938, 0xa939, 0xa93a, 0xa93b, + 0xa93c, 0xa94c, 0xaa73, 0xaa74, 0x0d33, 0xaa75, 0xaa76, 0xaa79, + 0xac41, 0xac42, 0xac43, 0xad5b, 0x52fd, 0x39d7, 0x8ba6, 0xad5c, + 0xade5, 0xade6, 0xade7, 0xade8, 0xaded, 0xb130, + /* 0x2d */ + 0x3b7e, 0xb131, 0xb294, 0xb651, 0xb6fd, 0xb6fe, 0xb7e9, 0x52fd, + 0xb9b3, 0xb984, 0xb994, 0x52fd, 0xb99c, 0x52fd, 0xb985, 0xbc00, + 0xbc37, 0xbc57, 0xbe54, 0xbe68, 0xbe55, 0xbe5c, 0xbe56, 0xbe57, + 0xbe58, 0xbe59, 0xbe5a, 0xbe5b, 0xc534, 0x407e, 0xc535, 0x52fd, + 0xc539, 0xc536, 0xc537, 0xc538, 0xc8e5, 0xc959, 0x52fd, 0xc93a, + 0xc93b, 0xd028, 0xd189, 0x52fd, 0xd18a, 0xd18b, 0xd18c, 0xd18d, + 0xd2bc, 0xd5a3, 0x1344, 0xd5a4, 0xd793, 0xd794, 0xd795, 0xd796, + 0xd797, 0xd9b9, 0xe14f, 0xe150, 0xe151, 0xe376, 0x52fd, 0x53fb, + 0x5383, 0x5438, 0x545d, 0x5571, 0x52fd, 0x5577, 0x5578, 0xfa07, + 0x55c3, 0x5579, 0x557a, 0x557b, 0x557c, 0x5572, 0x557d, 0x55a0, + 0x557e, 0x557f, 0x5580, 0x5581, 0x5582, 0x5583, 0x559e, 0x5584, + 0x5585, 0x5586, 0x5587, 0x5588, 0x5793, 0x5794, + /* 0x2e */ + 0x5795, 0x57ef, 0x57f0, 0x52fd, 0x588d, 0x588f, 0x5890, 0x5891, + 0x5892, 0x58de, 0x58e1, 0x5953, 0x1966, 0x5a4a, 0x5a4b, 0x5a4c, + 0x5a51, 0x5a4d, 0x5a48, 0x5b74, 0x5b75, 0x5c20, 0x5c21, 0x5ca5, + 0x5ca6, 0x5d73, 0x5d74, 0x5e50, 0x5e51, 0x5e52, 0x5e53, 0x5fdb, + 0x5fdc, 0x1c20, 0x5fdd, 0x5fde, 0x5fff, 0x52fd, 0x52fd, 0x5fdf, + 0x5fe0, 0x1c21, 0x5fe1, 0x5fe2, 0x5fe3, 0x5fe4, 0x5fe5, 0x5fe6, + 0x5fe7, 0x5fe8, 0x5fe9, 0x5fea, 0x6607, 0x6608, 0x6609, 0x660a, + 0x660b, 0x660c, 0x660d, 0x1ed7, 0x661a, 0x660e, 0x660f, 0x6610, + 0x661c, 0x6827, 0x6866, 0x6898, 0x6899, 0x6933, 0x6924, 0x6925, + 0x6926, 0x52fd, 0x02e1, 0x6a3e, 0xfa64, 0x6a3f, 0x6a57, 0x6a40, + 0x6a41, 0x6a58, 0x6a42, 0x6a43, 0x6a44, 0x6a45, 0x6a46, 0x02e2, + 0x6a47, 0x6c6b, 0x6c6c, 0x6d10, 0x6d11, 0x21be, + /* 0x2f */ + 0x6e75, 0x6eef, 0x6f6a, 0x6f6b, 0x52fd, 0x6f6c, 0x6f6d, 0x6f6e, + 0x70ef, 0x70f0, 0x70f1, 0x70f2, 0x70f3, 0x70f4, 0x70f5, 0x70ff, + 0x70f6, 0x7102, 0x70f7, 0x7322, 0x73c4, 0x73c3, 0x7528, 0x047c, + 0x7620, 0x7625, 0x7622, 0x7623, 0x76eb, 0x04e3, 0x77f9, 0x77fa, + 0x7999, 0x799a, 0x799b, 0x7963, 0x52fd, 0x795e, 0x795f, 0x7960, + 0x799c, 0x7961, 0x799d, 0x7e54, 0x7e55, 0x7e56, 0x7e57, 0x7e58, + 0x7e59, 0x7e5a, 0x7e19, 0x7e6a, 0x7e5b, 0x7e5c, 0x7e5d, 0x7e66, + 0x52fd, 0x7e5e, 0x7e5f, 0x7e1a, 0x7e60, 0x7e61, 0x52fd, 0x7e62, + 0x7e1b, 0x7e63, 0xb710, 0xb711, 0x834c, 0x839b, 0x83eb, 0x83ec, + 0x83ed, 0x83ee, 0x84a3, 0x84a8, 0x84a6, 0x06ec, 0x862f, 0x8630, + 0x8631, 0x8632, 0x8633, 0x874f, 0x8751, 0x8752, 0x877d, 0x8753, + 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, + /* 0x30 */ + 0x875a, 0x875b, 0x875c, 0x2957, 0x875d, 0x875e, 0x875f, 0x876f, + 0x8760, 0x8761, 0x8762, 0x8763, 0x8772, 0x8764, 0x52fd, 0x876e, + 0x8bb5, 0x8e65, 0x8e66, 0x8e67, 0x8e68, 0x8e69, 0x8e6a, 0x8e6b, + 0x8e6c, 0x900e, 0x9043, 0x52fd, 0x900f, 0x9044, 0x9045, 0x9046, + 0x9047, 0x9048, 0x9049, 0x9010, 0x904a, 0x904b, 0x904c, 0x904d, + 0x08df, 0x904e, 0x904f, 0x9050, 0x9051, 0x9052, 0x9053, 0x9054, + 0x9055, 0x9056, 0x9057, 0x9058, 0x9059, 0x905a, 0x901d, 0x905b, + 0x905c, 0x905d, 0xfb06, 0x52fd, 0x94fe, 0x94ff, 0x9500, 0x9501, + 0x9502, 0x9503, 0x9504, 0x9505, 0x9506, 0x9507, 0x9518, 0x9508, + 0x9509, 0x94f3, 0x950a, 0x950b, 0x951b, 0x950c, 0x950d, 0x950e, + 0x950f, 0x9510, 0x980f, 0x9861, 0x9879, 0x9ac1, 0x9aac, 0x9aad, + 0x9c43, 0x9c44, 0x9c45, 0x9c46, 0x9c47, 0x9c48, + /* 0x31 */ + 0x9c49, 0x9c64, 0x9c4a, 0x9c4b, 0x9c4c, 0x9c4d, 0x0ac7, 0xfb2d, + 0x9e39, 0x9f57, 0x9f58, 0x9f59, 0x9f5f, 0x9f5a, 0xa06a, 0xa22b, + 0xa25d, 0xa25e, 0xa25f, 0x52fd, 0xa260, 0xa261, 0xa358, 0xa359, + 0xa44a, 0xa44b, 0xa44c, 0xa44d, 0xa44e, 0xa757, 0xa6b3, 0xa6b4, + 0xa76e, 0xa75b, 0xa75c, 0x52fd, 0xa75d, 0xa75e, 0x52fd, 0xa76c, + 0xa93d, 0xa954, 0xa93e, 0xa955, 0xa956, 0xa93f, 0xa957, 0xa958, + 0xa959, 0xa95a, 0xa95b, 0xa95c, 0xaa88, 0xaa89, 0x52fd, 0xac58, + 0xac59, 0xac5a, 0x52fd, 0xad67, 0xad68, 0xad69, 0xad6a, 0x52fd, + 0xad6b, 0xad6c, 0xadfe, 0xadff, 0xae00, 0xae01, 0xae02, 0xae03, + 0xae04, 0xae05, 0xb139, 0xb13a, 0xb13b, 0xb13c, 0x52fd, 0x52fd, + 0xb2b2, 0xb2b3, 0xb2b4, 0xb2b5, 0xb2b6, 0xb2b7, 0xb2b8, 0x3d3c, + 0xb5a2, 0xb661, 0xb662, 0xb714, 0x52fd, 0xb7eb, + /* 0x32 */ + 0xb842, 0xb848, 0x52fd, 0xb843, 0xb84e, 0xb844, 0xb845, 0xb9b4, + 0xb9b5, 0x52fd, 0x52fd, 0x52fd, 0xb9b6, 0x52fd, 0xbbe1, 0xbc05, + 0x52fd, 0x3e73, 0xbe9a, 0x52fd, 0xbe9b, 0xbe9c, 0xbe9d, 0xbe9e, + 0xbe9f, 0xfb9a, 0xbea0, 0xbea1, 0xbea2, 0xbeb5, 0xbea3, 0xbea4, + 0x52fd, 0xbea5, 0xbea6, 0xbea7, 0xbea8, 0xbeaf, 0xbea9, 0xbeaa, + 0xbeab, 0xbeac, 0xbead, 0xbeb3, 0x52fd, 0xc4a0, 0xc556, 0xc934, + 0x1127, 0xc93c, 0xcb0c, 0x52fd, 0xcf3e, 0xcfa3, 0xd030, 0xd031, + 0xd197, 0xd198, 0xd199, 0xd19a, 0xd19b, 0xd5b2, 0xd5ab, 0xd5ac, + 0xd9fc, 0xd9e8, 0xd9e9, 0xd9ea, 0xdaf1, 0xdc3f, 0xdfce, 0xe16d, + 0xe16e, 0xe16f, 0xe170, 0xe171, 0xe172, 0xe173, 0x4bbe, 0xe378, + 0xeb3a, 0x5467, 0x27fa, 0x5464, 0x5465, 0x5607, 0x55c4, 0x55c5, + 0x55c6, 0x55c7, 0x55c8, 0x55c9, 0x55e5, 0x55ca, + /* 0x33 */ + 0x55cb, 0x52fd, 0x55cc, 0x55cd, 0x55ce, 0x55cf, 0x55d0, 0x5797, + 0x579a, 0x579b, 0x58ea, 0x58ec, 0x58ed, 0x58f7, 0x58ee, 0x58ef, + 0x595b, 0x595c, 0x595d, 0x5a6d, 0x5a6e, 0x52fd, 0x5a6f, 0x5b81, + 0x5b82, 0x5c4f, 0x5cad, 0xda0a, 0x5d7e, 0x5e69, 0x6054, 0x6055, + 0x6056, 0x6057, 0x01ab, 0x6058, 0x6059, 0x605a, 0x605b, 0x605c, + 0x605d, 0x52fd, 0x52fd, 0x605e, 0x605f, 0x663b, 0x6636, 0x663c, + 0x663d, 0x663e, 0x663f, 0x6640, 0x6641, 0x6642, 0x024b, 0x6643, + 0x6644, 0x6645, 0x6637, 0x52fd, 0x52fd, 0x6646, 0x6647, 0x6648, + 0x6649, 0x682d, 0x68a5, 0x693d, 0x693f, 0x6c6e, 0x6ae7, 0x6a75, + 0x6a76, 0x6a77, 0x6a78, 0x6a79, 0x6a7a, 0x6a7b, 0x6a7c, 0x6a8e, + 0x6a7d, 0x6a7e, 0x2072, 0x6a7f, 0x6a80, 0x6a81, 0x6a82, 0x6a83, + 0x6a84, 0x6a85, 0x6a86, 0x6a87, 0x6a88, 0x6a89, + /* 0x34 */ + 0x6a8a, 0x6a8b, 0x6a8c, 0x6c6f, 0x6c70, 0x6c71, 0x6c72, 0x6d2a, + 0x6d2b, 0x6d2c, 0x6d2d, 0x6d2e, 0x6d2f, 0x6d30, 0x6d31, 0x6e83, + 0x6f84, 0x6f85, 0x6f93, 0x52fd, 0x6f86, 0x6f87, 0x6f88, 0x6f89, + 0x6f8a, 0x6f8b, 0x7136, 0x7138, 0x7139, 0x713a, 0x03e2, 0x713b, + 0x713c, 0x713d, 0x713e, 0x713f, 0x52fd, 0x7140, 0x7141, 0x7142, + 0x73de, 0x73df, 0x73e0, 0x73e1, 0x754a, 0x754b, 0x754c, 0x754d, + 0x754e, 0x754f, 0x7550, 0x7627, 0x76f9, 0x76fa, 0x76fb, 0x7798, + 0x7799, 0x779a, 0x52fd, 0x781e, 0x799e, 0x79f7, 0x799f, 0x79a0, + 0x79f0, 0x79f8, 0x79f9, 0x79a1, 0x79a2, 0x79a3, 0x79a4, 0x79a5, + 0x79fa, 0x79fb, 0x79fc, 0x79fd, 0x79fe, 0x7a1f, 0x79ff, 0x7a00, + 0x7a8c, 0x7a01, 0x7cc2, 0x7cc3, 0x52fd, 0x7cd3, 0x7d4e, 0x7eaf, + 0x7eb0, 0x7eb1, 0x7eb2, 0x7eb3, 0x7ec6, 0x7eb4, + /* 0x35 */ + 0x52fd, 0x7eb5, 0x7eb6, 0x7eb7, 0x7eb8, 0x7eb9, 0x7eba, 0x7ebb, + 0x7ebc, 0x7ebd, 0x7ebe, 0x7ebf, 0x7ec1, 0x7ec0, 0x7ec2, 0x7ec3, + 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x835a, 0x8350, 0x8351, + 0x8378, 0x83f8, 0x83f9, 0x84c6, 0x84cb, 0x84cc, 0x84cd, 0x84ce, + 0x84cf, 0x84d0, 0x84d1, 0x84d2, 0x84d3, 0x84d4, 0x84d5, 0x52fd, + 0x8637, 0x8638, 0x8673, 0x8790, 0x8791, 0x87bf, 0x8792, 0x8793, + 0x8794, 0x8795, 0x8796, 0x8797, 0x8798, 0x8799, 0x29bd, 0x879a, + 0x879b, 0x879c, 0x879d, 0x879e, 0x879f, 0x87a0, 0x87a1, 0x87a2, + 0x87a3, 0x87a4, 0x87a5, 0x52fd, 0x87a6, 0x87a7, 0x8bbf, 0x8bc0, + 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, 0x8bc6, 0x8c75, 0x8d43, + 0x8d12, 0x8d9f, 0x8d91, 0xfaf6, 0x8d92, 0x8d93, 0x8d94, 0x8e7e, + 0x8e7f, 0x8e80, 0x8e81, 0x8e82, 0x8f4c, 0x8f63, + /* 0x36 */ + 0x90c0, 0x90c1, 0x90c2, 0x953a, 0x90c3, 0x90c4, 0x90c5, 0x90c6, + 0x2e15, 0x90c7, 0x52fd, 0x90c8, 0x9073, 0x90c9, 0x90ca, 0x90cb, + 0x90cc, 0x90cd, 0x090e, 0x52fd, 0x52fd, 0x90ce, 0x90cf, 0x90d0, + 0x90d1, 0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x953b, 0x953c, 0x953d, + 0x953e, 0x52fd, 0x953f, 0x9540, 0x9541, 0x9542, 0x9543, 0x09c1, + 0x9544, 0x9545, 0x9559, 0x9546, 0x9547, 0x9548, 0x52fd, 0x9549, + 0x9813, 0x9882, 0x9883, 0x9966, 0x9967, 0x9c65, 0x3313, 0x9c66, + 0x0ad9, 0x9c75, 0x9c74, 0x9c67, 0x9c6d, 0x9c76, 0x9c68, 0x9c69, + 0x9c6a, 0x9c6b, 0x9c4f, 0x9c6c, 0x9df8, 0x9e45, 0x33f8, 0x9e46, + 0x9ee4, 0x9f85, 0x9f6f, 0x9f70, 0xa082, 0xa083, 0xa084, 0xa08b, + 0xa22d, 0xa268, 0xa269, 0xa277, 0xa264, 0xa26a, 0x52fd, 0xa2f2, + 0xa2e2, 0xa363, 0xa364, 0xa365, 0xa366, 0x3a3d, + /* 0x37 */ + 0xa367, 0xa368, 0x35d8, 0x52fd, 0xa472, 0xa47d, 0xa669, 0xa784, + 0xa786, 0xa787, 0xa788, 0xa79e, 0x52fd, 0xa789, 0xa78a, 0xa796, + 0xa78b, 0xa78c, 0xa78d, 0xa979, 0xa983, 0xa97a, 0xa95d, 0xa97b, + 0x52fd, 0xaa9f, 0x0d48, 0xaaa0, 0xaaa1, 0xaaa2, 0x38fc, 0xac6a, + 0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xad78, 0x52fd, 0xad79, 0xad7c, + 0xae21, 0xae22, 0xae23, 0xae24, 0x3a39, 0xae25, 0xae26, 0xb151, + 0xb152, 0xb156, 0x52fd, 0x3c4b, 0xb2e1, 0x52fd, 0x52fd, 0xb2d6, + 0xb2d7, 0xb2d8, 0xb2d9, 0xb5b5, 0xb66c, 0xb66f, 0xb670, 0xb7bc, + 0xb7bd, 0xb7ed, 0xb85b, 0xb85c, 0xb85d, 0xb85e, 0xb986, 0xb987, + 0xb9ed, 0x52fd, 0xb9ee, 0x52fd, 0xbc0e, 0xbc0f, 0x52fd, 0xbd2d, + 0xbd2a, 0xbd2e, 0xbdcc, 0xbef9, 0xbefa, 0xbefb, 0xbefc, 0x3fb9, + 0xbefd, 0xbf1b, 0xbefe, 0xbeff, 0xbf00, 0xbf01, + /* 0x38 */ + 0xbf02, 0xbf03, 0xbf21, 0xbf04, 0xbf05, 0xbf06, 0xbf07, 0xbf08, + 0xbf09, 0xbf0a, 0xbf0b, 0xbf0c, 0xbf0d, 0xbf0e, 0xbf0f, 0xbf10, + 0xbf11, 0xbf12, 0xbf13, 0xbf14, 0xbf15, 0xc57b, 0xc57c, 0xc57d, + 0xc57e, 0x40cf, 0xc57f, 0xc580, 0xc566, 0xc581, 0xc582, 0xc583, + 0xc8b2, 0x52fd, 0xc97f, 0xc972, 0xc95a, 0xcaeb, 0xcb15, 0x52fd, + 0xcb16, 0xfbca, 0xcb17, 0x52fd, 0xcbc5, 0xcbc6, 0xcbc7, 0xcc88, + 0xcc89, 0x52fd, 0xcc8a, 0xcc8b, 0xcc8c, 0xcc8d, 0xcedf, 0x52fd, + 0xd03b, 0xd03c, 0xd03d, 0xd03e, 0xd03f, 0xd040, 0xd041, 0xd042, + 0xd15c, 0xd1af, 0xd1a9, 0xd1aa, 0xd1ab, 0xd1ac, 0xd1b5, 0xd1ad, + 0xd1ae, 0xd2e2, 0xd524, 0x44ae, 0xd5c4, 0x52fd, 0xd7ea, 0xd7d3, + 0xd7d4, 0xd7d5, 0xd986, 0x52fd, 0xd987, 0xd9fd, 0xdb05, 0xdc49, + 0xdf5f, 0xdfd3, 0xdfd5, 0xe18a, 0xe18b, 0xe18c, + /* 0x39 */ + 0xe18d, 0xe18e, 0xe18f, 0xe190, 0xe191, 0xe192, 0xe193, 0xe37d, + 0xe37e, 0x4beb, 0x52fd, 0x52fd, 0xe4ec, 0xe55b, 0xef87, 0xef86, + 0x52fd, 0x5346, 0x5347, 0x5402, 0x546d, 0x546e, 0x546f, 0x560d, + 0x560e, 0x560f, 0x5610, 0x5611, 0x5612, 0x5613, 0x5614, 0x579f, + 0x57a0, 0x57a1, 0x57a3, 0x5821, 0x5822, 0x867c, 0x5895, 0x5896, + 0x5961, 0x5967, 0x5a91, 0x5a92, 0x5a93, 0x5a94, 0x5b8a, 0x5b8b, + 0x5bf7, 0x5c24, 0x5cb0, 0x5cb1, 0x5d8e, 0x5e04, 0x5e6a, 0x5e6b, + 0x5e6c, 0x5e6d, 0x60e8, 0x610c, 0x60e9, 0x60ea, 0x610d, 0x52fd, + 0x60eb, 0x60ec, 0x60ed, 0x60ee, 0x60ef, 0x60f0, 0x60f1, 0x60f2, + 0x6116, 0x60f3, 0x6104, 0x611d, 0x60f4, 0x60f5, 0x60f6, 0x60f7, + 0x1cb0, 0x6502, 0x6503, 0x6504, 0x669a, 0x667c, 0x66c5, 0x667d, + 0x667e, 0x667f, 0x6680, 0x6681, 0x1f40, 0x1f42, + /* 0x3a */ + 0x6682, 0x6683, 0x6684, 0x6685, 0x6686, 0x6687, 0x68ae, 0x694d, + 0x6ab0, 0x6adc, 0x6ab6, 0x6ab7, 0x6ab8, 0x6ab9, 0x6aba, 0x6abb, + 0x6adb, 0x6abc, 0x6abd, 0x6abe, 0x52fd, 0x6abf, 0x6ac0, 0x6ac1, + 0x6ac2, 0x6ac3, 0x6ace, 0x0301, 0x6ad9, 0x6ac4, 0x6ac5, 0x6ada, + 0x6ac6, 0x6ac7, 0x6ac8, 0x6ac9, 0x6aca, 0x6c7e, 0x6c7b, 0x6d4e, + 0x6d4f, 0x6d50, 0x6d51, 0x6d52, 0x6d53, 0x6d54, 0x6d55, 0x6e8f, + 0x6efc, 0x6fa6, 0x6fa7, 0x6fa8, 0x7023, 0x718b, 0x52fd, 0x718c, + 0x718d, 0x718e, 0x718f, 0x71a4, 0x5899, 0x7324, 0x7346, 0x7347, + 0x7348, 0x73fd, 0x73fe, 0x52fd, 0x756e, 0x757c, 0x756f, 0x7570, + 0x7571, 0x7572, 0x7629, 0x762a, 0x765f, 0x77a2, 0x7830, 0x782b, + 0x7a61, 0x7a02, 0x7a03, 0x7a04, 0x7a05, 0x7a06, 0x7a07, 0x52fd, + 0x7a08, 0x7a09, 0x7a62, 0x7a0a, 0x7a0b, 0x7a0c, + /* 0x3b */ + 0x7a0d, 0x7a0e, 0x7a63, 0x7a27, 0x7a0f, 0x52fd, 0x7a1b, 0x7a64, + 0x7a10, 0x7a11, 0x7a81, 0x7a12, 0x7a65, 0x7a13, 0x7cce, 0x7f29, + 0x7ec4, 0x7f2a, 0x52fd, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2e, 0x7f2f, + 0x7f30, 0x7f31, 0x7f32, 0x7f33, 0x7f34, 0x52fd, 0x7f35, 0x7f36, + 0x7ee3, 0x7f37, 0x7f38, 0x7f39, 0x7f3a, 0x7f3b, 0x7f4d, 0x7f3c, + 0x7f3d, 0x7f3e, 0x52fd, 0x81d0, 0x81d1, 0x8355, 0x8402, 0x8404, + 0x84fc, 0x8507, 0x84fd, 0x84fe, 0x52fd, 0x84ff, 0x8500, 0x8508, + 0x8501, 0x8502, 0x8535, 0x8503, 0x8504, 0x52fd, 0x863b, 0x8689, + 0x8681, 0x8682, 0xba33, 0x87eb, 0x87ec, 0x52fd, 0x87ed, 0x87ee, + 0x87ef, 0x52fd, 0x87f0, 0x87f1, 0x87f2, 0x2a2b, 0x87f3, 0x2a16, + 0x87f4, 0x87f5, 0x534b, 0x87f6, 0x87f7, 0x87f8, 0x87f9, 0x87fa, + 0x87fb, 0x87fc, 0x87fd, 0x87fe, 0x87ff, 0x8800, + /* 0x3c */ + 0x2a1b, 0x8801, 0x8802, 0x8803, 0x8804, 0x8805, 0x8806, 0x8807, + 0x2a27, 0x8808, 0x8809, 0x880a, 0x880b, 0x880c, 0x880d, 0x8bd7, + 0x8bd8, 0x8d29, 0x8d9c, 0x8df8, 0x8e98, 0x8ea4, 0x8e99, 0x8e9a, + 0x8e9b, 0x8e97, 0x8e9c, 0x2cf5, 0x8e9d, 0x52fd, 0x8e9e, 0x8e9f, + 0x8f65, 0x90d6, 0x0920, 0x9132, 0x9133, 0x9134, 0x2e82, 0x9135, + 0x9136, 0x9137, 0x90d7, 0x52fd, 0x90d8, 0x9138, 0x9139, 0x913a, + 0x913b, 0x913c, 0x913d, 0x913e, 0x913f, 0x9140, 0x90d9, 0x9141, + 0x9142, 0x0921, 0x9143, 0x9144, 0x2e7a, 0x957c, 0x957d, 0x957e, + 0x957f, 0x9580, 0x9581, 0x9582, 0x52fd, 0x9583, 0x9584, 0x9585, + 0x9586, 0x95a5, 0x9587, 0x9588, 0x9589, 0x958a, 0x958b, 0x958c, + 0x958d, 0x958e, 0x52fd, 0x52fd, 0x958f, 0x52fd, 0x9590, 0x9591, + 0x9592, 0x9593, 0x9594, 0x9595, 0x52fd, 0x3129, + /* 0x3d */ + 0x9596, 0x9856, 0x9857, 0x98e1, 0x990e, 0x990f, 0x997a, 0x997b, + 0x998b, 0x9af2, 0x9af3, 0x9c93, 0x9c94, 0x9c95, 0x9c96, 0x9c97, + 0x9cad, 0x9c98, 0x9cab, 0x9c7b, 0x9c99, 0x9c9a, 0x9c9b, 0x9c85, + 0x9c9c, 0x9c9d, 0x0ada, 0x52fd, 0x9cac, 0x9c79, 0x9c9e, 0x9ca4, + 0x9dfd, 0x9eeb, 0x9eea, 0x9f8f, 0x9f90, 0x9f86, 0x9f87, 0x9f88, + 0xa0ac, 0xa0ad, 0xa2ec, 0xa373, 0xa374, 0x52fd, 0xa4aa, 0xa4ab, + 0xa4ac, 0xa6d1, 0xa6d7, 0xa7b9, 0xa7ba, 0xa7bb, 0xa7bc, 0xa98e, + 0xa98f, 0xa990, 0xa97c, 0xa991, 0xa992, 0xa993, 0xa994, 0xfb54, + 0xa99a, 0xa995, 0xa996, 0xa997, 0xaabd, 0xaac7, 0xaabe, 0x52fd, + 0xaabf, 0x52fd, 0xac93, 0x6d5e, 0xad86, 0xad87, 0xad88, 0xad89, + 0xae41, 0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae4a, 0xae47, + 0xae48, 0xae49, 0xb16b, 0xb166, 0x52fd, 0xb167, + /* 0x3e */ + 0x3bab, 0xb168, 0x3bac, 0x52fd, 0xb2fd, 0xb2fe, 0xb2ff, 0xb300, + 0xb301, 0xb302, 0xb303, 0xb304, 0xb305, 0xb306, 0xb533, 0xb5c2, + 0xb5d0, 0xfb74, 0xb695, 0xb696, 0xb735, 0xb736, 0xb867, 0xb868, + 0xb869, 0xb86a, 0xb872, 0xb86b, 0xb86c, 0xb86d, 0xb86e, 0xb86f, + 0xba22, 0x52fd, 0x52fd, 0xba23, 0xba41, 0xba24, 0xba25, 0xba26, + 0xba27, 0xba28, 0xba29, 0xb9b7, 0x52fd, 0x52fd, 0x52fd, 0xbcda, + 0xbdcf, 0xbdda, 0xbf89, 0xbfb7, 0xbf8a, 0xbf8b, 0xc05e, 0xbf8c, + 0x52fd, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92, 0xbf93, + 0xbf94, 0xbfb6, 0xbf95, 0xbf96, 0xbf97, 0x3ff7, 0x52fd, 0xbf98, + 0xbf99, 0xbf9a, 0x0fea, 0x52fd, 0xbf9b, 0xbfbd, 0xbf9c, 0xbf9d, + 0xbf9e, 0xbf9f, 0xbfc0, 0xbfa0, 0xbfa1, 0xbfa2, 0xbfa3, 0xbfa4, + 0xbfa5, 0xbfa6, 0xbfa7, 0xbfa8, 0xbfa9, 0xbfaa, + /* 0x3f */ + 0x52fd, 0xc4b4, 0xc4b5, 0xc4b6, 0xc5b9, 0xc5ba, 0xc5bb, 0xc591, + 0xc5bc, 0xc8ee, 0xc8ef, 0xc996, 0xc997, 0xc973, 0xc998, 0xc999, + 0xcaed, 0xcaee, 0xcbde, 0xccb0, 0xccb1, 0xccb2, 0xccb3, 0xccb4, + 0xccb5, 0xccb6, 0xfbce, 0xccb7, 0xcee3, 0xcfb9, 0xd055, 0xd07e, + 0xd056, 0xd057, 0xd058, 0xd059, 0xd05a, 0x52fd, 0xd1c4, 0xd1c5, + 0xd1c6, 0xd1c7, 0xd1c8, 0xd1c9, 0xd1ee, 0xd1cf, 0xd1ca, 0xd1cb, + 0xd1cc, 0xd309, 0xfbda, 0xd303, 0xd52f, 0xd530, 0xd531, 0xd532, + 0xd80e, 0xd80f, 0xd810, 0xd811, 0xd812, 0x52fd, 0xd813, 0xd814, + 0xd815, 0xd7ff, 0xda1f, 0xda20, 0xda21, 0xda2d, 0x52fd, 0xdb1b, + 0xdb1c, 0xdb1d, 0xdb1e, 0xdc53, 0xdc54, 0xdc55, 0xdc56, 0xdc64, + 0xdc59, 0xdc57, 0x52fd, 0xdc58, 0xdf6b, 0x1489, 0x52fd, 0xdfe7, + 0xdfe8, 0xdfe9, 0xdfea, 0xdfeb, 0xdfec, 0x4a96, + /* 0x40 */ + 0xdfed, 0xe1b1, 0xe1b4, 0x52fd, 0xe38a, 0xe38d, 0xe38c, 0xe4f2, + 0xe4f3, 0x52fd, 0x7408, 0xe717, 0x15b2, 0xe89f, 0xe9a0, 0x52fd, + 0xeb6d, 0x837d, 0xf290, 0xf8c4, 0x534c, 0x5474, 0x5475, 0x5476, + 0x5649, 0x564a, 0x564b, 0x564c, 0x564d, 0x564e, 0x564f, 0x5650, + 0x5651, 0x5652, 0x5653, 0x5654, 0x5655, 0x5656, 0x57a4, 0x57a9, + 0x582a, 0x582b, 0x5ab3, 0x5ac1, 0x5b98, 0x5bfb, 0x5bfc, 0x5cbc, + 0x5d96, 0x5e0a, 0x52fd, 0x61a2, 0x52fd, 0x6181, 0x6182, 0x6183, + 0x6184, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, 0x618a, 0x618b, + 0x618c, 0x1cf1, 0x618d, 0x61d1, 0x6514, 0x66c9, 0x66ca, 0x66cb, + 0xedfd, 0x66cc, 0x66cd, 0x66ce, 0x66cf, 0x66d0, 0x66d1, 0x66d2, + 0x66d3, 0x66d4, 0x66d5, 0x6871, 0x534d, 0x6962, 0x6b0e, 0x6afe, + 0x6aff, 0x6b00, 0x52fd, 0x6b01, 0x6b02, 0x6b03, + /* 0x41 */ + 0x6b15, 0x6b04, 0x6b05, 0x52fd, 0x6c87, 0x6c89, 0x6d6e, 0x6d6f, + 0x6d70, 0x6d71, 0xfa6e, 0x6d72, 0x6d73, 0x6d74, 0x6e9d, 0x6fb8, + 0x6fb9, 0x6fba, 0x71c2, 0x71c3, 0x71d5, 0x71c4, 0x71c0, 0x71c5, + 0x71c6, 0x758a, 0x758b, 0x758c, 0x7664, 0xae8c, 0x2441, 0x770d, + 0x77a8, 0x783b, 0x783c, 0x783d, 0x783e, 0x783f, 0x7840, 0x7a66, + 0x7acb, 0x7ab7, 0x7ab8, 0x7ab9, 0x7aba, 0x7a67, 0x7abb, 0x7a68, + 0x7a69, 0x7a6a, 0x7abc, 0x52fd, 0x7cdb, 0x7f81, 0x7f82, 0x7f83, + 0x7f84, 0x7f85, 0x7f86, 0x7f87, 0x7f88, 0x7f89, 0xfabf, 0x7f8a, + 0x7f8b, 0x52fd, 0x7f8c, 0x7f8d, 0x7f8e, 0x7f8f, 0x7f90, 0x7fa1, + 0x7f91, 0x81d6, 0x829f, 0x8358, 0x8385, 0x840b, 0x840c, 0x8537, + 0x8538, 0xface, 0x8539, 0x853a, 0x853b, 0x853c, 0x853d, 0x853e, + 0x8540, 0x8541, 0x8542, 0x52fd, 0x8543, 0x868a, + /* 0x42 */ + 0x868b, 0x8890, 0x8859, 0x885b, 0x885c, 0x885d, 0x885e, 0x2a8a, + 0x885f, 0x8860, 0x8861, 0x8862, 0x8863, 0x8864, 0x8893, 0x8865, + 0x8866, 0x8867, 0x8868, 0x8869, 0x886a, 0x886b, 0x8895, 0x886c, + 0x886d, 0x886e, 0x886f, 0x2a8c, 0x8870, 0x8871, 0x8872, 0x8873, + 0x8874, 0x8875, 0x8876, 0x8877, 0x8878, 0x8879, 0x2a80, 0x887a, + 0x2a7f, 0x887b, 0x88a9, 0x887c, 0x8bf1, 0x8beb, 0x8c8a, 0x8d3d, + 0x8da6, 0x8da7, 0x8eba, 0x52fd, 0x8ebb, 0x8ebc, 0x8ebd, 0x9191, + 0x9192, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x90da, 0x9198, + 0x9199, 0x919a, 0x52fd, 0x52fd, 0x919b, 0x919c, 0x919d, 0x919e, + 0x919f, 0x91a0, 0x91bf, 0x91a1, 0x91a2, 0x91a3, 0x91a4, 0x91a5, + 0x91a6, 0x91a7, 0x915b, 0xfb0d, 0x91a8, 0x95cb, 0x52fd, 0x09da, + 0x95cc, 0x964f, 0x95cd, 0x95ce, 0x95cf, 0x964e, + /* 0x43 */ + 0x95d0, 0x95d1, 0x95d2, 0x52fd, 0x95d3, 0x95d4, 0x95d5, 0x95d6, + 0x95d7, 0x95d8, 0x95d9, 0x95fa, 0x95da, 0x95db, 0xfb1c, 0x95dc, + 0x52fd, 0x52fd, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, + 0x95e3, 0x95e4, 0x95e5, 0x09db, 0x95e6, 0x95e7, 0x988e, 0x9998, + 0x9999, 0x52fd, 0x9b0a, 0x52fd, 0x9b26, 0x9b27, 0x9cbd, 0x9cdf, + 0x0ae2, 0x9cbe, 0x9cde, 0x9cbf, 0x9cc0, 0x9cc1, 0x9cc2, 0x9c9f, + 0x9cc3, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x0ae3, 0x9cc8, 0x9cc9, + 0x9ce3, 0x9cca, 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, + 0x9cd1, 0x9cd2, 0x9cd3, 0xfb2f, 0x9cd4, 0x9e04, 0x9e65, 0x9eee, + 0x9fa0, 0x9fa1, 0xa0dd, 0xa0de, 0xa283, 0xa2fa, 0xa37f, 0xa380, + 0xa4e8, 0xa4e9, 0xa4ea, 0x88a6, 0xa6e1, 0x52fd, 0xa7db, 0xa7dc, + 0xa7dd, 0xa7de, 0xa7df, 0xa7e0, 0xa7e1, 0xa7e2, + /* 0x44 */ + 0xa7e3, 0xa7e4, 0xa7e5, 0xa7e6, 0x379c, 0xa7e7, 0xa9b0, 0xa998, + 0xa9b1, 0xa999, 0xa9b2, 0xa9b3, 0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, + 0xa9b8, 0xa9b9, 0xaae2, 0xaae3, 0xaae4, 0xaae5, 0xaae6, 0xaae7, + 0xaae8, 0xaae9, 0xacad, 0xaccf, 0xacae, 0xacaf, 0xacb0, 0xacb1, + 0xad92, 0xad93, 0xad94, 0xae79, 0x3a7b, 0xae7a, 0xae7b, 0xae7c, + 0xae7d, 0xae7e, 0xae7f, 0xae80, 0xae81, 0xae82, 0xae83, 0xae84, + 0xb197, 0xb184, 0xb185, 0xb189, 0xb186, 0xb187, 0xb32c, 0xb32d, + 0xb32e, 0xb32f, 0xb330, 0xb331, 0xb332, 0xb333, 0xb334, 0xb335, + 0xb336, 0xb337, 0xb5d2, 0xb744, 0xb800, 0xb883, 0xb884, 0xfb86, + 0xba7a, 0xba7b, 0xba7c, 0xba7d, 0xba7e, 0x52fd, 0xba7f, 0xba87, + 0xba80, 0xbd43, 0xc034, 0x1249, 0xc035, 0xc036, 0xc037, 0xc038, + 0xc039, 0xc03a, 0xc03b, 0xc03c, 0xc03d, 0xc03e, + /* 0x45 */ + 0xc03f, 0xc040, 0xc041, 0xc042, 0xc043, 0xc044, 0xc045, 0xc046, + 0xc047, 0xc048, 0xc049, 0xc04a, 0x52fd, 0xc04b, 0xc04c, 0xc04d, + 0xc04e, 0xc5e7, 0xc5e8, 0xc5e9, 0xc5ea, 0xc5eb, 0xc5ec, 0xc5ed, + 0xc5ee, 0xc8f7, 0xc99a, 0xc9cd, 0xfbc8, 0xc9a3, 0xc9ce, 0xcb31, + 0xcb32, 0xcb33, 0xcce4, 0x52fd, 0xcce5, 0xcce6, 0xcfc8, 0xd074, + 0xd075, 0xd076, 0xd077, 0xd078, 0xd079, 0xd07a, 0xd161, 0xd1df, + 0xd1e0, 0xd1e1, 0xd1e2, 0xd1e3, 0xd1e4, 0xd1e5, 0xd1e6, 0x12f3, + 0xd331, 0xd53d, 0xd53e, 0xd53f, 0xd5f4, 0xd5f5, 0xd5f6, 0x52fd, + 0xd717, 0xd841, 0xd842, 0xd843, 0xd844, 0xd845, 0xd846, 0xd847, + 0xd848, 0xd849, 0xd84a, 0xd84b, 0x46d2, 0xd9ba, 0xda44, 0xdc2a, + 0xdc6d, 0x4774, 0xfbe7, 0xdc7e, 0xdc6e, 0xdc6f, 0xdc70, 0xdc71, + 0xdc76, 0xdf79, 0x4aa0, 0x52fd, 0xe004, 0xdff8, + /* 0x46 */ + 0xe005, 0xe1da, 0xe1db, 0xe1dc, 0xe1dd, 0xe1de, 0xe1df, 0xe1e0, + 0xe1e1, 0xe3c5, 0xe39a, 0xe39b, 0xe39c, 0xe4d8, 0xe4d9, 0xe4da, + 0xe56e, 0x1557, 0xe76b, 0xd083, 0x52fd, 0xe9d6, 0xe9bd, 0x52fd, + 0x852e, 0xedfc, 0xf053, 0xf0b7, 0xf58c, 0xf68e, 0xf5ff, 0x5376, + 0x5406, 0x547e, 0x5684, 0x5685, 0x5686, 0x5687, 0x5688, 0x56a7, + 0x5689, 0x568a, 0x568b, 0x568c, 0x568d, 0x568e, 0x568f, 0x56a3, + 0x5690, 0x5691, 0x5692, 0x5693, 0x56ac, 0x5694, 0x5695, 0x5696, + 0x57aa, 0x57ab, 0x589e, 0x18a9, 0x5908, 0x5909, 0x5968, 0x5969, + 0x596a, 0x599a, 0x5ad9, 0x5ada, 0x5adb, 0x5ba8, 0x5c01, 0x5c28, + 0x5c77, 0x5cbd, 0x5cbe, 0x6260, 0x5da0, 0x5da2, 0x5e0f, 0x5e85, + 0x61fe, 0x61ff, 0x6200, 0x6201, 0x6216, 0x6202, 0x6203, 0x6204, + 0x6205, 0x6206, 0x6207, 0x6208, 0x6222, 0x6209, + /* 0x47 */ + 0x620a, 0x620b, 0x620c, 0x6214, 0x6229, 0x616e, 0x620d, 0x620e, + 0x620f, 0x6210, 0x6211, 0x6212, 0x6213, 0x651b, 0x651c, 0x651d, + 0x6713, 0x66ff, 0x6700, 0x6701, 0x6702, 0x6703, 0x6704, 0x670a, + 0x6705, 0x6706, 0x6707, 0x6708, 0x683a, 0x6873, 0x696f, 0x6970, + 0x6971, 0x5352, 0x52fd, 0x6d9a, 0x6b60, 0xfa69, 0x6b2b, 0x6b24, + 0x6b2c, 0x6b2d, 0x6b2e, 0x6b2f, 0x6b30, 0x6b31, 0x6b32, 0x6b33, + 0x6b34, 0x6b35, 0x6b45, 0x6b36, 0x6c92, 0x6c93, 0x6d88, 0x6d89, + 0x6d8a, 0x6d8b, 0x6e3f, 0x52fd, 0x6fca, 0x71f6, 0x71f7, 0x71f8, + 0x71f9, 0x742b, 0x52fd, 0x74a4, 0x74ce, 0x52fd, 0x759e, 0x759f, + 0x75a0, 0x75a1, 0x75a2, 0x75a3, 0x75a4, 0x75a5, 0x75a6, 0x7718, + 0x7860, 0x7861, 0x7862, 0x7863, 0x7864, 0x7abd, 0x7abe, 0x7b0b, + 0x7abf, 0x7ac0, 0x52fd, 0x7b0c, 0x7a8d, 0x7b0d, + /* 0x48 */ + 0x7b0e, 0x7b5e, 0x7b0f, 0x7b10, 0x7ac1, 0x7b11, 0x52fd, 0x7ac2, + 0x7cea, 0x7ceb, 0x7fe3, 0x7fe4, 0x7fe5, 0x7fe6, 0x7fe7, 0x7f92, + 0x804a, 0x52fd, 0x7fe8, 0x7fe9, 0x7fea, 0x8001, 0x7feb, 0x7fec, + 0x7fef, 0x7fed, 0x7fee, 0x7ff0, 0x7ff1, 0x7ff2, 0x7ff3, 0x7ff4, + 0x7ff5, 0x7ff6, 0x7ff7, 0x7ff8, 0x7ff9, 0x7ffe, 0x7ffa, 0x7ffb, + 0x7ffc, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567, 0x8568, 0x890b, + 0x890d, 0x07bc, 0x890e, 0x890f, 0x07a4, 0x8914, 0x88d4, 0x88d5, + 0x88d6, 0x88d7, 0x88d8, 0x88d9, 0x88da, 0x88db, 0x88dc, 0x88dd, + 0x88de, 0x88df, 0x88e0, 0x88e1, 0x88e2, 0x88e3, 0x88e4, 0x88e5, + 0x88e6, 0x88e7, 0x88e8, 0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x89ec, + 0x88ed, 0x88ee, 0x88ef, 0x8900, 0x88f0, 0x8c04, 0x52fd, 0x8c05, + 0xfaf3, 0x8db5, 0xfaf9, 0x8ed6, 0x8ed7, 0x8ed8, + /* 0x49 */ + 0x8ed9, 0x91a9, 0x9200, 0x9201, 0x9202, 0x9203, 0x9204, 0x9205, + 0x9206, 0x923f, 0x9207, 0x9208, 0x9209, 0x920a, 0x91b6, 0x920b, + 0x920c, 0x52fd, 0x52fd, 0x920d, 0x52fd, 0x920e, 0x920f, 0x9210, + 0x9211, 0x9212, 0x9235, 0x9213, 0x9214, 0x91aa, 0x52fd, 0x92c1, + 0x9215, 0x9216, 0x9217, 0x961e, 0x961f, 0x9620, 0x9621, 0x52fd, + 0x9622, 0x9623, 0x3195, 0x9624, 0x9625, 0x9626, 0x9627, 0x9628, + 0x9629, 0x962a, 0x962b, 0x9607, 0x962c, 0x962d, 0x962e, 0x09e8, + 0x52fd, 0x962f, 0x9630, 0x9648, 0x9631, 0x9632, 0x3198, 0x9633, + 0x52fd, 0x9634, 0x9635, 0x9636, 0x9859, 0x9891, 0x98e7, 0x99b8, + 0x99b9, 0x99ba, 0x99bb, 0x99c8, 0x9b4d, 0x9b89, 0x9b50, 0x9b28, + 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9cff, 0x3378, 0x9d00, 0x9d01, + 0x9d02, 0x9ce4, 0x9ce5, 0x9d03, 0x9d04, 0x9d05, + /* 0x4a */ + 0x9d06, 0x9d07, 0x9d13, 0x9d08, 0x9d09, 0x9ce6, 0x9d0a, 0x9d0b, + 0x9d0c, 0x9e0b, 0x9ef4, 0x9f0a, 0x9fb1, 0xa11d, 0xfb3b, 0xa28b, + 0xa28c, 0xa28f, 0xa28d, 0xa28e, 0xa306, 0xa386, 0xa522, 0xa523, + 0xa524, 0xa525, 0xa526, 0xa527, 0xa528, 0xa6f1, 0x37b9, 0xa823, + 0xa812, 0x52fd, 0xa813, 0xa814, 0xa815, 0xa816, 0xa817, 0xa818, + 0xa819, 0xa84b, 0xa81a, 0xa81b, 0xa81c, 0x52fd, 0xa81d, 0xa81e, + 0xa81f, 0xa820, 0xa9ca, 0x75ac, 0xa9cb, 0xa9cc, 0xa9cd, 0xa9ce, + 0x52fd, 0xa9cf, 0xab10, 0xab11, 0xab12, 0xab13, 0xab14, 0xab0f, + 0xab15, 0xab16, 0xab17, 0x3933, 0xab18, 0xacc6, 0xad9f, 0xada0, + 0xada4, 0xada1, 0xaeb5, 0xaeb6, 0xaeb7, 0xaeb8, 0xaeb9, 0xaeba, + 0xaed0, 0xaec6, 0xaebb, 0xaebc, 0xaebd, 0xaebe, 0xaebf, 0xaec0, + 0xaec1, 0xaec2, 0xfb60, 0xb1a7, 0xb1a8, 0xb1a9, + /* 0x4b */ + 0xb1aa, 0xb1ab, 0xb1ac, 0xb1bc, 0xb1ad, 0xb1ae, 0x3bc0, 0xb1af, + 0xb1b0, 0xb1b1, 0x3bc1, 0xb1b4, 0xb1b2, 0xb366, 0xb367, 0xb368, + 0xb369, 0xb36a, 0xb36b, 0xb36c, 0xb36d, 0xb36e, 0xb36f, 0x52fd, + 0xb53e, 0xb53f, 0xb540, 0xb5e8, 0xb752, 0xb753, 0xb754, 0xb755, + 0xb891, 0xb892, 0xb893, 0xb894, 0xb895, 0xb896, 0xb897, 0xb898, + 0x52fd, 0xb899, 0xb89a, 0xb89b, 0xbab7, 0xbab8, 0xbab9, 0x52fd, + 0xbaba, 0xbabb, 0xbabd, 0x52fd, 0xbabc, 0xfb88, 0xfb87, 0xbbeb, + 0xbbec, 0xbc16, 0xbc44, 0xbce3, 0xbd58, 0xbd53, 0xbd54, 0xbde0, + 0xc0b1, 0xc0b2, 0xc0b3, 0xc0ea, 0x52fd, 0xc0b4, 0xc0f0, 0xc0b5, + 0xc0b6, 0xc0b7, 0xc0b8, 0xc0b9, 0xc0ba, 0xc0bb, 0xc0bc, 0xc0bd, + 0xc0be, 0xc0bf, 0xc0c0, 0xc0c1, 0xc0c2, 0xc0c3, 0x52fd, 0xc0c4, + 0xc0c5, 0xc0c6, 0xc0fc, 0xc0c7, 0xc0c8, 0xc0c9, + /* 0x4c */ + 0xc0ca, 0xc0cb, 0xc0cc, 0xc184, 0xc0cd, 0xc0ce, 0xc0cf, 0xc0d0, + 0xc0d1, 0xc0d2, 0xc4ca, 0xc4cb, 0xc636, 0xc637, 0xc69f, 0xc638, + 0xc639, 0xc63a, 0x4144, 0xc9be, 0xc9f0, 0xc9bf, 0xc9c0, 0xcaf7, + 0xcaf8, 0xcafa, 0xcb43, 0xcb44, 0xcd0f, 0xcd10, 0xcd11, 0xcd12, + 0x43ad, 0xcd13, 0xcd14, 0xcd15, 0xcd16, 0x52fd, 0x52fd, 0xcfd3, + 0xcfd7, 0x52fd, 0xd0b0, 0xd098, 0xd090, 0xd091, 0xd092, 0xd097, + 0xd093, 0xd164, 0xd201, 0xd202, 0xd203, 0xd204, 0xd205, 0xd206, + 0xd207, 0xd35a, 0xd35b, 0xd54e, 0xd54f, 0xd550, 0xd619, 0xd61a, + 0xd61b, 0x52fd, 0xd61c, 0x52fd, 0xd719, 0xd71a, 0x1386, 0xdc8a, + 0xd86e, 0xd86f, 0x4664, 0xd870, 0xd871, 0xd872, 0xd873, 0xd874, + 0xd875, 0xd876, 0xdb3a, 0xdb3b, 0xdb3c, 0xdb5a, 0xdb3d, 0xdb42, + 0xdc8b, 0xdca0, 0xdc8c, 0xdc8d, 0xdc8e, 0xdcab, + /* 0x4d */ + 0xdc8f, 0x4777, 0xdc90, 0xdc91, 0xdc92, 0xdcaa, 0x47af, 0xdc93, + 0xdc94, 0xdc9e, 0xdca8, 0x52fd, 0x52fd, 0xe200, 0xe201, 0xe202, + 0xe203, 0xe204, 0xe205, 0xe2c4, 0xe2c5, 0x52fd, 0xe3ae, 0xe3b2, + 0x52fd, 0x52fd, 0xe4f7, 0xe513, 0xe69e, 0xe785, 0xa680, 0xe7c8, + 0xeb41, 0xeb81, 0xeb82, 0xeb83, 0xeb84, 0xedc4, 0xedc5, 0xedc6, + 0xef95, 0xef96, 0xef97, 0xf058, 0xf059, 0x52fd, 0xf2a9, 0xf2aa, + 0xf2ab, 0xf58e, 0xf603, 0xf6b3, 0x5e82, 0x5353, 0x5483, 0x5484, + 0x5485, 0x56cc, 0x56cd, 0x56ce, 0x56cf, 0x56d0, 0x52fd, 0x56d1, + 0x56d2, 0x56da, 0x57b3, 0x57b4, 0x52fd, 0x5913, 0x590e, 0x596b, + 0x5c03, 0x5c61, 0x5cc1, 0x5cc2, 0x5db5, 0x5440, 0x6298, 0x6299, + 0x629a, 0x629b, 0x629c, 0x629d, 0x629e, 0x629f, 0x62ee, 0x62a0, + 0x62a1, 0x6286, 0x6525, 0x6734, 0x6735, 0x6751, + /* 0x4e */ + 0x672d, 0x9662, 0x6754, 0x6752, 0x026d, 0x6736, 0x6737, 0x6738, + 0x6739, 0x673a, 0x673b, 0x6768, 0x673c, 0x026e, 0x6877, 0x8596, + 0x697e, 0x697f, 0x6b69, 0x6b6a, 0x6b6b, 0x6b6c, 0x6b6d, 0x6b6e, + 0x6b6f, 0x6b5d, 0x6b70, 0x6b85, 0x6b71, 0x6b72, 0x6b73, 0x6b74, + 0x6b75, 0x6b76, 0x6b84, 0x6b77, 0x6b83, 0x6c9a, 0x6da7, 0x6da8, + 0x6da9, 0x6daa, 0x6dab, 0x6dac, 0x6db7, 0x6dad, 0x6dae, 0x52fd, + 0x6e45, 0x6fd3, 0x6fd4, 0x6fd5, 0x6fd6, 0x6fd7, 0x7226, 0x7227, + 0x7228, 0x52fd, 0x7229, 0x722a, 0x7305, 0x2364, 0x74d0, 0x75b7, + 0x52fd, 0x75b8, 0x75b9, 0x7722, 0x7723, 0x7873, 0x7874, 0x7b8f, + 0x7b12, 0x7b13, 0x7b14, 0x7b15, 0x7b16, 0x7b17, 0x7b18, 0x7b61, + 0x7b66, 0x7b67, 0x7b19, 0x7b68, 0x7b1a, 0x7b69, 0x7d04, 0x7d05, + 0x52fd, 0x7d06, 0x7cfd, 0x8050, 0x8051, 0x8052, + /* 0x4f */ + 0x8053, 0x8054, 0x8055, 0x8063, 0xfac4, 0x8056, 0x8057, 0x8058, + 0x8059, 0x805a, 0x805b, 0x52fd, 0x805c, 0x805d, 0x805e, 0x805f, + 0x82d7, 0x52fd, 0x8360, 0x8361, 0x8417, 0x8439, 0x858f, 0x85c8, + 0x8590, 0x8591, 0x8698, 0x8699, 0x8944, 0x8945, 0x8946, 0x8959, + 0x89ee, 0x2b2b, 0x8947, 0x8948, 0x52fd, 0x8949, 0x894a, 0x894b, + 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951, 0x8952, 0x8953, + 0x8954, 0x8955, 0x8956, 0x8c15, 0x8c9a, 0x8d58, 0x8dfc, 0x8dfd, + 0x9286, 0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, 0x52fd, + 0x931f, 0x928d, 0x928e, 0x928f, 0x9290, 0x9291, 0x9292, 0x9293, + 0xfb11, 0x9294, 0x9295, 0x91ca, 0x9218, 0x52fd, 0x9296, 0x9297, + 0x9298, 0x9299, 0x929a, 0x929b, 0x929c, 0x929d, 0x929e, 0x929f, + 0x2f46, 0x52fd, 0x92a0, 0x92a1, 0x2f9a, 0x92b7, + /* 0x50 */ + 0x52fd, 0x9696, 0x9668, 0x9669, 0x968c, 0x966a, 0x966b, 0x966c, + 0x966d, 0x966e, 0x966f, 0x967f, 0x9684, 0x9670, 0x9671, 0x9685, + 0x9672, 0x9673, 0x9674, 0x9675, 0x9676, 0x52fd, 0x9677, 0x9678, + 0x9679, 0x967a, 0x967b, 0x967c, 0xfb1e, 0x9894, 0x99d5, 0x9b29, + 0x9d2b, 0x9d2c, 0x9d2d, 0x9d2e, 0x9d2f, 0x9d30, 0x9d3e, 0x9d31, + 0x9d32, 0x9d33, 0x9d34, 0x9d35, 0x9e11, 0x0b53, 0x9fc0, 0xa142, + 0xa143, 0xa144, 0xa145, 0xa146, 0xa38c, 0xa38d, 0xa38e, 0xa38f, + 0xa390, 0xa391, 0xa563, 0xa564, 0xa565, 0x52fd, 0xfb4a, 0x52fd, + 0xa6f6, 0xa836, 0xa837, 0xa82c, 0xa838, 0xa839, 0x52fd, 0xa83a, + 0xa9e3, 0xa9e2, 0xa9f5, 0xab47, 0x52fd, 0xab48, 0xab49, 0xab4a, + 0xab4b, 0xab4c, 0xada8, 0xada9, 0xadaa, 0x52fd, 0xaf0b, 0xaf06, + 0xaf73, 0xaf0c, 0xaf0d, 0xaf0e, 0xaf0f, 0xaf10, + /* 0x51 */ + 0x52fd, 0xaf11, 0xfb62, 0xaf12, 0xaf14, 0xaf15, 0xaf16, 0x52fd, + 0xaf13, 0xaf17, 0xb1d9, 0xb1da, 0xb1db, 0x52fd, 0xb1dc, 0xb3a6, + 0xb3a7, 0xb3a8, 0xb3a9, 0xb3aa, 0xb3ab, 0x52fd, 0xfb6d, 0xb3ac, + 0xb3ad, 0xb3ae, 0x52fd, 0x52fd, 0xb3af, 0xb3b0, 0xb3b1, 0xb544, + 0xb545, 0xb5f7, 0xb5f8, 0xb76b, 0xb76c, 0xb761, 0xb812, 0xb8af, + 0xb8b0, 0xb8b1, 0xb8b2, 0xb8b3, 0xb8b4, 0xb8b5, 0xb8b6, 0xb922, + 0xbaea, 0xbaeb, 0xbaec, 0xbaed, 0x0f3d, 0xbbed, 0xbc1b, 0xbc47, + 0xbce8, 0xbdd0, 0xbde7, 0xbde8, 0xbde9, 0xc14e, 0xc14f, 0xc150, + 0xc172, 0xc151, 0xc152, 0xfba7, 0x1026, 0xc153, 0xc154, 0xc155, + 0xc156, 0xc157, 0xc177, 0xc158, 0xc159, 0xc15a, 0xc15b, 0xc15c, + 0xc16e, 0xc15d, 0x1027, 0x52fd, 0xc15e, 0x1028, 0xc15f, 0x52fd, + 0xc4d7, 0xc689, 0xc68a, 0x52fd, 0xfbbe, 0xc68b, + /* 0x52 */ + 0xc68c, 0xc68d, 0xc68e, 0xfbbc, 0xc68f, 0x52fd, 0xc69a, 0xc690, + 0xc691, 0xc692, 0xc693, 0xca12, 0xc9f1, 0x52fd, 0xcafe, 0xcafb, + 0xcb57, 0xcd49, 0xcd4a, 0xcd4b, 0xcd4c, 0x52fd, 0xcd4d, 0xcd59, + 0xcd4e, 0xcd4f, 0xcef4, 0xcf65, 0xd0a6, 0xd0a7, 0xd0a8, 0xd222, + 0xd223, 0xd38b, 0xd38c, 0xd38d, 0xd38e, 0xd558, 0x52fd, 0xd559, + 0xd63b, 0xd63c, 0xd63d, 0xd63e, 0xd748, 0xd894, 0xd895, 0xd896, + 0xd897, 0xd898, 0xda7d, 0xd9fe, 0xda7e, 0xda7f, 0x52fd, 0xdb5b, + 0xdb5c, 0xdce4, 0xdcc1, 0xdcfd, 0xdcc2, 0xdcd6, 0xdcc3, 0xdcc4, + 0x52fd, 0xdcdc, 0xdcc5, 0xdcc6, 0xdcc7, 0xdce1, 0xdcc8, 0xdcc9, + 0xdcca, 0xdccb, 0x47f2, 0xdccc, 0xdccd, 0xe035, 0xe036, 0xe047, + 0xe037, 0xe21b, 0xe21c, 0xe21d, 0xe21e, 0xe21f, 0xe220, 0xe27b, + 0xe27a, 0xe2fe, 0xe3c6, 0xe3c7, 0xe3c8, 0xe3c9, + /* 0x53 */ + 0xe3ca, 0x52fd, 0xe7a0, 0xe7a1, 0xe8cc, 0xe8cd, 0xe9f1, 0xe9d7, + 0xeb42, 0xeb46, 0xeba3, 0xeba5, 0xeba6, 0xedcb, 0xedcc, 0xee26, + 0xee27, 0xee28, 0xee29, 0xefae, 0xefaf, 0xefb0, 0xf073, 0x52fd, + 0xf07c, 0xf074, 0x52fd, 0xf280, 0xf075, 0x4c79, 0x52fd, 0xf2cf, + 0x52fd, 0xf68f, 0x5970, 0x5385, 0x5697, 0x56f6, 0x56f7, 0x56f8, + 0x56fa, 0x56fb, 0x57ba, 0x57bb, 0x57bc, 0x57bd, 0x5834, 0x5835, + 0x58a2, 0x5914, 0x5911, 0x596e, 0x596f, 0x5b08, 0x5bb8, 0x5d09, + 0x5dbd, 0x5dbe, 0x5e88, 0x62fe, 0x1d7a, 0x62ff, 0x6300, 0x6301, + 0x6302, 0x6303, 0x6304, 0x6305, 0x6306, 0x52fd, 0x6307, 0x6308, + 0x6309, 0x630a, 0x630b, 0x630c, 0x630d, 0x630e, 0x630f, 0x52fd, + 0x52fd, 0x52fd, 0x652c, 0x676b, 0x52fd, 0x676c, 0x6787, 0x676d, + 0x6878, 0x698b, 0x6ba4, 0x6ba5, 0x6ba6, 0x6ba7, + /* 0x54 */ + 0x6bbe, 0x6ba8, 0x6ba9, 0x6baa, 0x6b8d, 0x6bab, 0x6bac, 0x6bbf, + 0x52fd, 0x032c, 0x6bad, 0x6bae, 0x6ca4, 0x6ca5, 0x6dc7, 0x6dc8, + 0x6dc9, 0xd0bc, 0x6dca, 0x6dcb, 0x6dcc, 0x6dcd, 0x6dce, 0x6f19, + 0x6fe6, 0x724c, 0x724d, 0x724e, 0x7306, 0x52fd, 0x75cd, 0x75ce, + 0x75cf, 0x75d0, 0x245c, 0x7881, 0x7882, 0x5833, 0x7b6a, 0x7b6b, + 0x7bb2, 0x7b6c, 0x7b6d, 0x7bcc, 0x7bae, 0x7bb3, 0x7b91, 0x52fd, + 0x7b6e, 0x7bb4, 0x7b6f, 0x80c9, 0x80a7, 0x80a8, 0x80a9, 0x80aa, + 0x80ab, 0x80ac, 0x80ad, 0x80ae, 0x80af, 0x80b0, 0x8060, 0x80b1, + 0x81e1, 0x82e3, 0x82f6, 0x26d9, 0x85af, 0x85b0, 0x85b1, 0x85ba, + 0x85b2, 0x85b3, 0x864c, 0x52fd, 0x86a0, 0x86a1, 0x89b0, 0x89b1, + 0x89b2, 0x89b3, 0x89b4, 0xfaeb, 0x89b5, 0x89b6, 0x89b7, 0x89b8, + 0x89b9, 0x89ba, 0x2b72, 0x89bb, 0x89bc, 0x89bd, + /* 0x55 */ + 0x89be, 0x89bf, 0x89df, 0x89c0, 0x89c1, 0x89c2, 0x89c3, 0x89c4, + 0x2b78, 0x52fd, 0x89c5, 0x89c6, 0x89c7, 0x89c8, 0x89c9, 0x89ca, + 0x8a3c, 0x89cb, 0x89cc, 0x89cd, 0x89ce, 0x89cf, 0x89d0, 0x89d1, + 0x2c5a, 0x8c1d, 0x8c1e, 0x8d64, 0x8d65, 0x8dc5, 0x8dc6, 0x8dc7, + 0x8dff, 0x8eff, 0x8f00, 0x8f01, 0x8f02, 0x92f5, 0x935c, 0x92f6, + 0x92f7, 0x92b0, 0x92f8, 0x92f9, 0x935d, 0x9350, 0x92fa, 0x92fb, + 0x92a2, 0x92fc, 0x92fd, 0x92fe, 0x92ff, 0xfb13, 0x9300, 0xfb1f, + 0x96c1, 0x96c2, 0x96c3, 0x96c4, 0x96c5, 0x96c6, 0x96c7, 0x96c8, + 0x96c9, 0x96ca, 0x96cb, 0xe3ef, 0x96d7, 0x96cc, 0x96cd, 0x96ce, + 0x9722, 0x96cf, 0x96d0, 0x52fd, 0x96d1, 0x96d2, 0x96e9, 0x96d3, + 0x96d4, 0x96d5, 0x9838, 0x633b, 0x9b7d, 0x586f, 0x9ba1, 0x9d53, + 0x9d54, 0x0afb, 0x9d55, 0x9d3c, 0x9d56, 0x52fd, + /* 0x56 */ + 0x9d66, 0x0afc, 0x9d57, 0x9d58, 0x9d59, 0x9d5a, 0x9d5b, 0x9d67, + 0x9d5c, 0x52fd, 0x52fd, 0x9d6a, 0x9d5d, 0x9d3d, 0x9d5e, 0x9d65, + 0x9fe1, 0x9fcd, 0xf311, 0xa16f, 0xa170, 0xa31a, 0xa39a, 0xa39b, + 0xa39c, 0xa39e, 0xa39f, 0xfb3f, 0xa58e, 0x52fd, 0xa6fd, 0x52fd, + 0xa85e, 0xa85f, 0xa860, 0xa865, 0xa867, 0xa868, 0xa869, 0x52fd, + 0xa86a, 0xa88f, 0xa86b, 0xa86c, 0xa86d, 0xa9f7, 0xa9f8, 0xa9f9, + 0xa9e4, 0xa9fa, 0xabb1, 0xab75, 0xab76, 0xacff, 0xad00, 0xad01, + 0xad02, 0xad03, 0xadae, 0xadad, 0xaf51, 0xaf52, 0x52fd, 0xaf53, + 0xaf54, 0xaf55, 0xaf56, 0xaf57, 0xaf58, 0xaf59, 0xaf5a, 0xaf5b, + 0xaf5c, 0xaf5d, 0xaf5e, 0xaf5f, 0xaf60, 0xaf61, 0xaf62, 0xaf63, + 0xaf64, 0xaf4c, 0xaf66, 0xb1f1, 0xb1f2, 0xb3f2, 0xb3f3, 0xb3f4, + 0xb3f5, 0xb3f6, 0xb3f7, 0xb3f8, 0xb3f9, 0xb3fa, + /* 0x57 */ + 0xb54c, 0xb54b, 0xb61b, 0xb6ce, 0xb6b3, 0xb77f, 0xfb79, 0xfb7c, + 0xb81a, 0xb8c4, 0xb8c5, 0xb8c6, 0xb8c7, 0xb8c8, 0xb8c9, 0x52fd, + 0xbb19, 0xbb1c, 0xbb1a, 0xbc4c, 0xbc8e, 0xbd7e, 0xc1eb, 0xc1ec, + 0xc1ed, 0xc1ee, 0xc1ef, 0xc1f0, 0xc1f1, 0xc1d8, 0xc1d9, 0xc1da, + 0xc1db, 0xc1f2, 0xc1f3, 0xc1f4, 0xc207, 0x52fd, 0xfbac, 0x52fd, + 0xc1f5, 0xc215, 0x52fd, 0xc1f6, 0xc1f7, 0xc1f8, 0xc1f9, 0xc1fa, + 0xc1fb, 0xc1fc, 0xc1fd, 0xc1fe, 0xc2a7, 0xc1ff, 0xc200, 0xc201, + 0xc202, 0xc203, 0xc204, 0xc205, 0xc4e9, 0xc4ea, 0xc4eb, 0xc6de, + 0xc6df, 0x52fd, 0xc6e0, 0xc6e1, 0xc6e2, 0xc6e3, 0xca3e, 0xca3f, + 0xca40, 0xca41, 0xcb71, 0xcb72, 0xcb73, 0xcd88, 0xcd89, 0xcd8a, + 0xcd8b, 0xcd8c, 0xcd8d, 0xcd8e, 0xcd8f, 0xcd90, 0xcd91, 0xcd92, + 0x52fd, 0xcff1, 0xd0be, 0xd0bf, 0xd0c0, 0xd0c1, + /* 0x58 */ + 0xd0c2, 0xd0c3, 0xd16e, 0xd237, 0xd257, 0xd238, 0xd239, 0xd23a, + 0xd23b, 0xd23c, 0xd23d, 0xd23e, 0xd227, 0xd23f, 0x52fd, 0x52fd, + 0xd3c0, 0xd3c1, 0x44be, 0xd567, 0x52fd, 0xd568, 0xd658, 0xd665, + 0xd659, 0xd65a, 0xd724, 0xd8cd, 0xd8ce, 0xd8cf, 0xd8d2, 0xda9f, + 0xda22, 0xdb7d, 0xdb7e, 0xdcff, 0xdd25, 0xdd00, 0xdd01, 0x483b, + 0xdd02, 0xdd03, 0xdd04, 0x5128, 0xdd05, 0xdd06, 0xdd07, 0xdd16, + 0xdd08, 0xdd17, 0xdd09, 0xdd0a, 0x4840, 0xdd0b, 0xdd0c, 0xdd29, + 0x483a, 0xdd0d, 0x52fd, 0xdd0e, 0xdd10, 0xdd11, 0xdd1d, 0xdd12, + 0xdd13, 0x52fd, 0xdd14, 0xdd15, 0xdf8d, 0xe054, 0xe055, 0xe056, + 0xe233, 0xe234, 0xe235, 0xe236, 0xe2fa, 0xe3e3, 0xe3e6, 0xe3ed, + 0xe3e7, 0xe3e8, 0xe3e9, 0xe3ea, 0xe3eb, 0xe527, 0xe520, 0xfbf8, + 0xe72a, 0xe7c9, 0x52fd, 0xe7ca, 0xe7cb, 0xe7d9, + /* 0x59 */ + 0xe7cc, 0xe7cd, 0xe7ce, 0x52fd, 0xe8e1, 0xea1b, 0xea1c, 0xea1d, + 0xea1e, 0xeb47, 0xebd1, 0xebc9, 0xedd0, 0xedd1, 0xee3f, 0xee40, + 0xee41, 0xfc09, 0xee42, 0xefc4, 0xf09b, 0xf092, 0xf093, 0x4c96, + 0xf094, 0xf095, 0x52fd, 0x52fd, 0xf2f3, 0xf2f4, 0xf2f5, 0xf2f6, + 0xf560, 0xf59e, 0xf5a0, 0xf5a1, 0xf61c, 0xf69f, 0x5356, 0x5712, + 0x571f, 0x5715, 0x5716, 0x5717, 0xfa0c, 0x5718, 0x57c2, 0x57c3, + 0x57c4, 0x58a1, 0x591b, 0x591c, 0x5971, 0x5b13, 0x5e17, 0x5e8f, + 0x635f, 0x6360, 0x63ac, 0x52fd, 0x52fd, 0x6361, 0x6362, 0x6363, + 0x6364, 0x6365, 0x52fd, 0x6799, 0x679a, 0x679b, 0x679c, 0x679d, + 0x679e, 0x679f, 0x67a0, 0x6bda, 0x6bdb, 0x6bdc, 0x6bdd, 0x6bde, + 0x6bdf, 0x6dd5, 0x6dd6, 0x6dd7, 0x6dd8, 0x6de0, 0x6eb4, 0x52fd, + 0x726e, 0x726f, 0x7270, 0x7463, 0x52fd, 0x75d5, + /* 0x5a */ + 0x75d6, 0x75d7, 0x75d8, 0x7730, 0x7bb5, 0x7bb6, 0x7bc1, 0x7bf7, + 0x05a0, 0x7bcb, 0x7be8, 0x52fd, 0x7be9, 0x7bb7, 0x7d15, 0x80e6, + 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80eb, 0xfaca, 0x830b, 0x830c, + 0x8364, 0x85d4, 0x85d5, 0x85d6, 0x85d8, 0x86a5, 0x535b, 0x8a0f, + 0x8a10, 0x52fd, 0x8a11, 0x8a12, 0x8a13, 0x8a14, 0x8a15, 0x8a16, + 0x8a17, 0x8a18, 0x8a19, 0x8a1a, 0x8a2f, 0x8a1b, 0x8a1c, 0x8a3f, + 0x8a1d, 0x8a1e, 0x8a2c, 0x8a1f, 0x8c24, 0x8ca4, 0x8ca5, 0xb551, + 0x8dfe, 0x8f11, 0x8f12, 0x8f13, 0x8f54, 0x935e, 0x9321, 0x933f, + 0x9340, 0x9341, 0x9342, 0x9343, 0x9344, 0x9320, 0x9345, 0x52fd, + 0x9346, 0x93b0, 0x9347, 0x9357, 0x9301, 0x93b1, 0x935a, 0x9348, + 0x9704, 0x9705, 0x31f5, 0x974f, 0x9750, 0x9706, 0x9707, 0x9708, + 0x9709, 0x970a, 0x970b, 0x970c, 0x970d, 0x970e, + /* 0x5b */ + 0x970f, 0x9710, 0x9711, 0x9833, 0x9834, 0x9835, 0x98fc, 0x98fd, + 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3, 0x0b01, 0x9d7b, 0x9d7c, 0x9d7d, + 0x9d7e, 0x9d7f, 0x9d80, 0x9d81, 0x9d82, 0x9ef9, 0x9fda, 0xa1a1, + 0x52fd, 0x52fd, 0xa3ad, 0xa3ae, 0x52fd, 0xa5c8, 0xa5c9, 0xa5ca, + 0xa882, 0xa883, 0xa884, 0xa885, 0xa886, 0xa887, 0xa888, 0xa889, + 0xa88a, 0x52fd, 0xaa07, 0xaa08, 0xaa01, 0xaa09, 0xaa02, 0xaa0a, + 0xaa0b, 0xaa0c, 0xaba7, 0xab98, 0xab99, 0xab9a, 0xab9b, 0xab9c, + 0x3950, 0xab9d, 0xad1a, 0xadb2, 0xafb0, 0xafb1, 0x3b14, 0xafb2, + 0xafb3, 0xafb4, 0xafb5, 0xafb6, 0xafc0, 0xafb7, 0xafb8, 0xafb9, + 0xafba, 0xb01d, 0xb20c, 0xb20d, 0xb20e, 0xb235, 0xb20f, 0xb210, + 0xb211, 0xb212, 0xb422, 0xb423, 0xb424, 0x52fd, 0xb425, 0xb426, + 0xb427, 0xb428, 0xb429, 0xb42a, 0xb42b, 0xb42c, + /* 0x5c */ + 0xb42d, 0xb42e, 0xb552, 0xb553, 0xb619, 0xb6bf, 0xb78b, 0xb78c, + 0xb823, 0xb824, 0xb8f1, 0xb8d8, 0xfb7f, 0xbb4e, 0xbb4f, 0xbb55, + 0xbb50, 0xbb51, 0xbb52, 0xbb53, 0xbb02, 0xbb54, 0xbbf1, 0xbc24, + 0xbdd1, 0xc27c, 0xc27d, 0xc27e, 0xc27f, 0xc280, 0xc29f, 0xc281, + 0xc282, 0xc283, 0xc284, 0xc285, 0xc286, 0xc287, 0xc288, 0xc29b, + 0xc289, 0xc28a, 0xc28b, 0xc28c, 0x52fd, 0xc2a1, 0xc28d, 0xc28e, + 0xc4f3, 0xc4f4, 0xc4f5, 0xc724, 0xc725, 0xc726, 0xc727, 0xc728, + 0xc729, 0xc72a, 0x52fd, 0xc72b, 0xc8cd, 0xc901, 0x788d, 0xca70, + 0xcb80, 0xcb81, 0xcdc0, 0xcdc1, 0xcdc2, 0xcdc3, 0xcdc4, 0xcdc5, + 0xcdc6, 0xcdc7, 0xcdc8, 0xcffe, 0x52fd, 0xd0d9, 0xd0dc, 0xd0da, + 0xd175, 0xd258, 0xd259, 0xd25a, 0xd25b, 0xd25c, 0xd3ec, 0x131a, + 0xd3f3, 0xd572, 0xd573, 0xd682, 0xd683, 0xd72a, + /* 0x5d */ + 0xd72b, 0xd72c, 0xd72d, 0xd8f6, 0xd900, 0xd8f7, 0xd8f8, 0xd8f9, + 0x52fd, 0xdb94, 0xdb95, 0xdb96, 0xdc1b, 0xdd86, 0xdd4c, 0xdd4d, + 0xdd83, 0x52fd, 0xdd82, 0xdd4e, 0xdd4f, 0xdd50, 0xdd51, 0xdd81, + 0x4887, 0xdd52, 0xdd53, 0xdd54, 0xdd55, 0x52fd, 0xdd56, 0xdd57, + 0x4885, 0xdd58, 0xdd5b, 0xdd5c, 0xdd5d, 0xdd5e, 0xdd5f, 0xdd60, + 0xdd61, 0xdd7c, 0xdd62, 0x143c, 0x52fd, 0xdd63, 0xdd64, 0xe073, + 0xe245, 0xe246, 0xe247, 0xe24c, 0xe312, 0x52fd, 0xe313, 0xe439, + 0xe403, 0xe40d, 0xe530, 0xe5d5, 0xe6c0, 0xe7f2, 0xe7f3, 0xe7f4, + 0xe7f5, 0xe7f6, 0xe7f7, 0xe8fa, 0xe8fb, 0xea45, 0xea46, 0xeb49, + 0xebe7, 0xebe8, 0xedd8, 0xedd9, 0xee55, 0xee56, 0xee57, 0xefda, + 0xefdb, 0xefdc, 0xf0b8, 0xf0b9, 0xf0ba, 0x4cb1, 0xf0bb, 0xf289, + 0xf0bc, 0xf330, 0xf331, 0xf332, 0xf333, 0x52fd, + /* 0x5e */ + 0xf334, 0xf335, 0xf336, 0x4e47, 0xf337, 0xf5b2, 0xf690, 0xf626, + 0xf6a2, 0xf738, 0x52fd, 0x572e, 0x52fd, 0x572f, 0x5730, 0x572a, + 0x572b, 0x57c9, 0x5837, 0x5920, 0x5972, 0x5b1f, 0x5c65, 0x5cca, + 0x5dc0, 0x5dc1, 0x5dc2, 0x63b7, 0x63b8, 0x63b9, 0x63ba, 0x63bb, + 0x52fd, 0x52fd, 0x63bc, 0x63bd, 0x63be, 0x63f2, 0x67b5, 0x67b7, + 0x67b8, 0x63df, 0x67b9, 0x67d5, 0x67ba, 0x67bb, 0x684a, 0x6bf2, + 0x6bf3, 0x6bf4, 0x6bfa, 0x6bf5, 0x6c02, 0x6de2, 0x6de3, 0x728e, + 0x728b, 0x75e4, 0x75eb, 0x75e5, 0x7735, 0x7893, 0x7bea, 0x7beb, + 0x52fd, 0x7bec, 0x7bed, 0x7c17, 0x7bee, 0x7bef, 0x7bf0, 0x810e, + 0x810f, 0x8110, 0x8119, 0x8118, 0x8111, 0x8112, 0x8113, 0xfac7, + 0x8114, 0x8115, 0x066b, 0x8116, 0x8365, 0x85ea, 0x85eb, 0x85ec, + 0x85ed, 0x52fd, 0x85ee, 0x86ac, 0x8ac2, 0x8a69, + /* 0x5f */ + 0x8a81, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f, 0x8a70, + 0x07f4, 0x8a71, 0x8a72, 0x8a73, 0x8a8c, 0x8a74, 0x8a75, 0x8a76, + 0x8f24, 0x8f2a, 0x938e, 0x93af, 0x938f, 0x9390, 0x9391, 0x52fd, + 0x9392, 0x9393, 0x9394, 0x9395, 0x9396, 0x9397, 0x9398, 0x9399, + 0x939a, 0x939b, 0x939c, 0x9739, 0x973b, 0x973a, 0x973c, 0x973d, + 0x973e, 0x973f, 0x9770, 0x9740, 0x9741, 0x9bc0, 0x9bc1, 0x9da4, + 0x9d97, 0x9da5, 0x9d98, 0x9d99, 0x9d9a, 0x52fd, 0x9d9b, 0x9da6, + 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0xddce, 0x9dc8, 0x9da0, 0x9e19, + 0x9f0d, 0xa3bf, 0xa5e9, 0xa5ea, 0xa8a2, 0xa8a3, 0xa8a4, 0xa8a5, + 0xa8a6, 0xaa15, 0xaa17, 0xabbf, 0xabc0, 0xabc1, 0xabc2, 0xabc3, + 0xabc4, 0xabc5, 0x6c0d, 0xad23, 0xadbe, 0xb003, 0xb004, 0xb005, + 0xb006, 0xb007, 0xb008, 0xb009, 0xb00a, 0xb00b, + /* 0x60 */ + 0xb00c, 0xb020, 0xb00d, 0xb00e, 0xb00f, 0x52fd, 0xb226, 0xb227, + 0xb228, 0xb45d, 0xb45e, 0xb45f, 0xb460, 0xb461, 0xb462, 0xb463, + 0xb464, 0xb465, 0xb557, 0xb6cf, 0xb6d0, 0xb799, 0xb79a, 0xb8ea, + 0xb8eb, 0xb8ec, 0xbb7e, 0xbb7f, 0xbb80, 0x52fd, 0x52fd, 0xbb81, + 0xbb82, 0xbbf3, 0xbc25, 0xbc9f, 0xbca0, 0xbcf3, 0xbd00, 0xc2eb, + 0xc2ec, 0xc2ed, 0xc2ee, 0xc2ef, 0x52fd, 0x105c, 0xc2f0, 0xc2f1, + 0xc2f2, 0xc2f3, 0xc2f4, 0xc2f5, 0xc2f9, 0xc2fa, 0xc2fb, 0xc2fc, + 0xc2fd, 0xc2fe, 0xc2ff, 0xc300, 0xfbae, 0xc301, 0xc302, 0xc503, + 0xc786, 0xc779, 0x52fd, 0xc77a, 0xc77b, 0xc77c, 0xc784, 0xc77d, + 0xc77e, 0xc77f, 0xca86, 0xca87, 0xcb00, 0xcb01, 0xcb88, 0xcb89, + 0xcb8a, 0xcdf5, 0x52fd, 0xce25, 0xcdf6, 0xd0eb, 0xd0ec, 0xd0ed, + 0xd0ee, 0x1287, 0xd0ef, 0xd0f0, 0xd26c, 0xd421, + /* 0x61 */ + 0xd422, 0xd423, 0xd424, 0xd425, 0xd426, 0xd57b, 0xd57c, 0xd691, + 0xd692, 0xd693, 0xd90e, 0xd90f, 0xd910, 0xdbb3, 0xdc36, 0xddc6, + 0xdda1, 0xdda2, 0x48b9, 0xdda3, 0xddcc, 0xdda4, 0xdda5, 0xdda6, + 0xddcb, 0xdda7, 0x52fd, 0xdda8, 0xdda9, 0xddaa, 0x52fd, 0xddab, + 0xddac, 0xddad, 0x48bf, 0xddae, 0xddaf, 0xddb0, 0xe08c, 0xe08d, + 0xe08e, 0xfbf1, 0xe092, 0xe08f, 0xe252, 0xe253, 0xe254, 0xe255, + 0xe429, 0x52fd, 0xe5f3, 0xe5f4, 0xe80d, 0xe80e, 0xe80f, 0xe810, + 0xe914, 0xea71, 0xea72, 0xec0f, 0xec04, 0xec06, 0x52fd, 0xec07, + 0xeddc, 0xeddd, 0xee6d, 0xee79, 0xee6e, 0x52fd, 0xefec, 0xf0dd, + 0xf0de, 0xf0df, 0xf0e0, 0xf0e1, 0xf0e2, 0xf0e3, 0xf0e4, 0xf13a, + 0xf0e5, 0x4ccf, 0xf0e6, 0xf36b, 0xf36c, 0x974e, 0x4e64, 0xf5bd, + 0xf5be, 0xf5bf, 0xf634, 0x4fbf, 0xf812, 0x5740, + /* 0x62 */ + 0x5741, 0x6402, 0x6403, 0x6404, 0x6405, 0x6406, 0x67d7, 0x67cc, + 0x6998, 0x6c06, 0x6c07, 0x6caf, 0x6cb0, 0x6dea, 0x6df2, 0x72a2, + 0x72a3, 0x72a4, 0x7476, 0x75f5, 0x75f6, 0x75f7, 0x52fd, 0x7c3b, + 0x7c25, 0x7c3a, 0x7c3c, 0x7c3d, 0x7c3e, 0x8137, 0x8138, 0x8139, + 0x813a, 0x813b, 0x813c, 0x813d, 0x813e, 0x813f, 0x814b, 0x52fd, + 0x8140, 0x8322, 0x8367, 0x83d3, 0x85fa, 0x52fd, 0x8abc, 0x52fd, + 0x52fd, 0x8aa5, 0x0807, 0x8ab6, 0x52fd, 0x8aa6, 0x8abb, 0x8aa7, + 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab, 0x8aac, 0x8abf, 0x8aad, 0x8aae, + 0x8aaf, 0x8c2e, 0x8e00, 0x939d, 0x939e, 0x93cb, 0x93cc, 0x93cd, + 0x93ce, 0x93cf, 0x52fd, 0x939f, 0x93d0, 0x93d1, 0x93d2, 0x93d3, + 0x93d4, 0x52fd, 0x52fd, 0x975d, 0x975e, 0x975f, 0x9760, 0x0b05, + 0x9dba, 0x9dbc, 0x0b06, 0x9db5, 0x9dbd, 0x9db6, + /* 0x63 */ + 0x9db7, 0x9db8, 0x9da8, 0xfb32, 0x9efe, 0x9efc, 0xa1e1, 0xa3c4, + 0xa3c5, 0xa614, 0xa8ae, 0xa8af, 0xa8b0, 0xa8b1, 0xa8b9, 0xabe7, + 0xb046, 0x52fd, 0xb047, 0xb048, 0xb049, 0xb01e, 0xb01f, 0xb04a, + 0xb04b, 0xb04c, 0xb04d, 0xb04e, 0x52fd, 0xb246, 0xb24b, 0xb490, + 0xb491, 0x52fd, 0xb492, 0xb493, 0xb494, 0xb55b, 0xb8f2, 0xb8f8, + 0xb8f9, 0xbb94, 0xbba4, 0xbb97, 0xbb98, 0xbc29, 0xbcae, 0xbdaf, + 0xc359, 0xc35a, 0x52fd, 0xc35b, 0xc35c, 0xc35d, 0xc35e, 0xc35f, + 0xc360, 0xc361, 0xc2aa, 0xc362, 0xc363, 0xc364, 0xc365, 0xc366, + 0xc367, 0xc368, 0xc369, 0xc36a, 0xc36b, 0xc36c, 0xc36d, 0xc36e, + 0xc36f, 0x52fd, 0xc7b2, 0xc7b3, 0xc7b4, 0x10f9, 0xc7b5, 0xc7b6, + 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba, 0xc7bb, 0xca88, 0x42b8, 0xce19, + 0xce1a, 0xce1b, 0xcf16, 0xd10c, 0xd10d, 0xd10e, + /* 0x64 */ + 0xd10f, 0x52fd, 0xd283, 0xd284, 0xd285, 0xd583, 0xd584, 0xd6b0, + 0x52fd, 0xd926, 0xd927, 0xd936, 0xd928, 0xd929, 0x52fd, 0x52fd, + 0xdde7, 0xdde8, 0xdde9, 0x1453, 0xddea, 0xddeb, 0x52fd, 0xddec, + 0xdded, 0xddee, 0xddef, 0xddf0, 0xddf1, 0xde0c, 0xddf2, 0xddf3, + 0xddf4, 0xddf5, 0xddf6, 0xddf7, 0xddf8, 0xe0a3, 0xe0a4, 0xe0a5, + 0xe0a6, 0xe0a7, 0x52fd, 0xe25c, 0x52fd, 0xe44b, 0xe4e1, 0xe615, + 0x52fd, 0xe616, 0xe617, 0xe82c, 0xe82d, 0xe922, 0xe923, 0xea96, + 0xea97, 0x52fd, 0xec2e, 0xec30, 0xec31, 0x52fd, 0xeddf, 0xee8b, + 0xee8c, 0x52fd, 0xee8d, 0xeffc, 0xeffd, 0xeffe, 0xefff, 0xf117, + 0xf12d, 0xf118, 0x4cf3, 0xf119, 0x52fd, 0xf112, 0xf11a, 0xf11b, + 0xf11c, 0x1669, 0x52fd, 0xf397, 0x16e5, 0xf398, 0xf399, 0x52fd, + 0xf6c4, 0x574f, 0x57cd, 0x5dc7, 0x641c, 0x641d, + /* 0x65 */ + 0x641e, 0x67e7, 0x67e9, 0x67ea, 0x67eb, 0x6c15, 0x6ff1, 0x6ff2, + 0x72b6, 0x78a0, 0x7c4a, 0x7d20, 0x8160, 0x8161, 0x8141, 0x8162, + 0x8603, 0x8604, 0x8ad9, 0x8ada, 0x8adb, 0x8adc, 0x8add, 0x52fd, + 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x0812, 0x8ae3, 0x52fd, + 0x8f31, 0x9405, 0x9406, 0x9407, 0x9772, 0x978a, 0x978b, 0x9788, + 0x52fd, 0x978c, 0x978d, 0x978e, 0x978f, 0x9790, 0x9842, 0x9843, + 0x52fd, 0x9dc1, 0x9dc2, 0x9dc3, 0x9dc4, 0xa3cb, 0xa622, 0x52fd, + 0x52fd, 0xa8c3, 0xa8c4, 0xa8c5, 0xa8c6, 0xaa1e, 0xaa25, 0xabf3, + 0xabf4, 0x52fd, 0xabf5, 0xad38, 0xad48, 0xadca, 0x3b4f, 0xb07a, + 0xb07b, 0xb255, 0xb256, 0xb4b1, 0xb4b2, 0xb4b3, 0x52fd, 0xb4b4, + 0xb4b5, 0xb7a4, 0xb900, 0xb901, 0xb902, 0xbbac, 0x52fd, 0xbcb3, + 0xc3b6, 0xc3b7, 0xc3b8, 0xc3b9, 0xc3ba, 0xc3bb, + /* 0x66 */ + 0xc3bc, 0xc3bd, 0xc3be, 0xc3bf, 0xc3c0, 0xc3c1, 0xc3c2, 0xc3c3, + 0xc3c4, 0xc3c5, 0xc3c6, 0xc3c7, 0xc7e3, 0xc7e4, 0xc7e5, 0xc7e6, + 0xc7e7, 0x52fd, 0xcab5, 0xcaa1, 0xcb95, 0xce3b, 0xce3c, 0xce3d, + 0xce3e, 0xcf14, 0xd120, 0xd121, 0xd122, 0xd123, 0xd124, 0xd296, + 0xd297, 0xd298, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, 0xd58f, + 0xd590, 0xd6bc, 0xd73b, 0xd93d, 0x52fd, 0xdbdf, 0xdc1e, 0xde23, + 0xde24, 0xde49, 0xde25, 0xde26, 0xde27, 0xde28, 0x4925, 0xde29, + 0xde2a, 0xde2e, 0xde2f, 0xde4e, 0xde30, 0xfbeb, 0xde31, 0xde32, + 0xde33, 0xde34, 0xde35, 0xde36, 0x52fd, 0xde37, 0xde50, 0xde38, + 0x52fd, 0xde39, 0xde3a, 0xde3b, 0xde3c, 0xde3d, 0xde3e, 0xe0b8, + 0xe0b9, 0xe262, 0xe263, 0xe341, 0xe46d, 0x52fd, 0xe652, 0xe637, + 0xe6db, 0xe83f, 0xe934, 0xeb5b, 0xec46, 0xec5a, + /* 0x67 */ + 0xec5b, 0xede1, 0xede2, 0xede3, 0xede4, 0xeea7, 0xeea8, 0xeea9, + 0xf00f, 0xf02b, 0xf156, 0xf157, 0xf158, 0xf15e, 0xf159, 0xf15a, + 0xf15b, 0xf15c, 0x52fd, 0xf168, 0x52fd, 0xf42c, 0xf3e2, 0xf3f3, + 0xf5d2, 0xf656, 0xf6ce, 0xf761, 0xf99b, 0xf9b4, 0x575c, 0xfa10, + 0x57d2, 0x5871, 0x5973, 0x5b2c, 0x5e94, 0x52fd, 0x643f, 0x6440, + 0x67f9, 0x67fa, 0x67fd, 0x67fb, 0x6c1c, 0x6c1d, 0x6dff, 0x6e00, + 0x6ff7, 0x9ffe, 0x52fd, 0x77b6, 0x7c54, 0x8177, 0x8179, 0x817a, + 0x817b, 0x8369, 0x8b02, 0x8b03, 0x8b04, 0x8b05, 0x8b06, 0x8b07, + 0x8b08, 0x8b09, 0x8b0a, 0x8b0b, 0x8b35, 0x52fd, 0x8f39, 0x941e, + 0x941f, 0x9420, 0x9421, 0x52fd, 0x9422, 0x9423, 0x9424, 0x942c, + 0x97b3, 0x97b5, 0x97b6, 0x97b7, 0x97b8, 0x9dd0, 0x9ffa, 0xa207, + 0xa2bd, 0xa3d7, 0xa3d2, 0xa8db, 0xa8d6, 0x575d, + /* 0x68 */ + 0xad43, 0xadcf, 0xb0a3, 0xb0a4, 0xb0a5, 0xb0a6, 0xb0a7, 0xb0a8, + 0xb0a9, 0xb25d, 0xb25e, 0xb4c9, 0xb4ca, 0xb4cb, 0xb4cc, 0xb906, + 0xb907, 0x52fd, 0xbbc5, 0xbbf5, 0xbcb4, 0xbcb8, 0xbcb5, 0xc3fd, + 0x1077, 0xc3fe, 0xc3ff, 0xc400, 0xc401, 0xc402, 0xc403, 0xc409, + 0xc404, 0xc405, 0xc406, 0xc407, 0xc811, 0xc812, 0xc813, 0xc814, + 0xc815, 0x4277, 0xcb98, 0xcb99, 0xd13c, 0xd12d, 0xd12e, 0x52fd, + 0xd4bb, 0xd4bc, 0x1378, 0xd73d, 0xd947, 0xd948, 0xd949, 0xd94a, + 0xdae1, 0xdae7, 0xdbeb, 0xdc20, 0xdc38, 0xde62, 0xde67, 0xde68, + 0xde69, 0xde6a, 0xde6b, 0xde6d, 0xde6e, 0xde6f, 0xde70, 0xde71, + 0xde72, 0xde8f, 0xde73, 0xde74, 0xde75, 0xde76, 0xde77, 0xe0c9, + 0xe0ca, 0x4ae6, 0xe0cb, 0xe0cc, 0xe0cd, 0xe351, 0x52fd, 0x52fd, + 0xe545, 0xe859, 0xe85a, 0xe85b, 0xe940, 0xeacf, + /* 0x69 */ + 0xeb5e, 0xec7b, 0xed93, 0xeebc, 0xf016, 0xf030, 0x52fd, 0xf18d, + 0xf18e, 0x4d2f, 0xf18f, 0xf190, 0xf191, 0xf192, 0xf193, 0xf194, + 0xf195, 0xf196, 0xf423, 0xf414, 0xf5db, 0xf70a, 0xf8ce, 0x5766, + 0x5768, 0x5767, 0x57d3, 0x6463, 0x6804, 0x699e, 0x6c26, 0x6c2a, + 0x7c6c, 0x7c64, 0x818f, 0x8190, 0x8334, 0x860e, 0x8b25, 0x8b26, + 0x8b27, 0x52fd, 0x8b28, 0x2c0c, 0x52fd, 0x8b29, 0x8b2a, 0x8b2b, + 0x8b2c, 0x8f3e, 0x9442, 0x9443, 0x9433, 0x97c1, 0x97c2, 0x97c3, + 0x9dd6, 0x9dd7, 0xa8e1, 0xa8e2, 0xaa2b, 0xadd1, 0xb0cc, 0xb0cd, + 0xb0ce, 0xb0cf, 0xb4de, 0xb4df, 0xb4e0, 0xb4e1, 0xbbf6, 0xc42c, + 0x52fd, 0xc454, 0xc42d, 0xc42e, 0xc841, 0xc842, 0xcac7, 0xcba0, + 0xcba1, 0xce70, 0xce71, 0xce72, 0x52fd, 0xd134, 0xd135, 0xd136, + 0xd2a6, 0xd4cc, 0x52fd, 0xd599, 0xdbf4, 0xde9b, + /* 0x6a */ + 0xde9e, 0xde9f, 0xdea0, 0xdea1, 0xdea2, 0xdea3, 0xdea4, 0xdea5, + 0xdea6, 0xdea7, 0xdea8, 0xe0db, 0xe0dc, 0xe0dd, 0xe0d7, 0xe0de, + 0xe0df, 0xe359, 0xe746, 0xe865, 0xe949, 0x52fd, 0xeadd, 0xec95, + 0xec96, 0xec97, 0xeed4, 0xeed6, 0xf026, 0x4d47, 0x1688, 0xf1c8, + 0xf1c5, 0xf1c6, 0xf1c7, 0xf451, 0xf452, 0xf453, 0xf454, 0xf455, + 0xf5de, 0x52fd, 0x576d, 0x57d5, 0x6472, 0x74ae, 0x760f, 0x7c6b, + 0x7c6d, 0x7c6e, 0x7c78, 0x8198, 0x8199, 0x819a, 0x8b44, 0x8b5c, + 0x8b45, 0x8e01, 0x9458, 0x9459, 0x945a, 0x52fd, 0x97d9, 0x97d6, + 0x9dda, 0x9ddf, 0x9ddb, 0xa003, 0xa8ef, 0x3836, 0xaa33, 0xadd2, + 0xb0e1, 0xb26f, 0xb564, 0xb90e, 0xc450, 0xc451, 0xc452, 0xc856, + 0xc857, 0xc858, 0x52fd, 0xce81, 0xce82, 0xcf1d, 0xcf1e, 0xd143, + 0xd2aa, 0xdbfd, 0x52fd, 0xdec6, 0xdec7, 0xded9, + /* 0x6b */ + 0xded7, 0x52fd, 0xdec8, 0xdec9, 0xdeca, 0xdecb, 0xdeda, 0x52fd, + 0xdecc, 0xdecd, 0xdece, 0xdecf, 0xded0, 0xded1, 0xdebc, 0xe0e1, + 0xe0e2, 0xe0e3, 0xe4a9, 0xe54e, 0xe877, 0x52fd, 0x52fd, 0xecac, + 0xecad, 0xedb6, 0xeee5, 0xf1f8, 0xf1ea, 0xf28d, 0xf1eb, 0xf495, + 0x576e, 0x57d8, 0x6483, 0x69a3, 0x6c30, 0x6e0f, 0x7c79, 0x7c7a, + 0x81a7, 0x81a8, 0x81a9, 0x81aa, 0x8619, 0x8b50, 0x8b51, 0x8b52, + 0x2c15, 0x8b68, 0x8b53, 0x8b54, 0x9be2, 0x9ddc, 0xac15, 0xac16, + 0xad4f, 0xb0f5, 0xb0f6, 0xb0f7, 0xb4f4, 0xb7cc, 0xb90f, 0xc466, + 0xc467, 0x52fd, 0xc468, 0xcba4, 0xce8b, 0xce8c, 0xd4fa, 0xdee6, + 0xdeed, 0xdeee, 0xdeef, 0xdef0, 0xdefe, 0xe0e7, 0xe0e8, 0xe4b3, + 0xe4e4, 0xe883, 0xedec, 0x52fd, 0xf216, 0x52fd, 0x52fd, 0xf217, + 0xf4c3, 0xf4ac, 0xf5ed, 0x52fd, 0x52fd, 0xf8b4, + /* 0x6c */ + 0x52fd, 0x648a, 0x648b, 0x6c34, 0x6e14, 0x72df, 0x77bb, 0x7c7f, + 0x7c81, 0x81ad, 0x81ae, 0x8b62, 0x8b6e, 0x52fd, 0x946e, 0x52fd, + 0x9a17, 0x9de6, 0x9f10, 0xac19, 0x52fd, 0xb910, 0xbdf2, 0xc476, + 0xc477, 0xce95, 0xce96, 0xdf00, 0xdf01, 0xdf31, 0xfbed, 0xdf1c, + 0xe36d, 0xeef4, 0xeef5, 0xf03d, 0xf232, 0xf233, 0xf5f4, 0x52fd, + 0x5773, 0x6c37, 0x52fd, 0x8b71, 0xb10f, 0x52fd, 0xb10e, 0xb911, + 0xc485, 0xdf14, 0xdf15, 0xdf16, 0xdf17, 0xdf18, 0xdf19, 0xdf1a, + 0xe4c3, 0xf242, 0xf243, 0xf244, 0xf248, 0xf4fb, 0x69a5, 0x6cb8, + 0x81b2, 0x833d, 0x8b72, 0x97e7, 0x97e8, 0xa659, 0xaa3a, 0xb114, + 0xb4ff, 0xbcc0, 0xc48d, 0x1084, 0xc48e, 0x52fd, 0xdf22, 0x52fd, + 0x52fd, 0xef04, 0xef29, 0xf251, 0xf266, 0xf50e, 0xfc13, 0x52fd, + 0x649b, 0x649c, 0x7616, 0x7c86, 0x7c87, 0x52fd, + /* 0x6d */ + 0xdf2c, 0xdf30, 0xdf28, 0xe95f, 0x52fd, 0x947e, 0xb119, 0xd50a, + 0xdf36, 0xe0fc, 0xf26d, 0xf26e, 0xf9c6, 0x1ab5, 0x8b7b, 0xb506, + 0xc89f, 0xf532, 0xd50d, 0x7c8b, 0xdf3b, 0x52fd, 0xf53d, 0xdf3c, + 0xdf3d, +}; + +static const ucs4_t cns11643_15_2uni_upages[253] = { + 0x03400, 0x03500, 0x03600, 0x03700, 0x03800, 0x03900, 0x03a00, 0x03b00, + 0x03c00, 0x03d00, 0x03e00, 0x03f00, 0x04000, 0x04100, 0x04300, 0x04400, + 0x04500, 0x04600, 0x04700, 0x04800, 0x04900, 0x04a00, 0x04c00, 0x04f00, + 0x05100, 0x05200, 0x05300, 0x05400, 0x05500, 0x05600, 0x05700, 0x05800, + 0x05a00, 0x05b00, 0x05c00, 0x05e00, 0x05f00, 0x06200, 0x06500, 0x06600, + 0x06700, 0x06800, 0x06900, 0x06a00, 0x06b00, 0x06c00, 0x06e00, 0x06f00, + 0x07000, 0x07100, 0x07300, 0x07400, 0x07500, 0x07600, 0x07700, 0x07800, + 0x07900, 0x07a00, 0x07b00, 0x07c00, 0x07d00, 0x07f00, 0x08200, 0x08300, + 0x08600, 0x08700, 0x08900, 0x08a00, 0x08e00, 0x08f00, 0x09000, 0x09200, + 0x09300, 0x09400, 0x09500, 0x09600, 0x09b00, 0x09c00, 0x09d00, 0x09e00, + 0x09f00, 0x0fa00, 0x0ff00, 0x20000, 0x20100, 0x20200, 0x20300, 0x20400, + 0x20500, 0x20600, 0x20700, 0x20800, 0x20900, 0x20a00, 0x20b00, 0x20c00, + 0x20d00, 0x20e00, 0x20f00, 0x21000, 0x21100, 0x21200, 0x21300, 0x21400, + 0x21500, 0x21600, 0x21700, 0x21800, 0x21900, 0x21a00, 0x21b00, 0x21c00, + 0x21d00, 0x21e00, 0x21f00, 0x22000, 0x22100, 0x22200, 0x22300, 0x22400, + 0x22500, 0x22600, 0x22700, 0x22800, 0x22900, 0x22a00, 0x22b00, 0x22c00, + 0x22d00, 0x22e00, 0x22f00, 0x23000, 0x23100, 0x23200, 0x23300, 0x23400, + 0x23500, 0x23600, 0x23700, 0x23800, 0x23900, 0x23a00, 0x23b00, 0x23c00, + 0x23d00, 0x23e00, 0x23f00, 0x24000, 0x24100, 0x24200, 0x24300, 0x24400, + 0x24500, 0x24600, 0x24700, 0x24800, 0x24900, 0x24a00, 0x24b00, 0x24c00, + 0x24d00, 0x24e00, 0x24f00, 0x25000, 0x25100, 0x25200, 0x25300, 0x25400, + 0x25500, 0x25600, 0x25700, 0x25800, 0x25900, 0x25a00, 0x25b00, 0x25c00, + 0x25d00, 0x25e00, 0x25f00, 0x26000, 0x26100, 0x26200, 0x26300, 0x26400, + 0x26500, 0x26600, 0x26700, 0x26800, 0x26900, 0x26a00, 0x26b00, 0x26c00, + 0x26d00, 0x26e00, 0x26f00, 0x27000, 0x27100, 0x27200, 0x27300, 0x27400, + 0x27500, 0x27600, 0x27700, 0x27800, 0x27900, 0x27a00, 0x27b00, 0x27c00, + 0x27d00, 0x27e00, 0x27f00, 0x28000, 0x28100, 0x28200, 0x28300, 0x28400, + 0x28500, 0x28600, 0x28700, 0x28800, 0x28900, 0x28a00, 0x28b00, 0x28c00, + 0x28d00, 0x28e00, 0x28f00, 0x29000, 0x29100, 0x29200, 0x29300, 0x29400, + 0x29500, 0x29600, 0x29700, 0x29800, 0x29900, 0x29a00, 0x29b00, 0x29c00, + 0x29d00, 0x29e00, 0x29f00, 0x2a000, 0x2a100, 0x2a200, 0x2a300, 0x2a400, + 0x2a500, 0x2a600, 0x2f800, 0x2f900, 0x2fa00, +}; + +static int +cns11643_15_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x6d)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + ucs4_t wc = 0xfffd; + unsigned short swc; + { + if (i < 7169) + swc = cns11643_15_2uni_page21[i], + wc = cns11643_15_2uni_upages[swc>>8] | (swc & 0xff); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + diff --git a/jni/parted/libiconv/lib/cns11643_2.h b/jni/parted/libiconv/lib/cns11643_2.h new file mode 100755 index 0000000..535051a --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_2.h @@ -0,0 +1,1111 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 2 + */ + +static const unsigned short cns11643_2_2uni_page21[7650] = { + /* 0x21 */ + 0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47, + 0x4e8d, 0x56d7, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e, 0x4e2e, + 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c, 0x53b9, + 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3, 0x6bcc, + 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9, 0x4ee1, + 0x4edd, 0x4eda, 0x520c, 0x5209, 0x531c, 0x534c, 0x5722, 0x5723, + 0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73, + 0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x6c36, + 0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a, 0x79b8, 0x808a, + 0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14, 0x4ef1, 0x4f00, + 0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22, 0x4f13, 0x4f04, + 0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5210, 0x52a6, + /* 0x22 */ + 0x5322, 0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df, 0x572e, + 0x572a, 0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b, 0x597e, + 0x5977, 0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a, 0x5c7b, + 0x5c7e, 0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74, 0x5fd5, + 0x5fd4, 0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266, 0x6262, + 0x6259, 0x6260, 0x625a, 0x6265, 0x6537, 0x65ef, 0x65ee, 0x673e, + 0x6739, 0x6738, 0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18, + 0x6c46, 0x6c52, 0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b, 0x6c4c, + 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f, 0x7a75, + 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d, 0x897e, + 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624, 0x9620, + 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, + /* 0x23 */ + 0x4f64, 0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, + 0x4f33, 0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, + 0x52ad, 0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, + 0x5437, 0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, + 0x543d, 0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee, 0x56e7, + 0x56e5, 0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752, 0x5906, + 0x5940, 0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2, 0x5990, + 0x598f, 0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a, 0x5c8d, + 0x5c8f, 0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86, 0x5c93, + 0x5c95, 0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c, 0x5e88, + 0x5e8d, 0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1, 0x5fd0, + 0x5fed, 0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, + /* 0x24 */ + 0x5fe3, 0x5ffa, 0x5fef, 0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, + 0x6283, 0x628c, 0x628e, 0x628f, 0x6294, 0x6287, 0x6271, 0x627b, + 0x627a, 0x6270, 0x6281, 0x6288, 0x6277, 0x627d, 0x6272, 0x6274, + 0x65f0, 0x65f4, 0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747, 0x6759, + 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b, 0x6bd0, + 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b, 0x6c8f, + 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95, 0x6c9c, + 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a, 0x7263, + 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5, 0x7395, + 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594, 0x7595, + 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, 0x809c, + 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, + /* 0x25 */ + 0x828a, 0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f, 0x90a1, + 0x90a5, 0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f, 0x962d, + 0x4e33, 0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87, 0x4f76, + 0x4f74, 0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a, 0x4f9a, + 0x4f79, 0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e, 0x4f92, + 0x4f82, 0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be, 0x5235, + 0x5232, 0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b, 0x533c, + 0x5392, 0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482, 0x5488, + 0x546b, 0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466, 0x548d, + 0x546f, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, 0x56f7, + 0x56f9, 0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770, 0x5776, + 0x5780, 0x5775, 0x577b, 0x5773, 0x5774, 0x5762, + /* 0x26 */ + 0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce, + 0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1, + 0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93, + 0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf, + 0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7, + 0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19, + 0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d, + 0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 0x6034, + 0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c, 0x6022, 0x600d, + 0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009, 0x601c, 0x6214, + 0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa, 0x62b6, 0x62ca, + 0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0, + /* 0x27 */ + 0x62b8, 0x653d, 0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612, + 0x6608, 0x65fb, 0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611, + 0x6610, 0x66f6, 0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776, + 0x677b, 0x6798, 0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a, + 0x679f, 0x6791, 0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779, + 0x6794, 0x6b25, 0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec, + 0x6ceb, 0x6cee, 0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7, + 0x6cd0, 0x6cc2, 0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2, 0x6cd2, + 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0, 0x6d30, + 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1, 0x7094, + 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, 0x7082, + 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, + /* 0x28 */ + 0x72c9, 0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, + 0x73a1, 0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, + 0x74e8, 0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, + 0x76f1, 0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, + 0x77f7, 0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb, 0x7c75, + 0x7cfd, 0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5, 0x80ad, + 0x8220, 0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b, 0x82b5, + 0x82a7, 0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8, 0x82a1, + 0x82a9, 0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670, 0x866f, + 0x866d, 0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd, 0x8fd6, + 0x8fd5, 0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0, 0x9639, + 0x963d, 0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, + /* 0x29 */ + 0x4fd3, 0x4fb2, 0x4fc9, 0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, + 0x4fbb, 0x4fb3, 0x4fdb, 0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, + 0x4fec, 0x5244, 0x5249, 0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, + 0x5396, 0x5399, 0x5398, 0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf, + 0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6, + 0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0, + 0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b, + 0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4, + 0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd, + 0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db, + 0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8, + 0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, + /* 0x2a */ + 0x5cdb, 0x5cde, 0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3, + 0x5cd4, 0x5ccf, 0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9, + 0x5e21, 0x5e22, 0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2, + 0x5e9b, 0x5ea3, 0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037, + 0x6039, 0x6054, 0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049, + 0x605b, 0x604c, 0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058, + 0x6066, 0x606e, 0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5, + 0x630e, 0x6303, 0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6, + 0x6300, 0x6313, 0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541, + 0x6543, 0x65aa, 0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c, + 0x6626, 0x6622, 0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639, + 0x662e, 0x670f, 0x6710, 0x67c1, 0x67f2, 0x67c8, + /* 0x2b */ + 0x67ba, 0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, + 0x67eb, 0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, + 0x67ee, 0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, + 0x67fc, 0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, + 0x67c9, 0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, + 0x6bb6, 0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, + 0x6d2d, 0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, + 0x6d04, 0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, + 0x6d01, 0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07, 0x6d20, + 0x6d2c, 0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f, 0x70be, + 0x70b1, 0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241, 0x7249, + 0x724a, 0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, + /* 0x2c */ + 0x72e4, 0x72e8, 0x72eb, 0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, + 0x73cc, 0x73c2, 0x73c8, 0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, + 0x73eb, 0x73bf, 0x73c7, 0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, + 0x74ec, 0x74ee, 0x752e, 0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, + 0x76c4, 0x7708, 0x7703, 0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, + 0x76fa, 0x77e7, 0x77e8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, + 0x780f, 0x780e, 0x7809, 0x7803, 0x7813, 0x794a, 0x794c, 0x794b, + 0x7945, 0x7944, 0x79d5, 0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80, + 0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f, + 0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d, + 0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7, + 0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, + /* 0x2d */ + 0x80e3, 0x80d9, 0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, + 0x80e6, 0x80cd, 0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, + 0x8307, 0x82e8, 0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, + 0x82ec, 0x82e1, 0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, + 0x82ea, 0x82e4, 0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674, + 0x867c, 0x8673, 0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3, + 0x8a04, 0x8a07, 0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1, + 0x90bd, 0x90bf, 0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8, + 0x91d4, 0x91d3, 0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e, + 0x501e, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5, + 0x4ff4, 0x5033, 0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c, + 0x5020, 0x5027, 0x5035, 0x502f, 0x5031, 0x500e, + /* 0x2e */ + 0x515a, 0x5194, 0x5193, 0x51ca, 0x51c4, 0x51c5, 0x51c8, 0x51ce, + 0x5261, 0x525a, 0x5252, 0x525e, 0x525f, 0x5255, 0x5262, 0x52cd, + 0x530e, 0x539e, 0x5526, 0x54e2, 0x5517, 0x5512, 0x54e7, 0x54f3, + 0x54e4, 0x551a, 0x54ff, 0x5504, 0x5508, 0x54eb, 0x5511, 0x5505, + 0x54f1, 0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, + 0x550b, 0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, + 0x57c6, 0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, + 0x57b9, 0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, + 0x5a15, 0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, + 0x5bad, 0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, + 0x5cf1, 0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, + 0x5eaa, 0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, + /* 0x2f */ + 0x605a, 0x6067, 0x6041, 0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, + 0x609d, 0x6083, 0x6095, 0x609b, 0x6097, 0x6087, 0x609c, 0x608e, + 0x6219, 0x6246, 0x62f2, 0x6310, 0x6356, 0x632c, 0x6344, 0x6345, + 0x6336, 0x6343, 0x63e4, 0x6339, 0x634b, 0x634a, 0x633c, 0x6329, + 0x6341, 0x6334, 0x6358, 0x6354, 0x6359, 0x632d, 0x6347, 0x6333, + 0x635a, 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654a, 0x6546, + 0x65c6, 0x65c3, 0x65c4, 0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, + 0x6712, 0x6713, 0x681f, 0x681a, 0x6849, 0x6832, 0x6833, 0x683b, + 0x684b, 0x684f, 0x6816, 0x6831, 0x681c, 0x6835, 0x682b, 0x682d, + 0x682f, 0x684e, 0x6844, 0x6834, 0x681d, 0x6812, 0x6814, 0x6826, + 0x6828, 0x682e, 0x684d, 0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, + 0x6b2d, 0x6b31, 0x6b34, 0x6b6d, 0x8082, 0x6b88, + /* 0x30 */ + 0x6be6, 0x6be4, 0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, + 0x6d63, 0x6d64, 0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, + 0x6d6d, 0x6d6f, 0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, + 0x6d67, 0x6d60, 0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, + 0x6d2f, 0x6d68, 0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, + 0x6d7b, 0x6d7d, 0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, + 0x70cb, 0x7f39, 0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, + 0x70cd, 0x70c5, 0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, + 0x7278, 0x7277, 0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6, + 0x72f3, 0x72fb, 0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc, + 0x73e7, 0x73e3, 0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd, + 0x73da, 0x73d7, 0x73d8, 0x73e8, 0x74de, 0x74df, + /* 0x31 */ + 0x74f4, 0x74f5, 0x7521, 0x755b, 0x755f, 0x75b0, 0x75c1, 0x75bb, + 0x75c4, 0x75c0, 0x75bf, 0x75b6, 0x75ba, 0x768a, 0x76c9, 0x771d, + 0x771b, 0x7710, 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, + 0x771a, 0x7722, 0x7727, 0x7823, 0x782c, 0x7822, 0x7835, 0x782f, + 0x7828, 0x782e, 0x782b, 0x7821, 0x7829, 0x7833, 0x782a, 0x7831, + 0x7954, 0x795b, 0x794f, 0x795c, 0x7953, 0x7952, 0x7951, 0x79eb, + 0x79ec, 0x79e0, 0x79ee, 0x79ed, 0x79ea, 0x79dc, 0x79de, 0x79dd, + 0x7a86, 0x7a89, 0x7a85, 0x7a8b, 0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, + 0x7b10, 0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, + 0x7b09, 0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, + 0x7c85, 0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, + 0x7d1f, 0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, + /* 0x32 */ + 0x7f5e, 0x7f60, 0x7f5d, 0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, + 0x7fc0, 0x8016, 0x803e, 0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, + 0x8101, 0x80fb, 0x8100, 0x8201, 0x822f, 0x8225, 0x8333, 0x832d, + 0x8344, 0x8319, 0x8351, 0x8325, 0x8356, 0x833f, 0x8341, 0x8326, + 0x831c, 0x8322, 0x8342, 0x834e, 0x831b, 0x832a, 0x8308, 0x833c, + 0x834d, 0x8316, 0x8324, 0x8320, 0x8337, 0x832f, 0x8329, 0x8347, + 0x8345, 0x834c, 0x8353, 0x831e, 0x832c, 0x834b, 0x8327, 0x8348, + 0x8653, 0x8652, 0x86a2, 0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, + 0x8687, 0x8697, 0x8686, 0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, + 0x86a1, 0x86a7, 0x8695, 0x8698, 0x868e, 0x869d, 0x8690, 0x8694, + 0x8843, 0x8844, 0x886d, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, + 0x887f, 0x886f, 0x8883, 0x887e, 0x8874, 0x887c, + /* 0x33 */ + 0x8a12, 0x8c47, 0x8c57, 0x8c7b, 0x8ca4, 0x8ca3, 0x8d76, 0x8d78, + 0x8db5, 0x8db7, 0x8db6, 0x8ed1, 0x8ed3, 0x8ffe, 0x8ff5, 0x9002, + 0x8fff, 0x8ffb, 0x9004, 0x8ffc, 0x8ff6, 0x90d6, 0x90e0, 0x90d9, + 0x90da, 0x90e3, 0x90df, 0x90e5, 0x90d8, 0x90db, 0x90d7, 0x90dc, + 0x90e4, 0x9150, 0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, + 0x965f, 0x96bc, 0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, + 0x5061, 0x505e, 0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, + 0x504d, 0x5041, 0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, + 0x5069, 0x506b, 0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, + 0x5057, 0x5051, 0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, + 0x52d3, 0x532d, 0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, + 0x5534, 0x552a, 0x5551, 0x5562, 0x5536, 0x5535, + /* 0x34 */ + 0x5530, 0x5552, 0x5545, 0x550c, 0x5532, 0x5565, 0x554e, 0x5539, + 0x5548, 0x552d, 0x553b, 0x5540, 0x554b, 0x570a, 0x5707, 0x57fb, + 0x5814, 0x57e2, 0x57f6, 0x57dc, 0x57f4, 0x5800, 0x57ed, 0x57fd, + 0x5808, 0x57f8, 0x580b, 0x57f3, 0x57cf, 0x5807, 0x57ee, 0x57e3, + 0x57f2, 0x57e5, 0x57ec, 0x57e1, 0x580e, 0x57fc, 0x5810, 0x57e7, + 0x5801, 0x580c, 0x57f1, 0x57e9, 0x57f0, 0x580d, 0x5804, 0x595c, + 0x5a60, 0x5a58, 0x5a55, 0x5a67, 0x5a5e, 0x5a38, 0x5a35, 0x5a6d, + 0x5a50, 0x5a5f, 0x5a65, 0x5a6c, 0x5a53, 0x5a64, 0x5a57, 0x5a43, + 0x5a5d, 0x5a52, 0x5a44, 0x5a5b, 0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, + 0x5a39, 0x5a4c, 0x5a70, 0x5a69, 0x5a47, 0x5a51, 0x5a56, 0x5a42, + 0x5a5c, 0x5b72, 0x5b6e, 0x5bc1, 0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, + 0x5d1d, 0x5d1a, 0x5d20, 0x5d0c, 0x5d28, 0x5d0d, + /* 0x35 */ + 0x5d26, 0x5d25, 0x5d0f, 0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, + 0x5e3e, 0x5e34, 0x5eb1, 0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, + 0x5f38, 0x5f9b, 0x5f96, 0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, + 0x60b0, 0x60ba, 0x60d3, 0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, + 0x60c8, 0x60b1, 0x60db, 0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, + 0x60c0, 0x6332, 0x6365, 0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, + 0x63ad, 0x639d, 0x6397, 0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, + 0x636e, 0x63af, 0x6375, 0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, + 0x633b, 0x639f, 0x6378, 0x6385, 0x6381, 0x6391, 0x638d, 0x6370, + 0x6553, 0x65cd, 0x6665, 0x6661, 0x665b, 0x6659, 0x665c, 0x6662, + 0x6718, 0x6879, 0x6887, 0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, + 0x68ab, 0x6956, 0x686f, 0x68a3, 0x68ac, 0x68a9, + /* 0x36 */ + 0x6875, 0x6874, 0x68b2, 0x688f, 0x6877, 0x6892, 0x687c, 0x686b, + 0x6872, 0x68aa, 0x6880, 0x6871, 0x687e, 0x689b, 0x6896, 0x688b, + 0x68a0, 0x6889, 0x68a4, 0x6878, 0x687b, 0x6891, 0x688c, 0x688a, + 0x687d, 0x6b36, 0x6b33, 0x6b37, 0x6b38, 0x6b91, 0x6b8f, 0x6b8d, + 0x6b8e, 0x6b8c, 0x6c2a, 0x6dc0, 0x6dab, 0x6db4, 0x6db3, 0x6e74, + 0x6dac, 0x6de9, 0x6de2, 0x6db7, 0x6df6, 0x6dd4, 0x6e00, 0x6dc8, + 0x6de0, 0x6ddf, 0x6dd6, 0x6dbe, 0x6de5, 0x6ddc, 0x6ddd, 0x6ddb, + 0x6df4, 0x6dca, 0x6dbd, 0x6ded, 0x6df0, 0x6dba, 0x6dd5, 0x6dc2, + 0x6dcf, 0x6dc9, 0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, + 0x6de3, 0x6dbb, 0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, + 0x70f0, 0x7104, 0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, + 0x7100, 0x70f8, 0x70f6, 0x710b, 0x7102, 0x710e, + /* 0x37 */ + 0x727e, 0x727b, 0x727c, 0x727f, 0x731d, 0x7317, 0x7307, 0x7311, + 0x7318, 0x730a, 0x7308, 0x72ff, 0x730f, 0x731e, 0x7388, 0x73f6, + 0x73f8, 0x73f5, 0x7404, 0x7401, 0x73fd, 0x7407, 0x7400, 0x73fa, + 0x73fc, 0x73ff, 0x740c, 0x740b, 0x73f4, 0x7408, 0x7564, 0x7563, + 0x75ce, 0x75d2, 0x75cf, 0x75cb, 0x75cc, 0x75d1, 0x75d0, 0x768f, + 0x7689, 0x76d3, 0x7739, 0x772f, 0x772d, 0x7731, 0x7732, 0x7734, + 0x7733, 0x773d, 0x7725, 0x773b, 0x7735, 0x7848, 0x7852, 0x7849, + 0x784d, 0x784a, 0x784c, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, + 0x7969, 0x796a, 0x7963, 0x796b, 0x7961, 0x79bb, 0x79fa, 0x79f8, + 0x79f6, 0x79f7, 0x7a8f, 0x7a94, 0x7a90, 0x7b35, 0x7b3b, 0x7b34, + 0x7b25, 0x7b30, 0x7b22, 0x7b24, 0x7b33, 0x7b18, 0x7b2a, 0x7b1d, + 0x7b31, 0x7b2b, 0x7b2d, 0x7b2f, 0x7b32, 0x7b38, + /* 0x38 */ + 0x7b1a, 0x7b23, 0x7c94, 0x7c98, 0x7c96, 0x7ca3, 0x7d35, 0x7d3d, + 0x7d38, 0x7d36, 0x7d3a, 0x7d45, 0x7d2c, 0x7d29, 0x7d41, 0x7d47, + 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b, 0x7d28, 0x7f63, 0x7f95, 0x7f9c, + 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb, 0x7fcd, 0x7fd0, 0x7fd1, 0x7fc7, + 0x7fcf, 0x7fc9, 0x801f, 0x801e, 0x801b, 0x8047, 0x8043, 0x8048, + 0x8118, 0x8125, 0x8119, 0x811b, 0x812d, 0x811f, 0x812c, 0x811e, + 0x8121, 0x8115, 0x8127, 0x811d, 0x8122, 0x8211, 0x8238, 0x8233, + 0x823a, 0x8234, 0x8232, 0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, + 0x837a, 0x8373, 0x83a4, 0x8374, 0x838f, 0x8381, 0x8395, 0x8399, + 0x8375, 0x8394, 0x83a9, 0x837d, 0x8383, 0x838c, 0x839d, 0x839b, + 0x83aa, 0x838b, 0x837e, 0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, + 0x837f, 0x83a6, 0x8387, 0x83ae, 0x8376, 0x8659, + /* 0x39 */ + 0x8656, 0x86bf, 0x86b7, 0x86c2, 0x86c1, 0x86c5, 0x86ba, 0x86b0, + 0x86c8, 0x86b9, 0x86b3, 0x86b8, 0x86cc, 0x86b4, 0x86bb, 0x86bc, + 0x86c3, 0x86bd, 0x86be, 0x8852, 0x8889, 0x8895, 0x88a8, 0x88a2, + 0x88aa, 0x889a, 0x8891, 0x88a1, 0x889f, 0x8898, 0x88a7, 0x8899, + 0x889b, 0x8897, 0x88a4, 0x88ac, 0x888c, 0x8893, 0x888e, 0x8982, + 0x89d6, 0x89d9, 0x89d5, 0x8a30, 0x8a27, 0x8a2c, 0x8a1e, 0x8c39, + 0x8c3b, 0x8c5c, 0x8c5d, 0x8c7d, 0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, + 0x8dbc, 0x8dc2, 0x8db9, 0x8dbf, 0x8dc1, 0x8ed8, 0x8ede, 0x8edd, + 0x8edc, 0x8ed7, 0x8ee0, 0x8ee1, 0x9024, 0x900b, 0x9011, 0x901c, + 0x900c, 0x9021, 0x90ef, 0x90ea, 0x90f0, 0x90f4, 0x90f2, 0x90f3, + 0x90d4, 0x90eb, 0x90ec, 0x90e9, 0x9156, 0x9158, 0x915a, 0x9153, + 0x9155, 0x91ec, 0x91f4, 0x91f1, 0x91f3, 0x91f8, + /* 0x3a */ + 0x91e4, 0x91f9, 0x91ea, 0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, + 0x9586, 0x9588, 0x967c, 0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, + 0x976a, 0x9804, 0x98e5, 0x9997, 0x509b, 0x5095, 0x5094, 0x509e, + 0x508b, 0x50a3, 0x5083, 0x508c, 0x508e, 0x509d, 0x5068, 0x509c, + 0x5092, 0x5082, 0x5087, 0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, + 0x53a7, 0x5591, 0x55a8, 0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, + 0x5593, 0x5588, 0x558f, 0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, + 0x557d, 0x558c, 0x55a6, 0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, + 0x5829, 0x5837, 0x5819, 0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, + 0x5848, 0x5825, 0x581c, 0x581b, 0x5833, 0x583f, 0x5836, 0x582e, + 0x5839, 0x5838, 0x582d, 0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, + 0x5a9f, 0x5a7a, 0x5aa2, 0x5a9e, 0x5a78, 0x5aa6, + /* 0x3b */ + 0x5a7c, 0x5aa5, 0x5aac, 0x5a95, 0x5aae, 0x5a37, 0x5a84, 0x5a8a, + 0x5a97, 0x5a83, 0x5a8b, 0x5aa9, 0x5a7b, 0x5a7d, 0x5a8c, 0x5a9c, + 0x5a8f, 0x5a93, 0x5a9d, 0x5bea, 0x5bcd, 0x5bcb, 0x5bd4, 0x5bd1, + 0x5bca, 0x5bce, 0x5c0c, 0x5c30, 0x5d37, 0x5d43, 0x5d6b, 0x5d41, + 0x5d4b, 0x5d3f, 0x5d35, 0x5d51, 0x5d4e, 0x5d55, 0x5d33, 0x5d3a, + 0x5d52, 0x5d3d, 0x5d31, 0x5d59, 0x5d42, 0x5d39, 0x5d49, 0x5d38, + 0x5d3c, 0x5d32, 0x5d36, 0x5d40, 0x5d45, 0x5e44, 0x5e41, 0x5f58, + 0x5fa6, 0x5fa5, 0x5fab, 0x60c9, 0x60b9, 0x60cc, 0x60e2, 0x60ce, + 0x60c4, 0x6114, 0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, + 0x60f8, 0x60fc, 0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, + 0x60ff, 0x6104, 0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, + 0x63e5, 0x63e8, 0x63ef, 0x63c3, 0x649d, 0x63f3, + /* 0x3c */ + 0x63ca, 0x63e0, 0x63f6, 0x63d5, 0x63f2, 0x63f5, 0x6461, 0x63df, + 0x63be, 0x63dd, 0x63dc, 0x63c4, 0x63d8, 0x63d3, 0x63c2, 0x63c7, + 0x63cc, 0x63cb, 0x63c8, 0x63f0, 0x63d7, 0x63d9, 0x6532, 0x6567, + 0x656a, 0x6564, 0x655c, 0x6568, 0x6565, 0x658c, 0x659d, 0x659e, + 0x65ae, 0x65d0, 0x65d2, 0x667c, 0x666c, 0x667b, 0x6680, 0x6671, + 0x6679, 0x666a, 0x6672, 0x6701, 0x690c, 0x68d3, 0x6904, 0x68dc, + 0x692a, 0x68ec, 0x68ea, 0x68f1, 0x690f, 0x68d6, 0x68f7, 0x68eb, + 0x68e4, 0x68f6, 0x6913, 0x6910, 0x68f3, 0x68e1, 0x6907, 0x68cc, + 0x6908, 0x6970, 0x68b4, 0x6911, 0x68ef, 0x68c6, 0x6914, 0x68f8, + 0x68d0, 0x68fd, 0x68fc, 0x68e8, 0x690b, 0x690a, 0x6917, 0x68ce, + 0x68c8, 0x68dd, 0x68de, 0x68e6, 0x68f4, 0x68d1, 0x6906, 0x68d4, + 0x68e9, 0x6915, 0x6925, 0x68c7, 0x6b39, 0x6b3b, + /* 0x3d */ + 0x6b3f, 0x6b3c, 0x6b94, 0x6b97, 0x6b99, 0x6b95, 0x6bbd, 0x6bf0, + 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc, 0x6e46, 0x6e47, 0x6e1f, 0x6e49, + 0x6e88, 0x6e3c, 0x6e3d, 0x6e45, 0x6e62, 0x6e2b, 0x6e3f, 0x6e41, + 0x6e5d, 0x6e73, 0x6e1c, 0x6e33, 0x6e4b, 0x6e40, 0x6e51, 0x6e3b, + 0x6e03, 0x6e2e, 0x6e5e, 0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, + 0x6e60, 0x6e71, 0x6e6b, 0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, + 0x6e27, 0x6e78, 0x6e64, 0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, + 0x6e35, 0x6e36, 0x6e5a, 0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, + 0x7131, 0x7123, 0x7125, 0x7122, 0x7132, 0x711f, 0x7128, 0x713a, + 0x711b, 0x724b, 0x725a, 0x7288, 0x7289, 0x7286, 0x7285, 0x728b, + 0x7312, 0x730b, 0x7330, 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, + 0x732d, 0x7326, 0x7323, 0x7335, 0x730c, 0x742e, + /* 0x3e */ + 0x742c, 0x7430, 0x742b, 0x7416, 0x741a, 0x7421, 0x742d, 0x7431, + 0x7424, 0x7423, 0x741d, 0x7429, 0x7420, 0x7432, 0x74fb, 0x752f, + 0x756f, 0x756c, 0x75e7, 0x75da, 0x75e1, 0x75e6, 0x75dd, 0x75df, + 0x75e4, 0x75d7, 0x7695, 0x7692, 0x76da, 0x7746, 0x7747, 0x7744, + 0x774d, 0x7745, 0x774a, 0x774e, 0x774b, 0x774c, 0x77de, 0x77ec, + 0x7860, 0x7864, 0x7865, 0x785c, 0x786d, 0x7871, 0x786a, 0x786e, + 0x7870, 0x7869, 0x7868, 0x785e, 0x7862, 0x7974, 0x7973, 0x7972, + 0x7970, 0x7a02, 0x7a0a, 0x7a03, 0x7a0c, 0x7a04, 0x7a99, 0x7ae6, + 0x7ae4, 0x7b4a, 0x7b47, 0x7b44, 0x7b48, 0x7b4c, 0x7b4e, 0x7b40, + 0x7b58, 0x7b45, 0x7ca2, 0x7c9e, 0x7ca8, 0x7ca1, 0x7d58, 0x7d6f, + 0x7d63, 0x7d53, 0x7d56, 0x7d67, 0x7d6a, 0x7d4f, 0x7d6d, 0x7d5c, + 0x7d6b, 0x7d52, 0x7d54, 0x7d69, 0x7d51, 0x7d5f, + /* 0x3f */ + 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65, 0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, + 0x7fd7, 0x8051, 0x804f, 0x8050, 0x80fe, 0x80d4, 0x8143, 0x814a, + 0x8152, 0x814f, 0x8147, 0x813d, 0x814d, 0x813a, 0x81e6, 0x81ee, + 0x81f7, 0x81f8, 0x81f9, 0x8204, 0x823c, 0x823d, 0x823f, 0x8275, + 0x833b, 0x83cf, 0x83f9, 0x8423, 0x83c0, 0x83e8, 0x8412, 0x83e7, + 0x83e4, 0x83fc, 0x83f6, 0x8410, 0x83c6, 0x83c8, 0x83eb, 0x83e3, + 0x83bf, 0x8401, 0x83dd, 0x83e5, 0x83d8, 0x83ff, 0x83e1, 0x83cb, + 0x83ce, 0x83d6, 0x83f5, 0x83c9, 0x8409, 0x840f, 0x83de, 0x8411, + 0x8406, 0x83c2, 0x83f3, 0x83d5, 0x83fa, 0x83c7, 0x83d1, 0x83ea, + 0x8413, 0x839a, 0x83c3, 0x83ec, 0x83ee, 0x83c4, 0x83fb, 0x83d7, + 0x83e2, 0x841b, 0x83db, 0x83fe, 0x86d8, 0x86e2, 0x86e6, 0x86d3, + 0x86e3, 0x86da, 0x86ea, 0x86dd, 0x86eb, 0x86dc, + /* 0x40 */ + 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1, 0x8848, 0x8856, 0x8855, + 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0, 0x88be, 0x88b6, 0x88bc, + 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9, 0x8995, 0x8998, 0x8997, + 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d, 0x8a39, 0x8a59, 0x8a40, + 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52, 0x8a48, 0x8a51, 0x8a4a, + 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80, 0x8cba, 0x8cbe, 0x8cb0, + 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89, 0x8dd8, 0x8dd3, 0x8dcd, + 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5, 0x8dd9, 0x8dc8, 0x8dd7, + 0x8dc5, 0x8eef, 0x8ef7, 0x8efa, 0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, + 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6, 0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, + 0x8ee9, 0x902d, 0x9034, 0x902f, 0x9106, 0x912c, 0x9104, 0x90ff, + 0x90fc, 0x9108, 0x90f9, 0x90fb, 0x9101, 0x9100, + /* 0x41 */ + 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f, 0x9162, 0x9160, + 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226, 0x920f, 0x920c, + 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204, 0x9227, 0x9202, + 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216, 0x957b, 0x958d, + 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 0x9689, 0x9683, 0x9680, + 0x96c2, 0x96c8, 0x96c3, 0x96f1, 0x96f0, 0x976c, 0x9770, 0x976e, + 0x9807, 0x98a9, 0x98eb, 0x9ce6, 0x9ef9, 0x4e83, 0x4e84, 0x4eb6, + 0x50bd, 0x50bf, 0x50c6, 0x50ae, 0x50c4, 0x50ca, 0x50b4, 0x50c8, + 0x50c2, 0x50b0, 0x50c1, 0x50ba, 0x50b1, 0x50cb, 0x50c9, 0x50b6, + 0x50b8, 0x51d7, 0x527a, 0x5278, 0x527b, 0x527c, 0x55c3, 0x55db, + 0x55cc, 0x55d0, 0x55cb, 0x55ca, 0x55dd, 0x55c0, 0x55d4, 0x55c4, + 0x55e9, 0x55bf, 0x55d2, 0x558d, 0x55cf, 0x55d5, + /* 0x42 */ + 0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9, 0x55c2, 0x5714, + 0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849, 0x586f, 0x5855, + 0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d, 0x5863, 0x5871, + 0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8, 0x5ab1, 0x5ab5, + 0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6, 0x5ab7, 0x5ac0, 0x5aca, + 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90, 0x5bd6, 0x5bd8, 0x5bd9, + 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a, 0x5d65, 0x5d72, 0x5d6c, + 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0, 0x5e4f, 0x5e4e, 0x5e4a, + 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6, 0x5ecb, 0x5ec7, 0x5f40, + 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a, 0x612b, 0x6145, 0x6136, + 0x6132, 0x612e, 0x6146, 0x612f, 0x614f, 0x6129, 0x6140, 0x6220, + 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5, 0x63f1, + /* 0x43 */ + 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x6433, 0x6443, + 0x641f, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423, 0x640c, + 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642f, 0x640a, 0x641a, + 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7, 0x641b, 0x642e, 0x6421, + 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686, 0x668c, 0x6695, 0x6690, + 0x668b, 0x668a, 0x6699, 0x6694, 0x6678, 0x6720, 0x6966, 0x695f, + 0x6938, 0x694e, 0x6962, 0x6971, 0x693f, 0x6945, 0x696a, 0x6939, + 0x6942, 0x6957, 0x6959, 0x697a, 0x6948, 0x6949, 0x6935, 0x696c, + 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978, 0x6934, 0x6969, 0x6940, + 0x696f, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694c, 0x693b, + 0x694b, 0x6937, 0x695c, 0x694f, 0x6951, 0x6932, 0x6952, 0x692f, + 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43, 0x6b42, + /* 0x44 */ + 0x6b48, 0x6b41, 0x6b9b, 0x6bfb, 0x6bfc, 0x6bf9, 0x6bf7, 0x6bf8, + 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0, 0x6e9f, 0x6e93, 0x6e94, + 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2, 0x6ebd, 0x6ec1, 0x6e9e, + 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6, 0x6ecf, 0x6eb2, 0x6ebe, + 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92, 0x6e8e, 0x6e8d, 0x6ea4, + 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca, 0x6e97, 0x6eae, 0x6ea3, + 0x7147, 0x7154, 0x7152, 0x7163, 0x7160, 0x7141, 0x715d, 0x7162, + 0x7172, 0x7178, 0x716a, 0x7161, 0x7142, 0x7158, 0x7143, 0x714b, + 0x7170, 0x715f, 0x7150, 0x7153, 0x7144, 0x714d, 0x715a, 0x724f, + 0x728d, 0x728c, 0x7291, 0x7290, 0x728e, 0x733c, 0x7342, 0x733b, + 0x733a, 0x7340, 0x734a, 0x7349, 0x7444, 0x744a, 0x744b, 0x7452, + 0x7451, 0x7457, 0x7440, 0x744f, 0x7450, 0x744e, + /* 0x45 */ + 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1, 0x74ff, 0x74fe, 0x74fd, + 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef, 0x760f, 0x7603, 0x75f7, + 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610, 0x75fb, 0x75f6, 0x75ed, + 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd, 0x7755, 0x775f, 0x7760, + 0x7752, 0x7756, 0x775a, 0x7769, 0x7767, 0x7754, 0x7759, 0x776d, + 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f, 0x7884, 0x7895, 0x7885, + 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899, 0x7880, 0x7896, 0x787b, + 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11, 0x7a18, 0x7a19, 0x7a12, + 0x7a17, 0x7a15, 0x7a22, 0x7a13, 0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, + 0x7a9e, 0x7aeb, 0x7b66, 0x7b64, 0x7b6d, 0x7b74, 0x7b69, 0x7b72, + 0x7b65, 0x7b73, 0x7b71, 0x7b70, 0x7b61, 0x7b78, 0x7b76, 0x7b63, + 0x7cb2, 0x7cb4, 0x7caf, 0x7d88, 0x7d86, 0x7d80, + /* 0x46 */ + 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b, 0x7d83, 0x7d7c, + 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d, 0x7f6b, 0x7f67, + 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb, 0x7fdc, 0x8021, + 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b, 0x8162, 0x8172, + 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 0x8144, 0x8161, 0x821d, + 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84f1, 0x843f, 0x8456, + 0x8476, 0x8479, 0x848f, 0x848d, 0x8465, 0x8451, 0x8440, 0x8486, + 0x8467, 0x8430, 0x844d, 0x847d, 0x845a, 0x8459, 0x8474, 0x8473, + 0x845d, 0x8507, 0x845e, 0x8437, 0x843a, 0x8434, 0x847a, 0x8443, + 0x8478, 0x8432, 0x8445, 0x8429, 0x83d9, 0x844b, 0x842f, 0x8442, + 0x842d, 0x845f, 0x8470, 0x8439, 0x844e, 0x844c, 0x8452, 0x846f, + 0x84c5, 0x848e, 0x843b, 0x8447, 0x8436, 0x8433, + /* 0x47 */ + 0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454, 0x846e, 0x8450, + 0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6, 0x86f5, 0x874d, + 0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d, 0x8705, 0x88d6, + 0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da, 0x88cc, 0x88d0, + 0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4, 0x89e1, 0x89e0, 0x89e2, + 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f, 0x8a61, 0x8a3f, 0x8a77, + 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81, 0x8a74, 0x8a7a, 0x8c3c, + 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66, 0x8c86, 0x8c84, 0x8c85, + 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c, 0x8d8e, 0x8d8f, 0x8d8d, + 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0, 0x8de0, 0x8dec, 0x8df1, + 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2, 0x8de7, 0x8df2, 0x8deb, + 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00, 0x8f05, + /* 0x48 */ + 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x9044, 0x9049, + 0x903d, 0x9110, 0x910d, 0x910f, 0x9111, 0x9116, 0x9114, 0x910b, + 0x910e, 0x916e, 0x916f, 0x9248, 0x9252, 0x9230, 0x923a, 0x9266, + 0x9233, 0x9265, 0x925e, 0x9283, 0x922e, 0x924a, 0x9246, 0x926d, + 0x926c, 0x924f, 0x9260, 0x9267, 0x926f, 0x9236, 0x9261, 0x9270, + 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, 0x924e, 0x9253, 0x924c, + 0x9256, 0x9232, 0x959f, 0x959c, 0x959e, 0x959b, 0x9692, 0x9693, + 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd, 0x96f8, 0x96f5, 0x9773, + 0x9777, 0x9778, 0x9772, 0x980f, 0x980d, 0x980e, 0x98ac, 0x98f6, + 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5, 0x9aad, 0x9aab, 0x9b5b, + 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd, 0x50e6, 0x50d4, 0x50d7, + 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd, 0x50e4, + /* 0x49 */ + 0x50d3, 0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0, 0x51d8, 0x5280, + 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627, 0x5615, 0x560c, + 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613, 0x5602, 0x55fa, + 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c, 0x5890, 0x5898, + 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a, 0x5887, 0x5891, + 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894, 0x588f, 0x58fe, + 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea, 0x5ada, 0x5aed, + 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec, 0x5ade, 0x5add, + 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 0x5be3, 0x5c63, 0x5d82, + 0x5d80, 0x5d7d, 0x5d86, 0x5d7a, 0x5d81, 0x5d77, 0x5d8a, 0x5d89, + 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d, 0x5d79, 0x5d7f, 0x5e58, 0x5e59, + 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7, 0x5ece, 0x5edc, + /* 0x4a */ + 0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43, 0x5f6f, 0x5fb6, + 0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173, 0x6152, 0x6153, + 0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a, 0x615b, 0x6165, + 0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227, 0x622b, 0x642b, + 0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472, 0x6473, 0x647d, + 0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e, 0x645c, 0x644b, + 0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c, 0x646b, 0x6459, + 0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0, 0x669f, 0x6705, + 0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9, 0x69a0, 0x69ce, 0x6996, + 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999, 0x698e, 0x69a7, 0x698d, + 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4, 0x69bd, 0x69a4, 0x69d4, + 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3, 0x6993, + /* 0x4b */ + 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2, 0x69b5, + 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f, 0x6ba0, + 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03, 0x6f25, + 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19, 0x6f1a, + 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x6f36, 0x6f73, + 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30, 0x6f3c, 0x6f35, 0x6eeb, + 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd, 0x6ef6, 0x6f39, 0x6f1c, + 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e, 0x6f08, 0x6f21, 0x7187, + 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718f, 0x717b, 0x7186, + 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293, 0x7343, + 0x734d, 0x7351, 0x734c, 0x7462, 0x7473, 0x7471, 0x7475, 0x7472, + 0x7467, 0x746e, 0x7500, 0x7502, 0x7503, 0x757d, + /* 0x4c */ + 0x7590, 0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a, 0x7614, + 0x76b8, 0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780, 0x776f, + 0x777e, 0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8, 0x787e, + 0x78ab, 0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4, 0x7998, + 0x798a, 0x798b, 0x7996, 0x7995, 0x7994, 0x7993, 0x7997, 0x7988, + 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f, 0x7a28, 0x7a26, + 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c, 0x7b8a, 0x7b91, + 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e, 0x7b85, 0x7b98, + 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf, 0x7cbc, 0x7cba, + 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1, 0x7dc0, 0x7dc5, + 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc, 0x7daf, 0x7db9, + 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9, + /* 0x4d */ + 0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 0x8024, + 0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187, 0x818d, 0x818c, + 0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f, 0x84ba, 0x84ce, + 0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4, 0x84c1, 0x84cd, + 0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7, 0x84bb, 0x84a2, + 0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af, 0x84a8, 0x84d6, + 0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4, 0x84d2, 0x84db, + 0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, 0x876b, 0x8740, + 0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743, 0x872c, 0x8741, + 0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d, 0x873c, 0x8712, + 0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, 0x8738, 0x8724, + 0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1, + /* 0x4e */ + 0x88f2, 0x88fa, 0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb, 0x88f0, + 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9, 0x89eb, + 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96, 0x8c3d, + 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09, 0x8e02, + 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06, 0x8e05, + 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d, 0x9123, + 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124, 0x9121, + 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4, 0x9276, + 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x92a6, 0x929a, + 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3, 0x92ee, 0x928e, 0x9282, + 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1, 0x928a, 0x9286, 0x928c, + 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9, 0x929d, + /* 0x4f */ + 0x928b, 0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d, 0x977a, + 0x977e, 0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781, 0x977f, + 0x97ce, 0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900, 0x9907, + 0x999d, 0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2, 0x99bd, + 0x99c7, 0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60, 0x9b61, + 0x9b5f, 0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103, 0x5130, + 0x50f8, 0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c, 0x50fd, + 0x510a, 0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642, 0x564c, + 0x5635, 0x5641, 0x564a, 0x5649, 0x5646, 0x5658, 0x565a, 0x5640, + 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a, 0x563a, 0x571a, + 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af, 0x58ac, 0x58a5, + 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7, + /* 0x50 */ + 0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05, + 0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93, + 0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d, + 0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2, + 0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 0x619b, + 0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa, 0x61a1, 0x618d, + 0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496, 0x64a0, 0x6485, + 0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c, 0x64a3, 0x649f, + 0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579, 0x657b, 0x65b2, + 0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7, 0x66aa, 0x66af, + 0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15, 0x69f1, 0x69e4, + 0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d, + /* 0x51 */ + 0x69fe, 0x6a27, 0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40, + 0x6a08, 0x69e6, 0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04, + 0x6a18, 0x6a25, 0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16, + 0x6b51, 0x6ba5, 0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff, + 0x6c02, 0x6f41, 0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92, 0x6f8d, + 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96, 0x6f76, + 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57, 0x6f94, + 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67, 0x6f90, + 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77, 0x6f6a, + 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a, 0x71a9, + 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa, 0x719c, + 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, + /* 0x52 */ + 0x735e, 0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, + 0x7362, 0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d, 0x7485, + 0x7488, 0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625, 0x761e, + 0x7619, 0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b, 0x769c, + 0x769d, 0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788, 0x78cd, + 0x78bb, 0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8, 0x78c3, + 0x78c4, 0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2, 0x799b, + 0x6b76, 0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb, 0x7bbe, + 0x7bac, 0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5, 0x7cc8, + 0x7ccc, 0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7, 0x7de1, + 0x7e03, 0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee, 0x7ddf, + 0x7f76, 0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, + /* 0x53 */ + 0x7fea, 0x7fec, 0x7fe6, 0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f, + 0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253, + 0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500, + 0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c, + 0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2, + 0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9, + 0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e, + 0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9, + 0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x8756, + 0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758, 0x8754, 0x875b, + 0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d, 0x876a, 0x8750, + 0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a, + /* 0x54 */ + 0x876e, 0x875c, 0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767, + 0x8769, 0x885a, 0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918, + 0x8919, 0x8906, 0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4, + 0x89a3, 0x89ed, 0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3, + 0x8ad1, 0x8ad4, 0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5, + 0x8ad8, 0x8ac3, 0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f, + 0x8ce5, 0x8cdf, 0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0, + 0x8d9c, 0x8da1, 0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e, + 0x8e15, 0x8e1b, 0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27, 0x8e14, + 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c, 0x8f24, + 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073, 0x9070, + 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, + /* 0x55 */ + 0x912a, 0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, + 0x9182, 0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, + 0x92b6, 0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, + 0x92cc, 0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, + 0x92cd, 0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, + 0x92b5, 0x92e1, 0x9325, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab, + 0x95ae, 0x95b0, 0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702, + 0x975a, 0x978a, 0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d, + 0x9826, 0x9829, 0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908, + 0x98fa, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd, + 0x99cf, 0x99d3, 0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb, + 0x99d7, 0x99cc, 0x9ab3, 0x9aec, 0x9aeb, 0x9af3, + /* 0x56 */ + 0x9af2, 0x9af1, 0x9b46, 0x9b43, 0x9b67, 0x9b74, 0x9b71, 0x9b66, + 0x9b76, 0x9b75, 0x9b70, 0x9b68, 0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, + 0x9cfd, 0x9cff, 0x9cf7, 0x9d07, 0x9d00, 0x9cf9, 0x9cfb, 0x9d08, + 0x9d05, 0x9d04, 0x9e83, 0x9ed3, 0x9f0f, 0x9f10, 0x511c, 0x5113, + 0x5117, 0x511a, 0x5111, 0x51de, 0x5334, 0x53e1, 0x5670, 0x5660, + 0x566e, 0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, + 0x571c, 0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, + 0x58bc, 0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, + 0x5b10, 0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, + 0x5db1, 0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, + 0x5db2, 0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, + 0x5ee9, 0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, + /* 0x57 */ + 0x5fbc, 0x5fbb, 0x619d, 0x61a8, 0x6196, 0x61c5, 0x61b4, 0x61c6, + 0x61c1, 0x61cc, 0x61ba, 0x61bf, 0x61b8, 0x618c, 0x64d7, 0x64d6, + 0x64d0, 0x64cf, 0x64c9, 0x64bd, 0x6489, 0x64c3, 0x64db, 0x64f3, + 0x64d9, 0x6533, 0x657f, 0x657c, 0x65a2, 0x66c8, 0x66be, 0x66c0, + 0x66ca, 0x66cb, 0x66cf, 0x66bd, 0x66bb, 0x66ba, 0x66cc, 0x6723, + 0x6a34, 0x6a66, 0x6a49, 0x6a67, 0x6a32, 0x6a68, 0x6a3e, 0x6a5d, + 0x6a6d, 0x6a76, 0x6a5b, 0x6a51, 0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, + 0x6a41, 0x6a6a, 0x6a64, 0x6a50, 0x6a4f, 0x6a54, 0x6a6f, 0x6a69, + 0x6a60, 0x6a3c, 0x6a5e, 0x6a56, 0x6a55, 0x6a4d, 0x6a4e, 0x6a46, + 0x6b55, 0x6b54, 0x6b56, 0x6ba7, 0x6baa, 0x6bab, 0x6bc8, 0x6bc7, + 0x6c04, 0x6c03, 0x6c06, 0x6fad, 0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, + 0x6fce, 0x6fc8, 0x6f5e, 0x6fc4, 0x6fbd, 0x6f9e, + /* 0x58 */ + 0x6fca, 0x6fa8, 0x7004, 0x6fa5, 0x6fae, 0x6fba, 0x6fac, 0x6faa, + 0x6fcf, 0x6fbf, 0x6fb8, 0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, + 0x6fb2, 0x6fb0, 0x71c5, 0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, + 0x71c1, 0x71cb, 0x71d4, 0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, + 0x71bc, 0x71c6, 0x71da, 0x71db, 0x729d, 0x729e, 0x7369, 0x7366, + 0x7367, 0x736c, 0x7365, 0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, + 0x7494, 0x7492, 0x7495, 0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, + 0x7631, 0x763d, 0x7633, 0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, + 0x76e6, 0x779a, 0x779d, 0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, + 0x7795, 0x7799, 0x7797, 0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, + 0x78e3, 0x78db, 0x78e1, 0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, + 0x7a44, 0x7a48, 0x7a47, 0x7ab6, 0x7ab8, 0x7ab5, + /* 0x59 */ + 0x7ab1, 0x7ab7, 0x7bde, 0x7be3, 0x7be7, 0x7bdd, 0x7bd5, 0x7be5, + 0x7bda, 0x7be8, 0x7bf9, 0x7bd4, 0x7bea, 0x7be2, 0x7bdc, 0x7beb, + 0x7bd8, 0x7bdf, 0x7cd2, 0x7cd4, 0x7cd7, 0x7cd0, 0x7cd1, 0x7e12, + 0x7e21, 0x7e17, 0x7e0c, 0x7e1f, 0x7e20, 0x7e13, 0x7e0e, 0x7e1c, + 0x7e15, 0x7e1a, 0x7e22, 0x7e0b, 0x7e0f, 0x7e16, 0x7e0d, 0x7e14, + 0x7e25, 0x7e24, 0x7f43, 0x7f7b, 0x7f7c, 0x7f7a, 0x7fb1, 0x7fef, + 0x802a, 0x8029, 0x806c, 0x81b1, 0x81a6, 0x81ae, 0x81b9, 0x81b5, + 0x81ab, 0x81b0, 0x81ac, 0x81b4, 0x81b2, 0x81b7, 0x81a7, 0x81f2, + 0x8255, 0x8256, 0x8257, 0x8556, 0x8545, 0x856b, 0x854d, 0x8553, + 0x8561, 0x8558, 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, + 0x8551, 0x8547, 0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, + 0x8575, 0x8555, 0x8567, 0x8560, 0x858c, 0x8566, + /* 0x5a */ + 0x855d, 0x8554, 0x8565, 0x856c, 0x8663, 0x8665, 0x8664, 0x87a4, + 0x879b, 0x878f, 0x8797, 0x8793, 0x8792, 0x8788, 0x8781, 0x8796, + 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785, 0x8790, 0x8791, 0x879d, + 0x8784, 0x8794, 0x879c, 0x879a, 0x8789, 0x891e, 0x8926, 0x8930, + 0x892d, 0x892e, 0x8927, 0x8931, 0x8922, 0x8929, 0x8923, 0x892f, + 0x892c, 0x891f, 0x89f1, 0x8ae0, 0x8ae2, 0x8af2, 0x8af4, 0x8af5, + 0x8add, 0x8b14, 0x8ae4, 0x8adf, 0x8af0, 0x8ac8, 0x8ade, 0x8ae1, + 0x8ae8, 0x8aff, 0x8aef, 0x8afb, 0x8c91, 0x8c92, 0x8c90, 0x8cf5, + 0x8cee, 0x8cf1, 0x8cf0, 0x8cf3, 0x8d6c, 0x8d6e, 0x8da5, 0x8da7, + 0x8e33, 0x8e3e, 0x8e38, 0x8e40, 0x8e45, 0x8e36, 0x8e3c, 0x8e3d, + 0x8e41, 0x8e30, 0x8e3f, 0x8ebd, 0x8f36, 0x8f2e, 0x8f35, 0x8f32, + 0x8f39, 0x8f37, 0x8f34, 0x9076, 0x9079, 0x907b, + /* 0x5b */ + 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190, 0x9191, + 0x918d, 0x918f, 0x9327, 0x931e, 0x9308, 0x931f, 0x9306, 0x930f, + 0x937a, 0x9338, 0x933c, 0x931b, 0x9323, 0x9312, 0x9301, 0x9346, + 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d, 0x92fa, 0x9313, 0x92f9, + 0x92f7, 0x9334, 0x9302, 0x9324, 0x92ff, 0x9329, 0x9339, 0x9335, + 0x932a, 0x9314, 0x930c, 0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, + 0x9316, 0x95bc, 0x95cd, 0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, + 0x95b5, 0x95bd, 0x96a9, 0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, + 0x9797, 0x9794, 0x97f0, 0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, + 0x991f, 0x9927, 0x9929, 0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, + 0x99f0, 0x99e3, 0x99ea, 0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, + 0x9abb, 0x9af6, 0x9afa, 0x9af9, 0x9af7, 0x9b33, + /* 0x5c */ + 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e, 0x9b7b, 0x9b82, 0x9b93, + 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 0x9b7d, 0x9b88, 0x9d25, 0x9d17, + 0x9d20, 0x9d1e, 0x9d14, 0x9d29, 0x9d1d, 0x9d18, 0x9d22, 0x9d10, + 0x9d19, 0x9d1f, 0x9e88, 0x9e86, 0x9e87, 0x9eae, 0x9ead, 0x9ed5, + 0x9ed6, 0x9efa, 0x9f12, 0x9f3d, 0x5126, 0x5125, 0x5122, 0x5124, + 0x5120, 0x5129, 0x52f4, 0x5693, 0x568c, 0x568d, 0x5686, 0x5684, + 0x5683, 0x567e, 0x5682, 0x567f, 0x5681, 0x58d6, 0x58d4, 0x58cf, + 0x58d2, 0x5b2d, 0x5b25, 0x5b32, 0x5b23, 0x5b2c, 0x5b27, 0x5b26, + 0x5b2f, 0x5b2e, 0x5b7b, 0x5bf1, 0x5bf2, 0x5db7, 0x5e6c, 0x5e6a, + 0x5fbe, 0x61c3, 0x61b5, 0x61bc, 0x61e7, 0x61e0, 0x61e5, 0x61e4, + 0x61e8, 0x61de, 0x64ef, 0x64e9, 0x64e3, 0x64eb, 0x64e4, 0x64e8, + 0x6581, 0x6580, 0x65b6, 0x65da, 0x66d2, 0x6a8d, + /* 0x5d */ + 0x6a96, 0x6a81, 0x6aa5, 0x6a89, 0x6a9f, 0x6a9b, 0x6aa1, 0x6a9e, + 0x6a87, 0x6a93, 0x6a8e, 0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, + 0x6a7f, 0x6aa6, 0x6a9a, 0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, + 0x6c09, 0x6fcc, 0x6fa9, 0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, + 0x6fe7, 0x6fe6, 0x6fde, 0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, + 0x71f1, 0x71e8, 0x71f2, 0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, + 0x736f, 0x7497, 0x74b2, 0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, + 0x74a5, 0x74af, 0x7510, 0x7511, 0x7512, 0x750f, 0x7584, 0x7643, + 0x7648, 0x7649, 0x7647, 0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, + 0x77b7, 0x77b6, 0x77b4, 0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, + 0x7902, 0x78fb, 0x78fc, 0x78ff, 0x78f2, 0x7905, 0x78f9, 0x78fe, + 0x7904, 0x79ab, 0x79a8, 0x7a5c, 0x7a5b, 0x7a56, + /* 0x5e */ + 0x7a58, 0x7a54, 0x7a5a, 0x7abe, 0x7ac0, 0x7ac1, 0x7c05, 0x7c0f, + 0x7bf2, 0x7c00, 0x7bff, 0x7bfb, 0x7c0e, 0x7bf4, 0x7c0b, 0x7bf3, + 0x7c02, 0x7c09, 0x7c03, 0x7c01, 0x7bf8, 0x7bfd, 0x7c06, 0x7bf0, + 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8, 0x7e2d, 0x7e3c, 0x7e42, 0x7e33, + 0x9848, 0x7e38, 0x7e2a, 0x7e49, 0x7e40, 0x7e47, 0x7e29, 0x7e4c, + 0x7e30, 0x7e3b, 0x7e36, 0x7e44, 0x7e3a, 0x7f45, 0x7f7f, 0x7f7e, + 0x7f7d, 0x7ff4, 0x7ff2, 0x802c, 0x81bb, 0x81c4, 0x81cc, 0x81ca, + 0x81c5, 0x81c7, 0x81bc, 0x81e9, 0x825b, 0x825a, 0x825c, 0x8583, + 0x8580, 0x858f, 0x85a7, 0x8595, 0x85a0, 0x858b, 0x85a3, 0x857b, + 0x85a4, 0x859a, 0x859e, 0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, + 0x8578, 0x8557, 0x858e, 0x8596, 0x8586, 0x858d, 0x8599, 0x859d, + 0x8581, 0x85a2, 0x8582, 0x8588, 0x8585, 0x8579, + /* 0x5f */ + 0x8576, 0x8598, 0x8590, 0x859f, 0x8668, 0x87be, 0x87aa, 0x87ad, + 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5, 0x87bc, 0x87ae, 0x87c9, + 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af, 0x87c4, 0x87ca, 0x87b4, + 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de, 0x87b2, 0x8935, 0x8933, + 0x893c, 0x893e, 0x8941, 0x8952, 0x8937, 0x8942, 0x89ad, 0x89af, + 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 0x8b18, 0x8b16, 0x8b11, 0x8b05, + 0x8b0b, 0x8b22, 0x8b0f, 0x8b12, 0x8b15, 0x8b07, 0x8b0d, 0x8b08, + 0x8b06, 0x8b1c, 0x8b13, 0x8b1a, 0x8c4f, 0x8c70, 0x8c72, 0x8c71, + 0x8c6f, 0x8c95, 0x8c94, 0x8cf9, 0x8d6f, 0x8e4e, 0x8e4d, 0x8e53, + 0x8e50, 0x8e4c, 0x8e47, 0x8f43, 0x8f40, 0x9085, 0x907e, 0x9138, + 0x919a, 0x91a2, 0x919b, 0x9199, 0x919f, 0x91a1, 0x919d, 0x91a0, + 0x93a1, 0x9383, 0x93af, 0x9364, 0x9356, 0x9347, + /* 0x60 */ + 0x937c, 0x9358, 0x935c, 0x9376, 0x9349, 0x9350, 0x9351, 0x9360, + 0x936d, 0x938f, 0x934c, 0x936a, 0x9379, 0x9357, 0x9355, 0x9352, + 0x934f, 0x9371, 0x9377, 0x937b, 0x9361, 0x935e, 0x9363, 0x9367, + 0x934e, 0x9359, 0x95c7, 0x95c0, 0x95c9, 0x95c3, 0x95c5, 0x95b7, + 0x96ae, 0x96b0, 0x96ac, 0x9720, 0x971f, 0x9718, 0x971d, 0x9719, + 0x979a, 0x97a1, 0x979c, 0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, + 0x9841, 0x9844, 0x984a, 0x9849, 0x9845, 0x9843, 0x9925, 0x992b, + 0x992c, 0x992a, 0x9933, 0x9932, 0x992f, 0x992d, 0x9931, 0x9930, + 0x9998, 0x99a3, 0x99a1, 0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, + 0x99f8, 0x99f6, 0x99fb, 0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, + 0x9afe, 0x9afd, 0x9b01, 0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, + 0x9b9b, 0x9ba6, 0x9ba1, 0x9ba5, 0x9ba4, 0x9b86, + /* 0x61 */ + 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41, 0x9d67, 0x9d36, 0x9d2e, + 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x9d45, 0x9d42, 0x9d43, 0x9d3e, + 0x9d37, 0x9d40, 0x9d3d, 0x7ff5, 0x9d2d, 0x9e8a, 0x9e89, 0x9e8d, + 0x9eb0, 0x9ec8, 0x9eda, 0x9efb, 0x9eff, 0x9f24, 0x9f23, 0x9f22, + 0x9f54, 0x9fa0, 0x5131, 0x512d, 0x512e, 0x5698, 0x569c, 0x5697, + 0x569a, 0x569d, 0x5699, 0x5970, 0x5b3c, 0x5c69, 0x5c6a, 0x5dc0, + 0x5e6d, 0x5e6e, 0x61d8, 0x61df, 0x61ed, 0x61ee, 0x61f1, 0x61ea, + 0x61f0, 0x61eb, 0x61d6, 0x61e9, 0x64ff, 0x6504, 0x64fd, 0x64f8, + 0x6501, 0x6503, 0x64fc, 0x6594, 0x65db, 0x66da, 0x66db, 0x66d8, + 0x6ac5, 0x6ab9, 0x6abd, 0x6ae1, 0x6ac6, 0x6aba, 0x6ab6, 0x6ab7, + 0x6ac7, 0x6ab4, 0x6aad, 0x6b5e, 0x6bc9, 0x6c0b, 0x7007, 0x700c, + 0x700d, 0x7001, 0x7005, 0x7014, 0x700e, 0x6fff, + /* 0x62 */ + 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7, 0x700a, 0x7201, 0x71ff, + 0x71f9, 0x7203, 0x71fd, 0x7376, 0x74b8, 0x74c0, 0x74b5, 0x74c1, + 0x74be, 0x74b6, 0x74bb, 0x74c2, 0x7514, 0x7513, 0x765c, 0x7664, + 0x7659, 0x7650, 0x7653, 0x7657, 0x765a, 0x76a6, 0x76bd, 0x76ec, + 0x77c2, 0x77ba, 0x790c, 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, + 0x7911, 0x79ad, 0x79ac, 0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, + 0x7c1f, 0x7c2d, 0x7c1d, 0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, + 0x7e5c, 0x7e50, 0x7e56, 0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, + 0x7e60, 0x7e57, 0x7e53, 0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, + 0x81d1, 0x81d2, 0x81d0, 0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, + 0x85c3, 0x85c2, 0x85b3, 0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, + 0x85cb, 0x85ce, 0x85c8, 0x85c5, 0x85b1, 0x85b6, + /* 0x63 */ + 0x85d2, 0x8624, 0x85b8, 0x85b7, 0x85be, 0x8669, 0x87e7, 0x87e6, + 0x87e2, 0x87db, 0x87eb, 0x87ea, 0x87e5, 0x87df, 0x87f3, 0x87e4, + 0x87d4, 0x87dc, 0x87d3, 0x87ed, 0x87d8, 0x87e3, 0x87d7, 0x87d9, + 0x8801, 0x87f4, 0x87e8, 0x87dd, 0x8953, 0x894b, 0x894f, 0x894c, + 0x8946, 0x8950, 0x8951, 0x8949, 0x8b2a, 0x8b27, 0x8b23, 0x8b33, + 0x8b30, 0x8b35, 0x8b47, 0x8b2f, 0x8b3c, 0x8b3e, 0x8b31, 0x8b25, + 0x8b37, 0x8b26, 0x8b36, 0x8b2e, 0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, + 0x8c42, 0x8c75, 0x8c99, 0x8c98, 0x8c97, 0x8cfe, 0x8d04, 0x8d02, + 0x8d00, 0x8e5c, 0x8e62, 0x8e60, 0x8e57, 0x8e56, 0x8e5e, 0x8e65, + 0x8e67, 0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, + 0x8f47, 0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, + 0x91a5, 0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, + /* 0x64 */ + 0x9392, 0x93b7, 0x939b, 0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, + 0x939e, 0x93a6, 0x9395, 0x9388, 0x9399, 0x939f, 0x9380, 0x938d, + 0x93b1, 0x9391, 0x93b2, 0x93a4, 0x93a8, 0x93b4, 0x93a3, 0x95d2, + 0x95d3, 0x95d1, 0x96b3, 0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, + 0x96dd, 0x9723, 0x9722, 0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, + 0x97a4, 0x97aa, 0x97a2, 0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, + 0x97fa, 0x9850, 0x9851, 0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, + 0x9a0f, 0x9a0b, 0x9a09, 0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, + 0x9a07, 0x9a06, 0x9ac0, 0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, + 0x9b35, 0x9b4a, 0x9b4c, 0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, + 0x9bc1, 0x9bb5, 0x9bb8, 0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, + 0x9d5c, 0x9d53, 0x9d4f, 0x9d4a, 0x9d5b, 0x9d4b, + /* 0x65 */ + 0x9d59, 0x9d56, 0x9d4c, 0x9d57, 0x9d52, 0x9d54, 0x9d5f, 0x9d58, + 0x9d5a, 0x9e8e, 0x9e8c, 0x9edf, 0x9f01, 0x9f00, 0x9f16, 0x9f25, + 0x9f2b, 0x9f2a, 0x9f29, 0x9f28, 0x9f4c, 0x9f55, 0x5134, 0x5135, + 0x5296, 0x52f7, 0x53b4, 0x56ab, 0x56ad, 0x56a6, 0x56a7, 0x56aa, + 0x56ac, 0x58da, 0x58dd, 0x58db, 0x5912, 0x5b3d, 0x5b3e, 0x5b3f, + 0x5dc3, 0x5e70, 0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, + 0x650c, 0x650e, 0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, + 0x6acc, 0x6ad1, 0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, + 0x6acf, 0x6acd, 0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, + 0x7020, 0x7016, 0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, + 0x7024, 0x701c, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, + 0x72a6, 0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, + /* 0x66 */ + 0x74b7, 0x74c3, 0x7516, 0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, + 0x791d, 0x791b, 0x7921, 0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, + 0x7a68, 0x7c33, 0x7c3c, 0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, + 0x7e76, 0x7e75, 0x7e78, 0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, + 0x7e74, 0x7e68, 0x7f4b, 0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, + 0x7ffe, 0x8078, 0x81d7, 0x81d5, 0x820b, 0x8264, 0x8261, 0x8263, + 0x85eb, 0x85f1, 0x85ed, 0x85d9, 0x85e1, 0x85e8, 0x85da, 0x85d7, + 0x85ec, 0x85f2, 0x85f8, 0x85d8, 0x85df, 0x85e3, 0x85dc, 0x85d1, + 0x85f0, 0x85e6, 0x85ef, 0x85de, 0x85e2, 0x8800, 0x87fa, 0x8803, + 0x87f6, 0x87f7, 0x8809, 0x880c, 0x880b, 0x8806, 0x87fc, 0x8808, + 0x87ff, 0x880a, 0x8802, 0x8962, 0x895a, 0x895b, 0x8957, 0x8961, + 0x895c, 0x8958, 0x895d, 0x8959, 0x8988, 0x89b7, + /* 0x67 */ + 0x89b6, 0x89f6, 0x8b50, 0x8b48, 0x8b4a, 0x8b40, 0x8b53, 0x8b56, + 0x8b54, 0x8b4b, 0x8b55, 0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, + 0x8c77, 0x8c76, 0x8c9a, 0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, + 0x8dad, 0x8dab, 0x8e6d, 0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, + 0x8ec2, 0x8f52, 0x8f51, 0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, + 0x913f, 0x91b0, 0x91ad, 0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, + 0x93d0, 0x93f9, 0x93ec, 0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, + 0x93d4, 0x93ee, 0x93e3, 0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, + 0x93a5, 0x93e7, 0x957d, 0x95da, 0x95db, 0x96e1, 0x9729, 0x972b, + 0x972c, 0x9728, 0x9726, 0x97b3, 0x97b7, 0x97b6, 0x97dd, 0x97de, + 0x97df, 0x985c, 0x9859, 0x985d, 0x9857, 0x98bf, 0x98bd, 0x98bb, + 0x98be, 0x9948, 0x9947, 0x9943, 0x99a6, 0x99a7, + /* 0x68 */ + 0x9a1a, 0x9a15, 0x9a25, 0x9a1d, 0x9a24, 0x9a1b, 0x9a22, 0x9a20, + 0x9a27, 0x9a23, 0x9a1e, 0x9a1c, 0x9a14, 0x9ac2, 0x9b0b, 0x9b0a, + 0x9b0e, 0x9b0c, 0x9b37, 0x9bea, 0x9beb, 0x9be0, 0x9bde, 0x9be4, + 0x9be6, 0x9be2, 0x9bf0, 0x9bd4, 0x9bd7, 0x9bec, 0x9bdc, 0x9bd9, + 0x9be5, 0x9bd5, 0x9be1, 0x9bda, 0x9d77, 0x9d81, 0x9d8a, 0x9d84, + 0x9d88, 0x9d71, 0x9d80, 0x9d78, 0x9d86, 0x9d8b, 0x9d8c, 0x9d7d, + 0x9d6b, 0x9d74, 0x9d75, 0x9d70, 0x9d69, 0x9d85, 0x9d73, 0x9d7b, + 0x9d82, 0x9d6f, 0x9d79, 0x9d7f, 0x9d87, 0x9d68, 0x9e94, 0x9e91, + 0x9ec0, 0x9efc, 0x9f2d, 0x9f40, 0x9f41, 0x9f4d, 0x9f56, 0x9f57, + 0x9f58, 0x5337, 0x56b2, 0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, + 0x5dc7, 0x5eee, 0x5eef, 0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, + 0x6515, 0x6513, 0x65df, 0x66e8, 0x66e3, 0x66e4, + /* 0x69 */ + 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9, 0x6af1, 0x6aee, 0x6aef, + 0x703c, 0x7035, 0x702f, 0x7037, 0x7034, 0x7031, 0x7042, 0x7038, + 0x703f, 0x703a, 0x7039, 0x702a, 0x7040, 0x703b, 0x7033, 0x7041, + 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba, 0x76ab, 0x76aa, + 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd, 0x77f2, 0x7925, + 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x79b2, 0x7a6e, 0x7a6c, + 0x7a6d, 0x7af7, 0x7c49, 0x7c48, 0x7c4a, 0x7c47, 0x7c45, 0x7cee, + 0x7e7b, 0x7e7e, 0x7e81, 0x7e80, 0x7fba, 0x7fff, 0x8079, 0x81db, + 0x81d9, 0x8268, 0x8269, 0x8622, 0x85ff, 0x8601, 0x85fe, 0x861b, + 0x8600, 0x85f6, 0x8604, 0x8609, 0x8605, 0x860c, 0x85fd, 0x8819, + 0x8810, 0x8811, 0x8817, 0x8813, 0x8816, 0x8963, 0x8966, 0x89b9, + 0x89f7, 0x8b60, 0x8b6a, 0x8b5d, 0x8b68, 0x8b63, + /* 0x6a */ + 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86, 0x8e88, 0x8e84, 0x8f59, + 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a, 0x908d, 0x9143, 0x9141, + 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b, 0x9413, 0x93fb, 0x9420, + 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410, 0x9428, 0x9419, 0x940d, + 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e, 0x9416, 0x9412, 0x93fa, + 0x9409, 0x93f8, 0x943c, 0x940a, 0x93ff, 0x93fc, 0x940c, 0x93f6, + 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df, 0x972e, 0x972f, 0x97b9, + 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862, 0x9863, 0x985f, 0x98c1, + 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c, 0x994b, 0x9953, 0x9a32, + 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36, 0x9a29, 0x9a2e, 0x9a38, + 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10, 0x9b12, 0x9b11, 0x9c0b, + 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8, 0x9c40, + /* 0x6b */ + 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f, 0x9d99, + 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 0x9da0, 0x9d94, + 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a, 0x9da2, 0x9da8, 0x9d9e, + 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6, 0x9da7, 0x9e99, 0x9e9b, + 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6, 0x9f30, 0x9f2e, 0x9f5b, + 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91, 0x513a, 0x5139, 0x5298, + 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48, 0x5b47, 0x5dcb, 0x5dcf, + 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc, 0x6b03, 0x6af8, 0x6b00, + 0x7043, 0x7044, 0x704a, 0x7048, 0x7049, 0x7045, 0x7046, 0x721d, + 0x721a, 0x7219, 0x737e, 0x7517, 0x766a, 0x77d0, 0x792d, 0x7931, + 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a, 0x7e87, 0x7e88, 0x7e8b, + 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030, 0x81dd, + /* 0x6c */ + 0x8618, 0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619, 0x8627, + 0x862e, 0x8621, 0x8620, 0x8629, 0x861e, 0x8625, 0x8829, 0x881d, + 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a, 0x896d, 0x8969, + 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45, 0x8b7a, 0x8b7b, + 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e, 0x8f5b, 0x8f5d, + 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b, 0x9436, 0x9429, + 0x943d, 0x9430, 0x9439, 0x942a, 0x9437, 0x942c, 0x9440, 0x9431, + 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a, 0x97bf, 0x97e1, 0x9864, + 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956, 0x9a39, 0x9a3d, 0x9a46, + 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x9a3f, 0x9acd, 0x9b15, 0x9b17, + 0x9b18, 0x9b16, 0x9b3a, 0x9b52, 0x9c2b, 0x9c1d, 0x9c1c, 0x9c2c, + 0x9c23, 0x9c28, 0x9c29, 0x9c24, 0x9c21, 0x9db7, + /* 0x6d */ + 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca, 0x9dcf, 0x9dbe, 0x9dc5, + 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9, 0x9dba, 0x9dac, 0x9dc8, + 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd, 0x9db2, 0x9e7a, 0x9e9c, + 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18, 0x9f1a, 0x9f31, 0x9f4e, + 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6, 0x56c5, 0x56cb, 0x5971, + 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2, 0x6521, 0x6520, 0x6526, + 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d, 0x7055, 0x7056, 0x7057, + 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f, 0x74d8, 0x74d5, 0x74d9, + 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4, 0x7a70, 0x7a71, 0x7c57, + 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a, 0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, + 0x7f87, 0x81de, 0x826b, 0x8634, 0x8635, 0x8633, 0x862c, 0x8632, + 0x8636, 0x882c, 0x8828, 0x8826, 0x882a, 0x8825, + /* 0x6e */ + 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84, 0x8b82, 0x8b86, + 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a, 0x8e92, 0x8e90, + 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c, 0x9450, 0x944a, + 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449, 0x9446, 0x973f, + 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b, 0x9a4e, 0x9a53, + 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 0x9a49, 0x9a52, 0x9a50, + 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b, 0x9b56, 0x9b55, 0x9c46, 0x9c48, + 0x9c3f, 0x9c44, 0x9c39, 0x9c33, 0x9c41, 0x9c3c, 0x9c37, 0x9c34, + 0x9c32, 0x9c3d, 0x9c36, 0x9ddb, 0x9dd2, 0x9dde, 0x9dda, 0x9dcb, + 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf, 0x9de9, 0x9dd9, 0x9dd8, 0x9dd6, + 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6, 0x9ef0, 0x9f35, 0x9f33, 0x9f32, + 0x9f42, 0x9f6b, 0x9f95, 0x9fa2, 0x513d, 0x5299, + /* 0x6f */ + 0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f, 0x5f4f, 0x6201, + 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb, 0x6b11, 0x6b12, + 0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382, 0x7381, 0x7383, + 0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c, 0x863a, 0x8640, + 0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830, 0x8832, 0x882e, + 0x8833, 0x8976, 0x8974, 0x8973, 0x89fe, 0x8b8c, 0x8b8e, 0x8b8b, + 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64, 0x8f63, 0x91bc, 0x9462, + 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4, 0x97c5, 0x9800, 0x9a56, + 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52, 0x9c58, 0x9c50, 0x9c4a, + 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c, 0x9c4e, 0x9dfb, 0x9df7, + 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4, 0x9df6, 0x9de1, 0x9dee, + 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec, 0x9df4, + /* 0x70 */ + 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3, 0x9f06, + 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x9f71, 0x9f70, + 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e, 0x5c6d, 0x652d, 0x66ed, + 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d, 0x7060, 0x7223, 0x74db, + 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6, 0x7c6a, 0x7e97, 0x7f89, + 0x826d, 0x8643, 0x8838, 0x8837, 0x8835, 0x884b, 0x8b94, 0x8b95, + 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be, 0x91bd, 0x91c2, 0x946b, + 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743, 0x9747, 0x97c7, 0x97e5, + 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67, 0x9c66, 0x9c62, 0x9c5e, + 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03, 0x9e06, 0x9e05, 0x9e00, + 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04, 0x9ea0, 0x9f1e, 0x9f46, + 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e, 0x65b8, + /* 0x71 */ + 0x6b18, 0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa, 0x77d8, + 0x77d9, 0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a, 0x7e98, 0x7e9b, + 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648, 0x8979, 0x897a, + 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5, 0x8ea4, 0x8ea3, + 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749, 0x9872, 0x995f, + 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10, 0x9e0f, 0x9e12, + 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78, 0x9f7b, 0x9f7a, + 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2, 0x8ea6, 0x91c3, + 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9b2e, 0x9c74, 0x9c73, + 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 0x9fa4, 0x7068, + 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d, 0x883f, 0x8b9e, 0x8c9c, + 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874, 0x98cc, + /* 0x72 */ + 0x9961, 0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15, 0x9e17, + 0x9f48, 0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482, 0x9480, + 0x9481, 0x9a69, 0x9a68, 0x9e19, 0x864b, 0x8b9f, 0x9483, 0x9c79, + 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d, 0x7069, 0x706a, 0x7229, + 0x9ea4, 0x9f7e, 0x9f49, 0x9f98, +}; + +static int +cns11643_2_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x72)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + unsigned short wc = 0xfffd; + { + if (i < 7650) + wc = cns11643_2_2uni_page21[i]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + diff --git a/jni/parted/libiconv/lib/cns11643_3.h b/jni/parted/libiconv/lib/cns11643_3.h new file mode 100755 index 0000000..79d9dbd --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_3.h @@ -0,0 +1,973 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 3 + */ + +static const unsigned short cns11643_3_2uni_page21[6148] = { + /* 0x21 */ + 0x1a28, 0x1a36, 0x1a3f, 0x1a85, 0x1a05, 0x1a04, 0x1d82, 0x1d96, + 0x1f38, 0x1f69, 0x1fb6, 0x1a2a, 0x1a87, 0x1a49, 0x1de2, 0x1a46, + 0x1a8f, 0x1abc, 0x1abe, 0x1d66, 0x1de3, 0x1e04, 0x1e9c, 0x1f44, + 0x2502, 0x250a, 0x2780, 0x29db, 0x2a7a, 0x2a7f, 0x2af4, 0x2b50, + 0x2b51, 0x2b61, 0x621d, 0x6d0b, 0x1a63, 0x1a62, 0x1aa3, 0x1d85, + 0x1ac5, 0x1acf, 0x1ace, 0x1acc, 0x1d84, 0x1d86, 0x8517, 0x00c5, + 0x1de4, 0x1e05, 0x1e9e, 0x1e9d, 0x1efd, 0x1f00, 0x1f3a, 0x0139, + 0x1f46, 0x1f5d, 0x1f86, 0x1fb7, 0x0155, 0x1fcc, 0x015b, 0x1fce, + 0x2321, 0x03a2, 0x2a00, 0x2b0c, 0x2e37, 0x2e38, 0x3134, 0x3135, + 0x31e0, 0x0a26, 0x3f8d, 0x1a97, 0x1ae0, 0x0032, 0x6ea9, 0x1ae7, + 0x0033, 0x1ae6, 0x0034, 0x02a2, 0x0031, 0x00b0, 0x22d8, 0x1d8b, + 0x1d8c, 0x1d99, 0x1de5, 0x8550, 0x1e0b, 0x00dc, + /* 0x22 */ + 0x021e, 0x1f04, 0x1f03, 0x1f07, 0x852a, 0x1f1e, 0x1f5f, 0x1f6d, + 0x1f89, 0x1fba, 0x1fd0, 0x0165, 0x1ff6, 0x1ff7, 0x1ff9, 0x0164, + 0x1ff4, 0x021d, 0x0226, 0x2324, 0x2504, 0x2518, 0x2532, 0x2530, + 0x2534, 0x028e, 0x2575, 0x034a, 0x2782, 0x27f9, 0x2814, 0x038b, + 0x03a6, 0x03a4, 0x03a5, 0x03a7, 0x042f, 0x0432, 0x2a81, 0x2a83, + 0x2b0d, 0x2b52, 0x04d4, 0x2bca, 0x2bc7, 0x2e39, 0x05c5, 0x2e4f, + 0x31e7, 0x332f, 0x377a, 0x3839, 0x08ba, 0x08b9, 0x3837, 0x3844, + 0x3845, 0x3f8c, 0x4192, 0x4276, 0x5c93, 0x5c92, 0x14b3, 0x15ba, + 0x1a21, 0x1a20, 0x1a22, 0x1a68, 0x1a89, 0x1a98, 0x1af9, 0x1aef, + 0x003b, 0x003c, 0x1af8, 0x1b06, 0x1b03, 0x1afc, 0x1aee, 0x1b16, + 0x0039, 0x1b28, 0x1b1c, 0x1b07, 0x1b1a, 0x1afa, 0x1b17, 0x1d4a, + 0x00b2, 0x1d72, 0x8515, 0x1db4, 0x1db3, 0x1db2, + /* 0x23 */ + 0x00c7, 0x1de8, 0x002b, 0x1e14, 0x1e0f, 0x1e15, 0x1e18, 0x1ea8, + 0x852c, 0x1f4b, 0x1f4f, 0x013b, 0x1f50, 0x0144, 0x1f8b, 0x0142, + 0x1fbe, 0x015c, 0x1fd2, 0x2016, 0x1fff, 0x0167, 0x2000, 0x0166, + 0x2005, 0x2013, 0x2015, 0x853b, 0x021f, 0x22e3, 0x2335, 0x2336, + 0x2331, 0x2332, 0x24ee, 0x2505, 0x1a54, 0x028f, 0x2536, 0x0290, + 0x02a8, 0x02a4, 0x257a, 0x02a3, 0x2586, 0x033d, 0x034c, 0x2786, + 0x2b53, 0x2818, 0x038c, 0x283d, 0x2878, 0x03a8, 0x03ad, 0x03af, + 0x7746, 0x2880, 0x0429, 0x2a08, 0x0436, 0x0471, 0x0470, 0x046f, + 0x2af5, 0x2b0e, 0x04a9, 0x04aa, 0x04fb, 0x2bd3, 0x2bda, 0x04fc, + 0x2bdb, 0x05ae, 0x2e0f, 0x2e5d, 0x2e5f, 0x2e67, 0x2e57, 0x6b50, + 0x06c3, 0x31eb, 0x31ea, 0x0730, 0x3337, 0x0741, 0x3332, 0x3336, + 0x3722, 0x37ce, 0x088c, 0x3858, 0x3851, 0x3877, + /* 0x24 */ + 0x383c, 0x08bb, 0x385a, 0x7c86, 0x3853, 0x3c6f, 0x3c72, 0x3c6e, + 0x8535, 0x09a1, 0x3c73, 0x3eb1, 0x3eb2, 0x0aa8, 0x3f8f, 0x0aaa, + 0x0aab, 0x0c96, 0x453c, 0x0dc2, 0x4c8d, 0x4c8e, 0x1093, 0x4e7b, + 0x1094, 0x5971, 0x5bb9, 0x5c96, 0x5c9a, 0x15bb, 0x1a24, 0x1a71, + 0x851b, 0x1a9c, 0x1b45, 0x1b4a, 0x1b39, 0x1b37, 0x0043, 0x1b32, + 0x1b42, 0x0042, 0x1b44, 0x1b4b, 0x0044, 0x1b40, 0x1b35, 0x1b31, + 0x1d51, 0x850e, 0x1d50, 0x1d4e, 0x00b3, 0x00b7, 0x1d9d, 0x00c8, + 0x1db5, 0x1db8, 0x1dec, 0x1e23, 0x1e27, 0x1e26, 0x1e1f, 0x1e2b, + 0x1e20, 0x1eb4, 0x1eb3, 0x0118, 0x1f25, 0x1f3b, 0x1f74, 0x0147, + 0x0146, 0x0145, 0x016b, 0x0169, 0x204d, 0x0172, 0x0171, 0x203a, + 0x016c, 0x016f, 0x2044, 0x204c, 0x2023, 0x201a, 0x2032, 0x204b, + 0x2021, 0x0173, 0x2034, 0x2049, 0x2050, 0x2022, + /* 0x25 */ + 0x203f, 0x2051, 0x205a, 0x202f, 0x0176, 0x22e9, 0x22f2, 0x22f3, + 0x22ef, 0x22ed, 0x22ec, 0x22e6, 0x2348, 0x0227, 0x2344, 0x233f, + 0x233c, 0x2353, 0x2356, 0x0230, 0x235f, 0x2343, 0x2358, 0x2357, + 0x0229, 0x022a, 0x022f, 0x2346, 0x022c, 0x233d, 0x022d, 0x2342, + 0x2354, 0x2355, 0x24f1, 0x24f2, 0x24f0, 0x250b, 0x6aa6, 0x22f1, + 0x253d, 0x0293, 0x2594, 0x258c, 0x02ad, 0x259c, 0x02ac, 0x02ab, + 0x259f, 0x02a9, 0x259b, 0x02ae, 0x2589, 0x259a, 0x02aa, 0x3188, + 0x034e, 0x278d, 0x0350, 0x27fe, 0x27ff, 0x27fd, 0x282b, 0x03b2, + 0x2884, 0x288e, 0x289c, 0x03b5, 0x03b6, 0x2885, 0x29f5, 0x2a09, + 0x0439, 0x043b, 0x2a0b, 0x0472, 0x2a92, 0x2a90, 0x2b03, 0x04ac, + 0x2b1e, 0x2b63, 0x0508, 0x2be7, 0x2bfe, 0x2be6, 0x2bdc, 0x2bce, + 0x0503, 0x2bfc, 0x2bdf, 0x2bec, 0x2bf6, 0x79d7, + /* 0x26 */ + 0x2bf2, 0x2bf0, 0x2bf9, 0x050b, 0x2e13, 0x05af, 0x85b2, 0x2e3b, + 0x2e3c, 0x2e82, 0x05ce, 0x05cb, 0x05cc, 0x2e78, 0x2e8b, 0x05cd, + 0x2e9e, 0x2ea5, 0x2e9b, 0x2e9c, 0x2e99, 0x2e8d, 0x2e85, 0x2e9d, + 0x2e75, 0x0680, 0x06af, 0x06d3, 0x31f6, 0x06d5, 0x06d4, 0x06d7, + 0x32f5, 0x335b, 0x0742, 0x3354, 0x3352, 0x0744, 0x3358, 0x3344, + 0x334a, 0x3361, 0x08c6, 0x387f, 0x3891, 0x389e, 0x08c0, 0x386e, + 0x387c, 0x389f, 0x3875, 0x08be, 0x3856, 0x38a2, 0x3879, 0x08ca, + 0x38a1, 0x08c4, 0x38aa, 0x38a0, 0x08c2, 0x3c79, 0x3c77, 0x3c7e, + 0x09a4, 0x3c75, 0x3c7b, 0x3e64, 0x0a29, 0x3ebb, 0x3ebc, 0x3ec7, + 0x3eb9, 0x3ebe, 0x3eb6, 0x0a60, 0x0a5e, 0x3f98, 0x0aad, 0x0aae, + 0x0aac, 0x0b57, 0x4193, 0x4280, 0x0bdd, 0x4283, 0x42c0, 0x42c1, + 0x0c0e, 0x0c97, 0x43f4, 0x43f5, 0x0d27, 0x46cc, + /* 0x27 */ + 0x46cd, 0x48fa, 0x4c9f, 0x4c91, 0x4c97, 0x4c94, 0x1095, 0x4e86, + 0x4e8c, 0x868f, 0x4e95, 0x1098, 0x526c, 0x119d, 0x5bb5, 0x5bbe, + 0x5bc7, 0x148a, 0x5bc1, 0x5ca9, 0x5ca4, 0x14b5, 0x14b6, 0x14b7, + 0x5ca8, 0x6227, 0x6226, 0x622b, 0x6233, 0x6234, 0x6229, 0x1a3d, + 0x0028, 0x1a9d, 0x1b93, 0x1b8a, 0x004d, 0x0049, 0x1b6d, 0x1b8e, + 0x1ba0, 0x1ba2, 0x1ba1, 0x1b9f, 0x1ba3, 0x6f09, 0x1b72, 0x0051, + 0x1b8c, 0x1d56, 0x850f, 0x8511, 0x1d90, 0x00cb, 0x00ca, 0x00cc, + 0x1ded, 0x1dfe, 0x1e2f, 0x71ec, 0x1e3c, 0x1e34, 0x1e39, 0x1eb9, + 0x1eb5, 0x1ebf, 0x1f55, 0x013d, 0x1f76, 0x1f7a, 0x1f93, 0x0148, + 0x1fc1, 0x1fc2, 0x1fd5, 0x2085, 0x0178, 0x205f, 0x2093, 0x2089, + 0x2079, 0x6afe, 0x208f, 0x2069, 0x206d, 0x017a, 0x2094, 0x206a, + 0x208a, 0x0177, 0x22fd, 0x22fb, 0x22f8, 0x0221, + /* 0x28 */ + 0x22fc, 0x22f6, 0x2365, 0x2381, 0x2363, 0x2367, 0x0231, 0x236e, + 0x2378, 0x237f, 0x0233, 0x0234, 0x24f3, 0x254b, 0x254c, 0x02c1, + 0x02b0, 0x02b4, 0x25ad, 0x02b8, 0x25c4, 0x02bc, 0x25c2, 0x25b0, + 0x02bf, 0x02b5, 0x02b1, 0x02bd, 0x25bf, 0x02bb, 0x25c9, 0x25b8, + 0x25ac, 0x02b3, 0x02b6, 0x02ba, 0x25b7, 0x25d7, 0x02b7, 0x2760, + 0x0340, 0x2796, 0x279e, 0x2794, 0x279f, 0x279d, 0x0352, 0x2800, + 0x2819, 0x0390, 0x0391, 0x2849, 0x284a, 0x03be, 0x28bb, 0x28c1, + 0x03c0, 0x03c1, 0x03b9, 0x28b9, 0x289e, 0x28b4, 0x28ba, 0x29f6, + 0x2a13, 0x2a12, 0x2a77, 0x0479, 0x2a98, 0x047b, 0x2a99, 0x2a9d, + 0x2af8, 0x04a0, 0x2af9, 0x0029, 0x2b06, 0x2b21, 0x04ae, 0x2b25, + 0x2b55, 0x04cd, 0x04cb, 0x04d9, 0x2b84, 0x2b83, 0x2c30, 0x2c07, + 0x050c, 0x2c36, 0x0501, 0x0505, 0x0502, 0x2be9, + /* 0x29 */ + 0x2c3d, 0x2c08, 0x0513, 0x0511, 0x2eba, 0x2eb2, 0x05e4, 0x2eb7, + 0x2ee4, 0x2ea7, 0x05da, 0x05d5, 0x05d3, 0x2ed5, 0x2ee1, 0x2edd, + 0x2ea6, 0x2ec1, 0x2ec5, 0x2ec0, 0x2edf, 0x2ee0, 0x2ede, 0x05d6, + 0x3189, 0x06b4, 0x31a6, 0x31ba, 0x06d9, 0x31ff, 0x06d8, 0x3217, + 0x3218, 0x3201, 0x31fe, 0x0733, 0x330c, 0x0748, 0x336b, 0x3396, + 0x3382, 0x338a, 0x0747, 0x33a3, 0x074b, 0x33a2, 0x338f, 0x074a, + 0x33f9, 0x3380, 0x3726, 0x3727, 0x3768, 0x3769, 0x085a, 0x3781, + 0x37b4, 0x37d1, 0x088e, 0x08b4, 0x381c, 0x08cd, 0x08cc, 0x08cf, + 0x08cb, 0x08ce, 0x3897, 0x386c, 0x38df, 0x08d2, 0x38ea, 0x08d1, + 0x38e4, 0x38d8, 0x38b2, 0x38ce, 0x38c8, 0x09a6, 0x3c8b, 0x3c88, + 0x3c90, 0x3c8f, 0x09aa, 0x3c87, 0x3c89, 0x3c8d, 0x3c81, 0x09a8, + 0x3c8c, 0x0a13, 0x0a1a, 0x3e40, 0x0a1d, 0x0a1e, + /* 0x2a */ + 0x3e65, 0x3e66, 0x3e68, 0x0a65, 0x0a66, 0x3ecd, 0x3ed3, 0x3edb, + 0x0a64, 0x3ecf, 0x3fa7, 0x3fa3, 0x3f9e, 0x0ab0, 0x3faf, 0x0ab3, + 0x0ab5, 0x3faa, 0x3f9c, 0x0b19, 0x4142, 0x4144, 0x413b, 0x4141, + 0x783f, 0x419b, 0x419e, 0x0b75, 0x45c4, 0x45c3, 0x45c6, 0x0d2b, + 0x0d2c, 0x45c7, 0x0d2d, 0x45ca, 0x802e, 0x0dc3, 0x46cf, 0x4876, + 0x4874, 0x48ff, 0x48fc, 0x00ba, 0x0f50, 0x4b59, 0x4ca8, 0x0fd3, + 0x0fd0, 0x4cb0, 0x0fdc, 0x4cb3, 0x0fd2, 0x4ca4, 0x4cb6, 0x4ca7, + 0x4cac, 0x0fdb, 0x4ca6, 0x1f67, 0x4e0e, 0x4ec4, 0x4f3e, 0x4e9c, + 0x10a5, 0x109f, 0x109a, 0x109c, 0x10a2, 0x4eaa, 0x109b, 0x4ec9, + 0x10a3, 0x109d, 0x4ea6, 0x4eb2, 0x1188, 0x121a, 0x148d, 0x5bcc, + 0x5bd9, 0x5bca, 0x5bd8, 0x5bcf, 0x5cb7, 0x14b8, 0x5cad, 0x5cb9, + 0x6237, 0x15c3, 0x6241, 0x623e, 0x62b6, 0x6351, + /* 0x2b */ + 0x6363, 0x1a57, 0x1a79, 0x1ab2, 0x1ab0, 0x1aaf, 0x1ab1, 0x1bd2, + 0x1bd5, 0x005d, 0x1bbe, 0x1bb8, 0x1bb0, 0x1bb1, 0x1bc8, 0x005a, + 0x0057, 0x1bc6, 0x1bcc, 0x1be5, 0x1be3, 0x1bb4, 0x1d6a, 0x00b8, + 0x1d9f, 0x00c2, 0x1dc1, 0x00cf, 0x1dc2, 0x1dc3, 0x1e45, 0x1e48, + 0x00e7, 0x00e9, 0x1e4f, 0x1052, 0x00e8, 0x1ec5, 0x1eca, 0x1ec4, + 0x1f27, 0x1f58, 0x1f7d, 0x014a, 0x1fdd, 0x1fdc, 0x1fda, 0x1fd9, + 0x20b9, 0x0180, 0x20d0, 0x20b4, 0x20ca, 0x0187, 0x20a3, 0x20da, + 0x20a4, 0x0184, 0x20b2, 0x209e, 0x209f, 0x20b5, 0x0182, 0x0181, + 0x20cd, 0x0183, 0x20cc, 0x0222, 0x2300, 0x23ac, 0x2391, 0x238e, + 0x238d, 0x2392, 0x23a1, 0x2390, 0x23a6, 0x23a8, 0x023b, 0x239c, + 0x2396, 0x23a7, 0x023a, 0x0238, 0x0239, 0x0236, 0x24f5, 0x0285, + 0x2509, 0x2508, 0x0854, 0x2552, 0x029a, 0x02c4, + /* 0x2c */ + 0x25df, 0x02c5, 0x25eb, 0x25ef, 0x25f0, 0x25d5, 0x260d, 0x2604, + 0x25f9, 0x2602, 0x25f8, 0x25e2, 0x25d9, 0x25e7, 0x276a, 0x0354, + 0x0355, 0x27ab, 0x0356, 0x281b, 0x282f, 0x0396, 0x323c, 0x0395, + 0x0394, 0x03c4, 0x28d1, 0x28dc, 0x28e6, 0x28e1, 0x28cd, 0x857a, + 0x28e2, 0x28dd, 0x28e5, 0x29fb, 0x29fa, 0x2a1e, 0x0444, 0x2aa1, + 0x047d, 0x047e, 0x2afc, 0x2afb, 0x2b2f, 0x04b2, 0x04b6, 0x2b66, + 0x8599, 0x04dc, 0x04df, 0x2c5c, 0x0528, 0x2c4e, 0x2c51, 0x0519, + 0x0510, 0x2c23, 0x2c31, 0x2c7c, 0x2c52, 0x052c, 0x2c60, 0x2c4a, + 0x2c61, 0x051b, 0x2e18, 0x05c2, 0x05ef, 0x05e3, 0x05e5, 0x05ea, + 0x05e6, 0x05ee, 0x2f1f, 0x2f17, 0x2eea, 0x2f21, 0x2f04, 0x2f05, + 0x05e8, 0x3131, 0x3144, 0x3140, 0x0685, 0x3142, 0x31be, 0x06e0, + 0x3229, 0x321b, 0x06dd, 0x3223, 0x322c, 0x321a, + /* 0x2d */ + 0x3230, 0x323b, 0x321e, 0x3237, 0x3238, 0x06e1, 0x330e, 0x0751, + 0x0755, 0x33e8, 0x33d6, 0x0752, 0x33c7, 0x33bc, 0x3452, 0x33bf, + 0x33d5, 0x33fe, 0x4f63, 0x33fb, 0x85df, 0x33b1, 0x3401, 0x3405, + 0x3400, 0x33d7, 0x0c9e, 0x372a, 0x376b, 0x0852, 0x085e, 0x0860, + 0x085f, 0x37e1, 0x0892, 0x08d6, 0x3923, 0x38ff, 0x3914, 0x3905, + 0x3913, 0x3906, 0x3921, 0x08de, 0x3915, 0x38af, 0x38f4, 0x3902, + 0x3945, 0x85fe, 0x3926, 0x08d9, 0x3944, 0x08dd, 0x3924, 0x3ca5, + 0x09ac, 0x3ca3, 0x09b0, 0x3ca2, 0x3cbb, 0x3ca0, 0x3caa, 0x09af, + 0x09ae, 0x3ca8, 0x3cb6, 0x3cb2, 0x3ca7, 0x09ad, 0x09ab, 0x3cb9, + 0x3e2e, 0x0a16, 0x3e3c, 0x0a30, 0x3e6d, 0x0a33, 0x0a31, 0x3ee7, + 0x3eed, 0x0a6e, 0x3eec, 0x3ee5, 0x3ee2, 0x0ab1, 0x3fc4, 0x3fbd, + 0x3fcf, 0x3fc9, 0x3fc1, 0x3fd0, 0x0ab7, 0x3fce, + /* 0x2e */ + 0x40ed, 0x40eb, 0x0b1a, 0x40ef, 0x4149, 0x4150, 0x4146, 0x414a, + 0x0b59, 0x414d, 0x41a6, 0x0b7a, 0x0b78, 0x0b7b, 0x41a8, 0x0bde, + 0x0bec, 0x42c7, 0x42ff, 0x0c1e, 0x42fd, 0x43e6, 0x440a, 0x0c9b, + 0x4404, 0x440b, 0x4407, 0x0c9d, 0x4415, 0x4408, 0x0cfd, 0x45d3, + 0x45d4, 0x45d0, 0x45d7, 0x467c, 0x0d94, 0x0d93, 0x467d, 0x4683, + 0x4682, 0x0dc6, 0x46d4, 0x46d5, 0x46d3, 0x46d0, 0x46d2, 0x46fe, + 0x46fc, 0x4877, 0x487c, 0x487b, 0x0eb8, 0x866a, 0x0eb7, 0x0eb9, + 0x0f53, 0x7f33, 0x0f52, 0x0f51, 0x4b8f, 0x4cd3, 0x0fe3, 0x4ccb, + 0x4cd2, 0x0fe2, 0x4d09, 0x4ce2, 0x4cdf, 0x4cc6, 0x1063, 0x4e24, + 0x4ef7, 0x4ed8, 0x4edd, 0x10aa, 0x10a6, 0x4ef8, 0x4efc, 0x10a8, + 0x10a9, 0x4ee9, 0x10ab, 0x4eee, 0x10ac, 0x4ed0, 0x4f0e, 0x4ee2, + 0x4f0b, 0x4efd, 0x1d79, 0x5276, 0x119e, 0x5278, + /* 0x2f */ + 0x119f, 0x11a0, 0x5275, 0x527d, 0x120f, 0x5442, 0x5466, 0x121c, + 0x558c, 0x5605, 0x12ae, 0x5606, 0x12b0, 0x589f, 0x13d4, 0x5bf1, + 0x5be7, 0x5be9, 0x5bef, 0x5cc2, 0x5cbc, 0x14bb, 0x5cc6, 0x5cc0, + 0x14c1, 0x14c2, 0x5ccd, 0x5cc9, 0x14be, 0x5cc4, 0x14e5, 0x6181, + 0x15c6, 0x68ec, 0x1c32, 0x1bf9, 0x1c1d, 0x1bff, 0x1c04, 0x1bf0, + 0x1c03, 0x122e, 0x1c02, 0x1bfc, 0x1bf2, 0x1c24, 0x1c08, 0x1c36, + 0x1c2e, 0x0065, 0x1c10, 0x1c38, 0x1c39, 0x1bfd, 0x1c56, 0x1bfb, + 0x1da3, 0x1da6, 0x1da1, 0x00d1, 0x00d0, 0x1dc7, 0x1dc9, 0x1e60, + 0x1e64, 0x1e59, 0x1e65, 0x1e67, 0x1e57, 0x1e63, 0x00ee, 0x1e53, + 0x00ef, 0x1ecf, 0x011e, 0x1ece, 0x1ed0, 0x1ed1, 0x1ecc, 0x014b, + 0x014d, 0x0156, 0x210d, 0x20f4, 0x0192, 0x2113, 0x20ef, 0x20f5, + 0x20f9, 0x2102, 0x2100, 0x0193, 0x0190, 0x2118, + /* 0x30 */ + 0x20f0, 0x20f6, 0x8541, 0x0197, 0x2119, 0x0223, 0x2305, 0x23c9, + 0x023f, 0x23b7, 0x23cd, 0x0243, 0x0242, 0x0244, 0x23be, 0x23bb, + 0x0245, 0x23db, 0x23c8, 0x23c4, 0x23c5, 0x23d1, 0x23ca, 0x23c0, + 0x02d9, 0x02de, 0x2621, 0x262a, 0x02cf, 0x261d, 0x02cd, 0x260b, + 0x02dd, 0x02ce, 0x02d3, 0x02d6, 0x2622, 0x02dc, 0x02d1, 0x2624, + 0x02d0, 0x2614, 0x2631, 0x02d5, 0x262f, 0x261a, 0x2612, 0x02d4, + 0x02db, 0x2626, 0x762e, 0x0343, 0x27bc, 0x27bb, 0x27b7, 0x2805, + 0x2806, 0x2852, 0x2853, 0x03cd, 0x03d1, 0x28fa, 0x28eb, 0x03ca, + 0x28f3, 0x28f5, 0x28e9, 0x28ef, 0x03d4, 0x2a2a, 0x2a30, 0x2a2e, + 0x2a2c, 0x2a2f, 0x2aaf, 0x2aa9, 0x0486, 0x2afd, 0x2b32, 0x2b8e, + 0x2b93, 0x2b8f, 0x2c4f, 0x2c99, 0x0533, 0x2c7e, 0x0537, 0x2c74, + 0x2c4b, 0x2c73, 0x2c75, 0x052a, 0x051f, 0x2c56, + /* 0x31 */ + 0x2ca9, 0x2c8b, 0x2ca6, 0x0539, 0x2c93, 0x2cae, 0x2c9e, 0x2ca7, + 0x2e45, 0x05f2, 0x05f8, 0x2f2e, 0x05f7, 0x2f52, 0x2f30, 0x2f5b, + 0x05f4, 0x2f19, 0x2f1b, 0x05f1, 0x2f31, 0x2f5d, 0x2f37, 0x2f35, + 0x2f53, 0x05f5, 0x2f5c, 0x2f3f, 0x314b, 0x0687, 0x0f69, 0x318b, + 0x06b6, 0x319a, 0x3250, 0x3246, 0x324e, 0x3240, 0x06e9, 0x324b, + 0x3248, 0x06eb, 0x3260, 0x3244, 0x324d, 0x0734, 0x3437, 0x3424, + 0x0762, 0x075c, 0x341b, 0x3436, 0x0760, 0x342c, 0x3419, 0x3456, + 0x3447, 0x343e, 0x341e, 0x85e1, 0x3415, 0x3422, 0x3427, 0x3459, + 0x3458, 0x3455, 0x3430, 0x3423, 0x372e, 0x372b, 0x3730, 0x376c, + 0x0861, 0x378b, 0x087f, 0x37e9, 0x37ea, 0x37e5, 0x396b, 0x08e5, + 0x08e6, 0x3973, 0x3957, 0x08e9, 0x08f3, 0x395d, 0x3956, 0x398f, + 0x395b, 0x391c, 0x399a, 0x399b, 0x3999, 0x08ee, + /* 0x32 */ + 0x3981, 0x3971, 0x08ed, 0x08ec, 0x3972, 0x395c, 0x3996, 0x3cc4, + 0x3cdb, 0x3ccc, 0x3cd0, 0x3ce3, 0x3cdf, 0x09b3, 0x3cd6, 0x3cee, + 0x3cd5, 0x09b5, 0x0a27, 0x0a35, 0x0a36, 0x3e7a, 0x0a71, 0x3ef5, + 0x3f02, 0x0ab8, 0x0ac2, 0x3fe2, 0x3fec, 0x3fd5, 0x3ff9, 0x3fdf, + 0x3fe6, 0x0ac8, 0x0ac0, 0x0ac1, 0x0ac4, 0x3fe4, 0x3fe1, 0x40f3, + 0x0b1f, 0x0b1c, 0x0b1d, 0x0b4d, 0x4156, 0x4155, 0x4158, 0x4157, + 0x415e, 0x41c3, 0x0b87, 0x0b82, 0x41b4, 0x0b7d, 0x41b1, 0x0bdf, + 0x0c00, 0x42cb, 0x42cc, 0x432a, 0x0c20, 0x4316, 0x430f, 0x0c22, + 0x0c24, 0x433f, 0x432b, 0x430e, 0x4324, 0x0c21, 0x4321, 0x4318, + 0x43dd, 0x0ca4, 0x0ca5, 0x4424, 0x4436, 0x0d01, 0x4558, 0x4559, + 0x0d03, 0x4562, 0x45da, 0x45d9, 0x0d37, 0x45e1, 0x45e5, 0x45e8, + 0x45db, 0x0d38, 0x45e2, 0x45f0, 0x0d99, 0x0d98, + /* 0x33 */ + 0x0d97, 0x0dc9, 0x46da, 0x46dd, 0x0dc7, 0x46db, 0x46dc, 0x0dd9, + 0x0ddb, 0x470d, 0x470b, 0x4714, 0x488e, 0x4886, 0x0e7b, 0x4887, + 0x4883, 0x488b, 0x0e7c, 0x0ebd, 0x0ebc, 0x0ec3, 0x4924, 0x0ec1, + 0x0ebf, 0x0ec4, 0x4925, 0x4b62, 0x4b93, 0x4b99, 0x4b97, 0x0f7e, + 0x0f7f, 0x4bc4, 0x4bc6, 0x4c0a, 0x0fb4, 0x0fb3, 0x4c40, 0x4c3c, + 0x4c3b, 0x4cf6, 0x4cff, 0x4cee, 0x4d04, 0x4d03, 0x4d07, 0x8683, + 0x0fe6, 0x4cf7, 0x1059, 0x105a, 0x4e2d, 0x1064, 0x4e27, 0x4e29, + 0x4f1f, 0x4f57, 0x10b4, 0x10b9, 0x10b7, 0x10b5, 0x4f21, 0x10c1, + 0x10b1, 0x4f18, 0x4f58, 0x10b3, 0x10ba, 0x118c, 0x118b, 0x118d, + 0x5284, 0x529f, 0x529b, 0x5289, 0x52a6, 0x5292, 0x528f, 0x52a0, + 0x544f, 0x5478, 0x547a, 0x546e, 0x547b, 0x5484, 0x5473, 0x1278, + 0x1277, 0x560d, 0x560b, 0x5619, 0x12b2, 0x13d6, + /* 0x34 */ + 0x5ad0, 0x1445, 0x1492, 0x1495, 0x5bf9, 0x5c09, 0x5c08, 0x14c6, + 0x5cde, 0x5d51, 0x14e7, 0x14e8, 0x5ddb, 0x5ddf, 0x5dde, 0x5dd6, + 0x5de0, 0x6185, 0x6260, 0x6259, 0x15cb, 0x6256, 0x15cd, 0x15f1, + 0x62bd, 0x1722, 0x0021, 0x1c42, 0x1c59, 0x006f, 0x1c44, 0x1c66, + 0x1c52, 0x1c54, 0x1c71, 0x1c50, 0x1c7b, 0x1c7c, 0x1c58, 0x0070, + 0x0064, 0x1c79, 0x1c6c, 0x1c78, 0x1da8, 0x1dd1, 0x1dcf, 0x1e68, + 0x1e76, 0x1ed4, 0x012d, 0x1fa0, 0x1fc4, 0x0158, 0x2158, 0x214c, + 0x2168, 0x01a6, 0x2149, 0x01a4, 0x019f, 0x215d, 0x2129, 0x73ae, + 0x2154, 0x2153, 0x01a3, 0x215a, 0x01a0, 0x213a, 0x213f, 0x212b, + 0x23ea, 0x024a, 0x23ef, 0x0247, 0x0248, 0x23dd, 0x23fe, 0x8555, + 0x23de, 0x23e6, 0x0249, 0x23e8, 0x23ff, 0x2403, 0x24f7, 0x34a6, + 0x251f, 0x029e, 0x255b, 0x255d, 0x255e, 0x7537, + /* 0x35 */ + 0x02e8, 0x262b, 0x02ec, 0x263b, 0x02ed, 0x02e6, 0x2661, 0x263a, + 0x266e, 0x264b, 0x266b, 0x02eb, 0x02e7, 0x2645, 0x264e, 0x2668, + 0x263d, 0x2671, 0x263f, 0x266f, 0x2675, 0x02e9, 0x2673, 0x262c, + 0x2659, 0x2654, 0x264f, 0x2663, 0x035c, 0x035d, 0x27c8, 0x0360, + 0x27c3, 0x035b, 0x285b, 0x2861, 0x0399, 0x2921, 0x290a, 0x2909, + 0x03d8, 0x292c, 0x2908, 0x03da, 0x03dd, 0x292a, 0x2915, 0x03e0, + 0x2910, 0x2913, 0x03e5, 0x292f, 0x2918, 0x03d7, 0x29e3, 0x2a39, + 0x2a35, 0x2a3a, 0x2a32, 0x044e, 0x048c, 0x0488, 0x858d, 0x2abb, + 0x2aba, 0x2b34, 0x2b39, 0x04ce, 0x859c, 0x04e5, 0x04e6, 0x2c98, + 0x0532, 0x2cd0, 0x0540, 0x0547, 0x054c, 0x2cd7, 0x2caa, 0x0535, + 0x2ca1, 0x2ca4, 0x0530, 0x2cee, 0x0543, 0x2ce7, 0x054d, 0x2ce8, + 0x2cde, 0x05b7, 0x05f3, 0x2f7e, 0x2f8b, 0x0602, + /* 0x36 */ + 0x060b, 0x2f79, 0x2f86, 0x2f93, 0x0604, 0x2f73, 0x2f6a, 0x85ba, + 0x2f6c, 0x0608, 0x2f7f, 0x05fc, 0x2fb2, 0x2fba, 0x05ff, 0x0600, + 0x2f66, 0x2f74, 0x068b, 0x315a, 0x068d, 0x314e, 0x314d, 0x318d, + 0x318e, 0x31ad, 0x06ca, 0x31c7, 0x31ca, 0x06cb, 0x31c9, 0x85cb, + 0x31e3, 0x3257, 0x06f3, 0x3263, 0x3267, 0x331a, 0x3319, 0x3316, + 0x0736, 0x076a, 0x349e, 0x34b6, 0x3498, 0x3473, 0x076b, 0x349a, + 0x348e, 0x34b7, 0x34db, 0x34a5, 0x346c, 0x34c1, 0x3484, 0x0771, + 0x0768, 0x3495, 0x347a, 0x3499, 0x0772, 0x34b8, 0x34b9, 0x3470, + 0x082e, 0x3735, 0x0862, 0x3790, 0x37bb, 0x37ed, 0x0898, 0x08b5, + 0x08eb, 0x39c1, 0x39c3, 0x39ce, 0x08fb, 0x08f8, 0x39ad, 0x3a04, + 0x08f5, 0x39b9, 0x0908, 0x39e7, 0x8607, 0x3a08, 0x3a06, 0x090a, + 0x3a0a, 0x39b0, 0x0906, 0x39f8, 0x3a0c, 0x08fd, + /* 0x37 */ + 0x39b1, 0x08fa, 0x3a02, 0x3a07, 0x3a09, 0x3a01, 0x3a17, 0x39ff, + 0x3a12, 0x09ba, 0x09b9, 0x3d03, 0x3d07, 0x3d01, 0x3cf5, 0x3cf1, + 0x3d08, 0x3cf2, 0x3d0f, 0x09bb, 0x3cfe, 0x0a18, 0x0a40, 0x0a3d, + 0x3f1a, 0x3f10, 0x3f0e, 0x4002, 0x3ff3, 0x0acd, 0x0ac9, 0x3ffb, + 0x0acb, 0x0aca, 0x0ace, 0x411b, 0x4123, 0x4161, 0x4168, 0x0b5e, + 0x4167, 0x41d3, 0x0b91, 0x0b8c, 0x4290, 0x0be1, 0x0c02, 0x42d5, + 0x42d7, 0x42d6, 0x4330, 0x0c2b, 0x4326, 0x0c2a, 0x4340, 0x0a14, + 0x431e, 0x0cad, 0x0ca3, 0x0cab, 0x4447, 0x0caf, 0x444b, 0x4451, + 0x444f, 0x4442, 0x4446, 0x0d04, 0x456e, 0x456c, 0x45f2, 0x0d44, + 0x45f1, 0x45f5, 0x45f3, 0x45f9, 0x0d3d, 0x0d47, 0x0d9c, 0x469a, + 0x4693, 0x4691, 0x46e1, 0x0de0, 0x0de4, 0x4721, 0x471c, 0x4716, + 0x4717, 0x4736, 0x471f, 0x0e80, 0x4893, 0x4899, + /* 0x38 */ + 0x489a, 0x489c, 0x0eca, 0x4949, 0x0ed4, 0x4934, 0x4937, 0x0ed2, + 0x492d, 0x0ecb, 0x494c, 0x0ece, 0x0ed3, 0x4948, 0x0f44, 0x0f48, + 0x4b3b, 0x0f45, 0x0f81, 0x0f86, 0x0f85, 0x4c08, 0x4c1a, 0x0fa3, + 0x4c1d, 0x0fb5, 0x4c49, 0x4c45, 0x4c44, 0x489b, 0x0ffa, 0x0ff9, + 0x4d2a, 0x4d2e, 0x0ffb, 0x0ff2, 0x4d31, 0x0fef, 0x4d1a, 0x4d34, + 0x4d17, 0x105b, 0x1066, 0x10ce, 0x4f1d, 0x4f71, 0x4f84, 0x4f80, + 0x4f72, 0x4fa1, 0x01b4, 0x4f79, 0x4f91, 0x10c8, 0x4f9f, 0x4fad, + 0x10d1, 0x10c5, 0x4f23, 0x10d2, 0x4f85, 0x4f9c, 0x4fb7, 0x5258, + 0x525a, 0x118f, 0x5257, 0x52b2, 0x11a7, 0x52ae, 0x11a5, 0x11a4, + 0x1211, 0x5445, 0x549c, 0x5494, 0x54a3, 0x548f, 0x54a5, 0x54a9, + 0x54a6, 0x548a, 0x54a0, 0x5490, 0x5592, 0x5591, 0x5594, 0x12b5, + 0x5626, 0x5632, 0x5628, 0x12b4, 0x12bd, 0x561c, + /* 0x39 */ + 0x12bb, 0x562b, 0x5620, 0x12b9, 0x5629, 0x12c2, 0x12be, 0x12ba, + 0x5621, 0x583a, 0x06b7, 0x585b, 0x5858, 0x587c, 0x1358, 0x58a6, + 0x58ae, 0x58ad, 0x5965, 0x139b, 0x597e, 0x139c, 0x597c, 0x597f, + 0x597a, 0x59bd, 0x13da, 0x13de, 0x59c0, 0x59bb, 0x5aad, 0x5aaf, + 0x5ad6, 0x144d, 0x1446, 0x1447, 0x144b, 0x144c, 0x5ad9, 0x1448, + 0x1499, 0x5c12, 0x5c0e, 0x5c25, 0x149b, 0x5c13, 0x5cee, 0x14ce, + 0x5cab, 0x5cf7, 0x14eb, 0x5d59, 0x5d54, 0x5df2, 0x5df0, 0x5de5, + 0x5df6, 0x151c, 0x158c, 0x6187, 0x15d1, 0x625a, 0x15d6, 0x15d3, + 0x626e, 0x15d4, 0x15d0, 0x15d5, 0x6279, 0x160b, 0x64e1, 0x64e6, + 0x17c6, 0x6ac4, 0x6ad2, 0x1a80, 0x0024, 0x1a81, 0x1c8f, 0x1c97, + 0x1c88, 0x1c89, 0x0074, 0x007a, 0x1c81, 0x1d60, 0x7064, 0x00c3, + 0x2a42, 0x1dd3, 0x00d4, 0x00d5, 0x1dd2, 0x1dd6, + /* 0x3a */ + 0x1e73, 0x00fb, 0x1e70, 0x00f7, 0x0132, 0x8533, 0x1fa8, 0x1fa6, + 0x1fc5, 0x2197, 0x21de, 0x01ba, 0x01bf, 0x2196, 0x21b4, 0x01c7, + 0x2185, 0x01b7, 0x219b, 0x21a0, 0x01b9, 0x2159, 0x01c3, 0x2186, + 0x01bd, 0x01d0, 0x21af, 0x217a, 0x01c1, 0x01be, 0x01cd, 0x219e, + 0x01cb, 0x21a9, 0x230f, 0x230e, 0x241a, 0x024f, 0x241f, 0x0253, + 0x243c, 0x2418, 0x243e, 0x2426, 0x0255, 0x243a, 0x7464, 0x2422, + 0x0251, 0x24fb, 0x2563, 0x2564, 0x029f, 0x26a8, 0x26a3, 0x2682, + 0x2688, 0x26a1, 0x2685, 0x2698, 0x02fe, 0x2699, 0x02fb, 0x2689, + 0x2681, 0x2696, 0x2680, 0x02f1, 0x02f5, 0x2691, 0x02ef, 0x0304, + 0x0303, 0x02f4, 0x26cf, 0x02f3, 0x0302, 0x02f7, 0x02fa, 0x02fd, + 0x02ee, 0x2687, 0x26a0, 0x02f0, 0x2679, 0x02f2, 0x2686, 0x26ab, + 0x26aa, 0x26a4, 0x268d, 0x267e, 0x0344, 0x27d5, + /* 0x3b */ + 0x0362, 0x0377, 0x09c9, 0x281e, 0x285f, 0x285e, 0x2944, 0x293e, + 0x03e8, 0x2948, 0x291c, 0x03ef, 0x295b, 0x294d, 0x03e6, 0x03ed, + 0x2957, 0x03e7, 0x2953, 0x294f, 0x03eb, 0x293b, 0x2946, 0x042d, + 0x0455, 0x2a46, 0x2a47, 0x0453, 0x2a48, 0x2ac0, 0x2abd, 0x2abf, + 0x0490, 0x2b11, 0x04be, 0x2b3e, 0x2b3b, 0x04bd, 0x2b3a, 0x04cf, + 0x04d0, 0x04ec, 0x2ba7, 0x054b, 0x2cea, 0x0548, 0x2d07, 0x2d22, + 0x2d0c, 0x0555, 0x0551, 0x2cb3, 0x2cd6, 0x2cd2, 0x054e, 0x2ce3, + 0x2ce5, 0x2ce9, 0x056b, 0x055e, 0x2d11, 0x2cfd, 0x0560, 0x0567, + 0x2d1e, 0x2d20, 0x2d21, 0x2e1e, 0x05b8, 0x2fe2, 0x2fde, 0x2fe6, + 0x0614, 0x060f, 0x0607, 0x0613, 0x2ff8, 0x0617, 0x2ffe, 0x2fc1, + 0x2fbf, 0x2ff7, 0x2fd1, 0x315f, 0x3160, 0x3161, 0x069a, 0x06b8, + 0x31d1, 0x06f7, 0x06f8, 0x327d, 0x326b, 0x327f, + /* 0x3c */ + 0x06fd, 0x06f5, 0x3273, 0x3281, 0x326d, 0x3269, 0x06fa, 0x0738, + 0x331e, 0x34ed, 0x0787, 0x0780, 0x0788, 0x0779, 0x3503, 0x077c, + 0x34fe, 0x34e5, 0x351e, 0x3502, 0x0783, 0x0785, 0x3509, 0x34ca, + 0x3500, 0x85e5, 0x3501, 0x3518, 0x34e2, 0x34cf, 0x077b, 0x352e, + 0x34c5, 0x34ff, 0x0786, 0x351c, 0x34c3, 0x0834, 0x376f, 0x0855, + 0x376e, 0x0868, 0x37be, 0x089c, 0x37f4, 0x382d, 0x08fc, 0x39b6, + 0x3a75, 0x3a1e, 0x091a, 0x3a18, 0x0917, 0x3a48, 0x091b, 0x3a4f, + 0x0913, 0x3a42, 0x3a6a, 0x3a70, 0x39fe, 0x0905, 0x0907, 0x3a6d, + 0x091c, 0x3a7b, 0x3a7e, 0x3a59, 0x0911, 0x3a57, 0x0916, 0x3a80, + 0x3a50, 0x0915, 0x3a29, 0x3a76, 0x3a2a, 0x3a4c, 0x3d2a, 0x09cb, + 0x3d35, 0x3d2c, 0x3d37, 0x3d1d, 0x09c5, 0x09c2, 0x3d38, 0x09cd, + 0x3d34, 0x3d2b, 0x3d33, 0x3d27, 0x3d24, 0x09ca, + /* 0x3d */ + 0x3d2d, 0x3e32, 0x3e83, 0x3e82, 0x3e87, 0x3f06, 0x3f24, 0x3f38, + 0x3f2a, 0x3f2c, 0x3f2b, 0x0a83, 0x3f2f, 0x3f28, 0x4017, 0x0ad6, + 0x0ad5, 0x4019, 0x4038, 0x0ad1, 0x401f, 0x4014, 0x403c, 0x3ff7, + 0x401c, 0x4015, 0x4018, 0x4039, 0x40f9, 0x4124, 0x8634, 0x0b52, + 0x0b5f, 0x416e, 0x416d, 0x4171, 0x418e, 0x0b95, 0x41e5, 0x0b9d, + 0x0b98, 0x0b9e, 0x0b96, 0x4294, 0x42b3, 0x0c03, 0x42d9, 0x0c2f, + 0x4348, 0x4349, 0x4343, 0x0c31, 0x0c33, 0x4342, 0x43df, 0x0cb4, + 0x4463, 0x4476, 0x0cb0, 0x445f, 0x4466, 0x4566, 0x4571, 0x0d08, + 0x0d07, 0x4576, 0x4584, 0x4575, 0x45ff, 0x4607, 0x0d4e, 0x460e, + 0x4609, 0x0d50, 0x0d52, 0x0da1, 0x0da3, 0x0da5, 0x0dcc, 0x46e7, + 0x46e2, 0x4755, 0x0def, 0x0dea, 0x4743, 0x4757, 0x476c, 0x4742, + 0x4753, 0x0ded, 0x4741, 0x0e85, 0x0e84, 0x48a7, + /* 0x3e */ + 0x48a0, 0x48a6, 0x48a4, 0x4974, 0x0edb, 0x4959, 0x0ed9, 0x4960, + 0x4957, 0x496c, 0x497e, 0x4964, 0x0ed7, 0x495a, 0x495d, 0x0eda, + 0x0ede, 0x0ed8, 0x4976, 0x494d, 0x4975, 0x0ed5, 0x4bd3, 0x4bd6, + 0x0f9c, 0x0f9d, 0x4c60, 0x4c4e, 0x4d45, 0x4d3b, 0x0ffe, 0x4d48, + 0x4d42, 0x4d49, 0x4d40, 0x4d14, 0x4d41, 0x1007, 0x4def, 0x4df6, + 0x4e03, 0x106a, 0x4fed, 0x10e7, 0x4fda, 0x5018, 0x4fd2, 0x5008, + 0x10e2, 0x5000, 0x10df, 0x10e1, 0x10e5, 0x5017, 0x4f46, 0x5014, + 0x4fd3, 0x5005, 0x501f, 0x5002, 0x5016, 0x4fcd, 0x4fe6, 0x1191, + 0x525d, 0x52d5, 0x52e1, 0x11b4, 0x11b0, 0x11b5, 0x11ae, 0x52ee, + 0x5447, 0x5446, 0x122d, 0x122c, 0x54bb, 0x122b, 0x54bf, 0x54b4, + 0x1229, 0x54b5, 0x127f, 0x559a, 0x5643, 0x12c9, 0x12cb, 0x565a, + 0x12c5, 0x12c6, 0x12ca, 0x5635, 0x5638, 0x5642, + /* 0x3f */ + 0x5649, 0x565d, 0x564b, 0x563d, 0x12d2, 0x12d0, 0x132d, 0x1335, + 0x5860, 0x585e, 0x587f, 0x587e, 0x5883, 0x136c, 0x58b1, 0x5987, + 0x139d, 0x13a0, 0x5988, 0x5983, 0x13a2, 0x139f, 0x5986, 0x598b, + 0x5982, 0x59ca, 0x59d2, 0x13eb, 0x13e2, 0x59d4, 0x59c9, 0x5ab0, + 0x1436, 0x1432, 0x1450, 0x5af2, 0x5ae4, 0x5af3, 0x5aea, 0x144f, + 0x5afd, 0x1452, 0x5b9d, 0x5c2b, 0x5c2a, 0x149e, 0x5c28, 0x5c29, + 0x5c2c, 0x14a0, 0x149c, 0x5c3a, 0x5c30, 0x5c37, 0x5c3b, 0x14d1, + 0x5d0a, 0x14ef, 0x14f0, 0x14f1, 0x5dfe, 0x5e20, 0x151d, 0x5e0b, + 0x151f, 0x5e18, 0x5e22, 0x151e, 0x5e1b, 0x5e08, 0x1520, 0x5e0e, + 0x5e13, 0x158e, 0x1591, 0x6195, 0x83dd, 0x1590, 0x15d7, 0x628c, + 0x627b, 0x627f, 0x6281, 0x15d9, 0x6282, 0x15f4, 0x15f6, 0x0160, + 0x15f5, 0x15f3, 0x62ee, 0x62ed, 0x160c, 0x62ec, + /* 0x40 */ + 0x635f, 0x636f, 0x1651, 0x636d, 0x16a6, 0x16a7, 0x16a8, 0x1727, + 0x1724, 0x1725, 0x64f0, 0x172a, 0x1774, 0x17c7, 0x66a9, 0x17e7, + 0x17ed, 0x66e0, 0x1ab7, 0x002e, 0x007b, 0x1ccc, 0x1cbc, 0x007c, + 0x1caa, 0x1cb9, 0x007d, 0x1cab, 0x1cc3, 0x1ccd, 0x1d7e, 0x1e7e, + 0x1e79, 0x00fd, 0x8523, 0x1ee1, 0x1ee0, 0x1ee7, 0x1f80, 0x1fab, + 0x1faa, 0x1fa9, 0x1fe0, 0x21ea, 0x01da, 0x21d7, 0x01d6, 0x01db, + 0x21c1, 0x2315, 0x025b, 0x246c, 0x025c, 0x245c, 0x2450, 0x2461, + 0x246a, 0x2469, 0x2456, 0x2460, 0x2466, 0x245f, 0x2523, 0x2566, + 0x2568, 0x0306, 0x030b, 0x26ce, 0x030d, 0x26c5, 0x26c3, 0x030a, + 0x0313, 0x26d0, 0x0310, 0x0312, 0x0309, 0x0308, 0x0311, 0x030f, + 0x2774, 0x2776, 0x27dc, 0x27d7, 0x27da, 0x27db, 0x0367, 0x2820, + 0x296d, 0x2966, 0x03f6, 0x2964, 0x296e, 0x857e, + /* 0x41 */ + 0x2960, 0x2b42, 0x2b5a, 0x2b6e, 0x0564, 0x056c, 0x2d30, 0x2d3a, + 0x2d2a, 0x2d43, 0x2d19, 0x2d31, 0x056d, 0x2d3d, 0x057a, 0x0575, + 0x060d, 0x3008, 0x3032, 0x3038, 0x061e, 0x3031, 0x061b, 0x3019, + 0x062a, 0x3011, 0x061f, 0x0622, 0x3029, 0x301d, 0x0625, 0x0627, + 0x0629, 0x303c, 0x0624, 0x3046, 0x3047, 0x0628, 0x0626, 0x303a, + 0x3007, 0x0623, 0x316b, 0x069f, 0x3170, 0x316d, 0x06b1, 0x31e4, + 0x3293, 0x0703, 0x0707, 0x070c, 0x0706, 0x328f, 0x0704, 0x0709, + 0x3292, 0x0705, 0x328e, 0x0708, 0x3546, 0x0796, 0x079c, 0x079f, + 0x079b, 0x0798, 0x0799, 0x0794, 0x3531, 0x078d, 0x07a3, 0x353e, + 0x0793, 0x357c, 0x3543, 0x0792, 0x3573, 0x85e8, 0x3555, 0x078e, + 0x078c, 0x3585, 0x354d, 0x3550, 0x3547, 0x3567, 0x3536, 0x3564, + 0x3561, 0x079a, 0x357d, 0x3744, 0x3740, 0x3771, + /* 0x42 */ + 0x3773, 0x379c, 0x086a, 0x086d, 0x0884, 0x37c1, 0x08a0, 0x37fa, + 0x3831, 0x3832, 0x091d, 0x0926, 0x3ab8, 0x3aa8, 0x0933, 0x3a91, + 0x3abb, 0x0938, 0x3a9a, 0x0930, 0x0928, 0x3aa9, 0x0927, 0x092a, + 0x3ab5, 0x3a6c, 0x3ae8, 0x0931, 0x3add, 0x3ada, 0x3ae6, 0x3aac, + 0x0934, 0x092e, 0x093b, 0x3ad9, 0x3ae3, 0x3ae9, 0x3adb, 0x0929, + 0x3d6f, 0x09d2, 0x09d8, 0x3d48, 0x09cf, 0x3d4a, 0x3d6b, 0x09d9, + 0x3d4f, 0x3d57, 0x3d74, 0x09ce, 0x09d3, 0x09d0, 0x3d45, 0x3d51, + 0x3d6d, 0x07a1, 0x3e51, 0x3e50, 0x3e4e, 0x0a47, 0x3f41, 0x0a8b, + 0x3f2e, 0x3f46, 0x0ad4, 0x4027, 0x0ade, 0x4048, 0x4053, 0x403d, + 0x0adf, 0x405d, 0x4056, 0x0ad7, 0x401e, 0x4047, 0x4043, 0x4058, + 0x4049, 0x0ae1, 0x404c, 0x4045, 0x403e, 0x0b2f, 0x4101, 0x411e, + 0x0b62, 0x0b63, 0x417a, 0x41ee, 0x4202, 0x4297, + /* 0x43 */ + 0x4298, 0x0be2, 0x0c04, 0x0c43, 0x435d, 0x4364, 0x4353, 0x4358, + 0x4482, 0x4490, 0x448a, 0x0cbe, 0x447a, 0x447d, 0x0cba, 0x448b, + 0x4478, 0x0cbc, 0x864e, 0x448d, 0x4488, 0x4492, 0x4481, 0x457e, + 0x4583, 0x0d0d, 0x0d0e, 0x0d11, 0x4580, 0x0d0f, 0x0d12, 0x0d55, + 0x460f, 0x0d59, 0x0d5b, 0x461d, 0x0d57, 0x46a1, 0x46a4, 0x0dce, + 0x46e9, 0x46ea, 0x0dfe, 0x4762, 0x476b, 0x0dfc, 0x475e, 0x0df5, + 0x4779, 0x0df9, 0x0dfa, 0x476f, 0x4768, 0x0e88, 0x0e89, 0x48ae, + 0x0e8a, 0x0e87, 0x0e8b, 0x48b0, 0x0ee6, 0x4990, 0x0eed, 0x498a, + 0x0ee5, 0x498b, 0x4999, 0x4995, 0x0ee0, 0x4987, 0x4978, 0x4997, + 0x4989, 0x4998, 0x0ee1, 0x0f5b, 0x0f5c, 0x4ba3, 0x0f8f, 0x0f8b, + 0x0f8d, 0x4bdd, 0x4c57, 0x0fb9, 0x4d63, 0x4d6a, 0x4d6c, 0x100f, + 0x1019, 0x1013, 0x4d5d, 0x4d75, 0x1018, 0x4d5f, + /* 0x44 */ + 0x1016, 0x4d7d, 0x4d6d, 0x1053, 0x868d, 0x4e41, 0x504f, 0x5084, + 0x10f6, 0x507f, 0x10f5, 0x5048, 0x502a, 0x507b, 0x5072, 0x5064, + 0x502e, 0x505c, 0x5053, 0x10f7, 0x5041, 0x50c8, 0x10f0, 0x5062, + 0x5080, 0x503e, 0x5083, 0x5071, 0x10f9, 0x504a, 0x5055, 0x5058, + 0x1192, 0x1195, 0x1196, 0x52fc, 0x52fd, 0x5315, 0x11b9, 0x5316, + 0x52ff, 0x11bd, 0x11b8, 0x1212, 0x5458, 0x54cf, 0x54e0, 0x1280, + 0x1281, 0x129a, 0x1298, 0x55e7, 0x566a, 0x5680, 0x12d4, 0x566f, + 0x5665, 0x12da, 0x5678, 0x567d, 0x5688, 0x12d6, 0x12db, 0x5664, + 0x567e, 0x12dc, 0x5667, 0x5863, 0x5888, 0x1371, 0x58cd, 0x1372, + 0x58c9, 0x13a8, 0x59ed, 0x13f0, 0x86db, 0x13f1, 0x13fd, 0x1438, + 0x1437, 0x1439, 0x5ab1, 0x1455, 0x1453, 0x5b04, 0x5b9e, 0x5ba0, + 0x5c43, 0x5c46, 0x5c48, 0x5c45, 0x5c40, 0x5c4c, + /* 0x45 */ + 0x14d5, 0x14bd, 0x5d0c, 0x5d13, 0x5d15, 0x14f5, 0x5d6b, 0x5d67, + 0x5e5d, 0x5e55, 0x5e35, 0x1521, 0x5e59, 0x5e2f, 0x5e3c, 0x5e8f, + 0x5e5c, 0x5e6a, 0x5e62, 0x5e5f, 0x5e6b, 0x5e6e, 0x5e3b, 0x5e44, + 0x5e41, 0x619a, 0x1592, 0x6199, 0x15de, 0x15db, 0x15da, 0x628f, + 0x15df, 0x6296, 0x15f9, 0x15f8, 0x15fa, 0x62f4, 0x62fc, 0x160e, + 0x6355, 0x1643, 0x6379, 0x1656, 0x1653, 0x169e, 0x63ee, 0x63f5, + 0x16a9, 0x640b, 0x16fa, 0x64f3, 0x1731, 0x1730, 0x64f7, 0x64ff, + 0x64f5, 0x1732, 0x64ec, 0x64f1, 0x1729, 0x172e, 0x659a, 0x1776, + 0x66e2, 0x673d, 0x675d, 0x68e8, 0x18a5, 0x68eb, 0x68ef, 0x68ee, + 0x6a81, 0x6b14, 0x1cd0, 0x1cd9, 0x1cdc, 0x1cd8, 0x008c, 0x1ce1, + 0x1ceb, 0x008b, 0x0089, 0x1cf4, 0x1ce2, 0x1cde, 0x008d, 0x0086, + 0x00d7, 0x1df4, 0x0104, 0x0107, 0x0103, 0x1eed, + /* 0x46 */ + 0x1eea, 0x0122, 0x1f32, 0x0151, 0x1fae, 0x1fb0, 0x0161, 0x21fb, + 0x2203, 0x220b, 0x01e9, 0x2207, 0x01e5, 0x21f8, 0x01e4, 0x2228, + 0x221e, 0x01e3, 0x2218, 0x2211, 0x2251, 0x2205, 0x2317, 0x2492, + 0x0265, 0x248c, 0x0263, 0x2478, 0x2484, 0x2473, 0x24ad, 0x2497, + 0x2495, 0x2477, 0x2472, 0x2496, 0x248d, 0x2510, 0x028c, 0x256c, + 0x031a, 0x26e7, 0x0315, 0x26e4, 0x0320, 0x0321, 0x26ef, 0x2226, + 0x031c, 0x031b, 0x26f0, 0x297b, 0x03fe, 0x2983, 0x0404, 0x0401, + 0x298b, 0x298c, 0x0400, 0x2978, 0x2a52, 0x046d, 0x0493, 0x2ad0, + 0x2acf, 0x04a1, 0x2bb3, 0x2bb4, 0x0576, 0x0579, 0x0572, 0x2d7b, + 0x0583, 0x2d6f, 0x2d81, 0x2d3c, 0x2d42, 0x2d38, 0x2d33, 0x85a6, + 0x2d60, 0x2d69, 0x2d7d, 0x2d86, 0x2e2c, 0x2e28, 0x0638, 0x304c, + 0x0630, 0x3057, 0x307c, 0x0634, 0x063a, 0x3055, + /* 0x47 */ + 0x3062, 0x3071, 0x306a, 0x3056, 0x303b, 0x3081, 0x0635, 0x304f, + 0x307e, 0x3064, 0x063f, 0x0640, 0x0632, 0x0631, 0x0636, 0x3171, + 0x7aba, 0x070f, 0x32a5, 0x329a, 0x329c, 0x0710, 0x32a6, 0x070d, + 0x32a4, 0x358f, 0x35c5, 0x35c8, 0x3592, 0x35b2, 0x07a9, 0x07b4, + 0x07ac, 0x35e3, 0x35c0, 0x35d6, 0x35d1, 0x359f, 0x35a2, 0x35d2, + 0x07b8, 0x07ae, 0x7bf3, 0x35e1, 0x35d5, 0x359d, 0x07b3, 0x07ba, + 0x3598, 0x083f, 0x3774, 0x37a1, 0x093c, 0x3af0, 0x3af3, 0x0942, + 0x0940, 0x3b1b, 0x3b0c, 0x3b1d, 0x3b34, 0x3b28, 0x3b17, 0x093e, + 0x3b44, 0x3b42, 0x3b04, 0x3b11, 0x3afa, 0x3b4a, 0x3d91, 0x3d8e, + 0x09e1, 0x3d8b, 0x3d8d, 0x3d7f, 0x3d8c, 0x3d7e, 0x3d7c, 0x3d83, + 0x09e6, 0x3d88, 0x09e0, 0x0a15, 0x3e94, 0x0a93, 0x3f55, 0x3f53, + 0x3f4f, 0x3f54, 0x406c, 0x4065, 0x4066, 0x4061, + /* 0x48 */ + 0x406b, 0x4068, 0x4076, 0x0ae7, 0x4060, 0x7e0f, 0x4074, 0x4106, + 0x420e, 0x0bad, 0x4207, 0x0bae, 0x0be3, 0x42b9, 0x0bf5, 0x42b7, + 0x42e2, 0x0c06, 0x4374, 0x4377, 0x4376, 0x4375, 0x0c4f, 0x4378, + 0x4371, 0x0c54, 0x437a, 0x3d5b, 0x437b, 0x44a6, 0x44ae, 0x44b8, + 0x0ccb, 0x0ce3, 0x0cc9, 0x44b1, 0x44af, 0x0d13, 0x4589, 0x4587, + 0x0d15, 0x0d61, 0x4629, 0x0d66, 0x462a, 0x0d64, 0x462d, 0x462c, + 0x0d60, 0x4632, 0x0d63, 0x46ec, 0x46f0, 0x4781, 0x479e, 0x4783, + 0x0e0a, 0x4792, 0x0e04, 0x47a3, 0x479f, 0x4793, 0x0e07, 0x4786, + 0x48b8, 0x48b7, 0x0e8d, 0x0e8f, 0x0e90, 0x0e92, 0x0eec, 0x49c8, + 0x49b6, 0x866c, 0x49d1, 0x0ee7, 0x49a8, 0x49ab, 0x0ef2, 0x49b3, + 0x49cd, 0x0eee, 0x49cf, 0x49a4, 0x0eef, 0x0f4c, 0x4b41, 0x4b6f, + 0x4b71, 0x0f5e, 0x0f5f, 0x0f76, 0x0f74, 0x0f72, + /* 0x49 */ + 0x0f90, 0x4c23, 0x4c5b, 0x0fbe, 0x4c61, 0x4c5f, 0x4d81, 0x1026, + 0x1025, 0x4d84, 0x4e13, 0x1074, 0x4e4a, 0x4e4c, 0x10fd, 0x1105, + 0x1101, 0x50bd, 0x5095, 0x1109, 0x5092, 0x50c3, 0x110c, 0x5096, + 0x50a5, 0x50b5, 0x50b3, 0x50a3, 0x50e4, 0x50d8, 0x50d5, 0x110d, + 0x50b7, 0x50ad, 0x50da, 0x5093, 0x5336, 0x11c0, 0x11c5, 0x11c9, + 0x533d, 0x532b, 0x5347, 0x5339, 0x11d5, 0x5345, 0x531d, 0x1241, + 0x54ff, 0x54ea, 0x1233, 0x54f5, 0x123a, 0x5500, 0x54ed, 0x5503, + 0x54e9, 0x1240, 0x1242, 0x55ea, 0x12e8, 0x569b, 0x568e, 0x56a2, + 0x12e4, 0x569c, 0x5694, 0x5690, 0x56a9, 0x56ac, 0x12e7, 0x569f, + 0x12e6, 0x12e1, 0x569d, 0x1339, 0x5867, 0x135c, 0x1375, 0x58d0, + 0x58d6, 0x58d4, 0x5998, 0x599a, 0x5997, 0x13ae, 0x13b0, 0x13fa, + 0x5a0b, 0x5a08, 0x5a01, 0x5ab4, 0x5ab3, 0x145b, + /* 0x4a */ + 0x5ba1, 0x5ba2, 0x14a5, 0x5c5a, 0x14a2, 0x5c61, 0x5c5f, 0x14db, + 0x14da, 0x5d25, 0x5d7b, 0x5d76, 0x5d7c, 0x1524, 0x5e89, 0x5ef6, + 0x5eb1, 0x5ead, 0x5e92, 0x5e81, 0x5e84, 0x1526, 0x5eae, 0x5e90, + 0x5e9e, 0x1598, 0x1596, 0x159a, 0x61a2, 0x61a7, 0x1597, 0x15e1, + 0x15e0, 0x15e3, 0x15e2, 0x62a0, 0x629d, 0x629f, 0x62d0, 0x15fb, + 0x62d1, 0x1612, 0x1614, 0x6359, 0x1645, 0x6364, 0x165c, 0x165d, + 0x16b8, 0x6419, 0x16ba, 0x6414, 0x6415, 0x641a, 0x1703, 0x1735, + 0x1736, 0x1739, 0x6506, 0x172d, 0x64f8, 0x6501, 0x177a, 0x65be, + 0x65bc, 0x65b7, 0x65b6, 0x65c0, 0x1778, 0x65b8, 0x177b, 0x177c, + 0x177e, 0x65c4, 0x177d, 0x65bf, 0x17c9, 0x66da, 0x66e4, 0x66e9, + 0x66e8, 0x66ea, 0x66e5, 0x17f3, 0x6726, 0x181a, 0x1819, 0x6740, + 0x181f, 0x18a6, 0x18a7, 0x18a8, 0x18ab, 0x18a9, + /* 0x4b */ + 0x192e, 0x6abd, 0x195e, 0x0095, 0x0093, 0x0092, 0x1d0e, 0x0096, + 0x1cf7, 0x0097, 0x1cfc, 0x1d0d, 0x1d01, 0x1dda, 0x1dd9, 0x1ddb, + 0x1e86, 0x1e8e, 0x1eee, 0x1f33, 0x1fb1, 0x01f5, 0x2247, 0x222d, + 0x2254, 0x01ea, 0x224b, 0x2252, 0x2231, 0x2244, 0x2256, 0x2250, + 0x222b, 0x01f3, 0x224d, 0x2237, 0x224f, 0x24a2, 0x24b7, 0x0269, + 0x24b2, 0x026b, 0x24aa, 0x24b5, 0x24b0, 0x026c, 0x24b4, 0x24a4, + 0x24a7, 0x0268, 0x2526, 0x26fe, 0x0328, 0x2704, 0x0326, 0x26fc, + 0x0325, 0x2706, 0x270a, 0x26fa, 0x270d, 0x2700, 0x270e, 0x036b, + 0x040f, 0x0408, 0x2991, 0x040c, 0x298f, 0x2990, 0x2998, 0x29a4, + 0x299b, 0x29a3, 0x2996, 0x29e4, 0x2a5a, 0x0460, 0x0462, 0x2a5e, + 0x0498, 0x2bb8, 0x2d57, 0x2d5c, 0x2da6, 0x2d95, 0x2d88, 0x058a, + 0x2da3, 0x2d8f, 0x0584, 0x2d64, 0x057f, 0x2d59, + /* 0x4c */ + 0x2d78, 0x0582, 0x2d85, 0x2d87, 0x2d9e, 0x0596, 0x0589, 0x2d98, + 0x2d9c, 0x058d, 0x05bc, 0x2e2f, 0x3080, 0x309b, 0x308e, 0x308d, + 0x3094, 0x30c6, 0x0644, 0x30a8, 0x3083, 0x063c, 0x30b9, 0x3086, + 0x30b4, 0x30af, 0x3091, 0x064e, 0x30aa, 0x30a1, 0x30a7, 0x32b6, + 0x32b3, 0x0714, 0x32bc, 0x32ac, 0x0715, 0x32ad, 0x360e, 0x07ce, + 0x361c, 0x361a, 0x07e0, 0x07c2, 0x360b, 0x07bf, 0x35ef, 0x360c, + 0x35f0, 0x3622, 0x07c4, 0x35d8, 0x07cf, 0x3612, 0x35fa, 0x07c8, + 0x362a, 0x07cc, 0x3610, 0x07cd, 0x07c7, 0x3629, 0x35f9, 0x35ea, + 0x362c, 0x3624, 0x18b7, 0x35e9, 0x3752, 0x374f, 0x3753, 0x0843, + 0x08b6, 0x3b10, 0x3b65, 0x3b75, 0x0951, 0x094a, 0x094d, 0x0956, + 0x3bd0, 0x0953, 0x3b5c, 0x3b3d, 0x3b71, 0x0959, 0x3b91, 0x3b0b, + 0x3b79, 0x3b81, 0x3b8f, 0x094e, 0x3b59, 0x3b74, + /* 0x4d */ + 0x09ee, 0x3dae, 0x09ec, 0x3da3, 0x3dad, 0x09eb, 0x09ef, 0x3dab, + 0x3da6, 0x3da2, 0x09ed, 0x1ef2, 0x3e57, 0x3e55, 0x3e99, 0x3f4b, + 0x407a, 0x0af2, 0x0aef, 0x0af1, 0x408c, 0x4084, 0x0aed, 0x0af0, + 0x4082, 0x4093, 0x407b, 0x0aee, 0x4109, 0x181b, 0x0b50, 0x0b66, + 0x0284, 0x0bb8, 0x0bf6, 0x438a, 0x0c57, 0x4390, 0x0c5e, 0x44c6, + 0x44d3, 0x44c0, 0x44d2, 0x44c7, 0x44c2, 0x0d19, 0x459f, 0x459d, + 0x459e, 0x0d70, 0x4641, 0x0d6e, 0x4638, 0x463a, 0x4642, 0x0d72, + 0x0d76, 0x463e, 0x46b0, 0x47ae, 0x47b3, 0x0e12, 0x0e1f, 0x47bf, + 0x0e11, 0x0e16, 0x47cd, 0x0e19, 0x47b2, 0x0e24, 0x0e14, 0x0e25, + 0x0e95, 0x0e96, 0x0e93, 0x0e94, 0x48c4, 0x48cd, 0x48c2, 0x48c6, + 0x48c3, 0x48c9, 0x48c7, 0x0ea0, 0x49f8, 0x0efb, 0x49ed, 0x49e2, + 0x0efc, 0x0f00, 0x0ef8, 0x49dc, 0x4a02, 0x4a01, + /* 0x4e */ + 0x0ef9, 0x49d6, 0x0f04, 0x49e4, 0x49fe, 0x0f03, 0x4a00, 0x49fc, + 0x49fd, 0x0ef3, 0x49f5, 0x49ff, 0x0efa, 0x49eb, 0x49e5, 0x4b78, + 0x4bae, 0x4be7, 0x0fbf, 0x4c65, 0x4c6a, 0x4c66, 0x4c68, 0x4c6b, + 0x4d94, 0x4da1, 0x4d92, 0x4d96, 0x4d93, 0x1079, 0x1110, 0x5101, + 0x1114, 0x50f8, 0x110e, 0x50f5, 0x111a, 0x5104, 0x1119, 0x1121, + 0x1123, 0x111f, 0x511b, 0x5103, 0x5133, 0x5134, 0x50ed, 0x1125, + 0x112b, 0x5135, 0x1116, 0x5105, 0x1122, 0x111b, 0x11ce, 0x11cf, + 0x537d, 0x11cb, 0x11d1, 0x11cc, 0x5371, 0x1217, 0x545c, 0x54e6, + 0x550f, 0x551b, 0x1251, 0x55a9, 0x55a5, 0x55ee, 0x56b1, 0x12ed, + 0x56cc, 0x56ce, 0x12f4, 0x56b7, 0x12f1, 0x56b5, 0x56e9, 0x56b4, + 0x12f8, 0x56b3, 0x56c1, 0x56af, 0x56ca, 0x56d0, 0x132f, 0x135e, + 0x135d, 0x588e, 0x1376, 0x1377, 0x58e9, 0x58db, + /* 0x4f */ + 0x137e, 0x58eb, 0x59a4, 0x13b6, 0x59a2, 0x599d, 0x13b3, 0x13fc, + 0x1403, 0x1400, 0x5a2a, 0x5a28, 0x140a, 0x1402, 0x5ab8, 0x5ab6, + 0x5ab9, 0x5ab7, 0x5b22, 0x5b2b, 0x5b27, 0x5b19, 0x5ba4, 0x1487, + 0x5bb3, 0x14a6, 0x5c71, 0x5c6a, 0x14a9, 0x14de, 0x5d88, 0x5d8c, + 0x5ebf, 0x5eb8, 0x5ebe, 0x5edc, 0x5ee5, 0x152e, 0x152d, 0x5ed4, + 0x5ed6, 0x1530, 0x5eda, 0x5eed, 0x5ef3, 0x5edb, 0x152b, 0x5eb9, + 0x5ee2, 0x5eeb, 0x61af, 0x159e, 0x61b2, 0x61b3, 0x159f, 0x15e5, + 0x15e4, 0x62a3, 0x62a5, 0x15fd, 0x15fc, 0x1617, 0x1619, 0x630a, + 0x1618, 0x6387, 0x6389, 0x638c, 0x63ef, 0x642a, 0x6422, 0x16bf, + 0x641f, 0x173c, 0x6519, 0x176b, 0x65ca, 0x65da, 0x1783, 0x1781, + 0x1780, 0x65de, 0x65c8, 0x65e0, 0x17ca, 0x66b6, 0x66b5, 0x17ce, + 0x66f4, 0x17f6, 0x676b, 0x6769, 0x6772, 0x6763, + /* 0x50 */ + 0x1839, 0x690d, 0x18ae, 0x6901, 0x690c, 0x18b5, 0x68f8, 0x18b3, + 0x18b4, 0x68fe, 0x6902, 0x6a84, 0x1922, 0x6aab, 0x6aaa, 0x1d1d, + 0x1d16, 0x0099, 0x1d2b, 0x1d1e, 0x1d1b, 0x1e90, 0x1e94, 0x1f14, + 0x7289, 0x0202, 0x2267, 0x0201, 0x227b, 0x02a1, 0x225f, 0x2261, + 0x01fd, 0x0273, 0x0274, 0x0270, 0x0276, 0x0275, 0x0272, 0x24c3, + 0x24ca, 0x24bb, 0x24c0, 0x24c4, 0x2501, 0x271f, 0x2718, 0x2711, + 0x2715, 0x0329, 0x2712, 0x271c, 0x032a, 0x2722, 0x2779, 0x29a6, + 0x0416, 0x29b3, 0x29ab, 0x2aea, 0x0499, 0x2b5b, 0x04d3, 0x04f5, + 0x2db7, 0x2dce, 0x2db9, 0x2dbd, 0x2dcf, 0x2dc0, 0x2d99, 0x2d97, + 0x0594, 0x2dbb, 0x2dd0, 0x2dc4, 0x2e31, 0x0656, 0x30d3, 0x30c0, + 0x0659, 0x0658, 0x0655, 0x0652, 0x30dc, 0x30d1, 0x30c8, 0x0657, + 0x30d5, 0x32c3, 0x071b, 0x071c, 0x32bf, 0x32c5, + /* 0x51 */ + 0x0719, 0x32cd, 0x32c1, 0x3306, 0x073f, 0x3324, 0x3663, 0x3642, + 0x3652, 0x07db, 0x3643, 0x3633, 0x07e2, 0x366c, 0x3657, 0x07d7, + 0x364c, 0x366e, 0x07de, 0x07e5, 0x07e4, 0x07e6, 0x07d6, 0x3637, + 0x07df, 0x3671, 0x364a, 0x3636, 0x07dc, 0x3653, 0x07da, 0x3645, + 0x3670, 0x07d3, 0x07d0, 0x365c, 0x3758, 0x3757, 0x0886, 0x0887, + 0x08ad, 0x08b7, 0x0958, 0x096a, 0x3bbb, 0x0962, 0x0961, 0x3bbe, + 0x0969, 0x096c, 0x0965, 0x3bb5, 0x3bd3, 0x3b9f, 0x0966, 0x3bb7, + 0x3bf5, 0x3db7, 0x09f5, 0x3dbb, 0x09f4, 0x3dd1, 0x09f7, 0x3dba, + 0x09f8, 0x3db6, 0x3dcc, 0x09fb, 0x09fc, 0x3dd3, 0x409b, 0x0af5, + 0x0af8, 0x4096, 0x40a2, 0x409d, 0x410a, 0x410e, 0x0b3c, 0x4181, + 0x422c, 0x4237, 0x4236, 0x423b, 0x0bc5, 0x42a1, 0x0c62, 0x0c63, + 0x4398, 0x0c67, 0x4396, 0x0c66, 0x0cd9, 0x0cdb, + /* 0x52 */ + 0x44d6, 0x44eb, 0x0cd8, 0x44dc, 0x0d1b, 0x45a5, 0x45a9, 0x6434, + 0x4653, 0x4645, 0x0d79, 0x464f, 0x0d7d, 0x46bd, 0x46bb, 0x46f1, + 0x0e2c, 0x0e37, 0x47ec, 0x47ed, 0x0e30, 0x0e9a, 0x48d3, 0x1600, + 0x48e1, 0x0f05, 0x4a19, 0x0f07, 0x0f09, 0x0f0a, 0x4a27, 0x4a26, + 0x0f79, 0x0fc2, 0x4c6e, 0x4daf, 0x1038, 0x1037, 0x4dad, 0x1021, + 0x4daa, 0x4e18, 0x105e, 0x113d, 0x1137, 0x1140, 0x516f, 0x514c, + 0x111d, 0x5142, 0x1133, 0x515c, 0x5170, 0x515f, 0x1135, 0x515a, + 0x514b, 0x513f, 0x538a, 0x11d8, 0x538b, 0x53a1, 0x538e, 0x11dc, + 0x11de, 0x5399, 0x545e, 0x545f, 0x5524, 0x55a7, 0x56ea, 0x56fd, + 0x56f9, 0x56e3, 0x56e5, 0x12fa, 0x12fb, 0x56ec, 0x133d, 0x133b, + 0x133f, 0x135f, 0x58f2, 0x137f, 0x58ef, 0x1384, 0x59a6, 0x13bc, + 0x1414, 0x140f, 0x5a3b, 0x5a43, 0x140e, 0x5a32, + /* 0x53 */ + 0x5b31, 0x5b30, 0x1460, 0x5b2d, 0x5b3c, 0x5ba7, 0x5ba5, 0x14ab, + 0x14ac, 0x14aa, 0x5d37, 0x5d95, 0x5d8e, 0x1504, 0x5d96, 0x1508, + 0x5f45, 0x5f0a, 0x1533, 0x1534, 0x5efd, 0x5f17, 0x5f1c, 0x5f07, + 0x5f31, 0x5f32, 0x5f2c, 0x5f30, 0x5f03, 0x5f05, 0x15a2, 0x61c2, + 0x15a4, 0x61b8, 0x15a5, 0x61c1, 0x15a7, 0x15a6, 0x15e7, 0x62ab, + 0x62b7, 0x15ff, 0x15fe, 0x6315, 0x6314, 0x161d, 0x161c, 0x630c, + 0x6317, 0x1667, 0x6393, 0x1694, 0x63d2, 0x16c5, 0x16c8, 0x6436, + 0x6431, 0x6433, 0x643c, 0x642e, 0x643a, 0x16c9, 0x643d, 0x16c7, + 0x64b5, 0x6522, 0x6523, 0x6520, 0x651c, 0x651d, 0x176c, 0x65a0, + 0x178a, 0x65ef, 0x65e8, 0x65eb, 0x1788, 0x1787, 0x1786, 0x65e1, + 0x65e6, 0x17cf, 0x17d0, 0x66f8, 0x66f5, 0x181c, 0x1823, 0x6783, + 0x6794, 0x6784, 0x1849, 0x678b, 0x678f, 0x1843, + /* 0x54 */ + 0x678c, 0x1848, 0x6789, 0x1847, 0x678e, 0x1846, 0x183f, 0x1844, + 0x6924, 0x690f, 0x18be, 0x6913, 0x690a, 0x18c2, 0x18ba, 0x18bc, + 0x18c6, 0x692a, 0x691a, 0x18c8, 0x6927, 0x6916, 0x6921, 0x1923, + 0x6a85, 0x6aac, 0x6ac6, 0x6ac5, 0x6ad7, 0x6b53, 0x009d, 0x1d28, + 0x1d27, 0x1ddf, 0x0124, 0x1f35, 0x1fb3, 0x0207, 0x228a, 0x227d, + 0x2289, 0x0279, 0x24cd, 0x24d0, 0x0278, 0x272b, 0x2733, 0x2729, + 0x2735, 0x2731, 0x2737, 0x2836, 0x29be, 0x0419, 0x29b9, 0x041c, + 0x29bb, 0x0418, 0x2de2, 0x2ddb, 0x2ddd, 0x2ddc, 0x2dda, 0x85af, + 0x2dd9, 0x05bd, 0x065d, 0x30df, 0x065a, 0x065e, 0x30e1, 0x065c, + 0x30ee, 0x065b, 0x31b5, 0x32d4, 0x32d5, 0x0721, 0x32d0, 0x32d1, + 0x32ce, 0x32d7, 0x0720, 0x0732, 0x367d, 0x368a, 0x07f2, 0x36a7, + 0x07f5, 0x3699, 0x3682, 0x3688, 0x07ee, 0x07ec, + /* 0x55 */ + 0x3686, 0x07ea, 0x3698, 0x369d, 0x07ed, 0x07f3, 0x368f, 0x07f6, + 0x36aa, 0x0848, 0x375d, 0x0849, 0x380a, 0x0975, 0x3bd7, 0x3bd6, + 0x3be5, 0x096f, 0x097b, 0x0973, 0x3bd9, 0x3bda, 0x3bea, 0x0970, + 0x3bf6, 0x7d39, 0x0978, 0x3de3, 0x09fe, 0x3de9, 0x0a00, 0x3deb, + 0x3def, 0x3df3, 0x3dea, 0x0a01, 0x8621, 0x0a55, 0x0a56, 0x0a9d, + 0x3f71, 0x0af9, 0x40ae, 0x0aff, 0x40b3, 0x0afd, 0x40ac, 0x0b43, + 0x0b41, 0x4183, 0x4245, 0x424e, 0x4244, 0x42a3, 0x42a5, 0x43a6, + 0x43a4, 0x0c6f, 0x43a9, 0x43af, 0x0c8a, 0x0ce5, 0x0ce6, 0x44f0, + 0x44f8, 0x44f1, 0x0d7f, 0x4649, 0x0db5, 0x0db6, 0x0dbb, 0x46c2, + 0x46f2, 0x46f3, 0x47fa, 0x0e40, 0x47f6, 0x47fc, 0x4818, 0x4808, + 0x4812, 0x0e9d, 0x0e9c, 0x48db, 0x48da, 0x0f0f, 0x0f11, 0x0f0d, + 0x4a2c, 0x4a4d, 0x0f14, 0x0f13, 0x4b46, 0x4bf6, + /* 0x56 */ + 0x4c2b, 0x4c74, 0x4db8, 0x4dc8, 0x1082, 0x1083, 0x114d, 0x5192, + 0x5193, 0x114f, 0x517f, 0x51ab, 0x5197, 0x114c, 0x1151, 0x51ac, + 0x11ee, 0x11e8, 0x18cb, 0x53ce, 0x11eb, 0x53cd, 0x11e2, 0x11e6, + 0x53c1, 0x53b1, 0x53c7, 0x11ec, 0x5540, 0x1259, 0x553f, 0x5539, + 0x125d, 0x5543, 0x1257, 0x125b, 0x1256, 0x55ab, 0x12fe, 0x571f, + 0x5709, 0x570c, 0x1300, 0x1301, 0x5840, 0x1342, 0x5896, 0x1360, + 0x58f6, 0x58f7, 0x141d, 0x5a46, 0x5a4f, 0x143e, 0x1469, 0x1465, + 0x5b3d, 0x5b41, 0x5f66, 0x5f78, 0x5f5d, 0x5f69, 0x5f74, 0x5f7d, + 0x5f6e, 0x5f72, 0x5f73, 0x5f62, 0x5f48, 0x5f53, 0x5f5f, 0x5f68, + 0x1538, 0x5f7f, 0x5f6b, 0x15ae, 0x61c4, 0x15ad, 0x62af, 0x62ad, + 0x62b2, 0x1602, 0x161f, 0x631a, 0x631b, 0x1622, 0x1620, 0x86f5, + 0x166c, 0x639b, 0x639f, 0x1668, 0x166d, 0x166e, + /* 0x57 */ + 0x16a0, 0x16ce, 0x16d0, 0x16d1, 0x16cb, 0x6440, 0x16d2, 0x6447, + 0x16d3, 0x64b7, 0x1720, 0x174e, 0x174b, 0x1772, 0x1770, 0x65a2, + 0x1792, 0x178f, 0x6600, 0x65f3, 0x1790, 0x8437, 0x65f5, 0x17d9, + 0x17d5, 0x66bd, 0x6700, 0x6702, 0x17fa, 0x6734, 0x6749, 0x679f, + 0x184b, 0x67a3, 0x67cd, 0x6799, 0x679d, 0x18d0, 0x18ce, 0x6939, + 0x18cf, 0x6944, 0x18c4, 0x18cc, 0x6935, 0x18d2, 0x1935, 0x6aaf, + 0x0a03, 0x1d2f, 0x009e, 0x00af, 0x6b8e, 0x020c, 0x229f, 0x229b, + 0x229e, 0x2296, 0x2294, 0x22a0, 0x027c, 0x273b, 0x0330, 0x0331, + 0x273a, 0x29c1, 0x2b4d, 0x2b5d, 0x2df3, 0x05a1, 0x059e, 0x0668, + 0x0661, 0x30f6, 0x30e5, 0x30ea, 0x30e7, 0x3105, 0x0665, 0x30f9, + 0x0666, 0x066a, 0x06ab, 0x36ab, 0x36ed, 0x36b2, 0x36b0, 0x36b5, + 0x36be, 0x36c1, 0x36c8, 0x07f9, 0x36c0, 0x36bc, + /* 0x58 */ + 0x36b1, 0x36c4, 0x36bf, 0x0858, 0x088a, 0x3c08, 0x3c03, 0x3bfd, + 0x3c10, 0x3c02, 0x3c13, 0x0a04, 0x3dfa, 0x3e00, 0x40b9, 0x40bc, + 0x0b02, 0x425b, 0x4251, 0x424f, 0x42eb, 0x43b8, 0x0c79, 0x43b9, + 0x43c1, 0x43c0, 0x43be, 0x450b, 0x0ceb, 0x4507, 0x450a, 0x4508, + 0x0ce9, 0x450d, 0x4506, 0x4515, 0x45af, 0x0d20, 0x0d21, 0x0d81, + 0x46f5, 0x0e4d, 0x0e59, 0x482e, 0x0e58, 0x481b, 0x81d1, 0x481a, + 0x4824, 0x0ea5, 0x0ea9, 0x48e6, 0x48e3, 0x0f1a, 0x0f19, 0x4a5d, + 0x4a4f, 0x4a66, 0x4a5b, 0x4b47, 0x4bb4, 0x0f96, 0x0f98, 0x0f97, + 0x4bfa, 0x4c2e, 0x82df, 0x0fc8, 0x4dce, 0x1043, 0x1045, 0x4e19, + 0x1152, 0x1157, 0x51cc, 0x51b2, 0x1155, 0x51bb, 0x51c1, 0x1156, + 0x1158, 0x11f2, 0x53e9, 0x53ee, 0x53f0, 0x53d6, 0x540e, 0x53da, + 0x5548, 0x554a, 0x554e, 0x554d, 0x55b1, 0x55b0, + /* 0x59 */ + 0x55b3, 0x1307, 0x5738, 0x5732, 0x1308, 0x572d, 0x130a, 0x5734, + 0x0f1b, 0x5729, 0x5874, 0x1361, 0x1362, 0x5903, 0x13c2, 0x13c6, + 0x59a9, 0x5a58, 0x141e, 0x1425, 0x5abf, 0x5ac1, 0x5b4a, 0x5bac, + 0x14b0, 0x5c89, 0x5d3d, 0x5d3c, 0x5da9, 0x5fa0, 0x153d, 0x5f90, + 0x153e, 0x5f93, 0x5f8b, 0x5fad, 0x5fbb, 0x5fb8, 0x1546, 0x1545, + 0x5f9c, 0x61d8, 0x61d7, 0x1603, 0x1626, 0x1627, 0x635d, 0x63a9, + 0x63da, 0x1698, 0x16ad, 0x16d5, 0x16da, 0x6454, 0x16d9, 0x6455, + 0x644b, 0x16dd, 0x643f, 0x64b9, 0x1715, 0x1716, 0x1717, 0x1721, + 0x6538, 0x6536, 0x6540, 0x174c, 0x653b, 0x6539, 0x65a4, 0x1796, + 0x1798, 0x6608, 0x660c, 0x179b, 0x6610, 0x17ff, 0x6707, 0x1825, + 0x67d2, 0x184f, 0x67c2, 0x67bb, 0x67cc, 0x67cb, 0x1856, 0x1854, + 0x694d, 0x6963, 0x694e, 0x18d8, 0x6950, 0x6955, + /* 0x5a */ + 0x18d7, 0x695e, 0x1926, 0x6a90, 0x6ab2, 0x6ab1, 0x1938, 0x6aca, + 0x6b02, 0x6b27, 0x6b26, 0x198a, 0x22af, 0x24e0, 0x24dc, 0x0334, + 0x2739, 0x0335, 0x856a, 0x277c, 0x27f3, 0x8570, 0x03a1, 0x286b, + 0x29c4, 0x310b, 0x3108, 0x310a, 0x066c, 0x066d, 0x31dc, 0x0729, + 0x072a, 0x32e1, 0x32df, 0x36ce, 0x36d4, 0x36e3, 0x36d7, 0x36e2, + 0x0800, 0x0808, 0x0806, 0x0805, 0x36d8, 0x36d5, 0x36d2, 0x08b1, + 0x0988, 0x3c1e, 0x3c2c, 0x3c25, 0x3bf3, 0x3e04, 0x3e08, 0x3e15, + 0x0a09, 0x40c4, 0x40c9, 0x40c7, 0x40c8, 0x42a9, 0x43c6, 0x43c5, + 0x4518, 0x451a, 0x4520, 0x0d22, 0x4666, 0x4664, 0x466a, 0x0dd5, + 0x0e61, 0x0e5d, 0x0e62, 0x0e4f, 0x0e60, 0x4835, 0x4834, 0x0eaa, + 0x0f22, 0x4a6c, 0x0f21, 0x4a6e, 0x4a71, 0x1046, 0x4dd4, 0x4dd6, + 0x4e1a, 0x4e62, 0x4e65, 0x4e76, 0x51db, 0x51d6, + /* 0x5b */ + 0x1162, 0x51e7, 0x1160, 0x1164, 0x51f4, 0x86b6, 0x53fd, 0x53d5, + 0x5407, 0x11f6, 0x540f, 0x53f8, 0x86c1, 0x1219, 0x5587, 0x1291, + 0x55b5, 0x55f5, 0x130d, 0x573f, 0x5743, 0x574c, 0x1365, 0x590b, + 0x5a6b, 0x5a68, 0x5a70, 0x5a75, 0x5a77, 0x143f, 0x5ac3, 0x154b, + 0x5fe9, 0x5fea, 0x5fcb, 0x5fc5, 0x5fc6, 0x1548, 0x5fed, 0x5fd3, + 0x1552, 0x5fe5, 0x154a, 0x1551, 0x5fdb, 0x5feb, 0x5fe0, 0x5fc1, + 0x1550, 0x154c, 0x61dd, 0x15ee, 0x1604, 0x1606, 0x162d, 0x162e, + 0x162f, 0x167b, 0x1678, 0x1677, 0x63b2, 0x63b4, 0x63b1, 0x63b5, + 0x63f2, 0x16a2, 0x16a1, 0x16e3, 0x6456, 0x171a, 0x1719, 0x1757, + 0x6544, 0x179e, 0x6626, 0x661f, 0x6618, 0x6621, 0x6617, 0x17dd, + 0x6709, 0x1805, 0x1828, 0x67c5, 0x67df, 0x1860, 0x67e3, 0x1866, + 0x67e9, 0x67ee, 0x1867, 0x1868, 0x6966, 0x697a, + /* 0x5c */ + 0x18de, 0x696e, 0x6991, 0x6983, 0x6976, 0x697e, 0x696d, 0x18e1, + 0x6a95, 0x6ae3, 0x1969, 0x1977, 0x6b03, 0x6b04, 0x8719, 0x6b17, + 0x00a6, 0x1d36, 0x00a5, 0x1f36, 0x0214, 0x2742, 0x0336, 0x0338, + 0x2744, 0x2746, 0x277e, 0x29ca, 0x29c8, 0x29cc, 0x2af0, 0x0670, + 0x3185, 0x32e5, 0x32e7, 0x072b, 0x0811, 0x080a, 0x36f4, 0x080d, + 0x36e9, 0x0816, 0x0810, 0x0809, 0x080e, 0x087a, 0x3c3d, 0x098c, + 0x3c36, 0x0991, 0x3e16, 0x0a0a, 0x3e12, 0x3e0f, 0x3e17, 0x3e11, + 0x3e0b, 0x0a08, 0x0a0b, 0x40cd, 0x40d0, 0x40cc, 0x40ce, 0x40d1, + 0x0b07, 0x4189, 0x0cf2, 0x466f, 0x484b, 0x4844, 0x4855, 0x0eae, + 0x0f24, 0x0f26, 0x0f27, 0x4a7f, 0x5771, 0x0f99, 0x4c2f, 0x4c7a, + 0x4c7b, 0x4c7c, 0x115f, 0x116a, 0x1171, 0x51fc, 0x5210, 0x5202, + 0x116c, 0x116f, 0x51ee, 0x5203, 0x1168, 0x520d, + /* 0x5d */ + 0x5213, 0x5208, 0x520f, 0x5418, 0x5412, 0x1201, 0x1268, 0x5567, + 0x5565, 0x55bb, 0x5769, 0x5762, 0x1313, 0x576e, 0x1316, 0x5761, + 0x1318, 0x5764, 0x574d, 0x5851, 0x1389, 0x13c8, 0x5a83, 0x5ac6, + 0x1484, 0x601f, 0x1554, 0x6004, 0x6017, 0x6008, 0x6005, 0x1556, + 0x5ff3, 0x601e, 0x6002, 0x601a, 0x601b, 0x6027, 0x601c, 0x155a, + 0x62b5, 0x1605, 0x1607, 0x6333, 0x1631, 0x6334, 0x6331, 0x63b8, + 0x63ba, 0x16a3, 0x63fc, 0x16eb, 0x171c, 0x64c3, 0x175a, 0x654d, + 0x175b, 0x662f, 0x17a6, 0x17aa, 0x17a5, 0x66c9, 0x17e1, 0x66c8, + 0x66c4, 0x672a, 0x6738, 0x6750, 0x182a, 0x680a, 0x67fb, 0x6804, + 0x67fc, 0x67fe, 0x1872, 0x186f, 0x1873, 0x6802, 0x67f6, 0x681b, + 0x67f9, 0x6815, 0x6810, 0x67ff, 0x6800, 0x680c, 0x186b, 0x18e6, + 0x6995, 0x69a5, 0x18e9, 0x18ec, 0x18e8, 0x18f0, + /* 0x5e */ + 0x6a98, 0x6ac1, 0x198c, 0x6b5a, 0x1d64, 0x22bb, 0x0215, 0x24e6, + 0x2749, 0x27f7, 0x0371, 0x0426, 0x29d0, 0x04c6, 0x2bc2, 0x05a8, + 0x3111, 0x0673, 0x36ff, 0x36fe, 0x36fd, 0x0815, 0x3701, 0x0998, + 0x0997, 0x3c4b, 0x3c4d, 0x3c47, 0x40d3, 0x4268, 0x4267, 0x0bd7, + 0x0c80, 0x43d1, 0x4530, 0x4532, 0x452e, 0x0d88, 0x6b9d, 0x46c9, + 0x46c8, 0x0e69, 0x4856, 0x4851, 0x0e6b, 0x0f29, 0x0f28, 0x4a85, + 0x4a89, 0x4a8e, 0x4a84, 0x105f, 0x4e6a, 0x522b, 0x522f, 0x5228, + 0x1174, 0x5216, 0x5215, 0x521d, 0x541a, 0x1202, 0x126a, 0x1294, + 0x55bc, 0x5775, 0x577c, 0x138a, 0x5911, 0x5912, 0x5b5c, 0x5dbb, + 0x1564, 0x5ff4, 0x155e, 0x1561, 0x602d, 0x1565, 0x1566, 0x62e4, + 0x6337, 0x6336, 0x6367, 0x63be, 0x63bd, 0x63e2, 0x6468, 0x6466, + 0x64c8, 0x64ca, 0x64c7, 0x64dc, 0x175f, 0x654f, + /* 0x5f */ + 0x65a9, 0x663c, 0x17af, 0x663b, 0x66ce, 0x180d, 0x6714, 0x6753, + 0x187c, 0x682e, 0x187a, 0x681f, 0x1876, 0x1879, 0x187d, 0x1877, + 0x69b0, 0x69bd, 0x18f6, 0x18f1, 0x69ae, 0x69c4, 0x6a7b, 0x0c0b, + 0x1929, 0x6a9e, 0x196f, 0x6b05, 0x199a, 0x6b69, 0x6ba1, 0x22c7, + 0x231d, 0x274a, 0x29d3, 0x0469, 0x2b72, 0x2e02, 0x05ab, 0x2e35, + 0x3127, 0x311e, 0x311f, 0x072c, 0x072d, 0x3707, 0x3706, 0x0817, + 0x099a, 0x3c54, 0x3e1c, 0x3e20, 0x46f8, 0x0e6e, 0x485d, 0x4858, + 0x0f2c, 0x4a92, 0x4b4e, 0x0fca, 0x1178, 0x1206, 0x5427, 0x1207, + 0x5781, 0x5783, 0x1320, 0x5844, 0x1353, 0x13ce, 0x147a, 0x1479, + 0x6042, 0x604d, 0x6054, 0x604e, 0x156b, 0x6043, 0x1567, 0x156d, + 0x633c, 0x6340, 0x63c0, 0x1685, 0x16b0, 0x16f3, 0x1763, 0x655a, + 0x6651, 0x17b6, 0x66dd, 0x1882, 0x187f, 0x6838, + /* 0x60 */ + 0x1886, 0x6845, 0x683a, 0x1884, 0x6835, 0x18fc, 0x18fd, 0x18fa, + 0x6af1, 0x1987, 0x6b93, 0x1e9a, 0x021a, 0x0219, 0x5241, 0x29d7, + 0x0675, 0x3128, 0x081a, 0x081b, 0x0819, 0x3c53, 0x3c59, 0x099c, + 0x3e21, 0x0a10, 0x426f, 0x4537, 0x45b5, 0x4862, 0x485e, 0x48f5, + 0x117b, 0x117c, 0x523d, 0x1208, 0x542d, 0x5589, 0x578d, 0x5787, + 0x5790, 0x591a, 0x5a99, 0x1441, 0x14e3, 0x1572, 0x605f, 0x1573, + 0x1568, 0x6056, 0x6061, 0x605b, 0x605a, 0x605c, 0x6065, 0x1635, + 0x6341, 0x1688, 0x169d, 0x646e, 0x646c, 0x646d, 0x0e75, 0x65aa, + 0x665c, 0x6658, 0x66de, 0x188f, 0x684f, 0x6851, 0x188e, 0x6853, + 0x1905, 0x1904, 0x18ff, 0x69fc, 0x6b39, 0x199e, 0x1d3e, 0x0154, + 0x22d2, 0x0281, 0x274f, 0x3714, 0x0cfa, 0x4672, 0x4673, 0x0f32, + 0x1270, 0x126e, 0x5791, 0x86d6, 0x147c, 0x5dbf, + /* 0x61 */ + 0x1575, 0x606c, 0x1574, 0x1577, 0x62e6, 0x6345, 0x1637, 0x63c8, + 0x63e4, 0x655d, 0x17ba, 0x6721, 0x1811, 0x672c, 0x6757, 0x1892, + 0x1899, 0x685d, 0x6861, 0x6865, 0x6a08, 0x190a, 0x192a, 0x192b, + 0x1944, 0x1979, 0x6b45, 0x00aa, 0x0348, 0x2e05, 0x32ef, 0x371b, + 0x371d, 0x3e25, 0x3e24, 0x486d, 0x0eb4, 0x5242, 0x5249, 0x120d, + 0x5578, 0x558a, 0x5797, 0x1354, 0x589b, 0x591c, 0x1430, 0x5aa2, + 0x1609, 0x1638, 0x1636, 0x168b, 0x16f7, 0x1766, 0x17bd, 0x181e, + 0x686c, 0x1896, 0x686f, 0x190d, 0x6a0e, 0x1973, 0x6b08, 0x6b1d, + 0x6ba3, 0x033b, 0x033c, 0x2b60, 0x371c, 0x09a0, 0x0cfb, 0x6cfd, + 0x48f3, 0x1181, 0x579b, 0x5aa7, 0x5dc4, 0x1578, 0x607a, 0x168d, + 0x1773, 0x6661, 0x6663, 0x66d7, 0x6876, 0x19a6, 0x6ba5, 0x05ad, + 0x3c67, 0x0a11, 0x3eab, 0x524a, 0x557d, 0x579d, + /* 0x62 */ + 0x5853, 0x5b65, 0x607b, 0x1639, 0x64cd, 0x64dd, 0x17bf, 0x6730, + 0x6a16, 0x190f, 0x19a7, 0x19b5, 0x0bdc, 0x1431, 0x62e7, 0x6a18, + 0x6aa2, 0x19a8, 0x6b7c, 0x0d25, 0x4a9e, 0x6084, 0x17c1, 0x6a1c, + 0x0d90, 0x4871, 0x63ca, 0x1296, 0x147f, 0x1910, 0x6aa3, 0x160a, + 0x687b, 0x6b97, 0x1912, 0x163a, 0x6350, 0x163b, +}; +static const unsigned short cns11643_3_2uni_page64[292] = { + /* 0x64 */ + 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, + 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, + 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, + 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, + 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x6cfd, 0x1b66, + 0x1b68, 0x1be7, 0x1c3f, 0x6cfd, 0x1ca6, 0x1d0f, 0x1e3e, 0x1f24, + 0x1f65, 0x1f9b, 0x1d7f, 0x20cb, 0x2173, 0x2171, 0x216b, 0x21f4, + 0x2222, 0x2220, 0x2292, 0x22ba, 0x2291, 0x22b0, 0x2359, 0x238a, + 0x240f, 0x2412, 0x2413, 0x2447, 0x249b, 0x2500, 0x254d, 0x26d1, + 0x26d3, 0x2767, 0x2857, 0x2877, 0x28d5, 0x2975, 0x298e, 0x29a5, + 0x29b6, 0x29bf, 0x2a65, 0x2acd, 0x2aed, 0x2b94, 0x2b9a, 0x2bba, + 0x2d25, 0x2d50, 0x2ea3, 0x2f60, 0x2f64, 0x2fb6, + /* 0x65 */ + 0x3003, 0x30b6, 0x311a, 0x4625, 0x2821, 0x32e2, 0x3302, 0x33a4, + 0x33ac, 0x3410, 0x3406, 0x345e, 0x345a, 0x352c, 0x3529, 0x362d, + 0x3677, 0x367a, 0x36ca, 0x36e6, 0x36f5, 0x370d, 0x370e, 0x37dc, + 0x37dd, 0x37f6, 0x381e, 0x3863, 0x39a5, 0x3a0f, 0x3a8a, 0x3a84, + 0x3a8b, 0x3a7c, 0x3b4c, 0x3b48, 0x3b49, 0x3b9d, 0x3b99, 0x3bf8, + 0x3c2e, 0x3c2d, 0x3c5c, 0x45cc, 0x3cbf, 0x3cea, 0x3ce5, 0x3d11, + 0x3d12, 0x3d3f, 0x3d39, 0x3d3b, 0x3d3d, 0x3d77, 0x3d75, 0x3d76, + 0x3d71, 0x3d96, 0x3d93, 0x3db4, 0x3ddd, 0x3dde, 0x3e0e, 0x2511, + 0x3e18, 0x3f47, 0x3f48, 0x3fef, 0x4012, 0x403b, 0x40a4, 0x408d, + 0x40b4, 0x4273, 0x4277, 0x42bc, 0x4419, 0x441b, 0x443d, 0x4453, + 0x4454, 0x4458, 0x44b7, 0x44d8, 0x44ee, 0x4522, 0x454d, 0x4586, + 0x4599, 0x45a3, 0x45bc, 0x46a7, 0x4737, 0x4759, + /* 0x66 */ + 0x47d0, 0x482f, 0x4832, 0x4842, 0x484e, 0x4868, 0x48a9, 0x48ed, + 0x49d0, 0x4a07, 0x49d3, 0x4a64, 0x4b40, 0x6cfd, 0x4c41, 0x4c63, + 0x4cbb, 0x3311, 0x3325, 0x4e48, 0x4f10, 0x4f62, 0x4f12, 0x5021, + 0x501e, 0x50e2, 0x50de, 0x50e1, 0x5173, 0x51d4, 0x51f5, 0x5237, + 0x5245, 0x5272, 0x534a, 0x53a9, 0x53a5, 0x53f5, 0x5434, 0x5450, + 0x5487, 0x5554, 0x5584, 0x5703, 0x5852, 0x58d8, 0x590c, 0x5918, + 0x59b0, 0x5abc, 0x5ad5, 0x5baa, 0x5c9c, 0x6cfd, 0x5d5c, 0x5e2b, + 0x5e21, 0x5e73, 0x5ef4, 0x5ef5, 0x5f3f, 0x5f42, 0x5f86, 0x5fbe, + 0x5fbc, 0x5fbd, 0x5ff1, 0x5ff2, 0x5fef, 0x6022, 0x6023, 0x6024, + 0x6067, 0x6066, 0x6197, 0x61ce, 0x61e7, 0x633b, 0x634d, 0x64e4, + 0x6542, 0x671d, 0x6798, 0x6cfd, 0x6949, 0x3049, 0x2a71, 0x2a85, + 0x2dd3, 0x650e, 0x4c02, 0x441e, 0x6cfd, 0x6cfd, + /* 0x67 */ + 0x2128, 0x2172, 0x21ba, 0x21f0, 0x21ee, 0x22b8, 0x22b9, 0x22c4, + 0x4c53, 0x5eb0, +}; + +static const ucs4_t cns11643_3_2uni_upages[136] = { + 0x03400, 0x03500, 0x03600, 0x03700, 0x03800, 0x03900, 0x03a00, 0x03b00, + 0x03c00, 0x03d00, 0x03e00, 0x03f00, 0x04000, 0x04100, 0x04200, 0x04300, + 0x04400, 0x04500, 0x04600, 0x04700, 0x04800, 0x04900, 0x04a00, 0x04b00, + 0x04c00, 0x04d00, 0x04e00, 0x04f00, 0x05000, 0x05100, 0x05200, 0x05300, + 0x05400, 0x05500, 0x05600, 0x05700, 0x05800, 0x05900, 0x05a00, 0x05b00, + 0x05c00, 0x05d00, 0x05e00, 0x05f00, 0x06000, 0x06100, 0x06200, 0x06300, + 0x06400, 0x06500, 0x06600, 0x06700, 0x06800, 0x06900, 0x06a00, 0x06b00, + 0x06c00, 0x06d00, 0x06e00, 0x06f00, 0x07000, 0x07100, 0x07200, 0x07300, + 0x07400, 0x07500, 0x07600, 0x07700, 0x07800, 0x07900, 0x07a00, 0x07b00, + 0x07c00, 0x07d00, 0x07e00, 0x07f00, 0x08000, 0x08100, 0x08200, 0x08300, + 0x08400, 0x08500, 0x08600, 0x08700, 0x08800, 0x08900, 0x08a00, 0x08b00, + 0x08c00, 0x08d00, 0x08e00, 0x08f00, 0x09000, 0x09100, 0x09200, 0x09300, + 0x09400, 0x09500, 0x09600, 0x09700, 0x09800, 0x09900, 0x09a00, 0x09b00, + 0x09c00, 0x09d00, 0x09e00, 0x09f00, 0x0ff00, 0x20000, 0x20100, 0x20200, + 0x20500, 0x20600, 0x20b00, 0x20d00, 0x21300, 0x21600, 0x21700, 0x21d00, + 0x22300, 0x22500, 0x23000, 0x23500, 0x23c00, 0x24000, 0x24a00, 0x25100, + 0x25900, 0x25c00, 0x26500, 0x28c00, 0x29900, 0x2f800, 0x2f900, 0x2fa00, +}; + +static int +cns11643_3_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x62) || (c1 >= 0x64 && c1 <= 0x67)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + ucs4_t wc = 0xfffd; + unsigned short swc; + if (i < 6298) { + if (i < 6148) + swc = cns11643_3_2uni_page21[i], + wc = cns11643_3_2uni_upages[swc>>8] | (swc & 0xff); + } else { + if (i < 6590) + swc = cns11643_3_2uni_page64[i-6298], + wc = cns11643_3_2uni_upages[swc>>8] | (swc & 0xff); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + diff --git a/jni/parted/libiconv/lib/cns11643_4.h b/jni/parted/libiconv/lib/cns11643_4.h new file mode 100755 index 0000000..5aa04a0 --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_4.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 4 + */ + +/* + * The table has been split into two parts. Each part's entries fit it 16 bits. + * But the combined table would need 17 bits per entry. + */ +#include "cns11643_4a.h" +#include "cns11643_4b.h" + +static int +cns11643_4_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x6e)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + ucs4_t wc = 0xfffd; + unsigned short swc; + { + if (i < 2914) + swc = cns11643_4a_2uni_page21[i], + wc = cns11643_4a_2uni_upages[swc>>8] | (swc & 0xff); + else if (i < 7298) + swc = cns11643_4b_2uni_page40[i-2914], + wc = cns11643_4b_2uni_upages[swc>>8] | (swc & 0xff); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} diff --git a/jni/parted/libiconv/lib/cns11643_4a.h b/jni/parted/libiconv/lib/cns11643_4a.h new file mode 100755 index 0000000..779685c --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_4a.h @@ -0,0 +1,459 @@ +/* + * Copyright (C) 1999-2002 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 4 part a + */ + +static const unsigned short cns11643_4a_2uni_page21[2914] = { + /* 0x21 */ + 0x5a86, 0x1840, 0x1841, 0x185a, 0x75e8, 0x1802, 0x1829, 0x5b0e, + 0x6027, 0x1c02, 0x013e, 0x27dc, 0x5f3c, 0x6075, 0xd128, 0x1d42, + 0x1d6a, 0x2552, 0x6f3c, 0xd175, 0xd178, 0x29c4, 0x2c4c, 0x39ad, + 0x1812, 0x182f, 0x1896, 0x18d0, 0x1b42, 0x1b83, 0xd119, 0x60a5, + 0x60aa, 0x630f, 0x640e, 0x1d83, 0x1db8, 0x659c, 0x659b, 0x6a3c, + 0x2328, 0x71c2, 0x2623, 0x2801, 0x2900, 0x87b4, 0x08b8, 0x376c, + 0x392b, 0x1b88, 0x4879, 0x51b6, 0x1817, 0x5a65, 0x000c, 0x5bb2, + 0x0030, 0x18e2, 0x18db, 0x5e77, 0x5f42, 0x1bad, 0x6033, 0x1bf7, + 0x00da, 0x60af, 0x6236, 0x0113, 0x1d1b, 0x1d88, 0x1d87, 0x6522, + 0x1dcf, 0x1dfd, 0x0163, 0x1de7, 0x20dc, 0x69a3, 0x20d9, 0x2125, + 0x2127, 0x2333, 0x2613, 0x7225, 0x7224, 0x2675, 0x7652, 0x7789, + 0x7abf, 0x05c4, 0x05c3, 0x2ff1, 0x87b5, 0xa24c, + /* 0x22 */ + 0x4552, 0xc714, 0xc712, 0x0001, 0x5aa3, 0x5aa2, 0x1851, 0x186a, + 0x5bb6, 0x190c, 0x5bb5, 0x5bb4, 0x18fe, 0x191b, 0x5bc2, 0x5bb8, + 0x003a, 0x5e79, 0x00ab, 0x1b73, 0x5f08, 0x1b8e, 0x5f7a, 0x5fb6, + 0x60bd, 0x60b7, 0x60bc, 0x00dd, 0x60c4, 0x60c9, 0x1ca5, 0x0115, + 0x1ca7, 0x1ca4, 0x6330, 0x6383, 0x6385, 0x6412, 0x6434, 0x1dbd, + 0x64e4, 0x64de, 0x652a, 0x1e02, 0x65af, 0x65b4, 0x65b3, 0x65b1, + 0x212b, 0x231b, 0x2335, 0x6cde, 0x02a7, 0x02a5, 0x6db8, 0x6db0, + 0x02a6, 0x6fc2, 0x59fd, 0x2617, 0x037c, 0x722a, 0x2670, 0x267d, + 0x03a9, 0x75e9, 0x27e9, 0x7657, 0x0434, 0x0435, 0x77b6, 0x77d7, + 0x77de, 0x04a8, 0x2919, 0x291c, 0x2975, 0x7ac2, 0x7bab, 0x04ff, + 0x29c8, 0x7e8f, 0x05c7, 0x05c6, 0x05c8, 0x7f6d, 0x82b5, 0x06d0, + 0x06d1, 0x87c0, 0x87bf, 0x0859, 0x8bb9, 0x8d1c, + /* 0x23 */ + 0x3412, 0x08bd, 0x8e80, 0x9184, 0x9185, 0x0a28, 0x39b3, 0x9524, + 0x0aa9, 0x3a90, 0x3c36, 0xaa4c, 0x0fcc, 0xb1f6, 0x4881, 0x51b8, + 0xc370, 0x14b4, 0xc375, 0xc717, 0x1823, 0x0016, 0x002c, 0x5bf1, + 0x192e, 0x5bda, 0x1b4f, 0x5fb9, 0x1bba, 0x00df, 0x00e0, 0x1c22, + 0x60ce, 0x60d2, 0x60d0, 0x0117, 0x6243, 0x1caf, 0x1cb0, 0x1cb1, + 0x624d, 0x6334, 0x012f, 0x63d9, 0x1d64, 0x6418, 0x1dd3, 0x6538, + 0x016a, 0x65d7, 0x0170, 0x016d, 0x65dc, 0x65cb, 0x65d6, 0x65d8, + 0x016e, 0x65d1, 0xd13e, 0xd13c, 0x65d2, 0x022b, 0x0228, 0x6a59, + 0x59fd, 0x233f, 0x6ce5, 0x6ce6, 0x0292, 0x6ce8, 0x238b, 0x6dbd, + 0x2391, 0x2395, 0x6dbe, 0x6f49, 0x033f, 0x6fcd, 0x258a, 0x034f, + 0x0374, 0x715e, 0x71d0, 0x037d, 0x7306, 0x03b7, 0x03a3, 0x03b0, + 0x03b1, 0x2687, 0x03ab, 0x737c, 0x7371, 0x75ef, + /* 0x24 */ + 0x043a, 0x0437, 0x280d, 0x0438, 0x0440, 0x778d, 0x77b7, 0x288e, + 0x049f, 0x7933, 0x797f, 0x297a, 0x7bf2, 0x0504, 0x0509, 0x0506, + 0x04fd, 0x050a, 0x0507, 0x7f2a, 0x7f8b, 0x05ca, 0x7f83, 0x7f8a, + 0x2c90, 0x05c9, 0x7f8e, 0x2c9a, 0x82b6, 0x2e3c, 0x2e3a, 0x067f, + 0x2e98, 0x84d8, 0x06d2, 0x8556, 0x87d2, 0x3065, 0xd1db, 0x0743, + 0x87c2, 0x8a87, 0x8a81, 0x8bc2, 0x8bbc, 0x8d23, 0x08c1, 0x8e93, + 0x08c5, 0x09a3, 0x918d, 0x918e, 0x0a2a, 0x0a5f, 0x953b, 0x954d, + 0x0a5d, 0x9534, 0x9531, 0x96f2, 0x96f0, 0x0b17, 0x9a15, 0x9b28, + 0x0b71, 0x0b72, 0x9c25, 0x9de7, 0x0c0f, 0x9de9, 0xa017, 0x40c2, + 0x0d91, 0xa96c, 0xa980, 0xaa4b, 0x0fb2, 0x0fcf, 0x0fce, 0x469e, + 0xafde, 0xaffb, 0x47eb, 0xb051, 0x4889, 0x1096, 0xb201, 0xb202, + 0x4896, 0xb205, 0x4887, 0xb203, 0x1097, 0xc151, + /* 0x25 */ + 0x51c0, 0x148b, 0x51c3, 0xc153, 0xc37a, 0xc378, 0xc376, 0xc379, + 0xc38f, 0xc37c, 0x5578, 0xc71b, 0xc71c, 0x5625, 0x8f92, 0x1875, + 0x1874, 0x5b2e, 0x5b2c, 0x002d, 0x5c0c, 0x1999, 0x5c0b, 0x0050, + 0x004b, 0x5c05, 0x004f, 0x004c, 0xd105, 0x1971, 0x1b53, 0x1bbf, + 0x5fc2, 0x5fc3, 0x1bc0, 0x6048, 0x1bee, 0x6046, 0x00e4, 0x00e3, + 0x60ea, 0x00e1, 0x60eb, 0x00e2, 0x60ee, 0x1c3d, 0x0119, 0x1cbd, + 0x1d0c, 0x62d8, 0x9a1e, 0x63df, 0x63de, 0x0141, 0x4537, 0x644f, + 0x1dc0, 0x015e, 0x660d, 0x6608, 0x0179, 0x6609, 0x1e6e, 0x1e83, + 0x6612, 0x6665, 0x1e5e, 0x1e5d, 0x217e, 0x2179, 0x6a89, 0x217a, + 0x216c, 0x6a84, 0x6a9e, 0x6a8b, 0x0232, 0x2187, 0x6c62, 0x231d, + 0x0294, 0x2346, 0x0297, 0x6cf9, 0x2343, 0x6cf7, 0x0296, 0x0298, + 0x6d06, 0x6ddd, 0x02b2, 0x6dd9, 0x6ddf, 0x6de2, + /* 0x26 */ + 0x02b9, 0x2561, 0x2566, 0x5af1, 0x2590, 0x0375, 0x037f, 0x037e, + 0x2629, 0x038f, 0x723f, 0x723e, 0x730b, 0x03bd, 0x26b2, 0x7383, + 0x03bb, 0x03bc, 0x7386, 0x26c0, 0x767c, 0x043d, 0x043e, 0x0474, + 0x77f7, 0x047a, 0x0476, 0x0478, 0x0475, 0x77fb, 0x793b, 0x04af, + 0x04b0, 0x04c7, 0x04cc, 0x7bf9, 0x7bca, 0x0516, 0x7bff, 0x0512, + 0x051d, 0x7c09, 0x7c03, 0x0515, 0x050f, 0x0514, 0x2a1f, 0x29e2, + 0x7c10, 0x7e9a, 0x7e9f, 0x05b0, 0x05bf, 0x05c0, 0x7f87, 0x05d2, + 0x05d9, 0x82b7, 0x067a, 0x8308, 0x82f9, 0x0681, 0x0682, 0x82f4, + 0x2f16, 0x2ef9, 0x06da, 0xad57, 0x3088, 0x87d6, 0x309b, 0xd1de, + 0x306e, 0x309e, 0x87d4, 0x0822, 0x081f, 0x8a90, 0x8a8d, 0x0821, + 0x3324, 0x8b60, 0x8bce, 0x8bcf, 0x085c, 0x337d, 0x8bd1, 0x087d, + 0x088d, 0x088f, 0x34e6, 0x8eca, 0x34cb, 0x08d0, + /* 0x27 */ + 0x8eb7, 0x08d8, 0x8eb2, 0x8ebb, 0x8eb9, 0x34b5, 0x09a7, 0x919e, + 0x3797, 0x91b2, 0x379b, 0x0a12, 0x936f, 0x93ac, 0x0a2f, 0x9423, + 0x396b, 0x0a2e, 0x0a2c, 0x0a5c, 0x956c, 0x39d5, 0x9532, 0x955e, + 0x0a62, 0x0a67, 0x0ab4, 0x96fb, 0x9929, 0x99bd, 0x9a1f, 0x3c43, + 0x7941, 0x9a1d, 0x3c9c, 0x9b31, 0x9b2f, 0x0bea, 0x9d43, 0x0bfb, + 0x9d41, 0x0c14, 0x9df5, 0x0c13, 0x0c12, 0x0c10, 0x0c11, 0x9df2, + 0x0c86, 0x3ee4, 0x0c98, 0xa01e, 0xa254, 0x0d2a, 0xa256, 0xa329, + 0xa327, 0xa328, 0x41ce, 0x0eb5, 0xa979, 0xa97e, 0xabb6, 0xabb7, + 0x4613, 0x0fd6, 0x0fd8, 0x46b7, 0x0fd9, 0x0fd4, 0x0fd7, 0xd281, + 0x46b9, 0x59fd, 0xad4d, 0x47e4, 0x47fd, 0x480f, 0x1060, 0xb109, + 0xb108, 0x109e, 0x10a1, 0xb21e, 0xb21a, 0xb223, 0xb215, 0xb219, + 0xb216, 0x48bf, 0x48ca, 0xb214, 0xb218, 0x48c1, + /* 0x28 */ + 0x10a0, 0xb51f, 0xb6dd, 0xb6df, 0xc169, 0x51d0, 0x59fd, 0xc16c, + 0x14b9, 0xc393, 0x52ae, 0xc395, 0xc394, 0xc391, 0xc397, 0xc730, + 0x15c1, 0x15c2, 0x5638, 0xd318, 0x001c, 0x5c31, 0x005e, 0x19bc, + 0x0059, 0x005c, 0x5c36, 0x005f, 0x19e9, 0x19bd, 0x19e2, 0x1b58, + 0x5fc9, 0x5fca, 0x00ce, 0x6118, 0x6112, 0x6119, 0x6110, 0x6116, + 0x1cc6, 0x625f, 0x1cc8, 0x62df, 0x6317, 0x1d28, 0x633c, 0x1d29, + 0x63ea, 0x63e9, 0x641c, 0x6458, 0x6464, 0x64f3, 0x015f, 0x6697, + 0x0185, 0x665a, 0x6659, 0x0186, 0x668e, 0x21b4, 0x6abc, 0x21a9, + 0x0287, 0x6d0d, 0x6cfc, 0x6d0c, 0x6e07, 0x6e0a, 0x02ca, 0x6e02, + 0x02c3, 0x6e26, 0x6e08, 0x6e1d, 0x02c2, 0x2568, 0x6f4e, 0x0341, + 0x6fed, 0x6fee, 0x6fef, 0x0380, 0x0381, 0x7250, 0x724c, 0x0393, + 0x0392, 0x724f, 0x03c5, 0x73d4, 0x59fd, 0x73b0, + /* 0x29 */ + 0x0446, 0x0441, 0x0445, 0x0442, 0x043f, 0x76a5, 0x7809, 0x0482, + 0x0481, 0x047f, 0x04a5, 0x292b, 0x04b3, 0x04b5, 0x79f3, 0x79d7, + 0x298d, 0x04da, 0x7adc, 0x04db, 0x050d, 0x2a18, 0x050e, 0x7c0b, + 0x051e, 0x0525, 0x0526, 0x051c, 0x0521, 0x2a57, 0x2a48, 0x0527, + 0x051a, 0x7c3a, 0x7c0d, 0x7c11, 0x2a38, 0x7c20, 0x7c01, 0x0524, + 0x7c37, 0xd1a3, 0x2a71, 0x7eaa, 0x05c1, 0x05e1, 0x7fe7, 0x7fe8, + 0x2d12, 0x05eb, 0x7ff5, 0x05e2, 0x05d7, 0x05e9, 0x8035, 0x7fe6, + 0x2d0a, 0x7ff8, 0x2d23, 0x7ff1, 0x0684, 0x8314, 0x8315, 0x8309, + 0x06b5, 0x06bc, 0x06dc, 0x06de, 0x06df, 0x857b, 0x2f2a, 0x857e, + 0x8766, 0x8767, 0x880a, 0x0754, 0x30e0, 0x30be, 0x0753, 0x0824, + 0x0825, 0x3329, 0x0828, 0x0827, 0x8a9c, 0x8b62, 0x8be1, 0x8bde, + 0x8bdf, 0x8be9, 0x088b, 0x8ee4, 0x8ef7, 0x08dc, + /* 0x2a */ + 0x3543, 0x8eea, 0x8ef6, 0x8f12, 0xd201, 0x37a6, 0x09b2, 0x37c0, + 0x91d9, 0x392f, 0x935f, 0x0a1b, 0x9373, 0x0a32, 0x3971, 0x943f, + 0x9578, 0x0a6b, 0x957d, 0x0a6c, 0x0a6d, 0x9712, 0x0ab9, 0x0aba, + 0x0b09, 0x0b0a, 0x992f, 0x3bea, 0x0b1b, 0x9930, 0x99db, 0x3c20, + 0x0b58, 0x9a29, 0x0b5a, 0xd236, 0x9b40, 0x0b77, 0x9b3d, 0x9b3e, + 0x0b79, 0x3ca9, 0x9b38, 0x3d85, 0x9c48, 0x0beb, 0x9cd0, 0x0bfd, + 0x0bfc, 0x3e06, 0x0c15, 0x0c18, 0x3df6, 0x0c16, 0x0c17, 0x0c19, + 0x3e00, 0x0c1b, 0x9e0e, 0x9e09, 0x3e02, 0x9e07, 0x0c87, 0x9f5f, + 0x9f60, 0x0c9c, 0xa02a, 0x0c9a, 0xa029, 0x0cff, 0x0cfe, 0xa14d, + 0x0d31, 0x0d2e, 0x0d30, 0x0d32, 0xa26c, 0x59fd, 0x0d2f, 0xa267, + 0x0d95, 0x0d96, 0xa339, 0xa334, 0xa459, 0x0dc5, 0x0e7a, 0xa923, + 0x0f42, 0xa982, 0x0f54, 0xa983, 0xa9a8, 0xaa55, + /* 0x2b */ + 0xaaf9, 0xaaf8, 0xaafc, 0xaafa, 0x4609, 0xd27a, 0x0f9f, 0x0fa0, + 0x0fa2, 0x0fe0, 0xad74, 0x0fe1, 0xad6b, 0xad71, 0x0fdf, 0xad76, + 0xb10e, 0x1062, 0x1061, 0xb110, 0xb10f, 0x10a7, 0xb238, 0xb239, + 0xb23a, 0x48da, 0xb237, 0xb23e, 0x490a, 0x1189, 0xb49c, 0xb52a, + 0xb53a, 0xb52b, 0xb528, 0xb6aa, 0xb70f, 0x121d, 0xb710, 0xb8e6, + 0x132a, 0xbd25, 0xbe8e, 0x13d3, 0x1442, 0x1443, 0xc18b, 0x1491, + 0xc18c, 0xc19a, 0x1490, 0x14bf, 0xc3b3, 0x14bc, 0xc3b2, 0x14c0, + 0x15c7, 0x15c5, 0x5655, 0xc744, 0x5652, 0x1835, 0x5b58, 0x5ca7, + 0x1a34, 0x1a01, 0x5c63, 0x1a0a, 0x0066, 0x5c6a, 0x5c65, 0x5c6b, + 0x00ad, 0x5eed, 0x5fd9, 0x613b, 0x6132, 0x1c58, 0x6135, 0x6131, + 0x613e, 0x6143, 0x6136, 0x626d, 0x011d, 0x62e4, 0x0131, 0x1d2b, + 0x63f4, 0x014c, 0x6469, 0x646b, 0x0195, 0x0191, + /* 0x2c */ + 0x0194, 0x66bf, 0x66c3, 0x66ae, 0x018f, 0x1eec, 0x66b1, 0x1f15, + 0x1efe, 0x66bb, 0x66af, 0x66b0, 0x1ee3, 0x1f16, 0x0240, 0x6aef, + 0x0241, 0x6aed, 0x21d3, 0x6af0, 0x6c93, 0x6d34, 0x6d2b, 0x2359, + 0x2427, 0x02d8, 0x02d2, 0x02da, 0x2428, 0x2410, 0x02d7, 0x240e, + 0x0342, 0x0357, 0x7004, 0x7003, 0x7002, 0x25af, 0x7005, 0x25ba, + 0x25b1, 0x7000, 0x7174, 0x0378, 0x0382, 0x0397, 0x7265, 0x7263, + 0x03c9, 0x73d7, 0x03c8, 0x03d6, 0x03cc, 0x73e8, 0x03d0, 0x73db, + 0x73d8, 0x03ce, 0x03c7, 0x26fc, 0x7409, 0x03cf, 0x03cb, 0x26f2, + 0x26fe, 0x73e5, 0x73e7, 0x27f8, 0x763f, 0x0447, 0x76c0, 0x0448, + 0x76b9, 0x76ba, 0x0483, 0x0485, 0x0484, 0x7820, 0x794f, 0x292c, + 0x04b8, 0x04bc, 0x7a91, 0x7a90, 0x7aee, 0x7af3, 0x7aec, 0x7af1, + 0x7aeb, 0x7af2, 0x7af4, 0x7aed, 0x7c41, 0x7c48, + /* 0x2d */ + 0x7c45, 0x0531, 0x0534, 0x0536, 0x2a82, 0x7c7f, 0x7c8b, 0x0523, + 0x7c3b, 0x7c4e, 0x053a, 0x2a91, 0x2a8f, 0x7c7c, 0x05b4, 0x05b5, + 0x05ed, 0x05ec, 0x05d8, 0x7ff0, 0x8036, 0x803f, 0x8043, 0x8031, + 0x8034, 0x8046, 0x05f6, 0x05e7, 0x802f, 0x82c3, 0x067c, 0x067b, + 0x8336, 0x0688, 0x2e47, 0x2e4c, 0x8321, 0xd1c8, 0x2e8a, 0x8473, + 0x06be, 0x84e6, 0x06e7, 0x06e5, 0x06ee, 0x30e1, 0x314a, 0x883f, + 0x0759, 0x075e, 0x886b, 0x075a, 0x313f, 0x0761, 0x0758, 0x075b, + 0x30bd, 0x8871, 0x075f, 0xd1e2, 0x082a, 0x082d, 0x8ab0, 0x0823, + 0x082b, 0x082c, 0x8bf3, 0x087e, 0xd1f5, 0x0893, 0x0899, 0x8d61, + 0x8d5f, 0x08b3, 0x08e7, 0x08ea, 0x8f28, 0x8f1e, 0x8f29, 0xd202, + 0x8eeb, 0x8f66, 0x09b4, 0x91f6, 0x37c9, 0x0a17, 0x9360, 0x9377, + 0x93bb, 0x0a21, 0x93bc, 0x0a38, 0x0a37, 0x0a74, + /* 0x2e */ + 0x0a73, 0x0a75, 0x95a2, 0x95b2, 0x959e, 0x0a76, 0x0a78, 0x973a, + 0x9738, 0x3aba, 0x0b0c, 0x0b20, 0x0b1e, 0x9a4d, 0x0b5b, 0x9a5e, + 0x0b5c, 0x9b17, 0x0b83, 0x3cc6, 0x0b80, 0x0b81, 0x0b7e, 0x0b88, + 0x0b85, 0x0b89, 0x0b7f, 0x0b8e, 0x9b64, 0x9b67, 0x0b84, 0x3cb7, + 0x3d8c, 0x9c59, 0x3d8d, 0x9cda, 0x0bee, 0x0bed, 0x0bfe, 0x9d51, + 0x0bff, 0x9d55, 0x9e3b, 0x9e34, 0x0c23, 0x9e37, 0x3e17, 0x9e31, + 0x3e1c, 0x0c1f, 0x9e3f, 0x9e59, 0x3e14, 0x9f61, 0x0c8f, 0x0c90, + 0xa058, 0xa062, 0xa050, 0x0ca0, 0xa051, 0x0ca6, 0x0c9f, 0xa046, + 0x0ca7, 0x0ca1, 0xa12d, 0x0d02, 0x0d36, 0xa348, 0xa351, 0xa34a, + 0xa34f, 0xa350, 0xa349, 0xa463, 0x0dc8, 0xa466, 0xa460, 0x0dd8, + 0x420c, 0x0ddd, 0x0ddc, 0xa4f1, 0x0dd7, 0xa507, 0x0dda, 0x0eba, + 0xa79b, 0xa7a3, 0xa79d, 0x0ebe, 0x0ec2, 0x0ebb, + /* 0x2f */ + 0x0ec0, 0xa7a9, 0xa7a7, 0xa7a4, 0x4423, 0xa7ba, 0x77c1, 0xa926, + 0x0f43, 0x0f55, 0xa994, 0xa993, 0x0f57, 0x0f68, 0x4598, 0x4590, + 0xab07, 0xab0d, 0xab02, 0xab0c, 0xab09, 0xab08, 0xab13, 0x0fa1, + 0xabd2, 0x463a, 0xac3e, 0xac3c, 0xad67, 0xad9e, 0x0fea, 0xadad, + 0x0fe7, 0xadd9, 0xad42, 0xada3, 0xada0, 0x0fe8, 0x0fe9, 0xad7c, + 0xb004, 0x1054, 0xb058, 0xb060, 0xb0c9, 0xb0c8, 0x4826, 0x1065, + 0xb11c, 0xb11a, 0x108a, 0xb274, 0x10b0, 0xb26e, 0xb26f, 0xb279, + 0x10bc, 0x492e, 0xb277, 0x4955, 0x491a, 0x10b8, 0x493d, 0xb27c, + 0x10b2, 0xb270, 0x4930, 0x10bd, 0xb27a, 0xb282, 0x118a, 0x4b51, + 0x11a1, 0xb544, 0x11a2, 0xb543, 0x4b88, 0xb545, 0x1215, 0xb725, + 0xb71f, 0x1220, 0x1273, 0xb8e8, 0x4d8e, 0x4d8d, 0xb909, 0xb9b7, + 0xb9b9, 0xba64, 0xba63, 0x4e09, 0x4e14, 0x12b1, + /* 0x30 */ + 0xba62, 0xba65, 0x132b, 0xbbac, 0x1345, 0xbd2a, 0x1397, 0x1398, + 0xbe96, 0x13d5, 0xbfc2, 0xd2de, 0x1493, 0x1496, 0x5207, 0x1494, + 0xc1aa, 0xc1b0, 0x14c7, 0x14c5, 0xc3d4, 0xc3cd, 0xc3d6, 0x14c4, + 0xc4f0, 0x5579, 0x5584, 0x15ce, 0x15ca, 0x15cc, 0x5657, 0x15c9, + 0x56ba, 0x59fd, 0xd04b, 0x5b62, 0x006e, 0x5cb7, 0x1a67, 0x5cac, + 0x5cab, 0x0071, 0x5cc1, 0x00bb, 0x00d3, 0x5fe8, 0x6169, 0x615d, + 0x615f, 0x00f3, 0x00ed, 0x00f5, 0x6164, 0x6162, 0x00f1, 0x00f2, + 0x00f6, 0x0120, 0x62f9, 0x0128, 0x62ee, 0x1d18, 0x1d2c, 0x1d59, + 0x63ab, 0x63ac, 0x63aa, 0x1d68, 0x1d7e, 0x6486, 0x647a, 0x1da1, + 0x6728, 0x01a1, 0x1f5b, 0x01aa, 0x01a9, 0x6731, 0x01b5, 0x01a5, + 0x01a8, 0x1f42, 0x01a7, 0x1f47, 0x672d, 0xd143, 0x1f3d, 0x672b, + 0x6732, 0x1f60, 0x21eb, 0x6b29, 0x6b26, 0x6b53, + /* 0x31 */ + 0x024d, 0x6b33, 0x6b34, 0x6c9d, 0x029c, 0x235f, 0x6d41, 0x02ea, + 0x02e5, 0x6e91, 0x6e69, 0x256f, 0x7022, 0x035e, 0x7034, 0xd16d, + 0x712e, 0x0386, 0x0384, 0x71f4, 0x265a, 0x7428, 0x03d9, 0x741c, + 0x03de, 0x7411, 0x7424, 0x7415, 0x03db, 0x7416, 0x7454, 0x7423, + 0x75ff, 0x0431, 0x76cf, 0x76d0, 0x044b, 0x76ce, 0x0449, 0x044a, + 0x044c, 0x77c7, 0x785c, 0x048a, 0x7836, 0x0489, 0x048b, 0x7843, + 0x04bb, 0x29a2, 0x299d, 0x04e4, 0x7b2a, 0x7b01, 0x29a3, 0x7b0b, + 0x7b0f, 0x053b, 0x052e, 0x053e, 0x0546, 0x0553, 0x7cdf, 0x0544, + 0x7cd2, 0x053f, 0x0542, 0x054f, 0x7ccd, 0x0552, 0x054a, 0x2ac2, + 0x7cdb, 0x055a, 0x2aa5, 0x0549, 0x7ccf, 0x2c1c, 0x7ec0, 0x2c1d, + 0x0603, 0x8081, 0x8082, 0x808a, 0x80a8, 0x808c, 0x2d95, 0x2d9a, + 0x0601, 0x0606, 0x05fb, 0x05f9, 0x808e, 0x0605, + /* 0x32 */ + 0x05fa, 0x808b, 0x2da6, 0x8096, 0x05fe, 0x80cc, 0x067d, 0x068c, + 0x834f, 0x834a, 0x2e50, 0x068e, 0x834b, 0x833d, 0x2e52, 0x8344, + 0x8349, 0x849e, 0x84f3, 0x2ec8, 0x84f5, 0x06f0, 0x06f2, 0x85b3, + 0x2f58, 0x06f1, 0x06e6, 0x85e5, 0x85b6, 0xd1d8, 0x3188, 0x8886, + 0x076f, 0x076d, 0x0769, 0x88b6, 0x8885, 0x076e, 0x88ab, 0x082f, + 0x0830, 0x0863, 0x8c0d, 0x8c8b, 0x8c8c, 0x33b8, 0x0880, 0x33b9, + 0x089a, 0x0894, 0x0896, 0x0895, 0x0897, 0x8d72, 0x08f4, 0x08fe, + 0x8f8f, 0x0901, 0x8f79, 0x0902, 0x8f77, 0x08f9, 0x8f90, 0x8f88, + 0x8f80, 0x8f9e, 0x08f6, 0x08f7, 0x8f82, 0x8f34, 0x8f89, 0x08ff, + 0x8f85, 0x8f7e, 0x8f7a, 0x8fa6, 0x360b, 0x8fb5, 0x91f4, 0x09bf, + 0x09bc, 0x3805, 0x9229, 0x9226, 0x922a, 0x09be, 0x09c0, 0x937e, + 0x0a3b, 0x0a39, 0x945b, 0x9461, 0x9460, 0x0a3c, + /* 0x33 */ + 0x959b, 0x3a14, 0x3a04, 0x95c3, 0x0a7d, 0x95cd, 0x0a7f, 0x0a7a, + 0x0a7c, 0x3a05, 0x0a7e, 0x3a15, 0x3a0d, 0x0a80, 0x0abf, 0x0ac3, + 0x9754, 0x9759, 0x0acc, 0x0b0e, 0x0b0d, 0x98f5, 0x0b26, 0x0b24, + 0x0b25, 0x0b23, 0x0b21, 0x0b29, 0x9a69, 0x9a65, 0x0b8f, 0x0b8d, + 0x9b7c, 0x0b8b, 0x0b92, 0x9b80, 0x0b90, 0x9c65, 0x0bef, 0x0bf0, + 0x9cdf, 0x9d60, 0x0c01, 0x9d5e, 0x0c2e, 0x0c2d, 0x3e2e, 0x0c28, + 0x0c29, 0x0c2c, 0x9e8f, 0x9e61, 0x9e5a, 0x3e41, 0x0c88, 0x9f67, + 0x0c92, 0x0c91, 0x3eea, 0x9fbb, 0x3f44, 0x0ca9, 0x0cac, 0x0cae, + 0x0caa, 0x0d06, 0x0d05, 0x0d4a, 0x0d3e, 0x0d3c, 0x0d3b, 0xa29b, + 0x0d42, 0x0d41, 0x0d43, 0xa2a9, 0x0d45, 0xa366, 0x0d9a, 0x0d9b, + 0x0d9f, 0x0d9e, 0xa472, 0xa476, 0xa514, 0x0dde, 0x0de2, 0x0de6, + 0xa50f, 0x4229, 0x0de3, 0x4227, 0x0ddf, 0xa641, + /* 0x34 */ + 0xa646, 0x439d, 0xa64b, 0xa643, 0x0e7e, 0x0ec9, 0x0ecc, 0xa7c6, + 0x0ed1, 0xa7c7, 0x0ed0, 0xa7ce, 0x0ecf, 0x0ec8, 0xa7c9, 0x0ecd, + 0xa7cb, 0xa7c5, 0x0f49, 0x0f47, 0x0f58, 0x0f6b, 0x0f6c, 0x0f6a, + 0xaa69, 0x0f80, 0x0f82, 0x0f84, 0x45c8, 0x0f83, 0xab1e, 0xabba, + 0x0fb6, 0xac52, 0xac51, 0xac53, 0xad9f, 0xaddb, 0x4726, 0x0ff1, + 0xade3, 0x0ff6, 0x0ff3, 0x0ff0, 0x471c, 0xadd7, 0xade9, 0x4728, + 0x0ff5, 0x0ff4, 0x0ff7, 0xadde, 0xaddc, 0xb03c, 0xd28b, 0x1055, + 0xb122, 0xb132, 0xb123, 0x108b, 0x10cb, 0x10c2, 0xb2d4, 0xb2c8, + 0xb2bc, 0x10ca, 0x10cc, 0xb2cd, 0x10c7, 0x10c9, 0x4970, 0xb2be, + 0x10c6, 0xb340, 0xb2d6, 0x10c3, 0x4982, 0xb2bd, 0x49ac, 0xb2ba, + 0x10c4, 0xb2c0, 0xd29b, 0xd29d, 0xb2c1, 0xb4a6, 0xb4a5, 0xb4a8, + 0x11a9, 0x4bad, 0x11a8, 0x11a6, 0xb55f, 0xb570, + /* 0x35 */ + 0xb56a, 0xb565, 0xb567, 0xb56f, 0xb587, 0x4bca, 0x4c51, 0xb73d, + 0xb743, 0x1222, 0xb740, 0x1226, 0x1224, 0x1225, 0x4c9d, 0x122a, + 0x1274, 0xb918, 0x1279, 0x4d90, 0x127a, 0xb919, 0xb9c1, 0x4dd8, + 0x4dd7, 0x1297, 0xb9bc, 0xb9c8, 0x4e2e, 0xba71, 0x12bc, 0xba6e, + 0x12b3, 0xba78, 0x12bf, 0x12b7, 0xd2cd, 0xba7a, 0xbbb1, 0xbbaf, + 0xbbb0, 0x1334, 0x1346, 0x1348, 0x4f59, 0xbca8, 0xbca6, 0x1356, + 0x1367, 0xbd48, 0xbd45, 0x1368, 0x1399, 0x139a, 0xbea0, 0xbea4, + 0x13d8, 0xbfd4, 0x13db, 0x13dc, 0x13dd, 0x13d7, 0xbfd2, 0xc022, + 0x1449, 0x144a, 0x50da, 0xc0b7, 0xc0cc, 0x5233, 0xc1e6, 0x5218, + 0x149a, 0xc1c8, 0x14cd, 0x14ca, 0xc3f4, 0x14cb, 0xc3ed, 0x14cf, + 0xc37e, 0xd2e3, 0x14cc, 0x14ea, 0x14ed, 0xc4f9, 0xc4fd, 0x14e9, + 0xc507, 0x151a, 0x53ef, 0x158d, 0x15d2, 0xc778, + /* 0x36 */ + 0xc77a, 0xc779, 0xc88a, 0x15f2, 0xc97b, 0xcad5, 0xcae9, 0x163d, + 0xcaeb, 0x163e, 0x16f8, 0x1723, 0x58d9, 0x18b4, 0x5b6c, 0x1aa0, + 0x1a90, 0x0075, 0x1a86, 0x1a84, 0x5cfa, 0x1a8a, 0x0076, 0x0073, + 0x1a9f, 0x1aa1, 0x5d18, 0x1a93, 0x00bd, 0x5ff6, 0x1bd5, 0x618a, + 0x6189, 0x00f9, 0x617f, 0x6188, 0x00fa, 0x6183, 0x6184, 0x6198, + 0x6163, 0x6187, 0x0121, 0xd127, 0x0129, 0x62f5, 0x6350, 0x0138, + 0x014e, 0x6487, 0x648a, 0x6565, 0x67b7, 0x67c1, 0x67c7, 0x01c8, + 0x01bc, 0x67c5, 0x67cb, 0x1f90, 0x67d1, 0x01bb, 0x01c2, 0x01c0, + 0x67b8, 0x67ca, 0x01ca, 0x67de, 0x01c9, 0x67ce, 0x01b8, 0x2110, + 0x2217, 0x6b68, 0x024e, 0x6b6b, 0x2244, 0x0250, 0x222b, 0x6b6a, + 0x2245, 0x6b66, 0x6b77, 0x6b96, 0x6b6e, 0xd156, 0x028a, 0x6d57, + 0x2365, 0x6d56, 0x6e9c, 0x6e9e, 0x02fc, 0x02f9, + /* 0x37 */ + 0x6ea1, 0x0363, 0x7042, 0x25cf, 0x7046, 0x703e, 0x7133, 0x0387, + 0x0388, 0x71fa, 0x039a, 0x7297, 0x729b, 0x72aa, 0x2756, 0x7473, + 0x747c, 0x03e9, 0x7486, 0x03ea, 0x2754, 0x0450, 0x76f3, 0x76f0, + 0x0456, 0x0452, 0x044f, 0x0454, 0x0451, 0x76ec, 0x78af, 0x048e, + 0x048f, 0x7864, 0x7868, 0x795a, 0x293d, 0x7b1f, 0x7b25, 0x04ed, + 0x04eb, 0x29a4, 0x7cc6, 0x7cd6, 0x7cc3, 0x0562, 0x7d2c, 0x055d, + 0x7d2e, 0x7d5e, 0x7d33, 0x0561, 0x0565, 0x055c, 0x7d2d, 0x7d46, + 0x055f, 0x7cc1, 0x7d3a, 0x7ecc, 0x809d, 0x8083, 0x80f6, 0x2dec, + 0x0616, 0x060a, 0x80f8, 0x060e, 0x0612, 0x80fe, 0x80f3, 0x0611, + 0x80eb, 0x80fa, 0x0610, 0x8107, 0x80fc, 0x0609, 0x2dfa, 0x0615, + 0x2dd4, 0x8372, 0x8373, 0x8374, 0x0691, 0x0695, 0x0693, 0x0692, + 0x068f, 0x835f, 0x8360, 0x84aa, 0x8534, 0x06f6, + /* 0x38 */ + 0x85b4, 0x06fb, 0x85f0, 0x2f75, 0x06f9, 0x860d, 0x85f3, 0x860f, + 0x301c, 0x077d, 0x88c9, 0x077a, 0x077f, 0x88c5, 0x0778, 0x88d7, + 0x88cc, 0x31d9, 0x88e7, 0x0770, 0x0782, 0x88c1, 0x0784, 0x88e8, + 0x0833, 0x8acb, 0x0832, 0x0836, 0x8ac8, 0x8b7a, 0x0856, 0x8b79, + 0x8b7e, 0x0867, 0x8c1b, 0x0865, 0x0864, 0x0866, 0x8c1f, 0x8c19, + 0x0881, 0x0882, 0x0883, 0x089e, 0x8d89, 0x33f1, 0x089d, 0x8d8b, + 0x090f, 0x0912, 0x9009, 0x8ffe, 0x9000, 0x0910, 0x0918, 0x900b, + 0x0914, 0x0919, 0x3637, 0x59fd, 0x904a, 0x367d, 0x3686, 0x09c8, + 0x09c4, 0x09c6, 0x9279, 0x09c7, 0x09c3, 0x926c, 0x9299, 0xd21b, + 0x9262, 0x9314, 0x0a19, 0x0a1c, 0x93c8, 0x93d7, 0x940c, 0x0a41, + 0x9470, 0x0a42, 0x0a43, 0x9471, 0x95df, 0x95e4, 0x0a82, 0x95e7, + 0x0a81, 0x0a94, 0x0a84, 0x9790, 0x0ad2, 0x0b0f, + /* 0x39 */ + 0x0b22, 0x994c, 0x0b27, 0x0b2a, 0x3bfa, 0x0b28, 0x994f, 0x0b60, + 0x9a7d, 0x9a7e, 0x9a7c, 0x3c72, 0x9a8d, 0x9b19, 0x0b9b, 0x0b9c, + 0x9bc0, 0x0b93, 0x0b94, 0x3cdc, 0x0ba0, 0x0b99, 0x9bb6, 0x0ba1, + 0x9ba8, 0x0bf1, 0x9ceb, 0x9ce7, 0x9d6f, 0x9ec7, 0x0c36, 0x9e9f, + 0x0c37, 0x0c3f, 0x0c3c, 0x9ec4, 0x0c34, 0x0c39, 0x0c3b, 0x0c35, + 0x0c30, 0x0c32, 0x0c38, 0x0c3e, 0x0c3a, 0x9e9b, 0x9e97, 0x9ec5, + 0x9f6b, 0x9fce, 0x0cb6, 0x3f67, 0xa0b1, 0xa0ae, 0xa0b0, 0x0cb3, + 0x0d09, 0x4077, 0xa23e, 0xa2b5, 0xa2ba, 0x0d4c, 0xa2b2, 0xa2b4, + 0x0d53, 0x0d4d, 0x0d51, 0x0d4f, 0x419b, 0xa377, 0x0da2, 0xa386, + 0xa37b, 0x0dcd, 0xa47e, 0xa52e, 0x0de7, 0xa52f, 0x0df0, 0xa537, + 0x0de9, 0x0dec, 0xa532, 0x0de8, 0x0dee, 0x0e02, 0xa536, 0xa539, + 0xa535, 0xa65c, 0x0e82, 0x0e83, 0x0e86, 0xa67b, + /* 0x3a */ + 0xa661, 0xa7ee, 0xa7eb, 0xa7ef, 0xa820, 0x442a, 0x4465, 0x0f4a, + 0xa930, 0x0f5a, 0x4564, 0xa9be, 0x0f6e, 0xaa67, 0xaa7c, 0x0f70, + 0x0f6f, 0xab24, 0x0f8a, 0x0f87, 0x0f88, 0xab29, 0xabef, 0x4620, + 0x0fb7, 0x0ffd, 0x4720, 0xae0d, 0x1005, 0x473c, 0x1008, 0x1003, + 0x1002, 0x1004, 0x0739, 0x1009, 0x0fff, 0xae64, 0x473f, 0xae15, + 0x0ffc, 0x1001, 0x100a, 0x47f0, 0x47f5, 0x106b, 0x106c, 0xb135, + 0xb136, 0xb134, 0xb137, 0xb347, 0xb32b, 0x10de, 0xb341, 0xb343, + 0x10db, 0xb342, 0x10dd, 0x10e3, 0xb332, 0x10e0, 0x10d9, 0x10d8, + 0x10e4, 0xb344, 0xb34a, 0x10da, 0x10ef, 0xd2a0, 0x4a15, 0x49be, + 0xb354, 0xb36e, 0xb352, 0x10d7, 0x11b3, 0x11bb, 0x4be5, 0x11b2, + 0x4bd2, 0x11ad, 0xb592, 0x11af, 0xd2b8, 0x4be0, 0xb5bf, 0x1216, + 0x1228, 0x1223, 0x4cb3, 0xb741, 0xb769, 0xb765, + /* 0x3b */ + 0x1275, 0x127e, 0x127c, 0xb922, 0xb91d, 0xb9d2, 0xb9da, 0xb9db, + 0x12ce, 0x12cd, 0x12cf, 0x4e53, 0xbaa4, 0xba9e, 0x4e37, 0x4e47, + 0x4e5c, 0xba9d, 0x12c4, 0x12cc, 0x12c8, 0x12c7, 0xbaad, 0xbaa6, + 0xbaa7, 0xbbb3, 0xbbe0, 0xbc35, 0xbc37, 0x135a, 0x136a, 0xbd4a, + 0x136b, 0x136d, 0x136f, 0xbe5e, 0x139e, 0xbec0, 0x13a4, 0x13a3, + 0x13e4, 0x13e8, 0x13e9, 0x13e0, 0x13e3, 0xbff9, 0x13ea, 0x13e1, + 0x13ed, 0x1434, 0x1435, 0x1451, 0x50f0, 0xc1f0, 0x149d, 0xc1f3, + 0xc21b, 0xc1f2, 0xc1fb, 0xc41c, 0xc413, 0x14d0, 0xc40f, 0x14ee, + 0xc516, 0xc511, 0xc512, 0x14f2, 0xc50e, 0x541d, 0x1588, 0xc667, + 0xc6f2, 0xc6da, 0x158f, 0xc6dc, 0x15d8, 0xc894, 0xc89b, 0xc892, + 0xc89a, 0xc988, 0xc986, 0x163f, 0xcaef, 0x1652, 0x576b, 0xcb5e, + 0x1650, 0xcc58, 0x16b1, 0xcc56, 0xcc54, 0x16f9, + /* 0x3c */ + 0xcd9b, 0xce96, 0xcea4, 0x1726, 0x1728, 0xce9a, 0xcf12, 0x0080, + 0x1ac0, 0x0081, 0x5d6b, 0x007e, 0x007f, 0x5d37, 0x5d3c, 0xd10a, + 0x5ef7, 0x00be, 0x5f66, 0x00d6, 0x61a9, 0x61ae, 0x61ad, 0x61c8, + 0x61a5, 0x61b0, 0x6295, 0x1ce5, 0x6325, 0x0134, 0x6499, 0x1daf, + 0x6574, 0x6570, 0x656f, 0x6841, 0x6854, 0x01d5, 0x01d8, 0x6840, + 0x6838, 0x01d4, 0x1fd8, 0x01d9, 0x6852, 0x683a, 0x6857, 0xd14a, + 0x6859, 0x2111, 0x2267, 0x6bb4, 0x6bc0, 0x025d, 0x2243, 0x025e, + 0x0259, 0x6b75, 0x025a, 0x02a0, 0x6d60, 0x6d47, 0x0305, 0x6ef0, + 0x0307, 0x6eef, 0x030e, 0x030c, 0x6eec, 0x6f83, 0x0345, 0x6f84, + 0x6f8f, 0x0364, 0x7061, 0x0365, 0x7069, 0x25dd, 0x0366, 0x7062, + 0x0389, 0x03ec, 0x03f1, 0x2770, 0x276a, 0x03f0, 0x03f8, 0x2774, + 0x275f, 0x74ae, 0x2761, 0x2773, 0x74b2, 0x03f2, + /* 0x3d */ + 0x03f4, 0x770b, 0x0458, 0x7710, 0x770d, 0x045a, 0x0459, 0x0457, + 0x045b, 0x2850, 0x787f, 0x7881, 0x04a6, 0x04c2, 0x04c1, 0x293f, + 0x7a0b, 0x7b4e, 0x04ef, 0x29b0, 0x7dea, 0x7d45, 0x0568, 0x2b35, + 0x2b2d, 0x0573, 0x056e, 0x0574, 0x2b02, 0x0566, 0x7d28, 0x7d5d, + 0x7edc, 0x05b9, 0x2c26, 0x7ed4, 0x060c, 0x8164, 0x8168, 0x0620, + 0x8162, 0x061d, 0x8161, 0x061c, 0x8166, 0x0621, 0x061a, 0x0619, + 0x80f2, 0x8169, 0x8167, 0x067e, 0x839a, 0x839b, 0x8385, 0x839c, + 0x069d, 0x83a4, 0x069e, 0x069c, 0x2e6e, 0x8399, 0x8386, 0x8390, + 0x8481, 0x84ae, 0x2eb1, 0x2ed4, 0x06cd, 0x8538, 0x070b, 0x070a, + 0x2f85, 0x893b, 0x078f, 0x3272, 0x0795, 0x0790, 0x0791, 0x894c, + 0x323a, 0x07b9, 0x8947, 0x8935, 0x0797, 0x079e, 0x8933, 0x078b, + 0x8982, 0x8940, 0x083b, 0x083a, 0x083c, 0x083d, + /* 0x3e */ + 0x0839, 0x083e, 0x086b, 0x086c, 0x8c36, 0x8d0e, 0x08a2, 0x08a1, + 0x089f, 0x8dad, 0x8daa, 0x9017, 0x092d, 0x9067, 0x0936, 0x092b, + 0x9072, 0x0937, 0xd20a, 0x9061, 0x90b0, 0x36ad, 0x0925, 0x092f, + 0x092c, 0x906e, 0x9064, 0x0932, 0x908c, 0x9066, 0x3695, 0x906b, + 0x905f, 0x9074, 0x9065, 0x92bb, 0x92be, 0x09d5, 0x92b9, 0x09d4, + 0x09d6, 0x92ef, 0x09d1, 0x3943, 0x93da, 0x0a46, 0x398f, 0x9490, + 0x95e9, 0x0a8c, 0x0a8a, 0x0a88, 0x9611, 0x960d, 0x95ed, 0x9621, + 0x0add, 0x9781, 0x97b1, 0x9901, 0x0b2d, 0x995e, 0x9962, 0x0b2e, + 0x0b2c, 0x0b2b, 0x0b30, 0x995b, 0x0b4e, 0x9a96, 0x9a93, 0x0b64, + 0x0b61, 0x9a92, 0x3c75, 0xd239, 0x0b70, 0x0ba6, 0x0ba4, 0x9bc4, + 0x9bc7, 0x9bc3, 0x0ba8, 0x0ba2, 0x9bc8, 0x0ba7, 0x3cec, 0x0ba5, + 0x9bca, 0x0ba9, 0x9bc5, 0x9bcf, 0x9bdc, 0x9c7c, + /* 0x3f */ + 0x9d01, 0x0c3d, 0x9ed3, 0x9edc, 0x0c44, 0x0c45, 0x0c46, 0x9ed4, + 0x3e57, 0x9ecc, 0x0c47, 0x0c48, 0x0c42, 0x9ed6, 0x9edb, 0x0c41, + 0x9ed5, 0x9fd9, 0x0c94, 0x9fdd, 0x9fdc, 0x9fe0, 0xa0cc, 0x0cc0, + 0x0cb8, 0x0cc1, 0x0cc2, 0x0cbb, 0x0cbd, 0x0cbf, 0x0cb9, 0x0cb7, + 0xa0d2, 0x0cc7, 0xa0d3, 0x0d0c, 0x0d0b, 0x407b, 0x0d10, 0xa18d, + 0x0d5d, 0x4121, 0x0d5a, 0x0d58, 0x0d56, 0xa2d8, 0x0d54, 0x4116, + 0xa2bc, 0x0da8, 0x0da7, 0x0dcf, 0x0dd0, 0xa48a, 0x41e8, 0xa48b, + 0xa48d, 0x0dd1, 0x0deb, 0xa553, 0x0dfb, 0x426a, 0xa559, 0x0dfd, + 0x0df8, 0x0df7, 0x0e00, 0xa556, 0xa557, 0x0df6, 0x425f, 0xa673, + 0xa81b, 0x0edf, 0xa821, 0xa816, 0xa818, 0x0ee2, 0x0ee4, 0xa844, + 0x4482, 0xa826, 0x0ee3, 0xa936, 0x0f59, 0x0f71, 0x0f8e, 0x0f8c, + 0xab3a, 0x0fa4, 0xabf4, 0x4655, 0x1014, 0xae62, +}; + +static const ucs4_t cns11643_4a_2uni_upages[212] = { + 0x03400, 0x03500, 0x03600, 0x03700, 0x03800, 0x03900, 0x03a00, 0x03b00, + 0x03c00, 0x03d00, 0x03e00, 0x03f00, 0x04000, 0x04100, 0x04200, 0x04300, + 0x04400, 0x04500, 0x04600, 0x04700, 0x04800, 0x04900, 0x04a00, 0x04b00, + 0x04e00, 0x04f00, 0x05000, 0x05100, 0x05200, 0x05300, 0x05400, 0x05500, + 0x05600, 0x05700, 0x05800, 0x05900, 0x05a00, 0x05b00, 0x05c00, 0x05d00, + 0x05e00, 0x05f00, 0x06000, 0x06100, 0x06200, 0x06300, 0x06500, 0x06600, + 0x06700, 0x06800, 0x06900, 0x06b00, 0x06c00, 0x06d00, 0x06e00, 0x07000, + 0x07100, 0x07200, 0x07300, 0x07400, 0x07500, 0x07600, 0x07700, 0x07800, + 0x07900, 0x07a00, 0x07b00, 0x07c00, 0x07d00, 0x07f00, 0x08000, 0x08100, + 0x08200, 0x08300, 0x08400, 0x08600, 0x08800, 0x08900, 0x08a00, 0x08c00, + 0x08e00, 0x08f00, 0x09000, 0x09100, 0x09200, 0x09500, 0x09600, 0x09700, + 0x09a00, 0x0ff00, 0x20000, 0x20100, 0x20200, 0x20300, 0x20400, 0x20500, + 0x20600, 0x20700, 0x20800, 0x20900, 0x20a00, 0x20b00, 0x20c00, 0x20d00, + 0x20e00, 0x21100, 0x21200, 0x21300, 0x21500, 0x21600, 0x21700, 0x21900, + 0x21a00, 0x21b00, 0x21c00, 0x21d00, 0x21e00, 0x21f00, 0x22000, 0x22100, + 0x22200, 0x22300, 0x22400, 0x22500, 0x22600, 0x22700, 0x22900, 0x22a00, + 0x22b00, 0x22c00, 0x22e00, 0x22f00, 0x23000, 0x23100, 0x23200, 0x23300, + 0x23400, 0x23500, 0x23800, 0x23900, 0x23a00, 0x23b00, 0x23c00, 0x23d00, + 0x23e00, 0x24100, 0x24200, 0x24500, 0x24600, 0x24700, 0x24800, 0x24900, + 0x24a00, 0x24b00, 0x24c00, 0x24d00, 0x24f00, 0x25000, 0x25100, 0x25300, + 0x25400, 0x25600, 0x25700, 0x25900, 0x25a00, 0x25b00, 0x25e00, 0x25f00, + 0x26000, 0x26200, 0x26300, 0x26400, 0x26500, 0x26600, 0x26700, 0x26800, + 0x26900, 0x26a00, 0x26b00, 0x26c00, 0x27100, 0x27200, 0x27500, 0x27600, + 0x27700, 0x27800, 0x27900, 0x27b00, 0x27c00, 0x27d00, 0x27e00, 0x27f00, + 0x28200, 0x28400, 0x28500, 0x28600, 0x28700, 0x28800, 0x28c00, 0x28e00, + 0x28f00, 0x29000, 0x29100, 0x29200, 0x29400, 0x29500, 0x29600, 0x29a00, + 0x29d00, 0x2f800, 0x2f900, 0x2fa00, +}; + diff --git a/jni/parted/libiconv/lib/cns11643_4b.h b/jni/parted/libiconv/lib/cns11643_4b.h new file mode 100755 index 0000000..b209091 --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_4b.h @@ -0,0 +1,667 @@ +/* + * Copyright (C) 1999-2002 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 4 part b + */ + +static const unsigned short cns11643_4b_2uni_page40[4384] = { + /* 0x40 */ + 0xb65b, 0xb66a, 0x1011, 0xb668, 0x101b, 0x1012, 0x100e, 0x1015, + 0x3f68, 0x1010, 0xb681, 0x1017, 0x4046, 0x4043, 0x1070, 0x10ed, + 0xbae7, 0x10ee, 0xbae6, 0xbad1, 0xbb11, 0x4181, 0xbad0, 0xbad9, + 0xbb0a, 0x10f4, 0xbada, 0xbadd, 0xbac8, 0xbae2, 0xbae9, 0xbacb, + 0x417c, 0xbacc, 0xbac1, 0x416a, 0xbade, 0x4188, 0x10f2, 0x10f8, + 0x10f3, 0xbb51, 0xbb12, 0x10fa, 0xbae0, 0xbb2b, 0xf6b4, 0xc0d8, + 0xc0d1, 0x4410, 0xc0d2, 0xc0cd, 0x441f, 0x11b6, 0x11b7, 0xc13d, + 0x440f, 0xc0ca, 0x11ba, 0xc0cb, 0x11bc, 0xc0d7, 0xc3f4, 0x123b, + 0x45d3, 0x122f, 0xc487, 0xc48b, 0xc483, 0x1237, 0x1299, 0xc7c5, + 0xc7d2, 0xc7c6, 0xc7d3, 0x12d9, 0x12d8, 0x12d7, 0xc7f0, 0xc7cd, + 0xc7cc, 0xc7dc, 0xc7d6, 0x1336, 0xc9e6, 0xca41, 0xca3f, 0x4987, + 0xcac5, 0xcac0, 0xcac6, 0xcabe, 0xcabf, 0x49c6, + /* 0x41 */ + 0x1370, 0xcb63, 0xccd3, 0xccda, 0xccd5, 0x13a5, 0x13a6, 0x13a9, + 0x13ee, 0x1454, 0xd0ee, 0x1457, 0xd0fc, 0xd214, 0x14a1, 0xd323, + 0xd322, 0xd330, 0xd4b5, 0x14d3, 0xd538, 0x14d4, 0xd53f, 0x14d7, + 0x4dcc, 0x4e6d, 0x4e70, 0x14f7, 0x14f6, 0x14f9, 0x14f8, 0x4f58, + 0x4f42, 0x4f68, 0x4f69, 0xd768, 0xd767, 0x4f43, 0xd765, 0x4f47, + 0x158a, 0xda75, 0xdaf7, 0xdaf3, 0xdaf6, 0x1594, 0xdb00, 0x1593, + 0xdaff, 0xdaf5, 0x529d, 0x15dd, 0x15dc, 0x15f7, 0x53cf, 0xde92, + 0xe006, 0x1642, 0xe007, 0xe06b, 0x1654, 0xe06c, 0x1655, 0xe193, + 0x168f, 0xe194, 0x54f4, 0x16b4, 0x16b3, 0xe262, 0xe263, 0x5509, + 0xe25f, 0xe264, 0xe25b, 0xe259, 0x16fb, 0x16fd, 0xe3a4, 0xe3ac, + 0x55ab, 0x16fc, 0xe4b5, 0x172c, 0x172f, 0xe4ae, 0x172b, 0xe4c5, + 0x1733, 0x1734, 0x55fb, 0xe63b, 0x57ac, 0x57ae, + /* 0x42 */ + 0x57aa, 0x17e8, 0xe8bf, 0xea2b, 0xea84, 0xea80, 0xeb4d, 0xeb4f, + 0x585c, 0xeb4c, 0xed92, 0x195d, 0x1ad2, 0x0085, 0x0088, 0x5fae, + 0x5f79, 0x008e, 0x0084, 0x5f71, 0x1adf, 0x5fb3, 0x0083, 0x5f2c, + 0x5f77, 0x612f, 0x63c3, 0x0102, 0x63cd, 0x0106, 0x0105, 0x63c9, + 0x00fe, 0x0101, 0x0100, 0x63ce, 0x64a5, 0x64a0, 0x64fe, 0x6559, + 0x669a, 0x01e7, 0x1e19, 0x68e4, 0x68d7, 0x68dc, 0x01e6, 0x68e7, + 0x01ed, 0x01e2, 0x01eb, 0x68e5, 0x01e8, 0x01ec, 0x1e0a, 0x0224, + 0x1f9a, 0x6e14, 0x0262, 0x6df1, 0x0261, 0x0260, 0x0264, 0x028b, + 0x6fb6, 0x706e, 0x706c, 0x7081, 0x7142, 0x0319, 0x0316, 0x0318, + 0x0322, 0x711a, 0x031d, 0x0317, 0x031e, 0x7127, 0x7125, 0x7117, + 0x711c, 0x713d, 0x7120, 0x0369, 0x036a, 0x7381, 0x036c, 0x037a, + 0x038a, 0x7509, 0x75c6, 0x75c4, 0x039c, 0x75c5, + /* 0x43 */ + 0x03fd, 0x03f9, 0x76ef, 0x03ff, 0x76df, 0x76de, 0x76ee, 0x76f5, + 0x76ec, 0x03fc, 0x76dd, 0x2385, 0x03fb, 0x0402, 0x045f, 0x2456, + 0x045e, 0x045d, 0x045c, 0x7822, 0x2451, 0x0492, 0x7997, 0x7995, + 0x0494, 0x0495, 0x04d1, 0x7ba9, 0x04f1, 0x7c53, 0x25b1, 0x7c56, + 0x7c55, 0x0577, 0x056f, 0x7de3, 0x7de2, 0x0587, 0x057d, 0x057c, + 0x057e, 0x0585, 0x058b, 0x0586, 0x0580, 0x5dfd, 0x7da9, 0x0578, + 0xf5ab, 0x7e33, 0x7e0a, 0x05ba, 0x8059, 0x0633, 0x81bc, 0x062d, + 0x81c4, 0x81c7, 0x81c6, 0x0637, 0x275a, 0x2763, 0x81b8, 0x81da, + 0x062e, 0x81b7, 0x81c0, 0x063d, 0x81cd, 0x06a0, 0x84bc, 0x84ab, + 0x06a3, 0x8586, 0x299b, 0x875a, 0x29a3, 0x070e, 0x299e, 0x8843, + 0x07b6, 0x89ac, 0x07ab, 0x07ad, 0x07a6, 0x89be, 0x2ab8, 0x07aa, + 0x2aba, 0x07b1, 0x89ab, 0x07a8, 0x07af, 0x07b0, + /* 0x44 */ + 0x07a7, 0x07b2, 0x079d, 0x07a5, 0x07b5, 0x743e, 0x2ac7, 0x2ad7, + 0x8cf9, 0x0841, 0x8cf3, 0x8cf7, 0x2c70, 0x8e45, 0x8e48, 0x0872, + 0x2c9d, 0x086f, 0x0871, 0x8e44, 0x0885, 0x8eaf, 0x8eb1, 0x08a4, + 0x08a5, 0x08a6, 0x8fcf, 0x08a8, 0x8fcb, 0x8fcd, 0x08a3, 0x9050, + 0x91ec, 0x921a, 0x2d16, 0x2d24, 0x91d8, 0x0943, 0x91d0, 0x91d1, + 0x093d, 0x0945, 0x917b, 0x91d2, 0x0944, 0x91d4, 0x91e7, 0x91df, + 0x91de, 0x2d45, 0x91d9, 0x91cf, 0x950d, 0x09e3, 0x2f79, 0x5dfd, + 0x09df, 0x09e4, 0x2f7a, 0x09e5, 0x9538, 0x3054, 0x0a22, 0x0a4a, + 0x98a9, 0x0a49, 0x0a44, 0x0a4b, 0x0a87, 0x0a89, 0x0a92, 0x0a91, + 0x0a90, 0x0a8e, 0x993e, 0x9946, 0x9aed, 0xf630, 0x0b12, 0x0b10, + 0x0b11, 0x9c6c, 0x0b32, 0x0b34, 0x0b37, 0x0b33, 0x0b36, 0x0b35, + 0x0b65, 0x9dac, 0x337c, 0x337b, 0x9ec9, 0x3412, + /* 0x45 */ + 0x0bb0, 0x9f12, 0x0baf, 0x0baa, 0x9efd, 0x9f01, 0x9f11, 0x0bab, + 0x9f89, 0x9f05, 0x9efe, 0x9f0b, 0x9f20, 0x9f04, 0xa088, 0x0bf3, + 0xa102, 0x0bf4, 0xa103, 0x34b6, 0x34e0, 0x0c08, 0x0c4e, 0x0c55, + 0x0c4b, 0xa229, 0xa23b, 0x0c4d, 0x3573, 0xa206, 0x0c52, 0x3572, + 0x0c4c, 0x3570, 0x0c50, 0x0c53, 0xa203, 0x0c51, 0xa378, 0xa379, + 0xa37d, 0x0c89, 0xa37f, 0x0c95, 0x0ccc, 0x0cc8, 0x0cce, 0xa432, + 0x0cca, 0xa400, 0x369d, 0xa422, 0x0ccd, 0xa5a9, 0x0d5c, 0x0d67, + 0x0d69, 0x0d65, 0x0d62, 0xa704, 0x3827, 0x3835, 0xf659, 0x0daa, + 0xa8b8, 0xa99b, 0x0dd2, 0x39a2, 0x0e03, 0x0e0c, 0xaa92, 0x0e09, + 0x0e06, 0x0e05, 0x3989, 0xaa8f, 0x0e0b, 0x0e08, 0xaa98, 0x39a5, + 0xaaae, 0x0e8e, 0xad9d, 0x3ab6, 0x0ee8, 0xaf49, 0xaf50, 0xaf46, + 0x0eea, 0xaf4e, 0x3ba5, 0x3bc3, 0xaf55, 0x0ee9, + /* 0x46 */ + 0x0eeb, 0xaf64, 0x0ef0, 0xb138, 0x0f4b, 0x3dab, 0x0f73, 0x0f75, + 0x0f92, 0x0f91, 0x0f93, 0x3e25, 0x0fa7, 0x0fa6, 0x0fa8, 0x0faa, + 0xb3fe, 0x0fa9, 0x3e59, 0x0fbb, 0x0fbc, 0x0fba, 0x0fbd, 0x1027, + 0x3f85, 0xb6a6, 0x1024, 0x101e, 0x101f, 0x101d, 0x1020, 0x1023, + 0x1029, 0x1022, 0xb69c, 0xb699, 0x101c, 0x3f8e, 0x1028, 0xb6b5, + 0xb6a3, 0xb6a0, 0xb6a7, 0xb69b, 0xb8df, 0xb8e1, 0x1071, 0x1073, + 0x1072, 0xb94d, 0x1102, 0xbbf3, 0xbb6f, 0xbb69, 0x10fe, 0x41be, + 0xbb6b, 0xbb78, 0xbb87, 0x1108, 0xbb85, 0xbb82, 0xbb90, 0x1107, + 0x1104, 0xbb80, 0xbb67, 0x1100, 0x10fc, 0xbb61, 0x1144, 0xbb93, + 0x10f1, 0xbbf2, 0xbb86, 0x41a6, 0x1106, 0xbfcd, 0xbfc4, 0x11c6, + 0x11c3, 0x11c1, 0x11c2, 0xc10f, 0x11c4, 0x11c7, 0xc10d, 0x11bf, + 0x11d2, 0xc173, 0x11ca, 0xf6ba, 0xc10a, 0x442f, + /* 0x47 */ + 0xc108, 0xc113, 0x1213, 0xc3f8, 0x1230, 0x123e, 0x1239, 0xc4ab, + 0xc4a8, 0x123c, 0x123f, 0xc4a5, 0x1234, 0x123d, 0xc4c3, 0xc4a4, + 0x1238, 0xc4d4, 0xc4ba, 0xc5f1, 0x46a0, 0x1282, 0xc63f, 0x1283, + 0xc6ea, 0x129b, 0xc7f7, 0x12e0, 0x12dd, 0xc7fa, 0xc7f5, 0x12de, + 0xc7fe, 0x12e3, 0x12e5, 0xc800, 0x4797, 0x12e2, 0xc802, 0xc7fb, + 0xc807, 0x12df, 0xc81a, 0x132e, 0xc9b8, 0x1337, 0x1338, 0xc9e9, + 0xc9eb, 0xca50, 0xca4f, 0x498b, 0xcb86, 0x0162, 0xcb8e, 0x1394, + 0x1393, 0x13ab, 0x13ad, 0xccf0, 0xccfb, 0x13f5, 0x13f7, 0xce42, + 0x13f6, 0x13f8, 0xce85, 0x13fb, 0x13f9, 0x1458, 0x145a, 0xd105, + 0x1459, 0x4c0f, 0x1485, 0x14a4, 0x14d8, 0x14d9, 0xd54b, 0x14dd, + 0x14c8, 0xd563, 0x14fa, 0x14fb, 0x4f75, 0x1527, 0x4f9f, 0x152a, + 0x1525, 0xd799, 0x1528, 0xda81, 0xdb17, 0xdb10, + /* 0x48 */ + 0xdb12, 0x52a6, 0x1595, 0x539a, 0xdcfa, 0xdcf3, 0xdcf2, 0xdcf5, + 0xdcf6, 0xddbb, 0xddc2, 0xdea7, 0x160f, 0x1611, 0xdea8, 0xdea3, + 0x1610, 0xdeaa, 0x1615, 0x1613, 0x5457, 0xdfdc, 0x1647, 0x1646, + 0xe00f, 0x1659, 0x165b, 0xe079, 0x165e, 0xe07f, 0xe085, 0x165a, + 0x1691, 0x1692, 0x1690, 0x1693, 0xe21b, 0x54f7, 0x16be, 0xe277, + 0xe276, 0xe298, 0x16bc, 0x16bb, 0x16b7, 0x16b9, 0xe27a, 0x1701, + 0x16fe, 0xe3bc, 0xe3ba, 0x1702, 0xe3b6, 0x16ff, 0x55b0, 0xe3b4, + 0x1700, 0xe4cf, 0x1737, 0x173a, 0x176f, 0x1777, 0x1779, 0x56c6, + 0xe67b, 0x17c8, 0xe81c, 0xe821, 0xe81d, 0xe8c0, 0x17f2, 0xe8ff, + 0x17f1, 0x17f0, 0x5862, 0xeb56, 0x1834, 0xeda1, 0xeda2, 0xeda6, + 0xf056, 0xf057, 0x192c, 0x192d, 0xf101, 0xf1ed, 0xf71c, 0xf3f2, + 0x1afa, 0x5fb8, 0x0091, 0x5fc0, 0x0094, 0x5fb7, + /* 0x49 */ + 0x5fe1, 0x00c4, 0x010a, 0x63e8, 0x1c85, 0x64b2, 0x0152, 0x66ae, + 0x0159, 0x026f, 0x697e, 0x01f2, 0x01f4, 0x1e43, 0x6976, 0x01f1, + 0x1e3c, 0x6996, 0x026a, 0x6e20, 0x6e21, 0x6e23, 0x6e29, 0x7077, + 0x7151, 0x0324, 0x7156, 0x0323, 0x7188, 0x7159, 0x7155, 0x0327, + 0x7297, 0x7298, 0x036d, 0x21ed, 0x036e, 0x036f, 0x73a1, 0x73a3, + 0x2235, 0x039f, 0x040a, 0x0406, 0x040e, 0x770a, 0x040d, 0x0405, + 0x773d, 0x770c, 0x040b, 0x0410, 0x042e, 0x783d, 0x7839, 0x79b0, + 0x79b2, 0x79ae, 0x0496, 0x0497, 0x04c4, 0x2547, 0x04c5, 0x7b20, + 0x04d2, 0x7c6e, 0x7c6d, 0x7c6a, 0x0581, 0x7e32, 0x058e, 0x0590, + 0x058f, 0x7e39, 0x0591, 0x0595, 0x0593, 0x7da3, 0x266d, 0x7e7f, + 0x7e35, 0x7e3d, 0x7ff4, 0x7ff5, 0x063b, 0x0648, 0x8248, 0x8228, + 0x0646, 0x0647, 0x8227, 0x8232, 0x822c, 0x064c, + /* 0x4a */ + 0x822e, 0x064a, 0x0650, 0x0643, 0x8223, 0x8231, 0xf5c5, 0x0649, + 0x06a6, 0x06a5, 0x06a4, 0x84c9, 0x8589, 0x06b9, 0x85bb, 0x06ce, + 0x06cf, 0x0713, 0x8897, 0x8893, 0x8a28, 0x07c6, 0x07c5, 0x07ca, + 0x07d9, 0x07c1, 0x8a18, 0x8a3b, 0x2af5, 0x8a27, 0x8a24, 0x8a1b, + 0x8a31, 0x07cb, 0x8a26, 0x8aa3, 0x8a3f, 0x8a22, 0x8a19, 0x2b03, + 0x8a41, 0x8a2b, 0x2b65, 0x0842, 0x8d0c, 0x2c75, 0x0874, 0x0873, + 0x8e4e, 0x8eb9, 0x8efa, 0x8fe9, 0x8fe8, 0x8fe4, 0x2d8a, 0x2d56, + 0x0952, 0x925f, 0x925d, 0x9252, 0x0950, 0x9274, 0x094b, 0x9246, + 0x094c, 0x096d, 0x92aa, 0x2d98, 0x924a, 0x9259, 0x924b, 0x094f, + 0x2d68, 0x09f0, 0x9550, 0x3034, 0x3045, 0x0a4d, 0x0a4c, 0x98d0, + 0x0a4f, 0x0a4e, 0x0a50, 0x98cc, 0x315c, 0x0a96, 0x3156, 0x9964, + 0x9965, 0x0a97, 0x0a95, 0x0a98, 0x995c, 0x9b15, + /* 0x4b */ + 0x0aec, 0x0aeb, 0x0b13, 0x0b14, 0x0b38, 0x0b3a, 0x0b39, 0x9c79, + 0x0b68, 0x0b67, 0x9dc5, 0x9db8, 0x9f2c, 0x0bbe, 0x0bbc, 0x9f37, + 0x9f35, 0x9f31, 0x0bbb, 0x9f2f, 0x0bba, 0x9f2b, 0x0bb9, 0x0bb7, + 0x9f2d, 0x9f2a, 0x0bc1, 0xa095, 0x0bf7, 0xa23e, 0x0c60, 0xa247, + 0xa245, 0x0c59, 0x0c5c, 0x0c5a, 0x0c58, 0xa252, 0x0c5b, 0xa270, + 0xa250, 0xa258, 0xa251, 0xa23d, 0x0c5d, 0xa241, 0xa20c, 0xa23c, + 0xa386, 0xa383, 0xa389, 0xa3f3, 0x0cd4, 0x0cd3, 0x36bf, 0x0cd2, + 0x36bd, 0xa42d, 0x0cd7, 0x0cd1, 0x36e4, 0x0cd5, 0xa5c5, 0xf655, + 0x0d6d, 0x0d6f, 0x3834, 0x0d75, 0x0d6c, 0x0d74, 0xa743, 0x0d73, + 0xa737, 0xa745, 0x3836, 0x0dac, 0xa8e5, 0xa9a6, 0xaadb, 0x0e10, + 0xaada, 0xaae6, 0x39ba, 0x39bc, 0x0e0f, 0x39c8, 0x0e23, 0x39c3, + 0x0e1d, 0x39b6, 0x0e0e, 0xaaf8, 0xaae9, 0x0e15, + /* 0x4c */ + 0x39c2, 0x0e13, 0xaae8, 0xaaf6, 0x0e1b, 0x39c5, 0x0e22, 0x0e26, + 0xaae7, 0x39bd, 0x39b0, 0x0e21, 0x0e1c, 0x0e17, 0xaad5, 0x0e1a, + 0x39bb, 0xadd3, 0xadc7, 0xadd1, 0x0e99, 0xadc3, 0x0e97, 0xaf80, + 0xaf98, 0x0efd, 0xaf84, 0x0ef6, 0x0efe, 0x0ef5, 0x0eff, 0x0ef7, + 0xaf97, 0xaf83, 0xaf81, 0x0f01, 0x3c04, 0xaf8c, 0xb142, 0xb2ab, + 0x0f77, 0xb2a3, 0xb2a6, 0xb35c, 0xb369, 0xb367, 0x0fab, 0xb48b, + 0xb4a8, 0x0fc0, 0xb6d8, 0x1031, 0x102e, 0xf689, 0xb6dc, 0x102c, + 0xb6e0, 0xb6e5, 0x1032, 0x102f, 0x102b, 0x102d, 0x1033, 0xb818, + 0xb819, 0x3ff1, 0x1057, 0x105c, 0x107b, 0xb95f, 0xb95e, 0x107a, + 0xbc02, 0x4222, 0x1113, 0x111e, 0x1117, 0x1120, 0x112a, 0x1111, + 0x1115, 0x110f, 0x1118, 0x4238, 0xbc12, 0xbc36, 0x112c, 0x4232, + 0xf6a8, 0x4210, 0xbc23, 0xbc03, 0x111c, 0xbc00, + /* 0x4d */ + 0x1129, 0xbc46, 0xbc61, 0x1112, 0x424f, 0x1197, 0xc184, 0x4472, + 0xc16b, 0xc162, 0xc156, 0xc16a, 0xc152, 0xc155, 0x11d4, 0x11d0, + 0x447c, 0xc161, 0xf6bb, 0xc158, 0xc177, 0x11d3, 0x1214, 0xc4d7, + 0x1246, 0x1245, 0xc4de, 0x1243, 0xc4df, 0x460d, 0x1244, 0x1248, + 0xc4d1, 0x1247, 0xc4e2, 0xc4e1, 0xc4dd, 0x4608, 0x1249, 0x1285, + 0xc64b, 0x1284, 0xc64e, 0x129d, 0xc6fc, 0x129e, 0x12a0, 0xc6fa, + 0x129c, 0xc6fb, 0x129f, 0xc6fe, 0x12f7, 0x12ea, 0xc831, 0x12ef, + 0x12e9, 0x12f3, 0x12f0, 0x12eb, 0xc838, 0x12ec, 0x12f2, 0x12f5, + 0x12ee, 0xc83a, 0xc9bb, 0x133a, 0x134b, 0xca59, 0x134a, 0x134c, + 0xcadb, 0xcadf, 0xcae2, 0x1379, 0x137b, 0x1378, 0xcb9e, 0xcba1, + 0x13b5, 0xcd10, 0x13b4, 0x13b7, 0x4a9e, 0x1409, 0x13fe, 0x1408, + 0x1407, 0xce76, 0xce7f, 0xce7d, 0x1406, 0x1404, + /* 0x4e */ + 0x1405, 0x13ff, 0x140b, 0xce82, 0xd057, 0x143b, 0x145d, 0x145c, + 0x145f, 0x145e, 0x4c28, 0xd12e, 0x4c21, 0x1483, 0xd38b, 0xd38d, + 0x14a7, 0x4d66, 0x4d6c, 0xd390, 0x14a8, 0xd4ec, 0xd56f, 0xd56b, + 0xd571, 0xd578, 0x4df6, 0x14e0, 0x14df, 0x14fe, 0x14fc, 0x14ff, + 0x14fd, 0xd7ad, 0x152c, 0x4fec, 0x4fba, 0x4fe3, 0x4fbd, 0x159d, + 0xdb2f, 0x52b4, 0xdd78, 0x1640, 0xdff8, 0xe019, 0x165f, 0xe09b, + 0xe094, 0xe097, 0xe099, 0xe1a6, 0xe1a4, 0xe1a7, 0x54d1, 0xe295, + 0x16c0, 0x5523, 0xe290, 0x16c1, 0x16c6, 0xe29b, 0xe3c4, 0x1704, + 0x1705, 0xe3c6, 0x560b, 0x173e, 0x173d, 0x1740, 0x173f, 0xe4e3, + 0x1742, 0xe4df, 0xe4dd, 0xe4e7, 0x1784, 0x1782, 0x177f, 0x1785, + 0xe82d, 0xe82c, 0x17cc, 0x57b2, 0x17cb, 0x17cd, 0xe834, 0xe838, + 0x57db, 0xe91d, 0x17f5, 0xe91a, 0xe91b, 0xe914, + /* 0x4f */ + 0x57f0, 0xe917, 0xea21, 0x1820, 0x1821, 0xeaaa, 0xeaa1, 0x1837, + 0x183e, 0x5873, 0x183d, 0x586e, 0xeb63, 0xeb79, 0xeb60, 0x5865, + 0xeb62, 0x183c, 0xeb61, 0x1838, 0x586a, 0xeb70, 0x586d, 0xeb6a, + 0x183b, 0xedc8, 0x18b0, 0xedc5, 0xedbe, 0xedc2, 0x18ad, 0x18b2, + 0x18b8, 0x5a0b, 0xedc7, 0x18af, 0xedb0, 0xedca, 0x191a, 0x5b76, + 0x1920, 0x1921, 0x1930, 0x5ba8, 0x192f, 0xf10d, 0xf107, 0xf196, + 0xf1ef, 0x195f, 0x1960, 0xf21e, 0xf21d, 0x5c11, 0xf390, 0x5feb, + 0x008a, 0x1b19, 0x009c, 0x5fee, 0x009a, 0x5fef, 0x5fec, 0x63fa, + 0x010c, 0x010b, 0x010d, 0x1c92, 0x6504, 0x69d3, 0x01fe, 0x69d1, + 0x69fa, 0x01ff, 0x01fb, 0x01fc, 0x0209, 0x69c8, 0x0200, 0x69d5, + 0x1e75, 0x69cd, 0x69d2, 0x69fb, 0x6c2a, 0x6e88, 0x6e61, 0x0271, + 0x6e63, 0x6e62, 0x206f, 0x5e57, 0x71c8, 0x7198, + /* 0x50 */ + 0x032b, 0x73c1, 0x773f, 0x7741, 0x0414, 0x0411, 0x0412, 0x7852, + 0x0463, 0x785e, 0x046e, 0x049a, 0x79c7, 0x049b, 0x7a70, 0x7b27, + 0x04c8, 0x7b71, 0x7bb0, 0x04f6, 0x7e42, 0x7e43, 0x26a5, 0x058c, + 0x0597, 0x05a2, 0x26a0, 0x7e57, 0x7e9d, 0x8289, 0x828d, 0x828b, + 0x8280, 0x8292, 0x828a, 0x82c8, 0x0654, 0x828f, 0x8293, 0x8291, + 0x06a8, 0x84f2, 0x84de, 0x06a9, 0x85c8, 0x28b4, 0x28d8, 0x29c2, + 0x0718, 0x0717, 0x071d, 0x87a7, 0x87a1, 0x0731, 0x8a8c, 0x8a7f, + 0x07d8, 0x07d5, 0x8a7b, 0x8a95, 0x8a99, 0x07e1, 0x8a8e, 0x07d4, + 0x8ada, 0x8a8a, 0x8a9c, 0x07e3, 0x8a7e, 0x0844, 0x0845, 0x8d1a, + 0x8e55, 0x0876, 0x0875, 0x8e60, 0x2ca8, 0x0888, 0x08aa, 0x8ffb, + 0x08ab, 0x08ac, 0x8ffd, 0x0957, 0x2d83, 0x0960, 0x095d, 0x096b, + 0x92d0, 0x0963, 0x0967, 0x92c5, 0x095e, 0x92d2, + /* 0x51 */ + 0x9311, 0x2dc5, 0x2fcd, 0x09f9, 0x09f3, 0x95ad, 0x95a4, 0x95a9, + 0x95b0, 0x959d, 0x09f6, 0x9798, 0x309c, 0x0a51, 0x0a53, 0x0a52, + 0x9992, 0x0a9b, 0x998a, 0x0a9c, 0x998d, 0x9996, 0x0af7, 0x3299, + 0x328f, 0x3291, 0x9b45, 0x9b4b, 0x9c0f, 0x9c16, 0x0b3b, 0x9c8a, + 0x0b3e, 0x0b3d, 0x9dc9, 0x0b69, 0x9dc8, 0x9dca, 0x9f64, 0x0bc3, + 0x0bc4, 0x0bc7, 0x9f5d, 0x9f63, 0x3439, 0x0bc6, 0x342e, 0x0bc8, + 0x9f88, 0xa03a, 0xa039, 0x349f, 0x34a0, 0x0be6, 0x0bf8, 0xa117, + 0xa193, 0x0c07, 0xa195, 0x0c64, 0x0c68, 0xa276, 0x3594, 0x0c65, + 0x35ae, 0xa280, 0xa27b, 0x0c69, 0xa248, 0xa2a8, 0xa288, 0xa38b, + 0xa38a, 0xa38c, 0xa3fc, 0x0cda, 0x0ce0, 0x36e6, 0xa458, 0x0cde, + 0xa451, 0xa455, 0xa453, 0x0d1c, 0x0d1d, 0x0d1a, 0xa5dc, 0x0d7b, + 0x0d7a, 0x0d7c, 0xa75c, 0x0d78, 0x0d77, 0xa765, + /* 0x52 */ + 0xf65a, 0x0db1, 0xa8ee, 0x0db2, 0x0db0, 0xa8f0, 0x38bc, 0xa8f2, + 0x0e36, 0xab35, 0x0e2e, 0xab22, 0x39d6, 0xab20, 0x0e34, 0xab2d, + 0xab28, 0xab26, 0xab3c, 0x0e2a, 0xab38, 0x0e33, 0x0e2d, 0x0e2f, + 0x0e31, 0x0e2b, 0x0e32, 0xab2a, 0x0e35, 0xab1a, 0xab30, 0xaae3, + 0xab19, 0xade9, 0xade7, 0x3acf, 0xafd6, 0xafc4, 0x0f08, 0xaf87, + 0x0f06, 0xafc7, 0xafd9, 0x3c18, 0xafdf, 0x0f4d, 0x0f61, 0xb20a, + 0xb201, 0xb2b1, 0x0f78, 0xb2c1, 0x0f94, 0x0f95, 0xb376, 0xb40d, + 0xb40e, 0x0fc1, 0x0fc3, 0x3e6d, 0xb707, 0x1039, 0xb709, 0xb716, + 0x103a, 0x103b, 0x1035, 0x1036, 0xb70e, 0x103c, 0x3f90, 0xb706, + 0xb81e, 0xb84a, 0x1058, 0x107c, 0x107d, 0x108d, 0x108c, 0xbca6, + 0xbc91, 0x113b, 0x113f, 0xbcb8, 0xbc96, 0x1132, 0x112d, 0xbcc5, + 0x112f, 0x1139, 0x112e, 0x113a, 0xbd0a, 0x1136, + /* 0x53 */ + 0x1131, 0x113e, 0x1138, 0x4252, 0x1134, 0xbcb2, 0x1141, 0xbcb7, + 0xbcb4, 0xbc89, 0xbc8d, 0x1130, 0xbc87, 0xbcc2, 0xbc9c, 0xbc92, + 0x1143, 0xbcca, 0x4250, 0xbc8a, 0xbfe0, 0x1198, 0xbfe6, 0xbfe5, + 0x44a0, 0xc1a5, 0xc1b3, 0x4486, 0x11da, 0x11d7, 0xc1b5, 0xc1af, + 0x4495, 0xc1b0, 0xc1cc, 0x448c, 0xc1a2, 0xc1be, 0xc1c6, 0xc1ac, + 0xc1ae, 0x1218, 0x4560, 0xf6c3, 0xc508, 0xc505, 0x1252, 0x4628, + 0xc4fe, 0x124e, 0x4620, 0xc500, 0x124f, 0x1250, 0xc664, 0xc668, + 0x46a8, 0x1286, 0x1287, 0x1289, 0xc66a, 0xc669, 0xc70d, 0xc712, + 0x12a2, 0x12a3, 0xc70f, 0x12a1, 0xc867, 0xc879, 0xc872, 0xc866, + 0xc87c, 0x12f9, 0x12fd, 0xc868, 0xc885, 0xc876, 0xc874, 0xc871, + 0xc864, 0x133e, 0x133c, 0xc9f8, 0x134d, 0xca6c, 0x134e, 0xcaeb, + 0x1381, 0x1383, 0x1382, 0xcbb8, 0x1380, 0x1388, + /* 0x54 */ + 0xcd2d, 0xcd2e, 0xcd28, 0xcd29, 0xcd31, 0x13b9, 0xcd2f, 0xcd2a, + 0x4b3a, 0xcea4, 0xceb7, 0xcebf, 0x1411, 0x140d, 0x1410, 0x1413, + 0xd063, 0x143c, 0x1462, 0x1463, 0xd167, 0xd3be, 0xf6e0, 0xd595, + 0xd59c, 0x1503, 0x1506, 0x1502, 0x1501, 0xd671, 0xd672, 0x1505, + 0xd66f, 0x4e94, 0x5011, 0xd7f1, 0x5037, 0x1536, 0xd7e8, 0x1535, + 0x5043, 0xf6ea, 0x15a1, 0x15a3, 0xdb49, 0xdb64, 0x15a0, 0xdb48, + 0x15ea, 0x53a6, 0x15e8, 0xdd2c, 0xdde1, 0xddef, 0xdec0, 0x1621, + 0x161b, 0xded7, 0xded4, 0x1649, 0x1648, 0xe0ad, 0x5495, 0x1662, + 0x1661, 0x1664, 0x1660, 0x1663, 0xe0ae, 0xe0ac, 0x5496, 0x1666, + 0x16ac, 0x16ab, 0xe227, 0xe2ae, 0x16c3, 0xe2b0, 0x16c4, 0x5525, + 0xe2c0, 0xe2c4, 0x1708, 0x1709, 0x170a, 0x1706, 0x1707, 0x1741, + 0xe507, 0x1745, 0xe4fd, 0x1743, 0x1744, 0x5626, + /* 0x55 */ + 0x5634, 0x1747, 0xf704, 0xe61b, 0xe61c, 0x1771, 0xe6b2, 0xe6b4, + 0xe6b7, 0xe6b1, 0xe6b3, 0xe6ae, 0x178b, 0x17d4, 0x17d3, 0x17d1, + 0x57ba, 0x17d2, 0xe83f, 0xe936, 0x17f7, 0x17f8, 0xe931, 0xe93b, + 0xe935, 0xe93a, 0xe937, 0xea22, 0xea36, 0xea32, 0x1822, 0xeac0, + 0x1845, 0x1841, 0x5881, 0x1840, 0x588a, 0xeb85, 0x587f, 0x1842, + 0xeb89, 0x18c1, 0x18c5, 0xede1, 0x18bb, 0x18b9, 0x18bd, 0x18c9, + 0xee0a, 0x5a11, 0xee09, 0x18bf, 0x18c7, 0xede8, 0x18c3, 0x1924, + 0x1931, 0x1933, 0xf118, 0x1932, 0x1934, 0x1952, 0x1961, 0x5bd9, + 0x197a, 0x1982, 0x5c3c, 0xf3c5, 0x1b23, 0x600d, 0x600c, 0x6021, + 0x1b2c, 0x6216, 0x640e, 0x010f, 0x1c95, 0x6417, 0x0123, 0x0125, + 0x6a48, 0x0206, 0x0208, 0x1e88, 0x6a55, 0x6a49, 0x6a4c, 0x1e8b, + 0x6a4f, 0x6a3d, 0x027a, 0x0277, 0x6e8a, 0x6ea8, + /* 0x56 */ + 0x708a, 0x032e, 0x71cb, 0x032f, 0x71d5, 0x78d4, 0x041b, 0x0413, + 0x775c, 0x7775, 0x0466, 0x7861, 0x0465, 0x7096, 0x04f7, 0x7c8a, + 0x7ed0, 0x26e1, 0x26d7, 0x7e49, 0x7ecf, 0x059c, 0x82d6, 0x827f, + 0x0653, 0x82d2, 0x82cf, 0x8506, 0x8509, 0x06ba, 0x28a3, 0x0722, + 0x29d3, 0x8b06, 0x8af1, 0x8b04, 0x2b8b, 0x8afa, 0x8af4, 0x07eb, + 0x07dd, 0x8af9, 0x07ef, 0x8a8b, 0x8b03, 0x0847, 0x0846, 0x8da2, + 0x0878, 0x2cac, 0x0889, 0x900c, 0x900b, 0x0968, 0x0976, 0x0974, + 0x0979, 0x9324, 0x097a, 0x0977, 0xf614, 0x0971, 0x9325, 0x0972, + 0x95f6, 0x09ff, 0x95fb, 0x0a05, 0x9732, 0x97fb, 0x0a54, 0x98f2, + 0x98f3, 0x0a9e, 0x0a9f, 0x3174, 0x999c, 0x9b72, 0x0afa, 0x9b74, + 0x0b44, 0x0b3f, 0x0b40, 0x9c86, 0x0b42, 0x9c8e, 0x9c90, 0x0b51, + 0x9ccd, 0x9cf7, 0x9dd6, 0x9f84, 0x9f95, 0x9f8a, + /* 0x57 */ + 0x3440, 0x0bca, 0x9f97, 0x3441, 0x0bce, 0x0bc9, 0xa0a0, 0xa0a1, + 0xa122, 0xa1a6, 0xa1a4, 0x0c09, 0x34e8, 0x0c6c, 0x0c6e, 0x0c70, + 0x0c6d, 0x0c6b, 0x0c71, 0x0c72, 0xa2af, 0xa2b0, 0xa2bd, 0x0c8c, + 0x0ce4, 0xa476, 0x0ce1, 0xa47b, 0xa479, 0x36f6, 0x0ce7, 0x3700, + 0x0ce2, 0x0d1f, 0xa5ee, 0xa5f1, 0x0d7e, 0xa794, 0x0d80, 0x3859, + 0x3855, 0xa791, 0x0db9, 0x0db7, 0x0db8, 0xa910, 0x0dba, 0x38f4, + 0xa9af, 0x0dd3, 0x0e3f, 0x3a04, 0x0e45, 0x0e41, 0x3a15, 0x0e42, + 0x0e43, 0x0e3b, 0x0e38, 0xab7b, 0xab77, 0x0e3a, 0x39f5, 0xab80, + 0xabc6, 0x0e3c, 0xab7c, 0xab90, 0x0e3e, 0xaba3, 0xab7d, 0xabbd, + 0x0e9e, 0x0e9f, 0x0ea1, 0xae13, 0x0e9b, 0x0f12, 0xb011, 0xb044, + 0xb00d, 0x0f18, 0x0f0c, 0xb214, 0x0f62, 0xb2b8, 0x0f7a, 0xb2b7, + 0xb383, 0x0fae, 0x0faf, 0xb414, 0x0fad, 0xb41c, + /* 0x58 */ + 0x0fc4, 0x0fc7, 0x0fc6, 0x0fc5, 0xb4d4, 0xb4d5, 0x3fc1, 0x1040, + 0xb743, 0xb742, 0x103f, 0x1041, 0xf68a, 0xb741, 0xb84e, 0x107f, + 0xb987, 0x1086, 0x1081, 0x1080, 0x108e, 0x114a, 0xbd39, 0x1147, + 0xbd8f, 0xbd2a, 0x114b, 0x1146, 0x114e, 0x427d, 0xbd2b, 0x42a5, + 0xbd50, 0x1148, 0xbd6e, 0x1145, 0xbd3b, 0xbd53, 0xbd5f, 0xbd2f, + 0xbd30, 0xbd38, 0xbd4c, 0xbff1, 0x11db, 0x11e7, 0x11e4, 0xc207, + 0xc216, 0x11e1, 0xc214, 0x11e9, 0xc1fb, 0x11e5, 0x11e0, 0x11e3, + 0xc1f8, 0xc210, 0xc21d, 0xc1ff, 0xc20b, 0xc204, 0x11ea, 0xc1fe, + 0xc3ff, 0x463a, 0x1254, 0x1258, 0x125c, 0xc523, 0x1255, 0x128b, + 0x128c, 0x12a6, 0x12a5, 0xc72a, 0xc8a0, 0xc898, 0xc89c, 0x12ff, + 0xc89e, 0xc8a6, 0xc8b5, 0xc8b0, 0x1330, 0x1340, 0x1341, 0xcaf9, + 0xcaf5, 0x1386, 0xcbd2, 0x13bf, 0x13bd, 0xcd50, + /* 0x59 */ + 0xcd4e, 0xcd4b, 0xcd52, 0xcd4d, 0x13be, 0x1419, 0xcee4, 0x141c, + 0xceda, 0x141b, 0x1417, 0x1418, 0x4b51, 0xcedf, 0xcee8, 0x143d, + 0x146a, 0x1466, 0xd170, 0xd172, 0x1467, 0xd177, 0x1468, 0x14ad, + 0x14ae, 0xd3e6, 0xd5aa, 0x14d6, 0x1509, 0xd68c, 0x4e98, 0xd689, + 0x150c, 0x150a, 0xd832, 0x153b, 0x153a, 0x5084, 0x5081, 0xd87a, + 0x506f, 0xda9e, 0xdaa0, 0xdb70, 0x15af, 0x15aa, 0x15ab, 0xdb6e, + 0xdb66, 0x15b1, 0xdb65, 0x15ac, 0x15ec, 0xdd7f, 0xdde0, 0x1601, + 0xddff, 0xdef6, 0xdef7, 0xdef5, 0x1623, 0xdefc, 0x1624, 0x161e, + 0xdef9, 0x164a, 0x1665, 0x166a, 0xe0ca, 0xe0c3, 0xe0c6, 0x1669, + 0xe1b8, 0xe1bd, 0x1695, 0xe1bc, 0xe205, 0xe2e0, 0xe2e9, 0x5542, + 0xe2df, 0xe2ec, 0x16cc, 0xe2e5, 0xe2de, 0xf700, 0x16cf, 0xe2f0, + 0xe2e3, 0x170f, 0xe3ec, 0x170e, 0x170b, 0x1710, + /* 0x5a */ + 0x170d, 0x170c, 0xe3f2, 0xe3ef, 0xe3e9, 0xe4fb, 0x1746, 0x1748, + 0x5637, 0x1749, 0xe537, 0xe6de, 0x1791, 0x178e, 0xe6da, 0x17d8, + 0x17d6, 0xe84b, 0x17da, 0xe849, 0x17d7, 0xe8d5, 0x57ff, 0x17f9, + 0xe952, 0xe947, 0x17fc, 0xe948, 0xeacc, 0xead0, 0x58a9, 0x184a, + 0x58a7, 0x184e, 0x58b3, 0x58ac, 0x58b0, 0xeb86, 0xeba7, 0xeba3, + 0x589c, 0xebb6, 0xebad, 0xee13, 0x5a3c, 0x5a1c, 0x5a3a, 0x18d3, + 0x18cd, 0x18d1, 0xee17, 0xee22, 0x5a32, 0x5a34, 0xee49, 0xee26, + 0xf70c, 0xee3c, 0xee28, 0xf0a8, 0x5bc7, 0xf1fb, 0x1962, 0xf232, + 0xf2d6, 0xf348, 0x1983, 0x5c3f, 0xf3c6, 0x1992, 0x009f, 0x00a0, + 0x6025, 0x6026, 0x6024, 0x6033, 0x6170, 0x0127, 0x6790, 0x020b, + 0x6a95, 0x6aa1, 0x6a92, 0x6a8f, 0x6a9f, 0x6a96, 0x6a98, 0x6a9d, + 0x6aa0, 0x028d, 0x7097, 0x71eb, 0x0370, 0x7787, + /* 0x5b */ + 0x24eb, 0x7b32, 0x059a, 0x059f, 0x059d, 0x7ed8, 0x7efb, 0x7f06, + 0x059b, 0x7ed1, 0x26d5, 0xf5b0, 0x0660, 0x0664, 0x0669, 0x0663, + 0x0667, 0x0662, 0x82f6, 0x8304, 0x82fe, 0x2802, 0x82ff, 0x82f7, + 0x8518, 0x06ac, 0x8514, 0x85cd, 0x8620, 0x87de, 0x0726, 0x0723, + 0x0725, 0x8b45, 0x8b53, 0x07f8, 0x8b4b, 0x8b55, 0x8b41, 0x07f7, + 0x07fb, 0x07fa, 0x8b5c, 0x8b54, 0x8e71, 0x8ed0, 0x08b0, 0x08af, + 0x9053, 0x9329, 0x937e, 0x097e, 0x9379, 0x097d, 0x0980, 0x9370, + 0x936a, 0x097f, 0x0986, 0x9385, 0x9364, 0x2e12, 0x9378, 0x0981, + 0x9632, 0x9627, 0x962f, 0x0a24, 0x0a58, 0x0a57, 0x0aa0, 0x99ba, + 0x0afe, 0x9b71, 0x9b8c, 0x0b15, 0x9c1a, 0x0b47, 0x0b46, 0x9c98, + 0x9de4, 0x0b6b, 0x0b6c, 0x3385, 0x3454, 0x9fc2, 0x0bcc, 0x9fba, + 0x3455, 0x9fc8, 0x0bcb, 0x34a7, 0x34a8, 0x0bf9, + /* 0x5c */ + 0xa1b9, 0xa1b8, 0xa1a5, 0xa2e2, 0x0c78, 0x0c7a, 0x0c75, 0xa2d9, + 0x0c76, 0x0c77, 0xa2ac, 0xa2dd, 0x0cea, 0x0cee, 0x0ced, 0xa49d, + 0x0cec, 0x370f, 0xa611, 0xa603, 0x0d84, 0x0d85, 0x0d83, 0xa7ee, + 0x0dbc, 0x0dbd, 0x0dd4, 0xaba4, 0xabd8, 0xabdd, 0xabde, 0x0e55, + 0xabe7, 0x0e50, 0x0e4c, 0x0e48, 0xabd4, 0x0e53, 0xabce, 0x0e57, + 0x0e54, 0x0e4e, 0x0e4a, 0x0e51, 0xabf1, 0xabd3, 0x0e49, 0x0e4b, + 0x0e63, 0xabca, 0xabe9, 0x0ea7, 0x0ea6, 0x0ea4, 0xae1a, 0xae41, + 0xf668, 0x3ae4, 0x3ae5, 0xb03d, 0xb040, 0x3c65, 0x3c4e, 0x0f17, + 0xb043, 0x0f16, 0xb03f, 0xb03c, 0x0f63, 0xb221, 0xb220, 0x3d82, + 0xb2c6, 0x0f7b, 0x0f7c, 0xb2d1, 0xb2ca, 0xb38e, 0xb391, 0x0fb0, + 0x3e2d, 0xb4e3, 0xb788, 0x1042, 0xb770, 0x1044, 0xb89d, 0xb99d, + 0xb991, 0xb998, 0xb999, 0x1088, 0x108f, 0x1153, + /* 0x5d */ + 0x115b, 0xbdbf, 0x1159, 0xbdae, 0xbdb1, 0xbdcc, 0xbe04, 0x42ca, + 0xbe16, 0xbdcd, 0x1154, 0x42bc, 0xbde0, 0xbdcb, 0xbdd4, 0xbdc9, + 0xbfff, 0x1199, 0xbffd, 0xc257, 0xc252, 0xc250, 0xc245, 0xc24d, + 0x11f1, 0xc253, 0x11ef, 0xc282, 0xc244, 0xc3ce, 0xc3cf, 0xc3d2, + 0xc402, 0xc54f, 0xc558, 0x1262, 0xc543, 0x1263, 0xc552, 0x1260, + 0x1261, 0x125f, 0xc549, 0xc553, 0xc54d, 0x128d, 0xc684, 0x128e, + 0xc683, 0xc732, 0xc8e2, 0x1309, 0xc8e4, 0xc8d3, 0x1305, 0xc8d5, + 0xc8dd, 0x1303, 0x1306, 0xc8ec, 0xc8e6, 0xc8d2, 0xc8fa, 0xc8da, + 0x1331, 0xca06, 0xca04, 0x134f, 0xca7b, 0xcb04, 0xcb02, 0x1366, + 0x49ff, 0x13c4, 0xcd60, 0x13c3, 0x13c1, 0x13c5, 0xcf07, 0xcf05, + 0xcf0c, 0x1421, 0xcf5a, 0x141f, 0x1422, 0xcf1a, 0x1427, 0x1420, + 0xd18a, 0x146d, 0x146c, 0x146b, 0x146f, 0x1470, + /* 0x5e */ + 0xd18c, 0xd409, 0xd6a6, 0x4ea6, 0xd6ac, 0xd6a9, 0x1542, 0xd88b, + 0x50b6, 0xd88c, 0x1544, 0x1540, 0xd888, 0xd889, 0x153f, 0xd893, + 0x50ab, 0x158b, 0xdb83, 0xdd4f, 0x1625, 0x1628, 0xdf20, 0x5421, + 0xe036, 0xe0e2, 0x1675, 0x1672, 0xe0ee, 0x166f, 0xe0e7, 0xe0e9, + 0x1676, 0x1671, 0x54a7, 0xe0df, 0x1697, 0xe1c7, 0x16d7, 0xe309, + 0x16d6, 0xe301, 0x16d8, 0x16dc, 0x16db, 0x16d4, 0x553e, 0x1713, + 0x1711, 0x1714, 0xe405, 0xe40c, 0xe578, 0xe55d, 0x1751, 0x1750, + 0x1753, 0x1754, 0x1752, 0xe55e, 0xe560, 0xe567, 0x176d, 0xf705, + 0xe6f4, 0x1795, 0x1799, 0xe6f1, 0x179a, 0xe6fa, 0x1793, 0x1797, + 0xe6f8, 0xe6f9, 0xe709, 0xe6fd, 0xe6f7, 0x17dc, 0xe859, 0x17fd, + 0xe960, 0xe968, 0x17fe, 0x1800, 0x1802, 0x1801, 0x1803, 0xe96a, + 0xea14, 0xea3e, 0xeae4, 0x1827, 0x1826, 0x1824, + /* 0x5f */ + 0x184c, 0x58bc, 0x1850, 0x1855, 0x1853, 0x58b7, 0x1852, 0xebd2, + 0x1857, 0x58be, 0x1858, 0x18d6, 0xee58, 0xee50, 0x18d4, 0xee5c, + 0x18da, 0x18d9, 0xcf19, 0x5a62, 0x18d5, 0x18e4, 0xf70e, 0x18dc, + 0x191b, 0x5b8f, 0x1937, 0x1936, 0x194b, 0x5bcb, 0x1966, 0x1976, + 0xf2df, 0x197e, 0x197d, 0x197f, 0x1984, 0x198b, 0xf3d9, 0x1994, + 0x00a1, 0x0111, 0x6566, 0x0210, 0x1ea9, 0x6ae1, 0x6aef, 0x6ae8, + 0x6c33, 0x2013, 0x71fe, 0x0332, 0x21f4, 0x73ef, 0x73ec, 0x75ec, + 0x779c, 0x0420, 0x7799, 0x7870, 0x786e, 0x049d, 0x7b41, 0x26ec, + 0x26ef, 0x7f02, 0x7f01, 0x05a5, 0x801b, 0x8323, 0x8325, 0x8324, + 0x8326, 0x8333, 0x832f, 0x858f, 0x8856, 0x0802, 0x07fe, 0x0801, + 0x2bd6, 0x0803, 0x07ff, 0x8b99, 0x0804, 0xf5ed, 0x084a, 0x8ed9, + 0x0987, 0x93b7, 0x0984, 0x93b6, 0x0985, 0x3009, + /* 0x60 */ + 0x9654, 0x9657, 0x967a, 0x0a59, 0x3179, 0x9b8e, 0x32c6, 0x9b90, + 0x9bb9, 0x0b04, 0x0b49, 0x0b48, 0x9def, 0x0b6d, 0x0bd2, 0x0bd3, + 0x9fe2, 0x0bd1, 0x9fd6, 0x9fd8, 0x9fda, 0x9fde, 0x0be7, 0x0c0a, + 0x35c3, 0xa308, 0xa304, 0xa30a, 0xa30b, 0xa302, 0x0cf0, 0xa4aa, + 0xa4c1, 0x371f, 0xa7d7, 0xa7d9, 0x3865, 0xa7de, 0xa7da, 0x0dbe, + 0x0dbf, 0xa92a, 0x38c6, 0x3a3a, 0xac31, 0x3a36, 0xac2b, 0xac2c, + 0xac29, 0xac2e, 0x0e5e, 0xac27, 0xac28, 0x0e5b, 0xac5f, 0xac30, + 0xac24, 0x3aeb, 0x0eab, 0xae3a, 0x0eac, 0xae39, 0xae40, 0xb080, + 0xb084, 0x0f1f, 0x0f1d, 0xb075, 0xb076, 0x0f1c, 0xb07c, 0x0f1e, + 0xb078, 0xb09b, 0xb07e, 0xb15a, 0x0f64, 0xb22c, 0x3d84, 0xb39c, + 0xb747, 0xb78a, 0x1048, 0x1047, 0xb827, 0xbe4a, 0x115e, 0x1161, + 0xbe27, 0x42e0, 0x42f3, 0xbe2e, 0xbe26, 0xc008, + /* 0x61 */ + 0x11f7, 0xc2bd, 0xc296, 0x11f4, 0x11f8, 0x451e, 0xc2be, 0xc28e, + 0xc574, 0x1264, 0xc580, 0x1292, 0x128f, 0x1290, 0x46b4, 0x1293, + 0x12a8, 0xc73c, 0xc73d, 0x12a9, 0xc73a, 0xc742, 0x46f9, 0xc924, + 0xc906, 0x4844, 0x130e, 0xc915, 0x130f, 0xc902, 0xc90c, 0x130b, + 0xc908, 0xc90a, 0xc905, 0xc91c, 0x1310, 0x1351, 0xca82, 0x1350, + 0xca86, 0x1363, 0xcc03, 0xcd7b, 0x13c7, 0xcd7a, 0x4b71, 0x1424, + 0x1426, 0x4b6e, 0xcf80, 0x4b79, 0xcf58, 0x4bc4, 0x1474, 0x1473, + 0x1472, 0xd1aa, 0xd1ab, 0xd236, 0xd24a, 0x14b1, 0x4d8c, 0xd5d6, + 0x150e, 0x1511, 0x1510, 0x150f, 0x1512, 0x1549, 0x50c9, 0x154f, + 0x154d, 0xd903, 0xd8cf, 0x1555, 0xdb9f, 0xdba2, 0xde2a, 0xde2f, + 0xdf44, 0xdf40, 0x162c, 0x162b, 0xe111, 0xe10f, 0x1679, 0xe10d, + 0xe107, 0xe103, 0x167a, 0x54b0, 0x1699, 0x169a, + /* 0x62 */ + 0xe235, 0x16ae, 0x16af, 0xe304, 0x16e4, 0x16e1, 0x16de, 0x16e6, + 0x16df, 0xe326, 0x16e7, 0x16e2, 0x16e0, 0xe31e, 0x16e5, 0x555a, + 0xe40e, 0x1718, 0xe41d, 0xe41e, 0xe41f, 0x1756, 0xe588, 0x5646, + 0xe58d, 0xe591, 0xe580, 0x176e, 0xe654, 0xe655, 0x179d, 0x17a0, + 0x179c, 0xe725, 0xe71a, 0x17a1, 0x17a2, 0x179f, 0x17df, 0x17de, + 0x57c3, 0x17ea, 0xe988, 0x1806, 0xe97a, 0x1804, 0x580f, 0xe980, + 0xeb1e, 0xebfc, 0xec25, 0x185f, 0x58f4, 0x58fa, 0x185c, 0xec0b, + 0x185e, 0xec06, 0xec04, 0x58dd, 0x1859, 0xebf9, 0xec00, 0x1864, + 0x185d, 0x1862, 0xec02, 0x1865, 0xec07, 0x58ed, 0x185b, 0x58ef, + 0xeeb5, 0x18dd, 0xee87, 0x18df, 0xee93, 0xf70f, 0x18e2, 0xeebe, + 0xf066, 0x1927, 0xf0c7, 0xf0cf, 0x5b96, 0x193a, 0x193c, 0xf13d, + 0x1939, 0xf13c, 0xf147, 0x193d, 0x193b, 0x5bb3, + /* 0x63 */ + 0x194c, 0xf1c3, 0x1968, 0x5be2, 0xf31b, 0x1980, 0x1985, 0xf3c9, + 0x1995, 0xf3dd, 0x1996, 0xf493, 0x5c8f, 0x603d, 0x00a4, 0x0112, + 0x1eb1, 0x0225, 0x6ee6, 0x2141, 0x0337, 0x73f7, 0x77b0, 0x77ae, + 0x5dfd, 0x0468, 0x0467, 0x049e, 0x7c9f, 0x7c9e, 0x7f30, 0x05aa, + 0x7f4f, 0x05a9, 0x05a4, 0x7f27, 0x7f51, 0x0671, 0x066f, 0x8351, + 0x8354, 0x8356, 0x8527, 0x06ad, 0x8524, 0x2bf6, 0x080c, 0x2bf2, + 0x080b, 0x8bec, 0x8bc4, 0x080f, 0x0879, 0x93f8, 0x93f6, 0x93f7, + 0x93ed, 0x098d, 0x098f, 0x93f4, 0x93ef, 0x098e, 0x0a0c, 0x967f, + 0x96a2, 0x967e, 0x0aa6, 0x99c5, 0x0aa3, 0x0aa4, 0x0aa5, 0x3388, + 0x0b6e, 0x9ff1, 0x9ff2, 0x0bfa, 0xa12f, 0x0c7c, 0x0c7e, 0x0c7b, + 0x0c7d, 0xa323, 0xa329, 0x0c8d, 0x0cf4, 0x0cf3, 0xa61b, 0xa7eb, + 0x0d89, 0xa7ea, 0xa933, 0x0dc0, 0xac63, 0x0e65, + /* 0x64 */ + 0xac92, 0xac65, 0x0ead, 0x0f25, 0xb0a0, 0xf670, 0xb15e, 0x0fc9, + 0xb7aa, 0x104a, 0xb7a9, 0x4067, 0x1089, 0xbe9c, 0x1166, 0x1170, + 0xbe92, 0x116d, 0x1169, 0x1167, 0xbe86, 0x1172, 0x430e, 0x116e, + 0xbe83, 0x119c, 0x11fc, 0x11fd, 0x1204, 0x11ff, 0xf6c2, 0x11fe, + 0x1200, 0xc2ce, 0x1266, 0x1269, 0xc593, 0x12aa, 0x12ab, 0x1317, + 0xc92e, 0xc927, 0xc928, 0x1315, 0x485e, 0x1312, 0x4a0e, 0xcc18, + 0xcc16, 0xcd8d, 0x13ca, 0xcd8e, 0x13c9, 0x13cb, 0xcd90, 0xcd8f, + 0xcf81, 0x1429, 0x1428, 0xcf8a, 0xcf8c, 0xd08d, 0x1440, 0x1475, + 0x1476, 0xd1b2, 0x1488, 0xd5d9, 0x4eb6, 0x1557, 0x5101, 0xd90d, + 0x155f, 0xd913, 0x511d, 0x1558, 0x155b, 0xd91b, 0x512f, 0xdbac, + 0x15b3, 0xdbb3, 0x15ef, 0xdf5e, 0x1630, 0xdf60, 0xdf68, 0xdf63, + 0xdf69, 0xdf67, 0x1641, 0x164b, 0xe128, 0x167d, + /* 0x65 */ + 0xe12e, 0xe130, 0x167c, 0xe126, 0xe131, 0xe141, 0x54e0, 0xe1da, + 0x54db, 0xf6fa, 0xe20b, 0x5561, 0xe334, 0xe333, 0x16e8, 0x16ea, + 0x16e9, 0xe339, 0xe33b, 0xe340, 0xe430, 0x171b, 0xe432, 0xe437, + 0x1755, 0x564a, 0x1759, 0x1758, 0xe581, 0xe59f, 0xe5a7, 0x17a4, + 0x17a3, 0xe744, 0xe747, 0xe748, 0xe73d, 0x5733, 0x17a7, 0xe749, + 0x17e0, 0xe880, 0xe9a0, 0xe99d, 0x1808, 0x180a, 0x1809, 0xe99c, + 0xea47, 0xeb07, 0x1871, 0x590f, 0x186c, 0xec49, 0x5911, 0xec44, + 0x5903, 0x5901, 0x186e, 0xecdf, 0x5916, 0xec4c, 0x5dfd, 0xec4f, + 0x18e0, 0x18ee, 0xeec1, 0x18eb, 0xeeb9, 0xeecb, 0xeecf, 0xeec4, + 0x5a93, 0x18ea, 0x18ef, 0x18e7, 0xeeca, 0xeec3, 0xf0d0, 0xf151, + 0x1948, 0x1949, 0xf1a8, 0xf1c7, 0xf1c6, 0x194d, 0xf1ca, 0xf202, + 0x1955, 0xf25d, 0xf25a, 0x196a, 0x196c, 0xf259, + /* 0x66 */ + 0x196b, 0xf2cc, 0xf31c, 0xf3cc, 0x1998, 0x1999, 0x1997, 0xf3e8, + 0xf3ec, 0xf3ea, 0xf4ad, 0xf4b0, 0x605f, 0x6058, 0x6057, 0x1d5b, + 0x6793, 0x0216, 0x6b3b, 0x1ebf, 0x6b34, 0x6ef2, 0x0339, 0x73fd, + 0x751d, 0x0425, 0x23ce, 0x7a04, 0x7b48, 0x7f58, 0x834f, 0x0674, + 0x836e, 0x8372, 0x06ae, 0x852e, 0x8bfc, 0x8bf4, 0x9036, 0x940e, + 0x0992, 0x0994, 0x9414, 0x0995, 0x9419, 0x0a0d, 0x96a6, 0x0a25, + 0x9bc9, 0x9bc0, 0x9bcc, 0x9c1b, 0x9caa, 0x9ca8, 0xa003, 0x0bd5, + 0x0bd6, 0x34ac, 0x0be8, 0xa135, 0x0c7f, 0x35d2, 0x0cf5, 0x0cf6, + 0x0cf7, 0xa4d9, 0x0d24, 0x0d8d, 0x0d8a, 0xa93f, 0xa93d, 0x0e6c, + 0x0e66, 0x0e6a, 0xac8b, 0x0e67, 0x0e6d, 0x0e68, 0x3a52, 0xac68, + 0xac8a, 0xae58, 0xae57, 0xb0ce, 0xb0bc, 0xb0c0, 0xb0c1, 0xb0bf, + 0xb0ab, 0xb15f, 0x0f65, 0xb3a6, 0x0f9a, 0xb429, + /* 0x67 */ + 0x0fb1, 0x104b, 0x104d, 0x104c, 0x104e, 0xb7b8, 0x1173, 0x1175, + 0xbedd, 0xbed6, 0xf6b1, 0xbed5, 0xbee7, 0xbed8, 0xc2ec, 0x1203, + 0xc300, 0xc307, 0xc2fd, 0xc2f1, 0xc2ff, 0xc5aa, 0xc5b0, 0xc948, + 0x131e, 0xc953, 0x4873, 0xc94d, 0x1319, 0x131c, 0x131a, 0x131d, + 0x4876, 0xc943, 0xc950, 0x1343, 0x1352, 0xca8c, 0xcc27, 0x1395, + 0xcd99, 0x13cc, 0xcfb1, 0x142b, 0xcfb0, 0xcfaa, 0xcfac, 0x142a, + 0x4bc7, 0x1477, 0xd1c8, 0xd1ca, 0xd442, 0xd5e0, 0xd6e7, 0xd6e8, + 0xd6e6, 0x1513, 0x1514, 0x5134, 0xd95b, 0xd956, 0x155d, 0xd95a, + 0x1560, 0x513e, 0x1562, 0xdab8, 0xdbc5, 0x15b2, 0x15f0, 0xde48, + 0xdf7d, 0xdf7c, 0xdf81, 0xdf82, 0xdf62, 0x164c, 0xe145, 0x1682, + 0x54bc, 0x1681, 0x169b, 0xe1e3, 0x16a4, 0x16ee, 0x16ec, 0xe350, + 0x16ed, 0xe34f, 0x16f0, 0x16ef, 0xe439, 0x171d, + /* 0x68 */ + 0xe43a, 0x1760, 0x175e, 0x175d, 0xe5c1, 0xe74e, 0xe76e, 0x17b1, + 0x17ab, 0x17ac, 0x17ad, 0xe771, 0x17ae, 0xe88c, 0xe889, 0x17e2, + 0xe8e5, 0xe9b3, 0xe9b6, 0xe9b4, 0xea4d, 0x5839, 0xeb13, 0xec78, + 0x592a, 0x187b, 0x5926, 0x1878, 0x1875, 0x5927, 0xec72, 0x18f2, + 0x18f4, 0x18f3, 0x5ac0, 0x5ac9, 0xf075, 0xf0da, 0xf0d7, 0x193f, + 0x193e, 0x1940, 0x194e, 0x1957, 0x1959, 0x1958, 0xf716, 0xf269, + 0xf267, 0x196e, 0xf266, 0xf26f, 0xf271, 0x5bec, 0xf2cf, 0xf323, + 0x1981, 0x1986, 0xf3a5, 0x198f, 0xf3fe, 0xf3fb, 0xf3fd, 0x5c68, + 0x199b, 0x19b1, 0x19b3, 0x6b6d, 0x033a, 0x7405, 0x7520, 0x0427, + 0x77c8, 0x77c9, 0x046a, 0x05ac, 0x8627, 0x0818, 0x8c1e, 0x8d36, + 0x084c, 0x943d, 0x0996, 0x99d7, 0x0b4a, 0x9cad, 0x9e00, 0x0c81, + 0xa33a, 0x0c83, 0x0cf9, 0x0cf8, 0xa626, 0x0d8e, + /* 0x69 */ + 0x0d8f, 0x0dc1, 0xacb7, 0xacb6, 0xacc0, 0x0e70, 0xac9b, 0x0e71, + 0xb0d8, 0x0f2a, 0x0f2d, 0x0f7d, 0x3e32, 0x3e31, 0xb7c0, 0x104f, + 0xb7bf, 0xb9bf, 0x1090, 0xbf20, 0xbed0, 0xbf0e, 0x1179, 0xbf1d, + 0xbf1e, 0xbf15, 0xbf14, 0xc31e, 0xc32c, 0x1205, 0xc5b9, 0xc5b8, + 0xc5b6, 0xc69e, 0xc69c, 0xc74d, 0x46fd, 0xc96e, 0xc960, 0x1321, + 0xc964, 0xc962, 0xb0e5, 0x1332, 0xcda3, 0x13cd, 0x13cf, 0xd1d2, + 0xd1d5, 0x4d8e, 0x1516, 0x1515, 0x15b5, 0x1608, 0xde55, 0x1632, + 0xdf93, 0x1633, 0x1634, 0x163c, 0xe156, 0x54c2, 0xe1e9, 0x169c, + 0xe245, 0x16f4, 0x16f2, 0xe47c, 0x1762, 0xe5d3, 0x1761, 0x1764, + 0x17b5, 0x574b, 0x17b4, 0xe78e, 0xe897, 0x17e3, 0xe89b, 0xe899, + 0x581c, 0x180e, 0xe9cf, 0x581b, 0xea59, 0x182c, 0x182b, 0xeb20, + 0xeb23, 0xeb2a, 0x1885, 0x1881, 0x187e, 0x1883, + /* 0x6a */ + 0x1880, 0xecb0, 0x5942, 0xef2f, 0x5ad4, 0x18fb, 0x18f7, 0xef32, + 0xef43, 0xef3f, 0xef39, 0x18f8, 0xef30, 0xf0dd, 0xf1da, 0xf1db, + 0x195a, 0xf284, 0xf27f, 0xf272, 0xf280, 0xf2ee, 0x1978, 0xf32a, + 0xf322, 0xf371, 0xf3cd, 0x199d, 0x199c, 0xf40f, 0xf418, 0x606a, + 0x00a9, 0x00bf, 0x1ed0, 0x1ecf, 0x740c, 0x23da, 0x7ca6, 0x0677, + 0x0676, 0x8537, 0x06bb, 0x29ea, 0x8ee2, 0x099b, 0x96bc, 0x0a0f, + 0x0a5b, 0x9bd5, 0x0b4c, 0x0b6f, 0x0bd9, 0xa012, 0x0c82, 0xa34b, + 0xa341, 0xa3a1, 0xa4ec, 0x0e74, 0x0e72, 0xacd4, 0xacd8, 0xacd9, + 0x0e73, 0xacda, 0xae6c, 0xae6d, 0x0eb1, 0x0f2e, 0xb0e7, 0xb0eb, + 0xb0ec, 0xb162, 0x0f4e, 0xb42b, 0xb50d, 0xb7cd, 0xb9c3, 0xbf3f, + 0xbf3c, 0xbf3e, 0xbf3d, 0xbf3a, 0xbf38, 0xc344, 0xc345, 0x120b, + 0xc348, 0xc350, 0x126c, 0x4889, 0xc978, 0xc979, + /* 0x6b */ + 0x138b, 0xcc3e, 0x13d0, 0x142d, 0xd454, 0x14e4, 0x1571, 0xd9b9, + 0x5158, 0x156f, 0xde5f, 0x1687, 0x16a5, 0xe372, 0xe375, 0x171e, + 0x1765, 0x17b9, 0x17b7, 0x17b8, 0x17e4, 0xe8a3, 0xe8a5, 0xe9dc, + 0xe9dd, 0xea5a, 0x188c, 0x1889, 0x188a, 0xecdb, 0xecdc, 0x188b, + 0xefab, 0xef84, 0xef76, 0x1901, 0x18fe, 0x5ae7, 0x1903, 0x1906, + 0xef83, 0x5aea, 0x5af1, 0xf07f, 0x191d, 0x1943, 0xf173, 0xf1ad, + 0xf1b0, 0x194f, 0xf20f, 0xf20c, 0x195b, 0x1970, 0xf379, 0x1988, + 0xf377, 0xf37a, 0x1989, 0x5c44, 0xf432, 0xf427, 0xf42a, 0xf42c, + 0x5c6d, 0xf428, 0xf429, 0xf438, 0x642f, 0x6b7b, 0x740d, 0x23d9, + 0x77d6, 0x77d5, 0x83a1, 0x8c4c, 0x099e, 0x099f, 0x0aa7, 0x0b4b, + 0x0bdb, 0x0bda, 0xa0c0, 0x35d6, 0x0c8e, 0x0e76, 0xacf4, 0x0f30, + 0x0f2f, 0xb0f0, 0x0f66, 0xb23f, 0x117e, 0xc35d, + /* 0x6c */ + 0xc372, 0xc362, 0x453a, 0xc366, 0x4675, 0x126f, 0xc988, 0x13d1, + 0x142f, 0xcfe8, 0xcfe4, 0x14b2, 0x1518, 0x1517, 0xd6ff, 0x1576, + 0xdfaf, 0xdfae, 0x164f, 0x1689, 0xe1f2, 0xe248, 0xe381, 0xe37e, + 0x16f5, 0x171f, 0xe452, 0xe5ef, 0x575d, 0x17e5, 0xe8ad, 0xe9e6, + 0x1810, 0xe9ed, 0x180f, 0xe9e9, 0xea61, 0xea60, 0xeb33, 0x182f, + 0x1830, 0x5964, 0xed0b, 0xed08, 0x1893, 0x1894, 0xed07, 0x1907, + 0x1909, 0x1908, 0xefca, 0x190b, 0xefc6, 0x5b0a, 0xf084, 0xf0eb, + 0xf17d, 0x1950, 0x1971, 0xf29b, 0xf2a2, 0xf2a1, 0xf2a0, 0xf29c, + 0x197b, 0x197c, 0xf380, 0x5c73, 0xf440, 0x19a1, 0xf439, 0xf43c, + 0x19a0, 0x19a2, 0x64ca, 0x021b, 0x6b89, 0x0282, 0x853c, 0x8d40, + 0x9463, 0x9469, 0x0be9, 0xa353, 0x0c84, 0x35e1, 0xa817, 0xa81a, + 0xad00, 0x0eb3, 0x0f34, 0x0f33, 0x1180, 0xc36f, + /* 0x6d */ + 0xc6ab, 0x12ad, 0xc991, 0x1344, 0x1355, 0xcdb1, 0x13d2, 0xcfef, + 0xdbf1, 0xdbf2, 0xdfb7, 0xdfb5, 0x168a, 0xe386, 0xe45a, 0x1767, + 0xe7c6, 0xe7cb, 0x17e6, 0xe8b2, 0x1813, 0xe9f3, 0x582d, 0xed27, + 0x1897, 0x5b0c, 0xefd5, 0xefd8, 0x190c, 0xefec, 0xf087, 0xf0f2, + 0x1946, 0x195c, 0x1974, 0x1972, 0xf2ad, 0xf2b0, 0xf2fd, 0x5c1f, + 0xf387, 0xf44a, 0x19a4, 0x19a3, 0xf44e, 0xf449, 0xf451, 0xf44d, + 0x19b4, 0x6072, 0x0136, 0x7416, 0x8c6d, 0x8d41, 0x08b2, 0x9471, + 0x9474, 0x0b16, 0x3a70, 0x0e77, 0xae7c, 0x117f, 0xbf8a, 0xc756, + 0x147d, 0x5179, 0xd9fa, 0x544a, 0x168c, 0xe45b, 0x1768, 0x17be, + 0x1815, 0xeff5, 0xeff0, 0xf0f3, 0xf17f, 0xf213, 0x1975, 0x19a5, + 0x7419, 0x7f85, 0x83b0, 0x9477, 0xa4ff, 0x0e78, 0x0f35, 0x3c9d, + 0x1182, 0xbf87, 0x1183, 0xbf8b, 0x1271, 0xc99e, + /* 0x6e */ + 0x147e, 0x168e, 0xe38f, 0x5660, 0x1769, 0xe639, 0xe7d4, 0xe8f1, + 0xea02, 0xea6b, 0xeb40, 0x189a, 0x189b, 0xf010, 0xf2be, 0xf2b9, + 0x1990, 0xf464, 0x5c9e, 0x9be9, 0xbf90, 0x1186, 0x1185, 0xc01c, + 0x120e, 0xc392, 0xc6ae, 0xc9a3, 0x1519, 0xdfc9, 0x17c0, 0xe7d8, + 0xeb44, 0xf024, 0x5bf8, 0x5c3a, 0x5c7d, 0xf470, 0xf4d3, 0x0c0d, + 0x1816, 0xf2c3, 0x19a9, 0x19aa, 0x0c85, 0xad21, 0xb9ca, 0xc39c, + 0xea73, 0xf186, 0xf3c1, 0xea09, 0x5c96, 0xf4d5, 0x17c2, 0x1831, + 0x1911, 0x19ab, 0x189c, 0xdfd4, +}; + +static const ucs4_t cns11643_4b_2uni_upages[248] = { + 0x03400, 0x03500, 0x03600, 0x03700, 0x03800, 0x03900, 0x03a00, 0x03b00, + 0x03c00, 0x03d00, 0x03e00, 0x03f00, 0x04000, 0x04100, 0x04200, 0x04300, + 0x04400, 0x04500, 0x04600, 0x04700, 0x04800, 0x04900, 0x04a00, 0x04b00, + 0x04c00, 0x04d00, 0x05000, 0x05100, 0x05200, 0x05300, 0x05600, 0x05800, + 0x05900, 0x05b00, 0x05c00, 0x05d00, 0x05e00, 0x05f00, 0x06100, 0x06400, + 0x06500, 0x06600, 0x06900, 0x06a00, 0x06b00, 0x06f00, 0x07000, 0x07100, + 0x07200, 0x07300, 0x07400, 0x07500, 0x07600, 0x07700, 0x07800, 0x07900, + 0x07a00, 0x07b00, 0x07c00, 0x07d00, 0x07e00, 0x07f00, 0x08000, 0x08100, + 0x08200, 0x08400, 0x08500, 0x08600, 0x08700, 0x08800, 0x08900, 0x08a00, + 0x08b00, 0x08c00, 0x08d00, 0x08e00, 0x08f00, 0x09000, 0x09100, 0x09200, + 0x09300, 0x09400, 0x09500, 0x09600, 0x09700, 0x09800, 0x09900, 0x09a00, + 0x09b00, 0x09c00, 0x09d00, 0x09e00, 0x09f00, 0x0ff00, 0x20000, 0x20300, + 0x20400, 0x20500, 0x20600, 0x20700, 0x20800, 0x20900, 0x20a00, 0x20b00, + 0x20e00, 0x20f00, 0x21000, 0x21100, 0x21200, 0x21300, 0x21400, 0x21500, + 0x21600, 0x21800, 0x21900, 0x21a00, 0x21b00, 0x21c00, 0x21e00, 0x21f00, + 0x22100, 0x22200, 0x22300, 0x22400, 0x22500, 0x22700, 0x22800, 0x22900, + 0x22a00, 0x22c00, 0x22d00, 0x22e00, 0x22f00, 0x23000, 0x23100, 0x23200, + 0x23300, 0x23500, 0x23600, 0x23700, 0x23800, 0x23900, 0x23a00, 0x23b00, + 0x23c00, 0x23e00, 0x23f00, 0x24000, 0x24100, 0x24300, 0x24400, 0x24500, + 0x24600, 0x24800, 0x24900, 0x24a00, 0x24b00, 0x24c00, 0x24d00, 0x24e00, + 0x24f00, 0x25000, 0x25200, 0x25300, 0x25500, 0x25600, 0x25700, 0x25800, + 0x25900, 0x25a00, 0x25b00, 0x25c00, 0x25d00, 0x25e00, 0x25f00, 0x26000, + 0x26100, 0x26200, 0x26300, 0x26400, 0x26500, 0x26600, 0x26700, 0x26800, + 0x26900, 0x26a00, 0x26c00, 0x26d00, 0x26e00, 0x26f00, 0x27000, 0x27100, + 0x27200, 0x27300, 0x27400, 0x27500, 0x27600, 0x27700, 0x27800, 0x27900, + 0x27a00, 0x27b00, 0x27c00, 0x27d00, 0x27e00, 0x27f00, 0x28000, 0x28100, + 0x28200, 0x28300, 0x28400, 0x28500, 0x28600, 0x28700, 0x28800, 0x28900, + 0x28a00, 0x28b00, 0x28c00, 0x28d00, 0x28e00, 0x28f00, 0x29000, 0x29100, + 0x29200, 0x29300, 0x29400, 0x29500, 0x29600, 0x29700, 0x29800, 0x29900, + 0x29a00, 0x29b00, 0x29c00, 0x29d00, 0x29e00, 0x29f00, 0x2a000, 0x2a100, + 0x2a200, 0x2a300, 0x2a400, 0x2a500, 0x2a600, 0x2f800, 0x2f900, 0x2fa00, +}; + diff --git a/jni/parted/libiconv/lib/cns11643_5.h b/jni/parted/libiconv/lib/cns11643_5.h new file mode 100755 index 0000000..7002dfa --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_5.h @@ -0,0 +1,1277 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 5 + */ + +static const unsigned short cns11643_5_2uni_page21[8603] = { + /* 0x21 */ + 0x3bd1, 0x3bcb, 0x3bc9, 0x3c0c, 0x3b00, 0x3b87, 0x3c0d, 0x3c0f, + 0xe21d, 0x5e98, 0x3bd2, 0x3c11, 0x3b7e, 0x45d3, 0x5052, 0x57fe, + 0x60a9, 0x7442, 0x3b09, 0x3bd6, 0x3fdd, 0x3fdc, 0x4002, 0x4073, + 0x4176, 0x41a7, 0x41a8, 0x4333, 0x43cc, 0x450d, 0x452c, 0x461b, + 0x015a, 0x461d, 0x4699, 0x4d3e, 0x582d, 0x582f, 0x5e99, 0x6eb3, + 0x74b6, 0x761b, 0x7fef, 0x83e9, 0x3b14, 0x3b94, 0x3be1, 0x4006, + 0x404a, 0x4044, 0x4131, 0x417a, 0x41ad, 0x41ae, 0x41b1, 0x4338, + 0x4337, 0x447d, 0x447e, 0x452d, 0x4532, 0x4623, 0x4626, 0xe23a, + 0x46a0, 0x51a8, 0x543f, 0x54bc, 0x56c4, 0x583b, 0x5b19, 0x5b18, + 0x5cb3, 0x5eaa, 0x5fbe, 0x60ac, 0x6525, 0x6566, 0x656b, 0x7443, + 0x74b5, 0x75ec, 0x7776, 0x08bc, 0x8114, 0x50dc, 0x821c, 0x821d, + 0x9fd0, 0xa112, 0xa5f3, 0xc169, 0x15b9, 0xc911, + /* 0x22 */ + 0xc915, 0xc910, 0xc913, 0x3ba4, 0x3ba5, 0x3cd0, 0x3cba, 0x3ccb, + 0x407b, 0x4186, 0x41bb, 0x41ba, 0x41c3, 0x41b9, 0x41c0, 0x00de, + 0x4339, 0x433b, 0x4341, 0x43d1, 0x43cf, 0x43d2, 0x442e, 0x446e, + 0x448c, 0x4488, 0x4535, 0x0143, 0x453a, 0x453b, 0x4538, 0x4539, + 0x462e, 0x462c, 0x46c8, 0x46b5, 0x46ad, 0x46b0, 0x46ab, 0x4cb3, + 0x4ca9, 0x51bb, 0x51b9, 0x565a, 0x56cd, 0x572b, 0x5805, 0x03ac, + 0x03aa, 0x5851, 0x584b, 0x5aea, 0x5aed, 0x5b36, 0x5b62, 0x5b56, + 0x5b55, 0x5b64, 0x5b58, 0x1c07, 0x5cda, 0x5cd8, 0x5ead, 0x5eab, + 0x5fc0, 0x5fc3, 0x60b3, 0x60b7, 0x60ba, 0x1dcb, 0x04fe, 0x60c7, + 0x60b5, 0x648e, 0x6573, 0x656c, 0x6574, 0xe2b4, 0x6572, 0x6571, + 0x6582, 0x6570, 0x6c3f, 0x6eba, 0x6eb8, 0x74b7, 0x8223, 0x8221, + 0x822b, 0x8226, 0x8222, 0x8825, 0x8be4, 0x8f15, + /* 0x23 */ + 0x9fe4, 0xa133, 0xa12a, 0xa132, 0xa129, 0xa5fb, 0xb45b, 0xb45c, + 0xb728, 0xc16f, 0xc16d, 0xc16b, 0xc16e, 0xc916, 0x3b22, 0x3c16, + 0x3c48, 0x3cd8, 0x3d00, 0x0041, 0x3f80, 0x3fe4, 0x00b4, 0x3fe7, + 0x400c, 0x4053, 0x40b7, 0x45e8, 0x41d1, 0x41e5, 0x41d8, 0x41d6, + 0x41da, 0x41d9, 0x41d5, 0x41e6, 0x41d4, 0x41d3, 0x4344, 0x43d6, + 0x43d7, 0x4413, 0x3afd, 0x4470, 0x4492, 0x44db, 0x44da, 0x4541, + 0x4543, 0x4633, 0x46f6, 0x46d4, 0x46dd, 0x46d0, 0x4704, 0x46d9, + 0x46db, 0x4705, 0x46d3, 0x46e1, 0x4d80, 0x4d77, 0x4d81, 0x4d82, + 0x4d83, 0xe25c, 0x5061, 0x5060, 0x51d8, 0x51d6, 0x51d7, 0x8105, + 0x544d, 0x5448, 0x56d6, 0x56cf, 0x56d9, 0x56d8, 0x573d, 0x03b3, + 0x5854, 0x585b, 0x585c, 0x03b4, 0x5859, 0x5858, 0x585a, 0x5855, + 0x5856, 0x5882, 0x5af0, 0x5b1c, 0x5b6a, 0x5b69, + /* 0x24 */ + 0x5b71, 0x5b67, 0x5b6c, 0x5b6e, 0x5b79, 0x5c8b, 0x5cb8, 0x5ce7, + 0x5ce8, 0x5ce4, 0x5ce6, 0x5ce5, 0x5cf0, 0x5e83, 0x5eb7, 0x5ebb, + 0x5eb9, 0x5ec5, 0x5f53, 0x5fc4, 0x5fc6, 0x5fcb, 0x60c8, 0xe29f, + 0x60c9, 0x60db, 0x6494, 0x6595, 0x6588, 0x658d, 0x69ec, 0x69ee, + 0x69f1, 0x6c2e, 0x6c49, 0x6e5f, 0x6ed1, 0x6ecb, 0x7385, 0x081d, + 0x744a, 0x7447, 0x744b, 0x74bb, 0x74c4, 0x087c, 0x7602, 0x7782, + 0x7791, 0x778f, 0x7792, 0x7c8f, 0x7c91, 0x7cb4, 0x7c92, 0x7ff4, + 0x80aa, 0x8235, 0x8237, 0x823d, 0x823c, 0x822f, 0x8230, 0x83f8, + 0x83ef, 0x8626, 0x0b55, 0x8826, 0x8827, 0x8a41, 0x8ac6, 0x8ac7, + 0x8beb, 0x8be8, 0x8bea, 0x8f1a, 0x8f19, 0x0d26, 0x9423, 0x9424, + 0x9925, 0xa135, 0xa134, 0xa507, 0xad1d, 0xb2e1, 0xb6ab, 0xbf60, + 0xc177, 0xc17d, 0x15bc, 0xc91e, 0xc91a, 0xc91d, + /* 0x25 */ + 0x3b6b, 0x3c2d, 0x3c4c, 0x3d2a, 0x004a, 0x3d15, 0x3d2c, 0x3d06, + 0x3d08, 0x3d0a, 0x004e, 0x4056, 0x4084, 0x00c9, 0x40c6, 0x41f5, + 0x4209, 0x41f8, 0x41e8, 0x41fb, 0x41e9, 0x41f6, 0x1ab7, 0x1ab8, + 0x4352, 0x1ab6, 0x1aba, 0x4354, 0x4351, 0x4439, 0x443a, 0x4498, + 0x454e, 0x017b, 0x4736, 0x470c, 0x4710, 0x4732, 0x4711, 0x4718, + 0x471c, 0x471a, 0x4719, 0x470b, 0x470f, 0x471d, 0x4721, 0x4713, + 0x471b, 0x4715, 0x0220, 0x4cd1, 0x4cc8, 0x4d8d, 0x4db5, 0x0289, + 0x0295, 0x50f8, 0x51e0, 0x51e1, 0x02be, 0x51de, 0x51fe, 0x51dc, + 0x5201, 0x51fd, 0x5200, 0x54d7, 0x54d6, 0x54d9, 0x5665, 0x56d2, + 0x56dc, 0x56e1, 0x56de, 0x5742, 0x574b, 0x03c3, 0x588e, 0x5891, + 0x588b, 0x5890, 0x5888, 0x5889, 0x5884, 0x58aa, 0x5b8d, 0x5b8f, + 0x5b7d, 0x5b7f, 0x5b7b, 0x5b80, 0x5b7e, 0x5b83, + /* 0x26 */ + 0x5b81, 0x5b86, 0x5b8a, 0x5cbd, 0x5cbe, 0x0477, 0x5cf4, 0x5cf3, + 0x5d02, 0x5cf6, 0x5cf5, 0x5cf2, 0x5d04, 0x5e3d, 0x5ec6, 0x5f89, + 0x5fd4, 0x5fd6, 0x5fd2, 0x60fa, 0x6106, 0x610c, 0x610a, 0x610f, + 0x652f, 0x05d4, 0x65b7, 0x65be, 0x65bc, 0x65e2, 0x6a06, 0x69f7, + 0x6a07, 0x69f6, 0x7635, 0x6c5f, 0x6c65, 0x6c64, 0x6c61, 0x6c5a, + 0x6c5d, 0xe2d7, 0x6ed7, 0x6ed5, 0x6ede, 0x6ee1, 0x6ee0, 0x6ed9, + 0x074c, 0x6eda, 0x6edf, 0x6ef6, 0x6f03, 0x0820, 0x7393, 0x738b, + 0x7391, 0x7392, 0x738a, 0x7389, 0x738f, 0x7456, 0x7459, 0x74ca, + 0x74cc, 0x085b, 0x74d0, 0x74cd, 0x74d6, 0x74cb, 0x7583, 0x7582, + 0x7606, 0x762a, 0x762c, 0x762b, 0x7629, 0x77bd, 0x77b3, 0x77be, + 0x77c0, 0x77b5, 0x77b6, 0x7c9d, 0x7c9f, 0x8120, 0x0a2d, 0x811e, + 0x811c, 0x8132, 0x811f, 0x812b, 0x8121, 0x8126, + /* 0x27 */ + 0x8124, 0x811d, 0x8127, 0x825b, 0x8259, 0x8280, 0x8255, 0x8250, + 0x825a, 0x8256, 0x8263, 0x8252, 0x8258, 0x0a63, 0x8239, 0x83f9, + 0x8628, 0x0b18, 0x86bc, 0x86d6, 0x8705, 0x8720, 0x0b74, 0x8833, + 0x8a46, 0x8a42, 0x8a43, 0x8a47, 0x8acb, 0x8b42, 0x8b45, 0x8bfd, + 0x8bf4, 0x8bf9, 0x8bfa, 0x8e5e, 0x8f1d, 0x0d28, 0x9258, 0x9255, + 0x9557, 0x9558, 0x95d9, 0x95dc, 0x95db, 0x9927, 0x9a85, 0x9a87, + 0x9a8a, 0x9d8b, 0x9e4f, 0xa030, 0xa02f, 0xa168, 0xa149, 0x0fda, + 0xa148, 0xa13f, 0xa14b, 0xa15c, 0xa146, 0xa140, 0xa50d, 0xa61b, + 0xa61d, 0xa617, 0x10a4, 0xa622, 0xb0a7, 0xb108, 0xb306, 0xbf7d, + 0x148e, 0xbf63, 0xbf64, 0xbf7f, 0xbf6b, 0xbf7c, 0xbf68, 0xbf65, + 0xbf6a, 0xc198, 0xc199, 0xc1ae, 0xc92b, 0xc92d, 0xc931, 0xc92e, + 0xc92f, 0x3b6d, 0x3c31, 0x3d2d, 0x3d39, 0x3d38, + /* 0x28 */ + 0x005b, 0x3d3a, 0x3d35, 0x3d62, 0x3fea, 0x3feb, 0x4015, 0x40cc, + 0x40c8, 0x40cd, 0x40db, 0x40cb, 0x4211, 0x4226, 0x4362, 0x435e, + 0x4361, 0x4441, 0x443f, 0x4475, 0x7465, 0x4649, 0x44eb, 0x451a, + 0x4557, 0x476b, 0x47a9, 0x4754, 0x4762, 0x47aa, 0x4758, 0x4772, + 0x4763, 0x4773, 0x478b, 0x478c, 0x475c, 0x4751, 0x4716, 0x4760, + 0x4761, 0x475e, 0x475d, 0x4764, 0x4753, 0x475f, 0x475b, 0x476e, + 0x4755, 0x4752, 0x4768, 0x4cd2, 0x4cd6, 0x4cd3, 0x4db8, 0x4dbb, + 0x4deb, 0x4de8, 0x4db6, 0x4dea, 0x4de7, 0x4de9, 0x5091, 0x5110, + 0x510e, 0x510f, 0x520b, 0x5203, 0x522b, 0x5209, 0x5228, 0x522c, + 0x5225, 0x5227, 0x520f, 0x54e9, 0x54ec, 0x0353, 0x5627, 0x5673, + 0x56e2, 0x56e6, 0xe276, 0x5761, 0x5751, 0x5812, 0x580e, 0x58ad, + 0x58af, 0x58b1, 0x58d3, 0x5b94, 0x5b92, 0x5b90, + /* 0x29 */ + 0x5b9d, 0x5b93, 0x5b95, 0x5b98, 0x5b97, 0x0480, 0xe28a, 0x5d07, + 0x5d0b, 0x5d08, 0x5ed9, 0x5ed5, 0x5fd7, 0x5fdf, 0x04dd, 0x5fde, + 0x5fe3, 0x5fe2, 0x04de, 0x6147, 0x0522, 0x613d, 0x6138, 0x6544, + 0x653a, 0x65b8, 0x662a, 0x6600, 0x65f3, 0x65f2, 0x65eb, 0x65fa, + 0x65ed, 0x65ec, 0x65ff, 0x65fb, 0x1f06, 0x664e, 0x65ef, 0x65f7, + 0x6a10, 0x6a11, 0x6a0c, 0x6a0b, 0x6bdd, 0x6c30, 0x06db, 0x6c7a, + 0x6c77, 0x6e28, 0x6e27, 0x6e65, 0x6f0e, 0x6f0b, 0x6f41, 0x6f13, + 0x6f0f, 0x6f12, 0x6f30, 0x73a0, 0x73a3, 0x739e, 0x7397, 0x73a1, + 0x739d, 0x739b, 0x7463, 0x74e3, 0x74e4, 0x74e6, 0x74e7, 0x74dd, + 0x2185, 0x74ec, 0x74e5, 0x74f1, 0x763b, 0x7639, 0x763a, 0x763c, + 0x763d, 0x7647, 0x763f, 0x7644, 0x7748, 0x7749, 0x7760, 0x77e3, + 0x77e9, 0x77f0, 0x08da, 0x08db, 0x77f2, 0x77ed, + /* 0x2a */ + 0x77ec, 0x77e6, 0x7816, 0x08d7, 0x7cbc, 0x7cbe, 0x7cc0, 0x7ce0, + 0x8000, 0x8002, 0x7ffe, 0x805e, 0x80b3, 0x80b7, 0x813a, 0x8139, + 0x813e, 0x8138, 0x813d, 0x814f, 0x826e, 0x825f, 0x8281, 0x8282, + 0x8271, 0x827b, 0x8279, 0x8277, 0x8273, 0x826f, 0x8297, 0x827e, + 0x83fc, 0x8411, 0x8432, 0x8431, 0x8410, 0x85ec, 0x85eb, 0x862c, + 0x862d, 0x86da, 0x872e, 0x872c, 0x872a, 0x8733, 0x874b, 0x8818, + 0x8842, 0x883b, 0x883f, 0x8841, 0x8843, 0x883c, 0x8a4c, 0x8a4a, + 0x8a49, 0x8a56, 0x8acf, 0x8b47, 0x8b48, 0x8b46, 0x8c1b, 0x8c11, + 0x8c14, 0x8c1d, 0x8c17, 0x8c1e, 0x8c0b, 0x8c1c, 0x8c12, 0x8c16, + 0x8c0d, 0x8c15, 0x8c13, 0x8c18, 0x0c1a, 0x8eac, 0x8f44, 0x8f2c, + 0x8f45, 0x9266, 0x926e, 0x9265, 0x9268, 0x9284, 0x9438, 0x943b, + 0x943a, 0x943f, 0x95df, 0x95dd, 0x95de, 0x95e2, + /* 0x2b */ + 0x0dd6, 0x992c, 0x992f, 0x9a8f, 0x9a90, 0x9a8c, 0x9a93, 0x9d25, + 0x9d88, 0x9da7, 0x9ef7, 0x9fbb, 0xa038, 0xa039, 0xa037, 0xa114, + 0xa16e, 0xa17b, 0x0fde, 0xa16c, 0xa17f, 0xa178, 0xa17a, 0xa16f, + 0x0fe5, 0xa3fe, 0xa648, 0xa64b, 0xa641, 0xa649, 0xa63b, 0xad2d, + 0xb0e3, 0xb11a, 0xb10d, 0xb113, 0xb111, 0xb11c, 0x1272, 0xb3b5, + 0x12af, 0xb729, 0xb7a1, 0xb824, 0xbabb, 0xbda1, 0xbf83, 0xbf8d, + 0xbf87, 0xbf85, 0xbf8a, 0xbfa3, 0xbf89, 0xbf84, 0xbfa2, 0xc1b1, + 0xc1b0, 0xc1af, 0xc1b6, 0xc1c9, 0xc1ca, 0xc1c8, 0xc1b4, 0xc759, + 0xc7c9, 0xc941, 0xc94c, 0x15c4, 0xc945, 0xc95a, 0x3bb9, 0x3d94, + 0x3d6e, 0x3da2, 0x3d67, 0x0063, 0x3da3, 0x3d76, 0x3d6c, 0x3d64, + 0x3da5, 0x3d30, 0x3da6, 0x3d69, 0x3da4, 0x3f90, 0x405f, 0x4060, + 0x40da, 0x40d8, 0x40dd, 0x00ec, 0x4259, 0x425b, + /* 0x2c */ + 0x425a, 0x4239, 0x4234, 0x4244, 0x4233, 0x423c, 0x4258, 0x426a, + 0x436f, 0x4372, 0x4370, 0x4371, 0x436e, 0x43f0, 0x43eb, 0x4449, + 0x444c, 0x44f5, 0x4520, 0x456a, 0x4572, 0x464b, 0x465d, 0x4750, + 0x47f9, 0x47fa, 0x47fb, 0x4823, 0x47b7, 0x4822, 0x47b5, 0x47c4, + 0x47b4, 0x47ef, 0x0198, 0x47cd, 0x47f0, 0x47b8, 0x47cb, 0x47f1, + 0x47ba, 0x4803, 0x47f8, 0x47b6, 0x47bc, 0x47b3, 0x4821, 0x47f7, + 0x47c2, 0x47be, 0x47c9, 0x47bd, 0x47ce, 0x47b9, 0x47c7, 0x47ca, + 0x47cc, 0x4826, 0x4ce4, 0x4ce0, 0x4cf0, 0x4dec, 0x4e24, 0x4e18, + 0x4e2f, 0x4e25, 0x5028, 0x5022, 0x506a, 0x3c57, 0x5094, 0x5092, + 0x509c, 0x5122, 0x5130, 0x511d, 0x5123, 0x5235, 0x5233, 0x522f, + 0x524d, 0x5231, 0x525b, 0x525a, 0x5232, 0x525c, 0x5259, 0x525d, + 0x5469, 0x546d, 0x5d32, 0x0358, 0x550a, 0x5520, + /* 0x2d */ + 0x551f, 0x550d, 0x56e8, 0x56ec, 0x5777, 0x5770, 0x5771, 0x58f8, + 0x58d6, 0x58d9, 0x58de, 0x58d5, 0x58e1, 0x03d3, 0x58e2, 0x58dd, + 0x58e0, 0x590e, 0x5908, 0x58dc, 0x590a, 0x590c, 0x5bb4, 0x5bb1, + 0x5bb6, 0x5bbc, 0x5d1d, 0x5d24, 0x5d19, 0x5d1b, 0x5d22, 0x5d1a, + 0x5d1c, 0x5d21, 0x5ee6, 0x5ee4, 0x5ee7, 0x5eea, 0x04e2, 0xe29b, + 0x5ff0, 0x5ff5, 0x5fef, 0x6142, 0x616e, 0x613c, 0x6197, 0x618c, + 0x6181, 0x6171, 0x61ce, 0x61ba, 0x617a, 0x617e, 0x0554, 0x6172, + 0x61bb, 0x052f, 0x6173, 0x6182, 0x05b6, 0x64ba, 0x64b8, 0x654b, + 0x6548, 0x662b, 0x65f4, 0x662c, 0x6642, 0x6648, 0x6644, 0x6645, + 0x663c, 0x6637, 0x6633, 0x6641, 0x6632, 0x6687, 0x6a27, 0x6a23, + 0x6a2d, 0x6a1f, 0x6a2c, 0x6a28, 0x6b75, 0x6b74, 0x6be7, 0x6c32, + 0x6c31, 0x6c99, 0x6c96, 0x6c98, 0x6c9d, 0x6c92, + /* 0x2e */ + 0x6c94, 0x6c95, 0x6c97, 0xa1b9, 0x0735, 0x6f11, 0x6f3b, 0x6f79, + 0x6f42, 0x6f43, 0x075d, 0x6f78, 0x73ac, 0x0829, 0x73b1, 0x73b4, + 0x73b3, 0x73af, 0x73aa, 0x73b2, 0x7468, 0x74f2, 0x74fe, 0x74f8, + 0x74f9, 0x74ff, 0x74f5, 0x74f7, 0x74fd, 0x7500, 0x7588, 0x766e, + 0x765d, 0x7663, 0x7660, 0x7761, 0x7837, 0x7871, 0x7823, 0x7822, + 0x781f, 0x7825, 0x7cfd, 0x7d11, 0x7d23, 0x7cf0, 0x7cef, 0x800e, + 0x800c, 0x80ba, 0x0a1f, 0x8152, 0x8155, 0x8153, 0x8154, 0x8151, + 0x8158, 0x82b0, 0x829f, 0x0a72, 0x82a1, 0x829a, 0x82be, 0x82a0, + 0x8437, 0x0b0b, 0x85f1, 0x85f2, 0x8634, 0x8637, 0x8635, 0x5e8c, + 0x86df, 0x874c, 0x874e, 0x8764, 0x8763, 0x8736, 0x8858, 0x8868, + 0x885b, 0x885f, 0x8859, 0x8865, 0x8860, 0x885e, 0x8ad5, 0x8ad6, + 0x8b4e, 0x8b52, 0x8c35, 0x8c39, 0x8c58, 0x8c41, + /* 0x2f */ + 0x8c57, 0x8c38, 0x8c3d, 0x8c32, 0x8c44, 0xe344, 0x8e63, 0x8e62, + 0x8eb8, 0x8eb0, 0x8eb1, 0x8f4d, 0x8f63, 0x8f70, 0x8f4b, 0x8f4f, + 0x8f4e, 0x8f53, 0x8f47, 0x0ca2, 0x8f54, 0x8f52, 0x8f59, 0x8f7e, + 0x912b, 0x912e, 0x927f, 0x927e, 0x9281, 0x9283, 0x9447, 0x9454, + 0x944d, 0x944c, 0x944b, 0x9457, 0x9565, 0x9564, 0x9561, 0x9562, + 0x95f0, 0x95f3, 0x95f9, 0x95f4, 0x95f5, 0x95ef, 0x95f8, 0x95fc, + 0x95f7, 0x95fd, 0x9617, 0x9934, 0x9936, 0x9938, 0x9aaf, 0x9aae, + 0x9aac, 0x9aa2, 0x9d28, 0x69c2, 0x9d9c, 0x9db3, 0x9d90, 0x9f06, + 0x9f04, 0x9f0b, 0x9f05, 0xa040, 0xa04f, 0xa1ab, 0xa19d, 0xa1b8, + 0xa1b2, 0xa1d2, 0xa1cf, 0xa1a2, 0x0fec, 0xa1a5, 0xa1a9, 0xa1a7, + 0xa1d0, 0xa402, 0xa4cf, 0xa4d0, 0xa516, 0xa519, 0xa675, 0xa671, + 0xa691, 0xa672, 0xa68e, 0xa66d, 0xa688, 0xa673, + /* 0x30 */ + 0x10bb, 0xa681, 0xa676, 0xa67b, 0xa67f, 0xa690, 0xa678, 0xad4b, + 0xad48, 0xad5b, 0xad51, 0xad3d, 0xad40, 0xad46, 0xad4d, 0xad3b, + 0xad4a, 0xad41, 0xad3e, 0xad4e, 0xb0ac, 0xb0e6, 0xb0e9, 0xb129, + 0x1221, 0xb133, 0xb12e, 0xb11e, 0x121f, 0xe3c5, 0xb122, 0xb127, + 0xb2e7, 0xb30b, 0xb466, 0xb6ad, 0xb6ae, 0x3038, 0xb72b, 0xb72a, + 0xb82c, 0xb82d, 0x1391, 0x1396, 0xb98f, 0xb993, 0xbac6, 0xbac5, + 0xbd15, 0xbd13, 0xbdb1, 0xbda9, 0x31ce, 0xbfa8, 0xbfab, 0xbfbe, + 0xbfac, 0xbfa9, 0xbfa6, 0xbfc1, 0xc1cc, 0xc1d1, 0xc1d3, 0xc1e4, + 0xc1cb, 0xc1e1, 0xc1d2, 0xc1e3, 0xc1cf, 0xc1d0, 0xc1e5, 0xc20e, + 0xc7cc, 0xc7ca, 0xc7cb, 0xc95c, 0xc961, 0xc95d, 0xc959, 0xcb77, + 0xd184, 0x3b41, 0x3bfd, 0x3c1a, 0x3c63, 0x3db6, 0x3db2, 0x3de9, + 0x3de7, 0x3dd6, 0x3e30, 0x3dec, 0x3ddd, 0x3de8, + /* 0x31 */ + 0x3db0, 0x3db5, 0x3de1, 0x3f98, 0x3f99, 0x00bc, 0x4093, 0x40e5, + 0x00d8, 0x4260, 0x425e, 0x00f4, 0x437b, 0x43f1, 0x43f3, 0x457f, + 0xe238, 0x4657, 0x4658, 0x4839, 0x48a7, 0x4835, 0x4860, 0x4851, + 0x4862, 0x4842, 0x483c, 0x4843, 0x48ab, 0x48a9, 0x48b4, 0x4879, + 0x486a, 0x483b, 0x48aa, 0x4833, 0x4837, 0x4827, 0x48a8, 0x4870, + 0x482f, 0x4836, 0x48b5, 0x4830, 0x483a, 0x4838, 0x48b1, 0x48ac, + 0x482e, 0x4875, 0x48b0, 0x4cf7, 0x4d00, 0x4cf1, 0x4cf3, 0x4e60, + 0x4e61, 0x4e32, 0x4e2d, 0x4e4a, 0x4e2a, 0x5067, 0x50a2, 0x50a3, + 0x509e, 0x50a4, 0x5144, 0x5132, 0x529b, 0x5298, 0x5299, 0x529a, + 0x5266, 0x5262, 0x526b, 0x8062, 0x5267, 0x553b, 0x5523, 0x5529, + 0x567e, 0x56f3, 0x0385, 0x56f5, 0x0383, 0x5780, 0x577e, 0x577c, + 0x577f, 0x577d, 0x5781, 0x5925, 0x5929, 0x5917, + /* 0x32 */ + 0x5963, 0x5967, 0x5965, 0x592a, 0x5968, 0x5926, 0x5964, 0x591b, + 0x5962, 0x5969, 0x5afe, 0x5b44, 0x5b42, 0x5bb7, 0x5bd2, 0x5bd4, + 0x5bd7, 0x5bdc, 0x5bd1, 0x5bd5, 0x5bcd, 0x5bd8, 0x5c9a, 0x5d42, + 0x5d35, 0x5d58, 0x5d34, 0x5d3c, 0x5d3b, 0x5d3e, 0x5d3d, 0x5d5a, + 0x5d41, 0x5d38, 0x5d45, 0x5d33, 0x5e26, 0x04ba, 0x5ef7, 0x5eef, + 0x5ef0, 0x5eee, 0x5f9d, 0x6006, 0x6011, 0x6008, 0x6002, 0x600a, + 0x6007, 0x6191, 0x618e, 0x6185, 0x61e8, 0x6217, 0x61d4, 0x0569, + 0x61c4, 0x61d5, 0x0545, 0x61d8, 0x6180, 0x61de, 0x6242, 0x64c7, + 0x64bf, 0x668d, 0x6689, 0x6690, 0x669a, 0x66c8, 0x6692, 0x66a1, + 0x6684, 0x6a57, 0x6a47, 0x6a77, 0x6a3a, 0x6a50, 0x6a42, 0x6a43, + 0x6aa3, 0x6b77, 0x6cb2, 0x6ce2, 0x6cbd, 0x6e74, 0x6f82, 0x6fb8, + 0x076c, 0x6fba, 0x6fb9, 0x6fbb, 0x6f87, 0xe2e4, + /* 0x33 */ + 0x6f83, 0x6fb7, 0x3b43, 0x73ce, 0x73ba, 0x7473, 0x7509, 0x750a, + 0x750b, 0x7507, 0x7505, 0x750e, 0x7597, 0x7677, 0x767b, 0x767a, + 0x7674, 0x7679, 0x7886, 0x78f5, 0x78a5, 0x789d, 0x78be, 0x7896, + 0x78e1, 0x78a4, 0x78a1, 0x78f6, 0x0904, 0x788d, 0x788b, 0x7878, + 0x7898, 0x790a, 0x7d5d, 0x7d27, 0x7d5f, 0x80c0, 0x80c1, 0x816d, + 0x815e, 0x818a, 0x8162, 0x8164, 0x0a3a, 0x82c0, 0x82ca, 0x82d1, + 0x0a79, 0x82c7, 0x82ce, 0x2309, 0x82c5, 0x8436, 0x8457, 0x8477, + 0x85f6, 0x85f7, 0x8655, 0x8644, 0x863e, 0x8642, 0x8652, 0x86e1, + 0x8708, 0x8768, 0x8767, 0x0b5d, 0xe337, 0x887e, 0x8893, 0x8879, + 0x8881, 0x887d, 0x887b, 0x8894, 0x0b8a, 0x8a66, 0x8ad9, 0x8ae0, + 0xe33e, 0x8b5f, 0x8c5f, 0x8c5e, 0x8c68, 0x0c27, 0x8c88, 0x8c6a, + 0x8c6c, 0x8c66, 0x8c67, 0x8c89, 0x8c60, 0x8c85, + /* 0x34 */ + 0x3e2a, 0x8e68, 0x8eb9, 0x8eba, 0x8ebe, 0x8f6f, 0x8f80, 0x8f74, + 0x8f81, 0x8f7a, 0x8f9c, 0x8f73, 0x8f82, 0x8f7f, 0x8fa7, 0x8f79, + 0x8f78, 0x8f7d, 0x8fa8, 0x8f7c, 0x9168, 0x914e, 0x929e, 0x0d46, + 0x0d40, 0x9298, 0x0d3f, 0x9285, 0x929c, 0x92c5, 0x929a, 0x9468, + 0x9465, 0x9467, 0x9461, 0x9460, 0x0d9d, 0x0dcb, 0x957b, 0x0de1, + 0x9619, 0x960e, 0x9631, 0x9612, 0x9610, 0x9615, 0x963f, 0x961d, + 0x961e, 0x994d, 0x9948, 0x9945, 0x9942, 0x9949, 0x994a, 0x9947, + 0x0e7f, 0x994c, 0x9acd, 0x9ad5, 0x9ac4, 0x9aca, 0x9ac3, 0x0f46, + 0x9d29, 0x9db4, 0x9e6d, 0x9e66, 0x9e6a, 0x9f15, 0x9fd3, 0x9fec, + 0xa055, 0x101a, 0xa1d6, 0xa1d8, 0xa251, 0xa1e0, 0xa203, 0xa204, + 0xa1da, 0xa1ea, 0xa202, 0xa1d3, 0xa1e4, 0xa1e5, 0xa43b, 0xa466, + 0xa52c, 0xa521, 0xa526, 0xa5d4, 0xa5d5, 0xa5d9, + /* 0x35 */ + 0xa6d5, 0xa6eb, 0xa6c5, 0x10d3, 0xa727, 0xa6f0, 0xa6b9, 0xa718, + 0xa6ee, 0x10d0, 0xa6b7, 0xa6bb, 0xa6ef, 0xa6b8, 0xa6df, 0xa6da, + 0xa6e3, 0xa6c9, 0xa6ec, 0xaca4, 0x118e, 0xaca3, 0xad5e, 0xad61, + 0xad62, 0xad63, 0xad8e, 0xad69, 0xad6b, 0xad85, 0xad8d, 0xad64, + 0xad6d, 0xb14c, 0xb149, 0xb147, 0xb148, 0xb142, 0xb145, 0xb15b, + 0xb15d, 0xb146, 0xb313, 0xb31a, 0xb30e, 0xb30f, 0xb31b, 0xb312, + 0xb3c3, 0xb3be, 0xb3bd, 0xb479, 0xb47c, 0x12c3, 0x12b6, 0xb480, + 0xb475, 0xb49b, 0x2f2f, 0xb474, 0x12c0, 0x12b8, 0x5b41, 0x5f94, + 0xb730, 0xb7a7, 0xb7a5, 0xb7a4, 0xb83a, 0xb95b, 0xb99f, 0xb9a8, + 0xb9b3, 0xb9a1, 0xb9a7, 0xb9b2, 0xb99d, 0xb9a3, 0xb9a2, 0xbaef, + 0xbad9, 0x13d9, 0xbad5, 0xbadd, 0xbada, 0xbaee, 0xbad7, 0xbd1a, + 0xbd19, 0xbd18, 0xbdb3, 0xbdbf, 0xbdbb, 0xbdc0, + /* 0x36 */ + 0xbdb9, 0xbdb8, 0xbdd5, 0xbf11, 0xbf10, 0xbfc3, 0xbfc2, 0xbfe9, + 0xbfcd, 0xbfe5, 0xbfca, 0xbfc7, 0xbfe8, 0xc1f1, 0xc20c, 0xc1ef, + 0xc1ee, 0xc1f3, 0xc20d, 0xc1f6, 0xc1f0, 0x14ec, 0xc2f5, 0xc2f4, + 0xc2f8, 0xc2fe, 0xc411, 0xc422, 0xc442, 0xc75c, 0xc75a, 0xc75d, + 0xc7d1, 0xc7d0, 0xc975, 0xc97b, 0xca89, 0xcf4d, 0xd189, 0xd192, + 0xd18c, 0xd188, 0xd367, 0xd368, 0x3e21, 0x3df2, 0x3e09, 0x3df8, + 0x3df0, 0x3df3, 0x3df5, 0x3dfb, 0x3df7, 0x3def, 0x3e0b, 0x3fa2, + 0x40f5, 0x40f3, 0x40f4, 0x40f2, 0x4198, 0x4268, 0x4280, 0x4285, + 0x428e, 0x428f, 0x3df4, 0x4286, 0x42a4, 0x4386, 0x4389, 0x4387, + 0x4385, 0x1adc, 0x4388, 0x45ff, 0x4666, 0x01cc, 0x48c3, 0x01a2, + 0x48c4, 0x493b, 0x48e7, 0x48f8, 0x48fb, 0x01b6, 0x48be, 0x48c6, + 0x01c5, 0x01c6, 0x48fc, 0x48c0, 0x4933, 0x48c9, + /* 0x37 */ + 0x48fe, 0x48da, 0x48cc, 0x48bb, 0x48fd, 0x48df, 0x48cd, 0x48c2, + 0x48c8, 0x4932, 0x492d, 0x48d2, 0x4931, 0x48d3, 0x492e, 0x48cf, + 0x4cff, 0x4d09, 0x4cfc, 0x4e72, 0x4eaa, 0x4eab, 0x4ea7, 0x4e7b, + 0x4e76, 0x4ea8, 0x4eac, 0x0283, 0x1b21, 0x50aa, 0x4503, 0x50ac, + 0x50ad, 0x50ab, 0x5150, 0x5158, 0x52dd, 0x02f8, 0x52ae, 0x52a2, + 0x52ab, 0x52e3, 0x52af, 0x52e0, 0x52e4, 0x02f6, 0x52a7, 0x52aa, + 0x52e2, 0x52e1, 0x52df, 0x52ad, 0x52e5, 0x52d1, 0x52ac, 0x52d5, + 0x52a3, 0x529f, 0x5479, 0x5476, 0x5543, 0x553d, 0x5547, 0x5544, + 0x553f, 0x555b, 0x567f, 0x579a, 0x579c, 0x039b, 0x581e, 0x5988, + 0x596a, 0x5976, 0x5972, 0x5970, 0x597e, 0x596c, 0x596f, 0x5975, + 0x5977, 0x5978, 0x598a, 0x5979, 0x5994, 0x5b01, 0x5c05, 0x5bf1, + 0x5bee, 0x5bef, 0x5c04, 0x1c3f, 0x5bfa, 0x5c07, + /* 0x38 */ + 0x5bf4, 0x5bf5, 0x5c9c, 0x5d6d, 0x5d69, 0x5d66, 0x5d62, 0x5d46, + 0x048d, 0x5d65, 0x5d5d, 0x5d5e, 0x5d5f, 0x5e8e, 0x5f02, 0x5f06, + 0x5f04, 0x5f03, 0x5f62, 0x6027, 0x6021, 0x6020, 0x6024, 0x6029, + 0x6031, 0x6023, 0x6022, 0x61dc, 0x624d, 0x61e5, 0x61d3, 0x61ee, + 0x61e6, 0x0556, 0x6236, 0x6240, 0x633f, 0x623d, 0x6244, 0x055b, + 0x625f, 0x6229, 0x6249, 0x628a, 0x622a, 0x6287, 0x624c, 0x6231, + 0x6248, 0x622b, 0x623b, 0x6241, 0x61c9, 0x6234, 0x6253, 0x6235, + 0x6247, 0x6238, 0x64d1, 0x64d2, 0x6551, 0x6555, 0x6552, 0x6553, + 0x668f, 0x66f4, 0x6747, 0x670d, 0x671c, 0x66fb, 0x6719, 0x66f7, + 0x66f9, 0x66f5, 0x66e9, 0x670a, 0x66ee, 0x670b, 0x66fd, 0x6706, + 0x6702, 0x6716, 0x6718, 0x66f0, 0x69d4, 0x6a66, 0x6a6a, 0x6a75, + 0x6a76, 0x6a80, 0x6a6d, 0x0696, 0x6a69, 0x6a67, + /* 0x39 */ + 0x6a68, 0x6a5d, 0x6ba4, 0x6bfe, 0x6bfd, 0x6cec, 0x6ce9, 0x6d21, + 0x6ceb, 0x6ce7, 0x6cf2, 0x6d20, 0x6e7a, 0x702d, 0x702e, 0x6fca, + 0x702f, 0x6fc8, 0x077e, 0x6fcb, 0x6fc3, 0x6f84, 0x6fd2, 0x6fc6, + 0x0781, 0x6fcf, 0x6fd5, 0x6fd4, 0x6fdd, 0x702b, 0x70a3, 0x6fdb, + 0x702c, 0x7013, 0x0835, 0x73d1, 0x73cc, 0x73d5, 0x73c9, 0x73cf, + 0x73d2, 0x747b, 0x747c, 0x7523, 0x751d, 0x751c, 0x751e, 0x7522, + 0x7524, 0x7520, 0x7518, 0x7521, 0x7688, 0x768a, 0x7694, 0x768f, + 0x768e, 0x7690, 0x089b, 0x76a7, 0x7764, 0x0900, 0x7918, 0x7914, + 0x791d, 0x7905, 0x78ff, 0x791b, 0x791a, 0x7919, 0x7903, 0x790e, + 0x7947, 0x7904, 0x795a, 0x7907, 0x7920, 0x7d6a, 0x7d66, 0x7d7a, + 0x7d65, 0x7daf, 0x80cd, 0x80cf, 0x80d1, 0x80ce, 0x815f, 0x8177, + 0x8174, 0x8188, 0x8175, 0x8189, 0x8172, 0x82c6, + /* 0x3a */ + 0x82ea, 0x82e0, 0x8307, 0x82e6, 0x82e5, 0x82dd, 0x82e3, 0x82da, + 0x84ae, 0x847e, 0x847d, 0x847f, 0x0ad3, 0x84d9, 0x85fa, 0x85fb, + 0x864d, 0x8654, 0x8651, 0x8650, 0x8898, 0x8895, 0x889d, 0x88c1, + 0x889a, 0x889b, 0x0b9f, 0x889c, 0x88d7, 0x88a4, 0x8896, 0x88a0, + 0x8a31, 0x8ae9, 0x8b6e, 0x8c9a, 0x8ca5, 0x8c94, 0x8ca6, 0x8c99, + 0x8c8b, 0x8c98, 0x8c91, 0x8c8c, 0x8ca1, 0x8ca3, 0x8cc6, 0x8e6f, + 0x8e6d, 0x8e6a, 0x8e6c, 0x8e71, 0x8e6e, 0x8edf, 0x8fac, 0x8faa, + 0x0cb1, 0x8fb5, 0x8fad, 0x8fb2, 0x8fb3, 0x8fab, 0x8fb6, 0x8fc7, + 0x8fc6, 0x916c, 0x9170, 0x92b3, 0x0d4b, 0x948c, 0x9481, 0x9483, + 0x947d, 0x9485, 0x9490, 0x94a2, 0x948d, 0x948f, 0x947e, 0x948a, + 0x947f, 0x9476, 0x9487, 0x9478, 0x9580, 0x9582, 0x9581, 0x9583, + 0x965a, 0x9634, 0x962c, 0x962a, 0x9640, 0x962d, + /* 0x3b */ + 0x9633, 0x962b, 0x964b, 0x283f, 0x963c, 0x995a, 0x9977, 0x9960, + 0x9afa, 0x9af9, 0x9afc, 0x0ed6, 0x9af5, 0x9ae8, 0x9b09, 0x9ae7, + 0x9ae6, 0x9ae9, 0x9d32, 0x9d2c, 0x9dbd, 0x9dbc, 0x9e7a, 0x9e7e, + 0x9e79, 0x0f89, 0x9f23, 0x9f30, 0x9f28, 0x9fd4, 0xa5ce, 0x9ff1, + 0x9ff0, 0xa060, 0xa065, 0xa1a8, 0xa20a, 0xa21b, 0xa212, 0xa207, + 0xa24f, 0xa20e, 0xa252, 0xa216, 0x1000, 0xa253, 0xa254, 0xe384, + 0xa256, 0xa46d, 0xa472, 0xa52f, 0xa72a, 0x10dc, 0xa763, 0xa784, + 0xa7af, 0xa745, 0xa770, 0xa756, 0xa716, 0xa73d, 0xa738, 0xa76f, + 0xa777, 0xa72e, 0xa731, 0xa74c, 0xa75f, 0xa775, 0xa739, 0xa73a, + 0xa72c, 0xa72d, 0xa73f, 0xa72f, 0xa730, 0xa73e, 0x2ad0, 0x1190, + 0xacb2, 0xadb7, 0xad8f, 0x11b1, 0xad96, 0xad9e, 0xad97, 0xad95, + 0xada5, 0xad98, 0x2be7, 0xada3, 0xad9a, 0xadad, + /* 0x3c */ + 0xada6, 0xadb6, 0xad99, 0xadaf, 0xadac, 0x11aa, 0xad9f, 0xad94, + 0xb0eb, 0xb16f, 0xb16d, 0xb17e, 0xb16c, 0xb161, 0xb163, 0xb16b, + 0xb15e, 0xb13e, 0xb164, 0xb1ad, 0x127d, 0xb320, 0xb3d1, 0xb3d5, + 0xb4ae, 0xb4af, 0xb49f, 0xb4a8, 0xb4ca, 0xb6e1, 0xb739, 0xb738, + 0xb73b, 0xb7ad, 0xb7b5, 0xb7af, 0xb7b1, 0xb7ae, 0xb7b4, 0xb7b0, + 0xb84b, 0xb851, 0xb84c, 0x1369, 0xb860, 0xb9be, 0xb9b9, 0xb9b7, + 0xb9b6, 0x13a1, 0xb9bd, 0xb9b8, 0xb9c1, 0xbaf7, 0xbaf3, 0xbaf4, + 0xbafb, 0xbafd, 0xbaf5, 0x13e7, 0xbafa, 0xbb14, 0x13ec, 0xbaf2, + 0xbafc, 0xbb00, 0x13df, 0xbd2b, 0xbd29, 0xbd2e, 0x1433, 0xbdd7, + 0xbddb, 0xbdd9, 0xbdd8, 0xbde6, 0xbdd6, 0xbdd1, 0xbde7, 0xbdd0, + 0xbddc, 0xbfed, 0xc01a, 0xc019, 0xc016, 0xbfec, 0xbfef, 0xbfee, + 0xbff4, 0xc02f, 0xc230, 0xc219, 0xc218, 0xc211, + /* 0x3d */ + 0xc216, 0xc212, 0xc210, 0xc214, 0xc30c, 0xc30d, 0xc410, 0xc429, + 0xc428, 0xc765, 0xc766, 0xc7de, 0xc7df, 0xc7e0, 0xc7d9, 0xc7db, + 0xc7d8, 0xc7e3, 0xc7d7, 0xc9a6, 0xc9a7, 0xc9bf, 0xc9a8, 0xc99f, + 0xc9a1, 0xc9a2, 0xc9ad, 0xc9a3, 0xc9a0, 0xcb83, 0xcb85, 0xcb82, + 0xcb84, 0xccee, 0xcd5d, 0xce92, 0xcf55, 0xcf53, 0xe3fc, 0xcf51, + 0xcf52, 0xcf50, 0xd09d, 0xd187, 0xd197, 0xd19b, 0xd19d, 0xd369, + 0xd511, 0x17ee, 0xd77a, 0x1832, 0x6d44, 0x3bc6, 0x3e40, 0x3e2e, + 0x3e68, 0x3e2d, 0x3e34, 0x3e32, 0x3e69, 0x3e31, 0x3e6a, 0x3e3e, + 0x3e6f, 0x3e75, 0x3ff6, 0x4020, 0x4028, 0x4067, 0x40fb, 0x40fe, + 0x40fc, 0x40fd, 0x40ff, 0x40fa, 0x42ac, 0x42af, 0x42b1, 0x00fc, + 0x42bf, 0x42be, 0x42a7, 0x42aa, 0x4394, 0x4393, 0x4399, 0x012a, + 0x43fa, 0x4456, 0x4522, 0x4591, 0x4592, 0x4608, + /* 0x3e */ + 0x4606, 0x48d6, 0x4937, 0x494b, 0x49ce, 0x49d0, 0x4939, 0x4964, + 0x49cf, 0x4946, 0x4966, 0x4956, 0x4943, 0x494a, 0x4958, 0x4965, + 0x495a, 0x495b, 0x4955, 0x4950, 0x494c, 0x49cd, 0x4951, 0x4947, + 0x01d3, 0x4953, 0x4962, 0x49cc, 0x01d7, 0x497f, 0x494d, 0x4d0a, + 0x4d0c, 0x4d0f, 0x4ebb, 0x4eb9, 0x4eeb, 0x4eae, 0x4ec1, 0x4eea, + 0x4ebe, 0x4ebf, 0x4eba, 0x4eb7, 0x4eb3, 0x4ee9, 0x506e, 0x50af, + 0x50b3, 0x50b2, 0x5168, 0x5169, 0x516a, 0x52de, 0x52eb, 0x5311, + 0x52ed, 0x52e9, 0x52f7, 0x52f4, 0x52ea, 0x5312, 0x52e8, 0x5313, + 0x548e, 0x5486, 0x5563, 0x5565, 0x5699, 0x57c2, 0x57ae, 0x57b0, + 0x57ad, 0x59b4, 0x59d1, 0x59ad, 0x03f3, 0x59bd, 0x59b7, 0x59ab, + 0x59af, 0x59c1, 0x59b5, 0x5c0f, 0x5c0e, 0x5c1c, 0x5c13, 0x5c0a, + 0x5c1e, 0x5c14, 0x5c1a, 0x5ccb, 0x5d87, 0x5d93, + /* 0x3f */ + 0x0491, 0x5d84, 0x5d85, 0x5d92, 0x5d80, 0x5e2b, 0x5e63, 0x5f0a, + 0x04c0, 0x5f66, 0x6034, 0x6033, 0x604d, 0x6289, 0x6257, 0x1e17, + 0x624a, 0x0563, 0x6239, 0x623f, 0x6290, 0x628f, 0x62b2, 0x629f, + 0x6295, 0x62a1, 0x629c, 0x628e, 0x62a0, 0x62ae, 0x6296, 0x62ca, + 0x62ac, 0x0570, 0x62a6, 0x6297, 0x6293, 0x3eb6, 0x64d6, 0x64e0, + 0x64d8, 0x6556, 0x676e, 0x677e, 0x6774, 0x6777, 0x6780, 0x677a, + 0x676b, 0x675f, 0x6776, 0x67b0, 0x6763, 0x6a92, 0x6a82, 0x6a9d, + 0x6a94, 0x6a83, 0x6a8b, 0x6a84, 0x6b57, 0x6b84, 0x6bb5, 0x6c09, + 0x6ce6, 0x0702, 0x6d25, 0x6d51, 0x6e3e, 0xe2da, 0x6e85, 0x703f, + 0x7042, 0x7038, 0x703a, 0x704e, 0x7045, 0x7039, 0x7037, 0x7044, + 0xe2e7, 0x70a4, 0x703d, 0x7041, 0x73df, 0x73de, 0x73ca, 0x73e9, + 0x73e2, 0x73e0, 0x7489, 0x7487, 0x7532, 0x7533, + /* 0x40 */ + 0x75ac, 0x75f9, 0x760d, 0x76b9, 0x795e, 0x796a, 0x0935, 0x7981, + 0x7969, 0x79ac, 0x7980, 0x7975, 0x7971, 0x7976, 0x796f, 0x7db6, + 0x7e03, 0x7dbf, 0x7e01, 0x7db2, 0x7dc4, 0x80db, 0x80dc, 0x80d8, + 0xd172, 0x81b5, 0x81a8, 0x818f, 0x819e, 0x818e, 0x82de, 0x82e2, + 0x8320, 0x831d, 0x831a, 0x8319, 0x832b, 0x8318, 0x8310, 0x830e, + 0x8324, 0x831f, 0x8313, 0x8335, 0x8483, 0x0ae0, 0x84d7, 0x8602, + 0x8603, 0x865c, 0x865f, 0x86c7, 0x879a, 0x8797, 0x87a3, 0x88f7, + 0x88c6, 0x88cc, 0x88d6, 0x88cd, 0x88f9, 0x88d9, 0x88d8, 0x0b9a, + 0x88d1, 0x88ce, 0x88d5, 0x0ba3, 0x88d4, 0x88f8, 0x8a7a, 0x8a79, + 0x8a7f, 0x8af3, 0x8af5, 0x8af6, 0x8af4, 0x8af7, 0x0c05, 0x8b79, + 0x8c9c, 0x8cdf, 0x8cf5, 0x8cff, 0x8cd1, 0x8cda, 0x8ccf, 0x8ccd, + 0x8cde, 0x8cd8, 0x75ad, 0x8ce0, 0x8cfe, 0x8c9e, + /* 0x41 */ + 0x8e75, 0x8e73, 0x8e72, 0x8ed8, 0x8fd0, 0x8fd6, 0x8fd7, 0x8fca, + 0x8fcd, 0x918a, 0x9189, 0x918b, 0x92d3, 0x92da, 0x92ce, 0x92d2, + 0x0d5e, 0x92d4, 0x92d7, 0x92d5, 0x92fb, 0x92cd, 0x92fa, 0x92d6, + 0x0da6, 0x949b, 0x949e, 0x949d, 0x94a4, 0x949f, 0x94a5, 0x94a8, + 0x958f, 0x958c, 0x9595, 0x9660, 0x9655, 0x965c, 0x966f, 0x9651, + 0x9661, 0x96a7, 0x965e, 0x9662, 0x9654, 0x966e, 0x9652, 0x9658, + 0x966d, 0x965f, 0x966c, 0x9650, 0x965d, 0x968e, 0x9972, 0x9978, + 0x9975, 0x9976, 0x997c, 0x997e, 0x997d, 0x9b15, 0x9b14, 0x9b1d, + 0x9b1c, 0x9b23, 0x9b57, 0x9dc8, 0x0f5d, 0x9dc9, 0x9dc5, 0x9e87, + 0x9e8a, 0x9e94, 0x9f39, 0x9f40, 0x9f3e, 0x9f38, 0x9fd6, 0x0fb8, + 0xa077, 0xa078, 0xa07d, 0xa1dd, 0xa25e, 0xa277, 0xa2d4, 0xa266, + 0xa25f, 0xa273, 0xa272, 0xa297, 0xa25a, 0xa296, + /* 0x42 */ + 0xa25d, 0xa265, 0xa270, 0xa275, 0xa274, 0xa25c, 0xa260, 0x1034, + 0xa26d, 0xa441, 0xa53c, 0xa53e, 0x106f, 0xa549, 0xa6e4, 0xa80c, + 0xa815, 0xa80e, 0xa7d4, 0xa7c7, 0xa814, 0xa7db, 0xa85f, 0xa7ed, + 0xa809, 0xa7cf, 0xa7ff, 0xa81a, 0xa7f5, 0xa7ee, 0xa7e5, 0xa80d, + 0xa7df, 0xa7ec, 0xa7d7, 0xa82c, 0xa7cd, 0xa7e3, 0xa800, 0xa7eb, + 0xa7fd, 0xa80f, 0xa82d, 0xa850, 0xa7fe, 0xa7c4, 0xa7e1, 0xa7f9, + 0xacbb, 0xacbc, 0x1194, 0x1193, 0xacba, 0xadd0, 0xadd6, 0xadce, + 0xade1, 0xadd5, 0xadcf, 0xadd3, 0x2c14, 0xadd4, 0xb0b5, 0xb190, + 0xb1a1, 0xb181, 0xb185, 0xb16e, 0xb188, 0xb182, 0xb186, 0xb18f, + 0xb189, 0xb180, 0xb184, 0x2dd1, 0xb329, 0xb32b, 0xb32a, 0xb330, + 0xb3e2, 0xb3e3, 0xb3e1, 0xb4d5, 0xb4c4, 0xb4c9, 0xb4e0, 0xb4df, + 0xb4cb, 0xb4dd, 0xb4e8, 0xb4d4, 0xb51c, 0xb6b5, + /* 0x43 */ + 0xb6b6, 0xb6e5, 0xb745, 0xb749, 0xb740, 0xb746, 0xb744, 0xb74a, + 0xb7c9, 0xb7c4, 0xb7c2, 0xb868, 0x30cb, 0xb882, 0xb86b, 0xb867, + 0xb86c, 0xb86d, 0xb871, 0x1392, 0xb9d7, 0xb9d2, 0xb9d9, 0x13aa, + 0xb9bc, 0xb9dd, 0xb9d6, 0x13a7, 0xb9d8, 0xbb20, 0xbb16, 0xbb18, + 0xbb15, 0xbb19, 0xbb27, 0xbb50, 0xbb1d, 0xbb2c, 0xbb1c, 0xbb29, + 0xbb2b, 0xbb24, 0x13ef, 0xbb28, 0xbd39, 0xbdf2, 0xbdf0, 0x31ed, + 0xbded, 0xbdef, 0xbdea, 0xbe01, 0xbfbc, 0xc05c, 0xc05b, 0xc05a, + 0xc026, 0xc243, 0xc233, 0xc23a, 0xc237, 0xc236, 0xc23c, 0xc234, + 0xc24a, 0xc23b, 0xc235, 0xc23d, 0xc240, 0xc23e, 0xc217, 0xc326, + 0xc324, 0xc310, 0xc336, 0xc325, 0x1522, 0xc466, 0xc77f, 0xc77a, + 0xc7fb, 0xc7fd, 0xc7fc, 0xc7fa, 0xc9d6, 0xc9d2, 0xc9c8, 0xc9c2, + 0xc9c7, 0xc9cd, 0xc9c1, 0xc9c6, 0xc9cc, 0xcaa1, + /* 0x44 */ + 0xcb95, 0xcb94, 0xcb97, 0xcb96, 0xcb93, 0xcba1, 0xcd09, 0xcd08, + 0xcd67, 0xcd65, 0xcd62, 0xcd61, 0xce97, 0xcf01, 0xcf19, 0xcf18, + 0xcf5c, 0xcf67, 0xcf6c, 0x16b5, 0xe3fd, 0xcf66, 0xcf61, 0xcf6e, + 0xcf5d, 0xcf5a, 0xd0a2, 0xd0a9, 0xd0a5, 0xd0a6, 0xd0b2, 0xd0a3, + 0xd1ac, 0xd1aa, 0xd1af, 0xd1ab, 0xd1b1, 0xd1c6, 0xd1ad, 0xd1b9, + 0xd370, 0x1775, 0xd70c, 0xd781, 0xd783, 0xd77e, 0xd851, 0xda99, + 0xda94, 0xda95, 0xddfe, 0xdf18, 0x3c05, 0x3e72, 0x0082, 0x3e99, + 0x3fad, 0x4106, 0x42c2, 0x42cb, 0x42d5, 0x42d2, 0x42cc, 0x42d7, + 0x42c5, 0x42ca, 0x1aec, 0x43a2, 0x43a3, 0x43a1, 0x1ae8, 0x43a6, + 0x43a4, 0x43ff, 0x4400, 0x0135, 0x4506, 0x4525, 0x459f, 0x467f, + 0x49ea, 0x49eb, 0x49de, 0x4a18, 0x49e0, 0x49e8, 0x49df, 0x49f1, + 0x49ec, 0x4a1a, 0x49e6, 0x49e1, 0x4a5d, 0x3b77, + /* 0x45 */ + 0x4a1e, 0x01f0, 0x4a80, 0x4d17, 0x4f1d, 0x4ef7, 0x4eef, 0x4eee, + 0x4eed, 0x4ef5, 0x4f1e, 0x50bd, 0x92ff, 0x50be, 0x516d, 0x5176, + 0x534c, 0x5319, 0x5348, 0x531e, 0x534a, 0x5349, 0x5326, 0x5495, + 0x5585, 0x557e, 0x5597, 0x557d, 0x5642, 0x569e, 0x570c, 0x570b, + 0x570e, 0x57cf, 0x59d8, 0x59e0, 0x59e8, 0x59e9, 0x59e2, 0x59e1, + 0x59da, 0x59e3, 0x59d9, 0x59f0, 0x59e7, 0x59e4, 0x5c23, 0x5c31, + 0x5c33, 0x5c0c, 0xa4e0, 0x5c26, 0x5c24, 0x5c32, 0x5c27, 0x5c21, + 0x5c30, 0x5ca2, 0x5ccc, 0x5d96, 0xe28f, 0x5d98, 0x5d9c, 0x5d9b, + 0x5e6b, 0x5f12, 0x5f14, 0x605a, 0x6054, 0x6051, 0x605e, 0x6058, + 0x04f0, 0x6059, 0x629a, 0x62f2, 0x62ad, 0x6320, 0x62f1, 0x62f0, + 0x62f3, 0x62f4, 0x62e9, 0x62fe, 0x632e, 0x62e8, 0x62e7, 0x62ff, + 0x62f5, 0x64e5, 0x64e7, 0x64e6, 0x64e9, 0x6558, + /* 0x46 */ + 0x676c, 0x67d9, 0x063e, 0x67cb, 0x0639, 0x67be, 0x67b5, 0x67d1, + 0x67c2, 0x67b6, 0x67d3, 0xe2c2, 0x69da, 0x06a2, 0x6aae, 0x06a1, + 0x6aac, 0x6aa9, 0x6aba, 0x6aa7, 0x6ab3, 0x6abd, 0x6ab1, 0x6c0e, + 0x6c11, 0x6c0f, 0x6d52, 0x6d6a, 0x6d54, 0x6d55, 0x6d53, 0x6d57, + 0xe2d0, 0x6d5b, 0x6d58, 0x6d59, 0x073b, 0x70b8, 0x70b5, 0x70bf, + 0x70c1, 0x70bb, 0x07b7, 0x70c3, 0x70ad, 0x70a8, 0x70ae, 0x70aa, + 0x70d0, 0x70b1, 0x70bc, 0x70b7, 0x70b0, 0x70fa, 0x70fb, 0x70b9, + 0x7407, 0x73fc, 0x73ff, 0x73f2, 0x73f8, 0x73f4, 0x0857, 0x0870, + 0x75ae, 0x760f, 0x7610, 0xd5c1, 0x76c7, 0x76c6, 0x76ce, 0x08a7, + 0x76dc, 0x79d5, 0x79d3, 0x7a20, 0x79e2, 0x79f1, 0x79db, 0x79ea, + 0x79eb, 0x79e1, 0x79ff, 0x79d6, 0x79e0, 0x79d7, 0x79e5, 0x0954, + 0x7e1b, 0x7e10, 0x7e0f, 0x7e0e, 0x7e39, 0x7e0a, + /* 0x47 */ + 0x7e14, 0x7e0c, 0x8023, 0x805a, 0x80e2, 0x8193, 0x81b0, 0x81ab, + 0x81bd, 0x81b1, 0x818d, 0x81ad, 0x81aa, 0x81ac, 0x81bc, 0x81c9, + 0x8347, 0x8362, 0x8340, 0x8344, 0x833f, 0x8343, 0x833d, 0x8360, + 0x835f, 0x833a, 0x8342, 0x835e, 0x835d, 0x84bc, 0x84e0, 0x84ee, + 0x84eb, 0x850d, 0x8609, 0x860c, 0x8669, 0x8674, 0x8667, 0x0b31, + 0x2427, 0x87ad, 0x88ff, 0x8916, 0x8908, 0x8909, 0x8900, 0x88fc, + 0x8913, 0x8914, 0x890a, 0xd33e, 0x8929, 0x8917, 0x893b, 0x88fb, + 0x0bbf, 0x890e, 0x0be4, 0x8b08, 0x8d1b, 0x8d1a, 0x8d19, 0x8d02, + 0x0c4a, 0x8d17, 0x8d07, 0x8d13, 0x8d09, 0x8d0a, 0x8d12, 0x8daa, + 0x8d38, 0x8e7b, 0x8e7c, 0x8e7a, 0x8eea, 0x8eeb, 0x8eef, 0x8ef0, + 0x9009, 0x9002, 0x9001, 0x902b, 0x9007, 0x0ccf, 0x9028, 0x8ffb, + 0x902a, 0x8ffe, 0x9004, 0x9029, 0x900a, 0x268c, + /* 0x48 */ + 0x91c2, 0x2691, 0x91a6, 0x0d14, 0x6ac6, 0x5707, 0x930a, 0x92fd, + 0x9306, 0x930d, 0x9309, 0x930b, 0x9300, 0x9305, 0x933d, 0x94d5, + 0x94bf, 0x94ba, 0x94c7, 0x9598, 0x959a, 0x0e0d, 0x96a4, 0x969c, + 0x969d, 0x96a2, 0x9696, 0x9695, 0x96a5, 0x96aa, 0x96ad, 0x969a, + 0x96a3, 0x9697, 0x9690, 0x96af, 0x968d, 0x0e01, 0x96a8, 0x96ee, + 0x99a3, 0x9999, 0x99a1, 0x999c, 0x99a4, 0x99cb, 0x9b56, 0x9b48, + 0x9b59, 0x9b4a, 0x9b5c, 0x0ef1, 0x9b4f, 0x9b4d, 0x9b5d, 0x9d3a, + 0x9de3, 0x9de1, 0x9dde, 0x9e97, 0x9e9a, 0x9f48, 0x9f4a, 0x9f4c, + 0x9f4e, 0x9f4f, 0x9f4b, 0x9f4d, 0x9f47, 0x9f51, 0x9fda, 0x9ff9, + 0x9ffc, 0x9ffb, 0x9ffd, 0x9ff8, 0x9ffa, 0xa08a, 0xa08e, 0xa088, + 0xa089, 0xa08d, 0xa090, 0xe37e, 0xa21c, 0xa2ab, 0xa2a4, 0xa2a8, + 0xa2ad, 0xa29f, 0xa29a, 0xa2b0, 0xa2a5, 0xa2d5, + /* 0x49 */ + 0xa2a2, 0xa2b2, 0xa29d, 0xa2a1, 0xa415, 0xa442, 0xa473, 0xa484, + 0xa4dd, 0xa55c, 0xa54c, 0x1076, 0xa54b, 0xa767, 0xa8a8, 0xa87f, + 0xa88d, 0xa88b, 0xa8f7, 0xa8a9, 0xa8f4, 0xa89a, 0xa88c, 0xa895, + 0xa87e, 0xa877, 0x110a, 0x1103, 0xa871, 0xa8fd, 0xa888, 0xa899, + 0xa86d, 0xa8d4, 0xa891, 0xa87d, 0xa863, 0xa875, 0xa8f9, 0xa88e, + 0xa874, 0xa8d9, 0xa866, 0xa8fa, 0xa8f5, 0x2b60, 0xacc1, 0xacc9, + 0xae03, 0xae2c, 0xae34, 0xae17, 0xae09, 0xae04, 0xae06, 0xae1a, + 0xae0e, 0xae27, 0xae05, 0xae07, 0xae19, 0xae14, 0xae0c, 0xae1d, + 0xae22, 0xae23, 0xb0bb, 0xb0bc, 0xb0ba, 0xb1a9, 0xb1b5, 0xb1ac, + 0xb1aa, 0xb1af, 0xb1b7, 0x1235, 0x1236, 0xb33d, 0xb345, 0xb348, + 0xb33c, 0xb33e, 0xb3ec, 0xb3ed, 0xb3e9, 0xb50a, 0xb50b, 0xb4f8, + 0xb504, 0xb4f6, 0xb4f9, 0xb753, 0xb752, 0xb760, + /* 0x4a */ + 0xb763, 0xb7ce, 0xb7cd, 0xb7d0, 0xb7cc, 0xb887, 0xb88d, 0xb89d, + 0x1373, 0xb963, 0xb9f4, 0xb9f1, 0xb9ff, 0xb9f5, 0xb9fc, 0xb9f2, + 0xb9f6, 0x13b1, 0xb9fa, 0x13af, 0xbb2e, 0xbb45, 0xbb43, 0xbb51, + 0xbb4c, 0xbb73, 0xbb47, 0xbb4b, 0xbb4f, 0x13f4, 0xbb44, 0xbb4d, + 0xbb4e, 0xbb4a, 0xbb41, 0xbb52, 0xbb9f, 0xbb54, 0xbb59, 0xbba2, + 0xbd4b, 0xbd48, 0xbe0d, 0xbe1f, 0xbe08, 0xbe0e, 0xbe1d, 0xbe04, + 0xbf18, 0xbf1b, 0xc066, 0xc062, 0xc083, 0xc067, 0xc262, 0xc24f, + 0xc24e, 0xc267, 0xc253, 0xc24d, 0xc24c, 0xc268, 0xc251, 0x14dc, + 0xc258, 0xc25b, 0xc250, 0xc26a, 0xc339, 0xc338, 0xc482, 0xc484, + 0xc486, 0xc780, 0xc786, 0xc825, 0xc811, 0x1599, 0xc80e, 0xc815, + 0xc80f, 0xc818, 0xc80d, 0xc813, 0xc816, 0xc819, 0xca08, 0xc9f7, + 0xc9fb, 0xc9fc, 0xcab4, 0xcabe, 0xcac1, 0xcba6, + /* 0x4b */ + 0xcba5, 0xcba2, 0xcba4, 0xcd12, 0xcd0e, 0xcd7a, 0xcd78, 0xcd7d, + 0xcd7e, 0xcd81, 0xcd83, 0xcd80, 0xcd82, 0xce9b, 0xce99, 0xce9c, + 0xce9a, 0xcea1, 0xcf1a, 0xcf1c, 0xcf8a, 0xcf79, 0xcf73, 0xcf75, + 0xcf7c, 0xcf78, 0xcf60, 0xcf83, 0xcf70, 0x16b6, 0x16bd, 0xcf87, + 0xcf84, 0xcf7b, 0xcf7e, 0xcf74, 0xd0b9, 0xd0b8, 0xd0b7, 0xd0b5, + 0xd1cc, 0xd1ce, 0xd1d1, 0x3504, 0xd1cb, 0x359b, 0xd37e, 0xd37a, + 0xd377, 0xd38c, 0xd3e1, 0xd520, 0xd51e, 0xd5c2, 0xd60f, 0xd600, + 0x17f4, 0xd610, 0xd70d, 0xd70e, 0xd78e, 0xd78d, 0xd78a, 0xd78b, + 0xd78c, 0xd78f, 0xd857, 0x1835, 0xd855, 0xd85b, 0xdaac, 0xdaa7, + 0xdaa0, 0xda9e, 0x18aa, 0xdd8d, 0x191f, 0xde93, 0xde94, 0xde92, + 0x3c81, 0x3ed6, 0x3ec3, 0x3ee4, 0x3ee2, 0x3f09, 0x3ebf, 0x3ec8, + 0x3ec7, 0x3fb5, 0x3fb2, 0x410c, 0x410b, 0x410a, + /* 0x4c */ + 0x4105, 0x42d3, 0x42e6, 0x42e9, 0x42f0, 0x42ea, 0x42e7, 0x43b1, + 0x43b3, 0x43b4, 0x43b0, 0x445c, 0x445d, 0x445e, 0x44c0, 0x45af, + 0x0150, 0x4686, 0x4683, 0x4684, 0x4a5c, 0x4a70, 0x4a8c, 0x4a7b, + 0x4a66, 0x4a79, 0x4a63, 0x4ac5, 0x4a6b, 0x4a6d, 0x4a72, 0x4a69, + 0x4a75, 0x4a89, 0x4ac6, 0x4aa5, 0x3ee7, 0x4a6a, 0x4a97, 0x4f5a, + 0x4f5c, 0x4f59, 0x4f24, 0x4f25, 0x4f30, 0x4f58, 0x4f31, 0x5076, + 0x50c1, 0x5185, 0x517d, 0x5365, 0x5387, 0x5352, 0x5354, 0x538a, + 0x5350, 0x5386, 0x534f, 0x5368, 0x549d, 0x55a0, 0x55ba, 0x55bd, + 0x55b8, 0x56a6, 0x037b, 0x57de, 0x57d8, 0x57d1, 0x5a13, 0x0409, + 0x5a0e, 0x5a1b, 0x5a3a, 0x0407, 0x5a1c, 0x5a12, 0x5a16, 0x5a1a, + 0x4f48, 0x5c4b, 0x5c37, 0x5c36, 0x5c38, 0x5c3a, 0x5c49, 0x5c3c, + 0x5c4a, 0x5db1, 0x5dc2, 0x5db5, 0x5dc4, 0x5db6, + /* 0x4d */ + 0x5f1e, 0x5f1f, 0x5faf, 0x606b, 0x606f, 0x6292, 0x62e4, 0x632c, + 0x62ef, 0x1e84, 0x634f, 0x6352, 0x6350, 0x633a, 0x6337, 0x6347, + 0x6364, 0x6340, 0x633c, 0x6345, 0x6341, 0x64f3, 0x05bb, 0x67c1, + 0x67b4, 0x064b, 0x682a, 0x6822, 0x6829, 0x064d, 0x683e, 0x683c, + 0x6830, 0x6ac7, 0x6ad5, 0x6ad6, 0x6ad3, 0x6ace, 0x6ac8, 0x6b5c, + 0x6b5f, 0x6b62, 0x06c2, 0x6bbd, 0x6bbf, 0x6d5c, 0x6db6, 0x071a, + 0x6d9d, 0x6d7f, 0x0712, 0x6d94, 0x6d81, 0x6e47, 0x6e46, 0x073c, + 0x6e94, 0x7175, 0x711a, 0x712a, 0x7132, 0x7117, 0x7123, 0x7174, + 0x07c3, 0x7176, 0x712e, 0x7125, 0x7120, 0x7171, 0x7116, 0x7170, + 0x712c, 0x712f, 0x711f, 0x7164, 0x07c0, 0x7408, 0x7414, 0x740a, + 0x740b, 0x754f, 0x7559, 0x7554, 0x7551, 0x75b6, 0x76ec, 0x76ed, + 0x76ea, 0x79ee, 0x7a5a, 0x7a73, 0x7a65, 0x7a61, + /* 0x4e */ + 0x7a55, 0x7a6b, 0x7a64, 0x7a5b, 0x7a4c, 0x7a6f, 0x7a84, 0x7a70, + 0x7e5d, 0x7e57, 0x7e66, 0x7e53, 0x7e98, 0x7e97, 0x8028, 0x80eb, + 0x80ea, 0x80e8, 0x80ec, 0x80ef, 0x81d1, 0x81ca, 0x229f, 0x81cf, + 0x81cd, 0x81ce, 0x8370, 0x8367, 0x8373, 0x836d, 0x8376, 0x8379, + 0x836a, 0x838b, 0x8372, 0x8371, 0x836e, 0x837a, 0x8516, 0x8539, + 0x853b, 0x8610, 0x8696, 0x867b, 0x867c, 0x867d, 0x87be, 0x895c, + 0x8938, 0x8939, 0x892e, 0x8934, 0x8932, 0x895b, 0x8933, 0x893c, + 0x0be5, 0x8b0e, 0x8b0f, 0x8b10, 0x8b87, 0x8d5b, 0x8d53, 0x0c5f, + 0x8d5c, 0x8d3f, 0x8d59, 0x8d4a, 0x8d44, 0x8d4c, 0x8d40, 0x8d5f, + 0x8d5e, 0x8d4e, 0x8d54, 0x8d43, 0x8d87, 0x8e82, 0x8e85, 0x9031, + 0x9047, 0x902e, 0x902f, 0x9048, 0x9034, 0x0d18, 0x409f, 0x9332, + 0x9336, 0x9333, 0x9331, 0x9340, 0x9341, 0x94dd, + /* 0x4f */ + 0x94d2, 0x94d9, 0x0dad, 0x94df, 0x94db, 0x94d8, 0x94d3, 0x94de, + 0x94e0, 0x94d4, 0x94d7, 0x94da, 0x95a7, 0x96fe, 0x96dd, 0x9740, + 0x96e2, 0x0e1e, 0x96d6, 0x96de, 0x96ef, 0x0e27, 0x96eb, 0x96ea, + 0x96e4, 0x96d1, 0x0e18, 0x96ec, 0x96fa, 0x96d9, 0x96f3, 0x96e1, + 0x96dc, 0x96e5, 0x96df, 0x96d4, 0x0e20, 0x9705, 0x99d6, 0x99d5, + 0x99d0, 0x99c8, 0x99c4, 0x99c9, 0x99cd, 0x99d2, 0x99cc, 0x99ca, + 0x9ba0, 0x9b92, 0x0ef4, 0x0f02, 0x9b8b, 0x9ba1, 0x9b95, 0x9b88, + 0x9b86, 0x9b8d, 0x9b85, 0x9b91, 0x9b89, 0x9ba2, 0x9df0, 0x9df3, + 0x9df4, 0x9def, 0x9e06, 0x9ea2, 0x9f5e, 0x9f63, 0x9f60, 0x9f5b, + 0x9f7b, 0x9f58, 0x9f59, 0x9f5d, 0xa005, 0xa006, 0xa002, 0xa003, + 0xa004, 0xa0a2, 0xa0a7, 0xa0a6, 0xa0a4, 0xa0ac, 0xa0a9, 0xa2e7, + 0xa301, 0xa2df, 0xa2d9, 0xa2e3, 0xa30f, 0xa41a, + /* 0x50 */ + 0xa445, 0xa448, 0xa47b, 0xa485, 0xa486, 0xa4fe, 0xa4ff, 0xa564, + 0xa571, 0xa572, 0xa561, 0xa562, 0xa56c, 0xa560, 0xa55d, 0xa563, + 0xa567, 0xa901, 0xa92a, 0xa930, 0xa906, 0xa97d, 0xa922, 0xa9b9, + 0xa90a, 0xa910, 0xa88f, 0xa980, 0xa913, 0xa92e, 0xa918, 0xa917, + 0xa91a, 0xa914, 0xa947, 0xa963, 0xa938, 0x1124, 0xa97f, 0xa921, + 0xa937, 0xa931, 0xa91b, 0xa9a5, 0xaa6c, 0xacd3, 0xae88, 0xae6e, + 0xae5c, 0xae74, 0xae54, 0xae83, 0x2c70, 0xae65, 0xae60, 0xae70, + 0xae6f, 0xae6d, 0xae72, 0xae6c, 0xae76, 0xae75, 0xae59, 0xaec7, + 0xb0c1, 0xb0f9, 0xb1e3, 0xb1e7, 0xb1d6, 0xb1cf, 0xb1da, 0xb1e9, + 0xb1d2, 0xb355, 0xb34f, 0xb34d, 0xb351, 0xb356, 0xb3f9, 0xb3f8, + 0xb406, 0xb403, 0xb409, 0xb3f7, 0xb3f5, 0xb547, 0xb545, 0xb53e, + 0xb546, 0xb529, 0xb534, 0xb53f, 0xb544, 0xb535, + /* 0x51 */ + 0xb55a, 0xb52a, 0xb533, 0xb537, 0xb543, 0xb539, 0xb530, 0xb55d, + 0xb532, 0xb527, 0xb6bd, 0xb6ba, 0xb6bc, 0xb6f1, 0xb6f0, 0xb761, + 0xb75c, 0xb758, 0xb75d, 0xb7da, 0xb7d9, 0xb7dd, 0xb7dc, 0xb7de, + 0x137d, 0xb8a0, 0xb8a2, 0xba0f, 0xba13, 0xba12, 0xba11, 0xba14, + 0xba19, 0xba0e, 0xba17, 0xba21, 0xba20, 0xba16, 0xbb78, 0x3137, + 0xbb87, 0xbb79, 0xbb80, 0xbb77, 0xbb81, 0xbb46, 0xbb7a, 0xbb9c, + 0xbb83, 0xbb84, 0xbbad, 0xbb9d, 0xbb9e, 0xbd55, 0xbe36, 0xbe2b, + 0xbe27, 0xbe46, 0xbe2c, 0xbe45, 0xbe33, 0xbe2d, 0xbe34, 0xbe22, + 0x1464, 0xbf1f, 0xc0b3, 0xc08c, 0xc08f, 0xc0af, 0xc0ad, 0xc08e, + 0xc0ac, 0xc0b0, 0xc0b1, 0xc0ae, 0xc099, 0xc1eb, 0xc274, 0xc275, + 0xc28e, 0xc26d, 0xc270, 0xc28c, 0xc34f, 0xc351, 0xc358, 0xc34c, + 0xc34e, 0xc415, 0xc4be, 0xc4db, 0xc4b3, 0xc4ae, + /* 0x52 */ + 0xc787, 0xc78a, 0xc788, 0xc78b, 0xc78c, 0xc844, 0xc82d, 0xc82a, + 0xc831, 0xc82c, 0xc845, 0xc830, 0xc829, 0xc846, 0xc9f4, 0xca14, + 0xca10, 0xca0f, 0xca12, 0xca0b, 0xca0c, 0xca0a, 0xca13, 0xca0e, + 0xcad9, 0xcad0, 0x3403, 0xcbc1, 0xcbbf, 0xcbbd, 0xcbbc, 0xcbba, + 0xcbbb, 0xcbd1, 0xcbbe, 0xcbd0, 0xcbb9, 0xcd1a, 0xcd1c, 0xcd1b, + 0xcd91, 0xcd96, 0xcd9f, 0xcd9c, 0xcd9a, 0xcd9d, 0xcead, 0xcea5, + 0xceae, 0xcf03, 0xcf26, 0xcf20, 0xcf23, 0xcf24, 0xcf21, 0xcf28, + 0xcf25, 0xcf1e, 0xcf94, 0xcf93, 0xcf8f, 0xcf9a, 0xcfad, 0x16c2, + 0xd0ca, 0xd0c5, 0xd1bb, 0xd1e1, 0xd1ea, 0xd1e4, 0xd1ed, 0xd1e6, + 0xd1e0, 0xd1e8, 0xd1e5, 0xd31a, 0xd394, 0xd396, 0xd39e, 0xd395, + 0xd3a1, 0xd38e, 0xd39b, 0xd392, 0xd397, 0xd399, 0xd393, 0xd532, + 0xd52f, 0xd52e, 0xd533, 0xd61c, 0xd61e, 0xd611, + /* 0x53 */ + 0xd620, 0xd61f, 0xd619, 0xd616, 0xd7ac, 0xd7b9, 0xd7b3, 0xd7a6, + 0xd7a2, 0xd7a9, 0xd7a7, 0xd86c, 0xd86d, 0xd869, 0xd880, 0xd866, + 0xd865, 0xd871, 0xd86b, 0xdabd, 0xdac1, 0xdad3, 0xdab6, 0x18ac, + 0xdab9, 0xdad4, 0xdab7, 0xdadb, 0xdab8, 0xdac0, 0xdabc, 0xdad5, + 0xdabf, 0xdac3, 0xdac9, 0xdd58, 0xdd90, 0xdd95, 0xdd97, 0xde09, + 0xde08, 0xde06, 0xde05, 0xde10, 0xde97, 0xde95, 0xdeee, 0xdf1f, + 0xe41a, 0x564b, 0x3c8e, 0x3ee8, 0x3ef0, 0x3ef4, 0x3f06, 0x3eed, + 0x009b, 0x3ee9, 0x3f00, 0x3fb8, 0x406d, 0x4304, 0x4301, 0x4303, + 0x4302, 0x1af6, 0x0126, 0x4462, 0x45ba, 0x4613, 0x4ade, 0x4ad7, + 0x4ae4, 0x4ace, 0x4ae3, 0x4add, 0x4b3a, 0x4adb, 0x4ad6, 0x4ae0, + 0x4ad4, 0x4acb, 0x4ae1, 0x4ac9, 0x4adf, 0x4b3c, 0x4afc, 0x4acf, + 0x4f79, 0x4f76, 0x4f78, 0x5187, 0x539c, 0x53b1, + /* 0x54 */ + 0x53c1, 0x539a, 0x5392, 0x0daf, 0x53c2, 0x5396, 0x53c0, 0x5391, + 0x5395, 0x54a2, 0x55c3, 0x55c0, 0x55c2, 0x468a, 0x56b0, 0x5716, + 0x5a46, 0x5a4a, 0x5a3e, 0x5a45, 0x5a42, 0x0415, 0x5a5b, 0x5a44, + 0x5b04, 0x7b22, 0x5c55, 0x5c57, 0x5c51, 0x5c4e, 0x5c5a, 0x5dc6, + 0x5dc3, 0x049c, 0x5dc5, 0x5dcc, 0x5e71, 0x5f26, 0x5fb2, 0x607a, + 0x6084, 0x607b, 0x6374, 0x638c, 0x6351, 0x6348, 0x638d, 0x6392, + 0x6398, 0x6393, 0x63b0, 0x634e, 0x6396, 0x6397, 0x639c, 0x63ca, + 0x6833, 0x6883, 0x6884, 0x689a, 0x688c, 0x20cc, 0x6899, 0x69e0, + 0x6ae4, 0x6af8, 0x6aed, 0x6af3, 0x6af4, 0x6af5, 0x6afd, 0x6c19, + 0x6d9e, 0x6dc4, 0x6d9f, 0x6e9b, 0x6e9f, 0x6e9a, 0x71aa, 0x719d, + 0x7192, 0x71a2, 0x71af, 0x71eb, 0x71a0, 0x71a1, 0x7194, 0x7198, + 0x718f, 0x7187, 0x7184, 0x71a9, 0x717c, 0x7418, + /* 0x55 */ + 0x755f, 0x7562, 0x7561, 0x75c0, 0x7615, 0x76fc, 0x76f9, 0x7ac8, + 0x7ac9, 0x7ade, 0x7aca, 0x7ae2, 0x0964, 0x096e, 0x7b04, 0x7acc, + 0x7add, 0x7ae4, 0x7ad3, 0x7ac7, 0x7ac6, 0x095f, 0x7b37, 0x7ed8, + 0x7eee, 0x7eb2, 0x7ea3, 0x7eb3, 0x7eed, 0x7ef8, 0x8031, 0x805b, + 0x8066, 0x8069, 0x8096, 0x809b, 0x80f7, 0x80f3, 0x80f4, 0x80f5, + 0x81e2, 0x81e7, 0x81e5, 0x81e9, 0x81e6, 0x81e3, 0x8374, 0x837f, + 0x838f, 0x8390, 0x8397, 0x83a3, 0x838e, 0x8398, 0x838c, 0x8542, + 0x8544, 0x8569, 0x8543, 0x8568, 0x0af6, 0x868d, 0x8688, 0x868b, + 0x8689, 0x87cc, 0x881f, 0x8980, 0x895e, 0x8967, 0x8968, 0x8965, + 0x254a, 0x8974, 0x8969, 0x8961, 0x8962, 0x896c, 0x8993, 0x8986, + 0x8a9d, 0x8a9b, 0x8b1b, 0x8b16, 0x8b19, 0x8b14, 0x8b18, 0x8b15, + 0x8b99, 0x8b98, 0x8d5d, 0x8d89, 0x8d7a, 0x8d7d, + /* 0x56 */ + 0x8d4b, 0x0c73, 0x8d78, 0x8d7f, 0x8d77, 0x8d7e, 0x8d79, 0x8dab, + 0x8d7c, 0x8d74, 0x8d75, 0x8da7, 0x8e8d, 0x904e, 0x9066, 0x9061, + 0x904d, 0x904f, 0x0cdd, 0x9054, 0x907c, 0x91da, 0x91de, 0x91d8, + 0x91dd, 0x91df, 0x9366, 0x9362, 0x935f, 0x9364, 0x9363, 0x9360, + 0x9388, 0x936a, 0x9367, 0x9387, 0x933f, 0x936c, 0x936e, 0x93ad, + 0x94f1, 0x94f4, 0x94f6, 0x94f5, 0x94f8, 0x94fb, 0x94ec, 0x94ef, + 0x94ed, 0x27b9, 0x94f7, 0x94f9, 0x94fd, 0x95b1, 0x9736, 0x971b, + 0x9732, 0x9742, 0x974d, 0x971f, 0x9721, 0x971c, 0x9731, 0x972e, + 0x9747, 0x973b, 0x9741, 0x9718, 0x9739, 0x971d, 0x9727, 0x9723, + 0x28d7, 0x99ee, 0x99e8, 0x99e5, 0x99ef, 0x99e4, 0x99ec, 0x99f0, + 0x9bd7, 0x9bd8, 0x9bd4, 0x9bca, 0x9bd2, 0x9bcb, 0x9bd3, 0x9be6, + 0x9be2, 0x9d49, 0x9d48, 0x9dff, 0x9e09, 0x9eb0, + /* 0x57 */ + 0x9eaf, 0x9f7c, 0x9f78, 0x9f7a, 0x9f72, 0x9f79, 0x9f7e, 0xa00c, + 0xa00b, 0xa0cd, 0xa0be, 0xa0bc, 0xa0bf, 0xa0c0, 0xa0bd, 0xa338, + 0xa308, 0xa305, 0xa33b, 0xa310, 0xa30c, 0xa30d, 0xa304, 0xa33a, + 0xa313, 0xa337, 0xa339, 0xa41f, 0xa44b, 0xa4ee, 0xa575, 0xa578, + 0xa57c, 0xa574, 0xa576, 0xa5ea, 0xa5eb, 0xa8fb, 0xa919, 0xa9a7, + 0xa98c, 0xa9dc, 0xa998, 0xa9be, 0xa99e, 0xaa0f, 0xa99f, 0xa9dd, + 0xa993, 0xa9bb, 0xa9b6, 0xa990, 0xa9a1, 0xa9bd, 0xa9de, 0xa93a, + 0xaa22, 0xa997, 0xa994, 0xa9c3, 0xa98e, 0xa9a8, 0xa999, 0xa9ad, + 0xa99b, 0xa9a2, 0xaa21, 0xa9ac, 0xaa0e, 0xaa31, 0xace1, 0xacde, + 0xacdf, 0xacdc, 0xacdd, 0xacec, 0xace7, 0xae69, 0xaeb8, 0xaea1, + 0xaea8, 0xaeba, 0xaec2, 0xaea6, 0xaea4, 0xaea3, 0xaeab, 0xaebc, + 0xaeb7, 0xaebf, 0xaead, 0xaeb1, 0xaeca, 0xaec4, + /* 0x58 */ + 0xaeb9, 0xb0c8, 0xb0c6, 0xb0c7, 0xb20a, 0xb20d, 0xb1fb, 0xb203, + 0xb202, 0xb1fc, 0xb1f9, 0xb1f8, 0xb36e, 0xb363, 0xb362, 0xb361, + 0xb36b, 0x1288, 0xb36f, 0xb366, 0xb36c, 0xb40e, 0xb415, 0xb416, + 0xb410, 0xb417, 0xb411, 0xb56e, 0xb56c, 0xb587, 0xb583, 0xb563, + 0xb5dc, 0xb6c0, 0xb6f7, 0xb6fa, 0xb770, 0xb76a, 0xb768, 0xb769, + 0xb784, 0xb7ec, 0xb7e7, 0xb7ee, 0xb8ba, 0xb8b2, 0xb8b5, 0xb8cb, + 0x430b, 0xb8d0, 0xb96d, 0xb96c, 0x13bb, 0xba45, 0xba46, 0xba34, + 0xba2c, 0xba35, 0xba44, 0x13ba, 0xba76, 0xbbb1, 0xbbaa, 0xbba1, + 0xbbb2, 0x1412, 0xbba6, 0xbbb5, 0xbbb4, 0xbbb8, 0xbbaf, 0xbbb0, + 0xbba3, 0xbd62, 0xbd64, 0xbe56, 0xbe51, 0xbe4f, 0xbe68, 0xbe4c, + 0xbe50, 0x1461, 0xbe48, 0xbe4a, 0xbf21, 0xc0e3, 0xc0b9, 0xc0de, + 0xc0b7, 0xc0e1, 0xc0b6, 0xc0b5, 0xc0df, 0x14e1, + /* 0x59 */ + 0xc297, 0xc29a, 0xc29b, 0xc298, 0xc292, 0xc293, 0xc2d7, 0xc273, + 0xc36b, 0xc374, 0xc378, 0xc36d, 0xc418, 0xc4e9, 0xc4f5, 0xc4ea, + 0xc52e, 0xc4e7, 0xc4fe, 0xc4e5, 0xc536, 0xc4f0, 0xc4e6, 0xc52c, + 0xc789, 0xc795, 0xc793, 0xc84d, 0xc84a, 0xc84f, 0xc850, 0xc84b, + 0xca2a, 0xca2b, 0xca2f, 0xca2e, 0xca7c, 0xcaed, 0xcae2, 0xcbe0, + 0xcbdc, 0xcbda, 0xcbd6, 0xcbf4, 0xcbd9, 0xcbd5, 0xcd22, 0xcd21, + 0xcd24, 0xcd25, 0xcd26, 0xcd23, 0xcdaa, 0xcdaf, 0xcdb0, 0xcdab, + 0xceaf, 0xceb7, 0xceb5, 0xceb2, 0xceb3, 0xcf2b, 0xcfd8, 0xcfc2, + 0xcfaf, 0xcfbc, 0xcfb8, 0xcfbe, 0xcfb7, 0xcfb4, 0xcfbf, 0xcfb3, + 0xcfb1, 0xcfbb, 0xcfbd, 0xcfd6, 0xcfdd, 0xd0d8, 0xd0d3, 0xd0d5, + 0xd0e3, 0xd0e2, 0xd0d9, 0xd0de, 0xd0df, 0xd0da, 0xd0d4, 0xd1f3, + 0xd1e2, 0xd20d, 0xd201, 0xd205, 0xd21a, 0xd203, + /* 0x5a */ + 0xd21f, 0xd216, 0xd1fa, 0xd1fc, 0xd20a, 0x359f, 0xd3bc, 0xd3ca, + 0xd3b6, 0xd3c7, 0xd3bf, 0x1789, 0xd3b9, 0x178c, 0xd3b0, 0xd3b8, + 0xd3bd, 0xd391, 0xd3bb, 0xd3be, 0xd53e, 0xd53d, 0xd638, 0xd63d, + 0xd639, 0xd633, 0xd733, 0xd7bb, 0xd7c6, 0xd7c5, 0xd7c7, 0xd7cb, + 0xd7a8, 0xd7c8, 0xd7be, 0xd7c1, 0xd7bd, 0xd882, 0xd89e, 0xd881, + 0xd884, 0x368d, 0xd896, 0xd88e, 0xd888, 0xd887, 0xdae0, 0xdb0d, + 0xdadf, 0xdae4, 0xdae2, 0xdadd, 0xdaec, 0xdade, 0xdae7, 0xdaea, + 0xdae3, 0xdd5c, 0x3977, 0xdd5d, 0xdd9c, 0xde1d, 0xde9d, 0xde9e, + 0xde9b, 0xdeb5, 0xdeb9, 0xdeb6, 0xdef3, 0xdef2, 0xdef4, 0xdf26, + 0xdf27, 0xdf25, 0xe006, 0xe00b, 0xe03a, 0xe03c, 0x3f0a, 0x3f0b, + 0x3fbf, 0x3ffd, 0x4118, 0xccdf, 0x8e90, 0x419e, 0x42fc, 0x4310, + 0x430f, 0x430d, 0x43b9, 0x43b7, 0x43ba, 0x440a, + /* 0x5b */ + 0x4b41, 0x4b8b, 0x4b46, 0x4b53, 0x4be2, 0x4b3f, 0x4a7c, 0x4b4b, + 0x4b4e, 0x4b8a, 0x4b47, 0x4f93, 0xb8ce, 0x4f8c, 0x4faf, 0x4fc9, + 0x50c6, 0x50c8, 0x5191, 0x53cf, 0x53d4, 0x53ce, 0x55dd, 0x55d4, + 0x5a49, 0x5a63, 0x5a5d, 0x041a, 0x5a67, 0x5abb, 0x5a60, 0x5a80, + 0x5c5f, 0x5c60, 0x5dda, 0x5dd2, 0x5ddd, 0x608e, 0x6088, 0x606c, + 0x639e, 0x63c9, 0x63a4, 0x0598, 0x63d9, 0x63d2, 0x63da, 0x63dd, + 0x63ce, 0x63fc, 0x6514, 0x6560, 0x68d7, 0x68cb, 0x68cd, 0x68d5, + 0x69e7, 0x6b00, 0x6b0a, 0x6b0f, 0x6b02, 0x6b01, 0x6c1d, 0x6dca, + 0x6dcb, 0x6dcd, 0x6e4f, 0x6e9c, 0x7180, 0x720d, 0x7202, 0x07f1, + 0x7207, 0x71f7, 0x71f8, 0x71fd, 0x7224, 0x71fb, 0x7239, 0x723a, + 0x7422, 0x21a9, 0x756a, 0x756d, 0x7574, 0x770e, 0x7adf, 0x7b2b, + 0x7ae3, 0x7b26, 0x7b2a, 0x7b23, 0x7b35, 0x7b4a, + /* 0x5c */ + 0x7efd, 0x7f00, 0x7f1e, 0x7eff, 0x809e, 0x80fa, 0x81f1, 0x8395, + 0x83a8, 0x83a6, 0x856e, 0x8583, 0x856d, 0x868f, 0x0b6a, 0x87df, + 0x87d5, 0x87e0, 0x87d3, 0x87d8, 0x898c, 0x254b, 0x8994, 0x8996, + 0x8985, 0x898f, 0x89a9, 0x898e, 0x8990, 0x89b8, 0x89c3, 0x89bb, + 0x8aa5, 0x8aa2, 0x25a2, 0x8aa3, 0x8bb5, 0x8bac, 0x8ba8, 0x8dad, + 0x8db8, 0x8db4, 0x8dae, 0x8db6, 0x1085, 0x8dc1, 0x8dbf, 0x8e92, + 0x8f00, 0x8f01, 0x9075, 0x9072, 0x9078, 0x9070, 0x907e, 0x907d, + 0x907f, 0x91ef, 0x936d, 0x938e, 0x938f, 0x938a, 0x938d, 0x9395, + 0x938b, 0x938c, 0x93b0, 0x9393, 0x94fc, 0x9515, 0x950e, 0x9518, + 0x9511, 0x950d, 0x95bb, 0x95b3, 0x0e39, 0x97a1, 0x979a, 0x9784, + 0x97a0, 0x9786, 0x979d, 0x97aa, 0x9778, 0x978d, 0x978a, 0x97a6, + 0x977a, 0x9797, 0x9788, 0x978e, 0x0e3d, 0x0e44, + /* 0x5d */ + 0x9776, 0x9781, 0x9785, 0x9775, 0x97a8, 0x978f, 0x9791, 0x97a2, + 0x979c, 0x9789, 0x977f, 0x9796, 0x9779, 0x979f, 0x97a7, 0x0e46, + 0x9787, 0x979b, 0x97a5, 0x978b, 0x97c9, 0x99ff, 0x9a03, 0x9a00, + 0x9a02, 0x9a04, 0x9a05, 0x99e6, 0x9a1f, 0x9c14, 0x0f0e, 0x9c0c, + 0x9c0f, 0x9c19, 0x9c0b, 0x9c13, 0x9bd5, 0x0f10, 0x9c1c, 0x9d50, + 0x9d4e, 0x9e12, 0x9eb9, 0x9f85, 0x9f88, 0x9f90, 0xa013, 0xa0d0, + 0xa0d1, 0xa0d2, 0xa0d7, 0xa0d6, 0xa0e5, 0xa346, 0xa36b, 0xa345, + 0xa33f, 0xa33e, 0x103e, 0xa36a, 0xa368, 0xa34c, 0xa423, 0xa422, + 0xa497, 0xa491, 0x95b5, 0xa498, 0xa49c, 0xa589, 0x1084, 0xa58b, + 0xa58a, 0xa58d, 0xa58e, 0xa588, 0xaa4e, 0xaa44, 0xaa37, 0xaa75, + 0xaa54, 0xaa76, 0xaa34, 0xaa6b, 0xaa32, 0xaa57, 0xaa52, 0xaa45, + 0x1149, 0xa9b1, 0xaa4b, 0xaa47, 0xaa33, 0xaa40, + /* 0x5e */ + 0xaa3c, 0xaa43, 0xaa4f, 0xaa55, 0xaa41, 0xaab2, 0xaac0, 0xaf34, + 0xaef9, 0xaf19, 0xaf0d, 0xaefa, 0xaf1e, 0xaf1f, 0xaf0e, 0xaf40, + 0xaf08, 0x11df, 0xaf13, 0xaf4c, 0x11f0, 0xb0cc, 0xb0cb, 0xb224, + 0xb225, 0xb23d, 0xb220, 0xb227, 0xb226, 0xb21d, 0xb21e, 0xb232, + 0xb26c, 0xb259, 0x128a, 0xb37a, 0xb379, 0xb41b, 0xb42e, 0xb423, + 0xb420, 0xb41f, 0xb5b6, 0xb5b9, 0xb5a1, 0xb5a3, 0xb5a8, 0xb5af, + 0xb59a, 0xb599, 0xb5a2, 0xb59d, 0x1302, 0xb5ab, 0xb6c9, 0xb6fe, + 0xb700, 0xb6fc, 0xb707, 0xb775, 0xb772, 0xb773, 0xb774, 0xb7fa, + 0xb7fc, 0xb7f8, 0xb7f6, 0xb7fb, 0xb8cd, 0xb8d1, 0xb8cf, 0xb974, + 0xb972, 0xb973, 0xba54, 0xba51, 0x13c0, 0xba53, 0xba49, 0xba4c, + 0xba4a, 0xba4f, 0xba56, 0xbc00, 0xbbd5, 0xbbd7, 0xbbff, 0xbbd9, + 0xbbe3, 0xbbd3, 0x1415, 0xbbd8, 0xbbd4, 0xbbde, + /* 0x5f */ + 0xbd71, 0xbe74, 0xbe88, 0xbe7f, 0xbe6b, 0xbe87, 0xbe79, 0xbe78, + 0xbe89, 0xbe80, 0xbe76, 0xbf29, 0xbf28, 0xbf2f, 0xc0e5, 0xc104, + 0xc103, 0xc0f0, 0xc0e8, 0xc0ea, 0xc0f1, 0xc101, 0xc102, 0xc2a9, + 0xc2ab, 0xc2b7, 0xc2b6, 0x14e2, 0xc3a0, 0xc38e, 0xc386, 0xc387, + 0xc385, 0xc38b, 0xc388, 0xc390, 0xc41a, 0xc434, 0xc537, 0xc52f, + 0xc530, 0xc539, 0xc534, 0xc533, 0xc585, 0xc584, 0xc53a, 0xc79f, + 0xc869, 0xc86c, 0xc86a, 0xc867, 0xc86b, 0xca3f, 0xca40, 0xcb0b, + 0xcbd2, 0xcbf8, 0xcc01, 0xcbfa, 0xcc16, 0xe3f6, 0xcd2c, 0xcd2d, + 0xcd2f, 0xcd2e, 0xcdc1, 0xcdf5, 0xcdc4, 0xcdde, 0xcdcc, 0xcdd2, + 0xcdc2, 0xcdcd, 0xcdcf, 0xcddd, 0xcdc8, 0xceba, 0xcebe, 0xcebf, + 0xcf2e, 0xcf30, 0xcfe7, 0xcfee, 0xcfe8, 0xcfe6, 0xcfe2, 0xcfe4, + 0xcffb, 0xcffc, 0xcfea, 0xd0ed, 0xd0f6, 0xd0f3, + /* 0x60 */ + 0xd0f4, 0xd0f1, 0xd0f7, 0xd0f5, 0xd0ea, 0xd0eb, 0xd200, 0xd22c, + 0xd212, 0xd23d, 0xd233, 0x174d, 0xd230, 0xd240, 0xd231, 0xd257, + 0x174a, 0xd235, 0xd232, 0xd22d, 0xd236, 0xd238, 0xd262, 0xd25f, + 0xd28a, 0xd3d6, 0xd3d8, 0xd3dd, 0xd3e4, 0xd3e3, 0xd54d, 0xd5d7, + 0xd64a, 0xd64c, 0xd650, 0xd64b, 0xd64e, 0xd64f, 0xd739, 0xd7d2, + 0xd7cd, 0xd7d3, 0xd7e1, 0xd7ce, 0xd7d5, 0xd7dd, 0xd7d4, 0xd7cf, + 0xd8cb, 0xd8a6, 0xd8c2, 0xd8a5, 0xd8a9, 0xd8a2, 0xd8a4, 0xd8b0, + 0xd8cc, 0xd8af, 0xd8bf, 0xdb24, 0xdb1a, 0xdb14, 0xdb3a, 0xdb20, + 0xdb1b, 0xdb21, 0xdb25, 0xdb1e, 0xdb3f, 0xdb40, 0xdb18, 0xdb2c, + 0xdb15, 0xdb2d, 0xdb1f, 0xdb29, 0xdb4b, 0xddb3, 0xdda5, 0xdda7, + 0xddab, 0xdda6, 0xddaa, 0xde22, 0xde23, 0xdea1, 0xdea3, 0xdea0, + 0xdebd, 0xdeba, 0xdefa, 0xdef8, 0xdefc, 0xdef6, + /* 0x61 */ + 0xdf34, 0xdf43, 0x1963, 0xdfd4, 0xe00d, 0xe043, 0xe041, 0xe03d, + 0xe040, 0xe03e, 0xe03f, 0xe046, 0x1993, 0xe0d4, 0x3f35, 0x3f36, + 0x3f32, 0x3f3a, 0x3fc8, 0x4036, 0x411e, 0x411d, 0x411f, 0x431c, + 0x431d, 0x4320, 0x010e, 0x43c0, 0x4b9a, 0x4b93, 0x4bdd, 0x020a, + 0x4ba3, 0x4ba9, 0x4b9c, 0x4b9b, 0x020d, 0x4b97, 0x4fb1, 0x4fca, + 0x4fb3, 0x4fcd, 0x53ea, 0x53ee, 0x53ef, 0x55df, 0x5650, 0x56bb, + 0x5a88, 0x5a89, 0x5a8c, 0x5a85, 0x5a5e, 0x5a94, 0x5a95, 0x5c6b, + 0x5c6a, 0x5c69, 0x5de3, 0x5df1, 0x5f37, 0x5f33, 0x6091, 0x608f, + 0x6097, 0x63d4, 0x63de, 0x63d3, 0x63e0, 0x6443, 0x640b, 0x63ff, + 0x6404, 0x6407, 0x68f9, 0x68fa, 0x68fb, 0x68f8, 0x6b12, 0x6b10, + 0x6c1f, 0x6ddf, 0x6de3, 0x6e52, 0x6ea9, 0x7265, 0x7287, 0x7242, + 0x7252, 0x724c, 0x719f, 0x7201, 0x7248, 0x724f, + /* 0x62 */ + 0x727e, 0x724d, 0x7258, 0x7247, 0x725e, 0x7249, 0x724e, 0x725d, + 0x725a, 0x7286, 0x7251, 0x7429, 0x74a6, 0x74a7, 0x7570, 0x756f, + 0x75d3, 0x75d2, 0x7728, 0x771b, 0x771a, 0x771c, 0x7721, 0x7b32, + 0x7b66, 0x7b7d, 0x7b73, 0x7b7f, 0x7b65, 0x7b80, 0x7b61, 0x7b75, + 0x7b6e, 0x7b67, 0x7b71, 0x7b6c, 0x7b63, 0x7b62, 0x7b83, 0x7bb2, + 0x7b81, 0x7b6f, 0x7b6b, 0x7b82, 0x7b8a, 0x7f29, 0x7f30, 0x7f31, + 0x8097, 0x8100, 0x80ff, 0x83b6, 0x83b5, 0x83c3, 0x858d, 0x8618, + 0x869c, 0x869a, 0x8699, 0x89b7, 0x89c4, 0x89c6, 0x89c7, 0x89bc, + 0x89c0, 0x89c5, 0x89cd, 0x89c1, 0x89be, 0x8aa7, 0x8ab8, 0x8b23, + 0x0c74, 0x8de8, 0x8dde, 0x8de3, 0x8def, 0x8ddc, 0x8de4, 0x8de1, + 0x8de5, 0x8e95, 0x8e94, 0x8e93, 0x8e8e, 0x9098, 0x909c, 0x9099, + 0x90a0, 0x909e, 0x9204, 0x93d3, 0x93b4, 0x93bb, + /* 0x63 */ + 0x93b7, 0x93b8, 0x93bd, 0x93b6, 0x93b9, 0x93b5, 0x9522, 0x9521, + 0x95c3, 0x95bc, 0x97ff, 0x97e5, 0x97f7, 0x97d2, 0x9800, 0x97db, + 0x97f0, 0x97e2, 0x97cd, 0x0e56, 0x97e1, 0x97f2, 0x97dc, 0x97cc, + 0x97d6, 0x97f3, 0x97fa, 0x97f6, 0x97ec, 0x97ea, 0x97e3, 0x97d0, + 0x0e5a, 0x9795, 0x97d5, 0x97f4, 0x97cb, 0x97da, 0x97c8, 0x97df, + 0x97f5, 0x97cf, 0x97c7, 0x97d7, 0x9a24, 0x0ea3, 0x9a1c, 0x9a21, + 0x9a1e, 0x9a18, 0x9a1b, 0x0ea8, 0x9c46, 0x9c4b, 0x9c48, 0x9c47, + 0x9c67, 0x9c54, 0x9e15, 0x9e22, 0x9ec5, 0x9e29, 0x9ec7, 0x9f8d, + 0xa01b, 0xa020, 0xa0e2, 0xa0e7, 0xa0e8, 0xa0e1, 0xa372, 0xa37b, + 0xa374, 0xa371, 0xa379, 0xa375, 0xa390, 0xa377, 0xa37d, 0xa44f, + 0xa450, 0xa4a3, 0xa4a2, 0xa4f4, 0xa594, 0xa59a, 0xa59b, 0xa5a7, + 0xa597, 0xa595, 0xa592, 0xa59c, 0xa596, 0xaab6, + /* 0x64 */ + 0xaab8, 0xaab0, 0xab18, 0xaac5, 0xaab5, 0xaac2, 0xab06, 0xab19, + 0xaab9, 0xab15, 0xaad6, 0xaaac, 0x113c, 0xaac6, 0xaab3, 0xaac3, + 0xaaca, 0xaacf, 0xaabd, 0xaace, 0xab14, 0xaaba, 0xab1a, 0xaac1, + 0xaabb, 0x119b, 0x119a, 0xad01, 0xacfc, 0xaf5a, 0xaf54, 0xaf61, + 0xaf5c, 0xaf55, 0xaf4a, 0xaf4b, 0xaf51, 0xaf69, 0xaf6b, 0x2cf1, + 0xaf66, 0xaf58, 0xaf5d, 0xaf67, 0xaf56, 0xaf88, 0xaf64, 0xaf4e, + 0xb257, 0xb25a, 0xb251, 0xb24a, 0xb24b, 0x125e, 0xb247, 0xb26f, + 0xb26a, 0xb26b, 0xb246, 0xb26d, 0xb254, 0xb26e, 0xb24c, 0xb378, + 0xb386, 0xb382, 0x12a7, 0xb5e1, 0xb5e5, 0xb5db, 0xb5de, 0xb5d7, + 0xb703, 0xb77c, 0xb77e, 0xb805, 0xb807, 0xb8e6, 0xb8e1, 0xb8fb, + 0xb8e5, 0xb8e7, 0xb8df, 0xb8ff, 0xb976, 0xba63, 0xba66, 0xba65, + 0xba5e, 0xba64, 0xba6b, 0xba5f, 0xba67, 0xba68, + /* 0x65 */ + 0xbc08, 0xbc09, 0xbc17, 0xbc15, 0xbc1b, 0xbc0b, 0xbc28, 0xbc0e, + 0xbc18, 0xbc53, 0xbc45, 0xbc0d, 0xbc0a, 0xbc13, 0xbc4a, 0xbd79, + 0xbea1, 0xbe8d, 0xbea2, 0xbe90, 0x146e, 0xbf31, 0xbf30, 0xc11f, + 0xc119, 0xc10c, 0xc11e, 0xc11d, 0xc107, 0xc266, 0xc2c5, 0xc2ba, + 0xc2bd, 0xc2c2, 0xc2c3, 0xc2bf, 0x150d, 0xc3a1, 0xc3a2, 0xc3a8, + 0xc3a3, 0xc3aa, 0xc3af, 0xc3b9, 0xc437, 0xc58f, 0x1543, 0xc58e, + 0xc587, 0xc58a, 0xc592, 0xc597, 0xc59f, 0xc605, 0xc7a9, 0xc7a7, + 0xc88a, 0xc882, 0xc885, 0xc88b, 0xc889, 0xc881, 0xc880, 0xc887, + 0xc886, 0xca4d, 0xcb1c, 0xcb1f, 0xcc21, 0xcc1d, 0xcc22, 0xcbfe, + 0xcc1b, 0xcc3a, 0xcc37, 0xcc17, 0xcc38, 0xcc26, 0xcc18, 0xcd34, + 0xcd35, 0xcd32, 0x1673, 0xcde1, 0xcdfd, 0xcde3, 0xcde8, 0xcdf9, + 0xcdff, 0xcdfe, 0x1674, 0xcde0, 0xce00, 0x1670, + /* 0x66 */ + 0xcdec, 0xcde4, 0xcdef, 0xcdfa, 0xceca, 0xcf31, 0xcf32, 0xcf34, + 0xcf41, 0xd000, 0xd006, 0xd008, 0xd005, 0xd003, 0xd00b, 0xd002, + 0xd00a, 0xd0f0, 0xd113, 0xd10a, 0xd10f, 0xd111, 0xd108, 0xd10b, + 0xd112, 0xd10d, 0xd25b, 0xd263, 0xd261, 0xd268, 0xd25a, 0xd34e, + 0xd34d, 0xd350, 0xd3fc, 0xd412, 0xd3f5, 0xd41e, 0xd3f0, 0xd3f3, + 0xd3f2, 0xd401, 0xd3ef, 0xd3ee, 0xd416, 0xd3f6, 0xd3fb, 0xd41c, + 0x17db, 0xd55d, 0xd560, 0xd566, 0xd55f, 0xd561, 0xd55b, 0xd562, + 0xd557, 0xd669, 0xd66b, 0xd661, 0xd677, 0xd65f, 0xd663, 0xd662, + 0xd665, 0xd7ef, 0xd7e2, 0xd800, 0xd7e8, 0xd7f2, 0xd7e7, 0x1829, + 0xd7e5, 0xd8d5, 0xd8d0, 0xd8da, 0xd8d3, 0x1851, 0xd8d9, 0xd8cf, + 0xd8d6, 0xd8d8, 0xd8f5, 0xd8ce, 0xd8d7, 0xd8f4, 0xd8cd, 0xd901, + 0x36ba, 0xdb52, 0xdb55, 0xdb5a, 0xdb4d, 0xdb54, + /* 0x67 */ + 0xdb53, 0xdb5e, 0xdb67, 0xdb65, 0xdb4e, 0x18db, 0xdb4f, 0xdb61, + 0xdb6e, 0xdb51, 0xdb5b, 0xdd63, 0xddb7, 0xddb6, 0xddc3, 0xddbb, + 0xddb5, 0xde2e, 0xde30, 0xde33, 0xde31, 0xdea4, 0xdec1, 0xdebb, + 0xdebe, 0xdf00, 0xdeff, 0xdf40, 0x1965, 0xdf3f, 0xdf44, 0x1964, + 0x1967, 0xdfdb, 0xe00f, 0xe011, 0xe04e, 0xe04d, 0xe04b, 0xe04c, + 0xe095, 0x3f3b, 0x3f45, 0x3f44, 0x3f3e, 0x3f3c, 0x3f3f, 0x3fcc, + 0x3fce, 0x4122, 0x4123, 0x419f, 0x43c5, 0x43c4, 0x4be9, 0x4b99, + 0x0211, 0x4be6, 0x4be7, 0x4bf7, 0x4fd2, 0x0333, 0x53fd, 0x540c, + 0x540b, 0x57ed, 0x0421, 0x0422, 0x5a9b, 0x5b0a, 0x5c6f, 0x5c75, + 0x5df2, 0x5df8, 0x5f3e, 0x6424, 0x640e, 0x6416, 0x6418, 0x6410, + 0x6431, 0x6444, 0x05a6, 0x6429, 0x642f, 0x644b, 0x6436, 0x05a3, + 0x6934, 0x6900, 0x692b, 0x6b20, 0x6b21, 0x6b1e, + /* 0x68 */ + 0x6b1d, 0x6df5, 0x6df2, 0x6df6, 0x7290, 0x729d, 0x729c, 0x7292, + 0x7294, 0x72d1, 0x7293, 0x72b7, 0x7297, 0x72b0, 0x729f, 0x72c9, + 0x742d, 0x742c, 0x7577, 0x772c, 0x7bc0, 0x7bb9, 0x7f53, 0x8040, + 0x8202, 0x81fb, 0x0aa1, 0x858b, 0x85ae, 0x85ab, 0x86a1, 0xddcd, + 0x87ea, 0x89dd, 0x89dc, 0x89d9, 0x8aab, 0x8aac, 0x8aad, 0x8ab2, + 0x8b2c, 0x8b2b, 0x8bc2, 0x8e00, 0x8e0d, 0x8e06, 0x8dff, 0x8e03, + 0x8e01, 0x8e10, 0x8e0f, 0x8e05, 0x8e98, 0x8e97, 0x8e96, 0x8e99, + 0x90ac, 0x90ab, 0x9212, 0x93d8, 0x93df, 0x93d6, 0x952d, 0x9532, + 0x983f, 0x982f, 0x9826, 0x983a, 0x9839, 0x0e5f, 0x983b, 0x9835, + 0x982a, 0x9821, 0x9838, 0x9837, 0x9834, 0x0e5c, 0x9822, 0x9836, + 0x9844, 0x9a45, 0x9a3b, 0x9a36, 0x9a42, 0x9c7a, 0x9c86, 0x9c8b, + 0x9c7f, 0x9c81, 0x9e2a, 0x9ed5, 0x9f9f, 0x9f9d, + /* 0x69 */ + 0xa026, 0xa0f4, 0xa0f5, 0xa315, 0xa38e, 0xa38f, 0xa426, 0xa4a7, + 0xa4af, 0xa5ad, 0xa5ac, 0xa5ab, 0xa5aa, 0xab2f, 0xab21, 0xab23, + 0xaba3, 0xab49, 0xab3a, 0xab48, 0xab2d, 0xab25, 0xab29, 0xab32, + 0xab34, 0xab24, 0xab2c, 0xab4b, 0xab3b, 0xab20, 0xab28, 0xaf98, + 0x11f5, 0xaf97, 0x2d04, 0xaf9d, 0xafa8, 0xb0d5, 0xb277, 0xb278, + 0xb272, 0xb273, 0xb302, 0xb43b, 0xb5fe, 0xb60b, 0xb5ff, 0xb607, + 0x1311, 0x130c, 0xb630, 0xb6cd, 0xb6cf, 0xb710, 0xb70a, 0xb783, + 0xb815, 0xb80e, 0xb80c, 0xb902, 0xb8fe, 0xb905, 0xb915, 0xb908, + 0xba7f, 0xba77, 0xba7c, 0xba82, 0xba7e, 0xba78, 0xba7d, 0xba79, + 0xba81, 0xbc4b, 0xbc63, 0xbc64, 0xbc56, 0xbc54, 0xbc4e, 0xbc10, + 0xbc4f, 0xbc57, 0xbc5e, 0xbc51, 0xbc6a, 0xbc69, 0xbead, 0xbea4, + 0xbeac, 0xbea9, 0xbeae, 0x3f4c, 0xc150, 0xc135, + /* 0x6a */ + 0xc132, 0xc2d8, 0xc2d1, 0xc2cf, 0xc2be, 0xc3d5, 0xc3c1, 0xc3c6, + 0xc3c3, 0xc3c2, 0xc3c0, 0xc3c5, 0xc3c7, 0xc3bf, 0xc3c4, 0xc3d4, + 0xc590, 0xc5d2, 0x154e, 0xc5d4, 0xc7af, 0xc7ae, 0xc7b2, 0xc7ad, + 0xc89c, 0xc8a0, 0xc8b6, 0xca3d, 0xca56, 0xca82, 0xcb28, 0xcb2b, + 0xcc3c, 0xcc3e, 0xcc3f, 0xcc42, 0xcc3d, 0xcc41, 0xcc3b, 0xcc49, + 0xcc43, 0xcd39, 0xcd38, 0xce22, 0xce08, 0xce0c, 0xce06, 0xce13, + 0xce04, 0xce20, 0xce1d, 0xce05, 0xce0a, 0xced6, 0xced7, 0xcf36, + 0xcf37, 0xd023, 0xd022, 0xd020, 0xd01a, 0xd01d, 0xd11c, 0xd120, + 0xd177, 0xd27f, 0xd28b, 0xd27d, 0xd299, 0xd284, 0xd289, 0xd285, + 0xd283, 0xd286, 0xd29e, 0xd353, 0xd417, 0x1794, 0xd419, 0xd420, + 0xd41f, 0xd423, 0xd418, 0xd421, 0xd429, 0xd424, 0xd426, 0xd55e, + 0xd56f, 0xd56e, 0xd574, 0xd572, 0xd573, 0xd67d, + /* 0x6b */ + 0xd67e, 0xd685, 0xd67f, 0xd684, 0xd744, 0xd7f5, 0xd7f8, 0xd803, + 0xd7f6, 0xd928, 0x1863, 0xd939, 0xd8fb, 0xd90e, 0xd8fd, 0xd91f, + 0x1861, 0xd903, 0x36d8, 0xd910, 0x185a, 0xd90d, 0xd927, 0xd941, + 0xdb72, 0xdb78, 0xdb80, 0x18e3, 0xdb85, 0xdb7b, 0x387c, 0xdb7d, + 0xdb91, 0xdb88, 0xdbaa, 0xdb8d, 0xdb89, 0xdb95, 0xdb9b, 0xdb8c, + 0xdb9e, 0xdb7c, 0xdb86, 0xdb84, 0xdd68, 0xddc5, 0xddc4, 0xddc9, + 0xddc6, 0xde42, 0xde45, 0xde41, 0xde44, 0xdea6, 0xdec2, 0xdf42, + 0xdf49, 0xdf48, 0xdf4a, 0xdf4c, 0xdf4b, 0xe017, 0xe018, 0xe015, + 0xe052, 0xe054, 0xe053, 0xe09a, 0xe09b, 0xe0dc, 0xe0e4, 0xe191, + 0x19af, 0xe1ba, 0x3f51, 0x3f5b, 0x3fcf, 0x6e05, 0x4c13, 0x4c15, + 0x4c14, 0x4c23, 0x0213, 0x4c11, 0x4c12, 0x0280, 0x4ff0, 0x519b, + 0x5412, 0x5416, 0x5417, 0x54b5, 0x57f4, 0x5ab1, + /* 0x6c */ + 0x5c79, 0x5dff, 0x5dfc, 0x5dfb, 0x5f3f, 0x5f44, 0x609d, 0x6432, + 0x644c, 0x642b, 0x645a, 0x651f, 0x6901, 0x692d, 0x6927, 0x6959, + 0x695a, 0x694d, 0x6958, 0x6b23, 0x6b25, 0x6b2b, 0x6dff, 0x6eae, + 0x72cb, 0x72ca, 0x72d0, 0x72ce, 0x72cc, 0x72d8, 0x72c6, 0x72d2, + 0x72cf, 0x72c8, 0x7617, 0x19b0, 0x7bc4, 0xcd40, 0x7be9, 0x7bf2, + 0x7bfc, 0x7bea, 0x7beb, 0x7bfd, 0x7f78, 0x7f77, 0x7f73, 0x7f9e, + 0x7f79, 0x80a2, 0x8103, 0x8204, 0x8205, 0x83ce, 0x85bf, 0x89f6, + 0x89f7, 0x8b31, 0x8b30, 0x8bc9, 0x8bc7, 0x8e1c, 0x8e28, 0x8e1a, + 0x8e1e, 0x8e1b, 0x8e1f, 0x90bf, 0x90bb, 0x90bc, 0x90c0, 0x921a, + 0x93ef, 0x93ec, 0x93e9, 0x93f0, 0x93fe, 0x9534, 0x986a, 0x9895, + 0x986c, 0x9872, 0x9867, 0x9860, 0x986b, 0x985e, 0x986f, 0x9866, + 0x2946, 0x9862, 0x985d, 0x985c, 0xe365, 0x9a50, + /* 0x6d */ + 0x9c9f, 0x0f23, 0x9c9e, 0x9ca6, 0x9e35, 0x9e38, 0x9e36, 0x9e3a, + 0x9edc, 0xa37c, 0xa3ab, 0x1049, 0xa3a8, 0xa3a7, 0xa42b, 0xa42c, + 0xa428, 0x442b, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4f8, 0xa5b1, 0xa5f0, + 0xa5ef, 0xaba8, 0xab8b, 0xab94, 0xab9e, 0xab8f, 0xab88, 0xab7e, + 0xab81, 0xab30, 0xab9b, 0xab82, 0xab90, 0xab85, 0xab7f, 0xaba9, + 0xabde, 0xad0d, 0x11fa, 0xafcf, 0xafcb, 0xafd8, 0xafdd, 0xafd3, + 0xafd0, 0xafd5, 0xafd6, 0xb0d6, 0xb292, 0xb295, 0xe0cb, 0xb28d, + 0xb29b, 0xb29d, 0xb28f, 0xb29e, 0xb2a6, 0xb396, 0xb392, 0xb616, + 0xb62a, 0xb629, 0xb62c, 0xb715, 0xb712, 0xb711, 0xb713, 0xb788, + 0xb78b, 0xb78a, 0xb787, 0xb817, 0xb816, 0xb81a, 0xb919, 0xb917, + 0xba91, 0xba94, 0xbc8b, 0xbc90, 0xbc8f, 0xbc86, 0xbc83, 0xbc8e, + 0xbc87, 0xbca8, 0xbc85, 0xbca6, 0xbc82, 0xbca7, + /* 0x6e */ + 0xbeb9, 0xbeb7, 0xbeb4, 0xbeb6, 0xbeb3, 0xbec6, 0xc13c, 0xc140, + 0xc138, 0xc291, 0xc2a6, 0xc2da, 0xc3da, 0xc3d8, 0xc3d9, 0xc3db, + 0xc3d7, 0xc616, 0xc612, 0xc61f, 0x1559, 0xc614, 0xc61a, 0xc610, + 0xc7b3, 0xc8ae, 0xc8c1, 0xc8b0, 0xc8af, 0xc8b1, 0xc8ad, 0xc8b2, + 0xc8c4, 0xcb3c, 0xcb3f, 0xcc61, 0xcc66, 0xcd3c, 0xcd3b, 0xce2c, + 0x167e, 0xce2a, 0xce3e, 0xce2f, 0xce32, 0xce27, 0xce29, 0xce40, + 0xcedf, 0xcede, 0xcf3c, 0xcf3b, 0xcf3e, 0xd021, 0xd046, 0xd03c, + 0xd036, 0xd038, 0xd035, 0xd131, 0xd136, 0xd12d, 0xd133, 0xd12f, + 0xd12e, 0xd135, 0xd2ac, 0xd2a9, 0xd2a6, 0x17a8, 0xd44c, 0xd443, + 0xd441, 0xd44f, 0xd442, 0xd451, 0x17a9, 0xd440, 0xd450, 0xd445, + 0xd44a, 0xd44b, 0xd583, 0xd582, 0xd581, 0xd5e0, 0xd698, 0xd69f, + 0xd69b, 0xd69a, 0xd699, 0xd696, 0xd6ae, 0xd69e, + /* 0x6f */ + 0xd809, 0xd80d, 0xd94e, 0xd94a, 0xd94d, 0xd940, 0xd93e, 0xd948, + 0xd942, 0xd962, 0xd945, 0xd951, 0xdbc6, 0xdbd0, 0xdbc0, 0xdbb7, + 0xdbc2, 0xdbbc, 0xdbc5, 0xdbdc, 0xdbdb, 0xdbd2, 0xdbc7, 0xdbb6, + 0xdbc9, 0xdbcc, 0xdbd1, 0xdbcd, 0xdbda, 0xdbba, 0xdbd3, 0xdbce, + 0xdbf6, 0xdbbd, 0xdbdd, 0xdbc8, 0xdc0d, 0xdc35, 0xdd71, 0xdd6e, + 0xdd6f, 0xddd6, 0xde4c, 0xde4f, 0xde54, 0xde53, 0xdec9, 0xdec8, + 0xdf03, 0x1954, 0xdf04, 0x1956, 0xdf57, 0xdf52, 0xdf53, 0x196d, + 0xdf56, 0xdf5c, 0xdf55, 0xe064, 0xe05d, 0xe05e, 0xe0a2, 0xe0a3, + 0x198e, 0xe0e7, 0xe0e6, 0xe198, 0xe1ac, 0xe1af, 0xe1ae, 0x3f59, + 0x40a9, 0x432a, 0x43c7, 0x4c41, 0x4c37, 0x4c35, 0x4c33, 0x4c39, + 0x4c32, 0x4fff, 0x5001, 0x4ff8, 0x541b, 0x5419, 0x56bf, 0x5abc, + 0x5abe, 0x5abd, 0x5c7d, 0x5f46, 0x5f47, 0x60a4, + /* 0x70 */ + 0x6521, 0x6562, 0x6986, 0x0672, 0x6b2f, 0x6b31, 0x0814, 0x72f8, + 0x72f5, 0x72f9, 0x72f2, 0x72fa, 0x72f3, 0x7314, 0x72fd, 0x730f, + 0x730e, 0x7301, 0x7437, 0x7435, 0x7434, 0x7431, 0x757a, 0x757b, + 0x7737, 0x7c2b, 0x7bfb, 0x7c16, 0x7c13, 0x0993, 0x7c11, 0x7c0f, + 0x7c1b, 0x7c38, 0x7fa4, 0x8209, 0x8207, 0x820b, 0x83d3, 0x83d1, + 0x83d8, 0x861d, 0x86a9, 0x86d0, 0xad15, 0x8a02, 0x8a05, 0x8a01, + 0x8a00, 0x8e2e, 0x8e30, 0x8e2f, 0x8e31, 0x90d2, 0x90d3, 0x9402, + 0x9540, 0x9542, 0x953b, 0x95ce, 0x9898, 0x988f, 0x9894, 0x9891, + 0x0e6f, 0x98ba, 0x9890, 0x9886, 0x989a, 0x988c, 0x9893, 0x9887, + 0x9888, 0x9897, 0x988d, 0x989c, 0x98bd, 0x9a3c, 0x9a59, 0x0eb0, + 0x9cd1, 0x9cbb, 0x9cbe, 0x9d5d, 0x9ee2, 0xa105, 0xa3ba, 0x012e, + 0xa3f4, 0xa4b2, 0xa4f9, 0xa5b7, 0xa5b6, 0xab89, + /* 0x71 */ + 0xabf9, 0xabd9, 0xabe8, 0xabd4, 0xabdb, 0xabe2, 0xabdf, 0xabd1, + 0xabe9, 0xabea, 0xad13, 0xad11, 0xaffa, 0xaff8, 0xaff4, 0xaffb, + 0xb00e, 0xb002, 0xb00f, 0xb290, 0xb2ad, 0xb2a9, 0xb448, 0xb65a, + 0xb64f, 0xb64e, 0xb655, 0xb654, 0xb64a, 0xb6d5, 0xb718, 0xb78d, + 0xb81d, 0xb819, 0xb926, 0xb928, 0xb92b, 0xb97d, 0xbaa0, 0xba9a, + 0xba9b, 0xbcb5, 0xbcad, 0xbcb2, 0xbd94, 0xbec9, 0xc14e, 0xc14f, + 0xc144, 0xc152, 0xc3e9, 0xc439, 0x1569, 0x337e, 0xc8c7, 0xc8d3, + 0xc8c6, 0xc8c3, 0x15b4, 0xc8d2, 0xca66, 0xcc7f, 0xcc80, 0xcc84, + 0xcc85, 0xcce3, 0x164d, 0xcd41, 0xcd44, 0xcd43, 0xce4e, 0xce4f, + 0x1683, 0xce49, 0xce4a, 0xce4b, 0xce43, 0xcee0, 0xcee5, 0xcee1, + 0xcee6, 0xcee2, 0xcf0c, 0xcf40, 0xd049, 0xd04a, 0xd054, 0xd04c, + 0xd055, 0xd056, 0xd13b, 0xd13d, 0xd2a4, 0xd2a8, + /* 0x72 */ + 0xd2c3, 0xd2bf, 0xd2c8, 0xd2c2, 0xd2ca, 0xd2cc, 0xd2c9, 0xd2be, + 0xd2cd, 0xd2c7, 0xd2c5, 0xd35d, 0x17b0, 0xd46c, 0xd46b, 0xd470, + 0xd46d, 0xd46f, 0xd489, 0xd484, 0xd58d, 0xd58a, 0xd58e, 0xd591, + 0xd6b5, 0xd6b1, 0xd6af, 0xd6b9, 0xd6b7, 0xd6b0, 0x180c, 0xd717, + 0x1818, 0xd74f, 0xd819, 0xd810, 0xd818, 0xd811, 0xd81c, 0xd812, + 0xd976, 0xd971, 0x3720, 0xd97a, 0xd97f, 0x3722, 0xd973, 0xd9ab, + 0x371e, 0xd977, 0xd974, 0xd97e, 0xd99b, 0xd984, 0xd97c, 0xdc29, + 0xdc2b, 0xdc0e, 0xdc00, 0xdc0b, 0xdbfe, 0xdbfa, 0xdc17, 0xdbff, + 0xdc0c, 0xdc0f, 0x18f5, 0xdc02, 0xdc01, 0xdbfc, 0xdc49, 0xdc06, + 0xdc12, 0xdc13, 0xdd78, 0xde5b, 0xde62, 0xde5f, 0xde5d, 0xdeab, + 0xded5, 0xded4, 0xded3, 0xdf07, 0xdf6c, 0xdf70, 0xdf6e, 0xdf68, + 0xdf6d, 0xdf77, 0xdf6a, 0xdfce, 0xdfec, 0xe069, + /* 0x73 */ + 0xe068, 0xe0a6, 0xe0a9, 0xe0aa, 0xe100, 0xe10d, 0xe0f8, 0xe0fc, + 0xe10a, 0xe0f7, 0xe101, 0xe1b6, 0xe1bb, 0xe1b7, 0xe1b9, 0xe1ca, + 0x3f69, 0x4125, 0x4c59, 0x5007, 0x5009, 0x5422, 0x5607, 0x5604, + 0x6e0f, 0x57f8, 0x5ac7, 0x5ad1, 0x5c7e, 0x5e08, 0x5f4a, 0xe298, + 0x5fb9, 0x6988, 0x6991, 0x6984, 0x6973, 0x6989, 0x6985, 0x6b33, + 0x6e13, 0x731d, 0x731f, 0x731c, 0x7320, 0x731a, 0x731b, 0x7439, + 0x74af, 0x75e5, 0x773c, 0x7c37, 0x7c3a, 0x7fbb, 0x0a0e, 0x8210, + 0x820d, 0x86af, 0x8711, 0x0bd8, 0x8a0d, 0x8a0c, 0x8a0b, 0x8bd4, + 0x8e3d, 0x8e3e, 0x8e3b, 0x8e43, 0x8e40, 0x8e46, 0x8f11, 0x90dd, + 0x90df, 0x90ea, 0x924a, 0x9406, 0x98c1, 0x98b9, 0x98c6, 0x98b8, + 0x98bb, 0x98c8, 0x98c5, 0x98bf, 0x98c7, 0x98c4, 0x9a65, 0x9a67, + 0x9cd7, 0x9cdb, 0x9cd4, 0x9cd6, 0x9ee8, 0xa10a, + /* 0x74 */ + 0xa5bd, 0xa5be, 0xac1a, 0xac0d, 0xac0f, 0xac1b, 0xac10, 0xac11, + 0xac13, 0xad18, 0xb020, 0xb01f, 0xb023, 0xb01d, 0xb037, 0xb025, + 0xb024, 0xb02a, 0xb027, 0xb033, 0xb028, 0xb034, 0xb2ba, 0x2e70, + 0xb39d, 0xb44c, 0xb65c, 0xb66a, 0xb65d, 0xb665, 0xb663, 0xb65e, + 0xb719, 0xb797, 0xb93f, 0xb933, 0xb932, 0xbaa1, 0xbaa5, 0xbaa4, + 0xbaa2, 0xbcc1, 0x142c, 0xbcc7, 0xbcc4, 0xbcc6, 0xbcc5, 0xbcd4, + 0xbcca, 0xc153, 0xc3f1, 0xc421, 0x156e, 0xc6b7, 0xc692, 0xc8d4, + 0xca44, 0xcc98, 0xcc9b, 0xcc91, 0xcc95, 0xcc9a, 0xcc92, 0xce53, + 0xce57, 0x1686, 0xce5c, 0xce5d, 0xce64, 0xceea, 0xceed, 0xcf42, + 0xcf43, 0xd064, 0xd061, 0xd060, 0xd17d, 0xd2d4, 0xd2d5, 0xd2d9, + 0xd487, 0xd499, 0xd48c, 0xd48a, 0xd48f, 0x17b3, 0xd48b, 0xd482, + 0xd49b, 0x17eb, 0xd6c8, 0xd6c4, 0xd6cc, 0xd6c7, + /* 0x75 */ + 0xd6c3, 0xd6c6, 0xd6cb, 0xd6ca, 0xd6c9, 0xd6cd, 0xd753, 0xd821, + 0xd829, 0xd81d, 0xd824, 0xd828, 0x3743, 0xd9b1, 0xd9b2, 0xd9b5, + 0xd9d6, 0xd9af, 0xd9ca, 0xd9b8, 0xe412, 0xe411, 0xdc45, 0xdc47, + 0xdc34, 0xdc6e, 0xdc42, 0xdc31, 0xdc2e, 0xdc56, 0xdc38, 0xdc37, + 0xdc4b, 0xdc2d, 0xdc33, 0xdc36, 0x38e0, 0xdc48, 0xdddc, 0x1942, + 0xde66, 0xde6d, 0xde63, 0xde64, 0x1941, 0xde67, 0xded9, 0xdf0b, + 0xdf7e, 0xdf8b, 0xe026, 0xe02c, 0xe029, 0xe06f, 0xe06b, 0xe06d, + 0xe06e, 0xe11c, 0xe111, 0xe110, 0xe124, 0xe112, 0xe115, 0xe117, + 0x19ac, 0x3f6f, 0x40ab, 0x432e, 0x43c9, 0x4696, 0x4c85, 0x51a0, + 0x542b, 0x5e0d, 0x6b36, 0x3afd, 0x072f, 0x072e, 0x6eb1, 0x734a, + 0x7337, 0x733c, 0x7338, 0x733a, 0x733e, 0x7349, 0x084d, 0x087b, + 0x7580, 0x757f, 0x75e3, 0x773f, 0x7c52, 0x7c4e, + /* 0x76 */ + 0x7c4a, 0x7c4b, 0x7fd5, 0x85d8, 0x8620, 0x86b3, 0x86b1, 0x86b0, + 0x8a17, 0x8bd9, 0x8e49, 0x8f13, 0x90ed, 0x90eb, 0x90ee, 0x940a, + 0x940b, 0x954a, 0x98d5, 0x98d7, 0x98de, 0x98dc, 0x98ee, 0x9a70, + 0x0eb2, 0x9cd9, 0x9ed7, 0xa3cb, 0xa3c7, 0xa4fc, 0xac3b, 0xac39, + 0xac4b, 0xac43, 0xac40, 0xac46, 0xb04d, 0xb043, 0xb047, 0xb04b, + 0xb055, 0xb052, 0xb65f, 0x1322, 0xb67c, 0xb67b, 0xbaa8, 0xbaa9, + 0xbcde, 0xbcd7, 0xbcdd, 0xbcd6, 0xbcd8, 0xbd9b, 0xbee0, 0xbee8, + 0xbee6, 0xc3f8, 0xc3fb, 0xc6bb, 0x3259, 0xc6b8, 0x1570, 0xc7c1, + 0xc7c0, 0xcca4, 0xccab, 0xcd4d, 0xce65, 0xce67, 0xce6a, 0xce66, + 0xce69, 0xd073, 0xd080, 0xd06f, 0xd071, 0xd2e4, 0xd2e6, 0xd2e7, + 0xd4a0, 0xd4a4, 0xd5a2, 0xd5a7, 0xd5a4, 0xd6de, 0xd6db, 0xd758, + 0xd75c, 0xd82f, 0xd82e, 0xd9dd, 0xd9e4, 0xd9d8, + /* 0x77 */ + 0xd9e7, 0xd9da, 0xd975, 0x1895, 0xdc79, 0xdc80, 0xdc7f, 0xdc7c, + 0xdc75, 0xdc7b, 0xdc82, 0x1900, 0xdc89, 0xdc74, 0xdc7d, 0xdc7a, + 0xdc86, 0xdca8, 0xdc72, 0x1902, 0xdc8b, 0xdc91, 0xdcb3, 0xdc81, + 0xdd82, 0xdde1, 0xdde3, 0xdde2, 0xde76, 0xde74, 0xde72, 0xde75, + 0xdf0e, 0xdf0d, 0xdf94, 0xdf92, 0xdf93, 0xdf91, 0xdf8f, 0xdf95, + 0xdfd0, 0xdff7, 0xe076, 0xe0af, 0x199f, 0xe126, 0xe125, 0xe12d, + 0xe1a0, 0xe1c3, 0x3fd7, 0x45cc, 0x4c79, 0x4c7a, 0x5015, 0x5adb, + 0x5c85, 0x6470, 0x647b, 0x69a5, 0x699f, 0x6e17, 0x6eb2, 0x7339, + 0x7340, 0x734e, 0x743e, 0x75e8, 0x75e7, 0x7c66, 0x7c61, 0x7fda, + 0x8214, 0x83df, 0x8a18, 0x8b39, 0x8b3a, 0x9230, 0x9232, 0x940e, + 0x954c, 0x98e8, 0x98f1, 0x98eb, 0x98ec, 0x9a74, 0x9a73, 0x9cf1, + 0x9e42, 0x9e3e, 0x9e41, 0xa02c, 0xa3d2, 0xa4bb, + /* 0x78 */ + 0xac58, 0xac57, 0xac56, 0xac5a, 0x117d, 0xb061, 0xb068, 0xb065, + 0xb05f, 0xb064, 0xb05e, 0xb05b, 0xb067, 0xb2c3, 0xb3a2, 0xb453, + 0xb67d, 0xb720, 0xbaae, 0xbaaf, 0xbab0, 0xbce7, 0xbce6, 0xbce9, + 0xbef1, 0xbeeb, 0xbeea, 0xbee9, 0xc163, 0xc402, 0xc3fe, 0xc6de, + 0xc7c2, 0xc8e6, 0xca5d, 0xccad, 0xce75, 0xce72, 0xce77, 0x16f6, + 0xd151, 0xd2e8, 0xd2ed, 0xd2ee, 0xd4b9, 0xd4a1, 0xd4b6, 0xd5ae, + 0xd6e8, 0x1812, 0xd71e, 0xd831, 0xd832, 0x1891, 0xda0e, 0xda12, + 0xda09, 0xda05, 0x1890, 0xda03, 0xda1f, 0xda0d, 0xda0c, 0xda04, + 0xda0a, 0xdcc2, 0xdcbf, 0xdcc9, 0xdcb2, 0xdcc1, 0xdcaf, 0xdcb4, + 0xdcb0, 0xdcb6, 0xdcb7, 0xdcbb, 0xdcb1, 0xddf0, 0xde78, 0xde7a, + 0xde79, 0xdee4, 0xdee6, 0xdf9f, 0xdf9d, 0xdf98, 0xdf99, 0xdff9, + 0xe030, 0xe082, 0xe081, 0xe0b3, 0xe07f, 0xe13a, + /* 0x79 */ + 0xe13e, 0xe148, 0x4c86, 0x5436, 0x5613, 0x5722, 0x5add, 0x60a7, + 0x647d, 0x0679, 0x6e1c, 0x7365, 0x7360, 0x7367, 0x084e, 0x761a, + 0x85e3, 0x9234, 0x9418, 0x9552, 0x98fc, 0x9a79, 0x9a78, 0x9a76, + 0x9cfa, 0x9cf8, 0xa02d, 0xa3d6, 0xa4bd, 0xa4bf, 0xa4be, 0xac44, + 0xac70, 0xac62, 0xac6e, 0xb06e, 0xb07c, 0xb074, 0xb078, 0xb070, + 0xb079, 0xb071, 0xb2cc, 0xb3a7, 0xb3a6, 0xb693, 0xb721, 0xb79c, + 0xbd9d, 0xbef4, 0xbef3, 0xc8f0, 0xccb8, 0xccb6, 0xccbd, 0xce73, + 0xce82, 0xd087, 0xd156, 0xd159, 0xd2f6, 0xd4c9, 0xd4c5, 0xd4c7, + 0xd4ca, 0xd4c2, 0xd4c4, 0xd6f2, 0xd6f0, 0xd83b, 0xd83a, 0xda26, + 0xda28, 0xda34, 0xda2d, 0xdcd7, 0xdcd2, 0xdcd6, 0xdcdc, 0xdcd3, + 0xdcd1, 0xdd86, 0x191e, 0xddef, 0xddee, 0xdee8, 0xdfac, 0xdfa9, + 0xdfaa, 0xdfab, 0xdffb, 0xe033, 0xe088, 0xe0b6, + /* 0x7a */ + 0xe0b7, 0xe0d0, 0xe0cf, 0xe14f, 0xe159, 0xe14c, 0x5618, 0x5ae0, + 0x7369, 0x7c73, 0x7c72, 0x85e8, 0x90fb, 0x941c, 0x9909, 0x990a, + 0x9908, 0x9a7d, 0x9a7f, 0x9d67, 0xac7a, 0xac7b, 0xb2d1, 0xe3cb, + 0xb69d, 0xb79d, 0xbcfc, 0xbcfb, 0xbcfd, 0xbef5, 0xbef6, 0xc70f, + 0xc71d, 0xccc7, 0xccc1, 0xccbf, 0xcd54, 0xce7f, 0xcef5, 0xd08a, + 0xd08c, 0xd15c, 0xd365, 0xd4cf, 0xd4d0, 0xd5b8, 0xd6fa, 0xd766, + 0xda40, 0xda41, 0x3772, 0xdcf7, 0xdcf3, 0xdcef, 0xdcf4, 0xdced, + 0xdcf2, 0xdcf1, 0xdcf9, 0xdfb4, 0xdffc, 0xe0bc, 0xe15e, 0xe15b, + 0xe15f, 0xe15d, 0xe1cf, 0xe1ce, 0x543a, 0x5ae1, 0x5e15, 0x5e14, + 0x7c78, 0x7c79, 0x7fe6, 0x86b8, 0x8a22, 0x90fe, 0xa3db, 0xa506, + 0xa5c8, 0xac89, 0xb086, 0xb3ad, 0xb699, 0xb6d8, 0xb723, 0xb823, + 0xbab5, 0xbef9, 0xc407, 0xc71e, 0xc8fb, 0xca72, + /* 0x7b */ + 0xca73, 0xce87, 0xcf49, 0xd15d, 0xd2f8, 0xd703, 0xda4e, 0xda4d, + 0xda50, 0xda55, 0xdd09, 0xdd07, 0xdd0c, 0xdd03, 0xdd06, 0xdd0b, + 0xdd0a, 0xdd89, 0xdfbb, 0xdfff, 0xe036, 0xe08b, 0xe166, 0xe169, + 0xe167, 0xe1c2, 0xe1d2, 0x5ae2, 0x0428, 0x6488, 0x6e5b, 0x7376, + 0x7c7d, 0x80a6, 0x8e5a, 0x9917, 0xa3dc, 0xac8f, 0xb094, 0xb095, + 0xbab6, 0xbd04, 0xc2ee, 0xce8a, 0xcef9, 0xd707, 0xd71f, 0xd72a, + 0xd845, 0xda5c, 0xda5b, 0xda61, 0xda5d, 0xdd18, 0xdd1f, 0xde83, + 0xdf16, 0xdf14, 0xdfbf, 0xdfc0, 0xe173, 0xe1c0, 0x5017, 0x6489, + 0x941e, 0x941f, 0x9554, 0x9918, 0x9d05, 0xac95, 0xb098, 0xb09b, + 0xb459, 0xbd08, 0xbf01, 0xccce, 0xcefa, 0xd5be, 0xd847, 0xda6a, + 0xda69, 0xda68, 0xda67, 0xdd25, 0xdd28, 0xdfc4, 0xe037, 0xe08d, + 0xe08c, 0x1991, 0xe320, 0x9922, 0x9a82, 0xb2d9, + /* 0x7c */ + 0xc738, 0xcefb, 0xd4e1, 0xd772, 0xd848, 0xda6c, 0xda70, 0xdd31, + 0xdd30, 0xe179, 0x9923, 0xa3f8, 0xd774, 0xda73, 0xdd34, 0xde87, + 0xdeb2, 0xe0c2, 0xe17d, 0x5ae5, 0xce8c, 0xda77, 0xda75, 0xdd38, + 0xdd3a, 0xe183, 0xe181, 0x7c80, 0xac99, 0x1187, 0xcf4a, 0xd84a, + 0xdd3c, 0xe1c8, 0x9104, 0xb3af, 0xe189, 0xddfa, 0xd161, 0xdd3f, + 0xac93, 0xdfc9, 0xb2de, 0xce91, 0xe18e, 0xe18d, 0xac98, 0xa4c5, + 0xe1a5, +}; + +static const ucs4_t cns11643_5_2uni_upages[229] = { + 0x03400, 0x03500, 0x03600, 0x03700, 0x03800, 0x03900, 0x03a00, 0x03b00, + 0x03c00, 0x03d00, 0x03e00, 0x03f00, 0x04000, 0x04100, 0x04200, 0x04300, + 0x04400, 0x04500, 0x04600, 0x04700, 0x04800, 0x04900, 0x04a00, 0x04b00, + 0x04c00, 0x04d00, 0x05200, 0x05900, 0x05e00, 0x05f00, 0x06100, 0x06300, + 0x06400, 0x06b00, 0x07200, 0x07300, 0x07500, 0x07600, 0x07900, 0x07a00, + 0x07b00, 0x07c00, 0x08300, 0x08600, 0x08700, 0x08800, 0x08900, 0x08a00, + 0x08c00, 0x08e00, 0x09400, 0x09500, 0x09700, 0x09900, 0x09b00, 0x09c00, + 0x09d00, 0x09e00, 0x0ff00, 0x20000, 0x20100, 0x20200, 0x20300, 0x20400, + 0x20500, 0x20600, 0x20700, 0x20800, 0x20900, 0x20a00, 0x20b00, 0x20c00, + 0x20d00, 0x20e00, 0x20f00, 0x21000, 0x21100, 0x21200, 0x21300, 0x21400, + 0x21500, 0x21600, 0x21700, 0x21800, 0x21900, 0x21a00, 0x21b00, 0x21c00, + 0x21d00, 0x21e00, 0x21f00, 0x22000, 0x22100, 0x22200, 0x22300, 0x22400, + 0x22500, 0x22600, 0x22700, 0x22800, 0x22900, 0x22a00, 0x22b00, 0x22c00, + 0x22d00, 0x22e00, 0x22f00, 0x23000, 0x23100, 0x23200, 0x23300, 0x23400, + 0x23500, 0x23600, 0x23700, 0x23800, 0x23900, 0x23a00, 0x23b00, 0x23c00, + 0x23d00, 0x23e00, 0x23f00, 0x24000, 0x24100, 0x24200, 0x24300, 0x24400, + 0x24500, 0x24600, 0x24700, 0x24800, 0x24900, 0x24a00, 0x24b00, 0x24c00, + 0x24d00, 0x24e00, 0x24f00, 0x25000, 0x25100, 0x25200, 0x25300, 0x25400, + 0x25500, 0x25600, 0x25700, 0x25800, 0x25900, 0x25a00, 0x25b00, 0x25c00, + 0x25d00, 0x25e00, 0x25f00, 0x26000, 0x26100, 0x26200, 0x26300, 0x26400, + 0x26500, 0x26600, 0x26700, 0x26800, 0x26900, 0x26a00, 0x26b00, 0x26c00, + 0x26d00, 0x26e00, 0x26f00, 0x27000, 0x27100, 0x27200, 0x27300, 0x27400, + 0x27500, 0x27600, 0x27700, 0x27800, 0x27900, 0x27a00, 0x27b00, 0x27c00, + 0x27d00, 0x27e00, 0x27f00, 0x28000, 0x28100, 0x28200, 0x28300, 0x28400, + 0x28500, 0x28600, 0x28700, 0x28800, 0x28900, 0x28a00, 0x28b00, 0x28c00, + 0x28d00, 0x28e00, 0x28f00, 0x29000, 0x29100, 0x29200, 0x29300, 0x29400, + 0x29500, 0x29600, 0x29700, 0x29800, 0x29900, 0x29a00, 0x29b00, 0x29c00, + 0x29d00, 0x29e00, 0x29f00, 0x2a000, 0x2a100, 0x2a200, 0x2a300, 0x2a400, + 0x2a500, 0x2a600, 0x2f800, 0x2f900, 0x2fa00, +}; + +static int +cns11643_5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x7c)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + ucs4_t wc = 0xfffd; + unsigned short swc; + { + if (i < 8603) + swc = cns11643_5_2uni_page21[i], + wc = cns11643_5_2uni_upages[swc>>8] | (swc & 0xff); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + diff --git a/jni/parted/libiconv/lib/cns11643_6.h b/jni/parted/libiconv/lib/cns11643_6.h new file mode 100755 index 0000000..acfafaf --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_6.h @@ -0,0 +1,967 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 6 + */ + +static const unsigned short cns11643_6_2uni_page21[6388] = { + /* 0x21 */ + 0xc902, 0x3362, 0x0005, 0x3388, 0x33d0, 0x33cf, 0x341e, 0x341f, + 0x3420, 0x3c0e, 0x3c2c, 0x3361, 0x3304, 0x3305, 0x3303, 0x0004, + 0xc901, 0x337d, 0x338d, 0x34a3, 0x34a4, 0x37db, 0x3800, 0xc91e, + 0x39a3, 0x3b32, 0x013f, 0x3dd4, 0x3dd5, 0x4e23, 0x552c, 0x557a, + 0x3803, 0x3307, 0x3308, 0x338f, 0x339c, 0x33d5, 0x3412, 0x3413, + 0x3414, 0x3421, 0x34a8, 0x34a6, 0x3776, 0x3801, 0x383d, 0xc914, + 0x383e, 0x3929, 0x3977, 0x3978, 0x39a6, 0x39a9, 0x39ac, 0x3b34, + 0x3804, 0x3c7b, 0x3d10, 0x392f, 0x3dd7, 0x3e1c, 0x3e1f, 0x3e1a, + 0xc936, 0x3e1e, 0x3e9e, 0x3e9a, 0x43a0, 0x43a1, 0x47d2, 0x47d3, + 0x4bb9, 0x4d1d, 0x4d55, 0x4eff, 0x51e7, 0x042a, 0x5211, 0x5213, + 0x5212, 0x53af, 0x53b1, 0xc990, 0x552d, 0x557b, 0x559d, 0x559a, + 0x04a7, 0x559f, 0x55a0, 0x559c, 0x56bd, 0x04fa, + /* 0x22 */ + 0x57aa, 0x626c, 0x6291, 0x6d74, 0x756a, 0xca29, 0x8605, 0x8f6b, + 0x8f6a, 0x33e0, 0x3312, 0x0000, 0x337f, 0x33a0, 0x3399, 0x3395, + 0x339e, 0x33df, 0x33de, 0x34af, 0x34ad, 0x34b0, 0x37df, 0x3843, + 0x3841, 0x3848, 0x3875, 0xc91a, 0x3932, 0x397b, 0x3979, 0x39b3, + 0x00db, 0x3ea7, 0x39b2, 0x39b0, 0x39b4, 0xc929, 0x3bcd, 0x3bce, + 0xc92b, 0x3c10, 0x3c80, 0x3cd3, 0x3d30, 0x3398, 0x3d2f, 0x3d31, + 0x3dda, 0x3dd9, 0x3e27, 0x3e28, 0x3e21, 0x3e25, 0x3ea6, 0x3ea2, + 0x3ea1, 0x3ea4, 0xc939, 0x3eaa, 0x3ea5, 0x3ea3, 0x3364, 0x443f, + 0x4444, 0x471b, 0x4753, 0x4784, 0x4786, 0x47d5, 0xc960, 0x4b3e, + 0x4b40, 0x4dca, 0x4dc9, 0x4e26, 0x4f00, 0x4f31, 0x4f3c, 0x4f30, + 0x4f33, 0x4f32, 0x4f38, 0x5234, 0x5253, 0x5254, 0x53b4, 0x53b2, + 0x552f, 0x55a5, 0x55a7, 0x55a4, 0x55a8, 0x55a9, + /* 0x23 */ + 0x55a2, 0x55a3, 0x55a6, 0x5681, 0x5680, 0x57ad, 0x5c24, 0x5c65, + 0x5c68, 0x5c69, 0x633c, 0x633b, 0x655d, 0x6a44, 0x7182, 0x74f1, + 0x756b, 0x771b, 0x78eb, 0x7bba, 0x7bd3, 0x7d13, 0x8922, 0x97f4, + 0xab0f, 0xab10, 0x3807, 0xc10b, 0xc10a, 0x3319, 0x331a, 0x3318, + 0x3366, 0x3382, 0x33a8, 0x33e5, 0x33e7, 0x33e4, 0x3415, 0x3423, + 0x3424, 0x3443, 0x34c3, 0x34bc, 0x34bb, 0x0038, 0x34b7, 0x34b9, + 0x34cf, 0xc90d, 0x377a, 0x377b, 0x37e1, 0x37e0, 0x3809, 0x384d, + 0xc916, 0x384b, 0x3879, 0x38b1, 0x3936, 0x3935, 0x3937, 0x3938, + 0x397f, 0x3980, 0x3981, 0x9653, 0x397e, 0x39cd, 0x39bf, 0x39be, + 0x39c2, 0x39b8, 0x39c1, 0x2030, 0x3c31, 0x3c2f, 0x3c6f, 0x3c82, + 0x013a, 0x3c87, 0x3c86, 0x3c8d, 0x3c94, 0x3cd7, 0x3cd4, 0x3cd8, + 0x3d16, 0x3d14, 0x3d2e, 0x3d36, 0x3d37, 0x51ee, + /* 0x24 */ + 0x3de0, 0x3de5, 0x3ddf, 0x3e2b, 0x3e29, 0x3e2d, 0x3e2f, 0x3eb7, + 0x3ec9, 0x3ec1, 0x3eca, 0x3eb2, 0x3eac, 0x3eae, 0x43b2, 0x43a8, + 0x43b0, 0x43a7, 0xc951, 0x4452, 0x444a, 0x4756, 0x4755, 0x475f, + 0x475e, 0x4788, 0xc95d, 0x47dd, 0x47e2, 0x47e1, 0x47df, 0x47e0, + 0x48af, 0x48b1, 0x48ba, 0x4b45, 0x4b43, 0x4bbd, 0x4bc8, 0xc96c, + 0x4bbe, 0x4bbf, 0xc974, 0x4d59, 0x4e29, 0x4e2c, 0x4e2f, 0x4e2d, + 0x4e2e, 0x4f04, 0x4f02, 0x4f01, 0x4f40, 0x4f4a, 0x4f3f, 0x4f4f, + 0x4f41, 0x4f4e, 0x51eb, 0x51ec, 0x33ac, 0x525b, 0x5263, 0x525a, + 0x5259, 0x53dc, 0x53db, 0x53d9, 0x53e0, 0x53dd, 0x3320, 0x55b0, + 0x55b1, 0x55b2, 0x55b6, 0x5651, 0x5652, 0x5650, 0x5684, 0x04c9, + 0x5683, 0x57c3, 0x57b8, 0x57b9, 0x57b2, 0x5b90, 0x5c26, 0x5c29, + 0x5c6e, 0x6340, 0x633e, 0x6341, 0x655e, 0x65bb, + /* 0x25 */ + 0x65bc, 0x65b9, 0xc9ef, 0x6980, 0x084f, 0x6a45, 0x6aba, 0x6abd, + 0x6d56, 0x6d55, 0x6d75, 0x6d77, 0x6d81, 0xc9fa, 0x6d83, 0x6d8b, + 0x6d84, 0x7186, 0x7183, 0x718b, 0x756d, 0x7616, 0x7728, 0x78ea, + 0x7bd4, 0x7c03, 0x7d15, 0x7f3d, 0x7f3e, 0x8416, 0xca4c, 0x8606, + 0x874d, 0x8f22, 0x8f73, 0x8f6d, 0x8f6e, 0x91b1, 0x384e, 0x932d, + 0x0fcd, 0x95f9, 0x9652, 0x9800, 0x97fc, 0x97fa, 0x1092, 0x97f7, + 0x97f8, 0xca90, 0xcac4, 0xa627, 0xab11, 0x33ae, 0xad50, 0xad4f, + 0xad4d, 0xaf71, 0xcae2, 0xaf72, 0xb518, 0x3d44, 0x3321, 0x3367, + 0x33af, 0x33b0, 0x3329, 0x3417, 0x3422, 0xc903, 0x3325, 0x3428, + 0x34ff, 0x34d9, 0x34db, 0x34de, 0x34f2, 0x34fe, 0x34f4, 0x34dd, + 0x0045, 0xc904, 0x3501, 0x34dc, 0x377d, 0x3781, 0x377e, 0x377f, + 0x37e5, 0x380f, 0x00b5, 0x380a, 0x00b6, 0x380b, + /* 0x26 */ + 0x3851, 0x3852, 0x3850, 0x38b8, 0x393d, 0x393e, 0x393c, 0x3987, + 0x39d7, 0x39db, 0x39cf, 0x39e0, 0x3b4c, 0x3b42, 0x3bd4, 0x3c11, + 0x3c14, 0x3c15, 0x3c12, 0x3c33, 0x3c35, 0x0137, 0x3c71, 0x0130, + 0x3c91, 0x3c93, 0x3c95, 0x3cdc, 0x3d42, 0x3d40, 0x83a6, 0x3de6, + 0x448f, 0x3e32, 0xc937, 0x3e31, 0x3ef5, 0x3ecd, 0x3ede, 0x3ed5, + 0x3eda, 0x3eee, 0x3eec, 0x3ecf, 0x3ece, 0xc93d, 0x3ecc, 0x3ef3, + 0x43c1, 0x43c4, 0x43c6, 0x43b4, 0x43c3, 0x43b8, 0x43bb, 0x43b7, + 0x43bc, 0x43bf, 0x43c7, 0x43be, 0x4460, 0x445d, 0x4476, 0x446c, + 0x4475, 0x445b, 0x4471, 0x4473, 0x4461, 0x445a, 0x4462, 0x4472, + 0x445f, 0x4458, 0x471e, 0x4758, 0x478b, 0x478a, 0x47f4, 0x47f0, + 0x48d2, 0x48cd, 0x48ce, 0x48bc, 0x48d0, 0x4b46, 0x4b47, 0x033e, + 0x034d, 0x0351, 0x4bce, 0x4bcf, 0x4bcc, 0x4bcb, + /* 0x27 */ + 0xc972, 0x4d60, 0x4d5f, 0x4d5d, 0x4dd4, 0x4e3a, 0x4e38, 0x4e3c, + 0x4e36, 0x4f08, 0x4f7e, 0x4f5e, 0x4f6e, 0x4f53, 0x4f70, 0x4f57, + 0x4f5d, 0x4f63, 0x4f7a, 0x4f79, 0x4f93, 0xc981, 0x521d, 0x5268, + 0x5273, 0x5274, 0x5266, 0x526f, 0x5275, 0x527a, 0x5270, 0x526d, + 0x5265, 0x538a, 0x53ed, 0x53e9, 0x53e3, 0x53ef, 0x0473, 0x53ea, + 0x5531, 0xc991, 0x5538, 0x9820, 0x5535, 0x553a, 0x5581, 0x5580, + 0x55b8, 0x55c1, 0x55ba, 0x5688, 0x56cf, 0x56ca, 0x56c7, 0x56c5, + 0x56c8, 0x56d0, 0x56c9, 0x57bb, 0x57b6, 0x57bd, 0xc99d, 0x57b4, + 0x57c1, 0x57d1, 0x57d2, 0x57cc, 0x57d4, 0x57cb, 0x57ce, 0x57d5, + 0x57d8, 0x5b95, 0x5b93, 0x5b99, 0x5b96, 0x05be, 0x5c89, 0x5c94, + 0x5c91, 0x5c8f, 0x5c84, 0x5c97, 0x5c86, 0x5c85, 0x5c8c, 0x60f2, + 0x60ed, 0x60ef, 0x62d9, 0x6346, 0x6347, 0x634b, + /* 0x28 */ + 0x6350, 0x634a, 0x634e, 0x634c, 0x6348, 0x6563, 0x6561, 0x6562, + 0x6560, 0x65c3, 0x65c5, 0x65c1, 0x65d0, 0xc9dc, 0x6982, 0x081e, + 0x6986, 0x6984, 0x6a4c, 0x6a48, 0x6ab8, 0x6abf, 0x6ac1, 0x6ac6, + 0x6ac5, 0x6ac7, 0x6ac0, 0x6ac3, 0x6bed, 0x6c03, 0x6c22, 0x6c21, + 0x6d9f, 0x6d90, 0x6d9e, 0x08c8, 0x6da0, 0x6d94, 0x6d95, 0x6da1, + 0x08c3, 0x08c7, 0x719a, 0x7190, 0x74f2, 0x74f3, 0x756e, 0x75ab, + 0x75a9, 0x761a, 0x7618, 0x761b, 0x7760, 0x774c, 0x7742, 0x7733, + 0x773f, 0x773e, 0x7738, 0x7743, 0x7746, 0x7736, 0x78ee, 0x78f5, + 0x78f4, 0x0b56, 0x7c1b, 0x0140, 0x7d2b, 0x7d29, 0x7d2a, 0x7d2e, + 0x803f, 0x80e6, 0x83a7, 0x83a8, 0x8418, 0x8608, 0x8750, 0x8753, + 0x8a56, 0x8a55, 0x8f6f, 0x8f7f, 0x91b3, 0x933a, 0x9338, 0x9337, + 0x9336, 0x3854, 0xca80, 0x95dd, 0x95fc, 0x95fa, + /* 0x29 */ + 0x9633, 0x9804, 0x9807, 0x9808, 0x9806, 0x9809, 0xca91, 0xca93, + 0x9d1e, 0xcad2, 0xad0b, 0xad43, 0xad52, 0xad58, 0xad5e, 0xaf68, + 0xaf8d, 0xaf82, 0xaf7b, 0xb358, 0x15bd, 0xc900, 0x332c, 0x332e, + 0x480b, 0x332d, 0x3369, 0x33b2, 0x33b6, 0x33a9, 0x33ed, 0x3419, + 0x344f, 0x3516, 0x3503, 0x350e, 0x3504, 0x3507, 0x3510, 0x3527, + 0x3528, 0x350d, 0x3529, 0x350f, 0x3522, 0x3511, 0x3785, 0x3784, + 0x3783, 0x378a, 0x3786, 0x3810, 0x3858, 0x385a, 0x3a0c, 0x38c4, + 0x38c5, 0x3947, 0x3949, 0x394a, 0x394b, 0x53bb, 0x398d, 0x398b, + 0x3a07, 0x3a06, 0xc920, 0x39ef, 0x39f0, 0x39ed, 0x39f9, 0x3a02, + 0x39e7, 0x39f4, 0x39f7, 0x39f1, 0x3b53, 0x3b55, 0x011a, 0x3bda, + 0x3bd9, 0x012c, 0x3c38, 0x3c99, 0x3ca2, 0x3c9c, 0x3c9a, 0x3c9b, + 0x3ce5, 0x3ce3, 0x3ce1, 0x3ce0, 0x3ce2, 0x3ce4, + /* 0x2a */ + 0x32fd, 0x3ce8, 0xc92f, 0x3d13, 0x3d56, 0x3d4b, 0x3d4a, 0x3d4d, + 0x3d4c, 0x0149, 0x3dea, 0x3de9, 0x3deb, 0x3dec, 0x3e3a, 0x3e3c, + 0x3e39, 0x3e3b, 0x3f14, 0x3f0e, 0x3f35, 0x3f0a, 0x3f3f, 0x3f38, + 0x017c, 0x3f4e, 0x3f17, 0xc93f, 0x3f1e, 0x43b6, 0x43ce, 0x43ca, + 0x43cb, 0x43cc, 0x43c9, 0x44b4, 0x44ac, 0x4488, 0x4486, 0x448c, + 0x4493, 0x448a, 0x44a4, 0x4487, 0x44a5, 0x44a6, 0x4485, 0x44a3, + 0x448e, 0x471f, 0x4763, 0x478d, 0x47fa, 0x47fb, 0x4809, 0x47fe, + 0x47ff, 0x4802, 0x4804, 0x47fd, 0x4805, 0x48f9, 0x48f7, 0x48db, + 0x48da, 0x4b51, 0x4b50, 0x4b57, 0x4be2, 0x4bd8, 0x4bda, 0x4bdc, + 0x4d20, 0x4d1f, 0x4d69, 0x4ddd, 0x4e40, 0x4e41, 0x4e43, 0x4f0d, + 0x4f0c, 0x4f87, 0x4fa9, 0x4f92, 0x4f85, 0x03bf, 0x4f8c, 0x4fa2, + 0x4f8f, 0x4f8a, 0x03ba, 0x4f8d, 0x51f1, 0x5237, + /* 0x2b */ + 0x528b, 0x5287, 0x5282, 0x538e, 0x53bc, 0x53f8, 0x53fa, 0x53eb, + 0x53f9, 0x53fc, 0x5405, 0x551b, 0x551d, 0x551e, 0xc992, 0x553c, + 0x553e, 0x5584, 0x55c8, 0x55c9, 0x55d3, 0x55c7, 0x55d2, 0x5655, + 0xc996, 0x568c, 0x568a, 0x56d5, 0x56d3, 0x04d8, 0x56d8, 0x57d0, + 0x57ee, 0x57f1, 0x57fb, 0x57d3, 0x57ec, 0x57cd, 0x5815, 0x5826, + 0x580e, 0x5827, 0x582a, 0x5800, 0x5804, 0x5828, 0x5808, 0x5814, + 0x5b9b, 0x05b2, 0x5ba1, 0x5b9d, 0x5ba0, 0x5b9e, 0x5ba2, 0x5b9c, + 0x5c32, 0x5c34, 0x5c93, 0x5c96, 0x5c90, 0x5cb4, 0x5cb5, 0xc9b6, + 0x5cb6, 0x5cc2, 0xc9b5, 0x5cba, 0x5c92, 0x60fb, 0x6105, 0x60f3, + 0x60fe, 0x60fd, 0x755d, 0x60fa, 0x6243, 0x6295, 0x6294, 0x06c4, + 0x636f, 0x6373, 0x635c, 0x635b, 0x6366, 0x6374, 0x6363, 0x6367, + 0x6360, 0x6362, 0x6371, 0x6372, 0x635e, 0x6523, + /* 0x2c */ + 0x6526, 0x6564, 0xc9d6, 0x65f2, 0x6601, 0x65dd, 0x65dc, 0x65db, + 0x65f3, 0x65fd, 0x65d8, 0x65f8, 0x65fb, 0x6983, 0x698c, 0x698e, + 0x6a49, 0x6a54, 0x6a52, 0x6a4e, 0x6a58, 0x6a51, 0x6a55, 0x6a53, + 0x6a57, 0x6a50, 0x6a4f, 0x6a4d, 0x6ad2, 0x6ad3, 0x6ac9, 0x6ad4, + 0x6bef, 0xc9f8, 0x33b1, 0x6c05, 0x6c04, 0x6c2e, 0x6c2d, 0x6d45, + 0x6d5b, 0x6d5a, 0x6d59, 0x6d9d, 0x6d8e, 0x6dbc, 0x6ddd, 0x6dba, + 0xc9fd, 0x6dd8, 0x6dcb, 0x6dd9, 0x6dda, 0x6dc4, 0x6db8, 0x6dbf, + 0x6ddb, 0x6dc1, 0xc9fc, 0x6dc5, 0xca19, 0x71b1, 0x71af, 0xca18, + 0x74f7, 0x74f6, 0x74f8, 0x7550, 0x7551, 0x7571, 0x7570, 0x75b0, + 0x75af, 0x75ae, 0x75ad, 0x7625, 0x762c, 0x7622, 0x7633, 0x7634, + 0x0a2b, 0x773a, 0x7740, 0x7768, 0x0a61, 0x7764, 0x775c, 0x7757, + 0x7753, 0x774f, 0x7751, 0x7754, 0x7766, 0x23dd, + /* 0x2d */ + 0x0ab2, 0x790d, 0x7908, 0xca2b, 0x78fa, 0x7aea, 0x7b2a, 0x7bbb, + 0x7bd5, 0x7bd7, 0x4fa4, 0x33f0, 0x33b5, 0x7c06, 0x7c28, 0x7c22, + 0x7c21, 0x5656, 0x7c23, 0x43cd, 0x7d30, 0x7d34, 0x7fc9, 0x7fca, + 0x7fc8, 0xca3d, 0x8044, 0x80f3, 0xca41, 0x80f8, 0x80fc, 0x80f6, + 0x80fb, 0x80f7, 0x8100, 0x8102, 0xca40, 0xca4d, 0x8424, 0x860d, + 0x0d29, 0x8762, 0x8930, 0x892b, 0x892a, 0x0d92, 0x892d, 0x8ada, + 0x8c28, 0x8d86, 0x8f77, 0x8f7c, 0x9050, 0x904e, 0x90f2, 0x91b2, + 0x91ce, 0x91cf, 0x91e5, 0x6607, 0x9235, 0x9231, 0x9313, 0x932b, + 0x932c, 0x9345, 0x9360, 0x9341, 0x9358, 0x9347, 0x935b, 0x9350, + 0xca82, 0x935f, 0x934a, 0x9356, 0x9343, 0x9344, 0x9351, 0x95fd, + 0x9634, 0x9635, 0x9654, 0x9655, 0x970c, 0x970b, 0x970a, 0x97f9, + 0x9835, 0x9824, 0x9813, 0x981c, 0x9869, 0x9825, + /* 0x2e */ + 0x9821, 0xca95, 0xca96, 0xca98, 0x9d20, 0x9fa9, 0x9fa8, 0x9fde, + 0xa009, 0xa00a, 0xa00b, 0xa1e3, 0xa207, 0xa2b2, 0xa2b3, 0xa35d, + 0xa858, 0xa886, 0xa887, 0xa9b9, 0xa9b8, 0xad0c, 0xad44, 0xad66, + 0xad80, 0xad75, 0xad6d, 0xad7e, 0xad67, 0xad81, 0xad77, 0xafa8, + 0xafa2, 0xafa5, 0xaf9b, 0xb357, 0xb50f, 0xb532, 0xb52c, 0xb533, + 0xb8e7, 0x336e, 0x33b7, 0x33f6, 0x33f2, 0x33f3, 0x3817, 0x3430, + 0x3454, 0x3453, 0x3552, 0x353d, 0x353c, 0x3534, 0x3533, 0x3554, + 0x352f, 0x0058, 0x3555, 0x353f, 0x3537, 0x3556, 0x3561, 0x3558, + 0xc906, 0x353b, 0x3532, 0x352e, 0x353e, 0x333b, 0x378c, 0x378d, + 0x3813, 0x3816, 0x3812, 0x385b, 0x388a, 0x38d7, 0x38ce, 0x3950, + 0x3951, 0x394f, 0x398e, 0x398f, 0x39f2, 0xc921, 0x3a28, 0x3a1a, + 0x3a25, 0x3a1d, 0x3a14, 0x3a20, 0x3a1f, 0x3a1b, + /* 0x2f */ + 0x3a17, 0x3a15, 0x3a1c, 0x3a13, 0xc925, 0x3b60, 0x011c, 0x3b66, + 0x3be3, 0x3bde, 0x3be0, 0x3be1, 0x3c1a, 0x3c1b, 0x3c18, 0x3c1c, + 0x3c19, 0x3c42, 0x3c40, 0x3c3e, 0x3c44, 0x3c74, 0x3c43, 0xc92d, + 0x3cf2, 0x3d1b, 0x3d19, 0x3d1e, 0xc930, 0x3d5e, 0x3d66, 0x3d5d, + 0x3d5a, 0x3d5f, 0x3d60, 0x3d5b, 0x3d5c, 0x3d59, 0x3df0, 0x3df1, + 0x3e43, 0x3e40, 0x3e42, 0x3e41, 0x3e3f, 0x3f57, 0x3f69, 0x3f6f, + 0x3fab, 0x3f71, 0x3f93, 0x3f56, 0x3f90, 0x3f6d, 0x3f6c, 0x3f70, + 0x3f66, 0x3f67, 0x43d7, 0x43b5, 0x43db, 0x43d8, 0x43d5, 0x43d4, + 0x44ba, 0x44b7, 0x44be, 0x44b9, 0x0237, 0x44e0, 0x44dd, 0x44de, + 0x7918, 0x44d8, 0x44bd, 0x44db, 0x471d, 0x4725, 0x4921, 0x490c, + 0x4929, 0x492d, 0x491b, 0x490e, 0x491f, 0x4904, 0x491c, 0x4905, + 0x4906, 0x4920, 0x490d, 0x492a, 0x4923, 0x4911, + /* 0x30 */ + 0x4b5c, 0x4b66, 0x4b5b, 0x4b4f, 0x4b5e, 0x4b5d, 0x4bf1, 0x4bea, + 0x4bf4, 0x4beb, 0x4bf0, 0x4bfa, 0x4bfb, 0x4d28, 0x4d2c, 0x4d6b, + 0x4d2a, 0x4d6a, 0x4d6f, 0x4ddb, 0x4de0, 0x7fd1, 0x4de3, 0x4de5, + 0x4de7, 0x4e4d, 0x4e55, 0x4e54, 0x4e53, 0x4e52, 0x4e4e, 0x4e60, + 0x53c0, 0x4f0f, 0x4f11, 0x4f13, 0x4fc6, 0x4fb3, 0x4fc7, 0x4fd2, + 0x4fb8, 0x4fac, 0x4fae, 0x4fcf, 0x4fc5, 0xc97b, 0x4fcc, 0x4fab, + 0x4fc9, 0x4fb9, 0x51fb, 0x51f8, 0x51f7, 0x51f9, 0x5220, 0x523b, + 0x5239, 0x529e, 0x529a, 0x52aa, 0x52ab, 0x52af, 0x5296, 0x52a9, + 0x52a6, 0x5291, 0x0443, 0x52ae, 0x529f, 0x52ac, 0x52a0, 0x5392, + 0x5391, 0x53bf, 0x5417, 0x540a, 0x540c, 0x554a, 0x5546, 0x5534, + 0x5545, 0x5543, 0x5544, 0xc993, 0x5587, 0x5586, 0x558a, 0x55da, + 0x55d8, 0x04b4, 0x3818, 0x3434, 0x55d6, 0x55d4, + /* 0x31 */ + 0x5654, 0x5659, 0x565a, 0x5657, 0x04e0, 0x56dd, 0x56e9, 0x56e0, + 0x5805, 0x5812, 0x5813, 0x5807, 0x5816, 0x5823, 0x5802, 0xc9a1, + 0x584a, 0x5836, 0x5840, 0x5856, 0x5843, 0xc9a0, 0x584b, 0x5846, + 0x583e, 0x5849, 0x5ba7, 0x5bb6, 0x5ba6, 0x5ba8, 0x5bac, 0x5ba9, + 0x5bab, 0x5c38, 0x5c37, 0x5c39, 0x5c41, 0x5c3e, 0x5cc0, 0x5cbb, + 0x5cbf, 0x5cbd, 0x5cfe, 0x5d1e, 0x5cee, 0x5cfc, 0xc9b7, 0x5cf9, + 0x5d06, 0x5ce4, 0x5ce9, 0x5ce5, 0x5d03, 0x5cfd, 0x5d49, 0x60be, + 0x610a, 0x8626, 0x6118, 0x610d, 0x610f, 0x610e, 0x6120, 0x6271, + 0x6299, 0x62e2, 0x62df, 0x62de, 0x6378, 0x6379, 0x06e4, 0x637c, + 0x637d, 0x6384, 0x638b, 0x638a, 0xc9d2, 0x6389, 0x652c, 0x6529, + 0x656c, 0x2104, 0x6609, 0x6608, 0x660c, 0x660d, 0x6610, 0x0826, + 0x699f, 0x6998, 0x69a2, 0x699a, 0x6ad5, 0x6ae2, + /* 0x32 */ + 0x6af0, 0x6aea, 0x6aeb, 0x6aed, 0x6ae8, 0x6ae0, 0x6b85, 0x6b86, + 0x6bf0, 0x5046, 0x6c45, 0x6c38, 0x6c3e, 0x6c42, 0x6c40, 0x6d47, + 0x6d5c, 0x6d5e, 0x6db4, 0x6dc2, 0x6e14, 0x6de5, 0x6e15, 0x6e11, + 0xc9ff, 0x6dee, 0x6de7, 0x6df5, 0x6df4, 0x6de8, 0x6e01, 0x6def, + 0x6df1, 0xca00, 0x71db, 0x71bf, 0x71da, 0x71c7, 0x71dd, 0xca1a, + 0x71eb, 0x71e1, 0x71c1, 0x71bd, 0x7507, 0x74fd, 0x7501, 0x750a, + 0x7503, 0x7572, 0x7574, 0x7575, 0x75b2, 0x75b1, 0x75b4, 0x764c, + 0x7642, 0x7640, 0x7649, 0x763c, 0x764d, 0x764a, 0x763b, 0x7761, + 0x7774, 0xca26, 0x777f, 0x777a, 0x7788, 0x777c, 0x0a6f, 0x7770, + 0x790f, 0x7928, 0x7913, 0x792a, 0x7aed, 0x7aef, 0x7b2e, 0x7bc1, + 0x7bdd, 0x3e47, 0x7c2d, 0x7c2b, 0x7c35, 0x7c2f, 0x7c31, 0x7c34, + 0xca35, 0x7c30, 0x7d3a, 0x7d39, 0x7d37, 0x7d4b, + /* 0x33 */ + 0x7d54, 0x7d4d, 0x7d51, 0x7d47, 0x7f27, 0x7f50, 0x7f4d, 0x7f4e, + 0x7f54, 0x7fd2, 0x7fce, 0x804b, 0x8049, 0x8105, 0x810f, 0x8119, + 0xca43, 0x8106, 0x810c, 0x8129, 0x8104, 0x8108, 0x8125, 0x0c1c, + 0x8103, 0x8127, 0x8110, 0x810a, 0xca42, 0x985d, 0x83aa, 0x83ab, + 0x83a9, 0x8441, 0x843a, 0x843c, 0x842b, 0x8449, 0x8615, 0x0d00, + 0x8616, 0xca53, 0x8631, 0x6d4a, 0x873c, 0x877c, 0x876d, 0x876a, + 0x8763, 0x876b, 0x877b, 0x8764, 0x877a, 0x8769, 0x876f, 0x8937, + 0x8935, 0x893c, 0x8936, 0x893d, 0x893e, 0x8ae1, 0x8ae0, 0x8c2d, + 0x8c2b, 0x8d8d, 0x8d92, 0x0eb6, 0x8d8e, 0xca6b, 0x8d91, 0x8d96, + 0x8f7b, 0x8f78, 0x8f81, 0x8f96, 0x8fa3, 0x8f95, 0x8f97, 0x9054, + 0x9052, 0x90f5, 0x9100, 0x90fb, 0x90f4, 0x90f6, 0x91e8, 0x91ea, + 0x933e, 0x933d, 0x933b, 0x9380, 0x0fe4, 0x9388, + /* 0x34 */ + 0x9381, 0x9382, 0x93ce, 0x9383, 0x9377, 0x9379, 0x9373, 0x936d, + 0x9370, 0x938d, 0x9375, 0x938c, 0x936a, 0x9391, 0x9389, 0x938e, + 0x44dc, 0x95ff, 0x9659, 0x96c7, 0x9712, 0x9714, 0x9713, 0x97cb, + 0x9842, 0x10ad, 0x983d, 0x2aff, 0x9840, 0x9844, 0x9862, 0x9843, + 0x983f, 0x9845, 0x983c, 0xca97, 0x9846, 0x9847, 0xcab3, 0x9c9e, + 0x9c9d, 0x9d2c, 0x9d29, 0x9d2f, 0x9d2e, 0x9d30, 0x9fe1, 0x9fe2, + 0xa00e, 0xa019, 0xa012, 0xa2b4, 0xa5da, 0xa726, 0xa859, 0xa85a, + 0xa888, 0xa9c0, 0xa9ba, 0xaba0, 0xcadd, 0xaba2, 0xad86, 0x2fec, + 0xad9d, 0xad88, 0xad8f, 0xad8e, 0xad9b, 0xafc1, 0xafc3, 0xafc4, + 0xaf96, 0xafc7, 0xafc6, 0xafbf, 0x14c3, 0xb20f, 0xb555, 0xb542, + 0xb546, 0xb54b, 0xb543, 0xb553, 0xb548, 0xb549, 0xb54a, 0xb54e, + 0x7bde, 0x3991, 0xbb4b, 0xbd80, 0xbd81, 0xbd83, + /* 0x35 */ + 0x358a, 0xbd82, 0x5542, 0x3c22, 0x3370, 0x3371, 0x33bc, 0x4f18, + 0x33be, 0x33ba, 0x33f8, 0x3437, 0x3435, 0x3dfc, 0x3456, 0x3459, + 0x345e, 0x356d, 0x3591, 0x3592, 0x3568, 0x3566, 0x3573, 0x0067, + 0x3596, 0x358b, 0x358c, 0x3796, 0x37ee, 0x381c, 0x381a, 0x3819, + 0x381b, 0x385d, 0x385e, 0xc918, 0x38dc, 0x38e2, 0x3952, 0x3992, + 0x3a30, 0x3a52, 0x3a42, 0x3a41, 0x3a45, 0x3a37, 0x3a40, 0x3a3f, + 0x3a3d, 0x3a38, 0x3a3a, 0x3a49, 0x3b6b, 0x3b78, 0x3b79, 0xc926, + 0x3b6c, 0x3be9, 0x3be6, 0x3be5, 0x3bea, 0x3be7, 0x3be8, 0x3c1f, + 0x3c4b, 0x3c4a, 0x3c53, 0x3c76, 0x3ca3, 0x3ca4, 0x3cf6, 0x3cf3, + 0x3cf9, 0x3cf7, 0x3cfc, 0x3d1d, 0x3d6d, 0x3d71, 0x3d6c, 0x3d6e, + 0x3d70, 0x3d6f, 0x3d67, 0x3d68, 0x3dfa, 0x3df9, 0x3e4e, 0x19de, + 0x3e4d, 0x3e4f, 0x3e4a, 0x3e4c, 0x0196, 0xc942, + /* 0x36 */ + 0x3fee, 0x3fb2, 0x3fc0, 0x3fc1, 0x3ff4, 0x3fc8, 0x3fc5, 0x3fc6, + 0x3fad, 0x43e2, 0x43ea, 0x43e3, 0x43e1, 0x44f7, 0x4501, 0x4512, + 0x44f6, 0x44f1, 0x451f, 0x44ee, 0xc952, 0x44f3, 0x4515, 0x4516, + 0x4517, 0x44f8, 0x4519, 0x44f2, 0x44f4, 0x44f5, 0x4513, 0x4506, + 0x4726, 0x4724, 0x475a, 0x60c8, 0x4797, 0x4795, 0x479a, 0x481f, + 0x3dfb, 0x4829, 0x4820, 0xc962, 0xc963, 0x494c, 0x4930, 0x4938, + 0x493d, 0x4951, 0x494f, 0x494a, 0x4934, 0x4936, 0x1b30, 0x4b6a, + 0x4b68, 0x4c1c, 0x4c0e, 0x4c1e, 0x0359, 0x4c09, 0x4c08, 0x4c13, + 0x4c01, 0x4c0f, 0x4c14, 0x4c06, 0x4c07, 0x1cb2, 0xc973, 0x0376, + 0x4d79, 0x4dea, 0x4ded, 0x4de9, 0x4dee, 0x4e68, 0x4e64, 0x4e67, + 0x4e72, 0x4e62, 0x4e74, 0x4e79, 0x4f19, 0x4f17, 0x4f15, 0x4f16, + 0x4fe6, 0x8fa4, 0x4fee, 0x03d2, 0x4fdf, 0x4fe4, + /* 0x37 */ + 0x4fda, 0x4fea, 0x4fed, 0x4fe3, 0x4fe9, 0x51fd, 0x3957, 0x5221, + 0x52c6, 0x52b8, 0x52cb, 0xc985, 0x52bd, 0x52b5, 0x52bb, 0x52bf, + 0x52be, 0x52b2, 0x52c1, 0x52c2, 0x5399, 0x53c6, 0x542c, 0x542d, + 0x5425, 0x541e, 0x541f, 0x5423, 0x5550, 0x554e, 0x554d, 0x5552, + 0x55e9, 0x55ec, 0x55e8, 0x5658, 0x565c, 0x565b, 0x568f, 0x6a72, + 0x56f6, 0x5700, 0x56fc, 0x56f8, 0x56ea, 0x56fe, 0x56f7, 0x56fd, + 0x5870, 0x5862, 0x5844, 0x0520, 0x584d, 0x584c, 0x583f, 0x5866, + 0x5835, 0x0529, 0x5834, 0x588d, 0x5884, 0x0538, 0x5886, 0x5889, + 0x5887, 0x5883, 0x5875, 0x5879, 0x58af, 0x58b0, 0x5bb7, 0x5bbb, + 0x5bb9, 0x5c46, 0x5c47, 0x5c45, 0x5cea, 0x5cf6, 0x5d68, 0x5d39, + 0xc9b9, 0x5d3d, 0x5d3b, 0x5d4d, 0x5d30, 0x5d4a, 0x5d3e, 0x5d40, + 0x5d4c, 0x5d47, 0x5d38, 0x5d52, 0x5d3a, 0x5d53, + /* 0x38 */ + 0x60c4, 0x60c1, 0x611c, 0x611d, 0x612a, 0x611e, 0x612f, 0x6122, + 0x612e, 0x6125, 0x0689, 0x06b0, 0x624a, 0x624b, 0x6276, 0x06bf, + 0x62e8, 0x62ef, 0x62e9, 0x06c5, 0x62ea, 0xc9cc, 0x06ea, 0x639b, + 0x639e, 0x6393, 0x63a7, 0x639c, 0x63a0, 0x639a, 0x63ab, 0x63be, + 0x63a9, 0x652d, 0x656e, 0x6644, 0x663d, 0x663a, 0x6668, 0x663c, + 0x666a, 0xc9e0, 0x6638, 0x6665, 0x6639, 0x666d, 0x6636, 0xc9e3, + 0x663e, 0x667e, 0x6637, 0x6999, 0x69a9, 0x69ad, 0x69a7, 0x69a8, + 0x6a66, 0x6a69, 0x6a6d, 0x6a67, 0x6a6b, 0x6a6a, 0x6aee, 0x6b01, + 0x6b03, 0x6af4, 0x6afb, 0x0837, 0x6af6, 0x6afc, 0x6bf4, 0x6c08, + 0x6c0a, 0x6c09, 0x6c6d, 0x6c62, 0x6c41, 0x6c5e, 0x6c5c, 0x6df3, + 0x6e26, 0x08e4, 0x6e39, 0xca04, 0x6e6c, 0x6e2b, 0x6e2e, 0x6e3b, + 0x6e5e, 0x6efb, 0x6e27, 0x6e24, 0x6e69, 0x6e30, + /* 0x39 */ + 0xca05, 0x6e62, 0x6e38, 0x6e35, 0x6e2a, 0x6e2c, 0x6e68, 0x6e31, + 0x6e2f, 0x6e2d, 0x6e3a, 0x6e36, 0xca03, 0x6e21, 0x6e3c, 0x6e20, + 0x6e64, 0x6e3e, 0x08e8, 0x71f7, 0x7212, 0x71f1, 0x71f5, 0x7222, + 0x71f2, 0x71df, 0x7215, 0x7216, 0x757a, 0x7576, 0x75be, 0x0a20, + 0x75bd, 0x7609, 0x7608, 0x7657, 0x77a3, 0x77bf, 0x77b8, 0x77af, + 0x779c, 0x77a5, 0x7772, 0x7775, 0x779d, 0x7799, 0x77b9, 0x794e, + 0x7939, 0x793b, 0x7935, 0x793c, 0x7955, 0x7af0, 0x7af3, 0x7af4, + 0x7b3b, 0x7b3c, 0x7b3a, 0x7b36, 0x7c07, 0x3feb, 0x7c55, 0x7c50, + 0x7c4f, 0x7c52, 0x7c56, 0x33bd, 0x7c32, 0x7d63, 0x7d6b, 0x7d66, + 0x7d57, 0x7d5d, 0x0b86, 0x7d6d, 0x7d61, 0x7d69, 0x7d5a, 0x7d5c, + 0x7d62, 0x7f2a, 0x7f29, 0x7f58, 0x7f5a, 0x7fd7, 0x7fdb, 0x7fdc, + 0x7fdd, 0x7fd8, 0x8054, 0x805b, 0x805c, 0x8053, + /* 0x3a */ + 0x804f, 0x8056, 0x8050, 0x805a, 0x806b, 0x8136, 0x8153, 0x813a, + 0x813c, 0x813e, 0x8149, 0x8140, 0xca46, 0xca47, 0x8364, 0x8365, + 0x83b5, 0x83b6, 0x83b2, 0x8448, 0x844a, 0x8472, 0x8469, 0x845a, + 0x844c, 0x862c, 0x8630, 0x864b, 0x8649, 0x8642, 0x8644, 0x864a, + 0x864f, 0x8792, 0xca57, 0x8797, 0x8780, 0x8782, 0x8786, 0x8953, + 0x895e, 0x8952, 0x895b, 0x894e, 0x8a6d, 0x8a6e, 0x8afa, 0x8af6, + 0x8afb, 0x8c33, 0x8c3d, 0x8c37, 0x8c3e, 0x8c35, 0x8d9a, 0x8dab, + 0x8da6, 0x8db0, 0x8d99, 0x8da0, 0x8d9e, 0x8da8, 0x8da1, 0x8daa, + 0x8dad, 0x8dbb, 0x8d9c, 0x8da5, 0x33b3, 0x8f27, 0x8f8d, 0x8f8e, + 0x8f8f, 0x8f92, 0x0f56, 0x8f91, 0x8fad, 0x9057, 0x9058, 0x905e, + 0x905d, 0x905c, 0x905b, 0x0f67, 0x910a, 0x9103, 0x910e, 0x91b8, + 0x924d, 0x923f, 0x9247, 0x924b, 0x924a, 0x923d, + /* 0x3b */ + 0x2838, 0x9241, 0x924c, 0x2881, 0x9362, 0x9369, 0x9361, 0x0fd1, + 0x93aa, 0x93a6, 0x93ac, 0x93bd, 0x93bb, 0x93a4, 0x93ba, 0x939a, + 0x0feb, 0x93a1, 0x93c1, 0x95e0, 0x960a, 0x9603, 0x9606, 0x9639, + 0x963a, 0x9636, 0x965b, 0x965f, 0x965e, 0x9667, 0x9661, 0x9662, + 0x965d, 0x96ca, 0x96cc, 0x96ce, 0x9718, 0x971d, 0x971f, 0x9720, + 0x9717, 0x9715, 0x981f, 0x9827, 0x9826, 0x5010, 0x988b, 0x98ae, + 0x988a, 0xca99, 0x9892, 0x9889, 0x9887, 0x10b6, 0x988f, 0x9884, + 0x9883, 0x988c, 0x9893, 0x988d, 0x9898, 0x987d, 0x987e, 0x98d2, + 0x9880, 0x9899, 0x9cac, 0x9d50, 0x9d55, 0x9d42, 0x9d3f, 0x9d3c, + 0x11a3, 0x9d4c, 0x9d49, 0x9d57, 0x9d58, 0x9d4f, 0x9d5c, 0x9d47, + 0xcab7, 0x9fab, 0x1210, 0x9faf, 0x9fad, 0x9fe8, 0x9fe7, 0xa030, + 0xa026, 0xa02f, 0xa028, 0xa02b, 0xa01d, 0xa02d, + /* 0x3c */ + 0xa020, 0xa02a, 0xa02c, 0xa035, 0xa021, 0xa023, 0xa024, 0xa036, + 0xa037, 0xa1e9, 0xa2ba, 0xa2b8, 0xcacc, 0xa36d, 0xa36a, 0xa368, + 0xa369, 0xa36b, 0xa361, 0xa5dc, 0xa5db, 0xa62d, 0xa62c, 0xa6a2, + 0xa72b, 0xa732, 0xcad7, 0xa894, 0xa892, 0xa890, 0xa9c9, 0xa9c4, + 0xa9c1, 0xa9c3, 0xa9cd, 0xab14, 0xaba7, 0xabaf, 0xabaa, 0xad0d, + 0xad54, 0xad5b, 0xad61, 0xadae, 0xadb3, 0xadc0, 0xadc4, 0xadbf, + 0xadcb, 0xadad, 0xada7, 0xada4, 0xadbd, 0xadaf, 0xadb2, 0xada5, + 0xafe7, 0xafe0, 0xafce, 0xafde, 0xafd5, 0xafdf, 0xafd9, 0xb0f2, + 0xb223, 0xb240, 0x151b, 0xb23e, 0x1587, 0xb3cf, 0x3e54, 0xb55b, + 0xb558, 0xb562, 0xb55f, 0xb567, 0xb563, 0xb55e, 0xb560, 0xb685, + 0xb686, 0xb687, 0xb8e8, 0xb8e6, 0xbd71, 0xbd85, 0xcb02, 0xbd86, + 0xbe10, 0x3cf8, 0x33bf, 0x3e61, 0x33fe, 0x33fc, + /* 0x3d */ + 0x3439, 0x3461, 0x3460, 0x35e2, 0x35ea, 0x35e3, 0x35b4, 0x35ae, + 0x35be, 0x35b8, 0x35a8, 0x35aa, 0x35a9, 0x35b3, 0x35d5, 0x35ad, + 0x35b9, 0x35bb, 0x35b1, 0x35c2, 0xc908, 0x35eb, 0x35ba, 0x35d2, + 0x35d4, 0x37f1, 0x381d, 0xc912, 0x3862, 0x388c, 0x38e6, 0x38e7, + 0x395a, 0x3958, 0x3959, 0x3996, 0x3997, 0x3a61, 0x3a67, 0x3a71, + 0x3a65, 0x3a7d, 0x3a7e, 0x3b7d, 0x3b84, 0x3b7c, 0x3b7e, 0x3b7f, + 0x3b80, 0x3bef, 0x3bf4, 0x3c1e, 0x3c4e, 0x3cfb, 0x3cfa, 0x3cfd, + 0xc931, 0xc932, 0x3d79, 0x3d7c, 0x3d7d, 0x3d84, 0x3d7b, 0x3d78, + 0x0157, 0x3e5e, 0x3e5a, 0x3e5c, 0x3e59, 0x3e55, 0x3e63, 0x3e56, + 0x3e5f, 0x3e60, 0x3e5b, 0x404a, 0x4065, 0x40b3, 0x402c, 0x4077, + 0x403d, 0x4052, 0x4061, 0x402a, 0x403e, 0x4034, 0x4029, 0x40b2, + 0x40ad, 0x4040, 0x4053, 0xc944, 0x403f, 0x4041, + /* 0x3e */ + 0x4072, 0x43f6, 0x43f5, 0x43f4, 0x43f2, 0x43f9, 0x4527, 0x4554, + 0x4555, 0x452e, 0xc954, 0xc953, 0x452c, 0x4538, 0x4539, 0x4531, + 0x454f, 0x4573, 0x4530, 0x452b, 0x4551, 0x472c, 0x475b, 0x475c, + 0x4768, 0x476c, 0x476b, 0x4769, 0x479f, 0x4838, 0x483c, 0x483a, + 0x4835, 0x029d, 0x4839, 0x4836, 0x483b, 0x4960, 0x4961, 0x4963, + 0x4964, 0x4994, 0x4993, 0x495e, 0x4968, 0x496a, 0x4965, 0xc966, + 0x4990, 0x495f, 0x4972, 0xc965, 0x4c3c, 0x4c27, 0x4c24, 0x4c26, + 0x4c25, 0x035f, 0x4c28, 0x4c36, 0x4d31, 0x4d30, 0x4d34, 0x4d81, + 0x4d7d, 0x4d82, 0x4d80, 0x0379, 0x35d3, 0x4df2, 0x4e66, 0x4e8c, + 0x4e7b, 0x4e83, 0x0398, 0x4e8e, 0x4e7a, 0x4e92, 0x4e91, 0x4e82, + 0x4f1b, 0x4f1c, 0x5027, 0x5021, 0x03dc, 0x1d2b, 0x5043, 0x03df, + 0x5018, 0x507b, 0x501a, 0x504b, 0x504a, 0x504d, + /* 0x3f */ + 0x504f, 0x5019, 0x5035, 0x5013, 0x5052, 0x5014, 0x501e, 0x502c, + 0x5020, 0x5022, 0x5012, 0x501f, 0x5200, 0x5223, 0x5240, 0x5243, + 0x52e4, 0x52db, 0x52ea, 0x52dd, 0x52cc, 0x52d9, 0x52e8, 0x52f6, + 0x52e3, 0x52d3, 0x52da, 0x52d6, 0x52e7, 0x543a, 0x543f, 0x5440, + 0x5448, 0x5459, 0x5437, 0x5444, 0xc98c, 0xc98b, 0x5455, 0x5439, + 0x5554, 0x5555, 0x5556, 0x5557, 0x5558, 0x5559, 0x558d, 0x55f2, + 0x55f8, 0x55f5, 0x55f6, 0x55fc, 0x55fe, 0x55f1, 0x55fd, 0x565e, + 0x5696, 0x5697, 0x569c, 0x569b, 0x5695, 0xc99a, 0x571a, 0x5709, + 0x5704, 0x570e, 0x571c, 0x5718, 0x570d, 0x5710, 0x570c, 0x5703, + 0x587b, 0x58a6, 0x5877, 0x5888, 0x5874, 0x58da, 0x5876, 0x5878, + 0x588a, 0x588f, 0x587d, 0x5890, 0x58ed, 0x58d9, 0x58d0, 0x591a, + 0x58d7, 0x58e2, 0x58e1, 0x58c5, 0x58e0, 0x58ca, + /* 0x40 */ + 0x5925, 0x58cc, 0xc9b3, 0x5bc6, 0x5bc1, 0x5c4d, 0x5d4b, 0x5d64, + 0x5d95, 0x5d99, 0xc9bc, 0x5d94, 0x5da2, 0x5dae, 0x5d9e, 0x5da7, + 0x5d86, 0x05fd, 0x5da4, 0x5d91, 0x5d93, 0xc9bb, 0x5d88, 0x60cd, + 0x60ca, 0x613f, 0x6140, 0x6146, 0x6141, 0x6145, 0x6158, 0x613b, + 0x6148, 0x624e, 0x6252, 0x624f, 0x627b, 0x627a, 0x62a0, 0x629f, + 0x62fb, 0x62f7, 0x63b8, 0x63b9, 0x63bb, 0x63b7, 0x06f4, 0x63ba, + 0x06ef, 0x63da, 0x63b5, 0x63bf, 0x63bc, 0x63c0, 0xc9d3, 0xc9d9, + 0x6575, 0x6579, 0x6576, 0x6635, 0x6640, 0x66c0, 0x6681, 0x66ad, + 0x66af, 0x66ac, 0x668f, 0x66a8, 0x66aa, 0x66a9, 0x6688, 0x667f, + 0x6680, 0x66bc, 0x69ae, 0x69bb, 0x69bd, 0x0831, 0x6a78, 0x6a74, + 0x6b0c, 0x6b11, 0x6b08, 0x6b06, 0x6b10, 0x6b8f, 0x6b90, 0x6b8d, + 0x6b8e, 0x6b96, 0x6b95, 0x6c0b, 0x6c0c, 0x6c7c, + /* 0x41 */ + 0x6c73, 0x6c75, 0x6c76, 0x6c7d, 0x6c78, 0x6c71, 0x6d4b, 0x6d4e, + 0x6e33, 0x6e32, 0x0903, 0x6e91, 0x6ee7, 0x6ee9, 0x6ea2, 0x6e94, + 0x6e87, 0x6ea3, 0x6edd, 0x6e7b, 0x6e83, 0x6e81, 0x6edf, 0x6e7c, + 0x6ee4, 0x6ee2, 0x6e93, 0x6e7d, 0x6ebf, 0x6e9b, 0x6e8e, 0x6e9f, + 0x0909, 0x6e8c, 0x6e7f, 0x6e9c, 0x6e84, 0x6e42, 0x6ee6, 0x7251, + 0x724a, 0x7264, 0x7225, 0x722f, 0x722e, 0x722b, 0x7228, 0x7232, + 0x722d, 0x7231, 0x7239, 0x722c, 0x7261, 0x7511, 0x7510, 0x7512, + 0x7553, 0x7555, 0x757b, 0x7581, 0x757d, 0x757c, 0x75c2, 0x75c5, + 0xca22, 0x75c4, 0xca23, 0x766b, 0x7668, 0x0a3e, 0x765c, 0x765d, + 0x766a, 0xca24, 0x7c76, 0x7776, 0x0a77, 0x77c4, 0x77cb, 0x77c8, + 0x77d4, 0x77d5, 0x77c9, 0x77d7, 0x0a7b, 0x7978, 0x795a, 0x795b, + 0x795c, 0x7956, 0x7958, 0x7971, 0x96d4, 0x7b40, + /* 0x42 */ + 0xca33, 0x7b3f, 0x7b43, 0x7b41, 0x7be2, 0x7be0, 0x7be3, 0x7c66, + 0x7c73, 0x7c6c, 0x7c71, 0x7c6a, 0x7c6d, 0x7c6e, 0x7c6b, 0x7d8c, + 0x7d77, 0xca3a, 0x7d7f, 0x7d89, 0x7d7a, 0x7d85, 0x7d78, 0x7d8a, + 0x7d86, 0x7f2c, 0x7f67, 0x7f5b, 0x7fe5, 0x7fe1, 0x8061, 0x8069, + 0x806a, 0x8165, 0x816d, 0x8163, 0x8186, 0x815c, 0x8162, 0xca48, + 0x8179, 0x8169, 0x8170, 0x8176, 0x815d, 0x8187, 0x816e, 0x8171, + 0x817c, 0x8173, 0x815b, 0x816b, 0x83bf, 0x83c1, 0x83bd, 0x83c9, + 0x83bc, 0x83c2, 0x83c0, 0x8492, 0x84a9, 0x848f, 0x8476, 0x847b, + 0x8475, 0x84a4, 0x8664, 0x873d, 0x87af, 0x0d3a, 0xca58, 0x879d, + 0x8799, 0x87b1, 0x8963, 0x8962, 0x8964, 0x8969, 0x0da0, 0x8a75, + 0x8a73, 0x8a71, 0x8a74, 0x8b0c, 0x8b16, 0x0de5, 0x8b11, 0x8b1f, + 0x8b1a, 0x8b0d, 0x8b1b, 0x8b13, 0x8c4e, 0x8c55, + /* 0x43 */ + 0x8c50, 0x0e7d, 0x8dd2, 0x8dd3, 0x8dd1, 0x8df1, 0x8ddc, 0x8dc8, + 0x8dcc, 0x8dd0, 0x8dcf, 0x8ddf, 0x8f2b, 0x8f2e, 0x8f2d, 0x8f9d, + 0x8f9e, 0x8f9f, 0x8fa9, 0x8fa0, 0x8f98, 0x8fa1, 0x8fab, 0x8faf, + 0x906e, 0x905f, 0x905a, 0x0f6d, 0x9065, 0x9068, 0x9072, 0x9117, + 0x9116, 0x9118, 0x9119, 0x911a, 0x9122, 0x911b, 0x911c, 0x91be, + 0x91ee, 0x925a, 0x9250, 0x9258, 0x9254, 0x9257, 0x9256, 0x9315, + 0x939b, 0x9393, 0x9392, 0x9372, 0x9398, 0x9399, 0x93df, 0x0ff8, + 0x93d5, 0x2958, 0x93d4, 0x93f3, 0x93f4, 0x93e7, 0x93e1, 0x93e6, + 0x93eb, 0x93ec, 0x35db, 0x1050, 0x960d, 0x960c, 0x4d2f, 0x9668, + 0x9665, 0x966b, 0x9669, 0x96d1, 0x96d3, 0x9727, 0x9728, 0x1068, + 0x1067, 0x9724, 0x97d7, 0x98ca, 0x98c7, 0xca9e, 0x98d8, 0x98e1, + 0x98c6, 0x98f8, 0x98c3, 0x98f4, 0x9917, 0x98ea, + /* 0x44 */ + 0x98cb, 0x9886, 0x98c4, 0x98d9, 0x9919, 0x98c2, 0x98e2, 0x10cf, + 0x98de, 0x98ed, 0xca9c, 0x10cd, 0x991d, 0x98dd, 0x98db, 0x98e8, + 0x98e9, 0x98bf, 0x98e0, 0x98d1, 0x98dc, 0x98ce, 0x991e, 0x98cc, + 0x98f2, 0x98f3, 0xca9f, 0xcaa2, 0xcaa3, 0xcaa1, 0x9cab, 0x9caa, + 0x9ca7, 0x9ca9, 0x9d88, 0x9d75, 0x9d60, 0x9d6c, 0x9d73, 0x11ab, + 0x9d6e, 0x9d74, 0x9d76, 0x9d68, 0x9d77, 0x9d86, 0x9fea, 0xa051, + 0xa050, 0xa058, 0xa04d, 0xa04f, 0xa04e, 0xa05c, 0xa052, 0xa044, + 0xa04a, 0xa04b, 0xa1ea, 0xa210, 0xa211, 0xa2cd, 0xa2bf, 0xa2c4, + 0xa2d0, 0xa2ce, 0xa2c0, 0xa2c2, 0xa2cf, 0xa2c9, 0xa2bb, 0xa397, + 0xa392, 0xa36f, 0xa37e, 0xa39a, 0x12c1, 0xa386, 0xa373, 0x2d24, + 0xa377, 0xa38f, 0xa370, 0xa381, 0xa382, 0xa399, 0xa37d, 0xa37f, + 0xa37b, 0xa387, 0xa5b2, 0xa62f, 0xa634, 0xa62e, + /* 0x45 */ + 0xa632, 0x1347, 0xa6aa, 0x1357, 0xa6a9, 0xa738, 0xa736, 0xa737, + 0xa747, 0xa733, 0xa739, 0xa735, 0xa744, 0xa8a5, 0xa8a6, 0xa89e, + 0xa9e3, 0xa9df, 0xa9d3, 0xa9f1, 0xa9e4, 0xa9e0, 0xa9d6, 0x2ec3, + 0xa9e6, 0xa9d8, 0xa9de, 0xa9db, 0xa9dc, 0xab1b, 0xab1f, 0xab1d, + 0xab1c, 0xab1e, 0xab20, 0xab21, 0x144e, 0xabb6, 0xabbc, 0xabc6, + 0xabc7, 0xabba, 0xabbe, 0xabbd, 0xabb5, 0xabb4, 0xad0f, 0xad62, + 0xadeb, 0xadd9, 0xade4, 0xadd7, 0xadd8, 0xadd6, 0xadce, 0xaddd, + 0xade7, 0xadd2, 0xadc5, 0xadc9, 0xaddb, 0xaf92, 0xaf8a, 0xaf8b, + 0xaf89, 0xb008, 0xb003, 0xb006, 0xb005, 0xaff5, 0xb00b, 0xaffb, + 0xb0fc, 0xb101, 0xb102, 0xb0fa, 0xb108, 0xb0f7, 0xb100, 0xb0ff, + 0xb106, 0xb0f6, 0xb0fb, 0xb10a, 0xb225, 0xb243, 0xb244, 0xb364, + 0xb362, 0xb35e, 0xb35b, 0xb3d6, 0x3372, 0x33c2, + /* 0x46 */ + 0xb577, 0xb582, 0xb57c, 0xb57d, 0xb586, 0xb581, 0xb584, 0xb576, + 0xb583, 0xb57f, 0xb57e, 0xb688, 0xb68d, 0xb68b, 0xb691, 0xb68f, + 0xb77c, 0xb779, 0xb77a, 0xb8ea, 0xbb4c, 0xbc99, 0x35d1, 0xbd8b, + 0xbd8d, 0xbd8a, 0xbd8e, 0xbe11, 0x5456, 0xcb15, 0x3374, 0x33c3, + 0x33c4, 0x341b, 0x345f, 0x346a, 0x3469, 0x346b, 0x360c, 0x35f6, + 0x35ed, 0x3629, 0x35fe, 0x35f1, 0x3617, 0x35ff, 0x35ee, 0x35fd, + 0x361c, 0x35fc, 0x3600, 0x3620, 0x0077, 0x35f9, 0x3667, 0x3608, + 0x379e, 0x37f3, 0x3825, 0x3827, 0x381f, 0x3865, 0x3863, 0x3894, + 0x3897, 0x38f1, 0x395f, 0x3962, 0x18f2, 0x3960, 0xc922, 0x3a8c, + 0x3a82, 0x3a90, 0x3a8b, 0x3a8d, 0x3a81, 0x3a9d, 0x3b8e, 0x3b8f, + 0x3b92, 0x3c23, 0x3c52, 0xc92e, 0x3d00, 0x3d01, 0x3d02, 0x3d1f, + 0x3d8c, 0x3d89, 0x3d8b, 0x3d88, 0x3d8d, 0x3d8f, + /* 0x47 */ + 0x9085, 0x3e00, 0x3e05, 0x3e01, 0x3e68, 0x3e6e, 0x3e67, 0x3e75, + 0x1ab6, 0xc945, 0x40d7, 0xc946, 0x3348, 0x40d4, 0x40d8, 0xc947, + 0xc948, 0x40ba, 0xc949, 0x40db, 0x40bf, 0x4135, 0x40bc, 0x40d9, + 0x01c4, 0x40dd, 0x4100, 0x40d5, 0x4130, 0x40bd, 0x40dc, 0x43fd, + 0x43fe, 0x4407, 0x7517, 0x456f, 0x4569, 0x4570, 0x4567, 0x45a9, + 0x4595, 0x4590, 0x456c, 0x4597, 0x4571, 0x0252, 0x4574, 0x456d, + 0x458e, 0x472f, 0xc61b, 0x47a9, 0x484e, 0xc95f, 0x485a, 0x4848, + 0x4855, 0x484c, 0x4849, 0x484f, 0x484a, 0x49d6, 0x49a0, 0x49a9, + 0xc967, 0x499d, 0x49d4, 0x49a4, 0x49a8, 0x49a6, 0x49e6, 0x4b7d, + 0x4b77, 0x4b7a, 0x4c41, 0x4c49, 0x4c59, 0x4c45, 0x4c48, 0x4c40, + 0x4d8e, 0x4d95, 0x4d90, 0x4df7, 0x4df8, 0x4df6, 0x4dfb, 0x4e9e, + 0x4e9d, 0x4e99, 0xc977, 0x4ea3, 0x4ea9, 0x4e98, + /* 0x48 */ + 0x4ea0, 0x4e96, 0x4e94, 0x4e95, 0x4e9f, 0x4ea1, 0x4f21, 0x4f1d, + 0x4f1f, 0x506d, 0xc97c, 0x509a, 0x5092, 0x507a, 0x507d, 0x50a1, + 0x509d, 0x5099, 0x506b, 0x506e, 0xc97d, 0x5245, 0xc984, 0x52fb, + 0x52eb, 0x52f2, 0x52f9, 0xc986, 0x52f8, 0x52ed, 0x5301, 0x52f7, + 0x5306, 0x539b, 0x53ca, 0x046b, 0x1ec3, 0x546b, 0x546c, 0x5474, + 0x5467, 0x545b, 0x5460, 0x5476, 0x5463, 0x5461, 0x5528, 0x555b, + 0x555e, 0x5560, 0x555d, 0x555c, 0x55f4, 0x5600, 0x5608, 0x5607, + 0x5601, 0x5605, 0x5664, 0x5663, 0x569e, 0x56a0, 0x56a1, 0x569f, + 0x5726, 0x572d, 0x5728, 0x571d, 0x58ec, 0x58e3, 0x58eb, 0x5916, + 0x58c8, 0x931b, 0x58e9, 0x58e4, 0x5924, 0x58d1, 0x0541, 0x58dd, + 0x58c2, 0x58cb, 0x58c7, 0x58e7, 0x0550, 0x58ea, 0x594b, 0xc9a5, + 0x5960, 0x597d, 0x593e, 0xc9a4, 0x5952, 0x594e, + /* 0x49 */ + 0x593c, 0x5932, 0x5930, 0x5923, 0x5bca, 0x5bcb, 0x5bc9, 0x5bc8, + 0x5bcd, 0x5d98, 0x5da0, 0x5d9f, 0x5d9c, 0x5da3, 0x5d97, 0xc9be, + 0x5df1, 0x5e09, 0x5e03, 0x5dea, 0x5e45, 0x5ded, 0x5e05, 0x5e1a, + 0x5e15, 0x5e01, 0x5dec, 0x5e0e, 0x5e17, 0x5e42, 0x5e12, 0x5e10, + 0x5def, 0x5dff, 0x5e00, 0x5e0c, 0x5e0f, 0x5e04, 0x5e08, 0x5e14, + 0x5e43, 0xc9bd, 0x5e1b, 0x5e11, 0x5e13, 0x60cf, 0x60ce, 0x616f, + 0x616e, 0x617a, 0x6170, 0x6164, 0x615e, 0x616c, 0xc9c9, 0x615b, + 0x6161, 0x6165, 0x627f, 0x6280, 0x627c, 0x62a7, 0x62a6, 0x62a1, + 0x06c0, 0x62a8, 0x62a3, 0x62a2, 0x62ad, 0x62a5, 0x6301, 0x62ff, + 0x62fc, 0x6300, 0x6335, 0x63ee, 0x63ef, 0x63f6, 0x63e8, 0x63ea, + 0x63e3, 0x641f, 0x06fc, 0x63e4, 0x63fa, 0x63f1, 0x63fb, 0xc9d4, + 0x653d, 0x653c, 0x0079, 0x6578, 0x6577, 0x100b, + /* 0x4a */ + 0x66d1, 0x66c7, 0x66df, 0x66d0, 0x66e0, 0x66d6, 0x66d8, 0x6716, + 0x670e, 0x66d9, 0x670f, 0x6711, 0x66cd, 0x6689, 0x66ce, 0x6714, + 0x66da, 0x6712, 0x66d3, 0x66c2, 0x66e1, 0x66e9, 0x66ea, 0x66de, + 0x6715, 0x69d9, 0x69d6, 0x69cd, 0x69d0, 0x69d3, 0xc9f0, 0x6a82, + 0x6a85, 0x6a7f, 0x6a7d, 0x6a81, 0x6a83, 0x6a84, 0xada0, 0x6b28, + 0x6b0f, 0x6b17, 0x6b1a, 0x6b25, 0xc9f7, 0x6b9b, 0x6b99, 0x6c92, + 0x6c8c, 0x6c95, 0x6c8d, 0x6ca3, 0x6c93, 0x6c91, 0x6edb, 0x6e99, + 0x6e9a, 0x6f08, 0x6f4c, 0x6f0d, 0x6f01, 0x6f4e, 0x6f02, 0x6f4d, + 0x6f21, 0x6efc, 0xca09, 0x6e8a, 0xca08, 0x6e95, 0x6f11, 0x6f12, + 0x6f46, 0x6f1c, 0x6f49, 0x6f0c, 0x091e, 0x6f13, 0x6f16, 0x6efd, + 0x6f0f, 0x6f1f, 0x7230, 0x726e, 0x726b, 0x729b, 0x727b, 0x7263, + 0x7297, 0x726d, 0x729c, 0x7298, 0x726f, 0x7267, + /* 0x4b */ + 0x7269, 0x7515, 0x7563, 0x7586, 0x758a, 0x7587, 0x7588, 0x7585, + 0x7589, 0x75ca, 0x75c7, 0x75cb, 0x75cc, 0x75c9, 0x760d, 0x7683, + 0x7684, 0x7678, 0x7682, 0x7673, 0x7679, 0x768c, 0x77d0, 0x77cf, + 0x77d2, 0x77d9, 0x77cc, 0x77eb, 0x77fd, 0x77ec, 0x77e8, 0x77f8, + 0x77fa, 0xca27, 0x0a85, 0x77e1, 0x77fb, 0x78e7, 0xca2e, 0x79a5, + 0x7991, 0x79a6, 0x797c, 0x7992, 0x79a2, 0x79a0, 0x7afc, 0x7afe, + 0x7b57, 0x7b53, 0x7b58, 0x7be7, 0x7c8e, 0xca38, 0x7c83, 0x7c8b, + 0x7c84, 0x0b97, 0x7da2, 0x7db7, 0x7da9, 0x7da5, 0x7d9f, 0x7daa, + 0x7d97, 0x7da1, 0x7d9e, 0x7dab, 0x7d99, 0x7da3, 0x7f30, 0x7f32, + 0x7f2f, 0x7f70, 0x7f6c, 0x7f6f, 0x7fe8, 0x7fee, 0x7fea, 0x806d, + 0x8076, 0x8070, 0x8071, 0x806c, 0x81eb, 0x81b5, 0x8196, 0x8190, + 0x818d, 0xca49, 0x81a2, 0x81b0, 0x8192, 0x81a0, + /* 0x4c */ + 0x8193, 0x81c3, 0x818e, 0x81b6, 0x819d, 0x8195, 0x81b3, 0x81a4, + 0x8370, 0x83d4, 0x0c93, 0x83cf, 0x3470, 0x8494, 0x2561, 0x84c0, + 0x84b4, 0x84c1, 0x0cb2, 0x84bd, 0x84af, 0x8677, 0x8678, 0x866b, + 0x866d, 0x866e, 0x8672, 0x866f, 0x8671, 0x62ab, 0x868c, 0x873f, + 0x87b6, 0x87b7, 0x2606, 0x87bb, 0x87b8, 0x3a9c, 0x87b9, 0x2601, + 0x898b, 0x897a, 0x8984, 0x8988, 0x8991, 0x8979, 0x898e, 0x8980, + 0x8982, 0x897c, 0x0da4, 0x8a84, 0x8a7f, 0x0df2, 0x8b3b, 0x8b71, + 0x8b3d, 0x8b30, 0x0df1, 0x8b3e, 0x8b38, 0x8c5e, 0x8c64, 0x0e81, + 0x8c5d, 0x8c6d, 0x8c4f, 0x8c62, 0x8c5f, 0x8dec, 0x8df2, 0x8df4, + 0x8df7, 0x8df6, 0x8e07, 0x8ded, 0x8dea, 0x8df0, 0x8df8, 0x8df3, + 0x0edc, 0xca72, 0x8f31, 0x8f2f, 0x8fb6, 0x8fae, 0x8faa, 0x8fbf, + 0x8fcc, 0x8fc7, 0x9983, 0x9080, 0x907b, 0x907f, + /* 0x4d */ + 0x907d, 0x9083, 0xca78, 0x9146, 0x912d, 0x9125, 0x9126, 0x912c, + 0x9137, 0x9131, 0x9133, 0x9132, 0x9127, 0x912a, 0x912e, 0x912f, + 0x91c0, 0x9271, 0x9261, 0x9262, 0x9266, 0x9318, 0x93c5, 0x93c3, + 0x93c4, 0x93c2, 0x93ae, 0x9410, 0x9408, 0x941f, 0x943a, 0x943b, + 0x9436, 0x940c, 0x9406, 0x942a, 0x9457, 0x9450, 0x9420, 0xca85, + 0x942c, 0x9421, 0x940b, 0x9419, 0x9435, 0x9418, 0x940f, 0x9413, + 0x9455, 0x9439, 0x941a, 0x100c, 0x9417, 0x95e4, 0x95e9, 0x758b, + 0x9610, 0x9612, 0x963f, 0x966e, 0x7518, 0xca8c, 0x96d6, 0x96d5, + 0x96d7, 0x3e02, 0x106d, 0x9731, 0x9730, 0x973a, 0x9885, 0x986b, + 0x9948, 0x994b, 0x9937, 0x997b, 0x996c, 0x9985, 0x9965, 0x9936, + 0x9986, 0x9934, 0x9968, 0x995a, 0x9958, 0x9972, 0x996a, 0x98d3, + 0x993c, 0x9933, 0x993b, 0x994d, 0x994f, 0x997c, + /* 0x4e */ + 0x99b0, 0x995b, 0x9955, 0x9964, 0x996b, 0x9953, 0x10e6, 0x9957, + 0x995e, 0x996d, 0x9935, 0x9969, 0x9959, 0x9966, 0x9950, 0x9951, + 0x995c, 0x9a5d, 0x9987, 0x9978, 0x9949, 0x994e, 0x98f1, 0x9973, + 0x9988, 0x98cf, 0xcaa4, 0x9cb1, 0x9cb3, 0x9d9c, 0x9da4, 0x9d90, + 0x9db8, 0x9da0, 0x9d9d, 0x9da8, 0x9da9, 0xcab9, 0x9db1, 0x9d93, + 0x9d9b, 0x9da2, 0x9da1, 0x9db0, 0x9da7, 0x9fb3, 0x2b49, 0x9fb4, + 0x9ff1, 0x9fed, 0x9fec, 0xa068, 0xa075, 0xa06a, 0xa062, 0xa067, + 0xa060, 0xa077, 0xa05f, 0xa079, 0xa223, 0xa221, 0xa21c, 0x2c99, + 0xa21f, 0xa21e, 0xa2d6, 0xa2d3, 0xa2d9, 0xa2d7, 0xa2d4, 0xa2dc, + 0xa2d8, 0xa3a3, 0x12d1, 0xa3be, 0xa3a9, 0xa3a1, 0xa3a0, 0xa3ab, + 0xa3a2, 0xa3ba, 0xa3c2, 0xa39c, 0xa3bb, 0xa3aa, 0xa3ac, 0xa3a5, + 0xa3c1, 0x132c, 0xa5e2, 0xa636, 0xa63d, 0xa63a, + /* 0x4f */ + 0x5661, 0xa648, 0xa63c, 0xa6b7, 0xa6ac, 0xa6b3, 0xa6b6, 0xa6b2, + 0x136e, 0xa75d, 0xa749, 0xa74e, 0xa74f, 0xa74d, 0xa75c, 0xa85d, + 0xa8bb, 0xa8ce, 0xa8bf, 0xa8ba, 0xa8c3, 0x13e5, 0xaa06, 0xa9f8, + 0xa9fe, 0xaa13, 0xa9f6, 0x13e6, 0xab34, 0xab2d, 0xab2a, 0xab35, + 0xab2c, 0xabd4, 0xabda, 0xabd3, 0xabd2, 0xabce, 0xabcf, 0x149f, + 0xadfd, 0xae0b, 0xadfe, 0xadf8, 0xadf7, 0xae17, 0xadfa, 0xadf9, + 0xae00, 0xadf5, 0xadf1, 0xae03, 0xae05, 0xae1c, 0xafac, 0xaf9a, + 0xafad, 0xafa0, 0xb01b, 0xb025, 0xb024, 0xb026, 0xb027, 0xb028, + 0xb02a, 0xb01a, 0xb02e, 0xb015, 0xb115, 0xb114, 0xb117, 0xb118, + 0xb10f, 0xb113, 0xb10b, 0xb122, 0x457a, 0xb226, 0x301f, 0xb251, + 0xb24d, 0xb24e, 0xb24a, 0xb24b, 0xb24c, 0xb250, 0xb262, 0xb24f, + 0xb252, 0xb368, 0xb369, 0xb3e5, 0xb3f0, 0xb3e1, + /* 0x50 */ + 0xb3e2, 0xcaf2, 0xb5a5, 0xb5a9, 0xb5a4, 0xb5af, 0xb5ac, 0xb5ae, + 0xb5aa, 0xb695, 0xb699, 0xb693, 0xb69d, 0xb698, 0xb69c, 0xb697, + 0x160d, 0xb789, 0xb787, 0xb8d7, 0xb8ed, 0xb8f1, 0xb8f0, 0xb905, + 0xb903, 0xb904, 0xb95f, 0xbb57, 0xbc9c, 0xbca1, 0xbc9a, 0xbd8f, + 0xbd93, 0xbd9e, 0xbda3, 0xbd98, 0xbd99, 0xbd95, 0xbe6e, 0xbe6a, + 0xbff4, 0xbff7, 0xc179, 0xc38f, 0xc391, 0xc40b, 0xc802, 0x3384, + 0x3404, 0x3480, 0x362f, 0x363f, 0x363b, 0x3662, 0x3644, 0x3633, + 0x365f, 0x362b, 0xc909, 0x3639, 0x3636, 0x3648, 0x3635, 0x366c, + 0x3658, 0x363a, 0x37a8, 0x37f4, 0x3829, 0x389a, 0x3900, 0x3abb, + 0x3abd, 0x3ab7, 0x3ab2, 0x00f8, 0x3aa8, 0x3aab, 0x3aa6, 0x3abc, + 0x3b97, 0x3b96, 0x3bf8, 0x1913, 0x3c51, 0x0133, 0x3cb5, 0x3cb4, + 0x3cb6, 0x013c, 0x3cb7, 0x3d05, 0x3d23, 0x3d95, + /* 0x51 */ + 0x3d98, 0x014f, 0x3d94, 0x3d93, 0x3e07, 0x3e73, 0x3e71, 0x3e72, + 0x3e78, 0x415f, 0x416a, 0x4167, 0x416b, 0x4169, 0x418e, 0x4149, + 0x4180, 0x01dc, 0x4144, 0x418f, 0x4145, 0xc94c, 0x414f, 0x4163, + 0x4136, 0x4148, 0x415c, 0x4193, 0x4161, 0x4160, 0x414e, 0x415e, + 0x413f, 0x41a4, 0x1ae0, 0x4168, 0x440b, 0x4411, 0x440d, 0x440e, + 0x45c2, 0xc957, 0x45b0, 0x45c3, 0x45c8, 0x4565, 0x45d7, 0x45bd, + 0x45b8, 0x45b6, 0x45c7, 0x45bc, 0x45b1, 0x45af, 0xc95b, 0x4735, + 0x4730, 0x475d, 0x3e76, 0x476f, 0x47b0, 0xc95e, 0x47b4, 0x485c, + 0x485d, 0x4a08, 0x49ee, 0x4a0b, 0x49f2, 0x49fd, 0x49f1, 0x4a10, + 0xc968, 0x4a14, 0x4b8b, 0x4b8c, 0x4b85, 0x4c7a, 0x4c6c, 0x4c60, + 0x4c67, 0x4c66, 0x4c6a, 0x4c5f, 0x4c6d, 0x4c68, 0x4c64, 0x4d3a, + 0x4d3b, 0x4d39, 0x4e02, 0x4e04, 0x4e03, 0x4eb4, + /* 0x52 */ + 0x4eb3, 0x4ebb, 0x4eac, 0x4eb6, 0x4eb1, 0x4eaf, 0x4eb5, 0x4ebe, + 0x4eb2, 0x4f24, 0x50b6, 0x50b9, 0x50ac, 0x50b0, 0x50d7, 0x50bb, + 0x50fe, 0x50cb, 0xc97f, 0x03f5, 0x50b3, 0x50be, 0x50cd, 0x50bc, + 0x50ba, 0x50c7, 0x5316, 0x531b, 0x5317, 0x5315, 0x539f, 0xc98e, + 0x5482, 0x5483, 0x548e, 0x546a, 0x5489, 0x5494, 0x5486, 0x5490, + 0x5562, 0x5590, 0x560c, 0x560f, 0x04c3, 0x56a5, 0x56a7, 0x56a6, + 0x56a4, 0x5735, 0x5738, 0x5736, 0x5743, 0x5747, 0x5737, 0x5943, + 0x59a2, 0x5951, 0x5972, 0x596d, 0x592f, 0x5954, 0x596e, 0x5955, + 0x5937, 0x594f, 0x5950, 0x1f39, 0x599e, 0xc9a8, 0x59b3, 0x59a7, + 0x0571, 0x59f9, 0x5991, 0xc9a7, 0x59b6, 0x59dd, 0x5999, 0x5bdf, + 0x5bd5, 0x77f5, 0x5e28, 0x5e40, 0x5e71, 0x5e98, 0x5e95, 0x5e65, + 0x5e78, 0x5e7f, 0x5e60, 0x5e7c, 0x5e96, 0x5e6a, + /* 0x53 */ + 0x5e79, 0x5e73, 0x5e72, 0x5e7b, 0x5e70, 0x60d5, 0x60d7, 0x618f, + 0x6189, 0x619e, 0x6187, 0x61a0, 0x618d, 0x6188, 0x617f, 0x618c, + 0x6193, 0x6259, 0xbcb0, 0x62b1, 0x81f4, 0x62af, 0x62b2, 0x6308, + 0x630a, 0x6336, 0x6337, 0xc9cf, 0x0701, 0x6436, 0x6429, 0x644a, + 0x6426, 0x6428, 0x6424, 0x642a, 0x6448, 0x6544, 0x6584, 0x658c, + 0x66c4, 0x66dc, 0x6787, 0x6753, 0x677f, 0x6731, 0x6751, 0x674b, + 0x6752, 0x6780, 0x67a5, 0x6781, 0x6743, 0x6734, 0x6736, 0x6732, + 0x6748, 0x6749, 0x673c, 0x674d, 0x674a, 0xc9e6, 0x678a, 0x6746, + 0x673e, 0x6783, 0x6750, 0x67b4, 0x69f0, 0x69e4, 0x69e3, 0x69e5, + 0x69e6, 0x69e7, 0x69e1, 0x69ef, 0x69e8, 0x69dd, 0x6a03, 0x6a88, + 0x6b26, 0x6b16, 0x6b3b, 0x6b2f, 0x6b39, 0x6b34, 0xc9f4, 0x6b35, + 0x6b31, 0x6b38, 0x3e81, 0x6baa, 0x6ba3, 0x6ba4, + /* 0x54 */ + 0x6ba0, 0x6ba1, 0x6ba9, 0x6ba5, 0x6caf, 0x6cb1, 0x6cab, 0x6cae, + 0x6cb0, 0x6cb3, 0x6cac, 0x6ca9, 0x6cb2, 0x6ca8, 0x6cb4, 0x6cc2, + 0x6d4f, 0x6d66, 0x6f1e, 0x6f15, 0x6f10, 0x6f7f, 0x6f7e, 0x6f60, + 0x6fcc, 0x6fb2, 0x6f62, 0x6f8d, 0x6f8e, 0x6f77, 0x6f7c, 0x6f8f, + 0x6f5d, 0x6f6d, 0x6f63, 0x6faf, 0x6f90, 0x6f7d, 0x6f7a, 0x6f06, + 0xca0b, 0x6f68, 0x6fb4, 0x6f78, 0x6fb1, 0x22d7, 0xca0c, 0x0941, + 0x72e8, 0x72e9, 0x72c0, 0x09d7, 0x72ea, 0x72b7, 0x72ba, 0x72b5, + 0xca1d, 0x72b4, 0x72bc, 0x72c6, 0x72b8, 0x72bd, 0x72c2, 0x734d, + 0x72f0, 0x72c7, 0x72c1, 0x72c3, 0x72f1, 0x72ec, 0x09e2, 0x751c, + 0x7520, 0x7558, 0x7565, 0x7564, 0x758c, 0x758d, 0x75d9, 0x75e0, + 0x7610, 0x7694, 0x7692, 0x7696, 0x7695, 0x76bf, 0x76a0, 0x0a45, + 0x77f4, 0x77f6, 0x77dc, 0x243d, 0x7816, 0x7815, + /* 0x55 */ + 0x781c, 0x780f, 0x782c, 0x7814, 0x7825, 0x7817, 0x7812, 0x781e, + 0x7980, 0x79a8, 0x79af, 0x79d6, 0x79e2, 0x79b4, 0x79b3, 0x79b0, + 0x79b2, 0x79a1, 0x7b60, 0x7b66, 0x7b61, 0x7b4e, 0x7b5d, 0x7b63, + 0x7be6, 0x7bef, 0x7bec, 0x7c98, 0x7ca7, 0x7c94, 0x7c95, 0x7c91, + 0x7c9d, 0x7c99, 0x7c9b, 0x7c9c, 0x7d1d, 0x7d1c, 0x7dd0, 0x7de0, + 0x7dcb, 0x7ddb, 0x7dda, 0x7dc2, 0x7dd3, 0x7de5, 0x7f7d, 0x7f7b, + 0x7fff, 0x0bf2, 0x7ff9, 0x8077, 0x807c, 0x8078, 0x807b, 0x807a, + 0x81d2, 0x81cb, 0x81c9, 0x81ce, 0x81e4, 0x81ca, 0x81d0, 0x61a5, + 0x0c49, 0x81d9, 0x81ee, 0x81dd, 0x8200, 0x81e1, 0x83de, 0x83e2, + 0x83da, 0x84ce, 0xca4f, 0x84cf, 0x84da, 0x84d1, 0x84d4, 0x84ed, + 0x84cb, 0x84d5, 0x84f1, 0x869c, 0x8688, 0x8741, 0x87d0, 0x87f7, + 0x87cf, 0x87d1, 0x87db, 0x87de, 0x87f8, 0x87dc, + /* 0x56 */ + 0x87d9, 0x89a0, 0x89b2, 0x89a1, 0x89aa, 0x89a9, 0x0da9, 0x89a6, + 0x899c, 0x89b5, 0x89a7, 0x8a8e, 0x8a90, 0x8a91, 0x8b85, 0x8b5b, + 0x8b70, 0x8b64, 0x8b67, 0x8b63, 0x8b77, 0x8b68, 0x8b65, 0x8b6a, + 0x8b78, 0x8b66, 0x8c88, 0x8c9e, 0x8c74, 0x8c7a, 0x8c79, 0x8c8b, + 0x8c7f, 0x8e13, 0x8e1e, 0x8e17, 0x8e1a, 0x8e22, 0x8e43, 0x8e19, + 0x8e1f, 0x8e27, 0x8e12, 0x8e24, 0x8e25, 0x365e, 0x8f35, 0x8f34, + 0x8fd1, 0x8fc4, 0x8fca, 0x8fc6, 0x8fcb, 0x8fcd, 0x8fe2, 0x9089, + 0x908b, 0x9086, 0x9088, 0x908d, 0x913b, 0x913c, 0x913d, 0x91f5, + 0x9279, 0x9275, 0x9282, 0x927f, 0x9285, 0x9276, 0x927c, 0x927e, + 0x927b, 0x9280, 0x927a, 0x5748, 0x0fcb, 0x931d, 0x93f6, 0x93f7, + 0x93f9, 0x9463, 0x946c, 0x946e, 0x9414, 0x100d, 0x9467, 0x946f, + 0x9469, 0x9476, 0x9495, 0x9471, 0x9461, 0x9478, + /* 0x57 */ + 0x946b, 0x9485, 0x9484, 0x9614, 0x9676, 0x89b6, 0x9675, 0x9674, + 0x96e2, 0x973f, 0x9744, 0x973d, 0x9747, 0x9748, 0x97db, 0x97dc, + 0x97dd, 0x98e5, 0x98e6, 0x99c2, 0x9a2e, 0x9a1d, 0x99f8, 0x99f0, + 0x99f6, 0x99c5, 0x99c6, 0x99fc, 0x9a52, 0x9a2f, 0x9a10, 0x99f3, + 0x99d2, 0x99ea, 0x99dc, 0x9a1b, 0x99fb, 0x99c3, 0x9a16, 0x9a07, + 0x99c9, 0x99d8, 0x9a30, 0x9a13, 0x9a31, 0x99fa, 0x99f2, 0x9ae3, + 0x99d5, 0x9a01, 0x99f1, 0x9a1c, 0x99d6, 0x9a08, 0x9a0b, 0x9a17, + 0x9a20, 0x99ca, 0x9a32, 0x9a05, 0x99e4, 0x99ce, 0x9a33, 0x9a02, + 0x9a19, 0x9a1e, 0x99d3, 0x99f7, 0x99e8, 0x9a1f, 0x99f4, 0x9ad8, + 0x9cbf, 0x9cbe, 0x9cbd, 0x9ddc, 0x9ddd, 0x9dab, 0x9dc9, 0x9dc8, + 0x9ddf, 0x9dd9, 0x9ddb, 0x9dcc, 0x9de0, 0x9def, 0x9df3, 0x9dae, + 0x9e01, 0x9fb7, 0x9fb9, 0x9fb6, 0x9fb8, 0x9ff6, + /* 0x58 */ + 0x9ff3, 0x9ff5, 0x9ff2, 0xa091, 0xa09d, 0xa09b, 0xa092, 0xa08d, + 0xa09e, 0xa08c, 0x1231, 0xcac7, 0xa095, 0xcac6, 0xa08a, 0xa08e, + 0xa09c, 0xa1ef, 0xa22d, 0xa252, 0xa235, 0xa228, 0xa22e, 0xa2e5, + 0xa3ea, 0xa3f1, 0xa3eb, 0xa3d8, 0xa3d0, 0xa3f3, 0xa3db, 0xa3ce, + 0x12d5, 0xa3da, 0xa3d7, 0xa3e1, 0xa3f2, 0xa3c8, 0xa3d9, 0xa3de, + 0xa3d1, 0xa3e7, 0xa3cf, 0xa5b7, 0xa647, 0xa642, 0xa643, 0xcad3, + 0xa6c3, 0xa6c1, 0xa6c7, 0xa764, 0xa76a, 0xa766, 0xa750, 0xa76e, + 0xa765, 0x69ec, 0xa77f, 0xcad5, 0xa79a, 0xa769, 0xa772, 0xa76f, + 0xa77d, 0xa770, 0xa860, 0xa8c2, 0xa8e7, 0xa8d1, 0xa8eb, 0xa8d4, + 0xa8dc, 0xa8db, 0xaa37, 0xaa25, 0xaa1f, 0xaa1e, 0xaa21, 0xaa1b, + 0xaa17, 0xaa22, 0xaa2a, 0xaa1a, 0xaa2d, 0xaa23, 0xaa26, 0xaa36, + 0xa9ff, 0xab3a, 0xab40, 0xab42, 0xab38, 0xab3b, + /* 0x59 */ + 0xab3c, 0xab43, 0xabe8, 0x1456, 0xabf9, 0xabeb, 0xabf1, 0xabe9, + 0xabec, 0xad15, 0xad47, 0xad46, 0xad45, 0xae24, 0xae56, 0xae21, + 0xae27, 0xae4d, 0xae31, 0xae1e, 0xae2c, 0xae4f, 0xae2b, 0xae53, + 0xae51, 0xae54, 0xae29, 0xae50, 0xae1f, 0xae32, 0xae2a, 0xae1d, + 0xae28, 0xae2e, 0xae2d, 0xafbc, 0xafbb, 0xafbd, 0xcae4, 0xb047, + 0xb041, 0xcae5, 0xb049, 0x14f4, 0xb12e, 0xb127, 0xb26a, 0xb27b, + 0xb273, 0xb275, 0xb269, 0xb279, 0xb272, 0xb376, 0xb377, 0xb374, + 0xb373, 0xb402, 0xb3fe, 0xb401, 0xb3f9, 0xb3f4, 0xb5d3, 0xb5d5, + 0xb5d8, 0xb5c3, 0xb5ca, 0xb5d0, 0xb5cb, 0xb5ce, 0xb5c5, 0xb5e6, + 0xb5c4, 0xb5c0, 0xb5d4, 0xb5e8, 0xb676, 0xb6a2, 0xb6ae, 0xb6a8, + 0xb6a3, 0xb6a7, 0xb696, 0xb6a9, 0xb6a5, 0xb6af, 0xb6a4, 0xb6ab, + 0xb6aa, 0xb6a6, 0xb6a0, 0xb798, 0xb8db, 0xb8f6, + /* 0x5a */ + 0xb8f5, 0xb90c, 0xb90a, 0x3175, 0xb968, 0xb963, 0xb966, 0x1658, + 0xb964, 0xb96a, 0xb969, 0xba95, 0xbb02, 0xbb6a, 0xbb5e, 0xbb68, + 0xbb69, 0xbb65, 0xcafe, 0xbca7, 0xbcae, 0xbca8, 0xbcb3, 0xbd9c, + 0xbda9, 0xbdb6, 0xbdb3, 0xbdb2, 0xcb03, 0xbdb8, 0xbdc0, 0xbdbf, + 0xbdba, 0xbda8, 0xbe3c, 0xbe72, 0xbe71, 0xbe75, 0xbe73, 0xbf17, + 0xbf15, 0xbf16, 0xbf1b, 0xbffa, 0xbff9, 0xc12c, 0xc185, 0xc182, + 0xc17f, 0xc17d, 0xc188, 0x72f3, 0xc24e, 0xc250, 0xc393, 0xc397, + 0xc398, 0xc39b, 0xc39c, 0xc396, 0xc58b, 0xc5fd, 0xc5fc, 0xcb17, + 0x6a8b, 0x3408, 0x3407, 0x3673, 0x36a2, 0x36af, 0x3682, 0x367b, + 0x3674, 0x36b0, 0x3676, 0x36b9, 0x369e, 0x36b1, 0x36a1, 0x36b2, + 0x366e, 0xc90b, 0x0087, 0x3678, 0x367a, 0x3683, 0x369a, 0x37f8, + 0x3831, 0x3869, 0x3868, 0x389c, 0x3904, 0x3999, + /* 0x5b */ + 0x3ac7, 0x3ac6, 0x3adc, 0x3ac4, 0x3ad8, 0x3ad4, 0x3adf, 0x3ad1, + 0x3ad0, 0x3ad6, 0x3acf, 0x3bad, 0x3baf, 0x3ba7, 0x3bfd, 0x3c5b, + 0x3c5a, 0x3d07, 0x3d9d, 0x3d9b, 0x3dab, 0x3da4, 0x3d9c, 0x3d9e, + 0x3da5, 0x3daa, 0x3da6, 0x3e0e, 0x3e7e, 0x3e7c, 0x41ee, 0x41d5, + 0x41e9, 0x4142, 0x41e2, 0x4223, 0x41d9, 0x41d4, 0x41e3, 0x4215, + 0x41ef, 0x41f0, 0x41d6, 0x41dd, 0x41f6, 0x421c, 0x41d8, 0x41db, + 0x41da, 0x41ed, 0x4611, 0x4415, 0x4418, 0x441a, 0x441f, 0x4416, + 0xc94d, 0x4419, 0xc94b, 0x45f0, 0x4609, 0x461b, 0xa5e7, 0x45f6, + 0x45f4, 0x45b5, 0x4610, 0x45f2, 0x4615, 0x45f3, 0x45f8, 0x4739, + 0x473b, 0x4736, 0x460e, 0x4772, 0x4774, 0x47b9, 0x47b7, 0x47b8, + 0x4872, 0x486b, 0x4a1d, 0x4a37, 0x4a22, 0x4a43, 0x4a4d, 0x4a38, + 0x4a5b, 0x4a79, 0x4a1b, 0x49f3, 0x4b91, 0x4c7b, + /* 0x5c */ + 0x4c94, 0xc96f, 0x4c96, 0x4c7f, 0x4c8f, 0x4c84, 0x4c7c, 0x4c8e, + 0x4c90, 0x4c98, 0x4c83, 0x4c80, 0x4c93, 0x4c82, 0x32fd, 0x4d3d, + 0x4d41, 0x4da1, 0x4d9f, 0x4e0a, 0x4e0d, 0x4ec8, 0x4ec9, 0x4ec7, + 0x4ecd, 0x4f25, 0x50b1, 0x50dc, 0xc980, 0x50e5, 0x50f4, 0x50bf, + 0x50db, 0x50ea, 0x50f2, 0x03fa, 0x50f1, 0x50ed, 0x50e6, 0x5202, + 0xc982, 0x5325, 0x5318, 0x531f, 0x5320, 0x53cf, 0x549d, 0x5499, + 0x54a8, 0x5568, 0x5566, 0x5567, 0x5591, 0x5613, 0x5615, 0x561d, + 0x5616, 0x5619, 0x566b, 0x5668, 0x566a, 0x566d, 0x5669, 0x56aa, + 0x5757, 0x5752, 0x5750, 0x575f, 0x5767, 0x574f, 0x04f2, 0x575b, + 0x575c, 0x575d, 0x5a1f, 0x599d, 0x59b1, 0x59b0, 0x5994, 0x59c3, + 0x59af, 0x59a8, 0x59dc, 0x5998, 0x59c4, 0x59a4, 0x59ab, 0x59aa, + 0x59a5, 0x5a21, 0x59eb, 0x59e6, 0x59f7, 0x59f8, + /* 0x5d */ + 0x59fc, 0x59fa, 0x59e0, 0xc9aa, 0x59f6, 0xc9a9, 0x59e1, 0x5bec, + 0x5be2, 0x5be4, 0x5bf9, 0x5e6f, 0x6b4c, 0x5ebb, 0x5ee1, 0x5f00, + 0x5ed8, 0x062f, 0x5ed6, 0x5ee2, 0x5ec3, 0x5eb3, 0x5ed2, 0xc9c1, + 0x5ece, 0x5ed0, 0x5ed5, 0x5eb9, 0x5eba, 0x5ecf, 0x5ebd, 0x60db, + 0x61aa, 0x61ad, 0x61b8, 0x61b6, 0x61b5, 0x61af, 0x61b4, 0x61b7, + 0x61a8, 0x61b9, 0x61be, 0x6282, 0x62bc, 0x62b8, 0x62b6, 0x62b9, + 0x06c1, 0x6310, 0x6427, 0x6469, 0x6470, 0x6456, 0x646b, 0x647a, + 0x646c, 0x646d, 0xc9d5, 0x94c1, 0x658d, 0x6590, 0x67b6, 0x6810, + 0x6812, 0x67ba, 0x67bd, 0x6805, 0x67c2, 0x6807, 0x67f5, 0xc9e9, + 0x67af, 0x67f4, 0x67f7, 0x67f8, 0x6811, 0x69f6, 0x69f5, 0x69fb, + 0x6a01, 0x6a00, 0x6a02, 0x69fe, 0x69fa, 0x69fd, 0x0840, 0x6b37, + 0x6b49, 0x6b4b, 0x6b46, 0x6b47, 0x6bb3, 0x6bb2, + /* 0x5e */ + 0x6bb0, 0x6bb7, 0x6c11, 0x6ccc, 0x6cdf, 0x6cd3, 0x6cd5, 0x6cdb, + 0x6cc5, 0x6cc8, 0x6cc9, 0x6ce2, 0x6cca, 0x6cd1, 0x6cd2, 0x6cdd, + 0x6f6c, 0x6f73, 0x7021, 0x6ff0, 0x701f, 0x703b, 0x7022, 0x7023, + 0x6fe8, 0x6fdd, 0x093f, 0x701b, 0x6fed, 0xca0e, 0x6ff2, 0x0946, + 0x6fdc, 0x6fe9, 0x701d, 0x6fda, 0x6fe6, 0x7313, 0x7315, 0x7316, + 0x733c, 0x730b, 0x731c, 0x733a, 0x733d, 0x739a, 0x731d, 0x7309, + 0x7308, 0x733b, 0x7522, 0x7526, 0x7525, 0x7524, 0x369b, 0x758f, + 0x7590, 0x75e6, 0x75e3, 0x75e5, 0x7611, 0xca25, 0x76ae, 0x76be, + 0x76b4, 0x76b3, 0x76af, 0x7691, 0x76c2, 0x76b6, 0x76b2, 0x7857, + 0x783b, 0x7858, 0x7851, 0x7841, 0x7839, 0x0a8f, 0x7859, 0x7845, + 0x7861, 0x78e8, 0x79fa, 0x79ea, 0x79ef, 0x79f2, 0x79f0, 0x7b08, + 0x7b70, 0x7b6a, 0x7b73, 0x7b68, 0x7bc8, 0x7bf2, + /* 0x5f */ + 0x3e7b, 0x7cae, 0x7cab, 0x7cb5, 0x7caf, 0x7cb2, 0x7cb6, 0x7cb0, + 0x7d1e, 0x7e03, 0x7e06, 0x7e1f, 0x0bac, 0x7e0f, 0x7e02, 0x7e19, + 0x7e18, 0x7e22, 0x7e15, 0x7e07, 0x7e0d, 0x7e24, 0x7e0c, 0x7e1e, + 0x7f89, 0x7f8a, 0x800a, 0x800b, 0x8007, 0x8004, 0x8009, 0x8084, + 0x8083, 0x8218, 0x8214, 0x8205, 0x8216, 0x820e, 0x8211, 0x8208, + 0x820b, 0x8215, 0x8085, 0x8237, 0x822a, 0x820d, 0x820f, 0x837e, + 0x8376, 0x8377, 0x83ec, 0x84fc, 0x8508, 0x84ff, 0x8503, 0x8510, + 0x8505, 0x8506, 0x84fa, 0x86c7, 0x86c0, 0x86c3, 0x86a7, 0x86a8, + 0x86ab, 0x86c1, 0x86aa, 0x86c8, 0x8743, 0x8802, 0x880e, 0x8801, + 0x87fe, 0x8803, 0x0d68, 0x8822, 0x8821, 0x8807, 0x8808, 0x880c, + 0x89ca, 0x89bc, 0x89be, 0x89bd, 0xca5c, 0x89bb, 0x89b9, 0x0dab, + 0x89c5, 0x8a99, 0x8b6b, 0x8b93, 0x8b94, 0x8ba9, + /* 0x60 */ + 0x8ba0, 0x8ba6, 0xca61, 0x8bab, 0x8b9e, 0x8b9b, 0x8b91, 0x8b99, + 0x8cb6, 0x8cb8, 0x8c9a, 0x0e91, 0x8c98, 0x8c9b, 0x8cb3, 0x8ca2, + 0x54aa, 0x8ca0, 0x8c9f, 0x8e5b, 0x8e70, 0x8e54, 0x8e71, 0x8e65, + 0x8e51, 0x8e9d, 0x8e61, 0x8e5a, 0x8e74, 0x8e4c, 0x8e4b, 0x8e5e, + 0x8e58, 0x8e53, 0x8e52, 0x8f3b, 0x8f39, 0x8fd6, 0x8fe7, 0x8fd7, + 0x8fd8, 0x8fd9, 0x8fda, 0x8fdb, 0x8fdc, 0x8fe0, 0x8fe4, 0x8fdd, + 0x8ff5, 0x8ff1, 0x9098, 0x909d, 0x9099, 0x9150, 0x9149, 0x27e4, + 0x9162, 0x91d7, 0x9201, 0x91f7, 0xca7d, 0x928c, 0x929c, 0x2888, + 0x931f, 0x931e, 0x943d, 0x943f, 0x9411, 0x9459, 0x943e, 0x9458, + 0x9500, 0x949e, 0x94b6, 0x94aa, 0x94af, 0x94ac, 0x1030, 0x94c0, + 0x94a9, 0x3e10, 0x95ee, 0x9677, 0x9679, 0x967a, 0x967d, 0x967f, + 0x9683, 0x9678, 0x967e, 0x96e4, 0x96e6, 0x96e5, + /* 0x61 */ + 0x105d, 0x974e, 0x9759, 0x1075, 0xca8e, 0x974f, 0x974a, 0x97e3, + 0x97de, 0x97e2, 0x9974, 0x99ac, 0x9961, 0x9962, 0x9976, 0x997a, + 0x9979, 0x9960, 0x9a64, 0x9b81, 0x9adf, 0x9a84, 0x9a8a, 0x9a92, + 0x9a79, 0x9ade, 0x9a98, 0x9a6c, 0x9ae1, 0xcaa5, 0x9a7c, 0x9a72, + 0x9a81, 0x9ae0, 0x9a65, 0x10ff, 0x9a6a, 0x9a97, 0x9aaa, 0x9ad3, + 0x9aab, 0x9a6e, 0x9aac, 0x9a76, 0x9a7b, 0x9aad, 0xcaa6, 0x9a94, + 0x9ad7, 0x9a70, 0x9ad5, 0x9af1, 0x9a7a, 0x9a68, 0x9a96, 0x110b, + 0x9a73, 0x9aae, 0x9add, 0x9ada, 0x9aaf, 0x9ab0, 0x9adb, 0x9a62, + 0x9af8, 0x9cc2, 0x9cc7, 0x9cc8, 0x9cc5, 0x9cc3, 0x9cc6, 0x9dde, + 0x11c8, 0x9e11, 0x9e15, 0x9e28, 0x9e21, 0x9e2d, 0x9e51, 0x9e2b, + 0x9e16, 0x9e24, 0x9e35, 0x9e1f, 0x9e12, 0x9e10, 0x9e80, 0x9e3b, + 0x9e29, 0x9e2a, 0x9e1b, 0x9e18, 0x9e20, 0x9e3f, + /* 0x62 */ + 0x9e1c, 0x9e26, 0x9e0b, 0x9fbe, 0x9fc4, 0x9fbd, 0x9ffa, 0x9ffb, + 0xa0b1, 0xa0b2, 0xa0b0, 0xa0b9, 0xa0a6, 0xa0bd, 0xa0b6, 0xa0b8, + 0xa0b4, 0xa0b3, 0xa0a7, 0xa0ae, 0xa0bc, 0xa1f2, 0xa1f3, 0xa1f4, + 0xa23b, 0xa240, 0xa246, 0xa2f0, 0xa2ee, 0xa2e8, 0xa2f1, 0xa2eb, + 0xa2ef, 0xa3fc, 0xa420, 0xa409, 0xa406, 0xa403, 0xcacf, 0xa419, + 0xa424, 0xa41b, 0xa41d, 0xa3fd, 0xa41e, 0xa3f4, 0xa401, 0xa408, + 0xa405, 0xa423, 0xa3ff, 0xa5ea, 0xa64d, 0xa64e, 0xa656, 0xa657, + 0xa651, 0xa655, 0xa654, 0xa6cb, 0xa6d4, 0xa6d1, 0xa6cf, 0xa6d2, + 0xa6ca, 0xa6d6, 0xa78b, 0xa788, 0xa785, 0xa789, 0x4c9b, 0xa7bb, + 0xa78c, 0x1374, 0xa799, 0xa78a, 0xa8ec, 0xa8ef, 0xa8f9, 0xa909, + 0xa8f8, 0xa8f3, 0xa900, 0xa91d, 0x13ac, 0xa8fd, 0xaa48, 0xaa5c, + 0xaa55, 0xaa5e, 0xaa49, 0xaa63, 0xaa60, 0xaa53, + /* 0x63 */ + 0xaa62, 0xaa40, 0xab49, 0xab4a, 0xab4c, 0xab4d, 0xac0a, 0xac06, + 0xac2f, 0xac21, 0xac07, 0xac09, 0xac02, 0xac16, 0xac03, 0xac0b, + 0xac0f, 0xae60, 0xae68, 0xae5e, 0xae5d, 0xae63, 0xae5f, 0xae64, + 0xae78, 0xae61, 0xae69, 0xae65, 0xafda, 0xafe6, 0xafdb, 0xafdc, + 0xb039, 0xb057, 0xb055, 0xb065, 0xb061, 0xb054, 0xb145, 0xb141, + 0xb13e, 0xb137, 0xb212, 0xb213, 0xb22c, 0xb296, 0xcae9, 0xb29c, + 0xb29d, 0xb285, 0xcae8, 0xb29f, 0xb2a3, 0xb382, 0xb383, 0xcaee, + 0xb41d, 0xb414, 0xb41f, 0xb420, 0xb547, 0xb580, 0xb5c9, 0xb5f9, + 0xb606, 0xb5f0, 0xb5f8, 0xb5ef, 0xb5fd, 0xb5f1, 0xb5fe, 0xb6b8, + 0xb6c0, 0xb6c3, 0xb6b5, 0xb6b6, 0xb6c9, 0xcaf3, 0xb6bd, 0xb6ba, + 0xb6bf, 0xb6b3, 0xb6c6, 0xb6b2, 0xb6bc, 0xb6b7, 0xb6b9, 0xb6c8, + 0xb7b5, 0xb7b3, 0x1616, 0xb7ac, 0xb7a9, 0xb7ad, + /* 0x64 */ + 0xb911, 0xb90d, 0xb916, 0xb989, 0xb97c, 0xb98b, 0xb97b, 0xb988, + 0xb984, 0xba9d, 0xba98, 0xbb88, 0xbb86, 0xbb82, 0xbb8b, 0xcaff, + 0xbb71, 0xbb72, 0xbb81, 0xbb8c, 0xbb80, 0xbb89, 0xbcbb, 0xbcc1, + 0xbcbe, 0xcb01, 0xbcbd, 0xbdc1, 0xbdb4, 0xbdb7, 0xbdc8, 0x173b, + 0xbdd3, 0xbdd0, 0xbdb0, 0xbdca, 0xbdcd, 0xbe15, 0xbe19, 0xbe17, + 0xbe3f, 0xbe40, 0xbe44, 0xbe7c, 0xbe78, 0xbe79, 0xbe88, 0xcb06, + 0xbe89, 0xbe7d, 0xbf23, 0xbf24, 0xbf26, 0xbf22, 0xbf27, 0xbf1f, + 0xbfc9, 0xbfc3, 0xc00a, 0xc00b, 0xc004, 0x17ef, 0xc003, 0xc001, + 0xc009, 0xc10f, 0xc12e, 0xc12d, 0xc191, 0xc199, 0xc19e, 0xc190, + 0xc194, 0xc19d, 0xc198, 0xc19b, 0xc19c, 0xc19a, 0xc254, 0xc39d, + 0xc39f, 0xc3a3, 0xc3a4, 0xc3a5, 0xc602, 0xc717, 0xc71b, 0xc719, + 0xc7d1, 0x4737, +}; + +static const ucs4_t cns11643_6_2uni_upages[204] = { + 0x03400, 0x03500, 0x03600, 0x03700, 0x03800, 0x03900, 0x03a00, 0x03b00, + 0x03c00, 0x03d00, 0x03e00, 0x03f00, 0x04000, 0x04100, 0x04200, 0x04300, + 0x04400, 0x04500, 0x04600, 0x04700, 0x04800, 0x04900, 0x04a00, 0x04b00, + 0x05100, 0x05300, 0x05500, 0x05a00, 0x05b00, 0x05d00, 0x05e00, 0x06100, + 0x06500, 0x06800, 0x06e00, 0x07200, 0x07300, 0x07800, 0x07a00, 0x07f00, + 0x08000, 0x08100, 0x08200, 0x08800, 0x08900, 0x08a00, 0x08d00, 0x08f00, + 0x09200, 0x09700, 0x0ff00, 0x20000, 0x20100, 0x20200, 0x20300, 0x20400, + 0x20500, 0x20600, 0x20700, 0x20800, 0x20900, 0x20a00, 0x20b00, 0x20c00, + 0x20d00, 0x20e00, 0x20f00, 0x21100, 0x21200, 0x21300, 0x21400, 0x21500, + 0x21600, 0x21700, 0x21800, 0x21900, 0x21a00, 0x21b00, 0x21c00, 0x21d00, + 0x21e00, 0x21f00, 0x22000, 0x22100, 0x22200, 0x22300, 0x22400, 0x22500, + 0x22600, 0x22700, 0x22800, 0x22900, 0x22a00, 0x22b00, 0x22c00, 0x22d00, + 0x22e00, 0x22f00, 0x23000, 0x23100, 0x23200, 0x23300, 0x23400, 0x23500, + 0x23600, 0x23800, 0x23900, 0x23a00, 0x23b00, 0x23c00, 0x23d00, 0x23e00, + 0x23f00, 0x24100, 0x24200, 0x24300, 0x24400, 0x24500, 0x24600, 0x24700, + 0x24800, 0x24900, 0x24a00, 0x24b00, 0x24c00, 0x24d00, 0x24e00, 0x24f00, + 0x25000, 0x25100, 0x25200, 0x25300, 0x25400, 0x25500, 0x25600, 0x25700, + 0x25800, 0x25900, 0x25a00, 0x25b00, 0x25e00, 0x25f00, 0x26000, 0x26200, + 0x26300, 0x26400, 0x26500, 0x26600, 0x26700, 0x26800, 0x26900, 0x26a00, + 0x26b00, 0x26c00, 0x26d00, 0x26e00, 0x27100, 0x27200, 0x27300, 0x27500, + 0x27600, 0x27700, 0x27800, 0x27900, 0x27a00, 0x27b00, 0x27c00, 0x27d00, + 0x27e00, 0x27f00, 0x28000, 0x28200, 0x28300, 0x28400, 0x28500, 0x28600, + 0x28700, 0x28800, 0x28900, 0x28c00, 0x28d00, 0x28e00, 0x28f00, 0x29000, + 0x29100, 0x29200, 0x29300, 0x29400, 0x29500, 0x29600, 0x29800, 0x29a00, + 0x29b00, 0x29c00, 0x29d00, 0x29f00, 0x2a000, 0x2a200, 0x2a300, 0x2a400, + 0x2a500, 0x2f800, 0x2f900, 0x2fa00, +}; + +static int +cns11643_6_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x64)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + ucs4_t wc = 0xfffd; + unsigned short swc; + { + if (i < 6388) + swc = cns11643_6_2uni_page21[i], + wc = cns11643_6_2uni_upages[swc>>8] | (swc & 0xff); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + diff --git a/jni/parted/libiconv/lib/cns11643_7.h b/jni/parted/libiconv/lib/cns11643_7.h new file mode 100755 index 0000000..2d23fda --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_7.h @@ -0,0 +1,987 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 plane 7 + */ + +static const unsigned short cns11643_7_2uni_page21[6539] = { + /* 0x21 */ + 0x2b55, 0x2c82, 0x2c89, 0x2c87, 0x2dbe, 0x2dbd, 0x2dca, 0x2dd4, + 0x2dbc, 0x2dc4, 0x2dc1, 0x2dc2, 0x2dd7, 0x2d70, 0x2dba, 0x2de3, + 0x2dbb, 0x2eb1, 0x2eb6, 0x2eb0, 0x2f6c, 0x300d, 0x3007, 0x31f1, + 0x31f5, 0x31ed, 0x31ef, 0x31eb, 0x31ec, 0x31ee, 0x3207, 0x33c4, + 0x3408, 0x34b3, 0x34ad, 0x34b0, 0x3511, 0x2c8a, 0x3683, 0x367a, + 0x3682, 0x3668, 0x3671, 0x36b0, 0x36af, 0x01f6, 0x366c, 0x366f, + 0x3662, 0x3665, 0x3681, 0x367f, 0x3664, 0x3673, 0x366e, 0x3667, + 0x3674, 0x367d, 0x3678, 0x3685, 0x36aa, 0x3688, 0x36a6, 0xc34e, + 0x368a, 0x3684, 0x1a55, 0x3924, 0x3922, 0x3923, 0x3a32, 0x3a5b, + 0x3a4f, 0x0267, 0x3a26, 0x3a3e, 0x3a42, 0x3a47, 0x3a22, 0x309b, + 0x3a4a, 0x3a1f, 0x3a49, 0x3a2b, 0x3a33, 0xc358, 0x3a2a, 0x3a28, + 0x3b3d, 0x3b3c, 0x3bbf, 0x3c79, 0x3c80, 0x3c7c, + /* 0x22 */ + 0x3c7a, 0x3c78, 0x3d82, 0x3d5c, 0x3d5a, 0x3d4b, 0x3d7c, 0x3d7f, + 0x3d1f, 0x3d89, 0x3d8b, 0x3d57, 0x3d7e, 0x3d7d, 0x3d53, 0x3f9f, + 0x3fbc, 0x3fa5, 0x3f86, 0x3fdc, 0x3fa4, 0x3fb6, 0x3fa2, 0x3fb4, + 0x4048, 0x4046, 0x40a7, 0x4114, 0x4112, 0x4111, 0x41e1, 0x41d0, + 0x4226, 0x4228, 0x4229, 0x432f, 0x430d, 0x4325, 0x4314, 0x433c, + 0x430b, 0x4311, 0x4330, 0x4318, 0x4319, 0x4336, 0x4317, 0x4310, + 0x4315, 0x4403, 0x4429, 0x444c, 0x453f, 0x453e, 0x4534, 0x4542, + 0x4535, 0x31f3, 0x45cd, 0x45d1, 0x45d2, 0x46ad, 0x46ba, 0x46c1, + 0x46bb, 0x46b4, 0x46bc, 0x476c, 0x4792, 0x4821, 0x4824, 0x5f19, + 0x48ad, 0x48ae, 0x48ab, 0x48ac, 0x4970, 0x4976, 0x4971, 0x4977, + 0x1c7f, 0x4aec, 0x4b1c, 0x4afb, 0x4aee, 0x4be2, 0x4afd, 0x4b1e, + 0x4b3b, 0x4b4a, 0xc3ae, 0x0592, 0x4b7d, 0x4b56, + /* 0x23 */ + 0x4b44, 0x4b4b, 0x4cfa, 0x4ce8, 0x4cf8, 0x4cff, 0x4cf7, 0x4cf6, + 0x4cfe, 0x4d07, 0x4d5d, 0x4ed4, 0xc3c3, 0x4ec8, 0x4ec5, 0xc3c0, + 0x4ec9, 0x4f4d, 0x4f20, 0x4f36, 0x4f35, 0x4f88, 0x4f25, 0x4f21, + 0x4f26, 0x0645, 0x4f3f, 0x4f3b, 0x4f24, 0x4f43, 0x4f4e, 0x4f4f, + 0x4f44, 0x4f40, 0x4f41, 0x4f39, 0x4f2b, 0x50dd, 0x50de, 0x51cd, + 0x51cb, 0x51db, 0x51d8, 0x51d9, 0x51d2, 0x51ca, 0x51d1, 0x51d4, + 0x51f9, 0x51d0, 0x525e, 0x525d, 0x528a, 0x5314, 0x5483, 0x5484, + 0x549b, 0x5482, 0x547d, 0x547c, 0x5499, 0x547e, 0x549a, 0x5495, + 0x547b, 0x5486, 0x5548, 0x5592, 0x56b2, 0x5742, 0x5772, 0x5715, + 0x5730, 0x5743, 0x575b, 0x571d, 0x5773, 0x572d, 0x07c9, 0x5721, + 0x571c, 0xc3ea, 0x5729, 0x571e, 0x5733, 0x5a10, 0x5a0e, 0xc3f1, + 0x5a0d, 0x5a11, 0x5a12, 0x5a17, 0x5a09, 0x5a0f, + /* 0x24 */ + 0x5a98, 0x5a94, 0x5a96, 0x5a99, 0x5a95, 0x5a97, 0x5b50, 0x5b52, + 0x5b4d, 0x5b57, 0x5b53, 0x5b56, 0x5bb8, 0x5c12, 0x5cf1, 0x5cf0, + 0x5cee, 0x5cef, 0x5ce5, 0x5ceb, 0x5ce7, 0x5cf2, 0x5ce6, 0x5cf7, + 0x5d09, 0x5d6b, 0x5d6a, 0x5e79, 0x5ecd, 0x5eef, 0x5ee4, 0x5ee3, + 0x5f6c, 0x5f67, 0x5f62, 0x5f58, 0x5f69, 0x5fab, 0x5f57, 0x5fad, + 0x5f54, 0x5fae, 0x5f76, 0x5f49, 0x5f45, 0x5f4f, 0xc40f, 0x5f50, + 0x5f7d, 0x5f44, 0x5f66, 0x5f48, 0x5fa3, 0x5f51, 0x5f53, 0xc410, + 0x5f60, 0x5f47, 0x5f5e, 0x5f85, 0x5fac, 0x5f6d, 0x5f75, 0x5fa8, + 0x0955, 0x5f43, 0x5f4e, 0x5f5c, 0x5f56, 0x5f6e, 0x5f63, 0x5f6a, + 0x6256, 0x6212, 0x625c, 0x6258, 0x6255, 0x627e, 0x62a8, 0x6211, + 0x6259, 0x625a, 0x6267, 0x6254, 0x625b, 0x62f0, 0x6429, 0x642c, + 0x642a, 0x6427, 0x6467, 0x6468, 0x6493, 0x6495, + /* 0x25 */ + 0x649a, 0x64ee, 0x64f1, 0x64ed, 0x64e9, 0x65cb, 0x65df, 0x65db, + 0x673c, 0x674e, 0x676c, 0x677b, 0x677c, 0x6783, 0x676b, 0x6766, + 0x6763, 0x67a0, 0x6785, 0x6768, 0x67a2, 0x68ec, 0x0ae8, 0x68e7, + 0x6910, 0x6918, 0x693a, 0x691a, 0x6938, 0x6941, 0x691b, 0x6914, + 0x691c, 0x691d, 0x6a12, 0x6a0d, 0x6a07, 0x6a7e, 0x6a7f, 0x34b9, + 0x6a80, 0x6a7a, 0x6af3, 0x6bb9, 0x6bbb, 0x6bba, 0x6bbd, 0x6bb7, + 0x6bbf, 0x6c21, 0x6d3a, 0x6d3d, 0x6d36, 0x6d49, 0x6d81, 0x0bb6, + 0x6d3f, 0x6d4d, 0x6d3e, 0x0bbd, 0x6d30, 0x6d4f, 0x6e37, 0x6e98, + 0x6e99, 0x6f11, 0x6f0d, 0x6f88, 0x6f8a, 0x701c, 0x7055, 0x7056, + 0x7062, 0x7057, 0x7042, 0x7010, 0x704d, 0x705a, 0x7066, 0x7046, + 0x4b7e, 0x704f, 0x80f9, 0x7187, 0x7184, 0x71f4, 0x71f5, 0x71f2, + 0x71f7, 0x7345, 0xc450, 0x7349, 0x7335, 0x72fd, + /* 0x26 */ + 0x7330, 0x7343, 0x7346, 0x0cd6, 0x7333, 0x74c6, 0xc456, 0x74d4, + 0x8dd8, 0x74e0, 0x36a7, 0x7544, 0x2d98, 0x7654, 0x763e, 0x7635, + 0x763a, 0x0d71, 0x7634, 0x7639, 0x7646, 0x765a, 0x765b, 0x763c, + 0x77dc, 0x77d6, 0x77d0, 0xc45e, 0x78ac, 0xc45d, 0x78a5, 0x79f4, + 0x7a24, 0x79e0, 0x79fd, 0x79f2, 0x79fc, 0x7a02, 0x79f1, 0x79ff, + 0x79d2, 0x79d8, 0x79d3, 0x79f9, 0xc463, 0x79ed, 0x79f7, 0x79f0, + 0x79d7, 0x7a09, 0x79f5, 0x7cc2, 0x7cc5, 0x7ccf, 0x0e98, 0x7cc1, + 0x7cc6, 0x7cd4, 0x7cce, 0x7e9b, 0x7e99, 0x7e8f, 0x7eb7, 0x7e82, + 0x7e93, 0x7eb4, 0x7ec1, 0x7e90, 0x7e9a, 0x7e94, 0x7e9c, 0x7eb5, + 0xc46f, 0xc46e, 0x7e9f, 0x7e8e, 0x7e9e, 0x803c, 0x8047, 0x8041, + 0x80eb, 0x80ec, 0x80ed, 0x80ee, 0x80df, 0x80f2, 0x810d, 0x810e, + 0x2c86, 0x81a9, 0x81a4, 0x81a5, 0x825f, 0x825a, + /* 0x27 */ + 0x8266, 0x8268, 0x826a, 0x8264, 0x8265, 0x82c1, 0x82d8, 0xc47b, + 0x82d9, 0x8309, 0x83aa, 0x83a3, 0x83b9, 0x77e2, 0x83a5, 0x83ab, + 0x8420, 0x8589, 0x858b, 0x85db, 0x85e4, 0x85ef, 0x85e2, 0x85e9, + 0x85f0, 0x85f3, 0x85dd, 0x861e, 0x871d, 0x8746, 0x877c, 0x8780, + 0x8781, 0x8782, 0x8787, 0x8788, 0x878a, 0x878c, 0x87e7, 0x87eb, + 0x87ea, 0x8868, 0x886b, 0x8869, 0x8866, 0x886a, 0x8865, 0x88e5, + 0x88e4, 0x88e6, 0x8918, 0x8a24, 0x8a48, 0x8a2f, 0x8a7e, 0x8989, + 0x8a1e, 0x8a49, 0x8a26, 0x8a09, 0x8a34, 0x8a2d, 0x8a4a, 0x8a15, + 0xc4a9, 0x8a33, 0x8a28, 0x8a27, 0x8a20, 0x8a2b, 0x8a29, 0x8a6a, + 0x8a0b, 0x8a0e, 0x8a1c, 0x89ff, 0xc4aa, 0x8a35, 0x8a11, 0x8a4b, + 0x8a4c, 0x8a1f, 0x8a0f, 0x8a39, 0x8a68, 0x8a1d, 0x8a08, 0x8a0c, + 0x8a0d, 0x8a62, 0x8aaf, 0x8a32, 0x8a2c, 0x8a64, + /* 0x28 */ + 0x8a04, 0x8a16, 0x8a4d, 0x8a07, 0x8aae, 0x8dd4, 0x8dd1, 0x8dd5, + 0x8dd0, 0x8f71, 0x8f5d, 0x8f5b, 0x8f7a, 0xc4bd, 0x8f7f, 0x8f79, + 0x8f67, 0x8f9e, 0x8f94, 0x8f64, 0x8f5e, 0x8f81, 0x8f5a, 0x8f57, + 0x8f7c, 0x8f98, 0x8f66, 0x8f7e, 0x8f82, 0x8f68, 0x8f5f, 0x8f63, + 0x8f97, 0x11cd, 0x8f53, 0x8f7b, 0x8f7d, 0x8f78, 0x9006, 0x91c0, + 0x91c2, 0x91c3, 0x92dc, 0x92e6, 0x92ec, 0x92f2, 0x92e8, 0x92eb, + 0x92ea, 0x92e5, 0x92e0, 0x92d0, 0x92d8, 0x92d5, 0x92d3, 0x92e4, + 0x92f3, 0x92db, 0x932f, 0x93f9, 0x945d, 0x945b, 0x944c, 0x9458, + 0x9460, 0x9453, 0x9450, 0x9507, 0x9508, 0x94f4, 0x94f6, 0x9504, + 0x94fd, 0x9505, 0x9628, 0x9656, 0x9642, 0x965c, 0x963d, 0x962f, + 0x962b, 0x9658, 0x9661, 0x962c, 0x9651, 0x9650, 0x963c, 0x9636, + 0x12f6, 0x9660, 0x965b, 0x962e, 0x9640, 0x965f, + /* 0x29 */ + 0x9626, 0x962d, 0x965e, 0x963b, 0x97ef, 0x97f3, 0x97ee, 0x97ed, + 0x985a, 0x9862, 0x985b, 0x985f, 0x985e, 0x9864, 0x98e0, 0x98e1, + 0x98e5, 0x99a5, 0x999b, 0x999f, 0x999c, 0x137a, 0x99aa, 0x99a4, + 0x99a3, 0x9a67, 0x9b26, 0x9b1a, 0x13b8, 0x9b1c, 0x9b15, 0x9b1b, + 0x9b18, 0x9b1e, 0x9b25, 0xc4dc, 0x9c7b, 0x9c75, 0x9c93, 0x9c8f, + 0x9c7c, 0x9c9b, 0x9c88, 0x9c91, 0x9c7e, 0x1401, 0x9c86, 0x9e5b, + 0x9e54, 0x9f35, 0x9f40, 0x9f37, 0x9f29, 0x9f26, 0x9f23, 0x9f30, + 0x9f20, 0x9f28, 0x9f32, 0x9f2a, 0x9f31, 0x9f24, 0x9f41, 0x9f42, + 0x9f43, 0x9f25, 0x9f38, 0xa01c, 0xa01d, 0xa01e, 0xa0f6, 0xa1a5, + 0xa189, 0xa19d, 0xa18a, 0xa187, 0xa1ab, 0xa186, 0xa19e, 0xa193, + 0xa1a1, 0xa188, 0xa1a3, 0xa19f, 0xa1a0, 0xa2ff, 0xa300, 0xa302, + 0xa2f8, 0xa2f7, 0xa301, 0xa387, 0xa389, 0xa376, + /* 0x2a */ + 0xa36e, 0xa377, 0xa382, 0xa385, 0xa383, 0xa384, 0xa457, 0xa44b, + 0xa456, 0xa45d, 0xa460, 0xa44d, 0xa455, 0xa454, 0xa453, 0xa450, + 0xa463, 0xa462, 0xa517, 0xa516, 0xa52d, 0xa5d9, 0xa5bf, 0x152f, + 0xa5b2, 0xa5ac, 0xa5b0, 0xa5cf, 0xa5b8, 0x1531, 0xa5d3, 0xa5b1, + 0xa5af, 0xa5ce, 0xa5b4, 0xa5b7, 0xa5d5, 0x159c, 0xa938, 0xa928, + 0xa93f, 0xa940, 0xa941, 0xa933, 0xa92b, 0xa92e, 0xab11, 0xab18, + 0xab17, 0xab19, 0xab16, 0x15e6, 0xab0d, 0xab26, 0xab79, 0xabd8, + 0xabf3, 0xabd7, 0xabcc, 0xabcf, 0xabcb, 0xabd1, 0xabce, 0xabd4, + 0xabd5, 0xabd3, 0xabd6, 0xabcd, 0xabda, 0xabd2, 0xabde, 0xaccc, + 0xacb8, 0xacb7, 0xacc2, 0xacc3, 0xadfa, 0xadf9, 0xae1f, 0xae1d, + 0x6282, 0xaea6, 0xae90, 0xae9e, 0xae98, 0xae93, 0xae92, 0xaea5, + 0xae95, 0xafa9, 0xafa8, 0xafaa, 0xafab, 0xafac, + /* 0x2b */ + 0xb01f, 0xb022, 0xb0aa, 0xb096, 0xb091, 0xb0ab, 0xb0a2, 0xb0a4, + 0xb09d, 0xb097, 0xb07d, 0xb09f, 0xb09c, 0xb099, 0xb0a6, 0xb092, + 0xb0a7, 0xb1c9, 0xb1c8, 0xb1c7, 0xb1cb, 0xb274, 0xb2c9, 0x1738, + 0xb2d2, 0xb2db, 0xb2eb, 0xb2e9, 0xb2ef, 0xb2ee, 0xb2f9, 0xb2de, + 0xb416, 0xb445, 0xb47f, 0xb498, 0xb49f, 0xb486, 0xb490, 0xb49a, + 0xb49d, 0xb48d, 0xb49c, 0xb4a0, 0xb4a7, 0xb48f, 0xb641, 0xb635, + 0xb637, 0xb630, 0xb63a, 0xb636, 0xc508, 0xb6ca, 0xb712, 0xb715, + 0xb722, 0xb713, 0xb718, 0xb721, 0xb810, 0xb820, 0xb82f, 0xb8a5, + 0xb8a3, 0xb8b6, 0xb8ab, 0xb968, 0xb967, 0xb96f, 0xb977, 0xb964, + 0xb978, 0x183a, 0xb976, 0xb96e, 0x18b1, 0xbbd0, 0xbbb3, 0xbbcb, + 0xbbd6, 0xbbb1, 0xbbb4, 0xbbd7, 0xbbc6, 0xbbba, 0xbbd1, 0xbbd2, + 0xbbb5, 0xbbc4, 0xbbcc, 0xbbbb, 0xbbb2, 0xbe5b, + /* 0x2c */ + 0xbe5a, 0xbe59, 0xbe99, 0xbe94, 0xbe96, 0xbe93, 0xbe91, 0xbe8f, + 0xbe98, 0xbf0c, 0xbf0a, 0xbf0e, 0xbf12, 0xbf11, 0xbf0b, 0xbf9a, + 0x1947, 0xbfb4, 0x1951, 0xc01c, 0xc020, 0xc021, 0xc0d3, 0xc0d2, + 0xc138, 0x2afd, 0x6bcf, 0x2c1d, 0x2c92, 0x2c8f, 0x2c8c, 0x2dea, + 0x2eb9, 0x2f6e, 0x2fa0, 0xaddd, 0x3012, 0x3017, 0x306d, 0x3205, + 0x31fb, 0x31fd, 0x3206, 0x3200, 0x31ff, 0x31fe, 0x32b6, 0x3305, + 0x3307, 0x34bc, 0x34bb, 0x358b, 0x3587, 0x97fb, 0x36e7, 0x36e6, + 0x36e2, 0xa1d3, 0x36d9, 0x36ca, 0x3712, 0x3710, 0x36dc, 0x36d0, + 0x368b, 0x3713, 0x4d10, 0x36da, 0xc34f, 0x36fd, 0x36e5, 0x36cc, + 0x3739, 0x36c7, 0x36d8, 0x3a60, 0x3a64, 0x3a86, 0x3a5e, 0x3a66, + 0x3a5f, 0x3a77, 0x3a82, 0x3a96, 0x3b3e, 0x3b79, 0x3b7a, 0x3c88, + 0x3c89, 0x3c8c, 0x62e0, 0x3c7b, 0x3c86, 0x3d94, + /* 0x2d */ + 0x3d97, 0x3db7, 0x3db5, 0x3db8, 0x3d93, 0x3db2, 0x3db4, 0x3d99, + 0x3dc3, 0x3d9d, 0x3d9b, 0x3da3, 0x0347, 0x3e9f, 0x3e9e, 0x3ea3, + 0x3ea0, 0x3ea1, 0x3fc5, 0x3fc6, 0x3fbe, 0x3fc4, 0x3fbf, 0x404c, + 0x404a, 0x40b1, 0x4115, 0x4117, 0x4110, 0x4118, 0x41e0, 0x41df, + 0x4227, 0x4343, 0x4348, 0x431d, 0x4350, 0x4358, 0x4347, 0x4354, + 0x4353, 0x4340, 0x4355, 0x0417, 0x435a, 0x4870, 0x455b, 0x454d, + 0x4556, 0x454f, 0xc387, 0x4559, 0xc388, 0x4554, 0x4553, 0x4550, + 0x46b3, 0x476e, 0x04a3, 0x476f, 0x4793, 0x4829, 0x4825, 0x4828, + 0x486f, 0x54b8, 0xc397, 0x48b3, 0x4979, 0x497e, 0x497c, 0x4983, + 0xc3ac, 0x4b00, 0x4b34, 0x4b65, 0x4b36, 0x4ba7, 0x4b59, 0x4b58, + 0x4b31, 0x4b62, 0x4b38, 0x4b73, 0x4b3e, 0x4b55, 0x4b54, 0x4b95, + 0xc3ad, 0x4ba5, 0x4b94, 0x4b9a, 0x4b9b, 0x4b99, + /* 0x2e */ + 0x4b9f, 0x4b53, 0x4d12, 0x4d0a, 0x4d09, 0x4d0c, 0x4d0b, 0x4d0e, + 0x4d0d, 0x4d08, 0x4f38, 0x4f3a, 0x4f37, 0x4f3d, 0x4f2d, 0x4f82, + 0x4f95, 0x4f87, 0x4f9d, 0x4fb5, 0x4f81, 0x4fc7, 0x4f9b, 0x4f98, + 0x4f94, 0x4f86, 0x4f90, 0x4f34, 0x4f8e, 0x4f85, 0x4fa6, 0x4f96, + 0x51ea, 0x51df, 0x54bd, 0x51f7, 0x51eb, 0x51e0, 0x51e8, 0x51e1, + 0x51e9, 0x51ee, 0x51e5, 0x51ec, 0x5263, 0x52c6, 0x52c2, 0x52c1, + 0x52c0, 0x52c3, 0x5318, 0x54ae, 0x54a3, 0x54c5, 0x54a0, 0x54b4, + 0x54a5, 0x071e, 0x54a4, 0x54a8, 0x54a6, 0x57a8, 0x578d, 0x5782, + 0x579e, 0x5789, 0x5783, 0x5791, 0x57a6, 0x579a, 0x5790, 0x5785, + 0x577d, 0xc3ec, 0x579b, 0x57a5, 0x57f0, 0x5796, 0x5788, 0x57d6, + 0x57d8, 0x5786, 0x57a4, 0x5797, 0x5a1c, 0x5a19, 0x5a9e, 0x5a9f, + 0x5a9d, 0x5a9c, 0x5b5d, 0x5b5e, 0x5b73, 0x5b63, + /* 0x2f */ + 0x5bbe, 0x5bc1, 0x5bbc, 0x5bbf, 0x5bbb, 0x5bbd, 0x5c13, 0x5c14, + 0x5cf8, 0x5cfa, 0x5d06, 0x5cfe, 0x5d51, 0x600b, 0x5ff1, 0x5fa9, + 0x5fd5, 0x5fdc, 0x5fcb, 0x5ff2, 0x605f, 0x5fdb, 0x5fd6, 0x5fd9, + 0x5fd1, 0x5fcf, 0x5fd8, 0x5fe0, 0x5fd4, 0x5ff3, 0x6005, 0x5fce, + 0x5ff4, 0xc412, 0x5fda, 0x600e, 0x6006, 0x5fd7, 0x5fcd, 0x6007, + 0x5fe1, 0x6008, 0x62be, 0x62ef, 0x62d9, 0x62da, 0x1fd7, 0x62a0, + 0x62df, 0x629e, 0x62bf, 0x62af, 0x62a7, 0x62aa, 0x62f4, 0x62ae, + 0x62b5, 0x62b8, 0x62db, 0x62c0, 0x62b7, 0x62a2, 0x62dd, 0x62a1, + 0x62a5, 0x62b4, 0x62a6, 0x62ab, 0x62ac, 0x629f, 0x62b1, 0x62fc, + 0x642e, 0x6430, 0x6499, 0x64f8, 0x64f6, 0x65f4, 0x65eb, 0x65e1, + 0x65e4, 0x6775, 0x6769, 0x0a9a, 0x6799, 0x679e, 0x6794, 0x6793, + 0x6791, 0x6919, 0x6917, 0x6949, 0x6947, 0x6948, + /* 0x30 */ + 0x6952, 0x6940, 0x6963, 0x6946, 0x695f, 0x6a0e, 0x6a85, 0x6a87, + 0x6acb, 0x6acc, 0x6ac9, 0x6bcb, 0x41e7, 0x6c20, 0x6d5f, 0x6d60, + 0x6d6a, 0x6d76, 0x6d73, 0x6d71, 0x6d66, 0x0bc2, 0x6d6b, 0x6d79, + 0x6d7b, 0x6e3c, 0x6e9e, 0x6e9c, 0x6f1c, 0x6f1e, 0x6f21, 0x6f96, + 0x6fa1, 0x6fb6, 0x6fa0, 0x6f94, 0x6f97, 0x7081, 0x7086, 0x70c0, + 0x708a, 0xc44b, 0x7085, 0x7095, 0x7049, 0x7082, 0x7084, 0x4b78, + 0x7090, 0x70b1, 0x71fe, 0x71fb, 0x7350, 0x7356, 0x735a, 0x734c, + 0x0cdc, 0x7357, 0x74e1, 0x74d9, 0x74db, 0x74f4, 0x7545, 0x7547, + 0x7674, 0x766b, 0x7668, 0x7669, 0x7679, 0xc45b, 0x7680, 0x7681, + 0x7661, 0x7670, 0x766f, 0x7673, 0x765d, 0x77fa, 0x0db3, 0x77f3, + 0x780a, 0x7817, 0xc45f, 0x78b0, 0x7a3e, 0x7a46, 0x7a4f, 0x7a44, + 0x7a69, 0x7a33, 0x7a2f, 0x7a4e, 0x7a3a, 0x7a2b, + /* 0x31 */ + 0x7aa9, 0x7a50, 0x7a45, 0x7a37, 0x7a25, 0x7a2c, 0x7a3f, 0x7a34, + 0x7a29, 0x7a1e, 0x7a3d, 0x7ced, 0xc466, 0x7cf3, 0x7cea, 0x7ceb, + 0x7ecc, 0x7ece, 0x7ed0, 0x7ee3, 0x7ee0, 0x7ed1, 0x7edc, 0x7edd, + 0x7ef0, 0x7edb, 0x7ee5, 0x7ef1, 0x7ec9, 0x7ee8, 0x7ee7, 0x7ec8, + 0x7ede, 0x7ecd, 0x7ec5, 0x7ec6, 0x7ee4, 0x7ec3, 0x80fb, 0x80fc, + 0x80fe, 0x8103, 0x8100, 0x80fd, 0x8105, 0x8113, 0x81a7, 0x81b4, + 0x8270, 0x8274, 0x8271, 0x8275, 0x827d, 0x8273, 0x82c4, 0x82c3, + 0x82de, 0x82dd, 0x8311, 0x830f, 0x8310, 0x83c3, 0x83c2, 0x83ca, + 0x83c1, 0x8423, 0x85b1, 0x8624, 0x8611, 0x8625, 0x860a, 0x861f, + 0x8620, 0x8614, 0x8628, 0x8603, 0x8612, 0x860b, 0x8617, 0x4d11, + 0x8749, 0x8789, 0x8790, 0x878f, 0x8796, 0x8795, 0x8793, 0x87ed, + 0x87f0, 0x62de, 0x8885, 0x8877, 0x887a, 0x8884, + /* 0x32 */ + 0x8879, 0x887d, 0x887b, 0x88ed, 0x88ec, 0x89f6, 0x899b, 0x8a9d, + 0x8b11, 0x8ac4, 0x8ac8, 0x8adf, 0x8abf, 0x8ab3, 0x8aba, 0x8b10, + 0x8b06, 0x8a88, 0x8a9a, 0x8ae0, 0x8acc, 0x8ab5, 0x8ae1, 0x8abc, + 0x8ac6, 0x8b0b, 0x8aa4, 0x8a95, 0x8aa3, 0x8ae2, 0x8acd, 0x8ae3, + 0x8aab, 0x8acb, 0x8a8f, 0xc4ab, 0x8aa9, 0x8b24, 0x8ae4, 0x8b12, + 0x8ae5, 0x8b67, 0x8aaa, 0x8aa0, 0x8ae6, 0x8ac1, 0x8ae7, 0x8b0d, + 0x8a86, 0x8ab0, 0x8a8b, 0x8ae8, 0x8ac9, 0x8b19, 0x8ac0, 0x8b0c, + 0x8ae9, 0x8aea, 0x8ded, 0x8de3, 0x8de4, 0x8de8, 0x8dd2, 0x8de2, + 0x2466, 0x8fcf, 0x8fd1, 0x8fc3, 0x8fc9, 0x8fea, 0x8fb4, 0x8fdc, + 0x8fbd, 0x8fe6, 0x8fc8, 0x8fec, 0x8fb2, 0x8fa9, 0x8fd3, 0x8fc0, + 0x8fe9, 0x8fd5, 0x11d9, 0x8fc5, 0x11dd, 0x8fcb, 0x8fd0, 0x8fd2, + 0x8fe4, 0x8fe8, 0x8fcd, 0x8fb6, 0x8faa, 0x8fd4, + /* 0x33 */ + 0xa049, 0x8fc1, 0x8fdd, 0x8fce, 0x91c9, 0x91ca, 0x92fd, 0x92d9, + 0x92ff, 0x9304, 0x92fa, 0x9306, 0x9315, 0x9311, 0x9307, 0x930b, + 0x93fc, 0x93fd, 0x946d, 0x9465, 0x9514, 0x9513, 0x950c, 0x950b, + 0x9518, 0x9522, 0x967d, 0x966f, 0x9675, 0x967b, 0x9680, 0x967f, + 0x9696, 0x966d, 0x966b, 0x9686, 0x9673, 0x9662, 0x9677, 0x9681, + 0x9669, 0x9682, 0x9697, 0x9684, 0x12fc, 0x9678, 0xc4d0, 0x967a, + 0x966a, 0x9665, 0x967e, 0x9694, 0x97c2, 0x97c1, 0x97f9, 0x9871, + 0x986b, 0x986d, 0x986f, 0x986e, 0x98f2, 0x98e8, 0x98ef, 0x98e9, + 0x98ea, 0x98ed, 0x98f3, 0x98e6, 0x99c9, 0x99b4, 0x99b3, 0x99b9, + 0x99ca, 0x99b1, 0x99b6, 0x99c7, 0x99c4, 0x99b7, 0x9a6f, 0x9b33, + 0x9b32, 0x9b1f, 0xc4d9, 0x9b2b, 0x9b30, 0x9b36, 0x9b42, 0x9b41, + 0xc4d8, 0x9ca5, 0x9cab, 0x9ca9, 0x9cb3, 0x9ca7, + /* 0x34 */ + 0x9ca0, 0x9cd2, 0x9ca8, 0x9cb6, 0x9cac, 0x9cae, 0x9ce6, 0x9e65, + 0x9f47, 0x9f63, 0x9f4d, 0x9f5f, 0x9f4b, 0x9f60, 0x9f49, 0x9f53, + 0xc4df, 0x263a, 0x9f57, 0x9f4e, 0x9f52, 0x9f54, 0xa020, 0xa022, + 0xa1c1, 0xa1d7, 0xa1d5, 0xa1c4, 0xa1d0, 0xa1bb, 0xa1e2, 0xa1cb, + 0xa1b8, 0xa1bf, 0xa1d8, 0xa1c0, 0xa1ba, 0xa1b4, 0xa1bc, 0xa1d4, + 0xa1ed, 0xa1c2, 0xa1d9, 0xa1cc, 0xa32f, 0xa323, 0xa396, 0xa38d, + 0xa39e, 0xa399, 0xa483, 0x1507, 0xa46a, 0xa469, 0xa475, 0xa46c, + 0xa480, 0xa46e, 0xa481, 0xa477, 0xa476, 0xa473, 0xa470, 0xa484, + 0xa519, 0xa5f2, 0x273d, 0xa5ec, 0xa5eb, 0xa5f6, 0xa5ef, 0xa5f4, + 0xa5ee, 0xa5f3, 0xa5ed, 0xa89b, 0xa898, 0xa894, 0x3a7a, 0xa89a, + 0xc4f0, 0xa94c, 0x15a8, 0xa957, 0xa951, 0xa962, 0xa952, 0xa95c, + 0xa953, 0xc4ef, 0xaa85, 0xab2d, 0xab3e, 0xab30, + /* 0x35 */ + 0xab7d, 0xabe6, 0xabf6, 0xabe4, 0xabe9, 0xabec, 0xabf2, 0xabe8, + 0xabe3, 0xabeb, 0xabf0, 0xabea, 0xabe7, 0xabfd, 0xabe5, 0xabee, + 0xabf5, 0xabf9, 0xabf1, 0xabf4, 0xc4f4, 0xac11, 0xacde, 0xacd8, + 0xacdd, 0xacdb, 0xacd3, 0xace1, 0xadde, 0xadfc, 0xae28, 0xaeb7, + 0xaeb8, 0xaec7, 0xaeb2, 0xaea9, 0xaeb9, 0xaebc, 0xaeb3, 0xaed1, + 0xafb0, 0xafb1, 0xafb6, 0xb004, 0xb02c, 0xb0c1, 0xb09e, 0xb0ba, + 0x16ca, 0xb0d1, 0xb0d3, 0xb0d4, 0xb0d5, 0xb0c5, 0xb0b6, 0xb0b2, + 0xb0b5, 0xb0c3, 0xb0b9, 0xb0c6, 0xb1d6, 0xb1e0, 0xb1db, 0xb1d7, + 0xb1dd, 0xb315, 0xb30c, 0xb30f, 0xb30e, 0xb2fe, 0xb304, 0xb30b, + 0xb302, 0xb2ff, 0xb308, 0xb310, 0xb317, 0xb313, 0xb306, 0xb309, + 0xb424, 0xb426, 0xb425, 0xb448, 0xb4b5, 0xb4d2, 0xb4d5, 0xb4c4, + 0xb4af, 0xb4ad, 0xb4c1, 0xb4c0, 0xb4cc, 0xb4cd, + /* 0x36 */ + 0xb4c3, 0xb4c8, 0xb4c5, 0xb4ba, 0xb4d0, 0xb4c2, 0xb4ce, 0x178d, + 0xb643, 0xb642, 0xb640, 0xb631, 0xb6cf, 0xb6ce, 0xb730, 0xb734, + 0xb732, 0xb743, 0xb73c, 0xb811, 0xb835, 0xb834, 0xb837, 0xb831, + 0xb8bf, 0xb8bc, 0xb8c2, 0xb8c9, 0xb983, 0xb98b, 0xb9a0, 0xb98d, + 0xb98c, 0xb99a, 0xb98a, 0xb991, 0xbbf1, 0xbc0f, 0xbc01, 0xbc07, + 0xbc0c, 0x18c0, 0xbbdc, 0xbbee, 0xbbf7, 0xbbf2, 0xbbf8, 0xbbeb, + 0x18ca, 0xbbe6, 0xbbed, 0xbbe9, 0xbc08, 0xbc00, 0xbbe5, 0xbbfc, + 0xbe61, 0xbe5e, 0xbe5f, 0x1925, 0xbe9b, 0xbf16, 0xbf15, 0xbf20, + 0xbf14, 0xbf1a, 0xbf17, 0xbf9c, 0x194a, 0xbff1, 0x1953, 0xbff0, + 0xc028, 0xc024, 0xc02a, 0xc02b, 0xc0d5, 0xc104, 0xc105, 0xc191, + 0xc192, 0xc2a6, 0x2c09, 0x2e22, 0x2e1a, 0x2e0e, 0x2e1b, 0x2e08, + 0x6fb3, 0xc31c, 0x309d, 0x3212, 0x321e, 0x32bb, + /* 0x37 */ + 0x32bf, 0x32bc, 0x3308, 0x3309, 0x3363, 0x33c8, 0x5828, 0x358e, + 0x358d, 0x3743, 0x374d, 0x376d, 0x3742, 0x3752, 0x3751, 0x3769, + 0x3750, 0x3756, 0x376c, 0x3744, 0x3745, 0x376b, 0x0205, 0x3768, + 0x3757, 0x392e, 0x3931, 0x392d, 0x3a8b, 0x3ab2, 0x3a8d, 0x3aa3, + 0x3aa4, 0x3a90, 0x3a89, 0x3a8e, 0x3a92, 0x3b7b, 0x3c90, 0x3c8f, + 0x3de9, 0x3dcd, 0x3dc5, 0x3dd0, 0x3dc9, 0x3dd1, 0x3dc7, 0x3dd2, + 0x3d5f, 0x3de1, 0x3dcc, 0x3dc6, 0x3de4, 0x3ea9, 0x3fd3, 0x3fda, + 0x3fd2, 0x3fdb, 0x404d, 0x404e, 0x411c, 0x41e8, 0x436c, 0x435f, + 0x4366, 0x4364, 0x4378, 0x4365, 0x436d, 0x4361, 0x437a, 0x4407, + 0x4566, 0x4568, 0x4562, 0x46d3, 0x46d4, 0x46d1, 0x46dc, 0x4773, + 0x4772, 0x482d, 0x482c, 0x482f, 0x4872, 0x48b4, 0x4989, 0x4bcd, + 0x4ba6, 0x4ba2, 0x4ba0, 0x4b46, 0x4ba1, 0x8657, + /* 0x38 */ + 0x4ba3, 0x4bb1, 0x4bdb, 0x4bf6, 0x4bdc, 0x4bd6, 0x4d13, 0x4f9c, + 0x4f97, 0x4fd8, 0x4fe4, 0x4fd4, 0x4fe5, 0x4fdb, 0x4fd0, 0x4fda, + 0x4fcc, 0x4fdc, 0x4fed, 0x4fd3, 0x4fd1, 0x4fce, 0x4fd9, 0x4fdd, + 0xc3c6, 0x50e6, 0x50e5, 0x50e9, 0x51ff, 0x51fe, 0x520e, 0x528c, + 0x52ca, 0x52cb, 0x531a, 0x54d7, 0x54cf, 0x54d0, 0x54c9, 0x54cc, + 0x54d3, 0x55a4, 0x55a3, 0x5781, 0x5826, 0x57f3, 0x5827, 0x57f2, + 0x57ff, 0x57f5, 0x57fc, 0x580e, 0x07f0, 0x57f6, 0x5800, 0x5823, + 0x5805, 0x5825, 0x5808, 0x5850, 0x5a25, 0x5a20, 0x5a23, 0x5a21, + 0x5aa1, 0x5b69, 0x5b6c, 0x5b68, 0x5b6b, 0x5bcc, 0x5bcd, 0x5d10, + 0x5d0d, 0x5d0a, 0x5d16, 0x5d14, 0x5d52, 0x6028, 0x602e, 0x602c, + 0x604d, 0x6049, 0x6031, 0x6030, 0x6033, 0x602d, 0x6036, 0x603e, + 0x602f, 0x6027, 0x6034, 0x604c, 0x62fe, 0x6312, + /* 0x39 */ + 0x631f, 0x6317, 0x62f5, 0x6315, 0x62f7, 0x0a02, 0x437d, 0x62fa, + 0x62f9, 0x634b, 0x649c, 0x649d, 0x0a23, 0x65f0, 0x65f6, 0x65ef, + 0x679d, 0x679a, 0x67a7, 0x67af, 0x67aa, 0x6964, 0x6986, 0x6975, + 0x6970, 0x6984, 0x696b, 0x6985, 0x696c, 0x6a17, 0x6a94, 0x6a93, + 0x6bd2, 0x6bd7, 0x6bd4, 0x6da6, 0x6da7, 0x6d9c, 0x6d8b, 0x6d8d, + 0x6d98, 0x6db9, 0x6d9b, 0x6d9d, 0x6d99, 0x6da8, 0x6d91, 0x6d87, + 0x6d9a, 0x6ea6, 0x6f1f, 0x6fa7, 0x6fb1, 0x6fb2, 0x6fb7, 0x70d0, + 0x70b3, 0x70b5, 0x70c4, 0x70c3, 0x70bc, 0x70b2, 0x70ba, 0x70bb, + 0x70c2, 0x70cd, 0x70be, 0x70b7, 0x718f, 0x7203, 0x7204, 0x7371, + 0x7377, 0x7374, 0x738b, 0x737a, 0xc451, 0x738c, 0x7373, 0x74ff, + 0x74fb, 0x74fd, 0x74f0, 0x74f3, 0x74fc, 0x74f2, 0x7692, 0x769e, + 0x76ae, 0x7696, 0x7814, 0x7812, 0x7813, 0x7816, + /* 0x3a */ + 0x780f, 0x78b6, 0x78bd, 0x7a8c, 0x7aae, 0x7aac, 0x7aab, 0x7a99, + 0x7a92, 0x7abb, 0x7a9e, 0x7a7e, 0x7aaf, 0x7abc, 0x7a98, 0x7d01, + 0x7d09, 0x7d06, 0xc467, 0x7d07, 0x7d08, 0x7ecf, 0x7f0e, 0x7f32, + 0x0f15, 0x7f12, 0x7f16, 0x7f17, 0x7f1b, 0x7f15, 0x7f31, 0x7f18, + 0x7f1a, 0x7f10, 0x7f0a, 0x7f09, 0x804f, 0xc473, 0x810f, 0x8110, + 0xc475, 0x8128, 0x8111, 0x8116, 0x8117, 0x8102, 0x81bb, 0x81ba, + 0x81c3, 0x81bc, 0x828a, 0x8284, 0x8286, 0x82e0, 0x8317, 0x8318, + 0x831e, 0x8315, 0x83d3, 0x83da, 0x83d9, 0x85e6, 0x85f4, 0x85e1, + 0x8669, 0x8640, 0x8658, 0x866c, 0x864d, 0x8721, 0x8799, 0x87f1, + 0x5f68, 0x8886, 0x8b5b, 0x8b5c, 0x8b77, 0x8b2c, 0xc4ad, 0x8b58, + 0x8b64, 0x8b61, 0x8b48, 0x8b97, 0x8b59, 0x8b29, 0x8b62, 0x8b2e, + 0x8b68, 0x8b90, 0x8b3a, 0x8b3d, 0x8b5e, 0x8b46, + /* 0x3b */ + 0x8b69, 0x8b65, 0x8b3e, 0x8b49, 0x8b56, 0x8be1, 0x8b78, 0x8b79, + 0x8b66, 0x8b4a, 0x8b35, 0x8b7a, 0x8b92, 0x8b60, 0x8b36, 0x8b51, + 0x8b42, 0x115d, 0x8b3f, 0x8b7b, 0x8b5d, 0x8b94, 0x8b6a, 0xc4b5, + 0x8df2, 0x8fbb, 0x901b, 0x901a, 0x9033, 0x9017, 0x900a, 0x9015, + 0x9012, 0x9001, 0x902d, 0x8ffd, 0x9023, 0x9005, 0x9011, 0x9000, + 0x901c, 0x9035, 0x902e, 0x9036, 0x34bf, 0x902f, 0x900c, 0x9009, + 0x9031, 0x8ffc, 0x900f, 0x9018, 0x9002, 0x9200, 0x931f, 0x9337, + 0x125a, 0x9338, 0x932b, 0x932e, 0x9321, 0x9330, 0x9329, 0x9331, + 0xc4c9, 0x9301, 0x932c, 0x9322, 0x93ff, 0x9477, 0x9467, 0x947f, + 0x947d, 0x947b, 0x947e, 0x951e, 0x951c, 0x9521, 0x9526, 0x9527, + 0x9529, 0x952c, 0x951d, 0x952b, 0x96bf, 0x96a4, 0x96aa, 0x96ae, + 0x969f, 0x96d0, 0x96b1, 0x96ad, 0x969b, 0x96b2, + /* 0x3c */ + 0x96a9, 0x96b3, 0x96b4, 0x96ba, 0x96a5, 0x96b7, 0x96ac, 0x96cb, + 0x96cf, 0x97c6, 0x9801, 0x97ff, 0x97fd, 0x9877, 0x9878, 0x9876, + 0x98f7, 0x99cc, 0x1385, 0x99d4, 0x99d7, 0x99d5, 0x99d6, 0x99d3, + 0x9b5d, 0x9b55, 0x9ce0, 0x9d48, 0x9cee, 0x9cdb, 0x9ce7, 0x9cd6, + 0x9ce5, 0x9ce1, 0x9cdd, 0x9ce2, 0x9e70, 0x9e66, 0x9e6f, 0x9e6e, + 0x9f81, 0x9f69, 0x9f6e, 0x9f6d, 0x9f6c, 0x9f84, 0x9f85, 0x9f71, + 0x9f73, 0x9f6a, 0x9f6f, 0x9f7b, 0xa16a, 0xa17c, 0xa17d, 0xa181, + 0xa1fa, 0xa205, 0xa1eb, 0xa1fb, 0xa1e9, 0xa1ef, 0xa1fc, 0xa1e7, + 0xc4e1, 0xa1ee, 0xa1fd, 0xa332, 0xa3a7, 0xa3b5, 0xa3b1, 0xa3b9, + 0xa3a8, 0xa3b3, 0xc4e6, 0xa48a, 0xa491, 0xa48d, 0xa499, 0x150b, + 0xa49a, 0xa49b, 0xa492, 0xa48f, 0xa4ab, 0x6bdb, 0x1539, 0xa675, + 0xa631, 0xa638, 0x1537, 0xa635, 0xa669, 0xa63b, + /* 0x3d */ + 0xa63d, 0xa66c, 0xa679, 0xa63c, 0xa63e, 0xa897, 0xa8a5, 0xa8a2, + 0xa89d, 0xa8a1, 0xa968, 0xa96f, 0xa96d, 0xa972, 0xa975, 0xa977, + 0xa979, 0xaab5, 0xaaea, 0xaaab, 0xab43, 0xab41, 0xab42, 0xac09, + 0xac08, 0xac06, 0xac01, 0xac03, 0xac00, 0xac04, 0xac0a, 0xac0e, + 0xac0d, 0xac07, 0xac0f, 0xac14, 0xac02, 0xac15, 0xac0c, 0xac10, + 0xac05, 0xacfd, 0xacff, 0xad04, 0xad00, 0xad09, 0xae2b, 0xc4f7, + 0xae31, 0xaedb, 0xaec5, 0xaed3, 0xaece, 0x166b, 0xaec9, 0xaebf, + 0xaecb, 0xaec0, 0xaed0, 0xaed4, 0xafc1, 0xafb9, 0xafbb, 0xafc3, + 0xafc9, 0xb007, 0xb02d, 0xb0f8, 0xb0e1, 0xb0fa, 0xb0ef, 0xb0fd, + 0x16cd, 0xb0eb, 0xb0f1, 0xb0ed, 0xb0fe, 0xb1f8, 0xb203, 0xb1ee, + 0xb1e8, 0xb201, 0xb2ec, 0xb322, 0xb314, 0xb334, 0xb32f, 0xb339, + 0xb341, 0xb33c, 0xb349, 0xb358, 0xb33a, 0xb342, + /* 0x3e */ + 0xb33f, 0xb422, 0xb423, 0xb44a, 0xb4dc, 0xb4d9, 0xb4db, 0xb4e2, + 0xc507, 0xb4df, 0xb4e0, 0xb4d7, 0xb64f, 0xb646, 0xb653, 0xb655, + 0xb64e, 0xb64a, 0xb64c, 0xb663, 0xb751, 0xb753, 0xb758, 0xb74d, + 0xb75a, 0xb749, 0xb75d, 0xb812, 0xb83c, 0xb8d1, 0xb8df, 0xb8d6, + 0xb8d8, 0xb8e0, 0xb8d9, 0xb9b1, 0xb9ac, 0xb9aa, 0xb9ee, 0xb9bd, + 0x184d, 0xb9c3, 0xb9a8, 0xb9ae, 0xb9ab, 0xbc1d, 0xbc27, 0xbc38, + 0xbc12, 0xbc48, 0xbc2b, 0xbc16, 0xbc19, 0xbc3d, 0xbc23, 0xbc2a, + 0xbe64, 0xbead, 0xbeac, 0xc514, 0xbeb1, 0xbeaf, 0xbf2c, 0xbf24, + 0xbf25, 0xbf28, 0xbff9, 0xbff7, 0xbffd, 0xbffe, 0xc039, 0xc033, + 0xc0d7, 0xc0d8, 0xc0e4, 0x3aa1, 0xc10e, 0xc13b, 0xc144, 0xc142, + 0xc194, 0xc193, 0xc1d5, 0xc2a7, 0x2e31, 0x2e23, 0x2e28, 0x2e27, + 0x2ec6, 0x2fa3, 0x3021, 0x321b, 0x0110, 0x32c1, + /* 0x3f */ + 0x32c3, 0x332a, 0x3369, 0x3427, 0x37b6, 0x37a7, 0x37a4, 0x37a6, + 0x3790, 0x379e, 0x3794, 0x37a8, 0x37a5, 0x37a2, 0x3791, 0x027b, + 0x3abc, 0x3abd, 0x3ab4, 0x3ab0, 0x3ae4, 0x3b45, 0x3b4b, 0x3b7e, + 0x3b7f, 0x3b7d, 0x3bc3, 0x3dfc, 0x3df7, 0x3df0, 0x3ded, 0x3df1, + 0x3df8, 0x3fe9, 0x41eb, 0x041d, 0x4390, 0x438d, 0x4386, 0x4391, + 0x438a, 0x4408, 0x4450, 0x46ea, 0x46e6, 0x46e2, 0x46e7, 0x46ed, + 0x46e1, 0x4834, 0x4876, 0x4875, 0x4873, 0x48b5, 0x4990, 0x4992, + 0x4be1, 0x4bdf, 0x4bd5, 0x4bf2, 0x4bfe, 0x4c13, 0x4c2e, 0x4d19, + 0x5008, 0x1df5, 0x5005, 0x5009, 0x5006, 0x5003, 0x4ffd, 0x4ffc, + 0x5002, 0x5042, 0x521a, 0x5211, 0x5215, 0x5216, 0x52cc, 0x52cf, + 0x52d0, 0x5322, 0x531e, 0x5321, 0x54e5, 0x0727, 0x5554, 0x54ef, + 0x5553, 0x5551, 0x55ad, 0x5867, 0x5868, 0x58a4, + /* 0x40 */ + 0x5877, 0x5889, 0x5844, 0x588b, 0x5879, 0x585b, 0x5843, 0x5857, + 0x584a, 0x587c, 0x5846, 0x587b, 0x5856, 0x5aa8, 0x5b76, 0x5b72, + 0x5bd6, 0x5bd8, 0x5bd1, 0x5d22, 0x5d20, 0x5d23, 0x5d1e, 0x5d6e, + 0x60a3, 0x6077, 0x60a6, 0x606d, 0x60a2, 0x607c, 0x6084, 0x6068, + 0x6074, 0x6086, 0x60a5, 0x607b, 0x607a, 0x6069, 0x6072, 0x6076, + 0x634a, 0x6337, 0x632a, 0x632d, 0x6346, 0x6328, 0x6326, 0x6342, + 0x632c, 0x6338, 0x632b, 0x6333, 0x6345, 0x6439, 0x65f9, 0x65fa, + 0x67b8, 0x67b7, 0x67bb, 0x67b9, 0x67b4, 0x696f, 0x6987, 0x698f, + 0x69a2, 0x69a3, 0xc431, 0x6a9b, 0x6a9d, 0x6ace, 0x0bcf, 0x6dbd, + 0x6dbf, 0x6d92, 0x0bcd, 0x6def, 0x6dc9, 0x6ea4, 0x6ea8, 0x6eaa, + 0x6f28, 0x6f24, 0x6f25, 0x6f26, 0x6fa9, 0x6fba, 0x6fbe, 0x6fbc, + 0x6fc0, 0x70f0, 0x70df, 0x70e0, 0x70ed, 0x70db, + /* 0x41 */ + 0x70fb, 0x70b9, 0x70da, 0x70eb, 0x70ec, 0x739a, 0x739f, 0x739b, + 0x7397, 0x73a1, 0x750f, 0x7505, 0x7548, 0x0d82, 0x76bc, 0x76ba, + 0x78bf, 0x7b01, 0x7ae8, 0x7aef, 0x7ae4, 0x7ae6, 0x7b02, 0x7aeb, + 0x7ae0, 0x7aed, 0x7ad9, 0xc464, 0x7b14, 0x7aee, 0x0e52, 0x7b13, + 0x7af9, 0x7af8, 0x7d25, 0xc469, 0x7d19, 0x7d20, 0x7d43, 0x7d3f, + 0x7f45, 0x7f4c, 0x7f49, 0x7f4f, 0x7f41, 0x7f3e, 0x7f4d, 0x7f52, + 0x7f4a, 0x7f4e, 0x7f73, 0x7f42, 0x7f51, 0x7f55, 0x7f50, 0x7f6c, + 0x2afd, 0x7f6a, 0x7f53, 0x7f68, 0x8055, 0x8056, 0x811c, 0x811d, + 0x2280, 0x811e, 0x8123, 0x811f, 0x81e1, 0x81cd, 0x81cb, 0x81cc, + 0x81c8, 0x81c9, 0x829b, 0x8294, 0x8292, 0x8296, 0x8293, 0x8295, + 0x828f, 0x831d, 0x8322, 0x8321, 0x83e9, 0x83ef, 0x83e0, 0x83e6, + 0x83e4, 0x8629, 0x862c, 0x8676, 0x8683, 0x8678, + /* 0x42 */ + 0x863c, 0x6343, 0x867a, 0x1051, 0x86f2, 0x879e, 0x879b, 0x879a, + 0x87f6, 0x87f5, 0x88a5, 0x8893, 0x88a4, 0x8a82, 0x8ac7, 0x8bb7, + 0x8c1d, 0x8be2, 0x8bd7, 0x8be3, 0x8be4, 0x8bbc, 0x8bd3, 0x115a, + 0x8b5a, 0x8bd2, 0x8b2d, 0xc4af, 0x8bc4, 0x8bd0, 0x8be5, 0x8c05, + 0x8c07, 0x8be6, 0x8c1b, 0x8be7, 0x8bd8, 0x8bbe, 0x8c17, 0x8bb4, + 0x8bd9, 0x8be8, 0x8bad, 0x8baf, 0x8bc8, 0x8be9, 0x8bea, 0x8dfe, + 0x8dfb, 0x8e00, 0x9072, 0x9070, 0x9046, 0x9059, 0x905e, 0x9048, + 0x904f, 0x9071, 0x9060, 0x905f, 0x906e, 0x9073, 0xc4c0, 0xc4bf, + 0x9047, 0x906d, 0x906f, 0x9081, 0x906c, 0x9078, 0x9083, 0x9049, + 0x9068, 0x9074, 0x9063, 0x906a, 0x8685, 0x9065, 0x9062, 0x90c8, + 0x91d0, 0x91d4, 0x91d1, 0x9203, 0x9342, 0x9363, 0x9356, 0x935b, + 0x9355, 0x9350, 0x932d, 0x9344, 0x9348, 0x9345, + /* 0x43 */ + 0x9382, 0x1265, 0x9362, 0x9485, 0x948d, 0x9536, 0x952f, 0x9531, + 0x9537, 0x96a7, 0x96d9, 0x96f0, 0x96f2, 0x96fd, 0x96e8, 0x96eb, + 0x96ee, 0x96e0, 0x96e9, 0x96ed, 0x96d6, 0x96f8, 0x96d4, 0x96df, + 0x96e7, 0x96d8, 0x96e3, 0x96ef, 0x970f, 0x97ca, 0x3b46, 0x9805, + 0x980c, 0x980d, 0x987f, 0x9880, 0x9881, 0x9901, 0x9903, 0x99f2, + 0x99e2, 0x99e3, 0x99de, 0x99e9, 0x99e8, 0x99e0, 0x9a01, 0x99f5, + 0x99e4, 0x2501, 0x9a77, 0x9b74, 0x9b6f, 0x9b62, 0x9b61, 0x9b6d, + 0x9b73, 0x9b6a, 0x9b69, 0x9d12, 0x9d2d, 0x9d14, 0x9d0f, 0x9d29, + 0x9d16, 0x9d03, 0x9d46, 0x9d5c, 0x9d11, 0x9d06, 0x9cdc, 0x9d2b, + 0x9d2a, 0x9d2c, 0x9d27, 0x9e7a, 0x9f9c, 0x9f99, 0x9f95, 0x9f8b, + 0x9f98, 0x9f96, 0xa032, 0xa1a4, 0xa1aa, 0xa21b, 0x14af, 0xa20d, + 0xa21c, 0xa20a, 0xa220, 0xa208, 0xa21a, 0xa213, + /* 0x44 */ + 0xa211, 0xa35d, 0xa35f, 0xa35e, 0xa360, 0xa3bb, 0xa3bc, 0xa3c1, + 0xa3c0, 0xa3c8, 0xa3ce, 0xa4a7, 0xa4b2, 0xa4b6, 0xa4a5, 0xa4ba, + 0xa4b5, 0xa4ad, 0xa4a4, 0xa4d3, 0xa4b0, 0xa4b1, 0xa51d, 0xa68d, + 0x1541, 0xa691, 0xa6b6, 0xa6b7, 0xa6bd, 0xa6bc, 0xa696, 0xa694, + 0xa6a0, 0xa8a8, 0xa8a6, 0xa984, 0xa996, 0xa988, 0xa99a, 0xaad1, + 0xaacf, 0xab50, 0xab51, 0xab4e, 0xab80, 0xab81, 0xac1b, 0xac17, + 0xac20, 0xac19, 0xac1a, 0xac21, 0xac1e, 0xac18, 0xac1d, 0x1629, + 0xad2d, 0xad24, 0xad27, 0xad2e, 0xad25, 0xad1c, 0xad19, 0x162a, + 0xad23, 0xad1f, 0xad1a, 0xad2b, 0xad1e, 0xade0, 0xae33, 0xaee6, + 0xaefc, 0xaee5, 0xaef8, 0xaef6, 0xaeea, 0xaef2, 0xaeed, 0xaeeb, + 0xaef0, 0xaef1, 0xafc6, 0xafc8, 0xafce, 0xafc5, 0x1696, 0xafcb, + 0xb113, 0xb114, 0xb107, 0xb10c, 0xb21a, 0x1712, + /* 0x45 */ + 0xb217, 0xb206, 0xb216, 0xb207, 0xb210, 0xb209, 0xb219, 0xb215, + 0xb36e, 0xb33b, 0xb33e, 0xb36c, 0xb365, 0xb364, 0xb359, 0xb37c, + 0xb370, 0xb379, 0xb42c, 0xb452, 0xb451, 0xb44c, 0xb500, 0xb510, + 0xb513, 0xb4ff, 0xb4fe, 0xb4ed, 0xb65a, 0xb658, 0xb65c, 0xb6da, + 0xb778, 0xb75e, 0xb767, 0xb764, 0xb813, 0xb823, 0xb841, 0xb83f, + 0xb840, 0xb8ed, 0xb8e3, 0xb8ea, 0xb8f0, 0xb8e6, 0xb8e9, 0xb8f1, + 0xb8ee, 0xb9d4, 0xb9d1, 0xb9dc, 0xb9ec, 0xbc69, 0xbc6d, 0xbc57, + 0xbc66, 0xbcf9, 0xbc4a, 0xbc60, 0xbc56, 0xbc59, 0xbc4c, 0xbc6a, + 0xbc62, 0xbc63, 0xbc70, 0xbc5f, 0xc50d, 0xbc64, 0xbc5d, 0xbc68, + 0xbc9f, 0xbeba, 0xbeb8, 0xbebc, 0xbeb9, 0xbeb4, 0xbf3b, 0xbf2d, + 0xbf38, 0xbf2f, 0xbf32, 0xc041, 0xc0cb, 0xc0de, 0xc0dd, 0xc0da, + 0xc0dc, 0xc110, 0xc14f, 0xc149, 0xc198, 0xc196, + /* 0x46 */ + 0xc197, 0xc1c7, 0x2c9c, 0xc1da, 0xc1d8, 0xc2a8, 0x2c0a, 0x2c9d, + 0x2ecb, 0x2f38, 0x2f39, 0x2fa6, 0x3223, 0x3222, 0x3221, 0x33ce, + 0x3592, 0x3591, 0x37ec, 0x37e0, 0x37ed, 0x3808, 0x37e5, 0x37ee, + 0x37e4, 0x37eb, 0x37e3, 0x37ea, 0x380a, 0xc359, 0x3ad1, 0x3ae3, + 0x3ad4, 0x3ad0, 0x3ad9, 0x027e, 0x1be1, 0x3ada, 0x3ad3, 0x3b4c, + 0x3b4d, 0x3b7c, 0x3b80, 0x3bcc, 0x3dff, 0x3e08, 0xc108, 0x3e01, + 0xc36b, 0x3e00, 0x3fed, 0x3ff3, 0x3fee, 0x3ff1, 0x3ff0, 0x3fde, + 0x4051, 0x4382, 0x43a9, 0x4398, 0x439d, 0x439a, 0x439e, 0x439f, + 0x43a6, 0x43a7, 0x4409, 0x442f, 0x4571, 0x456d, 0x4572, 0x46ef, + 0x46f0, 0x483b, 0x4839, 0x483c, 0x4838, 0x6afd, 0x483a, 0x4878, + 0x4879, 0x4877, 0x4998, 0x499c, 0x4999, 0x499a, 0x4c11, 0x4c0a, + 0x4bfd, 0x4c0f, 0x4c19, 0x4c03, 0x4c15, 0x4c0c, + /* 0x47 */ + 0x4c09, 0x4c12, 0x4c34, 0x4c2a, 0x4c08, 0x4c2d, 0x4c28, 0xc3b1, + 0x4c2c, 0x4c26, 0x4c33, 0x05a7, 0x4d1a, 0x4d1e, 0x5007, 0x502c, + 0x5032, 0x5028, 0x5031, 0x5029, 0x5030, 0x502a, 0x5044, 0x502e, + 0x52d1, 0x5324, 0x54f7, 0x54f4, 0x54f3, 0x54f8, 0x58b5, 0x5896, + 0x5898, 0x5895, 0x5891, 0x58b2, 0x589e, 0x5859, 0x58a3, 0x589a, + 0x589b, 0x0f20, 0x7f83, 0x5bda, 0x5bdf, 0x5c16, 0x5d1f, 0x5d2d, + 0x5d2e, 0x5d2b, 0x60b8, 0x60bb, 0x60bf, 0x60ba, 0x60d5, 0x60e3, + 0x60c1, 0x60be, 0x60bd, 0x60b4, 0x60c2, 0x60a1, 0x6087, 0x60d7, + 0x60ca, 0x60b5, 0x60da, 0x60d9, 0x60b3, 0x60d8, 0x6367, 0x6371, + 0x6362, 0x635c, 0x6368, 0x6352, 0x6356, 0x3809, 0x2e42, 0x64a0, + 0x6600, 0x65fe, 0x65ff, 0x67cb, 0xc428, 0x67ca, 0x67a9, 0x67c8, + 0x69b4, 0x69ac, 0x69aa, 0x69a9, 0x6b0e, 0x6be9, + /* 0x48 */ + 0x6bed, 0x6bf2, 0x6beb, 0x6bee, 0x6de8, 0x6ddb, 0x6dd7, 0x6de3, + 0x6de5, 0x6dee, 0x6dd5, 0x6eb3, 0x6f2d, 0x6fc1, 0x6fc3, 0x710c, + 0x710e, 0x7107, 0x7117, 0x7109, 0x7116, 0x719a, 0x719c, 0x73b4, + 0x73b7, 0x73b3, 0x3b4e, 0x7513, 0x7514, 0x76e6, 0x76dc, 0x76e8, + 0x76e5, 0x782e, 0x782c, 0x782b, 0x78cd, 0x7b3d, 0x7b32, 0x7b2d, + 0x7b45, 0x7b3e, 0x7b50, 0x7b25, 0x7b53, 0x7b23, 0x7d37, 0x7d38, + 0x7d47, 0x7d3d, 0x7d3e, 0x7d49, 0x7d4a, 0x7d1d, 0x21e9, 0x7fa5, + 0x7f8c, 0x7f8d, 0x7f89, 0x7f96, 0x7f85, 0x7f8f, 0x7f77, 0x7f8e, + 0x7f82, 0x7f8a, 0x7f88, 0x7f7b, 0x7f97, 0x7f7d, 0x7f79, 0x8059, + 0x8124, 0x812d, 0x812e, 0x812b, 0xc476, 0x81da, 0x81d8, 0x81d6, + 0x8287, 0x82a0, 0x8328, 0x8325, 0x831f, 0x83f3, 0x83f7, 0x83f6, + 0x862b, 0x865b, 0x8648, 0x23cb, 0x865c, 0x866d, + /* 0x49 */ + 0x869d, 0x8699, 0x868c, 0x8691, 0x869b, 0x869a, 0x869c, 0x8695, + 0x868d, 0x8696, 0x86a5, 0x872a, 0x87a1, 0x87a4, 0x87ad, 0x88a9, + 0x88ae, 0x88b0, 0x8c0d, 0x8b63, 0x8b71, 0x8c51, 0x8c54, 0x8c2a, + 0x8c44, 0x8c55, 0x8c99, 0x8c39, 0x8c3f, 0x8c3e, 0x8c4f, 0x8c4d, + 0x8c35, 0x8c40, 0x8c31, 0x8bd5, 0x8c2b, 0x8c33, 0x8c41, 0x8c56, + 0x8c4c, 0x8c46, 0x8c3c, 0x8c45, 0x8c43, 0x8c3d, 0x8c70, 0x8c57, + 0x8c38, 0x8c58, 0x1165, 0x8c37, 0x8e07, 0x8e06, 0x8e09, 0x90ab, + 0x9090, 0x9093, 0x90bc, 0x90a9, 0x909e, 0x90bf, 0x90aa, 0x9091, + 0x90a4, 0x909a, 0x90a7, 0x90a1, 0x909c, 0x90a2, 0x909b, 0x909f, + 0x9094, 0x908f, 0x8ef0, 0x9092, 0x9095, 0x90a5, 0x90a6, 0x9204, + 0x939c, 0x9379, 0x937a, 0x937e, 0x937b, 0x9371, 0x9381, 0x937f, + 0x937c, 0x937d, 0x9375, 0x9376, 0x948e, 0x948f, + /* 0x4a */ + 0x953e, 0x953f, 0x9540, 0x9541, 0x1304, 0x970d, 0x9717, 0x9710, + 0x970e, 0x96ea, 0x971d, 0x9703, 0x9722, 0x9704, 0x9700, 0x9720, + 0x9721, 0x9723, 0x9713, 0x9709, 0x9711, 0x97cb, 0x97ce, 0x97d0, + 0x97cc, 0x97d4, 0x3adb, 0x9809, 0x980b, 0x9885, 0x9906, 0x990d, + 0x1364, 0x9914, 0x990f, 0x9a09, 0x9a14, 0x9a0b, 0x99fc, 0x9a04, + 0x9a0a, 0x9a00, 0x99fd, 0x9a07, 0x9a06, 0x9a11, 0x9a79, 0x9a78, + 0x9b88, 0x9b80, 0x9b8b, 0x9d59, 0x9d61, 0x9d75, 0x1423, 0x9d55, + 0x9d5b, 0x9d5f, 0x9d52, 0x9d62, 0x9d72, 0x9d5d, 0x9d68, 0x9d71, + 0x9d65, 0x9d66, 0x9d67, 0x9d76, 0x9d4c, 0x9d60, 0x9d74, 0x9d50, + 0x9e8a, 0x9e81, 0x9e86, 0x9e7f, 0x9e80, 0x9fa5, 0x9fa7, 0x9fa8, + 0x9fa6, 0x9faf, 0x7f95, 0x9fb1, 0xa035, 0xa039, 0xa1c3, 0xa230, + 0xa22a, 0xa22b, 0xa22d, 0xa22e, 0xa22c, 0xa223, + /* 0x4b */ + 0xa221, 0xa222, 0xa36c, 0xa381, 0xa38f, 0xa380, 0xa3d0, 0xa3cd, + 0xa3d5, 0xa3d4, 0xa4d1, 0xa4be, 0xa4cb, 0xa4ce, 0xa4bd, 0xa4d0, + 0xa704, 0xa6d5, 0xa6d0, 0xa6d3, 0xa6fb, 0xa6d8, 0xa6d1, 0xa6fd, + 0xa6d9, 0xa6d6, 0xa6e6, 0xa6f9, 0xa9a1, 0xa99d, 0xa99e, 0x28d9, + 0xaaff, 0xab5f, 0xab57, 0xab60, 0xab59, 0xac2c, 0xac25, 0xac27, + 0xac30, 0xac24, 0xac26, 0xac2d, 0xac2e, 0xac29, 0xac31, 0xad45, + 0xad47, 0xad52, 0xad4a, 0xad50, 0xad46, 0xad4f, 0xad4e, 0xad53, + 0xaf21, 0xaf09, 0xaf1a, 0xaf1b, 0x7115, 0xaf10, 0xc4f9, 0xaf14, + 0xaf0e, 0xaf12, 0xaf0b, 0xafcf, 0xafd2, 0xafd0, 0xafd4, 0xafd3, + 0xafd1, 0x3518, 0xc4fb, 0xb009, 0xb11c, 0xb127, 0xb125, 0xb11b, + 0xb129, 0xb11f, 0xb130, 0xb124, 0xb128, 0xb119, 0xb12f, 0xb224, + 0xb221, 0xb225, 0xb226, 0xb227, 0xb276, 0xb366, + /* 0x4c */ + 0xb375, 0xb369, 0xb37e, 0xb38f, 0xb374, 0x8e10, 0xb3ad, 0xb42b, + 0xb42a, 0xb458, 0xb522, 0xb51d, 0xb52b, 0xb52c, 0xb52d, 0xb533, + 0xb51b, 0xb527, 0xb52a, 0xb528, 0xb53b, 0xb67e, 0xb671, 0xb679, + 0xb678, 0xb670, 0xb66d, 0xb67d, 0xb675, 0xb676, 0xb6de, 0xb766, + 0xb783, 0xb787, 0xb77b, 0xb789, 0xb786, 0xb782, 0xb77c, 0xb781, + 0xb843, 0xb845, 0xb8f7, 0xb8f9, 0xb8fa, 0xba05, 0xb9fe, 0xba0f, + 0xb9ff, 0xb9fa, 0xba09, 0xba20, 0xba0c, 0xba3c, 0xba22, 0xb9f8, + 0xba0a, 0xba08, 0xb9f7, 0xbc8e, 0xbc77, 0xbc8b, 0xbcb4, 0xbc8a, + 0xbc9a, 0xbc79, 0xbc83, 0xbc7f, 0xbca1, 0xbc8f, 0xbca3, 0xbc81, + 0xbc94, 0xbc7e, 0xbc82, 0xbc90, 0xbca5, 0xbcad, 0xbc9d, 0xbe67, + 0xbe69, 0xbecb, 0xbec8, 0xbed1, 0xbf40, 0xbf4b, 0xbf49, 0xbf46, + 0xbf3e, 0xbf43, 0xbf3f, 0xbfa5, 0xbfa7, 0xc04e, + /* 0x4d */ + 0xc04d, 0x499b, 0xc0e5, 0xc0e1, 0xc0e2, 0xc116, 0xc114, 0xc51b, + 0xc159, 0xc151, 0xc15f, 0xc14a, 0xc157, 0xc158, 0xc1ca, 0xc1db, + 0xc1de, 0xc1e0, 0xc1e1, 0xc1df, 0xc1e2, 0xc1e3, 0xc292, 0xc2bf, + 0xc2be, 0x2c0b, 0x2e52, 0x2e4e, 0x00b9, 0xc313, 0x2fa7, 0x3226, + 0x3227, 0x32c6, 0x330b, 0x336a, 0x3378, 0x381a, 0x3816, 0x3819, + 0x3817, 0x381b, 0x3818, 0x3820, 0x3937, 0x3aec, 0x3b81, 0xae3d, + 0x3e0f, 0x3ead, 0x3ffb, 0x4052, 0x43af, 0x43b7, 0x43b2, 0x4578, + 0x45ac, 0x4700, 0x46fe, 0x4702, 0x46fd, 0x4703, 0x4840, 0x4843, + 0x4842, 0x48b7, 0x49a2, 0x4c00, 0x4c35, 0x4c41, 0x4c05, 0x2e53, + 0x4c50, 0x4c4e, 0x4c53, 0x5053, 0x5050, 0x5057, 0x505f, 0x5055, + 0x50ea, 0x5226, 0xb430, 0x522a, 0x5228, 0x522c, 0x522d, 0x52d4, + 0x5507, 0x5558, 0x5559, 0x58c5, 0x58cd, 0x58c7, + /* 0x4e */ + 0x58e8, 0x084b, 0x5a32, 0xc297, 0x5bde, 0x5d32, 0x34c8, 0xc415, + 0x60f1, 0x60f0, 0x60ec, 0x6109, 0x60f9, 0x60f5, 0x60fe, 0x6374, + 0x6381, 0x637c, 0x6375, 0x6389, 0x6382, 0x6397, 0x6386, 0x637d, + 0x6393, 0x639c, 0x6376, 0x6380, 0x6445, 0x30a1, 0x6603, 0x67c9, + 0x67cd, 0x67d0, 0x69ad, 0x69c5, 0x6aa2, 0x6bec, 0x6bf6, 0x6bf3, + 0x6df3, 0x6dfa, 0x6df9, 0x6df5, 0x6df4, 0x6df8, 0x6eb6, 0x6eb4, + 0x6f32, 0x6fcd, 0x6fc8, 0x6fce, 0x6fca, 0x712a, 0x7121, 0x711d, + 0x73bd, 0x73be, 0x73c2, 0x0cf1, 0x73c9, 0x751f, 0x76f1, 0x76ed, + 0x76f2, 0x76e0, 0x76f7, 0x7830, 0x7837, 0x7831, 0x7836, 0x78c8, + 0x7b6d, 0x7b69, 0x7b7d, 0x7b61, 0x7b70, 0x7b71, 0x7b73, 0x7b76, + 0x7b75, 0x7b78, 0x7b79, 0x7b64, 0x7b6e, 0x7d51, 0x7d4f, 0x7d22, + 0x7faf, 0x7faa, 0x7fa3, 0x7f9d, 0x7f9c, 0x7fa1, + /* 0x4f */ + 0x7fb6, 0x7fac, 0x7fa2, 0x7fa7, 0x7fb0, 0x7fa9, 0x7fc3, 0x8131, + 0x8132, 0x8133, 0x8134, 0x8137, 0x813c, 0x81d9, 0x81dd, 0x81de, + 0x81df, 0x81e0, 0x82a5, 0x82aa, 0x82a2, 0x82a3, 0x8404, 0x8403, + 0x83fe, 0x8428, 0x86af, 0x86ad, 0x86a6, 0x87ac, 0x87a5, 0x87b0, + 0x87b1, 0x8801, 0x88b2, 0x88d2, 0x88f1, 0x8bd1, 0x8c47, 0x8cc9, + 0x8ca7, 0x8cc8, 0x8c95, 0x8c8e, 0x8c91, 0x8c7d, 0x8cee, 0x8c8d, + 0x8c8c, 0x8cb0, 0x8c96, 0x8c42, 0x8c7c, 0x8cb1, 0x8cb2, 0x8c84, + 0x8c9d, 0x8ca1, 0x8c98, 0x8cb3, 0x8c22, 0x8c7b, 0x8c8a, 0x8cce, + 0x8c80, 0x8c97, 0x8cb4, 0x8cb5, 0x8c9a, 0x8c9f, 0x8c93, 0x8e12, + 0x8e0b, 0x8e0e, 0x90a3, 0x90cc, 0x90dc, 0x90e1, 0x90de, 0x90d2, + 0x90db, 0x90d9, 0x90d7, 0x90d4, 0x90c9, 0x90eb, 0x90da, 0x90d1, + 0x9104, 0x90ca, 0x90e2, 0x91d7, 0x938c, 0x9399, + /* 0x50 */ + 0x93a2, 0x9396, 0x9394, 0x939f, 0x1267, 0x938e, 0x9403, 0x9494, + 0x9493, 0x9544, 0x972f, 0x9735, 0x972b, 0x9732, 0x972d, 0x9736, + 0x1314, 0x9731, 0x9712, 0x9733, 0x971f, 0x9734, 0x9740, 0x973f, + 0x9741, 0x97d3, 0x9889, 0x9918, 0x9910, 0x9a1a, 0x9a25, 0x9a1e, + 0x9b92, 0x9b95, 0x9b93, 0x9d84, 0x9d9a, 0x9d89, 0x9d8d, 0x9d88, + 0x9d91, 0x9d9b, 0x9d9c, 0xb148, 0x9e8e, 0x9e92, 0x9fc5, 0x9fc1, + 0x9fb8, 0x9fbe, 0x9fb5, 0x9fc7, 0xa03c, 0x1489, 0xa1ec, 0xa23f, + 0xa239, 0xa237, 0xa3a1, 0xa394, 0xa3a0, 0xa3de, 0xa3db, 0xa3df, + 0xa3dc, 0xa4d6, 0xa4dc, 0xa4dd, 0xa4e0, 0xa4e3, 0xa4e1, 0xa718, + 0xa719, 0xa753, 0xc4ec, 0xa744, 0xa70e, 0xa70f, 0xa747, 0xa717, + 0xa71d, 0xa711, 0xa8b4, 0xa8b6, 0xa9b7, 0xa9be, 0xa9c2, 0xa9b4, + 0xab31, 0xab15, 0xab83, 0xac3b, 0xac36, 0xac42, + /* 0x51 */ + 0xac50, 0xac40, 0xac34, 0xac38, 0xac3d, 0xac3e, 0xac35, 0xac3a, + 0xac46, 0xac37, 0xac39, 0xac45, 0xad77, 0xad5d, 0xad6a, 0xad76, + 0xad6b, 0xad6c, 0xad65, 0xad64, 0xad71, 0xad5f, 0xad72, 0xadfe, + 0xadff, 0xae3e, 0xaf2b, 0xaf36, 0xaf2d, 0xaf39, 0xaf3f, 0xaf3b, + 0xaf33, 0xaf42, 0xaf3a, 0xafd5, 0xafd8, 0xafd9, 0xb00d, 0xb00a, + 0xb039, 0xb03a, 0xb13d, 0xb145, 0xb13a, 0xb137, 0xb13e, 0xb142, + 0xb387, 0xb38c, 0xb382, 0xb36b, 0xb3a0, 0xb39a, 0xb390, 0xb38e, + 0xb3a1, 0xb3bd, 0xb3b2, 0xb3b5, 0xb3b7, 0xb3aa, 0xb3a2, 0xb3a5, + 0xb3ae, 0xb3ab, 0xb3bc, 0xb432, 0xb45a, 0xb564, 0xb55c, 0xb54d, + 0xb53f, 0xb53e, 0xb552, 0xb558, 0xb557, 0xb55e, 0xb553, 0xb554, + 0xb556, 0xab65, 0xb684, 0xb685, 0xb686, 0xb797, 0xb7a1, 0xb7a2, + 0x180b, 0xc50a, 0xb7a3, 0xb7a6, 0x1817, 0xb815, + /* 0x52 */ + 0xb824, 0xb84a, 0xb849, 0xb848, 0xb84b, 0xb90e, 0xb562, 0xb90b, + 0xb90a, 0xb908, 0xb906, 0xba43, 0xba47, 0xba3f, 0xba46, 0xba50, + 0x186d, 0xba4b, 0x1870, 0xba52, 0xbcd7, 0xbcbf, 0xbcd8, 0xbce0, + 0xbce7, 0xbcb8, 0xbcd5, 0xbcef, 0xbce6, 0xbce4, 0xbcd4, 0xbcd6, + 0xbcea, 0x18ed, 0xbcbb, 0xbce9, 0xc510, 0xbe6d, 0xbe70, 0xbe73, + 0xbe72, 0xbed4, 0xbece, 0xbed5, 0xbf5a, 0xbf58, 0xbf52, 0xbf50, + 0xbf55, 0xbf4e, 0xbf4d, 0xbfcb, 0xbfcc, 0xbfcd, 0xbfd1, 0xc058, + 0xc063, 0xc05e, 0xc054, 0xc05b, 0xc0e9, 0xc0e7, 0xc0e8, 0xc11d, + 0xc167, 0xc15a, 0xc15c, 0xc15b, 0xc161, 0xc1a1, 0x198d, 0xc1a4, + 0xc1e9, 0xc1ef, 0xc1e5, 0xc1f5, 0xc1eb, 0xc1ed, 0xc296, 0xc295, + 0xc2b3, 0xc2b5, 0xc2b1, 0x00a7, 0x2e4d, 0x3024, 0x322b, 0x33cf, + 0x34c9, 0x3836, 0x3831, 0x3854, 0x383a, 0x3838, + /* 0x53 */ + 0x3939, 0x3938, 0x3af4, 0x3af3, 0x3af6, 0x3afc, 0x3af5, 0x3af1, + 0x3c9c, 0x3e18, 0x3e1a, 0x3ffc, 0x3ffe, 0x4003, 0x4053, 0x422b, + 0x43c6, 0x43c1, 0x457b, 0x4706, 0x4849, 0x48b8, 0x49a3, 0x4c52, + 0x4c4d, 0x4c5f, 0x4c5e, 0x4c61, 0x4d23, 0x508c, 0x506f, 0x5075, + 0x5074, 0x5071, 0x5070, 0x506c, 0x5326, 0x5508, 0x1e07, 0x58f0, + 0x58ef, 0x58fb, 0x5910, 0x590c, 0x58f6, 0x58fe, 0x5b7c, 0x5be1, + 0x5d38, 0x5d6f, 0x6118, 0x6115, 0x611c, 0x6110, 0x6135, 0xc417, + 0x6117, 0x611d, 0x6126, 0x6128, 0x6129, 0x612a, 0x611a, 0xc416, + 0x4707, 0x63ab, 0x63ac, 0x63a1, 0x63ae, 0x63a3, 0x63a7, 0x6448, + 0x6504, 0x65fd, 0x0a5a, 0x6608, 0x67d2, 0x69c6, 0x69be, 0x6a1c, + 0x6aa6, 0x6aa7, 0x6aab, 0x6b00, 0x6bfb, 0x6bfc, 0x6bf9, 0x6c01, + 0x6e06, 0x6e04, 0xc43c, 0x6f34, 0x7136, 0x7132, + /* 0x54 */ + 0x7142, 0x712d, 0x7135, 0x73d8, 0x7523, 0x7520, 0x7701, 0x7700, + 0x7703, 0xc2bc, 0x783c, 0x7841, 0x7835, 0x78c9, 0x7b8e, 0x7b9e, + 0x7b99, 0x7bb4, 0x7baa, 0x7b9f, 0x7b96, 0x7b9d, 0x7bc3, 0x7b74, + 0x7bab, 0x0eaf, 0x7d63, 0x7d5b, 0x7d5a, 0x7fc5, 0x7fc4, 0x7fcf, + 0x7fc8, 0x7fa4, 0x7fbd, 0x7fd3, 0x8060, 0x813b, 0x81e3, 0x81e7, + 0x82a8, 0x82ac, 0x82a9, 0x832a, 0x8408, 0x8409, 0x86b9, 0x88c1, + 0x88c2, 0x88b8, 0x8ce1, 0x8ceb, 0x8ce5, 0x8cfa, 0x8ce4, 0x8d0b, + 0x8cd7, 0x8cef, 0x8ce0, 0x8cec, 0x8cfb, 0xc4b0, 0x8cd3, 0x8ce6, + 0x8cfc, 0x8ce3, 0x8ccf, 0x8cda, 0x8cdc, 0x8cd2, 0x8ca4, 0x116b, + 0x8e17, 0x8e16, 0x90f2, 0x90fc, 0x9118, 0x90f6, 0x90fe, 0x90f3, + 0x90f7, 0x9101, 0x90f9, 0x9106, 0x90f5, 0x9110, 0x90df, 0x9103, + 0x9108, 0x91d8, 0x9205, 0x9397, 0x93b3, 0x93ae, + /* 0x55 */ + 0x93af, 0x93a7, 0x93b1, 0x93a8, 0x93ac, 0x93ab, 0x9404, 0x949a, + 0x954a, 0x9742, 0x9758, 0x974b, 0x9745, 0x9749, 0x974c, 0x9759, + 0x9756, 0x131b, 0x9746, 0x9744, 0x975b, 0x9769, 0x988e, 0x988f, + 0x991e, 0x86bc, 0x9a2f, 0x9b9e, 0x9b9d, 0x9b9f, 0x9b9c, 0x9db4, + 0x9dae, 0x9dab, 0x9db3, 0x9daf, 0x9dc2, 0x9e93, 0x9e95, 0x9e96, + 0x9e97, 0x9fcf, 0x9fce, 0x9fcb, 0xa04b, 0xa246, 0xa243, 0xa245, + 0xa251, 0xa3ae, 0xa3af, 0xa3b0, 0xa3b8, 0xa3e2, 0xa3e3, 0xa3e6, + 0xa4ed, 0xa4ea, 0xa53a, 0xa759, 0xa784, 0xa75f, 0xa77c, 0xa75c, + 0xa758, 0xa755, 0xa75d, 0xa77e, 0xa780, 0xa783, 0xa757, 0x1563, + 0xa75e, 0xa8ba, 0xa9d5, 0xab58, 0xab68, 0xab67, 0xac4a, 0xac4c, + 0xac52, 0xac49, 0xac4e, 0xac47, 0xac4d, 0xac4b, 0xac4f, 0xad7e, + 0xad87, 0xad83, 0xad89, 0x69ca, 0xad86, 0xad88, + /* 0x56 */ + 0xae47, 0xae42, 0xae49, 0xae48, 0x1680, 0x1684, 0x167f, 0xaf44, + 0xaf51, 0xaf46, 0xaf47, 0xafe4, 0xb00f, 0xb03f, 0xb14b, 0xb157, + 0xb152, 0x16f1, 0xb151, 0xb158, 0xb15e, 0xb153, 0xb15d, 0xb14d, + 0xb23c, 0xb23f, 0xb246, 0xb23e, 0xb244, 0xb245, 0xb241, 0xb238, + 0xb242, 0xb243, 0xb27a, 0xb3a3, 0xb3ba, 0xb3c0, 0xb3c4, 0xb3c6, + 0xb3cb, 0xb461, 0xb57a, 0xb573, 0xb572, 0xb574, 0xb580, 0xb581, + 0x2947, 0xb695, 0xb68f, 0xb690, 0xb692, 0xb694, 0xb68b, 0xb6e6, + 0xb7b2, 0xb7b8, 0xb7bd, 0xb7be, 0xb7ce, 0xb7ba, 0xb816, 0xb826, + 0xb825, 0xb84c, 0xb850, 0xb84e, 0xb851, 0xb852, 0xb914, 0xb915, + 0xb91b, 0xba82, 0xba99, 0xba9a, 0xba7d, 0xba85, 0xba86, 0xba9c, + 0xba79, 0xba7b, 0xba80, 0xba83, 0xba81, 0xbd1e, 0xbd1b, 0xbd2a, + 0xbcfb, 0xbd05, 0xbd20, 0xbd11, 0xbd04, 0xbcfd, + /* 0x57 */ + 0xbd03, 0xbd10, 0xbd18, 0xbd0a, 0xbd4e, 0xbd09, 0xbd07, 0xbd1c, + 0x191c, 0xbe77, 0xbe76, 0xbed8, 0xbed9, 0xbf61, 0xbf5c, 0xbf5e, + 0xbf60, 0xbfaa, 0xbfd6, 0xbfd8, 0xc009, 0xc008, 0xc06b, 0xc065, + 0xc073, 0xc074, 0xc0ed, 0xc124, 0xc125, 0xc16a, 0xc1a7, 0xc1a8, + 0xc20b, 0xc1fa, 0xc1f9, 0xc1ff, 0xc204, 0xc1f6, 0xc205, 0xc299, + 0xc2ab, 0xc2bd, 0xc2b8, 0x00a8, 0x2e64, 0x2e5a, 0x2f72, 0x337a, + 0x3595, 0x385f, 0x3861, 0x385e, 0x385a, 0x385c, 0x385d, 0x386e, + 0x3857, 0x3858, 0x3b02, 0x3b0b, 0x3b08, 0x3b51, 0x3e25, 0x3e28, + 0x3e23, 0x3e21, 0x3e24, 0x3e29, 0x4006, 0x400a, 0x43ca, 0x43cc, + 0x43cb, 0x43cf, 0x457f, 0x457c, 0x45d6, 0x4709, 0x470b, 0x4776, + 0x487d, 0x49a5, 0x4c5b, 0x4c5c, 0x4c5d, 0x4c65, 0x506d, 0x5082, + 0x5083, 0x5087, 0x5095, 0x508a, 0x52d6, 0x5328, + /* 0x58 */ + 0x550d, 0x592e, 0xc3ee, 0x592d, 0x5921, 0x5919, 0x5a3b, 0x5a3c, + 0x5a3a, 0x5b7e, 0x5d3b, 0x6147, 0x6139, 0x6134, 0x6136, 0x6146, + 0x613b, 0x6141, 0x6145, 0x63c0, 0x63c4, 0x63ba, 0x63bd, 0x63be, + 0x64a3, 0x660c, 0x67d9, 0x69cd, 0x6aae, 0x6bff, 0x6c24, 0x6ebb, + 0x6ebc, 0x6f36, 0x6fd5, 0x6fd3, 0x6fd6, 0x713c, 0x713f, 0x73de, + 0x73e3, 0x7527, 0x7529, 0x0d8b, 0x7705, 0x7707, 0x770c, 0x78d0, + 0x7bbe, 0x7bbc, 0x7bd0, 0x7bc2, 0x7bb5, 0x7bc9, 0x7d66, 0x0f2b, + 0x7fd5, 0x7fe2, 0x7fdc, 0x7fe3, 0x7fda, 0x7fc2, 0x7fe8, 0x81e9, + 0x82af, 0x82ad, 0x82ae, 0x840b, 0x86c1, 0x87b6, 0x87b9, 0x88c0, + 0x8ca5, 0x8d28, 0x8d22, 0x8d29, 0x8d18, 0x8d1f, 0x8d1c, 0x8d12, + 0x8d2a, 0x117a, 0x8d21, 0x8d2b, 0x8d17, 0x8cf0, 0x8d16, 0x8d23, + 0x912b, 0x9126, 0x913d, 0x9122, 0x913a, 0x9131, + /* 0x59 */ + 0x9132, 0x9154, 0x9121, 0x9135, 0x1209, 0x912e, 0x9130, 0x912f, + 0x9136, 0x91da, 0x91d9, 0x93bb, 0x93bc, 0x93b7, 0x93c2, 0x93bd, + 0x93b2, 0x126d, 0x7144, 0x7bd1, 0x9752, 0x976b, 0x9767, 0x131f, + 0x9761, 0x976c, 0x9751, 0x9774, 0x9777, 0x976f, 0x976d, 0x9768, + 0xc4d1, 0x9784, 0x9890, 0x9892, 0x9893, 0x991f, 0x9a31, 0x9a38, + 0x9a39, 0x9a37, 0x9bab, 0x9dc3, 0x9dc8, 0x9dcb, 0x9dcf, 0x9e98, + 0x9fd4, 0x9fd3, 0x9fd8, 0x9fd9, 0x9fdd, 0x9fd1, 0x9fd6, 0xa03e, + 0xa258, 0xa257, 0xa255, 0xa3c4, 0xa3e4, 0xa4ee, 0xa4ef, 0xa4f3, + 0xa4f2, 0xa4f0, 0xa7ab, 0xa79a, 0xa7af, 0xa797, 0x156a, 0x156c, + 0xa7bf, 0xa794, 0xa793, 0xa8be, 0xa8bb, 0xa8bc, 0xa9d9, 0xab6c, + 0xac53, 0xac54, 0xac5b, 0xac58, 0xac56, 0xac57, 0xad9f, 0xad94, + 0xad96, 0xad97, 0xae4a, 0xae4b, 0xaf55, 0xaf5a, + /* 0x5a */ + 0xaf5e, 0xaf5f, 0xaf59, 0xaf5b, 0xaf58, 0xaf54, 0xafe8, 0xafeb, + 0xafec, 0xb013, 0xb166, 0xb16b, 0xb162, 0xb169, 0xb163, 0xb15f, + 0xb14e, 0xb248, 0xb24a, 0xb3e3, 0xb3db, 0xb3d8, 0xb3d6, 0xb586, + 0xb590, 0xb591, 0xb588, 0xb594, 0xb583, 0x17b2, 0xb59c, 0xb58d, + 0xb585, 0xb698, 0xb69a, 0xb69c, 0xb6e7, 0xb7c5, 0xb7d0, 0xb7d1, + 0xb819, 0xb827, 0x181d, 0xb854, 0xb92d, 0xb922, 0x182d, 0xb91f, + 0xbabd, 0xbaae, 0xbabb, 0xbaad, 0xbabc, 0xbab9, 0xbab4, 0xbacb, + 0xbab7, 0xbab3, 0xbaba, 0xbab6, 0xbacd, 0xbabe, 0xbac9, 0xc50b, + 0xbd5f, 0xbd3b, 0xbd61, 0xbd5c, 0xbd8a, 0xbd5a, 0xbd4d, 0xbd46, + 0xbd44, 0xbd3d, 0xbd40, 0xbd3c, 0xbd8c, 0xbd41, 0xbd4c, 0xbd3e, + 0xbd4a, 0xbe7c, 0xbe7a, 0xbf65, 0xbf6e, 0xbf69, 0xbf6a, 0xbf6f, + 0xbf6c, 0xbf70, 0xbf68, 0xbf6b, 0x1945, 0xbfac, + /* 0x5b */ + 0xbfde, 0xbfdd, 0xbfdc, 0x63c5, 0xc08c, 0xc083, 0xc082, 0xc088, + 0xc085, 0xc081, 0xc0f5, 0xc0ef, 0xc0f4, 0xc0f2, 0xc0f6, 0xc0f3, + 0xc0f0, 0xc0f1, 0xc12b, 0xc127, 0xc128, 0xc16c, 0xc1ae, 0xc20e, + 0xc21b, 0xc216, 0xc21f, 0xc222, 0xc220, 0xc221, 0xc214, 0xc213, + 0xc29d, 0xc29c, 0xc29e, 0xc29f, 0x2e6b, 0x32c8, 0x3878, 0x3876, + 0x3870, 0x3871, 0x3b0a, 0x3e2c, 0x4711, 0x487e, 0x4c57, 0x4c66, + 0x4c69, 0x4c67, 0x4c68, 0x4c71, 0x4c6f, 0xbfae, 0x508b, 0x5096, + 0x5235, 0x523a, 0x526b, 0x5516, 0x5943, 0x5946, 0x593f, 0x593b, + 0x593d, 0x5ab1, 0x5ab2, 0x5be4, 0x5d40, 0x615d, 0x6151, 0x614d, + 0x614c, 0x615b, 0x63d4, 0x63d2, 0x63ca, 0x63c8, 0x63d0, 0x63c9, + 0x6449, 0x64a4, 0x6612, 0x660f, 0x6611, 0x67db, 0x67dd, 0x67dc, + 0x69d4, 0x6a21, 0x6ab2, 0x6c04, 0x6c02, 0x6e11, + /* 0x5c */ + 0x6e16, 0x6e10, 0x6ebe, 0x8e1a, 0x714c, 0x714a, 0x73f2, 0x73f1, + 0x752a, 0x752c, 0x752f, 0x7531, 0x7711, 0x7712, 0x784b, 0x7bdb, + 0x7bd6, 0x7bdd, 0x7be2, 0x7be4, 0x7be0, 0x7bdf, 0x7be3, 0x7d6e, + 0x7d71, 0x7fe9, 0x7fea, 0x8063, 0x81eb, 0x81ea, 0x86bd, 0x86bb, + 0x86c6, 0x86cc, 0x86c8, 0x63cf, 0x86c9, 0x86ca, 0x86cf, 0x86d0, + 0x87ba, 0x87fb, 0x8803, 0x88c4, 0x8d49, 0x8d53, 0x8d36, 0x8d4a, + 0x8d41, 0x8d4e, 0x8d19, 0x8d4d, 0x8d45, 0x8d4c, 0x8d47, 0x8d48, + 0x8d4f, 0x8d37, 0x8d42, 0x914a, 0x9146, 0x120a, 0x9149, 0x914f, + 0x9151, 0x914c, 0x120c, 0x9206, 0x9551, 0x977a, 0x9783, 0x977e, + 0x977f, 0x9780, 0x6ab5, 0x9891, 0x9894, 0x9895, 0x9921, 0x9920, + 0x9a3d, 0x9a40, 0x9a46, 0x9a84, 0x9bac, 0x9bad, 0x142e, 0x9dda, + 0x9dd9, 0x9fe2, 0x9fe1, 0x9fe3, 0x9fe4, 0x9fde, + /* 0x5d */ + 0x9fdf, 0xa241, 0xa259, 0xa25c, 0xa25a, 0xa3e8, 0xa4f6, 0xa4fc, + 0xa4f7, 0xa4fa, 0xa4f9, 0xa7c4, 0xa7be, 0xa7d2, 0xa7bd, 0xa795, + 0xa7d4, 0xa9e4, 0xac61, 0xac62, 0xac63, 0xac64, 0xac60, 0xac5c, + 0xac5d, 0xac5e, 0xada5, 0xada6, 0xae4c, 0xaf68, 0xaf6e, 0xaf71, + 0xaf6b, 0xaf6f, 0xafee, 0xaff1, 0xaff0, 0xafef, 0xb015, 0xb014, + 0xab6e, 0xb047, 0xb17c, 0xb17a, 0xb174, 0xb176, 0xb16e, 0xb178, + 0xb16d, 0xb16c, 0xb24e, 0xb3d7, 0xb3ea, 0xb3e5, 0xb464, 0xb5b3, + 0xb5a3, 0xb5a5, 0xb5a7, 0xb5a2, 0xb59f, 0xb5a6, 0xb59e, 0xb5a8, + 0xb6a9, 0xb6a6, 0xb6aa, 0xb6ab, 0xb6a0, 0xb6a1, 0xb6a8, 0xb6e8, + 0xb6e9, 0xb6ea, 0xb7e4, 0xb7df, 0xb7e0, 0xb828, 0xb85d, 0xb85b, + 0xb856, 0xb857, 0xb85f, 0xb862, 0xbae1, 0xbae3, 0xbade, 0xbad9, + 0xbae8, 0xbaf2, 0xbaf6, 0xbae6, 0xbaf4, 0xbaf5, + /* 0x5e */ + 0xbae5, 0xbae2, 0x188d, 0xbd96, 0xbdaa, 0xbd97, 0xbd70, 0xbda1, + 0xbd9d, 0xbda9, 0xbd6f, 0xbd7e, 0xbd94, 0xbd9a, 0xbd73, 0xbd87, + 0xbd71, 0xbd77, 0xbd88, 0xbd8d, 0xbd85, 0xbd78, 0xbdad, 0xbe80, + 0xbe81, 0xbee5, 0xbee7, 0xbf7c, 0xbfaf, 0xbfe1, 0xc096, 0xc0a3, + 0xc090, 0xc0f8, 0xc12e, 0xc175, 0xc17e, 0xc17d, 0xc17b, 0xc178, + 0xc1b0, 0xc234, 0xc236, 0xc230, 0xc51d, 0xc22e, 0xc237, 0x34ce, + 0x3597, 0x3598, 0x387c, 0x387e, 0x387d, 0x387f, 0x3b0f, 0x3ca4, + 0x3e31, 0x3e2e, 0x3e2f, 0x3e32, 0x422c, 0x43d4, 0x43dc, 0x43d8, + 0x440e, 0x4583, 0x4584, 0x4712, 0x4c72, 0x4c7c, 0x4c7e, 0x50a6, + 0x50a0, 0x509e, 0x50a2, 0x532a, 0x5518, 0x594d, 0x5958, 0x595b, + 0x7714, 0xc3f2, 0x5be6, 0x6164, 0x6168, 0x6160, 0x6162, 0x63d7, + 0x644b, 0x67e0, 0x6a22, 0x6c05, 0x6e19, 0x6e1a, + /* 0x5f */ + 0x6ec3, 0x6fd8, 0x6fdc, 0x714f, 0x73f7, 0x73f4, 0x73f8, 0x7713, + 0x7850, 0x7bf0, 0x7be9, 0x7bef, 0x7bed, 0x7bea, 0x7bf8, 0x7c05, + 0x7bf2, 0x7d72, 0x0f31, 0x7ff9, 0x7ff3, 0x7ff6, 0x7ff2, 0x7ff7, + 0x8066, 0x8065, 0x8140, 0xc477, 0x86d1, 0x86d3, 0x8804, 0x8d59, + 0x8d60, 0x8d5b, 0x8d5d, 0x8d5e, 0x8d69, 0x8d5c, 0x8d61, 0x8d6a, + 0x8d5f, 0x914e, 0x915c, 0x9160, 0x9163, 0x91db, 0x93ca, 0x93c9, + 0x93c8, 0x94a5, 0x94a3, 0x978e, 0x9787, 0x9789, 0x9785, 0x9786, + 0x978f, 0x978a, 0x9790, 0x9898, 0x989b, 0x9a47, 0x9a49, 0x9a48, + 0x9de5, 0x9dea, 0x9ded, 0x9ff0, 0x9fef, 0x9ff2, 0x9fec, 0xa040, + 0xa260, 0xa25f, 0xa3eb, 0xa3ec, 0xa500, 0xa501, 0xa7e2, 0xa7df, + 0xa7e0, 0xa7e1, 0xa7e3, 0xa8c3, 0xa9eb, 0xa9ea, 0xab61, 0xab71, + 0xac6b, 0xac68, 0xac69, 0xac67, 0xadb0, 0xadb1, + /* 0x60 */ + 0xadb2, 0xae51, 0xaf74, 0xb17f, 0xb184, 0xb253, 0xb254, 0xb3f0, + 0xb3f4, 0xb3f1, 0xb437, 0xb5bf, 0x17bc, 0x17bb, 0xb5bd, 0xb5be, + 0xb5b7, 0xb5c0, 0xb5ba, 0xb5b8, 0xb5bc, 0xb5bb, 0xb6eb, 0xb7e7, + 0xb81d, 0xb81c, 0xb863, 0x484b, 0xb938, 0xb936, 0xb934, 0xb937, + 0xbb06, 0xbb1c, 0xbb02, 0xbb1d, 0xbb1e, 0xbae0, 0xbb11, 0xbb18, + 0xbb21, 0xbb20, 0xbb10, 0xbdbd, 0xbdae, 0xbdb5, 0xbdb8, 0xbdb9, + 0xbdbe, 0xbdc4, 0xbdbc, 0xbdba, 0xbe83, 0xbeea, 0xbeec, 0xbf7e, + 0xbf7b, 0xbfe5, 0xc0a7, 0xc09e, 0xc09a, 0xc12f, 0xc131, 0xc183, + 0xc1b5, 0xc246, 0xc241, 0xc243, 0xc23d, 0xc242, 0xc23b, 0xc247, + 0x336b, 0x33d0, 0x388e, 0x4011, 0xc371, 0xc389, 0x484c, 0x532b, + 0x594f, 0x595e, 0x5963, 0x596b, 0x5a3f, 0x5be9, 0x616d, 0x616b, + 0x616a, 0xbb2a, 0x63e0, 0x63dd, 0x63e1, 0x63de, + /* 0x61 */ + 0x63dc, 0x644d, 0x6616, 0x67e3, 0x69e5, 0x69e4, 0x6e1d, 0x754b, + 0xc2c1, 0x784e, 0x78d6, 0x7bfd, 0x7c07, 0x7bfe, 0x7c03, 0x7c0b, + 0x7bff, 0x7d7a, 0x7d77, 0x7ffb, 0x8143, 0x81ed, 0x87bc, 0x63df, + 0x8805, 0x88c6, 0x88c5, 0x8d74, 0x8d73, 0x8d72, 0x8d78, 0x9173, + 0x917a, 0x6e1c, 0x9176, 0x9175, 0x9177, 0x93cf, 0x93ce, 0x93cd, + 0x94a8, 0x9798, 0x9792, 0x9794, 0x989a, 0x9bb4, 0x9deb, 0x9df4, + 0x9df3, 0x9dee, 0x9df2, 0x9df0, 0xa264, 0xa805, 0xa7fb, 0xa7fc, + 0xa9f3, 0xac6c, 0xadba, 0xaf79, 0xaf7e, 0xaf78, 0xaff4, 0xb016, + 0xb257, 0xb5c8, 0xb5c3, 0xb5ce, 0xb6b3, 0xb6ed, 0xb6ee, 0xb7f1, + 0xb7f8, 0x1814, 0xb864, 0xb865, 0xbb35, 0xbb29, 0xbb2c, 0xbb31, + 0xbb2b, 0xbb2e, 0xbb25, 0xbdda, 0xbde0, 0xbdd4, 0xbde1, 0xbddd, + 0xbfe7, 0xc012, 0xc0ae, 0xc0af, 0xc186, 0xc185, + /* 0x62 */ + 0xc1d1, 0xc258, 0xc23f, 0xc252, 0xc24b, 0xc253, 0xc250, 0xc256, + 0xc257, 0xc2cd, 0xc2cb, 0x3231, 0x3230, 0x33d1, 0x021c, 0x3892, + 0x3890, 0x388f, 0x3893, 0x3891, 0x0372, 0x4713, 0x487f, 0x50ac, + 0x6170, 0x63e5, 0x6a23, 0x6a24, 0x6c08, 0x6c07, 0x6e1f, 0x6e20, + 0x6e21, 0x6fe1, 0x7154, 0x7157, 0x7155, 0x73fa, 0x7538, 0x8d86, + 0x7537, 0x7853, 0x7d7e, 0x7d7b, 0xc471, 0x7ffd, 0x7ffc, 0x8146, + 0x8732, 0x88c7, 0x8d71, 0x8d83, 0x8d6f, 0x8d7e, 0x8d7d, 0x8d81, + 0x8d7c, 0x918a, 0x917e, 0x9180, 0x917d, 0x917f, 0x9182, 0x93d4, + 0x93d0, 0x93d2, 0x9555, 0x979b, 0x979a, 0x9a4e, 0x9df1, 0x9ff8, + 0x9ffd, 0xa25e, 0xa266, 0xa505, 0xa80a, 0xa80b, 0xa80e, 0xa80d, + 0xa811, 0xa809, 0xa810, 0xa80c, 0xa812, 0xa8c4, 0xa9f7, 0xa9f8, + 0xab6a, 0xab6b, 0xadc0, 0xadc2, 0xaf85, 0xaf80, + /* 0x63 */ + 0xaf84, 0xaf81, 0xadc4, 0xb18b, 0xb18d, 0xb18e, 0xb6b7, 0xb6b9, + 0xb6ef, 0xb7fb, 0xb7ff, 0xb867, 0xb868, 0xb869, 0xb93f, 0xbb3c, + 0xbb4c, 0xbb3d, 0xbb3e, 0xbb3f, 0xbb3b, 0xbdff, 0x190e, 0xbdf6, + 0xbdee, 0xbdfc, 0xbdf8, 0xbe01, 0xbdfa, 0xbe88, 0xbf80, 0xc011, + 0xc0fe, 0xc100, 0xc135, 0x6f3c, 0xc1bd, 0xc1bb, 0xc25c, 0xc25a, + 0xc2d1, 0xc2d0, 0x340b, 0x5973, 0x3e39, 0x401a, 0x43e3, 0x4587, + 0x4777, 0x4778, 0x50b1, 0x596a, 0x5974, 0x5beb, 0x617b, 0x64a5, + 0x67e4, 0x6c0b, 0x6c0e, 0x6c0c, 0x7539, 0x7c10, 0x7c11, 0x7c16, + 0x7d81, 0x7d80, 0x7ffe, 0x8001, 0x8000, 0x8147, 0x81ef, 0x8d88, + 0x918b, 0x918d, 0x9187, 0x9185, 0x918f, 0x9184, 0x9188, 0x918e, + 0x918c, 0x93d7, 0x93d6, 0x979f, 0x4588, 0x9e03, 0x9ffe, 0xa3ef, + 0xa509, 0xa508, 0xa820, 0xa824, 0xa81f, 0xac70, + /* 0x64 */ + 0xae56, 0xaff7, 0xaff8, 0xaff6, 0xb190, 0xb25e, 0xb3f7, 0xb5d6, + 0xb5d5, 0xb6bb, 0xb6f0, 0xb801, 0xb86c, 0xb941, 0xb942, 0xbb4f, + 0xbb53, 0xbb58, 0xbe12, 0xbe04, 0xbe13, 0xbe05, 0xbe0d, 0xbf82, + 0xbf81, 0xc0b5, 0xc0ba, 0xc1be, 0xc265, 0xc263, 0xc26e, 0xc26a, + 0xc26c, 0xc2c4, 0x336c, 0x97a5, 0x4012, 0x484d, 0x551f, 0x5977, + 0x5978, 0x5d44, 0x617c, 0x63eb, 0x63ea, 0x63ec, 0x64a7, 0x6619, + 0x6e23, 0x2074, 0x7401, 0x7c1c, 0x8003, 0x8148, 0x86da, 0x8d91, + 0x8d92, 0x9196, 0x9197, 0x9191, 0x9193, 0x93d8, 0x93d5, 0x9557, + 0x9558, 0x97a2, 0x9e05, 0x9ffa, 0xa50c, 0xa50a, 0xa82e, 0xa829, + 0xa82f, 0xa8c5, 0xac72, 0xadc8, 0xae5a, 0xae59, 0xaf89, 0xaf88, + 0xb5db, 0xb5d9, 0xb5da, 0xb6bc, 0x17ec, 0xb806, 0xb805, 0xb86f, + 0xb86d, 0xb870, 0xbb60, 0xbb5e, 0xbb63, 0xbb5a, + /* 0x65 */ + 0xbb5f, 0xbe19, 0xbe1d, 0xbe1b, 0xbe22, 0xbe1c, 0xbe1e, 0xbef7, + 0xbf84, 0xc015, 0xc0b8, 0xc0c1, 0xc101, 0xc10a, 0xc1d2, 0xc275, + 0xc274, 0xc272, 0x34d0, 0x401b, 0x4410, 0x4779, 0x63ed, 0x6ab9, + 0x6e24, 0x6ec5, 0x7403, 0x814a, 0x86f7, 0x87c1, 0x87c2, 0x8d94, + 0x9199, 0x919a, 0x955a, 0x97a8, 0x9825, 0x989e, 0xa041, 0xa832, + 0xa833, 0xadcb, 0xadca, 0xadcc, 0xb193, 0xb5e0, 0xb871, 0xbb6b, + 0xbe2b, 0xbe29, 0xbe1a, 0xbe26, 0xbe27, 0xbe2a, 0xbef8, 0x6f3d, + 0xc276, 0x3b18, 0x597a, 0x617f, 0x0e79, 0x81f0, 0x8d9a, 0x8d96, + 0x919e, 0x919d, 0x91dc, 0x93da, 0x9e0b, 0xa002, 0xa042, 0xa267, + 0xaf8b, 0xb5e2, 0xbb71, 0xbe2f, 0xbe2e, 0xc0c6, 0xc18e, 0xc27b, + 0xc277, 0xc278, 0xc27c, 0x597c, 0x8007, 0x8d97, 0x97d9, 0xa50d, + 0xa50e, 0xb5e3, 0xb5e4, 0xb6f3, 0xb875, 0xbe37, + /* 0x66 */ + 0xbe35, 0xc18f, 0xc280, 0xc27f, 0xc2d4, 0x50b4, 0xbfec, 0xab75, + 0x6c10, 0x8069, 0x91a4, 0x93db, 0xadd1, 0xaf8d, 0xbb76, 0xbe39, + 0xc284, 0xc282, 0x34d2, 0x63ee, 0x6c11, 0x7d84, 0xab74, 0xaf8f, + 0xaf8e, 0xbe3b, 0x32cb, 0xc288, 0xc286, 0x555c, 0x71a4, 0xac75, + 0xc28b, 0x3b19, 0x989f, 0xb5e5, 0xbe40, 0x6c12, 0xbefb, 0xc28c, + 0x71a5, 0xb877, 0xb878, 0xc2d6, 0x93df, 0xadd2, 0x3b1a, 0x97a9, + 0xadd3, 0xc0ca, 0x87c4, 0x94b1, 0xb264, +}; + +static const ucs4_t cns11643_7_2uni_upages[198] = { + 0x03400, 0x03500, 0x03600, 0x03700, 0x03800, 0x03900, 0x03a00, 0x03b00, + 0x03c00, 0x03d00, 0x03e00, 0x03f00, 0x04000, 0x04100, 0x04200, 0x04300, + 0x04400, 0x04500, 0x04600, 0x04700, 0x04800, 0x04900, 0x04a00, 0x04b00, + 0x04c00, 0x04d00, 0x05600, 0x05800, 0x06100, 0x06400, 0x06700, 0x07100, + 0x07600, 0x07c00, 0x07f00, 0x08100, 0x08600, 0x08d00, 0x08f00, 0x09300, + 0x09500, 0x09a00, 0x0ff00, 0x20000, 0x20100, 0x20300, 0x20400, 0x20500, + 0x20600, 0x20700, 0x20800, 0x20900, 0x20a00, 0x20b00, 0x20f00, 0x21000, + 0x21100, 0x21200, 0x21400, 0x21500, 0x21600, 0x21800, 0x21900, 0x21a00, + 0x21b00, 0x21c00, 0x21d00, 0x21f00, 0x22000, 0x22100, 0x22200, 0x22300, + 0x22400, 0x22500, 0x22700, 0x22800, 0x22900, 0x22a00, 0x22c00, 0x22d00, + 0x22e00, 0x22f00, 0x23000, 0x23100, 0x23200, 0x23300, 0x23500, 0x23600, + 0x23700, 0x23800, 0x23900, 0x23a00, 0x23b00, 0x23c00, 0x23e00, 0x23f00, + 0x24000, 0x24100, 0x24300, 0x24400, 0x24500, 0x24600, 0x24700, 0x24800, + 0x24900, 0x24a00, 0x24b00, 0x24c00, 0x24d00, 0x24e00, 0x24f00, 0x25000, + 0x25200, 0x25300, 0x25400, 0x25500, 0x25600, 0x25700, 0x25800, 0x25900, + 0x25a00, 0x25b00, 0x25c00, 0x25d00, 0x25e00, 0x25f00, 0x26000, 0x26100, + 0x26200, 0x26300, 0x26400, 0x26500, 0x26600, 0x26700, 0x26800, 0x26900, + 0x26a00, 0x26d00, 0x26e00, 0x26f00, 0x27000, 0x27100, 0x27200, 0x27300, + 0x27400, 0x27500, 0x27600, 0x27700, 0x27800, 0x27900, 0x27a00, 0x27b00, + 0x27c00, 0x27d00, 0x27e00, 0x27f00, 0x28000, 0x28100, 0x28200, 0x28300, + 0x28400, 0x28500, 0x28600, 0x28700, 0x28800, 0x28900, 0x28a00, 0x28b00, + 0x28c00, 0x28d00, 0x28e00, 0x28f00, 0x29000, 0x29100, 0x29200, 0x29300, + 0x29400, 0x29500, 0x29600, 0x29700, 0x29800, 0x29900, 0x29a00, 0x29b00, + 0x29c00, 0x29d00, 0x29e00, 0x29f00, 0x2a000, 0x2a100, 0x2a200, 0x2a300, + 0x2a400, 0x2a500, 0x2a600, 0x2f800, 0x2f900, 0x2fa00, +}; + +static int +cns11643_7_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x66)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + ucs4_t wc = 0xfffd; + unsigned short swc; + { + if (i < 6539) + swc = cns11643_7_2uni_page21[i], + wc = cns11643_7_2uni_upages[swc>>8] | (swc & 0xff); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + diff --git a/jni/parted/libiconv/lib/cns11643_inv.h b/jni/parted/libiconv/lib/cns11643_inv.h new file mode 100755 index 0000000..665d30e --- /dev/null +++ b/jni/parted/libiconv/lib/cns11643_inv.h @@ -0,0 +1,15411 @@ +/* + * Copyright (C) 1999-2005, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CNS 11643-1992 planes 1-7, CNS 11643-1986 plane 15 + */ + +static const unsigned char cns11643_inv_2charset[3*55442] = { + 0x1,0x21,0x70, 0x1,0x22,0x78, 0x1,0x22,0x34, 0x1,0x21,0x31, + 0x1,0x22,0x32, 0x1,0x22,0x33, 0x1,0x25,0x6f, 0x1,0x25,0x6d, + 0x1,0x25,0x6e, 0x1,0x25,0x70, 0x1,0x25,0x6c, 0x1,0x24,0x75, + 0x1,0x24,0x76, 0x1,0x24,0x77, 0x1,0x24,0x78, 0x1,0x24,0x79, + 0x1,0x24,0x7a, 0x1,0x24,0x7b, 0x1,0x24,0x7c, 0x1,0x24,0x7d, + 0x1,0x24,0x7e, 0x1,0x25,0x21, 0x1,0x25,0x22, 0x1,0x25,0x23, + 0x1,0x25,0x24, 0x1,0x25,0x25, 0x1,0x25,0x26, 0x1,0x25,0x27, + 0x1,0x25,0x28, 0x1,0x25,0x29, 0x1,0x25,0x2a, 0x1,0x25,0x2b, + 0x1,0x25,0x2c, 0x1,0x25,0x2d, 0x1,0x25,0x2e, 0x1,0x25,0x2f, + 0x1,0x25,0x30, 0x1,0x25,0x31, 0x1,0x25,0x32, 0x1,0x25,0x33, + 0x1,0x25,0x34, 0x1,0x25,0x35, 0x1,0x25,0x36, 0x1,0x25,0x37, + 0x1,0x25,0x38, 0x1,0x25,0x39, 0x1,0x25,0x3a, 0x1,0x25,0x3b, + 0x1,0x25,0x3c, 0x1,0x25,0x3d, 0x1,0x25,0x3e, 0x1,0x25,0x3f, + 0x1,0x25,0x40, 0x1,0x25,0x41, 0x1,0x25,0x42, 0x1,0x25,0x43, + 0x1,0x25,0x44, 0x1,0x25,0x45, 0x1,0x25,0x46, 0x1,0x21,0x39, + 0x1,0x21,0x37, 0x1,0x22,0x5d, 0x1,0x21,0x64, 0x1,0x21,0x65, + 0x1,0x21,0x66, 0x1,0x21,0x67, 0x1,0x21,0x2d, 0x1,0x21,0x2c, + 0x1,0x21,0x6a, 0x1,0x21,0x6b, 0x1,0x21,0x6f, 0x1,0x22,0x23, + 0x1,0x42,0x42, 0x1,0x22,0x6a, 0x1,0x22,0x22, 0x1,0x22,0x6b, + 0x1,0x24,0x2b, 0x1,0x24,0x2c, 0x1,0x24,0x2d, 0x1,0x24,0x2e, + 0x1,0x24,0x2f, 0x1,0x24,0x30, 0x1,0x24,0x31, 0x1,0x24,0x32, + 0x1,0x24,0x33, 0x1,0x24,0x34, 0x1,0x26,0x35, 0x1,0x26,0x36, + 0x1,0x26,0x37, 0x1,0x26,0x38, 0x1,0x26,0x39, 0x1,0x26,0x3a, + 0x1,0x26,0x3b, 0x1,0x26,0x3c, 0x1,0x26,0x3d, 0x1,0x26,0x3e, + 0x1,0x22,0x58, 0x1,0x22,0x55, 0x1,0x22,0x57, 0x1,0x22,0x56, + 0x1,0x22,0x59, 0x1,0x22,0x5a, 0x1,0x22,0x5c, 0x1,0x22,0x5b, + 0x1,0x22,0x61, 0x1,0x22,0x35, 0x1,0x22,0x3c, 0x1,0x22,0x49, + 0x1,0x22,0x48, 0x1,0x22,0x45, 0x1,0x22,0x46, 0x1,0x22,0x4d, + 0x1,0x22,0x4e, 0x1,0x22,0x50, 0x1,0x22,0x4f, 0x1,0x22,0x44, + 0x1,0x22,0x3d, 0x1,0x22,0x3b, 0x1,0x22,0x3e, 0x1,0x22,0x39, + 0x1,0x22,0x3a, 0x1,0x22,0x47, 0x1,0x22,0x4a, 0x1,0x42,0x21, + 0x1,0x42,0x22, 0x1,0x42,0x23, 0x1,0x42,0x24, 0x1,0x42,0x25, + 0x1,0x42,0x26, 0x1,0x42,0x27, 0x1,0x42,0x28, 0x1,0x42,0x29, + 0x1,0x42,0x2a, 0x1,0x42,0x2b, 0x1,0x42,0x2c, 0x1,0x42,0x2d, + 0x1,0x42,0x2e, 0x1,0x42,0x2f, 0x1,0x42,0x30, 0x1,0x42,0x31, + 0x1,0x42,0x32, 0x1,0x42,0x33, 0x1,0x42,0x34, 0x1,0x42,0x35, + 0x1,0x42,0x36, 0x1,0x42,0x37, 0x1,0x42,0x38, 0x1,0x42,0x39, + 0x1,0x42,0x3a, 0x1,0x42,0x3b, 0x1,0x42,0x3c, 0x1,0x42,0x3d, + 0x1,0x42,0x3e, 0x1,0x42,0x3f, 0x1,0x42,0x40, 0x1,0x42,0x41, + 0x1,0x26,0x21, 0x1,0x26,0x22, 0x1,0x26,0x23, 0x1,0x26,0x24, + 0x1,0x26,0x25, 0x1,0x26,0x26, 0x1,0x26,0x27, 0x1,0x26,0x28, + 0x1,0x26,0x29, 0x1,0x26,0x2a, 0x1,0x26,0x2b, 0x1,0x26,0x2c, + 0x1,0x26,0x2d, 0x1,0x26,0x2e, 0x1,0x26,0x2f, 0x1,0x26,0x30, + 0x1,0x26,0x31, 0x1,0x26,0x32, 0x1,0x26,0x33, 0x1,0x26,0x34, + 0x1,0x23,0x39, 0x1,0x23,0x3a, 0x1,0x23,0x3c, 0x1,0x23,0x3d, + 0x1,0x23,0x3e, 0x1,0x23,0x3f, 0x1,0x23,0x37, 0x1,0x23,0x36, + 0x1,0x23,0x35, 0x1,0x23,0x34, 0x1,0x23,0x33, 0x1,0x23,0x44, + 0x1,0x23,0x45, 0x1,0x23,0x47, 0x1,0x23,0x46, 0x1,0x23,0x40, + 0x1,0x23,0x41, 0x1,0x23,0x43, 0x1,0x23,0x42, 0x1,0x23,0x4c, + 0x1,0x23,0x4d, 0x1,0x23,0x4e, 0x1,0x23,0x24, 0x1,0x23,0x25, + 0x1,0x23,0x26, 0x1,0x23,0x27, 0x1,0x23,0x28, 0x1,0x23,0x29, + 0x1,0x23,0x2a, 0x1,0x23,0x2b, 0x1,0x23,0x32, 0x1,0x23,0x31, + 0x1,0x23,0x30, 0x1,0x23,0x2f, 0x1,0x23,0x2e, 0x1,0x23,0x2d, + 0x1,0x23,0x2c, 0x1,0x23,0x38, 0x1,0x23,0x3b, 0x1,0x21,0x7c, + 0x1,0x21,0x7b, 0x1,0x21,0x75, 0x1,0x21,0x74, 0x1,0x21,0x7e, + 0x1,0x21,0x7d, 0x1,0x21,0x7a, 0x1,0x21,0x79, 0x1,0x21,0x72, + 0x1,0x21,0x76, 0x1,0x21,0x73, 0x1,0x23,0x48, 0x1,0x23,0x49, + 0x1,0x23,0x4b, 0x1,0x23,0x4a, 0x1,0x21,0x78, 0x1,0x21,0x77, + 0x1,0x22,0x54, 0x1,0x22,0x51, 0x1,0x22,0x53, 0x1,0x22,0x52, + 0x1,0x21,0x21, 0x1,0x21,0x23, 0x1,0x21,0x24, 0x1,0x21,0x71, + 0x1,0x21,0x52, 0x1,0x21,0x53, 0x1,0x21,0x4e, 0x1,0x21,0x4f, + 0x1,0x21,0x56, 0x1,0x21,0x57, 0x1,0x21,0x5a, 0x1,0x21,0x5b, + 0x1,0x21,0x4a, 0x1,0x21,0x4b, 0x1,0x22,0x65, 0x1,0x21,0x46, + 0x1,0x21,0x47, 0x1,0x21,0x68, 0x1,0x21,0x69, 0x1,0x24,0x35, + 0x1,0x24,0x36, 0x1,0x24,0x37, 0x1,0x24,0x38, 0x1,0x24,0x39, + 0x1,0x24,0x3a, 0x1,0x24,0x3b, 0x1,0x24,0x3c, 0x1,0x24,0x3d, + 0x1,0x21,0x26, 0x1,0x25,0x47, 0x1,0x25,0x48, 0x1,0x25,0x49, + 0x1,0x25,0x4a, 0x1,0x25,0x4b, 0x1,0x25,0x4c, 0x1,0x25,0x4d, + 0x1,0x25,0x4e, 0x1,0x25,0x4f, 0x1,0x25,0x50, 0x1,0x25,0x51, + 0x1,0x25,0x52, 0x1,0x25,0x53, 0x1,0x25,0x54, 0x1,0x25,0x55, + 0x1,0x25,0x56, 0x1,0x25,0x57, 0x1,0x25,0x58, 0x1,0x25,0x59, + 0x1,0x25,0x5a, 0x1,0x25,0x5b, 0x1,0x25,0x5c, 0x1,0x25,0x5d, + 0x1,0x25,0x5e, 0x1,0x25,0x5f, 0x1,0x25,0x60, 0x1,0x25,0x61, + 0x1,0x25,0x62, 0x1,0x25,0x63, 0x1,0x25,0x64, 0x1,0x25,0x65, + 0x1,0x25,0x66, 0x1,0x25,0x67, 0x1,0x25,0x68, 0x1,0x25,0x69, + 0x1,0x25,0x6a, 0x1,0x25,0x6b, 0x1,0x22,0x21, 0x1,0x22,0x75, + 0x1,0x22,0x76, 0x1,0x22,0x70, 0x1,0x22,0x71, 0x1,0x22,0x72, + 0x1,0x22,0x74, 0x1,0x22,0x77, 0x1,0x22,0x73, 0x1,0x22,0x4c, + 0x1,0x22,0x4b, 0x1,0x22,0x6f, 0x6,0x22,0x2c, 0x4,0x22,0x24, + 0x6,0x21,0x30, 0x6,0x21,0x23, 0xf,0x21,0x6c, 0x4,0x21,0x57, + 0x4,0x23,0x36, 0x4,0x28,0x35, 0x3,0x34,0x3b, 0x3,0x39,0x6d, + 0x3,0x27,0x41, 0x3,0x28,0x6c, 0x3,0x23,0x23, 0x4,0x23,0x37, + 0x4,0x25,0x34, 0x3,0x40,0x34, 0x4,0x21,0x59, 0x3,0x21,0x75, + 0x3,0x21,0x6e, 0x3,0x21,0x71, 0x3,0x21,0x73, 0xf,0x21,0x44, + 0x6,0x23,0x4e, 0x3,0x22,0x71, 0x4,0x22,0x31, 0x3,0x22,0x69, + 0x3,0x22,0x6a, 0xf,0x21,0x72, 0x5,0x23,0x34, 0x3,0x24,0x4a, + 0x3,0x24,0x47, 0x3,0x24,0x4d, 0x6,0x25,0x71, 0x3,0x27,0x46, + 0x5,0x25,0x25, 0x4,0x25,0x39, 0x4,0x25,0x3c, 0x3,0x27,0x45, + 0x5,0x25,0x2b, 0x4,0x25,0x3b, 0x4,0x25,0x38, 0x3,0x27,0x50, + 0xf,0x25,0x4a, 0x3,0x2b,0x31, 0x6,0x2e,0x5a, 0x4,0x28,0x39, + 0x3,0x2b,0x30, 0x5,0x28,0x21, 0x4,0x28,0x3a, 0x3,0x2b,0x2a, + 0x4,0x28,0x37, 0x4,0x28,0x3c, 0x5,0x2b,0x6c, 0x3,0x34,0x49, + 0x3,0x2f,0x52, 0x4,0x2b,0x65, 0x6,0x35,0x38, 0x4,0x30,0x45, + 0x3,0x34,0x3e, 0x3,0x34,0x48, 0x4,0x30,0x4a, 0x4,0x36,0x38, + 0x3,0x39,0x73, 0x4,0x36,0x32, 0x4,0x36,0x37, 0x6,0x46,0x55, + 0x6,0x49,0x7b, 0x3,0x39,0x74, 0x3,0x40,0x35, 0x3,0x40,0x38, + 0x3,0x40,0x3b, 0x4,0x3c,0x2c, 0x4,0x3c,0x2d, 0x4,0x3c,0x28, + 0x4,0x3c,0x2a, 0x5,0x44,0x57, 0x4,0x42,0x37, 0x4,0x42,0x33, + 0x4,0x42,0x2e, 0x3,0x45,0x78, 0x6,0x5a,0x73, 0x4,0x42,0x2f, + 0x3,0x45,0x73, 0x4,0x4f,0x59, 0x3,0x45,0x72, 0x3,0x45,0x6f, + 0x3,0x45,0x77, 0x4,0x42,0x32, 0x4,0x48,0x7b, 0x3,0x4b,0x26, + 0x3,0x4b,0x25, 0x4,0x48,0x7d, 0x3,0x4b,0x24, 0x3,0x4b,0x28, + 0x3,0x4b,0x2a, 0x3,0x50,0x32, 0x4,0x4f,0x5d, 0x5,0x53,0x59, + 0x4,0x4f,0x5b, 0x3,0x54,0x3f, 0x3,0x57,0x53, 0x4,0x5a,0x67, + 0x4,0x5a,0x68, 0x4,0x5f,0x49, 0x4,0x63,0x2f, 0x3,0x5c,0x33, + 0x3,0x5c,0x31, 0x7,0x52,0x74, 0x7,0x57,0x4c, 0x4,0x6a,0x41, + 0x3,0x61,0x3c, 0x4,0x22,0x33, 0xf,0x26,0x5a, 0x4,0x2b,0x69, + 0x3,0x57,0x54, 0x3,0x21,0x76, 0x3,0x22,0x79, 0x3,0x24,0x55, + 0x5,0x23,0x37, 0x6,0x25,0x7b, 0x6,0x25,0x7d, 0x3,0x24,0x56, + 0x3,0x2b,0x38, 0x7,0x4d,0x3d, 0x3,0x2a,0x4c, 0x4,0x30,0x4c, + 0x5,0x31,0x26, 0x4,0x36,0x3d, 0x4,0x3c,0x32, 0x4,0x6a,0x42, + 0x3,0x2b,0x3a, 0x3,0x39,0x78, 0x4,0x49,0x22, 0x3,0x21,0x50, + 0x3,0x23,0x21, 0x3,0x24,0x58, 0x5,0x25,0x2e, 0x3,0x27,0x57, + 0x3,0x27,0x56, 0x3,0x27,0x58, 0x4,0x28,0x43, 0x3,0x2b,0x3c, + 0x3,0x2f,0x5d, 0x3,0x2f,0x5c, 0x4,0x30,0x4d, 0x3,0x39,0x7b, + 0x3,0x39,0x7c, 0x4,0x3c,0x34, 0x3,0x45,0x79, 0x5,0x31,0x29, + 0x4,0x21,0x61, 0x6,0x22,0x41, 0x3,0x21,0x7e, 0x4,0x22,0x3c, + 0x5,0x22,0x30, 0x4,0x23,0x3e, 0x4,0x23,0x3f, 0x4,0x25,0x4a, + 0x4,0x25,0x4c, 0x4,0x25,0x48, 0x4,0x25,0x47, 0x3,0x2b,0x41, + 0x3,0x2b,0x45, 0x3,0x2b,0x42, 0x5,0x2b,0x7c, 0x4,0x30,0x53, + 0x3,0x2f,0x67, 0x3,0x2f,0x69, 0x4,0x30,0x57, 0x4,0x30,0x58, + 0x4,0x30,0x52, 0x5,0x31,0x2c, 0x4,0x30,0x54, 0x4,0x30,0x59, + 0x3,0x3a,0x24, 0x6,0x50,0x6c, 0x4,0x36,0x42, 0x4,0x36,0x45, + 0x3,0x3a,0x22, 0x5,0x3d,0x70, 0x3,0x40,0x42, 0x4,0x42,0x41, + 0x4,0x42,0x43, 0x4,0x42,0x42, 0x4,0x42,0x3c, 0x3,0x45,0x7d, + 0x3,0x45,0x7b, 0x4,0x42,0x3f, 0x4,0x42,0x3e, 0x3,0x45,0x7c, + 0x4,0x49,0x23, 0x4,0x4f,0x62, 0x4,0x4f,0x61, 0x4,0x4f,0x63, + 0x5,0x61,0x3b, 0x4,0x55,0x6c, 0x7,0x3e,0x7d, 0x4,0x5f,0x4a, + 0x4,0x63,0x30, 0x4,0x21,0x64, 0x4,0x22,0x40, 0x4,0x23,0x44, + 0x3,0x24,0x64, 0x4,0x25,0x4f, 0x6,0x29,0x6f, 0x6,0x2f,0x27, + 0x4,0x2b,0x75, 0x3,0x2f,0x6b, 0x4,0x30,0x5a, 0x4,0x36,0x4b, + 0x3,0x46,0x22, 0x4,0x55,0x6f, 0x3,0x54,0x43, 0x4,0x55,0x70, + 0x5,0x53,0x63, 0x4,0x5a,0x6e, 0x4,0x30,0x5c, 0x4,0x36,0x4d, + 0x5,0x3d,0x78, 0x6,0x29,0x72, 0x3,0x34,0x53, 0x5,0x70,0x78, + 0x4,0x23,0x4b, 0x6,0x26,0x38, 0x4,0x2b,0x77, 0x3,0x3a,0x25, + 0x6,0x50,0x76, 0x4,0x3c,0x3e, 0x5,0x44,0x6c, 0x4,0x6d,0x53, + 0x6,0x26,0x36, 0x4,0x36,0x50, 0x3,0x21,0x58, 0x6,0x23,0x71, + 0x3,0x23,0x2c, 0x6,0x50,0x7a, 0x3,0x27,0x64, 0x4,0x21,0x2b, + 0x6,0x21,0x3b, 0x6,0x28,0x64, 0x4,0x25,0x56, 0x3,0x23,0x30, + 0x5,0x22,0x3c, 0x3,0x23,0x2e, 0x3,0x24,0x6a, 0x3,0x24,0x69, + 0x3,0x24,0x68, 0x3,0x27,0x68, 0x6,0x2a,0x2a, 0x3,0x2b,0x4c, + 0x3,0x2f,0x70, 0x4,0x2b,0x7a, 0x3,0x2f,0x71, 0x4,0x36,0x51, + 0x6,0x51,0x22, 0x5,0x4c,0x31, 0x3,0x46,0x24, 0x4,0x49,0x27, + 0x3,0x60,0x70, 0x3,0x21,0x5d, 0x3,0x2f,0x72, 0x6,0x3d,0x61, + 0x3,0x34,0x56, 0x4,0x49,0x29, 0x5,0x21,0x41, 0x3,0x21,0x5f, + 0x3,0x23,0x32, 0x4,0x25,0x5a, 0x4,0x28,0x57, 0x3,0x3f,0x78, + 0x3,0x46,0x27, 0x4,0x47,0x56, 0x4,0x21,0x6b, 0x3,0x22,0x30, + 0x3,0x22,0x2c, 0x3,0x23,0x38, 0x3,0x23,0x36, 0x3,0x24,0x6c, + 0x4,0x23,0x51, 0x3,0x24,0x6b, 0x3,0x24,0x71, 0x4,0x23,0x54, + 0x4,0x23,0x59, 0x3,0x24,0x72, 0x4,0x23,0x53, 0x3,0x24,0x6f, + 0x3,0x24,0x6e, 0x3,0x24,0x7a, 0xf,0x23,0x49, 0x3,0x25,0x25, + 0x3,0x27,0x7a, 0x3,0x27,0x6d, 0x4,0x25,0x5d, 0x3,0x27,0x76, + 0x5,0x25,0x42, 0x6,0x2a,0x39, 0x3,0x2b,0x52, 0x3,0x2b,0x60, + 0x3,0x2b,0x5f, 0x3,0x2b,0x62, 0x3,0x2b,0x5a, 0x4,0x28,0x59, + 0x4,0x28,0x5c, 0x3,0x2b,0x56, 0xf,0x29,0x5c, 0x4,0x2c,0x25, + 0x3,0x2f,0x7d, 0x4,0x2b,0x7e, 0x3,0x2f,0x75, 0x3,0x2f,0x7c, + 0x4,0x2c,0x21, 0x4,0x2b,0x7d, 0x6,0x35,0x7d, 0x3,0x30,0x24, + 0x5,0x2c,0x43, 0x3,0x34,0x5d, 0x3,0x34,0x65, 0x4,0x30,0x6a, + 0x5,0x36,0x70, 0x3,0x34,0x63, 0x3,0x34,0x5c, 0x4,0x30,0x70, + 0x3,0x34,0x5a, 0x4,0x30,0x73, 0x4,0x30,0x71, 0x4,0x30,0x6d, + 0x4,0x30,0x6c, 0xf,0x33,0x43, 0x3,0x38,0x53, 0x4,0x30,0x6f, + 0x5,0x36,0x76, 0x3,0x3a,0x32, 0x4,0x36,0x67, 0x3,0x3a,0x35, + 0x3,0x3a,0x2c, 0x4,0x36,0x5e, 0x4,0x36,0x59, 0x3,0x3a,0x39, + 0x3,0x3a,0x3e, 0x3,0x3a,0x2d, 0x4,0x36,0x60, 0x3,0x3a,0x3d, + 0x4,0x36,0x5f, 0x3,0x3a,0x37, 0x6,0x47,0x39, 0x5,0x36,0x79, + 0x5,0x36,0x7a, 0x3,0x3a,0x30, 0x4,0x36,0x58, 0x4,0x36,0x65, + 0x4,0x36,0x63, 0x3,0x3a,0x41, 0x5,0x36,0x6e, 0x3,0x3a,0x3f, + 0x3,0x3a,0x3a, 0x5,0x3e,0x39, 0x4,0x3c,0x4a, 0x4,0x3c,0x46, + 0x3,0x40,0x4f, 0x5,0x3e,0x3d, 0x4,0x3c,0x47, 0x4,0x3c,0x4c, + 0x3,0x40,0x4d, 0x3,0x40,0x50, 0x6,0x51,0x32, 0x4,0x42,0x52, + 0x3,0x46,0x32, 0x3,0x46,0x2f, 0x3,0x46,0x2d, 0x4,0x42,0x4f, + 0x4,0x42,0x4a, 0x4,0x42,0x55, 0x3,0x46,0x2b, 0x3,0x4b,0x3a, + 0x4,0x42,0x53, 0x4,0x42,0x56, 0x4,0x42,0x51, 0x5,0x45,0x22, + 0x4,0x49,0x30, 0x4,0x49,0x2c, 0x3,0x4b,0x42, 0x4,0x49,0x2d, + 0x3,0x4b,0x36, 0x7,0x21,0x4e, 0x4,0x4f,0x6b, 0x4,0x4f,0x6c, + 0x3,0x50,0x41, 0x4,0x4f,0x67, 0x4,0x4f,0x6a, 0x4,0x4f,0x6f, + 0x3,0x50,0x3c, 0x3,0x50,0x3a, 0x7,0x37,0x37, 0x4,0x55,0x72, + 0x3,0x54,0x46, 0x4,0x55,0x73, 0x4,0x4f,0x6d, 0x5,0x61,0x40, + 0x4,0x5a,0x70, 0x3,0x57,0x56, 0x5,0x61,0x45, 0x4,0x5f,0x4c, + 0x5,0x67,0x59, 0x5,0x6b,0x73, 0x3,0x5c,0x35, 0x3,0x5e,0x27, + 0x4,0x66,0x32, 0x3,0x60,0x2e, 0x3,0x60,0x2d, 0x4,0x6c,0x6c, + 0x7,0x62,0x2f, 0x3,0x22,0x32, 0x3,0x22,0x21, 0x3,0x23,0x3d, + 0x5,0x25,0x53, 0x3,0x27,0x7e, 0x3,0x2b,0x64, 0x3,0x30,0x26, + 0x4,0x42,0x58, 0x4,0x63,0x32, 0x3,0x22,0x33, 0x3,0x25,0x2e, + 0x4,0x23,0x5f, 0x3,0x25,0x39, 0x3,0x25,0x3a, 0x4,0x23,0x5e, + 0x3,0x25,0x3d, 0x3,0x25,0x3f, 0x3,0x25,0x3b, 0x3,0x25,0x34, + 0x3,0x28,0x27, 0x4,0x25,0x6d, 0x3,0x28,0x2b, 0x3,0x28,0x2c, + 0x3,0x2b,0x76, 0x6,0x2f,0x65, 0x3,0x2b,0x74, 0x3,0x2b,0x75, + 0x3,0x2b,0x73, 0x3,0x2b,0x6f, 0x3,0x30,0x29, 0x4,0x2c,0x2f, + 0x4,0x2c,0x31, 0x3,0x30,0x2d, 0x3,0x30,0x2c, 0x3,0x30,0x2e, + 0x3,0x30,0x31, 0x3,0x34,0x6c, 0x3,0x34,0x6d, 0x3,0x34,0x73, + 0x3,0x34,0x6a, 0xf,0x33,0x57, 0x4,0x31,0x21, 0x4,0x36,0x6b, + 0x3,0x3a,0x46, 0x4,0x36,0x6e, 0x3,0x3a,0x51, 0x6,0x47,0x4e, + 0x3,0x3a,0x48, 0x3,0x3a,0x4d, 0x4,0x3c,0x59, 0x4,0x3c,0x5b, + 0x3,0x40,0x53, 0x3,0x40,0x55, 0x4,0x3c,0x56, 0x4,0x3c,0x58, + 0x4,0x42,0x5e, 0x4,0x42,0x5d, 0x4,0x42,0x5b, 0x3,0x46,0x3b, + 0x4,0x42,0x5f, 0x3,0x46,0x39, 0x7,0x21,0x6a, 0x3,0x4b,0x52, + 0x3,0x4b,0x48, 0x4,0x49,0x33, 0x3,0x4b,0x4a, 0x3,0x4b,0x4e, + 0xf,0x4e,0x25, 0xf,0x4e,0x2e, 0x4,0x49,0x2a, 0x3,0x50,0x44, + 0x4,0x4f,0x78, 0x3,0x50,0x47, 0x3,0x50,0x42, 0x3,0x50,0x43, + 0x3,0x50,0x46, 0x3,0x50,0x45, 0x4,0x55,0x7c, 0x3,0x54,0x4d, + 0x3,0x54,0x4a, 0x4,0x55,0x7b, 0x7,0x3f,0x30, 0x3,0x57,0x5d, + 0x7,0x46,0x44, 0x5,0x6b,0x76, 0x3,0x60,0x72, 0x4,0x6c,0x6e, + 0x5,0x37,0x3c, 0x3,0x4d,0x41, 0x3,0x2b,0x78, 0x4,0x28,0x61, + 0x5,0x25,0x58, 0x4,0x36,0x77, 0x4,0x42,0x60, 0x3,0x46,0x47, + 0x4,0x5a,0x7a, 0x3,0x22,0x3a, 0x3,0x23,0x46, 0x3,0x23,0x48, + 0x4,0x23,0x65, 0x3,0x25,0x4a, 0x4,0x25,0x71, 0x5,0x25,0x59, + 0x4,0x25,0x77, 0x4,0x25,0x73, 0x4,0x25,0x78, 0x3,0x2b,0x7d, + 0x4,0x31,0x25, 0x6,0x3e,0x42, 0x3,0x34,0x7a, 0x3,0x3a,0x55, + 0x4,0x3c,0x5c, 0x3,0x50,0x3e, 0x3,0x21,0x74, 0x3,0x23,0x4c, + 0x3,0x23,0x4a, 0x4,0x22,0x56, 0x4,0x22,0x59, 0x4,0x22,0x55, + 0x3,0x23,0x49, 0x3,0x25,0x52, 0x3,0x25,0x57, 0x3,0x25,0x50, + 0x3,0x25,0x4f, 0x3,0x25,0x4d, 0x3,0x25,0x54, 0x3,0x28,0x31, + 0x3,0x28,0x3b, 0x4,0x25,0x7b, 0x3,0x28,0x42, 0x3,0x28,0x32, + 0x3,0x28,0x3a, 0x3,0x28,0x43, 0x3,0x28,0x47, 0x3,0x28,0x34, + 0x4,0x26,0x21, 0x3,0x28,0x44, 0x3,0x28,0x3e, 0x3,0x28,0x36, + 0x3,0x28,0x3c, 0x5,0x25,0x5d, 0x3,0x28,0x39, 0x3,0x28,0x30, + 0x4,0x28,0x6d, 0x4,0x28,0x69, 0x3,0x2b,0x7e, 0x3,0x2c,0x22, + 0xf,0x2a,0x2a, 0x4,0x28,0x67, 0x3,0x30,0x3f, 0x3,0x30,0x42, + 0x3,0x30,0x3d, 0x3,0x30,0x49, 0x3,0x30,0x47, 0x4,0x2c,0x3b, + 0x3,0x30,0x43, 0x3,0x30,0x50, 0x3,0x30,0x4c, 0x3,0x30,0x44, + 0x4,0x2c,0x3f, 0x4,0x2c,0x3a, 0x3,0x30,0x39, 0x4,0x2c,0x3c, + 0x3,0x30,0x51, 0x3,0x30,0x46, 0x3,0x30,0x41, 0x3,0x30,0x3a, + 0xf,0x2e,0x6b, 0xf,0x2e,0x78, 0x4,0x31,0x29, 0x3,0x35,0x26, + 0x3,0x35,0x2d, 0x3,0x35,0x21, 0x3,0x35,0x36, 0x4,0x31,0x28, + 0x3,0x35,0x2c, 0x3,0x35,0x23, 0x3,0x35,0x25, 0x3,0x3a,0x71, + 0x3,0x3a,0x67, 0x3,0x3a,0x74, 0x3,0x3a,0x64, 0x3,0x3a,0x76, + 0x3,0x3a,0x6c, 0x3,0x3a,0x6a, 0x3,0x3a,0x65, 0x5,0x37,0x4e, + 0x3,0x3a,0x6e, 0x5,0x37,0x46, 0x4,0x36,0x7e, 0x3,0x3a,0x6f, + 0x3,0x3a,0x5f, 0x4,0x36,0x7d, 0x3,0x3a,0x70, 0x3,0x3a,0x5d, + 0xf,0x3a,0x3c, 0x3,0x3a,0x6d, 0x3,0x3a,0x69, 0x3,0x3a,0x68, + 0x4,0x3c,0x5f, 0x3,0x40,0x62, 0x4,0x3c,0x61, 0x3,0x40,0x6e, + 0x3,0x40,0x6d, 0x3,0x40,0x68, 0x3,0x40,0x63, 0x4,0x3c,0x64, + 0x3,0x40,0x65, 0x4,0x3c,0x63, 0x3,0x40,0x70, 0x3,0x40,0x6b, + 0x3,0x40,0x6f, 0x3,0x40,0x6c, 0x3,0x40,0x69, 0x3,0x46,0x4b, + 0x4,0x42,0x67, 0x4,0x42,0x6c, 0x4,0x42,0x68, 0x4,0x42,0x66, + 0x3,0x46,0x49, 0x3,0x46,0x52, 0x3,0x46,0x51, 0x4,0x42,0x6b, + 0x4,0x42,0x6d, 0x3,0x46,0x4d, 0x3,0x46,0x4e, 0x4,0x42,0x69, + 0x4,0x49,0x3c, 0x4,0x49,0x3a, 0x3,0x4b,0x59, 0x3,0x4b,0x57, + 0x4,0x49,0x40, 0x3,0x4b,0x55, 0x3,0x50,0x52, 0x3,0x50,0x55, + 0x4,0x50,0x21, 0xf,0x54,0x2a, 0x4,0x56,0x22, 0x4,0x56,0x24, + 0x3,0x57,0x5f, 0x3,0x57,0x60, 0x4,0x5f,0x54, 0x5,0x67,0x5e, + 0x3,0x5a,0x30, 0x3,0x5a,0x32, 0x3,0x5c,0x37, 0x4,0x63,0x35, + 0x3,0x5c,0x38, 0x4,0x66,0x37, 0x4,0x68,0x65, 0x3,0x61,0x62, + 0x3,0x61,0x63, 0x3,0x23,0x4e, 0x6,0x26,0x78, 0x4,0x23,0x6d, + 0x3,0x28,0x49, 0x4,0x28,0x70, 0x4,0x2c,0x41, 0x3,0x30,0x54, + 0x3,0x3a,0x7d, 0x4,0x3c,0x67, 0x7,0x2d,0x2d, 0x3,0x61,0x3d, + 0x3,0x22,0x3c, 0x3,0x23,0x4f, 0x6,0x26,0x79, 0x3,0x25,0x59, + 0x4,0x23,0x70, 0x3,0x25,0x5b, 0x6,0x26,0x7a, 0x3,0x28,0x4f, + 0x5,0x28,0x6e, 0x3,0x2c,0x30, 0x3,0x2c,0x31, 0x3,0x2c,0x33, + 0x4,0x2c,0x42, 0x5,0x2c,0x7c, 0x6,0x36,0x5d, 0x3,0x35,0x42, + 0x3,0x35,0x3d, 0x3,0x35,0x3e, 0x4,0x31,0x2e, 0x6,0x3e,0x5a, + 0x3,0x35,0x40, 0x3,0x3b,0x21, 0x4,0x37,0x22, 0x4,0x3c,0x6a, + 0x4,0x3c,0x6c, 0x4,0x3c,0x6f, 0x3,0x40,0x77, 0x4,0x42,0x74, + 0x4,0x42,0x75, 0x3,0x4b,0x60, 0x4,0x42,0x77, 0x4,0x49,0x43, + 0x4,0x49,0x45, 0x4,0x49,0x46, 0x4,0x5a,0x7d, 0x3,0x5e,0x2b, + 0x7,0x62,0x35, 0x4,0x23,0x71, 0x4,0x26,0x26, 0x6,0x36,0x68, + 0x3,0x3b,0x22, 0x4,0x2c,0x4c, 0x6,0x3e,0x64, 0x4,0x42,0x78, + 0x5,0x4c,0x63, 0x4,0x22,0x5d, 0x4,0x23,0x74, 0x4,0x26,0x28, + 0x4,0x26,0x27, 0x4,0x28,0x74, 0x4,0x28,0x75, 0x4,0x2c,0x4d, + 0x5,0x31,0x75, 0x4,0x31,0x33, 0x5,0x31,0x73, 0x4,0x31,0x32, + 0x4,0x37,0x28, 0x4,0x37,0x29, 0x4,0x3c,0x71, 0x4,0x42,0x79, + 0x3,0x22,0x40, 0x3,0x23,0x53, 0x4,0x26,0x2a, 0x3,0x28,0x52, + 0x3,0x28,0x53, 0x4,0x28,0x79, 0x4,0x28,0x78, 0x3,0x2c,0x39, + 0x3,0x2c,0x38, 0x3,0x2c,0x36, 0x4,0x2c,0x4e, 0x6,0x3e,0x6b, + 0x3,0x35,0x45, 0x4,0x37,0x2b, 0x5,0x37,0x66, 0x4,0x42,0x7d, + 0x4,0x49,0x4a, 0x3,0x5a,0x37, 0x3,0x21,0x62, 0x4,0x23,0x77, + 0x3,0x22,0x42, 0x3,0x22,0x43, 0x3,0x22,0x41, 0x3,0x22,0x44, + 0x3,0x23,0x56, 0x4,0x22,0x61, 0x5,0x22,0x51, 0x4,0x23,0x7b, + 0x5,0x22,0x50, 0x3,0x23,0x57, 0x3,0x23,0x58, 0x4,0x23,0x78, + 0x4,0x23,0x79, 0x3,0x25,0x60, 0x5,0x23,0x70, 0x5,0x23,0x74, + 0x3,0x25,0x64, 0x3,0x25,0x65, 0x4,0x23,0x76, 0x3,0x28,0x5b, + 0x6,0x2a,0x7b, 0x4,0x26,0x31, 0x4,0x26,0x32, 0x4,0x26,0x2e, + 0x3,0x28,0x56, 0x6,0x2a,0x76, 0x3,0x28,0x59, 0x3,0x28,0x5a, + 0x5,0x25,0x6e, 0x3,0x2c,0x3a, 0x4,0x28,0x7b, 0x4,0x2c,0x5b, + 0x4,0x2c,0x53, 0x4,0x2c,0x51, 0x3,0x30,0x60, 0x4,0x2c,0x5f, + 0x4,0x2c,0x55, 0x3,0x30,0x5c, 0x4,0x2c,0x5a, 0x4,0x2c,0x5e, + 0x4,0x2c,0x57, 0x3,0x30,0x5d, 0x6,0x36,0x7c, 0x5,0x2d,0x2e, + 0x3,0x30,0x65, 0x4,0x2c,0x54, 0x3,0x35,0x56, 0x3,0x35,0x49, + 0x4,0x31,0x37, 0x3,0x35,0x4c, 0x4,0x31,0x3d, 0x6,0x3e,0x75, + 0x3,0x35,0x4d, 0x4,0x31,0x39, 0x6,0x3e,0x78, 0x3,0x35,0x50, + 0xf,0x34,0x3f, 0x3,0x35,0x53, 0x3,0x3b,0x2f, 0x3,0x3b,0x32, + 0x3,0x3b,0x29, 0x4,0x37,0x32, 0x4,0x37,0x34, 0x3,0x3b,0x35, + 0x4,0x3c,0x72, 0x3,0x3b,0x30, 0x3,0x3b,0x2c, 0x4,0x3c,0x76, + 0x4,0x3c,0x73, 0x4,0x3c,0x7e, 0x5,0x3e,0x6d, 0x4,0x3d,0x21, + 0x6,0x52,0x34, 0x3,0x40,0x7b, 0x4,0x3c,0x77, 0x4,0x43,0x22, + 0x6,0x5c,0x44, 0x4,0x43,0x2d, 0x4,0x43,0x2a, 0x4,0x43,0x21, + 0x3,0x46,0x55, 0x4,0x43,0x24, 0x3,0x46,0x5b, 0x3,0x46,0x58, + 0x4,0x43,0x2e, 0x3,0x46,0x57, 0x4,0x49,0x50, 0x4,0x49,0x4c, + 0x5,0x4c,0x6c, 0x3,0x4b,0x62, 0x5,0x4c,0x68, 0x4,0x49,0x4b, + 0x4,0x49,0x53, 0x3,0x4b,0x64, 0x4,0x49,0x4f, 0x4,0x49,0x4d, + 0x3,0x4b,0x61, 0x4,0x49,0x54, 0x4,0x50,0x26, 0x4,0x50,0x27, + 0x4,0x56,0x28, 0x4,0x50,0x25, 0x5,0x54,0x36, 0x3,0x50,0x59, + 0x7,0x2d,0x4c, 0x3,0x54,0x5a, 0x3,0x54,0x56, 0x5,0x5b,0x3c, + 0x4,0x56,0x27, 0x3,0x54,0x58, 0x7,0x3f,0x44, 0x4,0x5f,0x5a, + 0x5,0x67,0x63, 0x5,0x67,0x64, 0x4,0x66,0x3a, 0x3,0x5e,0x2c, + 0x4,0x68,0x68, 0x5,0x7b,0x3d, 0x3,0x23,0x5b, 0x6,0x21,0x6e, + 0x3,0x3b,0x38, 0x4,0x49,0x55, 0x3,0x22,0x45, 0x4,0x31,0x42, + 0x3,0x22,0x46, 0x4,0x22,0x65, 0x4,0x22,0x66, 0x3,0x23,0x5d, + 0x4,0x24,0x22, 0x4,0x24,0x24, 0x3,0x25,0x69, 0x4,0x24,0x21, + 0x3,0x25,0x6a, 0xf,0x24,0x25, 0x4,0x26,0x36, 0x4,0x26,0x37, + 0x4,0x29,0x25, 0x4,0x24,0x25, 0x4,0x29,0x22, 0x4,0x29,0x24, + 0x6,0x30,0x63, 0x3,0x2c,0x47, 0x4,0x29,0x23, 0x4,0x29,0x21, + 0x4,0x2c,0x66, 0x4,0x2c,0x68, 0x4,0x31,0x47, 0x4,0x31,0x48, + 0x4,0x31,0x45, 0x4,0x31,0x49, 0x3,0x35,0x5c, 0x4,0x37,0x3b, + 0x4,0x37,0x36, 0x4,0x37,0x3d, 0x4,0x37,0x3a, 0x3,0x3b,0x3c, + 0x4,0x37,0x3c, 0x3,0x3b,0x39, 0x4,0x37,0x39, 0x4,0x3d,0x28, + 0x4,0x3d,0x23, 0x4,0x3d,0x27, 0x4,0x3d,0x26, 0x4,0x3d,0x29, + 0x4,0x43,0x33, 0x4,0x43,0x32, 0x4,0x43,0x31, 0x4,0x43,0x2f, + 0x3,0x4b,0x6e, 0x3,0x4b,0x6f, 0x4,0x50,0x29, 0x4,0x56,0x2d, + 0x4,0x56,0x2b, 0x4,0x63,0x3b, 0x4,0x63,0x3a, 0x3,0x5f,0x44, + 0x4,0x68,0x6b, 0x6,0x48,0x44, 0x3,0x46,0x5e, 0x4,0x50,0x2b, + 0x3,0x23,0x60, 0x3,0x23,0x5f, 0x3,0x23,0x5e, 0x3,0x25,0x6c, + 0x6,0x27,0x47, 0x4,0x26,0x38, 0x4,0x26,0x3d, 0x4,0x26,0x3b, + 0x5,0x26,0x26, 0x4,0x26,0x3c, 0x3,0x28,0x64, 0x4,0x26,0x3a, + 0x3,0x28,0x66, 0xf,0x2f,0x38, 0x3,0x2c,0x49, 0x3,0x2c,0x4a, + 0x4,0x29,0x2a, 0x5,0x29,0x26, 0x4,0x29,0x29, 0x4,0x29,0x28, + 0x4,0x2c,0x6b, 0x4,0x2c,0x6d, 0x4,0x2c,0x6c, 0x3,0x30,0x6d, + 0x3,0x35,0x5e, 0x4,0x31,0x4e, 0x4,0x31,0x4c, 0x4,0x31,0x4f, + 0x3,0x35,0x5d, 0x5,0x38,0x29, 0x4,0x37,0x40, 0x4,0x37,0x41, + 0x3,0x3b,0x41, 0x5,0x3f,0x21, 0x4,0x43,0x36, 0x3,0x46,0x5f, + 0x4,0x43,0x39, 0x4,0x43,0x3a, 0x4,0x49,0x5b, 0x4,0x49,0x5c, + 0x3,0x4b,0x71, 0x3,0x50,0x5d, 0x4,0x50,0x2c, 0x4,0x50,0x2e, + 0x5,0x54,0x42, 0x4,0x5f,0x5e, 0x4,0x63,0x3c, 0x4,0x24,0x29, + 0x3,0x28,0x6a, 0x3,0x46,0x62, 0x7,0x2d,0x5b, 0x4,0x29,0x2b, + 0x4,0x3d,0x2d, 0x6,0x21,0x79, 0x4,0x22,0x6a, 0x3,0x23,0x63, + 0x3,0x23,0x64, 0x3,0x25,0x70, 0x3,0x28,0x6f, 0x4,0x26,0x40, + 0x4,0x26,0x41, 0x3,0x2c,0x4e, 0x4,0x29,0x2d, 0x6,0x30,0x7a, + 0x4,0x29,0x2e, 0x3,0x2c,0x4f, 0x4,0x2c,0x71, 0x5,0x32,0x46, + 0x4,0x31,0x51, 0x4,0x2c,0x72, 0x3,0x3b,0x46, 0x3,0x3b,0x43, + 0x5,0x3f,0x29, 0x4,0x3d,0x2f, 0x4,0x3d,0x2e, 0x6,0x52,0x4d, + 0x4,0x49,0x5d, 0x4,0x49,0x5f, 0x3,0x5e,0x2e, 0x4,0x26,0x42, + 0x4,0x50,0x31, 0x6,0x24,0x70, 0x3,0x28,0x73, 0x4,0x26,0x43, + 0x3,0x28,0x72, 0x3,0x35,0x64, 0x3,0x3b,0x48, 0x3,0x3b,0x49, + 0x4,0x43,0x3b, 0x4,0x49,0x61, 0x3,0x50,0x5f, 0x3,0x22,0x4b, + 0x6,0x2b,0x3e, 0x3,0x28,0x74, 0x4,0x29,0x32, 0x4,0x29,0x34, + 0x3,0x2c,0x52, 0x5,0x29,0x2f, 0x5,0x29,0x33, 0x3,0x2c,0x53, + 0x6,0x31,0x25, 0x5,0x2d,0x47, 0xf,0x2f,0x3e, 0x4,0x31,0x54, + 0x3,0x35,0x66, 0x3,0x35,0x67, 0x4,0x37,0x49, 0x3,0x3b,0x4a, + 0x4,0x37,0x48, 0x4,0x3d,0x33, 0x5,0x45,0x69, 0x4,0x43,0x3d, + 0x6,0x5c,0x67, 0x3,0x50,0x60, 0x4,0x50,0x34, 0x4,0x56,0x2f, + 0x6,0x21,0x7e, 0x3,0x23,0x65, 0x3,0x23,0x68, 0x4,0x24,0x31, + 0x5,0x22,0x67, 0x4,0x22,0x70, 0x3,0x28,0x7b, 0x3,0x28,0x7d, + 0x3,0x25,0x79, 0x4,0x24,0x2e, 0x3,0x28,0x7c, 0x4,0x24,0x30, + 0x4,0x24,0x33, 0x3,0x25,0x73, 0x4,0x24,0x2f, 0x4,0x24,0x32, + 0x3,0x26,0x24, 0x3,0x28,0x79, 0x4,0x29,0x35, 0x4,0x29,0x37, + 0x4,0x26,0x4d, 0x3,0x2c,0x59, 0x3,0x29,0x24, 0x4,0x26,0x48, + 0x3,0x29,0x23, 0x4,0x26,0x4e, 0x4,0x26,0x4c, 0x4,0x26,0x46, + 0xf,0x2a,0x3e, 0x3,0x2c,0x58, 0x4,0x29,0x41, 0x3,0x2c,0x62, + 0x4,0x29,0x3c, 0x4,0x26,0x49, 0x4,0x29,0x39, 0x3,0x30,0x7d, + 0x6,0x37,0x54, 0x4,0x29,0x3d, 0x5,0x29,0x35, 0x4,0x2d,0x28, + 0x4,0x29,0x48, 0x4,0x29,0x3a, 0x4,0x29,0x3b, 0x4,0x29,0x40, + 0x3,0x2c,0x55, 0x6,0x37,0x5a, 0x3,0x30,0x7c, 0x3,0x2c,0x5e, + 0x4,0x31,0x5b, 0x5,0x2d,0x5a, 0x3,0x35,0x73, 0x4,0x2d,0x22, + 0x3,0x35,0x69, 0x3,0x30,0x75, 0x4,0x2d,0x23, 0x3,0x35,0x70, + 0x4,0x2d,0x24, 0x3,0x30,0x77, 0x6,0x37,0x5e, 0x3,0x31,0x24, + 0x4,0x2d,0x2b, 0x4,0x31,0x5a, 0x4,0x31,0x5c, 0x4,0x31,0x62, + 0x3,0x35,0x6b, 0x6,0x48,0x6f, 0x4,0x31,0x63, 0x3,0x35,0x75, + 0x4,0x31,0x60, 0x5,0x32,0x5b, 0x4,0x31,0x5d, 0x3,0x35,0x6c, + 0x3,0x3b,0x4e, 0x4,0x31,0x6c, 0x4,0x31,0x67, 0x3,0x3b,0x4c, + 0x3,0x35,0x6d, 0x3,0x35,0x77, 0x3,0x3b,0x57, 0x4,0x31,0x64, + 0x6,0x48,0x75, 0x3,0x3b,0x53, 0x4,0x31,0x66, 0x4,0x31,0x5e, + 0x5,0x2d,0x57, 0x3,0x3b,0x52, 0x5,0x38,0x42, 0x4,0x31,0x6a, + 0x5,0x38,0x48, 0x4,0x37,0x56, 0x4,0x37,0x50, 0x3,0x3b,0x5c, + 0x4,0x37,0x59, 0x3,0x3b,0x5f, 0x4,0x37,0x54, 0x4,0x37,0x4e, + 0x5,0x3f,0x32, 0x3,0x41,0x25, 0x4,0x37,0x55, 0x4,0x3d,0x3e, + 0x3,0x3b,0x60, 0x4,0x3d,0x37, 0x5,0x32,0x58, 0x3,0x3b,0x5b, + 0x3,0x41,0x26, 0x3,0x41,0x2d, 0x4,0x3d,0x3b, 0x4,0x43,0x43, + 0x5,0x3f,0x42, 0x6,0x52,0x69, 0x3,0x46,0x67, 0x4,0x3d,0x3a, + 0x4,0x3d,0x3c, 0x3,0x41,0x30, 0x3,0x46,0x65, 0x4,0x43,0x42, + 0x4,0x43,0x50, 0x3,0x46,0x66, 0x3,0x41,0x2f, 0x4,0x43,0x48, + 0x4,0x43,0x47, 0x4,0x43,0x49, 0x3,0x4b,0x7d, 0x4,0x43,0x4d, + 0x4,0x49,0x65, 0x3,0x4c,0x22, 0x3,0x46,0x69, 0x3,0x4b,0x7b, + 0x4,0x43,0x4a, 0x4,0x43,0x4c, 0x4,0x43,0x46, 0x3,0x4c,0x27, + 0x3,0x4b,0x78, 0x4,0x43,0x4b, 0x4,0x50,0x38, 0x3,0x4c,0x2a, + 0x4,0x49,0x67, 0x4,0x49,0x69, 0x4,0x49,0x68, 0x4,0x49,0x6b, + 0x7,0x22,0x7c, 0x4,0x49,0x6d, 0x3,0x50,0x69, 0x4,0x49,0x6c, + 0x3,0x4c,0x26, 0x4,0x50,0x39, 0x5,0x5b,0x4c, 0x4,0x5b,0x23, + 0x4,0x5b,0x29, 0x4,0x56,0x36, 0x4,0x5b,0x25, 0x3,0x57,0x67, + 0x4,0x5b,0x24, 0xf,0x5a,0x29, 0x3,0x57,0x66, 0x4,0x50,0x3a, + 0x5,0x67,0x78, 0x4,0x63,0x43, 0x4,0x5f,0x64, 0x5,0x67,0x73, + 0x7,0x47,0x2c, 0x3,0x5e,0x30, 0x4,0x63,0x42, 0x4,0x63,0x40, + 0x3,0x5f,0x47, 0x4,0x68,0x6c, 0x3,0x61,0x78, 0x3,0x23,0x6a, + 0x3,0x26,0x26, 0x4,0x26,0x54, 0x6,0x2b,0x52, 0x4,0x2d,0x2f, + 0x4,0x2d,0x30, 0x5,0x2d,0x5d, 0x3,0x35,0x7a, 0x3,0x3b,0x65, + 0x4,0x3d,0x42, 0x4,0x43,0x54, 0x5,0x4d,0x37, 0x3,0x4c,0x2b, + 0x3,0x54,0x62, 0x6,0x27,0x6e, 0x4,0x26,0x55, 0x4,0x26,0x56, + 0x4,0x29,0x4d, 0x3,0x2c,0x64, 0x4,0x21,0x7b, 0x4,0x21,0x7a, + 0x3,0x22,0x4f, 0x4,0x22,0x74, 0x4,0x22,0x73, 0x4,0x22,0x75, + 0x4,0x24,0x3a, 0x4,0x24,0x36, 0x3,0x26,0x2c, 0x3,0x26,0x2d, + 0x3,0x26,0x30, 0x3,0x26,0x2b, 0x4,0x26,0x58, 0x3,0x29,0x2d, + 0x5,0x26,0x3a, 0x3,0x29,0x2c, 0x3,0x29,0x38, 0x4,0x29,0x55, + 0x4,0x2d,0x33, 0x4,0x26,0x59, 0x3,0x29,0x2b, 0xf,0x27,0x2e, + 0x4,0x29,0x4e, 0x4,0x29,0x54, 0x3,0x2c,0x66, 0x3,0x29,0x27, + 0x3,0x2c,0x67, 0x3,0x2c,0x69, 0x4,0x2d,0x3c, 0x3,0x2c,0x71, + 0x4,0x29,0x56, 0x3,0x2c,0x68, 0x4,0x29,0x52, 0x4,0x2d,0x32, + 0x4,0x2d,0x31, 0x3,0x2c,0x6a, 0x3,0x2c,0x65, 0x3,0x31,0x34, + 0x3,0x31,0x2a, 0x3,0x35,0x7b, 0x3,0x31,0x31, 0x3,0x31,0x3a, + 0x4,0x2d,0x3b, 0x3,0x31,0x2d, 0x3,0x31,0x2b, 0x4,0x31,0x7c, + 0x4,0x32,0x21, 0x4,0x31,0x7b, 0x3,0x36,0x2c, 0x6,0x40,0x32, + 0x4,0x32,0x25, 0x3,0x36,0x2f, 0x3,0x36,0x30, 0x4,0x31,0x79, + 0x3,0x35,0x7e, 0x4,0x31,0x71, 0x3,0x36,0x25, 0x4,0x31,0x7e, + 0x4,0x31,0x7a, 0x3,0x3b,0x6b, 0x3,0x36,0x2a, 0x4,0x37,0x6e, + 0x4,0x37,0x62, 0x3,0x36,0x21, 0x4,0x3d,0x45, 0x3,0x41,0x31, + 0x4,0x37,0x64, 0x3,0x3b,0x6a, 0x4,0x37,0x6b, 0x4,0x37,0x68, + 0x4,0x37,0x65, 0x3,0x3b,0x6c, 0x3,0x3b,0x69, 0x4,0x37,0x70, + 0x4,0x37,0x61, 0x3,0x3b,0x6e, 0x4,0x3d,0x50, 0x4,0x3d,0x4f, + 0x3,0x41,0x37, 0x4,0x3d,0x4c, 0x4,0x3d,0x4a, 0x3,0x41,0x35, + 0x3,0x41,0x3b, 0x4,0x3d,0x48, 0x4,0x3d,0x4e, 0x3,0x41,0x3c, + 0x3,0x41,0x4a, 0x3,0x41,0x43, 0x3,0x41,0x3f, 0x3,0x41,0x47, + 0x3,0x41,0x40, 0x3,0x41,0x46, 0x3,0x41,0x41, 0x3,0x41,0x39, + 0x4,0x43,0x58, 0x4,0x43,0x61, 0x6,0x5d,0x32, 0x3,0x46,0x79, + 0x3,0x47,0x2e, 0x3,0x47,0x2d, 0x4,0x43,0x56, 0x3,0x46,0x7c, + 0x3,0x47,0x27, 0x3,0x47,0x2f, 0x4,0x43,0x5c, 0x3,0x46,0x77, + 0x5,0x46,0x25, 0x3,0x46,0x7d, 0x4,0x49,0x75, 0x3,0x4c,0x36, + 0x4,0x43,0x64, 0x5,0x46,0x23, 0x3,0x47,0x2b, 0x3,0x47,0x2c, + 0x4,0x4a,0x24, 0x3,0x4c,0x33, 0x7,0x23,0x3a, 0x4,0x49,0x79, + 0x4,0x49,0x7a, 0x4,0x49,0x76, 0x4,0x4a,0x28, 0x4,0x4a,0x22, + 0x5,0x4d,0x3a, 0x4,0x49,0x7e, 0x5,0x4d,0x3e, 0x3,0x4c,0x3c, + 0x4,0x4a,0x23, 0x3,0x50,0x74, 0x4,0x56,0x39, 0x4,0x50,0x45, + 0x3,0x50,0x73, 0x3,0x50,0x6e, 0x3,0x50,0x78, 0x3,0x50,0x72, + 0x3,0x50,0x71, 0x3,0x54,0x65, 0x3,0x54,0x6a, 0x3,0x54,0x68, + 0x3,0x54,0x63, 0x3,0x54,0x66, 0x4,0x5b,0x2d, 0x3,0x57,0x69, + 0x4,0x5b,0x32, 0x4,0x5b,0x30, 0x4,0x5b,0x2e, 0x3,0x57,0x6f, + 0x3,0x57,0x71, 0x4,0x5b,0x31, 0x3,0x57,0x68, 0x4,0x5b,0x2f, + 0x3,0x57,0x72, 0xf,0x5e,0x73, 0x3,0x5a,0x3d, 0x3,0x5a,0x3e, + 0x4,0x63,0x47, 0x3,0x5c,0x40, 0x4,0x63,0x46, 0x5,0x70,0x24, + 0x3,0x5e,0x32, 0x4,0x66,0x40, 0x3,0x60,0x31, 0x4,0x6a,0x49, + 0x4,0x6a,0x48, 0x5,0x79,0x2a, 0x4,0x26,0x5b, 0x4,0x2d,0x40, + 0x4,0x2d,0x3f, 0x4,0x32,0x27, 0x4,0x3d,0x54, 0x4,0x24,0x40, + 0x3,0x26,0x3a, 0x4,0x26,0x5e, 0x4,0x26,0x5f, 0x4,0x29,0x5d, + 0x3,0x2c,0x75, 0x3,0x31,0x3e, 0x4,0x2d,0x42, 0x6,0x38,0x2b, + 0x3,0x36,0x33, 0x4,0x32,0x28, 0x3,0x36,0x35, 0x4,0x32,0x2c, + 0x4,0x37,0x79, 0x4,0x37,0x75, 0x4,0x37,0x78, 0x4,0x37,0x77, + 0x4,0x37,0x76, 0x5,0x38,0x7c, 0x3,0x3b,0x77, 0x4,0x3d,0x5c, + 0x4,0x3d,0x59, 0x4,0x3d,0x5b, 0x3,0x41,0x4c, 0x4,0x43,0x66, + 0x5,0x46,0x30, 0x5,0x46,0x2e, 0x4,0x43,0x69, 0x4,0x4a,0x2b, + 0x4,0x4a,0x2a, 0x4,0x4a,0x29, 0x4,0x50,0x49, 0x4,0x50,0x4c, + 0x3,0x57,0x73, 0x4,0x5b,0x3a, 0x4,0x63,0x4c, 0x4,0x66,0x43, + 0x3,0x26,0x3b, 0x6,0x38,0x2c, 0x3,0x41,0x4f, 0x3,0x29,0x3a, + 0x4,0x29,0x61, 0x3,0x31,0x41, 0x3,0x39,0x2b, 0x3,0x3b,0x78, + 0x4,0x4a,0x2e, 0x4,0x56,0x3e, 0x4,0x6a,0x4b, 0x4,0x29,0x62, + 0x4,0x2d,0x49, 0x6,0x38,0x30, 0x6,0x49,0x61, 0x6,0x5d,0x51, + 0x5,0x4d,0x4b, 0x3,0x23,0x71, 0x6,0x2b,0x70, 0x6,0x38,0x34, + 0x3,0x36,0x3b, 0x3,0x36,0x3e, 0x4,0x3d,0x65, 0x4,0x4a,0x30, + 0x4,0x4a,0x31, 0x4,0x22,0x78, 0x4,0x22,0x79, 0x4,0x24,0x43, + 0x3,0x26,0x3c, 0x3,0x26,0x3f, 0x3,0x26,0x3e, 0x3,0x26,0x40, + 0x3,0x29,0x3f, 0x3,0x29,0x3d, 0x4,0x26,0x63, 0x5,0x29,0x4f, + 0x4,0x29,0x63, 0x3,0x2c,0x7b, 0x4,0x29,0x64, 0x4,0x29,0x65, + 0x3,0x2c,0x78, 0x3,0x2d,0x26, 0x6,0x31,0x67, 0x4,0x2d,0x4c, + 0x4,0x32,0x3b, 0x4,0x2d,0x4b, 0x3,0x31,0x47, 0x6,0x38,0x37, + 0x3,0x31,0x4a, 0xf,0x2f,0x6e, 0x4,0x2d,0x4d, 0x6,0x40,0x51, + 0x4,0x32,0x36, 0x4,0x32,0x3a, 0x4,0x32,0x37, 0x3,0x36,0x43, + 0x6,0x40,0x4f, 0x3,0x3c,0x22, 0x4,0x37,0x7e, 0x3,0x3b,0x7a, + 0x3,0x3b,0x7b, 0x4,0x38,0x25, 0x3,0x3c,0x27, 0x4,0x38,0x22, + 0x6,0x49,0x73, 0x3,0x3c,0x21, 0x6,0x53,0x3d, 0x5,0x3f,0x62, + 0x3,0x41,0x52, 0x3,0x41,0x57, 0x3,0x41,0x5a, 0x3,0x41,0x55, + 0x3,0x41,0x53, 0x3,0x41,0x5c, 0x3,0x41,0x58, 0x4,0x3d,0x68, + 0x4,0x3d,0x67, 0x3,0x41,0x54, 0x3,0x47,0x38, 0x4,0x43,0x6e, + 0x3,0x47,0x32, 0x3,0x47,0x36, 0x5,0x4d,0x53, 0x4,0x4a,0x32, + 0x3,0x4c,0x42, 0x3,0x4c,0x45, 0x4,0x50,0x52, 0x4,0x50,0x51, + 0x3,0x51,0x21, 0x5,0x4d,0x50, 0x3,0x50,0x7b, 0x3,0x50,0x7c, + 0x4,0x50,0x53, 0x7,0x2e,0x5a, 0x3,0x54,0x73, 0x3,0x54,0x6e, + 0x4,0x56,0x40, 0x4,0x5b,0x40, 0x4,0x5b,0x41, 0x4,0x5b,0x3f, + 0x7,0x3f,0x76, 0x3,0x5a,0x40, 0x3,0x5a,0x41, 0x3,0x5c,0x44, + 0x3,0x5f,0x4c, 0x3,0x5f,0x4d, 0x5,0x75,0x6e, 0x5,0x75,0x6d, + 0x3,0x23,0x74, 0x4,0x50,0x56, 0x3,0x54,0x74, 0x3,0x29,0x44, + 0x3,0x31,0x4e, 0x5,0x2e,0x25, 0x3,0x36,0x49, 0x3,0x3c,0x28, + 0x4,0x3a,0x43, 0x5,0x46,0x45, 0x5,0x4d,0x58, 0x3,0x51,0x25, + 0x3,0x23,0x76, 0x3,0x26,0x43, 0x4,0x24,0x48, 0x3,0x26,0x46, + 0x3,0x29,0x4b, 0x3,0x29,0x46, 0xf,0x27,0x4c, 0x3,0x29,0x50, + 0x3,0x29,0x4d, 0x5,0x26,0x51, 0x3,0x2d,0x28, 0x3,0x2d,0x2c, + 0x4,0x29,0x6f, 0x4,0x29,0x6c, 0x3,0x2d,0x29, 0x4,0x2d,0x57, + 0x4,0x2d,0x51, 0x4,0x2d,0x54, 0x4,0x2d,0x58, 0x3,0x31,0x52, + 0x5,0x2e,0x2b, 0x4,0x2d,0x52, 0x4,0x2d,0x5b, 0x3,0x31,0x55, + 0x4,0x2d,0x56, 0x3,0x31,0x51, 0x3,0x36,0x59, 0x4,0x32,0x43, + 0x3,0x36,0x4a, 0x3,0x36,0x4f, 0x5,0x32,0x79, 0x4,0x32,0x42, + 0x4,0x32,0x46, 0x4,0x32,0x41, 0x4,0x38,0x34, 0x3,0x36,0x58, + 0x3,0x36,0x5d, 0x4,0x38,0x2f, 0x3,0x3c,0x2e, 0x4,0x38,0x2c, + 0x3,0x3c,0x3f, 0x3,0x3c,0x30, 0x4,0x38,0x2a, 0x5,0x39,0x33, + 0x4,0x38,0x2d, 0x3,0x3c,0x2c, 0x5,0x39,0x39, 0x4,0x38,0x35, + 0x3,0x3c,0x35, 0x4,0x38,0x37, 0x3,0x3c,0x36, 0x3,0x3c,0x43, + 0x3,0x3c,0x2b, 0x3,0x3c,0x2d, 0x4,0x3d,0x78, 0x3,0x41,0x71, + 0x3,0x41,0x66, 0x3,0x41,0x70, 0x4,0x3d,0x6b, 0x4,0x3d,0x6e, + 0x4,0x3d,0x6f, 0x3,0x41,0x6c, 0x3,0x41,0x69, 0x3,0x41,0x64, + 0x4,0x3d,0x6d, 0x3,0x41,0x5e, 0x4,0x3d,0x75, 0x3,0x41,0x62, + 0x3,0x41,0x63, 0x3,0x41,0x7a, 0x3,0x41,0x61, 0x3,0x41,0x5f, + 0x4,0x44,0x23, 0x4,0x3d,0x76, 0x3,0x41,0x60, 0x3,0x42,0x5a, + 0x3,0x41,0x67, 0xf,0x48,0x55, 0x4,0x44,0x24, 0x4,0x43,0x75, + 0x4,0x44,0x21, 0x4,0x43,0x7c, 0x3,0x47,0x3f, 0x4,0x43,0x78, + 0x4,0x43,0x73, 0x3,0x47,0x41, 0x4,0x43,0x74, 0x3,0x47,0x4a, + 0x4,0x43,0x7d, 0x4,0x43,0x7e, 0x4,0x43,0x7a, 0x4,0x44,0x22, + 0x3,0x47,0x4f, 0x3,0x47,0x40, 0x4,0x44,0x25, 0x4,0x43,0x71, + 0x5,0x46,0x4b, 0x3,0x47,0x49, 0x4,0x3d,0x72, 0x3,0x47,0x50, + 0xf,0x48,0x52, 0x3,0x4c,0x4e, 0x5,0x4d,0x6d, 0x4,0x4a,0x3a, + 0x3,0x4c,0x4c, 0x5,0x4d,0x61, 0x3,0x4c,0x53, 0x4,0x4a,0x37, + 0x4,0x4a,0x36, 0x3,0x4c,0x5d, 0x3,0x4c,0x58, 0x7,0x23,0x6f, + 0x4,0x4a,0x38, 0x4,0x4a,0x42, 0x3,0x4c,0x5a, 0x3,0x4c,0x5c, + 0x3,0x4c,0x48, 0x3,0x4c,0x55, 0x3,0x51,0x43, 0x3,0x51,0x42, + 0x4,0x50,0x60, 0x4,0x50,0x5a, 0x3,0x51,0x37, 0x3,0x51,0x30, + 0x4,0x50,0x59, 0x4,0x4a,0x39, 0x3,0x51,0x3f, 0x3,0x51,0x2a, + 0x3,0x51,0x3d, 0x4,0x56,0x49, 0x3,0x51,0x33, 0x3,0x51,0x39, + 0x3,0x4c,0x4b, 0x4,0x50,0x5e, 0x3,0x51,0x2d, 0x4,0x50,0x64, + 0x3,0x51,0x35, 0x3,0x51,0x34, 0x3,0x51,0x36, 0x3,0x55,0x22, + 0x4,0x56,0x48, 0x3,0x54,0x7e, 0x3,0x55,0x25, 0x3,0x54,0x7d, + 0x4,0x56,0x4b, 0x7,0x38,0x55, 0x5,0x5b,0x68, 0x3,0x54,0x77, + 0x3,0x55,0x26, 0xf,0x5f,0x29, 0x3,0x54,0x79, 0x3,0x55,0x28, + 0x4,0x5b,0x48, 0x4,0x5b,0x44, 0x3,0x57,0x7c, 0x4,0x5b,0x4a, + 0x4,0x5b,0x49, 0x4,0x5f,0x6f, 0x4,0x5f,0x73, 0x3,0x5a,0x49, + 0x4,0x5f,0x70, 0x4,0x5f,0x6e, 0x4,0x5f,0x72, 0x4,0x5f,0x75, + 0x3,0x5a,0x4c, 0x3,0x5a,0x4b, 0xf,0x62,0x53, 0x3,0x5a,0x4a, + 0x3,0x5c,0x4c, 0x3,0x5c,0x46, 0x4,0x63,0x51, 0x4,0x63,0x4f, + 0x3,0x5c,0x48, 0x3,0x5c,0x4d, 0x4,0x63,0x54, 0x3,0x5c,0x4b, + 0x3,0x5c,0x45, 0xf,0x65,0x3e, 0x5,0x70,0x27, 0x3,0x5e,0x36, + 0x3,0x5c,0x4a, 0x3,0x5f,0x50, 0x4,0x68,0x6e, 0x3,0x60,0x35, + 0x3,0x60,0x33, 0x3,0x60,0x34, 0x5,0x24,0x48, 0x6,0x28,0x30, + 0x4,0x26,0x6d, 0x5,0x26,0x56, 0x4,0x26,0x70, 0x4,0x26,0x6c, + 0x4,0x2d,0x60, 0x4,0x29,0x70, 0x4,0x29,0x71, 0x6,0x31,0x78, + 0x4,0x29,0x74, 0x4,0x29,0x73, 0x5,0x2e,0x2e, 0x4,0x2d,0x5d, + 0x4,0x2d,0x61, 0x4,0x2d,0x62, 0x4,0x2d,0x5e, 0x3,0x36,0x61, + 0x4,0x32,0x48, 0x4,0x32,0x49, 0x6,0x40,0x6e, 0x4,0x38,0x3b, + 0x4,0x38,0x39, 0x3,0x3c,0x46, 0x5,0x39,0x43, 0x4,0x38,0x3c, + 0x6,0x38,0x64, 0x4,0x3e,0x21, 0x4,0x3d,0x7c, 0x4,0x3d,0x7b, + 0x4,0x3d,0x7d, 0x4,0x3d,0x7e, 0x4,0x3e,0x22, 0x3,0x47,0x52, + 0x6,0x5d,0x77, 0x4,0x44,0x2a, 0x4,0x4a,0x4c, 0x3,0x4c,0x68, + 0x4,0x50,0x66, 0x4,0x50,0x67, 0x4,0x56,0x4f, 0x4,0x56,0x4e, + 0x3,0x55,0x2a, 0x3,0x55,0x2c, 0x4,0x5f,0x77, 0x7,0x4e,0x22, + 0x4,0x68,0x71, 0x5,0x75,0x77, 0x5,0x79,0x2f, 0x6,0x25,0x25, + 0x3,0x2d,0x3e, 0x3,0x2b,0x7b, 0x3,0x3c,0x48, 0x4,0x38,0x3f, + 0x5,0x46,0x5f, 0x3,0x58,0x24, 0x4,0x22,0x7c, 0x3,0x29,0x57, + 0x5,0x26,0x62, 0x4,0x26,0x75, 0x3,0x2d,0x3f, 0x3,0x2d,0x41, + 0x3,0x2d,0x40, 0x3,0x31,0x69, 0x3,0x36,0x63, 0x4,0x32,0x4a, + 0x4,0x38,0x45, 0x4,0x38,0x44, 0x4,0x38,0x46, 0x4,0x38,0x42, + 0x3,0x3c,0x4a, 0x3,0x42,0x23, 0x4,0x3e,0x23, 0x4,0x3e,0x24, + 0x3,0x42,0x24, 0x4,0x44,0x32, 0x5,0x46,0x60, 0x4,0x44,0x33, + 0x4,0x44,0x30, 0x4,0x4a,0x50, 0x4,0x4a,0x4f, 0x4,0x50,0x6b, + 0x4,0x50,0x6a, 0x4,0x56,0x51, 0x4,0x63,0x55, 0x3,0x5c,0x4e, + 0x5,0x75,0x78, 0x5,0x24,0x4e, 0x4,0x26,0x78, 0x4,0x2d,0x64, + 0x3,0x31,0x6b, 0x4,0x32,0x4f, 0x4,0x38,0x49, 0x4,0x38,0x4a, + 0x4,0x38,0x4b, 0x3,0x42,0x25, 0x4,0x44,0x35, 0x3,0x51,0x47, + 0x3,0x51,0x48, 0x4,0x50,0x6e, 0x4,0x56,0x53, 0x3,0x58,0x25, + 0x4,0x29,0x7b, 0x3,0x23,0x7b, 0x4,0x26,0x79, 0x3,0x29,0x5b, + 0x4,0x26,0x7a, 0xf,0x27,0x5b, 0x3,0x2d,0x43, 0x4,0x2d,0x66, + 0x4,0x32,0x52, 0x4,0x32,0x54, 0x4,0x32,0x53, 0x4,0x32,0x55, + 0x3,0x36,0x67, 0x4,0x2d,0x67, 0x4,0x32,0x51, 0x5,0x39,0x5b, + 0x3,0x3c,0x4c, 0x4,0x38,0x4f, 0x4,0x38,0x4c, 0x4,0x3e,0x29, + 0x3,0x42,0x27, 0x4,0x3e,0x28, 0x4,0x3e,0x27, 0x4,0x44,0x3f, + 0x4,0x44,0x38, 0x4,0x44,0x39, 0x4,0x44,0x3a, 0x5,0x46,0x68, + 0x4,0x44,0x3c, 0x4,0x50,0x6f, 0x4,0x50,0x71, 0x4,0x50,0x72, + 0x3,0x51,0x49, 0x4,0x5b,0x50, 0x4,0x5b,0x4f, 0x3,0x5a,0x50, + 0x4,0x6d,0x57, 0x4,0x2d,0x6a, 0x3,0x29,0x5c, 0x3,0x36,0x68, + 0x3,0x4c,0x69, 0x3,0x51,0x4a, 0x4,0x21,0x4f, 0x3,0x22,0x56, + 0x3,0x22,0x55, 0x3,0x24,0x22, 0x5,0x21,0x74, 0x4,0x23,0x22, + 0x3,0x26,0x54, 0x3,0x26,0x4f, 0x4,0x24,0x4f, 0x3,0x26,0x5d, + 0x6,0x28,0x49, 0x3,0x26,0x5a, 0x4,0x24,0x51, 0x3,0x26,0x4b, + 0x6,0x28,0x4a, 0x6,0x28,0x44, 0x3,0x26,0x58, 0x3,0x29,0x61, + 0x3,0x29,0x5f, 0x3,0x29,0x5e, 0x3,0x29,0x62, 0x3,0x29,0x60, + 0x4,0x26,0x7e, 0x3,0x29,0x68, 0x3,0x29,0x66, 0xf,0x27,0x66, + 0x3,0x2d,0x44, 0x5,0x2a,0x24, 0x4,0x27,0x22, 0x3,0x2d,0x54, + 0x5,0x29,0x7b, 0x5,0x29,0x7c, 0x4,0x29,0x7e, 0x3,0x2d,0x56, + 0x3,0x2d,0x4c, 0xf,0x30,0x49, 0x6,0x38,0x72, 0x3,0x31,0x70, + 0x3,0x31,0x71, 0x4,0x2d,0x6b, 0x6,0x39,0x33, 0x3,0x31,0x74, + 0x4,0x2d,0x6c, 0x3,0x36,0x69, 0x3,0x32,0x24, 0x3,0x32,0x23, + 0x3,0x31,0x7e, 0x3,0x31,0x75, 0x4,0x32,0x57, 0x3,0x36,0x71, + 0x4,0x32,0x63, 0x4,0x32,0x64, 0x3,0x36,0x6e, 0x4,0x32,0x5e, + 0x3,0x37,0x22, 0x3,0x36,0x6d, 0x3,0x3c,0x4f, 0x3,0x36,0x7e, + 0x4,0x32,0x58, 0x4,0x32,0x68, 0x5,0x39,0x5e, 0x4,0x32,0x5a, + 0x4,0x32,0x5c, 0x6,0x41,0x2b, 0x5,0x33,0x3d, 0x3,0x3c,0x5e, + 0x3,0x36,0x7b, 0x3,0x3c,0x5f, 0x3,0x36,0x73, 0x6,0x41,0x41, + 0x3,0x36,0x78, 0xf,0x36,0x33, 0x4,0x38,0x51, 0x4,0x38,0x56, + 0x3,0x3c,0x65, 0x4,0x38,0x52, 0x3,0x3c,0x59, 0x4,0x38,0x59, + 0x3,0x3c,0x6a, 0x3,0x3c,0x67, 0x3,0x3c,0x55, 0x4,0x38,0x57, + 0x4,0x38,0x5a, 0x3,0x3c,0x53, 0x3,0x3c,0x57, 0x3,0x3c,0x61, + 0x3,0x42,0x2b, 0x6,0x4a,0x6d, 0xf,0x3c,0x43, 0xf,0x3c,0x5a, + 0x4,0x3e,0x37, 0x3,0x42,0x2c, 0x3,0x42,0x37, 0x3,0x42,0x35, + 0x3,0x42,0x48, 0x3,0x42,0x38, 0x4,0x3e,0x30, 0x4,0x3e,0x39, + 0x4,0x3e,0x2d, 0x3,0x42,0x42, 0x4,0x3e,0x38, 0x3,0x42,0x34, + 0x3,0x42,0x3c, 0x4,0x3e,0x3c, 0x3,0x42,0x2f, 0x3,0x42,0x41, + 0x5,0x40,0x27, 0x4,0x3e,0x2f, 0x4,0x3e,0x32, 0x3,0x42,0x32, + 0x3,0x42,0x43, 0x3,0x47,0x55, 0x4,0x44,0x49, 0x3,0x47,0x60, + 0x6,0x5e,0x3b, 0x3,0x47,0x59, 0x6,0x54,0x50, 0x3,0x47,0x58, + 0x4,0x44,0x46, 0x4,0x44,0x4d, 0x4,0x44,0x4a, 0x6,0x5e,0x40, + 0x3,0x4c,0x6e, 0x4,0x4a,0x5f, 0x4,0x4a,0x61, 0x3,0x4c,0x6f, + 0x3,0x4c,0x7c, 0x4,0x4a,0x68, 0x4,0x4a,0x5d, 0x3,0x4c,0x6d, + 0x4,0x4a,0x59, 0x3,0x4c,0x72, 0x5,0x46,0x78, 0x7,0x24,0x61, + 0x3,0x4c,0x70, 0x4,0x50,0x74, 0x3,0x51,0x4b, 0x3,0x4c,0x76, + 0x4,0x50,0x77, 0x4,0x50,0x7d, 0x5,0x55,0x36, 0x4,0x50,0x76, + 0x3,0x51,0x4f, 0x3,0x51,0x4e, 0x4,0x50,0x7a, 0x5,0x55,0x2d, + 0x3,0x51,0x53, 0x3,0x51,0x57, 0x4,0x50,0x7b, 0x4,0x56,0x56, + 0x3,0x51,0x51, 0x3,0x51,0x4c, 0x4,0x50,0x78, 0x3,0x51,0x52, + 0x4,0x4a,0x62, 0x5,0x55,0x2e, 0x3,0x55,0x32, 0x3,0x55,0x38, + 0x4,0x56,0x5e, 0x4,0x56,0x60, 0x3,0x55,0x34, 0x4,0x56,0x58, + 0x3,0x55,0x2e, 0x4,0x56,0x57, 0x4,0x56,0x5c, 0x3,0x55,0x3b, + 0x4,0x56,0x59, 0x4,0x56,0x5b, 0x3,0x55,0x33, 0x4,0x5b,0x56, + 0x4,0x5b,0x54, 0x4,0x5b,0x5a, 0x4,0x5b,0x57, 0x4,0x5b,0x60, + 0x4,0x5f,0x7b, 0x4,0x5f,0x7d, 0x4,0x5b,0x5b, 0x4,0x5f,0x79, + 0x3,0x5a,0x51, 0x3,0x5c,0x50, 0x4,0x63,0x5a, 0x4,0x63,0x5e, + 0x4,0x63,0x5b, 0x3,0x5c,0x52, 0x4,0x66,0x49, 0x5,0x70,0x3e, + 0x4,0x66,0x4a, 0x4,0x66,0x4c, 0x4,0x68,0x73, 0x3,0x5e,0x39, + 0x3,0x5e,0x38, 0x3,0x5f,0x51, 0x4,0x6a,0x4e, 0x3,0x60,0x38, + 0x4,0x6b,0x6d, 0x4,0x6b,0x6e, 0x3,0x61,0x66, 0x3,0x24,0x2a, + 0x4,0x24,0x52, 0x3,0x26,0x61, 0xf,0x24,0x6e, 0x3,0x29,0x6e, + 0x4,0x27,0x27, 0x3,0x29,0x78, 0xf,0x27,0x6e, 0x3,0x29,0x73, + 0x3,0x2d,0x67, 0x3,0x2d,0x59, 0x3,0x2d,0x66, 0x3,0x2d,0x61, + 0x3,0x2d,0x60, 0x3,0x2d,0x5b, 0x4,0x2a,0x27, 0x3,0x32,0x2e, + 0x4,0x2d,0x73, 0x3,0x32,0x32, 0x3,0x37,0x2b, 0x3,0x37,0x2a, + 0x3,0x37,0x34, 0x4,0x32,0x71, 0x4,0x32,0x76, 0x4,0x32,0x70, + 0x4,0x32,0x77, 0xf,0x36,0x48, 0x3,0x3c,0x76, 0x4,0x38,0x65, + 0x4,0x38,0x61, 0x3,0x3c,0x75, 0x4,0x38,0x62, 0x4,0x38,0x64, + 0x4,0x38,0x60, 0x3,0x3b,0x23, 0x3,0x3c,0x7e, 0x3,0x3c,0x70, + 0x3,0x3c,0x78, 0x3,0x42,0x54, 0x3,0x42,0x4d, 0x3,0x42,0x56, + 0x4,0x3e,0x4b, 0x3,0x42,0x4a, 0x3,0x42,0x55, 0x4,0x3e,0x48, + 0x4,0x3e,0x46, 0x4,0x3e,0x49, 0x6,0x54,0x54, 0x3,0x42,0x4b, + 0x3,0x42,0x50, 0xf,0x42,0x78, 0xf,0x43,0x3c, 0x4,0x44,0x59, + 0x3,0x47,0x73, 0x3,0x47,0x69, 0x6,0x54,0x67, 0x4,0x44,0x56, + 0x4,0x44,0x5a, 0x4,0x44,0x5c, 0x3,0x47,0x71, 0xf,0x49,0x58, + 0x3,0x4d,0x26, 0x3,0x4d,0x23, 0x3,0x4d,0x2b, 0x3,0x4d,0x21, + 0x3,0x4d,0x27, 0x4,0x4a,0x6a, 0x4,0x51,0x25, 0x3,0x51,0x5d, + 0x3,0x51,0x5b, 0x4,0x51,0x2b, 0x3,0x51,0x5f, 0x3,0x51,0x61, + 0x4,0x51,0x24, 0x3,0x51,0x64, 0x3,0x51,0x65, 0x3,0x55,0x3d, + 0x4,0x56,0x62, 0x3,0x55,0x3f, 0x3,0x55,0x44, 0x7,0x39,0x26, + 0x3,0x57,0x51, 0x3,0x58,0x2c, 0x4,0x56,0x64, 0x3,0x5c,0x5a, + 0x3,0x5a,0x59, 0x3,0x5c,0x54, 0x3,0x5c,0x5b, 0x4,0x63,0x5f, + 0x4,0x66,0x4e, 0x5,0x73,0x57, 0x4,0x6a,0x50, 0x3,0x60,0x3a, + 0x3,0x61,0x7a, 0x4,0x27,0x2c, 0x3,0x29,0x7a, 0x3,0x37,0x58, + 0x3,0x47,0x74, 0x3,0x2d,0x6a, 0x4,0x2d,0x76, 0x3,0x37,0x36, + 0x4,0x38,0x6b, 0x3,0x29,0x7b, 0x4,0x2a,0x2c, 0x4,0x38,0x6c, + 0x3,0x29,0x7d, 0x3,0x29,0x7e, 0x5,0x2e,0x53, 0x6,0x39,0x40, + 0x4,0x2d,0x7a, 0x4,0x44,0x5f, 0x7,0x39,0x2d, 0x4,0x5b,0x64, + 0x4,0x66,0x50, 0x3,0x21,0x6a, 0x3,0x32,0x33, 0x4,0x23,0x26, + 0x3,0x26,0x65, 0x4,0x24,0x55, 0x6,0x2c,0x71, 0x4,0x27,0x33, + 0x5,0x26,0x77, 0x4,0x27,0x32, 0x4,0x27,0x2f, 0x3,0x2d,0x6c, + 0x3,0x2d,0x6f, 0x4,0x2a,0x2e, 0x3,0x2d,0x6e, 0x3,0x32,0x34, + 0x3,0x32,0x35, 0x4,0x2d,0x7d, 0x4,0x2d,0x7c, 0x4,0x32,0x7a, + 0x5,0x33,0x4d, 0x4,0x32,0x79, 0x4,0x32,0x7e, 0x3,0x37,0x38, + 0x6,0x41,0x66, 0x3,0x37,0x37, 0x4,0x38,0x70, 0x4,0x38,0x72, + 0x4,0x38,0x73, 0x4,0x44,0x63, 0x6,0x54,0x78, 0x4,0x3e,0x4e, + 0x3,0x42,0x5e, 0x4,0x44,0x62, 0x4,0x44,0x60, 0x4,0x44,0x64, + 0x4,0x4a,0x6f, 0x4,0x4a,0x6e, 0x4,0x4a,0x72, 0x4,0x4a,0x71, + 0x4,0x4a,0x73, 0x4,0x51,0x2e, 0x4,0x51,0x30, 0x4,0x51,0x2f, + 0x4,0x56,0x67, 0x3,0x55,0x46, 0x3,0x55,0x47, 0x4,0x5b,0x66, + 0x4,0x5b,0x65, 0x4,0x60,0x24, 0x7,0x53,0x6b, 0x4,0x6a,0x51, + 0x4,0x27,0x34, 0x4,0x24,0x59, 0x3,0x26,0x6d, 0x4,0x24,0x56, + 0x3,0x26,0x6c, 0x6,0x2c,0x75, 0x4,0x27,0x39, 0x5,0x27,0x2e, + 0x3,0x2a,0x29, 0x3,0x2a,0x24, 0x3,0x2a,0x25, 0x4,0x27,0x3a, + 0x4,0x2a,0x32, 0x4,0x2a,0x34, 0x4,0x2a,0x35, 0x3,0x2d,0x72, + 0x6,0x32,0x67, 0x3,0x32,0x37, 0x5,0x2e,0x5c, 0x4,0x2e,0x21, + 0x4,0x2d,0x7e, 0x4,0x2e,0x22, 0x4,0x2e,0x26, 0x6,0x41,0x6d, + 0x4,0x2e,0x27, 0x5,0x33,0x51, 0x4,0x33,0x28, 0x6,0x41,0x75, + 0x4,0x33,0x29, 0x4,0x33,0x25, 0x4,0x33,0x2b, 0x4,0x33,0x27, + 0x4,0x33,0x2e, 0x4,0x38,0x79, 0x4,0x38,0x77, 0x3,0x3d,0x2c, + 0x4,0x38,0x7b, 0x6,0x4b,0x43, 0x4,0x44,0x65, 0x4,0x3e,0x54, + 0x4,0x44,0x66, 0x4,0x3e,0x53, 0x3,0x42,0x60, 0x4,0x3e,0x52, + 0x4,0x44,0x6a, 0x6,0x5e,0x6e, 0x4,0x44,0x69, 0x4,0x44,0x68, + 0x4,0x44,0x67, 0x3,0x47,0x76, 0x4,0x38,0x7a, 0x4,0x4a,0x7b, + 0x4,0x4a,0x76, 0x4,0x4a,0x7a, 0x4,0x4a,0x7c, 0x7,0x2f,0x74, + 0x4,0x51,0x32, 0x4,0x51,0x34, 0x3,0x55,0x48, 0x4,0x56,0x6a, + 0x4,0x56,0x6b, 0x4,0x5b,0x67, 0x5,0x68,0x3b, 0x4,0x63,0x65, + 0x4,0x63,0x66, 0x4,0x63,0x67, 0x4,0x63,0x63, 0x4,0x6b,0x6f, + 0x3,0x24,0x2e, 0x4,0x23,0x29, 0x3,0x24,0x30, 0x3,0x24,0x31, + 0x3,0x26,0x71, 0x3,0x26,0x6f, 0x3,0x26,0x70, 0x3,0x2a,0x2e, + 0x3,0x2d,0x76, 0x6,0x2d,0x21, 0x3,0x2a,0x30, 0x4,0x27,0x3b, + 0x3,0x2a,0x31, 0x3,0x2d,0x7d, 0x3,0x32,0x3a, 0x4,0x2a,0x37, + 0x4,0x2a,0x38, 0xf,0x2c,0x32, 0x4,0x33,0x2f, 0x3,0x32,0x43, + 0x3,0x32,0x44, 0x3,0x32,0x3b, 0x4,0x33,0x30, 0x3,0x32,0x45, + 0xf,0x31,0x27, 0x3,0x32,0x42, 0x3,0x37,0x3f, 0x3,0x37,0x42, + 0x3,0x37,0x41, 0x4,0x33,0x33, 0x3,0x37,0x3e, 0x3,0x37,0x43, + 0x3,0x3d,0x34, 0x4,0x38,0x7d, 0x5,0x3a,0x2d, 0x3,0x42,0x63, + 0x3,0x3d,0x31, 0x3,0x3d,0x30, 0x3,0x42,0x6c, 0xf,0x36,0x59, + 0xf,0x3d,0x3b, 0x4,0x3e,0x59, 0x3,0x42,0x65, 0x3,0x42,0x69, + 0x5,0x40,0x4e, 0x3,0x42,0x72, 0xf,0x43,0x49, 0xf,0x43,0x56, + 0x3,0x48,0x24, 0x7,0x25,0x37, 0x4,0x4b,0x22, 0x4,0x4b,0x21, + 0x3,0x4d,0x37, 0x3,0x4d,0x3c, 0x3,0x4d,0x33, 0x3,0x4d,0x38, + 0x3,0x4d,0x34, 0x3,0x4d,0x32, 0x3,0x51,0x68, 0x5,0x55,0x5d, + 0x4,0x51,0x37, 0x3,0x51,0x69, 0x3,0x55,0x4a, 0x4,0x56,0x6f, + 0xf,0x55,0x7a, 0xf,0x56,0x22, 0x3,0x55,0x4e, 0x4,0x5b,0x69, + 0x3,0x55,0x4c, 0xf,0x5b,0x2d, 0x3,0x58,0x31, 0x4,0x60,0x2a, + 0xf,0x62,0x78, 0xf,0x62,0x7b, 0x3,0x5c,0x61, 0x4,0x2a,0x39, + 0x4,0x2a,0x3a, 0x5,0x2e,0x62, 0x4,0x2e,0x2b, 0x4,0x33,0x35, + 0x4,0x33,0x34, 0x4,0x38,0x7e, 0x4,0x44,0x70, 0x4,0x44,0x71, + 0x4,0x44,0x6f, 0x4,0x4b,0x23, 0x4,0x4b,0x24, 0x4,0x5b,0x6c, + 0x4,0x6d,0x5a, 0x4,0x24,0x5e, 0x5,0x27,0x32, 0x3,0x2a,0x34, + 0x3,0x2e,0x23, 0x4,0x2a,0x3d, 0x3,0x32,0x4a, 0x3,0x32,0x4b, + 0x4,0x2e,0x2d, 0x3,0x32,0x49, 0x4,0x2e,0x2c, 0x4,0x33,0x3b, + 0x4,0x39,0x21, 0x4,0x33,0x3a, 0x4,0x33,0x38, 0x4,0x33,0x39, + 0x4,0x33,0x37, 0x4,0x39,0x23, 0x4,0x39,0x26, 0x4,0x33,0x3c, + 0x4,0x39,0x24, 0x4,0x3e,0x62, 0x4,0x3e,0x61, 0x4,0x3e,0x5d, + 0x4,0x3e,0x60, 0x3,0x42,0x76, 0x4,0x3e,0x63, 0x5,0x47,0x48, + 0x4,0x44,0x73, 0x4,0x44,0x76, 0x4,0x44,0x74, 0x4,0x44,0x78, + 0x4,0x44,0x77, 0x4,0x44,0x75, 0x4,0x4b,0x25, 0x4,0x4b,0x27, + 0x4,0x4b,0x26, 0x4,0x51,0x3f, 0x3,0x51,0x6f, 0x4,0x51,0x42, + 0x4,0x51,0x41, 0x4,0x56,0x72, 0x4,0x56,0x73, 0x3,0x55,0x51, + 0x4,0x56,0x75, 0x3,0x55,0x50, 0x4,0x56,0x71, 0x4,0x5b,0x6f, + 0x4,0x5b,0x6e, 0x4,0x60,0x2c, 0x4,0x60,0x2b, 0x4,0x68,0x75, + 0x4,0x6b,0x70, 0x4,0x6a,0x53, 0x3,0x32,0x4c, 0x4,0x3e,0x65, + 0x3,0x4d,0x3f, 0x4,0x56,0x78, 0x3,0x3d,0x40, 0xf,0x50,0x4e, + 0x5,0x24,0x63, 0x6,0x28,0x62, 0x3,0x26,0x72, 0x4,0x2a,0x41, + 0x3,0x2e,0x29, 0x4,0x2a,0x43, 0x4,0x2e,0x2f, 0x4,0x2e,0x31, + 0x5,0x33,0x64, 0x3,0x37,0x48, 0x3,0x3d,0x41, 0x4,0x39,0x28, + 0x4,0x3e,0x69, 0x3,0x42,0x79, 0x3,0x42,0x7a, 0x4,0x3e,0x68, + 0x4,0x44,0x79, 0x3,0x4d,0x40, 0x4,0x4b,0x2a, 0x4,0x4b,0x29, + 0x4,0x51,0x44, 0x5,0x5c,0x2f, 0x4,0x5b,0x72, 0x4,0x5b,0x73, + 0x4,0x60,0x2e, 0x4,0x63,0x69, 0x4,0x6a,0x54, 0x4,0x3e,0x6d, + 0x4,0x24,0x61, 0x4,0x24,0x62, 0x5,0x27,0x37, 0x3,0x2a,0x3c, + 0x4,0x2a,0x46, 0x3,0x2e,0x2d, 0x4,0x2a,0x49, 0x3,0x2e,0x2c, + 0x3,0x2e,0x2e, 0x3,0x32,0x56, 0x4,0x2e,0x37, 0x4,0x2e,0x3b, + 0x4,0x2e,0x35, 0x4,0x2e,0x36, 0x3,0x32,0x54, 0x4,0x2e,0x33, + 0x4,0x2e,0x3f, 0x4,0x2e,0x39, 0x6,0x39,0x6b, 0x3,0x32,0x53, + 0x4,0x2e,0x38, 0x4,0x2e,0x3a, 0x5,0x33,0x6d, 0x4,0x33,0x42, + 0x3,0x37,0x4c, 0x4,0x33,0x40, 0x4,0x2e,0x3c, 0x4,0x33,0x3f, + 0x4,0x33,0x45, 0x3,0x37,0x4b, 0x4,0x33,0x43, 0x4,0x39,0x32, + 0x4,0x39,0x33, 0x3,0x3d,0x46, 0x3,0x3d,0x4b, 0x6,0x4b,0x5a, + 0x3,0x3d,0x49, 0x4,0x39,0x36, 0x5,0x40,0x60, 0x4,0x39,0x2f, + 0x4,0x39,0x30, 0x3,0x3d,0x48, 0x3,0x3d,0x4a, 0x5,0x3a,0x3b, + 0x4,0x39,0x35, 0x4,0x39,0x38, 0x4,0x3e,0x74, 0x5,0x40,0x64, + 0x4,0x3e,0x6f, 0x4,0x3e,0x78, 0x4,0x3e,0x6e, 0x4,0x3e,0x76, + 0x4,0x3e,0x73, 0x4,0x3e,0x7a, 0x4,0x45,0x24, 0x4,0x45,0x28, + 0x6,0x5f,0x2d, 0x3,0x48,0x2a, 0x3,0x48,0x2c, 0x4,0x45,0x23, + 0x4,0x45,0x21, 0x7,0x25,0x58, 0x4,0x4b,0x38, 0x3,0x4d,0x42, + 0x4,0x4b,0x37, 0x4,0x4b,0x35, 0x4,0x4b,0x33, 0x4,0x4b,0x2f, + 0x7,0x25,0x5c, 0x4,0x4b,0x2e, 0x5,0x47,0x59, 0x4,0x4b,0x3b, + 0x7,0x30,0x36, 0x4,0x51,0x48, 0x4,0x51,0x49, 0x3,0x51,0x75, + 0x4,0x51,0x4e, 0x4,0x51,0x4a, 0x4,0x51,0x50, 0x4,0x57,0x26, + 0x4,0x57,0x22, 0x4,0x5b,0x7b, 0x4,0x5b,0x77, 0x7,0x40,0x6b, + 0x4,0x57,0x25, 0x7,0x40,0x67, 0x4,0x60,0x32, 0x4,0x60,0x2f, + 0x4,0x60,0x30, 0x4,0x66,0x58, 0x4,0x66,0x59, 0x3,0x5e,0x40, + 0x5,0x73,0x5c, 0x4,0x6a,0x55, 0x4,0x6b,0x72, 0x4,0x6b,0x71, + 0x3,0x62,0x2d, 0x3,0x26,0x75, 0x3,0x2e,0x30, 0x3,0x32,0x58, + 0x3,0x37,0x4e, 0x3,0x43,0x22, 0x3,0x48,0x2d, 0x5,0x47,0x5b, + 0x5,0x4e,0x59, 0x4,0x51,0x56, 0x4,0x60,0x37, 0x4,0x66,0x5b, + 0x4,0x6c,0x73, 0x4,0x27,0x46, 0x4,0x2a,0x4e, 0x3,0x2e,0x31, + 0x4,0x2e,0x46, 0x4,0x2e,0x45, 0x4,0x33,0x47, 0x4,0x33,0x48, + 0x4,0x39,0x3a, 0x6,0x55,0x52, 0x4,0x45,0x30, 0x4,0x45,0x32, + 0x3,0x48,0x2f, 0x3,0x4d,0x43, 0x4,0x4b,0x3d, 0x4,0x51,0x57, + 0x4,0x5b,0x7e, 0x4,0x63,0x6c, 0x4,0x27,0x48, 0x4,0x2a,0x51, + 0x4,0x2a,0x50, 0x4,0x2e,0x47, 0x4,0x2e,0x49, 0x3,0x32,0x59, + 0x4,0x33,0x4b, 0x3,0x37,0x4f, 0x3,0x3d,0x4e, 0x3,0x43,0x23, + 0x5,0x40,0x6f, 0x3,0x48,0x32, 0x4,0x51,0x5a, 0x4,0x45,0x36, + 0x4,0x57,0x2c, 0x4,0x60,0x38, 0x3,0x5f,0x38, 0x4,0x6e,0x48, + 0x3,0x26,0x79, 0x4,0x24,0x65, 0x4,0x27,0x4e, 0x4,0x27,0x4f, + 0x4,0x27,0x4d, 0x4,0x27,0x4c, 0x4,0x27,0x4a, 0x4,0x2a,0x53, + 0x4,0x2a,0x56, 0x4,0x2a,0x57, 0x4,0x2a,0x54, 0x4,0x2a,0x58, + 0x5,0x2a,0x6d, 0x4,0x2a,0x5a, 0x6,0x33,0x38, 0x3,0x2e,0x34, + 0x4,0x2e,0x52, 0x3,0x32,0x5d, 0x3,0x32,0x66, 0x3,0x32,0x60, + 0x4,0x2e,0x4d, 0x3,0x32,0x61, 0x5,0x33,0x76, 0x4,0x33,0x50, + 0x4,0x33,0x51, 0x3,0x37,0x56, 0x3,0x37,0x54, 0x4,0x33,0x52, + 0x4,0x33,0x4e, 0x4,0x33,0x4d, 0x3,0x3d,0x50, 0x4,0x39,0x49, + 0x3,0x3d,0x54, 0x4,0x39,0x4a, 0x3,0x3d,0x55, 0x4,0x39,0x45, + 0x4,0x39,0x48, 0x4,0x39,0x3f, 0x4,0x39,0x41, 0x4,0x39,0x4b, + 0x4,0x39,0x46, 0x4,0x39,0x4d, 0x4,0x39,0x47, 0x4,0x39,0x43, + 0x4,0x3f,0x22, 0x4,0x39,0x4c, 0x4,0x39,0x42, 0x4,0x3f,0x30, + 0x4,0x3f,0x2d, 0x3,0x43,0x24, 0x4,0x3f,0x25, 0x4,0x3f,0x26, + 0x4,0x3f,0x27, 0x4,0x3f,0x2b, 0x4,0x3f,0x2c, 0x6,0x55,0x61, + 0x5,0x47,0x61, 0x4,0x45,0x39, 0x4,0x45,0x41, 0x4,0x45,0x3c, + 0x4,0x45,0x37, 0x3,0x48,0x37, 0x4,0x45,0x43, 0x4,0x45,0x46, + 0x4,0x45,0x3f, 0x4,0x45,0x44, 0x3,0x48,0x3a, 0x4,0x45,0x38, + 0x3,0x4d,0x45, 0x4,0x4b,0x45, 0x4,0x4b,0x42, 0x4,0x4b,0x44, + 0x4,0x4b,0x47, 0x4,0x4b,0x43, 0x4,0x4b,0x4d, 0x3,0x4d,0x47, + 0x5,0x4e,0x60, 0x4,0x4b,0x3f, 0x3,0x51,0x77, 0x3,0x51,0x78, + 0x4,0x51,0x5c, 0x4,0x51,0x60, 0x3,0x51,0x7c, 0x3,0x51,0x7a, + 0x4,0x51,0x5d, 0x4,0x51,0x64, 0x4,0x57,0x32, 0x4,0x57,0x2e, + 0x4,0x57,0x31, 0x4,0x57,0x2f, 0x3,0x55,0x5a, 0x4,0x57,0x30, + 0x4,0x57,0x33, 0x4,0x57,0x34, 0x5,0x56,0x22, 0x5,0x62,0x69, + 0x4,0x5c,0x27, 0x4,0x5c,0x29, 0x4,0x5c,0x2a, 0x4,0x5c,0x25, + 0x3,0x58,0x37, 0x4,0x5c,0x26, 0x4,0x63,0x70, 0x4,0x63,0x6e, + 0x4,0x63,0x71, 0x4,0x63,0x6f, 0x4,0x66,0x5d, 0x3,0x5e,0x41, + 0x4,0x68,0x78, 0x4,0x6a,0x57, 0x4,0x68,0x7a, 0x4,0x6c,0x75, + 0x4,0x6e,0x4d, 0x4,0x27,0x51, 0x4,0x2a,0x5f, 0x4,0x33,0x57, + 0x4,0x45,0x4a, 0x3,0x55,0x5d, 0x4,0x57,0x38, 0x4,0x63,0x74, + 0x4,0x6b,0x75, 0x4,0x2e,0x57, 0x4,0x2e,0x58, 0x4,0x33,0x5a, + 0x4,0x33,0x59, 0x6,0x4c,0x2b, 0x4,0x3f,0x33, 0x4,0x45,0x4c, + 0x3,0x24,0x32, 0x3,0x26,0x7a, 0x4,0x27,0x53, 0xf,0x28,0x7a, + 0x4,0x2a,0x64, 0x3,0x2e,0x38, 0x4,0x2a,0x62, 0x3,0x2e,0x3c, + 0x3,0x2d,0x3b, 0x4,0x2e,0x5f, 0x4,0x2e,0x5c, 0x4,0x2e,0x62, + 0x5,0x2f,0x34, 0x3,0x37,0x5b, 0x3,0x32,0x6a, 0x3,0x32,0x6b, + 0x4,0x2e,0x5e, 0x4,0x2e,0x61, 0x4,0x33,0x5e, 0x4,0x33,0x61, + 0x3,0x37,0x5c, 0x4,0x33,0x5f, 0x3,0x37,0x5a, 0x4,0x33,0x60, + 0x3,0x37,0x5e, 0x3,0x3d,0x5b, 0x5,0x3a,0x59, 0x6,0x4c,0x33, + 0x4,0x39,0x58, 0x3,0x3d,0x58, 0x4,0x39,0x53, 0x4,0x3f,0x40, + 0x4,0x3f,0x39, 0x4,0x3f,0x3f, 0x3,0x43,0x2f, 0x4,0x3f,0x3c, + 0x3,0x43,0x32, 0x4,0x3f,0x3d, 0x3,0x43,0x2c, 0x4,0x3f,0x3e, + 0x4,0x3f,0x38, 0x4,0x3f,0x3a, 0x4,0x3f,0x3b, 0x4,0x3f,0x42, + 0x4,0x45,0x4e, 0x3,0x48,0x43, 0x4,0x45,0x51, 0x3,0x48,0x41, + 0x4,0x45,0x4d, 0x4,0x45,0x55, 0x4,0x45,0x4f, 0x5,0x47,0x76, + 0x4,0x4b,0x5c, 0x4,0x4b,0x58, 0x4,0x4b,0x56, 0x4,0x4b,0x55, + 0x4,0x4b,0x5e, 0x7,0x26,0x24, 0x4,0x4b,0x5b, 0x3,0x52,0x23, + 0x3,0x51,0x7d, 0x4,0x51,0x6c, 0x3,0x51,0x7e, 0x7,0x30,0x59, + 0x5,0x56,0x33, 0x4,0x51,0x70, 0x4,0x51,0x6d, 0x4,0x57,0x3b, + 0x4,0x57,0x41, 0x3,0x48,0x42, 0x4,0x57,0x39, 0x3,0x55,0x5e, + 0x3,0x55,0x5f, 0x4,0x57,0x3f, 0x3,0x58,0x41, 0x4,0x5c,0x2d, + 0x3,0x58,0x3d, 0x4,0x5c,0x31, 0x4,0x5c,0x2f, 0x4,0x5c,0x2e, + 0x4,0x60,0x3f, 0x7,0x4e,0x5c, 0x3,0x5c,0x63, 0x4,0x63,0x76, + 0x4,0x63,0x75, 0x4,0x66,0x5f, 0x4,0x66,0x60, 0x4,0x66,0x61, + 0x4,0x68,0x7c, 0x4,0x68,0x7b, 0x3,0x60,0x75, 0x3,0x61,0x67, + 0x3,0x2e,0x3f, 0x4,0x2a,0x67, 0x4,0x2a,0x66, 0x6,0x33,0x48, + 0x3,0x32,0x6e, 0x4,0x2e,0x64, 0x3,0x32,0x71, 0x3,0x37,0x64, + 0x4,0x33,0x63, 0x4,0x33,0x62, 0x3,0x3d,0x61, 0x3,0x3d,0x60, + 0x4,0x39,0x59, 0x4,0x3f,0x45, 0x4,0x3f,0x44, 0x3,0x43,0x3a, + 0x3,0x43,0x3b, 0x3,0x43,0x3e, 0x4,0x3f,0x47, 0x3,0x43,0x3c, + 0x3,0x43,0x3f, 0x3,0x48,0x46, 0x5,0x48,0x24, 0x3,0x48,0x49, + 0x5,0x4e,0x76, 0x3,0x4d,0x4e, 0x4,0x51,0x76, 0x3,0x52,0x25, + 0x4,0x51,0x74, 0x4,0x51,0x75, 0x4,0x57,0x42, 0x3,0x58,0x46, + 0x3,0x58,0x47, 0x3,0x5a,0x64, 0x4,0x66,0x63, 0x3,0x62,0x34, + 0x5,0x24,0x6e, 0x3,0x26,0x7d, 0x5,0x27,0x46, 0x6,0x2d,0x49, + 0x4,0x27,0x56, 0x3,0x2a,0x40, 0x3,0x2a,0x41, 0x3,0x2a,0x43, + 0x4,0x2a,0x6a, 0x4,0x2a,0x6f, 0x4,0x2a,0x6b, 0x4,0x2a,0x69, + 0x4,0x2a,0x6c, 0xf,0x2c,0x6d, 0x4,0x2e,0x65, 0x3,0x32,0x75, + 0x3,0x32,0x7a, 0x6,0x42,0x66, 0x4,0x33,0x67, 0x4,0x33,0x66, + 0x3,0x37,0x6d, 0x4,0x33,0x65, 0x5,0x34,0x3b, 0x5,0x34,0x39, + 0x4,0x33,0x6a, 0x4,0x33,0x69, 0x4,0x33,0x6b, 0x3,0x37,0x68, + 0x4,0x33,0x6d, 0x5,0x34,0x38, 0x3,0x37,0x6e, 0xf,0x37,0x3b, + 0x4,0x33,0x64, 0x5,0x3a,0x65, 0x4,0x39,0x5e, 0x4,0x39,0x62, + 0x3,0x3d,0x67, 0x4,0x39,0x64, 0x3,0x3d,0x6a, 0x4,0x39,0x63, + 0x3,0x3d,0x6b, 0x4,0x39,0x61, 0x4,0x3f,0x4f, 0x3,0x43,0x40, + 0x4,0x3f,0x4d, 0x3,0x43,0x45, 0x4,0x3f,0x4c, 0x3,0x43,0x42, + 0x4,0x3f,0x4b, 0x3,0x43,0x43, 0x4,0x45,0x57, 0x4,0x3f,0x49, + 0x5,0x41,0x31, 0x3,0x48,0x51, 0x3,0x48,0x4a, 0x4,0x45,0x5b, + 0x3,0x48,0x53, 0x3,0x48,0x4e, 0x4,0x45,0x5a, 0x3,0x48,0x4c, + 0x4,0x45,0x58, 0x6,0x5f,0x6b, 0x4,0x45,0x59, 0x4,0x4b,0x65, + 0x4,0x4b,0x61, 0x3,0x4d,0x54, 0x4,0x4b,0x62, 0x3,0x4d,0x52, + 0x7,0x26,0x32, 0x3,0x4d,0x58, 0x4,0x4b,0x68, 0x4,0x4b,0x66, + 0x4,0x4b,0x64, 0x3,0x4d,0x59, 0x4,0x51,0x7d, 0x4,0x51,0x7c, + 0x3,0x52,0x2b, 0x4,0x51,0x79, 0x4,0x51,0x78, 0x4,0x51,0x7a, + 0x3,0x52,0x2d, 0x4,0x57,0x45, 0x3,0x55,0x63, 0x4,0x57,0x47, + 0x3,0x58,0x48, 0x7,0x41,0x2e, 0x4,0x5c,0x37, 0x4,0x5c,0x35, + 0x4,0x5c,0x36, 0x3,0x5e,0x46, 0x4,0x63,0x79, 0x4,0x66,0x65, + 0x7,0x58,0x4c, 0x4,0x66,0x64, 0x4,0x68,0x7e, 0x4,0x69,0x21, + 0x3,0x62,0x39, 0x4,0x24,0x69, 0x6,0x2d,0x4e, 0x3,0x2e,0x46, + 0x3,0x2e,0x45, 0x4,0x2a,0x71, 0x4,0x2a,0x72, 0x3,0x33,0x21, + 0x3,0x32,0x7e, 0x3,0x32,0x7d, 0x4,0x33,0x6f, 0x4,0x33,0x70, + 0x3,0x37,0x6f, 0x5,0x34,0x45, 0x4,0x33,0x72, 0x4,0x33,0x71, + 0x6,0x42,0x6f, 0x3,0x3d,0x6c, 0x4,0x39,0x67, 0x3,0x3d,0x6d, + 0x6,0x4c,0x53, 0x3,0x3d,0x6e, 0x5,0x41,0x39, 0x4,0x3f,0x53, + 0x4,0x3f,0x52, 0x6,0x56,0x27, 0x4,0x45,0x60, 0x6,0x5f,0x78, + 0x4,0x4b,0x6c, 0x5,0x4f,0x23, 0x5,0x54,0x24, 0x4,0x52,0x25, + 0x4,0x52,0x22, 0x4,0x52,0x24, 0x7,0x30,0x6f, 0x3,0x55,0x65, + 0x3,0x55,0x66, 0x4,0x57,0x4c, 0x4,0x57,0x4d, 0x4,0x57,0x4b, + 0x4,0x57,0x4f, 0x3,0x55,0x67, 0x4,0x5c,0x39, 0x4,0x5c,0x3a, + 0x4,0x60,0x48, 0x4,0x60,0x49, 0x4,0x63,0x7c, 0x4,0x69,0x22, + 0x3,0x24,0x34, 0x3,0x2a,0x46, 0x4,0x2a,0x76, 0x3,0x2e,0x4a, + 0x3,0x33,0x25, 0x4,0x2e,0x6d, 0x3,0x33,0x22, 0x5,0x34,0x46, + 0x3,0x3d,0x6f, 0x4,0x39,0x6a, 0x3,0x43,0x48, 0x4,0x3f,0x54, + 0x4,0x3f,0x55, 0x4,0x3f,0x5a, 0x4,0x45,0x63, 0x4,0x57,0x52, + 0x4,0x5c,0x3b, 0x3,0x5a,0x68, 0x5,0x2b,0x21, 0x4,0x2e,0x75, + 0x4,0x2e,0x70, 0x3,0x33,0x28, 0x4,0x2e,0x77, 0x3,0x33,0x29, + 0x4,0x2e,0x73, 0x4,0x2e,0x72, 0x4,0x33,0x76, 0x4,0x33,0x7d, + 0x3,0x37,0x74, 0x5,0x34,0x48, 0x4,0x33,0x77, 0x4,0x33,0x7b, + 0x3,0x37,0x75, 0x6,0x42,0x76, 0x4,0x33,0x78, 0x4,0x39,0x6d, + 0x4,0x39,0x74, 0x4,0x39,0x71, 0x3,0x3d,0x74, 0x4,0x3f,0x5b, + 0x4,0x39,0x72, 0x3,0x3d,0x7a, 0x4,0x39,0x75, 0x3,0x3d,0x73, + 0x4,0x39,0x6f, 0x6,0x4c,0x5b, 0x6,0x4c,0x56, 0x3,0x43,0x50, + 0x4,0x3f,0x66, 0x4,0x3f,0x62, 0x4,0x3f,0x61, 0x3,0x43,0x52, + 0x3,0x43,0x53, 0x4,0x3f,0x5d, 0x3,0x43,0x4e, 0x4,0x3f,0x60, + 0x3,0x43,0x4b, 0x4,0x3f,0x63, 0x5,0x48,0x46, 0x4,0x39,0x76, + 0x4,0x45,0x65, 0x3,0x48,0x5b, 0x4,0x45,0x6a, 0x4,0x45,0x69, + 0x3,0x48,0x5f, 0x4,0x45,0x6e, 0x4,0x45,0x68, 0x3,0x48,0x59, + 0x4,0x45,0x6d, 0x4,0x45,0x66, 0x5,0x48,0x36, 0x4,0x4b,0x7b, + 0x4,0x4b,0x75, 0x4,0x4b,0x70, 0x3,0x4d,0x61, 0x3,0x4d,0x5e, + 0x4,0x4c,0x22, 0x3,0x4d,0x67, 0x4,0x4b,0x7e, 0x3,0x4d,0x62, + 0x4,0x4c,0x2e, 0x5,0x4f,0x3b, 0x3,0x4d,0x64, 0x4,0x4c,0x30, + 0x4,0x4c,0x25, 0x4,0x4c,0x2d, 0x4,0x4b,0x79, 0x5,0x4f,0x32, + 0x3,0x4d,0x5f, 0x5,0x4f,0x45, 0x4,0x4c,0x2c, 0x4,0x4c,0x27, + 0x4,0x4b,0x77, 0x3,0x4d,0x66, 0x3,0x4d,0x68, 0x4,0x4c,0x28, + 0x5,0x4f,0x36, 0x4,0x52,0x34, 0x4,0x52,0x3a, 0x3,0x52,0x31, + 0x4,0x52,0x37, 0x4,0x52,0x2b, 0x4,0x52,0x38, 0x3,0x52,0x35, + 0x4,0x52,0x39, 0x4,0x52,0x3b, 0x4,0x52,0x36, 0x4,0x52,0x2f, + 0x4,0x52,0x3d, 0x4,0x52,0x29, 0x3,0x52,0x32, 0x4,0x57,0x5b, + 0x5,0x5c,0x6d, 0x4,0x57,0x5e, 0x4,0x57,0x5a, 0x4,0x57,0x62, + 0x5,0x5c,0x7d, 0x4,0x57,0x65, 0x4,0x57,0x53, 0x3,0x55,0x6c, + 0x4,0x57,0x56, 0x4,0x57,0x58, 0x4,0x57,0x59, 0x5,0x5c,0x7e, + 0x4,0x57,0x55, 0x5,0x5d,0x30, 0x4,0x5c,0x44, 0x4,0x5c,0x4f, + 0x4,0x5c,0x4b, 0x4,0x5c,0x50, 0x4,0x5c,0x43, 0x3,0x58,0x4a, + 0x4,0x5c,0x4a, 0x3,0x5a,0x6c, 0x4,0x5c,0x42, 0x4,0x5c,0x4c, + 0x7,0x41,0x3f, 0x4,0x5c,0x46, 0x4,0x5c,0x49, 0x4,0x5c,0x40, + 0x5,0x63,0x34, 0x4,0x5c,0x48, 0x3,0x58,0x4d, 0x3,0x58,0x4b, + 0x5,0x63,0x41, 0x4,0x60,0x56, 0x5,0x68,0x6e, 0x3,0x5a,0x6a, + 0x4,0x60,0x53, 0x5,0x68,0x66, 0x3,0x5a,0x6d, 0x3,0x5a,0x69, + 0x3,0x5a,0x6b, 0x4,0x5c,0x51, 0x4,0x63,0x7e, 0x4,0x66,0x69, + 0x4,0x66,0x6c, 0x4,0x66,0x6e, 0x3,0x5e,0x4a, 0x4,0x66,0x6a, + 0x3,0x5e,0x4d, 0x4,0x66,0x68, 0x4,0x66,0x6d, 0x3,0x5f,0x56, + 0x5,0x70,0x61, 0x4,0x69,0x26, 0x4,0x69,0x28, 0x4,0x6a,0x5d, + 0x4,0x6a,0x61, 0x4,0x6a,0x5c, 0x3,0x60,0x5f, 0x4,0x6b,0x76, + 0x4,0x6d,0x5c, 0x4,0x6d,0x76, 0x7,0x65,0x5d, 0x4,0x2a,0x77, + 0x3,0x33,0x2f, 0x3,0x33,0x33, 0x6,0x43,0x22, 0x4,0x34,0x25, + 0x5,0x34,0x59, 0x3,0x37,0x7c, 0x6,0x4c,0x60, 0x4,0x39,0x7b, + 0x4,0x39,0x7c, 0x3,0x3d,0x7d, 0x3,0x3d,0x7c, 0x4,0x39,0x7d, + 0x3,0x43,0x5a, 0x3,0x43,0x56, 0x3,0x43,0x57, 0x3,0x43,0x59, + 0x3,0x43,0x5b, 0x3,0x48,0x63, 0x4,0x45,0x72, 0x3,0x48,0x64, + 0x3,0x48,0x65, 0x6,0x60,0x2c, 0x3,0x48,0x66, 0x3,0x4d,0x6b, + 0x3,0x4d,0x6c, 0x3,0x4d,0x69, 0x3,0x4d,0x6a, 0x4,0x4c,0x37, + 0x7,0x26,0x57, 0x4,0x4c,0x35, 0x3,0x52,0x36, 0x4,0x57,0x6d, + 0x3,0x55,0x73, 0x3,0x55,0x72, 0x4,0x57,0x69, 0x4,0x57,0x6a, + 0x3,0x4d,0x74, 0x4,0x57,0x6b, 0x5,0x63,0x4e, 0x4,0x5c,0x56, + 0x3,0x58,0x52, 0x4,0x5c,0x55, 0x4,0x5c,0x54, 0x5,0x63,0x54, + 0x3,0x58,0x53, 0x3,0x5a,0x70, 0x4,0x60,0x5b, 0x4,0x60,0x5d, + 0x4,0x64,0x23, 0x3,0x5c,0x68, 0x7,0x54,0x3a, 0x5,0x70,0x70, + 0x4,0x6a,0x65, 0x5,0x76,0x39, 0x4,0x6c,0x7a, 0x3,0x61,0x45, + 0x4,0x27,0x5c, 0x6,0x33,0x64, 0x3,0x2e,0x57, 0x3,0x2e,0x55, + 0x3,0x2e,0x58, 0x4,0x2e,0x78, 0x4,0x2e,0x7e, 0x3,0x33,0x35, + 0x3,0x33,0x34, 0x4,0x2e,0x7c, 0x3,0x33,0x39, 0x4,0x2f,0x21, + 0x3,0x33,0x38, 0x4,0x2e,0x7d, 0x3,0x33,0x36, 0x3,0x33,0x3a, + 0x4,0x34,0x2e, 0x4,0x34,0x26, 0x3,0x38,0x23, 0x3,0x38,0x2a, + 0x4,0x34,0x27, 0x4,0x34,0x30, 0x3,0x38,0x2c, 0x4,0x34,0x2d, + 0x4,0x34,0x2b, 0x4,0x34,0x29, 0x3,0x38,0x28, 0x3,0x38,0x2d, + 0x3,0x38,0x25, 0x3,0x3e,0x36, 0x5,0x3b,0x2c, 0x3,0x3e,0x2d, + 0x3,0x3e,0x32, 0x3,0x3e,0x27, 0x3,0x3e,0x30, 0x3,0x3e,0x25, + 0x6,0x4c,0x71, 0x3,0x3e,0x31, 0x4,0x3f,0x6a, 0x3,0x43,0x65, + 0x3,0x43,0x6b, 0x4,0x3f,0x6e, 0x4,0x3f,0x73, 0x4,0x3f,0x6f, + 0x3,0x43,0x61, 0x3,0x43,0x5d, 0x3,0x48,0x6c, 0x4,0x45,0x75, + 0x4,0x45,0x7e, 0x4,0x45,0x79, 0x4,0x46,0x21, 0x3,0x48,0x67, + 0x3,0x43,0x5f, 0x3,0x48,0x72, 0x3,0x48,0x75, 0x4,0x46,0x23, + 0x5,0x48,0x54, 0x3,0x48,0x6f, 0x3,0x4e,0x2a, 0x5,0x4f,0x53, + 0x4,0x4c,0x3e, 0x4,0x4c,0x3c, 0x4,0x4c,0x40, 0x3,0x4d,0x7b, + 0x3,0x4e,0x21, 0x3,0x4e,0x2d, 0x3,0x4d,0x76, 0x3,0x4d,0x79, + 0x4,0x4c,0x3a, 0x4,0x4c,0x3d, 0x4,0x4c,0x3f, 0x3,0x4d,0x7a, + 0x4,0x4c,0x44, 0x5,0x4f,0x54, 0x3,0x4e,0x26, 0x3,0x4e,0x23, + 0x3,0x52,0x3a, 0x4,0x52,0x49, 0x3,0x52,0x3c, 0x4,0x52,0x47, + 0x3,0x52,0x3d, 0x3,0x52,0x3e, 0x4,0x57,0x73, 0x3,0x55,0x78, + 0x5,0x5d,0x3f, 0x3,0x55,0x76, 0x5,0x5d,0x46, 0x3,0x55,0x77, + 0x4,0x57,0x6e, 0x3,0x55,0x7c, 0x3,0x55,0x7b, 0x7,0x3a,0x39, + 0x4,0x5c,0x62, 0x4,0x5c,0x60, 0x4,0x57,0x72, 0x3,0x58,0x57, + 0x3,0x58,0x56, 0x3,0x59,0x29, 0x4,0x60,0x66, 0x4,0x60,0x63, + 0x4,0x60,0x68, 0x4,0x60,0x62, 0x7,0x47,0x4a, 0x3,0x5a,0x73, + 0x3,0x5a,0x71, 0x5,0x6d,0x22, 0x3,0x5c,0x69, 0x4,0x64,0x24, + 0x3,0x5c,0x6a, 0x3,0x5c,0x6b, 0x3,0x5e,0x4f, 0x3,0x5e,0x4e, + 0x4,0x69,0x2a, 0x7,0x58,0x58, 0x3,0x5f,0x59, 0x4,0x69,0x2b, + 0x4,0x6a,0x66, 0x4,0x6b,0x79, 0x4,0x6b,0x78, 0x7,0x5f,0x33, + 0x3,0x60,0x78, 0x4,0x6c,0x7c, 0x4,0x6c,0x7b, 0x4,0x6d,0x77, + 0x4,0x2a,0x79, 0x4,0x2f,0x29, 0x3,0x38,0x2f, 0x3,0x38,0x32, + 0x5,0x34,0x60, 0x4,0x34,0x34, 0x3,0x38,0x30, 0x4,0x34,0x33, + 0x4,0x3a,0x28, 0x4,0x46,0x25, 0x3,0x48,0x76, 0x4,0x52,0x4e, + 0x4,0x6a,0x6b, 0xf,0x21,0x47, 0x3,0x2a,0x4d, 0x3,0x2e,0x5c, + 0x3,0x2e,0x5b, 0x3,0x2e,0x59, 0x4,0x2a,0x7b, 0x4,0x2f,0x2a, + 0x6,0x3a,0x6b, 0x4,0x2f,0x2d, 0x4,0x34,0x35, 0x4,0x3f,0x75, + 0x4,0x3a,0x2a, 0x3,0x43,0x6c, 0x3,0x43,0x6d, 0x5,0x41,0x65, + 0x3,0x48,0x7a, 0x3,0x48,0x7b, 0x4,0x52,0x4f, 0x4,0x57,0x75, + 0x4,0x5c,0x65, 0x4,0x60,0x6d, 0x4,0x66,0x7b, 0x4,0x6b,0x7b, + 0x6,0x3a,0x74, 0x4,0x2f,0x2e, 0x3,0x31,0x3f, 0x4,0x34,0x38, + 0x4,0x34,0x36, 0x4,0x34,0x37, 0x6,0x43,0x3c, 0x4,0x3a,0x2d, + 0x4,0x3a,0x31, 0x4,0x3a,0x30, 0x4,0x3f,0x76, 0x3,0x48,0x7e, + 0x4,0x46,0x27, 0x3,0x48,0x7d, 0x4,0x46,0x28, 0x3,0x48,0x7c, + 0x4,0x4c,0x49, 0x4,0x52,0x53, 0x3,0x52,0x41, 0x4,0x57,0x77, + 0x4,0x5c,0x6a, 0x4,0x5c,0x6b, 0x4,0x69,0x2c, 0x3,0x33,0x40, + 0x3,0x33,0x41, 0x4,0x34,0x3a, 0x3,0x38,0x33, 0x4,0x34,0x3b, + 0x4,0x34,0x3e, 0x4,0x34,0x3c, 0x3,0x38,0x35, 0x3,0x38,0x34, + 0x4,0x3a,0x34, 0x4,0x3a,0x35, 0x5,0x3b,0x3a, 0x4,0x3a,0x33, + 0x3,0x43,0x70, 0x4,0x3f,0x78, 0x3,0x43,0x71, 0x4,0x3f,0x77, + 0x3,0x43,0x6f, 0x3,0x49,0x21, 0x4,0x46,0x2a, 0x4,0x46,0x29, + 0x4,0x46,0x2b, 0x4,0x52,0x55, 0x4,0x52,0x56, 0x3,0x58,0x5e, + 0x3,0x58,0x60, 0x3,0x58,0x5f, 0x3,0x5c,0x6e, 0x4,0x66,0x7d, + 0x3,0x3e,0x39, 0x3,0x3e,0x3a, 0x4,0x2b,0x27, 0x4,0x2b,0x28, + 0x4,0x2f,0x38, 0x4,0x2b,0x29, 0x3,0x38,0x38, 0x4,0x3f,0x7a, + 0x4,0x46,0x2e, 0x4,0x46,0x2d, 0x4,0x46,0x2f, 0x4,0x46,0x32, + 0x4,0x46,0x30, 0x4,0x4c,0x4f, 0x4,0x57,0x7d, 0x4,0x57,0x7a, + 0x4,0x57,0x7b, 0x4,0x5c,0x70, 0x4,0x67,0x21, 0x4,0x24,0x6d, + 0x3,0x33,0x46, 0x3,0x33,0x45, 0x3,0x38,0x3a, 0x4,0x34,0x41, + 0x4,0x3a,0x39, 0x5,0x41,0x70, 0x3,0x43,0x74, 0x4,0x46,0x36, + 0x4,0x46,0x34, 0x4,0x46,0x35, 0x4,0x46,0x37, 0x3,0x49,0x24, + 0x3,0x4e,0x33, 0x4,0x4c,0x52, 0x4,0x52,0x5a, 0x3,0x52,0x42, + 0x4,0x52,0x5b, 0x4,0x58,0x21, 0x4,0x58,0x24, 0x4,0x58,0x23, + 0x4,0x58,0x22, 0x3,0x58,0x64, 0x4,0x64,0x28, 0x3,0x5f,0x5c, + 0x6,0x56,0x6d, 0x4,0x23,0x2d, 0x6,0x25,0x49, 0x4,0x24,0x6f, + 0x4,0x24,0x6e, 0x3,0x2a,0x51, 0x6,0x3b,0x28, 0x3,0x2a,0x55, + 0x3,0x2a,0x50, 0x4,0x27,0x66, 0xf,0x28,0x52, 0x4,0x27,0x62, + 0x4,0x27,0x67, 0x4,0x27,0x63, 0x4,0x27,0x65, 0x5,0x27,0x58, + 0x3,0x2a,0x5a, 0x3,0x2a,0x53, 0x5,0x2b,0x33, 0x4,0x2b,0x2f, + 0x4,0x2b,0x2a, 0x4,0x2b,0x2c, 0x3,0x2e,0x62, 0x3,0x2e,0x5f, + 0x6,0x33,0x7d, 0x5,0x2b,0x39, 0x3,0x33,0x51, 0x4,0x2f,0x41, + 0x4,0x2f,0x46, 0x4,0x2f,0x47, 0x4,0x2f,0x3f, 0x6,0x3b,0x31, + 0x5,0x2f,0x6d, 0x3,0x38,0x46, 0x4,0x34,0x4c, 0x4,0x34,0x48, + 0x3,0x38,0x44, 0x4,0x34,0x4b, 0x4,0x34,0x52, 0x4,0x34,0x51, + 0x4,0x34,0x4a, 0x4,0x34,0x53, 0x6,0x43,0x58, 0x3,0x38,0x40, + 0x3,0x38,0x3f, 0x3,0x38,0x43, 0x4,0x3a,0x49, 0x4,0x3a,0x3a, + 0x3,0x3e,0x3f, 0x4,0x3a,0x45, 0x5,0x3b,0x4d, 0x4,0x3a,0x4a, + 0x4,0x3a,0x41, 0x4,0x3a,0x40, 0x4,0x3a,0x42, 0x4,0x3a,0x3d, + 0x3,0x3e,0x46, 0x4,0x3a,0x3f, 0x4,0x3a,0x44, 0x4,0x3a,0x4b, + 0x6,0x49,0x7e, 0x6,0x4d,0x54, 0x6,0x56,0x76, 0x4,0x40,0x27, + 0x3,0x43,0x78, 0x4,0x40,0x2a, 0x4,0x40,0x23, 0x4,0x40,0x26, + 0x3,0x43,0x7a, 0x4,0x3f,0x7d, 0x4,0x40,0x28, 0x3,0x44,0x21, + 0x4,0x40,0x2c, 0x3,0x43,0x7d, 0x3,0x43,0x79, 0x5,0x34,0x6a, + 0x4,0x40,0x25, 0x4,0x46,0x45, 0x4,0x46,0x3e, 0x4,0x46,0x3c, + 0x4,0x46,0x3d, 0x4,0x46,0x3f, 0x3,0x52,0x48, 0x4,0x46,0x42, + 0x4,0x46,0x40, 0x4,0x46,0x3b, 0x3,0x49,0x29, 0x3,0x49,0x28, + 0x4,0x46,0x38, 0x4,0x46,0x47, 0x4,0x46,0x41, 0x4,0x4c,0x5d, + 0x4,0x4c,0x58, 0x4,0x4c,0x5e, 0x4,0x4c,0x55, 0x4,0x4c,0x5c, + 0x6,0x60,0x6f, 0x4,0x4c,0x54, 0x4,0x4c,0x5b, 0x4,0x4c,0x5f, + 0x5,0x42,0x28, 0x4,0x52,0x63, 0x4,0x52,0x64, 0x3,0x52,0x46, + 0x3,0x52,0x45, 0x4,0x52,0x5e, 0x4,0x52,0x61, 0x4,0x52,0x62, + 0x4,0x52,0x66, 0xf,0x51,0x55, 0x5,0x5d,0x5b, 0x4,0x58,0x2b, + 0x4,0x58,0x28, 0x4,0x58,0x2c, 0x4,0x5c,0x74, 0x3,0x58,0x66, + 0x4,0x5c,0x76, 0x3,0x58,0x67, 0x3,0x5a,0x76, 0x4,0x60,0x74, + 0x4,0x60,0x73, 0x5,0x6d,0x2c, 0x4,0x64,0x2a, 0x4,0x67,0x22, + 0x4,0x67,0x24, 0x4,0x67,0x23, 0x4,0x67,0x25, 0x4,0x69,0x30, + 0x6,0x43,0x64, 0x7,0x42,0x24, 0x3,0x2b,0x44, 0x3,0x44,0x24, + 0x4,0x2f,0x4a, 0x4,0x34,0x58, 0x4,0x4c,0x63, 0x4,0x52,0x6b, + 0x3,0x33,0x53, 0x3,0x33,0x54, 0x3,0x38,0x4a, 0x4,0x4c,0x64, + 0x6,0x61,0x21, 0x3,0x52,0x4b, 0x3,0x5e,0x54, 0x4,0x27,0x6f, + 0x4,0x2b,0x33, 0x4,0x2b,0x32, 0x3,0x2e,0x67, 0x3,0x33,0x56, + 0x4,0x2f,0x50, 0x3,0x38,0x4b, 0x6,0x43,0x71, 0x6,0x43,0x70, + 0x3,0x3e,0x4a, 0x4,0x3a,0x4e, 0x4,0x3a,0x4f, 0x6,0x4d,0x63, + 0x5,0x42,0x2d, 0x4,0x40,0x2f, 0x4,0x46,0x4f, 0x4,0x46,0x51, + 0x4,0x46,0x50, 0x3,0x49,0x2c, 0x6,0x61,0x24, 0x5,0x49,0x2c, + 0x3,0x4e,0x3e, 0x4,0x4c,0x68, 0x4,0x4c,0x65, 0x4,0x52,0x6c, + 0x4,0x52,0x6d, 0x4,0x58,0x30, 0x4,0x58,0x34, 0x4,0x58,0x33, + 0x3,0x56,0x25, 0x3,0x56,0x26, 0x5,0x5d,0x67, 0x5,0x5c,0x4d, + 0x4,0x58,0x32, 0x4,0x5c,0x7c, 0x4,0x64,0x2d, 0x4,0x2f,0x53, + 0x4,0x34,0x5c, 0x4,0x52,0x6f, 0x4,0x52,0x6e, 0x4,0x58,0x35, + 0x4,0x5c,0x7d, 0x4,0x69,0x33, 0x6,0x25,0x4f, 0x3,0x24,0x37, + 0x3,0x24,0x39, 0x3,0x27,0x27, 0x4,0x24,0x76, 0x4,0x24,0x7d, + 0x3,0x27,0x2c, 0x3,0x2a,0x63, 0x3,0x2a,0x67, 0x3,0x2a,0x64, + 0x3,0x2a,0x6a, 0x4,0x27,0x72, 0x3,0x2a,0x62, 0x4,0x28,0x21, + 0x4,0x27,0x73, 0x3,0x2a,0x65, 0x3,0x2a,0x69, 0x5,0x27,0x63, + 0x3,0x2a,0x61, 0x3,0x2e,0x6d, 0x4,0x2b,0x36, 0x3,0x2e,0x70, + 0x3,0x2e,0x71, 0x3,0x2e,0x6c, 0x3,0x2e,0x73, 0x3,0x2e,0x75, + 0x6,0x34,0x3a, 0x4,0x2f,0x55, 0x3,0x33,0x61, 0x4,0x2f,0x61, + 0x3,0x33,0x64, 0x3,0x33,0x5b, 0x3,0x33,0x5e, 0x6,0x3b,0x56, + 0x3,0x33,0x5d, 0x4,0x2f,0x5e, 0x3,0x33,0x5c, 0x3,0x33,0x65, + 0x5,0x30,0x21, 0x4,0x2f,0x59, 0x4,0x2f,0x64, 0x3,0x33,0x60, + 0x4,0x34,0x5e, 0x4,0x34,0x6c, 0x4,0x34,0x71, 0x3,0x38,0x5a, + 0x4,0x34,0x69, 0x4,0x34,0x65, 0x3,0x38,0x56, 0x4,0x34,0x66, + 0x4,0x34,0x62, 0x4,0x34,0x5d, 0x4,0x34,0x63, 0x6,0x44,0x2c, + 0x3,0x38,0x4c, 0x6,0x44,0x28, 0x5,0x35,0x2a, 0x3,0x38,0x59, + 0x3,0x38,0x5c, 0x5,0x35,0x24, 0x4,0x3a,0x6c, 0x4,0x3a,0x60, + 0x4,0x3a,0x5f, 0x4,0x3a,0x64, 0x4,0x3a,0x59, 0x5,0x3b,0x56, + 0x4,0x3a,0x5b, 0x4,0x3a,0x56, 0x3,0x3e,0x53, 0x4,0x3a,0x5e, + 0x3,0x3e,0x54, 0x3,0x3e,0x51, 0x4,0x3a,0x5c, 0x4,0x3a,0x61, + 0x3,0x3e,0x55, 0x6,0x4e,0x27, 0x3,0x3e,0x4c, 0xf,0x3e,0x6b, + 0x4,0x40,0x30, 0x4,0x40,0x32, 0x4,0x3a,0x65, 0x3,0x44,0x37, + 0x4,0x46,0x69, 0x4,0x40,0x47, 0x4,0x40,0x49, 0x4,0x40,0x3a, + 0x3,0x44,0x2b, 0x3,0x44,0x29, 0x3,0x44,0x34, 0x4,0x40,0x48, + 0x3,0x44,0x3d, 0x4,0x40,0x4c, 0x4,0x46,0x65, 0x3,0x49,0x2f, + 0x4,0x46,0x57, 0x6,0x61,0x44, 0x4,0x46,0x64, 0x3,0x49,0x31, + 0x4,0x46,0x53, 0x5,0x49,0x3c, 0x4,0x46,0x61, 0x3,0x49,0x30, + 0x4,0x46,0x6d, 0x4,0x46,0x60, 0x4,0x46,0x5c, 0x3,0x49,0x34, + 0x5,0x49,0x3b, 0x6,0x61,0x58, 0x3,0x49,0x37, 0x3,0x49,0x40, + 0x3,0x4e,0x43, 0x4,0x4c,0x72, 0x3,0x4e,0x3f, 0x4,0x4c,0x70, + 0x4,0x4d,0x24, 0x4,0x4c,0x6b, 0x3,0x4e,0x41, 0x4,0x4c,0x71, + 0x3,0x4e,0x53, 0x4,0x4c,0x6d, 0x4,0x4c,0x73, 0x3,0x4e,0x47, + 0x3,0x4e,0x45, 0x3,0x4e,0x56, 0x4,0x4c,0x7d, 0x3,0x52,0x51, + 0x4,0x4c,0x6c, 0x3,0x4e,0x4a, 0x4,0x4c,0x6e, 0x3,0x4e,0x48, + 0x3,0x4e,0x55, 0x3,0x4e,0x49, 0x5,0x50,0x46, 0x3,0x4e,0x50, + 0xf,0x51,0x65, 0xf,0x51,0x73, 0xf,0x51,0x76, 0x4,0x4d,0x21, + 0x4,0x4c,0x6f, 0x3,0x4e,0x51, 0x4,0x4c,0x77, 0x4,0x52,0x77, + 0x4,0x52,0x7b, 0x4,0x52,0x79, 0x4,0x53,0x2c, 0x4,0x53,0x21, + 0x4,0x52,0x76, 0x3,0x52,0x53, 0x4,0x53,0x25, 0x3,0x52,0x57, + 0x4,0x52,0x7e, 0x3,0x52,0x4d, 0x4,0x53,0x23, 0x4,0x52,0x7a, + 0x4,0x52,0x7c, 0x4,0x52,0x72, 0x5,0x64,0x2d, 0x3,0x52,0x4c, + 0x4,0x53,0x22, 0x4,0x52,0x73, 0x3,0x52,0x4e, 0x4,0x53,0x27, + 0x4,0x53,0x31, 0x4,0x46,0x67, 0x4,0x58,0x44, 0x4,0x58,0x3c, + 0x4,0x58,0x38, 0x4,0x58,0x42, 0x5,0x5d,0x79, 0x4,0x58,0x36, + 0x4,0x58,0x3b, 0x3,0x56,0x2e, 0x3,0x56,0x27, 0x4,0x58,0x3d, + 0x3,0x56,0x2a, 0x3,0x56,0x2f, 0x3,0x58,0x69, 0x4,0x5c,0x7e, + 0x4,0x5d,0x2b, 0x3,0x58,0x6d, 0x3,0x58,0x70, 0x3,0x58,0x6a, + 0x3,0x58,0x71, 0x4,0x5d,0x23, 0x7,0x42,0x38, 0x4,0x5d,0x21, + 0xf,0x60,0x4e, 0x7,0x3b,0x32, 0x4,0x60,0x77, 0x3,0x5c,0x73, + 0x3,0x5b,0x23, 0x4,0x60,0x78, 0x3,0x5b,0x21, 0x3,0x5b,0x24, + 0x7,0x49,0x53, 0x4,0x64,0x2f, 0x4,0x64,0x34, 0x3,0x5c,0x7d, + 0x4,0x64,0x33, 0x3,0x5c,0x74, 0x7,0x54,0x68, 0x3,0x5c,0x79, + 0x4,0x64,0x32, 0x4,0x64,0x38, 0x3,0x5c,0x7a, 0x4,0x64,0x30, + 0x3,0x5c,0x75, 0x4,0x64,0x36, 0x4,0x67,0x27, 0x3,0x5e,0x59, + 0x4,0x67,0x28, 0xf,0x68,0x39, 0x3,0x5f,0x5d, 0x4,0x69,0x37, + 0x7,0x58,0x72, 0x3,0x60,0x41, 0x3,0x60,0x42, 0x5,0x78,0x25, + 0x4,0x6b,0x7d, 0x4,0x6d,0x5e, 0x4,0x6c,0x7d, 0x3,0x61,0x6a, + 0x4,0x6d,0x79, 0x4,0x6d,0x7b, 0xf,0x6c,0x6c, 0x4,0x6e,0x37, + 0x4,0x6e,0x36, 0x5,0x7c,0x3e, 0x3,0x2a,0x6d, 0x4,0x2b,0x3e, + 0x4,0x2f,0x67, 0x3,0x33,0x67, 0x3,0x33,0x66, 0x3,0x33,0x68, + 0x5,0x35,0x35, 0x3,0x38,0x62, 0x5,0x3b,0x70, 0x3,0x3e,0x60, + 0x3,0x44,0x41, 0x5,0x42,0x54, 0x5,0x42,0x53, 0x3,0x44,0x42, + 0x3,0x44,0x43, 0x4,0x4d,0x26, 0x4,0x53,0x36, 0x4,0x5d,0x32, + 0x5,0x64,0x3b, 0x5,0x64,0x3a, 0x4,0x64,0x3a, 0x3,0x27,0x2e, + 0x3,0x2e,0x7d, 0x3,0x2f,0x21, 0x3,0x2f,0x22, 0x4,0x2f,0x69, + 0x4,0x2f,0x6b, 0x6,0x3b,0x69, 0x3,0x38,0x68, 0x3,0x38,0x67, + 0x4,0x34,0x7c, 0x3,0x38,0x65, 0x4,0x34,0x7b, 0x4,0x34,0x79, + 0x5,0x3c,0x26, 0x6,0x44,0x48, 0x4,0x3a,0x72, 0x3,0x3e,0x67, + 0x4,0x3a,0x74, 0x3,0x3e,0x65, 0x5,0x3b,0x74, 0x4,0x3a,0x70, + 0x4,0x3a,0x6d, 0x3,0x3e,0x64, 0x3,0x3e,0x66, 0x4,0x40,0x56, + 0x4,0x40,0x57, 0x3,0x44,0x4b, 0x3,0x44,0x47, 0x4,0x40,0x5b, + 0x4,0x3a,0x6e, 0x4,0x40,0x5d, 0x3,0x44,0x4a, 0x4,0x46,0x78, + 0x3,0x49,0x46, 0x4,0x46,0x72, 0x4,0x46,0x73, 0x4,0x46,0x71, + 0x4,0x46,0x75, 0x3,0x49,0x47, 0x4,0x46,0x70, 0x4,0x46,0x76, + 0x6,0x61,0x69, 0x3,0x49,0x48, 0x4,0x46,0x7b, 0x3,0x4e,0x5a, + 0x3,0x4e,0x5c, 0x7,0x28,0x42, 0x3,0x4e,0x57, 0x3,0x4e,0x58, + 0x4,0x4d,0x30, 0x3,0x4e,0x5b, 0x4,0x46,0x79, 0x4,0x4d,0x36, + 0x4,0x4d,0x2f, 0x3,0x49,0x4d, 0x4,0x53,0x3e, 0x3,0x52,0x5c, + 0x7,0x32,0x73, 0x4,0x53,0x3d, 0x4,0x58,0x4d, 0x3,0x52,0x60, + 0x7,0x32,0x75, 0x3,0x52,0x61, 0x5,0x5e,0x32, 0x4,0x58,0x57, + 0x4,0x58,0x52, 0x3,0x56,0x37, 0x4,0x58,0x58, 0x4,0x58,0x4f, + 0x4,0x58,0x56, 0x3,0x56,0x38, 0x4,0x58,0x4e, 0x3,0x56,0x32, + 0x4,0x58,0x54, 0x4,0x58,0x5f, 0x3,0x56,0x35, 0x3,0x56,0x3c, + 0x3,0x56,0x31, 0x4,0x5d,0x3b, 0x5,0x5e,0x35, 0x4,0x5d,0x39, + 0x3,0x58,0x72, 0x4,0x61,0x24, 0x5,0x69,0x41, 0x3,0x5b,0x2a, + 0x4,0x61,0x21, 0x4,0x61,0x25, 0xf,0x63,0x6e, 0x5,0x6d,0x4b, + 0x4,0x64,0x3b, 0x4,0x64,0x3c, 0x4,0x64,0x40, 0x4,0x64,0x3e, + 0x4,0x64,0x41, 0x3,0x5d,0x26, 0x3,0x5e,0x5e, 0x4,0x67,0x30, + 0x4,0x64,0x3d, 0x4,0x69,0x3e, 0x3,0x5f,0x5e, 0x3,0x5f,0x60, + 0x3,0x60,0x44, 0x7,0x59,0x25, 0x7,0x5c,0x5e, 0x4,0x6a,0x78, + 0x7,0x5c,0x63, 0x3,0x61,0x48, 0x4,0x6e,0x39, 0x3,0x2f,0x25, + 0x6,0x3b,0x73, 0x3,0x38,0x69, 0x3,0x44,0x4c, 0x4,0x47,0x23, + 0x4,0x4d,0x37, 0x4,0x2f,0x6f, 0x4,0x3a,0x78, 0x3,0x4e,0x5e, + 0x4,0x53,0x4a, 0x3,0x5b,0x2e, 0x3,0x2a,0x6e, 0x3,0x2f,0x28, + 0x4,0x2b,0x46, 0x5,0x30,0x3d, 0x4,0x2f,0x72, 0x5,0x30,0x39, + 0x4,0x35,0x2a, 0x4,0x3a,0x7a, 0x4,0x35,0x2d, 0x4,0x35,0x2e, + 0x4,0x35,0x2c, 0xf,0x32,0x51, 0x4,0x3a,0x79, 0x3,0x3e,0x71, + 0x4,0x35,0x30, 0x3,0x3e,0x6e, 0x3,0x3e,0x6c, 0x3,0x3e,0x6b, + 0x3,0x2f,0x4a, 0x4,0x40,0x62, 0x4,0x47,0x25, 0x6,0x58,0x2b, + 0x3,0x49,0x53, 0x4,0x47,0x2d, 0x5,0x49,0x6c, 0x5,0x49,0x6d, + 0x4,0x40,0x66, 0x4,0x47,0x31, 0x4,0x47,0x27, 0x3,0x49,0x55, + 0x4,0x40,0x60, 0x4,0x47,0x2a, 0x4,0x47,0x2e, 0x4,0x47,0x26, + 0x4,0x47,0x2b, 0x3,0x49,0x5a, 0x3,0x49,0x50, 0x3,0x49,0x5b, + 0x4,0x4d,0x3c, 0x4,0x4d,0x3f, 0x4,0x4d,0x3a, 0x4,0x4d,0x39, + 0x4,0x4d,0x42, 0x4,0x4d,0x40, 0x4,0x4d,0x47, 0x4,0x53,0x52, + 0x4,0x53,0x55, 0x4,0x53,0x56, 0x3,0x4e,0x63, 0x4,0x53,0x4f, + 0x4,0x58,0x63, 0x4,0x58,0x67, 0x3,0x56,0x45, 0x3,0x56,0x43, + 0x4,0x58,0x64, 0x3,0x56,0x3e, 0x7,0x3b,0x59, 0x3,0x56,0x44, + 0x4,0x58,0x65, 0x3,0x56,0x41, 0x5,0x64,0x56, 0x4,0x5d,0x4a, + 0x4,0x5d,0x48, 0x4,0x5d,0x49, 0x4,0x5d,0x44, 0x4,0x5d,0x46, + 0x4,0x61,0x2a, 0x7,0x43,0x22, 0x4,0x64,0x43, 0x7,0x50,0x25, + 0x3,0x5d,0x27, 0x4,0x64,0x44, 0x3,0x5e,0x5f, 0x4,0x6a,0x7b, + 0x7,0x59,0x32, 0x3,0x60,0x7a, 0x4,0x6c,0x26, 0x3,0x60,0x79, + 0x4,0x6d,0x7d, 0x5,0x2b,0x47, 0x4,0x2f,0x73, 0x4,0x35,0x31, + 0x4,0x3b,0x21, 0x3,0x33,0x79, 0x3,0x33,0x78, 0x4,0x35,0x33, + 0x4,0x35,0x35, 0x4,0x3b,0x23, 0x5,0x3c,0x35, 0x4,0x3b,0x22, + 0x3,0x3e,0x73, 0x3,0x44,0x50, 0x3,0x44,0x51, 0x4,0x47,0x36, + 0x4,0x47,0x38, 0x4,0x4d,0x4a, 0x4,0x4d,0x48, 0x4,0x53,0x5a, + 0x4,0x53,0x5b, 0x5,0x58,0x32, 0x4,0x53,0x5c, 0x5,0x5e,0x43, + 0x4,0x58,0x68, 0x4,0x58,0x69, 0x4,0x5d,0x4e, 0x4,0x5d,0x50, + 0x4,0x61,0x2d, 0x4,0x61,0x2e, 0x3,0x5b,0x30, 0x4,0x61,0x2c, + 0x4,0x61,0x30, 0x3,0x5e,0x60, 0x3,0x62,0x3c, 0x4,0x35,0x3a, + 0x3,0x44,0x53, 0x4,0x40,0x67, 0x3,0x44,0x52, 0x4,0x47,0x3a, + 0x4,0x4d,0x51, 0x4,0x4d,0x4c, 0x4,0x4d,0x4e, 0x4,0x4d,0x53, + 0x4,0x4d,0x4f, 0x4,0x53,0x64, 0x4,0x53,0x61, 0x4,0x53,0x62, + 0x4,0x58,0x6b, 0x4,0x58,0x6a, 0x5,0x64,0x63, 0x4,0x61,0x31, + 0x4,0x61,0x34, 0x4,0x64,0x46, 0x4,0x64,0x47, 0x4,0x6d,0x22, + 0x3,0x2f,0x2b, 0x5,0x2b,0x49, 0x3,0x2f,0x2d, 0x4,0x2f,0x7e, + 0x3,0x33,0x7d, 0x4,0x35,0x41, 0x3,0x38,0x7c, 0x3,0x38,0x78, + 0x5,0x35,0x57, 0x4,0x35,0x44, 0x5,0x35,0x5e, 0x3,0x39,0x24, + 0x3,0x39,0x28, 0x3,0x39,0x21, 0x4,0x35,0x3f, 0x3,0x38,0x7d, + 0x3,0x39,0x27, 0x4,0x35,0x43, 0x5,0x35,0x5d, 0x6,0x44,0x6d, + 0x3,0x39,0x26, 0x5,0x35,0x56, 0x4,0x3b,0x33, 0x3,0x3e,0x79, + 0x3,0x3e,0x7a, 0x4,0x3b,0x36, 0x4,0x3b,0x35, 0x3,0x3e,0x76, + 0x3,0x3e,0x7b, 0x3,0x3e,0x77, 0x4,0x3b,0x34, 0x4,0x3b,0x2a, + 0x4,0x3b,0x29, 0x4,0x3b,0x2b, 0x3,0x3f,0x26, 0x6,0x4e,0x6b, + 0x3,0x3f,0x25, 0x3,0x44,0x57, 0x6,0x58,0x41, 0x3,0x44,0x5e, + 0x4,0x40,0x6e, 0x4,0x40,0x6d, 0x4,0x40,0x6c, 0x3,0x44,0x5a, + 0x3,0x44,0x5f, 0x3,0x44,0x62, 0x4,0x47,0x3d, 0x4,0x47,0x40, + 0x4,0x47,0x4a, 0x4,0x47,0x3c, 0x3,0x49,0x6a, 0x4,0x47,0x46, + 0x4,0x47,0x42, 0x3,0x49,0x61, 0x4,0x47,0x43, 0x3,0x49,0x69, + 0x3,0x49,0x67, 0x3,0x49,0x5d, 0x4,0x4d,0x59, 0x4,0x4d,0x56, + 0x4,0x4d,0x5c, 0x4,0x4d,0x5e, 0x3,0x4e,0x68, 0x4,0x4d,0x61, + 0x4,0x4d,0x58, 0x4,0x4d,0x5b, 0x3,0x4e,0x6d, 0x4,0x4d,0x5f, + 0x4,0x4d,0x5a, 0x3,0x4e,0x6b, 0x4,0x4d,0x60, 0x7,0x28,0x79, + 0x4,0x4d,0x55, 0x3,0x4e,0x71, 0x4,0x53,0x6a, 0x3,0x52,0x6c, + 0x3,0x52,0x6d, 0x7,0x33,0x4d, 0x4,0x53,0x6b, 0x3,0x56,0x47, + 0x4,0x58,0x70, 0x3,0x56,0x4b, 0x3,0x56,0x4c, 0x5,0x5e,0x55, + 0x4,0x5d,0x5a, 0x7,0x4a,0x25, 0x4,0x5d,0x57, 0x4,0x5d,0x5b, + 0x3,0x59,0x22, 0x3,0x59,0x25, 0x4,0x5d,0x54, 0x3,0x59,0x27, + 0x4,0x61,0x40, 0x5,0x69,0x52, 0x3,0x5b,0x33, 0x4,0x61,0x3b, + 0x4,0x61,0x3d, 0x4,0x61,0x45, 0x5,0x69,0x51, 0x4,0x64,0x4e, + 0x3,0x5d,0x2d, 0x7,0x50,0x31, 0x4,0x64,0x4c, 0x3,0x5d,0x2f, + 0x4,0x64,0x48, 0x3,0x5d,0x31, 0x4,0x67,0x3d, 0x4,0x67,0x3f, + 0x7,0x55,0x32, 0x4,0x67,0x3e, 0x4,0x67,0x40, 0x4,0x67,0x39, + 0x7,0x59,0x38, 0x3,0x5f,0x63, 0x4,0x69,0x48, 0x5,0x76,0x4c, + 0x4,0x2b,0x49, 0x4,0x30,0x23, 0x6,0x4e,0x7a, 0x3,0x3f,0x27, + 0x4,0x47,0x4c, 0x3,0x4e,0x77, 0x4,0x58,0x75, 0x4,0x5d,0x61, + 0x4,0x69,0x4c, 0x4,0x35,0x4a, 0x3,0x3f,0x28, 0x4,0x40,0x74, + 0x4,0x47,0x4e, 0x4,0x47,0x4f, 0x3,0x49,0x6c, 0x4,0x4d,0x64, + 0x3,0x52,0x70, 0x4,0x53,0x73, 0x3,0x52,0x6f, 0x4,0x53,0x72, + 0x3,0x52,0x71, 0x4,0x58,0x76, 0x4,0x58,0x77, 0x3,0x56,0x4e, + 0x4,0x67,0x44, 0x4,0x6d,0x24, 0x4,0x30,0x25, 0x4,0x35,0x4b, + 0x6,0x45,0x22, 0x4,0x35,0x4c, 0xf,0x44,0x74, 0x4,0x4d,0x67, + 0x4,0x4d,0x65, 0x4,0x4d,0x68, 0x4,0x53,0x75, 0x4,0x53,0x77, + 0x4,0x5d,0x64, 0x4,0x61,0x48, 0x4,0x61,0x46, 0x4,0x67,0x45, + 0x3,0x5f,0x65, 0x3,0x61,0x4c, 0x4,0x6d,0x25, 0x4,0x35,0x50, + 0x6,0x45,0x24, 0x3,0x39,0x2f, 0x4,0x3b,0x3e, 0x3,0x49,0x6e, + 0x3,0x4e,0x79, 0x3,0x4e,0x78, 0x3,0x52,0x72, 0x3,0x56,0x50, + 0x3,0x59,0x2c, 0x3,0x59,0x2d, 0x4,0x61,0x4a, 0x7,0x4a,0x41, + 0x3,0x5b,0x37, 0x4,0x5d,0x68, 0x4,0x35,0x51, 0x4,0x35,0x54, + 0x5,0x3c,0x4c, 0x4,0x3b,0x3f, 0x4,0x3b,0x41, 0x3,0x3f,0x2e, + 0x4,0x3b,0x42, 0x6,0x4f,0x29, 0x4,0x3b,0x43, 0x4,0x41,0x21, + 0x3,0x44,0x66, 0x3,0x44,0x68, 0x5,0x4a,0x29, 0x6,0x62,0x6a, + 0x3,0x49,0x6f, 0x3,0x4e,0x7b, 0x3,0x4e,0x7c, 0x4,0x4d,0x6e, + 0x4,0x4d,0x6c, 0x7,0x29,0x36, 0x4,0x4d,0x6d, 0x5,0x51,0x39, + 0x3,0x4f,0x21, 0x3,0x52,0x74, 0x4,0x53,0x7d, 0x4,0x53,0x79, + 0x4,0x53,0x7b, 0x4,0x53,0x7a, 0x3,0x52,0x76, 0x7,0x3c,0x33, + 0x4,0x58,0x7a, 0xf,0x60,0x7a, 0x4,0x53,0x7e, 0x3,0x5d,0x35, + 0x3,0x5e,0x64, 0x4,0x6b,0x21, 0x5,0x30,0x4b, 0x5,0x43,0x34, + 0x4,0x47,0x59, 0x4,0x47,0x58, 0x4,0x67,0x48, 0x5,0x30,0x4c, + 0x4,0x30,0x27, 0x4,0x30,0x28, 0x4,0x35,0x55, 0x4,0x35,0x56, + 0x3,0x39,0x34, 0x3,0x39,0x36, 0x3,0x3f,0x31, 0x4,0x3b,0x45, + 0x3,0x3f,0x36, 0x3,0x3f,0x32, 0x5,0x3c,0x52, 0x3,0x3f,0x35, + 0x4,0x3b,0x48, 0x4,0x3b,0x47, 0x4,0x41,0x26, 0x4,0x41,0x27, + 0x5,0x43,0x3c, 0x3,0x44,0x6a, 0x4,0x41,0x28, 0x5,0x43,0x38, + 0x4,0x47,0x5a, 0x6,0x62,0x75, 0x4,0x47,0x5b, 0x3,0x49,0x76, + 0x5,0x4a,0x34, 0x3,0x49,0x77, 0x5,0x4a,0x32, 0x3,0x4f,0x27, + 0x4,0x4d,0x73, 0x4,0x4d,0x71, 0x3,0x4f,0x24, 0x4,0x4d,0x74, + 0x7,0x29,0x3d, 0x4,0x54,0x26, 0x5,0x58,0x5c, 0x5,0x58,0x55, + 0x3,0x52,0x78, 0x4,0x58,0x7d, 0x4,0x59,0x25, 0x4,0x58,0x7c, + 0x5,0x5e,0x6d, 0x4,0x5d,0x6d, 0x3,0x59,0x2f, 0x4,0x5d,0x6c, + 0x4,0x5d,0x6a, 0x4,0x5d,0x6e, 0x3,0x59,0x30, 0x4,0x61,0x4d, + 0x3,0x5d,0x36, 0x4,0x64,0x55, 0x4,0x64,0x53, 0x4,0x64,0x56, + 0x4,0x67,0x4a, 0x4,0x69,0x4e, 0x3,0x5f,0x66, 0x4,0x69,0x4f, + 0x4,0x6b,0x23, 0x4,0x6c,0x28, 0x4,0x6d,0x27, 0x4,0x2b,0x4c, + 0x3,0x2f,0x2f, 0x4,0x30,0x2a, 0x3,0x33,0x7e, 0x4,0x35,0x5e, + 0x4,0x35,0x59, 0x5,0x35,0x72, 0x3,0x39,0x3b, 0x4,0x35,0x5b, + 0x4,0x35,0x5c, 0x4,0x35,0x5d, 0x3,0x39,0x3c, 0x5,0x3c,0x63, + 0x4,0x3b,0x4c, 0x4,0x3b,0x50, 0x3,0x3f,0x3d, 0x4,0x3b,0x4d, + 0x4,0x3b,0x49, 0x6,0x4f,0x36, 0x6,0x4f,0x3c, 0x5,0x3c,0x5c, + 0x4,0x3b,0x4a, 0x4,0x3b,0x4b, 0x4,0x3b,0x4f, 0x3,0x3f,0x3c, + 0x5,0x3c,0x5f, 0x4,0x3b,0x51, 0x4,0x41,0x29, 0x5,0x43,0x4b, + 0x3,0x44,0x6c, 0x3,0x44,0x6e, 0xf,0x45,0x58, 0x5,0x4a,0x3e, + 0x4,0x47,0x5e, 0x4,0x47,0x61, 0x4,0x47,0x5f, 0x4,0x47,0x62, + 0x4,0x47,0x65, 0x3,0x49,0x78, 0x4,0x47,0x64, 0x3,0x4f,0x28, + 0x3,0x44,0x6f, 0x4,0x4d,0x77, 0x4,0x4e,0x22, 0x3,0x4f,0x2a, + 0x7,0x29,0x4e, 0x3,0x4f,0x2e, 0x3,0x4f,0x29, 0x4,0x4d,0x7e, + 0x4,0x4e,0x21, 0x4,0x4d,0x7d, 0x4,0x4d,0x79, 0x4,0x4d,0x78, + 0x4,0x4d,0x76, 0x3,0x4f,0x2d, 0x4,0x4e,0x23, 0x4,0x54,0x2e, + 0x3,0x52,0x7d, 0x3,0x52,0x7a, 0x4,0x54,0x2f, 0x4,0x54,0x2d, + 0x5,0x58,0x62, 0x4,0x54,0x30, 0x3,0x52,0x79, 0x5,0x5e,0x7b, + 0x4,0x59,0x2b, 0x4,0x59,0x2c, 0x4,0x59,0x26, 0xf,0x5c,0x78, + 0x4,0x59,0x2a, 0x4,0x59,0x28, 0x3,0x56,0x53, 0x3,0x59,0x33, + 0x4,0x5d,0x74, 0x4,0x5d,0x78, 0x4,0x5d,0x72, 0x4,0x5d,0x75, + 0x7,0x4a,0x57, 0x4,0x61,0x50, 0x3,0x59,0x34, 0x4,0x61,0x51, + 0x4,0x5d,0x77, 0x4,0x64,0x5b, 0x4,0x64,0x5a, 0x4,0x67,0x50, + 0x4,0x67,0x4c, 0x5,0x74,0x4b, 0x4,0x6b,0x24, 0x7,0x5c,0x77, + 0x4,0x6c,0x29, 0x3,0x61,0x4f, 0x3,0x62,0x2e, 0x3,0x3f,0x42, + 0x5,0x3c,0x67, 0x4,0x3b,0x52, 0x4,0x3b,0x53, 0x3,0x3f,0x41, + 0x3,0x44,0x71, 0x3,0x44,0x70, 0x3,0x44,0x72, 0x4,0x4e,0x26, + 0x4,0x54,0x32, 0x4,0x59,0x30, 0x3,0x56,0x56, 0x3,0x5b,0x3e, + 0x4,0x64,0x5f, 0x3,0x60,0x4c, 0x4,0x2b,0x4d, 0x4,0x2b,0x4e, + 0xf,0x2d,0x53, 0x3,0x34,0x22, 0x3,0x39,0x43, 0x3,0x39,0x44, + 0x3,0x39,0x48, 0x4,0x35,0x61, 0x4,0x35,0x62, 0x3,0x39,0x45, + 0x3,0x39,0x46, 0x3,0x39,0x42, 0x6,0x45,0x45, 0x3,0x3f,0x48, + 0x3,0x3f,0x43, 0x4,0x3b,0x54, 0x3,0x3f,0x4a, 0x3,0x44,0x75, + 0x4,0x41,0x2a, 0x3,0x44,0x74, 0x6,0x59,0x24, 0x4,0x41,0x2c, + 0x4,0x47,0x66, 0x4,0x47,0x69, 0x4,0x47,0x67, 0x3,0x49,0x7e, + 0x4,0x4e,0x28, 0x4,0x4e,0x27, 0x4,0x4e,0x2a, 0x4,0x4e,0x29, + 0x3,0x53,0x23, 0x5,0x58,0x72, 0x4,0x54,0x33, 0x4,0x54,0x34, + 0x5,0x51,0x61, 0x3,0x56,0x58, 0x4,0x59,0x32, 0x4,0x59,0x35, + 0x4,0x59,0x37, 0x3,0x56,0x57, 0x4,0x59,0x31, 0x4,0x5d,0x7c, + 0x4,0x5d,0x7b, 0x4,0x5d,0x7a, 0x5,0x65,0x35, 0x4,0x5d,0x7d, + 0x4,0x5d,0x7e, 0x4,0x61,0x59, 0x4,0x61,0x58, 0x4,0x61,0x57, + 0x4,0x64,0x60, 0x4,0x64,0x61, 0x4,0x67,0x52, 0xf,0x68,0x53, + 0x3,0x5f,0x68, 0x3,0x5f,0x67, 0x3,0x60,0x7d, 0x4,0x6d,0x61, + 0x4,0x6e,0x21, 0x3,0x62,0x3d, 0x4,0x4e,0x2e, 0x3,0x5d,0x39, + 0x4,0x47,0x6b, 0xf,0x4c,0x67, 0x3,0x4f,0x38, 0x4,0x64,0x63, + 0x7,0x50,0x56, 0x3,0x27,0x32, 0x4,0x25,0x22, 0xf,0x28,0x72, + 0x3,0x2a,0x6f, 0x5,0x27,0x69, 0x4,0x2b,0x53, 0x4,0x2b,0x50, + 0x3,0x34,0x23, 0x4,0x30,0x2d, 0x4,0x30,0x30, 0x3,0x34,0x24, + 0x4,0x30,0x2e, 0x3,0x39,0x49, 0x4,0x35,0x69, 0x3,0x39,0x4d, + 0x3,0x3f,0x53, 0x4,0x3b,0x57, 0x3,0x3f,0x4e, 0x6,0x4f,0x48, + 0x3,0x3f,0x52, 0x4,0x41,0x2f, 0x3,0x4a,0x25, 0x4,0x47,0x6c, + 0x3,0x4a,0x23, 0x3,0x4f,0x3a, 0x4,0x4e,0x31, 0x4,0x4e,0x35, + 0x3,0x4f,0x3d, 0x3,0x53,0x2a, 0x3,0x53,0x28, 0x3,0x53,0x29, + 0x4,0x59,0x38, 0x4,0x59,0x39, 0x7,0x43,0x77, 0x3,0x59,0x39, + 0x4,0x61,0x5e, 0x4,0x6c,0x2c, 0x3,0x22,0x5f, 0x4,0x23,0x32, + 0x3,0x27,0x36, 0x3,0x27,0x37, 0x3,0x27,0x38, 0x3,0x2a,0x76, + 0x4,0x28,0x29, 0x3,0x2f,0x36, 0x4,0x2b,0x56, 0x3,0x45,0x22, + 0x3,0x2f,0x3d, 0x4,0x2b,0x54, 0x4,0x2b,0x58, 0x3,0x2f,0x39, + 0x3,0x2f,0x3a, 0x6,0x34,0x6d, 0x4,0x30,0x38, 0x4,0x30,0x34, + 0x3,0x34,0x28, 0x4,0x30,0x33, 0x4,0x47,0x71, 0x4,0x35,0x6c, + 0x4,0x35,0x6e, 0x4,0x35,0x73, 0x4,0x35,0x6b, 0x3,0x39,0x50, + 0x4,0x35,0x70, 0x4,0x3b,0x5e, 0x3,0x3f,0x58, 0x4,0x41,0x34, + 0x4,0x41,0x36, 0x3,0x45,0x21, 0x4,0x59,0x3c, 0x4,0x41,0x38, + 0x4,0x47,0x6d, 0x4,0x47,0x6e, 0x3,0x4a,0x29, 0x3,0x4a,0x28, + 0x5,0x4a,0x60, 0x4,0x47,0x70, 0x3,0x4f,0x3e, 0x4,0x4e,0x3d, + 0x4,0x4e,0x3c, 0x5,0x58,0x7e, 0x5,0x5f,0x3c, 0x3,0x60,0x4d, + 0x4,0x6b,0x26, 0x3,0x2f,0x3f, 0x3,0x34,0x2b, 0x3,0x34,0x2c, + 0x4,0x35,0x78, 0x4,0x35,0x74, 0x3,0x39,0x53, 0x5,0x36,0x36, + 0x4,0x35,0x75, 0x4,0x3b,0x60, 0x3,0x3f,0x5a, 0x3,0x3f,0x5b, + 0x3,0x3f,0x5c, 0x4,0x3b,0x64, 0x6,0x59,0x4c, 0x3,0x45,0x26, + 0x4,0x41,0x3d, 0x4,0x41,0x3c, 0x4,0x41,0x3f, 0x4,0x41,0x3e, + 0x4,0x47,0x73, 0x4,0x47,0x74, 0x4,0x4e,0x3f, 0x4,0x4e,0x41, + 0x4,0x4e,0x3e, 0x4,0x4e,0x40, 0x4,0x54,0x3d, 0x4,0x54,0x3c, + 0x4,0x54,0x3a, 0x3,0x53,0x2e, 0x4,0x54,0x40, 0x4,0x54,0x3b, + 0x7,0x34,0x54, 0x3,0x53,0x30, 0x4,0x59,0x3d, 0x4,0x59,0x42, + 0x7,0x3c,0x70, 0x4,0x59,0x41, 0x5,0x65,0x45, 0x4,0x61,0x61, + 0x4,0x61,0x64, 0x4,0x61,0x63, 0x4,0x61,0x62, 0x4,0x61,0x65, + 0x4,0x67,0x5a, 0x4,0x67,0x5b, 0x4,0x69,0x54, 0x4,0x69,0x53, + 0x4,0x6c,0x2e, 0x4,0x6c,0x2d, 0x4,0x6e,0x3d, 0x4,0x35,0x7a, + 0x6,0x3c,0x63, 0x3,0x39,0x5a, 0x3,0x3f,0x5f, 0x3,0x3f,0x64, + 0x3,0x3f,0x61, 0x3,0x3f,0x67, 0x3,0x45,0x2c, 0x5,0x43,0x6d, + 0x3,0x4a,0x2e, 0x4,0x47,0x79, 0x3,0x4a,0x36, 0x4,0x47,0x76, + 0x4,0x47,0x7b, 0x4,0x47,0x78, 0x3,0x4f,0x4f, 0x4,0x4e,0x43, + 0x3,0x4f,0x47, 0x3,0x4f,0x46, 0x7,0x2a,0x38, 0x3,0x4f,0x4a, + 0x7,0x2a,0x3e, 0x3,0x53,0x33, 0x3,0x53,0x34, 0x4,0x54,0x48, + 0x4,0x54,0x46, 0x7,0x3c,0x7b, 0x3,0x56,0x69, 0x7,0x3c,0x77, + 0x4,0x59,0x45, 0x4,0x59,0x44, 0xf,0x5d,0x4c, 0x3,0x59,0x3f, + 0x3,0x59,0x41, 0x4,0x5e,0x2f, 0x4,0x5e,0x2c, 0x7,0x44,0x39, + 0x4,0x5e,0x27, 0x5,0x65,0x4f, 0x4,0x5e,0x2b, 0x3,0x59,0x48, + 0x3,0x59,0x47, 0x3,0x5b,0x46, 0x4,0x61,0x66, 0x3,0x5b,0x4b, + 0x3,0x5b,0x40, 0x3,0x5b,0x52, 0x4,0x61,0x69, 0x5,0x6a,0x33, + 0x4,0x61,0x68, 0x3,0x5b,0x51, 0x3,0x5b,0x4c, 0x3,0x5b,0x49, + 0xf,0x64,0x34, 0x3,0x5d,0x3b, 0x4,0x61,0x6c, 0x3,0x5d,0x40, + 0x4,0x64,0x66, 0x4,0x64,0x6c, 0x5,0x6e,0x35, 0x3,0x5d,0x48, + 0x4,0x64,0x6d, 0x4,0x67,0x5f, 0x3,0x5e,0x6b, 0x4,0x64,0x69, + 0x4,0x67,0x61, 0x3,0x5e,0x6c, 0x4,0x67,0x63, 0x7,0x55,0x68, + 0x3,0x5e,0x69, 0x3,0x5e,0x6e, 0x3,0x5e,0x6f, 0x3,0x5f,0x6f, + 0x3,0x60,0x51, 0x5,0x71,0x55, 0x7,0x59,0x67, 0x3,0x5f,0x6d, + 0x7,0x59,0x68, 0x3,0x5f,0x70, 0x5,0x74,0x55, 0x4,0x6b,0x2a, + 0x5,0x76,0x5f, 0x4,0x6b,0x27, 0x3,0x60,0x4e, 0x3,0x60,0x50, + 0x3,0x61,0x23, 0x3,0x61,0x21, 0x4,0x6c,0x30, 0x3,0x61,0x24, + 0x3,0x61,0x6e, 0x6,0x3c,0x65, 0x4,0x3b,0x67, 0xf,0x3f,0x76, + 0x4,0x41,0x49, 0x4,0x5e,0x32, 0x3,0x39,0x5b, 0x4,0x35,0x7c, + 0x3,0x3f,0x6a, 0x4,0x3b,0x6b, 0x3,0x3f,0x6e, 0x3,0x3f,0x6b, + 0x3,0x45,0x3b, 0x4,0x41,0x50, 0x4,0x41,0x4e, 0x4,0x48,0x23, + 0x3,0x4a,0x3b, 0x3,0x4a,0x3f, 0x3,0x4a,0x3a, 0x5,0x4a,0x6e, + 0x3,0x4a,0x3c, 0x7,0x2a,0x46, 0x4,0x4e,0x48, 0x3,0x4f,0x54, + 0x3,0x4f,0x57, 0x4,0x54,0x4f, 0x4,0x54,0x4b, 0x3,0x53,0x3f, + 0x4,0x54,0x4c, 0x3,0x53,0x41, 0x3,0x53,0x43, 0x3,0x53,0x46, + 0x3,0x53,0x45, 0x7,0x34,0x73, 0x4,0x59,0x4e, 0x4,0x59,0x4f, + 0x4,0x59,0x54, 0x3,0x56,0x6e, 0x3,0x56,0x6c, 0x4,0x59,0x4d, + 0x4,0x59,0x52, 0x4,0x67,0x66, 0x4,0x64,0x71, 0x5,0x71,0x5b, + 0x4,0x69,0x55, 0x5,0x21,0x7d, 0x3,0x22,0x60, 0x3,0x24,0x3e, + 0x5,0x24,0x7b, 0x6,0x29,0x35, 0x4,0x28,0x31, 0x4,0x28,0x32, + 0x3,0x2a,0x7a, 0x5,0x2b,0x64, 0x4,0x2b,0x5a, 0x3,0x2f,0x41, + 0x4,0x2b,0x59, 0x4,0x30,0x40, 0x4,0x30,0x3d, 0x3,0x34,0x35, + 0x4,0x30,0x3e, 0x3,0x34,0x37, 0x4,0x30,0x3c, 0x3,0x39,0x63, + 0x3,0x39,0x5d, 0x4,0x35,0x7d, 0x3,0x39,0x60, 0x3,0x39,0x62, + 0x3,0x39,0x64, 0x3,0x39,0x5f, 0x3,0x3f,0x6f, 0x4,0x3b,0x6d, + 0x3,0x3f,0x74, 0x3,0x45,0x3f, 0x3,0x45,0x3e, 0x4,0x41,0x55, + 0x4,0x41,0x54, 0x3,0x45,0x3d, 0x3,0x45,0x41, 0x3,0x4a,0x41, + 0x3,0x4a,0x40, 0x3,0x4a,0x43, 0x3,0x4a,0x42, 0x3,0x4f,0x59, + 0x3,0x4f,0x58, 0x7,0x2a,0x54, 0x3,0x53,0x47, 0x4,0x54,0x53, + 0x4,0x54,0x51, 0x4,0x59,0x55, 0x3,0x5b,0x54, 0x4,0x64,0x73, + 0x4,0x67,0x67, 0x3,0x34,0x38, 0x4,0x36,0x24, 0x3,0x3f,0x7a, + 0x3,0x3f,0x76, 0x3,0x3f,0x79, 0x3,0x3f,0x77, 0x4,0x41,0x56, + 0x3,0x45,0x44, 0x3,0x45,0x43, 0x3,0x45,0x45, 0x3,0x4a,0x48, + 0x3,0x4f,0x5d, 0x3,0x4f,0x5c, 0x3,0x53,0x4b, 0x3,0x53,0x4a, + 0x3,0x52,0x38, 0x4,0x59,0x58, 0x3,0x56,0x72, 0x3,0x59,0x4c, + 0x3,0x5b,0x55, 0x3,0x5d,0x4a, 0x3,0x5b,0x56, 0x3,0x5d,0x4b, + 0x4,0x69,0x56, 0x3,0x61,0x51, 0x3,0x62,0x40, 0x3,0x39,0x66, + 0x3,0x3f,0x7d, 0x6,0x50,0x31, 0x3,0x45,0x48, 0x4,0x48,0x2d, + 0x4,0x48,0x31, 0x4,0x48,0x2e, 0x3,0x4a,0x4a, 0x4,0x48,0x34, + 0x3,0x4a,0x4b, 0x4,0x48,0x33, 0x6,0x63,0x7b, 0x3,0x4f,0x5e, + 0x3,0x4f,0x61, 0x3,0x4f,0x5f, 0x4,0x54,0x59, 0x3,0x53,0x4f, + 0x3,0x53,0x4e, 0x4,0x59,0x60, 0x3,0x56,0x73, 0x3,0x56,0x77, + 0x4,0x54,0x58, 0x3,0x56,0x76, 0x4,0x59,0x5d, 0x4,0x59,0x5f, + 0x4,0x5e,0x35, 0x3,0x59,0x4d, 0x3,0x59,0x4e, 0x4,0x5e,0x36, + 0x7,0x44,0x58, 0x7,0x44,0x60, 0x4,0x61,0x74, 0x4,0x61,0x73, + 0x3,0x5b,0x57, 0x3,0x5b,0x58, 0x3,0x5b,0x59, 0x4,0x64,0x75, + 0x3,0x5d,0x4d, 0x4,0x69,0x58, 0x4,0x69,0x5a, 0x4,0x69,0x5b, + 0x3,0x60,0x58, 0x3,0x61,0x53, 0x3,0x61,0x27, 0x3,0x61,0x52, + 0x3,0x62,0x24, 0x3,0x62,0x44, 0x3,0x62,0x46, 0x4,0x69,0x5c, + 0x4,0x36,0x28, 0x4,0x36,0x2a, 0x4,0x3b,0x74, 0x4,0x4e,0x4c, + 0x4,0x64,0x7b, 0x4,0x41,0x5a, 0x3,0x45,0x4a, 0x3,0x4a,0x4d, + 0x4,0x48,0x38, 0x4,0x48,0x37, 0x4,0x54,0x5d, 0x4,0x54,0x5c, + 0x4,0x59,0x62, 0x4,0x64,0x7c, 0x4,0x67,0x6e, 0x5,0x71,0x63, + 0x4,0x6c,0x33, 0x4,0x3b,0x79, 0x3,0x40,0x23, 0x4,0x3b,0x76, + 0x3,0x45,0x4d, 0x4,0x41,0x5d, 0x4,0x41,0x5f, 0x3,0x45,0x4c, + 0xf,0x46,0x32, 0x6,0x5a,0x28, 0x4,0x48,0x3a, 0x4,0x48,0x40, + 0x4,0x48,0x3b, 0x3,0x4a,0x4f, 0x3,0x4a,0x50, 0x4,0x48,0x3d, + 0x4,0x4e,0x4f, 0x4,0x54,0x63, 0x4,0x54,0x61, 0x4,0x54,0x60, + 0x4,0x54,0x64, 0x4,0x54,0x62, 0x4,0x59,0x63, 0x4,0x54,0x68, + 0x3,0x53,0x52, 0x3,0x56,0x7c, 0x4,0x59,0x68, 0x4,0x59,0x64, + 0x7,0x3d,0x56, 0x3,0x56,0x79, 0x3,0x56,0x7d, 0x3,0x56,0x7e, + 0x4,0x5e,0x3e, 0x5,0x65,0x7e, 0x4,0x5e,0x42, 0x4,0x5e,0x3c, + 0x5,0x65,0x73, 0x5,0x65,0x7b, 0x4,0x5e,0x3b, 0x4,0x5e,0x41, + 0x3,0x5b,0x5c, 0x3,0x5b,0x5b, 0x4,0x61,0x77, 0x4,0x61,0x7b, + 0x3,0x5b,0x5a, 0x4,0x65,0x23, 0x4,0x64,0x7e, 0x5,0x6e,0x49, + 0x7,0x56,0x27, 0x7,0x56,0x25, 0x4,0x67,0x72, 0x4,0x67,0x70, + 0x5,0x71,0x69, 0x7,0x56,0x26, 0x3,0x5f,0x74, 0x5,0x74,0x62, + 0x4,0x6b,0x2c, 0x3,0x60,0x5a, 0x4,0x6c,0x34, 0x4,0x6d,0x2d, + 0x3,0x61,0x54, 0x4,0x6d,0x65, 0x3,0x61,0x70, 0x4,0x6e,0x22, + 0x4,0x41,0x61, 0x4,0x48,0x43, 0x4,0x48,0x41, 0x4,0x48,0x42, + 0x4,0x48,0x44, 0x3,0x53,0x54, 0x4,0x59,0x6b, 0x7,0x44,0x77, + 0x4,0x5e,0x45, 0x3,0x59,0x52, 0x4,0x61,0x7d, 0x4,0x61,0x7e, + 0x4,0x67,0x73, 0x4,0x69,0x60, 0x3,0x60,0x5b, 0x3,0x45,0x4e, + 0x3,0x57,0x21, 0x3,0x5b,0x63, 0x3,0x5b,0x62, 0x3,0x5d,0x52, + 0x4,0x67,0x75, 0x4,0x6b,0x2d, 0x3,0x40,0x25, 0x3,0x40,0x26, + 0x3,0x40,0x27, 0x3,0x45,0x51, 0x4,0x54,0x6a, 0x4,0x54,0x69, + 0x3,0x59,0x53, 0x4,0x62,0x22, 0x4,0x62,0x23, 0x3,0x5f,0x75, + 0x4,0x3b,0x7b, 0xf,0x40,0x2d, 0x4,0x41,0x65, 0x4,0x41,0x64, + 0x5,0x44,0x34, 0x5,0x4b,0x3e, 0x4,0x48,0x4d, 0x3,0x4a,0x51, + 0x4,0x48,0x4e, 0x3,0x4a,0x53, 0x4,0x48,0x4c, 0x4,0x48,0x4b, + 0x5,0x4b,0x3f, 0x4,0x48,0x47, 0x3,0x4f,0x68, 0x4,0x4e,0x59, + 0x4,0x4e,0x5c, 0x5,0x52,0x60, 0x4,0x54,0x6d, 0x4,0x54,0x6f, + 0x3,0x53,0x56, 0x4,0x4e,0x5d, 0x3,0x53,0x60, 0x3,0x53,0x57, + 0x3,0x53,0x5e, 0x7,0x35,0x51, 0x3,0x57,0x25, 0x4,0x59,0x73, + 0x7,0x3d,0x69, 0x3,0x57,0x22, 0x4,0x59,0x77, 0x3,0x57,0x23, + 0x3,0x57,0x24, 0x3,0x57,0x27, 0x3,0x57,0x29, 0x4,0x5e,0x4e, + 0x3,0x59,0x54, 0x4,0x5e,0x49, 0x4,0x5e,0x47, 0x4,0x5e,0x4b, + 0x3,0x59,0x57, 0x3,0x59,0x55, 0x4,0x5e,0x4d, 0x4,0x5e,0x4c, + 0x3,0x59,0x5a, 0x4,0x62,0x27, 0x4,0x62,0x29, 0x4,0x62,0x2d, + 0x4,0x62,0x26, 0x4,0x62,0x2c, 0x3,0x5b,0x64, 0x4,0x62,0x25, + 0x4,0x62,0x2f, 0x4,0x62,0x28, 0x4,0x62,0x2b, 0x4,0x65,0x2f, + 0x4,0x65,0x31, 0x4,0x65,0x30, 0x3,0x5d,0x54, 0x4,0x67,0x77, + 0x4,0x67,0x79, 0x4,0x67,0x76, 0x4,0x67,0x7c, 0x4,0x67,0x7b, + 0x7,0x56,0x32, 0x4,0x69,0x63, 0x3,0x5f,0x76, 0x4,0x69,0x62, + 0x4,0x6c,0x39, 0x5,0x78,0x48, 0x3,0x61,0x55, 0x4,0x36,0x2b, + 0x4,0x3b,0x7e, 0x3,0x45,0x53, 0x4,0x41,0x6d, 0x4,0x41,0x72, + 0x4,0x41,0x6e, 0x4,0x48,0x51, 0x4,0x48,0x56, 0x4,0x48,0x59, + 0x4,0x48,0x50, 0x4,0x48,0x54, 0x3,0x4a,0x57, 0x4,0x4e,0x60, + 0x4,0x4e,0x61, 0x4,0x54,0x76, 0x4,0x54,0x77, 0x4,0x54,0x73, + 0x4,0x54,0x74, 0x4,0x54,0x75, 0x4,0x59,0x7d, 0x4,0x5a,0x22, + 0x4,0x5a,0x21, 0x4,0x59,0x7c, 0x4,0x59,0x7a, 0x4,0x59,0x7e, + 0x4,0x5e,0x51, 0x7,0x44,0x7e, 0x4,0x5e,0x50, 0x4,0x5e,0x52, + 0x3,0x59,0x5d, 0x3,0x59,0x5e, 0x3,0x59,0x5f, 0x4,0x62,0x32, + 0x3,0x5b,0x67, 0x3,0x5b,0x66, 0x4,0x65,0x36, 0x3,0x5d,0x55, + 0x4,0x67,0x7e, 0x4,0x6b,0x30, 0x4,0x6c,0x3a, 0x3,0x57,0x2b, + 0x3,0x59,0x60, 0x3,0x34,0x3a, 0x4,0x36,0x2c, 0x3,0x40,0x29, + 0x3,0x40,0x2a, 0x4,0x3c,0x24, 0x3,0x40,0x28, 0x4,0x3c,0x25, + 0x3,0x45,0x5d, 0x3,0x40,0x2c, 0x4,0x41,0x77, 0x4,0x41,0x74, + 0x3,0x4a,0x5c, 0x3,0x45,0x5e, 0x4,0x41,0x75, 0x3,0x45,0x56, + 0x3,0x45,0x55, 0x3,0x45,0x5a, 0x4,0x41,0x79, 0x4,0x41,0x7a, + 0x3,0x4a,0x58, 0x3,0x4a,0x59, 0x4,0x48,0x5b, 0x7,0x2b,0x38, + 0x3,0x4a,0x5a, 0x4,0x48,0x5c, 0x6,0x64,0x40, 0x3,0x4f,0x6a, + 0x4,0x4e,0x65, 0x4,0x4e,0x64, 0x4,0x4e,0x67, 0x4,0x4e,0x66, + 0x4,0x54,0x78, 0x4,0x4e,0x69, 0x4,0x54,0x7c, 0x4,0x54,0x7d, + 0x4,0x54,0x7a, 0x4,0x5a,0x27, 0x4,0x55,0x22, 0x4,0x5a,0x28, + 0x4,0x5a,0x2a, 0x5,0x60,0x31, 0x3,0x57,0x2d, 0x3,0x59,0x64, + 0x5,0x60,0x2c, 0x3,0x57,0x2c, 0x4,0x5e,0x58, 0x4,0x5e,0x57, + 0x4,0x5e,0x5b, 0x4,0x5e,0x59, 0x4,0x5e,0x5a, 0x4,0x65,0x39, + 0x4,0x62,0x36, 0x3,0x5b,0x68, 0x4,0x65,0x3c, 0x4,0x65,0x3b, + 0x3,0x5d,0x57, 0x3,0x5d,0x59, 0x4,0x68,0x24, 0x4,0x68,0x23, + 0x3,0x5e,0x7d, 0x4,0x68,0x22, 0x4,0x69,0x67, 0x4,0x69,0x65, + 0x3,0x5f,0x77, 0x4,0x69,0x68, 0x4,0x6b,0x31, 0x3,0x61,0x56, + 0x4,0x6d,0x30, 0x4,0x6d,0x67, 0x4,0x6e,0x25, 0x3,0x4f,0x6c, + 0x3,0x53,0x67, 0x4,0x5e,0x5f, 0x4,0x62,0x3c, 0x4,0x48,0x5d, + 0x3,0x57,0x2f, 0x4,0x55,0x26, 0x3,0x57,0x2e, 0x3,0x61,0x71, + 0x3,0x40,0x2d, 0x5,0x44,0x4a, 0x3,0x45,0x60, 0x4,0x48,0x5e, + 0x3,0x4a,0x65, 0x4,0x48,0x5f, 0x3,0x4a,0x5f, 0x3,0x4a,0x67, + 0x3,0x4a,0x68, 0x3,0x4a,0x6b, 0x3,0x4a,0x69, 0x4,0x4e,0x6f, + 0x3,0x4f,0x71, 0x3,0x4f,0x70, 0x4,0x4e,0x6e, 0x3,0x4f,0x6f, + 0x4,0x4e,0x6d, 0x4,0x4e,0x70, 0x3,0x53,0x6f, 0x3,0x53,0x6e, + 0x3,0x53,0x6d, 0x5,0x5a,0x2c, 0x3,0x53,0x69, 0x4,0x55,0x2d, + 0x5,0x5a,0x2e, 0x7,0x36,0x28, 0x4,0x5a,0x2e, 0x3,0x57,0x32, + 0x3,0x57,0x35, 0x4,0x5a,0x2d, 0x3,0x57,0x31, 0x4,0x5e,0x67, + 0x5,0x6a,0x6e, 0x4,0x5e,0x62, 0x3,0x59,0x68, 0x4,0x5e,0x68, + 0x3,0x59,0x69, 0x4,0x5e,0x63, 0x4,0x5e,0x65, 0x3,0x59,0x6c, + 0x4,0x62,0x41, 0x4,0x62,0x3f, 0x3,0x5b,0x6a, 0x4,0x62,0x46, + 0x4,0x62,0x40, 0x4,0x62,0x44, 0x4,0x62,0x45, 0x4,0x65,0x41, + 0x4,0x65,0x40, 0x3,0x5d,0x5d, 0x3,0x5d,0x5b, 0x4,0x65,0x47, + 0x5,0x6e,0x66, 0x5,0x6e,0x6d, 0x3,0x5d,0x5c, 0x4,0x68,0x29, + 0x4,0x68,0x2a, 0x4,0x68,0x2b, 0x4,0x68,0x2d, 0x3,0x5f,0x23, + 0x5,0x72,0x2d, 0x4,0x68,0x28, 0x7,0x5a,0x3e, 0x5,0x74,0x76, + 0x4,0x69,0x6b, 0x4,0x69,0x69, 0x3,0x5f,0x7a, 0x4,0x6b,0x33, + 0x4,0x6b,0x34, 0x4,0x6b,0x32, 0x3,0x61,0x2b, 0x7,0x60,0x2e, + 0x7,0x60,0x2d, 0x3,0x61,0x57, 0x4,0x6d,0x68, 0x3,0x62,0x27, + 0x4,0x6e,0x3f, 0x3,0x62,0x37, 0x4,0x6e,0x57, 0x3,0x39,0x69, + 0x3,0x40,0x2e, 0x4,0x48,0x62, 0x3,0x4a,0x6d, 0x3,0x4f,0x75, + 0x4,0x4e,0x75, 0x4,0x4e,0x73, 0x4,0x4e,0x76, 0x3,0x4f,0x78, + 0x3,0x53,0x72, 0x3,0x53,0x73, 0x4,0x55,0x30, 0x4,0x55,0x32, + 0x4,0x55,0x2f, 0x4,0x55,0x2e, 0x3,0x57,0x39, 0x4,0x5a,0x31, + 0x4,0x5a,0x35, 0x4,0x5a,0x30, 0x3,0x57,0x38, 0x4,0x5a,0x33, + 0x5,0x66,0x51, 0x4,0x5e,0x6e, 0x3,0x5b,0x70, 0x4,0x62,0x48, + 0x4,0x62,0x47, 0x4,0x65,0x49, 0x3,0x5d,0x5f, 0x4,0x68,0x30, + 0x4,0x69,0x6e, 0x4,0x6b,0x35, 0x4,0x6c,0x3e, 0x4,0x6d,0x33, + 0x3,0x40,0x30, 0x4,0x42,0x22, 0x4,0x62,0x4a, 0x5,0x74,0x7a, + 0x7,0x64,0x75, 0x3,0x40,0x31, 0x5,0x3d,0x52, 0x6,0x64,0x5e, + 0x4,0x48,0x6a, 0x4,0x48,0x69, 0x4,0x48,0x67, 0x3,0x4a,0x74, + 0x5,0x4b,0x59, 0x4,0x4e,0x7b, 0x3,0x4f,0x7a, 0x4,0x55,0x35, + 0x4,0x55,0x36, 0x4,0x5a,0x38, 0x3,0x57,0x3d, 0x4,0x5a,0x3b, + 0x4,0x5e,0x70, 0x4,0x5e,0x73, 0x3,0x59,0x6e, 0x4,0x5e,0x74, + 0x4,0x5e,0x76, 0x4,0x5e,0x75, 0x4,0x5e,0x77, 0x4,0x62,0x4e, + 0x3,0x5b,0x72, 0x4,0x62,0x4c, 0x4,0x65,0x4d, 0x4,0x65,0x4f, + 0x4,0x65,0x4e, 0x7,0x51,0x79, 0x5,0x72,0x3f, 0x3,0x5f,0x26, + 0x4,0x69,0x72, 0x4,0x6c,0x43, 0x4,0x6c,0x41, 0x3,0x61,0x2d, + 0x5,0x78,0x52, 0x4,0x6d,0x35, 0x7,0x61,0x6a, 0x4,0x6d,0x69, + 0x4,0x6e,0x49, 0x7,0x51,0x7d, 0x5,0x72,0x41, 0x3,0x4a,0x77, + 0x3,0x4a,0x76, 0x3,0x4d,0x3e, 0x3,0x53,0x76, 0x7,0x5a,0x4b, + 0x3,0x61,0x58, 0x3,0x4a,0x79, 0x4,0x4f,0x24, 0x4,0x4f,0x25, + 0x4,0x55,0x3f, 0x3,0x53,0x77, 0x4,0x5e,0x7e, 0x3,0x59,0x70, + 0x4,0x5e,0x7d, 0x4,0x5e,0x7c, 0x3,0x5b,0x73, 0x5,0x66,0x68, + 0x3,0x5d,0x65, 0x4,0x69,0x77, 0x4,0x69,0x76, 0x7,0x5a,0x4f, + 0x4,0x6c,0x48, 0x4,0x6c,0x49, 0x4,0x6e,0x58, 0x5,0x3d,0x54, + 0x4,0x48,0x6d, 0x5,0x4b,0x64, 0x4,0x4f,0x28, 0x4,0x4f,0x34, + 0x3,0x50,0x21, 0x7,0x2b,0x6a, 0x4,0x4f,0x39, 0x4,0x4f,0x32, + 0x4,0x4f,0x2b, 0x4,0x4f,0x29, 0x3,0x54,0x27, 0x4,0x55,0x44, + 0x4,0x55,0x42, 0x4,0x55,0x48, 0x3,0x53,0x7e, 0x3,0x54,0x28, + 0x4,0x55,0x41, 0x3,0x54,0x26, 0x3,0x54,0x24, 0x3,0x54,0x22, + 0x3,0x53,0x7b, 0x4,0x5a,0x40, 0x3,0x57,0x41, 0x4,0x5f,0x21, + 0x7,0x3e,0x49, 0x4,0x5a,0x42, 0x3,0x59,0x72, 0x4,0x5f,0x23, + 0x5,0x66,0x6e, 0x4,0x5f,0x27, 0x4,0x5f,0x25, 0x3,0x59,0x78, + 0x4,0x5f,0x24, 0x3,0x59,0x77, 0x4,0x5f,0x29, 0x4,0x5f,0x2b, + 0x4,0x62,0x5d, 0x5,0x6b,0x35, 0x4,0x62,0x67, 0x4,0x62,0x57, + 0x4,0x62,0x61, 0x4,0x62,0x59, 0x4,0x62,0x54, 0x3,0x5b,0x76, + 0x5,0x6b,0x31, 0x4,0x62,0x62, 0x5,0x6b,0x2b, 0x4,0x62,0x60, + 0x4,0x62,0x64, 0x3,0x5b,0x78, 0x3,0x5b,0x7b, 0x3,0x5b,0x7c, + 0xf,0x64,0x72, 0x3,0x5d,0x77, 0x4,0x65,0x55, 0x7,0x52,0x31, + 0x4,0x65,0x5b, 0x3,0x5d,0x6c, 0x7,0x52,0x33, 0x4,0x65,0x53, + 0x3,0x5d,0x6b, 0x3,0x5d,0x6d, 0x4,0x68,0x3d, 0x3,0x5f,0x2d, + 0x3,0x5f,0x30, 0x4,0x68,0x3c, 0x3,0x5f,0x2e, 0x3,0x5f,0x2b, + 0x4,0x68,0x3a, 0x3,0x5f,0x29, 0x3,0x5f,0x2f, 0x4,0x69,0x7d, + 0x3,0x5f,0x7d, 0x4,0x6a,0x21, 0x4,0x69,0x7c, 0x3,0x5f,0x7c, + 0x4,0x69,0x7e, 0x3,0x60,0x24, 0x4,0x69,0x7b, 0x3,0x60,0x21, + 0xf,0x6a,0x3f, 0x4,0x6b,0x3c, 0x4,0x6b,0x3d, 0x4,0x6b,0x40, + 0x4,0x6b,0x3b, 0x7,0x5e,0x23, 0x3,0x60,0x67, 0x3,0x60,0x64, + 0x5,0x78,0x5b, 0x5,0x78,0x56, 0x3,0x61,0x30, 0x4,0x6c,0x4d, + 0x4,0x6c,0x4e, 0x5,0x77,0x24, 0x3,0x61,0x5a, 0x4,0x6d,0x39, + 0x3,0x61,0x31, 0x4,0x6e,0x2c, 0x4,0x6e,0x2d, 0x4,0x6e,0x5b, + 0x3,0x45,0x65, 0x3,0x4a,0x7a, 0x3,0x4a,0x7b, 0x3,0x4a,0x7c, + 0x3,0x4a,0x7e, 0x5,0x4b,0x6b, 0x3,0x4a,0x7d, 0x5,0x53,0x38, + 0x4,0x4f,0x3f, 0x3,0x50,0x23, 0x4,0x4f,0x44, 0x4,0x4f,0x3b, + 0x7,0x2b,0x6d, 0x4,0x4f,0x40, 0x3,0x50,0x28, 0x3,0x50,0x29, + 0x3,0x50,0x26, 0x3,0x4c,0x63, 0x4,0x4f,0x41, 0x4,0x55,0x4e, + 0x3,0x54,0x2f, 0x4,0x55,0x4d, 0x3,0x54,0x30, 0x4,0x55,0x4f, + 0x3,0x54,0x2b, 0x4,0x55,0x54, 0x7,0x36,0x4a, 0x4,0x55,0x4a, + 0x3,0x54,0x2e, 0x4,0x55,0x57, 0x3,0x57,0x4b, 0x4,0x55,0x4b, + 0x3,0x54,0x31, 0x4,0x55,0x55, 0x3,0x54,0x34, 0x4,0x55,0x50, + 0x7,0x36,0x51, 0x3,0x56,0x33, 0x3,0x57,0x4c, 0x4,0x5a,0x51, + 0x3,0x57,0x47, 0x3,0x57,0x49, 0x3,0x57,0x46, 0x4,0x5a,0x52, + 0x3,0x57,0x4e, 0x4,0x5a,0x50, 0x4,0x5f,0x2f, 0x4,0x5f,0x35, + 0x4,0x5f,0x2c, 0x3,0x5a,0x21, 0x3,0x59,0x7c, 0x4,0x5f,0x32, + 0x4,0x5f,0x31, 0x5,0x67,0x26, 0x4,0x5f,0x38, 0x4,0x62,0x6a, + 0x3,0x5c,0x21, 0x4,0x62,0x6c, 0x4,0x65,0x61, 0x3,0x5c,0x28, + 0x4,0x62,0x6f, 0x5,0x6b,0x3c, 0x4,0x5f,0x36, 0xf,0x64,0x75, + 0x3,0x5d,0x78, 0x4,0x65,0x6c, 0x3,0x5d,0x7d, 0x3,0x5d,0x7b, + 0x4,0x65,0x6a, 0x4,0x65,0x64, 0x3,0x5d,0x7c, 0x7,0x52,0x42, + 0x4,0x65,0x62, 0x4,0x65,0x6b, 0x3,0x5d,0x7e, 0x3,0x5f,0x34, + 0x4,0x68,0x40, 0x4,0x68,0x42, 0x4,0x68,0x41, 0x5,0x72,0x63, + 0x3,0x5f,0x33, 0x4,0x6a,0x27, 0x4,0x6a,0x2c, 0x3,0x60,0x28, + 0x4,0x6a,0x26, 0x3,0x60,0x26, 0x3,0x60,0x27, 0x4,0x6b,0x45, + 0x3,0x60,0x6b, 0x5,0x77,0x2c, 0x4,0x6b,0x44, 0x5,0x77,0x34, + 0x4,0x6b,0x47, 0x3,0x60,0x6a, 0x3,0x60,0x69, 0x4,0x6b,0x48, + 0x4,0x6c,0x50, 0x4,0x6c,0x52, 0x4,0x6c,0x51, 0x3,0x61,0x36, + 0x4,0x6c,0x54, 0x4,0x6d,0x3d, 0x3,0x61,0x5c, 0x7,0x63,0x37, + 0x3,0x62,0x2a, 0x3,0x62,0x3e, 0x4,0x6e,0x59, 0x3,0x62,0x43, + 0x4,0x4f,0x47, 0x4,0x5f,0x39, 0x7,0x57,0x29, 0x4,0x6b,0x4d, + 0x5,0x79,0x73, 0x5,0x4b,0x6d, 0x4,0x4f,0x49, 0x4,0x4f,0x4a, + 0x3,0x50,0x2d, 0x3,0x54,0x38, 0x4,0x55,0x58, 0x7,0x36,0x5c, + 0x3,0x5a,0x23, 0x4,0x62,0x72, 0x3,0x5f,0x39, 0x3,0x61,0x37, + 0x3,0x61,0x38, 0x4,0x48,0x73, 0x4,0x48,0x74, 0x3,0x4b,0x21, + 0x4,0x4f,0x4d, 0x4,0x4f,0x4b, 0x4,0x55,0x59, 0x4,0x55,0x5c, + 0x4,0x55,0x5a, 0x4,0x55,0x5d, 0x3,0x57,0x4f, 0x4,0x5f,0x3c, + 0x4,0x5f,0x3b, 0x3,0x5a,0x27, 0x4,0x62,0x79, 0x4,0x62,0x76, + 0x4,0x62,0x7d, 0x4,0x62,0x77, 0x4,0x62,0x7c, 0x4,0x68,0x49, + 0x4,0x68,0x48, 0x4,0x68,0x4a, 0x5,0x75,0x4d, 0x5,0x75,0x48, + 0x4,0x6b,0x4e, 0x3,0x61,0x39, 0x7,0x5a,0x7d, 0x4,0x6d,0x41, + 0x7,0x2c,0x31, 0x4,0x65,0x71, 0x4,0x65,0x72, 0x7,0x36,0x65, + 0x4,0x5f,0x3d, 0x4,0x63,0x21, 0x4,0x65,0x76, 0x4,0x68,0x4b, + 0x4,0x6b,0x52, 0x4,0x6c,0x5a, 0x7,0x2c,0x33, 0x4,0x55,0x5e, + 0x7,0x36,0x67, 0x5,0x6f,0x52, 0x4,0x65,0x79, 0x5,0x6f,0x54, + 0x4,0x68,0x4c, 0x4,0x68,0x4e, 0x4,0x68,0x4d, 0x4,0x6a,0x31, + 0x4,0x6b,0x55, 0x4,0x6d,0x42, 0x4,0x42,0x2c, 0x3,0x4b,0x23, + 0x4,0x4f,0x52, 0x4,0x4f,0x53, 0x4,0x55,0x5f, 0x4,0x5a,0x5f, + 0x5,0x61,0x23, 0x5,0x67,0x40, 0x5,0x67,0x3d, 0x4,0x5f,0x3f, + 0x5,0x67,0x41, 0x4,0x63,0x23, 0x3,0x5c,0x2b, 0x4,0x65,0x7c, + 0x4,0x66,0x21, 0x4,0x65,0x7d, 0x5,0x6f,0x58, 0x4,0x68,0x52, + 0x3,0x5f,0x3b, 0x4,0x6b,0x56, 0x4,0x6c,0x5b, 0x4,0x6d,0x44, + 0x3,0x61,0x5e, 0x4,0x6d,0x43, 0x4,0x6d,0x6f, 0x4,0x5f,0x40, + 0x3,0x5c,0x2c, 0x4,0x6a,0x37, 0x3,0x61,0x3a, 0x4,0x55,0x61, + 0x4,0x6c,0x61, 0x4,0x6c,0x62, 0x4,0x5f,0x43, 0x4,0x5f,0x42, + 0x4,0x5f,0x44, 0x4,0x63,0x26, 0x4,0x68,0x59, 0x4,0x55,0x62, + 0x4,0x5a,0x63, 0x4,0x5f,0x45, 0x4,0x63,0x27, 0x4,0x68,0x5a, + 0x3,0x60,0x2a, 0x4,0x6b,0x58, 0x4,0x6b,0x5b, 0x3,0x5a,0x2c, + 0x4,0x5f,0x46, 0x3,0x5e,0x23, 0x7,0x52,0x67, 0x5,0x6f,0x61, + 0x4,0x68,0x5c, 0x4,0x6e,0x31, 0x5,0x7b,0x7a, 0x4,0x5a,0x66, + 0x5,0x61,0x2d, 0x4,0x5f,0x48, 0x4,0x63,0x29, 0x4,0x63,0x2b, + 0x4,0x66,0x27, 0x4,0x66,0x25, 0x4,0x66,0x26, 0x3,0x5f,0x3d, + 0x4,0x68,0x61, 0x4,0x6a,0x3d, 0x4,0x6a,0x3c, 0x3,0x60,0x6e, + 0x5,0x77,0x4d, 0x4,0x6c,0x69, 0x4,0x6c,0x66, 0x4,0x6c,0x6a, + 0x4,0x6d,0x4c, 0x4,0x6d,0x4b, 0x4,0x6d,0x70, 0x3,0x61,0x76, + 0x3,0x62,0x2b, 0x3,0x62,0x32, 0x4,0x6e,0x4b, 0x4,0x6e,0x4c, + 0x4,0x6e,0x5a, 0x5,0x75,0x61, 0x5,0x6b,0x69, 0x5,0x6c,0x44, + 0x4,0x68,0x62, 0x4,0x68,0x63, 0x4,0x6d,0x51, 0x3,0x62,0x2c, + 0x1,0x44,0x21, 0x1,0x44,0x23, 0x4,0x21,0x26, 0x1,0x44,0x24, + 0x3,0x21,0x26, 0x3,0x21,0x25, 0x2,0x21,0x26, 0x1,0x44,0x37, + 0x1,0x44,0x35, 0x1,0x44,0x38, 0x1,0x44,0x36, 0x2,0x21,0x27, + 0x1,0x44,0x62, 0x2,0x21,0x2f, 0x2,0x21,0x2d, 0x1,0x44,0x61, + 0x1,0x44,0x60, 0x4,0x21,0x39, 0x1,0x45,0x62, 0x1,0x45,0x61, + 0x1,0x45,0x60, 0x4,0x21,0x55, 0x1,0x45,0x63, 0x1,0x45,0x5f, + 0x1,0x47,0x22, 0x1,0x47,0x23, 0x3,0x22,0x62, 0x3,0x22,0x61, + 0x3,0x22,0x63, 0x4,0x23,0x35, 0x3,0x24,0x3f, 0x1,0x4b,0x64, + 0x3,0x21,0x21, 0x4,0x21,0x27, 0x3,0x21,0x2c, 0x1,0x44,0x39, + 0x1,0x44,0x63, 0x2,0x21,0x30, 0x4,0x21,0x3a, 0x1,0x44,0x64, + 0x2,0x21,0x43, 0x1,0x48,0x6b, 0x2,0x25,0x31, 0x4,0x2b,0x5e, + 0x3,0x21,0x22, 0x1,0x44,0x3a, 0x1,0x44,0x65, 0x1,0x45,0x64, + 0x2,0x21,0x44, 0x3,0x27,0x40, 0x3,0x21,0x23, 0x4,0x21,0x22, + 0x4,0x21,0x23, 0x2,0x21,0x21, 0x1,0x44,0x25, 0x1,0x44,0x3c, + 0x3,0x21,0x30, 0x2,0x21,0x28, 0x1,0x44,0x3d, 0x3,0x21,0x2e, + 0x1,0x44,0x66, 0x1,0x45,0x65, 0x1,0x45,0x67, 0x1,0x45,0x66, + 0x4,0x22,0x27, 0x1,0x47,0x24, 0x1,0x47,0x25, 0x3,0x23,0x45, + 0x1,0x4b,0x65, 0x3,0x2b,0x22, 0x1,0x53,0x7d, 0x1,0x44,0x22, + 0x4,0x21,0x24, 0x2,0x21,0x22, 0x1,0x44,0x26, 0x1,0x44,0x3f, + 0x1,0x44,0x3e, 0x3,0x21,0x46, 0x3,0x21,0x45, 0x3,0x22,0x64, + 0x1,0x47,0x26, 0x4,0x22,0x28, 0x3,0x24,0x40, 0x1,0x4b,0x66, + 0x4,0x25,0x31, 0x4,0x25,0x30, 0x3,0x2b,0x23, 0x1,0x58,0x71, + 0x2,0x33,0x4e, 0x3,0x39,0x6c, 0x3,0x39,0x6e, 0x1,0x63,0x2a, + 0x2,0x41,0x56, 0x2,0x41,0x57, 0x3,0x21,0x24, 0x1,0x44,0x27, + 0x3,0x21,0x2d, 0x1,0x44,0x68, 0x3,0x22,0x65, 0x1,0x4b,0x67, + 0x1,0x44,0x28, 0x2,0x21,0x29, 0x1,0x44,0x40, 0x3,0x21,0x31, + 0x1,0x44,0x69, 0x1,0x44,0x6b, 0x2,0x21,0x31, 0x1,0x44,0x6c, + 0x1,0x44,0x6a, 0x4,0x21,0x3b, 0x3,0x21,0x6c, 0x3,0x22,0x66, + 0x1,0x47,0x27, 0x1,0x4b,0x68, 0x3,0x24,0x42, 0x3,0x27,0x42, + 0x1,0x4b,0x69, 0x1,0x4f,0x67, 0x1,0x27,0x28, 0x1,0x44,0x41, + 0x1,0x44,0x6d, 0x3,0x21,0x47, 0x1,0x47,0x28, 0x1,0x47,0x2a, + 0x1,0x47,0x29, 0x1,0x48,0x6c, 0x1,0x4b,0x6a, 0x1,0x4b,0x6b, + 0x1,0x4f,0x68, 0x1,0x4f,0x69, 0x3,0x2b,0x26, 0x3,0x2b,0x25, + 0x3,0x2b,0x27, 0x3,0x2b,0x24, 0x1,0x53,0x7e, 0x4,0x36,0x2e, + 0x2,0x41,0x58, 0x3,0x40,0x33, 0x2,0x6d,0x44, 0x1,0x44,0x29, + 0x3,0x21,0x32, 0x3,0x21,0x33, 0x1,0x44,0x6f, 0x1,0x44,0x6e, + 0x2,0x21,0x32, 0x1,0x44,0x70, 0x1,0x44,0x76, 0x3,0x21,0x49, + 0x1,0x44,0x71, 0x1,0x44,0x72, 0x2,0x21,0x34, 0x2,0x21,0x33, + 0x1,0x44,0x74, 0x1,0x44,0x75, 0x3,0x21,0x4c, 0x1,0x44,0x73, + 0x3,0x21,0x4b, 0x3,0x21,0x4a, 0x4,0x21,0x3c, 0x1,0x45,0x6a, + 0x1,0x45,0x6b, 0x1,0x45,0x6c, 0x1,0x45,0x6d, 0x1,0x45,0x69, + 0x1,0x45,0x70, 0x2,0x21,0x4a, 0x4,0x21,0x5b, 0x2,0x21,0x46, + 0x2,0x21,0x49, 0x1,0x45,0x71, 0x1,0x46,0x23, 0x3,0x21,0x6d, + 0x2,0x21,0x48, 0x4,0x21,0x5a, 0x1,0x45,0x6e, 0x1,0x45,0x6f, + 0x1,0x45,0x68, 0x3,0x21,0x72, 0x3,0x21,0x70, 0x2,0x21,0x45, + 0x2,0x21,0x47, 0x3,0x22,0x6f, 0x3,0x22,0x68, 0x1,0x47,0x37, + 0x2,0x21,0x6f, 0x1,0x47,0x34, 0x1,0x47,0x38, 0x2,0x21,0x79, + 0x2,0x21,0x6d, 0x1,0x47,0x35, 0x2,0x21,0x71, 0x3,0x22,0x6b, + 0x3,0x22,0x67, 0x3,0x22,0x76, 0x1,0x47,0x36, 0x3,0x22,0x6e, + 0x1,0x47,0x39, 0x4,0x22,0x2d, 0x1,0x47,0x2b, 0x2,0x21,0x70, + 0x1,0x47,0x3a, 0x2,0x21,0x74, 0x3,0x22,0x6d, 0x2,0x21,0x78, + 0x2,0x21,0x75, 0x3,0x22,0x6c, 0x3,0x22,0x74, 0x2,0x21,0x72, + 0x1,0x47,0x2c, 0x1,0x47,0x2e, 0x1,0x47,0x3b, 0x4,0x22,0x2a, + 0x1,0x47,0x30, 0x2,0x21,0x6a, 0x1,0x47,0x33, 0x1,0x47,0x31, + 0x1,0x47,0x32, 0x2,0x21,0x7a, 0x2,0x21,0x77, 0x2,0x21,0x6e, + 0x1,0x47,0x2f, 0x3,0x22,0x70, 0x3,0x22,0x77, 0x2,0x21,0x6b, + 0x1,0x47,0x2d, 0x3,0x22,0x75, 0x4,0x22,0x2e, 0x3,0x22,0x73, + 0x2,0x21,0x73, 0x2,0x21,0x76, 0x3,0x22,0x72, 0xf,0x21,0x71, + 0x2,0x21,0x6c, 0x2,0x23,0x28, 0x4,0x23,0x39, 0x1,0x49,0x24, + 0x1,0x48,0x75, 0x3,0x24,0x50, 0x3,0x24,0x48, 0x2,0x23,0x29, + 0x1,0x48,0x72, 0x3,0x24,0x4f, 0x1,0x49,0x26, 0x3,0x24,0x46, + 0x1,0x48,0x7a, 0x3,0x24,0x45, 0x1,0x48,0x79, 0x2,0x22,0x7b, + 0x1,0x48,0x7d, 0x1,0x48,0x78, 0x2,0x23,0x22, 0x2,0x23,0x2a, + 0x3,0x24,0x4e, 0x2,0x23,0x26, 0x3,0x24,0x49, 0x1,0x48,0x7b, + 0x3,0x24,0x4b, 0x3,0x24,0x43, 0x1,0x48,0x7e, 0x1,0x48,0x6f, + 0x1,0x49,0x29, 0x2,0x22,0x7d, 0x3,0x24,0x44, 0x3,0x24,0x4c, + 0x2,0x25,0x3d, 0x1,0x48,0x6d, 0x1,0x49,0x25, 0x1,0x48,0x6e, + 0x1,0x48,0x76, 0x1,0x48,0x77, 0x2,0x23,0x24, 0x2,0x22,0x7e, + 0x1,0x48,0x7c, 0x1,0x48,0x74, 0x2,0x22,0x7a, 0x1,0x48,0x70, + 0x2,0x23,0x27, 0x1,0x49,0x27, 0x1,0x49,0x2a, 0x1,0x48,0x73, + 0x1,0x49,0x22, 0x1,0x49,0x28, 0x1,0x48,0x71, 0x2,0x23,0x25, + 0x1,0x49,0x23, 0x2,0x23,0x2b, 0x2,0x22,0x7c, 0x1,0x49,0x21, + 0x2,0x23,0x21, 0x3,0x64,0x48, 0x2,0x23,0x23, 0x3,0x64,0x49, + 0x1,0x4b,0x79, 0x2,0x25,0x3f, 0x2,0x25,0x4b, 0x1,0x4b,0x71, + 0x3,0x27,0x47, 0x2,0x25,0x4c, 0x1,0x4b,0x6c, 0x1,0x4b,0x76, + 0x4,0x25,0x3e, 0x3,0x27,0x4f, 0x1,0x4b,0x6f, 0x2,0x25,0x39, + 0x1,0x4b,0x77, 0x2,0x25,0x38, 0x2,0x25,0x3c, 0x2,0x25,0x43, + 0x2,0x25,0x41, 0x1,0x4c,0x21, 0x1,0x4b,0x7a, 0x2,0x25,0x33, + 0x2,0x25,0x35, 0x1,0x4b,0x7c, 0x1,0x4b,0x70, 0x2,0x25,0x36, + 0x2,0x25,0x42, 0x2,0x25,0x49, 0x1,0x4b,0x75, 0x2,0x25,0x3b, + 0x2,0x25,0x34, 0x1,0x4b,0x74, 0x2,0x25,0x37, 0x1,0x4b,0x78, + 0x2,0x25,0x3a, 0x3,0x27,0x44, 0x1,0x4b,0x73, 0x3,0x27,0x51, + 0x1,0x4b,0x6e, 0x3,0x27,0x48, 0x1,0x4b,0x7d, 0x2,0x25,0x44, + 0x1,0x4b,0x7e, 0x2,0x25,0x48, 0x3,0x27,0x43, 0x2,0x25,0x46, + 0x2,0x25,0x4a, 0x1,0x4b,0x7b, 0x2,0x25,0x3e, 0x2,0x25,0x32, + 0x4,0x25,0x36, 0x2,0x25,0x40, 0x1,0x4b,0x72, 0x2,0x25,0x45, + 0x1,0x4b,0x6d, 0x2,0x25,0x47, 0x3,0x27,0x4c, 0x3,0x27,0x49, + 0x3,0x27,0x4b, 0x3,0x27,0x4a, 0x3,0x27,0x4d, 0xf,0x25,0x44, + 0x1,0x4f,0x78, 0x1,0x4f,0x6c, 0x3,0x2b,0x2d, 0x3,0x2b,0x2e, + 0x2,0x29,0x22, 0x2,0x29,0x2a, 0x3,0x2b,0x36, 0x1,0x4f,0x6b, + 0x1,0x4f,0x73, 0x1,0x50,0x21, 0x3,0x2b,0x2c, 0x2,0x29,0x30, + 0x2,0x29,0x2e, 0x2,0x29,0x29, 0x4,0x28,0x38, 0x4,0x28,0x3e, + 0x3,0x2b,0x2b, 0x1,0x4f,0x6d, 0x2,0x29,0x2f, 0x2,0x29,0x25, + 0x1,0x4f,0x7b, 0x1,0x4f,0x72, 0x1,0x4f,0x7a, 0x2,0x28,0x7e, + 0x3,0x2b,0x32, 0x2,0x29,0x2c, 0x3,0x2b,0x2f, 0x2,0x29,0x23, + 0x1,0x4f,0x76, 0x2,0x29,0x24, 0x3,0x2b,0x33, 0x2,0x28,0x7d, + 0x1,0x4f,0x7d, 0x1,0x4f,0x70, 0x1,0x4f,0x79, 0x1,0x4f,0x6f, + 0x3,0x2b,0x28, 0x2,0x29,0x21, 0x2,0x29,0x26, 0x3,0x2b,0x29, + 0x2,0x29,0x2d, 0x1,0x4f,0x77, 0x1,0x4f,0x74, 0x2,0x29,0x28, + 0x1,0x4f,0x7c, 0x2,0x29,0x2b, 0x2,0x29,0x27, 0x1,0x4f,0x71, + 0x1,0x4f,0x7e, 0x1,0x4f,0x75, 0x1,0x4f,0x6e, 0x1,0x4f,0x6a, + 0x4,0x28,0x3f, 0x3,0x2b,0x35, 0xf,0x29,0x2d, 0x3,0x2b,0x34, + 0x3,0x64,0x4a, 0x4,0x28,0x3d, 0x2,0x29,0x31, 0x1,0x54,0x3a, + 0x1,0x54,0x24, 0x3,0x2f,0x48, 0x1,0x54,0x34, 0x3,0x2f,0x4d, + 0x1,0x54,0x39, 0x2,0x2d,0x71, 0x2,0x2d,0x70, 0x2,0x2d,0x75, + 0x2,0x2d,0x76, 0x1,0x54,0x27, 0x3,0x2f,0x44, 0x1,0x54,0x30, + 0x3,0x2f,0x58, 0x3,0x2f,0x4c, 0x3,0x2f,0x56, 0x1,0x54,0x3d, + 0x3,0x2f,0x46, 0x1,0x54,0x31, 0x4,0x2b,0x62, 0x3,0x2f,0x4b, + 0x3,0x2f,0x49, 0x3,0x2f,0x47, 0x2,0x2d,0x6a, 0x1,0x54,0x2a, + 0x2,0x2d,0x6b, 0x3,0x2f,0x4f, 0x1,0x54,0x3f, 0x4,0x2b,0x64, + 0x1,0x54,0x36, 0x1,0x54,0x21, 0x1,0x54,0x22, 0x2,0x2d,0x7e, + 0x1,0x59,0x24, 0x3,0x2f,0x53, 0x1,0x54,0x2f, 0x1,0x54,0x2e, + 0x2,0x2d,0x6c, 0x1,0x54,0x32, 0x2,0x33,0x5e, 0x1,0x54,0x29, + 0x2,0x2d,0x77, 0x1,0x54,0x38, 0x1,0x54,0x37, 0x1,0x54,0x2d, + 0x2,0x2d,0x6f, 0x2,0x2d,0x78, 0x3,0x2f,0x45, 0x2,0x2d,0x69, + 0x1,0x54,0x2c, 0x2,0x2d,0x79, 0x1,0x54,0x35, 0x2,0x2d,0x6d, + 0x1,0x54,0x23, 0x3,0x2f,0x4e, 0x1,0x54,0x26, 0x1,0x54,0x25, + 0x2,0x2d,0x7a, 0x1,0x54,0x33, 0x1,0x54,0x28, 0x1,0x54,0x3c, + 0x1,0x54,0x3e, 0x2,0x2d,0x74, 0x1,0x54,0x3b, 0x3,0x2f,0x51, + 0x2,0x2d,0x7c, 0x2,0x2d,0x6e, 0x2,0x2d,0x7d, 0x3,0x2f,0x43, + 0x2,0x2d,0x72, 0x4,0x2b,0x61, 0x2,0x2d,0x7b, 0x3,0x2f,0x50, + 0x2,0x2d,0x73, 0x3,0x2f,0x54, 0x3,0x2f,0x55, 0x1,0x54,0x2b, + 0x3,0x64,0x4b, 0x2,0x33,0x66, 0x2,0x33,0x5a, 0x3,0x34,0x3c, + 0x1,0x58,0x76, 0x3,0x34,0x3f, 0x2,0x33,0x5f, 0x2,0x33,0x65, + 0x1,0x58,0x75, 0x2,0x33,0x58, 0x1,0x58,0x79, 0x2,0x33,0x5c, + 0x2,0x33,0x55, 0x1,0x58,0x77, 0x2,0x33,0x59, 0x1,0x58,0x7c, + 0x1,0x59,0x23, 0x3,0x34,0x44, 0x2,0x33,0x6a, 0x3,0x34,0x41, + 0x2,0x33,0x54, 0x3,0x34,0x42, 0x1,0x58,0x7d, 0x3,0x2f,0x57, + 0x2,0x33,0x69, 0x3,0x34,0x47, 0x3,0x34,0x3d, 0x1,0x58,0x78, + 0x2,0x33,0x5b, 0x1,0x58,0x74, 0x2,0x33,0x56, 0x2,0x33,0x52, + 0x2,0x33,0x60, 0x2,0x33,0x53, 0x2,0x33,0x51, 0x2,0x33,0x5d, + 0x2,0x33,0x63, 0x2,0x33,0x64, 0x1,0x58,0x7a, 0x3,0x34,0x40, + 0x4,0x30,0x47, 0x2,0x3a,0x3f, 0x2,0x33,0x61, 0x2,0x33,0x50, + 0x2,0x33,0x62, 0x3,0x34,0x4b, 0x1,0x59,0x26, 0x2,0x33,0x67, + 0x1,0x59,0x25, 0x2,0x33,0x4f, 0x3,0x34,0x43, 0x2,0x33,0x57, + 0x2,0x33,0x68, 0x1,0x59,0x21, 0x1,0x58,0x7e, 0x1,0x58,0x7b, + 0x1,0x59,0x22, 0x3,0x34,0x4c, 0x3,0x34,0x4a, 0x1,0x58,0x72, + 0x3,0x34,0x45, 0x3,0x34,0x46, 0x1,0x58,0x73, 0x1,0x5e,0x2e, + 0x3,0x39,0x75, 0x2,0x3a,0x42, 0x2,0x3a,0x3b, 0x4,0x36,0x34, + 0x1,0x5e,0x2b, 0x4,0x36,0x33, 0x2,0x3a,0x43, 0x3,0x39,0x71, + 0x3,0x39,0x72, 0x4,0x36,0x36, 0x2,0x3a,0x39, 0x2,0x3a,0x3c, + 0x1,0x5e,0x2a, 0x2,0x3a,0x3d, 0x3,0x39,0x6f, 0x4,0x36,0x31, + 0x1,0x5e,0x2d, 0x2,0x3a,0x41, 0x4,0x36,0x3c, 0x2,0x3a,0x37, + 0x2,0x3a,0x36, 0x1,0x5e,0x2f, 0x3,0x39,0x70, 0x1,0x5e,0x30, + 0x1,0x5e,0x2c, 0x1,0x5e,0x31, 0x2,0x3a,0x35, 0x2,0x3a,0x40, + 0x2,0x3a,0x3e, 0x2,0x3a,0x38, 0x4,0x36,0x39, 0x4,0x36,0x30, + 0x4,0x36,0x3a, 0x1,0x5e,0x29, 0x2,0x3a,0x3a, 0x3,0x64,0x4d, + 0x3,0x40,0x39, 0x3,0x40,0x3c, 0x1,0x63,0x31, 0x1,0x63,0x2b, + 0x2,0x41,0x5c, 0x1,0x63,0x34, 0x2,0x41,0x62, 0x2,0x41,0x65, + 0x1,0x63,0x2d, 0x1,0x63,0x2e, 0x2,0x41,0x5f, 0x1,0x63,0x2c, + 0x2,0x41,0x68, 0x1,0x63,0x32, 0x2,0x41,0x69, 0x3,0x40,0x3a, + 0x2,0x41,0x64, 0x1,0x63,0x33, 0x3,0x40,0x37, 0x2,0x41,0x59, + 0x1,0x63,0x30, 0x2,0x41,0x5a, 0x4,0x3c,0x29, 0x2,0x41,0x63, + 0x2,0x41,0x61, 0x3,0x40,0x3d, 0x2,0x41,0x5d, 0x1,0x63,0x2f, + 0x2,0x41,0x5b, 0x1,0x63,0x35, 0x2,0x41,0x60, 0x2,0x41,0x67, + 0x2,0x41,0x5e, 0x2,0x41,0x66, 0x3,0x40,0x36, 0x3,0x40,0x3e, + 0x1,0x67,0x7c, 0x1,0x67,0x79, 0x3,0x45,0x6b, 0x1,0x67,0x7a, + 0x4,0x42,0x2d, 0x2,0x49,0x21, 0x2,0x48,0x77, 0x1,0x67,0x78, + 0x1,0x67,0x75, 0x2,0x48,0x78, 0x3,0x45,0x6e, 0x3,0x45,0x6c, + 0x1,0x67,0x77, 0x2,0x48,0x7b, 0x3,0x45,0x6d, 0x2,0x48,0x7d, + 0x3,0x45,0x76, 0x4,0x42,0x35, 0x2,0x49,0x26, 0x3,0x45,0x70, + 0x3,0x45,0x75, 0x2,0x49,0x25, 0x2,0x48,0x7e, 0x1,0x67,0x74, + 0x2,0x48,0x76, 0x1,0x67,0x72, 0x2,0x48,0x79, 0x1,0x67,0x7d, + 0x2,0x48,0x7c, 0x3,0x45,0x71, 0x2,0x49,0x22, 0x1,0x67,0x76, + 0x1,0x67,0x73, 0x2,0x49,0x24, 0x2,0x49,0x23, 0x1,0x67,0x7b, + 0x2,0x48,0x7a, 0x3,0x45,0x74, 0x1,0x6c,0x23, 0x2,0x4f,0x54, + 0x3,0x4b,0x29, 0x2,0x4f,0x51, 0x1,0x6c,0x24, 0x4,0x48,0x79, + 0x1,0x6c,0x22, 0x3,0x4b,0x2b, 0x2,0x4f,0x58, 0x2,0x4f,0x55, + 0x2,0x4f,0x4e, 0x1,0x6c,0x21, 0x3,0x4b,0x2d, 0x1,0x6c,0x25, + 0x2,0x4f,0x4f, 0x1,0x6b,0x7e, 0x1,0x6c,0x28, 0x2,0x4f,0x52, + 0x2,0x4f,0x53, 0x1,0x6c,0x26, 0x1,0x6c,0x27, 0x2,0x4f,0x59, + 0x2,0x4f,0x56, 0x2,0x4f,0x57, 0x3,0x4b,0x2c, 0x3,0x4b,0x27, + 0x3,0x64,0x4e, 0x1,0x70,0x33, 0x2,0x56,0x43, 0x1,0x70,0x30, + 0x2,0x56,0x40, 0x1,0x70,0x32, 0x1,0x70,0x34, 0x3,0x50,0x31, + 0x2,0x56,0x41, 0x1,0x70,0x31, 0x4,0x4f,0x5a, 0x2,0x56,0x42, + 0x3,0x50,0x35, 0x2,0x56,0x3f, 0x3,0x50,0x30, 0x3,0x50,0x34, + 0x1,0x73,0x41, 0x2,0x5c,0x49, 0x1,0x73,0x42, 0x2,0x5c,0x47, + 0x4,0x55,0x65, 0x2,0x5c,0x48, 0x2,0x5c,0x46, 0x2,0x5c,0x45, + 0x3,0x54,0x41, 0x3,0x54,0x40, 0x2,0x5c,0x4a, 0x1,0x73,0x40, + 0x3,0x50,0x33, 0x4,0x55,0x69, 0x2,0x61,0x44, 0x2,0x61,0x45, + 0x3,0x57,0x52, 0x2,0x4f,0x50, 0x2,0x61,0x43, 0x1,0x73,0x43, + 0x1,0x78,0x2b, 0x2,0x65,0x37, 0x2,0x65,0x38, 0x3,0x5c,0x32, + 0x1,0x7a,0x62, 0x1,0x7a,0x63, 0x2,0x6b,0x4f, 0x2,0x6b,0x4e, + 0x1,0x7b,0x58, 0x1,0x7b,0x57, 0x2,0x6e,0x7d, 0x3,0x60,0x6f, + 0x1,0x44,0x2a, 0x1,0x44,0x42, 0x1,0x44,0x78, 0x4,0x21,0x3d, + 0x1,0x44,0x77, 0x1,0x45,0x73, 0x1,0x45,0x72, 0x1,0x47,0x3e, + 0x1,0x47,0x3d, 0x1,0x47,0x3f, 0x1,0x47,0x3c, 0x3,0x22,0x78, + 0x1,0x49,0x2c, 0x1,0x49,0x2b, 0x1,0x49,0x2d, 0x3,0x24,0x54, + 0x4,0x23,0x3b, 0x3,0x24,0x53, 0x3,0x24,0x51, 0x1,0x4c,0x23, + 0x4,0x25,0x3f, 0x1,0x4c,0x22, 0x1,0x4c,0x24, 0x3,0x27,0x52, + 0x1,0x50,0x22, 0x4,0x28,0x40, 0x1,0x22,0x79, 0x2,0x2e,0x21, + 0x1,0x22,0x7a, 0x1,0x59,0x27, 0x1,0x22,0x7c, 0x1,0x22,0x7b, + 0x2,0x3a,0x44, 0x3,0x39,0x76, 0x1,0x22,0x7d, 0x1,0x67,0x7e, + 0x1,0x22,0x7e, 0x3,0x5e,0x25, 0x1,0x44,0x2b, 0x3,0x21,0x34, + 0x1,0x44,0x79, 0x1,0x47,0x40, 0x1,0x4c,0x25, 0x3,0x2b,0x37, + 0x1,0x44,0x2c, 0x1,0x44,0x7c, 0x1,0x44,0x7a, 0x1,0x44,0x7b, + 0x1,0x47,0x41, 0x3,0x22,0x7a, 0x4,0x22,0x34, 0x1,0x49,0x2e, + 0x1,0x4c,0x27, 0x1,0x4c,0x26, 0x1,0x4c,0x28, 0x3,0x2e,0x7b, + 0x1,0x54,0x40, 0x3,0x40,0x3f, 0x3,0x64,0x53, 0x1,0x70,0x35, + 0x3,0x21,0x27, 0x4,0x21,0x3e, 0x3,0x21,0x4d, 0x3,0x21,0x48, + 0x3,0x21,0x4e, 0x2,0x21,0x2e, 0x4,0x21,0x52, 0x1,0x45,0x74, + 0x1,0x45,0x75, 0x3,0x21,0x78, 0x3,0x21,0x79, 0x1,0x47,0x42, + 0x4,0x22,0x36, 0x2,0x23,0x2c, 0x3,0x27,0x55, 0x1,0x50,0x24, + 0x1,0x50,0x23, 0x2,0x2e,0x23, 0x2,0x2e,0x22, 0x1,0x59,0x28, + 0x3,0x21,0x28, 0x1,0x44,0x7d, 0x2,0x21,0x35, 0x3,0x21,0x7a, + 0x3,0x24,0x57, 0x2,0x25,0x4d, 0x3,0x2b,0x39, 0x1,0x50,0x25, + 0x3,0x2f,0x5b, 0x1,0x54,0x43, 0x3,0x2f,0x59, 0x1,0x54,0x41, + 0x1,0x54,0x42, 0x3,0x2f,0x5a, 0x3,0x34,0x4d, 0xf,0x46,0x5c, + 0x1,0x70,0x36, 0x1,0x27,0x2f, 0x1,0x45,0x76, 0x4,0x21,0x5e, + 0x1,0x47,0x43, 0x2,0x21,0x7b, 0x3,0x22,0x7e, 0x3,0x22,0x7d, + 0x3,0x22,0x7c, 0x3,0x24,0x59, 0x1,0x49,0x2f, 0x1,0x49,0x30, + 0x3,0x24,0x5a, 0x2,0x23,0x2d, 0x4,0x23,0x3d, 0x2,0x25,0x4e, + 0x1,0x4c,0x29, 0x2,0x25,0x4f, 0x4,0x25,0x40, 0x4,0x25,0x43, + 0x3,0x2b,0x3b, 0x3,0x2b,0x3d, 0x3,0x2b,0x3e, 0x2,0x2e,0x25, + 0x2,0x2e,0x26, 0x1,0x54,0x46, 0x3,0x2f,0x5e, 0x2,0x2e,0x27, + 0x3,0x2f,0x5f, 0x2,0x2e,0x24, 0x1,0x54,0x47, 0x1,0x54,0x45, + 0x1,0x54,0x44, 0x2,0x2e,0x28, 0x3,0x34,0x4f, 0x2,0x33,0x6b, + 0x3,0x34,0x4e, 0x3,0x39,0x7d, 0x3,0x39,0x7a, 0x2,0x3a,0x45, + 0x4,0x36,0x3f, 0x3,0x39,0x7e, 0x2,0x41,0x6a, 0x2,0x49,0x27, + 0x3,0x4b,0x2f, 0x3,0x4b,0x2e, 0x3,0x4b,0x30, 0x1,0x6c,0x29, + 0x1,0x70,0x37, 0x2,0x56,0x44, 0x3,0x54,0x42, 0x1,0x44,0x2d, + 0x1,0x44,0x3b, 0x3,0x21,0x2f, 0x3,0x21,0x35, 0x3,0x21,0x51, + 0x3,0x21,0x7b, 0x3,0x23,0x22, 0xf,0x22,0x59, 0x3,0x24,0x5b, + 0x3,0x27,0x59, 0x4,0x25,0x45, 0x1,0x59,0x29, 0x1,0x5e,0x33, + 0x6,0x46,0x65, 0x1,0x68,0x21, 0x3,0x45,0x7a, 0x2,0x21,0x23, + 0x1,0x44,0x7e, 0x4,0x21,0x60, 0x1,0x45,0x79, 0x1,0x45,0x77, + 0x1,0x45,0x78, 0x1,0x4c,0x2a, 0x3,0x27,0x5a, 0x1,0x44,0x2e, + 0x1,0x44,0x2f, 0x4,0x21,0x2a, 0x1,0x44,0x43, 0x3,0x21,0x36, + 0x3,0x21,0x52, 0x1,0x45,0x21, 0x1,0x45,0x22, 0x1,0x45,0x23, + 0x2,0x21,0x4c, 0x1,0x45,0x7a, 0x3,0x21,0x7d, 0x2,0x21,0x4b, + 0x1,0x47,0x47, 0x3,0x23,0x25, 0x2,0x21,0x7d, 0x1,0x47,0x45, + 0x1,0x47,0x46, 0x2,0x21,0x7c, 0x3,0x23,0x24, 0x3,0x23,0x26, + 0x1,0x47,0x48, 0x1,0x47,0x44, 0x3,0x23,0x27, 0x2,0x23,0x2e, + 0x1,0x4f,0x4f, 0x2,0x23,0x2f, 0x3,0x24,0x5f, 0x3,0x24,0x61, + 0x2,0x23,0x30, 0x4,0x23,0x40, 0x3,0x24,0x5c, 0x1,0x49,0x32, + 0x1,0x49,0x31, 0x3,0x24,0x5e, 0x3,0x24,0x5d, 0x1,0x49,0x35, + 0x1,0x49,0x33, 0x1,0x49,0x34, 0x3,0x24,0x60, 0x1,0x4c,0x30, + 0x3,0x27,0x5b, 0x1,0x4c,0x2f, 0x2,0x25,0x54, 0x2,0x25,0x51, + 0x2,0x25,0x52, 0x3,0x27,0x5e, 0x2,0x25,0x50, 0x1,0x4c,0x31, + 0x1,0x4c,0x2d, 0x1,0x4c,0x2c, 0x3,0x27,0x5f, 0x1,0x4c,0x2e, + 0x1,0x4c,0x2b, 0x3,0x27,0x5d, 0x4,0x25,0x4e, 0x3,0x64,0x4f, + 0x1,0x4c,0x32, 0x1,0x50,0x27, 0x2,0x29,0x32, 0x3,0x2b,0x3f, + 0x2,0x25,0x53, 0x1,0x50,0x2c, 0x3,0x2b,0x40, 0x2,0x29,0x33, + 0x1,0x50,0x28, 0x1,0x50,0x2b, 0x1,0x50,0x2a, 0x1,0x50,0x29, + 0x1,0x50,0x26, 0x3,0x2b,0x43, 0x2,0x2e,0x2b, 0x3,0x2f,0x68, + 0x1,0x54,0x4a, 0x2,0x2e,0x2e, 0x1,0x54,0x48, 0x3,0x2f,0x65, + 0x4,0x2b,0x6e, 0x3,0x2f,0x62, 0x2,0x2e,0x2a, 0x1,0x54,0x4b, + 0x1,0x54,0x49, 0x1,0x54,0x4c, 0x2,0x2e,0x2c, 0x2,0x2e,0x2d, + 0x3,0x2f,0x60, 0x2,0x2e,0x29, 0x2,0x2e,0x2f, 0x3,0x2f,0x66, + 0x3,0x2f,0x61, 0x3,0x2f,0x63, 0xf,0x2e,0x2d, 0x3,0x2f,0x64, + 0x3,0x34,0x50, 0x1,0x5e,0x37, 0x1,0x59,0x2a, 0x2,0x33,0x6c, + 0x2,0x33,0x6e, 0x2,0x33,0x6d, 0x2,0x33,0x6f, 0x1,0x59,0x2b, + 0x3,0x3a,0x23, 0x1,0x5e,0x34, 0x3,0x3a,0x21, 0x1,0x5e,0x35, + 0x1,0x5e,0x36, 0x3,0x34,0x51, 0x1,0x63,0x37, 0x2,0x41,0x6c, + 0x3,0x40,0x41, 0x2,0x41,0x6b, 0x2,0x41,0x6d, 0x2,0x41,0x6e, + 0x1,0x63,0x38, 0x3,0x40,0x40, 0x1,0x63,0x36, 0x2,0x49,0x28, + 0x2,0x49,0x29, 0x1,0x68,0x23, 0x1,0x68,0x22, 0x2,0x4c,0x61, + 0x4,0x49,0x25, 0x3,0x4b,0x31, 0x1,0x6c,0x2a, 0x1,0x6c,0x2b, + 0x1,0x6c,0x2c, 0x1,0x6c,0x2e, 0x2,0x4f,0x5a, 0x2,0x4f,0x5b, + 0x1,0x6c,0x2d, 0x3,0x4b,0x32, 0x3,0x50,0x36, 0x1,0x70,0x38, + 0x4,0x4f,0x64, 0x1,0x70,0x39, 0x3,0x50,0x37, 0x4,0x55,0x6d, + 0x2,0x65,0x39, 0x2,0x6b,0x51, 0x2,0x6b,0x50, 0x2,0x6e,0x7e, + 0x3,0x60,0x2c, 0x1,0x44,0x30, 0x3,0x21,0x37, 0x3,0x21,0x54, + 0x3,0x21,0x53, 0x1,0x45,0x7c, 0x1,0x45,0x7b, 0x1,0x47,0x49, + 0x4,0x22,0x42, 0x4,0x22,0x3f, 0x2,0x21,0x7e, 0x4,0x22,0x41, + 0x3,0x23,0x28, 0x1,0x49,0x37, 0x1,0x49,0x38, 0x1,0x49,0x36, + 0x1,0x49,0x39, 0x2,0x23,0x31, 0x2,0x23,0x32, 0x4,0x23,0x46, + 0x4,0x23,0x47, 0x4,0x23,0x48, 0x3,0x24,0x63, 0x3,0x24,0x62, + 0x3,0x27,0x61, 0x5,0x25,0x3a, 0x5,0x25,0x37, 0x5,0x25,0x38, + 0x3,0x27,0x60, 0x5,0x25,0x3b, 0x1,0x4c,0x34, 0x2,0x25,0x55, + 0x4,0x25,0x50, 0x1,0x4c,0x33, 0x3,0x27,0x62, 0x2,0x29,0x34, + 0x1,0x50,0x30, 0x2,0x29,0x35, 0x1,0x50,0x2f, 0x3,0x2b,0x48, + 0x3,0x2b,0x46, 0x4,0x28,0x49, 0x1,0x50,0x2d, 0x4,0x28,0x4b, + 0x1,0x50,0x2e, 0x3,0x2b,0x47, 0x3,0x2f,0x6f, 0x2,0x2e,0x30, + 0x3,0x2f,0x6c, 0x3,0x2f,0x6a, 0x3,0x2f,0x6d, 0x3,0x2f,0x6e, + 0x1,0x59,0x2c, 0x2,0x33,0x71, 0x3,0x34,0x52, 0x1,0x59,0x2f, + 0x2,0x33,0x70, 0x1,0x5b,0x2b, 0x1,0x59,0x2e, 0x1,0x59,0x2d, + 0x1,0x5e,0x3a, 0x5,0x36,0x6a, 0x1,0x5e,0x39, 0x1,0x5e,0x38, + 0x1,0x63,0x39, 0x3,0x40,0x45, 0x3,0x40,0x44, 0x1,0x63,0x3c, + 0x1,0x63,0x3d, 0x1,0x63,0x3b, 0x4,0x3c,0x3c, 0x1,0x63,0x3a, + 0x3,0x40,0x46, 0x5,0x44,0x67, 0x2,0x49,0x2a, 0x3,0x46,0x21, + 0x2,0x49,0x2b, 0x5,0x44,0x63, 0x3,0x45,0x7e, 0x3,0x4b,0x33, + 0x2,0x4f,0x5d, 0x1,0x6c,0x2f, 0x2,0x4f,0x5c, 0x3,0x4d,0x2c, + 0x1,0x70,0x3a, 0x2,0x5c,0x4b, 0x1,0x73,0x44, 0x5,0x53,0x62, + 0x2,0x65,0x3a, 0x1,0x79,0x61, 0x1,0x27,0x34, 0x1,0x44,0x44, + 0x1,0x45,0x24, 0x2,0x21,0x36, 0x3,0x21,0x55, 0x1,0x45,0x25, + 0x1,0x45,0x26, 0x3,0x21,0x56, 0xf,0x21,0x30, 0x3,0x22,0x23, + 0x3,0x22,0x22, 0x1,0x45,0x7d, 0x1,0x45,0x7e, 0x3,0x22,0x24, + 0x1,0x47,0x4a, 0x2,0x23,0x33, 0x2,0x25,0x56, 0x2,0x25,0x57, + 0x4,0x25,0x51, 0x1,0x50,0x31, 0x2,0x2e,0x31, 0x1,0x59,0x31, + 0x1,0x59,0x30, 0x2,0x3a,0x47, 0x2,0x3a,0x46, 0x6,0x50,0x74, + 0x3,0x50,0x38, 0x1,0x44,0x31, 0x1,0x45,0x27, 0x1,0x46,0x21, + 0x4,0x30,0x5e, 0x1,0x59,0x32, 0x2,0x21,0x24, 0x4,0x21,0x65, + 0x2,0x21,0x4d, 0x1,0x46,0x22, 0x3,0x22,0x26, 0x2,0x22,0x22, + 0x1,0x47,0x4c, 0x1,0x47,0x4b, 0x2,0x22,0x21, 0x1,0x49,0x3a, + 0x3,0x64,0x50, 0x3,0x24,0x65, 0x3,0x2b,0x49, 0x4,0x28,0x4e, + 0x4,0x28,0x50, 0x1,0x54,0x4d, 0x4,0x2b,0x78, 0x4,0x30,0x5f, + 0x2,0x33,0x72, 0x1,0x63,0x3e, 0x2,0x49,0x2c, 0x1,0x68,0x24, + 0x3,0x46,0x23, 0x3,0x4b,0x34, 0x2,0x56,0x45, 0x3,0x54,0x44, + 0x3,0x5c,0x34, 0x2,0x68,0x6a, 0x3,0x21,0x29, 0x1,0x45,0x28, + 0x3,0x21,0x57, 0x3,0x24,0x66, 0x2,0x25,0x58, 0x2,0x29,0x36, + 0x1,0x59,0x35, 0x1,0x59,0x33, 0x1,0x59,0x34, 0x1,0x44,0x32, + 0x4,0x21,0x30, 0x1,0x44,0x45, 0x1,0x24,0x3f, 0x1,0x45,0x2b, + 0x3,0x21,0x59, 0x1,0x45,0x2a, 0x1,0x45,0x29, 0x1,0x46,0x25, + 0x1,0x46,0x24, 0x3,0x23,0x2a, 0x2,0x21,0x4e, 0x2,0x22,0x23, + 0xf,0x22,0x2c, 0x3,0x23,0x2b, 0x3,0x23,0x2d, 0x1,0x4c,0x38, + 0x1,0x4c,0x35, 0x1,0x4c,0x37, 0x1,0x4c,0x36, 0x3,0x27,0x63, + 0x1,0x50,0x32, 0x3,0x2b,0x4a, 0x4,0x30,0x60, 0x1,0x5e,0x3b, + 0x4,0x66,0x30, 0x1,0x44,0x33, 0x3,0x21,0x5a, 0x1,0x45,0x2c, + 0x3,0x22,0x27, 0x1,0x46,0x27, 0x1,0x46,0x26, 0x2,0x23,0x34, + 0x4,0x23,0x4d, 0x3,0x64,0x51, 0x1,0x4c,0x39, 0x3,0x2a,0x5c, + 0x4,0x30,0x64, 0x3,0x21,0x2a, 0x4,0x21,0x31, 0x2,0x21,0x37, + 0x3,0x22,0x28, 0x1,0x46,0x29, 0x1,0x46,0x28, 0x1,0x47,0x4d, + 0x1,0x47,0x4e, 0x2,0x23,0x35, 0x1,0x49,0x3b, 0x3,0x24,0x67, + 0x1,0x49,0x3c, 0x3,0x27,0x65, 0x1,0x4c,0x3a, 0x1,0x4c,0x3b, + 0x1,0x4c,0x3c, 0x3,0x27,0x66, 0x1,0x50,0x33, 0x2,0x29,0x37, + 0x3,0x2b,0x4b, 0x4,0x30,0x65, 0x1,0x54,0x4e, 0x3,0x40,0x47, + 0x2,0x21,0x25, 0x4,0x21,0x44, 0x1,0x45,0x2d, 0x3,0x21,0x5b, + 0x4,0x21,0x67, 0x4,0x21,0x66, 0x3,0x22,0x29, 0x2,0x22,0x24, + 0x3,0x23,0x2f, 0x2,0x23,0x36, 0x2,0x23,0x37, 0x2,0x25,0x59, + 0x3,0x27,0x67, 0x2,0x25,0x5a, 0x2,0x29,0x39, 0x2,0x29,0x38, + 0x2,0x29,0x3b, 0x2,0x29,0x3a, 0x1,0x50,0x34, 0x3,0x64,0x52, + 0x2,0x33,0x73, 0x1,0x54,0x50, 0x2,0x2e,0x32, 0x1,0x54,0x4f, + 0x3,0x34,0x54, 0x4,0x30,0x68, 0x2,0x3a,0x48, 0x1,0x5e,0x3c, + 0x3,0x3a,0x28, 0x2,0x3a,0x49, 0x3,0x3a,0x27, 0x3,0x40,0x4a, + 0x3,0x40,0x49, 0x3,0x40,0x48, 0x2,0x49,0x2d, 0x1,0x68,0x25, + 0x3,0x46,0x25, 0x4,0x3c,0x40, 0x3,0x46,0x26, 0x3,0x4b,0x35, + 0x1,0x6c,0x30, 0x3,0x54,0x45, 0x2,0x65,0x3b, 0xf,0x6d,0x2e, + 0x3,0x21,0x2b, 0x3,0x21,0x5c, 0x4,0x21,0x45, 0x2,0x21,0x38, + 0x3,0x22,0x2a, 0x1,0x46,0x2a, 0x4,0x22,0x48, 0x3,0x23,0x31, + 0x4,0x25,0x59, 0x3,0x27,0x69, 0x3,0x27,0x6a, 0x1,0x59,0x36, + 0x3,0x34,0x55, 0x3,0x3a,0x29, 0x1,0x44,0x34, 0x1,0x44,0x46, + 0x1,0x45,0x2f, 0x1,0x45,0x2e, 0x3,0x21,0x5e, 0x1,0x45,0x30, + 0x3,0x21,0x60, 0x4,0x21,0x69, 0x3,0x22,0x2b, 0x3,0x23,0x33, + 0x4,0x23,0x4f, 0x1,0x4c,0x3e, 0x3,0x27,0x6b, 0x1,0x4c,0x3d, + 0x1,0x4c,0x3f, 0x3,0x2b,0x50, 0x3,0x2b,0x4f, 0x1,0x50,0x35, + 0x3,0x2b,0x4e, 0x3,0x2b,0x4d, 0x6,0x35,0x78, 0x1,0x54,0x51, + 0x3,0x40,0x4b, 0x2,0x56,0x46, 0x1,0x76,0x3b, 0x1,0x44,0x47, + 0x1,0x46,0x2c, 0x1,0x46,0x3b, 0x1,0x46,0x36, 0x4,0x21,0x6c, + 0x1,0x46,0x31, 0x1,0x46,0x30, 0x1,0x46,0x37, 0x1,0x46,0x35, + 0x1,0x46,0x2e, 0x1,0x46,0x3c, 0x1,0x46,0x2f, 0x1,0x46,0x2b, + 0x1,0x46,0x3a, 0x1,0x46,0x39, 0x1,0x46,0x38, 0x1,0x46,0x2d, + 0x3,0x22,0x31, 0x1,0x46,0x34, 0x3,0x22,0x2d, 0x3,0x22,0x2e, + 0x1,0x46,0x33, 0x3,0x22,0x2f, 0xf,0x21,0x50, 0x1,0x46,0x3d, + 0x1,0x46,0x32, 0x4,0x21,0x6a, 0x3,0x23,0x35, 0x3,0x23,0x37, + 0x1,0x47,0x54, 0x4,0x22,0x4c, 0x1,0x47,0x5a, 0x1,0x47,0x56, + 0x3,0x23,0x39, 0x1,0x47,0x5c, 0x2,0x22,0x25, 0x1,0x47,0x59, + 0x1,0x47,0x4f, 0x1,0x47,0x52, 0x1,0x47,0x55, 0x1,0x47,0x51, + 0x1,0x47,0x58, 0x1,0x47,0x5b, 0x1,0x47,0x50, 0x1,0x47,0x53, + 0x1,0x47,0x57, 0x1,0x47,0x5d, 0x3,0x23,0x3a, 0x3,0x23,0x3b, + 0x3,0x23,0x34, 0x2,0x23,0x40, 0x2,0x23,0x3d, 0x3,0x24,0x76, + 0x1,0x49,0x49, 0x2,0x23,0x3e, 0x1,0x49,0x3d, 0x1,0x49,0x3f, + 0x1,0x49,0x57, 0x1,0x49,0x52, 0x3,0x24,0x79, 0x3,0x24,0x7e, + 0x3,0x24,0x75, 0x2,0x23,0x45, 0x2,0x23,0x3f, 0x1,0x49,0x41, + 0x1,0x49,0x43, 0x2,0x23,0x44, 0x1,0x49,0x4a, 0x2,0x23,0x3a, + 0x1,0x49,0x56, 0x1,0x49,0x58, 0x1,0x49,0x3e, 0x1,0x49,0x4f, + 0x3,0x25,0x24, 0x2,0x23,0x38, 0x1,0x49,0x55, 0x3,0x24,0x77, + 0x1,0x49,0x46, 0x3,0x24,0x7b, 0x1,0x49,0x50, 0x1,0x49,0x51, + 0x2,0x23,0x39, 0x1,0x49,0x4e, 0x1,0x49,0x4c, 0x3,0x24,0x70, + 0x1,0x49,0x4d, 0x1,0x49,0x53, 0x2,0x23,0x41, 0x1,0x49,0x40, + 0x3,0x25,0x21, 0x1,0x49,0x54, 0x2,0x23,0x43, 0x1,0x49,0x48, + 0x1,0x49,0x45, 0x3,0x24,0x73, 0x2,0x23,0x3c, 0x1,0x49,0x44, + 0x2,0x23,0x46, 0x1,0x49,0x47, 0x3,0x24,0x7c, 0x1,0x49,0x4b, + 0x3,0x24,0x78, 0x3,0x24,0x74, 0x3,0x24,0x6d, 0x1,0x49,0x42, + 0x2,0x23,0x42, 0x3,0x24,0x7d, 0x3,0x25,0x22, 0x2,0x23,0x3b, + 0x3,0x25,0x23, 0x4,0x25,0x64, 0x4,0x25,0x63, 0x3,0x27,0x6e, + 0x2,0x25,0x6b, 0x2,0x25,0x6a, 0x1,0x4c,0x51, 0x2,0x25,0x6d, + 0x2,0x25,0x6f, 0x2,0x25,0x64, 0x2,0x25,0x67, 0x2,0x25,0x6e, + 0x1,0x4c,0x52, 0x3,0x27,0x74, 0x3,0x27,0x78, 0x2,0x25,0x61, + 0x2,0x25,0x65, 0x3,0x27,0x75, 0x4,0x25,0x5f, 0x2,0x25,0x69, + 0x2,0x29,0x4a, 0x1,0x4c,0x4d, 0x2,0x29,0x4e, 0x1,0x4c,0x40, + 0x2,0x25,0x66, 0x1,0x4c,0x41, 0x1,0x4c,0x4e, 0x1,0x4c,0x47, + 0x1,0x4c,0x43, 0x3,0x27,0x71, 0x2,0x25,0x62, 0x1,0x4c,0x46, + 0x1,0x4c,0x4b, 0x1,0x4c,0x54, 0x2,0x25,0x63, 0x2,0x25,0x5c, + 0x1,0x4c,0x45, 0x2,0x25,0x5d, 0x2,0x25,0x5f, 0x4,0x25,0x60, + 0x1,0x4c,0x48, 0x3,0x27,0x6c, 0x1,0x4c,0x4a, 0x2,0x25,0x5b, + 0x2,0x25,0x60, 0x3,0x27,0x70, 0x3,0x27,0x79, 0x1,0x4c,0x53, + 0x1,0x4c,0x4f, 0x2,0x25,0x68, 0x1,0x4c,0x55, 0x3,0x27,0x73, + 0x1,0x4c,0x4c, 0x2,0x25,0x5e, 0x1,0x4c,0x49, 0x3,0x27,0x6f, + 0x3,0x27,0x77, 0x1,0x4c,0x44, 0x1,0x4c,0x42, 0x2,0x25,0x6c, + 0x1,0x4c,0x50, 0xf,0x25,0x71, 0x3,0x2b,0x5c, 0x3,0x2b,0x5d, + 0x2,0x29,0x49, 0x2,0x29,0x3d, 0x2,0x29,0x4c, 0x3,0x2b,0x57, + 0x3,0x2b,0x59, 0x2,0x29,0x3f, 0x1,0x50,0x3c, 0x1,0x50,0x4a, + 0x1,0x50,0x38, 0x1,0x50,0x49, 0x1,0x50,0x41, 0x1,0x50,0x46, + 0x1,0x50,0x36, 0x2,0x29,0x3e, 0x2,0x29,0x44, 0x1,0x50,0x45, + 0x2,0x29,0x50, 0x1,0x50,0x47, 0x3,0x2b,0x5b, 0x1,0x50,0x3d, + 0x3,0x2b,0x54, 0x3,0x2b,0x5e, 0x2,0x29,0x46, 0x2,0x29,0x43, + 0x1,0x50,0x3b, 0x3,0x2b,0x51, 0x2,0x29,0x3c, 0x1,0x50,0x48, + 0x2,0x29,0x4b, 0x1,0x50,0x40, 0x2,0x29,0x4d, 0x1,0x50,0x4b, + 0x1,0x50,0x37, 0x1,0x50,0x42, 0x1,0x50,0x3f, 0x2,0x29,0x41, + 0x1,0x50,0x43, 0x2,0x29,0x47, 0x2,0x29,0x48, 0x1,0x50,0x3e, + 0x1,0x50,0x44, 0x1,0x50,0x3a, 0x3,0x2b,0x55, 0x3,0x64,0x54, + 0x3,0x2b,0x63, 0x3,0x2b,0x61, 0x1,0x50,0x39, 0x2,0x29,0x40, + 0x3,0x2b,0x53, 0x2,0x29,0x45, 0x3,0x2b,0x58, 0x2,0x29,0x4f, + 0x2,0x2e,0x46, 0x1,0x54,0x5e, 0x2,0x2e,0x34, 0x4,0x2c,0x2d, + 0x2,0x2e,0x39, 0x1,0x54,0x57, 0x1,0x54,0x62, 0x2,0x2e,0x37, + 0x1,0x54,0x52, 0x1,0x54,0x5c, 0x1,0x54,0x61, 0x2,0x2e,0x3e, + 0x4,0x2c,0x26, 0x1,0x54,0x5d, 0x1,0x54,0x60, 0x3,0x2f,0x77, + 0x3,0x30,0x21, 0x2,0x2e,0x41, 0x1,0x54,0x58, 0x2,0x2e,0x38, + 0x3,0x2f,0x74, 0x3,0x2f,0x78, 0x3,0x30,0x22, 0x2,0x2e,0x44, + 0x2,0x2e,0x45, 0x3,0x2f,0x79, 0x1,0x54,0x5a, 0x2,0x2e,0x43, + 0x1,0x54,0x56, 0x1,0x54,0x65, 0x4,0x2c,0x29, 0x2,0x2e,0x3b, + 0x3,0x2f,0x7b, 0x1,0x54,0x54, 0x3,0x2f,0x7a, 0x2,0x2e,0x48, + 0x2,0x2e,0x3c, 0x2,0x2e,0x40, 0x1,0x54,0x59, 0x1,0x54,0x64, + 0x2,0x2e,0x3d, 0x1,0x54,0x5f, 0x2,0x2e,0x42, 0x2,0x2e,0x49, + 0x2,0x34,0x24, 0x3,0x2f,0x73, 0x2,0x2e,0x47, 0x1,0x54,0x66, + 0x1,0x54,0x53, 0x2,0x2e,0x3f, 0x2,0x2e,0x36, 0x3,0x2f,0x76, + 0x1,0x54,0x5b, 0x4,0x2c,0x28, 0x4,0x2c,0x2e, 0x2,0x2e,0x35, + 0x3,0x2f,0x7e, 0x3,0x30,0x25, 0x2,0x2e,0x3a, 0xf,0x29,0x54, + 0xf,0x2e,0x42, 0xf,0x2e,0x4a, 0x2,0x2e,0x33, 0x1,0x54,0x63, + 0x3,0x67,0x21, 0x3,0x34,0x5f, 0x2,0x33,0x7a, 0x3,0x34,0x68, + 0x1,0x59,0x49, 0x2,0x34,0x2a, 0x1,0x59,0x47, 0x1,0x59,0x44, + 0x2,0x34,0x21, 0x1,0x59,0x40, 0x2,0x34,0x25, 0x1,0x59,0x4b, + 0x2,0x33,0x79, 0x2,0x33,0x7e, 0x2,0x33,0x7d, 0x1,0x54,0x55, + 0x1,0x59,0x46, 0x2,0x34,0x28, 0x3,0x34,0x66, 0x2,0x34,0x2b, + 0x2,0x33,0x76, 0x4,0x30,0x77, 0x1,0x5e,0x4e, 0x3,0x34,0x67, + 0x2,0x34,0x2c, 0x1,0x59,0x4c, 0x4,0x30,0x72, 0x1,0x59,0x3e, + 0x1,0x59,0x3b, 0x2,0x34,0x23, 0x1,0x59,0x38, 0x4,0x30,0x74, + 0x2,0x34,0x29, 0x3,0x34,0x5b, 0x1,0x59,0x3f, 0x2,0x34,0x2d, + 0x3,0x34,0x58, 0x2,0x33,0x77, 0x2,0x34,0x27, 0x1,0x59,0x42, + 0x2,0x33,0x78, 0x2,0x33,0x7b, 0x2,0x34,0x22, 0x3,0x34,0x62, + 0x3,0x34,0x61, 0x1,0x59,0x43, 0x1,0x59,0x41, 0x1,0x59,0x4d, + 0x3,0x34,0x57, 0x3,0x3a,0x36, 0x3,0x34,0x64, 0x4,0x30,0x6b, + 0x1,0x59,0x48, 0x3,0x34,0x5e, 0x1,0x59,0x3c, 0x1,0x5a,0x76, + 0x4,0x30,0x7a, 0x1,0x59,0x3d, 0x2,0x33,0x7c, 0x1,0x59,0x4a, + 0x1,0x59,0x45, 0x2,0x34,0x26, 0x1,0x59,0x3a, 0x3,0x34,0x59, + 0x1,0x59,0x39, 0x3,0x64,0x57, 0x3,0x64,0x56, 0x3,0x67,0x22, + 0x3,0x64,0x55, 0x2,0x33,0x74, 0x2,0x33,0x75, 0x2,0x3a,0x4e, + 0x3,0x3a,0x3c, 0x1,0x5e,0x3d, 0x1,0x5e,0x40, 0x2,0x3a,0x59, + 0x1,0x5e,0x54, 0x2,0x3a,0x5c, 0x1,0x5e,0x3e, 0x2,0x3a,0x55, + 0x1,0x5e,0x44, 0x1,0x5e,0x4a, 0x1,0x61,0x43, 0x3,0x3a,0x31, + 0x3,0x3a,0x38, 0x1,0x5e,0x48, 0x2,0x3a,0x52, 0x1,0x5e,0x55, + 0x1,0x5e,0x41, 0x1,0x5e,0x49, 0x2,0x3a,0x5a, 0x2,0x41,0x7c, + 0x2,0x3a,0x5f, 0x2,0x3a,0x53, 0x4,0x36,0x5c, 0x2,0x3a,0x4a, + 0x2,0x3a,0x57, 0x2,0x3a,0x51, 0x1,0x5e,0x47, 0x2,0x3a,0x5d, + 0x3,0x3a,0x2e, 0x3,0x3a,0x2a, 0x1,0x5e,0x43, 0x1,0x5e,0x57, + 0x1,0x5e,0x50, 0x3,0x3a,0x33, 0x1,0x5e,0x45, 0x1,0x5e,0x42, + 0x3,0x3a,0x40, 0x1,0x5e,0x4d, 0x3,0x3a,0x34, 0x2,0x3a,0x5e, + 0x2,0x3a,0x50, 0x2,0x3a,0x56, 0x2,0x3a,0x58, 0x2,0x3a,0x4c, + 0x2,0x3a,0x5b, 0x1,0x5e,0x3f, 0x2,0x3a,0x4b, 0x3,0x3a,0x42, + 0x1,0x5e,0x46, 0x1,0x5e,0x56, 0x1,0x5e,0x52, 0x2,0x3a,0x4d, + 0x1,0x5e,0x4c, 0x3,0x3a,0x3b, 0xf,0x39,0x71, 0x1,0x5e,0x53, + 0x1,0x5e,0x4f, 0x1,0x5e,0x4b, 0x3,0x3a,0x2f, 0x2,0x3a,0x54, + 0x6,0x47,0x29, 0x3,0x67,0x23, 0x1,0x5e,0x51, 0x2,0x41,0x7a, + 0x2,0x41,0x76, 0x3,0x40,0x51, 0x2,0x42,0x27, 0x2,0x41,0x6f, + 0x2,0x41,0x78, 0x1,0x63,0x4c, 0x1,0x63,0x4d, 0x1,0x63,0x45, + 0x2,0x42,0x23, 0x1,0x63,0x4f, 0x2,0x41,0x74, 0x2,0x41,0x73, + 0x2,0x41,0x71, 0x2,0x42,0x25, 0x1,0x63,0x43, 0x2,0x41,0x7d, + 0x2,0x41,0x72, 0x1,0x63,0x46, 0x2,0x41,0x7b, 0x1,0x63,0x41, + 0x2,0x41,0x77, 0x2,0x41,0x7e, 0x2,0x42,0x22, 0x3,0x40,0x4e, + 0x4,0x3c,0x4b, 0x2,0x42,0x26, 0x1,0x63,0x4a, 0x2,0x41,0x70, + 0x1,0x63,0x44, 0x2,0x41,0x75, 0x3,0x3a,0x2b, 0x1,0x63,0x3f, + 0x6,0x51,0x43, 0x1,0x63,0x4b, 0x2,0x42,0x21, 0x1,0x63,0x47, + 0x1,0x63,0x48, 0x1,0x63,0x4e, 0x1,0x63,0x42, 0x1,0x23,0x21, + 0x1,0x63,0x40, 0x2,0x41,0x79, 0x3,0x40,0x4c, 0x3,0x67,0x25, + 0x1,0x63,0x49, 0x3,0x67,0x24, 0xf,0x40,0x62, 0x2,0x42,0x24, + 0x3,0x64,0x58, 0x1,0x68,0x35, 0x1,0x68,0x30, 0x3,0x46,0x2e, + 0x2,0x49,0x3c, 0x2,0x49,0x38, 0x3,0x46,0x28, 0x2,0x49,0x32, + 0x1,0x68,0x2a, 0x1,0x68,0x26, 0x2,0x49,0x3b, 0x1,0x68,0x27, + 0x2,0x49,0x35, 0x2,0x49,0x37, 0x3,0x46,0x29, 0x2,0x49,0x3a, + 0x3,0x46,0x36, 0x1,0x68,0x2c, 0x3,0x46,0x2c, 0x1,0x68,0x33, + 0x1,0x68,0x2d, 0x4,0x42,0x57, 0x3,0x46,0x2a, 0x2,0x49,0x30, + 0x1,0x68,0x2e, 0x1,0x68,0x2f, 0x2,0x49,0x33, 0x1,0x68,0x34, + 0x3,0x46,0x34, 0x2,0x49,0x31, 0x2,0x49,0x36, 0x1,0x68,0x2b, + 0x2,0x49,0x2f, 0x1,0x68,0x31, 0x1,0x68,0x29, 0x3,0x46,0x33, + 0x4,0x42,0x4b, 0x1,0x68,0x28, 0x2,0x49,0x34, 0x2,0x49,0x39, + 0x3,0x46,0x31, 0x1,0x68,0x32, 0x3,0x64,0x5a, 0x3,0x64,0x59, + 0x3,0x46,0x50, 0x2,0x49,0x2e, 0x3,0x46,0x30, 0x1,0x6c,0x37, + 0x2,0x4f,0x6e, 0x3,0x4b,0x41, 0x2,0x4f,0x6b, 0x3,0x4b,0x38, + 0x1,0x6c,0x31, 0x1,0x6c,0x3d, 0x1,0x6c,0x3e, 0x3,0x4b,0x3d, + 0x1,0x6c,0x34, 0x2,0x4f,0x69, 0x1,0x6c,0x36, 0x2,0x4f,0x61, + 0x1,0x6c,0x3c, 0x3,0x4b,0x44, 0x2,0x4f,0x6d, 0x1,0x6c,0x33, + 0x2,0x4f,0x6f, 0x1,0x6c,0x32, 0x4,0x49,0x31, 0x2,0x4f,0x6a, + 0x2,0x4f,0x6c, 0x1,0x6c,0x35, 0x2,0x4f,0x68, 0x2,0x4f,0x62, + 0x2,0x4f,0x5f, 0x4,0x49,0x2e, 0x3,0x4b,0x3e, 0x2,0x3a,0x4f, + 0x2,0x4f,0x65, 0x3,0x4b,0x37, 0x2,0x4f,0x5e, 0x2,0x4f,0x64, + 0x2,0x4f,0x63, 0x3,0x4b,0x3b, 0x2,0x4f,0x60, 0x3,0x4b,0x43, + 0x1,0x6c,0x39, 0x3,0x4b,0x45, 0x3,0x4b,0x40, 0x3,0x46,0x35, + 0x3,0x4b,0x3c, 0x1,0x6c,0x38, 0x3,0x4b,0x39, 0x7,0x21,0x63, + 0x3,0x4b,0x3f, 0x1,0x6c,0x3a, 0x2,0x4f,0x66, 0x1,0x70,0x3b, + 0x2,0x4f,0x67, 0x2,0x56,0x4f, 0x3,0x50,0x3f, 0x2,0x56,0x48, + 0x3,0x50,0x40, 0x1,0x70,0x47, 0x2,0x56,0x4c, 0x1,0x70,0x3f, + 0x1,0x70,0x43, 0x2,0x56,0x4b, 0x3,0x50,0x3b, 0x1,0x70,0x42, + 0x1,0x70,0x3e, 0x1,0x70,0x41, 0x1,0x70,0x3c, 0x1,0x70,0x46, + 0x2,0x56,0x4d, 0x2,0x56,0x49, 0x1,0x70,0x45, 0x2,0x56,0x47, + 0x1,0x70,0x44, 0x2,0x56,0x4e, 0x2,0x56,0x4a, 0x1,0x6c,0x3b, + 0x4,0x4f,0x71, 0x1,0x70,0x48, 0x2,0x56,0x50, 0x1,0x70,0x40, + 0x1,0x70,0x3d, 0xf,0x53,0x5d, 0x3,0x50,0x3d, 0x3,0x54,0x48, + 0x2,0x5c,0x52, 0x2,0x5c,0x54, 0x1,0x73,0x46, 0x2,0x5c,0x55, + 0x2,0x5c,0x53, 0x2,0x5c,0x51, 0x2,0x5c,0x50, 0x1,0x73,0x48, + 0x2,0x5c,0x4f, 0x1,0x73,0x49, 0x4,0x55,0x74, 0x3,0x54,0x49, + 0x3,0x54,0x47, 0x4,0x55,0x78, 0x2,0x5c,0x4d, 0x2,0x5c,0x4e, + 0x1,0x73,0x45, 0x1,0x73,0x4a, 0x1,0x73,0x47, 0x3,0x64,0x5d, + 0x3,0x64,0x5b, 0x2,0x5c,0x4c, 0x3,0x57,0x5b, 0x1,0x76,0x3c, + 0x3,0x57,0x5a, 0x2,0x61,0x48, 0x2,0x61,0x46, 0x2,0x61,0x4b, + 0x2,0x61,0x49, 0x3,0x57,0x58, 0x2,0x61,0x47, 0x2,0x61,0x4a, + 0x3,0x57,0x59, 0x3,0x57,0x57, 0x3,0x57,0x5c, 0x1,0x78,0x2c, + 0x2,0x65,0x3e, 0x2,0x65,0x3f, 0x1,0x78,0x2d, 0x4,0x5f,0x4d, + 0x2,0x65,0x40, 0x2,0x65,0x3c, 0x2,0x65,0x41, 0x2,0x65,0x3d, + 0x1,0x76,0x3d, 0x3,0x5a,0x2d, 0x3,0x64,0x5e, 0x4,0x63,0x31, + 0x2,0x68,0x6b, 0x2,0x68,0x6d, 0x1,0x79,0x64, 0x2,0x68,0x6c, + 0x1,0x79,0x63, 0x1,0x79,0x62, 0x3,0x67,0x26, 0x3,0x67,0x27, + 0x3,0x64,0x5c, 0x3,0x5e,0x26, 0x1,0x79,0x65, 0x2,0x6b,0x53, + 0x2,0x6b,0x54, 0x4,0x66,0x34, 0x1,0x7a,0x65, 0x1,0x7a,0x64, + 0x1,0x7a,0x66, 0x2,0x6b,0x52, 0x3,0x67,0x28, 0x2,0x6d,0x46, + 0x2,0x6d,0x45, 0x3,0x5f,0x40, 0x1,0x7b,0x59, 0x1,0x7b,0x5b, + 0x1,0x7b,0x5a, 0x2,0x6d,0x47, 0x1,0x7c,0x34, 0x2,0x70,0x34, + 0x4,0x6a,0x44, 0x4,0x6a,0x43, 0x1,0x7c,0x5d, 0x3,0x60,0x71, + 0x2,0x70,0x33, 0x2,0x70,0x7c, 0x2,0x21,0x2a, 0x3,0x21,0x77, + 0x4,0x21,0x6f, 0x1,0x46,0x3f, 0x1,0x46,0x3e, 0x4,0x21,0x6d, + 0x1,0x47,0x60, 0x1,0x47,0x5f, 0x2,0x22,0x27, 0x1,0x47,0x5e, + 0x2,0x22,0x26, 0x3,0x23,0x3e, 0x1,0x49,0x5b, 0x2,0x23,0x49, + 0x3,0x25,0x2c, 0x2,0x23,0x48, 0xf,0x23,0x50, 0x3,0x25,0x26, + 0x1,0x49,0x59, 0x1,0x49,0x5c, 0x3,0x25,0x2b, 0x3,0x25,0x2a, + 0x2,0x23,0x47, 0x3,0x25,0x29, 0x1,0x49,0x5a, 0x3,0x25,0x48, + 0x3,0x25,0x27, 0x3,0x25,0x28, 0x3,0x28,0x22, 0x2,0x25,0x70, + 0x3,0x27,0x7d, 0x2,0x25,0x71, 0x1,0x4c,0x56, 0x3,0x27,0x7c, + 0x3,0x28,0x21, 0x3,0x27,0x7b, 0x1,0x50,0x4c, 0x3,0x2b,0x65, + 0x2,0x2e,0x4a, 0x2,0x2e,0x4b, 0x1,0x54,0x67, 0x1,0x54,0x68, + 0x3,0x30,0x27, 0x2,0x34,0x2f, 0x1,0x59,0x4e, 0x1,0x59,0x50, + 0x2,0x34,0x2e, 0x1,0x59,0x4f, 0x2,0x3a,0x60, 0x1,0x5e,0x58, + 0x3,0x3a,0x44, 0x3,0x3a,0x43, 0x4,0x36,0x68, 0x4,0x3c,0x52, + 0x1,0x63,0x50, 0x1,0x63,0x51, 0x2,0x42,0x28, 0x3,0x40,0x52, + 0x1,0x68,0x37, 0x3,0x46,0x37, 0x1,0x68,0x36, 0x2,0x4f,0x70, + 0x2,0x56,0x52, 0x2,0x56,0x51, 0x3,0x5f,0x41, 0x2,0x71,0x5a, + 0x1,0x44,0x48, 0x2,0x21,0x39, 0x3,0x21,0x61, 0x2,0x21,0x4f, + 0x2,0x21,0x50, 0x3,0x22,0x34, 0x4,0x21,0x70, 0x4,0x21,0x71, + 0x1,0x47,0x63, 0x1,0x47,0x67, 0x2,0x22,0x29, 0x4,0x22,0x51, + 0x1,0x47,0x65, 0x1,0x47,0x64, 0x2,0x22,0x28, 0x1,0x47,0x66, + 0x1,0x47,0x62, 0x3,0x23,0x41, 0x3,0x23,0x42, 0x1,0x47,0x61, + 0x2,0x22,0x2a, 0x3,0x23,0x3f, 0x3,0x23,0x40, 0x1,0x49,0x66, + 0x3,0x25,0x31, 0x3,0x25,0x3e, 0x1,0x49,0x63, 0x3,0x25,0x30, + 0x1,0x49,0x5f, 0x2,0x23,0x4a, 0x3,0x25,0x40, 0x3,0x25,0x36, + 0x3,0x25,0x2f, 0x2,0x23,0x4b, 0x3,0x25,0x3c, 0x1,0x49,0x61, + 0x3,0x25,0x2d, 0x2,0x23,0x4d, 0x1,0x49,0x5d, 0x2,0x23,0x4e, + 0x2,0x23,0x4c, 0x1,0x49,0x60, 0x1,0x49,0x62, 0x1,0x49,0x65, + 0x1,0x49,0x64, 0x1,0x49,0x5e, 0x2,0x23,0x4f, 0x3,0x25,0x32, + 0x3,0x25,0x41, 0x3,0x25,0x42, 0x3,0x25,0x33, 0x3,0x25,0x38, + 0x3,0x25,0x37, 0x3,0x64,0x5f, 0xf,0x23,0x52, 0x3,0x25,0x35, + 0x1,0x4c,0x5b, 0x2,0x25,0x7e, 0x3,0x28,0x25, 0x1,0x4c,0x5d, + 0x3,0x28,0x23, 0x1,0x4c,0x5c, 0x3,0x28,0x26, 0x2,0x26,0x21, + 0x1,0x4c,0x5a, 0x1,0x4c,0x59, 0x2,0x25,0x75, 0x4,0x25,0x69, + 0x2,0x25,0x74, 0x3,0x28,0x28, 0x2,0x25,0x72, 0x2,0x25,0x77, + 0x2,0x25,0x76, 0x2,0x25,0x73, 0x2,0x25,0x7c, 0x2,0x25,0x7d, + 0x2,0x25,0x7a, 0x2,0x25,0x78, 0x1,0x4c,0x58, 0x3,0x28,0x29, + 0x4,0x25,0x66, 0x4,0x25,0x68, 0x2,0x25,0x7b, 0x1,0x4c,0x5e, + 0x2,0x26,0x22, 0x4,0x25,0x65, 0x3,0x28,0x2a, 0x2,0x25,0x79, + 0x3,0x28,0x24, 0x1,0x50,0x4d, 0x1,0x4c,0x57, 0x4,0x25,0x6e, + 0xf,0x26,0x33, 0x3,0x64,0x60, 0x1,0x50,0x4e, 0x2,0x29,0x55, + 0x3,0x2b,0x69, 0x3,0x2b,0x68, 0x2,0x29,0x5b, 0x3,0x2b,0x6c, + 0x3,0x2b,0x67, 0x3,0x2b,0x6a, 0x1,0x50,0x54, 0x2,0x29,0x59, + 0x2,0x29,0x5f, 0x3,0x2b,0x71, 0x2,0x29,0x56, 0x2,0x29,0x5a, + 0x2,0x29,0x5c, 0x2,0x29,0x5e, 0x2,0x29,0x58, 0x3,0x2b,0x70, + 0x2,0x29,0x57, 0x2,0x29,0x52, 0x2,0x29,0x53, 0x1,0x50,0x4f, + 0x3,0x2b,0x6b, 0x1,0x50,0x51, 0x1,0x50,0x50, 0x2,0x29,0x54, + 0x2,0x29,0x5d, 0x3,0x2b,0x6d, 0x3,0x2b,0x72, 0x3,0x2b,0x6e, + 0x4,0x28,0x60, 0xf,0x29,0x6a, 0xf,0x29,0x71, 0x3,0x2b,0x66, + 0x1,0x50,0x53, 0x4,0x28,0x5e, 0x2,0x29,0x51, 0x2,0x2e,0x55, + 0x3,0x30,0x2a, 0x2,0x2e,0x54, 0x2,0x2e,0x59, 0x2,0x2e,0x50, + 0x3,0x30,0x30, 0x2,0x2e,0x53, 0x2,0x2e,0x52, 0x3,0x30,0x2f, + 0x2,0x2e,0x56, 0x3,0x30,0x38, 0x2,0x2e,0x5a, 0x1,0x54,0x69, + 0x1,0x54,0x6c, 0x3,0x30,0x34, 0x3,0x30,0x35, 0x2,0x2e,0x51, + 0x2,0x2e,0x57, 0x3,0x30,0x33, 0x3,0x30,0x28, 0x3,0x30,0x37, + 0x1,0x54,0x6b, 0x2,0x2e,0x4c, 0x3,0x30,0x2b, 0x1,0x50,0x52, + 0x2,0x34,0x3d, 0x2,0x2e,0x58, 0x3,0x30,0x36, 0x2,0x2e,0x4f, + 0x4,0x2c,0x33, 0x1,0x54,0x6a, 0x2,0x2e,0x4e, 0xf,0x2e,0x5c, + 0x3,0x30,0x32, 0x2,0x34,0x34, 0x3,0x34,0x6e, 0x3,0x34,0x71, + 0x1,0x59,0x51, 0x1,0x59,0x55, 0x2,0x34,0x44, 0x2,0x34,0x32, + 0x2,0x34,0x40, 0x1,0x59,0x56, 0x2,0x34,0x42, 0x3,0x34,0x72, + 0x2,0x34,0x48, 0x3,0x34,0x74, 0x2,0x34,0x4c, 0x3,0x34,0x69, + 0x4,0x30,0x7b, 0x2,0x34,0x43, 0x2,0x34,0x37, 0x2,0x34,0x3f, + 0x3,0x34,0x6b, 0x2,0x34,0x4d, 0x2,0x34,0x4b, 0x2,0x34,0x41, + 0x2,0x34,0x3c, 0x2,0x34,0x35, 0x2,0x3a,0x68, 0x2,0x34,0x33, + 0x1,0x59,0x5a, 0x2,0x34,0x3a, 0x1,0x59,0x5b, 0x1,0x59,0x57, + 0x2,0x34,0x30, 0x2,0x34,0x46, 0x2,0x34,0x38, 0x3,0x34,0x6f, + 0x3,0x34,0x75, 0x2,0x34,0x36, 0x2,0x34,0x49, 0x1,0x59,0x58, + 0x3,0x34,0x76, 0x2,0x34,0x4f, 0x1,0x59,0x52, 0x1,0x59,0x54, + 0x2,0x34,0x3e, 0x2,0x34,0x39, 0x1,0x54,0x6d, 0x1,0x59,0x53, + 0x2,0x34,0x3b, 0x2,0x34,0x4a, 0x2,0x34,0x4e, 0x2,0x34,0x45, + 0x3,0x64,0x61, 0x2,0x34,0x47, 0x3,0x64,0x62, 0x3,0x64,0x63, + 0x2,0x34,0x31, 0x4,0x36,0x69, 0x3,0x3a,0x4a, 0x2,0x3a,0x63, + 0x3,0x3a,0x45, 0x2,0x3a,0x6c, 0x2,0x3a,0x6b, 0x1,0x5e,0x60, + 0x2,0x3a,0x64, 0x3,0x3a,0x47, 0x1,0x5e,0x61, 0x1,0x5e,0x5f, + 0x3,0x3a,0x50, 0x2,0x3a,0x66, 0x1,0x5e,0x5c, 0x2,0x3a,0x6a, + 0x3,0x3a,0x4c, 0x2,0x3a,0x65, 0x2,0x3a,0x67, 0x2,0x3a,0x61, + 0x1,0x5e,0x5a, 0x4,0x36,0x6f, 0x2,0x3a,0x74, 0x2,0x3a,0x73, + 0x2,0x3a,0x70, 0x1,0x5e,0x59, 0x1,0x5e,0x5d, 0x1,0x5e,0x5e, + 0x2,0x2e,0x4d, 0x2,0x3a,0x6d, 0x1,0x5e,0x5b, 0x1,0x59,0x59, + 0x2,0x3a,0x6f, 0x2,0x3a,0x62, 0x2,0x3a,0x72, 0x2,0x3a,0x71, + 0x3,0x3a,0x4e, 0x2,0x3a,0x75, 0x3,0x3a,0x49, 0x2,0x42,0x36, + 0x3,0x3a,0x4b, 0x2,0x3a,0x6e, 0xf,0x39,0x7d, 0xf,0x39,0x7e, + 0x4,0x3c,0x57, 0x4,0x36,0x6d, 0x4,0x36,0x71, 0x3,0x64,0x64, + 0x2,0x3a,0x69, 0x2,0x42,0x2e, 0x1,0x63,0x5b, 0x1,0x63,0x5e, + 0x1,0x63,0x59, 0x2,0x42,0x2d, 0x2,0x42,0x31, 0x2,0x42,0x2c, + 0x3,0x40,0x57, 0x1,0x63,0x53, 0x1,0x63,0x5d, 0x2,0x42,0x29, + 0x1,0x63,0x57, 0x2,0x42,0x30, 0x3,0x40,0x5b, 0x1,0x63,0x55, + 0x1,0x63,0x54, 0x2,0x42,0x33, 0x1,0x63,0x56, 0x2,0x42,0x35, + 0x3,0x40,0x56, 0x2,0x42,0x32, 0x1,0x63,0x52, 0x3,0x40,0x5e, + 0x3,0x40,0x5c, 0x3,0x40,0x58, 0x1,0x63,0x5c, 0x2,0x42,0x37, + 0x2,0x42,0x2b, 0x2,0x42,0x34, 0x3,0x40,0x5d, 0x4,0x3c,0x53, + 0x2,0x42,0x2a, 0x3,0x40,0x5a, 0x3,0x40,0x59, 0x1,0x63,0x58, + 0x3,0x40,0x54, 0x1,0x63,0x5a, 0x2,0x42,0x2f, 0x2,0x42,0x38, + 0x3,0x46,0x43, 0x3,0x46,0x3e, 0x2,0x49,0x44, 0x1,0x68,0x38, + 0x2,0x49,0x4a, 0x3,0x46,0x42, 0x3,0x46,0x3c, 0x1,0x68,0x3d, + 0x2,0x49,0x46, 0x2,0x49,0x4d, 0x2,0x49,0x3e, 0x1,0x68,0x3f, + 0x1,0x68,0x39, 0x2,0x49,0x43, 0x1,0x6c,0x3f, 0x2,0x49,0x42, + 0x2,0x49,0x4b, 0x1,0x68,0x3a, 0x3,0x46,0x3d, 0x1,0x68,0x3e, + 0x2,0x49,0x41, 0x2,0x49,0x47, 0x2,0x49,0x4c, 0x2,0x49,0x3d, + 0x1,0x68,0x3c, 0x2,0x49,0x45, 0x3,0x46,0x3a, 0x3,0x46,0x45, + 0x2,0x49,0x49, 0x2,0x49,0x4f, 0x2,0x49,0x3f, 0x2,0x49,0x48, + 0x3,0x46,0x38, 0x1,0x68,0x3b, 0x2,0x49,0x4e, 0x3,0x46,0x41, + 0x3,0x46,0x44, 0x3,0x46,0x40, 0x2,0x49,0x40, 0x4,0x42,0x59, + 0x3,0x64,0x65, 0x1,0x6c,0x43, 0x2,0x4f,0x72, 0x1,0x6c,0x41, + 0x1,0x6c,0x40, 0x2,0x4f,0x74, 0x2,0x4f,0x79, 0x3,0x4b,0x46, + 0x2,0x4f,0x75, 0x3,0x4b,0x50, 0x2,0x4f,0x78, 0x1,0x6c,0x46, + 0x3,0x4b,0x51, 0x1,0x70,0x2e, 0x1,0x6c,0x45, 0x3,0x4b,0x4b, + 0x2,0x4f,0x71, 0x2,0x4f,0x77, 0x3,0x46,0x3f, 0x1,0x6c,0x44, + 0x2,0x4f,0x76, 0x3,0x4b,0x4d, 0x2,0x4f,0x73, 0x3,0x4b,0x49, + 0x1,0x6c,0x42, 0x3,0x4b,0x4f, 0x3,0x4b,0x4c, 0x3,0x4b,0x47, + 0x2,0x56,0x57, 0x3,0x50,0x4a, 0x2,0x56,0x59, 0x2,0x56,0x54, + 0x1,0x70,0x4a, 0x2,0x56,0x56, 0x3,0x50,0x4b, 0x1,0x70,0x49, + 0x2,0x56,0x58, 0x3,0x50,0x48, 0x3,0x50,0x4c, 0x1,0x70,0x4c, + 0x2,0x56,0x5a, 0x1,0x70,0x4b, 0x2,0x56,0x53, 0x2,0x56,0x55, + 0x3,0x50,0x49, 0x3,0x54,0x4b, 0x1,0x73,0x4e, 0x2,0x5c,0x58, + 0x3,0x54,0x4c, 0x1,0x73,0x4d, 0x2,0x5c,0x59, 0x1,0x73,0x4c, + 0x2,0x5c,0x57, 0x1,0x73,0x4b, 0x2,0x5c,0x56, 0x1,0x76,0x3f, + 0x1,0x76,0x3e, 0x2,0x65,0x42, 0x2,0x65,0x44, 0x3,0x5a,0x2f, + 0x2,0x65,0x43, 0x1,0x78,0x2e, 0x1,0x78,0x2f, 0x3,0x5a,0x2e, + 0x7,0x46,0x45, 0x1,0x78,0x30, 0x2,0x68,0x6e, 0x1,0x79,0x66, + 0x3,0x5e,0x28, 0x2,0x6f,0x22, 0x2,0x6f,0x21, 0x1,0x7c,0x5e, + 0x1,0x44,0x49, 0x1,0x45,0x31, 0x3,0x23,0x43, 0x1,0x49,0x67, + 0x3,0x25,0x45, 0x3,0x25,0x43, 0x3,0x25,0x44, 0x3,0x28,0x2d, + 0x2,0x29,0x60, 0x3,0x2b,0x77, 0x3,0x34,0x77, 0x1,0x5e,0x62, + 0x1,0x5e,0x63, 0x3,0x3a,0x52, 0x2,0x42,0x39, 0x1,0x68,0x40, + 0x2,0x49,0x50, 0x2,0x4f,0x7a, 0x3,0x64,0x66, 0x3,0x50,0x4d, + 0x3,0x21,0x39, 0x2,0x21,0x3a, 0x3,0x22,0x35, 0x3,0x23,0x44, + 0x2,0x23,0x50, 0x3,0x2b,0x7a, 0x3,0x2b,0x79, 0x3,0x21,0x3a, + 0x3,0x25,0x46, 0x2,0x26,0x23, 0x2,0x29,0x61, 0x2,0x2e,0x5b, + 0x1,0x54,0x6e, 0x3,0x46,0x46, 0x3,0x65,0x60, 0x2,0x65,0x45, + 0x4,0x5f,0x52, 0x1,0x7a,0x67, 0x1,0x44,0x4a, 0x1,0x46,0x40, + 0x2,0x21,0x51, 0x3,0x22,0x36, 0x1,0x47,0x68, 0x1,0x47,0x69, + 0x4,0x22,0x52, 0x1,0x4c,0x5f, 0x4,0x25,0x70, 0x3,0x34,0x79, + 0x1,0x59,0x5c, 0x5,0x37,0x3d, 0x1,0x68,0x42, 0x3,0x40,0x5f, + 0x1,0x68,0x43, 0x1,0x68,0x41, 0x3,0x4b,0x53, 0x1,0x44,0x4b, + 0x4,0x21,0x49, 0x1,0x45,0x32, 0x1,0x45,0x34, 0x1,0x45,0x33, + 0x2,0x21,0x3b, 0x1,0x45,0x35, 0x1,0x46,0x41, 0x2,0x21,0x52, + 0x3,0x22,0x38, 0x1,0x46,0x42, 0x3,0x22,0x37, 0x4,0x21,0x72, + 0x3,0x22,0x39, 0x4,0x22,0x53, 0x3,0x23,0x47, 0x1,0x47,0x6a, + 0x1,0x47,0x6b, 0x2,0x22,0x2b, 0x3,0x25,0x49, 0x1,0x49,0x68, + 0x4,0x23,0x62, 0x2,0x23,0x51, 0x4,0x25,0x75, 0x1,0x4c,0x63, + 0x2,0x26,0x24, 0x4,0x25,0x72, 0x1,0x4c,0x61, 0x1,0x4c,0x62, + 0x1,0x4c,0x60, 0x2,0x2e,0x5c, 0x3,0x28,0x2e, 0x3,0x28,0x2f, + 0x3,0x64,0x67, 0x1,0x50,0x58, 0x1,0x50,0x57, 0x1,0x50,0x59, + 0x1,0x50,0x56, 0x3,0x2b,0x7c, 0x2,0x29,0x62, 0x1,0x4c,0x64, + 0x1,0x50,0x55, 0x1,0x54,0x6f, 0x1,0x54,0x70, 0x4,0x2c,0x38, + 0x1,0x54,0x71, 0x3,0x34,0x7b, 0x2,0x34,0x50, 0x3,0x34,0x7c, + 0x3,0x34,0x7d, 0x4,0x31,0x26, 0x1,0x5e,0x64, 0x2,0x3a,0x76, + 0x1,0x59,0x5d, 0x3,0x3a,0x53, 0x3,0x3a,0x54, 0x4,0x36,0x79, + 0x3,0x40,0x60, 0x1,0x63,0x5f, 0x3,0x40,0x61, 0x1,0x68,0x45, + 0x1,0x68,0x44, 0x2,0x49,0x51, 0x3,0x46,0x48, 0x1,0x6c,0x47, + 0x1,0x70,0x4d, 0x4,0x4f,0x7b, 0x2,0x61,0x4c, 0x2,0x6d,0x48, + 0x2,0x6f,0x23, 0x1,0x44,0x4c, 0x1,0x46,0x43, 0x3,0x22,0x3b, + 0x1,0x46,0x44, 0x2,0x22,0x31, 0x1,0x47,0x6d, 0x1,0x47,0x70, + 0x3,0x23,0x4b, 0x2,0x22,0x2f, 0x2,0x22,0x2d, 0x1,0x47,0x6f, + 0x2,0x22,0x30, 0x2,0x22,0x32, 0x2,0x22,0x2c, 0x1,0x47,0x72, + 0x1,0x47,0x71, 0x1,0x47,0x6e, 0x1,0x47,0x6c, 0x2,0x22,0x2e, + 0x3,0x23,0x4d, 0x3,0x25,0x55, 0x1,0x49,0x73, 0x4,0x23,0x67, + 0x3,0x25,0x4c, 0x1,0x49,0x70, 0x2,0x23,0x56, 0x2,0x23,0x59, + 0x2,0x23,0x58, 0x4,0x23,0x69, 0x1,0x49,0x6a, 0x1,0x49,0x72, + 0x3,0x25,0x4b, 0x4,0x23,0x6a, 0x1,0x49,0x6f, 0x2,0x23,0x55, + 0x2,0x23,0x53, 0x1,0x49,0x6e, 0x3,0x25,0x56, 0x3,0x25,0x53, + 0x3,0x25,0x4e, 0x1,0x49,0x69, 0x1,0x49,0x6c, 0x3,0x25,0x51, + 0x2,0x23,0x54, 0x2,0x23,0x5b, 0x2,0x23,0x57, 0x1,0x49,0x6d, + 0x1,0x49,0x71, 0x1,0x49,0x74, 0x2,0x23,0x52, 0x2,0x23,0x5a, + 0x1,0x49,0x6b, 0x3,0x28,0x41, 0x3,0x28,0x33, 0x1,0x4c,0x69, + 0x1,0x4c,0x71, 0x3,0x28,0x38, 0x2,0x26,0x30, 0x2,0x26,0x29, + 0x1,0x4c,0x72, 0x2,0x26,0x34, 0x2,0x26,0x25, 0x2,0x26,0x2c, + 0x3,0x28,0x45, 0x3,0x28,0x40, 0x1,0x4c,0x68, 0x2,0x26,0x26, + 0x1,0x4c,0x66, 0x2,0x26,0x2d, 0x2,0x26,0x31, 0x1,0x4c,0x65, + 0x3,0x28,0x3d, 0x2,0x26,0x32, 0x2,0x26,0x2b, 0x3,0x28,0x37, + 0x2,0x26,0x2e, 0x3,0x28,0x35, 0x1,0x4c,0x74, 0x1,0x4c,0x6b, + 0x2,0x26,0x35, 0x2,0x26,0x33, 0x3,0x28,0x3f, 0x1,0x4c,0x70, + 0x1,0x4c,0x6e, 0x2,0x26,0x2a, 0x1,0x4c,0x6d, 0x2,0x26,0x28, + 0x2,0x26,0x27, 0x1,0x4c,0x6c, 0x1,0x4c,0x6a, 0x1,0x4c,0x73, + 0x1,0x4c,0x6f, 0x1,0x4c,0x67, 0x3,0x2c,0x26, 0x2,0x26,0x2f, + 0x3,0x28,0x46, 0x1,0x50,0x5b, 0x3,0x2c,0x2d, 0x1,0x50,0x62, + 0x2,0x29,0x70, 0x1,0x50,0x5a, 0x2,0x29,0x68, 0x2,0x29,0x64, + 0x3,0x2c,0x21, 0x2,0x29,0x74, 0x2,0x29,0x63, 0x3,0x2c,0x2c, + 0x1,0x50,0x5d, 0x2,0x29,0x6d, 0x1,0x50,0x60, 0x1,0x50,0x63, + 0x3,0x2c,0x2e, 0x1,0x50,0x5e, 0x2,0x29,0x71, 0x1,0x50,0x61, + 0x3,0x2c,0x23, 0x1,0x54,0x78, 0x2,0x29,0x77, 0x2,0x29,0x65, + 0x3,0x2c,0x24, 0x3,0x2c,0x25, 0x2,0x29,0x67, 0x2,0x29,0x6e, + 0x2,0x29,0x72, 0x2,0x29,0x76, 0x2,0x29,0x73, 0x2,0x29,0x6c, + 0x2,0x29,0x6f, 0x3,0x2c,0x2b, 0x3,0x2c,0x29, 0x2,0x29,0x69, + 0x1,0x50,0x65, 0x2,0x29,0x6b, 0x2,0x29,0x6a, 0x2,0x29,0x75, + 0x1,0x50,0x5c, 0x2,0x29,0x66, 0x1,0x50,0x64, 0x3,0x2c,0x2a, + 0x1,0x50,0x5f, 0x3,0x2c,0x28, 0x1,0x54,0x7e, 0x2,0x2e,0x64, + 0x3,0x30,0x40, 0x1,0x54,0x7d, 0x3,0x2c,0x27, 0x4,0x2c,0x40, + 0x2,0x2e,0x62, 0x4,0x2c,0x3e, 0x1,0x54,0x72, 0x3,0x30,0x4f, + 0x1,0x54,0x77, 0x3,0x30,0x4a, 0x2,0x2e,0x61, 0x2,0x2e,0x5e, + 0x2,0x2e,0x63, 0x1,0x54,0x73, 0x2,0x2e,0x5d, 0x3,0x30,0x4e, + 0x1,0x54,0x76, 0x1,0x54,0x74, 0x3,0x30,0x3e, 0x2,0x2e,0x65, + 0x1,0x54,0x75, 0x1,0x54,0x79, 0x3,0x30,0x3b, 0x3,0x30,0x45, + 0x1,0x54,0x7a, 0x3,0x30,0x48, 0x1,0x54,0x7c, 0x3,0x30,0x52, + 0x4,0x2c,0x39, 0x4,0x2c,0x3d, 0x1,0x54,0x7b, 0x3,0x30,0x3c, + 0x3,0x35,0x22, 0x3,0x35,0x38, 0x2,0x2e,0x5f, 0x2,0x2e,0x60, + 0x3,0x30,0x4d, 0x6,0x36,0x57, 0x3,0x30,0x4b, 0x2,0x2e,0x66, + 0x2,0x34,0x57, 0x1,0x59,0x5e, 0x2,0x3b,0x26, 0x2,0x34,0x56, + 0x2,0x34,0x69, 0x3,0x35,0x28, 0x3,0x35,0x24, 0x1,0x59,0x64, + 0x3,0x35,0x31, 0x2,0x34,0x67, 0x3,0x35,0x33, 0x1,0x59,0x63, + 0x1,0x59,0x5f, 0x2,0x34,0x70, 0x2,0x34,0x60, 0x2,0x34,0x63, + 0x3,0x35,0x2e, 0x1,0x59,0x67, 0x2,0x34,0x6d, 0x2,0x34,0x65, + 0x1,0x59,0x60, 0x1,0x59,0x68, 0x3,0x35,0x2a, 0x2,0x34,0x6a, + 0x2,0x34,0x68, 0x3,0x35,0x2f, 0x3,0x35,0x3b, 0x2,0x34,0x59, + 0x2,0x34,0x6e, 0x2,0x34,0x62, 0x2,0x34,0x5d, 0x3,0x35,0x3a, + 0x2,0x34,0x53, 0x2,0x34,0x6f, 0x2,0x34,0x5f, 0x2,0x34,0x52, + 0x3,0x35,0x39, 0x1,0x59,0x66, 0x2,0x34,0x64, 0x2,0x34,0x71, + 0x2,0x34,0x61, 0x2,0x34,0x55, 0x2,0x34,0x5a, 0x2,0x34,0x51, + 0x3,0x35,0x27, 0x1,0x59,0x65, 0x3,0x35,0x3c, 0x2,0x34,0x5e, + 0x2,0x34,0x5b, 0x1,0x59,0x61, 0x2,0x34,0x54, 0x3,0x35,0x30, + 0x2,0x34,0x6c, 0x1,0x59,0x62, 0x3,0x35,0x2b, 0x2,0x34,0x5c, + 0x2,0x34,0x58, 0x3,0x35,0x29, 0x3,0x35,0x34, 0x2,0x34,0x6b, + 0x3,0x35,0x32, 0xf,0x33,0x73, 0x3,0x35,0x37, 0x3,0x35,0x35, + 0x1,0x5e,0x65, 0x2,0x3a,0x7d, 0x3,0x3a,0x75, 0x2,0x3a,0x7a, + 0x2,0x3b,0x2d, 0x2,0x3b,0x21, 0x2,0x3b,0x2e, 0x3,0x3a,0x7c, + 0x1,0x5e,0x67, 0x3,0x3a,0x63, 0x3,0x3a,0x61, 0x3,0x3a,0x58, + 0x2,0x3b,0x2a, 0x2,0x3b,0x27, 0x3,0x3a,0x5b, 0x3,0x3a,0x77, + 0x3,0x3a,0x72, 0x3,0x3a,0x59, 0x3,0x3a,0x60, 0x2,0x3b,0x28, + 0x2,0x3b,0x2b, 0x2,0x3b,0x2f, 0x3,0x3a,0x7b, 0x2,0x34,0x66, + 0x2,0x3b,0x31, 0x2,0x42,0x4d, 0x3,0x3a,0x66, 0x1,0x5e,0x68, + 0x2,0x3b,0x32, 0x2,0x3a,0x78, 0x2,0x3b,0x24, 0x3,0x3a,0x62, + 0x2,0x3b,0x29, 0x3,0x3a,0x5c, 0x3,0x3a,0x5e, 0x1,0x5e,0x66, + 0x1,0x5e,0x69, 0x2,0x3b,0x30, 0x2,0x3b,0x33, 0x2,0x3a,0x7c, + 0x2,0x3a,0x79, 0x3,0x3a,0x73, 0x3,0x3a,0x5a, 0x2,0x3a,0x7b, + 0x3,0x3a,0x57, 0x3,0x3a,0x7a, 0x2,0x3b,0x22, 0x2,0x3a,0x7e, + 0x1,0x5e,0x6a, 0x3,0x3a,0x56, 0x2,0x3b,0x2c, 0x3,0x3a,0x79, + 0x3,0x3a,0x78, 0x2,0x3b,0x23, 0x2,0x3b,0x25, 0x2,0x3a,0x77, + 0x2,0x42,0x41, 0x2,0x42,0x3f, 0x1,0x63,0x68, 0x1,0x63,0x66, + 0x2,0x42,0x49, 0x2,0x42,0x40, 0x2,0x42,0x4a, 0x2,0x42,0x46, + 0x2,0x42,0x3e, 0x2,0x42,0x4c, 0x2,0x42,0x3d, 0x2,0x42,0x44, + 0x1,0x63,0x65, 0x1,0x63,0x64, 0x1,0x63,0x63, 0x2,0x42,0x42, + 0x2,0x42,0x47, 0x1,0x63,0x60, 0x1,0x63,0x67, 0x3,0x40,0x67, + 0x2,0x42,0x3b, 0x3,0x40,0x66, 0x2,0x42,0x45, 0x2,0x42,0x3a, + 0x2,0x42,0x43, 0x1,0x63,0x61, 0x2,0x42,0x48, 0x2,0x42,0x3c, + 0x1,0x63,0x62, 0x2,0x42,0x4b, 0x3,0x40,0x64, 0x3,0x3a,0x6b, + 0x3,0x40,0x6a, 0x3,0x64,0x68, 0x3,0x64,0x69, 0x2,0x49,0x55, + 0x1,0x68,0x4a, 0x1,0x68,0x49, 0x1,0x68,0x4b, 0x2,0x49,0x61, + 0x2,0x49,0x57, 0x2,0x49,0x5d, 0x2,0x49,0x52, 0x2,0x49,0x60, + 0x2,0x49,0x5f, 0x2,0x49,0x63, 0x2,0x49,0x5c, 0x1,0x68,0x46, + 0x2,0x49,0x5b, 0x1,0x68,0x4c, 0x3,0x46,0x4c, 0x2,0x49,0x54, + 0x1,0x68,0x47, 0x3,0x46,0x4a, 0x2,0x49,0x62, 0x1,0x68,0x48, + 0x2,0x49,0x56, 0x2,0x49,0x59, 0x2,0x49,0x5e, 0x2,0x49,0x58, + 0x2,0x49,0x53, 0x3,0x46,0x4f, 0x3,0x46,0x53, 0x2,0x49,0x5a, + 0x2,0x4f,0x7c, 0x1,0x6c,0x4b, 0x2,0x50,0x21, 0x2,0x4f,0x7e, + 0x2,0x50,0x23, 0x2,0x50,0x25, 0x3,0x4b,0x5c, 0x1,0x6c,0x49, + 0x3,0x4b,0x58, 0x2,0x4f,0x7d, 0x3,0x4b,0x54, 0x2,0x4f,0x7b, + 0x3,0x4b,0x5e, 0x2,0x50,0x26, 0x2,0x50,0x24, 0x2,0x50,0x22, + 0x3,0x4b,0x56, 0x2,0x50,0x28, 0x3,0x4b,0x5a, 0x2,0x50,0x27, + 0x1,0x6c,0x4d, 0x1,0x6c,0x48, 0x3,0x4b,0x5b, 0x1,0x6c,0x4a, + 0x1,0x6c,0x4c, 0x3,0x4b,0x5d, 0x3,0x4b,0x5f, 0x2,0x50,0x29, + 0x2,0x56,0x61, 0x3,0x50,0x50, 0x3,0x50,0x53, 0x2,0x56,0x60, + 0x2,0x56,0x5f, 0x3,0x50,0x51, 0x2,0x56,0x62, 0x2,0x56,0x5b, + 0x3,0x50,0x4f, 0x2,0x56,0x5c, 0x2,0x56,0x64, 0x2,0x56,0x5d, + 0x3,0x50,0x54, 0x1,0x70,0x4e, 0x2,0x56,0x66, 0x3,0x50,0x4e, + 0x2,0x56,0x65, 0x2,0x56,0x5e, 0x3,0x50,0x56, 0x2,0x5c,0x5d, + 0x1,0x73,0x51, 0x2,0x5c,0x5b, 0x2,0x5c,0x60, 0x2,0x5c,0x5f, + 0x2,0x56,0x63, 0x3,0x54,0x50, 0x1,0x73,0x50, 0x3,0x54,0x4e, + 0x2,0x5c,0x5e, 0x2,0x5c,0x5a, 0x2,0x5c,0x62, 0x2,0x5c,0x61, + 0x1,0x73,0x4f, 0x3,0x54,0x52, 0x2,0x5c,0x5c, 0x3,0x54,0x4f, + 0x1,0x70,0x4f, 0x3,0x54,0x51, 0x3,0x54,0x53, 0x1,0x76,0x40, + 0x3,0x5a,0x31, 0x3,0x57,0x61, 0x3,0x57,0x5e, 0x2,0x61,0x4d, + 0x2,0x65,0x46, 0x2,0x65,0x47, 0x2,0x65,0x48, 0x1,0x79,0x67, + 0x4,0x63,0x34, 0x3,0x5c,0x36, 0x1,0x79,0x68, 0x3,0x5c,0x39, + 0x2,0x68,0x6f, 0x3,0x5c,0x3a, 0x2,0x6b,0x56, 0x2,0x6b,0x55, + 0x3,0x5e,0x29, 0x3,0x5f,0x42, 0x2,0x6d,0x49, 0x2,0x6d,0x4a, + 0x2,0x6f,0x24, 0x2,0x70,0x35, 0x3,0x60,0x73, 0x1,0x44,0x4d, + 0x1,0x44,0x4e, 0x4,0x21,0x32, 0x1,0x44,0x4f, 0x1,0x45,0x36, + 0x1,0x46,0x45, 0x2,0x22,0x33, 0x1,0x47,0x73, 0x1,0x47,0x74, + 0x1,0x49,0x77, 0x1,0x49,0x78, 0x1,0x49,0x76, 0x1,0x49,0x75, + 0x1,0x4c,0x75, 0x3,0x28,0x48, 0x4,0x26,0x22, 0x2,0x26,0x36, + 0x1,0x4c,0x77, 0x1,0x4c,0x76, 0x2,0x26,0x37, 0x4,0x26,0x23, + 0x3,0x64,0x6a, 0x4,0x28,0x6e, 0x1,0x50,0x66, 0x3,0x2c,0x2f, + 0x1,0x55,0x21, 0x2,0x2e,0x67, 0x2,0x34,0x73, 0x4,0x31,0x2c, + 0x1,0x59,0x69, 0x1,0x5e,0x6c, 0x2,0x34,0x72, 0x1,0x5e,0x6b, + 0x3,0x40,0x71, 0x1,0x68,0x4d, 0x3,0x40,0x72, 0x2,0x49,0x64, + 0x1,0x70,0x50, 0x3,0x50,0x57, 0x1,0x73,0x52, 0x2,0x5c,0x63, + 0x3,0x5a,0x34, 0x1,0x79,0x69, 0x3,0x5c,0x3b, 0x1,0x7b,0x5c, + 0x3,0x21,0x3b, 0x2,0x21,0x53, 0x3,0x22,0x3d, 0x1,0x46,0x46, + 0x2,0x21,0x54, 0x1,0x47,0x77, 0x3,0x23,0x50, 0x1,0x47,0x75, + 0x1,0x47,0x76, 0x1,0x47,0x78, 0x4,0x23,0x6f, 0x1,0x49,0x7a, + 0x1,0x49,0x79, 0x3,0x25,0x5a, 0x2,0x23,0x5c, 0x1,0x49,0x7b, + 0x4,0x26,0x25, 0x2,0x23,0x5d, 0x2,0x26,0x38, 0x3,0x28,0x4c, + 0x2,0x26,0x39, 0x3,0x28,0x4a, 0x1,0x4c,0x78, 0x1,0x4c,0x7a, + 0x1,0x4c,0x7c, 0x1,0x4c,0x79, 0x1,0x4c,0x7d, 0x1,0x4c,0x7b, + 0x3,0x28,0x4e, 0x3,0x28,0x4b, 0x3,0x28,0x4d, 0x1,0x50,0x6a, + 0x1,0x50,0x67, 0x1,0x50,0x69, 0x1,0x50,0x6b, 0x1,0x50,0x68, + 0x2,0x2e,0x68, 0x2,0x29,0x78, 0xf,0x2a,0x39, 0x3,0x2c,0x32, + 0x2,0x2e,0x6a, 0x2,0x2e,0x69, 0x1,0x55,0x27, 0x4,0x2c,0x46, + 0x1,0x55,0x23, 0x4,0x2c,0x49, 0x6,0x36,0x66, 0x1,0x55,0x24, + 0x1,0x55,0x26, 0x1,0x55,0x28, 0x1,0x55,0x25, 0x3,0x30,0x57, + 0x1,0x55,0x2a, 0x1,0x55,0x29, 0x4,0x2c,0x48, 0x3,0x30,0x56, + 0x3,0x30,0x55, 0xf,0x2e,0x7e, 0x1,0x59,0x6e, 0x2,0x34,0x75, + 0x2,0x34,0x74, 0x1,0x59,0x6d, 0x3,0x35,0x41, 0x1,0x59,0x6c, + 0x1,0x59,0x6b, 0x1,0x59,0x6f, 0x1,0x59,0x6a, 0x3,0x35,0x3f, + 0x2,0x3b,0x39, 0x2,0x3b,0x36, 0x1,0x5e,0x6e, 0x2,0x3b,0x35, + 0x2,0x3b,0x3a, 0x4,0x37,0x24, 0x1,0x5e,0x70, 0x2,0x3b,0x38, + 0x1,0x5e,0x6d, 0x1,0x5e,0x6f, 0x2,0x3b,0x37, 0x3,0x3a,0x7e, + 0x2,0x42,0x4e, 0x3,0x40,0x74, 0x2,0x42,0x4f, 0x2,0x42,0x50, + 0x3,0x40,0x75, 0x3,0x40,0x76, 0x3,0x40,0x73, 0x4,0x3c,0x6e, + 0x1,0x68,0x4e, 0x1,0x68,0x56, 0x2,0x49,0x65, 0x1,0x68,0x50, + 0x1,0x68,0x54, 0x2,0x49,0x66, 0x1,0x68,0x55, 0x1,0x68,0x51, + 0x1,0x68,0x52, 0x1,0x68,0x4f, 0x1,0x68,0x53, 0x1,0x6c,0x50, + 0x2,0x3b,0x34, 0x1,0x6c,0x51, 0x1,0x6c,0x4f, 0x4,0x49,0x44, + 0x1,0x6c,0x4e, 0x2,0x56,0x67, 0x1,0x70,0x51, 0x2,0x5c,0x64, + 0x2,0x5c,0x65, 0x3,0x5a,0x35, 0x4,0x5f,0x55, 0x1,0x78,0x31, + 0x1,0x79,0x6a, 0x3,0x5e,0x2a, 0x1,0x44,0x50, 0x3,0x22,0x3e, + 0x1,0x47,0x79, 0x3,0x25,0x5e, 0x3,0x25,0x5c, 0x3,0x25,0x5d, + 0x3,0x28,0x50, 0x1,0x50,0x6c, 0x2,0x2e,0x6b, 0x1,0x55,0x2b, + 0x3,0x30,0x58, 0x3,0x30,0x59, 0x1,0x59,0x72, 0x1,0x59,0x71, + 0x1,0x59,0x70, 0x1,0x5e,0x71, 0x1,0x5e,0x72, 0x2,0x3b,0x3b, + 0x1,0x68,0x57, 0x1,0x70,0x52, 0x1,0x44,0x51, 0x2,0x21,0x3c, + 0x1,0x45,0x37, 0x2,0x21,0x55, 0x4,0x21,0x73, 0x3,0x22,0x3f, + 0x2,0x22,0x34, 0x1,0x47,0x7a, 0x4,0x22,0x5c, 0x3,0x23,0x52, + 0x3,0x28,0x51, 0x1,0x4c,0x7e, 0x3,0x2c,0x34, 0x3,0x3b,0x24, + 0x2,0x42,0x51, 0x3,0x40,0x78, 0x3,0x65,0x25, 0x1,0x44,0x52, + 0x4,0x21,0x4b, 0x1,0x45,0x38, 0x2,0x22,0x35, 0x2,0x23,0x5e, + 0x4,0x26,0x29, 0x2,0x23,0x5f, 0x3,0x25,0x5f, 0x1,0x49,0x7c, + 0xf,0x25,0x54, 0x3,0x2c,0x35, 0x2,0x3b,0x3c, 0x1,0x5e,0x73, + 0x2,0x42,0x52, 0x4,0x49,0x49, 0x3,0x54,0x54, 0x1,0x73,0x53, + 0x1,0x44,0x53, 0x1,0x44,0x67, 0x1,0x45,0x39, 0x2,0x21,0x56, + 0x1,0x46,0x47, 0x3,0x23,0x54, 0x1,0x4a,0x22, 0x1,0x4a,0x21, + 0x1,0x49,0x7d, 0x1,0x49,0x7e, 0x2,0x26,0x3a, 0x1,0x4d,0x22, + 0x1,0x4d,0x23, 0x2,0x26,0x3b, 0x1,0x4d,0x21, 0x3,0x28,0x54, + 0x3,0x28,0x55, 0x1,0x50,0x70, 0x2,0x29,0x79, 0x1,0x50,0x6f, + 0x1,0x50,0x6d, 0x1,0x50,0x6e, 0x1,0x55,0x2e, 0x1,0x55,0x2c, + 0x3,0x30,0x5a, 0x3,0x30,0x5b, 0x2,0x2e,0x6d, 0x1,0x55,0x2d, + 0x2,0x2e,0x6c, 0x3,0x64,0x6b, 0x1,0x55,0x22, 0x2,0x34,0x76, + 0x4,0x31,0x35, 0x3,0x35,0x43, 0x1,0x59,0x74, 0x1,0x59,0x75, + 0x3,0x3b,0x26, 0x3,0x3b,0x25, 0x1,0x59,0x73, 0x3,0x35,0x44, + 0x1,0x68,0x58, 0x2,0x49,0x67, 0x1,0x6c,0x52, 0x1,0x6c,0x53, + 0x2,0x50,0x2a, 0x1,0x73,0x54, 0x2,0x61,0x4e, 0x2,0x61,0x4f, + 0x3,0x5a,0x38, 0x1,0x7a,0x68, 0x2,0x70,0x36, 0x2,0x21,0x2b, + 0x1,0x45,0x3a, 0x4,0x22,0x5f, 0x1,0x44,0x54, 0x2,0x21,0x58, + 0x2,0x21,0x57, 0x4,0x21,0x76, 0x3,0x64,0x6c, 0x3,0x23,0x55, + 0x1,0x47,0x7b, 0x2,0x22,0x37, 0x2,0x22,0x38, 0x2,0x22,0x36, + 0x4,0x22,0x60, 0x2,0x22,0x39, 0x3,0x23,0x5a, 0xf,0x22,0x47, + 0x3,0x25,0x61, 0x3,0x25,0x66, 0x2,0x23,0x67, 0x4,0x23,0x7a, + 0x2,0x23,0x62, 0x2,0x23,0x64, 0x2,0x23,0x66, 0x2,0x23,0x63, + 0x1,0x4a,0x26, 0x2,0x23,0x60, 0x3,0x25,0x62, 0x2,0x23,0x61, + 0x1,0x4a,0x23, 0x1,0x4a,0x24, 0x2,0x23,0x65, 0x2,0x23,0x68, + 0x1,0x4a,0x25, 0x2,0x23,0x69, 0xf,0x23,0x7c, 0xf,0x23,0x78, + 0x3,0x25,0x63, 0x2,0x26,0x49, 0x3,0x28,0x5d, 0x2,0x26,0x43, + 0x2,0x26,0x3e, 0x1,0x4d,0x25, 0x2,0x26,0x46, 0x2,0x26,0x44, + 0x2,0x26,0x3d, 0x2,0x26,0x4a, 0x2,0x26,0x4d, 0x2,0x26,0x48, + 0x2,0x26,0x41, 0x1,0x4d,0x27, 0x2,0x26,0x47, 0x1,0x4d,0x28, + 0x2,0x26,0x42, 0x2,0x26,0x45, 0x2,0x26,0x3c, 0x2,0x26,0x40, + 0x2,0x26,0x4c, 0x1,0x4d,0x29, 0x4,0x26,0x2f, 0x1,0x4d,0x2a, + 0x3,0x28,0x5e, 0x2,0x26,0x3f, 0x2,0x26,0x4b, 0x1,0x4d,0x24, + 0x1,0x4d,0x26, 0x3,0x28,0x5c, 0x3,0x28,0x5f, 0x3,0x28,0x57, + 0x4,0x26,0x34, 0x3,0x28,0x58, 0x2,0x2a,0x2c, 0x2,0x2a,0x25, + 0x2,0x2a,0x2b, 0x2,0x2a,0x24, 0x2,0x2a,0x26, 0x2,0x29,0x7e, + 0x2,0x29,0x7c, 0x3,0x2c,0x3f, 0x2,0x2a,0x2d, 0x2,0x2a,0x2a, + 0x2,0x29,0x7a, 0x3,0x2c,0x3b, 0x1,0x50,0x72, 0x2,0x2a,0x28, + 0x2,0x2a,0x29, 0x3,0x64,0x6d, 0x2,0x2a,0x27, 0x2,0x29,0x7d, + 0x2,0x29,0x7b, 0x1,0x50,0x71, 0x2,0x2a,0x23, 0x2,0x2a,0x21, + 0x3,0x2c,0x3c, 0x3,0x2c,0x42, 0x2,0x2a,0x22, 0x2,0x2a,0x2e, + 0x3,0x2c,0x3e, 0x3,0x2c,0x41, 0x3,0x2c,0x43, 0x3,0x2c,0x3d, + 0x1,0x55,0x33, 0x3,0x30,0x63, 0x1,0x55,0x32, 0x3,0x30,0x5f, + 0x2,0x2e,0x6e, 0x1,0x55,0x2f, 0x2,0x2e,0x70, 0x3,0x30,0x64, + 0x1,0x55,0x34, 0x2,0x2e,0x71, 0x4,0x2c,0x60, 0x3,0x30,0x61, + 0x1,0x55,0x37, 0x3,0x30,0x62, 0x1,0x55,0x35, 0x2,0x2e,0x72, + 0x2,0x2a,0x2f, 0x2,0x2e,0x74, 0x3,0x30,0x5e, 0x1,0x55,0x31, + 0x4,0x2c,0x5c, 0x1,0x55,0x30, 0x4,0x2c,0x61, 0x2,0x2e,0x6f, + 0x2,0x2e,0x73, 0x1,0x55,0x36, 0x1,0x59,0x77, 0x1,0x59,0x76, + 0x3,0x35,0x4b, 0x3,0x35,0x48, 0x3,0x35,0x47, 0x2,0x34,0x78, + 0x2,0x34,0x7c, 0x2,0x34,0x7e, 0x1,0x59,0x78, 0x2,0x35,0x23, + 0x3,0x35,0x51, 0x1,0x59,0x7c, 0x2,0x35,0x25, 0x3,0x35,0x52, + 0x1,0x59,0x7e, 0x3,0x35,0x4f, 0x1,0x59,0x7a, 0x1,0x5a,0x24, + 0x3,0x35,0x55, 0x1,0x5a,0x21, 0x2,0x34,0x7a, 0x1,0x59,0x79, + 0x3,0x3b,0x2b, 0x2,0x34,0x79, 0x2,0x34,0x77, 0x2,0x35,0x27, + 0x2,0x34,0x7b, 0x3,0x35,0x46, 0x1,0x59,0x7b, 0x2,0x35,0x26, + 0x1,0x5a,0x22, 0x2,0x35,0x22, 0x2,0x35,0x21, 0x1,0x5a,0x23, + 0x2,0x34,0x7d, 0x1,0x59,0x7d, 0x3,0x35,0x4e, 0x6,0x3e,0x76, + 0x3,0x35,0x4a, 0x2,0x35,0x28, 0x3,0x35,0x54, 0x2,0x35,0x24, + 0x2,0x3b,0x4b, 0x2,0x3b,0x52, 0x2,0x3b,0x47, 0x1,0x5e,0x76, + 0x2,0x3b,0x43, 0x2,0x3b,0x53, 0x2,0x3b,0x3d, 0x2,0x3b,0x50, + 0x2,0x3b,0x4e, 0x2,0x3b,0x48, 0x3,0x3b,0x36, 0x2,0x3b,0x51, + 0x2,0x3b,0x4a, 0x3,0x3b,0x28, 0x2,0x3b,0x42, 0x2,0x3b,0x54, + 0x2,0x3b,0x40, 0x2,0x3b,0x4d, 0x2,0x3b,0x3e, 0x3,0x3b,0x27, + 0x2,0x3b,0x55, 0x3,0x3b,0x37, 0x1,0x5e,0x77, 0x3,0x3b,0x2a, + 0x2,0x3b,0x4f, 0x2,0x42,0x55, 0x2,0x3b,0x41, 0x1,0x5e,0x74, + 0x3,0x3b,0x2e, 0x2,0x3b,0x45, 0x3,0x3b,0x34, 0x1,0x5e,0x75, + 0x2,0x3b,0x44, 0x2,0x3b,0x49, 0x3,0x3b,0x33, 0x4,0x37,0x35, + 0x2,0x3b,0x46, 0x4,0x37,0x2f, 0x3,0x3b,0x31, 0x2,0x3b,0x4c, + 0x3,0x3b,0x2d, 0x2,0x42,0x59, 0x4,0x3c,0x79, 0x3,0x41,0x21, + 0x4,0x3c,0x7b, 0x2,0x42,0x5c, 0x2,0x42,0x54, 0x3,0x40,0x7c, + 0x2,0x42,0x56, 0x3,0x40,0x7a, 0x2,0x42,0x5b, 0x2,0x42,0x5a, + 0x1,0x63,0x69, 0x4,0x3c,0x75, 0x2,0x3b,0x3f, 0x2,0x42,0x58, + 0x3,0x40,0x79, 0x3,0x40,0x7d, 0x1,0x63,0x6a, 0x4,0x3c,0x74, + 0x2,0x42,0x53, 0x2,0x42,0x57, 0x4,0x3c,0x7c, 0x4,0x3c,0x78, + 0x3,0x64,0x6e, 0x2,0x49,0x6e, 0x3,0x46,0x5c, 0x2,0x49,0x75, + 0x2,0x49,0x6c, 0x3,0x46,0x54, 0x2,0x49,0x73, 0x2,0x49,0x6a, + 0x2,0x49,0x72, 0x2,0x49,0x76, 0x2,0x49,0x69, 0x2,0x49,0x6d, + 0x2,0x49,0x68, 0x3,0x46,0x56, 0x1,0x68,0x59, 0x4,0x43,0x2c, + 0x2,0x49,0x6b, 0x1,0x68,0x5a, 0x2,0x49,0x71, 0x2,0x49,0x70, + 0x2,0x49,0x6f, 0x3,0x46,0x59, 0x3,0x46,0x5a, 0x2,0x49,0x74, + 0x3,0x64,0x6f, 0x3,0x4b,0x65, 0x3,0x4b,0x66, 0x3,0x4b,0x63, + 0x2,0x50,0x2e, 0x2,0x50,0x30, 0x1,0x6c,0x55, 0x2,0x50,0x31, + 0x3,0x4b,0x6b, 0x2,0x50,0x2c, 0x3,0x4b,0x67, 0x2,0x50,0x2b, + 0x2,0x50,0x35, 0x3,0x4b,0x69, 0x2,0x50,0x33, 0x1,0x6c,0x54, + 0x2,0x50,0x36, 0x2,0x50,0x2d, 0x2,0x50,0x32, 0x2,0x50,0x34, + 0x2,0x50,0x2f, 0x3,0x4b,0x6a, 0x3,0x4b,0x68, 0x3,0x64,0x70, + 0x3,0x50,0x58, 0x2,0x56,0x6b, 0x2,0x56,0x70, 0x2,0x56,0x6a, + 0x2,0x56,0x6f, 0x3,0x50,0x5b, 0x2,0x56,0x68, 0x2,0x56,0x72, + 0x2,0x56,0x6e, 0x2,0x56,0x73, 0x2,0x56,0x6d, 0x2,0x56,0x69, + 0x2,0x56,0x71, 0x3,0x50,0x5a, 0x2,0x56,0x74, 0x2,0x56,0x6c, + 0x3,0x64,0x71, 0x2,0x5c,0x66, 0x1,0x73,0x58, 0x3,0x54,0x57, + 0x1,0x73,0x56, 0x3,0x54,0x59, 0x1,0x73,0x55, 0x1,0x73,0x57, + 0x3,0x54,0x55, 0x3,0x64,0x72, 0x2,0x61,0x50, 0x3,0x57,0x62, + 0x2,0x64,0x3e, 0x2,0x65,0x49, 0x3,0x5a,0x39, 0x2,0x68,0x70, + 0x2,0x68,0x71, 0x3,0x5c,0x3d, 0x1,0x79,0x6b, 0x3,0x5c,0x3c, + 0x2,0x6b,0x57, 0x3,0x5c,0x3e, 0x1,0x7a,0x69, 0x4,0x66,0x3b, + 0x2,0x6b,0x58, 0x3,0x5e,0x2d, 0x2,0x6d,0x4c, 0x1,0x7b,0x5e, + 0x3,0x5f,0x43, 0x1,0x7b,0x5d, 0x2,0x6d,0x4b, 0x1,0x7c,0x35, + 0x3,0x60,0x30, 0x2,0x6f,0x25, 0x4,0x6b,0x68, 0x4,0x6a,0x46, + 0x3,0x21,0x3c, 0x4,0x21,0x2c, 0x1,0x44,0x55, 0x1,0x47,0x7c, + 0x2,0x22,0x3a, 0x2,0x23,0x6a, 0x1,0x4b,0x56, 0x1,0x5a,0x25, + 0x3,0x35,0x57, 0x3,0x4b,0x6c, 0x1,0x44,0x56, 0x1,0x46,0x4a, + 0x1,0x46,0x49, 0x1,0x46,0x48, 0x4,0x22,0x63, 0x1,0x4a,0x27, + 0x1,0x55,0x38, 0x2,0x42,0x5d, 0x1,0x44,0x57, 0x1,0x44,0x58, + 0x1,0x44,0x59, 0x1,0x45,0x3b, 0x3,0x25,0x67, 0x3,0x28,0x60, + 0x1,0x50,0x73, 0x4,0x2c,0x64, 0x2,0x2a,0x30, 0x3,0x2c,0x45, + 0x3,0x2c,0x44, 0x1,0x5e,0x78, 0x1,0x44,0x5a, 0x2,0x21,0x3d, + 0x3,0x21,0x63, 0x4,0x21,0x4c, 0x1,0x46,0x4b, 0x1,0x46,0x4c, + 0x2,0x21,0x59, 0x1,0x47,0x7d, 0x5,0x22,0x5c, 0x3,0x23,0x5c, + 0x3,0x25,0x68, 0x2,0x23,0x6b, 0x3,0x25,0x6b, 0x1,0x4a,0x28, + 0x4,0x24,0x23, 0x2,0x23,0x6c, 0x1,0x4d,0x30, 0x3,0x28,0x62, + 0x3,0x28,0x61, 0x2,0x26,0x4f, 0x1,0x4d,0x2e, 0x1,0x4d,0x2d, + 0x2,0x26,0x4e, 0x1,0x4d,0x2b, 0x2,0x26,0x50, 0x1,0x4d,0x2c, + 0x1,0x4d,0x2f, 0x1,0x50,0x74, 0x3,0x2c,0x46, 0x1,0x50,0x76, + 0x2,0x2a,0x34, 0x2,0x2a,0x31, 0x2,0x2a,0x32, 0x2,0x2a,0x33, + 0x2,0x2a,0x35, 0x1,0x50,0x75, 0x2,0x2e,0x76, 0x2,0x2e,0x75, + 0x3,0x30,0x66, 0x1,0x55,0x3a, 0x3,0x30,0x69, 0x1,0x55,0x39, + 0x3,0x30,0x68, 0x3,0x30,0x6a, 0x3,0x30,0x67, 0x3,0x35,0x5b, + 0x1,0x5a,0x28, 0x2,0x35,0x2a, 0x3,0x35,0x59, 0x1,0x5a,0x27, + 0x1,0x5a,0x29, 0x1,0x5a,0x26, 0x3,0x35,0x58, 0x3,0x35,0x5a, + 0x1,0x5e,0x7a, 0x2,0x35,0x29, 0x5,0x37,0x7c, 0x1,0x5e,0x7b, + 0x2,0x3b,0x57, 0x3,0x39,0x79, 0x1,0x5e,0x7c, 0x2,0x3b,0x56, + 0x1,0x5e,0x79, 0x3,0x3b,0x3a, 0x3,0x3b,0x3b, 0x3,0x3b,0x3d, + 0x2,0x42,0x60, 0x2,0x42,0x62, 0x1,0x63,0x6b, 0x2,0x42,0x61, + 0x2,0x42,0x5f, 0x2,0x42,0x5e, 0x4,0x3d,0x2a, 0x4,0x43,0x35, + 0x3,0x46,0x5d, 0x2,0x49,0x79, 0x1,0x68,0x5f, 0x1,0x68,0x5d, + 0x4,0x43,0x30, 0x1,0x68,0x5e, 0x2,0x49,0x77, 0x2,0x49,0x78, + 0x3,0x4b,0x6d, 0x1,0x68,0x5b, 0x2,0x50,0x3a, 0x2,0x50,0x38, + 0x3,0x4b,0x70, 0x1,0x6c,0x57, 0x2,0x50,0x39, 0x1,0x6c,0x58, + 0x1,0x6c,0x56, 0x1,0x68,0x5c, 0xf,0x4e,0x5e, 0x3,0x64,0x73, + 0x2,0x56,0x77, 0x2,0x56,0x75, 0x2,0x56,0x76, 0x2,0x50,0x37, + 0x2,0x5c,0x68, 0x1,0x73,0x59, 0x2,0x5c,0x67, 0x2,0x61,0x51, + 0x2,0x61,0x52, 0x2,0x56,0x78, 0x2,0x65,0x4a, 0x3,0x66,0x77, + 0x1,0x44,0x5b, 0x1,0x46,0x4d, 0x1,0x48,0x21, 0x2,0x22,0x3b, + 0x1,0x47,0x7e, 0x3,0x28,0x63, 0x1,0x4d,0x31, 0x1,0x63,0x6c, + 0x3,0x21,0x3d, 0x1,0x45,0x3c, 0x1,0x46,0x4e, 0x1,0x50,0x77, + 0x1,0x5e,0x7d, 0x3,0x21,0x3e, 0x2,0x21,0x5a, 0x3,0x22,0x47, + 0x2,0x21,0x5b, 0x3,0x22,0x48, 0x2,0x22,0x3c, 0x3,0x66,0x78, + 0x1,0x4a,0x2a, 0x2,0x23,0x70, 0x2,0x23,0x6e, 0x1,0x4a,0x2b, + 0x2,0x23,0x6d, 0x2,0x23,0x6f, 0x2,0x23,0x71, 0x4,0x24,0x28, + 0x1,0x4a,0x29, 0x3,0x25,0x6e, 0x3,0x25,0x6d, 0x1,0x4d,0x35, + 0x1,0x4d,0x36, 0x1,0x4d,0x33, 0x3,0x28,0x65, 0x3,0x28,0x67, + 0x1,0x4d,0x32, 0x2,0x2a,0x39, 0x1,0x4d,0x34, 0x3,0x28,0x68, + 0x1,0x50,0x78, 0x3,0x2c,0x48, 0x2,0x2a,0x38, 0x2,0x2a,0x3a, + 0x2,0x2a,0x37, 0x2,0x2a,0x3b, 0x1,0x50,0x79, 0x1,0x55,0x3d, + 0x2,0x2e,0x77, 0x3,0x30,0x6c, 0x2,0x2e,0x79, 0x1,0x55,0x3b, + 0x2,0x2e,0x7a, 0x1,0x55,0x3c, 0x2,0x2e,0x78, 0x3,0x30,0x6b, + 0x2,0x2a,0x36, 0x2,0x35,0x2b, 0x2,0x35,0x2e, 0x2,0x35,0x2f, + 0x2,0x35,0x2c, 0x1,0x5a,0x2d, 0x1,0x5a,0x2c, 0x1,0x5a,0x2a, + 0x1,0x5a,0x2b, 0x2,0x35,0x2d, 0x3,0x35,0x61, 0x3,0x35,0x60, + 0x3,0x3b,0x3f, 0x1,0x5a,0x2e, 0x3,0x3b,0x40, 0x3,0x3b,0x3e, + 0x1,0x5f,0x21, 0x1,0x5f,0x22, 0x6,0x48,0x45, 0x1,0x5f,0x23, + 0x2,0x42,0x63, 0x2,0x42,0x65, 0x2,0x42,0x67, 0x1,0x63,0x6e, + 0x1,0x63,0x6d, 0x1,0x5e,0x7e, 0x2,0x42,0x66, 0x2,0x42,0x64, + 0x3,0x64,0x74, 0x2,0x49,0x7d, 0x3,0x46,0x61, 0x3,0x46,0x60, + 0x2,0x49,0x7b, 0x2,0x4a,0x23, 0x1,0x68,0x60, 0x2,0x4a,0x24, + 0x2,0x4a,0x21, 0x1,0x68,0x61, 0x2,0x49,0x7c, 0x2,0x49,0x7a, + 0x2,0x4a,0x22, 0x1,0x6c,0x5a, 0x2,0x50,0x3c, 0x2,0x49,0x7e, + 0x1,0x6c,0x5c, 0x2,0x50,0x3d, 0x1,0x6c,0x5b, 0x1,0x6c,0x5e, + 0x2,0x50,0x3e, 0x1,0x6c,0x59, 0x1,0x6c,0x5d, 0x2,0x56,0x7d, + 0x2,0x56,0x7b, 0x2,0x56,0x7a, 0x2,0x56,0x7c, 0x2,0x56,0x79, + 0x3,0x50,0x5c, 0x4,0x5b,0x21, 0x1,0x78,0x33, 0x3,0x64,0x75, + 0x2,0x68,0x72, 0x2,0x68,0x73, 0x3,0x5c,0x3f, 0x2,0x6b,0x59, + 0x2,0x6d,0x4d, 0x1,0x7d,0x22, 0x3,0x21,0x3f, 0x3,0x23,0x61, + 0x1,0x4d,0x37, 0x1,0x4a,0x2c, 0x3,0x28,0x69, 0x3,0x28,0x6b, + 0x1,0x50,0x7a, 0x3,0x2c,0x4c, 0x3,0x2c,0x4b, 0x3,0x30,0x6e, + 0x1,0x44,0x5c, 0x1,0x45,0x3d, 0x4,0x21,0x4d, 0x1,0x46,0x4f, + 0x2,0x22,0x3d, 0x3,0x25,0x6f, 0x1,0x4a,0x2d, 0x2,0x23,0x72, + 0x3,0x28,0x6d, 0x2,0x2a,0x3c, 0x1,0x50,0x7b, 0x1,0x68,0x62, + 0x1,0x44,0x5d, 0x3,0x21,0x64, 0x3,0x22,0x49, 0x3,0x23,0x62, + 0x1,0x48,0x22, 0xf,0x22,0x4e, 0x3,0x3b,0x42, 0x1,0x63,0x6f, + 0x1,0x44,0x5e, 0x1,0x45,0x3e, 0x1,0x45,0x3f, 0x1,0x46,0x51, + 0x1,0x46,0x50, 0x4,0x22,0x6b, 0x2,0x22,0x3e, 0x1,0x48,0x23, + 0x4,0x22,0x6c, 0x2,0x23,0x73, 0x3,0x25,0x71, 0x1,0x4a,0x2e, + 0x3,0x28,0x6e, 0x2,0x26,0x52, 0x2,0x26,0x53, 0x2,0x26,0x54, + 0x3,0x28,0x70, 0x1,0x4d,0x38, 0x1,0x4d,0x39, 0x2,0x26,0x51, + 0x1,0x4d,0x3a, 0x4,0x29,0x2c, 0x4,0x2c,0x70, 0x1,0x50,0x7c, + 0x2,0x2a,0x3d, 0x3,0x2c,0x4d, 0x2,0x2e,0x7c, 0x1,0x55,0x3e, + 0x3,0x30,0x6f, 0x2,0x2e,0x7b, 0x3,0x35,0x62, 0x1,0x5a,0x2f, + 0x2,0x35,0x30, 0x1,0x5a,0x30, 0x2,0x35,0x31, 0x3,0x35,0x63, + 0x3,0x3b,0x47, 0x3,0x3b,0x45, 0x1,0x5f,0x24, 0x4,0x37,0x45, + 0x3,0x3b,0x44, 0x4,0x3d,0x30, 0x2,0x42,0x68, 0xf,0x41,0x3f, + 0x3,0x41,0x22, 0x2,0x4a,0x26, 0x2,0x4a,0x25, 0x1,0x68,0x63, + 0x4,0x49,0x5e, 0x1,0x6c,0x5f, 0x2,0x50,0x3f, 0x1,0x70,0x53, + 0x2,0x56,0x7e, 0x1,0x73,0x5a, 0x3,0x57,0x63, 0x1,0x7b,0x5f, + 0x2,0x6f,0x27, 0x3,0x21,0x40, 0x3,0x21,0x41, 0x3,0x22,0x4a, + 0x3,0x23,0x51, 0x2,0x26,0x55, 0x3,0x28,0x71, 0x2,0x2a,0x3e, + 0x1,0x5a,0x31, 0x2,0x3b,0x58, 0x1,0x63,0x70, 0x3,0x41,0x23, + 0x3,0x50,0x5e, 0xf,0x54,0x43, 0x3,0x57,0x64, 0x1,0x76,0x41, + 0x3,0x61,0x64, 0x3,0x21,0x42, 0x1,0x4a,0x30, 0x3,0x25,0x72, + 0x1,0x4a,0x2f, 0x1,0x50,0x7d, 0x3,0x2c,0x50, 0x2,0x2e,0x7d, + 0x1,0x5a,0x33, 0x1,0x5d,0x29, 0x1,0x5a,0x34, 0x1,0x5a,0x32, + 0x1,0x5f,0x25, 0x3,0x41,0x24, 0x2,0x4a,0x27, 0x1,0x68,0x64, + 0x1,0x6c,0x60, 0x3,0x5f,0x45, 0x2,0x21,0x2c, 0x2,0x22,0x3f, + 0x4,0x22,0x6d, 0x2,0x23,0x75, 0x1,0x4a,0x31, 0x2,0x23,0x74, + 0x1,0x4a,0x32, 0x4,0x24,0x2c, 0x1,0x4d,0x3e, 0x2,0x26,0x58, + 0x2,0x26,0x57, 0x1,0x4d,0x3d, 0x1,0x4d,0x3b, 0x1,0x4d,0x3c, + 0x2,0x26,0x56, 0x3,0x28,0x76, 0x3,0x28,0x75, 0x1,0x51,0x21, + 0x2,0x2a,0x3f, 0x1,0x51,0x24, 0x1,0x50,0x7e, 0x1,0x51,0x26, + 0x1,0x51,0x22, 0x1,0x51,0x23, 0x1,0x51,0x25, 0x4,0x29,0x31, + 0x3,0x30,0x70, 0x3,0x30,0x72, 0x1,0x55,0x41, 0x1,0x55,0x40, + 0x1,0x55,0x3f, 0x3,0x30,0x71, 0x3,0x64,0x76, 0x2,0x35,0x33, + 0x1,0x5a,0x35, 0x1,0x5a,0x38, 0x1,0x5a,0x36, 0x3,0x64,0x77, + 0x2,0x35,0x32, 0x1,0x5a,0x3b, 0x4,0x31,0x53, 0x1,0x5a,0x37, + 0x2,0x35,0x34, 0x1,0x5a,0x3a, 0x1,0x5a,0x39, 0x4,0x31,0x52, + 0x4,0x31,0x57, 0x4,0x37,0x4a, 0x2,0x3b,0x5a, 0x2,0x3b,0x59, + 0x3,0x3b,0x4b, 0x1,0x5f,0x28, 0x1,0x5f,0x26, 0x1,0x5f,0x27, + 0x2,0x3b,0x5b, 0x1,0x63,0x71, 0x2,0x42,0x6a, 0x1,0x63,0x72, + 0x2,0x42,0x69, 0x4,0x3d,0x34, 0x4,0x43,0x3f, 0x2,0x50,0x40, + 0x3,0x46,0x63, 0x3,0x46,0x64, 0x1,0x6c,0x62, 0x2,0x4a,0x28, + 0x1,0x6c,0x61, 0x3,0x4b,0x72, 0x1,0x68,0x65, 0x3,0x64,0x78, + 0x2,0x57,0x22, 0x2,0x57,0x21, 0x1,0x73,0x5b, 0x2,0x5c,0x69, + 0x2,0x65,0x4b, 0x2,0x68,0x74, 0x2,0x68,0x75, 0x3,0x5e,0x2f, + 0x1,0x45,0x40, 0x4,0x21,0x36, 0x1,0x46,0x52, 0x3,0x22,0x4d, + 0x4,0x22,0x71, 0x2,0x21,0x5c, 0x3,0x22,0x4c, 0x5,0x22,0x66, + 0x1,0x4a,0x34, 0x1,0x4a,0x36, 0x3,0x25,0x78, 0x2,0x22,0x42, + 0x2,0x23,0x78, 0x2,0x23,0x77, 0x2,0x23,0x76, 0x3,0x23,0x66, + 0x2,0x22,0x41, 0x2,0x22,0x40, 0x1,0x48,0x25, 0x1,0x4a,0x35, + 0x1,0x4a,0x33, 0x1,0x48,0x24, 0x3,0x23,0x67, 0x3,0x23,0x69, + 0x3,0x25,0x77, 0x1,0x4d,0x3f, 0x2,0x26,0x59, 0x3,0x25,0x7b, + 0x1,0x4d,0x40, 0x2,0x23,0x7d, 0x4,0x26,0x50, 0x2,0x24,0x21, + 0x2,0x23,0x7e, 0x2,0x26,0x5a, 0x3,0x25,0x76, 0x3,0x25,0x74, + 0x2,0x23,0x7a, 0x3,0x28,0x7e, 0x1,0x4a,0x3a, 0x1,0x4a,0x38, + 0x3,0x25,0x7c, 0x2,0x23,0x79, 0x2,0x23,0x7b, 0x2,0x24,0x23, + 0x3,0x26,0x22, 0x1,0x4a,0x37, 0x3,0x26,0x21, 0x2,0x23,0x7c, + 0x2,0x24,0x27, 0x1,0x4d,0x42, 0x3,0x25,0x7d, 0x2,0x24,0x24, + 0x1,0x4a,0x39, 0x3,0x26,0x23, 0x2,0x24,0x22, 0x2,0x24,0x25, + 0x3,0x25,0x7a, 0x1,0x4d,0x41, 0x3,0x25,0x75, 0x1,0x4d,0x43, + 0x2,0x24,0x26, 0x3,0x28,0x78, 0x3,0x29,0x22, 0x2,0x26,0x6e, + 0x2,0x26,0x61, 0x2,0x26,0x5f, 0x2,0x26,0x6d, 0x2,0x26,0x68, + 0x1,0x51,0x2b, 0x1,0x4d,0x44, 0x2,0x26,0x69, 0x2,0x26,0x6c, + 0x1,0x51,0x27, 0x2,0x26,0x6b, 0x1,0x4d,0x45, 0x1,0x4d,0x4a, + 0x1,0x4d,0x48, 0x2,0x26,0x62, 0x4,0x29,0x36, 0x2,0x26,0x5d, + 0x2,0x26,0x64, 0x1,0x4d,0x4f, 0x2,0x26,0x6f, 0x1,0x51,0x28, + 0x2,0x26,0x65, 0x4,0x26,0x4f, 0x1,0x51,0x29, 0x1,0x4d,0x4b, + 0x2,0x26,0x67, 0x3,0x2c,0x5a, 0x2,0x2a,0x4e, 0x1,0x51,0x2a, + 0x2,0x26,0x5c, 0x1,0x4d,0x4c, 0x1,0x51,0x2c, 0x1,0x4d,0x4d, + 0x1,0x4d,0x49, 0x1,0x4d,0x4e, 0x2,0x26,0x66, 0x2,0x26,0x5b, + 0x2,0x26,0x6a, 0x1,0x4d,0x46, 0x3,0x28,0x77, 0x3,0x2c,0x5b, + 0x2,0x26,0x5e, 0x2,0x26,0x63, 0x2,0x26,0x60, 0x1,0x4d,0x47, + 0x3,0x28,0x7a, 0x2,0x2a,0x40, 0x4,0x29,0x45, 0x2,0x2a,0x41, + 0x3,0x29,0x21, 0x2,0x2a,0x4b, 0x2,0x2f,0x23, 0x2,0x2a,0x4c, + 0x1,0x51,0x32, 0x2,0x2a,0x4f, 0x2,0x2a,0x45, 0x1,0x51,0x31, + 0x2,0x2a,0x47, 0x4,0x29,0x3f, 0x2,0x2a,0x48, 0x3,0x2c,0x60, + 0x3,0x30,0x79, 0x2,0x2a,0x4a, 0x1,0x51,0x2d, 0x3,0x2c,0x56, + 0x3,0x30,0x73, 0x1,0x55,0x45, 0x3,0x2c,0x57, 0x3,0x2c,0x5d, + 0x2,0x2a,0x46, 0x2,0x2a,0x42, 0x1,0x55,0x46, 0x3,0x30,0x7e, + 0x4,0x29,0x3e, 0x2,0x2a,0x50, 0x1,0x55,0x42, 0x2,0x2f,0x21, + 0x2,0x2a,0x49, 0x3,0x2c,0x54, 0x2,0x2e,0x7e, 0x2,0x2a,0x44, + 0x2,0x2a,0x4d, 0x3,0x2c,0x5f, 0x3,0x2c,0x61, 0x1,0x51,0x30, + 0x1,0x55,0x43, 0x1,0x51,0x36, 0x1,0x55,0x44, 0x2,0x2a,0x51, + 0x2,0x2f,0x22, 0x1,0x51,0x2f, 0x1,0x55,0x48, 0x1,0x51,0x35, + 0x1,0x51,0x34, 0x1,0x51,0x33, 0x1,0x55,0x47, 0x2,0x2a,0x52, + 0x1,0x55,0x49, 0x1,0x51,0x2e, 0x4,0x29,0x4b, 0x2,0x2a,0x43, + 0x3,0x30,0x7a, 0x3,0x30,0x78, 0x3,0x30,0x7b, 0x3,0x2c,0x5c, + 0x3,0x30,0x76, 0x1,0x5a,0x3c, 0x2,0x2f,0x26, 0x2,0x2f,0x28, + 0x4,0x2d,0x25, 0x2,0x2f,0x2a, 0x1,0x55,0x4a, 0x1,0x55,0x50, + 0x2,0x35,0x37, 0x2,0x2f,0x2e, 0x2,0x2f,0x25, 0x1,0x5a,0x3e, + 0x2,0x35,0x35, 0x3,0x31,0x22, 0x1,0x55,0x4f, 0x1,0x55,0x4d, + 0x2,0x2f,0x30, 0x4,0x2d,0x2d, 0x2,0x35,0x36, 0x4,0x2d,0x2c, + 0x2,0x2f,0x27, 0x3,0x31,0x25, 0x1,0x55,0x4e, 0x2,0x2f,0x2b, + 0x1,0x55,0x51, 0x2,0x2f,0x2d, 0x3,0x35,0x68, 0x3,0x30,0x74, + 0x1,0x55,0x4c, 0x2,0x2f,0x2c, 0x2,0x2f,0x2f, 0x2,0x2f,0x29, + 0x3,0x31,0x27, 0x1,0x55,0x4b, 0x1,0x5a,0x3f, 0x3,0x35,0x71, + 0x2,0x2f,0x24, 0x1,0x5a,0x3d, 0x3,0x35,0x72, 0x4,0x31,0x6b, + 0x3,0x31,0x23, 0x3,0x31,0x28, 0x1,0x5a,0x40, 0x3,0x31,0x21, + 0x3,0x35,0x6f, 0x3,0x31,0x26, 0x2,0x35,0x39, 0x2,0x35,0x42, + 0x1,0x5f,0x2b, 0x3,0x3b,0x54, 0x1,0x5a,0x42, 0x1,0x5a,0x47, + 0x1,0x5f,0x2c, 0x2,0x35,0x44, 0x1,0x5a,0x4e, 0x2,0x3b,0x5d, + 0x2,0x35,0x3a, 0x1,0x5a,0x46, 0x1,0x5a,0x49, 0x1,0x5a,0x44, + 0x2,0x35,0x38, 0x2,0x35,0x46, 0x2,0x35,0x49, 0x2,0x3b,0x6c, + 0x4,0x31,0x68, 0x2,0x35,0x47, 0x2,0x3b,0x61, 0x1,0x5a,0x45, + 0x1,0x5a,0x4c, 0x1,0x5a,0x50, 0x2,0x35,0x41, 0x2,0x3b,0x5c, + 0x2,0x35,0x45, 0x1,0x5a,0x41, 0x2,0x3b,0x5e, 0x2,0x35,0x48, + 0x2,0x3b,0x60, 0x2,0x35,0x3d, 0x3,0x35,0x6a, 0x1,0x5f,0x29, + 0x3,0x3b,0x56, 0x2,0x35,0x3b, 0x2,0x35,0x3c, 0x1,0x5a,0x4b, + 0x3,0x3b,0x55, 0x3,0x35,0x6e, 0x1,0x5a,0x4a, 0x2,0x35,0x3f, + 0x1,0x5a,0x4f, 0x2,0x35,0x43, 0x1,0x5a,0x48, 0x2,0x35,0x40, + 0x3,0x35,0x79, 0x1,0x5a,0x4d, 0x1,0x5f,0x2d, 0x1,0x5f,0x2a, + 0x2,0x3b,0x5f, 0x3,0x3b,0x58, 0x2,0x35,0x3e, 0x3,0x3b,0x59, + 0x1,0x5a,0x43, 0x3,0x35,0x76, 0x3,0x35,0x78, 0x3,0x3b,0x5a, + 0x3,0x3b,0x4d, 0x3,0x35,0x74, 0x1,0x5f,0x32, 0x1,0x5f,0x36, + 0x2,0x3b,0x63, 0x1,0x63,0x77, 0x1,0x5f,0x34, 0x2,0x3b,0x67, + 0x1,0x5f,0x38, 0x2,0x42,0x6b, 0x2,0x3b,0x69, 0x1,0x63,0x79, + 0x1,0x5f,0x30, 0x1,0x5f,0x33, 0x2,0x3b,0x6a, 0x3,0x3b,0x5e, + 0x2,0x3b,0x6b, 0x2,0x3b,0x71, 0x1,0x5f,0x3a, 0x1,0x63,0x7a, + 0x4,0x3d,0x3d, 0x2,0x3b,0x6d, 0x2,0x3b,0x72, 0x2,0x3b,0x66, + 0x1,0x64,0x26, 0x3,0x3b,0x4f, 0x1,0x63,0x7b, 0x1,0x5f,0x39, + 0x2,0x3b,0x64, 0x2,0x3b,0x73, 0x3,0x3b,0x51, 0x1,0x64,0x25, + 0x1,0x5f,0x37, 0x1,0x63,0x74, 0x2,0x3b,0x70, 0x3,0x3b,0x5d, + 0x1,0x5f,0x3b, 0x2,0x3b,0x68, 0x2,0x3b,0x62, 0x1,0x5f,0x31, + 0x2,0x3b,0x65, 0x5,0x3f,0x30, 0x2,0x3b,0x6e, 0x3,0x41,0x2b, + 0x1,0x63,0x73, 0x1,0x63,0x78, 0x1,0x5f,0x2e, 0x2,0x3b,0x6f, + 0x3,0x3b,0x61, 0x1,0x63,0x76, 0x3,0x3b,0x62, 0x3,0x3b,0x63, + 0x3,0x3b,0x50, 0x1,0x5f,0x2f, 0x3,0x64,0x79, 0x1,0x64,0x24, + 0x2,0x4a,0x2a, 0x2,0x42,0x76, 0x3,0x41,0x29, 0x2,0x42,0x6e, + 0x2,0x4a,0x29, 0x4,0x3d,0x39, 0x2,0x42,0x72, 0x2,0x42,0x74, + 0x3,0x41,0x27, 0x3,0x41,0x2c, 0x2,0x42,0x71, 0x3,0x46,0x6f, + 0x1,0x64,0x23, 0x4,0x3d,0x38, 0x2,0x42,0x70, 0x1,0x64,0x27, + 0x3,0x46,0x6e, 0x6,0x52,0x64, 0x3,0x41,0x28, 0x2,0x4a,0x39, + 0x3,0x46,0x6c, 0x3,0x41,0x2e, 0x1,0x64,0x22, 0x1,0x68,0x67, + 0x2,0x42,0x77, 0x2,0x4a,0x2b, 0x3,0x46,0x6d, 0x3,0x41,0x2a, + 0x1,0x63,0x7e, 0x2,0x42,0x6f, 0x2,0x42,0x73, 0x1,0x68,0x66, + 0x1,0x63,0x75, 0x2,0x42,0x6c, 0x2,0x42,0x6d, 0x1,0x68,0x68, + 0x1,0x63,0x7d, 0x1,0x64,0x21, 0x1,0x63,0x7c, 0x2,0x42,0x75, + 0x3,0x64,0x7a, 0x2,0x4a,0x2f, 0x2,0x4a,0x30, 0x2,0x4a,0x35, + 0x1,0x6c,0x67, 0x2,0x4a,0x3c, 0x3,0x4b,0x73, 0x1,0x68,0x6e, + 0x3,0x4b,0x7e, 0x1,0x68,0x6d, 0x2,0x4a,0x37, 0x3,0x4b,0x74, + 0x1,0x6c,0x66, 0x2,0x4a,0x2c, 0x1,0x68,0x6c, 0x3,0x46,0x71, + 0x2,0x4a,0x3b, 0x1,0x68,0x6a, 0x1,0x68,0x6b, 0x3,0x4b,0x7c, + 0x2,0x4a,0x38, 0x2,0x50,0x51, 0x1,0x6c,0x64, 0x1,0x5f,0x35, + 0x3,0x46,0x72, 0x2,0x4a,0x3a, 0x1,0x6c,0x6b, 0x2,0x4a,0x32, + 0x4,0x49,0x6f, 0x1,0x6c,0x65, 0x3,0x46,0x6a, 0x1,0x6c,0x6a, + 0x2,0x4a,0x2d, 0x2,0x4a,0x31, 0x2,0x4a,0x2e, 0x2,0x4a,0x34, + 0x1,0x68,0x6f, 0x1,0x6c,0x63, 0x1,0x68,0x69, 0x3,0x4c,0x21, + 0x2,0x50,0x43, 0x2,0x4a,0x36, 0x3,0x46,0x68, 0x1,0x6c,0x69, + 0x3,0x46,0x73, 0x1,0x6c,0x6c, 0x7,0x22,0x71, 0x2,0x4a,0x33, + 0x3,0x46,0x6b, 0x1,0x6c,0x68, 0x2,0x50,0x42, 0x5,0x4d,0x2a, + 0x3,0x4c,0x23, 0x3,0x46,0x74, 0x3,0x4c,0x24, 0x3,0x4b,0x77, + 0x2,0x50,0x47, 0x1,0x70,0x57, 0x2,0x50,0x41, 0x2,0x57,0x2e, + 0x2,0x50,0x50, 0x1,0x6c,0x70, 0x3,0x4b,0x7a, 0x1,0x6c,0x6e, + 0x1,0x70,0x55, 0x2,0x50,0x4d, 0x2,0x50,0x49, 0x1,0x6c,0x74, + 0x3,0x4b,0x76, 0x2,0x57,0x25, 0x3,0x50,0x68, 0x3,0x4c,0x28, + 0x3,0x50,0x67, 0x1,0x6c,0x72, 0x2,0x50,0x48, 0x3,0x4c,0x29, + 0x2,0x57,0x23, 0x3,0x4c,0x25, 0x2,0x50,0x4c, 0x4,0x50,0x3b, + 0x2,0x50,0x4f, 0x2,0x50,0x46, 0x3,0x4b,0x79, 0x1,0x6c,0x73, + 0x4,0x50,0x37, 0x3,0x4b,0x75, 0x1,0x6c,0x6d, 0x2,0x57,0x24, + 0x1,0x70,0x56, 0x2,0x50,0x4e, 0x1,0x6c,0x6f, 0x1,0x6c,0x71, + 0x2,0x50,0x4b, 0x1,0x6c,0x75, 0x2,0x50,0x4a, 0x2,0x50,0x45, + 0x2,0x50,0x44, 0x1,0x70,0x54, 0x2,0x50,0x52, 0x2,0x57,0x27, + 0x2,0x5c,0x6b, 0x1,0x70,0x59, 0x3,0x50,0x61, 0x2,0x57,0x2d, + 0x3,0x50,0x63, 0x2,0x57,0x2b, 0x3,0x50,0x6a, 0x2,0x5c,0x6c, + 0x3,0x50,0x64, 0x1,0x70,0x5a, 0x2,0x57,0x2c, 0x3,0x50,0x66, + 0x2,0x57,0x29, 0x1,0x73,0x5d, 0x2,0x5c,0x6a, 0x3,0x50,0x6c, + 0x2,0x57,0x26, 0x2,0x57,0x28, 0x1,0x73,0x5e, 0x1,0x70,0x5c, + 0x1,0x73,0x5c, 0x1,0x70,0x5b, 0x1,0x73,0x60, 0x2,0x57,0x2a, + 0x1,0x70,0x58, 0x3,0x50,0x62, 0x3,0x50,0x65, 0x3,0x50,0x6b, + 0x3,0x66,0x79, 0x4,0x5b,0x2b, 0x2,0x61,0x5b, 0x4,0x56,0x33, + 0x2,0x61,0x53, 0x3,0x54,0x61, 0x3,0x54,0x5f, 0x3,0x54,0x5c, + 0x3,0x54,0x5e, 0x3,0x54,0x5d, 0x2,0x5c,0x72, 0x2,0x61,0x54, + 0x2,0x5c,0x6e, 0x4,0x56,0x32, 0x3,0x54,0x5b, 0x1,0x76,0x42, + 0x2,0x5c,0x70, 0x2,0x5c,0x6f, 0x1,0x73,0x5f, 0x2,0x5c,0x6d, + 0x2,0x5c,0x71, 0x2,0x61,0x5c, 0x2,0x61,0x58, 0x2,0x61,0x5a, + 0x4,0x5f,0x60, 0x2,0x61,0x55, 0x2,0x61,0x56, 0x4,0x5f,0x61, + 0x2,0x61,0x59, 0x2,0x61,0x57, 0x1,0x78,0x34, 0x3,0x57,0x65, + 0x1,0x78,0x37, 0x1,0x78,0x36, 0x1,0x78,0x35, 0x1,0x79,0x6c, + 0x2,0x68,0x76, 0x1,0x79,0x6d, 0x2,0x65,0x4c, 0x1,0x7a,0x6a, + 0x2,0x6b,0x5a, 0x1,0x7a,0x6b, 0x1,0x7b,0x60, 0x1,0x7c,0x36, + 0x2,0x6f,0x28, 0x3,0x5f,0x46, 0x2,0x6f,0x29, 0x2,0x6f,0x2a, + 0x3,0x61,0x3e, 0x2,0x72,0x2a, 0x1,0x45,0x41, 0x2,0x21,0x5d, + 0x1,0x46,0x53, 0x1,0x48,0x27, 0x1,0x48,0x28, 0x1,0x48,0x26, + 0x3,0x23,0x6b, 0x1,0x48,0x29, 0x1,0x4a,0x3c, 0x1,0x4a,0x3b, + 0x3,0x26,0x25, 0x2,0x26,0x70, 0x1,0x4d,0x51, 0x1,0x4d,0x50, + 0x3,0x2c,0x63, 0x2,0x2f,0x31, 0x1,0x5a,0x51, 0x1,0x5a,0x52, + 0x4,0x31,0x6e, 0x4,0x31,0x70, 0x3,0x3b,0x64, 0x1,0x5f,0x3c, + 0x2,0x42,0x78, 0x1,0x64,0x28, 0x1,0x64,0x29, 0x2,0x42,0x7a, + 0x2,0x42,0x7c, 0x2,0x42,0x7b, 0x4,0x3d,0x43, 0x2,0x4a,0x3e, + 0x3,0x46,0x76, 0x2,0x4a,0x3d, 0x1,0x68,0x70, 0x2,0x4a,0x3f, + 0x3,0x46,0x75, 0x2,0x50,0x53, 0x1,0x6c,0x76, 0x3,0x4c,0x2c, + 0x1,0x70,0x5d, 0x3,0x50,0x6d, 0x1,0x73,0x61, 0x1,0x76,0x43, + 0x1,0x73,0x62, 0x3,0x5f,0x48, 0x1,0x45,0x42, 0x3,0x21,0x65, + 0x3,0x21,0x66, 0x3,0x22,0x4e, 0x2,0x24,0x28, 0x3,0x26,0x28, + 0x3,0x26,0x29, 0x2,0x26,0x71, 0x1,0x4d,0x53, 0x1,0x4d,0x52, + 0x1,0x4d,0x54, 0x1,0x51,0x37, 0x2,0x2a,0x53, 0x2,0x2a,0x54, + 0x3,0x31,0x29, 0x2,0x2f,0x32, 0x1,0x55,0x52, 0x1,0x5a,0x53, + 0x1,0x5f,0x3d, 0x2,0x3b,0x74, 0x1,0x45,0x43, 0x4,0x21,0x37, + 0x1,0x44,0x5f, 0x1,0x45,0x44, 0x3,0x22,0x50, 0x2,0x21,0x5e, + 0x1,0x46,0x57, 0x1,0x46,0x56, 0x1,0x46,0x54, 0x1,0x46,0x55, + 0x3,0x23,0x6f, 0x1,0x48,0x2c, 0x2,0x22,0x49, 0x2,0x22,0x4b, + 0x1,0x48,0x2b, 0x2,0x22,0x43, 0x3,0x23,0x6c, 0x2,0x22,0x44, + 0x3,0x23,0x6d, 0x2,0x22,0x4a, 0x2,0x22,0x46, 0x2,0x22,0x48, + 0x1,0x48,0x2a, 0x2,0x22,0x45, 0x2,0x22,0x4c, 0x2,0x22,0x47, + 0x3,0x23,0x6e, 0xf,0x22,0x51, 0x1,0x4a,0x43, 0x1,0x4a,0x4c, + 0x1,0x4a,0x4a, 0x2,0x24,0x32, 0x2,0x24,0x2f, 0x2,0x24,0x37, + 0x1,0x4a,0x48, 0x2,0x24,0x38, 0x3,0x26,0x39, 0x1,0x4a,0x41, + 0x2,0x24,0x35, 0x3,0x26,0x2e, 0x1,0x4a,0x47, 0x2,0x24,0x31, + 0x2,0x24,0x30, 0x1,0x4a,0x45, 0x2,0x24,0x36, 0x1,0x4a,0x46, + 0x1,0x4d,0x55, 0x1,0x4a,0x40, 0x2,0x24,0x33, 0x3,0x26,0x2a, + 0x2,0x24,0x29, 0x1,0x4a,0x3d, 0x3,0x26,0x37, 0x1,0x4a,0x50, + 0x2,0x24,0x2e, 0x2,0x24,0x34, 0x1,0x4a,0x42, 0x1,0x4a,0x44, + 0x3,0x26,0x2f, 0x2,0x24,0x2a, 0x3,0x26,0x36, 0x2,0x24,0x2b, + 0x2,0x24,0x2c, 0x4,0x24,0x39, 0x1,0x4a,0x4f, 0x1,0x4a,0x49, + 0x1,0x4a,0x4e, 0x2,0x24,0x2d, 0x1,0x4a,0x4d, 0x1,0x4a,0x3f, + 0x1,0x4a,0x3e, 0x1,0x4a,0x4b, 0x3,0x26,0x35, 0x4,0x24,0x3c, + 0x3,0x26,0x33, 0x3,0x26,0x34, 0x3,0x26,0x38, 0x3,0x26,0x31, + 0x3,0x64,0x7b, 0xf,0x24,0x39, 0x3,0x26,0x32, 0x3,0x29,0x31, + 0x3,0x29,0x2a, 0x1,0x4d,0x63, 0x2,0x26,0x7d, 0x2,0x26,0x76, + 0x1,0x4d,0x5e, 0x1,0x4d,0x71, 0x2,0x26,0x72, 0x2,0x26,0x79, + 0x2,0x26,0x7b, 0x2,0x26,0x7e, 0x1,0x4d,0x6c, 0x3,0x29,0x26, + 0x2,0x26,0x7a, 0x2,0x26,0x73, 0x1,0x4d,0x6a, 0x2,0x26,0x77, + 0x3,0x29,0x28, 0x2,0x27,0x21, 0x1,0x4d,0x5b, 0x3,0x29,0x25, + 0x2,0x26,0x7c, 0x1,0x4d,0x65, 0x1,0x4d,0x64, 0x2,0x26,0x75, + 0x1,0x4d,0x59, 0x3,0x29,0x34, 0x3,0x29,0x32, 0x1,0x4d,0x5a, + 0xf,0x27,0x30, 0x1,0x4d,0x58, 0x3,0x29,0x33, 0x1,0x4d,0x70, + 0x1,0x4d,0x68, 0x1,0x4d,0x62, 0x1,0x4d,0x56, 0x2,0x26,0x78, + 0x1,0x4d,0x61, 0x1,0x4d,0x57, 0x1,0x4d,0x69, 0x1,0x4d,0x72, + 0x2,0x2a,0x55, 0x1,0x4d,0x66, 0x2,0x26,0x74, 0x1,0x4d,0x5c, + 0x1,0x4d,0x5f, 0x1,0x4d,0x60, 0x3,0x29,0x2e, 0x1,0x4d,0x6e, + 0x1,0x4d,0x6f, 0x1,0x4d,0x6d, 0x1,0x4d,0x67, 0x1,0x4d,0x6b, + 0x1,0x4d,0x5d, 0x1,0x51,0x38, 0x3,0x29,0x30, 0x3,0x29,0x37, + 0x3,0x29,0x35, 0x3,0x29,0x36, 0x3,0x29,0x2f, 0x3,0x29,0x29, + 0x3,0x2c,0x6d, 0x2,0x2a,0x5b, 0x1,0x51,0x44, 0x1,0x51,0x3c, + 0x1,0x51,0x3e, 0x1,0x51,0x43, 0x2,0x2a,0x67, 0x1,0x51,0x41, + 0x2,0x2f,0x33, 0x1,0x55,0x53, 0x1,0x51,0x46, 0x2,0x2a,0x58, + 0x2,0x2a,0x60, 0x1,0x51,0x42, 0x2,0x2a,0x5f, 0x2,0x2a,0x5c, + 0x2,0x2a,0x64, 0x2,0x2a,0x66, 0x1,0x51,0x3b, 0x1,0x51,0x3f, + 0x1,0x51,0x45, 0x1,0x55,0x55, 0x2,0x2a,0x61, 0x1,0x51,0x3d, + 0x1,0x51,0x48, 0x2,0x2a,0x5a, 0x3,0x2c,0x6f, 0x3,0x2c,0x70, + 0x5,0x29,0x45, 0x1,0x51,0x40, 0x1,0x55,0x54, 0x1,0x51,0x3a, + 0x4,0x29,0x59, 0x2,0x2a,0x57, 0x2,0x2a,0x5e, 0x2,0x2a,0x56, + 0x2,0x2a,0x59, 0x2,0x2a,0x5d, 0x2,0x2f,0x34, 0x1,0x51,0x47, + 0x4,0x29,0x51, 0x2,0x2a,0x62, 0x2,0x2a,0x63, 0x2,0x2a,0x65, + 0x1,0x51,0x39, 0x3,0x2c,0x6c, 0x3,0x31,0x32, 0x3,0x31,0x33, + 0x3,0x2c,0x6b, 0x3,0x2c,0x6e, 0x4,0x29,0x5b, 0x1,0x55,0x63, + 0x2,0x2f,0x40, 0x1,0x55,0x61, 0x1,0x55,0x62, 0x2,0x2f,0x36, + 0x2,0x2f,0x46, 0x3,0x31,0x2c, 0x1,0x55,0x58, 0x3,0x31,0x2f, + 0x3,0x31,0x35, 0x2,0x35,0x4a, 0x2,0x2f,0x48, 0x2,0x2f,0x42, + 0x3,0x31,0x38, 0x2,0x2f,0x39, 0x3,0x31,0x37, 0x2,0x2f,0x4b, + 0x2,0x2f,0x3c, 0x1,0x55,0x5e, 0x2,0x35,0x61, 0x2,0x2f,0x3f, + 0x1,0x55,0x60, 0x1,0x55,0x57, 0x3,0x31,0x3c, 0x2,0x2f,0x4d, + 0x2,0x2f,0x41, 0x1,0x55,0x5a, 0x2,0x2f,0x3a, 0x2,0x2f,0x37, + 0x2,0x2f,0x38, 0x1,0x55,0x5b, 0x2,0x2f,0x47, 0x2,0x2f,0x4e, + 0x1,0x55,0x5d, 0x2,0x2f,0x3e, 0x2,0x2f,0x3d, 0x1,0x55,0x65, + 0x1,0x55,0x64, 0x1,0x55,0x56, 0x1,0x55,0x5c, 0x1,0x55,0x5f, + 0x2,0x2f,0x4a, 0x3,0x31,0x2e, 0x3,0x31,0x39, 0x2,0x2f,0x44, + 0x1,0x55,0x59, 0x2,0x2f,0x35, 0x2,0x2f,0x4c, 0x2,0x2f,0x43, + 0x2,0x2f,0x45, 0x2,0x2f,0x49, 0x3,0x31,0x30, 0x3,0x31,0x3b, + 0x3,0x31,0x36, 0x3,0x64,0x7c, 0x3,0x64,0x7d, 0x2,0x35,0x4b, + 0x3,0x36,0x31, 0x1,0x5a,0x5b, 0x1,0x5a,0x6f, 0x1,0x5a,0x6e, + 0x3,0x36,0x27, 0x1,0x5a,0x63, 0x3,0x36,0x29, 0x2,0x35,0x5d, + 0x2,0x35,0x59, 0x2,0x35,0x56, 0x2,0x35,0x68, 0x1,0x5a,0x5e, + 0x1,0x5a,0x56, 0x3,0x36,0x26, 0x3,0x36,0x32, 0x2,0x35,0x5b, + 0x1,0x5f,0x4d, 0x1,0x5a,0x5a, 0x2,0x35,0x63, 0x3,0x36,0x22, + 0x1,0x5a,0x70, 0x1,0x5a,0x6d, 0x2,0x35,0x5f, 0x2,0x35,0x4e, + 0x3,0x35,0x7c, 0x3,0x36,0x2b, 0x1,0x5a,0x6c, 0x2,0x35,0x65, + 0x2,0x35,0x4d, 0x1,0x5a,0x61, 0x1,0x5a,0x65, 0x2,0x35,0x64, + 0x3,0x36,0x23, 0x2,0x35,0x57, 0x1,0x5a,0x66, 0x1,0x5a,0x60, + 0x2,0x35,0x4c, 0x3,0x35,0x7d, 0x1,0x5f,0x3f, 0x2,0x35,0x67, + 0x2,0x35,0x55, 0x1,0x5a,0x6b, 0x2,0x35,0x58, 0x2,0x35,0x66, + 0x1,0x5a,0x6a, 0x3,0x36,0x24, 0x2,0x3b,0x75, 0x4,0x31,0x77, + 0x1,0x5a,0x57, 0x2,0x35,0x53, 0x1,0x5a,0x5c, 0x1,0x5a,0x67, + 0x4,0x31,0x78, 0x1,0x5a,0x62, 0x2,0x35,0x5c, 0x2,0x35,0x52, + 0x2,0x35,0x50, 0x2,0x35,0x62, 0x1,0x5a,0x54, 0x1,0x5a,0x68, + 0x1,0x5a,0x58, 0x1,0x5f,0x3e, 0x2,0x35,0x60, 0x1,0x5a,0x59, + 0x4,0x32,0x23, 0x1,0x5a,0x55, 0x1,0x5a,0x64, 0x1,0x5a,0x5f, + 0x1,0x5a,0x5d, 0x2,0x35,0x54, 0x1,0x5a,0x69, 0x2,0x35,0x51, + 0x2,0x35,0x5e, 0x2,0x35,0x5a, 0x2,0x3b,0x77, 0x2,0x3b,0x76, + 0x3,0x36,0x2d, 0x3,0x64,0x7e, 0x3,0x36,0x2e, 0x2,0x35,0x4f, + 0x2,0x3c,0x29, 0x3,0x3b,0x71, 0x1,0x5f,0x41, 0x3,0x3b,0x70, + 0x2,0x3c,0x2f, 0x2,0x3b,0x7c, 0x2,0x3c,0x2c, 0x2,0x42,0x7d, + 0x1,0x5f,0x44, 0x2,0x3c,0x30, 0x2,0x3c,0x33, 0x1,0x5f,0x43, + 0x2,0x3c,0x21, 0x2,0x3c,0x32, 0x2,0x3c,0x31, 0x1,0x5f,0x45, + 0x2,0x3b,0x78, 0x1,0x5f,0x40, 0x1,0x5f,0x48, 0x3,0x3b,0x73, + 0x1,0x5f,0x46, 0x2,0x3c,0x2e, 0x4,0x37,0x71, 0x2,0x3c,0x24, + 0x1,0x5f,0x4a, 0x2,0x3c,0x35, 0x2,0x3c,0x2d, 0x2,0x3c,0x36, + 0x1,0x5f,0x52, 0x1,0x5f,0x50, 0x2,0x3c,0x2b, 0x2,0x3c,0x2a, + 0x3,0x3b,0x67, 0x2,0x3c,0x28, 0x2,0x3c,0x22, 0x1,0x5f,0x49, + 0x3,0x3b,0x66, 0x1,0x5f,0x47, 0x2,0x2f,0x3b, 0x2,0x3b,0x79, + 0x3,0x3b,0x68, 0x2,0x43,0x3d, 0x2,0x3b,0x7a, 0x1,0x5f,0x42, + 0x1,0x5f,0x4f, 0x2,0x43,0x21, 0x4,0x37,0x60, 0x1,0x5f,0x4b, + 0x1,0x5f,0x4c, 0x2,0x3b,0x7b, 0x2,0x3c,0x34, 0x2,0x42,0x7e, + 0x2,0x3c,0x25, 0x2,0x3b,0x7e, 0x1,0x5f,0x4e, 0x2,0x3c,0x26, + 0x2,0x3c,0x23, 0x3,0x3b,0x72, 0x3,0x3b,0x6d, 0x1,0x5f,0x53, + 0x4,0x37,0x6f, 0x3,0x3b,0x6f, 0x3,0x65,0x21, 0x1,0x64,0x38, + 0x3,0x41,0x49, 0x3,0x41,0x32, 0x2,0x43,0x24, 0x2,0x43,0x37, + 0x2,0x43,0x3c, 0x2,0x43,0x30, 0x1,0x64,0x34, 0x2,0x43,0x41, + 0x1,0x64,0x31, 0x2,0x43,0x22, 0x3,0x41,0x3a, 0x2,0x43,0x23, + 0x1,0x64,0x2a, 0x1,0x64,0x33, 0x2,0x43,0x2a, 0x1,0x64,0x36, + 0x1,0x64,0x37, 0x2,0x43,0x2b, 0x3,0x41,0x38, 0x2,0x43,0x38, + 0x2,0x43,0x3e, 0x1,0x64,0x32, 0x3,0x41,0x3e, 0x1,0x64,0x2c, + 0x2,0x43,0x29, 0x2,0x43,0x25, 0x2,0x43,0x40, 0x2,0x43,0x2e, + 0x2,0x43,0x2f, 0x2,0x43,0x26, 0x2,0x43,0x3a, 0x2,0x43,0x31, + 0x2,0x43,0x3b, 0x2,0x43,0x33, 0x3,0x41,0x3d, 0x1,0x64,0x2d, + 0x2,0x4a,0x40, 0x1,0x64,0x30, 0x1,0x64,0x2e, 0x2,0x43,0x3f, + 0x2,0x43,0x36, 0x2,0x43,0x32, 0x3,0x41,0x36, 0x3,0x41,0x33, + 0x2,0x43,0x27, 0x1,0x68,0x7a, 0x2,0x43,0x35, 0x1,0x64,0x35, + 0x2,0x43,0x2d, 0x3,0x41,0x34, 0x2,0x43,0x2c, 0x3,0x41,0x48, + 0x3,0x47,0x25, 0x3,0x41,0x42, 0x1,0x64,0x2f, 0x1,0x64,0x2b, + 0x2,0x4a,0x55, 0x2,0x43,0x39, 0x2,0x43,0x34, 0x2,0x43,0x28, + 0x3,0x41,0x44, 0x3,0x41,0x45, 0x3,0x66,0x76, 0x2,0x4a,0x50, + 0x3,0x46,0x78, 0x2,0x4a,0x41, 0x2,0x4a,0x4c, 0x3,0x47,0x28, + 0x2,0x4a,0x53, 0x1,0x68,0x78, 0x1,0x5f,0x51, 0x2,0x4a,0x51, + 0x1,0x68,0x73, 0x3,0x46,0x7e, 0x3,0x47,0x24, 0x3,0x46,0x7a, + 0x1,0x68,0x72, 0x2,0x4a,0x58, 0x4,0x43,0x5d, 0x2,0x4a,0x42, + 0x2,0x4a,0x4f, 0x2,0x4a,0x43, 0x2,0x4a,0x4e, 0x1,0x68,0x76, + 0x2,0x4a,0x52, 0x2,0x3c,0x27, 0x3,0x47,0x21, 0x4,0x43,0x5e, + 0x3,0x47,0x2a, 0x2,0x4a,0x59, 0x2,0x4a,0x4a, 0x1,0x68,0x79, + 0x2,0x50,0x61, 0x1,0x6c,0x77, 0x3,0x47,0x23, 0x2,0x4a,0x57, + 0x2,0x4a,0x56, 0x1,0x68,0x7b, 0x2,0x50,0x54, 0x1,0x6c,0x78, + 0x2,0x50,0x55, 0x3,0x47,0x22, 0x2,0x4a,0x46, 0x2,0x4a,0x47, + 0x2,0x4a,0x44, 0x2,0x4a,0x49, 0x2,0x4a,0x45, 0x2,0x4a,0x5a, + 0x1,0x68,0x75, 0x1,0x6c,0x79, 0x1,0x68,0x77, 0x1,0x68,0x7c, + 0x3,0x46,0x7b, 0x2,0x4a,0x48, 0x3,0x47,0x29, 0x2,0x4a,0x54, + 0x3,0x4c,0x2d, 0x3,0x47,0x26, 0x2,0x4a,0x4d, 0x3,0x4c,0x35, + 0x2,0x50,0x58, 0x3,0x4c,0x38, 0x1,0x68,0x71, 0x1,0x6c,0x7c, + 0x2,0x57,0x35, 0x2,0x50,0x5d, 0x2,0x50,0x5c, 0x2,0x50,0x5e, + 0x3,0x4c,0x30, 0x3,0x4c,0x2f, 0x2,0x50,0x5b, 0x1,0x6c,0x7d, + 0x3,0x4c,0x3b, 0x1,0x6d,0x25, 0x1,0x6d,0x22, 0x3,0x4c,0x31, + 0x1,0x6d,0x23, 0x2,0x50,0x56, 0x2,0x50,0x59, 0x2,0x50,0x63, + 0x1,0x6d,0x2b, 0x1,0x6d,0x29, 0x3,0x4c,0x2e, 0x2,0x50,0x5a, + 0x2,0x3b,0x7d, 0x1,0x6c,0x7a, 0x2,0x50,0x60, 0x2,0x50,0x57, + 0x3,0x4c,0x3e, 0x1,0x6d,0x2c, 0x2,0x50,0x5f, 0x1,0x68,0x74, + 0x1,0x6d,0x21, 0x2,0x4a,0x4b, 0x3,0x4c,0x3f, 0x3,0x4c,0x34, + 0x1,0x6d,0x24, 0x3,0x4c,0x3d, 0x1,0x6d,0x28, 0x1,0x6d,0x2a, + 0x1,0x6d,0x27, 0x1,0x6d,0x26, 0x3,0x4c,0x3a, 0x1,0x6c,0x7e, + 0x2,0x50,0x62, 0x1,0x6c,0x7b, 0x1,0x6d,0x2d, 0x3,0x4c,0x39, + 0x3,0x65,0x22, 0x3,0x4c,0x37, 0x1,0x70,0x61, 0x1,0x70,0x62, + 0x2,0x57,0x34, 0x1,0x70,0x6b, 0x1,0x70,0x68, 0x3,0x50,0x70, + 0x1,0x70,0x5f, 0x1,0x70,0x66, 0x2,0x57,0x36, 0x1,0x70,0x64, + 0x1,0x70,0x5e, 0x3,0x4c,0x32, 0x1,0x70,0x65, 0x3,0x50,0x77, + 0x2,0x57,0x33, 0x1,0x73,0x64, 0x1,0x70,0x60, 0x5,0x54,0x5e, + 0x1,0x70,0x67, 0x1,0x73,0x63, 0x2,0x57,0x32, 0x2,0x57,0x31, + 0x3,0x50,0x76, 0x1,0x70,0x69, 0x3,0x50,0x6f, 0x1,0x70,0x6a, + 0x3,0x50,0x79, 0x2,0x57,0x30, 0x2,0x57,0x2f, 0x1,0x73,0x65, + 0x2,0x57,0x39, 0x1,0x70,0x63, 0x2,0x57,0x37, 0x3,0x50,0x75, + 0x3,0x54,0x64, 0x1,0x73,0x66, 0x3,0x54,0x67, 0x1,0x73,0x6b, + 0x2,0x5c,0x75, 0x2,0x5c,0x77, 0x3,0x57,0x6b, 0x1,0x73,0x68, + 0x3,0x57,0x6d, 0x2,0x5c,0x78, 0x2,0x5c,0x74, 0x3,0x57,0x6c, + 0x2,0x5c,0x76, 0x1,0x73,0x69, 0x1,0x73,0x6c, 0x3,0x54,0x69, + 0x2,0x5c,0x73, 0x1,0x73,0x67, 0x1,0x73,0x6a, 0x1,0x76,0x45, + 0x2,0x57,0x38, 0x1,0x76,0x44, 0x7,0x3f,0x62, 0x3,0x57,0x6a, + 0x1,0x76,0x4a, 0x2,0x61,0x60, 0x3,0x57,0x70, 0x1,0x76,0x48, + 0x1,0x76,0x49, 0x2,0x61,0x63, 0x2,0x61,0x5f, 0x1,0x76,0x46, + 0x2,0x61,0x5d, 0x1,0x78,0x38, 0x2,0x61,0x61, 0x4,0x5b,0x36, + 0x2,0x61,0x62, 0x2,0x61,0x5e, 0x3,0x57,0x6e, 0x1,0x76,0x47, + 0x2,0x65,0x4d, 0x3,0x5a,0x3b, 0x2,0x65,0x50, 0x3,0x5a,0x3c, + 0x3,0x5a,0x3a, 0x2,0x65,0x51, 0x2,0x65,0x4f, 0x2,0x65,0x52, + 0x1,0x78,0x39, 0x2,0x65,0x4e, 0x3,0x5e,0x31, 0x2,0x68,0x7a, + 0x1,0x79,0x6f, 0x2,0x68,0x79, 0x2,0x68,0x78, 0x2,0x68,0x77, + 0x1,0x79,0x6e, 0x1,0x79,0x70, 0x3,0x65,0x23, 0x2,0x6b,0x5b, + 0x1,0x7a,0x6d, 0x1,0x7a,0x6c, 0x3,0x5f,0x4a, 0x3,0x5f,0x4b, + 0x2,0x6d,0x4f, 0x2,0x6d,0x4e, 0x2,0x6d,0x51, 0x1,0x7c,0x37, + 0x1,0x7b,0x61, 0x2,0x6f,0x2c, 0x2,0x6d,0x50, 0x3,0x5f,0x49, + 0x3,0x60,0x32, 0x2,0x6f,0x2b, 0x1,0x7c,0x39, 0x1,0x7c,0x38, + 0x1,0x7c,0x5f, 0x2,0x70,0x37, 0x2,0x70,0x7d, 0x1,0x45,0x45, + 0x6,0x23,0x6c, 0x3,0x2c,0x72, 0x2,0x3c,0x37, 0x2,0x57,0x3a, + 0x3,0x21,0x67, 0x3,0x21,0x68, 0x1,0x48,0x2d, 0x2,0x22,0x4d, + 0x1,0x4a,0x53, 0x1,0x4a,0x51, 0x4,0x24,0x3f, 0x1,0x4a,0x52, + 0x4,0x24,0x3e, 0x2,0x27,0x22, 0x1,0x4d,0x73, 0x1,0x51,0x49, + 0x3,0x2c,0x74, 0x2,0x2a,0x68, 0x3,0x2c,0x76, 0x2,0x2a,0x69, + 0x3,0x2c,0x73, 0x1,0x51,0x4a, 0x2,0x2f,0x50, 0x4,0x2d,0x43, + 0x1,0x55,0x66, 0x1,0x55,0x67, 0x2,0x2f,0x4f, 0x3,0x31,0x3d, + 0x4,0x2d,0x44, 0x3,0x36,0x37, 0x3,0x36,0x36, 0x1,0x5a,0x77, + 0x4,0x32,0x2b, 0x1,0x5a,0x73, 0x4,0x32,0x2f, 0x2,0x35,0x69, + 0x1,0x5a,0x7a, 0x1,0x5a,0x79, 0x1,0x5a,0x72, 0x1,0x5a,0x75, + 0x1,0x5a,0x78, 0x1,0x5a,0x74, 0x3,0x36,0x34, 0x2,0x3c,0x3b, + 0x1,0x5a,0x71, 0x1,0x5f,0x54, 0x3,0x3b,0x74, 0x3,0x3b,0x75, + 0x3,0x3b,0x76, 0x1,0x5f,0x56, 0x1,0x5f,0x57, 0x2,0x3c,0x3a, + 0x2,0x3c,0x3d, 0x1,0x5f,0x55, 0x2,0x3c,0x38, 0x2,0x3c,0x3c, + 0x2,0x3c,0x39, 0x3,0x41,0x4b, 0x1,0x64,0x39, 0x3,0x41,0x4e, + 0x4,0x3d,0x5d, 0x2,0x43,0x42, 0x3,0x41,0x4d, 0x3,0x47,0x30, + 0x1,0x68,0x7d, 0x2,0x4a,0x5b, 0x1,0x70,0x6c, 0x1,0x6d,0x2e, + 0x2,0x50,0x64, 0x1,0x6d,0x2f, 0x1,0x6d,0x30, 0x2,0x50,0x66, + 0x2,0x50,0x65, 0x2,0x50,0x67, 0x2,0x57,0x3c, 0x2,0x57,0x3b, + 0x2,0x5c,0x7a, 0x2,0x5c,0x79, 0x1,0x73,0x6d, 0x1,0x73,0x6e, + 0x2,0x65,0x53, 0x3,0x5c,0x41, 0x1,0x45,0x46, 0x3,0x25,0x58, + 0x3,0x29,0x39, 0x4,0x2d,0x47, 0x3,0x31,0x40, 0x2,0x3c,0x3e, + 0x3,0x36,0x38, 0x3,0x36,0x39, 0x1,0x5f,0x59, 0x1,0x5f,0x58, + 0x2,0x43,0x43, 0x2,0x61,0x64, 0x1,0x7a,0x6e, 0x2,0x6f,0x2d, + 0x1,0x45,0x47, 0x4,0x24,0x41, 0x1,0x55,0x68, 0x3,0x31,0x42, + 0x1,0x5a,0x7c, 0x1,0x5a,0x7b, 0x2,0x3c,0x3f, 0x2,0x3c,0x40, + 0x1,0x64,0x3a, 0x2,0x4a,0x5c, 0x1,0x68,0x7e, 0x2,0x57,0x3d, + 0x4,0x56,0x3f, 0x1,0x45,0x48, 0x1,0x46,0x58, 0x3,0x29,0x3b, + 0x1,0x4d,0x74, 0x2,0x27,0x23, 0x2,0x2a,0x6a, 0x1,0x51,0x4b, + 0x1,0x5a,0x7d, 0x3,0x36,0x3a, 0x2,0x3c,0x41, 0x1,0x5f,0x5a, + 0x1,0x64,0x3b, 0x4,0x3d,0x63, 0x2,0x50,0x68, 0x2,0x50,0x69, + 0x4,0x50,0x4e, 0x3,0x54,0x6b, 0x2,0x5c,0x7b, 0x1,0x76,0x4b, + 0x2,0x70,0x7e, 0x1,0x45,0x49, 0x3,0x29,0x3c, 0x2,0x27,0x24, + 0x1,0x4d,0x75, 0x1,0x51,0x4c, 0x3,0x2c,0x77, 0x2,0x2a,0x6b, + 0x1,0x55,0x69, 0x2,0x2f,0x54, 0x2,0x2f,0x52, 0x2,0x2f,0x53, + 0x1,0x55,0x6a, 0x2,0x2f,0x51, 0x3,0x36,0x3c, 0x4,0x32,0x34, + 0x3,0x36,0x3f, 0x3,0x36,0x3d, 0x1,0x5b,0x21, 0x1,0x5b,0x22, + 0x2,0x35,0x6a, 0x1,0x5b,0x23, 0x1,0x5a,0x7e, 0x2,0x3c,0x42, + 0x3,0x3b,0x79, 0x2,0x3c,0x43, 0x2,0x43,0x44, 0x4,0x3d,0x64, + 0x1,0x69,0x22, 0x1,0x69,0x21, 0x4,0x50,0x4f, 0xf,0x54,0x64, + 0x2,0x5c,0x7c, 0x2,0x61,0x65, 0x3,0x5a,0x3f, 0x2,0x65,0x55, + 0x2,0x65,0x54, 0x2,0x68,0x7b, 0x3,0x21,0x69, 0x2,0x21,0x3e, + 0x1,0x51,0x4d, 0x3,0x36,0x41, 0x3,0x41,0x50, 0x1,0x45,0x4a, + 0x1,0x46,0x59, 0x3,0x22,0x51, 0x1,0x48,0x2f, 0x1,0x48,0x2e, + 0x3,0x23,0x73, 0x3,0x23,0x72, 0x1,0x48,0x30, 0x1,0x48,0x31, + 0x2,0x22,0x4f, 0x2,0x22,0x4e, 0x2,0x24,0x39, 0x1,0x4a,0x54, + 0x2,0x24,0x3c, 0x2,0x24,0x3b, 0x2,0x24,0x3a, 0x2,0x24,0x3d, + 0x3,0x26,0x3d, 0x4,0x26,0x62, 0x1,0x4d,0x76, 0x2,0x27,0x2a, + 0x2,0x27,0x26, 0x2,0x27,0x2f, 0x3,0x29,0x43, 0x3,0x29,0x3e, + 0x1,0x4d,0x7d, 0x3,0x29,0x42, 0x1,0x4d,0x7b, 0x2,0x27,0x2b, + 0x2,0x27,0x27, 0x2,0x27,0x2e, 0x1,0x4d,0x7a, 0x1,0x4e,0x23, + 0x2,0x27,0x29, 0x2,0x27,0x25, 0x1,0x4e,0x22, 0x2,0x27,0x2c, + 0x1,0x4d,0x79, 0x2,0x27,0x2d, 0x1,0x4d,0x7c, 0x1,0x4d,0x7e, + 0x2,0x27,0x31, 0x2,0x27,0x30, 0x2,0x27,0x28, 0x1,0x4d,0x78, + 0x1,0x4d,0x77, 0x1,0x4e,0x21, 0x4,0x26,0x61, 0x3,0x29,0x40, + 0x3,0x29,0x41, 0xf,0x27,0x3e, 0x3,0x2c,0x7e, 0x3,0x2c,0x7a, + 0x2,0x2a,0x70, 0x2,0x2a,0x76, 0x3,0x2d,0x23, 0x1,0x51,0x53, + 0x1,0x51,0x50, 0x2,0x2a,0x6d, 0x2,0x2a,0x72, 0x3,0x2c,0x7c, + 0x1,0x51,0x56, 0x1,0x51,0x4e, 0x2,0x2a,0x71, 0x1,0x51,0x51, + 0x1,0x51,0x54, 0x3,0x2c,0x79, 0x4,0x29,0x67, 0x2,0x2a,0x74, + 0x3,0x2c,0x7d, 0x1,0x51,0x4f, 0x2,0x2a,0x79, 0x1,0x51,0x52, + 0x3,0x2d,0x21, 0x1,0x51,0x55, 0x2,0x2a,0x6e, 0x2,0x2a,0x73, + 0x2,0x2a,0x77, 0x2,0x2a,0x6f, 0x2,0x2a,0x6c, 0x3,0x2d,0x24, + 0x3,0x2d,0x25, 0x2,0x2a,0x78, 0x2,0x2a,0x75, 0x3,0x2d,0x22, + 0x3,0x2c,0x37, 0x3,0x31,0x46, 0x1,0x55,0x72, 0x1,0x55,0x6b, + 0x1,0x55,0x6e, 0x3,0x31,0x4c, 0x1,0x55,0x71, 0x3,0x31,0x44, + 0x2,0x2f,0x57, 0x3,0x31,0x49, 0x1,0x55,0x6c, 0x2,0x2f,0x55, + 0x3,0x31,0x48, 0x1,0x55,0x70, 0x3,0x31,0x4d, 0x3,0x31,0x45, + 0x1,0x55,0x6d, 0x3,0x31,0x43, 0x2,0x2f,0x58, 0x1,0x55,0x6f, + 0x3,0x36,0x42, 0x4,0x32,0x39, 0x2,0x35,0x6e, 0x1,0x5b,0x25, + 0x2,0x35,0x6d, 0x2,0x35,0x6f, 0x1,0x5b,0x24, 0x1,0x5b,0x29, + 0x2,0x2f,0x56, 0x3,0x31,0x4b, 0x2,0x35,0x6c, 0x2,0x35,0x70, + 0x3,0x36,0x44, 0x1,0x5b,0x26, 0x2,0x35,0x6b, 0x1,0x5b,0x28, + 0x3,0x36,0x45, 0x1,0x5b,0x27, 0x3,0x3c,0x26, 0x2,0x3c,0x4a, + 0x3,0x3b,0x7d, 0x2,0x3c,0x45, 0x3,0x3c,0x25, 0x1,0x5f,0x5b, + 0x1,0x5f,0x5f, 0x1,0x5f,0x5c, 0x2,0x3c,0x48, 0x2,0x3c,0x4b, + 0x3,0x3c,0x23, 0x1,0x5f,0x5d, 0x4,0x38,0x24, 0x1,0x5f,0x5e, + 0x1,0x5f,0x63, 0x2,0x43,0x4d, 0x2,0x3c,0x49, 0x1,0x5f,0x61, + 0x2,0x3c,0x46, 0x2,0x3c,0x44, 0x3,0x3b,0x7c, 0x1,0x5f,0x62, + 0x3,0x3b,0x7e, 0x2,0x3c,0x47, 0x3,0x3c,0x24, 0x1,0x64,0x41, + 0x4,0x3d,0x69, 0x2,0x43,0x45, 0x1,0x64,0x3e, 0x1,0x64,0x3f, + 0x1,0x64,0x3d, 0x2,0x43,0x4a, 0x2,0x43,0x49, 0x2,0x43,0x46, + 0x1,0x64,0x43, 0x3,0x41,0x5b, 0x3,0x41,0x56, 0x2,0x43,0x48, + 0x1,0x5f,0x60, 0x3,0x41,0x59, 0x3,0x41,0x51, 0x2,0x43,0x4c, + 0x2,0x43,0x47, 0x1,0x64,0x40, 0x1,0x64,0x3c, 0x1,0x64,0x42, + 0x2,0x43,0x4b, 0x3,0x47,0x34, 0x4,0x43,0x6b, 0x3,0x47,0x35, + 0x1,0x69,0x25, 0x4,0x43,0x6f, 0x2,0x4a,0x5f, 0x2,0x4a,0x5e, + 0x2,0x4a,0x5d, 0x1,0x69,0x23, 0x4,0x43,0x6d, 0x3,0x47,0x39, + 0x3,0x47,0x33, 0x3,0x47,0x37, 0x1,0x69,0x24, 0x2,0x50,0x6c, + 0x2,0x50,0x6f, 0x1,0x6d,0x32, 0x3,0x4c,0x44, 0x3,0x4c,0x46, + 0x1,0x6d,0x31, 0x2,0x50,0x70, 0x2,0x50,0x6b, 0x1,0x6d,0x34, + 0x2,0x50,0x6d, 0x3,0x4c,0x41, 0x1,0x6d,0x33, 0x2,0x50,0x6a, + 0x3,0x4c,0x40, 0x2,0x50,0x6e, 0x1,0x70,0x72, 0x1,0x70,0x6f, + 0x2,0x57,0x46, 0x2,0x57,0x45, 0x3,0x4c,0x43, 0x2,0x57,0x44, + 0x2,0x57,0x3f, 0x3,0x50,0x7d, 0x2,0x57,0x40, 0x3,0x51,0x23, + 0x4,0x50,0x50, 0x3,0x50,0x7a, 0x1,0x70,0x70, 0x3,0x50,0x7e, + 0x1,0x70,0x6d, 0x1,0x70,0x71, 0x2,0x57,0x3e, 0x1,0x70,0x6e, + 0x2,0x57,0x41, 0x2,0x57,0x42, 0x2,0x57,0x47, 0x3,0x51,0x22, + 0x3,0x54,0x71, 0x2,0x57,0x43, 0x3,0x54,0x6f, 0x3,0x54,0x70, + 0x2,0x5c,0x7d, 0x4,0x56,0x41, 0x3,0x54,0x6c, 0x3,0x54,0x6d, + 0x1,0x73,0x70, 0x3,0x54,0x72, 0x2,0x61,0x68, 0x1,0x73,0x6f, + 0x2,0x61,0x66, 0x2,0x61,0x67, 0x1,0x76,0x4c, 0x1,0x78,0x3b, + 0x2,0x65,0x56, 0x3,0x5a,0x43, 0x1,0x78,0x3a, 0x3,0x5a,0x42, + 0x3,0x65,0x26, 0x2,0x68,0x7d, 0x2,0x68,0x7e, 0x3,0x5c,0x42, + 0x1,0x79,0x71, 0x3,0x5c,0x43, 0x2,0x68,0x7c, 0x1,0x7a,0x6f, + 0x4,0x6a,0x4c, 0x2,0x6f,0x2e, 0x1,0x7c,0x3a, 0x2,0x70,0x38, + 0x2,0x70,0x39, 0x3,0x61,0x3f, 0x1,0x45,0x4b, 0x4,0x21,0x7c, + 0x1,0x48,0x32, 0x1,0x48,0x33, 0x1,0x4a,0x55, 0x3,0x26,0x41, + 0x2,0x27,0x32, 0x1,0x51,0x57, 0x1,0x55,0x73, 0x1,0x5b,0x2a, + 0xf,0x32,0x73, 0x1,0x59,0x37, 0x1,0x5f,0x64, 0x1,0x5f,0x65, + 0x1,0x5e,0x32, 0x2,0x3c,0x4c, 0x3,0x65,0x27, 0x1,0x64,0x44, + 0x2,0x4a,0x61, 0x2,0x4a,0x60, 0x3,0x51,0x24, 0x7,0x53,0x47, + 0x1,0x45,0x4c, 0x1,0x48,0x34, 0x2,0x27,0x33, 0x1,0x4e,0x25, + 0x3,0x29,0x45, 0x1,0x4e,0x24, 0x3,0x2d,0x27, 0x2,0x2a,0x7a, + 0x2,0x2a,0x7b, 0x3,0x66,0x32, 0x2,0x2f,0x59, 0x2,0x2f,0x5a, + 0x1,0x55,0x74, 0x1,0x55,0x75, 0x3,0x36,0x48, 0x1,0x55,0x76, + 0x2,0x35,0x71, 0x3,0x36,0x47, 0x3,0x36,0x46, 0x1,0x5b,0x2c, + 0x4,0x38,0x29, 0x1,0x5f,0x67, 0x3,0x3c,0x29, 0x1,0x5f,0x66, + 0x2,0x43,0x4e, 0x2,0x46,0x41, 0x2,0x4a,0x62, 0x2,0x57,0x48, + 0x3,0x51,0x26, 0x3,0x66,0x33, 0x1,0x76,0x4d, 0x1,0x79,0x72, + 0x1,0x45,0x4d, 0x1,0x46,0x5c, 0x1,0x46,0x5d, 0x1,0x46,0x5b, + 0x1,0x46,0x5e, 0x1,0x46,0x5a, 0x3,0x22,0x52, 0x1,0x48,0x37, + 0x3,0x23,0x77, 0x2,0x22,0x57, 0x1,0x48,0x36, 0x1,0x48,0x38, + 0x3,0x23,0x78, 0x3,0x23,0x75, 0x2,0x22,0x52, 0x2,0x22,0x51, + 0x2,0x22,0x54, 0x2,0x22,0x53, 0x2,0x22,0x56, 0x1,0x48,0x35, + 0x2,0x22,0x50, 0x2,0x22,0x55, 0xf,0x22,0x58, 0xf,0x22,0x57, + 0x3,0x26,0x48, 0x2,0x24,0x3e, 0x1,0x4a,0x5f, 0x2,0x24,0x3f, + 0x2,0x24,0x43, 0x1,0x4a,0x5e, 0x3,0x26,0x49, 0x2,0x24,0x47, + 0x2,0x24,0x42, 0x2,0x24,0x45, 0x1,0x4a,0x57, 0x1,0x4a,0x58, + 0x1,0x4a,0x59, 0x1,0x4a,0x5a, 0x3,0x26,0x45, 0x1,0x4a,0x61, + 0x3,0x26,0x44, 0x2,0x24,0x41, 0x1,0x4a,0x5c, 0x1,0x4a,0x62, + 0x3,0x26,0x47, 0x2,0x24,0x40, 0x2,0x24,0x46, 0x3,0x26,0x42, + 0x1,0x4a,0x5b, 0x2,0x24,0x44, 0x1,0x4a,0x5d, 0x1,0x4a,0x56, + 0x1,0x4a,0x60, 0x3,0x26,0x4a, 0xf,0x24,0x22, 0x4,0x24,0x46, + 0xf,0x24,0x53, 0x1,0x4e,0x3a, 0x3,0x29,0x47, 0x2,0x27,0x35, + 0x1,0x4e,0x26, 0x4,0x26,0x69, 0x1,0x4e,0x30, 0x1,0x4e,0x31, + 0x1,0x4e,0x29, 0x1,0x4e,0x3b, 0x1,0x4e,0x2b, 0x2,0x27,0x3d, + 0x1,0x4e,0x36, 0x2,0x27,0x38, 0x1,0x4e,0x2c, 0x2,0x27,0x47, + 0x2,0x27,0x48, 0x2,0x27,0x40, 0x2,0x27,0x39, 0x1,0x4e,0x39, + 0x2,0x27,0x45, 0x1,0x4e,0x34, 0x1,0x4e,0x32, 0x3,0x29,0x52, + 0x2,0x27,0x46, 0x3,0x29,0x49, 0x2,0x27,0x44, 0x2,0x27,0x3c, + 0x2,0x27,0x34, 0x2,0x27,0x3b, 0x1,0x4e,0x2d, 0x4,0x26,0x65, + 0x1,0x4e,0x33, 0x3,0x29,0x4a, 0x1,0x4e,0x27, 0x2,0x27,0x3f, + 0x2,0x27,0x3e, 0x2,0x27,0x36, 0x3,0x29,0x4f, 0x1,0x4e,0x35, + 0x2,0x27,0x42, 0x2,0x27,0x37, 0x1,0x4e,0x38, 0x2,0x27,0x49, + 0x1,0x4e,0x28, 0x3,0x29,0x48, 0x1,0x4e,0x2f, 0x2,0x27,0x3a, + 0x2,0x27,0x43, 0x1,0x4e,0x37, 0x4,0x26,0x67, 0x1,0x4e,0x2a, + 0x1,0x4e,0x2e, 0x4,0x26,0x6a, 0x2,0x27,0x41, 0xf,0x27,0x4e, + 0x3,0x29,0x4e, 0x3,0x29,0x4c, 0x3,0x65,0x28, 0xf,0x27,0x50, + 0x3,0x65,0x29, 0x2,0x2b,0x3d, 0x1,0x51,0x5f, 0x1,0x51,0x6c, + 0x3,0x2d,0x36, 0x2,0x2b,0x38, 0x2,0x2b,0x2e, 0x1,0x51,0x65, + 0x2,0x2b,0x2c, 0x1,0x51,0x5e, 0x2,0x2b,0x27, 0x1,0x51,0x68, + 0x2,0x2b,0x34, 0x2,0x2b,0x21, 0x2,0x2b,0x23, 0x3,0x2d,0x2e, + 0x4,0x2d,0x59, 0x4,0x29,0x6e, 0x3,0x2d,0x30, 0x2,0x2b,0x26, + 0x2,0x2a,0x7c, 0x2,0x2b,0x33, 0x2,0x2b,0x43, 0x1,0x51,0x63, + 0x2,0x2b,0x28, 0x2,0x2b,0x3a, 0x3,0x2d,0x2d, 0x2,0x2a,0x7e, + 0x2,0x2b,0x41, 0x2,0x2b,0x42, 0x2,0x2b,0x45, 0x2,0x2b,0x3c, + 0x2,0x2b,0x2d, 0x2,0x2b,0x35, 0x1,0x51,0x69, 0x1,0x51,0x5c, + 0x1,0x51,0x64, 0x1,0x51,0x70, 0x1,0x51,0x59, 0x1,0x51,0x5b, + 0x3,0x2d,0x31, 0x3,0x2d,0x2b, 0x3,0x2d,0x3a, 0x2,0x2b,0x25, + 0x1,0x51,0x6d, 0x1,0x51,0x66, 0x2,0x2b,0x3f, 0x2,0x2b,0x22, + 0x1,0x51,0x6f, 0x1,0x51,0x6a, 0x2,0x2b,0x2b, 0x4,0x29,0x6d, + 0x4,0x2d,0x4e, 0x1,0x51,0x6e, 0x2,0x2b,0x32, 0x2,0x2b,0x2a, + 0x1,0x51,0x67, 0x2,0x2b,0x3e, 0x2,0x2b,0x36, 0x3,0x2d,0x2a, + 0x1,0x51,0x61, 0x2,0x2b,0x44, 0x2,0x2b,0x29, 0x1,0x51,0x5d, + 0x2,0x2b,0x3b, 0x2,0x2b,0x31, 0x1,0x51,0x62, 0x2,0x2b,0x37, + 0x1,0x51,0x5a, 0x2,0x2a,0x7d, 0x1,0x51,0x6b, 0x1,0x56,0x27, + 0x1,0x51,0x60, 0x2,0x2b,0x30, 0x2,0x2b,0x2f, 0x2,0x2b,0x24, + 0x3,0x29,0x51, 0x2,0x2b,0x40, 0x3,0x2d,0x34, 0x2,0x2b,0x39, + 0x3,0x2d,0x32, 0x1,0x51,0x58, 0x3,0x2d,0x39, 0x3,0x2d,0x37, + 0x6,0x31,0x72, 0x3,0x2d,0x38, 0x3,0x65,0x2b, 0x3,0x65,0x2a, + 0xf,0x2b,0x48, 0x2,0x2f,0x6e, 0x1,0x56,0x2e, 0x2,0x2f,0x6f, + 0x3,0x31,0x5d, 0x2,0x2f,0x63, 0x1,0x56,0x23, 0x1,0x56,0x2f, + 0x3,0x31,0x57, 0x2,0x2f,0x5c, 0x3,0x31,0x53, 0x2,0x2f,0x65, + 0x2,0x2f,0x6d, 0x3,0x31,0x5b, 0x2,0x2f,0x5b, 0x2,0x2f,0x76, + 0x1,0x55,0x77, 0x3,0x31,0x5e, 0x3,0x31,0x64, 0x3,0x31,0x50, + 0x2,0x2f,0x75, 0x2,0x2f,0x70, 0x3,0x31,0x5f, 0x2,0x2f,0x71, + 0x1,0x56,0x21, 0x1,0x56,0x2c, 0x2,0x2f,0x67, 0x3,0x31,0x56, + 0x2,0x2f,0x68, 0x2,0x2f,0x72, 0x2,0x2f,0x69, 0x3,0x31,0x63, + 0x2,0x2f,0x64, 0x2,0x2f,0x5e, 0x2,0x2f,0x5f, 0x2,0x2f,0x6c, + 0x2,0x2f,0x66, 0x3,0x31,0x54, 0x3,0x31,0x4f, 0x1,0x55,0x78, + 0x1,0x55,0x7c, 0x2,0x2f,0x74, 0x2,0x2f,0x60, 0x1,0x56,0x2a, + 0x1,0x56,0x26, 0x3,0x31,0x5a, 0x4,0x2d,0x55, 0x1,0x56,0x29, + 0x1,0x56,0x30, 0x1,0x55,0x7d, 0x1,0x56,0x2b, 0x2,0x2f,0x6b, + 0x1,0x56,0x2d, 0x1,0x55,0x7a, 0x3,0x31,0x59, 0x1,0x55,0x79, + 0x2,0x2f,0x5d, 0x4,0x2d,0x4f, 0x2,0x2f,0x61, 0x1,0x56,0x24, + 0x2,0x2f,0x73, 0x2,0x2f,0x6a, 0x2,0x2f,0x62, 0x1,0x56,0x28, + 0x1,0x56,0x25, 0x3,0x2d,0x2f, 0x1,0x55,0x7b, 0x1,0x55,0x7e, + 0x3,0x31,0x62, 0x3,0x31,0x58, 0xf,0x30,0x24, 0x3,0x31,0x61, + 0x3,0x31,0x60, 0x3,0x65,0x2d, 0x3,0x65,0x2c, 0x2,0x36,0x28, + 0x3,0x36,0x55, 0x2,0x35,0x76, 0x2,0x35,0x77, 0x2,0x35,0x7b, + 0x3,0x36,0x60, 0x2,0x36,0x2c, 0x2,0x36,0x29, 0x3,0x36,0x4e, + 0x2,0x36,0x22, 0x2,0x36,0x21, 0x1,0x5b,0x33, 0x2,0x36,0x25, + 0x2,0x36,0x34, 0x2,0x35,0x72, 0x3,0x36,0x5b, 0x2,0x36,0x35, + 0x2,0x36,0x27, 0x2,0x36,0x39, 0x2,0x36,0x2d, 0x1,0x5b,0x32, + 0x2,0x36,0x2b, 0x1,0x5b,0x2d, 0x1,0x5b,0x42, 0x1,0x5b,0x38, + 0x3,0x36,0x57, 0x1,0x5b,0x3c, 0x1,0x5b,0x3b, 0x2,0x35,0x73, + 0x4,0x32,0x3f, 0x2,0x36,0x32, 0x2,0x36,0x38, 0x2,0x36,0x30, + 0x2,0x36,0x37, 0x3,0x36,0x51, 0x2,0x36,0x24, 0x2,0x35,0x74, + 0x2,0x36,0x36, 0x2,0x36,0x26, 0x1,0x5b,0x30, 0x1,0x5b,0x3d, + 0x3,0x36,0x5a, 0x2,0x36,0x2f, 0x1,0x5b,0x36, 0x3,0x36,0x4d, + 0x3,0x36,0x5c, 0x3,0x36,0x50, 0x2,0x36,0x2e, 0x2,0x35,0x75, + 0x1,0x5b,0x3e, 0x3,0x36,0x4b, 0x1,0x5b,0x40, 0x2,0x36,0x31, + 0x1,0x5b,0x41, 0x1,0x5b,0x2f, 0x2,0x35,0x7c, 0x2,0x36,0x33, + 0x3,0x36,0x54, 0x3,0x34,0x78, 0x1,0x5b,0x35, 0x1,0x5b,0x3f, + 0x2,0x35,0x7e, 0x2,0x36,0x2a, 0x2,0x35,0x79, 0x2,0x35,0x7d, + 0x1,0x5b,0x3a, 0x2,0x35,0x78, 0x1,0x5b,0x2e, 0x1,0x5b,0x37, + 0x1,0x5b,0x34, 0x2,0x36,0x23, 0x1,0x56,0x22, 0x2,0x3c,0x63, + 0x1,0x5b,0x31, 0x3,0x36,0x4c, 0x3,0x36,0x52, 0x3,0x36,0x5e, + 0x3,0x36,0x5f, 0xf,0x35,0x57, 0x3,0x36,0x56, 0x3,0x3c,0x45, + 0x1,0x5b,0x39, 0x3,0x3c,0x41, 0x2,0x3c,0x66, 0x2,0x3c,0x7c, + 0x2,0x3c,0x71, 0x1,0x5f,0x7b, 0x3,0x3c,0x38, 0x1,0x5f,0x76, + 0x2,0x3c,0x60, 0x1,0x5f,0x77, 0x2,0x3c,0x70, 0x3,0x3c,0x3e, + 0x2,0x3c,0x69, 0x2,0x3c,0x76, 0x1,0x5f,0x73, 0x2,0x3c,0x4e, + 0x2,0x3c,0x78, 0x1,0x5f,0x69, 0x2,0x3c,0x56, 0x1,0x5f,0x6c, + 0x1,0x5f,0x6b, 0x4,0x38,0x32, 0x1,0x5f,0x7c, 0x3,0x36,0x53, + 0x2,0x3c,0x50, 0x2,0x3c,0x72, 0x2,0x3c,0x73, 0x1,0x5f,0x6e, + 0x1,0x5f,0x6a, 0x2,0x3c,0x5e, 0x3,0x3c,0x3d, 0x1,0x5f,0x75, + 0x2,0x3c,0x59, 0x3,0x3c,0x32, 0x2,0x3c,0x74, 0x1,0x5f,0x71, + 0x2,0x3c,0x6c, 0x2,0x3c,0x79, 0x2,0x3c,0x53, 0x2,0x3c,0x58, + 0x2,0x3c,0x52, 0x3,0x3c,0x2a, 0x1,0x5f,0x70, 0x2,0x3c,0x65, + 0x2,0x43,0x64, 0x2,0x3c,0x54, 0x1,0x5f,0x74, 0x2,0x3c,0x5d, + 0x2,0x3c,0x75, 0x1,0x5f,0x6f, 0x2,0x3c,0x5a, 0x2,0x3c,0x57, + 0x2,0x3c,0x68, 0x1,0x5f,0x72, 0x1,0x5f,0x68, 0x1,0x5f,0x7e, + 0x2,0x3c,0x6b, 0x2,0x3c,0x6a, 0x3,0x3c,0x31, 0x3,0x3c,0x42, + 0x3,0x3c,0x39, 0x3,0x3c,0x3b, 0x3,0x3c,0x34, 0x3,0x3c,0x2f, + 0x2,0x3c,0x4f, 0x1,0x5f,0x6d, 0x2,0x3c,0x77, 0x2,0x3c,0x5f, + 0x2,0x3c,0x61, 0x3,0x3c,0x37, 0x2,0x3c,0x6e, 0x2,0x3c,0x6d, + 0x2,0x3c,0x4d, 0x1,0x5f,0x78, 0x1,0x5f,0x7a, 0x2,0x3c,0x55, + 0x2,0x3c,0x5c, 0x2,0x3c,0x64, 0x1,0x5f,0x79, 0x2,0x3c,0x5b, + 0x2,0x3c,0x67, 0x2,0x3c,0x7a, 0xf,0x3b,0x70, 0x2,0x3c,0x6f, + 0x3,0x3c,0x3c, 0xf,0x3c,0x21, 0x3,0x3c,0x44, 0x3,0x3c,0x33, + 0x2,0x3c,0x7b, 0xf,0x3c,0x29, 0x3,0x65,0x2f, 0x2,0x3c,0x51, + 0xf,0x3b,0x6e, 0x3,0x65,0x2e, 0x3,0x3c,0x40, 0x2,0x43,0x78, + 0x1,0x64,0x4c, 0x3,0x41,0x65, 0x2,0x43,0x76, 0x2,0x43,0x61, + 0x2,0x43,0x66, 0x2,0x43,0x5f, 0x3,0x41,0x77, 0x2,0x43,0x72, + 0x2,0x43,0x51, 0x2,0x43,0x58, 0x4,0x3d,0x71, 0x2,0x43,0x70, + 0x2,0x43,0x7a, 0x2,0x43,0x62, 0x3,0x41,0x68, 0x2,0x43,0x55, + 0x2,0x43,0x68, 0x2,0x43,0x6d, 0x2,0x43,0x59, 0x3,0x41,0x6b, + 0x2,0x43,0x6a, 0x2,0x43,0x56, 0x3,0x41,0x5d, 0x3,0x41,0x75, + 0x2,0x43,0x5d, 0x2,0x43,0x5e, 0x1,0x64,0x4e, 0x2,0x43,0x71, + 0x2,0x43,0x6f, 0x3,0x41,0x73, 0x2,0x43,0x52, 0x2,0x43,0x74, + 0x3,0x41,0x74, 0x2,0x43,0x75, 0x2,0x43,0x77, 0x1,0x64,0x52, + 0x1,0x64,0x4a, 0x3,0x41,0x6f, 0x2,0x35,0x7a, 0x2,0x43,0x5a, + 0x2,0x43,0x6c, 0x2,0x43,0x5b, 0x1,0x64,0x47, 0x1,0x64,0x57, + 0x2,0x43,0x73, 0x1,0x64,0x55, 0x1,0x64,0x51, 0x2,0x43,0x50, + 0x1,0x64,0x49, 0x3,0x41,0x79, 0x2,0x43,0x53, 0x1,0x64,0x56, + 0x3,0x41,0x78, 0x2,0x43,0x63, 0x2,0x43,0x4f, 0x3,0x41,0x76, + 0x1,0x64,0x4f, 0x2,0x43,0x67, 0x2,0x43,0x57, 0x1,0x64,0x50, + 0x2,0x43,0x60, 0x1,0x64,0x46, 0x1,0x5f,0x7d, 0x2,0x43,0x69, + 0x2,0x3c,0x62, 0x2,0x43,0x54, 0x4,0x3d,0x6c, 0x3,0x41,0x6d, + 0x2,0x43,0x6e, 0x1,0x64,0x4b, 0x2,0x43,0x6b, 0x1,0x64,0x48, + 0x2,0x43,0x65, 0x1,0x64,0x53, 0x2,0x43,0x5c, 0x2,0x43,0x79, + 0x3,0x41,0x6a, 0x3,0x41,0x7b, 0xf,0x42,0x49, 0xf,0x42,0x47, + 0x1,0x64,0x4d, 0x2,0x45,0x2c, 0x3,0x41,0x72, 0x1,0x64,0x54, + 0xf,0x42,0x28, 0xf,0x42,0x3c, 0x2,0x4a,0x70, 0x2,0x4a,0x6e, + 0x3,0x47,0x3a, 0x2,0x4b,0x26, 0x2,0x4a,0x6c, 0x3,0x47,0x3d, + 0x2,0x4a,0x7e, 0x1,0x64,0x45, 0x1,0x69,0x28, 0x2,0x4a,0x68, + 0x2,0x4b,0x25, 0x3,0x47,0x51, 0x2,0x4a,0x6d, 0x2,0x4a,0x7b, + 0x1,0x69,0x2d, 0x1,0x69,0x26, 0x3,0x47,0x4e, 0x2,0x4b,0x23, + 0x3,0x47,0x46, 0x2,0x4a,0x66, 0x2,0x4b,0x22, 0x3,0x47,0x47, + 0x1,0x69,0x38, 0x2,0x4a,0x77, 0x2,0x4b,0x29, 0x1,0x69,0x36, + 0x2,0x4a,0x6f, 0x1,0x69,0x27, 0x2,0x4a,0x71, 0x2,0x4b,0x21, + 0x1,0x69,0x30, 0x2,0x4a,0x6a, 0x1,0x69,0x34, 0x1,0x69,0x2a, + 0x2,0x4a,0x73, 0x2,0x4a,0x69, 0x2,0x4a,0x63, 0x3,0x47,0x3e, + 0x2,0x4a,0x7d, 0x1,0x69,0x31, 0x2,0x4b,0x28, 0x2,0x4a,0x64, + 0x1,0x69,0x2e, 0x4,0x43,0x77, 0x2,0x4a,0x79, 0x4,0x43,0x79, + 0x1,0x69,0x2f, 0x2,0x4a,0x6b, 0x2,0x4a,0x76, 0x2,0x4a,0x72, + 0x2,0x4a,0x74, 0x3,0x47,0x43, 0x1,0x69,0x29, 0x2,0x4b,0x27, + 0x1,0x69,0x37, 0x2,0x4a,0x75, 0x3,0x47,0x3b, 0x2,0x4b,0x2a, + 0x4,0x44,0x27, 0x3,0x47,0x3c, 0x2,0x4a,0x65, 0x2,0x4a,0x7a, + 0x1,0x69,0x2c, 0x1,0x69,0x35, 0x1,0x69,0x33, 0x2,0x4a,0x67, + 0x2,0x4a,0x7c, 0x1,0x69,0x32, 0x3,0x47,0x45, 0x3,0x47,0x48, + 0x1,0x69,0x2b, 0x2,0x4a,0x78, 0x3,0x47,0x4d, 0x3,0x47,0x44, + 0x4,0x44,0x28, 0x3,0x4c,0x54, 0x2,0x4b,0x24, 0x3,0x47,0x4c, + 0x2,0x50,0x7c, 0x3,0x47,0x42, 0x2,0x50,0x78, 0x2,0x50,0x74, + 0x2,0x51,0x2a, 0x2,0x51,0x27, 0x1,0x6d,0x37, 0x3,0x4c,0x64, + 0x3,0x4c,0x60, 0x2,0x51,0x2e, 0x2,0x50,0x7b, 0x1,0x6d,0x42, + 0x2,0x51,0x24, 0x3,0x4c,0x4f, 0x3,0x4c,0x51, 0x2,0x50,0x77, + 0x2,0x51,0x23, 0x1,0x6d,0x3f, 0x2,0x51,0x37, 0x4,0x4a,0x3d, + 0x2,0x51,0x34, 0x2,0x51,0x26, 0x2,0x50,0x75, 0x3,0x4c,0x5f, + 0x3,0x4c,0x57, 0x2,0x51,0x2b, 0x2,0x51,0x2d, 0x1,0x6d,0x3b, + 0x2,0x51,0x21, 0x2,0x50,0x7a, 0x2,0x50,0x71, 0x1,0x6d,0x38, + 0x1,0x6d,0x40, 0x4,0x4a,0x48, 0x2,0x51,0x30, 0x1,0x6d,0x41, + 0x2,0x50,0x72, 0x2,0x51,0x36, 0x2,0x51,0x29, 0x2,0x51,0x2f, + 0x1,0x6d,0x3e, 0x3,0x4c,0x4d, 0x3,0x4c,0x50, 0x2,0x51,0x2c, + 0x3,0x4c,0x47, 0x2,0x51,0x33, 0x3,0x4c,0x5b, 0x1,0x6d,0x43, + 0x3,0x4c,0x56, 0x1,0x6d,0x3d, 0x2,0x51,0x25, 0x2,0x50,0x76, + 0x2,0x51,0x38, 0x2,0x50,0x73, 0x2,0x51,0x31, 0x1,0x6d,0x3a, + 0x3,0x4c,0x4a, 0x2,0x50,0x7d, 0x3,0x4c,0x49, 0x2,0x50,0x7e, + 0x1,0x6d,0x39, 0x1,0x6d,0x36, 0x2,0x50,0x79, 0x1,0x6d,0x3c, + 0x3,0x4c,0x52, 0x1,0x6d,0x35, 0x3,0x4c,0x62, 0x2,0x51,0x32, + 0x2,0x51,0x35, 0x2,0x51,0x22, 0x2,0x57,0x55, 0x3,0x4c,0x5e, + 0x3,0x4c,0x59, 0xf,0x4f,0x42, 0x3,0x4c,0x61, 0x3,0x65,0x30, + 0x2,0x57,0x4d, 0x3,0x51,0x2c, 0x2,0x57,0x49, 0x1,0x71,0x21, + 0x3,0x51,0x3c, 0x3,0x51,0x38, 0x1,0x70,0x74, 0x1,0x70,0x79, + 0x1,0x70,0x75, 0x2,0x57,0x57, 0x2,0x57,0x62, 0x1,0x70,0x73, + 0x2,0x57,0x4f, 0x2,0x57,0x58, 0x2,0x51,0x28, 0x2,0x57,0x59, + 0x3,0x51,0x28, 0x3,0x51,0x2b, 0x1,0x70,0x7a, 0x3,0x51,0x40, + 0x2,0x57,0x68, 0x1,0x70,0x7e, 0x1,0x71,0x23, 0x2,0x57,0x4b, + 0x3,0x51,0x3b, 0x1,0x70,0x7d, 0x3,0x51,0x31, 0x2,0x57,0x66, + 0x2,0x57,0x67, 0x2,0x57,0x5d, 0x2,0x57,0x5c, 0x2,0x57,0x54, + 0x3,0x51,0x29, 0x3,0x51,0x3e, 0x2,0x57,0x5e, 0x2,0x57,0x65, + 0x2,0x57,0x64, 0x3,0x51,0x2f, 0x1,0x70,0x78, 0x1,0x70,0x76, + 0x2,0x57,0x56, 0x2,0x57,0x53, 0x3,0x51,0x44, 0x2,0x57,0x50, + 0x2,0x57,0x63, 0x1,0x71,0x22, 0x2,0x57,0x61, 0x1,0x70,0x7c, + 0x1,0x70,0x7b, 0x3,0x51,0x27, 0x2,0x57,0x5b, 0x4,0x4a,0x4b, + 0x2,0x57,0x4a, 0x2,0x57,0x4c, 0x2,0x57,0x4e, 0x2,0x57,0x60, + 0x2,0x57,0x5a, 0x1,0x70,0x77, 0x3,0x51,0x2e, 0x2,0x57,0x51, + 0x3,0x51,0x32, 0x2,0x57,0x5f, 0x3,0x51,0x41, 0x3,0x51,0x3a, + 0xf,0x54,0x7b, 0x2,0x57,0x52, 0x3,0x65,0x31, 0xf,0x55,0x29, + 0x3,0x65,0x32, 0x3,0x54,0x75, 0x1,0x73,0x78, 0x2,0x5d,0x31, + 0x1,0x73,0x71, 0x2,0x5d,0x22, 0x3,0x54,0x7b, 0x2,0x5d,0x2d, + 0x1,0x73,0x73, 0x2,0x5d,0x34, 0x3,0x55,0x21, 0x2,0x5d,0x29, + 0x3,0x54,0x7c, 0x2,0x5d,0x24, 0x3,0x54,0x76, 0x4,0x56,0x45, + 0x2,0x5d,0x35, 0x2,0x5c,0x7e, 0x2,0x5d,0x2b, 0x3,0x55,0x27, + 0x1,0x73,0x7a, 0x2,0x5d,0x30, 0x2,0x5d,0x36, 0x2,0x5d,0x2a, + 0x1,0x73,0x72, 0x2,0x5d,0x2c, 0x2,0x5d,0x21, 0x1,0x73,0x79, + 0x3,0x55,0x23, 0x3,0x54,0x7a, 0x2,0x5d,0x33, 0x2,0x5d,0x26, + 0x1,0x73,0x75, 0x3,0x55,0x24, 0x2,0x5d,0x28, 0x2,0x5d,0x25, + 0x1,0x73,0x7b, 0x2,0x5d,0x27, 0x1,0x73,0x74, 0x1,0x73,0x77, + 0x2,0x5d,0x2f, 0x2,0x5d,0x23, 0x2,0x5d,0x32, 0x3,0x54,0x78, + 0x2,0x5d,0x2e, 0x3,0x55,0x29, 0x3,0x57,0x74, 0x1,0x76,0x4f, + 0x2,0x61,0x73, 0x1,0x76,0x54, 0x1,0x76,0x55, 0x3,0x57,0x77, + 0x3,0x58,0x21, 0x3,0x57,0x76, 0x1,0x76,0x4e, 0x2,0x61,0x72, + 0x3,0x57,0x78, 0x2,0x61,0x6f, 0x2,0x61,0x70, 0x1,0x76,0x52, + 0x2,0x61,0x6a, 0x2,0x61,0x6e, 0x1,0x76,0x51, 0x3,0x57,0x7e, + 0x2,0x61,0x6b, 0x3,0x57,0x79, 0x3,0x58,0x23, 0x3,0x57,0x7d, + 0x3,0x57,0x7a, 0x1,0x76,0x53, 0x1,0x76,0x50, 0x3,0x58,0x22, + 0x2,0x61,0x69, 0x2,0x61,0x6d, 0x2,0x61,0x71, 0x3,0x57,0x7b, + 0x3,0x65,0x33, 0x2,0x65,0x5c, 0x2,0x65,0x59, 0x2,0x65,0x62, + 0x3,0x5a,0x44, 0x2,0x65,0x61, 0x2,0x65,0x5f, 0x2,0x65,0x5a, + 0x3,0x5a,0x4f, 0x1,0x78,0x3f, 0x3,0x5a,0x45, 0x3,0x5a,0x4e, + 0x4,0x5f,0x71, 0x3,0x5a,0x47, 0x3,0x5a,0x4d, 0x2,0x65,0x5b, + 0x1,0x78,0x3e, 0x1,0x73,0x76, 0x2,0x65,0x5e, 0x1,0x78,0x3d, + 0x2,0x65,0x63, 0x2,0x65,0x5d, 0x2,0x65,0x58, 0x2,0x61,0x6c, + 0x3,0x5a,0x48, 0x3,0x5a,0x46, 0x1,0x78,0x3c, 0x3,0x65,0x34, + 0x2,0x65,0x57, 0x2,0x69,0x24, 0x3,0x5c,0x49, 0x2,0x69,0x23, + 0x2,0x65,0x60, 0x1,0x79,0x73, 0x3,0x57,0x75, 0x2,0x69,0x27, + 0x2,0x69,0x28, 0x2,0x69,0x22, 0x2,0x69,0x26, 0x4,0x63,0x50, + 0x2,0x69,0x21, 0x3,0x5c,0x47, 0x3,0x65,0x35, 0x4,0x63,0x4e, + 0x2,0x6b,0x5f, 0x2,0x69,0x25, 0x1,0x7a,0x72, 0x1,0x7a,0x70, + 0x2,0x6b,0x5d, 0x3,0x5e,0x35, 0x3,0x5e,0x34, 0x3,0x5e,0x33, + 0x2,0x6b,0x60, 0x3,0x5e,0x37, 0x2,0x6b,0x5c, 0x2,0x6b,0x5e, + 0x1,0x7a,0x71, 0x3,0x5f,0x4f, 0x3,0x5f,0x4e, 0x2,0x6d,0x53, + 0x2,0x6d,0x54, 0x1,0x7b,0x62, 0x2,0x6d,0x52, 0xf,0x69,0x4c, + 0x3,0x65,0x36, 0x3,0x65,0x37, 0x2,0x6f,0x31, 0x1,0x7c,0x3b, + 0x2,0x6f,0x2f, 0x2,0x6f,0x30, 0x2,0x70,0x3a, 0x3,0x60,0x74, + 0xf,0x6b,0x51, 0x1,0x7d,0x23, 0x2,0x71,0x23, 0x2,0x71,0x21, + 0x2,0x71,0x22, 0x2,0x71,0x24, 0x3,0x61,0x40, 0x3,0x61,0x65, + 0x3,0x61,0x41, 0x2,0x72,0x2b, 0x1,0x45,0x4e, 0x1,0x48,0x39, + 0x3,0x23,0x79, 0x1,0x4e,0x3c, 0x4,0x26,0x71, 0x2,0x27,0x4a, + 0x3,0x29,0x53, 0x3,0x29,0x54, 0x2,0x2b,0x46, 0x4,0x29,0x72, + 0x3,0x2d,0x3c, 0x3,0x31,0x66, 0x2,0x2f,0x77, 0x2,0x2f,0x79, + 0x3,0x31,0x65, 0x2,0x2f,0x78, 0x3,0x31,0x67, 0x2,0x2f,0x7a, + 0x1,0x5b,0x43, 0x2,0x36,0x3b, 0x2,0x2f,0x7b, 0x3,0x36,0x62, + 0x2,0x36,0x3a, 0x2,0x36,0x3c, 0x2,0x36,0x3d, 0x2,0x3c,0x7d, + 0x1,0x60,0x22, 0x2,0x3c,0x7e, 0x2,0x3d,0x22, 0x1,0x60,0x23, + 0x1,0x60,0x21, 0x2,0x3d,0x21, 0x3,0x41,0x7d, 0x2,0x44,0x22, + 0x2,0x43,0x7e, 0x2,0x43,0x7d, 0x3,0x41,0x7c, 0x2,0x43,0x7c, + 0x2,0x43,0x7b, 0x1,0x64,0x58, 0x2,0x44,0x21, 0x1,0x69,0x39, + 0x2,0x4b,0x2b, 0x2,0x4b,0x2d, 0x1,0x69,0x3a, 0x2,0x4b,0x2c, + 0x1,0x6d,0x45, 0x3,0x4c,0x66, 0x1,0x6d,0x44, 0x2,0x51,0x39, + 0x3,0x4c,0x65, 0x3,0x4c,0x67, 0x2,0x57,0x6a, 0x2,0x57,0x69, + 0x2,0x57,0x6b, 0x3,0x51,0x46, 0x3,0x51,0x45, 0x1,0x71,0x24, + 0xf,0x55,0x39, 0x2,0x5d,0x37, 0x1,0x73,0x7c, 0x3,0x55,0x2b, + 0x2,0x61,0x74, 0x1,0x76,0x56, 0x2,0x65,0x64, 0x1,0x7b,0x63, + 0x1,0x45,0x4f, 0x1,0x46,0x5f, 0x1,0x48,0x3a, 0x1,0x4a,0x63, + 0x1,0x4e,0x3d, 0x1,0x4e,0x3e, 0x3,0x29,0x55, 0x3,0x29,0x56, + 0x1,0x51,0x71, 0x3,0x2d,0x3d, 0x3,0x31,0x68, 0x2,0x2f,0x7c, + 0x3,0x3c,0x49, 0x3,0x3c,0x47, 0x4,0x44,0x2d, 0x3,0x41,0x7e, + 0x1,0x64,0x59, 0x3,0x42,0x21, 0x3,0x47,0x53, 0x4,0x4a,0x4e, + 0x2,0x52,0x59, 0x1,0x71,0x25, 0x1,0x76,0x57, 0x1,0x45,0x50, + 0x3,0x22,0x53, 0x1,0x48,0x3b, 0x4,0x26,0x76, 0x2,0x27,0x4c, + 0x1,0x4e,0x3f, 0x2,0x27,0x4b, 0x3,0x29,0x58, 0x2,0x2b,0x47, + 0x1,0x51,0x72, 0x2,0x2b,0x48, 0x5,0x29,0x69, 0x1,0x51,0x73, + 0x2,0x2f,0x7e, 0x1,0x56,0x32, 0x1,0x56,0x31, 0x3,0x31,0x6a, + 0x2,0x36,0x42, 0x2,0x36,0x40, 0x2,0x36,0x41, 0x2,0x36,0x3f, + 0x3,0x36,0x64, 0x2,0x36,0x3e, 0x2,0x3d,0x23, 0x2,0x3d,0x26, + 0x1,0x60,0x25, 0x2,0x3d,0x24, 0x1,0x60,0x24, 0x2,0x3d,0x25, + 0x2,0x44,0x23, 0x3,0x42,0x22, 0x4,0x44,0x31, 0x2,0x4b,0x2e, + 0x2,0x4b,0x2f, 0x2,0x4b,0x30, 0x3,0x47,0x54, 0x2,0x51,0x3c, + 0x2,0x51,0x3b, 0x1,0x6d,0x46, 0x2,0x51,0x3a, 0x2,0x51,0x3d, + 0x2,0x57,0x6c, 0x4,0x50,0x6d, 0x5,0x5b,0x72, 0x2,0x57,0x6d, + 0x2,0x57,0x6e, 0x4,0x56,0x52, 0x2,0x5d,0x38, 0x1,0x73,0x7d, + 0x1,0x76,0x58, 0x2,0x65,0x65, 0x1,0x7a,0x73, 0x2,0x21,0x3f, + 0x3,0x29,0x59, 0x1,0x51,0x74, 0x2,0x2b,0x49, 0x1,0x56,0x33, + 0x4,0x32,0x4e, 0x4,0x32,0x50, 0x1,0x5b,0x44, 0x3,0x36,0x65, + 0x1,0x60,0x26, 0x2,0x3d,0x27, 0x3,0x3c,0x4b, 0x1,0x64,0x5b, + 0x1,0x64,0x5a, 0x3,0x42,0x26, 0x2,0x4b,0x31, 0x2,0x4b,0x32, + 0x1,0x6d,0x47, 0x1,0x6d,0x48, 0x2,0x57,0x70, 0x2,0x57,0x6f, + 0x2,0x61,0x75, 0x2,0x6f,0x32, 0x1,0x45,0x51, 0x2,0x21,0x40, + 0x1,0x46,0x60, 0x3,0x23,0x7a, 0x1,0x4a,0x64, 0x2,0x24,0x48, + 0x3,0x29,0x5a, 0x1,0x51,0x75, 0x1,0x64,0x5c, 0x1,0x45,0x52, + 0x2,0x2b,0x4a, 0x1,0x51,0x76, 0x2,0x2b,0x4b, 0x1,0x73,0x7e, + 0x1,0x45,0x53, 0x3,0x65,0x38, 0x3,0x65,0x39, 0x2,0x27,0x4d, + 0x2,0x2b,0x4c, 0x3,0x2d,0x42, 0x2,0x30,0x25, 0x2,0x30,0x24, + 0x2,0x30,0x22, 0x3,0x31,0x6e, 0x2,0x30,0x21, 0x2,0x30,0x26, + 0x2,0x30,0x23, 0x3,0x31,0x6c, 0x3,0x31,0x6d, 0x1,0x5b,0x45, + 0x1,0x5b,0x46, 0x3,0x36,0x66, 0x1,0x60,0x27, 0x2,0x3d,0x28, + 0x4,0x38,0x4e, 0x2,0x3d,0x29, 0x2,0x3d,0x2a, 0x3,0x3c,0x4d, + 0xf,0x3c,0x3c, 0x3,0x65,0x3a, 0x2,0x44,0x27, 0x2,0x44,0x28, + 0x2,0x44,0x26, 0x3,0x42,0x28, 0x2,0x44,0x24, 0x2,0x44,0x25, + 0x1,0x64,0x5d, 0x2,0x4b,0x33, 0x2,0x51,0x40, 0x2,0x51,0x3f, + 0x2,0x51,0x3e, 0x2,0x51,0x41, 0x2,0x57,0x72, 0x2,0x57,0x71, + 0x1,0x71,0x26, 0x2,0x57,0x73, 0x1,0x74,0x21, 0x2,0x5d,0x39, + 0x3,0x55,0x2d, 0x2,0x61,0x76, 0x2,0x65,0x66, 0x2,0x6d,0x55, + 0x1,0x45,0x54, 0x1,0x46,0x62, 0x1,0x46,0x61, 0x4,0x23,0x21, + 0x1,0x4e,0x40, 0x2,0x21,0x41, 0x2,0x21,0x5f, 0x1,0x48,0x3c, + 0x2,0x22,0x58, 0x2,0x24,0x49, 0x2,0x24,0x4a, 0x1,0x4e,0x41, + 0x3,0x29,0x5d, 0x2,0x27,0x4e, 0x3,0x65,0x3b, 0x1,0x51,0x77, + 0x2,0x2b,0x4d, 0x2,0x2b,0x4e, 0x1,0x56,0x34, 0x1,0x56,0x38, + 0x2,0x30,0x27, 0x1,0x56,0x37, 0x1,0x56,0x35, 0x1,0x56,0x36, + 0x2,0x36,0x43, 0x1,0x5b,0x47, 0x1,0x60,0x2a, 0x3,0x3c,0x4e, + 0x1,0x60,0x28, 0x1,0x60,0x29, 0x2,0x3d,0x2b, 0x3,0x42,0x29, + 0x3,0x42,0x2a, 0x1,0x69,0x3b, 0x1,0x45,0x55, 0x2,0x21,0x60, + 0x3,0x22,0x57, 0x1,0x46,0x63, 0x3,0x22,0x54, 0x2,0x21,0x63, + 0x3,0x24,0x21, 0x1,0x46,0x66, 0x2,0x21,0x62, 0x1,0x46,0x65, + 0x1,0x46,0x64, 0x1,0x4a,0x65, 0x2,0x21,0x61, 0x3,0x22,0x58, + 0x3,0x22,0x59, 0x2,0x22,0x59, 0xf,0x21,0x66, 0x2,0x22,0x5d, + 0x2,0x22,0x5f, 0x2,0x22,0x60, 0x1,0x48,0x46, 0x1,0x48,0x47, + 0x2,0x22,0x5c, 0x1,0x48,0x42, 0x3,0x23,0x7d, 0x2,0x22,0x5a, + 0x3,0x24,0x25, 0x2,0x22,0x5e, 0x1,0x48,0x43, 0x3,0x26,0x55, + 0x1,0x48,0x3e, 0x3,0x23,0x7c, 0x1,0x48,0x3f, 0x3,0x24,0x23, + 0x1,0x48,0x45, 0x2,0x22,0x5b, 0x1,0x48,0x3d, 0x1,0x4a,0x66, + 0x1,0x48,0x40, 0x1,0x48,0x41, 0x1,0x48,0x44, 0xf,0x22,0x5d, + 0x3,0x65,0x3c, 0x2,0x24,0x5b, 0x2,0x24,0x59, 0x2,0x24,0x4c, + 0x1,0x4a,0x72, 0x2,0x24,0x53, 0x1,0x4a,0x6d, 0x2,0x24,0x4d, + 0x3,0x29,0x64, 0x2,0x24,0x55, 0x3,0x26,0x50, 0x2,0x24,0x52, + 0x1,0x4a,0x70, 0x2,0x24,0x51, 0x1,0x4a,0x77, 0x2,0x24,0x5a, + 0x1,0x4a,0x79, 0x3,0x26,0x53, 0x1,0x4a,0x7b, 0x3,0x23,0x7e, + 0x2,0x24,0x4b, 0x3,0x26,0x57, 0x1,0x4a,0x6e, 0x2,0x24,0x5c, + 0x3,0x26,0x51, 0x1,0x4a,0x75, 0x1,0x4a,0x78, 0x3,0x26,0x4c, + 0x2,0x27,0x65, 0x1,0x4a,0x68, 0x1,0x4b,0x21, 0x1,0x4a,0x76, + 0x2,0x24,0x4e, 0x1,0x4a,0x6b, 0x1,0x4a,0x7a, 0x2,0x24,0x56, + 0x1,0x4a,0x69, 0x1,0x4a,0x6a, 0x2,0x27,0x63, 0x2,0x24,0x4f, + 0x1,0x4a,0x71, 0x1,0x4a,0x7c, 0x2,0x24,0x5d, 0x2,0x24,0x50, + 0x1,0x4a,0x6f, 0x3,0x26,0x4d, 0x1,0x4a,0x74, 0x2,0x27,0x4f, + 0x1,0x4a,0x7d, 0x2,0x24,0x57, 0x1,0x4a,0x73, 0x3,0x29,0x63, + 0x1,0x4a,0x7e, 0x1,0x4a,0x67, 0x2,0x24,0x54, 0x1,0x4a,0x6c, + 0x2,0x24,0x58, 0x2,0x27,0x64, 0x3,0x26,0x4e, 0x3,0x26,0x52, + 0x3,0x26,0x5c, 0x3,0x26,0x59, 0x3,0x26,0x56, 0xf,0x24,0x68, + 0x3,0x26,0x5b, 0x1,0x4e,0x4d, 0x1,0x4e,0x5d, 0x2,0x27,0x56, + 0x1,0x4e,0x54, 0x3,0x2d,0x4e, 0x2,0x27,0x6b, 0x1,0x4e,0x45, + 0x3,0x29,0x6b, 0x1,0x4e,0x48, 0x2,0x27,0x62, 0x4,0x27,0x26, + 0x2,0x27,0x54, 0x2,0x27,0x58, 0x1,0x4e,0x50, 0x1,0x4e,0x52, + 0x2,0x27,0x5b, 0x1,0x4e,0x59, 0x1,0x4e,0x4b, 0x1,0x4e,0x49, + 0x1,0x4e,0x4a, 0x1,0x4e,0x58, 0x2,0x27,0x67, 0x1,0x4e,0x53, + 0x2,0x27,0x5a, 0x2,0x27,0x5c, 0x1,0x4e,0x51, 0x1,0x4e,0x56, + 0x2,0x27,0x5d, 0x2,0x27,0x6a, 0x3,0x29,0x6d, 0x1,0x51,0x78, + 0x1,0x4e,0x5c, 0x4,0x26,0x7d, 0x1,0x4e,0x46, 0x2,0x27,0x69, + 0x3,0x29,0x6c, 0x2,0x27,0x6d, 0x2,0x27,0x59, 0x2,0x27,0x6f, + 0x2,0x27,0x60, 0x1,0x4e,0x4f, 0x2,0x27,0x55, 0x1,0x4e,0x4e, + 0x1,0x4e,0x60, 0x1,0x4e,0x55, 0x3,0x29,0x6a, 0x2,0x27,0x53, + 0x2,0x2b,0x57, 0x1,0x4e,0x5b, 0x1,0x4e,0x5f, 0x2,0x27,0x61, + 0x2,0x27,0x66, 0x3,0x29,0x65, 0x1,0x4e,0x61, 0x1,0x4e,0x5a, + 0x1,0x4e,0x4c, 0x1,0x4e,0x42, 0x3,0x29,0x69, 0x1,0x4e,0x47, + 0x4,0x26,0x7b, 0x2,0x27,0x57, 0x1,0x4e,0x43, 0x2,0x27,0x6e, + 0x3,0x29,0x67, 0x2,0x27,0x51, 0x2,0x27,0x50, 0x2,0x27,0x5e, + 0x2,0x27,0x52, 0x1,0x4e,0x5e, 0x1,0x56,0x39, 0x1,0x4e,0x57, + 0x2,0x27,0x5f, 0x1,0x4e,0x44, 0x3,0x2d,0x4f, 0x1,0x52,0x29, + 0x2,0x27,0x6c, 0x3,0x2d,0x46, 0x2,0x2b,0x5e, 0x2,0x2b,0x61, + 0x3,0x2d,0x50, 0x2,0x2b,0x64, 0x2,0x2b,0x59, 0x3,0x2d,0x48, + 0x3,0x2d,0x4a, 0x2,0x2b,0x67, 0x2,0x2b,0x6a, 0x2,0x2b,0x6c, + 0x2,0x2b,0x56, 0x1,0x51,0x79, 0x1,0x51,0x7e, 0x2,0x30,0x2c, + 0x1,0x52,0x30, 0x2,0x2b,0x65, 0x2,0x2b,0x6d, 0x2,0x2b,0x5d, + 0x2,0x2b,0x55, 0x3,0x2d,0x49, 0x3,0x2d,0x47, 0x3,0x2d,0x4d, + 0x2,0x30,0x47, 0x1,0x52,0x23, 0x2,0x2b,0x62, 0x2,0x2b,0x5a, + 0x2,0x2b,0x5c, 0x1,0x52,0x28, 0x3,0x31,0x7a, 0x2,0x2b,0x5f, + 0x1,0x52,0x22, 0x2,0x2b,0x52, 0x2,0x2b,0x68, 0x3,0x2d,0x4b, + 0x2,0x2b,0x6b, 0x3,0x2d,0x45, 0x3,0x2d,0x57, 0x1,0x51,0x7d, + 0x3,0x2d,0x53, 0x1,0x52,0x2b, 0x2,0x2b,0x4f, 0x1,0x52,0x2d, + 0x1,0x51,0x7b, 0x1,0x52,0x31, 0x2,0x2b,0x69, 0x2,0x2b,0x51, + 0x1,0x52,0x2e, 0x2,0x30,0x41, 0x2,0x27,0x68, 0x1,0x52,0x21, + 0x1,0x51,0x7a, 0x2,0x2b,0x58, 0x2,0x2b,0x50, 0x1,0x52,0x2f, + 0x1,0x52,0x27, 0x2,0x2b,0x63, 0x1,0x52,0x2c, 0x1,0x52,0x2a, + 0x2,0x2b,0x5b, 0x1,0x52,0x24, 0x2,0x2b,0x53, 0x1,0x52,0x25, + 0x1,0x52,0x26, 0x2,0x2b,0x54, 0x2,0x2b,0x66, 0x1,0x51,0x7c, + 0x2,0x2b,0x60, 0x4,0x2a,0x21, 0x3,0x2d,0x55, 0x3,0x2d,0x51, + 0x3,0x31,0x77, 0x3,0x31,0x73, 0x2,0x30,0x2f, 0x1,0x56,0x41, + 0x1,0x56,0x46, 0x3,0x31,0x79, 0x3,0x32,0x26, 0x3,0x31,0x76, + 0x2,0x30,0x38, 0x2,0x30,0x3e, 0x2,0x30,0x3a, 0x2,0x30,0x2d, + 0x2,0x30,0x30, 0x2,0x30,0x29, 0x2,0x30,0x2a, 0x1,0x56,0x4d, + 0x1,0x56,0x3e, 0x2,0x30,0x39, 0x2,0x30,0x42, 0x1,0x56,0x48, + 0x1,0x56,0x3a, 0x3,0x31,0x6f, 0x1,0x56,0x43, 0x2,0x30,0x31, + 0x1,0x56,0x45, 0x2,0x30,0x32, 0x2,0x30,0x3c, 0x3,0x32,0x22, + 0x3,0x32,0x25, 0x3,0x31,0x72, 0x1,0x56,0x47, 0x2,0x30,0x4b, + 0x2,0x30,0x2b, 0x1,0x56,0x40, 0x1,0x56,0x3f, 0x1,0x56,0x4b, + 0x2,0x30,0x28, 0x2,0x30,0x49, 0x2,0x30,0x3d, 0x2,0x30,0x4a, + 0x2,0x30,0x44, 0x2,0x30,0x36, 0x2,0x30,0x45, 0x3,0x32,0x21, + 0x2,0x30,0x3f, 0x2,0x30,0x48, 0x2,0x30,0x46, 0x1,0x56,0x4c, + 0x2,0x30,0x37, 0x1,0x56,0x3d, 0x1,0x56,0x3c, 0x1,0x56,0x44, + 0x1,0x56,0x4a, 0x2,0x30,0x43, 0x1,0x56,0x49, 0x2,0x30,0x34, + 0x1,0x5b,0x48, 0x3,0x31,0x78, 0x2,0x30,0x4c, 0x2,0x30,0x33, + 0x2,0x30,0x2e, 0x1,0x56,0x42, 0x1,0x56,0x4e, 0x1,0x56,0x3b, + 0x3,0x32,0x27, 0x2,0x30,0x3b, 0x2,0x30,0x40, 0x3,0x31,0x7d, + 0x3,0x31,0x7b, 0x3,0x31,0x7c, 0x3,0x65,0x3d, 0x1,0x5b,0x6a, + 0x2,0x36,0x45, 0x2,0x36,0x49, 0x3,0x36,0x6f, 0x1,0x5b,0x57, + 0x1,0x5b,0x55, 0x3,0x36,0x7a, 0x3,0x37,0x21, 0x1,0x5b,0x4c, + 0x2,0x36,0x47, 0x2,0x36,0x46, 0x1,0x5b,0x60, 0x3,0x3c,0x50, + 0x2,0x36,0x4c, 0x1,0x5b,0x5a, 0x3,0x36,0x72, 0x2,0x36,0x5e, + 0x2,0x36,0x6a, 0x1,0x5b,0x49, 0x2,0x36,0x5b, 0x2,0x36,0x54, + 0x1,0x5b,0x6c, 0x2,0x36,0x44, 0x3,0x36,0x6a, 0x2,0x36,0x60, + 0x3,0x36,0x6b, 0x1,0x5b,0x69, 0x1,0x5b,0x5d, 0x1,0x5b,0x68, + 0x1,0x5b,0x53, 0x2,0x36,0x50, 0x2,0x36,0x62, 0x2,0x36,0x5a, + 0x1,0x5b,0x54, 0x1,0x5b,0x4e, 0x2,0x36,0x68, 0x3,0x36,0x6c, + 0x2,0x36,0x61, 0x2,0x36,0x63, 0x1,0x5b,0x56, 0x1,0x5b,0x5e, + 0x2,0x36,0x65, 0x2,0x36,0x4e, 0x2,0x36,0x5f, 0x2,0x36,0x53, + 0x2,0x36,0x67, 0x1,0x5b,0x63, 0x1,0x5b,0x4b, 0x1,0x5b,0x61, + 0x2,0x36,0x58, 0x2,0x36,0x56, 0x2,0x36,0x57, 0x1,0x5b,0x58, + 0x2,0x36,0x52, 0x2,0x36,0x51, 0x1,0x5b,0x4d, 0x2,0x36,0x4b, + 0x2,0x36,0x69, 0x1,0x5b,0x4f, 0x2,0x36,0x55, 0x1,0x5b,0x6d, + 0x3,0x36,0x74, 0x1,0x5b,0x67, 0x2,0x36,0x4a, 0x1,0x5b,0x64, + 0x1,0x5b,0x62, 0x1,0x5b,0x6b, 0x2,0x36,0x5c, 0x1,0x5b,0x66, + 0x2,0x30,0x35, 0x2,0x36,0x5d, 0x1,0x5b,0x65, 0x2,0x36,0x64, + 0x1,0x5b,0x4a, 0x2,0x36,0x59, 0x1,0x5b,0x5c, 0x2,0x36,0x4d, + 0x1,0x5b,0x5b, 0x3,0x36,0x7c, 0x1,0x5b,0x59, 0x1,0x5b,0x51, + 0x1,0x5b,0x50, 0x2,0x3d,0x2c, 0x2,0x36,0x66, 0x3,0x3c,0x5d, + 0x3,0x37,0x28, 0x2,0x36,0x4f, 0x3,0x37,0x26, 0x3,0x37,0x23, + 0x2,0x3d,0x41, 0x3,0x36,0x70, 0x1,0x5b,0x52, 0x3,0x36,0x77, + 0x3,0x37,0x24, 0x3,0x36,0x76, 0x3,0x37,0x25, 0x3,0x36,0x79, + 0x4,0x32,0x6d, 0x3,0x36,0x7d, 0x3,0x65,0x3e, 0x3,0x37,0x29, + 0xf,0x36,0x29, 0x3,0x37,0x27, 0x3,0x3c,0x54, 0x1,0x60,0x47, + 0x1,0x5b,0x5f, 0x1,0x60,0x35, 0x2,0x3d,0x3b, 0x1,0x60,0x43, + 0x3,0x3c,0x52, 0x2,0x3d,0x2f, 0x1,0x60,0x32, 0x1,0x60,0x2e, + 0x2,0x3d,0x4d, 0x1,0x60,0x34, 0x1,0x60,0x38, 0x1,0x60,0x33, + 0x1,0x60,0x3c, 0x2,0x3d,0x51, 0x2,0x3d,0x48, 0x3,0x3c,0x6b, + 0x3,0x3c,0x6d, 0x2,0x3d,0x36, 0x1,0x60,0x41, 0x1,0x60,0x3b, + 0x2,0x3d,0x42, 0x1,0x60,0x2b, 0x2,0x3d,0x4e, 0x2,0x3d,0x47, + 0x1,0x60,0x2f, 0x2,0x3d,0x3c, 0x1,0x60,0x3e, 0x2,0x3d,0x59, + 0x2,0x3d,0x5a, 0x4,0x38,0x5b, 0x1,0x60,0x2c, 0x2,0x3d,0x4c, + 0x1,0x60,0x40, 0x2,0x3d,0x40, 0x2,0x3d,0x32, 0x2,0x3d,0x33, + 0x1,0x60,0x44, 0x2,0x3d,0x37, 0x2,0x3d,0x3e, 0x2,0x3d,0x38, + 0x3,0x3c,0x5a, 0x1,0x60,0x42, 0x1,0x60,0x4a, 0x2,0x3d,0x34, + 0x2,0x3d,0x2d, 0x2,0x3d,0x2e, 0x3,0x3c,0x56, 0x2,0x3d,0x30, + 0x1,0x60,0x31, 0x2,0x3d,0x3d, 0x3,0x3c,0x6e, 0x1,0x60,0x3f, + 0x1,0x60,0x48, 0x3,0x3c,0x58, 0x3,0x3c,0x69, 0x2,0x3d,0x3f, + 0x2,0x3d,0x57, 0x2,0x3d,0x4f, 0x1,0x60,0x2d, 0x2,0x3d,0x55, + 0x1,0x60,0x39, 0x3,0x3c,0x66, 0x1,0x60,0x37, 0x3,0x3c,0x64, + 0x2,0x3d,0x5b, 0x1,0x60,0x36, 0x2,0x3d,0x45, 0x2,0x3d,0x39, + 0x2,0x3d,0x43, 0x1,0x60,0x4d, 0x2,0x3d,0x49, 0x2,0x3d,0x46, + 0x2,0x3d,0x35, 0x1,0x60,0x49, 0x2,0x3d,0x53, 0x2,0x3d,0x50, + 0x2,0x3d,0x58, 0x1,0x60,0x30, 0x2,0x3d,0x44, 0x1,0x60,0x4c, + 0x3,0x3c,0x5b, 0x2,0x3d,0x4b, 0x3,0x42,0x3a, 0x3,0x3c,0x60, + 0x1,0x60,0x3a, 0x1,0x60,0x3d, 0x3,0x3c,0x5c, 0x2,0x3d,0x4a, + 0x1,0x60,0x4b, 0x2,0x3d,0x3a, 0x2,0x36,0x48, 0x3,0x3c,0x51, + 0x3,0x3c,0x6c, 0x2,0x3d,0x54, 0x2,0x3d,0x52, 0x2,0x3d,0x56, + 0xf,0x3c,0x5d, 0x3,0x3c,0x62, 0x3,0x65,0x42, 0x4,0x38,0x5e, + 0x3,0x3c,0x63, 0x3,0x3c,0x68, 0xf,0x3c,0x47, 0x3,0x65,0x40, + 0x4,0x38,0x5f, 0x2,0x3d,0x31, 0x1,0x60,0x46, 0x3,0x65,0x3f, + 0x3,0x65,0x41, 0x2,0x44,0x47, 0x2,0x44,0x46, 0x2,0x44,0x2c, + 0x1,0x64,0x63, 0x3,0x42,0x30, 0x2,0x44,0x45, 0x2,0x44,0x2f, + 0x2,0x44,0x30, 0x4,0x3e,0x3f, 0x1,0x64,0x6d, 0x2,0x44,0x4e, + 0x1,0x64,0x68, 0x2,0x44,0x44, 0x3,0x42,0x33, 0x2,0x44,0x29, + 0x1,0x64,0x6e, 0x1,0x64,0x64, 0x2,0x44,0x38, 0x2,0x44,0x2e, + 0x2,0x44,0x31, 0x2,0x44,0x49, 0x1,0x64,0x5e, 0x2,0x44,0x50, + 0x2,0x44,0x48, 0x1,0x64,0x67, 0x2,0x44,0x3d, 0x1,0x64,0x72, + 0x3,0x42,0x2e, 0x3,0x42,0x36, 0x1,0x64,0x71, 0x1,0x64,0x6b, + 0x3,0x42,0x40, 0x4,0x3e,0x36, 0x2,0x44,0x4f, 0x1,0x64,0x5f, + 0x2,0x44,0x3b, 0x2,0x44,0x32, 0x2,0x44,0x3f, 0x2,0x44,0x4b, + 0x1,0x64,0x73, 0x3,0x42,0x39, 0x1,0x64,0x61, 0x2,0x44,0x3a, + 0x3,0x42,0x2d, 0x2,0x44,0x33, 0x1,0x64,0x6a, 0x3,0x42,0x31, + 0x1,0x64,0x69, 0x2,0x44,0x36, 0x2,0x44,0x40, 0x2,0x44,0x4a, + 0x2,0x44,0x2d, 0x2,0x44,0x37, 0x1,0x64,0x62, 0x2,0x44,0x41, + 0x1,0x64,0x6f, 0x1,0x64,0x66, 0x2,0x44,0x34, 0x1,0x64,0x65, + 0x2,0x44,0x2b, 0x2,0x44,0x39, 0x2,0x44,0x4d, 0x1,0x60,0x45, + 0x1,0x69,0x57, 0x2,0x44,0x3c, 0x2,0x4b,0x34, 0x2,0x44,0x3e, + 0x2,0x44,0x4c, 0x1,0x64,0x6c, 0x2,0x44,0x35, 0x1,0x64,0x60, + 0x1,0x64,0x70, 0x1,0x6d,0x5a, 0x2,0x44,0x2a, 0x6,0x54,0x4e, + 0x2,0x44,0x43, 0x3,0x42,0x44, 0x3,0x42,0x3e, 0x3,0x42,0x47, + 0x2,0x44,0x42, 0x3,0x42,0x3d, 0x3,0x42,0x45, 0x3,0x42,0x3f, + 0x3,0x42,0x3b, 0x3,0x42,0x46, 0x2,0x4b,0x50, 0x1,0x69,0x54, + 0x2,0x4b,0x45, 0x2,0x4b,0x4a, 0x1,0x69,0x49, 0x3,0x47,0x56, + 0x2,0x4b,0x36, 0x1,0x69,0x56, 0x3,0x47,0x57, 0x1,0x69,0x40, + 0x2,0x4b,0x35, 0x2,0x4b,0x56, 0x1,0x69,0x58, 0x2,0x4b,0x39, + 0x2,0x4b,0x49, 0x3,0x47,0x65, 0x2,0x4b,0x3b, 0x2,0x4b,0x59, + 0x2,0x4b,0x55, 0x1,0x69,0x3e, 0x1,0x69,0x48, 0x2,0x51,0x5b, + 0x1,0x69,0x55, 0x1,0x69,0x46, 0x2,0x4b,0x37, 0x3,0x47,0x63, + 0x2,0x4b,0x54, 0x1,0x69,0x4a, 0x2,0x4b,0x51, 0x2,0x4b,0x5e, + 0x2,0x4b,0x3d, 0x2,0x4b,0x46, 0x3,0x4c,0x78, 0x3,0x47,0x5b, + 0x2,0x4b,0x5c, 0x2,0x4b,0x52, 0x1,0x69,0x45, 0x3,0x4c,0x6a, + 0x3,0x47,0x64, 0x2,0x4b,0x44, 0x1,0x69,0x3f, 0x1,0x69,0x3d, + 0x1,0x69,0x4f, 0x4,0x44,0x43, 0x3,0x47,0x5f, 0x2,0x4b,0x42, + 0x2,0x4b,0x3f, 0x2,0x4b,0x40, 0x3,0x47,0x5a, 0x2,0x4b,0x58, + 0x3,0x47,0x5c, 0x2,0x4b,0x5d, 0x2,0x4b,0x5b, 0x1,0x69,0x43, + 0x2,0x4b,0x5f, 0x1,0x69,0x47, 0x1,0x69,0x4e, 0x4,0x44,0x44, + 0x2,0x4b,0x38, 0x2,0x51,0x43, 0x2,0x4b,0x41, 0x3,0x47,0x5e, + 0x1,0x69,0x41, 0x1,0x69,0x53, 0x1,0x69,0x50, 0x1,0x69,0x44, + 0x2,0x4b,0x4b, 0x2,0x4b,0x3c, 0x1,0x69,0x51, 0x2,0x4b,0x4d, + 0x1,0x69,0x4b, 0x1,0x69,0x4d, 0x1,0x69,0x3c, 0x3,0x47,0x5d, + 0x2,0x4b,0x4f, 0x2,0x4b,0x47, 0x2,0x4b,0x3a, 0x1,0x69,0x4c, + 0x2,0x4b,0x57, 0x2,0x4b,0x5a, 0x2,0x4b,0x43, 0x2,0x4b,0x4e, + 0x3,0x4c,0x74, 0x1,0x69,0x42, 0x1,0x6d,0x49, 0x2,0x4b,0x4c, + 0x2,0x51,0x42, 0x3,0x47,0x62, 0x2,0x4b,0x53, 0x3,0x47,0x61, + 0x4,0x44,0x52, 0xf,0x4f,0x79, 0x3,0x65,0x44, 0x3,0x65,0x45, + 0x3,0x47,0x66, 0x3,0x65,0x43, 0x2,0x4b,0x3e, 0x2,0x51,0x4c, + 0x2,0x51,0x56, 0x1,0x6d,0x4c, 0x2,0x51,0x55, 0x2,0x51,0x61, + 0x1,0x6d,0x4e, 0x2,0x51,0x53, 0x4,0x4a,0x58, 0x2,0x51,0x57, + 0x1,0x6d,0x59, 0x3,0x4c,0x7d, 0x2,0x51,0x4e, 0x1,0x6d,0x51, + 0x3,0x4c,0x73, 0x2,0x51,0x5a, 0x2,0x57,0x7b, 0x1,0x6d,0x5d, + 0x1,0x6d,0x5c, 0x2,0x51,0x5c, 0x2,0x51,0x4b, 0x2,0x51,0x66, + 0x1,0x6d,0x57, 0x3,0x4c,0x6b, 0x1,0x6d,0x4d, 0x2,0x51,0x5f, + 0x4,0x4a,0x69, 0x2,0x51,0x63, 0x2,0x51,0x68, 0x2,0x51,0x5d, + 0x2,0x51,0x51, 0x1,0x6d,0x50, 0x1,0x6d,0x53, 0x1,0x6d,0x5b, + 0x1,0x6d,0x56, 0x3,0x4c,0x75, 0x2,0x51,0x54, 0x2,0x4b,0x48, + 0x3,0x4c,0x7e, 0x3,0x4c,0x6c, 0x2,0x51,0x50, 0x2,0x51,0x67, + 0x1,0x6d,0x52, 0x3,0x4c,0x79, 0x1,0x6d,0x55, 0x2,0x51,0x69, + 0x1,0x6d,0x4a, 0x2,0x51,0x5e, 0x2,0x51,0x44, 0x2,0x51,0x64, + 0x1,0x74,0x2a, 0x3,0x4c,0x7a, 0x2,0x51,0x52, 0x4,0x50,0x75, + 0x1,0x6d,0x4b, 0x2,0x51,0x4d, 0x1,0x6d,0x4f, 0x2,0x51,0x45, + 0x1,0x69,0x52, 0x2,0x51,0x49, 0x4,0x4a,0x57, 0x2,0x51,0x62, + 0x2,0x51,0x4a, 0x2,0x51,0x48, 0x1,0x6d,0x54, 0x3,0x4c,0x7b, + 0x2,0x51,0x60, 0x3,0x4c,0x77, 0x2,0x51,0x47, 0x2,0x51,0x59, + 0x2,0x51,0x58, 0x2,0x51,0x65, 0x2,0x51,0x4f, 0x1,0x6d,0x58, + 0x4,0x4a,0x64, 0x3,0x65,0x47, 0xf,0x4f,0x7d, 0x3,0x65,0x46, + 0x2,0x57,0x7e, 0x3,0x51,0x56, 0x1,0x71,0x33, 0x1,0x71,0x29, + 0x2,0x58,0x2c, 0x2,0x57,0x76, 0x1,0x71,0x2b, 0x2,0x58,0x24, + 0x1,0x71,0x32, 0x1,0x71,0x2d, 0x2,0x58,0x22, 0x2,0x5d,0x3b, + 0x2,0x58,0x28, 0x2,0x58,0x2e, 0x2,0x58,0x27, 0x2,0x57,0x74, + 0x2,0x58,0x25, 0x2,0x58,0x30, 0x2,0x58,0x32, 0x1,0x71,0x28, + 0x2,0x58,0x31, 0x1,0x71,0x2e, 0x1,0x71,0x34, 0x3,0x51,0x54, + 0x1,0x71,0x31, 0x3,0x51,0x58, 0x2,0x58,0x2b, 0x1,0x71,0x30, + 0x2,0x58,0x26, 0x3,0x51,0x4d, 0x2,0x57,0x78, 0x2,0x57,0x7d, + 0x3,0x51,0x50, 0x2,0x58,0x2a, 0x1,0x71,0x2f, 0x1,0x71,0x2c, + 0x1,0x71,0x27, 0x1,0x71,0x2a, 0x2,0x57,0x7c, 0x4,0x51,0x22, + 0x2,0x51,0x46, 0x2,0x57,0x77, 0x2,0x57,0x7a, 0x2,0x58,0x2d, + 0x2,0x58,0x21, 0x2,0x57,0x75, 0x2,0x5d,0x3a, 0x2,0x58,0x2f, + 0x2,0x57,0x79, 0x2,0x58,0x29, 0x3,0x4c,0x71, 0x3,0x51,0x55, + 0x2,0x5d,0x3d, 0x1,0x74,0x2e, 0x3,0x55,0x30, 0x3,0x55,0x2f, + 0x1,0x74,0x22, 0x3,0x55,0x35, 0x3,0x55,0x36, 0x1,0x74,0x26, + 0x2,0x5d,0x3f, 0x2,0x5d,0x45, 0x2,0x5d,0x43, 0x1,0x74,0x24, + 0x1,0x74,0x25, 0x1,0x74,0x2c, 0x2,0x5d,0x46, 0x2,0x5d,0x3e, + 0x1,0x74,0x27, 0x3,0x55,0x31, 0x2,0x5d,0x42, 0x2,0x5d,0x41, + 0x2,0x5d,0x47, 0x1,0x74,0x2d, 0x3,0x55,0x37, 0x1,0x74,0x28, + 0x1,0x74,0x2b, 0x2,0x5d,0x40, 0x1,0x74,0x2f, 0x1,0x74,0x29, + 0x1,0x74,0x30, 0x1,0x74,0x23, 0x2,0x5d,0x44, 0x3,0x5a,0x55, + 0x2,0x5d,0x3c, 0x3,0x51,0x59, 0x3,0x55,0x39, 0x2,0x62,0x25, + 0x3,0x65,0x48, 0x1,0x76,0x5d, 0x2,0x62,0x22, 0x2,0x62,0x24, + 0x3,0x58,0x28, 0x1,0x76,0x5b, 0x2,0x61,0x7e, 0x2,0x62,0x21, + 0x2,0x61,0x7a, 0x3,0x58,0x2a, 0x3,0x58,0x27, 0x2,0x58,0x23, + 0x2,0x61,0x7b, 0x1,0x76,0x5c, 0x2,0x61,0x77, 0x3,0x58,0x26, + 0x1,0x76,0x59, 0x2,0x62,0x26, 0x1,0x76,0x5a, 0x2,0x61,0x78, + 0x2,0x61,0x79, 0x2,0x61,0x7d, 0x1,0x76,0x5f, 0x3,0x58,0x29, + 0x1,0x76,0x5e, 0x4,0x5b,0x5e, 0x3,0x58,0x2b, 0x2,0x61,0x7c, + 0x1,0x78,0x45, 0x2,0x65,0x6a, 0x2,0x65,0x70, 0x1,0x78,0x46, + 0x2,0x65,0x67, 0x1,0x78,0x43, 0x1,0x78,0x40, 0x2,0x65,0x72, + 0x1,0x78,0x44, 0x3,0x5a,0x52, 0x1,0x78,0x41, 0x2,0x65,0x69, + 0x2,0x65,0x6c, 0x2,0x65,0x6d, 0x2,0x65,0x6e, 0x2,0x65,0x71, + 0x3,0x5a,0x54, 0x2,0x62,0x23, 0x2,0x65,0x68, 0x1,0x78,0x42, + 0x2,0x65,0x6f, 0x2,0x69,0x34, 0x2,0x65,0x6b, 0x3,0x5a,0x53, + 0x3,0x65,0x4a, 0x3,0x65,0x49, 0x2,0x69,0x2b, 0x1,0x79,0x75, + 0x2,0x69,0x2e, 0x1,0x79,0x76, 0x2,0x69,0x37, 0x2,0x69,0x2d, + 0x2,0x69,0x2a, 0x3,0x5c,0x51, 0x2,0x69,0x2c, 0x2,0x69,0x30, + 0x2,0x69,0x33, 0x2,0x69,0x32, 0x2,0x69,0x36, 0x2,0x69,0x29, + 0x3,0x5c,0x4f, 0x1,0x79,0x74, 0x2,0x69,0x31, 0x2,0x69,0x35, + 0x2,0x69,0x38, 0x2,0x69,0x2f, 0x2,0x6b,0x61, 0x2,0x6b,0x62, + 0x2,0x6b,0x66, 0x2,0x6b,0x67, 0x3,0x5e,0x3c, 0x2,0x6b,0x64, + 0x2,0x6b,0x65, 0x2,0x6b,0x63, 0x3,0x5e,0x3a, 0x1,0x7a,0x74, + 0x3,0x5e,0x3b, 0x1,0x7b,0x64, 0x2,0x6d,0x59, 0x3,0x60,0x36, + 0x3,0x5f,0x52, 0x2,0x6d,0x56, 0x2,0x6d,0x57, 0x2,0x6d,0x58, + 0x1,0x7b,0x65, 0x3,0x60,0x37, 0x2,0x6f,0x34, 0x2,0x6f,0x33, + 0x3,0x65,0x4b, 0x2,0x70,0x3d, 0x1,0x7c,0x60, 0x2,0x70,0x3b, + 0x2,0x70,0x3e, 0x2,0x70,0x3c, 0x2,0x71,0x25, 0x1,0x7d,0x24, + 0x1,0x7d,0x32, 0x2,0x71,0x71, 0x2,0x71,0x5b, 0x3,0x61,0x79, + 0x2,0x71,0x70, 0x2,0x72,0x3e, 0x2,0x72,0x3f, 0x1,0x45,0x56, + 0x4,0x21,0x50, 0x3,0x24,0x28, 0x3,0x24,0x26, 0x1,0x48,0x48, + 0x2,0x22,0x61, 0x3,0x24,0x27, 0x3,0x24,0x2b, 0x2,0x24,0x5e, + 0x3,0x26,0x62, 0x1,0x4b,0x22, 0x3,0x26,0x5f, 0x1,0x4b,0x25, + 0x3,0x26,0x5e, 0x2,0x24,0x5f, 0x3,0x26,0x63, 0x1,0x4b,0x23, + 0x1,0x4b,0x24, 0x3,0x26,0x60, 0xf,0x24,0x71, 0x3,0x29,0x77, + 0x2,0x27,0x78, 0x2,0x27,0x7a, 0x2,0x27,0x75, 0x2,0x27,0x72, + 0x2,0x27,0x74, 0x3,0x29,0x74, 0x3,0x29,0x70, 0x3,0x29,0x75, + 0x1,0x4e,0x65, 0x3,0x29,0x6f, 0x3,0x29,0x79, 0x3,0x29,0x76, + 0x1,0x4e,0x63, 0x3,0x29,0x72, 0x3,0x29,0x71, 0x2,0x27,0x76, + 0x1,0x4e,0x64, 0x2,0x27,0x73, 0x2,0x27,0x70, 0x1,0x4e,0x62, + 0x2,0x27,0x77, 0x4,0x27,0x29, 0x2,0x27,0x71, 0x1,0x4e,0x66, + 0x2,0x27,0x79, 0x4,0x27,0x2b, 0x2,0x2b,0x6f, 0x3,0x2d,0x5e, + 0x2,0x2b,0x73, 0x3,0x2d,0x5c, 0x3,0x2d,0x5a, 0x1,0x52,0x3a, + 0x3,0x2d,0x58, 0x4,0x2a,0x26, 0x3,0x2d,0x65, 0x3,0x2d,0x62, + 0x2,0x2b,0x76, 0x3,0x2d,0x5f, 0x1,0x52,0x32, 0x1,0x52,0x35, + 0x1,0x52,0x37, 0x1,0x52,0x39, 0x1,0x52,0x36, 0x2,0x2b,0x72, + 0x2,0x2b,0x71, 0x3,0x2d,0x64, 0x1,0x52,0x34, 0x2,0x2b,0x74, + 0x2,0x2b,0x75, 0x3,0x2d,0x63, 0x2,0x2b,0x6e, 0x1,0x52,0x38, + 0x3,0x2d,0x68, 0x1,0x52,0x33, 0x3,0x2d,0x5d, 0x2,0x2b,0x70, + 0x3,0x65,0x4d, 0x4,0x2a,0x28, 0x3,0x32,0x28, 0x2,0x30,0x5a, + 0x2,0x30,0x5b, 0x2,0x30,0x5c, 0x1,0x56,0x53, 0x4,0x2d,0x75, + 0x1,0x56,0x4f, 0x2,0x30,0x51, 0x3,0x32,0x2a, 0x2,0x30,0x59, + 0x2,0x30,0x5e, 0x1,0x56,0x54, 0x3,0x32,0x2b, 0x2,0x30,0x4f, + 0x2,0x30,0x55, 0x2,0x30,0x4e, 0x2,0x30,0x58, 0x3,0x32,0x31, + 0x3,0x32,0x2f, 0x2,0x30,0x54, 0x1,0x56,0x50, 0x1,0x56,0x52, + 0x2,0x30,0x5d, 0x3,0x32,0x29, 0x2,0x30,0x4d, 0x2,0x30,0x50, + 0x2,0x30,0x56, 0x3,0x32,0x2d, 0x2,0x30,0x57, 0x2,0x30,0x5f, + 0x2,0x30,0x53, 0x3,0x32,0x2c, 0x1,0x56,0x51, 0x3,0x65,0x4f, + 0x3,0x65,0x4e, 0x3,0x32,0x30, 0x1,0x5b,0x72, 0x2,0x36,0x71, + 0x3,0x37,0x30, 0x3,0x37,0x32, 0x2,0x36,0x73, 0x2,0x36,0x6f, + 0x3,0x37,0x2f, 0x2,0x36,0x7b, 0x2,0x36,0x6d, 0x2,0x36,0x7a, + 0x1,0x5b,0x6e, 0x2,0x36,0x6b, 0x2,0x3d,0x5f, 0x2,0x36,0x75, + 0x1,0x5b,0x71, 0x3,0x37,0x35, 0x2,0x36,0x76, 0x2,0x36,0x79, + 0x3,0x37,0x2e, 0x2,0x36,0x7d, 0x3,0x37,0x2c, 0x2,0x36,0x72, + 0x4,0x32,0x72, 0x2,0x36,0x77, 0x3,0x37,0x2d, 0x3,0x37,0x31, + 0x1,0x5b,0x6f, 0x1,0x5b,0x70, 0x2,0x36,0x7c, 0x2,0x36,0x70, + 0x2,0x36,0x6c, 0x2,0x36,0x7e, 0x3,0x37,0x33, 0x2,0x36,0x74, + 0x3,0x65,0x50, 0x3,0x65,0x51, 0x2,0x36,0x78, 0x2,0x36,0x6e, + 0x1,0x60,0x4e, 0x1,0x60,0x4f, 0x2,0x3d,0x69, 0x1,0x60,0x55, + 0x3,0x3c,0x74, 0x2,0x3d,0x5d, 0x2,0x3d,0x66, 0x2,0x3d,0x5c, + 0x1,0x60,0x52, 0x2,0x3d,0x64, 0x2,0x3d,0x62, 0x3,0x3c,0x7d, + 0x2,0x3d,0x63, 0x1,0x60,0x50, 0x3,0x3c,0x7c, 0x2,0x3d,0x67, + 0xf,0x3c,0x7e, 0x3,0x3c,0x6f, 0x3,0x3c,0x7a, 0x3,0x3c,0x72, + 0x3,0x3d,0x21, 0x2,0x3d,0x60, 0x2,0x3d,0x5e, 0x1,0x60,0x51, + 0x2,0x3d,0x61, 0x2,0x3d,0x65, 0x3,0x3c,0x7b, 0x3,0x3c,0x79, + 0x3,0x3c,0x71, 0x1,0x60,0x53, 0x3,0x3c,0x73, 0x3,0x3c,0x77, + 0x3,0x65,0x53, 0x2,0x3d,0x68, 0x3,0x65,0x54, 0x3,0x65,0x55, + 0x3,0x65,0x52, 0x2,0x44,0x56, 0x2,0x44,0x5d, 0x2,0x44,0x5f, + 0x2,0x44,0x65, 0x3,0x42,0x57, 0x1,0x65,0x22, 0x2,0x44,0x51, + 0x3,0x42,0x4c, 0x1,0x64,0x78, 0x3,0x42,0x4e, 0x2,0x44,0x60, + 0x1,0x64,0x7d, 0x2,0x44,0x66, 0x1,0x64,0x74, 0x3,0x42,0x51, + 0x2,0x44,0x63, 0x3,0x42,0x58, 0x2,0x44,0x53, 0x2,0x44,0x64, + 0x2,0x44,0x52, 0x1,0x65,0x24, 0x3,0x42,0x52, 0x2,0x44,0x5e, + 0x1,0x64,0x75, 0x2,0x44,0x67, 0x3,0x48,0x3c, 0x1,0x64,0x7a, + 0x2,0x44,0x57, 0x1,0x65,0x21, 0x2,0x44,0x62, 0x2,0x44,0x55, + 0x2,0x44,0x5c, 0x2,0x44,0x58, 0x2,0x44,0x54, 0x1,0x64,0x77, + 0x1,0x64,0x7e, 0x1,0x64,0x7c, 0x1,0x64,0x79, 0x1,0x65,0x23, + 0x1,0x64,0x76, 0x2,0x44,0x5b, 0x3,0x42,0x4f, 0x1,0x64,0x7b, + 0x3,0x42,0x59, 0x1,0x60,0x54, 0x3,0x42,0x49, 0x2,0x44,0x61, + 0x3,0x65,0x59, 0x2,0x44,0x59, 0x3,0x42,0x53, 0x3,0x65,0x57, + 0x3,0x65,0x58, 0x3,0x65,0x56, 0x2,0x44,0x5a, 0x4,0x44,0x57, + 0x4,0x44,0x5b, 0x2,0x4b,0x67, 0x3,0x47,0x6f, 0x1,0x69,0x5b, + 0x3,0x47,0x6e, 0x3,0x47,0x6c, 0x2,0x4b,0x63, 0x2,0x4b,0x69, + 0x2,0x4b,0x65, 0x3,0x47,0x70, 0x1,0x69,0x5d, 0x2,0x4b,0x64, + 0x2,0x4b,0x68, 0x2,0x4b,0x60, 0x3,0x47,0x72, 0x2,0x4b,0x62, + 0x1,0x69,0x5c, 0x3,0x47,0x6a, 0x3,0x47,0x6d, 0x3,0x47,0x6b, + 0x3,0x47,0x68, 0x2,0x4b,0x66, 0x2,0x4b,0x61, 0x3,0x47,0x67, + 0x1,0x69,0x5e, 0x3,0x65,0x5b, 0x1,0x69,0x59, 0xf,0x49,0x4b, + 0x3,0x65,0x5a, 0x2,0x4b,0x6a, 0xf,0x49,0x5f, 0x1,0x69,0x5a, + 0x2,0x51,0x6f, 0x2,0x51,0x6c, 0x2,0x51,0x78, 0x2,0x51,0x72, + 0x2,0x51,0x74, 0x1,0x6d,0x5e, 0x2,0x51,0x6e, 0x2,0x51,0x76, + 0x3,0x4d,0x2a, 0x3,0x4d,0x24, 0x2,0x51,0x75, 0x2,0x51,0x73, + 0x3,0x4d,0x29, 0x2,0x51,0x79, 0x1,0x6d,0x61, 0x2,0x51,0x70, + 0x2,0x51,0x77, 0x3,0x4d,0x28, 0x1,0x6d,0x5f, 0x3,0x4d,0x25, + 0x3,0x4d,0x22, 0x2,0x51,0x6b, 0x2,0x51,0x6d, 0x1,0x6d,0x60, + 0x2,0x51,0x6a, 0x2,0x51,0x7a, 0x3,0x65,0x5c, 0x2,0x51,0x71, + 0x3,0x51,0x62, 0x3,0x51,0x5a, 0x2,0x58,0x36, 0x1,0x71,0x3b, + 0x3,0x51,0x60, 0x3,0x51,0x5c, 0x2,0x58,0x41, 0x2,0x58,0x3f, + 0x1,0x71,0x35, 0x2,0x58,0x35, 0x2,0x58,0x38, 0x2,0x58,0x39, + 0x2,0x58,0x34, 0x1,0x71,0x3f, 0x1,0x71,0x40, 0x2,0x58,0x33, + 0x2,0x58,0x42, 0x2,0x58,0x3d, 0x1,0x71,0x39, 0x1,0x71,0x36, + 0x2,0x58,0x3c, 0x2,0x58,0x3a, 0x3,0x51,0x63, 0x4,0x51,0x23, + 0x1,0x71,0x3c, 0x2,0x58,0x3e, 0x1,0x71,0x37, 0x3,0x51,0x5e, + 0x1,0x71,0x38, 0x3,0x51,0x66, 0x2,0x58,0x3b, 0x1,0x71,0x3a, + 0x2,0x58,0x37, 0x7,0x2f,0x4f, 0x2,0x58,0x40, 0x1,0x71,0x3d, + 0x2,0x58,0x43, 0x2,0x58,0x44, 0x1,0x71,0x3e, 0x3,0x65,0x5d, + 0x3,0x65,0x5e, 0x1,0x74,0x32, 0x1,0x74,0x39, 0x2,0x5d,0x48, + 0x2,0x5d,0x4e, 0x3,0x55,0x3c, 0x2,0x5d,0x4c, 0x1,0x74,0x35, + 0x1,0x74,0x34, 0x1,0x74,0x31, 0x2,0x5d,0x4a, 0x3,0x55,0x3e, + 0x3,0x55,0x43, 0x3,0x55,0x40, 0x1,0x74,0x37, 0x1,0x74,0x36, + 0x1,0x74,0x33, 0x3,0x55,0x41, 0x2,0x5d,0x4d, 0x2,0x5d,0x49, + 0x2,0x5d,0x4b, 0x3,0x55,0x42, 0x1,0x74,0x38, 0xf,0x5a,0x73, + 0x1,0x76,0x63, 0x2,0x62,0x29, 0x3,0x58,0x2d, 0x1,0x76,0x60, + 0x1,0x76,0x61, 0x2,0x62,0x2b, 0x1,0x76,0x62, 0x2,0x62,0x28, + 0x3,0x58,0x2e, 0x2,0x62,0x27, 0x2,0x65,0x76, 0x2,0x62,0x2a, + 0x3,0x5a,0x56, 0x2,0x65,0x77, 0x1,0x78,0x47, 0x2,0x65,0x75, + 0x3,0x5a,0x57, 0x4,0x5f,0x7e, 0x2,0x65,0x74, 0x3,0x5c,0x59, + 0x2,0x65,0x73, 0x1,0x78,0x48, 0x3,0x65,0x5f, 0x3,0x5c,0x56, + 0x1,0x79,0x77, 0x3,0x5c,0x58, 0x3,0x5c,0x55, 0x2,0x69,0x39, + 0x2,0x69,0x3a, 0x3,0x5a,0x58, 0x3,0x5c,0x53, 0x3,0x5c,0x57, + 0x3,0x65,0x61, 0x2,0x6b,0x6a, 0x2,0x6b,0x69, 0x1,0x7a,0x75, + 0x3,0x5f,0x53, 0x2,0x6b,0x68, 0x2,0x6d,0x5a, 0x2,0x6d,0x5b, + 0x3,0x5f,0x54, 0x3,0x60,0x39, 0x2,0x6f,0x35, 0x2,0x70,0x3f, + 0x3,0x61,0x43, 0x3,0x61,0x42, 0x2,0x71,0x26, 0x2,0x72,0x2c, + 0x1,0x7d,0x46, 0x2,0x72,0x40, 0x1,0x45,0x57, 0x4,0x21,0x51, + 0x1,0x4e,0x67, 0x1,0x4e,0x68, 0x3,0x2d,0x69, 0x4,0x2a,0x2a, + 0x1,0x52,0x3b, 0x3,0x3d,0x22, 0x4,0x4a,0x6c, 0x1,0x74,0x3a, + 0x1,0x45,0x58, 0x1,0x4e,0x69, 0x1,0x56,0x55, 0x1,0x65,0x25, + 0x1,0x45,0x59, 0x3,0x2d,0x6b, 0x1,0x5b,0x73, 0x1,0x69,0x5f, + 0x2,0x21,0x42, 0x3,0x29,0x7c, 0x2,0x2b,0x77, 0x2,0x30,0x60, + 0x4,0x3e,0x4c, 0x2,0x4b,0x6b, 0x4,0x4a,0x6d, 0x1,0x74,0x3b, + 0x1,0x45,0x5a, 0x1,0x4e,0x6a, 0x2,0x2b,0x78, 0x2,0x2b,0x79, + 0x2,0x3d,0x6a, 0x1,0x60,0x56, 0x3,0x42,0x5d, 0x2,0x44,0x68, + 0x3,0x42,0x5c, 0x3,0x42,0x5b, 0x1,0x65,0x26, 0x2,0x4b,0x6c, + 0x4,0x44,0x5e, 0x3,0x4d,0x2e, 0x1,0x6d,0x62, 0x3,0x4d,0x2d, + 0x1,0x78,0x49, 0x1,0x45,0x5b, 0x2,0x3d,0x6b, 0x1,0x45,0x5c, + 0x1,0x48,0x4a, 0x2,0x22,0x62, 0x1,0x48,0x49, 0x1,0x4b,0x28, + 0x1,0x4b,0x27, 0x1,0x4b,0x26, 0x2,0x24,0x60, 0x3,0x26,0x64, + 0x3,0x2a,0x21, 0x3,0x2a,0x22, 0x1,0x4e,0x6b, 0x3,0x2a,0x23, + 0x1,0x4e,0x6c, 0x2,0x27,0x7b, 0x4,0x27,0x31, 0x2,0x2b,0x7a, + 0x3,0x2d,0x6d, 0x2,0x2b,0x7d, 0x1,0x52,0x3d, 0x2,0x2b,0x7b, + 0x4,0x2a,0x2f, 0x1,0x52,0x3c, 0x2,0x2b,0x7c, 0x1,0x52,0x3e, + 0x2,0x30,0x63, 0x2,0x30,0x62, 0x2,0x30,0x61, 0x1,0x56,0x56, + 0x3,0x32,0x36, 0x2,0x37,0x22, 0x2,0x37,0x23, 0x1,0x5b,0x74, + 0x2,0x37,0x21, 0x2,0x37,0x24, 0x1,0x60,0x58, 0x1,0x5b,0x75, + 0x3,0x3d,0x24, 0x3,0x3d,0x23, 0x1,0x60,0x57, 0x2,0x3d,0x6f, + 0x2,0x3d,0x6e, 0x3,0x3d,0x25, 0x2,0x3d,0x6c, 0x2,0x3d,0x6d, + 0x2,0x3d,0x70, 0x2,0x44,0x6a, 0x2,0x44,0x69, 0x2,0x44,0x6d, + 0x4,0x3e,0x4f, 0x2,0x44,0x6c, 0x2,0x44,0x6b, 0x1,0x69,0x60, + 0x2,0x4b,0x6f, 0x3,0x47,0x75, 0x2,0x4b,0x6e, 0x1,0x69,0x61, + 0x2,0x4b,0x6d, 0x2,0x51,0x7b, 0x3,0x4d,0x2f, 0x2,0x51,0x7c, + 0x1,0x6d,0x63, 0x4,0x51,0x2d, 0x2,0x58,0x45, 0x2,0x58,0x46, + 0x5,0x4e,0x37, 0x2,0x65,0x7c, 0x1,0x78,0x4a, 0x2,0x65,0x7b, + 0x2,0x65,0x7a, 0x2,0x65,0x78, 0x2,0x65,0x79, 0x1,0x7a,0x76, + 0x2,0x69,0x3b, 0x2,0x6d,0x5c, 0x2,0x71,0x27, 0x3,0x61,0x7b, + 0x1,0x45,0x5d, 0x4,0x21,0x38, 0x2,0x21,0x64, 0x1,0x46,0x67, + 0x2,0x21,0x65, 0x3,0x24,0x2c, 0x3,0x24,0x2d, 0x4,0x23,0x27, + 0x2,0x22,0x63, 0x2,0x22,0x64, 0x3,0x26,0x6b, 0x3,0x26,0x69, + 0x2,0x24,0x66, 0x3,0x26,0x66, 0x3,0x26,0x67, 0x2,0x24,0x62, + 0x3,0x26,0x6a, 0x2,0x24,0x61, 0x1,0x4e,0x6d, 0x2,0x24,0x65, + 0x1,0x4b,0x2a, 0x2,0x24,0x63, 0x1,0x4b,0x29, 0x2,0x24,0x67, + 0x2,0x24,0x64, 0x3,0x26,0x68, 0x2,0x28,0x21, 0x2,0x2b,0x7e, + 0x2,0x27,0x7d, 0x2,0x28,0x26, 0x3,0x2a,0x26, 0x1,0x4e,0x6e, + 0x3,0x2a,0x2a, 0x1,0x4e,0x71, 0x2,0x28,0x27, 0x2,0x28,0x23, + 0x3,0x2a,0x27, 0x2,0x28,0x24, 0x4,0x27,0x36, 0x2,0x27,0x7c, + 0x1,0x4e,0x70, 0x2,0x27,0x7e, 0x1,0x4e,0x6f, 0x2,0x28,0x25, + 0x3,0x2a,0x28, 0x2,0x28,0x22, 0x6,0x2c,0x7e, 0x2,0x2c,0x24, + 0x1,0x52,0x40, 0x1,0x52,0x41, 0x3,0x2d,0x75, 0x2,0x2c,0x27, + 0x2,0x2c,0x21, 0x3,0x2d,0x74, 0x2,0x2c,0x26, 0x3,0x2d,0x70, + 0x2,0x2c,0x22, 0x1,0x52,0x3f, 0x2,0x2c,0x25, 0x2,0x2c,0x23, + 0x3,0x2d,0x73, 0x3,0x2d,0x71, 0x2,0x30,0x69, 0x2,0x30,0x66, + 0x3,0x32,0x38, 0x2,0x30,0x68, 0x1,0x56,0x5b, 0x1,0x56,0x5a, + 0x1,0x56,0x58, 0x2,0x30,0x65, 0x2,0x30,0x6a, 0x1,0x56,0x57, + 0x1,0x56,0x59, 0x2,0x30,0x67, 0x2,0x37,0x2c, 0x2,0x30,0x64, + 0x2,0x30,0x6b, 0x3,0x32,0x39, 0x4,0x33,0x23, 0x4,0x33,0x2a, + 0x3,0x3d,0x26, 0x2,0x37,0x27, 0x2,0x37,0x2b, 0x5,0x33,0x54, + 0x2,0x37,0x2a, 0x2,0x3d,0x72, 0x2,0x3d,0x7d, 0x4,0x33,0x2d, + 0x3,0x37,0x3b, 0x2,0x37,0x2d, 0x3,0x37,0x3a, 0x2,0x37,0x28, + 0x2,0x3d,0x71, 0x1,0x5b,0x79, 0x4,0x33,0x22, 0x4,0x33,0x2c, + 0x1,0x5b,0x78, 0x2,0x37,0x26, 0x2,0x37,0x29, 0x1,0x5b,0x7a, + 0x3,0x37,0x39, 0x1,0x5b,0x77, 0x1,0x5b,0x76, 0x2,0x37,0x25, + 0x2,0x37,0x2e, 0x2,0x3d,0x74, 0x2,0x3d,0x7b, 0x3,0x3d,0x27, + 0x1,0x60,0x5a, 0x2,0x3d,0x7a, 0x2,0x3d,0x77, 0x3,0x3d,0x2e, + 0x1,0x60,0x5c, 0x3,0x3d,0x29, 0x3,0x3d,0x2b, 0x3,0x3d,0x2a, + 0x2,0x3d,0x79, 0x3,0x42,0x61, 0x3,0x3d,0x2d, 0x2,0x3d,0x73, + 0x2,0x3d,0x75, 0x2,0x3d,0x78, 0x2,0x3d,0x76, 0x1,0x60,0x5b, + 0x2,0x3d,0x7c, 0x1,0x60,0x59, 0x1,0x65,0x27, 0x3,0x3d,0x28, + 0x2,0x44,0x71, 0x2,0x44,0x70, 0x2,0x44,0x6e, 0x6,0x54,0x7c, + 0x1,0x65,0x2a, 0x1,0x65,0x29, 0x2,0x44,0x72, 0x3,0x42,0x5f, + 0x2,0x44,0x6f, 0x2,0x4b,0x70, 0x1,0x69,0x62, 0x1,0x65,0x28, + 0x3,0x42,0x62, 0x3,0x65,0x62, 0x3,0x65,0x63, 0x2,0x44,0x74, + 0x2,0x44,0x73, 0x3,0x4d,0x30, 0x2,0x4b,0x73, 0x2,0x4b,0x71, + 0x1,0x6d,0x64, 0x3,0x47,0x79, 0x1,0x69,0x63, 0x2,0x4b,0x72, + 0x2,0x51,0x7e, 0x3,0x47,0x78, 0x3,0x47,0x7a, 0x3,0x47,0x77, + 0x4,0x4a,0x77, 0x1,0x6d,0x65, 0x2,0x51,0x7d, 0x2,0x52,0x28, + 0x2,0x52,0x27, 0x2,0x52,0x25, 0x4,0x4a,0x75, 0x2,0x52,0x24, + 0x2,0x52,0x21, 0x2,0x52,0x22, 0x2,0x52,0x23, 0x2,0x52,0x26, + 0x2,0x52,0x29, 0x2,0x58,0x4b, 0x2,0x58,0x48, 0x2,0x58,0x49, + 0x1,0x71,0x41, 0x2,0x58,0x47, 0x2,0x58,0x4d, 0x2,0x58,0x4c, + 0x2,0x58,0x4a, 0x2,0x5d,0x50, 0x2,0x5d,0x51, 0x1,0x74,0x3c, + 0x3,0x55,0x49, 0x1,0x74,0x3d, 0x2,0x5d,0x4f, 0x4,0x56,0x6c, + 0x1,0x76,0x65, 0x2,0x62,0x2c, 0x1,0x76,0x64, 0x1,0x78,0x4b, + 0x4,0x60,0x25, 0x1,0x78,0x4c, 0x1,0x79,0x78, 0x2,0x69,0x3d, + 0x2,0x69,0x3c, 0x2,0x6b,0x6b, 0x2,0x6d,0x5d, 0x1,0x7b,0x66, + 0x2,0x6f,0x37, 0x2,0x6f,0x36, 0x2,0x6f,0x38, 0x1,0x46,0x68, + 0x2,0x2c,0x28, 0x1,0x56,0x5c, 0x1,0x5b,0x7b, 0x2,0x37,0x2f, + 0x1,0x46,0x69, 0x2,0x21,0x66, 0x1,0x45,0x5e, 0x3,0x22,0x5a, + 0x3,0x21,0x6b, 0x2,0x22,0x65, 0x3,0x24,0x2f, 0x4,0x23,0x2a, + 0xf,0x22,0x66, 0x2,0x24,0x6c, 0x2,0x24,0x6a, 0x2,0x24,0x6b, + 0x2,0x24,0x68, 0x1,0x4b,0x2b, 0x2,0x24,0x69, 0x3,0x26,0x6e, + 0x3,0x2a,0x33, 0x2,0x28,0x2f, 0x3,0x2a,0x2d, 0x1,0x4e,0x74, + 0x2,0x28,0x2d, 0x2,0x28,0x29, 0x2,0x28,0x2c, 0x3,0x2a,0x2c, + 0x2,0x28,0x28, 0x1,0x4e,0x76, 0x2,0x28,0x2b, 0x3,0x2a,0x2b, + 0x1,0x4e,0x73, 0x1,0x4e,0x72, 0x3,0x2a,0x32, 0x1,0x4e,0x75, + 0x2,0x28,0x2e, 0x2,0x28,0x2a, 0x3,0x2a,0x2f, 0x1,0x52,0x45, + 0x1,0x52,0x48, 0x2,0x2c,0x30, 0x2,0x2c,0x2f, 0x2,0x2c,0x2e, + 0x1,0x52,0x42, 0x2,0x2c,0x37, 0x2,0x2c,0x2d, 0x4,0x2e,0x2a, + 0x1,0x52,0x44, 0x2,0x30,0x70, 0x3,0x2d,0x78, 0x2,0x2c,0x34, + 0x2,0x2c,0x32, 0x1,0x52,0x47, 0x3,0x2d,0x7b, 0x2,0x2c,0x2a, + 0x2,0x2c,0x35, 0x3,0x2d,0x77, 0x2,0x2c,0x2c, 0x2,0x2c,0x36, + 0x2,0x2c,0x33, 0x2,0x2c,0x2b, 0x3,0x2d,0x7a, 0x1,0x52,0x43, + 0x2,0x2c,0x38, 0x2,0x2c,0x29, 0x1,0x52,0x46, 0x3,0x2d,0x7e, + 0x3,0x2d,0x79, 0x3,0x2d,0x7c, 0x2,0x30,0x75, 0x2,0x30,0x6c, + 0x2,0x30,0x77, 0x3,0x32,0x3e, 0x2,0x30,0x6f, 0x2,0x30,0x7a, + 0x2,0x30,0x7b, 0x2,0x30,0x6d, 0x2,0x30,0x79, 0x2,0x30,0x76, + 0x2,0x30,0x74, 0x2,0x30,0x78, 0x1,0x56,0x62, 0x3,0x32,0x40, + 0x1,0x56,0x60, 0x3,0x32,0x47, 0x3,0x32,0x3c, 0x2,0x30,0x72, + 0x3,0x32,0x46, 0x2,0x30,0x6e, 0x3,0x32,0x41, 0x2,0x30,0x71, + 0x2,0x30,0x7c, 0x2,0x30,0x73, 0x1,0x56,0x61, 0x2,0x2c,0x31, + 0x3,0x32,0x3d, 0x1,0x56,0x5d, 0x1,0x56,0x5f, 0x3,0x65,0x64, + 0x3,0x37,0x3d, 0x2,0x37,0x3d, 0x2,0x37,0x32, 0x2,0x37,0x30, + 0x3,0x3d,0x38, 0x2,0x37,0x31, 0x3,0x32,0x3f, 0x2,0x37,0x38, + 0x3,0x37,0x40, 0x2,0x37,0x39, 0x2,0x37,0x35, 0x1,0x5c,0x22, + 0x2,0x37,0x3a, 0x2,0x37,0x37, 0x2,0x37,0x34, 0x3,0x37,0x3c, + 0x1,0x5b,0x7e, 0x2,0x37,0x33, 0x1,0x5b,0x7c, 0x1,0x5c,0x21, + 0x2,0x37,0x36, 0x2,0x37,0x3e, 0x1,0x56,0x5e, 0x1,0x5b,0x7d, + 0x2,0x37,0x3c, 0x2,0x37,0x3b, 0x1,0x5c,0x23, 0x3,0x65,0x65, + 0xf,0x36,0x57, 0x3,0x3d,0x36, 0x3,0x3d,0x3a, 0x2,0x3e,0x24, + 0x3,0x3d,0x2f, 0x3,0x3d,0x3b, 0x3,0x3d,0x32, 0x2,0x3e,0x25, + 0x1,0x60,0x66, 0x3,0x3d,0x39, 0x2,0x3e,0x2b, 0x3,0x42,0x6d, + 0x3,0x3d,0x35, 0x2,0x3e,0x2d, 0x2,0x3e,0x26, 0x1,0x60,0x60, + 0x2,0x3e,0x2a, 0x2,0x3e,0x29, 0x1,0x60,0x61, 0x1,0x60,0x67, + 0x3,0x42,0x64, 0x1,0x60,0x68, 0x2,0x3e,0x2c, 0x1,0x60,0x5e, + 0x2,0x3e,0x23, 0x2,0x3e,0x21, 0x2,0x3e,0x27, 0x2,0x3d,0x7e, + 0x1,0x60,0x65, 0x2,0x3e,0x22, 0x2,0x3e,0x28, 0x2,0x3e,0x2e, + 0x1,0x60,0x5f, 0x1,0x60,0x64, 0x1,0x60,0x62, 0x1,0x60,0x63, + 0x3,0x3d,0x33, 0x3,0x3d,0x3c, 0x1,0x60,0x5d, 0x3,0x65,0x66, + 0x3,0x3d,0x37, 0x3,0x42,0x68, 0x3,0x42,0x75, 0x1,0x65,0x31, + 0x2,0x44,0x7b, 0x1,0x65,0x30, 0x2,0x45,0x21, 0x3,0x42,0x6f, + 0x2,0x44,0x75, 0x3,0x42,0x74, 0x2,0x45,0x22, 0x3,0x42,0x6e, + 0x3,0x42,0x66, 0x3,0x42,0x71, 0x2,0x44,0x76, 0x2,0x44,0x77, + 0x3,0x42,0x73, 0x2,0x45,0x23, 0x2,0x44,0x7e, 0x2,0x44,0x7c, + 0x2,0x44,0x7d, 0x2,0x44,0x79, 0x2,0x44,0x78, 0x3,0x42,0x67, + 0x2,0x45,0x24, 0x1,0x65,0x2d, 0x3,0x42,0x6b, 0x2,0x44,0x7a, + 0x3,0x42,0x70, 0x1,0x65,0x32, 0x1,0x65,0x2c, 0x1,0x65,0x33, + 0x1,0x65,0x34, 0x3,0x42,0x6a, 0x1,0x65,0x2f, 0x1,0x65,0x2e, + 0x3,0x48,0x25, 0x3,0x47,0x7e, 0x2,0x4b,0x74, 0x1,0x69,0x65, + 0x1,0x69,0x64, 0x3,0x47,0x7c, 0x3,0x47,0x7d, 0x2,0x4b,0x79, + 0x3,0x48,0x22, 0x1,0x6d,0x66, 0x1,0x69,0x66, 0x3,0x48,0x21, + 0x3,0x47,0x7b, 0x1,0x69,0x68, 0x2,0x4b,0x7a, 0x1,0x65,0x2b, + 0x1,0x69,0x67, 0x2,0x4b,0x76, 0x2,0x4b,0x78, 0x2,0x4b,0x75, + 0x3,0x48,0x27, 0x2,0x4b,0x77, 0x3,0x48,0x23, 0xf,0x49,0x76, + 0x2,0x52,0x33, 0x3,0x4d,0x31, 0x3,0x4d,0x3b, 0x2,0x52,0x32, + 0x2,0x52,0x2f, 0x1,0x6d,0x69, 0x2,0x58,0x4e, 0x1,0x6d,0x6a, + 0x2,0x52,0x2e, 0x3,0x4d,0x39, 0x1,0x6d,0x68, 0x3,0x4d,0x36, + 0x2,0x52,0x30, 0x2,0x52,0x2d, 0x2,0x52,0x2a, 0x2,0x52,0x31, + 0x2,0x52,0x2b, 0x2,0x52,0x2c, 0x1,0x6d,0x67, 0x3,0x4d,0x35, + 0x3,0x65,0x68, 0x4,0x51,0x39, 0x2,0x5d,0x55, 0x4,0x51,0x3a, + 0x2,0x58,0x52, 0x3,0x4d,0x3a, 0x2,0x58,0x51, 0x2,0x58,0x53, + 0x3,0x51,0x6a, 0x2,0x5d,0x52, 0x1,0x71,0x44, 0x4,0x51,0x38, + 0x2,0x58,0x4f, 0x3,0x51,0x67, 0x1,0x71,0x42, 0x3,0x51,0x6c, + 0x1,0x71,0x46, 0x1,0x71,0x45, 0x2,0x58,0x50, 0x2,0x58,0x54, + 0x3,0x51,0x6b, 0x1,0x71,0x43, 0x3,0x65,0x67, 0x2,0x5d,0x59, + 0x1,0x74,0x40, 0x1,0x76,0x66, 0x1,0x74,0x41, 0x1,0x74,0x3e, + 0x2,0x5d,0x56, 0x2,0x5d,0x54, 0x3,0x55,0x4f, 0x2,0x5d,0x57, + 0x3,0x55,0x4b, 0x2,0x5d,0x5a, 0x1,0x74,0x3f, 0x2,0x5d,0x58, + 0x2,0x5d,0x53, 0x3,0x55,0x4d, 0x3,0x65,0x69, 0x2,0x62,0x2f, + 0x2,0x62,0x32, 0x2,0x66,0x21, 0x2,0x62,0x2d, 0x3,0x58,0x2f, + 0x2,0x69,0x3e, 0x2,0x62,0x33, 0x3,0x58,0x30, 0x1,0x78,0x4d, + 0x2,0x62,0x31, 0x1,0x76,0x67, 0x2,0x62,0x2e, 0x2,0x62,0x30, + 0x2,0x62,0x34, 0x2,0x66,0x22, 0x3,0x5a,0x5a, 0x2,0x65,0x7e, + 0x4,0x60,0x27, 0x3,0x5a,0x5c, 0x3,0x5a,0x5d, 0x3,0x5a,0x5b, + 0x1,0x78,0x4e, 0x2,0x65,0x7d, 0x3,0x5c,0x5e, 0x3,0x5c,0x5c, + 0x3,0x5c,0x5f, 0x1,0x79,0x79, 0x3,0x5c,0x5d, 0x3,0x5c,0x60, + 0x3,0x5e,0x3d, 0x1,0x7a,0x78, 0x2,0x6d,0x5f, 0x1,0x7a,0x77, + 0x2,0x6d,0x61, 0x2,0x6d,0x5e, 0x2,0x6d,0x60, 0x1,0x7c,0x3c, + 0x2,0x70,0x40, 0x1,0x46,0x6a, 0x2,0x28,0x30, 0x2,0x30,0x7d, + 0x2,0x30,0x7e, 0x1,0x5c,0x24, 0x2,0x45,0x25, 0x1,0x71,0x47, + 0x1,0x78,0x4f, 0x1,0x7b,0x67, 0x2,0x70,0x41, 0x1,0x46,0x6b, + 0x2,0x28,0x31, 0x1,0x23,0x22, 0x4,0x2a,0x3c, 0x3,0x2e,0x22, + 0x2,0x2c,0x39, 0x3,0x2e,0x21, 0x2,0x2c,0x3a, 0x3,0x2e,0x24, + 0x3,0x32,0x48, 0x2,0x31,0x21, 0x2,0x31,0x22, 0x1,0x5c,0x25, + 0x1,0x5c,0x26, 0xf,0x36,0x67, 0x3,0x3d,0x3d, 0x4,0x39,0x25, + 0x2,0x3e,0x2f, 0x2,0x45,0x28, 0x2,0x45,0x27, 0x2,0x45,0x26, + 0x2,0x4b,0x7b, 0x3,0x42,0x77, 0x2,0x4b,0x7c, 0x2,0x4b,0x7d, + 0x1,0x69,0x69, 0x3,0x48,0x28, 0x2,0x52,0x35, 0x2,0x52,0x34, + 0x3,0x4d,0x3d, 0x3,0x51,0x6d, 0x2,0x58,0x55, 0x1,0x71,0x48, + 0x1,0x71,0x49, 0x3,0x51,0x6e, 0x2,0x5d,0x5e, 0x2,0x5d,0x5b, + 0x2,0x5d,0x5c, 0x2,0x5d,0x5d, 0x2,0x62,0x36, 0x2,0x62,0x35, + 0x1,0x76,0x68, 0x2,0x66,0x23, 0x2,0x6b,0x6c, 0x1,0x46,0x6c, + 0x1,0x52,0x49, 0x3,0x37,0x44, 0x1,0x5c,0x27, 0x2,0x45,0x29, + 0x3,0x42,0x78, 0x1,0x46,0x6d, 0x4,0x2a,0x40, 0x2,0x31,0x23, + 0x1,0x5c,0x28, 0x3,0x37,0x45, 0x3,0x3d,0x3e, 0x1,0x60,0x69, + 0x1,0x60,0x6a, 0x5,0x47,0x49, 0x1,0x46,0x6e, 0x1,0x46,0x6f, + 0x2,0x22,0x66, 0x1,0x4b,0x2d, 0x1,0x4b,0x2c, 0x1,0x52,0x4a, + 0x2,0x2c,0x3b, 0x2,0x3e,0x30, 0x1,0x46,0x70, 0x1,0x46,0x71, + 0x1,0x46,0x72, 0x1,0x46,0x73, 0x4,0x23,0x2b, 0x1,0x4b,0x2e, + 0x1,0x4b,0x2f, 0x2,0x24,0x6e, 0x2,0x24,0x6d, 0x3,0x2a,0x37, + 0x1,0x4e,0x77, 0x2,0x28,0x34, 0x2,0x28,0x32, 0x2,0x28,0x33, + 0x3,0x2a,0x38, 0x3,0x2a,0x35, 0x4,0x27,0x40, 0x3,0x2a,0x36, + 0x3,0x2e,0x27, 0x2,0x2c,0x3c, 0x2,0x2c,0x3d, 0x3,0x2e,0x25, + 0x3,0x2e,0x28, 0x1,0x52,0x4e, 0x1,0x52,0x4c, 0x3,0x2e,0x2a, + 0x1,0x52,0x4d, 0x1,0x52,0x4b, 0x3,0x2e,0x26, 0xf,0x2b,0x7a, + 0xf,0x2c,0x4a, 0x1,0x56,0x63, 0x3,0x32,0x4e, 0x3,0x32,0x4d, + 0x3,0x32,0x50, 0x3,0x32,0x4f, 0x1,0x56,0x67, 0x1,0x56,0x66, + 0x2,0x31,0x24, 0x1,0x56,0x65, 0x1,0x56,0x64, 0x3,0x32,0x51, + 0x2,0x31,0x25, 0x3,0x37,0x46, 0x1,0x5c,0x2b, 0x2,0x37,0x40, + 0x2,0x37,0x3f, 0x1,0x5c,0x29, 0x1,0x5c,0x2a, 0x3,0x37,0x49, + 0x3,0x37,0x47, 0x1,0x60,0x6c, 0x1,0x60,0x6b, 0x2,0x3e,0x32, + 0x3,0x3d,0x43, 0x3,0x3d,0x42, 0x2,0x3e,0x31, 0x1,0x5c,0x2c, + 0x3,0x3d,0x44, 0x4,0x39,0x2c, 0x4,0x3e,0x6b, 0x1,0x65,0x35, + 0x2,0x45,0x2b, 0x1,0x65,0x36, 0x2,0x45,0x2a, 0x3,0x42,0x7b, + 0x4,0x44,0x7c, 0x4,0x44,0x7b, 0x2,0x4b,0x7e, 0x2,0x52,0x36, + 0x1,0x6d,0x6b, 0x2,0x58,0x56, 0x3,0x51,0x70, 0x3,0x55,0x52, + 0x2,0x5d,0x5f, 0x4,0x5b,0x74, 0x1,0x78,0x51, 0x1,0x78,0x50, + 0x4,0x63,0x68, 0x3,0x5c,0x62, 0x1,0x7b,0x68, 0x1,0x46,0x74, + 0x2,0x28,0x35, 0x3,0x3d,0x45, 0x1,0x5c,0x2d, 0x2,0x4c,0x21, + 0x1,0x69,0x6a, 0x3,0x22,0x5b, 0x3,0x26,0x73, 0x2,0x24,0x6f, + 0x2,0x24,0x70, 0x2,0x28,0x36, 0x1,0x4e,0x79, 0x1,0x4e,0x7a, + 0x3,0x2a,0x3a, 0x4,0x27,0x43, 0x1,0x4e,0x78, 0x3,0x2a,0x3b, + 0x1,0x52,0x52, 0x1,0x52,0x53, 0x1,0x52,0x50, 0x1,0x52,0x51, + 0x3,0x2e,0x2b, 0x2,0x2c,0x3e, 0x3,0x2e,0x2f, 0x4,0x2a,0x4a, + 0x2,0x2c,0x3f, 0x1,0x52,0x4f, 0x2,0x31,0x26, 0x3,0x32,0x57, + 0x1,0x56,0x6b, 0x1,0x56,0x6c, 0x3,0x32,0x55, 0x1,0x5c,0x30, + 0x2,0x31,0x2c, 0x4,0x2e,0x40, 0x1,0x56,0x71, 0x1,0x56,0x6f, + 0x2,0x31,0x2d, 0x2,0x31,0x28, 0x1,0x56,0x6e, 0x1,0x56,0x6d, + 0x1,0x56,0x68, 0x2,0x31,0x2b, 0x2,0x31,0x2a, 0x2,0x31,0x27, + 0x1,0x56,0x70, 0x3,0x32,0x52, 0x2,0x31,0x29, 0x1,0x56,0x69, + 0x4,0x2e,0x34, 0x1,0x56,0x6a, 0x1,0x5c,0x31, 0x2,0x37,0x44, + 0x2,0x37,0x45, 0x1,0x5c,0x32, 0x2,0x37,0x41, 0x2,0x37,0x43, + 0x2,0x37,0x47, 0x2,0x37,0x46, 0x2,0x37,0x42, 0x3,0x37,0x4a, + 0x1,0x5c,0x2e, 0x1,0x5c,0x2f, 0x2,0x3e,0x3a, 0x1,0x60,0x71, + 0x1,0x60,0x70, 0x2,0x3e,0x34, 0x1,0x60,0x6e, 0x4,0x39,0x34, + 0x2,0x3e,0x37, 0x1,0x60,0x72, 0x2,0x3e,0x38, 0x1,0x60,0x73, + 0x2,0x3e,0x35, 0x1,0x60,0x6d, 0x1,0x60,0x6f, 0x2,0x3e,0x39, + 0x3,0x3d,0x47, 0x2,0x3e,0x36, 0x2,0x3e,0x33, 0x4,0x3e,0x77, + 0x2,0x45,0x38, 0x3,0x42,0x7c, 0x2,0x45,0x2d, 0x1,0x65,0x38, + 0x1,0x65,0x3b, 0x1,0x65,0x3a, 0x1,0x65,0x3f, 0x1,0x65,0x3e, + 0x2,0x45,0x39, 0x2,0x45,0x37, 0x2,0x45,0x30, 0x2,0x45,0x34, + 0x2,0x45,0x33, 0x1,0x65,0x3c, 0x2,0x45,0x36, 0x2,0x45,0x32, + 0x2,0x45,0x3a, 0x2,0x45,0x31, 0x1,0x65,0x3d, 0x1,0x65,0x37, + 0x1,0x65,0x39, 0x3,0x42,0x7d, 0x2,0x45,0x2f, 0x3,0x48,0x2b, + 0x2,0x4c,0x23, 0x1,0x69,0x6e, 0x2,0x4c,0x27, 0x1,0x69,0x6d, + 0x2,0x4c,0x24, 0x1,0x69,0x6c, 0x3,0x48,0x29, 0x2,0x45,0x2e, + 0x2,0x45,0x35, 0x2,0x4c,0x26, 0x4,0x44,0x7e, 0x1,0x69,0x6f, + 0x2,0x4c,0x28, 0x2,0x4c,0x25, 0x2,0x4c,0x22, 0x2,0x52,0x39, + 0x2,0x52,0x3d, 0x2,0x52,0x3f, 0x2,0x52,0x3b, 0x2,0x52,0x3a, + 0x2,0x52,0x38, 0x1,0x6d,0x6e, 0x1,0x6d,0x6c, 0x1,0x6d,0x71, + 0x1,0x6d,0x72, 0x2,0x52,0x3c, 0x1,0x6d,0x6f, 0x2,0x52,0x37, + 0x1,0x6d,0x70, 0x1,0x69,0x6b, 0x2,0x52,0x3e, 0x1,0x6d,0x6d, + 0x3,0x51,0x71, 0x2,0x58,0x58, 0x4,0x51,0x4f, 0x2,0x58,0x57, + 0x2,0x58,0x5f, 0x2,0x58,0x59, 0x2,0x58,0x5e, 0x2,0x58,0x5b, + 0x1,0x71,0x4a, 0x2,0x58,0x5d, 0x3,0x51,0x73, 0x3,0x51,0x72, + 0x1,0x71,0x4b, 0x4,0x51,0x4d, 0x1,0x71,0x4c, 0x3,0x51,0x74, + 0x2,0x58,0x5c, 0x2,0x58,0x5a, 0x4,0x57,0x21, 0x4,0x57,0x24, + 0x1,0x74,0x43, 0x2,0x5d,0x60, 0x3,0x55,0x55, 0x3,0x55,0x53, + 0x1,0x74,0x42, 0x2,0x5d,0x63, 0x2,0x5d,0x61, 0x2,0x5d,0x62, + 0x5,0x55,0x69, 0x5,0x5c,0x36, 0x1,0x74,0x44, 0x3,0x55,0x54, + 0x3,0x58,0x34, 0x2,0x62,0x3a, 0x3,0x58,0x33, 0x1,0x76,0x6b, + 0x2,0x62,0x3b, 0x4,0x5b,0x75, 0x4,0x5b,0x79, 0x1,0x76,0x69, + 0x2,0x62,0x3c, 0x1,0x76,0x6a, 0x2,0x62,0x39, 0x2,0x62,0x3d, + 0x3,0x58,0x32, 0x2,0x62,0x37, 0x1,0x78,0x52, 0x2,0x66,0x24, + 0x1,0x78,0x53, 0x1,0x79,0x7a, 0x2,0x62,0x38, 0x1,0x79,0x7b, + 0x3,0x5e,0x3f, 0x3,0x5e,0x3e, 0x1,0x7a,0x79, 0x2,0x6b,0x6d, + 0x1,0x7b,0x6a, 0x2,0x6d,0x62, 0x1,0x7b,0x69, 0x3,0x60,0x3b, + 0x2,0x6f,0x39, 0x1,0x7c,0x61, 0x1,0x7c,0x62, 0x3,0x65,0x6a, + 0x7,0x64,0x52, 0x2,0x72,0x3a, 0x3,0x22,0x5c, 0x3,0x65,0x6b, + 0x1,0x52,0x54, 0x2,0x2c,0x40, 0x1,0x60,0x74, 0x1,0x60,0x75, + 0x1,0x46,0x75, 0x1,0x48,0x4b, 0x2,0x22,0x67, 0x3,0x26,0x74, + 0x2,0x24,0x71, 0x1,0x4b,0x30, 0x3,0x26,0x76, 0x1,0x4e,0x7b, + 0x4,0x2a,0x4c, 0x1,0x52,0x55, 0x1,0x52,0x56, 0x1,0x52,0x57, + 0x2,0x37,0x49, 0x2,0x31,0x2e, 0x1,0x56,0x72, 0x4,0x2e,0x41, + 0x4,0x2e,0x43, 0x1,0x5c,0x33, 0x2,0x37,0x48, 0x3,0x37,0x4d, + 0x2,0x3e,0x3c, 0x1,0x60,0x77, 0x3,0x3d,0x4c, 0x2,0x3e,0x3b, + 0x1,0x60,0x76, 0x3,0x42,0x7e, 0x3,0x43,0x21, 0x2,0x45,0x3b, + 0x1,0x6d,0x73, 0x2,0x52,0x43, 0x2,0x52,0x40, 0x2,0x52,0x41, + 0x2,0x52,0x42, 0x4,0x51,0x54, 0x4,0x51,0x55, 0x3,0x51,0x76, + 0x5,0x5c,0x43, 0x3,0x55,0x56, 0x2,0x5d,0x64, 0x3,0x55,0x57, + 0x2,0x62,0x3e, 0x4,0x5b,0x7c, 0x4,0x5b,0x7d, 0x3,0x5a,0x5e, + 0x2,0x69,0x40, 0x2,0x69,0x3f, 0x4,0x66,0x5a, 0x2,0x6d,0x63, + 0x1,0x46,0x76, 0x2,0x28,0x37, 0x1,0x56,0x73, 0x3,0x3d,0x4d, + 0x1,0x60,0x78, 0x2,0x45,0x3c, 0x4,0x45,0x34, 0x3,0x48,0x30, + 0x2,0x4c,0x29, 0x3,0x48,0x2e, 0x1,0x6d,0x74, 0x2,0x58,0x60, + 0x3,0x65,0x6c, 0x2,0x62,0x3f, 0x2,0x69,0x41, 0x1,0x46,0x77, + 0x3,0x26,0x77, 0x3,0x26,0x78, 0x1,0x4e,0x7c, 0x1,0x52,0x5a, + 0x2,0x2c,0x41, 0x1,0x52,0x5b, 0x1,0x52,0x59, 0x3,0x2e,0x32, + 0x1,0x52,0x58, 0x2,0x31,0x2f, 0x1,0x56,0x74, 0x3,0x32,0x5a, + 0x3,0x32,0x5b, 0x1,0x56,0x75, 0x1,0x56,0x76, 0x1,0x5c,0x35, + 0x2,0x37,0x4a, 0x1,0x5c,0x34, 0x3,0x37,0x50, 0x3,0x37,0x52, + 0x3,0x37,0x51, 0xf,0x37,0x23, 0x3,0x3d,0x4f, 0x2,0x3e,0x3d, + 0x1,0x5c,0x36, 0x1,0x60,0x79, 0x2,0x45,0x3d, 0x1,0x65,0x40, + 0x1,0x65,0x41, 0x4,0x45,0x35, 0x1,0x69,0x70, 0x3,0x48,0x31, + 0x1,0x69,0x71, 0x1,0x6d,0x75, 0x1,0x71,0x4e, 0x2,0x58,0x61, + 0x1,0x71,0x4d, 0x4,0x57,0x2d, 0x2,0x5d,0x65, 0x1,0x74,0x45, + 0x3,0x58,0x35, 0x2,0x62,0x40, 0x2,0x69,0x42, 0x1,0x46,0x78, + 0x1,0x4b,0x31, 0x2,0x28,0x3a, 0x2,0x28,0x39, 0x1,0x4e,0x7d, + 0x2,0x28,0x38, 0x1,0x4e,0x7e, 0x2,0x28,0x3b, 0x4,0x2a,0x55, + 0x2,0x2c,0x47, 0x1,0x52,0x5e, 0x1,0x52,0x5d, 0x2,0x2c,0x49, + 0x2,0x2c,0x48, 0x1,0x52,0x62, 0x3,0x2e,0x35, 0x1,0x52,0x61, + 0x3,0x2e,0x33, 0x4,0x2a,0x59, 0x1,0x52,0x5c, 0x4,0x2a,0x5d, + 0x2,0x2c,0x43, 0x2,0x2c,0x44, 0x2,0x2c,0x45, 0x4,0x2a,0x52, + 0x1,0x52,0x63, 0x2,0x2c,0x42, 0x1,0x52,0x5f, 0x2,0x2c,0x46, + 0x1,0x52,0x60, 0x3,0x32,0x64, 0x3,0x32,0x5f, 0x2,0x31,0x32, + 0x2,0x31,0x36, 0x2,0x31,0x34, 0x2,0x31,0x33, 0x4,0x2e,0x55, + 0x2,0x31,0x37, 0x3,0x32,0x5e, 0x4,0x2e,0x4f, 0x3,0x32,0x68, + 0x2,0x31,0x38, 0x2,0x31,0x39, 0x2,0x31,0x31, 0x4,0x2e,0x51, + 0x2,0x31,0x30, 0x3,0x37,0x59, 0x1,0x56,0x78, 0x1,0x56,0x79, + 0x3,0x32,0x67, 0x2,0x31,0x3a, 0x2,0x31,0x35, 0x3,0x32,0x65, + 0x2,0x37,0x53, 0x3,0x37,0x55, 0x2,0x31,0x3b, 0x1,0x56,0x7a, + 0x1,0x56,0x77, 0x3,0x32,0x5c, 0x3,0x32,0x63, 0x2,0x37,0x4d, + 0x4,0x33,0x4f, 0x2,0x37,0x4c, 0x3,0x37,0x53, 0x2,0x37,0x4e, + 0x2,0x37,0x4f, 0x2,0x37,0x51, 0x2,0x37,0x50, 0x2,0x37,0x55, + 0x1,0x5c,0x3a, 0x1,0x5c,0x37, 0x1,0x5c,0x3b, 0x2,0x37,0x4b, + 0x1,0x5c,0x3c, 0x2,0x37,0x54, 0x1,0x5c,0x39, 0x2,0x37,0x52, + 0x1,0x5c,0x38, 0x3,0x32,0x62, 0x3,0x37,0x57, 0x4,0x33,0x56, + 0x3,0x3d,0x56, 0x3,0x3d,0x53, 0x2,0x3e,0x40, 0x2,0x3e,0x42, + 0x2,0x3e,0x3e, 0x2,0x3e,0x3f, 0x3,0x3d,0x51, 0x3,0x3d,0x52, + 0x2,0x3e,0x43, 0x2,0x3e,0x45, 0x2,0x3e,0x46, 0x2,0x3e,0x41, + 0x2,0x3e,0x44, 0x1,0x60,0x7a, 0x2,0x45,0x41, 0x3,0x43,0x27, + 0x2,0x45,0x46, 0x2,0x45,0x3e, 0x2,0x45,0x42, 0x4,0x3f,0x29, + 0x3,0x43,0x28, 0x2,0x45,0x47, 0x2,0x45,0x43, 0x1,0x65,0x42, + 0x1,0x65,0x4a, 0x3,0x43,0x25, 0x1,0x65,0x45, 0x2,0x45,0x3f, + 0x2,0x45,0x40, 0x1,0x69,0x75, 0x1,0x65,0x4d, 0x1,0x65,0x46, + 0x3,0x43,0x26, 0x1,0x65,0x4b, 0x1,0x65,0x44, 0x2,0x45,0x45, + 0x1,0x65,0x4c, 0x2,0x45,0x44, 0x1,0x65,0x48, 0x1,0x65,0x43, + 0x1,0x65,0x49, 0x2,0x45,0x48, 0x2,0x4c,0x2e, 0x2,0x4c,0x30, + 0x4,0x45,0x42, 0x3,0x48,0x39, 0x4,0x45,0x40, 0x4,0x45,0x3d, + 0x3,0x48,0x33, 0x3,0x48,0x36, 0x3,0x48,0x35, 0x3,0x48,0x34, + 0x3,0x48,0x38, 0x1,0x65,0x47, 0x3,0x48,0x3b, 0x3,0x48,0x3d, + 0x2,0x4c,0x2b, 0x1,0x69,0x73, 0x2,0x4c,0x31, 0x1,0x69,0x74, + 0x2,0x4c,0x2f, 0x2,0x4c,0x2a, 0x2,0x4c,0x2d, 0x2,0x4c,0x32, + 0x1,0x69,0x72, 0x2,0x4c,0x2c, 0x1,0x6d,0x77, 0x2,0x52,0x47, + 0x2,0x52,0x46, 0x3,0x4d,0x44, 0x1,0x6d,0x7a, 0x1,0x6d,0x78, + 0x2,0x52,0x44, 0x1,0x6d,0x76, 0x2,0x52,0x45, 0x3,0x4d,0x46, + 0x1,0x6d,0x79, 0x4,0x51,0x5f, 0x2,0x58,0x69, 0x3,0x51,0x7b, + 0x2,0x58,0x6b, 0x3,0x51,0x79, 0x2,0x58,0x6a, 0x2,0x58,0x62, + 0x2,0x58,0x66, 0x2,0x58,0x65, 0x2,0x58,0x63, 0x1,0x71,0x50, + 0x1,0x71,0x51, 0x1,0x71,0x4f, 0x2,0x58,0x64, 0x2,0x58,0x67, + 0x2,0x58,0x68, 0x3,0x55,0x59, 0x1,0x71,0x52, 0x3,0x55,0x58, + 0x1,0x74,0x4a, 0x2,0x5d,0x6d, 0x3,0x55,0x5b, 0x1,0x74,0x47, + 0x2,0x5d,0x67, 0x1,0x74,0x49, 0x1,0x74,0x4b, 0x4,0x51,0x61, + 0x3,0x55,0x5c, 0x1,0x74,0x48, 0x2,0x5d,0x6c, 0x2,0x5d,0x68, + 0x1,0x74,0x46, 0x2,0x5d,0x6b, 0x2,0x5d,0x66, 0x2,0x5d,0x6a, + 0x2,0x5d,0x69, 0x3,0x58,0x36, 0x3,0x58,0x38, 0x2,0x62,0x42, + 0x1,0x76,0x6e, 0x1,0x76,0x6f, 0x1,0x76,0x6c, 0x3,0x58,0x3b, + 0x1,0x76,0x6d, 0x3,0x58,0x3a, 0x3,0x58,0x39, 0x2,0x62,0x41, + 0x4,0x60,0x39, 0x2,0x66,0x27, 0x3,0x5a,0x60, 0x3,0x5a,0x5f, + 0x1,0x78,0x54, 0x2,0x66,0x25, 0x2,0x66,0x26, 0x2,0x69,0x43, + 0x2,0x69,0x46, 0x2,0x69,0x44, 0x2,0x69,0x45, 0x2,0x6b,0x6e, + 0x3,0x5e,0x42, 0x4,0x66,0x5e, 0x1,0x7a,0x7a, 0x2,0x6f,0x3a, + 0x2,0x70,0x42, 0x4,0x6b,0x74, 0x1,0x7c,0x63, 0x2,0x71,0x28, + 0x2,0x71,0x29, 0x1,0x7d,0x33, 0x1,0x46,0x79, 0x1,0x52,0x64, + 0x3,0x32,0x69, 0x2,0x3e,0x47, 0x3,0x3d,0x57, 0x2,0x45,0x49, + 0x4,0x6c,0x76, 0x1,0x46,0x7a, 0x1,0x4b,0x32, 0x4,0x27,0x52, + 0x1,0x4f,0x21, 0x3,0x2e,0x36, 0x2,0x2c,0x4a, 0x2,0x2c,0x4b, + 0x1,0x56,0x7b, 0x4,0x33,0x5b, 0x2,0x3e,0x48, 0x1,0x60,0x7b, + 0x1,0x65,0x4e, 0x1,0x74,0x4c, 0x2,0x5d,0x6e, 0x2,0x66,0x28, + 0x2,0x69,0x47, 0x1,0x46,0x7b, 0x3,0x26,0x7b, 0x3,0x26,0x7c, + 0xf,0x25,0x23, 0x2,0x28,0x41, 0x2,0x28,0x3c, 0x2,0x28,0x3e, + 0x2,0x28,0x40, 0x2,0x28,0x3f, 0x2,0x28,0x3d, 0x1,0x4f,0x22, + 0xf,0x28,0x34, 0x1,0x52,0x65, 0x2,0x2c,0x54, 0x3,0x2e,0x39, + 0x2,0x2c,0x4f, 0x2,0x2c,0x4c, 0x3,0x2e,0x3b, 0x3,0x2e,0x3e, + 0x2,0x2c,0x53, 0x3,0x2e,0x37, 0x3,0x2e,0x3a, 0x1,0x52,0x67, + 0x1,0x52,0x68, 0x2,0x2c,0x52, 0x2,0x2c,0x51, 0x2,0x2c,0x50, + 0x2,0x2c,0x4d, 0x2,0x2c,0x4e, 0x2,0x2c,0x55, 0x1,0x52,0x66, + 0x3,0x2e,0x3d, 0xf,0x2c,0x5c, 0x3,0x65,0x6d, 0x3,0x65,0x6e, + 0x1,0x57,0x21, 0x3,0x66,0x7c, 0x1,0x57,0x27, 0x1,0x57,0x26, + 0x2,0x31,0x44, 0x2,0x31,0x3e, 0x2,0x31,0x3c, 0x3,0x32,0x6c, + 0x1,0x57,0x24, 0x2,0x37,0x5c, 0x1,0x56,0x7d, 0x2,0x31,0x41, + 0x2,0x31,0x45, 0x2,0x31,0x47, 0x2,0x31,0x43, 0x2,0x31,0x3d, + 0x1,0x57,0x25, 0x2,0x31,0x42, 0x2,0x31,0x40, 0x1,0x56,0x7c, + 0x2,0x31,0x48, 0x1,0x57,0x28, 0x2,0x31,0x46, 0x1,0x57,0x22, + 0x2,0x31,0x3f, 0x3,0x32,0x6d, 0x1,0x57,0x23, 0x1,0x56,0x7e, + 0x3,0x65,0x6f, 0x3,0x37,0x62, 0x1,0x5c,0x3e, 0x4,0x33,0x5d, + 0x2,0x37,0x5d, 0x3,0x37,0x63, 0x3,0x37,0x5d, 0x2,0x37,0x56, + 0x2,0x37,0x58, 0x2,0x37,0x5a, 0x3,0x37,0x5f, 0x2,0x37,0x5b, + 0x2,0x37,0x59, 0x1,0x5c,0x3f, 0x3,0x37,0x61, 0x2,0x37,0x5e, + 0x3,0x37,0x60, 0x2,0x37,0x57, 0x3,0x65,0x70, 0x3,0x65,0x71, + 0x3,0x65,0x72, 0x2,0x3e,0x4c, 0x1,0x60,0x7c, 0x2,0x3e,0x54, + 0x3,0x3d,0x5c, 0x2,0x3e,0x49, 0x6,0x4c,0x2f, 0x2,0x3e,0x55, + 0x3,0x3d,0x59, 0x2,0x3e,0x4a, 0x2,0x3e,0x4b, 0x3,0x3d,0x5d, + 0x4,0x39,0x54, 0x2,0x3e,0x53, 0x2,0x3e,0x52, 0x2,0x3e,0x4f, + 0x1,0x5c,0x3d, 0x1,0x60,0x7d, 0x2,0x3e,0x4d, 0x2,0x3e,0x50, + 0x1,0x60,0x7e, 0x2,0x3e,0x51, 0x2,0x3e,0x4e, 0x3,0x3d,0x5a, + 0x3,0x43,0x31, 0x2,0x45,0x54, 0x3,0x43,0x2d, 0x2,0x45,0x58, + 0x1,0x65,0x55, 0x3,0x43,0x2e, 0x2,0x4c,0x38, 0x1,0x65,0x58, + 0x2,0x45,0x56, 0x3,0x43,0x37, 0x3,0x43,0x29, 0x2,0x45,0x53, + 0x2,0x45,0x4e, 0x2,0x45,0x50, 0x2,0x45,0x51, 0x2,0x45,0x4a, + 0x3,0x43,0x35, 0x1,0x65,0x54, 0x3,0x43,0x2b, 0x3,0x43,0x30, + 0x1,0x65,0x53, 0x3,0x43,0x34, 0x1,0x65,0x4f, 0x2,0x45,0x4d, + 0x3,0x43,0x2a, 0x1,0x65,0x56, 0x3,0x43,0x36, 0x1,0x65,0x57, + 0x2,0x45,0x4c, 0x2,0x45,0x4f, 0x2,0x45,0x57, 0x1,0x65,0x51, + 0x1,0x65,0x52, 0x2,0x45,0x55, 0x2,0x45,0x4b, 0xf,0x44,0x25, + 0x4,0x45,0x53, 0x2,0x4c,0x3a, 0x1,0x69,0x77, 0x2,0x4c,0x3c, + 0x2,0x45,0x52, 0x2,0x4c,0x3e, 0x1,0x69,0x7b, 0x2,0x4c,0x3f, + 0x2,0x4c,0x3b, 0x3,0x48,0x3e, 0x1,0x69,0x78, 0x2,0x4c,0x37, + 0x1,0x69,0x7a, 0x2,0x4c,0x34, 0x2,0x4c,0x39, 0x2,0x4c,0x3d, + 0x2,0x4c,0x36, 0x3,0x48,0x3f, 0x3,0x48,0x45, 0x1,0x65,0x50, + 0x3,0x48,0x44, 0x2,0x4c,0x33, 0x1,0x69,0x79, 0x2,0x4c,0x35, + 0x3,0x65,0x73, 0x3,0x48,0x40, 0xf,0x4a,0x3f, 0x1,0x6d,0x7d, + 0x2,0x52,0x49, 0x1,0x6e,0x23, 0x4,0x4b,0x59, 0x1,0x6e,0x21, + 0x4,0x4b,0x57, 0x3,0x4d,0x4a, 0x1,0x69,0x76, 0x3,0x4d,0x4d, + 0x2,0x52,0x50, 0x2,0x52,0x51, 0x1,0x6d,0x7c, 0x3,0x4d,0x48, + 0x3,0x4d,0x4c, 0x2,0x52,0x4f, 0x2,0x52,0x52, 0x1,0x6d,0x7e, + 0x1,0x6d,0x7b, 0x2,0x52,0x4b, 0x2,0x52,0x48, 0x2,0x52,0x4d, + 0x2,0x52,0x4a, 0x1,0x6e,0x24, 0x2,0x52,0x4c, 0x3,0x4d,0x4b, + 0x3,0x4d,0x49, 0x2,0x52,0x4e, 0x1,0x6e,0x22, 0x3,0x52,0x21, + 0x3,0x65,0x74, 0x1,0x71,0x54, 0x2,0x58,0x72, 0x3,0x52,0x24, + 0x2,0x58,0x6c, 0x2,0x58,0x70, 0x2,0x58,0x76, 0x2,0x58,0x77, + 0x2,0x58,0x73, 0x2,0x58,0x74, 0x2,0x58,0x71, 0x4,0x4b,0x5d, + 0x2,0x58,0x6e, 0x4,0x51,0x6e, 0x1,0x71,0x56, 0x1,0x71,0x53, + 0x2,0x58,0x6d, 0x2,0x58,0x6f, 0x3,0x52,0x22, 0x1,0x71,0x55, + 0x2,0x58,0x75, 0x3,0x65,0x75, 0x1,0x74,0x50, 0x3,0x55,0x60, + 0x3,0x55,0x62, 0x2,0x5d,0x75, 0x2,0x5d,0x6f, 0x1,0x74,0x4f, + 0x4,0x57,0x3e, 0x1,0x74,0x4d, 0x3,0x55,0x61, 0x2,0x5d,0x77, + 0x1,0x74,0x4e, 0x2,0x5d,0x72, 0x2,0x5d,0x73, 0x2,0x5d,0x70, + 0x2,0x5d,0x78, 0x2,0x5d,0x74, 0x4,0x57,0x40, 0x1,0x74,0x51, + 0x2,0x5d,0x71, 0x2,0x5d,0x79, 0x2,0x5d,0x76, 0x3,0x58,0x43, + 0x3,0x58,0x3e, 0x3,0x58,0x40, 0x2,0x62,0x46, 0x3,0x58,0x3f, + 0x3,0x58,0x3c, 0x2,0x62,0x43, 0x3,0x58,0x42, 0x1,0x76,0x70, + 0x4,0x5c,0x32, 0x2,0x62,0x47, 0x2,0x62,0x49, 0x2,0x62,0x48, + 0x2,0x62,0x44, 0x2,0x62,0x45, 0x3,0x58,0x44, 0x2,0x66,0x2d, + 0x3,0x5a,0x61, 0x1,0x78,0x55, 0x3,0x5a,0x62, 0x2,0x66,0x2a, + 0x2,0x66,0x2c, 0x2,0x66,0x29, 0x2,0x66,0x2e, 0x4,0x60,0x42, + 0x3,0x5a,0x63, 0x2,0x66,0x2b, 0x3,0x65,0x76, 0x2,0x69,0x49, + 0x2,0x69,0x4c, 0x2,0x69,0x48, 0x1,0x79,0x7c, 0x2,0x69,0x4a, + 0x2,0x69,0x4b, 0x2,0x69,0x4d, 0x1,0x79,0x7d, 0x1,0x7a,0x21, + 0x1,0x79,0x7e, 0x2,0x6b,0x6f, 0x3,0x5e,0x45, 0x2,0x6b,0x71, + 0x3,0x5e,0x43, 0x2,0x6b,0x70, 0x3,0x5e,0x44, 0x2,0x6d,0x64, + 0xf,0x6a,0x66, 0x3,0x60,0x3c, 0x2,0x70,0x43, 0x2,0x71,0x2a, + 0x1,0x46,0x7c, 0x3,0x24,0x33, 0x2,0x24,0x72, 0x1,0x4f,0x23, + 0x2,0x28,0x43, 0x1,0x4f,0x24, 0x1,0x4f,0x25, 0x2,0x28,0x42, + 0x2,0x2c,0x5a, 0x2,0x2c,0x59, 0x1,0x52,0x69, 0x1,0x52,0x6c, + 0x1,0x52,0x6b, 0x1,0x52,0x6a, 0x2,0x2c,0x56, 0x2,0x2c,0x58, + 0x2,0x2c,0x57, 0x3,0x65,0x77, 0x2,0x31,0x4b, 0x1,0x57,0x2a, + 0x2,0x31,0x4f, 0x2,0x31,0x4e, 0x2,0x31,0x4d, 0x2,0x31,0x49, + 0x1,0x57,0x29, 0x1,0x57,0x2d, 0x1,0x57,0x30, 0x3,0x32,0x6f, + 0x3,0x32,0x70, 0x1,0x57,0x31, 0x2,0x31,0x4a, 0x2,0x31,0x4c, + 0x1,0x57,0x2f, 0x1,0x57,0x2e, 0x1,0x57,0x2c, 0x1,0x57,0x2b, + 0x2,0x37,0x65, 0x3,0x32,0x72, 0x2,0x37,0x63, 0x2,0x37,0x5f, + 0x1,0x5c,0x40, 0x3,0x3d,0x5e, 0x2,0x37,0x60, 0x1,0x5c,0x41, + 0x2,0x37,0x61, 0x2,0x37,0x62, 0x2,0x37,0x64, 0x3,0x37,0x66, + 0x1,0x5c,0x42, 0x3,0x37,0x65, 0x2,0x3e,0x59, 0x3,0x3d,0x5f, + 0x2,0x3e,0x58, 0x2,0x3e,0x57, 0x2,0x3e,0x56, 0x3,0x3d,0x64, + 0x3,0x3d,0x62, 0x4,0x39,0x5a, 0x2,0x45,0x5c, 0x1,0x65,0x59, + 0x4,0x3f,0x46, 0x2,0x45,0x59, 0x2,0x45,0x5b, 0x3,0x43,0x38, + 0x1,0x65,0x5a, 0x3,0x43,0x3d, 0x1,0x65,0x5b, 0x2,0x45,0x5a, + 0x3,0x43,0x39, 0x3,0x3d,0x63, 0x3,0x65,0x78, 0x3,0x48,0x48, + 0x2,0x4c,0x48, 0x3,0x48,0x47, 0x2,0x4c,0x41, 0x2,0x4c,0x42, + 0x5,0x47,0x7e, 0x1,0x69,0x7e, 0x1,0x69,0x7c, 0x1,0x69,0x7d, + 0x2,0x4c,0x4a, 0x5,0x48,0x22, 0x2,0x4c,0x49, 0x2,0x4c,0x46, + 0x2,0x4c,0x45, 0x2,0x4c,0x44, 0x2,0x4c,0x43, 0x2,0x4c,0x47, + 0x2,0x4c,0x40, 0x3,0x65,0x79, 0x2,0x52,0x53, 0x2,0x52,0x58, + 0x2,0x52,0x56, 0x3,0x4d,0x50, 0x3,0x4d,0x51, 0x3,0x4d,0x4f, + 0x2,0x52,0x55, 0x2,0x52,0x54, 0x2,0x52,0x57, 0x3,0x65,0x7a, + 0x2,0x58,0x78, 0x3,0x52,0x26, 0x1,0x71,0x57, 0x1,0x74,0x52, + 0x2,0x5d,0x7b, 0x3,0x52,0x27, 0x1,0x74,0x53, 0x2,0x5d,0x7a, + 0x2,0x62,0x4b, 0x2,0x62,0x4a, 0x1,0x76,0x71, 0x3,0x58,0x45, + 0x2,0x66,0x2f, 0x1,0x78,0x56, 0x2,0x69,0x4e, 0x1,0x7b,0x6b, + 0x2,0x6d,0x65, 0x3,0x60,0x3d, 0x2,0x70,0x45, 0x2,0x70,0x44, + 0x2,0x21,0x67, 0x1,0x52,0x6d, 0x1,0x52,0x6e, 0x2,0x37,0x66, + 0x3,0x65,0x7b, 0x1,0x65,0x5d, 0x1,0x46,0x7d, 0x1,0x4b,0x35, + 0x1,0x4b,0x34, 0x1,0x4b,0x33, 0x4,0x24,0x68, 0x3,0x2a,0x3e, + 0x3,0x2a,0x3d, 0x2,0x28,0x44, 0x3,0x2a,0x3f, 0x3,0x2a,0x42, + 0x1,0x4f,0x27, 0x1,0x4f,0x26, 0x3,0x2a,0x44, 0x1,0x52,0x71, + 0x3,0x65,0x4c, 0x2,0x2c,0x5c, 0x2,0x2c,0x5f, 0x2,0x2c,0x5d, + 0x3,0x2e,0x42, 0x1,0x52,0x6f, 0x1,0x52,0x70, 0x3,0x2e,0x40, + 0x3,0x2e,0x41, 0x2,0x2c,0x5b, 0x2,0x2c,0x5e, 0x3,0x2e,0x43, + 0x1,0x57,0x38, 0x3,0x32,0x74, 0x3,0x32,0x73, 0x3,0x32,0x79, + 0x2,0x31,0x56, 0x2,0x31,0x58, 0x2,0x31,0x57, 0x1,0x57,0x35, + 0x2,0x31,0x52, 0x3,0x32,0x76, 0x3,0x32,0x7b, 0x1,0x57,0x33, + 0x1,0x57,0x32, 0x3,0x32,0x77, 0x1,0x57,0x36, 0x1,0x57,0x34, + 0x3,0x32,0x78, 0x1,0x57,0x37, 0x2,0x31,0x55, 0x2,0x31,0x50, + 0x2,0x31,0x51, 0x2,0x31,0x54, 0x2,0x31,0x53, 0x3,0x32,0x7c, + 0x3,0x37,0x69, 0x3,0x37,0x67, 0x3,0x37,0x6b, 0x3,0x37,0x6a, + 0x2,0x37,0x69, 0x2,0x37,0x6a, 0x2,0x37,0x68, 0x3,0x37,0x6c, + 0x2,0x37,0x67, 0x1,0x5c,0x43, 0xf,0x37,0x3f, 0x3,0x3d,0x65, + 0x1,0x61,0x25, 0x6,0x4c,0x48, 0x2,0x3e,0x5a, 0x2,0x3e,0x5c, + 0x2,0x3e,0x5e, 0x1,0x61,0x24, 0x6,0x4c,0x43, 0x3,0x3d,0x66, + 0x1,0x61,0x22, 0x3,0x3d,0x69, 0x2,0x3e,0x5b, 0x1,0x61,0x23, + 0x2,0x3e,0x5d, 0x1,0x61,0x21, 0x3,0x3d,0x68, 0x3,0x43,0x41, + 0x2,0x45,0x66, 0x2,0x45,0x5d, 0x2,0x45,0x60, 0x2,0x45,0x64, + 0x1,0x65,0x61, 0x2,0x45,0x62, 0x4,0x3f,0x50, 0x2,0x45,0x61, + 0x2,0x45,0x5e, 0x2,0x45,0x5f, 0x1,0x65,0x5f, 0x2,0x45,0x65, + 0x1,0x65,0x5e, 0x3,0x43,0x44, 0x1,0x65,0x63, 0x1,0x65,0x62, + 0x1,0x65,0x60, 0x4,0x3f,0x4a, 0x2,0x45,0x63, 0x3,0x65,0x24, + 0x2,0x4c,0x50, 0x4,0x45,0x5d, 0x2,0x4c,0x4f, 0x3,0x48,0x4b, + 0x3,0x48,0x4d, 0x2,0x4c,0x4b, 0x3,0x48,0x50, 0x3,0x48,0x4f, + 0x1,0x6a,0x21, 0x2,0x4c,0x4e, 0x2,0x4c,0x4d, 0x1,0x6a,0x22, + 0x3,0x48,0x52, 0xf,0x4a,0x64, 0x4,0x4b,0x63, 0x4,0x45,0x5e, + 0x4,0x4b,0x6b, 0x1,0x6e,0x29, 0x3,0x4d,0x55, 0x2,0x52,0x5a, + 0x3,0x4d,0x56, 0x1,0x6e,0x2a, 0x1,0x6e,0x26, 0x1,0x6e,0x28, + 0x3,0x4d,0x5a, 0x1,0x6e,0x25, 0x1,0x6e,0x27, 0x3,0x4d,0x53, + 0x3,0x4d,0x57, 0x2,0x58,0x79, 0x3,0x52,0x2a, 0x1,0x71,0x5a, + 0x2,0x58,0x7b, 0x2,0x58,0x7a, 0x3,0x55,0x64, 0x2,0x4c,0x4c, + 0x1,0x71,0x5c, 0x1,0x71,0x5b, 0x1,0x71,0x58, 0x1,0x71,0x59, + 0x3,0x52,0x2c, 0xf,0x5b,0x59, 0x3,0x52,0x29, 0x2,0x5e,0x22, + 0x4,0x57,0x49, 0x2,0x5d,0x7e, 0x1,0x74,0x54, 0x2,0x5e,0x21, + 0x4,0x57,0x48, 0x2,0x5e,0x23, 0x2,0x5d,0x7d, 0x2,0x5d,0x7c, + 0x2,0x62,0x4c, 0x1,0x76,0x74, 0x1,0x76,0x72, 0x1,0x76,0x73, + 0x3,0x5a,0x66, 0x4,0x60,0x45, 0x3,0x5a,0x65, 0x2,0x66,0x30, + 0x2,0x66,0x31, 0x1,0x78,0x58, 0x3,0x5a,0x67, 0x1,0x78,0x57, + 0x2,0x69,0x50, 0x2,0x69,0x51, 0x2,0x69,0x4f, 0x3,0x5c,0x64, + 0x2,0x6d,0x66, 0x2,0x6d,0x67, 0x3,0x60,0x76, 0x3,0x60,0x77, + 0x1,0x46,0x7e, 0x2,0x22,0x68, 0x1,0x4b,0x36, 0x2,0x28,0x45, + 0x1,0x4f,0x29, 0x1,0x4f,0x28, 0x2,0x28,0x46, 0x3,0x2e,0x44, + 0x3,0x2e,0x47, 0x2,0x2c,0x61, 0x1,0x52,0x72, 0x2,0x2c,0x60, + 0x1,0x52,0x73, 0x3,0x2e,0x49, 0x3,0x2e,0x48, 0x1,0x57,0x39, + 0x2,0x31,0x5b, 0x2,0x31,0x59, 0x2,0x31,0x5f, 0x1,0x57,0x3a, + 0x2,0x31,0x5a, 0x2,0x31,0x5e, 0x2,0x31,0x5c, 0x2,0x31,0x5d, + 0x2,0x37,0x6b, 0x2,0x37,0x6d, 0x3,0x37,0x72, 0x1,0x5c,0x44, + 0x3,0x37,0x71, 0x2,0x37,0x6c, 0x1,0x5c,0x45, 0x1,0x61,0x28, + 0x1,0x61,0x27, 0x1,0x61,0x26, 0x2,0x3e,0x5f, 0x3,0x37,0x70, + 0x4,0x39,0x65, 0x2,0x45,0x69, 0x1,0x65,0x64, 0x1,0x65,0x65, + 0x3,0x43,0x46, 0x2,0x45,0x68, 0x2,0x45,0x67, 0x3,0x43,0x47, + 0x3,0x65,0x7c, 0x2,0x4c,0x51, 0x1,0x6a,0x24, 0x1,0x6a,0x23, + 0x2,0x4c,0x52, 0x2,0x4c,0x53, 0x1,0x6e,0x2c, 0x1,0x6e,0x2b, + 0x3,0x4d,0x5b, 0x2,0x59,0x21, 0x2,0x52,0x5b, 0x2,0x52,0x5d, + 0x2,0x52,0x5c, 0x2,0x58,0x7e, 0x2,0x58,0x7c, 0x2,0x59,0x22, + 0x2,0x58,0x7d, 0x5,0x56,0x52, 0x1,0x71,0x5d, 0x3,0x52,0x2f, + 0x4,0x52,0x27, 0x3,0x52,0x2e, 0x2,0x5e,0x24, 0x1,0x74,0x55, + 0x2,0x5e,0x25, 0x2,0x5e,0x26, 0x3,0x55,0x68, 0x1,0x76,0x75, + 0x1,0x76,0x76, 0x4,0x60,0x4b, 0x1,0x7a,0x22, 0x3,0x5e,0x49, + 0x3,0x5e,0x48, 0x1,0x7c,0x3d, 0x1,0x47,0x21, 0x3,0x26,0x7e, + 0x3,0x27,0x21, 0x4,0x27,0x5b, 0x3,0x2a,0x47, 0x3,0x2e,0x4e, + 0x2,0x2c,0x62, 0x3,0x2e,0x4f, 0x3,0x2e,0x4d, 0x3,0x2e,0x4b, + 0x3,0x2e,0x4c, 0xf,0x2c,0x76, 0x2,0x31,0x60, 0x1,0x57,0x3b, + 0x3,0x33,0x23, 0x3,0x33,0x26, 0x3,0x33,0x27, 0x3,0x33,0x24, + 0x1,0x5d,0x7e, 0x1,0x5d,0x7d, 0x3,0x37,0x73, 0x3,0x3d,0x71, + 0x1,0x61,0x2a, 0x2,0x3e,0x61, 0x1,0x61,0x29, 0x2,0x3e,0x60, + 0x3,0x3d,0x70, 0x4,0x3f,0x57, 0x3,0x43,0x49, 0x3,0x43,0x4a, + 0x2,0x45,0x6a, 0x3,0x48,0x54, 0x1,0x6a,0x25, 0x2,0x4c,0x54, + 0x1,0x6a,0x26, 0x3,0x48,0x55, 0x3,0x52,0x30, 0x3,0x55,0x69, + 0x3,0x55,0x6a, 0x4,0x57,0x50, 0x3,0x58,0x49, 0x1,0x7a,0x23, + 0x2,0x69,0x52, 0x3,0x5f,0x55, 0x1,0x48,0x4c, 0x1,0x4f,0x2a, + 0x2,0x28,0x47, 0x3,0x2e,0x51, 0x1,0x52,0x75, 0x3,0x2e,0x50, + 0x1,0x52,0x74, 0x2,0x2c,0x63, 0x2,0x2c,0x64, 0x2,0x31,0x62, + 0x2,0x31,0x64, 0x1,0x57,0x3c, 0x2,0x31,0x66, 0x2,0x31,0x69, + 0x2,0x31,0x67, 0x3,0x33,0x2b, 0x4,0x2e,0x71, 0x3,0x33,0x2a, + 0x2,0x31,0x68, 0x2,0x31,0x65, 0x2,0x31,0x61, 0x1,0x57,0x3d, + 0x2,0x31,0x6a, 0x2,0x31,0x63, 0x3,0x33,0x2c, 0x3,0x37,0x78, + 0x3,0x37,0x79, 0x2,0x37,0x76, 0x1,0x5c,0x4b, 0x2,0x38,0x21, + 0x1,0x5c,0x48, 0x3,0x37,0x77, 0x2,0x37,0x78, 0x1,0x5c,0x4c, + 0x3,0x37,0x7b, 0x1,0x5c,0x46, 0x3,0x37,0x76, 0x2,0x37,0x73, + 0x2,0x38,0x22, 0x2,0x37,0x74, 0x2,0x37,0x71, 0x1,0x5c,0x4a, + 0x4,0x33,0x7c, 0x1,0x5c,0x47, 0x4,0x33,0x7a, 0x2,0x37,0x77, + 0x2,0x37,0x7a, 0x1,0x5c,0x49, 0x2,0x37,0x7b, 0x1,0x5c,0x4d, + 0x2,0x37,0x7c, 0x2,0x37,0x72, 0x2,0x37,0x79, 0x2,0x37,0x7d, + 0x2,0x37,0x75, 0x2,0x37,0x70, 0x2,0x37,0x6e, 0x3,0x37,0x7a, + 0x3,0x65,0x7d, 0x2,0x37,0x7e, 0xf,0x37,0x4d, 0x2,0x37,0x6f, + 0xf,0x36,0x7e, 0x5,0x3b,0x24, 0x2,0x3e,0x68, 0x3,0x3d,0x7b, + 0x3,0x3d,0x78, 0x3,0x3d,0x75, 0x2,0x3e,0x64, 0x2,0x3e,0x6a, + 0x1,0x61,0x2d, 0x2,0x3e,0x63, 0x2,0x3e,0x65, 0x1,0x61,0x2b, + 0x2,0x3e,0x62, 0x1,0x61,0x32, 0x2,0x3e,0x66, 0x1,0x61,0x31, + 0x2,0x3e,0x67, 0x1,0x61,0x33, 0x1,0x61,0x2e, 0x1,0x61,0x34, + 0x1,0x61,0x2f, 0x3,0x3d,0x79, 0x1,0x61,0x30, 0x3,0x3d,0x72, + 0x1,0x61,0x2c, 0x3,0x3d,0x76, 0x2,0x3e,0x69, 0x3,0x65,0x7e, + 0x3,0x43,0x4f, 0x4,0x3f,0x67, 0x1,0x65,0x68, 0x2,0x45,0x75, + 0x3,0x43,0x4c, 0x2,0x45,0x78, 0x2,0x45,0x6c, 0x2,0x45,0x71, + 0x2,0x45,0x6b, 0x1,0x65,0x6a, 0x3,0x43,0x55, 0x2,0x45,0x6f, + 0x4,0x3f,0x5e, 0x3,0x43,0x4d, 0x3,0x3d,0x77, 0x2,0x45,0x6d, + 0x1,0x65,0x69, 0x3,0x43,0x54, 0x2,0x45,0x74, 0x2,0x45,0x73, + 0x2,0x45,0x70, 0x2,0x45,0x72, 0x2,0x45,0x6e, 0x1,0x6a,0x2a, + 0x2,0x45,0x77, 0x1,0x65,0x66, 0x2,0x45,0x76, 0x3,0x43,0x51, + 0xf,0x44,0x45, 0x3,0x48,0x56, 0x2,0x4c,0x64, 0x3,0x48,0x58, + 0x1,0x6a,0x31, 0x2,0x4c,0x5f, 0x3,0x48,0x60, 0x1,0x6a,0x30, + 0x2,0x4c,0x55, 0x4,0x45,0x6b, 0x2,0x4c,0x57, 0x1,0x6a,0x29, + 0x2,0x4c,0x5c, 0x2,0x4c,0x5b, 0x2,0x4c,0x5e, 0x1,0x6a,0x2e, + 0x2,0x4c,0x59, 0x2,0x4c,0x58, 0x3,0x48,0x5a, 0x3,0x48,0x5e, + 0x1,0x6a,0x2d, 0x1,0x6a,0x28, 0x2,0x4c,0x5a, 0x1,0x6a,0x2b, + 0x2,0x4c,0x60, 0x2,0x4c,0x62, 0x2,0x4c,0x5d, 0x2,0x4c,0x56, + 0x1,0x6a,0x2c, 0x3,0x48,0x57, 0x3,0x48,0x5d, 0x1,0x6e,0x34, + 0x1,0x6a,0x27, 0x4,0x45,0x64, 0x3,0x48,0x5c, 0x2,0x4c,0x63, + 0x4,0x45,0x70, 0x2,0x52,0x61, 0x1,0x6e,0x2d, 0x3,0x4d,0x5c, + 0x2,0x52,0x63, 0x4,0x4c,0x2b, 0x1,0x6e,0x2e, 0x3,0x4d,0x65, + 0x3,0x4d,0x5d, 0x1,0x6e,0x30, 0x2,0x52,0x66, 0x4,0x4b,0x7a, + 0x2,0x52,0x5e, 0x1,0x6a,0x2f, 0x2,0x52,0x64, 0x4,0x4b,0x73, + 0x4,0x4c,0x31, 0x4,0x4b,0x74, 0x4,0x4c,0x2a, 0x2,0x52,0x60, + 0x3,0x4d,0x60, 0x1,0x65,0x67, 0x1,0x6e,0x33, 0x4,0x4c,0x21, + 0x4,0x4b,0x78, 0x1,0x6e,0x2f, 0x4,0x4c,0x26, 0x1,0x6e,0x31, + 0x1,0x6e,0x32, 0x4,0x4b,0x76, 0x1,0x71,0x60, 0x2,0x52,0x65, + 0x2,0x52,0x5f, 0x1,0x6e,0x35, 0x3,0x4d,0x63, 0x2,0x52,0x62, + 0x3,0x66,0x21, 0x2,0x59,0x2c, 0x2,0x59,0x27, 0x4,0x52,0x2d, + 0x5,0x56,0x69, 0x2,0x59,0x31, 0x1,0x71,0x5e, 0x2,0x59,0x29, + 0x1,0x71,0x62, 0x2,0x59,0x2f, 0x2,0x59,0x26, 0x2,0x59,0x23, + 0x2,0x59,0x32, 0x1,0x74,0x5b, 0x1,0x71,0x63, 0x2,0x59,0x2e, + 0x2,0x59,0x24, 0x1,0x71,0x61, 0x2,0x59,0x28, 0x1,0x71,0x65, + 0x2,0x59,0x25, 0x2,0x59,0x2a, 0x1,0x71,0x64, 0x2,0x59,0x2d, + 0x2,0x59,0x30, 0x3,0x52,0x33, 0x3,0x52,0x34, 0x2,0x5e,0x38, + 0x2,0x5e,0x39, 0x2,0x5e,0x29, 0x2,0x5e,0x30, 0x2,0x5e,0x2e, + 0x4,0x57,0x5f, 0x3,0x55,0x6d, 0x1,0x74,0x59, 0x2,0x5e,0x35, + 0x2,0x59,0x2b, 0x3,0x55,0x6b, 0x2,0x5e,0x2c, 0x3,0x55,0x6e, + 0x2,0x5e,0x36, 0x1,0x74,0x58, 0x2,0x5e,0x2b, 0x2,0x5e,0x2a, + 0x2,0x5e,0x34, 0x2,0x5e,0x31, 0x2,0x5e,0x33, 0x4,0x57,0x54, + 0x2,0x5e,0x27, 0x2,0x5e,0x37, 0x1,0x74,0x56, 0x3,0x55,0x70, + 0x2,0x5e,0x32, 0x2,0x5e,0x3b, 0x2,0x5e,0x2f, 0x1,0x74,0x5a, + 0x1,0x74,0x57, 0x2,0x5e,0x2d, 0x2,0x5e,0x28, 0x2,0x5e,0x3a, + 0x1,0x71,0x5f, 0x3,0x55,0x71, 0xf,0x5b,0x5f, 0x4,0x57,0x57, + 0x3,0x55,0x6f, 0x2,0x62,0x4f, 0x3,0x58,0x50, 0x3,0x58,0x4e, + 0x2,0x62,0x4d, 0x2,0x62,0x53, 0x1,0x76,0x7a, 0x2,0x62,0x51, + 0x2,0x62,0x50, 0x1,0x76,0x7c, 0x2,0x62,0x56, 0x1,0x76,0x7b, + 0x3,0x58,0x51, 0x2,0x62,0x57, 0x2,0x62,0x54, 0x1,0x76,0x78, + 0x2,0x62,0x55, 0x2,0x62,0x4e, 0x1,0x76,0x79, 0x1,0x76,0x77, + 0x2,0x66,0x35, 0x2,0x62,0x52, 0x3,0x58,0x4c, 0x3,0x66,0x22, + 0x2,0x62,0x58, 0x3,0x66,0x23, 0x2,0x66,0x32, 0x3,0x5a,0x6f, + 0x3,0x5a,0x6e, 0x4,0x60,0x4e, 0x1,0x78,0x5d, 0x1,0x78,0x5b, + 0x2,0x66,0x34, 0x4,0x60,0x4c, 0x2,0x66,0x36, 0x2,0x66,0x33, + 0x1,0x78,0x5c, 0x1,0x78,0x59, 0x1,0x78,0x5a, 0x1,0x78,0x5e, + 0x3,0x66,0x24, 0x1,0x7a,0x25, 0x3,0x5c,0x66, 0x2,0x69,0x57, + 0x5,0x6c,0x79, 0x2,0x69,0x56, 0x2,0x69,0x54, 0x2,0x69,0x53, + 0x2,0x69,0x55, 0x3,0x5c,0x65, 0x1,0x7a,0x24, 0x1,0x7a,0x26, + 0x3,0x66,0x25, 0xf,0x65,0x67, 0x1,0x7a,0x7b, 0x3,0x5e,0x4c, + 0x4,0x66,0x6f, 0x2,0x6b,0x73, 0x2,0x6b,0x72, 0x3,0x5c,0x67, + 0x3,0x5e,0x4b, 0x2,0x6d,0x68, 0x3,0x5f,0x58, 0x2,0x6d,0x6a, + 0x2,0x6d,0x6c, 0x2,0x6d,0x6b, 0x2,0x6d,0x69, 0x3,0x5f,0x57, + 0x3,0x60,0x3f, 0x1,0x7b,0x6d, 0x1,0x7b,0x6c, 0x3,0x60,0x3e, + 0x1,0x7c,0x3f, 0x1,0x7c,0x3e, 0x1,0x7c,0x40, 0x2,0x6f,0x3c, + 0x2,0x6f,0x3b, 0x3,0x66,0x26, 0x2,0x71,0x2b, 0x2,0x70,0x46, + 0x2,0x71,0x2c, 0x1,0x7d,0x25, 0x3,0x61,0x44, 0x1,0x7d,0x26, + 0x2,0x71,0x5c, 0x4,0x6d,0x5b, 0x3,0x62,0x3a, 0x1,0x7d,0x4b, + 0x1,0x48,0x4d, 0x3,0x2a,0x49, 0x2,0x28,0x48, 0x3,0x2a,0x48, + 0x3,0x2e,0x52, 0x2,0x2c,0x66, 0x2,0x2c,0x67, 0x2,0x2c,0x65, + 0x3,0x2e,0x54, 0x3,0x2e,0x53, 0x1,0x52,0x76, 0xf,0x2d,0x21, + 0x2,0x2c,0x68, 0x2,0x2c,0x69, 0x2,0x2c,0x6a, 0x3,0x33,0x31, + 0x2,0x31,0x6b, 0x2,0x31,0x71, 0x3,0x33,0x2e, 0x3,0x33,0x30, + 0x2,0x31,0x6f, 0x1,0x57,0x3e, 0x2,0x31,0x6d, 0x3,0x33,0x32, + 0x2,0x31,0x6e, 0x2,0x31,0x70, 0x3,0x33,0x2d, 0x2,0x31,0x6c, + 0x1,0x5c,0x4e, 0x3,0x37,0x7d, 0x2,0x38,0x23, 0x1,0x5c,0x50, + 0x2,0x38,0x25, 0x1,0x5c,0x4f, 0x2,0x38,0x24, 0x3,0x37,0x7e, + 0x3,0x38,0x21, 0x3,0x38,0x3e, 0x3,0x38,0x22, 0x4,0x34,0x22, + 0x2,0x3e,0x6c, 0x1,0x61,0x35, 0x3,0x3e,0x21, 0x2,0x3e,0x6e, + 0x2,0x3e,0x6b, 0x2,0x38,0x26, 0x3,0x3e,0x23, 0x1,0x61,0x36, + 0x3,0x3e,0x22, 0x3,0x3d,0x7e, 0x2,0x3e,0x6d, 0x3,0x66,0x27, + 0xf,0x3e,0x21, 0xf,0x3e,0x23, 0x3,0x43,0x58, 0x2,0x45,0x7b, + 0x3,0x43,0x5c, 0x1,0x65,0x6b, 0x2,0x45,0x79, 0x1,0x65,0x6c, + 0x2,0x45,0x7a, 0x1,0x65,0x6d, 0x4,0x45,0x74, 0x3,0x48,0x62, + 0x3,0x48,0x61, 0x1,0x6a,0x32, 0x2,0x4c,0x68, 0x2,0x4c,0x65, + 0x2,0x4c,0x67, 0x1,0x6a,0x33, 0x1,0x6a,0x34, 0x2,0x4c,0x66, + 0xf,0x4b,0x27, 0xf,0x4b,0x2b, 0x3,0x4d,0x6f, 0x3,0x4d,0x71, + 0x3,0x4d,0x6d, 0x2,0x52,0x67, 0x3,0x4d,0x70, 0x3,0x4d,0x73, + 0x2,0x52,0x68, 0x3,0x4d,0x72, 0x1,0x6e,0x36, 0x2,0x52,0x6a, + 0x2,0x52,0x69, 0x3,0x4d,0x6e, 0x1,0x23,0x23, 0x4,0x52,0x44, + 0x2,0x59,0x36, 0x2,0x59,0x37, 0x2,0x59,0x33, 0x3,0x52,0x37, + 0x2,0x59,0x34, 0x1,0x71,0x66, 0x1,0x71,0x67, 0x2,0x59,0x35, + 0x1,0x74,0x61, 0x3,0x55,0x75, 0x3,0x55,0x74, 0x1,0x74,0x5d, + 0x1,0x74,0x62, 0x1,0x74,0x5e, 0x1,0x74,0x60, 0x1,0x74,0x5c, + 0x3,0x52,0x39, 0x1,0x74,0x5f, 0x3,0x58,0x55, 0x4,0x5c,0x5a, + 0x4,0x5c,0x5b, 0x3,0x58,0x54, 0x1,0x76,0x7d, 0x2,0x5e,0x3c, + 0x7,0x48,0x57, 0x2,0x66,0x38, 0x4,0x60,0x5a, 0x2,0x66,0x37, + 0x3,0x66,0x28, 0x2,0x69,0x58, 0x1,0x7a,0x27, 0x1,0x7a,0x28, + 0x2,0x6d,0x6e, 0x2,0x6b,0x74, 0x3,0x61,0x69, 0x2,0x6d,0x6d, + 0x3,0x60,0x40, 0x2,0x71,0x2d, 0x2,0x71,0x72, 0x1,0x48,0x4e, + 0x3,0x27,0x22, 0x1,0x4b,0x37, 0x3,0x2a,0x4b, 0x2,0x28,0x49, + 0x1,0x4f,0x2b, 0x3,0x2a,0x4a, 0x1,0x52,0x79, 0x2,0x2c,0x6d, + 0x1,0x52,0x77, 0x2,0x2c,0x6b, 0x1,0x52,0x7c, 0x1,0x52,0x78, + 0x1,0x52,0x7d, 0x1,0x52,0x7b, 0x2,0x2c,0x6c, 0x1,0x52,0x7a, + 0x1,0x57,0x42, 0x1,0x57,0x41, 0x2,0x31,0x7c, 0x1,0x57,0x4a, + 0x2,0x31,0x75, 0x2,0x31,0x7b, 0x1,0x57,0x46, 0x2,0x31,0x74, + 0x2,0x31,0x7a, 0x2,0x31,0x78, 0x1,0x57,0x45, 0x1,0x57,0x47, + 0x2,0x31,0x77, 0x1,0x57,0x40, 0x2,0x31,0x76, 0x1,0x57,0x4b, + 0x1,0x57,0x48, 0x1,0x57,0x4c, 0x1,0x57,0x49, 0x2,0x31,0x73, + 0x2,0x31,0x72, 0x2,0x31,0x79, 0x1,0x57,0x43, 0x1,0x57,0x3f, + 0x1,0x57,0x44, 0x4,0x2f,0x25, 0x3,0x33,0x37, 0x3,0x33,0x3b, + 0x2,0x38,0x35, 0x2,0x38,0x2e, 0x4,0x3a,0x26, 0x1,0x61,0x3b, + 0x2,0x38,0x2d, 0x3,0x38,0x29, 0x1,0x5c,0x54, 0x1,0x5c,0x5b, + 0x1,0x5c,0x58, 0x1,0x5c,0x5e, 0x1,0x5c,0x5d, 0x1,0x5c,0x59, + 0x3,0x38,0x26, 0x2,0x38,0x27, 0x2,0x38,0x2a, 0x3,0x38,0x27, + 0x2,0x38,0x29, 0x1,0x5c,0x55, 0x2,0x38,0x2b, 0x2,0x38,0x34, + 0x1,0x5c,0x56, 0x2,0x38,0x28, 0x2,0x38,0x31, 0x2,0x38,0x32, + 0x1,0x5c,0x57, 0x2,0x38,0x2f, 0x1,0x5c,0x5c, 0x1,0x5c,0x52, + 0x1,0x5c,0x5a, 0x2,0x38,0x2c, 0x1,0x5c,0x51, 0x2,0x38,0x30, + 0x3,0x38,0x2e, 0x3,0x38,0x24, 0x2,0x38,0x33, 0xf,0x37,0x54, + 0x3,0x38,0x2b, 0x3,0x3e,0x34, 0x2,0x3f,0x21, 0x2,0x3e,0x76, + 0x1,0x61,0x38, 0x2,0x3e,0x7d, 0x2,0x3e,0x7a, 0x2,0x3e,0x72, + 0x2,0x3e,0x7b, 0x1,0x61,0x3a, 0x2,0x3e,0x73, 0x3,0x3e,0x29, + 0x2,0x3e,0x6f, 0x3,0x3e,0x26, 0x3,0x3e,0x2e, 0x1,0x65,0x73, + 0x2,0x3e,0x78, 0x3,0x3e,0x2f, 0x1,0x61,0x37, 0x2,0x3e,0x7e, + 0x3,0x3e,0x28, 0x1,0x61,0x3e, 0x1,0x61,0x40, 0x2,0x3e,0x71, + 0x3,0x3e,0x2c, 0x4,0x3a,0x27, 0x1,0x61,0x3f, 0x2,0x3e,0x74, + 0x1,0x61,0x39, 0x2,0x3e,0x7c, 0x2,0x3e,0x75, 0x2,0x3e,0x79, + 0x3,0x3e,0x2a, 0x2,0x3e,0x77, 0x1,0x61,0x3c, 0x2,0x3e,0x70, + 0x1,0x61,0x41, 0x1,0x5c,0x53, 0x1,0x61,0x3d, 0x1,0x61,0x42, + 0x3,0x3e,0x24, 0x3,0x3e,0x35, 0x3,0x3e,0x33, 0x3,0x43,0x67, + 0x1,0x65,0x6f, 0x2,0x46,0x24, 0x2,0x46,0x26, 0x2,0x46,0x28, + 0x2,0x46,0x2c, 0x3,0x3e,0x2b, 0x2,0x46,0x22, 0x2,0x45,0x7e, + 0x1,0x65,0x71, 0x4,0x3f,0x71, 0x2,0x46,0x27, 0x2,0x46,0x2b, + 0x2,0x46,0x23, 0x2,0x45,0x7d, 0x3,0x43,0x66, 0x2,0x45,0x7c, + 0x3,0x43,0x69, 0x3,0x43,0x60, 0x3,0x43,0x62, 0x2,0x46,0x29, + 0x2,0x46,0x21, 0x2,0x46,0x25, 0x1,0x65,0x72, 0x3,0x43,0x5e, + 0x1,0x65,0x70, 0x2,0x46,0x2d, 0x1,0x65,0x6e, 0x2,0x46,0x2a, + 0x3,0x43,0x64, 0x2,0x4c,0x79, 0x3,0x43,0x68, 0x3,0x43,0x6a, + 0x3,0x43,0x63, 0x1,0x6a,0x37, 0x2,0x4c,0x71, 0x1,0x6e,0x43, + 0x2,0x4c,0x7b, 0x1,0x6a,0x3a, 0x2,0x4d,0x21, 0x1,0x6a,0x40, + 0x2,0x4c,0x6c, 0x3,0x48,0x74, 0x4,0x45,0x7b, 0x2,0x4c,0x7c, + 0x2,0x4c,0x69, 0x3,0x48,0x6d, 0x2,0x4c,0x7e, 0x2,0x4c,0x6d, + 0x3,0x48,0x6e, 0x1,0x6a,0x47, 0x1,0x6a,0x44, 0x2,0x4c,0x7d, + 0x2,0x4c,0x77, 0x1,0x6a,0x36, 0x1,0x6a,0x3e, 0x1,0x6a,0x3d, + 0x3,0x48,0x70, 0x1,0x6a,0x3c, 0x1,0x6a,0x42, 0x3,0x48,0x69, + 0x2,0x4c,0x6a, 0x1,0x6a,0x43, 0x2,0x4c,0x78, 0x1,0x6a,0x3f, + 0x1,0x6a,0x35, 0x2,0x4c,0x7a, 0x1,0x6a,0x38, 0x1,0x6a,0x39, + 0x1,0x6a,0x41, 0x2,0x4c,0x6f, 0x2,0x4c,0x6e, 0x2,0x4c,0x6b, + 0x4,0x45,0x7c, 0x2,0x4c,0x73, 0x2,0x4c,0x70, 0x2,0x4c,0x74, + 0x1,0x6a,0x46, 0x3,0x48,0x68, 0x2,0x4d,0x22, 0x1,0x6a,0x3b, + 0x2,0x4c,0x75, 0x2,0x4c,0x76, 0x3,0x48,0x71, 0x2,0x4c,0x72, + 0x3,0x48,0x73, 0x3,0x66,0x29, 0x3,0x48,0x6b, 0x1,0x6a,0x45, + 0x3,0x66,0x2b, 0x3,0x4e,0x22, 0x2,0x52,0x6f, 0x1,0x6e,0x3b, + 0x1,0x6e,0x44, 0x1,0x6e,0x40, 0x2,0x52,0x6c, 0x3,0x4d,0x7c, + 0x1,0x6e,0x3d, 0x1,0x6e,0x41, 0x2,0x52,0x78, 0x1,0x6e,0x37, + 0x2,0x52,0x70, 0x3,0x4d,0x78, 0x1,0x6e,0x3f, 0x3,0x4e,0x24, + 0x3,0x4e,0x2f, 0x2,0x52,0x73, 0x2,0x52,0x6e, 0x1,0x6e,0x3e, + 0x1,0x6e,0x42, 0x2,0x52,0x6d, 0x3,0x4e,0x2e, 0x1,0x6e,0x3c, + 0x3,0x4d,0x77, 0x2,0x52,0x77, 0x1,0x6e,0x39, 0x2,0x52,0x76, + 0x2,0x52,0x75, 0x1,0x6e,0x45, 0x2,0x50,0x3b, 0x1,0x6e,0x38, + 0x3,0x4e,0x2b, 0x2,0x52,0x74, 0x2,0x52,0x6b, 0x3,0x4d,0x75, + 0x1,0x6e,0x46, 0x2,0x52,0x72, 0x1,0x6e,0x3a, 0x3,0x4e,0x28, + 0x3,0x4e,0x29, 0x3,0x4e,0x25, 0x3,0x4e,0x2c, 0x3,0x4e,0x27, + 0x3,0x4d,0x7e, 0x3,0x4d,0x7d, 0x2,0x52,0x71, 0x4,0x4c,0x45, + 0x3,0x66,0x2a, 0x1,0x71,0x6a, 0x1,0x71,0x6f, 0x1,0x71,0x68, + 0x2,0x59,0x44, 0x2,0x59,0x3b, 0x2,0x59,0x47, 0x2,0x59,0x3f, + 0x2,0x59,0x45, 0x1,0x71,0x70, 0x1,0x71,0x69, 0x2,0x59,0x38, + 0x2,0x59,0x3e, 0x2,0x59,0x48, 0x2,0x59,0x41, 0x2,0x59,0x46, + 0x2,0x59,0x3a, 0x4,0x52,0x4c, 0x3,0x52,0x3b, 0x2,0x59,0x42, + 0x1,0x71,0x6b, 0x2,0x59,0x40, 0x1,0x71,0x6e, 0x1,0x71,0x6d, + 0x2,0x59,0x3c, 0x2,0x59,0x3d, 0x2,0x59,0x39, 0x2,0x59,0x43, + 0x1,0x71,0x6c, 0x2,0x59,0x4a, 0x2,0x59,0x49, 0x3,0x52,0x40, + 0x3,0x52,0x3f, 0x2,0x5e,0x47, 0x2,0x5e,0x43, 0x1,0x74,0x69, + 0x3,0x55,0x79, 0x2,0x5e,0x3d, 0x1,0x74,0x63, 0x1,0x74,0x73, + 0x2,0x5e,0x49, 0x1,0x74,0x6b, 0x1,0x74,0x67, 0x2,0x5e,0x40, + 0x1,0x74,0x6e, 0x1,0x74,0x71, 0x2,0x5e,0x4b, 0x1,0x74,0x66, + 0x2,0x5e,0x42, 0x1,0x74,0x6f, 0x2,0x5e,0x4d, 0x2,0x5e,0x4a, + 0x2,0x5e,0x3e, 0x1,0x74,0x6a, 0x1,0x74,0x64, 0x1,0x74,0x72, + 0x2,0x5e,0x45, 0x1,0x74,0x6d, 0x2,0x5e,0x3f, 0x1,0x74,0x68, + 0x2,0x5e,0x4c, 0x1,0x74,0x6c, 0x1,0x74,0x65, 0x2,0x5e,0x46, + 0x1,0x74,0x70, 0x2,0x5e,0x44, 0x2,0x5e,0x48, 0x3,0x55,0x7a, + 0x4,0x5c,0x5f, 0x3,0x58,0x59, 0x2,0x62,0x5a, 0x2,0x62,0x60, + 0x1,0x77,0x25, 0x2,0x62,0x63, 0x1,0x76,0x7e, 0x1,0x77,0x21, + 0x2,0x62,0x5b, 0x2,0x62,0x62, 0x2,0x62,0x5d, 0x1,0x77,0x26, + 0x1,0x77,0x23, 0x3,0x58,0x5b, 0x2,0x62,0x59, 0x3,0x58,0x58, + 0x1,0x77,0x22, 0x2,0x62,0x5f, 0x2,0x62,0x61, 0x1,0x77,0x24, + 0x2,0x62,0x5e, 0x2,0x62,0x5c, 0x3,0x66,0x2c, 0x4,0x5c,0x5e, + 0x3,0x58,0x5a, 0x2,0x66,0x42, 0x1,0x78,0x62, 0x1,0x78,0x63, + 0x1,0x78,0x5f, 0x3,0x5a,0x72, 0x1,0x78,0x60, 0x3,0x5a,0x74, + 0x2,0x66,0x3e, 0x2,0x66,0x3c, 0x3,0x5a,0x75, 0x2,0x66,0x40, + 0x1,0x78,0x64, 0x2,0x66,0x41, 0x2,0x66,0x3a, 0x2,0x66,0x39, + 0x2,0x66,0x3d, 0x2,0x66,0x3b, 0x1,0x78,0x61, 0x2,0x66,0x3f, + 0x2,0x69,0x59, 0x1,0x7a,0x2b, 0x1,0x7a,0x2a, 0x2,0x69,0x5a, + 0x3,0x5c,0x6c, 0x2,0x69,0x5c, 0x2,0x69,0x5b, 0x1,0x7a,0x2c, + 0x3,0x5e,0x53, 0x3,0x5e,0x50, 0x2,0x6b,0x79, 0x2,0x6b,0x76, + 0x2,0x6b,0x77, 0x3,0x5e,0x51, 0x2,0x6b,0x75, 0x2,0x6b,0x78, + 0x1,0x7a,0x7d, 0x2,0x6b,0x7a, 0x3,0x5e,0x52, 0x1,0x7a,0x7c, + 0x2,0x6d,0x6f, 0x3,0x5f,0x5a, 0x1,0x7c,0x41, 0x1,0x7c,0x43, + 0x2,0x6f,0x3d, 0x1,0x7c,0x42, 0x2,0x70,0x47, 0x2,0x71,0x2f, + 0x2,0x71,0x31, 0x2,0x71,0x2e, 0x2,0x71,0x30, 0x1,0x7d,0x39, + 0x4,0x6d,0x78, 0x3,0x62,0x35, 0x1,0x48,0x4f, 0x4,0x25,0x57, + 0x1,0x52,0x7e, 0x2,0x30,0x52, 0x1,0x57,0x4d, 0x3,0x38,0x31, + 0xf,0x31,0x78, 0x1,0x5c,0x5f, 0x2,0x3f,0x22, 0x2,0x3f,0x23, + 0x3,0x66,0x2d, 0x3,0x48,0x77, 0x2,0x59,0x4b, 0x1,0x74,0x74, + 0x2,0x5e,0x4e, 0x3,0x55,0x7d, 0x3,0x58,0x5c, 0x1,0x77,0x27, + 0x2,0x66,0x44, 0x2,0x66,0x43, 0x1,0x7a,0x2d, 0x2,0x6b,0x7b, + 0x3,0x5f,0x5b, 0x2,0x6d,0x70, 0x1,0x7c,0x64, 0x2,0x22,0x69, + 0x4,0x22,0x21, 0x1,0x4f,0x2c, 0x1,0x4b,0x38, 0xf,0x28,0x4a, + 0x2,0x2c,0x6e, 0x3,0x2a,0x4e, 0x2,0x32,0x24, 0x2,0x31,0x7d, + 0x2,0x32,0x23, 0x2,0x32,0x21, 0x1,0x57,0x4e, 0x2,0x32,0x22, + 0x2,0x31,0x7e, 0x3,0x33,0x3c, 0x2,0x38,0x36, 0x4,0x3a,0x2b, + 0x2,0x3f,0x24, 0x2,0x3f,0x25, 0x2,0x46,0x30, 0x2,0x46,0x31, + 0x1,0x65,0x75, 0x1,0x65,0x76, 0x2,0x46,0x2f, 0x2,0x46,0x32, + 0x2,0x46,0x2e, 0x1,0x65,0x74, 0x3,0x48,0x78, 0x1,0x6a,0x48, + 0x3,0x48,0x79, 0x1,0x65,0x77, 0x2,0x4d,0x23, 0x1,0x6e,0x47, + 0x2,0x52,0x79, 0x1,0x6e,0x48, 0x3,0x4e,0x30, 0x1,0x71,0x71, + 0x2,0x59,0x4e, 0x2,0x59,0x4c, 0x2,0x59,0x4d, 0x2,0x5e,0x51, + 0x2,0x5e,0x50, 0x2,0x5e,0x4f, 0x7,0x41,0x61, 0x4,0x5c,0x68, + 0x2,0x66,0x45, 0x4,0x60,0x6f, 0x1,0x78,0x65, 0x2,0x66,0x46, + 0x2,0x6d,0x71, 0x1,0x7c,0x65, 0x2,0x70,0x48, 0x1,0x48,0x50, + 0x1,0x4f,0x2e, 0x1,0x4f,0x2d, 0x2,0x2c,0x70, 0x1,0x53,0x21, + 0x3,0x2e,0x5d, 0x4,0x2f,0x30, 0x2,0x2c,0x6f, 0x2,0x32,0x26, + 0x3,0x33,0x3d, 0x1,0x57,0x4f, 0x2,0x38,0x37, 0x2,0x32,0x25, + 0x3,0x33,0x3f, 0x4,0x2f,0x2f, 0x3,0x33,0x3e, 0x1,0x5c,0x61, + 0x2,0x38,0x3a, 0x2,0x38,0x38, 0x2,0x38,0x39, 0x1,0x5c,0x60, + 0x2,0x3f,0x27, 0x2,0x3f,0x28, 0x2,0x3f,0x26, 0x3,0x43,0x6e, + 0x1,0x65,0x7a, 0x2,0x46,0x34, 0x2,0x46,0x33, 0x2,0x46,0x35, + 0x1,0x65,0x79, 0x1,0x65,0x78, 0x4,0x46,0x26, 0x2,0x52,0x7a, + 0x2,0x52,0x7c, 0x3,0x4e,0x31, 0x1,0x6e,0x49, 0x2,0x52,0x7b, + 0x2,0x59,0x4f, 0x1,0x71,0x72, 0x2,0x62,0x65, 0x3,0x58,0x5d, + 0x2,0x62,0x64, 0x1,0x78,0x66, 0x2,0x66,0x47, 0x1,0x78,0x68, + 0x1,0x78,0x67, 0x2,0x69,0x5d, 0x2,0x6b,0x7c, 0x1,0x7a,0x7e, + 0x1,0x48,0x51, 0x2,0x2c,0x71, 0x1,0x53,0x22, 0x2,0x32,0x29, + 0x1,0x57,0x51, 0x2,0x32,0x28, 0x2,0x32,0x27, 0x3,0x33,0x42, + 0x1,0x57,0x50, 0x3,0x33,0x43, 0x2,0x38,0x40, 0x4,0x34,0x3d, + 0x2,0x38,0x42, 0x2,0x38,0x3b, 0x2,0x38,0x3c, 0x1,0x5c,0x62, + 0x2,0x38,0x3d, 0x1,0x5c,0x63, 0x2,0x38,0x41, 0x2,0x38,0x3e, + 0x2,0x38,0x3f, 0x1,0x5c,0x64, 0x3,0x3e,0x37, 0x1,0x61,0x44, + 0x1,0x61,0x45, 0x3,0x3e,0x38, 0x2,0x3f,0x29, 0x2,0x46,0x36, + 0x2,0x46,0x37, 0x3,0x43,0x72, 0x2,0x4d,0x27, 0x1,0x6a,0x4b, + 0x1,0x6a,0x49, 0x1,0x6a,0x4a, 0x2,0x4d,0x24, 0x2,0x4d,0x25, + 0x6,0x60,0x58, 0x2,0x4d,0x26, 0x2,0x53,0x23, 0x3,0x4e,0x32, + 0x2,0x53,0x24, 0x1,0x6e,0x4a, 0x2,0x53,0x21, 0x2,0x52,0x7e, + 0x2,0x53,0x22, 0x2,0x52,0x7d, 0x1,0x71,0x75, 0x2,0x59,0x50, + 0x1,0x71,0x73, 0x1,0x71,0x74, 0x2,0x5e,0x53, 0x1,0x74,0x75, + 0x2,0x5e,0x52, 0x2,0x61,0x34, 0x3,0x55,0x7e, 0x2,0x62,0x66, + 0x2,0x62,0x67, 0x1,0x77,0x28, 0x3,0x58,0x61, 0x1,0x77,0x29, + 0x1,0x74,0x76, 0x2,0x66,0x48, 0x2,0x66,0x49, 0x2,0x69,0x5e, + 0x1,0x7a,0x2e, 0x1,0x48,0x52, 0x3,0x66,0x7b, 0x1,0x48,0x53, + 0x1,0x57,0x53, 0x1,0x4f,0x2f, 0x1,0x57,0x52, 0x2,0x2c,0x72, + 0x3,0x38,0x36, 0x4,0x2b,0x25, 0x3,0x33,0x44, 0x1,0x61,0x46, + 0x1,0x48,0x54, 0x1,0x53,0x24, 0x2,0x2c,0x73, 0x2,0x2c,0x74, + 0x1,0x53,0x23, 0x1,0x53,0x25, 0x1,0x48,0x55, 0x4,0x27,0x61, + 0x2,0x2c,0x75, 0x1,0x57,0x55, 0x2,0x32,0x2a, 0x1,0x57,0x57, + 0x1,0x57,0x54, 0x1,0x57,0x56, 0x3,0x38,0x37, 0x2,0x38,0x45, + 0x1,0x5c,0x65, 0x3,0x38,0x39, 0x2,0x38,0x44, 0x2,0x38,0x43, + 0x4,0x3a,0x38, 0x2,0x46,0x38, 0x3,0x49,0x22, 0x2,0x4d,0x28, + 0x4,0x46,0x2c, 0x1,0x6e,0x4b, 0x1,0x71,0x76, 0x2,0x59,0x52, + 0x2,0x59,0x51, 0x3,0x56,0x21, 0x2,0x5e,0x54, 0x4,0x5c,0x71, + 0x3,0x58,0x62, 0x3,0x5c,0x6f, 0x2,0x6b,0x7d, 0x4,0x69,0x2e, + 0x4,0x69,0x2d, 0x1,0x48,0x56, 0x2,0x24,0x73, 0x2,0x28,0x4a, + 0x1,0x53,0x26, 0x2,0x2c,0x76, 0x6,0x3b,0x21, 0x2,0x32,0x2c, + 0x4,0x2f,0x3a, 0x3,0x33,0x49, 0x3,0x33,0x48, 0x1,0x57,0x58, + 0x2,0x32,0x2b, 0x1,0x57,0x59, 0x3,0x33,0x47, 0x3,0x66,0x2f, + 0x2,0x38,0x47, 0x3,0x38,0x3d, 0x3,0x38,0x3c, 0x1,0x5c,0x67, + 0x2,0x38,0x46, 0x2,0x38,0x48, 0x3,0x38,0x3b, 0x1,0x5c,0x66, + 0x3,0x3e,0x3c, 0x2,0x3f,0x2b, 0x2,0x3f,0x2c, 0x2,0x3f,0x2a, + 0x1,0x61,0x47, 0x3,0x67,0x29, 0x4,0x3f,0x7c, 0x1,0x65,0x7b, + 0x3,0x43,0x73, 0x1,0x65,0x7c, 0x4,0x46,0x33, 0x1,0x6a,0x4d, + 0x3,0x49,0x23, 0x2,0x4d,0x2a, 0x2,0x4d,0x29, 0x1,0x6a,0x4c, + 0x3,0x49,0x26, 0x3,0x3e,0x3b, 0x3,0x49,0x25, 0x3,0x66,0x30, + 0x2,0x53,0x25, 0x3,0x4e,0x34, 0x3,0x4e,0x36, 0x2,0x53,0x26, + 0x3,0x4e,0x37, 0x3,0x4e,0x35, 0x3,0x4e,0x38, 0x2,0x59,0x53, + 0x4,0x52,0x5c, 0x3,0x52,0x43, 0x1,0x74,0x7a, 0x1,0x74,0x79, + 0x1,0x74,0x77, 0x1,0x74,0x78, 0x1,0x74,0x7b, 0x3,0x56,0x22, + 0x2,0x62,0x68, 0x1,0x77,0x2b, 0x1,0x77,0x2a, 0x2,0x66,0x4a, + 0x2,0x69,0x5f, 0x3,0x5c,0x70, 0x3,0x5c,0x71, 0x3,0x5c,0x72, + 0x1,0x7b,0x6f, 0x1,0x7b,0x6e, 0x1,0x48,0x57, 0x6,0x3b,0x24, + 0x2,0x2f,0x7d, 0x1,0x65,0x7e, 0x1,0x61,0x48, 0x1,0x65,0x7d, + 0x1,0x6a,0x4e, 0x6,0x60,0x60, 0x1,0x48,0x58, 0x2,0x21,0x68, + 0x1,0x48,0x59, 0x1,0x48,0x5a, 0x3,0x24,0x35, 0x3,0x24,0x36, + 0x2,0x28,0x4b, 0x2,0x24,0x76, 0x3,0x27,0x24, 0x2,0x24,0x77, + 0x1,0x4b,0x3a, 0x3,0x27,0x26, 0x2,0x24,0x74, 0x1,0x4b,0x39, + 0x3,0x27,0x25, 0x1,0x4b,0x3c, 0x2,0x24,0x75, 0x1,0x4b,0x3e, + 0x1,0x4b,0x3d, 0x2,0x24,0x78, 0x1,0x4b,0x3b, 0x4,0x24,0x70, + 0x3,0x27,0x23, 0x1,0x4f,0x34, 0x1,0x4f,0x32, 0x2,0x28,0x4d, + 0x3,0x2a,0x56, 0x1,0x4f,0x31, 0x3,0x2a,0x5b, 0x3,0x2a,0x58, + 0x3,0x2a,0x4f, 0x1,0x4f,0x36, 0x1,0x4f,0x38, 0x1,0x4f,0x35, + 0x3,0x2a,0x59, 0x2,0x28,0x50, 0x2,0x28,0x4c, 0x1,0x4f,0x39, + 0x3,0x2a,0x52, 0x1,0x4f,0x33, 0x1,0x4b,0x3f, 0x3,0x2a,0x54, + 0x1,0x4f,0x37, 0x2,0x28,0x4f, 0x3,0x2a,0x57, 0x4,0x27,0x64, + 0x2,0x28,0x4e, 0x4,0x27,0x69, 0x1,0x4f,0x30, 0x3,0x66,0x31, + 0x2,0x2c,0x7c, 0x1,0x53,0x2a, 0x1,0x53,0x2b, 0x2,0x2c,0x7e, + 0x3,0x2e,0x66, 0x2,0x2c,0x78, 0x2,0x2c,0x7b, 0x2,0x2d,0x26, + 0x2,0x2d,0x24, 0x3,0x2e,0x60, 0x1,0x53,0x2c, 0x2,0x2d,0x2a, + 0x1,0x53,0x2f, 0x2,0x2d,0x27, 0x2,0x2c,0x7d, 0x2,0x2c,0x7a, + 0x3,0x2e,0x61, 0x3,0x2e,0x5e, 0x2,0x3f,0x2e, 0x2,0x2d,0x25, + 0x1,0x53,0x27, 0x2,0x2d,0x28, 0x2,0x2c,0x77, 0x2,0x2d,0x22, + 0x1,0x53,0x29, 0x1,0x53,0x2e, 0x2,0x2d,0x23, 0x1,0x53,0x32, + 0x1,0x53,0x30, 0x3,0x2e,0x65, 0x2,0x2c,0x79, 0x1,0x53,0x2d, + 0x3,0x2e,0x64, 0x2,0x2d,0x21, 0x1,0x53,0x31, 0x1,0x53,0x28, + 0x2,0x2d,0x29, 0x1,0x57,0x5e, 0x3,0x33,0x4c, 0x1,0x57,0x67, + 0x1,0x57,0x5c, 0x1,0x57,0x5a, 0x2,0x32,0x2e, 0x1,0x57,0x62, + 0x1,0x57,0x5f, 0x2,0x32,0x30, 0x3,0x33,0x4a, 0x3,0x33,0x52, + 0x1,0x57,0x61, 0x2,0x32,0x2f, 0x2,0x32,0x2d, 0x2,0x32,0x32, + 0x1,0x57,0x66, 0x1,0x57,0x64, 0x2,0x3f,0x2d, 0x3,0x33,0x4b, + 0x2,0x32,0x33, 0x2,0x32,0x31, 0x1,0x57,0x5b, 0x3,0x33,0x4e, + 0x3,0x33,0x4d, 0x1,0x57,0x5d, 0x1,0x57,0x60, 0x3,0x33,0x4f, + 0x1,0x57,0x63, 0x3,0x2e,0x63, 0x1,0x57,0x65, 0x3,0x3e,0x44, + 0x2,0x38,0x52, 0x1,0x5c,0x69, 0x3,0x38,0x49, 0x2,0x38,0x49, + 0x2,0x38,0x4b, 0x3,0x38,0x47, 0x2,0x38,0x4c, 0x4,0x34,0x4d, + 0x2,0x38,0x54, 0x2,0x38,0x50, 0x2,0x38,0x4e, 0x4,0x3a,0x3b, + 0x2,0x38,0x51, 0x2,0x38,0x55, 0x1,0x5c,0x6a, 0x1,0x5c,0x6e, + 0x2,0x38,0x4a, 0x4,0x34,0x47, 0x2,0x38,0x53, 0x4,0x34,0x50, + 0x1,0x5c,0x6c, 0x3,0x38,0x41, 0x1,0x5c,0x6b, 0x2,0x38,0x4f, + 0x2,0x38,0x4d, 0x3,0x38,0x42, 0x1,0x5c,0x68, 0x1,0x5c,0x6d, + 0x3,0x38,0x45, 0x3,0x38,0x48, 0x1,0x61,0x4e, 0x2,0x3f,0x36, + 0x3,0x3e,0x3e, 0x4,0x3a,0x3e, 0x2,0x3f,0x34, 0x1,0x61,0x50, + 0x4,0x3a,0x47, 0x3,0x3e,0x43, 0x3,0x3e,0x45, 0x3,0x3e,0x41, + 0x2,0x3f,0x2f, 0x2,0x46,0x46, 0x3,0x3e,0x3d, 0x1,0x61,0x4f, + 0x2,0x3f,0x33, 0x3,0x3e,0x40, 0x3,0x3e,0x42, 0x2,0x3f,0x30, + 0x1,0x61,0x4b, 0x1,0x61,0x51, 0x2,0x3f,0x35, 0x1,0x61,0x4d, + 0x2,0x3f,0x32, 0x1,0x6a,0x4f, 0x1,0x61,0x4c, 0x2,0x3f,0x31, + 0x1,0x61,0x52, 0x1,0x61,0x4a, 0x1,0x61,0x49, 0x6,0x43,0x5a, + 0x2,0x46,0x3e, 0x2,0x46,0x3c, 0x3,0x43,0x7b, 0x2,0x46,0x42, + 0x3,0x43,0x7e, 0x2,0x46,0x3a, 0x2,0x46,0x47, 0x2,0x46,0x3f, + 0x3,0x43,0x75, 0x2,0x46,0x39, 0x1,0x66,0x24, 0x1,0x66,0x2a, + 0x2,0x46,0x44, 0x4,0x40,0x29, 0x2,0x46,0x3d, 0x3,0x43,0x76, + 0x1,0x66,0x27, 0x3,0x43,0x77, 0x3,0x44,0x23, 0x1,0x66,0x25, + 0x2,0x46,0x45, 0x1,0x66,0x22, 0x1,0x66,0x21, 0x2,0x46,0x40, + 0x1,0x66,0x26, 0x1,0x61,0x53, 0x3,0x43,0x7c, 0x2,0x46,0x43, + 0x2,0x46,0x3b, 0x1,0x66,0x23, 0x1,0x66,0x28, 0x1,0x66,0x29, + 0x3,0x44,0x22, 0x1,0x6a,0x54, 0x1,0x6a,0x50, 0x3,0x49,0x27, + 0x1,0x6a,0x55, 0x2,0x4d,0x2d, 0x3,0x49,0x2a, 0x4,0x46,0x39, + 0x2,0x4d,0x2c, 0x2,0x4d,0x2e, 0x1,0x6a,0x52, 0x2,0x4d,0x2b, + 0x1,0x6a,0x53, 0x2,0x4d,0x31, 0x2,0x4d,0x30, 0x2,0x4d,0x2f, + 0x4,0x46,0x46, 0x1,0x6a,0x51, 0x4,0x52,0x67, 0x3,0x4e,0x3b, + 0x3,0x4e,0x3d, 0x3,0x4e,0x39, 0x2,0x53,0x2a, 0x3,0x4e,0x3c, + 0x2,0x53,0x2d, 0x1,0x6e,0x51, 0x2,0x53,0x2c, 0x1,0x6e,0x50, + 0x1,0x6e,0x4c, 0x1,0x6e,0x4d, 0x1,0x6e,0x4e, 0x2,0x53,0x29, + 0x2,0x53,0x28, 0x1,0x6e,0x4f, 0x3,0x4e,0x3a, 0x2,0x53,0x2b, + 0x2,0x53,0x27, 0x2,0x59,0x55, 0x2,0x59,0x5f, 0x1,0x71,0x79, + 0x1,0x71,0x78, 0x3,0x52,0x49, 0x2,0x59,0x59, 0x2,0x59,0x5b, + 0x3,0x52,0x47, 0x2,0x59,0x56, 0x3,0x52,0x44, 0x2,0x59,0x5a, + 0x2,0x59,0x54, 0x2,0x59,0x5d, 0x1,0x71,0x77, 0x2,0x59,0x5c, + 0x2,0x59,0x58, 0x2,0x59,0x5e, 0x3,0x56,0x23, 0x2,0x59,0x57, + 0x1,0x74,0x7e, 0x2,0x5e,0x55, 0x2,0x5e,0x5b, 0x1,0x75,0x24, + 0x1,0x75,0x26, 0x1,0x75,0x23, 0x1,0x75,0x22, 0x4,0x58,0x27, + 0x1,0x75,0x21, 0x1,0x74,0x7d, 0x2,0x5e,0x56, 0x2,0x5e,0x59, + 0x1,0x74,0x7c, 0x2,0x5e,0x5a, 0x3,0x56,0x24, 0x1,0x75,0x25, + 0x2,0x5e,0x58, 0x7,0x48,0x7c, 0x2,0x5e,0x57, 0x1,0x77,0x2c, + 0x3,0x58,0x65, 0x1,0x77,0x2d, 0x2,0x62,0x6b, 0x2,0x62,0x69, + 0x2,0x62,0x6a, 0x3,0x5a,0x77, 0x2,0x66,0x4c, 0x3,0x5a,0x78, + 0x2,0x66,0x4b, 0x1,0x78,0x69, 0x2,0x69,0x61, 0x1,0x7a,0x2f, + 0x2,0x69,0x60, 0x2,0x6b,0x7e, 0x2,0x6d,0x72, 0x1,0x7b,0x70, + 0x2,0x71,0x32, 0x2,0x71,0x33, 0x1,0x7c,0x44, 0x1,0x48,0x5b, + 0x4,0x27,0x6c, 0x1,0x4f,0x3a, 0x2,0x3f,0x37, 0x1,0x6a,0x56, + 0x1,0x75,0x27, 0x2,0x5e,0x5c, 0x1,0x48,0x5c, 0x4,0x24,0x73, + 0x1,0x57,0x69, 0x1,0x57,0x68, 0x2,0x3f,0x38, 0x3,0x3e,0x47, + 0x4,0x3a,0x4c, 0x4,0x4c,0x62, 0x2,0x59,0x60, 0x1,0x48,0x5d, + 0x1,0x53,0x33, 0x4,0x3a,0x4d, 0x3,0x3e,0x48, 0x2,0x3f,0x39, + 0x2,0x3f,0x3a, 0x2,0x3f,0x3b, 0x1,0x6a,0x57, 0x1,0x71,0x7a, + 0x1,0x48,0x5e, 0x4,0x27,0x6d, 0x1,0x4f,0x3b, 0x2,0x2d,0x2b, + 0x1,0x57,0x6a, 0x2,0x32,0x34, 0x1,0x5c,0x6f, 0x3,0x3e,0x49, + 0x2,0x3f,0x3c, 0x1,0x66,0x2b, 0x1,0x6a,0x58, 0x1,0x71,0x7b, + 0x1,0x75,0x28, 0x1,0x77,0x2e, 0x2,0x66,0x4d, 0x1,0x48,0x5f, + 0x1,0x4f,0x3c, 0x3,0x2a,0x5d, 0x4,0x27,0x6e, 0x1,0x57,0x6b, + 0x2,0x38,0x56, 0x1,0x61,0x54, 0x3,0x49,0x2b, 0x1,0x6a,0x59, + 0x2,0x4d,0x32, 0x2,0x53,0x2e, 0x3,0x52,0x4a, 0x3,0x58,0x68, + 0x3,0x5a,0x79, 0x1,0x48,0x60, 0x1,0x61,0x55, 0x2,0x46,0x48, + 0x1,0x6a,0x5a, 0x1,0x48,0x61, 0x2,0x28,0x51, 0x2,0x2d,0x2c, + 0x1,0x53,0x34, 0x3,0x2e,0x68, 0x2,0x32,0x36, 0x4,0x2f,0x4f, + 0x3,0x33,0x57, 0x1,0x57,0x6e, 0x3,0x33,0x58, 0x1,0x57,0x6c, + 0x1,0x57,0x6d, 0x1,0x57,0x6f, 0x3,0x33,0x55, 0x2,0x32,0x35, + 0x2,0x38,0x5b, 0x2,0x38,0x58, 0x2,0x38,0x5a, 0x1,0x5c,0x70, + 0x1,0x5c,0x72, 0x1,0x5c,0x71, 0x2,0x38,0x57, 0x1,0x5c,0x73, + 0x2,0x38,0x59, 0x2,0x3f,0x3d, 0x2,0x3f,0x3e, 0x2,0x3f,0x3f, + 0x2,0x46,0x4b, 0x3,0x44,0x26, 0x2,0x46,0x4c, 0x4,0x40,0x2e, + 0x2,0x46,0x4a, 0x2,0x46,0x4d, 0x4,0x40,0x2d, 0x1,0x66,0x2c, + 0x3,0x66,0x34, 0x2,0x46,0x49, 0x3,0x49,0x2d, 0x1,0x6a,0x5b, + 0x3,0x49,0x2e, 0x2,0x53,0x33, 0x2,0x53,0x2f, 0x2,0x53,0x32, + 0x2,0x53,0x34, 0x2,0x53,0x31, 0x2,0x53,0x30, 0x2,0x59,0x61, + 0x2,0x59,0x62, 0x2,0x59,0x63, 0x1,0x71,0x7c, 0x1,0x71,0x7d, + 0x2,0x5e,0x5e, 0x2,0x5e,0x5d, 0x2,0x5e,0x5f, 0x2,0x62,0x6d, + 0x2,0x62,0x6c, 0x2,0x66,0x4f, 0x3,0x5a,0x7a, 0x2,0x66,0x50, + 0x2,0x66,0x4e, 0x3,0x5a,0x7b, 0x1,0x7a,0x30, 0x4,0x64,0x2c, + 0x2,0x69,0x62, 0x2,0x69,0x63, 0x3,0x5e,0x55, 0x2,0x6d,0x73, + 0x2,0x6f,0x3e, 0x2,0x70,0x49, 0x1,0x48,0x62, 0x1,0x4b,0x40, + 0x1,0x75,0x29, 0x1,0x48,0x63, 0xf,0x32,0x32, 0x2,0x38,0x5c, + 0x2,0x3f,0x40, 0x3,0x5a,0x7c, 0x1,0x7c,0x6c, 0x2,0x22,0x6a, + 0x4,0x21,0x53, 0x3,0x24,0x38, 0x2,0x22,0x6b, 0x2,0x22,0x6d, + 0x1,0x48,0x64, 0x2,0x22,0x6e, 0x2,0x22,0x6c, 0x4,0x23,0x2f, + 0x2,0x25,0x22, 0x2,0x25,0x23, 0x2,0x24,0x7b, 0x3,0x27,0x28, + 0x4,0x24,0x7b, 0x4,0x24,0x75, 0x2,0x25,0x21, 0x1,0x4b,0x42, + 0x3,0x27,0x29, 0x1,0x4b,0x43, 0x2,0x24,0x7c, 0x2,0x24,0x7a, + 0x2,0x24,0x79, 0x2,0x24,0x7d, 0x1,0x4b,0x41, 0x2,0x24,0x7e, + 0x2,0x2d,0x2d, 0x3,0x27,0x2b, 0x4,0x24,0x79, 0x2,0x28,0x56, + 0x1,0x4f,0x3f, 0x2,0x28,0x55, 0x2,0x28,0x57, 0x3,0x2a,0x60, + 0x1,0x4f,0x3e, 0x2,0x28,0x5c, 0x1,0x4f,0x42, 0x2,0x28,0x52, + 0x2,0x28,0x60, 0x2,0x28,0x66, 0x1,0x4f,0x49, 0x2,0x28,0x63, + 0x1,0x4f,0x46, 0x3,0x2a,0x6b, 0x2,0x28,0x59, 0x2,0x28,0x5f, + 0x2,0x28,0x61, 0x3,0x2a,0x66, 0x2,0x28,0x54, 0x1,0x4f,0x45, + 0x1,0x4f,0x40, 0x2,0x28,0x5a, 0x1,0x4f,0x47, 0x1,0x4f,0x4a, + 0x1,0x4f,0x44, 0x3,0x2a,0x6c, 0x1,0x4f,0x3d, 0x2,0x28,0x5e, + 0x2,0x28,0x58, 0x2,0x28,0x65, 0x1,0x4f,0x4c, 0x1,0x4f,0x48, + 0x1,0x4f,0x43, 0x2,0x28,0x5d, 0x1,0x57,0x70, 0x2,0x28,0x5b, + 0x1,0x4f,0x41, 0x1,0x4f,0x4b, 0x4,0x27,0x7a, 0x2,0x28,0x53, + 0x4,0x27,0x7e, 0x2,0x28,0x62, 0x2,0x28,0x64, 0x3,0x2a,0x5e, + 0xf,0x28,0x63, 0x3,0x2a,0x68, 0x4,0x27,0x7b, 0x3,0x2e,0x76, + 0x1,0x53,0x45, 0x1,0x53,0x3f, 0x1,0x53,0x47, 0x1,0x53,0x44, + 0x2,0x2d,0x34, 0x2,0x2d,0x37, 0x1,0x53,0x40, 0x3,0x2e,0x6a, + 0x2,0x2d,0x2e, 0x4,0x2b,0x3a, 0x1,0x53,0x39, 0x1,0x53,0x43, + 0x3,0x2e,0x6b, 0x1,0x53,0x46, 0x1,0x53,0x48, 0x2,0x2d,0x43, + 0x2,0x2d,0x3a, 0x3,0x2e,0x78, 0x1,0x53,0x38, 0x2,0x2d,0x42, + 0x1,0x53,0x3c, 0x1,0x53,0x3a, 0x1,0x53,0x35, 0x2,0x2d,0x32, + 0x3,0x2e,0x72, 0x2,0x2d,0x41, 0x2,0x2d,0x36, 0x2,0x2d,0x39, + 0x2,0x2d,0x46, 0x3,0x2e,0x74, 0x1,0x53,0x49, 0x2,0x2d,0x40, + 0x1,0x53,0x41, 0x2,0x2d,0x3b, 0x2,0x2d,0x45, 0x2,0x2d,0x38, + 0x2,0x2d,0x3c, 0x2,0x2d,0x3f, 0x3,0x2e,0x69, 0x3,0x2e,0x6e, + 0x2,0x2d,0x30, 0x2,0x2d,0x44, 0x2,0x2d,0x3e, 0x3,0x2e,0x6f, + 0x3,0x2e,0x7a, 0x2,0x2d,0x2f, 0x6,0x34,0x3c, 0x2,0x2d,0x33, + 0x1,0x53,0x42, 0x1,0x53,0x3d, 0x1,0x53,0x36, 0x1,0x53,0x3b, + 0x1,0x53,0x37, 0x1,0x53,0x4a, 0x2,0x2d,0x31, 0x2,0x32,0x47, + 0x1,0x53,0x3e, 0x4,0x2b,0x3d, 0x3,0x2e,0x79, 0x2,0x2d,0x3d, + 0x2,0x29,0x42, 0x3,0x2e,0x77, 0x3,0x66,0x35, 0x3,0x66,0x37, + 0x2,0x32,0x4a, 0x1,0x57,0x7e, 0x3,0x33,0x62, 0x2,0x32,0x3a, + 0x4,0x2f,0x5d, 0x2,0x32,0x45, 0x2,0x32,0x41, 0x3,0x38,0x4d, + 0x2,0x32,0x54, 0x3,0x33,0x59, 0x2,0x32,0x4c, 0x3,0x33,0x5f, + 0x2,0x32,0x42, 0x3,0x38,0x5b, 0x2,0x32,0x4b, 0x2,0x32,0x3c, + 0x2,0x32,0x40, 0x2,0x32,0x57, 0x1,0x58,0x23, 0x2,0x32,0x4f, + 0x2,0x32,0x46, 0x1,0x57,0x71, 0x2,0x32,0x55, 0x2,0x32,0x38, + 0x4,0x2f,0x5a, 0x2,0x32,0x4e, 0x4,0x2f,0x63, 0x1,0x58,0x22, + 0x1,0x57,0x7b, 0x2,0x32,0x37, 0x1,0x57,0x79, 0x1,0x57,0x78, + 0x1,0x57,0x7d, 0x2,0x32,0x4d, 0x1,0x57,0x75, 0x1,0x57,0x7c, + 0x2,0x2d,0x35, 0x2,0x3f,0x41, 0x2,0x32,0x48, 0x4,0x2f,0x5f, + 0x3,0x2a,0x5f, 0x2,0x32,0x3e, 0x1,0x58,0x21, 0x2,0x32,0x3f, + 0x2,0x32,0x43, 0x1,0x58,0x24, 0x2,0x32,0x39, 0x2,0x32,0x51, + 0x3,0x3e,0x57, 0x2,0x32,0x50, 0x2,0x32,0x58, 0x1,0x57,0x77, + 0x1,0x57,0x74, 0x2,0x32,0x56, 0x2,0x32,0x52, 0x2,0x32,0x49, + 0x2,0x32,0x44, 0x1,0x57,0x7a, 0x1,0x57,0x76, 0x2,0x32,0x3b, + 0x1,0x57,0x72, 0x2,0x32,0x53, 0x1,0x57,0x73, 0x4,0x2f,0x5c, + 0x2,0x32,0x3d, 0x3,0x33,0x5a, 0x3,0x33,0x63, 0x3,0x66,0x36, + 0x3,0x2d,0x33, 0x4,0x34,0x67, 0x3,0x38,0x4e, 0x3,0x38,0x51, + 0x2,0x38,0x62, 0x2,0x38,0x64, 0x2,0x38,0x69, 0x2,0x38,0x7d, + 0x1,0x5d,0x23, 0x1,0x5c,0x77, 0x3,0x38,0x54, 0x2,0x38,0x61, + 0x1,0x5d,0x24, 0x1,0x5d,0x25, 0x2,0x38,0x6c, 0x2,0x38,0x73, + 0x2,0x38,0x79, 0x3,0x38,0x50, 0x2,0x38,0x66, 0x4,0x34,0x6d, + 0x2,0x38,0x6d, 0x3,0x38,0x4f, 0x3,0x38,0x5d, 0x1,0x5d,0x26, + 0x2,0x38,0x7b, 0x2,0x38,0x76, 0x1,0x5d,0x21, 0x1,0x5c,0x7d, + 0x2,0x38,0x72, 0x2,0x38,0x6e, 0x2,0x38,0x60, 0x1,0x5c,0x74, + 0x2,0x38,0x65, 0x2,0x38,0x5d, 0x3,0x38,0x55, 0x1,0x5c,0x7c, + 0x1,0x5c,0x7e, 0x2,0x38,0x6a, 0x2,0x38,0x67, 0x1,0x5c,0x79, + 0x2,0x38,0x77, 0x1,0x5c,0x76, 0x2,0x38,0x68, 0x2,0x3f,0x6a, + 0x2,0x38,0x70, 0x3,0x38,0x5e, 0x2,0x38,0x6f, 0x1,0x5c,0x75, + 0x3,0x38,0x57, 0x1,0x5d,0x22, 0x3,0x38,0x52, 0x1,0x5c,0x78, + 0x2,0x38,0x5e, 0x2,0x38,0x63, 0x2,0x38,0x74, 0x2,0x38,0x7a, + 0x1,0x5d,0x27, 0x2,0x38,0x5f, 0x2,0x38,0x6b, 0x2,0x38,0x71, + 0x1,0x5c,0x7b, 0x4,0x34,0x6f, 0x3,0x38,0x58, 0x2,0x38,0x7c, + 0x2,0x38,0x75, 0x2,0x38,0x78, 0x3,0x38,0x5f, 0xf,0x37,0x78, + 0x1,0x5c,0x7a, 0x4,0x3a,0x68, 0x2,0x3f,0x51, 0x2,0x3f,0x45, + 0x1,0x61,0x5d, 0x2,0x3f,0x62, 0x2,0x3f,0x6b, 0x2,0x3f,0x6e, + 0x1,0x61,0x5b, 0x2,0x3f,0x4d, 0x2,0x3f,0x66, 0x2,0x3f,0x4e, + 0x2,0x3f,0x5c, 0x1,0x61,0x68, 0x2,0x3f,0x58, 0x1,0x61,0x65, + 0x3,0x3e,0x5e, 0x2,0x3f,0x59, 0x2,0x3f,0x42, 0x5,0x3b,0x6f, + 0x2,0x3f,0x67, 0x3,0x3e,0x4f, 0x3,0x3e,0x59, 0x1,0x61,0x6e, + 0x2,0x3f,0x64, 0x2,0x3f,0x5a, 0x2,0x3f,0x70, 0x2,0x3f,0x55, + 0x2,0x46,0x6d, 0x3,0x3e,0x4d, 0x2,0x3f,0x73, 0x1,0x61,0x6c, + 0x2,0x3f,0x53, 0x2,0x3f,0x5f, 0x1,0x61,0x6f, 0x1,0x61,0x5a, + 0x2,0x3f,0x57, 0x2,0x3f,0x71, 0x2,0x3f,0x50, 0x2,0x3f,0x49, + 0x2,0x3f,0x54, 0x3,0x3e,0x5f, 0x2,0x3f,0x48, 0x2,0x3f,0x46, + 0x1,0x61,0x56, 0x2,0x3f,0x68, 0x2,0x3f,0x4f, 0x2,0x3f,0x6c, + 0x3,0x3e,0x4b, 0x2,0x3f,0x6d, 0x1,0x61,0x5e, 0x1,0x61,0x63, + 0x1,0x61,0x5f, 0x1,0x61,0x67, 0x2,0x3f,0x63, 0x1,0x61,0x60, + 0x2,0x3f,0x5b, 0x2,0x3f,0x4b, 0xf,0x3e,0x66, 0x1,0x61,0x58, + 0x2,0x3f,0x43, 0x2,0x3f,0x65, 0x2,0x3f,0x6f, 0x2,0x3f,0x4a, + 0x1,0x61,0x66, 0x2,0x3f,0x74, 0x2,0x3f,0x56, 0x3,0x3e,0x52, + 0x2,0x3f,0x52, 0x3,0x3e,0x5c, 0x1,0x61,0x57, 0x1,0x61,0x6b, + 0x3,0x3e,0x5a, 0x2,0x3f,0x61, 0x1,0x61,0x6d, 0x3,0x3e,0x50, + 0x2,0x3f,0x5d, 0x1,0x61,0x62, 0x1,0x61,0x5c, 0x1,0x61,0x64, + 0x1,0x61,0x59, 0x1,0x61,0x6a, 0x2,0x3f,0x5e, 0x2,0x3f,0x4c, + 0x2,0x3f,0x60, 0x2,0x3f,0x47, 0x2,0x3f,0x69, 0x3,0x3e,0x58, + 0x4,0x3a,0x67, 0x3,0x3e,0x5d, 0x3,0x3e,0x56, 0x3,0x3e,0x4e, + 0x2,0x3f,0x72, 0x3,0x66,0x39, 0x3,0x3e,0x5b, 0x3,0x66,0x38, + 0x2,0x3f,0x44, 0x2,0x46,0x6c, 0x3,0x44,0x2d, 0x2,0x47,0x24, + 0x1,0x65,0x5c, 0x2,0x46,0x71, 0x3,0x44,0x31, 0x2,0x46,0x6f, + 0x2,0x46,0x5a, 0x1,0x66,0x30, 0x2,0x46,0x6a, 0x2,0x46,0x7e, + 0x2,0x46,0x66, 0x1,0x66,0x38, 0x2,0x46,0x7d, 0x2,0x46,0x64, + 0x1,0x61,0x69, 0x2,0x46,0x74, 0x2,0x46,0x65, 0x2,0x46,0x7b, + 0x1,0x66,0x37, 0x1,0x66,0x2f, 0x3,0x44,0x3a, 0x2,0x46,0x4f, + 0x2,0x46,0x57, 0x3,0x44,0x35, 0x2,0x46,0x70, 0x2,0x46,0x68, + 0x2,0x47,0x23, 0x2,0x46,0x6b, 0x1,0x66,0x3d, 0x2,0x46,0x7c, + 0x3,0x44,0x2c, 0x1,0x66,0x34, 0x3,0x44,0x3e, 0x2,0x46,0x6e, + 0x2,0x46,0x76, 0x2,0x46,0x5b, 0x2,0x46,0x75, 0x3,0x44,0x27, + 0x2,0x47,0x28, 0x2,0x46,0x56, 0x2,0x46,0x77, 0x3,0x44,0x33, + 0x2,0x47,0x26, 0x3,0x44,0x3f, 0x2,0x46,0x50, 0x1,0x61,0x61, + 0x3,0x44,0x40, 0x2,0x46,0x5e, 0x2,0x46,0x5d, 0x1,0x66,0x36, + 0x3,0x44,0x32, 0x2,0x46,0x61, 0x2,0x46,0x63, 0x2,0x46,0x72, + 0x2,0x47,0x25, 0x1,0x66,0x39, 0x3,0x44,0x38, 0x1,0x66,0x3a, + 0x3,0x44,0x30, 0x2,0x46,0x55, 0x1,0x66,0x32, 0x2,0x46,0x59, + 0x2,0x47,0x21, 0x1,0x66,0x3b, 0x4,0x40,0x44, 0x1,0x66,0x33, + 0x1,0x66,0x35, 0x1,0x66,0x3c, 0x2,0x47,0x27, 0x2,0x46,0x78, + 0x2,0x46,0x73, 0x3,0x44,0x3c, 0x3,0x44,0x2f, 0x2,0x46,0x60, + 0x2,0x46,0x5f, 0x1,0x66,0x31, 0x2,0x46,0x51, 0x1,0x66,0x2e, + 0x2,0x46,0x69, 0x2,0x46,0x52, 0x2,0x46,0x67, 0x3,0x44,0x2e, + 0x4,0x40,0x41, 0x2,0x46,0x5c, 0x2,0x47,0x22, 0x3,0x44,0x2a, + 0x3,0x44,0x39, 0x4,0x40,0x36, 0x1,0x66,0x2d, 0x3,0x44,0x3b, + 0x3,0x44,0x28, 0x2,0x46,0x58, 0x4,0x40,0x46, 0x2,0x46,0x54, + 0x2,0x46,0x7a, 0x2,0x46,0x53, 0x1,0x6a,0x68, 0x2,0x4d,0x5a, + 0x3,0x49,0x35, 0x3,0x49,0x44, 0x2,0x4d,0x49, 0x3,0x49,0x33, + 0x3,0x49,0x38, 0x2,0x4d,0x33, 0x2,0x4d,0x51, 0x1,0x6a,0x60, + 0x2,0x4d,0x42, 0x2,0x4d,0x4c, 0x1,0x6a,0x63, 0x2,0x4d,0x45, + 0x1,0x6a,0x61, 0x2,0x4d,0x36, 0x2,0x4d,0x54, 0x2,0x4d,0x35, + 0x2,0x4d,0x48, 0x3,0x49,0x3c, 0x2,0x4d,0x34, 0x3,0x49,0x39, + 0x4,0x46,0x6c, 0x2,0x4d,0x46, 0x2,0x4d,0x4f, 0x2,0x4d,0x4d, + 0x2,0x4d,0x41, 0x2,0x4d,0x3c, 0x2,0x4d,0x3a, 0x3,0x49,0x42, + 0x2,0x4d,0x3b, 0x2,0x4d,0x4e, 0x2,0x4d,0x59, 0x2,0x4d,0x43, + 0x1,0x6a,0x62, 0x3,0x49,0x3b, 0x2,0x4d,0x3e, 0x3,0x49,0x3a, + 0x2,0x4d,0x52, 0x3,0x49,0x41, 0x1,0x6a,0x65, 0x2,0x4d,0x3d, + 0x2,0x4d,0x37, 0x2,0x4d,0x47, 0x1,0x6a,0x69, 0x3,0x49,0x32, + 0x4,0x46,0x58, 0x1,0x6a,0x5d, 0x1,0x6a,0x66, 0x2,0x4d,0x3f, + 0x2,0x4d,0x39, 0x3,0x49,0x36, 0x1,0x6a,0x5f, 0x2,0x46,0x79, + 0x1,0x6a,0x5e, 0x2,0x4d,0x4a, 0x3,0x44,0x36, 0x1,0x6a,0x5c, + 0x1,0x6a,0x6b, 0x1,0x6a,0x64, 0x2,0x4d,0x4b, 0x2,0x4d,0x40, + 0x2,0x4d,0x38, 0x2,0x4d,0x53, 0x2,0x4d,0x44, 0x1,0x6a,0x6a, + 0x2,0x4d,0x57, 0x1,0x6a,0x67, 0x2,0x4d,0x56, 0x3,0x49,0x3f, + 0x2,0x4d,0x50, 0x2,0x4d,0x55, 0x3,0x49,0x3e, 0x3,0x49,0x43, + 0x2,0x4d,0x58, 0x3,0x66,0x3b, 0x3,0x66,0x3c, 0x3,0x66,0x3a, + 0x3,0x49,0x3d, 0x2,0x53,0x5c, 0x2,0x53,0x5d, 0x2,0x53,0x50, + 0x2,0x53,0x4f, 0x2,0x53,0x4b, 0x1,0x6e,0x5d, 0x3,0x4e,0x4f, + 0x1,0x6e,0x55, 0x2,0x53,0x5f, 0x2,0x53,0x5e, 0x2,0x46,0x4e, + 0x2,0x53,0x48, 0x2,0x53,0x4c, 0x2,0x53,0x46, 0x3,0x4e,0x44, + 0x2,0x53,0x59, 0x2,0x53,0x4a, 0x3,0x4e,0x42, 0x2,0x53,0x60, + 0x2,0x53,0x43, 0x2,0x53,0x41, 0x2,0x53,0x4d, 0x2,0x53,0x57, + 0x2,0x53,0x52, 0x1,0x6e,0x5f, 0x2,0x53,0x38, 0x3,0x4e,0x40, + 0x2,0x53,0x56, 0x3,0x4e,0x4c, 0x3,0x4e,0x46, 0x3,0x4e,0x54, + 0x1,0x6e,0x60, 0x2,0x46,0x62, 0x2,0x53,0x44, 0x2,0x53,0x3b, + 0x2,0x53,0x3e, 0x2,0x53,0x64, 0x2,0x53,0x45, 0x2,0x53,0x3c, + 0x2,0x53,0x3a, 0x2,0x53,0x37, 0x4,0x4c,0x7a, 0x1,0x6e,0x59, + 0x2,0x53,0x4e, 0x1,0x6e,0x58, 0x1,0x6e,0x5c, 0x2,0x53,0x49, + 0x2,0x53,0x51, 0x1,0x6e,0x52, 0x2,0x53,0x61, 0x2,0x53,0x65, + 0x1,0x6e,0x54, 0x3,0x4e,0x4b, 0x2,0x53,0x40, 0x2,0x53,0x54, + 0x2,0x53,0x58, 0x2,0x53,0x3d, 0x2,0x53,0x62, 0x1,0x6e,0x5b, + 0x4,0x4c,0x6a, 0x1,0x6e,0x5a, 0x2,0x53,0x35, 0x1,0x6e,0x5e, + 0x2,0x53,0x5b, 0x2,0x53,0x3f, 0x2,0x53,0x53, 0x2,0x53,0x39, + 0x2,0x53,0x47, 0x2,0x53,0x42, 0x1,0x6e,0x56, 0x1,0x6e,0x57, + 0x2,0x53,0x55, 0x2,0x53,0x66, 0x2,0x53,0x63, 0x2,0x53,0x5a, + 0x4,0x4c,0x78, 0x3,0x4e,0x4d, 0x3,0x4e,0x4e, 0x3,0x4e,0x52, + 0x4,0x4c,0x74, 0x2,0x53,0x36, 0x1,0x6e,0x53, 0x2,0x59,0x74, + 0x3,0x52,0x5a, 0x2,0x59,0x6b, 0x2,0x59,0x6e, 0x3,0x52,0x52, + 0x1,0x72,0x25, 0x2,0x59,0x70, 0x2,0x59,0x65, 0x2,0x59,0x6c, + 0x2,0x59,0x72, 0x1,0x72,0x22, 0x1,0x72,0x26, 0x1,0x71,0x7e, + 0x3,0x52,0x59, 0x3,0x52,0x50, 0x2,0x59,0x67, 0x2,0x59,0x77, + 0x4,0x4d,0x25, 0x4,0x53,0x33, 0x2,0x59,0x71, 0x4,0x53,0x24, + 0x2,0x59,0x68, 0x2,0x5a,0x22, 0x2,0x59,0x7a, 0x2,0x59,0x64, + 0x2,0x5e,0x72, 0x2,0x59,0x6a, 0x1,0x72,0x21, 0x3,0x52,0x58, + 0x2,0x59,0x75, 0x3,0x52,0x54, 0x2,0x5a,0x21, 0x1,0x72,0x29, + 0x3,0x52,0x56, 0x2,0x59,0x7c, 0x2,0x59,0x69, 0x2,0x59,0x6f, + 0x2,0x59,0x73, 0x2,0x59,0x6d, 0x2,0x5a,0x23, 0x2,0x59,0x7e, + 0x2,0x59,0x7b, 0x1,0x72,0x23, 0x1,0x72,0x24, 0x1,0x72,0x28, + 0x2,0x59,0x66, 0x2,0x5a,0x24, 0x1,0x72,0x27, 0x2,0x59,0x78, + 0x3,0x52,0x4f, 0x3,0x52,0x55, 0x2,0x59,0x76, 0x3,0x66,0x3d, + 0x2,0x59,0x79, 0x2,0x5f,0x21, 0x2,0x5e,0x6c, 0x2,0x5e,0x71, + 0x2,0x5e,0x7e, 0x2,0x5e,0x70, 0x2,0x5e,0x68, 0x2,0x5e,0x6d, + 0x4,0x58,0x3e, 0x1,0x75,0x2c, 0x3,0x56,0x2b, 0x2,0x5e,0x61, + 0x2,0x5e,0x79, 0x2,0x5e,0x7b, 0x2,0x5e,0x60, 0x1,0x75,0x2b, + 0x2,0x5e,0x7d, 0x2,0x5e,0x75, 0x1,0x75,0x32, 0x2,0x5e,0x7c, + 0x2,0x5e,0x6e, 0x1,0x75,0x34, 0x2,0x5e,0x66, 0x2,0x59,0x7d, + 0x2,0x5e,0x76, 0x2,0x5e,0x73, 0x2,0x5e,0x62, 0x2,0x5f,0x23, + 0x1,0x75,0x2e, 0x3,0x56,0x28, 0x3,0x56,0x29, 0x1,0x75,0x2f, + 0x2,0x5e,0x64, 0x2,0x5e,0x74, 0x3,0x56,0x2d, 0x2,0x5f,0x22, + 0x2,0x5e,0x77, 0x2,0x5e,0x6a, 0x1,0x75,0x31, 0x1,0x75,0x2d, + 0x2,0x5e,0x78, 0x2,0x5e,0x6b, 0x2,0x5f,0x24, 0x2,0x5e,0x65, + 0x2,0x5e,0x6f, 0x2,0x5e,0x7a, 0x2,0x5e,0x67, 0x2,0x5e,0x69, + 0x4,0x58,0x40, 0x1,0x75,0x35, 0x2,0x5e,0x63, 0x1,0x75,0x33, + 0x1,0x77,0x30, 0x1,0x75,0x2a, 0x3,0x56,0x2c, 0x3,0x56,0x30, + 0x1,0x75,0x30, 0x1,0x77,0x34, 0x2,0x62,0x7d, 0x3,0x58,0x6c, + 0x2,0x62,0x73, 0x2,0x62,0x6e, 0x2,0x62,0x74, 0x2,0x62,0x7e, + 0x2,0x63,0x24, 0x2,0x63,0x23, 0x1,0x77,0x36, 0x1,0x77,0x35, + 0x3,0x58,0x6e, 0x4,0x5d,0x2c, 0x2,0x62,0x75, 0x2,0x63,0x25, + 0x2,0x62,0x78, 0x2,0x62,0x70, 0x3,0x58,0x6f, 0x2,0x62,0x72, + 0x2,0x62,0x71, 0x2,0x62,0x77, 0x2,0x62,0x7c, 0x2,0x62,0x6f, + 0x2,0x62,0x76, 0x2,0x62,0x7b, 0x1,0x77,0x33, 0x4,0x5d,0x28, + 0x2,0x62,0x79, 0x3,0x58,0x6b, 0x1,0x77,0x31, 0x2,0x62,0x7a, + 0x1,0x77,0x2f, 0x1,0x77,0x32, 0x2,0x66,0x60, 0x2,0x63,0x21, + 0x3,0x66,0x3e, 0x1,0x78,0x6d, 0x3,0x5a,0x7e, 0x2,0x66,0x58, + 0x2,0x66,0x5c, 0x2,0x66,0x54, 0x2,0x66,0x57, 0x3,0x5a,0x7d, + 0x2,0x66,0x5f, 0x1,0x78,0x6b, 0x2,0x66,0x64, 0x2,0x66,0x5d, + 0x4,0x60,0x7a, 0x2,0x66,0x55, 0x2,0x66,0x65, 0x2,0x66,0x5e, + 0x1,0x78,0x6e, 0x1,0x78,0x6f, 0x2,0x66,0x62, 0x3,0x5b,0x22, + 0x2,0x66,0x56, 0x1,0x78,0x6a, 0x1,0x78,0x6c, 0x2,0x66,0x51, + 0x2,0x66,0x59, 0x2,0x66,0x53, 0x3,0x5c,0x7b, 0x2,0x66,0x63, + 0x2,0x66,0x61, 0x2,0x66,0x52, 0x2,0x66,0x5a, 0x4,0x60,0x7b, + 0x3,0x5b,0x25, 0x3,0x66,0x3f, 0x2,0x69,0x6a, 0x1,0x78,0x70, + 0x2,0x66,0x5b, 0x1,0x7a,0x32, 0x1,0x7a,0x34, 0x1,0x7a,0x31, + 0x3,0x5c,0x76, 0x2,0x69,0x6f, 0x2,0x69,0x67, 0x2,0x69,0x65, + 0x2,0x69,0x69, 0x2,0x69,0x66, 0x3,0x5c,0x78, 0x3,0x5c,0x7c, + 0x2,0x69,0x6b, 0x2,0x69,0x6d, 0x1,0x7a,0x35, 0x1,0x7a,0x37, + 0x3,0x5d,0x22, 0x2,0x69,0x6c, 0x1,0x7a,0x38, 0x1,0x7a,0x36, + 0x2,0x69,0x6e, 0x3,0x5c,0x7e, 0x4,0x64,0x37, 0x3,0x5d,0x23, + 0x3,0x5c,0x77, 0x1,0x7a,0x33, 0x3,0x5d,0x21, 0x3,0x5e,0x5b, + 0x3,0x5e,0x5a, 0x1,0x7b,0x21, 0x2,0x6c,0x21, 0x2,0x6c,0x27, + 0x1,0x7b,0x23, 0x2,0x69,0x68, 0x2,0x6c,0x26, 0x3,0x5e,0x5c, + 0x2,0x6c,0x2d, 0x2,0x6c,0x24, 0x2,0x6c,0x2b, 0x2,0x6c,0x2a, + 0x2,0x69,0x64, 0x2,0x6c,0x25, 0x2,0x63,0x22, 0x2,0x6c,0x2e, + 0x2,0x6c,0x23, 0x2,0x6c,0x28, 0x3,0x5e,0x58, 0x2,0x6c,0x2c, + 0x2,0x6c,0x22, 0x3,0x5e,0x56, 0x2,0x6d,0x77, 0x1,0x7b,0x22, + 0x2,0x6c,0x29, 0x3,0x5e,0x57, 0x2,0x6f,0x43, 0x2,0x6d,0x78, + 0x2,0x6d,0x76, 0x2,0x6d,0x74, 0x2,0x6d,0x75, 0x2,0x6d,0x79, + 0x3,0x66,0x40, 0x1,0x7c,0x45, 0x2,0x6f,0x41, 0x2,0x6f,0x3f, + 0x2,0x6f,0x44, 0x2,0x6f,0x42, 0x3,0x60,0x43, 0x2,0x6f,0x45, + 0x1,0x7c,0x46, 0x2,0x6f,0x40, 0x3,0x60,0x2f, 0x3,0x61,0x46, + 0x2,0x70,0x4a, 0x3,0x66,0x41, 0x2,0x71,0x34, 0x2,0x71,0x35, + 0x2,0x71,0x36, 0x3,0x61,0x47, 0x3,0x61,0x7c, 0x2,0x72,0x35, + 0x2,0x72,0x2d, 0x2,0x22,0x6f, 0x1,0x4f,0x4d, 0x1,0x53,0x4b, + 0x4,0x2f,0x68, 0x2,0x32,0x5a, 0x2,0x32,0x59, 0x1,0x58,0x25, + 0x1,0x5d,0x28, 0x2,0x39,0x21, 0x3,0x38,0x63, 0x3,0x38,0x60, + 0x2,0x38,0x7e, 0x3,0x38,0x61, 0x1,0x61,0x70, 0x1,0x66,0x3f, + 0x3,0x3e,0x61, 0x1,0x66,0x3e, 0x1,0x66,0x40, 0x5,0x49,0x4e, + 0x2,0x4d,0x5b, 0x2,0x53,0x67, 0x2,0x5a,0x25, 0x2,0x5a,0x27, + 0x2,0x5a,0x26, 0x7,0x32,0x61, 0x1,0x75,0x36, 0x2,0x5f,0x25, + 0x2,0x63,0x26, 0x2,0x71,0x73, 0x1,0x48,0x65, 0x3,0x27,0x2d, + 0x2,0x28,0x69, 0x2,0x28,0x6a, 0x2,0x28,0x68, 0x2,0x28,0x67, + 0x1,0x4f,0x4e, 0x3,0x66,0x42, 0x2,0x2d,0x4a, 0x2,0x2d,0x48, + 0x3,0x2f,0x23, 0x3,0x2e,0x7c, 0x2,0x2d,0x47, 0x3,0x2e,0x7e, + 0x1,0x53,0x4c, 0x1,0x53,0x4e, 0x1,0x53,0x4d, 0x2,0x2d,0x49, + 0x3,0x2f,0x24, 0xf,0x2d,0x3e, 0x3,0x33,0x69, 0x2,0x32,0x66, + 0x2,0x32,0x63, 0x2,0x32,0x61, 0x4,0x2f,0x6d, 0x3,0x33,0x6c, + 0x1,0x58,0x26, 0x2,0x32,0x64, 0x1,0x58,0x2b, 0x2,0x32,0x5e, + 0x2,0x32,0x6d, 0x3,0x33,0x6f, 0x2,0x32,0x6f, 0x2,0x32,0x5f, + 0x3,0x33,0x6e, 0x1,0x58,0x28, 0x2,0x32,0x70, 0x2,0x32,0x6b, + 0x2,0x32,0x5d, 0x2,0x32,0x62, 0x2,0x32,0x6c, 0x2,0x32,0x68, + 0x2,0x32,0x65, 0x3,0x33,0x6b, 0x1,0x58,0x2d, 0x2,0x32,0x6e, + 0x2,0x32,0x60, 0x3,0x33,0x6a, 0x3,0x33,0x70, 0x2,0x32,0x69, + 0x2,0x32,0x5b, 0x1,0x58,0x2c, 0x1,0x58,0x29, 0x2,0x32,0x67, + 0x3,0x33,0x6d, 0x2,0x32,0x6a, 0x2,0x32,0x5c, 0x1,0x58,0x2a, + 0x1,0x58,0x27, 0x4,0x34,0x7a, 0x3,0x38,0x66, 0x1,0x5d,0x32, + 0x2,0x39,0x28, 0x1,0x5d,0x31, 0x3,0x38,0x64, 0x2,0x39,0x2b, + 0x2,0x39,0x2e, 0x1,0x5d,0x2e, 0x1,0x5d,0x2c, 0x2,0x39,0x23, + 0x2,0x39,0x2c, 0x2,0x39,0x2a, 0x2,0x39,0x27, 0x2,0x39,0x2f, + 0x2,0x39,0x30, 0x2,0x39,0x32, 0x2,0x39,0x33, 0x2,0x39,0x22, + 0x1,0x5d,0x2b, 0x2,0x39,0x25, 0x2,0x39,0x24, 0x2,0x39,0x31, + 0x1,0x5d,0x2d, 0x2,0x39,0x26, 0x1,0x5d,0x2f, 0x1,0x5d,0x2a, + 0x2,0x39,0x29, 0x1,0x5d,0x33, 0x4,0x35,0x26, 0x1,0x5d,0x30, + 0x2,0x39,0x2d, 0xf,0x38,0x3a, 0x1,0x61,0x77, 0x2,0x40,0x25, + 0x4,0x3a,0x71, 0x2,0x3f,0x78, 0x1,0x61,0x74, 0x3,0x3e,0x62, + 0x2,0x47,0x2e, 0x2,0x40,0x23, 0x2,0x3f,0x75, 0x1,0x61,0x72, + 0x2,0x3f,0x7a, 0x1,0x61,0x75, 0x2,0x3f,0x7e, 0x2,0x3f,0x7c, + 0x1,0x61,0x78, 0x1,0x61,0x71, 0x4,0x3a,0x76, 0x3,0x3e,0x63, + 0x2,0x3f,0x76, 0x2,0x3f,0x79, 0x1,0x61,0x76, 0x4,0x3a,0x6f, + 0x2,0x3f,0x77, 0x5,0x3b,0x7b, 0x2,0x40,0x24, 0x2,0x40,0x22, + 0x2,0x3f,0x7b, 0x2,0x3f,0x7d, 0x2,0x40,0x21, 0x1,0x61,0x73, + 0x3,0x3e,0x68, 0x2,0x47,0x2f, 0x2,0x47,0x35, 0x2,0x47,0x2b, + 0x2,0x47,0x31, 0x1,0x66,0x41, 0x2,0x47,0x2d, 0x1,0x66,0x47, + 0x3,0x44,0x44, 0x3,0x44,0x45, 0x1,0x66,0x46, 0x3,0x44,0x49, + 0x1,0x66,0x45, 0x2,0x47,0x34, 0x1,0x66,0x48, 0x1,0x66,0x49, + 0x2,0x47,0x2a, 0x2,0x47,0x37, 0x1,0x66,0x4a, 0x1,0x66,0x44, + 0x1,0x66,0x43, 0x2,0x47,0x33, 0x1,0x66,0x4b, 0x2,0x47,0x29, + 0x2,0x47,0x2c, 0x2,0x47,0x36, 0x2,0x47,0x32, 0x4,0x40,0x59, + 0x4,0x40,0x52, 0x2,0x4d,0x7b, 0x2,0x4d,0x70, 0x1,0x66,0x42, + 0x5,0x42,0x5d, 0x3,0x44,0x46, 0x3,0x44,0x48, 0x1,0x6a,0x72, + 0x2,0x4d,0x64, 0x2,0x4d,0x79, 0x2,0x4d,0x65, 0x1,0x6a,0x6d, + 0x3,0x49,0x4f, 0x2,0x4d,0x62, 0x4,0x40,0x55, 0x2,0x4d,0x6b, + 0x2,0x4d,0x63, 0x1,0x6a,0x6f, 0x2,0x4d,0x5d, 0x2,0x4d,0x78, + 0x1,0x6a,0x70, 0x2,0x4d,0x75, 0x2,0x4d,0x76, 0x2,0x4d,0x5e, + 0x1,0x6a,0x75, 0x2,0x4d,0x6d, 0x3,0x49,0x4a, 0x2,0x4d,0x67, + 0x2,0x4d,0x6e, 0x2,0x4d,0x61, 0x4,0x46,0x7e, 0x2,0x4d,0x7a, + 0x2,0x4d,0x72, 0x2,0x4d,0x6c, 0x2,0x4d,0x5c, 0x1,0x6a,0x71, + 0x2,0x4d,0x73, 0x3,0x49,0x45, 0x1,0x6a,0x74, 0x2,0x4d,0x77, + 0x3,0x49,0x4c, 0x2,0x4d,0x71, 0x1,0x6a,0x6e, 0x2,0x4d,0x6f, + 0x3,0x49,0x49, 0x2,0x4d,0x69, 0x1,0x6a,0x6c, 0x2,0x4d,0x60, + 0x2,0x4d,0x68, 0x2,0x4d,0x74, 0x2,0x4d,0x66, 0xf,0x4c,0x33, + 0x3,0x49,0x4e, 0x2,0x4d,0x6a, 0x3,0x49,0x4b, 0x3,0x66,0x43, + 0x1,0x6e,0x6a, 0x2,0x47,0x30, 0x2,0x53,0x79, 0x2,0x54,0x24, + 0x2,0x53,0x78, 0x2,0x53,0x74, 0x2,0x53,0x71, 0x1,0x6e,0x6b, + 0x2,0x53,0x6f, 0x1,0x6a,0x73, 0x2,0x53,0x68, 0x1,0x6e,0x69, + 0x2,0x53,0x6e, 0x1,0x6e,0x68, 0x2,0x53,0x73, 0x2,0x53,0x70, + 0x2,0x54,0x22, 0x2,0x53,0x7b, 0x2,0x53,0x75, 0x2,0x53,0x7a, + 0x1,0x6e,0x64, 0x2,0x53,0x72, 0x2,0x54,0x27, 0x2,0x53,0x69, + 0x2,0x53,0x6a, 0x2,0x54,0x23, 0x1,0x6e,0x65, 0x2,0x54,0x28, + 0x1,0x6e,0x67, 0x2,0x54,0x29, 0x2,0x53,0x77, 0x2,0x4d,0x5f, + 0x2,0x53,0x7d, 0x2,0x53,0x76, 0x2,0x54,0x21, 0x2,0x53,0x7c, + 0x5,0x50,0x55, 0x3,0x4e,0x5d, 0x4,0x4d,0x28, 0x2,0x53,0x6d, + 0x1,0x6e,0x62, 0x2,0x54,0x26, 0x1,0x6e,0x63, 0x2,0x53,0x6b, + 0x1,0x6e,0x66, 0x2,0x5a,0x32, 0x2,0x53,0x7e, 0x2,0x54,0x25, + 0x4,0x4d,0x31, 0x3,0x4e,0x59, 0x2,0x5a,0x2f, 0x1,0x6e,0x61, + 0x1,0x72,0x2a, 0x2,0x5a,0x39, 0x2,0x5a,0x35, 0x4,0x53,0x3c, + 0x2,0x5a,0x33, 0x2,0x5a,0x2e, 0x2,0x5a,0x3d, 0x3,0x52,0x5b, + 0x3,0x52,0x5d, 0x4,0x53,0x44, 0x1,0x72,0x2e, 0x3,0x52,0x5f, + 0x2,0x5a,0x2a, 0x2,0x5a,0x36, 0x2,0x5a,0x37, 0x2,0x5a,0x2d, + 0x2,0x5a,0x2c, 0x2,0x5a,0x3a, 0x4,0x53,0x41, 0x2,0x5a,0x30, + 0x2,0x5a,0x2b, 0x2,0x5a,0x31, 0x3,0x52,0x62, 0x2,0x5a,0x3c, + 0x2,0x5a,0x29, 0x2,0x5a,0x3b, 0x2,0x5a,0x38, 0x1,0x72,0x2c, + 0x1,0x72,0x2b, 0x4,0x53,0x39, 0x3,0x52,0x5e, 0x1,0x72,0x2d, + 0x2,0x5a,0x34, 0x2,0x5a,0x28, 0x3,0x66,0x45, 0x3,0x66,0x44, + 0x2,0x5f,0x27, 0x1,0x75,0x3c, 0x2,0x5f,0x2b, 0x2,0x5f,0x28, + 0x2,0x5f,0x2f, 0x2,0x5f,0x35, 0x2,0x5f,0x2a, 0x3,0x56,0x3a, + 0x2,0x5f,0x3e, 0x1,0x75,0x39, 0x2,0x5f,0x38, 0x2,0x5f,0x2d, + 0x2,0x5f,0x39, 0x2,0x5f,0x34, 0x2,0x5f,0x3b, 0x2,0x5f,0x2c, + 0x1,0x75,0x3e, 0x1,0x75,0x3d, 0x2,0x5f,0x2e, 0x2,0x5f,0x3c, + 0x2,0x5f,0x26, 0x2,0x5f,0x3a, 0x1,0x75,0x37, 0x3,0x56,0x39, + 0x2,0x5f,0x32, 0x2,0x5f,0x31, 0x2,0x5f,0x36, 0x2,0x5f,0x29, + 0x1,0x75,0x3b, 0x3,0x56,0x3b, 0x1,0x75,0x3f, 0x2,0x5f,0x30, + 0x2,0x5f,0x37, 0x1,0x75,0x40, 0x2,0x5f,0x33, 0x3,0x56,0x36, + 0x3,0x56,0x34, 0x1,0x75,0x38, 0x1,0x75,0x3a, 0x2,0x63,0x33, + 0x2,0x63,0x31, 0x3,0x5b,0x28, 0x3,0x58,0x76, 0x2,0x63,0x37, + 0x2,0x63,0x35, 0x2,0x63,0x38, 0x3,0x58,0x78, 0x2,0x63,0x2a, + 0x2,0x63,0x32, 0x2,0x63,0x3c, 0x2,0x5f,0x3d, 0x2,0x63,0x2e, + 0x1,0x77,0x3a, 0x2,0x53,0x6c, 0x2,0x63,0x29, 0x2,0x63,0x36, + 0x2,0x63,0x30, 0x2,0x63,0x2d, 0x2,0x63,0x28, 0x2,0x63,0x27, + 0x2,0x63,0x3b, 0x3,0x58,0x73, 0x2,0x63,0x2c, 0x2,0x63,0x2b, + 0x1,0x77,0x38, 0x2,0x63,0x34, 0x3,0x58,0x74, 0x1,0x77,0x37, + 0x3,0x58,0x75, 0x5,0x64,0x48, 0x1,0x77,0x39, 0x2,0x63,0x2f, + 0x2,0x63,0x3a, 0x3,0x66,0x46, 0x2,0x66,0x69, 0x2,0x66,0x6a, + 0x3,0x5b,0x2c, 0x1,0x78,0x74, 0x2,0x66,0x67, 0x1,0x78,0x71, + 0x2,0x66,0x6f, 0x3,0x5b,0x27, 0x1,0x78,0x75, 0x2,0x66,0x71, + 0x2,0x66,0x66, 0x2,0x63,0x39, 0x2,0x66,0x73, 0x2,0x66,0x68, + 0x5,0x69,0x43, 0x1,0x78,0x72, 0x2,0x66,0x6e, 0x3,0x5b,0x29, + 0x2,0x66,0x70, 0x2,0x66,0x6b, 0x2,0x66,0x72, 0x2,0x66,0x6d, + 0x2,0x66,0x6c, 0x1,0x78,0x73, 0x3,0x58,0x77, 0x3,0x5b,0x2b, + 0x2,0x69,0x71, 0x2,0x69,0x72, 0x3,0x5d,0x25, 0x2,0x69,0x74, + 0x1,0x7a,0x39, 0x1,0x7a,0x3a, 0x2,0x69,0x75, 0x2,0x69,0x73, + 0x3,0x5d,0x24, 0x2,0x69,0x70, 0x3,0x5e,0x5d, 0x2,0x6c,0x31, + 0x2,0x6c,0x34, 0x2,0x6c,0x30, 0x4,0x61,0x26, 0x1,0x7b,0x27, + 0x2,0x6c,0x32, 0x1,0x7b,0x26, 0x1,0x7b,0x25, 0x1,0x7b,0x24, + 0x2,0x6c,0x33, 0x2,0x6d,0x7e, 0x2,0x6d,0x7c, 0x3,0x5f,0x5f, + 0x2,0x6d,0x7b, 0x2,0x6c,0x2f, 0x2,0x6d,0x7d, 0x2,0x6c,0x35, + 0x2,0x6d,0x7a, 0x3,0x60,0x45, 0x2,0x6f,0x48, 0x2,0x6f,0x26, + 0x2,0x6f,0x46, 0x1,0x7c,0x47, 0x2,0x6f,0x47, 0x2,0x6f,0x49, + 0x3,0x66,0x47, 0x2,0x70,0x4d, 0x1,0x7c,0x66, 0x2,0x70,0x4c, + 0x2,0x70,0x4b, 0x1,0x7c,0x67, 0x4,0x6c,0x23, 0x1,0x7d,0x27, + 0x2,0x71,0x5d, 0x2,0x71,0x75, 0x2,0x71,0x74, 0x2,0x71,0x76, + 0x1,0x48,0x66, 0x2,0x2d,0x4b, 0x3,0x2f,0x26, 0x2,0x32,0x71, + 0x2,0x32,0x72, 0x3,0x38,0x6a, 0x3,0x3e,0x6a, 0x3,0x3e,0x69, + 0x2,0x40,0x26, 0x6,0x4e,0x4f, 0x2,0x6c,0x36, 0x2,0x70,0x4e, + 0x1,0x48,0x67, 0x1,0x53,0x4f, 0x2,0x2d,0x4c, 0x3,0x33,0x71, + 0x3,0x66,0x48, 0x4,0x35,0x27, 0x2,0x39,0x34, 0x1,0x5d,0x34, + 0x2,0x40,0x28, 0x2,0x40,0x27, 0x1,0x61,0x79, 0x3,0x44,0x4d, + 0x1,0x66,0x4c, 0x2,0x54,0x2a, 0x1,0x6e,0x6c, 0x3,0x4e,0x5f, + 0x1,0x6e,0x6d, 0x3,0x52,0x63, 0x3,0x52,0x64, 0x4,0x53,0x4b, + 0x1,0x72,0x2f, 0x1,0x7c,0x68, 0x1,0x48,0x68, 0x3,0x2f,0x27, + 0x2,0x2d,0x4d, 0x1,0x4f,0x50, 0x2,0x2d,0x4f, 0x2,0x2d,0x4e, + 0x1,0x53,0x50, 0x2,0x32,0x73, 0x3,0x33,0x74, 0x2,0x32,0x7a, + 0x1,0x58,0x2e, 0x2,0x32,0x78, 0x2,0x32,0x76, 0x3,0x33,0x77, + 0x2,0x32,0x7d, 0x2,0x32,0x74, 0x2,0x32,0x75, 0x1,0x58,0x2f, + 0x3,0x33,0x72, 0x1,0x58,0x33, 0x3,0x33,0x73, 0x3,0x33,0x75, + 0x2,0x32,0x7e, 0x1,0x58,0x32, 0x2,0x32,0x7c, 0x2,0x32,0x79, + 0x2,0x32,0x77, 0x1,0x58,0x30, 0x1,0x58,0x31, 0x2,0x32,0x7b, + 0x3,0x33,0x76, 0x3,0x66,0x49, 0x1,0x5d,0x36, 0x2,0x39,0x35, + 0x3,0x38,0x72, 0x1,0x5d,0x3b, 0x2,0x39,0x45, 0x1,0x5d,0x3a, + 0x2,0x39,0x47, 0x3,0x38,0x6e, 0x3,0x38,0x74, 0x2,0x39,0x3b, + 0x1,0x5d,0x38, 0x2,0x39,0x46, 0x3,0x38,0x6c, 0x2,0x39,0x36, + 0x1,0x5d,0x39, 0x2,0x39,0x42, 0x2,0x39,0x3e, 0x2,0x39,0x40, + 0x2,0x39,0x3a, 0x2,0x39,0x41, 0x3,0x38,0x6b, 0x4,0x35,0x2f, + 0x1,0x5d,0x35, 0x2,0x39,0x3d, 0x3,0x38,0x73, 0x2,0x39,0x3c, + 0x2,0x39,0x38, 0x3,0x38,0x6d, 0x2,0x39,0x43, 0x3,0x38,0x6f, + 0x3,0x38,0x71, 0x2,0x39,0x3f, 0x2,0x39,0x37, 0x3,0x38,0x70, + 0x2,0x39,0x39, 0x1,0x5d,0x37, 0x2,0x39,0x44, 0x1,0x61,0x7c, + 0x2,0x40,0x33, 0x4,0x3a,0x7b, 0x3,0x3e,0x70, 0x3,0x3e,0x72, + 0x2,0x40,0x2f, 0x2,0x40,0x31, 0x2,0x40,0x2c, 0x2,0x40,0x2b, + 0x2,0x40,0x29, 0x3,0x3e,0x6d, 0x2,0x40,0x30, 0x2,0x40,0x32, + 0x2,0x40,0x2e, 0x3,0x3e,0x6f, 0x2,0x40,0x2d, 0x1,0x61,0x7a, + 0x1,0x61,0x7b, 0x2,0x40,0x35, 0x1,0x66,0x54, 0x2,0x47,0x39, + 0x2,0x47,0x3f, 0x2,0x47,0x3a, 0x2,0x47,0x3b, 0x3,0x44,0x4e, + 0x2,0x47,0x40, 0x5,0x42,0x6c, 0x1,0x66,0x56, 0x4,0x40,0x61, + 0x1,0x66,0x4e, 0x1,0x66,0x55, 0x2,0x47,0x38, 0x2,0x40,0x2a, + 0x1,0x66,0x51, 0x1,0x66,0x4f, 0x2,0x47,0x3e, 0x2,0x47,0x3d, + 0x1,0x66,0x50, 0x1,0x66,0x52, 0x2,0x47,0x3c, 0x1,0x66,0x4d, + 0x3,0x44,0x4f, 0x1,0x66,0x53, 0x3,0x4e,0x60, 0x2,0x4d,0x7d, + 0x1,0x6a,0x7c, 0x3,0x49,0x59, 0x3,0x49,0x52, 0x2,0x4e,0x2a, + 0x2,0x4e,0x29, 0x3,0x49,0x57, 0x2,0x4e,0x24, 0x1,0x6a,0x7e, + 0x2,0x4e,0x28, 0x2,0x4d,0x7e, 0x2,0x4e,0x21, 0x1,0x6a,0x76, + 0x1,0x6a,0x78, 0x3,0x49,0x54, 0x2,0x4e,0x26, 0x2,0x4d,0x7c, + 0x1,0x6a,0x7a, 0x1,0x6a,0x79, 0x2,0x4e,0x22, 0x2,0x4e,0x27, + 0x2,0x4e,0x25, 0x1,0x6a,0x7b, 0x2,0x4e,0x23, 0x3,0x49,0x51, + 0x3,0x49,0x56, 0x2,0x40,0x34, 0x1,0x6a,0x77, 0x3,0x49,0x58, + 0x2,0x54,0x2b, 0x2,0x54,0x32, 0x1,0x6e,0x6f, 0x4,0x4d,0x46, + 0x2,0x54,0x36, 0x1,0x6e,0x73, 0x2,0x54,0x2e, 0x2,0x54,0x2c, + 0x4,0x4d,0x3e, 0x2,0x54,0x35, 0x3,0x4e,0x61, 0x1,0x6e,0x6e, + 0x2,0x54,0x34, 0x1,0x6e,0x70, 0x1,0x6e,0x71, 0x2,0x54,0x2d, + 0x1,0x6e,0x72, 0x2,0x54,0x33, 0x2,0x54,0x2f, 0x2,0x54,0x30, + 0x2,0x54,0x31, 0x1,0x6a,0x7d, 0x3,0x4e,0x62, 0x2,0x5a,0x3e, + 0x2,0x5a,0x4a, 0x4,0x53,0x53, 0x1,0x72,0x34, 0x2,0x5a,0x45, + 0x2,0x5a,0x47, 0x3,0x52,0x65, 0x1,0x72,0x32, 0x2,0x5a,0x3f, + 0x2,0x5a,0x43, 0x4,0x53,0x50, 0x2,0x5a,0x46, 0x1,0x72,0x30, + 0x1,0x72,0x33, 0x2,0x5a,0x49, 0x2,0x5a,0x41, 0x2,0x5a,0x42, + 0x2,0x5a,0x48, 0x2,0x5a,0x40, 0x2,0x5a,0x44, 0x1,0x72,0x31, + 0x2,0x5f,0x40, 0x2,0x5f,0x3f, 0x1,0x75,0x42, 0x2,0x5f,0x45, + 0x1,0x75,0x44, 0x3,0x56,0x40, 0x4,0x58,0x62, 0x1,0x75,0x41, + 0x2,0x5f,0x41, 0x1,0x75,0x45, 0x2,0x5f,0x42, 0x3,0x56,0x3f, + 0x3,0x56,0x3d, 0x2,0x5f,0x43, 0x2,0x5f,0x46, 0x3,0x56,0x42, + 0x1,0x75,0x43, 0x2,0x63,0x41, 0x3,0x58,0x79, 0x2,0x63,0x44, + 0x3,0x58,0x7a, 0x2,0x63,0x3e, 0x2,0x63,0x40, 0x3,0x58,0x7c, + 0x3,0x58,0x7b, 0x2,0x63,0x3f, 0x2,0x63,0x42, 0x2,0x63,0x43, + 0x2,0x5f,0x44, 0x2,0x63,0x3d, 0x3,0x66,0x4a, 0x1,0x78,0x78, + 0x2,0x66,0x77, 0x2,0x66,0x7a, 0x2,0x66,0x7c, 0x2,0x66,0x75, + 0x2,0x66,0x76, 0x2,0x66,0x79, 0x2,0x66,0x7b, 0x1,0x78,0x79, + 0x1,0x78,0x77, 0x1,0x78,0x76, 0x2,0x66,0x78, 0x2,0x66,0x74, + 0x2,0x69,0x76, 0x1,0x7a,0x3b, 0x3,0x5d,0x29, 0x2,0x69,0x77, + 0x3,0x5d,0x28, 0x2,0x6c,0x38, 0x1,0x7b,0x28, 0x2,0x6c,0x3a, + 0x1,0x7b,0x29, 0x2,0x6c,0x37, 0x2,0x6c,0x39, 0x1,0x7b,0x72, + 0x5,0x74,0x38, 0x2,0x6e,0x21, 0x1,0x7b,0x71, 0x2,0x6f,0x4c, + 0x2,0x6f,0x4b, 0x4,0x6c,0x25, 0x2,0x6f,0x4a, 0xf,0x68,0x4a, + 0x3,0x61,0x49, 0x2,0x71,0x37, 0x2,0x71,0x38, 0x2,0x71,0x3a, + 0x2,0x71,0x39, 0x3,0x61,0x7d, 0x2,0x22,0x70, 0x1,0x48,0x69, + 0x1,0x53,0x51, 0x2,0x39,0x48, 0x1,0x61,0x7d, 0x3,0x66,0x4b, + 0x2,0x47,0x41, 0x1,0x77,0x3b, 0x3,0x5b,0x2f, 0x2,0x66,0x7d, + 0x3,0x60,0x46, 0x3,0x61,0x4a, 0x1,0x4b,0x44, 0x3,0x2f,0x29, + 0x4,0x2f,0x76, 0x4,0x2f,0x75, 0x1,0x5d,0x3d, 0x4,0x35,0x34, + 0x3,0x38,0x76, 0x3,0x38,0x75, 0x1,0x5d,0x3c, 0x3,0x38,0x77, + 0x2,0x40,0x36, 0x1,0x61,0x7e, 0x2,0x40,0x38, 0x2,0x40,0x37, + 0x6,0x4e,0x60, 0x3,0x3e,0x74, 0x2,0x47,0x42, 0x1,0x66,0x57, + 0x2,0x4e,0x2b, 0x2,0x4e,0x2e, 0x2,0x4e,0x2d, 0x4,0x47,0x35, + 0x2,0x4e,0x2c, 0x2,0x54,0x37, 0x2,0x54,0x39, 0x2,0x54,0x38, + 0x3,0x4e,0x65, 0x1,0x72,0x36, 0x3,0x52,0x66, 0x4,0x53,0x59, + 0x3,0x4e,0x64, 0x1,0x72,0x35, 0x3,0x56,0x46, 0x1,0x75,0x46, + 0x2,0x5f,0x47, 0x2,0x5f,0x49, 0x2,0x5f,0x48, 0x3,0x58,0x7e, + 0x3,0x58,0x7d, 0x1,0x77,0x3c, 0x3,0x59,0x21, 0x4,0x61,0x2f, + 0x3,0x5b,0x31, 0x2,0x67,0x21, 0x2,0x66,0x7e, 0xf,0x63,0x77, + 0x2,0x69,0x78, 0x1,0x7a,0x3c, 0x3,0x5d,0x2a, 0x3,0x5e,0x61, + 0x1,0x7b,0x2a, 0x2,0x6e,0x23, 0x2,0x6e,0x22, 0x1,0x7d,0x28, + 0x1,0x4b,0x45, 0x2,0x2d,0x50, 0x1,0x53,0x52, 0x2,0x39,0x4b, + 0x2,0x39,0x49, 0x4,0x35,0x39, 0x4,0x35,0x38, 0x2,0x39,0x4a, + 0x2,0x40,0x3a, 0x2,0x40,0x3b, 0x2,0x47,0x49, 0x2,0x40,0x39, + 0x2,0x47,0x43, 0x2,0x47,0x47, 0x2,0x47,0x46, 0x2,0x47,0x48, + 0x1,0x66,0x58, 0x2,0x47,0x45, 0x2,0x47,0x44, 0x2,0x47,0x4a, + 0x3,0x44,0x54, 0x2,0x4e,0x31, 0x2,0x4e,0x2f, 0x3,0x49,0x5c, + 0x2,0x4e,0x30, 0x2,0x54,0x3c, 0x2,0x54,0x3a, 0x3,0x4e,0x66, + 0x2,0x54,0x3b, 0x2,0x5a,0x4b, 0x2,0x5f,0x4a, 0x2,0x5f,0x4b, + 0x1,0x77,0x3d, 0x3,0x5b,0x32, 0x2,0x67,0x22, 0x2,0x69,0x79, + 0x1,0x7a,0x3d, 0x4,0x61,0x37, 0x2,0x6c,0x3b, 0x2,0x6e,0x24, + 0x1,0x7b,0x73, 0x4,0x69,0x45, 0x2,0x6f,0x4d, 0x2,0x71,0x3b, + 0x1,0x4b,0x46, 0x1,0x53,0x54, 0x1,0x53,0x55, 0x2,0x2d,0x51, + 0x3,0x2f,0x2a, 0x3,0x2f,0x2c, 0x2,0x2d,0x52, 0x1,0x53,0x53, + 0x4,0x2f,0x7c, 0x1,0x58,0x39, 0x3,0x33,0x7b, 0x1,0x58,0x37, + 0x3,0x33,0x7a, 0x1,0x58,0x36, 0x1,0x58,0x3d, 0x1,0x58,0x35, + 0x1,0x58,0x3e, 0x2,0x33,0x21, 0x1,0x58,0x3b, 0x4,0x2f,0x7d, + 0x1,0x58,0x38, 0x1,0x58,0x3c, 0x1,0x58,0x3a, 0x1,0x58,0x34, + 0x3,0x33,0x7c, 0x1,0x5d,0x45, 0x3,0x38,0x7e, 0x1,0x5d,0x3f, + 0x2,0x39,0x4f, 0x1,0x5d,0x44, 0x3,0x39,0x23, 0x3,0x39,0x29, + 0x1,0x5d,0x46, 0x1,0x5d,0x40, 0x6,0x44,0x70, 0x1,0x5d,0x41, + 0x3,0x38,0x79, 0x2,0x39,0x4d, 0x3,0x38,0x7b, 0x3,0x39,0x25, + 0x1,0x5d,0x3e, 0x3,0x39,0x22, 0x2,0x39,0x4e, 0x1,0x5d,0x43, + 0x4,0x35,0x3d, 0x5,0x35,0x5b, 0x2,0x39,0x4c, 0x1,0x5d,0x42, + 0x3,0x38,0x7a, 0x1,0x62,0x2b, 0x3,0x3e,0x7c, 0x1,0x62,0x2d, + 0x4,0x3b,0x2f, 0x3,0x3e,0x7d, 0x2,0x40,0x3e, 0x1,0x62,0x2c, + 0x1,0x62,0x21, 0x1,0x62,0x25, 0x3,0x3f,0x24, 0x1,0x66,0x6b, + 0x2,0x47,0x4f, 0x2,0x40,0x40, 0x1,0x62,0x26, 0x3,0x3e,0x7e, + 0x3,0x3e,0x75, 0x2,0x40,0x43, 0x2,0x40,0x44, 0x1,0x62,0x2a, + 0x4,0x3b,0x30, 0x2,0x40,0x46, 0x3,0x3f,0x21, 0x2,0x40,0x48, + 0x3,0x3f,0x23, 0x2,0x40,0x49, 0x2,0x40,0x3d, 0x2,0x40,0x3c, + 0x2,0x40,0x4a, 0x1,0x62,0x29, 0x2,0x40,0x47, 0x2,0x40,0x45, + 0x4,0x3b,0x2c, 0x1,0x62,0x27, 0x1,0x62,0x23, 0x1,0x62,0x2e, + 0x2,0x40,0x41, 0x2,0x40,0x42, 0x2,0x40,0x3f, 0x3,0x3e,0x78, + 0x1,0x62,0x28, 0x4,0x3b,0x31, 0x3,0x3f,0x22, 0x1,0x62,0x24, + 0x1,0x62,0x22, 0x2,0x47,0x4e, 0x1,0x66,0x66, 0x1,0x66,0x61, + 0x3,0x44,0x60, 0x3,0x44,0x59, 0x1,0x66,0x5c, 0x3,0x44,0x63, + 0x1,0x66,0x6c, 0x1,0x66,0x5d, 0x3,0x44,0x55, 0x1,0x66,0x59, + 0x1,0x66,0x68, 0x1,0x66,0x65, 0x1,0x66,0x67, 0x3,0x44,0x58, + 0x1,0x66,0x5e, 0x1,0x66,0x63, 0x1,0x66,0x5a, 0x1,0x66,0x5b, + 0x2,0x47,0x56, 0x2,0x47,0x53, 0x2,0x47,0x4b, 0x2,0x47,0x50, + 0x3,0x44,0x5b, 0x1,0x66,0x69, 0x2,0x47,0x57, 0x1,0x66,0x6a, + 0x1,0x66,0x60, 0x3,0x44,0x5c, 0x3,0x44,0x61, 0x2,0x47,0x4d, + 0x3,0x44,0x56, 0x2,0x47,0x55, 0x2,0x47,0x51, 0x2,0x47,0x54, + 0x2,0x47,0x52, 0x1,0x66,0x64, 0x2,0x47,0x4c, 0x1,0x66,0x5f, + 0x3,0x44,0x5d, 0x2,0x4e,0x34, 0x1,0x6b,0x22, 0x1,0x6b,0x25, + 0x3,0x49,0x5f, 0x2,0x4e,0x36, 0x3,0x49,0x64, 0x1,0x6b,0x2d, + 0x2,0x4e,0x35, 0x1,0x6b,0x27, 0x3,0x49,0x63, 0x1,0x6e,0x78, + 0x2,0x4e,0x37, 0x4,0x47,0x45, 0x1,0x6b,0x2c, 0x2,0x4e,0x33, + 0x1,0x6b,0x2e, 0x3,0x49,0x5e, 0x3,0x49,0x62, 0x3,0x49,0x6b, + 0x1,0x6b,0x23, 0x3,0x49,0x68, 0x1,0x66,0x62, 0x1,0x6b,0x26, + 0x3,0x49,0x60, 0x1,0x6b,0x24, 0x1,0x6b,0x28, 0x1,0x6b,0x2a, + 0x1,0x6b,0x21, 0x1,0x6b,0x2f, 0x1,0x6b,0x2b, 0x3,0x49,0x65, + 0x1,0x6b,0x29, 0x2,0x4e,0x32, 0x3,0x49,0x66, 0xf,0x4c,0x41, + 0x3,0x4e,0x74, 0x1,0x6f,0x21, 0x3,0x4e,0x67, 0x1,0x6e,0x7b, + 0x3,0x4e,0x72, 0x3,0x4e,0x70, 0x3,0x4e,0x6e, 0x1,0x6f,0x24, + 0x3,0x4e,0x6c, 0x2,0x54,0x3f, 0x1,0x6f,0x25, 0x2,0x54,0x4b, + 0x2,0x54,0x44, 0x1,0x6e,0x74, 0x2,0x54,0x4c, 0x2,0x54,0x46, + 0x1,0x6e,0x7e, 0x2,0x54,0x47, 0x3,0x4e,0x73, 0x1,0x6e,0x7d, + 0x2,0x54,0x4a, 0x1,0x6e,0x77, 0x2,0x54,0x48, 0x2,0x54,0x3e, + 0x1,0x6e,0x76, 0x2,0x5a,0x56, 0x1,0x6e,0x7c, 0x3,0x4e,0x75, + 0x1,0x6e,0x79, 0x3,0x4e,0x69, 0x1,0x6f,0x23, 0x3,0x4e,0x6a, + 0x2,0x54,0x3d, 0x3,0x4e,0x76, 0x2,0x54,0x41, 0x1,0x6e,0x75, + 0x2,0x54,0x40, 0x2,0x54,0x42, 0x2,0x54,0x43, 0x1,0x6f,0x22, + 0x2,0x54,0x45, 0x2,0x54,0x49, 0x2,0x54,0x4d, 0x1,0x6f,0x26, + 0x1,0x72,0x3c, 0x2,0x5a,0x51, 0x2,0x5a,0x57, 0x2,0x5a,0x54, + 0x2,0x5a,0x4c, 0x2,0x5a,0x58, 0x2,0x5a,0x4d, 0x3,0x52,0x6a, + 0x2,0x5a,0x53, 0x3,0x52,0x6b, 0x1,0x72,0x37, 0x1,0x72,0x3d, + 0x2,0x5a,0x59, 0x3,0x4e,0x6f, 0x3,0x52,0x67, 0x1,0x72,0x39, + 0x3,0x52,0x6e, 0x1,0x72,0x43, 0x1,0x72,0x3e, 0x2,0x5a,0x5b, + 0x2,0x5a,0x55, 0x1,0x72,0x3a, 0x2,0x5a,0x4e, 0x1,0x72,0x44, + 0x2,0x5a,0x4f, 0x2,0x5a,0x50, 0x1,0x72,0x45, 0x1,0x72,0x42, + 0x1,0x6e,0x7a, 0x3,0x52,0x69, 0x1,0x72,0x38, 0x2,0x5a,0x5c, + 0x1,0x72,0x46, 0x3,0x52,0x68, 0x1,0x72,0x3f, 0x2,0x5a,0x5a, + 0x1,0x72,0x3b, 0x1,0x72,0x40, 0x1,0x72,0x41, 0x3,0x66,0x4c, + 0x1,0x75,0x4e, 0x2,0x5f,0x50, 0x2,0x5f,0x59, 0x2,0x5f,0x56, + 0x2,0x5f,0x58, 0x3,0x56,0x49, 0x1,0x75,0x4b, 0x2,0x5f,0x51, + 0x3,0x56,0x4a, 0x2,0x5f,0x57, 0x1,0x75,0x47, 0x2,0x5f,0x53, + 0x1,0x75,0x4f, 0x2,0x5f,0x4f, 0x2,0x5f,0x54, 0x2,0x5f,0x5b, + 0x2,0x5a,0x52, 0x2,0x5f,0x55, 0x2,0x5f,0x4e, 0x1,0x75,0x48, + 0x2,0x5f,0x4d, 0x1,0x75,0x49, 0x2,0x5f,0x5c, 0x1,0x75,0x4a, + 0x2,0x5f,0x5a, 0x1,0x75,0x4d, 0x2,0x5f,0x4c, 0x3,0x56,0x48, + 0x1,0x75,0x4c, 0x2,0x5f,0x52, 0x2,0x63,0x47, 0x2,0x63,0x55, + 0x2,0x63,0x50, 0x2,0x63,0x52, 0x2,0x63,0x46, 0x1,0x77,0x3e, + 0x3,0x59,0x2a, 0x2,0x63,0x45, 0x1,0x77,0x41, 0x1,0x77,0x40, + 0x3,0x59,0x26, 0x2,0x63,0x54, 0x2,0x63,0x4c, 0x2,0x63,0x49, + 0x2,0x63,0x4f, 0x3,0x59,0x24, 0x2,0x63,0x48, 0x3,0x59,0x28, + 0x2,0x63,0x4a, 0x2,0x63,0x53, 0x2,0x63,0x51, 0x3,0x59,0x23, + 0x1,0x77,0x3f, 0x2,0x63,0x58, 0x2,0x63,0x56, 0x2,0x63,0x4d, + 0x2,0x63,0x57, 0x2,0x63,0x4e, 0x3,0x5b,0x34, 0x2,0x67,0x26, + 0x1,0x78,0x7a, 0x2,0x67,0x2d, 0x3,0x5b,0x35, 0x4,0x61,0x3a, + 0x2,0x6c,0x3e, 0x1,0x79,0x23, 0x2,0x63,0x4b, 0x2,0x67,0x24, + 0x1,0x78,0x7d, 0x2,0x67,0x25, 0x2,0x67,0x2a, 0x3,0x5b,0x36, + 0x3,0x5d,0x33, 0x1,0x79,0x21, 0x1,0x79,0x22, 0x2,0x67,0x23, + 0x2,0x67,0x2c, 0x2,0x67,0x2e, 0x2,0x67,0x27, 0x2,0x67,0x29, + 0x2,0x67,0x2b, 0x2,0x67,0x28, 0x2,0x67,0x2f, 0x1,0x78,0x7c, + 0x1,0x79,0x24, 0x1,0x78,0x7e, 0x1,0x78,0x7b, 0x2,0x69,0x7c, + 0x4,0x64,0x4d, 0x1,0x7a,0x42, 0x2,0x69,0x7a, 0x3,0x5d,0x30, + 0x3,0x5d,0x2c, 0x2,0x69,0x7e, 0x3,0x5d,0x32, 0x2,0x6a,0x21, + 0x1,0x7a,0x40, 0x2,0x6a,0x22, 0x2,0x69,0x7d, 0x3,0x5d,0x2b, + 0x2,0x69,0x7b, 0x1,0x7a,0x43, 0x1,0x7a,0x3f, 0x2,0x6a,0x23, + 0x3,0x5d,0x2e, 0x1,0x7a,0x41, 0x1,0x7a,0x3e, 0x3,0x5c,0x6d, + 0x4,0x67,0x3b, 0x1,0x7b,0x2b, 0x3,0x5e,0x62, 0x4,0x67,0x41, + 0x1,0x7b,0x2c, 0x2,0x6c,0x3d, 0x2,0x6c,0x3c, 0x2,0x6c,0x3f, + 0x2,0x6c,0x40, 0x3,0x5e,0x63, 0x1,0x7b,0x2d, 0x2,0x6e,0x25, + 0x2,0x6e,0x2a, 0x1,0x7b,0x74, 0x3,0x5f,0x61, 0x2,0x6e,0x27, + 0x3,0x5f,0x62, 0x2,0x6e,0x26, 0x2,0x6e,0x29, 0x2,0x6e,0x28, + 0x3,0x60,0x48, 0x2,0x6f,0x51, 0x4,0x6a,0x7c, 0x1,0x7c,0x48, + 0x2,0x6f,0x50, 0x2,0x6f,0x4e, 0x3,0x60,0x47, 0x2,0x6f,0x4f, + 0x3,0x60,0x49, 0x3,0x60,0x7b, 0x1,0x7c,0x6a, 0x1,0x7c,0x69, + 0x2,0x70,0x4f, 0x2,0x70,0x50, 0x1,0x7c,0x6b, 0x3,0x61,0x4b, + 0x2,0x71,0x3c, 0x2,0x71,0x3d, 0x1,0x7d,0x34, 0x3,0x61,0x6b, + 0x1,0x7d,0x3a, 0x3,0x61,0x7e, 0x2,0x71,0x77, 0x2,0x72,0x36, + 0x1,0x4b,0x47, 0x5,0x30,0x46, 0x2,0x39,0x50, 0x3,0x39,0x2a, + 0x2,0x39,0x51, 0x2,0x47,0x58, 0x2,0x4e,0x38, 0x2,0x54,0x4e, + 0x1,0x75,0x51, 0x3,0x56,0x4d, 0x1,0x75,0x50, 0x2,0x63,0x59, + 0x2,0x67,0x30, 0x3,0x5f,0x64, 0x2,0x6f,0x52, 0x1,0x4b,0x48, + 0x2,0x33,0x22, 0x1,0x58,0x3f, 0x1,0x5d,0x47, 0x2,0x47,0x5a, + 0x2,0x47,0x59, 0x1,0x6f,0x27, 0x2,0x54,0x4f, 0x1,0x6f,0x28, + 0x2,0x5f,0x5d, 0x1,0x77,0x42, 0x3,0x5d,0x34, 0x3,0x66,0x4d, + 0x3,0x62,0x21, 0x1,0x7d,0x43, 0x1,0x4b,0x49, 0x2,0x28,0x6b, + 0x2,0x33,0x23, 0x3,0x39,0x2d, 0x4,0x35,0x4d, 0x1,0x5d,0x48, + 0x3,0x39,0x2c, 0x2,0x39,0x52, 0x2,0x39,0x53, 0x3,0x3f,0x2a, + 0x2,0x40,0x4b, 0x3,0x3f,0x29, 0x1,0x62,0x2f, 0x1,0x66,0x6d, + 0x3,0x44,0x64, 0x2,0x47,0x5c, 0x2,0x47,0x5b, 0x2,0x47,0x5d, + 0x3,0x49,0x6d, 0x2,0x4e,0x39, 0x2,0x4e,0x3a, 0x1,0x6b,0x30, + 0x1,0x72,0x47, 0x1,0x6f,0x29, 0x1,0x72,0x48, 0x2,0x5f,0x61, + 0x2,0x5f,0x5e, 0x2,0x5f,0x60, 0x2,0x5f,0x5f, 0x1,0x75,0x52, + 0x3,0x59,0x2b, 0x2,0x63,0x5a, 0x2,0x67,0x32, 0x2,0x67,0x31, + 0x2,0x25,0x24, 0x1,0x58,0x41, 0x1,0x58,0x40, 0x2,0x33,0x24, + 0x3,0x39,0x2e, 0x2,0x39,0x54, 0x3,0x3f,0x2c, 0x3,0x3f,0x2b, + 0x2,0x40,0x4d, 0x2,0x40,0x4c, 0x1,0x62,0x30, 0x3,0x3f,0x2d, + 0x2,0x47,0x5f, 0x2,0x47,0x60, 0x2,0x47,0x5e, 0x4,0x40,0x78, + 0x3,0x44,0x65, 0x1,0x66,0x6f, 0x1,0x66,0x6e, 0x4,0x47,0x54, + 0x1,0x6b,0x32, 0x1,0x6b,0x31, 0x3,0x4e,0x7a, 0x2,0x54,0x50, + 0x2,0x5a,0x5f, 0x2,0x5a,0x5d, 0x2,0x5a,0x5e, 0x1,0x72,0x49, + 0x2,0x5f,0x63, 0x2,0x5f,0x62, 0x3,0x56,0x4f, 0x2,0x63,0x5d, + 0x2,0x63,0x5c, 0x2,0x63,0x5b, 0x2,0x67,0x33, 0x3,0x61,0x4d, + 0x2,0x71,0x78, 0x1,0x4b,0x4a, 0x1,0x53,0x56, 0x3,0x2f,0x2e, + 0x1,0x53,0x57, 0x1,0x58,0x42, 0x1,0x58,0x43, 0x2,0x33,0x26, + 0x2,0x33,0x25, 0x2,0x39,0x55, 0x3,0x39,0x30, 0x1,0x5d,0x4e, + 0x1,0x5d,0x4c, 0x1,0x5d,0x49, 0x1,0x5d,0x4d, 0x1,0x5d,0x4b, + 0x1,0x5d,0x4a, 0x3,0x39,0x32, 0x3,0x39,0x31, 0x1,0x62,0x31, + 0x2,0x40,0x50, 0x3,0x3f,0x2f, 0x1,0x66,0x74, 0x1,0x62,0x33, + 0x1,0x62,0x38, 0x2,0x40,0x52, 0x1,0x62,0x3a, 0x1,0x62,0x39, + 0x1,0x62,0x3c, 0x2,0x40,0x51, 0x2,0x40,0x4e, 0x1,0x62,0x36, + 0x1,0x62,0x32, 0x1,0x62,0x34, 0x2,0x40,0x4f, 0x1,0x62,0x3b, + 0x1,0x62,0x37, 0x1,0x62,0x35, 0x1,0x66,0x76, 0x1,0x66,0x75, + 0x1,0x66,0x73, 0x1,0x66,0x77, 0x4,0x40,0x7e, 0x1,0x66,0x71, + 0x1,0x66,0x72, 0x3,0x44,0x69, 0x1,0x66,0x70, 0x5,0x43,0x2d, + 0x2,0x47,0x61, 0x3,0x44,0x67, 0x2,0x4e,0x3c, 0x3,0x49,0x70, + 0x1,0x6b,0x34, 0x1,0x6b,0x35, 0x1,0x6b,0x33, 0x3,0x49,0x72, + 0x2,0x4e,0x3b, 0x3,0x49,0x71, 0x2,0x4e,0x3d, 0x3,0x66,0x4e, + 0x2,0x54,0x53, 0x2,0x54,0x55, 0x3,0x4e,0x7e, 0x1,0x6f,0x32, + 0x2,0x54,0x56, 0x1,0x6f,0x2b, 0x2,0x54,0x52, 0x1,0x6f,0x2a, + 0x1,0x6f,0x34, 0x1,0x6f,0x30, 0x1,0x6f,0x31, 0x1,0x6f,0x2d, + 0x2,0x54,0x51, 0x1,0x6f,0x2c, 0x2,0x54,0x57, 0x2,0x54,0x54, + 0x3,0x4e,0x7d, 0x1,0x6f,0x33, 0x3,0x4f,0x22, 0x1,0x6f,0x2e, + 0x1,0x6f,0x2f, 0x2,0x5a,0x61, 0x3,0x52,0x75, 0x2,0x5a,0x63, + 0x2,0x5a,0x62, 0x3,0x52,0x73, 0x2,0x5a,0x64, 0x1,0x72,0x4a, + 0x2,0x5a,0x60, 0x3,0x56,0x51, 0x3,0x56,0x52, 0x1,0x75,0x56, + 0x2,0x5f,0x64, 0x1,0x75,0x53, 0x1,0x75,0x57, 0x1,0x75,0x55, + 0x1,0x75,0x54, 0x2,0x63,0x5e, 0x4,0x5d,0x69, 0x2,0x63,0x61, + 0x7,0x43,0x52, 0x2,0x63,0x60, 0x3,0x59,0x2e, 0x2,0x63,0x5f, + 0x1,0x77,0x43, 0x2,0x67,0x34, 0x2,0x67,0x35, 0x1,0x79,0x25, + 0x2,0x67,0x36, 0x1,0x79,0x26, 0x3,0x5b,0x38, 0x3,0x66,0x4f, + 0x1,0x7a,0x45, 0x4,0x64,0x4f, 0x1,0x7a,0x44, 0x2,0x6c,0x41, + 0x3,0x5e,0x65, 0x3,0x5e,0x66, 0x1,0x7b,0x2e, 0x2,0x6c,0x42, + 0x2,0x6e,0x2b, 0x1,0x7b,0x75, 0x1,0x7b,0x76, 0x3,0x66,0x50, + 0x2,0x6f,0x53, 0x3,0x60,0x4a, 0x1,0x7c,0x6d, 0x3,0x61,0x4e, + 0x1,0x4b,0x4b, 0x3,0x39,0x33, 0x1,0x5d,0x50, 0x1,0x5d,0x4f, + 0x2,0x47,0x62, 0x2,0x47,0x63, 0x1,0x6b,0x36, 0x2,0x5a,0x65, + 0x1,0x6f,0x35, 0x2,0x5a,0x66, 0x2,0x5f,0x65, 0x1,0x4b,0x4c, + 0x3,0x24,0x3a, 0x2,0x2d,0x53, 0x1,0x53,0x59, 0x1,0x53,0x58, + 0x2,0x33,0x27, 0x1,0x58,0x44, 0x2,0x33,0x28, 0x2,0x39,0x58, + 0x3,0x39,0x39, 0x2,0x39,0x57, 0x3,0x39,0x37, 0x2,0x39,0x56, + 0x3,0x39,0x35, 0x3,0x39,0x38, 0x2,0x40,0x54, 0x1,0x62,0x3f, + 0x3,0x3f,0x39, 0x3,0x3f,0x34, 0x2,0x40,0x53, 0x1,0x62,0x3e, + 0x3,0x3f,0x37, 0x3,0x3f,0x30, 0x3,0x3f,0x33, 0x2,0x40,0x55, + 0x1,0x62,0x3d, 0x3,0x3f,0x38, 0x2,0x47,0x65, 0x2,0x47,0x68, + 0x2,0x47,0x66, 0x2,0x47,0x67, 0x2,0x47,0x6b, 0x2,0x47,0x64, + 0x2,0x47,0x6c, 0x2,0x47,0x69, 0x2,0x47,0x6a, 0x1,0x6b,0x38, + 0x2,0x4e,0x3e, 0x3,0x49,0x75, 0x3,0x49,0x73, 0x1,0x6b,0x37, + 0x3,0x49,0x74, 0x2,0x54,0x5b, 0x2,0x54,0x59, 0x3,0x4f,0x26, + 0x4,0x4d,0x75, 0x1,0x6f,0x36, 0x2,0x54,0x58, 0x2,0x54,0x5a, + 0x3,0x4f,0x25, 0x1,0x6f,0x37, 0x3,0x4f,0x23, 0x2,0x5a,0x67, + 0x3,0x52,0x77, 0x2,0x5a,0x68, 0x1,0x75,0x58, 0x3,0x59,0x31, + 0x2,0x67,0x38, 0x2,0x67,0x3a, 0x2,0x67,0x37, 0x2,0x67,0x39, + 0x2,0x6a,0x24, 0x2,0x6c,0x43, 0x3,0x66,0x51, 0x2,0x71,0x5e, + 0x1,0x4b,0x4d, 0x1,0x53,0x5a, 0x2,0x33,0x29, 0x2,0x33,0x2b, + 0x2,0x33,0x2a, 0x2,0x39,0x5b, 0x1,0x5d,0x52, 0x3,0x39,0x3e, + 0x2,0x39,0x59, 0x3,0x39,0x3a, 0x1,0x5d,0x51, 0x2,0x39,0x5c, + 0x3,0x39,0x3d, 0x2,0x39,0x5d, 0x2,0x39,0x5a, 0x6,0x45,0x38, + 0x2,0x40,0x61, 0x1,0x62,0x47, 0x2,0x40,0x59, 0x2,0x40,0x5f, + 0x3,0x3f,0x3f, 0x3,0x3f,0x3a, 0x1,0x62,0x42, 0x1,0x62,0x45, + 0x2,0x40,0x58, 0x1,0x62,0x40, 0x2,0x40,0x5c, 0x2,0x47,0x72, + 0x1,0x62,0x44, 0x3,0x3f,0x3b, 0x2,0x40,0x57, 0x3,0x3f,0x3e, + 0x2,0x40,0x5d, 0x2,0x40,0x5a, 0x2,0x40,0x60, 0x2,0x40,0x56, + 0x2,0x40,0x5e, 0x1,0x62,0x43, 0x1,0x62,0x46, 0x2,0x40,0x5b, + 0x1,0x62,0x41, 0x1,0x66,0x79, 0x2,0x47,0x6e, 0x1,0x66,0x78, + 0x2,0x47,0x75, 0x2,0x47,0x74, 0x1,0x67,0x21, 0x1,0x67,0x22, + 0x2,0x47,0x76, 0x1,0x66,0x7a, 0x2,0x47,0x73, 0x1,0x66,0x7e, + 0x2,0x47,0x78, 0x2,0x47,0x6f, 0x3,0x44,0x6b, 0x2,0x47,0x71, + 0x1,0x66,0x7b, 0x2,0x47,0x6d, 0x2,0x47,0x70, 0x2,0x47,0x77, + 0x1,0x66,0x7c, 0x2,0x47,0x79, 0x1,0x66,0x7d, 0x1,0x6b,0x39, + 0x2,0x4e,0x43, 0x2,0x4e,0x49, 0x2,0x4e,0x41, 0x2,0x4e,0x4a, + 0x3,0x49,0x7b, 0x2,0x4e,0x40, 0x2,0x4e,0x45, 0x2,0x4e,0x4b, + 0x2,0x4e,0x48, 0x2,0x4e,0x47, 0x2,0x4e,0x46, 0x3,0x49,0x7a, + 0x2,0x4e,0x3f, 0x2,0x4e,0x44, 0x3,0x49,0x79, 0x2,0x4e,0x42, + 0x1,0x6f,0x3c, 0x1,0x6f,0x39, 0x2,0x54,0x64, 0x2,0x54,0x69, + 0x2,0x54,0x6b, 0x2,0x54,0x68, 0x2,0x54,0x61, 0x2,0x54,0x63, + 0x2,0x54,0x6d, 0x2,0x54,0x6a, 0x2,0x54,0x65, 0x2,0x54,0x6e, + 0x2,0x54,0x62, 0x2,0x54,0x6c, 0x1,0x6f,0x3a, 0x1,0x6f,0x40, + 0x1,0x6f,0x3e, 0x2,0x54,0x5c, 0x1,0x6f,0x3f, 0x1,0x6f,0x3b, + 0x2,0x54,0x5d, 0x2,0x54,0x5f, 0x2,0x54,0x5e, 0x2,0x54,0x66, + 0x2,0x54,0x67, 0x3,0x4f,0x2c, 0x1,0x6f,0x3d, 0x3,0x4f,0x2b, + 0x1,0x6f,0x38, 0x2,0x54,0x60, 0x2,0x5a,0x72, 0x1,0x72,0x4c, + 0x3,0x52,0x7e, 0x2,0x5a,0x69, 0x1,0x72,0x4d, 0x1,0x72,0x50, + 0x2,0x5a,0x6e, 0x5,0x51,0x48, 0x2,0x5a,0x6b, 0x1,0x72,0x4f, + 0x4,0x54,0x29, 0x3,0x52,0x7b, 0x2,0x5a,0x6f, 0x2,0x5a,0x70, + 0x2,0x5a,0x6a, 0x2,0x5a,0x73, 0x2,0x5a,0x6c, 0x2,0x5a,0x71, + 0x1,0x72,0x4e, 0x3,0x52,0x7c, 0x1,0x72,0x4b, 0x2,0x5a,0x6d, + 0x3,0x56,0x54, 0x2,0x5f,0x6b, 0x1,0x75,0x5b, 0x1,0x75,0x59, + 0x1,0x75,0x5c, 0x1,0x75,0x5a, 0x2,0x5f,0x6a, 0x2,0x5f,0x67, + 0x2,0x5f,0x66, 0x3,0x56,0x55, 0x2,0x5f,0x69, 0x4,0x59,0x2d, + 0x2,0x5f,0x68, 0x2,0x63,0x6f, 0x1,0x77,0x49, 0x2,0x63,0x66, + 0x2,0x63,0x65, 0x3,0x59,0x32, 0x1,0x77,0x44, 0x2,0x63,0x6b, + 0x2,0x63,0x6a, 0x2,0x63,0x62, 0x2,0x63,0x6d, 0x2,0x63,0x67, + 0x1,0x77,0x48, 0x2,0x63,0x64, 0x2,0x63,0x6c, 0x2,0x63,0x63, + 0x1,0x77,0x45, 0x1,0x77,0x47, 0x2,0x63,0x68, 0x1,0x77,0x46, + 0x2,0x63,0x69, 0x3,0x5b,0x3a, 0x2,0x63,0x6e, 0x2,0x67,0x3e, + 0x3,0x5b,0x39, 0x1,0x79,0x2b, 0x2,0x67,0x3b, 0x4,0x61,0x52, + 0x2,0x67,0x3f, 0x3,0x5b,0x3b, 0x4,0x61,0x4f, 0x1,0x79,0x28, + 0x2,0x67,0x3d, 0x1,0x79,0x2d, 0x3,0x5b,0x3c, 0x1,0x79,0x2a, + 0x3,0x5b,0x3d, 0x2,0x67,0x3c, 0x4,0x61,0x54, 0x1,0x79,0x2c, + 0x2,0x67,0x40, 0x1,0x79,0x27, 0x1,0x7a,0x47, 0x1,0x7a,0x49, + 0x3,0x5d,0x37, 0x2,0x6a,0x27, 0x1,0x7a,0x48, 0x2,0x6a,0x25, + 0x1,0x79,0x29, 0x2,0x6a,0x26, 0x1,0x7a,0x46, 0x1,0x7b,0x2f, + 0x1,0x7b,0x31, 0x2,0x6c,0x45, 0x1,0x7b,0x30, 0x2,0x6c,0x44, + 0x2,0x6e,0x30, 0x1,0x7b,0x77, 0x2,0x6e,0x2f, 0x1,0x7b,0x78, + 0x2,0x6e,0x2d, 0x2,0x6e,0x2c, 0x2,0x6e,0x31, 0x2,0x6e,0x32, + 0x2,0x6f,0x54, 0x3,0x60,0x4b, 0x2,0x6e,0x2e, 0x2,0x70,0x54, + 0x2,0x70,0x51, 0x2,0x70,0x52, 0x2,0x70,0x53, 0x1,0x7d,0x29, + 0x3,0x61,0x50, 0x2,0x71,0x40, 0x2,0x71,0x3f, 0x2,0x71,0x3e, + 0x2,0x71,0x5f, 0x3,0x61,0x6c, 0x2,0x72,0x2e, 0x2,0x71,0x79, + 0x1,0x7d,0x3b, 0x1,0x4b,0x4e, 0x1,0x58,0x45, 0x3,0x39,0x3f, + 0xf,0x38,0x6c, 0x3,0x39,0x40, 0x3,0x3f,0x40, 0x3,0x44,0x73, + 0x1,0x67,0x23, 0x3,0x49,0x7d, 0x3,0x49,0x7c, 0x3,0x4f,0x30, + 0x3,0x4f,0x32, 0x3,0x4f,0x2f, 0x3,0x4f,0x31, 0x1,0x6f,0x41, + 0x3,0x66,0x52, 0x2,0x5a,0x74, 0xf,0x58,0x33, 0x3,0x59,0x35, + 0x1,0x77,0x4a, 0x3,0x59,0x36, 0x2,0x67,0x41, 0x3,0x5b,0x3f, + 0x4,0x61,0x56, 0x3,0x5d,0x38, 0x4,0x67,0x51, 0x2,0x71,0x7a, + 0x1,0x4b,0x4f, 0x1,0x4f,0x51, 0x1,0x53,0x5c, 0x1,0x53,0x5b, + 0x5,0x30,0x55, 0x1,0x58,0x48, 0x3,0x34,0x21, 0x2,0x33,0x2c, + 0x1,0x58,0x46, 0x2,0x33,0x2d, 0x1,0x58,0x47, 0x3,0x66,0x53, + 0x3,0x39,0x41, 0x2,0x39,0x62, 0x2,0x39,0x5e, 0x3,0x39,0x47, + 0x4,0x35,0x63, 0x1,0x5d,0x53, 0x2,0x39,0x61, 0x2,0x39,0x60, + 0x2,0x39,0x5f, 0x1,0x5d,0x54, 0x2,0x39,0x63, 0x2,0x39,0x64, + 0x3,0x3f,0x45, 0x2,0x40,0x68, 0x2,0x40,0x66, 0x2,0x40,0x6a, + 0x2,0x40,0x6b, 0x2,0x40,0x71, 0x3,0x3f,0x47, 0x2,0x40,0x6d, + 0x2,0x40,0x6f, 0x5,0x43,0x50, 0x2,0x40,0x67, 0x2,0x40,0x62, + 0x4,0x3b,0x55, 0x2,0x40,0x6e, 0x3,0x3f,0x44, 0x3,0x3f,0x46, + 0x2,0x40,0x70, 0x2,0x40,0x69, 0x2,0x40,0x6c, 0x2,0x40,0x63, + 0x1,0x62,0x49, 0x2,0x40,0x65, 0x2,0x40,0x64, 0x1,0x62,0x48, + 0x1,0x62,0x4a, 0x3,0x3f,0x49, 0x1,0x67,0x26, 0x2,0x47,0x7b, + 0x2,0x47,0x7d, 0x2,0x47,0x7c, 0x2,0x48,0x23, 0x1,0x67,0x24, + 0x3,0x44,0x76, 0x2,0x47,0x7e, 0x2,0x47,0x7a, 0x2,0x48,0x21, + 0x2,0x48,0x22, 0x1,0x67,0x25, 0x1,0x67,0x27, 0x2,0x48,0x24, + 0x2,0x4e,0x4f, 0x2,0x4e,0x4e, 0x4,0x47,0x6a, 0x2,0x4e,0x4c, + 0x2,0x4e,0x4d, 0x1,0x6b,0x3b, 0x1,0x6b,0x3d, 0x1,0x6b,0x3a, + 0x1,0x6b,0x3c, 0x2,0x54,0x75, 0x2,0x54,0x76, 0x2,0x54,0x71, + 0x3,0x4f,0x36, 0x2,0x54,0x72, 0x1,0x6f,0x43, 0x1,0x6f,0x48, + 0x1,0x6f,0x42, 0x1,0x6f,0x49, 0x1,0x6f,0x44, 0x2,0x54,0x73, + 0x4,0x4e,0x2d, 0x3,0x4f,0x33, 0x2,0x54,0x74, 0x2,0x54,0x70, + 0x1,0x6f,0x4a, 0x1,0x6f,0x46, 0x3,0x4f,0x35, 0x4,0x4e,0x2b, + 0x1,0x6f,0x45, 0x1,0x6f,0x47, 0x3,0x4f,0x34, 0x2,0x54,0x6f, + 0x3,0x53,0x24, 0x2,0x5a,0x76, 0x1,0x72,0x52, 0x3,0x53,0x22, + 0x3,0x53,0x21, 0x2,0x5a,0x78, 0x1,0x72,0x54, 0x2,0x5a,0x7b, + 0x2,0x5a,0x77, 0x2,0x5a,0x75, 0x2,0x5a,0x7a, 0x1,0x72,0x53, + 0x2,0x5a,0x79, 0x7,0x34,0x32, 0x1,0x72,0x51, 0x3,0x53,0x25, + 0x3,0x56,0x59, 0x1,0x75,0x5e, 0x1,0x75,0x61, 0x2,0x5f,0x6d, + 0x3,0x56,0x5a, 0x1,0x75,0x5f, 0x2,0x5f,0x6c, 0x1,0x75,0x5d, + 0x1,0x75,0x60, 0x2,0x63,0x70, 0x2,0x63,0x71, 0x2,0x63,0x72, + 0x1,0x77,0x4b, 0x3,0x59,0x37, 0x2,0x63,0x73, 0x1,0x77,0x4c, + 0x1,0x79,0x2f, 0x2,0x67,0x44, 0x2,0x67,0x45, 0x2,0x67,0x43, + 0x2,0x67,0x42, 0x2,0x67,0x46, 0x1,0x79,0x2e, 0x2,0x6a,0x2b, + 0x2,0x6a,0x29, 0x2,0x6a,0x2a, 0x2,0x6a,0x2c, 0x2,0x6a,0x28, + 0x2,0x6a,0x2d, 0x2,0x6c,0x47, 0x3,0x5e,0x67, 0x2,0x6c,0x48, + 0x2,0x6c,0x46, 0x1,0x7b,0x32, 0x2,0x6e,0x33, 0x1,0x7b,0x79, + 0x2,0x6e,0x34, 0x2,0x6f,0x56, 0x2,0x6f,0x55, 0x3,0x62,0x22, + 0x1,0x4b,0x50, 0x1,0x62,0x4b, 0x3,0x3f,0x4b, 0x3,0x44,0x77, + 0x1,0x67,0x28, 0x3,0x44,0x78, 0x3,0x4a,0x21, 0x3,0x4a,0x22, + 0x1,0x6b,0x3e, 0x3,0x4f,0x37, 0x3,0x53,0x27, 0x1,0x72,0x56, + 0x3,0x53,0x26, 0x1,0x72,0x55, 0x3,0x66,0x54, 0x3,0x59,0x38, + 0x1,0x79,0x30, 0x1,0x7a,0x29, 0x1,0x7b,0x33, 0x1,0x4b,0x51, + 0x1,0x58,0x49, 0x1,0x67,0x29, 0x3,0x4f,0x39, 0x2,0x67,0x47, + 0x3,0x27,0x2f, 0x4,0x21,0x54, 0xf,0x21,0x6a, 0x4,0x23,0x30, + 0x3,0x24,0x3b, 0xf,0x22,0x71, 0xf,0x22,0x72, 0x3,0x27,0x30, + 0x2,0x25,0x26, 0x4,0x25,0x21, 0x3,0x27,0x33, 0x1,0x4b,0x52, + 0x4,0x25,0x23, 0x1,0x4b,0x55, 0x1,0x4b,0x54, 0x1,0x4b,0x53, + 0x3,0x27,0x31, 0xf,0x25,0x32, 0x2,0x25,0x25, 0x3,0x2a,0x72, + 0x2,0x28,0x6d, 0x3,0x2a,0x70, 0x2,0x28,0x6f, 0x1,0x4f,0x52, + 0x3,0x2a,0x74, 0x4,0x28,0x26, 0x1,0x4f,0x54, 0x2,0x28,0x6c, + 0x2,0x28,0x6e, 0x1,0x4f,0x53, 0x2,0x28,0x71, 0x2,0x28,0x70, + 0x2,0x28,0x72, 0x3,0x2a,0x73, 0x3,0x2a,0x71, 0xf,0x28,0x71, + 0xf,0x28,0x6e, 0x2,0x2d,0x57, 0x2,0x2d,0x55, 0x1,0x53,0x5f, + 0x2,0x2d,0x54, 0x1,0x53,0x64, 0x1,0x53,0x61, 0x1,0x53,0x5e, + 0x3,0x2f,0x31, 0x1,0x53,0x65, 0x3,0x2f,0x32, 0x1,0x53,0x60, + 0x1,0x53,0x63, 0x6,0x34,0x60, 0x1,0x53,0x62, 0x2,0x2d,0x56, + 0x3,0x2f,0x33, 0x1,0x53,0x5d, 0x3,0x2f,0x30, 0x1,0x58,0x4f, + 0x2,0x33,0x2f, 0x2,0x33,0x35, 0x1,0x58,0x4c, 0x1,0x58,0x53, + 0x3,0x34,0x25, 0x1,0x58,0x4e, 0x2,0x33,0x32, 0x2,0x33,0x34, + 0x1,0x58,0x51, 0x2,0x33,0x2e, 0x2,0x33,0x31, 0x1,0x58,0x4d, + 0x1,0x58,0x4a, 0x2,0x33,0x30, 0x1,0x58,0x50, 0x2,0x33,0x33, + 0x1,0x58,0x52, 0x1,0x58,0x4b, 0x4,0x30,0x2f, 0x3,0x34,0x27, + 0x3,0x34,0x26, 0x2,0x39,0x66, 0x2,0x39,0x69, 0x1,0x5d,0x56, + 0x3,0x39,0x4b, 0x1,0x5d,0x60, 0x1,0x5d,0x5c, 0x2,0x39,0x67, + 0x3,0x39,0x4a, 0x3,0x39,0x4e, 0x1,0x5d,0x64, 0x1,0x5d,0x5d, + 0x1,0x5d,0x62, 0x1,0x5d,0x58, 0x4,0x35,0x68, 0x1,0x5d,0x55, + 0x1,0x5d,0x57, 0x1,0x5d,0x63, 0x2,0x39,0x68, 0x1,0x5d,0x5b, + 0x1,0x5d,0x5e, 0x1,0x5d,0x5a, 0x1,0x5d,0x5f, 0x2,0x39,0x6a, + 0x1,0x5d,0x61, 0x1,0x5d,0x59, 0x2,0x39,0x65, 0x3,0x39,0x4c, + 0x3,0x3f,0x4f, 0x3,0x3f,0x50, 0x3,0x3f,0x4d, 0x3,0x3f,0x4c, + 0x3,0x3f,0x51, 0x2,0x40,0x72, 0x1,0x62,0x4c, 0x2,0x40,0x74, + 0x3,0x3f,0x55, 0x1,0x62,0x4e, 0x1,0x62,0x50, 0x4,0x35,0x66, + 0x2,0x40,0x73, 0x1,0x62,0x4d, 0x1,0x62,0x51, 0x3,0x3f,0x56, + 0x1,0x62,0x4f, 0x3,0x3f,0x54, 0x3,0x3f,0x57, 0x1,0x67,0x2f, + 0x2,0x48,0x29, 0x1,0x67,0x37, 0x2,0x48,0x26, 0x3,0x44,0x7d, + 0x1,0x67,0x38, 0x1,0x67,0x2d, 0x3,0x44,0x79, 0x2,0x48,0x27, + 0x3,0x44,0x7c, 0x3,0x44,0x7a, 0x1,0x67,0x32, 0x3,0x44,0x7b, + 0x2,0x48,0x28, 0x1,0x67,0x2b, 0x1,0x67,0x2a, 0x3,0x44,0x7e, + 0x1,0x67,0x35, 0x1,0x67,0x34, 0x1,0x67,0x33, 0x1,0x67,0x31, + 0x1,0x67,0x36, 0x2,0x48,0x25, 0x1,0x67,0x2c, 0x1,0x67,0x2e, + 0x1,0x67,0x30, 0x1,0x6b,0x40, 0x1,0x6b,0x43, 0x3,0x4a,0x24, + 0x1,0x6b,0x47, 0x1,0x6b,0x41, 0x1,0x6b,0x46, 0x1,0x6b,0x44, + 0x3,0x4a,0x27, 0x1,0x6b,0x3f, 0x3,0x4a,0x26, 0x1,0x6b,0x45, + 0x1,0x6b,0x42, 0xf,0x4c,0x6b, 0x4,0x4e,0x32, 0x2,0x54,0x7a, + 0x1,0x6f,0x4d, 0x1,0x6f,0x4b, 0x3,0x4f,0x3c, 0x2,0x54,0x7b, + 0x4,0x4e,0x33, 0x1,0x6f,0x4e, 0x1,0x6f,0x4c, 0x2,0x54,0x79, + 0x2,0x54,0x78, 0x3,0x4f,0x3b, 0x1,0x72,0x5a, 0x2,0x54,0x77, + 0x1,0x72,0x58, 0x1,0x72,0x57, 0x2,0x5a,0x7c, 0x1,0x6f,0x4f, + 0x1,0x72,0x59, 0x2,0x5a,0x7d, 0x1,0x72,0x5c, 0x2,0x5a,0x7e, + 0x1,0x72,0x5b, 0x1,0x75,0x63, 0x2,0x5f,0x6f, 0x1,0x75,0x62, + 0x1,0x75,0x67, 0x1,0x75,0x65, 0x1,0x75,0x66, 0x1,0x77,0x4e, + 0x1,0x75,0x64, 0x2,0x5f,0x6e, 0x2,0x5b,0x21, 0x1,0x77,0x4d, + 0x1,0x77,0x4f, 0x3,0x59,0x3a, 0x1,0x79,0x31, 0x1,0x79,0x32, + 0x4,0x61,0x5f, 0x2,0x6a,0x2e, 0x4,0x69,0x52, 0x1,0x7c,0x4a, + 0x1,0x7c,0x49, 0x1,0x4b,0x57, 0x3,0x22,0x5e, 0x3,0x22,0x5d, + 0x2,0x22,0x75, 0x1,0x58,0x54, 0x3,0x24,0x3c, 0x2,0x22,0x72, + 0x2,0x22,0x73, 0x2,0x22,0x71, 0x3,0x24,0x3d, 0x2,0x22,0x74, + 0x3,0x66,0x55, 0x2,0x25,0x2a, 0x2,0x25,0x27, 0x2,0x25,0x2c, + 0x2,0x25,0x28, 0x1,0x4b,0x58, 0x1,0x4b,0x5b, 0x3,0x27,0x35, + 0x2,0x25,0x29, 0x1,0x4b,0x5a, 0x2,0x25,0x2b, 0x3,0x27,0x39, + 0x3,0x27,0x34, 0x1,0x4b,0x59, 0x3,0x39,0x51, 0x3,0x2a,0x77, + 0x4,0x28,0x2b, 0x2,0x28,0x75, 0x2,0x28,0x77, 0x1,0x4f,0x57, + 0x2,0x28,0x73, 0x2,0x28,0x76, 0x2,0x28,0x74, 0x1,0x4f,0x55, + 0x1,0x4f,0x58, 0x3,0x2a,0x75, 0x1,0x4f,0x56, 0x3,0x2a,0x78, + 0x3,0x2f,0x35, 0x2,0x2d,0x59, 0x2,0x2d,0x5d, 0x2,0x2d,0x5a, + 0x3,0x2f,0x38, 0x1,0x53,0x68, 0x3,0x2f,0x34, 0x1,0x53,0x69, + 0x3,0x2f,0x3e, 0x2,0x2d,0x5c, 0x3,0x2f,0x37, 0x2,0x2d,0x5e, + 0x2,0x2d,0x60, 0x3,0x2f,0x3c, 0x1,0x53,0x66, 0x2,0x2d,0x5f, + 0x4,0x41,0x39, 0x3,0x2f,0x3b, 0x1,0x53,0x67, 0xf,0x45,0x6d, + 0x2,0x39,0x71, 0x2,0x2d,0x5b, 0x2,0x33,0x36, 0x2,0x33,0x3f, + 0x2,0x33,0x3d, 0x2,0x33,0x38, 0x2,0x33,0x39, 0x2,0x33,0x3e, + 0x2,0x33,0x40, 0x1,0x58,0x56, 0x3,0x34,0x29, 0x2,0x33,0x3b, + 0x2,0x33,0x37, 0x1,0x58,0x55, 0x1,0x58,0x57, 0x2,0x33,0x3a, + 0x2,0x33,0x41, 0x2,0x33,0x3c, 0x1,0x5d,0x65, 0x2,0x39,0x74, + 0x2,0x39,0x6c, 0x2,0x39,0x72, 0x2,0x39,0x73, 0x1,0x5d,0x66, + 0x3,0x39,0x4f, 0x2,0x39,0x6b, 0x2,0x39,0x6d, 0x2,0x2d,0x58, + 0x2,0x39,0x6f, 0x2,0x39,0x70, 0x2,0x39,0x6e, 0x1,0x62,0x53, + 0x4,0x4e,0x3b, 0x3,0x39,0x52, 0x2,0x40,0x7b, 0x2,0x5b,0x22, + 0x2,0x40,0x7c, 0x2,0x40,0x79, 0x1,0x5d,0x67, 0x1,0x62,0x55, + 0x2,0x40,0x78, 0x2,0x40,0x7e, 0x2,0x40,0x7d, 0x1,0x62,0x52, + 0x2,0x41,0x23, 0x2,0x40,0x77, 0x2,0x41,0x22, 0x2,0x40,0x75, + 0x2,0x41,0x21, 0x2,0x40,0x7a, 0x1,0x62,0x54, 0x3,0x3f,0x59, + 0x2,0x48,0x30, 0x3,0x45,0x23, 0x2,0x48,0x2b, 0x2,0x48,0x31, + 0x2,0x48,0x2c, 0x2,0x48,0x2a, 0x2,0x48,0x2d, 0x1,0x67,0x39, + 0x3,0x45,0x24, 0x2,0x48,0x2f, 0x3,0x45,0x25, 0x2,0x48,0x2e, + 0x1,0x67,0x3a, 0x1,0x6b,0x49, 0x1,0x6b,0x48, 0x2,0x4e,0x56, + 0x2,0x4e,0x59, 0x2,0x4e,0x51, 0x2,0x4e,0x55, 0x1,0x6b,0x4a, + 0x2,0x4e,0x54, 0x2,0x4e,0x52, 0x2,0x4e,0x58, 0x2,0x4e,0x53, + 0x2,0x4e,0x50, 0x2,0x4e,0x57, 0x3,0x4a,0x2a, 0x2,0x55,0x23, + 0x1,0x6f,0x52, 0x2,0x63,0x74, 0x2,0x54,0x7e, 0x2,0x55,0x21, + 0x2,0x54,0x7d, 0x2,0x40,0x76, 0x1,0x6f,0x51, 0x2,0x55,0x24, + 0x2,0x54,0x7c, 0x1,0x6f,0x50, 0x1,0x6f,0x53, 0x2,0x55,0x22, + 0x2,0x5b,0x23, 0x1,0x72,0x5d, 0x2,0x5b,0x24, 0x2,0x5b,0x25, + 0x3,0x53,0x2b, 0x2,0x5f,0x70, 0x1,0x75,0x68, 0x2,0x63,0x75, + 0x2,0x63,0x76, 0x3,0x59,0x3c, 0x3,0x59,0x3b, 0x2,0x63,0x77, + 0x2,0x67,0x49, 0x2,0x67,0x48, 0x2,0x6a,0x30, 0x2,0x6a,0x2f, + 0x2,0x6c,0x4a, 0x2,0x6c,0x4b, 0x2,0x6c,0x49, 0x2,0x6e,0x35, + 0x1,0x7b,0x7a, 0x1,0x4b,0x5c, 0x1,0x53,0x6b, 0x1,0x53,0x6a, + 0x1,0x58,0x5a, 0x1,0x58,0x59, 0x2,0x33,0x43, 0x2,0x33,0x44, + 0x2,0x33,0x42, 0x3,0x34,0x2a, 0x1,0x58,0x58, 0x2,0x39,0x78, + 0x3,0x39,0x55, 0x2,0x39,0x79, 0x2,0x39,0x75, 0x1,0x5d,0x68, + 0x2,0x39,0x76, 0x3,0x39,0x54, 0x2,0x39,0x77, 0x3,0x66,0x57, + 0x2,0x41,0x26, 0x2,0x41,0x28, 0x2,0x41,0x24, 0x2,0x41,0x27, + 0x1,0x62,0x56, 0x2,0x41,0x25, 0x1,0x62,0x57, 0x3,0x45,0x28, + 0x2,0x42,0x79, 0x1,0x67,0x3d, 0x1,0x67,0x3c, 0x3,0x45,0x27, + 0x1,0x67,0x3b, 0x4,0x41,0x3a, 0x2,0x48,0x32, 0x2,0x48,0x33, + 0x4,0x41,0x3b, 0x2,0x4e,0x5b, 0x2,0x4e,0x5d, 0x1,0x6b,0x4e, + 0x1,0x6b,0x4b, 0x3,0x4a,0x2c, 0x1,0x6b,0x4d, 0x1,0x6b,0x4c, + 0x2,0x4e,0x5c, 0x2,0x4e,0x5a, 0x3,0x4a,0x2b, 0x3,0x4a,0x2d, + 0x2,0x55,0x2b, 0x2,0x55,0x28, 0x2,0x55,0x29, 0x1,0x6f,0x57, + 0x2,0x55,0x2a, 0x2,0x55,0x25, 0x2,0x55,0x26, 0x1,0x6f,0x54, + 0x3,0x4f,0x3f, 0x1,0x6f,0x55, 0x2,0x55,0x27, 0x1,0x6f,0x56, + 0x3,0x4f,0x40, 0x2,0x5b,0x29, 0x3,0x53,0x2d, 0x2,0x5b,0x2a, + 0x2,0x5b,0x27, 0x2,0x5b,0x28, 0x1,0x72,0x5e, 0x2,0x5b,0x26, + 0x4,0x54,0x42, 0x3,0x53,0x2c, 0x3,0x53,0x2f, 0x4,0x59,0x3f, + 0x2,0x5f,0x74, 0x2,0x5f,0x71, 0x2,0x5f,0x73, 0x1,0x75,0x6b, + 0x2,0x5f,0x77, 0x1,0x75,0x6a, 0x2,0x5f,0x75, 0x2,0x5f,0x78, + 0x2,0x5f,0x76, 0x2,0x5f,0x72, 0x1,0x75,0x69, 0x2,0x63,0x79, + 0x4,0x5e,0x24, 0x2,0x63,0x7a, 0x2,0x63,0x78, 0x3,0x59,0x3d, + 0x2,0x63,0x7c, 0x1,0x77,0x50, 0x1,0x77,0x51, 0x2,0x67,0x4b, + 0x1,0x79,0x34, 0x2,0x63,0x7b, 0x2,0x67,0x4a, 0x1,0x79,0x33, + 0x2,0x6a,0x33, 0x2,0x6a,0x34, 0x1,0x7a,0x4a, 0x2,0x6a,0x32, + 0x4,0x64,0x65, 0x2,0x6a,0x31, 0x2,0x6c,0x4c, 0x1,0x7b,0x34, + 0x3,0x5e,0x68, 0x2,0x6f,0x57, 0x2,0x70,0x56, 0x2,0x70,0x55, + 0x3,0x60,0x7e, 0x1,0x7c,0x6e, 0x1,0x7d,0x2a, 0x2,0x70,0x57, + 0x2,0x71,0x60, 0x3,0x61,0x6d, 0x1,0x7d,0x3c, 0x1,0x4b,0x5d, + 0x1,0x4f,0x59, 0x1,0x67,0x3e, 0x1,0x7a,0x4b, 0x1,0x4b,0x5e, + 0x1,0x53,0x6c, 0x1,0x5d,0x69, 0x1,0x62,0x58, 0x1,0x77,0x52, + 0x1,0x4f,0x5a, 0x2,0x2d,0x62, 0x2,0x2d,0x61, 0x2,0x33,0x45, + 0x3,0x34,0x30, 0x1,0x58,0x5d, 0x1,0x58,0x5b, 0x1,0x58,0x5f, + 0x2,0x33,0x47, 0x3,0x34,0x2d, 0x1,0x58,0x5e, 0x1,0x58,0x5c, + 0x3,0x34,0x2f, 0x3,0x34,0x2e, 0x3,0x34,0x31, 0x2,0x33,0x46, + 0x1,0x5d,0x6c, 0x2,0x3a,0x21, 0x3,0x39,0x58, 0x1,0x5d,0x6b, + 0x1,0x5d,0x6d, 0x2,0x3a,0x26, 0x1,0x5d,0x6f, 0x2,0x3a,0x23, + 0x2,0x3a,0x24, 0x2,0x39,0x7a, 0x1,0x5d,0x6e, 0x2,0x3a,0x27, + 0x4,0x35,0x7b, 0x3,0x39,0x57, 0x2,0x39,0x7c, 0x3,0x39,0x56, + 0x2,0x39,0x7d, 0x2,0x39,0x7b, 0x1,0x5d,0x6a, 0x3,0x39,0x59, + 0x2,0x3a,0x25, 0x2,0x39,0x7e, 0x2,0x3a,0x22, 0x2,0x41,0x34, + 0x3,0x3f,0x5d, 0x2,0x41,0x33, 0x2,0x41,0x31, 0x2,0x41,0x29, + 0x2,0x41,0x38, 0x2,0x41,0x2c, 0x2,0x41,0x36, 0x2,0x41,0x3d, + 0x2,0x41,0x35, 0x1,0x62,0x60, 0x3,0x3f,0x66, 0x1,0x62,0x5c, + 0x2,0x41,0x2a, 0x3,0x3f,0x60, 0x2,0x41,0x30, 0x1,0x62,0x5e, + 0x3,0x3f,0x68, 0x2,0x41,0x2f, 0x1,0x62,0x5f, 0x1,0x62,0x61, + 0x2,0x41,0x32, 0x3,0x3f,0x69, 0x1,0x62,0x59, 0x1,0x62,0x5a, + 0x2,0x41,0x3e, 0x2,0x41,0x3c, 0x3,0x3f,0x62, 0x2,0x41,0x3b, + 0x2,0x41,0x2d, 0x3,0x3f,0x65, 0x2,0x41,0x39, 0x4,0x3b,0x66, + 0x1,0x62,0x5d, 0x6,0x4f,0x6f, 0x3,0x3f,0x5e, 0x3,0x66,0x59, + 0x3,0x3f,0x63, 0x1,0x62,0x5b, 0x2,0x41,0x3a, 0x2,0x41,0x2b, + 0x2,0x41,0x2e, 0x2,0x41,0x37, 0x3,0x66,0x58, 0x2,0x4f,0x22, + 0x2,0x48,0x3d, 0x3,0x45,0x2e, 0x2,0x48,0x36, 0x2,0x48,0x49, + 0x2,0x48,0x52, 0x2,0x48,0x39, 0x1,0x67,0x49, 0x3,0x45,0x2b, + 0x2,0x48,0x46, 0x1,0x67,0x3f, 0x1,0x67,0x41, 0x1,0x67,0x4d, + 0x2,0x48,0x37, 0x3,0x45,0x37, 0x3,0x45,0x2f, 0x1,0x67,0x42, + 0x1,0x67,0x44, 0x1,0x67,0x4e, 0x1,0x67,0x43, 0x3,0x45,0x39, + 0x4,0x41,0x41, 0x4,0x41,0x46, 0x3,0x45,0x38, 0x1,0x67,0x4c, + 0x2,0x48,0x3f, 0x4,0x41,0x48, 0x2,0x48,0x34, 0x1,0x67,0x4a, + 0x2,0x48,0x3e, 0x1,0x67,0x46, 0x2,0x48,0x50, 0x1,0x67,0x4b, + 0x2,0x48,0x4e, 0x2,0x48,0x42, 0x2,0x48,0x4c, 0x1,0x67,0x48, + 0x2,0x48,0x35, 0x2,0x48,0x4f, 0x2,0x48,0x4a, 0x3,0x45,0x2a, + 0x2,0x48,0x51, 0x1,0x67,0x40, 0x4,0x41,0x40, 0x3,0x45,0x2d, + 0x1,0x67,0x4f, 0x1,0x67,0x45, 0x3,0x45,0x31, 0x3,0x45,0x29, + 0x2,0x48,0x3b, 0x3,0x45,0x34, 0x2,0x48,0x43, 0x2,0x48,0x47, + 0x3,0x45,0x33, 0x2,0x48,0x4b, 0x1,0x67,0x47, 0x2,0x48,0x3a, + 0x2,0x48,0x38, 0x2,0x48,0x44, 0x4,0x41,0x42, 0x4,0x41,0x43, + 0x3,0x45,0x32, 0x3,0x45,0x35, 0x2,0x48,0x41, 0x2,0x48,0x40, + 0x3,0x45,0x36, 0x2,0x48,0x45, 0x2,0x48,0x48, 0x2,0x48,0x4d, + 0x3,0x66,0x5a, 0xf,0x45,0x72, 0x4,0x47,0x75, 0x2,0x4e,0x60, + 0xf,0x4d,0x22, 0x1,0x6b,0x4f, 0x2,0x4e,0x6a, 0x2,0x4e,0x62, + 0x1,0x6b,0x55, 0x1,0x6b,0x59, 0x2,0x4e,0x73, 0x2,0x4e,0x7b, + 0x2,0x4e,0x6c, 0x1,0x6b,0x51, 0x3,0x4a,0x34, 0x2,0x4e,0x70, + 0x2,0x48,0x3c, 0x3,0x4a,0x35, 0x1,0x6b,0x52, 0x2,0x4e,0x77, + 0x2,0x4e,0x7c, 0x2,0x4e,0x74, 0x3,0x4a,0x2f, 0x2,0x4e,0x76, + 0x2,0x4f,0x21, 0x2,0x4e,0x78, 0x2,0x4e,0x66, 0x2,0x4e,0x6f, + 0x3,0x45,0x30, 0x3,0x4a,0x38, 0x1,0x6b,0x5a, 0x3,0x4a,0x33, + 0x1,0x6b,0x56, 0x2,0x4e,0x64, 0x2,0x4e,0x71, 0x1,0x6b,0x54, + 0x2,0x4e,0x6b, 0x1,0x6b,0x53, 0x2,0x4e,0x79, 0x2,0x4e,0x68, + 0x2,0x4e,0x61, 0x1,0x6b,0x57, 0x2,0x4e,0x7e, 0x3,0x4a,0x39, + 0x4,0x47,0x77, 0x2,0x4e,0x63, 0x2,0x4e,0x75, 0x2,0x4e,0x72, + 0x2,0x4e,0x6d, 0x2,0x4e,0x5f, 0x2,0x4e,0x5e, 0x2,0x4e,0x67, + 0x2,0x4e,0x7a, 0x1,0x6b,0x58, 0x2,0x4e,0x7d, 0x2,0x4e,0x65, + 0x2,0x4e,0x69, 0x1,0x6b,0x50, 0x3,0x4a,0x32, 0x3,0x4a,0x37, + 0xf,0x4d,0x27, 0x3,0x67,0x2a, 0x3,0x4a,0x31, 0x1,0x6f,0x63, + 0x1,0x6f,0x5e, 0x2,0x55,0x4d, 0x2,0x55,0x49, 0x2,0x55,0x31, + 0x1,0x6f,0x5a, 0x3,0x4f,0x42, 0x3,0x4f,0x50, 0x4,0x4e,0x45, + 0x1,0x6f,0x59, 0x1,0x6f,0x5f, 0x4,0x4e,0x47, 0x3,0x4f,0x43, + 0x3,0x4f,0x41, 0x2,0x55,0x2f, 0x1,0x6f,0x5d, 0x2,0x55,0x3b, + 0x2,0x55,0x2d, 0x2,0x55,0x2e, 0x1,0x6f,0x58, 0x2,0x55,0x4c, + 0x1,0x6f,0x61, 0x2,0x55,0x3e, 0x2,0x55,0x43, 0x2,0x55,0x3d, + 0x2,0x5b,0x3c, 0x2,0x55,0x39, 0x2,0x55,0x41, 0x2,0x55,0x3f, + 0x2,0x55,0x32, 0x2,0x55,0x2c, 0x2,0x55,0x47, 0x1,0x6f,0x60, + 0x2,0x55,0x48, 0x3,0x4f,0x48, 0x2,0x55,0x42, 0x3,0x4f,0x49, + 0x2,0x55,0x37, 0x2,0x55,0x35, 0x2,0x55,0x30, 0x3,0x4f,0x4b, + 0x3,0x4f,0x4e, 0x3,0x4f,0x44, 0x2,0x55,0x38, 0x2,0x55,0x45, + 0x2,0x55,0x34, 0x2,0x55,0x44, 0x2,0x55,0x4a, 0x3,0x4f,0x51, + 0x4,0x4e,0x46, 0x1,0x6f,0x5c, 0x3,0x4f,0x45, 0x2,0x55,0x40, + 0x2,0x55,0x46, 0x2,0x55,0x3c, 0x2,0x55,0x36, 0x1,0x6f,0x5b, + 0x3,0x4f,0x52, 0x4,0x4e,0x44, 0x3,0x4f,0x4c, 0x2,0x4e,0x6e, + 0x2,0x55,0x3a, 0x1,0x6f,0x62, 0x2,0x55,0x33, 0xf,0x52,0x6b, + 0x3,0x4f,0x4d, 0x3,0x66,0x5b, 0x3,0x66,0x5c, 0x3,0x4a,0x30, + 0x2,0x5b,0x41, 0x1,0x72,0x61, 0x2,0x5b,0x40, 0x2,0x5b,0x3e, + 0x2,0x5b,0x50, 0x1,0x72,0x65, 0x3,0x53,0x35, 0x2,0x5b,0x4d, + 0x2,0x5b,0x45, 0x2,0x5b,0x4f, 0x2,0x5b,0x37, 0x2,0x5b,0x43, + 0x3,0x53,0x3d, 0x1,0x72,0x67, 0x3,0x53,0x3e, 0x2,0x5b,0x2f, + 0x3,0x53,0x38, 0x2,0x5b,0x2d, 0x2,0x5b,0x4e, 0x3,0x53,0x32, + 0x2,0x5b,0x4c, 0x2,0x5b,0x4b, 0x2,0x5b,0x3b, 0x2,0x5b,0x3a, + 0x2,0x5b,0x30, 0x1,0x72,0x69, 0x4,0x54,0x43, 0x2,0x5b,0x36, + 0x2,0x5b,0x3f, 0x2,0x5b,0x4a, 0x1,0x72,0x6c, 0x2,0x5b,0x51, + 0x3,0x53,0x36, 0x1,0x75,0x73, 0x1,0x72,0x6e, 0x1,0x72,0x68, + 0x2,0x5b,0x34, 0x3,0x53,0x37, 0x2,0x5b,0x3d, 0x2,0x5b,0x2c, + 0x2,0x5b,0x2e, 0x1,0x72,0x5f, 0x1,0x72,0x6b, 0x1,0x72,0x64, + 0x2,0x5b,0x35, 0x2,0x5b,0x44, 0x2,0x55,0x4b, 0x1,0x72,0x6a, + 0x2,0x5b,0x2b, 0x1,0x75,0x6e, 0x2,0x5b,0x46, 0x2,0x5b,0x49, + 0x1,0x72,0x66, 0x3,0x53,0x3b, 0x2,0x5b,0x39, 0x1,0x72,0x6d, + 0x1,0x72,0x63, 0x3,0x53,0x3c, 0x3,0x53,0x39, 0x3,0x53,0x3a, + 0x1,0x72,0x62, 0x2,0x5b,0x42, 0x2,0x5b,0x48, 0x1,0x72,0x60, + 0x4,0x54,0x45, 0x2,0x5b,0x32, 0x2,0x5b,0x47, 0xf,0x58,0x59, + 0xf,0x58,0x48, 0x2,0x5b,0x33, 0x7,0x34,0x63, 0x3,0x66,0x5d, + 0xf,0x58,0x55, 0x3,0x66,0x5e, 0x4,0x54,0x49, 0x3,0x53,0x31, + 0x2,0x5b,0x38, 0x2,0x5f,0x7e, 0x3,0x56,0x65, 0x2,0x60,0x25, + 0x1,0x75,0x70, 0x1,0x75,0x72, 0x2,0x60,0x2b, 0x1,0x75,0x6c, + 0x2,0x60,0x39, 0x2,0x60,0x31, 0x2,0x60,0x26, 0x2,0x60,0x27, + 0x2,0x60,0x30, 0x3,0x56,0x66, 0x1,0x75,0x79, 0x2,0x60,0x2f, + 0x2,0x5f,0x7d, 0x2,0x60,0x2e, 0x2,0x60,0x22, 0x2,0x60,0x3a, + 0x1,0x75,0x78, 0x1,0x75,0x76, 0x2,0x60,0x23, 0x3,0x56,0x5d, + 0x2,0x60,0x36, 0x3,0x56,0x67, 0x2,0x60,0x28, 0x2,0x60,0x35, + 0x3,0x56,0x64, 0x2,0x60,0x37, 0x2,0x5f,0x7c, 0x1,0x75,0x71, + 0x3,0x56,0x5b, 0x2,0x60,0x38, 0x3,0x56,0x68, 0x3,0x56,0x5e, + 0x2,0x60,0x2c, 0x3,0x56,0x6b, 0x1,0x75,0x75, 0x2,0x60,0x29, + 0x3,0x56,0x61, 0x4,0x59,0x49, 0x1,0x75,0x77, 0x2,0x60,0x32, + 0x3,0x56,0x62, 0x3,0x56,0x63, 0x3,0x56,0x5f, 0x1,0x75,0x6f, + 0x2,0x60,0x24, 0x2,0x60,0x33, 0x3,0x56,0x5c, 0x2,0x60,0x2d, + 0x2,0x5b,0x31, 0x2,0x60,0x34, 0x2,0x60,0x21, 0x3,0x56,0x60, + 0x1,0x75,0x74, 0x3,0x56,0x6a, 0x2,0x64,0x2f, 0x4,0x59,0x47, + 0x1,0x75,0x6d, 0x2,0x5f,0x7a, 0x4,0x59,0x46, 0xf,0x5d,0x41, + 0x3,0x66,0x5f, 0xf,0x5d,0x39, 0x2,0x64,0x2c, 0x2,0x64,0x25, + 0x1,0x77,0x54, 0x3,0x59,0x43, 0x2,0x63,0x7e, 0x2,0x64,0x30, + 0x2,0x64,0x27, 0x2,0x60,0x2a, 0x3,0x59,0x40, 0x2,0x64,0x32, + 0x2,0x64,0x21, 0x3,0x59,0x42, 0x1,0x77,0x53, 0x2,0x64,0x2b, + 0x1,0x77,0x55, 0x1,0x77,0x5d, 0x1,0x77,0x5b, 0x2,0x64,0x2d, + 0x1,0x77,0x5c, 0x2,0x64,0x23, 0x3,0x59,0x49, 0x2,0x64,0x24, + 0x2,0x64,0x29, 0x2,0x64,0x2e, 0x3,0x59,0x3e, 0x2,0x5f,0x79, + 0x1,0x77,0x56, 0x2,0x64,0x37, 0x2,0x64,0x34, 0x2,0x67,0x61, + 0x2,0x64,0x2a, 0x2,0x64,0x26, 0x2,0x64,0x35, 0x2,0x67,0x56, + 0x2,0x64,0x28, 0x4,0x5e,0x31, 0x1,0x77,0x59, 0x3,0x59,0x44, + 0x1,0x77,0x58, 0x2,0x5f,0x7b, 0x1,0x77,0x5a, 0x2,0x64,0x31, + 0x2,0x64,0x33, 0x1,0x77,0x57, 0x2,0x64,0x36, 0x2,0x63,0x7d, + 0x4,0x5e,0x29, 0x2,0x64,0x22, 0x3,0x59,0x46, 0xf,0x61,0x33, + 0x3,0x59,0x45, 0x3,0x66,0x61, 0x3,0x66,0x62, 0x3,0x66,0x60, + 0xf,0x61,0x43, 0x2,0x67,0x5f, 0x3,0x5b,0x50, 0x2,0x67,0x4f, + 0x1,0x79,0x38, 0x2,0x67,0x5d, 0x3,0x5b,0x44, 0x3,0x5b,0x45, + 0x2,0x67,0x4d, 0x1,0x79,0x39, 0x4,0x61,0x67, 0x2,0x67,0x58, + 0x3,0x5b,0x43, 0x2,0x67,0x54, 0x1,0x79,0x3e, 0x2,0x67,0x5e, + 0x2,0x67,0x4e, 0x2,0x67,0x51, 0x1,0x79,0x36, 0x2,0x67,0x60, + 0x3,0x5b,0x48, 0x2,0x67,0x59, 0x2,0x67,0x5c, 0x1,0x79,0x3c, + 0x1,0x79,0x41, 0x1,0x79,0x3f, 0x2,0x67,0x55, 0x2,0x67,0x50, + 0x3,0x5b,0x4d, 0x1,0x79,0x3a, 0x1,0x79,0x3b, 0x2,0x67,0x4c, + 0x1,0x79,0x37, 0x3,0x5b,0x4f, 0x1,0x79,0x35, 0x1,0x79,0x3d, + 0x2,0x67,0x5b, 0x1,0x79,0x40, 0x3,0x5b,0x4a, 0x2,0x67,0x57, + 0x2,0x67,0x62, 0x1,0x79,0x42, 0x3,0x5b,0x41, 0x3,0x5b,0x42, + 0x3,0x5b,0x4e, 0x2,0x67,0x53, 0x3,0x5b,0x47, 0x2,0x67,0x5a, + 0x3,0x66,0x65, 0x3,0x66,0x63, 0x3,0x66,0x64, 0x3,0x5d,0x41, + 0x3,0x5e,0x6a, 0x2,0x6a,0x41, 0x2,0x6a,0x50, 0x2,0x6a,0x43, + 0x2,0x6a,0x4a, 0x2,0x67,0x52, 0x2,0x6a,0x48, 0x2,0x6a,0x37, + 0x2,0x6a,0x4e, 0x1,0x7a,0x4e, 0x2,0x6a,0x3b, 0x2,0x6a,0x4d, + 0x2,0x6a,0x42, 0x4,0x64,0x67, 0x3,0x5d,0x43, 0x1,0x7a,0x4d, + 0x3,0x5d,0x3c, 0x3,0x5d,0x3f, 0x2,0x6a,0x52, 0x2,0x6a,0x44, + 0x3,0x5d,0x3e, 0x2,0x6a,0x49, 0x2,0x6a,0x4c, 0x2,0x6a,0x35, + 0x2,0x6a,0x4f, 0x2,0x6a,0x40, 0x2,0x6a,0x45, 0x2,0x6a,0x39, + 0x2,0x6a,0x3d, 0x2,0x6a,0x51, 0x2,0x6a,0x47, 0x2,0x6a,0x36, + 0x2,0x6a,0x3a, 0x2,0x6a,0x3c, 0x2,0x6a,0x46, 0x3,0x5d,0x3d, + 0x1,0x7a,0x4c, 0x2,0x6a,0x3f, 0x3,0x5d,0x44, 0x3,0x5d,0x45, + 0x3,0x5d,0x47, 0x4,0x64,0x6b, 0x3,0x5d,0x42, 0x3,0x5d,0x3a, + 0x2,0x6a,0x38, 0x3,0x66,0x66, 0x3,0x66,0x67, 0x3,0x66,0x68, + 0xf,0x66,0x57, 0x3,0x5d,0x46, 0x2,0x6a,0x3e, 0x2,0x6c,0x50, + 0x2,0x6c,0x54, 0x1,0x7b,0x3b, 0x2,0x6c,0x56, 0x3,0x5e,0x6d, + 0x1,0x7b,0x35, 0x4,0x64,0x6f, 0x2,0x6c,0x52, 0x2,0x6c,0x58, + 0x1,0x7b,0x3a, 0x1,0x7b,0x36, 0x4,0x67,0x5c, 0x1,0x7b,0x37, + 0x2,0x6c,0x4f, 0x2,0x6c,0x55, 0x1,0x7b,0x39, 0x2,0x6c,0x53, + 0x1,0x7b,0x38, 0x2,0x6c,0x4e, 0x2,0x6a,0x4b, 0x2,0x6c,0x51, + 0x4,0x67,0x62, 0x2,0x6c,0x4d, 0x2,0x6c,0x57, 0x3,0x5f,0x69, + 0x3,0x5f,0x6e, 0x1,0x7b,0x7b, 0x2,0x6e,0x3c, 0x2,0x6e,0x3f, + 0x2,0x6e,0x3b, 0x2,0x6e,0x3d, 0x2,0x6e,0x3e, 0x2,0x6e,0x38, + 0x2,0x6e,0x39, 0x2,0x6e,0x36, 0x3,0x5f,0x6a, 0x3,0x5f,0x6c, + 0x2,0x6e,0x3a, 0x2,0x6e,0x37, 0x1,0x7b,0x7c, 0x1,0x7b,0x7d, + 0x3,0x5f,0x6b, 0x2,0x6f,0x59, 0x3,0x60,0x52, 0x2,0x6f,0x5b, + 0x4,0x6b,0x29, 0x5,0x76,0x5d, 0x3,0x60,0x55, 0x3,0x60,0x54, + 0x3,0x60,0x56, 0x2,0x6f,0x5a, 0x2,0x6f,0x5c, 0x3,0x60,0x4f, + 0x1,0x7c,0x4c, 0x3,0x60,0x53, 0x2,0x6f,0x58, 0x1,0x7c,0x4b, + 0x1,0x7c,0x4d, 0x3,0x60,0x57, 0x3,0x66,0x6a, 0x3,0x66,0x69, + 0x2,0x70,0x59, 0x2,0x70,0x5a, 0x1,0x7c,0x6f, 0x2,0x70,0x58, + 0x3,0x61,0x22, 0x2,0x71,0x42, 0x2,0x71,0x41, 0x2,0x71,0x43, + 0x1,0x7d,0x2c, 0x2,0x71,0x44, 0x1,0x7d,0x2b, 0x2,0x71,0x45, + 0x2,0x71,0x61, 0x2,0x71,0x64, 0x2,0x71,0x63, 0x1,0x7d,0x35, + 0x2,0x71,0x62, 0x4,0x6d,0x62, 0x3,0x61,0x6f, 0x3,0x62,0x23, + 0x1,0x7d,0x3f, 0x1,0x7d,0x3d, 0x1,0x7d,0x3e, 0x1,0x7d,0x44, + 0x2,0x72,0x30, 0x2,0x72,0x31, 0x2,0x72,0x2f, 0x2,0x72,0x37, + 0x3,0x62,0x36, 0x1,0x4f,0x5b, 0x4,0x25,0x2b, 0x4,0x30,0x3a, + 0x2,0x3a,0x28, 0x2,0x41,0x3f, 0x2,0x55,0x4e, 0x2,0x67,0x63, + 0x5,0x71,0x56, 0x1,0x4f,0x5c, 0x3,0x2f,0x40, 0x1,0x53,0x6d, + 0x1,0x58,0x60, 0x4,0x30,0x3b, 0x3,0x34,0x32, 0x2,0x3a,0x29, + 0x3,0x39,0x5c, 0x2,0x3a,0x2a, 0x1,0x5d,0x70, 0x1,0x62,0x64, + 0x2,0x41,0x41, 0x2,0x41,0x40, 0x1,0x62,0x68, 0x1,0x62,0x63, + 0x2,0x41,0x42, 0x1,0x62,0x65, 0x1,0x62,0x67, 0x1,0x62,0x66, + 0x1,0x62,0x62, 0x3,0x3f,0x6c, 0xf,0x3f,0x7e, 0x3,0x66,0x6b, + 0x1,0x67,0x50, 0x3,0x45,0x3c, 0x3,0x45,0x3a, 0x2,0x48,0x56, + 0x2,0x48,0x54, 0x4,0x41,0x53, 0x2,0x48,0x55, 0x2,0x48,0x53, + 0xf,0x45,0x7b, 0x1,0x6b,0x5b, 0x3,0x4a,0x3d, 0x1,0x6b,0x5e, + 0x1,0x6b,0x60, 0x1,0x6b,0x5f, 0x4,0x48,0x22, 0x3,0x4a,0x3e, + 0x1,0x6b,0x5c, 0x1,0x6b,0x5d, 0x2,0x55,0x50, 0x2,0x55,0x4f, + 0x1,0x6f,0x64, 0x2,0x55,0x51, 0x3,0x4f,0x53, 0x2,0x55,0x52, + 0x1,0x6f,0x65, 0x3,0x4f,0x55, 0x3,0x4f,0x56, 0x4,0x4e,0x4a, + 0x2,0x5b,0x59, 0x2,0x5b,0x57, 0x2,0x60,0x40, 0x3,0x53,0x42, + 0x2,0x5b,0x55, 0x2,0x5b,0x56, 0x1,0x72,0x6f, 0x2,0x5b,0x52, + 0x2,0x5b,0x5a, 0x2,0x5b,0x54, 0x2,0x5b,0x58, 0x2,0x60,0x3c, + 0x3,0x53,0x44, 0x3,0x53,0x40, 0x2,0x60,0x3e, 0x3,0x56,0x6d, + 0x2,0x60,0x3f, 0x1,0x75,0x7e, 0x2,0x60,0x3b, 0x1,0x75,0x7d, + 0x2,0x60,0x3d, 0x1,0x75,0x7a, 0x1,0x75,0x7b, 0x1,0x75,0x7c, + 0x2,0x5b,0x53, 0x3,0x66,0x6c, 0x1,0x77,0x60, 0x2,0x64,0x3a, + 0x2,0x64,0x38, 0x2,0x64,0x39, 0x1,0x77,0x5e, 0x1,0x77,0x61, + 0x1,0x77,0x5f, 0x3,0x59,0x4b, 0x3,0x59,0x4a, 0x7,0x4b,0x40, + 0x2,0x67,0x64, 0x2,0x67,0x65, 0x1,0x79,0x43, 0x3,0x5b,0x53, + 0x2,0x6a,0x53, 0x2,0x6a,0x55, 0x2,0x6a,0x54, 0x1,0x7a,0x4f, + 0x1,0x7b,0x3c, 0x2,0x6c,0x5b, 0x2,0x6c,0x5a, 0x2,0x6c,0x59, + 0xf,0x68,0x72, 0x3,0x66,0x6d, 0xf,0x25,0x39, 0x1,0x4f,0x5d, + 0x3,0x21,0x43, 0x2,0x21,0x69, 0x2,0x22,0x78, 0x1,0x48,0x6a, + 0x2,0x22,0x76, 0x2,0x22,0x79, 0x2,0x22,0x77, 0x4,0x25,0x2e, + 0x3,0x27,0x3b, 0x3,0x27,0x3a, 0x2,0x25,0x2e, 0x3,0x27,0x3f, + 0x1,0x4b,0x62, 0x3,0x27,0x3c, 0x1,0x4b,0x63, 0x2,0x25,0x30, + 0x1,0x4b,0x60, 0x2,0x25,0x2f, 0x2,0x25,0x2d, 0x1,0x4b,0x61, + 0x1,0x4b,0x5f, 0x3,0x27,0x3d, 0x3,0x27,0x3e, 0x3,0x2a,0x79, + 0x4,0x28,0x33, 0x2,0x28,0x78, 0x2,0x28,0x7b, 0x1,0x4f,0x60, + 0x2,0x28,0x7a, 0x2,0x28,0x79, 0x3,0x2a,0x7c, 0x1,0x4f,0x5f, + 0x1,0x4f,0x5e, 0x3,0x2a,0x7b, 0x1,0x4f,0x62, 0x2,0x28,0x7c, + 0x1,0x4f,0x61, 0x2,0x2d,0x67, 0x1,0x53,0x6f, 0x1,0x53,0x70, + 0x1,0x53,0x71, 0x2,0x2d,0x68, 0x2,0x2d,0x64, 0x1,0x53,0x6e, + 0x2,0x2d,0x65, 0x4,0x2b,0x5d, 0x2,0x2d,0x66, 0x2,0x2d,0x63, + 0x4,0x2b,0x5b, 0x3,0x34,0x36, 0x4,0x30,0x3f, 0x1,0x58,0x67, + 0x3,0x34,0x34, 0x3,0x39,0x5e, 0x1,0x58,0x64, 0x2,0x33,0x48, + 0x1,0x58,0x65, 0x1,0x58,0x68, 0x2,0x33,0x49, 0x3,0x34,0x33, + 0x1,0x58,0x63, 0x1,0x58,0x61, 0x1,0x58,0x62, 0x1,0x58,0x66, + 0x1,0x5d,0x71, 0x2,0x3a,0x2d, 0x1,0x5d,0x79, 0x2,0x3a,0x2c, + 0x3,0x39,0x61, 0x2,0x3a,0x2f, 0x1,0x5d,0x75, 0x2,0x3a,0x2e, + 0x1,0x62,0x70, 0x1,0x5d,0x73, 0x1,0x5d,0x76, 0x1,0x5d,0x72, + 0x1,0x5d,0x77, 0x1,0x5d,0x78, 0x1,0x5d,0x74, 0x3,0x39,0x65, + 0x3,0x3f,0x71, 0x2,0x3a,0x2b, 0x1,0x62,0x6c, 0x2,0x41,0x44, + 0x3,0x3f,0x72, 0x2,0x41,0x48, 0x3,0x3f,0x73, 0x3,0x3f,0x75, + 0x2,0x41,0x47, 0x1,0x62,0x71, 0x1,0x62,0x6d, 0x1,0x62,0x6e, + 0x2,0x41,0x43, 0x2,0x41,0x45, 0x2,0x41,0x46, 0x1,0x62,0x69, + 0x1,0x62,0x6b, 0x3,0x3f,0x70, 0x1,0x62,0x6f, 0x1,0x62,0x6a, + 0x3,0x45,0x40, 0x2,0x48,0x59, 0x2,0x48,0x57, 0x2,0x48,0x58, + 0x1,0x67,0x52, 0x1,0x67,0x53, 0x3,0x45,0x42, 0x2,0x48,0x5a, + 0x1,0x67,0x51, 0x1,0x6b,0x61, 0x4,0x48,0x24, 0x1,0x6b,0x63, + 0x1,0x6b,0x62, 0x3,0x4a,0x45, 0x2,0x4f,0x23, 0x3,0x4a,0x46, + 0x3,0x4a,0x44, 0x2,0x4f,0x24, 0x2,0x55,0x54, 0x3,0x4f,0x5a, + 0x2,0x55,0x53, 0x3,0x4f,0x5b, 0x4,0x54,0x52, 0x1,0x72,0x70, + 0x1,0x72,0x71, 0x2,0x5b,0x5b, 0x1,0x72,0x72, 0x3,0x53,0x48, + 0x2,0x60,0x43, 0x3,0x56,0x70, 0x2,0x60,0x41, 0x3,0x56,0x6f, + 0x2,0x60,0x42, 0x1,0x76,0x21, 0x3,0x56,0x71, 0x2,0x64,0x3b, + 0x1,0x79,0x44, 0x3,0x5d,0x49, 0x3,0x2a,0x7d, 0x3,0x53,0x49, + 0x1,0x76,0x22, 0x1,0x4f,0x63, 0x4,0x30,0x41, 0x1,0x58,0x69, + 0x2,0x33,0x4a, 0x3,0x34,0x39, 0xf,0x32,0x6f, 0x2,0x3a,0x30, + 0x1,0x5d,0x7a, 0x1,0x62,0x72, 0x2,0x41,0x49, 0x2,0x41,0x4b, + 0x1,0x62,0x74, 0x1,0x62,0x73, 0x1,0x62,0x75, 0x1,0x62,0x76, + 0x2,0x41,0x4a, 0x1,0x67,0x56, 0x1,0x67,0x57, 0x1,0x67,0x55, + 0x1,0x6b,0x64, 0x1,0x67,0x54, 0x2,0x48,0x5b, 0x4,0x41,0x57, + 0x3,0x4a,0x47, 0x3,0x4a,0x49, 0x1,0x6b,0x65, 0x2,0x55,0x55, + 0x2,0x5b,0x5c, 0x1,0x72,0x73, 0x1,0x76,0x23, 0x2,0x64,0x3c, + 0x2,0x64,0x40, 0x1,0x77,0x64, 0x2,0x64,0x3d, 0x1,0x77,0x65, + 0x1,0x77,0x63, 0x2,0x64,0x41, 0x1,0x77,0x66, 0x2,0x64,0x3f, + 0x2,0x67,0x66, 0x1,0x77,0x62, 0x1,0x79,0x45, 0x3,0x5e,0x70, + 0x2,0x70,0x5b, 0x3,0x61,0x25, 0x3,0x62,0x2f, 0x1,0x4f,0x64, + 0x1,0x5d,0x7c, 0x1,0x5d,0x7b, 0xf,0x39,0x2a, 0x3,0x3f,0x7e, + 0x3,0x3f,0x7c, 0x3,0x3f,0x7b, 0x1,0x62,0x77, 0x2,0x41,0x4d, + 0x2,0x41,0x4c, 0x1,0x62,0x78, 0x3,0x45,0x46, 0x2,0x48,0x5f, + 0x1,0x67,0x5b, 0x1,0x67,0x58, 0x2,0x48,0x5e, 0x1,0x67,0x5a, + 0x2,0x48,0x5c, 0x1,0x67,0x59, 0x3,0x45,0x47, 0x2,0x48,0x5d, + 0x2,0x4f,0x25, 0x1,0x6b,0x66, 0x2,0x55,0x58, 0x5,0x52,0x3b, + 0x1,0x6f,0x66, 0x2,0x55,0x56, 0x1,0x6f,0x67, 0x1,0x6f,0x68, + 0x2,0x55,0x57, 0x1,0x6f,0x69, 0x3,0x4f,0x60, 0x2,0x5b,0x5d, + 0x3,0x53,0x50, 0x1,0x72,0x77, 0x1,0x72,0x74, 0x1,0x72,0x79, + 0x2,0x5b,0x5f, 0x1,0x72,0x75, 0x2,0x5b,0x5e, 0x1,0x72,0x78, + 0x3,0x53,0x4d, 0x3,0x53,0x4c, 0x1,0x72,0x76, 0x3,0x53,0x51, + 0x2,0x60,0x46, 0x2,0x60,0x48, 0x3,0x56,0x74, 0x3,0x56,0x75, + 0x1,0x76,0x24, 0x2,0x60,0x47, 0x1,0x76,0x25, 0x2,0x60,0x45, + 0x2,0x60,0x44, 0x4,0x5e,0x38, 0x2,0x64,0x43, 0x2,0x64,0x42, + 0x1,0x77,0x67, 0x2,0x64,0x44, 0x2,0x67,0x6b, 0x1,0x79,0x47, + 0x2,0x67,0x6a, 0x2,0x67,0x67, 0x1,0x79,0x46, 0x2,0x67,0x68, + 0x2,0x67,0x69, 0x2,0x6a,0x56, 0x2,0x6a,0x57, 0x1,0x7a,0x50, + 0x3,0x5d,0x4f, 0x1,0x7b,0x3f, 0x3,0x5d,0x4c, 0x3,0x5d,0x4e, + 0x2,0x6c,0x5c, 0x3,0x5e,0x72, 0x3,0x5e,0x71, 0x1,0x7b,0x3d, + 0x1,0x7b,0x3e, 0x2,0x6c,0x5d, 0x3,0x66,0x6e, 0x3,0x5f,0x71, + 0x1,0x7b,0x7e, 0x1,0x7c,0x21, 0x2,0x6e,0x40, 0x3,0x5f,0x72, + 0x3,0x60,0x59, 0x1,0x7c,0x70, 0x2,0x70,0x5d, 0x1,0x7c,0x72, + 0x3,0x61,0x26, 0x2,0x70,0x5c, 0x2,0x70,0x5e, 0x1,0x7c,0x71, + 0x2,0x71,0x46, 0x4,0x6d,0x64, 0x2,0x71,0x7b, 0x3,0x66,0x6f, + 0x3,0x62,0x45, 0x3,0x2a,0x7e, 0x1,0x4f,0x65, 0x3,0x45,0x49, + 0x1,0x67,0x5c, 0x4,0x48,0x35, 0x2,0x4f,0x26, 0x3,0x4a,0x4c, + 0x2,0x55,0x59, 0x1,0x72,0x7a, 0x1,0x72,0x7b, 0x3,0x59,0x4f, + 0x1,0x4f,0x66, 0x3,0x40,0x21, 0x1,0x6f,0x6a, 0x1,0x79,0x48, + 0x1,0x53,0x72, 0x3,0x2b,0x21, 0x3,0x4a,0x4e, 0x1,0x72,0x7c, + 0x3,0x5e,0x73, 0x1,0x7c,0x4e, 0x1,0x53,0x73, 0x2,0x3a,0x31, + 0x4,0x3b,0x77, 0x2,0x41,0x4e, 0x3,0x40,0x24, 0x2,0x41,0x50, + 0x3,0x40,0x22, 0x2,0x41,0x4f, 0x2,0x48,0x63, 0x2,0x48,0x60, + 0x1,0x67,0x5d, 0x6,0x5a,0x24, 0x1,0x67,0x5e, 0x2,0x48,0x61, + 0x2,0x48,0x62, 0x3,0x45,0x4b, 0x2,0x4f,0x28, 0x2,0x4f,0x2d, + 0x1,0x6b,0x67, 0x2,0x4f,0x27, 0x2,0x4f,0x29, 0x2,0x4f,0x30, + 0x2,0x4f,0x2b, 0x2,0x4f,0x2f, 0x2,0x4f,0x2c, 0x2,0x4f,0x2a, + 0x2,0x4f,0x2e, 0x1,0x6b,0x68, 0x3,0x4f,0x62, 0x2,0x55,0x5c, + 0x3,0x4f,0x63, 0x2,0x55,0x5a, 0x1,0x6f,0x6c, 0x3,0x4f,0x64, + 0x1,0x6f,0x6b, 0x2,0x55,0x5b, 0x1,0x6f,0x6d, 0x3,0x53,0x53, + 0x2,0x5b,0x62, 0x4,0x54,0x5f, 0x4,0x54,0x67, 0x2,0x5b,0x61, + 0x1,0x72,0x7d, 0x2,0x5b,0x60, 0x2,0x60,0x49, 0x3,0x56,0x7a, + 0x2,0x60,0x4b, 0x2,0x60,0x4d, 0x2,0x60,0x4c, 0x3,0x56,0x7b, + 0x1,0x76,0x26, 0x2,0x60,0x4a, 0x2,0x64,0x4b, 0x1,0x77,0x68, + 0x2,0x64,0x49, 0x2,0x64,0x4c, 0x1,0x77,0x69, 0x4,0x5e,0x43, + 0x2,0x64,0x47, 0x3,0x59,0x50, 0x2,0x64,0x4a, 0x2,0x64,0x48, + 0x2,0x64,0x45, 0x1,0x77,0x6a, 0x2,0x64,0x46, 0x4,0x61,0x7c, + 0x3,0x5b,0x5f, 0x3,0x5b,0x5d, 0x2,0x67,0x6c, 0x3,0x5b,0x5e, + 0x3,0x5b,0x60, 0x2,0x67,0x6e, 0x2,0x67,0x6d, 0x3,0x5d,0x50, + 0x2,0x6a,0x58, 0x3,0x5d,0x51, 0x2,0x6a,0x59, 0x4,0x67,0x71, + 0x3,0x5e,0x75, 0x3,0x5e,0x74, 0x2,0x6c,0x5e, 0x3,0x5f,0x73, + 0x1,0x7c,0x23, 0x4,0x69,0x5e, 0x1,0x7c,0x22, 0x2,0x6f,0x5d, + 0x2,0x6f,0x5e, 0x1,0x7c,0x73, 0x2,0x70,0x5f, 0x3,0x61,0x28, + 0x1,0x7d,0x36, 0x3,0x62,0x3b, 0x1,0x53,0x74, 0x1,0x62,0x79, + 0x2,0x4f,0x32, 0x2,0x4f,0x31, 0x2,0x55,0x5e, 0x2,0x55,0x5d, + 0x4,0x4e,0x57, 0x3,0x53,0x55, 0x1,0x76,0x27, 0x2,0x60,0x4f, + 0x2,0x60,0x4e, 0x2,0x64,0x4f, 0x2,0x64,0x4d, 0x2,0x64,0x50, + 0x2,0x64,0x4e, 0x3,0x59,0x51, 0x4,0x65,0x29, 0x1,0x79,0x49, + 0x2,0x67,0x6f, 0x2,0x67,0x70, 0x2,0x67,0x71, 0x4,0x65,0x27, + 0x2,0x6c,0x5f, 0x3,0x5e,0x76, 0x2,0x6e,0x41, 0x3,0x61,0x29, + 0x2,0x70,0x60, 0x1,0x53,0x75, 0x3,0x45,0x4f, 0x3,0x4f,0x65, + 0x2,0x5b,0x63, 0x2,0x60,0x50, 0x3,0x5b,0x61, 0x1,0x53,0x76, + 0x4,0x41,0x63, 0x3,0x45,0x50, 0x1,0x6b,0x69, 0x4,0x48,0x46, + 0x2,0x5b,0x64, 0x1,0x77,0x6b, 0x2,0x64,0x51, 0x1,0x79,0x4a, + 0x3,0x5d,0x53, 0x2,0x6a,0x5a, 0x2,0x6a,0x5b, 0x1,0x7b,0x40, + 0x2,0x6f,0x5f, 0x1,0x53,0x77, 0x1,0x5e,0x21, 0x1,0x5e,0x22, + 0x2,0x3a,0x32, 0x1,0x62,0x7a, 0x1,0x62,0x7b, 0x2,0x41,0x51, + 0x1,0x62,0x7c, 0x4,0x41,0x68, 0x1,0x67,0x62, 0x3,0x45,0x52, + 0x1,0x67,0x64, 0x2,0x48,0x65, 0x2,0x48,0x66, 0x2,0x48,0x64, + 0x1,0x67,0x5f, 0x1,0x67,0x60, 0x1,0x67,0x63, 0x1,0x67,0x61, + 0x3,0x4a,0x54, 0x3,0x4a,0x55, 0x2,0x4f,0x33, 0x1,0x6b,0x6a, + 0x1,0x6b,0x6b, 0x3,0x4a,0x52, 0x3,0x4a,0x56, 0x2,0x55,0x65, + 0x1,0x6f,0x70, 0x2,0x55,0x60, 0x2,0x55,0x5f, 0x3,0x4f,0x69, + 0x2,0x55,0x64, 0x1,0x6f,0x6e, 0x3,0x4f,0x67, 0x4,0x4e,0x5a, + 0x1,0x73,0x26, 0x4,0x54,0x70, 0x2,0x55,0x61, 0x2,0x55,0x66, + 0x2,0x55,0x63, 0x2,0x55,0x62, 0x3,0x4f,0x66, 0x1,0x6f,0x6f, + 0x1,0x73,0x24, 0x3,0x53,0x5c, 0x2,0x5b,0x66, 0x1,0x72,0x7e, + 0x3,0x53,0x59, 0x2,0x5b,0x67, 0x3,0x53,0x5a, 0x3,0x52,0x28, + 0x2,0x5b,0x65, 0x3,0x53,0x58, 0x1,0x73,0x23, 0x1,0x73,0x21, + 0x1,0x73,0x25, 0x3,0x53,0x5d, 0x1,0x73,0x22, 0x3,0x53,0x5b, + 0x3,0x53,0x5f, 0x4,0x5e,0x4f, 0x3,0x59,0x5b, 0x3,0x57,0x26, + 0x2,0x60,0x51, 0x4,0x59,0x70, 0x2,0x60,0x56, 0x2,0x60,0x52, + 0x2,0x60,0x55, 0x1,0x76,0x28, 0x3,0x57,0x28, 0x2,0x5e,0x41, + 0x2,0x60,0x54, 0x2,0x60,0x53, 0x3,0x59,0x59, 0x1,0x77,0x6e, + 0x1,0x77,0x6c, 0x1,0x77,0x6f, 0x1,0x77,0x6d, 0x2,0x64,0x52, + 0x2,0x64,0x53, 0x2,0x64,0x54, 0x1,0x77,0x70, 0x3,0x59,0x56, + 0x3,0x59,0x58, 0x3,0x5b,0x65, 0x2,0x67,0x75, 0x1,0x79,0x4c, + 0x2,0x67,0x73, 0x4,0x62,0x30, 0x1,0x79,0x4d, 0x2,0x67,0x72, + 0x2,0x67,0x74, 0x1,0x79,0x4b, 0x2,0x6a,0x5f, 0x2,0x6a,0x5c, + 0x4,0x65,0x2c, 0x2,0x6a,0x5d, 0x2,0x6a,0x5e, 0x2,0x6c,0x60, + 0x1,0x7b,0x42, 0x3,0x5e,0x78, 0x1,0x7b,0x41, 0x3,0x5e,0x77, + 0x2,0x6e,0x43, 0x2,0x6e,0x42, 0x1,0x7c,0x24, 0x3,0x60,0x5d, + 0x3,0x60,0x5e, 0x3,0x60,0x5c, 0x1,0x7c,0x4f, 0x1,0x7c,0x74, + 0x1,0x7d,0x2d, 0x2,0x71,0x47, 0x2,0x71,0x7c, 0x2,0x71,0x7d, + 0x1,0x53,0x78, 0x2,0x41,0x52, 0x4,0x41,0x71, 0x2,0x48,0x67, + 0x2,0x4f,0x34, 0x2,0x4f,0x35, 0x1,0x6b,0x6c, 0x4,0x48,0x57, + 0x1,0x6b,0x6d, 0x2,0x55,0x67, 0x1,0x6f,0x71, 0x3,0x53,0x61, + 0x1,0x76,0x29, 0x3,0x57,0x2a, 0x2,0x64,0x55, 0x3,0x59,0x5c, + 0x1,0x77,0x71, 0x2,0x67,0x78, 0x1,0x79,0x4e, 0x2,0x67,0x77, + 0x2,0x67,0x79, 0x2,0x67,0x76, 0x2,0x6c,0x63, 0x2,0x6a,0x60, + 0x2,0x6a,0x61, 0x3,0x5d,0x56, 0x1,0x7a,0x51, 0x2,0x6c,0x62, + 0x3,0x5e,0x7b, 0x3,0x5e,0x79, 0x2,0x6c,0x61, 0x3,0x5e,0x7a, + 0x2,0x6e,0x44, 0x2,0x71,0x7e, 0x3,0x62,0x25, 0x1,0x53,0x79, + 0x3,0x5e,0x7c, 0x3,0x62,0x26, 0x1,0x53,0x7a, 0x3,0x39,0x67, + 0x1,0x58,0x6a, 0x2,0x33,0x4b, 0x3,0x66,0x70, 0x2,0x3a,0x33, + 0x3,0x39,0x68, 0x1,0x62,0x7d, 0x1,0x63,0x22, 0x1,0x62,0x7e, + 0x2,0x41,0x53, 0x3,0x45,0x5b, 0x1,0x63,0x24, 0x1,0x63,0x21, + 0x3,0x40,0x2b, 0x3,0x45,0x5c, 0x1,0x63,0x23, 0x3,0x45,0x54, + 0x1,0x67,0x66, 0x3,0x45,0x59, 0x2,0x48,0x68, 0x3,0x45,0x57, + 0x3,0x4a,0x5d, 0x2,0x48,0x69, 0x2,0x55,0x69, 0x4,0x41,0x7b, + 0x1,0x67,0x65, 0x1,0x67,0x67, 0x1,0x67,0x68, 0x3,0x45,0x58, + 0x2,0x4f,0x37, 0x3,0x4a,0x5e, 0x2,0x4f,0x36, 0x1,0x6b,0x6e, + 0x5,0x4b,0x4c, 0x1,0x6b,0x6f, 0x3,0x4a,0x5b, 0x2,0x4f,0x38, + 0x2,0x55,0x68, 0x1,0x6b,0x71, 0x1,0x6f,0x72, 0x4,0x4e,0x63, + 0x1,0x6b,0x70, 0x3,0x66,0x7a, 0x1,0x73,0x27, 0x2,0x55,0x6a, + 0x1,0x6f,0x74, 0x1,0x6f,0x73, 0x2,0x55,0x6b, 0x2,0x55,0x6e, + 0x2,0x55,0x6c, 0x2,0x55,0x6d, 0x1,0x6f,0x75, 0x3,0x4f,0x6b, + 0x1,0x73,0x2c, 0x1,0x73,0x2a, 0x3,0x53,0x65, 0x3,0x53,0x66, + 0x1,0x73,0x29, 0x2,0x5b,0x69, 0x3,0x53,0x64, 0x1,0x73,0x2b, + 0x3,0x53,0x62, 0x3,0x53,0x63, 0x2,0x5b,0x68, 0x2,0x60,0x57, + 0x4,0x54,0x7e, 0x2,0x5b,0x6a, 0x1,0x73,0x28, 0x2,0x5b,0x6b, + 0x2,0x60,0x5a, 0x2,0x60,0x58, 0x2,0x60,0x59, 0x2,0x60,0x5e, + 0x1,0x77,0x75, 0x2,0x60,0x5d, 0x2,0x60,0x60, 0x2,0x60,0x5f, + 0x2,0x60,0x5c, 0x2,0x60,0x5b, 0x4,0x55,0x21, 0x1,0x76,0x2a, + 0x3,0x59,0x62, 0x4,0x5a,0x29, 0x3,0x59,0x61, 0x3,0x59,0x66, + 0x2,0x64,0x58, 0x3,0x59,0x65, 0x2,0x64,0x57, 0x1,0x77,0x74, + 0x1,0x77,0x72, 0x1,0x77,0x73, 0x3,0x59,0x63, 0x2,0x64,0x56, + 0x3,0x66,0x71, 0x2,0x67,0x7c, 0x3,0x5b,0x69, 0x1,0x79,0x4f, + 0x4,0x62,0x38, 0x2,0x67,0x7b, 0x2,0x67,0x7a, 0x1,0x79,0x50, + 0x4,0x65,0x3a, 0x2,0x6a,0x66, 0x2,0x6a,0x65, 0x3,0x5d,0x58, + 0x2,0x6a,0x63, 0x3,0x5e,0x7e, 0x2,0x6a,0x62, 0x1,0x7a,0x53, + 0x1,0x7a,0x52, 0x2,0x6a,0x67, 0x2,0x6e,0x45, 0x1,0x7c,0x25, + 0x2,0x6c,0x65, 0x1,0x7b,0x43, 0x2,0x6c,0x64, 0x2,0x6a,0x64, + 0x3,0x5f,0x78, 0x2,0x6e,0x46, 0x1,0x7c,0x50, 0x3,0x61,0x2a, + 0x1,0x7d,0x2e, 0x2,0x71,0x48, 0x4,0x6e,0x24, 0x2,0x72,0x21, + 0x1,0x53,0x7b, 0x2,0x3a,0x34, 0x2,0x60,0x61, 0x1,0x53,0x7c, + 0x3,0x45,0x5f, 0x5,0x4b,0x4e, 0x2,0x4f,0x3a, 0x2,0x4f,0x39, + 0x2,0x5b,0x6c, 0x5,0x5a,0x26, 0x3,0x53,0x68, 0x2,0x60,0x63, + 0x3,0x57,0x30, 0x2,0x60,0x62, 0x3,0x59,0x67, 0x1,0x77,0x76, + 0x2,0x67,0x7d, 0x2,0x67,0x7e, 0x1,0x7a,0x54, 0x3,0x5f,0x21, + 0x3,0x60,0x60, 0x2,0x72,0x22, 0x1,0x58,0x6b, 0x1,0x63,0x26, + 0x1,0x63,0x25, 0x2,0x48,0x6a, 0x2,0x48,0x6c, 0x1,0x67,0x6a, + 0x2,0x48,0x6b, 0x1,0x67,0x69, 0x1,0x67,0x6b, 0x2,0x48,0x6d, + 0x3,0x4a,0x63, 0x3,0x4a,0x62, 0x3,0x4a,0x66, 0x2,0x4f,0x3c, + 0x2,0x4f,0x3e, 0x2,0x4f,0x3d, 0x3,0x4a,0x61, 0x2,0x4f,0x40, + 0x3,0x4a,0x60, 0x3,0x4a,0x6c, 0x3,0x4a,0x64, 0x1,0x6b,0x72, + 0x2,0x4f,0x3f, 0x2,0x4f,0x3b, 0x3,0x4a,0x6a, 0x4,0x48,0x60, + 0x2,0x4f,0x41, 0x3,0x4f,0x73, 0x2,0x55,0x75, 0x3,0x4f,0x6d, + 0x2,0x55,0x78, 0x2,0x55,0x7a, 0x2,0x55,0x70, 0x2,0x55,0x74, + 0x2,0x55,0x71, 0x1,0x6f,0x77, 0x1,0x6f,0x7a, 0x1,0x6f,0x7c, + 0x2,0x55,0x72, 0x2,0x55,0x73, 0x1,0x6f,0x7b, 0x2,0x55,0x76, + 0x2,0x55,0x79, 0x2,0x55,0x77, 0x1,0x6f,0x7d, 0x3,0x4f,0x6e, + 0x1,0x6f,0x79, 0x2,0x55,0x6f, 0x1,0x6f,0x76, 0x3,0x4f,0x72, + 0x1,0x6f,0x78, 0x3,0x4f,0x74, 0x3,0x53,0x70, 0x1,0x73,0x2e, + 0x2,0x5b,0x72, 0x2,0x5b,0x70, 0x2,0x5b,0x6f, 0x3,0x53,0x71, + 0x2,0x5b,0x75, 0x3,0x53,0x6b, 0x2,0x5b,0x74, 0x2,0x5b,0x73, + 0x3,0x53,0x6c, 0x2,0x5b,0x6e, 0x1,0x73,0x2d, 0x2,0x5b,0x6d, + 0x3,0x53,0x6a, 0x2,0x5b,0x71, 0x1,0x73,0x2f, 0x3,0x57,0x34, + 0x2,0x60,0x66, 0x3,0x57,0x37, 0x2,0x60,0x6a, 0x2,0x60,0x67, + 0x2,0x60,0x69, 0x2,0x60,0x68, 0x2,0x60,0x65, 0x2,0x60,0x6b, + 0x2,0x60,0x6e, 0x2,0x60,0x6c, 0x2,0x60,0x6d, 0x1,0x76,0x2c, + 0x3,0x57,0x33, 0x1,0x76,0x2b, 0x2,0x60,0x64, 0x2,0x60,0x6f, + 0x2,0x64,0x5d, 0x2,0x64,0x60, 0x2,0x64,0x62, 0x2,0x64,0x61, + 0x3,0x59,0x6a, 0x2,0x64,0x5b, 0x2,0x64,0x5f, 0x2,0x64,0x5a, + 0x3,0x59,0x6b, 0x2,0x64,0x5c, 0x1,0x77,0x77, 0x2,0x64,0x59, + 0x3,0x59,0x6d, 0x2,0x64,0x5e, 0x2,0x68,0x2d, 0x2,0x68,0x22, + 0x1,0x79,0x51, 0x3,0x5b,0x6f, 0x3,0x5b,0x6d, 0x1,0x79,0x52, + 0x2,0x68,0x21, 0x2,0x68,0x26, 0x2,0x68,0x2c, 0x2,0x68,0x24, + 0x2,0x68,0x2b, 0x3,0x5b,0x6c, 0x2,0x68,0x28, 0x3,0x5b,0x6e, + 0x2,0x68,0x27, 0x2,0x68,0x2a, 0x2,0x68,0x25, 0x2,0x68,0x23, + 0x3,0x5b,0x6b, 0x2,0x68,0x29, 0x2,0x6a,0x6e, 0x2,0x6a,0x6c, + 0x1,0x7a,0x55, 0x2,0x6a,0x6b, 0x2,0x6a,0x71, 0x2,0x6a,0x6f, + 0x3,0x5d,0x5a, 0x1,0x7a,0x56, 0x2,0x6a,0x6a, 0x2,0x6a,0x68, + 0x4,0x65,0x46, 0x2,0x6a,0x69, 0x1,0x7a,0x58, 0x2,0x6a,0x6d, + 0x1,0x7a,0x57, 0x2,0x6a,0x70, 0x2,0x6c,0x66, 0x2,0x6c,0x6c, + 0x3,0x5f,0x24, 0x3,0x5f,0x22, 0x2,0x6c,0x67, 0x1,0x7b,0x47, + 0x2,0x6c,0x6d, 0x1,0x7b,0x46, 0x2,0x6c,0x6b, 0x2,0x6c,0x6a, + 0x1,0x7b,0x45, 0x2,0x6c,0x69, 0x1,0x7b,0x44, 0x2,0x6c,0x68, + 0x7,0x56,0x51, 0x2,0x6e,0x4c, 0x2,0x6e,0x4e, 0x2,0x6e,0x4d, + 0x4,0x69,0x6a, 0x2,0x6e,0x4a, 0x1,0x7c,0x27, 0x2,0x6e,0x47, + 0x2,0x6e,0x4b, 0x2,0x6e,0x50, 0x3,0x5f,0x79, 0x2,0x6e,0x4f, + 0x2,0x6e,0x48, 0x2,0x6e,0x49, 0x1,0x7c,0x26, 0x2,0x6f,0x60, + 0x1,0x7c,0x53, 0x3,0x60,0x62, 0x2,0x6f,0x61, 0x1,0x7c,0x51, + 0x1,0x7c,0x52, 0x3,0x60,0x61, 0x4,0x6c,0x3d, 0x2,0x70,0x61, + 0x1,0x7c,0x75, 0x2,0x71,0x65, 0x3,0x61,0x72, 0x1,0x7d,0x37, + 0x3,0x61,0x73, 0x2,0x72,0x23, 0x1,0x7d,0x38, 0x2,0x72,0x24, + 0x2,0x72,0x25, 0x2,0x72,0x33, 0x2,0x72,0x32, 0x1,0x7d,0x47, + 0x2,0x72,0x3b, 0x1,0x58,0x6c, 0x3,0x40,0x2f, 0x4,0x42,0x21, + 0x2,0x48,0x6f, 0x4,0x41,0x7d, 0x2,0x48,0x6e, 0x4,0x41,0x7e, + 0x1,0x6b,0x73, 0x1,0x6b,0x74, 0x2,0x4f,0x42, 0x4,0x4e,0x74, + 0x2,0x55,0x7b, 0x2,0x5b,0x78, 0x3,0x4f,0x77, 0x3,0x4f,0x76, + 0x1,0x6f,0x7e, 0x1,0x73,0x30, 0x2,0x5b,0x76, 0x4,0x55,0x31, + 0x2,0x5b,0x79, 0x1,0x73,0x31, 0x3,0x57,0x3a, 0x2,0x60,0x70, + 0x2,0x5b,0x77, 0x2,0x64,0x63, 0x1,0x77,0x78, 0x2,0x68,0x2e, + 0x4,0x62,0x49, 0x3,0x5d,0x61, 0x2,0x6a,0x74, 0x2,0x6a,0x72, + 0x3,0x5d,0x60, 0x3,0x5d,0x5e, 0x2,0x6a,0x73, 0x2,0x6c,0x6e, + 0x3,0x5f,0x25, 0x1,0x7b,0x48, 0x2,0x6e,0x51, 0x1,0x7c,0x56, + 0x1,0x7c,0x28, 0x1,0x7c,0x54, 0x1,0x7c,0x55, 0x2,0x70,0x62, + 0x1,0x7d,0x2f, 0x3,0x61,0x74, 0x1,0x58,0x6d, 0x4,0x36,0x2d, + 0x3,0x4a,0x6e, 0x4,0x4e,0x79, 0x2,0x64,0x64, 0x3,0x5f,0x7b, + 0x3,0x60,0x63, 0x2,0x33,0x4c, 0x3,0x40,0x32, 0x1,0x67,0x6c, + 0x3,0x45,0x61, 0x2,0x4f,0x43, 0x3,0x4a,0x6f, 0x3,0x4a,0x73, + 0x1,0x6b,0x75, 0x2,0x4f,0x44, 0x3,0x4a,0x71, 0x3,0x4a,0x70, + 0x3,0x4a,0x72, 0x2,0x55,0x7d, 0x2,0x55,0x7c, 0x1,0x73,0x33, + 0x1,0x70,0x21, 0x1,0x70,0x22, 0x4,0x4f,0x21, 0x2,0x56,0x22, + 0x2,0x56,0x21, 0x2,0x55,0x7e, 0x3,0x4f,0x79, 0x3,0x53,0x75, + 0x2,0x5b,0x7a, 0x2,0x5b,0x7d, 0x3,0x53,0x74, 0x2,0x5b,0x7c, + 0x2,0x5b,0x7b, 0x1,0x73,0x32, 0x2,0x60,0x74, 0x2,0x60,0x72, + 0x2,0x60,0x71, 0x4,0x5a,0x37, 0x3,0x57,0x3b, 0x2,0x60,0x73, + 0x3,0x57,0x3c, 0x1,0x77,0x79, 0x2,0x64,0x66, 0x2,0x64,0x67, + 0x1,0x77,0x7a, 0x3,0x59,0x6f, 0x2,0x64,0x65, 0x3,0x5b,0x71, + 0x2,0x68,0x30, 0x2,0x68,0x2f, 0x2,0x68,0x32, 0x1,0x79,0x53, + 0x2,0x68,0x31, 0x4,0x62,0x4f, 0x2,0x6a,0x75, 0x2,0x6a,0x77, + 0x2,0x6a,0x76, 0x3,0x5f,0x27, 0x2,0x6c,0x6f, 0x2,0x6c,0x72, + 0x2,0x6c,0x70, 0x2,0x6c,0x71, 0x2,0x6e,0x52, 0x1,0x7c,0x29, + 0x4,0x69,0x74, 0x4,0x69,0x71, 0x3,0x66,0x72, 0x2,0x6f,0x62, + 0x2,0x6f,0x63, 0x2,0x6f,0x64, 0x3,0x61,0x2c, 0x1,0x7c,0x76, + 0x1,0x7d,0x30, 0x2,0x72,0x26, 0x1,0x58,0x6e, 0x3,0x4a,0x75, + 0x1,0x70,0x23, 0x1,0x73,0x34, 0x2,0x64,0x68, 0x3,0x5d,0x62, + 0x2,0x6e,0x53, 0x3,0x61,0x2e, 0x4,0x6d,0x37, 0x2,0x71,0x66, + 0x2,0x33,0x4d, 0x3,0x62,0x28, 0x1,0x7d,0x48, 0x1,0x58,0x6f, + 0x2,0x5b,0x7e, 0x3,0x57,0x3e, 0x2,0x64,0x69, 0x2,0x68,0x33, + 0x3,0x5d,0x63, 0x4,0x68,0x36, 0x2,0x6c,0x73, 0x2,0x6e,0x54, + 0x1,0x58,0x70, 0x3,0x45,0x62, 0x2,0x4f,0x45, 0x2,0x4f,0x46, + 0x3,0x4a,0x78, 0x1,0x6b,0x76, 0x1,0x6b,0x77, 0x2,0x56,0x24, + 0x1,0x70,0x25, 0x1,0x70,0x24, 0x2,0x56,0x23, 0x2,0x60,0x75, + 0x3,0x57,0x3f, 0x2,0x64,0x6a, 0x2,0x64,0x6c, 0x2,0x64,0x6b, + 0x1,0x77,0x7d, 0x1,0x77,0x7c, 0x1,0x77,0x7b, 0x3,0x5d,0x64, + 0x1,0x7b,0x4a, 0x2,0x6c,0x74, 0x3,0x5f,0x28, 0x1,0x7b,0x49, + 0x2,0x6e,0x56, 0x2,0x6e,0x55, 0x3,0x61,0x2f, 0x1,0x7c,0x77, + 0x2,0x70,0x63, 0x1,0x5e,0x23, 0x2,0x48,0x70, 0x4,0x42,0x29, + 0x3,0x45,0x63, 0x2,0x4f,0x49, 0x2,0x4f,0x47, 0x2,0x4f,0x48, + 0x4,0x48,0x6b, 0x3,0x4f,0x7e, 0x2,0x56,0x2d, 0x4,0x4f,0x30, + 0x2,0x56,0x28, 0x2,0x56,0x25, 0x2,0x56,0x2c, 0x3,0x4f,0x7c, + 0x4,0x4f,0x35, 0x3,0x4f,0x7b, 0x2,0x56,0x2e, 0x4,0x4f,0x37, + 0x4,0x4f,0x2c, 0x1,0x70,0x27, 0x2,0x56,0x2b, 0x2,0x56,0x27, + 0x3,0x4f,0x7d, 0x4,0x4f,0x2a, 0x2,0x56,0x26, 0x2,0x56,0x2a, + 0x2,0x56,0x29, 0x1,0x70,0x26, 0xf,0x53,0x3e, 0x2,0x5c,0x2b, + 0x2,0x5c,0x26, 0x2,0x5c,0x24, 0x2,0x5c,0x2d, 0x2,0x5c,0x25, + 0x4,0x55,0x47, 0x2,0x5c,0x21, 0x4,0x55,0x43, 0x2,0x5c,0x27, + 0x3,0x53,0x78, 0x3,0x53,0x7a, 0x2,0x5c,0x22, 0x2,0x60,0x7e, + 0x2,0x5c,0x23, 0x2,0x5c,0x2e, 0x3,0x54,0x23, 0x4,0x55,0x45, + 0x3,0x53,0x7c, 0x3,0x54,0x21, 0x5,0x5a,0x4a, 0x3,0x54,0x25, + 0x3,0x53,0x7d, 0x2,0x5c,0x2a, 0x1,0x73,0x35, 0x2,0x5c,0x29, + 0x2,0x5c,0x28, 0x3,0x53,0x79, 0x2,0x5c,0x2c, 0xf,0x59,0x38, + 0x3,0x66,0x73, 0x3,0x57,0x44, 0x2,0x60,0x76, 0x2,0x60,0x79, + 0x4,0x5a,0x49, 0x3,0x57,0x45, 0x2,0x60,0x78, 0x3,0x57,0x40, + 0x2,0x61,0x22, 0x2,0x60,0x7b, 0x2,0x61,0x21, 0x3,0x57,0x42, + 0x2,0x60,0x7d, 0x2,0x60,0x7c, 0x2,0x60,0x7a, 0x4,0x5a,0x41, + 0x2,0x60,0x77, 0x4,0x5a,0x3f, 0x1,0x76,0x2f, 0x1,0x76,0x2e, + 0x4,0x5a,0x44, 0x1,0x76,0x30, 0x1,0x76,0x2d, 0x2,0x61,0x23, + 0x4,0x5a,0x45, 0xf,0x5d,0x76, 0x4,0x5a,0x43, 0x2,0x64,0x72, + 0x2,0x64,0x75, 0x4,0x5f,0x26, 0x2,0x64,0x73, 0x2,0x64,0x77, + 0x5,0x66,0x79, 0x3,0x59,0x74, 0x4,0x5f,0x22, 0x2,0x64,0x78, + 0x4,0x5f,0x2a, 0x2,0x64,0x70, 0x1,0x78,0x24, 0x2,0x64,0x71, + 0x3,0x59,0x73, 0x2,0x64,0x6f, 0x2,0x64,0x76, 0x3,0x5b,0x74, + 0x2,0x64,0x6e, 0x2,0x64,0x6d, 0x1,0x78,0x23, 0x1,0x78,0x21, + 0x1,0x77,0x7e, 0x3,0x59,0x76, 0x3,0x59,0x75, 0x3,0x57,0x43, + 0xf,0x61,0x72, 0x3,0x59,0x71, 0x2,0x64,0x74, 0x2,0x68,0x3c, + 0x2,0x68,0x42, 0x1,0x79,0x56, 0x2,0x68,0x3d, 0x5,0x6b,0x33, + 0x2,0x68,0x40, 0x2,0x68,0x44, 0x1,0x79,0x57, 0x2,0x68,0x3f, + 0x4,0x62,0x5c, 0x2,0x68,0x37, 0x3,0x5b,0x75, 0x2,0x68,0x36, + 0x2,0x68,0x43, 0x2,0x68,0x3a, 0x3,0x5b,0x77, 0x2,0x68,0x38, + 0x2,0x68,0x41, 0x2,0x68,0x39, 0x1,0x79,0x55, 0x1,0x79,0x54, + 0x3,0x5b,0x79, 0x2,0x68,0x34, 0x2,0x68,0x35, 0x2,0x68,0x3e, + 0x4,0x62,0x66, 0x3,0x5b,0x7a, 0x4,0x62,0x68, 0x2,0x68,0x3b, + 0xf,0x64,0x6b, 0x4,0x62,0x55, 0x3,0x5d,0x6f, 0x2,0x6a,0x7a, + 0x2,0x6a,0x7d, 0x3,0x5d,0x71, 0x4,0x62,0x56, 0x3,0x5d,0x67, + 0x3,0x5d,0x69, 0x1,0x78,0x22, 0x3,0x5d,0x6a, 0x3,0x5d,0x74, + 0x3,0x5d,0x75, 0x4,0x65,0x5a, 0x3,0x5d,0x6e, 0x4,0x65,0x59, + 0x3,0x5d,0x68, 0x2,0x6a,0x7b, 0x2,0x6b,0x23, 0x2,0x6b,0x21, + 0x2,0x6a,0x79, 0x2,0x6b,0x26, 0x3,0x5d,0x66, 0x2,0x6a,0x78, + 0x3,0x5d,0x76, 0x1,0x7a,0x5a, 0x2,0x6b,0x22, 0x4,0x65,0x54, + 0x3,0x5d,0x73, 0x4,0x65,0x57, 0x2,0x6a,0x7c, 0x1,0x7a,0x59, + 0x2,0x6b,0x25, 0x3,0x5d,0x72, 0x4,0x65,0x5d, 0x2,0x6b,0x24, + 0x3,0x5d,0x70, 0x2,0x6c,0x77, 0x2,0x6c,0x76, 0x5,0x72,0x51, + 0x3,0x5f,0x2c, 0x5,0x72,0x4b, 0x2,0x6c,0x7d, 0x5,0x72,0x4e, + 0x2,0x6c,0x79, 0x2,0x6c,0x7c, 0x1,0x7b,0x4c, 0x4,0x68,0x3b, + 0x4,0x68,0x3e, 0x2,0x6c,0x7a, 0x2,0x6c,0x7b, 0x4,0x68,0x39, + 0x2,0x6c,0x75, 0x2,0x6c,0x78, 0x1,0x7b,0x4b, 0x3,0x5f,0x2a, + 0xf,0x69,0x2a, 0x1,0x7c,0x2b, 0x2,0x6e,0x61, 0x2,0x6e,0x5c, + 0x2,0x6e,0x60, 0x3,0x60,0x25, 0x2,0x6e,0x63, 0x2,0x6e,0x5f, + 0x3,0x5f,0x7e, 0x2,0x6e,0x5b, 0x3,0x60,0x23, 0x1,0x7c,0x2d, + 0x2,0x6e,0x5e, 0x2,0x6e,0x62, 0x1,0x7c,0x2c, 0x2,0x6e,0x59, + 0x2,0x6a,0x7e, 0x2,0x6e,0x5d, 0x4,0x6a,0x23, 0x5,0x75,0x2d, + 0x2,0x6e,0x5a, 0x3,0x60,0x22, 0x2,0x6e,0x57, 0xf,0x6a,0x3e, + 0x2,0x6e,0x58, 0x1,0x7c,0x2a, 0x2,0x6f,0x68, 0x2,0x6f,0x6a, + 0x2,0x6f,0x6d, 0x2,0x6f,0x69, 0x2,0x6f,0x6e, 0x3,0x60,0x65, + 0x2,0x6f,0x67, 0x3,0x60,0x66, 0x2,0x6f,0x65, 0x3,0x60,0x68, + 0x1,0x7c,0x57, 0x2,0x6f,0x6b, 0x1,0x7c,0x59, 0x1,0x7c,0x58, + 0x2,0x6f,0x66, 0x2,0x6f,0x6c, 0x3,0x61,0x32, 0x2,0x70,0x68, + 0x1,0x7c,0x78, 0x2,0x70,0x69, 0x3,0x61,0x33, 0x2,0x70,0x67, + 0x2,0x70,0x64, 0x4,0x6c,0x4a, 0x3,0x61,0x34, 0x2,0x70,0x66, + 0x2,0x70,0x65, 0x2,0x71,0x49, 0x3,0x61,0x59, 0x2,0x71,0x4b, + 0x2,0x71,0x4a, 0x3,0x61,0x5b, 0x2,0x71,0x69, 0x5,0x7a,0x53, + 0x2,0x71,0x68, 0x2,0x71,0x67, 0x2,0x71,0x6a, 0x3,0x61,0x75, + 0x1,0x7d,0x40, 0x1,0x7d,0x41, 0x2,0x72,0x38, 0x2,0x72,0x3c, + 0x3,0x62,0x41, 0x1,0x5e,0x24, 0x2,0x41,0x54, 0x2,0x48,0x73, + 0x3,0x45,0x64, 0x1,0x67,0x6d, 0x2,0x48,0x71, 0x3,0x45,0x66, + 0x3,0x2f,0x42, 0x2,0x48,0x72, 0x3,0x45,0x68, 0x3,0x45,0x67, + 0x2,0x4f,0x4a, 0x2,0x4f,0x4b, 0x1,0x6b,0x7a, 0x1,0x6b,0x78, + 0x2,0x4f,0x4c, 0x1,0x6b,0x79, 0x2,0x56,0x33, 0x3,0x50,0x27, + 0x2,0x56,0x36, 0x2,0x56,0x30, 0x2,0x56,0x37, 0x2,0x56,0x2f, + 0x2,0x56,0x31, 0x3,0x50,0x2a, 0x2,0x56,0x32, 0x2,0x56,0x35, + 0x3,0x50,0x24, 0x3,0x50,0x2b, 0x1,0x70,0x2a, 0x2,0x56,0x3a, + 0x2,0x56,0x39, 0x1,0x70,0x28, 0x2,0x56,0x34, 0x2,0x56,0x38, + 0x1,0x70,0x29, 0x3,0x54,0x2d, 0x4,0x4f,0x42, 0x3,0x50,0x25, + 0x3,0x50,0x22, 0x3,0x54,0x2a, 0x2,0x5c,0x38, 0x4,0x55,0x52, + 0x1,0x73,0x3a, 0x3,0x54,0x2c, 0x2,0x5c,0x33, 0x1,0x73,0x36, + 0x3,0x54,0x36, 0x2,0x5c,0x30, 0x2,0x5c,0x36, 0x2,0x5c,0x39, + 0x3,0x54,0x33, 0x1,0x73,0x3b, 0x4,0x5a,0x4e, 0x2,0x5c,0x35, + 0x2,0x5c,0x32, 0x2,0x5c,0x3a, 0x2,0x5c,0x31, 0x3,0x54,0x37, + 0x2,0x5c,0x37, 0x1,0x73,0x37, 0x3,0x54,0x29, 0x2,0x5c,0x2f, + 0x1,0x73,0x38, 0x3,0x54,0x35, 0x1,0x73,0x39, 0x2,0x5c,0x34, + 0x3,0x54,0x32, 0x2,0x61,0x35, 0x2,0x61,0x28, 0x2,0x61,0x29, + 0x2,0x61,0x2c, 0x2,0x61,0x2a, 0x4,0x5a,0x55, 0x2,0x61,0x24, + 0x4,0x5a,0x56, 0x3,0x57,0x4d, 0x2,0x61,0x27, 0x2,0x61,0x31, + 0x2,0x61,0x2b, 0x3,0x57,0x48, 0x4,0x5a,0x4f, 0x1,0x76,0x31, + 0x4,0x5a,0x4d, 0x2,0x61,0x33, 0x2,0x61,0x30, 0x1,0x76,0x32, + 0x2,0x61,0x32, 0x2,0x61,0x25, 0x2,0x61,0x2e, 0x2,0x61,0x2f, + 0x3,0x57,0x4a, 0x2,0x61,0x2d, 0xf,0x5e,0x24, 0x3,0x66,0x75, + 0x2,0x64,0x7c, 0x2,0x64,0x7e, 0x2,0x65,0x23, 0x3,0x59,0x79, + 0x3,0x59,0x7b, 0x2,0x64,0x7b, 0x3,0x59,0x7d, 0x1,0x78,0x25, + 0x2,0x65,0x25, 0x2,0x64,0x7a, 0x2,0x65,0x26, 0x3,0x59,0x7e, + 0x2,0x65,0x22, 0x2,0x65,0x24, 0x2,0x65,0x28, 0x2,0x65,0x21, + 0x2,0x65,0x29, 0x2,0x64,0x7d, 0x2,0x64,0x79, 0x1,0x78,0x26, + 0x3,0x5a,0x22, 0x2,0x65,0x27, 0x1,0x78,0x27, 0x1,0x79,0x59, + 0x4,0x5f,0x34, 0x3,0x59,0x7a, 0xf,0x61,0x77, 0x3,0x5b,0x7d, + 0x2,0x61,0x26, 0x2,0x68,0x5e, 0x2,0x68,0x55, 0x1,0x79,0x5b, + 0x2,0x68,0x51, 0x1,0x79,0x5c, 0x3,0x5c,0x27, 0x3,0x5c,0x22, + 0x2,0x68,0x5a, 0x2,0x68,0x54, 0x2,0x68,0x4a, 0x1,0x79,0x5a, + 0x2,0x68,0x57, 0x2,0x68,0x52, 0x2,0x68,0x53, 0x3,0x5c,0x25, + 0x2,0x68,0x45, 0x2,0x68,0x4c, 0x2,0x68,0x5b, 0x3,0x5b,0x7e, + 0x2,0x68,0x58, 0x5,0x6b,0x3f, 0x2,0x68,0x50, 0x3,0x5c,0x26, + 0x2,0x68,0x5c, 0x2,0x68,0x4b, 0x2,0x68,0x46, 0x2,0x68,0x59, + 0x3,0x5c,0x24, 0x2,0x68,0x48, 0x2,0x68,0x56, 0x2,0x68,0x4d, + 0x2,0x68,0x5d, 0x2,0x68,0x49, 0x1,0x79,0x58, 0x2,0x68,0x47, + 0x2,0x68,0x4e, 0x2,0x68,0x4f, 0x2,0x6b,0x2d, 0x3,0x5c,0x23, + 0x2,0x6b,0x2b, 0x4,0x65,0x69, 0x2,0x6b,0x30, 0x3,0x5d,0x79, + 0x2,0x6b,0x3c, 0x2,0x6b,0x33, 0x2,0x6b,0x2c, 0x2,0x6b,0x28, + 0x2,0x6b,0x35, 0x2,0x6b,0x2e, 0x2,0x6b,0x31, 0x2,0x6b,0x2a, + 0x2,0x6b,0x38, 0x2,0x6b,0x27, 0x2,0x6b,0x2f, 0x2,0x6b,0x34, + 0x2,0x6b,0x36, 0x2,0x6b,0x39, 0x2,0x6b,0x29, 0x3,0x5d,0x7a, + 0x2,0x6b,0x3d, 0x2,0x6b,0x3e, 0x2,0x6b,0x37, 0x2,0x6b,0x3b, + 0x2,0x6b,0x32, 0x2,0x6d,0x2f, 0x2,0x6d,0x32, 0x3,0x5f,0x35, + 0x1,0x7b,0x4d, 0x3,0x5f,0x31, 0x2,0x6d,0x31, 0x2,0x6d,0x36, + 0x2,0x6d,0x34, 0x1,0x7b,0x4e, 0x2,0x6d,0x2b, 0x2,0x6d,0x21, + 0x2,0x6c,0x7e, 0x1,0x7b,0x50, 0x2,0x6d,0x2d, 0x2,0x6d,0x2e, + 0x2,0x6d,0x2a, 0x2,0x6d,0x22, 0x3,0x5f,0x32, 0x2,0x6d,0x27, + 0x2,0x6b,0x3a, 0x4,0x68,0x43, 0x2,0x6d,0x23, 0x1,0x7b,0x4f, + 0x2,0x6d,0x29, 0x3,0x5f,0x36, 0x2,0x6d,0x28, 0x2,0x6d,0x24, + 0x2,0x6d,0x30, 0x4,0x68,0x44, 0x2,0x6d,0x25, 0x2,0x6e,0x68, + 0x2,0x6d,0x33, 0x2,0x6d,0x35, 0x2,0x6d,0x2c, 0x2,0x6d,0x26, + 0x2,0x6e,0x69, 0x2,0x6e,0x6b, 0x2,0x6e,0x65, 0x1,0x7c,0x2e, + 0x4,0x6a,0x25, 0x2,0x6e,0x72, 0x2,0x6e,0x70, 0x1,0x7c,0x2f, + 0x2,0x6e,0x6f, 0x2,0x6e,0x6e, 0x2,0x6e,0x67, 0x2,0x6e,0x64, + 0x2,0x6e,0x6a, 0x2,0x6e,0x73, 0x2,0x6e,0x66, 0x2,0x6e,0x6c, + 0x5,0x75,0x45, 0x2,0x6f,0x77, 0x2,0x6f,0x7c, 0x2,0x6f,0x72, + 0x2,0x6f,0x75, 0x1,0x7c,0x5a, 0x2,0x6f,0x79, 0x4,0x6b,0x46, + 0x2,0x70,0x22, 0x2,0x6e,0x6d, 0x4,0x6b,0x4a, 0x2,0x6f,0x73, + 0x2,0x6f,0x7d, 0x2,0x70,0x23, 0x2,0x6f,0x78, 0x2,0x6f,0x71, + 0x2,0x6f,0x7b, 0x4,0x6b,0x4b, 0x2,0x6f,0x7a, 0x2,0x70,0x21, + 0x2,0x6f,0x7e, 0x2,0x6e,0x71, 0x2,0x6f,0x76, 0x2,0x6f,0x70, + 0x2,0x6f,0x74, 0x1,0x7c,0x79, 0x1,0x7c,0x7a, 0x2,0x6f,0x6f, + 0x3,0x60,0x6c, 0x2,0x70,0x74, 0x2,0x70,0x6b, 0x2,0x70,0x73, + 0x2,0x70,0x70, 0x2,0x70,0x71, 0x2,0x70,0x6a, 0x2,0x70,0x6d, + 0x2,0x70,0x75, 0x2,0x70,0x6f, 0x2,0x70,0x6e, 0x2,0x70,0x6c, + 0x3,0x61,0x35, 0x2,0x70,0x72, 0x4,0x6c,0x56, 0x2,0x71,0x4c, + 0x4,0x6d,0x3a, 0x2,0x71,0x4d, 0x3,0x61,0x5d, 0x2,0x71,0x4f, + 0x2,0x71,0x4e, 0x2,0x71,0x51, 0x2,0x71,0x50, 0x2,0x71,0x6c, + 0x2,0x71,0x6b, 0x2,0x72,0x27, 0x3,0x62,0x29, 0x2,0x72,0x28, + 0x3,0x62,0x30, 0x2,0x72,0x34, 0x1,0x7d,0x45, 0x1,0x7d,0x49, + 0x3,0x62,0x38, 0x2,0x72,0x3d, 0x1,0x7d,0x4a, 0x1,0x5e,0x25, + 0x4,0x4f,0x48, 0x5,0x5a,0x5b, 0x1,0x7a,0x5b, 0x2,0x6d,0x37, + 0x3,0x5f,0x37, 0x1,0x7c,0x7b, 0x1,0x7c,0x7c, 0x1,0x5e,0x26, + 0x2,0x48,0x74, 0x3,0x45,0x69, 0x1,0x67,0x6e, 0x2,0x56,0x3b, + 0x3,0x50,0x2c, 0x3,0x54,0x39, 0x2,0x5c,0x3c, 0x2,0x5c,0x3d, + 0x2,0x5c,0x3b, 0x2,0x61,0x37, 0x2,0x61,0x36, 0x1,0x76,0x33, + 0x2,0x65,0x2b, 0x2,0x61,0x38, 0x2,0x65,0x2a, 0x4,0x5f,0x3a, + 0x3,0x5a,0x24, 0x2,0x68,0x60, 0x1,0x79,0x5d, 0x1,0x79,0x5f, + 0x2,0x68,0x5f, 0x3,0x5c,0x29, 0x4,0x62,0x75, 0x1,0x79,0x5e, + 0x3,0x5e,0x21, 0x2,0x6b,0x3f, 0x2,0x6b,0x41, 0x2,0x6b,0x40, + 0x2,0x6d,0x38, 0x1,0x7b,0x51, 0x3,0x5f,0x3a, 0x1,0x7c,0x5b, + 0x2,0x70,0x76, 0x2,0x71,0x52, 0x3,0x62,0x31, 0x3,0x62,0x3f, + 0x2,0x72,0x41, 0x1,0x5e,0x27, 0x3,0x25,0x47, 0x2,0x4f,0x4d, + 0x4,0x4f,0x4c, 0x1,0x70,0x2b, 0x3,0x50,0x2f, 0x3,0x50,0x2e, + 0x3,0x54,0x3a, 0x2,0x5c,0x3f, 0x2,0x5c,0x3e, 0x3,0x57,0x50, + 0x2,0x61,0x39, 0x3,0x5a,0x26, 0x3,0x5a,0x25, 0x4,0x62,0x7e, + 0x1,0x79,0x60, 0x1,0x7a,0x5c, 0x2,0x6e,0x74, 0x2,0x72,0x39, + 0x1,0x5e,0x28, 0x1,0x6b,0x7b, 0x3,0x4b,0x22, 0x1,0x70,0x2c, + 0xf,0x61,0x7c, 0x2,0x68,0x61, 0x3,0x5e,0x22, 0x2,0x70,0x24, + 0x1,0x63,0x27, 0x3,0x39,0x6a, 0x3,0x54,0x3c, 0x3,0x54,0x3b, + 0x4,0x5a,0x5d, 0x2,0x61,0x3a, 0x3,0x5a,0x28, 0x4,0x5f,0x3e, + 0x1,0x7d,0x31, 0x1,0x63,0x28, 0x1,0x70,0x2d, 0x1,0x76,0x34, + 0x2,0x70,0x25, 0x1,0x63,0x29, 0x3,0x39,0x6b, 0x2,0x56,0x3c, + 0x1,0x73,0x3d, 0x2,0x5c,0x40, 0x2,0x5c,0x41, 0x3,0x54,0x3d, + 0x1,0x73,0x3c, 0x4,0x55,0x60, 0x2,0x61,0x3b, 0x1,0x76,0x38, + 0x1,0x76,0x36, 0x1,0x76,0x37, 0x1,0x76,0x35, 0x2,0x65,0x2c, + 0x1,0x78,0x28, 0x4,0x63,0x24, 0x3,0x5c,0x2a, 0x2,0x6b,0x43, + 0x2,0x6b,0x42, 0x2,0x6b,0x45, 0x2,0x6b,0x44, 0x1,0x7a,0x5d, + 0x2,0x6d,0x39, 0x4,0x68,0x56, 0x2,0x6d,0x3b, 0x2,0x6d,0x3a, + 0x1,0x7b,0x52, 0x2,0x6e,0x75, 0x3,0x60,0x29, 0x2,0x70,0x26, + 0x2,0x70,0x27, 0x1,0x7c,0x5c, 0x2,0x71,0x53, 0x2,0x71,0x6d, + 0x1,0x7d,0x42, 0x4,0x6e,0x43, 0x2,0x41,0x55, 0x2,0x5c,0x42, + 0x2,0x61,0x3c, 0x2,0x68,0x62, 0x2,0x48,0x75, 0x3,0x27,0x72, + 0x2,0x61,0x3d, 0x2,0x65,0x2e, 0x2,0x65,0x2d, 0x3,0x5a,0x29, + 0x3,0x5c,0x2d, 0x3,0x5c,0x2e, 0x3,0x5f,0x3c, 0x2,0x70,0x28, + 0x1,0x7c,0x7d, 0x3,0x61,0x5f, 0x2,0x71,0x54, 0x2,0x71,0x6e, + 0x1,0x67,0x6f, 0x2,0x56,0x3d, 0x2,0x56,0x3e, 0x4,0x4f,0x56, + 0x2,0x5c,0x43, 0x1,0x67,0x70, 0x3,0x45,0x6a, 0x1,0x78,0x29, + 0x2,0x65,0x2f, 0x3,0x5c,0x30, 0x2,0x6d,0x3d, 0x1,0x7b,0x53, + 0x2,0x6d,0x3e, 0x2,0x6d,0x3c, 0x2,0x70,0x29, 0x3,0x61,0x60, + 0x2,0x70,0x77, 0x4,0x6d,0x48, 0x1,0x67,0x71, 0x2,0x61,0x40, + 0x2,0x61,0x3f, 0x2,0x61,0x3e, 0x2,0x65,0x30, 0x3,0x5a,0x2b, + 0x3,0x5a,0x2a, 0x2,0x65,0x34, 0x2,0x65,0x33, 0x2,0x65,0x32, + 0x2,0x65,0x31, 0x1,0x78,0x2a, 0x2,0x68,0x63, 0x2,0x6b,0x47, + 0x1,0x7a,0x5e, 0x2,0x6b,0x46, 0x2,0x6d,0x3f, 0x2,0x6e,0x78, + 0x2,0x6e,0x77, 0x1,0x7c,0x30, 0x2,0x6e,0x76, 0x2,0x70,0x2c, + 0x2,0x70,0x2b, 0x2,0x70,0x2a, 0x3,0x60,0x6d, 0x4,0x6e,0x44, + 0x1,0x6b,0x7c, 0x4,0x55,0x63, 0x2,0x5c,0x44, 0x1,0x76,0x39, + 0x4,0x5a,0x64, 0x2,0x68,0x64, 0x2,0x68,0x65, 0x2,0x6e,0x79, + 0x2,0x70,0x2d, 0x4,0x6b,0x5c, 0x3,0x61,0x3b, 0x2,0x70,0x78, + 0x2,0x71,0x55, 0x2,0x72,0x29, 0x2,0x72,0x43, 0x1,0x6b,0x7d, + 0x1,0x76,0x3a, 0x2,0x65,0x35, 0x2,0x68,0x66, 0x2,0x6d,0x40, + 0x2,0x70,0x2e, 0x3,0x23,0x70, 0x1,0x70,0x2f, 0x3,0x54,0x3e, + 0x2,0x61,0x41, 0x2,0x65,0x36, 0x2,0x68,0x67, 0x2,0x68,0x68, + 0x2,0x68,0x69, 0x2,0x6b,0x4c, 0x3,0x5e,0x24, 0x2,0x6b,0x48, + 0x1,0x7b,0x54, 0x2,0x6b,0x4b, 0x2,0x6b,0x4a, 0x1,0x7a,0x5f, + 0x2,0x6b,0x49, 0x1,0x7a,0x61, 0x1,0x7a,0x60, 0x2,0x6d,0x42, + 0x2,0x6d,0x41, 0x1,0x7b,0x55, 0x1,0x7b,0x56, 0x4,0x68,0x60, + 0x3,0x5f,0x3e, 0x1,0x7c,0x32, 0x2,0x6e,0x7a, 0x1,0x7c,0x31, + 0x4,0x6b,0x61, 0x2,0x70,0x31, 0x2,0x70,0x32, 0x2,0x70,0x30, + 0x2,0x70,0x2f, 0x1,0x7d,0x21, 0x4,0x6c,0x64, 0x2,0x70,0x79, + 0x2,0x70,0x7a, 0x2,0x70,0x7b, 0x1,0x7c,0x7e, 0x2,0x71,0x56, + 0x2,0x71,0x59, 0x2,0x71,0x58, 0x2,0x71,0x57, 0x3,0x62,0x33, + 0x4,0x6e,0x45, 0x2,0x72,0x42, 0x1,0x73,0x3e, 0x3,0x57,0x55, + 0x4,0x63,0x2d, 0x1,0x78,0x32, 0x2,0x6b,0x4d, 0x2,0x6d,0x43, + 0x3,0x60,0x2b, 0x1,0x7c,0x33, 0x2,0x6e,0x7b, 0x4,0x6e,0x55, + 0x3,0x62,0x42, 0x2,0x72,0x44, 0xf,0x21,0x59, 0x1,0x73,0x3f, + 0x3,0x5e,0x47, 0x4,0x6e,0x33, 0x2,0x61,0x42, 0x3,0x5f,0x3f, + 0x2,0x6e,0x7c, 0x3,0x61,0x61, 0x2,0x71,0x6f, 0x3,0x61,0x77, + 0xf,0x58,0x4c, 0x1,0x21,0x2b, 0x1,0x21,0x36, 0x1,0x21,0x38, + 0x1,0x21,0x40, 0x1,0x21,0x41, 0x1,0x21,0x44, 0x1,0x21,0x45, + 0x1,0x21,0x48, 0x1,0x21,0x49, 0x1,0x21,0x4c, 0x1,0x21,0x4d, + 0x1,0x21,0x50, 0x1,0x21,0x51, 0x1,0x21,0x54, 0x1,0x21,0x55, + 0x1,0x21,0x58, 0x1,0x21,0x59, 0x1,0x21,0x5c, 0x1,0x21,0x5d, + 0x1,0x22,0x27, 0x1,0x22,0x28, 0x1,0x22,0x2b, 0x1,0x22,0x2c, + 0x1,0x22,0x29, 0x1,0x22,0x2a, 0x1,0x21,0x2e, 0x1,0x21,0x2f, + 0x1,0x21,0x30, 0x1,0x21,0x32, 0x1,0x21,0x33, 0x1,0x21,0x34, + 0x1,0x21,0x35, 0x1,0x21,0x5e, 0x1,0x21,0x5f, 0x1,0x21,0x60, + 0x1,0x21,0x61, 0x1,0x21,0x62, 0x1,0x21,0x63, 0x1,0x22,0x2d, + 0x1,0x22,0x2e, 0x1,0x22,0x2f, 0x1,0x22,0x3f, 0x1,0x22,0x40, + 0x1,0x22,0x41, 0x1,0x22,0x43, 0x1,0x22,0x42, 0x1,0x22,0x62, + 0x1,0x22,0x6c, 0x1,0x22,0x6d, 0x1,0x22,0x6e, 0x1,0x21,0x2a, + 0x1,0x21,0x6c, 0x1,0x22,0x63, 0x1,0x22,0x68, 0x1,0x21,0x6d, + 0x1,0x21,0x3e, 0x1,0x21,0x3f, 0x1,0x21,0x6e, 0x1,0x22,0x30, + 0x1,0x21,0x22, 0x1,0x22,0x31, 0x1,0x21,0x25, 0x1,0x22,0x5f, + 0x1,0x24,0x21, 0x1,0x24,0x22, 0x1,0x24,0x23, 0x1,0x24,0x24, + 0x1,0x24,0x25, 0x1,0x24,0x26, 0x1,0x24,0x27, 0x1,0x24,0x28, + 0x1,0x24,0x29, 0x1,0x24,0x2a, 0x1,0x21,0x28, 0x1,0x21,0x27, + 0x1,0x22,0x36, 0x1,0x22,0x38, 0x1,0x22,0x37, 0x1,0x21,0x29, + 0x1,0x22,0x69, 0x1,0x24,0x41, 0x1,0x24,0x42, 0x1,0x24,0x43, + 0x1,0x24,0x44, 0x1,0x24,0x45, 0x1,0x24,0x46, 0x1,0x24,0x47, + 0x1,0x24,0x48, 0x1,0x24,0x49, 0x1,0x24,0x4a, 0x1,0x24,0x4b, + 0x1,0x24,0x4c, 0x1,0x24,0x4d, 0x1,0x24,0x4e, 0x1,0x24,0x4f, + 0x1,0x24,0x50, 0x1,0x24,0x51, 0x1,0x24,0x52, 0x1,0x24,0x53, + 0x1,0x24,0x54, 0x1,0x24,0x55, 0x1,0x24,0x56, 0x1,0x24,0x57, + 0x1,0x24,0x58, 0x1,0x24,0x59, 0x1,0x24,0x5a, 0x1,0x22,0x60, + 0x1,0x22,0x25, 0x1,0x24,0x5b, 0x1,0x24,0x5c, 0x1,0x24,0x5d, + 0x1,0x24,0x5e, 0x1,0x24,0x5f, 0x1,0x24,0x60, 0x1,0x24,0x61, + 0x1,0x24,0x62, 0x1,0x24,0x63, 0x1,0x24,0x64, 0x1,0x24,0x65, + 0x1,0x24,0x66, 0x1,0x24,0x67, 0x1,0x24,0x68, 0x1,0x24,0x69, + 0x1,0x24,0x6a, 0x1,0x24,0x6b, 0x1,0x24,0x6c, 0x1,0x24,0x6d, + 0x1,0x24,0x6e, 0x1,0x24,0x6f, 0x1,0x24,0x70, 0x1,0x24,0x71, + 0x1,0x24,0x72, 0x1,0x24,0x73, 0x1,0x24,0x74, 0x1,0x21,0x42, + 0x1,0x22,0x5e, 0x1,0x21,0x43, 0x1,0x22,0x66, 0x1,0x22,0x67, + 0x1,0x22,0x64, 0x5,0x21,0x25, 0xf,0x21,0x21, 0x6,0x21,0x2f, + 0x6,0x21,0x2d, 0x6,0x21,0x2e, 0x6,0x21,0x42, 0x6,0x21,0x43, + 0x5,0x21,0x33, 0x3,0x21,0x44, 0xf,0x21,0x3e, 0xf,0x21,0x3f, + 0x6,0x22,0x2b, 0x5,0x21,0x4d, 0x6,0x23,0x40, 0x6,0x23,0x3e, + 0x6,0x23,0x3f, 0x6,0x24,0x67, 0x6,0x25,0x5f, 0x5,0x23,0x2f, + 0xf,0x22,0x74, 0x6,0x25,0x67, 0x6,0x25,0x63, 0x6,0x29,0x37, + 0x6,0x29,0x3a, 0x6,0x29,0x38, 0xf,0x29,0x22, 0xf,0x29,0x23, + 0x6,0x2e,0x66, 0x5,0x30,0x72, 0x5,0x33,0x23, 0xf,0x39,0x32, + 0xf,0x39,0x33, 0x6,0x47,0x2d, 0xf,0x3b,0x73, 0xf,0x40,0x35, + 0xf,0x40,0x75, 0xf,0x47,0x42, 0xf,0x4d,0x56, 0x7,0x21,0x21, + 0xf,0x59,0x47, 0x4,0x4f,0x7c, 0xf,0x5a,0x3f, 0x6,0x21,0x2c, + 0x6,0x21,0x22, 0x6,0x22,0x5f, 0x4,0x21,0x56, 0x6,0x23,0x41, + 0x6,0x25,0x60, 0x6,0x29,0x3b, 0x5,0x25,0x21, 0x5,0x27,0x7a, + 0x6,0x2e,0x4a, 0xf,0x29,0x50, 0x6,0x35,0x25, 0x6,0x35,0x26, + 0x6,0x45,0x7d, 0x6,0x46,0x3f, 0xf,0x46,0x40, 0x5,0x44,0x7e, + 0x6,0x21,0x32, 0x5,0x21,0x2d, 0x6,0x22,0x2d, 0x6,0x23,0x42, + 0xf,0x2d,0x61, 0x6,0x50,0x50, 0xf,0x53,0x44, 0x4,0x21,0x21, + 0x5,0x21,0x26, 0x6,0x21,0x24, 0xf,0x21,0x22, 0x6,0x21,0x33, + 0x6,0x21,0x44, 0xf,0x21,0x25, 0xf,0x21,0x26, 0x5,0x21,0x4e, + 0x6,0x22,0x30, 0xf,0x21,0x45, 0x6,0x22,0x4e, 0x6,0x22,0x2f, + 0xf,0x21,0x40, 0xf,0x21,0x41, 0x6,0x21,0x45, 0x6,0x22,0x31, + 0x6,0x22,0x2e, 0x4,0x22,0x26, 0x4,0x22,0x25, 0x5,0x22,0x24, + 0x5,0x22,0x25, 0x6,0x23,0x43, 0x6,0x29,0x3e, 0x6,0x24,0x5d, + 0x6,0x25,0x56, 0x6,0x25,0x61, 0x6,0x25,0x62, 0x6,0x2c,0x43, + 0x6,0x29,0x3c, 0x6,0x3a,0x65, 0xf,0x29,0x25, 0x6,0x2d,0x2d, + 0x6,0x29,0x3d, 0x6,0x2e,0x4b, 0x5,0x2b,0x67, 0x6,0x35,0x2a, + 0x6,0x35,0x27, 0x6,0x39,0x64, 0x6,0x35,0x29, 0x6,0x3c,0x7b, + 0x6,0x45,0x7e, 0x6,0x46,0x40, 0x6,0x46,0x41, 0x5,0x3d,0x56, + 0x5,0x21,0x23, 0x5,0x21,0x22, 0x6,0x21,0x26, 0x6,0x21,0x25, + 0x5,0x21,0x21, 0x5,0x21,0x2b, 0xf,0x21,0x23, 0x6,0x21,0x46, + 0x5,0x21,0x34, 0xf,0x21,0x27, 0xf,0x21,0x28, 0x6,0x22,0x33, + 0x6,0x22,0x32, 0x6,0x22,0x2a, 0x5,0x21,0x4f, 0x6,0x23,0x46, + 0x6,0x23,0x44, 0xf,0x21,0x6e, 0x6,0x23,0x45, 0xf,0x22,0x75, + 0x6,0x29,0x3f, 0x6,0x2d,0x2c, 0x4,0x26,0x24, 0x6,0x2e,0x4d, + 0x6,0x2e,0x4e, 0xf,0x25,0x40, 0x6,0x2e,0x4c, 0x6,0x35,0x2b, + 0xf,0x2d,0x60, 0x6,0x3c,0x7e, 0x5,0x30,0x73, 0x6,0x3c,0x7d, + 0xf,0x39,0x34, 0x6,0x50,0x51, 0x5,0x44,0x55, 0xf,0x46,0x41, + 0x6,0x5a,0x63, 0x6,0x5a,0x62, 0x7,0x36,0x73, 0x7,0x46,0x27, + 0x7,0x4d,0x3a, 0x5,0x21,0x24, 0x5,0x21,0x27, 0x4,0x21,0x28, + 0x5,0x21,0x28, 0x5,0x21,0x2c, 0x6,0x21,0x47, 0x6,0x21,0x48, + 0x6,0x21,0x49, 0x6,0x23,0x47, 0x5,0x23,0x30, 0x6,0x25,0x64, + 0x6,0x29,0x40, 0x5,0x30,0x74, 0x6,0x46,0x42, 0x7,0x2c,0x3c, + 0x6,0x21,0x27, 0x6,0x21,0x28, 0x6,0x21,0x29, 0x6,0x21,0x4a, + 0x6,0x25,0x65, 0x6,0x23,0x48, 0x6,0x23,0x49, 0x6,0x25,0x68, + 0xf,0x22,0x76, 0x4,0x25,0x33, 0x5,0x25,0x22, 0x4,0x25,0x32, + 0x6,0x2e,0x50, 0x5,0x27,0x7b, 0xf,0x29,0x27, 0x6,0x30,0x7c, + 0x6,0x35,0x2d, 0x6,0x35,0x2c, 0xf,0x2d,0x62, 0x6,0x3d,0x21, + 0xf,0x4d,0x6e, 0x6,0x23,0x4a, 0xf,0x21,0x6f, 0xf,0x21,0x70, + 0xf,0x22,0x2b, 0x5,0x23,0x31, 0xf,0x22,0x77, 0xf,0x22,0x78, + 0xf,0x22,0x79, 0x5,0x25,0x23, 0x6,0x29,0x41, 0xf,0x25,0x43, + 0x6,0x2e,0x52, 0x6,0x2e,0x51, 0xf,0x29,0x28, 0x6,0x35,0x2f, + 0x5,0x2c,0x66, 0x4,0x2b,0x5f, 0x6,0x35,0x30, 0xf,0x2d,0x63, + 0x6,0x35,0x31, 0x6,0x46,0x43, 0x6,0x3d,0x23, 0x6,0x3d,0x22, + 0x4,0x30,0x44, 0x5,0x30,0x75, 0xf,0x32,0x74, 0xf,0x32,0x75, + 0xf,0x32,0x72, 0x6,0x46,0x45, 0x6,0x46,0x44, 0x6,0x46,0x46, + 0x4,0x36,0x2f, 0xf,0x39,0x35, 0xf,0x39,0x36, 0xf,0x39,0x37, + 0x6,0x4c,0x2d, 0xf,0x40,0x36, 0xf,0x40,0x37, 0xf,0x40,0x38, + 0xf,0x46,0x42, 0x6,0x50,0x52, 0x5,0x4b,0x71, 0x7,0x21,0x22, + 0xf,0x4d,0x57, 0xf,0x4d,0x58, 0xf,0x4d,0x59, 0x7,0x26,0x79, + 0x7,0x21,0x24, 0x7,0x21,0x23, 0x7,0x21,0x46, 0x7,0x2c,0x3f, + 0x5,0x53,0x53, 0x7,0x2c,0x3e, 0x7,0x2c,0x3d, 0x7,0x46,0x23, + 0x7,0x46,0x28, 0x6,0x21,0x34, 0x6,0x21,0x35, 0xf,0x21,0x24, + 0x6,0x21,0x4c, 0xf,0x21,0x29, 0x6,0x21,0x4b, 0x3,0x21,0x6f, + 0xf,0x21,0x43, 0x6,0x22,0x35, 0x6,0x22,0x34, 0x6,0x22,0x36, + 0x4,0x21,0x58, 0x4,0x22,0x2c, 0x4,0x22,0x2b, 0x4,0x22,0x29, + 0x6,0x23,0x4f, 0x4,0x22,0x30, 0x6,0x23,0x50, 0x5,0x22,0x27, + 0x6,0x23,0x4d, 0x6,0x23,0x4c, 0x4,0x22,0x2f, 0x6,0x23,0x4b, + 0xf,0x21,0x73, 0xf,0x21,0x74, 0xf,0x21,0x75, 0xf,0x21,0x76, + 0xf,0x21,0x77, 0xf,0x21,0x78, 0xf,0x21,0x79, 0x5,0x22,0x28, + 0x6,0x23,0x51, 0x5,0x22,0x26, 0xf,0x21,0x7a, 0x5,0x23,0x32, + 0x6,0x25,0x6a, 0x4,0x23,0x3a, 0x6,0x25,0x6b, 0x6,0x25,0x74, + 0x6,0x25,0x70, 0x6,0x25,0x6c, 0xf,0x22,0x7a, 0xf,0x22,0x7b, + 0xf,0x22,0x7c, 0xf,0x22,0x7d, 0xf,0x23,0x21, 0xf,0x23,0x22, + 0xf,0x23,0x23, 0xf,0x23,0x25, 0xf,0x23,0x28, 0xf,0x23,0x29, + 0xf,0x23,0x2a, 0xf,0x23,0x2b, 0xf,0x23,0x2c, 0x4,0x23,0x38, + 0x6,0x25,0x6d, 0x6,0x25,0x6f, 0xf,0x23,0x26, 0x6,0x25,0x6e, + 0x6,0x25,0x69, 0x5,0x23,0x33, 0x6,0x25,0x73, 0x6,0x29,0x43, + 0x6,0x29,0x45, 0x4,0x25,0x3a, 0x5,0x25,0x28, 0x6,0x29,0x46, + 0x5,0x25,0x29, 0x3,0x27,0x4e, 0x5,0x25,0x2a, 0x4,0x25,0x37, + 0x4,0x25,0x35, 0x6,0x29,0x4a, 0x6,0x29,0x44, 0x6,0x29,0x4c, + 0x6,0x29,0x47, 0x6,0x29,0x4e, 0x5,0x25,0x26, 0x6,0x29,0x42, + 0xf,0x25,0x45, 0xf,0x25,0x46, 0xf,0x25,0x48, 0xf,0x25,0x49, + 0xf,0x25,0x4b, 0xf,0x25,0x4c, 0xf,0x25,0x4d, 0xf,0x25,0x4e, + 0xf,0x25,0x4f, 0xf,0x25,0x50, 0xf,0x25,0x51, 0x6,0x29,0x4d, + 0x6,0x29,0x48, 0x6,0x29,0x49, 0x6,0x29,0x4b, 0x5,0x25,0x24, + 0x5,0x25,0x27, 0x5,0x27,0x7c, 0x6,0x2e,0x64, 0x6,0x2e,0x59, + 0x5,0x2b,0x72, 0x4,0x28,0x36, 0x6,0x2e,0x63, 0x6,0x2e,0x57, + 0x6,0x2e,0x56, 0x5,0x28,0x23, 0x4,0x28,0x3b, 0x6,0x2e,0x5d, + 0x5,0x27,0x7e, 0x5,0x27,0x7d, 0x5,0x28,0x22, 0x6,0x2e,0x62, + 0x6,0x2e,0x55, 0x6,0x2e,0x54, 0x6,0x2e,0x65, 0x6,0x2e,0x5c, + 0xf,0x29,0x29, 0xf,0x29,0x2a, 0xf,0x29,0x2b, 0xf,0x29,0x2c, + 0xf,0x29,0x2e, 0xf,0x29,0x2f, 0xf,0x29,0x31, 0xf,0x29,0x32, + 0xf,0x29,0x33, 0xf,0x29,0x34, 0xf,0x29,0x35, 0xf,0x29,0x36, + 0xf,0x29,0x37, 0xf,0x29,0x38, 0x6,0x2e,0x53, 0x6,0x2e,0x58, + 0x6,0x2e,0x5b, 0x6,0x2e,0x5e, 0x6,0x2e,0x60, 0xf,0x25,0x47, + 0x6,0x2e,0x5f, 0x5,0x28,0x24, 0x4,0x2b,0x63, 0x5,0x2b,0x70, + 0x4,0x2b,0x67, 0x6,0x35,0x36, 0x5,0x2b,0x6b, 0x6,0x35,0x35, + 0x5,0x2b,0x74, 0x4,0x2b,0x66, 0x4,0x2b,0x68, 0x5,0x2b,0x6f, + 0x6,0x35,0x32, 0x5,0x2b,0x69, 0xf,0x2d,0x64, 0xf,0x2d,0x6e, + 0x6,0x35,0x37, 0x5,0x2b,0x6e, 0xf,0x2d,0x66, 0xf,0x2d,0x67, + 0xf,0x2d,0x6a, 0xf,0x2d,0x6b, 0xf,0x2d,0x6c, 0xf,0x2d,0x6d, + 0xf,0x2d,0x6f, 0xf,0x2d,0x71, 0xf,0x2d,0x72, 0xf,0x2d,0x73, + 0xf,0x2d,0x74, 0xf,0x2d,0x75, 0xf,0x2d,0x76, 0xf,0x2d,0x78, + 0xf,0x2d,0x79, 0xf,0x2d,0x7a, 0xf,0x2d,0x7b, 0xf,0x2d,0x7c, + 0x6,0x35,0x21, 0x6,0x35,0x3a, 0x6,0x35,0x3b, 0x6,0x35,0x33, + 0x6,0x35,0x34, 0x5,0x2b,0x68, 0x6,0x35,0x39, 0xf,0x2d,0x77, + 0xf,0x2d,0x70, 0x5,0x2b,0x6a, 0x5,0x2b,0x6d, 0x5,0x2b,0x75, + 0x5,0x2b,0x71, 0x5,0x2b,0x73, 0x4,0x2b,0x60, 0x6,0x3d,0x2b, + 0x6,0x3d,0x2d, 0x6,0x3d,0x2c, 0x4,0x30,0x49, 0x4,0x30,0x48, + 0x6,0x3d,0x30, 0x6,0x3d,0x28, 0x5,0x31,0x21, 0x6,0x3d,0x33, + 0x5,0x30,0x77, 0x6,0x3d,0x2e, 0x6,0x3d,0x27, 0x5,0x31,0x22, + 0x5,0x30,0x76, 0x4,0x30,0x46, 0x6,0x3d,0x2a, 0x6,0x3d,0x31, + 0x6,0x3d,0x37, 0x6,0x3d,0x32, 0x6,0x3d,0x29, 0x4,0x30,0x4b, + 0x6,0x3d,0x34, 0xf,0x2d,0x69, 0xf,0x32,0x77, 0xf,0x32,0x78, + 0xf,0x32,0x79, 0xf,0x32,0x7a, 0xf,0x32,0x7b, 0xf,0x32,0x7c, + 0xf,0x32,0x7e, 0xf,0x33,0x21, 0xf,0x33,0x23, 0xf,0x33,0x24, + 0xf,0x33,0x25, 0xf,0x33,0x26, 0xf,0x33,0x27, 0x6,0x46,0x37, + 0x6,0x3d,0x38, 0x6,0x3e,0x65, 0x6,0x3d,0x39, 0x6,0x3d,0x2f, + 0x5,0x30,0x7a, 0x6,0x43,0x63, 0x5,0x30,0x7d, 0x5,0x31,0x23, + 0x6,0x3d,0x24, 0x6,0x3d,0x26, 0xf,0x32,0x7d, 0x5,0x30,0x79, + 0x5,0x30,0x7e, 0x5,0x30,0x78, 0x6,0x3d,0x25, 0x6,0x3d,0x36, + 0x5,0x30,0x7c, 0x6,0x46,0x49, 0x6,0x46,0x4f, 0x5,0x36,0x56, + 0x5,0x36,0x51, 0x6,0x46,0x4c, 0x5,0x36,0x4e, 0x5,0x36,0x52, + 0x5,0x36,0x63, 0x5,0x36,0x53, 0x6,0x46,0x48, 0x5,0x36,0x55, + 0x5,0x36,0x50, 0x6,0x46,0x56, 0x4,0x36,0x35, 0x5,0x36,0x54, + 0x6,0x46,0x52, 0x6,0x46,0x50, 0x6,0x46,0x4b, 0x6,0x46,0x4e, + 0x6,0x46,0x53, 0xf,0x32,0x76, 0x6,0x46,0x58, 0x5,0x36,0x4f, + 0x5,0x36,0x57, 0x6,0x46,0x47, 0xf,0x39,0x38, 0xf,0x39,0x39, + 0xf,0x39,0x3a, 0xf,0x39,0x3b, 0xf,0x39,0x3c, 0xf,0x39,0x3d, + 0xf,0x39,0x3e, 0xf,0x39,0x3f, 0x6,0x46,0x4d, 0x4,0x36,0x3b, + 0x6,0x46,0x51, 0x6,0x46,0x54, 0x5,0x36,0x4d, 0x6,0x46,0x4a, + 0x5,0x34,0x21, 0x6,0x50,0x5a, 0x4,0x42,0x38, 0x5,0x3d,0x5a, + 0x5,0x3d,0x58, 0x6,0x50,0x53, 0x5,0x30,0x7b, 0x5,0x3d,0x5e, + 0x5,0x3d,0x5c, 0x6,0x50,0x58, 0x5,0x3d,0x5b, 0x6,0x50,0x5f, + 0x6,0x50,0x5d, 0x4,0x3c,0x2e, 0x6,0x50,0x5c, 0x6,0x50,0x62, + 0x6,0x50,0x55, 0x4,0x3c,0x2f, 0x5,0x3d,0x60, 0x6,0x50,0x54, + 0x5,0x3d,0x57, 0x6,0x50,0x57, 0x6,0x50,0x5e, 0xf,0x40,0x39, + 0xf,0x40,0x3a, 0xf,0x40,0x3b, 0xf,0x40,0x3c, 0xf,0x40,0x3d, + 0xf,0x40,0x3e, 0xf,0x40,0x3f, 0xf,0x40,0x40, 0xf,0x40,0x41, + 0xf,0x40,0x42, 0xf,0x40,0x43, 0xf,0x40,0x44, 0xf,0x40,0x45, + 0xf,0x40,0x46, 0x6,0x50,0x61, 0x6,0x56,0x4e, 0x6,0x50,0x59, + 0x6,0x50,0x56, 0x6,0x46,0x57, 0x5,0x3d,0x59, 0x5,0x3d,0x5d, + 0x5,0x3d,0x5f, 0x4,0x3c,0x2b, 0x6,0x50,0x60, 0x6,0x5a,0x71, + 0x5,0x3d,0x61, 0x7,0x21,0x2e, 0x4,0x42,0x34, 0x5,0x44,0x56, + 0x6,0x5a,0x64, 0x6,0x5a,0x69, 0x5,0x3d,0x62, 0x6,0x5a,0x6b, + 0x4,0x42,0x39, 0x6,0x5a,0x74, 0x4,0x42,0x31, 0x6,0x5a,0x75, + 0x6,0x5a,0x68, 0x6,0x5a,0x67, 0x6,0x5a,0x76, 0xf,0x46,0x43, + 0xf,0x46,0x44, 0xf,0x46,0x45, 0xf,0x46,0x46, 0xf,0x46,0x47, + 0xf,0x46,0x49, 0xf,0x46,0x4a, 0xf,0x46,0x4b, 0xf,0x46,0x4c, + 0xf,0x46,0x4d, 0xf,0x46,0x4e, 0xf,0x46,0x4f, 0xf,0x46,0x51, + 0xf,0x46,0x52, 0xf,0x46,0x53, 0xf,0x46,0x54, 0xf,0x46,0x56, + 0xf,0x46,0x57, 0xf,0x46,0x58, 0xf,0x53,0x45, 0x7,0x26,0x2d, + 0x5,0x44,0x58, 0x6,0x5a,0x77, 0x6,0x5e,0x57, 0x6,0x5a,0x6d, + 0x6,0x5a,0x6f, 0x6,0x5a,0x65, 0xf,0x46,0x50, 0xf,0x46,0x48, + 0xf,0x46,0x55, 0x4,0x42,0x30, 0x6,0x5a,0x66, 0x6,0x5a,0x6a, + 0x6,0x5a,0x6e, 0x6,0x5a,0x70, 0x4,0x42,0x36, 0x5,0x3f,0x46, + 0x4,0x48,0x7e, 0x4,0x48,0x7a, 0x6,0x5a,0x6c, 0x7,0x21,0x2f, + 0x7,0x21,0x31, 0x7,0x21,0x29, 0x7,0x21,0x26, 0x7,0x21,0x25, + 0x5,0x4b,0x77, 0x4,0x48,0x7c, 0x7,0x21,0x2b, 0x7,0x21,0x2c, + 0x5,0x4b,0x73, 0x7,0x21,0x2a, 0x5,0x4b,0x79, 0x5,0x4b,0x78, + 0x7,0x21,0x27, 0xf,0x4d,0x5a, 0xf,0x4d,0x5b, 0xf,0x4d,0x5c, + 0xf,0x4d,0x5d, 0xf,0x4d,0x5e, 0xf,0x4d,0x60, 0xf,0x4d,0x61, + 0x7,0x21,0x28, 0x5,0x4b,0x72, 0x7,0x21,0x2d, 0xf,0x4d,0x62, + 0x4,0x49,0x21, 0x5,0x4b,0x75, 0x7,0x21,0x30, 0x5,0x4b,0x74, + 0x5,0x4c,0x45, 0x5,0x53,0x54, 0x5,0x53,0x5a, 0x7,0x2c,0x40, + 0x4,0x4f,0x58, 0x4,0x4f,0x5f, 0x5,0x53,0x58, 0x4,0x4f,0x5c, + 0x4,0x4f,0x5e, 0x5,0x53,0x55, 0x5,0x53,0x56, 0xf,0x53,0x46, + 0xf,0x53,0x47, 0xf,0x53,0x48, 0xf,0x53,0x49, 0xf,0x53,0x4a, + 0x5,0x53,0x5b, 0x5,0x53,0x57, 0x7,0x36,0x78, 0x5,0x4b,0x76, + 0x5,0x5a,0x6f, 0x5,0x5a,0x70, 0x4,0x55,0x67, 0x4,0x55,0x66, + 0x7,0x36,0x76, 0xf,0x59,0x48, 0xf,0x59,0x4a, 0xf,0x59,0x4b, + 0xf,0x59,0x4c, 0xf,0x59,0x4e, 0x7,0x36,0x75, 0x7,0x36,0x77, + 0xf,0x59,0x49, 0x4,0x55,0x68, 0x7,0x36,0x74, 0x7,0x3e,0x76, + 0x4,0x5a,0x6b, 0x4,0x5a,0x69, 0x4,0x5a,0x6a, 0x7,0x3e,0x78, + 0x7,0x3e,0x77, 0xf,0x5e,0x30, 0xf,0x5e,0x31, 0xf,0x5e,0x2c, + 0xf,0x5e,0x2e, 0xf,0x5e,0x2f, 0x7,0x3e,0x75, 0x5,0x61,0x31, + 0x4,0x5a,0x6c, 0x5,0x61,0x2f, 0x5,0x61,0x30, 0x5,0x61,0x32, + 0x5,0x67,0x4a, 0x5,0x67,0x4e, 0x4,0x63,0x2e, 0x5,0x67,0x4d, + 0x5,0x67,0x4f, 0xf,0x61,0x7e, 0xf,0x62,0x21, 0x7,0x47,0x6f, + 0x5,0x67,0x4c, 0x5,0x67,0x4b, 0x5,0x69,0x7c, 0x7,0x52,0x75, + 0x7,0x4d,0x3c, 0xf,0x64,0x7a, 0x5,0x6b,0x6b, 0x7,0x4d,0x3b, + 0x7,0x4d,0x68, 0x4,0x66,0x2f, 0x4,0x66,0x2e, 0x5,0x6f,0x68, + 0x7,0x57,0x4e, 0x5,0x6b,0x6c, 0xf,0x67,0x3f, 0xf,0x67,0x7e, + 0x4,0x66,0x2d, 0x7,0x57,0x4d, 0xf,0x69,0x38, 0xf,0x69,0x3a, + 0xf,0x69,0x39, 0x5,0x73,0x31, 0x4,0x6a,0x40, 0x7,0x5b,0x45, + 0xf,0x6a,0x4b, 0xf,0x6b,0x41, 0x5,0x75,0x62, 0x4,0x6d,0x52, + 0xf,0x6c,0x49, 0x6,0x21,0x4d, 0x4,0x21,0x5c, 0x4,0x22,0x32, + 0x6,0x23,0x53, 0x6,0x23,0x54, 0x6,0x25,0x75, 0x6,0x25,0x77, + 0x6,0x25,0x78, 0x5,0x23,0x35, 0x6,0x25,0x76, 0x6,0x29,0x51, + 0x6,0x29,0x50, 0x6,0x29,0x4f, 0x6,0x29,0x53, 0xf,0x25,0x53, + 0x6,0x29,0x52, 0xf,0x25,0x52, 0x6,0x2e,0x67, 0x6,0x2e,0x68, + 0x5,0x2b,0x76, 0xf,0x2d,0x7d, 0xf,0x2d,0x7e, 0xf,0x2e,0x21, + 0x6,0x35,0x3c, 0xf,0x33,0x28, 0x5,0x31,0x24, 0x5,0x31,0x25, + 0xf,0x33,0x29, 0xf,0x33,0x2a, 0x6,0x46,0x59, 0xf,0x39,0x40, + 0xf,0x39,0x41, 0xf,0x39,0x42, 0x5,0x36,0x58, 0xf,0x39,0x43, + 0xf,0x40,0x47, 0x6,0x50,0x63, 0xf,0x40,0x48, 0xf,0x46,0x59, + 0xf,0x46,0x5a, 0x5,0x44,0x59, 0x7,0x21,0x34, 0x7,0x21,0x32, + 0x5,0x4b,0x7b, 0xf,0x4d,0x63, 0xf,0x4d,0x64, 0x5,0x4b,0x7a, + 0x7,0x21,0x33, 0x5,0x53,0x5c, 0x7,0x2c,0x41, 0xf,0x53,0x4b, + 0xf,0x53,0x4c, 0xf,0x53,0x4d, 0xf,0x53,0x4e, 0x5,0x5a,0x71, + 0xf,0x59,0x4f, 0xf,0x59,0x50, 0xf,0x59,0x51, 0x7,0x3e,0x79, + 0x5,0x61,0x33, 0xf,0x5e,0x32, 0x7,0x46,0x29, 0x5,0x67,0x50, + 0xf,0x64,0x7b, 0x5,0x67,0x51, 0x5,0x6b,0x6d, 0xf,0x67,0x41, + 0xf,0x69,0x3b, 0xf,0x6a,0x4c, 0x5,0x77,0x53, 0xf,0x6b,0x42, + 0x6,0x21,0x36, 0x5,0x21,0x36, 0x5,0x21,0x35, 0x6,0x22,0x37, + 0x6,0x23,0x56, 0x6,0x23,0x55, 0x5,0x23,0x36, 0x6,0x25,0x79, + 0x5,0x23,0x38, 0x5,0x28,0x25, 0x5,0x28,0x26, 0x4,0x2b,0x6a, + 0x6,0x35,0x3d, 0xf,0x2e,0x22, 0xf,0x2e,0x23, 0x6,0x3d,0x3a, + 0x6,0x46,0x5a, 0x6,0x50,0x64, 0x5,0x3d,0x63, 0x4,0x3c,0x31, + 0x6,0x5a,0x78, 0x5,0x5a,0x72, 0x6,0x21,0x37, 0x6,0x21,0x4e, + 0x5,0x21,0x37, 0x6,0x21,0x41, 0x6,0x21,0x59, 0x5,0x21,0x50, + 0x6,0x23,0x3b, 0x4,0x22,0x35, 0x6,0x23,0x57, 0x6,0x25,0x7c, + 0x6,0x25,0x7e, 0x5,0x23,0x39, 0xf,0x23,0x2d, 0x6,0x25,0x7a, + 0x6,0x29,0x54, 0x6,0x2e,0x6b, 0x6,0x2e,0x69, 0x5,0x28,0x27, + 0x6,0x2e,0x6a, 0x6,0x2e,0x4f, 0x6,0x30,0x7b, 0x6,0x35,0x40, + 0x6,0x35,0x3f, 0x6,0x35,0x41, 0x6,0x35,0x3e, 0x6,0x3d,0x3b, + 0x6,0x46,0x5d, 0x5,0x3d,0x64, 0xf,0x39,0x44, 0xf,0x39,0x45, + 0x6,0x46,0x5b, 0x6,0x46,0x5c, 0x5,0x3d,0x65, 0x6,0x50,0x65, + 0xf,0x40,0x49, 0xf,0x40,0x4a, 0x4,0x42,0x3a, 0x6,0x5a,0x79, + 0xf,0x54,0x46, 0xf,0x53,0x4f, 0xf,0x53,0x50, 0x5,0x61,0x34, + 0xf,0x5e,0x33, 0x7,0x46,0x2a, 0x7,0x46,0x2b, 0x4,0x21,0x2d, + 0x6,0x21,0x4f, 0x6,0x21,0x51, 0x6,0x22,0x39, 0x4,0x21,0x5d, + 0x6,0x22,0x38, 0x5,0x21,0x52, 0xf,0x21,0x46, 0x6,0x22,0x3a, + 0x5,0x21,0x51, 0x6,0x23,0x5a, 0x6,0x23,0x58, 0x6,0x25,0x47, + 0x6,0x26,0x23, 0x6,0x26,0x21, 0x6,0x26,0x22, 0x5,0x23,0x3a, + 0x6,0x28,0x7a, 0x5,0x25,0x2c, 0x6,0x29,0x55, 0x6,0x29,0x56, + 0x6,0x2e,0x6c, 0x6,0x35,0x42, 0x6,0x35,0x43, 0x5,0x2b,0x77, + 0x5,0x2b,0x78, 0x6,0x3d,0x3d, 0x6,0x46,0x5f, 0x3,0x39,0x77, + 0x6,0x46,0x5e, 0x4,0x3c,0x33, 0x5,0x3d,0x66, 0x6,0x5a,0x7b, + 0x6,0x5a,0x7a, 0x7,0x21,0x35, 0x5,0x53,0x5d, 0x7,0x2c,0x42, + 0xf,0x55,0x76, 0x4,0x5a,0x6d, 0xf,0x67,0x42, 0x7,0x57,0x4f, + 0x5,0x21,0x38, 0x6,0x22,0x3b, 0xf,0x21,0x48, 0xf,0x21,0x49, + 0x6,0x23,0x5b, 0x4,0x22,0x37, 0x5,0x22,0x29, 0xf,0x21,0x7b, + 0xf,0x23,0x2e, 0xf,0x23,0x2f, 0x5,0x25,0x2d, 0xf,0x25,0x55, + 0x6,0x2e,0x6d, 0x6,0x3d,0x3e, 0xf,0x2e,0x25, 0xf,0x2e,0x26, + 0xf,0x2e,0x27, 0xf,0x2e,0x28, 0xf,0x2e,0x29, 0x5,0x31,0x27, + 0x6,0x46,0x60, 0xf,0x39,0x47, 0xf,0x39,0x48, 0x6,0x46,0x61, + 0xf,0x3a,0x5d, 0x6,0x50,0x66, 0x6,0x5a,0x7c, 0xf,0x46,0x5b, + 0x5,0x4e,0x77, 0x7,0x2c,0x43, 0xf,0x59,0x52, 0xf,0x53,0x51, + 0x7,0x3e,0x7a, 0x7,0x46,0x2c, 0x7,0x4d,0x3f, 0x5,0x6f,0x69, + 0x5,0x75,0x63, 0xf,0x21,0x4a, 0x6,0x23,0x5c, 0xf,0x21,0x7d, + 0xf,0x21,0x7e, 0x4,0x22,0x38, 0x5,0x23,0x3b, 0x6,0x26,0x24, + 0x4,0x23,0x3c, 0xf,0x23,0x30, 0xf,0x23,0x31, 0xf,0x23,0x32, + 0xf,0x23,0x33, 0xf,0x23,0x24, 0xf,0x22,0x7e, 0x4,0x25,0x41, + 0x4,0x25,0x42, 0x6,0x29,0x58, 0x6,0x29,0x59, 0x5,0x25,0x2f, + 0xf,0x25,0x57, 0x5,0x28,0x29, 0x4,0x28,0x41, 0x4,0x28,0x42, + 0x5,0x28,0x2c, 0x5,0x28,0x28, 0x5,0x28,0x2a, 0x6,0x2e,0x6f, + 0xf,0x29,0x3a, 0xf,0x29,0x3c, 0xf,0x29,0x3d, 0xf,0x29,0x3e, + 0xf,0x29,0x3f, 0x6,0x2e,0x6e, 0x5,0x2b,0x7a, 0x4,0x2b,0x6b, + 0x5,0x2b,0x79, 0x5,0x28,0x2b, 0x6,0x35,0x45, 0x5,0x2b,0x7b, + 0xf,0x2e,0x2a, 0xf,0x2e,0x2b, 0x6,0x35,0x46, 0x5,0x31,0x28, + 0x6,0x3d,0x3f, 0x6,0x3d,0x40, 0x4,0x30,0x4e, 0xf,0x33,0x2b, + 0xf,0x33,0x2c, 0xf,0x33,0x2d, 0xf,0x33,0x2f, 0xf,0x33,0x30, + 0x6,0x46,0x62, 0x5,0x36,0x5c, 0x5,0x36,0x5a, 0x5,0x36,0x5b, + 0x5,0x36,0x59, 0x4,0x36,0x3e, 0xf,0x33,0x2e, 0x5,0x3d,0x6c, + 0x5,0x3d,0x67, 0x5,0x3d,0x69, 0x5,0x3d,0x6a, 0x5,0x3d,0x68, + 0x5,0x3d,0x6b, 0x6,0x50,0x67, 0x6,0x5a,0x7d, 0x5,0x4c,0x21, + 0x5,0x44,0x5a, 0x7,0x21,0x37, 0xf,0x46,0x5d, 0xf,0x46,0x5e, + 0x5,0x4b,0x7e, 0x5,0x4b,0x7d, 0x5,0x4b,0x7c, 0x7,0x21,0x36, + 0xf,0x4d,0x67, 0xf,0x53,0x53, 0x7,0x2c,0x45, 0xf,0x4d,0x66, + 0xf,0x53,0x52, 0x4,0x55,0x6a, 0x7,0x2c,0x46, 0x5,0x5a,0x73, + 0xf,0x59,0x53, 0xf,0x59,0x54, 0x5,0x61,0x36, 0x5,0x61,0x35, + 0x5,0x61,0x37, 0xf,0x5e,0x34, 0x7,0x3e,0x7b, 0x5,0x67,0x52, + 0x5,0x67,0x53, 0x7,0x52,0x76, 0x5,0x73,0x32, 0x4,0x21,0x29, + 0x6,0x21,0x52, 0xf,0x21,0x2a, 0xf,0x21,0x2b, 0xf,0x21,0x2c, + 0xf,0x21,0x2e, 0x6,0x21,0x5c, 0xf,0x21,0x2d, 0x5,0x21,0x53, + 0x6,0x22,0x3d, 0x4,0x21,0x5f, 0x6,0x23,0x5e, 0x6,0x23,0x5d, + 0x6,0x23,0x5f, 0x6,0x23,0x60, 0xf,0x21,0x4b, 0x6,0x26,0x27, + 0x6,0x26,0x25, 0x6,0x26,0x26, 0xf,0x23,0x34, 0xf,0x23,0x35, + 0x4,0x25,0x46, 0x6,0x29,0x5a, 0x4,0x25,0x44, 0x6,0x29,0x5b, + 0x6,0x29,0x5c, 0x6,0x29,0x5d, 0xf,0x25,0x58, 0xf,0x25,0x59, + 0x6,0x2e,0x72, 0x6,0x2e,0x70, 0x6,0x2e,0x71, 0x6,0x35,0x47, + 0xf,0x2e,0x2c, 0x6,0x37,0x27, 0x6,0x3d,0x42, 0x6,0x3d,0x43, + 0x6,0x3d,0x41, 0xf,0x33,0x31, 0xf,0x33,0x32, 0xf,0x33,0x33, + 0x6,0x46,0x63, 0x6,0x46,0x66, 0xf,0x39,0x49, 0x6,0x46,0x64, + 0xf,0x39,0x4a, 0xf,0x46,0x5f, 0xf,0x46,0x60, 0xf,0x46,0x61, + 0xf,0x4d,0x68, 0x7,0x2c,0x47, 0xf,0x53,0x54, 0xf,0x53,0x55, + 0xf,0x53,0x43, 0xf,0x59,0x55, 0xf,0x5e,0x35, 0xf,0x67,0x43, + 0x4,0x21,0x2e, 0x5,0x21,0x39, 0x6,0x21,0x53, 0x6,0x21,0x54, + 0x6,0x22,0x3f, 0x5,0x21,0x54, 0x6,0x22,0x3e, 0xf,0x21,0x4c, + 0x6,0x23,0x65, 0x6,0x23,0x61, 0x6,0x23,0x62, 0x6,0x23,0x63, + 0xf,0x22,0x21, 0x5,0x22,0x2a, 0x6,0x26,0x28, 0xf,0x23,0x36, + 0x6,0x29,0x60, 0x6,0x29,0x5f, 0x6,0x2e,0x73, 0x6,0x2e,0x74, + 0x6,0x34,0x7a, 0x6,0x35,0x48, 0x6,0x3d,0x44, 0x6,0x3d,0x45, + 0x5,0x36,0x5d, 0x6,0x5a,0x7e, 0xf,0x46,0x62, 0x7,0x21,0x70, + 0x7,0x36,0x7b, 0x5,0x5a,0x76, 0x5,0x67,0x54, 0x7,0x4e,0x3e, + 0x6,0x21,0x39, 0x4,0x21,0x40, 0x6,0x21,0x55, 0x5,0x21,0x3a, + 0x5,0x21,0x3b, 0x6,0x21,0x56, 0x4,0x21,0x41, 0xf,0x21,0x2f, + 0x6,0x21,0x57, 0x5,0x21,0x55, 0x5,0x21,0x56, 0x4,0x21,0x62, + 0x6,0x22,0x44, 0x5,0x21,0x57, 0x6,0x22,0x43, 0x6,0x22,0x40, + 0x6,0x22,0x45, 0x4,0x22,0x3a, 0x6,0x23,0x6a, 0x5,0x22,0x2e, + 0x5,0x22,0x2c, 0x5,0x22,0x2b, 0x4,0x22,0x3b, 0x4,0x22,0x39, + 0x6,0x23,0x68, 0x6,0x23,0x67, 0x5,0x22,0x2f, 0x6,0x23,0x6b, + 0x6,0x23,0x69, 0x5,0x22,0x2d, 0x4,0x22,0x3d, 0xf,0x22,0x22, + 0xf,0x22,0x23, 0x4,0x22,0x3e, 0x6,0x23,0x66, 0x4,0x23,0x41, + 0x6,0x26,0x2b, 0x4,0x23,0x43, 0x5,0x23,0x3d, 0x4,0x23,0x42, + 0x5,0x23,0x46, 0x5,0x23,0x45, 0x5,0x23,0x43, 0x5,0x23,0x40, + 0x6,0x26,0x29, 0x5,0x23,0x3f, 0x5,0x23,0x42, 0x5,0x23,0x41, + 0x6,0x26,0x2a, 0x6,0x26,0x2c, 0x5,0x23,0x3e, 0x5,0x23,0x44, + 0x6,0x29,0x69, 0x5,0x25,0x33, 0x5,0x25,0x35, 0x4,0x25,0x49, + 0x4,0x25,0x4b, 0x3,0x27,0x5c, 0x6,0x29,0x66, 0x4,0x25,0x4d, + 0x6,0x29,0x64, 0x6,0x29,0x65, 0x6,0x29,0x6c, 0x6,0x2e,0x75, + 0x6,0x29,0x6a, 0x5,0x25,0x30, 0x5,0x25,0x36, 0x6,0x29,0x6b, + 0x5,0x25,0x32, 0x6,0x29,0x67, 0x5,0x25,0x34, 0xf,0x25,0x5a, + 0xf,0x25,0x5b, 0xf,0x25,0x5c, 0xf,0x25,0x5d, 0x6,0x29,0x68, + 0x6,0x29,0x62, 0x6,0x29,0x61, 0x5,0x25,0x31, 0x6,0x29,0x57, + 0x4,0x28,0x47, 0x5,0x28,0x2d, 0x4,0x28,0x45, 0x6,0x2f,0x24, + 0x6,0x2e,0x7b, 0x6,0x2f,0x22, 0x4,0x28,0x48, 0x6,0x2f,0x21, + 0x4,0x28,0x44, 0x4,0x28,0x46, 0x6,0x2e,0x78, 0x6,0x2e,0x7e, + 0x6,0x2f,0x23, 0x6,0x2e,0x7a, 0x6,0x2e,0x7d, 0x6,0x2e,0x7c, + 0xf,0x29,0x40, 0xf,0x29,0x41, 0xf,0x29,0x42, 0x6,0x2e,0x79, + 0x5,0x28,0x2e, 0x6,0x2e,0x77, 0x6,0x35,0x49, 0x4,0x2b,0x70, + 0x4,0x2b,0x6d, 0x5,0x2c,0x25, 0x5,0x2c,0x23, 0x4,0x2b,0x6f, + 0x4,0x2b,0x73, 0x6,0x35,0x4e, 0x6,0x35,0x52, 0x5,0x2c,0x22, + 0x6,0x35,0x53, 0x4,0x2b,0x6c, 0x5,0x2c,0x26, 0x6,0x35,0x51, + 0x4,0x2b,0x71, 0x6,0x35,0x50, 0x6,0x35,0x4f, 0x6,0x35,0x4c, + 0x6,0x35,0x4b, 0x4,0x2b,0x72, 0x5,0x2c,0x24, 0x6,0x35,0x4d, + 0xf,0x2e,0x33, 0x6,0x35,0x54, 0xf,0x2e,0x2e, 0xf,0x2e,0x2f, + 0xf,0x2e,0x30, 0xf,0x2e,0x32, 0xf,0x2e,0x31, 0x6,0x35,0x4a, + 0x5,0x2c,0x27, 0x5,0x2b,0x7d, 0x5,0x2c,0x21, 0x5,0x2b,0x7e, + 0x4,0x30,0x50, 0x5,0x31,0x2b, 0x4,0x30,0x51, 0x5,0x31,0x2a, + 0x6,0x3d,0x46, 0x4,0x30,0x56, 0x4,0x36,0x49, 0x4,0x30,0x55, + 0x6,0x3d,0x49, 0x6,0x3d,0x47, 0x5,0x36,0x5e, 0x4,0x30,0x4f, + 0x5,0x2c,0x28, 0xf,0x33,0x34, 0xf,0x33,0x35, 0xf,0x33,0x37, + 0x6,0x3d,0x48, 0x6,0x3d,0x4a, 0x6,0x3d,0x4b, 0x4,0x36,0x43, + 0x5,0x36,0x5f, 0x6,0x46,0x6d, 0x6,0x46,0x69, 0x4,0x36,0x46, + 0x4,0x36,0x47, 0x5,0x36,0x60, 0x5,0x36,0x64, 0x4,0x36,0x4a, + 0x4,0x36,0x44, 0x4,0x36,0x41, 0x4,0x36,0x40, 0x6,0x46,0x6b, + 0x6,0x46,0x68, 0x6,0x46,0x6c, 0x5,0x36,0x61, 0x5,0x36,0x62, + 0x6,0x46,0x6a, 0xf,0x39,0x4b, 0xf,0x39,0x4c, 0xf,0x39,0x4d, + 0xf,0x39,0x4e, 0x4,0x36,0x48, 0x6,0x4c,0x46, 0x6,0x46,0x6e, + 0x5,0x36,0x65, 0x4,0x3c,0x39, 0x6,0x50,0x6f, 0x5,0x3d,0x73, + 0x6,0x50,0x6d, 0x4,0x3c,0x35, 0x5,0x3d,0x74, 0x6,0x50,0x6e, + 0x5,0x3d,0x6d, 0x4,0x3c,0x37, 0x4,0x3c,0x36, 0x5,0x3d,0x6e, + 0x4,0x3c,0x3a, 0x5,0x3d,0x6f, 0x6,0x50,0x6b, 0xf,0x40,0x4b, + 0x6,0x50,0x6a, 0x6,0x50,0x68, 0x6,0x50,0x70, 0x6,0x50,0x69, + 0x5,0x3d,0x72, 0x5,0x3d,0x71, 0xf,0x40,0x4c, 0x5,0x44,0x5b, + 0x4,0x42,0x3b, 0x6,0x5b,0x24, 0x5,0x44,0x61, 0x6,0x5b,0x22, + 0x6,0x5b,0x21, 0x4,0x3c,0x38, 0x4,0x42,0x40, 0x5,0x44,0x62, + 0x5,0x44,0x5c, 0x5,0x44,0x5f, 0x4,0x42,0x3d, 0x4,0x42,0x44, + 0x6,0x5b,0x2b, 0x6,0x5b,0x29, 0x6,0x5b,0x28, 0x5,0x44,0x5e, + 0x5,0x4c,0x22, 0x6,0x5b,0x26, 0x5,0x44,0x5d, 0x6,0x5b,0x2a, + 0x5,0x44,0x60, 0x6,0x5b,0x25, 0xf,0x46,0x63, 0xf,0x46,0x64, + 0xf,0x46,0x65, 0x6,0x5b,0x23, 0x6,0x5b,0x27, 0x5,0x4c,0x23, + 0x5,0x4c,0x27, 0x4,0x49,0x24, 0x5,0x4c,0x24, 0x5,0x4c,0x26, + 0x7,0x21,0x3c, 0x7,0x21,0x3d, 0x7,0x21,0x3a, 0x7,0x21,0x3e, + 0x7,0x21,0x3b, 0x5,0x4c,0x25, 0x7,0x21,0x38, 0x7,0x22,0x5a, + 0x7,0x21,0x39, 0x4,0x4f,0x60, 0x7,0x2c,0x49, 0x5,0x5a,0x77, + 0x7,0x2c,0x4a, 0x7,0x2c,0x4e, 0x7,0x2c,0x4d, 0x7,0x2c,0x4c, + 0x5,0x53,0x5f, 0x5,0x53,0x61, 0x5,0x53,0x60, 0x5,0x53,0x5e, + 0x7,0x2c,0x48, 0x7,0x2c,0x4b, 0x7,0x21,0x3f, 0xf,0x53,0x56, + 0x5,0x58,0x51, 0x5,0x5a,0x7a, 0x4,0x55,0x6b, 0x5,0x5a,0x79, + 0x5,0x5a,0x78, 0x7,0x36,0x7c, 0xf,0x59,0x56, 0x4,0x55,0x6e, + 0x7,0x3e,0x7c, 0x5,0x61,0x38, 0x5,0x61,0x39, 0x7,0x36,0x7d, + 0xf,0x5e,0x36, 0x5,0x61,0x3a, 0x7,0x46,0x2f, 0x7,0x46,0x2e, + 0x7,0x46,0x2d, 0x7,0x4d,0x40, 0x7,0x4d,0x41, 0x5,0x6f,0x6a, + 0x7,0x52,0x77, 0xf,0x67,0x44, 0x5,0x75,0x64, 0x4,0x6b,0x65, + 0x7,0x62,0x2d, 0x7,0x62,0x2c, 0x6,0x21,0x3a, 0x5,0x21,0x3c, + 0x6,0x21,0x58, 0x4,0x21,0x63, 0x5,0x21,0x59, 0x5,0x21,0x58, + 0x5,0x22,0x31, 0x5,0x22,0x32, 0xf,0x22,0x25, 0xf,0x22,0x26, + 0xf,0x22,0x27, 0xf,0x22,0x28, 0x5,0x22,0x33, 0x6,0x26,0x2e, + 0x4,0x23,0x45, 0x5,0x23,0x47, 0xf,0x23,0x38, 0xf,0x23,0x3a, + 0xf,0x23,0x3b, 0x6,0x26,0x2d, 0x4,0x23,0x49, 0x5,0x25,0x3d, + 0x5,0x25,0x39, 0x6,0x29,0x6d, 0x5,0x25,0x3c, 0x6,0x29,0x6e, + 0xf,0x25,0x60, 0xf,0x25,0x61, 0xf,0x25,0x62, 0xf,0x25,0x63, + 0x5,0x28,0x30, 0x4,0x28,0x4a, 0x6,0x2f,0x26, 0x5,0x28,0x31, + 0x5,0x28,0x2f, 0x6,0x2f,0x28, 0xf,0x29,0x43, 0xf,0x29,0x44, + 0xf,0x29,0x45, 0x6,0x35,0x55, 0x6,0x35,0x59, 0x4,0x2b,0x74, + 0x5,0x2c,0x2d, 0x5,0x2c,0x29, 0x5,0x2c,0x2b, 0x5,0x2c,0x2c, + 0x5,0x2c,0x2a, 0xf,0x2e,0x34, 0xf,0x2e,0x35, 0x6,0x35,0x56, + 0x6,0x35,0x57, 0x5,0x31,0x2d, 0x6,0x3d,0x4e, 0x6,0x3d,0x4c, + 0x6,0x3d,0x4f, 0x6,0x3d,0x50, 0x6,0x3d,0x51, 0xf,0x33,0x38, + 0xf,0x33,0x39, 0x6,0x3d,0x4d, 0x5,0x36,0x69, 0x5,0x36,0x66, + 0x5,0x36,0x68, 0x5,0x36,0x6b, 0x5,0x36,0x67, 0xf,0x39,0x4f, + 0xf,0x39,0x50, 0x6,0x46,0x6f, 0x6,0x46,0x70, 0x6,0x46,0x71, + 0x5,0x3d,0x76, 0x5,0x3d,0x75, 0x4,0x3c,0x3b, 0x6,0x50,0x72, + 0x6,0x50,0x71, 0xf,0x40,0x4d, 0x5,0x3d,0x77, 0x4,0x42,0x46, + 0x5,0x44,0x66, 0x5,0x44,0x64, 0x5,0x44,0x65, 0x5,0x44,0x69, + 0x4,0x42,0x45, 0x5,0x44,0x68, 0x6,0x5b,0x2e, 0xf,0x46,0x66, + 0x6,0x5b,0x2c, 0x6,0x5b,0x2d, 0x5,0x4c,0x2b, 0x5,0x4c,0x28, + 0x4,0x49,0x26, 0x5,0x4c,0x29, 0x5,0x4c,0x2a, 0x7,0x2c,0x4f, + 0x5,0x5a,0x7c, 0xf,0x53,0x57, 0x5,0x5a,0x7b, 0x5,0x5a,0x7d, + 0x7,0x36,0x7e, 0x7,0x37,0x22, 0x7,0x37,0x21, 0x5,0x61,0x3c, + 0x7,0x3e,0x7e, 0x7,0x3f,0x21, 0x5,0x67,0x56, 0x5,0x67,0x55, + 0x7,0x4d,0x42, 0x5,0x6f,0x6b, 0x7,0x5b,0x46, 0x5,0x75,0x65, + 0x4,0x6c,0x6b, 0x7,0x66,0x3b, 0x5,0x21,0x3d, 0x6,0x22,0x47, + 0x6,0x22,0x48, 0x5,0x22,0x35, 0x5,0x22,0x34, 0x5,0x22,0x36, + 0xf,0x22,0x2a, 0x6,0x26,0x2f, 0x5,0x23,0x48, 0x5,0x23,0x49, + 0x4,0x25,0x52, 0x6,0x29,0x71, 0x6,0x29,0x70, 0xf,0x25,0x64, + 0xf,0x25,0x65, 0x6,0x2f,0x2a, 0x4,0x28,0x4c, 0x6,0x2f,0x2b, + 0x6,0x2f,0x2c, 0xf,0x29,0x46, 0x6,0x2f,0x29, 0x4,0x2b,0x76, + 0x6,0x35,0x5c, 0x6,0x35,0x5b, 0x6,0x35,0x5e, 0x6,0x35,0x5f, + 0x6,0x35,0x5a, 0x6,0x35,0x5d, 0x5,0x2c,0x2f, 0x4,0x30,0x5d, + 0x6,0x3d,0x52, 0x5,0x2c,0x2e, 0x5,0x31,0x2e, 0x5,0x31,0x2f, + 0x6,0x3d,0x53, 0x4,0x36,0x4e, 0xf,0x39,0x51, 0x6,0x50,0x73, + 0x4,0x30,0x5b, 0x5,0x3d,0x79, 0xf,0x40,0x4e, 0xf,0x40,0x4f, + 0x6,0x5b,0x2f, 0x4,0x42,0x47, 0x5,0x44,0x6a, 0x5,0x44,0x6b, + 0xf,0x46,0x67, 0xf,0x4d,0x69, 0x4,0x4f,0x65, 0x7,0x2c,0x50, + 0x7,0x2c,0x51, 0x7,0x37,0x23, 0x7,0x37,0x24, 0x5,0x5a,0x7e, + 0x7,0x4d,0x43, 0x6,0x21,0x2a, 0x4,0x21,0x42, 0x6,0x22,0x4a, + 0x6,0x26,0x30, 0x6,0x26,0x33, 0x5,0x23,0x4a, 0x6,0x26,0x31, + 0x6,0x26,0x32, 0x4,0x28,0x4d, 0x6,0x2f,0x2f, 0x6,0x2f,0x31, + 0x6,0x2f,0x2d, 0x6,0x2f,0x2e, 0x6,0x2f,0x30, 0x6,0x3d,0x54, + 0x6,0x35,0x60, 0xf,0x2e,0x36, 0xf,0x2e,0x37, 0x6,0x35,0x24, + 0x6,0x46,0x72, 0xf,0x39,0x52, 0x4,0x3c,0x3d, 0xf,0x46,0x68, + 0x7,0x3f,0x22, 0x5,0x6d,0x32, 0x6,0x21,0x2b, 0xf,0x21,0x31, + 0x5,0x22,0x37, 0x6,0x23,0x6e, 0x4,0x22,0x43, 0x6,0x23,0x6d, + 0x6,0x26,0x34, 0x4,0x23,0x4a, 0x6,0x26,0x35, 0xf,0x23,0x3c, + 0x6,0x29,0x73, 0x5,0x25,0x3e, 0x5,0x25,0x3f, 0x4,0x28,0x4f, + 0x6,0x2f,0x34, 0x5,0x28,0x33, 0x6,0x2f,0x33, 0x5,0x28,0x32, + 0x6,0x2f,0x32, 0x6,0x2f,0x37, 0x6,0x2f,0x35, 0xf,0x29,0x47, + 0x5,0x2c,0x30, 0x6,0x35,0x62, 0x6,0x35,0x61, 0x5,0x2c,0x31, + 0x6,0x3d,0x55, 0xf,0x33,0x3a, 0x4,0x36,0x4f, 0x6,0x50,0x75, + 0x6,0x46,0x73, 0x6,0x35,0x63, 0x5,0x3d,0x7a, 0x4,0x42,0x48, + 0x6,0x5b,0x31, 0x6,0x5b,0x30, 0x5,0x4c,0x2c, 0x5,0x4c,0x2d, + 0x5,0x4c,0x2e, 0xf,0x4d,0x6a, 0x5,0x53,0x64, 0x7,0x37,0x25, + 0xf,0x5e,0x37, 0x4,0x5f,0x4b, 0x7,0x3f,0x23, 0x7,0x4d,0x44, + 0x7,0x60,0x69, 0x7,0x64,0x43, 0xf,0x21,0x32, 0x5,0x22,0x38, + 0x6,0x23,0x6f, 0x5,0x23,0x4c, 0x6,0x26,0x37, 0xf,0x23,0x3d, + 0xf,0x25,0x66, 0x6,0x2f,0x36, 0x5,0x28,0x34, 0x6,0x35,0x64, + 0xf,0x46,0x69, 0x7,0x4d,0x45, 0x7,0x57,0x50, 0x6,0x21,0x5a, + 0x5,0x21,0x5a, 0x5,0x21,0x5b, 0x6,0x22,0x4b, 0x6,0x23,0x70, + 0x4,0x22,0x44, 0x4,0x22,0x45, 0x6,0x23,0x73, 0x6,0x23,0x72, + 0x5,0x22,0x3a, 0x5,0x22,0x39, 0x6,0x23,0x74, 0x6,0x26,0x39, + 0x5,0x23,0x4d, 0x6,0x26,0x3a, 0x6,0x23,0x75, 0x6,0x26,0x3b, + 0xf,0x23,0x3e, 0x5,0x25,0x40, 0x6,0x29,0x74, 0x6,0x29,0x77, + 0x6,0x29,0x78, 0x6,0x29,0x76, 0xf,0x25,0x67, 0xf,0x25,0x69, + 0xf,0x25,0x6a, 0xf,0x25,0x6b, 0xf,0x25,0x68, 0x6,0x29,0x75, + 0x6,0x35,0x65, 0x6,0x35,0x66, 0xf,0x2e,0x38, 0xf,0x2e,0x39, + 0x4,0x30,0x63, 0x4,0x30,0x61, 0x4,0x30,0x62, 0xf,0x33,0x3b, + 0xf,0x39,0x53, 0xf,0x39,0x54, 0x6,0x50,0x78, 0x6,0x50,0x77, + 0x6,0x50,0x79, 0x6,0x50,0x7b, 0xf,0x40,0x50, 0xf,0x46,0x6a, + 0xf,0x46,0x6b, 0x5,0x4c,0x2f, 0xf,0x4d,0x6b, 0xf,0x4d,0x6c, + 0x7,0x21,0x40, 0x7,0x37,0x26, 0xf,0x5e,0x38, 0x7,0x46,0x30, + 0x7,0x52,0x78, 0x7,0x60,0x6a, 0x7,0x62,0x2e, 0x6,0x22,0x4c, + 0x6,0x23,0x77, 0x6,0x23,0x76, 0x6,0x23,0x78, 0x4,0x23,0x4c, + 0x5,0x23,0x4f, 0x5,0x23,0x4e, 0x6,0x26,0x3c, 0x4,0x25,0x55, + 0x4,0x25,0x54, 0x6,0x29,0x7c, 0x6,0x29,0x7b, 0x6,0x29,0x7d, + 0x6,0x29,0x7a, 0x6,0x29,0x7e, 0x6,0x29,0x79, 0xf,0x25,0x6c, + 0x6,0x2a,0x22, 0x4,0x28,0x52, 0x4,0x28,0x51, 0x5,0x28,0x37, + 0xf,0x29,0x48, 0xf,0x29,0x49, 0xf,0x29,0x4a, 0xf,0x29,0x4b, + 0x6,0x2f,0x39, 0x6,0x35,0x68, 0x4,0x2b,0x79, 0x5,0x2c,0x32, + 0x6,0x35,0x67, 0x6,0x35,0x6a, 0x6,0x3c,0x7a, 0x6,0x35,0x69, + 0x6,0x3d,0x57, 0x6,0x3d,0x56, 0x6,0x35,0x6b, 0x6,0x3d,0x58, + 0x6,0x46,0x75, 0x6,0x46,0x76, 0x6,0x46,0x77, 0x5,0x37,0x3f, + 0x6,0x50,0x7c, 0x5,0x44,0x6d, 0x6,0x5b,0x32, 0x7,0x21,0x41, + 0xf,0x53,0x58, 0x7,0x63,0x4b, 0x5,0x21,0x3e, 0x4,0x21,0x43, + 0xf,0x21,0x34, 0x6,0x21,0x5b, 0x4,0x22,0x46, 0x6,0x2a,0x24, + 0x6,0x23,0x7a, 0x6,0x23,0x79, 0x4,0x23,0x4e, 0x6,0x2f,0x3b, + 0x5,0x28,0x38, 0x6,0x2f,0x3a, 0x4,0x28,0x53, 0x6,0x35,0x6c, + 0x6,0x2f,0x3c, 0x6,0x46,0x78, 0x5,0x2c,0x33, 0x5,0x3d,0x7b, + 0x6,0x50,0x7d, 0x5,0x44,0x6e, 0x7,0x3f,0x24, 0x5,0x21,0x3f, + 0x5,0x21,0x5c, 0x6,0x23,0x7b, 0x6,0x22,0x4f, 0x6,0x22,0x4d, + 0x6,0x22,0x50, 0x5,0x21,0x5d, 0x4,0x22,0x47, 0x5,0x22,0x3b, + 0x6,0x23,0x7c, 0x6,0x23,0x7d, 0x5,0x22,0x3f, 0x5,0x22,0x40, + 0x5,0x22,0x3d, 0x5,0x22,0x3e, 0xf,0x22,0x2d, 0x6,0x26,0x3e, + 0x5,0x23,0x50, 0x6,0x26,0x3d, 0x5,0x23,0x51, 0x6,0x25,0x5e, + 0xf,0x23,0x3f, 0x6,0x2a,0x27, 0x6,0x2a,0x26, 0x6,0x2a,0x29, + 0x6,0x2a,0x28, 0x5,0x25,0x41, 0x4,0x25,0x58, 0xf,0x25,0x6d, + 0xf,0x25,0x6e, 0x6,0x2a,0x25, 0x5,0x28,0x39, 0x4,0x28,0x54, + 0x6,0x2f,0x46, 0x6,0x2f,0x41, 0x6,0x2f,0x44, 0x6,0x2f,0x45, + 0x6,0x2f,0x40, 0x6,0x2f,0x3e, 0x6,0x2f,0x42, 0x6,0x2f,0x43, + 0xf,0x29,0x4d, 0xf,0x29,0x4e, 0x4,0x28,0x55, 0x6,0x2f,0x3f, + 0x6,0x35,0x73, 0x6,0x35,0x74, 0x4,0x2b,0x7b, 0x5,0x2c,0x34, + 0x4,0x2b,0x7c, 0x6,0x35,0x6f, 0x6,0x35,0x6d, 0x6,0x35,0x70, + 0x6,0x35,0x72, 0x6,0x35,0x71, 0x6,0x35,0x6e, 0x5,0x2c,0x35, + 0xf,0x2e,0x3a, 0xf,0x2e,0x3b, 0x6,0x3d,0x60, 0x6,0x3d,0x5b, + 0x4,0x30,0x67, 0x6,0x3d,0x5f, 0x6,0x3d,0x5c, 0x6,0x3d,0x5d, + 0xf,0x33,0x3d, 0x5,0x31,0x30, 0x6,0x3d,0x5e, 0x4,0x30,0x66, + 0x4,0x36,0x52, 0x6,0x46,0x7c, 0x6,0x46,0x7a, 0x4,0x36,0x53, + 0x6,0x46,0x7b, 0x6,0x46,0x79, 0x6,0x46,0x7d, 0xf,0x39,0x55, + 0x6,0x46,0x7e, 0x5,0x3d,0x7c, 0x5,0x3d,0x7d, 0x6,0x51,0x24, + 0x6,0x51,0x23, 0x6,0x50,0x7e, 0xf,0x40,0x51, 0x6,0x51,0x21, + 0x4,0x3c,0x3f, 0x4,0x42,0x49, 0x6,0x5b,0x34, 0x6,0x5b,0x37, + 0x6,0x5b,0x33, 0x6,0x5b,0x38, 0x5,0x44,0x6f, 0xf,0x46,0x6d, + 0xf,0x46,0x6e, 0x6,0x5b,0x36, 0x6,0x5b,0x39, 0x6,0x5b,0x3b, + 0x6,0x5b,0x3a, 0x6,0x5b,0x35, 0x7,0x21,0x43, 0x4,0x49,0x28, + 0x5,0x4c,0x30, 0x7,0x21,0x44, 0x7,0x21,0x42, 0xf,0x4d,0x6d, + 0x7,0x25,0x48, 0x5,0x53,0x65, 0x7,0x2c,0x53, 0x7,0x2c,0x52, + 0xf,0x53,0x59, 0xf,0x53,0x5a, 0x7,0x3b,0x4d, 0xf,0x5e,0x39, + 0xf,0x5e,0x3a, 0xf,0x5e,0x3b, 0xf,0x64,0x7c, 0x7,0x4e,0x27, + 0x7,0x52,0x79, 0x5,0x77,0x54, 0x7,0x5e,0x50, 0x7,0x65,0x33, + 0x7,0x66,0x33, 0x5,0x21,0x2e, 0x6,0x21,0x3c, 0x6,0x21,0x3d, + 0x6,0x21,0x5d, 0x6,0x22,0x52, 0x6,0x22,0x51, 0x4,0x22,0x4a, + 0x6,0x24,0x23, 0x6,0x24,0x21, 0xf,0x22,0x2e, 0x4,0x22,0x49, + 0x6,0x24,0x22, 0x6,0x26,0x40, 0xf,0x23,0x40, 0x5,0x23,0x3c, + 0x6,0x2a,0x2c, 0x6,0x2a,0x2b, 0x6,0x2a,0x2d, 0x6,0x2a,0x2e, + 0x6,0x2f,0x47, 0x6,0x2f,0x48, 0x4,0x28,0x56, 0xf,0x29,0x4f, + 0x6,0x35,0x76, 0x6,0x35,0x75, 0x6,0x36,0x49, 0x6,0x35,0x2e, + 0x5,0x36,0x6c, 0x6,0x47,0x22, 0x6,0x47,0x24, 0x6,0x4d,0x62, + 0xf,0x39,0x56, 0x6,0x47,0x23, 0x5,0x3e,0x21, 0x6,0x51,0x25, + 0x5,0x3d,0x7e, 0xf,0x40,0x52, 0x6,0x5b,0x3c, 0xf,0x46,0x6f, + 0x6,0x60,0x72, 0x7,0x21,0x45, 0x5,0x53,0x66, 0xf,0x59,0x57, + 0x7,0x4b,0x6a, 0x6,0x21,0x60, 0x5,0x21,0x40, 0x6,0x21,0x5e, + 0x5,0x21,0x42, 0x6,0x21,0x62, 0x6,0x21,0x5f, 0x6,0x22,0x55, + 0x4,0x21,0x68, 0x5,0x21,0x5e, 0x6,0x22,0x56, 0x5,0x21,0x5f, + 0x6,0x22,0x53, 0x6,0x22,0x54, 0x6,0x24,0x25, 0x4,0x22,0x4b, + 0x6,0x24,0x24, 0x5,0x22,0x42, 0x6,0x24,0x26, 0x5,0x22,0x41, + 0x6,0x24,0x27, 0x6,0x26,0x44, 0x6,0x26,0x42, 0x5,0x23,0x52, + 0xf,0x23,0x41, 0xf,0x23,0x42, 0xf,0x23,0x43, 0xf,0x23,0x44, + 0x4,0x23,0x50, 0x6,0x2a,0x31, 0x6,0x2a,0x2f, 0x6,0x2a,0x32, + 0x6,0x2a,0x30, 0xf,0x25,0x6f, 0x6,0x2f,0x4d, 0x6,0x2f,0x4a, + 0x6,0x2f,0x4c, 0x6,0x2f,0x4b, 0x6,0x2f,0x49, 0xf,0x29,0x51, + 0xf,0x29,0x52, 0x6,0x32,0x72, 0x5,0x28,0x36, 0x6,0x35,0x7b, + 0x5,0x2c,0x36, 0x6,0x35,0x7c, 0x6,0x35,0x79, 0x6,0x35,0x77, + 0x6,0x35,0x7a, 0xf,0x2e,0x3c, 0xf,0x2e,0x3d, 0xf,0x2e,0x3e, + 0xf,0x2e,0x3f, 0x6,0x3c,0x67, 0x6,0x3d,0x66, 0x6,0x3d,0x68, + 0x5,0x31,0x32, 0x5,0x31,0x33, 0x6,0x3d,0x65, 0x6,0x3d,0x63, + 0x6,0x3d,0x6b, 0x6,0x3d,0x64, 0x5,0x2c,0x37, 0x6,0x3d,0x62, + 0x6,0x3d,0x69, 0x6,0x3d,0x6a, 0x6,0x3c,0x7c, 0x6,0x3d,0x67, + 0x4,0x36,0x54, 0x5,0x36,0x6d, 0x6,0x47,0x27, 0x6,0x47,0x25, + 0xf,0x33,0x3e, 0xf,0x39,0x57, 0xf,0x39,0x58, 0xf,0x39,0x59, + 0xf,0x39,0x5a, 0x6,0x47,0x26, 0x4,0x3c,0x43, 0x4,0x3c,0x42, + 0x6,0x51,0x27, 0x6,0x51,0x28, 0x6,0x51,0x26, 0x4,0x3c,0x41, + 0x6,0x47,0x28, 0x6,0x51,0x5b, 0x6,0x51,0x29, 0x6,0x5f,0x21, + 0x6,0x5b,0x3e, 0x6,0x5b,0x3d, 0x5,0x44,0x70, 0x6,0x53,0x7b, + 0xf,0x4d,0x55, 0x5,0x4c,0x33, 0x5,0x4c,0x34, 0xf,0x46,0x70, + 0x5,0x4c,0x32, 0x7,0x2c,0x55, 0xf,0x53,0x5b, 0x3,0x50,0x39, + 0x5,0x54,0x2e, 0x7,0x2c,0x54, 0x7,0x37,0x29, 0x7,0x37,0x28, + 0xf,0x59,0x58, 0x4,0x5a,0x6f, 0x7,0x46,0x32, 0x7,0x46,0x31, + 0x4,0x66,0x31, 0xf,0x67,0x45, 0x7,0x57,0x51, 0x5,0x75,0x66, + 0x7,0x5e,0x51, 0x7,0x5e,0x52, 0x5,0x21,0x43, 0x6,0x21,0x64, + 0x4,0x21,0x47, 0x4,0x21,0x46, 0xf,0x21,0x36, 0x6,0x21,0x63, + 0x5,0x21,0x61, 0x6,0x22,0x59, 0x6,0x22,0x58, 0x6,0x22,0x5e, + 0x6,0x22,0x5a, 0x6,0x22,0x5d, 0x6,0x22,0x57, 0x6,0x22,0x42, + 0xf,0x21,0x4e, 0x6,0x22,0x5c, 0x5,0x22,0x47, 0x6,0x24,0x2d, + 0x5,0x22,0x45, 0x6,0x24,0x2e, 0x4,0x22,0x4d, 0x5,0x22,0x46, + 0x4,0x22,0x50, 0x6,0x24,0x2c, 0x4,0x22,0x4f, 0x4,0x22,0x4e, + 0x5,0x22,0x44, 0x6,0x24,0x28, 0xf,0x22,0x2f, 0xf,0x22,0x30, + 0xf,0x22,0x32, 0xf,0x22,0x34, 0x6,0x24,0x2a, 0xf,0x22,0x31, + 0xf,0x22,0x33, 0x5,0x22,0x43, 0x6,0x24,0x29, 0x6,0x24,0x2b, + 0x4,0x23,0x56, 0x6,0x26,0x4f, 0x6,0x26,0x46, 0x6,0x26,0x4d, + 0x6,0x26,0x4c, 0x5,0x23,0x56, 0x4,0x23,0x5a, 0x4,0x23,0x5d, + 0x5,0x23,0x5b, 0x5,0x23,0x54, 0x6,0x26,0x48, 0x4,0x23,0x57, + 0x4,0x23,0x52, 0x4,0x23,0x58, 0x5,0x23,0x58, 0x6,0x26,0x49, + 0x5,0x23,0x59, 0x4,0x23,0x55, 0x5,0x23,0x55, 0x6,0x26,0x47, + 0x5,0x23,0x5c, 0xf,0x23,0x45, 0xf,0x23,0x46, 0xf,0x23,0x47, + 0xf,0x23,0x4a, 0xf,0x23,0x4b, 0xf,0x23,0x4c, 0xf,0x23,0x48, + 0x6,0x26,0x4b, 0x6,0x26,0x4a, 0x6,0x26,0x50, 0x6,0x26,0x45, + 0x5,0x23,0x53, 0x5,0x23,0x57, 0x5,0x23,0x5a, 0x4,0x25,0x5c, + 0x4,0x25,0x5e, 0x6,0x2a,0x36, 0x5,0x25,0x4c, 0x5,0x25,0x44, + 0x4,0x25,0x5b, 0x6,0x2a,0x34, 0x5,0x25,0x4d, 0x5,0x25,0x45, + 0x5,0x25,0x47, 0x4,0x25,0x61, 0x5,0x25,0x50, 0x6,0x2a,0x33, + 0x5,0x25,0x52, 0x5,0x28,0x47, 0x6,0x2a,0x3b, 0x5,0x25,0x48, + 0x5,0x25,0x4b, 0x5,0x25,0x4a, 0x5,0x25,0x51, 0x5,0x25,0x49, + 0x5,0x25,0x4e, 0x6,0x2a,0x3d, 0x5,0x25,0x4f, 0xf,0x25,0x70, + 0xf,0x25,0x72, 0xf,0x25,0x73, 0xf,0x25,0x74, 0xf,0x25,0x75, + 0xf,0x25,0x76, 0xf,0x25,0x77, 0xf,0x25,0x78, 0xf,0x25,0x79, + 0xf,0x25,0x7a, 0xf,0x25,0x7d, 0xf,0x25,0x7e, 0xf,0x26,0x21, + 0xf,0x26,0x22, 0xf,0x26,0x23, 0x5,0x25,0x46, 0x6,0x2a,0x35, + 0x5,0x25,0x43, 0x6,0x2a,0x38, 0x6,0x2a,0x37, 0xf,0x25,0x7c, + 0x6,0x2a,0x3a, 0x5,0x2c,0x38, 0x5,0x28,0x46, 0x5,0x28,0x52, + 0x5,0x28,0x4d, 0x5,0x28,0x3c, 0x5,0x28,0x51, 0x6,0x2f,0x54, + 0x6,0x2f,0x4e, 0x5,0x28,0x3f, 0x4,0x28,0x5b, 0x4,0x28,0x5a, + 0x5,0x28,0x4f, 0x5,0x28,0x45, 0x5,0x28,0x4b, 0x5,0x28,0x4a, + 0x5,0x28,0x4e, 0x5,0x28,0x48, 0x5,0x28,0x49, 0x5,0x28,0x3d, + 0x5,0x28,0x41, 0x5,0x28,0x4c, 0x4,0x25,0x62, 0x6,0x2f,0x59, + 0x6,0x2f,0x5a, 0x5,0x28,0x53, 0x6,0x2f,0x4f, 0x5,0x28,0x3a, + 0x6,0x2f,0x57, 0x6,0x2f,0x56, 0x5,0x28,0x50, 0x6,0x2f,0x50, + 0x6,0x2f,0x58, 0x6,0x2f,0x52, 0x5,0x28,0x40, 0x5,0x28,0x42, + 0xf,0x2b,0x33, 0xf,0x29,0x53, 0xf,0x29,0x55, 0xf,0x29,0x56, + 0xf,0x29,0x57, 0xf,0x29,0x58, 0xf,0x29,0x59, 0xf,0x29,0x5a, + 0xf,0x29,0x5b, 0xf,0x29,0x5e, 0xf,0x29,0x5f, 0xf,0x29,0x60, + 0xf,0x29,0x61, 0xf,0x29,0x62, 0xf,0x29,0x63, 0xf,0x29,0x64, + 0xf,0x29,0x66, 0xf,0x29,0x67, 0x5,0x28,0x43, 0x5,0x28,0x44, + 0x4,0x28,0x5d, 0xf,0x29,0x65, 0x6,0x2f,0x55, 0x6,0x2f,0x53, + 0x4,0x28,0x58, 0x5,0x28,0x3b, 0x5,0x28,0x3e, 0x6,0x2f,0x51, + 0x6,0x36,0x29, 0x4,0x2c,0x24, 0x4,0x2c,0x2b, 0x4,0x2c,0x2c, + 0x4,0x2c,0x27, 0x6,0x36,0x22, 0x5,0x2c,0x4e, 0x5,0x2c,0x41, + 0x5,0x2c,0x3f, 0x5,0x2c,0x4c, 0x5,0x2c,0x3d, 0x5,0x2c,0x46, + 0x5,0x2c,0x56, 0x5,0x2c,0x49, 0x4,0x2c,0x2a, 0x5,0x2c,0x4d, + 0x5,0x2c,0x54, 0x5,0x2c,0x52, 0x4,0x2c,0x22, 0x6,0x36,0x23, + 0x6,0x36,0x24, 0x5,0x2c,0x51, 0x4,0x2c,0x23, 0x5,0x2c,0x40, + 0x6,0x36,0x27, 0x6,0x36,0x28, 0x5,0x2c,0x57, 0x6,0x36,0x26, + 0x5,0x2c,0x53, 0x5,0x2c,0x58, 0x5,0x2c,0x47, 0x5,0x2c,0x59, + 0x5,0x2c,0x44, 0x5,0x2c,0x55, 0xf,0x2e,0x40, 0xf,0x2e,0x41, + 0xf,0x2e,0x43, 0xf,0x2e,0x44, 0xf,0x2e,0x48, 0xf,0x2e,0x49, + 0xf,0x2e,0x4b, 0xf,0x2e,0x4c, 0xf,0x2e,0x4d, 0xf,0x2e,0x4e, + 0xf,0x2e,0x4f, 0xf,0x2e,0x50, 0xf,0x2e,0x51, 0xf,0x2e,0x52, + 0xf,0x2e,0x53, 0xf,0x2e,0x54, 0x6,0x39,0x5e, 0x6,0x36,0x21, + 0x5,0x2c,0x42, 0x5,0x2c,0x45, 0x5,0x2c,0x48, 0x6,0x36,0x25, + 0x5,0x2c,0x50, 0x5,0x2c,0x4b, 0x5,0x2c,0x39, 0x5,0x2c,0x3a, + 0x5,0x2c,0x3b, 0xf,0x2e,0x45, 0x5,0x2c,0x4a, 0x5,0x2c,0x4f, + 0x5,0x2c,0x3e, 0x5,0x2c,0x3c, 0x5,0x2c,0x5a, 0x5,0x31,0x46, + 0x4,0x30,0x69, 0x6,0x3d,0x77, 0x6,0x3d,0x74, 0x4,0x30,0x78, + 0x6,0x3d,0x6f, 0x4,0x30,0x75, 0x5,0x31,0x51, 0x5,0x31,0x49, + 0x5,0x31,0x4c, 0x4,0x30,0x6e, 0x4,0x30,0x79, 0x5,0x31,0x44, + 0x6,0x3d,0x76, 0x5,0x31,0x36, 0x5,0x31,0x4a, 0x5,0x31,0x45, + 0x5,0x31,0x4e, 0x5,0x31,0x34, 0x5,0x31,0x4d, 0x5,0x31,0x42, + 0x5,0x31,0x3b, 0x6,0x3d,0x71, 0x6,0x3d,0x75, 0x6,0x3d,0x7d, + 0x6,0x3d,0x7a, 0x6,0x3d,0x7e, 0x5,0x31,0x3a, 0x5,0x31,0x3c, + 0x6,0x3d,0x6c, 0x5,0x31,0x38, 0x6,0x3d,0x72, 0x6,0x3d,0x7b, + 0xf,0x33,0x3f, 0xf,0x33,0x40, 0xf,0x33,0x41, 0xf,0x33,0x42, + 0xf,0x33,0x44, 0xf,0x33,0x45, 0xf,0x33,0x46, 0xf,0x33,0x47, + 0xf,0x33,0x48, 0xf,0x33,0x49, 0xf,0x33,0x4c, 0xf,0x33,0x4d, + 0x5,0x31,0x37, 0x6,0x3d,0x73, 0x5,0x31,0x39, 0x6,0x3d,0x6d, + 0x5,0x31,0x41, 0x5,0x31,0x48, 0x6,0x3e,0x21, 0x5,0x31,0x52, + 0x6,0x3d,0x70, 0x5,0x31,0x40, 0x5,0x31,0x35, 0x5,0x31,0x47, + 0x5,0x31,0x3e, 0x5,0x31,0x43, 0x5,0x31,0x3d, 0x5,0x31,0x50, + 0x6,0x3d,0x79, 0x3,0x34,0x60, 0x5,0x31,0x53, 0x5,0x31,0x4f, + 0x6,0x3d,0x78, 0x6,0x3d,0x6e, 0x5,0x31,0x3f, 0x5,0x31,0x4b, + 0x4,0x36,0x55, 0x4,0x36,0x61, 0x6,0x47,0x32, 0x5,0x37,0x24, + 0x6,0x47,0x37, 0x6,0x47,0x3e, 0x5,0x36,0x77, 0x6,0x47,0x35, + 0x5,0x36,0x7c, 0x4,0x36,0x56, 0x5,0x37,0x28, 0x5,0x36,0x6f, + 0x5,0x36,0x71, 0x4,0x36,0x5a, 0x5,0x36,0x78, 0x4,0x36,0x57, + 0x5,0x37,0x29, 0x5,0x36,0x7e, 0x4,0x36,0x62, 0x4,0x36,0x5b, + 0x5,0x37,0x23, 0x5,0x37,0x27, 0x4,0x36,0x66, 0x5,0x37,0x30, + 0x4,0x36,0x5d, 0x5,0x37,0x2c, 0x5,0x37,0x2e, 0x6,0x47,0x2e, + 0x6,0x47,0x3c, 0x5,0x3e,0x22, 0x6,0x47,0x2b, 0x6,0x47,0x2f, + 0x6,0x47,0x38, 0x5,0x37,0x22, 0x6,0x47,0x34, 0x6,0x47,0x3f, + 0x6,0x47,0x3a, 0x4,0x36,0x64, 0x5,0x37,0x26, 0x5,0x36,0x73, + 0xf,0x39,0x5b, 0xf,0x39,0x5d, 0xf,0x39,0x5e, 0xf,0x39,0x61, + 0xf,0x39,0x62, 0xf,0x39,0x63, 0xf,0x39,0x64, 0xf,0x39,0x65, + 0xf,0x39,0x66, 0xf,0x39,0x67, 0xf,0x39,0x68, 0xf,0x39,0x6a, + 0xf,0x39,0x6d, 0xf,0x39,0x6e, 0xf,0x39,0x6f, 0xf,0x39,0x70, + 0x5,0x36,0x74, 0x5,0x36,0x75, 0x5,0x36,0x7b, 0x5,0x37,0x25, + 0x5,0x37,0x21, 0x6,0x47,0x3b, 0xf,0x39,0x6b, 0xf,0x39,0x5c, + 0xf,0x39,0x5f, 0xf,0x39,0x69, 0xf,0x39,0x6c, 0x5,0x37,0x2b, + 0x5,0x37,0x2f, 0x6,0x47,0x3d, 0x5,0x37,0x2d, 0x5,0x37,0x2a, + 0x5,0x36,0x7d, 0x6,0x47,0x36, 0x6,0x51,0x39, 0x5,0x3e,0x23, + 0x4,0x3c,0x49, 0x5,0x3e,0x27, 0x4,0x3c,0x4e, 0x5,0x36,0x72, + 0x6,0x51,0x41, 0x4,0x3c,0x48, 0x4,0x3c,0x44, 0x6,0x5b,0x42, + 0x5,0x3e,0x2d, 0x6,0x51,0x33, 0x6,0x51,0x35, 0x5,0x3e,0x2a, + 0x5,0x3e,0x38, 0x6,0x51,0x3a, 0x6,0x51,0x30, 0x5,0x3e,0x2e, + 0x5,0x3e,0x24, 0x5,0x3e,0x35, 0x5,0x3e,0x3f, 0x6,0x51,0x3f, + 0x6,0x51,0x37, 0x5,0x3e,0x34, 0x5,0x3e,0x37, 0x4,0x3c,0x4d, + 0x5,0x3e,0x3a, 0x4,0x3c,0x45, 0x5,0x3e,0x33, 0x5,0x3e,0x2c, + 0x4,0x3c,0x4f, 0x5,0x3e,0x2f, 0x4,0x3c,0x51, 0x5,0x3e,0x31, + 0x5,0x3e,0x32, 0x6,0x51,0x3b, 0x6,0x51,0x40, 0x6,0x51,0x2a, + 0x6,0x51,0x3e, 0x6,0x51,0x3d, 0x5,0x3e,0x3b, 0x6,0x51,0x38, + 0x5,0x3e,0x28, 0x5,0x3e,0x30, 0x5,0x3e,0x2b, 0x6,0x51,0x2c, + 0x6,0x51,0x44, 0x6,0x51,0x2e, 0x6,0x51,0x2b, 0x6,0x51,0x2d, + 0xf,0x47,0x26, 0x5,0x3e,0x3e, 0x6,0x51,0x31, 0xf,0x40,0x56, + 0xf,0x40,0x57, 0xf,0x40,0x58, 0xf,0x40,0x59, 0xf,0x40,0x5a, + 0xf,0x40,0x5b, 0xf,0x40,0x5c, 0xf,0x40,0x5d, 0xf,0x40,0x5e, + 0xf,0x40,0x5f, 0xf,0x40,0x60, 0xf,0x40,0x61, 0xf,0x40,0x63, + 0x6,0x51,0x2f, 0x6,0x51,0x34, 0x6,0x51,0x3c, 0xf,0x40,0x54, + 0x6,0x51,0x42, 0x5,0x3e,0x3c, 0x5,0x3e,0x36, 0x5,0x3e,0x25, + 0x5,0x3e,0x29, 0x5,0x3e,0x26, 0xf,0x40,0x64, 0x6,0x5b,0x46, + 0x6,0x5b,0x40, 0x6,0x5b,0x4b, 0x4,0x42,0x4d, 0x6,0x5b,0x4f, + 0x6,0x5b,0x45, 0x6,0x5b,0x51, 0x6,0x5b,0x50, 0x4,0x42,0x4e, + 0x6,0x5b,0x4c, 0x5,0x44,0x73, 0x5,0x44,0x77, 0x5,0x44,0x75, + 0x5,0x44,0x7c, 0x6,0x5b,0x43, 0x6,0x5b,0x47, 0x4,0x42,0x4c, + 0x4,0x42,0x54, 0x5,0x44,0x7b, 0x4,0x42,0x50, 0x5,0x44,0x76, + 0x6,0x5b,0x41, 0x5,0x44,0x71, 0x5,0x44,0x72, 0x5,0x44,0x79, + 0x6,0x5b,0x52, 0x6,0x5b,0x3f, 0x6,0x5b,0x49, 0x6,0x5b,0x4a, + 0x5,0x44,0x78, 0x6,0x5b,0x4d, 0xf,0x46,0x71, 0xf,0x46,0x72, + 0xf,0x46,0x73, 0xf,0x46,0x74, 0xf,0x46,0x76, 0xf,0x46,0x77, + 0xf,0x46,0x78, 0xf,0x46,0x79, 0xf,0x46,0x7a, 0xf,0x46,0x7b, + 0xf,0x46,0x7c, 0xf,0x46,0x7e, 0xf,0x47,0x21, 0xf,0x47,0x22, + 0xf,0x47,0x23, 0xf,0x47,0x27, 0xf,0x47,0x28, 0xf,0x47,0x29, + 0xf,0x47,0x2a, 0xf,0x47,0x2b, 0xf,0x47,0x2c, 0xf,0x47,0x2d, + 0xf,0x47,0x24, 0x6,0x5b,0x48, 0xf,0x46,0x75, 0x5,0x44,0x74, + 0x5,0x44,0x7a, 0x6,0x5b,0x4e, 0x5,0x45,0x21, 0xf,0x46,0x7d, + 0x6,0x5b,0x44, 0xf,0x47,0x25, 0x5,0x4c,0x35, 0x5,0x44,0x7d, + 0xf,0x46,0x6c, 0x7,0x21,0x51, 0x5,0x4c,0x3b, 0x7,0x21,0x55, + 0x7,0x21,0x52, 0x5,0x4c,0x39, 0x7,0x21,0x58, 0x7,0x21,0x4a, + 0x5,0x4c,0x40, 0x5,0x4c,0x46, 0x5,0x4c,0x3d, 0x7,0x21,0x4f, + 0x5,0x4c,0x3e, 0x7,0x21,0x57, 0x7,0x21,0x50, 0x5,0x4c,0x36, + 0x7,0x21,0x4b, 0x5,0x4c,0x3f, 0x7,0x21,0x56, 0x7,0x21,0x59, + 0x5,0x4c,0x41, 0x4,0x49,0x2f, 0x7,0x21,0x5b, 0x5,0x4c,0x3a, + 0x7,0x21,0x48, 0x5,0x4c,0x38, 0x5,0x5b,0x27, 0x7,0x21,0x5a, + 0x4,0x49,0x2b, 0x7,0x21,0x54, 0x5,0x45,0x23, 0x7,0x21,0x53, + 0x7,0x21,0x49, 0x7,0x21,0x47, 0x7,0x21,0x62, 0x7,0x21,0x5c, + 0xf,0x4d,0x7a, 0x7,0x21,0x5e, 0x5,0x4c,0x42, 0x7,0x21,0x61, + 0x7,0x2c,0x61, 0x5,0x4c,0x37, 0x4,0x49,0x32, 0x5,0x4c,0x47, + 0xf,0x4d,0x6f, 0xf,0x4d,0x70, 0xf,0x4d,0x71, 0xf,0x4d,0x72, + 0xf,0x4d,0x73, 0xf,0x4d,0x74, 0xf,0x4d,0x75, 0xf,0x4d,0x76, + 0xf,0x4d,0x78, 0xf,0x4d,0x79, 0x5,0x4c,0x44, 0x7,0x21,0x5f, + 0x7,0x26,0x2b, 0x7,0x21,0x5d, 0x7,0x21,0x4d, 0x7,0x21,0x4c, + 0x5,0x4c,0x3c, 0x5,0x4c,0x43, 0x7,0x2c,0x6a, 0x4,0x4f,0x6e, + 0x5,0x53,0x74, 0x7,0x2c,0x5c, 0x5,0x53,0x72, 0x7,0x2c,0x68, + 0x4,0x4f,0x72, 0x5,0x53,0x6a, 0x5,0x53,0x78, 0x7,0x2c,0x60, + 0x4,0x4f,0x68, 0x4,0x4f,0x73, 0x4,0x4f,0x66, 0x5,0x53,0x71, + 0x4,0x4f,0x70, 0x5,0x53,0x6f, 0x5,0x53,0x68, 0x7,0x2c,0x6b, + 0x7,0x2c,0x5b, 0x7,0x2c,0x64, 0x5,0x53,0x6e, 0x7,0x2c,0x5f, + 0x5,0x53,0x6c, 0x5,0x53,0x67, 0x5,0x53,0x75, 0x5,0x53,0x70, + 0x5,0x53,0x73, 0x7,0x2c,0x59, 0x5,0x53,0x6b, 0x5,0x53,0x69, + 0x7,0x2c,0x67, 0x7,0x2c,0x58, 0x7,0x2c,0x57, 0xf,0x4d,0x77, + 0x4,0x4f,0x69, 0x4,0x4f,0x74, 0x5,0x53,0x77, 0x7,0x2c,0x66, + 0xf,0x53,0x5c, 0xf,0x53,0x5e, 0xf,0x53,0x5f, 0xf,0x53,0x60, + 0xf,0x53,0x61, 0xf,0x53,0x62, 0xf,0x53,0x63, 0xf,0x53,0x64, + 0xf,0x53,0x65, 0xf,0x53,0x67, 0xf,0x53,0x68, 0xf,0x53,0x69, + 0xf,0x53,0x6a, 0xf,0x53,0x6b, 0xf,0x53,0x6c, 0xf,0x53,0x6d, + 0xf,0x53,0x6e, 0xf,0x53,0x6f, 0x7,0x2c,0x5e, 0x7,0x2c,0x5d, + 0x7,0x2c,0x62, 0x7,0x2c,0x69, 0x5,0x53,0x6d, 0xf,0x55,0x74, + 0x5,0x53,0x76, 0x4,0x55,0x7a, 0x5,0x5b,0x26, 0x5,0x5b,0x21, + 0x7,0x37,0x2d, 0x7,0x37,0x2a, 0x7,0x37,0x34, 0x7,0x37,0x35, + 0x5,0x5b,0x23, 0x5,0x5b,0x2b, 0x4,0x55,0x71, 0x4,0x55,0x76, + 0x5,0x5b,0x28, 0x4,0x55,0x77, 0x7,0x37,0x2b, 0x5,0x5b,0x29, + 0x4,0x55,0x79, 0x7,0x37,0x31, 0x7,0x37,0x2f, 0x7,0x37,0x2e, + 0x5,0x5b,0x24, 0x4,0x55,0x75, 0x7,0x37,0x32, 0x7,0x37,0x39, + 0xf,0x59,0x59, 0xf,0x59,0x5a, 0xf,0x59,0x5e, 0xf,0x59,0x5f, + 0xf,0x59,0x60, 0xf,0x59,0x61, 0xf,0x59,0x62, 0x7,0x37,0x38, + 0x7,0x37,0x30, 0x7,0x37,0x36, 0x7,0x37,0x33, 0x7,0x37,0x2c, + 0x5,0x5b,0x2a, 0x5,0x5b,0x22, 0x4,0x5a,0x74, 0x7,0x3f,0x29, + 0x7,0x3f,0x2f, 0x4,0x5a,0x73, 0x5,0x61,0x3e, 0x7,0x3f,0x2b, + 0x4,0x5a,0x71, 0x4,0x5a,0x76, 0x5,0x61,0x46, 0x4,0x5a,0x77, + 0x5,0x67,0x58, 0x5,0x61,0x3d, 0x5,0x61,0x44, 0x5,0x61,0x43, + 0x4,0x5a,0x78, 0x7,0x3f,0x2a, 0x4,0x5a,0x75, 0x4,0x5a,0x79, + 0x4,0x5a,0x72, 0x7,0x3f,0x2e, 0x5,0x61,0x41, 0x7,0x3f,0x27, + 0x7,0x3f,0x2d, 0x7,0x3f,0x28, 0x7,0x3f,0x26, 0x7,0x3f,0x2c, + 0x5,0x61,0x42, 0xf,0x59,0x5b, 0x7,0x3f,0x25, 0xf,0x5e,0x3c, + 0xf,0x5e,0x3d, 0xf,0x5e,0x3e, 0xf,0x5e,0x3f, 0xf,0x5e,0x40, + 0xf,0x5e,0x43, 0xf,0x5e,0x44, 0xf,0x5e,0x45, 0x5,0x61,0x3f, + 0xf,0x5e,0x4a, 0x7,0x46,0x34, 0x4,0x5f,0x4e, 0x5,0x5b,0x25, + 0x7,0x46,0x3b, 0x7,0x46,0x39, 0x7,0x46,0x37, 0x5,0x67,0x5a, + 0x5,0x67,0x5b, 0x4,0x5f,0x50, 0x5,0x67,0x57, 0x7,0x46,0x3c, + 0x7,0x46,0x3a, 0x7,0x46,0x33, 0x7,0x46,0x35, 0x7,0x46,0x38, + 0x4,0x5f,0x4f, 0xf,0x5e,0x46, 0x5,0x67,0x5c, 0xf,0x62,0x22, + 0xf,0x62,0x23, 0xf,0x62,0x24, 0xf,0x62,0x25, 0xf,0x62,0x26, + 0x7,0x46,0x36, 0x7,0x47,0x6e, 0x7,0x46,0x3d, 0x5,0x6b,0x74, + 0x5,0x6b,0x75, 0x5,0x6b,0x6f, 0x5,0x6b,0x71, 0x5,0x6b,0x70, + 0x7,0x4d,0x47, 0x7,0x4d,0x49, 0x7,0x4d,0x4b, 0x7,0x4d,0x48, + 0x7,0x4d,0x46, 0x7,0x4d,0x4a, 0xf,0x64,0x7d, 0xf,0x64,0x7e, + 0xf,0x65,0x21, 0x7,0x4d,0x4c, 0x5,0x6b,0x72, 0x7,0x52,0x7b, + 0x5,0x6f,0x71, 0x5,0x6f,0x6f, 0x4,0x66,0x35, 0x5,0x6f,0x6e, + 0x7,0x52,0x7a, 0x5,0x6f,0x6d, 0x7,0x52,0x7e, 0x5,0x6f,0x70, + 0x7,0x52,0x7d, 0x4,0x66,0x33, 0xf,0x67,0x47, 0xf,0x67,0x48, + 0x5,0x6f,0x6c, 0x7,0x52,0x7c, 0x7,0x57,0x59, 0x7,0x57,0x5a, + 0x5,0x73,0x33, 0x7,0x57,0x55, 0x7,0x57,0x56, 0x7,0x57,0x57, + 0x7,0x57,0x54, 0x7,0x57,0x52, 0x7,0x57,0x53, 0xf,0x69,0x3c, + 0x4,0x68,0x64, 0x7,0x57,0x58, 0x7,0x5b,0x49, 0x7,0x5b,0x4a, + 0xf,0x6a,0x4d, 0x7,0x5b,0x48, 0x7,0x5b,0x47, 0x5,0x77,0x55, + 0x5,0x77,0x56, 0x4,0x6b,0x66, 0x7,0x5e,0x53, 0x7,0x5e,0x55, + 0x7,0x5e,0x54, 0x7,0x5e,0x56, 0xf,0x6b,0x43, 0x5,0x75,0x67, + 0x5,0x79,0x23, 0x4,0x6c,0x6d, 0xf,0x6c,0x22, 0xf,0x6c,0x23, + 0x7,0x60,0x6b, 0x7,0x62,0x32, 0x7,0x62,0x31, 0x7,0x62,0x34, + 0x7,0x62,0x30, 0x7,0x62,0x33, 0xf,0x6c,0x79, 0xf,0x6c,0x7a, + 0x6,0x21,0x65, 0x6,0x21,0x66, 0xf,0x21,0x37, 0x4,0x21,0x6e, + 0x6,0x24,0x32, 0x6,0x24,0x30, 0x5,0x22,0x49, 0xf,0x22,0x35, + 0x6,0x24,0x31, 0x6,0x24,0x2f, 0x5,0x22,0x48, 0x6,0x26,0x54, + 0x6,0x2f,0x5c, 0x6,0x2a,0x3e, 0x6,0x26,0x58, 0x6,0x26,0x56, + 0xf,0x23,0x4f, 0xf,0x23,0x51, 0x6,0x26,0x57, 0x6,0x26,0x59, + 0x6,0x26,0x5c, 0x6,0x26,0x5a, 0x6,0x26,0x51, 0x6,0x26,0x55, + 0x6,0x26,0x52, 0x6,0x26,0x53, 0x6,0x26,0x5b, 0x5,0x25,0x55, + 0x6,0x2a,0x43, 0x6,0x2a,0x40, 0x6,0x2a,0x41, 0x6,0x2a,0x42, + 0x6,0x2d,0x34, 0x6,0x2a,0x3f, 0xf,0x26,0x24, 0x5,0x25,0x54, + 0x5,0x28,0x54, 0x5,0x28,0x56, 0x6,0x2f,0x60, 0x6,0x2f,0x5f, + 0x5,0x28,0x55, 0x6,0x2f,0x5b, 0x6,0x2f,0x5e, 0x6,0x2f,0x5d, + 0x5,0x2c,0x5c, 0x6,0x36,0x2d, 0x6,0x36,0x2a, 0x6,0x36,0x2c, + 0x5,0x2c,0x5b, 0x6,0x36,0x2b, 0x5,0x2c,0x5d, 0x5,0x31,0x56, + 0x6,0x3e,0x25, 0x5,0x31,0x57, 0x6,0x3e,0x24, 0x6,0x3e,0x23, + 0x6,0x3e,0x22, 0x5,0x31,0x54, 0x6,0x3e,0x26, 0x5,0x37,0x33, + 0x6,0x47,0x40, 0x6,0x47,0x41, 0x5,0x37,0x31, 0x5,0x31,0x55, + 0xf,0x39,0x72, 0xf,0x39,0x73, 0xf,0x39,0x74, 0x6,0x47,0x42, + 0x5,0x37,0x32, 0x5,0x3e,0x40, 0x6,0x51,0x45, 0x5,0x3e,0x41, + 0x6,0x51,0x47, 0x6,0x51,0x48, 0x5,0x3e,0x42, 0x6,0x51,0x46, + 0xf,0x40,0x65, 0x6,0x5b,0x54, 0x6,0x5b,0x58, 0x5,0x45,0x24, + 0x6,0x5b,0x55, 0x6,0x5b,0x5a, 0x6,0x5b,0x56, 0xf,0x47,0x2e, + 0xf,0x47,0x2f, 0xf,0x47,0x30, 0x6,0x5b,0x57, 0x7,0x21,0x65, + 0x7,0x21,0x66, 0x7,0x21,0x64, 0xf,0x4d,0x7b, 0x4,0x4f,0x75, + 0xf,0x53,0x73, 0x7,0x37,0x3c, 0x7,0x37,0x3a, 0x7,0x37,0x3b, + 0x4,0x5f,0x51, 0x7,0x4d,0x4d, 0x7,0x53,0x22, 0x7,0x53,0x21, + 0x4,0x21,0x48, 0x5,0x21,0x44, 0x6,0x22,0x60, 0xf,0x21,0x51, + 0xf,0x21,0x52, 0x6,0x22,0x61, 0x6,0x24,0x35, 0xf,0x22,0x36, + 0xf,0x22,0x37, 0x6,0x24,0x34, 0x6,0x26,0x6a, 0x4,0x23,0x60, + 0x6,0x26,0x66, 0x6,0x26,0x62, 0x6,0x26,0x5e, 0x6,0x26,0x69, + 0x6,0x26,0x5d, 0x6,0x26,0x65, 0x6,0x26,0x67, 0xf,0x23,0x53, + 0xf,0x23,0x54, 0xf,0x23,0x56, 0xf,0x23,0x58, 0xf,0x23,0x5a, + 0x6,0x26,0x60, 0x6,0x26,0x63, 0x6,0x26,0x68, 0x6,0x26,0x64, + 0x6,0x26,0x61, 0x6,0x26,0x5f, 0x5,0x23,0x5e, 0xf,0x23,0x59, + 0x5,0x23,0x5d, 0x5,0x23,0x5f, 0x5,0x23,0x60, 0x5,0x23,0x61, + 0x4,0x25,0x6a, 0x6,0x2a,0x4f, 0x6,0x2a,0x47, 0x6,0x2a,0x4c, + 0x6,0x2a,0x46, 0x4,0x25,0x67, 0x6,0x2a,0x4a, 0x4,0x25,0x6c, + 0x6,0x2a,0x48, 0x5,0x25,0x56, 0x6,0x2a,0x51, 0x6,0x26,0x41, + 0x6,0x2a,0x49, 0xf,0x26,0x26, 0xf,0x26,0x27, 0xf,0x26,0x28, + 0xf,0x26,0x29, 0xf,0x26,0x2a, 0xf,0x26,0x30, 0xf,0x26,0x31, + 0xf,0x26,0x2c, 0xf,0x26,0x2b, 0x4,0x25,0x6b, 0xf,0x26,0x2f, + 0xf,0x26,0x2e, 0x6,0x2a,0x50, 0x6,0x2a,0x4b, 0x6,0x2a,0x4d, + 0x6,0x2a,0x4e, 0xf,0x26,0x32, 0xf,0x26,0x25, 0x6,0x2a,0x45, + 0x6,0x2a,0x44, 0x5,0x25,0x57, 0x5,0x28,0x5b, 0x6,0x2f,0x62, + 0x5,0x28,0x57, 0x6,0x2f,0x64, 0x6,0x2f,0x61, 0x5,0x28,0x58, + 0x4,0x28,0x5f, 0x6,0x2f,0x6b, 0x6,0x2f,0x63, 0xf,0x29,0x7a, + 0xf,0x29,0x68, 0xf,0x29,0x69, 0xf,0x29,0x6b, 0xf,0x29,0x6c, + 0xf,0x29,0x6d, 0xf,0x29,0x6e, 0xf,0x29,0x6f, 0xf,0x29,0x70, + 0xf,0x29,0x72, 0xf,0x29,0x73, 0xf,0x29,0x75, 0xf,0x29,0x76, + 0xf,0x29,0x77, 0xf,0x29,0x78, 0xf,0x29,0x79, 0xf,0x29,0x7b, + 0xf,0x29,0x7c, 0xf,0x29,0x7d, 0x6,0x2f,0x6a, 0x6,0x2f,0x6c, + 0x6,0x34,0x31, 0x6,0x2f,0x67, 0x6,0x2f,0x68, 0x6,0x2f,0x66, + 0xf,0x29,0x74, 0x5,0x28,0x5d, 0x5,0x28,0x5a, 0x5,0x28,0x5e, + 0x5,0x28,0x5c, 0x5,0x28,0x59, 0x5,0x2c,0x5e, 0x4,0x2c,0x32, + 0x6,0x36,0x34, 0x4,0x2c,0x30, 0x4,0x2c,0x34, 0x6,0x36,0x32, + 0x6,0x36,0x3c, 0x6,0x36,0x36, 0x6,0x36,0x3d, 0x6,0x36,0x3e, + 0x6,0x36,0x31, 0x6,0x36,0x2e, 0x6,0x36,0x3a, 0x6,0x36,0x2f, + 0x6,0x36,0x40, 0xf,0x2e,0x55, 0xf,0x2e,0x56, 0xf,0x2e,0x57, + 0xf,0x2e,0x58, 0xf,0x2e,0x59, 0xf,0x2e,0x5a, 0xf,0x2e,0x5b, + 0xf,0x2e,0x5e, 0xf,0x2e,0x5f, 0xf,0x2e,0x60, 0x6,0x36,0x30, + 0x6,0x36,0x3f, 0x6,0x36,0x37, 0x6,0x36,0x38, 0x6,0x36,0x39, + 0x5,0x2c,0x60, 0x6,0x36,0x3b, 0xf,0x2e,0x5d, 0xf,0x2e,0x61, + 0x6,0x36,0x33, 0x5,0x2c,0x5f, 0x5,0x2c,0x62, 0x4,0x30,0x7d, + 0x6,0x3e,0x27, 0x4,0x30,0x7c, 0x5,0x31,0x5d, 0x6,0x3e,0x34, + 0x6,0x3e,0x2d, 0x5,0x31,0x5b, 0x6,0x3e,0x2a, 0x5,0x2c,0x61, + 0x6,0x3e,0x33, 0x6,0x3e,0x30, 0x5,0x31,0x5a, 0x4,0x31,0x22, + 0x4,0x31,0x23, 0xf,0x33,0x4f, 0xf,0x33,0x5b, 0x6,0x3e,0x2e, + 0x6,0x3e,0x2f, 0xf,0x33,0x4e, 0xf,0x33,0x50, 0xf,0x33,0x51, + 0xf,0x33,0x52, 0xf,0x33,0x53, 0xf,0x33,0x54, 0xf,0x33,0x55, + 0xf,0x33,0x56, 0xf,0x33,0x58, 0xf,0x33,0x59, 0xf,0x33,0x5a, + 0xf,0x33,0x5e, 0xf,0x33,0x5f, 0xf,0x33,0x60, 0xf,0x33,0x61, + 0x5,0x31,0x5c, 0x6,0x3e,0x31, 0x6,0x3e,0x35, 0x4,0x30,0x7e, + 0x6,0x3e,0x28, 0x6,0x3e,0x29, 0x5,0x31,0x58, 0x5,0x31,0x59, + 0x3,0x3a,0x4f, 0x6,0x51,0x4e, 0x4,0x36,0x72, 0x6,0x47,0x47, + 0x4,0x36,0x6a, 0x6,0x47,0x45, 0x4,0x36,0x70, 0x4,0x36,0x6c, + 0x6,0x47,0x4b, 0x6,0x47,0x50, 0x4,0x36,0x75, 0x6,0x47,0x44, + 0x6,0x47,0x46, 0x6,0x47,0x4d, 0x5,0x37,0x34, 0x6,0x3e,0x32, + 0x6,0x47,0x4f, 0x4,0x3c,0x5a, 0x5,0x37,0x39, 0x4,0x36,0x73, + 0x6,0x4f,0x6d, 0x5,0x37,0x38, 0xf,0x39,0x76, 0xf,0x39,0x78, + 0xf,0x39,0x79, 0xf,0x39,0x7a, 0xf,0x39,0x7b, 0xf,0x39,0x7c, + 0xf,0x3a,0x21, 0xf,0x3a,0x22, 0xf,0x3a,0x23, 0xf,0x3a,0x24, + 0xf,0x3a,0x25, 0xf,0x3a,0x26, 0x6,0x47,0x51, 0x6,0x47,0x4a, + 0x6,0x47,0x49, 0x4,0x36,0x74, 0x6,0x47,0x4c, 0xf,0x39,0x75, + 0x5,0x37,0x37, 0x5,0x37,0x3a, 0x6,0x47,0x48, 0x5,0x37,0x35, + 0x5,0x37,0x36, 0x5,0x37,0x3b, 0x5,0x3e,0x46, 0x6,0x51,0x56, + 0x6,0x51,0x4b, 0x6,0x51,0x55, 0x5,0x3e,0x4d, 0x4,0x3c,0x54, + 0x6,0x5b,0x62, 0x6,0x51,0x52, 0x5,0x3e,0x4c, 0x6,0x51,0x51, + 0x5,0x3e,0x44, 0x5,0x3e,0x4b, 0x5,0x3e,0x43, 0x6,0x51,0x54, + 0x6,0x51,0x50, 0x5,0x3e,0x49, 0x5,0x3e,0x4a, 0x4,0x3c,0x55, + 0x5,0x3e,0x47, 0x6,0x51,0x49, 0x6,0x51,0x4c, 0xf,0x39,0x77, + 0x6,0x51,0x53, 0x6,0x51,0x4d, 0xf,0x40,0x66, 0xf,0x40,0x67, + 0xf,0x40,0x68, 0xf,0x40,0x6a, 0xf,0x40,0x6b, 0xf,0x40,0x6c, + 0xf,0x40,0x6d, 0xf,0x40,0x6e, 0xf,0x40,0x6f, 0xf,0x40,0x70, + 0xf,0x40,0x71, 0xf,0x40,0x72, 0xf,0x40,0x73, 0x6,0x51,0x4f, + 0x5,0x3e,0x4e, 0x5,0x3e,0x48, 0x5,0x3e,0x45, 0x5,0x45,0x29, + 0x5,0x45,0x28, 0x5,0x45,0x27, 0x6,0x5b,0x5c, 0x4,0x42,0x5c, + 0x6,0x5b,0x64, 0x6,0x5b,0x66, 0x6,0x5b,0x61, 0x5,0x45,0x2a, + 0x6,0x5b,0x60, 0x5,0x45,0x26, 0x6,0x5b,0x67, 0xf,0x47,0x32, + 0xf,0x47,0x33, 0xf,0x47,0x34, 0xf,0x47,0x35, 0xf,0x47,0x36, + 0xf,0x47,0x37, 0xf,0x47,0x39, 0xf,0x47,0x3a, 0xf,0x47,0x3b, + 0xf,0x47,0x3c, 0x6,0x5b,0x5d, 0xf,0x47,0x38, 0x6,0x5b,0x6b, + 0x6,0x5b,0x63, 0x6,0x5b,0x53, 0xf,0x47,0x31, 0x4,0x42,0x5a, + 0x6,0x5b,0x65, 0x6,0x5b,0x5e, 0x5,0x45,0x25, 0x5,0x45,0x2b, + 0x7,0x21,0x72, 0x4,0x49,0x34, 0x4,0x49,0x35, 0x7,0x21,0x6f, + 0x4,0x49,0x36, 0x5,0x4c,0x4b, 0x5,0x4c,0x4c, 0x7,0x21,0x6b, + 0x7,0x21,0x78, 0x4,0x49,0x37, 0x7,0x21,0x77, 0x7,0x21,0x74, + 0xf,0x4e,0x21, 0x5,0x4c,0x4d, 0x5,0x4c,0x4f, 0x7,0x21,0x67, + 0x7,0x21,0x75, 0xf,0x4d,0x7c, 0xf,0x4d,0x7d, 0xf,0x4e,0x26, + 0xf,0x4e,0x27, 0xf,0x4e,0x28, 0xf,0x4e,0x29, 0xf,0x4e,0x2a, + 0xf,0x4e,0x2b, 0xf,0x4e,0x2d, 0x7,0x21,0x6c, 0x7,0x21,0x6d, + 0x7,0x21,0x6e, 0x5,0x4c,0x71, 0x7,0x21,0x73, 0x7,0x21,0x71, + 0x7,0x21,0x69, 0xf,0x4d,0x7e, 0xf,0x4e,0x24, 0xf,0x4e,0x23, + 0x5,0x4c,0x4e, 0x5,0x4c,0x4a, 0x5,0x4c,0x48, 0x7,0x21,0x68, + 0x5,0x4c,0x49, 0x7,0x2c,0x6f, 0x7,0x2c,0x71, 0x7,0x2c,0x6c, + 0x4,0x4f,0x77, 0x4,0x4f,0x7a, 0x4,0x4f,0x79, 0x7,0x2c,0x6d, + 0x7,0x2c,0x70, 0xf,0x4e,0x2c, 0xf,0x53,0x74, 0xf,0x53,0x76, + 0xf,0x53,0x78, 0x5,0x53,0x7a, 0x7,0x2c,0x72, 0x5,0x53,0x7b, + 0x5,0x53,0x79, 0x7,0x34,0x6f, 0x7,0x2c,0x73, 0x7,0x2c,0x6e, + 0xf,0x53,0x77, 0x4,0x4f,0x76, 0x7,0x37,0x43, 0x4,0x55,0x7d, + 0x7,0x37,0x3d, 0x5,0x5b,0x2e, 0x7,0x37,0x3f, 0x7,0x37,0x44, + 0x7,0x37,0x42, 0x7,0x37,0x45, 0x5,0x5b,0x2c, 0x7,0x2c,0x74, + 0xf,0x59,0x64, 0xf,0x59,0x65, 0xf,0x59,0x66, 0xf,0x59,0x67, + 0xf,0x59,0x68, 0xf,0x59,0x69, 0xf,0x59,0x6a, 0xf,0x59,0x6b, + 0x7,0x3e,0x6c, 0x7,0x37,0x40, 0x7,0x37,0x41, 0x4,0x55,0x7e, + 0x5,0x5b,0x2f, 0x7,0x3f,0x34, 0x5,0x61,0x47, 0x7,0x37,0x3e, + 0x5,0x61,0x49, 0x7,0x3f,0x33, 0xf,0x5e,0x47, 0xf,0x5e,0x48, + 0xf,0x5e,0x49, 0xf,0x5e,0x4b, 0xf,0x5e,0x4d, 0xf,0x5e,0x4e, + 0x7,0x3f,0x31, 0x7,0x3f,0x32, 0x5,0x5b,0x30, 0x5,0x61,0x48, + 0xf,0x62,0x28, 0x5,0x61,0x4a, 0x7,0x46,0x42, 0x7,0x46,0x3f, + 0x5,0x67,0x5d, 0x7,0x46,0x47, 0x7,0x46,0x41, 0xf,0x5e,0x4c, + 0xf,0x62,0x27, 0x7,0x46,0x43, 0x7,0x46,0x46, 0x7,0x4a,0x3b, + 0x7,0x46,0x40, 0x7,0x3f,0x35, 0x4,0x63,0x33, 0xf,0x65,0x22, + 0xf,0x65,0x23, 0xf,0x65,0x24, 0xf,0x65,0x25, 0x7,0x4d,0x4e, + 0x5,0x6b,0x77, 0x7,0x53,0x28, 0x4,0x66,0x36, 0x7,0x53,0x24, + 0x7,0x53,0x23, 0x7,0x53,0x27, 0x7,0x53,0x25, 0x5,0x6f,0x74, + 0xf,0x67,0x49, 0xf,0x67,0x4a, 0xf,0x67,0x4c, 0x7,0x53,0x26, + 0xf,0x67,0x4b, 0x5,0x6f,0x72, 0x5,0x6f,0x73, 0x7,0x57,0x5b, + 0xf,0x69,0x3d, 0x5,0x73,0x34, 0x7,0x57,0x5d, 0x5,0x73,0x35, + 0x7,0x5b,0x4b, 0x7,0x57,0x5c, 0x7,0x5e,0x57, 0x5,0x77,0x57, + 0x5,0x7b,0x5f, 0x7,0x65,0x5a, 0x7,0x66,0x42, 0x7,0x66,0x4f, + 0x6,0x22,0x62, 0x6,0x2f,0x6d, 0x6,0x26,0x6b, 0x6,0x2a,0x52, + 0xf,0x29,0x7e, 0xf,0x2a,0x21, 0x5,0x2c,0x64, 0x6,0x36,0x42, + 0x6,0x2f,0x6e, 0x6,0x36,0x41, 0xf,0x2e,0x62, 0x5,0x2c,0x63, + 0x6,0x3e,0x36, 0xf,0x33,0x62, 0x6,0x47,0x52, 0x6,0x51,0x59, + 0x6,0x51,0x58, 0x6,0x5b,0x6a, 0x6,0x64,0x7a, 0x6,0x5b,0x68, + 0xf,0x47,0x3d, 0x6,0x5b,0x69, 0x7,0x21,0x7a, 0x7,0x21,0x79, + 0x7,0x2c,0x75, 0x7,0x3f,0x36, 0x7,0x43,0x3f, 0xf,0x5e,0x4f, + 0x7,0x3f,0x37, 0x7,0x46,0x48, 0x7,0x46,0x49, 0x7,0x48,0x3b, + 0x7,0x57,0x5e, 0x5,0x21,0x2f, 0x6,0x22,0x63, 0x6,0x24,0x37, + 0x6,0x24,0x36, 0x6,0x26,0x6c, 0xf,0x23,0x5c, 0x6,0x36,0x43, + 0x6,0x3e,0x37, 0x6,0x3e,0x38, 0x6,0x51,0x5a, 0x6,0x24,0x39, + 0x6,0x24,0x38, 0x5,0x23,0x64, 0x5,0x23,0x63, 0x4,0x25,0x6f, + 0x6,0x2a,0x53, 0xf,0x26,0x34, 0xf,0x2e,0x63, 0x5,0x31,0x5e, + 0x6,0x3e,0x39, 0x6,0x3e,0x3c, 0x5,0x2c,0x65, 0x6,0x3e,0x3b, + 0x6,0x3e,0x3a, 0x5,0x3e,0x4f, 0x6,0x51,0x5c, 0xf,0x40,0x74, + 0x6,0x5b,0x6c, 0xf,0x47,0x3e, 0x6,0x5b,0x6d, 0x5,0x4c,0x50, + 0xf,0x4e,0x2f, 0xf,0x53,0x79, 0x7,0x2c,0x76, 0x7,0x2c,0x77, + 0x7,0x37,0x46, 0x7,0x46,0x4a, 0x7,0x3f,0x3a, 0x7,0x3f,0x38, + 0x7,0x3f,0x39, 0x7,0x46,0x4b, 0x7,0x4d,0x4f, 0x6,0x22,0x64, + 0x6,0x22,0x65, 0x6,0x24,0x3a, 0x6,0x26,0x6e, 0x6,0x26,0x6d, + 0x6,0x2a,0x54, 0xf,0x25,0x42, 0x5,0x28,0x5f, 0x5,0x2c,0x68, + 0x4,0x2c,0x35, 0x5,0x2c,0x67, 0x6,0x36,0x46, 0x6,0x36,0x45, + 0xf,0x2e,0x64, 0xf,0x2e,0x65, 0x6,0x36,0x47, 0x5,0x2c,0x69, + 0x4,0x31,0x24, 0x5,0x31,0x61, 0x6,0x3e,0x3d, 0x5,0x31,0x5f, + 0x5,0x31,0x60, 0x5,0x31,0x62, 0xf,0x33,0x63, 0x6,0x47,0x54, + 0x5,0x37,0x3e, 0x5,0x37,0x42, 0x5,0x37,0x40, 0x5,0x37,0x41, + 0xf,0x3a,0x27, 0x5,0x3e,0x50, 0x6,0x51,0x5d, 0x5,0x3e,0x52, + 0x5,0x3e,0x51, 0x6,0x51,0x5f, 0x4,0x42,0x61, 0x6,0x5b,0x6f, + 0x6,0x5b,0x70, 0x6,0x5b,0x6e, 0x5,0x45,0x2c, 0x5,0x45,0x2e, + 0x7,0x21,0x7b, 0x5,0x4c,0x51, 0x7,0x3f,0x3b, 0x5,0x5b,0x31, + 0x5,0x5b,0x32, 0x7,0x46,0x4c, 0x6,0x21,0x67, 0x6,0x21,0x68, + 0xf,0x21,0x38, 0x6,0x22,0x66, 0xf,0x21,0x53, 0xf,0x21,0x54, + 0x5,0x21,0x76, 0x6,0x24,0x3c, 0x4,0x22,0x54, 0x6,0x24,0x3f, + 0x6,0x24,0x40, 0x6,0x24,0x3e, 0x6,0x24,0x3d, 0xf,0x21,0x6b, + 0x4,0x23,0x63, 0x4,0x23,0x64, 0x4,0x23,0x66, 0xf,0x23,0x5d, + 0xf,0x23,0x5e, 0xf,0x23,0x5f, 0xf,0x23,0x60, 0xf,0x23,0x61, + 0xf,0x23,0x62, 0xf,0x23,0x63, 0x6,0x26,0x70, 0x6,0x26,0x6f, + 0x4,0x25,0x76, 0x5,0x25,0x5a, 0x4,0x25,0x74, 0x6,0x2a,0x55, + 0x6,0x2a,0x56, 0x4,0x28,0x63, 0x6,0x2a,0x5c, 0x6,0x2a,0x58, + 0x6,0x2a,0x59, 0xf,0x26,0x36, 0xf,0x26,0x37, 0x6,0x2a,0x5a, + 0x6,0x2a,0x5b, 0x6,0x2a,0x5d, 0x4,0x25,0x79, 0x6,0x2a,0x57, + 0x6,0x29,0x39, 0x4,0x28,0x64, 0x4,0x28,0x62, 0x5,0x28,0x61, + 0x5,0x28,0x62, 0x5,0x28,0x60, 0xf,0x2a,0x23, 0xf,0x2a,0x24, + 0xf,0x2a,0x25, 0xf,0x2a,0x26, 0xf,0x2a,0x28, 0xf,0x2a,0x29, + 0xf,0x2a,0x27, 0xf,0x2a,0x22, 0x5,0x2c,0x6c, 0x6,0x36,0x48, + 0x6,0x36,0x4b, 0x5,0x2c,0x6a, 0x5,0x2c,0x6d, 0xf,0x2e,0x67, + 0xf,0x2e,0x68, 0xf,0x2e,0x69, 0x6,0x36,0x4a, 0x4,0x2c,0x37, + 0x5,0x2c,0x6b, 0x5,0x31,0x64, 0xf,0x2e,0x66, 0x4,0x2c,0x36, + 0x6,0x3e,0x41, 0x6,0x3e,0x44, 0x3,0x34,0x7e, 0x6,0x3e,0x3e, + 0x6,0x3e,0x43, 0x6,0x3e,0x40, 0x6,0x3e,0x45, 0x6,0x3e,0x3f, + 0xf,0x33,0x64, 0xf,0x33,0x65, 0x4,0x31,0x27, 0x5,0x31,0x63, + 0x4,0x3c,0x5e, 0x6,0x47,0x58, 0x6,0x47,0x5b, 0x6,0x47,0x5d, + 0x6,0x47,0x5a, 0xf,0x3a,0x28, 0x6,0x47,0x55, 0x6,0x47,0x5c, + 0x5,0x37,0x43, 0x6,0x47,0x59, 0x4,0x36,0x7a, 0x4,0x36,0x78, + 0x5,0x37,0x44, 0x6,0x47,0x57, 0x6,0x51,0x60, 0x6,0x51,0x61, + 0x4,0x3c,0x5d, 0xf,0x40,0x76, 0x5,0x3e,0x53, 0x5,0x3e,0x54, + 0x5,0x3e,0x55, 0x6,0x5b,0x72, 0x4,0x42,0x63, 0x5,0x45,0x2f, + 0x4,0x42,0x62, 0xf,0x47,0x3f, 0xf,0x47,0x40, 0xf,0x47,0x41, + 0x6,0x5b,0x71, 0x5,0x45,0x30, 0x4,0x49,0x38, 0x7,0x22,0x22, + 0x7,0x21,0x7c, 0x7,0x22,0x21, 0x7,0x2c,0x7c, 0x7,0x21,0x7e, + 0x5,0x4c,0x53, 0xf,0x4e,0x31, 0xf,0x4e,0x32, 0x7,0x21,0x7d, + 0x4,0x42,0x64, 0x5,0x4c,0x52, 0x7,0x2c,0x7d, 0x5,0x53,0x7c, + 0x7,0x2c,0x78, 0x7,0x2c,0x79, 0x4,0x56,0x21, 0xf,0x53,0x7a, + 0x7,0x2c,0x7a, 0x7,0x37,0x48, 0x7,0x37,0x47, 0x5,0x5b,0x33, + 0x4,0x56,0x2e, 0x4,0x5a,0x7b, 0xf,0x62,0x29, 0x5,0x6b,0x78, + 0x7,0x53,0x29, 0xf,0x69,0x3e, 0x5,0x75,0x68, 0xf,0x6b,0x44, + 0x7,0x5e,0x58, 0xf,0x6c,0x5f, 0x5,0x21,0x62, 0xf,0x21,0x55, + 0xf,0x21,0x56, 0x6,0x24,0x41, 0x4,0x22,0x58, 0x6,0x24,0x42, + 0xf,0x22,0x39, 0xf,0x22,0x3a, 0xf,0x22,0x3b, 0xf,0x22,0x3c, + 0x4,0x22,0x57, 0x5,0x22,0x4b, 0x6,0x24,0x43, 0x5,0x22,0x4a, + 0x6,0x26,0x74, 0x4,0x23,0x68, 0x4,0x23,0x6b, 0xf,0x23,0x64, + 0xf,0x23,0x66, 0xf,0x23,0x68, 0xf,0x23,0x69, 0xf,0x23,0x6b, + 0xf,0x23,0x6c, 0xf,0x23,0x6d, 0xf,0x23,0x6e, 0xf,0x23,0x6f, + 0xf,0x23,0x65, 0x6,0x26,0x72, 0x6,0x26,0x73, 0x6,0x26,0x75, + 0x6,0x26,0x71, 0xf,0x23,0x6a, 0xf,0x23,0x67, 0x5,0x23,0x66, + 0x5,0x23,0x67, 0x5,0x23,0x65, 0x4,0x25,0x7c, 0x6,0x2a,0x61, + 0x6,0x2a,0x60, 0x5,0x25,0x60, 0x4,0x25,0x7a, 0x5,0x25,0x5e, + 0x4,0x25,0x7d, 0x5,0x25,0x5b, 0x5,0x25,0x5c, 0x4,0x25,0x7e, + 0xf,0x26,0x3a, 0xf,0x26,0x3b, 0xf,0x26,0x3e, 0xf,0x26,0x3f, + 0xf,0x26,0x40, 0xf,0x26,0x41, 0xf,0x26,0x42, 0xf,0x26,0x43, + 0xf,0x26,0x45, 0xf,0x26,0x46, 0xf,0x26,0x47, 0xf,0x26,0x48, + 0xf,0x26,0x49, 0x6,0x2a,0x5f, 0x6,0x2a,0x5e, 0xf,0x26,0x44, + 0xf,0x26,0x3c, 0xf,0x26,0x3d, 0x5,0x25,0x62, 0x5,0x25,0x5f, + 0x5,0x25,0x63, 0x5,0x25,0x61, 0x4,0x28,0x68, 0x5,0x28,0x64, + 0x6,0x2f,0x76, 0x6,0x2f,0x78, 0x6,0x2f,0x79, 0x4,0x28,0x65, + 0x4,0x28,0x6b, 0x5,0x28,0x66, 0x4,0x28,0x66, 0x5,0x28,0x63, + 0x6,0x2f,0x70, 0x6,0x2f,0x7b, 0x6,0x2f,0x74, 0x5,0x28,0x6b, + 0x6,0x2f,0x7e, 0xf,0x2a,0x2d, 0xf,0x2a,0x2e, 0xf,0x2a,0x2f, + 0xf,0x2a,0x30, 0xf,0x2a,0x31, 0xf,0x2a,0x32, 0xf,0x2a,0x33, + 0xf,0x2a,0x34, 0x6,0x2f,0x73, 0x6,0x2f,0x77, 0x4,0x28,0x6c, + 0x6,0x2f,0x75, 0x6,0x2f,0x7a, 0x6,0x2f,0x6f, 0x6,0x2f,0x7d, + 0x5,0x28,0x69, 0x4,0x28,0x6a, 0x5,0x28,0x6a, 0x5,0x28,0x67, + 0x6,0x2f,0x71, 0x6,0x2f,0x7c, 0x5,0x28,0x65, 0x5,0x28,0x68, + 0x6,0x2f,0x72, 0x3,0x30,0x53, 0x5,0x2c,0x70, 0x6,0x36,0x4f, + 0x5,0x2c,0x72, 0x5,0x2c,0x75, 0x5,0x2c,0x6f, 0x6,0x36,0x55, + 0x5,0x2c,0x6e, 0x6,0x36,0x56, 0x6,0x36,0x50, 0x6,0x36,0x51, + 0xf,0x2e,0x6c, 0xf,0x2e,0x6e, 0xf,0x2e,0x70, 0xf,0x2e,0x71, + 0xf,0x2e,0x73, 0xf,0x2e,0x74, 0xf,0x2e,0x75, 0xf,0x2e,0x76, + 0xf,0x2e,0x77, 0xf,0x2e,0x79, 0x6,0x36,0x54, 0x6,0x36,0x4e, + 0x5,0x2c,0x71, 0x6,0x36,0x53, 0x6,0x36,0x52, 0xf,0x2e,0x6f, + 0xf,0x2e,0x72, 0x5,0x2c,0x77, 0x5,0x2c,0x74, 0x5,0x2c,0x73, + 0x5,0x2c,0x76, 0x5,0x2c,0x78, 0x6,0x3e,0x4c, 0x6,0x3e,0x52, + 0x6,0x3e,0x46, 0x6,0x3e,0x47, 0x5,0x31,0x6a, 0x6,0x3e,0x48, + 0x6,0x3e,0x49, 0x6,0x3e,0x4f, 0x5,0x31,0x69, 0x5,0x31,0x6d, + 0x6,0x3e,0x4d, 0x4,0x31,0x2b, 0x6,0x3e,0x4e, 0x5,0x31,0x6b, + 0x6,0x3e,0x53, 0xf,0x33,0x68, 0xf,0x33,0x69, 0xf,0x33,0x6a, + 0xf,0x33,0x6b, 0xf,0x33,0x6c, 0xf,0x33,0x6d, 0xf,0x33,0x6e, + 0xf,0x33,0x6f, 0xf,0x33,0x71, 0xf,0x33,0x72, 0xf,0x33,0x74, + 0xf,0x33,0x75, 0xf,0x33,0x76, 0xf,0x33,0x77, 0xf,0x33,0x78, + 0xf,0x33,0x79, 0xf,0x33,0x7a, 0xf,0x33,0x7b, 0xf,0x33,0x7c, + 0xf,0x33,0x7d, 0xf,0x33,0x7e, 0xf,0x34,0x21, 0xf,0x34,0x22, + 0xf,0x34,0x23, 0xf,0x33,0x70, 0x6,0x3e,0x51, 0x4,0x31,0x2a, + 0x6,0x3e,0x4b, 0x6,0x3e,0x4a, 0x5,0x31,0x66, 0x5,0x31,0x67, + 0x5,0x31,0x68, 0x5,0x31,0x65, 0x4,0x36,0x7b, 0x6,0x47,0x62, + 0x4,0x36,0x7c, 0x5,0x37,0x5a, 0x6,0x47,0x5f, 0x4,0x37,0x21, + 0x5,0x37,0x48, 0x5,0x37,0x59, 0x6,0x47,0x64, 0x6,0x47,0x66, + 0x5,0x37,0x4f, 0x6,0x47,0x65, 0x6,0x47,0x60, 0x5,0x37,0x50, + 0x5,0x37,0x49, 0x5,0x37,0x57, 0x5,0x37,0x54, 0x5,0x37,0x47, + 0x5,0x37,0x4b, 0xf,0x3a,0x29, 0xf,0x3a,0x2b, 0xf,0x3a,0x2c, + 0xf,0x3a,0x2d, 0xf,0x3a,0x2e, 0xf,0x3a,0x2f, 0xf,0x3a,0x30, + 0xf,0x3a,0x32, 0xf,0x3a,0x33, 0xf,0x3a,0x34, 0xf,0x3a,0x36, + 0xf,0x3a,0x37, 0xf,0x3a,0x38, 0xf,0x3a,0x39, 0xf,0x3a,0x3a, + 0xf,0x3a,0x3e, 0xf,0x3a,0x3f, 0xf,0x3a,0x41, 0xf,0x3a,0x42, + 0xf,0x3a,0x43, 0xf,0x3a,0x44, 0xf,0x3a,0x45, 0xf,0x3a,0x3b, + 0x5,0x37,0x56, 0x6,0x47,0x63, 0x5,0x37,0x58, 0x6,0x47,0x5e, + 0xf,0x3a,0x3d, 0xf,0x3a,0x40, 0xf,0x3a,0x31, 0xf,0x3a,0x2a, + 0x5,0x37,0x45, 0x5,0x3e,0x56, 0x5,0x37,0x53, 0x5,0x37,0x4c, + 0x5,0x37,0x52, 0x5,0x37,0x51, 0x5,0x37,0x4a, 0x5,0x37,0x4d, + 0x5,0x37,0x55, 0x6,0x47,0x67, 0xf,0x33,0x67, 0x5,0x3e,0x5f, + 0x5,0x3e,0x5a, 0x5,0x3e,0x5d, 0x5,0x3e,0x57, 0x4,0x3c,0x65, + 0x5,0x3e,0x59, 0x6,0x51,0x63, 0x4,0x3c,0x62, 0x4,0x3c,0x60, + 0x6,0x51,0x67, 0x6,0x51,0x65, 0x6,0x5b,0x7c, 0x5,0x3e,0x5c, + 0x5,0x3e,0x5b, 0x6,0x51,0x66, 0xf,0x40,0x78, 0xf,0x40,0x79, + 0xf,0x40,0x7a, 0xf,0x40,0x7c, 0xf,0x40,0x7d, 0xf,0x40,0x7e, + 0xf,0x41,0x22, 0xf,0x41,0x23, 0x6,0x51,0x62, 0x6,0x51,0x64, + 0xf,0x40,0x77, 0x6,0x51,0x68, 0x5,0x3e,0x58, 0x5,0x3e,0x5e, + 0x5,0x3e,0x60, 0x6,0x51,0x6a, 0xf,0x41,0x21, 0x4,0x42,0x70, + 0x5,0x45,0x32, 0x4,0x42,0x6a, 0x6,0x5b,0x7b, 0x4,0x42,0x71, + 0x6,0x5b,0x73, 0x5,0x45,0x34, 0x7,0x22,0x29, 0x4,0x42,0x73, + 0x6,0x5b,0x75, 0xf,0x47,0x48, 0x4,0x42,0x6f, 0x5,0x45,0x37, + 0x4,0x42,0x6e, 0xf,0x47,0x47, 0xf,0x47,0x49, 0xf,0x47,0x4a, + 0xf,0x47,0x4b, 0xf,0x47,0x4c, 0xf,0x47,0x4d, 0xf,0x47,0x4e, + 0xf,0x47,0x4f, 0xf,0x47,0x50, 0xf,0x47,0x51, 0xf,0x47,0x52, + 0xf,0x47,0x54, 0x6,0x5b,0x74, 0x6,0x5b,0x78, 0x4,0x42,0x72, + 0x4,0x42,0x65, 0x6,0x5b,0x76, 0xf,0x47,0x53, 0x5,0x45,0x33, + 0x5,0x45,0x36, 0x5,0x45,0x35, 0x7,0x22,0x26, 0x5,0x45,0x31, + 0x6,0x5b,0x77, 0x5,0x4c,0x5b, 0x5,0x4c,0x59, 0x4,0x49,0x39, + 0x5,0x4c,0x56, 0x7,0x22,0x2f, 0x5,0x4c,0x57, 0x4,0x49,0x3f, + 0x4,0x49,0x3b, 0x7,0x22,0x2c, 0x4,0x49,0x3e, 0x7,0x22,0x25, + 0x6,0x5b,0x79, 0x7,0x22,0x24, 0xf,0x4e,0x3a, 0x7,0x37,0x51, + 0xf,0x47,0x45, 0x5,0x4c,0x54, 0x5,0x4c,0x5c, 0xf,0x4e,0x33, + 0xf,0x4e,0x34, 0xf,0x4e,0x35, 0xf,0x4e,0x36, 0xf,0x4e,0x37, + 0xf,0x4e,0x38, 0xf,0x4e,0x39, 0xf,0x4e,0x3b, 0xf,0x4e,0x3d, + 0xf,0x4e,0x3e, 0xf,0x4e,0x3f, 0xf,0x4e,0x40, 0xf,0x4e,0x41, + 0xf,0x4e,0x42, 0xf,0x4e,0x44, 0x6,0x5b,0x7a, 0x7,0x22,0x27, + 0x7,0x22,0x2e, 0x7,0x22,0x2d, 0x7,0x22,0x28, 0x7,0x22,0x23, + 0xf,0x4e,0x45, 0xf,0x4e,0x43, 0xf,0x4e,0x3c, 0x5,0x4c,0x5a, + 0x5,0x4c,0x55, 0x4,0x49,0x3d, 0x7,0x22,0x2a, 0x5,0x4c,0x58, + 0x7,0x22,0x2b, 0xf,0x54,0x25, 0x5,0x54,0x28, 0x5,0x54,0x23, + 0x7,0x2d,0x25, 0x7,0x2c,0x7e, 0x5,0x54,0x29, 0x5,0x54,0x26, + 0x7,0x2d,0x21, 0x4,0x4f,0x7e, 0x7,0x2d,0x28, 0x5,0x54,0x22, + 0x7,0x2d,0x2b, 0x5,0x53,0x7d, 0x7,0x2d,0x2a, 0x7,0x2d,0x2c, + 0xf,0x53,0x7b, 0xf,0x53,0x7c, 0xf,0x53,0x7d, 0xf,0x53,0x7e, + 0xf,0x54,0x22, 0xf,0x54,0x23, 0xf,0x54,0x24, 0xf,0x54,0x26, + 0xf,0x54,0x27, 0xf,0x54,0x2b, 0xf,0x54,0x2c, 0x5,0x53,0x7e, + 0x7,0x2d,0x26, 0x7,0x2d,0x27, 0x7,0x2d,0x23, 0x7,0x2d,0x22, + 0x7,0x2d,0x24, 0xf,0x54,0x21, 0xf,0x54,0x28, 0x5,0x54,0x27, + 0x5,0x54,0x21, 0x5,0x54,0x25, 0x7,0x2d,0x29, 0x7,0x37,0x4b, + 0x7,0x37,0x54, 0x7,0x37,0x4f, 0x4,0x4f,0x7d, 0x7,0x37,0x4d, + 0x4,0x56,0x23, 0x7,0x37,0x53, 0x7,0x37,0x4a, 0x5,0x5b,0x36, + 0x5,0x5b,0x34, 0x7,0x37,0x4c, 0x7,0x37,0x4e, 0x7,0x37,0x50, + 0x5,0x5b,0x35, 0x4,0x56,0x25, 0xf,0x59,0x6c, 0xf,0x59,0x6d, + 0xf,0x59,0x6e, 0xf,0x59,0x6f, 0xf,0x59,0x70, 0xf,0x59,0x71, + 0x7,0x37,0x52, 0x7,0x37,0x55, 0x7,0x37,0x49, 0x5,0x61,0x4b, + 0x4,0x5a,0x7c, 0x7,0x3f,0x3f, 0x5,0x61,0x4c, 0x5,0x61,0x4d, + 0x7,0x3f,0x3e, 0x7,0x3f,0x40, 0xf,0x5e,0x50, 0xf,0x5e,0x51, + 0xf,0x5e,0x52, 0xf,0x5e,0x54, 0x7,0x3f,0x3d, 0x7,0x3f,0x41, + 0xf,0x5e,0x53, 0x7,0x3f,0x3c, 0x5,0x67,0x5f, 0x4,0x5f,0x53, + 0x7,0x46,0x4d, 0x7,0x46,0x52, 0x7,0x46,0x50, 0xf,0x5e,0x55, + 0xf,0x62,0x2a, 0xf,0x62,0x2b, 0x7,0x46,0x4e, 0x5,0x67,0x61, + 0x5,0x67,0x60, 0xf,0x5f,0x73, 0x7,0x4d,0x51, 0x5,0x6b,0x79, + 0xf,0x65,0x26, 0x5,0x6b,0x7a, 0x5,0x6b,0x7b, 0x7,0x53,0x2a, + 0x5,0x6f,0x76, 0x7,0x53,0x2b, 0x5,0x6f,0x75, 0xf,0x67,0x4d, + 0xf,0x67,0x4e, 0x7,0x57,0x62, 0x5,0x73,0x36, 0x7,0x57,0x61, + 0x7,0x57,0x63, 0x7,0x57,0x5f, 0xf,0x69,0x3f, 0x7,0x57,0x60, + 0x7,0x57,0x64, 0xf,0x69,0x40, 0x5,0x75,0x69, 0x7,0x5b,0x4c, + 0x7,0x5e,0x5a, 0x7,0x5e,0x5b, 0xf,0x6b,0x45, 0x7,0x5e,0x59, + 0x7,0x5e,0x5c, 0xf,0x6c,0x24, 0x5,0x79,0x24, 0xf,0x6c,0x4a, + 0x7,0x63,0x4d, 0x5,0x7a,0x65, 0x4,0x21,0x33, 0x6,0x22,0x68, + 0x5,0x21,0x63, 0x6,0x22,0x69, 0xf,0x21,0x58, 0xf,0x21,0x57, + 0x6,0x24,0x45, 0x6,0x24,0x44, 0x6,0x26,0x76, 0x6,0x26,0x77, + 0x5,0x23,0x6a, 0x4,0x23,0x6c, 0xf,0x23,0x70, 0x5,0x23,0x69, + 0x4,0x28,0x6f, 0x6,0x30,0x24, 0x6,0x2a,0x63, 0x6,0x2a,0x62, + 0xf,0x26,0x4a, 0xf,0x26,0x4b, 0xf,0x26,0x4c, 0xf,0x26,0x4d, + 0xf,0x26,0x4f, 0x6,0x2a,0x64, 0xf,0x26,0x4e, 0x6,0x30,0x23, + 0x6,0x30,0x21, 0x6,0x30,0x26, 0x6,0x30,0x25, 0xf,0x2a,0x35, + 0xf,0x2a,0x36, 0xf,0x2a,0x37, 0x6,0x30,0x22, 0x6,0x36,0x59, + 0x5,0x2c,0x79, 0x6,0x36,0x58, 0xf,0x2e,0x7a, 0xf,0x2e,0x7b, + 0x5,0x2c,0x7a, 0xf,0x33,0x66, 0xf,0x34,0x24, 0xf,0x34,0x25, + 0xf,0x34,0x26, 0xf,0x34,0x27, 0x5,0x37,0x5c, 0x6,0x47,0x69, + 0x5,0x37,0x5b, 0x6,0x47,0x6a, 0xf,0x3a,0x47, 0x6,0x47,0x68, + 0xf,0x3a,0x46, 0x4,0x3c,0x66, 0x4,0x3c,0x68, 0x6,0x51,0x6d, + 0x5,0x3e,0x62, 0xf,0x41,0x25, 0xf,0x41,0x26, 0x6,0x51,0x6b, + 0x6,0x51,0x6c, 0x5,0x3e,0x61, 0x4,0x3c,0x69, 0x6,0x5b,0x7d, + 0xf,0x47,0x55, 0xf,0x47,0x56, 0x5,0x45,0x38, 0x4,0x49,0x41, + 0x4,0x49,0x42, 0xf,0x4e,0x46, 0x5,0x4c,0x5d, 0x7,0x2d,0x2f, + 0x7,0x2d,0x2e, 0x7,0x2d,0x31, 0x7,0x2d,0x32, 0x5,0x54,0x2a, + 0x7,0x2d,0x30, 0xf,0x54,0x2d, 0xf,0x54,0x2e, 0x7,0x37,0x56, + 0x7,0x4d,0x52, 0xf,0x62,0x2c, 0xf,0x62,0x2d, 0x5,0x6b,0x7c, + 0xf,0x6c,0x60, 0x6,0x21,0x69, 0x5,0x21,0x64, 0x6,0x24,0x46, + 0x6,0x24,0x49, 0x6,0x24,0x4a, 0x4,0x22,0x5a, 0xf,0x22,0x3d, + 0xf,0x22,0x3e, 0xf,0x22,0x3f, 0xf,0x22,0x40, 0xf,0x22,0x41, + 0x6,0x24,0x47, 0x6,0x26,0x7e, 0x6,0x26,0x7d, 0x4,0x23,0x6e, + 0x6,0x26,0x7b, 0x6,0x26,0x7c, 0xf,0x23,0x72, 0x5,0x25,0x65, + 0x5,0x25,0x64, 0x6,0x2a,0x66, 0x5,0x25,0x66, 0x6,0x2a,0x67, + 0x6,0x2a,0x68, 0xf,0x26,0x51, 0xf,0x26,0x52, 0xf,0x26,0x54, + 0xf,0x26,0x55, 0x6,0x2a,0x65, 0xf,0x26,0x53, 0x5,0x28,0x6c, + 0x6,0x30,0x28, 0x6,0x30,0x2a, 0x5,0x28,0x6d, 0x4,0x28,0x71, + 0x4,0x28,0x72, 0x4,0x28,0x73, 0x6,0x30,0x2b, 0x6,0x30,0x27, + 0x6,0x30,0x29, 0xf,0x2a,0x38, 0xf,0x2a,0x3a, 0xf,0x2a,0x3b, + 0xf,0x2a,0x3c, 0x6,0x30,0x2c, 0x6,0x30,0x2d, 0x4,0x2c,0x4a, + 0x6,0x36,0x61, 0x4,0x2c,0x45, 0x4,0x2c,0x44, 0x4,0x2c,0x43, + 0x4,0x2c,0x47, 0x6,0x36,0x64, 0x6,0x36,0x65, 0x6,0x36,0x5f, + 0x6,0x36,0x5e, 0x5,0x2c,0x7d, 0x5,0x2d,0x22, 0x6,0x36,0x5b, + 0x6,0x36,0x62, 0xf,0x2e,0x7c, 0xf,0x2e,0x7d, 0x6,0x36,0x60, + 0x6,0x36,0x63, 0x6,0x36,0x5a, 0x6,0x36,0x5c, 0x5,0x2d,0x21, + 0x5,0x2c,0x7e, 0x4,0x31,0x2d, 0x5,0x31,0x6f, 0x6,0x3e,0x57, + 0x6,0x3e,0x59, 0x6,0x3e,0x58, 0x6,0x3e,0x56, 0x6,0x3e,0x5b, + 0x5,0x31,0x70, 0xf,0x34,0x28, 0xf,0x34,0x29, 0xf,0x34,0x2a, + 0xf,0x34,0x2b, 0xf,0x34,0x2c, 0xf,0x34,0x2d, 0xf,0x34,0x2e, + 0xf,0x34,0x2f, 0x4,0x31,0x2f, 0x6,0x3e,0x5c, 0x5,0x31,0x6e, + 0x6,0x3e,0x55, 0x5,0x37,0x5e, 0x4,0x37,0x26, 0x5,0x37,0x61, + 0x6,0x47,0x70, 0x6,0x47,0x6b, 0x4,0x37,0x23, 0x5,0x37,0x5d, + 0x5,0x37,0x60, 0x6,0x47,0x6e, 0x4,0x37,0x25, 0x5,0x37,0x5f, + 0x6,0x47,0x6f, 0x6,0x47,0x6c, 0xf,0x3a,0x48, 0xf,0x3a,0x49, + 0xf,0x3a,0x4a, 0xf,0x3a,0x4b, 0xf,0x3a,0x4c, 0xf,0x3a,0x4d, + 0xf,0x3a,0x4e, 0xf,0x3a,0x4f, 0x6,0x47,0x6d, 0x5,0x37,0x62, + 0xf,0x3d,0x6c, 0x6,0x51,0x74, 0x6,0x51,0x70, 0x4,0x3c,0x6b, + 0x4,0x3c,0x70, 0x5,0x3e,0x63, 0x6,0x51,0x77, 0x5,0x3e,0x64, + 0x6,0x51,0x72, 0x6,0x51,0x71, 0x6,0x51,0x76, 0x4,0x3c,0x6d, + 0x6,0x51,0x73, 0x6,0x51,0x6f, 0x6,0x51,0x75, 0xf,0x41,0x27, + 0xf,0x41,0x28, 0xf,0x41,0x29, 0xf,0x41,0x2a, 0xf,0x41,0x2c, + 0xf,0x41,0x2d, 0xf,0x41,0x2e, 0x6,0x51,0x6e, 0x6,0x5b,0x7e, + 0x6,0x5c,0x27, 0x5,0x45,0x3c, 0x5,0x45,0x3a, 0x6,0x5c,0x24, + 0x6,0x5c,0x2c, 0x4,0x42,0x76, 0x6,0x5c,0x2e, 0x6,0x5c,0x2b, + 0x6,0x5c,0x26, 0x5,0x45,0x39, 0x7,0x22,0x33, 0xf,0x47,0x57, + 0xf,0x47,0x58, 0xf,0x47,0x59, 0xf,0x47,0x5a, 0x6,0x5c,0x28, + 0x6,0x5c,0x25, 0x6,0x5c,0x29, 0x6,0x5c,0x2d, 0x6,0x5c,0x21, + 0x6,0x5c,0x23, 0x5,0x45,0x3b, 0x6,0x5c,0x2a, 0xf,0x47,0x44, + 0x6,0x62,0x67, 0x7,0x22,0x30, 0x5,0x4c,0x5e, 0x4,0x49,0x47, + 0x7,0x22,0x37, 0x4,0x49,0x48, 0x7,0x22,0x35, 0x7,0x22,0x32, + 0xf,0x4e,0x47, 0xf,0x4e,0x48, 0xf,0x4e,0x49, 0xf,0x4e,0x4a, + 0xf,0x4e,0x4b, 0xf,0x4e,0x4c, 0xf,0x4e,0x4e, 0xf,0x4e,0x4f, + 0x7,0x22,0x38, 0x7,0x22,0x36, 0xf,0x4e,0x4d, 0x5,0x4c,0x61, + 0x5,0x4c,0x5f, 0x7,0x22,0x31, 0x5,0x4c,0x60, 0x7,0x2d,0x35, + 0x7,0x2d,0x37, 0x5,0x54,0x2c, 0x4,0x50,0x22, 0x5,0x54,0x2d, + 0x5,0x54,0x2b, 0x7,0x2d,0x36, 0x7,0x2d,0x33, 0x7,0x2d,0x34, + 0xf,0x54,0x2f, 0xf,0x54,0x30, 0xf,0x54,0x31, 0xf,0x54,0x33, + 0xf,0x54,0x34, 0xf,0x54,0x35, 0xf,0x54,0x36, 0xf,0x54,0x37, + 0x7,0x37,0x59, 0x7,0x37,0x57, 0x5,0x5b,0x38, 0xf,0x59,0x72, + 0xf,0x59,0x73, 0xf,0x59,0x74, 0xf,0x59,0x75, 0x7,0x37,0x58, + 0x7,0x37,0x5a, 0x7,0x22,0x34, 0x5,0x5b,0x37, 0x7,0x46,0x58, + 0x5,0x61,0x4e, 0xf,0x59,0x76, 0xf,0x5e,0x56, 0xf,0x5e,0x57, + 0x7,0x3f,0x42, 0xf,0x62,0x2e, 0x4,0x5f,0x57, 0x7,0x46,0x53, + 0x7,0x46,0x55, 0x4,0x5f,0x56, 0x7,0x46,0x57, 0x7,0x46,0x56, + 0xf,0x62,0x2f, 0x7,0x46,0x54, 0x4,0x63,0x36, 0x7,0x4d,0x53, + 0x7,0x53,0x2c, 0x4,0x66,0x38, 0x7,0x53,0x2d, 0xf,0x67,0x4f, + 0xf,0x67,0x50, 0x7,0x53,0x2e, 0x5,0x73,0x38, 0x4,0x68,0x66, + 0x7,0x57,0x65, 0x5,0x73,0x37, 0x7,0x57,0x66, 0x4,0x6a,0x45, + 0x4,0x6b,0x67, 0xf,0x6b,0x46, 0x7,0x60,0x6c, 0x7,0x64,0x45, + 0x5,0x79,0x25, 0xf,0x6c,0x25, 0x4,0x6d,0x54, 0x5,0x7a,0x27, + 0x4,0x6d,0x71, 0x7,0x63,0x4e, 0x7,0x65,0x34, 0x6,0x21,0x6a, + 0x6,0x2a,0x6a, 0x6,0x2a,0x69, 0xf,0x26,0x56, 0xf,0x26,0x57, + 0x5,0x28,0x6f, 0x6,0x30,0x2e, 0xf,0x2a,0x3d, 0x6,0x30,0x31, + 0x6,0x30,0x2f, 0x4,0x31,0x31, 0x6,0x43,0x67, 0x6,0x3e,0x5e, + 0x6,0x3e,0x5d, 0x4,0x37,0x27, 0x6,0x3e,0x5f, 0x6,0x51,0x7a, + 0x6,0x51,0x78, 0x6,0x51,0x79, 0x6,0x5c,0x30, 0x4,0x44,0x26, + 0xf,0x47,0x5b, 0x6,0x5c,0x31, 0x5,0x45,0x3d, 0xf,0x4e,0x51, + 0x7,0x22,0x3a, 0x7,0x22,0x39, 0x7,0x2d,0x39, 0x5,0x53,0x52, + 0x7,0x2d,0x38, 0x7,0x37,0x5b, 0x7,0x37,0x5c, 0x5,0x61,0x4f, + 0x7,0x46,0x59, 0x7,0x4d,0x54, 0x7,0x53,0x2f, 0x6,0x21,0x6b, + 0xf,0x21,0x39, 0x6,0x24,0x4c, 0x5,0x22,0x4c, 0x6,0x27,0x24, + 0x4,0x23,0x72, 0x6,0x27,0x23, 0x6,0x27,0x22, 0xf,0x23,0x73, + 0x5,0x25,0x67, 0xf,0x26,0x58, 0x6,0x2a,0x6b, 0x6,0x30,0x32, + 0x6,0x30,0x30, 0x6,0x30,0x33, 0x5,0x28,0x70, 0x4,0x2c,0x4b, + 0xf,0x2f,0x21, 0x6,0x36,0x69, 0x6,0x3e,0x61, 0x5,0x31,0x71, + 0x5,0x37,0x63, 0x6,0x3e,0x63, 0x6,0x3e,0x60, 0x6,0x3e,0x62, + 0xf,0x34,0x30, 0x6,0x47,0x71, 0xf,0x3a,0x50, 0x6,0x47,0x73, + 0x6,0x47,0x72, 0x5,0x3e,0x65, 0xf,0x41,0x2f, 0x5,0x45,0x3e, + 0x6,0x5c,0x33, 0x6,0x5c,0x32, 0x5,0x4c,0x62, 0x7,0x22,0x3b, + 0x5,0x54,0x2f, 0x7,0x2d,0x3a, 0xf,0x59,0x77, 0x5,0x61,0x50, + 0x5,0x6f,0x77, 0x4,0x21,0x4a, 0xf,0x21,0x3a, 0x5,0x21,0x65, + 0xf,0x21,0x4d, 0xf,0x21,0x5a, 0x6,0x22,0x6b, 0x6,0x22,0x6a, + 0x5,0x22,0x4d, 0xf,0x22,0x43, 0x5,0x23,0x6c, 0x4,0x23,0x73, + 0x5,0x25,0x68, 0x6,0x27,0x25, 0x5,0x23,0x6b, 0x5,0x23,0x6e, + 0x5,0x23,0x6d, 0x6,0x30,0x34, 0x5,0x25,0x69, 0x6,0x2a,0x6c, + 0x5,0x25,0x6b, 0xf,0x26,0x59, 0x6,0x30,0x35, 0x5,0x25,0x6a, + 0x5,0x28,0x71, 0x6,0x30,0x37, 0x6,0x30,0x38, 0x5,0x28,0x72, + 0x6,0x30,0x39, 0x5,0x2d,0x23, 0x6,0x36,0x6c, 0x6,0x36,0x6a, + 0x5,0x2d,0x24, 0x6,0x36,0x6b, 0x6,0x36,0x6d, 0xf,0x2f,0x22, + 0x6,0x3e,0x66, 0x5,0x31,0x72, 0x4,0x31,0x34, 0x5,0x31,0x74, + 0x6,0x47,0x76, 0x6,0x47,0x74, 0x6,0x47,0x75, 0x4,0x37,0x2a, + 0x6,0x47,0x77, 0xf,0x3a,0x51, 0x6,0x51,0x7b, 0x6,0x51,0x7d, + 0x6,0x51,0x7c, 0x5,0x48,0x26, 0x4,0x42,0x7a, 0x6,0x5c,0x34, + 0x5,0x45,0x40, 0x5,0x45,0x3f, 0x6,0x5c,0x35, 0x5,0x45,0x41, + 0x7,0x2d,0x3d, 0x7,0x22,0x3e, 0x7,0x22,0x3d, 0x7,0x22,0x3c, + 0x7,0x2d,0x3b, 0x5,0x54,0x30, 0x7,0x2d,0x3c, 0x7,0x2d,0x3e, + 0xf,0x54,0x38, 0x7,0x37,0x5d, 0x4,0x66,0x39, 0x4,0x68,0x67, + 0x5,0x79,0x26, 0x6,0x21,0x3e, 0x4,0x21,0x75, 0x4,0x21,0x74, + 0x6,0x22,0x6c, 0x6,0x24,0x4d, 0x4,0x22,0x5e, 0x5,0x22,0x4e, + 0x6,0x24,0x4e, 0x6,0x24,0x50, 0x6,0x24,0x51, 0x6,0x24,0x4f, + 0xf,0x22,0x44, 0x6,0x27,0x29, 0xf,0x23,0x74, 0x6,0x27,0x27, + 0x6,0x27,0x26, 0x6,0x27,0x28, 0x5,0x23,0x6f, 0x4,0x26,0x2c, + 0x4,0x26,0x2b, 0x6,0x2a,0x6d, 0x6,0x2a,0x6e, 0x5,0x25,0x6c, + 0x6,0x2a,0x6f, 0xf,0x26,0x5b, 0x5,0x25,0x6d, 0x4,0x28,0x77, + 0x6,0x30,0x3a, 0x6,0x30,0x3f, 0x4,0x28,0x7a, 0x4,0x28,0x76, + 0x5,0x28,0x75, 0x6,0x30,0x3e, 0x6,0x30,0x3d, 0x6,0x30,0x3c, + 0x6,0x30,0x3b, 0xf,0x2a,0x40, 0xf,0x2a,0x41, 0xf,0x2a,0x42, + 0xf,0x2a,0x43, 0xf,0x2a,0x44, 0xf,0x2a,0x3f, 0x6,0x30,0x40, + 0x5,0x28,0x74, 0x6,0x36,0x72, 0x4,0x2c,0x50, 0x6,0x36,0x6f, + 0x4,0x2c,0x4f, 0x6,0x3e,0x67, 0x6,0x36,0x70, 0x6,0x36,0x6e, + 0xf,0x2f,0x23, 0xf,0x2f,0x24, 0xf,0x2f,0x26, 0xf,0x2f,0x27, + 0xf,0x2f,0x28, 0x5,0x2d,0x26, 0x5,0x2d,0x27, 0x6,0x36,0x71, + 0x6,0x36,0x73, 0x5,0x2d,0x25, 0x6,0x36,0x74, 0x6,0x3e,0x6d, + 0x6,0x3e,0x69, 0x5,0x31,0x78, 0x5,0x31,0x7a, 0x5,0x31,0x77, + 0x5,0x31,0x79, 0x5,0x31,0x76, 0x5,0x31,0x7b, 0x6,0x3e,0x70, + 0x6,0x3e,0x6a, 0xf,0x34,0x31, 0xf,0x34,0x32, 0xf,0x34,0x35, + 0xf,0x34,0x36, 0xf,0x34,0x37, 0xf,0x34,0x38, 0xf,0x34,0x39, + 0xf,0x34,0x3a, 0x6,0x3e,0x68, 0x6,0x3e,0x6c, 0x6,0x3e,0x6f, + 0x6,0x3e,0x6e, 0xf,0x34,0x33, 0x6,0x48,0x23, 0x6,0x48,0x24, + 0x6,0x48,0x22, 0x4,0x37,0x2c, 0x6,0x47,0x7e, 0x6,0x47,0x7a, + 0x5,0x37,0x64, 0x4,0x37,0x2d, 0x5,0x37,0x65, 0x6,0x47,0x79, + 0x6,0x47,0x78, 0x6,0x48,0x25, 0x6,0x48,0x21, 0x6,0x48,0x26, + 0x6,0x47,0x7c, 0xf,0x3a,0x52, 0xf,0x3a,0x53, 0xf,0x3a,0x54, + 0x6,0x47,0x7d, 0x4,0x37,0x2e, 0x6,0x52,0x23, 0x5,0x3e,0x69, + 0x5,0x3e,0x67, 0x6,0x52,0x26, 0x5,0x3e,0x68, 0x6,0x52,0x25, + 0x6,0x52,0x29, 0x6,0x52,0x21, 0x6,0x51,0x7e, 0x6,0x52,0x27, + 0x6,0x52,0x24, 0xf,0x41,0x30, 0xf,0x41,0x31, 0xf,0x41,0x32, + 0x6,0x52,0x22, 0x6,0x52,0x28, 0x5,0x3e,0x66, 0x4,0x42,0x7c, + 0x4,0x42,0x7e, 0x4,0x42,0x7b, 0x6,0x5c,0x38, 0x6,0x5c,0x36, + 0x6,0x5c,0x37, 0xf,0x47,0x5d, 0x6,0x5c,0x39, 0x5,0x45,0x42, + 0x7,0x22,0x40, 0x5,0x4c,0x66, 0xf,0x4e,0x52, 0xf,0x4e,0x53, + 0xf,0x4e,0x54, 0xf,0x4e,0x55, 0xf,0x4e,0x56, 0x5,0x4c,0x65, + 0x5,0x4c,0x64, 0x7,0x2d,0x40, 0x7,0x2d,0x3f, 0x7,0x22,0x3f, + 0xf,0x54,0x39, 0x7,0x30,0x2d, 0x7,0x37,0x5e, 0x7,0x3f,0x43, + 0x4,0x5f,0x58, 0x5,0x67,0x62, 0xf,0x65,0x27, 0xf,0x65,0x28, + 0x5,0x6b,0x7d, 0xf,0x67,0x51, 0x5,0x73,0x3a, 0x5,0x21,0x30, + 0x6,0x21,0x6c, 0x6,0x22,0x6d, 0x6,0x24,0x54, 0x6,0x24,0x53, + 0x6,0x24,0x52, 0x5,0x22,0x4f, 0x4,0x23,0x75, 0x6,0x27,0x2a, + 0x4,0x26,0x2d, 0x6,0x2a,0x71, 0x6,0x2a,0x70, 0x5,0x28,0x77, + 0x6,0x30,0x42, 0x6,0x30,0x43, 0x5,0x28,0x76, 0x6,0x30,0x44, + 0x6,0x36,0x77, 0x6,0x36,0x78, 0x6,0x36,0x76, 0x6,0x35,0x28, + 0x6,0x36,0x75, 0x6,0x3e,0x71, 0x6,0x3e,0x72, 0x6,0x48,0x28, + 0x5,0x37,0x67, 0x6,0x48,0x29, 0x6,0x48,0x27, 0xf,0x3a,0x55, + 0x6,0x52,0x2a, 0x6,0x5c,0x3a, 0x7,0x22,0x41, 0x7,0x2d,0x41, + 0x7,0x22,0x42, 0x7,0x22,0x43, 0x7,0x53,0x30, 0x7,0x5e,0x5d, + 0x5,0x21,0x45, 0x5,0x21,0x46, 0x6,0x22,0x70, 0x6,0x22,0x6e, + 0x6,0x22,0x72, 0x6,0x22,0x71, 0xf,0x21,0x5c, 0xf,0x21,0x5d, + 0xf,0x21,0x5e, 0x6,0x22,0x73, 0x5,0x21,0x66, 0x6,0x22,0x6f, + 0x6,0x24,0x57, 0x6,0x24,0x55, 0x6,0x24,0x59, 0x3,0x23,0x59, + 0xf,0x22,0x45, 0xf,0x22,0x46, 0x6,0x24,0x56, 0x5,0x22,0x53, + 0x6,0x24,0x5a, 0x6,0x24,0x58, 0x5,0x22,0x52, 0x6,0x27,0x2e, + 0x5,0x23,0x71, 0x5,0x23,0x78, 0x5,0x23,0x79, 0x6,0x27,0x30, + 0x5,0x23,0x76, 0x5,0x23,0x75, 0x5,0x23,0x77, 0x5,0x23,0x72, + 0x5,0x23,0x73, 0x6,0x27,0x31, 0x6,0x27,0x2c, 0x6,0x27,0x32, + 0xf,0x23,0x76, 0xf,0x23,0x77, 0xf,0x23,0x79, 0xf,0x23,0x7a, + 0xf,0x23,0x7b, 0xf,0x23,0x7e, 0xf,0x24,0x21, 0x6,0x27,0x2d, + 0x6,0x27,0x2f, 0x4,0x23,0x7d, 0xf,0x23,0x7d, 0x6,0x27,0x34, + 0x6,0x27,0x33, 0x4,0x23,0x7c, 0x6,0x27,0x2b, 0x5,0x23,0x7a, + 0x4,0x26,0x30, 0x5,0x25,0x75, 0x6,0x2a,0x75, 0x4,0x26,0x33, + 0x6,0x2a,0x72, 0x5,0x25,0x73, 0x5,0x25,0x74, 0x6,0x2a,0x7a, + 0x5,0x25,0x71, 0x6,0x2a,0x77, 0x6,0x2a,0x7c, 0x5,0x25,0x6f, + 0x6,0x2a,0x79, 0x5,0x25,0x72, 0x5,0x25,0x70, 0x6,0x2a,0x74, + 0x6,0x27,0x35, 0xf,0x26,0x5c, 0xf,0x26,0x5d, 0xf,0x26,0x5e, + 0xf,0x26,0x5f, 0xf,0x26,0x60, 0xf,0x26,0x61, 0xf,0x26,0x63, + 0xf,0x26,0x64, 0xf,0x26,0x65, 0xf,0x26,0x66, 0xf,0x26,0x67, + 0xf,0x26,0x68, 0x6,0x2a,0x78, 0x6,0x2d,0x2b, 0x6,0x2a,0x73, + 0x5,0x25,0x76, 0x6,0x30,0x50, 0x6,0x30,0x4a, 0x5,0x28,0x78, + 0x6,0x30,0x4b, 0x5,0x28,0x79, 0x4,0x28,0x7e, 0x5,0x28,0x7a, + 0x6,0x30,0x46, 0x6,0x30,0x49, 0x6,0x30,0x52, 0xf,0x2a,0x45, + 0xf,0x2a,0x47, 0xf,0x2a,0x48, 0xf,0x2a,0x4b, 0xf,0x2a,0x4c, + 0xf,0x2a,0x4d, 0xf,0x2a,0x4e, 0xf,0x2a,0x4f, 0xf,0x2a,0x50, + 0xf,0x2a,0x51, 0x6,0x30,0x4d, 0x6,0x30,0x45, 0x6,0x30,0x47, + 0x6,0x30,0x51, 0x6,0x30,0x4f, 0x6,0x30,0x4c, 0xf,0x2a,0x4a, + 0xf,0x2a,0x46, 0x6,0x30,0x48, 0x5,0x28,0x7b, 0x4,0x28,0x7c, + 0x5,0x2d,0x2c, 0x5,0x2d,0x29, 0x4,0x2c,0x52, 0x4,0x2c,0x59, + 0x5,0x2d,0x2a, 0x6,0x37,0x21, 0x4,0x2c,0x58, 0x5,0x2d,0x34, + 0x5,0x2d,0x30, 0x5,0x2d,0x2b, 0x6,0x36,0x7d, 0x5,0x2d,0x31, + 0x5,0x2d,0x2d, 0x5,0x2d,0x2f, 0x6,0x37,0x24, 0x6,0x36,0x7e, + 0x4,0x2c,0x62, 0x6,0x36,0x79, 0x4,0x2c,0x63, 0x4,0x2c,0x56, + 0x6,0x37,0x25, 0x6,0x37,0x22, 0x6,0x37,0x23, 0x6,0x36,0x7b, + 0xf,0x2f,0x29, 0xf,0x2f,0x2a, 0xf,0x2f,0x2b, 0xf,0x2f,0x2c, + 0xf,0x2f,0x2d, 0xf,0x2f,0x2e, 0xf,0x2f,0x2f, 0xf,0x2f,0x31, + 0xf,0x2f,0x33, 0x5,0x2d,0x28, 0xf,0x2f,0x30, 0xf,0x2f,0x32, + 0x5,0x2d,0x33, 0x4,0x2c,0x5d, 0x5,0x2d,0x35, 0x5,0x2d,0x36, + 0x5,0x2d,0x32, 0x6,0x3b,0x4e, 0x4,0x31,0x3a, 0x6,0x3f,0x2b, + 0x6,0x3f,0x24, 0x6,0x3f,0x26, 0x4,0x31,0x3c, 0x4,0x31,0x3e, + 0x5,0x31,0x7e, 0x6,0x3e,0x79, 0x6,0x3f,0x22, 0x6,0x3e,0x7b, + 0x5,0x32,0x28, 0x4,0x31,0x38, 0x6,0x3f,0x27, 0x6,0x3f,0x2c, + 0x6,0x3f,0x29, 0x6,0x3e,0x74, 0x6,0x3f,0x2a, 0x4,0x31,0x40, + 0x4,0x31,0x3b, 0x5,0x31,0x7c, 0x5,0x32,0x26, 0x6,0x3e,0x73, + 0x4,0x31,0x36, 0x5,0x31,0x7d, 0x5,0x32,0x24, 0x6,0x3f,0x28, + 0x6,0x3f,0x23, 0xf,0x34,0x3b, 0xf,0x34,0x3c, 0xf,0x34,0x3d, + 0xf,0x34,0x3e, 0xf,0x34,0x40, 0xf,0x34,0x41, 0xf,0x34,0x42, + 0xf,0x34,0x43, 0xf,0x34,0x44, 0xf,0x34,0x46, 0xf,0x34,0x47, + 0xf,0x34,0x48, 0x6,0x3e,0x77, 0x6,0x32,0x2a, 0x6,0x3e,0x7d, + 0x6,0x3e,0x7c, 0x6,0x3e,0x7e, 0x6,0x3f,0x21, 0x6,0x3f,0x25, + 0x4,0x31,0x3f, 0x5,0x32,0x29, 0x5,0x32,0x21, 0x5,0x32,0x27, + 0x5,0x32,0x23, 0x5,0x32,0x22, 0x5,0x32,0x25, 0x5,0x32,0x2a, + 0x5,0x37,0x69, 0x6,0x48,0x33, 0x5,0x37,0x6e, 0x6,0x48,0x2a, + 0x6,0x48,0x34, 0x5,0x37,0x6f, 0x5,0x37,0x6c, 0x5,0x37,0x6b, + 0x4,0x37,0x30, 0x5,0x37,0x70, 0x5,0x37,0x6a, 0x5,0x37,0x71, + 0x5,0x37,0x72, 0x5,0x37,0x74, 0x6,0x48,0x2e, 0x6,0x3e,0x7a, + 0x4,0x37,0x31, 0x6,0x48,0x2f, 0x5,0x37,0x6d, 0x4,0x37,0x33, + 0x5,0x37,0x68, 0x5,0x37,0x73, 0xf,0x3a,0x56, 0xf,0x3a,0x58, + 0xf,0x3a,0x59, 0xf,0x3a,0x5a, 0xf,0x3a,0x5b, 0x6,0x48,0x2d, + 0x5,0x37,0x75, 0x6,0x48,0x32, 0x6,0x48,0x2c, 0x6,0x48,0x31, + 0x6,0x48,0x30, 0xf,0x3a,0x5c, 0x5,0x3e,0x70, 0x6,0x52,0x2d, + 0x5,0x3e,0x6c, 0x4,0x3c,0x7a, 0x5,0x3e,0x71, 0x6,0x52,0x2e, + 0x6,0x5c,0x3b, 0x4,0x3c,0x7d, 0x6,0x52,0x35, 0x5,0x3e,0x6a, + 0x5,0x3e,0x73, 0x6,0x52,0x2b, 0x5,0x3e,0x6f, 0x6,0x52,0x2c, + 0x6,0x52,0x39, 0x6,0x52,0x30, 0x6,0x52,0x38, 0x5,0x3e,0x6e, + 0x6,0x52,0x36, 0x6,0x5c,0x40, 0xf,0x41,0x37, 0x5,0x3e,0x72, + 0xf,0x41,0x33, 0xf,0x41,0x34, 0xf,0x41,0x36, 0xf,0x41,0x38, + 0xf,0x41,0x39, 0x6,0x52,0x3a, 0x6,0x52,0x32, 0x6,0x52,0x37, + 0x5,0x3e,0x6b, 0xf,0x41,0x35, 0x6,0x52,0x2f, 0x5,0x45,0x43, + 0x5,0x45,0x4b, 0x5,0x45,0x49, 0x6,0x5c,0x41, 0x6,0x5c,0x3c, + 0x4,0x43,0x2b, 0x4,0x43,0x26, 0x4,0x43,0x25, 0x5,0x45,0x44, + 0x5,0x45,0x48, 0x5,0x45,0x47, 0x5,0x45,0x4a, 0x5,0x45,0x4e, + 0x6,0x5c,0x3e, 0x6,0x5c,0x47, 0x5,0x45,0x4d, 0x5,0x45,0x45, + 0x5,0x45,0x46, 0x6,0x5c,0x42, 0x4,0x43,0x29, 0x6,0x5c,0x46, + 0x4,0x43,0x27, 0x4,0x43,0x23, 0x5,0x45,0x4c, 0x6,0x5c,0x45, + 0x6,0x5c,0x43, 0x6,0x5c,0x3f, 0x4,0x43,0x28, 0xf,0x47,0x5e, + 0xf,0x47,0x5f, 0xf,0x47,0x60, 0xf,0x47,0x61, 0x6,0x52,0x31, + 0x4,0x49,0x4e, 0x7,0x22,0x49, 0x4,0x49,0x52, 0x7,0x22,0x45, + 0x5,0x4c,0x69, 0x7,0x22,0x50, 0x7,0x22,0x4a, 0x5,0x4c,0x6e, + 0x5,0x4c,0x67, 0x7,0x22,0x47, 0x7,0x22,0x51, 0x5,0x4c,0x6f, + 0x7,0x22,0x4f, 0x7,0x22,0x4c, 0x7,0x22,0x4d, 0x5,0x4c,0x70, + 0x5,0x4c,0x6a, 0x5,0x4c,0x6d, 0x7,0x2d,0x44, 0x7,0x22,0x46, + 0xf,0x4e,0x57, 0xf,0x4e,0x58, 0xf,0x4e,0x59, 0xf,0x4e,0x5b, + 0xf,0x4e,0x5c, 0x7,0x22,0x44, 0x7,0x22,0x4b, 0x7,0x22,0x4e, + 0x5,0x4c,0x6b, 0x7,0x22,0x48, 0x4,0x49,0x51, 0x5,0x54,0x33, + 0x4,0x50,0x23, 0x7,0x2d,0x4a, 0x4,0x50,0x24, 0x5,0x54,0x35, + 0x7,0x2d,0x42, 0x5,0x54,0x38, 0x5,0x54,0x34, 0x5,0x54,0x31, + 0x7,0x2d,0x47, 0x7,0x2d,0x43, 0x5,0x5b,0x39, 0x5,0x54,0x32, + 0xf,0x54,0x3a, 0xf,0x54,0x3b, 0xf,0x54,0x3c, 0x7,0x2d,0x45, + 0x7,0x2d,0x49, 0x7,0x2d,0x48, 0x7,0x2d,0x4b, 0x7,0x2d,0x46, + 0x7,0x2d,0x4d, 0x5,0x54,0x37, 0x4,0x56,0x29, 0x5,0x5b,0x3b, + 0x5,0x61,0x55, 0x7,0x37,0x60, 0x5,0x5b,0x3f, 0x7,0x37,0x66, + 0x5,0x5b,0x3a, 0x7,0x37,0x62, 0x7,0x37,0x64, 0x7,0x37,0x61, + 0x5,0x5b,0x3d, 0x7,0x37,0x5f, 0x7,0x37,0x65, 0xf,0x59,0x79, + 0xf,0x59,0x7a, 0xf,0x59,0x7b, 0x4,0x56,0x2a, 0x7,0x37,0x63, + 0x7,0x37,0x67, 0x7,0x39,0x27, 0x5,0x5b,0x40, 0x7,0x46,0x5a, + 0x5,0x61,0x54, 0x7,0x3f,0x47, 0x4,0x5a,0x7e, 0x5,0x61,0x51, + 0x5,0x61,0x52, 0x7,0x3f,0x49, 0xf,0x5e,0x59, 0x5,0x61,0x53, + 0x7,0x3f,0x46, 0xf,0x5e,0x58, 0x7,0x3f,0x45, 0x7,0x3f,0x48, + 0x5,0x61,0x56, 0x5,0x61,0x57, 0x7,0x46,0x5c, 0x4,0x5f,0x5b, + 0x7,0x46,0x5e, 0x5,0x67,0x65, 0x4,0x5f,0x59, 0x7,0x46,0x5d, + 0x7,0x46,0x5f, 0x7,0x46,0x60, 0xf,0x62,0x30, 0xf,0x62,0x31, + 0xf,0x62,0x32, 0x7,0x46,0x61, 0x7,0x46,0x62, 0x7,0x46,0x5b, + 0x4,0x63,0x38, 0x7,0x4d,0x55, 0x4,0x63,0x37, 0x5,0x6b,0x7e, + 0x7,0x4d,0x57, 0xf,0x65,0x29, 0x7,0x4d,0x56, 0x5,0x5b,0x3e, + 0x5,0x6f,0x78, 0x5,0x6f,0x7a, 0x5,0x6f,0x79, 0x7,0x53,0x32, + 0x7,0x53,0x31, 0x5,0x73,0x3b, 0x4,0x68,0x69, 0x4,0x68,0x6a, + 0x7,0x57,0x67, 0x7,0x57,0x69, 0x7,0x57,0x68, 0x7,0x57,0x6a, + 0x5,0x73,0x3c, 0x7,0x5e,0x5e, 0x4,0x6b,0x6a, 0x4,0x6b,0x69, + 0x7,0x5e,0x60, 0x5,0x77,0x58, 0x7,0x5e,0x5f, 0x5,0x79,0x27, + 0xf,0x6c,0x26, 0x5,0x7a,0x28, 0x5,0x7a,0x66, 0x5,0x7b,0x3c, + 0x7,0x63,0x4f, 0x5,0x7c,0x34, 0x6,0x21,0x6d, 0x4,0x21,0x25, + 0x4,0x22,0x62, 0x5,0x22,0x54, 0x6,0x24,0x5b, 0x6,0x24,0x5c, + 0x5,0x22,0x55, 0x6,0x23,0x7e, 0x4,0x23,0x7e, 0x5,0x23,0x7b, + 0x6,0x2a,0x7d, 0xf,0x26,0x6a, 0xf,0x26,0x69, 0x6,0x30,0x55, + 0x6,0x30,0x54, 0x6,0x30,0x56, 0x6,0x30,0x53, 0x6,0x37,0x26, + 0x5,0x32,0x2b, 0x4,0x31,0x41, 0x6,0x3f,0x2d, 0x5,0x37,0x76, + 0x6,0x5c,0x48, 0x7,0x22,0x52, 0x5,0x54,0x39, 0xf,0x4e,0x5d, + 0xf,0x54,0x3d, 0x7,0x37,0x68, 0x7,0x3f,0x4a, 0x7,0x46,0x63, + 0x5,0x67,0x66, 0x7,0x5e,0x61, 0x7,0x65,0x35, 0x6,0x21,0x6f, + 0x6,0x21,0x71, 0x6,0x21,0x70, 0xf,0x21,0x3b, 0x5,0x21,0x68, + 0x5,0x21,0x67, 0x5,0x23,0x7c, 0x6,0x27,0x37, 0xf,0x26,0x6b, + 0x6,0x30,0x57, 0x6,0x37,0x28, 0xf,0x2f,0x34, 0x6,0x3f,0x2e, + 0xf,0x3a,0x5e, 0x7,0x22,0x53, 0x7,0x46,0x64, 0x6,0x22,0x74, + 0x5,0x22,0x56, 0x6,0x2a,0x7e, 0x6,0x30,0x59, 0x6,0x30,0x58, + 0x4,0x2c,0x65, 0x6,0x3f,0x2f, 0x5,0x35,0x5f, 0x5,0x32,0x2d, + 0x6,0x3f,0x30, 0x5,0x32,0x2c, 0x6,0x48,0x36, 0xf,0x3a,0x5f, + 0xf,0x3a,0x60, 0xf,0x3a,0x61, 0x7,0x22,0x54, 0x7,0x3f,0x4b, + 0x4,0x21,0x77, 0x6,0x22,0x75, 0x6,0x22,0x76, 0x5,0x22,0x59, + 0x5,0x22,0x58, 0x4,0x22,0x64, 0x5,0x22,0x5b, 0x6,0x24,0x61, + 0x6,0x24,0x60, 0x6,0x24,0x5e, 0xf,0x22,0x48, 0xf,0x22,0x4a, + 0x5,0x22,0x57, 0x6,0x24,0x5f, 0x5,0x22,0x5a, 0x6,0x27,0x41, + 0x6,0x27,0x3b, 0x5,0x24,0x22, 0x6,0x27,0x38, 0x5,0x23,0x7e, + 0x5,0x23,0x7d, 0x5,0x24,0x23, 0x6,0x27,0x40, 0x5,0x24,0x24, + 0x6,0x27,0x3c, 0x6,0x27,0x3f, 0x5,0x24,0x21, 0xf,0x24,0x24, + 0x6,0x27,0x39, 0x6,0x27,0x3a, 0x6,0x27,0x3d, 0x5,0x24,0x25, + 0x6,0x27,0x3e, 0x5,0x25,0x7b, 0x4,0x26,0x35, 0x5,0x25,0x79, + 0x5,0x25,0x7d, 0x5,0x25,0x7a, 0x5,0x25,0x7c, 0x5,0x26,0x21, + 0x6,0x2b,0x23, 0x5,0x25,0x7e, 0x5,0x26,0x22, 0x6,0x2b,0x22, + 0xf,0x26,0x6c, 0x5,0x26,0x23, 0x6,0x2b,0x21, 0x5,0x25,0x77, + 0x5,0x25,0x78, 0x5,0x28,0x7e, 0x6,0x30,0x62, 0x5,0x28,0x7d, + 0x5,0x29,0x22, 0x5,0x28,0x7c, 0x5,0x29,0x23, 0x6,0x30,0x5f, + 0x5,0x29,0x25, 0x5,0x29,0x24, 0x6,0x30,0x5b, 0x5,0x29,0x21, + 0x6,0x30,0x5a, 0x6,0x30,0x65, 0x6,0x30,0x67, 0xf,0x2a,0x53, + 0xf,0x2a,0x54, 0xf,0x2a,0x55, 0x4,0x29,0x26, 0x6,0x30,0x61, + 0x6,0x30,0x60, 0x6,0x30,0x5c, 0x6,0x30,0x5d, 0x6,0x30,0x66, + 0x6,0x30,0x64, 0x6,0x30,0x5e, 0x5,0x2d,0x38, 0x6,0x37,0x32, + 0x5,0x2d,0x37, 0x6,0x37,0x2e, 0x5,0x2d,0x39, 0x5,0x32,0x2e, + 0x6,0x37,0x2a, 0x4,0x2c,0x69, 0x4,0x2c,0x6a, 0x6,0x37,0x2f, + 0x5,0x2d,0x3a, 0x6,0x37,0x2d, 0x6,0x37,0x31, 0x6,0x37,0x30, + 0x4,0x2c,0x67, 0x6,0x37,0x33, 0x6,0x37,0x34, 0xf,0x2f,0x36, + 0xf,0x2f,0x35, 0x6,0x37,0x29, 0x6,0x37,0x2b, 0x6,0x3f,0x35, + 0x5,0x32,0x35, 0x4,0x31,0x46, 0x4,0x31,0x43, 0x4,0x31,0x44, + 0x5,0x32,0x33, 0x5,0x32,0x2f, 0x6,0x3f,0x3a, 0x5,0x32,0x30, + 0x5,0x32,0x34, 0x6,0x3f,0x3c, 0x5,0x32,0x31, 0x5,0x32,0x36, + 0x6,0x3f,0x36, 0x6,0x3f,0x3b, 0x6,0x3f,0x32, 0x5,0x32,0x32, + 0x6,0x3f,0x34, 0xf,0x34,0x49, 0xf,0x34,0x4a, 0xf,0x34,0x4b, + 0xf,0x34,0x4c, 0x6,0x3f,0x39, 0x6,0x3f,0x31, 0x6,0x3f,0x3d, + 0x6,0x3f,0x37, 0x6,0x3f,0x33, 0x6,0x48,0x39, 0x4,0x37,0x3e, + 0x6,0x48,0x3e, 0x5,0x37,0x79, 0x5,0x37,0x7a, 0x4,0x37,0x38, + 0x5,0x37,0x78, 0x6,0x48,0x3a, 0x4,0x37,0x37, 0x5,0x38,0x21, + 0x5,0x38,0x22, 0x6,0x3f,0x38, 0x6,0x48,0x40, 0x6,0x48,0x3d, + 0x6,0x48,0x3b, 0x5,0x37,0x7d, 0x6,0x48,0x38, 0xf,0x3a,0x62, + 0xf,0x3a,0x63, 0x6,0x48,0x3f, 0x5,0x37,0x7b, 0x5,0x37,0x77, + 0x6,0x48,0x41, 0x5,0x37,0x7e, 0xf,0x40,0x2b, 0x5,0x3e,0x78, + 0x4,0x3d,0x22, 0x5,0x45,0x52, 0x4,0x3d,0x25, 0x5,0x3e,0x75, + 0x5,0x3e,0x74, 0x4,0x3d,0x24, 0x5,0x3e,0x77, 0x5,0x3e,0x7a, + 0x6,0x52,0x3e, 0x6,0x52,0x3b, 0x6,0x52,0x3d, 0x6,0x5c,0x4b, + 0x5,0x3e,0x7b, 0x6,0x52,0x3c, 0x5,0x3e,0x76, 0x5,0x3e,0x79, + 0x6,0x5c,0x4c, 0x6,0x5c,0x4d, 0x5,0x45,0x58, 0x4,0x43,0x34, + 0x5,0x45,0x4f, 0x5,0x45,0x55, 0x6,0x5c,0x4a, 0x5,0x45,0x54, + 0x5,0x45,0x57, 0xf,0x47,0x62, 0x5,0x45,0x59, 0x5,0x45,0x50, + 0x5,0x45,0x56, 0x5,0x45,0x51, 0x7,0x22,0x57, 0x7,0x22,0x59, + 0x5,0x4c,0x74, 0x5,0x4c,0x73, 0x5,0x4c,0x75, 0x4,0x49,0x57, + 0x5,0x4c,0x76, 0x5,0x4c,0x78, 0x4,0x49,0x56, 0x7,0x22,0x56, + 0x7,0x22,0x55, 0x7,0x22,0x58, 0x5,0x4c,0x77, 0x5,0x4c,0x79, + 0x5,0x4c,0x72, 0x7,0x2d,0x50, 0x5,0x54,0x3e, 0x7,0x2d,0x52, + 0x7,0x2d,0x58, 0x5,0x54,0x3d, 0x4,0x50,0x28, 0x7,0x2d,0x57, + 0x7,0x2d,0x56, 0x5,0x54,0x3b, 0x7,0x2d,0x51, 0x5,0x54,0x3c, + 0x7,0x2d,0x54, 0x5,0x54,0x3f, 0x7,0x2d,0x4f, 0x4,0x50,0x2a, + 0x5,0x5b,0x41, 0x5,0x5b,0x42, 0x4,0x56,0x2c, 0x7,0x37,0x6b, + 0xf,0x59,0x7c, 0x7,0x37,0x69, 0x7,0x37,0x6a, 0x5,0x61,0x5a, + 0x5,0x61,0x59, 0x5,0x61,0x58, 0x7,0x46,0x66, 0x4,0x5f,0x5d, + 0x5,0x67,0x67, 0x4,0x5f,0x5c, 0x7,0x46,0x65, 0x7,0x46,0x67, + 0x5,0x67,0x68, 0xf,0x62,0x33, 0x7,0x4d,0x58, 0x5,0x6c,0x21, + 0x7,0x53,0x33, 0x7,0x57,0x6c, 0x5,0x6f,0x7b, 0x5,0x73,0x3d, + 0x7,0x57,0x6b, 0x7,0x5e,0x62, 0x7,0x5e,0x63, 0x5,0x77,0x59, + 0x7,0x63,0x50, 0x7,0x63,0x75, 0x4,0x21,0x78, 0x6,0x27,0x42, + 0x5,0x24,0x26, 0x4,0x24,0x26, 0x6,0x2b,0x24, 0xf,0x26,0x6d, + 0xf,0x26,0x6e, 0x6,0x30,0x69, 0x6,0x30,0x68, 0xf,0x2a,0x56, + 0x6,0x37,0x35, 0x5,0x32,0x37, 0x6,0x48,0x42, 0x5,0x38,0x23, + 0x6,0x52,0x3f, 0x5,0x45,0x5a, 0xf,0x47,0x64, 0x7,0x4d,0x59, + 0xf,0x6a,0x4e, 0x6,0x21,0x72, 0x6,0x21,0x73, 0x6,0x22,0x78, + 0x5,0x21,0x69, 0x6,0x22,0x77, 0xf,0x21,0x62, 0x4,0x22,0x67, + 0x4,0x24,0x27, 0x5,0x24,0x27, 0xf,0x24,0x26, 0x6,0x29,0x5e, + 0x6,0x2b,0x25, 0x5,0x26,0x24, 0x5,0x26,0x25, 0x6,0x30,0x6a, + 0x6,0x30,0x41, 0x4,0x2f,0x27, 0x6,0x37,0x36, 0x4,0x31,0x4a, + 0x6,0x48,0x43, 0x5,0x3e,0x7c, 0x5,0x45,0x5b, 0x7,0x22,0x5b, + 0xf,0x47,0x65, 0x6,0x5c,0x4e, 0xf,0x4e,0x5f, 0x7,0x22,0x5c, + 0x7,0x22,0x5d, 0x4,0x56,0x26, 0x7,0x57,0x6d, 0x4,0x22,0x68, + 0x5,0x22,0x5e, 0x6,0x24,0x64, 0x5,0x22,0x5d, 0x6,0x24,0x63, + 0x6,0x24,0x62, 0x6,0x24,0x66, 0x4,0x22,0x69, 0x6,0x24,0x65, + 0x6,0x27,0x45, 0x5,0x24,0x2a, 0x5,0x24,0x2c, 0x5,0x24,0x2b, + 0x5,0x24,0x28, 0x5,0x24,0x29, 0x6,0x27,0x44, 0x6,0x27,0x48, + 0x6,0x2b,0x28, 0x6,0x27,0x43, 0x6,0x27,0x46, 0x5,0x24,0x2d, + 0x5,0x26,0x2c, 0x5,0x26,0x28, 0x5,0x26,0x27, 0x5,0x26,0x2b, + 0x5,0x26,0x2a, 0x4,0x26,0x39, 0x6,0x2b,0x26, 0x6,0x2b,0x29, + 0x6,0x2b,0x27, 0x4,0x26,0x3e, 0x6,0x2b,0x2a, 0xf,0x26,0x70, + 0xf,0x26,0x71, 0xf,0x26,0x72, 0xf,0x26,0x73, 0xf,0x26,0x74, + 0x5,0x26,0x29, 0x5,0x26,0x2d, 0x6,0x2b,0x2b, 0x5,0x29,0x28, + 0x5,0x29,0x2a, 0x4,0x29,0x27, 0x6,0x30,0x6c, 0x5,0x29,0x29, + 0x6,0x30,0x6d, 0xf,0x2a,0x57, 0xf,0x2a,0x59, 0xf,0x2a,0x58, + 0xf,0x2a,0x5a, 0xf,0x2a,0x5b, 0xf,0x2a,0x5c, 0x6,0x30,0x6b, + 0x5,0x2d,0x3d, 0x5,0x2d,0x40, 0x5,0x2d,0x3e, 0x5,0x2d,0x41, + 0x5,0x2d,0x3b, 0x6,0x37,0x3a, 0x6,0x37,0x3b, 0x4,0x2c,0x6e, + 0x5,0x2d,0x42, 0x5,0x2d,0x3f, 0x6,0x37,0x3c, 0x5,0x2d,0x3c, + 0x6,0x37,0x39, 0xf,0x2f,0x37, 0x6,0x37,0x37, 0x6,0x37,0x38, + 0x5,0x2c,0x7b, 0x5,0x32,0x44, 0x5,0x32,0x3b, 0x5,0x32,0x39, + 0x4,0x31,0x4d, 0x6,0x3f,0x43, 0x5,0x32,0x42, 0x6,0x3f,0x48, + 0x6,0x3f,0x3e, 0x5,0x32,0x3d, 0x5,0x32,0x3c, 0x5,0x32,0x3f, + 0x5,0x32,0x3e, 0x6,0x3f,0x3f, 0x6,0x3f,0x40, 0x5,0x32,0x41, + 0x5,0x32,0x38, 0x4,0x31,0x50, 0x6,0x3f,0x44, 0x5,0x32,0x43, + 0x5,0x38,0x28, 0x6,0x3f,0x41, 0xf,0x34,0x4d, 0xf,0x34,0x4e, + 0xf,0x34,0x4f, 0xf,0x34,0x50, 0xf,0x34,0x51, 0xf,0x34,0x52, + 0xf,0x34,0x53, 0x6,0x3f,0x47, 0x6,0x46,0x3d, 0x5,0x32,0x3a, + 0x6,0x3f,0x42, 0x5,0x32,0x40, 0x6,0x48,0x4a, 0x4,0x31,0x4b, + 0x5,0x38,0x2b, 0x5,0x38,0x2c, 0x5,0x38,0x2d, 0x6,0x48,0x4b, + 0x6,0x48,0x4e, 0x5,0x38,0x27, 0x6,0x48,0x4d, 0x4,0x37,0x42, + 0x5,0x38,0x2a, 0x5,0x38,0x26, 0x6,0x48,0x49, 0x4,0x37,0x43, + 0x5,0x38,0x25, 0x6,0x52,0x44, 0x6,0x48,0x46, 0x6,0x48,0x47, + 0x5,0x38,0x24, 0xf,0x3a,0x65, 0xf,0x3a,0x67, 0xf,0x3a,0x68, + 0xf,0x3a,0x69, 0xf,0x3a,0x6a, 0x6,0x48,0x48, 0x6,0x48,0x4c, + 0xf,0x3a,0x66, 0x4,0x3d,0x2b, 0x5,0x3f,0x25, 0x4,0x3d,0x2c, + 0x6,0x52,0x41, 0x6,0x52,0x42, 0x5,0x3f,0x22, 0x5,0x3f,0x23, + 0x6,0x52,0x47, 0x5,0x3e,0x7d, 0x6,0x52,0x45, 0xf,0x41,0x3a, + 0xf,0x41,0x3b, 0xf,0x41,0x3c, 0x6,0x52,0x43, 0x6,0x52,0x48, + 0x5,0x3f,0x24, 0x5,0x3e,0x7e, 0x6,0x52,0x46, 0x4,0x43,0x38, + 0x5,0x45,0x5c, 0x4,0x43,0x37, 0x5,0x45,0x5e, 0x6,0x5c,0x50, + 0x5,0x45,0x60, 0x5,0x45,0x5f, 0x6,0x5c,0x4f, 0xf,0x47,0x67, + 0xf,0x47,0x68, 0xf,0x47,0x69, 0xf,0x47,0x6a, 0xf,0x47,0x6b, + 0xf,0x47,0x6c, 0xf,0x47,0x6d, 0xf,0x47,0x6e, 0xf,0x47,0x6f, + 0x6,0x5c,0x51, 0x6,0x60,0x31, 0xf,0x4a,0x54, 0x7,0x22,0x5e, + 0x4,0x49,0x5a, 0x4,0x37,0x3f, 0x4,0x49,0x58, 0x5,0x4c,0x7a, + 0x4,0x49,0x59, 0x7,0x2d,0x59, 0x7,0x22,0x62, 0x5,0x4c,0x7c, + 0x5,0x4c,0x7e, 0xf,0x4e,0x60, 0xf,0x4e,0x62, 0xf,0x4e,0x63, + 0x7,0x22,0x5f, 0x7,0x22,0x61, 0x7,0x22,0x63, 0x7,0x22,0x60, + 0x5,0x4c,0x7b, 0x5,0x54,0x41, 0x5,0x4c,0x7d, 0x5,0x54,0x43, + 0x5,0x54,0x40, 0x4,0x50,0x2d, 0x5,0x54,0x44, 0xf,0x54,0x3f, + 0xf,0x54,0x40, 0xf,0x54,0x41, 0xf,0x54,0x42, 0x7,0x37,0x6e, + 0x5,0x5b,0x44, 0x7,0x37,0x6c, 0x7,0x37,0x6d, 0xf,0x59,0x7e, + 0xf,0x5a,0x21, 0xf,0x5a,0x22, 0xf,0x5a,0x23, 0x5,0x5b,0x43, + 0x7,0x37,0x6f, 0x5,0x5b,0x45, 0x7,0x3f,0x51, 0x7,0x3f,0x4e, + 0x5,0x61,0x5b, 0xf,0x5e,0x5a, 0xf,0x5e,0x5c, 0x7,0x3f,0x4d, + 0x7,0x3f,0x4f, 0x7,0x3f,0x4c, 0xf,0x5e,0x5b, 0x7,0x3f,0x50, + 0x7,0x46,0x68, 0x7,0x46,0x69, 0x5,0x61,0x5c, 0x5,0x67,0x69, + 0xf,0x62,0x34, 0xf,0x62,0x35, 0xf,0x62,0x36, 0x5,0x67,0x6a, + 0x5,0x6c,0x24, 0x5,0x6c,0x23, 0x7,0x4d,0x5d, 0x7,0x4d,0x5b, + 0x5,0x6c,0x22, 0x7,0x4d,0x5a, 0x7,0x4d,0x5c, 0x7,0x4d,0x5e, + 0x4,0x66,0x3c, 0x7,0x53,0x34, 0x7,0x53,0x61, 0x5,0x73,0x3e, + 0x7,0x57,0x6e, 0x7,0x57,0x6f, 0x5,0x75,0x6a, 0xf,0x6a,0x4f, + 0x7,0x5b,0x4d, 0x7,0x5e,0x64, 0x7,0x62,0x36, 0x5,0x7a,0x68, + 0x5,0x7a,0x67, 0xf,0x6c,0x7b, 0xf,0x21,0x63, 0xf,0x22,0x4b, + 0xf,0x22,0x4c, 0x6,0x2b,0x2c, 0xf,0x24,0x27, 0x6,0x2b,0x2d, + 0x6,0x2b,0x2e, 0xf,0x2f,0x39, 0xf,0x2f,0x3b, 0xf,0x2f,0x3c, + 0xf,0x2f,0x3a, 0x5,0x32,0x45, 0xf,0x34,0x54, 0x6,0x48,0x4f, + 0xf,0x3a,0x6b, 0xf,0x3a,0x6c, 0x5,0x3f,0x26, 0x6,0x21,0x3f, + 0x6,0x21,0x75, 0x6,0x22,0x79, 0x6,0x27,0x49, 0x4,0x24,0x2a, + 0x6,0x30,0x70, 0x6,0x27,0x4d, 0xf,0x24,0x28, 0x6,0x27,0x4b, + 0x6,0x27,0x4e, 0x4,0x26,0x3f, 0x6,0x2b,0x30, 0x5,0x26,0x2e, + 0x6,0x2b,0x31, 0x3,0x2a,0x39, 0x4,0x27,0x41, 0x6,0x35,0x23, + 0x6,0x30,0x72, 0x6,0x30,0x73, 0x6,0x30,0x71, 0x6,0x30,0x6f, + 0x6,0x30,0x6e, 0x6,0x37,0x3f, 0x6,0x37,0x3e, 0x4,0x2c,0x6f, + 0x6,0x37,0x3d, 0x6,0x37,0x40, 0x6,0x3f,0x49, 0x6,0x3f,0x4a, + 0x6,0x3f,0x4b, 0x6,0x3f,0x4c, 0x6,0x3f,0x4d, 0x6,0x3f,0x4e, + 0x4,0x37,0x44, 0x6,0x48,0x50, 0x6,0x48,0x54, 0x6,0x48,0x53, + 0x6,0x48,0x51, 0xf,0x3a,0x6d, 0x6,0x48,0x52, 0x6,0x52,0x49, + 0x5,0x3f,0x27, 0xf,0x41,0x3d, 0x6,0x5c,0x53, 0x6,0x5c,0x54, + 0x6,0x5c,0x52, 0x5,0x45,0x61, 0x7,0x22,0x64, 0x7,0x2d,0x5a, + 0x7,0x2d,0x5c, 0x4,0x50,0x2f, 0x5,0x54,0x45, 0x7,0x37,0x71, + 0x7,0x37,0x70, 0x7,0x57,0x70, 0x7,0x63,0x51, 0x7,0x63,0x52, + 0x7,0x65,0x36, 0x6,0x21,0x40, 0x6,0x21,0x76, 0xf,0x22,0x4d, + 0x4,0x24,0x2b, 0x6,0x27,0x50, 0x6,0x27,0x4f, 0x5,0x24,0x2e, + 0x6,0x2b,0x32, 0x6,0x30,0x76, 0x6,0x30,0x75, 0x6,0x30,0x77, + 0x5,0x2e,0x68, 0x6,0x3f,0x4f, 0x5,0x38,0x2e, 0x6,0x52,0x4a, + 0x6,0x5c,0x55, 0x7,0x22,0x65, 0x7,0x2d,0x5d, 0x5,0x21,0x2a, + 0x5,0x21,0x47, 0x6,0x21,0x78, 0x6,0x21,0x7c, 0x6,0x21,0x77, + 0x6,0x21,0x7a, 0x6,0x21,0x7b, 0x6,0x23,0x21, 0x6,0x23,0x22, + 0x6,0x22,0x7c, 0x6,0x22,0x7a, 0x6,0x23,0x23, 0x6,0x22,0x7b, + 0x6,0x22,0x7d, 0x6,0x22,0x7e, 0x5,0x21,0x6a, 0x5,0x22,0x60, + 0x5,0x22,0x5f, 0x6,0x24,0x68, 0x6,0x24,0x69, 0x6,0x24,0x6a, + 0x6,0x24,0x6b, 0x5,0x24,0x2f, 0x6,0x27,0x51, 0x5,0x24,0x31, + 0x6,0x27,0x53, 0x5,0x24,0x30, 0xf,0x24,0x29, 0xf,0x24,0x2a, + 0xf,0x24,0x2b, 0xf,0x24,0x2c, 0x6,0x27,0x52, 0x5,0x24,0x32, + 0x5,0x26,0x2f, 0x6,0x2b,0x36, 0x6,0x2b,0x33, 0x6,0x2b,0x34, + 0x6,0x2b,0x37, 0x6,0x2b,0x35, 0x6,0x30,0x7e, 0x5,0x29,0x2c, + 0x6,0x30,0x7d, 0x4,0x29,0x30, 0x6,0x30,0x79, 0x5,0x29,0x2b, + 0x6,0x30,0x78, 0x5,0x2d,0x44, 0x5,0x2d,0x43, 0x5,0x2d,0x45, + 0x6,0x37,0x43, 0x6,0x37,0x41, 0x5,0x2d,0x46, 0xf,0x2f,0x3d, + 0x6,0x37,0x42, 0x5,0x32,0x4a, 0x5,0x32,0x48, 0x5,0x32,0x49, + 0x6,0x3f,0x56, 0x6,0x3f,0x50, 0x4,0x29,0x2f, 0x6,0x48,0x55, + 0x6,0x3f,0x52, 0x6,0x3f,0x53, 0x5,0x32,0x47, 0x6,0x3f,0x51, + 0xf,0x34,0x55, 0xf,0x34,0x56, 0xf,0x34,0x57, 0x6,0x3f,0x54, + 0x6,0x3f,0x57, 0x6,0x3f,0x55, 0x6,0x48,0x56, 0x6,0x48,0x59, + 0x5,0x38,0x2f, 0x5,0x38,0x32, 0x5,0x38,0x31, 0x6,0x48,0x5a, + 0x5,0x38,0x30, 0x6,0x48,0x58, 0x6,0x48,0x57, 0x5,0x3f,0x28, + 0x4,0x3d,0x31, 0x6,0x52,0x4b, 0xf,0x41,0x40, 0x6,0x52,0x4c, + 0x5,0x45,0x62, 0x6,0x5c,0x56, 0x5,0x45,0x63, 0x6,0x5c,0x57, + 0x6,0x5c,0x59, 0xf,0x47,0x70, 0x6,0x5c,0x5a, 0x6,0x5c,0x58, + 0x5,0x4d,0x21, 0x5,0x4d,0x22, 0x4,0x49,0x60, 0x7,0x22,0x66, + 0xf,0x4e,0x64, 0xf,0x4e,0x65, 0x7,0x22,0x67, 0x7,0x2d,0x5f, + 0x5,0x54,0x46, 0x4,0x50,0x30, 0x7,0x2d,0x60, 0x7,0x2d,0x5e, + 0x7,0x37,0x73, 0x7,0x37,0x72, 0x7,0x37,0x74, 0xf,0x5a,0x24, + 0x4,0x5b,0x22, 0x5,0x61,0x5e, 0x7,0x3f,0x52, 0xf,0x5e,0x5d, + 0x5,0x61,0x5d, 0x7,0x46,0x6d, 0x7,0x46,0x6b, 0x7,0x46,0x6f, + 0x7,0x46,0x6a, 0x7,0x46,0x6c, 0x5,0x67,0x6b, 0x5,0x6c,0x25, + 0x7,0x4d,0x5f, 0x4,0x5f,0x5f, 0x7,0x4d,0x61, 0x7,0x4d,0x60, + 0x5,0x6c,0x26, 0x5,0x6f,0x7c, 0x5,0x6f,0x7d, 0x4,0x66,0x3d, + 0x7,0x53,0x35, 0x5,0x73,0x3f, 0x7,0x60,0x3c, 0x7,0x60,0x6f, + 0x7,0x64,0x46, 0x6,0x24,0x6e, 0x6,0x24,0x6c, 0x6,0x24,0x6d, + 0x5,0x24,0x33, 0x6,0x31,0x21, 0x6,0x2b,0x38, 0x6,0x2d,0x32, + 0x6,0x31,0x24, 0x6,0x37,0x44, 0x6,0x31,0x22, 0x6,0x31,0x23, + 0x6,0x37,0x46, 0x6,0x37,0x45, 0x6,0x3f,0x58, 0x6,0x4f,0x21, + 0x5,0x38,0x33, 0x6,0x48,0x5c, 0x6,0x48,0x5b, 0x5,0x3f,0x2a, + 0x6,0x5c,0x5c, 0x6,0x5c,0x5f, 0x6,0x5c,0x5d, 0x6,0x5c,0x5b, + 0x6,0x5c,0x5e, 0x7,0x2d,0x61, 0x7,0x2d,0x4e, 0x4,0x50,0x32, + 0x7,0x37,0x75, 0x7,0x3f,0x55, 0x7,0x3f,0x54, 0x7,0x3f,0x53, + 0x7,0x46,0x72, 0x7,0x46,0x70, 0x7,0x46,0x71, 0x7,0x57,0x71, + 0x7,0x5b,0x4e, 0x7,0x62,0x37, 0x6,0x23,0x25, 0x6,0x23,0x24, + 0xf,0x21,0x64, 0x6,0x24,0x71, 0x6,0x24,0x6f, 0xf,0x24,0x2d, + 0x6,0x27,0x54, 0x5,0x26,0x30, 0x6,0x2b,0x3b, 0x6,0x2b,0x3a, + 0x6,0x37,0x47, 0x4,0x2c,0x74, 0x4,0x2c,0x73, 0x5,0x35,0x60, + 0x6,0x3f,0x5d, 0x6,0x3f,0x59, 0x6,0x3f,0x5a, 0xf,0x34,0x58, + 0xf,0x34,0x59, 0xf,0x34,0x5a, 0x6,0x3f,0x5c, 0x6,0x3f,0x5b, + 0x5,0x32,0x4b, 0x6,0x48,0x5d, 0x6,0x48,0x60, 0x6,0x48,0x5e, + 0x6,0x48,0x5f, 0xf,0x3a,0x6e, 0x6,0x52,0x51, 0x6,0x52,0x4e, + 0x6,0x52,0x50, 0x6,0x52,0x4f, 0xf,0x41,0x41, 0x4,0x43,0x3c, + 0x6,0x5c,0x60, 0x7,0x22,0x6b, 0x7,0x22,0x6c, 0x7,0x22,0x69, + 0x7,0x22,0x6a, 0x5,0x4d,0x23, 0x4,0x50,0x33, 0x5,0x54,0x47, + 0x7,0x2d,0x64, 0x7,0x37,0x76, 0x7,0x3f,0x56, 0xf,0x67,0x54, + 0x7,0x4d,0x62, 0x7,0x53,0x36, 0x5,0x73,0x41, 0xf,0x6c,0x27, + 0x6,0x21,0x7d, 0x5,0x21,0x6b, 0x4,0x21,0x79, 0x5,0x22,0x61, + 0x4,0x22,0x6e, 0x5,0x22,0x62, 0x5,0x24,0x34, 0x6,0x27,0x58, + 0x5,0x24,0x35, 0x6,0x27,0x57, 0x6,0x27,0x59, 0x6,0x27,0x5b, + 0x6,0x27,0x56, 0x5,0x24,0x36, 0x6,0x27,0x55, 0x6,0x27,0x5a, + 0x5,0x26,0x33, 0x6,0x2b,0x3d, 0x5,0x26,0x31, 0x6,0x2b,0x3c, + 0x5,0x26,0x32, 0x5,0x29,0x2d, 0x6,0x2b,0x3f, 0x4,0x29,0x33, + 0x6,0x31,0x26, 0x5,0x29,0x30, 0x5,0x29,0x2e, 0x6,0x31,0x28, + 0x5,0x29,0x32, 0x5,0x29,0x31, 0xf,0x2a,0x5e, 0x6,0x31,0x27, + 0x6,0x37,0x4d, 0x4,0x2c,0x79, 0x4,0x2c,0x77, 0x4,0x2c,0x7c, + 0x4,0x2c,0x75, 0x5,0x2d,0x4b, 0x5,0x2d,0x49, 0x4,0x2c,0x78, + 0x4,0x2c,0x7a, 0x4,0x2c,0x76, 0x4,0x2c,0x7b, 0x5,0x2d,0x4a, + 0x6,0x37,0x49, 0x6,0x37,0x4f, 0x6,0x37,0x4c, 0xf,0x2f,0x3f, + 0xf,0x2f,0x40, 0x6,0x37,0x4b, 0x6,0x37,0x50, 0x6,0x37,0x4e, + 0x6,0x37,0x4a, 0x4,0x31,0x56, 0x5,0x32,0x4f, 0x6,0x3f,0x68, + 0x6,0x3f,0x61, 0x5,0x32,0x4c, 0x5,0x32,0x51, 0x5,0x32,0x4e, + 0x6,0x3f,0x60, 0x5,0x32,0x50, 0x4,0x31,0x58, 0x6,0x3f,0x67, + 0x6,0x3f,0x65, 0x6,0x3f,0x62, 0x4,0x31,0x59, 0x6,0x3f,0x66, + 0x5,0x32,0x4d, 0x6,0x3f,0x64, 0x6,0x3f,0x5f, 0x6,0x3f,0x63, + 0x6,0x48,0x64, 0xf,0x34,0x5c, 0x4,0x37,0x46, 0x5,0x38,0x36, + 0x5,0x38,0x35, 0x5,0x38,0x3b, 0x5,0x38,0x3a, 0x5,0x38,0x37, + 0x4,0x37,0x47, 0x6,0x48,0x61, 0x5,0x38,0x34, 0x6,0x48,0x63, + 0x5,0x38,0x38, 0x4,0x31,0x55, 0xf,0x3a,0x70, 0x6,0x48,0x62, + 0xf,0x3a,0x6f, 0x5,0x38,0x39, 0x5,0x3f,0x2c, 0x5,0x3f,0x2b, + 0x6,0x52,0x52, 0x6,0x52,0x54, 0x6,0x52,0x57, 0x6,0x52,0x53, + 0xf,0x41,0x42, 0xf,0x41,0x43, 0xf,0x41,0x44, 0xf,0x41,0x45, + 0xf,0x41,0x46, 0xf,0x41,0x47, 0x6,0x52,0x55, 0x6,0x52,0x56, + 0x6,0x56,0x6c, 0x5,0x3f,0x2d, 0x4,0x3d,0x32, 0x6,0x5c,0x66, + 0x6,0x5c,0x63, 0x5,0x45,0x66, 0x6,0x5c,0x62, 0x4,0x43,0x3e, + 0x5,0x45,0x65, 0x4,0x43,0x41, 0x4,0x43,0x40, 0x6,0x5c,0x61, + 0x5,0x45,0x68, 0x5,0x45,0x6a, 0x5,0x45,0x64, 0x6,0x5c,0x68, + 0x6,0x5c,0x69, 0x6,0x5c,0x6a, 0x5,0x45,0x67, 0x6,0x5c,0x64, + 0xf,0x47,0x71, 0xf,0x47,0x72, 0xf,0x47,0x73, 0xf,0x47,0x74, + 0xf,0x47,0x75, 0x6,0x5c,0x65, 0x4,0x49,0x64, 0x5,0x4d,0x24, + 0x5,0x5b,0x48, 0x4,0x49,0x63, 0x4,0x49,0x62, 0x5,0x4d,0x25, + 0x7,0x22,0x6d, 0x7,0x22,0x6f, 0xf,0x4e,0x66, 0xf,0x4e,0x67, + 0x7,0x22,0x6e, 0x7,0x22,0x70, 0x7,0x2d,0x65, 0x5,0x54,0x48, + 0x5,0x54,0x4a, 0x7,0x2d,0x67, 0x7,0x2d,0x66, 0xf,0x54,0x44, + 0xf,0x54,0x45, 0x7,0x2d,0x68, 0x5,0x54,0x49, 0x5,0x5b,0x47, + 0x7,0x37,0x77, 0x4,0x56,0x30, 0xf,0x5c,0x5f, 0x5,0x5b,0x46, + 0x5,0x61,0x60, 0x7,0x3f,0x57, 0x5,0x61,0x5f, 0x7,0x3f,0x58, + 0xf,0x5e,0x5e, 0x5,0x61,0x61, 0x7,0x46,0x73, 0x7,0x46,0x75, + 0x7,0x46,0x76, 0x7,0x4d,0x22, 0x7,0x46,0x74, 0x5,0x6c,0x27, + 0x4,0x63,0x3e, 0x4,0x63,0x3d, 0xf,0x65,0x2a, 0x7,0x4d,0x63, + 0x7,0x53,0x37, 0x5,0x6f,0x7e, 0x7,0x57,0x72, 0x4,0x6a,0x47, + 0x5,0x79,0x28, 0x5,0x21,0x31, 0x6,0x22,0x21, 0x4,0x22,0x6f, + 0x5,0x21,0x6c, 0x6,0x23,0x26, 0xf,0x22,0x4f, 0x6,0x24,0x75, + 0x5,0x22,0x63, 0x6,0x27,0x60, 0x5,0x22,0x69, 0x6,0x27,0x5d, + 0x5,0x22,0x64, 0x6,0x24,0x73, 0x6,0x24,0x74, 0x5,0x22,0x65, + 0x6,0x27,0x5c, 0x6,0x27,0x5e, 0x6,0x27,0x61, 0x6,0x24,0x72, + 0x5,0x22,0x68, 0x5,0x24,0x37, 0x5,0x24,0x39, 0x4,0x26,0x45, + 0x6,0x27,0x66, 0x6,0x27,0x64, 0x6,0x2b,0x46, 0x6,0x27,0x67, + 0x6,0x2b,0x40, 0x6,0x27,0x62, 0x6,0x27,0x63, 0x6,0x2b,0x44, + 0x6,0x27,0x65, 0x6,0x27,0x68, 0x3,0x25,0x7e, 0x6,0x27,0x69, + 0x5,0x24,0x3a, 0xf,0x24,0x2e, 0xf,0x24,0x2f, 0xf,0x24,0x31, + 0xf,0x24,0x32, 0xf,0x24,0x34, 0xf,0x24,0x35, 0xf,0x24,0x36, + 0xf,0x26,0x77, 0xf,0x26,0x78, 0xf,0x26,0x79, 0xf,0x26,0x7a, + 0xf,0x26,0x7b, 0xf,0x26,0x7d, 0xf,0x26,0x7e, 0xf,0x27,0x21, + 0xf,0x26,0x7c, 0x6,0x2b,0x45, 0x6,0x2b,0x41, 0x6,0x2b,0x42, + 0x4,0x24,0x2d, 0xf,0x24,0x30, 0x4,0x26,0x44, 0x5,0x26,0x34, + 0x6,0x2b,0x43, 0x4,0x26,0x47, 0x6,0x2b,0x4c, 0x4,0x29,0x47, + 0x6,0x31,0x2f, 0x4,0x26,0x4b, 0x6,0x2b,0x4d, 0x6,0x31,0x29, + 0x5,0x26,0x35, 0x6,0x31,0x2c, 0x6,0x2b,0x4f, 0x4,0x26,0x4a, + 0x5,0x26,0x37, 0x4,0x29,0x38, 0x5,0x26,0x36, 0x4,0x29,0x43, + 0x6,0x2b,0x49, 0x5,0x26,0x38, 0x4,0x26,0x51, 0x4,0x29,0x44, + 0x6,0x31,0x2a, 0x6,0x31,0x2b, 0x6,0x2b,0x50, 0x6,0x2b,0x47, + 0x6,0x31,0x2d, 0xf,0x26,0x75, 0xf,0x27,0x22, 0xf,0x2a,0x70, + 0x4,0x29,0x46, 0x6,0x31,0x2e, 0x6,0x2b,0x48, 0x6,0x2b,0x4a, + 0x6,0x2b,0x4e, 0x6,0x2b,0x4b, 0xf,0x2a,0x64, 0xf,0x2a,0x5f, + 0xf,0x2a,0x62, 0xf,0x2a,0x65, 0xf,0x2a,0x68, 0xf,0x2a,0x6c, + 0x6,0x37,0x5b, 0x6,0x37,0x59, 0x6,0x31,0x32, 0x4,0x29,0x49, + 0x5,0x29,0x37, 0x4,0x29,0x42, 0x4,0x2d,0x29, 0x5,0x2d,0x4e, + 0x5,0x29,0x36, 0x6,0x31,0x39, 0x6,0x37,0x57, 0x6,0x31,0x33, + 0x4,0x2c,0x7d, 0x5,0x2d,0x4c, 0x6,0x31,0x35, 0x6,0x37,0x53, + 0x4,0x2d,0x21, 0x6,0x31,0x38, 0x5,0x29,0x34, 0x4,0x2c,0x7e, + 0x6,0x31,0x3a, 0x6,0x31,0x31, 0x6,0x31,0x37, 0x6,0x37,0x56, + 0x6,0x37,0x55, 0x4,0x2d,0x2a, 0x6,0x31,0x34, 0xf,0x2a,0x61, + 0xf,0x2a,0x66, 0xf,0x2a,0x69, 0xf,0x2a,0x6b, 0xf,0x2a,0x6d, + 0xf,0x2a,0x6e, 0xf,0x2a,0x6f, 0xf,0x2f,0x46, 0xf,0x2f,0x47, + 0xf,0x2f,0x48, 0xf,0x2f,0x4a, 0x6,0x37,0x52, 0xf,0x2f,0x44, + 0x6,0x37,0x58, 0xf,0x2a,0x63, 0x5,0x2d,0x4d, 0x6,0x37,0x51, + 0x5,0x2d,0x52, 0x5,0x2d,0x58, 0x5,0x2d,0x5b, 0x6,0x3f,0x6d, + 0x6,0x37,0x63, 0x6,0x3f,0x6f, 0x6,0x3f,0x6b, 0x6,0x3f,0x70, + 0x6,0x37,0x64, 0x5,0x2d,0x55, 0x6,0x3f,0x69, 0x4,0x2d,0x2e, + 0x6,0x3f,0x73, 0x5,0x2d,0x56, 0x4,0x2d,0x26, 0x5,0x32,0x5d, + 0x5,0x2d,0x51, 0x5,0x2d,0x5c, 0x6,0x37,0x62, 0x6,0x37,0x5d, + 0x5,0x32,0x54, 0x6,0x37,0x5f, 0x6,0x37,0x61, 0x6,0x3f,0x6c, + 0x6,0x37,0x60, 0x6,0x3f,0x71, 0x4,0x2d,0x27, 0x5,0x2d,0x50, + 0x6,0x37,0x5c, 0x5,0x32,0x53, 0x6,0x3f,0x72, 0x6,0x3f,0x74, + 0x5,0x32,0x52, 0x5,0x2d,0x4f, 0xf,0x2f,0x41, 0xf,0x2f,0x42, + 0xf,0x2f,0x43, 0xf,0x2f,0x49, 0xf,0x2f,0x4b, 0xf,0x34,0x5d, + 0xf,0x34,0x5f, 0xf,0x34,0x60, 0xf,0x34,0x64, 0xf,0x34,0x65, + 0xf,0x34,0x66, 0xf,0x34,0x67, 0xf,0x34,0x68, 0x6,0x3f,0x6a, + 0x6,0x37,0x65, 0x6,0x37,0x66, 0x5,0x2d,0x54, 0x5,0x2d,0x59, + 0x4,0x37,0x5a, 0x6,0x48,0x71, 0x4,0x37,0x4d, 0x5,0x32,0x59, + 0x6,0x3f,0x7c, 0x4,0x37,0x4b, 0x6,0x48,0x73, 0x6,0x48,0x69, + 0x5,0x38,0x55, 0x6,0x3f,0x7e, 0x6,0x48,0x72, 0x6,0x40,0x22, + 0x4,0x31,0x65, 0x5,0x2d,0x53, 0x4,0x31,0x6d, 0x6,0x3f,0x77, + 0x6,0x48,0x6e, 0x4,0x31,0x61, 0x5,0x38,0x3f, 0x5,0x32,0x57, + 0x5,0x32,0x5a, 0x4,0x37,0x4c, 0x6,0x3f,0x79, 0x5,0x32,0x5c, + 0x6,0x3f,0x76, 0x6,0x3f,0x6e, 0x4,0x31,0x69, 0x5,0x38,0x3c, + 0x6,0x48,0x70, 0x5,0x32,0x5e, 0x4,0x31,0x5f, 0x6,0x3f,0x7d, + 0x6,0x3f,0x7b, 0x6,0x3f,0x7a, 0x6,0x48,0x66, 0x6,0x48,0x6c, + 0x5,0x38,0x3e, 0x5,0x38,0x41, 0x6,0x48,0x74, 0x5,0x32,0x55, + 0x6,0x48,0x6b, 0x6,0x48,0x76, 0x6,0x48,0x67, 0x6,0x48,0x65, + 0x6,0x3f,0x75, 0x5,0x38,0x40, 0xf,0x34,0x61, 0xf,0x34,0x5e, + 0xf,0x34,0x62, 0xf,0x34,0x63, 0xf,0x34,0x69, 0xf,0x34,0x6a, + 0xf,0x34,0x6b, 0xf,0x34,0x6c, 0xf,0x34,0x6d, 0xf,0x34,0x6f, + 0xf,0x34,0x70, 0xf,0x34,0x72, 0xf,0x3a,0x72, 0xf,0x3a,0x73, + 0xf,0x3a,0x74, 0xf,0x3a,0x75, 0xf,0x3a,0x76, 0xf,0x3a,0x77, + 0xf,0x3a,0x79, 0xf,0x3a,0x7a, 0xf,0x3a,0x7c, 0xf,0x3a,0x7d, + 0xf,0x3a,0x7e, 0xf,0x3b,0x21, 0xf,0x3b,0x22, 0xf,0x3b,0x25, + 0xf,0x3b,0x29, 0xf,0x3b,0x2a, 0xf,0x3b,0x2c, 0xf,0x3b,0x2e, + 0x6,0x48,0x68, 0x5,0x32,0x56, 0x6,0x3f,0x78, 0xf,0x3b,0x27, + 0xf,0x34,0x6e, 0x6,0x49,0x24, 0x6,0x48,0x6d, 0x6,0x40,0x21, + 0xf,0x3b,0x24, 0x4,0x3d,0x3f, 0x5,0x38,0x4a, 0x5,0x38,0x4d, + 0x5,0x38,0x52, 0x4,0x37,0x4f, 0x4,0x37,0x57, 0x4,0x37,0x51, + 0x6,0x52,0x5d, 0x6,0x49,0x23, 0x5,0x38,0x50, 0x6,0x49,0x22, + 0x4,0x37,0x53, 0x5,0x38,0x56, 0x5,0x38,0x58, 0x5,0x38,0x43, + 0x6,0x52,0x61, 0x5,0x38,0x5a, 0x5,0x3f,0x33, 0x4,0x37,0x5b, + 0x5,0x38,0x53, 0x6,0x49,0x21, 0x5,0x38,0x46, 0x6,0x48,0x7b, + 0x5,0x3f,0x34, 0x5,0x38,0x44, 0x5,0x38,0x54, 0x5,0x32,0x5f, + 0x6,0x52,0x58, 0x5,0x38,0x47, 0x4,0x3d,0x36, 0x4,0x37,0x58, + 0x5,0x38,0x59, 0x5,0x38,0x51, 0x5,0x38,0x4b, 0x5,0x3f,0x31, + 0x6,0x48,0x77, 0x5,0x38,0x4f, 0x5,0x38,0x3d, 0x6,0x48,0x7e, + 0x6,0x52,0x62, 0x6,0x52,0x63, 0x6,0x52,0x5a, 0x6,0x48,0x7d, + 0x5,0x38,0x57, 0x6,0x52,0x5e, 0x6,0x52,0x60, 0x5,0x3f,0x2f, + 0x4,0x3d,0x40, 0x4,0x37,0x52, 0x5,0x38,0x49, 0x6,0x48,0x79, + 0xf,0x3a,0x71, 0xf,0x3a,0x7b, 0xf,0x3b,0x23, 0xf,0x3b,0x28, + 0xf,0x3b,0x2d, 0xf,0x41,0x48, 0xf,0x41,0x4e, 0xf,0x41,0x50, + 0xf,0x41,0x51, 0xf,0x41,0x52, 0x6,0x52,0x5c, 0x6,0x52,0x5f, + 0x6,0x52,0x5b, 0x6,0x48,0x7a, 0xf,0x3b,0x2b, 0x5,0x38,0x4e, + 0x5,0x3f,0x2e, 0x5,0x38,0x4c, 0xf,0x34,0x71, 0xf,0x47,0x7d, + 0x5,0x3f,0x3c, 0x5,0x3f,0x36, 0x5,0x3f,0x35, 0x6,0x52,0x6b, + 0x5,0x4d,0x26, 0x5,0x3f,0x45, 0x6,0x5c,0x6f, 0x5,0x3f,0x39, + 0x5,0x3f,0x3f, 0x5,0x3f,0x44, 0x6,0x5c,0x74, 0x6,0x52,0x6f, + 0x5,0x45,0x6b, 0x5,0x3f,0x3b, 0x6,0x5c,0x6c, 0x6,0x52,0x65, + 0x5,0x3f,0x38, 0x5,0x3f,0x3d, 0x5,0x3f,0x3a, 0x6,0x52,0x59, + 0x4,0x49,0x6e, 0x6,0x5c,0x76, 0x6,0x5c,0x79, 0x5,0x3f,0x43, + 0x6,0x52,0x68, 0x6,0x5c,0x72, 0x4,0x43,0x4f, 0x6,0x5c,0x78, + 0x6,0x5c,0x77, 0x5,0x3f,0x41, 0x5,0x45,0x6d, 0x5,0x3f,0x3e, + 0x6,0x5c,0x71, 0x6,0x5c,0x6e, 0x6,0x5c,0x6d, 0x5,0x3f,0x37, + 0x6,0x52,0x67, 0x6,0x52,0x6d, 0xf,0x41,0x4a, 0xf,0x41,0x4b, + 0xf,0x41,0x4c, 0xf,0x41,0x4d, 0xf,0x41,0x4f, 0xf,0x41,0x53, + 0xf,0x47,0x76, 0xf,0x47,0x77, 0xf,0x47,0x79, 0xf,0x47,0x7a, + 0xf,0x48,0x25, 0xf,0x48,0x28, 0x6,0x5c,0x70, 0x6,0x5c,0x75, + 0x5,0x3f,0x40, 0xf,0x41,0x49, 0x6,0x5c,0x73, 0x6,0x52,0x6e, + 0x6,0x5d,0x23, 0x6,0x5d,0x27, 0x4,0x43,0x45, 0x4,0x43,0x44, + 0x5,0x4d,0x27, 0x6,0x5c,0x7c, 0x5,0x45,0x77, 0x5,0x45,0x76, + 0x5,0x45,0x73, 0x4,0x3d,0x35, 0x6,0x5c,0x7b, 0x7,0x22,0x72, + 0x7,0x22,0x75, 0x5,0x4d,0x29, 0x5,0x45,0x70, 0x5,0x45,0x6f, + 0x5,0x45,0x6c, 0x5,0x45,0x71, 0x5,0x45,0x72, 0x5,0x45,0x79, + 0x6,0x5d,0x25, 0x6,0x5c,0x7d, 0x6,0x5c,0x7e, 0x6,0x52,0x6a, + 0x6,0x5d,0x22, 0x7,0x22,0x74, 0x6,0x5d,0x21, 0x7,0x22,0x77, + 0x5,0x45,0x74, 0x5,0x45,0x78, 0x7,0x2d,0x6a, 0x4,0x43,0x53, + 0xf,0x47,0x78, 0xf,0x47,0x7c, 0xf,0x47,0x7e, 0xf,0x48,0x21, + 0xf,0x48,0x23, 0xf,0x48,0x24, 0xf,0x48,0x26, 0xf,0x4e,0x69, + 0xf,0x4e,0x6a, 0xf,0x4e,0x6b, 0xf,0x4e,0x6c, 0xf,0x4e,0x6d, + 0xf,0x4e,0x6e, 0xf,0x4e,0x6f, 0xf,0x4e,0x73, 0xf,0x4e,0x75, + 0x7,0x22,0x73, 0x7,0x22,0x78, 0x6,0x5c,0x6b, 0x5,0x45,0x6e, + 0x6,0x5c,0x7a, 0x5,0x4d,0x28, 0x5,0x45,0x75, 0x7,0x2d,0x71, + 0x4,0x49,0x66, 0x4,0x43,0x52, 0x7,0x2d,0x6b, 0x4,0x49,0x71, + 0x7,0x2d,0x6d, 0x5,0x4d,0x2f, 0x7,0x2d,0x73, 0x4,0x49,0x6a, + 0x5,0x4d,0x2e, 0x7,0x22,0x79, 0x5,0x4d,0x33, 0x4,0x49,0x72, + 0x7,0x2d,0x75, 0x5,0x38,0x45, 0x5,0x4d,0x32, 0x5,0x4d,0x35, + 0x4,0x50,0x35, 0x4,0x50,0x36, 0x7,0x23,0x21, 0x5,0x4d,0x34, + 0x7,0x37,0x7c, 0x5,0x4d,0x30, 0x5,0x54,0x4e, 0x4,0x56,0x34, + 0x7,0x22,0x7a, 0x7,0x23,0x22, 0x5,0x54,0x54, 0x5,0x4d,0x2b, + 0x5,0x4d,0x2d, 0x5,0x54,0x4d, 0x5,0x4d,0x2c, 0x7,0x2e,0x22, + 0x7,0x2d,0x77, 0x7,0x2d,0x76, 0x7,0x22,0x7e, 0x4,0x50,0x3c, + 0x7,0x2d,0x70, 0x7,0x2d,0x6f, 0xf,0x48,0x22, 0xf,0x4e,0x70, + 0x7,0x2d,0x72, 0x5,0x4d,0x31, 0x7,0x2d,0x6c, 0xf,0x4e,0x71, + 0xf,0x4e,0x72, 0xf,0x4e,0x74, 0xf,0x4e,0x76, 0xf,0x54,0x47, + 0xf,0x54,0x48, 0xf,0x54,0x4a, 0xf,0x54,0x4b, 0xf,0x54,0x51, + 0xf,0x54,0x53, 0x7,0x2d,0x74, 0x5,0x54,0x4b, 0x7,0x30,0x50, + 0x7,0x22,0x7d, 0x7,0x25,0x71, 0x4,0x49,0x70, 0x5,0x54,0x4c, + 0x5,0x54,0x4f, 0xf,0x4e,0x68, 0xf,0x54,0x4f, 0x5,0x54,0x50, + 0x5,0x54,0x52, 0x7,0x2d,0x7b, 0x7,0x2d,0x78, 0x5,0x54,0x55, + 0x5,0x54,0x56, 0x5,0x54,0x51, 0x7,0x2d,0x7e, 0x7,0x2d,0x7c, + 0x7,0x2d,0x7d, 0x5,0x54,0x57, 0x4,0x50,0x3d, 0x5,0x5b,0x49, + 0x7,0x2e,0x21, 0x7,0x37,0x7b, 0x7,0x37,0x7d, 0x7,0x37,0x7a, + 0x7,0x38,0x21, 0x5,0x5b,0x4b, 0x7,0x2d,0x7a, 0x7,0x37,0x79, + 0x7,0x2d,0x6e, 0xf,0x54,0x4d, 0x5,0x54,0x53, 0x7,0x38,0x22, + 0xf,0x54,0x49, 0xf,0x54,0x4e, 0xf,0x54,0x52, 0xf,0x5a,0x25, + 0xf,0x5a,0x26, 0xf,0x5a,0x2e, 0xf,0x5a,0x27, 0x5,0x5b,0x4a, + 0x5,0x54,0x58, 0xf,0x5a,0x2a, 0xf,0x54,0x4c, 0x7,0x37,0x78, + 0x5,0x5b,0x51, 0x4,0x56,0x35, 0x4,0x56,0x31, 0x4,0x5b,0x2a, + 0x5,0x5b,0x4e, 0x5,0x61,0x64, 0x5,0x61,0x62, 0x7,0x3f,0x5b, + 0x7,0x38,0x26, 0x4,0x5b,0x26, 0x5,0x5b,0x4d, 0x5,0x5b,0x4f, + 0x7,0x38,0x23, 0x7,0x38,0x25, 0x5,0x5b,0x50, 0x5,0x61,0x63, + 0x7,0x3f,0x5a, 0x5,0x61,0x65, 0x7,0x3f,0x59, 0x7,0x22,0x76, + 0xf,0x5a,0x2b, 0xf,0x5a,0x2d, 0xf,0x5e,0x5f, 0xf,0x5e,0x60, + 0xf,0x5e,0x62, 0xf,0x5e,0x63, 0xf,0x5e,0x65, 0xf,0x5e,0x66, + 0xf,0x5e,0x67, 0x7,0x3f,0x5c, 0x7,0x38,0x24, 0xf,0x5a,0x28, + 0x4,0x5b,0x27, 0x5,0x5b,0x52, 0x7,0x46,0x79, 0x7,0x3f,0x5d, + 0x5,0x61,0x68, 0x7,0x4d,0x64, 0x4,0x5f,0x63, 0x4,0x5f,0x62, + 0x7,0x46,0x7c, 0x5,0x61,0x69, 0x7,0x4d,0x67, 0x4,0x5b,0x28, + 0x5,0x61,0x6a, 0x7,0x47,0x25, 0x7,0x47,0x21, 0x7,0x46,0x78, + 0x5,0x61,0x67, 0x7,0x46,0x7e, 0x5,0x67,0x6d, 0x7,0x46,0x7a, + 0x5,0x67,0x70, 0x7,0x46,0x77, 0x7,0x47,0x22, 0x7,0x3f,0x5e, + 0x7,0x46,0x7d, 0x5,0x67,0x6e, 0xf,0x5e,0x64, 0x5,0x67,0x6f, + 0x7,0x46,0x7b, 0x5,0x67,0x6c, 0xf,0x62,0x39, 0x7,0x47,0x2a, + 0x4,0x63,0x44, 0x7,0x47,0x27, 0x5,0x67,0x74, 0x7,0x47,0x24, + 0x5,0x6c,0x2a, 0x7,0x47,0x29, 0x7,0x47,0x26, 0x7,0x3f,0x5f, + 0x5,0x67,0x75, 0x4,0x63,0x3f, 0x5,0x67,0x71, 0x5,0x6c,0x28, + 0x7,0x47,0x2b, 0x7,0x47,0x23, 0x7,0x4d,0x65, 0x5,0x67,0x77, + 0xf,0x62,0x3a, 0xf,0x62,0x38, 0xf,0x62,0x3b, 0xf,0x62,0x3c, + 0xf,0x62,0x3d, 0x7,0x4d,0x66, 0x5,0x61,0x66, 0x5,0x67,0x72, + 0xf,0x65,0x2b, 0x5,0x67,0x76, 0x5,0x6c,0x29, 0x7,0x53,0x39, + 0x7,0x4d,0x6a, 0x4,0x63,0x41, 0x7,0x4d,0x69, 0x4,0x63,0x45, + 0x7,0x53,0x38, 0x7,0x4d,0x6b, 0xf,0x67,0x55, 0x7,0x5b,0x4f, + 0x4,0x66,0x3e, 0x5,0x6c,0x2b, 0x7,0x57,0x73, 0x7,0x57,0x74, + 0x7,0x57,0x75, 0x7,0x53,0x3b, 0x7,0x53,0x3a, 0x7,0x53,0x3c, + 0xf,0x69,0x42, 0x7,0x57,0x76, 0x7,0x5b,0x50, 0x7,0x5b,0x52, + 0x7,0x5b,0x53, 0x7,0x5b,0x51, 0xf,0x6a,0x50, 0xf,0x69,0x41, + 0xf,0x6a,0x51, 0xf,0x6a,0x52, 0x7,0x5b,0x55, 0x5,0x77,0x5a, + 0x7,0x5b,0x54, 0x7,0x5e,0x65, 0xf,0x6a,0x53, 0xf,0x6b,0x47, + 0xf,0x6b,0x48, 0x5,0x77,0x5b, 0x7,0x5e,0x66, 0x5,0x79,0x29, + 0x7,0x5e,0x67, 0xf,0x6c,0x28, 0xf,0x6c,0x29, 0x4,0x6d,0x72, + 0xf,0x6c,0x7c, 0xf,0x6c,0x7d, 0x5,0x7b,0x3e, 0x5,0x7b,0x60, + 0xf,0x6d,0x34, 0x5,0x22,0x6a, 0x4,0x22,0x72, 0x6,0x24,0x76, + 0x6,0x27,0x6b, 0x5,0x24,0x3b, 0x6,0x27,0x6a, 0x6,0x27,0x6d, + 0x6,0x27,0x6c, 0x4,0x26,0x52, 0x6,0x2b,0x51, 0x6,0x2b,0x58, + 0x6,0x2b,0x54, 0x6,0x2b,0x56, 0x4,0x26,0x53, 0x6,0x2b,0x55, + 0x6,0x2b,0x53, 0x6,0x2b,0x57, 0xf,0x27,0x24, 0xf,0x27,0x23, + 0x6,0x31,0x3d, 0x6,0x31,0x3b, 0x6,0x31,0x3e, 0x6,0x31,0x40, + 0x4,0x29,0x4c, 0x6,0x31,0x41, 0x6,0x31,0x3f, 0xf,0x2a,0x71, + 0xf,0x2a,0x72, 0x6,0x31,0x3c, 0x6,0x37,0x67, 0x5,0x2d,0x5f, + 0x6,0x37,0x69, 0x5,0x2d,0x5e, 0x6,0x37,0x68, 0x5,0x32,0x61, + 0x4,0x31,0x6f, 0x6,0x40,0x25, 0xf,0x34,0x73, 0xf,0x34,0x74, + 0x6,0x40,0x24, 0x5,0x32,0x60, 0x6,0x49,0x28, 0x6,0x49,0x27, + 0x6,0x49,0x25, 0x6,0x49,0x26, 0x4,0x37,0x5c, 0x6,0x49,0x29, + 0xf,0x3b,0x2f, 0x5,0x38,0x5b, 0x5,0x38,0x5c, 0xf,0x34,0x76, + 0x4,0x3d,0x44, 0x6,0x52,0x71, 0x5,0x3f,0x47, 0x5,0x3f,0x49, + 0xf,0x41,0x55, 0x4,0x3d,0x41, 0x6,0x52,0x70, 0x5,0x3f,0x48, + 0x6,0x5d,0x29, 0x6,0x5d,0x2a, 0x5,0x45,0x7a, 0x5,0x45,0x7c, + 0x5,0x45,0x7b, 0x7,0x23,0x24, 0x5,0x45,0x7d, 0xf,0x48,0x29, + 0xf,0x48,0x2a, 0x6,0x5d,0x28, 0x5,0x4d,0x36, 0x4,0x49,0x73, + 0x4,0x49,0x74, 0x7,0x23,0x28, 0x7,0x23,0x27, 0x7,0x23,0x25, + 0x6,0x5d,0x2b, 0x7,0x23,0x23, 0xf,0x4e,0x7b, 0x7,0x23,0x29, + 0x7,0x23,0x26, 0xf,0x4e,0x77, 0xf,0x4e,0x78, 0xf,0x4e,0x7a, + 0x7,0x23,0x2a, 0x7,0x2e,0x2a, 0x7,0x2e,0x25, 0x7,0x2e,0x24, + 0x7,0x2e,0x27, 0x7,0x2e,0x26, 0x7,0x2e,0x29, 0x7,0x2e,0x28, + 0x7,0x2c,0x63, 0x7,0x31,0x70, 0x7,0x2e,0x23, 0x7,0x38,0x27, + 0x5,0x5b,0x53, 0xf,0x5a,0x2f, 0x7,0x3f,0x60, 0x7,0x47,0x2d, + 0x4,0x5f,0x65, 0x7,0x47,0x2e, 0x5,0x6c,0x2c, 0xf,0x65,0x2c, + 0x5,0x70,0x21, 0x7,0x53,0x3d, 0x6,0x23,0x27, 0x5,0x21,0x6d, + 0x6,0x24,0x77, 0x6,0x24,0x78, 0x4,0x24,0x34, 0xf,0x24,0x37, + 0xf,0x24,0x38, 0x5,0x26,0x39, 0x6,0x2b,0x59, 0x6,0x2b,0x5a, + 0x6,0x31,0x43, 0x6,0x31,0x42, 0x6,0x31,0x44, 0x5,0x29,0x39, + 0xf,0x2a,0x73, 0xf,0x2a,0x74, 0xf,0x2a,0x75, 0x6,0x31,0x46, + 0x6,0x31,0x45, 0x5,0x29,0x38, 0x6,0x37,0x6c, 0x6,0x37,0x6a, + 0x6,0x37,0x6b, 0x5,0x2d,0x61, 0x5,0x2d,0x60, 0x6,0x40,0x26, + 0xf,0x34,0x77, 0x5,0x38,0x5d, 0x5,0x38,0x5f, 0x5,0x38,0x60, + 0x5,0x38,0x5e, 0x5,0x3f,0x4a, 0x5,0x45,0x7e, 0x4,0x43,0x55, + 0x7,0x23,0x2b, 0x5,0x5b,0x54, 0x5,0x70,0x22, 0x6,0x23,0x28, + 0x5,0x21,0x6e, 0x6,0x23,0x29, 0x6,0x23,0x2a, 0x5,0x21,0x6f, + 0x5,0x22,0x6c, 0x4,0x22,0x76, 0x6,0x24,0x79, 0x5,0x22,0x72, + 0x5,0x22,0x70, 0x5,0x22,0x6f, 0x5,0x22,0x6b, 0x5,0x22,0x6d, + 0xf,0x22,0x50, 0xf,0x22,0x52, 0x5,0x22,0x71, 0x4,0x24,0x37, + 0x6,0x27,0x73, 0x6,0x27,0x76, 0x6,0x27,0x75, 0x4,0x26,0x57, + 0x5,0x24,0x3d, 0x6,0x27,0x6f, 0x4,0x24,0x38, 0x4,0x24,0x35, + 0x6,0x27,0x77, 0x5,0x24,0x3e, 0x4,0x24,0x3b, 0x6,0x27,0x72, + 0x6,0x2b,0x5d, 0x6,0x27,0x71, 0x6,0x2b,0x65, 0x6,0x2b,0x5b, + 0x6,0x27,0x70, 0x5,0x24,0x3c, 0x6,0x2b,0x5c, 0x6,0x27,0x74, + 0xf,0x24,0x3b, 0xf,0x24,0x3c, 0xf,0x24,0x3d, 0xf,0x24,0x3e, + 0xf,0x24,0x3f, 0xf,0x24,0x40, 0xf,0x24,0x41, 0xf,0x24,0x43, + 0xf,0x24,0x44, 0xf,0x24,0x45, 0xf,0x24,0x3a, 0x6,0x2b,0x5e, + 0x6,0x2b,0x5f, 0x6,0x2b,0x61, 0x5,0x26,0x3b, 0x5,0x29,0x3a, + 0x6,0x2b,0x64, 0x6,0x31,0x48, 0x5,0x26,0x3d, 0x6,0x31,0x4a, + 0x5,0x26,0x3c, 0x6,0x31,0x49, 0x6,0x31,0x47, 0x6,0x2b,0x62, + 0xf,0x27,0x26, 0xf,0x27,0x27, 0xf,0x27,0x28, 0xf,0x27,0x29, + 0xf,0x27,0x2a, 0xf,0x27,0x2b, 0xf,0x27,0x2c, 0xf,0x27,0x2d, + 0xf,0x27,0x2f, 0xf,0x27,0x25, 0x5,0x26,0x3e, 0x6,0x31,0x52, + 0x6,0x31,0x54, 0x4,0x29,0x58, 0x4,0x29,0x4f, 0x4,0x29,0x50, + 0x6,0x31,0x53, 0x6,0x37,0x6d, 0x5,0x29,0x3f, 0x5,0x29,0x42, + 0x5,0x29,0x41, 0x6,0x31,0x4d, 0x5,0x29,0x47, 0x4,0x2d,0x34, + 0x4,0x29,0x5c, 0x5,0x29,0x3e, 0x5,0x29,0x3d, 0x5,0x2d,0x63, + 0x4,0x29,0x53, 0x6,0x37,0x6e, 0x5,0x29,0x48, 0x4,0x29,0x5a, + 0x6,0x31,0x50, 0x5,0x29,0x40, 0x5,0x29,0x44, 0x6,0x31,0x4e, + 0x6,0x31,0x56, 0x6,0x31,0x4b, 0x5,0x29,0x43, 0x5,0x29,0x3c, + 0x6,0x31,0x55, 0x6,0x31,0x51, 0xf,0x2a,0x76, 0xf,0x2a,0x77, + 0xf,0x2a,0x78, 0xf,0x2a,0x79, 0xf,0x2a,0x7a, 0xf,0x2a,0x7b, + 0xf,0x2a,0x7c, 0xf,0x2a,0x7d, 0xf,0x2a,0x7e, 0xf,0x2b,0x21, + 0xf,0x2b,0x23, 0xf,0x2b,0x24, 0xf,0x2b,0x25, 0xf,0x2b,0x26, + 0xf,0x2b,0x27, 0xf,0x2b,0x28, 0xf,0x2b,0x29, 0xf,0x2b,0x2a, + 0xf,0x2f,0x53, 0xf,0x2f,0x5c, 0xf,0x2f,0x61, 0x6,0x31,0x4c, + 0xf,0x2b,0x22, 0x5,0x29,0x3b, 0x5,0x2d,0x62, 0x5,0x2d,0x64, + 0x4,0x2d,0x3d, 0x6,0x37,0x75, 0x4,0x2d,0x38, 0x5,0x2d,0x6d, + 0x5,0x2d,0x6b, 0x4,0x2d,0x39, 0x4,0x29,0x57, 0x4,0x2d,0x35, + 0x5,0x2d,0x6a, 0x6,0x37,0x7b, 0x6,0x37,0x70, 0x6,0x37,0x7d, + 0x6,0x37,0x73, 0x5,0x2d,0x69, 0x6,0x37,0x72, 0x6,0x37,0x77, + 0x4,0x2d,0x36, 0x6,0x37,0x78, 0x5,0x2d,0x6c, 0x5,0x2d,0x65, + 0x4,0x2d,0x37, 0x5,0x2d,0x67, 0x5,0x2d,0x68, 0x4,0x2d,0x3a, + 0x6,0x37,0x7a, 0x5,0x2d,0x66, 0x6,0x31,0x57, 0x6,0x37,0x76, + 0x6,0x40,0x27, 0x6,0x37,0x79, 0x6,0x37,0x74, 0x5,0x29,0x46, + 0x6,0x37,0x7c, 0x6,0x37,0x7e, 0xf,0x2f,0x4c, 0xf,0x2f,0x4d, + 0xf,0x2f,0x4e, 0xf,0x2f,0x4f, 0xf,0x2f,0x50, 0xf,0x2f,0x51, + 0xf,0x2f,0x52, 0xf,0x2f,0x55, 0xf,0x2f,0x56, 0xf,0x2f,0x57, + 0xf,0x2f,0x5a, 0xf,0x2f,0x5b, 0xf,0x2f,0x5d, 0xf,0x2f,0x5e, + 0xf,0x2f,0x60, 0xf,0x2f,0x62, 0x6,0x40,0x28, 0xf,0x2f,0x58, + 0x6,0x37,0x6f, 0xf,0x2f,0x54, 0x4,0x31,0x72, 0x4,0x31,0x73, + 0x4,0x37,0x5e, 0x5,0x32,0x69, 0x6,0x40,0x31, 0x5,0x2d,0x6e, + 0x6,0x40,0x37, 0x5,0x32,0x63, 0x4,0x31,0x74, 0x4,0x32,0x22, + 0x4,0x31,0x76, 0x5,0x32,0x62, 0x4,0x31,0x7d, 0x5,0x38,0x61, + 0x5,0x32,0x64, 0x6,0x40,0x34, 0x5,0x32,0x67, 0x6,0x40,0x35, + 0x6,0x40,0x2c, 0x6,0x40,0x29, 0x4,0x32,0x24, 0x6,0x49,0x2f, + 0x6,0x49,0x2a, 0x6,0x40,0x2a, 0x5,0x32,0x65, 0x6,0x49,0x2d, + 0x4,0x37,0x5d, 0x6,0x40,0x2f, 0x6,0x49,0x2c, 0x6,0x49,0x2b, + 0x5,0x32,0x68, 0x6,0x40,0x2d, 0x6,0x49,0x2e, 0x6,0x40,0x33, + 0x6,0x40,0x30, 0x4,0x31,0x75, 0x6,0x40,0x2e, 0xf,0x34,0x78, + 0xf,0x34,0x79, 0xf,0x34,0x7a, 0xf,0x34,0x7b, 0xf,0x34,0x7c, + 0xf,0x34,0x7e, 0xf,0x35,0x22, 0xf,0x35,0x23, 0xf,0x35,0x24, + 0xf,0x35,0x25, 0xf,0x35,0x26, 0xf,0x35,0x27, 0xf,0x35,0x28, + 0xf,0x35,0x29, 0xf,0x35,0x2a, 0xf,0x35,0x2b, 0xf,0x35,0x2c, + 0xf,0x35,0x2e, 0xf,0x35,0x2d, 0xf,0x35,0x2f, 0xf,0x35,0x30, + 0xf,0x3b,0x31, 0xf,0x34,0x7d, 0x5,0x32,0x66, 0x4,0x32,0x26, + 0xf,0x3b,0x41, 0x5,0x38,0x6b, 0x6,0x49,0x34, 0x4,0x37,0x69, + 0x6,0x49,0x3b, 0x6,0x49,0x36, 0x5,0x38,0x6d, 0x6,0x49,0x41, + 0x5,0x38,0x74, 0x6,0x49,0x31, 0x4,0x3d,0x51, 0x4,0x37,0x67, + 0x5,0x38,0x62, 0x5,0x38,0x6a, 0x4,0x37,0x5f, 0x5,0x38,0x68, + 0x4,0x37,0x63, 0x5,0x38,0x69, 0x4,0x37,0x6a, 0x5,0x38,0x66, + 0x4,0x37,0x6d, 0x5,0x38,0x6f, 0x4,0x37,0x66, 0x6,0x49,0x42, + 0x6,0x49,0x43, 0x6,0x49,0x3a, 0x5,0x38,0x71, 0x6,0x49,0x33, + 0x6,0x49,0x46, 0x6,0x49,0x37, 0x5,0x38,0x70, 0x4,0x37,0x6c, + 0x6,0x49,0x47, 0x6,0x49,0x32, 0x5,0x38,0x6c, 0x5,0x38,0x6e, + 0x6,0x49,0x44, 0x5,0x38,0x64, 0x6,0x49,0x3c, 0x6,0x49,0x45, + 0x6,0x49,0x40, 0x6,0x49,0x4c, 0x6,0x49,0x3f, 0x6,0x49,0x4d, + 0x6,0x49,0x48, 0x6,0x49,0x39, 0x5,0x38,0x72, 0x6,0x49,0x3d, + 0x5,0x38,0x73, 0x5,0x38,0x67, 0x6,0x49,0x38, 0x6,0x49,0x4b, + 0x5,0x38,0x65, 0x6,0x52,0x73, 0xf,0x3b,0x30, 0xf,0x3b,0x32, + 0xf,0x3b,0x34, 0xf,0x3b,0x35, 0xf,0x3b,0x36, 0xf,0x3b,0x37, + 0xf,0x3b,0x38, 0xf,0x3b,0x39, 0xf,0x3b,0x3a, 0xf,0x3b,0x3b, + 0xf,0x3b,0x3c, 0xf,0x3b,0x3d, 0xf,0x3b,0x3f, 0xf,0x3b,0x40, + 0xf,0x3b,0x42, 0xf,0x3b,0x43, 0xf,0x3b,0x44, 0xf,0x3b,0x45, + 0xf,0x3b,0x46, 0xf,0x3b,0x48, 0xf,0x3b,0x49, 0xf,0x3b,0x4a, + 0x6,0x52,0x74, 0x6,0x49,0x3e, 0x6,0x49,0x49, 0x6,0x49,0x35, + 0x5,0x38,0x63, 0xf,0x3b,0x47, 0x5,0x3f,0x52, 0x6,0x52,0x7b, + 0x4,0x3d,0x4b, 0x4,0x3d,0x49, 0x5,0x3f,0x55, 0x4,0x3d,0x46, + 0x6,0x52,0x78, 0x4,0x3d,0x4d, 0x4,0x3d,0x53, 0x4,0x3d,0x47, + 0x4,0x3d,0x52, 0x6,0x52,0x7e, 0x5,0x3f,0x51, 0x5,0x46,0x21, + 0x5,0x3f,0x4b, 0x6,0x5d,0x2c, 0x6,0x53,0x25, 0x6,0x52,0x75, + 0x6,0x53,0x23, 0x6,0x53,0x22, 0x5,0x3f,0x4d, 0x5,0x3f,0x53, + 0x5,0x3f,0x4e, 0x6,0x52,0x79, 0x6,0x53,0x21, 0x5,0x3f,0x50, + 0x6,0x53,0x24, 0x6,0x52,0x7c, 0x5,0x3f,0x4c, 0x6,0x52,0x7a, + 0x5,0x3f,0x4f, 0xf,0x41,0x56, 0xf,0x41,0x57, 0xf,0x41,0x58, + 0xf,0x41,0x59, 0xf,0x41,0x5a, 0xf,0x41,0x5b, 0xf,0x41,0x5c, + 0xf,0x41,0x5d, 0xf,0x41,0x5e, 0xf,0x41,0x60, 0xf,0x41,0x61, + 0xf,0x41,0x63, 0xf,0x41,0x64, 0xf,0x41,0x65, 0xf,0x41,0x66, + 0xf,0x41,0x67, 0xf,0x41,0x69, 0xf,0x48,0x30, 0x6,0x52,0x77, + 0x6,0x52,0x7d, 0x6,0x52,0x76, 0xf,0x41,0x68, 0x5,0x3f,0x54, + 0x6,0x5d,0x36, 0x5,0x4d,0x39, 0x5,0x46,0x27, 0x5,0x46,0x2a, + 0x4,0x43,0x62, 0x4,0x43,0x5f, 0x6,0x5d,0x3c, 0x6,0x5d,0x3d, + 0x6,0x5d,0x2e, 0x4,0x43,0x57, 0x6,0x5d,0x3f, 0x5,0x46,0x26, + 0x4,0x43,0x63, 0x5,0x4d,0x38, 0x5,0x46,0x29, 0x6,0x5d,0x35, + 0x4,0x43,0x59, 0x7,0x23,0x2f, 0x4,0x43,0x5b, 0x4,0x43,0x5a, + 0x7,0x23,0x2e, 0x7,0x23,0x31, 0x5,0x46,0x24, 0x4,0x43,0x65, + 0x6,0x5d,0x39, 0x6,0x5d,0x3e, 0x6,0x5d,0x3a, 0x5,0x46,0x28, + 0x6,0x5d,0x37, 0x5,0x46,0x2b, 0x7,0x23,0x2c, 0x6,0x5d,0x3b, + 0x6,0x5d,0x33, 0x6,0x5d,0x31, 0x5,0x46,0x22, 0x4,0x43,0x60, + 0x6,0x5d,0x2f, 0x6,0x5d,0x34, 0xf,0x48,0x2b, 0xf,0x48,0x2c, + 0xf,0x48,0x2d, 0xf,0x48,0x2e, 0xf,0x48,0x2f, 0xf,0x48,0x33, + 0xf,0x48,0x34, 0xf,0x48,0x35, 0xf,0x48,0x37, 0xf,0x48,0x38, + 0xf,0x48,0x3a, 0xf,0x48,0x3b, 0xf,0x48,0x39, 0xf,0x48,0x3c, + 0xf,0x48,0x3d, 0xf,0x48,0x3e, 0xf,0x48,0x3f, 0xf,0x48,0x40, + 0xf,0x48,0x41, 0xf,0x48,0x42, 0xf,0x48,0x43, 0xf,0x48,0x44, + 0xf,0x48,0x45, 0xf,0x48,0x47, 0xf,0x48,0x48, 0xf,0x48,0x49, + 0xf,0x48,0x46, 0x6,0x5d,0x30, 0xf,0x48,0x36, 0x7,0x23,0x33, + 0x7,0x23,0x38, 0x5,0x4d,0x3c, 0x4,0x4a,0x25, 0x7,0x23,0x3d, + 0x7,0x23,0x37, 0x7,0x23,0x39, 0x4,0x49,0x7b, 0x4,0x49,0x78, + 0x5,0x4d,0x3d, 0x5,0x4d,0x3b, 0x7,0x23,0x45, 0x4,0x49,0x7d, + 0x7,0x2e,0x2f, 0x4,0x4a,0x21, 0x5,0x4d,0x41, 0x4,0x4a,0x26, + 0x4,0x49,0x7c, 0x5,0x54,0x59, 0x7,0x2e,0x3c, 0x7,0x23,0x35, + 0x7,0x23,0x34, 0x7,0x2e,0x2d, 0x7,0x2e,0x2b, 0x7,0x23,0x44, + 0x7,0x2e,0x2c, 0x7,0x23,0x3c, 0x5,0x4d,0x40, 0x7,0x2e,0x2e, + 0x5,0x4d,0x3f, 0x7,0x23,0x3b, 0x7,0x23,0x42, 0x7,0x23,0x43, + 0x7,0x23,0x3e, 0x7,0x23,0x41, 0x4,0x49,0x77, 0xf,0x48,0x31, + 0x7,0x23,0x32, 0x7,0x23,0x3f, 0x7,0x23,0x40, 0xf,0x4e,0x7c, + 0xf,0x4e,0x7d, 0xf,0x4e,0x7e, 0xf,0x4f,0x21, 0xf,0x4f,0x22, + 0xf,0x4f,0x23, 0xf,0x4f,0x26, 0xf,0x4f,0x27, 0xf,0x4f,0x28, + 0xf,0x4f,0x29, 0xf,0x4f,0x2a, 0xf,0x4f,0x2b, 0xf,0x4f,0x2d, + 0xf,0x4f,0x2e, 0xf,0x4f,0x2f, 0xf,0x4f,0x30, 0xf,0x54,0x5f, + 0xf,0x4f,0x24, 0x4,0x56,0x38, 0x4,0x50,0x41, 0x7,0x2e,0x35, + 0x7,0x2e,0x30, 0x5,0x54,0x5a, 0x5,0x54,0x5b, 0x7,0x2e,0x3e, + 0x7,0x2e,0x3a, 0x7,0x2e,0x32, 0x7,0x23,0x36, 0x4,0x50,0x3e, + 0x4,0x50,0x43, 0x4,0x50,0x40, 0x5,0x54,0x5d, 0x4,0x50,0x3f, + 0x7,0x2e,0x3d, 0x4,0x50,0x46, 0x7,0x2e,0x3b, 0x4,0x50,0x48, + 0x4,0x50,0x42, 0x4,0x50,0x47, 0x7,0x2e,0x39, 0x7,0x2e,0x31, + 0x7,0x2e,0x40, 0x7,0x38,0x29, 0x7,0x2e,0x38, 0x5,0x54,0x5f, + 0x5,0x54,0x5c, 0x7,0x2e,0x37, 0x7,0x38,0x28, 0x7,0x2e,0x33, + 0x7,0x2e,0x3f, 0xf,0x54,0x55, 0xf,0x54,0x56, 0xf,0x54,0x57, + 0xf,0x54,0x58, 0xf,0x54,0x59, 0xf,0x54,0x5a, 0xf,0x54,0x5b, + 0xf,0x54,0x5c, 0xf,0x54,0x5d, 0xf,0x54,0x5e, 0xf,0x54,0x60, + 0x7,0x2e,0x34, 0x7,0x2e,0x36, 0x4,0x50,0x44, 0xf,0x54,0x54, + 0x5,0x5b,0x56, 0x7,0x38,0x31, 0x5,0x5b,0x57, 0x7,0x38,0x36, + 0x4,0x56,0x3b, 0x7,0x38,0x2f, 0x7,0x38,0x35, 0x4,0x56,0x3a, + 0x7,0x38,0x34, 0x7,0x38,0x2c, 0x5,0x5b,0x58, 0x4,0x56,0x37, + 0x5,0x5b,0x55, 0x7,0x38,0x2a, 0x7,0x38,0x37, 0x7,0x38,0x30, + 0x7,0x38,0x2e, 0x7,0x38,0x32, 0x7,0x38,0x38, 0x7,0x38,0x2b, + 0x7,0x38,0x2d, 0xf,0x5a,0x30, 0xf,0x5a,0x31, 0xf,0x5a,0x32, + 0xf,0x5a,0x33, 0xf,0x5a,0x34, 0xf,0x5a,0x35, 0x7,0x38,0x33, + 0x4,0x5b,0x33, 0x4,0x5b,0x38, 0x5,0x61,0x6e, 0x5,0x61,0x6b, + 0x5,0x61,0x6c, 0x5,0x61,0x6d, 0x7,0x3f,0x68, 0x7,0x3f,0x67, + 0x4,0x5b,0x35, 0x4,0x5b,0x37, 0x5,0x67,0x7a, 0x5,0x6c,0x2d, + 0x7,0x3f,0x69, 0x7,0x3f,0x66, 0x4,0x5b,0x34, 0x7,0x3f,0x63, + 0x7,0x3f,0x65, 0x7,0x47,0x2f, 0x7,0x3f,0x61, 0x7,0x3f,0x64, + 0xf,0x5e,0x68, 0xf,0x5e,0x69, 0xf,0x5e,0x6a, 0xf,0x5e,0x6d, + 0xf,0x5e,0x6e, 0xf,0x5e,0x6f, 0xf,0x5e,0x71, 0xf,0x5e,0x72, + 0xf,0x5e,0x74, 0xf,0x5e,0x6c, 0xf,0x5e,0x6b, 0x4,0x5f,0x66, + 0x4,0x5f,0x68, 0x4,0x5f,0x67, 0x4,0x5f,0x69, 0x5,0x6c,0x2f, + 0x7,0x47,0x32, 0x7,0x47,0x34, 0x7,0x47,0x36, 0x5,0x67,0x7b, + 0x7,0x47,0x30, 0x5,0x6c,0x2e, 0x7,0x47,0x38, 0x4,0x5f,0x6b, + 0x7,0x47,0x35, 0x7,0x47,0x33, 0x7,0x47,0x31, 0x4,0x5f,0x6a, + 0x5,0x67,0x79, 0xf,0x62,0x3e, 0xf,0x62,0x3f, 0xf,0x62,0x40, + 0xf,0x62,0x41, 0xf,0x62,0x42, 0xf,0x62,0x43, 0xf,0x62,0x44, + 0xf,0x62,0x45, 0xf,0x62,0x46, 0xf,0x62,0x49, 0xf,0x65,0x2f, + 0x7,0x3f,0x6a, 0x7,0x47,0x37, 0xf,0x62,0x47, 0x5,0x6c,0x32, + 0x4,0x66,0x3f, 0x7,0x4d,0x6d, 0x4,0x63,0x48, 0x7,0x4d,0x6c, + 0x4,0x63,0x49, 0x7,0x4d,0x70, 0x4,0x63,0x4a, 0x7,0x4d,0x6e, + 0x5,0x6c,0x33, 0x5,0x6c,0x30, 0x5,0x6c,0x31, 0x7,0x4d,0x6f, + 0xf,0x65,0x2d, 0xf,0x65,0x2e, 0xf,0x65,0x30, 0x7,0x53,0x44, + 0x7,0x57,0x77, 0x4,0x66,0x41, 0x7,0x53,0x3f, 0x7,0x53,0x43, + 0x7,0x53,0x42, 0x4,0x66,0x42, 0x5,0x73,0x45, 0x7,0x53,0x41, + 0x7,0x53,0x40, 0xf,0x67,0x56, 0xf,0x67,0x57, 0xf,0x67,0x58, + 0xf,0x67,0x59, 0x7,0x57,0x78, 0x7,0x57,0x79, 0x5,0x73,0x44, + 0x5,0x73,0x47, 0x5,0x70,0x23, 0x7,0x57,0x7a, 0x5,0x73,0x42, + 0x5,0x73,0x46, 0x7,0x57,0x7c, 0x7,0x5b,0x57, 0x7,0x53,0x3e, + 0xf,0x69,0x43, 0xf,0x69,0x44, 0x5,0x73,0x43, 0x7,0x57,0x7b, + 0x7,0x5b,0x58, 0xf,0x6a,0x54, 0xf,0x6a,0x55, 0xf,0x6a,0x56, + 0x7,0x5e,0x6a, 0x5,0x77,0x5d, 0x7,0x5e,0x69, 0x4,0x6b,0x6b, + 0x7,0x5e,0x6b, 0x5,0x77,0x5c, 0x7,0x5e,0x68, 0xf,0x6b,0x49, + 0xf,0x6b,0x4a, 0xf,0x6b,0x4b, 0xf,0x6b,0x4c, 0x7,0x62,0x38, + 0xf,0x6c,0x2a, 0xf,0x6c,0x2b, 0x4,0x6d,0x73, 0x7,0x63,0x53, + 0xf,0x6c,0x61, 0x7,0x66,0x26, 0x4,0x22,0x77, 0x4,0x24,0x3d, + 0x4,0x26,0x5a, 0xf,0x27,0x31, 0xf,0x27,0x32, 0xf,0x27,0x33, + 0x6,0x31,0x58, 0x6,0x38,0x22, 0x5,0x2f,0x5c, 0x4,0x2d,0x3e, + 0x6,0x38,0x21, 0x6,0x36,0x44, 0x6,0x40,0x39, 0x6,0x40,0x38, + 0x6,0x49,0x4f, 0x6,0x49,0x4e, 0xf,0x3b,0x4c, 0xf,0x3b,0x4d, + 0x5,0x38,0x75, 0x6,0x53,0x26, 0xf,0x41,0x6a, 0x6,0x53,0x27, + 0x5,0x46,0x2d, 0x6,0x5d,0x40, 0x7,0x23,0x46, 0x7,0x23,0x47, + 0x5,0x54,0x60, 0xf,0x54,0x61, 0x7,0x38,0x3b, 0x7,0x38,0x3a, + 0x5,0x5b,0x59, 0x7,0x38,0x3c, 0x7,0x4d,0x71, 0x5,0x24,0x3f, + 0x6,0x27,0x79, 0x5,0x24,0x40, 0x6,0x27,0x7a, 0x5,0x24,0x41, + 0x6,0x27,0x78, 0x6,0x2b,0x68, 0x4,0x26,0x60, 0x5,0x26,0x42, + 0x5,0x26,0x40, 0x4,0x26,0x5d, 0x6,0x2b,0x6c, 0x6,0x2b,0x66, + 0x6,0x2b,0x6a, 0x6,0x2b,0x69, 0x6,0x2b,0x67, 0x5,0x26,0x3f, + 0x5,0x26,0x41, 0x4,0x26,0x5c, 0x4,0x29,0x60, 0x6,0x31,0x59, + 0x5,0x29,0x4c, 0x5,0x29,0x4b, 0x6,0x31,0x5c, 0x6,0x31,0x5e, + 0x6,0x31,0x5d, 0x5,0x29,0x49, 0x5,0x29,0x4a, 0x4,0x29,0x5e, + 0x4,0x29,0x5f, 0x6,0x31,0x5b, 0x6,0x38,0x23, 0x6,0x38,0x24, + 0x6,0x38,0x26, 0x5,0x2d,0x72, 0x6,0x31,0x5f, 0x4,0x2d,0x45, + 0x6,0x38,0x28, 0x5,0x2d,0x70, 0x6,0x38,0x2a, 0x5,0x2d,0x6f, + 0x5,0x2d,0x74, 0x6,0x38,0x25, 0x5,0x2d,0x73, 0x5,0x2d,0x71, + 0x6,0x38,0x29, 0x6,0x38,0x27, 0x4,0x2d,0x41, 0x5,0x32,0x6d, + 0x6,0x40,0x40, 0x4,0x32,0x2e, 0x6,0x40,0x3a, 0x6,0x40,0x3b, + 0x6,0x40,0x3d, 0x5,0x32,0x6f, 0x5,0x32,0x70, 0x4,0x32,0x30, + 0x6,0x40,0x3e, 0x6,0x40,0x3c, 0x5,0x32,0x6b, 0x6,0x40,0x41, + 0x4,0x32,0x31, 0x4,0x32,0x2a, 0x4,0x32,0x2d, 0x4,0x32,0x29, + 0x5,0x32,0x6e, 0xf,0x35,0x31, 0xf,0x35,0x32, 0xf,0x35,0x33, + 0xf,0x35,0x34, 0xf,0x35,0x35, 0x5,0x32,0x6a, 0x6,0x40,0x3f, + 0x6,0x49,0x58, 0x5,0x39,0x22, 0x6,0x49,0x55, 0x4,0x37,0x7a, + 0x4,0x37,0x7b, 0x6,0x49,0x59, 0x6,0x49,0x54, 0x6,0x49,0x5a, + 0x5,0x38,0x76, 0x5,0x38,0x7e, 0x5,0x39,0x21, 0x5,0x38,0x7d, + 0x5,0x38,0x77, 0x6,0x49,0x56, 0x5,0x38,0x7b, 0x6,0x49,0x51, + 0x6,0x49,0x50, 0x6,0x49,0x53, 0x4,0x37,0x72, 0x4,0x37,0x73, + 0x4,0x37,0x74, 0x5,0x38,0x78, 0x5,0x38,0x79, 0x5,0x32,0x6c, + 0x6,0x49,0x52, 0x6,0x53,0x2f, 0x5,0x38,0x7a, 0x5,0x3f,0x57, + 0x5,0x3f,0x5a, 0x5,0x3f,0x5c, 0x4,0x3d,0x57, 0x4,0x3d,0x5f, + 0x6,0x53,0x2b, 0x6,0x53,0x2e, 0x6,0x53,0x29, 0x5,0x3f,0x5b, + 0x6,0x53,0x30, 0x6,0x53,0x2d, 0x6,0x53,0x28, 0x4,0x3d,0x60, + 0x5,0x3f,0x56, 0x6,0x53,0x31, 0x5,0x3f,0x59, 0x4,0x3d,0x5e, + 0x4,0x3d,0x55, 0x4,0x3d,0x56, 0x4,0x3d,0x58, 0x5,0x3f,0x58, + 0x6,0x53,0x2a, 0xf,0x41,0x6b, 0x6,0x53,0x2c, 0x5,0x32,0x71, + 0x4,0x3d,0x5a, 0x6,0x55,0x60, 0x5,0x46,0x34, 0x6,0x5d,0x49, + 0x5,0x46,0x32, 0x6,0x5d,0x41, 0x4,0x43,0x68, 0x5,0x46,0x31, + 0x6,0x5d,0x42, 0x5,0x46,0x2f, 0x6,0x5d,0x46, 0x5,0x46,0x37, + 0x5,0x46,0x35, 0x6,0x5d,0x47, 0x6,0x5d,0x45, 0x6,0x5d,0x44, + 0x6,0x5d,0x48, 0x6,0x5d,0x43, 0x6,0x5d,0x4a, 0x5,0x46,0x33, + 0x4,0x43,0x67, 0x5,0x46,0x36, 0x6,0x5d,0x4b, 0x5,0x48,0x25, + 0x5,0x4d,0x42, 0x5,0x4d,0x47, 0x4,0x4a,0x2c, 0x7,0x23,0x4e, + 0x7,0x23,0x49, 0x7,0x23,0x48, 0x5,0x4d,0x46, 0x7,0x23,0x52, + 0x7,0x23,0x4f, 0x7,0x23,0x4d, 0x5,0x4d,0x45, 0x7,0x23,0x50, + 0x5,0x4d,0x43, 0x5,0x4d,0x44, 0xf,0x4f,0x31, 0x7,0x23,0x4b, + 0x7,0x23,0x4c, 0x7,0x23,0x4a, 0x4,0x50,0x4b, 0x7,0x2e,0x42, + 0x7,0x2e,0x46, 0x7,0x2e,0x48, 0xf,0x54,0x62, 0x5,0x54,0x61, + 0x7,0x2e,0x4b, 0x7,0x2e,0x47, 0x7,0x2e,0x49, 0x7,0x2e,0x41, + 0x7,0x2e,0x45, 0x7,0x2e,0x4c, 0x5,0x54,0x63, 0x7,0x2e,0x4a, + 0x4,0x50,0x4a, 0x5,0x54,0x64, 0x5,0x54,0x65, 0x5,0x54,0x66, + 0xf,0x54,0x63, 0x7,0x2e,0x44, 0x5,0x54,0x62, 0x7,0x23,0x51, + 0x5,0x54,0x67, 0x7,0x38,0x3e, 0x7,0x38,0x3d, 0x5,0x5b,0x5a, + 0x5,0x5b,0x5e, 0x5,0x5b,0x5d, 0x4,0x56,0x3c, 0x4,0x56,0x3d, + 0x5,0x5b,0x5b, 0xf,0x5a,0x37, 0xf,0x5a,0x38, 0x7,0x38,0x3f, + 0x5,0x5b,0x5c, 0x5,0x61,0x70, 0x7,0x3f,0x6c, 0x5,0x61,0x6f, + 0x4,0x5b,0x3b, 0x7,0x3f,0x6d, 0x7,0x3f,0x6e, 0x4,0x5b,0x39, + 0x7,0x3f,0x6b, 0x5,0x68,0x21, 0x5,0x67,0x7e, 0x5,0x67,0x7c, + 0x5,0x67,0x7d, 0xf,0x62,0x4a, 0x5,0x6c,0x34, 0x4,0x63,0x4d, + 0x5,0x6c,0x35, 0x7,0x4d,0x72, 0x4,0x63,0x4b, 0x7,0x4d,0x75, + 0x7,0x4d,0x74, 0x5,0x6c,0x36, 0x7,0x4d,0x76, 0x7,0x4d,0x77, + 0x4,0x66,0x44, 0x5,0x70,0x25, 0x5,0x70,0x26, 0x5,0x73,0x48, + 0xf,0x69,0x45, 0x7,0x5b,0x59, 0x5,0x75,0x6b, 0x4,0x6a,0x4a, + 0x7,0x5b,0x5a, 0x4,0x6c,0x6f, 0xf,0x6c,0x62, 0xf,0x22,0x53, + 0xf,0x24,0x46, 0x6,0x2b,0x6d, 0xf,0x2b,0x2d, 0xf,0x2b,0x2e, + 0xf,0x2b,0x2f, 0x6,0x38,0x2d, 0x6,0x38,0x2e, 0xf,0x2f,0x65, + 0x6,0x40,0x42, 0x6,0x40,0x44, 0xf,0x35,0x37, 0xf,0x35,0x38, + 0x6,0x40,0x43, 0xf,0x3b,0x4e, 0x5,0x3f,0x5d, 0xf,0x41,0x6c, + 0x6,0x53,0x32, 0xf,0x35,0x36, 0x5,0x4d,0x48, 0x7,0x23,0x54, + 0x7,0x23,0x53, 0x5,0x4d,0x49, 0xf,0x4f,0x33, 0xf,0x4f,0x34, + 0x5,0x4d,0x4a, 0x7,0x2e,0x4d, 0xf,0x5a,0x39, 0xf,0x5e,0x75, + 0xf,0x62,0x4b, 0xf,0x67,0x5a, 0x7,0x5b,0x5b, 0x6,0x22,0x22, + 0xf,0x27,0x34, 0x6,0x31,0x60, 0x4,0x2d,0x48, 0x5,0x2d,0x76, + 0x5,0x2d,0x75, 0x6,0x38,0x2f, 0x5,0x32,0x72, 0xf,0x35,0x39, + 0x6,0x40,0x46, 0x6,0x40,0x45, 0x6,0x49,0x5d, 0xf,0x40,0x32, + 0x6,0x49,0x5b, 0x6,0x49,0x5c, 0x4,0x3d,0x61, 0x6,0x5d,0x4c, + 0x5,0x3f,0x5e, 0xf,0x41,0x6d, 0x4,0x43,0x6a, 0x4,0x4a,0x2d, + 0x7,0x23,0x55, 0x7,0x38,0x40, 0x4,0x5f,0x6c, 0x6,0x22,0x23, + 0xf,0x24,0x47, 0x6,0x2b,0x6f, 0x6,0x2b,0x6e, 0x6,0x31,0x61, + 0xf,0x2f,0x66, 0x4,0x32,0x32, 0x6,0x40,0x48, 0x6,0x40,0x47, + 0x6,0x49,0x60, 0x6,0x49,0x64, 0x6,0x49,0x63, 0x5,0x39,0x23, + 0x6,0x49,0x66, 0x6,0x49,0x5f, 0x6,0x49,0x5e, 0x6,0x49,0x62, + 0x4,0x37,0x7c, 0x6,0x4c,0x3e, 0x6,0x49,0x65, 0x4,0x3d,0x62, + 0x6,0x53,0x36, 0x6,0x53,0x34, 0x6,0x53,0x37, 0x5,0x3f,0x5f, + 0x6,0x5d,0x4f, 0x6,0x5d,0x4e, 0x6,0x5d,0x50, 0x3,0x47,0x31, + 0x4,0x4a,0x2f, 0x6,0x5d,0x4d, 0x5,0x4d,0x4c, 0x5,0x4d,0x4d, + 0x7,0x2e,0x51, 0x7,0x2e,0x50, 0x7,0x2e,0x4f, 0x7,0x2e,0x52, + 0x7,0x2e,0x4e, 0x4,0x50,0x4d, 0x7,0x38,0x41, 0x7,0x38,0x42, + 0x7,0x3f,0x6f, 0x4,0x5b,0x3c, 0x7,0x3f,0x70, 0x7,0x3f,0x71, + 0x7,0x47,0x39, 0xf,0x62,0x4c, 0x7,0x4d,0x78, 0x7,0x57,0x7d, + 0x4,0x24,0x42, 0x6,0x27,0x7b, 0xf,0x27,0x35, 0xf,0x27,0x36, + 0x5,0x29,0x4d, 0x6,0x31,0x64, 0x6,0x31,0x63, 0xf,0x2b,0x30, + 0x6,0x31,0x62, 0x4,0x2d,0x4a, 0x5,0x2d,0x77, 0x6,0x38,0x31, + 0x6,0x38,0x33, 0x6,0x38,0x35, 0xf,0x2f,0x67, 0xf,0x2f,0x68, + 0xf,0x2f,0x69, 0xf,0x2f,0x6a, 0x6,0x38,0x32, 0x4,0x32,0x33, + 0x4,0x32,0x35, 0x6,0x40,0x4a, 0xf,0x35,0x3a, 0xf,0x35,0x3b, + 0x6,0x40,0x49, 0x6,0x49,0x69, 0x5,0x39,0x25, 0x5,0x39,0x24, + 0x6,0x49,0x68, 0x6,0x49,0x6a, 0x6,0x49,0x67, 0xf,0x3b,0x4f, + 0xf,0x3b,0x50, 0x6,0x53,0x38, 0x5,0x3f,0x60, 0x6,0x53,0x39, + 0xf,0x41,0x6e, 0xf,0x41,0x6f, 0x5,0x46,0x38, 0x5,0x46,0x3a, + 0x6,0x5d,0x52, 0x5,0x46,0x39, 0x7,0x23,0x56, 0xf,0x4f,0x35, + 0x7,0x2e,0x53, 0x5,0x54,0x68, 0x7,0x38,0x43, 0x5,0x5b,0x5f, + 0x7,0x3f,0x73, 0x5,0x61,0x71, 0x4,0x5b,0x3d, 0x7,0x3f,0x74, + 0x7,0x3f,0x72, 0x7,0x47,0x3a, 0x7,0x53,0x45, 0x4,0x68,0x6d, + 0x7,0x57,0x7e, 0x7,0x5e,0x6c, 0x7,0x60,0x70, 0x5,0x24,0x42, + 0x5,0x29,0x4e, 0x5,0x2d,0x79, 0x5,0x2d,0x78, 0x4,0x37,0x7d, + 0x6,0x49,0x6b, 0x6,0x53,0x3a, 0x6,0x53,0x3b, 0x4,0x3d,0x66, + 0xf,0x4f,0x36, 0x6,0x23,0x2c, 0x6,0x23,0x2b, 0x6,0x24,0x7b, + 0x5,0x22,0x73, 0x6,0x24,0x7a, 0x6,0x24,0x7c, 0xf,0x22,0x54, + 0xf,0x24,0x4b, 0x6,0x27,0x7c, 0x6,0x27,0x7d, 0x6,0x28,0x25, + 0x5,0x24,0x43, 0x6,0x28,0x22, 0x6,0x27,0x7e, 0x6,0x28,0x24, + 0x6,0x28,0x23, 0x6,0x28,0x21, 0xf,0x24,0x48, 0xf,0x24,0x4a, + 0xf,0x24,0x4c, 0x4,0x24,0x44, 0x5,0x26,0x48, 0x6,0x2b,0x74, + 0x6,0x2b,0x73, 0x5,0x26,0x49, 0x6,0x2b,0x7d, 0x5,0x26,0x44, + 0x6,0x2b,0x79, 0x5,0x26,0x47, 0x6,0x2b,0x7a, 0x6,0x2b,0x77, + 0x5,0x26,0x46, 0x5,0x26,0x45, 0x6,0x2b,0x75, 0x6,0x2b,0x78, + 0xf,0x27,0x37, 0xf,0x27,0x38, 0xf,0x27,0x39, 0xf,0x27,0x3a, + 0xf,0x27,0x3b, 0xf,0x27,0x3c, 0xf,0x27,0x3d, 0x6,0x2b,0x71, + 0x6,0x2b,0x7b, 0x6,0x2b,0x7c, 0x6,0x2b,0x72, 0x6,0x2b,0x76, + 0x5,0x29,0x51, 0x6,0x31,0x65, 0x6,0x31,0x66, 0x5,0x29,0x50, + 0x4,0x29,0x66, 0x6,0x31,0x68, 0x6,0x31,0x69, 0x4,0x29,0x68, + 0xf,0x2b,0x31, 0xf,0x2b,0x32, 0x6,0x31,0x6a, 0xf,0x2b,0x35, + 0xf,0x2b,0x36, 0x6,0x31,0x6e, 0x6,0x31,0x6c, 0x6,0x31,0x6b, + 0x5,0x2d,0x7e, 0x6,0x38,0x3a, 0x5,0x2e,0x21, 0x5,0x2e,0x22, + 0x5,0x2d,0x7b, 0x5,0x2e,0x23, 0x5,0x2d,0x7c, 0x5,0x2d,0x7a, + 0x6,0x38,0x3e, 0x6,0x38,0x38, 0x6,0x38,0x3c, 0x5,0x2d,0x7d, + 0x6,0x38,0x39, 0x6,0x38,0x3d, 0xf,0x2f,0x6b, 0xf,0x2f,0x6d, + 0x6,0x38,0x3b, 0xf,0x2f,0x6c, 0x6,0x38,0x41, 0x6,0x38,0x3f, + 0x5,0x32,0x73, 0x4,0x32,0x38, 0x4,0x38,0x21, 0x6,0x40,0x53, + 0x4,0x32,0x3d, 0x6,0x40,0x4e, 0x6,0x40,0x4b, 0x6,0x40,0x4c, + 0x6,0x40,0x50, 0x6,0x40,0x4d, 0x6,0x40,0x55, 0x5,0x32,0x75, + 0x6,0x38,0x40, 0x6,0x40,0x54, 0x6,0x40,0x56, 0xf,0x35,0x3c, + 0xf,0x35,0x3d, 0xf,0x35,0x3e, 0xf,0x35,0x3f, 0xf,0x35,0x40, + 0xf,0x35,0x41, 0xf,0x35,0x42, 0xf,0x35,0x43, 0xf,0x35,0x44, + 0xf,0x35,0x45, 0xf,0x35,0x46, 0xf,0x35,0x47, 0x6,0x40,0x52, + 0x5,0x32,0x74, 0x6,0x49,0x71, 0x6,0x49,0x74, 0x4,0x32,0x3c, + 0x5,0x3f,0x61, 0x5,0x39,0x2a, 0x6,0x49,0x6f, 0x5,0x39,0x27, + 0x6,0x49,0x70, 0x5,0x39,0x29, 0x5,0x39,0x26, 0x6,0x49,0x6c, + 0x6,0x49,0x6d, 0x4,0x38,0x23, 0x6,0x49,0x76, 0x5,0x39,0x2b, + 0x4,0x38,0x27, 0x6,0x49,0x6e, 0x6,0x49,0x75, 0x6,0x49,0x77, + 0xf,0x3b,0x51, 0xf,0x3b,0x53, 0xf,0x3b,0x54, 0xf,0x3b,0x56, + 0xf,0x3b,0x57, 0xf,0x3b,0x59, 0xf,0x3b,0x5a, 0xf,0x3b,0x5c, + 0xf,0x3b,0x5d, 0xf,0x3b,0x52, 0xf,0x3b,0x58, 0x4,0x38,0x26, + 0x4,0x38,0x28, 0x6,0x49,0x72, 0x5,0x39,0x2c, 0x5,0x39,0x28, + 0x6,0x53,0x43, 0x5,0x3f,0x63, 0x6,0x53,0x41, 0x6,0x5d,0x53, + 0x6,0x53,0x42, 0x6,0x53,0x3f, 0x6,0x53,0x44, 0xf,0x46,0x39, + 0xf,0x3b,0x5b, 0x6,0x53,0x3e, 0xf,0x41,0x70, 0xf,0x41,0x71, + 0xf,0x41,0x73, 0xf,0x41,0x74, 0xf,0x41,0x75, 0xf,0x41,0x76, + 0xf,0x41,0x77, 0xf,0x41,0x78, 0xf,0x41,0x79, 0xf,0x41,0x7a, + 0xf,0x41,0x7b, 0xf,0x41,0x7d, 0x5,0x3d,0x55, 0x6,0x53,0x45, + 0x6,0x53,0x40, 0x5,0x3f,0x64, 0x5,0x46,0x3b, 0x5,0x46,0x3f, + 0x5,0x46,0x3d, 0x5,0x46,0x3e, 0x6,0x5d,0x56, 0x5,0x46,0x40, + 0x5,0x46,0x43, 0x5,0x46,0x44, 0x4,0x43,0x6c, 0x5,0x46,0x42, + 0x5,0x4d,0x4e, 0xf,0x48,0x4a, 0xf,0x48,0x4b, 0xf,0x48,0x4c, + 0xf,0x48,0x4d, 0xf,0x48,0x4e, 0xf,0x48,0x4f, 0x6,0x5d,0x54, + 0x5,0x46,0x3c, 0x6,0x5d,0x57, 0x6,0x5d,0x59, 0x6,0x5d,0x5a, + 0x6,0x5d,0x55, 0x6,0x5d,0x58, 0x7,0x23,0x61, 0x7,0x23,0x5c, + 0x7,0x23,0x5b, 0x7,0x23,0x5e, 0x5,0x4d,0x52, 0x5,0x4d,0x55, + 0x7,0x23,0x5a, 0x7,0x23,0x57, 0x7,0x23,0x58, 0x7,0x23,0x62, + 0xf,0x4f,0x37, 0xf,0x4f,0x39, 0xf,0x4f,0x3a, 0x5,0x4d,0x54, + 0x7,0x23,0x60, 0xf,0x4e,0x30, 0x7,0x23,0x5d, 0x7,0x23,0x5f, + 0x7,0x23,0x59, 0x5,0x4d,0x51, 0x5,0x54,0x69, 0x5,0x54,0x6b, + 0x7,0x2e,0x57, 0x4,0x50,0x55, 0x7,0x2e,0x55, 0x7,0x2e,0x5b, + 0x7,0x2e,0x59, 0x7,0x2e,0x5d, 0x4,0x50,0x54, 0x7,0x2e,0x5c, + 0x7,0x2e,0x54, 0xf,0x54,0x65, 0xf,0x54,0x66, 0xf,0x54,0x67, + 0xf,0x54,0x69, 0xf,0x54,0x6a, 0x7,0x2e,0x58, 0x5,0x4d,0x4f, + 0x7,0x2d,0x62, 0xf,0x54,0x68, 0x7,0x2e,0x43, 0x5,0x54,0x6a, + 0x7,0x2e,0x56, 0xf,0x4f,0x38, 0x7,0x38,0x47, 0x5,0x5b,0x60, + 0x5,0x5b,0x61, 0x7,0x38,0x48, 0x5,0x5b,0x62, 0x7,0x38,0x45, + 0x7,0x38,0x46, 0x7,0x38,0x49, 0xf,0x5a,0x3a, 0xf,0x5a,0x3b, + 0xf,0x5a,0x3c, 0x7,0x38,0x44, 0xf,0x5a,0x3d, 0x4,0x5b,0x3e, + 0x5,0x61,0x72, 0x5,0x61,0x73, 0x7,0x3f,0x75, 0xf,0x5e,0x76, + 0xf,0x5e,0x77, 0xf,0x5e,0x78, 0xf,0x5e,0x79, 0xf,0x5e,0x7b, + 0x7,0x3f,0x78, 0x5,0x68,0x23, 0x7,0x47,0x3d, 0x7,0x47,0x3c, + 0x5,0x68,0x22, 0x5,0x68,0x24, 0x7,0x47,0x3b, 0x7,0x47,0x3e, + 0xf,0x62,0x4d, 0x5,0x6c,0x37, 0xf,0x65,0x31, 0xf,0x65,0x32, + 0x5,0x6b,0x6e, 0x7,0x4d,0x79, 0x7,0x53,0x46, 0x7,0x58,0x21, + 0xf,0x69,0x46, 0x5,0x73,0x39, 0x5,0x73,0x49, 0x7,0x5b,0x5c, + 0x5,0x77,0x5e, 0x7,0x5e,0x6d, 0xf,0x6b,0x4d, 0x5,0x79,0x2b, + 0x7,0x64,0x47, 0xf,0x24,0x4d, 0x6,0x2b,0x7e, 0xf,0x27,0x3f, + 0xf,0x27,0x40, 0x6,0x2c,0x21, 0x5,0x29,0x53, 0x5,0x29,0x52, + 0x6,0x31,0x70, 0xf,0x2b,0x37, 0xf,0x2b,0x39, 0x6,0x31,0x6f, + 0x6,0x38,0x42, 0xf,0x2f,0x6f, 0xf,0x2f,0x70, 0xf,0x2f,0x71, + 0xf,0x2f,0x72, 0xf,0x2f,0x73, 0xf,0x35,0x49, 0xf,0x35,0x4a, + 0xf,0x3b,0x5f, 0x6,0x49,0x7a, 0x6,0x49,0x79, 0x5,0x3f,0x65, + 0x4,0x43,0x70, 0x6,0x53,0x46, 0x5,0x4d,0x57, 0x5,0x4d,0x56, + 0x7,0x23,0x63, 0xf,0x54,0x6b, 0x5,0x5b,0x63, 0x7,0x3f,0x7a, + 0x5,0x61,0x74, 0x7,0x3f,0x79, 0x7,0x3f,0x77, 0x4,0x5f,0x6d, + 0x7,0x4d,0x7a, 0x7,0x4d,0x7b, 0x5,0x7b,0x3f, 0x7,0x66,0x3e, + 0x6,0x23,0x2d, 0x6,0x24,0x7d, 0x5,0x24,0x44, 0x6,0x28,0x29, + 0x6,0x28,0x27, 0x6,0x28,0x28, 0x6,0x28,0x26, 0x6,0x2c,0x22, + 0x5,0x29,0x54, 0x4,0x29,0x69, 0x4,0x29,0x6a, 0xf,0x2b,0x3a, + 0x6,0x31,0x71, 0x6,0x38,0x43, 0xf,0x35,0x4b, 0x5,0x32,0x76, + 0x6,0x40,0x59, 0x6,0x40,0x5b, 0x6,0x49,0x7d, 0x6,0x49,0x7c, + 0x6,0x40,0x5a, 0x5,0x39,0x2d, 0xf,0x39,0x46, 0xf,0x3b,0x61, + 0xf,0x3b,0x62, 0x6,0x53,0x47, 0x5,0x3f,0x67, 0xf,0x3b,0x60, + 0xf,0x41,0x7e, 0xf,0x42,0x21, 0x6,0x53,0x48, 0x6,0x5d,0x5d, + 0x6,0x5d,0x5e, 0x7,0x23,0x64, 0x4,0x4a,0x34, 0x5,0x4d,0x59, + 0x4,0x4a,0x33, 0xf,0x4f,0x3b, 0xf,0x4f,0x3c, 0x5,0x54,0x6e, + 0x5,0x54,0x6c, 0x5,0x5b,0x64, 0x5,0x54,0x6d, 0xf,0x54,0x6d, + 0xf,0x54,0x6e, 0x7,0x38,0x4b, 0x7,0x38,0x4a, 0xf,0x5a,0x3e, + 0x5,0x61,0x75, 0xf,0x5e,0x7c, 0x7,0x3f,0x7b, 0x5,0x6c,0x38, + 0x5,0x75,0x6f, 0x5,0x77,0x5f, 0x5,0x21,0x48, 0x4,0x21,0x4e, + 0x4,0x21,0x7d, 0xf,0x21,0x65, 0x5,0x22,0x75, 0x6,0x25,0x22, + 0x5,0x22,0x74, 0x6,0x24,0x7e, 0x6,0x25,0x21, 0xf,0x22,0x56, + 0x4,0x22,0x7b, 0x4,0x22,0x7a, 0x6,0x28,0x2c, 0x4,0x24,0x49, + 0x6,0x28,0x2a, 0x6,0x28,0x2b, 0xf,0x24,0x4e, 0xf,0x24,0x4f, + 0xf,0x24,0x54, 0xf,0x24,0x50, 0xf,0x24,0x52, 0x5,0x24,0x46, + 0x6,0x28,0x2d, 0x5,0x24,0x45, 0x4,0x24,0x45, 0x4,0x26,0x6b, + 0x5,0x26,0x4c, 0x4,0x26,0x66, 0x5,0x26,0x4b, 0x6,0x2c,0x2b, + 0x5,0x26,0x50, 0x5,0x26,0x52, 0x6,0x2c,0x28, 0x6,0x2c,0x27, + 0x6,0x2c,0x26, 0x5,0x26,0x4d, 0x5,0x26,0x53, 0x5,0x26,0x4f, + 0x5,0x26,0x4e, 0xf,0x27,0x43, 0xf,0x27,0x45, 0xf,0x27,0x46, + 0xf,0x27,0x47, 0xf,0x27,0x49, 0xf,0x27,0x4a, 0xf,0x27,0x4b, + 0xf,0x27,0x4d, 0xf,0x27,0x4f, 0xf,0x27,0x51, 0xf,0x27,0x54, + 0xf,0x27,0x55, 0x6,0x2c,0x24, 0x6,0x2c,0x29, 0x5,0x26,0x54, + 0x6,0x2c,0x2c, 0xf,0x27,0x44, 0x6,0x2c,0x2d, 0x6,0x2c,0x2a, + 0xf,0x27,0x48, 0xf,0x27,0x42, 0x6,0x2c,0x25, 0x5,0x26,0x55, + 0x6,0x2d,0x5c, 0x6,0x31,0x74, 0x6,0x31,0x73, 0x4,0x29,0x6b, + 0x5,0x29,0x56, 0x6,0x31,0x75, 0x6,0x31,0x76, 0x5,0x29,0x55, + 0x5,0x29,0x59, 0x6,0x31,0x77, 0x5,0x2e,0x26, 0x5,0x29,0x5a, + 0x5,0x29,0x58, 0xf,0x27,0x53, 0xf,0x2b,0x3b, 0xf,0x2b,0x3c, + 0xf,0x2b,0x3d, 0xf,0x2b,0x3f, 0xf,0x2b,0x40, 0xf,0x2b,0x41, + 0xf,0x2b,0x42, 0xf,0x2b,0x43, 0xf,0x2b,0x44, 0xf,0x2b,0x45, + 0xf,0x2b,0x46, 0xf,0x2b,0x47, 0xf,0x2b,0x49, 0xf,0x2b,0x4a, + 0xf,0x2b,0x4b, 0xf,0x2b,0x4c, 0xf,0x2b,0x4d, 0xf,0x2b,0x4e, + 0xf,0x2b,0x4f, 0x5,0x29,0x5b, 0x6,0x40,0x5c, 0x6,0x38,0x4f, + 0x6,0x38,0x53, 0x6,0x38,0x4b, 0x6,0x38,0x4d, 0x6,0x38,0x46, + 0x5,0x2e,0x27, 0x6,0x38,0x48, 0x6,0x38,0x45, 0x6,0x38,0x51, + 0x4,0x2d,0x50, 0x6,0x40,0x5d, 0x5,0x29,0x57, 0x5,0x2e,0x29, + 0x5,0x2e,0x2a, 0x6,0x38,0x44, 0xf,0x2f,0x74, 0xf,0x2f,0x75, + 0xf,0x2f,0x76, 0xf,0x2f,0x78, 0xf,0x2f,0x79, 0xf,0x2f,0x7a, + 0xf,0x2f,0x7b, 0xf,0x2f,0x7c, 0xf,0x2f,0x7d, 0xf,0x2f,0x7e, + 0xf,0x30,0x21, 0xf,0x30,0x22, 0xf,0x30,0x23, 0xf,0x30,0x25, + 0xf,0x30,0x26, 0xf,0x30,0x27, 0xf,0x30,0x29, 0xf,0x30,0x2a, + 0xf,0x30,0x2b, 0xf,0x30,0x2c, 0xf,0x30,0x2e, 0x6,0x38,0x4c, + 0x6,0x38,0x47, 0x6,0x38,0x49, 0x4,0x2d,0x53, 0x6,0x38,0x4e, + 0xf,0x30,0x30, 0xf,0x30,0x28, 0x4,0x2d,0x5a, 0xf,0x30,0x2d, + 0x5,0x2e,0x2c, 0x5,0x2e,0x28, 0xf,0x2f,0x77, 0x6,0x38,0x52, + 0x6,0x40,0x68, 0x6,0x40,0x69, 0x6,0x40,0x5f, 0x5,0x32,0x77, + 0x5,0x33,0x21, 0x5,0x39,0x36, 0x4,0x32,0x45, 0x4,0x32,0x40, + 0x5,0x32,0x7d, 0x6,0x40,0x67, 0x6,0x4a,0x2e, 0x6,0x40,0x63, + 0xf,0x35,0x4c, 0xf,0x35,0x4d, 0xf,0x35,0x4f, 0xf,0x35,0x50, + 0xf,0x35,0x51, 0xf,0x35,0x52, 0xf,0x35,0x53, 0xf,0x35,0x54, + 0xf,0x35,0x55, 0xf,0x35,0x56, 0xf,0x35,0x58, 0xf,0x35,0x59, + 0xf,0x35,0x5a, 0xf,0x35,0x5b, 0xf,0x35,0x5c, 0xf,0x35,0x5d, + 0xf,0x35,0x5e, 0xf,0x35,0x5f, 0xf,0x35,0x60, 0xf,0x35,0x61, + 0xf,0x35,0x62, 0xf,0x35,0x63, 0xf,0x35,0x65, 0xf,0x35,0x66, + 0x6,0x40,0x64, 0x6,0x40,0x66, 0x6,0x40,0x65, 0x4,0x32,0x47, + 0x6,0x40,0x62, 0x6,0x40,0x60, 0x6,0x40,0x61, 0x4,0x32,0x44, + 0x5,0x33,0x22, 0x5,0x32,0x78, 0x5,0x32,0x7b, 0x5,0x32,0x7a, + 0x5,0x32,0x7c, 0x6,0x40,0x6a, 0xf,0x35,0x4e, 0x6,0x40,0x5e, + 0x4,0x38,0x36, 0x6,0x4a,0x34, 0x5,0x39,0x35, 0x6,0x53,0x49, + 0x4,0x38,0x2e, 0x5,0x39,0x38, 0x6,0x4a,0x22, 0x5,0x39,0x32, + 0x4,0x38,0x2b, 0x5,0x39,0x30, 0x5,0x39,0x34, 0x4,0x38,0x31, + 0x6,0x4a,0x2d, 0x6,0x4a,0x2f, 0x5,0x39,0x3a, 0x6,0x4a,0x24, + 0x6,0x4a,0x21, 0x5,0x39,0x37, 0x6,0x4a,0x33, 0x5,0x39,0x3c, + 0x5,0x39,0x3b, 0x6,0x4a,0x26, 0x4,0x38,0x30, 0x6,0x4a,0x27, + 0x6,0x4a,0x2a, 0x6,0x4a,0x31, 0x5,0x39,0x40, 0x6,0x53,0x4a, + 0x5,0x39,0x3d, 0x6,0x4a,0x38, 0x6,0x4a,0x23, 0x6,0x4a,0x25, + 0x6,0x4a,0x35, 0x4,0x38,0x33, 0x4,0x38,0x38, 0x6,0x4a,0x36, + 0x6,0x4a,0x37, 0xf,0x3b,0x64, 0xf,0x3b,0x65, 0xf,0x3b,0x67, + 0xf,0x3b,0x68, 0xf,0x3b,0x69, 0xf,0x3b,0x6b, 0xf,0x3b,0x6c, + 0xf,0x3b,0x6d, 0xf,0x3b,0x6f, 0xf,0x3b,0x71, 0xf,0x3b,0x72, + 0xf,0x3b,0x74, 0xf,0x3b,0x75, 0xf,0x3b,0x76, 0xf,0x3b,0x77, + 0xf,0x3b,0x78, 0xf,0x3b,0x79, 0xf,0x3b,0x7a, 0xf,0x3b,0x7b, + 0xf,0x3b,0x7c, 0xf,0x3b,0x7d, 0xf,0x3b,0x7e, 0xf,0x3c,0x22, + 0xf,0x3c,0x23, 0xf,0x3c,0x24, 0xf,0x3c,0x25, 0xf,0x3c,0x26, + 0xf,0x3c,0x27, 0xf,0x3c,0x28, 0xf,0x3c,0x2a, 0xf,0x3c,0x2b, + 0xf,0x3c,0x2c, 0xf,0x3c,0x2d, 0xf,0x3c,0x2e, 0xf,0x3c,0x2f, + 0x6,0x4a,0x29, 0x6,0x4a,0x2b, 0x6,0x4a,0x2c, 0x6,0x4a,0x32, + 0x5,0x39,0x42, 0x6,0x4a,0x30, 0x6,0x4a,0x39, 0x6,0x4a,0x28, + 0x5,0x39,0x3e, 0x5,0x39,0x41, 0x5,0x39,0x2e, 0x5,0x39,0x2f, + 0x5,0x39,0x31, 0x6,0x53,0x4e, 0x6,0x53,0x58, 0x4,0x3d,0x77, + 0x6,0x53,0x56, 0x4,0x3d,0x74, 0x6,0x53,0x57, 0x5,0x3f,0x6f, + 0x5,0x3f,0x6a, 0x5,0x3f,0x6e, 0x5,0x3f,0x6b, 0x4,0x3d,0x6a, + 0x6,0x53,0x5b, 0x5,0x3f,0x73, 0x6,0x53,0x61, 0x5,0x3f,0x68, + 0x4,0x3d,0x7a, 0x5,0x3f,0x74, 0x5,0x3f,0x69, 0x6,0x53,0x55, + 0x5,0x3f,0x70, 0x5,0x3f,0x6d, 0x6,0x53,0x60, 0x4,0x3d,0x73, + 0x6,0x53,0x59, 0x6,0x53,0x5a, 0x6,0x53,0x5d, 0x6,0x53,0x50, + 0x4,0x3d,0x70, 0x6,0x53,0x5c, 0x5,0x3f,0x6c, 0x6,0x53,0x63, + 0x6,0x53,0x4f, 0x6,0x53,0x51, 0x6,0x53,0x4c, 0xf,0x42,0x23, + 0xf,0x42,0x24, 0xf,0x42,0x25, 0xf,0x42,0x26, 0xf,0x42,0x27, + 0xf,0x42,0x29, 0xf,0x42,0x2a, 0xf,0x42,0x2b, 0xf,0x42,0x2c, + 0xf,0x42,0x2d, 0xf,0x42,0x2e, 0xf,0x42,0x30, 0xf,0x42,0x31, + 0xf,0x42,0x32, 0xf,0x42,0x33, 0xf,0x42,0x34, 0xf,0x42,0x35, + 0xf,0x42,0x36, 0xf,0x42,0x38, 0xf,0x42,0x39, 0xf,0x42,0x3a, + 0xf,0x42,0x3b, 0xf,0x42,0x3d, 0xf,0x42,0x3e, 0xf,0x42,0x3f, + 0xf,0x42,0x40, 0xf,0x42,0x41, 0xf,0x42,0x42, 0xf,0x42,0x43, + 0xf,0x42,0x44, 0xf,0x42,0x45, 0xf,0x42,0x46, 0xf,0x42,0x48, + 0xf,0x42,0x4a, 0xf,0x42,0x4c, 0x6,0x53,0x4d, 0x6,0x53,0x52, + 0x6,0x53,0x54, 0x4,0x3d,0x79, 0x6,0x53,0x62, 0x6,0x53,0x4b, + 0x6,0x53,0x5f, 0xf,0x42,0x22, 0xf,0x42,0x2f, 0xf,0x42,0x37, + 0x5,0x39,0x3f, 0x5,0x3f,0x72, 0x6,0x53,0x53, 0xf,0x43,0x74, + 0x5,0x46,0x4e, 0xf,0x42,0x4b, 0x5,0x46,0x50, 0x4,0x43,0x7b, + 0x4,0x43,0x72, 0x5,0x46,0x4d, 0x5,0x46,0x4f, 0x6,0x5d,0x69, + 0x5,0x46,0x55, 0x5,0x46,0x52, 0x7,0x23,0x65, 0x6,0x53,0x64, + 0x5,0x46,0x47, 0x6,0x5d,0x5f, 0x5,0x46,0x54, 0x5,0x46,0x46, + 0x5,0x46,0x58, 0x6,0x5d,0x62, 0x5,0x46,0x4a, 0x5,0x46,0x53, + 0x6,0x5d,0x63, 0x4,0x43,0x76, 0x5,0x46,0x48, 0x5,0x46,0x49, + 0x6,0x5d,0x65, 0x5,0x46,0x4c, 0x5,0x46,0x51, 0xf,0x48,0x57, + 0xf,0x48,0x58, 0xf,0x48,0x59, 0xf,0x48,0x5a, 0xf,0x48,0x5b, + 0xf,0x48,0x5c, 0xf,0x48,0x5d, 0xf,0x48,0x5e, 0xf,0x48,0x5f, + 0xf,0x48,0x60, 0xf,0x48,0x61, 0xf,0x48,0x62, 0xf,0x48,0x63, + 0xf,0x48,0x64, 0xf,0x48,0x65, 0xf,0x48,0x66, 0xf,0x48,0x67, + 0xf,0x48,0x68, 0xf,0x48,0x69, 0xf,0x48,0x6a, 0xf,0x48,0x6b, + 0xf,0x48,0x6c, 0xf,0x48,0x6d, 0xf,0x48,0x6e, 0xf,0x48,0x6f, + 0xf,0x48,0x71, 0xf,0x48,0x72, 0xf,0x48,0x73, 0xf,0x48,0x75, + 0x3,0x47,0x4b, 0x6,0x5d,0x6a, 0x6,0x5d,0x67, 0x6,0x5d,0x6b, + 0x6,0x5d,0x6c, 0x5,0x46,0x56, 0x5,0x46,0x57, 0xf,0x48,0x74, + 0x6,0x5d,0x64, 0x6,0x5d,0x66, 0xf,0x48,0x50, 0xf,0x48,0x51, + 0xf,0x48,0x53, 0xf,0x48,0x54, 0x6,0x5d,0x60, 0x6,0x5d,0x6d, + 0x6,0x5d,0x61, 0xf,0x48,0x56, 0x7,0x23,0x68, 0x5,0x4d,0x67, + 0x5,0x4d,0x5e, 0x4,0x4a,0x3b, 0x4,0x4a,0x47, 0x5,0x4d,0x5b, + 0x4,0x4a,0x40, 0x7,0x23,0x71, 0x7,0x23,0x6c, 0x7,0x23,0x74, + 0x5,0x4d,0x6b, 0x5,0x4d,0x65, 0x7,0x23,0x70, 0x4,0x4a,0x46, + 0x5,0x4d,0x5f, 0x4,0x4a,0x3f, 0x5,0x4d,0x64, 0x4,0x4a,0x43, + 0x4,0x4a,0x3e, 0x4,0x4a,0x35, 0x7,0x23,0x73, 0x5,0x4d,0x5c, + 0x4,0x4a,0x4a, 0x5,0x4d,0x69, 0x7,0x23,0x6e, 0x5,0x4d,0x63, + 0x5,0x4d,0x6a, 0x7,0x23,0x69, 0x4,0x4a,0x41, 0x5,0x4d,0x5d, + 0x7,0x23,0x75, 0x4,0x4a,0x3c, 0x4,0x4a,0x45, 0x4,0x4a,0x49, + 0x7,0x23,0x66, 0x7,0x23,0x6a, 0xf,0x4f,0x3d, 0xf,0x4f,0x3e, + 0xf,0x4f,0x3f, 0xf,0x4f,0x43, 0xf,0x4f,0x44, 0xf,0x4f,0x46, + 0xf,0x4f,0x47, 0xf,0x4f,0x48, 0xf,0x4f,0x49, 0xf,0x4f,0x4a, + 0xf,0x4f,0x4b, 0xf,0x4f,0x4c, 0xf,0x4f,0x4d, 0xf,0x4f,0x4e, + 0xf,0x4f,0x4f, 0xf,0x4f,0x50, 0xf,0x4f,0x51, 0xf,0x4f,0x52, + 0xf,0x4f,0x53, 0xf,0x4f,0x40, 0x7,0x23,0x6b, 0x5,0x4d,0x6c, + 0x5,0x4d,0x68, 0x5,0x4d,0x66, 0x7,0x23,0x67, 0x7,0x23,0x6d, + 0x5,0x4d,0x60, 0x5,0x4d,0x5a, 0x5,0x4d,0x62, 0x4,0x50,0x5b, + 0x5,0x54,0x7d, 0x7,0x2e,0x69, 0x4,0x50,0x65, 0x4,0x50,0x58, + 0x5,0x5b,0x65, 0x7,0x38,0x4c, 0x7,0x2e,0x60, 0x7,0x2e,0x63, + 0x5,0x54,0x7b, 0x7,0x2e,0x68, 0x7,0x2e,0x72, 0x5,0x54,0x7a, + 0x7,0x2e,0x6f, 0x7,0x2e,0x62, 0x4,0x50,0x62, 0x4,0x56,0x4c, + 0x4,0x50,0x57, 0x7,0x2e,0x5f, 0x4,0x50,0x5f, 0x5,0x54,0x79, + 0x7,0x2e,0x67, 0x7,0x2e,0x64, 0x5,0x54,0x71, 0x5,0x54,0x77, + 0x4,0x50,0x5c, 0x7,0x2e,0x6e, 0x7,0x2e,0x74, 0x5,0x54,0x78, + 0x4,0x50,0x5d, 0x7,0x2e,0x66, 0x7,0x2e,0x6b, 0x4,0x50,0x63, + 0x5,0x54,0x70, 0x7,0x2e,0x61, 0x5,0x61,0x7b, 0x5,0x54,0x75, + 0x5,0x54,0x76, 0x5,0x54,0x72, 0x4,0x4a,0x44, 0x7,0x2e,0x73, + 0x7,0x2e,0x6c, 0x7,0x2e,0x65, 0x7,0x2e,0x5e, 0x5,0x54,0x7c, + 0x5,0x54,0x6f, 0x5,0x54,0x73, 0xf,0x54,0x6f, 0xf,0x54,0x70, + 0xf,0x54,0x71, 0xf,0x54,0x72, 0xf,0x54,0x73, 0xf,0x54,0x75, + 0xf,0x54,0x76, 0xf,0x54,0x77, 0xf,0x54,0x78, 0xf,0x54,0x79, + 0xf,0x54,0x7a, 0xf,0x54,0x7c, 0xf,0x54,0x7d, 0xf,0x54,0x7e, + 0xf,0x55,0x21, 0xf,0x55,0x22, 0xf,0x55,0x24, 0xf,0x55,0x25, + 0xf,0x55,0x26, 0xf,0x55,0x27, 0xf,0x55,0x28, 0xf,0x55,0x2b, + 0xf,0x55,0x2c, 0xf,0x55,0x2d, 0xf,0x55,0x2e, 0xf,0x55,0x2f, + 0xf,0x55,0x30, 0xf,0x55,0x32, 0xf,0x55,0x33, 0xf,0x55,0x34, + 0xf,0x55,0x35, 0xf,0x55,0x36, 0xf,0x55,0x37, 0xf,0x55,0x38, + 0x7,0x2e,0x70, 0x7,0x2e,0x71, 0x4,0x50,0x61, 0xf,0x55,0x23, + 0x5,0x54,0x74, 0xf,0x48,0x70, 0xf,0x4f,0x41, 0x7,0x2e,0x6d, + 0x4,0x56,0x43, 0x7,0x38,0x50, 0x7,0x38,0x4e, 0x4,0x56,0x47, + 0x7,0x38,0x52, 0x7,0x38,0x56, 0x5,0x5b,0x6a, 0x5,0x5b,0x6b, + 0x4,0x56,0x4a, 0x4,0x56,0x46, 0x5,0x5b,0x6e, 0x7,0x38,0x53, + 0x5,0x5b,0x6c, 0x7,0x38,0x51, 0x7,0x38,0x57, 0x5,0x61,0x7c, + 0x5,0x5b,0x67, 0x4,0x56,0x4d, 0x4,0x56,0x44, 0x7,0x38,0x59, + 0x4,0x56,0x42, 0x5,0x5b,0x69, 0x7,0x38,0x5b, 0x5,0x5b,0x66, + 0x7,0x38,0x54, 0xf,0x5a,0x40, 0xf,0x5a,0x41, 0xf,0x5a,0x43, + 0xf,0x5a,0x44, 0xf,0x5a,0x45, 0xf,0x5a,0x46, 0xf,0x5a,0x47, + 0xf,0x5a,0x48, 0xf,0x5a,0x49, 0xf,0x5a,0x4a, 0xf,0x5a,0x4b, + 0xf,0x5a,0x4c, 0xf,0x5a,0x4e, 0xf,0x5a,0x4f, 0xf,0x5a,0x51, + 0xf,0x5a,0x52, 0xf,0x5a,0x54, 0x7,0x38,0x58, 0x5,0x5b,0x6d, + 0x7,0x38,0x5a, 0x7,0x38,0x4d, 0x7,0x38,0x4f, 0x7,0x37,0x27, + 0xf,0x5a,0x53, 0xf,0x5a,0x4d, 0x5,0x5b,0x6f, 0x5,0x5b,0x70, + 0xf,0x55,0x31, 0xf,0x5a,0x50, 0x4,0x5b,0x47, 0x5,0x61,0x78, + 0x7,0x40,0x27, 0x7,0x40,0x23, 0x4,0x5b,0x42, 0x7,0x40,0x2b, + 0x5,0x62,0x24, 0x5,0x61,0x7d, 0x5,0x62,0x26, 0x7,0x40,0x29, + 0x4,0x5b,0x45, 0x5,0x61,0x7a, 0x5,0x62,0x22, 0x5,0x62,0x27, + 0x5,0x61,0x7e, 0x7,0x38,0x5c, 0x5,0x62,0x2b, 0x5,0x61,0x79, + 0x4,0x5b,0x43, 0x4,0x5b,0x4c, 0x4,0x5b,0x46, 0x7,0x40,0x2d, + 0x7,0x40,0x28, 0x5,0x62,0x23, 0x7,0x47,0x46, 0x5,0x62,0x29, + 0x7,0x40,0x26, 0x4,0x5b,0x4b, 0x5,0x62,0x28, 0x5,0x62,0x25, + 0x5,0x61,0x76, 0x7,0x3f,0x7c, 0x7,0x3f,0x7d, 0xf,0x5e,0x7e, + 0xf,0x5f,0x22, 0xf,0x5f,0x23, 0xf,0x5f,0x24, 0xf,0x5f,0x25, + 0xf,0x5f,0x26, 0xf,0x5f,0x27, 0xf,0x5f,0x28, 0xf,0x5f,0x2a, + 0xf,0x5f,0x2b, 0xf,0x5f,0x2c, 0xf,0x5f,0x2e, 0xf,0x5f,0x2f, + 0xf,0x5f,0x30, 0x7,0x40,0x21, 0x7,0x40,0x25, 0x7,0x40,0x2c, + 0x7,0x40,0x2a, 0x5,0x62,0x21, 0xf,0x5f,0x21, 0x5,0x62,0x2a, + 0x5,0x61,0x77, 0x7,0x40,0x22, 0x7,0x40,0x24, 0xf,0x5f,0x2d, + 0x5,0x68,0x25, 0x7,0x47,0x43, 0x5,0x68,0x28, 0x5,0x68,0x2b, + 0x5,0x68,0x29, 0x7,0x47,0x42, 0x7,0x47,0x40, 0x5,0x68,0x2d, + 0x7,0x47,0x41, 0x4,0x5f,0x74, 0x7,0x47,0x48, 0x7,0x47,0x49, + 0x5,0x68,0x27, 0x5,0x68,0x26, 0x7,0x47,0x45, 0x5,0x68,0x2f, + 0x7,0x47,0x47, 0x7,0x3f,0x7e, 0xf,0x62,0x52, 0xf,0x62,0x56, + 0xf,0x62,0x58, 0xf,0x62,0x59, 0xf,0x62,0x5a, 0xf,0x62,0x5b, + 0xf,0x62,0x5c, 0xf,0x62,0x5d, 0xf,0x62,0x5f, 0xf,0x62,0x60, + 0xf,0x62,0x61, 0x5,0x68,0x2e, 0x7,0x47,0x44, 0x7,0x47,0x3f, + 0xf,0x62,0x54, 0x5,0x68,0x2c, 0xf,0x62,0x57, 0xf,0x62,0x4f, + 0xf,0x62,0x5e, 0xf,0x5e,0x7d, 0x4,0x63,0x53, 0x7,0x4d,0x7c, + 0x5,0x6c,0x3f, 0x7,0x4d,0x7e, 0x5,0x6c,0x42, 0x5,0x68,0x30, + 0x5,0x6c,0x3a, 0x5,0x6c,0x39, 0x5,0x6c,0x3d, 0x7,0x4d,0x7d, + 0x5,0x6c,0x3c, 0x5,0x6c,0x41, 0x5,0x6c,0x3b, 0x5,0x68,0x2a, + 0x5,0x6c,0x40, 0x5,0x6c,0x3e, 0xf,0x65,0x33, 0xf,0x65,0x34, + 0xf,0x65,0x35, 0xf,0x65,0x36, 0xf,0x65,0x37, 0xf,0x65,0x39, + 0xf,0x65,0x3a, 0xf,0x65,0x3b, 0xf,0x65,0x3c, 0xf,0x65,0x3d, + 0xf,0x65,0x3f, 0x7,0x4e,0x21, 0x4,0x63,0x52, 0x7,0x53,0x49, + 0x7,0x53,0x48, 0x5,0x70,0x2b, 0x5,0x70,0x2d, 0x4,0x66,0x46, + 0x5,0x70,0x29, 0x7,0x53,0x4d, 0x5,0x70,0x28, 0x5,0x70,0x2a, + 0x5,0x70,0x2c, 0x7,0x53,0x4a, 0x4,0x66,0x45, 0x5,0x70,0x2f, + 0x7,0x53,0x4e, 0x5,0x70,0x32, 0xf,0x67,0x5b, 0xf,0x67,0x5c, + 0xf,0x67,0x5d, 0xf,0x67,0x5e, 0xf,0x67,0x5f, 0xf,0x67,0x60, + 0xf,0x67,0x61, 0xf,0x67,0x62, 0xf,0x67,0x63, 0xf,0x67,0x64, + 0x7,0x53,0x4c, 0x5,0x70,0x31, 0x5,0x70,0x30, 0x7,0x53,0x4b, + 0x5,0x70,0x2e, 0x7,0x58,0x26, 0x5,0x73,0x4e, 0x5,0x73,0x4f, + 0x5,0x73,0x4c, 0x5,0x73,0x4a, 0x4,0x68,0x6f, 0x5,0x73,0x4b, + 0x5,0x73,0x4d, 0x7,0x58,0x25, 0xf,0x69,0x47, 0xf,0x69,0x48, + 0xf,0x69,0x49, 0xf,0x69,0x4b, 0xf,0x69,0x4e, 0xf,0x69,0x4f, + 0xf,0x69,0x50, 0xf,0x69,0x51, 0x7,0x58,0x24, 0x7,0x58,0x22, + 0xf,0x67,0x65, 0x5,0x75,0x71, 0x5,0x75,0x73, 0x5,0x77,0x60, + 0x5,0x75,0x74, 0x7,0x5b,0x60, 0x5,0x75,0x72, 0x7,0x5b,0x61, + 0x5,0x75,0x75, 0x7,0x5b,0x5f, 0x5,0x77,0x61, 0x7,0x5b,0x5d, + 0xf,0x6a,0x57, 0xf,0x6a,0x59, 0x7,0x5b,0x5e, 0x5,0x75,0x76, + 0x5,0x75,0x70, 0x4,0x6b,0x6c, 0x7,0x5e,0x6e, 0x5,0x77,0x62, + 0x7,0x60,0x71, 0xf,0x6b,0x4e, 0xf,0x6b,0x4f, 0xf,0x6b,0x50, + 0xf,0x6b,0x53, 0xf,0x6b,0x54, 0x7,0x5e,0x6f, 0x7,0x5e,0x70, + 0xf,0x6a,0x58, 0x7,0x60,0x72, 0x5,0x79,0x2d, 0xf,0x6c,0x2c, + 0x7,0x60,0x73, 0x5,0x79,0x2c, 0x5,0x79,0x2e, 0xf,0x6b,0x52, + 0x5,0x7a,0x29, 0x7,0x63,0x54, 0x7,0x60,0x74, 0x4,0x6d,0x55, + 0xf,0x6c,0x2d, 0xf,0x6c,0x4c, 0xf,0x6c,0x63, 0x7,0x63,0x4c, + 0x7,0x63,0x55, 0x5,0x7b,0x40, 0x7,0x64,0x48, 0x7,0x64,0x49, + 0x7,0x65,0x5b, 0xf,0x6d,0x2f, 0x7,0x65,0x74, 0x6,0x25,0x24, + 0x4,0x24,0x4b, 0x6,0x28,0x2f, 0x6,0x2c,0x2e, 0x6,0x28,0x32, + 0x5,0x24,0x47, 0x6,0x28,0x31, 0x4,0x24,0x4a, 0x5,0x26,0x5c, + 0x5,0x26,0x5b, 0x5,0x26,0x58, 0x6,0x2c,0x2f, 0x4,0x26,0x6f, + 0x6,0x2c,0x30, 0x5,0x26,0x5d, 0x4,0x26,0x6e, 0x5,0x26,0x59, + 0x5,0x26,0x5a, 0x5,0x26,0x57, 0xf,0x27,0x56, 0x5,0x29,0x5f, + 0x6,0x31,0x7a, 0x6,0x38,0x54, 0x6,0x31,0x7c, 0x5,0x29,0x62, + 0x4,0x29,0x75, 0x5,0x29,0x61, 0x5,0x29,0x5e, 0x6,0x31,0x79, + 0x5,0x29,0x5c, 0x5,0x29,0x60, 0x6,0x31,0x7b, 0x5,0x29,0x5d, + 0xf,0x2c,0x77, 0x6,0x38,0x57, 0x6,0x38,0x58, 0x6,0x38,0x55, + 0x5,0x2e,0x33, 0x5,0x2e,0x2d, 0x6,0x38,0x56, 0x6,0x40,0x6b, + 0x5,0x2e,0x32, 0x4,0x2d,0x5f, 0x5,0x2e,0x2f, 0x5,0x2e,0x34, + 0x5,0x2e,0x31, 0x5,0x2e,0x30, 0xf,0x30,0x31, 0x5,0x33,0x25, + 0x6,0x40,0x6c, 0x6,0x40,0x6d, 0xf,0x35,0x67, 0xf,0x35,0x68, + 0xf,0x35,0x69, 0xf,0x35,0x6a, 0xf,0x35,0x6b, 0xf,0x35,0x6c, + 0xf,0x35,0x6d, 0xf,0x35,0x6e, 0x4,0x38,0x3d, 0x5,0x39,0x47, + 0x5,0x3f,0x77, 0x4,0x38,0x3a, 0x5,0x39,0x45, 0x6,0x4a,0x3c, + 0x5,0x33,0x24, 0x5,0x39,0x48, 0x6,0x4a,0x3d, 0x5,0x39,0x44, + 0x5,0x39,0x49, 0x6,0x4a,0x3e, 0x5,0x39,0x46, 0x6,0x4a,0x3b, + 0xf,0x3c,0x30, 0xf,0x3c,0x31, 0x6,0x4a,0x3a, 0x6,0x53,0x6e, + 0x5,0x3f,0x76, 0x5,0x3f,0x75, 0x5,0x3f,0x7a, 0x6,0x53,0x6b, + 0x5,0x3f,0x79, 0x6,0x53,0x67, 0x6,0x53,0x66, 0x6,0x53,0x68, + 0x6,0x53,0x69, 0x6,0x53,0x6a, 0x6,0x53,0x6d, 0x5,0x3f,0x78, + 0xf,0x42,0x4e, 0x6,0x58,0x5a, 0x6,0x53,0x6c, 0x6,0x53,0x65, + 0xf,0x42,0x4d, 0x5,0x46,0x5c, 0x4,0x44,0x2b, 0x5,0x46,0x5e, + 0x6,0x5d,0x6f, 0x6,0x5d,0x6e, 0x4,0x44,0x2c, 0x5,0x46,0x5d, + 0x4,0x44,0x29, 0x6,0x5d,0x75, 0x6,0x5d,0x70, 0x5,0x46,0x5a, + 0x6,0x5d,0x76, 0x6,0x5d,0x74, 0x5,0x46,0x5b, 0x6,0x5d,0x72, + 0x6,0x5d,0x71, 0x6,0x5d,0x73, 0x6,0x53,0x6f, 0xf,0x48,0x76, + 0xf,0x48,0x78, 0x5,0x46,0x59, 0x5,0x4d,0x6e, 0x7,0x23,0x7d, + 0x5,0x4d,0x70, 0x5,0x4d,0x71, 0x4,0x4a,0x4d, 0x7,0x23,0x79, + 0x7,0x23,0x77, 0x7,0x23,0x7e, 0x7,0x23,0x76, 0x7,0x23,0x7a, + 0x7,0x23,0x7b, 0x5,0x4d,0x6f, 0xf,0x4f,0x54, 0x7,0x23,0x7c, + 0x5,0x54,0x7e, 0x7,0x2e,0x76, 0x4,0x50,0x68, 0x7,0x2e,0x75, + 0xf,0x55,0x3a, 0xf,0x55,0x3b, 0x7,0x38,0x5e, 0x7,0x38,0x60, + 0x5,0x5b,0x71, 0x7,0x38,0x5f, 0xf,0x5a,0x55, 0x7,0x38,0x5d, + 0x5,0x62,0x2c, 0x5,0x68,0x32, 0x5,0x68,0x31, 0xf,0x62,0x62, + 0x5,0x70,0x36, 0x7,0x4e,0x23, 0x5,0x70,0x35, 0x5,0x70,0x34, + 0x4,0x68,0x70, 0x5,0x70,0x33, 0x5,0x73,0x50, 0x7,0x58,0x29, + 0x7,0x58,0x27, 0x7,0x58,0x28, 0x5,0x77,0x63, 0x7,0x60,0x75, + 0x4,0x6c,0x70, 0x4,0x6d,0x56, 0x5,0x21,0x32, 0x5,0x21,0x70, + 0x6,0x23,0x2e, 0x6,0x25,0x26, 0x5,0x24,0x4a, 0x6,0x28,0x34, + 0x6,0x2c,0x31, 0x5,0x24,0x49, 0x5,0x24,0x4b, 0x6,0x28,0x33, + 0x6,0x2c,0x3c, 0x6,0x2c,0x34, 0x6,0x2c,0x3b, 0x6,0x2c,0x3a, + 0x6,0x2c,0x36, 0x6,0x2c,0x33, 0x6,0x2c,0x38, 0x6,0x2c,0x32, + 0x6,0x2c,0x37, 0x5,0x26,0x5e, 0x6,0x2c,0x39, 0x6,0x2c,0x35, + 0x5,0x26,0x5f, 0xf,0x27,0x57, 0xf,0x27,0x58, 0xf,0x27,0x59, + 0x4,0x26,0x72, 0x4,0x29,0x76, 0x5,0x29,0x63, 0x5,0x28,0x35, + 0x6,0x38,0x59, 0x6,0x38,0x5c, 0x5,0x2e,0x35, 0x6,0x38,0x5a, + 0x6,0x38,0x5e, 0x6,0x38,0x5d, 0x6,0x38,0x5b, 0x6,0x37,0x48, + 0x5,0x33,0x26, 0x6,0x40,0x70, 0xf,0x35,0x6f, 0x6,0x40,0x6f, + 0x4,0x38,0x40, 0x4,0x38,0x3e, 0x5,0x39,0x4a, 0x5,0x39,0x4b, + 0x6,0x4a,0x43, 0x4,0x38,0x41, 0x6,0x4a,0x42, 0x6,0x4a,0x44, + 0x6,0x4a,0x40, 0x6,0x4a,0x45, 0x6,0x4a,0x46, 0x6,0x4a,0x41, + 0x5,0x3f,0x7c, 0x6,0x53,0x70, 0x5,0x3f,0x7b, 0xf,0x42,0x4f, + 0x6,0x5a,0x61, 0x7,0x24,0x22, 0x7,0x24,0x25, 0x7,0x24,0x23, + 0x7,0x24,0x26, 0x7,0x24,0x21, 0x7,0x24,0x24, 0xf,0x4f,0x55, + 0x7,0x2e,0x7a, 0x7,0x2e,0x79, 0x7,0x2e,0x77, 0x7,0x2e,0x78, + 0x7,0x38,0x61, 0x4,0x56,0x50, 0xf,0x5a,0x56, 0xf,0x5a,0x57, + 0x5,0x62,0x2d, 0x5,0x62,0x2e, 0x7,0x40,0x2e, 0x5,0x73,0x51, + 0x7,0x5b,0x62, 0x7,0x5b,0x63, 0x5,0x21,0x71, 0x5,0x21,0x49, + 0x5,0x22,0x76, 0x6,0x28,0x35, 0x4,0x22,0x7d, 0x6,0x25,0x27, + 0x5,0x24,0x4c, 0x4,0x24,0x4d, 0x6,0x25,0x28, 0x6,0x28,0x36, + 0x6,0x28,0x3b, 0x6,0x28,0x37, 0x4,0x24,0x4c, 0x6,0x28,0x3c, + 0x5,0x24,0x4d, 0x6,0x28,0x39, 0x6,0x28,0x38, 0x6,0x28,0x3a, + 0x6,0x2c,0x3f, 0x5,0x26,0x60, 0x5,0x26,0x66, 0x5,0x26,0x61, + 0x5,0x26,0x64, 0x4,0x26,0x73, 0x4,0x26,0x74, 0x5,0x26,0x63, + 0x4,0x26,0x77, 0x6,0x2c,0x3d, 0x6,0x2c,0x3e, 0x6,0x2c,0x40, + 0x6,0x31,0x7d, 0x5,0x26,0x65, 0x5,0x29,0x68, 0x4,0x29,0x78, + 0x4,0x29,0x79, 0x6,0x32,0x26, 0x4,0x29,0x77, 0x6,0x31,0x7e, + 0x5,0x29,0x64, 0x5,0x29,0x65, 0x5,0x29,0x6b, 0x5,0x29,0x66, + 0x5,0x29,0x67, 0x6,0x32,0x25, 0x4,0x29,0x7a, 0x6,0x32,0x22, + 0x6,0x32,0x23, 0x5,0x29,0x6a, 0x6,0x32,0x24, 0x6,0x38,0x5f, + 0xf,0x2b,0x50, 0x6,0x32,0x21, 0x5,0x29,0x6c, 0x5,0x2e,0x36, + 0x4,0x2d,0x63, 0x6,0x38,0x62, 0x5,0x2e,0x3b, 0x6,0x38,0x65, + 0x5,0x2e,0x3c, 0x5,0x2e,0x38, 0x5,0x2e,0x39, 0x6,0x38,0x63, + 0x6,0x38,0x66, 0x5,0x2e,0x3d, 0x5,0x2e,0x37, 0x5,0x2e,0x3a, + 0x5,0x2e,0x3e, 0x6,0x38,0x60, 0x6,0x38,0x61, 0x5,0x33,0x2b, + 0x6,0x40,0x74, 0x5,0x33,0x2a, 0x6,0x40,0x73, 0x5,0x33,0x27, + 0x5,0x33,0x28, 0x5,0x33,0x29, 0x6,0x40,0x71, 0x4,0x32,0x4b, + 0x5,0x33,0x2c, 0x6,0x4a,0x49, 0x6,0x40,0x75, 0x6,0x40,0x72, + 0xf,0x35,0x71, 0x6,0x53,0x72, 0x6,0x4a,0x4a, 0x5,0x39,0x53, + 0x4,0x38,0x48, 0x6,0x4a,0x4b, 0x4,0x38,0x43, 0x5,0x39,0x4e, + 0x5,0x39,0x4d, 0x5,0x39,0x4f, 0x4,0x38,0x47, 0x5,0x39,0x52, + 0x5,0x39,0x54, 0x5,0x39,0x50, 0x5,0x39,0x4c, 0x5,0x39,0x51, + 0x6,0x4a,0x4c, 0x6,0x53,0x71, 0x6,0x4a,0x48, 0xf,0x3c,0x32, + 0x6,0x53,0x74, 0x6,0x53,0x79, 0x5,0x3f,0x7d, 0x5,0x3f,0x7e, + 0x6,0x53,0x76, 0x6,0x53,0x78, 0x4,0x3e,0x25, 0x6,0x5d,0x78, + 0x6,0x53,0x7a, 0x6,0x53,0x75, 0x6,0x53,0x73, 0xf,0x42,0x50, + 0xf,0x35,0x70, 0x4,0x44,0x34, 0x4,0x44,0x2e, 0x6,0x5d,0x7b, + 0x6,0x5d,0x7c, 0x4,0x44,0x2f, 0x6,0x5d,0x79, 0x6,0x5d,0x7a, + 0x6,0x5d,0x2d, 0x7,0x24,0x29, 0x4,0x4a,0x51, 0x5,0x4d,0x72, + 0x7,0x24,0x27, 0x5,0x4d,0x75, 0x7,0x24,0x28, 0x7,0x24,0x2b, + 0x5,0x4d,0x74, 0x4,0x50,0x69, 0x7,0x24,0x2c, 0x7,0x24,0x2a, + 0xf,0x4f,0x56, 0x5,0x4d,0x73, 0x7,0x2e,0x7b, 0x7,0x2e,0x7c, + 0x5,0x55,0x21, 0x4,0x50,0x6c, 0x5,0x55,0x23, 0x5,0x55,0x22, + 0x7,0x2e,0x7e, 0xf,0x55,0x3c, 0xf,0x55,0x3d, 0x7,0x38,0x64, + 0x7,0x38,0x62, 0x5,0x5b,0x73, 0x7,0x38,0x65, 0x7,0x38,0x63, + 0x5,0x5b,0x74, 0x5,0x62,0x30, 0x5,0x62,0x2f, 0x4,0x5b,0x4d, + 0x7,0x40,0x30, 0x7,0x2e,0x7d, 0x5,0x5b,0x75, 0x7,0x40,0x2f, + 0x5,0x68,0x33, 0x5,0x70,0x37, 0x5,0x70,0x38, 0x7,0x53,0x4f, + 0x7,0x58,0x2a, 0x5,0x75,0x7a, 0x5,0x75,0x79, 0x5,0x26,0x68, + 0x5,0x26,0x67, 0x6,0x32,0x27, 0x6,0x32,0x28, 0x5,0x2e,0x3f, + 0x4,0x32,0x4c, 0x4,0x32,0x4d, 0x6,0x40,0x78, 0x6,0x40,0x79, + 0x6,0x40,0x76, 0x6,0x40,0x77, 0xf,0x35,0x73, 0xf,0x35,0x75, + 0xf,0x35,0x76, 0xf,0x35,0x77, 0x6,0x40,0x7b, 0x6,0x40,0x7a, + 0x5,0x33,0x2d, 0x6,0x4a,0x4f, 0x6,0x4a,0x4e, 0xf,0x3c,0x33, + 0xf,0x35,0x72, 0x6,0x54,0x21, 0x6,0x54,0x22, 0x6,0x53,0x7d, + 0x6,0x53,0x7e, 0x6,0x54,0x24, 0xf,0x42,0x51, 0xf,0x42,0x52, + 0x6,0x54,0x23, 0x6,0x53,0x7c, 0x5,0x40,0x21, 0x5,0x40,0x7b, + 0x5,0x46,0x61, 0x4,0x44,0x36, 0x6,0x5e,0x21, 0x4,0x44,0x37, + 0x6,0x5d,0x7e, 0x6,0x5d,0x7d, 0xf,0x48,0x7a, 0x5,0x4d,0x76, + 0x6,0x5e,0x22, 0x7,0x24,0x2d, 0x4,0x4a,0x52, 0x7,0x2f,0x25, + 0x7,0x2f,0x23, 0x7,0x2f,0x26, 0x7,0x2f,0x21, 0x7,0x2f,0x24, + 0x5,0x55,0x24, 0x7,0x2f,0x22, 0xf,0x55,0x3e, 0xf,0x55,0x3f, + 0xf,0x55,0x40, 0x7,0x38,0x66, 0x7,0x38,0x67, 0x4,0x5b,0x4e, + 0x7,0x40,0x33, 0x5,0x62,0x32, 0x5,0x62,0x31, 0x7,0x40,0x31, + 0x7,0x40,0x32, 0x4,0x5f,0x78, 0x7,0x47,0x4c, 0x7,0x4e,0x25, + 0x7,0x47,0x4d, 0x7,0x53,0x50, 0x4,0x6a,0x4d, 0x5,0x75,0x7b, + 0x7,0x5b,0x64, 0x5,0x73,0x52, 0x7,0x5e,0x73, 0x5,0x77,0x65, + 0x5,0x77,0x64, 0x7,0x60,0x76, 0x7,0x63,0x56, 0x5,0x21,0x72, + 0x6,0x28,0x3d, 0x6,0x2c,0x41, 0x6,0x32,0x29, 0x6,0x38,0x67, + 0xf,0x3c,0x34, 0x5,0x40,0x22, 0x4,0x4a,0x53, 0xf,0x4f,0x57, + 0xf,0x4f,0x58, 0xf,0x5a,0x59, 0xf,0x55,0x41, 0xf,0x62,0x63, + 0xf,0x6a,0x5a, 0x5,0x24,0x4f, 0x6,0x28,0x3e, 0x6,0x2c,0x45, + 0x6,0x2c,0x44, 0x5,0x26,0x69, 0x6,0x38,0x68, 0x6,0x38,0x6a, + 0x6,0x38,0x69, 0x6,0x40,0x7c, 0x6,0x40,0x7d, 0x5,0x40,0x23, + 0x4,0x3e,0x26, 0x5,0x46,0x62, 0x5,0x46,0x63, 0x6,0x5e,0x23, + 0x7,0x24,0x2e, 0x7,0x2f,0x27, 0x7,0x2f,0x28, 0x5,0x55,0x25, + 0x7,0x47,0x4e, 0x5,0x6c,0x43, 0x5,0x79,0x30, 0x5,0x21,0x4a, + 0x4,0x22,0x7e, 0xf,0x22,0x5a, 0xf,0x22,0x5b, 0x6,0x28,0x40, + 0x6,0x28,0x3f, 0x4,0x24,0x4e, 0xf,0x24,0x55, 0xf,0x24,0x56, + 0xf,0x24,0x57, 0xf,0x24,0x59, 0xf,0x24,0x5a, 0x5,0x26,0x6d, + 0x5,0x26,0x6a, 0x5,0x26,0x6c, 0x5,0x26,0x6b, 0x6,0x2c,0x47, + 0x6,0x2c,0x46, 0xf,0x27,0x5a, 0xf,0x27,0x5c, 0xf,0x27,0x5d, + 0xf,0x27,0x5e, 0xf,0x27,0x5f, 0x5,0x26,0x43, 0x6,0x32,0x2c, + 0x5,0x29,0x6e, 0x5,0x29,0x6f, 0x5,0x29,0x6d, 0x5,0x29,0x70, + 0x5,0x29,0x71, 0x6,0x32,0x2d, 0x5,0x29,0x73, 0x6,0x32,0x2f, + 0x6,0x38,0x6d, 0x6,0x32,0x2e, 0x5,0x29,0x74, 0x6,0x32,0x2b, + 0x5,0x29,0x72, 0xf,0x2b,0x51, 0xf,0x2b,0x52, 0xf,0x2b,0x53, + 0xf,0x2b,0x54, 0xf,0x2b,0x55, 0xf,0x2b,0x56, 0xf,0x2b,0x57, + 0xf,0x2b,0x58, 0xf,0x2b,0x59, 0xf,0x2b,0x5a, 0xf,0x2b,0x5b, + 0xf,0x2b,0x5c, 0xf,0x2b,0x5e, 0xf,0x2b,0x5d, 0x6,0x38,0x6f, + 0x5,0x2e,0x41, 0x6,0x38,0x6e, 0x4,0x2d,0x69, 0x5,0x2e,0x43, + 0x4,0x2d,0x68, 0x6,0x38,0x6c, 0x5,0x2e,0x42, 0xf,0x30,0x32, + 0xf,0x30,0x33, 0xf,0x30,0x34, 0xf,0x30,0x35, 0xf,0x30,0x36, + 0xf,0x30,0x37, 0xf,0x30,0x38, 0xf,0x30,0x39, 0x6,0x38,0x6b, + 0x5,0x2e,0x40, 0x6,0x41,0x26, 0x4,0x32,0x56, 0x6,0x41,0x21, + 0x5,0x33,0x31, 0x6,0x41,0x22, 0x6,0x41,0x23, 0x5,0x33,0x2e, + 0x6,0x41,0x25, 0x5,0x33,0x32, 0x5,0x33,0x30, 0x5,0x33,0x2f, + 0x6,0x40,0x7e, 0x6,0x41,0x24, 0xf,0x35,0x78, 0xf,0x35,0x79, + 0xf,0x35,0x7a, 0xf,0x35,0x7b, 0xf,0x35,0x7c, 0x5,0x39,0x55, + 0x4,0x38,0x4d, 0x5,0x39,0x56, 0x4,0x38,0x50, 0x6,0x4a,0x51, + 0x6,0x4a,0x53, 0x5,0x39,0x59, 0x5,0x39,0x58, 0x5,0x39,0x5a, + 0x6,0x4a,0x56, 0x6,0x4a,0x50, 0x6,0x4a,0x55, 0x5,0x39,0x57, + 0x6,0x4a,0x52, 0xf,0x3c,0x3a, 0xf,0x3c,0x35, 0xf,0x3c,0x37, + 0xf,0x3c,0x38, 0xf,0x3c,0x39, 0xf,0x3c,0x3b, 0xf,0x3c,0x3d, + 0xf,0x3c,0x3f, 0xf,0x3c,0x40, 0x6,0x4a,0x54, 0xf,0x3c,0x36, + 0x5,0x39,0x5c, 0x6,0x54,0x2e, 0x6,0x54,0x2c, 0x4,0x3e,0x2b, + 0x6,0x54,0x27, 0x6,0x54,0x2b, 0x4,0x3e,0x2a, 0x6,0x54,0x28, + 0x6,0x54,0x25, 0x6,0x54,0x29, 0x6,0x54,0x26, 0x6,0x54,0x2d, + 0x6,0x54,0x2a, 0x6,0x54,0x2f, 0x5,0x40,0x24, 0xf,0x42,0x53, + 0xf,0x42,0x55, 0xf,0x42,0x56, 0xf,0x42,0x57, 0x6,0x54,0x30, + 0x6,0x5e,0x29, 0x5,0x46,0x66, 0x5,0x46,0x65, 0x6,0x5e,0x2a, + 0x6,0x5e,0x2b, 0x6,0x5e,0x2d, 0x4,0x44,0x3d, 0x6,0x5e,0x24, + 0x4,0x44,0x3e, 0x5,0x46,0x67, 0x4,0x44,0x3b, 0x6,0x5e,0x2e, + 0x6,0x5e,0x2f, 0x6,0x5e,0x26, 0x6,0x5e,0x27, 0xf,0x48,0x7c, + 0xf,0x48,0x7d, 0xf,0x48,0x7e, 0xf,0x49,0x21, 0x6,0x5e,0x28, + 0x5,0x46,0x69, 0x6,0x5e,0x30, 0x6,0x5e,0x25, 0x6,0x5e,0x2c, + 0x4,0x4a,0x56, 0x7,0x24,0x33, 0x7,0x24,0x37, 0x7,0x24,0x35, + 0x4,0x4a,0x55, 0x4,0x4a,0x54, 0x5,0x4d,0x79, 0x7,0x24,0x34, + 0x5,0x4d,0x77, 0x5,0x4d,0x78, 0x7,0x24,0x31, 0x7,0x24,0x32, + 0x7,0x24,0x30, 0x7,0x24,0x2f, 0x7,0x24,0x36, 0x7,0x24,0x38, + 0x7,0x2f,0x29, 0x5,0x55,0x27, 0x7,0x2f,0x2a, 0x4,0x50,0x70, + 0x5,0x55,0x26, 0x4,0x50,0x73, 0x7,0x2f,0x2c, 0xf,0x55,0x42, + 0xf,0x55,0x43, 0xf,0x55,0x44, 0xf,0x55,0x45, 0x7,0x2f,0x2b, + 0x7,0x24,0x39, 0x7,0x38,0x6a, 0x4,0x56,0x55, 0x4,0x56,0x54, + 0x7,0x38,0x69, 0x5,0x5b,0x76, 0x7,0x38,0x68, 0xf,0x5a,0x5a, + 0xf,0x5a,0x5b, 0xf,0x5a,0x5c, 0x7,0x38,0x6c, 0x7,0x38,0x6b, + 0x5,0x62,0x35, 0x5,0x62,0x34, 0x5,0x62,0x36, 0x7,0x40,0x37, + 0x7,0x47,0x4f, 0x7,0x40,0x35, 0x5,0x62,0x37, 0x7,0x40,0x34, + 0x7,0x40,0x36, 0xf,0x5f,0x31, 0x5,0x62,0x33, 0xf,0x5f,0x32, + 0x7,0x47,0x52, 0x5,0x68,0x34, 0x7,0x47,0x50, 0x7,0x47,0x51, + 0xf,0x65,0x41, 0x7,0x4e,0x26, 0x4,0x66,0x47, 0x5,0x70,0x39, + 0x7,0x53,0x51, 0xf,0x67,0x67, 0x7,0x58,0x2b, 0x5,0x73,0x53, + 0xf,0x69,0x52, 0x5,0x75,0x7c, 0x7,0x5b,0x65, 0x7,0x64,0x4a, + 0x6,0x2c,0x48, 0x6,0x32,0x30, 0x5,0x29,0x75, 0x5,0x29,0x76, + 0x6,0x33,0x4c, 0x6,0x41,0x27, 0xf,0x35,0x7d, 0x6,0x41,0x28, + 0x6,0x54,0x31, 0x4,0x44,0x40, 0x7,0x2f,0x2d, 0x7,0x38,0x6d, + 0x4,0x5b,0x51, 0xf,0x5a,0x5d, 0x6,0x25,0x2a, 0x6,0x25,0x29, + 0xf,0x24,0x5c, 0x6,0x2c,0x4b, 0x6,0x2c,0x4a, 0x6,0x2c,0x49, + 0x6,0x32,0x31, 0x6,0x32,0x32, 0xf,0x2b,0x5f, 0x5,0x29,0x77, + 0x5,0x2e,0x44, 0xf,0x35,0x7e, 0x5,0x39,0x5d, 0xf,0x3c,0x41, + 0x6,0x54,0x32, 0x7,0x24,0x3b, 0x7,0x24,0x3a, 0x7,0x40,0x38, + 0x7,0x53,0x52, 0xf,0x21,0x67, 0x6,0x22,0x24, 0x6,0x25,0x2b, + 0x5,0x21,0x73, 0x6,0x25,0x2c, 0xf,0x22,0x5e, 0xf,0x24,0x69, + 0x4,0x23,0x23, 0x6,0x25,0x2d, 0x5,0x24,0x50, 0x6,0x25,0x2f, + 0x6,0x25,0x31, 0x3,0x24,0x24, 0xf,0x22,0x5c, 0xf,0x24,0x5f, + 0xf,0x24,0x60, 0x6,0x25,0x30, 0x6,0x2c,0x4d, 0x5,0x24,0x52, + 0x6,0x28,0x42, 0x5,0x24,0x51, 0x5,0x24,0x53, 0x4,0x24,0x50, + 0x6,0x28,0x46, 0x6,0x28,0x47, 0x6,0x2c,0x4c, 0x6,0x28,0x43, + 0x6,0x28,0x41, 0x6,0x28,0x45, 0x6,0x28,0x48, 0xf,0x24,0x61, + 0xf,0x24,0x5e, 0xf,0x24,0x62, 0xf,0x24,0x63, 0xf,0x24,0x64, + 0xf,0x24,0x65, 0xf,0x24,0x66, 0xf,0x24,0x67, 0xf,0x27,0x63, + 0xf,0x27,0x64, 0xf,0x27,0x65, 0x4,0x27,0x23, 0x5,0x26,0x6f, + 0x6,0x32,0x33, 0x5,0x26,0x72, 0x5,0x26,0x73, 0x4,0x27,0x21, + 0x6,0x2c,0x57, 0x4,0x27,0x25, 0x6,0x2c,0x50, 0x4,0x27,0x24, + 0x6,0x2c,0x4e, 0x5,0x26,0x6e, 0x5,0x26,0x70, 0x6,0x2c,0x58, + 0x5,0x26,0x71, 0x6,0x2c,0x5a, 0x6,0x32,0x34, 0x6,0x2c,0x56, + 0x6,0x2c,0x5c, 0x4,0x26,0x7c, 0x6,0x2c,0x53, 0xf,0x27,0x60, + 0xf,0x27,0x61, 0xf,0x27,0x62, 0xf,0x27,0x67, 0xf,0x27,0x68, + 0xf,0x27,0x69, 0xf,0x27,0x6a, 0xf,0x27,0x6b, 0xf,0x27,0x6d, + 0xf,0x2b,0x64, 0xf,0x2b,0x67, 0xf,0x2b,0x6c, 0x6,0x2c,0x52, + 0x6,0x2c,0x54, 0x6,0x2c,0x55, 0x6,0x2c,0x59, 0x6,0x2c,0x4f, + 0x5,0x29,0x78, 0x4,0x29,0x7c, 0x6,0x32,0x36, 0x5,0x2a,0x22, + 0x6,0x32,0x3b, 0x6,0x32,0x3e, 0x5,0x29,0x79, 0x4,0x2a,0x22, + 0x4,0x2d,0x71, 0x5,0x2a,0x21, 0x5,0x29,0x7e, 0x6,0x32,0x3a, + 0x6,0x32,0x40, 0x5,0x29,0x7a, 0x6,0x32,0x41, 0x5,0x29,0x7d, + 0x6,0x38,0x70, 0x6,0x32,0x3d, 0x6,0x32,0x3c, 0x4,0x2a,0x23, + 0x4,0x29,0x7d, 0x6,0x32,0x3f, 0xf,0x2b,0x60, 0xf,0x2b,0x61, + 0xf,0x2b,0x62, 0xf,0x2b,0x63, 0xf,0x2b,0x65, 0xf,0x2b,0x66, + 0xf,0x2b,0x68, 0xf,0x2b,0x69, 0xf,0x2b,0x6a, 0xf,0x2b,0x6b, + 0xf,0x2b,0x6d, 0xf,0x2b,0x6e, 0xf,0x30,0x3a, 0xf,0x30,0x3d, + 0xf,0x30,0x44, 0x6,0x32,0x38, 0x4,0x2a,0x24, 0x6,0x32,0x35, + 0x6,0x32,0x37, 0x5,0x2a,0x23, 0xf,0x30,0x57, 0x4,0x2d,0x6e, + 0x5,0x2e,0x49, 0x6,0x39,0x30, 0x6,0x39,0x2e, 0x5,0x2e,0x48, + 0x5,0x2e,0x47, 0x6,0x38,0x7c, 0x5,0x2e,0x4a, 0x6,0x38,0x71, + 0x6,0x38,0x7b, 0x4,0x2d,0x6d, 0x4,0x2d,0x6f, 0x6,0x39,0x25, + 0x6,0x38,0x76, 0x6,0x39,0x26, 0x6,0x39,0x2a, 0x6,0x38,0x77, + 0x6,0x39,0x29, 0x6,0x38,0x7e, 0x6,0x39,0x28, 0x6,0x41,0x2a, + 0x6,0x41,0x29, 0x4,0x32,0x66, 0x6,0x39,0x24, 0x6,0x39,0x2c, + 0x5,0x2e,0x45, 0x6,0x39,0x23, 0x6,0x38,0x73, 0x6,0x39,0x2b, + 0x6,0x38,0x78, 0x6,0x39,0x2f, 0x6,0x39,0x32, 0x6,0x41,0x46, + 0xf,0x30,0x3b, 0xf,0x30,0x3e, 0xf,0x30,0x3f, 0xf,0x30,0x40, + 0xf,0x30,0x41, 0xf,0x30,0x42, 0xf,0x30,0x43, 0xf,0x30,0x45, + 0xf,0x30,0x46, 0xf,0x30,0x47, 0xf,0x30,0x48, 0xf,0x30,0x4a, + 0xf,0x30,0x4b, 0xf,0x30,0x4c, 0xf,0x30,0x4d, 0xf,0x30,0x4e, + 0xf,0x30,0x4f, 0xf,0x30,0x50, 0xf,0x30,0x51, 0xf,0x30,0x52, + 0xf,0x30,0x53, 0xf,0x30,0x54, 0xf,0x30,0x55, 0xf,0x30,0x56, + 0xf,0x30,0x58, 0xf,0x30,0x59, 0xf,0x30,0x5a, 0x6,0x38,0x79, + 0x6,0x39,0x22, 0x6,0x39,0x31, 0x4,0x2d,0x72, 0x6,0x39,0x27, + 0x6,0x38,0x7d, 0x6,0x38,0x75, 0x5,0x2e,0x46, 0xf,0x36,0x2d, + 0x4,0x32,0x5d, 0x5,0x33,0x40, 0x4,0x32,0x5b, 0x4,0x32,0x6b, + 0x6,0x41,0x34, 0x6,0x41,0x38, 0x6,0x41,0x3c, 0x4,0x32,0x6a, + 0x6,0x41,0x43, 0x4,0x32,0x61, 0x6,0x41,0x36, 0x4,0x32,0x65, + 0x6,0x41,0x35, 0x6,0x41,0x45, 0x4,0x32,0x69, 0x5,0x33,0x33, + 0x6,0x41,0x31, 0x4,0x32,0x60, 0x4,0x32,0x67, 0x6,0x4a,0x64, + 0x5,0x33,0x3f, 0x6,0x41,0x42, 0x5,0x33,0x3e, 0x6,0x41,0x3f, + 0x4,0x32,0x59, 0x4,0x32,0x5f, 0x6,0x41,0x2c, 0x4,0x25,0x2f, + 0x6,0x41,0x3b, 0x6,0x41,0x30, 0x6,0x4a,0x66, 0x5,0x33,0x38, + 0x5,0x33,0x41, 0x6,0x4a,0x58, 0x6,0x4a,0x59, 0x6,0x41,0x3e, + 0x6,0x41,0x44, 0x5,0x33,0x36, 0x4,0x32,0x62, 0x6,0x41,0x40, + 0x5,0x33,0x3b, 0x6,0x41,0x2f, 0x6,0x41,0x32, 0x5,0x33,0x3a, + 0x5,0x33,0x35, 0x4,0x32,0x6c, 0x4,0x32,0x6e, 0x5,0x33,0x37, + 0x6,0x41,0x3d, 0xf,0x36,0x21, 0xf,0x36,0x22, 0xf,0x36,0x23, + 0xf,0x36,0x25, 0xf,0x36,0x26, 0xf,0x36,0x27, 0xf,0x36,0x28, + 0xf,0x36,0x2a, 0xf,0x36,0x2c, 0xf,0x36,0x2e, 0xf,0x36,0x2f, + 0xf,0x36,0x30, 0xf,0x36,0x31, 0xf,0x36,0x32, 0xf,0x36,0x36, + 0xf,0x36,0x37, 0xf,0x36,0x38, 0xf,0x36,0x39, 0xf,0x36,0x3a, + 0xf,0x36,0x3b, 0xf,0x36,0x3c, 0xf,0x36,0x3d, 0xf,0x3c,0x42, + 0xf,0x3c,0x4b, 0xf,0x3c,0x4d, 0xf,0x3c,0x57, 0xf,0x42,0x5f, + 0x6,0x4a,0x57, 0x6,0x41,0x33, 0x6,0x41,0x37, 0x5,0x33,0x39, + 0x6,0x41,0x3a, 0x6,0x41,0x39, 0x6,0x41,0x47, 0x6,0x41,0x2d, + 0x6,0x41,0x2e, 0x5,0x33,0x34, 0x5,0x33,0x3c, 0x6,0x38,0x7a, + 0x6,0x4a,0x62, 0x6,0x4a,0x70, 0x4,0x38,0x54, 0x5,0x39,0x63, + 0x4,0x38,0x55, 0x6,0x4a,0x5d, 0x6,0x4a,0x5f, 0x5,0x39,0x67, + 0x5,0x39,0x6a, 0x5,0x39,0x62, 0x6,0x54,0x48, 0x5,0x39,0x6c, + 0x6,0x4a,0x5a, 0x4,0x38,0x53, 0x5,0x33,0x42, 0x4,0x38,0x58, + 0x6,0x4a,0x6c, 0x6,0x4a,0x5c, 0x5,0x39,0x68, 0x6,0x4a,0x71, + 0x6,0x54,0x35, 0x6,0x4a,0x67, 0x6,0x4a,0x68, 0x6,0x4a,0x6e, + 0x5,0x39,0x60, 0x6,0x54,0x34, 0x6,0x4a,0x6f, 0x4,0x3e,0x2c, + 0x5,0x39,0x5f, 0x5,0x39,0x66, 0x5,0x39,0x65, 0x5,0x39,0x64, + 0x6,0x4a,0x6a, 0x5,0x39,0x61, 0x6,0x54,0x33, 0x6,0x4a,0x72, + 0x5,0x39,0x6d, 0x6,0x4a,0x61, 0xf,0x3c,0x44, 0xf,0x3c,0x45, + 0xf,0x3c,0x46, 0xf,0x3c,0x48, 0xf,0x3c,0x49, 0xf,0x3c,0x4a, + 0xf,0x3c,0x4e, 0xf,0x3c,0x4f, 0xf,0x3c,0x50, 0xf,0x3c,0x51, + 0xf,0x3c,0x52, 0xf,0x3c,0x53, 0xf,0x3c,0x54, 0xf,0x3c,0x55, + 0xf,0x3c,0x56, 0xf,0x3c,0x58, 0xf,0x3c,0x59, 0xf,0x3c,0x5b, + 0xf,0x3c,0x5c, 0x6,0x4a,0x69, 0x5,0x39,0x69, 0x6,0x4a,0x6b, + 0x4,0x38,0x5d, 0x6,0x4a,0x5b, 0x6,0x4a,0x60, 0x6,0x4a,0x5e, + 0x5,0x39,0x6b, 0xf,0x42,0x73, 0x6,0x54,0x41, 0x5,0x40,0x25, + 0x4,0x3e,0x41, 0x6,0x54,0x38, 0x4,0x3e,0x34, 0x6,0x54,0x3b, + 0x6,0x54,0x43, 0x4,0x3e,0x3b, 0x4,0x3e,0x43, 0x4,0x3e,0x3e, + 0x4,0x3e,0x2e, 0x6,0x54,0x4a, 0x5,0x40,0x29, 0x5,0x40,0x26, + 0x4,0x3e,0x40, 0x6,0x5e,0x31, 0x6,0x54,0x42, 0x4,0x3e,0x3a, + 0x5,0x40,0x2f, 0x5,0x40,0x2d, 0x4,0x3e,0x31, 0x6,0x5e,0x32, + 0x4,0x3e,0x42, 0x5,0x40,0x2c, 0x5,0x40,0x2e, 0x6,0x54,0x3e, + 0x6,0x54,0x4c, 0x7,0x24,0x3c, 0x6,0x54,0x47, 0x4,0x44,0x4b, + 0x6,0x54,0x3f, 0x6,0x54,0x46, 0x6,0x54,0x37, 0x6,0x54,0x36, + 0x5,0x40,0x2b, 0x5,0x40,0x28, 0x4,0x3e,0x3d, 0x6,0x54,0x3c, + 0x6,0x54,0x3d, 0x6,0x54,0x40, 0x6,0x54,0x45, 0xf,0x42,0x58, + 0xf,0x42,0x59, 0xf,0x42,0x5a, 0xf,0x42,0x5b, 0xf,0x42,0x5c, + 0xf,0x42,0x5d, 0xf,0x42,0x5e, 0xf,0x42,0x60, 0xf,0x42,0x61, + 0xf,0x42,0x62, 0xf,0x42,0x65, 0xf,0x42,0x66, 0xf,0x42,0x67, + 0xf,0x42,0x68, 0xf,0x42,0x69, 0xf,0x42,0x6a, 0xf,0x42,0x6c, + 0xf,0x42,0x6d, 0xf,0x42,0x6e, 0xf,0x42,0x6f, 0xf,0x42,0x70, + 0xf,0x42,0x71, 0xf,0x42,0x72, 0xf,0x42,0x75, 0xf,0x49,0x22, + 0xf,0x49,0x3e, 0x5,0x40,0x2a, 0x6,0x54,0x44, 0x4,0x3e,0x35, + 0x6,0x54,0x4d, 0x6,0x54,0x3a, 0x6,0x54,0x4b, 0xf,0x49,0x2f, + 0xf,0x42,0x6b, 0xf,0x4f,0x6c, 0x6,0x54,0x39, 0x7,0x24,0x3d, + 0x4,0x44,0x54, 0x4,0x44,0x47, 0x4,0x44,0x48, 0x4,0x44,0x4c, + 0x5,0x46,0x6b, 0x4,0x44,0x4e, 0x5,0x46,0x6a, 0x5,0x46,0x74, + 0x5,0x46,0x76, 0x4,0x44,0x45, 0x4,0x44,0x53, 0x6,0x5e,0x44, + 0x5,0x46,0x6f, 0x6,0x5e,0x41, 0x6,0x5e,0x3a, 0x4,0x44,0x51, + 0x4,0x44,0x50, 0x5,0x46,0x75, 0x5,0x46,0x72, 0x5,0x46,0x6d, + 0x7,0x24,0x40, 0x7,0x24,0x3f, 0x5,0x46,0x77, 0x6,0x5e,0x45, + 0x4,0x44,0x4f, 0x6,0x5e,0x39, 0x6,0x5e,0x42, 0x5,0x46,0x70, + 0x5,0x46,0x71, 0x4,0x44,0x41, 0x6,0x5e,0x3d, 0x5,0x4d,0x7a, + 0x7,0x24,0x3e, 0x6,0x5e,0x34, 0x5,0x46,0x6e, 0x6,0x5e,0x3f, + 0x5,0x46,0x73, 0xf,0x49,0x23, 0xf,0x49,0x24, 0xf,0x49,0x25, + 0xf,0x49,0x26, 0xf,0x49,0x27, 0xf,0x49,0x28, 0xf,0x49,0x29, + 0xf,0x49,0x2b, 0xf,0x49,0x2c, 0xf,0x49,0x2d, 0xf,0x49,0x2e, + 0xf,0x49,0x30, 0xf,0x49,0x31, 0xf,0x49,0x34, 0xf,0x49,0x36, + 0xf,0x49,0x37, 0xf,0x49,0x38, 0xf,0x49,0x39, 0xf,0x49,0x3a, + 0xf,0x49,0x3c, 0xf,0x49,0x3d, 0xf,0x49,0x41, 0xf,0x49,0x42, + 0xf,0x49,0x43, 0xf,0x4f,0x6d, 0x7,0x22,0x68, 0x4,0x44,0x42, + 0x6,0x5e,0x3c, 0x6,0x5e,0x43, 0x6,0x5e,0x35, 0x5,0x46,0x6c, + 0x6,0x5e,0x33, 0x6,0x5e,0x37, 0x6,0x5e,0x38, 0xf,0x49,0x3b, + 0x6,0x5e,0x36, 0xf,0x49,0x2a, 0x7,0x24,0x62, 0x7,0x24,0x52, + 0x7,0x24,0x4d, 0x4,0x4a,0x60, 0x7,0x24,0x5a, 0x7,0x24,0x54, + 0x7,0x24,0x4c, 0x4,0x4a,0x65, 0x4,0x4a,0x67, 0x5,0x4e,0x25, + 0x7,0x24,0x63, 0x7,0x24,0x4e, 0x7,0x24,0x50, 0x7,0x24,0x56, + 0x4,0x4a,0x5c, 0x7,0x24,0x57, 0x7,0x24,0x49, 0x5,0x4e,0x21, + 0x7,0x24,0x65, 0x7,0x24,0x47, 0x7,0x24,0x44, 0x4,0x4a,0x66, + 0x5,0x4d,0x7b, 0x5,0x4e,0x24, 0x7,0x24,0x64, 0x4,0x4a,0x5b, + 0x7,0x24,0x5b, 0x4,0x4a,0x5a, 0x7,0x24,0x59, 0x5,0x4d,0x7e, + 0x7,0x24,0x43, 0x7,0x24,0x67, 0x5,0x4e,0x23, 0x5,0x4d,0x7d, + 0x7,0x24,0x53, 0x7,0x24,0x42, 0x7,0x3a,0x69, 0x7,0x24,0x45, + 0x7,0x24,0x68, 0x5,0x4e,0x22, 0x7,0x24,0x41, 0x7,0x24,0x5e, + 0x7,0x24,0x66, 0x5,0x4e,0x26, 0x5,0x4e,0x28, 0x5,0x4d,0x7c, + 0x4,0x4a,0x5e, 0x7,0x24,0x5f, 0x7,0x24,0x4b, 0x7,0x24,0x51, + 0x5,0x4e,0x27, 0x7,0x24,0x5c, 0xf,0x4f,0x59, 0xf,0x4f,0x5a, + 0xf,0x4f,0x5b, 0xf,0x4f,0x5c, 0xf,0x4f,0x5d, 0xf,0x4f,0x5e, + 0xf,0x4f,0x5f, 0xf,0x4f,0x62, 0xf,0x4f,0x63, 0xf,0x4f,0x64, + 0xf,0x4f,0x65, 0xf,0x4f,0x66, 0xf,0x4f,0x67, 0xf,0x4f,0x68, + 0xf,0x4f,0x6a, 0xf,0x4f,0x6b, 0xf,0x4f,0x6f, 0xf,0x4f,0x70, + 0xf,0x4f,0x71, 0xf,0x4f,0x72, 0xf,0x4f,0x73, 0xf,0x4f,0x74, + 0xf,0x4f,0x75, 0xf,0x4f,0x76, 0xf,0x4f,0x77, 0xf,0x4f,0x78, + 0xf,0x4f,0x7b, 0xf,0x4f,0x7c, 0xf,0x55,0x51, 0x7,0x24,0x55, + 0x7,0x24,0x60, 0x7,0x2f,0x30, 0x4,0x4a,0x63, 0x7,0x24,0x46, + 0x7,0x24,0x5d, 0x7,0x24,0x48, 0x7,0x24,0x4a, 0xf,0x55,0x4a, + 0xf,0x4f,0x7e, 0xf,0x49,0x40, 0x4,0x50,0x7c, 0x5,0x55,0x35, + 0x5,0x55,0x34, 0x5,0x55,0x28, 0x5,0x55,0x29, 0x5,0x55,0x2b, + 0x7,0x2f,0x33, 0x5,0x55,0x30, 0x7,0x2f,0x47, 0x7,0x2f,0x40, + 0x7,0x2f,0x3a, 0x4,0x50,0x79, 0x7,0x2f,0x39, 0x4,0x50,0x7e, + 0x5,0x55,0x33, 0x7,0x2f,0x3d, 0x7,0x2f,0x31, 0x7,0x2f,0x37, + 0x7,0x2f,0x46, 0x7,0x2f,0x3b, 0x7,0x2f,0x38, 0x7,0x2f,0x43, + 0x7,0x2f,0x36, 0x7,0x2f,0x32, 0x5,0x55,0x31, 0x5,0x55,0x2a, + 0x5,0x5b,0x77, 0x7,0x2f,0x3c, 0x7,0x2f,0x49, 0x5,0x55,0x2c, + 0x5,0x5b,0x79, 0x5,0x55,0x32, 0x7,0x2f,0x2f, 0x7,0x2f,0x34, + 0x7,0x2f,0x3e, 0x7,0x2f,0x41, 0xf,0x55,0x46, 0xf,0x55,0x48, + 0xf,0x55,0x49, 0xf,0x55,0x4b, 0xf,0x55,0x4c, 0xf,0x55,0x4f, + 0xf,0x55,0x50, 0xf,0x55,0x52, 0xf,0x55,0x53, 0xf,0x55,0x54, + 0xf,0x55,0x55, 0xf,0x55,0x57, 0xf,0x5a,0x6d, 0x5,0x55,0x2f, + 0x7,0x2f,0x3f, 0x7,0x2f,0x45, 0x7,0x2f,0x48, 0x7,0x2f,0x4a, + 0x7,0x2f,0x2e, 0x7,0x2f,0x44, 0x4,0x51,0x21, 0xf,0x4f,0x61, + 0xf,0x5a,0x66, 0xf,0x5a,0x5f, 0x5,0x54,0x3a, 0x5,0x5b,0x7c, + 0x4,0x56,0x5a, 0x4,0x56,0x5f, 0x5,0x5b,0x7a, 0x7,0x38,0x7a, + 0x7,0x38,0x6e, 0x4,0x5b,0x52, 0x5,0x5b,0x7b, 0x5,0x5b,0x78, + 0x7,0x38,0x70, 0x7,0x38,0x76, 0x7,0x38,0x6f, 0x7,0x38,0x79, + 0x7,0x38,0x74, 0x7,0x38,0x73, 0x5,0x62,0x38, 0x7,0x38,0x75, + 0x7,0x38,0x7b, 0x5,0x5b,0x7d, 0x7,0x38,0x77, 0x5,0x55,0x37, + 0x3,0x55,0x3a, 0x7,0x38,0x78, 0xf,0x5a,0x60, 0xf,0x5a,0x61, + 0xf,0x5a,0x62, 0xf,0x5a,0x63, 0xf,0x5a,0x64, 0xf,0x5a,0x65, + 0xf,0x5a,0x67, 0xf,0x5a,0x69, 0xf,0x5a,0x6b, 0xf,0x5a,0x70, + 0x7,0x38,0x72, 0x5,0x5b,0x7e, 0x7,0x38,0x7c, 0x7,0x38,0x71, + 0xf,0x55,0x4e, 0xf,0x5a,0x6c, 0xf,0x5a,0x6f, 0xf,0x55,0x47, + 0xf,0x55,0x4d, 0xf,0x5a,0x5e, 0x7,0x2f,0x35, 0x5,0x62,0x3f, + 0x5,0x62,0x46, 0x5,0x62,0x45, 0x4,0x5b,0x5d, 0x5,0x62,0x3d, + 0x5,0x62,0x39, 0x5,0x62,0x42, 0x7,0x40,0x40, 0x7,0x40,0x46, + 0x4,0x5b,0x59, 0x5,0x62,0x4b, 0x5,0x62,0x44, 0x7,0x40,0x3c, + 0x5,0x62,0x41, 0x5,0x62,0x4a, 0x4,0x5b,0x58, 0x5,0x62,0x43, + 0x7,0x40,0x47, 0x5,0x62,0x3b, 0x7,0x40,0x41, 0x5,0x62,0x40, + 0x7,0x40,0x48, 0x7,0x40,0x3a, 0x4,0x5b,0x5f, 0x4,0x5b,0x55, + 0x7,0x40,0x45, 0x7,0x40,0x44, 0x7,0x40,0x3e, 0x5,0x62,0x3a, + 0x4,0x5b,0x53, 0x5,0x62,0x3c, 0x5,0x62,0x3e, 0x5,0x62,0x49, + 0x5,0x62,0x4c, 0x5,0x62,0x47, 0x7,0x40,0x3f, 0x4,0x5b,0x5c, + 0x7,0x40,0x42, 0x7,0x47,0x5f, 0x5,0x62,0x4d, 0xf,0x5f,0x33, + 0xf,0x5f,0x35, 0xf,0x5f,0x36, 0xf,0x5f,0x37, 0xf,0x5f,0x39, + 0xf,0x5f,0x3a, 0xf,0x5f,0x3b, 0xf,0x5f,0x3c, 0xf,0x5f,0x3d, + 0xf,0x5f,0x3e, 0xf,0x5f,0x3f, 0xf,0x5f,0x40, 0xf,0x5f,0x41, + 0xf,0x5f,0x42, 0xf,0x5f,0x43, 0xf,0x62,0x64, 0xf,0x62,0x65, + 0xf,0x62,0x6c, 0x7,0x47,0x5e, 0x7,0x40,0x3d, 0x7,0x40,0x39, + 0x7,0x40,0x43, 0x7,0x40,0x3b, 0xf,0x5f,0x34, 0xf,0x5a,0x6a, + 0xf,0x5a,0x6e, 0x5,0x62,0x48, 0x7,0x47,0x65, 0x7,0x47,0x5c, + 0x7,0x47,0x62, 0x4,0x5f,0x7c, 0x4,0x5f,0x7a, 0x7,0x47,0x53, + 0x5,0x68,0x36, 0x7,0x47,0x56, 0x7,0x47,0x54, 0x7,0x47,0x5b, + 0x7,0x47,0x5a, 0x7,0x47,0x55, 0x5,0x68,0x35, 0x7,0x47,0x59, + 0x7,0x47,0x5d, 0x5,0x6c,0x45, 0x7,0x47,0x61, 0xf,0x62,0x66, + 0xf,0x62,0x67, 0xf,0x62,0x68, 0xf,0x62,0x69, 0xf,0x62,0x6a, + 0xf,0x62,0x6d, 0xf,0x62,0x6e, 0xf,0x62,0x6f, 0xf,0x62,0x70, + 0xf,0x62,0x71, 0x7,0x47,0x57, 0x7,0x47,0x60, 0x7,0x47,0x66, + 0x7,0x47,0x64, 0x7,0x47,0x63, 0x7,0x47,0x58, 0x5,0x6c,0x47, + 0x5,0x6c,0x4a, 0x5,0x6c,0x4b, 0x7,0x4e,0x2b, 0x4,0x63,0x59, + 0x4,0x63,0x5d, 0x7,0x4e,0x2a, 0x7,0x4e,0x29, 0x5,0x6c,0x48, + 0x4,0x63,0x5c, 0x7,0x4e,0x2e, 0x4,0x63,0x57, 0x4,0x63,0x58, + 0x4,0x63,0x56, 0x7,0x4e,0x2d, 0x5,0x70,0x3b, 0x5,0x6c,0x49, + 0x5,0x6c,0x4c, 0x7,0x4e,0x2f, 0xf,0x65,0x42, 0xf,0x65,0x43, + 0xf,0x65,0x44, 0x7,0x4e,0x2c, 0x4,0x66,0x48, 0x5,0x70,0x40, + 0x7,0x53,0x56, 0x5,0x70,0x3f, 0x5,0x70,0x3d, 0x4,0x66,0x4b, + 0x7,0x53,0x54, 0x5,0x70,0x3c, 0x7,0x53,0x59, 0x7,0x53,0x53, + 0x4,0x66,0x4d, 0x7,0x53,0x5f, 0x5,0x70,0x41, 0x7,0x53,0x55, + 0x7,0x53,0x5a, 0xf,0x67,0x68, 0xf,0x67,0x69, 0xf,0x67,0x6a, + 0xf,0x67,0x6b, 0xf,0x67,0x6d, 0xf,0x67,0x6e, 0xf,0x67,0x6f, + 0x7,0x53,0x5b, 0x7,0x53,0x5c, 0x7,0x53,0x5d, 0x7,0x53,0x5e, + 0x5,0x70,0x3a, 0xf,0x67,0x70, 0xf,0x69,0x55, 0x7,0x58,0x2e, + 0x7,0x53,0x57, 0x7,0x58,0x2f, 0x5,0x73,0x54, 0x5,0x70,0x42, + 0x7,0x58,0x2d, 0x5,0x73,0x55, 0x7,0x58,0x31, 0x4,0x68,0x72, + 0x7,0x58,0x32, 0xf,0x69,0x53, 0xf,0x69,0x54, 0x7,0x58,0x33, + 0x7,0x58,0x30, 0x7,0x58,0x2c, 0x5,0x76,0x21, 0x5,0x76,0x22, + 0x7,0x5b,0x69, 0x7,0x5b,0x68, 0x5,0x75,0x7e, 0x7,0x5b,0x67, + 0x5,0x75,0x7d, 0xf,0x6a,0x5b, 0xf,0x6a,0x5c, 0xf,0x6a,0x5d, + 0x7,0x5b,0x6a, 0x7,0x5b,0x66, 0x7,0x5e,0x76, 0x5,0x77,0x67, + 0x7,0x5e,0x77, 0x4,0x6c,0x71, 0x7,0x5e,0x74, 0x5,0x77,0x66, + 0x7,0x5e,0x75, 0x4,0x6c,0x72, 0x7,0x60,0x79, 0x7,0x60,0x78, + 0x7,0x60,0x77, 0xf,0x6c,0x2f, 0x7,0x62,0x39, 0x4,0x6d,0x58, + 0x5,0x7a,0x2b, 0x5,0x7a,0x2a, 0x4,0x6d,0x59, 0x4,0x6d,0x74, + 0x5,0x7a,0x69, 0x5,0x7a,0x6a, 0x7,0x63,0x57, 0x7,0x64,0x4b, + 0x5,0x7b,0x41, 0xf,0x6d,0x26, 0x7,0x65,0x5c, 0x5,0x7c,0x3c, + 0x6,0x23,0x2f, 0x6,0x25,0x33, 0x4,0x23,0x24, 0x4,0x23,0x25, + 0x6,0x25,0x32, 0xf,0x22,0x5f, 0xf,0x22,0x60, 0xf,0x22,0x61, + 0x6,0x25,0x34, 0x4,0x24,0x53, 0x4,0x24,0x54, 0x5,0x24,0x54, + 0x6,0x28,0x4c, 0x5,0x24,0x55, 0x5,0x24,0x57, 0xf,0x24,0x6b, + 0xf,0x24,0x6c, 0xf,0x24,0x6d, 0xf,0x24,0x70, 0xf,0x24,0x72, + 0x6,0x28,0x4b, 0x5,0x26,0x74, 0x4,0x27,0x28, 0x5,0x26,0x75, + 0xf,0x27,0x6f, 0xf,0x27,0x70, 0xf,0x27,0x71, 0xf,0x27,0x73, + 0xf,0x27,0x74, 0xf,0x27,0x75, 0xf,0x27,0x76, 0xf,0x27,0x77, + 0x6,0x2c,0x5f, 0xf,0x27,0x72, 0x6,0x2c,0x5e, 0x4,0x27,0x2a, + 0x5,0x24,0x56, 0x5,0x2a,0x25, 0x6,0x32,0x4c, 0x5,0x2a,0x26, + 0x6,0x32,0x44, 0x5,0x2a,0x27, 0x6,0x32,0x4b, 0x6,0x32,0x46, + 0xf,0x2b,0x6f, 0xf,0x2b,0x70, 0xf,0x2b,0x71, 0xf,0x2b,0x72, + 0xf,0x2b,0x73, 0xf,0x2b,0x74, 0xf,0x2b,0x75, 0xf,0x2b,0x76, + 0xf,0x2b,0x77, 0xf,0x2b,0x78, 0xf,0x2b,0x79, 0xf,0x2b,0x7b, + 0xf,0x2b,0x7c, 0xf,0x2b,0x7d, 0xf,0x2b,0x7e, 0xf,0x2c,0x21, + 0xf,0x2c,0x23, 0x4,0x2a,0x29, 0x6,0x32,0x45, 0x6,0x32,0x43, + 0x6,0x32,0x47, 0x6,0x39,0x3a, 0x5,0x2a,0x28, 0x6,0x32,0x4a, + 0xf,0x2c,0x22, 0x6,0x32,0x49, 0x5,0x2e,0x4f, 0x5,0x2e,0x4e, + 0x6,0x39,0x36, 0x6,0x39,0x39, 0xf,0x30,0x6a, 0x4,0x32,0x6f, + 0x6,0x39,0x37, 0x4,0x2d,0x74, 0x6,0x39,0x34, 0x5,0x2e,0x4b, + 0xf,0x30,0x5d, 0xf,0x30,0x5e, 0xf,0x30,0x5f, 0xf,0x30,0x60, + 0xf,0x30,0x61, 0xf,0x30,0x62, 0xf,0x30,0x63, 0xf,0x30,0x64, + 0xf,0x30,0x65, 0xf,0x30,0x66, 0xf,0x30,0x68, 0xf,0x30,0x69, + 0xf,0x30,0x6b, 0xf,0x30,0x6c, 0xf,0x30,0x6e, 0xf,0x30,0x6f, + 0xf,0x30,0x70, 0xf,0x30,0x71, 0xf,0x30,0x72, 0x5,0x2e,0x4c, + 0x6,0x39,0x35, 0x6,0x39,0x3b, 0x6,0x39,0x3c, 0xf,0x30,0x67, + 0xf,0x30,0x6d, 0x6,0x39,0x38, 0x5,0x2e,0x4d, 0x6,0x41,0x4b, + 0x4,0x32,0x74, 0x5,0x33,0x44, 0x6,0x41,0x4f, 0x4,0x32,0x73, + 0x4,0x32,0x75, 0x6,0x41,0x4e, 0x6,0x41,0x54, 0x6,0x41,0x51, + 0x6,0x41,0x4d, 0x6,0x41,0x4c, 0x6,0x4a,0x73, 0x6,0x41,0x52, + 0x6,0x41,0x50, 0x6,0x41,0x53, 0xf,0x36,0x24, 0xf,0x36,0x3e, + 0xf,0x36,0x3f, 0xf,0x36,0x40, 0xf,0x36,0x41, 0xf,0x36,0x43, + 0xf,0x36,0x44, 0xf,0x36,0x45, 0xf,0x36,0x46, 0xf,0x36,0x47, + 0xf,0x36,0x49, 0xf,0x36,0x4a, 0xf,0x36,0x4c, 0xf,0x36,0x4d, + 0xf,0x36,0x4e, 0xf,0x36,0x50, 0x6,0x41,0x49, 0x6,0x41,0x48, + 0xf,0x36,0x4b, 0x5,0x33,0x43, 0x5,0x33,0x45, 0x6,0x41,0x55, + 0x4,0x38,0x69, 0x6,0x4a,0x78, 0x6,0x41,0x4a, 0x5,0x39,0x71, + 0x5,0x39,0x6f, 0x6,0x4a,0x7e, 0x6,0x4b,0x21, 0x5,0x39,0x6e, + 0x6,0x4a,0x75, 0x4,0x38,0x66, 0x6,0x4a,0x7a, 0x6,0x4a,0x74, + 0x6,0x4a,0x7d, 0x4,0x38,0x63, 0x5,0x39,0x70, 0x6,0x4a,0x77, + 0xf,0x3c,0x5e, 0xf,0x3c,0x5f, 0xf,0x3c,0x60, 0xf,0x3c,0x61, + 0xf,0x3c,0x62, 0xf,0x3c,0x63, 0xf,0x3c,0x64, 0xf,0x3c,0x66, + 0xf,0x3c,0x67, 0xf,0x3c,0x68, 0xf,0x3c,0x69, 0xf,0x3c,0x6b, + 0xf,0x3c,0x6c, 0xf,0x3c,0x6d, 0xf,0x3c,0x6e, 0xf,0x3c,0x6f, + 0xf,0x3c,0x70, 0xf,0x3c,0x71, 0xf,0x3c,0x72, 0xf,0x3c,0x75, + 0xf,0x3c,0x77, 0xf,0x3c,0x78, 0xf,0x3c,0x79, 0xf,0x3c,0x7a, + 0xf,0x3c,0x7b, 0xf,0x3c,0x7c, 0xf,0x3d,0x21, 0x6,0x4a,0x79, + 0x6,0x4a,0x7c, 0x4,0x38,0x67, 0x6,0x4a,0x76, 0x6,0x4a,0x7b, + 0xf,0x3c,0x6a, 0x5,0x39,0x72, 0x5,0x40,0x34, 0x6,0x54,0x5a, + 0x6,0x54,0x58, 0x5,0x40,0x30, 0x6,0x54,0x56, 0x6,0x54,0x5d, + 0x4,0x3e,0x47, 0x6,0x54,0x57, 0x4,0x3e,0x44, 0x6,0x54,0x5b, + 0x6,0x54,0x5e, 0x4,0x3e,0x45, 0x5,0x40,0x32, 0x6,0x54,0x53, + 0x6,0x54,0x63, 0x6,0x54,0x5f, 0x6,0x54,0x64, 0x5,0x40,0x35, + 0x6,0x54,0x5c, 0x6,0x54,0x62, 0xf,0x42,0x76, 0xf,0x42,0x79, + 0xf,0x42,0x7b, 0xf,0x42,0x7c, 0xf,0x42,0x7d, 0xf,0x43,0x21, + 0xf,0x43,0x22, 0xf,0x43,0x23, 0xf,0x43,0x25, 0xf,0x43,0x26, + 0xf,0x43,0x27, 0xf,0x43,0x28, 0xf,0x43,0x29, 0xf,0x43,0x2a, + 0xf,0x43,0x2b, 0xf,0x43,0x2d, 0xf,0x43,0x2e, 0xf,0x43,0x30, + 0xf,0x43,0x33, 0xf,0x43,0x34, 0xf,0x43,0x35, 0xf,0x43,0x36, + 0xf,0x43,0x37, 0xf,0x43,0x38, 0xf,0x43,0x39, 0xf,0x43,0x3a, + 0xf,0x43,0x3b, 0xf,0x43,0x3d, 0xf,0x43,0x3e, 0x6,0x54,0x51, + 0x6,0x54,0x52, 0x6,0x54,0x55, 0x6,0x54,0x66, 0x4,0x3e,0x4a, + 0x6,0x54,0x61, 0x6,0x54,0x65, 0x6,0x5a,0x54, 0xf,0x43,0x2c, + 0x5,0x40,0x33, 0x5,0x40,0x31, 0xf,0x49,0x54, 0x6,0x5e,0x51, + 0x6,0x5e,0x50, 0x5,0x46,0x7e, 0x6,0x5e,0x4a, 0x5,0x47,0x22, + 0x4,0x44,0x55, 0x5,0x46,0x7c, 0x5,0x46,0x7b, 0x5,0x46,0x7a, + 0x7,0x24,0x70, 0x7,0x24,0x6a, 0x6,0x5e,0x46, 0x5,0x47,0x21, + 0x6,0x5e,0x47, 0x6,0x5e,0x48, 0x5,0x46,0x79, 0x6,0x5e,0x4b, + 0x6,0x5e,0x4f, 0xf,0x49,0x44, 0xf,0x49,0x45, 0xf,0x49,0x46, + 0xf,0x49,0x47, 0xf,0x49,0x49, 0xf,0x49,0x4a, 0xf,0x49,0x4c, + 0xf,0x49,0x4d, 0xf,0x49,0x4e, 0xf,0x49,0x4f, 0xf,0x49,0x50, + 0xf,0x49,0x51, 0xf,0x49,0x52, 0xf,0x49,0x53, 0xf,0x49,0x55, + 0xf,0x49,0x56, 0xf,0x49,0x57, 0xf,0x49,0x5a, 0xf,0x49,0x5b, + 0xf,0x49,0x5d, 0xf,0x49,0x5e, 0xf,0x49,0x60, 0xf,0x49,0x62, + 0xf,0x49,0x63, 0xf,0x49,0x64, 0x4,0x44,0x5d, 0x5,0x46,0x7d, + 0x6,0x5e,0x4c, 0x6,0x5e,0x52, 0x6,0x5e,0x49, 0x6,0x5e,0x4d, + 0xf,0x49,0x5c, 0x6,0x54,0x60, 0xf,0x42,0x7e, 0xf,0x42,0x7a, + 0x4,0x4a,0x6b, 0x5,0x4e,0x2c, 0x7,0x24,0x74, 0x7,0x24,0x6d, + 0x7,0x24,0x69, 0x5,0x4e,0x2a, 0x7,0x24,0x6c, 0x7,0x24,0x71, + 0x7,0x24,0x72, 0x7,0x24,0x75, 0x7,0x24,0x6b, 0x5,0x4e,0x29, + 0xf,0x4e,0x22, 0x5,0x4e,0x2b, 0x7,0x24,0x73, 0xf,0x50,0x23, + 0xf,0x50,0x24, 0xf,0x50,0x26, 0xf,0x50,0x27, 0xf,0x50,0x28, + 0xf,0x50,0x29, 0xf,0x50,0x2a, 0xf,0x50,0x2b, 0xf,0x50,0x2e, + 0xf,0x50,0x2f, 0xf,0x50,0x31, 0xf,0x50,0x32, 0xf,0x50,0x33, + 0xf,0x50,0x34, 0xf,0x50,0x35, 0xf,0x50,0x37, 0xf,0x50,0x38, + 0xf,0x50,0x39, 0xf,0x50,0x3a, 0xf,0x50,0x3b, 0xf,0x50,0x3c, + 0x7,0x24,0x6e, 0xf,0x50,0x2c, 0x7,0x2a,0x71, 0xf,0x50,0x2d, + 0xf,0x50,0x30, 0xf,0x50,0x25, 0xf,0x50,0x22, 0x5,0x4e,0x2e, + 0x5,0x4e,0x2d, 0x6,0x5e,0x4e, 0x4,0x51,0x2a, 0x7,0x2f,0x52, + 0x7,0x2f,0x66, 0x7,0x2f,0x50, 0x7,0x2f,0x60, 0x7,0x2f,0x5e, + 0x5,0x55,0x3b, 0x4,0x51,0x27, 0x7,0x2f,0x61, 0x7,0x2f,0x63, + 0x7,0x2f,0x55, 0x7,0x24,0x6f, 0x4,0x51,0x28, 0x7,0x2f,0x56, + 0x7,0x2f,0x64, 0x7,0x2f,0x65, 0x4,0x51,0x26, 0x7,0x2f,0x58, + 0x7,0x2f,0x54, 0x4,0x51,0x29, 0x7,0x2f,0x67, 0x5,0x55,0x3a, + 0x5,0x55,0x3c, 0x7,0x2f,0x62, 0x7,0x2f,0x59, 0x7,0x2f,0x5d, + 0x7,0x2f,0x5a, 0x7,0x2f,0x4b, 0x7,0x2f,0x53, 0x7,0x2f,0x5c, + 0xf,0x55,0x59, 0xf,0x55,0x5a, 0xf,0x55,0x5b, 0xf,0x55,0x5c, + 0xf,0x55,0x5d, 0xf,0x55,0x5e, 0xf,0x55,0x5f, 0xf,0x55,0x60, + 0xf,0x55,0x61, 0xf,0x55,0x62, 0xf,0x55,0x63, 0xf,0x55,0x66, + 0xf,0x55,0x67, 0xf,0x55,0x68, 0xf,0x55,0x6a, 0xf,0x55,0x6b, + 0xf,0x55,0x6d, 0xf,0x55,0x6e, 0xf,0x55,0x70, 0xf,0x55,0x71, + 0xf,0x55,0x72, 0xf,0x55,0x65, 0x5,0x55,0x38, 0x7,0x2f,0x4d, + 0x7,0x2f,0x4e, 0x7,0x2f,0x5b, 0x7,0x2f,0x5f, 0x7,0x31,0x7a, + 0x7,0x2f,0x51, 0x7,0x2c,0x7b, 0xf,0x55,0x6f, 0x5,0x55,0x3d, + 0x5,0x55,0x39, 0x7,0x2f,0x4c, 0x7,0x24,0x76, 0x7,0x2f,0x57, + 0x7,0x39,0x23, 0x4,0x56,0x61, 0x7,0x39,0x25, 0x5,0x55,0x3e, + 0x7,0x39,0x29, 0x7,0x39,0x28, 0x4,0x56,0x63, 0x7,0x2f,0x68, + 0x5,0x5c,0x21, 0x7,0x38,0x7d, 0x5,0x5c,0x24, 0x5,0x5c,0x22, + 0xf,0x5a,0x71, 0xf,0x5a,0x72, 0xf,0x5a,0x76, 0xf,0x5a,0x77, + 0xf,0x5a,0x78, 0xf,0x5a,0x79, 0xf,0x5a,0x7a, 0xf,0x5a,0x7b, + 0xf,0x5a,0x7c, 0xf,0x5a,0x7d, 0xf,0x5a,0x7e, 0xf,0x5b,0x21, + 0xf,0x5b,0x22, 0xf,0x5b,0x23, 0x7,0x38,0x7e, 0x7,0x39,0x24, + 0x7,0x39,0x22, 0x5,0x5c,0x23, 0x7,0x39,0x21, 0xf,0x55,0x69, + 0x7,0x40,0x4f, 0x4,0x5b,0x62, 0x7,0x40,0x4e, 0x5,0x62,0x4e, + 0x7,0x40,0x4b, 0x7,0x40,0x53, 0x7,0x40,0x51, 0x7,0x40,0x4c, + 0x4,0x5b,0x63, 0x5,0x62,0x4f, 0x5,0x62,0x50, 0x4,0x5b,0x61, + 0x7,0x40,0x54, 0x7,0x40,0x4a, 0x7,0x40,0x52, 0xf,0x5f,0x44, + 0xf,0x5f,0x46, 0xf,0x5f,0x45, 0xf,0x5f,0x47, 0xf,0x5f,0x48, + 0xf,0x5f,0x49, 0xf,0x5f,0x4a, 0xf,0x5f,0x4c, 0xf,0x5f,0x4d, + 0x7,0x40,0x50, 0x7,0x42,0x22, 0x7,0x40,0x55, 0x7,0x40,0x4d, + 0x7,0x40,0x49, 0x7,0x39,0x2a, 0xf,0x61,0x76, 0xf,0x5a,0x74, + 0xf,0x5a,0x75, 0x7,0x47,0x6c, 0x5,0x68,0x37, 0x4,0x60,0x21, + 0x7,0x47,0x6d, 0x4,0x60,0x22, 0x7,0x47,0x6a, 0xf,0x62,0x74, + 0xf,0x62,0x75, 0xf,0x62,0x76, 0xf,0x62,0x77, 0x7,0x47,0x69, + 0x7,0x47,0x67, 0x7,0x47,0x6b, 0xf,0x5f,0x4b, 0x7,0x47,0x68, + 0xf,0x65,0x45, 0x5,0x6c,0x4f, 0x7,0x4e,0x30, 0x7,0x4e,0x33, + 0x7,0x4e,0x3b, 0x5,0x6c,0x4e, 0x5,0x6c,0x4d, 0x5,0x6c,0x51, + 0x4,0x60,0x23, 0x7,0x4e,0x32, 0x7,0x4e,0x38, 0x4,0x63,0x62, + 0x4,0x63,0x60, 0x7,0x4e,0x3c, 0x7,0x4e,0x31, 0x7,0x4e,0x35, + 0x7,0x4e,0x37, 0xf,0x65,0x48, 0x7,0x4e,0x34, 0xf,0x65,0x46, + 0xf,0x65,0x47, 0xf,0x65,0x4a, 0xf,0x65,0x4b, 0xf,0x65,0x4c, + 0xf,0x65,0x4d, 0xf,0x65,0x4e, 0x7,0x4e,0x39, 0x7,0x4e,0x36, + 0x7,0x4e,0x3a, 0x5,0x6c,0x50, 0x7,0x53,0x64, 0x4,0x63,0x61, + 0x7,0x53,0x66, 0x5,0x70,0x43, 0x4,0x66,0x4f, 0x7,0x53,0x67, + 0x7,0x53,0x62, 0x7,0x53,0x63, 0x7,0x53,0x65, 0xf,0x67,0x71, + 0xf,0x67,0x72, 0xf,0x67,0x73, 0xf,0x67,0x74, 0xf,0x67,0x75, + 0x7,0x58,0x36, 0x5,0x73,0x56, 0x4,0x6a,0x4f, 0x7,0x58,0x37, + 0x7,0x58,0x38, 0x7,0x58,0x34, 0xf,0x69,0x56, 0xf,0x69,0x57, + 0xf,0x69,0x58, 0x7,0x58,0x35, 0x7,0x5b,0x24, 0x7,0x5b,0x6e, + 0x7,0x5b,0x70, 0x7,0x5b,0x6d, 0x7,0x5c,0x44, 0x7,0x5b,0x6f, + 0x7,0x5b,0x6c, 0x7,0x5b,0x6b, 0x5,0x76,0x23, 0xf,0x6a,0x60, + 0x7,0x5e,0x78, 0xf,0x6a,0x5f, 0x5,0x77,0x68, 0x7,0x61,0x21, + 0x7,0x60,0x7c, 0x7,0x60,0x7e, 0x7,0x61,0x38, 0x7,0x60,0x7b, + 0x7,0x60,0x7d, 0x7,0x62,0x3a, 0x5,0x7a,0x6b, 0xf,0x6c,0x64, + 0xf,0x6c,0x65, 0x7,0x64,0x4d, 0x7,0x64,0x4c, 0x7,0x64,0x4e, + 0x7,0x65,0x37, 0x7,0x66,0x34, 0x5,0x21,0x4b, 0x6,0x23,0x30, + 0x6,0x28,0x4d, 0x6,0x28,0x4e, 0x5,0x24,0x58, 0x6,0x2c,0x62, + 0x6,0x2c,0x61, 0x6,0x2c,0x63, 0xf,0x27,0x78, 0xf,0x27,0x79, + 0x6,0x32,0x4e, 0x5,0x2a,0x2b, 0x5,0x2a,0x29, 0x6,0x32,0x4f, + 0x5,0x2a,0x2a, 0x6,0x32,0x51, 0xf,0x2c,0x24, 0xf,0x2c,0x25, + 0xf,0x2c,0x26, 0x6,0x32,0x4d, 0x6,0x32,0x50, 0x5,0x2e,0x51, + 0x5,0x2e,0x50, 0xf,0x30,0x73, 0x6,0x41,0x57, 0x6,0x41,0x56, + 0x6,0x41,0x58, 0xf,0x36,0x51, 0x4,0x38,0x6a, 0x6,0x4b,0x22, + 0x6,0x47,0x43, 0x6,0x4d,0x5d, 0x6,0x54,0x68, 0x6,0x54,0x69, + 0x6,0x5e,0x53, 0x5,0x47,0x23, 0x6,0x5e,0x56, 0x6,0x5e,0x55, + 0x6,0x5e,0x54, 0x7,0x24,0x7a, 0x5,0x4e,0x2f, 0x7,0x24,0x77, + 0x7,0x24,0x79, 0x7,0x24,0x78, 0x7,0x2f,0x69, 0x7,0x2f,0x6a, + 0x5,0x55,0x3f, 0x4,0x56,0x65, 0xf,0x5b,0x24, 0xf,0x5b,0x25, + 0xf,0x5b,0x26, 0xf,0x55,0x73, 0x7,0x40,0x56, 0x5,0x68,0x38, + 0xf,0x65,0x4f, 0xf,0x65,0x50, 0x7,0x4e,0x3d, 0x7,0x53,0x68, + 0x7,0x5b,0x71, 0x7,0x5e,0x79, 0x7,0x61,0x22, 0xf,0x24,0x73, + 0xf,0x24,0x74, 0x6,0x2c,0x64, 0x6,0x2c,0x65, 0x6,0x41,0x59, + 0x6,0x41,0x5a, 0xf,0x3d,0x22, 0xf,0x3d,0x23, 0x6,0x54,0x6a, + 0xf,0x49,0x65, 0x5,0x47,0x24, 0x5,0x55,0x40, 0xf,0x21,0x68, + 0x6,0x2b,0x6b, 0x5,0x2a,0x2c, 0x4,0x2a,0x2b, 0x4,0x2d,0x77, + 0xf,0x30,0x74, 0x5,0x31,0x6c, 0x6,0x4b,0x23, 0x6,0x54,0x6c, + 0x6,0x54,0x6b, 0x5,0x55,0x41, 0x7,0x24,0x7b, 0x7,0x24,0x7c, + 0x5,0x55,0x42, 0x6,0x22,0x25, 0x6,0x23,0x31, 0x6,0x25,0x35, + 0x6,0x28,0x4f, 0x4,0x27,0x2d, 0x6,0x2c,0x67, 0x6,0x2c,0x66, + 0x6,0x32,0x52, 0x4,0x2a,0x2d, 0x6,0x32,0x53, 0x6,0x32,0x54, + 0x6,0x39,0x3e, 0x4,0x2d,0x78, 0xf,0x30,0x75, 0x6,0x39,0x3d, + 0x6,0x41,0x5b, 0x6,0x41,0x5e, 0x6,0x41,0x5d, 0x4,0x32,0x78, + 0x6,0x41,0x5c, 0xf,0x36,0x52, 0xf,0x36,0x53, 0x6,0x4b,0x28, + 0x6,0x4b,0x24, 0x6,0x4b,0x26, 0x6,0x4b,0x27, 0x6,0x4b,0x29, + 0x6,0x4b,0x25, 0x6,0x4d,0x58, 0x6,0x54,0x6d, 0x6,0x54,0x6e, + 0xf,0x43,0x3f, 0x6,0x5e,0x58, 0x6,0x5e,0x59, 0xf,0x49,0x66, + 0x7,0x24,0x7d, 0xf,0x50,0x3e, 0x7,0x24,0x7e, 0x5,0x55,0x43, + 0x5,0x62,0x51, 0x4,0x51,0x2c, 0x7,0x2f,0x6b, 0x7,0x25,0x21, + 0x5,0x55,0x44, 0x7,0x39,0x2b, 0x7,0x39,0x2c, 0x5,0x5c,0x25, + 0x7,0x47,0x70, 0x5,0x6c,0x52, 0x7,0x58,0x39, 0x7,0x5b,0x72, + 0x7,0x63,0x58, 0x5,0x7b,0x42, 0x7,0x64,0x4f, 0xf,0x21,0x69, + 0x6,0x28,0x51, 0x5,0x24,0x59, 0x6,0x28,0x50, 0x4,0x27,0x2e, + 0x6,0x2c,0x6b, 0x6,0x2c,0x6a, 0x6,0x2c,0x69, 0x6,0x2c,0x68, + 0x6,0x32,0x56, 0x6,0x32,0x55, 0x5,0x2a,0x2d, 0x6,0x32,0x57, + 0x5,0x2a,0x2e, 0x5,0x2e,0x52, 0x4,0x2d,0x79, 0x4,0x2d,0x7b, + 0x6,0x39,0x41, 0x6,0x39,0x3f, 0x5,0x33,0x46, 0x5,0x33,0x47, + 0x6,0x41,0x5f, 0x6,0x41,0x62, 0x6,0x41,0x60, 0x6,0x4b,0x2b, + 0x4,0x38,0x6d, 0x6,0x4b,0x2e, 0x6,0x4b,0x2a, 0x6,0x4b,0x2c, + 0x6,0x4b,0x2d, 0x5,0x39,0x73, 0x5,0x39,0x76, 0x5,0x39,0x74, + 0x5,0x39,0x75, 0x4,0x38,0x6e, 0x5,0x40,0x38, 0x6,0x54,0x6f, + 0x4,0x3e,0x4d, 0x5,0x40,0x36, 0x5,0x40,0x37, 0x6,0x54,0x70, + 0xf,0x3d,0x24, 0x5,0x47,0x25, 0x6,0x5e,0x5b, 0x6,0x5e,0x5c, + 0x6,0x5e,0x5a, 0xf,0x49,0x67, 0x5,0x4e,0x32, 0x7,0x25,0x25, + 0x5,0x4e,0x31, 0x5,0x4e,0x30, 0x5,0x4e,0x33, 0x7,0x25,0x24, + 0x7,0x25,0x22, 0x5,0x4e,0x34, 0x7,0x25,0x23, 0x5,0x55,0x46, + 0x5,0x55,0x47, 0x5,0x55,0x48, 0x7,0x2f,0x6d, 0x5,0x55,0x45, + 0x7,0x2f,0x6c, 0x5,0x5c,0x26, 0x4,0x56,0x66, 0xf,0x5b,0x27, + 0xf,0x5b,0x28, 0x5,0x62,0x53, 0x5,0x62,0x52, 0x5,0x6c,0x53, + 0x7,0x53,0x69, 0x5,0x23,0x68, 0x6,0x39,0x43, 0x6,0x39,0x42, + 0x4,0x38,0x6f, 0x6,0x4b,0x2f, 0xf,0x3d,0x25, 0xf,0x3d,0x26, + 0x6,0x54,0x71, 0x6,0x5e,0x5d, 0x5,0x21,0x75, 0xf,0x22,0x63, + 0x6,0x25,0x36, 0xf,0x22,0x62, 0x6,0x28,0x53, 0xf,0x24,0x75, + 0x6,0x28,0x52, 0x6,0x28,0x54, 0x5,0x26,0x79, 0x5,0x27,0x22, + 0x5,0x26,0x78, 0x5,0x26,0x7b, 0x5,0x26,0x76, 0x5,0x26,0x7d, + 0x6,0x2c,0x6e, 0x4,0x27,0x30, 0x5,0x27,0x21, 0x6,0x2c,0x6c, + 0x5,0x26,0x7e, 0x5,0x27,0x23, 0x5,0x26,0x7c, 0x6,0x2c,0x6d, + 0xf,0x27,0x7b, 0xf,0x27,0x7c, 0xf,0x27,0x7e, 0xf,0x28,0x21, + 0x5,0x26,0x7a, 0x6,0x2c,0x6f, 0x6,0x2c,0x70, 0x5,0x2a,0x32, + 0x5,0x2a,0x30, 0x5,0x2a,0x2f, 0x6,0x32,0x5f, 0x6,0x32,0x5c, + 0x5,0x2a,0x33, 0x5,0x2a,0x31, 0x4,0x2a,0x30, 0x6,0x32,0x5a, + 0x6,0x32,0x59, 0xf,0x2c,0x28, 0xf,0x2c,0x29, 0x6,0x32,0x5b, + 0x6,0x32,0x5e, 0x6,0x32,0x58, 0x6,0x32,0x5d, 0x5,0x2a,0x34, + 0xf,0x27,0x7d, 0x5,0x2e,0x58, 0x5,0x2e,0x54, 0x5,0x2e,0x56, + 0x5,0x2e,0x57, 0x5,0x2e,0x55, 0x6,0x39,0x44, 0x5,0x2e,0x59, + 0x4,0x32,0x7b, 0x6,0x41,0x67, 0x6,0x41,0x68, 0x5,0x33,0x49, + 0x5,0x39,0x77, 0x4,0x32,0x7d, 0x4,0x32,0x7c, 0x5,0x33,0x4b, + 0x5,0x33,0x4c, 0xf,0x36,0x54, 0xf,0x36,0x55, 0x6,0x41,0x65, + 0x6,0x41,0x69, 0x6,0x41,0x64, 0x5,0x33,0x48, 0x4,0x38,0x71, + 0x4,0x38,0x74, 0x5,0x39,0x7d, 0x6,0x4b,0x34, 0x5,0x39,0x79, + 0x5,0x39,0x7b, 0x5,0x39,0x78, 0x6,0x4b,0x32, 0x6,0x4b,0x35, + 0xf,0x3d,0x27, 0xf,0x3d,0x28, 0x6,0x4b,0x33, 0x6,0x4b,0x30, + 0x6,0x4b,0x31, 0x5,0x39,0x7a, 0x5,0x39,0x7c, 0x5,0x33,0x4a, + 0xf,0x3d,0x29, 0x6,0x4b,0x36, 0x5,0x47,0x2b, 0x5,0x40,0x3e, + 0x5,0x40,0x3c, 0x4,0x3e,0x50, 0x6,0x5e,0x64, 0x6,0x54,0x73, + 0x5,0x47,0x26, 0x6,0x54,0x72, 0x6,0x54,0x75, 0x6,0x54,0x74, + 0xf,0x43,0x40, 0xf,0x43,0x41, 0x5,0x40,0x3d, 0x6,0x54,0x77, + 0x5,0x40,0x3b, 0x4,0x44,0x61, 0x5,0x47,0x2d, 0x5,0x47,0x28, + 0x5,0x47,0x2e, 0x5,0x47,0x2c, 0x6,0x5e,0x5f, 0x6,0x5e,0x63, + 0x5,0x47,0x27, 0x5,0x47,0x2a, 0x6,0x5e,0x67, 0x6,0x5e,0x62, + 0x6,0x5e,0x61, 0x5,0x40,0x3a, 0x6,0x5e,0x66, 0xf,0x49,0x68, + 0xf,0x49,0x69, 0xf,0x49,0x6a, 0xf,0x49,0x6b, 0x5,0x47,0x2f, + 0x5,0x47,0x29, 0x6,0x5e,0x60, 0x6,0x54,0x76, 0x6,0x5e,0x65, + 0xf,0x49,0x6c, 0x5,0x47,0x30, 0x5,0x4e,0x36, 0x7,0x25,0x26, + 0x4,0x4a,0x74, 0x5,0x4e,0x39, 0x5,0x4e,0x3a, 0x5,0x4e,0x38, + 0x4,0x4a,0x70, 0x5,0x4e,0x35, 0xf,0x50,0x3f, 0x7,0x25,0x28, + 0x7,0x25,0x27, 0x7,0x2f,0x70, 0x5,0x55,0x49, 0x5,0x55,0x4e, + 0x7,0x2f,0x71, 0x5,0x55,0x4b, 0x5,0x55,0x4d, 0x5,0x55,0x4a, + 0x5,0x55,0x4c, 0x7,0x2f,0x6f, 0x7,0x39,0x30, 0x7,0x39,0x2e, + 0x5,0x5c,0x27, 0x4,0x56,0x68, 0x4,0x56,0x69, 0x7,0x2f,0x6e, + 0x7,0x39,0x2f, 0x7,0x40,0x57, 0x7,0x40,0x58, 0x5,0x68,0x3a, + 0x7,0x53,0x6a, 0x7,0x47,0x72, 0x7,0x47,0x73, 0x7,0x47,0x71, + 0x5,0x68,0x39, 0x7,0x4e,0x3f, 0x5,0x6c,0x54, 0x5,0x6c,0x55, + 0x5,0x70,0x45, 0x7,0x53,0x6c, 0x5,0x70,0x44, 0x5,0x70,0x46, + 0x7,0x58,0x3a, 0x5,0x73,0x59, 0x7,0x5b,0x74, 0x5,0x73,0x58, + 0x7,0x5b,0x75, 0x7,0x5b,0x73, 0x5,0x77,0x69, 0x7,0x61,0x23, + 0xf,0x6c,0x31, 0x7,0x64,0x50, 0xf,0x21,0x3d, 0x6,0x23,0x32, + 0x5,0x21,0x77, 0x5,0x21,0x78, 0x5,0x22,0x78, 0x5,0x22,0x7b, + 0x5,0x22,0x77, 0x4,0x23,0x28, 0x5,0x22,0x7a, 0x6,0x25,0x37, + 0x5,0x22,0x79, 0x5,0x24,0x5e, 0x5,0x24,0x5f, 0x4,0x24,0x5b, + 0x4,0x27,0x37, 0x6,0x28,0x58, 0x4,0x24,0x5a, 0x5,0x24,0x5a, + 0x6,0x28,0x5e, 0x5,0x24,0x5b, 0x6,0x28,0x5b, 0x5,0x27,0x2f, + 0x6,0x2c,0x72, 0x4,0x24,0x57, 0x5,0x24,0x5d, 0x5,0x24,0x5c, + 0x6,0x28,0x5a, 0x6,0x28,0x59, 0x6,0x2c,0x73, 0xf,0x24,0x77, + 0x6,0x28,0x57, 0x6,0x28,0x5c, 0x6,0x28,0x5d, 0x6,0x28,0x56, + 0x4,0x24,0x58, 0x6,0x2c,0x7a, 0x5,0x27,0x28, 0x6,0x2c,0x7b, + 0x5,0x27,0x2c, 0x6,0x2c,0x79, 0x6,0x2c,0x7c, 0x5,0x27,0x27, + 0x5,0x27,0x2a, 0x6,0x2c,0x78, 0x5,0x27,0x2d, 0x5,0x27,0x25, + 0x5,0x27,0x29, 0x5,0x27,0x24, 0x6,0x2c,0x77, 0x4,0x27,0x38, + 0x5,0x2a,0x36, 0x6,0x28,0x55, 0x6,0x32,0x60, 0x5,0x27,0x2b, + 0x6,0x2c,0x76, 0xf,0x28,0x22, 0x6,0x2c,0x7d, 0x6,0x2c,0x74, + 0x4,0x27,0x35, 0x5,0x2a,0x35, 0x5,0x2a,0x3e, 0x6,0x32,0x68, + 0x5,0x2a,0x39, 0x6,0x39,0x4b, 0x5,0x2a,0x3d, 0x6,0x32,0x61, + 0x6,0x39,0x4c, 0x6,0x41,0x6c, 0x5,0x2a,0x3c, 0x4,0x2a,0x31, + 0x5,0x2a,0x3b, 0x6,0x32,0x64, 0x5,0x2a,0x3a, 0x6,0x32,0x66, + 0x4,0x2a,0x33, 0x5,0x2a,0x40, 0x6,0x32,0x63, 0x5,0x27,0x26, + 0x5,0x2a,0x37, 0x5,0x2a,0x38, 0xf,0x2c,0x2a, 0xf,0x2c,0x2c, + 0xf,0x2c,0x2d, 0x6,0x32,0x65, 0xf,0x2c,0x2b, 0x5,0x2a,0x3f, + 0x6,0x39,0x4e, 0x5,0x2e,0x5e, 0x4,0x33,0x21, 0x6,0x39,0x49, + 0x6,0x39,0x4d, 0x4,0x2e,0x25, 0x5,0x2e,0x5b, 0x5,0x2e,0x60, + 0x5,0x2e,0x5d, 0x4,0x2e,0x23, 0x6,0x39,0x45, 0x6,0x39,0x4a, + 0xf,0x30,0x77, 0xf,0x30,0x78, 0x6,0x39,0x48, 0x5,0x2e,0x5a, + 0x4,0x2e,0x24, 0x6,0x39,0x47, 0x6,0x39,0x4f, 0x5,0x2e,0x5f, + 0x6,0x39,0x46, 0x5,0x33,0x4e, 0xf,0x30,0x76, 0x4,0x33,0x24, + 0x6,0x41,0x6e, 0x5,0x33,0x55, 0x5,0x39,0x7e, 0x5,0x33,0x52, + 0x6,0x41,0x70, 0x6,0x41,0x73, 0x5,0x33,0x4f, 0x6,0x41,0x6f, + 0x6,0x4b,0x3b, 0x4,0x33,0x26, 0x5,0x33,0x53, 0x6,0x4b,0x38, + 0x6,0x4b,0x37, 0x5,0x33,0x50, 0x6,0x4b,0x39, 0x6,0x41,0x71, + 0x6,0x41,0x72, 0x6,0x41,0x74, 0x6,0x4b,0x3a, 0x5,0x3a,0x28, + 0x6,0x54,0x7b, 0x5,0x3a,0x26, 0x5,0x40,0x3f, 0x4,0x38,0x75, + 0x5,0x3a,0x22, 0x6,0x4b,0x44, 0x5,0x40,0x40, 0x5,0x3a,0x27, + 0x4,0x38,0x76, 0x5,0x3a,0x25, 0x5,0x3a,0x24, 0x4,0x38,0x78, + 0x6,0x4b,0x3f, 0x4,0x3e,0x51, 0x5,0x3a,0x21, 0x6,0x4b,0x3c, + 0x6,0x4b,0x3e, 0x4,0x3e,0x57, 0xf,0x3d,0x2a, 0xf,0x3d,0x2b, + 0x6,0x54,0x79, 0x6,0x52,0x72, 0x6,0x54,0x7a, 0x6,0x4b,0x40, + 0x6,0x4b,0x41, 0x6,0x4b,0x45, 0x6,0x4b,0x3d, 0x5,0x3a,0x23, + 0xf,0x43,0x43, 0x4,0x3e,0x56, 0x5,0x40,0x48, 0x6,0x55,0x22, + 0x5,0x40,0x47, 0x4,0x3e,0x55, 0x6,0x55,0x27, 0x5,0x40,0x4b, + 0x6,0x55,0x24, 0x6,0x54,0x7e, 0x6,0x54,0x7d, 0x6,0x55,0x26, + 0x5,0x40,0x46, 0x5,0x40,0x44, 0x5,0x40,0x43, 0x6,0x55,0x21, + 0x5,0x40,0x42, 0x6,0x55,0x28, 0x5,0x40,0x4a, 0x5,0x40,0x41, + 0x4,0x3e,0x58, 0x5,0x40,0x49, 0x6,0x55,0x25, 0xf,0x43,0x45, + 0xf,0x43,0x46, 0xf,0x49,0x70, 0xf,0x50,0x40, 0x5,0x40,0x45, + 0x6,0x55,0x23, 0x5,0x40,0x4c, 0x6,0x5e,0x6d, 0x5,0x47,0x3a, + 0x6,0x5e,0x69, 0x7,0x25,0x29, 0x5,0x47,0x37, 0x4,0x44,0x6b, + 0x5,0x47,0x35, 0x5,0x47,0x33, 0x6,0x5e,0x6c, 0x5,0x47,0x3b, + 0x5,0x47,0x36, 0x5,0x47,0x34, 0x6,0x5e,0x70, 0x4,0x44,0x6c, + 0x5,0x47,0x31, 0xf,0x49,0x6d, 0x7,0x25,0x2a, 0xf,0x49,0x6f, + 0x6,0x5e,0x6b, 0x6,0x5e,0x68, 0x6,0x5e,0x6a, 0x6,0x5e,0x6f, + 0x4,0x4a,0x7d, 0x5,0x47,0x3d, 0x5,0x47,0x3c, 0x5,0x47,0x39, + 0x5,0x47,0x38, 0x6,0x5e,0x71, 0x5,0x47,0x32, 0x7,0x25,0x31, + 0x4,0x4a,0x78, 0x4,0x4a,0x79, 0x7,0x25,0x30, 0x5,0x4e,0x3c, + 0x7,0x25,0x34, 0x7,0x2f,0x73, 0x5,0x4e,0x41, 0x7,0x25,0x2f, + 0x7,0x25,0x2b, 0x5,0x4e,0x3e, 0x5,0x4e,0x45, 0x5,0x4e,0x3b, + 0x5,0x4e,0x44, 0x5,0x4e,0x43, 0x5,0x4e,0x3d, 0x5,0x55,0x4f, + 0x7,0x2f,0x72, 0x5,0x4e,0x3f, 0x5,0x4e,0x40, 0x5,0x4e,0x46, + 0x7,0x25,0x2c, 0x7,0x25,0x2d, 0xf,0x55,0x75, 0x5,0x55,0x50, + 0x7,0x25,0x2e, 0x7,0x25,0x33, 0xf,0x49,0x6e, 0x4,0x51,0x33, + 0x5,0x4e,0x42, 0x5,0x55,0x57, 0x4,0x51,0x35, 0x5,0x55,0x55, + 0x5,0x55,0x51, 0x5,0x55,0x52, 0x7,0x2f,0x79, 0x4,0x51,0x31, + 0x7,0x2f,0x78, 0x7,0x2f,0x77, 0x5,0x5c,0x28, 0x4,0x51,0x36, + 0x5,0x55,0x53, 0x5,0x55,0x56, 0x7,0x2f,0x75, 0x7,0x39,0x32, + 0x4,0x56,0x6d, 0x7,0x39,0x31, 0x7,0x2f,0x76, 0x7,0x25,0x32, + 0xf,0x55,0x77, 0x7,0x25,0x35, 0x5,0x55,0x54, 0x5,0x5c,0x2a, + 0x7,0x39,0x33, 0x5,0x5c,0x29, 0x7,0x47,0x77, 0x7,0x39,0x35, + 0x7,0x39,0x34, 0xf,0x5b,0x29, 0xf,0x5b,0x2a, 0xf,0x5b,0x2b, + 0xf,0x5b,0x2c, 0x7,0x40,0x5d, 0x5,0x62,0x55, 0x5,0x62,0x54, + 0x7,0x40,0x5a, 0x7,0x40,0x59, 0x7,0x40,0x5c, 0x4,0x5b,0x68, + 0x7,0x40,0x5b, 0xf,0x5f,0x4e, 0xf,0x5f,0x4f, 0x5,0x62,0x56, + 0x4,0x63,0x64, 0x7,0x47,0x78, 0x7,0x4e,0x40, 0x7,0x47,0x76, + 0x7,0x47,0x74, 0x7,0x4e,0x41, 0x5,0x6c,0x56, 0x7,0x4e,0x42, + 0x5,0x70,0x48, 0x7,0x53,0x6d, 0x5,0x70,0x47, 0x4,0x68,0x74, + 0x5,0x70,0x49, 0x7,0x58,0x3b, 0x7,0x5b,0x76, 0x7,0x5b,0x78, + 0x7,0x5b,0x77, 0x5,0x77,0x6a, 0x7,0x5e,0x7a, 0xf,0x6b,0x55, + 0x7,0x61,0x24, 0x7,0x63,0x59, 0xf,0x28,0x23, 0x6,0x4b,0x46, + 0x6,0x5e,0x72, 0x5,0x21,0x4c, 0x6,0x25,0x38, 0x6,0x23,0x33, + 0x6,0x28,0x5f, 0x5,0x24,0x61, 0x4,0x24,0x5d, 0x4,0x24,0x5c, + 0x6,0x28,0x61, 0x6,0x28,0x60, 0xf,0x24,0x79, 0x5,0x24,0x60, + 0x5,0x27,0x30, 0x6,0x2d,0x25, 0x4,0x27,0x3c, 0x5,0x2a,0x41, + 0xf,0x28,0x25, 0xf,0x28,0x26, 0xf,0x28,0x27, 0xf,0x28,0x28, + 0xf,0x28,0x29, 0x6,0x2d,0x23, 0xf,0x2c,0x40, 0xf,0x28,0x24, + 0x6,0x2d,0x22, 0xf,0x2c,0x3c, 0x6,0x32,0x69, 0x5,0x2a,0x45, + 0x5,0x2a,0x42, 0x4,0x2a,0x36, 0x6,0x32,0x6b, 0x6,0x2f,0x69, + 0xf,0x2c,0x2f, 0xf,0x2c,0x30, 0xf,0x2c,0x31, 0xf,0x2c,0x33, + 0xf,0x2c,0x34, 0xf,0x2c,0x35, 0xf,0x2c,0x36, 0xf,0x2c,0x37, + 0xf,0x2c,0x38, 0xf,0x2c,0x3a, 0xf,0x2c,0x3b, 0xf,0x2c,0x3d, + 0x6,0x32,0x6a, 0x6,0x32,0x6c, 0xf,0x2c,0x3e, 0xf,0x2c,0x3f, + 0xf,0x2c,0x2e, 0x5,0x2a,0x44, 0x5,0x2a,0x43, 0x6,0x39,0x53, + 0x5,0x33,0x56, 0x5,0x2e,0x61, 0x4,0x2e,0x29, 0x6,0x39,0x51, + 0x4,0x2e,0x28, 0x6,0x39,0x52, 0x6,0x39,0x54, 0xf,0x30,0x79, + 0xf,0x30,0x7a, 0xf,0x30,0x7b, 0xf,0x30,0x7c, 0xf,0x30,0x7d, + 0xf,0x30,0x7e, 0xf,0x31,0x21, 0xf,0x31,0x23, 0xf,0x31,0x24, + 0xf,0x31,0x25, 0xf,0x31,0x26, 0x6,0x39,0x50, 0xf,0x36,0x63, + 0x4,0x33,0x31, 0x6,0x39,0x55, 0x6,0x41,0x7a, 0x5,0x33,0x57, + 0x6,0x41,0x7b, 0x4,0x33,0x32, 0x6,0x41,0x77, 0x6,0x41,0x78, + 0x6,0x41,0x79, 0xf,0x31,0x22, 0xf,0x36,0x56, 0xf,0x36,0x58, + 0xf,0x36,0x5c, 0xf,0x36,0x5f, 0xf,0x36,0x60, 0xf,0x36,0x61, + 0xf,0x36,0x62, 0xf,0x36,0x64, 0xf,0x36,0x5d, 0x6,0x41,0x7c, + 0xf,0x36,0x5b, 0xf,0x36,0x5a, 0xf,0x36,0x5e, 0x5,0x33,0x58, + 0x6,0x41,0x76, 0xf,0x3d,0x3e, 0xf,0x3d,0x34, 0x6,0x4b,0x4b, + 0x5,0x3a,0x2b, 0x5,0x3a,0x2a, 0x5,0x3a,0x2c, 0x6,0x55,0x29, + 0x4,0x3e,0x5a, 0x5,0x40,0x4d, 0xf,0x3d,0x38, 0x4,0x38,0x7c, + 0x6,0x4b,0x49, 0x6,0x4b,0x4c, 0xf,0x3d,0x2c, 0xf,0x3d,0x2d, + 0xf,0x3d,0x2e, 0xf,0x3d,0x2f, 0xf,0x3d,0x30, 0xf,0x3d,0x32, + 0xf,0x3d,0x35, 0xf,0x3d,0x36, 0xf,0x3d,0x37, 0xf,0x3d,0x39, + 0xf,0x3d,0x3a, 0xf,0x3d,0x3f, 0xf,0x43,0x50, 0x6,0x4b,0x4e, + 0x6,0x55,0x32, 0x6,0x4b,0x4d, 0xf,0x3d,0x40, 0x6,0x4b,0x48, + 0x6,0x4b,0x4a, 0x6,0x55,0x2a, 0xf,0x3d,0x33, 0xf,0x3d,0x3d, + 0xf,0x3d,0x31, 0x5,0x3a,0x29, 0x6,0x55,0x2b, 0x6,0x55,0x30, + 0x4,0x3e,0x5b, 0x6,0x55,0x31, 0x6,0x55,0x2f, 0x6,0x55,0x2e, + 0x5,0x47,0x3e, 0xf,0x43,0x47, 0xf,0x43,0x4a, 0xf,0x43,0x4c, + 0xf,0x43,0x4d, 0xf,0x43,0x4e, 0xf,0x43,0x4f, 0xf,0x43,0x51, + 0xf,0x43,0x52, 0xf,0x43,0x53, 0xf,0x43,0x54, 0xf,0x43,0x55, + 0xf,0x43,0x57, 0xf,0x43,0x58, 0xf,0x43,0x5a, 0xf,0x43,0x5b, + 0xf,0x43,0x5c, 0xf,0x43,0x5d, 0xf,0x43,0x5e, 0xf,0x43,0x5f, + 0xf,0x43,0x60, 0xf,0x43,0x61, 0xf,0x43,0x62, 0xf,0x43,0x63, + 0xf,0x43,0x65, 0x6,0x55,0x2c, 0x5,0x40,0x4f, 0x5,0x3a,0x2e, + 0xf,0x43,0x4b, 0xf,0x43,0x48, 0x5,0x47,0x3f, 0x6,0x55,0x2d, + 0xf,0x43,0x59, 0xf,0x49,0x7a, 0xf,0x49,0x7b, 0xf,0x4a,0x26, + 0x7,0x25,0x38, 0x6,0x5e,0x74, 0x5,0x47,0x41, 0x7,0x25,0x36, + 0x4,0x44,0x6d, 0x5,0x47,0x40, 0x6,0x5e,0x75, 0x6,0x5e,0x77, + 0x6,0x5e,0x76, 0x6,0x5e,0x73, 0xf,0x49,0x71, 0xf,0x49,0x72, + 0xf,0x49,0x73, 0xf,0x49,0x74, 0xf,0x49,0x75, 0xf,0x49,0x77, + 0xf,0x49,0x78, 0xf,0x49,0x79, 0xf,0x49,0x7c, 0xf,0x49,0x7d, + 0xf,0x49,0x7e, 0xf,0x4a,0x21, 0xf,0x4a,0x22, 0xf,0x4a,0x24, + 0xf,0x4a,0x25, 0xf,0x4a,0x27, 0xf,0x4a,0x28, 0xf,0x4a,0x29, + 0x5,0x47,0x42, 0x3,0x48,0x26, 0x7,0x25,0x39, 0xf,0x4a,0x23, + 0x7,0x25,0x40, 0x4,0x4a,0x7e, 0x5,0x4e,0x47, 0x7,0x2f,0x7b, + 0x7,0x25,0x3a, 0x7,0x2f,0x7a, 0x7,0x25,0x3c, 0x7,0x25,0x3f, + 0x7,0x25,0x41, 0x7,0x25,0x42, 0xf,0x50,0x41, 0xf,0x50,0x42, + 0xf,0x50,0x43, 0xf,0x50,0x44, 0xf,0x50,0x45, 0xf,0x50,0x46, + 0xf,0x50,0x48, 0xf,0x50,0x49, 0xf,0x50,0x4a, 0xf,0x50,0x4b, + 0xf,0x50,0x4c, 0x7,0x25,0x3d, 0x5,0x4e,0x48, 0x7,0x25,0x3b, + 0x5,0x4e,0x49, 0xf,0x55,0x7c, 0xf,0x56,0x2e, 0xf,0x50,0x47, + 0x7,0x30,0x22, 0x7,0x25,0x3e, 0x5,0x55,0x58, 0x5,0x55,0x5b, + 0x5,0x55,0x59, 0x4,0x51,0x3b, 0x7,0x30,0x24, 0x7,0x2f,0x7d, + 0x7,0x2f,0x7e, 0x7,0x2f,0x7c, 0x4,0x51,0x3c, 0x7,0x30,0x21, + 0xf,0x55,0x78, 0xf,0x55,0x79, 0xf,0x55,0x7b, 0xf,0x55,0x7d, + 0xf,0x56,0x23, 0xf,0x56,0x24, 0xf,0x56,0x25, 0xf,0x56,0x26, + 0xf,0x56,0x27, 0xf,0x56,0x29, 0xf,0x56,0x2d, 0xf,0x56,0x2f, + 0x7,0x30,0x25, 0x7,0x30,0x23, 0x7,0x39,0x36, 0xf,0x56,0x30, + 0xf,0x56,0x21, 0xf,0x56,0x28, 0x5,0x55,0x5c, 0x5,0x55,0x5a, + 0xf,0x56,0x2c, 0x7,0x39,0x3b, 0x7,0x39,0x3d, 0x5,0x5c,0x2d, + 0x5,0x5c,0x2b, 0x7,0x40,0x5e, 0x7,0x39,0x39, 0x4,0x5b,0x6a, + 0x4,0x56,0x6e, 0x4,0x56,0x70, 0x7,0x39,0x38, 0xf,0x5b,0x2e, + 0xf,0x5b,0x2f, 0xf,0x5b,0x30, 0xf,0x5b,0x31, 0xf,0x5b,0x32, + 0xf,0x5b,0x33, 0xf,0x5b,0x34, 0xf,0x5b,0x35, 0x5,0x5c,0x2c, + 0x7,0x39,0x3a, 0x7,0x39,0x3c, 0x7,0x39,0x37, 0x7,0x40,0x5f, + 0x5,0x68,0x3c, 0x4,0x5b,0x6b, 0x5,0x62,0x57, 0x4,0x60,0x26, + 0x7,0x40,0x60, 0x4,0x60,0x28, 0xf,0x5f,0x51, 0xf,0x5f,0x53, + 0xf,0x5f,0x54, 0xf,0x5f,0x55, 0xf,0x5f,0x57, 0xf,0x5f,0x59, + 0xf,0x5f,0x5a, 0xf,0x5f,0x5b, 0xf,0x5f,0x5c, 0xf,0x5f,0x5f, + 0x7,0x40,0x61, 0x7,0x40,0x62, 0xf,0x5f,0x50, 0xf,0x5f,0x52, + 0xf,0x5f,0x58, 0xf,0x63,0x23, 0x7,0x47,0x7c, 0x7,0x47,0x7b, + 0x5,0x68,0x3e, 0x7,0x47,0x7a, 0x7,0x4e,0x43, 0x5,0x68,0x3d, + 0x7,0x47,0x79, 0xf,0x62,0x7c, 0xf,0x62,0x7e, 0xf,0x63,0x21, + 0xf,0x63,0x22, 0x4,0x60,0x29, 0xf,0x62,0x79, 0xf,0x62,0x7a, + 0xf,0x62,0x7d, 0x7,0x53,0x6f, 0x5,0x6c,0x57, 0x4,0x66,0x52, + 0xf,0x65,0x52, 0xf,0x65,0x53, 0xf,0x65,0x54, 0xf,0x65,0x55, + 0x7,0x4e,0x44, 0x7,0x53,0x6e, 0xf,0x5f,0x5e, 0x4,0x66,0x51, + 0x7,0x55,0x7c, 0x4,0x66,0x53, 0x7,0x58,0x3c, 0xf,0x67,0x76, + 0x7,0x5b,0x79, 0x4,0x6a,0x52, 0xf,0x69,0x59, 0xf,0x69,0x5a, + 0x5,0x76,0x24, 0xf,0x6a,0x61, 0xf,0x6a,0x63, 0xf,0x6b,0x56, + 0xf,0x6a,0x62, 0x5,0x79,0x31, 0x7,0x61,0x26, 0x7,0x61,0x25, + 0xf,0x6c,0x32, 0x5,0x7a,0x2c, 0x4,0x6e,0x34, 0x6,0x2d,0x26, + 0x5,0x2a,0x47, 0x5,0x2a,0x46, 0x6,0x32,0x6d, 0xf,0x2c,0x41, + 0x6,0x32,0x6e, 0x6,0x39,0x56, 0x5,0x2e,0x63, 0x5,0x2e,0x64, + 0x6,0x39,0x57, 0x6,0x39,0x58, 0x4,0x33,0x36, 0x5,0x33,0x59, + 0x5,0x33,0x5a, 0xf,0x36,0x65, 0x5,0x3a,0x2f, 0x5,0x3a,0x30, + 0x6,0x4b,0x4f, 0xf,0x3d,0x41, 0x6,0x4b,0x50, 0x4,0x3e,0x5c, + 0x5,0x40,0x50, 0x5,0x40,0x51, 0xf,0x43,0x66, 0x7,0x25,0x45, + 0x6,0x5e,0x78, 0x5,0x47,0x43, 0xf,0x4a,0x2a, 0x5,0x47,0x44, + 0x7,0x25,0x44, 0x7,0x30,0x26, 0x4,0x51,0x3d, 0x5,0x4e,0x4a, + 0xf,0x50,0x4d, 0x7,0x25,0x43, 0x4,0x51,0x3e, 0x7,0x39,0x3e, + 0x5,0x62,0x58, 0xf,0x5f,0x60, 0x4,0x5b,0x6d, 0x4,0x66,0x54, + 0x7,0x53,0x70, 0x5,0x70,0x4a, 0x5,0x76,0x25, 0x7,0x5b,0x7a, + 0x7,0x5e,0x7b, 0x7,0x62,0x3b, 0x7,0x62,0x3c, 0x5,0x24,0x62, + 0x5,0x27,0x31, 0x4,0x27,0x3d, 0x6,0x2d,0x27, 0x5,0x2a,0x48, + 0x5,0x2a,0x49, 0x6,0x32,0x6f, 0x4,0x2a,0x3b, 0x4,0x2a,0x3e, + 0x5,0x2e,0x65, 0x5,0x2e,0x67, 0x6,0x39,0x5c, 0x5,0x2e,0x66, + 0xf,0x31,0x29, 0x6,0x39,0x5b, 0x6,0x39,0x59, 0x6,0x39,0x5a, + 0x5,0x33,0x5d, 0x6,0x42,0x22, 0x6,0x41,0x7e, 0x6,0x42,0x24, + 0x5,0x33,0x5e, 0x6,0x42,0x23, 0x5,0x33,0x5c, 0xf,0x36,0x66, + 0xf,0x36,0x68, 0x4,0x39,0x22, 0x5,0x3a,0x31, 0x6,0x55,0x36, + 0x4,0x39,0x27, 0x5,0x3a,0x34, 0x5,0x3a,0x33, 0x5,0x33,0x5f, + 0x6,0x4b,0x52, 0x5,0x3a,0x32, 0x5,0x33,0x5b, 0x6,0x4b,0x51, + 0x6,0x4b,0x53, 0x4,0x3e,0x64, 0x5,0x40,0x52, 0x6,0x55,0x37, + 0x4,0x3e,0x5e, 0x5,0x40,0x53, 0x6,0x55,0x33, 0x6,0x55,0x35, + 0x4,0x3e,0x5f, 0x6,0x55,0x38, 0xf,0x43,0x67, 0x6,0x55,0x34, + 0x5,0x47,0x47, 0x6,0x5e,0x7c, 0x5,0x47,0x45, 0x6,0x5e,0x7a, + 0x4,0x44,0x72, 0x6,0x5e,0x79, 0x6,0x5e,0x7b, 0x5,0x47,0x46, + 0x4,0x4b,0x28, 0x7,0x25,0x4a, 0x5,0x4e,0x4c, 0x5,0x4e,0x4d, + 0x5,0x4e,0x4e, 0x7,0x25,0x46, 0x7,0x25,0x47, 0x7,0x25,0x49, + 0x7,0x30,0x27, 0x4,0x56,0x74, 0x7,0x30,0x28, 0x5,0x55,0x5f, + 0x5,0x55,0x61, 0x4,0x51,0x40, 0x5,0x55,0x60, 0x5,0x55,0x5e, + 0x4,0x56,0x76, 0x5,0x5c,0x2e, 0x4,0x56,0x77, 0x7,0x39,0x40, + 0x7,0x39,0x3f, 0x5,0x4e,0x4b, 0x4,0x5b,0x70, 0x5,0x62,0x5b, + 0x5,0x62,0x5a, 0x7,0x40,0x64, 0x5,0x62,0x59, 0x7,0x40,0x65, + 0x5,0x68,0x3f, 0x7,0x4e,0x45, 0x7,0x53,0x71, 0x7,0x53,0x72, + 0x4,0x66,0x56, 0x5,0x70,0x4b, 0x4,0x66,0x55, 0x7,0x53,0x73, + 0x4,0x68,0x76, 0x7,0x58,0x3d, 0x5,0x73,0x5a, 0x5,0x76,0x28, + 0x5,0x76,0x27, 0x7,0x5b,0x7b, 0x5,0x76,0x26, 0x7,0x5c,0x6b, + 0x5,0x7a,0x6c, 0x7,0x65,0x38, 0x6,0x23,0x34, 0x6,0x2d,0x28, + 0x5,0x27,0x33, 0x4,0x27,0x3e, 0xf,0x28,0x2b, 0x6,0x32,0x70, + 0xf,0x2c,0x43, 0x5,0x40,0x54, 0x6,0x5e,0x7d, 0x7,0x30,0x2b, + 0x7,0x30,0x29, 0x7,0x30,0x2a, 0x4,0x56,0x79, 0x7,0x40,0x66, + 0x5,0x70,0x4c, 0x6,0x23,0x35, 0x6,0x25,0x39, 0x6,0x2d,0x29, + 0x5,0x27,0x34, 0x6,0x2d,0x2a, 0xf,0x2c,0x44, 0xf,0x2c,0x45, + 0x5,0x2a,0x4a, 0x4,0x2a,0x3f, 0x6,0x32,0x71, 0x6,0x34,0x79, + 0x5,0x2e,0x69, 0x6,0x42,0x26, 0x5,0x33,0x60, 0x6,0x42,0x25, + 0x6,0x42,0x27, 0xf,0x36,0x69, 0x6,0x55,0x39, 0x6,0x4b,0x54, + 0xf,0x3d,0x43, 0xf,0x3d,0x42, 0x6,0x55,0x3b, 0xf,0x43,0x68, + 0x6,0x55,0x3a, 0x6,0x5e,0x7e, 0x7,0x25,0x4b, 0xf,0x4a,0x2b, + 0x4,0x56,0x7a, 0xf,0x5b,0x36, 0xf,0x63,0x26, 0x7,0x46,0x6e, + 0xf,0x63,0x25, 0x7,0x53,0x74, 0x6,0x25,0x3a, 0xf,0x24,0x7a, + 0x5,0x27,0x35, 0x6,0x2d,0x2e, 0x6,0x39,0x5d, 0x5,0x33,0x61, + 0xf,0x4a,0x2c, 0xf,0x5f,0x61, 0x7,0x47,0x7d, 0xf,0x6c,0x33, + 0x5,0x73,0x5b, 0x4,0x24,0x5f, 0xf,0x24,0x7c, 0xf,0x24,0x7b, + 0x6,0x28,0x63, 0x4,0x27,0x42, 0x4,0x25,0x53, 0x4,0x27,0x3f, + 0x5,0x27,0x36, 0x6,0x2d,0x31, 0x6,0x2d,0x30, 0x6,0x2d,0x33, + 0xf,0x28,0x2c, 0xf,0x28,0x2d, 0x6,0x2d,0x2f, 0x4,0x2a,0x42, + 0x5,0x2a,0x4d, 0x6,0x32,0x74, 0x5,0x2a,0x4c, 0x6,0x32,0x73, + 0x5,0x2a,0x4b, 0x6,0x32,0x76, 0x6,0x32,0x7a, 0x6,0x32,0x77, + 0x6,0x39,0x65, 0x5,0x2a,0x4e, 0x6,0x32,0x78, 0x6,0x32,0x75, + 0x5,0x2e,0x6e, 0xf,0x2c,0x46, 0xf,0x2c,0x47, 0xf,0x2c,0x48, + 0xf,0x2c,0x49, 0xf,0x2c,0x4b, 0xf,0x2c,0x4c, 0xf,0x2c,0x4d, + 0xf,0x2c,0x4e, 0xf,0x2c,0x4f, 0x5,0x2a,0x4f, 0x5,0x2e,0x6a, + 0x4,0x2e,0x2e, 0x5,0x2e,0x6b, 0x6,0x39,0x61, 0x6,0x39,0x60, + 0x6,0x39,0x62, 0x6,0x39,0x5f, 0x6,0x39,0x63, 0xf,0x31,0x2a, + 0xf,0x31,0x2b, 0xf,0x31,0x2c, 0xf,0x31,0x2e, 0x4,0x2e,0x30, + 0xf,0x31,0x2d, 0x5,0x2e,0x6d, 0x5,0x2e,0x6c, 0x4,0x33,0x3e, + 0x6,0x42,0x28, 0x5,0x33,0x63, 0x5,0x33,0x62, 0x4,0x33,0x3d, + 0x6,0x42,0x2c, 0x6,0x42,0x2f, 0x6,0x42,0x2a, 0x6,0x42,0x2d, + 0x6,0x42,0x2e, 0xf,0x36,0x6b, 0xf,0x36,0x6c, 0x6,0x42,0x2b, + 0x6,0x42,0x29, 0x6,0x41,0x6b, 0x4,0x39,0x2b, 0x4,0x39,0x29, + 0x4,0x39,0x2a, 0x6,0x4b,0x57, 0x6,0x4b,0x59, 0xf,0x36,0x6a, + 0xf,0x3d,0x46, 0xf,0x3d,0x47, 0xf,0x3d,0x48, 0x6,0x4b,0x58, + 0x4,0x39,0x2d, 0x6,0x4b,0x55, 0xf,0x3d,0x44, 0xf,0x3d,0x45, + 0x6,0x55,0x40, 0x4,0x3e,0x6a, 0x4,0x3e,0x67, 0x6,0x55,0x3e, + 0x6,0x55,0x3f, 0x4,0x3e,0x66, 0x5,0x40,0x56, 0x6,0x55,0x3c, + 0x6,0x55,0x42, 0x5,0x40,0x55, 0x6,0x55,0x43, 0x6,0x55,0x44, + 0x6,0x55,0x41, 0xf,0x43,0x69, 0xf,0x43,0x6a, 0x5,0x40,0x57, + 0x6,0x55,0x3d, 0x6,0x5f,0x23, 0x4,0x44,0x7a, 0x5,0x47,0x4a, + 0x6,0x5f,0x22, 0x6,0x5f,0x25, 0x6,0x5f,0x28, 0xf,0x4a,0x2d, + 0x6,0x5f,0x26, 0x6,0x5f,0x24, 0x6,0x5f,0x27, 0x7,0x25,0x50, + 0x4,0x4b,0x2c, 0x7,0x25,0x4c, 0x7,0x25,0x4e, 0x7,0x25,0x4d, + 0x7,0x25,0x4f, 0x5,0x4e,0x4f, 0x7,0x25,0x51, 0xf,0x50,0x4f, + 0x4,0x4b,0x2b, 0x4,0x51,0x45, 0x4,0x51,0x43, 0x4,0x51,0x46, + 0x7,0x30,0x2c, 0x5,0x55,0x62, 0xf,0x56,0x32, 0x7,0x2c,0x3b, + 0x7,0x39,0x41, 0x5,0x5c,0x33, 0x7,0x39,0x43, 0x5,0x5c,0x31, + 0x4,0x56,0x7b, 0x7,0x39,0x42, 0x5,0x5c,0x34, 0xf,0x5b,0x37, + 0x7,0x3c,0x76, 0x5,0x5c,0x30, 0x5,0x5c,0x32, 0xf,0x56,0x31, + 0x4,0x5b,0x71, 0x7,0x47,0x7e, 0x5,0x68,0x41, 0x7,0x48,0x23, + 0x7,0x4e,0x46, 0x7,0x48,0x21, 0x7,0x48,0x24, 0x4,0x60,0x2d, + 0x7,0x48,0x22, 0x7,0x4e,0x48, 0x7,0x4e,0x47, 0x7,0x53,0x77, + 0xf,0x67,0x77, 0x7,0x53,0x75, 0x7,0x53,0x76, 0xf,0x67,0x52, + 0x7,0x58,0x3e, 0x4,0x68,0x77, 0x7,0x53,0x78, 0x7,0x5b,0x7d, + 0xf,0x6a,0x64, 0x7,0x5b,0x7c, 0x7,0x5e,0x7c, 0x7,0x62,0x3e, + 0x7,0x62,0x3d, 0x7,0x63,0x5a, 0x7,0x63,0x5c, 0x7,0x63,0x5b, + 0x7,0x66,0x29, 0x7,0x66,0x35, 0x7,0x66,0x46, 0x6,0x23,0x36, + 0x6,0x25,0x3b, 0xf,0x28,0x2e, 0x4,0x2e,0x32, 0x5,0x2a,0x50, + 0x4,0x39,0x2e, 0x6,0x55,0x46, 0x6,0x55,0x45, 0x6,0x5f,0x29, + 0x5,0x55,0x63, 0x7,0x30,0x2e, 0x7,0x25,0x52, 0x7,0x58,0x3f, + 0x5,0x22,0x7c, 0x5,0x24,0x64, 0x5,0x24,0x65, 0x4,0x24,0x60, + 0x6,0x28,0x66, 0x6,0x28,0x67, 0x6,0x28,0x65, 0x6,0x28,0x68, + 0x4,0x27,0x45, 0x6,0x2d,0x35, 0x4,0x27,0x44, 0xf,0x28,0x2f, + 0x5,0x27,0x38, 0x6,0x2d,0x36, 0x6,0x32,0x7d, 0x4,0x2a,0x4b, + 0x6,0x32,0x7c, 0x6,0x32,0x7b, 0x5,0x2a,0x52, 0x5,0x2a,0x56, + 0x4,0x2a,0x47, 0x4,0x2a,0x48, 0x5,0x2a,0x53, 0x4,0x2a,0x45, + 0x5,0x2a,0x54, 0x5,0x2a,0x51, 0x5,0x2a,0x55, 0x6,0x33,0x24, + 0xf,0x2c,0x50, 0x6,0x32,0x7e, 0xf,0x2c,0x51, 0x6,0x33,0x22, + 0x6,0x33,0x23, 0x6,0x33,0x21, 0x6,0x39,0x69, 0x5,0x2e,0x6f, + 0x5,0x2e,0x73, 0x6,0x39,0x6f, 0x5,0x2e,0x71, 0x6,0x39,0x70, + 0x6,0x39,0x6a, 0x5,0x2e,0x76, 0x5,0x2e,0x72, 0x5,0x2e,0x75, + 0x6,0x39,0x6d, 0x6,0x39,0x71, 0x6,0x39,0x66, 0x4,0x2e,0x3d, + 0x5,0x2e,0x74, 0x6,0x39,0x68, 0x4,0x2e,0x3e, 0x5,0x2e,0x70, + 0x6,0x39,0x6e, 0xf,0x31,0x2f, 0x6,0x39,0x67, 0x6,0x39,0x6c, + 0x6,0x42,0x31, 0x6,0x42,0x37, 0x5,0x33,0x68, 0x6,0x42,0x35, + 0x5,0x33,0x6b, 0x4,0x33,0x41, 0x5,0x33,0x6a, 0x5,0x33,0x66, + 0x6,0x42,0x33, 0x4,0x33,0x44, 0x5,0x33,0x69, 0xf,0x36,0x6d, + 0xf,0x36,0x6e, 0xf,0x36,0x6f, 0x6,0x42,0x36, 0x6,0x42,0x39, + 0x6,0x42,0x34, 0x6,0x42,0x38, 0xf,0x36,0x70, 0x6,0x42,0x30, + 0x5,0x33,0x67, 0x5,0x33,0x6c, 0x5,0x3a,0x36, 0x5,0x3a,0x3f, + 0x6,0x4b,0x61, 0x5,0x3a,0x35, 0x6,0x4b,0x65, 0x5,0x3a,0x39, + 0x5,0x3a,0x3a, 0x5,0x3a,0x3c, 0x5,0x3a,0x37, 0x6,0x4b,0x63, + 0x6,0x4b,0x5f, 0x5,0x3a,0x40, 0x6,0x4b,0x62, 0x6,0x4b,0x5b, + 0x6,0x4b,0x66, 0x5,0x3a,0x3e, 0x6,0x4b,0x5e, 0x4,0x39,0x39, + 0x6,0x4b,0x5d, 0x6,0x4b,0x60, 0x6,0x4b,0x64, 0xf,0x3d,0x49, + 0xf,0x3d,0x4a, 0x4,0x39,0x37, 0x6,0x4b,0x5c, 0x4,0x39,0x31, + 0x5,0x3a,0x38, 0x6,0x55,0x4c, 0x4,0x3e,0x72, 0x4,0x3e,0x70, + 0x4,0x3e,0x7b, 0x5,0x40,0x59, 0x4,0x3e,0x71, 0x4,0x3e,0x75, + 0x4,0x44,0x7d, 0x4,0x3e,0x79, 0x6,0x55,0x49, 0x5,0x40,0x5a, + 0x5,0x40,0x5c, 0x5,0x40,0x62, 0x4,0x3e,0x7c, 0x6,0x55,0x47, + 0x5,0x40,0x61, 0x6,0x55,0x4d, 0x5,0x40,0x65, 0x5,0x40,0x63, + 0x5,0x40,0x5b, 0x5,0x3a,0x3d, 0x5,0x40,0x5f, 0x5,0x40,0x5e, + 0x6,0x55,0x4b, 0x6,0x55,0x4a, 0x4,0x3e,0x7d, 0xf,0x43,0x6b, + 0xf,0x43,0x6c, 0x6,0x55,0x48, 0x6,0x55,0x4e, 0x5,0x40,0x58, + 0x5,0x40,0x66, 0x5,0x40,0x5d, 0x5,0x47,0x58, 0x5,0x47,0x50, + 0x4,0x45,0x25, 0x4,0x45,0x2b, 0x5,0x47,0x4b, 0x5,0x47,0x4f, + 0x4,0x45,0x26, 0x6,0x5f,0x2f, 0x6,0x5f,0x2a, 0x4,0x45,0x2e, + 0x4,0x45,0x2a, 0x6,0x5f,0x2b, 0x6,0x5f,0x34, 0x5,0x47,0x4d, + 0x5,0x47,0x4e, 0x5,0x47,0x53, 0x4,0x45,0x2c, 0x6,0x5f,0x37, + 0x6,0x5f,0x35, 0x5,0x47,0x5a, 0x6,0x5f,0x2e, 0x4,0x45,0x27, + 0x4,0x45,0x22, 0x5,0x47,0x51, 0x5,0x47,0x52, 0x6,0x5f,0x33, + 0x5,0x47,0x4c, 0x5,0x47,0x56, 0x6,0x5f,0x31, 0x6,0x5f,0x30, + 0xf,0x4a,0x2e, 0x6,0x5f,0x38, 0x6,0x5f,0x2c, 0x4,0x45,0x2d, + 0x6,0x5f,0x32, 0x6,0x5f,0x36, 0x5,0x47,0x55, 0x4,0x4b,0x3a, + 0x4,0x4b,0x36, 0x4,0x4b,0x2d, 0x4,0x4b,0x39, 0x5,0x4e,0x53, + 0x4,0x4b,0x34, 0x7,0x25,0x5d, 0x4,0x4b,0x32, 0x5,0x4e,0x55, + 0x5,0x4e,0x57, 0x5,0x4e,0x54, 0x4,0x4b,0x31, 0x7,0x25,0x55, + 0x4,0x4b,0x30, 0x5,0x4e,0x51, 0x5,0x4e,0x52, 0x7,0x25,0x53, + 0x5,0x47,0x57, 0x5,0x4e,0x58, 0x7,0x25,0x54, 0x7,0x25,0x5b, + 0x7,0x25,0x59, 0xf,0x50,0x50, 0xf,0x50,0x51, 0xf,0x50,0x52, + 0xf,0x50,0x53, 0xf,0x50,0x54, 0x7,0x25,0x56, 0x7,0x25,0x5a, + 0x7,0x25,0x5e, 0x5,0x4e,0x56, 0x5,0x4e,0x50, 0x4,0x51,0x4b, + 0x5,0x55,0x65, 0x7,0x30,0x2f, 0x7,0x30,0x30, 0x5,0x55,0x6c, + 0x5,0x55,0x6d, 0x4,0x51,0x4c, 0x4,0x51,0x47, 0x5,0x55,0x68, + 0x7,0x30,0x35, 0x5,0x55,0x66, 0x5,0x55,0x67, 0x5,0x55,0x6b, + 0x7,0x30,0x31, 0x7,0x30,0x37, 0x5,0x55,0x6e, 0xf,0x56,0x34, + 0xf,0x56,0x35, 0x7,0x30,0x34, 0x7,0x30,0x33, 0x5,0x55,0x6a, + 0x7,0x30,0x32, 0x7,0x30,0x38, 0x7,0x30,0x39, 0x5,0x55,0x64, + 0x7,0x25,0x57, 0x4,0x56,0x7c, 0x5,0x5c,0x39, 0x5,0x55,0x70, + 0x7,0x39,0x50, 0x4,0x51,0x51, 0x4,0x45,0x29, 0x4,0x56,0x7e, + 0x7,0x39,0x47, 0x5,0x5c,0x35, 0x7,0x39,0x48, 0x5,0x5c,0x3c, + 0x5,0x5c,0x3a, 0x5,0x5c,0x3d, 0x7,0x39,0x4f, 0x7,0x40,0x6a, + 0x5,0x55,0x6f, 0x5,0x5c,0x37, 0x4,0x56,0x7d, 0x5,0x5c,0x38, + 0x4,0x57,0x23, 0x7,0x39,0x49, 0x7,0x39,0x4d, 0x7,0x39,0x51, + 0x7,0x39,0x4b, 0x7,0x39,0x46, 0x7,0x39,0x4c, 0xf,0x5b,0x38, + 0x7,0x39,0x44, 0x7,0x39,0x45, 0x7,0x39,0x4e, 0x5,0x5c,0x3b, + 0x5,0x62,0x5c, 0x5,0x5c,0x3e, 0x7,0x39,0x4a, 0x4,0x5b,0x78, + 0x5,0x5c,0x40, 0x5,0x62,0x60, 0x7,0x40,0x68, 0x5,0x62,0x65, + 0x7,0x40,0x69, 0x5,0x62,0x61, 0x5,0x62,0x64, 0x4,0x5b,0x76, + 0x5,0x5c,0x3f, 0x5,0x62,0x5d, 0x5,0x62,0x62, 0x5,0x62,0x5e, + 0x5,0x62,0x5f, 0x4,0x5b,0x7a, 0x7,0x40,0x6d, 0x5,0x62,0x63, + 0x7,0x48,0x2b, 0x4,0x60,0x33, 0x7,0x48,0x27, 0x4,0x60,0x34, + 0x5,0x68,0x44, 0x4,0x60,0x35, 0x7,0x48,0x26, 0x5,0x68,0x43, + 0x5,0x68,0x42, 0x4,0x60,0x36, 0xf,0x63,0x27, 0x4,0x60,0x31, + 0x7,0x48,0x28, 0x7,0x48,0x29, 0x7,0x48,0x25, 0x7,0x48,0x2a, + 0x7,0x40,0x6c, 0x4,0x63,0x6a, 0x4,0x63,0x6b, 0x7,0x4e,0x49, + 0x7,0x4e,0x4d, 0x7,0x4e,0x4c, 0x5,0x6c,0x58, 0x5,0x6c,0x59, + 0x7,0x4e,0x4e, 0x7,0x4e,0x4b, 0x7,0x4e,0x4a, 0x5,0x70,0x51, + 0x5,0x70,0x50, 0x5,0x70,0x4e, 0x4,0x66,0x57, 0x7,0x53,0x7a, + 0x5,0x70,0x4f, 0x7,0x53,0x79, 0xf,0x67,0x78, 0x5,0x73,0x5f, + 0x5,0x73,0x5e, 0x5,0x73,0x5d, 0x7,0x5c,0x22, 0x7,0x5b,0x7e, + 0x4,0x6a,0x56, 0x7,0x5c,0x21, 0x5,0x76,0x29, 0x5,0x77,0x6b, + 0x7,0x5e,0x7d, 0x7,0x5e,0x7e, 0x7,0x61,0x42, 0x7,0x61,0x27, + 0x7,0x62,0x3f, 0x7,0x62,0x40, 0x7,0x62,0x41, 0x5,0x7a,0x6d, + 0x7,0x64,0x51, 0x7,0x65,0x39, 0x4,0x24,0x63, 0x6,0x33,0x25, + 0xf,0x2c,0x52, 0x6,0x39,0x73, 0x6,0x39,0x72, 0xf,0x31,0x30, + 0x6,0x42,0x3a, 0xf,0x36,0x71, 0x6,0x4b,0x69, 0x6,0x4b,0x67, + 0x5,0x3a,0x41, 0x6,0x4b,0x68, 0x7,0x25,0x5f, 0x4,0x51,0x53, + 0x4,0x51,0x52, 0x7,0x30,0x3a, 0x6,0x25,0x3c, 0x6,0x25,0x3d, + 0x5,0x24,0x66, 0x5,0x27,0x3a, 0x5,0x27,0x3b, 0x5,0x27,0x39, + 0x5,0x27,0x3c, 0x4,0x2a,0x4d, 0x5,0x2a,0x59, 0x5,0x2a,0x58, + 0x5,0x2a,0x57, 0x6,0x33,0x27, 0x6,0x33,0x28, 0x6,0x33,0x26, + 0xf,0x2c,0x53, 0xf,0x2c,0x54, 0x6,0x33,0x29, 0x5,0x2a,0x5a, + 0x6,0x39,0x74, 0x4,0x2e,0x42, 0x6,0x39,0x75, 0x6,0x42,0x3c, + 0xf,0x31,0x31, 0xf,0x31,0x32, 0xf,0x31,0x33, 0xf,0x31,0x35, + 0xf,0x31,0x36, 0xf,0x36,0x75, 0x4,0x33,0x46, 0x5,0x33,0x6e, + 0x6,0x42,0x3b, 0xf,0x36,0x72, 0xf,0x36,0x73, 0xf,0x36,0x76, + 0x6,0x4b,0x6b, 0x6,0x4b,0x6c, 0x6,0x4b,0x6a, 0xf,0x36,0x74, + 0x5,0x40,0x68, 0x5,0x40,0x67, 0x6,0x55,0x50, 0x4,0x3e,0x7e, + 0x6,0x55,0x4f, 0x5,0x40,0x69, 0xf,0x43,0x6d, 0x4,0x45,0x2f, + 0x6,0x5f,0x39, 0x6,0x5f,0x3a, 0xf,0x4a,0x30, 0xf,0x4a,0x31, + 0xf,0x4a,0x33, 0xf,0x4a,0x34, 0xf,0x4a,0x32, 0x4,0x4b,0x3c, + 0x7,0x25,0x60, 0x7,0x25,0x61, 0x5,0x55,0x72, 0x7,0x30,0x3c, + 0x5,0x55,0x71, 0x7,0x30,0x3b, 0x4,0x57,0x27, 0x4,0x57,0x28, + 0x5,0x5c,0x42, 0x5,0x5c,0x44, 0x7,0x40,0x6e, 0x5,0x5c,0x41, + 0x7,0x39,0x52, 0x5,0x62,0x66, 0x7,0x40,0x6f, 0x7,0x40,0x70, + 0x5,0x68,0x45, 0x5,0x68,0x46, 0x5,0x68,0x47, 0x5,0x68,0x48, + 0x7,0x48,0x2c, 0x7,0x4e,0x50, 0x7,0x4e,0x4f, 0x5,0x62,0x67, + 0x7,0x58,0x40, 0x7,0x58,0x41, 0xf,0x67,0x79, 0x7,0x5c,0x23, + 0x4,0x6b,0x73, 0x7,0x5f,0x21, 0x7,0x65,0x3a, 0x5,0x24,0x67, + 0x5,0x24,0x68, 0x6,0x2d,0x39, 0x6,0x2d,0x37, 0x6,0x2d,0x38, + 0x5,0x27,0x3d, 0x6,0x33,0x2b, 0x5,0x2a,0x5b, 0x4,0x2a,0x4f, + 0x6,0x30,0x36, 0x6,0x33,0x2a, 0x5,0x2e,0x77, 0x5,0x2e,0x78, + 0x6,0x39,0x76, 0x6,0x39,0x7a, 0x5,0x33,0x6f, 0x4,0x2e,0x44, + 0x6,0x39,0x77, 0x6,0x39,0x78, 0x6,0x39,0x79, 0x4,0x33,0x49, + 0x5,0x33,0x70, 0x6,0x42,0x3e, 0xf,0x36,0x79, 0x6,0x42,0x3d, + 0x4,0x39,0x3c, 0x6,0x4b,0x6d, 0x5,0x3a,0x42, 0x6,0x4b,0x6f, + 0x4,0x39,0x3b, 0xf,0x3d,0x4b, 0x6,0x4b,0x6e, 0xf,0x36,0x78, + 0x5,0x40,0x6a, 0x5,0x40,0x6d, 0x5,0x40,0x6b, 0x5,0x40,0x6c, + 0x5,0x40,0x6e, 0x6,0x55,0x53, 0xf,0x43,0x6e, 0x6,0x55,0x51, + 0x4,0x3f,0x21, 0x4,0x45,0x31, 0x4,0x45,0x33, 0x6,0x5f,0x3e, + 0xf,0x4a,0x35, 0x6,0x5f,0x3d, 0x5,0x47,0x5c, 0x6,0x5f,0x3f, + 0x6,0x5f,0x3b, 0x6,0x5f,0x3c, 0x7,0x25,0x63, 0x5,0x4e,0x5a, + 0x5,0x4e,0x5b, 0x5,0x4e,0x5c, 0x7,0x25,0x62, 0x5,0x55,0x76, + 0x5,0x55,0x78, 0x5,0x55,0x74, 0x4,0x51,0x58, 0x5,0x55,0x77, + 0x5,0x55,0x75, 0xf,0x56,0x36, 0x5,0x55,0x73, 0x7,0x30,0x3d, + 0x7,0x30,0x3e, 0x7,0x39,0x53, 0x7,0x30,0x3f, 0x4,0x57,0x29, + 0x5,0x62,0x68, 0x7,0x40,0x72, 0x7,0x40,0x73, 0x7,0x40,0x74, + 0x7,0x40,0x71, 0x5,0x68,0x4a, 0x5,0x68,0x49, 0x7,0x48,0x2d, + 0x4,0x63,0x6d, 0x5,0x6c,0x5b, 0x5,0x6c,0x5a, 0x7,0x4e,0x51, + 0x7,0x53,0x7c, 0x4,0x66,0x5c, 0x7,0x58,0x42, 0x5,0x77,0x6c, + 0x5,0x77,0x6d, 0x7,0x63,0x44, 0x7,0x65,0x58, 0x6,0x28,0x69, + 0xf,0x24,0x7d, 0x4,0x27,0x49, 0x5,0x27,0x3e, 0x4,0x27,0x47, + 0x6,0x2d,0x3b, 0x5,0x27,0x3f, 0x5,0x2a,0x5e, 0x5,0x2a,0x5c, + 0x5,0x2a,0x5d, 0x6,0x33,0x2d, 0x6,0x33,0x2c, 0xf,0x2c,0x55, + 0x5,0x2e,0x79, 0x6,0x3a,0x21, 0x6,0x3a,0x23, 0x4,0x2e,0x48, + 0x5,0x2e,0x7a, 0x6,0x39,0x7e, 0x6,0x39,0x7b, 0x4,0x2e,0x4a, + 0x6,0x3a,0x22, 0xf,0x31,0x37, 0xf,0x31,0x38, 0x6,0x3a,0x24, + 0x6,0x39,0x7c, 0x6,0x39,0x7d, 0x4,0x33,0x4c, 0x5,0x33,0x72, + 0x4,0x33,0x4a, 0x6,0x42,0x3f, 0xf,0x36,0x7a, 0xf,0x36,0x7b, + 0xf,0x36,0x7c, 0xf,0x36,0x7d, 0xf,0x37,0x21, 0xf,0x37,0x22, + 0x6,0x42,0x40, 0x6,0x42,0x41, 0x6,0x3a,0x25, 0x6,0x4b,0x74, + 0x6,0x4b,0x70, 0x5,0x3a,0x43, 0x4,0x39,0x3d, 0x6,0x4b,0x72, + 0x6,0x4b,0x73, 0xf,0x3d,0x4c, 0xf,0x3d,0x4d, 0x6,0x4b,0x71, + 0x6,0x55,0x54, 0x6,0x55,0x56, 0x5,0x40,0x70, 0x6,0x55,0x58, + 0x6,0x55,0x57, 0x6,0x55,0x55, 0xf,0x43,0x6f, 0xf,0x43,0x70, + 0x6,0x5f,0x41, 0x6,0x5f,0x40, 0x6,0x5f,0x4b, 0xf,0x4a,0x36, + 0x5,0x4e,0x5d, 0x7,0x25,0x64, 0x7,0x25,0x65, 0xf,0x50,0x55, + 0xf,0x50,0x56, 0xf,0x50,0x57, 0xf,0x50,0x58, 0xf,0x50,0x59, + 0xf,0x50,0x5a, 0x4,0x51,0x59, 0x7,0x30,0x44, 0x4,0x51,0x5b, + 0x7,0x30,0x40, 0x7,0x30,0x45, 0x5,0x55,0x7a, 0x5,0x55,0x79, + 0xf,0x56,0x37, 0xf,0x56,0x38, 0xf,0x56,0x39, 0xf,0x56,0x3a, + 0xf,0x56,0x3b, 0x7,0x30,0x43, 0x7,0x30,0x41, 0x4,0x57,0x2b, + 0x4,0x5c,0x23, 0x4,0x57,0x2a, 0x7,0x39,0x54, 0x5,0x5c,0x47, + 0x7,0x40,0x75, 0x5,0x5c,0x46, 0xf,0x5b,0x3b, 0xf,0x5b,0x3c, + 0x7,0x39,0x55, 0x7,0x39,0x56, 0x7,0x36,0x79, 0x5,0x5c,0x45, + 0x7,0x30,0x42, 0x7,0x39,0x57, 0x4,0x5c,0x22, 0x4,0x5c,0x21, + 0x7,0x40,0x76, 0x7,0x40,0x78, 0x7,0x40,0x77, 0xf,0x5f,0x62, + 0x7,0x40,0x79, 0x7,0x48,0x2e, 0x5,0x68,0x4b, 0x7,0x48,0x2f, + 0xf,0x63,0x28, 0xf,0x63,0x29, 0x5,0x6c,0x5d, 0x7,0x4e,0x53, + 0x5,0x6c,0x5c, 0x7,0x4e,0x55, 0xf,0x65,0x56, 0x7,0x4e,0x52, + 0x7,0x4e,0x54, 0xf,0x67,0x7b, 0x7,0x58,0x44, 0x5,0x73,0x60, + 0x7,0x58,0x43, 0x7,0x58,0x45, 0xf,0x67,0x7a, 0x7,0x5f,0x22, + 0x5,0x76,0x2a, 0x7,0x5f,0x23, 0x7,0x62,0x42, 0x5,0x22,0x7d, + 0xf,0x22,0x67, 0x6,0x28,0x6a, 0x4,0x24,0x64, 0x5,0x24,0x6a, + 0x4,0x24,0x66, 0x5,0x24,0x6b, 0x5,0x24,0x69, 0xf,0x24,0x7e, + 0x4,0x27,0x50, 0x6,0x2d,0x3c, 0x5,0x27,0x41, 0x4,0x27,0x4b, + 0x6,0x2d,0x40, 0x6,0x2d,0x42, 0x6,0x2d,0x3e, 0x5,0x27,0x42, + 0x5,0x27,0x43, 0x6,0x2d,0x41, 0x6,0x2d,0x3f, 0x5,0x27,0x40, + 0x6,0x2d,0x43, 0x6,0x2d,0x44, 0x6,0x33,0x39, 0x6,0x33,0x35, + 0x6,0x33,0x2e, 0x6,0x33,0x32, 0x4,0x2a,0x5e, 0x6,0x33,0x36, + 0x4,0x2a,0x5c, 0x6,0x33,0x3c, 0x5,0x2a,0x65, 0x6,0x33,0x33, + 0x5,0x2a,0x69, 0x4,0x2a,0x5b, 0x6,0x33,0x2f, 0x6,0x33,0x3b, + 0x5,0x2a,0x60, 0x5,0x2a,0x67, 0x5,0x2a,0x6b, 0x5,0x2a,0x61, + 0x5,0x2a,0x6a, 0x5,0x2a,0x68, 0x5,0x2a,0x63, 0x5,0x2a,0x6c, + 0x6,0x33,0x30, 0x5,0x2a,0x5f, 0x5,0x2a,0x66, 0x5,0x2a,0x62, + 0x5,0x2a,0x64, 0xf,0x2c,0x56, 0xf,0x2c,0x58, 0x6,0x33,0x37, + 0x6,0x33,0x3a, 0x6,0x33,0x34, 0x4,0x2e,0x50, 0x5,0x2f,0x24, + 0x3,0x2e,0x5a, 0x4,0x2e,0x4c, 0x5,0x2e,0x7b, 0x6,0x3a,0x26, + 0x4,0x2e,0x4e, 0x5,0x2f,0x22, 0x5,0x2e,0x7c, 0x6,0x3a,0x28, + 0x4,0x2e,0x4b, 0x6,0x3a,0x29, 0x5,0x2f,0x23, 0x6,0x3a,0x2a, + 0x4,0x2e,0x53, 0x6,0x3a,0x2c, 0x5,0x2e,0x7e, 0x5,0x2f,0x25, + 0x6,0x3a,0x2b, 0xf,0x31,0x39, 0xf,0x31,0x3a, 0xf,0x31,0x3b, + 0xf,0x31,0x3c, 0xf,0x31,0x3d, 0x6,0x3a,0x27, 0x5,0x2f,0x21, + 0x5,0x2e,0x7d, 0x4,0x2e,0x54, 0x4,0x33,0x55, 0x6,0x42,0x53, + 0x6,0x42,0x46, 0x6,0x42,0x4d, 0x5,0x33,0x74, 0x5,0x33,0x73, + 0x5,0x33,0x7d, 0x4,0x33,0x54, 0x6,0x42,0x47, 0x6,0x42,0x44, + 0x6,0x42,0x42, 0x5,0x33,0x7a, 0x5,0x33,0x7b, 0x5,0x33,0x75, + 0x6,0x42,0x4a, 0x5,0x33,0x78, 0x6,0x42,0x54, 0x5,0x33,0x79, + 0x6,0x42,0x43, 0x6,0x42,0x4f, 0x6,0x42,0x4b, 0x6,0x42,0x50, + 0xf,0x37,0x25, 0x6,0x42,0x52, 0x6,0x42,0x4c, 0x6,0x42,0x49, + 0x6,0x42,0x51, 0xf,0x37,0x26, 0x5,0x33,0x7e, 0x6,0x42,0x45, + 0x6,0x42,0x4e, 0x5,0x33,0x77, 0x5,0x33,0x7c, 0x5,0x3a,0x49, + 0x5,0x3a,0x4c, 0x6,0x4b,0x79, 0x6,0x4c,0x23, 0x4,0x33,0x53, + 0x6,0x4b,0x78, 0x5,0x3a,0x4b, 0x6,0x4b,0x7d, 0x6,0x4c,0x21, + 0x5,0x3a,0x46, 0x6,0x4c,0x26, 0x6,0x4b,0x77, 0x4,0x39,0x4f, + 0x5,0x3a,0x4a, 0x5,0x3a,0x48, 0x5,0x3a,0x44, 0x4,0x39,0x4e, + 0x5,0x40,0x71, 0x6,0x4c,0x25, 0x5,0x40,0x7e, 0x4,0x39,0x40, + 0x6,0x4b,0x7e, 0x5,0x3a,0x4d, 0x6,0x4b,0x7b, 0x5,0x3a,0x4e, + 0x6,0x4c,0x28, 0x5,0x3a,0x45, 0x5,0x3a,0x47, 0xf,0x3d,0x4f, + 0xf,0x3d,0x50, 0xf,0x3d,0x51, 0x6,0x4b,0x7c, 0x6,0x4c,0x27, + 0x6,0x4b,0x76, 0x6,0x4c,0x24, 0x6,0x4c,0x22, 0x4,0x39,0x44, + 0x4,0x39,0x50, 0x5,0x3a,0x4f, 0x4,0x39,0x3e, 0x6,0x55,0x5b, + 0x6,0x55,0x5e, 0x6,0x55,0x5a, 0x4,0x3f,0x2a, 0x5,0x40,0x78, + 0x6,0x55,0x5c, 0x5,0x40,0x77, 0x6,0x55,0x5f, 0x5,0x40,0x75, + 0x6,0x55,0x59, 0x4,0x3f,0x23, 0x4,0x3f,0x28, 0x4,0x3f,0x31, + 0x4,0x3f,0x2e, 0x5,0x40,0x7a, 0x6,0x55,0x62, 0x5,0x40,0x76, + 0x4,0x3f,0x2f, 0x4,0x3f,0x24, 0x6,0x55,0x64, 0x5,0x40,0x79, + 0x5,0x40,0x72, 0x5,0x40,0x7c, 0x6,0x55,0x66, 0x6,0x55,0x5d, + 0xf,0x43,0x71, 0xf,0x43,0x72, 0xf,0x43,0x73, 0x6,0x4b,0x75, + 0x6,0x55,0x63, 0x6,0x53,0x35, 0x5,0x40,0x73, 0x5,0x40,0x7d, + 0x5,0x40,0x74, 0x6,0x55,0x65, 0x5,0x47,0x60, 0x4,0x45,0x45, + 0x6,0x5f,0x44, 0x4,0x45,0x3e, 0x5,0x47,0x63, 0x6,0x5f,0x48, + 0x5,0x47,0x65, 0x5,0x47,0x66, 0x6,0x5f,0x49, 0x4,0x4b,0x4f, + 0x6,0x5f,0x4e, 0x6,0x5f,0x46, 0x6,0x5f,0x4f, 0x7,0x25,0x6c, + 0x6,0x5f,0x47, 0x5,0x47,0x67, 0x5,0x47,0x64, 0x6,0x5f,0x43, + 0x6,0x5f,0x4a, 0x6,0x5f,0x45, 0x5,0x47,0x62, 0x6,0x5f,0x42, + 0x5,0x47,0x5f, 0x5,0x47,0x5e, 0x5,0x47,0x5d, 0x7,0x25,0x66, + 0xf,0x4a,0x37, 0xf,0x4a,0x38, 0xf,0x4a,0x39, 0xf,0x4a,0x3a, + 0xf,0x4a,0x3b, 0xf,0x4a,0x3c, 0xf,0x4a,0x3d, 0x4,0x45,0x3a, + 0x6,0x5f,0x4d, 0x6,0x5f,0x4c, 0x5,0x47,0x69, 0x4,0x45,0x3b, + 0x4,0x4b,0x50, 0x4,0x4b,0x4c, 0x4,0x4b,0x3e, 0x5,0x4e,0x62, + 0x5,0x4e,0x67, 0x4,0x4b,0x4e, 0x7,0x25,0x6b, 0x5,0x4e,0x6c, + 0x5,0x4e,0x65, 0x4,0x4b,0x41, 0x7,0x25,0x70, 0x4,0x4b,0x40, + 0x4,0x51,0x65, 0x7,0x30,0x4d, 0x5,0x4e,0x64, 0x5,0x56,0x21, + 0x5,0x4e,0x66, 0x7,0x25,0x6d, 0x5,0x4e,0x6a, 0x7,0x25,0x72, + 0x4,0x4b,0x49, 0x4,0x4b,0x4b, 0x4,0x4b,0x46, 0x5,0x4e,0x5f, + 0x5,0x4e,0x6b, 0x7,0x25,0x67, 0x7,0x25,0x68, 0x7,0x25,0x6a, + 0x4,0x4b,0x4a, 0x5,0x4e,0x63, 0x7,0x25,0x6e, 0x5,0x4e,0x5e, + 0x5,0x4e,0x61, 0x5,0x55,0x7b, 0x5,0x4e,0x69, 0x5,0x4e,0x68, + 0x7,0x25,0x69, 0xf,0x50,0x5b, 0xf,0x50,0x5c, 0xf,0x50,0x5d, + 0x7,0x25,0x6f, 0x4,0x4b,0x48, 0x5,0x56,0x2a, 0x5,0x56,0x2b, + 0x4,0x51,0x5e, 0x5,0x56,0x25, 0x5,0x56,0x23, 0x5,0x56,0x27, + 0x5,0x55,0x7d, 0x4,0x51,0x63, 0x5,0x56,0x29, 0x5,0x55,0x7e, + 0x5,0x56,0x26, 0x5,0x56,0x24, 0x4,0x51,0x62, 0x7,0x30,0x46, + 0x7,0x30,0x4e, 0x7,0x30,0x4f, 0x7,0x30,0x4b, 0x7,0x30,0x47, + 0x5,0x4e,0x6d, 0x4,0x51,0x67, 0x5,0x55,0x7c, 0x7,0x30,0x49, + 0xf,0x56,0x3d, 0x7,0x30,0x51, 0x7,0x30,0x4c, 0x5,0x56,0x2c, + 0x4,0x51,0x66, 0x5,0x47,0x68, 0x5,0x56,0x28, 0x4,0x5c,0x2b, + 0x5,0x5c,0x48, 0x5,0x5c,0x4b, 0x4,0x57,0x35, 0x4,0x57,0x36, + 0x7,0x30,0x52, 0x7,0x39,0x5e, 0x7,0x39,0x59, 0x5,0x5c,0x4a, + 0x7,0x39,0x5a, 0x5,0x5c,0x4c, 0x7,0x39,0x64, 0x5,0x5c,0x49, + 0x7,0x41,0x22, 0x7,0x39,0x5f, 0x7,0x39,0x60, 0x7,0x39,0x5d, + 0x4,0x57,0x37, 0x7,0x39,0x63, 0x5,0x5c,0x4f, 0x7,0x30,0x48, + 0x5,0x5c,0x4e, 0x7,0x39,0x61, 0x7,0x39,0x5c, 0x7,0x39,0x5b, + 0xf,0x5b,0x3e, 0xf,0x5b,0x3f, 0xf,0x5b,0x40, 0x7,0x39,0x62, + 0x7,0x39,0x58, 0x4,0x5c,0x28, 0x7,0x41,0x23, 0x7,0x40,0x7e, + 0x5,0x62,0x6e, 0x4,0x5c,0x2c, 0x5,0x62,0x6b, 0x7,0x40,0x7b, + 0x7,0x40,0x7c, 0x5,0x62,0x70, 0x4,0x5c,0x24, 0x5,0x62,0x6c, + 0x5,0x62,0x6f, 0x5,0x62,0x71, 0x5,0x62,0x6a, 0xf,0x5f,0x63, + 0xf,0x5f,0x64, 0x7,0x41,0x24, 0x7,0x41,0x25, 0x7,0x40,0x7d, + 0x5,0x62,0x6d, 0x7,0x40,0x7a, 0x7,0x41,0x21, 0x5,0x68,0x4f, + 0x5,0x68,0x4c, 0x5,0x68,0x51, 0x4,0x60,0x3e, 0x5,0x68,0x50, + 0x4,0x60,0x3b, 0x5,0x68,0x54, 0x5,0x68,0x4e, 0x7,0x48,0x32, + 0x4,0x60,0x3a, 0x7,0x48,0x34, 0x4,0x60,0x3c, 0x4,0x60,0x3d, + 0x7,0x48,0x30, 0x5,0x68,0x4d, 0x7,0x48,0x31, 0x5,0x68,0x53, + 0x5,0x68,0x52, 0xf,0x63,0x2a, 0x7,0x4b,0x5d, 0x7,0x48,0x35, + 0x7,0x48,0x33, 0x5,0x6c,0x60, 0x5,0x6c,0x62, 0x5,0x6c,0x5e, + 0x7,0x4e,0x58, 0x5,0x6c,0x61, 0x5,0x6c,0x63, 0x7,0x4e,0x57, + 0xf,0x65,0x57, 0x4,0x63,0x72, 0x5,0x6c,0x5f, 0x4,0x63,0x73, + 0x7,0x4e,0x56, 0x7,0x54,0x22, 0x5,0x70,0x52, 0x5,0x70,0x54, + 0x5,0x70,0x53, 0x5,0x70,0x55, 0x7,0x53,0x7e, 0x7,0x54,0x23, + 0x7,0x53,0x7d, 0x4,0x68,0x79, 0x5,0x73,0x63, 0x7,0x58,0x46, + 0x5,0x73,0x61, 0x5,0x73,0x62, 0x7,0x58,0x47, 0x5,0x73,0x65, + 0x4,0x6a,0x59, 0x7,0x54,0x21, 0x5,0x73,0x64, 0x7,0x59,0x33, + 0x5,0x73,0x66, 0x5,0x76,0x2b, 0x7,0x5c,0x26, 0x4,0x6a,0x58, + 0x7,0x5c,0x25, 0x7,0x5f,0x24, 0x4,0x6c,0x74, 0x7,0x62,0x43, + 0x7,0x62,0x45, 0x7,0x62,0x44, 0xf,0x6c,0x66, 0x5,0x7b,0x43, + 0x5,0x27,0x44, 0x4,0x2a,0x60, 0x4,0x2a,0x61, 0x4,0x2e,0x56, + 0x5,0x2f,0x28, 0x5,0x2f,0x27, 0x6,0x3a,0x2f, 0x6,0x3a,0x30, + 0x4,0x33,0x58, 0x5,0x34,0x22, 0xf,0x37,0x27, 0x5,0x3a,0x52, + 0x4,0x39,0x51, 0x5,0x3a,0x53, 0x5,0x3a,0x51, 0x5,0x3a,0x55, + 0x5,0x3a,0x50, 0x6,0x4c,0x29, 0x5,0x3a,0x54, 0x5,0x41,0x23, + 0x5,0x41,0x22, 0x5,0x41,0x21, 0x6,0x5f,0x51, 0x6,0x5f,0x52, + 0x4,0x45,0x47, 0x4,0x45,0x48, 0x5,0x47,0x6c, 0x5,0x47,0x6a, + 0x5,0x47,0x6b, 0x4,0x45,0x49, 0x6,0x5f,0x50, 0x4,0x45,0x4b, + 0xf,0x4d,0x3f, 0x5,0x4e,0x6e, 0x4,0x4b,0x52, 0x7,0x25,0x75, + 0x5,0x4e,0x6f, 0x4,0x4b,0x51, 0x7,0x25,0x74, 0x4,0x4b,0x53, + 0x4,0x51,0x69, 0x4,0x51,0x68, 0x4,0x51,0x6a, 0x5,0x56,0x2d, + 0x5,0x62,0x75, 0x7,0x39,0x65, 0x5,0x5a,0x75, 0x5,0x5c,0x50, + 0x5,0x62,0x74, 0x5,0x62,0x73, 0x5,0x62,0x72, 0x5,0x68,0x57, + 0x5,0x68,0x56, 0x5,0x68,0x55, 0x5,0x68,0x58, 0x7,0x48,0x36, + 0x7,0x48,0x37, 0x4,0x6a,0x5a, 0x7,0x66,0x3f, 0x7,0x66,0x49, + 0x6,0x26,0x3f, 0x6,0x28,0x6b, 0x6,0x28,0x6c, 0x6,0x33,0x41, + 0x6,0x33,0x3f, 0x6,0x33,0x40, 0x5,0x2a,0x6e, 0x5,0x2f,0x2a, + 0x5,0x2f,0x2b, 0x6,0x3a,0x33, 0xf,0x31,0x3f, 0xf,0x31,0x40, + 0x6,0x3a,0x31, 0x6,0x3a,0x32, 0x5,0x2f,0x29, 0x5,0x34,0x23, + 0x5,0x34,0x24, 0x4,0x33,0x5c, 0x6,0x42,0x59, 0x6,0x42,0x57, + 0x5,0x34,0x25, 0x6,0x42,0x55, 0x6,0x42,0x5b, 0x6,0x42,0x56, + 0x6,0x42,0x5a, 0x6,0x42,0x58, 0x4,0x39,0x52, 0x6,0x4c,0x2c, + 0xf,0x3d,0x52, 0x6,0x4c,0x2a, 0xf,0x3d,0x53, 0x5,0x41,0x24, + 0x4,0x3f,0x32, 0x6,0x55,0x69, 0x4,0x3f,0x35, 0x4,0x3f,0x34, + 0x6,0x55,0x67, 0x5,0x3a,0x56, 0x4,0x3f,0x36, 0xf,0x43,0x75, + 0x6,0x55,0x68, 0x5,0x47,0x6d, 0x5,0x47,0x6e, 0x6,0x5f,0x53, + 0x5,0x47,0x6f, 0x5,0x47,0x70, 0xf,0x4a,0x3e, 0x7,0x25,0x78, + 0x4,0x4b,0x54, 0x7,0x25,0x76, 0x7,0x25,0x77, 0xf,0x50,0x61, + 0x7,0x25,0x79, 0x7,0x30,0x54, 0x4,0x51,0x6b, 0xf,0x56,0x3f, + 0x7,0x30,0x53, 0x5,0x5c,0x51, 0x5,0x5c,0x52, 0x7,0x39,0x66, + 0x7,0x39,0x67, 0x5,0x73,0x67, 0x5,0x76,0x2c, 0x5,0x22,0x7e, + 0x6,0x25,0x3e, 0x4,0x24,0x67, 0x6,0x28,0x6d, 0x5,0x24,0x6d, + 0x5,0x24,0x6c, 0xf,0x25,0x21, 0xf,0x25,0x22, 0x5,0x27,0x45, + 0x4,0x27,0x54, 0xf,0x28,0x30, 0xf,0x28,0x31, 0xf,0x28,0x32, + 0xf,0x28,0x33, 0x6,0x2d,0x47, 0xf,0x28,0x35, 0x4,0x2a,0x65, + 0x4,0x2a,0x63, 0x6,0x33,0x45, 0x5,0x2a,0x70, 0xf,0x2c,0x59, + 0xf,0x2c,0x5a, 0xf,0x2c,0x5b, 0xf,0x2c,0x5d, 0xf,0x2c,0x5e, + 0xf,0x2c,0x5f, 0xf,0x2c,0x61, 0xf,0x2c,0x63, 0x6,0x33,0x43, + 0x6,0x33,0x44, 0xf,0x2c,0x64, 0xf,0x2c,0x60, 0x6,0x33,0x42, + 0x5,0x2a,0x6f, 0x5,0x2a,0x71, 0x4,0x2e,0x60, 0x5,0x2f,0x33, + 0x6,0x3a,0x34, 0x6,0x33,0x46, 0x6,0x3a,0x35, 0x5,0x2f,0x2f, + 0x6,0x3a,0x39, 0x5,0x2f,0x2c, 0x5,0x2f,0x31, 0x5,0x2f,0x30, + 0x4,0x2e,0x5b, 0x4,0x2e,0x5d, 0x5,0x2f,0x36, 0x5,0x2f,0x32, + 0x5,0x2f,0x35, 0xf,0x31,0x3e, 0x4,0x2e,0x59, 0x5,0x2f,0x37, + 0x6,0x3a,0x38, 0xf,0x31,0x42, 0xf,0x31,0x43, 0xf,0x31,0x45, + 0xf,0x31,0x46, 0x4,0x2e,0x5a, 0x5,0x2f,0x2d, 0x6,0x3a,0x37, + 0xf,0x31,0x48, 0xf,0x31,0x41, 0x5,0x34,0x26, 0x5,0x2f,0x2e, + 0x6,0x3a,0x36, 0x5,0x34,0x2c, 0x5,0x34,0x28, 0x6,0x42,0x61, + 0x6,0x42,0x5f, 0x5,0x34,0x31, 0x5,0x34,0x30, 0x5,0x34,0x2a, + 0x6,0x42,0x60, 0x5,0x34,0x34, 0x5,0x34,0x32, 0x5,0x2f,0x38, + 0x5,0x34,0x2e, 0x5,0x34,0x27, 0x5,0x34,0x29, 0x5,0x34,0x2d, + 0xf,0x37,0x28, 0xf,0x37,0x29, 0xf,0x37,0x2a, 0xf,0x37,0x2b, + 0xf,0x37,0x2e, 0xf,0x37,0x2f, 0xf,0x37,0x31, 0xf,0x37,0x32, + 0xf,0x37,0x33, 0x6,0x42,0x5e, 0x6,0x42,0x5c, 0x6,0x4c,0x2e, + 0xf,0x37,0x30, 0x5,0x34,0x2b, 0xf,0x37,0x2c, 0x6,0x42,0x62, + 0x5,0x34,0x2f, 0x5,0x34,0x33, 0x6,0x42,0x5d, 0x5,0x3a,0x58, + 0x5,0x3a,0x5e, 0x5,0x3a,0x57, 0x5,0x3a,0x5b, 0x4,0x39,0x56, + 0x6,0x4c,0x35, 0x4,0x39,0x57, 0x4,0x39,0x55, 0x5,0x3a,0x5c, + 0x5,0x3a,0x5d, 0x6,0x4c,0x31, 0x5,0x3a,0x5a, 0x5,0x3a,0x5f, + 0xf,0x3d,0x54, 0xf,0x3d,0x55, 0xf,0x3d,0x56, 0xf,0x3d,0x57, + 0x6,0x4c,0x34, 0x6,0x4c,0x30, 0x6,0x4c,0x32, 0x5,0x3a,0x61, + 0x5,0x3a,0x60, 0x5,0x41,0x28, 0x6,0x55,0x71, 0x4,0x3f,0x37, + 0x5,0x41,0x29, 0x6,0x55,0x6a, 0x6,0x55,0x6c, 0x5,0x41,0x25, + 0x6,0x55,0x6e, 0x4,0x3f,0x41, 0x4,0x3f,0x43, 0x6,0x55,0x6f, + 0x6,0x55,0x72, 0x5,0x41,0x26, 0x5,0x41,0x27, 0x6,0x55,0x6d, + 0xf,0x43,0x77, 0xf,0x43,0x78, 0xf,0x43,0x79, 0xf,0x43,0x7a, + 0xf,0x43,0x7b, 0xf,0x43,0x7c, 0xf,0x43,0x7d, 0xf,0x43,0x7e, + 0xf,0x44,0x21, 0xf,0x44,0x22, 0xf,0x44,0x23, 0xf,0x44,0x24, + 0xf,0x44,0x26, 0x6,0x55,0x70, 0x6,0x55,0x73, 0x6,0x5f,0x5b, + 0x5,0x47,0x78, 0x6,0x5f,0x54, 0x7,0x25,0x7e, 0x5,0x47,0x7a, + 0x6,0x5f,0x56, 0x4,0x45,0x52, 0x5,0x47,0x73, 0x5,0x47,0x72, + 0x6,0x5f,0x57, 0x5,0x47,0x7b, 0x6,0x5f,0x59, 0x6,0x5f,0x5a, + 0x5,0x47,0x75, 0x6,0x5f,0x55, 0x5,0x47,0x71, 0x5,0x47,0x7d, + 0x6,0x5f,0x58, 0xf,0x4a,0x41, 0xf,0x4a,0x43, 0xf,0x4a,0x44, + 0xf,0x4a,0x45, 0xf,0x4a,0x46, 0xf,0x4a,0x47, 0xf,0x4a,0x48, + 0xf,0x4a,0x49, 0xf,0x4a,0x4b, 0xf,0x4a,0x4c, 0xf,0x4a,0x4d, + 0xf,0x4a,0x4f, 0xf,0x4a,0x50, 0xf,0x4a,0x51, 0xf,0x4a,0x52, + 0x4,0x45,0x54, 0xf,0x4a,0x40, 0x5,0x47,0x77, 0x5,0x47,0x7c, + 0x5,0x47,0x79, 0x5,0x47,0x74, 0xf,0x50,0x64, 0x4,0x4b,0x5a, + 0x5,0x4e,0x72, 0x5,0x4e,0x73, 0x7,0x26,0x21, 0x5,0x4e,0x70, + 0x4,0x45,0x50, 0x7,0x26,0x25, 0x5,0x4e,0x75, 0x7,0x25,0x7d, + 0xf,0x50,0x62, 0xf,0x50,0x63, 0xf,0x50,0x65, 0xf,0x50,0x66, + 0xf,0x50,0x68, 0x7,0x26,0x22, 0x7,0x25,0x7a, 0x7,0x26,0x23, + 0x5,0x4e,0x71, 0x5,0x4e,0x74, 0x7,0x25,0x7c, 0xf,0x4a,0x4a, + 0x7,0x30,0x58, 0x5,0x56,0x31, 0x5,0x56,0x2e, 0x5,0x56,0x32, + 0x7,0x30,0x55, 0x4,0x51,0x71, 0x4,0x51,0x73, 0x5,0x56,0x34, + 0x4,0x51,0x72, 0x7,0x30,0x56, 0x7,0x30,0x5a, 0x4,0x51,0x6f, + 0x7,0x30,0x57, 0xf,0x56,0x41, 0xf,0x56,0x42, 0xf,0x56,0x43, + 0x5,0x56,0x30, 0xf,0x56,0x44, 0x5,0x56,0x2f, 0xf,0x56,0x45, + 0xf,0x56,0x46, 0xf,0x56,0x47, 0xf,0x56,0x49, 0xf,0x56,0x4b, + 0xf,0x56,0x4c, 0xf,0x56,0x4d, 0x5,0x5c,0x56, 0x7,0x39,0x68, + 0x5,0x5c,0x54, 0x7,0x39,0x6f, 0x7,0x39,0x6a, 0x5,0x5c,0x53, + 0x4,0x57,0x3a, 0x7,0x39,0x69, 0x5,0x5c,0x55, 0x4,0x57,0x3d, + 0x7,0x39,0x6c, 0x4,0x57,0x3c, 0x5,0x56,0x35, 0x5,0x5c,0x58, + 0x5,0x5c,0x57, 0x5,0x5c,0x59, 0xf,0x5b,0x41, 0xf,0x5b,0x42, + 0xf,0x5b,0x43, 0xf,0x5b,0x44, 0xf,0x5b,0x45, 0xf,0x5b,0x46, + 0xf,0x5b,0x47, 0xf,0x5b,0x48, 0xf,0x5b,0x49, 0x7,0x39,0x6b, + 0x7,0x39,0x6e, 0xf,0x56,0x4a, 0x7,0x41,0x29, 0x5,0x62,0x76, + 0x5,0x62,0x78, 0x7,0x41,0x26, 0x7,0x41,0x28, 0x5,0x62,0x77, + 0x4,0x5c,0x30, 0x5,0x62,0x7a, 0x7,0x41,0x27, 0x5,0x62,0x79, + 0x7,0x41,0x2a, 0xf,0x5f,0x65, 0xf,0x5f,0x66, 0xf,0x5f,0x67, + 0xf,0x5f,0x68, 0xf,0x5f,0x69, 0x4,0x60,0x40, 0x5,0x68,0x5a, + 0x5,0x68,0x59, 0xf,0x63,0x2b, 0xf,0x63,0x2c, 0xf,0x63,0x2d, + 0xf,0x63,0x2e, 0x7,0x48,0x3a, 0x7,0x48,0x38, 0x7,0x48,0x39, + 0xf,0x63,0x2f, 0x5,0x6c,0x65, 0x5,0x6c,0x66, 0x7,0x4e,0x59, + 0x7,0x4e,0x5a, 0x5,0x6c,0x64, 0x5,0x6c,0x67, 0x4,0x60,0x41, + 0x7,0x4e,0x5b, 0xf,0x65,0x5a, 0xf,0x65,0x5b, 0xf,0x65,0x5c, + 0xf,0x65,0x5d, 0x7,0x4e,0x5d, 0x5,0x70,0x56, 0x5,0x70,0x57, + 0xf,0x67,0x7d, 0x7,0x54,0x24, 0x4,0x66,0x62, 0xf,0x67,0x7c, + 0x5,0x73,0x68, 0x7,0x58,0x48, 0x5,0x73,0x69, 0xf,0x69,0x5b, + 0xf,0x69,0x5c, 0x7,0x58,0x49, 0x5,0x73,0x6a, 0x5,0x76,0x2e, + 0x4,0x6a,0x5b, 0x5,0x76,0x2d, 0x5,0x76,0x2f, 0xf,0x6a,0x65, + 0x7,0x5c,0x28, 0x7,0x5c,0x27, 0x7,0x5f,0x26, 0x7,0x5f,0x25, + 0x7,0x5f,0x27, 0x7,0x62,0x46, 0x5,0x7a,0x2d, 0x5,0x7a,0x6e, + 0x4,0x6d,0x75, 0x7,0x64,0x53, 0x7,0x65,0x3b, 0x5,0x7c,0x43, + 0x6,0x22,0x27, 0x6,0x25,0x40, 0x6,0x28,0x6e, 0xf,0x22,0x68, + 0x6,0x2d,0x48, 0xf,0x25,0x24, 0x6,0x33,0x47, 0x6,0x33,0x49, + 0xf,0x28,0x36, 0xf,0x28,0x38, 0xf,0x28,0x39, 0xf,0x28,0x3a, + 0xf,0x28,0x3b, 0xf,0x28,0x3d, 0xf,0x28,0x37, 0x6,0x31,0x5a, + 0x5,0x2f,0x39, 0x6,0x3a,0x3a, 0x4,0x2e,0x63, 0x5,0x2f,0x3a, + 0x6,0x3a,0x3b, 0x6,0x33,0x4b, 0xf,0x2c,0x65, 0xf,0x2c,0x66, + 0xf,0x2c,0x67, 0xf,0x2c,0x68, 0xf,0x2c,0x69, 0xf,0x31,0x49, + 0xf,0x31,0x4b, 0xf,0x31,0x4e, 0x6,0x3a,0x3e, 0x6,0x3a,0x3f, + 0x6,0x3a,0x3d, 0x6,0x3a,0x40, 0x6,0x3a,0x3c, 0xf,0x2c,0x6a, + 0x4,0x2a,0x68, 0x5,0x34,0x36, 0x6,0x3a,0x41, 0xf,0x31,0x4a, + 0xf,0x31,0x4c, 0xf,0x31,0x4d, 0xf,0x31,0x4f, 0xf,0x31,0x50, + 0xf,0x31,0x51, 0xf,0x31,0x52, 0xf,0x31,0x53, 0xf,0x31,0x54, + 0xf,0x37,0x37, 0x6,0x42,0x63, 0x5,0x34,0x35, 0x6,0x4c,0x38, + 0x5,0x3a,0x62, 0x6,0x4c,0x39, 0x6,0x4c,0x3a, 0x6,0x4c,0x3c, + 0x5,0x3a,0x63, 0x6,0x4c,0x3d, 0x6,0x4c,0x3b, 0x6,0x4c,0x36, + 0x6,0x4c,0x37, 0xf,0x37,0x34, 0xf,0x37,0x36, 0xf,0x37,0x38, + 0xf,0x3d,0x5b, 0xf,0x37,0x35, 0x6,0x55,0x75, 0x5,0x41,0x2b, + 0x5,0x41,0x2a, 0x5,0x41,0x2c, 0x6,0x4c,0x3f, 0x4,0x3f,0x48, + 0xf,0x3d,0x58, 0xf,0x3d,0x59, 0xf,0x3d,0x5a, 0xf,0x3d,0x5c, + 0xf,0x3d,0x5d, 0xf,0x3d,0x5e, 0xf,0x3d,0x5f, 0xf,0x3d,0x62, + 0xf,0x3d,0x63, 0xf,0x3d,0x64, 0xf,0x44,0x28, 0xf,0x44,0x2a, + 0xf,0x3d,0x61, 0x6,0x55,0x74, 0x5,0x48,0x23, 0x6,0x5f,0x5f, + 0x6,0x5f,0x60, 0x4,0x45,0x56, 0x6,0x5f,0x63, 0x6,0x5f,0x61, + 0xf,0x44,0x27, 0xf,0x44,0x29, 0xf,0x44,0x2b, 0xf,0x44,0x2c, + 0xf,0x44,0x2d, 0xf,0x44,0x2e, 0xf,0x44,0x2f, 0xf,0x44,0x30, + 0xf,0x44,0x31, 0xf,0x44,0x32, 0x6,0x5f,0x5d, 0x6,0x5f,0x62, + 0x5,0x48,0x21, 0x6,0x5f,0x5e, 0x4,0x4b,0x5f, 0x7,0x26,0x26, + 0x6,0x5f,0x5c, 0x6,0x5f,0x64, 0xf,0x4a,0x53, 0xf,0x4a,0x55, + 0xf,0x4a,0x56, 0xf,0x4a,0x57, 0xf,0x4a,0x58, 0xf,0x4a,0x5a, + 0x7,0x26,0x28, 0x5,0x56,0x38, 0x7,0x30,0x5c, 0x5,0x56,0x36, + 0x7,0x30,0x5d, 0x4,0x51,0x77, 0x5,0x56,0x39, 0x5,0x56,0x37, + 0x5,0x56,0x3a, 0x7,0x26,0x2a, 0x7,0x30,0x5b, 0xf,0x50,0x6a, + 0xf,0x50,0x69, 0xf,0x56,0x51, 0x4,0x57,0x43, 0x5,0x5c,0x5a, + 0x7,0x39,0x73, 0x4,0x57,0x44, 0x7,0x39,0x76, 0x7,0x39,0x74, + 0x7,0x30,0x5e, 0xf,0x50,0x6b, 0xf,0x56,0x4e, 0xf,0x56,0x4f, + 0xf,0x56,0x50, 0xf,0x56,0x52, 0x7,0x39,0x71, 0x7,0x39,0x75, + 0x7,0x39,0x72, 0x7,0x39,0x70, 0xf,0x5b,0x4d, 0xf,0x5b,0x4f, + 0x4,0x5c,0x34, 0x5,0x62,0x7b, 0x7,0x41,0x2c, 0xf,0x5b,0x4b, + 0xf,0x5b,0x4c, 0xf,0x5b,0x4e, 0xf,0x5b,0x50, 0xf,0x5b,0x51, + 0xf,0x5b,0x52, 0x7,0x41,0x2b, 0x4,0x5c,0x33, 0x5,0x68,0x5b, + 0x7,0x48,0x3c, 0x7,0x48,0x3d, 0xf,0x5f,0x6a, 0xf,0x5f,0x6b, + 0x5,0x6c,0x68, 0x4,0x63,0x77, 0xf,0x65,0x5e, 0x7,0x4e,0x5e, + 0x7,0x54,0x26, 0x7,0x54,0x25, 0xf,0x65,0x5f, 0x4,0x68,0x7d, + 0x7,0x58,0x4a, 0x7,0x58,0x4b, 0x7,0x5c,0x29, 0xf,0x69,0x5d, + 0x7,0x5c,0x2a, 0x7,0x5c,0x2b, 0x5,0x77,0x6e, 0x7,0x5c,0x2c, + 0x5,0x77,0x6f, 0xf,0x6a,0x67, 0x5,0x79,0x32, 0x7,0x62,0x49, + 0x7,0x62,0x47, 0x7,0x63,0x5d, 0xf,0x6c,0x67, 0xf,0x22,0x69, + 0x6,0x33,0x4d, 0x6,0x42,0x64, 0x4,0x39,0x5b, 0x6,0x4c,0x40, + 0x6,0x55,0x76, 0x6,0x5f,0x65, 0x7,0x26,0x2c, 0x7,0x30,0x5f, + 0x7,0x30,0x60, 0x7,0x41,0x2d, 0x5,0x73,0x6b, 0x7,0x61,0x28, + 0x4,0x21,0x7e, 0x6,0x25,0x41, 0xf,0x22,0x6a, 0x6,0x28,0x6f, + 0xf,0x25,0x25, 0x6,0x28,0x70, 0x4,0x27,0x55, 0x5,0x27,0x48, + 0x4,0x27,0x57, 0x5,0x27,0x47, 0xf,0x28,0x3e, 0xf,0x28,0x3f, + 0xf,0x28,0x40, 0xf,0x28,0x41, 0xf,0x28,0x42, 0x6,0x2d,0x4a, + 0x6,0x33,0x51, 0x6,0x33,0x54, 0x5,0x2a,0x74, 0x5,0x2a,0x72, + 0x4,0x2a,0x70, 0x5,0x2a,0x75, 0x6,0x33,0x56, 0x6,0x33,0x50, + 0x6,0x33,0x52, 0x4,0x2a,0x6d, 0x6,0x33,0x4f, 0x5,0x2a,0x73, + 0x6,0x33,0x57, 0xf,0x2c,0x6b, 0xf,0x2c,0x6c, 0xf,0x2c,0x6e, + 0xf,0x2c,0x6f, 0xf,0x2c,0x70, 0x6,0x33,0x55, 0x6,0x33,0x53, + 0x6,0x33,0x4e, 0x5,0x2f,0x3c, 0x5,0x2f,0x3b, 0x6,0x3a,0x45, + 0x5,0x2f,0x3d, 0x6,0x3a,0x46, 0x5,0x2f,0x3e, 0x5,0x2a,0x76, + 0x5,0x34,0x3c, 0x6,0x3a,0x47, 0xf,0x31,0x55, 0xf,0x31,0x56, + 0x6,0x3a,0x42, 0x6,0x3a,0x44, 0x5,0x34,0x3a, 0x6,0x42,0x69, + 0x5,0x34,0x3f, 0x4,0x33,0x68, 0x5,0x34,0x3d, 0x6,0x42,0x68, + 0x5,0x34,0x37, 0xf,0x37,0x3a, 0xf,0x37,0x3c, 0xf,0x37,0x3d, + 0xf,0x37,0x3e, 0x4,0x33,0x6c, 0x6,0x42,0x65, 0x6,0x42,0x6a, + 0x4,0x39,0x5f, 0x5,0x3a,0x64, 0x4,0x39,0x60, 0x4,0x39,0x5c, + 0x6,0x4c,0x41, 0x6,0x4c,0x42, 0x6,0x4c,0x45, 0x6,0x4c,0x47, + 0x4,0x39,0x5d, 0x6,0x4c,0x44, 0x4,0x3f,0x51, 0xf,0x3d,0x65, + 0xf,0x3d,0x67, 0xf,0x3d,0x69, 0x5,0x34,0x3e, 0xf,0x3d,0x66, + 0x5,0x41,0x36, 0x5,0x41,0x2f, 0x6,0x55,0x79, 0x6,0x55,0x77, + 0x6,0x55,0x7a, 0x5,0x41,0x30, 0x5,0x41,0x2d, 0x5,0x41,0x32, + 0x5,0x41,0x34, 0x5,0x41,0x38, 0x5,0x41,0x33, 0x4,0x3f,0x4e, + 0x6,0x56,0x21, 0x5,0x41,0x2e, 0x6,0x55,0x7b, 0x6,0x55,0x7e, + 0x6,0x55,0x7c, 0xf,0x44,0x33, 0xf,0x44,0x34, 0xf,0x44,0x35, + 0xf,0x44,0x36, 0xf,0x44,0x37, 0xf,0x44,0x38, 0xf,0x44,0x39, + 0xf,0x44,0x3a, 0x6,0x55,0x78, 0x6,0x55,0x7d, 0x5,0x41,0x37, + 0x5,0x41,0x35, 0x5,0x48,0x28, 0x6,0x5f,0x69, 0x5,0x45,0x2d, + 0x5,0x48,0x2d, 0x6,0x5f,0x68, 0x6,0x5f,0x66, 0x6,0x5f,0x6a, + 0x4,0x45,0x5c, 0x5,0x48,0x2e, 0x5,0x48,0x29, 0x6,0x5f,0x6e, + 0x6,0x5f,0x6f, 0x5,0x48,0x2b, 0x5,0x48,0x27, 0x5,0x48,0x2c, + 0x6,0x5f,0x70, 0x5,0x48,0x2a, 0x6,0x5f,0x67, 0xf,0x4a,0x60, + 0xf,0x4a,0x5b, 0xf,0x4a,0x5c, 0xf,0x4a,0x5d, 0xf,0x4a,0x5e, + 0xf,0x4a,0x5f, 0xf,0x4a,0x61, 0xf,0x4a,0x62, 0xf,0x4a,0x63, + 0xf,0x4a,0x65, 0x6,0x5f,0x6d, 0x6,0x5f,0x6c, 0x5,0x4e,0x7b, + 0x5,0x4e,0x78, 0x5,0x4e,0x7a, 0x7,0x26,0x33, 0x7,0x26,0x30, + 0x5,0x4e,0x79, 0x4,0x4b,0x69, 0x7,0x26,0x34, 0x7,0x26,0x31, + 0x7,0x26,0x38, 0x5,0x48,0x2f, 0x7,0x26,0x2f, 0x5,0x56,0x45, + 0x5,0x4e,0x7c, 0x5,0x4e,0x7d, 0x4,0x4b,0x67, 0x4,0x4b,0x6a, + 0x7,0x26,0x35, 0xf,0x50,0x6c, 0xf,0x50,0x6e, 0xf,0x50,0x6f, + 0xf,0x50,0x70, 0xf,0x50,0x71, 0xf,0x50,0x72, 0x7,0x26,0x2e, + 0x7,0x26,0x36, 0x7,0x26,0x37, 0x4,0x51,0x7b, 0x7,0x30,0x6d, + 0x5,0x56,0x3d, 0x5,0x56,0x40, 0x7,0x30,0x69, 0x5,0x56,0x3c, + 0x5,0x56,0x3f, 0x5,0x56,0x3e, 0x4,0x51,0x7e, 0x5,0x56,0x3b, + 0x5,0x56,0x43, 0x7,0x30,0x63, 0x7,0x30,0x64, 0x5,0x56,0x42, + 0x7,0x30,0x62, 0x5,0x56,0x46, 0x5,0x5c,0x5b, 0x5,0x56,0x47, + 0x7,0x30,0x6b, 0x7,0x30,0x6a, 0x7,0x30,0x6c, 0x7,0x30,0x61, + 0xf,0x56,0x54, 0xf,0x56,0x55, 0x7,0x30,0x65, 0x7,0x30,0x67, + 0x7,0x30,0x68, 0x5,0x56,0x44, 0x5,0x56,0x41, 0x5,0x5c,0x5e, + 0x5,0x5c,0x61, 0x5,0x5c,0x62, 0x5,0x5c,0x5f, 0x5,0x5c,0x5c, + 0x5,0x5c,0x5d, 0x4,0x57,0x4a, 0x7,0x39,0x77, 0x5,0x5c,0x64, + 0x4,0x57,0x46, 0x5,0x5c,0x60, 0x7,0x39,0x7a, 0xf,0x5b,0x54, + 0xf,0x5b,0x55, 0xf,0x5b,0x56, 0xf,0x5b,0x57, 0xf,0x5b,0x58, + 0xf,0x5b,0x5a, 0x7,0x39,0x78, 0xf,0x5b,0x53, 0x5,0x56,0x48, + 0x7,0x39,0x79, 0x5,0x5c,0x63, 0xf,0x56,0x53, 0x5,0x62,0x7d, + 0x5,0x63,0x26, 0x5,0x63,0x24, 0x5,0x63,0x21, 0x5,0x63,0x22, + 0x5,0x63,0x25, 0x7,0x41,0x30, 0x5,0x62,0x7e, 0x7,0x41,0x2f, + 0x5,0x63,0x23, 0xf,0x5f,0x6c, 0xf,0x5f,0x6d, 0xf,0x5f,0x6e, + 0xf,0x5f,0x6f, 0xf,0x5f,0x70, 0xf,0x5f,0x71, 0xf,0x5f,0x72, + 0x5,0x62,0x7c, 0x5,0x68,0x5e, 0x4,0x60,0x43, 0x5,0x68,0x5c, + 0x4,0x60,0x44, 0x4,0x60,0x47, 0x7,0x48,0x3f, 0x4,0x60,0x46, + 0x5,0x68,0x5d, 0x7,0x4e,0x62, 0x7,0x48,0x41, 0x7,0x48,0x3e, + 0xf,0x63,0x30, 0x7,0x48,0x40, 0x5,0x6c,0x6b, 0x4,0x63,0x7a, + 0x4,0x63,0x78, 0x5,0x6c,0x6a, 0x7,0x4e,0x60, 0x4,0x5c,0x38, + 0x5,0x6c,0x69, 0x5,0x6c,0x6c, 0x7,0x4e,0x5f, 0x7,0x4e,0x61, + 0xf,0x65,0x60, 0xf,0x65,0x61, 0xf,0x65,0x63, 0x7,0x4e,0x63, + 0x5,0x6c,0x6d, 0x7,0x54,0x28, 0x7,0x54,0x27, 0x5,0x70,0x58, + 0x7,0x54,0x29, 0x7,0x58,0x4d, 0x5,0x73,0x6c, 0x7,0x58,0x4e, + 0x5,0x76,0x30, 0x5,0x76,0x31, 0x7,0x58,0x4f, 0x5,0x77,0x70, + 0x7,0x5c,0x2d, 0x7,0x5c,0x2e, 0x7,0x5f,0x28, 0x7,0x5e,0x71, + 0xf,0x6b,0x57, 0xf,0x6b,0x58, 0x4,0x6c,0x77, 0x5,0x79,0x33, + 0xf,0x6c,0x34, 0x4,0x6c,0x78, 0x5,0x7a,0x2e, 0x5,0x7b,0x61, + 0x5,0x7b,0x62, 0x6,0x23,0x37, 0x5,0x24,0x6f, 0x5,0x24,0x70, + 0x4,0x27,0x59, 0x4,0x27,0x5a, 0x4,0x27,0x58, 0x6,0x2d,0x4d, + 0x6,0x2d,0x4c, 0x6,0x2d,0x4f, 0x3,0x2a,0x45, 0x6,0x2d,0x4b, + 0xf,0x28,0x43, 0x4,0x2a,0x74, 0x6,0x33,0x59, 0x6,0x33,0x5b, + 0x6,0x33,0x58, 0x5,0x2a,0x77, 0x4,0x2a,0x73, 0x5,0x2a,0x79, + 0x5,0x2a,0x78, 0x6,0x33,0x5a, 0x6,0x33,0x5c, 0x6,0x33,0x5d, + 0x5,0x2a,0x7a, 0xf,0x2c,0x71, 0xf,0x2c,0x72, 0xf,0x2c,0x73, + 0x5,0x2f,0x3f, 0x4,0x2e,0x66, 0x4,0x2e,0x6b, 0x4,0x2e,0x68, + 0x5,0x2f,0x43, 0x5,0x2f,0x42, 0x5,0x2f,0x41, 0x6,0x3a,0x4c, + 0x4,0x2e,0x69, 0x4,0x2e,0x6a, 0x4,0x2e,0x67, 0x6,0x3a,0x4a, + 0x6,0x3a,0x48, 0x5,0x2f,0x40, 0x5,0x2f,0x44, 0xf,0x31,0x58, + 0xf,0x31,0x59, 0xf,0x31,0x5a, 0x6,0x3a,0x4b, 0x6,0x3a,0x49, + 0x5,0x34,0x44, 0x5,0x34,0x43, 0x6,0x42,0x6c, 0x6,0x42,0x6b, + 0x6,0x42,0x6d, 0x5,0x34,0x41, 0x4,0x33,0x6e, 0x5,0x34,0x42, + 0x5,0x34,0x40, 0x6,0x42,0x6e, 0xf,0x37,0x40, 0xf,0x37,0x41, + 0xf,0x37,0x42, 0xf,0x37,0x43, 0xf,0x37,0x44, 0x5,0x3a,0x72, + 0x4,0x39,0x66, 0x5,0x3a,0x74, 0x6,0x4c,0x4e, 0x6,0x4c,0x4a, + 0x4,0x39,0x69, 0x6,0x4c,0x52, 0x5,0x3a,0x69, 0x5,0x3a,0x6f, + 0x5,0x3a,0x71, 0x6,0x4c,0x50, 0x5,0x3a,0x67, 0x6,0x4c,0x51, + 0x5,0x3a,0x68, 0x6,0x4c,0x4b, 0x5,0x3a,0x6a, 0x4,0x39,0x68, + 0x5,0x3a,0x73, 0x6,0x4c,0x4c, 0x5,0x3a,0x70, 0x6,0x4c,0x49, + 0x5,0x3a,0x66, 0x5,0x3a,0x6d, 0x6,0x4c,0x4f, 0x5,0x3a,0x6e, + 0x5,0x3a,0x6b, 0x6,0x4c,0x4d, 0xf,0x3d,0x6b, 0x5,0x41,0x3a, + 0x6,0x56,0x29, 0x5,0x41,0x3c, 0x5,0x41,0x3b, 0x5,0x41,0x3e, + 0x6,0x56,0x22, 0x6,0x56,0x24, 0x5,0x3a,0x6c, 0x5,0x41,0x3d, + 0x5,0x41,0x3f, 0x6,0x56,0x28, 0x6,0x56,0x2b, 0x5,0x41,0x40, + 0x6,0x56,0x26, 0x6,0x56,0x25, 0xf,0x44,0x3b, 0xf,0x44,0x3d, + 0xf,0x44,0x3e, 0xf,0x44,0x3f, 0xf,0x44,0x40, 0x6,0x56,0x23, + 0x6,0x56,0x2a, 0x6,0x57,0x26, 0x4,0x45,0x61, 0x6,0x5f,0x77, + 0x5,0x48,0x32, 0x6,0x5f,0x76, 0x6,0x5f,0x72, 0x6,0x5f,0x74, + 0x6,0x5f,0x73, 0x5,0x48,0x31, 0x6,0x5f,0x79, 0xf,0x4a,0x66, + 0x5,0x48,0x33, 0x6,0x5f,0x71, 0xf,0x44,0x3c, 0x7,0x26,0x3b, + 0x5,0x4f,0x21, 0x5,0x4f,0x27, 0x5,0x4f,0x2a, 0x5,0x48,0x30, + 0x7,0x26,0x3a, 0x5,0x4f,0x2b, 0x5,0x4f,0x26, 0x5,0x4f,0x22, + 0x5,0x4f,0x2c, 0x5,0x4f,0x25, 0x7,0x26,0x39, 0x5,0x4e,0x7e, + 0x5,0x4f,0x28, 0x5,0x4f,0x24, 0x5,0x4f,0x29, 0x7,0x27,0x2e, + 0x4,0x4b,0x6d, 0x5,0x56,0x4f, 0x5,0x56,0x51, 0x4,0x52,0x23, + 0x5,0x56,0x50, 0x4,0x52,0x26, 0x5,0x56,0x49, 0x4,0x52,0x28, + 0x7,0x30,0x70, 0x5,0x56,0x4a, 0x5,0x56,0x4c, 0x5,0x56,0x4b, + 0x5,0x56,0x53, 0x5,0x56,0x4d, 0x5,0x56,0x54, 0x7,0x30,0x6e, + 0x5,0x56,0x4e, 0x5,0x5c,0x65, 0x5,0x56,0x55, 0xf,0x56,0x56, + 0xf,0x56,0x57, 0xf,0x56,0x58, 0xf,0x56,0x59, 0xf,0x56,0x5a, + 0x7,0x30,0x71, 0x5,0x5c,0x6a, 0x5,0x5c,0x67, 0x7,0x3a,0x21, + 0x4,0x57,0x4e, 0x5,0x5c,0x69, 0x7,0x39,0x7c, 0x7,0x39,0x7d, + 0x7,0x39,0x7b, 0x5,0x5c,0x66, 0x7,0x39,0x7e, 0x7,0x30,0x72, + 0x5,0x5c,0x68, 0xf,0x5b,0x5b, 0x5,0x63,0x28, 0x5,0x63,0x27, + 0xf,0x5f,0x74, 0x4,0x60,0x4a, 0x7,0x48,0x44, 0x7,0x48,0x43, + 0x5,0x68,0x5f, 0x7,0x48,0x42, 0x7,0x4e,0x64, 0x7,0x4e,0x66, + 0x5,0x68,0x60, 0x4,0x63,0x7b, 0x5,0x6c,0x6e, 0x7,0x54,0x2d, + 0x7,0x4e,0x67, 0x7,0x4e,0x65, 0xf,0x65,0x64, 0x5,0x70,0x5b, + 0x7,0x54,0x2b, 0x4,0x66,0x67, 0x4,0x66,0x66, 0x5,0x70,0x59, + 0x7,0x54,0x2c, 0x5,0x70,0x5a, 0xf,0x68,0x21, 0xf,0x65,0x65, + 0x5,0x76,0x32, 0x7,0x5c,0x2f, 0x5,0x77,0x71, 0x7,0x61,0x2a, + 0xf,0x6b,0x59, 0x7,0x5f,0x29, 0x5,0x79,0x34, 0x7,0x62,0x4a, + 0x5,0x7b,0x63, 0x6,0x28,0x72, 0x6,0x28,0x71, 0x5,0x27,0x49, + 0x5,0x27,0x4a, 0x4,0x2a,0x75, 0xf,0x2c,0x74, 0xf,0x2c,0x78, + 0x4,0x2e,0x6f, 0x5,0x2f,0x47, 0x5,0x2f,0x48, 0x4,0x2e,0x6c, + 0x5,0x2f,0x46, 0x5,0x2f,0x45, 0x4,0x2e,0x6e, 0xf,0x31,0x5c, + 0xf,0x31,0x5d, 0xf,0x31,0x5e, 0xf,0x31,0x5f, 0xf,0x31,0x61, + 0xf,0x31,0x62, 0x6,0x3a,0x4d, 0x6,0x3a,0x4e, 0x6,0x42,0x72, + 0x4,0x33,0x73, 0x6,0x42,0x71, 0x6,0x42,0x73, 0x6,0x42,0x70, + 0x4,0x33,0x74, 0xf,0x37,0x45, 0xf,0x37,0x47, 0x5,0x34,0x47, + 0xf,0x37,0x48, 0x4,0x39,0x6b, 0x6,0x4c,0x55, 0x5,0x3a,0x75, + 0x5,0x3a,0x77, 0x5,0x3a,0x76, 0x5,0x3a,0x78, 0x6,0x4c,0x54, + 0xf,0x3d,0x6d, 0xf,0x3d,0x6e, 0xf,0x3d,0x6f, 0xf,0x3d,0x70, + 0x4,0x3f,0x56, 0x4,0x3f,0x58, 0x5,0x41,0x42, 0x4,0x3f,0x59, + 0x6,0x56,0x2c, 0x5,0x41,0x41, 0x6,0x56,0x2d, 0x6,0x56,0x2e, + 0xf,0x44,0x41, 0xf,0x44,0x42, 0xf,0x44,0x43, 0x5,0x41,0x43, + 0x5,0x48,0x34, 0x6,0x5f,0x7a, 0x5,0x48,0x35, 0x4,0x45,0x62, + 0xf,0x4a,0x67, 0xf,0x4a,0x68, 0xf,0x4a,0x6a, 0xf,0x4a,0x69, + 0x7,0x26,0x3f, 0x4,0x4b,0x6e, 0x5,0x4f,0x2d, 0xf,0x50,0x73, + 0xf,0x50,0x74, 0xf,0x50,0x75, 0x7,0x26,0x3d, 0xf,0x56,0x5c, + 0xf,0x56,0x5b, 0x4,0x57,0x51, 0x7,0x30,0x74, 0x5,0x56,0x56, + 0xf,0x5b,0x5c, 0x5,0x5c,0x6c, 0x5,0x5d,0x63, 0x7,0x3a,0x22, + 0x5,0x5c,0x6b, 0x5,0x63,0x2a, 0x7,0x3a,0x23, 0xf,0x5f,0x75, + 0x7,0x41,0x31, 0x5,0x63,0x29, 0x7,0x4e,0x68, 0x7,0x54,0x2e, + 0xf,0x65,0x66, 0x7,0x48,0x45, 0x5,0x70,0x5c, 0xf,0x68,0x22, + 0x7,0x58,0x50, 0xf,0x69,0x5e, 0xf,0x6a,0x68, 0x7,0x61,0x2b, + 0xf,0x25,0x26, 0x5,0x27,0x4b, 0x6,0x2d,0x50, 0x5,0x27,0x4d, + 0x5,0x27,0x4c, 0x5,0x2a,0x7c, 0x5,0x2a,0x7d, 0x5,0x2a,0x7b, + 0x6,0x33,0x5f, 0x6,0x33,0x5e, 0x5,0x2a,0x7e, 0xf,0x2c,0x79, + 0xf,0x2c,0x7a, 0xf,0x2c,0x7b, 0xf,0x2c,0x7c, 0xf,0x2c,0x7d, + 0xf,0x29,0x24, 0x5,0x2f,0x4e, 0x5,0x2f,0x49, 0x4,0x2e,0x74, + 0x5,0x2f,0x4a, 0x5,0x2f,0x4c, 0x5,0x2f,0x4d, 0x6,0x3a,0x50, + 0x5,0x2f,0x51, 0x5,0x2f,0x4f, 0x5,0x2f,0x4b, 0x6,0x3a,0x4f, + 0x6,0x3a,0x51, 0x5,0x2f,0x50, 0x5,0x2f,0x52, 0xf,0x31,0x63, + 0xf,0x31,0x64, 0xf,0x31,0x65, 0xf,0x31,0x66, 0xf,0x31,0x67, + 0xf,0x31,0x68, 0xf,0x31,0x69, 0xf,0x31,0x6a, 0x4,0x2e,0x76, + 0x6,0x42,0x74, 0x6,0x42,0x7a, 0x5,0x34,0x4a, 0x4,0x33,0x79, + 0x5,0x34,0x4d, 0x6,0x42,0x77, 0x5,0x34,0x4c, 0x6,0x42,0x7c, + 0x4,0x33,0x75, 0x5,0x34,0x4e, 0x6,0x42,0x75, 0x5,0x2f,0x53, + 0x5,0x34,0x49, 0x6,0x42,0x79, 0x6,0x42,0x7b, 0x5,0x34,0x50, + 0x5,0x34,0x51, 0x6,0x42,0x78, 0xf,0x37,0x49, 0xf,0x37,0x4a, + 0xf,0x37,0x4b, 0xf,0x37,0x4c, 0xf,0x37,0x4e, 0xf,0x37,0x4f, + 0x5,0x3a,0x7c, 0x5,0x3b,0x22, 0x5,0x3a,0x7b, 0x5,0x3a,0x7e, + 0x4,0x39,0x6c, 0x4,0x39,0x6e, 0x6,0x4c,0x5a, 0x5,0x34,0x4b, + 0x4,0x39,0x73, 0x5,0x3b,0x21, 0x5,0x3a,0x7a, 0x4,0x39,0x79, + 0x4,0x39,0x77, 0x4,0x39,0x70, 0x6,0x4c,0x5d, 0x4,0x39,0x78, + 0x6,0x4c,0x57, 0x5,0x3b,0x25, 0x6,0x4c,0x59, 0x6,0x4c,0x5c, + 0x5,0x34,0x4f, 0x5,0x3a,0x7d, 0xf,0x3d,0x71, 0xf,0x3d,0x72, + 0xf,0x3d,0x73, 0xf,0x3d,0x74, 0xf,0x3d,0x75, 0xf,0x3d,0x76, + 0xf,0x3d,0x78, 0xf,0x3d,0x79, 0xf,0x3d,0x7a, 0xf,0x3d,0x77, + 0x5,0x3b,0x23, 0x5,0x41,0x54, 0x5,0x41,0x48, 0x5,0x41,0x4f, + 0x4,0x3f,0x5c, 0x5,0x41,0x4d, 0x5,0x41,0x45, 0x4,0x3f,0x64, + 0x4,0x3f,0x65, 0x5,0x41,0x50, 0x4,0x3f,0x5f, 0x5,0x3a,0x79, + 0x6,0x56,0x30, 0x5,0x41,0x46, 0x5,0x41,0x55, 0x5,0x41,0x4b, + 0x5,0x41,0x52, 0x5,0x41,0x44, 0x5,0x41,0x49, 0x5,0x41,0x4c, + 0x6,0x56,0x34, 0x6,0x56,0x32, 0x6,0x56,0x37, 0x6,0x56,0x3a, + 0x6,0x56,0x33, 0x6,0x56,0x36, 0x6,0x56,0x38, 0x6,0x5f,0x7b, + 0x5,0x41,0x53, 0x5,0x41,0x51, 0x5,0x41,0x4e, 0x5,0x41,0x47, + 0x6,0x56,0x31, 0x6,0x4c,0x58, 0x6,0x56,0x35, 0x6,0x56,0x39, + 0xf,0x44,0x44, 0xf,0x44,0x46, 0xf,0x44,0x47, 0xf,0x44,0x48, + 0xf,0x44,0x49, 0xf,0x44,0x4a, 0xf,0x44,0x4b, 0xf,0x44,0x4c, + 0xf,0x44,0x4d, 0xf,0x44,0x4e, 0xf,0x44,0x4f, 0xf,0x44,0x50, + 0x6,0x56,0x2f, 0xf,0x41,0x3e, 0x5,0x48,0x45, 0x5,0x41,0x56, + 0x4,0x45,0x6c, 0x5,0x48,0x43, 0x6,0x60,0x27, 0x4,0x45,0x67, + 0x6,0x5f,0x7c, 0x6,0x5f,0x7d, 0x5,0x48,0x3c, 0x5,0x48,0x3b, + 0x5,0x48,0x42, 0x4,0x45,0x6f, 0x6,0x60,0x28, 0x5,0x48,0x40, + 0x6,0x60,0x26, 0x5,0x48,0x38, 0x5,0x48,0x39, 0x6,0x60,0x25, + 0x6,0x60,0x21, 0x5,0x48,0x3a, 0x5,0x48,0x41, 0x5,0x48,0x37, + 0x5,0x48,0x3d, 0x6,0x60,0x22, 0x5,0x41,0x4a, 0x5,0x48,0x47, + 0x6,0x5f,0x7e, 0x5,0x48,0x3e, 0x6,0x60,0x24, 0x5,0x48,0x3f, + 0x4,0x45,0x71, 0x5,0x48,0x44, 0xf,0x4a,0x6b, 0xf,0x4a,0x6c, + 0xf,0x4a,0x6d, 0xf,0x4a,0x6e, 0xf,0x4a,0x6f, 0xf,0x4a,0x70, + 0xf,0x4a,0x73, 0xf,0x4a,0x74, 0xf,0x4a,0x75, 0xf,0x4a,0x76, + 0xf,0x4a,0x77, 0xf,0x4a,0x78, 0xf,0x4a,0x79, 0xf,0x4a,0x7a, + 0xf,0x4a,0x72, 0xf,0x4a,0x71, 0x5,0x4f,0x3a, 0x7,0x26,0x49, + 0x7,0x26,0x4b, 0x5,0x4f,0x44, 0x4,0x4c,0x2f, 0x5,0x4f,0x33, + 0x7,0x26,0x51, 0x7,0x26,0x4a, 0x5,0x4f,0x3e, 0x4,0x4b,0x71, + 0x4,0x4b,0x6f, 0x5,0x4f,0x41, 0x5,0x4f,0x2f, 0x5,0x4f,0x34, + 0x5,0x4f,0x43, 0x7,0x26,0x42, 0x5,0x4f,0x40, 0x5,0x4f,0x31, + 0x4,0x52,0x40, 0x5,0x4f,0x39, 0x5,0x4f,0x42, 0x4,0x4b,0x72, + 0x4,0x4c,0x29, 0x4,0x4c,0x23, 0x4,0x4b,0x7d, 0x5,0x4f,0x38, + 0x5,0x4f,0x37, 0x5,0x4f,0x3c, 0x7,0x26,0x4e, 0x5,0x48,0x48, + 0x5,0x4f,0x35, 0x7,0x26,0x50, 0x7,0x26,0x47, 0x7,0x26,0x44, + 0x5,0x4f,0x3f, 0x7,0x26,0x40, 0x7,0x26,0x53, 0x4,0x4c,0x24, + 0x7,0x26,0x4f, 0x4,0x4b,0x7c, 0x7,0x26,0x4c, 0x5,0x4f,0x3d, + 0x7,0x26,0x45, 0x7,0x26,0x43, 0x5,0x4f,0x2e, 0x7,0x26,0x48, + 0x7,0x26,0x46, 0x5,0x4f,0x46, 0xf,0x50,0x78, 0x7,0x26,0x52, + 0xf,0x50,0x77, 0xf,0x50,0x7a, 0xf,0x50,0x7b, 0xf,0x50,0x7c, + 0xf,0x50,0x7d, 0xf,0x50,0x7e, 0xf,0x51,0x22, 0xf,0x51,0x24, + 0xf,0x51,0x29, 0xf,0x51,0x25, 0xf,0x51,0x26, 0xf,0x51,0x27, + 0xf,0x51,0x2a, 0x5,0x56,0x64, 0x4,0x52,0x41, 0x4,0x52,0x3e, + 0x5,0x56,0x58, 0x5,0x56,0x5e, 0x5,0x56,0x66, 0x7,0x31,0x2a, + 0x5,0x56,0x5c, 0x4,0x52,0x2e, 0x5,0x56,0x5d, 0x4,0x52,0x2c, + 0x5,0x56,0x68, 0x7,0x26,0x41, 0x7,0x31,0x25, 0x4,0x52,0x32, + 0x5,0x56,0x67, 0x4,0x52,0x31, 0x7,0x31,0x29, 0x4,0x52,0x3c, + 0x7,0x30,0x7e, 0x7,0x31,0x26, 0x4,0x52,0x30, 0x5,0x56,0x60, + 0x7,0x30,0x7b, 0x4,0x52,0x3f, 0x5,0x56,0x5f, 0x5,0x56,0x59, + 0x7,0x30,0x7a, 0x7,0x31,0x28, 0x4,0x52,0x2a, 0x5,0x56,0x57, + 0x7,0x31,0x24, 0x4,0x52,0x35, 0x5,0x56,0x65, 0x7,0x30,0x7d, + 0x5,0x56,0x62, 0x4,0x52,0x33, 0x7,0x31,0x2b, 0x7,0x30,0x75, + 0x7,0x31,0x27, 0x5,0x4f,0x30, 0x5,0x56,0x63, 0x5,0x56,0x5a, + 0x7,0x30,0x78, 0x7,0x31,0x23, 0x7,0x30,0x76, 0x5,0x56,0x61, + 0xf,0x56,0x72, 0x5,0x56,0x5b, 0x7,0x30,0x7c, 0x7,0x30,0x77, + 0x7,0x31,0x22, 0xf,0x56,0x5d, 0xf,0x56,0x5e, 0xf,0x56,0x60, + 0xf,0x56,0x61, 0xf,0x56,0x62, 0xf,0x56,0x63, 0xf,0x56,0x64, + 0xf,0x56,0x65, 0xf,0x56,0x66, 0xf,0x56,0x67, 0xf,0x56,0x68, + 0xf,0x56,0x69, 0xf,0x56,0x6a, 0xf,0x56,0x6b, 0xf,0x56,0x6c, + 0xf,0x56,0x6d, 0xf,0x56,0x6e, 0xf,0x56,0x6f, 0xf,0x56,0x70, + 0xf,0x56,0x71, 0xf,0x56,0x73, 0x7,0x30,0x79, 0xf,0x50,0x79, + 0x5,0x5d,0x24, 0x5,0x5d,0x21, 0x4,0x57,0x5d, 0x5,0x5c,0x75, + 0x5,0x5d,0x2d, 0x5,0x5c,0x79, 0x4,0x57,0x5c, 0x4,0x57,0x63, + 0x4,0x57,0x67, 0x7,0x3a,0x2c, 0x5,0x5d,0x2b, 0x4,0x57,0x60, + 0x5,0x5d,0x22, 0x5,0x5c,0x70, 0x5,0x5d,0x23, 0x5,0x5c,0x72, + 0x5,0x5d,0x31, 0x5,0x5c,0x7b, 0x5,0x5d,0x2a, 0x5,0x5c,0x77, + 0x5,0x5d,0x34, 0x7,0x3a,0x24, 0x5,0x5c,0x76, 0x5,0x5c,0x7c, + 0x5,0x5d,0x26, 0x4,0x57,0x64, 0x5,0x5d,0x27, 0x7,0x3a,0x29, + 0x5,0x63,0x42, 0x5,0x5d,0x2c, 0x5,0x5c,0x7a, 0x7,0x3a,0x2f, + 0x7,0x3a,0x28, 0x5,0x5c,0x6f, 0x5,0x5d,0x32, 0x5,0x5d,0x29, + 0x5,0x5c,0x73, 0x7,0x3a,0x2b, 0x5,0x5d,0x2e, 0x5,0x5c,0x71, + 0x5,0x5c,0x6e, 0x5,0x5d,0x28, 0x4,0x57,0x66, 0x4,0x5c,0x3c, + 0x5,0x5d,0x33, 0x5,0x5c,0x78, 0x5,0x5d,0x2f, 0x5,0x5d,0x25, + 0x7,0x31,0x21, 0x5,0x5c,0x74, 0x7,0x3a,0x27, 0x7,0x3a,0x26, + 0x7,0x3a,0x25, 0x7,0x3a,0x2d, 0xf,0x5b,0x5d, 0xf,0x5b,0x5e, + 0xf,0x5b,0x60, 0xf,0x5b,0x61, 0xf,0x5b,0x62, 0xf,0x5b,0x63, + 0xf,0x5b,0x64, 0xf,0x5b,0x66, 0xf,0x5b,0x67, 0xf,0x5b,0x68, + 0xf,0x5b,0x69, 0x7,0x3a,0x2a, 0x7,0x3a,0x2e, 0x4,0x57,0x68, + 0xf,0x5b,0x65, 0x4,0x57,0x61, 0x5,0x63,0x4b, 0x5,0x63,0x47, + 0x5,0x5d,0x35, 0x4,0x5c,0x52, 0x5,0x63,0x45, 0x5,0x63,0x38, + 0x5,0x63,0x33, 0x4,0x5c,0x47, 0x5,0x63,0x4a, 0x5,0x63,0x40, + 0x3,0x58,0x4f, 0x5,0x63,0x2e, 0x4,0x5c,0x4e, 0x4,0x5c,0x45, + 0x5,0x63,0x43, 0x5,0x63,0x39, 0x5,0x63,0x4c, 0x4,0x5c,0x3d, + 0x7,0x41,0x3b, 0x5,0x63,0x46, 0x5,0x63,0x30, 0x5,0x63,0x37, + 0x4,0x5c,0x3e, 0x4,0x5c,0x3f, 0x5,0x63,0x48, 0x7,0x41,0x39, + 0x5,0x63,0x35, 0x5,0x63,0x32, 0x5,0x63,0x3f, 0x7,0x41,0x35, + 0x5,0x63,0x2c, 0x7,0x41,0x36, 0x4,0x5c,0x41, 0x7,0x41,0x33, + 0x4,0x5c,0x53, 0x5,0x63,0x3e, 0x7,0x41,0x38, 0x5,0x63,0x3d, + 0x7,0x41,0x3a, 0x7,0x41,0x3e, 0x7,0x41,0x34, 0x5,0x63,0x31, + 0x4,0x5c,0x4d, 0x5,0x63,0x36, 0x5,0x63,0x3a, 0x5,0x63,0x44, + 0x5,0x63,0x49, 0x5,0x63,0x3c, 0x5,0x63,0x2d, 0x7,0x41,0x42, + 0x7,0x41,0x41, 0x5,0x63,0x3b, 0x5,0x63,0x2b, 0x5,0x63,0x2f, + 0x7,0x41,0x32, 0x7,0x41,0x37, 0xf,0x5f,0x76, 0xf,0x5f,0x77, + 0xf,0x5f,0x78, 0xf,0x5f,0x79, 0xf,0x5f,0x7a, 0xf,0x5f,0x7b, + 0xf,0x5f,0x7c, 0xf,0x5f,0x7d, 0xf,0x5f,0x7e, 0xf,0x60,0x21, + 0xf,0x60,0x23, 0xf,0x60,0x24, 0xf,0x60,0x25, 0x7,0x41,0x40, + 0x7,0x41,0x3d, 0xf,0x5b,0x6a, 0xf,0x63,0x36, 0xf,0x63,0x37, + 0xf,0x60,0x22, 0x5,0x68,0x6a, 0x5,0x68,0x6f, 0x7,0x48,0x4e, + 0x4,0x60,0x59, 0x7,0x48,0x4c, 0x5,0x68,0x63, 0x4,0x60,0x54, + 0x4,0x60,0x55, 0x4,0x60,0x51, 0x5,0x68,0x69, 0x4,0x60,0x4f, + 0x4,0x60,0x50, 0x7,0x48,0x48, 0x4,0x60,0x52, 0x5,0x68,0x62, + 0x4,0x60,0x58, 0x4,0x60,0x4d, 0x7,0x48,0x47, 0x5,0x68,0x6d, + 0x5,0x68,0x68, 0x5,0x68,0x70, 0x5,0x68,0x6c, 0x5,0x68,0x6b, + 0x5,0x68,0x65, 0x5,0x68,0x64, 0x5,0x68,0x67, 0x7,0x48,0x46, + 0x7,0x48,0x4a, 0x5,0x68,0x61, 0x5,0x68,0x71, 0x7,0x48,0x49, + 0xf,0x63,0x31, 0xf,0x63,0x33, 0xf,0x63,0x34, 0xf,0x63,0x35, + 0xf,0x63,0x38, 0xf,0x63,0x39, 0xf,0x63,0x3a, 0xf,0x63,0x3b, + 0xf,0x63,0x3c, 0x7,0x48,0x4b, 0x7,0x48,0x4d, 0x5,0x6c,0x7c, + 0x5,0x6c,0x7b, 0x5,0x6c,0x76, 0x4,0x60,0x57, 0x5,0x6c,0x74, + 0x7,0x4e,0x6c, 0x5,0x6c,0x7a, 0x4,0x63,0x7d, 0x7,0x4e,0x74, + 0x4,0x64,0x22, 0x5,0x6c,0x78, 0x5,0x6c,0x73, 0x4,0x66,0x70, + 0x7,0x4e,0x6a, 0x5,0x6c,0x6f, 0x5,0x6c,0x75, 0x5,0x6c,0x71, + 0x7,0x4e,0x69, 0x7,0x4e,0x75, 0x5,0x6c,0x77, 0x7,0x4e,0x6d, + 0x7,0x4e,0x6e, 0x5,0x6c,0x72, 0x7,0x4e,0x6f, 0x7,0x54,0x38, + 0x7,0x4e,0x71, 0x7,0x4e,0x70, 0x7,0x4e,0x72, 0x7,0x4e,0x73, + 0xf,0x65,0x68, 0xf,0x65,0x69, 0x7,0x4e,0x6b, 0x5,0x70,0x64, + 0x5,0x70,0x68, 0x5,0x70,0x69, 0x4,0x66,0x71, 0x4,0x66,0x6b, + 0x5,0x70,0x66, 0x5,0x70,0x6b, 0x7,0x54,0x2f, 0x5,0x70,0x5e, + 0x5,0x70,0x63, 0x5,0x70,0x60, 0x4,0x64,0x21, 0x5,0x70,0x67, + 0x5,0x70,0x5f, 0x5,0x6c,0x70, 0x7,0x54,0x35, 0x5,0x70,0x6a, + 0x5,0x70,0x5d, 0x7,0x54,0x31, 0x5,0x70,0x65, 0x4,0x69,0x27, + 0x5,0x70,0x6c, 0x7,0x54,0x36, 0x7,0x54,0x30, 0x7,0x54,0x34, + 0xf,0x68,0x23, 0xf,0x68,0x24, 0xf,0x68,0x25, 0xf,0x68,0x26, + 0xf,0x68,0x27, 0xf,0x68,0x28, 0xf,0x68,0x29, 0x7,0x54,0x33, + 0x7,0x54,0x39, 0x7,0x54,0x32, 0x7,0x58,0x55, 0x4,0x69,0x24, + 0x4,0x69,0x23, 0x5,0x73,0x70, 0x5,0x73,0x6e, 0x5,0x70,0x62, + 0x5,0x73,0x71, 0x7,0x58,0x52, 0x5,0x70,0x6d, 0x7,0x58,0x51, + 0x5,0x73,0x74, 0x4,0x69,0x25, 0x5,0x73,0x6d, 0x7,0x58,0x54, + 0x7,0x54,0x37, 0x5,0x73,0x76, 0x5,0x73,0x73, 0x5,0x73,0x6f, + 0x5,0x73,0x75, 0x5,0x73,0x72, 0x7,0x58,0x56, 0xf,0x69,0x5f, + 0xf,0x69,0x60, 0xf,0x69,0x61, 0xf,0x69,0x62, 0x7,0x58,0x53, + 0x7,0x59,0x34, 0x4,0x6a,0x5e, 0x5,0x76,0x33, 0x7,0x5c,0x31, + 0x5,0x76,0x34, 0x4,0x6a,0x5f, 0x4,0x6a,0x60, 0x4,0x6a,0x62, + 0x7,0x5c,0x30, 0x5,0x76,0x36, 0x7,0x5c,0x32, 0x5,0x76,0x35, + 0x7,0x5c,0x36, 0x7,0x5c,0x35, 0xf,0x6a,0x69, 0x7,0x5c,0x33, + 0x7,0x5c,0x37, 0x7,0x5c,0x34, 0x5,0x77,0x72, 0x7,0x5f,0x2b, + 0x7,0x5f,0x2e, 0x5,0x77,0x74, 0x5,0x77,0x75, 0x7,0x5f,0x2d, + 0x5,0x76,0x37, 0x7,0x5f,0x2c, 0x7,0x5f,0x2a, 0x5,0x77,0x73, + 0x7,0x5f,0x31, 0x4,0x6b,0x77, 0xf,0x6b,0x5a, 0xf,0x6b,0x5b, + 0xf,0x6b,0x5c, 0x7,0x5f,0x2f, 0x5,0x79,0x35, 0x7,0x61,0x2c, + 0x7,0x61,0x2e, 0x7,0x61,0x31, 0x4,0x6c,0x79, 0x7,0x61,0x2f, + 0x7,0x5f,0x30, 0x7,0x61,0x2d, 0x5,0x7a,0x31, 0x5,0x7a,0x2f, + 0x5,0x7a,0x30, 0x7,0x61,0x30, 0xf,0x6c,0x4f, 0xf,0x6c,0x4d, + 0x7,0x63,0x5e, 0x7,0x63,0x5f, 0xf,0x6c,0x68, 0x7,0x63,0x60, + 0x5,0x7b,0x44, 0x5,0x7b,0x64, 0xf,0x6d,0x27, 0x7,0x64,0x54, + 0x4,0x6e,0x4e, 0x5,0x7b,0x7c, 0x5,0x7c,0x2b, 0x5,0x24,0x71, + 0xf,0x25,0x27, 0x5,0x27,0x4e, 0x6,0x2d,0x51, 0xf,0x28,0x45, + 0x6,0x33,0x61, 0x5,0x2b,0x22, 0x6,0x33,0x60, 0x5,0x2b,0x23, + 0xf,0x2c,0x7e, 0xf,0x2d,0x22, 0x6,0x3a,0x52, 0x5,0x2f,0x54, + 0x6,0x3a,0x56, 0x5,0x2f,0x55, 0x6,0x3a,0x54, 0x5,0x2f,0x56, + 0xf,0x31,0x6b, 0xf,0x31,0x6c, 0xf,0x31,0x6d, 0xf,0x31,0x6e, + 0x6,0x3a,0x53, 0x6,0x3a,0x55, 0x4,0x33,0x7e, 0x5,0x34,0x55, + 0x4,0x34,0x24, 0x5,0x34,0x54, 0x4,0x34,0x21, 0x5,0x34,0x58, + 0x5,0x34,0x53, 0x5,0x34,0x56, 0x5,0x34,0x57, 0x4,0x34,0x23, + 0x5,0x34,0x5a, 0x5,0x34,0x52, 0x6,0x42,0x7d, 0x6,0x4c,0x63, + 0x6,0x43,0x21, 0xf,0x37,0x50, 0xf,0x37,0x51, 0x6,0x42,0x7e, + 0xf,0x37,0x52, 0x5,0x3b,0x26, 0x4,0x39,0x7a, 0x6,0x4c,0x61, + 0x6,0x4c,0x5e, 0x6,0x4c,0x65, 0x5,0x3b,0x28, 0x4,0x3a,0x21, + 0x6,0x4c,0x64, 0x6,0x4c,0x5f, 0xf,0x3d,0x7c, 0xf,0x3d,0x7e, + 0xf,0x3e,0x22, 0xf,0x3d,0x7b, 0x6,0x4c,0x62, 0x5,0x41,0x57, + 0x4,0x3f,0x68, 0x6,0x56,0x3d, 0x5,0x41,0x59, 0x5,0x41,0x5a, + 0x5,0x3b,0x27, 0x5,0x41,0x58, 0x6,0x56,0x3f, 0x6,0x56,0x3e, + 0x4,0x39,0x7e, 0x5,0x41,0x5b, 0x5,0x41,0x5d, 0x5,0x41,0x5c, + 0x6,0x56,0x41, 0xf,0x44,0x52, 0xf,0x44,0x53, 0xf,0x44,0x55, + 0xf,0x44,0x56, 0x6,0x56,0x3b, 0xf,0x44,0x54, 0x6,0x56,0x40, + 0xf,0x44,0x51, 0x6,0x60,0x2d, 0x5,0x48,0x4a, 0x6,0x60,0x2b, + 0x6,0x60,0x2e, 0x5,0x48,0x4c, 0x4,0x45,0x73, 0x6,0x56,0x3c, + 0x6,0x60,0x33, 0x6,0x60,0x32, 0x5,0x48,0x4b, 0x6,0x60,0x30, + 0x5,0x48,0x49, 0x5,0x48,0x4d, 0xf,0x4a,0x7c, 0xf,0x4a,0x7d, + 0xf,0x4a,0x7e, 0xf,0x4b,0x21, 0xf,0x4b,0x22, 0xf,0x4b,0x23, + 0xf,0x4b,0x25, 0xf,0x4b,0x26, 0xf,0x4b,0x28, 0xf,0x4b,0x29, + 0xf,0x4b,0x2a, 0xf,0x4b,0x2d, 0x6,0x60,0x2f, 0xf,0x4b,0x2c, + 0x6,0x60,0x29, 0x6,0x60,0x2a, 0xf,0x4b,0x24, 0x7,0x26,0x58, + 0x7,0x26,0x54, 0x4,0x4c,0x36, 0x5,0x4f,0x4b, 0x7,0x26,0x55, + 0x7,0x26,0x59, 0x4,0x4c,0x33, 0x5,0x4f,0x4a, 0x5,0x4f,0x4c, + 0x5,0x4f,0x50, 0x5,0x48,0x4e, 0x5,0x4f,0x4f, 0x5,0x4f,0x4d, + 0x7,0x26,0x5b, 0x7,0x26,0x56, 0x5,0x4f,0x49, 0x4,0x4c,0x34, + 0x5,0x4f,0x4e, 0x4,0x4c,0x32, 0x7,0x26,0x5a, 0x5,0x4f,0x48, + 0x5,0x4f,0x47, 0xf,0x51,0x2b, 0xf,0x51,0x2c, 0xf,0x51,0x2d, + 0xf,0x51,0x2f, 0x5,0x56,0x6e, 0x5,0x56,0x6c, 0x5,0x5d,0x3c, + 0x4,0x52,0x43, 0x5,0x56,0x6b, 0x4,0x52,0x42, 0x7,0x31,0x2f, + 0x7,0x31,0x30, 0x5,0x56,0x6f, 0x7,0x31,0x2c, 0x5,0x56,0x6a, + 0x5,0x56,0x6d, 0x5,0x56,0x70, 0xf,0x56,0x74, 0xf,0x56,0x75, + 0x7,0x31,0x2e, 0x5,0x5d,0x36, 0x5,0x5d,0x38, 0x7,0x3a,0x30, + 0x5,0x5d,0x39, 0x5,0x5d,0x37, 0x5,0x5d,0x3a, 0x5,0x5d,0x3b, + 0x7,0x3a,0x32, 0x7,0x3a,0x34, 0x7,0x3a,0x35, 0x7,0x3a,0x31, + 0xf,0x5b,0x6b, 0xf,0x5b,0x6c, 0xf,0x5b,0x6d, 0xf,0x5b,0x6f, + 0xf,0x5b,0x70, 0xf,0x5b,0x71, 0xf,0x5b,0x72, 0x4,0x57,0x6c, + 0x5,0x63,0x52, 0x7,0x41,0x45, 0x4,0x5c,0x57, 0x5,0x63,0x53, + 0x5,0x63,0x4f, 0x7,0x48,0x56, 0x5,0x63,0x51, 0x5,0x5d,0x3d, + 0x7,0x41,0x46, 0x5,0x63,0x50, 0x7,0x4e,0x78, 0x5,0x63,0x4d, + 0x7,0x41,0x43, 0xf,0x60,0x27, 0xf,0x60,0x28, 0xf,0x60,0x29, + 0xf,0x5b,0x6e, 0x5,0x68,0x74, 0x7,0x48,0x4f, 0x7,0x48,0x50, + 0x4,0x60,0x5e, 0x4,0x60,0x5c, 0x5,0x68,0x73, 0x5,0x70,0x6e, + 0x7,0x48,0x52, 0x7,0x48,0x53, 0x7,0x41,0x48, 0x4,0x60,0x5f, + 0x4,0x5c,0x58, 0x5,0x68,0x75, 0x7,0x41,0x47, 0x5,0x68,0x72, + 0xf,0x63,0x3e, 0x7,0x48,0x51, 0x7,0x48,0x54, 0x7,0x48,0x55, + 0xf,0x63,0x3f, 0x7,0x4e,0x77, 0x5,0x6c,0x7e, 0x7,0x4e,0x76, + 0xf,0x65,0x6a, 0xf,0x65,0x6b, 0x4,0x66,0x73, 0x4,0x66,0x72, + 0x5,0x70,0x6f, 0x7,0x54,0x3d, 0x7,0x54,0x3c, 0xf,0x68,0x2a, + 0xf,0x68,0x2b, 0x7,0x54,0x3b, 0x5,0x73,0x77, 0x7,0x58,0x57, + 0x5,0x73,0x78, 0x4,0x6a,0x63, 0x4,0x6a,0x64, 0x7,0x5c,0x38, + 0xf,0x6a,0x6a, 0x5,0x76,0x38, 0x7,0x5c,0x39, 0x7,0x5f,0x32, + 0x5,0x77,0x77, 0x5,0x77,0x76, 0x5,0x79,0x38, 0x7,0x61,0x33, + 0x5,0x79,0x37, 0x5,0x79,0x36, 0x7,0x61,0x32, 0x7,0x62,0x4c, + 0x4,0x6d,0x5d, 0x5,0x7a,0x32, 0x7,0x62,0x4b, 0x5,0x7a,0x33, + 0x7,0x63,0x62, 0x7,0x63,0x61, 0x5,0x7b,0x7d, 0x7,0x66,0x36, + 0x5,0x27,0x4f, 0x6,0x2d,0x52, 0x5,0x27,0x50, 0xf,0x28,0x47, + 0xf,0x28,0x48, 0x5,0x27,0x51, 0x5,0x2b,0x26, 0x6,0x33,0x62, + 0x6,0x33,0x65, 0x5,0x2b,0x24, 0x5,0x2b,0x25, 0x6,0x33,0x67, + 0x6,0x33,0x63, 0x5,0x2b,0x27, 0xf,0x2d,0x23, 0x6,0x33,0x68, + 0x6,0x3a,0x5b, 0x6,0x3a,0x57, 0x4,0x2e,0x79, 0x6,0x3a,0x63, + 0x4,0x2e,0x7b, 0x6,0x3a,0x5d, 0x6,0x3a,0x5c, 0x6,0x3a,0x5f, + 0x5,0x2f,0x5a, 0x4,0x2e,0x7a, 0x4,0x2f,0x24, 0x6,0x3a,0x64, + 0x6,0x3a,0x59, 0x4,0x2f,0x23, 0x6,0x3a,0x5e, 0x4,0x2f,0x22, + 0x6,0x3a,0x60, 0x6,0x3a,0x58, 0x5,0x2f,0x59, 0x6,0x3a,0x61, + 0x5,0x2f,0x58, 0x5,0x2f,0x57, 0x6,0x3a,0x5a, 0xf,0x31,0x71, + 0xf,0x31,0x72, 0xf,0x31,0x73, 0xf,0x31,0x74, 0xf,0x31,0x75, + 0xf,0x31,0x76, 0xf,0x31,0x77, 0x4,0x2f,0x26, 0x6,0x3a,0x62, + 0x5,0x34,0x5f, 0x5,0x34,0x5d, 0x4,0x34,0x32, 0x4,0x34,0x28, + 0x4,0x34,0x2a, 0x6,0x43,0x28, 0x4,0x34,0x2f, 0x5,0x34,0x5e, + 0x4,0x34,0x31, 0x6,0x43,0x29, 0x5,0x34,0x5b, 0x4,0x34,0x2c, + 0x6,0x43,0x2b, 0x6,0x43,0x2a, 0x6,0x43,0x25, 0x6,0x43,0x23, + 0x6,0x43,0x24, 0x5,0x34,0x5c, 0xf,0x37,0x58, 0xf,0x37,0x59, + 0xf,0x37,0x5a, 0xf,0x37,0x5b, 0x6,0x43,0x27, 0x6,0x43,0x2c, + 0xf,0x37,0x55, 0x5,0x3b,0x31, 0x5,0x3b,0x30, 0x5,0x3b,0x2e, + 0x5,0x3b,0x32, 0x6,0x4c,0x6d, 0x4,0x3a,0x23, 0x6,0x4c,0x66, + 0x6,0x4c,0x6c, 0x4,0x3a,0x22, 0x4,0x3a,0x24, 0x6,0x4c,0x6e, + 0x6,0x43,0x26, 0x6,0x4c,0x67, 0x6,0x4c,0x70, 0x6,0x4c,0x68, + 0x5,0x3b,0x2d, 0x6,0x4c,0x6a, 0x6,0x4c,0x69, 0x6,0x4c,0x6f, + 0x5,0x3b,0x2a, 0x5,0x3b,0x29, 0x5,0x3b,0x2b, 0xf,0x3e,0x25, + 0xf,0x3e,0x26, 0xf,0x3e,0x27, 0xf,0x3e,0x28, 0xf,0x3e,0x29, + 0xf,0x3e,0x2a, 0xf,0x3e,0x2b, 0xf,0x3e,0x2c, 0xf,0x3e,0x2d, + 0xf,0x3e,0x2e, 0x6,0x4c,0x6b, 0x5,0x3b,0x2f, 0x6,0x56,0x4b, + 0x6,0x56,0x42, 0x5,0x41,0x5f, 0x5,0x41,0x5e, 0x4,0x3f,0x6c, + 0x6,0x56,0x44, 0x4,0x3f,0x6d, 0x6,0x56,0x48, 0x6,0x56,0x45, + 0x4,0x3f,0x69, 0x5,0x41,0x61, 0x5,0x41,0x60, 0x6,0x56,0x43, + 0x6,0x56,0x49, 0x4,0x3a,0x25, 0x4,0x3f,0x6b, 0x6,0x56,0x46, + 0x5,0x41,0x62, 0x6,0x56,0x4c, 0x6,0x56,0x4d, 0x4,0x3f,0x72, + 0x6,0x56,0x4a, 0xf,0x44,0x57, 0xf,0x44,0x58, 0xf,0x44,0x59, + 0xf,0x44,0x5a, 0xf,0x44,0x5b, 0xf,0x44,0x5c, 0xf,0x44,0x5d, + 0xf,0x44,0x5e, 0xf,0x44,0x5f, 0xf,0x44,0x60, 0xf,0x44,0x61, + 0xf,0x44,0x62, 0x6,0x56,0x47, 0x4,0x3f,0x70, 0x4,0x45,0x78, + 0x5,0x48,0x50, 0x4,0x45,0x76, 0x5,0x48,0x52, 0x6,0x60,0x3f, + 0x6,0x60,0x3e, 0x5,0x48,0x56, 0x4,0x45,0x7a, 0x5,0x48,0x55, + 0x4,0x45,0x77, 0x6,0x60,0x39, 0x6,0x60,0x43, 0x6,0x60,0x42, + 0x6,0x60,0x36, 0x4,0x45,0x7d, 0x5,0x48,0x4f, 0x5,0x41,0x63, + 0x6,0x60,0x41, 0x5,0x48,0x51, 0x6,0x60,0x3c, 0x6,0x60,0x34, + 0x5,0x48,0x53, 0x5,0x48,0x57, 0x6,0x60,0x40, 0x6,0x60,0x3b, + 0x4,0x46,0x22, 0x6,0x60,0x38, 0xf,0x4b,0x2e, 0xf,0x4b,0x2f, + 0xf,0x4b,0x30, 0xf,0x4b,0x31, 0xf,0x4b,0x32, 0xf,0x4b,0x33, + 0xf,0x4b,0x34, 0xf,0x4b,0x35, 0xf,0x4b,0x36, 0xf,0x4b,0x37, + 0x6,0x60,0x35, 0x6,0x60,0x37, 0x6,0x60,0x3d, 0x4,0x4c,0x38, + 0x4,0x4c,0x43, 0x7,0x26,0x60, 0x4,0x4c,0x42, 0x4,0x4c,0x3b, + 0x5,0x4f,0x5b, 0x5,0x4f,0x59, 0x4,0x52,0x48, 0x5,0x4f,0x58, + 0x5,0x4f,0x5d, 0x5,0x4f,0x55, 0x4,0x4c,0x46, 0x5,0x4f,0x5a, + 0x7,0x26,0x6c, 0x7,0x26,0x5e, 0x7,0x26,0x64, 0x5,0x4f,0x5c, + 0x5,0x4f,0x52, 0x7,0x26,0x61, 0x7,0x26,0x66, 0x5,0x4f,0x57, + 0x4,0x4c,0x41, 0x4,0x4c,0x39, 0x7,0x26,0x5d, 0x7,0x26,0x65, + 0x7,0x26,0x5c, 0x7,0x26,0x67, 0x6,0x60,0x3a, 0x7,0x26,0x6d, + 0x7,0x26,0x6b, 0x5,0x4f,0x51, 0x5,0x4f,0x56, 0x5,0x4f,0x5e, + 0xf,0x51,0x30, 0xf,0x51,0x31, 0xf,0x51,0x32, 0xf,0x51,0x33, + 0xf,0x51,0x34, 0xf,0x51,0x35, 0xf,0x51,0x38, 0xf,0x51,0x39, + 0xf,0x51,0x3a, 0xf,0x51,0x3d, 0xf,0x51,0x3e, 0xf,0x51,0x3f, + 0x7,0x26,0x62, 0x7,0x26,0x68, 0x7,0x26,0x5f, 0x7,0x26,0x63, + 0x7,0x31,0x46, 0x4,0x52,0x46, 0x7,0x31,0x43, 0x7,0x31,0x44, + 0x4,0x52,0x4a, 0x7,0x31,0x40, 0x7,0x31,0x3d, 0x5,0x56,0x74, + 0x5,0x56,0x76, 0x7,0x31,0x31, 0x7,0x31,0x42, 0x7,0x31,0x32, + 0x7,0x3a,0x36, 0x7,0x31,0x33, 0x7,0x31,0x36, 0x5,0x56,0x75, + 0x5,0x56,0x77, 0x5,0x56,0x73, 0x5,0x5d,0x45, 0x4,0x52,0x45, + 0x5,0x56,0x71, 0x5,0x56,0x72, 0x4,0x52,0x4b, 0x7,0x31,0x3a, + 0x7,0x31,0x37, 0x7,0x31,0x38, 0x7,0x31,0x41, 0x4,0x52,0x4d, + 0x7,0x31,0x35, 0x5,0x56,0x79, 0x7,0x31,0x34, 0x7,0x31,0x45, + 0x7,0x31,0x3b, 0x5,0x56,0x78, 0x7,0x31,0x3f, 0x7,0x31,0x3e, + 0x7,0x31,0x39, 0x7,0x31,0x3c, 0xf,0x56,0x76, 0xf,0x56,0x77, + 0xf,0x56,0x78, 0xf,0x56,0x79, 0xf,0x56,0x7a, 0xf,0x56,0x7b, + 0xf,0x56,0x7c, 0xf,0x56,0x7d, 0xf,0x56,0x7e, 0x7,0x3a,0x44, + 0x7,0x3a,0x43, 0x5,0x5d,0x43, 0x5,0x5d,0x40, 0x4,0x57,0x71, + 0x7,0x3a,0x37, 0x5,0x5d,0x41, 0x7,0x3a,0x42, 0x4,0x57,0x6f, + 0x7,0x3a,0x3a, 0x5,0x5d,0x44, 0x5,0x5d,0x3e, 0x7,0x3a,0x3e, + 0x7,0x3a,0x3b, 0x7,0x3a,0x3c, 0x7,0x3a,0x40, 0x5,0x5d,0x42, + 0x7,0x3a,0x41, 0x7,0x3a,0x3d, 0x5,0x5d,0x47, 0xf,0x5b,0x73, + 0xf,0x5b,0x74, 0xf,0x5b,0x75, 0xf,0x5b,0x77, 0xf,0x5b,0x78, + 0xf,0x5b,0x79, 0xf,0x5b,0x7a, 0xf,0x5b,0x7b, 0xf,0x5b,0x7c, + 0xf,0x5b,0x7d, 0xf,0x5b,0x7e, 0xf,0x5c,0x21, 0xf,0x5c,0x22, + 0x7,0x3a,0x3f, 0x7,0x3a,0x38, 0x4,0x5c,0x64, 0x4,0x5c,0x5c, + 0x7,0x41,0x4e, 0x4,0x5c,0x63, 0x4,0x5c,0x5d, 0x7,0x41,0x4d, + 0x7,0x41,0x54, 0x4,0x5c,0x61, 0x4,0x57,0x70, 0x7,0x41,0x49, + 0x5,0x63,0x55, 0x5,0x63,0x58, 0x5,0x63,0x57, 0x7,0x41,0x4b, + 0x7,0x41,0x51, 0x5,0x63,0x56, 0x7,0x41,0x4a, 0x7,0x41,0x4f, + 0x7,0x41,0x52, 0x7,0x41,0x4c, 0x7,0x41,0x57, 0x7,0x41,0x55, + 0x7,0x41,0x50, 0x7,0x41,0x5b, 0x5,0x63,0x5a, 0x7,0x41,0x56, + 0xf,0x60,0x2a, 0xf,0x60,0x2b, 0xf,0x60,0x2c, 0xf,0x60,0x2d, + 0xf,0x60,0x2e, 0xf,0x60,0x2f, 0xf,0x60,0x30, 0xf,0x60,0x31, + 0xf,0x60,0x32, 0x5,0x63,0x59, 0x7,0x41,0x5c, 0x7,0x41,0x5a, + 0x7,0x41,0x58, 0x7,0x41,0x53, 0x4,0x60,0x64, 0x4,0x60,0x65, + 0x7,0x48,0x5f, 0x4,0x60,0x69, 0x7,0x48,0x67, 0x5,0x68,0x76, + 0x7,0x48,0x64, 0x4,0x60,0x67, 0x7,0x48,0x66, 0x4,0x60,0x6b, + 0x5,0x68,0x79, 0x4,0x60,0x60, 0x5,0x68,0x7a, 0x7,0x48,0x61, + 0x7,0x47,0x4b, 0x4,0x60,0x61, 0x7,0x48,0x5d, 0x5,0x68,0x77, + 0x7,0x48,0x63, 0x7,0x48,0x5b, 0x7,0x48,0x62, 0x5,0x68,0x78, + 0x7,0x48,0x59, 0x7,0x48,0x5a, 0x7,0x48,0x60, 0x7,0x48,0x5e, + 0xf,0x63,0x40, 0xf,0x63,0x41, 0xf,0x63,0x43, 0xf,0x63,0x44, + 0xf,0x63,0x45, 0x7,0x4a,0x73, 0x7,0x48,0x5c, 0x7,0x48,0x65, + 0x4,0x60,0x6a, 0x7,0x4e,0x7d, 0x7,0x4e,0x7c, 0x5,0x6d,0x23, + 0x5,0x6d,0x21, 0x4,0x64,0x25, 0x7,0x4e,0x7e, 0x7,0x4f,0x23, + 0x7,0x4e,0x7b, 0x7,0x54,0x42, 0x7,0x48,0x58, 0x5,0x6d,0x24, + 0x7,0x4f,0x24, 0x7,0x4f,0x26, 0x7,0x4e,0x7a, 0x4,0x66,0x79, + 0x7,0x4f,0x22, 0x7,0x4e,0x79, 0x7,0x4f,0x25, 0xf,0x65,0x6c, + 0xf,0x65,0x6d, 0xf,0x65,0x6e, 0xf,0x65,0x70, 0xf,0x65,0x71, + 0x7,0x4f,0x21, 0x5,0x70,0x72, 0x4,0x66,0x75, 0x7,0x54,0x43, + 0x5,0x70,0x73, 0x4,0x66,0x78, 0x4,0x66,0x76, 0x4,0x66,0x77, + 0x7,0x58,0x5e, 0x7,0x4f,0x27, 0x7,0x54,0x3f, 0x7,0x54,0x3e, + 0x7,0x54,0x41, 0xf,0x68,0x2c, 0xf,0x68,0x2d, 0xf,0x68,0x2e, + 0xf,0x68,0x2f, 0x4,0x66,0x74, 0x7,0x54,0x40, 0x5,0x70,0x71, + 0x7,0x54,0x44, 0x5,0x73,0x7b, 0x7,0x58,0x59, 0x5,0x73,0x7c, + 0x5,0x73,0x79, 0x4,0x69,0x29, 0x5,0x76,0x3a, 0x7,0x58,0x5d, + 0x5,0x73,0x7a, 0x7,0x58,0x5b, 0xf,0x69,0x63, 0xf,0x69,0x64, + 0xf,0x69,0x65, 0xf,0x69,0x66, 0x7,0x58,0x5a, 0x7,0x58,0x5c, + 0x4,0x69,0x4b, 0x4,0x6a,0x67, 0x7,0x58,0x5f, 0x7,0x5c,0x3a, + 0x7,0x5c,0x3b, 0x4,0x6a,0x68, 0x4,0x6a,0x69, 0x4,0x6b,0x7a, + 0x5,0x77,0x78, 0x7,0x5f,0x37, 0x7,0x5f,0x35, 0xf,0x6b,0x5d, + 0x7,0x5f,0x36, 0x7,0x5f,0x38, 0x5,0x79,0x3a, 0x7,0x5f,0x34, + 0x5,0x79,0x39, 0x7,0x61,0x34, 0x7,0x62,0x4f, 0x7,0x62,0x4e, + 0x7,0x63,0x63, 0xf,0x6c,0x69, 0x7,0x63,0x65, 0x7,0x63,0x64, + 0x7,0x64,0x55, 0x5,0x7b,0x65, 0xf,0x6d,0x30, 0x7,0x65,0x75, + 0x6,0x25,0x42, 0x4,0x2a,0x78, 0x5,0x2b,0x28, 0x4,0x2f,0x28, + 0x6,0x3a,0x66, 0x5,0x2f,0x5b, 0x5,0x34,0x61, 0x6,0x43,0x2d, + 0x5,0x3b,0x34, 0x6,0x43,0x2f, 0x6,0x43,0x2e, 0x6,0x4c,0x74, + 0x4,0x3a,0x29, 0x6,0x4c,0x73, 0x5,0x3b,0x33, 0xf,0x3e,0x2f, + 0x6,0x56,0x50, 0x6,0x56,0x4f, 0x4,0x3f,0x74, 0x4,0x46,0x24, + 0x6,0x60,0x45, 0x5,0x48,0x58, 0x6,0x60,0x44, 0x7,0x26,0x6e, + 0xf,0x4b,0x39, 0xf,0x4b,0x3a, 0xf,0x4b,0x3b, 0x7,0x26,0x70, + 0x4,0x4c,0x47, 0xf,0x51,0x40, 0xf,0x51,0x41, 0x7,0x26,0x6f, + 0x5,0x56,0x7b, 0x5,0x56,0x7a, 0xf,0x57,0x22, 0xf,0x57,0x21, + 0x5,0x5d,0x49, 0x7,0x3a,0x45, 0x5,0x5d,0x48, 0xf,0x5a,0x58, + 0xf,0x5c,0x23, 0xf,0x5c,0x24, 0x7,0x41,0x5d, 0x7,0x41,0x5e, + 0xf,0x60,0x33, 0x7,0x48,0x68, 0x4,0x60,0x6c, 0xf,0x63,0x46, + 0x5,0x70,0x74, 0x4,0x64,0x27, 0x4,0x66,0x7a, 0x7,0x54,0x45, + 0x4,0x6a,0x6a, 0x7,0x5c,0x3c, 0xf,0x6a,0x6b, 0x7,0x5f,0x3a, + 0x7,0x5f,0x39, 0x5,0x7a,0x34, 0x7,0x66,0x2a, 0x6,0x22,0x29, + 0x6,0x22,0x28, 0x4,0x24,0x6a, 0x6,0x25,0x44, 0x6,0x25,0x45, + 0x6,0x28,0x73, 0xf,0x21,0x7c, 0x6,0x25,0x43, 0xf,0x25,0x28, + 0xf,0x25,0x2a, 0x6,0x2d,0x53, 0x6,0x33,0x6a, 0x4,0x27,0x5d, + 0x6,0x33,0x69, 0x6,0x2d,0x54, 0x4,0x27,0x5e, 0x6,0x28,0x74, + 0x4,0x24,0x6b, 0x6,0x33,0x6b, 0x4,0x2a,0x7a, 0x4,0x2a,0x7c, + 0xf,0x25,0x56, 0x5,0x2b,0x29, 0xf,0x28,0x49, 0x5,0x27,0x52, + 0x6,0x3a,0x67, 0x6,0x3a,0x68, 0x6,0x3a,0x69, 0x5,0x2f,0x5f, + 0x6,0x3a,0x6c, 0x6,0x3a,0x6a, 0x4,0x2f,0x2c, 0x4,0x2f,0x2b, + 0x6,0x33,0x6e, 0x6,0x33,0x6c, 0x6,0x33,0x6f, 0x6,0x43,0x35, + 0xf,0x29,0x39, 0x5,0x2f,0x5d, 0x6,0x43,0x30, 0x6,0x43,0x31, + 0x6,0x43,0x32, 0x6,0x43,0x34, 0x6,0x43,0x36, 0xf,0x31,0x79, + 0x6,0x33,0x6d, 0x6,0x36,0x7a, 0x5,0x2b,0x2a, 0x4,0x2a,0x7d, + 0x6,0x43,0x33, 0x6,0x4c,0x77, 0x6,0x43,0x37, 0x6,0x3a,0x6d, + 0x6,0x4c,0x76, 0x6,0x43,0x38, 0x5,0x2f,0x5e, 0x5,0x34,0x62, + 0xf,0x37,0x5c, 0x6,0x4c,0x75, 0x5,0x3b,0x36, 0x5,0x3b,0x35, + 0x4,0x3a,0x2c, 0x6,0x4c,0x78, 0xf,0x3e,0x30, 0x6,0x56,0x52, + 0x5,0x41,0x67, 0x6,0x56,0x54, 0x6,0x4c,0x7a, 0x5,0x41,0x64, + 0x5,0x41,0x66, 0x6,0x56,0x53, 0x6,0x56,0x55, 0x6,0x4c,0x79, + 0x6,0x56,0x56, 0xf,0x3e,0x31, 0x6,0x56,0x51, 0xf,0x44,0x63, + 0x6,0x60,0x46, 0x6,0x60,0x48, 0x6,0x60,0x49, 0x6,0x60,0x4a, + 0x6,0x60,0x4b, 0x6,0x60,0x4c, 0x6,0x60,0x4d, 0x6,0x60,0x50, + 0x5,0x48,0x5b, 0x7,0x26,0x75, 0x6,0x60,0x4e, 0x5,0x48,0x5a, + 0x6,0x56,0x57, 0x5,0x48,0x59, 0x6,0x60,0x4f, 0x6,0x60,0x47, + 0xf,0x4b,0x3c, 0x7,0x26,0x71, 0x7,0x26,0x72, 0x7,0x26,0x73, + 0x7,0x26,0x74, 0x5,0x4f,0x62, 0x5,0x4f,0x5f, 0x6,0x60,0x52, + 0x7,0x26,0x76, 0x5,0x4f,0x60, 0x5,0x4f,0x61, 0x6,0x60,0x51, + 0xf,0x51,0x42, 0xf,0x51,0x43, 0x7,0x25,0x73, 0x7,0x31,0x47, + 0x7,0x31,0x48, 0x7,0x31,0x4c, 0x7,0x31,0x49, 0x5,0x56,0x7c, + 0x7,0x31,0x4b, 0x4,0x52,0x51, 0x7,0x3a,0x4e, 0x7,0x31,0x4a, + 0x7,0x31,0x4d, 0x5,0x4f,0x63, 0x5,0x56,0x7d, 0x4,0x52,0x50, + 0x7,0x26,0x77, 0x7,0x26,0x78, 0x7,0x3a,0x47, 0x7,0x3a,0x48, + 0x7,0x3a,0x4b, 0x5,0x5d,0x4a, 0x7,0x31,0x4e, 0x4,0x57,0x74, + 0x5,0x63,0x5b, 0x7,0x3a,0x4c, 0x7,0x3a,0x4d, 0xf,0x5c,0x25, + 0xf,0x57,0x23, 0x7,0x41,0x5f, 0x7,0x41,0x60, 0x7,0x41,0x62, + 0x7,0x41,0x64, 0x4,0x5c,0x67, 0x4,0x5c,0x66, 0x5,0x63,0x5c, + 0x7,0x41,0x63, 0x7,0x48,0x69, 0x7,0x3a,0x4a, 0x5,0x63,0x5e, + 0x5,0x68,0x7b, 0x7,0x48,0x6c, 0x4,0x60,0x6e, 0x7,0x48,0x6a, + 0x7,0x48,0x6b, 0x7,0x4f,0x28, 0x7,0x4f,0x29, 0x7,0x4f,0x2a, + 0x7,0x4f,0x2b, 0x5,0x6d,0x25, 0x5,0x6d,0x27, 0x7,0x4f,0x2c, + 0x5,0x6d,0x26, 0x5,0x6d,0x28, 0x7,0x54,0x46, 0x7,0x4f,0x2d, + 0x5,0x77,0x7a, 0x4,0x6b,0x7c, 0x7,0x5f,0x3b, 0x5,0x77,0x7b, + 0x5,0x77,0x79, 0x7,0x61,0x35, 0x7,0x62,0x50, 0x7,0x63,0x66, + 0x7,0x64,0x56, 0x7,0x65,0x3c, 0x4,0x24,0x6c, 0x4,0x23,0x2c, + 0xf,0x21,0x60, 0x6,0x2d,0x56, 0x5,0x27,0x53, 0x6,0x2d,0x55, + 0xf,0x2d,0x24, 0x6,0x33,0x71, 0x6,0x33,0x70, 0x4,0x2a,0x7e, + 0xf,0x28,0x4b, 0x6,0x3a,0x6e, 0x6,0x3a,0x6f, 0x6,0x43,0x3b, + 0x6,0x3a,0x73, 0x6,0x3a,0x72, 0x6,0x3a,0x71, 0x6,0x3a,0x70, + 0x6,0x43,0x3a, 0xf,0x31,0x7a, 0xf,0x31,0x7b, 0x6,0x43,0x3d, + 0x5,0x34,0x64, 0x4,0x3a,0x2e, 0x6,0x43,0x3e, 0x4,0x34,0x39, + 0x5,0x34,0x65, 0xf,0x37,0x5d, 0x5,0x34,0x63, 0x6,0x43,0x39, + 0xf,0x37,0x5e, 0xf,0x37,0x5f, 0x6,0x43,0x3f, 0x5,0x3b,0x39, + 0x5,0x3b,0x37, 0x6,0x4c,0x7d, 0x4,0x3a,0x2f, 0x6,0x4d,0x21, + 0x5,0x3b,0x38, 0x6,0x4c,0x7e, 0x6,0x4c,0x7c, 0x6,0x4d,0x22, + 0x6,0x47,0x21, 0x6,0x56,0x5a, 0x5,0x41,0x68, 0x6,0x56,0x5b, + 0x6,0x56,0x58, 0x5,0x41,0x69, 0x6,0x56,0x59, 0x6,0x56,0x5c, + 0x5,0x41,0x6a, 0xf,0x3e,0x33, 0xf,0x3e,0x34, 0x5,0x48,0x5c, + 0x6,0x60,0x53, 0x6,0x60,0x55, 0x5,0x48,0x5d, 0x6,0x60,0x54, + 0x5,0x4f,0x64, 0x4,0x4c,0x4a, 0x7,0x26,0x7b, 0x7,0x26,0x7c, + 0x4,0x4c,0x4b, 0x7,0x31,0x4f, 0x7,0x26,0x7a, 0x4,0x4c,0x48, + 0x5,0x57,0x21, 0x5,0x56,0x7e, 0x4,0x52,0x52, 0xf,0x57,0x25, + 0x7,0x31,0x50, 0x4,0x57,0x78, 0x4,0x57,0x76, 0x5,0x5d,0x4b, + 0x7,0x3a,0x50, 0x7,0x3a,0x4f, 0x7,0x3a,0x52, 0xf,0x5c,0x26, + 0x4,0x52,0x54, 0x7,0x3a,0x51, 0x5,0x63,0x5d, 0x4,0x5c,0x69, + 0x5,0x63,0x5f, 0x7,0x41,0x69, 0x7,0x41,0x6a, 0x4,0x5c,0x6d, + 0x7,0x41,0x67, 0x7,0x41,0x68, 0x7,0x41,0x66, 0xf,0x57,0x24, + 0xf,0x60,0x34, 0xf,0x60,0x35, 0x4,0x5c,0x6c, 0x5,0x68,0x7c, + 0x7,0x48,0x70, 0x5,0x76,0x3b, 0x7,0x48,0x6f, 0x7,0x4f,0x2e, + 0x7,0x48,0x6e, 0x5,0x6d,0x29, 0x7,0x4f,0x2f, 0x7,0x4f,0x30, + 0x7,0x4f,0x31, 0x7,0x4f,0x32, 0x7,0x41,0x65, 0x5,0x70,0x75, + 0x7,0x54,0x47, 0x7,0x54,0x48, 0x5,0x73,0x7d, 0x7,0x58,0x60, + 0x7,0x5c,0x3e, 0x7,0x5c,0x3d, 0x7,0x61,0x36, 0x7,0x63,0x67, + 0x7,0x65,0x5e, 0x6,0x2d,0x57, 0x6,0x33,0x75, 0x6,0x33,0x72, + 0x6,0x33,0x76, 0x5,0x2b,0x2b, 0x4,0x2b,0x22, 0x4,0x2b,0x21, + 0x4,0x2b,0x24, 0x6,0x33,0x74, 0x4,0x2b,0x23, 0xf,0x2d,0x25, + 0xf,0x2d,0x26, 0x6,0x33,0x73, 0x4,0x2f,0x33, 0x6,0x3a,0x76, + 0x5,0x2f,0x61, 0x5,0x2f,0x63, 0x5,0x2f,0x60, 0x4,0x2f,0x31, + 0x4,0x2f,0x36, 0x4,0x2f,0x35, 0x6,0x3a,0x75, 0x5,0x2f,0x62, + 0x4,0x2f,0x34, 0x4,0x2f,0x32, 0x6,0x3a,0x77, 0xf,0x2f,0x63, + 0xf,0x2f,0x64, 0x4,0x2f,0x37, 0xf,0x31,0x7c, 0x5,0x34,0x66, + 0x6,0x43,0x41, 0x6,0x43,0x40, 0x6,0x43,0x42, 0x6,0x43,0x43, + 0x6,0x43,0x44, 0x6,0x43,0x46, 0x6,0x43,0x47, 0x4,0x34,0x3f, + 0x6,0x43,0x45, 0x5,0x3b,0x3b, 0x4,0x3a,0x32, 0x6,0x4d,0x26, + 0x6,0x4d,0x27, 0x6,0x4d,0x2d, 0x5,0x3b,0x3d, 0x4,0x3a,0x36, + 0x6,0x4d,0x2e, 0x6,0x4d,0x28, 0x6,0x4d,0x25, 0x6,0x4d,0x2f, + 0x6,0x4d,0x30, 0x5,0x3b,0x3c, 0x6,0x4d,0x2a, 0x6,0x4d,0x2c, + 0x6,0x4d,0x2b, 0xf,0x3e,0x35, 0xf,0x3e,0x36, 0x6,0x4d,0x29, + 0x5,0x41,0x6e, 0x5,0x41,0x6b, 0x4,0x3f,0x79, 0x6,0x56,0x5d, + 0x6,0x56,0x5e, 0x6,0x56,0x5f, 0x5,0x41,0x6d, 0x5,0x41,0x6c, + 0xf,0x44,0x64, 0x6,0x4d,0x24, 0x5,0x48,0x65, 0x5,0x48,0x5e, + 0x6,0x60,0x57, 0x5,0x48,0x5f, 0x5,0x48,0x63, 0x5,0x48,0x60, + 0x5,0x48,0x64, 0x5,0x48,0x61, 0x5,0x48,0x62, 0x6,0x60,0x56, + 0x5,0x48,0x66, 0xf,0x4b,0x3d, 0xf,0x4b,0x3e, 0xf,0x4b,0x3f, + 0xf,0x4b,0x40, 0x5,0x4f,0x6a, 0x5,0x4f,0x6b, 0x7,0x26,0x7e, + 0x5,0x4f,0x68, 0x4,0x4c,0x4c, 0x5,0x4f,0x6c, 0x5,0x4f,0x65, + 0x7,0x26,0x7d, 0x5,0x4f,0x67, 0xf,0x51,0x46, 0x6,0x60,0x59, + 0x5,0x4f,0x66, 0x7,0x27,0x24, 0x7,0x27,0x25, 0x7,0x27,0x21, + 0x4,0x4c,0x4e, 0x7,0x27,0x22, 0x4,0x4c,0x4d, 0x7,0x27,0x23, + 0xf,0x51,0x44, 0xf,0x51,0x45, 0x7,0x31,0x51, 0x7,0x31,0x53, + 0x5,0x57,0x25, 0x7,0x31,0x56, 0x7,0x31,0x52, 0x7,0x31,0x54, + 0x4,0x52,0x57, 0x5,0x57,0x23, 0x5,0x57,0x26, 0x5,0x57,0x24, + 0x5,0x4f,0x69, 0x5,0x57,0x22, 0x7,0x31,0x55, 0x5,0x57,0x27, + 0xf,0x57,0x26, 0x4,0x57,0x79, 0x7,0x3a,0x54, 0x5,0x5d,0x4c, + 0x7,0x3a,0x55, 0x7,0x48,0x71, 0x5,0x5d,0x4d, 0x7,0x3a,0x53, + 0xf,0x5c,0x27, 0xf,0x5c,0x28, 0x5,0x63,0x60, 0x4,0x5c,0x6e, + 0x7,0x41,0x71, 0x5,0x5d,0x4e, 0x4,0x5c,0x6f, 0x7,0x41,0x6d, + 0x7,0x41,0x6f, 0x7,0x41,0x6c, 0x7,0x41,0x70, 0x7,0x41,0x6e, + 0xf,0x60,0x36, 0xf,0x60,0x37, 0x7,0x41,0x6b, 0x4,0x60,0x70, + 0x5,0x68,0x7e, 0x5,0x68,0x7d, 0x7,0x48,0x72, 0x7,0x4f,0x35, + 0x7,0x4f,0x36, 0xf,0x65,0x72, 0x7,0x4f,0x33, 0x4,0x66,0x7c, + 0x7,0x54,0x49, 0x7,0x54,0x4b, 0x7,0x4f,0x34, 0x7,0x54,0x4a, + 0x7,0x58,0x62, 0x7,0x58,0x63, 0x7,0x58,0x61, 0x6,0x25,0x46, + 0x6,0x2d,0x58, 0x6,0x28,0x75, 0x4,0x27,0x5f, 0x4,0x27,0x60, + 0x6,0x3a,0x78, 0x4,0x34,0x40, 0x5,0x2b,0x2c, 0xf,0x37,0x60, + 0xf,0x37,0x61, 0x6,0x43,0x48, 0x6,0x4d,0x31, 0x7,0x27,0x26, + 0x7,0x31,0x58, 0x7,0x31,0x57, 0xf,0x6b,0x5e, 0x6,0x2d,0x59, + 0x6,0x2d,0x5a, 0x5,0x21,0x79, 0xf,0x28,0x4c, 0x4,0x2f,0x39, + 0x5,0x34,0x67, 0x5,0x3b,0x3e, 0x5,0x41,0x6f, 0x6,0x60,0x5a, + 0x7,0x27,0x27, 0x7,0x27,0x29, 0x5,0x48,0x67, 0x7,0x31,0x5a, + 0x7,0x31,0x59, 0x7,0x3a,0x56, 0x5,0x23,0x21, 0x6,0x2d,0x5b, + 0xf,0x28,0x4d, 0x6,0x33,0x77, 0xf,0x2d,0x27, 0x6,0x33,0x78, + 0xf,0x31,0x7e, 0x5,0x34,0x68, 0xf,0x37,0x62, 0x6,0x43,0x49, + 0x4,0x3a,0x37, 0x5,0x3b,0x41, 0x5,0x3b,0x40, 0x4,0x3f,0x7b, + 0x6,0x56,0x60, 0x6,0x60,0x5c, 0x5,0x48,0x6c, 0x5,0x48,0x68, + 0x5,0x48,0x6d, 0x5,0x48,0x6a, 0x5,0x48,0x69, 0x5,0x48,0x6b, + 0x4,0x46,0x31, 0xf,0x44,0x65, 0x6,0x60,0x5b, 0x5,0x4f,0x6f, + 0x5,0x4f,0x70, 0x5,0x4f,0x71, 0x5,0x4f,0x6d, 0x5,0x4f,0x6e, + 0x7,0x27,0x2a, 0x5,0x57,0x29, 0x5,0x57,0x28, 0x4,0x52,0x58, + 0x4,0x52,0x59, 0x7,0x31,0x5c, 0x7,0x31,0x5d, 0x7,0x31,0x5b, + 0xf,0x51,0x47, 0x5,0x5d,0x4f, 0x4,0x57,0x7c, 0x7,0x3a,0x5a, + 0x7,0x3a,0x57, 0x7,0x3a,0x58, 0xf,0x57,0x29, 0x5,0x63,0x61, + 0x4,0x57,0x7e, 0x7,0x41,0x72, 0x7,0x3a,0x59, 0x7,0x48,0x75, + 0x5,0x63,0x62, 0x7,0x41,0x74, 0x7,0x41,0x73, 0xf,0x5c,0x29, + 0xf,0x5c,0x2a, 0x7,0x48,0x74, 0x5,0x69,0x21, 0x7,0x48,0x73, + 0x4,0x66,0x7e, 0x7,0x54,0x4c, 0x4,0x6a,0x6c, 0x5,0x77,0x7c, + 0x5,0x79,0x3b, 0x5,0x27,0x55, 0x5,0x27,0x54, 0x6,0x2d,0x5e, + 0xf,0x28,0x4e, 0xf,0x28,0x4f, 0x6,0x2d,0x5d, 0x5,0x2b,0x2f, + 0x5,0x2b,0x2d, 0x5,0x2b,0x2e, 0x4,0x2f,0x3c, 0x6,0x3a,0x7e, + 0x4,0x2f,0x3b, 0x6,0x3a,0x7a, 0x5,0x2f,0x64, 0x6,0x3b,0x22, + 0xf,0x32,0x21, 0xf,0x32,0x24, 0xf,0x32,0x26, 0xf,0x32,0x27, + 0x6,0x3a,0x7b, 0xf,0x32,0x22, 0x6,0x3a,0x7d, 0x6,0x3a,0x7c, + 0x6,0x3b,0x23, 0x6,0x3a,0x79, 0xf,0x32,0x25, 0x5,0x2f,0x65, + 0x6,0x43,0x4b, 0x4,0x34,0x43, 0x4,0x34,0x42, 0x4,0x34,0x44, + 0x6,0x43,0x4d, 0x5,0x34,0x69, 0x6,0x43,0x4f, 0x6,0x43,0x4e, + 0x6,0x43,0x4c, 0x6,0x43,0x4a, 0xf,0x37,0x63, 0xf,0x37,0x64, + 0xf,0x37,0x65, 0xf,0x37,0x66, 0x5,0x3b,0x42, 0x6,0x4d,0x33, + 0x6,0x4d,0x34, 0x5,0x3b,0x43, 0x6,0x4d,0x35, 0xf,0x3e,0x37, + 0xf,0x3e,0x38, 0xf,0x3e,0x39, 0xf,0x3e,0x3a, 0xf,0x3e,0x3c, + 0xf,0x3e,0x3d, 0xf,0x3e,0x3e, 0xf,0x3e,0x3f, 0xf,0x3e,0x40, + 0x6,0x4d,0x32, 0xf,0x3e,0x3b, 0x6,0x56,0x62, 0x6,0x56,0x66, + 0x5,0x41,0x71, 0x5,0x41,0x72, 0x6,0x56,0x61, 0x6,0x56,0x6b, + 0x6,0x56,0x69, 0x6,0x56,0x67, 0x5,0x41,0x73, 0x6,0x56,0x68, + 0x6,0x56,0x64, 0x6,0x56,0x6a, 0x6,0x56,0x63, 0xf,0x44,0x66, + 0xf,0x44,0x67, 0x6,0x56,0x65, 0x5,0x48,0x70, 0x5,0x48,0x71, + 0x5,0x48,0x6e, 0x4,0x4c,0x50, 0x6,0x60,0x5e, 0x5,0x48,0x72, + 0x5,0x48,0x6f, 0x5,0x48,0x73, 0xf,0x4b,0x41, 0xf,0x4b,0x42, + 0xf,0x4b,0x43, 0xf,0x4b,0x44, 0xf,0x4b,0x45, 0xf,0x4b,0x46, + 0xf,0x4b,0x47, 0xf,0x4b,0x48, 0xf,0x4b,0x4a, 0xf,0x4b,0x4b, + 0xf,0x4b,0x4c, 0x6,0x60,0x5f, 0x5,0x4f,0x72, 0x7,0x27,0x2c, + 0x5,0x4f,0x75, 0x7,0x27,0x2f, 0x5,0x4f,0x74, 0x5,0x4f,0x73, + 0x4,0x4c,0x51, 0x5,0x4f,0x77, 0x7,0x27,0x2b, 0x7,0x27,0x30, + 0x5,0x4f,0x76, 0xf,0x51,0x48, 0xf,0x51,0x49, 0xf,0x51,0x4a, + 0xf,0x51,0x4b, 0xf,0x51,0x4c, 0xf,0x51,0x4d, 0xf,0x51,0x4e, + 0xf,0x51,0x4f, 0x7,0x27,0x2d, 0x5,0x57,0x2c, 0x5,0x57,0x2f, + 0x5,0x57,0x2b, 0x5,0x57,0x2d, 0x5,0x57,0x2e, 0x7,0x31,0x61, + 0x7,0x31,0x5f, 0x7,0x31,0x5e, 0xf,0x57,0x2a, 0xf,0x57,0x2b, + 0xf,0x57,0x2c, 0xf,0x57,0x2d, 0xf,0x57,0x2e, 0xf,0x57,0x2f, + 0x7,0x31,0x60, 0x5,0x57,0x2a, 0x5,0x5d,0x50, 0x5,0x5d,0x51, + 0x5,0x5d,0x52, 0x7,0x3a,0x5b, 0x4,0x58,0x25, 0x4,0x58,0x26, + 0x5,0x5d,0x54, 0x5,0x5d,0x53, 0xf,0x5c,0x2c, 0x7,0x3a,0x5d, + 0x7,0x3a,0x5c, 0x3,0x58,0x63, 0x7,0x41,0x77, 0x5,0x63,0x66, + 0x5,0x63,0x63, 0x4,0x5c,0x72, 0x7,0x41,0x79, 0x5,0x5d,0x55, + 0x7,0x41,0x78, 0x5,0x63,0x64, 0x5,0x63,0x65, 0x7,0x41,0x75, + 0xf,0x60,0x38, 0xf,0x60,0x39, 0xf,0x60,0x3a, 0x7,0x41,0x76, + 0xf,0x5c,0x2b, 0xf,0x63,0x47, 0x7,0x48,0x76, 0x5,0x69,0x22, + 0x5,0x69,0x23, 0x7,0x48,0x78, 0x7,0x48,0x77, 0xf,0x63,0x48, + 0xf,0x63,0x49, 0x7,0x4f,0x39, 0xf,0x65,0x73, 0xf,0x65,0x74, + 0xf,0x65,0x75, 0x7,0x4f,0x38, 0x7,0x4f,0x37, 0x5,0x70,0x76, + 0xf,0x68,0x30, 0xf,0x68,0x31, 0x7,0x54,0x4d, 0x7,0x54,0x4e, + 0x5,0x73,0x7e, 0x7,0x58,0x64, 0x4,0x6a,0x6d, 0xf,0x6a,0x6c, + 0xf,0x6b,0x5f, 0xf,0x6c,0x36, 0xf,0x6c,0x50, 0x5,0x21,0x7a, + 0x6,0x2d,0x5f, 0x5,0x2b,0x30, 0x6,0x43,0x50, 0x6,0x4d,0x36, + 0x6,0x48,0x6a, 0x6,0x56,0x6e, 0x6,0x60,0x62, 0x6,0x60,0x61, + 0x7,0x27,0x31, 0xf,0x51,0x50, 0x7,0x31,0x62, 0x7,0x4f,0x3a, + 0x5,0x23,0x25, 0x5,0x23,0x23, 0x6,0x2d,0x60, 0x6,0x2d,0x61, + 0x6,0x25,0x48, 0xf,0x22,0x6c, 0xf,0x22,0x6d, 0x5,0x23,0x24, + 0x5,0x23,0x22, 0x5,0x24,0x73, 0x5,0x24,0x72, 0x6,0x28,0x79, + 0x6,0x28,0x78, 0x6,0x28,0x77, 0x6,0x28,0x76, 0x6,0x33,0x7b, + 0x6,0x33,0x7a, 0x6,0x33,0x79, 0x5,0x27,0x5a, 0x5,0x27,0x5e, + 0x6,0x2d,0x64, 0x4,0x2f,0x43, 0x6,0x2d,0x6d, 0x6,0x2d,0x6e, + 0x6,0x2d,0x62, 0x5,0x27,0x5d, 0x6,0x2d,0x66, 0x5,0x27,0x59, + 0x5,0x27,0x57, 0x6,0x2d,0x6b, 0x5,0x27,0x5b, 0x4,0x27,0x6b, + 0x6,0x2d,0x68, 0x6,0x2d,0x6f, 0xf,0x28,0x50, 0xf,0x28,0x51, + 0xf,0x28,0x53, 0xf,0x28,0x54, 0x6,0x2d,0x6c, 0x4,0x26,0x64, + 0x6,0x2d,0x65, 0x6,0x2d,0x67, 0x5,0x27,0x5c, 0x6,0x2d,0x6a, + 0x6,0x2d,0x63, 0x6,0x3b,0x27, 0x6,0x3b,0x25, 0x4,0x2f,0x3d, + 0x5,0x27,0x56, 0x6,0x3b,0x26, 0x6,0x34,0x2d, 0x4,0x2b,0x2d, + 0x5,0x2b,0x34, 0x6,0x34,0x28, 0x5,0x2b,0x31, 0x5,0x2b,0x38, + 0x6,0x34,0x29, 0x4,0x2b,0x2e, 0x6,0x43,0x54, 0x6,0x34,0x27, + 0x4,0x2b,0x2b, 0x6,0x34,0x2b, 0x4,0x2b,0x30, 0x6,0x34,0x25, + 0x5,0x2b,0x36, 0x6,0x34,0x26, 0x5,0x2b,0x37, 0x5,0x2b,0x32, + 0x4,0x2f,0x48, 0x5,0x2b,0x35, 0x6,0x33,0x7c, 0x6,0x34,0x21, + 0x6,0x34,0x22, 0x6,0x34,0x24, 0xf,0x2d,0x2a, 0xf,0x2d,0x2f, + 0xf,0x37,0x67, 0xf,0x37,0x68, 0x6,0x33,0x7e, 0x6,0x34,0x2f, + 0x6,0x34,0x2c, 0x6,0x34,0x2a, 0x6,0x34,0x30, 0x6,0x34,0x2e, + 0x6,0x43,0x53, 0x6,0x43,0x52, 0xf,0x2d,0x2b, 0x6,0x43,0x55, + 0x6,0x43,0x56, 0x6,0x3b,0x30, 0x6,0x43,0x51, 0xf,0x2d,0x2d, + 0x5,0x2f,0x67, 0x4,0x2f,0x3e, 0x4,0x34,0x45, 0x4,0x2f,0x45, + 0x6,0x3b,0x32, 0x5,0x2f,0x6c, 0x4,0x2f,0x44, 0x6,0x3b,0x2e, + 0x5,0x2f,0x6e, 0x6,0x3b,0x2a, 0x5,0x2f,0x70, 0x5,0x3b,0x44, + 0x5,0x2f,0x6f, 0x6,0x3b,0x29, 0x5,0x2f,0x66, 0x6,0x3b,0x2b, + 0x4,0x2f,0x40, 0x6,0x4d,0x3b, 0x5,0x2f,0x69, 0xf,0x2d,0x29, + 0xf,0x32,0x28, 0xf,0x32,0x29, 0xf,0x32,0x2d, 0xf,0x3e,0x4c, + 0x5,0x2f,0x68, 0x5,0x2e,0x24, 0x6,0x3b,0x2f, 0x6,0x3b,0x2d, + 0x6,0x3b,0x2c, 0x6,0x3b,0x33, 0x6,0x4d,0x3a, 0x6,0x4d,0x38, + 0x6,0x4d,0x39, 0x6,0x4d,0x37, 0x6,0x34,0x23, 0x5,0x2f,0x6b, + 0x5,0x2f,0x71, 0x5,0x2f,0x6a, 0x5,0x34,0x74, 0x6,0x43,0x5b, + 0x6,0x43,0x59, 0x5,0x34,0x6b, 0x4,0x34,0x4e, 0x5,0x34,0x6c, + 0x4,0x2f,0x42, 0x5,0x34,0x71, 0x4,0x34,0x46, 0x4,0x34,0x55, + 0x5,0x41,0x74, 0x4,0x34,0x54, 0x6,0x43,0x57, 0x5,0x34,0x6e, + 0x6,0x43,0x5f, 0x4,0x34,0x49, 0x5,0x34,0x75, 0x5,0x34,0x76, + 0x6,0x43,0x60, 0x6,0x43,0x5e, 0x4,0x34,0x4f, 0x5,0x34,0x72, + 0x6,0x43,0x61, 0x6,0x43,0x62, 0xf,0x37,0x69, 0xf,0x37,0x6b, + 0x6,0x43,0x5c, 0x6,0x43,0x5d, 0x6,0x56,0x6f, 0x6,0x56,0x70, + 0x6,0x56,0x71, 0x5,0x34,0x73, 0x5,0x34,0x6f, 0x5,0x34,0x70, + 0x6,0x4d,0x43, 0x5,0x3b,0x48, 0x6,0x4d,0x3d, 0x5,0x3b,0x45, + 0x6,0x4d,0x4b, 0x6,0x4d,0x42, 0x4,0x3a,0x3c, 0x5,0x3b,0x4a, + 0x6,0x4d,0x4f, 0x6,0x4d,0x3c, 0x6,0x60,0x65, 0x5,0x3b,0x47, + 0x6,0x4d,0x50, 0x6,0x56,0x75, 0x4,0x3a,0x48, 0x5,0x3b,0x4c, + 0x6,0x4d,0x55, 0x6,0x4d,0x4e, 0x6,0x4d,0x4c, 0x6,0x4d,0x53, + 0x5,0x3b,0x46, 0x5,0x48,0x75, 0x6,0x4d,0x3e, 0x6,0x4d,0x47, + 0x6,0x4d,0x4a, 0xf,0x3e,0x41, 0xf,0x3e,0x44, 0xf,0x3e,0x46, + 0xf,0x3e,0x47, 0xf,0x3e,0x48, 0xf,0x3e,0x49, 0xf,0x3e,0x4a, + 0xf,0x3e,0x4b, 0x6,0x4d,0x44, 0x6,0x4d,0x49, 0xf,0x3b,0x63, + 0x6,0x4d,0x4d, 0x6,0x4d,0x41, 0x6,0x4d,0x52, 0x6,0x4d,0x3f, + 0x6,0x4d,0x40, 0x6,0x60,0x63, 0x6,0x60,0x67, 0x6,0x60,0x64, + 0xf,0x3e,0x45, 0x5,0x3b,0x49, 0x6,0x4d,0x46, 0x5,0x34,0x6d, + 0x5,0x3b,0x4b, 0x5,0x3b,0x4e, 0x5,0x3b,0x4f, 0x6,0x4d,0x51, + 0x5,0x3b,0x51, 0x6,0x4d,0x45, 0x6,0x60,0x68, 0x6,0x60,0x66, + 0x5,0x41,0x7d, 0x4,0x40,0x21, 0x5,0x42,0x26, 0x5,0x42,0x21, + 0x5,0x41,0x75, 0x5,0x41,0x79, 0x5,0x42,0x27, 0x6,0x56,0x7d, + 0x4,0x3f,0x7e, 0x6,0x56,0x72, 0x4,0x3a,0x46, 0x5,0x42,0x22, + 0x5,0x41,0x78, 0x6,0x56,0x77, 0x4,0x40,0x24, 0x6,0x56,0x79, + 0x4,0x40,0x22, 0x6,0x57,0x21, 0x6,0x56,0x73, 0x5,0x42,0x29, + 0x6,0x56,0x74, 0x6,0x56,0x78, 0x5,0x42,0x23, 0x6,0x56,0x7c, + 0x5,0x41,0x7b, 0x5,0x41,0x7a, 0x5,0x42,0x25, 0x5,0x42,0x24, + 0x6,0x56,0x7a, 0x5,0x41,0x76, 0x6,0x56,0x7e, 0xf,0x44,0x69, + 0xf,0x44,0x6a, 0xf,0x44,0x6b, 0xf,0x44,0x6c, 0xf,0x44,0x6d, + 0xf,0x44,0x6f, 0xf,0x44,0x71, 0x4,0x40,0x2b, 0x6,0x57,0x23, + 0x6,0x57,0x22, 0xf,0x44,0x70, 0x7,0x27,0x32, 0x7,0x27,0x33, + 0x6,0x56,0x7b, 0x5,0x41,0x7e, 0x5,0x41,0x7c, 0x4,0x46,0x44, + 0x5,0x48,0x7b, 0x4,0x46,0x4c, 0x4,0x46,0x43, 0x5,0x49,0x23, + 0x6,0x60,0x6a, 0x5,0x48,0x7a, 0x4,0x46,0x4a, 0x5,0x49,0x24, + 0x5,0x49,0x21, 0x4,0x46,0x49, 0x5,0x48,0x77, 0x5,0x48,0x7d, + 0x4,0x46,0x3a, 0x4,0x46,0x4b, 0x5,0x48,0x78, 0x6,0x60,0x71, + 0x6,0x60,0x6c, 0x5,0x48,0x76, 0x6,0x60,0x6e, 0x5,0x48,0x79, + 0x6,0x60,0x6d, 0x5,0x48,0x7c, 0x7,0x31,0x63, 0x5,0x49,0x22, + 0x4,0x46,0x48, 0x6,0x60,0x6b, 0xf,0x4b,0x4d, 0xf,0x4b,0x4e, + 0xf,0x4b,0x4f, 0xf,0x4b,0x51, 0xf,0x4b,0x52, 0xf,0x4b,0x55, + 0xf,0x4b,0x53, 0x6,0x60,0x70, 0x6,0x5d,0x5c, 0x5,0x41,0x77, + 0x5,0x48,0x7e, 0x4,0x4c,0x53, 0x5,0x4f,0x7b, 0x7,0x27,0x34, + 0x4,0x4c,0x57, 0x7,0x27,0x3b, 0x5,0x4f,0x7a, 0x4,0x4c,0x59, + 0x7,0x3a,0x60, 0x7,0x27,0x37, 0x5,0x4f,0x7c, 0x7,0x27,0x35, + 0x4,0x4c,0x5a, 0x7,0x3a,0x5e, 0x5,0x4f,0x78, 0x7,0x27,0x38, + 0xf,0x51,0x51, 0xf,0x51,0x52, 0xf,0x51,0x53, 0xf,0x51,0x54, + 0x7,0x27,0x36, 0x7,0x27,0x39, 0x7,0x27,0x3a, 0x7,0x3a,0x5f, + 0x6,0x60,0x69, 0x5,0x4f,0x79, 0xf,0x5c,0x35, 0x7,0x31,0x6c, + 0x5,0x57,0x37, 0x5,0x57,0x32, 0x4,0x52,0x68, 0x4,0x52,0x5d, + 0x5,0x57,0x31, 0x4,0x52,0x5f, 0x7,0x31,0x67, 0x7,0x31,0x6e, + 0x5,0x57,0x35, 0x5,0x57,0x36, 0x4,0x52,0x65, 0x5,0x4f,0x7d, + 0x5,0x57,0x34, 0x7,0x31,0x65, 0x7,0x31,0x6d, 0x5,0x57,0x39, + 0x7,0x31,0x6a, 0x5,0x69,0x24, 0x4,0x52,0x60, 0x7,0x31,0x6f, + 0xf,0x57,0x31, 0xf,0x57,0x33, 0xf,0x57,0x32, 0x7,0x27,0x3c, + 0x7,0x31,0x68, 0x7,0x31,0x69, 0x7,0x31,0x64, 0x7,0x31,0x66, + 0x7,0x31,0x6b, 0x7,0x41,0x7a, 0x7,0x48,0x79, 0x7,0x41,0x7b, + 0x5,0x57,0x3a, 0x5,0x57,0x30, 0x5,0x57,0x3b, 0x5,0x57,0x38, + 0x5,0x57,0x33, 0x7,0x42,0x21, 0x5,0x5d,0x5a, 0x5,0x5d,0x59, + 0x7,0x3a,0x62, 0x4,0x58,0x2e, 0x4,0x58,0x2a, 0x4,0x58,0x29, + 0x5,0x5d,0x58, 0x5,0x5d,0x56, 0x4,0x60,0x71, 0x7,0x48,0x7b, + 0x5,0x5d,0x5e, 0x7,0x3a,0x65, 0xf,0x5c,0x2e, 0xf,0x5c,0x2f, + 0xf,0x5c,0x31, 0xf,0x5c,0x32, 0xf,0x5c,0x33, 0xf,0x5c,0x34, + 0xf,0x5c,0x36, 0xf,0x5c,0x30, 0x7,0x37,0x7e, 0x7,0x3a,0x63, + 0x7,0x48,0x7a, 0x7,0x48,0x7d, 0x5,0x5d,0x5d, 0x7,0x3a,0x61, + 0x5,0x5d,0x5c, 0x5,0x5d,0x57, 0x7,0x3a,0x64, 0x7,0x48,0x7e, + 0x4,0x5c,0x75, 0x5,0x63,0x6a, 0x5,0x63,0x67, 0x5,0x63,0x69, + 0x5,0x63,0x6c, 0x7,0x41,0x7c, 0x5,0x63,0x6e, 0x7,0x41,0x7e, + 0x5,0x63,0x6b, 0x7,0x42,0x23, 0x5,0x63,0x68, 0x5,0x6d,0x2a, + 0x5,0x63,0x6f, 0xf,0x60,0x3b, 0xf,0x60,0x3c, 0xf,0x60,0x3d, + 0xf,0x60,0x40, 0xf,0x60,0x41, 0x7,0x41,0x7d, 0x7,0x42,0x6d, + 0x4,0x5c,0x73, 0x4,0x60,0x72, 0x7,0x49,0x23, 0x7,0x49,0x29, + 0x5,0x69,0x25, 0x5,0x69,0x26, 0x5,0x63,0x6d, 0x7,0x49,0x24, + 0xf,0x63,0x4a, 0x7,0x49,0x28, 0x7,0x49,0x2a, 0xf,0x63,0x4c, + 0xf,0x63,0x4d, 0x7,0x49,0x22, 0x7,0x49,0x26, 0x7,0x49,0x25, + 0x7,0x49,0x27, 0x7,0x49,0x21, 0xf,0x63,0x4b, 0x7,0x49,0x2b, + 0x7,0x4f,0x3d, 0x5,0x6d,0x2e, 0x5,0x6d,0x2d, 0x4,0x64,0x2b, + 0x4,0x64,0x29, 0x5,0x6d,0x2b, 0xf,0x65,0x76, 0x7,0x4f,0x3c, + 0x7,0x4f,0x3b, 0x4,0x67,0x26, 0x7,0x54,0x4f, 0x5,0x70,0x77, + 0x7,0x5c,0x40, 0x7,0x55,0x3a, 0x7,0x5c,0x3f, 0x4,0x69,0x31, + 0x4,0x69,0x2f, 0x7,0x58,0x65, 0xf,0x68,0x33, 0x7,0x5c,0x41, + 0x5,0x76,0x3d, 0x7,0x5c,0x43, 0x7,0x5c,0x45, 0x7,0x5c,0x46, + 0x5,0x76,0x3c, 0x7,0x5c,0x42, 0x4,0x6a,0x6e, 0x7,0x5c,0x47, + 0x7,0x5c,0x48, 0x7,0x5f,0x3d, 0x5,0x77,0x7d, 0x7,0x5f,0x3e, + 0x5,0x79,0x3c, 0x7,0x64,0x57, 0x5,0x7a,0x6f, 0x5,0x7b,0x45, + 0x6,0x28,0x7c, 0x4,0x24,0x71, 0xf,0x2a,0x49, 0x6,0x3b,0x34, + 0xf,0x32,0x2f, 0x6,0x4d,0x56, 0x6,0x4d,0x57, 0xf,0x4b,0x58, + 0xf,0x4b,0x59, 0xf,0x51,0x56, 0x6,0x60,0x73, 0xf,0x5c,0x37, + 0x7,0x42,0x25, 0xf,0x60,0x42, 0x5,0x70,0x79, 0xf,0x68,0x34, + 0xf,0x69,0x67, 0x7,0x65,0x3d, 0x5,0x7c,0x2c, 0x6,0x25,0x4a, + 0x6,0x28,0x7e, 0x4,0x24,0x72, 0x6,0x28,0x7d, 0x6,0x2d,0x70, + 0x5,0x2b,0x3a, 0x6,0x34,0x32, 0xf,0x2d,0x30, 0x5,0x2f,0x72, + 0x6,0x3b,0x36, 0x4,0x2f,0x49, 0xf,0x32,0x30, 0x6,0x3b,0x37, + 0x6,0x3b,0x35, 0x6,0x43,0x66, 0x6,0x43,0x65, 0xf,0x37,0x6d, + 0xf,0x37,0x6e, 0x6,0x4d,0x59, 0x6,0x4d,0x5a, 0x6,0x57,0x24, + 0x5,0x49,0x25, 0xf,0x4b,0x5a, 0x4,0x4c,0x60, 0x4,0x4c,0x61, + 0x5,0x4f,0x7e, 0xf,0x51,0x57, 0x7,0x27,0x3d, 0x4,0x52,0x69, + 0x5,0x57,0x3c, 0x7,0x3a,0x66, 0x5,0x5d,0x60, 0x5,0x5d,0x5f, + 0xf,0x5c,0x38, 0xf,0x60,0x43, 0x5,0x69,0x27, 0x4,0x60,0x75, + 0x5,0x6d,0x31, 0xf,0x63,0x4e, 0x7,0x49,0x2c, 0x5,0x6d,0x2f, + 0x5,0x6d,0x30, 0x7,0x62,0x51, 0x6,0x29,0x21, 0x6,0x2d,0x71, + 0x6,0x2d,0x72, 0x6,0x3b,0x3a, 0xf,0x2d,0x31, 0x6,0x3b,0x38, + 0x6,0x3b,0x39, 0x5,0x34,0x77, 0x4,0x34,0x56, 0x6,0x4d,0x5b, + 0x5,0x42,0x2a, 0x5,0x49,0x26, 0xf,0x4b,0x5b, 0x5,0x50,0x21, + 0x7,0x27,0x3e, 0xf,0x51,0x58, 0x5,0x50,0x22, 0x7,0x31,0x71, + 0x4,0x52,0x6a, 0x5,0x57,0x3d, 0xf,0x57,0x34, 0x4,0x58,0x2f, + 0x5,0x63,0x70, 0x5,0x63,0x71, 0x4,0x24,0x74, 0x6,0x25,0x4b, + 0x6,0x23,0x64, 0x6,0x2d,0x73, 0x6,0x2d,0x74, 0xf,0x2d,0x32, + 0x4,0x2f,0x4b, 0x6,0x34,0x33, 0x6,0x3b,0x3b, 0x6,0x3b,0x41, + 0x6,0x3b,0x3d, 0x6,0x3b,0x3c, 0x4,0x2f,0x4c, 0x6,0x3b,0x3f, + 0x6,0x3b,0x40, 0x6,0x43,0x69, 0x5,0x34,0x78, 0x6,0x3b,0x3e, + 0x6,0x43,0x68, 0x6,0x43,0x6b, 0x6,0x43,0x6a, 0x5,0x3b,0x52, + 0x6,0x4d,0x5c, 0x5,0x3b,0x53, 0x5,0x49,0x27, 0x6,0x57,0x28, + 0x6,0x57,0x27, 0x6,0x57,0x25, 0x6,0x60,0x74, 0x6,0x60,0x7a, + 0x6,0x60,0x75, 0x6,0x60,0x76, 0x5,0x50,0x23, 0x7,0x27,0x3f, + 0x6,0x60,0x77, 0x6,0x60,0x7b, 0x6,0x60,0x78, 0x7,0x27,0x40, + 0x7,0x27,0x41, 0x7,0x27,0x42, 0x6,0x60,0x79, 0x5,0x49,0x28, + 0x5,0x50,0x24, 0x5,0x50,0x25, 0x7,0x27,0x43, 0x7,0x27,0x44, + 0x7,0x31,0x72, 0x7,0x27,0x45, 0x7,0x27,0x46, 0xf,0x57,0x35, + 0x7,0x31,0x74, 0x7,0x31,0x73, 0x5,0x5d,0x62, 0x7,0x31,0x77, + 0x7,0x31,0x76, 0x7,0x31,0x75, 0x5,0x5d,0x61, 0x5,0x5d,0x64, + 0x7,0x3a,0x67, 0x7,0x42,0x28, 0x7,0x42,0x27, 0x5,0x5d,0x65, + 0x4,0x5c,0x77, 0x7,0x42,0x26, 0xf,0x60,0x44, 0xf,0x60,0x45, + 0x7,0x49,0x2d, 0x5,0x63,0x73, 0x5,0x63,0x72, 0x7,0x49,0x2e, + 0x7,0x4f,0x3f, 0x5,0x69,0x28, 0x5,0x6d,0x33, 0x5,0x6d,0x34, + 0x5,0x6d,0x35, 0x7,0x4f,0x3e, 0x7,0x49,0x2f, 0xf,0x63,0x4f, + 0x5,0x69,0x29, 0x7,0x4f,0x40, 0x7,0x4f,0x41, 0x5,0x70,0x7a, + 0xf,0x65,0x78, 0xf,0x68,0x35, 0xf,0x68,0x37, 0x7,0x58,0x66, + 0xf,0x68,0x36, 0x7,0x58,0x67, 0x7,0x5c,0x49, 0x5,0x77,0x7e, + 0x7,0x61,0x37, 0x5,0x79,0x3d, 0x5,0x79,0x3f, 0x5,0x79,0x3e, + 0xf,0x6c,0x6a, 0x7,0x65,0x3e, 0x7,0x65,0x3f, 0x7,0x66,0x53, + 0x5,0x7c,0x50, 0xf,0x25,0x2b, 0x6,0x34,0x34, 0x4,0x2f,0x4e, + 0x4,0x2f,0x4d, 0x6,0x3b,0x42, 0x6,0x3b,0x43, 0x6,0x3b,0x44, + 0x5,0x2f,0x73, 0x5,0x2f,0x74, 0x6,0x43,0x6c, 0x6,0x43,0x6d, + 0x6,0x41,0x7d, 0x6,0x4d,0x60, 0x6,0x4d,0x5f, 0x6,0x4d,0x61, + 0xf,0x3e,0x50, 0x5,0x49,0x29, 0x4,0x46,0x4d, 0x5,0x45,0x53, + 0x4,0x46,0x4e, 0x6,0x57,0x29, 0xf,0x4b,0x5c, 0x6,0x60,0x7c, + 0x6,0x60,0x7e, 0x6,0x60,0x7d, 0x7,0x27,0x47, 0xf,0x51,0x59, + 0x7,0x27,0x49, 0x7,0x27,0x48, 0x7,0x31,0x78, 0x5,0x57,0x3e, + 0x7,0x31,0x79, 0x7,0x3a,0x68, 0xf,0x60,0x46, 0x5,0x63,0x74, + 0x7,0x42,0x2a, 0x7,0x42,0x29, 0x5,0x6d,0x36, 0x5,0x70,0x7b, + 0x7,0x5c,0x4a, 0x5,0x76,0x3e, 0x5,0x50,0x26, 0x5,0x50,0x27, + 0xf,0x60,0x47, 0x7,0x4f,0x42, 0x7,0x5c,0x4b, 0x7,0x5f,0x3f, + 0x7,0x61,0x39, 0x5,0x7a,0x70, 0x5,0x24,0x74, 0x4,0x27,0x71, + 0x4,0x27,0x70, 0x6,0x2d,0x77, 0x6,0x2d,0x76, 0x6,0x2d,0x75, + 0x5,0x27,0x5f, 0x4,0x2b,0x31, 0x4,0x2b,0x35, 0x4,0x2b,0x34, + 0x6,0x34,0x35, 0x6,0x34,0x37, 0x6,0x34,0x36, 0x6,0x3b,0x4a, + 0x5,0x2f,0x75, 0x6,0x3b,0x49, 0x6,0x3b,0x45, 0x5,0x2f,0x76, + 0x4,0x2f,0x52, 0x4,0x2f,0x51, 0x6,0x3b,0x46, 0x6,0x3b,0x47, + 0x6,0x3b,0x48, 0x5,0x34,0x7a, 0x4,0x34,0x59, 0x4,0x34,0x5b, + 0x6,0x43,0x72, 0x5,0x34,0x7b, 0x6,0x43,0x6e, 0x6,0x43,0x6f, + 0xf,0x37,0x71, 0x5,0x34,0x79, 0xf,0x37,0x70, 0xf,0x37,0x72, + 0x5,0x3b,0x54, 0x6,0x4d,0x65, 0x6,0x4d,0x64, 0x4,0x34,0x5a, + 0x4,0x3a,0x52, 0x4,0x3a,0x50, 0x4,0x3a,0x51, 0x4,0x3a,0x53, + 0x6,0x4d,0x66, 0x5,0x42,0x2b, 0x6,0x57,0x2c, 0x5,0x42,0x2c, + 0x6,0x57,0x2a, 0xf,0x44,0x72, 0x6,0x57,0x2b, 0x6,0x57,0x2d, + 0x6,0x57,0x2e, 0x5,0x42,0x2e, 0x6,0x61,0x27, 0x5,0x49,0x2d, + 0x5,0x49,0x2b, 0x4,0x46,0x52, 0x6,0x61,0x22, 0x6,0x61,0x26, + 0xf,0x4b,0x5e, 0xf,0x4b,0x5f, 0xf,0x4b,0x5d, 0x6,0x61,0x23, + 0x5,0x49,0x2a, 0x5,0x50,0x2f, 0x4,0x4c,0x67, 0x4,0x4c,0x66, + 0x5,0x50,0x2e, 0x5,0x50,0x2b, 0x5,0x50,0x2c, 0x5,0x50,0x30, + 0x5,0x50,0x28, 0x7,0x27,0x4f, 0x7,0x27,0x4d, 0x5,0x50,0x31, + 0x7,0x27,0x4a, 0x7,0x27,0x4c, 0x7,0x27,0x4e, 0x7,0x27,0x4b, + 0x5,0x50,0x2d, 0x5,0x50,0x29, 0x5,0x50,0x2a, 0x5,0x57,0x42, + 0x5,0x57,0x3f, 0x5,0x57,0x43, 0x7,0x31,0x7c, 0x5,0x57,0x40, + 0x7,0x32,0x21, 0x7,0x31,0x7d, 0x7,0x32,0x23, 0x5,0x57,0x41, + 0x7,0x32,0x22, 0xf,0x57,0x36, 0x7,0x31,0x7e, 0x7,0x31,0x7b, + 0x7,0x3a,0x6a, 0x4,0x58,0x31, 0x5,0x5d,0x6c, 0x5,0x5d,0x66, + 0x5,0x5d,0x69, 0x5,0x5d,0x68, 0x5,0x5d,0x6a, 0x5,0x5d,0x6b, + 0x4,0x5c,0x79, 0x5,0x63,0x7b, 0x7,0x42,0x2c, 0x5,0x63,0x75, + 0x5,0x63,0x7a, 0x5,0x63,0x7d, 0x5,0x63,0x79, 0x4,0x5c,0x7a, + 0x4,0x5c,0x7b, 0x5,0x63,0x76, 0x5,0x63,0x77, 0x5,0x63,0x7c, + 0x4,0x5c,0x78, 0x7,0x42,0x2d, 0x7,0x42,0x2b, 0x5,0x63,0x78, + 0x7,0x49,0x30, 0x5,0x69,0x2d, 0x5,0x69,0x2c, 0x5,0x69,0x2b, + 0x5,0x69,0x2a, 0x7,0x49,0x31, 0xf,0x63,0x50, 0x7,0x49,0x32, + 0x5,0x6d,0x37, 0x7,0x4f,0x43, 0x5,0x70,0x7d, 0x5,0x70,0x7c, + 0x7,0x54,0x52, 0x5,0x74,0x21, 0x5,0x74,0x22, 0x4,0x69,0x32, + 0x7,0x58,0x68, 0x7,0x54,0x50, 0x7,0x54,0x51, 0x4,0x6a,0x6f, + 0x7,0x5c,0x4c, 0x7,0x61,0x3b, 0x7,0x61,0x3a, 0x7,0x62,0x52, + 0x5,0x7a,0x71, 0x4,0x6e,0x4f, 0x6,0x34,0x38, 0xf,0x37,0x73, + 0x5,0x3b,0x3f, 0xf,0x3e,0x51, 0xf,0x51,0x5a, 0xf,0x5c,0x39, + 0x7,0x4f,0x44, 0x5,0x34,0x7c, 0x5,0x34,0x7d, 0x6,0x43,0x73, + 0x5,0x34,0x7e, 0xf,0x3e,0x52, 0x6,0x57,0x2f, 0x6,0x57,0x30, + 0x6,0x57,0x31, 0x6,0x61,0x29, 0xf,0x4b,0x60, 0x6,0x61,0x2a, + 0x6,0x61,0x28, 0x7,0x27,0x51, 0x7,0x27,0x50, 0x7,0x27,0x52, + 0xf,0x51,0x5b, 0xf,0x51,0x5c, 0xf,0x51,0x5d, 0x5,0x57,0x44, + 0x5,0x57,0x45, 0x7,0x32,0x25, 0x7,0x32,0x24, 0x5,0x6d,0x39, + 0x5,0x6d,0x38, 0x7,0x4f,0x45, 0xf,0x6c,0x37, 0x5,0x21,0x7b, + 0x6,0x23,0x38, 0x4,0x23,0x2e, 0x6,0x25,0x50, 0x6,0x25,0x51, + 0x6,0x2d,0x78, 0x6,0x25,0x4e, 0x5,0x23,0x26, 0x6,0x25,0x4d, + 0xf,0x22,0x6f, 0xf,0x22,0x70, 0xf,0x22,0x6e, 0x6,0x25,0x4c, + 0x4,0x24,0x77, 0x4,0x24,0x78, 0x4,0x24,0x7c, 0x6,0x29,0x22, + 0x4,0x24,0x7a, 0x6,0x29,0x25, 0x6,0x29,0x23, 0x6,0x29,0x24, + 0x6,0x29,0x26, 0xf,0x25,0x2c, 0xf,0x25,0x2d, 0xf,0x25,0x2e, + 0xf,0x25,0x2f, 0xf,0x25,0x30, 0xf,0x25,0x31, 0x6,0x2d,0x7b, + 0x4,0x27,0x7c, 0x4,0x27,0x77, 0x4,0x27,0x79, 0x5,0x27,0x62, + 0x4,0x27,0x7d, 0x4,0x27,0x78, 0x4,0x27,0x75, 0x5,0x27,0x60, + 0x6,0x2d,0x7c, 0x5,0x27,0x61, 0x4,0x27,0x74, 0x6,0x3b,0x4b, + 0x6,0x27,0x4c, 0x6,0x2e,0x21, 0x5,0x27,0x64, 0x4,0x27,0x76, + 0x6,0x2d,0x7a, 0x6,0x2d,0x7e, 0x6,0x3b,0x4d, 0x6,0x3b,0x4c, + 0xf,0x28,0x57, 0xf,0x28,0x58, 0xf,0x28,0x59, 0xf,0x28,0x5a, + 0xf,0x28,0x5b, 0xf,0x28,0x5d, 0xf,0x28,0x5e, 0xf,0x28,0x5f, + 0xf,0x28,0x60, 0xf,0x28,0x61, 0xf,0x28,0x62, 0xf,0x28,0x64, + 0x6,0x2d,0x79, 0x4,0x2b,0x3b, 0x4,0x2b,0x37, 0x4,0x2b,0x38, + 0x4,0x2b,0x39, 0x5,0x2b,0x3f, 0x6,0x34,0x43, 0x6,0x34,0x3b, + 0x4,0x2b,0x3c, 0x6,0x34,0x41, 0x6,0x34,0x3d, 0x5,0x2b,0x3d, + 0x6,0x34,0x39, 0x6,0x34,0x40, 0x6,0x34,0x3e, 0x6,0x34,0x42, + 0x6,0x34,0x45, 0x6,0x34,0x46, 0x5,0x2b,0x3b, 0x5,0x2b,0x3e, + 0x5,0x2b,0x3c, 0xf,0x2d,0x33, 0xf,0x2d,0x35, 0xf,0x2d,0x37, + 0xf,0x2d,0x38, 0xf,0x2d,0x39, 0xf,0x2d,0x3a, 0xf,0x2d,0x3b, + 0xf,0x2d,0x3c, 0xf,0x2d,0x36, 0x6,0x33,0x3e, 0x6,0x34,0x3f, + 0xf,0x2d,0x34, 0x6,0x2d,0x7d, 0x6,0x4d,0x68, 0xf,0x2a,0x52, + 0x5,0x2f,0x7c, 0x4,0x2f,0x56, 0x4,0x2f,0x57, 0x4,0x2f,0x62, + 0x5,0x2f,0x78, 0x5,0x2f,0x7a, 0x5,0x2f,0x7e, 0x4,0x2f,0x54, + 0x5,0x2f,0x77, 0x5,0x30,0x23, 0x4,0x2f,0x5b, 0x5,0x30,0x27, + 0x4,0x2f,0x58, 0x4,0x2f,0x65, 0x5,0x30,0x24, 0x4,0x2f,0x60, + 0x6,0x3b,0x5e, 0x6,0x3b,0x5f, 0x5,0x30,0x25, 0x6,0x3b,0x61, + 0x5,0x30,0x22, 0x4,0x2f,0x66, 0x6,0x3b,0x59, 0x6,0x3b,0x58, + 0x6,0x4d,0x67, 0x6,0x44,0x22, 0x6,0x3b,0x55, 0x5,0x2f,0x7d, + 0x6,0x3b,0x54, 0x6,0x3b,0x51, 0x6,0x3b,0x4f, 0x6,0x3b,0x5a, + 0x6,0x3b,0x5c, 0x5,0x2f,0x7b, 0x6,0x3b,0x57, 0x5,0x30,0x26, + 0x5,0x2f,0x79, 0x6,0x3b,0x53, 0x6,0x3b,0x5b, 0x6,0x3b,0x5d, + 0x6,0x3b,0x62, 0xf,0x32,0x33, 0xf,0x32,0x35, 0xf,0x32,0x36, + 0xf,0x32,0x37, 0xf,0x32,0x38, 0xf,0x32,0x39, 0xf,0x32,0x3b, + 0xf,0x32,0x3c, 0xf,0x32,0x3d, 0xf,0x32,0x3f, 0xf,0x32,0x40, + 0xf,0x32,0x42, 0xf,0x32,0x43, 0xf,0x32,0x44, 0xf,0x32,0x45, + 0xf,0x32,0x47, 0xf,0x32,0x48, 0xf,0x32,0x49, 0xf,0x32,0x4a, + 0xf,0x32,0x4b, 0x6,0x3b,0x50, 0xf,0x32,0x46, 0xf,0x32,0x4c, + 0xf,0x32,0x3e, 0x5,0x35,0x2b, 0x5,0x35,0x2e, 0x5,0x35,0x27, + 0x4,0x34,0x70, 0x5,0x35,0x2c, 0x4,0x34,0x61, 0x4,0x34,0x6e, + 0x4,0x34,0x68, 0x6,0x44,0x32, 0x4,0x34,0x72, 0x4,0x34,0x75, + 0x6,0x44,0x26, 0x6,0x43,0x7b, 0x6,0x44,0x23, 0x5,0x35,0x23, + 0x6,0x43,0x79, 0x6,0x43,0x75, 0x4,0x34,0x60, 0x5,0x35,0x32, + 0x6,0x43,0x74, 0x6,0x44,0x21, 0x6,0x44,0x38, 0x4,0x34,0x64, + 0x6,0x44,0x36, 0x6,0x4e,0x3a, 0x6,0x44,0x34, 0x6,0x3b,0x60, + 0x6,0x4d,0x78, 0x4,0x34,0x5f, 0x5,0x35,0x21, 0x4,0x34,0x6b, + 0x6,0x43,0x77, 0x6,0x44,0x24, 0x5,0x35,0x30, 0x6,0x44,0x2f, + 0x6,0x44,0x35, 0x6,0x44,0x2e, 0x6,0x44,0x29, 0x5,0x35,0x2f, + 0x6,0x44,0x33, 0x6,0x43,0x78, 0x6,0x44,0x27, 0x5,0x35,0x31, + 0x5,0x42,0x2f, 0x6,0x57,0x32, 0x6,0x57,0x33, 0x6,0x44,0x30, + 0x6,0x44,0x31, 0x6,0x43,0x7e, 0x5,0x35,0x22, 0x5,0x35,0x33, + 0x6,0x44,0x2a, 0x5,0x35,0x29, 0x5,0x35,0x2d, 0x5,0x35,0x26, + 0x6,0x4e,0x37, 0x6,0x44,0x39, 0x6,0x44,0x3a, 0x6,0x43,0x7c, + 0x6,0x43,0x7a, 0xf,0x37,0x74, 0xf,0x37,0x75, 0xf,0x37,0x76, + 0xf,0x37,0x77, 0xf,0x37,0x79, 0xf,0x37,0x7b, 0xf,0x37,0x7c, + 0xf,0x37,0x7d, 0xf,0x37,0x7e, 0xf,0x38,0x21, 0xf,0x38,0x22, + 0xf,0x38,0x24, 0xf,0x38,0x25, 0xf,0x38,0x26, 0xf,0x38,0x27, + 0xf,0x38,0x28, 0xf,0x38,0x29, 0xf,0x38,0x2a, 0xf,0x38,0x2b, + 0xf,0x38,0x2c, 0xf,0x38,0x2d, 0xf,0x38,0x2e, 0xf,0x38,0x2f, + 0xf,0x38,0x30, 0xf,0x38,0x31, 0xf,0x38,0x32, 0xf,0x38,0x33, + 0xf,0x38,0x34, 0xf,0x38,0x35, 0x5,0x3b,0x5d, 0x6,0x43,0x7d, + 0x5,0x35,0x28, 0x6,0x44,0x25, 0xf,0x37,0x7a, 0x6,0x44,0x2d, + 0x6,0x44,0x37, 0xf,0x38,0x23, 0x5,0x35,0x25, 0x5,0x3b,0x55, + 0x4,0x3a,0x55, 0x5,0x3b,0x69, 0x5,0x3b,0x6a, 0x5,0x3b,0x62, + 0x5,0x3b,0x6c, 0x5,0x3b,0x6d, 0x5,0x3b,0x63, 0x4,0x3a,0x5d, + 0x6,0x4d,0x7a, 0x6,0x4d,0x72, 0x6,0x4e,0x2b, 0x6,0x4d,0x70, + 0x6,0x4d,0x6b, 0x5,0x3b,0x5f, 0x5,0x3b,0x67, 0x5,0x3b,0x68, + 0x6,0x4d,0x7b, 0x6,0x4d,0x79, 0x5,0x3b,0x5e, 0x5,0x3b,0x6e, + 0x5,0x3b,0x6b, 0x4,0x34,0x6a, 0x4,0x3a,0x57, 0x4,0x3a,0x5a, + 0x4,0x3a,0x58, 0x4,0x3a,0x62, 0x5,0x3b,0x5a, 0x4,0x3a,0x54, + 0x6,0x4d,0x69, 0x6,0x4e,0x35, 0x4,0x3a,0x63, 0x6,0x4d,0x6a, + 0x5,0x3b,0x64, 0x6,0x4d,0x7c, 0x6,0x4e,0x36, 0x6,0x4d,0x7d, + 0x6,0x4e,0x2f, 0x6,0x4e,0x30, 0x4,0x3a,0x6b, 0x6,0x4e,0x26, + 0x4,0x3a,0x69, 0x6,0x4e,0x23, 0x5,0x3b,0x5c, 0x6,0x4e,0x28, + 0x6,0x4d,0x75, 0x6,0x4e,0x2d, 0x6,0x4d,0x74, 0x6,0x4e,0x22, + 0x6,0x4e,0x31, 0x6,0x4e,0x29, 0x5,0x3b,0x65, 0x6,0x61,0x32, + 0x6,0x61,0x2d, 0x6,0x61,0x2e, 0x5,0x3b,0x57, 0x6,0x4e,0x24, + 0x6,0x4d,0x6f, 0x6,0x4e,0x2e, 0x5,0x49,0x2e, 0x6,0x4d,0x73, + 0x6,0x4e,0x2c, 0x6,0x4d,0x77, 0x6,0x4e,0x25, 0x6,0x4d,0x6d, + 0x6,0x4e,0x2a, 0x4,0x3a,0x6a, 0x5,0x3b,0x60, 0x5,0x3b,0x5b, + 0x6,0x4d,0x76, 0x6,0x4e,0x38, 0x6,0x61,0x2b, 0x5,0x3b,0x66, + 0x6,0x61,0x2f, 0x5,0x3b,0x61, 0x6,0x4e,0x34, 0x6,0x61,0x31, + 0x6,0x61,0x30, 0x6,0x4d,0x6c, 0x6,0x4d,0x7e, 0x6,0x4c,0x7b, + 0x5,0x3b,0x58, 0x6,0x4d,0x6e, 0x6,0x4d,0x71, 0x6,0x4e,0x33, + 0x6,0x4e,0x39, 0xf,0x3e,0x53, 0xf,0x3e,0x55, 0xf,0x3e,0x56, + 0xf,0x3e,0x58, 0xf,0x3e,0x5a, 0xf,0x3e,0x5b, 0xf,0x3e,0x5c, + 0xf,0x3e,0x5d, 0xf,0x3e,0x5e, 0xf,0x3e,0x5f, 0xf,0x3e,0x60, + 0xf,0x3e,0x61, 0xf,0x3e,0x63, 0xf,0x3e,0x64, 0xf,0x3e,0x65, + 0xf,0x3e,0x68, 0xf,0x3e,0x69, 0xf,0x3e,0x6a, 0xf,0x3e,0x6d, + 0xf,0x3e,0x6f, 0xf,0x3e,0x70, 0xf,0x3e,0x71, 0xf,0x3e,0x72, + 0xf,0x3e,0x74, 0xf,0x3e,0x75, 0xf,0x3e,0x76, 0xf,0x3e,0x77, + 0xf,0x3e,0x78, 0xf,0x3e,0x79, 0xf,0x3e,0x7a, 0xf,0x3e,0x7b, + 0xf,0x3e,0x7c, 0xf,0x3e,0x7d, 0xf,0x3e,0x7e, 0x6,0x61,0x2c, + 0x5,0x3b,0x59, 0x6,0x4e,0x21, 0xf,0x3e,0x62, 0xf,0x3e,0x54, + 0xf,0x3e,0x6e, 0xf,0x3e,0x73, 0x4,0x40,0x43, 0x6,0x57,0x34, + 0x6,0x57,0x46, 0x5,0x42,0x4e, 0x6,0x57,0x3a, 0x6,0x57,0x3b, + 0x5,0x42,0x34, 0x4,0x40,0x3d, 0x6,0x57,0x49, 0x6,0x57,0x5a, + 0x4,0x40,0x40, 0x4,0x40,0x42, 0x5,0x42,0x45, 0x6,0x57,0x5e, + 0x5,0x42,0x3a, 0x4,0x40,0x37, 0x4,0x40,0x34, 0x6,0x57,0x41, + 0x6,0x57,0x63, 0x5,0x42,0x33, 0x6,0x57,0x51, 0x6,0x57,0x55, + 0x5,0x42,0x43, 0x6,0x57,0x4a, 0x4,0x40,0x38, 0x4,0x40,0x3b, + 0x5,0x42,0x36, 0x6,0x57,0x43, 0x4,0x40,0x3c, 0x4,0x40,0x45, + 0x5,0x42,0x41, 0x4,0x40,0x4d, 0x5,0x42,0x4f, 0x4,0x40,0x3e, + 0x5,0x42,0x46, 0x6,0x57,0x5d, 0x5,0x42,0x3f, 0x4,0x40,0x33, + 0x4,0x40,0x31, 0x6,0x57,0x65, 0x4,0x40,0x3f, 0x6,0x57,0x42, + 0x5,0x42,0x48, 0x5,0x42,0x42, 0x5,0x42,0x38, 0x5,0x42,0x3e, + 0x6,0x57,0x38, 0x6,0x57,0x53, 0x6,0x57,0x4f, 0x6,0x57,0x40, + 0x6,0x57,0x67, 0x5,0x42,0x3d, 0x6,0x57,0x39, 0x6,0x57,0x64, + 0x6,0x57,0x37, 0x5,0x42,0x50, 0x6,0x57,0x4e, 0x6,0x57,0x45, + 0x6,0x57,0x3c, 0x5,0x42,0x49, 0x5,0x42,0x4d, 0x5,0x42,0x3b, + 0x5,0x42,0x47, 0x6,0x57,0x52, 0x6,0x57,0x60, 0x6,0x57,0x5c, + 0x6,0x57,0x48, 0x6,0x57,0x56, 0x5,0x42,0x39, 0x4,0x40,0x39, + 0x6,0x57,0x57, 0x5,0x42,0x30, 0x5,0x42,0x40, 0x5,0x42,0x32, + 0x5,0x42,0x4a, 0x6,0x57,0x3f, 0x4,0x40,0x35, 0x4,0x40,0x4b, + 0x6,0x57,0x4c, 0x5,0x42,0x35, 0x5,0x42,0x31, 0x6,0x57,0x47, + 0x6,0x57,0x58, 0x7,0x27,0x53, 0x6,0x57,0x61, 0x5,0x42,0x3c, + 0x6,0x57,0x44, 0x6,0x57,0x54, 0x6,0x57,0x36, 0x6,0x57,0x62, + 0x6,0x57,0x66, 0x6,0x57,0x59, 0x4,0x40,0x4e, 0x5,0x42,0x44, + 0x5,0x42,0x4b, 0x6,0x57,0x35, 0x6,0x57,0x3e, 0x6,0x57,0x4b, + 0x6,0x57,0x4d, 0x6,0x57,0x5b, 0x6,0x57,0x5f, 0xf,0x44,0x73, + 0xf,0x44,0x75, 0xf,0x44,0x76, 0xf,0x44,0x77, 0xf,0x44,0x78, + 0xf,0x44,0x79, 0xf,0x44,0x7a, 0xf,0x44,0x7b, 0xf,0x44,0x7c, + 0xf,0x44,0x7d, 0xf,0x44,0x7e, 0xf,0x45,0x21, 0xf,0x45,0x22, + 0xf,0x45,0x23, 0xf,0x45,0x24, 0xf,0x45,0x25, 0xf,0x45,0x26, + 0xf,0x45,0x27, 0xf,0x45,0x28, 0xf,0x45,0x29, 0xf,0x45,0x2a, + 0xf,0x45,0x2b, 0xf,0x45,0x2c, 0xf,0x45,0x2e, 0xf,0x45,0x2f, + 0xf,0x45,0x30, 0xf,0x45,0x31, 0x5,0x42,0x4c, 0x4,0x40,0x4a, + 0x6,0x57,0x3d, 0x6,0x4e,0x32, 0xf,0x3e,0x57, 0x5,0x42,0x37, + 0x4,0x46,0x66, 0x6,0x61,0x60, 0x5,0x49,0x45, 0x6,0x61,0x33, + 0x6,0x61,0x43, 0x5,0x49,0x4b, 0x4,0x46,0x63, 0x6,0x61,0x56, + 0x4,0x46,0x56, 0x6,0x61,0x45, 0x4,0x46,0x59, 0x6,0x61,0x3c, + 0x5,0x49,0x41, 0x6,0x61,0x4a, 0x4,0x46,0x55, 0x6,0x61,0x52, + 0x5,0x49,0x3d, 0x6,0x61,0x40, 0x6,0x61,0x59, 0x5,0x49,0x49, + 0x5,0x49,0x46, 0x6,0x61,0x4c, 0x5,0x49,0x3a, 0x4,0x46,0x5a, + 0x6,0x61,0x39, 0x6,0x61,0x55, 0x6,0x61,0x4d, 0x6,0x61,0x3f, + 0x5,0x49,0x44, 0x5,0x49,0x39, 0x5,0x49,0x30, 0x4,0x46,0x62, + 0x6,0x61,0x41, 0x4,0x46,0x5e, 0x6,0x61,0x36, 0x4,0x46,0x5d, + 0x4,0x46,0x6b, 0x4,0x46,0x5b, 0x5,0x49,0x3f, 0x7,0x27,0x58, + 0x6,0x61,0x37, 0x5,0x49,0x32, 0x5,0x49,0x37, 0x5,0x49,0x31, + 0x5,0x49,0x48, 0x5,0x50,0x3b, 0x4,0x46,0x5f, 0x5,0x49,0x43, + 0x6,0x61,0x38, 0x4,0x46,0x68, 0x6,0x61,0x50, 0x5,0x49,0x38, + 0x6,0x61,0x57, 0x6,0x61,0x46, 0x6,0x61,0x3b, 0x5,0x49,0x40, + 0x5,0x49,0x36, 0x7,0x32,0x27, 0x5,0x49,0x2f, 0x5,0x49,0x34, + 0x6,0x61,0x47, 0x6,0x61,0x49, 0x6,0x61,0x4b, 0x6,0x61,0x4e, + 0x6,0x61,0x5a, 0x6,0x61,0x5d, 0x6,0x61,0x5e, 0xf,0x4b,0x61, + 0xf,0x4b,0x62, 0xf,0x4b,0x63, 0xf,0x4b,0x66, 0xf,0x4b,0x68, + 0xf,0x4b,0x69, 0xf,0x4b,0x6a, 0xf,0x4b,0x6b, 0xf,0x4b,0x6c, + 0xf,0x4b,0x6d, 0xf,0x4b,0x6e, 0xf,0x4b,0x6f, 0xf,0x4b,0x70, + 0xf,0x4b,0x71, 0xf,0x4b,0x72, 0xf,0x4b,0x73, 0xf,0x4b,0x74, + 0xf,0x4b,0x75, 0xf,0x4b,0x76, 0xf,0x4b,0x78, 0xf,0x4b,0x79, + 0xf,0x4b,0x7a, 0xf,0x4b,0x7c, 0xf,0x4b,0x7d, 0xf,0x4b,0x7e, + 0xf,0x4c,0x21, 0xf,0x4c,0x22, 0xf,0x4c,0x23, 0xf,0x4c,0x25, + 0xf,0x4c,0x26, 0xf,0x4c,0x27, 0xf,0x4c,0x28, 0xf,0x4c,0x29, + 0xf,0x4c,0x2a, 0x6,0x61,0x48, 0x5,0x49,0x42, 0x6,0x61,0x53, + 0x6,0x61,0x51, 0x6,0x57,0x68, 0x5,0x49,0x4a, 0x6,0x61,0x5c, + 0x6,0x61,0x5f, 0x6,0x61,0x5b, 0x6,0x61,0x3a, 0x6,0x61,0x35, + 0x6,0x61,0x42, 0x6,0x61,0x3d, 0x6,0x57,0x50, 0xf,0x4b,0x64, + 0xf,0x4b,0x67, 0x6,0x61,0x54, 0x4,0x46,0x6a, 0x4,0x46,0x54, + 0x5,0x49,0x35, 0x5,0x49,0x4d, 0x7,0x32,0x26, 0x5,0x49,0x33, + 0x6,0x61,0x61, 0x5,0x49,0x47, 0x5,0x49,0x4c, 0x5,0x57,0x46, + 0xf,0x4b,0x7b, 0x5,0x49,0x3e, 0x7,0x27,0x6c, 0x4,0x4c,0x7e, + 0x5,0x50,0x32, 0x4,0x4c,0x69, 0x4,0x4c,0x7c, 0x7,0x28,0x21, + 0x5,0x50,0x35, 0x7,0x28,0x24, 0x7,0x27,0x77, 0x7,0x27,0x5c, + 0x5,0x50,0x39, 0x7,0x27,0x69, 0x7,0x27,0x78, 0x7,0x27,0x79, + 0x7,0x27,0x6a, 0x7,0x27,0x73, 0x5,0x50,0x3a, 0x7,0x27,0x6f, + 0x4,0x4c,0x75, 0x5,0x50,0x3d, 0x5,0x50,0x42, 0x7,0x27,0x60, + 0x7,0x28,0x22, 0x5,0x50,0x40, 0x5,0x50,0x3f, 0x5,0x57,0x47, + 0x5,0x50,0x41, 0x5,0x50,0x4b, 0x7,0x27,0x6b, 0x7,0x27,0x76, + 0x7,0x27,0x59, 0x7,0x27,0x72, 0x7,0x27,0x65, 0x5,0x50,0x48, + 0x5,0x50,0x37, 0x4,0x4c,0x7b, 0x7,0x27,0x54, 0x7,0x27,0x5b, + 0x7,0x27,0x64, 0x7,0x27,0x63, 0x7,0x27,0x67, 0x5,0x50,0x33, + 0x7,0x27,0x66, 0x7,0x27,0x7d, 0x7,0x27,0x5e, 0x5,0x50,0x3e, + 0x7,0x27,0x56, 0x5,0x50,0x34, 0x5,0x50,0x4a, 0x7,0x27,0x7c, + 0x7,0x27,0x62, 0x7,0x27,0x5d, 0x7,0x27,0x6e, 0x4,0x4c,0x76, + 0x5,0x50,0x49, 0x5,0x50,0x45, 0x7,0x27,0x74, 0x5,0x57,0x58, + 0x4,0x4d,0x22, 0x5,0x50,0x43, 0x7,0x27,0x55, 0x7,0x27,0x5a, + 0x7,0x27,0x5f, 0x7,0x27,0x70, 0x7,0x27,0x71, 0x7,0x28,0x23, + 0xf,0x51,0x5e, 0xf,0x51,0x5f, 0xf,0x51,0x60, 0xf,0x51,0x62, + 0xf,0x51,0x63, 0xf,0x51,0x66, 0xf,0x51,0x67, 0xf,0x51,0x68, + 0xf,0x51,0x69, 0xf,0x51,0x6a, 0xf,0x51,0x6c, 0xf,0x51,0x6d, + 0xf,0x51,0x6e, 0xf,0x51,0x6f, 0xf,0x51,0x70, 0xf,0x51,0x72, + 0xf,0x51,0x75, 0xf,0x51,0x77, 0x4,0x4d,0x23, 0x7,0x27,0x7a, + 0x5,0x50,0x44, 0x7,0x27,0x7e, 0x7,0x27,0x75, 0x7,0x27,0x68, + 0xf,0x51,0x71, 0xf,0x51,0x61, 0xf,0x51,0x6b, 0x5,0x50,0x36, + 0x7,0x27,0x57, 0x5,0x50,0x47, 0x5,0x50,0x3c, 0x6,0x61,0x34, + 0x7,0x42,0x2e, 0xf,0x4c,0x24, 0x7,0x32,0x51, 0x4,0x53,0x2d, + 0x7,0x32,0x32, 0x4,0x53,0x2a, 0x4,0x53,0x34, 0x7,0x32,0x53, + 0x5,0x57,0x49, 0x4,0x53,0x2b, 0x5,0x57,0x5d, 0x7,0x32,0x43, + 0x5,0x57,0x54, 0x4,0x52,0x71, 0x4,0x53,0x30, 0x5,0x57,0x51, + 0x5,0x57,0x5b, 0x7,0x32,0x3c, 0x4,0x52,0x75, 0x5,0x57,0x5a, + 0x5,0x57,0x4b, 0x5,0x57,0x5f, 0x7,0x32,0x33, 0x5,0x57,0x61, + 0x4,0x53,0x2f, 0x7,0x32,0x28, 0x5,0x57,0x4d, 0x5,0x57,0x4f, + 0x7,0x32,0x4c, 0x5,0x57,0x55, 0x5,0x57,0x62, 0x7,0x32,0x3d, + 0x7,0x32,0x3b, 0x5,0x50,0x4c, 0x4,0x52,0x70, 0x5,0x57,0x48, + 0x5,0x57,0x5e, 0x7,0x32,0x45, 0x7,0x32,0x4b, 0x7,0x32,0x41, + 0x5,0x57,0x64, 0x5,0x57,0x60, 0x7,0x28,0x25, 0x7,0x27,0x7b, + 0x7,0x32,0x52, 0x5,0x5d,0x7a, 0x4,0x53,0x26, 0x7,0x32,0x2e, + 0x4,0x53,0x29, 0x7,0x32,0x36, 0x5,0x57,0x53, 0x4,0x53,0x28, + 0x4,0x52,0x74, 0x5,0x50,0x38, 0x7,0x32,0x2f, 0x5,0x57,0x52, + 0x7,0x32,0x38, 0x5,0x57,0x56, 0x5,0x57,0x4c, 0x7,0x32,0x2d, + 0x7,0x32,0x57, 0x7,0x32,0x4e, 0x4,0x53,0x2e, 0x5,0x57,0x5c, + 0x7,0x32,0x2a, 0x4,0x52,0x78, 0x7,0x32,0x39, 0x7,0x42,0x2f, + 0x7,0x32,0x2b, 0x7,0x32,0x55, 0x4,0x53,0x32, 0x7,0x32,0x42, + 0x7,0x32,0x35, 0x7,0x32,0x3f, 0xf,0x57,0x3e, 0xf,0x57,0x3f, + 0xf,0x57,0x40, 0xf,0x57,0x41, 0x5,0x57,0x4a, 0x5,0x57,0x50, + 0x5,0x57,0x57, 0x7,0x32,0x2c, 0x7,0x32,0x34, 0x7,0x32,0x37, + 0x7,0x32,0x3e, 0x7,0x32,0x40, 0x7,0x32,0x47, 0x7,0x32,0x49, + 0x7,0x32,0x4d, 0x7,0x32,0x4f, 0x7,0x32,0x54, 0x7,0x32,0x59, + 0x7,0x32,0x5a, 0xf,0x57,0x37, 0xf,0x57,0x38, 0xf,0x57,0x39, + 0xf,0x57,0x3a, 0xf,0x57,0x3b, 0xf,0x57,0x3c, 0xf,0x57,0x3d, + 0xf,0x57,0x42, 0xf,0x57,0x43, 0xf,0x57,0x44, 0xf,0x57,0x49, + 0xf,0x57,0x4c, 0xf,0x57,0x4d, 0xf,0x57,0x4e, 0xf,0x57,0x4f, + 0xf,0x57,0x50, 0xf,0x57,0x51, 0xf,0x57,0x52, 0xf,0x57,0x53, + 0xf,0x57,0x54, 0xf,0x57,0x56, 0xf,0x57,0x57, 0xf,0x57,0x58, + 0xf,0x57,0x59, 0xf,0x57,0x5a, 0xf,0x57,0x5b, 0xf,0x57,0x5c, + 0x7,0x32,0x31, 0xf,0x57,0x45, 0x4,0x52,0x7d, 0x7,0x32,0x3a, + 0x7,0x32,0x58, 0x7,0x32,0x50, 0x5,0x57,0x65, 0x5,0x57,0x4e, + 0x7,0x32,0x30, 0x7,0x32,0x29, 0x7,0x32,0x48, 0xf,0x57,0x4a, + 0x7,0x32,0x56, 0x5,0x57,0x63, 0x5,0x57,0x59, 0x7,0x32,0x46, + 0x7,0x3a,0x76, 0x4,0x58,0x3a, 0x4,0x58,0x3f, 0x7,0x3a,0x6e, + 0x7,0x42,0x3b, 0x7,0x3a,0x78, 0x4,0x58,0x48, 0x4,0x58,0x49, + 0x5,0x57,0x66, 0x5,0x5d,0x75, 0x5,0x5d,0x7d, 0x5,0x5d,0x73, + 0x7,0x3b,0x2b, 0x7,0x3b,0x2f, 0x5,0x5d,0x6f, 0x4,0x58,0x4a, + 0x4,0x58,0x37, 0x7,0x3a,0x7b, 0x4,0x58,0x45, 0x5,0x5e,0x21, + 0x7,0x3a,0x7c, 0x7,0x3b,0x23, 0x7,0x3b,0x33, 0x5,0x5d,0x7e, + 0x5,0x5e,0x25, 0x7,0x3b,0x31, 0x5,0x5e,0x22, 0x5,0x5d,0x6e, + 0x5,0x5d,0x78, 0x7,0x3a,0x7e, 0x5,0x5d,0x7c, 0x7,0x3a,0x73, + 0x7,0x3b,0x24, 0x7,0x3b,0x2a, 0x5,0x5d,0x7b, 0x4,0x58,0x4b, + 0x5,0x5d,0x6d, 0x5,0x5e,0x23, 0x4,0x58,0x41, 0x7,0x3b,0x30, + 0x5,0x5d,0x77, 0x4,0x58,0x46, 0x5,0x5d,0x71, 0x5,0x5e,0x24, + 0x7,0x3b,0x25, 0x5,0x5d,0x76, 0x7,0x3a,0x70, 0x7,0x3a,0x75, + 0x7,0x42,0x39, 0x7,0x3a,0x6b, 0x7,0x3a,0x6c, 0x7,0x3b,0x35, + 0x7,0x3a,0x7d, 0x4,0x58,0x47, 0x7,0x3b,0x2e, 0x7,0x3a,0x72, + 0x7,0x3a,0x77, 0x7,0x49,0x34, 0x7,0x3a,0x71, 0x7,0x3b,0x22, + 0x7,0x3b,0x29, 0x7,0x32,0x4a, 0x7,0x3a,0x79, 0x7,0x3b,0x21, + 0x7,0x3b,0x37, 0x5,0x5d,0x74, 0x5,0x50,0x4d, 0x4,0x58,0x43, + 0x7,0x49,0x35, 0x5,0x5d,0x70, 0x5,0x5d,0x72, 0x7,0x3a,0x6d, + 0x7,0x3b,0x27, 0x7,0x3b,0x28, 0x7,0x3b,0x2c, 0x7,0x3b,0x34, + 0xf,0x5c,0x3a, 0xf,0x5c,0x3b, 0xf,0x5c,0x3c, 0xf,0x5c,0x3d, + 0xf,0x5c,0x3e, 0xf,0x5c,0x40, 0xf,0x5c,0x41, 0xf,0x5c,0x42, + 0xf,0x5c,0x43, 0xf,0x5c,0x44, 0xf,0x5c,0x45, 0xf,0x5c,0x46, + 0xf,0x5c,0x47, 0xf,0x5c,0x49, 0xf,0x5c,0x4a, 0xf,0x5c,0x4b, + 0xf,0x5c,0x4c, 0xf,0x5c,0x4f, 0xf,0x5c,0x50, 0x4,0x58,0x39, + 0x7,0x3a,0x7a, 0x7,0x3b,0x2d, 0x7,0x3b,0x36, 0x7,0x3a,0x74, + 0xf,0x5c,0x48, 0xf,0x5c,0x3f, 0xf,0x5c,0x4e, 0xf,0x57,0x55, + 0xf,0x63,0x5b, 0x5,0x64,0x2c, 0x7,0x42,0x4b, 0x4,0x5d,0x24, + 0x7,0x42,0x4c, 0x5,0x64,0x22, 0x4,0x5d,0x25, 0x5,0x5e,0x26, + 0x5,0x64,0x2f, 0x7,0x42,0x48, 0x5,0x64,0x25, 0x5,0x63,0x7e, + 0x7,0x42,0x30, 0x5,0x64,0x21, 0x5,0x64,0x29, 0x5,0x64,0x36, + 0x5,0x64,0x39, 0x7,0x42,0x36, 0x5,0x64,0x33, 0x7,0x42,0x46, + 0x4,0x5d,0x22, 0x5,0x5e,0x27, 0x5,0x64,0x38, 0x5,0x64,0x26, + 0x5,0x64,0x30, 0x7,0x42,0x3d, 0x5,0x64,0x24, 0x5,0x64,0x2e, + 0x7,0x42,0x4d, 0x4,0x5d,0x30, 0x5,0x64,0x31, 0x4,0x5d,0x2e, + 0x4,0x5d,0x26, 0x4,0x5d,0x2a, 0x5,0x64,0x34, 0x5,0x64,0x32, + 0x7,0x42,0x3e, 0x7,0x4f,0x46, 0x7,0x42,0x3a, 0x7,0x42,0x37, + 0x4,0x5d,0x2f, 0x7,0x49,0x44, 0x5,0x64,0x2b, 0x7,0x42,0x33, + 0x7,0x42,0x45, 0x7,0x42,0x49, 0x4,0x5d,0x2d, 0x7,0x3b,0x26, + 0x7,0x42,0x32, 0x7,0x42,0x34, 0x7,0x42,0x35, 0x7,0x42,0x3f, + 0x7,0x42,0x42, 0x7,0x42,0x44, 0x7,0x42,0x4a, 0x7,0x42,0x4e, + 0x7,0x42,0x4f, 0xf,0x60,0x48, 0xf,0x60,0x49, 0xf,0x60,0x4a, + 0xf,0x60,0x4b, 0xf,0x60,0x4c, 0xf,0x60,0x4f, 0xf,0x60,0x50, + 0xf,0x60,0x51, 0xf,0x60,0x52, 0xf,0x60,0x53, 0xf,0x60,0x54, + 0xf,0x60,0x55, 0xf,0x60,0x56, 0xf,0x60,0x57, 0xf,0x60,0x58, + 0xf,0x60,0x59, 0xf,0x60,0x5a, 0xf,0x60,0x5b, 0xf,0x60,0x5c, + 0xf,0x60,0x5e, 0xf,0x60,0x5f, 0x4,0x5d,0x27, 0x7,0x42,0x40, + 0x5,0x64,0x27, 0x7,0x42,0x41, 0x7,0x49,0x33, 0x5,0x64,0x35, + 0x5,0x64,0x2a, 0x4,0x5d,0x29, 0x7,0x42,0x47, 0x5,0x64,0x23, + 0x5,0x64,0x28, 0x5,0x64,0x37, 0x7,0x42,0x43, 0x7,0x42,0x31, + 0x5,0x69,0x3e, 0x5,0x69,0x2f, 0x7,0x4f,0x5d, 0x5,0x69,0x30, + 0x5,0x69,0x3a, 0x5,0x69,0x36, 0x4,0x60,0x7d, 0x4,0x60,0x79, + 0x5,0x69,0x3f, 0x5,0x69,0x37, 0x7,0x49,0x38, 0x7,0x49,0x45, + 0x5,0x69,0x3b, 0x5,0x69,0x35, 0x4,0x60,0x7c, 0x5,0x69,0x2e, + 0x5,0x6d,0x42, 0x7,0x49,0x43, 0x5,0x69,0x38, 0x7,0x49,0x46, + 0x5,0x69,0x39, 0x7,0x49,0x41, 0x7,0x49,0x54, 0x7,0x49,0x51, + 0x7,0x49,0x3c, 0x5,0x69,0x33, 0x5,0x69,0x3d, 0x7,0x49,0x4b, + 0x7,0x49,0x4e, 0x7,0x49,0x3e, 0x7,0x49,0x3d, 0x7,0x49,0x42, + 0x7,0x49,0x47, 0x7,0x4f,0x54, 0x7,0x49,0x4d, 0x7,0x49,0x39, + 0x7,0x49,0x4c, 0x7,0x49,0x4a, 0x7,0x4f,0x47, 0x5,0x69,0x34, + 0x5,0x69,0x32, 0x4,0x60,0x76, 0x5,0x69,0x3c, 0x7,0x49,0x49, + 0x7,0x49,0x40, 0x7,0x49,0x3f, 0x7,0x49,0x36, 0x7,0x49,0x37, + 0x7,0x49,0x3a, 0x7,0x49,0x48, 0x7,0x49,0x50, 0x7,0x49,0x52, + 0xf,0x63,0x51, 0xf,0x63,0x52, 0xf,0x63,0x54, 0xf,0x63,0x55, + 0xf,0x63,0x56, 0xf,0x63,0x57, 0xf,0x63,0x58, 0xf,0x63,0x59, + 0xf,0x63,0x5a, 0xf,0x63,0x5c, 0xf,0x63,0x5d, 0xf,0x63,0x5e, + 0xf,0x63,0x5f, 0xf,0x63,0x60, 0xf,0x63,0x61, 0xf,0x63,0x62, + 0xf,0x63,0x63, 0xf,0x63,0x64, 0xf,0x63,0x65, 0xf,0x63,0x66, + 0xf,0x63,0x67, 0xf,0x63,0x68, 0xf,0x63,0x69, 0x7,0x49,0x4f, + 0x7,0x4f,0x5e, 0x7,0x4f,0x55, 0x7,0x4f,0x4e, 0x5,0x6d,0x40, + 0x5,0x6d,0x47, 0x7,0x4f,0x61, 0x5,0x6d,0x41, 0x5,0x6d,0x44, + 0x4,0x64,0x39, 0x7,0x4f,0x58, 0x5,0x6d,0x46, 0x4,0x64,0x35, + 0x5,0x6d,0x3f, 0x5,0x70,0x7e, 0x7,0x4f,0x5f, 0x5,0x6d,0x3b, + 0x7,0x4f,0x51, 0x7,0x4f,0x50, 0x7,0x4f,0x4c, 0x5,0x6d,0x3e, + 0x5,0x6d,0x45, 0x7,0x4f,0x4d, 0x4,0x64,0x31, 0x7,0x4f,0x67, + 0x5,0x6d,0x3c, 0x7,0x4f,0x4b, 0x7,0x4f,0x53, 0x7,0x4f,0x62, + 0x7,0x4f,0x5b, 0x7,0x49,0x3b, 0x7,0x4f,0x65, 0x5,0x6d,0x43, + 0x4,0x64,0x2e, 0x7,0x4f,0x59, 0x5,0x6d,0x3d, 0x7,0x4f,0x66, + 0x7,0x4f,0x5a, 0x5,0x69,0x31, 0x7,0x54,0x67, 0x7,0x58,0x69, + 0x7,0x4f,0x49, 0x5,0x6d,0x3a, 0x5,0x6d,0x48, 0x7,0x4f,0x52, + 0x7,0x4f,0x56, 0x7,0x4f,0x57, 0x7,0x4f,0x5c, 0x7,0x4f,0x63, + 0x7,0x4f,0x64, 0xf,0x65,0x79, 0xf,0x65,0x7a, 0xf,0x65,0x7b, + 0xf,0x65,0x7c, 0xf,0x65,0x7d, 0xf,0x65,0x7e, 0xf,0x66,0x21, + 0xf,0x66,0x22, 0xf,0x66,0x23, 0xf,0x66,0x24, 0xf,0x66,0x25, + 0xf,0x66,0x26, 0xf,0x66,0x27, 0xf,0x66,0x28, 0xf,0x66,0x29, + 0xf,0x66,0x2a, 0xf,0x66,0x2b, 0xf,0x66,0x2c, 0x7,0x4f,0x4a, + 0x7,0x4f,0x48, 0x7,0x4f,0x60, 0x7,0x54,0x63, 0x4,0x69,0x35, + 0x5,0x71,0x28, 0x7,0x54,0x66, 0x7,0x54,0x5f, 0x5,0x71,0x24, + 0x4,0x67,0x2c, 0x4,0x67,0x2a, 0x7,0x54,0x59, 0x4,0x67,0x2e, + 0x5,0x71,0x22, 0x7,0x54,0x64, 0x5,0x71,0x25, 0x7,0x54,0x65, + 0x4,0x67,0x29, 0x5,0x6d,0x49, 0x5,0x71,0x27, 0x7,0x54,0x5b, + 0x7,0x54,0x53, 0x5,0x71,0x26, 0x7,0x54,0x62, 0x7,0x54,0x57, + 0x7,0x54,0x55, 0x7,0x54,0x60, 0x4,0x67,0x2d, 0x5,0x71,0x23, + 0x5,0x71,0x29, 0x5,0x71,0x2a, 0x7,0x54,0x54, 0x7,0x54,0x5c, + 0x7,0x4f,0x4f, 0x7,0x54,0x5a, 0x7,0x58,0x76, 0x5,0x71,0x21, + 0x7,0x54,0x56, 0x7,0x54,0x5d, 0x7,0x54,0x61, 0xf,0x68,0x38, + 0xf,0x68,0x3a, 0xf,0x68,0x3b, 0xf,0x68,0x3c, 0xf,0x68,0x3d, + 0xf,0x68,0x3e, 0xf,0x68,0x3f, 0xf,0x68,0x41, 0xf,0x68,0x42, + 0xf,0x68,0x43, 0xf,0x68,0x44, 0xf,0x68,0x40, 0x7,0x54,0x58, + 0x5,0x74,0x24, 0x4,0x69,0x36, 0x5,0x74,0x25, 0x5,0x74,0x27, + 0x5,0x74,0x28, 0x7,0x58,0x70, 0x5,0x74,0x29, 0x4,0x69,0x3b, + 0x4,0x69,0x3a, 0x7,0x58,0x77, 0x7,0x58,0x75, 0x7,0x58,0x6d, + 0x7,0x5c,0x53, 0x5,0x74,0x23, 0x5,0x74,0x26, 0x7,0x58,0x6f, + 0x4,0x69,0x38, 0x4,0x69,0x39, 0x7,0x58,0x6e, 0x4,0x69,0x34, + 0x7,0x58,0x73, 0x7,0x58,0x6b, 0x7,0x58,0x78, 0x7,0x58,0x6a, + 0x7,0x58,0x6c, 0x7,0x58,0x71, 0x7,0x58,0x74, 0xf,0x69,0x68, + 0xf,0x69,0x6b, 0xf,0x69,0x6c, 0x7,0x5c,0x4f, 0x7,0x5c,0x5a, + 0x4,0x6a,0x75, 0x5,0x76,0x40, 0x4,0x6a,0x74, 0x5,0x76,0x3f, + 0x4,0x6a,0x71, 0x4,0x6a,0x73, 0x4,0x6a,0x72, 0x4,0x6a,0x70, + 0x5,0x76,0x43, 0x7,0x5c,0x51, 0x7,0x5c,0x5b, 0x5,0x76,0x42, + 0x5,0x79,0x40, 0x7,0x5c,0x55, 0x5,0x76,0x44, 0x7,0x5c,0x57, + 0x7,0x5c,0x58, 0x7,0x5c,0x4d, 0x7,0x5c,0x50, 0x5,0x76,0x41, + 0x7,0x5c,0x56, 0x7,0x5c,0x54, 0x7,0x5c,0x52, 0x7,0x5c,0x59, + 0xf,0x6a,0x6d, 0xf,0x6a,0x6e, 0xf,0x6a,0x6f, 0x7,0x5c,0x4e, + 0xf,0x69,0x6a, 0x5,0x78,0x23, 0x5,0x78,0x22, 0x5,0x78,0x21, + 0x7,0x5f,0x40, 0x5,0x78,0x24, 0x7,0x5f,0x42, 0x7,0x5f,0x46, + 0x7,0x5f,0x43, 0x7,0x5f,0x44, 0x7,0x5f,0x49, 0x7,0x5f,0x41, + 0x7,0x5f,0x47, 0x5,0x79,0x42, 0xf,0x6b,0x60, 0xf,0x6b,0x61, + 0xf,0x6b,0x63, 0x7,0x5f,0x45, 0x7,0x5f,0x48, 0x5,0x79,0x43, + 0x7,0x62,0x55, 0x5,0x79,0x41, 0x7,0x62,0x53, 0x7,0x61,0x3e, + 0x7,0x61,0x3d, 0x7,0x61,0x3c, 0xf,0x6c,0x38, 0xf,0x6c,0x39, + 0x7,0x61,0x3f, 0x5,0x7a,0x35, 0x5,0x7a,0x36, 0x7,0x62,0x59, + 0x7,0x62,0x57, 0x7,0x62,0x56, 0x7,0x62,0x58, 0x7,0x62,0x54, + 0xf,0x6c,0x51, 0x7,0x62,0x48, 0x4,0x6d,0x7a, 0x7,0x63,0x68, + 0x5,0x7a,0x72, 0x4,0x6d,0x5f, 0x4,0x6d,0x7c, 0xf,0x6c,0x6b, + 0xf,0x6c,0x6d, 0x5,0x7b,0x46, 0x4,0x6e,0x35, 0x7,0x64,0x58, + 0x7,0x64,0x59, 0x5,0x7c,0x49, 0x7,0x65,0x40, 0x5,0x7b,0x66, + 0x7,0x65,0x60, 0x7,0x65,0x76, 0x5,0x7c,0x4f, 0x5,0x7c,0x3d, + 0x7,0x65,0x5f, 0xf,0x28,0x65, 0x4,0x2b,0x3f, 0x6,0x34,0x49, + 0x6,0x34,0x48, 0xf,0x32,0x4e, 0x5,0x35,0x36, 0x5,0x35,0x34, + 0x4,0x34,0x77, 0x4,0x34,0x76, 0x6,0x44,0x41, 0x4,0x34,0x78, + 0x6,0x44,0x42, 0x6,0x44,0x40, 0x6,0x44,0x3f, 0x6,0x3b,0x63, + 0x6,0x4e,0x3c, 0x5,0x3b,0x71, 0x6,0x4e,0x3d, 0xf,0x3f,0x22, + 0xf,0x3f,0x23, 0xf,0x3f,0x24, 0x5,0x42,0x55, 0x5,0x42,0x51, + 0x5,0x42,0x52, 0x6,0x57,0x6b, 0x6,0x57,0x6a, 0x6,0x57,0x69, + 0x5,0x49,0x4f, 0x6,0x61,0x62, 0x6,0x61,0x66, 0x4,0x46,0x6f, + 0x6,0x61,0x65, 0x6,0x61,0x67, 0x6,0x61,0x63, 0x6,0x61,0x64, + 0x5,0x49,0x50, 0xf,0x4c,0x2b, 0xf,0x4c,0x2c, 0x4,0x46,0x6e, + 0x7,0x28,0x29, 0x7,0x28,0x27, 0x7,0x32,0x5f, 0x5,0x50,0x4e, + 0x7,0x28,0x26, 0x7,0x28,0x28, 0xf,0x51,0x79, 0x7,0x26,0x29, + 0x5,0x57,0x6a, 0x5,0x57,0x6b, 0x5,0x57,0x68, 0x5,0x57,0x69, + 0x4,0x53,0x35, 0x5,0x57,0x67, 0x7,0x32,0x60, 0x7,0x32,0x5c, + 0x7,0x32,0x5d, 0x4,0x53,0x38, 0x4,0x53,0x37, 0x5,0x57,0x6d, + 0x7,0x32,0x5e, 0xf,0x57,0x5d, 0xf,0x57,0x5e, 0xf,0x57,0x5f, + 0x5,0x57,0x6c, 0x7,0x32,0x5b, 0x4,0x58,0x4c, 0x7,0x3b,0x39, + 0xf,0x5c,0x51, 0xf,0x5c,0x52, 0xf,0x5c,0x53, 0x7,0x42,0x51, + 0x5,0x64,0x3d, 0x4,0x5d,0x33, 0x7,0x42,0x50, 0x4,0x5d,0x31, + 0x7,0x42,0x52, 0x5,0x64,0x3c, 0xf,0x60,0x60, 0x7,0x49,0x56, + 0x7,0x49,0x55, 0x4,0x60,0x7e, 0x7,0x49,0x57, 0x7,0x4f,0x69, + 0x5,0x6d,0x4a, 0x7,0x4f,0x6a, 0x7,0x4c,0x26, 0x5,0x71,0x2c, + 0x7,0x4f,0x68, 0x5,0x71,0x2b, 0x5,0x70,0x4d, 0x7,0x54,0x6a, + 0x7,0x54,0x69, 0x5,0x74,0x2a, 0x7,0x5c,0x24, 0x4,0x6e,0x38, + 0x5,0x24,0x75, 0x6,0x29,0x29, 0x4,0x28,0x22, 0x6,0x2e,0x25, + 0xf,0x28,0x66, 0xf,0x28,0x67, 0xf,0x28,0x69, 0xf,0x28,0x6a, + 0x4,0x2b,0x43, 0x6,0x34,0x4b, 0x4,0x2b,0x40, 0x4,0x2b,0x42, + 0x6,0x34,0x4a, 0x5,0x2b,0x40, 0x6,0x34,0x4d, 0x6,0x34,0x4c, + 0x6,0x34,0x4e, 0xf,0x2d,0x3d, 0xf,0x2d,0x3f, 0xf,0x2d,0x42, + 0xf,0x2d,0x43, 0xf,0x2d,0x44, 0xf,0x2d,0x41, 0x4,0x2b,0x41, + 0x5,0x30,0x30, 0x6,0x3b,0x68, 0x5,0x30,0x2c, 0x5,0x30,0x33, + 0x6,0x3b,0x67, 0x5,0x30,0x2d, 0x5,0x30,0x32, 0x6,0x3b,0x66, + 0x4,0x2f,0x6c, 0x4,0x2f,0x6a, 0x4,0x2f,0x6e, 0x5,0x30,0x2e, + 0x6,0x3b,0x70, 0x5,0x30,0x29, 0x6,0x3b,0x6b, 0x5,0x30,0x31, + 0x5,0x30,0x28, 0x6,0x3b,0x6a, 0x5,0x30,0x2f, 0x5,0x30,0x34, + 0x6,0x3b,0x6e, 0x6,0x3b,0x64, 0x5,0x30,0x2b, 0x6,0x3b,0x65, + 0xf,0x32,0x4f, 0x6,0x3b,0x6c, 0x6,0x3b,0x6d, 0x5,0x30,0x2a, + 0x6,0x3b,0x6f, 0x5,0x35,0x37, 0x4,0x34,0x7d, 0x6,0x44,0x45, + 0x5,0x35,0x38, 0x5,0x35,0x39, 0x5,0x35,0x3a, 0x5,0x35,0x40, + 0x4,0x35,0x22, 0xf,0x38,0x3d, 0x4,0x35,0x23, 0x6,0x44,0x4c, + 0x5,0x35,0x3c, 0x4,0x35,0x21, 0x5,0x35,0x3d, 0x6,0x44,0x46, + 0x5,0x35,0x41, 0x6,0x44,0x49, 0x4,0x35,0x24, 0x4,0x34,0x7e, + 0x6,0x44,0x47, 0x6,0x44,0x4a, 0x6,0x44,0x44, 0x6,0x44,0x4b, + 0x6,0x44,0x4d, 0xf,0x38,0x36, 0xf,0x38,0x37, 0xf,0x38,0x38, + 0xf,0x38,0x39, 0xf,0x38,0x3b, 0xf,0x38,0x3c, 0xf,0x38,0x3e, + 0xf,0x38,0x3f, 0xf,0x38,0x40, 0x5,0x35,0x3e, 0x6,0x44,0x4e, + 0x4,0x35,0x25, 0x6,0x44,0x43, 0x5,0x35,0x3f, 0x5,0x35,0x3b, + 0x5,0x3b,0x73, 0x6,0x4e,0x40, 0xf,0x3f,0x28, 0x4,0x3a,0x73, + 0x6,0x4e,0x48, 0x5,0x3c,0x28, 0x5,0x3b,0x78, 0x5,0x3b,0x75, + 0x5,0x3b,0x77, 0x5,0x3b,0x7a, 0x5,0x3c,0x23, 0x5,0x3b,0x7d, + 0x6,0x4e,0x49, 0x6,0x4e,0x3e, 0x6,0x4e,0x43, 0x5,0x3b,0x76, + 0x5,0x3c,0x27, 0x6,0x4e,0x42, 0x6,0x4e,0x4b, 0x6,0x4e,0x4a, + 0x5,0x3b,0x7c, 0x6,0x4e,0x3f, 0x5,0x3b,0x79, 0x5,0x3c,0x21, + 0x6,0x4e,0x4d, 0x6,0x4e,0x44, 0x6,0x4e,0x45, 0x6,0x57,0x6e, + 0x5,0x3c,0x25, 0x5,0x3b,0x7e, 0x6,0x57,0x78, 0x5,0x3c,0x24, + 0x6,0x4e,0x4c, 0x6,0x4e,0x47, 0x5,0x3c,0x22, 0x5,0x3b,0x72, + 0x6,0x4e,0x41, 0xf,0x3f,0x25, 0xf,0x3f,0x26, 0xf,0x3f,0x27, + 0xf,0x3f,0x29, 0x4,0x3a,0x77, 0x6,0x57,0x70, 0x6,0x57,0x6f, + 0x4,0x40,0x5a, 0x4,0x40,0x5c, 0x6,0x57,0x74, 0x4,0x40,0x54, + 0x5,0x42,0x58, 0x5,0x42,0x5b, 0x5,0x42,0x56, 0x4,0x40,0x51, + 0x4,0x40,0x53, 0x5,0x42,0x5c, 0x5,0x42,0x5e, 0x5,0x42,0x5a, + 0x5,0x42,0x57, 0x4,0x40,0x5e, 0x4,0x40,0x50, 0x6,0x57,0x72, + 0x6,0x57,0x73, 0x6,0x57,0x6c, 0x6,0x57,0x6d, 0x6,0x61,0x68, + 0x6,0x57,0x71, 0x6,0x57,0x75, 0x5,0x42,0x59, 0xf,0x45,0x32, + 0xf,0x45,0x33, 0xf,0x45,0x34, 0xf,0x45,0x35, 0xf,0x45,0x36, + 0xf,0x45,0x37, 0xf,0x45,0x38, 0xf,0x45,0x39, 0x6,0x57,0x76, + 0x7,0x49,0x6b, 0x6,0x57,0x77, 0x6,0x57,0x79, 0x5,0x49,0x51, + 0x5,0x49,0x56, 0x5,0x49,0x5b, 0x5,0x49,0x57, 0x5,0x49,0x5c, + 0x4,0x47,0x21, 0x5,0x49,0x55, 0x4,0x46,0x7d, 0x6,0x62,0x23, + 0x5,0x49,0x5f, 0x4,0x46,0x77, 0x5,0x49,0x59, 0x4,0x46,0x74, + 0x6,0x61,0x76, 0x6,0x61,0x6a, 0x6,0x61,0x75, 0x4,0x47,0x22, + 0x5,0x49,0x5e, 0x6,0x61,0x6b, 0x6,0x61,0x71, 0x5,0x49,0x54, + 0x6,0x61,0x7c, 0x5,0x49,0x5d, 0x5,0x49,0x58, 0x6,0x61,0x7b, + 0x6,0x62,0x21, 0x5,0x49,0x60, 0x6,0x61,0x74, 0x6,0x61,0x7d, + 0x6,0x61,0x6d, 0x5,0x49,0x61, 0x5,0x49,0x62, 0x6,0x61,0x72, + 0x6,0x62,0x22, 0x5,0x49,0x5a, 0x6,0x61,0x6c, 0x6,0x61,0x79, + 0x6,0x61,0x7a, 0x6,0x61,0x70, 0x5,0x49,0x52, 0x6,0x61,0x6e, + 0x5,0x49,0x53, 0x6,0x61,0x73, 0xf,0x4c,0x2d, 0xf,0x4c,0x2e, + 0xf,0x4c,0x30, 0xf,0x4c,0x31, 0xf,0x4c,0x32, 0x6,0x61,0x78, + 0x4,0x40,0x58, 0x6,0x61,0x7e, 0x6,0x61,0x6f, 0x4,0x4d,0x2d, + 0x7,0x28,0x43, 0x5,0x50,0x53, 0x4,0x4d,0x2e, 0x4,0x4d,0x2b, + 0x7,0x28,0x38, 0x4,0x4d,0x34, 0x5,0x50,0x5f, 0x7,0x28,0x37, + 0x7,0x28,0x2c, 0x5,0x50,0x51, 0x7,0x28,0x2b, 0x7,0x28,0x35, + 0x7,0x28,0x3f, 0x5,0x50,0x57, 0x4,0x4d,0x32, 0x4,0x4d,0x2a, + 0x7,0x28,0x40, 0x7,0x28,0x34, 0x5,0x50,0x56, 0x7,0x28,0x3b, + 0x7,0x28,0x31, 0x7,0x28,0x3e, 0x5,0x57,0x6e, 0x4,0x4d,0x2c, + 0x4,0x4d,0x29, 0x5,0x50,0x5c, 0x5,0x50,0x5a, 0x5,0x50,0x50, + 0x5,0x50,0x59, 0x5,0x50,0x58, 0x7,0x28,0x2a, 0x5,0x50,0x5b, + 0x4,0x46,0x7a, 0x5,0x50,0x52, 0x5,0x50,0x5e, 0x5,0x50,0x5d, + 0x4,0x4d,0x35, 0x7,0x28,0x46, 0x7,0x28,0x30, 0x7,0x28,0x2d, + 0x7,0x28,0x44, 0x7,0x28,0x39, 0x7,0x28,0x45, 0x7,0x28,0x3c, + 0x7,0x28,0x2f, 0x6,0x61,0x77, 0x7,0x28,0x36, 0x7,0x28,0x3d, + 0x5,0x50,0x54, 0x4,0x4d,0x27, 0x5,0x50,0x4f, 0xf,0x51,0x7a, + 0xf,0x51,0x7b, 0xf,0x51,0x7e, 0xf,0x52,0x21, 0xf,0x52,0x22, + 0xf,0x52,0x23, 0xf,0x52,0x25, 0xf,0x52,0x28, 0xf,0x52,0x29, + 0xf,0x52,0x2a, 0xf,0x52,0x2b, 0x7,0x28,0x33, 0x7,0x28,0x41, + 0x7,0x28,0x3a, 0xf,0x52,0x27, 0x7,0x28,0x32, 0xf,0x4c,0x2f, + 0x5,0x57,0x70, 0x4,0x53,0x45, 0x5,0x57,0x76, 0x5,0x57,0x75, + 0x4,0x53,0x3a, 0x5,0x57,0x74, 0x5,0x57,0x71, 0x7,0x32,0x6e, + 0x7,0x32,0x7d, 0x5,0x57,0x77, 0x4,0x53,0x48, 0x5,0x57,0x7b, + 0x4,0x53,0x49, 0x4,0x53,0x40, 0x4,0x53,0x42, 0x5,0x57,0x7c, + 0x7,0x32,0x6d, 0x4,0x53,0x3b, 0x7,0x32,0x67, 0x4,0x53,0x3f, + 0x7,0x32,0x7c, 0x5,0x57,0x79, 0x5,0x57,0x6f, 0x5,0x58,0x21, + 0x5,0x57,0x72, 0x7,0x3b,0x3a, 0x5,0x57,0x78, 0x7,0x32,0x69, + 0x4,0x53,0x46, 0x5,0x57,0x7a, 0x7,0x32,0x70, 0x7,0x33,0x22, + 0x5,0x57,0x73, 0x7,0x32,0x64, 0x5,0x57,0x7e, 0x7,0x32,0x74, + 0x4,0x53,0x47, 0x5,0x50,0x60, 0x7,0x32,0x6b, 0x7,0x32,0x65, + 0x5,0x57,0x7d, 0x7,0x32,0x76, 0x4,0x53,0x43, 0x7,0x32,0x7b, + 0x7,0x33,0x24, 0x7,0x32,0x62, 0x7,0x32,0x77, 0x7,0x32,0x63, + 0x7,0x32,0x78, 0x7,0x32,0x6f, 0x7,0x32,0x7e, 0x7,0x32,0x72, + 0x7,0x32,0x68, 0x7,0x33,0x23, 0xf,0x57,0x60, 0xf,0x57,0x61, + 0xf,0x57,0x63, 0xf,0x57,0x64, 0xf,0x57,0x65, 0xf,0x57,0x66, + 0x7,0x32,0x79, 0x7,0x32,0x6a, 0x7,0x32,0x7a, 0x7,0x32,0x71, + 0x7,0x32,0x66, 0x7,0x32,0x6c, 0x4,0x58,0x59, 0x5,0x5e,0x29, + 0x5,0x5e,0x2c, 0x4,0x58,0x55, 0x7,0x3b,0x52, 0x7,0x3b,0x44, + 0x4,0x58,0x60, 0x4,0x58,0x5c, 0x7,0x3b,0x48, 0x7,0x3b,0x42, + 0x7,0x3b,0x55, 0x4,0x58,0x5e, 0x7,0x3b,0x46, 0x7,0x28,0x47, + 0x4,0x58,0x50, 0x5,0x5e,0x31, 0x7,0x3b,0x50, 0x7,0x3b,0x3f, + 0x4,0x58,0x5d, 0x7,0x3b,0x4f, 0x5,0x5e,0x2b, 0x5,0x5e,0x2f, + 0x7,0x3b,0x53, 0x4,0x58,0x5a, 0x7,0x3b,0x47, 0x7,0x3b,0x41, + 0x5,0x5e,0x33, 0x4,0x58,0x53, 0x7,0x3b,0x40, 0x4,0x58,0x51, + 0x7,0x3b,0x3e, 0x7,0x3b,0x54, 0x5,0x5e,0x2a, 0x7,0x3b,0x3c, + 0x7,0x3b,0x3b, 0x7,0x3b,0x49, 0x4,0x58,0x5b, 0x5,0x5e,0x2d, + 0x5,0x5e,0x2e, 0x7,0x3b,0x45, 0xf,0x5c,0x54, 0xf,0x5c,0x55, + 0xf,0x5c,0x56, 0xf,0x5c,0x57, 0xf,0x5c,0x58, 0xf,0x5c,0x59, + 0xf,0x5c,0x5a, 0xf,0x5c,0x5c, 0x7,0x3b,0x43, 0x7,0x3b,0x4b, + 0x7,0x3b,0x4e, 0x7,0x3b,0x51, 0x7,0x3b,0x3d, 0x5,0x5e,0x28, + 0x7,0x3b,0x4a, 0x7,0x3b,0x4c, 0x5,0x5e,0x30, 0x4,0x5d,0x3d, + 0x4,0x5d,0x37, 0x7,0x42,0x55, 0x7,0x42,0x61, 0x7,0x42,0x58, + 0x7,0x42,0x68, 0x5,0x64,0x43, 0x5,0x64,0x44, 0x5,0x5e,0x34, + 0x4,0x5d,0x38, 0x5,0x64,0x50, 0x7,0x42,0x59, 0x4,0x5d,0x36, + 0x5,0x64,0x45, 0x4,0x5d,0x35, 0x4,0x5d,0x3a, 0x5,0x64,0x3f, + 0x5,0x64,0x42, 0x5,0x64,0x4d, 0x4,0x5d,0x34, 0x5,0x64,0x4a, + 0x7,0x42,0x56, 0x5,0x64,0x3e, 0x5,0x64,0x41, 0x5,0x64,0x4b, + 0x7,0x42,0x57, 0x7,0x42,0x5c, 0x7,0x42,0x5b, 0x5,0x64,0x40, + 0x7,0x42,0x6f, 0x7,0x42,0x6b, 0x5,0x64,0x4f, 0x7,0x42,0x6e, + 0x5,0x64,0x49, 0x5,0x64,0x4c, 0x7,0x42,0x69, 0x5,0x64,0x46, + 0x7,0x42,0x6c, 0x5,0x64,0x47, 0x7,0x42,0x65, 0x7,0x42,0x62, + 0x7,0x42,0x5d, 0x7,0x42,0x63, 0x7,0x42,0x54, 0x7,0x42,0x5a, + 0x7,0x42,0x53, 0x7,0x42,0x5e, 0x7,0x42,0x6a, 0x7,0x42,0x66, + 0xf,0x60,0x62, 0xf,0x60,0x64, 0xf,0x60,0x65, 0xf,0x60,0x66, + 0xf,0x60,0x68, 0xf,0x60,0x69, 0xf,0x60,0x6a, 0x7,0x42,0x64, + 0x4,0x5d,0x3c, 0x7,0x42,0x67, 0xf,0x60,0x67, 0xf,0x60,0x61, + 0x5,0x64,0x4e, 0x4,0x61,0x28, 0x7,0x49,0x6a, 0x7,0x49,0x59, + 0x7,0x49,0x60, 0x7,0x49,0x6c, 0x7,0x49,0x5a, 0x7,0x49,0x69, + 0x7,0x49,0x6d, 0x4,0x61,0x23, 0x5,0x69,0x42, 0x5,0x69,0x40, + 0x7,0x49,0x62, 0x7,0x49,0x67, 0x7,0x49,0x65, 0x5,0x69,0x44, + 0x7,0x49,0x5d, 0x7,0x49,0x68, 0x7,0x49,0x64, 0x7,0x49,0x66, + 0x7,0x4f,0x6b, 0x7,0x49,0x61, 0x7,0x49,0x6e, 0x7,0x49,0x6f, + 0x7,0x49,0x63, 0x5,0x69,0x45, 0x7,0x49,0x5c, 0x7,0x49,0x5f, + 0x7,0x49,0x58, 0xf,0x63,0x6b, 0xf,0x63,0x6c, 0xf,0x63,0x6d, + 0xf,0x63,0x6f, 0xf,0x63,0x70, 0xf,0x63,0x71, 0xf,0x63,0x72, + 0xf,0x63,0x73, 0xf,0x63,0x74, 0xf,0x63,0x75, 0x7,0x49,0x5b, + 0x4,0x61,0x22, 0x4,0x61,0x27, 0x7,0x49,0x5e, 0x7,0x42,0x70, + 0x7,0x4f,0x75, 0x7,0x4f,0x7a, 0x5,0x6d,0x4d, 0x7,0x4f,0x6c, + 0x4,0x64,0x42, 0x5,0x6d,0x4c, 0x5,0x6d,0x51, 0x7,0x4f,0x78, + 0x7,0x4f,0x70, 0x5,0x6d,0x50, 0x7,0x4f,0x74, 0x5,0x6d,0x52, + 0x5,0x6d,0x53, 0x7,0x4f,0x73, 0x5,0x6d,0x4e, 0x7,0x4f,0x72, + 0x7,0x4f,0x77, 0x7,0x4f,0x71, 0x7,0x4f,0x6d, 0x5,0x6d,0x4f, + 0x7,0x4f,0x6f, 0x7,0x54,0x77, 0x7,0x4f,0x6e, 0x7,0x4f,0x7b, + 0xf,0x66,0x2d, 0xf,0x66,0x2e, 0xf,0x66,0x2f, 0xf,0x66,0x30, + 0xf,0x66,0x31, 0x7,0x4f,0x76, 0x4,0x67,0x2f, 0x4,0x67,0x34, + 0x7,0x54,0x6b, 0x7,0x54,0x70, 0x5,0x71,0x2f, 0x7,0x54,0x75, + 0x7,0x54,0x6e, 0x7,0x54,0x71, 0x5,0x71,0x2e, 0x7,0x54,0x73, + 0x5,0x71,0x2d, 0x5,0x71,0x30, 0x7,0x54,0x6c, 0x4,0x67,0x33, + 0x7,0x54,0x6f, 0x4,0x67,0x35, 0x4,0x67,0x31, 0x7,0x54,0x72, + 0x5,0x71,0x32, 0x7,0x54,0x78, 0x7,0x4f,0x79, 0x7,0x54,0x74, + 0x4,0x67,0x32, 0x7,0x54,0x79, 0x5,0x71,0x31, 0x5,0x71,0x33, + 0x7,0x54,0x76, 0xf,0x68,0x45, 0xf,0x68,0x46, 0xf,0x68,0x47, + 0xf,0x68,0x48, 0xf,0x68,0x49, 0x7,0x54,0x6d, 0x5,0x74,0x2e, + 0x4,0x69,0x3c, 0x5,0x74,0x2c, 0x5,0x74,0x2b, 0x7,0x59,0x23, + 0x7,0x58,0x7c, 0x5,0x74,0x2d, 0x5,0x74,0x31, 0x5,0x74,0x30, + 0x7,0x58,0x7a, 0x5,0x74,0x33, 0x5,0x74,0x35, 0x5,0x74,0x32, + 0x7,0x58,0x79, 0x4,0x69,0x3d, 0x7,0x59,0x26, 0x7,0x59,0x28, + 0x7,0x59,0x27, 0x7,0x58,0x7e, 0x7,0x59,0x21, 0x5,0x74,0x34, + 0x5,0x74,0x36, 0x7,0x59,0x24, 0x7,0x59,0x29, 0x5,0x74,0x2f, + 0x7,0x58,0x7d, 0x7,0x58,0x7b, 0xf,0x69,0x6d, 0xf,0x69,0x6e, + 0x5,0x76,0x46, 0x4,0x6a,0x76, 0x4,0x6a,0x77, 0x7,0x5c,0x5d, + 0x5,0x76,0x47, 0x4,0x6a,0x79, 0x7,0x5c,0x5f, 0x7,0x5c,0x5c, + 0x5,0x76,0x48, 0x7,0x5c,0x62, 0x5,0x76,0x45, 0x7,0x5f,0x4a, + 0x7,0x5c,0x60, 0x4,0x6a,0x7a, 0x7,0x5c,0x61, 0x5,0x76,0x4a, + 0x7,0x59,0x22, 0x5,0x76,0x49, 0xf,0x6a,0x70, 0xf,0x6a,0x71, + 0xf,0x6a,0x72, 0x5,0x78,0x2c, 0x7,0x5f,0x4b, 0x4,0x6b,0x7e, + 0x5,0x78,0x2b, 0x5,0x78,0x29, 0x7,0x5f,0x4c, 0x5,0x78,0x26, + 0x4,0x6c,0x22, 0x7,0x5f,0x4d, 0x5,0x78,0x2a, 0x5,0x78,0x28, + 0x4,0x6c,0x24, 0x5,0x78,0x2d, 0x5,0x78,0x27, 0x5,0x79,0x44, + 0x4,0x6c,0x7e, 0x5,0x79,0x48, 0x5,0x79,0x4a, 0x4,0x6c,0x21, + 0x7,0x61,0x40, 0x5,0x79,0x46, 0x7,0x61,0x44, 0x7,0x61,0x43, + 0x7,0x61,0x45, 0x5,0x79,0x47, 0x5,0x79,0x49, 0x7,0x61,0x41, + 0x5,0x79,0x45, 0x7,0x62,0x5d, 0x7,0x62,0x5b, 0x7,0x62,0x5e, + 0x7,0x62,0x5c, 0x7,0x62,0x5f, 0x7,0x63,0x6e, 0x7,0x63,0x6c, + 0x5,0x7a,0x73, 0x7,0x63,0x6b, 0x7,0x63,0x6f, 0x7,0x62,0x5a, + 0x7,0x63,0x69, 0x7,0x63,0x71, 0x7,0x63,0x6a, 0x7,0x63,0x70, + 0x7,0x63,0x6d, 0x7,0x64,0x5c, 0x4,0x6e,0x3a, 0x7,0x64,0x5d, + 0x5,0x7b,0x47, 0x5,0x7b,0x48, 0x7,0x64,0x5a, 0x7,0x64,0x5b, + 0x5,0x7b,0x67, 0x7,0x65,0x41, 0x7,0x65,0x42, 0x5,0x7b,0x68, + 0x4,0x6e,0x50, 0x7,0x65,0x62, 0x7,0x65,0x61, 0xf,0x6d,0x31, + 0x7,0x66,0x2b, 0x5,0x27,0x65, 0x6,0x2e,0x27, 0x6,0x2e,0x26, + 0x4,0x2b,0x44, 0x6,0x3b,0x72, 0x5,0x30,0x35, 0x6,0x3b,0x75, + 0x6,0x3b,0x74, 0xf,0x38,0x41, 0x6,0x4e,0x4e, 0x6,0x4e,0x50, + 0x5,0x42,0x5f, 0x6,0x57,0x7c, 0x6,0x57,0x7a, 0x6,0x57,0x7d, + 0x6,0x57,0x7b, 0x5,0x49,0x65, 0x5,0x49,0x63, 0x5,0x49,0x64, + 0x6,0x62,0x26, 0x6,0x62,0x24, 0x7,0x28,0x48, 0x5,0x50,0x61, + 0x7,0x28,0x49, 0x7,0x28,0x4a, 0x6,0x62,0x25, 0x5,0x58,0x23, + 0x5,0x58,0x24, 0x5,0x58,0x22, 0x7,0x33,0x25, 0x7,0x33,0x26, + 0x5,0x5e,0x37, 0x5,0x5e,0x36, 0xf,0x5c,0x5d, 0x4,0x5d,0x3e, + 0x4,0x5d,0x3f, 0x7,0x42,0x71, 0x7,0x42,0x73, 0x4,0x5d,0x40, + 0x7,0x42,0x72, 0x5,0x69,0x46, 0x5,0x6d,0x54, 0x7,0x4f,0x7c, + 0x7,0x54,0x7a, 0x7,0x59,0x2b, 0x7,0x59,0x2a, 0x7,0x5f,0x4e, + 0x7,0x65,0x63, 0x4,0x28,0x23, 0x6,0x2e,0x28, 0x4,0x28,0x24, + 0x6,0x34,0x4f, 0x6,0x34,0x50, 0x5,0x2b,0x41, 0xf,0x2d,0x45, + 0x5,0x30,0x36, 0x6,0x3b,0x77, 0x6,0x3b,0x76, 0x5,0x30,0x37, + 0x6,0x44,0x4f, 0x5,0x3c,0x29, 0x6,0x4e,0x53, 0x6,0x4e,0x52, + 0xf,0x3f,0x2a, 0xf,0x3f,0x2b, 0x6,0x4e,0x51, 0x6,0x58,0x23, + 0x6,0x58,0x21, 0x4,0x40,0x5f, 0x6,0x58,0x22, 0x6,0x57,0x7e, + 0xf,0x45,0x3a, 0x4,0x47,0x24, 0x5,0x50,0x62, 0x6,0x62,0x27, + 0x6,0x62,0x28, 0x4,0x58,0x61, 0x7,0x3b,0x56, 0xf,0x5c,0x5e, + 0x4,0x5d,0x41, 0x7,0x42,0x74, 0x7,0x49,0x70, 0x7,0x54,0x7b, + 0x7,0x5c,0x64, 0x5,0x27,0x66, 0x6,0x2e,0x29, 0x6,0x2e,0x2a, + 0x6,0x2e,0x2b, 0x5,0x2b,0x43, 0x6,0x34,0x51, 0x4,0x2b,0x45, + 0x4,0x2b,0x47, 0x5,0x2b,0x45, 0x6,0x34,0x53, 0x5,0x2b,0x44, + 0xf,0x28,0x6b, 0x6,0x34,0x52, 0x5,0x2b,0x42, 0x5,0x2b,0x46, + 0x6,0x3b,0x7d, 0x5,0x30,0x3c, 0x4,0x2f,0x71, 0x6,0x3c,0x21, + 0x6,0x3c,0x25, 0x5,0x30,0x3f, 0x6,0x3c,0x26, 0x6,0x3c,0x27, + 0x4,0x2f,0x70, 0x6,0x3b,0x79, 0x5,0x30,0x40, 0x6,0x3b,0x7b, + 0x5,0x30,0x38, 0x6,0x3c,0x22, 0x6,0x3b,0x7c, 0x6,0x3c,0x23, + 0x6,0x3b,0x7e, 0x5,0x30,0x3b, 0x6,0x3b,0x7a, 0x6,0x3b,0x78, + 0x5,0x30,0x3a, 0xf,0x32,0x50, 0x6,0x3c,0x24, 0x6,0x3c,0x28, + 0x6,0x3c,0x29, 0xf,0x2d,0x48, 0xf,0x2d,0x49, 0xf,0x32,0x52, + 0x4,0x35,0x28, 0x5,0x3c,0x32, 0x4,0x35,0x2b, 0x4,0x3a,0x7c, + 0x5,0x35,0x46, 0x4,0x35,0x29, 0x6,0x44,0x58, 0x5,0x35,0x47, + 0x5,0x35,0x4a, 0x5,0x35,0x44, 0x5,0x35,0x45, 0x5,0x35,0x43, + 0x6,0x44,0x59, 0x6,0x44,0x5a, 0x5,0x35,0x42, 0x6,0x44,0x53, + 0x6,0x44,0x55, 0x6,0x44,0x54, 0x6,0x44,0x51, 0x6,0x44,0x50, + 0x6,0x44,0x57, 0x6,0x44,0x52, 0xf,0x2d,0x46, 0xf,0x38,0x45, + 0x5,0x35,0x48, 0x6,0x44,0x56, 0x5,0x35,0x49, 0x5,0x3c,0x31, + 0x6,0x4e,0x5b, 0x6,0x4e,0x59, 0x5,0x3c,0x2e, 0x6,0x4e,0x57, + 0x5,0x3c,0x2f, 0x5,0x3c,0x33, 0x4,0x3a,0x7e, 0x6,0x4e,0x58, + 0x6,0x4e,0x54, 0x4,0x3a,0x7d, 0x6,0x4e,0x56, 0x5,0x3c,0x30, + 0x5,0x3c,0x2d, 0x5,0x3c,0x2b, 0x5,0x42,0x64, 0x5,0x3c,0x2a, + 0xf,0x38,0x44, 0xf,0x3f,0x2e, 0x6,0x4e,0x55, 0x6,0x4e,0x5a, + 0x6,0x4e,0x5c, 0x5,0x3c,0x2c, 0xf,0x38,0x43, 0x5,0x42,0x6a, + 0x5,0x42,0x62, 0x5,0x42,0x66, 0x4,0x40,0x65, 0x5,0x42,0x6b, + 0x5,0x42,0x63, 0x5,0x42,0x67, 0x4,0x40,0x63, 0x5,0x42,0x65, + 0x5,0x42,0x69, 0x6,0x58,0x2f, 0x4,0x40,0x64, 0x6,0x58,0x2a, + 0x6,0x58,0x28, 0x6,0x58,0x30, 0x5,0x42,0x68, 0x5,0x42,0x60, + 0x6,0x58,0x24, 0x6,0x58,0x27, 0x6,0x58,0x2d, 0xf,0x3f,0x2c, + 0xf,0x3f,0x2d, 0xf,0x3f,0x2f, 0xf,0x3f,0x30, 0xf,0x45,0x3b, + 0x6,0x58,0x26, 0x6,0x58,0x31, 0x6,0x58,0x25, 0x6,0x58,0x29, + 0x5,0x42,0x61, 0xf,0x45,0x3e, 0x4,0x47,0x30, 0x4,0x47,0x2c, + 0x6,0x62,0x2d, 0x6,0x62,0x33, 0x4,0x47,0x29, 0x5,0x49,0x66, + 0x5,0x49,0x69, 0x4,0x47,0x28, 0x5,0x49,0x68, 0x5,0x3c,0x34, + 0x6,0x62,0x34, 0x5,0x49,0x6a, 0x6,0x62,0x2b, 0x6,0x62,0x29, + 0x6,0x62,0x2a, 0x6,0x62,0x32, 0x6,0x62,0x31, 0x5,0x49,0x67, + 0x6,0x62,0x2f, 0x5,0x49,0x6b, 0x6,0x62,0x30, 0x6,0x62,0x2c, + 0x4,0x47,0x33, 0x6,0x62,0x35, 0x6,0x62,0x2e, 0xf,0x4c,0x34, + 0xf,0x4c,0x36, 0xf,0x4c,0x37, 0x4,0x47,0x2f, 0xf,0x45,0x3c, + 0xf,0x45,0x3f, 0x5,0x50,0x66, 0x7,0x28,0x54, 0x4,0x4d,0x41, + 0x5,0x50,0x69, 0x7,0x28,0x57, 0x4,0x47,0x32, 0x7,0x28,0x56, + 0x5,0x50,0x65, 0x4,0x4d,0x38, 0x7,0x28,0x55, 0x7,0x33,0x28, + 0x5,0x50,0x67, 0x7,0x28,0x5a, 0x7,0x28,0x4b, 0x4,0x4d,0x45, + 0x4,0x4d,0x3b, 0x4,0x4d,0x3d, 0x7,0x28,0x53, 0x4,0x4d,0x44, + 0x4,0x4d,0x43, 0x5,0x50,0x63, 0x7,0x28,0x58, 0x7,0x28,0x52, + 0x7,0x28,0x4c, 0x5,0x50,0x64, 0x7,0x28,0x4f, 0x5,0x50,0x68, + 0x7,0x28,0x51, 0x7,0x28,0x50, 0x7,0x28,0x4d, 0xf,0x4c,0x35, + 0xf,0x52,0x2d, 0x7,0x28,0x4e, 0x7,0x28,0x59, 0x5,0x58,0x2c, + 0x5,0x58,0x2b, 0x7,0x33,0x2b, 0x5,0x58,0x27, 0x5,0x58,0x2a, + 0x7,0x33,0x27, 0x4,0x53,0x51, 0x7,0x33,0x29, 0x4,0x53,0x54, + 0x7,0x3b,0x62, 0x5,0x58,0x29, 0x5,0x58,0x28, 0x7,0x33,0x2a, + 0x4,0x53,0x4e, 0x7,0x33,0x2c, 0x7,0x33,0x2f, 0x4,0x53,0x4d, + 0x5,0x58,0x25, 0x7,0x33,0x30, 0x5,0x58,0x26, 0x7,0x33,0x2e, + 0xf,0x52,0x2c, 0x7,0x33,0x2d, 0x5,0x5e,0x3e, 0x5,0x5e,0x3f, + 0x7,0x3b,0x57, 0x5,0x5e,0x3b, 0x7,0x3b,0x5d, 0x7,0x3b,0x64, + 0x4,0x58,0x66, 0x5,0x5e,0x38, 0x5,0x5e,0x39, 0x5,0x5e,0x3d, + 0x5,0x5e,0x3c, 0x7,0x3b,0x5f, 0x7,0x3b,0x5b, 0x7,0x3b,0x63, + 0x7,0x42,0x7b, 0x7,0x3b,0x5c, 0x7,0x28,0x5b, 0x7,0x3b,0x5e, + 0x7,0x3b,0x60, 0x5,0x5e,0x40, 0x7,0x3b,0x58, 0x7,0x3b,0x5a, + 0x5,0x5e,0x3a, 0xf,0x57,0x67, 0xf,0x57,0x68, 0xf,0x57,0x69, + 0xf,0x57,0x6a, 0x7,0x42,0x75, 0x4,0x5d,0x45, 0x7,0x42,0x7c, + 0x7,0x42,0x7e, 0x5,0x64,0x5b, 0x5,0x64,0x57, 0x7,0x42,0x7d, + 0x4,0x5d,0x4b, 0x5,0x64,0x54, 0x5,0x64,0x55, 0x5,0x64,0x5f, + 0x4,0x5d,0x4d, 0x4,0x5d,0x42, 0x7,0x42,0x7a, 0x5,0x64,0x53, + 0x4,0x5d,0x47, 0x4,0x5d,0x4c, 0x5,0x64,0x5d, 0x7,0x42,0x79, + 0x7,0x42,0x77, 0x5,0x64,0x51, 0x4,0x5d,0x43, 0x5,0x5e,0x42, + 0x5,0x64,0x52, 0x7,0x42,0x78, 0x7,0x43,0x23, 0x7,0x42,0x76, + 0x5,0x64,0x59, 0x5,0x64,0x5a, 0x5,0x5e,0x41, 0x5,0x64,0x5c, + 0x5,0x64,0x5e, 0x5,0x64,0x58, 0xf,0x5c,0x60, 0x7,0x49,0x76, + 0x5,0x69,0x49, 0x5,0x69,0x4a, 0x4,0x61,0x29, 0x7,0x49,0x7b, + 0x7,0x49,0x7c, 0x5,0x69,0x47, 0x5,0x69,0x48, 0x7,0x49,0x72, + 0x7,0x49,0x73, 0x7,0x49,0x75, 0x7,0x49,0x79, 0x7,0x49,0x7a, + 0x7,0x49,0x74, 0x7,0x49,0x78, 0x4,0x61,0x2b, 0x7,0x49,0x77, + 0x7,0x43,0x21, 0xf,0x60,0x6b, 0xf,0x60,0x6c, 0xf,0x63,0x76, + 0x7,0x4f,0x7d, 0x5,0x6d,0x58, 0x7,0x50,0x26, 0x5,0x6d,0x5b, + 0x5,0x71,0x34, 0x5,0x6d,0x55, 0x4,0x64,0x45, 0x7,0x50,0x23, + 0x5,0x6d,0x56, 0x7,0x50,0x22, 0x7,0x54,0x7c, 0x7,0x4f,0x7e, + 0x5,0x6d,0x59, 0x7,0x49,0x71, 0x5,0x6d,0x5a, 0x5,0x6d,0x5c, + 0x7,0x50,0x24, 0xf,0x66,0x34, 0x7,0x50,0x21, 0x5,0x6d,0x5d, + 0x7,0x55,0x22, 0x7,0x55,0x24, 0x5,0x71,0x36, 0x4,0x67,0x36, + 0x7,0x55,0x26, 0x7,0x55,0x25, 0x5,0x71,0x35, 0x7,0x54,0x7e, + 0x7,0x55,0x21, 0x4,0x67,0x37, 0x7,0x55,0x23, 0x7,0x59,0x31, + 0x7,0x54,0x7d, 0xf,0x66,0x33, 0x4,0x69,0x41, 0x7,0x59,0x2e, + 0x4,0x69,0x40, 0x4,0x69,0x3f, 0x5,0x74,0x37, 0x7,0x59,0x2c, + 0x7,0x59,0x2d, 0x7,0x59,0x30, 0x7,0x59,0x2f, 0x5,0x78,0x2e, + 0xf,0x69,0x6f, 0x7,0x5f,0x51, 0x7,0x5f,0x50, 0x7,0x5f,0x4f, + 0x5,0x79,0x4b, 0x7,0x61,0x48, 0x7,0x61,0x47, 0x7,0x61,0x46, + 0x7,0x62,0x61, 0x5,0x7a,0x37, 0x7,0x62,0x62, 0x7,0x62,0x60, + 0x7,0x64,0x5f, 0x7,0x63,0x73, 0x7,0x63,0x72, 0x7,0x64,0x5e, + 0x5,0x7b,0x7e, 0x7,0x65,0x64, 0x7,0x66,0x2c, 0x5,0x7c,0x4b, + 0x7,0x66,0x4d, 0x5,0x24,0x76, 0x6,0x2e,0x2c, 0x4,0x2b,0x48, + 0x5,0x30,0x41, 0x4,0x2f,0x74, 0x6,0x3c,0x2a, 0x6,0x44,0x5b, + 0xf,0x38,0x46, 0xf,0x3f,0x31, 0xf,0x3f,0x32, 0x6,0x58,0x32, + 0x4,0x47,0x34, 0x6,0x62,0x36, 0x6,0x62,0x37, 0x6,0x62,0x38, + 0xf,0x4c,0x38, 0xf,0x4c,0x39, 0x7,0x28,0x5c, 0xf,0x4c,0x3a, + 0xf,0x52,0x30, 0x7,0x33,0x31, 0x7,0x33,0x32, 0xf,0x52,0x2f, + 0x7,0x3b,0x65, 0xf,0x60,0x6d, 0xf,0x60,0x6e, 0x5,0x69,0x4b, + 0x7,0x50,0x27, 0x7,0x55,0x27, 0x5,0x27,0x67, 0x6,0x2e,0x2d, + 0x4,0x2f,0x77, 0x5,0x30,0x42, 0xf,0x32,0x53, 0x5,0x35,0x4d, + 0x5,0x35,0x4e, 0x6,0x44,0x5c, 0x6,0x44,0x5d, 0x5,0x35,0x50, + 0x5,0x35,0x4b, 0xf,0x38,0x47, 0xf,0x38,0x49, 0xf,0x38,0x4b, + 0x4,0x35,0x32, 0x4,0x35,0x36, 0x5,0x35,0x4c, 0x5,0x35,0x4f, + 0x6,0x4e,0x5f, 0x4,0x3b,0x25, 0x6,0x4e,0x62, 0x6,0x4e,0x61, + 0x5,0x3c,0x36, 0x6,0x4e,0x5e, 0x4,0x3b,0x24, 0x6,0x4e,0x5d, + 0x6,0x58,0x36, 0x5,0x42,0x6d, 0x5,0x42,0x6f, 0x5,0x42,0x6e, + 0x6,0x58,0x33, 0x6,0x58,0x37, 0x5,0x42,0x70, 0xf,0x45,0x40, + 0xf,0x45,0x41, 0xf,0x45,0x42, 0x6,0x58,0x35, 0x6,0x62,0x39, + 0x5,0x49,0x71, 0x5,0x49,0x6e, 0x5,0x49,0x72, 0x4,0x47,0x37, + 0x6,0x62,0x3a, 0xf,0x4c,0x3b, 0xf,0x4c,0x3c, 0x5,0x49,0x6f, + 0x6,0x62,0x3b, 0x5,0x49,0x70, 0x4,0x4d,0x49, 0x7,0x28,0x5f, + 0x5,0x50,0x6c, 0x4,0x4d,0x4b, 0x5,0x50,0x6b, 0x7,0x28,0x63, + 0x5,0x50,0x6d, 0x6,0x58,0x34, 0x7,0x28,0x62, 0x5,0x50,0x6a, + 0x5,0x50,0x6e, 0xf,0x52,0x31, 0x7,0x28,0x60, 0x7,0x28,0x5e, + 0x7,0x28,0x5d, 0x7,0x28,0x61, 0x5,0x58,0x30, 0x5,0x58,0x2f, + 0x5,0x58,0x2e, 0x4,0x53,0x57, 0x7,0x33,0x34, 0x5,0x58,0x34, + 0x7,0x3b,0x67, 0x4,0x53,0x58, 0x4,0x53,0x5e, 0x4,0x53,0x5d, + 0x5,0x58,0x31, 0x5,0x58,0x35, 0x7,0x33,0x33, 0x5,0x58,0x2d, + 0x5,0x58,0x33, 0xf,0x57,0x6b, 0xf,0x57,0x6c, 0xf,0x57,0x6d, + 0x7,0x3b,0x66, 0x5,0x64,0x60, 0x5,0x5e,0x45, 0x5,0x5e,0x44, + 0x7,0x3b,0x6a, 0x7,0x3b,0x69, 0x7,0x3b,0x6b, 0x7,0x3b,0x68, + 0xf,0x5c,0x61, 0xf,0x5c,0x62, 0x5,0x64,0x62, 0x4,0x5d,0x51, + 0x4,0x5d,0x4f, 0x7,0x43,0x24, 0x5,0x64,0x61, 0xf,0x60,0x6f, + 0xf,0x60,0x70, 0xf,0x60,0x71, 0x7,0x43,0x25, 0x7,0x49,0x7d, + 0x7,0x49,0x7e, 0x5,0x6d,0x5f, 0x7,0x50,0x29, 0x7,0x50,0x28, + 0xf,0x66,0x35, 0x5,0x6d,0x5e, 0xf,0x68,0x4b, 0xf,0x68,0x4c, + 0x7,0x55,0x28, 0x4,0x69,0x43, 0x5,0x74,0x39, 0x4,0x69,0x42, + 0xf,0x69,0x70, 0xf,0x69,0x71, 0x5,0x78,0x2f, 0x7,0x5f,0x53, + 0xf,0x6b,0x64, 0x7,0x5f,0x52, 0x5,0x79,0x4d, 0x5,0x79,0x4c, + 0x7,0x61,0x49, 0x4,0x6d,0x21, 0x5,0x7a,0x74, 0x4,0x6e,0x3b, + 0x5,0x7c,0x44, 0x7,0x66,0x54, 0x6,0x2e,0x2e, 0x6,0x2e,0x2f, + 0x6,0x34,0x54, 0x5,0x2b,0x48, 0x4,0x2f,0x78, 0x6,0x3c,0x2c, + 0x4,0x2f,0x79, 0x6,0x3c,0x2b, 0x6,0x44,0x67, 0x4,0x35,0x3b, + 0x5,0x35,0x53, 0x5,0x35,0x52, 0x6,0x44,0x5f, 0x6,0x44,0x63, + 0x4,0x35,0x37, 0x6,0x44,0x64, 0x5,0x35,0x51, 0x6,0x44,0x60, + 0xf,0x38,0x4d, 0xf,0x38,0x4e, 0xf,0x38,0x4f, 0x4,0x35,0x3c, + 0x6,0x44,0x66, 0x6,0x44,0x5e, 0x6,0x44,0x62, 0x6,0x44,0x65, + 0x6,0x44,0x61, 0x5,0x3c,0x37, 0x4,0x3b,0x26, 0x6,0x4e,0x64, + 0x6,0x4e,0x67, 0x5,0x3c,0x38, 0x6,0x4e,0x63, 0x6,0x4e,0x66, + 0x6,0x4e,0x69, 0x6,0x4e,0x65, 0x4,0x3b,0x27, 0x4,0x3b,0x28, + 0x6,0x4e,0x68, 0xf,0x3f,0x33, 0x5,0x42,0x73, 0x5,0x42,0x71, + 0x5,0x42,0x72, 0x6,0x58,0x38, 0x6,0x62,0x3e, 0x5,0x49,0x75, + 0x4,0x47,0x39, 0x6,0x62,0x40, 0x5,0x49,0x73, 0x5,0x49,0x74, + 0x6,0x62,0x3d, 0x6,0x62,0x41, 0x6,0x62,0x3c, 0x6,0x62,0x3f, + 0x7,0x28,0x66, 0x5,0x50,0x75, 0x7,0x28,0x67, 0x5,0x50,0x74, + 0x5,0x50,0x70, 0x5,0x50,0x6f, 0x4,0x4d,0x50, 0x4,0x4d,0x52, + 0x4,0x4d,0x4d, 0x7,0x28,0x69, 0x4,0x4d,0x54, 0x5,0x50,0x72, + 0x7,0x28,0x68, 0x7,0x28,0x6a, 0x5,0x50,0x71, 0x7,0x28,0x64, + 0x7,0x28,0x65, 0x5,0x50,0x73, 0x7,0x33,0x38, 0x7,0x33,0x37, + 0x4,0x53,0x5f, 0x5,0x58,0x36, 0x4,0x53,0x63, 0x5,0x58,0x39, + 0x5,0x58,0x3b, 0x4,0x53,0x60, 0x7,0x33,0x36, 0x7,0x33,0x35, + 0x5,0x58,0x37, 0x5,0x58,0x38, 0x5,0x58,0x3a, 0x7,0x33,0x39, + 0x5,0x5e,0x46, 0x7,0x3b,0x6d, 0x7,0x3b,0x73, 0x7,0x3b,0x6c, + 0x5,0x5e,0x4a, 0x5,0x5e,0x49, 0x7,0x3b,0x6e, 0x7,0x33,0x3a, + 0x5,0x5e,0x48, 0x7,0x3b,0x6f, 0x7,0x3b,0x70, 0x7,0x3b,0x71, + 0x4,0x58,0x6c, 0x7,0x3b,0x74, 0x7,0x3b,0x72, 0x5,0x5e,0x47, + 0x7,0x43,0x27, 0x7,0x43,0x28, 0x4,0x5d,0x52, 0x7,0x43,0x26, + 0x7,0x43,0x29, 0x4,0x61,0x35, 0x5,0x69,0x4c, 0x4,0x61,0x32, + 0x4,0x61,0x33, 0x7,0x4a,0x21, 0x7,0x4a,0x22, 0x7,0x4a,0x23, + 0x7,0x4a,0x24, 0x4,0x61,0x36, 0x7,0x50,0x2a, 0x5,0x71,0x37, + 0x7,0x55,0x29, 0x5,0x74,0x3a, 0x4,0x69,0x44, 0x7,0x5c,0x65, + 0x5,0x78,0x30, 0x7,0x62,0x63, 0x4,0x6d,0x60, 0x7,0x64,0x60, + 0x7,0x64,0x61, 0x5,0x7b,0x69, 0x7,0x65,0x43, 0x5,0x23,0x27, + 0x5,0x23,0x28, 0x6,0x2e,0x30, 0x6,0x3c,0x33, 0x4,0x30,0x21, + 0x4,0x2f,0x7b, 0x4,0x2f,0x7a, 0x4,0x30,0x22, 0x5,0x30,0x43, + 0x6,0x3c,0x30, 0x6,0x3c,0x31, 0x6,0x3c,0x2f, 0x6,0x3c,0x32, + 0x6,0x3c,0x2e, 0x4,0x35,0x40, 0x6,0x44,0x6a, 0x6,0x44,0x73, + 0x4,0x35,0x3e, 0x6,0x44,0x6f, 0x5,0x35,0x5c, 0x5,0x35,0x59, + 0x6,0x44,0x71, 0x4,0x35,0x42, 0x5,0x35,0x54, 0x4,0x35,0x46, + 0x6,0x44,0x79, 0x5,0x35,0x55, 0x6,0x44,0x77, 0x6,0x44,0x6b, + 0x6,0x44,0x78, 0x5,0x35,0x58, 0x6,0x44,0x74, 0x6,0x44,0x75, + 0x6,0x44,0x6e, 0x6,0x44,0x7a, 0xf,0x38,0x50, 0xf,0x38,0x51, + 0xf,0x38,0x53, 0xf,0x38,0x54, 0xf,0x38,0x55, 0xf,0x38,0x56, + 0x6,0x44,0x72, 0x6,0x44,0x69, 0x6,0x44,0x68, 0x6,0x44,0x76, + 0x6,0x44,0x6c, 0x5,0x35,0x5a, 0x6,0x4e,0x74, 0x4,0x3b,0x32, + 0x4,0x3b,0x2e, 0x5,0x3c,0x3b, 0x6,0x4e,0x6f, 0x6,0x4e,0x6e, + 0x6,0x4e,0x71, 0x6,0x4e,0x6a, 0x4,0x3b,0x2d, 0x6,0x4e,0x78, + 0x4,0x3b,0x38, 0x4,0x3b,0x39, 0x5,0x3c,0x3c, 0x6,0x4e,0x6d, + 0x6,0x4e,0x76, 0x6,0x4e,0x70, 0x6,0x4e,0x77, 0x4,0x3b,0x37, + 0x5,0x3c,0x39, 0x5,0x3c,0x3a, 0xf,0x3f,0x34, 0xf,0x3f,0x35, + 0xf,0x3f,0x36, 0xf,0x3f,0x37, 0xf,0x3f,0x38, 0xf,0x3f,0x39, + 0xf,0x3f,0x3a, 0xf,0x3f,0x3c, 0x6,0x4e,0x72, 0x6,0x4e,0x75, + 0x6,0x4e,0x6c, 0x6,0x4e,0x79, 0x6,0x4e,0x73, 0x5,0x42,0x75, + 0x4,0x40,0x68, 0x4,0x40,0x6a, 0x6,0x58,0x46, 0x5,0x42,0x76, + 0x5,0x3c,0x3d, 0x5,0x42,0x79, 0x4,0x40,0x71, 0x4,0x40,0x70, + 0x6,0x58,0x40, 0x6,0x58,0x4b, 0x6,0x58,0x3d, 0x6,0x58,0x49, + 0x4,0x40,0x69, 0x4,0x40,0x6b, 0x5,0x42,0x7c, 0x5,0x42,0x74, + 0x4,0x40,0x73, 0x6,0x58,0x43, 0x6,0x58,0x3c, 0x6,0x58,0x47, + 0x6,0x58,0x42, 0x6,0x58,0x3f, 0x4,0x40,0x72, 0x5,0x42,0x7a, + 0x6,0x58,0x48, 0x5,0x42,0x78, 0x5,0x42,0x77, 0x6,0x58,0x44, + 0xf,0x45,0x43, 0xf,0x45,0x45, 0xf,0x45,0x46, 0x6,0x58,0x4a, + 0x5,0x42,0x7b, 0x6,0x58,0x39, 0x6,0x58,0x3b, 0x4,0x40,0x6f, + 0x6,0x58,0x3a, 0x6,0x58,0x45, 0x6,0x58,0x3e, 0x6,0x62,0x4e, + 0x4,0x47,0x3f, 0x5,0x49,0x7a, 0x4,0x47,0x3b, 0x5,0x49,0x78, + 0x5,0x49,0x7b, 0x4,0x47,0x3e, 0x4,0x47,0x48, 0x6,0x62,0x42, + 0x6,0x62,0x4c, 0x4,0x47,0x41, 0x6,0x62,0x53, 0x4,0x47,0x44, + 0x6,0x62,0x4f, 0x4,0x47,0x47, 0x6,0x62,0x46, 0x5,0x49,0x79, + 0x6,0x62,0x51, 0x6,0x62,0x45, 0x4,0x47,0x49, 0x6,0x62,0x50, + 0x6,0x62,0x44, 0x5,0x49,0x76, 0x5,0x49,0x77, 0xf,0x4c,0x3d, + 0xf,0x4c,0x3e, 0xf,0x4c,0x3f, 0xf,0x4c,0x40, 0xf,0x4c,0x42, + 0xf,0x4c,0x43, 0xf,0x4c,0x44, 0xf,0x4c,0x45, 0x6,0x62,0x48, + 0x4,0x47,0x4b, 0x6,0x62,0x4a, 0x5,0x42,0x7d, 0x6,0x62,0x4b, + 0x6,0x62,0x4d, 0x6,0x62,0x43, 0x6,0x62,0x52, 0x6,0x62,0x49, + 0x7,0x29,0x21, 0x5,0x51,0x2a, 0x7,0x28,0x6b, 0x5,0x50,0x7a, + 0x5,0x51,0x22, 0x7,0x28,0x71, 0x7,0x28,0x74, 0x7,0x29,0x22, + 0x7,0x28,0x7c, 0x7,0x28,0x70, 0x5,0x51,0x27, 0x4,0x4d,0x57, + 0x5,0x51,0x29, 0x5,0x51,0x23, 0x5,0x50,0x7b, 0x5,0x50,0x7e, + 0x7,0x28,0x78, 0x5,0x51,0x24, 0x4,0x4d,0x5d, 0x5,0x51,0x26, + 0x4,0x4d,0x62, 0x7,0x29,0x24, 0x7,0x28,0x77, 0x7,0x28,0x6f, + 0x5,0x50,0x78, 0x5,0x50,0x7c, 0x7,0x28,0x7d, 0x7,0x28,0x6d, + 0x5,0x51,0x25, 0x5,0x50,0x7d, 0x5,0x50,0x77, 0x5,0x50,0x79, + 0x5,0x50,0x76, 0xf,0x52,0x32, 0xf,0x52,0x33, 0xf,0x52,0x34, + 0xf,0x52,0x35, 0xf,0x52,0x37, 0xf,0x52,0x39, 0xf,0x52,0x3a, + 0x7,0x28,0x76, 0x7,0x28,0x75, 0x7,0x28,0x6c, 0x7,0x28,0x72, + 0xf,0x52,0x38, 0x5,0x51,0x21, 0x7,0x28,0x7b, 0x7,0x28,0x6e, + 0x5,0x51,0x28, 0x7,0x29,0x23, 0x7,0x28,0x7e, 0x7,0x28,0x7a, + 0x7,0x28,0x73, 0x7,0x33,0x46, 0x5,0x58,0x40, 0x4,0x53,0x71, + 0x7,0x33,0x52, 0x4,0x53,0x68, 0x4,0x53,0x65, 0x4,0x53,0x6c, + 0x7,0x33,0x49, 0x7,0x33,0x51, 0x7,0x33,0x43, 0x5,0x58,0x3d, + 0x7,0x33,0x42, 0x5,0x58,0x3c, 0x7,0x33,0x3c, 0x4,0x53,0x70, + 0x4,0x53,0x67, 0x7,0x33,0x45, 0x4,0x53,0x6f, 0x7,0x33,0x3d, + 0x4,0x53,0x6e, 0x7,0x33,0x47, 0x7,0x33,0x4e, 0x4,0x53,0x66, + 0x7,0x33,0x50, 0x7,0x33,0x3e, 0x4,0x53,0x69, 0x7,0x33,0x3b, + 0x7,0x33,0x53, 0x7,0x33,0x40, 0x7,0x33,0x3f, 0x7,0x33,0x48, + 0x7,0x33,0x4a, 0x5,0x58,0x3f, 0x7,0x33,0x4c, 0x4,0x53,0x6d, + 0x7,0x33,0x44, 0x5,0x58,0x3e, 0xf,0x57,0x6e, 0xf,0x57,0x6f, + 0xf,0x57,0x70, 0xf,0x57,0x71, 0xf,0x57,0x72, 0xf,0x57,0x73, + 0xf,0x57,0x74, 0xf,0x57,0x75, 0xf,0x57,0x76, 0xf,0x57,0x77, + 0xf,0x57,0x78, 0x7,0x33,0x54, 0x7,0x33,0x41, 0x7,0x33,0x4b, + 0x4,0x58,0x6e, 0x5,0x5e,0x52, 0x5,0x5e,0x51, 0x7,0x3b,0x7d, + 0x4,0x58,0x6f, 0x5,0x5e,0x54, 0x4,0x58,0x71, 0x7,0x3b,0x79, + 0x4,0x58,0x6d, 0x5,0x5e,0x4d, 0x5,0x5e,0x53, 0x5,0x5e,0x4e, + 0x7,0x3b,0x76, 0x7,0x3c,0x25, 0x4,0x58,0x72, 0x7,0x43,0x2a, + 0x5,0x5e,0x4f, 0x7,0x3c,0x21, 0x7,0x3b,0x77, 0x5,0x5e,0x56, + 0x7,0x3c,0x27, 0x7,0x3b,0x7c, 0x7,0x3b,0x78, 0x5,0x5e,0x50, + 0x4,0x58,0x74, 0x7,0x3b,0x7b, 0x7,0x3b,0x7e, 0x7,0x3c,0x22, + 0x7,0x3c,0x23, 0x4,0x58,0x73, 0x5,0x5e,0x4b, 0x7,0x3c,0x26, + 0x5,0x5e,0x4c, 0x7,0x3c,0x24, 0x7,0x3b,0x75, 0xf,0x5c,0x63, + 0xf,0x5c,0x64, 0xf,0x5c,0x65, 0xf,0x5c,0x66, 0xf,0x5c,0x67, + 0xf,0x5c,0x68, 0xf,0x5c,0x69, 0xf,0x5c,0x6a, 0xf,0x5c,0x6b, + 0x7,0x3c,0x28, 0x7,0x3c,0x29, 0x7,0x3b,0x7a, 0x4,0x5d,0x5e, + 0x4,0x5d,0x56, 0x7,0x43,0x37, 0x4,0x5d,0x58, 0x7,0x43,0x35, + 0x5,0x64,0x68, 0x7,0x43,0x3a, 0x7,0x43,0x2b, 0x4,0x5d,0x60, + 0x5,0x64,0x66, 0x5,0x58,0x41, 0x4,0x5d,0x59, 0x5,0x64,0x67, + 0x7,0x43,0x38, 0x7,0x43,0x32, 0x5,0x64,0x64, 0x4,0x5d,0x53, + 0x7,0x43,0x3b, 0x4,0x5d,0x55, 0x5,0x64,0x65, 0x4,0x5d,0x5d, + 0x7,0x43,0x39, 0x7,0x43,0x2f, 0x7,0x43,0x33, 0x7,0x4a,0x2a, + 0x7,0x43,0x30, 0x4,0x5d,0x5c, 0x7,0x43,0x34, 0x7,0x43,0x31, + 0x7,0x43,0x3c, 0x7,0x43,0x2c, 0x7,0x43,0x2d, 0xf,0x60,0x72, + 0xf,0x60,0x75, 0x7,0x43,0x36, 0x4,0x5d,0x5f, 0x7,0x43,0x2e, + 0x5,0x69,0x4d, 0x5,0x69,0x4f, 0x7,0x4a,0x2f, 0x4,0x61,0x3e, + 0x7,0x4a,0x2c, 0x7,0x4a,0x2e, 0x4,0x61,0x43, 0x4,0x61,0x39, + 0x5,0x69,0x50, 0x4,0x61,0x41, 0x7,0x4a,0x34, 0x4,0x61,0x42, + 0x5,0x69,0x4e, 0x4,0x61,0x3f, 0x7,0x4a,0x26, 0x7,0x4a,0x29, + 0x7,0x43,0x3d, 0x7,0x4a,0x28, 0x7,0x4a,0x35, 0x7,0x50,0x33, + 0x7,0x4a,0x33, 0x4,0x61,0x3c, 0x5,0x6d,0x60, 0x7,0x4a,0x27, + 0xf,0x63,0x78, 0xf,0x63,0x79, 0xf,0x63,0x7a, 0x4,0x61,0x44, + 0x7,0x4a,0x2b, 0x7,0x50,0x35, 0x7,0x4a,0x30, 0x7,0x4a,0x31, + 0x7,0x4a,0x2d, 0x7,0x4a,0x32, 0x4,0x61,0x38, 0xf,0x60,0x74, + 0x4,0x64,0x4a, 0x4,0x64,0x4b, 0x5,0x6d,0x62, 0x5,0x6d,0x61, + 0x7,0x50,0x2d, 0x5,0x6d,0x63, 0x7,0x50,0x2f, 0x4,0x64,0x49, + 0x7,0x50,0x2b, 0x5,0x69,0x53, 0x7,0x50,0x32, 0x7,0x50,0x2e, + 0x7,0x50,0x34, 0x7,0x50,0x36, 0x7,0x50,0x2c, 0x7,0x50,0x30, + 0xf,0x66,0x36, 0xf,0x66,0x37, 0xf,0x66,0x38, 0xf,0x66,0x39, + 0x7,0x50,0x38, 0x7,0x50,0x37, 0x7,0x50,0x39, 0x7,0x55,0x2a, + 0x4,0x67,0x42, 0x7,0x55,0x34, 0x7,0x55,0x2d, 0x7,0x55,0x33, + 0x4,0x67,0x38, 0x7,0x55,0x2e, 0x5,0x71,0x3d, 0x7,0x55,0x2c, + 0x7,0x55,0x2f, 0x4,0x67,0x3c, 0x5,0x71,0x3a, 0x5,0x71,0x39, + 0x4,0x67,0x43, 0x7,0x59,0x3b, 0x7,0x59,0x35, 0x4,0x67,0x3a, + 0x5,0x71,0x3c, 0x5,0x71,0x3b, 0x7,0x55,0x31, 0x7,0x55,0x2b, + 0x7,0x55,0x30, 0x5,0x71,0x38, 0x7,0x55,0x35, 0x5,0x74,0x3b, + 0x5,0x74,0x3d, 0x5,0x74,0x40, 0x5,0x76,0x4b, 0x4,0x69,0x47, + 0x7,0x59,0x39, 0x4,0x69,0x4a, 0x5,0x74,0x3f, 0x4,0x69,0x49, + 0x5,0x74,0x3e, 0x7,0x59,0x37, 0x7,0x59,0x40, 0x7,0x55,0x36, + 0x5,0x74,0x3c, 0x7,0x59,0x36, 0x7,0x59,0x3a, 0x7,0x59,0x3f, + 0x4,0x69,0x46, 0x7,0x59,0x3e, 0xf,0x69,0x72, 0xf,0x69,0x73, + 0xf,0x69,0x74, 0x7,0x59,0x3c, 0x7,0x59,0x3d, 0x4,0x6a,0x7d, + 0x4,0x6a,0x7e, 0x7,0x5c,0x66, 0x5,0x76,0x4e, 0x5,0x76,0x4d, + 0x5,0x78,0x31, 0x7,0x5c,0x68, 0x7,0x5c,0x69, 0x7,0x5c,0x6a, + 0xf,0x6a,0x74, 0xf,0x6a,0x75, 0x7,0x5c,0x67, 0x7,0x59,0x42, + 0x7,0x5f,0x57, 0x7,0x5f,0x58, 0x7,0x5f,0x55, 0x4,0x6c,0x27, + 0x7,0x5f,0x56, 0x7,0x5f,0x5a, 0xf,0x6b,0x65, 0xf,0x6b,0x66, + 0x7,0x5f,0x54, 0x7,0x5f,0x59, 0x7,0x5f,0x5b, 0x4,0x6d,0x23, + 0x7,0x61,0x4b, 0x5,0x79,0x4e, 0x7,0x61,0x4c, 0xf,0x6c,0x3a, + 0xf,0x6c,0x3b, 0x7,0x61,0x4a, 0x5,0x7a,0x75, 0x7,0x62,0x65, + 0x7,0x62,0x64, 0x5,0x7a,0x39, 0x4,0x6d,0x7e, 0x7,0x63,0x74, + 0x7,0x64,0x62, 0x4,0x6e,0x3c, 0x7,0x64,0x44, 0x7,0x65,0x44, + 0x7,0x66,0x50, 0x5,0x24,0x77, 0x4,0x30,0x24, 0x5,0x30,0x44, + 0x5,0x30,0x45, 0x4,0x35,0x48, 0x4,0x35,0x49, 0x4,0x35,0x47, + 0x6,0x44,0x7b, 0x4,0x3b,0x3a, 0x5,0x42,0x7e, 0x5,0x43,0x21, + 0x6,0x58,0x4c, 0x4,0x47,0x4d, 0x5,0x51,0x2c, 0x4,0x4d,0x63, + 0x5,0x51,0x2d, 0x5,0x51,0x2b, 0x5,0x58,0x42, 0x7,0x33,0x56, + 0x7,0x33,0x55, 0x7,0x3c,0x2a, 0x5,0x5e,0x57, 0x7,0x43,0x3e, + 0x7,0x4a,0x36, 0x7,0x4a,0x39, 0x5,0x69,0x54, 0x7,0x4a,0x37, + 0x5,0x69,0x55, 0x7,0x4a,0x38, 0x7,0x50,0x3a, 0x7,0x4a,0x3a, + 0x5,0x71,0x3e, 0x5,0x7a,0x76, 0x7,0x65,0x77, 0x6,0x34,0x55, + 0x6,0x3c,0x35, 0x6,0x3c,0x34, 0xf,0x38,0x57, 0x4,0x3b,0x3b, + 0x5,0x3c,0x3e, 0x6,0x4e,0x7b, 0xf,0x3f,0x3d, 0x5,0x43,0x22, + 0x4,0x40,0x75, 0x6,0x5b,0x5f, 0x4,0x47,0x50, 0x6,0x62,0x54, + 0x4,0x47,0x51, 0x7,0x29,0x28, 0x7,0x29,0x27, 0x7,0x29,0x25, + 0x5,0x51,0x2f, 0x5,0x51,0x2e, 0x7,0x29,0x26, 0xf,0x52,0x3b, + 0x5,0x58,0x43, 0x4,0x53,0x74, 0x7,0x33,0x57, 0x5,0x58,0x44, + 0x7,0x2c,0x56, 0x5,0x5e,0x5a, 0x7,0x3c,0x2d, 0x5,0x5e,0x58, + 0x7,0x3c,0x2c, 0x5,0x5e,0x59, 0x7,0x3c,0x2b, 0x5,0x64,0x69, + 0x4,0x5d,0x63, 0x7,0x43,0x40, 0x4,0x5d,0x62, 0x5,0x5e,0x5b, + 0x7,0x4a,0x3c, 0x5,0x69,0x57, 0x7,0x4a,0x3d, 0x7,0x43,0x41, + 0x7,0x43,0x42, 0x5,0x69,0x56, 0x5,0x6d,0x66, 0x5,0x6d,0x65, + 0x5,0x6d,0x67, 0xf,0x66,0x3a, 0x5,0x6d,0x64, 0xf,0x63,0x7b, + 0x5,0x71,0x3f, 0x5,0x74,0x41, 0xf,0x6a,0x76, 0xf,0x6a,0x77, + 0x5,0x78,0x32, 0x5,0x79,0x4f, 0x5,0x7a,0x77, 0x7,0x65,0x45, + 0x6,0x25,0x54, 0x5,0x23,0x29, 0x5,0x2b,0x4a, 0x5,0x30,0x48, + 0x5,0x30,0x47, 0x6,0x3c,0x37, 0x6,0x3c,0x36, 0x6,0x44,0x7e, + 0x6,0x44,0x7c, 0x5,0x35,0x61, 0x6,0x45,0x21, 0x6,0x44,0x7d, + 0x4,0x3b,0x3c, 0x6,0x4e,0x7c, 0x4,0x3b,0x3d, 0x5,0x3c,0x40, + 0x5,0x3c,0x3f, 0x6,0x4e,0x7e, 0x5,0x3c,0x41, 0x6,0x4f,0x23, + 0x6,0x4e,0x7d, 0xf,0x32,0x55, 0x4,0x40,0x77, 0x5,0x43,0x25, + 0x4,0x40,0x76, 0x6,0x58,0x4e, 0x6,0x58,0x4f, 0x5,0x43,0x27, + 0x5,0x43,0x23, 0x5,0x43,0x26, 0x6,0x58,0x4d, 0x6,0x4f,0x22, + 0x5,0x43,0x24, 0x5,0x43,0x28, 0x6,0x62,0x55, 0x6,0x62,0x56, + 0x4,0x47,0x53, 0x4,0x47,0x52, 0x6,0x62,0x59, 0x5,0x49,0x7d, + 0x5,0x49,0x7c, 0x6,0x62,0x5b, 0x6,0x62,0x5a, 0x6,0x62,0x57, + 0x6,0x62,0x58, 0x5,0x51,0x32, 0x4,0x4d,0x66, 0x7,0x29,0x29, + 0x7,0x29,0x2b, 0x5,0x51,0x31, 0x5,0x51,0x33, 0x7,0x29,0x2d, + 0x7,0x29,0x2c, 0x5,0x49,0x7e, 0x5,0x51,0x30, 0x7,0x29,0x2a, + 0x5,0x4a,0x21, 0x7,0x29,0x2e, 0xf,0x52,0x3c, 0x5,0x58,0x47, + 0x5,0x58,0x48, 0x5,0x58,0x46, 0x7,0x33,0x59, 0x4,0x53,0x76, + 0x7,0x33,0x5a, 0x7,0x33,0x5c, 0x7,0x33,0x5b, 0x5,0x58,0x45, + 0x7,0x33,0x58, 0x5,0x5e,0x5d, 0x5,0x5e,0x5e, 0x5,0x5e,0x5f, + 0x5,0x5e,0x5c, 0x7,0x3c,0x30, 0x7,0x3c,0x2e, 0x7,0x3c,0x2f, + 0x4,0x5d,0x65, 0x5,0x64,0x6a, 0x5,0x64,0x6b, 0x7,0x43,0x43, + 0x7,0x43,0x44, 0x7,0x43,0x45, 0x4,0x61,0x47, 0x5,0x69,0x58, + 0x5,0x58,0x49, 0x7,0x4a,0x3e, 0x4,0x61,0x49, 0x5,0x6d,0x6b, + 0x5,0x6d,0x68, 0x7,0x50,0x3b, 0x5,0x6d,0x6a, 0x5,0x6d,0x69, + 0x4,0x67,0x46, 0x5,0x71,0x40, 0x7,0x55,0x37, 0x7,0x55,0x38, + 0x7,0x59,0x43, 0x7,0x5c,0x6c, 0x7,0x59,0x44, 0x7,0x59,0x45, + 0x7,0x5c,0x6d, 0x7,0x5c,0x6e, 0x5,0x74,0x42, 0x7,0x5f,0x5c, + 0x7,0x61,0x4d, 0x7,0x5f,0x5d, 0x5,0x79,0x50, 0x5,0x7a,0x3a, + 0x7,0x65,0x46, 0x7,0x66,0x43, 0xf,0x28,0x6c, 0x5,0x2b,0x4b, + 0x6,0x3c,0x38, 0xf,0x32,0x56, 0x5,0x35,0x64, 0x5,0x35,0x63, + 0x4,0x35,0x4f, 0x5,0x35,0x62, 0x4,0x35,0x4e, 0x6,0x45,0x25, + 0x6,0x45,0x23, 0x6,0x4f,0x25, 0x5,0x3c,0x42, 0x5,0x3c,0x46, + 0x5,0x3c,0x44, 0x5,0x3c,0x48, 0x5,0x3c,0x45, 0x6,0x4f,0x28, + 0x6,0x4f,0x26, 0x5,0x3c,0x47, 0x5,0x3c,0x43, 0x6,0x4f,0x27, + 0x6,0x4f,0x24, 0xf,0x3f,0x3e, 0x4,0x40,0x7c, 0x4,0x40,0x7d, + 0x4,0x40,0x7a, 0x6,0x58,0x52, 0x5,0x43,0x2b, 0x6,0x58,0x51, + 0x5,0x43,0x2a, 0x4,0x40,0x79, 0x4,0x40,0x7b, 0x6,0x58,0x53, + 0xf,0x45,0x47, 0x5,0x43,0x29, 0x6,0x62,0x61, 0x6,0x62,0x5c, + 0x5,0x4a,0x25, 0x5,0x4a,0x23, 0x5,0x4a,0x22, 0x6,0x62,0x5f, + 0x5,0x4a,0x24, 0x6,0x62,0x5e, 0x6,0x62,0x60, 0xf,0x4c,0x48, + 0x6,0x62,0x5d, 0x6,0x62,0x62, 0xf,0x4c,0x49, 0x5,0x51,0x35, + 0x5,0x51,0x34, 0x4,0x4d,0x69, 0x5,0x51,0x37, 0x5,0x51,0x36, + 0x5,0x51,0x38, 0x4,0x4d,0x6a, 0x7,0x29,0x2f, 0x7,0x29,0x30, + 0x4,0x4d,0x6b, 0x7,0x29,0x31, 0x7,0x33,0x64, 0x5,0x58,0x4b, + 0x7,0x33,0x5e, 0x7,0x33,0x60, 0x7,0x33,0x61, 0x4,0x53,0x78, + 0x5,0x58,0x4a, 0x7,0x33,0x62, 0x5,0x58,0x4c, 0x7,0x33,0x5f, + 0xf,0x57,0x7a, 0x7,0x33,0x5d, 0x7,0x33,0x63, 0x4,0x58,0x79, + 0x5,0x5e,0x63, 0x7,0x3c,0x31, 0x5,0x5e,0x62, 0x4,0x58,0x78, + 0x5,0x5e,0x60, 0x5,0x5e,0x64, 0x5,0x5e,0x61, 0xf,0x5c,0x6c, + 0x7,0x43,0x46, 0x4,0x5d,0x67, 0x7,0x43,0x47, 0x4,0x5d,0x66, + 0x5,0x64,0x6c, 0x7,0x4a,0x3f, 0x5,0x64,0x6d, 0x5,0x69,0x5b, + 0x7,0x4a,0x40, 0x5,0x69,0x5a, 0x7,0x4a,0x43, 0x7,0x50,0x3d, + 0x7,0x4a,0x42, 0x5,0x69,0x59, 0x5,0x6d,0x6d, 0x5,0x6d,0x6c, + 0x7,0x50,0x3c, 0x5,0x71,0x42, 0x5,0x6d,0x6e, 0x5,0x71,0x41, + 0x7,0x55,0x39, 0x7,0x59,0x46, 0x7,0x5c,0x70, 0x7,0x5c,0x6f, + 0x5,0x7a,0x78, 0x5,0x2b,0x4c, 0x4,0x2b,0x4a, 0x6,0x34,0x56, + 0xf,0x2d,0x4a, 0x4,0x30,0x26, 0x6,0x3c,0x39, 0x5,0x30,0x49, + 0x5,0x30,0x4a, 0xf,0x32,0x57, 0xf,0x32,0x58, 0x6,0x3c,0x3a, + 0x6,0x45,0x2a, 0x6,0x45,0x2c, 0x6,0x45,0x27, 0x6,0x45,0x28, + 0x6,0x45,0x26, 0x6,0x45,0x2b, 0x5,0x35,0x65, 0xf,0x38,0x59, + 0xf,0x38,0x5a, 0xf,0x38,0x5b, 0xf,0x38,0x5c, 0xf,0x38,0x5d, + 0xf,0x38,0x5e, 0xf,0x38,0x5f, 0xf,0x38,0x60, 0x6,0x45,0x2d, + 0x4,0x35,0x53, 0x6,0x45,0x29, 0x4,0x35,0x52, 0x6,0x4f,0x2b, + 0x4,0x3b,0x40, 0x5,0x3c,0x49, 0x5,0x3c,0x4b, 0x6,0x4f,0x2e, + 0x6,0x4f,0x2c, 0x6,0x4f,0x2d, 0x6,0x58,0x57, 0x5,0x3c,0x4a, + 0xf,0x3f,0x3f, 0xf,0x3f,0x41, 0xf,0x3f,0x42, 0xf,0x3f,0x43, + 0xf,0x3f,0x44, 0xf,0x3f,0x45, 0x6,0x4f,0x2f, 0x6,0x4f,0x2a, + 0x5,0x3c,0x4d, 0x4,0x41,0x22, 0x6,0x58,0x54, 0x6,0x58,0x59, + 0x6,0x58,0x56, 0x5,0x43,0x30, 0x5,0x43,0x2c, 0x6,0x58,0x5e, + 0x6,0x58,0x55, 0x5,0x43,0x2f, 0x5,0x43,0x31, 0x5,0x43,0x32, + 0x6,0x58,0x58, 0x6,0x58,0x60, 0x6,0x58,0x62, 0x5,0x43,0x33, + 0x6,0x58,0x5f, 0xf,0x45,0x48, 0xf,0x45,0x49, 0xf,0x45,0x4a, + 0xf,0x45,0x4b, 0xf,0x45,0x4c, 0xf,0x45,0x4d, 0xf,0x45,0x4e, + 0x6,0x58,0x61, 0xf,0x3f,0x40, 0x6,0x58,0x5b, 0x5,0x43,0x2e, + 0xf,0x46,0x34, 0x6,0x62,0x65, 0x4,0x47,0x55, 0x5,0x4a,0x26, + 0x6,0x62,0x64, 0x6,0x62,0x66, 0x6,0x62,0x6c, 0x6,0x62,0x63, + 0x6,0x62,0x69, 0x5,0x4a,0x27, 0x4,0x47,0x57, 0xf,0x4c,0x4d, + 0xf,0x4c,0x4e, 0xf,0x4c,0x4f, 0xf,0x4c,0x51, 0xf,0x4c,0x50, + 0xf,0x4c,0x4c, 0x6,0x62,0x6b, 0x6,0x58,0x5d, 0x7,0x29,0x33, + 0x7,0x29,0x35, 0x5,0x4a,0x28, 0x4,0x4d,0x6f, 0x7,0x29,0x34, + 0x5,0x51,0x3a, 0x4,0x4d,0x70, 0x5,0x51,0x3b, 0x7,0x29,0x39, + 0x7,0x29,0x38, 0x7,0x29,0x32, 0xf,0x52,0x3d, 0xf,0x52,0x3e, + 0xf,0x52,0x3f, 0x7,0x29,0x37, 0xf,0x4c,0x4b, 0x7,0x33,0x6a, + 0x5,0x58,0x4e, 0x7,0x33,0x67, 0x7,0x33,0x66, 0x5,0x58,0x4f, + 0x7,0x33,0x6b, 0x7,0x33,0x6e, 0x4,0x53,0x7c, 0x7,0x33,0x68, + 0x5,0x58,0x4d, 0x6,0x62,0x68, 0xf,0x54,0x32, 0xf,0x57,0x7b, + 0xf,0x57,0x7c, 0xf,0x57,0x7d, 0xf,0x57,0x7e, 0xf,0x58,0x21, + 0xf,0x58,0x22, 0x7,0x33,0x6d, 0x7,0x33,0x6c, 0x7,0x33,0x65, + 0x7,0x33,0x69, 0x5,0x58,0x50, 0x7,0x3c,0x32, 0x5,0x5e,0x65, + 0x5,0x5b,0x2d, 0x5,0x5e,0x67, 0x5,0x58,0x52, 0x5,0x5e,0x66, + 0x4,0x58,0x7b, 0x7,0x3c,0x38, 0x7,0x3c,0x34, 0x7,0x3c,0x36, + 0x7,0x3c,0x37, 0x7,0x3c,0x35, 0xf,0x5c,0x6e, 0xf,0x5c,0x70, + 0xf,0x5c,0x6f, 0x7,0x43,0x4b, 0x5,0x64,0x73, 0x7,0x43,0x4e, + 0x5,0x64,0x6f, 0x7,0x43,0x49, 0x7,0x43,0x4a, 0x7,0x43,0x51, + 0x5,0x64,0x71, 0x5,0x64,0x6e, 0x5,0x64,0x72, 0x7,0x43,0x4d, + 0x7,0x43,0x4c, 0xf,0x60,0x76, 0xf,0x60,0x77, 0xf,0x60,0x78, + 0xf,0x60,0x79, 0xf,0x60,0x7b, 0xf,0x60,0x7c, 0x7,0x43,0x48, + 0x7,0x43,0x50, 0x5,0x64,0x70, 0x7,0x4a,0x47, 0x7,0x4a,0x4b, + 0x5,0x69,0x5d, 0x5,0x64,0x74, 0x7,0x4a,0x4a, 0x7,0x43,0x4f, + 0x5,0x69,0x5c, 0x4,0x61,0x4b, 0x7,0x4a,0x48, 0x5,0x69,0x5e, + 0x7,0x4a,0x4d, 0x7,0x4a,0x4c, 0x5,0x69,0x60, 0x7,0x4a,0x44, + 0x7,0x4a,0x49, 0x7,0x4a,0x46, 0xf,0x63,0x7c, 0xf,0x63,0x7d, + 0xf,0x63,0x7e, 0xf,0x64,0x21, 0x7,0x4a,0x4e, 0x7,0x4a,0x45, + 0x5,0x69,0x5f, 0x4,0x64,0x51, 0x5,0x6d,0x70, 0x4,0x64,0x50, + 0x5,0x6d,0x6f, 0x7,0x50,0x3e, 0x7,0x50,0x40, 0xf,0x66,0x3b, + 0xf,0x66,0x3c, 0xf,0x66,0x3d, 0xf,0x66,0x3e, 0xf,0x66,0x3f, + 0x7,0x50,0x3f, 0x5,0x71,0x43, 0x4,0x67,0x47, 0x5,0x71,0x44, + 0x5,0x71,0x45, 0xf,0x68,0x4e, 0xf,0x68,0x4f, 0x7,0x55,0x3b, + 0x7,0x59,0x47, 0x5,0x74,0x45, 0x5,0x74,0x44, 0xf,0x69,0x76, + 0xf,0x69,0x77, 0xf,0x69,0x78, 0x7,0x59,0x4a, 0x7,0x59,0x48, + 0x7,0x59,0x49, 0xf,0x68,0x4d, 0x7,0x5c,0x71, 0x4,0x6b,0x22, + 0x5,0x74,0x43, 0x7,0x5c,0x72, 0xf,0x6a,0x78, 0x7,0x5c,0x73, + 0x7,0x5f,0x5e, 0x7,0x5f,0x60, 0x7,0x5f,0x5f, 0x7,0x62,0x66, + 0x6,0x2e,0x31, 0x6,0x34,0x57, 0x6,0x34,0x58, 0x5,0x35,0x66, + 0xf,0x38,0x61, 0x6,0x4f,0x30, 0x4,0x3b,0x44, 0x6,0x58,0x63, + 0xf,0x45,0x4f, 0x5,0x4a,0x2a, 0xf,0x4c,0x52, 0x7,0x29,0x3a, + 0x5,0x58,0x54, 0x5,0x58,0x53, 0xf,0x58,0x23, 0x7,0x33,0x6f, + 0x5,0x5e,0x69, 0x5,0x5e,0x6a, 0x5,0x5e,0x68, 0xf,0x5c,0x71, + 0x5,0x64,0x75, 0x7,0x43,0x53, 0x7,0x4a,0x50, 0x7,0x4a,0x4f, + 0x5,0x71,0x46, 0x7,0x5c,0x74, 0x6,0x2e,0x32, 0x6,0x2e,0x33, + 0x6,0x34,0x59, 0xf,0x2d,0x4b, 0xf,0x2d,0x4d, 0xf,0x2d,0x4e, + 0xf,0x2d,0x4f, 0xf,0x2d,0x50, 0x4,0x2b,0x4b, 0x5,0x30,0x4d, + 0x6,0x3c,0x3e, 0x6,0x3c,0x3d, 0x5,0x30,0x4e, 0x6,0x3c,0x3c, + 0x4,0x30,0x29, 0xf,0x32,0x59, 0xf,0x32,0x5a, 0xf,0x32,0x5b, + 0xf,0x32,0x5c, 0xf,0x32,0x5d, 0x5,0x35,0x6d, 0x6,0x45,0x30, + 0x5,0x35,0x67, 0x4,0x35,0x57, 0x5,0x35,0x6a, 0x5,0x35,0x6f, + 0x5,0x35,0x6e, 0x4,0x35,0x58, 0x6,0x45,0x2e, 0x6,0x45,0x2f, + 0x5,0x35,0x6b, 0x5,0x35,0x68, 0xf,0x38,0x63, 0xf,0x38,0x64, + 0xf,0x38,0x65, 0xf,0x38,0x66, 0xf,0x38,0x68, 0xf,0x38,0x69, + 0xf,0x38,0x62, 0x5,0x35,0x6c, 0x5,0x35,0x69, 0xf,0x38,0x67, + 0x5,0x3c,0x51, 0x5,0x3c,0x50, 0x5,0x3c,0x54, 0x5,0x3c,0x4f, + 0x6,0x4f,0x34, 0x6,0x4f,0x31, 0x5,0x43,0x39, 0x5,0x3c,0x53, + 0x5,0x3c,0x4e, 0x6,0x4f,0x33, 0x4,0x3b,0x46, 0x5,0x3c,0x55, + 0x6,0x58,0x64, 0x6,0x4f,0x35, 0xf,0x3f,0x47, 0xf,0x3f,0x48, + 0xf,0x3f,0x49, 0xf,0x3f,0x4a, 0xf,0x3f,0x4b, 0xf,0x3f,0x4c, + 0xf,0x3f,0x4f, 0xf,0x3f,0x50, 0xf,0x3f,0x51, 0x6,0x4f,0x32, + 0xf,0x3f,0x4e, 0x6,0x58,0x66, 0x5,0x43,0x36, 0x4,0x41,0x23, + 0x6,0x58,0x68, 0x4,0x41,0x25, 0x5,0x43,0x3b, 0x5,0x43,0x35, + 0x5,0x43,0x3d, 0x5,0x43,0x37, 0x4,0x41,0x24, 0x6,0x58,0x6a, + 0x6,0x58,0x69, 0x5,0x43,0x3a, 0xf,0x45,0x50, 0xf,0x45,0x51, + 0xf,0x45,0x52, 0xf,0x45,0x53, 0xf,0x45,0x54, 0xf,0x45,0x55, + 0xf,0x45,0x56, 0xf,0x45,0x57, 0x6,0x58,0x65, 0x6,0x58,0x67, + 0x6,0x62,0x6d, 0xf,0x3f,0x4d, 0x6,0x62,0x6e, 0x4,0x47,0x5c, + 0x5,0x4a,0x2c, 0x5,0x4a,0x30, 0x6,0x62,0x72, 0x5,0x4a,0x2b, + 0x5,0x4a,0x2e, 0x5,0x4a,0x31, 0x6,0x62,0x71, 0x6,0x62,0x6f, + 0x5,0x4a,0x33, 0x4,0x47,0x5d, 0x5,0x4a,0x2f, 0x6,0x62,0x76, + 0x5,0x4a,0x2d, 0x6,0x62,0x73, 0xf,0x4c,0x53, 0xf,0x4c,0x54, + 0xf,0x4c,0x55, 0xf,0x4c,0x56, 0xf,0x4c,0x57, 0xf,0x4c,0x58, + 0xf,0x4c,0x59, 0x6,0x62,0x70, 0x5,0x51,0x42, 0x5,0x51,0x3c, + 0x4,0x4d,0x72, 0x5,0x51,0x3f, 0x5,0x51,0x3e, 0x5,0x51,0x3d, + 0x5,0x51,0x40, 0x7,0x29,0x3f, 0x5,0x51,0x46, 0x5,0x51,0x43, + 0x7,0x29,0x41, 0x5,0x51,0x41, 0x7,0x29,0x3c, 0x7,0x29,0x40, + 0x7,0x29,0x3e, 0x6,0x62,0x74, 0x7,0x29,0x42, 0x7,0x33,0x72, + 0x5,0x51,0x45, 0x5,0x51,0x44, 0xf,0x52,0x40, 0xf,0x52,0x41, + 0x7,0x29,0x43, 0x7,0x29,0x3b, 0xf,0x58,0x2d, 0x4,0x54,0x23, + 0x4,0x54,0x24, 0x4,0x54,0x28, 0x7,0x33,0x74, 0x5,0x58,0x59, + 0x4,0x54,0x21, 0x4,0x54,0x22, 0x4,0x54,0x27, 0x7,0x33,0x75, + 0x4,0x54,0x25, 0x7,0x33,0x71, 0x7,0x33,0x70, 0x5,0x58,0x58, + 0x5,0x58,0x5a, 0x7,0x33,0x76, 0xf,0x58,0x24, 0xf,0x58,0x26, + 0xf,0x58,0x27, 0xf,0x58,0x28, 0xf,0x58,0x29, 0xf,0x58,0x2a, + 0xf,0x58,0x2b, 0xf,0x58,0x2c, 0xf,0x58,0x2e, 0x7,0x33,0x78, + 0x7,0x33,0x77, 0x5,0x58,0x5b, 0x5,0x58,0x56, 0x5,0x58,0x57, + 0x5,0x5e,0x6f, 0x5,0x5e,0x71, 0x4,0x59,0x22, 0x5,0x5e,0x70, + 0x4,0x59,0x24, 0x4,0x59,0x21, 0x5,0x5e,0x72, 0x4,0x58,0x7e, + 0x5,0x5e,0x6c, 0x4,0x59,0x23, 0x5,0x5e,0x6e, 0x5,0x5e,0x6b, + 0x7,0x3c,0x3a, 0x5,0x5e,0x73, 0xf,0x58,0x25, 0xf,0x5c,0x72, + 0xf,0x5c,0x73, 0xf,0x5c,0x74, 0xf,0x5c,0x75, 0xf,0x5c,0x76, + 0x7,0x3c,0x39, 0x5,0x64,0x79, 0x5,0x64,0x7c, 0x4,0x5d,0x6b, + 0x7,0x43,0x57, 0x7,0x43,0x56, 0x5,0x64,0x76, 0x5,0x64,0x7a, + 0x5,0x64,0x78, 0x5,0x64,0x77, 0x5,0x64,0x7d, 0x5,0x64,0x7e, + 0x7,0x43,0x5b, 0x7,0x43,0x5a, 0x5,0x64,0x7b, 0xf,0x60,0x7d, + 0x7,0x43,0x58, 0x7,0x43,0x55, 0x7,0x43,0x59, 0x7,0x43,0x54, + 0x5,0x58,0x5d, 0x5,0x69,0x62, 0x5,0x69,0x66, 0x5,0x69,0x68, + 0x4,0x61,0x4e, 0x4,0x61,0x4c, 0x5,0x69,0x63, 0x5,0x69,0x67, + 0x5,0x69,0x65, 0x5,0x69,0x61, 0x7,0x4a,0x52, 0x5,0x69,0x69, + 0x5,0x69,0x64, 0xf,0x64,0x23, 0xf,0x64,0x24, 0xf,0x64,0x25, + 0x7,0x4a,0x51, 0x7,0x4a,0x53, 0x4,0x64,0x52, 0x4,0x64,0x54, + 0x4,0x64,0x58, 0x4,0x64,0x57, 0x5,0x6d,0x71, 0x7,0x50,0x41, + 0x7,0x50,0x43, 0x5,0x6d,0x72, 0x7,0x50,0x42, 0xf,0x66,0x40, + 0xf,0x66,0x41, 0xf,0x66,0x42, 0x4,0x67,0x49, 0x5,0x71,0x48, + 0x5,0x71,0x49, 0x7,0x55,0x3f, 0x7,0x55,0x3d, 0x7,0x55,0x3c, + 0x7,0x55,0x3e, 0x5,0x71,0x47, 0x5,0x74,0x46, 0x5,0x74,0x49, + 0x4,0x69,0x4d, 0x5,0x74,0x48, 0x5,0x74,0x47, 0xf,0x69,0x79, + 0x5,0x76,0x4f, 0x5,0x76,0x50, 0xf,0x6a,0x79, 0x7,0x59,0x4b, + 0x7,0x5c,0x75, 0x7,0x5c,0x76, 0x5,0x78,0x33, 0x5,0x78,0x34, + 0x5,0x78,0x35, 0x4,0x6d,0x26, 0x7,0x61,0x4e, 0x5,0x7a,0x79, + 0x5,0x7b,0x49, 0x6,0x2e,0x35, 0x6,0x2e,0x34, 0x6,0x34,0x5b, + 0x5,0x2b,0x4d, 0xf,0x2d,0x51, 0x6,0x34,0x5a, 0x6,0x3c,0x41, + 0x4,0x30,0x2b, 0x6,0x3c,0x42, 0x6,0x3c,0x40, 0x5,0x30,0x50, + 0x5,0x30,0x4f, 0x6,0x3c,0x3f, 0x6,0x3c,0x43, 0x4,0x35,0x5f, + 0x6,0x45,0x33, 0x4,0x35,0x5a, 0x5,0x35,0x73, 0x6,0x45,0x37, + 0x5,0x35,0x77, 0x6,0x45,0x3a, 0x5,0x35,0x71, 0x5,0x35,0x75, + 0x6,0x45,0x3c, 0x6,0x45,0x3d, 0x5,0x35,0x74, 0x6,0x45,0x3b, + 0x6,0x45,0x32, 0x6,0x45,0x36, 0xf,0x38,0x6a, 0x6,0x45,0x31, + 0x6,0x45,0x35, 0x6,0x45,0x39, 0x5,0x35,0x76, 0x5,0x35,0x70, + 0x6,0x45,0x34, 0x5,0x3c,0x60, 0x5,0x3c,0x57, 0x5,0x3c,0x58, + 0x5,0x3c,0x5b, 0x6,0x4f,0x3b, 0x5,0x3c,0x56, 0x6,0x4f,0x38, + 0x4,0x3b,0x4e, 0x5,0x3c,0x5d, 0x5,0x3c,0x59, 0x5,0x3c,0x61, + 0x5,0x3c,0x5a, 0x6,0x4f,0x39, 0x6,0x58,0x79, 0x5,0x3c,0x62, + 0xf,0x3f,0x54, 0x6,0x4f,0x37, 0xf,0x3f,0x52, 0x6,0x4f,0x3a, + 0x5,0x3c,0x5e, 0x5,0x43,0x41, 0x5,0x43,0x3f, 0x6,0x58,0x71, + 0x5,0x43,0x40, 0x5,0x43,0x42, 0x6,0x58,0x74, 0x6,0x58,0x70, + 0x5,0x43,0x47, 0x5,0x43,0x45, 0x6,0x58,0x6e, 0x6,0x58,0x6d, + 0x5,0x43,0x3e, 0x6,0x58,0x6f, 0x6,0x58,0x72, 0x6,0x58,0x76, + 0x5,0x43,0x4a, 0x6,0x58,0x6c, 0x6,0x58,0x77, 0x5,0x43,0x43, + 0x5,0x43,0x4c, 0x5,0x43,0x48, 0x6,0x58,0x73, 0x5,0x43,0x49, + 0x5,0x43,0x46, 0x6,0x58,0x75, 0x5,0x4a,0x35, 0xf,0x45,0x59, + 0x6,0x58,0x78, 0x6,0x58,0x6b, 0x6,0x63,0x22, 0x5,0x4a,0x43, + 0x4,0x47,0x60, 0x5,0x4a,0x37, 0x5,0x4a,0x3f, 0x5,0x4a,0x36, + 0x5,0x51,0x4e, 0x5,0x4a,0x3b, 0x6,0x62,0x77, 0x6,0x62,0x7b, + 0x5,0x4a,0x42, 0x5,0x4a,0x3c, 0x5,0x4a,0x39, 0x5,0x4a,0x40, + 0x5,0x4a,0x41, 0x5,0x4a,0x3d, 0x5,0x43,0x44, 0x5,0x4a,0x38, + 0x5,0x4a,0x44, 0x6,0x62,0x7e, 0x5,0x4a,0x46, 0x6,0x62,0x79, + 0x5,0x4a,0x47, 0xf,0x4c,0x5a, 0xf,0x4c,0x5b, 0x6,0x62,0x78, + 0x6,0x62,0x7a, 0x6,0x62,0x7d, 0x6,0x63,0x21, 0x6,0x62,0x7c, + 0x5,0x4a,0x3a, 0x7,0x29,0x46, 0x4,0x4d,0x7a, 0x5,0x51,0x4c, + 0x5,0x51,0x47, 0x5,0x51,0x4a, 0x5,0x51,0x4f, 0x7,0x29,0x45, + 0x7,0x29,0x49, 0x4,0x4d,0x7c, 0x7,0x29,0x4d, 0x4,0x4d,0x7b, + 0x5,0x51,0x4b, 0x5,0x51,0x4d, 0x4,0x4e,0x24, 0x5,0x51,0x51, + 0x5,0x51,0x52, 0x4,0x47,0x63, 0x7,0x29,0x4f, 0x5,0x51,0x49, + 0x7,0x29,0x4b, 0xf,0x52,0x42, 0xf,0x52,0x43, 0xf,0x52,0x44, + 0xf,0x52,0x45, 0x7,0x29,0x48, 0x7,0x29,0x4c, 0x7,0x29,0x47, + 0x7,0x29,0x4a, 0x5,0x51,0x50, 0x5,0x51,0x54, 0x5,0x51,0x55, + 0x5,0x4a,0x45, 0x7,0x34,0x21, 0x5,0x58,0x60, 0x5,0x4a,0x48, + 0x5,0x58,0x69, 0x4,0x54,0x2a, 0x7,0x33,0x7a, 0x5,0x58,0x63, + 0x7,0x33,0x7e, 0x7,0x34,0x23, 0x7,0x33,0x7c, 0x5,0x58,0x5f, + 0x7,0x33,0x7b, 0x7,0x34,0x25, 0x5,0x51,0x53, 0x7,0x34,0x26, + 0x5,0x58,0x67, 0x5,0x58,0x68, 0x5,0x58,0x5e, 0x5,0x58,0x61, + 0x7,0x33,0x7d, 0x5,0x58,0x65, 0x5,0x58,0x64, 0x7,0x34,0x24, + 0x4,0x54,0x2b, 0x5,0x58,0x66, 0x4,0x54,0x2c, 0xf,0x58,0x31, + 0xf,0x58,0x32, 0x7,0x34,0x22, 0x5,0x5e,0x7a, 0x5,0x5e,0x7d, + 0x5,0x5e,0x75, 0x7,0x3c,0x40, 0x5,0x5e,0x76, 0x5,0x5e,0x7c, + 0x5,0x5e,0x78, 0x4,0x59,0x29, 0x7,0x3c,0x3e, 0x7,0x43,0x67, + 0x7,0x3c,0x43, 0x5,0x5e,0x7e, 0x4,0x59,0x2e, 0x7,0x3c,0x3b, + 0x7,0x3c,0x42, 0x7,0x3c,0x44, 0x5,0x5e,0x79, 0x4,0x59,0x27, + 0x7,0x3c,0x41, 0x7,0x34,0x27, 0x7,0x3c,0x3f, 0x4,0x59,0x2f, + 0xf,0x5c,0x77, 0x7,0x3c,0x3d, 0xf,0x5c,0x79, 0x5,0x5e,0x77, + 0x5,0x5e,0x74, 0x7,0x43,0x62, 0x4,0x5d,0x70, 0x7,0x43,0x66, + 0x4,0x5d,0x6f, 0x5,0x65,0x21, 0x5,0x65,0x22, 0x5,0x65,0x2d, + 0x5,0x65,0x26, 0x4,0x5d,0x71, 0x5,0x65,0x2c, 0x5,0x65,0x28, + 0x7,0x43,0x5f, 0x5,0x69,0x70, 0x7,0x43,0x65, 0x7,0x43,0x5c, + 0x5,0x65,0x2e, 0x7,0x43,0x5e, 0x5,0x65,0x24, 0x7,0x43,0x61, + 0x5,0x65,0x23, 0x5,0x65,0x29, 0x4,0x5f,0x33, 0x4,0x5d,0x76, + 0x5,0x65,0x25, 0xf,0x60,0x7e, 0xf,0x61,0x21, 0xf,0x61,0x22, + 0xf,0x61,0x23, 0xf,0x61,0x24, 0xf,0x61,0x25, 0x7,0x43,0x6b, + 0x5,0x65,0x27, 0x7,0x43,0x60, 0x7,0x43,0x69, 0x7,0x43,0x68, + 0x7,0x43,0x6a, 0x7,0x43,0x5d, 0x5,0x65,0x2b, 0x7,0x43,0x63, + 0x7,0x3c,0x3c, 0x5,0x65,0x2f, 0x5,0x69,0x6a, 0x7,0x4a,0x65, + 0x5,0x69,0x6f, 0x5,0x69,0x71, 0x7,0x4a,0x68, 0x5,0x69,0x74, + 0x7,0x4a,0x5b, 0x5,0x65,0x2a, 0x5,0x69,0x6e, 0x7,0x4a,0x58, + 0x5,0x69,0x6d, 0x5,0x69,0x72, 0x4,0x61,0x55, 0x7,0x4a,0x54, + 0x4,0x5d,0x73, 0x7,0x4a,0x59, 0x7,0x43,0x64, 0x7,0x4a,0x5e, + 0x5,0x69,0x73, 0x7,0x4a,0x5a, 0x7,0x4a,0x66, 0x7,0x4a,0x55, + 0x7,0x4a,0x5c, 0x5,0x69,0x6b, 0x5,0x69,0x6c, 0x7,0x4a,0x61, + 0x7,0x4a,0x62, 0x7,0x4a,0x63, 0x7,0x4a,0x5f, 0x5,0x69,0x76, + 0x5,0x69,0x75, 0x7,0x4a,0x60, 0x7,0x4a,0x5d, 0x7,0x4a,0x67, + 0x7,0x4a,0x56, 0x7,0x4a,0x64, 0x4,0x61,0x53, 0x4,0x64,0x59, + 0x5,0x6d,0x7d, 0x5,0x6d,0x77, 0x7,0x50,0x44, 0x5,0x6d,0x7b, + 0x5,0x6d,0x76, 0x5,0x6d,0x79, 0x7,0x50,0x48, 0x7,0x50,0x46, + 0x4,0x64,0x5c, 0x5,0x6d,0x73, 0x4,0x64,0x5d, 0x7,0x50,0x47, + 0x5,0x6d,0x78, 0x5,0x6d,0x75, 0x5,0x6d,0x74, 0x7,0x50,0x49, + 0xf,0x66,0x43, 0xf,0x66,0x44, 0xf,0x66,0x45, 0xf,0x66,0x46, + 0xf,0x66,0x47, 0x7,0x50,0x45, 0x7,0x50,0x4a, 0x7,0x50,0x4b, + 0x5,0x6d,0x7c, 0x5,0x6d,0x7e, 0x5,0x6d,0x7a, 0x4,0x67,0x4e, + 0x7,0x55,0x42, 0x4,0x67,0x4f, 0x5,0x71,0x4b, 0x7,0x55,0x41, + 0x7,0x55,0x44, 0x4,0x67,0x4d, 0x4,0x67,0x4b, 0x5,0x71,0x4c, + 0x7,0x55,0x43, 0x7,0x55,0x40, 0x5,0x71,0x4a, 0xf,0x68,0x51, + 0xf,0x68,0x52, 0x5,0x74,0x4a, 0x7,0x55,0x45, 0x7,0x59,0x4c, + 0x5,0x74,0x4d, 0x5,0x74,0x4f, 0x5,0x74,0x4e, 0x5,0x74,0x4c, + 0x7,0x59,0x4d, 0x5,0x74,0x51, 0x7,0x59,0x4e, 0xf,0x69,0x7a, + 0x7,0x59,0x4f, 0x5,0x74,0x50, 0x5,0x76,0x54, 0x5,0x76,0x52, + 0x5,0x76,0x55, 0x7,0x5c,0x79, 0x7,0x5c,0x78, 0x5,0x76,0x53, + 0x5,0x76,0x51, 0x4,0x6c,0x2b, 0x7,0x5f,0x61, 0x5,0x78,0x37, + 0x5,0x78,0x36, 0x4,0x6c,0x2a, 0x5,0x78,0x38, 0x7,0x5f,0x62, + 0x7,0x61,0x4f, 0x7,0x5f,0x63, 0x7,0x61,0x52, 0x4,0x6d,0x28, + 0x7,0x61,0x54, 0x7,0x62,0x67, 0x7,0x61,0x53, 0x7,0x61,0x51, + 0x7,0x61,0x50, 0xf,0x6b,0x67, 0x5,0x7a,0x3c, 0x5,0x7a,0x3b, + 0x5,0x7a,0x3d, 0x7,0x63,0x76, 0x5,0x7b,0x4a, 0x7,0x64,0x63, + 0x5,0x7b,0x6a, 0xf,0x6d,0x28, 0x7,0x65,0x65, 0xf,0x6d,0x33, + 0x6,0x23,0x39, 0x6,0x23,0x3a, 0x6,0x25,0x55, 0x5,0x30,0x52, + 0x6,0x3c,0x44, 0x5,0x30,0x51, 0x5,0x35,0x7a, 0x5,0x35,0x79, + 0x5,0x35,0x78, 0x6,0x45,0x3e, 0x6,0x45,0x41, 0x6,0x45,0x40, + 0x6,0x45,0x42, 0x6,0x45,0x3f, 0x6,0x45,0x43, 0x6,0x45,0x44, + 0x4,0x35,0x60, 0xf,0x38,0x6b, 0x5,0x3c,0x65, 0x6,0x4f,0x3f, + 0x5,0x3c,0x64, 0x6,0x4f,0x41, 0x6,0x4f,0x3e, 0x5,0x3c,0x66, + 0xf,0x3f,0x55, 0xf,0x3f,0x56, 0xf,0x3f,0x57, 0xf,0x3f,0x58, + 0x6,0x4f,0x3d, 0x6,0x4f,0x40, 0x6,0x58,0x7d, 0x5,0x43,0x4d, + 0x6,0x58,0x7a, 0x6,0x58,0x7e, 0x6,0x59,0x21, 0xf,0x45,0x5a, + 0xf,0x45,0x5b, 0xf,0x45,0x5c, 0x6,0x58,0x7b, 0x6,0x58,0x7c, + 0x6,0x59,0x22, 0x5,0x4a,0x4a, 0x6,0x63,0x23, 0x6,0x63,0x24, + 0x5,0x4a,0x49, 0x6,0x63,0x25, 0x6,0x63,0x26, 0xf,0x4c,0x5c, + 0xf,0x4c,0x5d, 0xf,0x4c,0x5e, 0x7,0x29,0x51, 0x5,0x51,0x56, + 0x4,0x4e,0x25, 0xf,0x52,0x46, 0xf,0x52,0x48, 0x7,0x29,0x50, + 0x5,0x58,0x6a, 0x4,0x54,0x31, 0x5,0x58,0x6b, 0x7,0x34,0x28, + 0x7,0x3c,0x46, 0xf,0x58,0x34, 0xf,0x58,0x36, 0x7,0x3c,0x48, + 0x7,0x3c,0x47, 0x7,0x3c,0x45, 0x5,0x5f,0x21, 0xf,0x5c,0x7a, + 0xf,0x5c,0x7b, 0x5,0x65,0x30, 0x7,0x43,0x6c, 0xf,0x61,0x26, + 0xf,0x61,0x27, 0x7,0x4a,0x6c, 0x7,0x4a,0x6d, 0x7,0x4a,0x6a, + 0xf,0x64,0x26, 0xf,0x64,0x27, 0x7,0x4a,0x6b, 0x7,0x4a,0x69, + 0x4,0x64,0x5e, 0x7,0x50,0x4d, 0xf,0x66,0x48, 0xf,0x66,0x49, + 0x7,0x50,0x4e, 0x7,0x55,0x46, 0x5,0x71,0x4d, 0x7,0x55,0x47, + 0x7,0x55,0x48, 0x7,0x55,0x49, 0x7,0x59,0x50, 0xf,0x69,0x7c, + 0x5,0x76,0x56, 0x5,0x79,0x51, 0x6,0x34,0x5c, 0x5,0x2b,0x4e, + 0x6,0x34,0x5e, 0xf,0x2d,0x52, 0xf,0x2d,0x54, 0x6,0x3c,0x45, + 0x5,0x30,0x54, 0x6,0x3c,0x47, 0xf,0x32,0x5f, 0xf,0x32,0x60, + 0x6,0x3c,0x46, 0x5,0x30,0x53, 0xf,0x32,0x5e, 0x5,0x35,0x7b, + 0x6,0x45,0x4e, 0x6,0x45,0x4d, 0x6,0x45,0x46, 0x4,0x35,0x64, + 0x5,0x36,0x22, 0x5,0x36,0x21, 0x6,0x45,0x4a, 0x5,0x35,0x7d, + 0x6,0x45,0x47, 0x6,0x45,0x4c, 0x6,0x45,0x4b, 0x5,0x35,0x7c, + 0x5,0x35,0x7e, 0xf,0x38,0x6d, 0x6,0x45,0x48, 0x6,0x45,0x49, + 0x4,0x35,0x65, 0x6,0x4f,0x46, 0x6,0x4f,0x47, 0x5,0x3c,0x70, + 0x5,0x3c,0x6e, 0x6,0x4f,0x45, 0x6,0x4f,0x44, 0x6,0x4f,0x42, + 0x5,0x36,0x23, 0x5,0x3c,0x6d, 0x5,0x3c,0x68, 0x5,0x3c,0x6b, + 0x5,0x3c,0x6a, 0x6,0x4f,0x43, 0x5,0x3c,0x69, 0x5,0x3c,0x71, + 0x5,0x3c,0x6c, 0x5,0x3c,0x6f, 0x6,0x59,0x23, 0x6,0x59,0x28, + 0x5,0x43,0x53, 0x6,0x59,0x26, 0x6,0x59,0x29, 0x5,0x43,0x51, + 0x4,0x41,0x2b, 0x5,0x43,0x52, 0x5,0x43,0x4f, 0x6,0x59,0x27, + 0x5,0x43,0x4e, 0xf,0x45,0x5d, 0xf,0x45,0x5e, 0xf,0x45,0x5f, + 0x6,0x59,0x25, 0x4,0x41,0x2d, 0x5,0x43,0x54, 0x6,0x63,0x2d, + 0x6,0x63,0x2f, 0x5,0x4a,0x50, 0x4,0x47,0x68, 0x6,0x63,0x28, + 0x6,0x63,0x2b, 0x5,0x4a,0x4d, 0x6,0x63,0x2c, 0x6,0x63,0x27, + 0x6,0x63,0x30, 0x5,0x4a,0x4b, 0x5,0x4a,0x4e, 0x6,0x63,0x31, + 0x6,0x63,0x2e, 0xf,0x4c,0x5f, 0xf,0x4c,0x60, 0xf,0x4c,0x61, + 0xf,0x4c,0x63, 0x5,0x4a,0x4f, 0x5,0x4a,0x4c, 0x7,0x29,0x59, + 0x6,0x63,0x2a, 0x5,0x51,0x60, 0x7,0x29,0x57, 0x7,0x29,0x5e, + 0x7,0x29,0x62, 0x7,0x29,0x56, 0x5,0x51,0x59, 0x7,0x29,0x5a, + 0x7,0x29,0x55, 0x7,0x29,0x5c, 0x5,0x51,0x58, 0x5,0x51,0x5b, + 0x5,0x51,0x5e, 0x4,0x4e,0x2c, 0x6,0x63,0x29, 0x7,0x29,0x58, + 0x7,0x29,0x5d, 0x7,0x29,0x5b, 0x5,0x51,0x5d, 0x5,0x51,0x5f, + 0x7,0x29,0x52, 0x5,0x51,0x57, 0x7,0x29,0x54, 0x7,0x29,0x63, + 0xf,0x52,0x49, 0xf,0x52,0x4a, 0xf,0x52,0x4b, 0xf,0x52,0x4c, + 0x7,0x29,0x53, 0x7,0x29,0x5f, 0x7,0x29,0x60, 0x7,0x29,0x61, + 0x5,0x51,0x5c, 0x5,0x51,0x5a, 0x7,0x34,0x29, 0x5,0x58,0x73, + 0x7,0x34,0x2f, 0x5,0x58,0x74, 0x7,0x34,0x2d, 0x5,0x58,0x70, + 0x7,0x34,0x2b, 0x7,0x34,0x34, 0x5,0x58,0x6e, 0x5,0x58,0x71, + 0x5,0x58,0x6d, 0x7,0x34,0x35, 0x7,0x34,0x30, 0x7,0x34,0x36, + 0x5,0x58,0x6c, 0x7,0x34,0x33, 0xf,0x58,0x37, 0xf,0x58,0x39, + 0xf,0x58,0x3a, 0x7,0x34,0x2c, 0x7,0x34,0x2e, 0x7,0x34,0x2a, + 0xf,0x58,0x38, 0x4,0x54,0x35, 0x5,0x58,0x6f, 0x7,0x3c,0x4a, + 0x7,0x3c,0x52, 0x5,0x5f,0x25, 0x7,0x3c,0x4d, 0x7,0x3c,0x4c, + 0x7,0x3c,0x4b, 0x7,0x3c,0x53, 0x4,0x59,0x33, 0x7,0x3c,0x50, + 0x4,0x59,0x34, 0x7,0x3c,0x51, 0x5,0x5f,0x22, 0x5,0x5f,0x2b, + 0x4,0x59,0x36, 0x5,0x5f,0x28, 0x5,0x5f,0x27, 0x7,0x3c,0x54, + 0x5,0x5f,0x24, 0x5,0x5f,0x2a, 0x7,0x3c,0x49, 0xf,0x5c,0x7c, + 0xf,0x5c,0x7d, 0x7,0x3c,0x4e, 0x7,0x3c,0x4f, 0x5,0x5f,0x26, + 0x5,0x5f,0x23, 0x5,0x5f,0x29, 0x4,0x5d,0x79, 0x7,0x43,0x70, + 0x4,0x5e,0x21, 0x5,0x65,0x32, 0x5,0x65,0x34, 0xf,0x61,0x28, + 0xf,0x61,0x29, 0xf,0x61,0x2a, 0x7,0x43,0x6f, 0x7,0x43,0x72, + 0x7,0x43,0x71, 0x7,0x43,0x6e, 0x7,0x43,0x6d, 0x5,0x65,0x31, + 0x5,0x65,0x33, 0x5,0x69,0x78, 0x7,0x4a,0x6e, 0x7,0x4a,0x71, + 0x7,0x4a,0x6f, 0x7,0x4a,0x70, 0x5,0x69,0x7a, 0x4,0x61,0x5a, + 0x4,0x61,0x5b, 0x5,0x69,0x79, 0x5,0x69,0x77, 0x5,0x69,0x7b, + 0x7,0x4a,0x72, 0xf,0x64,0x28, 0x7,0x4a,0x74, 0x4,0x64,0x62, + 0x5,0x6e,0x25, 0x5,0x6e,0x23, 0x7,0x50,0x53, 0x5,0x6e,0x24, + 0x5,0x6e,0x22, 0x7,0x50,0x51, 0x5,0x6e,0x21, 0xf,0x66,0x4a, + 0x7,0x50,0x52, 0x7,0x50,0x50, 0x7,0x50,0x4f, 0x5,0x6e,0x26, + 0x7,0x50,0x54, 0x4,0x67,0x53, 0x5,0x71,0x4e, 0x4,0x67,0x54, + 0x7,0x55,0x4c, 0x7,0x55,0x4b, 0x7,0x55,0x4a, 0x7,0x59,0x56, + 0x4,0x69,0x50, 0x7,0x59,0x52, 0x7,0x59,0x51, 0x4,0x69,0x51, + 0x7,0x59,0x57, 0x7,0x59,0x53, 0x7,0x59,0x54, 0x7,0x59,0x55, + 0x7,0x5c,0x7e, 0x7,0x5d,0x21, 0x5,0x76,0x57, 0x7,0x5c,0x7b, + 0x7,0x5c,0x7a, 0x7,0x5c,0x7c, 0x7,0x5c,0x7d, 0x5,0x76,0x59, + 0x5,0x76,0x58, 0x5,0x78,0x3c, 0x5,0x78,0x3b, 0x5,0x78,0x3a, + 0x7,0x5f,0x67, 0x7,0x5f,0x65, 0x7,0x5f,0x64, 0x5,0x78,0x39, + 0x7,0x5f,0x66, 0x5,0x79,0x53, 0x5,0x79,0x52, 0x5,0x7a,0x3e, + 0x5,0x7a,0x3f, 0x7,0x62,0x68, 0x5,0x7a,0x7a, 0x7,0x64,0x64, + 0x7,0x62,0x69, 0x7,0x63,0x77, 0x5,0x7b,0x6b, 0x7,0x65,0x66, + 0x6,0x29,0x2b, 0x6,0x2e,0x36, 0x6,0x3c,0x48, 0x6,0x45,0x4f, + 0x5,0x36,0x25, 0x5,0x36,0x24, 0x4,0x41,0x2e, 0x6,0x59,0x2a, + 0xf,0x45,0x61, 0x5,0x4a,0x51, 0xf,0x4c,0x65, 0xf,0x4c,0x66, + 0x5,0x4a,0x52, 0x7,0x29,0x64, 0x7,0x29,0x65, 0x7,0x29,0x66, + 0x5,0x51,0x62, 0x7,0x34,0x37, 0x5,0x58,0x75, 0x7,0x34,0x38, + 0xf,0x58,0x3b, 0x5,0x5f,0x2d, 0x5,0x5f,0x2c, 0xf,0x5c,0x7e, + 0xf,0x5d,0x21, 0xf,0x5d,0x22, 0xf,0x5d,0x23, 0x5,0x5f,0x2e, + 0x5,0x65,0x37, 0x5,0x65,0x36, 0x7,0x43,0x73, 0x7,0x4a,0x75, + 0x4,0x61,0x5c, 0x7,0x4a,0x76, 0xf,0x66,0x4b, 0x7,0x50,0x55, + 0xf,0x68,0x54, 0x7,0x59,0x58, 0x7,0x5f,0x68, 0x7,0x65,0x47, + 0x7,0x65,0x67, 0x6,0x29,0x2c, 0x6,0x2e,0x37, 0x6,0x59,0x2d, + 0x6,0x59,0x2c, 0x6,0x59,0x2b, 0xf,0x52,0x4d, 0x7,0x33,0x21, + 0x4,0x61,0x5d, 0x7,0x55,0x4d, 0x6,0x25,0x59, 0x6,0x25,0x58, + 0x6,0x25,0x57, 0x4,0x24,0x7e, 0x6,0x29,0x2d, 0x4,0x25,0x24, + 0x6,0x3c,0x49, 0x6,0x29,0x2e, 0xf,0x25,0x33, 0xf,0x25,0x34, + 0x6,0x3c,0x4a, 0x6,0x29,0x2f, 0x5,0x24,0x78, 0x6,0x3c,0x4b, + 0x6,0x45,0x50, 0x5,0x27,0x6a, 0x5,0x27,0x6b, 0x5,0x27,0x70, + 0x6,0x2e,0x38, 0x6,0x2e,0x3d, 0x5,0x27,0x6f, 0x4,0x28,0x25, + 0x5,0x27,0x71, 0x5,0x27,0x6d, 0x4,0x28,0x28, 0x6,0x2e,0x3b, + 0xf,0x28,0x6d, 0xf,0x28,0x6f, 0xf,0x28,0x70, 0xf,0x28,0x73, + 0xf,0x28,0x74, 0xf,0x28,0x75, 0x6,0x2e,0x3a, 0x6,0x2e,0x3f, + 0x5,0x27,0x6e, 0x5,0x27,0x68, 0x6,0x2e,0x3c, 0x5,0x27,0x6c, + 0x6,0x2e,0x39, 0x6,0x2e,0x3e, 0x5,0x2b,0x4f, 0x5,0x2b,0x56, + 0x5,0x2b,0x52, 0x6,0x34,0x5f, 0x5,0x2b,0x51, 0x6,0x34,0x62, + 0x5,0x2b,0x55, 0x5,0x2b,0x53, 0x4,0x2b,0x4f, 0x4,0x2b,0x51, + 0x5,0x2b,0x50, 0x6,0x34,0x64, 0x6,0x34,0x63, 0xf,0x2d,0x55, + 0xf,0x2d,0x56, 0xf,0x2d,0x57, 0xf,0x2d,0x58, 0xf,0x2d,0x59, + 0x4,0x2b,0x52, 0x6,0x34,0x65, 0x6,0x34,0x61, 0x6,0x4a,0x47, + 0x5,0x2b,0x57, 0x5,0x2b,0x54, 0x6,0x3c,0x54, 0x6,0x3c,0x58, + 0x5,0x30,0x5b, 0x6,0x3c,0x53, 0x5,0x30,0x56, 0x5,0x30,0x5a, + 0x4,0x30,0x31, 0x5,0x30,0x57, 0x5,0x30,0x59, 0x6,0x3c,0x52, + 0x6,0x3c,0x4c, 0x6,0x3c,0x56, 0x4,0x30,0x32, 0x6,0x3c,0x57, + 0x6,0x3c,0x4d, 0x5,0x43,0x55, 0x6,0x3c,0x55, 0x5,0x30,0x58, + 0x6,0x3c,0x50, 0x6,0x3c,0x4e, 0x5,0x30,0x5c, 0x5,0x36,0x27, + 0x5,0x36,0x26, 0x6,0x3c,0x4f, 0x6,0x45,0x5b, 0x5,0x36,0x2c, + 0x4,0x35,0x6a, 0x6,0x45,0x5c, 0x5,0x36,0x2b, 0x6,0x3c,0x51, + 0x5,0x36,0x29, 0x6,0x45,0x57, 0x6,0x45,0x5a, 0xf,0x38,0x70, + 0xf,0x38,0x71, 0xf,0x38,0x72, 0x6,0x45,0x56, 0x6,0x45,0x54, + 0x6,0x45,0x55, 0x6,0x45,0x52, 0x6,0x45,0x5d, 0x6,0x45,0x58, + 0x6,0x45,0x53, 0x5,0x36,0x2a, 0x4,0x35,0x67, 0x6,0x45,0x59, + 0x5,0x36,0x2d, 0x5,0x36,0x28, 0xf,0x38,0x6f, 0x6,0x45,0x51, + 0x5,0x3c,0x76, 0x5,0x3c,0x72, 0x5,0x3c,0x78, 0x5,0x3c,0x77, + 0x4,0x3b,0x56, 0x6,0x4f,0x53, 0x4,0x3b,0x5a, 0x4,0x3b,0x58, + 0x5,0x3c,0x79, 0x6,0x4f,0x52, 0x7,0x29,0x67, 0x6,0x4f,0x4d, + 0x6,0x4f,0x4c, 0x6,0x4f,0x50, 0x6,0x4f,0x4f, 0x4,0x3b,0x5b, + 0x6,0x4f,0x49, 0x6,0x4f,0x4b, 0xf,0x3f,0x62, 0x6,0x4f,0x51, + 0x6,0x4f,0x54, 0x6,0x4f,0x55, 0x6,0x4f,0x4a, 0xf,0x3f,0x59, + 0xf,0x3f,0x5a, 0xf,0x3f,0x5b, 0xf,0x3f,0x5c, 0xf,0x3f,0x5d, + 0xf,0x3f,0x5f, 0xf,0x3f,0x60, 0xf,0x3f,0x61, 0x5,0x3c,0x75, + 0x6,0x4f,0x4e, 0x5,0x3c,0x74, 0x5,0x3c,0x73, 0x4,0x3b,0x59, + 0x6,0x4f,0x56, 0x6,0x59,0x40, 0x6,0x59,0x34, 0x6,0x59,0x3d, + 0x6,0x59,0x30, 0x4,0x41,0x31, 0x4,0x41,0x30, 0x6,0x59,0x2e, + 0x5,0x43,0x59, 0x6,0x59,0x31, 0x6,0x59,0x41, 0x6,0x59,0x3b, + 0x6,0x59,0x3f, 0x6,0x59,0x37, 0x6,0x59,0x35, 0x6,0x59,0x43, + 0x6,0x59,0x42, 0x5,0x3c,0x7a, 0x4,0x41,0x32, 0x6,0x59,0x33, + 0x6,0x59,0x3e, 0xf,0x45,0x62, 0xf,0x45,0x63, 0xf,0x45,0x64, + 0xf,0x45,0x65, 0xf,0x45,0x66, 0xf,0x45,0x67, 0xf,0x45,0x68, + 0xf,0x45,0x69, 0xf,0x45,0x6a, 0xf,0x45,0x6b, 0xf,0x45,0x6c, + 0x6,0x59,0x32, 0x6,0x59,0x36, 0x6,0x59,0x3c, 0x6,0x59,0x39, + 0x6,0x59,0x38, 0x6,0x59,0x3a, 0x6,0x59,0x2f, 0x5,0x43,0x58, + 0x5,0x43,0x57, 0x5,0x43,0x56, 0x6,0x63,0x35, 0x6,0x63,0x34, + 0x6,0x63,0x37, 0x6,0x63,0x32, 0x6,0x63,0x3a, 0x5,0x4a,0x54, + 0x6,0x63,0x36, 0x6,0x63,0x38, 0x6,0x63,0x3c, 0x5,0x4a,0x53, + 0x5,0x4a,0x56, 0x6,0x63,0x33, 0x6,0x63,0x3b, 0x7,0x3c,0x55, + 0xf,0x4c,0x69, 0xf,0x4c,0x6a, 0xf,0x4c,0x6c, 0xf,0x4c,0x6d, + 0xf,0x4c,0x6e, 0xf,0x4c,0x6f, 0xf,0x4c,0x70, 0xf,0x4c,0x71, + 0xf,0x4c,0x72, 0x6,0x63,0x39, 0x7,0x3c,0x56, 0x7,0x3c,0x57, + 0x7,0x3c,0x58, 0x5,0x4a,0x55, 0x7,0x29,0x6e, 0x7,0x29,0x6c, + 0x7,0x29,0x72, 0x7,0x29,0x69, 0x7,0x29,0x6b, 0x4,0x4e,0x2f, + 0x5,0x51,0x64, 0x4,0x4e,0x30, 0x5,0x51,0x68, 0x5,0x51,0x65, + 0x4,0x4e,0x34, 0x7,0x29,0x70, 0xf,0x52,0x4e, 0xf,0x52,0x4f, + 0xf,0x52,0x50, 0xf,0x52,0x51, 0xf,0x52,0x52, 0x5,0x51,0x6d, + 0x7,0x29,0x6a, 0x7,0x29,0x6f, 0x7,0x29,0x74, 0x7,0x29,0x75, + 0x7,0x29,0x71, 0x7,0x29,0x73, 0x7,0x43,0x74, 0x7,0x29,0x68, + 0x7,0x43,0x75, 0x7,0x29,0x6d, 0x5,0x51,0x69, 0x5,0x51,0x67, + 0x5,0x51,0x6c, 0x5,0x51,0x66, 0x5,0x51,0x6a, 0x5,0x51,0x6b, + 0x5,0x51,0x63, 0x7,0x34,0x46, 0x5,0x58,0x7c, 0x5,0x58,0x7b, + 0x5,0x58,0x79, 0x7,0x34,0x41, 0x5,0x58,0x77, 0x7,0x34,0x45, + 0x7,0x34,0x3e, 0x7,0x34,0x47, 0x4,0x54,0x36, 0x7,0x34,0x42, + 0x7,0x34,0x44, 0x7,0x34,0x39, 0x7,0x34,0x4a, 0x7,0x4a,0x77, + 0x7,0x34,0x3c, 0x7,0x34,0x40, 0x7,0x34,0x4c, 0xf,0x58,0x3c, + 0xf,0x58,0x3d, 0xf,0x58,0x3e, 0x7,0x34,0x3d, 0xf,0x58,0x3f, + 0x7,0x2c,0x5a, 0x7,0x34,0x48, 0x7,0x34,0x3b, 0x7,0x34,0x3a, + 0x7,0x34,0x43, 0x7,0x34,0x4b, 0x5,0x58,0x78, 0x5,0x58,0x7d, + 0x5,0x58,0x7a, 0x7,0x34,0x3f, 0x5,0x58,0x76, 0x5,0x5f,0x2f, + 0x4,0x59,0x3a, 0x7,0x3c,0x60, 0x5,0x5f,0x33, 0x7,0x3c,0x5d, + 0x5,0x5f,0x34, 0x7,0x3c,0x5b, 0x7,0x50,0x57, 0x7,0x34,0x49, + 0x7,0x3c,0x62, 0x7,0x3c,0x5e, 0x5,0x5f,0x32, 0x5,0x5f,0x35, + 0xf,0x5d,0x24, 0xf,0x5d,0x26, 0xf,0x5d,0x27, 0xf,0x5d,0x28, + 0x7,0x3c,0x59, 0x7,0x3c,0x5c, 0x7,0x3c,0x5f, 0x7,0x3c,0x63, + 0xf,0x5d,0x25, 0x5,0x5f,0x36, 0x5,0x5f,0x37, 0x5,0x5f,0x31, + 0x5,0x5f,0x30, 0x7,0x3c,0x5a, 0x5,0x65,0x3d, 0x7,0x43,0x7c, + 0x4,0x5e,0x22, 0x7,0x43,0x7a, 0x5,0x65,0x3a, 0x7,0x43,0x78, + 0xf,0x61,0x2b, 0xf,0x61,0x2c, 0xf,0x61,0x2d, 0x7,0x44,0x21, + 0x7,0x43,0x7e, 0x5,0x65,0x39, 0x7,0x43,0x7d, 0x7,0x43,0x76, + 0x7,0x43,0x79, 0x5,0x65,0x3c, 0x5,0x65,0x3b, 0x5,0x65,0x38, + 0x7,0x43,0x7b, 0x7,0x4b,0x21, 0x7,0x4b,0x22, 0x7,0x4a,0x7e, + 0xf,0x64,0x2a, 0xf,0x64,0x2b, 0xf,0x64,0x2d, 0xf,0x64,0x2e, + 0x7,0x4a,0x79, 0x7,0x4a,0x7a, 0x7,0x4a,0x7d, 0x7,0x4a,0x7b, + 0x7,0x4a,0x7c, 0x7,0x4a,0x78, 0x5,0x6a,0x21, 0x5,0x69,0x7e, + 0xf,0x64,0x2c, 0x7,0x50,0x5a, 0x5,0x6e,0x29, 0x7,0x50,0x59, + 0x5,0x6e,0x27, 0xf,0x66,0x4c, 0x7,0x50,0x58, 0x5,0x6e,0x28, + 0x7,0x5d,0x22, 0x4,0x67,0x55, 0x7,0x55,0x4f, 0x5,0x71,0x51, + 0x7,0x55,0x50, 0x7,0x55,0x4e, 0xf,0x68,0x55, 0xf,0x68,0x56, + 0xf,0x68,0x57, 0xf,0x68,0x58, 0x5,0x71,0x4f, 0x5,0x71,0x50, + 0x5,0x69,0x7d, 0x7,0x55,0x51, 0x5,0x71,0x52, 0x5,0x74,0x52, + 0x4,0x6b,0x25, 0x7,0x59,0x5b, 0x7,0x59,0x5a, 0x7,0x59,0x59, + 0x7,0x5d,0x23, 0x7,0x5d,0x25, 0x7,0x5d,0x24, 0x7,0x62,0x6a, + 0x7,0x5f,0x6a, 0x7,0x5f,0x69, 0x5,0x78,0x3d, 0x7,0x61,0x55, + 0x7,0x62,0x6b, 0x7,0x65,0x68, 0x6,0x29,0x30, 0x5,0x21,0x7c, + 0x5,0x23,0x2c, 0x5,0x23,0x2b, 0x5,0x23,0x2d, 0x5,0x23,0x2a, + 0x4,0x23,0x31, 0x6,0x25,0x5a, 0x6,0x25,0x5c, 0x4,0x23,0x33, + 0x4,0x25,0x27, 0x5,0x24,0x79, 0x4,0x25,0x26, 0x4,0x25,0x28, + 0x4,0x25,0x25, 0x6,0x29,0x33, 0x4,0x25,0x2a, 0x5,0x24,0x7a, + 0x4,0x35,0x71, 0x6,0x29,0x32, 0xf,0x25,0x35, 0xf,0x25,0x36, + 0xf,0x25,0x37, 0xf,0x38,0x73, 0xf,0x38,0x75, 0x6,0x45,0x61, + 0x6,0x45,0x5f, 0x6,0x45,0x60, 0x6,0x29,0x31, 0x4,0x25,0x29, + 0x4,0x28,0x2e, 0x6,0x45,0x5e, 0x4,0x28,0x2a, 0x4,0x28,0x2d, + 0x4,0x28,0x2c, 0x6,0x34,0x69, 0x4,0x28,0x2f, 0x5,0x27,0x72, + 0x5,0x27,0x73, 0x6,0x4f,0x58, 0x6,0x2e,0x43, 0xf,0x28,0x76, + 0xf,0x28,0x78, 0xf,0x28,0x79, 0xf,0x28,0x7c, 0x6,0x4f,0x5a, + 0x6,0x2e,0x41, 0x6,0x2e,0x42, 0x6,0x2e,0x40, 0xf,0x28,0x77, + 0xf,0x28,0x7b, 0x6,0x4f,0x57, 0x6,0x4f,0x59, 0x5,0x27,0x74, + 0x5,0x2b,0x5a, 0x5,0x2b,0x59, 0x5,0x2b,0x58, 0x4,0x2b,0x57, + 0x4,0x2b,0x55, 0x5,0x2b,0x5f, 0x4,0x41,0x33, 0x5,0x2b,0x5b, + 0xf,0x2d,0x5a, 0xf,0x45,0x6e, 0x6,0x59,0x45, 0x6,0x59,0x44, + 0x6,0x59,0x46, 0x6,0x34,0x6c, 0x6,0x34,0x66, 0x6,0x34,0x67, + 0x6,0x34,0x68, 0x6,0x34,0x6b, 0x6,0x34,0x6a, 0x5,0x2b,0x5e, + 0x5,0x2b,0x5c, 0x5,0x2b,0x5d, 0x5,0x30,0x61, 0x5,0x30,0x5d, + 0x4,0x30,0x36, 0x6,0x3c,0x5b, 0x5,0x30,0x65, 0x5,0x30,0x66, + 0x5,0x30,0x5e, 0x5,0x30,0x63, 0x5,0x30,0x5f, 0x4,0x30,0x35, + 0x6,0x3c,0x5d, 0x4,0x30,0x37, 0x6,0x3c,0x5f, 0x6,0x63,0x3d, + 0x6,0x63,0x3f, 0x6,0x63,0x40, 0x6,0x3c,0x5c, 0x6,0x3c,0x5e, + 0x6,0x3c,0x5a, 0x5,0x30,0x62, 0x5,0x30,0x64, 0x5,0x30,0x60, + 0x5,0x30,0x67, 0x6,0x63,0x3e, 0x6,0x3c,0x59, 0xf,0x32,0x62, + 0xf,0x32,0x63, 0xf,0x32,0x64, 0x5,0x51,0x6e, 0x4,0x4e,0x36, + 0x4,0x35,0x6f, 0x5,0x36,0x31, 0x5,0x36,0x30, 0x5,0x36,0x35, + 0x5,0x36,0x2e, 0x5,0x36,0x32, 0x4,0x35,0x6d, 0x6,0x45,0x66, + 0x5,0x36,0x34, 0x7,0x29,0x7a, 0x7,0x29,0x79, 0x6,0x45,0x68, + 0xf,0x32,0x61, 0xf,0x38,0x76, 0xf,0x52,0x54, 0x7,0x29,0x76, + 0x7,0x29,0x77, 0x7,0x29,0x7b, 0x7,0x29,0x78, 0x6,0x45,0x63, + 0x6,0x45,0x65, 0x6,0x45,0x64, 0x6,0x45,0x62, 0xf,0x33,0x3c, + 0x6,0x45,0x67, 0x5,0x36,0x2f, 0x5,0x36,0x33, 0x5,0x30,0x68, + 0x4,0x3b,0x5f, 0x5,0x3d,0x23, 0x5,0x3c,0x7e, 0x5,0x3d,0x22, + 0x4,0x3b,0x5d, 0x5,0x3d,0x24, 0x6,0x4f,0x64, 0x5,0x3d,0x21, + 0x5,0x43,0x67, 0x5,0x3c,0x7d, 0x5,0x3c,0x7c, 0x6,0x4f,0x62, + 0x6,0x4f,0x5b, 0x4,0x3b,0x5c, 0xf,0x3f,0x63, 0xf,0x3f,0x64, + 0xf,0x3f,0x65, 0xf,0x58,0x41, 0x7,0x34,0x4e, 0x6,0x4f,0x5d, + 0x6,0x4f,0x5c, 0x6,0x4f,0x5e, 0x6,0x4f,0x5f, 0x6,0x4f,0x60, + 0x6,0x4f,0x61, 0xf,0x3f,0x66, 0x6,0x4f,0x63, 0x7,0x34,0x4d, + 0x5,0x3c,0x7b, 0x7,0x3c,0x64, 0x5,0x43,0x5b, 0x5,0x43,0x60, + 0x5,0x43,0x63, 0x5,0x43,0x5e, 0x5,0x43,0x5d, 0x4,0x41,0x35, + 0x6,0x63,0x41, 0x5,0x43,0x5c, 0x5,0x43,0x62, 0x5,0x43,0x5f, + 0x5,0x43,0x64, 0x5,0x43,0x66, 0x4,0x41,0x37, 0x5,0x43,0x65, + 0x6,0x59,0x49, 0x5,0x43,0x5a, 0xf,0x45,0x6f, 0x6,0x59,0x48, + 0x6,0x59,0x4b, 0x5,0x43,0x61, 0x4,0x47,0x6f, 0x5,0x4a,0x5d, + 0x5,0x4a,0x5c, 0x5,0x4a,0x59, 0x5,0x4a,0x58, 0x5,0x4a,0x63, + 0x5,0x4a,0x5f, 0x5,0x4a,0x5b, 0x6,0x63,0x46, 0x6,0x63,0x43, + 0x6,0x63,0x42, 0x5,0x4a,0x61, 0x5,0x4a,0x62, 0x7,0x44,0x22, + 0x7,0x44,0x24, 0x7,0x44,0x23, 0x7,0x44,0x25, 0x6,0x63,0x45, + 0x5,0x4a,0x57, 0x4,0x47,0x72, 0x6,0x63,0x44, 0x5,0x65,0x3e, + 0x5,0x4a,0x5a, 0x5,0x4a,0x5e, 0x5,0x4a,0x64, 0x4,0x4e,0x38, + 0x7,0x4b,0x23, 0x5,0x51,0x72, 0x7,0x2a,0x21, 0x4,0x4e,0x37, + 0x5,0x51,0x73, 0x4,0x4e,0x39, 0x5,0x59,0x28, 0x5,0x51,0x6f, + 0x5,0x51,0x70, 0x7,0x29,0x7e, 0x7,0x2a,0x22, 0x4,0x4e,0x3a, + 0xf,0x52,0x53, 0xf,0x52,0x55, 0xf,0x52,0x56, 0x7,0x4b,0x26, + 0x7,0x4b,0x24, 0x7,0x2a,0x23, 0x7,0x2a,0x25, 0x7,0x2a,0x26, + 0x7,0x2a,0x24, 0x7,0x29,0x7c, 0x7,0x29,0x7d, 0x5,0x51,0x74, + 0x7,0x34,0x50, 0x5,0x51,0x71, 0x7,0x4b,0x25, 0x5,0x6e,0x2a, + 0x5,0x59,0x25, 0x5,0x59,0x26, 0x7,0x50,0x5c, 0x4,0x54,0x38, + 0x7,0x34,0x4f, 0x5,0x59,0x21, 0x5,0x59,0x24, 0x7,0x34,0x52, + 0x5,0x59,0x22, 0x5,0x59,0x23, 0x4,0x54,0x39, 0x7,0x34,0x51, + 0xf,0x58,0x40, 0x7,0x50,0x5d, 0x7,0x50,0x5b, 0x5,0x6e,0x2b, + 0x7,0x3c,0x65, 0x7,0x3c,0x69, 0x5,0x5f,0x38, 0x4,0x59,0x3b, + 0x5,0x5f,0x39, 0x7,0x55,0x52, 0x7,0x55,0x53, 0x7,0x55,0x54, + 0x7,0x3c,0x67, 0x7,0x3c,0x6a, 0x7,0x3c,0x66, 0x5,0x5f,0x3b, + 0x5,0x5f,0x3a, 0x7,0x55,0x55, 0x7,0x3c,0x68, 0x5,0x65,0x40, + 0x7,0x44,0x26, 0x7,0x44,0x27, 0x5,0x65,0x41, 0x5,0x6a,0x25, + 0x5,0x65,0x44, 0x7,0x44,0x29, 0x7,0x44,0x28, 0x5,0x65,0x42, + 0x5,0x65,0x43, 0x7,0x59,0x5c, 0x5,0x65,0x3f, 0x7,0x44,0x2a, + 0x7,0x4b,0x28, 0x7,0x44,0x2b, 0x5,0x6a,0x24, 0x7,0x4b,0x27, + 0x5,0x6a,0x23, 0x7,0x4b,0x2a, 0x7,0x4b,0x29, 0x4,0x61,0x60, + 0x5,0x59,0x27, 0x5,0x6a,0x22, 0x4,0x64,0x64, 0x5,0x6e,0x2c, + 0x7,0x50,0x5f, 0x7,0x50,0x61, 0x7,0x50,0x5e, 0x7,0x50,0x60, + 0x4,0x67,0x56, 0xf,0x68,0x59, 0x7,0x55,0x56, 0x7,0x55,0x57, + 0x7,0x59,0x5d, 0x7,0x55,0x58, 0xf,0x68,0x5a, 0x7,0x5d,0x26, + 0x7,0x5f,0x6b, 0x7,0x5f,0x6c, 0x5,0x7b,0x4b, 0x7,0x63,0x78, + 0x4,0x30,0x39, 0xf,0x32,0x65, 0x6,0x3c,0x60, 0x5,0x36,0x38, + 0x5,0x36,0x37, 0x6,0x45,0x72, 0x6,0x45,0x6e, 0x5,0x36,0x39, + 0x4,0x35,0x76, 0x6,0x45,0x6c, 0x6,0x45,0x73, 0x6,0x45,0x69, + 0x4,0x35,0x77, 0x5,0x36,0x3a, 0x6,0x45,0x70, 0x6,0x45,0x6f, + 0x6,0x45,0x6a, 0x6,0x45,0x6b, 0xf,0x38,0x77, 0x6,0x45,0x71, + 0x4,0x35,0x79, 0x6,0x45,0x6d, 0x6,0x45,0x74, 0x6,0x4f,0x6b, + 0x5,0x3d,0x25, 0x5,0x3d,0x26, 0x4,0x3b,0x65, 0x6,0x4f,0x69, + 0x5,0x43,0x6a, 0x4,0x3b,0x62, 0x4,0x3b,0x63, 0x6,0x4f,0x6a, + 0x6,0x4f,0x66, 0x6,0x4f,0x65, 0x4,0x3b,0x61, 0x6,0x4f,0x67, + 0x6,0x4f,0x68, 0xf,0x3f,0x68, 0xf,0x3f,0x69, 0xf,0x3f,0x6a, + 0xf,0x3f,0x6b, 0x6,0x4f,0x6c, 0x5,0x43,0x69, 0x5,0x43,0x6c, + 0x5,0x43,0x68, 0x6,0x59,0x4e, 0x6,0x59,0x4d, 0x5,0x43,0x6b, + 0x6,0x63,0x4a, 0x5,0x4a,0x66, 0x5,0x4a,0x65, 0xf,0x4c,0x73, + 0xf,0x4c,0x74, 0xf,0x4c,0x75, 0xf,0x4c,0x77, 0x6,0x63,0x49, + 0x6,0x63,0x48, 0xf,0x4c,0x78, 0x6,0x63,0x47, 0x7,0x2a,0x28, + 0x5,0x51,0x78, 0x7,0x2a,0x2c, 0x5,0x51,0x79, 0x5,0x51,0x75, + 0x7,0x2a,0x30, 0x5,0x51,0x76, 0x7,0x2a,0x2f, 0x7,0x2a,0x2e, + 0x7,0x2a,0x2d, 0x7,0x2a,0x29, 0x7,0x2a,0x27, 0x5,0x51,0x77, + 0xf,0x4c,0x76, 0xf,0x52,0x58, 0xf,0x52,0x59, 0x7,0x2a,0x2a, + 0x7,0x2a,0x2b, 0x7,0x2a,0x32, 0x7,0x2a,0x31, 0x7,0x34,0x56, + 0x7,0x34,0x55, 0x5,0x59,0x29, 0x7,0x34,0x58, 0x5,0x59,0x2c, + 0x7,0x34,0x5a, 0x4,0x54,0x41, 0x7,0x34,0x5f, 0x4,0x54,0x3e, + 0x4,0x54,0x3f, 0x7,0x34,0x5e, 0x5,0x59,0x2a, 0x7,0x34,0x57, + 0x7,0x34,0x5d, 0x7,0x34,0x5c, 0x5,0x59,0x2b, 0xf,0x58,0x42, + 0xf,0x58,0x43, 0x7,0x34,0x59, 0x7,0x34,0x5b, 0x7,0x34,0x53, + 0x7,0x34,0x60, 0x5,0x5f,0x41, 0x5,0x5f,0x3f, 0x5,0x5f,0x40, + 0x5,0x5f,0x43, 0x4,0x59,0x40, 0x7,0x3c,0x6c, 0x5,0x5f,0x42, + 0x4,0x59,0x3e, 0x7,0x3c,0x6e, 0x5,0x5f,0x3e, 0x7,0x3c,0x74, + 0x5,0x5f,0x44, 0x7,0x3c,0x6d, 0x7,0x3c,0x73, 0xf,0x5d,0x2a, + 0xf,0x5d,0x2b, 0xf,0x5d,0x2c, 0x7,0x3c,0x6f, 0x7,0x3c,0x71, + 0x7,0x3c,0x72, 0x5,0x5f,0x3d, 0x5,0x65,0x46, 0x5,0x65,0x47, + 0x5,0x65,0x49, 0x7,0x44,0x33, 0x7,0x44,0x2f, 0x4,0x5e,0x23, + 0x7,0x44,0x2c, 0x5,0x65,0x48, 0x4,0x5e,0x26, 0x5,0x65,0x4a, + 0x7,0x3c,0x75, 0x4,0x5e,0x25, 0x7,0x44,0x32, 0x5,0x65,0x4b, + 0x7,0x44,0x35, 0x7,0x44,0x36, 0x7,0x44,0x2d, 0xf,0x61,0x2e, + 0x7,0x44,0x31, 0x7,0x44,0x2e, 0x5,0x65,0x4c, 0x7,0x44,0x30, + 0x7,0x4b,0x2f, 0x7,0x4b,0x2c, 0x5,0x6a,0x2e, 0x5,0x6a,0x2b, + 0x5,0x6a,0x27, 0x5,0x6a,0x2a, 0x5,0x6a,0x29, 0x5,0x6a,0x2f, + 0x5,0x6a,0x2c, 0x5,0x6a,0x28, 0x5,0x6a,0x2d, 0x7,0x4b,0x2d, + 0x7,0x4b,0x2e, 0x7,0x4b,0x30, 0x7,0x4b,0x2b, 0x7,0x44,0x34, + 0x5,0x6a,0x30, 0x5,0x6a,0x26, 0x7,0x50,0x62, 0x5,0x6e,0x31, + 0x5,0x6e,0x2e, 0x5,0x6e,0x2f, 0x5,0x6e,0x2d, 0x5,0x6e,0x30, + 0x7,0x50,0x63, 0x7,0x50,0x64, 0xf,0x66,0x4e, 0x7,0x50,0x65, + 0x7,0x50,0x67, 0x7,0x50,0x66, 0x4,0x67,0x59, 0x4,0x67,0x57, + 0x4,0x67,0x58, 0x5,0x71,0x53, 0x7,0x55,0x5a, 0xf,0x68,0x5b, + 0x7,0x55,0x59, 0x7,0x59,0x5e, 0x7,0x59,0x5f, 0x7,0x59,0x62, + 0x5,0x74,0x53, 0x7,0x59,0x61, 0x7,0x59,0x60, 0xf,0x69,0x7d, + 0x7,0x5d,0x27, 0x7,0x5d,0x29, 0x5,0x76,0x5a, 0x7,0x5d,0x2b, + 0x7,0x5d,0x2a, 0x5,0x76,0x5b, 0x7,0x5d,0x28, 0xf,0x6a,0x7a, + 0x5,0x78,0x3f, 0x4,0x6c,0x2f, 0x7,0x5f,0x6d, 0x7,0x5f,0x6e, + 0x5,0x78,0x3e, 0x7,0x62,0x6c, 0x5,0x7a,0x7b, 0x7,0x63,0x7a, + 0x7,0x63,0x79, 0x7,0x64,0x66, 0x7,0x64,0x65, 0x7,0x65,0x78, + 0x7,0x65,0x79, 0x6,0x34,0x6e, 0x5,0x3d,0x27, 0x5,0x36,0x3b, + 0x6,0x63,0x4b, 0x6,0x63,0x4c, 0x5,0x51,0x7a, 0x7,0x2a,0x34, + 0x7,0x2a,0x33, 0x5,0x59,0x2d, 0x7,0x34,0x61, 0x5,0x5f,0x45, + 0xf,0x5d,0x2d, 0x7,0x44,0x37, 0xf,0x66,0x4f, 0xf,0x68,0x5c, + 0x5,0x74,0x54, 0x5,0x36,0x3c, 0x6,0x3c,0x61, 0x6,0x45,0x75, + 0x6,0x4f,0x6e, 0x5,0x3d,0x29, 0x5,0x3d,0x28, 0xf,0x45,0x70, + 0x6,0x63,0x4d, 0x7,0x2a,0x35, 0x5,0x5f,0x46, 0xf,0x61,0x2f, + 0x5,0x65,0x4d, 0xf,0x68,0x5d, 0x5,0x71,0x54, 0x7,0x55,0x5b, + 0x6,0x3c,0x64, 0xf,0x32,0x66, 0x6,0x3c,0x62, 0x5,0x36,0x3d, + 0x6,0x45,0x76, 0x6,0x45,0x77, 0xf,0x38,0x78, 0x6,0x4f,0x73, + 0x6,0x4f,0x74, 0x6,0x4f,0x75, 0x6,0x4f,0x71, 0x6,0x4f,0x72, + 0x6,0x4f,0x78, 0x6,0x4f,0x76, 0x6,0x4f,0x70, 0x6,0x4f,0x79, + 0xf,0x3f,0x6c, 0xf,0x3f,0x6d, 0xf,0x3f,0x6e, 0xf,0x3f,0x6f, + 0xf,0x3f,0x72, 0xf,0x3f,0x74, 0xf,0x3f,0x71, 0x6,0x4f,0x77, + 0xf,0x3f,0x70, 0x4,0x41,0x47, 0x5,0x43,0x6e, 0x4,0x41,0x45, + 0x4,0x41,0x44, 0x6,0x59,0x53, 0x6,0x59,0x4f, 0xf,0x45,0x71, + 0xf,0x45,0x75, 0xf,0x45,0x76, 0xf,0x45,0x77, 0xf,0x45,0x78, + 0x6,0x59,0x55, 0x6,0x59,0x51, 0x6,0x59,0x52, 0xf,0x45,0x79, + 0x6,0x59,0x54, 0x6,0x59,0x50, 0xf,0x45,0x74, 0x5,0x4a,0x67, + 0x5,0x4a,0x68, 0x6,0x63,0x52, 0x5,0x4a,0x69, 0xf,0x4c,0x68, + 0xf,0x4c,0x79, 0xf,0x4c,0x7b, 0xf,0x4c,0x7c, 0xf,0x4c,0x7d, + 0xf,0x4d,0x21, 0xf,0x4d,0x23, 0xf,0x4d,0x24, 0xf,0x4d,0x25, + 0xf,0x4d,0x28, 0xf,0x4d,0x29, 0x6,0x63,0x4e, 0x4,0x47,0x7a, + 0x6,0x63,0x50, 0x6,0x63,0x51, 0xf,0x4d,0x2a, 0x6,0x63,0x54, + 0xf,0x4c,0x7a, 0x6,0x63,0x55, 0xf,0x4d,0x2b, 0xf,0x4d,0x26, + 0xf,0x4c,0x7e, 0x7,0x2a,0x3a, 0x4,0x4e,0x42, 0x5,0x51,0x7e, + 0x7,0x2a,0x41, 0x7,0x2a,0x3b, 0x7,0x2a,0x40, 0x7,0x2a,0x39, + 0x5,0x51,0x7d, 0x7,0x2a,0x43, 0x7,0x2a,0x44, 0x7,0x2a,0x3d, + 0x5,0x51,0x7b, 0x7,0x2a,0x37, 0xf,0x52,0x5b, 0xf,0x52,0x5d, + 0xf,0x52,0x5f, 0xf,0x52,0x60, 0xf,0x52,0x63, 0xf,0x52,0x64, + 0xf,0x52,0x65, 0xf,0x52,0x67, 0xf,0x52,0x68, 0xf,0x52,0x69, + 0xf,0x52,0x6a, 0xf,0x52,0x6c, 0xf,0x52,0x6d, 0x7,0x2a,0x42, + 0x7,0x2a,0x3c, 0x7,0x2a,0x3f, 0x7,0x2a,0x45, 0xf,0x52,0x5e, + 0x7,0x2a,0x36, 0x5,0x51,0x7c, 0xf,0x52,0x62, 0xf,0x52,0x66, + 0xf,0x52,0x5a, 0x5,0x59,0x34, 0x5,0x59,0x37, 0x5,0x59,0x32, + 0x4,0x54,0x47, 0x5,0x59,0x2e, 0x5,0x59,0x30, 0x7,0x34,0x65, + 0x7,0x34,0x64, 0x7,0x34,0x6b, 0x7,0x34,0x69, 0x7,0x34,0x67, + 0x5,0x59,0x36, 0x4,0x54,0x44, 0x7,0x34,0x62, 0x7,0x34,0x6a, + 0x7,0x34,0x68, 0x5,0x59,0x2f, 0x7,0x34,0x66, 0xf,0x52,0x5c, + 0x5,0x59,0x33, 0xf,0x58,0x44, 0xf,0x58,0x46, 0xf,0x58,0x47, + 0xf,0x58,0x49, 0xf,0x58,0x4a, 0xf,0x58,0x4b, 0xf,0x58,0x4d, + 0xf,0x58,0x4e, 0xf,0x58,0x4f, 0xf,0x58,0x51, 0xf,0x58,0x53, + 0xf,0x58,0x54, 0xf,0x58,0x56, 0xf,0x58,0x57, 0xf,0x58,0x5a, + 0xf,0x58,0x5c, 0xf,0x58,0x5d, 0xf,0x58,0x5e, 0xf,0x58,0x60, + 0xf,0x58,0x61, 0xf,0x58,0x63, 0xf,0x58,0x64, 0xf,0x58,0x50, + 0xf,0x58,0x52, 0xf,0x58,0x5f, 0xf,0x58,0x45, 0xf,0x58,0x58, + 0x5,0x59,0x38, 0x5,0x59,0x31, 0x5,0x5f,0x48, 0x5,0x5f,0x49, + 0x7,0x3c,0x79, 0x4,0x59,0x43, 0x5,0x5f,0x4c, 0x5,0x5f,0x4b, + 0x7,0x3c,0x7c, 0x5,0x59,0x35, 0x5,0x5f,0x47, 0x7,0x3c,0x7a, + 0x5,0x5f,0x4a, 0x5,0x5f,0x4f, 0x7,0x3c,0x7e, 0x7,0x3d,0x24, + 0x7,0x3d,0x21, 0x7,0x3d,0x25, 0xf,0x5d,0x2f, 0xf,0x5d,0x30, + 0xf,0x5d,0x34, 0xf,0x5d,0x35, 0xf,0x5d,0x36, 0xf,0x5d,0x37, + 0xf,0x5d,0x3a, 0xf,0x5d,0x3b, 0xf,0x5d,0x3c, 0xf,0x5d,0x3d, + 0xf,0x5d,0x3f, 0xf,0x5d,0x40, 0xf,0x5d,0x42, 0xf,0x5d,0x43, + 0xf,0x5d,0x44, 0xf,0x5d,0x45, 0xf,0x5d,0x46, 0xf,0x5d,0x47, + 0xf,0x5d,0x48, 0xf,0x5d,0x49, 0xf,0x5d,0x4b, 0xf,0x5d,0x4e, + 0xf,0x5d,0x4f, 0x7,0x3c,0x7d, 0x7,0x3d,0x22, 0x7,0x3c,0x78, + 0x7,0x3d,0x23, 0x4,0x59,0x48, 0xf,0x5d,0x4a, 0xf,0x5d,0x38, + 0xf,0x5d,0x33, 0xf,0x5d,0x31, 0x5,0x5f,0x4e, 0x5,0x5f,0x4d, + 0xf,0x5d,0x2e, 0x5,0x65,0x51, 0x4,0x5e,0x2d, 0x4,0x5e,0x2e, + 0x5,0x65,0x52, 0x4,0x5e,0x28, 0x4,0x5e,0x2a, 0x7,0x44,0x38, + 0x5,0x65,0x50, 0x5,0x65,0x4e, 0x5,0x6a,0x31, 0x7,0x44,0x3a, + 0x5,0x65,0x53, 0x4,0x5e,0x30, 0x7,0x44,0x40, 0x7,0x44,0x3f, + 0x5,0x65,0x54, 0x5,0x65,0x55, 0x7,0x44,0x41, 0xf,0x61,0x31, + 0xf,0x61,0x32, 0xf,0x61,0x34, 0xf,0x61,0x36, 0xf,0x61,0x37, + 0xf,0x61,0x38, 0xf,0x61,0x3a, 0xf,0x61,0x3c, 0xf,0x61,0x3d, + 0xf,0x61,0x3e, 0xf,0x61,0x40, 0xf,0x61,0x41, 0xf,0x61,0x42, + 0xf,0x61,0x44, 0xf,0x61,0x45, 0xf,0x61,0x46, 0x7,0x44,0x3b, + 0x7,0x44,0x3c, 0x7,0x44,0x3e, 0x7,0x44,0x3d, 0xf,0x61,0x30, + 0xf,0x61,0x39, 0xf,0x61,0x35, 0xf,0x5f,0x5d, 0x4,0x61,0x6b, + 0x7,0x4b,0x33, 0x7,0x4b,0x37, 0x5,0x6a,0x32, 0x7,0x4b,0x34, + 0x5,0x6a,0x34, 0x7,0x4b,0x32, 0x7,0x4b,0x3a, 0x7,0x4b,0x36, + 0x7,0x4b,0x39, 0x7,0x4b,0x3b, 0xf,0x64,0x31, 0xf,0x64,0x32, + 0xf,0x64,0x33, 0xf,0x64,0x35, 0xf,0x64,0x36, 0xf,0x64,0x38, + 0xf,0x64,0x39, 0xf,0x64,0x3a, 0xf,0x64,0x3b, 0xf,0x64,0x3c, + 0xf,0x64,0x3d, 0xf,0x64,0x3f, 0xf,0x64,0x40, 0xf,0x64,0x41, + 0xf,0x64,0x42, 0xf,0x64,0x43, 0xf,0x64,0x44, 0xf,0x64,0x45, + 0x7,0x4b,0x3c, 0x7,0x4b,0x35, 0x7,0x4b,0x38, 0x4,0x61,0x6a, + 0x7,0x4b,0x31, 0x5,0x65,0x56, 0xf,0x64,0x3e, 0x4,0x64,0x68, + 0x7,0x50,0x6d, 0x7,0x50,0x6e, 0x5,0x6e,0x38, 0x7,0x50,0x72, + 0x5,0x6e,0x33, 0x4,0x64,0x6a, 0x5,0x6e,0x36, 0x5,0x6e,0x32, + 0x7,0x50,0x70, 0x7,0x50,0x68, 0x7,0x50,0x69, 0x5,0x6e,0x37, + 0x4,0x64,0x6e, 0x7,0x50,0x71, 0x5,0x6e,0x34, 0xf,0x66,0x50, + 0xf,0x66,0x51, 0xf,0x66,0x53, 0xf,0x66,0x54, 0xf,0x66,0x55, + 0xf,0x66,0x56, 0xf,0x66,0x58, 0xf,0x66,0x59, 0xf,0x66,0x5a, + 0xf,0x66,0x5b, 0xf,0x66,0x5d, 0xf,0x66,0x5f, 0xf,0x66,0x60, + 0xf,0x66,0x61, 0xf,0x66,0x62, 0xf,0x66,0x63, 0xf,0x66,0x64, + 0xf,0x66,0x66, 0xf,0x66,0x68, 0xf,0x66,0x6a, 0xf,0x66,0x6b, + 0xf,0x66,0x6c, 0xf,0x66,0x6d, 0xf,0x66,0x6e, 0xf,0x66,0x6f, + 0x7,0x50,0x6c, 0x7,0x50,0x6f, 0xf,0x66,0x52, 0xf,0x66,0x5c, + 0xf,0x66,0x67, 0x7,0x50,0x6a, 0x7,0x55,0x62, 0x4,0x67,0x5e, + 0x7,0x55,0x67, 0x7,0x55,0x61, 0x7,0x55,0x5c, 0x4,0x67,0x60, + 0x4,0x67,0x5d, 0x7,0x55,0x60, 0x7,0x55,0x63, 0x7,0x55,0x69, + 0x7,0x55,0x5e, 0xf,0x68,0x5e, 0xf,0x68,0x5f, 0xf,0x68,0x60, + 0xf,0x68,0x61, 0xf,0x68,0x62, 0xf,0x68,0x63, 0xf,0x68,0x64, + 0xf,0x68,0x65, 0xf,0x68,0x66, 0xf,0x68,0x67, 0xf,0x68,0x68, + 0xf,0x68,0x69, 0xf,0x68,0x6b, 0xf,0x68,0x6c, 0xf,0x68,0x6d, + 0xf,0x68,0x6e, 0xf,0x68,0x6f, 0x7,0x55,0x5f, 0x7,0x55,0x64, + 0x7,0x55,0x65, 0x7,0x55,0x66, 0x7,0x55,0x5d, 0xf,0x68,0x6a, + 0x5,0x74,0x57, 0x7,0x59,0x6b, 0x7,0x59,0x6a, 0x7,0x5d,0x30, + 0x7,0x59,0x66, 0x7,0x59,0x64, 0xf,0x69,0x7e, 0xf,0x6a,0x21, + 0xf,0x6a,0x22, 0xf,0x6a,0x23, 0xf,0x6a,0x24, 0xf,0x6a,0x25, + 0xf,0x6a,0x26, 0xf,0x6a,0x27, 0xf,0x6a,0x28, 0xf,0x6a,0x29, + 0xf,0x6a,0x2a, 0xf,0x6a,0x2b, 0x7,0x59,0x63, 0x7,0x59,0x65, + 0x5,0x74,0x56, 0x5,0x76,0x5e, 0x4,0x6b,0x28, 0x5,0x76,0x5c, + 0xf,0x6b,0x2f, 0x7,0x5d,0x2f, 0x7,0x5d,0x2d, 0x7,0x59,0x69, + 0x7,0x5d,0x2c, 0xf,0x6a,0x7c, 0xf,0x6a,0x7d, 0xf,0x6b,0x23, + 0xf,0x6b,0x24, 0xf,0x6b,0x25, 0xf,0x6b,0x26, 0xf,0x6b,0x29, + 0xf,0x6b,0x2a, 0xf,0x6b,0x2b, 0xf,0x6b,0x2c, 0xf,0x6b,0x2d, + 0xf,0x6b,0x2e, 0x7,0x5d,0x2e, 0x7,0x5d,0x31, 0xf,0x6b,0x21, + 0xf,0x6a,0x7e, 0xf,0x6b,0x27, 0x5,0x78,0x40, 0x7,0x5f,0x70, + 0x7,0x5f,0x71, 0x7,0x5f,0x72, 0x7,0x5f,0x6f, 0x7,0x5f,0x73, + 0xf,0x6b,0x68, 0xf,0x6b,0x69, 0xf,0x6b,0x6a, 0xf,0x6b,0x6b, + 0xf,0x6b,0x6c, 0x4,0x6d,0x63, 0x7,0x61,0x57, 0x7,0x61,0x58, + 0xf,0x6b,0x6d, 0xf,0x6c,0x3c, 0xf,0x6c,0x3d, 0x7,0x61,0x56, + 0x7,0x62,0x72, 0x7,0x62,0x6d, 0x7,0x62,0x6e, 0x7,0x62,0x74, + 0x7,0x62,0x70, 0x7,0x62,0x6f, 0x5,0x7a,0x40, 0x7,0x62,0x73, + 0x7,0x62,0x71, 0x7,0x62,0x75, 0xf,0x6c,0x52, 0xf,0x6c,0x53, + 0xf,0x6c,0x54, 0xf,0x6c,0x55, 0xf,0x6c,0x56, 0xf,0x6c,0x57, + 0xf,0x6c,0x58, 0xf,0x6c,0x40, 0x5,0x7a,0x41, 0x5,0x7a,0x7c, + 0x7,0x63,0x7d, 0x7,0x63,0x7b, 0xf,0x6c,0x6f, 0x7,0x63,0x7c, + 0xf,0x6d,0x23, 0x7,0x64,0x68, 0xf,0x6d,0x21, 0x7,0x64,0x67, + 0x7,0x64,0x69, 0xf,0x6d,0x22, 0xf,0x6c,0x3e, 0x7,0x65,0x48, + 0x7,0x65,0x49, 0xf,0x6d,0x29, 0x5,0x7c,0x21, 0xf,0x6d,0x35, + 0xf,0x6d,0x38, 0xf,0x6d,0x39, 0x6,0x2e,0x44, 0x6,0x29,0x34, + 0x5,0x2b,0x60, 0x5,0x36,0x3f, 0x6,0x45,0x7b, 0x5,0x36,0x3e, + 0x5,0x36,0x40, 0x6,0x45,0x7a, 0xf,0x38,0x79, 0x6,0x45,0x79, + 0x6,0x45,0x78, 0x5,0x3d,0x2a, 0x5,0x3d,0x2b, 0x4,0x3b,0x68, + 0x6,0x4f,0x7a, 0x6,0x4f,0x7b, 0xf,0x3f,0x75, 0x6,0x59,0x59, + 0x6,0x59,0x58, 0x4,0x41,0x4a, 0x6,0x59,0x56, 0x6,0x59,0x57, + 0xf,0x45,0x7a, 0x5,0x43,0x70, 0x5,0x43,0x6f, 0x5,0x4a,0x6a, + 0x4,0x47,0x7c, 0x6,0x63,0x56, 0x6,0x63,0x57, 0x5,0x4a,0x6b, + 0x5,0x52,0x21, 0x5,0x52,0x23, 0x5,0x59,0x39, 0x5,0x52,0x22, + 0x5,0x52,0x24, 0x5,0x52,0x25, 0xf,0x58,0x65, 0x5,0x59,0x3b, + 0x7,0x34,0x6e, 0x5,0x59,0x3a, 0x7,0x3d,0x26, 0x7,0x34,0x6d, + 0x7,0x34,0x70, 0x7,0x34,0x6c, 0x7,0x3d,0x29, 0x4,0x59,0x4a, + 0x5,0x5f,0x50, 0x4,0x59,0x4b, 0x7,0x3d,0x2a, 0x7,0x3d,0x28, + 0x7,0x3d,0x27, 0x7,0x44,0x43, 0x5,0x65,0x58, 0x7,0x44,0x42, + 0x5,0x65,0x57, 0x5,0x6a,0x38, 0x5,0x6a,0x36, 0x5,0x6a,0x35, + 0x5,0x6a,0x37, 0x5,0x6e,0x39, 0x7,0x50,0x73, 0x7,0x50,0x74, + 0x4,0x67,0x64, 0x7,0x55,0x6a, 0x7,0x59,0x6d, 0x7,0x59,0x6e, + 0x7,0x59,0x6c, 0x5,0x76,0x61, 0x5,0x76,0x60, 0x5,0x78,0x41, + 0x7,0x5f,0x74, 0x7,0x62,0x76, 0x7,0x64,0x6a, 0x5,0x2b,0x61, + 0x5,0x30,0x6a, 0x5,0x30,0x6b, 0x5,0x30,0x69, 0xf,0x32,0x67, + 0x6,0x3c,0x66, 0x5,0x36,0x42, 0x5,0x36,0x41, 0xf,0x38,0x7a, + 0xf,0x38,0x7b, 0x6,0x45,0x7c, 0x5,0x3d,0x33, 0x5,0x3d,0x31, + 0x5,0x3d,0x2f, 0x4,0x3b,0x6a, 0x5,0x3d,0x30, 0x4,0x3b,0x6c, + 0x3,0x3f,0x6d, 0x5,0x3d,0x2c, 0x5,0x3d,0x2d, 0x5,0x3d,0x2e, + 0x6,0x4f,0x7e, 0x6,0x50,0x21, 0x5,0x3d,0x32, 0x6,0x4f,0x7c, + 0xf,0x3f,0x78, 0xf,0x3f,0x79, 0xf,0x3f,0x7a, 0xf,0x3f,0x7b, + 0xf,0x3f,0x7c, 0xf,0x3f,0x7d, 0xf,0x40,0x21, 0x6,0x4f,0x7d, + 0x4,0x3b,0x69, 0x4,0x41,0x4c, 0x6,0x59,0x5e, 0x4,0x41,0x52, + 0x4,0x41,0x4d, 0x4,0x41,0x4b, 0xf,0x45,0x7e, 0x6,0x59,0x5d, + 0x5,0x43,0x74, 0x5,0x43,0x71, 0x5,0x43,0x73, 0x5,0x43,0x72, + 0x6,0x59,0x5b, 0x4,0x41,0x51, 0x4,0x41,0x4f, 0x6,0x59,0x5c, + 0x6,0x59,0x5a, 0xf,0x45,0x7d, 0xf,0x46,0x21, 0x5,0x4a,0x73, + 0x5,0x4a,0x6f, 0x5,0x4a,0x71, 0x4,0x47,0x7e, 0x5,0x4a,0x6d, + 0x4,0x48,0x21, 0x5,0x4a,0x74, 0x6,0x63,0x5a, 0x5,0x4a,0x70, + 0x5,0x4a,0x75, 0x4,0x47,0x7d, 0x5,0x4a,0x72, 0x5,0x4a,0x76, + 0x6,0x63,0x59, 0x6,0x63,0x5b, 0x6,0x63,0x5c, 0x5,0x4a,0x6c, + 0x7,0x2a,0x48, 0x5,0x52,0x2d, 0x5,0x52,0x28, 0x7,0x2a,0x4d, + 0x5,0x52,0x2a, 0x5,0x52,0x27, 0x7,0x2a,0x4e, 0x4,0x4e,0x49, + 0x5,0x52,0x2c, 0x5,0x52,0x29, 0x7,0x2a,0x4c, 0xf,0x52,0x6e, + 0xf,0x52,0x6f, 0xf,0x52,0x71, 0x7,0x2a,0x47, 0x7,0x2a,0x49, + 0x7,0x2a,0x4a, 0x7,0x2a,0x4b, 0x5,0x52,0x26, 0x5,0x52,0x2b, + 0x5,0x52,0x2e, 0xf,0x52,0x70, 0x4,0x54,0x50, 0x4,0x54,0x4d, + 0x5,0x59,0x3d, 0x5,0x59,0x40, 0x7,0x34,0x72, 0x5,0x59,0x3c, + 0x5,0x59,0x3e, 0x5,0x59,0x3f, 0x7,0x34,0x75, 0x7,0x34,0x77, + 0x7,0x34,0x79, 0xf,0x58,0x66, 0xf,0x58,0x67, 0xf,0x58,0x68, + 0x7,0x34,0x74, 0x7,0x34,0x78, 0x7,0x34,0x76, 0x4,0x54,0x4e, + 0x4,0x59,0x53, 0x4,0x59,0x51, 0x5,0x5f,0x54, 0x7,0x3d,0x2b, + 0x5,0x5f,0x51, 0x5,0x5f,0x53, 0x5,0x5f,0x55, 0x5,0x5f,0x52, + 0x7,0x3d,0x2d, 0x4,0x59,0x50, 0x7,0x3d,0x2c, 0x4,0x59,0x4c, + 0x7,0x3d,0x2e, 0xf,0x5d,0x50, 0x7,0x3d,0x2f, 0x7,0x3d,0x30, + 0x7,0x3d,0x31, 0x5,0x65,0x5f, 0x5,0x65,0x5e, 0x5,0x65,0x5a, + 0x4,0x5e,0x33, 0x7,0x44,0x44, 0x5,0x65,0x5b, 0x5,0x65,0x61, + 0x5,0x65,0x60, 0x7,0x44,0x46, 0x5,0x65,0x5d, 0x5,0x65,0x59, + 0x5,0x65,0x5c, 0xf,0x61,0x47, 0xf,0x61,0x48, 0xf,0x61,0x49, + 0xf,0x61,0x4c, 0xf,0x61,0x4b, 0x7,0x44,0x45, 0x7,0x44,0x47, + 0x5,0x6a,0x39, 0x7,0x4b,0x3e, 0x7,0x4b,0x3f, 0x4,0x61,0x6d, + 0x5,0x6a,0x3a, 0x7,0x4b,0x3d, 0x4,0x61,0x6e, 0xf,0x64,0x46, + 0xf,0x64,0x47, 0xf,0x64,0x48, 0xf,0x64,0x49, 0xf,0x64,0x4a, + 0x4,0x64,0x70, 0x5,0x6e,0x3f, 0x5,0x6e,0x3a, 0x5,0x6e,0x3d, + 0x5,0x6e,0x3c, 0x5,0x6e,0x3e, 0x5,0x6e,0x40, 0x4,0x64,0x72, + 0x7,0x50,0x78, 0x5,0x6a,0x3b, 0x7,0x50,0x75, 0xf,0x66,0x70, + 0xf,0x66,0x71, 0x7,0x50,0x76, 0x5,0x6e,0x3b, 0x7,0x50,0x77, + 0x5,0x71,0x5a, 0x5,0x6e,0x41, 0x4,0x67,0x65, 0x5,0x71,0x59, + 0x5,0x71,0x57, 0xf,0x68,0x70, 0xf,0x68,0x71, 0xf,0x68,0x73, + 0xf,0x68,0x74, 0xf,0x68,0x75, 0x5,0x71,0x5c, 0x5,0x71,0x58, + 0x5,0x74,0x58, 0x7,0x55,0x6b, 0xf,0x6a,0x2f, 0x7,0x59,0x6f, + 0xf,0x6a,0x2c, 0xf,0x6a,0x2d, 0xf,0x6a,0x2e, 0xf,0x6a,0x30, + 0xf,0x6a,0x31, 0xf,0x6b,0x30, 0xf,0x6b,0x31, 0xf,0x6b,0x32, + 0x7,0x5d,0x32, 0x5,0x78,0x42, 0xf,0x6b,0x6e, 0xf,0x6b,0x6f, + 0x7,0x5f,0x76, 0x7,0x5f,0x75, 0x5,0x79,0x54, 0x4,0x6d,0x29, + 0x4,0x6d,0x2a, 0x7,0x61,0x59, 0x7,0x62,0x77, 0x7,0x62,0x78, + 0x5,0x7a,0x7d, 0xf,0x6d,0x2a, 0x6,0x2e,0x45, 0x5,0x22,0x22, + 0x5,0x21,0x7e, 0x4,0x22,0x23, 0x5,0x22,0x23, 0x4,0x22,0x22, + 0x5,0x22,0x21, 0x5,0x23,0x2e, 0x4,0x23,0x34, 0x6,0x25,0x5d, + 0x5,0x24,0x7d, 0x4,0x25,0x2c, 0x4,0x25,0x2d, 0x5,0x24,0x7e, + 0x5,0x24,0x7c, 0xf,0x25,0x3a, 0xf,0x25,0x3b, 0xf,0x25,0x3c, + 0xf,0x25,0x3d, 0xf,0x25,0x3e, 0xf,0x25,0x3f, 0x5,0x27,0x75, + 0x6,0x2e,0x47, 0x5,0x27,0x76, 0x5,0x27,0x78, 0x5,0x27,0x79, + 0x4,0x28,0x30, 0x5,0x27,0x77, 0x6,0x2e,0x46, 0x6,0x2e,0x48, + 0xf,0x28,0x7d, 0xf,0x28,0x7e, 0x5,0x2b,0x62, 0x6,0x34,0x70, + 0x6,0x34,0x73, 0x4,0x2b,0x5c, 0x5,0x2b,0x65, 0x6,0x34,0x71, + 0x6,0x63,0x5d, 0x6,0x34,0x75, 0x6,0x34,0x76, 0x6,0x34,0x77, + 0x6,0x34,0x72, 0x5,0x2b,0x63, 0x6,0x34,0x78, 0xf,0x2d,0x5b, + 0xf,0x2d,0x5c, 0xf,0x2d,0x5d, 0x6,0x34,0x74, 0x6,0x34,0x6f, + 0x6,0x3c,0x69, 0x5,0x30,0x6f, 0x5,0x2b,0x66, 0x6,0x3c,0x68, + 0x5,0x30,0x6c, 0x5,0x30,0x6e, 0x6,0x3c,0x6e, 0x6,0x3c,0x6b, + 0x6,0x3c,0x6f, 0x5,0x30,0x6d, 0x6,0x3c,0x6a, 0x6,0x3c,0x6d, + 0x6,0x3c,0x6c, 0xf,0x32,0x68, 0xf,0x32,0x69, 0xf,0x32,0x6a, + 0xf,0x32,0x6b, 0xf,0x32,0x6c, 0xf,0x32,0x6d, 0xf,0x32,0x6e, + 0x5,0x36,0x43, 0x6,0x46,0x28, 0x6,0x46,0x21, 0x4,0x35,0x7e, + 0x4,0x36,0x22, 0x4,0x36,0x21, 0x5,0x36,0x44, 0x6,0x46,0x23, + 0x6,0x46,0x24, 0x6,0x46,0x2b, 0x6,0x46,0x2a, 0x6,0x63,0x5e, + 0x6,0x46,0x26, 0x6,0x46,0x22, 0x6,0x46,0x29, 0x6,0x46,0x27, + 0x7,0x34,0x7b, 0x6,0x46,0x25, 0xf,0x38,0x7c, 0xf,0x38,0x7d, + 0xf,0x38,0x7e, 0xf,0x39,0x21, 0xf,0x39,0x22, 0xf,0x39,0x23, + 0xf,0x39,0x24, 0xf,0x39,0x25, 0xf,0x39,0x26, 0xf,0x39,0x27, + 0x5,0x3d,0x38, 0x5,0x3d,0x3d, 0x5,0x3d,0x39, 0x5,0x3d,0x3a, + 0x5,0x3d,0x3c, 0x6,0x50,0x25, 0x6,0x50,0x23, 0x5,0x3d,0x34, + 0x5,0x3d,0x35, 0x5,0x3d,0x37, 0x6,0x50,0x24, 0x6,0x50,0x29, + 0x7,0x3d,0x34, 0x6,0x50,0x27, 0x5,0x3d,0x3b, 0x6,0x50,0x28, + 0x6,0x50,0x26, 0xf,0x40,0x22, 0xf,0x40,0x23, 0x7,0x3d,0x32, + 0x5,0x3d,0x36, 0x6,0x59,0x6a, 0x5,0x43,0x7b, 0x5,0x43,0x78, + 0x6,0x59,0x62, 0x6,0x59,0x69, 0x6,0x59,0x67, 0x5,0x43,0x7c, + 0x5,0x43,0x79, 0x5,0x43,0x77, 0x6,0x63,0x5f, 0x6,0x59,0x63, + 0x6,0x59,0x65, 0x5,0x43,0x7d, 0x5,0x43,0x7a, 0x6,0x59,0x66, + 0x7,0x44,0x49, 0x6,0x59,0x64, 0x7,0x44,0x48, 0x5,0x43,0x76, + 0x6,0x59,0x5f, 0x6,0x59,0x6b, 0x6,0x59,0x60, 0x5,0x43,0x75, + 0x6,0x59,0x61, 0xf,0x46,0x22, 0xf,0x46,0x23, 0xf,0x46,0x24, + 0xf,0x46,0x25, 0xf,0x46,0x26, 0xf,0x46,0x27, 0xf,0x46,0x28, + 0xf,0x46,0x29, 0x6,0x59,0x68, 0x6,0x59,0x6c, 0x7,0x3d,0x33, + 0x6,0x63,0x64, 0x6,0x63,0x62, 0x6,0x63,0x66, 0x4,0x48,0x27, + 0x4,0x48,0x26, 0x5,0x52,0x2f, 0x4,0x48,0x28, 0x4,0x48,0x29, + 0x5,0x4a,0x78, 0x6,0x63,0x63, 0x6,0x63,0x60, 0x4,0x48,0x25, + 0x5,0x4a,0x79, 0x5,0x4a,0x7a, 0x6,0x63,0x65, 0x6,0x63,0x67, + 0x7,0x4b,0x41, 0xf,0x4d,0x2e, 0xf,0x4d,0x2f, 0xf,0x4d,0x30, + 0xf,0x4d,0x31, 0xf,0x4d,0x32, 0xf,0x4d,0x33, 0x6,0x63,0x61, + 0x5,0x4a,0x77, 0x5,0x52,0x36, 0x5,0x52,0x34, 0x5,0x52,0x35, + 0x7,0x2a,0x55, 0x5,0x52,0x38, 0x5,0x52,0x32, 0x5,0x52,0x31, + 0x7,0x2a,0x4f, 0x5,0x52,0x33, 0x5,0x52,0x37, 0x5,0x52,0x30, + 0x7,0x50,0x7a, 0x7,0x2a,0x53, 0x7,0x2a,0x51, 0x7,0x2a,0x50, + 0x7,0x2a,0x52, 0xf,0x52,0x72, 0xf,0x52,0x73, 0xf,0x52,0x74, + 0xf,0x52,0x75, 0xf,0x52,0x76, 0xf,0x52,0x77, 0x7,0x2a,0x56, + 0x5,0x59,0x41, 0x5,0x59,0x42, 0x4,0x54,0x54, 0x7,0x34,0x7c, + 0x5,0x59,0x44, 0x5,0x59,0x43, 0x7,0x34,0x7e, 0x7,0x50,0x79, + 0xf,0x58,0x69, 0xf,0x58,0x6a, 0xf,0x58,0x6b, 0xf,0x58,0x6c, + 0x5,0x6a,0x3c, 0x7,0x34,0x7d, 0x5,0x5f,0x56, 0x5,0x5f,0x57, + 0x7,0x3d,0x36, 0x7,0x3d,0x37, 0x7,0x3d,0x35, 0x5,0x74,0x59, + 0xf,0x5d,0x51, 0xf,0x5d,0x52, 0xf,0x5d,0x53, 0xf,0x5d,0x54, + 0x5,0x65,0x62, 0x7,0x44,0x4c, 0x4,0x5e,0x34, 0x7,0x44,0x4a, + 0x7,0x44,0x4b, 0xf,0x61,0x4d, 0xf,0x61,0x4e, 0xf,0x61,0x4f, + 0xf,0x61,0x50, 0x5,0x6a,0x3d, 0x7,0x4b,0x43, 0x7,0x55,0x6c, + 0x7,0x4b,0x45, 0xf,0x64,0x4c, 0x5,0x78,0x43, 0x7,0x4b,0x42, + 0x7,0x4b,0x44, 0x7,0x5f,0x77, 0xf,0x66,0x72, 0xf,0x66,0x73, + 0x7,0x51,0x72, 0x5,0x71,0x5d, 0x7,0x55,0x6e, 0x7,0x55,0x6d, + 0x7,0x62,0x79, 0x7,0x62,0x7a, 0x7,0x59,0x70, 0x7,0x5d,0x49, + 0x7,0x5f,0x78, 0x5,0x7a,0x7e, 0x5,0x7b,0x21, 0x7,0x66,0x37, + 0x7,0x66,0x28, 0x6,0x59,0x6d, 0x4,0x4e,0x4b, 0x7,0x2a,0x57, + 0xf,0x52,0x79, 0xf,0x52,0x78, 0x5,0x59,0x45, 0x7,0x35,0x21, + 0x4,0x59,0x56, 0x7,0x44,0x4d, 0x7,0x44,0x4e, 0x5,0x6a,0x3e, + 0x7,0x50,0x7b, 0x6,0x3c,0x70, 0x6,0x3c,0x71, 0x6,0x3c,0x72, + 0x6,0x46,0x2c, 0x5,0x36,0x45, 0x4,0x36,0x23, 0x6,0x46,0x2e, + 0x6,0x46,0x2d, 0x6,0x46,0x30, 0x6,0x46,0x2f, 0x4,0x3b,0x70, + 0x6,0x50,0x2c, 0x4,0x3b,0x6e, 0x6,0x50,0x2a, 0x6,0x59,0x73, + 0x6,0x50,0x30, 0x6,0x50,0x2e, 0x6,0x50,0x2b, 0x4,0x3b,0x71, + 0x4,0x3b,0x6f, 0x6,0x50,0x2f, 0x6,0x50,0x2d, 0x6,0x59,0x7b, + 0x5,0x43,0x7e, 0x6,0x59,0x6e, 0x6,0x59,0x71, 0x6,0x59,0x77, + 0x6,0x59,0x75, 0x6,0x59,0x7a, 0x6,0x59,0x72, 0x6,0x59,0x70, + 0x6,0x59,0x74, 0x6,0x59,0x79, 0x6,0x59,0x78, 0x6,0x59,0x6f, + 0x6,0x59,0x76, 0x6,0x63,0x74, 0x6,0x63,0x72, 0x5,0x4a,0x7b, + 0x6,0x63,0x6b, 0x6,0x63,0x6c, 0x6,0x63,0x76, 0x6,0x63,0x68, + 0x6,0x63,0x77, 0x6,0x63,0x70, 0x4,0x48,0x2a, 0x6,0x63,0x75, + 0x6,0x63,0x6f, 0x5,0x4a,0x7c, 0x6,0x63,0x71, 0x6,0x63,0x69, + 0x5,0x4a,0x7d, 0x4,0x48,0x2b, 0x6,0x63,0x6a, 0xf,0x4d,0x34, + 0xf,0x4d,0x35, 0x6,0x63,0x73, 0x6,0x63,0x78, 0x6,0x63,0x6d, + 0x7,0x2a,0x5d, 0x7,0x2a,0x5b, 0x7,0x2a,0x64, 0x7,0x2a,0x5f, + 0x7,0x2a,0x5c, 0x5,0x52,0x3a, 0x7,0x2a,0x5e, 0x7,0x2a,0x66, + 0x7,0x2a,0x62, 0x7,0x2a,0x60, 0x7,0x2a,0x61, 0x7,0x2a,0x63, + 0x7,0x2a,0x5a, 0x7,0x2a,0x58, 0x5,0x52,0x39, 0x7,0x2a,0x65, + 0x7,0x2a,0x67, 0x4,0x59,0x57, 0x4,0x54,0x55, 0x5,0x59,0x47, + 0x7,0x35,0x29, 0x7,0x35,0x24, 0x7,0x35,0x2f, 0x7,0x35,0x22, + 0x7,0x35,0x2d, 0x7,0x35,0x28, 0x7,0x35,0x25, 0x7,0x35,0x2c, + 0x7,0x35,0x2a, 0x7,0x35,0x26, 0x5,0x59,0x46, 0x7,0x35,0x30, + 0x4,0x54,0x56, 0x7,0x35,0x2b, 0x7,0x35,0x33, 0x7,0x35,0x27, + 0x7,0x2a,0x59, 0x7,0x35,0x34, 0x7,0x35,0x31, 0x7,0x35,0x23, + 0x7,0x35,0x32, 0xf,0x58,0x6d, 0x7,0x35,0x2e, 0xf,0x52,0x7a, + 0x4,0x59,0x59, 0x7,0x3d,0x3d, 0x7,0x3d,0x3b, 0x7,0x3d,0x45, + 0x7,0x3d,0x3c, 0x7,0x3d,0x3e, 0x7,0x3d,0x49, 0x7,0x3d,0x3a, + 0x7,0x3d,0x42, 0x7,0x3d,0x39, 0x7,0x3d,0x38, 0x7,0x3d,0x3f, + 0x5,0x5f,0x58, 0x7,0x3d,0x47, 0x7,0x3d,0x41, 0x7,0x3d,0x40, + 0x7,0x3d,0x43, 0x7,0x3d,0x48, 0x7,0x35,0x36, 0xf,0x5d,0x55, + 0xf,0x5d,0x57, 0x7,0x3d,0x44, 0x7,0x3d,0x46, 0x7,0x44,0x50, + 0x7,0x44,0x56, 0x7,0x44,0x52, 0x7,0x44,0x53, 0x7,0x44,0x4f, + 0x5,0x65,0x63, 0x7,0x44,0x57, 0x7,0x44,0x55, 0x5,0x65,0x64, + 0x7,0x44,0x51, 0x7,0x44,0x54, 0x7,0x4b,0x4a, 0x7,0x4b,0x47, + 0x7,0x4b,0x4b, 0x7,0x4b,0x48, 0x5,0x6a,0x3f, 0x7,0x4b,0x4e, + 0x4,0x61,0x6f, 0x5,0x6a,0x40, 0x7,0x4b,0x46, 0x7,0x4b,0x4c, + 0x7,0x4b,0x4d, 0x4,0x61,0x70, 0x7,0x4b,0x49, 0x7,0x4b,0x4f, + 0x7,0x51,0x23, 0x7,0x51,0x27, 0x7,0x50,0x7d, 0x7,0x51,0x2a, + 0x7,0x51,0x24, 0x7,0x51,0x2b, 0x7,0x51,0x28, 0x7,0x50,0x7c, + 0x5,0x6e,0x42, 0x7,0x51,0x25, 0x7,0x51,0x26, 0x5,0x6e,0x43, + 0x7,0x51,0x22, 0xf,0x66,0x74, 0x7,0x50,0x7e, 0x7,0x51,0x2c, + 0x7,0x51,0x29, 0x7,0x55,0x74, 0x4,0x67,0x68, 0x7,0x55,0x72, + 0x7,0x55,0x6f, 0x7,0x55,0x76, 0x7,0x55,0x70, 0x7,0x55,0x75, + 0x7,0x55,0x73, 0x7,0x55,0x77, 0x7,0x51,0x21, 0xf,0x68,0x76, + 0x7,0x55,0x71, 0x7,0x59,0x71, 0x7,0x59,0x72, 0x4,0x69,0x57, + 0x7,0x59,0x75, 0x7,0x59,0x76, 0x7,0x59,0x74, 0xf,0x6a,0x32, + 0x7,0x59,0x73, 0x7,0x5d,0x38, 0x7,0x5d,0x39, 0x7,0x5d,0x3a, + 0x4,0x6b,0x2b, 0x7,0x5d,0x37, 0x7,0x5d,0x33, 0x7,0x5d,0x34, + 0x7,0x5d,0x35, 0x7,0x5d,0x36, 0x7,0x5f,0x7c, 0x7,0x5f,0x7a, + 0x7,0x5f,0x7b, 0x7,0x5f,0x79, 0x7,0x61,0x5a, 0xf,0x6c,0x41, + 0x7,0x63,0x7e, 0x7,0x64,0x6b, 0x7,0x66,0x40, 0xf,0x2d,0x5e, + 0x5,0x30,0x70, 0xf,0x32,0x70, 0x6,0x46,0x32, 0x6,0x46,0x33, + 0x4,0x36,0x25, 0x6,0x46,0x31, 0xf,0x39,0x28, 0xf,0x39,0x29, + 0x5,0x3d,0x40, 0x5,0x3d,0x3e, 0x5,0x3d,0x41, 0x5,0x3d,0x3f, + 0x4,0x3b,0x73, 0x6,0x50,0x33, 0x4,0x3b,0x72, 0x6,0x50,0x32, + 0xf,0x40,0x25, 0xf,0x40,0x27, 0xf,0x40,0x26, 0x4,0x41,0x58, + 0x5,0x44,0x25, 0x5,0x44,0x22, 0x5,0x44,0x21, 0x5,0x44,0x24, + 0x5,0x44,0x23, 0x6,0x59,0x7c, 0xf,0x46,0x2b, 0xf,0x46,0x2c, + 0xf,0x46,0x2d, 0x5,0x44,0x26, 0x5,0x4b,0x22, 0x4,0x48,0x30, + 0x5,0x4b,0x23, 0x5,0x4b,0x21, 0x5,0x4a,0x7e, 0x4,0x48,0x2c, + 0x4,0x48,0x2f, 0x6,0x63,0x7d, 0x4,0x48,0x32, 0x6,0x63,0x7c, + 0x6,0x63,0x7e, 0xf,0x4d,0x37, 0xf,0x4d,0x38, 0x6,0x63,0x7a, + 0x6,0x63,0x79, 0x7,0x2a,0x6a, 0x7,0x2a,0x69, 0x5,0x52,0x45, + 0x5,0x52,0x40, 0x5,0x52,0x41, 0x5,0x52,0x3f, 0x5,0x52,0x3e, + 0x5,0x52,0x43, 0x5,0x52,0x3d, 0x4,0x54,0x57, 0x5,0x52,0x3c, + 0x7,0x2a,0x6b, 0x7,0x2a,0x6c, 0xf,0x46,0x2a, 0xf,0x52,0x7b, + 0xf,0x52,0x7c, 0xf,0x52,0x7d, 0xf,0x52,0x7e, 0xf,0x53,0x21, + 0x7,0x2a,0x68, 0x5,0x52,0x44, 0x5,0x52,0x42, 0x5,0x5f,0x59, + 0x7,0x35,0x3b, 0x4,0x54,0x5b, 0x5,0x59,0x4e, 0x5,0x59,0x4b, + 0x4,0x54,0x5a, 0x7,0x35,0x38, 0x5,0x59,0x4d, 0x5,0x59,0x4a, + 0x7,0x35,0x3a, 0x5,0x59,0x49, 0x7,0x35,0x39, 0x7,0x35,0x37, + 0x5,0x59,0x48, 0x7,0x35,0x3c, 0xf,0x58,0x6e, 0xf,0x58,0x6f, + 0xf,0x58,0x71, 0xf,0x58,0x72, 0xf,0x58,0x73, 0xf,0x58,0x74, + 0xf,0x58,0x75, 0xf,0x58,0x70, 0xf,0x55,0x64, 0x5,0x59,0x4c, + 0x4,0x59,0x5c, 0x4,0x59,0x5a, 0x4,0x59,0x5b, 0x5,0x5f,0x5a, + 0x4,0x59,0x61, 0x5,0x5f,0x5c, 0x4,0x59,0x5e, 0x7,0x3d,0x4a, + 0x5,0x65,0x68, 0x7,0x3d,0x4b, 0x7,0x3d,0x4d, 0x5,0x5f,0x5b, + 0xf,0x5d,0x59, 0x7,0x3d,0x4c, 0x7,0x3d,0x4e, 0xf,0x5d,0x5a, + 0x5,0x5f,0x5d, 0x5,0x65,0x6c, 0x5,0x65,0x6f, 0x7,0x44,0x5f, + 0x7,0x44,0x63, 0x5,0x65,0x69, 0x7,0x44,0x5e, 0x5,0x65,0x66, + 0x7,0x44,0x65, 0x7,0x44,0x62, 0x4,0x5e,0x37, 0x5,0x65,0x65, + 0x5,0x65,0x67, 0x7,0x44,0x61, 0x7,0x44,0x5a, 0x7,0x44,0x5d, + 0x5,0x65,0x6e, 0x7,0x44,0x5b, 0xf,0x61,0x51, 0x7,0x44,0x64, + 0x7,0x44,0x59, 0x7,0x44,0x5c, 0x5,0x65,0x6b, 0x5,0x65,0x6d, + 0xf,0x5d,0x58, 0x5,0x65,0x6a, 0x5,0x6a,0x47, 0x5,0x6a,0x41, + 0x5,0x6a,0x45, 0x5,0x6a,0x42, 0x5,0x6a,0x43, 0x4,0x61,0x72, + 0x5,0x6a,0x46, 0x5,0x6a,0x44, 0x5,0x6a,0x49, 0x4,0x61,0x71, + 0x7,0x4b,0x50, 0x7,0x4b,0x55, 0x7,0x4b,0x51, 0x5,0x6a,0x48, + 0x7,0x4b,0x53, 0xf,0x64,0x4e, 0x7,0x4b,0x57, 0x7,0x4b,0x56, + 0x7,0x4b,0x54, 0x7,0x4b,0x52, 0x7,0x4b,0x58, 0x7,0x51,0x2e, + 0x4,0x64,0x74, 0x7,0x51,0x36, 0x4,0x64,0x76, 0x5,0x6e,0x44, + 0x4,0x67,0x6d, 0x4,0x64,0x78, 0x7,0x51,0x34, 0x7,0x51,0x33, + 0x5,0x6e,0x45, 0x4,0x64,0x7a, 0x4,0x64,0x77, 0x4,0x64,0x79, + 0x7,0x51,0x2f, 0x7,0x51,0x31, 0x7,0x51,0x32, 0xf,0x66,0x75, + 0x7,0x51,0x35, 0x7,0x51,0x37, 0x7,0x51,0x30, 0x7,0x51,0x2d, + 0x4,0x67,0x6a, 0x4,0x67,0x69, 0x7,0x55,0x78, 0x5,0x71,0x5e, + 0x5,0x71,0x5f, 0x4,0x67,0x6b, 0x4,0x67,0x6c, 0x7,0x55,0x7a, + 0x5,0x71,0x60, 0x5,0x71,0x61, 0x7,0x55,0x7d, 0x7,0x55,0x79, + 0x7,0x55,0x7e, 0x7,0x55,0x7b, 0x5,0x74,0x5c, 0x5,0x74,0x5f, + 0x4,0x69,0x59, 0x7,0x59,0x78, 0x5,0x74,0x5d, 0x7,0x59,0x79, + 0x7,0x59,0x7a, 0x5,0x74,0x5a, 0x5,0x74,0x5e, 0x5,0x74,0x5b, + 0x7,0x59,0x77, 0x5,0x76,0x62, 0x7,0x5d,0x3b, 0x7,0x5d,0x3c, + 0xf,0x6b,0x33, 0x5,0x76,0x63, 0x5,0x78,0x44, 0x4,0x6c,0x32, + 0x4,0x6c,0x31, 0x7,0x5f,0x7d, 0x7,0x5f,0x7e, 0x7,0x60,0x21, + 0xf,0x6b,0x70, 0x4,0x6d,0x2c, 0x5,0x79,0x56, 0x4,0x6d,0x2b, + 0x5,0x79,0x55, 0x7,0x61,0x5b, 0x5,0x79,0x57, 0x5,0x7a,0x44, + 0x7,0x62,0x7b, 0x5,0x7a,0x43, 0x7,0x62,0x7c, 0xf,0x6c,0x59, + 0x7,0x63,0x23, 0x5,0x7a,0x42, 0x7,0x64,0x6c, 0x4,0x6e,0x3e, + 0x7,0x65,0x4b, 0x7,0x65,0x4a, 0x7,0x65,0x4c, 0x5,0x7b,0x6c, + 0x7,0x66,0x2d, 0x7,0x66,0x4e, 0x7,0x66,0x51, 0x4,0x6e,0x5c, + 0x4,0x36,0x26, 0x6,0x50,0x34, 0xf,0x46,0x2e, 0xf,0x46,0x2f, + 0xf,0x46,0x30, 0x6,0x59,0x7d, 0x4,0x48,0x36, 0x7,0x2c,0x44, + 0x7,0x35,0x3d, 0x5,0x5a,0x74, 0x7,0x44,0x66, 0xf,0x64,0x4f, + 0x5,0x71,0x62, 0xf,0x6b,0x71, 0x6,0x3c,0x74, 0x6,0x2e,0x49, + 0x6,0x3c,0x73, 0x4,0x36,0x27, 0x6,0x46,0x34, 0x4,0x36,0x29, + 0xf,0x39,0x2d, 0x6,0x50,0x35, 0x5,0x3d,0x42, 0x4,0x3b,0x75, + 0x6,0x50,0x37, 0x6,0x50,0x36, 0xf,0x40,0x28, 0xf,0x40,0x29, + 0x6,0x5a,0x21, 0x6,0x59,0x7e, 0xf,0x4d,0x3b, 0x4,0x4e,0x4d, + 0x7,0x2a,0x6e, 0x7,0x2a,0x6d, 0x7,0x35,0x3e, 0x7,0x51,0x38, + 0x7,0x51,0x39, 0x6,0x50,0x39, 0x6,0x50,0x3a, 0x6,0x50,0x38, + 0x4,0x41,0x59, 0x4,0x41,0x5b, 0x5,0x44,0x28, 0x5,0x44,0x27, + 0x6,0x5a,0x23, 0x6,0x5a,0x22, 0x6,0x64,0x22, 0x5,0x4b,0x25, + 0x4,0x48,0x39, 0x6,0x64,0x21, 0x5,0x4b,0x24, 0xf,0x4d,0x3c, + 0x6,0x64,0x23, 0x4,0x4e,0x4e, 0x5,0x52,0x46, 0x5,0x52,0x48, + 0x5,0x52,0x47, 0x7,0x2a,0x70, 0x7,0x2a,0x6f, 0xf,0x58,0x77, + 0x5,0x59,0x50, 0x5,0x59,0x4f, 0x5,0x59,0x54, 0x5,0x59,0x51, + 0x5,0x59,0x52, 0x5,0x59,0x53, 0xf,0x58,0x76, 0x7,0x35,0x3f, + 0x7,0x3d,0x4f, 0x5,0x5f,0x5f, 0x5,0x5f,0x60, 0x5,0x5f,0x62, + 0x5,0x5f,0x61, 0xf,0x5d,0x5b, 0x7,0x3d,0x51, 0x5,0x65,0x72, + 0x7,0x44,0x67, 0x5,0x65,0x70, 0x5,0x65,0x71, 0x4,0x5e,0x39, + 0x5,0x6a,0x4b, 0x5,0x6a,0x4a, 0x5,0x6e,0x47, 0x5,0x6e,0x46, + 0x7,0x4d,0x50, 0x7,0x51,0x3a, 0x5,0x6c,0x46, 0x5,0x71,0x64, + 0x7,0x56,0x22, 0x5,0x71,0x66, 0x5,0x71,0x65, 0xf,0x68,0x79, + 0x7,0x56,0x21, 0x7,0x56,0x24, 0x7,0x56,0x23, 0x7,0x59,0x7b, + 0x7,0x59,0x7c, 0x7,0x5d,0x3d, 0x5,0x76,0x64, 0xf,0x6b,0x34, + 0x7,0x60,0x22, 0x5,0x7a,0x45, 0x7,0x64,0x21, 0x7,0x64,0x6e, + 0x7,0x64,0x6d, 0xf,0x39,0x2e, 0x5,0x3d,0x43, 0x4,0x3b,0x78, + 0x6,0x50,0x3b, 0x5,0x44,0x2c, 0x5,0x44,0x2b, 0x6,0x5a,0x26, + 0x6,0x5a,0x29, 0x5,0x44,0x2a, 0x6,0x5a,0x27, 0x5,0x44,0x29, + 0x6,0x5a,0x25, 0x6,0x5a,0x2b, 0x6,0x5a,0x2a, 0x4,0x41,0x5c, + 0x4,0x41,0x5e, 0xf,0x46,0x31, 0x5,0x4b,0x27, 0x4,0x48,0x3c, + 0x5,0x4b,0x26, 0x6,0x64,0x27, 0x6,0x64,0x25, 0x5,0x4b,0x28, + 0x5,0x4b,0x29, 0x4,0x48,0x3e, 0x5,0x4b,0x2c, 0x5,0x4b,0x2a, + 0x5,0x4b,0x2d, 0x5,0x4b,0x2b, 0x6,0x64,0x29, 0x4,0x48,0x3f, + 0x6,0x64,0x28, 0x6,0x64,0x24, 0x6,0x64,0x26, 0x7,0x2a,0x73, + 0x5,0x52,0x49, 0x7,0x2a,0x77, 0x7,0x2a,0x76, 0x4,0x4e,0x51, + 0x7,0x2a,0x79, 0x5,0x52,0x4a, 0x4,0x4e,0x52, 0x7,0x2a,0x75, + 0x4,0x4e,0x53, 0x5,0x52,0x4d, 0x4,0x4e,0x50, 0x5,0x52,0x4c, + 0x5,0x52,0x4e, 0x7,0x2a,0x74, 0x5,0x52,0x4b, 0x7,0x2a,0x78, + 0x7,0x2a,0x72, 0x7,0x35,0x44, 0x5,0x59,0x55, 0x5,0x59,0x58, + 0x4,0x54,0x66, 0x4,0x54,0x5e, 0x4,0x54,0x65, 0x5,0x59,0x56, + 0x5,0x59,0x57, 0x7,0x35,0x43, 0x7,0x35,0x47, 0x7,0x35,0x40, + 0x7,0x35,0x41, 0x7,0x35,0x45, 0x7,0x35,0x46, 0x7,0x3d,0x58, + 0x7,0x3d,0x5a, 0x5,0x5f,0x63, 0x5,0x5f,0x69, 0x4,0x59,0x66, + 0x5,0x5f,0x65, 0x7,0x3d,0x53, 0x4,0x59,0x67, 0x7,0x35,0x42, + 0x5,0x5f,0x6d, 0x7,0x3d,0x57, 0x4,0x59,0x65, 0x7,0x3d,0x59, + 0x5,0x5f,0x67, 0x5,0x5f,0x6a, 0x7,0x3d,0x55, 0x5,0x5f,0x6b, + 0x7,0x3d,0x5b, 0x7,0x35,0x48, 0x5,0x5f,0x68, 0x7,0x3d,0x54, + 0x7,0x3d,0x5c, 0xf,0x5d,0x5c, 0x7,0x3d,0x52, 0x5,0x5f,0x6c, + 0x5,0x5f,0x66, 0x4,0x5e,0x44, 0x5,0x65,0x7c, 0x5,0x65,0x74, + 0x4,0x5e,0x3a, 0x5,0x65,0x76, 0x5,0x66,0x22, 0x7,0x44,0x6a, + 0x7,0x44,0x68, 0x4,0x5e,0x3f, 0x5,0x65,0x77, 0x4,0x5e,0x40, + 0x7,0x44,0x6d, 0x7,0x44,0x70, 0x5,0x66,0x21, 0x7,0x44,0x6f, + 0x4,0x5e,0x3d, 0x5,0x66,0x23, 0x7,0x44,0x71, 0x7,0x44,0x72, + 0x7,0x44,0x6e, 0xf,0x61,0x53, 0xf,0x61,0x54, 0x5,0x5f,0x64, + 0x7,0x44,0x6c, 0x7,0x44,0x6b, 0x5,0x65,0x78, 0x5,0x66,0x24, + 0x7,0x44,0x69, 0x5,0x65,0x75, 0x5,0x65,0x7a, 0x5,0x65,0x79, + 0x5,0x65,0x7d, 0x4,0x61,0x7a, 0x5,0x6a,0x51, 0x5,0x6a,0x54, + 0x5,0x6a,0x4f, 0x4,0x61,0x79, 0x5,0x6a,0x4d, 0x7,0x4b,0x5a, + 0x5,0x6a,0x55, 0x7,0x4b,0x63, 0x5,0x6a,0x4e, 0x4,0x61,0x78, + 0x7,0x4b,0x61, 0x4,0x61,0x76, 0x7,0x4b,0x5e, 0x4,0x61,0x75, + 0x7,0x4b,0x62, 0x5,0x6a,0x50, 0x7,0x4b,0x60, 0xf,0x64,0x50, + 0xf,0x64,0x52, 0xf,0x64,0x53, 0x7,0x4b,0x5b, 0x7,0x4b,0x5c, + 0x5,0x6a,0x53, 0x5,0x6a,0x52, 0x7,0x4b,0x59, 0x5,0x6a,0x4c, + 0x4,0x65,0x24, 0x5,0x6e,0x4e, 0x4,0x64,0x7d, 0x5,0x6e,0x4f, + 0x5,0x6e,0x4a, 0x7,0x51,0x3b, 0x5,0x6e,0x48, 0x7,0x51,0x3d, + 0x4,0x65,0x21, 0x5,0x6e,0x4c, 0x4,0x65,0x22, 0x4,0x65,0x25, + 0x5,0x6e,0x4d, 0x7,0x51,0x41, 0x7,0x51,0x3c, 0xf,0x66,0x78, + 0x7,0x51,0x3e, 0x7,0x51,0x43, 0x7,0x51,0x40, 0x5,0x6e,0x4b, + 0x7,0x51,0x3f, 0x5,0x6e,0x50, 0x4,0x65,0x26, 0x7,0x51,0x42, + 0x5,0x71,0x6d, 0x7,0x56,0x28, 0x4,0x67,0x6f, 0x7,0x56,0x2a, + 0x7,0x56,0x2b, 0x5,0x71,0x6a, 0x5,0x71,0x6b, 0x5,0x71,0x6c, + 0x5,0x71,0x67, 0x5,0x71,0x68, 0x7,0x56,0x29, 0xf,0x66,0x77, + 0x5,0x74,0x60, 0x7,0x5a,0x26, 0x7,0x59,0x7d, 0x4,0x69,0x5d, + 0x5,0x74,0x61, 0x7,0x5a,0x25, 0x7,0x5a,0x23, 0x7,0x59,0x7e, + 0x7,0x5a,0x24, 0x5,0x74,0x63, 0x5,0x74,0x64, 0x7,0x5a,0x21, + 0x7,0x5a,0x22, 0x5,0x74,0x65, 0x5,0x76,0x65, 0x5,0x76,0x68, + 0x5,0x76,0x66, 0x7,0x5d,0x3e, 0x5,0x76,0x69, 0x5,0x76,0x67, + 0x7,0x5d,0x41, 0x7,0x5d,0x3f, 0x7,0x5d,0x42, 0x7,0x5d,0x40, + 0x5,0x78,0x46, 0x5,0x79,0x58, 0x7,0x60,0x23, 0x5,0x78,0x45, + 0x5,0x78,0x47, 0x7,0x61,0x5e, 0x7,0x61,0x5c, 0x7,0x61,0x5d, + 0x5,0x7a,0x46, 0x7,0x62,0x7e, 0x7,0x63,0x22, 0x5,0x79,0x59, + 0x7,0x63,0x21, 0x7,0x62,0x7d, 0x5,0x7b,0x22, 0x7,0x64,0x70, + 0x7,0x64,0x6f, 0x5,0x7b,0x4c, 0x7,0x65,0x69, 0x5,0x7c,0x35, + 0x7,0x66,0x2e, 0x7,0x66,0x39, 0x7,0x66,0x38, 0x5,0x7c,0x4c, + 0x5,0x3d,0x44, 0x4,0x41,0x60, 0x4,0x41,0x62, 0x6,0x5a,0x2c, + 0x5,0x44,0x2d, 0x6,0x64,0x2b, 0x5,0x4b,0x2f, 0x5,0x4b,0x31, + 0x5,0x4b,0x2e, 0x5,0x4b,0x30, 0x6,0x64,0x2a, 0xf,0x4d,0x3d, + 0x5,0x4b,0x32, 0x4,0x4e,0x55, 0x5,0x52,0x50, 0x4,0x4e,0x54, + 0x4,0x4e,0x56, 0x7,0x2a,0x7b, 0x7,0x2a,0x7a, 0x7,0x2a,0x7c, + 0x7,0x2a,0x7d, 0x7,0x2a,0x7e, 0x5,0x52,0x4f, 0x5,0x52,0x51, + 0x5,0x59,0x59, 0x7,0x35,0x49, 0x7,0x35,0x4a, 0x5,0x59,0x5c, + 0x5,0x59,0x5d, 0x5,0x59,0x5b, 0x7,0x35,0x4b, 0x5,0x59,0x5a, + 0x4,0x59,0x69, 0x7,0x3d,0x5e, 0x5,0x5f,0x6e, 0x7,0x3d,0x5f, + 0x4,0x59,0x6c, 0x4,0x59,0x6a, 0x5,0x5f,0x6f, 0x5,0x5f,0x70, + 0xf,0x5d,0x5d, 0x7,0x3d,0x5d, 0x7,0x3d,0x60, 0x7,0x44,0x76, + 0x7,0x44,0x73, 0x4,0x5e,0x46, 0x7,0x44,0x74, 0x7,0x3d,0x61, + 0x5,0x66,0x25, 0x7,0x44,0x78, 0x7,0x44,0x75, 0x7,0x4b,0x64, + 0x7,0x4b,0x66, 0x7,0x4b,0x69, 0x7,0x4b,0x65, 0x7,0x4b,0x68, + 0x7,0x4b,0x67, 0x7,0x51,0x44, 0x5,0x6a,0x56, 0x5,0x6a,0x57, + 0x7,0x51,0x45, 0x7,0x51,0x46, 0x4,0x65,0x28, 0xf,0x66,0x79, + 0x5,0x6e,0x52, 0x5,0x6e,0x51, 0x5,0x71,0x6e, 0x5,0x71,0x70, + 0x5,0x71,0x72, 0x4,0x67,0x74, 0x7,0x56,0x2c, 0x5,0x71,0x6f, + 0x5,0x71,0x71, 0x7,0x5a,0x27, 0x4,0x69,0x5f, 0x5,0x74,0x66, + 0x7,0x5a,0x28, 0x7,0x5a,0x29, 0x5,0x74,0x67, 0x7,0x5d,0x43, + 0x7,0x5d,0x46, 0x7,0x5d,0x45, 0x7,0x5d,0x44, 0x4,0x6c,0x35, + 0x7,0x61,0x5f, 0x5,0x7a,0x47, 0x7,0x64,0x24, 0x7,0x64,0x22, + 0x7,0x64,0x23, 0x5,0x7b,0x4d, 0x5,0x7b,0x6d, 0x5,0x7c,0x22, + 0x5,0x44,0x2e, 0x6,0x5a,0x2d, 0x5,0x52,0x52, 0x7,0x35,0x4c, + 0x4,0x59,0x6d, 0x7,0x3d,0x62, 0x7,0x4b,0x6c, 0x7,0x51,0x48, + 0x4,0x65,0x2b, 0x5,0x71,0x73, 0x7,0x51,0x47, 0x7,0x56,0x2d, + 0x7,0x5a,0x2a, 0x7,0x5d,0x48, 0x7,0x5d,0x47, 0x7,0x61,0x60, + 0xf,0x40,0x2c, 0x5,0x44,0x30, 0x5,0x44,0x2f, 0x5,0x4b,0x33, + 0x4,0x48,0x45, 0x5,0x4b,0x34, 0x5,0x52,0x5a, 0x7,0x2b,0x21, + 0x5,0x52,0x54, 0x5,0x52,0x57, 0x7,0x2b,0x22, 0x5,0x52,0x55, + 0x5,0x52,0x56, 0x5,0x52,0x59, 0x5,0x52,0x53, 0x4,0x54,0x6b, + 0x5,0x52,0x58, 0xf,0x58,0x79, 0x5,0x59,0x5e, 0x7,0x35,0x4d, + 0x7,0x3d,0x63, 0x5,0x5f,0x71, 0x5,0x5f,0x72, 0x5,0x66,0x26, + 0x5,0x66,0x27, 0x5,0x66,0x28, 0x4,0x62,0x21, 0x5,0x6a,0x58, + 0x5,0x6a,0x59, 0x7,0x51,0x49, 0x7,0x51,0x4a, 0x5,0x6e,0x54, + 0x5,0x6e,0x53, 0x5,0x6e,0x55, 0x7,0x56,0x2e, 0x5,0x71,0x74, + 0x5,0x66,0x29, 0x5,0x74,0x68, 0x5,0x74,0x69, 0x4,0x69,0x61, + 0xf,0x6a,0x33, 0x7,0x5d,0x4a, 0x4,0x6c,0x36, 0x5,0x7b,0x23, + 0x5,0x7c,0x3f, 0x6,0x34,0x7b, 0x6,0x46,0x35, 0x5,0x36,0x46, + 0x5,0x3d,0x4a, 0x5,0x3d,0x48, 0x5,0x3d,0x49, 0x5,0x3d,0x46, + 0x4,0x3b,0x7d, 0x5,0x3d,0x45, 0x4,0x3b,0x7c, 0x6,0x50,0x3c, + 0x4,0x3b,0x7a, 0x4,0x41,0x6c, 0x5,0x44,0x3a, 0x4,0x41,0x6b, + 0x5,0x44,0x31, 0x5,0x44,0x39, 0x6,0x5a,0x2f, 0x4,0x41,0x69, + 0x5,0x4b,0x3b, 0x5,0x44,0x37, 0x4,0x41,0x66, 0x4,0x41,0x67, + 0x4,0x41,0x6a, 0x6,0x5a,0x32, 0x5,0x44,0x36, 0x5,0x44,0x32, + 0x6,0x5a,0x30, 0x6,0x5a,0x31, 0x6,0x5a,0x2e, 0xf,0x46,0x33, + 0x5,0x44,0x33, 0x5,0x44,0x38, 0x5,0x4b,0x3d, 0x6,0x64,0x31, + 0x6,0x64,0x32, 0x5,0x4b,0x37, 0x5,0x4b,0x44, 0x5,0x4b,0x38, + 0x4,0x48,0x49, 0x4,0x48,0x48, 0x5,0x4b,0x3a, 0x5,0x4b,0x36, + 0x4,0x48,0x4f, 0x5,0x4b,0x42, 0x5,0x4b,0x39, 0x7,0x2b,0x2b, + 0x5,0x4b,0x43, 0x6,0x64,0x35, 0x6,0x64,0x33, 0x6,0x64,0x2e, + 0x5,0x4b,0x3c, 0x5,0x4b,0x41, 0xf,0x4d,0x3e, 0x6,0x64,0x2d, + 0x5,0x4b,0x40, 0x6,0x64,0x2c, 0x6,0x64,0x36, 0x5,0x4b,0x35, + 0x6,0x64,0x2f, 0x6,0x64,0x34, 0x5,0x52,0x5d, 0x4,0x4e,0x5b, + 0x7,0x2b,0x25, 0x7,0x2b,0x30, 0x5,0x52,0x5c, 0x5,0x52,0x5b, + 0x4,0x4e,0x58, 0x7,0x2b,0x24, 0x7,0x2b,0x2a, 0x4,0x48,0x4a, + 0x7,0x2b,0x2e, 0x5,0x52,0x5e, 0x4,0x4e,0x5e, 0x7,0x2b,0x2d, + 0x7,0x2b,0x29, 0x7,0x35,0x4f, 0x7,0x2b,0x2c, 0xf,0x53,0x23, + 0xf,0x53,0x24, 0x7,0x2b,0x27, 0x7,0x2b,0x28, 0x7,0x2b,0x2f, + 0x7,0x2b,0x31, 0x7,0x2b,0x23, 0x7,0x2b,0x26, 0x5,0x52,0x5f, + 0x4,0x54,0x6c, 0x5,0x59,0x61, 0x4,0x54,0x6e, 0x5,0x59,0x69, + 0x7,0x35,0x58, 0x5,0x59,0x68, 0x5,0x59,0x66, 0x7,0x35,0x59, + 0x7,0x35,0x57, 0x5,0x59,0x65, 0x5,0x59,0x63, 0x7,0x35,0x5b, + 0x7,0x35,0x50, 0x5,0x59,0x6a, 0x5,0x59,0x62, 0x5,0x59,0x6b, + 0x5,0x59,0x64, 0x5,0x59,0x67, 0x4,0x54,0x71, 0x7,0x35,0x4e, + 0x5,0x59,0x60, 0x7,0x35,0x5a, 0x4,0x54,0x72, 0x7,0x35,0x56, + 0x7,0x35,0x5c, 0xf,0x4d,0x40, 0xf,0x58,0x7a, 0xf,0x58,0x7c, + 0xf,0x58,0x7d, 0xf,0x59,0x21, 0xf,0x59,0x22, 0xf,0x59,0x23, + 0x7,0x35,0x52, 0x7,0x35,0x53, 0x7,0x35,0x54, 0x7,0x35,0x55, + 0x5,0x59,0x6c, 0x5,0x59,0x5f, 0xf,0x58,0x7e, 0x5,0x59,0x6d, + 0x4,0x59,0x75, 0x4,0x59,0x71, 0x4,0x59,0x6e, 0x7,0x3d,0x65, + 0x5,0x5f,0x77, 0x4,0x59,0x79, 0x5,0x5f,0x78, 0x4,0x59,0x74, + 0x5,0x5f,0x76, 0x5,0x5f,0x73, 0x5,0x5f,0x75, 0x4,0x59,0x6f, + 0x5,0x5f,0x7b, 0x7,0x3d,0x6a, 0x4,0x59,0x72, 0x7,0x3d,0x6c, + 0x5,0x5f,0x74, 0x7,0x3d,0x67, 0x4,0x59,0x78, 0x7,0x3d,0x6b, + 0xf,0x5d,0x5e, 0xf,0x5d,0x5f, 0xf,0x5d,0x60, 0xf,0x5d,0x61, + 0xf,0x5d,0x62, 0xf,0x5d,0x63, 0x7,0x3d,0x64, 0x7,0x3d,0x66, + 0x5,0x5f,0x79, 0x5,0x5f,0x7a, 0x7,0x3d,0x68, 0x7,0x3d,0x6d, + 0x5,0x66,0x2a, 0x4,0x5e,0x4a, 0x5,0x66,0x30, 0x5,0x66,0x2e, + 0x4,0x62,0x24, 0x5,0x66,0x2d, 0x5,0x66,0x2b, 0x7,0x44,0x7b, + 0x5,0x66,0x2c, 0x4,0x5e,0x48, 0x5,0x66,0x31, 0x5,0x66,0x2f, + 0x7,0x44,0x7c, 0xf,0x61,0x55, 0xf,0x61,0x56, 0xf,0x61,0x57, + 0xf,0x61,0x58, 0x7,0x44,0x79, 0x7,0x44,0x7a, 0x7,0x4b,0x76, + 0x5,0x6a,0x5d, 0x7,0x4b,0x70, 0x7,0x4b,0x6d, 0x5,0x6a,0x5e, + 0x4,0x62,0x2e, 0x7,0x4b,0x72, 0x5,0x6a,0x5c, 0x5,0x6e,0x56, + 0x5,0x6a,0x5b, 0x5,0x6a,0x5a, 0x7,0x4b,0x74, 0x7,0x4b,0x6f, + 0x4,0x62,0x2a, 0x7,0x4b,0x6e, 0x7,0x4b,0x75, 0x7,0x4b,0x71, + 0xf,0x64,0x54, 0xf,0x64,0x55, 0x7,0x4b,0x77, 0x7,0x4b,0x73, + 0x4,0x65,0x2e, 0x4,0x65,0x2d, 0x5,0x6e,0x5b, 0x5,0x6e,0x59, + 0x7,0x51,0x4e, 0x5,0x6e,0x5a, 0x4,0x65,0x32, 0x7,0x51,0x4d, + 0x4,0x65,0x33, 0x5,0x6e,0x58, 0x7,0x51,0x4b, 0x7,0x51,0x4f, + 0xf,0x66,0x7a, 0x4,0x65,0x34, 0x7,0x51,0x50, 0x7,0x51,0x4c, + 0x5,0x6e,0x57, 0x7,0x50,0x4c, 0x5,0x71,0x75, 0x5,0x71,0x76, + 0x7,0x56,0x2f, 0x5,0x71,0x78, 0x7,0x56,0x38, 0x7,0x5a,0x31, + 0x4,0x67,0x7a, 0x4,0x67,0x78, 0x7,0x56,0x33, 0x7,0x56,0x31, + 0x7,0x56,0x36, 0x5,0x71,0x77, 0x5,0x71,0x79, 0x5,0x71,0x7a, + 0x7,0x56,0x30, 0x7,0x56,0x34, 0xf,0x68,0x7a, 0xf,0x68,0x7b, + 0xf,0x68,0x7c, 0x7,0x56,0x37, 0x7,0x56,0x35, 0x7,0x5a,0x30, + 0x5,0x74,0x6c, 0x5,0x74,0x6b, 0x7,0x5a,0x2d, 0x7,0x5a,0x2f, + 0x5,0x74,0x6a, 0xf,0x6a,0x34, 0x7,0x5a,0x2b, 0x7,0x5a,0x2e, + 0x7,0x5a,0x2c, 0x7,0x5d,0x52, 0x7,0x5d,0x51, 0x7,0x5d,0x4f, + 0x5,0x76,0x6c, 0x5,0x76,0x6d, 0x4,0x6b,0x2e, 0x5,0x76,0x6a, + 0x7,0x5d,0x4d, 0x4,0x6b,0x2f, 0x7,0x5d,0x4e, 0xf,0x6b,0x35, + 0x7,0x5d,0x50, 0x7,0x5d,0x4c, 0x7,0x5d,0x4b, 0x4,0x6c,0x38, + 0x7,0x60,0x24, 0x5,0x76,0x6b, 0x4,0x6c,0x37, 0xf,0x6b,0x72, + 0x7,0x60,0x25, 0x4,0x6d,0x2e, 0x5,0x79,0x5a, 0x5,0x7a,0x48, + 0x7,0x63,0x24, 0x5,0x7a,0x49, 0x7,0x63,0x25, 0x7,0x63,0x26, + 0x4,0x6e,0x23, 0x7,0x64,0x25, 0x7,0x65,0x4d, 0x6,0x46,0x36, + 0x6,0x50,0x3f, 0x4,0x3c,0x21, 0x6,0x50,0x3d, 0x5,0x3d,0x4b, + 0xf,0x40,0x2e, 0x6,0x50,0x3e, 0x5,0x44,0x3b, 0x5,0x44,0x40, + 0x4,0x41,0x6f, 0x5,0x44,0x3d, 0x5,0x44,0x3e, 0x6,0x5a,0x34, + 0x6,0x5a,0x36, 0x5,0x44,0x3c, 0x4,0x41,0x70, 0x6,0x5a,0x35, + 0x6,0x53,0x33, 0x5,0x44,0x3f, 0x6,0x5a,0x37, 0x4,0x48,0x58, + 0x5,0x4b,0x48, 0x4,0x48,0x55, 0x5,0x4b,0x47, 0x5,0x4b,0x46, + 0x5,0x4b,0x45, 0x4,0x48,0x53, 0x6,0x64,0x37, 0x4,0x48,0x52, + 0x6,0x64,0x3b, 0x6,0x64,0x39, 0x6,0x64,0x38, 0x4,0x4e,0x5f, + 0x5,0x52,0x62, 0x4,0x4e,0x62, 0x7,0x2b,0x34, 0x7,0x2b,0x33, + 0x7,0x2b,0x32, 0x5,0x52,0x61, 0x7,0x2b,0x35, 0xf,0x53,0x25, + 0xf,0x53,0x26, 0x5,0x59,0x6f, 0x5,0x59,0x77, 0x5,0x59,0x70, + 0x7,0x35,0x5d, 0x7,0x35,0x60, 0x5,0x59,0x6e, 0x5,0x59,0x73, + 0x5,0x59,0x76, 0x7,0x35,0x5f, 0x7,0x35,0x61, 0x5,0x59,0x74, + 0x5,0x59,0x75, 0x7,0x35,0x5e, 0xf,0x59,0x25, 0x5,0x59,0x72, + 0x5,0x59,0x71, 0x7,0x3d,0x71, 0x4,0x5a,0x25, 0x5,0x60,0x25, + 0x5,0x60,0x26, 0x4,0x59,0x7b, 0x5,0x5f,0x7c, 0x7,0x3d,0x70, + 0x4,0x5a,0x24, 0x5,0x66,0x32, 0x5,0x60,0x22, 0x4,0x5a,0x23, + 0x5,0x5f,0x7e, 0x5,0x60,0x21, 0x5,0x60,0x24, 0x5,0x5f,0x7d, + 0x5,0x60,0x23, 0x7,0x3d,0x6e, 0xf,0x5d,0x64, 0xf,0x5d,0x65, + 0x7,0x3d,0x72, 0x7,0x3d,0x6f, 0x4,0x5e,0x53, 0x7,0x45,0x22, + 0x7,0x45,0x24, 0x5,0x66,0x37, 0x7,0x45,0x26, 0x5,0x66,0x34, + 0x5,0x66,0x38, 0x4,0x5e,0x54, 0x5,0x66,0x3a, 0x4,0x62,0x31, + 0x5,0x66,0x35, 0x7,0x45,0x25, 0x5,0x66,0x36, 0x5,0x66,0x39, + 0x5,0x66,0x33, 0xf,0x61,0x59, 0x7,0x45,0x28, 0x7,0x45,0x23, + 0x7,0x45,0x21, 0x7,0x45,0x27, 0x7,0x44,0x7d, 0x5,0x6a,0x5f, + 0x4,0x62,0x33, 0x4,0x62,0x34, 0x4,0x62,0x35, 0x5,0x6a,0x60, + 0x7,0x4b,0x79, 0xf,0x64,0x56, 0xf,0x64,0x57, 0x7,0x4b,0x78, + 0x7,0x4b,0x7a, 0x7,0x4b,0x7b, 0x7,0x4b,0x7c, 0x5,0x6e,0x5e, + 0x5,0x6e,0x61, 0x5,0x6e,0x60, 0x4,0x65,0x35, 0x5,0x6e,0x5c, + 0x4,0x65,0x37, 0x5,0x6e,0x5f, 0xf,0x66,0x7b, 0x5,0x6e,0x62, + 0x5,0x6e,0x5d, 0x4,0x65,0x38, 0x7,0x56,0x40, 0x4,0x67,0x7d, + 0x4,0x68,0x21, 0x5,0x71,0x7b, 0x7,0x56,0x39, 0x5,0x71,0x7c, + 0x7,0x56,0x3c, 0x7,0x56,0x3a, 0xf,0x68,0x7d, 0x7,0x56,0x3f, + 0x7,0x56,0x41, 0x7,0x56,0x42, 0x7,0x56,0x3d, 0x7,0x56,0x3e, + 0x7,0x56,0x3b, 0x7,0x5a,0x32, 0xf,0x6a,0x35, 0x7,0x5a,0x33, + 0x7,0x5d,0x53, 0x5,0x78,0x49, 0x4,0x6c,0x3b, 0x7,0x60,0x26, + 0x7,0x60,0x27, 0x5,0x79,0x5b, 0x7,0x61,0x61, 0x5,0x79,0x5c, + 0x4,0x6d,0x2f, 0x4,0x6d,0x66, 0x5,0x7a,0x4a, 0x5,0x7b,0x24, + 0x7,0x64,0x26, 0xf,0x6d,0x24, 0x5,0x7c,0x47, 0x7,0x66,0x55, + 0x6,0x3c,0x75, 0x5,0x40,0x39, 0x7,0x2b,0x36, 0x7,0x4b,0x7d, + 0x5,0x6a,0x61, 0x7,0x56,0x43, 0x4,0x69,0x64, 0x5,0x74,0x6d, + 0x6,0x34,0x7c, 0x6,0x34,0x7d, 0x6,0x35,0x22, 0x6,0x34,0x7e, + 0x5,0x30,0x71, 0x6,0x3c,0x76, 0x6,0x3c,0x78, 0x5,0x3d,0x4c, + 0x5,0x36,0x4a, 0x5,0x36,0x47, 0x6,0x46,0x3a, 0x6,0x46,0x38, + 0x5,0x36,0x49, 0x6,0x46,0x39, 0x6,0x46,0x3b, 0x6,0x50,0x40, + 0x5,0x36,0x48, 0x6,0x50,0x41, 0x6,0x50,0x46, 0x4,0x3c,0x22, + 0x5,0x3d,0x4d, 0x6,0x50,0x44, 0x6,0x50,0x45, 0x4,0x3c,0x26, + 0x5,0x3d,0x4e, 0x6,0x5a,0x38, 0x5,0x3d,0x4f, 0x6,0x50,0x42, + 0xf,0x40,0x2f, 0x6,0x50,0x43, 0x4,0x3c,0x23, 0x6,0x5a,0x42, + 0x6,0x5a,0x39, 0x5,0x44,0x42, 0x5,0x44,0x44, 0x5,0x44,0x41, + 0x5,0x44,0x47, 0x4,0x41,0x76, 0x5,0x44,0x43, 0x6,0x64,0x43, + 0x5,0x44,0x45, 0x6,0x5a,0x3c, 0x6,0x5a,0x3b, 0x6,0x64,0x3d, + 0x4,0x41,0x73, 0x6,0x5a,0x3a, 0x6,0x64,0x3e, 0x6,0x5a,0x3e, + 0x5,0x44,0x48, 0x6,0x5a,0x41, 0x5,0x52,0x63, 0xf,0x46,0x37, + 0x6,0x5a,0x40, 0x6,0x5a,0x3f, 0x6,0x64,0x3c, 0x4,0x41,0x78, + 0x5,0x44,0x46, 0x6,0x64,0x3f, 0x7,0x2b,0x37, 0x6,0x64,0x44, + 0x5,0x4b,0x4d, 0x5,0x4b,0x49, 0x6,0x64,0x45, 0x5,0x4b,0x4a, + 0x4,0x48,0x5a, 0x6,0x64,0x42, 0x5,0x4b,0x4b, 0x7,0x2b,0x39, + 0x6,0x64,0x41, 0xf,0x46,0x36, 0xf,0x53,0x28, 0x7,0x2b,0x3a, + 0x4,0x4e,0x6b, 0x7,0x2b,0x40, 0x4,0x4e,0x6a, 0x5,0x52,0x69, + 0x5,0x52,0x64, 0x5,0x59,0x79, 0x4,0x4e,0x68, 0x5,0x52,0x66, + 0x5,0x52,0x6b, 0x5,0x52,0x68, 0x4,0x4e,0x6c, 0x5,0x52,0x6a, + 0x7,0x2b,0x3c, 0x5,0x52,0x65, 0x7,0x2b,0x3b, 0x7,0x3d,0x73, + 0x5,0x52,0x67, 0x7,0x2b,0x3e, 0x7,0x2b,0x3d, 0xf,0x53,0x27, + 0x5,0x59,0x78, 0x7,0x2b,0x3f, 0x5,0x5a,0x23, 0x4,0x5a,0x26, + 0x5,0x5a,0x24, 0x4,0x54,0x7b, 0x7,0x35,0x66, 0x7,0x35,0x6a, + 0x5,0x60,0x27, 0x5,0x59,0x7b, 0x7,0x35,0x69, 0x5,0x59,0x7e, + 0x7,0x35,0x67, 0x5,0x59,0x7c, 0x7,0x35,0x6f, 0x4,0x54,0x79, + 0x7,0x35,0x6b, 0x7,0x35,0x70, 0x5,0x5a,0x25, 0x7,0x35,0x68, + 0x7,0x35,0x63, 0x5,0x59,0x7a, 0x7,0x35,0x65, 0x7,0x35,0x64, + 0x7,0x35,0x6c, 0x5,0x60,0x29, 0x7,0x35,0x6e, 0x7,0x3d,0x75, + 0x7,0x35,0x62, 0x5,0x5a,0x22, 0x7,0x35,0x6d, 0x5,0x59,0x7d, + 0xf,0x59,0x26, 0xf,0x59,0x27, 0xf,0x59,0x28, 0xf,0x59,0x29, + 0x5,0x5a,0x21, 0x7,0x3d,0x74, 0x5,0x60,0x28, 0x5,0x60,0x34, + 0x7,0x3d,0x77, 0x5,0x60,0x2d, 0x5,0x60,0x2f, 0x5,0x60,0x33, + 0x5,0x60,0x2b, 0x7,0x3d,0x76, 0x5,0x60,0x32, 0x5,0x60,0x35, + 0x4,0x5a,0x2b, 0x5,0x60,0x36, 0x7,0x3d,0x78, 0x7,0x3d,0x7d, + 0x7,0x45,0x2a, 0x7,0x3d,0x7a, 0x5,0x60,0x2a, 0x7,0x45,0x2b, + 0x7,0x3e,0x21, 0x5,0x60,0x2e, 0x7,0x3d,0x79, 0x7,0x3d,0x7e, + 0xf,0x5d,0x66, 0xf,0x5d,0x67, 0x7,0x3d,0x7b, 0x5,0x60,0x30, + 0x7,0x3d,0x7c, 0x7,0x45,0x2f, 0x5,0x66,0x3f, 0x5,0x66,0x3b, + 0x4,0x5e,0x56, 0x4,0x5e,0x5c, 0x5,0x60,0x38, 0x4,0x5e,0x5d, + 0x5,0x66,0x3d, 0x5,0x60,0x37, 0x5,0x66,0x3c, 0x7,0x45,0x2e, + 0x7,0x45,0x2d, 0x7,0x4b,0x7e, 0x4,0x5e,0x5e, 0x5,0x66,0x3e, + 0x7,0x4c,0x22, 0x7,0x51,0x54, 0x7,0x45,0x2c, 0x7,0x45,0x29, + 0x7,0x45,0x31, 0xf,0x61,0x5a, 0xf,0x61,0x5b, 0x7,0x4c,0x25, + 0x7,0x4c,0x21, 0x4,0x5e,0x55, 0x7,0x45,0x32, 0x7,0x45,0x30, + 0x5,0x6a,0x64, 0x7,0x4c,0x23, 0x5,0x6a,0x62, 0x4,0x62,0x3b, + 0x4,0x65,0x3d, 0x7,0x51,0x53, 0x5,0x6a,0x69, 0x5,0x6a,0x66, + 0x5,0x6a,0x68, 0x5,0x6a,0x6a, 0x7,0x51,0x51, 0x4,0x62,0x37, + 0x5,0x6a,0x67, 0x5,0x60,0x39, 0x5,0x6a,0x63, 0x7,0x51,0x52, + 0x4,0x62,0x39, 0x7,0x51,0x58, 0x7,0x4c,0x24, 0x7,0x51,0x57, + 0x4,0x62,0x3a, 0xf,0x64,0x58, 0xf,0x64,0x59, 0x5,0x6a,0x65, + 0x7,0x51,0x56, 0x5,0x6a,0x6b, 0x4,0x65,0x3e, 0x7,0x51,0x55, + 0x7,0x51,0x59, 0x7,0x51,0x5f, 0x7,0x56,0x44, 0x5,0x71,0x7d, + 0x7,0x51,0x60, 0x5,0x6e,0x65, 0x4,0x65,0x3f, 0x5,0x71,0x7e, + 0x5,0x6e,0x64, 0x7,0x51,0x5e, 0x7,0x51,0x62, 0x5,0x6e,0x63, + 0x7,0x4c,0x27, 0x7,0x51,0x61, 0x7,0x51,0x5b, 0x7,0x51,0x5c, + 0x7,0x51,0x5d, 0x7,0x56,0x45, 0x7,0x51,0x63, 0x7,0x51,0x5a, + 0x5,0x72,0x28, 0x5,0x72,0x22, 0x7,0x56,0x46, 0x4,0x68,0x25, + 0x5,0x72,0x24, 0x5,0x72,0x21, 0x7,0x56,0x47, 0x5,0x72,0x2b, + 0x7,0x56,0x48, 0x5,0x72,0x2a, 0x5,0x72,0x23, 0x5,0x72,0x27, + 0x5,0x72,0x25, 0x7,0x56,0x49, 0x5,0x72,0x26, 0x5,0x72,0x29, + 0xf,0x68,0x7e, 0x4,0x69,0x66, 0x5,0x74,0x6e, 0x5,0x74,0x6f, + 0x7,0x5a,0x37, 0x7,0x5d,0x54, 0x7,0x5a,0x36, 0x5,0x74,0x70, + 0x7,0x5a,0x35, 0xf,0x6a,0x37, 0x7,0x5a,0x34, 0x5,0x76,0x6e, + 0x7,0x5d,0x56, 0x5,0x76,0x6f, 0x5,0x76,0x70, 0x5,0x78,0x4a, + 0x7,0x5d,0x55, 0x5,0x78,0x4b, 0x5,0x78,0x4c, 0x4,0x6c,0x3c, + 0x7,0x60,0x28, 0x7,0x60,0x2a, 0x7,0x60,0x29, 0x5,0x79,0x5d, + 0x7,0x64,0x27, 0x5,0x7b,0x25, 0x6,0x3c,0x79, 0x6,0x46,0x3c, + 0x6,0x64,0x46, 0x7,0x2b,0x41, 0x6,0x64,0x48, 0x6,0x64,0x47, + 0x5,0x52,0x6c, 0x4,0x55,0x24, 0x4,0x55,0x25, 0x7,0x3e,0x22, + 0x7,0x3e,0x23, 0x7,0x35,0x71, 0x7,0x35,0x73, 0x7,0x35,0x72, + 0x7,0x4c,0x29, 0x7,0x4c,0x28, 0x7,0x45,0x33, 0x7,0x4d,0x73, + 0x7,0x51,0x64, 0x7,0x60,0x2b, 0x4,0x6e,0x26, 0xf,0x32,0x71, + 0x4,0x41,0x7c, 0x6,0x5a,0x43, 0x5,0x47,0x54, 0x6,0x64,0x49, + 0x6,0x64,0x4a, 0xf,0x4d,0x41, 0xf,0x53,0x29, 0x6,0x64,0x4b, + 0x7,0x2b,0x42, 0xf,0x53,0x2a, 0xf,0x59,0x2a, 0x7,0x35,0x74, + 0xf,0x5d,0x68, 0x7,0x3e,0x24, 0x7,0x45,0x36, 0x5,0x66,0x41, + 0x5,0x66,0x40, 0x5,0x66,0x42, 0x7,0x45,0x35, 0x7,0x45,0x34, + 0x5,0x6a,0x6c, 0x4,0x62,0x3d, 0x4,0x62,0x3e, 0x7,0x4c,0x2a, + 0x7,0x51,0x65, 0xf,0x66,0x7c, 0x5,0x72,0x2c, 0xf,0x69,0x21, + 0x7,0x56,0x4a, 0x7,0x5d,0x57, 0x5,0x7a,0x4b, 0x5,0x36,0x4b, + 0x5,0x36,0x4c, 0x5,0x3d,0x50, 0x6,0x50,0x48, 0xf,0x40,0x31, + 0x6,0x50,0x47, 0x5,0x44,0x49, 0x6,0x5a,0x45, 0x6,0x5a,0x44, + 0x6,0x5a,0x47, 0x6,0x5a,0x46, 0x5,0x4b,0x51, 0x6,0x64,0x4d, + 0x6,0x64,0x4e, 0x5,0x4b,0x50, 0x4,0x48,0x61, 0x6,0x64,0x4c, + 0x6,0x64,0x52, 0x5,0x4b,0x4f, 0x7,0x2b,0x43, 0xf,0x4d,0x42, + 0xf,0x4d,0x43, 0xf,0x4d,0x44, 0xf,0x4d,0x45, 0x7,0x2b,0x46, + 0x6,0x64,0x4f, 0x6,0x64,0x51, 0x5,0x4b,0x52, 0x7,0x2b,0x4a, + 0x5,0x52,0x72, 0x7,0x2b,0x4e, 0x7,0x2b,0x47, 0x5,0x5a,0x32, + 0x5,0x52,0x74, 0x5,0x52,0x77, 0x5,0x52,0x6d, 0x5,0x52,0x70, + 0x5,0x52,0x6e, 0x5,0x52,0x75, 0x7,0x2b,0x44, 0x5,0x52,0x76, + 0x7,0x2b,0x48, 0x5,0x52,0x73, 0x7,0x2b,0x4b, 0x7,0x2b,0x49, + 0x5,0x52,0x6f, 0x7,0x2b,0x45, 0x7,0x2b,0x4c, 0x5,0x52,0x71, + 0xf,0x53,0x2b, 0xf,0x53,0x2c, 0xf,0x53,0x2d, 0x7,0x2b,0x4d, + 0x7,0x35,0x7a, 0x4,0x55,0x2c, 0x7,0x35,0x79, 0x5,0x5a,0x2f, + 0x4,0x55,0x2a, 0x4,0x55,0x27, 0x4,0x55,0x2b, 0x4,0x55,0x28, + 0x7,0x35,0x75, 0x5,0x5a,0x29, 0x4,0x55,0x29, 0x5,0x5a,0x30, + 0x5,0x5a,0x2d, 0x7,0x36,0x24, 0x5,0x5a,0x33, 0x5,0x5a,0x27, + 0x5,0x5a,0x31, 0x5,0x5a,0x34, 0x5,0x5a,0x2b, 0x7,0x35,0x7c, + 0x7,0x35,0x7b, 0x7,0x36,0x26, 0x7,0x36,0x21, 0x7,0x35,0x78, + 0x7,0x36,0x23, 0x5,0x5a,0x2a, 0x7,0x36,0x22, 0xf,0x59,0x2c, + 0x5,0x5a,0x28, 0x7,0x35,0x7d, 0x7,0x35,0x7e, 0x7,0x36,0x27, + 0x7,0x36,0x25, 0xf,0x59,0x2b, 0x7,0x35,0x76, 0x7,0x35,0x77, + 0x5,0x60,0x3a, 0x7,0x3e,0x2c, 0x5,0x60,0x3b, 0x7,0x3e,0x26, + 0x4,0x5a,0x2f, 0x7,0x3e,0x27, 0x7,0x3e,0x25, 0x5,0x60,0x3c, + 0x4,0x5a,0x2c, 0x7,0x3e,0x2a, 0x7,0x3e,0x2b, 0x5,0x4b,0x53, + 0x7,0x3e,0x28, 0x5,0x60,0x3e, 0x5,0x60,0x3d, 0xf,0x5d,0x69, + 0xf,0x5d,0x6a, 0x7,0x45,0x3c, 0x5,0x66,0x4c, 0x5,0x66,0x4b, + 0x5,0x66,0x47, 0x4,0x5e,0x64, 0x5,0x66,0x49, 0x5,0x66,0x48, + 0x4,0x5e,0x61, 0x5,0x66,0x45, 0x5,0x66,0x4e, 0x4,0x5e,0x6d, + 0x4,0x5e,0x69, 0x4,0x5e,0x6a, 0x4,0x5e,0x66, 0x5,0x66,0x4f, + 0x5,0x66,0x43, 0x4,0x5e,0x6c, 0x7,0x45,0x3b, 0x7,0x45,0x3a, + 0x7,0x45,0x37, 0x5,0x66,0x4a, 0xf,0x61,0x5d, 0xf,0x61,0x5e, + 0xf,0x61,0x60, 0x4,0x5e,0x6b, 0xf,0x61,0x5c, 0x7,0x45,0x38, + 0x5,0x66,0x44, 0x7,0x45,0x39, 0x5,0x66,0x4d, 0x5,0x6a,0x6d, + 0x5,0x6a,0x73, 0x5,0x6a,0x6f, 0x4,0x62,0x43, 0x7,0x4c,0x31, + 0x5,0x66,0x50, 0x7,0x4c,0x2c, 0x5,0x66,0x46, 0x5,0x6a,0x71, + 0x5,0x6a,0x70, 0x5,0x6a,0x74, 0x7,0x4c,0x2b, 0x5,0x6a,0x72, + 0x5,0x6a,0x76, 0x4,0x62,0x42, 0x5,0x6a,0x77, 0x7,0x4c,0x32, + 0x7,0x4c,0x34, 0x5,0x6a,0x75, 0x7,0x4c,0x33, 0x7,0x4c,0x2d, + 0x7,0x4c,0x2e, 0x7,0x4c,0x2f, 0xf,0x64,0x5b, 0xf,0x64,0x5c, + 0xf,0x64,0x5d, 0x7,0x4c,0x30, 0x3,0x57,0x36, 0x7,0x4c,0x35, + 0x4,0x65,0x45, 0x7,0x51,0x6a, 0x7,0x51,0x69, 0x5,0x6e,0x6e, + 0x5,0x6e,0x69, 0x5,0x6e,0x6b, 0x5,0x6e,0x68, 0x4,0x65,0x42, + 0x5,0x6e,0x70, 0xf,0x66,0x7d, 0x4,0x65,0x43, 0x4,0x65,0x44, + 0x4,0x65,0x48, 0x5,0x6e,0x71, 0x5,0x6e,0x72, 0x5,0x6e,0x67, + 0x7,0x51,0x68, 0x4,0x68,0x26, 0x5,0x6e,0x6a, 0x5,0x6e,0x6f, + 0x5,0x6e,0x6c, 0x7,0x51,0x6b, 0x7,0x51,0x6f, 0x7,0x51,0x70, + 0x7,0x51,0x71, 0x7,0x51,0x6d, 0x7,0x51,0x6c, 0xf,0x66,0x7e, + 0xf,0x67,0x21, 0x7,0x51,0x67, 0x7,0x51,0x6e, 0x7,0x52,0x27, + 0x7,0x51,0x66, 0x5,0x72,0x2f, 0x5,0x72,0x2e, 0x5,0x72,0x31, + 0x4,0x68,0x27, 0x5,0x72,0x32, 0x5,0x72,0x30, 0x4,0x68,0x2c, + 0x7,0x56,0x4d, 0x7,0x56,0x4c, 0x7,0x56,0x4e, 0x7,0x56,0x4b, + 0xf,0x69,0x22, 0x7,0x56,0x4f, 0x7,0x56,0x50, 0x5,0x74,0x78, + 0x7,0x5a,0x3d, 0x5,0x72,0x34, 0x7,0x5a,0x41, 0x7,0x5a,0x38, + 0x5,0x74,0x71, 0x7,0x5a,0x3b, 0x5,0x72,0x33, 0x5,0x74,0x74, + 0x5,0x74,0x77, 0x5,0x74,0x73, 0x7,0x5a,0x40, 0x4,0x69,0x6c, + 0x5,0x74,0x75, 0x7,0x5a,0x39, 0x7,0x5a,0x3a, 0x7,0x5a,0x3c, + 0xf,0x6a,0x38, 0xf,0x6a,0x39, 0xf,0x6a,0x3a, 0x5,0x74,0x72, + 0x5,0x74,0x79, 0x7,0x5a,0x3f, 0x7,0x5d,0x5f, 0x7,0x5d,0x5d, + 0x5,0x76,0x71, 0x5,0x78,0x4e, 0x7,0x5d,0x5c, 0x7,0x5d,0x59, + 0x5,0x76,0x72, 0x7,0x5d,0x5a, 0x7,0x5d,0x5e, 0x7,0x5d,0x5b, + 0x7,0x5d,0x60, 0xf,0x6b,0x38, 0xf,0x6b,0x39, 0x7,0x5d,0x58, + 0x5,0x78,0x4f, 0x7,0x60,0x31, 0x7,0x60,0x34, 0x5,0x78,0x4d, + 0x7,0x60,0x33, 0x7,0x60,0x36, 0x7,0x60,0x35, 0x7,0x60,0x2f, + 0x7,0x60,0x30, 0x7,0x60,0x2c, 0x7,0x60,0x32, 0x5,0x79,0x62, + 0x7,0x61,0x63, 0x5,0x79,0x63, 0x5,0x79,0x5f, 0x4,0x6d,0x31, + 0x5,0x79,0x60, 0x7,0x61,0x62, 0x5,0x79,0x5e, 0x5,0x79,0x61, + 0x4,0x6d,0x32, 0x7,0x61,0x64, 0x5,0x7a,0x4c, 0x5,0x7a,0x4d, + 0x4,0x6e,0x27, 0x7,0x64,0x29, 0x7,0x64,0x28, 0x4,0x6e,0x40, + 0x7,0x64,0x72, 0x7,0x64,0x73, 0x7,0x64,0x71, 0x7,0x65,0x4e, + 0x5,0x7c,0x23, 0x7,0x65,0x6a, 0x7,0x65,0x7a, 0x7,0x65,0x7b, + 0x7,0x66,0x44, 0x5,0x3d,0x51, 0x4,0x3c,0x27, 0x6,0x5a,0x49, + 0x6,0x5a,0x4a, 0x6,0x5a,0x48, 0x6,0x5a,0x4b, 0x4,0x48,0x63, + 0x4,0x48,0x65, 0x5,0x4b,0x55, 0x6,0x64,0x58, 0x5,0x4b,0x54, + 0x4,0x48,0x64, 0x6,0x64,0x56, 0x6,0x64,0x53, 0x6,0x64,0x54, + 0x6,0x64,0x55, 0x6,0x64,0x57, 0x4,0x4e,0x72, 0x4,0x4e,0x71, + 0x5,0x52,0x7a, 0x5,0x52,0x79, 0x7,0x2b,0x52, 0x7,0x36,0x2c, + 0x5,0x52,0x78, 0x5,0x52,0x7b, 0x4,0x4e,0x77, 0x7,0x2b,0x50, + 0x7,0x2b,0x54, 0x7,0x2b,0x51, 0x4,0x4e,0x78, 0x7,0x2b,0x53, + 0x5,0x5a,0x36, 0x5,0x5a,0x35, 0x4,0x55,0x33, 0x7,0x36,0x2b, + 0x7,0x2b,0x4f, 0x7,0x36,0x2a, 0x7,0x36,0x29, 0x7,0x3e,0x2e, + 0x4,0x5a,0x34, 0x7,0x3e,0x32, 0x4,0x5a,0x32, 0x7,0x3e,0x33, + 0x5,0x60,0x3f, 0x7,0x3e,0x31, 0x7,0x3e,0x2d, 0x7,0x3e,0x2f, + 0x7,0x3e,0x30, 0x5,0x66,0x59, 0x7,0x45,0x3e, 0x4,0x5e,0x6f, + 0x7,0x45,0x3d, 0x5,0x66,0x57, 0x7,0x45,0x3f, 0x5,0x66,0x52, + 0x5,0x6a,0x78, 0x5,0x66,0x55, 0x5,0x66,0x53, 0x5,0x66,0x56, + 0x5,0x66,0x58, 0x7,0x3e,0x34, 0x5,0x66,0x54, 0x7,0x4c,0x3b, + 0x5,0x6a,0x7a, 0x5,0x6a,0x79, 0x7,0x4c,0x3a, 0x7,0x4c,0x37, + 0x5,0x6a,0x7c, 0x5,0x6a,0x7d, 0x5,0x6a,0x7b, 0x7,0x4c,0x3d, + 0x7,0x4c,0x3e, 0x7,0x4c,0x39, 0x7,0x4c,0x38, 0x7,0x4c,0x3c, + 0x7,0x4c,0x36, 0x4,0x65,0x4a, 0x5,0x6e,0x75, 0x5,0x6e,0x74, + 0x5,0x6e,0x73, 0x7,0x51,0x73, 0x7,0x51,0x74, 0x7,0x51,0x75, + 0x4,0x68,0x2f, 0x5,0x72,0x36, 0x7,0x56,0x57, 0x4,0x68,0x2e, + 0x5,0x72,0x35, 0x5,0x72,0x37, 0x7,0x56,0x53, 0x7,0x56,0x54, + 0x5,0x72,0x38, 0x7,0x56,0x55, 0xf,0x69,0x23, 0x7,0x56,0x56, + 0x7,0x56,0x52, 0x4,0x69,0x6d, 0x7,0x5a,0x42, 0x4,0x69,0x70, + 0x7,0x5a,0x43, 0x4,0x69,0x6f, 0x7,0x5a,0x44, 0x7,0x5d,0x65, + 0x7,0x5d,0x66, 0x5,0x76,0x73, 0x4,0x6b,0x36, 0x5,0x76,0x75, + 0x4,0x6b,0x37, 0x7,0x5d,0x62, 0x5,0x76,0x74, 0x7,0x5d,0x67, + 0x7,0x5d,0x61, 0x7,0x5d,0x63, 0x7,0x5d,0x64, 0x4,0x6c,0x3f, + 0x5,0x78,0x50, 0x4,0x6d,0x34, 0x7,0x61,0x65, 0xf,0x6b,0x3a, + 0x7,0x63,0x27, 0x5,0x7a,0x4e, 0x7,0x63,0x28, 0x7,0x64,0x2a, + 0x7,0x64,0x74, 0x5,0x7b,0x6e, 0x4,0x42,0x23, 0x4,0x48,0x66, + 0x5,0x46,0x64, 0x5,0x4b,0x56, 0x6,0x64,0x5a, 0xf,0x4d,0x46, + 0xf,0x4d,0x47, 0xf,0x4d,0x48, 0x6,0x64,0x59, 0x7,0x2b,0x56, + 0xf,0x53,0x2e, 0xf,0x53,0x2f, 0x7,0x36,0x2e, 0x7,0x36,0x2d, + 0xf,0x59,0x2d, 0xf,0x59,0x2e, 0x4,0x5a,0x36, 0x5,0x60,0x40, + 0xf,0x5d,0x6b, 0xf,0x5d,0x6c, 0x7,0x45,0x40, 0xf,0x61,0x61, + 0xf,0x61,0x62, 0x7,0x4c,0x3f, 0xf,0x64,0x5f, 0x5,0x6e,0x76, + 0xf,0x67,0x22, 0xf,0x67,0x23, 0xf,0x67,0x24, 0xf,0x67,0x25, + 0x4,0x68,0x31, 0x7,0x56,0x58, 0x7,0x5a,0x45, 0x7,0x5d,0x68, + 0x7,0x5d,0x69, 0x7,0x5d,0x6a, 0x7,0x60,0x37, 0xf,0x6b,0x73, + 0x7,0x61,0x66, 0x7,0x61,0x67, 0x7,0x63,0x29, 0x7,0x64,0x2b, + 0x4,0x6e,0x28, 0x7,0x65,0x7c, 0x6,0x50,0x49, 0x6,0x50,0x4a, + 0x6,0x5a,0x4d, 0x6,0x5a,0x4c, 0xf,0x46,0x3a, 0xf,0x40,0x69, + 0x4,0x48,0x68, 0x5,0x4b,0x58, 0x6,0x64,0x60, 0x6,0x64,0x5f, + 0x6,0x64,0x5d, 0x6,0x64,0x61, 0x6,0x64,0x5b, 0x6,0x64,0x5c, + 0x5,0x4b,0x57, 0x5,0x4b,0x5a, 0x5,0x52,0x7e, 0x7,0x2b,0x57, + 0x7,0x2b,0x5a, 0x4,0x4e,0x7e, 0x7,0x2b,0x58, 0x5,0x53,0x24, + 0x4,0x4f,0x22, 0x7,0x2b,0x5b, 0x5,0x53,0x23, 0x4,0x4e,0x7c, + 0x4,0x4e,0x7d, 0x5,0x52,0x7c, 0x4,0x4e,0x7a, 0x5,0x52,0x7d, + 0x5,0x53,0x22, 0x5,0x53,0x21, 0x7,0x2b,0x5c, 0x7,0x2b,0x59, + 0xf,0x53,0x30, 0xf,0x53,0x31, 0xf,0x53,0x32, 0xf,0x53,0x33, + 0x7,0x36,0x2f, 0x4,0x55,0x37, 0x7,0x36,0x31, 0x5,0x5a,0x3a, + 0x7,0x36,0x30, 0x4,0x55,0x39, 0x4,0x55,0x34, 0x4,0x55,0x3b, + 0x5,0x5a,0x37, 0x5,0x5a,0x39, 0x4,0x55,0x3a, 0x4,0x55,0x38, + 0x7,0x36,0x33, 0x5,0x5a,0x38, 0xf,0x59,0x2f, 0xf,0x59,0x30, + 0xf,0x59,0x31, 0xf,0x59,0x33, 0x7,0x36,0x32, 0x4,0x5a,0x3a, + 0x4,0x5a,0x3c, 0x7,0x3e,0x3a, 0x5,0x60,0x41, 0x5,0x60,0x44, + 0x5,0x60,0x42, 0x7,0x3e,0x38, 0x5,0x60,0x45, 0x5,0x60,0x46, + 0x5,0x60,0x43, 0x7,0x3e,0x35, 0x4,0x5a,0x39, 0x7,0x3e,0x36, + 0xf,0x5d,0x6d, 0xf,0x5d,0x6e, 0xf,0x5d,0x6f, 0x7,0x3e,0x37, + 0x7,0x3e,0x39, 0x7,0x3e,0x3b, 0x7,0x45,0x42, 0x5,0x66,0x5e, + 0x4,0x5e,0x71, 0x5,0x66,0x5c, 0x5,0x66,0x60, 0x5,0x66,0x5f, + 0x7,0x45,0x44, 0x5,0x66,0x61, 0x7,0x4c,0x40, 0x7,0x45,0x43, + 0x4,0x5e,0x72, 0x5,0x66,0x5a, 0x4,0x5e,0x78, 0x5,0x66,0x5b, + 0xf,0x61,0x63, 0xf,0x61,0x65, 0x5,0x66,0x5d, 0x7,0x45,0x41, + 0xf,0x61,0x64, 0x4,0x62,0x4d, 0x7,0x4c,0x43, 0x7,0x4c,0x47, + 0x5,0x6a,0x7e, 0x5,0x6b,0x21, 0x5,0x6b,0x23, 0x4,0x62,0x50, + 0x7,0x4c,0x48, 0x7,0x4c,0x46, 0x7,0x4c,0x41, 0x5,0x6b,0x24, + 0x5,0x6b,0x22, 0x7,0x4c,0x45, 0x7,0x4c,0x42, 0x4,0x62,0x4b, + 0x7,0x4c,0x44, 0xf,0x64,0x60, 0xf,0x64,0x61, 0xf,0x64,0x63, + 0x5,0x6e,0x7c, 0x7,0x51,0x76, 0x5,0x6e,0x77, 0x5,0x6e,0x7b, + 0x5,0x6e,0x7a, 0x5,0x6e,0x79, 0x4,0x65,0x50, 0x4,0x65,0x4c, + 0x5,0x6e,0x7e, 0x5,0x6e,0x78, 0x4,0x65,0x4b, 0x7,0x51,0x77, + 0x7,0x51,0x78, 0x7,0x51,0x7b, 0x7,0x51,0x7c, 0xf,0x67,0x26, + 0xf,0x67,0x27, 0xf,0x67,0x28, 0x5,0x6e,0x7d, 0x5,0x72,0x3b, + 0x5,0x72,0x3e, 0x5,0x72,0x3a, 0x7,0x56,0x59, 0x4,0x68,0x32, + 0x4,0x68,0x34, 0x5,0x72,0x39, 0x4,0x68,0x33, 0x5,0x72,0x3d, + 0x7,0x56,0x5a, 0x5,0x72,0x3c, 0x7,0x56,0x5e, 0xf,0x69,0x24, + 0x7,0x56,0x5b, 0x7,0x56,0x5c, 0x5,0x75,0x21, 0x5,0x74,0x7c, + 0x7,0x5a,0x46, 0x5,0x75,0x22, 0x5,0x74,0x7e, 0x5,0x74,0x7b, + 0x5,0x75,0x25, 0x5,0x75,0x24, 0x5,0x75,0x23, 0x5,0x74,0x7d, + 0x5,0x75,0x26, 0x7,0x56,0x5d, 0x4,0x69,0x73, 0x7,0x5a,0x47, + 0x7,0x5a,0x48, 0xf,0x6a,0x3b, 0xf,0x6a,0x3c, 0x5,0x76,0x77, + 0x4,0x6b,0x38, 0x4,0x6b,0x39, 0x5,0x76,0x76, 0x7,0x5d,0x6c, + 0x7,0x5d,0x6d, 0x7,0x5d,0x6b, 0xf,0x6b,0x3b, 0x4,0x6c,0x40, + 0x7,0x60,0x38, 0x5,0x78,0x51, 0x4,0x6c,0x44, 0x4,0x6c,0x42, + 0x5,0x79,0x65, 0x7,0x61,0x68, 0x5,0x79,0x64, 0x4,0x6d,0x36, + 0xf,0x6c,0x42, 0xf,0x6c,0x43, 0x7,0x61,0x69, 0x5,0x7a,0x4f, + 0x7,0x63,0x2a, 0x7,0x63,0x2b, 0x7,0x64,0x2c, 0x4,0x6e,0x29, + 0x5,0x7b,0x26, 0xf,0x6c,0x72, 0x7,0x64,0x77, 0x7,0x64,0x76, + 0x5,0x7b,0x4e, 0x4,0x6e,0x54, 0x6,0x23,0x3d, 0x6,0x23,0x3c, + 0x5,0x44,0x4b, 0x5,0x4b,0x5b, 0x5,0x4b,0x5c, 0x6,0x64,0x62, + 0x7,0x2b,0x5d, 0x7,0x36,0x34, 0x7,0x3e,0x3c, 0x7,0x45,0x45, + 0x4,0x5e,0x79, 0x7,0x51,0x7e, 0x7,0x56,0x5f, 0x5,0x72,0x40, + 0x7,0x5a,0x49, 0x7,0x60,0x3a, 0x7,0x60,0x39, 0x5,0x78,0x53, + 0x5,0x7b,0x4f, 0x7,0x2b,0x5e, 0x4,0x4f,0x23, 0x4,0x55,0x3c, + 0x7,0x45,0x46, 0x7,0x52,0x21, 0x7,0x56,0x61, 0x7,0x56,0x60, + 0x7,0x5a,0x4a, 0x7,0x5d,0x6e, 0xf,0x6c,0x73, 0x5,0x7b,0x50, + 0x4,0x42,0x24, 0x6,0x5a,0x4e, 0x6,0x64,0x64, 0x6,0x64,0x63, + 0x7,0x2b,0x5f, 0x7,0x36,0x38, 0x4,0x55,0x3e, 0x5,0x5a,0x3b, + 0x7,0x36,0x36, 0x7,0x36,0x35, 0x4,0x55,0x3d, 0x7,0x36,0x37, + 0x5,0x60,0x47, 0x7,0x3e,0x3d, 0x4,0x5e,0x7a, 0x7,0x45,0x48, + 0x7,0x45,0x49, 0x7,0x45,0x47, 0x7,0x4c,0x49, 0x5,0x6b,0x25, + 0x7,0x4c,0x4a, 0x4,0x65,0x51, 0x7,0x52,0x24, 0x7,0x52,0x23, + 0x7,0x52,0x22, 0x7,0x52,0x25, 0x7,0x56,0x62, 0x4,0x68,0x35, + 0x7,0x56,0x64, 0x5,0x72,0x42, 0x7,0x56,0x63, 0x7,0x56,0x65, + 0x7,0x56,0x66, 0x5,0x75,0x27, 0x7,0x5a,0x4c, 0x7,0x5d,0x71, + 0x7,0x5d,0x72, 0x5,0x76,0x78, 0x4,0x69,0x75, 0x4,0x6b,0x3a, + 0x7,0x5d,0x70, 0x5,0x76,0x79, 0x7,0x5d,0x6f, 0x7,0x5d,0x73, + 0x4,0x6c,0x46, 0x4,0x6c,0x45, 0x7,0x5d,0x74, 0x7,0x60,0x3b, + 0x7,0x61,0x6b, 0x7,0x61,0x6c, 0x5,0x7a,0x50, 0x7,0x63,0x2c, + 0x7,0x63,0x2d, 0x7,0x63,0x2e, 0x4,0x6e,0x2a, 0x7,0x64,0x2d, + 0x7,0x64,0x79, 0x7,0x64,0x78, 0x7,0x64,0x7a, 0x7,0x65,0x4f, + 0x5,0x7c,0x24, 0x4,0x6e,0x51, 0x5,0x7c,0x2d, 0x7,0x65,0x7d, + 0x7,0x66,0x4a, 0x7,0x66,0x4b, 0x6,0x50,0x4b, 0x5,0x3d,0x53, + 0x6,0x5a,0x52, 0x5,0x44,0x4e, 0x6,0x5a,0x51, 0x4,0x42,0x26, + 0x5,0x44,0x4c, 0x6,0x5a,0x50, 0x5,0x44,0x4d, 0x4,0x42,0x25, + 0x6,0x5a,0x4f, 0xf,0x39,0x30, 0xf,0x39,0x2f, 0x6,0x5a,0x53, + 0x5,0x4b,0x5f, 0x5,0x4b,0x60, 0x5,0x4b,0x61, 0x5,0x4b,0x5e, + 0x5,0x4b,0x5d, 0x5,0x4b,0x62, 0x6,0x64,0x68, 0x6,0x64,0x65, + 0x6,0x64,0x69, 0xf,0x4d,0x49, 0xf,0x4d,0x4a, 0xf,0x4d,0x4b, + 0x6,0x64,0x6b, 0x6,0x64,0x66, 0x6,0x64,0x6e, 0x6,0x64,0x6c, + 0x6,0x64,0x6d, 0x6,0x64,0x6a, 0x6,0x64,0x67, 0x4,0x4f,0x27, + 0x5,0x53,0x29, 0x7,0x2b,0x61, 0x7,0x2b,0x60, 0x5,0x53,0x28, + 0x5,0x53,0x2b, 0x5,0x5a,0x41, 0x5,0x53,0x2a, 0x4,0x4f,0x26, + 0x7,0x2b,0x63, 0x5,0x53,0x25, 0xf,0x53,0x34, 0xf,0x53,0x35, + 0xf,0x53,0x36, 0x5,0x53,0x27, 0x7,0x2b,0x62, 0x5,0x53,0x26, + 0x5,0x5a,0x3c, 0x7,0x36,0x3a, 0x5,0x5a,0x45, 0x5,0x5a,0x43, + 0x7,0x36,0x39, 0x4,0x55,0x40, 0x5,0x5a,0x44, 0x7,0x36,0x3b, + 0xf,0x59,0x34, 0x5,0x5a,0x3e, 0x5,0x5a,0x3d, 0x5,0x5a,0x3f, + 0x5,0x5a,0x42, 0x7,0x36,0x3c, 0x5,0x5a,0x40, 0x4,0x5a,0x3d, + 0x5,0x60,0x49, 0x5,0x60,0x4c, 0x5,0x60,0x50, 0x4,0x5a,0x3e, + 0x7,0x3e,0x3e, 0x5,0x60,0x48, 0x5,0x60,0x4a, 0x5,0x60,0x4f, + 0x5,0x60,0x4d, 0x7,0x3e,0x40, 0x7,0x3e,0x41, 0x7,0x3e,0x43, + 0xf,0x5d,0x70, 0xf,0x5d,0x71, 0xf,0x5d,0x72, 0x5,0x60,0x4e, + 0x7,0x3e,0x3f, 0x7,0x3e,0x42, 0x5,0x60,0x4b, 0x5,0x66,0x63, + 0x7,0x45,0x4b, 0x4,0x5e,0x7b, 0x5,0x66,0x69, 0x7,0x45,0x4e, + 0x5,0x66,0x67, 0x5,0x66,0x65, 0x7,0x45,0x4f, 0x7,0x45,0x4c, + 0xf,0x61,0x67, 0x7,0x45,0x4a, 0x7,0x45,0x51, 0x5,0x66,0x62, + 0x7,0x45,0x4d, 0x7,0x45,0x50, 0x5,0x66,0x66, 0x5,0x6b,0x26, + 0x5,0x6b,0x29, 0x7,0x4c,0x4b, 0x5,0x6b,0x27, 0x7,0x4c,0x4c, + 0x7,0x4c,0x4d, 0xf,0x64,0x64, 0xf,0x64,0x65, 0xf,0x64,0x66, + 0xf,0x64,0x67, 0x5,0x66,0x64, 0x5,0x6b,0x28, 0x7,0x52,0x2b, + 0x4,0x65,0x52, 0x7,0x52,0x2a, 0x5,0x6f,0x21, 0x7,0x52,0x29, + 0x7,0x52,0x28, 0x5,0x6f,0x22, 0x7,0x52,0x26, 0xf,0x67,0x29, + 0x5,0x72,0x44, 0x5,0x72,0x46, 0x5,0x72,0x48, 0x4,0x68,0x37, + 0x7,0x56,0x67, 0x7,0x56,0x68, 0xf,0x69,0x25, 0x5,0x72,0x45, + 0x5,0x72,0x43, 0x7,0x56,0x69, 0x5,0x72,0x47, 0x5,0x75,0x2a, + 0x4,0x62,0x51, 0x7,0x5a,0x50, 0x4,0x69,0x78, 0x5,0x75,0x28, + 0x7,0x5a,0x4e, 0x4,0x69,0x79, 0x5,0x75,0x2b, 0xf,0x6a,0x3d, + 0x5,0x75,0x2c, 0x5,0x75,0x29, 0x4,0x69,0x7a, 0xf,0x67,0x2a, + 0x7,0x5a,0x4d, 0x5,0x76,0x7b, 0x5,0x76,0x7a, 0xf,0x69,0x26, + 0x5,0x78,0x54, 0x5,0x78,0x55, 0x4,0x6c,0x47, 0x7,0x60,0x3f, + 0x7,0x60,0x3e, 0x7,0x60,0x40, 0x7,0x60,0x3d, 0x5,0x79,0x67, + 0x5,0x79,0x66, 0xf,0x6c,0x44, 0x7,0x63,0x2f, 0x4,0x6e,0x2b, + 0x7,0x64,0x2e, 0x7,0x64,0x2f, 0x4,0x6e,0x41, 0x5,0x7b,0x51, + 0x5,0x7b,0x6f, 0x5,0x7c,0x25, 0x5,0x7c,0x40, 0x4,0x30,0x43, + 0x4,0x42,0x2a, 0x4,0x42,0x27, 0x6,0x5a,0x55, 0x4,0x42,0x28, + 0x6,0x5a,0x56, 0x5,0x44,0x4f, 0xf,0x46,0x3b, 0x6,0x64,0x6f, + 0x5,0x4b,0x65, 0x4,0x48,0x6c, 0x5,0x4b,0x63, 0xf,0x4d,0x4c, + 0xf,0x4d,0x4d, 0x5,0x4b,0x66, 0x4,0x4f,0x2f, 0x4,0x4f,0x33, + 0x4,0x4f,0x31, 0x4,0x4f,0x2d, 0x7,0x2b,0x68, 0x5,0x53,0x31, + 0x5,0x53,0x30, 0x7,0x2b,0x65, 0x7,0x2b,0x64, 0x5,0x53,0x2e, + 0x4,0x4f,0x38, 0x5,0x53,0x33, 0x5,0x53,0x2c, 0x5,0x53,0x2d, + 0x7,0x2b,0x6c, 0x7,0x2b,0x66, 0x4,0x4f,0x36, 0x5,0x53,0x32, + 0xf,0x53,0x37, 0xf,0x53,0x3a, 0xf,0x53,0x3d, 0x7,0x2b,0x6b, + 0x7,0x2b,0x67, 0x7,0x2b,0x69, 0x4,0x4f,0x2e, 0xf,0x53,0x39, + 0x5,0x53,0x2f, 0x5,0x5a,0x48, 0x5,0x5a,0x46, 0x7,0x36,0x3d, + 0x5,0x5a,0x49, 0x4,0x55,0x46, 0x4,0x5a,0x46, 0x5,0x5a,0x4e, + 0x5,0x5a,0x4d, 0x4,0x55,0x49, 0x7,0x36,0x43, 0x7,0x36,0x3e, + 0x7,0x36,0x41, 0x7,0x36,0x40, 0x5,0x5a,0x4c, 0x7,0x36,0x44, + 0xf,0x59,0x36, 0xf,0x59,0x37, 0xf,0x59,0x39, 0xf,0x59,0x3a, + 0x5,0x5a,0x4b, 0x7,0x36,0x42, 0xf,0x59,0x35, 0x5,0x5a,0x47, + 0x7,0x36,0x3f, 0x5,0x60,0x56, 0x4,0x5a,0x48, 0x5,0x60,0x57, + 0x5,0x60,0x54, 0x5,0x60,0x52, 0x4,0x5a,0x47, 0x7,0x3e,0x4b, + 0x5,0x60,0x55, 0x7,0x3e,0x46, 0x7,0x3e,0x4d, 0x7,0x3e,0x45, + 0x4,0x5a,0x4b, 0x7,0x3e,0x4c, 0x5,0x60,0x5a, 0x5,0x60,0x58, + 0x7,0x3e,0x44, 0x4,0x5a,0x4a, 0xf,0x46,0x3c, 0xf,0x5d,0x73, + 0xf,0x5d,0x74, 0xf,0x5d,0x75, 0xf,0x5d,0x77, 0xf,0x5d,0x79, + 0x7,0x3e,0x48, 0x5,0x60,0x5b, 0x5,0x60,0x53, 0x7,0x3e,0x4a, + 0x5,0x60,0x51, 0x5,0x60,0x59, 0x5,0x66,0x77, 0x5,0x66,0x74, + 0x5,0x66,0x70, 0x5,0x66,0x6b, 0x7,0x45,0x53, 0x4,0x5f,0x28, + 0x5,0x66,0x6d, 0x7,0x45,0x52, 0x5,0x66,0x6a, 0x5,0x66,0x71, + 0x5,0x66,0x75, 0x5,0x66,0x72, 0x5,0x66,0x6f, 0x5,0x66,0x6c, + 0x7,0x45,0x54, 0xf,0x61,0x68, 0xf,0x61,0x69, 0xf,0x61,0x6a, + 0xf,0x61,0x6b, 0xf,0x61,0x6c, 0xf,0x61,0x6d, 0xf,0x61,0x6e, + 0xf,0x61,0x6f, 0xf,0x61,0x71, 0xf,0x61,0x73, 0x7,0x45,0x55, + 0x7,0x3e,0x47, 0x5,0x66,0x76, 0x5,0x66,0x73, 0x7,0x4c,0x5b, + 0x7,0x4c,0x58, 0x4,0x62,0x5e, 0x7,0x4c,0x52, 0x5,0x6b,0x2d, + 0x4,0x62,0x52, 0x5,0x6b,0x2f, 0x7,0x4c,0x4f, 0x7,0x4c,0x51, + 0x4,0x62,0x5f, 0x5,0x66,0x78, 0x4,0x62,0x63, 0x5,0x6b,0x32, + 0x4,0x62,0x5b, 0x7,0x4c,0x4e, 0x4,0x62,0x5a, 0x4,0x62,0x65, + 0x7,0x4c,0x5a, 0x7,0x4c,0x53, 0x7,0x4c,0x59, 0x4,0x62,0x58, + 0x7,0x4c,0x55, 0x5,0x6b,0x36, 0x5,0x6b,0x2e, 0x7,0x4c,0x50, + 0x5,0x6b,0x34, 0xf,0x64,0x6e, 0xf,0x64,0x68, 0xf,0x64,0x6a, + 0xf,0x64,0x6c, 0xf,0x64,0x6f, 0xf,0x64,0x70, 0xf,0x64,0x71, + 0x5,0x6b,0x30, 0x7,0x4c,0x54, 0x7,0x4c,0x57, 0x4,0x62,0x53, + 0x5,0x6b,0x37, 0x5,0x6b,0x2a, 0xf,0x64,0x69, 0x5,0x6b,0x2c, + 0xf,0x61,0x70, 0x7,0x4c,0x56, 0x5,0x6f,0x27, 0x7,0x52,0x2e, + 0x5,0x6f,0x26, 0x5,0x6b,0x38, 0x5,0x6f,0x29, 0x7,0x52,0x2c, + 0x4,0x65,0x58, 0x5,0x6f,0x2b, 0x7,0x52,0x2f, 0x7,0x52,0x2d, + 0x5,0x6f,0x28, 0x4,0x65,0x56, 0x5,0x6f,0x24, 0x7,0x52,0x32, + 0x4,0x65,0x5e, 0x5,0x6f,0x25, 0x5,0x6f,0x23, 0x4,0x65,0x60, + 0x7,0x52,0x30, 0x5,0x6f,0x2c, 0x7,0x52,0x34, 0xf,0x67,0x2b, + 0xf,0x67,0x2c, 0xf,0x67,0x2d, 0xf,0x67,0x2f, 0xf,0x67,0x30, + 0xf,0x67,0x31, 0xf,0x67,0x32, 0xf,0x67,0x2e, 0x5,0x6f,0x2a, + 0xf,0x67,0x34, 0x5,0x72,0x4a, 0x4,0x68,0x3f, 0x5,0x72,0x4f, + 0x5,0x72,0x53, 0x5,0x77,0x23, 0x5,0x72,0x49, 0x5,0x72,0x52, + 0x4,0x68,0x38, 0x7,0x56,0x71, 0x5,0x72,0x4c, 0x7,0x56,0x72, + 0x5,0x72,0x57, 0x7,0x56,0x6d, 0x5,0x72,0x54, 0x5,0x72,0x4d, + 0x7,0x56,0x73, 0x7,0x56,0x75, 0x7,0x56,0x6a, 0x7,0x56,0x74, + 0x5,0x72,0x56, 0x7,0x56,0x6e, 0x7,0x56,0x6f, 0xf,0x69,0x28, + 0xf,0x69,0x29, 0xf,0x69,0x2b, 0xf,0x69,0x2c, 0xf,0x69,0x2d, + 0xf,0x69,0x2e, 0xf,0x69,0x2f, 0xf,0x69,0x30, 0xf,0x69,0x31, + 0xf,0x69,0x32, 0x7,0x56,0x6b, 0x7,0x56,0x6c, 0x5,0x72,0x55, + 0x7,0x56,0x70, 0x5,0x72,0x50, 0x7,0x5a,0x54, 0x7,0x5a,0x52, + 0x5,0x75,0x32, 0x4,0x6a,0x22, 0x5,0x75,0x2e, 0x5,0x75,0x2f, + 0x7,0x5a,0x5a, 0x7,0x5a,0x57, 0x5,0x75,0x30, 0x7,0x5a,0x5c, + 0x7,0x5a,0x59, 0x5,0x75,0x34, 0x7,0x5a,0x56, 0x7,0x5a,0x5b, + 0x7,0x5a,0x53, 0x7,0x5a,0x55, 0x7,0x5a,0x51, 0x7,0x5a,0x5e, + 0xf,0x6a,0x41, 0xf,0x6a,0x42, 0xf,0x6a,0x43, 0xf,0x6a,0x40, + 0x7,0x5a,0x5f, 0x5,0x75,0x33, 0x7,0x5a,0x58, 0x7,0x5a,0x5d, + 0x5,0x75,0x31, 0x5,0x76,0x7e, 0x7,0x5d,0x78, 0x5,0x77,0x22, + 0x4,0x6b,0x3e, 0x4,0x6b,0x3f, 0x5,0x76,0x7c, 0x7,0x5d,0x77, + 0x4,0x65,0x5c, 0x7,0x60,0x46, 0x7,0x5d,0x75, 0x7,0x5e,0x22, + 0x7,0x5d,0x76, 0x5,0x76,0x7d, 0x7,0x5e,0x21, 0x7,0x5d,0x7c, + 0x5,0x77,0x21, 0x7,0x5d,0x79, 0xf,0x6b,0x3d, 0xf,0x6b,0x3f, + 0x7,0x5d,0x7a, 0x7,0x5d,0x7d, 0x7,0x5d,0x7e, 0x7,0x5d,0x7b, + 0xf,0x6b,0x3c, 0x7,0x60,0x43, 0x5,0x78,0x5c, 0x5,0x78,0x60, + 0x5,0x78,0x5a, 0x7,0x60,0x41, 0x4,0x6c,0x4f, 0x4,0x6c,0x4c, + 0x5,0x78,0x59, 0x5,0x78,0x61, 0x4,0x6c,0x4b, 0x5,0x78,0x5f, + 0x5,0x78,0x5e, 0x5,0x78,0x57, 0x7,0x60,0x4b, 0x7,0x60,0x47, + 0x5,0x78,0x58, 0xf,0x6b,0x75, 0xf,0x6b,0x78, 0x7,0x60,0x48, + 0x7,0x60,0x42, 0x7,0x60,0x44, 0x7,0x60,0x45, 0x5,0x78,0x5d, + 0x7,0x60,0x4a, 0x7,0x60,0x49, 0x7,0x61,0x73, 0x5,0x79,0x68, + 0x4,0x6d,0x38, 0x5,0x79,0x69, 0x7,0x61,0x6e, 0x7,0x60,0x7a, + 0x7,0x61,0x71, 0x7,0x61,0x6f, 0x5,0x79,0x6b, 0x7,0x61,0x72, + 0x7,0x61,0x70, 0xf,0x6c,0x45, 0xf,0x6c,0x46, 0x5,0x79,0x6a, + 0x7,0x61,0x6d, 0x7,0x63,0x35, 0x7,0x63,0x30, 0x7,0x63,0x32, + 0x7,0x63,0x33, 0x7,0x63,0x34, 0x5,0x7a,0x51, 0x5,0x7a,0x52, + 0xf,0x6c,0x5a, 0xf,0x6c,0x5b, 0xf,0x6c,0x5c, 0xf,0x6c,0x5d, + 0x7,0x63,0x31, 0x5,0x7b,0x28, 0x5,0x7b,0x27, 0x7,0x64,0x30, + 0x5,0x7b,0x29, 0xf,0x6c,0x74, 0x7,0x64,0x31, 0x5,0x7b,0x2a, + 0x7,0x64,0x32, 0x7,0x64,0x7e, 0x5,0x7b,0x53, 0x5,0x7b,0x52, + 0x5,0x7b,0x55, 0x7,0x64,0x7c, 0x7,0x65,0x21, 0x7,0x64,0x7b, + 0x5,0x7b,0x54, 0x7,0x64,0x7d, 0xf,0x6c,0x75, 0x5,0x7b,0x73, + 0x5,0x7b,0x72, 0x5,0x7b,0x71, 0x5,0x7b,0x70, 0x7,0x65,0x50, + 0x5,0x7c,0x26, 0xf,0x6d,0x2b, 0xf,0x6d,0x2c, 0x5,0x7c,0x27, + 0x7,0x65,0x6b, 0x5,0x7c,0x2e, 0x5,0x7c,0x37, 0x7,0x66,0x2f, + 0x5,0x7c,0x36, 0xf,0x53,0x3c, 0xf,0x5d,0x78, 0xf,0x6b,0x3e, + 0x6,0x50,0x4c, 0xf,0x40,0x33, 0x6,0x50,0x4d, 0x4,0x42,0x2b, + 0x6,0x5a,0x57, 0x5,0x44,0x51, 0x5,0x44,0x52, 0x6,0x5a,0x5c, + 0x6,0x5a,0x58, 0x6,0x5a,0x59, 0x5,0x44,0x50, 0x6,0x5a,0x5a, + 0x6,0x5a,0x5b, 0x6,0x64,0x70, 0x5,0x4b,0x6a, 0x6,0x64,0x71, + 0x5,0x4b,0x69, 0x4,0x48,0x6e, 0x4,0x48,0x6f, 0x6,0x64,0x72, + 0x6,0x64,0x73, 0x6,0x64,0x74, 0x4,0x48,0x70, 0x5,0x4b,0x68, + 0xf,0x4d,0x4f, 0xf,0x4d,0x50, 0xf,0x4d,0x51, 0x5,0x4b,0x67, + 0x4,0x4f,0x45, 0x7,0x2b,0x72, 0x7,0x2b,0x7d, 0x7,0x2b,0x6f, + 0x7,0x2b,0x73, 0x7,0x2b,0x79, 0x5,0x53,0x37, 0x5,0x53,0x3b, + 0x5,0x53,0x3d, 0x5,0x53,0x39, 0x7,0x2b,0x76, 0x7,0x2b,0x7c, + 0x5,0x53,0x3f, 0x5,0x53,0x34, 0x4,0x4f,0x3d, 0x5,0x53,0x41, + 0x5,0x53,0x3e, 0x5,0x53,0x35, 0x4,0x4f,0x3e, 0x5,0x53,0x42, + 0x7,0x2b,0x7a, 0x4,0x4f,0x3c, 0x7,0x2b,0x75, 0x4,0x4f,0x43, + 0x4,0x4f,0x3a, 0x5,0x53,0x43, 0x4,0x4f,0x46, 0x7,0x2b,0x70, + 0x7,0x2b,0x7b, 0xf,0x53,0x40, 0x7,0x2b,0x6e, 0x7,0x2b,0x77, + 0x7,0x2b,0x78, 0x5,0x53,0x36, 0x5,0x53,0x3a, 0x5,0x53,0x40, + 0x7,0x2b,0x71, 0x7,0x2b,0x74, 0x5,0x53,0x3c, 0x7,0x36,0x4b, + 0x5,0x5a,0x54, 0x5,0x5a,0x56, 0x5,0x5a,0x51, 0x5,0x5a,0x4f, + 0x4,0x55,0x4c, 0x5,0x5a,0x53, 0x5,0x5a,0x59, 0x5,0x5a,0x52, + 0x7,0x36,0x57, 0x7,0x36,0x52, 0x5,0x5a,0x57, 0x4,0x55,0x56, + 0x7,0x36,0x54, 0x5,0x5a,0x58, 0x7,0x36,0x50, 0x5,0x5a,0x55, + 0x7,0x36,0x53, 0x7,0x36,0x4c, 0x7,0x36,0x45, 0x7,0x36,0x4e, + 0xf,0x59,0x3d, 0xf,0x59,0x3e, 0xf,0x59,0x3f, 0xf,0x59,0x40, + 0x7,0x36,0x4d, 0x7,0x36,0x4f, 0x7,0x36,0x58, 0x7,0x36,0x56, + 0x7,0x36,0x47, 0x7,0x36,0x48, 0x7,0x36,0x55, 0x4,0x55,0x53, + 0x4,0x55,0x51, 0x6,0x50,0x4e, 0x7,0x36,0x49, 0x5,0x5a,0x50, + 0x7,0x36,0x46, 0xf,0x56,0x33, 0x7,0x3e,0x51, 0x4,0x5a,0x4c, + 0x5,0x60,0x5e, 0x5,0x60,0x69, 0x7,0x3e,0x54, 0x4,0x5a,0x53, + 0x5,0x60,0x67, 0x7,0x3e,0x55, 0x5,0x60,0x5d, 0x5,0x60,0x61, + 0x7,0x3e,0x4e, 0x5,0x60,0x64, 0x5,0x60,0x6b, 0x5,0x60,0x60, + 0x5,0x60,0x62, 0x4,0x5a,0x54, 0x7,0x3e,0x57, 0x5,0x60,0x5c, + 0x5,0x60,0x63, 0x4,0x5a,0x58, 0x7,0x3e,0x4f, 0x4,0x5a,0x5b, + 0x5,0x60,0x6c, 0x7,0x3e,0x58, 0x7,0x3e,0x53, 0x5,0x60,0x68, + 0x5,0x60,0x6a, 0xf,0x5d,0x7a, 0xf,0x5d,0x7b, 0xf,0x5d,0x7c, + 0xf,0x5d,0x7d, 0xf,0x5e,0x21, 0xf,0x5e,0x22, 0xf,0x5e,0x23, + 0xf,0x5e,0x25, 0x7,0x3e,0x50, 0x5,0x60,0x5f, 0x4,0x5a,0x5a, + 0x7,0x3e,0x56, 0x5,0x60,0x65, 0x5,0x60,0x66, 0x7,0x3e,0x52, + 0x4,0x5a,0x57, 0x7,0x45,0x5b, 0x5,0x60,0x6d, 0x7,0x45,0x5f, + 0x5,0x66,0x7d, 0x5,0x67,0x25, 0x5,0x67,0x27, 0x4,0x5f,0x2e, + 0x5,0x67,0x2a, 0x5,0x66,0x7a, 0x5,0x67,0x21, 0x5,0x66,0x7e, + 0x5,0x66,0x7b, 0x7,0x45,0x5d, 0x7,0x45,0x58, 0x4,0x5f,0x2d, + 0x7,0x45,0x5e, 0x5,0x66,0x7c, 0x5,0x67,0x2b, 0x4,0x5f,0x30, + 0x7,0x45,0x67, 0x5,0x67,0x22, 0x7,0x45,0x64, 0x7,0x45,0x5c, + 0x5,0x67,0x28, 0x7,0x45,0x61, 0x7,0x45,0x62, 0x7,0x45,0x66, + 0x5,0x67,0x24, 0x7,0x45,0x59, 0x5,0x67,0x23, 0x7,0x45,0x68, + 0x7,0x45,0x56, 0x7,0x45,0x60, 0xf,0x61,0x74, 0xf,0x61,0x75, + 0x7,0x45,0x57, 0x5,0x67,0x29, 0x7,0x45,0x63, 0x5,0x6b,0x39, + 0x7,0x4c,0x5d, 0x5,0x6b,0x3a, 0x7,0x4c,0x62, 0x5,0x6b,0x3e, + 0x5,0x6b,0x4a, 0x5,0x6b,0x40, 0x7,0x4c,0x6a, 0x7,0x4c,0x64, + 0x5,0x6b,0x3b, 0x7,0x4c,0x68, 0x7,0x4c,0x6b, 0x7,0x4c,0x63, + 0x5,0x6b,0x4c, 0x5,0x6b,0x3d, 0x5,0x6b,0x4b, 0x4,0x62,0x6b, + 0x5,0x6b,0x42, 0x5,0x6b,0x45, 0x7,0x4c,0x60, 0x7,0x4c,0x5e, + 0x5,0x6b,0x48, 0x5,0x6b,0x44, 0x7,0x4c,0x5c, 0x7,0x4c,0x66, + 0x7,0x4c,0x6c, 0x5,0x6b,0x41, 0x4,0x62,0x6d, 0x7,0x4c,0x69, + 0x5,0x6b,0x46, 0xf,0x64,0x74, 0xf,0x64,0x76, 0xf,0x64,0x77, + 0x7,0x4c,0x61, 0x5,0x6b,0x47, 0x7,0x4c,0x6f, 0x5,0x6b,0x49, + 0x7,0x45,0x69, 0x7,0x4c,0x65, 0x7,0x4c,0x67, 0x7,0x4c,0x6d, + 0x5,0x6b,0x43, 0x7,0x4c,0x6e, 0x7,0x4c,0x5f, 0x4,0x62,0x69, + 0x5,0x6f,0x38, 0x5,0x6f,0x30, 0x7,0x52,0x3a, 0x4,0x65,0x65, + 0x5,0x6f,0x3e, 0x7,0x52,0x43, 0x5,0x6f,0x32, 0x5,0x6f,0x42, + 0x4,0x62,0x70, 0x7,0x52,0x36, 0x5,0x6f,0x2f, 0x4,0x65,0x63, + 0x5,0x6f,0x31, 0x4,0x65,0x6e, 0x4,0x65,0x68, 0x5,0x6f,0x33, + 0x5,0x6f,0x2d, 0x5,0x6f,0x37, 0x5,0x6f,0x44, 0x5,0x6f,0x39, + 0x4,0x65,0x6d, 0x4,0x65,0x66, 0x5,0x6f,0x3a, 0x5,0x6f,0x3c, + 0x5,0x6f,0x40, 0x4,0x65,0x67, 0x5,0x6f,0x2e, 0x5,0x6f,0x3b, + 0x5,0x6f,0x36, 0x5,0x6f,0x3f, 0x7,0x52,0x3f, 0x7,0x52,0x3b, + 0x7,0x52,0x40, 0x7,0x52,0x35, 0x7,0x52,0x37, 0x5,0x6f,0x3d, + 0x5,0x6f,0x35, 0x5,0x6f,0x34, 0x5,0x6f,0x43, 0x7,0x52,0x38, + 0xf,0x67,0x37, 0x7,0x52,0x3e, 0x7,0x52,0x3d, 0x7,0x52,0x39, + 0x7,0x52,0x44, 0x7,0x52,0x41, 0x7,0x52,0x3c, 0xf,0x67,0x38, + 0x5,0x6f,0x41, 0x7,0x45,0x5a, 0x5,0x72,0x5e, 0x7,0x56,0x79, + 0x5,0x72,0x66, 0x7,0x56,0x7e, 0x5,0x72,0x5d, 0x5,0x72,0x60, + 0x5,0x72,0x5b, 0x5,0x72,0x65, 0x5,0x72,0x64, 0x7,0x57,0x21, + 0x7,0x56,0x7d, 0x7,0x56,0x7a, 0x5,0x72,0x68, 0x7,0x57,0x27, + 0x7,0x57,0x26, 0x7,0x57,0x24, 0x5,0x72,0x5c, 0x5,0x72,0x61, + 0x5,0x6f,0x45, 0x5,0x72,0x5a, 0x5,0x72,0x62, 0x7,0x57,0x22, + 0x7,0x56,0x7c, 0x5,0x72,0x69, 0x5,0x72,0x6a, 0xf,0x69,0x34, + 0x5,0x72,0x5f, 0x7,0x57,0x23, 0x7,0x56,0x77, 0x7,0x57,0x28, + 0x7,0x56,0x76, 0x7,0x56,0x7b, 0xf,0x69,0x33, 0x5,0x72,0x58, + 0x7,0x56,0x78, 0x5,0x72,0x59, 0xf,0x67,0x36, 0x5,0x75,0x42, + 0x5,0x75,0x3d, 0x4,0x6a,0x24, 0x4,0x6a,0x2d, 0x5,0x75,0x3c, + 0x4,0x6a,0x28, 0x5,0x75,0x43, 0x5,0x75,0x39, 0x5,0x6f,0x46, + 0x5,0x75,0x44, 0x5,0x75,0x40, 0x5,0x75,0x3f, 0x4,0x6a,0x2b, + 0x7,0x5a,0x62, 0x7,0x5a,0x6c, 0x7,0x5a,0x6a, 0x7,0x5a,0x70, + 0x4,0x6a,0x2a, 0x7,0x5a,0x6b, 0x7,0x5a,0x6e, 0x5,0x75,0x3b, + 0x4,0x6a,0x29, 0x7,0x5a,0x69, 0x5,0x75,0x37, 0x7,0x5a,0x68, + 0x5,0x75,0x38, 0x5,0x75,0x46, 0x5,0x72,0x67, 0x7,0x5a,0x71, + 0x5,0x75,0x41, 0x7,0x5a,0x6f, 0x7,0x5a,0x67, 0x7,0x57,0x25, + 0xf,0x6a,0x44, 0xf,0x6a,0x45, 0xf,0x6a,0x46, 0xf,0x6a,0x47, + 0xf,0x6a,0x48, 0x5,0x75,0x3e, 0x7,0x5a,0x66, 0x7,0x5a,0x64, + 0x7,0x5a,0x61, 0x7,0x5a,0x63, 0x5,0x75,0x3a, 0x7,0x5e,0x2b, + 0x7,0x5e,0x27, 0x7,0x5e,0x31, 0x5,0x77,0x33, 0x7,0x5e,0x2f, + 0x5,0x77,0x2e, 0x5,0x77,0x29, 0x4,0x6b,0x43, 0x7,0x5e,0x32, + 0x7,0x5e,0x36, 0x5,0x77,0x25, 0x5,0x77,0x30, 0x5,0x77,0x2a, + 0x5,0x77,0x28, 0x5,0x77,0x2f, 0x7,0x5e,0x2c, 0x5,0x77,0x27, + 0x5,0x77,0x26, 0x5,0x77,0x38, 0x5,0x77,0x2b, 0x4,0x6b,0x49, + 0x4,0x6b,0x42, 0x7,0x5e,0x35, 0x5,0x77,0x31, 0x7,0x5e,0x30, + 0x7,0x5e,0x33, 0x5,0x77,0x2d, 0x7,0x5a,0x65, 0x5,0x77,0x35, + 0x7,0x5a,0x6d, 0x7,0x5e,0x34, 0x5,0x77,0x36, 0x7,0x5e,0x2d, + 0xf,0x6b,0x40, 0x7,0x5e,0x24, 0x7,0x5e,0x26, 0x7,0x5e,0x2e, + 0x7,0x5e,0x29, 0x7,0x5e,0x28, 0x5,0x77,0x32, 0x7,0x5e,0x2a, + 0x7,0x5e,0x25, 0x4,0x6b,0x41, 0xf,0x6b,0x7a, 0x7,0x5e,0x37, + 0x7,0x60,0x4d, 0x5,0x78,0x67, 0x5,0x78,0x69, 0x5,0x78,0x6d, + 0x5,0x78,0x65, 0x5,0x77,0x37, 0x5,0x78,0x68, 0x7,0x60,0x4e, + 0x5,0x78,0x6a, 0x5,0x78,0x6b, 0x7,0x60,0x4f, 0x7,0x60,0x50, + 0x7,0x60,0x54, 0x5,0x78,0x6c, 0x7,0x60,0x53, 0x7,0x60,0x4c, + 0x7,0x60,0x51, 0x5,0x78,0x63, 0x5,0x78,0x66, 0x5,0x78,0x62, + 0xf,0x6b,0x79, 0x7,0x60,0x52, 0x4,0x6c,0x55, 0x5,0x78,0x64, + 0x4,0x6c,0x53, 0x5,0x79,0x71, 0x5,0x79,0x6d, 0x5,0x79,0x70, + 0x7,0x61,0x76, 0x4,0x6d,0x3b, 0x5,0x79,0x6e, 0x5,0x79,0x6c, + 0x4,0x6d,0x3c, 0x7,0x61,0x74, 0x5,0x79,0x6f, 0x7,0x61,0x78, + 0x7,0x61,0x75, 0x7,0x61,0x77, 0x4,0x6d,0x3e, 0x5,0x7a,0x58, + 0x7,0x63,0x39, 0x5,0x7a,0x56, 0x4,0x6d,0x6b, 0x5,0x7a,0x5a, + 0x5,0x7a,0x59, 0x5,0x7a,0x55, 0x5,0x7a,0x57, 0x4,0x6d,0x6a, + 0x7,0x63,0x38, 0x5,0x7a,0x54, 0x7,0x63,0x3b, 0x5,0x7a,0x5b, + 0x7,0x63,0x3d, 0xf,0x6c,0x5e, 0x7,0x63,0x3a, 0x7,0x63,0x36, + 0x7,0x63,0x3c, 0x5,0x7b,0x2e, 0x7,0x64,0x34, 0x7,0x64,0x36, + 0x5,0x7b,0x2f, 0x5,0x7b,0x2c, 0x5,0x7b,0x2b, 0x5,0x7b,0x31, + 0x5,0x7b,0x30, 0x5,0x7b,0x2d, 0x7,0x64,0x37, 0xf,0x6c,0x76, + 0x4,0x6e,0x2e, 0x7,0x64,0x33, 0x7,0x64,0x35, 0x5,0x7b,0x56, + 0x7,0x65,0x22, 0x7,0x65,0x53, 0x7,0x65,0x24, 0x7,0x65,0x26, + 0x7,0x65,0x23, 0x7,0x65,0x27, 0x5,0x7b,0x57, 0x7,0x65,0x25, + 0x4,0x6e,0x42, 0x5,0x7b,0x74, 0x7,0x65,0x54, 0x7,0x65,0x55, + 0x5,0x7b,0x75, 0x7,0x65,0x52, 0x7,0x65,0x56, 0x7,0x65,0x51, + 0x7,0x65,0x6d, 0x7,0x65,0x6c, 0x5,0x7c,0x29, 0x5,0x7c,0x28, + 0xf,0x6d,0x32, 0x5,0x7c,0x2f, 0x7,0x66,0x21, 0x7,0x65,0x7e, + 0x5,0x7c,0x38, 0x7,0x66,0x30, 0x5,0x7c,0x39, 0x7,0x66,0x3a, + 0x5,0x7c,0x41, 0xf,0x6d,0x37, 0x5,0x7c,0x48, 0x7,0x66,0x45, + 0x4,0x48,0x71, 0x4,0x48,0x72, 0x5,0x53,0x44, 0x7,0x2c,0x22, + 0x7,0x2c,0x21, 0x7,0x2b,0x7e, 0x5,0x5a,0x5a, 0x5,0x5a,0x5c, + 0x7,0x36,0x5a, 0x7,0x36,0x5b, 0xf,0x59,0x41, 0x7,0x36,0x59, + 0x5,0x67,0x2c, 0x7,0x3e,0x59, 0x4,0x62,0x71, 0x7,0x4c,0x70, + 0x5,0x6b,0x4d, 0x7,0x4c,0x71, 0x7,0x52,0x46, 0x5,0x6f,0x48, + 0x5,0x6f,0x49, 0x7,0x52,0x47, 0x5,0x6f,0x47, 0x7,0x52,0x49, + 0x7,0x52,0x48, 0x4,0x68,0x45, 0x7,0x57,0x2b, 0x7,0x57,0x2a, + 0x5,0x72,0x6b, 0x7,0x5a,0x73, 0x7,0x5a,0x72, 0x4,0x6b,0x4c, + 0x7,0x5e,0x38, 0x7,0x5e,0x39, 0x5,0x77,0x39, 0x7,0x60,0x55, + 0x4,0x6c,0x57, 0x5,0x79,0x72, 0x4,0x6d,0x3f, 0x7,0x63,0x3e, + 0x5,0x7b,0x32, 0x6,0x5a,0x5d, 0xf,0x46,0x3d, 0x5,0x4b,0x6c, + 0xf,0x4d,0x52, 0x7,0x2c,0x28, 0x5,0x53,0x45, 0x7,0x2c,0x27, + 0x7,0x2c,0x26, 0x7,0x2c,0x24, 0x5,0x53,0x46, 0x7,0x2c,0x25, + 0x5,0x53,0x47, 0x7,0x2c,0x29, 0x7,0x2c,0x23, 0x7,0x36,0x5d, + 0x5,0x5a,0x5d, 0xf,0x59,0x42, 0xf,0x59,0x43, 0xf,0x59,0x44, + 0x5,0x60,0x6f, 0x5,0x60,0x72, 0x5,0x60,0x70, 0x4,0x5a,0x5c, + 0x5,0x60,0x73, 0x5,0x60,0x71, 0x7,0x3e,0x5b, 0x7,0x3e,0x5a, + 0x7,0x3e,0x5e, 0x7,0x3e,0x5d, 0xf,0x5e,0x26, 0x5,0x60,0x6e, + 0x7,0x45,0x6e, 0x5,0x67,0x31, 0x5,0x67,0x2e, 0x5,0x67,0x2d, + 0x7,0x45,0x6b, 0x7,0x45,0x6d, 0x7,0x45,0x6a, 0x5,0x67,0x30, + 0x7,0x45,0x6c, 0xf,0x61,0x78, 0xf,0x61,0x79, 0xf,0x61,0x7a, + 0x5,0x67,0x2f, 0x5,0x6b,0x4f, 0x5,0x6b,0x4e, 0x5,0x6b,0x51, + 0x4,0x62,0x73, 0x7,0x4c,0x73, 0x5,0x6b,0x50, 0x7,0x4c,0x72, + 0x5,0x68,0x40, 0x7,0x52,0x4b, 0x4,0x62,0x74, 0x4,0x65,0x6f, + 0x7,0x4c,0x74, 0xf,0x67,0x39, 0x7,0x52,0x4a, 0x7,0x52,0x4c, + 0x5,0x6f,0x4a, 0x4,0x68,0x47, 0x7,0x57,0x2c, 0x7,0x57,0x2d, + 0x4,0x68,0x46, 0xf,0x69,0x35, 0x5,0x75,0x47, 0x4,0x6a,0x2e, + 0xf,0x6a,0x49, 0x5,0x77,0x3a, 0x5,0x77,0x3c, 0x5,0x77,0x3b, + 0x7,0x5e,0x3a, 0x7,0x5e,0x3b, 0x7,0x60,0x56, 0x4,0x6c,0x58, + 0x7,0x60,0x57, 0xf,0x6b,0x7b, 0x5,0x79,0x75, 0x5,0x79,0x74, + 0x5,0x78,0x6e, 0x4,0x6d,0x40, 0x4,0x6d,0x6c, 0xf,0x6c,0x47, + 0x7,0x65,0x28, 0x7,0x65,0x57, 0x5,0x7c,0x46, 0x7,0x66,0x47, + 0x6,0x5a,0x5f, 0x6,0x5a,0x5e, 0x5,0x44,0x53, 0xf,0x46,0x3f, + 0x4,0x48,0x75, 0x6,0x64,0x75, 0xf,0x4d,0x53, 0x5,0x53,0x4b, + 0x5,0x53,0x4a, 0x4,0x4f,0x4f, 0x5,0x53,0x49, 0x5,0x53,0x48, + 0x7,0x2c,0x2b, 0x7,0x2c,0x2f, 0x7,0x2c,0x2a, 0x4,0x4f,0x4e, + 0x7,0x2c,0x2c, 0x5,0x53,0x4c, 0x7,0x2c,0x2e, 0x7,0x2c,0x2d, + 0x7,0x36,0x61, 0x7,0x36,0x5f, 0x7,0x36,0x5e, 0x7,0x36,0x63, + 0x4,0x55,0x5b, 0x7,0x36,0x62, 0x6,0x47,0x53, 0xf,0x59,0x45, + 0x5,0x5a,0x5e, 0x7,0x36,0x60, 0x5,0x60,0x74, 0x5,0x60,0x75, + 0x7,0x3e,0x60, 0x7,0x3e,0x61, 0xf,0x5e,0x28, 0x7,0x3e,0x62, + 0x7,0x3e,0x5f, 0x7,0x45,0x70, 0x5,0x67,0x32, 0x7,0x45,0x72, + 0x5,0x67,0x33, 0x5,0x67,0x35, 0x7,0x45,0x73, 0x5,0x67,0x34, + 0xf,0x61,0x7b, 0x7,0x45,0x71, 0x7,0x45,0x6f, 0x4,0x62,0x7a, + 0x4,0x62,0x78, 0x7,0x4c,0x79, 0x7,0x4c,0x7b, 0x7,0x4c,0x75, + 0x5,0x6b,0x54, 0x5,0x6b,0x52, 0x7,0x4c,0x7a, 0x5,0x6b,0x55, + 0x5,0x6b,0x53, 0x7,0x4c,0x78, 0x4,0x62,0x7b, 0x7,0x4c,0x77, + 0x7,0x4c,0x76, 0x5,0x6f,0x4b, 0x7,0x52,0x53, 0x7,0x52,0x52, + 0x5,0x6f,0x4c, 0x7,0x52,0x50, 0x4,0x65,0x70, 0x7,0x52,0x4f, + 0x5,0x6f,0x4e, 0x5,0x6f,0x4d, 0x7,0x52,0x51, 0xf,0x67,0x3a, + 0x7,0x52,0x4e, 0x7,0x52,0x4d, 0x5,0x72,0x6c, 0x7,0x57,0x2f, + 0x5,0x72,0x6f, 0x7,0x57,0x30, 0x5,0x72,0x6e, 0x7,0x57,0x31, + 0x7,0x57,0x2e, 0x5,0x72,0x6d, 0x5,0x75,0x4b, 0x5,0x75,0x4c, + 0x7,0x5a,0x74, 0x5,0x75,0x49, 0x5,0x75,0x4e, 0x7,0x5a,0x7b, + 0x7,0x5a,0x76, 0x7,0x5a,0x77, 0x7,0x5a,0x7c, 0x7,0x5a,0x79, + 0x5,0x75,0x4a, 0x7,0x5a,0x75, 0x7,0x5a,0x78, 0x7,0x5a,0x7a, + 0x5,0x77,0x3f, 0x4,0x6b,0x4f, 0x5,0x77,0x3e, 0x5,0x77,0x40, + 0x5,0x77,0x3d, 0x5,0x78,0x6f, 0x5,0x78,0x71, 0x5,0x78,0x70, + 0x7,0x60,0x59, 0x7,0x5e,0x3c, 0x4,0x6c,0x59, 0x7,0x60,0x58, + 0x4,0x6d,0x6d, 0x7,0x63,0x3f, 0x7,0x64,0x39, 0x7,0x64,0x38, + 0x5,0x7b,0x58, 0x7,0x65,0x29, 0x4,0x6e,0x52, 0x5,0x7c,0x30, + 0xf,0x29,0x21, 0xf,0x46,0x3e, 0xf,0x53,0x42, 0xf,0x5e,0x27, + 0x5,0x4b,0x70, 0x5,0x4b,0x6e, 0x5,0x4b,0x6f, 0x5,0x53,0x4e, + 0x4,0x4f,0x50, 0x5,0x53,0x4d, 0x7,0x2c,0x30, 0x5,0x5a,0x61, + 0x7,0x36,0x64, 0x5,0x5a,0x5f, 0x5,0x5a,0x60, 0xf,0x59,0x46, + 0x5,0x60,0x78, 0x5,0x60,0x76, 0xf,0x5e,0x29, 0x5,0x60,0x77, + 0x5,0x67,0x36, 0x7,0x4c,0x7c, 0x5,0x6b,0x56, 0x7,0x4c,0x7d, + 0x4,0x65,0x73, 0x7,0x57,0x32, 0x5,0x72,0x70, 0x7,0x5a,0x7e, + 0x4,0x6b,0x50, 0x7,0x5b,0x56, 0x7,0x5e,0x3d, 0x4,0x6b,0x51, + 0x5,0x7c,0x31, 0xf,0x4d,0x54, 0x7,0x2c,0x32, 0x5,0x5a,0x62, + 0x5,0x5a,0x64, 0x5,0x5a,0x63, 0x5,0x60,0x7a, 0x5,0x67,0x38, + 0x5,0x60,0x79, 0x5,0x67,0x39, 0x5,0x67,0x37, 0x5,0x6b,0x57, + 0x4,0x63,0x22, 0xf,0x64,0x79, 0x4,0x65,0x75, 0x4,0x65,0x74, + 0x5,0x6f,0x50, 0x5,0x6f,0x4f, 0x4,0x65,0x77, 0x7,0x52,0x54, + 0x7,0x52,0x55, 0x7,0x52,0x56, 0xf,0x67,0x3b, 0x7,0x52,0x57, + 0x5,0x72,0x73, 0x5,0x72,0x72, 0x5,0x72,0x71, 0x7,0x57,0x33, + 0x7,0x57,0x34, 0x5,0x75,0x4f, 0x4,0x6a,0x2f, 0x4,0x6a,0x30, + 0x7,0x5b,0x23, 0x7,0x5b,0x22, 0x7,0x5b,0x21, 0x7,0x5e,0x3e, + 0x5,0x78,0x72, 0x7,0x60,0x5a, 0x5,0x78,0x73, 0x7,0x61,0x79, + 0x5,0x79,0x76, 0x7,0x66,0x27, 0x4,0x48,0x76, 0x5,0x53,0x4f, + 0x4,0x4f,0x51, 0x7,0x36,0x68, 0x7,0x36,0x66, 0x5,0x5a,0x66, + 0x5,0x5a,0x65, 0x5,0x5a,0x67, 0x5,0x60,0x7e, 0x7,0x3e,0x64, + 0x5,0x60,0x7c, 0x7,0x3e,0x63, 0x5,0x60,0x7b, 0x4,0x5a,0x5e, + 0x5,0x60,0x7d, 0x7,0x3e,0x65, 0x7,0x3e,0x66, 0x5,0x67,0x3b, + 0x5,0x67,0x3a, 0x4,0x65,0x78, 0x5,0x6f,0x51, 0x5,0x6f,0x53, + 0x5,0x72,0x74, 0x7,0x57,0x36, 0x7,0x57,0x35, 0xf,0x69,0x36, + 0x5,0x75,0x50, 0x4,0x6b,0x54, 0x5,0x77,0x42, 0x5,0x77,0x41, + 0x4,0x6b,0x53, 0x7,0x63,0x40, 0x7,0x61,0x7a, 0x4,0x6d,0x6e, + 0x5,0x7b,0x5a, 0x7,0x65,0x2a, 0x5,0x7b,0x59, 0x6,0x64,0x76, + 0x5,0x44,0x54, 0x6,0x64,0x78, 0x6,0x64,0x77, 0x7,0x2c,0x34, + 0x4,0x4f,0x55, 0x4,0x4f,0x54, 0x5,0x53,0x50, 0x7,0x2c,0x35, + 0x7,0x2c,0x36, 0x7,0x36,0x6a, 0x5,0x5a,0x6a, 0x5,0x5a,0x68, + 0x5,0x5a,0x69, 0x7,0x36,0x69, 0x7,0x36,0x6b, 0x7,0x36,0x6c, + 0x4,0x5a,0x60, 0x7,0x3e,0x68, 0x5,0x61,0x21, 0xf,0x5e,0x2a, + 0x7,0x3e,0x67, 0x5,0x67,0x3e, 0x5,0x67,0x3c, 0x7,0x45,0x74, + 0x5,0x6b,0x58, 0x5,0x61,0x22, 0x5,0x67,0x3f, 0x5,0x6b,0x5a, + 0x5,0x6b,0x59, 0x5,0x6b,0x5b, 0x5,0x6b,0x5d, 0x5,0x6b,0x5c, + 0x7,0x4d,0x21, 0x7,0x4c,0x7e, 0x5,0x6f,0x56, 0x5,0x6f,0x57, + 0x7,0x52,0x5b, 0x5,0x6f,0x5b, 0x5,0x6f,0x59, 0x5,0x6f,0x55, + 0x7,0x52,0x58, 0x4,0x65,0x7e, 0x4,0x65,0x7b, 0x7,0x52,0x5c, + 0x5,0x6f,0x5a, 0x4,0x65,0x7a, 0x7,0x52,0x5a, 0xf,0x67,0x3c, + 0x7,0x52,0x59, 0x7,0x57,0x38, 0x4,0x68,0x53, 0x4,0x68,0x51, + 0x5,0x72,0x78, 0x4,0x68,0x50, 0x5,0x72,0x7b, 0x7,0x57,0x37, + 0x5,0x72,0x75, 0x5,0x72,0x79, 0x5,0x72,0x77, 0x4,0x68,0x54, + 0x5,0x72,0x76, 0x4,0x68,0x55, 0x4,0x6a,0x34, 0x7,0x57,0x39, + 0x7,0x57,0x3a, 0x5,0x72,0x7a, 0x5,0x75,0x51, 0x4,0x6a,0x33, + 0x4,0x6a,0x35, 0x7,0x5b,0x2a, 0x7,0x5b,0x27, 0x7,0x5b,0x26, + 0x4,0x6a,0x32, 0x7,0x5b,0x29, 0x7,0x5b,0x28, 0x5,0x75,0x52, + 0x7,0x5b,0x25, 0x5,0x77,0x47, 0x7,0x5e,0x41, 0x5,0x77,0x46, + 0x5,0x77,0x44, 0x5,0x77,0x45, 0x5,0x77,0x43, 0x5,0x77,0x48, + 0x7,0x5e,0x3f, 0x5,0x78,0x76, 0x5,0x78,0x77, 0x7,0x60,0x5d, + 0x4,0x6c,0x5c, 0x4,0x6c,0x60, 0x5,0x78,0x75, 0x7,0x60,0x5c, + 0x5,0x78,0x74, 0x4,0x6c,0x5f, 0x4,0x6c,0x5e, 0x4,0x6c,0x5d, + 0x7,0x5e,0x40, 0x7,0x60,0x5b, 0x5,0x79,0x78, 0x5,0x79,0x79, + 0x5,0x79,0x7a, 0x5,0x79,0x77, 0x4,0x6d,0x45, 0x7,0x61,0x7b, + 0x7,0x61,0x7c, 0x4,0x6d,0x46, 0x5,0x7a,0x5c, 0x7,0x64,0x3a, + 0x7,0x65,0x2b, 0x4,0x6e,0x30, 0x7,0x64,0x3b, 0x5,0x7b,0x33, + 0x4,0x6e,0x2f, 0x5,0x7b,0x5b, 0x5,0x7b,0x5c, 0x7,0x65,0x2c, + 0x4,0x6e,0x4a, 0x5,0x7b,0x76, 0x7,0x65,0x6e, 0x5,0x7c,0x4a, + 0x7,0x66,0x52, 0x7,0x45,0x75, 0x4,0x66,0x22, 0x5,0x72,0x7c, + 0x4,0x68,0x57, 0x5,0x77,0x49, 0x6,0x64,0x79, 0x7,0x2c,0x38, + 0x7,0x2c,0x37, 0x5,0x61,0x24, 0x7,0x36,0x6d, 0x4,0x5a,0x61, + 0x7,0x3e,0x69, 0x7,0x3e,0x6a, 0x7,0x45,0x78, 0x5,0x67,0x42, + 0x7,0x45,0x79, 0x7,0x45,0x77, 0x7,0x45,0x76, 0x4,0x5f,0x41, + 0x7,0x4d,0x24, 0x7,0x4d,0x25, 0x7,0x3e,0x6b, 0x7,0x4d,0x23, + 0x7,0x52,0x5e, 0x7,0x52,0x5f, 0x7,0x52,0x5d, 0x5,0x72,0x7d, + 0x7,0x57,0x3b, 0x4,0x6a,0x36, 0x7,0x5b,0x2c, 0x7,0x5b,0x31, + 0x7,0x5b,0x32, 0x7,0x5b,0x2e, 0x7,0x5b,0x30, 0x7,0x5b,0x2d, + 0x7,0x5b,0x2b, 0x7,0x5b,0x2f, 0x5,0x77,0x4a, 0x7,0x5e,0x42, + 0x5,0x78,0x78, 0x5,0x79,0x7b, 0x5,0x7a,0x5d, 0x4,0x6d,0x47, + 0x7,0x63,0x41, 0x5,0x7b,0x34, 0x7,0x63,0x42, 0x7,0x65,0x2d, + 0x6,0x50,0x4f, 0x7,0x36,0x6e, 0x7,0x36,0x6f, 0x5,0x5a,0x6b, + 0x7,0x46,0x4f, 0x7,0x65,0x2e, 0x5,0x5a,0x6c, 0x5,0x61,0x25, + 0x7,0x3e,0x6d, 0x5,0x67,0x43, 0x7,0x45,0x7a, 0x5,0x67,0x44, + 0xf,0x61,0x7d, 0x7,0x4d,0x27, 0x5,0x6b,0x60, 0x7,0x4d,0x26, + 0x5,0x6b,0x5e, 0x5,0x6b,0x5f, 0x4,0x63,0x25, 0x4,0x66,0x23, + 0x7,0x52,0x60, 0x4,0x6a,0x39, 0x4,0x68,0x58, 0x7,0x57,0x3c, + 0x7,0x57,0x3d, 0x5,0x75,0x53, 0x7,0x5b,0x34, 0x7,0x5b,0x35, + 0x5,0x75,0x55, 0x4,0x6a,0x38, 0x7,0x5b,0x33, 0x5,0x75,0x54, + 0x7,0x5e,0x43, 0x7,0x60,0x5e, 0x5,0x78,0x79, 0x7,0x60,0x5f, + 0x5,0x79,0x7c, 0x7,0x63,0x43, 0x5,0x7b,0x35, 0x5,0x7b,0x77, + 0x7,0x2c,0x39, 0x5,0x5a,0x6d, 0x7,0x3e,0x6e, 0x5,0x5a,0x6e, + 0x5,0x61,0x28, 0x5,0x61,0x2a, 0x5,0x61,0x2b, 0x5,0x61,0x29, + 0x5,0x61,0x27, 0x7,0x3e,0x70, 0x5,0x61,0x26, 0x7,0x3e,0x6f, + 0x5,0x61,0x2c, 0x4,0x5a,0x62, 0x7,0x45,0x7c, 0x7,0x4d,0x2c, + 0x5,0x67,0x47, 0x5,0x67,0x48, 0x5,0x67,0x46, 0x5,0x67,0x45, + 0x7,0x45,0x7b, 0x7,0x4d,0x2a, 0x5,0x6b,0x61, 0x5,0x6b,0x63, + 0x5,0x6b,0x62, 0x7,0x4d,0x2d, 0x7,0x4d,0x2e, 0x7,0x4d,0x29, + 0x7,0x52,0x62, 0x7,0x52,0x64, 0x7,0x52,0x63, 0x5,0x6f,0x5d, + 0x5,0x6f,0x5e, 0x7,0x4d,0x2b, 0x7,0x52,0x65, 0x5,0x6f,0x5c, + 0x7,0x52,0x61, 0x5,0x73,0x21, 0x5,0x72,0x7e, 0x7,0x57,0x3e, + 0x5,0x75,0x57, 0x7,0x5b,0x36, 0x5,0x75,0x58, 0x5,0x75,0x59, + 0x5,0x75,0x56, 0x4,0x6a,0x3a, 0x7,0x5e,0x44, 0x5,0x77,0x4b, + 0x4,0x6b,0x59, 0x7,0x5e,0x48, 0x4,0x6b,0x57, 0x4,0x6b,0x5a, + 0x7,0x5e,0x47, 0x7,0x5e,0x46, 0x7,0x5e,0x45, 0x5,0x78,0x7d, + 0x4,0x6c,0x63, 0x5,0x78,0x7b, 0x5,0x78,0x7a, 0x7,0x60,0x60, + 0x7,0x61,0x7e, 0x7,0x61,0x7d, 0x4,0x6d,0x49, 0x5,0x79,0x7d, + 0x5,0x7b,0x36, 0x5,0x7b,0x79, 0x5,0x7b,0x78, 0x7,0x65,0x6f, + 0x7,0x66,0x22, 0x4,0x4f,0x57, 0x7,0x36,0x70, 0x7,0x36,0x71, + 0x7,0x3e,0x72, 0x7,0x3e,0x71, 0x5,0x67,0x49, 0x7,0x45,0x7e, + 0x7,0x46,0x21, 0x7,0x45,0x7d, 0x5,0x6b,0x64, 0x5,0x6b,0x65, + 0x7,0x52,0x66, 0x5,0x6f,0x5f, 0x5,0x6f,0x60, 0x7,0x52,0x68, + 0x4,0x68,0x5b, 0x5,0x73,0x22, 0x7,0x57,0x3f, 0x7,0x57,0x40, + 0x5,0x73,0x23, 0x5,0x73,0x24, 0x7,0x5b,0x37, 0x5,0x77,0x4c, + 0x7,0x5e,0x49, 0x5,0x78,0x7c, 0xf,0x6b,0x7e, 0x7,0x60,0x61, + 0x5,0x79,0x7e, 0x5,0x7a,0x21, 0x7,0x63,0x46, 0x5,0x7a,0x5e, + 0x7,0x63,0x45, 0x7,0x64,0x3c, 0x4,0x6e,0x53, 0x5,0x7c,0x32, + 0xf,0x40,0x34, 0x4,0x55,0x64, 0x4,0x5a,0x65, 0x7,0x46,0x22, + 0x4,0x63,0x28, 0x7,0x4d,0x2f, 0x5,0x6d,0x57, 0x4,0x66,0x24, + 0x4,0x6a,0x3b, 0xf,0x69,0x37, 0x5,0x7a,0x23, 0x5,0x7a,0x22, + 0x7,0x62,0x21, 0x7,0x65,0x2f, 0x5,0x61,0x2e, 0x7,0x3e,0x73, + 0x7,0x46,0x25, 0x4,0x5f,0x47, 0x7,0x46,0x24, 0x7,0x4d,0x30, + 0x5,0x6b,0x66, 0x4,0x63,0x2a, 0x7,0x4d,0x31, 0x7,0x4d,0x34, + 0x7,0x4d,0x32, 0x7,0x4d,0x33, 0x7,0x4d,0x35, 0x7,0x4d,0x36, + 0x5,0x6b,0x67, 0x7,0x52,0x6b, 0x5,0x6f,0x63, 0x5,0x6f,0x62, + 0x4,0x66,0x28, 0x7,0x52,0x69, 0x4,0x66,0x2a, 0x7,0x52,0x6d, + 0x4,0x66,0x29, 0x7,0x52,0x6e, 0x7,0x52,0x6a, 0x4,0x48,0x78, + 0x7,0x52,0x6c, 0x7,0x57,0x46, 0x5,0x73,0x2a, 0x5,0x73,0x27, + 0x7,0x57,0x43, 0x7,0x57,0x42, 0x4,0x68,0x5e, 0x5,0x73,0x28, + 0x4,0x68,0x5f, 0x4,0x68,0x5d, 0x7,0x57,0x44, 0x5,0x73,0x25, + 0x5,0x73,0x2b, 0x7,0x57,0x45, 0x7,0x57,0x47, 0x5,0x73,0x29, + 0x7,0x57,0x41, 0x5,0x73,0x26, 0x7,0x5b,0x38, 0x4,0x6a,0x3e, + 0x5,0x75,0x5c, 0x5,0x75,0x5b, 0x5,0x75,0x5e, 0x7,0x5b,0x40, + 0x7,0x5b,0x3f, 0x5,0x75,0x5f, 0x7,0x5b,0x3a, 0x5,0x75,0x60, + 0x4,0x6a,0x3f, 0x7,0x5b,0x39, 0x5,0x75,0x5a, 0x7,0x5b,0x3b, + 0x7,0x5b,0x3d, 0x7,0x5b,0x3e, 0x7,0x5b,0x3c, 0x5,0x75,0x5d, + 0x5,0x77,0x4f, 0x5,0x77,0x4e, 0x4,0x6b,0x5e, 0x4,0x6b,0x62, + 0x4,0x6b,0x63, 0x4,0x6b,0x5f, 0x4,0x6b,0x60, 0x5,0x77,0x50, + 0x7,0x5e,0x4e, 0x7,0x5e,0x4c, 0x4,0x6b,0x5d, 0x7,0x5e,0x4a, + 0x7,0x5e,0x4b, 0x7,0x5e,0x4f, 0x4,0x6b,0x64, 0x4,0x6c,0x67, + 0x5,0x78,0x7e, 0x7,0x60,0x67, 0x4,0x6c,0x68, 0x7,0x60,0x65, + 0x5,0x79,0x21, 0x7,0x62,0x23, 0x4,0x6c,0x65, 0x7,0x60,0x63, + 0x7,0x60,0x66, 0x7,0x60,0x64, 0x7,0x60,0x62, 0x7,0x60,0x68, + 0x5,0x79,0x22, 0x4,0x6d,0x4e, 0x4,0x6d,0x4a, 0x7,0x62,0x25, + 0x5,0x7a,0x26, 0x4,0x6d,0x50, 0x4,0x6d,0x4d, 0x5,0x7a,0x24, + 0x7,0x62,0x27, 0x4,0x6d,0x4f, 0x7,0x62,0x24, 0x7,0x62,0x26, + 0x7,0x62,0x28, 0x7,0x62,0x29, 0x7,0x62,0x22, 0x5,0x7a,0x25, + 0x7,0x63,0x48, 0x5,0x7a,0x60, 0x7,0x63,0x47, 0x5,0x7a,0x62, + 0x5,0x7a,0x5f, 0x5,0x7a,0x61, 0x7,0x64,0x3e, 0x4,0x6e,0x32, + 0x7,0x64,0x3d, 0x5,0x7b,0x37, 0x5,0x7b,0x39, 0x5,0x7b,0x38, + 0x7,0x64,0x40, 0x7,0x64,0x41, 0x7,0x64,0x3f, 0x4,0x6e,0x46, + 0x7,0x65,0x32, 0x5,0x7b,0x5d, 0x7,0x65,0x31, 0x7,0x65,0x30, + 0x7,0x65,0x59, 0x7,0x65,0x71, 0x7,0x65,0x72, 0x5,0x7c,0x2a, + 0x7,0x65,0x70, 0x7,0x65,0x73, 0x5,0x7c,0x33, 0x7,0x66,0x24, + 0x7,0x66,0x23, 0x5,0x7c,0x3b, 0x7,0x66,0x32, 0x5,0x7c,0x3a, + 0x7,0x66,0x31, 0x7,0x66,0x3d, 0x7,0x66,0x3c, 0x5,0x7c,0x45, + 0x7,0x66,0x41, 0x7,0x66,0x48, 0x5,0x7c,0x4e, 0x5,0x7c,0x4d, + 0x5,0x6b,0x68, 0x7,0x4d,0x37, 0x4,0x63,0x2c, 0x7,0x52,0x70, + 0x7,0x52,0x6f, 0x7,0x4e,0x24, 0x5,0x6f,0x64, 0x7,0x57,0x48, + 0xf,0x67,0x3d, 0x7,0x5b,0x42, 0x7,0x5b,0x41, 0x7,0x5b,0x43, + 0x7,0x5b,0x44, 0x5,0x77,0x51, 0x5,0x7c,0x51, 0x7,0x36,0x72, + 0x7,0x3e,0x74, 0x7,0x46,0x26, 0x7,0x57,0x49, 0x5,0x6f,0x65, + 0x4,0x66,0x2b, 0x5,0x6f,0x67, 0x5,0x6f,0x66, 0x4,0x66,0x2c, + 0x7,0x52,0x73, 0x7,0x52,0x71, 0xf,0x67,0x3e, 0x7,0x52,0x72, + 0x5,0x73,0x2c, 0x5,0x73,0x2e, 0x7,0x57,0x4b, 0x5,0x73,0x2f, + 0x5,0x6b,0x6a, 0x5,0x73,0x2d, 0x7,0x54,0x2a, 0x7,0x57,0x4a, + 0x7,0x4d,0x39, 0x7,0x4d,0x38, 0x5,0x7b,0x5e, 0x7,0x61,0x29, + 0x5,0x7b,0x3a, 0x5,0x77,0x52, 0x7,0x64,0x42, 0xf,0x6d,0x2d, + 0x5,0x7c,0x42, 0xf,0x29,0x26, 0x5,0x73,0x30, 0x7,0x62,0x2b, + 0x7,0x62,0x2a, 0x5,0x7a,0x64, 0x5,0x7a,0x63, 0x7,0x63,0x4a, + 0x7,0x63,0x49, 0x5,0x7b,0x3b, 0x4,0x6e,0x47, 0x7,0x66,0x25, + 0x4,0x6e,0x56, 0x7,0x66,0x4c, 0x6,0x29,0x36, 0x6,0x21,0x31, + 0x6,0x21,0x21, 0x6,0x25,0x66, 0x6,0x25,0x72, 0x4,0x25,0x3d, + 0x6,0x2e,0x61, 0xf,0x2d,0x68, 0x6,0x3d,0x35, 0x6,0x50,0x5b, + 0x4,0x3c,0x30, 0x6,0x5a,0x72, 0xf,0x59,0x4d, 0x6,0x23,0x52, + 0x3,0x24,0x52, 0x3,0x27,0x53, 0xf,0x67,0x40, 0x3,0x27,0x54, + 0x6,0x3d,0x3c, 0x7,0x4d,0x3e, 0x6,0x21,0x50, 0x3,0x22,0x7b, + 0x6,0x23,0x59, 0x3,0x21,0x4f, 0x6,0x35,0x44, 0x4,0x21,0x3f, + 0x6,0x22,0x3c, 0x3,0x24,0x41, 0x7,0x36,0x7a, 0x5,0x21,0x29, + 0x6,0x21,0x38, 0xf,0x23,0x37, 0x6,0x29,0x63, 0x6,0x2e,0x76, + 0x6,0x46,0x67, 0x3,0x40,0x43, 0xf,0x22,0x29, 0x6,0x2f,0x25, + 0x6,0x35,0x58, 0x4,0x36,0x4c, 0x4,0x21,0x2f, 0x6,0x22,0x46, + 0x3,0x22,0x25, 0x6,0x22,0x49, 0x3,0x23,0x29, 0x6,0x2f,0x38, + 0x6,0x46,0x74, 0x6,0x2a,0x23, 0x6,0x2f,0x3d, 0x6,0x3d,0x59, + 0x6,0x3d,0x5a, 0x3,0x3a,0x26, 0xf,0x21,0x33, 0x3,0x24,0x29, + 0x6,0x21,0x61, 0x6,0x26,0x43, 0x5,0x31,0x31, 0x6,0x22,0x5b, + 0x5,0x21,0x60, 0x3,0x23,0x3c, 0x4,0x23,0x5c, 0x6,0x26,0x4e, + 0x4,0x23,0x5b, 0x6,0x2a,0x3c, 0x3,0x30,0x23, 0x6,0x35,0x7e, + 0x4,0x30,0x76, 0x6,0x3d,0x7c, 0x6,0x47,0x2a, 0x6,0x47,0x2c, + 0x6,0x47,0x30, 0x6,0x47,0x31, 0x6,0x47,0x33, 0x4,0x3c,0x50, + 0x6,0x5b,0x5b, 0x6,0x51,0x36, 0x6,0x5b,0x59, 0x7,0x21,0x60, + 0x7,0x2c,0x65, 0x3,0x21,0x7c, 0x6,0x24,0x33, 0x6,0x36,0x35, + 0x6,0x3e,0x2c, 0x6,0x3e,0x2b, 0x3,0x34,0x70, 0x4,0x36,0x76, + 0x6,0x51,0x4a, 0x7,0x21,0x76, 0x7,0x46,0x3e, 0xf,0x23,0x5b, + 0x6,0x51,0x57, 0x5,0x23,0x62, 0x6,0x24,0x3b, 0x6,0x51,0x5e, + 0x6,0x47,0x56, 0x6,0x22,0x67, 0xf,0x2a,0x2b, 0x6,0x36,0x4c, + 0x6,0x36,0x4d, 0xf,0x2e,0x6d, 0x6,0x3e,0x54, 0x6,0x3e,0x50, + 0x6,0x47,0x61, 0x6,0x51,0x69, 0xf,0x47,0x46, 0x3,0x5a,0x33, + 0x7,0x46,0x51, 0x6,0x24,0x48, 0x4,0x31,0x30, 0xf,0x41,0x2b, + 0x6,0x5c,0x22, 0x3,0x5a,0x36, 0x7,0x60,0x6d, 0x6,0x27,0x21, + 0x6,0x36,0x67, 0x6,0x24,0x4b, 0x4,0x21,0x34, 0x5,0x28,0x73, + 0x6,0x47,0x7b, 0x4,0x21,0x35, 0xf,0x26,0x62, 0x3,0x2c,0x40, + 0x6,0x30,0x4e, 0x6,0x48,0x2b, 0x6,0x48,0x35, 0x3,0x40,0x7e, + 0x6,0x52,0x33, 0x6,0x5c,0x3d, 0x6,0x27,0x36, 0x6,0x5c,0x49, + 0xf,0x21,0x5f, 0x6,0x48,0x37, 0x6,0x37,0x2c, 0x6,0x48,0x3c, + 0x7,0x2d,0x53, 0x7,0x2d,0x55, 0x7,0x60,0x6e, 0x5,0x29,0x27, + 0x6,0x3f,0x46, 0x6,0x3f,0x45, 0x3,0x35,0x5f, 0x6,0x52,0x40, + 0x5,0x45,0x5d, 0x6,0x21,0x74, 0x6,0x27,0x4a, 0x6,0x2b,0x2f, + 0x6,0x30,0x74, 0xf,0x2a,0x5d, 0x6,0x2b,0x39, 0x7,0x2d,0x63, + 0x5,0x73,0x40, 0x3,0x2c,0x51, 0x6,0x3f,0x5e, 0x5,0x2d,0x48, + 0x3,0x35,0x65, 0x6,0x27,0x5f, 0xf,0x24,0x33, 0x5,0x24,0x38, + 0x6,0x31,0x36, 0x6,0x31,0x30, 0xf,0x2a,0x67, 0x4,0x29,0x4a, + 0x6,0x48,0x7c, 0x6,0x48,0x78, 0x3,0x46,0x70, 0x6,0x52,0x6c, + 0x6,0x52,0x66, 0x6,0x5d,0x26, 0x6,0x5d,0x24, 0x4,0x43,0x51, + 0x7,0x2d,0x69, 0x7,0x2d,0x79, 0x7,0x22,0x7b, 0x3,0x54,0x60, + 0x4,0x5b,0x2c, 0x7,0x47,0x28, 0x3,0x26,0x27, 0x6,0x40,0x23, + 0x5,0x22,0x6e, 0x6,0x2b,0x63, 0x6,0x2b,0x60, 0x6,0x31,0x4f, + 0xf,0x2b,0x2b, 0x6,0x37,0x71, 0x3,0x36,0x28, 0x6,0x40,0x36, + 0x6,0x40,0x2b, 0x6,0x49,0x4a, 0x6,0x49,0x30, 0xf,0x41,0x5f, + 0x7,0x23,0x30, 0x6,0x5d,0x38, 0x5,0x46,0x2c, 0x7,0x23,0x2d, + 0xf,0x4f,0x25, 0x4,0x4a,0x27, 0x7,0x38,0x39, 0xf,0x5e,0x70, + 0x4,0x2d,0x46, 0x6,0x49,0x57, 0xf,0x5a,0x36, 0x3,0x36,0x40, + 0x6,0x38,0x36, 0xf,0x41,0x72, 0x6,0x53,0x3c, 0x5,0x46,0x41, + 0xf,0x2b,0x38, 0x6,0x31,0x6d, 0x6,0x40,0x57, 0x6,0x49,0x78, + 0x6,0x5d,0x5b, 0x6,0x2c,0x23, 0x5,0x26,0x4a, 0x4,0x32,0x3e, + 0x6,0x40,0x58, 0x5,0x3f,0x66, 0x4,0x24,0x47, 0x6,0x28,0x2e, + 0xf,0x24,0x51, 0x4,0x26,0x68, 0x3,0x2d,0x35, 0x6,0x38,0x4a, + 0x3,0x31,0x5c, 0x4,0x2d,0x5c, 0x6,0x38,0x50, 0x5,0x32,0x7e, + 0x3,0x3c,0x3a, 0x6,0x53,0x5e, 0x5,0x3f,0x71, 0x3,0x41,0x6e, + 0x6,0x5d,0x68, 0x7,0x23,0x72, 0xf,0x54,0x74, 0x7,0x2e,0x6a, + 0x4,0x5f,0x76, 0x7,0x58,0x23, 0x6,0x25,0x23, 0x6,0x4a,0x3f, + 0x7,0x23,0x78, 0x7,0x5e,0x72, 0xf,0x48,0x79, 0x6,0x53,0x77, + 0x4,0x2d,0x65, 0xf,0x35,0x74, 0x6,0x4a,0x4d, 0x6,0x2c,0x42, + 0xf,0x48,0x7b, 0x6,0x25,0x2e, 0xf,0x24,0x5d, 0x6,0x2c,0x5b, + 0x6,0x2c,0x51, 0x3,0x2d,0x52, 0x6,0x32,0x39, 0x6,0x32,0x42, + 0x4,0x2a,0x25, 0x4,0x2d,0x70, 0x6,0x39,0x2d, 0x6,0x38,0x74, + 0x6,0x39,0x21, 0xf,0x30,0x5b, 0x3,0x36,0x75, 0x6,0x4a,0x65, + 0x6,0x4a,0x63, 0x4,0x3e,0x33, 0x6,0x54,0x49, 0x6,0x54,0x4f, + 0xf,0x42,0x74, 0x6,0x5e,0x3e, 0x7,0x24,0x4f, 0x7,0x24,0x58, + 0xf,0x4f,0x69, 0x7,0x2f,0x42, 0xf,0x55,0x56, 0x4,0x56,0x5d, + 0x7,0x4e,0x28, 0x7,0x53,0x60, 0x7,0x53,0x58, 0x6,0x2c,0x60, + 0x6,0x2c,0x5d, 0x6,0x32,0x48, 0x4,0x38,0x68, 0xf,0x43,0x2f, + 0x6,0x54,0x59, 0xf,0x50,0x3d, 0xf,0x55,0x58, 0x5,0x7b,0x7b, + 0x3,0x55,0x45, 0x6,0x41,0x61, 0x6,0x41,0x63, 0x6,0x41,0x6a, + 0x6,0x5e,0x5e, 0x6,0x32,0x62, 0x6,0x4b,0x42, 0x7,0x47,0x75, + 0x6,0x22,0x26, 0xf,0x24,0x78, 0x6,0x2d,0x24, 0xf,0x2c,0x39, + 0xf,0x31,0x28, 0x6,0x4b,0x47, 0xf,0x43,0x64, 0x4,0x44,0x6e, + 0x7,0x40,0x63, 0xf,0x63,0x24, 0x6,0x42,0x21, 0x3,0x3d,0x3f, + 0x6,0x32,0x79, 0x4,0x2a,0x44, 0x5,0x33,0x65, 0x6,0x4b,0x56, + 0x4,0x3e,0x6c, 0x6,0x42,0x32, 0xf,0x4a,0x2f, 0x7,0x53,0x7b, + 0x6,0x2d,0x3a, 0x5,0x33,0x71, 0xf,0x56,0x3c, 0x6,0x2d,0x45, + 0x6,0x2d,0x3d, 0x6,0x33,0x3d, 0x6,0x33,0x31, 0x5,0x2f,0x26, + 0xf,0x2c,0x57, 0x6,0x3a,0x2d, 0x6,0x3a,0x2e, 0x6,0x42,0x48, + 0x6,0x4b,0x7a, 0xf,0x50,0x5f, 0x7,0x30,0x4a, 0x6,0x25,0x3f, + 0x6,0x2d,0x46, 0x3,0x43,0x33, 0x6,0x55,0x6b, 0x7,0x25,0x7b, + 0x7,0x39,0x6d, 0xf,0x28,0x3c, 0x6,0x33,0x4a, 0xf,0x3d,0x60, + 0x4,0x4b,0x60, 0x7,0x26,0x27, 0x6,0x3a,0x43, 0x6,0x42,0x67, + 0x4,0x45,0x5f, 0x4,0x52,0x21, 0x7,0x30,0x66, 0x6,0x5f,0x75, + 0x7,0x26,0x3e, 0x7,0x26,0x3c, 0x7,0x30,0x73, 0xf,0x4a,0x7b, + 0x6,0x60,0x23, 0xf,0x51,0x23, 0x7,0x26,0x4d, 0x7,0x41,0x3c, + 0x5,0x6c,0x7d, 0x7,0x31,0x2d, 0x7,0x3a,0x33, 0x4,0x5c,0x59, + 0x7,0x41,0x44, 0x3,0x2e,0x56, 0x6,0x33,0x66, 0x3,0x48,0x6a, + 0xf,0x51,0x37, 0x7,0x26,0x6a, 0x7,0x26,0x69, 0x4,0x64,0x26, + 0x7,0x62,0x4d, 0x6,0x4c,0x72, 0x7,0x3a,0x46, 0xf,0x3e,0x32, + 0x7,0x3a,0x49, 0x7,0x48,0x6d, 0x7,0x5f,0x3c, 0x6,0x4d,0x23, + 0xf,0x57,0x27, 0x4,0x2b,0x26, 0x7,0x27,0x28, 0xf,0x57,0x28, + 0x6,0x60,0x5d, 0x5,0x48,0x74, 0xf,0x5c,0x2d, 0x6,0x28,0x7b, + 0x4,0x27,0x68, 0x6,0x2d,0x69, 0x3,0x33,0x50, 0x5,0x3b,0x50, + 0x6,0x4d,0x48, 0xf,0x44,0x68, 0xf,0x4b,0x57, 0xf,0x4b,0x56, + 0x4,0x4c,0x56, 0x4,0x58,0x2d, 0x4,0x34,0x57, 0x6,0x4d,0x5e, + 0x3,0x44,0x25, 0x6,0x61,0x25, 0x3,0x27,0x2a, 0x6,0x25,0x52, + 0x6,0x29,0x27, 0xf,0x28,0x5c, 0x6,0x29,0x28, 0x6,0x2e,0x22, + 0x6,0x2e,0x23, 0x6,0x34,0x44, 0x6,0x2e,0x24, 0x6,0x3b,0x52, + 0xf,0x32,0x3a, 0x4,0x34,0x73, 0x6,0x44,0x2b, 0x4,0x34,0x74, + 0x6,0x43,0x76, 0x6,0x44,0x3b, 0x4,0x3a,0x66, 0x6,0x44,0x3e, + 0x6,0x44,0x3c, 0x6,0x44,0x3d, 0x6,0x4e,0x3b, 0x6,0x61,0x3e, + 0x6,0x61,0x4f, 0xf,0x51,0x64, 0x4,0x4c,0x79, 0x7,0x27,0x61, + 0x7,0x27,0x6d, 0x7,0x32,0x44, 0xf,0x57,0x47, 0x7,0x3a,0x6f, + 0xf,0x60,0x5d, 0x7,0x42,0x3c, 0x7,0x54,0x5e, 0x4,0x67,0x2b, + 0x6,0x34,0x47, 0x4,0x40,0x4f, 0x7,0x3b,0x38, 0x3,0x5b,0x26, + 0x6,0x3b,0x71, 0x4,0x3a,0x75, 0x6,0x4e,0x46, 0x4,0x46,0x7c, + 0x4,0x4d,0x33, 0xf,0x52,0x24, 0x7,0x28,0x2e, 0xf,0x51,0x7d, + 0x7,0x42,0x60, 0x7,0x42,0x5f, 0x3,0x5b,0x2d, 0x4,0x64,0x3f, + 0x4,0x53,0x4c, 0x6,0x25,0x53, 0x5,0x30,0x3e, 0x6,0x58,0x2e, + 0x6,0x58,0x2c, 0xf,0x45,0x3d, 0x7,0x3b,0x61, 0xf,0x38,0x4a, + 0x5,0x7a,0x38, 0x6,0x3c,0x2d, 0x4,0x35,0x45, 0xf,0x3f,0x3b, + 0x6,0x62,0x47, 0x7,0x33,0x4f, 0x7,0x59,0x41, 0x6,0x29,0x2a, + 0x6,0x58,0x50, 0x6,0x58,0x5c, 0x3,0x60,0x7c, 0x6,0x3c,0x3b, + 0x7,0x33,0x79, 0x7,0x33,0x73, 0xf,0x3f,0x53, 0x3,0x44,0x6d, + 0x7,0x29,0x44, 0x6,0x34,0x5d, 0x4,0x30,0x2c, 0x7,0x34,0x31, + 0x4,0x54,0x37, 0x7,0x3c,0x61, 0x6,0x25,0x5b, 0x4,0x35,0x72, + 0x6,0x59,0x47, 0x6,0x59,0x4a, 0x7,0x3c,0x6b, 0xf,0x45,0x73, + 0x6,0x63,0x53, 0x6,0x63,0x4f, 0x4,0x54,0x4a, 0xf,0x66,0x5e, + 0x7,0x50,0x6b, 0xf,0x6c,0x3f, 0x6,0x63,0x58, 0x7,0x34,0x7a, + 0x7,0x34,0x71, 0xf,0x61,0x4a, 0x6,0x50,0x22, 0x6,0x63,0x6e, + 0x7,0x35,0x35, 0x3,0x56,0x78, 0x5,0x5f,0x5e, 0x7,0x3d,0x50, + 0xf,0x58,0x78, 0x7,0x4b,0x5f, 0x4,0x65,0x2a, 0x7,0x4b,0x6b, + 0x5,0x3d,0x47, 0x5,0x44,0x35, 0x6,0x5a,0x33, 0x6,0x64,0x30, + 0x4,0x59,0x76, 0x6,0x64,0x3a, 0x6,0x3c,0x77, 0x6,0x5a,0x3d, + 0x4,0x55,0x23, 0x4,0x5e,0x60, 0x6,0x64,0x50, 0x7,0x3e,0x29, + 0x7,0x2b,0x55, 0xf,0x59,0x32, 0x7,0x51,0x7a, 0x7,0x5a,0x60, + 0x4,0x5a,0x59, 0x7,0x45,0x65, 0x4,0x5f,0x37, 0x4,0x62,0x6e, + 0x7,0x52,0x45, 0x5,0x75,0x36, 0x5,0x75,0x35, 0xf,0x6c,0x77, + 0x7,0x3e,0x5c, 0x6,0x46,0x3e, 0x4,0x68,0x4f, 0x6,0x5a,0x60, + 0x4,0x28,0x34, 0x3,0x5c,0x2f, 0x5,0x53,0x51, 0x7,0x4d,0x28, + 0x4,0x48,0x77, 0x7,0x5e,0x4d, +}; + +static const Summary16 cns11643_inv_uni2indx_page00[16] = { + /* 0x0000 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0080 }, { 1, 0x0083 }, + { 4, 0x0000 }, { 4, 0x0080 }, { 5, 0x0000 }, { 5, 0x0080 }, +}; +static const Summary16 cns11643_inv_uni2indx_page02[29] = { + /* 0x0200 */ + { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, + { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, + { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, + { 6, 0x0e80 }, { 10, 0x0200 }, { 11, 0x0000 }, { 11, 0x0000 }, + /* 0x0300 */ + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0xfffe }, { 26, 0x03fb }, { 35, 0xfffe }, + { 50, 0x03fb }, +}; +static const Summary16 cns11643_inv_uni2indx_page20[44] = { + /* 0x2000 */ + { 59, 0x0000 }, { 59, 0x3358 }, { 66, 0x0060 }, { 68, 0x4824 }, + { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x0000 }, + { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x1000 }, { 73, 0x0000 }, + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, + /* 0x2100 */ + { 73, 0x0228 }, { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x03ff }, { 86, 0x03ff }, + { 96, 0x0000 }, { 96, 0x03cf }, { 104, 0x0000 }, { 104, 0x0000 }, + { 104, 0x0000 }, { 104, 0x0000 }, { 104, 0x0000 }, { 104, 0x0000 }, + /* 0x2200 */ + { 104, 0x0000 }, { 104, 0xc420 }, { 108, 0x4e01 }, { 113, 0x1030 }, + { 116, 0x0000 }, { 116, 0x0004 }, { 117, 0x00c3 }, { 121, 0x0000 }, + { 121, 0x0000 }, { 121, 0x0000 }, { 121, 0x0020 }, { 122, 0x8000 }, +}; +static const Summary16 cns11643_inv_uni2indx_page24[37] = { + /* 0x2400 */ + { 123, 0xffff }, { 139, 0xffff }, { 155, 0x0002 }, { 156, 0x0000 }, + { 156, 0x0000 }, { 156, 0x0000 }, { 156, 0x03ff }, { 166, 0x3ff0 }, + { 176, 0x0000 }, { 176, 0x0000 }, { 176, 0x0000 }, { 176, 0x0000 }, + { 176, 0x0000 }, { 176, 0x0000 }, { 176, 0x0000 }, { 176, 0x0000 }, + /* 0x2500 */ + { 176, 0x1005 }, { 179, 0x1111 }, { 183, 0x1010 }, { 185, 0x1010 }, + { 187, 0x0000 }, { 187, 0x4001 }, { 189, 0xe402 }, { 194, 0x000f }, + { 198, 0xfffe }, { 213, 0x0030 }, { 215, 0x0003 }, { 217, 0x300c }, + { 221, 0xc8c0 }, { 226, 0x0000 }, { 226, 0x003c }, { 230, 0x0000 }, + /* 0x2600 */ + { 230, 0x0260 }, { 233, 0x0000 }, { 233, 0x0000 }, { 233, 0x0000 }, + { 233, 0x0007 }, +}; +static const Summary16 cns11643_inv_uni2indx_page30[1787] = { + /* 0x3000 */ + { 236, 0xff0f }, { 248, 0x6037 }, { 255, 0x03fe }, { 264, 0x0000 }, + { 264, 0x0000 }, { 264, 0x0000 }, { 264, 0x0000 }, { 264, 0x0000 }, + { 264, 0x0000 }, { 264, 0x0000 }, { 264, 0x0000 }, { 264, 0x0000 }, + { 264, 0x0000 }, { 264, 0x0000 }, { 264, 0x0000 }, { 264, 0x0800 }, + /* 0x3100 */ + { 265, 0xffe0 }, { 276, 0xffff }, { 292, 0x03ff }, { 302, 0x0000 }, + { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, + { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, + { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, + /* 0x3200 */ + { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, + { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, + { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0008 }, { 303, 0x0000 }, + { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, + /* 0x3300 */ + { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, + { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, + { 303, 0xc000 }, { 305, 0x7000 }, { 308, 0x0002 }, { 309, 0x0000 }, + { 309, 0x4010 }, { 311, 0x0026 }, { 314, 0x0000 }, { 314, 0x0000 }, + /* 0x3400 */ + { 314, 0x1073 }, { 320, 0x1040 }, { 322, 0x7b12 }, { 330, 0x5f5f }, + { 342, 0xfe3e }, { 354, 0xff8b }, { 366, 0xc0f8 }, { 373, 0xfefb }, + { 387, 0x7fff }, { 402, 0xfefe }, { 416, 0xbff3 }, { 429, 0xfffd }, + { 444, 0xdfbc }, { 456, 0xfdfb }, { 470, 0xf39f }, { 482, 0x7ffe }, + /* 0x3500 */ + { 496, 0xfcff }, { 510, 0x77af }, { 522, 0xf7ff }, { 537, 0xffff }, + { 553, 0xffff }, { 569, 0xdff7 }, { 583, 0xfeff }, { 598, 0x1fef }, + { 610, 0x81ff }, { 620, 0x81ff }, { 630, 0x0fff }, { 642, 0xfff0 }, + { 654, 0x3fff }, { 668, 0x1ff9 }, { 679, 0x3ffc }, { 691, 0xf87f }, + /* 0x3600 */ + { 703, 0x3fe7 }, { 715, 0xfe7b }, { 728, 0xbfff }, { 743, 0x8fdf }, + { 755, 0xefbf }, { 769, 0x7e2f }, { 780, 0xffbf }, { 795, 0x5fff }, + { 809, 0xfebf }, { 823, 0xf5fd }, { 836, 0x7fff }, { 851, 0xffff }, + { 867, 0xe63e }, { 877, 0x7fff }, { 892, 0xffe6 }, { 905, 0x7fff }, + /* 0x3700 */ + { 920, 0xfffe }, { 935, 0x7fef }, { 949, 0xdfff }, { 964, 0xffff }, + { 980, 0xf5bf }, { 993, 0xfbff }, { 1008, 0xfefd }, { 1022, 0xfff7 }, + { 1037, 0x9fff }, { 1051, 0x9fff }, { 1065, 0xbffe }, { 1079, 0xfeff }, + { 1094, 0xffbb }, { 1108, 0xffdf }, { 1123, 0xbfe5 }, { 1135, 0xff7f }, + /* 0x3800 */ + { 1150, 0xfff7 }, { 1165, 0x3fff }, { 1179, 0xe7e7 }, { 1191, 0xfff6 }, + { 1205, 0xdfff }, { 1220, 0xffff }, { 1236, 0xefed }, { 1249, 0xffff }, + { 1265, 0xff7f }, { 1280, 0xffff }, { 1296, 0xd7eb }, { 1308, 0x7d7d }, + { 1320, 0xfbff }, { 1335, 0xff1f }, { 1348, 0xb87d }, { 1358, 0xfce7 }, + /* 0x3900 */ + { 1370, 0xfffe }, { 1385, 0xfeff }, { 1400, 0xd7ff }, { 1414, 0xcfff }, + { 1428, 0xffff }, { 1444, 0xfc7f }, { 1457, 0xfbff }, { 1472, 0xf7ff }, + { 1487, 0xfeff }, { 1502, 0xfdff }, { 1517, 0xffff }, { 1533, 0xfff5 }, + { 1547, 0x7fff }, { 1562, 0x47fc }, { 1572, 0xfffe }, { 1587, 0xfffe }, + /* 0x3a00 */ + { 1602, 0xffff }, { 1618, 0xfeff }, { 1633, 0xe7ff }, { 1647, 0xffff }, + { 1663, 0x7ff9 }, { 1676, 0x7ffd }, { 1690, 0xbfff }, { 1705, 0xfeff }, + { 1720, 0xfbb7 }, { 1733, 0xf46e }, { 1743, 0xfb7f }, { 1757, 0xdff3 }, + { 1770, 0xec3f }, { 1781, 0xffbf }, { 1796, 0xdef3 }, { 1808, 0x3fff }, + /* 0x3b00 */ + { 1822, 0xfffe }, { 1837, 0x7fbd }, { 1850, 0xfeef }, { 1864, 0x9b7f }, + { 1876, 0x1f9e }, { 1886, 0xff3e }, { 1899, 0xff07 }, { 1910, 0xff07 }, + { 1921, 0xf9ff }, { 1935, 0xffff }, { 1951, 0xfffa }, { 1965, 0x97ff }, + { 1978, 0xffff }, { 1994, 0xfff9 }, { 2008, 0xfc7f }, { 2021, 0xcfff }, + /* 0x3c00 */ + { 2035, 0xffff }, { 2051, 0xeff7 }, { 2065, 0xffff }, { 2081, 0xfeff }, + { 2096, 0xffff }, { 2112, 0xdff4 }, { 2124, 0xbdff }, { 2138, 0xff7f }, + { 2153, 0xffff }, { 2169, 0xfffe }, { 2184, 0xbdff }, { 2198, 0x7fff }, + { 2213, 0xfdff }, { 2228, 0xffcf }, { 2242, 0x7ff0 }, { 2253, 0xfff8 }, + /* 0x3d00 */ + { 2266, 0xc7ff }, { 2279, 0x7fff }, { 2294, 0xffe3 }, { 2307, 0xf9ff }, + { 2321, 0xfc7f }, { 2334, 0xe3ff }, { 2347, 0xffff }, { 2363, 0xefff }, + { 2378, 0xf1f3 }, { 2389, 0xddfe }, { 2402, 0xfffb }, { 2417, 0xde3d }, + { 2428, 0xefff }, { 2443, 0x8fff }, { 2456, 0xf97f }, { 2469, 0xdbf9 }, + /* 0x3e00 */ + { 2481, 0xff3f }, { 2495, 0xffff }, { 2511, 0xffff }, { 2527, 0x7fef }, + { 2541, 0xfeff }, { 2556, 0xffff }, { 2572, 0xf8ff }, { 2585, 0xfffe }, + { 2600, 0xdfbf }, { 2614, 0xfdff }, { 2629, 0x7ffb }, { 2643, 0xa7bf }, + { 2655, 0x7f9f }, { 2668, 0xe6fe }, { 2680, 0xf98f }, { 2691, 0xffe7 }, + /* 0x3f00 */ + { 2705, 0xfef6 }, { 2718, 0xffff }, { 2734, 0xffff }, { 2750, 0xffff }, + { 2766, 0x7fdf }, { 2780, 0xffef }, { 2795, 0xffff }, { 2811, 0xefb7 }, + { 2824, 0xffff }, { 2840, 0xffff }, { 2856, 0xffff }, { 2872, 0xffc1 }, + { 2883, 0xfffe }, { 2898, 0xffee }, { 2912, 0xfffe }, { 2927, 0xffff }, + /* 0x4000 */ + { 2943, 0xefff }, { 2958, 0xdfff }, { 2973, 0xff9f }, { 2987, 0xffff }, + { 3003, 0xfffe }, { 3018, 0xffbf }, { 3033, 0xfbfd }, { 3047, 0xffff }, + { 3063, 0xf7ff }, { 3078, 0xffff }, { 3094, 0xfeff }, { 3109, 0xffdf }, + { 3124, 0xff87 }, { 3136, 0x7ffe }, { 3150, 0x7eff }, { 3164, 0xefff }, + /* 0x4100 */ + { 3179, 0xfbff }, { 3194, 0xbf3f }, { 3207, 0xfff7 }, { 3222, 0xfdcf }, + { 3235, 0xfdff }, { 3250, 0x7fff }, { 3265, 0xf3ff }, { 3279, 0xffff }, + { 3295, 0xef3f }, { 3308, 0xffff }, { 3324, 0xbfff }, { 3339, 0xffef }, + { 3354, 0xfbef }, { 3368, 0xffff }, { 3384, 0xffff }, { 3400, 0x7fe7 }, + /* 0x4200 */ + { 3413, 0xffff }, { 3429, 0xffff }, { 3445, 0xfcff }, { 3459, 0xffff }, + { 3475, 0xff7f }, { 3490, 0xffff }, { 3506, 0xffef }, { 3521, 0xffff }, + { 3537, 0xefff }, { 3552, 0xffff }, { 3568, 0xfffb }, { 3583, 0xffff }, + { 3599, 0xff1f }, { 3612, 0xdfff }, { 3627, 0xffff }, { 3643, 0xffff }, + /* 0x4300 */ + { 3659, 0xf7ff }, { 3674, 0xffff }, { 3690, 0xffff }, { 3706, 0x003f }, + { 3712, 0xfffc }, { 3726, 0xffff }, { 3742, 0xfffe }, { 3757, 0xffff }, + { 3773, 0xffff }, { 3789, 0xb7ff }, { 3803, 0xefdf }, { 3817, 0xffff }, + { 3833, 0xffff }, { 3849, 0xdfff }, { 3864, 0x9fff }, { 3878, 0xffff }, + /* 0x4400 */ + { 3894, 0xffbf }, { 3909, 0xffff }, { 3925, 0xfbff }, { 3940, 0xffff }, + { 3956, 0xffff }, { 3972, 0xffbf }, { 3987, 0xbdff }, { 4001, 0xbe7f }, + { 4014, 0xff7f }, { 4029, 0xfdfd }, { 4043, 0x3fff }, { 4057, 0x3fff }, + { 4071, 0xfffe }, { 4086, 0xff8f }, { 4099, 0xe4ff }, { 4111, 0xf7ff }, + /* 0x4500 */ + { 4126, 0xffff }, { 4142, 0xffff }, { 4158, 0xffff }, { 4174, 0xffff }, + { 4190, 0xfffb }, { 4205, 0xfffe }, { 4220, 0xfff7 }, { 4235, 0xffbf }, + { 4250, 0xffff }, { 4266, 0xffff }, { 4282, 0xefff }, { 4297, 0xbfff }, + { 4312, 0xffff }, { 4328, 0xffbf }, { 4343, 0xdfff }, { 4358, 0xf7f7 }, + /* 0x4600 */ + { 4372, 0xffff }, { 4388, 0xb7ff }, { 4402, 0xffff }, { 4418, 0xfffb }, + { 4433, 0xc3ff }, { 4445, 0xfff7 }, { 4460, 0xf7ff }, { 4475, 0xf7bf }, + { 4489, 0xffff }, { 4505, 0xffdf }, { 4520, 0xefef }, { 4534, 0xffff }, + { 4550, 0xffff }, { 4566, 0xfff7 }, { 4581, 0xffff }, { 4597, 0xffff }, + /* 0x4700 */ + { 4613, 0xffff }, { 4629, 0xffff }, { 4645, 0xfc07 }, { 4654, 0xfff7 }, + { 4669, 0xffff }, { 4685, 0xf5ff }, { 4699, 0xffff }, { 4715, 0xefff }, + { 4730, 0x0fff }, { 4742, 0xfffe }, { 4757, 0xffff }, { 4773, 0xfffb }, + { 4788, 0xffff }, { 4804, 0xffff }, { 4820, 0xffff }, { 4836, 0xfffb }, + /* 0x4800 */ + { 4851, 0xefff }, { 4866, 0xffbf }, { 4881, 0xffff }, { 4897, 0xfbff }, + { 4912, 0xffff }, { 4928, 0xffff }, { 4944, 0xffff }, { 4960, 0xf7fd }, + { 4974, 0x7ff8 }, { 4986, 0xfe7f }, { 5000, 0xfff7 }, { 5015, 0xfbff }, + { 5030, 0xfdff }, { 5045, 0xfffb }, { 5060, 0xffbf }, { 5075, 0xfff7 }, + /* 0x4900 */ + { 5090, 0xfffe }, { 5105, 0xffff }, { 5121, 0xfdf7 }, { 5135, 0xfffb }, + { 5150, 0xff7f }, { 5165, 0xefff }, { 5180, 0xffff }, { 5196, 0x01ff }, + { 5205, 0xff80 }, { 5214, 0xf7ff }, { 5229, 0xfdff }, { 5244, 0x3e3e }, + { 5254, 0x7efe }, { 5267, 0xffff }, { 5283, 0xd5ff }, { 5296, 0xffff }, + /* 0x4a00 */ + { 5312, 0xffff }, { 5328, 0xfbff }, { 5343, 0xffff }, { 5359, 0xffff }, + { 5375, 0xbfef }, { 5389, 0xffff }, { 5405, 0xffff }, { 5421, 0xffff }, + { 5437, 0xffff }, { 5453, 0x7fff }, { 5468, 0xfbff }, { 5483, 0xffff }, + { 5499, 0xffff }, { 5515, 0xffff }, { 5531, 0xffff }, { 5547, 0xffff }, + /* 0x4b00 */ + { 5563, 0xffff }, { 5579, 0xffff }, { 5595, 0xffff }, { 5611, 0xffff }, + { 5627, 0x7fff }, { 5642, 0xefff }, { 5657, 0xfbff }, { 5672, 0xffff }, + { 5688, 0xffff }, { 5704, 0xffff }, { 5720, 0xffff }, { 5736, 0xffff }, + { 5752, 0xffc7 }, { 5765, 0xffff }, { 5781, 0xfdff }, { 5796, 0xf7ff }, + /* 0x4c00 */ + { 5811, 0xff7f }, { 5826, 0xffff }, { 5842, 0xbfff }, { 5857, 0xffb7 }, + { 5871, 0xffff }, { 5887, 0xffff }, { 5903, 0xfbff }, { 5918, 0xffef }, + { 5933, 0xff7f }, { 5948, 0x1eff }, { 5960, 0xffe0 }, { 5971, 0xffbf }, + { 5986, 0xffff }, { 6002, 0xffff }, { 6018, 0xffff }, { 6034, 0xfdff }, + /* 0x4d00 */ + { 6049, 0xffff }, { 6065, 0xfc07 }, { 6074, 0xfeff }, { 6089, 0xffff }, + { 6105, 0xffff }, { 6121, 0xffff }, { 6137, 0xffff }, { 6153, 0xffff }, + { 6169, 0xffff }, { 6185, 0xffff }, { 6201, 0x9fff }, { 6215, 0x003b }, + { 6220, 0x0000 }, { 6220, 0x0000 }, { 6220, 0x0000 }, { 6220, 0x0000 }, + /* 0x4e00 */ + { 6220, 0xffbf }, { 6235, 0xc3f7 }, { 6246, 0xef5f }, { 6259, 0xbb6f }, + { 6271, 0xebef }, { 6284, 0xf7de }, { 6297, 0x070c }, { 6302, 0xc23a }, + { 6309, 0xfbff }, { 6324, 0xfbfe }, { 6338, 0xf97f }, { 6351, 0x56df }, + { 6362, 0xffff }, { 6378, 0xfff1 }, { 6391, 0xc3ff }, { 6403, 0xffff }, + /* 0x4f00 */ + { 6419, 0xffff }, { 6435, 0x3fff }, { 6449, 0xf304 }, { 6456, 0xffff }, + { 6472, 0xffff }, { 6488, 0xffff }, { 6504, 0xffdf }, { 6519, 0xffff }, + { 6535, 0xffff }, { 6551, 0xffff }, { 6567, 0xc80f }, { 6574, 0xffff }, + { 6590, 0xffff }, { 6606, 0xffff }, { 6622, 0xd2bf }, { 6633, 0xffff }, + /* 0x5000 */ + { 6649, 0xffff }, { 6665, 0xffff }, { 6681, 0xffff }, { 6697, 0x93ff }, + { 6709, 0xffff }, { 6725, 0xffff }, { 6741, 0xffff }, { 6757, 0x3fff }, + { 6771, 0xffff }, { 6787, 0xffff }, { 6803, 0xfc4f }, { 6814, 0xffff }, + { 6830, 0xffff }, { 6846, 0xffff }, { 6862, 0xffff }, { 6878, 0xfffb }, + /* 0x5100 */ + { 6893, 0xffff }, { 6909, 0xffff }, { 6925, 0xffff }, { 6941, 0xffff }, + { 6957, 0xffff }, { 6973, 0xffff }, { 6989, 0x7fff }, { 7004, 0xd3ee }, + { 7015, 0xfffd }, { 7030, 0xe3ff }, { 7043, 0x3f7f }, { 7056, 0xf7ff }, + { 7071, 0xffff }, { 7087, 0xffff }, { 7103, 0x753f }, { 7114, 0x67ff }, + /* 0x5200 */ + { 7127, 0xdfff }, { 7142, 0xf1ff }, { 7155, 0xcfff }, { 7169, 0x7fff }, + { 7184, 0xfffa }, { 7198, 0xfffc }, { 7212, 0xffff }, { 7228, 0xfffd }, + { 7243, 0x7fff }, { 7258, 0xffff }, { 7274, 0xfff9 }, { 7288, 0xfffb }, + { 7303, 0xf7ff }, { 7318, 0xfbff }, { 7333, 0xffff }, { 7349, 0xffff }, + /* 0x5300 */ + { 7365, 0xfffb }, { 7380, 0xffff }, { 7396, 0xbfbf }, { 7410, 0xffff }, + { 7426, 0xffff }, { 7442, 0xffbf }, { 7457, 0xf7fb }, { 7471, 0xffff }, + { 7487, 0xcfdd }, { 7499, 0xffdc }, { 7512, 0xfff3 }, { 7526, 0x6fff }, + { 7540, 0xff3f }, { 7554, 0xfefd }, { 7568, 0xffff }, { 7584, 0xbfff }, + /* 0x5400 */ + { 7599, 0xffff }, { 7615, 0xff6f }, { 7629, 0xffff }, { 7645, 0xffff }, + { 7661, 0xffff }, { 7677, 0xe413 }, { 7684, 0xffff }, { 7700, 0xffff }, + { 7716, 0xffff }, { 7732, 0xd57f }, { 7744, 0xffff }, { 7760, 0xffff }, + { 7776, 0xffff }, { 7792, 0x4441 }, { 7796, 0xffff }, { 7812, 0xffff }, + /* 0x5500 */ + { 7828, 0xffff }, { 7844, 0x0fff }, { 7856, 0xffc3 }, { 7868, 0xffff }, + { 7884, 0xffff }, { 7900, 0xffff }, { 7916, 0x0d7f }, { 7926, 0xfcee }, + { 7938, 0xffff }, { 7954, 0xffff }, { 7970, 0xffff }, { 7986, 0x8c7f }, + { 7996, 0xffff }, { 8012, 0xffff }, { 8028, 0xc7ff }, { 8041, 0xffd7 }, + /* 0x5600 */ + { 8055, 0xffff }, { 8071, 0xfbff }, { 8086, 0xffc5 }, { 8098, 0xffff }, + { 8114, 0xffff }, { 8130, 0xc7ff }, { 8143, 0xffff }, { 8159, 0xefff }, + { 8174, 0xffff }, { 8190, 0xffff }, { 8206, 0xffe1 }, { 8218, 0xffff }, + { 8234, 0xbfff }, { 8249, 0xff9f }, { 8263, 0xfffb }, { 8278, 0xbfcf }, + /* 0x5700 */ + { 8291, 0xffbf }, { 8306, 0xfdff }, { 8321, 0xffbf }, { 8336, 0xf87f }, + { 8348, 0xffff }, { 8364, 0x8bff }, { 8376, 0xfffe }, { 8391, 0xffff }, + { 8407, 0xfd8f }, { 8419, 0xffff }, { 8435, 0x5fff }, { 8449, 0xfff0 }, + { 8461, 0xffff }, { 8477, 0xf8bf }, { 8489, 0xffff }, { 8505, 0xffff }, + /* 0x5800 */ + { 8521, 0xffff }, { 8537, 0xff9d }, { 8550, 0xffff }, { 8566, 0xffff }, + { 8582, 0xffbd }, { 8596, 0xffff }, { 8612, 0xbfff }, { 8627, 0xfffe }, + { 8642, 0xffff }, { 8658, 0xfdff }, { 8673, 0xffff }, { 8689, 0xfcbf }, + { 8702, 0xe7ff }, { 8716, 0xff7f }, { 8731, 0xdbdf }, { 8744, 0xfebf }, + /* 0x5900 */ + { 8758, 0xff7f }, { 8773, 0xbfff }, { 8788, 0xffff }, { 8804, 0xf1ff }, + { 8817, 0xfff9 }, { 8831, 0xffbf }, { 8846, 0xffff }, { 8862, 0xffff }, + { 8878, 0xfe7f }, { 8892, 0xffff }, { 8908, 0xf1ff }, { 8921, 0xffff }, + { 8937, 0xffff }, { 8953, 0xffff }, { 8969, 0xffff }, { 8985, 0xffff }, + /* 0x5a00 */ + { 9001, 0xfe1f }, { 9013, 0xffff }, { 9029, 0xffff }, { 9045, 0xffeb }, + { 9059, 0xffff }, { 9075, 0xffff }, { 9091, 0xffff }, { 9107, 0xffaf }, + { 9121, 0xffff }, { 9137, 0xffff }, { 9153, 0xdfff }, { 9168, 0xffff }, + { 9184, 0xffff }, { 9200, 0xffeb }, { 9214, 0xffff }, { 9230, 0xfff9 }, + /* 0x5b00 */ + { 9244, 0xffff }, { 9260, 0xffff }, { 9276, 0xffff }, { 9292, 0xffbf }, + { 9307, 0xffff }, { 9323, 0xbdff }, { 9337, 0xdfff }, { 9352, 0xffff }, + { 9368, 0xffff }, { 9384, 0xfffd }, { 9399, 0xfbfc }, { 9412, 0xdfff }, + { 9427, 0xfdff }, { 9442, 0xffff }, { 9458, 0xffff }, { 9474, 0xe7ff }, + /* 0x5c00 */ + { 9488, 0xfffb }, { 9503, 0xcfff }, { 9517, 0xbf3f }, { 9530, 0xffeb }, + { 9544, 0xfff3 }, { 9558, 0xffff }, { 9574, 0xffbf }, { 9589, 0x7fbb }, + { 9602, 0xfff3 }, { 9616, 0xf2bf }, { 9628, 0xffff }, { 9644, 0x0fff }, + { 9656, 0xffc3 }, { 9668, 0xffff }, { 9684, 0xff66 }, { 9696, 0xffff }, + /* 0x5d00 */ + { 9712, 0xffc3 }, { 9724, 0xffff }, { 9740, 0xdfff }, { 9755, 0xffff }, + { 9771, 0xffff }, { 9787, 0xcaff }, { 9799, 0xffff }, { 9815, 0xffbf }, + { 9830, 0xffff }, { 9846, 0xffff }, { 9862, 0xffff }, { 9878, 0xffff }, + { 9894, 0xffdf }, { 9909, 0xffff }, { 9925, 0x4bff }, { 9937, 0xefff }, + /* 0x5e00 */ + { 9952, 0x7fdf }, { 9966, 0xeffe }, { 9980, 0xff3f }, { 9994, 0xe7fd }, + { 10007, 0xfdff }, { 10022, 0xffff }, { 10038, 0xffff }, { 10054, 0xffff }, + { 10070, 0xffbf }, { 10085, 0x3fe5 }, { 10096, 0xffff }, { 10112, 0xefff }, + { 10127, 0xffff }, { 10143, 0xffff }, { 10159, 0xffef }, { 10174, 0xffff }, + /* 0x5f00 */ + { 10190, 0xfdff }, { 10205, 0xffbf }, { 10220, 0xfbfe }, { 10234, 0xffff }, + { 10250, 0xffdf }, { 10265, 0x7fff }, { 10280, 0xfeff }, { 10295, 0xf7ff }, + { 10310, 0xffff }, { 10326, 0xffdf }, { 10341, 0xffff }, { 10357, 0xffff }, + { 10373, 0xffbf }, { 10388, 0xffff }, { 10404, 0xffff }, { 10420, 0xffff }, + /* 0x6000 */ + { 10436, 0xff81 }, { 10446, 0xffff }, { 10462, 0xffff }, { 10478, 0x23ff }, + { 10489, 0xffff }, { 10505, 0xffff }, { 10521, 0xffff }, { 10537, 0xd03f }, + { 10546, 0xffff }, { 10562, 0xffff }, { 10578, 0x47ff }, { 10590, 0xffff }, + { 10606, 0xffff }, { 10622, 0xffff }, { 10638, 0x47ff }, { 10650, 0xffff }, + /* 0x6100 */ + { 10666, 0xffff }, { 10682, 0xffff }, { 10698, 0xffaf }, { 10712, 0xffff }, + { 10728, 0xffff }, { 10744, 0xfffd }, { 10759, 0xffff }, { 10775, 0xffff }, + { 10791, 0xffff }, { 10807, 0xffff }, { 10823, 0xffff }, { 10839, 0xffff }, + { 10855, 0xffff }, { 10871, 0xffe9 }, { 10884, 0xffff }, { 10900, 0xffef }, + /* 0x6200 */ + { 10915, 0xf7bf }, { 10929, 0xff7f }, { 10944, 0xffff }, { 10960, 0xffff }, + { 10976, 0xffef }, { 10991, 0xff9f }, { 11005, 0xe1ff }, { 11017, 0xffff }, + { 11033, 0xffff }, { 11049, 0x7fff }, { 11064, 0xfff8 }, { 11077, 0xffff }, + { 11093, 0xffff }, { 11109, 0xffff }, { 11125, 0xfc13 }, { 11134, 0xffff }, + /* 0x6300 */ + { 11150, 0xffff }, { 11166, 0x8aff }, { 11177, 0xff0a }, { 11187, 0xffff }, + { 11203, 0xffff }, { 11219, 0x3fff }, { 11233, 0xfff1 }, { 11246, 0xffff }, + { 11262, 0xffff }, { 11278, 0xffff }, { 11294, 0xffff }, { 11310, 0xe447 }, + { 11318, 0xffff }, { 11334, 0xffff }, { 11350, 0xffff }, { 11366, 0x47ff }, + /* 0x6400 */ + { 11378, 0xffc8 }, { 11389, 0xffff }, { 11405, 0xffff }, { 11421, 0xffff }, + { 11437, 0xfacb }, { 11448, 0xffff }, { 11464, 0xffff }, { 11480, 0xffff }, + { 11496, 0xffef }, { 11511, 0xffff }, { 11527, 0xffff }, { 11543, 0xfa5f }, + { 11555, 0xffff }, { 11571, 0x9fff }, { 11585, 0xffff }, { 11601, 0xffff }, + /* 0x6500 */ + { 11617, 0xffff }, { 11633, 0xfffb }, { 11648, 0xffff }, { 11664, 0xffff }, + { 11680, 0xffff }, { 11696, 0xf7ff }, { 11711, 0xfdff }, { 11726, 0x9fff }, + { 11740, 0x7fbf }, { 11754, 0xfff7 }, { 11769, 0xfdff }, { 11784, 0xffff }, + { 11800, 0xfffe }, { 11815, 0xffdf }, { 11830, 0xffff }, { 11846, 0xfe7f }, + /* 0x6600 */ + { 11860, 0xffff }, { 11876, 0xffff }, { 11892, 0xffff }, { 11908, 0x1fff }, + { 11921, 0xffff }, { 11937, 0xff87 }, { 11949, 0xffff }, { 11965, 0xffff }, + { 11981, 0xfff3 }, { 11995, 0xffff }, { 12011, 0xff7f }, { 12026, 0xffff }, + { 12042, 0xffff }, { 12058, 0xffff }, { 12074, 0xffff }, { 12090, 0xd7ff }, + /* 0x6700 */ + { 12104, 0xffff }, { 12120, 0xffff }, { 12136, 0xfdff }, { 12151, 0xfffe }, + { 12166, 0xfff5 }, { 12180, 0xffff }, { 12196, 0xfc67 }, { 12207, 0xffff }, + { 12223, 0xffff }, { 12239, 0xffff }, { 12255, 0xd05e }, { 12263, 0xffff }, + { 12279, 0xffff }, { 12295, 0xffff }, { 12311, 0xffff }, { 12327, 0xdfff }, + /* 0x6800 */ + { 12342, 0x0073 }, { 12347, 0xffff }, { 12363, 0xffff }, { 12379, 0xffff }, + { 12395, 0xffff }, { 12411, 0x47ff }, { 12423, 0xf800 }, { 12428, 0xffff }, + { 12444, 0xdfff }, { 12459, 0xffff }, { 12475, 0xffff }, { 12491, 0x23ff }, + { 12502, 0xfffa }, { 12516, 0xffff }, { 12532, 0xffff }, { 12548, 0xffff }, + /* 0x6900 */ + { 12564, 0xffff }, { 12580, 0x59ff }, { 12592, 0xdea0 }, { 12600, 0xffff }, + { 12616, 0xffff }, { 12632, 0xffff }, { 12648, 0xffff }, { 12664, 0xbfff }, + { 12679, 0xf46d }, { 12689, 0xffff }, { 12705, 0xffff }, { 12721, 0xffff }, + { 12737, 0xffff }, { 12753, 0x03ff }, { 12763, 0xfffe }, { 12778, 0xffff }, + /* 0x6a00 */ + { 12794, 0xffff }, { 12810, 0xffff }, { 12826, 0x3fff }, { 12840, 0xfffc }, + { 12854, 0xffff }, { 12870, 0xffff }, { 12886, 0xffff }, { 12902, 0xe5c7 }, + { 12912, 0xffff }, { 12928, 0xffff }, { 12944, 0xfdff }, { 12959, 0xffff }, + { 12975, 0xfdff }, { 12990, 0xffff }, { 13006, 0xffef }, { 13021, 0xff7f }, + /* 0x6b00 */ + { 13036, 0xffdf }, { 13051, 0x7fff }, { 13066, 0xffff }, { 13082, 0xffff }, + { 13098, 0xffff }, { 13114, 0xffff }, { 13130, 0xffff }, { 13146, 0xefff }, + { 13161, 0xff7f }, { 13176, 0xfbf3 }, { 13189, 0xffff }, { 13205, 0xfffd }, + { 13220, 0xfffb }, { 13235, 0x7ddf }, { 13248, 0xbfff }, { 13263, 0xffff }, + /* 0x6c00 */ + { 13279, 0xbf7f }, { 13293, 0xff7f }, { 13308, 0xfdfb }, { 13322, 0xdbdf }, + { 13335, 0xfe7f }, { 13349, 0xffff }, { 13365, 0xffef }, { 13380, 0xffff }, + { 13396, 0xffff }, { 13412, 0xffff }, { 13428, 0xfc0f }, { 13438, 0xffff }, + { 13454, 0xffff }, { 13470, 0xffff }, { 13486, 0xffff }, { 13502, 0x823f }, + /* 0x6d00 */ + { 13510, 0xffff }, { 13526, 0xffff }, { 13542, 0xffff }, { 13558, 0xffff }, + { 13574, 0x003f }, { 13580, 0xffc0 }, { 13590, 0xffff }, { 13606, 0xffff }, + { 13622, 0xffff }, { 13638, 0x0fff }, { 13650, 0xfc20 }, { 13657, 0xffff }, + { 13673, 0xffff }, { 13689, 0xffff }, { 13705, 0xffff }, { 13721, 0xffff }, + /* 0x6e00 */ + { 13737, 0x9fff }, { 13751, 0xffa4 }, { 13762, 0xffff }, { 13778, 0xffff }, + { 13794, 0xffff }, { 13810, 0xffff }, { 13826, 0xffff }, { 13842, 0x7fff }, + { 13857, 0xef55 }, { 13868, 0xffff }, { 13884, 0xffff }, { 13900, 0xffff }, + { 13916, 0xffff }, { 13932, 0x3fff }, { 13946, 0xfb48 }, { 13955, 0xffff }, + /* 0x6f00 */ + { 13971, 0xffff }, { 13987, 0xffff }, { 14003, 0xffff }, { 14019, 0xffff }, + { 14035, 0xd77f }, { 14048, 0xffff }, { 14064, 0xffff }, { 14080, 0xffff }, + { 14096, 0xffff }, { 14112, 0xe7ff }, { 14126, 0xffff }, { 14142, 0xffff }, + { 14158, 0xffff }, { 14174, 0xfff9 }, { 14188, 0xffff }, { 14204, 0xfdff }, + /* 0x7000 */ + { 14219, 0xffff }, { 14235, 0xffff }, { 14251, 0xffff }, { 14267, 0xffff }, + { 14283, 0x3fff }, { 14297, 0xfffe }, { 14312, 0xdfff }, { 14327, 0xffff }, + { 14343, 0xfffe }, { 14358, 0x8fff }, { 14371, 0xffff }, { 14387, 0xcfff }, + { 14401, 0xfff1 }, { 14414, 0xffff }, { 14430, 0xc43f }, { 14439, 0xffff }, + /* 0x7100 */ + { 14455, 0xffff }, { 14471, 0xfe8f }, { 14483, 0xffff }, { 14499, 0xafff }, + { 14513, 0xfffe }, { 14528, 0xffdf }, { 14543, 0xffff }, { 14559, 0xfff7 }, + { 14574, 0xffff }, { 14590, 0xffff }, { 14606, 0xffff }, { 14622, 0xffff }, + { 14638, 0xffff }, { 14654, 0xffff }, { 14670, 0xffff }, { 14686, 0xff3f }, + /* 0x7200 */ + { 14700, 0xffff }, { 14716, 0xffff }, { 14732, 0xffff }, { 14748, 0xff75 }, + { 14761, 0xdfff }, { 14776, 0xefff }, { 14791, 0xffff }, { 14807, 0xffdf }, + { 14822, 0xfbff }, { 14837, 0xffff }, { 14853, 0xfffe }, { 14868, 0xfe7f }, + { 14882, 0xfeff }, { 14897, 0xbfff }, { 14912, 0x3fff }, { 14926, 0xfff8 }, + /* 0x7300 */ + { 14939, 0xfff7 }, { 14954, 0x7fff }, { 14969, 0xfffc }, { 14983, 0xfdff }, + { 14998, 0xffff }, { 15014, 0xffff }, { 15030, 0xdfe7 }, { 15043, 0xffff }, + { 15059, 0xffff }, { 15075, 0xf1ff }, { 15088, 0xbfff }, { 15103, 0xfffc }, + { 15117, 0xffff }, { 15133, 0xfffd }, { 15148, 0xffff }, { 15164, 0xfff8 }, + /* 0x7400 */ + { 15177, 0x3fff }, { 15191, 0xfffc }, { 15205, 0xffff }, { 15221, 0xff7f }, + { 15236, 0xffff }, { 15252, 0xffff }, { 15268, 0xffff }, { 15284, 0xff7f }, + { 15299, 0xbfff }, { 15314, 0xffff }, { 15330, 0xffff }, { 15346, 0xffff }, + { 15362, 0xffff }, { 15378, 0xfffb }, { 15393, 0xff7f }, { 15408, 0xeff8 }, + /* 0x7500 */ + { 15420, 0xffdf }, { 15435, 0xfdff }, { 15450, 0xffff }, { 15466, 0xefcf }, + { 15479, 0xffdf }, { 15494, 0xfffb }, { 15509, 0xfdfe }, { 15523, 0xffe7 }, + { 15537, 0xdffb }, { 15551, 0x7f3f }, { 15564, 0x0ffc }, { 15574, 0xffff }, + { 15590, 0xfcff }, { 15604, 0xffbf }, { 15619, 0xf0ff }, { 15631, 0xffff }, + /* 0x7600 */ + { 15647, 0xff8f }, { 15660, 0xfe7f }, { 15674, 0xf3ff }, { 15688, 0x3fff }, + { 15702, 0xdfff }, { 15717, 0x9fff }, { 15731, 0xf7b7 }, { 15744, 0xfbff }, + { 15759, 0xffff }, { 15775, 0xfffd }, { 15790, 0xffff }, { 15806, 0xfff9 }, + { 15820, 0x7fff }, { 15835, 0xfffc }, { 15849, 0xffff }, { 15865, 0xffff }, + /* 0x7700 */ + { 15881, 0xcfff }, { 15895, 0xffff }, { 15911, 0xefff }, { 15926, 0xffff }, + { 15942, 0xffff }, { 15958, 0xfffc }, { 15972, 0xffff }, { 15988, 0xffff }, + { 16004, 0xffbf }, { 16019, 0xfff3 }, { 16033, 0xffff }, { 16049, 0xffff }, + { 16065, 0xf6ff }, { 16079, 0xffff }, { 16095, 0xf7ff }, { 16110, 0x7fff }, + /* 0x7800 */ + { 16125, 0xfffc }, { 16139, 0xeb3f }, { 16151, 0xffff }, { 16167, 0x21ff }, + { 16177, 0xfffc }, { 16191, 0xf11f }, { 16201, 0xffff }, { 16217, 0xff43 }, + { 16228, 0xffff }, { 16244, 0xf7ff }, { 16259, 0xffff }, { 16275, 0xff9f }, + { 16289, 0xffff }, { 16305, 0xfd7f }, { 16319, 0xffff }, { 16335, 0xffdf }, + /* 0x7900 */ + { 16350, 0xfff7 }, { 16365, 0xffbf }, { 16380, 0xffff }, { 16396, 0xf7e7 }, + { 16409, 0xbff7 }, { 16423, 0xffff }, { 16439, 0x7fff }, { 16454, 0xfeff }, + { 16469, 0xffdf }, { 16484, 0xffff }, { 16500, 0xffff }, { 16516, 0xffff }, + { 16532, 0xffff }, { 16548, 0xffff }, { 16564, 0x7fff }, { 16579, 0x9fef }, + /* 0x7a00 */ + { 16592, 0xffff }, { 16608, 0xffff }, { 16624, 0xffe7 }, { 16638, 0xffff }, + { 16654, 0xfff7 }, { 16669, 0x9ff9 }, { 16681, 0xfff7 }, { 16696, 0xff7f }, + { 16711, 0x9fff }, { 16725, 0xcfff }, { 16739, 0xdf9f }, { 16752, 0xffff }, + { 16768, 0xfff7 }, { 16783, 0xbfbf }, { 16797, 0xffff }, { 16813, 0xffff }, + /* 0x7b00 */ + { 16829, 0xff73 }, { 16842, 0xffdf }, { 16857, 0xffff }, { 16873, 0xabff }, + { 16886, 0xffff }, { 16902, 0xc3ff }, { 16914, 0xffff }, { 16930, 0x0bff }, + { 16941, 0xfffe }, { 16956, 0xfbff }, { 16971, 0xf03f }, { 16981, 0xffff }, + { 16997, 0x7fff }, { 17012, 0xfff1 }, { 17025, 0x3fff }, { 17039, 0xffff }, + /* 0x7c00 */ + { 17055, 0xffff }, { 17071, 0xff37 }, { 17084, 0xffff }, { 17100, 0xfffd }, + { 17115, 0xfffd }, { 17130, 0xffff }, { 17146, 0xfffd }, { 17161, 0xffff }, + { 17177, 0x7ffb }, { 17191, 0xfffe }, { 17206, 0xdbff }, { 17220, 0xffff }, + { 17236, 0xffff }, { 17252, 0xfeff }, { 17267, 0xffff }, { 17283, 0xfdff }, + /* 0x7d00 */ + { 17298, 0xffff }, { 17314, 0xffff }, { 17330, 0xff3f }, { 17344, 0xffff }, + { 17360, 0xffff }, { 17376, 0xffff }, { 17392, 0xffff }, { 17408, 0xff7f }, + { 17423, 0xffff }, { 17439, 0xf3ff }, { 17453, 0xffff }, { 17469, 0xffff }, + { 17485, 0xffff }, { 17501, 0xffcf }, { 17515, 0xffff }, { 17531, 0xffff }, + /* 0x7e00 */ + { 17547, 0xff9f }, { 17561, 0xffff }, { 17577, 0xfeff }, { 17592, 0xffff }, + { 17608, 0xf3ff }, { 17622, 0xffff }, { 17638, 0xff7f }, { 17653, 0xffff }, + { 17669, 0xfff7 }, { 17684, 0x7ffe }, { 17698, 0x0000 }, { 17698, 0x0000 }, + { 17698, 0x0000 }, { 17698, 0x0000 }, { 17698, 0x0000 }, { 17698, 0x0000 }, + /* 0x7f00 */ + { 17698, 0x0000 }, { 17698, 0x0000 }, { 17698, 0x0000 }, { 17698, 0xffc0 }, + { 17708, 0xfdfb }, { 17722, 0xfbb7 }, { 17735, 0xffff }, { 17751, 0xffef }, + { 17766, 0xfffd }, { 17781, 0x7fff }, { 17796, 0xfbff }, { 17811, 0xffff }, + { 17827, 0xffff }, { 17843, 0xf8ff }, { 17856, 0xffff }, { 17872, 0xffff }, + /* 0x8000 */ + { 17888, 0xffff }, { 17904, 0xffff }, { 17920, 0xff7b }, { 17934, 0xffff }, + { 17950, 0xc7fb }, { 17962, 0xffef }, { 17977, 0xfdfb }, { 17991, 0xffff }, + { 18007, 0xfff6 }, { 18021, 0xffff }, { 18037, 0xfffe }, { 18052, 0x0fff }, + { 18064, 0xfffc }, { 18078, 0xffff }, { 18094, 0xe07f }, { 18104, 0xffff }, + /* 0x8100 */ + { 18120, 0x07ff }, { 18131, 0xfff0 }, { 18143, 0xffff }, { 18159, 0xfe13 }, + { 18169, 0xffff }, { 18185, 0xf93f }, { 18197, 0xffff }, { 18213, 0xa7ff }, + { 18226, 0xffff }, { 18242, 0xfffd }, { 18257, 0xffcf }, { 18271, 0xffbf }, + { 18286, 0xffff }, { 18302, 0xeff7 }, { 18316, 0xffff }, { 18332, 0xffff }, + /* 0x8200 */ + { 18348, 0xffbf }, { 18363, 0xff7f }, { 18378, 0xbff7 }, { 18392, 0xb7fc }, + { 18404, 0xdfff }, { 18419, 0xdfef }, { 18433, 0xfffe }, { 18448, 0xfbfe }, + { 18462, 0xfefb }, { 18476, 0xff7f }, { 18491, 0xffff }, { 18507, 0xffff }, + { 18523, 0x063f }, { 18531, 0xffff }, { 18547, 0xffff }, { 18563, 0xffff }, + /* 0x8300 */ + { 18579, 0x7fff }, { 18594, 0xffc5 }, { 18606, 0xffff }, { 18622, 0xffff }, + { 18638, 0xffff }, { 18654, 0x01ff }, { 18663, 0x000c }, { 18665, 0xffff }, + { 18681, 0xffff }, { 18697, 0xffff }, { 18713, 0xffff }, { 18729, 0xe281 }, + { 18735, 0xffff }, { 18751, 0xffff }, { 18767, 0xffff }, { 18783, 0xffff }, + /* 0x8400 */ + { 18799, 0xffff }, { 18815, 0xc9ff }, { 18827, 0xfe0a }, { 18836, 0xffff }, + { 18852, 0xffff }, { 18868, 0xffff }, { 18884, 0xffff }, { 18900, 0xffff }, + { 18916, 0xe15f }, { 18926, 0xffff }, { 18942, 0xffff }, { 18958, 0xffff }, + { 18974, 0xffff }, { 18990, 0x4dff }, { 19002, 0xff96 }, { 19014, 0xffff }, + /* 0x8500 */ + { 19030, 0xffff }, { 19046, 0xffff }, { 19062, 0xffff }, { 19078, 0xe93f }, + { 19089, 0xffff }, { 19105, 0xffff }, { 19121, 0xffff }, { 19137, 0xffeb }, + { 19151, 0xffff }, { 19167, 0xffff }, { 19183, 0x9fff }, { 19197, 0xffff }, + { 19213, 0xffff }, { 19229, 0xfff7 }, { 19244, 0xffff }, { 19260, 0xffff }, + /* 0x8600 */ + { 19276, 0xffff }, { 19292, 0xffeb }, { 19306, 0xffff }, { 19322, 0xfffe }, + { 19337, 0x7fef }, { 19351, 0xffff }, { 19367, 0xffff }, { 19383, 0x7fff }, + { 19398, 0xfff0 }, { 19410, 0xffff }, { 19426, 0xe7ff }, { 19440, 0xffff }, + { 19456, 0x9fff }, { 19470, 0xffff }, { 19486, 0x7fff }, { 19501, 0xffe0 }, + /* 0x8700 */ + { 19512, 0xffff }, { 19528, 0xff7f }, { 19543, 0xffff }, { 19559, 0xffff }, + { 19575, 0xf4ff }, { 19588, 0xffff }, { 19604, 0xffff }, { 19620, 0x3fff }, + { 19634, 0xfffe }, { 19649, 0xffff }, { 19665, 0xfe3f }, { 19678, 0xffff }, + { 19694, 0x7fff }, { 19709, 0xfffe }, { 19724, 0xffff }, { 19740, 0xffff }, + /* 0x8800 */ + { 19756, 0xffff }, { 19772, 0xffff }, { 19788, 0xffff }, { 19804, 0xffff }, + { 19820, 0xffff }, { 19836, 0xffef }, { 19851, 0xefcf }, { 19864, 0xffff }, + { 19880, 0xff9f }, { 19894, 0xffff }, { 19910, 0x1fff }, { 19923, 0xfffe }, + { 19938, 0xfe07 }, { 19948, 0xffff }, { 19964, 0xffc3 }, { 19976, 0xffff }, + /* 0x8900 */ + { 19992, 0xffef }, { 20007, 0xcfff }, { 20021, 0xffff }, { 20037, 0xffef }, + { 20052, 0xff5f }, { 20066, 0xffdf }, { 20081, 0xfeff }, { 20096, 0xffff }, + { 20112, 0xfffe }, { 20127, 0xffff }, { 20143, 0xffff }, { 20159, 0xffff }, + { 20175, 0x0001 }, { 20176, 0xbffc }, { 20189, 0x7fff }, { 20204, 0xffff }, + /* 0x8a00 */ + { 20220, 0xfffd }, { 20235, 0xfbff }, { 20250, 0xffff }, { 20266, 0xfff7 }, + { 20281, 0xffff }, { 20297, 0x7fff }, { 20312, 0xffff }, { 20328, 0xffff }, + { 20344, 0xf9ff }, { 20358, 0xffff }, { 20374, 0xbfff }, { 20389, 0xffff }, + { 20405, 0xffff }, { 20421, 0xfbff }, { 20436, 0xffff }, { 20452, 0xffff }, + /* 0x8b00 */ + { 20468, 0xffff }, { 20484, 0xffff }, { 20500, 0xfffd }, { 20515, 0xffff }, + { 20531, 0xffff }, { 20547, 0xf7ff }, { 20562, 0xffff }, { 20578, 0xfffb }, + { 20593, 0x7fff }, { 20608, 0xffff }, { 20624, 0x0000 }, { 20624, 0x0000 }, + { 20624, 0x0000 }, { 20624, 0x0000 }, { 20624, 0x0000 }, { 20624, 0x0000 }, + /* 0x8c00 */ + { 20624, 0x0000 }, { 20624, 0x0000 }, { 20624, 0x0000 }, { 20624, 0xff80 }, + { 20633, 0xffff }, { 20649, 0xffff }, { 20665, 0xbfff }, { 20680, 0xffff }, + { 20696, 0xffff }, { 20712, 0xffff }, { 20728, 0xffff }, { 20744, 0xffff }, + { 20760, 0xbfff }, { 20775, 0xffff }, { 20791, 0xffff }, { 20807, 0xffff }, + /* 0x8d00 */ + { 20823, 0xffff }, { 20839, 0x1fff }, { 20852, 0x0000 }, { 20852, 0x0000 }, + { 20852, 0x0000 }, { 20852, 0x0000 }, { 20852, 0xfbf0 }, { 20863, 0xffdf }, + { 20878, 0xffff }, { 20894, 0xffff }, { 20910, 0xffff }, { 20926, 0xfefd }, + { 20940, 0xffef }, { 20955, 0xbfff }, { 20970, 0xffdf }, { 20985, 0xf41f }, + /* 0x8e00 */ + { 20995, 0xafff }, { 21009, 0xffff }, { 21025, 0x4fff }, { 21038, 0xffff }, + { 21054, 0xffff }, { 21070, 0xfffb }, { 21085, 0xffff }, { 21101, 0x1fff }, + { 21114, 0x7ffe }, { 21128, 0xe7ff }, { 21142, 0xffff }, { 21158, 0xf7df }, + { 21172, 0xfedf }, { 21186, 0xffff }, { 21202, 0xfff3 }, { 21216, 0xffff }, + /* 0x8f00 */ + { 21232, 0xefff }, { 21247, 0xffff }, { 21263, 0xffff }, { 21279, 0xffff }, + { 21295, 0xefff }, { 21310, 0xffff }, { 21326, 0x003f }, { 21332, 0x0000 }, + { 21332, 0x0000 }, { 21332, 0xf800 }, { 21337, 0xf5ff }, { 21351, 0xdbff }, + { 21365, 0xffff }, { 21381, 0x93ff }, { 21393, 0xffff }, { 21409, 0xfff3 }, + /* 0x9000 */ + { 21423, 0xfbff }, { 21438, 0xffff }, { 21454, 0xff3f }, { 21468, 0xfdff }, + { 21483, 0xffff }, { 21499, 0xff3f }, { 21513, 0xffdf }, { 21528, 0xffff }, + { 21544, 0xffff }, { 21560, 0xdfff }, { 21575, 0xefff }, { 21590, 0xf3ff }, + { 21604, 0x7fff }, { 21619, 0xfff4 }, { 21632, 0xff3f }, { 21646, 0xfeff }, + /* 0x9100 */ + { 21661, 0xffff }, { 21677, 0xffff }, { 21693, 0xffff }, { 21709, 0xffff }, + { 21725, 0xfffb }, { 21740, 0x97ff }, { 21753, 0xffbf }, { 21768, 0x1ffd }, + { 21780, 0xffff }, { 21796, 0xff7f }, { 21811, 0xffef }, { 21826, 0xfeff }, + { 21841, 0xfaff }, { 21855, 0xfffb }, { 21870, 0xfffd }, { 21885, 0xe3ff }, + /* 0x9200 */ + { 21898, 0xffff }, { 21914, 0xffff }, { 21930, 0xe8ff }, { 21942, 0xffff }, + { 21958, 0xffff }, { 21974, 0xffff }, { 21990, 0xffff }, { 22006, 0xfffd }, + { 22021, 0xffff }, { 22037, 0xffff }, { 22053, 0xffff }, { 22069, 0xffff }, + { 22085, 0xffff }, { 22101, 0xffff }, { 22117, 0xffff }, { 22133, 0xffff }, + /* 0x9300 */ + { 22149, 0xffff }, { 22165, 0xffff }, { 22181, 0xffff }, { 22197, 0xbfff }, + { 22212, 0xffed }, { 22226, 0xffff }, { 22242, 0xffff }, { 22258, 0xffff }, + { 22274, 0xffff }, { 22290, 0xffff }, { 22306, 0xffff }, { 22322, 0xfbff }, + { 22337, 0xffff }, { 22353, 0xffff }, { 22369, 0xffff }, { 22385, 0xfffe }, + /* 0x9400 */ + { 22400, 0xffff }, { 22416, 0xffff }, { 22432, 0xffbd }, { 22446, 0xffff }, + { 22462, 0xfffd }, { 22477, 0xfff7 }, { 22492, 0xffff }, { 22508, 0xffff }, + { 22524, 0x001f }, { 22529, 0x0000 }, { 22529, 0x0000 }, { 22529, 0x0000 }, + { 22529, 0x0000 }, { 22529, 0x0000 }, { 22529, 0x0000 }, { 22529, 0x0000 }, + /* 0x9500 */ + { 22529, 0x0000 }, { 22529, 0x0000 }, { 22529, 0x0000 }, { 22529, 0x0000 }, + { 22529, 0x0000 }, { 22529, 0x0000 }, { 22529, 0x0000 }, { 22529, 0x7f80 }, + { 22537, 0xfbff }, { 22552, 0xffff }, { 22568, 0xfbff }, { 22583, 0xffff }, + { 22599, 0x7fff }, { 22614, 0xffff }, { 22630, 0x00ff }, { 22638, 0x0020 }, + /* 0x9600 */ + { 22639, 0x0000 }, { 22639, 0x7000 }, { 22642, 0xffff }, { 22658, 0xff9f }, + { 22672, 0xfc1f }, { 22683, 0xffff }, { 22699, 0xfc1f }, { 22710, 0xfbff }, + { 22725, 0xffff }, { 22741, 0xfffe }, { 22756, 0xffff }, { 22772, 0xffff }, + { 22788, 0xffff }, { 22804, 0xffff }, { 22820, 0xfffe }, { 22835, 0xbff7 }, + /* 0x9700 */ + { 22849, 0xfffd }, { 22864, 0xffff }, { 22880, 0xdfff }, { 22895, 0xffff }, + { 22911, 0x2fff }, { 22924, 0xffe7 }, { 22938, 0xffdf }, { 22953, 0xfffd }, + { 22968, 0xffbf }, { 22983, 0xfff8 }, { 22996, 0x7fff }, { 23011, 0xffff }, + { 23027, 0xffff }, { 23043, 0xffff }, { 23059, 0xe03f }, { 23068, 0xffff }, + /* 0x9800 */ + { 23084, 0xffff }, { 23100, 0xffff }, { 23116, 0xefff }, { 23131, 0xffff }, + { 23147, 0xffff }, { 23163, 0xffff }, { 23179, 0xffff }, { 23195, 0x001f }, + { 23200, 0x0000 }, { 23200, 0x0000 }, { 23200, 0xfb00 }, { 23207, 0xffef }, + { 23222, 0x3fdf }, { 23235, 0xb800 }, { 23239, 0xbefe }, { 23252, 0xffff }, + /* 0x9900 */ + { 23268, 0x5fff }, { 23282, 0xffff }, { 23298, 0xffff }, { 23314, 0xffff }, + { 23330, 0xffff }, { 23346, 0xffff }, { 23362, 0x0003 }, { 23364, 0x0000 }, + { 23364, 0x0000 }, { 23364, 0xffc0 }, { 23374, 0xffff }, { 23390, 0xffff }, + { 23406, 0xffdf }, { 23421, 0xffff }, { 23437, 0xffff }, { 23453, 0xfffb }, + /* 0x9a00 */ + { 23468, 0xffff }, { 23484, 0xfff3 }, { 23498, 0xfeff }, { 23513, 0xffff }, + { 23529, 0xffff }, { 23545, 0xffff }, { 23561, 0x0fff }, { 23573, 0x0000 }, + { 23573, 0x0000 }, { 23573, 0x0000 }, { 23573, 0xff00 }, { 23581, 0xffff }, + { 23597, 0xe7df }, { 23610, 0xffff }, { 23626, 0xffff }, { 23642, 0xffff }, + /* 0x9b00 */ + { 23658, 0xffff }, { 23674, 0xfff7 }, { 23689, 0xffff }, { 23705, 0xffbf }, + { 23720, 0xff7f }, { 23735, 0xbfff }, { 23750, 0xffff }, { 23766, 0xfeff }, + { 23781, 0xffff }, { 23797, 0xff7f }, { 23812, 0xffff }, { 23828, 0xffeb }, + { 23842, 0xbfff }, { 23857, 0xfffc }, { 23871, 0xffff }, { 23887, 0xffd9 }, + /* 0x9c00 */ + { 23900, 0xffff }, { 23916, 0xf8ff }, { 23929, 0xffff }, { 23945, 0xfffe }, + { 23960, 0xffff }, { 23976, 0xe3ff }, { 23989, 0xf1ff }, { 24002, 0x0ffe }, + { 24013, 0x0000 }, { 24013, 0x0000 }, { 24013, 0x0000 }, { 24013, 0x0000 }, + { 24013, 0x0000 }, { 24013, 0x0000 }, { 24013, 0xffe0 }, { 24024, 0xfffe }, + /* 0x9d00 */ + { 24039, 0xbfff }, { 24054, 0xffff }, { 24070, 0xe7ff }, { 24084, 0xffff }, + { 24100, 0xfebf }, { 24114, 0xffff }, { 24130, 0xffdf }, { 24145, 0xffff }, + { 24161, 0x1fff }, { 24174, 0xffff }, { 24190, 0xf7ff }, { 24205, 0xffff }, + { 24221, 0xffbf }, { 24236, 0xffff }, { 24252, 0xffff }, { 24268, 0xffff }, + /* 0x9e00 */ + { 24284, 0xffff }, { 24300, 0x7fff }, { 24315, 0x0000 }, { 24315, 0x0000 }, + { 24315, 0x0000 }, { 24315, 0x0000 }, { 24315, 0x0000 }, { 24315, 0xbee0 }, + { 24324, 0xffff }, { 24340, 0xffff }, { 24356, 0xffff }, { 24372, 0xf8ff }, + { 24385, 0xfdff }, { 24400, 0xffff }, { 24416, 0xf9fd }, { 24429, 0xffff }, + /* 0x9f00 */ + { 24445, 0xc7ff }, { 24458, 0xffff }, { 24474, 0xfffd }, { 24489, 0xffff }, + { 24505, 0xffff }, { 24521, 0xfffd }, { 24536, 0xfffb }, { 24551, 0x7fff }, + { 24566, 0xe000 }, { 24569, 0x73ff }, { 24582, 0x003f }, +}; +static const Summary16 cns11643_inv_uni2indx_pagefa[3] = { + /* 0xfa00 */ + { 24588, 0x0000 }, { 24588, 0x0000 }, { 24588, 0x0100 }, +}; +static const Summary16 cns11643_inv_uni2indx_pagefe[31] = { + /* 0xfe00 */ + { 24589, 0x0000 }, { 24589, 0x0000 }, { 24589, 0x0000 }, { 24589, 0xffe7 }, + { 24603, 0x7e1f }, { 24614, 0xfef7 }, { 24628, 0x0f7f }, { 24639, 0x0000 }, + { 24639, 0x0000 }, { 24639, 0x0000 }, { 24639, 0x0000 }, { 24639, 0x0000 }, + { 24639, 0x0000 }, { 24639, 0x0000 }, { 24639, 0x0000 }, { 24639, 0x0000 }, + /* 0xff00 */ + { 24639, 0xff7a }, { 24652, 0xffff }, { 24668, 0xffff }, { 24684, 0x97ff }, + { 24697, 0xfffe }, { 24712, 0x3fff }, { 24726, 0x0000 }, { 24726, 0x0000 }, + { 24726, 0x0000 }, { 24726, 0x0000 }, { 24726, 0x0000 }, { 24726, 0x0000 }, + { 24726, 0x0000 }, { 24726, 0x0000 }, { 24726, 0x0023 }, +}; +static const Summary16 cns11643_inv_uni2indx_page200[2670] = { + /* 0x20000 */ + { 24729, 0x8bbd }, { 24739, 0x0715 }, { 24745, 0x722f }, { 24754, 0x0860 }, + { 24757, 0x39ca }, { 24765, 0x08ec }, { 24771, 0xeaf6 }, { 24782, 0xe0d7 }, + { 24791, 0xb1fc }, { 24801, 0x5fbc }, { 24812, 0xd33d }, { 24822, 0xf6ff }, + { 24836, 0x8a5c }, { 24843, 0xc377 }, { 24853, 0x24f3 }, { 24861, 0x795f }, + /* 0x20100 */ + { 24872, 0xfff4 }, { 24885, 0xeefe }, { 24898, 0x751f }, { 24908, 0x03b7 }, + { 24916, 0x9fb9 }, { 24927, 0xe3fa }, { 24938, 0xfebf }, { 24952, 0x4071 }, + { 24957, 0xd6ff }, { 24970, 0x3004 }, { 24973, 0xb3f8 }, { 24983, 0x1ff5 }, + { 24994, 0x8ffc }, { 25005, 0xff11 }, { 25015, 0x0fff }, { 25027, 0xc096 }, + /* 0x20200 */ + { 25033, 0xfffb }, { 25048, 0xffe3 }, { 25061, 0xf787 }, { 25072, 0xffff }, + { 25088, 0xfff0 }, { 25100, 0x0977 }, { 25108, 0x7ffe }, { 25122, 0xffce }, + { 25135, 0x1dff }, { 25147, 0x4056 }, { 25152, 0x7ffd }, { 25166, 0x4fff }, + { 25179, 0xfffe }, { 25194, 0x287f }, { 25203, 0xffae }, { 25216, 0xffff }, + /* 0x20300 */ + { 25232, 0xfb81 }, { 25241, 0x119f }, { 25249, 0xfe03 }, { 25258, 0xdeff }, + { 25272, 0xff11 }, { 25282, 0xc17f }, { 25292, 0xdf84 }, { 25301, 0x0fff }, + { 25313, 0xfffc }, { 25327, 0x4fff }, { 25340, 0xd08e }, { 25347, 0xffcf }, + { 25361, 0xf59f }, { 25373, 0x04d7 }, { 25380, 0xff9e }, { 25393, 0x0dd1 }, + /* 0x20400 */ + { 25400, 0x7f41 }, { 25409, 0x8de4 }, { 25417, 0xcdfe }, { 25429, 0xfc6f }, + { 25441, 0xf037 }, { 25450, 0xbf8e }, { 25461, 0xefd0 }, { 25471, 0xeecc }, + { 25481, 0x3d7b }, { 25492, 0xcff9 }, { 25504, 0x2f1f }, { 25514, 0xbf7f }, + { 25528, 0xfb5c }, { 25539, 0xb9ac }, { 25548, 0xecb3 }, { 25558, 0x21db }, + /* 0x20500 */ + { 25566, 0xdfdf }, { 25580, 0xbfed }, { 25593, 0x8fa7 }, { 25603, 0x73fa }, + { 25614, 0x6d5e }, { 25624, 0xed5f }, { 25636, 0xf3fd }, { 25649, 0x2eef }, + { 25660, 0xb433 }, { 25668, 0xd6ff }, { 25681, 0x4acf }, { 25690, 0x3fd6 }, + { 25701, 0x7fff }, { 25716, 0x7fbe }, { 25729, 0xf5e6 }, { 25740, 0xfcfe }, + /* 0x20600 */ + { 25753, 0x7ff1 }, { 25765, 0xf9de }, { 25777, 0xfabf }, { 25790, 0xf5ef }, + { 25803, 0xbfc1 }, { 25813, 0xbf8f }, { 25825, 0xef87 }, { 25836, 0xefef }, + { 25850, 0xe9c7 }, { 25860, 0xefc6 }, { 25871, 0xffea }, { 25884, 0xff9f }, + { 25898, 0xe39f }, { 25909, 0x0fff }, { 25921, 0xffe1 }, { 25933, 0xfbf7 }, + /* 0x20700 */ + { 25947, 0x12c4 }, { 25952, 0xbfff }, { 25967, 0x016f }, { 25974, 0xffff }, + { 25990, 0x3f3f }, { 26002, 0xef06 }, { 26011, 0xe7bf }, { 26024, 0xe002 }, + { 26028, 0xffff }, { 26044, 0x311f }, { 26052, 0xfff0 }, { 26064, 0xf88f }, + { 26074, 0xfffe }, { 26089, 0x9fff }, { 26103, 0xffc0 }, { 26113, 0xfc2b }, + /* 0x20800 */ + { 26123, 0xe9ff }, { 26136, 0xf88d }, { 26145, 0xdccf }, { 26156, 0xfbdf }, + { 26170, 0x31de }, { 26179, 0xc3fe }, { 26190, 0xff47 }, { 26202, 0xfb37 }, + { 26214, 0xcff7 }, { 26227, 0x03fc }, { 26235, 0xa1ff }, { 26246, 0x9fdf }, + { 26259, 0xfffb }, { 26274, 0xf7de }, { 26287, 0xcfff }, { 26301, 0xffbb }, + /* 0x20900 */ + { 26315, 0xcfbb }, { 26327, 0xdfbf }, { 26341, 0xfd3f }, { 26354, 0xd77b }, + { 26366, 0xde3f }, { 26378, 0x7e4f }, { 26389, 0xfe6e }, { 26401, 0x6dff }, + { 26414, 0x31ed }, { 26423, 0xff7e }, { 26437, 0x3c7f }, { 26448, 0x70f3 }, + { 26457, 0xc517 }, { 26465, 0xdf9b }, { 26477, 0xff7f }, { 26492, 0x3ffc }, + /* 0x20a00 */ + { 26504, 0xebef }, { 26517, 0xff5d }, { 26530, 0xf0ad }, { 26539, 0x2ff7 }, + { 26551, 0xfc9f }, { 26563, 0xffc6 }, { 26575, 0xffdd }, { 26589, 0xff1f }, + { 26602, 0xffd0 }, { 26613, 0xff7e }, { 26627, 0xec75 }, { 26637, 0xfe29 }, + { 26647, 0x5387 }, { 26655, 0xc6bd }, { 26665, 0x1ff5 }, { 26676, 0x9e1b }, + /* 0x20b00 */ + { 26685, 0xc5f7 }, { 26696, 0xfd8b }, { 26707, 0xffee }, { 26721, 0xbffe }, + { 26735, 0xfebf }, { 26749, 0xffff }, { 26765, 0xffeb }, { 26779, 0xd97f }, + { 26791, 0xeffe }, { 26805, 0x7fff }, { 26820, 0xfdff }, { 26835, 0x0fbf }, + { 26846, 0xff46 }, { 26857, 0x7fff }, { 26872, 0x59fa }, { 26882, 0x0068 }, + /* 0x20c00 */ + { 26885, 0xff30 }, { 26895, 0x7fff }, { 26910, 0xfffe }, { 26925, 0x8165 }, + { 26931, 0x4001 }, { 26933, 0xffff }, { 26949, 0xfbff }, { 26964, 0xfe2f }, + { 26976, 0xdbff }, { 26990, 0x0089 }, { 26993, 0xee00 }, { 26999, 0xffff }, + { 27015, 0x7fff }, { 27030, 0xf800 }, { 27035, 0xcfff }, { 27049, 0x8f93 }, + /* 0x20d00 */ + { 27058, 0x0008 }, { 27059, 0x0000 }, { 27059, 0xffce }, { 27072, 0xffff }, + { 27088, 0x040f }, { 27093, 0xfffe }, { 27108, 0x0427 }, { 27113, 0x02a5 }, + { 27118, 0x0000 }, { 27118, 0x0000 }, { 27118, 0x7f80 }, { 27126, 0xfdbf }, + { 27140, 0xffff }, { 27156, 0xfffe }, { 27171, 0xff80 }, { 27180, 0x79ff }, + /* 0x20e00 */ + { 27193, 0x3011 }, { 27197, 0x2040 }, { 27199, 0x6000 }, { 27201, 0x8fef }, + { 27213, 0xffff }, { 27229, 0xdfff }, { 27244, 0x4fff }, { 27257, 0x8000 }, + { 27258, 0xffff }, { 27274, 0x0008 }, { 27275, 0x0014 }, { 27277, 0x0000 }, + { 27277, 0xf000 }, { 27281, 0xfff3 }, { 27295, 0xffff }, { 27311, 0xc043 }, + /* 0x20f00 */ + { 27316, 0xffff }, { 27332, 0x557f }, { 27343, 0x020c }, { 27346, 0x0000 }, + { 27346, 0x0000 }, { 27346, 0x3000 }, { 27348, 0xfffd }, { 27363, 0xff7f }, + { 27378, 0x1f7f }, { 27390, 0xffc0 }, { 27400, 0x84e3 }, { 27407, 0x0001 }, + { 27408, 0xffe0 }, { 27419, 0xffff }, { 27435, 0x40ff }, { 27444, 0xfc00 }, + /* 0x21000 */ + { 27450, 0xffff }, { 27466, 0x000d }, { 27469, 0x0000 }, { 27469, 0xbe00 }, + { 27475, 0xfbfe }, { 27489, 0x80ef }, { 27497, 0x3b3f }, { 27508, 0x0000 }, + { 27508, 0x8c00 }, { 27511, 0xffff }, { 27527, 0x13ff }, { 27538, 0x7fc0 }, + { 27547, 0x0000 }, { 27547, 0xa000 }, { 27549, 0xffff }, { 27565, 0x0084 }, + /* 0x21100 */ + { 27567, 0x077c }, { 27575, 0x7ffe }, { 27589, 0x0009 }, { 27591, 0x8ffe }, + { 27603, 0x0003 }, { 27605, 0xf790 }, { 27614, 0x600a }, { 27618, 0xff47 }, + { 27630, 0xce68 }, { 27638, 0x180f }, { 27644, 0x238f }, { 27652, 0xdffd }, + { 27666, 0x7fda }, { 27678, 0x09ff }, { 27688, 0x041f }, { 27694, 0xf2ff }, + /* 0x21200 */ + { 27707, 0xfe9d }, { 27719, 0xbff2 }, { 27731, 0x743c }, { 27739, 0xd38a }, + { 27747, 0x3416 }, { 27753, 0xaf04 }, { 27760, 0x10ff }, { 27769, 0x10ee }, + { 27776, 0xffff }, { 27792, 0x5ff8 }, { 27803, 0x11fb }, { 27812, 0x7ff0 }, + { 27823, 0xfff0 }, { 27835, 0x797f }, { 27847, 0xff89 }, { 27858, 0x01ff }, + /* 0x21300 */ + { 27867, 0xffc2 }, { 27878, 0x97ed }, { 27889, 0xfef0 }, { 27900, 0xfbdf }, + { 27914, 0x87ff }, { 27926, 0x003a }, { 27930, 0xfff3 }, { 27944, 0xfcff }, + { 27958, 0x40ff }, { 27967, 0x04e1 }, { 27972, 0xdf80 }, { 27980, 0xfffb }, + { 27995, 0xffaf }, { 28009, 0x00bf }, { 28016, 0xee00 }, { 28022, 0x81ff }, + /* 0x21400 */ + { 28032, 0x47ff }, { 28044, 0xe83b }, { 28053, 0x2f7f }, { 28065, 0x5fff }, + { 28079, 0x8784 }, { 28085, 0xdf16 }, { 28095, 0x395f }, { 28105, 0x07c0 }, + { 28110, 0x7fc4 }, { 28120, 0xfe4d }, { 28131, 0x811b }, { 28137, 0x3fbf }, + { 28150, 0x3600 }, { 28154, 0x0ebf }, { 28164, 0x1ed8 }, { 28172, 0xbf7f }, + /* 0x21500 */ + { 28186, 0x8f96 }, { 28195, 0xefa0 }, { 28204, 0xb1f7 }, { 28215, 0x7ee1 }, + { 28225, 0x7c60 }, { 28232, 0xff6e }, { 28245, 0xdfdf }, { 28259, 0xffde }, + { 28273, 0xad53 }, { 28282, 0xf7be }, { 28295, 0xfe3c }, { 28306, 0xe3dd }, + { 28317, 0x114a }, { 28322, 0xf33c }, { 28332, 0xff6f }, { 28346, 0xff91 }, + /* 0x21600 */ + { 28357, 0xfa77 }, { 28369, 0xa7f5 }, { 28380, 0x0a7d }, { 28388, 0xbffd }, + { 28402, 0xf792 }, { 28412, 0x35e1 }, { 28420, 0xff05 }, { 28430, 0xffc7 }, + { 28443, 0x9fe3 }, { 28454, 0x59c3 }, { 28462, 0x8d39 }, { 28470, 0xff3f }, + { 28484, 0x6ff8 }, { 28495, 0xffed }, { 28509, 0xfe27 }, { 28520, 0x7e9f }, + /* 0x21700 */ + { 28532, 0xffff }, { 28548, 0xbbfe }, { 28561, 0xffeb }, { 28575, 0xe17f }, + { 28586, 0xb4ff }, { 28598, 0xff82 }, { 28608, 0x0fff }, { 28620, 0xffe4 }, + { 28632, 0x5fff }, { 28646, 0xff1b }, { 28658, 0xffdf }, { 28673, 0xffc1 }, + { 28684, 0x47ff }, { 28696, 0xfe72 }, { 28707, 0xffff }, { 28723, 0xe09f }, + /* 0x21800 */ + { 28732, 0x493f }, { 28741, 0xfebf }, { 28755, 0xf8f5 }, { 28766, 0x21ff }, + { 28776, 0xbf2c }, { 28786, 0xbeff }, { 28800, 0xff21 }, { 28810, 0xf2ff }, + { 28823, 0x2ffc }, { 28834, 0x3ffe }, { 28847, 0x7ff8 }, { 28859, 0xc1b6 }, + { 28867, 0xfbef }, { 28881, 0xfc37 }, { 28892, 0xee12 }, { 28900, 0xf5bf }, + /* 0x21900 */ + { 28913, 0xb9c7 }, { 28923, 0x3fe4 }, { 28933, 0xdf7e }, { 28946, 0xd6d7 }, + { 28957, 0xe7ef }, { 28970, 0x79ff }, { 28983, 0xff4e }, { 28995, 0x6ec7 }, + { 29005, 0xdaf8 }, { 29015, 0xe5ae }, { 29025, 0xa23f }, { 29034, 0xf321 }, + { 29042, 0xf9fc }, { 29054, 0xf7c2 }, { 29064, 0xfe0d }, { 29074, 0x0df3 }, + /* 0x21a00 */ + { 29083, 0xe7ff }, { 29097, 0xd01b }, { 29104, 0xfffd }, { 29119, 0xf853 }, + { 29128, 0xc3ff }, { 29140, 0xca3f }, { 29150, 0xf7ff }, { 29165, 0xfc1f }, + { 29176, 0xcf7f }, { 29189, 0x8dd9 }, { 29198, 0x7fbf }, { 29212, 0xf5d0 }, + { 29221, 0x7fff }, { 29236, 0xfdfc }, { 29249, 0xf60d }, { 29258, 0xf88f }, + /* 0x21b00 */ + { 29268, 0xb4f9 }, { 29278, 0xaf5e }, { 29289, 0xd78d }, { 29299, 0xee1b }, + { 29309, 0x7d66 }, { 29319, 0xe66f }, { 29330, 0x8f23 }, { 29338, 0xe238 }, + { 29345, 0xc00f }, { 29351, 0xe221 }, { 29357, 0x00c2 }, { 29360, 0x8813 }, + { 29365, 0xe67c }, { 29375, 0xfb55 }, { 29386, 0xf7ef }, { 29400, 0x1dfc }, + /* 0x21c00 */ + { 29410, 0x7e9c }, { 29420, 0x33f7 }, { 29431, 0xfe7d }, { 29444, 0xf5c1 }, + { 29453, 0xf81f }, { 29463, 0x2fbf }, { 29475, 0x7dff }, { 29489, 0xfe97 }, + { 29501, 0x5fff }, { 29515, 0xfffe }, { 29530, 0xf7cb }, { 29542, 0x4f7f }, + { 29554, 0xa7f4 }, { 29564, 0xc1fb }, { 29574, 0x39c3 }, { 29582, 0xc196 }, + /* 0x21d00 */ + { 29589, 0xf977 }, { 29601, 0xfbee }, { 29614, 0xbbfa }, { 29626, 0x99ef }, + { 29637, 0xcdc3 }, { 29646, 0x7ffa }, { 29659, 0x4fd8 }, { 29668, 0x560b }, + { 29675, 0xfffc }, { 29689, 0xefff }, { 29704, 0xfe15 }, { 29714, 0xfb0b }, + { 29724, 0x92ff }, { 29735, 0xffff }, { 29751, 0xe7ff }, { 29765, 0x81ff }, + /* 0x21e00 */ + { 29775, 0x5704 }, { 29781, 0xdfff }, { 29796, 0x17ff }, { 29808, 0xff60 }, + { 29818, 0xac4f }, { 29827, 0x0014 }, { 29829, 0xffbc }, { 29842, 0x7fed }, + { 29855, 0xfd40 }, { 29863, 0x2614 }, { 29868, 0xf812 }, { 29875, 0xfeff }, + { 29890, 0x28ff }, { 29900, 0xffa2 }, { 29911, 0xf7ff }, { 29926, 0x43f7 }, + /* 0x21f00 */ + { 29936, 0x7c00 }, { 29941, 0x3fff }, { 29955, 0x87e0 }, { 29962, 0xf441 }, + { 29969, 0x77ff }, { 29983, 0xfd39 }, { 29994, 0xf0fb }, { 30005, 0x2521 }, + { 30010, 0x7fe5 }, { 30022, 0xff33 }, { 30034, 0xc2dc }, { 30042, 0x78c7 }, + { 30051, 0x9fc2 }, { 30060, 0xb972 }, { 30069, 0xffaf }, { 30083, 0xeb8f }, + /* 0x22000 */ + { 30094, 0x47ff }, { 30106, 0xb31f }, { 30116, 0x821f }, { 30123, 0x8ad0 }, + { 30129, 0x11ff }, { 30139, 0x9ffd }, { 30152, 0xf7fc }, { 30165, 0xfe3f }, + { 30178, 0xadcf }, { 30189, 0xe5ff }, { 30202, 0xde6f }, { 30214, 0xfff6 }, + { 30228, 0xf85f }, { 30239, 0xffff }, { 30255, 0xfd9b }, { 30267, 0x6fff }, + /* 0x22100 */ + { 30281, 0xfdf2 }, { 30293, 0xddf9 }, { 30305, 0x08ff }, { 30314, 0xf7ff }, + { 30329, 0xee04 }, { 30336, 0xceff }, { 30349, 0xef4f }, { 30361, 0xfb67 }, + { 30373, 0xefb8 }, { 30384, 0x9e0f }, { 30393, 0xd014 }, { 30398, 0xfbfe }, + { 30412, 0xfcc3 }, { 30422, 0x7fd7 }, { 30435, 0xaff9 }, { 30447, 0xfffd }, + /* 0x22200 */ + { 30462, 0xffb7 }, { 30476, 0xfe87 }, { 30487, 0x313f }, { 30496, 0xfffc }, + { 30510, 0xfd7f }, { 30524, 0xff61 }, { 30535, 0xffff }, { 30551, 0x9057 }, + { 30558, 0x5eff }, { 30571, 0xfbfd }, { 30585, 0xf57f }, { 30598, 0x1fff }, + { 30611, 0xf0fe }, { 30622, 0x35ff }, { 30634, 0xacfe }, { 30645, 0xf9e7 }, + /* 0x22300 */ + { 30657, 0xabdd }, { 30668, 0x7bfe }, { 30681, 0xbfed }, { 30694, 0xfd7a }, + { 30706, 0xe47e }, { 30716, 0xfff5 }, { 30730, 0xd9dd }, { 30741, 0xcfcf }, + { 30753, 0x74db }, { 30763, 0xb70f }, { 30773, 0x2ffd }, { 30785, 0xdfc7 }, + { 30797, 0x03e3 }, { 30804, 0x07fc }, { 30813, 0xdfd0 }, { 30823, 0x7fff }, + /* 0x22400 */ + { 30838, 0xbdff }, { 30852, 0xe37c }, { 30862, 0xb3ff }, { 30875, 0xdfbd }, + { 30888, 0x3fdf }, { 30901, 0x5fff }, { 30915, 0xaf5e }, { 30926, 0xe3ef }, + { 30938, 0x979f }, { 30949, 0xfff3 }, { 30963, 0xfff7 }, { 30978, 0xebfd }, + { 30991, 0x8ffd }, { 31003, 0xf1fd }, { 31015, 0xfe2d }, { 31026, 0x77ff }, + /* 0x22500 */ + { 31040, 0xffdf }, { 31055, 0xf503 }, { 31063, 0x2fff }, { 31076, 0xf9fb }, + { 31089, 0xe189 }, { 31096, 0xffff }, { 31112, 0xfc9f }, { 31124, 0x5edb }, + { 31135, 0xe71e }, { 31145, 0xff8f }, { 31158, 0x3efd }, { 31170, 0x2ffd }, + { 31182, 0x7f8a }, { 31192, 0xf9bf }, { 31205, 0x5fff }, { 31219, 0x8e26 }, + /* 0x22600 */ + { 31226, 0xffff }, { 31242, 0x647f }, { 31252, 0x8dc9 }, { 31260, 0xfdff }, + { 31275, 0x7fff }, { 31290, 0xffc0 }, { 31300, 0x414f }, { 31307, 0xffff }, + { 31323, 0xffff }, { 31339, 0xfe83 }, { 31349, 0x807f }, { 31357, 0x0c01 }, + { 31360, 0xfffe }, { 31375, 0xffff }, { 31391, 0x7fff }, { 31406, 0xff81 }, + /* 0x22700 */ + { 31416, 0xffff }, { 31432, 0x8ccf }, { 31441, 0xffb8 }, { 31453, 0xffff }, + { 31469, 0xffff }, { 31485, 0xe0bf }, { 31495, 0x67ff }, { 31508, 0x2004 }, + { 31510, 0xf682 }, { 31518, 0xf7ff }, { 31533, 0xffff }, { 31549, 0xffcf }, + { 31563, 0x0c1f }, { 31570, 0x3000 }, { 31572, 0xdfdf }, { 31586, 0xffff }, + /* 0x22800 */ + { 31602, 0xfc01 }, { 31609, 0xd7ff }, { 31623, 0x5003 }, { 31627, 0xfffe }, + { 31642, 0xcfff }, { 31656, 0x43ff }, { 31667, 0xfff6 }, { 31681, 0xe118 }, + { 31687, 0xb000 }, { 31690, 0xfffe }, { 31705, 0x40ff }, { 31714, 0x00ff }, + { 31722, 0xfe02 }, { 31730, 0xff7f }, { 31745, 0xff07 }, { 31756, 0xf8c5 }, + /* 0x22900 */ + { 31765, 0xdfff }, { 31780, 0x03ef }, { 31789, 0xfff0 }, { 31801, 0x7c7f }, + { 31813, 0xfc1a }, { 31822, 0xfd9f }, { 31835, 0xfbf2 }, { 31847, 0xff07 }, + { 31858, 0xcbe2 }, { 31867, 0xfe79 }, { 31879, 0xdfdf }, { 31893, 0x8fc0 }, + { 31900, 0x7fcf }, { 31913, 0x997e }, { 31923, 0x1ff5 }, { 31934, 0xe7f8 }, + /* 0x22a00 */ + { 31945, 0x7ff0 }, { 31956, 0xce3f }, { 31967, 0xb67b }, { 31978, 0x7f94 }, + { 31988, 0x69f2 }, { 31997, 0x236e }, { 32005, 0x7b65 }, { 32015, 0x007f }, + { 32022, 0xfffc }, { 32036, 0xf0ff }, { 32048, 0x029f }, { 32055, 0xfdf0 }, + { 32066, 0x7fc5 }, { 32077, 0x0010 }, { 32078, 0xfff4 }, { 32091, 0xffff }, + /* 0x22b00 */ + { 32107, 0xffc9 }, { 32119, 0x4fff }, { 32132, 0x9c04 }, { 32137, 0xffff }, + { 32153, 0x7fff }, { 32168, 0xfffc }, { 32182, 0x055f }, { 32190, 0x0000 }, + { 32190, 0xffde }, { 32204, 0xf7ff }, { 32219, 0xc19f }, { 32228, 0xffff }, + { 32244, 0x115f }, { 32252, 0x0000 }, { 32252, 0xfe08 }, { 32260, 0xffff }, + /* 0x22c00 */ + { 32276, 0xffff }, { 32292, 0x1fff }, { 32305, 0xff00 }, { 32313, 0x7fff }, + { 32328, 0x20ad }, { 32334, 0x8000 }, { 32335, 0xdfff }, { 32350, 0xdfdf }, + { 32364, 0xffff }, { 32380, 0x0167 }, { 32386, 0x0002 }, { 32387, 0x7ff9 }, + { 32400, 0xebff }, { 32414, 0x077f }, { 32424, 0xfffe }, { 32439, 0x5fff }, + /* 0x22d00 */ + { 32453, 0x0003 }, { 32455, 0x0000 }, { 32455, 0x7fff }, { 32470, 0xffff }, + { 32486, 0xe51b }, { 32495, 0xffff }, { 32511, 0x0009 }, { 32513, 0x8000 }, + { 32514, 0xffff }, { 32530, 0x3fff }, { 32544, 0xffc0 }, { 32554, 0x0023 }, + { 32557, 0xfb80 }, { 32565, 0x3fff }, { 32579, 0x2ff0 }, { 32588, 0xffc0 }, + /* 0x22e00 */ + { 32598, 0xc3ff }, { 32610, 0x037f }, { 32619, 0xfff8 }, { 32632, 0xff9f }, + { 32646, 0xa817 }, { 32653, 0x87fb }, { 32664, 0xf007 }, { 32671, 0x0ebf }, + { 32681, 0x9ffc }, { 32693, 0xc763 }, { 32702, 0x77e7 }, { 32714, 0x47f7 }, + { 32725, 0xe51e }, { 32734, 0x6cf3 }, { 32744, 0xf6e3 }, { 32755, 0x6ede }, + /* 0x22f00 */ + { 32766, 0xffe0 }, { 32777, 0xf133 }, { 32786, 0xf5af }, { 32798, 0xac40 }, + { 32803, 0x8fff }, { 32816, 0xe9bf }, { 32828, 0xf7f3 }, { 32841, 0x84fd }, + { 32850, 0xbbfd }, { 32863, 0xfe1d }, { 32874, 0xffb9 }, { 32887, 0x77fa }, + { 32899, 0x6fc0 }, { 32907, 0xcbff }, { 32920, 0x7f3b }, { 32932, 0xe3fc }, + /* 0x23000 */ + { 32943, 0xde47 }, { 32953, 0x6577 }, { 32963, 0xfdff }, { 32978, 0x34fa }, + { 32987, 0xddce }, { 32998, 0xf7a7 }, { 33010, 0x5abf }, { 33021, 0xbdfa }, + { 33033, 0x9677 }, { 33043, 0xca3a }, { 33051, 0xedff }, { 33065, 0xbf66 }, + { 33076, 0xbd4f }, { 33087, 0xfb5b }, { 33099, 0xffc6 }, { 33111, 0xfba8 }, + /* 0x23100 */ + { 33121, 0xdf17 }, { 33132, 0xe793 }, { 33142, 0x4dd7 }, { 33152, 0xdbf7 }, + { 33165, 0x5fd7 }, { 33177, 0xfc4f }, { 33188, 0xffff }, { 33204, 0x7f9e }, + { 33216, 0x0e7a }, { 33224, 0x7ffc }, { 33237, 0x0bc9 }, { 33244, 0xfffc }, + { 33258, 0xf841 }, { 33265, 0x043f }, { 33272, 0xdffc }, { 33285, 0xfc4f }, + /* 0x23200 */ + { 33296, 0xa19f }, { 33305, 0x8000 }, { 33306, 0x47f3 }, { 33316, 0x7fe0 }, + { 33326, 0x051f }, { 33333, 0x1ffe }, { 33345, 0x3ff8 }, { 33356, 0xfc01 }, + { 33363, 0x805e }, { 33369, 0xee73 }, { 33380, 0xc1fb }, { 33390, 0x255f }, + { 33399, 0xbf30 }, { 33408, 0xc1f9 }, { 33417, 0xfc28 }, { 33425, 0x85fc }, + /* 0x23300 */ + { 33434, 0xe1b8 }, { 33442, 0x93c8 }, { 33449, 0xbffc }, { 33462, 0x798f }, + { 33472, 0x91d8 }, { 33479, 0xfb5e }, { 33491, 0x58ff }, { 33502, 0x17f8 }, + { 33511, 0x3e36 }, { 33520, 0x9f9d }, { 33531, 0x723b }, { 33540, 0xbf7e }, + { 33553, 0x0fef }, { 33564, 0xfff7 }, { 33579, 0xffa3 }, { 33591, 0x6b4f }, + /* 0x23400 */ + { 33601, 0xff8b }, { 33613, 0xff8f }, { 33626, 0x07ff }, { 33637, 0xffe1 }, + { 33649, 0x801f }, { 33655, 0xfffe }, { 33670, 0xed3f }, { 33682, 0xe306 }, + { 33689, 0x83ff }, { 33700, 0xffff }, { 33716, 0xbfff }, { 33731, 0x9fc0 }, + { 33739, 0xffff }, { 33755, 0xffff }, { 33771, 0xff83 }, { 33782, 0xffff }, + /* 0x23500 */ + { 33798, 0xffff }, { 33814, 0x007e }, { 33820, 0xf800 }, { 33825, 0xfffe }, + { 33840, 0x7fff }, { 33855, 0xfa0f }, { 33865, 0xffff }, { 33881, 0x9fff }, + { 33895, 0x048f }, { 33901, 0x0029 }, { 33904, 0xff78 }, { 33916, 0xfff7 }, + { 33931, 0x000e }, { 33934, 0xfff1 }, { 33947, 0xffff }, { 33963, 0x0db9 }, + /* 0x23600 */ + { 33971, 0xe8a1 }, { 33978, 0xfff7 }, { 33993, 0xffff }, { 34009, 0x880f }, + { 34015, 0xfffe }, { 34030, 0x0a7f }, { 34039, 0x0010 }, { 34040, 0xf87f }, + { 34052, 0xffff }, { 34068, 0xfff7 }, { 34083, 0x877f }, { 34094, 0xffff }, + { 34110, 0xffff }, { 34126, 0x8543 }, { 34132, 0x5800 }, { 34135, 0xbfff }, + /* 0x23700 */ + { 34150, 0xe1ff }, { 34162, 0xffff }, { 34178, 0x91f8 }, { 34186, 0x9600 }, + { 34190, 0xfffe }, { 34205, 0x7fff }, { 34220, 0xffa0 }, { 34230, 0x5aff }, + { 34242, 0x1ac2 }, { 34248, 0xffff }, { 34264, 0xfff8 }, { 34277, 0x98e5 }, + { 34285, 0xfff4 }, { 34298, 0xff07 }, { 34309, 0x910f }, { 34316, 0x7f7d }, + /* 0x23800 */ + { 34329, 0xdffe }, { 34343, 0xfe11 }, { 34352, 0x7fe3 }, { 34364, 0xffa0 }, + { 34374, 0xf679 }, { 34385, 0x591f }, { 34394, 0x6fad }, { 34405, 0x1dde }, + { 34415, 0xfeff }, { 34430, 0xff9f }, { 34444, 0xf7cf }, { 34457, 0xac3f }, + { 34467, 0xff7f }, { 34482, 0xe3ef }, { 34494, 0x9bff }, { 34507, 0xffff }, + /* 0x23900 */ + { 34523, 0xffbf }, { 34538, 0x77b7 }, { 34550, 0x723f }, { 34560, 0xdef6 }, + { 34572, 0xffbf }, { 34587, 0x3bff }, { 34600, 0x2fed }, { 34611, 0xff3c }, + { 34623, 0x0fbe }, { 34633, 0xf7f0 }, { 34644, 0x81f6 }, { 34652, 0xbfe6 }, + { 34664, 0xfeff }, { 34679, 0xe07f }, { 34689, 0xffff }, { 34705, 0xfbff }, + /* 0x23a00 */ + { 34720, 0xffeb }, { 34734, 0xffc7 }, { 34747, 0x837f }, { 34757, 0x2bfe }, + { 34768, 0xfbf8 }, { 34780, 0xe3ff }, { 34793, 0xbf3f }, { 34806, 0xdcdf }, + { 34818, 0xf96d }, { 34829, 0x9aff }, { 34841, 0xf6fb }, { 34854, 0xfbef }, + { 34868, 0x30e3 }, { 34875, 0xc74f }, { 34885, 0xbbfe }, { 34898, 0xf711 }, + /* 0x23b00 */ + { 34907, 0xff7f }, { 34922, 0xdcff }, { 34935, 0xfffe }, { 34950, 0xff2f }, + { 34963, 0xfeb7 }, { 34976, 0xf43f }, { 34987, 0x7fef }, { 35001, 0xfffe }, + { 35016, 0xff07 }, { 35027, 0xffbf }, { 35042, 0xff98 }, { 35053, 0x3e1f }, + { 35063, 0xffe4 }, { 35075, 0xbbee }, { 35087, 0xfff4 }, { 35100, 0xff87 }, + /* 0x23c00 */ + { 35112, 0x7e47 }, { 35122, 0xdc5f }, { 35133, 0x7d1f }, { 35144, 0xdbc6 }, + { 35154, 0xdfb1 }, { 35165, 0xdf7f }, { 35179, 0xcc7b }, { 35189, 0x03f4 }, + { 35196, 0xcbdf }, { 35208, 0xe03f }, { 35217, 0xffa3 }, { 35229, 0xfffd }, + { 35244, 0xfc37 }, { 35255, 0x2fff }, { 35268, 0xfff8 }, { 35281, 0x00ff }, + /* 0x23d00 */ + { 35289, 0xfffe }, { 35304, 0xe077 }, { 35313, 0xffff }, { 35329, 0x5fff }, + { 35343, 0xfffc }, { 35357, 0x7fff }, { 35372, 0x1354 }, { 35378, 0xff8a }, + { 35389, 0xffff }, { 35405, 0xff7f }, { 35420, 0x007e }, { 35426, 0xc020 }, + { 35429, 0xffff }, { 35445, 0xafff }, { 35459, 0x02d6 }, { 35465, 0xf860 }, + /* 0x23e00 */ + { 35472, 0xffff }, { 35488, 0xffff }, { 35504, 0x0003 }, { 35506, 0xfffc }, + { 35520, 0x76df }, { 35532, 0xec00 }, { 35537, 0xffff }, { 35553, 0xfffe }, + { 35568, 0xf003 }, { 35574, 0xffff }, { 35590, 0x97ff }, { 35603, 0x8057 }, + { 35609, 0xb400 }, { 35613, 0xffff }, { 35629, 0xffff }, { 35645, 0x8007 }, + /* 0x23f00 */ + { 35649, 0xffff }, { 35665, 0xafff }, { 35679, 0x000f }, { 35683, 0x8820 }, + { 35686, 0xdff8 }, { 35698, 0xffff }, { 35714, 0xffff }, { 35730, 0x2079 }, + { 35736, 0xfff0 }, { 35748, 0xffff }, { 35764, 0x7f0f }, { 35775, 0x0081 }, + { 35777, 0xffe2 }, { 35789, 0xffff }, { 35805, 0x001f }, { 35810, 0xfffe }, + /* 0x24000 */ + { 35825, 0x49f3 }, { 35834, 0x8002 }, { 35836, 0xffff }, { 35852, 0xc2ff }, + { 35863, 0x37ff }, { 35876, 0xf481 }, { 35883, 0xfffe }, { 35898, 0xffff }, + { 35914, 0xc4ff }, { 35925, 0xffff }, { 35941, 0x806e }, { 35947, 0xefff }, + { 35962, 0xfc17 }, { 35972, 0x07bf }, { 35982, 0xbe08 }, { 35989, 0x7bf7 }, + /* 0x24100 */ + { 36002, 0xc2e0 }, { 36008, 0xfffb }, { 36023, 0x1f5f }, { 36034, 0x2ff8 }, + { 36044, 0x7cee }, { 36055, 0x2f06 }, { 36062, 0x6f5f }, { 36074, 0xfb9f }, + { 36087, 0xef7d }, { 36100, 0xe5f7 }, { 36112, 0xbfc0 }, { 36121, 0xf017 }, + { 36129, 0xff83 }, { 36140, 0xafff }, { 36154, 0x8807 }, { 36159, 0xe0ff }, + /* 0x24200 */ + { 36170, 0xffff }, { 36186, 0x0967 }, { 36193, 0xffec }, { 36206, 0xfe07 }, + { 36216, 0x07ff }, { 36227, 0xa202 }, { 36231, 0xfefe }, { 36245, 0xfe00 }, + { 36252, 0xffff }, { 36268, 0x1bff }, { 36280, 0x8020 }, { 36282, 0xfff4 }, + { 36295, 0xf8df }, { 36307, 0xffff }, { 36323, 0x97ff }, { 36336, 0x040b }, + /* 0x24300 */ + { 36340, 0xff8a }, { 36351, 0xf87f }, { 36363, 0xffff }, { 36379, 0x3f7f }, + { 36392, 0xe100 }, { 36396, 0x3ff9 }, { 36408, 0xffc4 }, { 36419, 0xdfff }, + { 36434, 0x1034 }, { 36438, 0xe5c0 }, { 36445, 0xffff }, { 36461, 0xc1bf }, + { 36471, 0xffff }, { 36487, 0xefbf }, { 36501, 0xe201 }, { 36506, 0xfff1 }, + /* 0x24400 */ + { 36519, 0xfff1 }, { 36532, 0xc0a7 }, { 36539, 0xbfc4 }, { 36549, 0xff8f }, + { 36562, 0xcc6f }, { 36572, 0xf0dd }, { 36582, 0x0185 }, { 36586, 0xf7ff }, + { 36601, 0xff47 }, { 36613, 0x5089 }, { 36618, 0x58de }, { 36627, 0x7de8 }, + { 36637, 0x873f }, { 36647, 0xf6f5 }, { 36659, 0xfde3 }, { 36671, 0x79de }, + /* 0x24500 */ + { 36682, 0xd4ff }, { 36694, 0x11bf }, { 36703, 0x57fd }, { 36715, 0x033f }, + { 36723, 0xeb2d }, { 36733, 0xffeb }, { 36747, 0xefff }, { 36762, 0x7eff }, + { 36776, 0xffee }, { 36790, 0x7ffb }, { 36804, 0xfffd }, { 36819, 0x7c9f }, + { 36830, 0xffb7 }, { 36844, 0x1f82 }, { 36851, 0xffef }, { 36866, 0xbdfa }, + /* 0x24600 */ + { 36878, 0xf339 }, { 36888, 0xfff3 }, { 36902, 0xf8ff }, { 36915, 0xff1d }, + { 36927, 0xb61d }, { 36936, 0xf9bf }, { 36949, 0x2dd7 }, { 36959, 0x0fbf }, + { 36970, 0xff1c }, { 36981, 0x437f }, { 36991, 0xff01 }, { 37000, 0xff7f }, + { 37015, 0xff04 }, { 37024, 0x8823 }, { 37029, 0x8afe }, { 37039, 0xee5f }, + /* 0x24700 */ + { 37051, 0xbbbd }, { 37063, 0x3ed7 }, { 37074, 0x895e }, { 37082, 0xffff }, + { 37098, 0xb04f }, { 37106, 0xdfff }, { 37121, 0xd17b }, { 37131, 0xffff }, + { 37147, 0x8177 }, { 37155, 0xfe80 }, { 37163, 0xb02f }, { 37171, 0xc305 }, + { 37177, 0xfffb }, { 37192, 0xf6b7 }, { 37204, 0x3fff }, { 37218, 0x2d7c }, + /* 0x24800 */ + { 37227, 0xe480 }, { 37232, 0xf7ff }, { 37247, 0x1bf3 }, { 37257, 0xfe20 }, + { 37265, 0x60ff }, { 37275, 0xf383 }, { 37284, 0x7fff }, { 37299, 0xbe7f }, + { 37312, 0xfe28 }, { 37321, 0x77ff }, { 37335, 0x87cf }, { 37345, 0x0fff }, + { 37357, 0x6f2b }, { 37367, 0xbb8f }, { 37378, 0xcfdd }, { 37390, 0x1fb5 }, + /* 0x24900 */ + { 37400, 0xf97c }, { 37411, 0xfd0f }, { 37422, 0x9d3f }, { 37433, 0x1fe6 }, + { 37443, 0xfff8 }, { 37456, 0x1ff0 }, { 37465, 0x3ff0 }, { 37475, 0xfbf2 }, + { 37487, 0x002b }, { 37491, 0xffff }, { 37507, 0xf977 }, { 37519, 0xf01f }, + { 37528, 0xffff }, { 37544, 0xc2df }, { 37554, 0xfcfd }, { 37567, 0xfc05 }, + /* 0x24a00 */ + { 37575, 0xbfff }, { 37590, 0x3ff9 }, { 37602, 0xf800 }, { 37607, 0x7f3f }, + { 37620, 0x0bff }, { 37631, 0xfffc }, { 37645, 0xfff8 }, { 37658, 0xf837 }, + { 37668, 0xf8ff }, { 37681, 0xff81 }, { 37691, 0x7f7d }, { 37704, 0xf7f0 }, + { 37715, 0x377f }, { 37727, 0x9df1 }, { 37737, 0xff78 }, { 37749, 0x7dff }, + /* 0x24b00 */ + { 37763, 0xfb9e }, { 37775, 0x3fc7 }, { 37786, 0xf75f }, { 37799, 0xdef1 }, + { 37810, 0xf07f }, { 37821, 0xf9bf }, { 37834, 0x17ef }, { 37845, 0xfe19 }, + { 37855, 0xefe1 }, { 37866, 0x3f59 }, { 37876, 0xefc6 }, { 37887, 0x3f2f }, + { 37898, 0x7b8b }, { 37908, 0xeff9 }, { 37921, 0xdcdf }, { 37933, 0x729c }, + /* 0x24c00 */ + { 37941, 0x65f9 }, { 37951, 0xeaa3 }, { 37960, 0xff3f }, { 37974, 0xff7f }, + { 37989, 0xf801 }, { 37995, 0xc7e5 }, { 38005, 0xfff8 }, { 38018, 0x704b }, + { 38025, 0xe9f8 }, { 38035, 0x3fff }, { 38049, 0xf88b }, { 38058, 0xefe7 }, + { 38071, 0xbf21 }, { 38080, 0x8dfc }, { 38090, 0xfe13 }, { 38100, 0xde4c }, + /* 0x24d00 */ + { 38109, 0x59bf }, { 38120, 0xf3ef }, { 38133, 0xcff3 }, { 38145, 0xff9f }, + { 38159, 0x398f }, { 38168, 0xff92 }, { 38179, 0x2fff }, { 38192, 0xff80 }, + { 38201, 0x1e7f }, { 38212, 0xfff8 }, { 38225, 0x3f3f }, { 38237, 0x00c0 }, + { 38239, 0xffff }, { 38255, 0x7ffb }, { 38269, 0x0021 }, { 38271, 0xfb80 }, + /* 0x24e00 */ + { 38279, 0xffff }, { 38295, 0xe3fe }, { 38307, 0xfe15 }, { 38317, 0xffff }, + { 38333, 0xa27c }, { 38341, 0xf800 }, { 38346, 0x9fff }, { 38360, 0x0a5b }, + { 38367, 0xfff3 }, { 38381, 0x3fff }, { 38395, 0x03c2 }, { 38400, 0xff80 }, + { 38409, 0x23ff }, { 38420, 0x7fe0 }, { 38430, 0xc12e }, { 38437, 0x07fe }, + /* 0x24f00 */ + { 38447, 0x38ff }, { 38458, 0xb7c7 }, { 38469, 0xbfbf }, { 38483, 0x7687 }, + { 38492, 0x77ce }, { 38503, 0xef57 }, { 38515, 0x97f3 }, { 38526, 0xbe81 }, + { 38534, 0xff08 }, { 38543, 0x7b20 }, { 38550, 0x3dff }, { 38563, 0x795c }, + { 38572, 0xcfe9 }, { 38583, 0xbfe7 }, { 38596, 0x5fa7 }, { 38607, 0x86fc }, + /* 0x25000 */ + { 38616, 0xefde }, { 38629, 0xdff3 }, { 38642, 0xb97e }, { 38653, 0xb677 }, + { 38664, 0xdbff }, { 38678, 0xdf7f }, { 38692, 0xfffb }, { 38707, 0x9fdb }, + { 38719, 0xf5f9 }, { 38731, 0xdffb }, { 38745, 0x73f3 }, { 38756, 0xd7ee }, + { 38768, 0x6fbf }, { 38781, 0x13fc }, { 38790, 0x1ff2 }, { 38800, 0x3ffc }, + /* 0x25100 */ + { 38812, 0xfffd }, { 38827, 0x7bff }, { 38841, 0x02b8 }, { 38846, 0xfffe }, + { 38861, 0x7e13 }, { 38870, 0xff88 }, { 38880, 0x7fef }, { 38894, 0x324f }, + { 38902, 0xfbe0 }, { 38912, 0xffff }, { 38928, 0x1c7f }, { 38938, 0x0069 }, + { 38942, 0xfef8 }, { 38954, 0xff7f }, { 38969, 0x4f13 }, { 38977, 0xc030 }, + /* 0x25200 */ + { 38981, 0xffed }, { 38995, 0x1fff }, { 39008, 0x07fc }, { 39017, 0xf980 }, + { 39024, 0xffff }, { 39040, 0xffff }, { 39056, 0x007c }, { 39061, 0xfff1 }, + { 39074, 0x47f7 }, { 39085, 0x0021 }, { 39087, 0xfd80 }, { 39095, 0xffff }, + { 39111, 0x271f }, { 39120, 0xfe01 }, { 39128, 0xbf3f }, { 39141, 0x8801 }, + /* 0x25300 */ + { 39144, 0xffff }, { 39160, 0xfcf1 }, { 39171, 0xe70e }, { 39180, 0xfc67 }, + { 39191, 0x9e5f }, { 39202, 0xc6b8 }, { 39210, 0xffbf }, { 39225, 0xffef }, + { 39240, 0xfefd }, { 39254, 0x17fd }, { 39265, 0x1ff2 }, { 39275, 0xff7f }, + { 39290, 0xc207 }, { 39296, 0xf792 }, { 39306, 0x9c07 }, { 39313, 0x78ff }, + /* 0x25400 */ + { 39325, 0x001b }, { 39329, 0x7fea }, { 39341, 0x1e3f }, { 39351, 0x35fe }, + { 39362, 0xfff3 }, { 39376, 0x7f9f }, { 39389, 0xd20c }, { 39395, 0xff7d }, + { 39409, 0xbfd7 }, { 39422, 0x5054 }, { 39427, 0xff90 }, { 39437, 0x3e7f }, + { 39449, 0xfcc3 }, { 39459, 0xfcff }, { 39473, 0x20ff }, { 39482, 0xfc02 }, + /* 0x25500 */ + { 39489, 0x07ff }, { 39500, 0xfffd }, { 39515, 0xff0d }, { 39526, 0x07ff }, + { 39537, 0xfbe8 }, { 39548, 0xc5fb }, { 39559, 0x3fe3 }, { 39570, 0xffff }, + { 39586, 0x9ffc }, { 39598, 0xff80 }, { 39607, 0xdc7f }, { 39619, 0xfa9b }, + { 39630, 0x027f }, { 39638, 0xeb4c }, { 39647, 0xfc0e }, { 39656, 0xcd96 }, + /* 0x25600 */ + { 39665, 0x637a }, { 39674, 0x7e60 }, { 39682, 0x7850 }, { 39688, 0xff03 }, + { 39698, 0xfe14 }, { 39707, 0x3ff0 }, { 39717, 0xf910 }, { 39724, 0x1f87 }, + { 39733, 0xff08 }, { 39742, 0x17ff }, { 39754, 0x0fc0 }, { 39760, 0x03ff }, + { 39770, 0xfdef }, { 39784, 0xff10 }, { 39793, 0xc01f }, { 39800, 0xbfbf }, + /* 0x25700 */ + { 39814, 0x9fbe }, { 39826, 0xccbe }, { 39836, 0x9ee9 }, { 39846, 0xff9f }, + { 39860, 0xbdba }, { 39871, 0x7d7d }, { 39883, 0xfffc }, { 39897, 0xde78 }, + { 39907, 0x037f }, { 39916, 0xff84 }, { 39926, 0x8207 }, { 39931, 0xfffe }, + { 39946, 0xe0a0 }, { 39951, 0x5fff }, { 39965, 0x03fc }, { 39973, 0xed80 }, + /* 0x25800 */ + { 39980, 0xffff }, { 39996, 0x01ff }, { 40005, 0x0006 }, { 40007, 0xf6fe }, + { 40020, 0x1feb }, { 40031, 0xbc10 }, { 40037, 0xffff }, { 40053, 0x0279 }, + { 40059, 0xfd83 }, { 40069, 0x7f7e }, { 40082, 0x6080 }, { 40085, 0xbff3 }, + { 40098, 0x003f }, { 40104, 0xd7c8 }, { 40113, 0xffe1 }, { 40125, 0x40bf }, + /* 0x25900 */ + { 40133, 0x5cef }, { 40144, 0xd7fe }, { 40157, 0x6f9c }, { 40167, 0xfff3 }, + { 40181, 0xff8e }, { 40193, 0x4f9f }, { 40204, 0x7fff }, { 40219, 0xffc0 }, + { 40229, 0xfdff }, { 40244, 0xf80b }, { 40252, 0xe7f7 }, { 40265, 0xff67 }, + { 40278, 0x84e0 }, { 40283, 0xfffd }, { 40298, 0xf025 }, { 40305, 0xbfff }, + /* 0x25a00 */ + { 40320, 0xe40f }, { 40328, 0x05ff }, { 40338, 0x7c0e }, { 40346, 0xb9ff }, + { 40359, 0xdd0f }, { 40369, 0x1bfd }, { 40380, 0x7fff }, { 40395, 0xdb7e }, + { 40407, 0xffdf }, { 40422, 0x8f3f }, { 40433, 0xf7f3 }, { 40446, 0xf86f }, + { 40457, 0xe708 }, { 40464, 0xff47 }, { 40476, 0xe1e7 }, { 40486, 0xfffb }, + /* 0x25b00 */ + { 40501, 0xf0bf }, { 40512, 0xeeff }, { 40526, 0xfc7e }, { 40538, 0xfbff }, + { 40553, 0x0fff }, { 40565, 0xffff }, { 40581, 0xfdff }, { 40596, 0xff83 }, + { 40607, 0xf03f }, { 40617, 0x7fff }, { 40632, 0xeffd }, { 40646, 0xffe0 }, + { 40657, 0x0047 }, { 40661, 0xffff }, { 40677, 0xffff }, { 40693, 0xf7ff }, + /* 0x25c00 */ + { 40708, 0xfa64 }, { 40717, 0xffff }, { 40733, 0xffff }, { 40749, 0xffff }, + { 40765, 0xf0f7 }, { 40776, 0xffff }, { 40792, 0x025f }, { 40799, 0xffe8 }, + { 40811, 0xfff3 }, { 40825, 0xffe7 }, { 40839, 0xdfff }, { 40854, 0x3fff }, + { 40868, 0xffc1 }, { 40879, 0xffff }, { 40895, 0xffff }, { 40911, 0x87ff }, + /* 0x25d00 */ + { 40923, 0xffff }, { 40939, 0xe018 }, { 40944, 0xffff }, { 40960, 0xeff7 }, + { 40974, 0x7ff0 }, { 40985, 0xf009 }, { 40991, 0xffff }, { 41007, 0x2f7f }, + { 41019, 0xfdc0 }, { 41028, 0xffff }, { 41044, 0x0ff8 }, { 41053, 0xfff0 }, + { 41065, 0xf3ff }, { 41079, 0xfff3 }, { 41093, 0xff1f }, { 41106, 0xf1f7 }, + /* 0x25e00 */ + { 41118, 0xcfa9 }, { 41128, 0x13d3 }, { 41136, 0xbbee }, { 41148, 0x7ffb }, + { 41162, 0xffee }, { 41176, 0xf467 }, { 41186, 0x29d7 }, { 41195, 0xfffc }, + { 41209, 0x0bf0 }, { 41216, 0xff80 }, { 41225, 0xff9f }, { 41239, 0x115f }, + { 41247, 0xfffe }, { 41262, 0x1e7f }, { 41273, 0xfff0 }, { 41285, 0x800f }, + /* 0x25f00 */ + { 41290, 0xf3ff }, { 41304, 0xff0f }, { 41316, 0x01f7 }, { 41324, 0xffe0 }, + { 41335, 0x8eef }, { 41346, 0x6fe3 }, { 41357, 0xf0e8 }, { 41365, 0xffdf }, + { 41380, 0xf7f7 }, { 41394, 0x7e5f }, { 41406, 0xffff }, { 41422, 0x0dfd }, + { 41432, 0xfff8 }, { 41445, 0x93ef }, { 41456, 0xffc2 }, { 41467, 0xf7ff }, + /* 0x26000 */ + { 41482, 0x02ff }, { 41491, 0xfffc }, { 41505, 0xf0ff }, { 41517, 0x00ff }, + { 41525, 0xff58 }, { 41536, 0x7fff }, { 41551, 0xfff2 }, { 41564, 0x0013 }, + { 41567, 0xfbff }, { 41582, 0xffbf }, { 41597, 0xffc7 }, { 41610, 0x00b3 }, + { 41615, 0xfffa }, { 41629, 0xfbff }, { 41644, 0x01fd }, { 41652, 0x07ff }, + /* 0x26100 */ + { 41663, 0xfe00 }, { 41670, 0x1fff }, { 41683, 0x7ffc }, { 41696, 0xf006 }, + { 41702, 0xffff }, { 41718, 0xe03f }, { 41727, 0x15bf }, { 41737, 0xffe8 }, + { 41749, 0xff7f }, { 41764, 0xf8ff }, { 41777, 0x9eff }, { 41790, 0xf87f }, + { 41802, 0xdf3f }, { 41815, 0xdffa }, { 41828, 0x1faf }, { 41839, 0xffdf }, + /* 0x26200 */ + { 41854, 0x00eb }, { 41860, 0x0000 }, { 41860, 0xfbec }, { 41872, 0xdf7f }, + { 41886, 0xdbb7 }, { 41898, 0xeeef }, { 41911, 0xfefd }, { 41925, 0xdbbc }, + { 41936, 0xeb8f }, { 41947, 0xf3ff }, { 41961, 0xef9f }, { 41974, 0xf078 }, + { 41982, 0x3ff4 }, { 41993, 0xffc7 }, { 42006, 0xf99f }, { 42018, 0xfbbf }, + /* 0x26300 */ + { 42032, 0xe66f }, { 42043, 0xfaff }, { 42057, 0x7f1f }, { 42069, 0xddfe }, + { 42082, 0xfdcf }, { 42095, 0xfdf7 }, { 42109, 0xf7e6 }, { 42121, 0xfe05 }, + { 42130, 0x2fe9 }, { 42140, 0x27f0 }, { 42148, 0x8afc }, { 42157, 0x9f9b }, + { 42168, 0xffea }, { 42181, 0xf7e3 }, { 42193, 0xaf8f }, { 42204, 0x7ff5 }, + /* 0x26400 */ + { 42217, 0x7ffd }, { 42231, 0x5ffb }, { 42244, 0xf7fc }, { 42257, 0x7fef }, + { 42271, 0xffd1 }, { 42283, 0xff3f }, { 42297, 0x1fff }, { 42310, 0xff7f }, + { 42325, 0xfdf8 }, { 42337, 0xbe7f }, { 42350, 0xf77d }, { 42363, 0x7dce }, + { 42374, 0xd01b }, { 42381, 0x67df }, { 42393, 0xff71 }, { 42405, 0x7fb3 }, + /* 0x26500 */ + { 42417, 0xfa7f }, { 42430, 0xfdbf }, { 42444, 0xbf7f }, { 42458, 0xf3af }, + { 42470, 0xfdbf }, { 42484, 0x7dff }, { 42498, 0xffe7 }, { 42512, 0xffe6 }, + { 42525, 0x7f3d }, { 42537, 0x1fff }, { 42550, 0x9ffc }, { 42562, 0xf27f }, + { 42574, 0x27ff }, { 42586, 0x87ff }, { 42598, 0x9fff }, { 42612, 0x43fe }, + /* 0x26600 */ + { 42622, 0xefff }, { 42637, 0xe93f }, { 42648, 0xff0d }, { 42659, 0xedfc }, + { 42671, 0x2fff }, { 42684, 0x99ff }, { 42696, 0xff87 }, { 42708, 0x9fff }, + { 42722, 0x73ff }, { 42735, 0xff1e }, { 42747, 0x7fff }, { 42762, 0x2ffc }, + { 42773, 0xc03e }, { 42780, 0xfffd }, { 42795, 0x7efb }, { 42808, 0x02d8 }, + /* 0x26700 */ + { 42813, 0xfddc }, { 42825, 0x9fff }, { 42839, 0x17ff }, { 42851, 0xee68 }, + { 42860, 0x8002 }, { 42862, 0xffff }, { 42878, 0xffff }, { 42894, 0xfdff }, + { 42909, 0x0ab3 }, { 42916, 0xfee0 }, { 42926, 0xbfff }, { 42941, 0x3fe7 }, + { 42953, 0x0003 }, { 42955, 0xbb30 }, { 42963, 0xbeff }, { 42977, 0x0019 }, + /* 0x26800 */ + { 42980, 0xffff }, { 42996, 0xd6ff }, { 43009, 0x1b31 }, { 43016, 0xdf80 }, + { 43024, 0xf1ef }, { 43036, 0x19bf }, { 43046, 0x3f00 }, { 43052, 0xfff7 }, + { 43067, 0xf52f }, { 43078, 0x3ff3 }, { 43090, 0xbff0 }, { 43101, 0xbf00 }, + { 43108, 0xbfe3 }, { 43120, 0xfc4f }, { 43131, 0x7a13 }, { 43139, 0xfffe }, + /* 0x26900 */ + { 43154, 0xf47d }, { 43165, 0xef75 }, { 43177, 0x1ffe }, { 43189, 0x9efc }, + { 43200, 0xdff6 }, { 43213, 0xebbf }, { 43226, 0x6be7 }, { 43237, 0xfffc }, + { 43251, 0xd7ff }, { 43265, 0xffeb }, { 43279, 0xfebf }, { 43293, 0xff7f }, + { 43308, 0xd7f7 }, { 43321, 0xa4fb }, { 43331, 0x6dff }, { 43344, 0xdb7b }, + /* 0x26a00 */ + { 43356, 0xfffb }, { 43371, 0xb7fd }, { 43384, 0xf5df }, { 43397, 0xf4f7 }, + { 43409, 0xff98 }, { 43420, 0xf318 }, { 43428, 0x1fff }, { 43441, 0x7ff6 }, + { 43454, 0x6ff0 }, { 43464, 0x3ffe }, { 43477, 0xfeb0 }, { 43487, 0xe1c7 }, + { 43496, 0xddff }, { 43510, 0x7eb7 }, { 43522, 0xbffd }, { 43536, 0xffdf }, + /* 0x26b00 */ + { 43551, 0xfbff }, { 43566, 0xfff9 }, { 43580, 0xfeff }, { 43595, 0xffbf }, + { 43610, 0x0bff }, { 43621, 0x3ff0 }, { 43631, 0xfb04 }, { 43639, 0xffff }, + { 43655, 0xffff }, { 43671, 0xff0f }, { 43683, 0xffff }, { 43699, 0xffa8 }, + { 43710, 0xffff }, { 43726, 0xff7e }, { 43740, 0xff7f }, { 43755, 0xff1f }, + /* 0x26c00 */ + { 43768, 0xffff }, { 43784, 0x6bff }, { 43797, 0xfc82 }, { 43805, 0xffff }, + { 43821, 0xffbf }, { 43836, 0xdfff }, { 43851, 0xffff }, { 43867, 0x1ffd }, + { 43879, 0xfff8 }, { 43892, 0xffff }, { 43908, 0x97ff }, { 43921, 0x20c1 }, + { 43925, 0xffff }, { 43941, 0xffff }, { 43957, 0x7fff }, { 43972, 0xffff }, + /* 0x26d00 */ + { 43988, 0xffa7 }, { 44001, 0xffff }, { 44017, 0xf801 }, { 44023, 0xffff }, + { 44039, 0x7fff }, { 44054, 0xe007 }, { 44060, 0xfffe }, { 44075, 0xffff }, + { 44091, 0xfff7 }, { 44106, 0x0fff }, { 44118, 0xff00 }, { 44126, 0xffff }, + { 44142, 0xffff }, { 44158, 0xefbf }, { 44172, 0x040b }, { 44176, 0xbfff }, + /* 0x26e00 */ + { 44191, 0xffdf }, { 44206, 0xffff }, { 44222, 0xffdf }, { 44237, 0x07ff }, + { 44248, 0xffc0 }, { 44258, 0xffff }, { 44274, 0x451e }, { 44281, 0xe084 }, + { 44286, 0xffd7 }, { 44300, 0xffff }, { 44316, 0xffff }, { 44332, 0xffff }, + { 44348, 0x3fff }, { 44362, 0xff00 }, { 44370, 0xffff }, { 44386, 0xffff }, + /* 0x26f00 */ + { 44402, 0xfcff }, { 44416, 0x0227 }, { 44421, 0xfe16 }, { 44431, 0xffff }, + { 44447, 0xdfff }, { 44462, 0xffff }, { 44478, 0x5fff }, { 44492, 0xffe2 }, + { 44504, 0xffff }, { 44520, 0x8895 }, { 44526, 0xf482 }, { 44533, 0xffff }, + { 44549, 0xff7f }, { 44564, 0x03ff }, { 44574, 0xffff }, { 44590, 0xfe3f }, + /* 0x27000 */ + { 44603, 0x20f7 }, { 44611, 0x2ff0 }, { 44620, 0xffff }, { 44636, 0xffbf }, + { 44651, 0xbfff }, { 44666, 0xfff2 }, { 44679, 0xffff }, { 44695, 0xf801 }, + { 44701, 0xff7f }, { 44716, 0xffff }, { 44732, 0x03ba }, { 44739, 0xffff }, + { 44755, 0xc3ff }, { 44767, 0xffff }, { 44783, 0xdfff }, { 44798, 0xfe01 }, + /* 0x27100 */ + { 44806, 0xeaff }, { 44819, 0xffff }, { 44835, 0x7f0f }, { 44846, 0xffc0 }, + { 44856, 0xffff }, { 44872, 0xffdf }, { 44887, 0xc7c7 }, { 44897, 0x7ddf }, + { 44910, 0xefea }, { 44922, 0x7fff }, { 44937, 0x1ff9 }, { 44948, 0xfc7e }, + { 44960, 0x2ffe }, { 44972, 0xf1bf }, { 44984, 0x3fff }, { 44998, 0xf83e }, + /* 0x27200 */ + { 45008, 0x6bcb }, { 45018, 0xf5ef }, { 45031, 0xffb9 }, { 45044, 0xfff1 }, + { 45057, 0xffff }, { 45073, 0xd9e3 }, { 45083, 0xffff }, { 45099, 0xf8f9 }, + { 45110, 0xe1ef }, { 45121, 0xffff }, { 45137, 0xfbff }, { 45152, 0x9fc3 }, + { 45162, 0xff00 }, { 45170, 0xfbff }, { 45185, 0xff83 }, { 45196, 0x0009 }, + /* 0x27300 */ + { 45198, 0xfffa }, { 45212, 0xbfff }, { 45227, 0x3fdf }, { 45240, 0xaff0 }, + { 45250, 0x0000 }, { 45250, 0xfffe }, { 45265, 0xffff }, { 45281, 0xffff }, + { 45297, 0xff1f }, { 45310, 0xc59f }, { 45320, 0xff7e }, { 45334, 0xffff }, + { 45350, 0xffff }, { 45366, 0xf03f }, { 45376, 0x175f }, { 45386, 0xff00 }, + /* 0x27400 */ + { 45394, 0xfff7 }, { 45409, 0xffff }, { 45425, 0xeff8 }, { 45437, 0x007a }, + { 45442, 0xfff1 }, { 45455, 0xf7ff }, { 45470, 0xffff }, { 45486, 0xff1f }, + { 45499, 0xc15e }, { 45507, 0xfdff }, { 45522, 0x0ffe }, { 45533, 0xfffc }, + { 45547, 0xdf00 }, { 45554, 0xffff }, { 45570, 0x18fe }, { 45579, 0xfffe }, + /* 0x27500 */ + { 45594, 0xc1df }, { 45604, 0xe13f }, { 45614, 0xddff }, { 45628, 0x24ff }, + { 45638, 0xfffe }, { 45653, 0xf9f7 }, { 45666, 0xc1ff }, { 45677, 0xf7ff }, + { 45692, 0xfdf5 }, { 45705, 0xfffe }, { 45720, 0xbf90 }, { 45729, 0x7ffc }, + { 45742, 0xffdf }, { 45757, 0xfff7 }, { 45772, 0xffee }, { 45786, 0x8ffe }, + /* 0x27600 */ + { 45798, 0xef7f }, { 45812, 0xf64f }, { 45823, 0xffff }, { 45839, 0x7cf9 }, + { 45850, 0xffff }, { 45866, 0xff07 }, { 45877, 0xffbf }, { 45892, 0xc2ac }, + { 45899, 0xffff }, { 45915, 0x7fe7 }, { 45928, 0xfffa }, { 45942, 0xf7ff }, + { 45957, 0xe009 }, { 45962, 0xffff }, { 45978, 0x1fff }, { 45991, 0xff0f }, + /* 0x27700 */ + { 46003, 0x2dff }, { 46015, 0xe026 }, { 46021, 0xfaff }, { 46035, 0xe187 }, + { 46043, 0xbfff }, { 46058, 0x0fff }, { 46070, 0xfc0c }, { 46078, 0xffff }, + { 46094, 0xf1c7 }, { 46104, 0xfafd }, { 46117, 0xffc6 }, { 46129, 0x3fef }, + { 46142, 0xf78c }, { 46152, 0xcff7 }, { 46165, 0xefca }, { 46176, 0xff9e }, + /* 0x27800 */ + { 46189, 0xdadf }, { 46201, 0xffef }, { 46216, 0x6f0f }, { 46226, 0xf82f }, + { 46236, 0xf979 }, { 46247, 0x29ef }, { 46257, 0xffff }, { 46273, 0xef8e }, + { 46284, 0xe77f }, { 46297, 0x777c }, { 46308, 0xe9ff }, { 46321, 0xffbe }, + { 46335, 0xe3ff }, { 46348, 0x5fff }, { 46362, 0xff2e }, { 46374, 0x7ff3 }, + /* 0x27900 */ + { 46387, 0xfbf8 }, { 46399, 0xf9ff }, { 46413, 0xdecf }, { 46425, 0xfcc6 }, + { 46435, 0x3517 }, { 46443, 0x3fea }, { 46454, 0xef7e }, { 46467, 0xffbb }, + { 46481, 0xbfc7 }, { 46493, 0xfe84 }, { 46502, 0xffff }, { 46518, 0x4cff }, + { 46529, 0xff76 }, { 46542, 0xffff }, { 46558, 0x0df3 }, { 46567, 0xffff }, + /* 0x27a00 */ + { 46583, 0x8fff }, { 46596, 0x7e7f }, { 46609, 0xffd9 }, { 46622, 0xffff }, + { 46638, 0xfefd }, { 46652, 0xff43 }, { 46663, 0xffff }, { 46679, 0xfffe }, + { 46694, 0xffff }, { 46710, 0xffd7 }, { 46724, 0xffff }, { 46740, 0x86ff }, + { 46751, 0x89ff }, { 46762, 0xfffd }, { 46777, 0xffff }, { 46793, 0xe565 }, + /* 0x27b00 */ + { 46802, 0xfffd }, { 46817, 0xbeef }, { 46830, 0xffbf }, { 46845, 0xf87f }, + { 46857, 0xff7f }, { 46872, 0xff7f }, { 46887, 0xffbf }, { 46902, 0xff97 }, + { 46915, 0xdfff }, { 46930, 0xef7f }, { 46944, 0xfb2c }, { 46954, 0x3def }, + { 46966, 0xfe47 }, { 46977, 0x9f39 }, { 46987, 0xeeef }, { 47000, 0xff9b }, + /* 0x27c00 */ + { 47013, 0x3efb }, { 47025, 0x637f }, { 47036, 0xffab }, { 47049, 0xfff5 }, + { 47063, 0xe7ff }, { 47077, 0xffff }, { 47093, 0xff3f }, { 47107, 0xd9ff }, + { 47120, 0xffff }, { 47136, 0xfdbf }, { 47150, 0xf7ff }, { 47165, 0xc2ff }, + { 47176, 0xffff }, { 47192, 0xfedf }, { 47206, 0xffe7 }, { 47220, 0x5fee }, + /* 0x27d00 */ + { 47232, 0xf0fe }, { 47243, 0xe7f1 }, { 47254, 0x3d7b }, { 47265, 0xffef }, + { 47280, 0xffb7 }, { 47294, 0x37e3 }, { 47304, 0xfff9 }, { 47318, 0xe7f7 }, + { 47331, 0x7fec }, { 47343, 0xff8f }, { 47356, 0x05ff }, { 47366, 0xdfff }, + { 47381, 0xfe9f }, { 47394, 0xd6ff }, { 47407, 0xfbff }, { 47422, 0xf825 }, + /* 0x27e00 */ + { 47430, 0xffff }, { 47446, 0x47f2 }, { 47455, 0xe9ff }, { 47468, 0xf3fe }, + { 47481, 0x43c9 }, { 47488, 0x7f00 }, { 47495, 0xf09b }, { 47504, 0x23fc }, + { 47513, 0xffd0 }, { 47524, 0xefdd }, { 47537, 0xffff }, { 47553, 0xffec }, + { 47566, 0xdfff }, { 47581, 0xbffe }, { 47595, 0xd8ff }, { 47607, 0xbf7f }, + /* 0x27f00 */ + { 47621, 0xc2ff }, { 47632, 0xffff }, { 47648, 0xffef }, { 47663, 0xffff }, + { 47679, 0xfe76 }, { 47691, 0xffff }, { 47707, 0xbfff }, { 47722, 0xffd8 }, + { 47734, 0xe93f }, { 47745, 0xffff }, { 47761, 0xff7f }, { 47776, 0x1f73 }, + { 47786, 0x227f }, { 47795, 0xfffc }, { 47809, 0xc05d }, { 47816, 0xfffe }, + /* 0x28000 */ + { 47831, 0x0249 }, { 47835, 0xfff8 }, { 47848, 0x7fff }, { 47863, 0x00c2 }, + { 47866, 0xffff }, { 47882, 0x5e3f }, { 47893, 0x000d }, { 47896, 0xffe8 }, + { 47908, 0xf9ff }, { 47922, 0xf80a }, { 47929, 0xffff }, { 47945, 0x81ff }, + { 47955, 0x0003 }, { 47957, 0xfffc }, { 47971, 0x51ff }, { 47982, 0x8008 }, + /* 0x28100 */ + { 47984, 0xffe9 }, { 47997, 0x0fff }, { 48009, 0x3ffe }, { 48022, 0x0000 }, + { 48022, 0xdd60 }, { 48030, 0xffff }, { 48046, 0x07ff }, { 48057, 0x0076 }, + { 48062, 0xffff }, { 48078, 0x1df3 }, { 48088, 0xfdc0 }, { 48097, 0x183f }, + { 48105, 0x9dfe }, { 48117, 0x67d0 }, { 48125, 0xeff0 }, { 48136, 0x3c1f }, + /* 0x28200 */ + { 48145, 0xad38 }, { 48153, 0xff3b }, { 48166, 0xfe17 }, { 48177, 0xff37 }, + { 48190, 0xff0d }, { 48201, 0x0bb1 }, { 48208, 0xc1fc }, { 48217, 0x9e0f }, + { 48226, 0xe45b }, { 48235, 0x2bfd }, { 48246, 0x9e9f }, { 48257, 0xfffe }, + { 48272, 0xd0d1 }, { 48279, 0x1fff }, { 48292, 0xffc0 }, { 48302, 0x1277 }, + /* 0x28300 */ + { 48310, 0xeffe }, { 48324, 0xbe40 }, { 48331, 0xffff }, { 48347, 0x79ff }, + { 48360, 0xffef }, { 48375, 0x87df }, { 48386, 0xffa9 }, { 48398, 0x8bdf }, + { 48409, 0x3fbf }, { 48422, 0x136f }, { 48431, 0xfff6 }, { 48445, 0x53ff }, + { 48457, 0xcfe2 }, { 48467, 0xe37e }, { 48478, 0x9f5f }, { 48490, 0x677f }, + /* 0x28400 */ + { 48502, 0xb806 }, { 48508, 0xffb3 }, { 48521, 0xbf17 }, { 48532, 0x7a67 }, + { 48542, 0xafff }, { 48556, 0x4f1f }, { 48566, 0xbfff }, { 48581, 0xf0bf }, + { 48592, 0xfffb }, { 48607, 0x2cf8 }, { 48615, 0xfffd }, { 48630, 0xf00d }, + { 48637, 0x6fbf }, { 48650, 0x2bfc }, { 48660, 0xfff0 }, { 48672, 0xefff }, + /* 0x28500 */ + { 48687, 0xc829 }, { 48693, 0xfeff }, { 48708, 0xffde }, { 48722, 0x0007 }, + { 48725, 0xaffe }, { 48738, 0xfc5b }, { 48749, 0xc7ff }, { 48762, 0x317f }, + { 48772, 0xffca }, { 48784, 0xe3f9 }, { 48795, 0xfc3b }, { 48806, 0xdffb }, + { 48820, 0xf81f }, { 48830, 0xc3bd }, { 48840, 0xffee }, { 48854, 0x3fc3 }, + /* 0x28600 */ + { 48864, 0xf7bf }, { 48878, 0xfe0b }, { 48888, 0x7fcf }, { 48901, 0xb3e5 }, + { 48911, 0xc7ff }, { 48924, 0xd7bf }, { 48937, 0xebd9 }, { 48948, 0x7fe7 }, + { 48961, 0xaefc }, { 48972, 0xfffe }, { 48987, 0xfd25 }, { 48997, 0xbe7f }, + { 49010, 0xffda }, { 49023, 0xde7f }, { 49036, 0xfffb }, { 49051, 0xf9fb }, + /* 0x28700 */ + { 49064, 0xfd6f }, { 49077, 0x9fff }, { 49091, 0xe5ff }, { 49104, 0xfffd }, + { 49119, 0xfe9b }, { 49131, 0xe9bb }, { 49142, 0xfdef }, { 49156, 0xe1fb }, + { 49167, 0xf2bf }, { 49179, 0xdffe }, { 49193, 0xcfc3 }, { 49203, 0xffeb }, + { 49217, 0xe13f }, { 49227, 0xdff3 }, { 49240, 0xd9df }, { 49252, 0xfff7 }, + /* 0x28800 */ + { 49267, 0xfde7 }, { 49280, 0x79ff }, { 49293, 0x40f4 }, { 49299, 0x7fc0 }, + { 49308, 0xf826 }, { 49316, 0x3dfb }, { 49328, 0xfe0d }, { 49338, 0x61ff }, + { 49349, 0xfffb }, { 49364, 0x0e77 }, { 49373, 0xbfff }, { 49388, 0xe66f }, + { 49399, 0x48ff }, { 49409, 0xbffb }, { 49423, 0xefcb }, { 49435, 0xffdf }, + /* 0x28900 */ + { 49450, 0xf7a7 }, { 49462, 0x6fef }, { 49475, 0x376f }, { 49486, 0xc7d0 }, + { 49494, 0xfe1d }, { 49505, 0x03ff }, { 49515, 0xe7f4 }, { 49526, 0x4a6f }, + { 49535, 0xfc74 }, { 49545, 0xf25f }, { 49556, 0xfd09 }, { 49565, 0xc19f }, + { 49574, 0xfffe }, { 49589, 0x1a68 }, { 49595, 0xfff2 }, { 49608, 0xe07f }, + /* 0x28a00 */ + { 49618, 0x7fff }, { 49633, 0x20ff }, { 49642, 0xd220 }, { 49647, 0x7fff }, + { 49662, 0xf000 }, { 49666, 0xf9ff }, { 49680, 0x121f }, { 49687, 0x1620 }, + { 49691, 0xfffe }, { 49706, 0x80df }, { 49714, 0xffff }, { 49730, 0x30c1 }, + { 49735, 0xd840 }, { 49740, 0x037f }, { 49749, 0xffc0 }, { 49759, 0x2bff }, + /* 0x28b00 */ + { 49771, 0xf038 }, { 49778, 0xafdf }, { 49791, 0xc7f8 }, { 49801, 0x7fff }, + { 49816, 0x4290 }, { 49820, 0xffe9 }, { 49833, 0xef84 }, { 49842, 0x50ff }, + { 49852, 0x8019 }, { 49856, 0xccbc }, { 49865, 0x89ff }, { 49876, 0xfb80 }, + { 49884, 0xffd0 }, { 49895, 0xc697 }, { 49904, 0xe04f }, { 49912, 0x5c01 }, + /* 0x28c00 */ + { 49917, 0xfe23 }, { 49927, 0xf7f7 }, { 49941, 0xd315 }, { 49949, 0x394f }, + { 49958, 0x0000 }, { 49958, 0xff80 }, { 49967, 0x0bf4 }, { 49975, 0x86f8 }, + { 49983, 0x3fcf }, { 49995, 0xedb8 }, { 50005, 0xe3e7 }, { 50016, 0x5d5c }, + { 50025, 0xde3f }, { 50037, 0xffeb }, { 50051, 0x3faf }, { 50063, 0xfffd }, + /* 0x28d00 */ + { 50078, 0xe037 }, { 50086, 0xa3ff }, { 50098, 0xff21 }, { 50108, 0x81eb }, + { 50116, 0xbff3 }, { 50129, 0x10ff }, { 50138, 0xfff4 }, { 50151, 0x02ad }, + { 50157, 0xffff }, { 50173, 0xf444 }, { 50180, 0xf0ff }, { 50192, 0x43df }, + { 50202, 0x3efe }, { 50214, 0xfabc }, { 50225, 0x0dde }, { 50234, 0x198f }, + /* 0x28e00 */ + { 50242, 0x8000 }, { 50243, 0x7dff }, { 50257, 0xfa1f }, { 50268, 0x012f }, + { 50274, 0xdffe }, { 50288, 0xff2b }, { 50300, 0xe08f }, { 50308, 0xffef }, + { 50323, 0xfc7f }, { 50336, 0x800f }, { 50341, 0xffff }, { 50357, 0x8032 }, + { 50361, 0xffff }, { 50377, 0xfd7f }, { 50391, 0x8543 }, { 50397, 0xffff }, + /* 0x28f00 */ + { 50413, 0xfd7f }, { 50427, 0xfbff }, { 50442, 0xfc41 }, { 50450, 0xe07b }, + { 50459, 0xf0ff }, { 50471, 0xb3ff }, { 50484, 0x5def }, { 50496, 0xbf7e }, + { 50509, 0xafef }, { 50522, 0x3ffe }, { 50535, 0xcfff }, { 50549, 0xfffc }, + { 50563, 0xfb7f }, { 50577, 0x47ff }, { 50589, 0xffff }, { 50605, 0xe67f }, + /* 0x29000 */ + { 50617, 0xffff }, { 50633, 0xffbf }, { 50648, 0xfff3 }, { 50662, 0xfff3 }, + { 50676, 0xffe7 }, { 50690, 0xfbff }, { 50705, 0x3b9f }, { 50716, 0x7fe5 }, + { 50728, 0x37fc }, { 50739, 0x1dfc }, { 50749, 0x77fe }, { 50762, 0xffac }, + { 50774, 0x17ef }, { 50785, 0x7fff }, { 50800, 0xafcb }, { 50811, 0xf7f0 }, + /* 0x29100 */ + { 50822, 0x221b }, { 50828, 0xffc0 }, { 50838, 0x6aff }, { 50850, 0xff80 }, + { 50859, 0xceff }, { 50872, 0xe00d }, { 50878, 0x3fff }, { 50892, 0xf0c6 }, + { 50900, 0x03ff }, { 50910, 0x8dfe }, { 50921, 0xea70 }, { 50929, 0xa5ef }, + { 50940, 0x5f9f }, { 50952, 0xffbe }, { 50966, 0xffdb }, { 50980, 0xd7ef }, + /* 0x29200 */ + { 50993, 0xf7f8 }, { 51005, 0xbe4e }, { 51015, 0xf9ff }, { 51029, 0x7b7f }, + { 51042, 0x7fbf }, { 51056, 0xee52 }, { 51065, 0x5ffe }, { 51078, 0xff00 }, + { 51086, 0x0b3f }, { 51095, 0xffff }, { 51111, 0xfe60 }, { 51120, 0x938d }, + { 51128, 0xffff }, { 51144, 0xe83f }, { 51154, 0xffff }, { 51170, 0xf77f }, + /* 0x29300 */ + { 51184, 0xfff9 }, { 51198, 0x2cff }, { 51209, 0xffc7 }, { 51222, 0xcecf }, + { 51233, 0xceff }, { 51246, 0xfffe }, { 51261, 0xcff0 }, { 51271, 0xc3be }, + { 51281, 0xffb7 }, { 51295, 0x7fbe }, { 51308, 0xfff2 }, { 51321, 0xffef }, + { 51336, 0xcfeb }, { 51348, 0xcfff }, { 51362, 0xff7f }, { 51377, 0x0ff7 }, + /* 0x29400 */ + { 51388, 0xbebe }, { 51400, 0xdff8 }, { 51412, 0x7dff }, { 51426, 0xdef7 }, + { 51439, 0x3fef }, { 51452, 0xffff }, { 51468, 0x5fff }, { 51482, 0x7fff }, + { 51497, 0x9fff }, { 51511, 0xffff }, { 51527, 0xecd7 }, { 51538, 0xffff }, + { 51554, 0x7f7f }, { 51568, 0xe37a }, { 51578, 0xffff }, { 51594, 0x7dff }, + /* 0x29500 */ + { 51608, 0xffff }, { 51624, 0xfe19 }, { 51634, 0xb3ff }, { 51647, 0xfff9 }, + { 51661, 0xff65 }, { 51673, 0xefff }, { 51688, 0xfa7f }, { 51701, 0xd5fe }, + { 51713, 0xfcdb }, { 51725, 0xbe09 }, { 51733, 0x53fe }, { 51744, 0x7ffd }, + { 51758, 0x3ff2 }, { 51769, 0xeff8 }, { 51781, 0xff0f }, { 51793, 0x0dff }, + /* 0x29600 */ + { 51804, 0xffea }, { 51817, 0xf6ff }, { 51831, 0xe0ff }, { 51842, 0xffff }, + { 51858, 0x477f }, { 51869, 0xfede }, { 51882, 0x0012 }, { 51884, 0x34d6 }, + { 51892, 0xffff }, { 51908, 0x7fec }, { 51920, 0xff19 }, { 51931, 0xafff }, + { 51945, 0xff63 }, { 51957, 0xe8cf }, { 51967, 0xffff }, { 51983, 0xfe0a }, + /* 0x29700 */ + { 51992, 0xffff }, { 52008, 0xfcfd }, { 52021, 0xb004 }, { 52025, 0xffff }, + { 52041, 0x0267 }, { 52047, 0xef80 }, { 52055, 0x5bff }, { 52068, 0xf337 }, + { 52079, 0xffff }, { 52095, 0xc6c3 }, { 52103, 0x7fff }, { 52118, 0xf4a4 }, + { 52126, 0xbfff }, { 52141, 0x2bf8 }, { 52150, 0xe5f8 }, { 52160, 0x01d3 }, + /* 0x29800 */ + { 52166, 0x0000 }, { 52166, 0x1ee3 }, { 52175, 0x1c7c }, { 52183, 0xde85 }, + { 52192, 0x77f7 }, { 52205, 0x6d3f }, { 52216, 0x67b2 }, { 52225, 0xffaf }, + { 52239, 0xf35e }, { 52250, 0xffff }, { 52266, 0xe0eb }, { 52275, 0xffff }, + { 52291, 0x77bf }, { 52304, 0xffe7 }, { 52318, 0xe19f }, { 52328, 0xffff }, + /* 0x29900 */ + { 52344, 0x82d3 }, { 52351, 0xffcd }, { 52364, 0x7fff }, { 52379, 0xe88b }, + { 52387, 0xffff }, { 52403, 0x5ddf }, { 52415, 0xf814 }, { 52422, 0x0c1f }, + { 52429, 0xffff }, { 52445, 0xdaf3 }, { 52456, 0x31ff }, { 52467, 0xffc8 }, + { 52478, 0xcffd }, { 52491, 0x0f71 }, { 52499, 0x003f }, { 52505, 0x0000 }, + /* 0x29a00 */ + { 52505, 0x0000 }, { 52505, 0xf8e6 }, { 52515, 0xf0df }, { 52526, 0xe5ff }, + { 52539, 0xfe4f }, { 52551, 0xffa8 }, { 52562, 0xe04f }, { 52570, 0x637f }, + { 52581, 0xfe7f }, { 52595, 0x1fbf }, { 52607, 0x6fff }, { 52621, 0xdbcc }, + { 52631, 0xde7f }, { 52644, 0xf7a3 }, { 52655, 0xffff }, { 52671, 0xb69b }, + /* 0x29b00 */ + { 52681, 0x8e1b }, { 52689, 0xffff }, { 52705, 0x03c7 }, { 52712, 0xbfff }, + { 52727, 0xff8f }, { 52740, 0xe5ef }, { 52752, 0x6fff }, { 52766, 0xff80 }, + { 52775, 0x3bff }, { 52788, 0xffc0 }, { 52798, 0xc3cf }, { 52808, 0x77ff }, + { 52822, 0xfff8 }, { 52835, 0xf853 }, { 52844, 0x23f1 }, { 52852, 0x8d3f }, + /* 0x29c00 */ + { 52862, 0xfefe }, { 52876, 0xf2ff }, { 52889, 0xffff }, { 52905, 0xd2fe }, + { 52916, 0xffbb }, { 52930, 0xbfdf }, { 52944, 0xbbff }, { 52958, 0xe7bf }, + { 52971, 0xfdff }, { 52986, 0x7ff3 }, { 52999, 0xdfee }, { 53012, 0xfa49 }, + { 53021, 0xfbf7 }, { 53035, 0xbf7f }, { 53049, 0xf7ff }, { 53064, 0xf7e7 }, + /* 0x29d00 */ + { 53077, 0xefc9 }, { 53088, 0xfb7f }, { 53102, 0xef5f }, { 53115, 0xaddf }, + { 53127, 0xfdb7 }, { 53140, 0x0bfb }, { 53150, 0xffff }, { 53166, 0x13fb }, + { 53176, 0x7fff }, { 53191, 0x4c7e }, { 53200, 0xfffd }, { 53215, 0xbfc3 }, + { 53226, 0xf80c }, { 53233, 0xf7ff }, { 53248, 0x507f }, { 53257, 0xffb0 }, + /* 0x29e00 */ + { 53268, 0xffff }, { 53284, 0x9f85 }, { 53293, 0x21a5 }, { 53299, 0xd600 }, + { 53304, 0xffff }, { 53320, 0x5fc7 }, { 53331, 0x0104 }, { 53333, 0xfffe }, + { 53348, 0xe07f }, { 53358, 0x1e7f }, { 53369, 0xe800 }, { 53373, 0x7fff }, + { 53388, 0x2fe0 }, { 53396, 0xff40 }, { 53405, 0x0dff }, { 53416, 0x0174 }, + /* 0x29f00 */ + { 53421, 0x7ffc }, { 53434, 0xf1c7 }, { 53444, 0x7fe3 }, { 53456, 0xf83e }, + { 53466, 0xf11f }, { 53476, 0xfd2b }, { 53487, 0x7fcb }, { 53499, 0x00eb }, + { 53505, 0xa201 }, { 53509, 0xfbff }, { 53524, 0x1eff }, { 53536, 0xffff }, + { 53552, 0x9fff }, { 53566, 0xf8ff }, { 53579, 0x7fff }, { 53594, 0x11fe }, + /* 0x2a000 */ + { 53603, 0xbf83 }, { 53613, 0xeffe }, { 53627, 0x3fff }, { 53641, 0xb5ff }, + { 53654, 0xff01 }, { 53663, 0xffff }, { 53679, 0x7fff }, { 53694, 0xfb85 }, + { 53704, 0xffff }, { 53720, 0xefbb }, { 53733, 0x242a }, { 53738, 0xfff0 }, + { 53750, 0xffff }, { 53766, 0x3dff }, { 53779, 0x86d5 }, { 53787, 0xfe48 }, + /* 0x2a100 */ + { 53796, 0xfeff }, { 53811, 0x599f }, { 53821, 0xfe09 }, { 53830, 0xfbff }, + { 53845, 0x7fff }, { 53860, 0x947e }, { 53869, 0xc002 }, { 53872, 0xffff }, + { 53888, 0x3fff }, { 53902, 0x24f2 }, { 53909, 0xff02 }, { 53918, 0xffff }, + { 53934, 0x065e }, { 53941, 0x35fe }, { 53952, 0xf003 }, { 53958, 0x9fff }, + /* 0x2a200 */ + { 53972, 0x7efa }, { 53984, 0xff0d }, { 53995, 0xcff4 }, { 54006, 0xbfb7 }, + { 54019, 0x0001 }, { 54020, 0xffc0 }, { 54030, 0xe3db }, { 54041, 0x95ef }, + { 54052, 0xfbdf }, { 54066, 0x5bfb }, { 54078, 0xbde3 }, { 54089, 0xfffe }, + { 54104, 0xebf8 }, { 54115, 0x7ff7 }, { 54129, 0xfcae }, { 54140, 0xfd9d }, + /* 0x2a300 */ + { 54152, 0x7fee }, { 54165, 0x3df7 }, { 54177, 0xf17d }, { 54188, 0xf91f }, + { 54199, 0xfaff }, { 54213, 0xfd7f }, { 54227, 0xffff }, { 54243, 0xff7d }, + { 54257, 0xe0df }, { 54267, 0xfcfd }, { 54280, 0xfdff }, { 54295, 0x6e7d }, + { 54306, 0x7fde }, { 54319, 0x7f7a }, { 54331, 0xf1f2 }, { 54341, 0xffdf }, + /* 0x2a400 */ + { 54356, 0xff9d }, { 54369, 0xfbfe }, { 54383, 0x0df3 }, { 54392, 0x831c }, + { 54398, 0x7f1f }, { 54410, 0x7ffc }, { 54423, 0xffea }, { 54436, 0xc09f }, + { 54444, 0x993f }, { 54454, 0xff7f }, { 54469, 0xfe8f }, { 54481, 0xcf31 }, + { 54490, 0xde5b }, { 54501, 0xfdff }, { 54516, 0xf3b6 }, { 54527, 0xfbff }, + /* 0x2a500 */ + { 54542, 0xed77 }, { 54554, 0x39f7 }, { 54565, 0xdffc }, { 54578, 0xfdeb }, + { 54591, 0xff5f }, { 54605, 0xff9e }, { 54618, 0xff92 }, { 54629, 0xefe2 }, + { 54640, 0xf9ef }, { 54653, 0x0dff }, { 54664, 0xc7fe }, { 54676, 0x78f9 }, + { 54686, 0xfef6 }, { 54699, 0xff37 }, { 54712, 0xbfff }, { 54727, 0xffe4 }, + /* 0x2a600 */ + { 54739, 0xec33 }, { 54748, 0x99ff }, { 54760, 0x77f7 }, { 54773, 0xffd5 }, + { 54786, 0xffcf }, { 54800, 0xffcf }, { 54814, 0x56f8 }, { 54823, 0xbbfd }, + { 54836, 0x7b5f }, { 54848, 0xfbee }, { 54861, 0xf9e1 }, { 54871, 0xfffb }, + { 54886, 0xef5f }, { 54899, 0x007f }, +}; +static const Summary16 cns11643_inv_uni2indx_page2f8[34] = { + /* 0x2f800 */ + { 54906, 0xffff }, { 54922, 0xffff }, { 54938, 0xffff }, { 54954, 0xffff }, + { 54970, 0xfffe }, { 54985, 0xffff }, { 55001, 0xffff }, { 55017, 0xffff }, + { 55033, 0xffff }, { 55049, 0xffef }, { 55064, 0xffff }, { 55080, 0xffff }, + { 55096, 0xdfff }, { 55111, 0xffff }, { 55127, 0xffff }, { 55143, 0xffff }, + /* 0x2f900 */ + { 55159, 0xffff }, { 55175, 0xffff }, { 55191, 0xffff }, { 55207, 0xffff }, + { 55223, 0xffff }, { 55239, 0xffff }, { 55255, 0xffff }, { 55271, 0xffff }, + { 55287, 0xffff }, { 55303, 0xffef }, { 55318, 0xffff }, { 55334, 0xfffb }, + { 55349, 0xffff }, { 55365, 0xffef }, { 55380, 0xffff }, { 55396, 0xffff }, + /* 0x2fa00 */ + { 55412, 0xffff }, { 55428, 0x3fff }, +}; + +static int +cns11643_inv_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0000 && wc < 0x0100) + summary = &cns11643_inv_uni2indx_page00[(wc>>4)]; + else if (wc >= 0x0200 && wc < 0x03d0) + summary = &cns11643_inv_uni2indx_page02[(wc>>4)-0x020]; + else if (wc >= 0x2000 && wc < 0x22c0) + summary = &cns11643_inv_uni2indx_page20[(wc>>4)-0x200]; + else if (wc >= 0x2400 && wc < 0x2650) + summary = &cns11643_inv_uni2indx_page24[(wc>>4)-0x240]; + else if (wc >= 0x3000 && wc < 0x9fb0) + summary = &cns11643_inv_uni2indx_page30[(wc>>4)-0x300]; + else if (wc >= 0xfa00 && wc < 0xfa30) + summary = &cns11643_inv_uni2indx_pagefa[(wc>>4)-0xfa0]; + else if (wc >= 0xfe00 && wc < 0xfff0) + summary = &cns11643_inv_uni2indx_pagefe[(wc>>4)-0xfe0]; + else if (wc >= 0x20000 && wc < 0x2a6e0) + summary = &cns11643_inv_uni2indx_page200[(wc>>4)-0x2000]; + else if (wc >= 0x2f800 && wc < 0x2fa20) + summary = &cns11643_inv_uni2indx_page2f8[(wc>>4)-0x2f80]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + used += summary->indx; + r[0] = cns11643_inv_2charset[3*used]; + r[1] = cns11643_inv_2charset[3*used+1]; + r[2] = cns11643_inv_2charset[3*used+2]; + return 3; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/config.h b/jni/parted/libiconv/lib/config.h new file mode 100755 index 0000000..6d2771b --- /dev/null +++ b/jni/parted/libiconv/lib/config.h @@ -0,0 +1,1545 @@ +/* Copyright (C) 1999-2003, 2005, 2007, 2010, 2012 Free Software Foundation, Inc. + This file is part of the GNU LIBICONV Library. + + The GNU LIBICONV Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + The GNU LIBICONV Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU LIBICONV Library; see the file COPYING.LIB. + If not, see . */ + + +/* Define to 1 to enable a few rarely used encodings. */ +/* #undef ENABLE_EXTRA */ + +/* Define to 1 if the package shall run at any location in the filesystem. */ +/* #undef ENABLE_RELOCATABLE */ + +/* Define to a type if does not define. */ +/* #undef mbstate_t */ + +/* Define if you have , the iconv_t type, and the + iconv_open, iconv, iconv_close functions. */ +#define HAVE_ICONV 1 +/* Define as const if the declaration of iconv() needs const. */ +#define ICONV_CONST + +/* Define to 1 if you have the getc_unlocked() function. */ +#define HAVE_GETC_UNLOCKED 1 + +/* Define if you have and nl_langinfo(CODESET). */ +#define HAVE_LANGINFO_CODESET 1 + +/* Define if you have the mbrtowc() function. */ +#define HAVE_MBRTOWC 1 + +/* Define to 1 if you have the setlocale() function. */ +#define HAVE_SETLOCALE 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_STDDEF_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#define HAVE_VISIBILITY 1 + +/* Define if you have the wcrtomb() function. */ +#define HAVE_WCRTOMB 1 + +/* Define to 1 if O_NOFOLLOW works. */ +#define HAVE_WORKING_O_NOFOLLOW 1 + +/* Define if the machine's byte ordering is little endian. */ +#define WORDS_LITTLEENDIAN 1 + +/* Define to the value of ${prefix}, as a string. */ +#define INSTALLPREFIX "/usr/local" + +/* Define to '__inline__' or '__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to 'int' if does not define. */ +/* #undef mode_t */ + +/* Define as a signed type of the same size as size_t. */ +/* #undef ssize_t */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define to the number of bits in type 'ptrdiff_t'. */ +#define BITSIZEOF_PTRDIFF_T 64 + +/* Define to the number of bits in type 'sig_atomic_t'. */ +#define BITSIZEOF_SIG_ATOMIC_T 32 + +/* Define to the number of bits in type 'size_t'. */ +#define BITSIZEOF_SIZE_T 64 + +/* Define to the number of bits in type 'wchar_t'. */ +#define BITSIZEOF_WCHAR_T 32 + +/* Define to the number of bits in type 'wint_t'. */ +#define BITSIZEOF_WINT_T 32 + +/* Define to 1 if using 'alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to 1 if // is a file system root distinct from /. */ +/* #undef DOUBLE_SLASH_IS_DISTINCT_ROOT */ + +/* Define as good substitute value for EILSEQ. */ +/* #undef EILSEQ */ + +/* Define to 1 to enable a few rarely used encodings. */ +/* #undef ENABLE_EXTRA */ + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +/* #undef ENABLE_NLS */ + +/* Define to 1 if the package shall run at any location in the file system. */ +/* #undef ENABLE_RELOCATABLE */ + +/* Define this to 1 if F_DUPFD behavior does not match POSIX */ +/* #undef FCNTL_DUPFD_BUGGY */ + +/* Define to 1 if realpath() can malloc memory, always gives an absolute path, + and handles a trailing slash correctly. */ +/* #undef FUNC_REALPATH_NEARLY_WORKS */ + +/* Define to 1 if realpath() can malloc memory, always gives an absolute path, + and handles leading slashes and a trailing slash correctly. */ +#define FUNC_REALPATH_WORKS 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module canonicalize-lgpl shall be considered present. */ +#define GNULIB_CANONICALIZE_LGPL 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fscanf shall be considered present. */ +#define GNULIB_FSCANF 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module msvc-nothrow shall be considered present. */ +#define GNULIB_MSVC_NOTHROW 1 + +/* Define to 1 if printf and friends should be labeled with attribute + "__gnu_printf__" instead of "__printf__" */ +/* #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU */ + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module scanf shall be considered present. */ +#define GNULIB_SCANF 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module sigpipe shall be considered present. */ +#define GNULIB_SIGPIPE 1 + +/* Define to 1 if you want the FILE stream functions getc, putc, etc. to use + unlocked I/O if available, throughout the package. Unlocked I/O can improve + performance, sometimes dramatically. But unlocked I/O is safe only in + single-threaded programs, as well as in multithreaded programs for which + you can guarantee that every FILE stream, including stdin, stdout, stderr, + is used only in a single thread. */ +#define GNULIB_STDIO_SINGLE_THREAD 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module strerror shall be considered present. */ +#define GNULIB_STRERROR 1 + +/* Define to 1 when the gnulib module canonicalize_file_name should be tested. + */ +#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 + +/* Define to 1 when the gnulib module cloexec should be tested. */ +#define GNULIB_TEST_CLOEXEC 1 + +/* Define to 1 when the gnulib module close should be tested. */ +#define GNULIB_TEST_CLOSE 1 + +/* Define to 1 when the gnulib module dup2 should be tested. */ +#define GNULIB_TEST_DUP2 1 + +/* Define to 1 when the gnulib module environ should be tested. */ +#define GNULIB_TEST_ENVIRON 1 + +/* Define to 1 when the gnulib module fcntl should be tested. */ +#define GNULIB_TEST_FCNTL 1 + +/* Define to 1 when the gnulib module fgetc should be tested. */ +#define GNULIB_TEST_FGETC 1 + +/* Define to 1 when the gnulib module fgets should be tested. */ +#define GNULIB_TEST_FGETS 1 + +/* Define to 1 when the gnulib module fprintf should be tested. */ +#define GNULIB_TEST_FPRINTF 1 + +/* Define to 1 when the gnulib module fputc should be tested. */ +#define GNULIB_TEST_FPUTC 1 + +/* Define to 1 when the gnulib module fputs should be tested. */ +#define GNULIB_TEST_FPUTS 1 + +/* Define to 1 when the gnulib module fread should be tested. */ +#define GNULIB_TEST_FREAD 1 + +/* Define to 1 when the gnulib module free-posix should be tested. */ +#define GNULIB_TEST_FREE_POSIX 1 + +/* Define to 1 when the gnulib module fscanf should be tested. */ +#define GNULIB_TEST_FSCANF 1 + +/* Define to 1 when the gnulib module fstat should be tested. */ +#define GNULIB_TEST_FSTAT 1 + +/* Define to 1 when the gnulib module fwrite should be tested. */ +#define GNULIB_TEST_FWRITE 1 + +/* Define to 1 when the gnulib module getc should be tested. */ +#define GNULIB_TEST_GETC 1 + +/* Define to 1 when the gnulib module getchar should be tested. */ +#define GNULIB_TEST_GETCHAR 1 + +/* Define to 1 when the gnulib module getdtablesize should be tested. */ +#define GNULIB_TEST_GETDTABLESIZE 1 + +/* Define to 1 when the gnulib module malloc-posix should be tested. */ +#define GNULIB_TEST_MALLOC_POSIX 1 + +/* Define to 1 when the gnulib module mempcpy should be tested. */ +#define GNULIB_TEST_MEMPCPY 1 + +/* Define to 1 when the gnulib module open should be tested. */ +#define GNULIB_TEST_OPEN 1 + +/* Define to 1 when the gnulib module printf should be tested. */ +#define GNULIB_TEST_PRINTF 1 + +/* Define to 1 when the gnulib module putc should be tested. */ +#define GNULIB_TEST_PUTC 1 + +/* Define to 1 when the gnulib module putchar should be tested. */ +#define GNULIB_TEST_PUTCHAR 1 + +/* Define to 1 when the gnulib module puts should be tested. */ +#define GNULIB_TEST_PUTS 1 + +/* Define to 1 when the gnulib module raise should be tested. */ +#define GNULIB_TEST_RAISE 1 + +/* Define to 1 when the gnulib module rawmemchr should be tested. */ +#define GNULIB_TEST_RAWMEMCHR 1 + +/* Define to 1 when the gnulib module read should be tested. */ +#define GNULIB_TEST_READ 1 + +/* Define to 1 when the gnulib module readlink should be tested. */ +#define GNULIB_TEST_READLINK 1 + +/* Define to 1 when the gnulib module realloc-posix should be tested. */ +#define GNULIB_TEST_REALLOC_POSIX 1 + +/* Define to 1 when the gnulib module realpath should be tested. */ +#define GNULIB_TEST_REALPATH 1 + +/* Define to 1 when the gnulib module scanf should be tested. */ +#define GNULIB_TEST_SCANF 1 + +/* Define to 1 when the gnulib module sigprocmask should be tested. */ +#define GNULIB_TEST_SIGPROCMASK 1 + +/* Define to 1 when the gnulib module stat should be tested. */ +#define GNULIB_TEST_STAT 1 + +/* Define to 1 when the gnulib module strerror should be tested. */ +#define GNULIB_TEST_STRERROR 1 + +/* Define to 1 when the gnulib module vfprintf should be tested. */ +#define GNULIB_TEST_VFPRINTF 1 + +/* Define to 1 when the gnulib module vprintf should be tested. */ +#define GNULIB_TEST_VPRINTF 1 + +/* Define to 1 if you have 'alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if works. */ +#define HAVE_ALLOCA_H 1 + +/* Define to 1 if you have the `canonicalize_file_name' function. */ +/* #undef HAVE_CANONICALIZE_FILE_NAME */ + +/* Define to 1 if you have the Mac OS X function + CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES */ + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define to 1 if you have the `copy_file_range' function. */ +/* #undef HAVE_COPY_FILE_RANGE */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_CRTDEFS_H */ + +/* Define to 1 if C supports variable-length arrays. */ +#define HAVE_C_VARARRAYS 1 + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +/* #undef HAVE_DCGETTEXT */ + +/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_CLEARERR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `ecvt', and to 0 if you don't. + */ +#define HAVE_DECL_ECVT 0 + +/* Define to 1 if you have the declaration of `execvpe', and to 0 if you + don't. */ +#define HAVE_DECL_EXECVPE 1 + +/* Define to 1 if you have the declaration of `fcloseall', and to 0 if you + don't. */ +#define HAVE_DECL_FCLOSEALL 0 + +/* Define to 1 if you have the declaration of `fcvt', and to 0 if you don't. + */ +#define HAVE_DECL_FCVT 0 + +/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_FEOF_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FERROR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FFLUSH_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FGETS_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FPUTC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FPUTS_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FREAD_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FWRITE_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `gcvt', and to 0 if you don't. + */ +#define HAVE_DECL_GCVT 0 + +/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_GETCHAR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_GETC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you + don't. */ +#define HAVE_DECL_GETDTABLESIZE 0 + +/* Define to 1 if you have the declaration of `program_invocation_name', and + to 0 if you don't. */ +#define HAVE_DECL_PROGRAM_INVOCATION_NAME 0 + +/* Define to 1 if you have the declaration of `program_invocation_short_name', + and to 0 if you don't. */ +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 0 + +/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_PUTCHAR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_PUTC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `setenv', and to 0 if you don't. + */ +#define HAVE_DECL_SETENV 1 + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#define HAVE_DECL_STRERROR_R 1 + +/* Define to 1 if you have the declaration of `wcsdup', and to 0 if you don't. + */ +#define HAVE_DECL_WCSDUP 1 + +/* Define to 1 if you have the declaration of `__argv', and to 0 if you don't. + */ +#define HAVE_DECL___ARGV 0 + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define if you have the declaration of environ. */ +#define HAVE_ENVIRON_DECL 1 + +/* Define to 1 if you have the `faccessat' function. */ +#define HAVE_FACCESSAT 1 + +/* Define to 1 if you have the `fcntl' function. */ +#define HAVE_FCNTL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FEATURES_H 1 + +/* Define if the 'free' function is guaranteed to preserve errno. */ +/* #undef HAVE_FREE_POSIX */ + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* Define to 1 if you have the `getc_unlocked' function. */ +#define HAVE_GETC_UNLOCKED 1 + +/* Define to 1 if you have the `getdtablesize' function. */ +/* #undef HAVE_GETDTABLESIZE */ + +/* Define to 1 if you have the `getexecname' function. */ +/* #undef HAVE_GETEXECNAME */ + +/* Define to 1 if you have the `getprogname' function. */ +#define HAVE_GETPROGNAME 1 + +/* Define if the GNU gettext() function is already present or preinstalled. */ +/* #undef HAVE_GETTEXT */ + +/* Define if you have the iconv() function and it works. */ +#define HAVE_ICONV 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define if you have and nl_langinfo(CODESET). */ +#define HAVE_LANGINFO_CODESET 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if the system has the type 'long long int'. */ +#define HAVE_LONG_LONG_INT 1 + +/* Define to 1 if you have the `lstat' function. */ +#define HAVE_LSTAT 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MACH_O_DYLD_H */ + +/* Define if malloc, realloc, and calloc set errno on allocation failure. */ +#define HAVE_MALLOC_POSIX 1 + +/* Define to 1 if you have the `mbrtowc' function. */ +#define HAVE_MBRTOWC 1 + +/* Define to 1 if you have the `mbsinit' function. */ +#define HAVE_MBSINIT 1 + +/* Define to 1 if declares mbstate_t. */ +#define HAVE_MBSTATE_T 1 + +/* Define to 1 if you have the `memmove' function. */ +#define HAVE_MEMMOVE 1 + +/* Define to 1 if you have the `mempcpy' function. */ +#define HAVE_MEMPCPY 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MINIX_CONFIG_H */ + +/* Define to 1 if defines the MIN and MAX macros. */ +/* #undef HAVE_MINMAX_IN_LIMITS_H */ + +/* Define to 1 if defines the MIN and MAX macros. */ +#define HAVE_MINMAX_IN_SYS_PARAM_H 1 + +/* Define to 1 on MSVC platforms that have the "invalid parameter handler" + concept. */ +/* #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER */ + +/* Define to 1 if you have the `raise' function. */ +#define HAVE_RAISE 1 + +/* Define to 1 if you have the `rawmemchr' function. */ +/* #undef HAVE_RAWMEMCHR */ + +/* Define to 1 if you have the `readlink' function. */ +#define HAVE_READLINK 1 + +/* Define to 1 if you have the `readlinkat' function. */ +#define HAVE_READLINKAT 1 + +/* Define to 1 if you have the `realpath' function. */ +#define HAVE_REALPATH 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SDKDDKVER_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SEARCH_H 1 + +/* Define to 1 if you have the `setdtablesize' function. */ +/* #undef HAVE_SETDTABLESIZE */ + +/* Define to 1 if you have the `setenv' function. */ +#define HAVE_SETENV 1 + +/* Define to 1 if you have the `setlocale' function. */ +#define HAVE_SETLOCALE 1 + +/* Define to 1 if 'sig_atomic_t' is a signed integer type. */ +#define HAVE_SIGNED_SIG_ATOMIC_T 1 + +/* Define to 1 if 'wchar_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_WCHAR_T */ + +/* Define to 1 if 'wint_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_WINT_T */ + +/* Define to 1 if the system has the type `sigset_t'. */ +#define HAVE_SIGSET_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have `strerror_r'. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if `st_atimensec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIMENSEC */ + +/* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC */ + +/* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC */ + +/* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */ +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 + +/* Define to 1 if `st_birthtimensec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC */ + +/* Define to 1 if `st_birthtimespec.tv_nsec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC */ + +/* Define to 1 if `st_birthtim.tv_nsec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC */ + +/* Define to 1 if you have the `symlink' function. */ +#define HAVE_SYMLINK 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_BITYPES_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_INTTYPES_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the `tsearch' function. */ +#define HAVE_TSEARCH 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if the system has the type 'unsigned long long int'. */ +#define HAVE_UNSIGNED_LONG_LONG_INT 1 + +/* Define if you have a global __progname variable */ +#define HAVE_VAR___PROGNAME 1 + +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#define HAVE_VISIBILITY 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_WCHAR_H 1 + +/* Define if you have the 'wchar_t' type. */ +#define HAVE_WCHAR_T 1 + +/* Define to 1 if you have the `wcrtomb' function. */ +#define HAVE_WCRTOMB 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define if you have the 'wint_t' type. */ +#define HAVE_WINT_T 1 + +/* Define to 1 if O_NOATIME works. */ +#define HAVE_WORKING_O_NOATIME 1 + +/* Define to 1 if O_NOFOLLOW works. */ +#define HAVE_WORKING_O_NOFOLLOW 1 + +/* Define to 1 if the system has the type `_Bool'. */ +#define HAVE__BOOL 1 + +/* Define to 1 if you have the `_NSGetExecutablePath' function. */ +/* #undef HAVE__NSGETEXECUTABLEPATH */ + +/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ +/* #undef HAVE__SET_INVALID_PARAMETER_HANDLER */ + +/* Define to 1 if the compiler supports __builtin_expect, + and to 2 if does. */ +#define HAVE___BUILTIN_EXPECT 1 +#ifndef HAVE___BUILTIN_EXPECT +# define __builtin_expect(e, c) (e) +#elif HAVE___BUILTIN_EXPECT == 2 +# include +#endif + + +/* Define to 1 if ctype.h defines __header_inline. */ +/* #undef HAVE___HEADER_INLINE */ + +/* Please see the Gnulib manual for how to use these macros. + + Suppress extern inline with HP-UX cc, as it appears to be broken; see + . + + Suppress extern inline with Sun C in standards-conformance mode, as it + mishandles inline functions that call each other. E.g., for 'inline void f + (void) { } inline void g (void) { f (); }', c99 incorrectly complains + 'reference to static identifier "f" in extern inline function'. + This bug was observed with Oracle Developer Studio 12.6 + (Sun C 5.15 SunOS_sparc 2017/05/30). + + Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) + on configurations that mistakenly use 'static inline' to implement + functions or macros in standard C headers like . For example, + if isdigit is mistakenly implemented via a static inline function, + a program containing an extern inline function that calls isdigit + may not work since the C standard prohibits extern inline functions + from calling static functions (ISO C 99 section 6.7.4.(3). + This bug is known to occur on: + + OS X 10.8 and earlier; see: + https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html + + DragonFly; see + http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log + + FreeBSD; see: + https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html + + OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and + for clang but remains for g++; see . + Assume DragonFly and FreeBSD will be similar. + + GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. + */ +#if (((defined __APPLE__ && defined __MACH__) \ + || defined __DragonFly__ || defined __FreeBSD__) \ + && (defined HAVE___HEADER_INLINE \ + ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ + && ! defined __clang__) \ + : ((! defined _DONT_USE_CTYPE_INLINE_ \ + && (defined __GNUC__ || defined __cplusplus)) \ + || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ + && defined __GNUC__ && ! defined __cplusplus)))) +# define _GL_EXTERN_INLINE_STDHEADER_BUG +#endif +#if ((__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : (199901L <= __STDC_VERSION__ \ + && !defined __HP_cc \ + && !defined __PGI \ + && !(defined __SUNPRO_C && __STDC__))) \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# define _GL_INLINE inline +# define _GL_EXTERN_INLINE extern inline +# define _GL_EXTERN_INLINE_IN_USE +#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ + /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ +# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) +# else +# define _GL_INLINE extern inline +# endif +# define _GL_EXTERN_INLINE extern +# define _GL_EXTERN_INLINE_IN_USE +#else +# define _GL_INLINE _GL_UNUSED static +# define _GL_EXTERN_INLINE _GL_UNUSED static +#endif + +/* In GCC 4.6 (inclusive) to 5.1 (exclusive), + suppress bogus "no previous prototype for 'FOO'" + and "no previous declaration for 'FOO'" diagnostics, + when FOO is an inline function in the header; see + and + . */ +#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ +# define _GL_INLINE_HEADER_CONST_PRAGMA +# else +# define _GL_INLINE_HEADER_CONST_PRAGMA \ + _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") +# endif +# define _GL_INLINE_HEADER_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ + _GL_INLINE_HEADER_CONST_PRAGMA +# define _GL_INLINE_HEADER_END \ + _Pragma ("GCC diagnostic pop") +#else +# define _GL_INLINE_HEADER_BEGIN +# define _GL_INLINE_HEADER_END +#endif + +/* Define to 1 if the compiler supports the keyword '__inline'. */ +#define HAVE___INLINE 1 + +/* Define as const if the declaration of iconv() needs const. */ +#define ICONV_CONST + +/* Define to the value of ${prefix}, as a string. */ +#define INSTALLPREFIX "/usr/local" + +/* Define to 1 if 'lstat' dereferences a symlink specified with a trailing + slash. */ +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ +#define MALLOC_0_IS_NONNULL 1 + +/* Use GNU style printf and scanf. */ +#ifndef __USE_MINGW_ANSI_STDIO +# define __USE_MINGW_ANSI_STDIO 1 +#endif + + +/* Define to 1 if open() fails to recognize a trailing slash. */ +/* #undef OPEN_TRAILING_SLASH_BUG */ + +/* Name of package */ +#define PACKAGE "libiconv" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libiconv" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libiconv 1.17" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libiconv" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.17" + +/* Define to the type that is the result of default argument promotions of + type mode_t. */ +#define PROMOTED_MODE_T mode_t + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'ptrdiff_t'. */ +#define PTRDIFF_T_SUFFIX l + +/* Define to 1 if readlink fails to recognize a trailing slash. */ +/* #undef READLINK_TRAILING_SLASH_BUG */ + +/* Define to 1 if readlink sets errno instead of truncating a too-long link. + */ +/* #undef READLINK_TRUNCATE_BUG */ + +/* Define to 1 if stat needs help when passed a file name with a trailing + slash */ +/* #undef REPLACE_FUNC_STAT_FILE */ + +/* Define to 1 if strerror(0) does not return a message implying success. */ +/* #undef REPLACE_STRERROR_0 */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'sig_atomic_t'. */ +#define SIG_ATOMIC_T_SUFFIX + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'size_t'. */ +#define SIZE_T_SUFFIX ul + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#define STDC_HEADERS 1 + +/* Define to 1 if strerror_r returns char *. */ +#define STRERROR_R_CHAR_P 1 + +/* Define to 1 if the type of the st_atim member of a struct stat is struct + timespec. */ +#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 + +/* Define to the prefix of C symbols at the assembler and linker level, either + an underscore or empty. */ +#define USER_LABEL_PREFIX + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# define _DARWIN_C_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# define _HPUX_ALT_XOPEN_SOCKET_API 1 +#endif +/* Identify the host operating system as Minix. + This macro does not affect the system headers' behavior. + A future release of Autoconf may stop defining this macro. */ +#ifndef _MINIX +/* # undef _MINIX */ +#endif +/* Enable general extensions on NetBSD. + Enable NetBSD compatibility extensions on Minix. */ +#ifndef _NETBSD_SOURCE +# define _NETBSD_SOURCE 1 +#endif +/* Enable OpenBSD compatibility extensions on NetBSD. + Oddly enough, this does nothing on OpenBSD. */ +#ifndef _OPENBSD_SOURCE +# define _OPENBSD_SOURCE 1 +#endif +/* Define to 1 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_SOURCE +/* # undef _POSIX_SOURCE */ +#endif +/* Define to 2 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_1_SOURCE +/* # undef _POSIX_1_SOURCE */ +#endif +/* Enable POSIX-compatible threading on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# define __STDC_WANT_LIB_EXT2__ 1 +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable X/Open extensions. Define to 500 only if necessary + to make mbstate_t available. */ +#ifndef _XOPEN_SOURCE +/* # undef _XOPEN_SOURCE */ +#endif + + +/* An alias of GNULIB_STDIO_SINGLE_THREAD. */ +#define USE_UNLOCKED_IO GNULIB_STDIO_SINGLE_THREAD + +/* Version number of package */ +#define VERSION "1.17" + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wchar_t'. */ +#define WCHAR_T_SUFFIX u + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wint_t'. */ +#define WINT_T_SUFFIX u + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Define if the machine's byte ordering is little endian. */ +#define WORDS_LITTLEENDIAN 1 + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* True if the compiler says it groks GNU C version MAJOR.MINOR. */ +#if defined __GNUC__ && defined __GNUC_MINOR__ +# define _GL_GNUC_PREREQ(major, minor) \ + ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) +#else +# define _GL_GNUC_PREREQ(major, minor) 0 +#endif + + +/* Define to enable the declarations of ISO C 11 types and functions. */ +/* #undef _ISOC11_SOURCE */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* The _Noreturn keyword of C11. */ +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || (!defined __STRICT_ANSI__ \ + && (_GL_GNUC_PREREQ (4, 7) \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))))) + /* _Noreturn works as-is. */ +# elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif + + +/* Number of bits in a timestamp, on hosts where this is settable. */ +/* #undef _TIME_BITS */ + +/* For standard stat data types on VMS. */ +#define _USE_STD_STAT 1 + +/* For 64-bit time_t on 32-bit mingw. */ +/* #undef __MINGW_USE_VC2005_COMPAT */ + +/* Define to 1 if the system predates C++11. */ +/* #undef __STDC_CONSTANT_MACROS */ + +/* Define to 1 if the system predates C++11. */ +/* #undef __STDC_LIMIT_MACROS */ + +/* Define to 1 if C does not support variable-length arrays, and if the + compiler does not already define this. */ +/* #undef __STDC_NO_VLA__ */ + +/* The _GL_ASYNC_SAFE marker should be attached to functions that are + signal handlers (for signals other than SIGABRT, SIGPIPE) or can be + invoked from such signal handlers. Such functions have some restrictions: + * All functions that it calls should be marked _GL_ASYNC_SAFE as well, + or should be listed as async-signal-safe in POSIX + + section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in + particular, are NOT async-signal-safe. + * All memory locations (variables and struct fields) that these functions + access must be marked 'volatile'. This holds for both read and write + accesses. Otherwise the compiler might optimize away stores to and + reads from such locations that occur in the program, depending on its + data flow analysis. For example, when the program contains a loop + that is intended to inspect a variable set from within a signal handler + while (!signal_occurred) + ; + the compiler is allowed to transform this into an endless loop if the + variable 'signal_occurred' is not declared 'volatile'. + Additionally, recall that: + * A signal handler should not modify errno (except if it is a handler + for a fatal signal and ends by raising the same signal again, thus + provoking the termination of the process). If it invokes a function + that may clobber errno, it needs to save and restore the value of + errno. */ +#define _GL_ASYNC_SAFE + + +/* Attributes. */ +#if (defined __has_attribute \ + && (!defined __clang_minor__ \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))) +# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) +#else +# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr +# define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) +# define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) +# define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) +# define _GL_ATTR_diagnose_if 0 +# define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) +# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) +# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) +# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) +# ifdef _ICC +# define _GL_ATTR_may_alias 0 +# else +# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) +# endif +# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) +# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) +# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) +# define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) +# define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) +# define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) +# define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) +# define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) +#endif + +#ifdef __has_c_attribute +# if ((defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710 \ + && _GL_GNUC_PREREQ (4, 6)) +# pragma GCC diagnostic ignored "-Wpedantic" +# endif +# define _GL_HAS_C_ATTRIBUTE(attr) __has_c_attribute (__##attr##__) +#else +# define _GL_HAS_C_ATTRIBUTE(attr) 0 +#endif + + +/* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function + is the size of the returned memory block. + _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied + by the Nth argument of the function is the size of the returned memory block. + */ +/* Applies to: function, pointer to function, function types. */ +#if _GL_HAS_ATTRIBUTE (alloc_size) +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) +#else +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) +#endif + +/* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the + function and report an error if it cannot do so. */ +/* Applies to: function. */ +#if _GL_HAS_ATTRIBUTE (always_inline) +# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) +#else +# define _GL_ATTRIBUTE_ALWAYS_INLINE +#endif + +/* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show + in stack traces when debugging. The compiler should omit the function from + stack traces. */ +/* Applies to: function. */ +#if _GL_HAS_ATTRIBUTE (artificial) +# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) +#else +# define _GL_ATTRIBUTE_ARTIFICIAL +#endif + +/* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */ +/* Applies to: functions. */ +/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at + . + Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ +#if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ +# ifndef __SUNPRO_C +# define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) +# else +# define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) +# endif +#else +# define _GL_ATTRIBUTE_COLD +#endif + +/* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate + calls to the function with the same arguments. + This attribute is safe for a function that neither depends on nor affects + observable state, and always returns exactly once - e.g., does not loop + forever, and does not call longjmp. + (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (const) +# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) +#else +# define _GL_ATTRIBUTE_CONST +#endif + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. + _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that + can be freed via 'free'; it can be used only after declaring 'free'. */ +/* Applies to: functions. Cannot be used on inline functions. */ +#if _GL_GNUC_PREREQ (11, 0) +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +#else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +#endif +/* If gnulib's or has already defined this macro, continue + to use this earlier definition, since may not have been included + yet. */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) +#endif + +/* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated. + The compiler may warn if the entity is used. */ +/* Applies to: + - function, variable, + - struct, union, struct/union member, + - enumeration, enumeration item, + - typedef, + in C++ also: namespace, class, template specialization. */ +#if _GL_HAS_C_ATTRIBUTE (deprecated) +# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] +#elif _GL_HAS_ATTRIBUTE (deprecated) +# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) +#else +# define _GL_ATTRIBUTE_DEPRECATED +#endif + +/* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and + the function call is not optimized away. + _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and + the function call is not optimized away. */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (error) +# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) +# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) +#elif _GL_HAS_ATTRIBUTE (diagnose_if) +# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) +# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +#else +# define _GL_ATTRIBUTE_ERROR(msg) +# define _GL_ATTRIBUTE_WARNING(msg) +#endif + +/* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain + visible to debuggers etc., even with '-fwhole-program'. */ +/* Applies to: functions, variables. */ +#if _GL_HAS_ATTRIBUTE (externally_visible) +# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) +#else +# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE +#endif + +/* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if + the control flow falls through to the immediately following 'case' or + 'default' label. The compiler should not warn in this case. */ +/* Applies to: Empty statement (;), inside a 'switch' statement. */ +/* Always expands to something. */ +#if _GL_HAS_C_ATTRIBUTE (fallthrough) +# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] +#elif _GL_HAS_ATTRIBUTE (fallthrough) +# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) +#else +# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) +#endif + +/* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) + declares that the STRING-INDEXth function argument is a format string of + style ARCHETYPE, which is one of: + printf, gnu_printf + scanf, gnu_scanf, + strftime, gnu_strftime, + strfmon, + or the same thing prefixed and suffixed with '__'. + If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK + are suitable for the format string. */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (format) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) +#endif + +/* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other + compilation unit, it executes code from that unit only by return or by + exception handling. This declaration lets the compiler optimize that unit + more aggressively. */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (leaf) +# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) +#else +# define _GL_ATTRIBUTE_LEAF +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (malloc) +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +#else +# define _GL_ATTRIBUTE_MALLOC +#endif + +/* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the + same storage as pointers to other types. Thus this declaration disables + strict aliasing optimization. */ +/* Applies to: types. */ +/* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ +#if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C +# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) +#else +# define _GL_ATTRIBUTE_MAY_ALIAS +#endif + +/* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if + the entity is not used. The compiler should not warn if the entity is not + used. */ +/* Applies to: + - function, variable, + - struct, union, struct/union member, + - enumeration, enumeration item, + - typedef, + in C++ also: class. */ +/* In C++ and C2x, this is spelled [[__maybe_unused__]]. + GCC's syntax is __attribute__ ((__unused__)). + clang supports both syntaxes. */ +#if _GL_HAS_C_ATTRIBUTE (maybe_unused) +# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] +#else +# define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED +#endif +/* Alternative spelling of this macro, for convenience. */ +#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED +/* Earlier spellings of this macro. */ +#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED + +/* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not + discard the return value. The compiler may warn if the caller does not use + the return value, unless the caller uses something like ignore_value. */ +/* Applies to: function, enumeration, class. */ +#if _GL_HAS_C_ATTRIBUTE (nodiscard) +# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] +#elif _GL_HAS_ATTRIBUTE (warn_unused_result) +# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) +#else +# define _GL_ATTRIBUTE_NODISCARD +#endif + +/* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the + function. */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (noinline) +# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) +#else +# define _GL_ATTRIBUTE_NOINLINE +#endif + +/* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,... + must not be NULL. + _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be + null. */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (nonnull) +# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) +#else +# define _GL_ATTRIBUTE_NONNULL(args) +#endif + +/* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is + not meant to be NUL-terminated. */ +/* Applies to: struct/union members and variables that are arrays of element + type '[[un]signed] char'. */ +#if _GL_HAS_ATTRIBUTE (nonstring) +# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) +#else +# define _GL_ATTRIBUTE_NONSTRING +#endif + +/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +#else +# define _GL_ATTRIBUTE_NOTHROW +#endif + +/* _GL_ATTRIBUTE_PACKED declares: + For struct members: The member has the smallest possible alignment. + For struct, union, class: All members have the smallest possible alignment, + minimizing the memory required. */ +/* Applies to: struct members, struct, union, + in C++ also: class. */ +#if _GL_HAS_ATTRIBUTE (packed) +# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) +#else +# define _GL_ATTRIBUTE_PACKED +#endif + +/* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate + calls to the function with the same arguments if observable state is not + changed between calls. + This attribute is safe for a function that does not affect + observable state, and always returns exactly once. + (This attribute is looser than _GL_ATTRIBUTE_CONST.) */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (pure) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE +#endif + +/* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is + a non-NULL pointer. */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (returns_nonnull) +# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) +#else +# define _GL_ATTRIBUTE_RETURNS_NONNULL +#endif + +/* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a + trailing NULL argument. + _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). + _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ +/* Applies to: functions. */ +#if _GL_HAS_ATTRIBUTE (sentinel) +# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) +#else +# define _GL_ATTRIBUTE_SENTINEL(pos) +#endif + +/* A helper macro. Don't use it directly. */ +#if _GL_HAS_ATTRIBUTE (unused) +# define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +#else +# define _GL_ATTRIBUTE_UNUSED +#endif + + +/* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the + immediately preceding label is not used. The compiler should not warn + if the label is not used. */ +/* Applies to: label (both in C and C++). */ +/* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;' + syntax. But clang does. */ +#if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__ +# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED +#else +# define _GL_UNUSED_LABEL +#endif + + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for Mac OS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif + +/* Define to a type if does not define. */ +/* #undef mbstate_t */ + +/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where + n1 and n2 are expressions without side effects, that evaluate to real + numbers (excluding NaN). + It returns + 1 if n1 > n2 + 0 if n1 == n2 + -1 if n1 < n2 + The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional + jump with nearly all GCC versions up to GCC 10. + This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many + GCC versions up to GCC 9. + The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 + avoids conditional jumps in all GCC versions >= 3.4. */ +#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) + + +/* Define to `int' if does not define. */ +/* #undef mode_t */ + +/* Define to the type of st_nlink in struct stat, or a supertype. */ +/* #undef nlink_t */ + +/* Define as a signed integer type capable of holding a process identifier. */ +/* #undef pid_t */ + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported only directly. */ +#define restrict __restrict__ +/* Work around a bug in older versions of Sun C++, which did not + #define __restrict__ or support _Restrict or __restrict__ + even though the corresponding Sun C compiler ended up with + "#define restrict _Restrict" or "#define restrict __restrict__" + in the previous line. This workaround can be removed once + we assume Oracle Developer Studio 12.5 (2016) or later. */ +#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ +# define _Restrict +# define __restrict__ +#endif + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +/* Define as a signed type of the same size as size_t. */ +/* #undef ssize_t */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + + + /* This definition is a duplicate of the one in unitypes.h. + It is here so that we can cope with an older version of unitypes.h + that does not contain this definition and that is pre-installed among + the public header files. */ + # if defined __restrict \ + || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ + || __clang_major__ >= 3 + # define _UC_RESTRICT __restrict + # elif 199901L <= __STDC_VERSION__ || defined restrict + # define _UC_RESTRICT restrict + # else + # define _UC_RESTRICT + # endif + + + +/* On Windows, variables that may be in a DLL must be marked specially. */ +#if defined _MSC_VER && defined _DLL +# define DLL_VARIABLE __declspec (dllimport) +#else +# define DLL_VARIABLE +#endif + diff --git a/jni/parted/libiconv/lib/converters.h b/jni/parted/libiconv/lib/converters.h new file mode 100755 index 0000000..e2e2227 --- /dev/null +++ b/jni/parted/libiconv/lib/converters.h @@ -0,0 +1,359 @@ +/* + * Copyright (C) 1999-2002, 2004-2011, 2016, 2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* This file defines all the converters. */ + + +/* Our own notion of wide character, as UCS-4, according to ISO-10646-1. */ +typedef unsigned int ucs4_t; + +/* State used by a conversion. 0 denotes the initial state. */ +typedef unsigned int state_t; + +/* iconv_t is an opaque type. This is the real iconv_t type. */ +typedef struct conv_struct * conv_t; + +/* + * Data type for conversion multibyte -> unicode + */ +struct mbtowc_funcs { + int (*xxx_mbtowc) (conv_t conv, ucs4_t *pwc, unsigned char const *s, size_t n); + /* + * int xxx_mbtowc (conv_t conv, ucs4_t *pwc, unsigned char const *s, size_t n) + * converts the byte sequence starting at s to a wide character. Up to n bytes + * are available at s. n is >= 1. + * Result is number of bytes consumed (if a wide character was read), + * or -1 if invalid, or -2 if n too small, + * or RET_SHIFT_ILSEQ(number of bytes consumed) if invalid input after a shift + * sequence was read, + * or RET_TOOFEW(number of bytes consumed) if only a shift sequence was read. + */ + int (*xxx_flushwc) (conv_t conv, ucs4_t *pwc); + /* + * int xxx_flushwc (conv_t conv, ucs4_t *pwc) + * returns to the initial state and stores the pending wide character, if any. + * Result is 1 (if a wide character was read) or 0 if none was pending. + */ +}; + +/* Return code if invalid input after a shift sequence of n bytes was read. + (xxx_mbtowc) */ +#define RET_SHIFT_ILSEQ(n) (-1-2*(n)) +/* Return code if invalid. (xxx_mbtowc) */ +#define RET_ILSEQ RET_SHIFT_ILSEQ(0) +/* Return code if only a shift sequence of n bytes was read. (xxx_mbtowc) */ +#define RET_TOOFEW(n) (-2-2*(n)) +/* Retrieve the n from the encoded RET_... value. */ +#define DECODE_SHIFT_ILSEQ(r) ((unsigned int)(RET_SHIFT_ILSEQ(0) - (r)) / 2) +#define DECODE_TOOFEW(r) ((unsigned int)(RET_TOOFEW(0) - (r)) / 2) +/* Maximum value of n that may be used as argument to RET_SHIFT_ILSEQ or RET_TOOFEW. */ +#define RET_COUNT_MAX ((INT_MAX / 2) - 1) + +/* + * Data type for conversion unicode -> multibyte + */ +struct wctomb_funcs { + int (*xxx_wctomb) (conv_t conv, unsigned char *r, ucs4_t wc, size_t n); + /* + * int xxx_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) + * converts the wide character wc to the character set xxx, and stores the + * result beginning at r. Up to n bytes may be written at r. n is >= 1. + * Result is number of bytes written, or -1 if invalid, or -2 if n too small. + */ + int (*xxx_reset) (conv_t conv, unsigned char *r, size_t n); + /* + * int xxx_reset (conv_t conv, unsigned char *r, size_t n) + * stores a shift sequences returning to the initial state beginning at r. + * Up to n bytes may be written at r. n is >= 0. + * Result is number of bytes written, or -2 if n too small. + */ +}; + +/* Return code if invalid. (xxx_wctomb) */ +#define RET_ILUNI -1 +/* Return code if output buffer is too small. (xxx_wctomb, xxx_reset) */ +#define RET_TOOSMALL -2 + +/* + * Contents of a conversion descriptor. + */ +struct conv_struct { + struct loop_funcs lfuncs; + /* Input (conversion multibyte -> unicode) */ + int iindex; + struct mbtowc_funcs ifuncs; + state_t istate; + /* Output (conversion unicode -> multibyte) */ + int oindex; + struct wctomb_funcs ofuncs; + int oflags; + state_t ostate; + /* Operation flags */ + int transliterate; + int discard_ilseq; + #ifndef LIBICONV_PLUG + struct iconv_fallbacks fallbacks; + struct iconv_hooks hooks; + #endif +}; + +/* + * Include all the converters. + */ + +#include "ascii.h" + +/* General multi-byte encodings */ +#include "utf8.h" +#include "ucs2.h" +#include "ucs2be.h" +#include "ucs2le.h" +#include "ucs4.h" +#include "ucs4be.h" +#include "ucs4le.h" +#include "utf16.h" +#include "utf16be.h" +#include "utf16le.h" +#include "utf32.h" +#include "utf32be.h" +#include "utf32le.h" +#include "utf7.h" +#include "ucs2internal.h" +#include "ucs2swapped.h" +#include "ucs4internal.h" +#include "ucs4swapped.h" +#include "c99.h" +#include "java.h" + +/* 8-bit encodings */ +#include "iso8859_1.h" +#include "iso8859_2.h" +#include "iso8859_3.h" +#include "iso8859_4.h" +#include "iso8859_5.h" +#include "iso8859_6.h" +#include "iso8859_7.h" +#include "iso8859_8.h" +#include "iso8859_9.h" +#include "iso8859_10.h" +#include "iso8859_11.h" +#include "iso8859_13.h" +#include "iso8859_14.h" +#include "iso8859_15.h" +#include "iso8859_16.h" +#include "koi8_r.h" +#include "koi8_u.h" +#include "koi8_ru.h" +#include "cp1250.h" +#include "cp1251.h" +#include "cp1252.h" +#include "cp1253.h" +#include "cp1254.h" +#include "cp1255.h" +#include "cp1256.h" +#include "cp1257.h" +#include "cp1258.h" +#include "cp850.h" +#include "cp862.h" +#include "cp866.h" +#include "cp1131.h" +#include "mac_roman.h" +#include "mac_centraleurope.h" +#include "mac_iceland.h" +#include "mac_croatian.h" +#include "mac_romania.h" +#include "mac_cyrillic.h" +#include "mac_ukraine.h" +#include "mac_greek.h" +#include "mac_turkish.h" +#include "mac_hebrew.h" +#include "mac_arabic.h" +#include "mac_thai.h" +#include "hp_roman8.h" +#include "nextstep.h" +#include "armscii_8.h" +#include "georgian_academy.h" +#include "georgian_ps.h" +#include "koi8_t.h" +#include "pt154.h" +#include "rk1048.h" +#include "mulelao.h" +#include "cp1133.h" +#include "tis620.h" +#include "cp874.h" +#include "viscii.h" +#include "tcvn.h" + +/* CJK character sets [CCS = coded character set] [CJKV.INF chapter 3] */ + +typedef struct { + unsigned short indx; /* index into big table */ + unsigned short used; /* bitmask of used entries */ +} Summary16; + +#include "iso646_jp.h" +#include "jisx0201.h" +#include "jisx0208.h" +#include "jisx0212.h" + +#include "iso646_cn.h" +#include "gb2312.h" +#include "isoir165.h" +/*#include "gb12345.h"*/ +#include "gbk.h" +#include "cns11643.h" +#include "big5.h" + +#include "ksc5601.h" +#include "johab_hangul.h" + +/* CJK encodings [CES = character encoding scheme] [CJKV.INF chapter 4] */ + +#include "euc_jp.h" +#include "sjis.h" +#include "cp932.h" +#include "iso2022_jp.h" +#include "iso2022_jp1.h" +#include "iso2022_jp2.h" +#include "iso2022_jpms.h" + +#include "euc_cn.h" +#include "ces_gbk.h" +#include "cp936.h" +#include "gb18030.h" +#include "iso2022_cn.h" +#include "iso2022_cnext.h" +#include "hz.h" +#include "euc_tw.h" +#include "ces_big5.h" +#include "cp950.h" +#include "big5hkscs1999.h" +#include "big5hkscs2001.h" +#include "big5hkscs2004.h" +#include "big5hkscs2008.h" + +#include "euc_kr.h" +#include "cp949.h" +#include "johab.h" +#include "iso2022_kr.h" + +/* Encodings used by system dependent locales. */ + +#ifdef USE_AIX +#include "cp856.h" +#include "cp922.h" +#include "cp943.h" +#include "cp1046.h" +#include "cp1124.h" +#include "cp1129.h" +#include "cp1161.h" +#include "cp1162.h" +#include "cp1163.h" +#endif + +#ifdef USE_OSF1 +#include "dec_kanji.h" +#include "dec_hanyu.h" +#endif + +#ifdef USE_DOS +#include "cp437.h" +#include "cp737.h" +#include "cp775.h" +#include "cp852.h" +#include "cp853.h" +#include "cp855.h" +#include "cp857.h" +#include "cp858.h" +#include "cp860.h" +#include "cp861.h" +#include "cp863.h" +#include "cp864.h" +#include "cp865.h" +#include "cp869.h" +#include "cp1125.h" +#endif + +#ifdef USE_ZOS +#define DEDUPLICATE_TABLES 1 +#include "ebcdic037.h" +#include "ebcdic273.h" +#include "ebcdic277.h" +#include "ebcdic278.h" +#include "ebcdic280.h" +#include "ebcdic282.h" +#include "ebcdic284.h" +#include "ebcdic285.h" +#include "ebcdic297.h" +#include "ebcdic423.h" +#include "ebcdic424.h" +#include "ebcdic425.h" +#include "ebcdic500.h" +#include "ebcdic838.h" +#include "ebcdic870.h" +#include "ebcdic871.h" +#include "ebcdic875.h" +#include "ebcdic880.h" +#include "ebcdic905.h" +#include "ebcdic924.h" +#include "ebcdic1025.h" +#include "ebcdic1026.h" +#include "ebcdic1047.h" +#include "ebcdic1097.h" +#include "ebcdic1112.h" +#include "ebcdic1122.h" +#include "ebcdic1123.h" +#include "ebcdic1130.h" +#include "ebcdic1132.h" +#include "ebcdic1137.h" +#include "ebcdic1140.h" +#include "ebcdic1141.h" +#include "ebcdic1142.h" +#include "ebcdic1143.h" +#include "ebcdic1144.h" +#include "ebcdic1145.h" +#include "ebcdic1146.h" +#include "ebcdic1147.h" +#include "ebcdic1148.h" +#include "ebcdic1149.h" +#include "ebcdic1153.h" +#include "ebcdic1154.h" +#include "ebcdic1155.h" +#include "ebcdic1156.h" +#include "ebcdic1157.h" +#include "ebcdic1158.h" +#include "ebcdic1160.h" +#include "ebcdic1164.h" +#include "ebcdic1165.h" +#include "ebcdic1166.h" +#include "ebcdic4971.h" +#include "ebcdic12712.h" +#include "ebcdic16804.h" +#endif + +#ifdef USE_EXTRA +#include "euc_jisx0213.h" +#include "shift_jisx0213.h" +#include "iso2022_jp3.h" +#include "big5_2003.h" +#include "tds565.h" +#include "atarist.h" +#include "riscos1.h" +#endif + diff --git a/jni/parted/libiconv/lib/cp1046.h b/jni/parted/libiconv/lib/cp1046.h new file mode 100755 index 0000000..7ea291f --- /dev/null +++ b/jni/parted/libiconv/lib/cp1046.h @@ -0,0 +1,156 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1046 + */ + +static const unsigned short cp1046_2uni[128] = { + /* 0x80 */ + 0xfe88, 0x00d7, 0x00f7, 0xf8f6, 0xf8f5, 0xf8f4, 0xf8f7, 0xfe71, + 0x0088, 0x25a0, 0x2502, 0x2500, 0x2510, 0x250c, 0x2514, 0x2518, + /* 0x90 */ + 0xfe79, 0xfe7b, 0xfe7d, 0xfe7f, 0xfe77, 0xfe8a, 0xfef0, 0xfef3, + 0xfef2, 0xfece, 0xfecf, 0xfed0, 0xfef6, 0xfef8, 0xfefa, 0xfefc, + /* 0xa0 */ + 0x00a0, 0xf8fa, 0xf8f9, 0xf8f8, 0x00a4, 0xf8fb, 0xfe8b, 0xfe91, + 0xfe97, 0xfe9b, 0xfe9f, 0xfea3, 0x060c, 0x00ad, 0xfea7, 0xfeb3, + /* 0xb0 */ + 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, + 0x0668, 0x0669, 0xfeb7, 0x061b, 0xfebb, 0xfebf, 0xfeca, 0x061f, + /* 0xc0 */ + 0xfecb, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, + /* 0xd0 */ + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, + 0xfec7, 0x0639, 0x063a, 0xfecc, 0xfe82, 0xfe84, 0xfe8e, 0xfed3, + /* 0xe0 */ + 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, + 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, + /* 0xf0 */ + 0x0650, 0x0651, 0x0652, 0xfed7, 0xfedb, 0xfedf, 0xf8fc, 0xfef5, + 0xfef7, 0xfef9, 0xfefb, 0xfee3, 0xfee7, 0xfeec, 0xfee9, 0xfffd, +}; + +static int +cp1046_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp1046_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp1046_page00[112] = { + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, /* 0xf0-0xf7 */ +}; +static const unsigned char cp1046_page06[104] = { + 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0x00, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x60-0x67 */ + 0xb8, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ +}; +static const unsigned char cp1046_page25[32] = { + 0x8b, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x8c, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; +static const unsigned char cp1046_pagef8[16] = { + 0x00, 0x00, 0x00, 0x00, 0x85, 0x84, 0x83, 0x86, /* 0xf0-0xf7 */ + 0xa3, 0xa2, 0xa1, 0xa5, 0xf6, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char cp1046_pagefe[144] = { + 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, /* 0x70-0x77 */ + 0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, /* 0x78-0x7f */ + 0x00, 0x00, 0xdc, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x80, 0x00, 0x95, 0xa6, 0x00, 0x00, 0xde, 0x00, /* 0x88-0x8f */ + 0x00, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0xaa, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0xae, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0xba, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xbd, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, /* 0xc0-0xc7 */ + 0x00, 0x00, 0xbe, 0xc0, 0xdb, 0x00, 0x99, 0x9a, /* 0xc8-0xcf */ + 0x9b, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0xf3, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0xf5, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0xfc, /* 0xe0-0xe7 */ + 0x00, 0xfe, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x96, 0x00, 0x98, 0x97, 0x00, 0xf7, 0x9c, 0xf8, /* 0xf0-0xf7 */ + 0x9d, 0xf9, 0x9e, 0xfa, 0x9f, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static int +cp1046_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x0088 && wc < 0x00f8) + c = cp1046_page00[wc-0x0088]; + else if (wc >= 0x0608 && wc < 0x0670) + c = cp1046_page06[wc-0x0608]; + else if (wc >= 0x2500 && wc < 0x2520) + c = cp1046_page25[wc-0x2500]; + else if (wc == 0x25a0) + c = 0x89; + else if (wc >= 0xf8f0 && wc < 0xf900) + c = cp1046_pagef8[wc-0xf8f0]; + else if (wc >= 0xfe70 && wc < 0xff00) + c = cp1046_pagefe[wc-0xfe70]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1124.h b/jni/parted/libiconv/lib/cp1124.h new file mode 100755 index 0000000..80f1432 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1124.h @@ -0,0 +1,101 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1124 + */ + +static const unsigned short cp1124_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x0401, 0x0402, 0x0490, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, + /* 0xb0 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + /* 0xc0 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xd0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xe0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + /* 0xf0 */ + 0x2116, 0x0451, 0x0452, 0x0491, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f, +}; + +static int +cp1124_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp1124_2uni[c-0xa0]; + return 1; +} + +static const unsigned char cp1124_page00[16] = { + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ +}; +static const unsigned char cp1124_page04[152] = { + 0x00, 0xa1, 0xa2, 0x00, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x08-0x0f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0x00, 0xf1, 0xf2, 0x00, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xa3, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static int +cp1124_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00b0) + c = cp1124_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0498) + c = cp1124_page04[wc-0x0400]; + else if (wc == 0x2116) + c = 0xf0; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1125.h b/jni/parted/libiconv/lib/cp1125.h new file mode 100755 index 0000000..ddafbf4 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1125.h @@ -0,0 +1,128 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1125 + */ + +static const unsigned short cp1125_2uni[80] = { + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + /* 0xf0 */ + 0x0401, 0x0451, 0x0490, 0x0491, 0x0404, 0x0454, 0x0406, 0x0456, + 0x0407, 0x0457, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0, +}; + +static int +cp1125_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else if (c < 0xb0) + *pwc = (ucs4_t) c + 0x0390; + else + *pwc = (ucs4_t) cp1125_2uni[c-0xb0]; + return 1; +} + +static const unsigned char cp1125_page00[24] = { + 0xff, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, /* 0xb0-0xb7 */ +}; +static const unsigned char cp1125_page04[152] = { + 0x00, 0xf0, 0x00, 0x00, 0xf4, 0x00, 0xf6, 0xf8, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x10-0x17 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x18-0x1f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x20-0x27 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x28-0x2f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x30-0x37 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0x00, 0xf1, 0x00, 0x00, 0xf5, 0x00, 0xf7, 0xf9, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xf2, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char cp1125_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp1125_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00b8) + c = cp1125_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0498) + c = cp1125_page04[wc-0x0400]; + else if (wc == 0x2116) + c = 0xfc; + else if (wc == 0x221a) + c = 0xfb; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp1125_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1129.h b/jni/parted/libiconv/lib/cp1129.h new file mode 100755 index 0000000..54944ea --- /dev/null +++ b/jni/parted/libiconv/lib/cp1129.h @@ -0,0 +1,120 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1129 + */ + +static const unsigned short cp1129_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x0153, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0178, 0x00b5, 0x00b6, 0x00b7, + 0x0152, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + /* 0xc0 */ + 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x0300, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0 */ + 0x0110, 0x00d1, 0x0309, 0x00d3, 0x00d4, 0x01a0, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x01af, 0x0303, 0x00df, + /* 0xe0 */ + 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0301, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0 */ + 0x0111, 0x00f1, 0x0323, 0x00f3, 0x00f4, 0x01a1, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x01b0, 0x20ab, 0x00ff, +}; + +static int +cp1129_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp1129_2uni[c-0xa0]; + return 1; +} + +static const unsigned char cp1129_page00[272] = { + 0x00, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0xd1, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0x00, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0xc3, 0xe3, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0xb8, 0xa8, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xd5, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, /* 0xa8-0xaf */ + 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ +}; +static const unsigned char cp1129_page03[40] = { + 0xcc, 0xec, 0x00, 0xde, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static int +cp1129_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a8) { + *r = wc; + return 1; + } + else if (wc >= 0x00a8 && wc < 0x01b8) + c = cp1129_page00[wc-0x00a8]; + else if (wc >= 0x0300 && wc < 0x0328) + c = cp1129_page03[wc-0x0300]; + else if (wc == 0x20ab) + c = 0xfe; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1131.h b/jni/parted/libiconv/lib/cp1131.h new file mode 100755 index 0000000..4062394 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1131.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1131 + */ + +static const unsigned short cp1131_2uni[128] = { + /* 0x80 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + /* 0x90 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xa0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + /* 0xf0 */ + 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e, + 0x0406, 0x0456, 0x00b7, 0x00a4, 0x0490, 0x0491, 0x2219, 0x00a0, +}; + +static int +cp1131_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp1131_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp1131_page00[24] = { + 0xff, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, /* 0xb0-0xb7 */ +}; +static const unsigned char cp1131_page04[152] = { + 0x00, 0xf0, 0x00, 0x00, 0xf2, 0x00, 0xf8, 0xf4, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, /* 0x08-0x0f */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x10-0x17 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x18-0x1f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x20-0x27 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x28-0x2f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x30-0x37 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0x00, 0xf1, 0x00, 0x00, 0xf3, 0x00, 0xf9, 0xf5, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xfc, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char cp1131_page25[152] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static int +cp1131_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00b8) + c = cp1131_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0498) + c = cp1131_page04[wc-0x0400]; + else if (wc == 0x2219) + c = 0xfe; + else if (wc >= 0x2500 && wc < 0x2598) + c = cp1131_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1133.h b/jni/parted/libiconv/lib/cp1133.h new file mode 100755 index 0000000..5e69f28 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1133.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-CP1133 + */ + +static const unsigned short cp1133_2uni_1[64] = { + /* 0xa0 */ + 0x00a0, 0x0e81, 0x0e82, 0x0e84, 0x0e87, 0x0e88, 0x0eaa, 0x0e8a, + 0x0e8d, 0x0e94, 0x0e95, 0x0e96, 0x0e97, 0x0e99, 0x0e9a, 0x0e9b, + /* 0xb0 */ + 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f, 0x0ea1, 0x0ea2, 0x0ea3, 0x0ea5, + 0x0ea7, 0x0eab, 0x0ead, 0x0eae, 0xfffd, 0xfffd, 0xfffd, 0x0eaf, + /* 0xc0 */ + 0x0eb0, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, 0x0eb8, + 0x0eb9, 0x0ebc, 0x0eb1, 0x0ebb, 0x0ebd, 0xfffd, 0xfffd, 0xfffd, + /* 0xd0 */ + 0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0x0ec8, 0x0ec9, 0x0eca, + 0x0ecb, 0x0ecc, 0x0ecd, 0x0ec6, 0xfffd, 0x0edc, 0x0edd, 0x20ad, +}; +static const unsigned short cp1133_2uni_2[16] = { + /* 0xf0 */ + 0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7, + 0x0ed8, 0x0ed9, 0xfffd, 0xfffd, 0x00a2, 0x00ac, 0x00a6, 0xfffd, +}; + +static int +cp1133_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) { + *pwc = (ucs4_t) c; + return 1; + } + else if (c < 0xe0) { + unsigned short wc = cp1133_2uni_1[c-0xa0]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + else if (c < 0xf0) { + } + else { + unsigned short wc = cp1133_2uni_2[c-0xf0]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp1133_page00[16] = { + 0xa0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfe, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; +static const unsigned char cp1133_page0e[96] = { + 0x00, 0xa1, 0xa2, 0x00, 0xa3, 0x00, 0x00, 0xa4, /* 0x80-0x87 */ + 0xa5, 0x00, 0xa7, 0x00, 0x00, 0xa8, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0xa9, 0xaa, 0xab, 0xac, /* 0x90-0x97 */ + 0x00, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, /* 0x98-0x9f */ + 0x00, 0xb4, 0xb5, 0xb6, 0x00, 0xb7, 0x00, 0xb8, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa6, 0xb9, 0x00, 0xba, 0xbb, 0xbf, /* 0xa8-0xaf */ + 0xc0, 0xca, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, /* 0xb0-0xb7 */ + 0xc7, 0xc8, 0x00, 0xcb, 0xc9, 0xcc, 0x00, 0x00, /* 0xb8-0xbf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xdb, 0x00, /* 0xc0-0xc7 */ + 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0x00, 0x00, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0x00, 0x00, 0xdd, 0xde, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static int +cp1133_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00b0) + c = cp1133_page00[wc-0x00a0]; + else if (wc >= 0x0e80 && wc < 0x0ee0) + c = cp1133_page0e[wc-0x0e80]; + else if (wc == 0x20ad) + c = 0xdf; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1161.h b/jni/parted/libiconv/lib/cp1161.h new file mode 100755 index 0000000..5016648 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1161.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1161 + */ + +static const unsigned short cp1161_2uni[96] = { + /* 0xa0 */ + 0x0e48, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, + 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, + /* 0xb0 */ + 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, + 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, + /* 0xc0 */ + 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, + 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, + /* 0xd0 */ + 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, + 0x0e38, 0x0e39, 0x0e3a, 0x0e49, 0x0e4a, 0x0e4b, 0x20ac, 0x0e3f, + /* 0xe0 */ + 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, + 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, + /* 0xf0 */ + 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, + 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x00a2, 0x00ac, 0x00a6, 0x00a0, +}; + +static int +cp1161_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else if (c < 0xa0) { + } + else { + *pwc = (ucs4_t) cp1161_2uni[c-0xa0]; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char cp1161_page00[16] = { + 0xff, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfe, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; + +static int +cp1161_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00b0) + c = cp1161_page00[wc-0x00a0]; + else if (wc >= 0x0e48 && wc < 0x0e4c) + c = wc-0x0d60; + else if (wc >= 0x0e00 && wc < 0x0e60) + c = cp874_page0e[wc-0x0e00]; + else if (wc == 0x20ac) + c = 0xde; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1162.h b/jni/parted/libiconv/lib/cp1162.h new file mode 100755 index 0000000..e7c0eb1 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1162.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1162 + */ + +static int +cp1162_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp874_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + if (c < 0xa0) { + *pwc = (ucs4_t) c; + return 1; + } + } + return RET_ILSEQ; +} + +static int +cp1162_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x0080 && wc < 0x00a0 && cp874_2uni[wc-0x0080] == 0xfffd) + c = wc; + else if (wc == 0x00a0) + c = 0xa0; + else if (wc >= 0x0e00 && wc < 0x0e60) + c = cp874_page0e[wc-0x0e00]; + else if (wc >= 0x2010 && wc < 0x2028) + c = cp874_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0x80; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1163.h b/jni/parted/libiconv/lib/cp1163.h new file mode 100755 index 0000000..6c56365 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1163.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1163 + */ + +static int +cp1163_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else if (c == 0xa4) + *pwc = 0x20ac; + else + *pwc = (ucs4_t) cp1129_2uni[c-0xa0]; + return 1; +} + +static const unsigned char cp1163_page20[8] = { + 0x00, 0x00, 0x00, 0xfe, 0xa4, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; + +static int +cp1163_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0 || (wc < 0x00a8 && wc != 0x00a4) || wc == 0x00d0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a8 && wc < 0x01b8) + c = cp1129_page00[wc-0x00a8]; + else if (wc >= 0x0300 && wc < 0x0328) + c = cp1129_page03[wc-0x0300]; + else if (wc == 0x203e) + c = 0xaf; + else if (wc >= 0x20a8 && wc < 0x20b0) + c = cp1163_page20[wc-0x20a8]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1250.h b/jni/parted/libiconv/lib/cp1250.h new file mode 100755 index 0000000..3b6f7b1 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1250.h @@ -0,0 +1,138 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1250 + */ + +static const unsigned short cp1250_2uni[128] = { + /* 0x80 */ + 0x20ac, 0xfffd, 0x201a, 0xfffd, 0x201e, 0x2026, 0x2020, 0x2021, + 0xfffd, 0x2030, 0x0160, 0x2039, 0x015a, 0x0164, 0x017d, 0x0179, + /* 0x90 */ + 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0xfffd, 0x2122, 0x0161, 0x203a, 0x015b, 0x0165, 0x017e, 0x017a, + /* 0xa0 */ + 0x00a0, 0x02c7, 0x02d8, 0x0141, 0x00a4, 0x0104, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x015e, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x017b, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x02db, 0x0142, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x0105, 0x015f, 0x00bb, 0x013d, 0x02dd, 0x013e, 0x017c, + /* 0xc0 */ + 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, + /* 0xd0 */ + 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, + 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, + /* 0xe0 */ + 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, + /* 0xf0 */ + 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, + 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9, +}; + +static int +cp1250_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp1250_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp1250_page00[224] = { + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */ + 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xda, 0x00, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ + 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xfa, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0xc3, 0xe3, 0xa5, 0xb9, 0xc6, 0xe6, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0xcf, 0xef, /* 0x08-0x0f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xca, 0xea, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0xc5, 0xe5, 0x00, 0x00, 0xbc, 0xbe, 0x00, /* 0x38-0x3f */ + 0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0xd2, /* 0x40-0x47 */ + 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xd5, 0xf5, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00, /* 0x50-0x57 */ + 0xd8, 0xf8, 0x8c, 0x9c, 0x00, 0x00, 0xaa, 0xba, /* 0x58-0x5f */ + 0x8a, 0x9a, 0xde, 0xfe, 0x8d, 0x9d, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9, /* 0x68-0x6f */ + 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x8f, 0x9f, 0xaf, 0xbf, 0x8e, 0x9e, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char cp1250_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xa2, 0xff, 0x00, 0xb2, 0x00, 0xbd, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char cp1250_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +cp1250_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = cp1250_page00[wc-0x00a0]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = cp1250_page02[wc-0x02c0]; + else if (wc >= 0x2010 && wc < 0x2040) + c = cp1250_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0x80; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1251.h b/jni/parted/libiconv/lib/cp1251.h new file mode 100755 index 0000000..c7e3a29 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1251.h @@ -0,0 +1,130 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1251 + */ + +static const unsigned short cp1251_2uni[128] = { + /* 0x80 */ + 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, + 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, + /* 0x90 */ + 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, + /* 0xa0 */ + 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, + 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, + 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, + /* 0xc0 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + /* 0xd0 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xe0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xf0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, +}; + +static int +cp1251_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp1251_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp1251_page00[32] = { + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char cp1251_page04[152] = { + 0x00, 0xa8, 0x80, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, /* 0x00-0x07 */ + 0xa3, 0x8a, 0x8c, 0x8e, 0x8d, 0x00, 0xa1, 0x8f, /* 0x08-0x0f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */ + 0x00, 0xb8, 0x90, 0x83, 0xba, 0xbe, 0xb3, 0xbf, /* 0x50-0x57 */ + 0xbc, 0x9a, 0x9c, 0x9e, 0x9d, 0x00, 0xa2, 0x9f, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char cp1251_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +cp1251_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = cp1251_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0498) + c = cp1251_page04[wc-0x0400]; + else if (wc >= 0x2010 && wc < 0x2040) + c = cp1251_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0x88; + else if (wc == 0x2116) + c = 0xb9; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1252.h b/jni/parted/libiconv/lib/cp1252.h new file mode 100755 index 0000000..b4c23b7 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1252.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1252 + */ + +static const unsigned short cp1252_2uni[32] = { + /* 0x80 */ + 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0xfffd, 0x017d, 0xfffd, + /* 0x90 */ + 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0xfffd, 0x017e, 0x0178, +}; + +static int +cp1252_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80 || c >= 0xa0) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp1252_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp1252_page01[72] = { + 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x9f, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x9e, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char cp1252_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char cp1252_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +cp1252_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = wc; + else if (wc >= 0x0150 && wc < 0x0198) + c = cp1252_page01[wc-0x0150]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = cp1252_page02[wc-0x02c0]; + else if (wc >= 0x2010 && wc < 0x2040) + c = cp1252_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0x80; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1253.h b/jni/parted/libiconv/lib/cp1253.h new file mode 100755 index 0000000..e5b36ca --- /dev/null +++ b/jni/parted/libiconv/lib/cp1253.h @@ -0,0 +1,121 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1253 + */ + +static const unsigned short cp1253_2uni[128] = { + /* 0x80 */ + 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0xfffd, 0x2030, 0xfffd, 0x2039, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x90 */ + 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0xfffd, 0x2122, 0xfffd, 0x203a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xa0 */ + 0x00a0, 0x0385, 0x0386, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0xfffd, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x2015, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x00b5, 0x00b6, 0x00b7, + 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, + /* 0xc0 */ + 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, + /* 0xd0 */ + 0x03a0, 0x03a1, 0xfffd, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, + /* 0xe0 */ + 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + /* 0xf0 */ + 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0xfffd, +}; + +static int +cp1253_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp1253_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp1253_page00[32] = { + 0xa0, 0x00, 0x00, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char cp1253_page03[80] = { + 0x00, 0x00, 0x00, 0x00, 0xb4, 0xa1, 0xa2, 0x00, /* 0x80-0x87 */ + 0xb8, 0xb9, 0xba, 0x00, 0xbc, 0x00, 0xbe, 0xbf, /* 0x88-0x8f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x90-0x97 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x98-0x9f */ + 0xd0, 0xd1, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xa0-0xa7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xa8-0xaf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xb0-0xb7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xb8-0xbf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xc0-0xc7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xc8-0xcf */ +}; +static const unsigned char cp1253_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0xaf, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +cp1253_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = cp1253_page00[wc-0x00a0]; + else if (wc == 0x0192) + c = 0x83; + else if (wc >= 0x0380 && wc < 0x03d0) + c = cp1253_page03[wc-0x0380]; + else if (wc >= 0x2010 && wc < 0x2040) + c = cp1253_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0x80; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1254.h b/jni/parted/libiconv/lib/cp1254.h new file mode 100755 index 0000000..15bbc15 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1254.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1254 + */ + +static const unsigned short cp1254_2uni_1[32] = { + /* 0x80 */ + 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0xfffd, 0xfffd, 0xfffd, + /* 0x90 */ + 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0xfffd, 0xfffd, 0x0178, +}; +static const unsigned short cp1254_2uni_2[16] = { + /* 0xd0 */ + 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, +}; +static const unsigned short cp1254_2uni_3[16] = { + /* 0xf0 */ + 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, +}; + +static int +cp1254_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else if (c < 0xa0) { + unsigned short wc = cp1254_2uni_1[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + else if (c < 0xd0) { + *pwc = (ucs4_t) c; + return 1; + } + else if (c < 0xe0) { + *pwc = (ucs4_t) cp1254_2uni_2[c-0xd0]; + return 1; + } + else if (c < 0xf0) { + *pwc = (ucs4_t) c; + return 1; + } + else { + *pwc = (ucs4_t) cp1254_2uni_3[c-0xf0]; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char cp1254_page00[48] = { + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */ +}; +static const unsigned char cp1254_page01[128] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, /* 0x58-0x5f */ + 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char cp1254_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char cp1254_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +cp1254_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00d0) + c = wc; + else if (wc >= 0x00d0 && wc < 0x0100) + c = cp1254_page00[wc-0x00d0]; + else if (wc >= 0x0118 && wc < 0x0198) + c = cp1254_page01[wc-0x0118]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = cp1254_page02[wc-0x02c0]; + else if (wc >= 0x2010 && wc < 0x2040) + c = cp1254_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0x80; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1255.h b/jni/parted/libiconv/lib/cp1255.h new file mode 100755 index 0000000..213daa2 --- /dev/null +++ b/jni/parted/libiconv/lib/cp1255.h @@ -0,0 +1,379 @@ +/* + * Copyright (C) 1999-2001, 2004, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1255 + */ + +#include "flushwc.h" + +/* Combining characters used in Hebrew encoding CP1255. */ + +/* Relevant combining characters: + 0x05b4, 0x05b7, 0x05b8, 0x05b9, 0x05bc, 0x05bf, 0x05c1, 0x05c2. */ + +/* Composition tables for each of the relevant combining characters. */ +static const struct { unsigned short base; unsigned short composed; } cp1255_comp_table_data[] = { +#define cp1255_comp_table05b4_idx 0 +#define cp1255_comp_table05b4_len 1 + { 0x05D9, 0xFB1D }, +#define cp1255_comp_table05b7_idx (cp1255_comp_table05b4_idx+cp1255_comp_table05b4_len) +#define cp1255_comp_table05b7_len 2 + { 0x05D0, 0xFB2E }, + { 0x05F2, 0xFB1F }, +#define cp1255_comp_table05b8_idx (cp1255_comp_table05b7_idx+cp1255_comp_table05b7_len) +#define cp1255_comp_table05b8_len 1 + { 0x05D0, 0xFB2F }, +#define cp1255_comp_table05b9_idx (cp1255_comp_table05b8_idx+cp1255_comp_table05b8_len) +#define cp1255_comp_table05b9_len 1 + { 0x05D5, 0xFB4B }, +#define cp1255_comp_table05bc_idx (cp1255_comp_table05b9_idx+cp1255_comp_table05b9_len) +#define cp1255_comp_table05bc_len 24 + { 0x05D0, 0xFB30 }, + { 0x05D1, 0xFB31 }, + { 0x05D2, 0xFB32 }, + { 0x05D3, 0xFB33 }, + { 0x05D4, 0xFB34 }, + { 0x05D5, 0xFB35 }, + { 0x05D6, 0xFB36 }, + { 0x05D8, 0xFB38 }, + { 0x05D9, 0xFB39 }, + { 0x05DA, 0xFB3A }, + { 0x05DB, 0xFB3B }, + { 0x05DC, 0xFB3C }, + { 0x05DE, 0xFB3E }, + { 0x05E0, 0xFB40 }, + { 0x05E1, 0xFB41 }, + { 0x05E3, 0xFB43 }, + { 0x05E4, 0xFB44 }, + { 0x05E6, 0xFB46 }, + { 0x05E7, 0xFB47 }, + { 0x05E8, 0xFB48 }, + { 0x05E9, 0xFB49 }, + { 0x05EA, 0xFB4A }, + { 0xFB2A, 0xFB2C }, + { 0xFB2B, 0xFB2D }, +#define cp1255_comp_table05bf_idx (cp1255_comp_table05bc_idx+cp1255_comp_table05bc_len) +#define cp1255_comp_table05bf_len 3 + { 0x05D1, 0xFB4C }, + { 0x05DB, 0xFB4D }, + { 0x05E4, 0xFB4E }, +#define cp1255_comp_table05c1_idx (cp1255_comp_table05bf_idx+cp1255_comp_table05bf_len) +#define cp1255_comp_table05c1_len 2 + { 0x05E9, 0xFB2A }, + { 0xFB49, 0xFB2C }, +#define cp1255_comp_table05c2_idx (cp1255_comp_table05c1_idx+cp1255_comp_table05c1_len) +#define cp1255_comp_table05c2_len 2 + { 0x05E9, 0xFB2B }, + { 0xFB49, 0xFB2D }, +}; +static const struct { unsigned int len; unsigned int idx; } cp1255_comp_table[] = { + { cp1255_comp_table05b4_len, cp1255_comp_table05b4_idx }, + { cp1255_comp_table05b7_len, cp1255_comp_table05b7_idx }, + { cp1255_comp_table05b8_len, cp1255_comp_table05b8_idx }, + { cp1255_comp_table05b9_len, cp1255_comp_table05b9_idx }, + { cp1255_comp_table05bc_len, cp1255_comp_table05bc_idx }, + { cp1255_comp_table05bf_len, cp1255_comp_table05bf_idx }, + { cp1255_comp_table05c1_len, cp1255_comp_table05c1_idx }, + { cp1255_comp_table05c2_len, cp1255_comp_table05c2_idx }, +}; + +/* Decomposition table for the relevant Unicode characters. */ +struct cp1255_decomp { unsigned short composed; unsigned short base; int comb1 : 8; signed int comb2 : 8; }; +static const struct cp1255_decomp cp1255_decomp_table[] = { + { 0xFB1D, 0x05D9, 0, -1 }, + { 0xFB1F, 0x05F2, 1, -1 }, + { 0xFB2A, 0x05E9, 6, -1 }, + { 0xFB2B, 0x05E9, 7, -1 }, + { 0xFB2C, 0x05E9, 4, 6 }, + { 0xFB2D, 0x05E9, 4, 7 }, + { 0xFB2E, 0x05D0, 1, -1 }, + { 0xFB2F, 0x05D0, 2, -1 }, + { 0xFB30, 0x05D0, 4, -1 }, + { 0xFB31, 0x05D1, 4, -1 }, + { 0xFB32, 0x05D2, 4, -1 }, + { 0xFB33, 0x05D3, 4, -1 }, + { 0xFB34, 0x05D4, 4, -1 }, + { 0xFB35, 0x05D5, 4, -1 }, + { 0xFB36, 0x05D6, 4, -1 }, + { 0xFB38, 0x05D8, 4, -1 }, + { 0xFB39, 0x05D9, 4, -1 }, + { 0xFB3A, 0x05DA, 4, -1 }, + { 0xFB3B, 0x05DB, 4, -1 }, + { 0xFB3C, 0x05DC, 4, -1 }, + { 0xFB3E, 0x05DE, 4, -1 }, + { 0xFB40, 0x05E0, 4, -1 }, + { 0xFB41, 0x05E1, 4, -1 }, + { 0xFB43, 0x05E3, 4, -1 }, + { 0xFB44, 0x05E4, 4, -1 }, + { 0xFB46, 0x05E6, 4, -1 }, + { 0xFB47, 0x05E7, 4, -1 }, + { 0xFB48, 0x05E8, 4, -1 }, + { 0xFB49, 0x05E9, 4, -1 }, + { 0xFB4A, 0x05EA, 4, -1 }, + { 0xFB4B, 0x05D5, 3, -1 }, + { 0xFB4C, 0x05D1, 5, -1 }, + { 0xFB4D, 0x05DB, 5, -1 }, + { 0xFB4E, 0x05E4, 5, -1 }, +}; + +static const unsigned char cp1255_comb_table[] = { + 0xc4, 0xc7, 0xc8, 0xc9, 0xcc, 0xcf, 0xd1, 0xd2, +}; + +static const unsigned short cp1255_2uni[128] = { + /* 0x80 */ + 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0xfffd, 0x2039, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x90 */ + 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0xfffd, 0x203a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xa0 */ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + /* 0xc0 */ + 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, + 0x05b8, 0x05b9, 0x05ba, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf, + /* 0xd0 */ + 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3, + 0x05f4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xe0 */ + 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + /* 0xf0 */ + 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd, +}; + +/* In the CP1255 to Unicode direction, the state contains a buffered + character, or 0 if none. */ + +static int +cp1255_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc; + unsigned short last_wc; + if (c < 0x80) { + wc = c; + } else { + wc = cp1255_2uni[c-0x80]; + if (wc == 0xfffd) + return RET_ILSEQ; + } + last_wc = conv->istate; + if (last_wc) { + if (wc >= 0x05b0 && wc < 0x05c5) { + /* See whether last_wc and wc can be combined. */ + unsigned int k; + unsigned int i1, i2; + switch (wc) { + case 0x05b4: k = 0; break; + case 0x05b7: k = 1; break; + case 0x05b8: k = 2; break; + case 0x05b9: k = 3; break; + case 0x05bc: k = 4; break; + case 0x05bf: k = 5; break; + case 0x05c1: k = 6; break; + case 0x05c2: k = 7; break; + default: goto not_combining; + } + i1 = cp1255_comp_table[k].idx; + i2 = i1 + cp1255_comp_table[k].len-1; + if (last_wc >= cp1255_comp_table_data[i1].base + && last_wc <= cp1255_comp_table_data[i2].base) { + unsigned int i; + for (;;) { + i = (i1+i2)>>1; + if (last_wc == cp1255_comp_table_data[i].base) + break; + if (last_wc < cp1255_comp_table_data[i].base) { + if (i1 == i) + goto not_combining; + i2 = i; + } else { + if (i1 != i) + i1 = i; + else { + i = i2; + if (last_wc == cp1255_comp_table_data[i].base) + break; + goto not_combining; + } + } + } + last_wc = cp1255_comp_table_data[i].composed; + if (last_wc == 0xfb2a || last_wc == 0xfb2b || last_wc == 0xfb49) { + /* Buffer the combined character. */ + conv->istate = last_wc; + return RET_TOOFEW(1); + } else { + /* Output the combined character. */ + conv->istate = 0; + *pwc = (ucs4_t) last_wc; + return 1; + } + } + } + not_combining: + /* Output the buffered character. */ + conv->istate = 0; + *pwc = (ucs4_t) last_wc; + return 0; /* Don't advance the input pointer. */ + } + if ((wc >= 0x05d0 && wc <= 0x05ea && ((0x07db5f7f >> (wc - 0x05d0)) & 1)) + || wc == 0x05f2) { + /* wc is a possible match in cp1255_comp_table_data. Buffer it. */ + conv->istate = wc; + return RET_TOOFEW(1); + } else { + /* Output wc immediately. */ + *pwc = (ucs4_t) wc; + return 1; + } +} + +#define cp1255_flushwc normal_flushwc + +static const unsigned char cp1255_page00[88] = { + 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, /* 0xf0-0xf7 */ +}; +static const unsigned char cp1255_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char cp1255_page05[72] = { + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xb0-0xb7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xb8-0xbf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */ + 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ +}; +static const unsigned char cp1255_page20[56] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +cp1255_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00f8) + c = cp1255_page00[wc-0x00a0]; + else if (wc == 0x0192) + c = 0x83; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = cp1255_page02[wc-0x02c0]; + else if (wc >= 0x05b0 && wc < 0x05f8) + c = cp1255_page05[wc-0x05b0]; + else if (wc >= 0x2008 && wc < 0x2040) + c = cp1255_page20[wc-0x2008]; + else if (wc == 0x20aa) + c = 0xa4; + else if (wc == 0x20ac) + c = 0x80; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + /* Try canonical decomposition. */ + { + /* Binary search through cp1255_decomp_table. */ + unsigned int i1 = 0; + unsigned int i2 = sizeof(cp1255_decomp_table)/sizeof(cp1255_decomp_table[0])-1; + if (wc >= cp1255_decomp_table[i1].composed + && wc <= cp1255_decomp_table[i2].composed) { + unsigned int i; + for (;;) { + /* Here i2 - i1 > 0. */ + i = (i1+i2)>>1; + if (wc == cp1255_decomp_table[i].composed) + break; + if (wc < cp1255_decomp_table[i].composed) { + if (i1 == i) + return RET_ILUNI; + /* Here i1 < i < i2. */ + i2 = i; + } else { + /* Here i1 <= i < i2. */ + if (i1 != i) + i1 = i; + else { + /* Here i2 - i1 = 1. */ + i = i2; + if (wc == cp1255_decomp_table[i].composed) + break; + else + return RET_ILUNI; + } + } + } + /* Found a canonical decomposition. */ + wc = cp1255_decomp_table[i].base; + /* wc is one of 0x05d0..0x05d6, 0x05d8..0x05dc, 0x05de, 0x05e0..0x05e1, + 0x05e3..0x05e4, 0x05e6..0x05ea, 0x05f2. */ + c = cp1255_page05[wc-0x05b0]; + if (cp1255_decomp_table[i].comb2 < 0) { + if (n < 2) + return RET_TOOSMALL; + r[0] = c; + r[1] = cp1255_comb_table[cp1255_decomp_table[i].comb1]; + return 2; + } else { + if (n < 3) + return RET_TOOSMALL; + r[0] = c; + r[1] = cp1255_comb_table[cp1255_decomp_table[i].comb1]; + r[2] = cp1255_comb_table[cp1255_decomp_table[i].comb2]; + return 3; + } + } + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1256.h b/jni/parted/libiconv/lib/cp1256.h new file mode 100755 index 0000000..51fc13a --- /dev/null +++ b/jni/parted/libiconv/lib/cp1256.h @@ -0,0 +1,152 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1256 + */ + +static const unsigned short cp1256_2uni[128] = { + /* 0x80 */ + 0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, + /* 0x90 */ + 0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba, + /* 0xa0 */ + 0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f, + /* 0xc0 */ + 0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, + /* 0xd0 */ + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7, + 0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, + /* 0xe0 */ + 0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef, + /* 0xf0 */ + 0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7, + 0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2, +}; + +static int +cp1256_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp1256_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp1256_page00[96] = { + 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0xe0, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0x00, 0x00, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0xf7, /* 0xf0-0xf7 */ + 0x00, 0xf9, 0x00, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char cp1256_page01[72] = { + 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char cp1256_page06[208] = { + 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, /* 0x30-0x37 */ + 0xd9, 0xda, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xdc, 0xdd, 0xde, 0xdf, 0xe1, 0xe3, 0xe4, 0xe5, /* 0x40-0x47 */ + 0xe6, 0xec, 0xed, 0xf0, 0xf1, 0xf2, 0xf3, 0xf5, /* 0x48-0x4f */ + 0xf6, 0xf8, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, /* 0x80-0x87 */ + 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0xaa, 0x00, /* 0xb8-0xbf */ + 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ +}; +static const unsigned char cp1256_page20[56] = { + 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0xfd, 0xfe, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +cp1256_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp1256_page00[wc-0x00a0]; + else if (wc >= 0x0150 && wc < 0x0198) + c = cp1256_page01[wc-0x0150]; + else if (wc == 0x02c6) + c = 0x88; + else if (wc >= 0x0608 && wc < 0x06d8) + c = cp1256_page06[wc-0x0608]; + else if (wc >= 0x2008 && wc < 0x2040) + c = cp1256_page20[wc-0x2008]; + else if (wc == 0x20ac) + c = 0x80; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1257.h b/jni/parted/libiconv/lib/cp1257.h new file mode 100755 index 0000000..dc5716e --- /dev/null +++ b/jni/parted/libiconv/lib/cp1257.h @@ -0,0 +1,138 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1257 + */ + +static const unsigned short cp1257_2uni[128] = { + /* 0x80 */ + 0x20ac, 0xfffd, 0x201a, 0xfffd, 0x201e, 0x2026, 0x2020, 0x2021, + 0xfffd, 0x2030, 0xfffd, 0x2039, 0xfffd, 0x00a8, 0x02c7, 0x00b8, + /* 0x90 */ + 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0xfffd, 0x2122, 0xfffd, 0x203a, 0xfffd, 0x00af, 0x02db, 0xfffd, + /* 0xa0 */ + 0x00a0, 0xfffd, 0x00a2, 0x00a3, 0x00a4, 0xfffd, 0x00a6, 0x00a7, + 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, + /* 0xc0 */ + 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, + 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, + /* 0xd0 */ + 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, + 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, + /* 0xe0 */ + 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, + 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, + /* 0xf0 */ + 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, + 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x02d9, +}; + +static int +cp1257_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp1257_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp1257_page00[224] = { + 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0x8d, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x9d, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x8f, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0xc4, 0xc5, 0xaf, 0x00, /* 0xc0-0xc7 */ + 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xa8, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0xe4, 0xe5, 0xbf, 0x00, /* 0xe0-0xe7 */ + 0x00, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xf3, 0x00, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xb8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0xc2, 0xe2, 0x00, 0x00, 0xc0, 0xe0, 0xc3, 0xe3, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0xc7, 0xe7, 0x00, 0x00, 0xcb, 0xeb, /* 0x10-0x17 */ + 0xc6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0xce, 0xee, 0x00, 0x00, 0xc1, 0xe1, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xed, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0xcf, 0xef, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xd4, 0xf4, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba, /* 0x50-0x57 */ + 0x00, 0x00, 0xda, 0xfa, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char cp1257_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0xff, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char cp1257_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +cp1257_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = cp1257_page00[wc-0x00a0]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = cp1257_page02[wc-0x02c0]; + else if (wc >= 0x2010 && wc < 0x2040) + c = cp1257_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0x80; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp1258.h b/jni/parted/libiconv/lib/cp1258.h new file mode 100755 index 0000000..b56557f --- /dev/null +++ b/jni/parted/libiconv/lib/cp1258.h @@ -0,0 +1,287 @@ +/* + * Copyright (C) 1999-2001, 2004, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP1258 + */ + +#include "flushwc.h" +#include "vietcomb.h" + +static const unsigned char cp1258_comb_table[] = { + 0xcc, 0xec, 0xde, 0xd2, 0xf2, +}; + +/* The possible bases in viet_comp_table_data: + 0x0041..0x0045, 0x0047..0x0049, 0x004B..0x0050, 0x0052..0x0057, + 0x0059..0x005A, 0x0061..0x0065, 0x0067..0x0069, 0x006B..0x0070, + 0x0072..0x0077, 0x0079..0x007A, 0x00A5, 0x00A8, 0x00C2, 0x00C5..0x00C7, + 0x00CA, 0x00CF, 0x00D3..0x00D4, 0x00D6, 0x00D8, 0x00DA, 0x00DC, 0x00E2, + 0x00E5..0x00E7, 0x00EA, 0x00EF, 0x00F3..0x00F4, 0x00F6, 0x00F8, 0x00FA, + 0x00FC, 0x0102..0x0103, 0x01A0..0x01A1, 0x01AF..0x01B0. */ +static const unsigned int cp1258_comp_bases[] = { + 0x06fdfbbe, 0x06fdfbbe, 0x00000000, 0x00000120, 0x155884e4, 0x155884e4, + 0x0000000c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00018003 +}; + +static const unsigned short cp1258_2uni[128] = { + /* 0x80 */ + 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0xfffd, 0x2039, 0x0152, 0xfffd, 0xfffd, 0xfffd, + /* 0x90 */ + 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0xfffd, 0x203a, 0x0153, 0xfffd, 0xfffd, 0x0178, + /* 0xa0 */ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + /* 0xc0 */ + 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x0300, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0 */ + 0x0110, 0x00d1, 0x0309, 0x00d3, 0x00d4, 0x01a0, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x01af, 0x0303, 0x00df, + /* 0xe0 */ + 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0301, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0 */ + 0x0111, 0x00f1, 0x0323, 0x00f3, 0x00f4, 0x01a1, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x01b0, 0x20ab, 0x00ff, +}; + +/* In the CP1258 to Unicode direction, the state contains a buffered + character, or 0 if none. */ + +static int +cp1258_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc; + unsigned short last_wc; + if (c < 0x80) { + wc = c; + } else { + wc = cp1258_2uni[c-0x80]; + if (wc == 0xfffd) + return RET_ILSEQ; + } + last_wc = conv->istate; + if (last_wc) { + if (wc >= 0x0300 && wc < 0x0340) { + /* See whether last_wc and wc can be combined. */ + unsigned int k; + unsigned int i1, i2; + switch (wc) { + case 0x0300: k = 0; break; + case 0x0301: k = 1; break; + case 0x0303: k = 2; break; + case 0x0309: k = 3; break; + case 0x0323: k = 4; break; + default: abort(); + } + i1 = viet_comp_table[k].idx; + i2 = i1 + viet_comp_table[k].len-1; + if (last_wc >= viet_comp_table_data[i1].base + && last_wc <= viet_comp_table_data[i2].base) { + unsigned int i; + for (;;) { + i = (i1+i2)>>1; + if (last_wc == viet_comp_table_data[i].base) + break; + if (last_wc < viet_comp_table_data[i].base) { + if (i1 == i) + goto not_combining; + i2 = i; + } else { + if (i1 != i) + i1 = i; + else { + i = i2; + if (last_wc == viet_comp_table_data[i].base) + break; + goto not_combining; + } + } + } + last_wc = viet_comp_table_data[i].composed; + /* Output the combined character. */ + conv->istate = 0; + *pwc = (ucs4_t) last_wc; + return 1; + } + } + not_combining: + /* Output the buffered character. */ + conv->istate = 0; + *pwc = (ucs4_t) last_wc; + return 0; /* Don't advance the input pointer. */ + } + if (wc >= 0x0041 && wc <= 0x01b0 + && ((cp1258_comp_bases[(wc - 0x0040) >> 5] >> (wc & 0x1f)) & 1)) { + /* wc is a possible match in viet_comp_table_data. Buffer it. */ + conv->istate = wc; + return RET_TOOFEW(1); + } else { + /* Output wc immediately. */ + *pwc = (ucs4_t) wc; + return 1; + } +} + +#define cp1258_flushwc normal_flushwc + +static const unsigned char cp1258_page00[88] = { + 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0xd1, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0x00, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0xc3, 0xe3, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ +}; +static const unsigned char cp1258_page01[104] = { + 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xd5, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, /* 0xa8-0xaf */ + 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ +}; +static const unsigned char cp1258_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char cp1258_page03[40] = { + 0xcc, 0xec, 0x00, 0xde, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char cp1258_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +cp1258_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = wc; + else if (wc >= 0x00c0 && wc < 0x0118) + c = cp1258_page00[wc-0x00c0]; + else if (wc >= 0x0150 && wc < 0x01b8) + c = cp1258_page01[wc-0x0150]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = cp1258_page02[wc-0x02c0]; + else if (wc >= 0x0300 && wc < 0x0328) + c = cp1258_page03[wc-0x0300]; + else if (wc >= 0x0340 && wc < 0x0342) /* deprecated Vietnamese tone marks */ + c = cp1258_page03[wc-0x0340]; + else if (wc >= 0x2010 && wc < 0x2040) + c = cp1258_page20[wc-0x2010]; + else if (wc == 0x20ab) + c = 0xfe; + else if (wc == 0x20ac) + c = 0x80; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + /* Try canonical decomposition. */ + { + /* Binary search through viet_decomp_table. */ + unsigned int i1 = 0; + unsigned int i2 = sizeof(viet_decomp_table)/sizeof(viet_decomp_table[0])-1; + if (wc >= viet_decomp_table[i1].composed + && wc <= viet_decomp_table[i2].composed) { + unsigned int i; + for (;;) { + /* Here i2 - i1 > 0. */ + i = (i1+i2)>>1; + if (wc == viet_decomp_table[i].composed) + break; + if (wc < viet_decomp_table[i].composed) { + if (i1 == i) + return RET_ILUNI; + /* Here i1 < i < i2. */ + i2 = i; + } else { + /* Here i1 <= i < i2. */ + if (i1 != i) + i1 = i; + else { + /* Here i2 - i1 = 1. */ + i = i2; + if (wc == viet_decomp_table[i].composed) + break; + else + return RET_ILUNI; + } + } + } + /* Found a canonical decomposition. */ + wc = viet_decomp_table[i].base; + /* wc is one of 0x0020, 0x0041..0x005a, 0x0061..0x007a, 0x00a5, 0x00a8, + 0x00c2, 0x00c5..0x00c7, 0x00ca, 0x00cf, 0x00d3, 0x00d4, 0x00d6, + 0x00d8, 0x00da, 0x00dc, 0x00e2, 0x00e5..0x00e7, 0x00ea, 0x00ef, + 0x00f3, 0x00f4, 0x00f6, 0x00f8, 0x00fc, 0x0102, 0x0103, 0x01a0, + 0x01a1, 0x01af, 0x01b0. */ + if (wc < 0x0100) + c = wc; + else if (wc < 0x0118) + c = cp1258_page00[wc-0x00c0]; + else + c = cp1258_page01[wc-0x0150]; + if (n < 2) + return RET_TOOSMALL; + r[0] = c; + r[1] = cp1258_comb_table[viet_decomp_table[i].comb1]; + return 2; + } + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp437.h b/jni/parted/libiconv/lib/cp437.h new file mode 100755 index 0000000..fb1d818 --- /dev/null +++ b/jni/parted/libiconv/lib/cp437.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP437 + */ + +static const unsigned short cp437_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, + /* 0x90 */ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0 */ + 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp437_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp437_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp437_page00[96] = { + 0xff, 0xad, 0x9b, 0x9c, 0x00, 0x9d, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa6, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xa7, 0xaf, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0x00, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0x00, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0x98, /* 0xf8-0xff */ +}; +static const unsigned char cp437_page03[56] = { + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; +static const unsigned char cp437_page22[80] = { + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char cp437_page23[24] = { + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char cp437_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp437_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp437_page00[wc-0x00a0]; + else if (wc == 0x0192) + c = 0x9f; + else if (wc >= 0x0390 && wc < 0x03c8) + c = cp437_page03[wc-0x0390]; + else if (wc == 0x207f) + c = 0xfc; + else if (wc == 0x20a7) + c = 0x9e; + else if (wc >= 0x2218 && wc < 0x2268) + c = cp437_page22[wc-0x2218]; + else if (wc >= 0x2310 && wc < 0x2328) + c = cp437_page23[wc-0x2310]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp437_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp50221_0208_ext.h b/jni/parted/libiconv/lib/cp50221_0208_ext.h new file mode 100755 index 0000000..9519223 --- /dev/null +++ b/jni/parted/libiconv/lib/cp50221_0208_ext.h @@ -0,0 +1,149 @@ +/* + * Copyright (C) 1999-2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP50221 JISX0208 extensions + */ + +static const unsigned short cp50221_0208_ext_2uni[96] = { + /* 0x00 */ + 0xfffd, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, + 0x2467, 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, + /* 0x10 */ + 0x246f, 0x2470, 0x2471, 0x2472, 0x2473, 0x2160, 0x2161, 0x2162, + 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0xfffd, + /* 0x20 */ + 0x3349, 0x3314, 0x3322, 0x334d, 0x3318, 0x3327, 0x3303, 0x3336, + 0x3351, 0x3357, 0x330d, 0x3326, 0x3323, 0x332b, 0x334a, 0x333b, + /* 0x30 */ + 0x339c, 0x339d, 0x339e, 0x338e, 0x338f, 0x33c4, 0x33a1, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x337b, + /* 0x40 */ + 0x301e, 0x301f, 0x2116, 0x33cd, 0x2121, 0x32a4, 0x32a5, 0x32a6, + 0x32a7, 0x32a8, 0x3231, 0x3232, 0x3239, 0x337e, 0x337d, 0x337c, + /* 0x50 */ + 0xfffd, 0xfffd, 0xfffd, 0x222e, 0x2211, 0xfffd, 0xfffd, 0xfffd, + 0x221f, 0x22bf, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, +}; + +static int +cp50221_0208_ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x60) { + unsigned short wc = cp50221_0208_ext_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp50221_0208_ext_page21[96] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, /* 0x60-0x67 */ + 0x1d, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ +}; +static const unsigned char cp50221_0208_ext_page22[32] = { + 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, /* 0x28-0x2f */ +}; +static const unsigned char cp50221_0208_ext_page24[24] = { + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* 0x60-0x67 */ + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, /* 0x68-0x6f */ + 0x11, 0x12, 0x13, 0x14, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ +}; +static const unsigned char cp50221_0208_ext_page30[8] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x41, /* 0x18-0x1f */ +}; +static const unsigned char cp50221_0208_ext_page32[16] = { + 0x00, 0x4a, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; +static const unsigned char cp50221_0208_ext_page32_1[16] = { + 0x00, 0x00, 0x00, 0x00, 0x45, 0x46, 0x47, 0x48, /* 0xa0-0xa7 */ + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; +static const unsigned char cp50221_0208_ext_page33[208] = { + 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x22, 0x2c, 0x00, 0x00, 0x2b, 0x25, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x20, 0x2e, 0x00, 0x00, 0x23, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x3f, 0x4f, 0x4e, 0x4d, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x34, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x32, 0x00, /* 0x98-0x9f */ + 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, /* 0xc8-0xcf */ +}; + +static int +cp50221_0208_ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc >= 0x2110 && wc < 0x2170) + c = cp50221_0208_ext_page21[wc-0x2110]; + else if (wc >= 0x2210 && wc < 0x2230) + c = cp50221_0208_ext_page22[wc-0x2210]; + else if (wc == 0x22bf) + c = 0x59; + else if (wc >= 0x2460 && wc < 0x2478) + c = cp50221_0208_ext_page24[wc-0x2460]; + else if (wc >= 0x3018 && wc < 0x3020) + c = cp50221_0208_ext_page30[wc-0x3018]; + else if (wc >= 0x3230 && wc < 0x3240) + c = cp50221_0208_ext_page32[wc-0x3230]; + else if (wc >= 0x32a0 && wc < 0x32b0) + c = cp50221_0208_ext_page32_1[wc-0x32a0]; + else if (wc >= 0x3300 && wc < 0x33d0) + c = cp50221_0208_ext_page33[wc-0x3300]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp50221_0212_ext.h b/jni/parted/libiconv/lib/cp50221_0212_ext.h new file mode 100755 index 0000000..78d4839 --- /dev/null +++ b/jni/parted/libiconv/lib/cp50221_0212_ext.h @@ -0,0 +1,212 @@ +/* + * Copyright (C) 1999-2011, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP50221 JISX0212 extensions + */ + +static const unsigned short cp50221_0212_ext_2uni[112] = { + /* 0x00 */ + 0xfffd, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, + 0x2177, 0x2178, 0x2179, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x10 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff07, 0xff02, 0xfffd, + 0xfffd, 0xfffd, 0x70bb, 0x4efc, 0x50f4, 0x51ec, 0x5307, 0x5324, + /* 0x20 */ + 0xfa0e, 0x548a, 0x5759, 0xfa0f, 0xfa10, 0x589e, 0x5bec, 0x5cf5, + 0x5d53, 0xfa11, 0x5fb7, 0x6085, 0x6120, 0x654e, 0xfffd, 0x6665, + /* 0x30 */ + 0xfa12, 0xf929, 0x6801, 0xfa13, 0xfa14, 0x6a6b, 0x6ae2, 0x6df8, + 0x6df2, 0x7028, 0xfa15, 0xfa16, 0x7501, 0x7682, 0x769e, 0xfa17, + /* 0x40 */ + 0x7930, 0xfa18, 0xfa19, 0xfa1a, 0xfa1b, 0x7ae7, 0xfa1c, 0xfa1d, + 0x7da0, 0x7dd6, 0xfa1e, 0x8362, 0xfa1f, 0x85b0, 0xfa20, 0xfa21, + /* 0x50 */ + 0x8807, 0xfa22, 0x8b7f, 0x8cf4, 0x8d76, 0xfa23, 0xfa24, 0xfa25, + 0x90de, 0xfa26, 0x9115, 0xfa27, 0xfa28, 0x9592, 0xf9dc, 0xfa29, + /* 0x60 */ + 0x973b, 0xfffd, 0x9751, 0xfa2a, 0xfa2b, 0xfa2c, 0x999e, 0x9ad9, + 0x9b72, 0xfa2d, 0x9ed1, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, +}; + +static int +cp50221_0212_ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x70) { + unsigned short wc = cp50221_0212_ext_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + else if (c == 0xa1) { + *pwc = 0x974d; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char cp50221_0212_ext_page21[16] = { + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* 0x70-0x77 */ + 0x09, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char cp50221_0212_ext_page53[40] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char cp50221_0212_ext_page6d[16] = { + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ + 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char cp50221_0212_ext_page76[32] = { + 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, /* 0x98-0x9f */ +}; +static const unsigned char cp50221_0212_ext_page7d[56] = { + 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, /* 0xd0-0xd7 */ +}; +static const unsigned char cp50221_0212_ext_page97[32] = { + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ +}; +static const unsigned char cp50221_0212_ext_pagefa[40] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x23, /* 0x08-0x0f */ + 0x24, 0x29, 0x30, 0x33, 0x34, 0x3a, 0x3b, 0x3f, /* 0x10-0x17 */ + 0x41, 0x42, 0x43, 0x44, 0x46, 0x47, 0x4a, 0x4c, /* 0x18-0x1f */ + 0x4e, 0x4f, 0x51, 0x55, 0x56, 0x57, 0x59, 0x5b, /* 0x20-0x27 */ + 0x5c, 0x5f, 0x63, 0x64, 0x65, 0x69, 0x00, 0x00, /* 0x28-0x2f */ +}; +static const unsigned char cp50221_0212_ext_pageff[8] = { + 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x15, /* 0x00-0x07 */ +}; + +static int +cp50221_0212_ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc >= 0x2170 && wc < 0x2180) + c = cp50221_0212_ext_page21[wc-0x2170]; + else if (wc == 0x4efc) + c = 0x1b; + else if (wc == 0x50f4) + c = 0x1c; + else if (wc == 0x51ec) + c = 0x1d; + else if (wc >= 0x5300 && wc < 0x5328) + c = cp50221_0212_ext_page53[wc-0x5300]; + else if (wc == 0x548a) + c = 0x21; + else if (wc == 0x5759) + c = 0x22; + else if (wc == 0x589e) + c = 0x25; + else if (wc == 0x5bec) + c = 0x26; + else if (wc == 0x5cf5) + c = 0x27; + else if (wc == 0x5d53) + c = 0x28; + else if (wc == 0x5fb7) + c = 0x2a; + else if (wc == 0x6085) + c = 0x2b; + else if (wc == 0x6120) + c = 0x2c; + else if (wc == 0x654e) + c = 0x2d; + else if (wc == 0x6665) + c = 0x2f; + else if (wc == 0x6801) + c = 0x32; + else if (wc == 0x6a6b) + c = 0x35; + else if (wc == 0x6ae2) + c = 0x36; + else if (wc >= 0x6df0 && wc < 0x6e00) + c = cp50221_0212_ext_page6d[wc-0x6df0]; + else if (wc == 0x7028) + c = 0x39; + else if (wc == 0x70bb) + c = 0x1a; + else if (wc == 0x7501) + c = 0x3c; + else if (wc >= 0x7680 && wc < 0x76a0) + c = cp50221_0212_ext_page76[wc-0x7680]; + else if (wc == 0x7930) + c = 0x40; + else if (wc == 0x7ae7) + c = 0x45; + else if (wc >= 0x7da0 && wc < 0x7dd8) + c = cp50221_0212_ext_page7d[wc-0x7da0]; + else if (wc == 0x8362) + c = 0x4b; + else if (wc == 0x85b0) + c = 0x4d; + else if (wc == 0x8807) + c = 0x50; + else if (wc == 0x8b7f) + c = 0x52; + else if (wc == 0x8cf4) + c = 0x53; + else if (wc == 0x8d76) + c = 0x54; + else if (wc == 0x90de) + c = 0x58; + else if (wc == 0x9115) + c = 0x5a; + else if (wc == 0x9592) + c = 0x5d; + else if (wc >= 0x9738 && wc < 0x9758) + c = cp50221_0212_ext_page97[wc-0x9738]; + else if (wc == 0x999e) + c = 0x66; + else if (wc == 0x9ad9) + c = 0x67; + else if (wc == 0x9b72) + c = 0x68; + else if (wc == 0x9ed1) + c = 0x6a; + else if (wc == 0xf929) + c = 0x31; + else if (wc == 0xf9dc) + c = 0x5e; + else if (wc >= 0xfa08 && wc < 0xfa30) + c = cp50221_0212_ext_pagefa[wc-0xfa08]; + else if (wc >= 0xff00 && wc < 0xff08) + c = cp50221_0212_ext_pageff[wc-0xff00]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp737.h b/jni/parted/libiconv/lib/cp737.h new file mode 100755 index 0000000..32ef680 --- /dev/null +++ b/jni/parted/libiconv/lib/cp737.h @@ -0,0 +1,140 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP737 + */ + +static const unsigned short cp737_2uni[128] = { + /* 0x80 */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, + 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, + /* 0x90 */ + 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, + 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, + /* 0xa0 */ + 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, + 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x03c9, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd, + 0x03cb, 0x03ce, 0x0386, 0x0388, 0x0389, 0x038a, 0x038c, 0x038e, + /* 0xf0 */ + 0x038f, 0x00b1, 0x2265, 0x2264, 0x03aa, 0x03ab, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp737_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp737_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp737_page00[24] = { + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0x00, 0x00, 0xfa, /* 0xb0-0xb7 */ +}; +static const unsigned char cp737_page03[80] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, /* 0x80-0x87 */ + 0xeb, 0xec, 0xed, 0x00, 0xee, 0x00, 0xef, 0xf0, /* 0x88-0x8f */ + 0x00, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, /* 0x90-0x97 */ + 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, /* 0x98-0x9f */ + 0x8f, 0x90, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, /* 0xa0-0xa7 */ + 0x96, 0x97, 0xf4, 0xf5, 0xe1, 0xe2, 0xe3, 0xe5, /* 0xa8-0xaf */ + 0x00, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, /* 0xb0-0xb7 */ + 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0xb8-0xbf */ + 0xa7, 0xa8, 0xaa, 0xa9, 0xab, 0xac, 0xad, 0xae, /* 0xc0-0xc7 */ + 0xaf, 0xe0, 0xe4, 0xe8, 0xe6, 0xe7, 0xe9, 0x00, /* 0xc8-0xcf */ +}; +static const unsigned char cp737_page22[80] = { + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char cp737_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp737_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00b8) + c = cp737_page00[wc-0x00a0]; + else if (wc == 0x00f7) + c = 0xf6; + else if (wc >= 0x0380 && wc < 0x03d0) + c = cp737_page03[wc-0x0380]; + else if (wc == 0x207f) + c = 0xfc; + else if (wc >= 0x2218 && wc < 0x2268) + c = cp737_page22[wc-0x2218]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp737_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp775.h b/jni/parted/libiconv/lib/cp775.h new file mode 100755 index 0000000..ada10bd --- /dev/null +++ b/jni/parted/libiconv/lib/cp775.h @@ -0,0 +1,141 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP775 + */ + +static const unsigned short cp775_2uni[128] = { + /* 0x80 */ + 0x0106, 0x00fc, 0x00e9, 0x0101, 0x00e4, 0x0123, 0x00e5, 0x0107, + 0x0142, 0x0113, 0x0156, 0x0157, 0x012b, 0x0179, 0x00c4, 0x00c5, + /* 0x90 */ + 0x00c9, 0x00e6, 0x00c6, 0x014d, 0x00f6, 0x0122, 0x00a2, 0x015a, + 0x015b, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x00a4, + /* 0xa0 */ + 0x0100, 0x012a, 0x00f3, 0x017b, 0x017c, 0x017a, 0x201d, 0x00a6, + 0x00a9, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x0141, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010c, 0x0118, + 0x0116, 0x2563, 0x2551, 0x2557, 0x255d, 0x012e, 0x0160, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x0172, 0x016a, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x017d, + /* 0xd0 */ + 0x0105, 0x010d, 0x0119, 0x0117, 0x012f, 0x0161, 0x0173, 0x016b, + 0x017e, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x00d3, 0x00df, 0x014c, 0x0143, 0x00f5, 0x00d5, 0x00b5, 0x0144, + 0x0136, 0x0137, 0x013b, 0x013c, 0x0146, 0x0112, 0x0145, 0x2019, + /* 0xf0 */ + 0x00ad, 0x00b1, 0x201c, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x201e, + 0x00b0, 0x2219, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp775_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp775_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp775_page00[224] = { + 0xff, 0x00, 0x96, 0x9c, 0x9f, 0x00, 0xa7, 0xf5, /* 0xa0-0xa7 */ + 0x00, 0xa8, 0x00, 0xae, 0xaa, 0xf0, 0xa9, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xfc, 0x00, 0xe6, 0xf4, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0xfb, 0x00, 0xaf, 0xac, 0xab, 0xf3, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8f, 0x92, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xe0, 0x00, 0xe5, 0x99, 0x9e, /* 0xd0-0xd7 */ + 0x9d, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x84, 0x86, 0x91, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xa2, 0x00, 0xe4, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0xa0, 0x83, 0x00, 0x00, 0xb5, 0xd0, 0x80, 0x87, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xb6, 0xd1, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0xed, 0x89, 0x00, 0x00, 0xb8, 0xd3, /* 0x10-0x17 */ + 0xb7, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x95, 0x85, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0xa1, 0x8c, 0x00, 0x00, 0xbd, 0xd4, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xe9, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0xea, 0xeb, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0xad, 0x88, 0xe3, 0xe7, 0xee, 0xec, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xe2, 0x93, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x8b, /* 0x50-0x57 */ + 0x00, 0x00, 0x97, 0x98, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xbe, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0xc7, 0xd7, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0xc6, 0xd6, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x8d, 0xa5, 0xa3, 0xa4, 0xcf, 0xd8, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char cp775_page20[8] = { + 0x00, 0xef, 0x00, 0x00, 0xf2, 0xa6, 0xf7, 0x00, /* 0x18-0x1f */ +}; +static const unsigned char cp775_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp775_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = cp775_page00[wc-0x00a0]; + else if (wc >= 0x2018 && wc < 0x2020) + c = cp775_page20[wc-0x2018]; + else if (wc == 0x2219) + c = 0xf9; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp775_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp850.h b/jni/parted/libiconv/lib/cp850.h new file mode 100755 index 0000000..794e72b --- /dev/null +++ b/jni/parted/libiconv/lib/cp850.h @@ -0,0 +1,123 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP850 + */ + +static const unsigned short cp850_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, + /* 0x90 */ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0, + 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0 */ + 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce, + 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580, + /* 0xe0 */ + 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe, + 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4, + /* 0xf0 */ + 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8, + 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp850_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp850_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp850_page00[96] = { + 0xff, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0xb8, 0xa6, 0xae, 0xaa, 0xf0, 0xa9, 0xee, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, /* 0xb0-0xb7 */ + 0xf7, 0xfb, 0xa7, 0xaf, 0xac, 0xab, 0xf3, 0xa8, /* 0xb8-0xbf */ + 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8, /* 0xc8-0xcf */ + 0xd1, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0x9e, /* 0xd0-0xd7 */ + 0x9d, 0xeb, 0xe9, 0xea, 0x9a, 0xed, 0xe8, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0xc6, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0xd0, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x97, 0xa3, 0x96, 0x81, 0xec, 0xe7, 0x98, /* 0xf8-0xff */ +}; +static const unsigned char cp850_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp850_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp850_page00[wc-0x00a0]; + else if (wc == 0x0131) + c = 0xd5; + else if (wc == 0x0192) + c = 0x9f; + else if (wc == 0x2017) + c = 0xf2; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp850_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp852.h b/jni/parted/libiconv/lib/cp852.h new file mode 100755 index 0000000..c6707bd --- /dev/null +++ b/jni/parted/libiconv/lib/cp852.h @@ -0,0 +1,142 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP852 + */ + +static const unsigned short cp852_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x016f, 0x0107, 0x00e7, + 0x0142, 0x00eb, 0x0150, 0x0151, 0x00ee, 0x0179, 0x00c4, 0x0106, + /* 0x90 */ + 0x00c9, 0x0139, 0x013a, 0x00f4, 0x00f6, 0x013d, 0x013e, 0x015a, + 0x015b, 0x00d6, 0x00dc, 0x0164, 0x0165, 0x0141, 0x00d7, 0x010d, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x0104, 0x0105, 0x017d, 0x017e, + 0x0118, 0x0119, 0x00ac, 0x017a, 0x010c, 0x015f, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x011a, + 0x015e, 0x2563, 0x2551, 0x2557, 0x255d, 0x017b, 0x017c, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x0102, 0x0103, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0 */ + 0x0111, 0x0110, 0x010e, 0x00cb, 0x010f, 0x0147, 0x00cd, 0x00ce, + 0x011b, 0x2518, 0x250c, 0x2588, 0x2584, 0x0162, 0x016e, 0x2580, + /* 0xe0 */ + 0x00d3, 0x00df, 0x00d4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, + 0x0154, 0x00da, 0x0155, 0x0170, 0x00fd, 0x00dd, 0x0163, 0x00b4, + /* 0xf0 */ + 0x00ad, 0x02dd, 0x02db, 0x02c7, 0x02d8, 0x00a7, 0x00f7, 0x00b8, + 0x00b0, 0x00a8, 0x02d9, 0x0171, 0x0158, 0x0159, 0x25a0, 0x00a0, +}; + +static int +cp852_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp852_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp852_page00[224] = { + 0xff, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0x00, 0x00, 0xae, 0xaa, 0xf0, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0xf7, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0xb5, 0xb6, 0x00, 0x8e, 0x00, 0x00, 0x80, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0xd3, 0x00, 0xd6, 0xd7, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xe0, 0xe2, 0x00, 0x99, 0x9e, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xe9, 0x00, 0x9a, 0xed, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x00, 0xa0, 0x83, 0x00, 0x84, 0x00, 0x00, 0x87, /* 0xe0-0xe7 */ + 0x00, 0x82, 0x00, 0x89, 0x00, 0xa1, 0x8c, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xa2, 0x93, 0x00, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xa3, 0x00, 0x81, 0xec, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0xc6, 0xc7, 0xa4, 0xa5, 0x8f, 0x86, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xac, 0x9f, 0xd2, 0xd4, /* 0x08-0x0f */ + 0xd1, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xa8, 0xa9, 0xb7, 0xd8, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x91, 0x92, 0x00, 0x00, 0x95, 0x96, 0x00, /* 0x38-0x3f */ + 0x00, 0x9d, 0x88, 0xe3, 0xe4, 0x00, 0x00, 0xd5, /* 0x40-0x47 */ + 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x8a, 0x8b, 0x00, 0x00, 0xe8, 0xea, 0x00, 0x00, /* 0x50-0x57 */ + 0xfc, 0xfd, 0x97, 0x98, 0x00, 0x00, 0xb8, 0xad, /* 0x58-0x5f */ + 0xe6, 0xe7, 0xdd, 0xee, 0x9b, 0x9c, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x85, /* 0x68-0x6f */ + 0xeb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x8d, 0xab, 0xbd, 0xbe, 0xa6, 0xa7, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char cp852_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xf4, 0xfa, 0x00, 0xf2, 0x00, 0xf1, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char cp852_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp852_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = cp852_page00[wc-0x00a0]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = cp852_page02[wc-0x02c0]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp852_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp853.h b/jni/parted/libiconv/lib/cp853.h new file mode 100755 index 0000000..3af252b --- /dev/null +++ b/jni/parted/libiconv/lib/cp853.h @@ -0,0 +1,150 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP853 + */ + +static const unsigned short cp853_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x0109, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x0108, + /* 0x90 */ + 0x00c9, 0x010b, 0x010a, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x0130, 0x00d6, 0x00dc, 0x011d, 0x00a3, 0x011c, 0x00d7, 0x0135, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x011e, 0x011f, + 0x0124, 0x0125, 0xfffd, 0x00bd, 0x0134, 0x015f, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0, + 0x015e, 0x2563, 0x2551, 0x2557, 0x255d, 0x017b, 0x017c, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x015c, 0x015d, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0 */ + 0xfffd, 0xfffd, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce, + 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0xfffd, 0x00cc, 0x2580, + /* 0xe0 */ + 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x0120, 0x0121, 0x00b5, 0x0126, + 0x0127, 0x00da, 0x00db, 0x00d9, 0x016c, 0x016d, 0xfffd, 0x00b4, + /* 0xf0 */ + 0x00ad, 0xfffd, 0x2113, 0x0149, 0x02d8, 0x00a7, 0x00f7, 0x00b8, + 0x00b0, 0x00a8, 0x02d9, 0xfffd, 0x00b3, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp853_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp853_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp853_page00[96] = { + 0xff, 0x00, 0x00, 0x9c, 0xcf, 0x00, 0x00, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0x00, 0x00, 0xae, 0x00, 0xf0, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0x00, 0xfd, 0xfc, 0xef, 0xe6, 0x00, 0x00, /* 0xb0-0xb7 */ + 0xf7, 0x00, 0x00, 0xaf, 0x00, 0xab, 0x00, 0x00, /* 0xb8-0xbf */ + 0xb7, 0xb5, 0xb6, 0x00, 0x8e, 0x00, 0x00, 0x80, /* 0xc0-0xc7 */ + 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8, /* 0xc8-0xcf */ + 0x00, 0xa5, 0xe3, 0xe0, 0xe2, 0x00, 0x99, 0x9e, /* 0xd0-0xd7 */ + 0x00, 0xeb, 0xe9, 0xea, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0x00, 0x84, 0x00, 0x00, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0x00, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char cp853_page01[120] = { + 0x8f, 0x86, 0x92, 0x91, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9b, 0xa6, 0xa7, /* 0x18-0x1f */ + 0xe4, 0xe5, 0x00, 0x00, 0xa8, 0xa9, 0xe7, 0xe8, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x98, 0xd5, 0x00, 0x00, 0xac, 0x9f, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc7, 0xb8, 0xad, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xec, 0xed, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0xbd, 0xbe, 0x00, 0x00, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char cp853_page02[8] = { + 0xf4, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char cp853_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp853_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp853_page00[wc-0x00a0]; + else if (wc >= 0x0108 && wc < 0x0180) + c = cp853_page01[wc-0x0108]; + else if (wc >= 0x02d8 && wc < 0x02e0) + c = cp853_page02[wc-0x02d8]; + else if (wc == 0x2113) + c = 0xf2; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp853_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp855.h b/jni/parted/libiconv/lib/cp855.h new file mode 100755 index 0000000..9fc109a --- /dev/null +++ b/jni/parted/libiconv/lib/cp855.h @@ -0,0 +1,127 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP855 + */ + +static const unsigned short cp855_2uni[128] = { + /* 0x80 */ + 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, + 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408, + /* 0x90 */ + 0x0459, 0x0409, 0x045a, 0x040a, 0x045b, 0x040b, 0x045c, 0x040c, + 0x045e, 0x040e, 0x045f, 0x040f, 0x044e, 0x042e, 0x044a, 0x042a, + /* 0xa0 */ + 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, + 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, + 0x0418, 0x2563, 0x2551, 0x2557, 0x255d, 0x0439, 0x0419, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x043a, 0x041a, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0 */ + 0x043b, 0x041b, 0x043c, 0x041c, 0x043d, 0x041d, 0x043e, 0x041e, + 0x043f, 0x2518, 0x250c, 0x2588, 0x2584, 0x041f, 0x044f, 0x2580, + /* 0xe0 */ + 0x042f, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, + 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044c, 0x042c, 0x2116, + /* 0xf0 */ + 0x00ad, 0x044b, 0x042b, 0x0437, 0x0417, 0x0448, 0x0428, 0x044d, + 0x042d, 0x0449, 0x0429, 0x0447, 0x0427, 0x00a7, 0x25a0, 0x00a0, +}; + +static int +cp855_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp855_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp855_page00[32] = { + 0xff, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0xae, 0x00, 0xf0, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char cp855_page04[96] = { + 0x00, 0x85, 0x81, 0x83, 0x87, 0x89, 0x8b, 0x8d, /* 0x00-0x07 */ + 0x8f, 0x91, 0x93, 0x95, 0x97, 0x00, 0x99, 0x9b, /* 0x08-0x0f */ + 0xa1, 0xa3, 0xec, 0xad, 0xa7, 0xa9, 0xea, 0xf4, /* 0x10-0x17 */ + 0xb8, 0xbe, 0xc7, 0xd1, 0xd3, 0xd5, 0xd7, 0xdd, /* 0x18-0x1f */ + 0xe2, 0xe4, 0xe6, 0xe8, 0xab, 0xb6, 0xa5, 0xfc, /* 0x20-0x27 */ + 0xf6, 0xfa, 0x9f, 0xf2, 0xee, 0xf8, 0x9d, 0xe0, /* 0x28-0x2f */ + 0xa0, 0xa2, 0xeb, 0xac, 0xa6, 0xa8, 0xe9, 0xf3, /* 0x30-0x37 */ + 0xb7, 0xbd, 0xc6, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, /* 0x38-0x3f */ + 0xe1, 0xe3, 0xe5, 0xe7, 0xaa, 0xb5, 0xa4, 0xfb, /* 0x40-0x47 */ + 0xf5, 0xf9, 0x9e, 0xf1, 0xed, 0xf7, 0x9c, 0xde, /* 0x48-0x4f */ + 0x00, 0x84, 0x80, 0x82, 0x86, 0x88, 0x8a, 0x8c, /* 0x50-0x57 */ + 0x8e, 0x90, 0x92, 0x94, 0x96, 0x00, 0x98, 0x9a, /* 0x58-0x5f */ +}; +static const unsigned char cp855_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp855_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = cp855_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0460) + c = cp855_page04[wc-0x0400]; + else if (wc == 0x2116) + c = 0xef; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp855_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp856.h b/jni/parted/libiconv/lib/cp856.h new file mode 100755 index 0000000..9cce575 --- /dev/null +++ b/jni/parted/libiconv/lib/cp856.h @@ -0,0 +1,133 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP856 + */ + +static const unsigned short cp856_2uni[128] = { + /* 0x80 */ + 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + /* 0x90 */ + 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, 0xfffd, 0x00a3, 0xfffd, 0x00d7, 0xfffd, + /* 0xa0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0xfffd, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0xfffd, 0xfffd, 0xfffd, + 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0xfffd, 0xfffd, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0xfffd, 0x2580, + /* 0xe0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x00b5, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x00af, 0x00b4, + /* 0xf0 */ + 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8, + 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp856_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp856_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp856_page00[88] = { + 0xff, 0x00, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0xb8, 0x00, 0xae, 0xaa, 0xf0, 0xa9, 0xee, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, /* 0xb0-0xb7 */ + 0xf7, 0xfb, 0x00, 0xaf, 0xac, 0xab, 0xf3, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, /* 0xf0-0xf7 */ +}; +static const unsigned char cp856_page05[32] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0xd0-0xd7 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0xd8-0xdf */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0xe0-0xe7 */ + 0x98, 0x99, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; +static const unsigned char cp856_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp856_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00f8) + c = cp856_page00[wc-0x00a0]; + else if (wc >= 0x05d0 && wc < 0x05f0) + c = cp856_page05[wc-0x05d0]; + else if (wc == 0x2017) + c = 0xf2; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp856_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp857.h b/jni/parted/libiconv/lib/cp857.h new file mode 100755 index 0000000..3a191a2 --- /dev/null +++ b/jni/parted/libiconv/lib/cp857.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP857 + */ + +static const unsigned short cp857_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x0131, 0x00c4, 0x00c5, + /* 0x90 */ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x0130, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x015e, 0x015f, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x011e, 0x011f, + 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0, + 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0 */ + 0x00ba, 0x00aa, 0x00ca, 0x00cb, 0x00c8, 0xfffd, 0x00cd, 0x00ce, + 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580, + /* 0xe0 */ + 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0xfffd, + 0x00d7, 0x00da, 0x00db, 0x00d9, 0x00ec, 0x00ff, 0x00af, 0x00b4, + /* 0xf0 */ + 0x00ad, 0x00b1, 0xfffd, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8, + 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp857_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp857_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp857_page00[96] = { + 0xff, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0xb8, 0xd1, 0xae, 0xaa, 0xf0, 0xa9, 0xee, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, /* 0xb0-0xb7 */ + 0xf7, 0xfb, 0xd0, 0xaf, 0xac, 0xab, 0xf3, 0xa8, /* 0xb8-0xbf */ + 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8, /* 0xc8-0xcf */ + 0x00, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0xe8, /* 0xd0-0xd7 */ + 0x9d, 0xeb, 0xe9, 0xea, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0xc6, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0xec, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0xed, /* 0xf8-0xff */ +}; +static const unsigned char cp857_page01[72] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xa7, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x98, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x9f, /* 0x58-0x5f */ +}; +static const unsigned char cp857_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp857_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp857_page00[wc-0x00a0]; + else if (wc >= 0x0118 && wc < 0x0160) + c = cp857_page01[wc-0x0118]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp857_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp858.h b/jni/parted/libiconv/lib/cp858.h new file mode 100755 index 0000000..c7bddb2 --- /dev/null +++ b/jni/parted/libiconv/lib/cp858.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP858 + */ + +static int +cp858_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else if (c == 0xd5) + *pwc = 0x20ac; + else + *pwc = (ucs4_t) cp850_2uni[c-0x80]; + return 1; +} + +static int +cp858_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp850_page00[wc-0x00a0]; + else if (wc == 0x0192) + c = 0x9f; + else if (wc == 0x2017) + c = 0xf2; + else if (wc == 0x20ac) + c = 0xd5; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp850_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp860.h b/jni/parted/libiconv/lib/cp860.h new file mode 100755 index 0000000..afa25fb --- /dev/null +++ b/jni/parted/libiconv/lib/cp860.h @@ -0,0 +1,148 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP860 + */ + +static const unsigned short cp860_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e3, 0x00e0, 0x00c1, 0x00e7, + 0x00ea, 0x00ca, 0x00e8, 0x00cd, 0x00d4, 0x00ec, 0x00c3, 0x00c2, + /* 0x90 */ + 0x00c9, 0x00c0, 0x00c8, 0x00f4, 0x00f5, 0x00f2, 0x00da, 0x00f9, + 0x00cc, 0x00d5, 0x00dc, 0x00a2, 0x00a3, 0x00d9, 0x20a7, 0x00d3, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x00d2, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0 */ + 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp860_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp860_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp860_page00[96] = { + 0xff, 0xad, 0x9b, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa6, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xa7, 0xaf, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x91, 0x86, 0x8f, 0x8e, 0x00, 0x00, 0x00, 0x80, /* 0xc0-0xc7 */ + 0x92, 0x90, 0x89, 0x00, 0x98, 0x8b, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0xa5, 0xa9, 0x9f, 0x8c, 0x99, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x9d, 0x96, 0x00, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0x84, 0x00, 0x00, 0x00, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x00, 0x8d, 0xa1, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0x94, 0x00, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x97, 0xa3, 0x00, 0x81, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char cp860_page03[56] = { + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; +static const unsigned char cp860_page22[80] = { + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char cp860_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp860_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp860_page00[wc-0x00a0]; + else if (wc >= 0x0390 && wc < 0x03c8) + c = cp860_page03[wc-0x0390]; + else if (wc == 0x207f) + c = 0xfc; + else if (wc == 0x20a7) + c = 0x9e; + else if (wc >= 0x2218 && wc < 0x2268) + c = cp860_page22[wc-0x2218]; + else if (wc >= 0x2320 && wc < 0x2322) + c = wc-0x222c; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp860_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp861.h b/jni/parted/libiconv/lib/cp861.h new file mode 100755 index 0000000..b131570 --- /dev/null +++ b/jni/parted/libiconv/lib/cp861.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP861 + */ + +static const unsigned short cp861_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00d0, 0x00f0, 0x00de, 0x00c4, 0x00c5, + /* 0x90 */ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00fe, 0x00fb, 0x00dd, + 0x00fd, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x20a7, 0x0192, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00c1, 0x00cd, 0x00d3, 0x00da, + 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0 */ + 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp861_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp861_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp861_page00[96] = { + 0xff, 0xad, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xaf, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x00, 0xa4, 0x00, 0x00, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, /* 0xc8-0xcf */ + 0x8b, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x99, 0x00, /* 0xd0-0xd7 */ + 0x9d, 0x00, 0xa7, 0x00, 0x9a, 0x97, 0x8d, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0x00, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x00, 0xa1, 0x00, 0x00, /* 0xe8-0xef */ + 0x8c, 0x00, 0x00, 0xa2, 0x93, 0x00, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x00, 0xa3, 0x96, 0x81, 0x98, 0x95, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char cp861_page03[56] = { + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; +static const unsigned char cp861_page22[80] = { + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char cp861_page23[24] = { + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char cp861_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp861_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp861_page00[wc-0x00a0]; + else if (wc == 0x0192) + c = 0x9f; + else if (wc >= 0x0390 && wc < 0x03c8) + c = cp861_page03[wc-0x0390]; + else if (wc == 0x207f) + c = 0xfc; + else if (wc == 0x20a7) + c = 0x9e; + else if (wc >= 0x2218 && wc < 0x2268) + c = cp861_page22[wc-0x2218]; + else if (wc >= 0x2310 && wc < 0x2328) + c = cp861_page23[wc-0x2310]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp861_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp862.h b/jni/parted/libiconv/lib/cp862.h new file mode 100755 index 0000000..9aaeca3 --- /dev/null +++ b/jni/parted/libiconv/lib/cp862.h @@ -0,0 +1,154 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP862 + */ + +static const unsigned short cp862_2uni[128] = { + /* 0x80 */ + 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + /* 0x90 */ + 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0 */ + 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp862_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp862_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp862_page00[96] = { + 0xff, 0xad, 0x9b, 0x9c, 0x00, 0x9d, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa6, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xa7, 0xaf, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0xa4, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char cp862_page03[56] = { + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; +static const unsigned char cp862_page22[80] = { + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char cp862_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp862_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp862_page00[wc-0x00a0]; + else if (wc == 0x0192) + c = 0x9f; + else if (wc >= 0x0390 && wc < 0x03c8) + c = cp862_page03[wc-0x0390]; + else if (wc >= 0x05d0 && wc < 0x05eb) + c = wc-0x0550; + else if (wc == 0x207f) + c = 0xfc; + else if (wc == 0x20a7) + c = 0x9e; + else if (wc >= 0x2218 && wc < 0x2268) + c = cp862_page22[wc-0x2218]; + else if (wc == 0x2310) + c = 0xa9; + else if (wc >= 0x2320 && wc < 0x2322) + c = wc-0x222c; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp862_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp863.h b/jni/parted/libiconv/lib/cp863.h new file mode 100755 index 0000000..03f8ac6 --- /dev/null +++ b/jni/parted/libiconv/lib/cp863.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP863 + */ + +static const unsigned short cp863_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00c2, 0x00e0, 0x00b6, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x2017, 0x00c0, 0x00a7, + /* 0x90 */ + 0x00c9, 0x00c8, 0x00ca, 0x00f4, 0x00cb, 0x00cf, 0x00fb, 0x00f9, + 0x00a4, 0x00d4, 0x00dc, 0x00a2, 0x00a3, 0x00d9, 0x00db, 0x0192, + /* 0xa0 */ + 0x00a6, 0x00b4, 0x00f3, 0x00fa, 0x00a8, 0x00b8, 0x00b3, 0x00af, + 0x00ce, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00be, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0 */ + 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp863_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp863_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp863_page00[96] = { + 0xff, 0x00, 0x9b, 0x9c, 0x98, 0x00, 0xa0, 0x8f, /* 0xa0-0xa7 */ + 0xa4, 0x00, 0x00, 0xae, 0xaa, 0x00, 0x00, 0xa7, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xa6, 0xa1, 0xe6, 0x86, 0xfa, /* 0xb0-0xb7 */ + 0xa5, 0x00, 0x00, 0xaf, 0xac, 0xab, 0xad, 0x00, /* 0xb8-0xbf */ + 0x8e, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xc0-0xc7 */ + 0x91, 0x90, 0x92, 0x94, 0x00, 0x00, 0xa8, 0x95, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x9d, 0x00, 0x9e, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x00, 0x00, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xa2, 0x93, 0x00, 0x00, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char cp863_page03[56] = { + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; +static const unsigned char cp863_page22[80] = { + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char cp863_page23[24] = { + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char cp863_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp863_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp863_page00[wc-0x00a0]; + else if (wc == 0x0192) + c = 0x9f; + else if (wc >= 0x0390 && wc < 0x03c8) + c = cp863_page03[wc-0x0390]; + else if (wc == 0x2017) + c = 0x8d; + else if (wc == 0x207f) + c = 0xfc; + else if (wc >= 0x2218 && wc < 0x2268) + c = cp863_page22[wc-0x2218]; + else if (wc >= 0x2310 && wc < 0x2328) + c = cp863_page23[wc-0x2310]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp863_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp864.h b/jni/parted/libiconv/lib/cp864.h new file mode 100755 index 0000000..c20a855 --- /dev/null +++ b/jni/parted/libiconv/lib/cp864.h @@ -0,0 +1,187 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP864 + */ + +static const unsigned short cp864_2uni_1[16] = { + /* 0x20 */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x066a, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, +}; +static const unsigned short cp864_2uni_2[128] = { + /* 0x80 */ + 0x00b0, 0x00b7, 0x2219, 0x221a, 0x2592, 0x2500, 0x2502, 0x253c, + 0x2524, 0x252c, 0x251c, 0x2534, 0x2510, 0x250c, 0x2514, 0x2518, + /* 0x90 */ + 0x03b2, 0x221e, 0x03c6, 0x00b1, 0x00bd, 0x00bc, 0x2248, 0x00ab, + 0x00bb, 0xfef7, 0xfef8, 0xfffd, 0xfffd, 0xfefb, 0xfefc, 0xfffd, + /* 0xa0 */ + 0x00a0, 0x00ad, 0xfe82, 0x00a3, 0x00a4, 0xfe84, 0xfffd, 0xfffd, + 0xfe8e, 0xfe8f, 0xfe95, 0xfe99, 0x060c, 0xfe9d, 0xfea1, 0xfea5, + /* 0xb0 */ + 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, + 0x0668, 0x0669, 0xfed1, 0x061b, 0xfeb1, 0xfeb5, 0xfeb9, 0x061f, + /* 0xc0 */ + 0x00a2, 0xfe80, 0xfe81, 0xfe83, 0xfe85, 0xfeca, 0xfe8b, 0xfe8d, + 0xfe91, 0xfe93, 0xfe97, 0xfe9b, 0xfe9f, 0xfea3, 0xfea7, 0xfea9, + /* 0xd0 */ + 0xfeab, 0xfead, 0xfeaf, 0xfeb3, 0xfeb7, 0xfebb, 0xfebf, 0xfec1, + 0xfec5, 0xfecb, 0xfecf, 0x00a6, 0x00ac, 0x00f7, 0x00d7, 0xfec9, + /* 0xe0 */ + 0x0640, 0xfed3, 0xfed7, 0xfedb, 0xfedf, 0xfee3, 0xfee7, 0xfeeb, + 0xfeed, 0xfeef, 0xfef3, 0xfebd, 0xfecc, 0xfece, 0xfecd, 0xfee1, + /* 0xf0 */ + 0xfe7d, 0x0651, 0xfee5, 0xfee9, 0xfeec, 0xfef0, 0xfef2, 0xfed0, + 0xfed5, 0xfef5, 0xfef6, 0xfedd, 0xfed9, 0xfef1, 0x25a0, 0xfffd, +}; + +static int +cp864_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x20) { + *pwc = (ucs4_t) c; + return 1; + } + else if (c < 0x30) { + *pwc = (ucs4_t) cp864_2uni_1[c-0x20]; + return 1; + } + else if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp864_2uni_2[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp864_page00[8] = { + 0x20, 0x21, 0x22, 0x23, 0x24, 0x00, 0x26, 0x27, /* 0x20-0x27 */ +}; +static const unsigned char cp864_page00_1[88] = { + 0xa0, 0x00, 0xc0, 0xa3, 0xa4, 0x00, 0xdb, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x97, 0xdc, 0xa1, 0x00, 0x00, /* 0xa8-0xaf */ + 0x80, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x98, 0x95, 0x94, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, /* 0xf0-0xf7 */ +}; +static const unsigned char cp864_page06[104] = { + 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x60-0x67 */ + 0xb8, 0xb9, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ +}; +static const unsigned char cp864_page22[56] = { + 0x00, 0x82, 0x83, 0x00, 0x00, 0x00, 0x91, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ +}; +static const unsigned char cp864_page25[64] = { + 0x85, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x8c, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x8f, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; +static const unsigned char cp864_pagefe[136] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, /* 0x78-0x7f */ + 0xc1, 0xc2, 0xa2, 0xc3, 0xa5, 0xc4, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0xc6, 0x00, 0xc7, 0xa8, 0xa9, /* 0x88-0x8f */ + 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xaa, 0x00, 0xca, /* 0x90-0x97 */ + 0x00, 0xab, 0x00, 0xcb, 0x00, 0xad, 0x00, 0xcc, /* 0x98-0x9f */ + 0x00, 0xae, 0x00, 0xcd, 0x00, 0xaf, 0x00, 0xce, /* 0xa0-0xa7 */ + 0x00, 0xcf, 0x00, 0xd0, 0x00, 0xd1, 0x00, 0xd2, /* 0xa8-0xaf */ + 0x00, 0xbc, 0x00, 0xd3, 0x00, 0xbd, 0x00, 0xd4, /* 0xb0-0xb7 */ + 0x00, 0xbe, 0x00, 0xd5, 0x00, 0xeb, 0x00, 0xd6, /* 0xb8-0xbf */ + 0x00, 0xd7, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0xdf, 0xc5, 0xd9, 0xec, 0xee, 0xed, 0xda, /* 0xc8-0xcf */ + 0xf7, 0xba, 0x00, 0xe1, 0x00, 0xf8, 0x00, 0xe2, /* 0xd0-0xd7 */ + 0x00, 0xfc, 0x00, 0xe3, 0x00, 0xfb, 0x00, 0xe4, /* 0xd8-0xdf */ + 0x00, 0xef, 0x00, 0xe5, 0x00, 0xf2, 0x00, 0xe6, /* 0xe0-0xe7 */ + 0x00, 0xf3, 0x00, 0xe7, 0xf4, 0xe8, 0x00, 0xe9, /* 0xe8-0xef */ + 0xf5, 0xfd, 0xf6, 0xea, 0x00, 0xf9, 0xfa, 0x99, /* 0xf0-0xf7 */ + 0x9a, 0x00, 0x00, 0x9d, 0x9e, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static int +cp864_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0020) { + *r = wc; + return 1; + } + else if (wc >= 0x0020 && wc < 0x0028) + c = cp864_page00[wc-0x0020]; + else if (wc >= 0x0028 && wc < 0x0080) + c = wc; + else if (wc >= 0x00a0 && wc < 0x00f8) + c = cp864_page00_1[wc-0x00a0]; + else if (wc == 0x03b2) + c = 0x90; + else if (wc == 0x03c6) + c = 0x92; + else if (wc >= 0x0608 && wc < 0x0670) + c = cp864_page06[wc-0x0608]; + else if (wc >= 0x2218 && wc < 0x2250) + c = cp864_page22[wc-0x2218]; + else if (wc >= 0x2500 && wc < 0x2540) + c = cp864_page25[wc-0x2500]; + else if (wc == 0x2592) + c = 0x84; + else if (wc == 0x25a0) + c = 0xfe; + else if (wc >= 0xfe78 && wc < 0xff00) + c = cp864_pagefe[wc-0xfe78]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp865.h b/jni/parted/libiconv/lib/cp865.h new file mode 100755 index 0000000..d0476e1 --- /dev/null +++ b/jni/parted/libiconv/lib/cp865.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP865 + */ + +static const unsigned short cp865_2uni[128] = { + /* 0x80 */ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, + /* 0x90 */ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x20a7, 0x0192, + /* 0xa0 */ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00a4, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0 */ + 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static int +cp865_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp865_2uni[c-0x80]; + return 1; +} + +static const unsigned char cp865_page00[96] = { + 0xff, 0xad, 0x00, 0x9c, 0xaf, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa6, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xa7, 0x00, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, /* 0xd0-0xd7 */ + 0x9d, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0x00, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0x00, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0x98, /* 0xf8-0xff */ +}; +static const unsigned char cp865_page03[56] = { + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; +static const unsigned char cp865_page22[80] = { + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char cp865_page23[24] = { + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char cp865_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp865_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = cp865_page00[wc-0x00a0]; + else if (wc == 0x0192) + c = 0x9f; + else if (wc >= 0x0390 && wc < 0x03c8) + c = cp865_page03[wc-0x0390]; + else if (wc == 0x207f) + c = 0xfc; + else if (wc == 0x20a7) + c = 0x9e; + else if (wc >= 0x2218 && wc < 0x2268) + c = cp865_page22[wc-0x2218]; + else if (wc >= 0x2310 && wc < 0x2328) + c = cp865_page23[wc-0x2310]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp865_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp866.h b/jni/parted/libiconv/lib/cp866.h new file mode 100755 index 0000000..71548cb --- /dev/null +++ b/jni/parted/libiconv/lib/cp866.h @@ -0,0 +1,124 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP866 + */ + +static const unsigned short cp866_2uni[80] = { + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + /* 0xf0 */ + 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0, +}; + +static int +cp866_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else if (c < 0xb0) + *pwc = (ucs4_t) c + 0x0390; + else + *pwc = (ucs4_t) cp866_2uni[c-0xb0]; + return 1; +} + +static const unsigned char cp866_page00[24] = { + 0xff, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, /* 0xb0-0xb7 */ +}; +static const unsigned char cp866_page04[96] = { + 0x00, 0xf0, 0x00, 0x00, 0xf2, 0x00, 0x00, 0xf4, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, /* 0x08-0x0f */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x10-0x17 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x18-0x1f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x20-0x27 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x28-0x2f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x30-0x37 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0x00, 0xf1, 0x00, 0x00, 0xf3, 0x00, 0x00, 0xf5, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, /* 0x58-0x5f */ +}; +static const unsigned char cp866_page22[8] = { + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; +static const unsigned char cp866_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp866_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00b8) + c = cp866_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0460) + c = cp866_page04[wc-0x0400]; + else if (wc == 0x2116) + c = 0xfc; + else if (wc >= 0x2218 && wc < 0x2220) + c = cp866_page22[wc-0x2218]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp866_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp869.h b/jni/parted/libiconv/lib/cp869.h new file mode 100755 index 0000000..4df05a1 --- /dev/null +++ b/jni/parted/libiconv/lib/cp869.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP869 + */ + +static const unsigned short cp869_2uni[128] = { + /* 0x80 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0386, 0xfffd, + 0x00b7, 0x00ac, 0x00a6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389, + /* 0x90 */ + 0x038a, 0x03aa, 0x038c, 0xfffd, 0xfffd, 0x038e, 0x03ab, 0x00a9, + 0x038f, 0x00b2, 0x00b3, 0x03ac, 0x00a3, 0x03ad, 0x03ae, 0x03af, + /* 0xa0 */ + 0x03ca, 0x0390, 0x03cc, 0x03cd, 0x0391, 0x0392, 0x0393, 0x0394, + 0x0395, 0x0396, 0x0397, 0x00bd, 0x0398, 0x0399, 0x00ab, 0x00bb, + /* 0xb0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039a, 0x039b, 0x039c, + 0x039d, 0x2563, 0x2551, 0x2557, 0x255d, 0x039e, 0x039f, 0x2510, + /* 0xc0 */ + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x03a0, 0x03a1, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x03a3, + /* 0xd0 */ + 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, + 0x03b3, 0x2518, 0x250c, 0x2588, 0x2584, 0x03b4, 0x03b5, 0x2580, + /* 0xe0 */ + 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, + 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x0384, + /* 0xf0 */ + 0x00ad, 0x00b1, 0x03c5, 0x03c6, 0x03c7, 0x00a7, 0x03c8, 0x0385, + 0x00b0, 0x00a8, 0x03c9, 0x03cb, 0x03b0, 0x03ce, 0x25a0, 0x00a0, +}; + +static int +cp869_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp869_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp869_page00[32] = { + 0xff, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x8a, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0x97, 0x00, 0xae, 0x89, 0xf0, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0x99, 0x9a, 0x00, 0x00, 0x00, 0x88, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xaf, 0x00, 0xab, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char cp869_page03[80] = { + 0x00, 0x00, 0x00, 0x00, 0xef, 0xf7, 0x86, 0x00, /* 0x80-0x87 */ + 0x8d, 0x8f, 0x90, 0x00, 0x92, 0x00, 0x95, 0x98, /* 0x88-0x8f */ + 0xa1, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, /* 0x90-0x97 */ + 0xac, 0xad, 0xb5, 0xb6, 0xb7, 0xb8, 0xbd, 0xbe, /* 0x98-0x9f */ + 0xc6, 0xc7, 0x00, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, /* 0xa0-0xa7 */ + 0xd4, 0xd5, 0x91, 0x96, 0x9b, 0x9d, 0x9e, 0x9f, /* 0xa8-0xaf */ + 0xfc, 0xd6, 0xd7, 0xd8, 0xdd, 0xde, 0xe0, 0xe1, /* 0xb0-0xb7 */ + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, /* 0xb8-0xbf */ + 0xea, 0xeb, 0xed, 0xec, 0xee, 0xf2, 0xf3, 0xf4, /* 0xc0-0xc7 */ + 0xf6, 0xfa, 0xa0, 0xfb, 0xa2, 0xa3, 0xfd, 0x00, /* 0xc8-0xcf */ +}; +static const unsigned char cp869_page20[16] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, /* 0x10-0x17 */ + 0x8b, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; +static const unsigned char cp869_page25[168] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +cp869_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = cp869_page00[wc-0x00a0]; + else if (wc >= 0x0380 && wc < 0x03d0) + c = cp869_page03[wc-0x0380]; + else if (wc >= 0x2010 && wc < 0x2020) + c = cp869_page20[wc-0x2010]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = cp869_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp874.h b/jni/parted/libiconv/lib/cp874.h new file mode 100755 index 0000000..0655337 --- /dev/null +++ b/jni/parted/libiconv/lib/cp874.h @@ -0,0 +1,110 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP874 + */ + +static const unsigned short cp874_2uni[128] = { + /* 0x80 */ + 0x20ac, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2026, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x90 */ + 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xa0 */ + 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, + 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, + /* 0xb0 */ + 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, + 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, + /* 0xc0 */ + 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, + 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, + /* 0xd0 */ + 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, + 0x0e38, 0x0e39, 0x0e3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e3f, + /* 0xe0 */ + 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, + 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, + /* 0xf0 */ + 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, + 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, +}; + +static int +cp874_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = cp874_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char cp874_page0e[96] = { + 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ +}; +static const unsigned char cp874_page20[24] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x00, 0x00, 0x93, 0x94, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ +}; + +static int +cp874_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc == 0x00a0) + c = 0xa0; + else if (wc >= 0x0e00 && wc < 0x0e60) + c = cp874_page0e[wc-0x0e00]; + else if (wc >= 0x2010 && wc < 0x2028) + c = cp874_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0x80; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp922.h b/jni/parted/libiconv/lib/cp922.h new file mode 100755 index 0000000..3f4c143 --- /dev/null +++ b/jni/parted/libiconv/lib/cp922.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP922 + */ + +static const unsigned short cp922_2uni_1[16] = { + /* 0xa0 */ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x203e, +}; +static const unsigned short cp922_2uni_2[16] = { + /* 0xd0 */ + 0x0160, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x017d, 0x00df, +}; +static const unsigned short cp922_2uni_3[16] = { + /* 0xf0 */ + 0x0161, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x017e, 0x00ff, +}; + +static int +cp922_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else if (c < 0xb0) + *pwc = (ucs4_t) cp922_2uni_1[c-0xa0]; + else if (c < 0xd0) + *pwc = (ucs4_t) c; + else if (c < 0xe0) + *pwc = (ucs4_t) cp922_2uni_2[c-0xd0]; + else if (c < 0xf0) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) cp922_2uni_3[c-0xf0]; + return 1; +} + +static const unsigned char cp922_page00[88] = { + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x00, 0xff, /* 0xf8-0xff */ +}; +static const unsigned char cp922_page01[32] = { + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, 0x00, /* 0x78-0x7f */ +}; + +static int +cp922_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a8) { + *r = wc; + return 1; + } + else if (wc >= 0x00a8 && wc < 0x0100) + c = cp922_page00[wc-0x00a8]; + else if (wc >= 0x0160 && wc < 0x0180) + c = cp922_page01[wc-0x0160]; + else if (wc == 0x203e) + c = 0xaf; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp932.h b/jni/parted/libiconv/lib/cp932.h new file mode 100755 index 0000000..24c258f --- /dev/null +++ b/jni/parted/libiconv/lib/cp932.h @@ -0,0 +1,239 @@ +/* + * Copyright (C) 1999-2002, 2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP932 + */ + +/* + * Microsoft CP932 is a slightly extended version of SHIFT_JIS. + * The differences between the EASTASIA/JIS/SHIFTJIS.TXT and the + * VENDORS/MICSFT/WINDOWS/CP932.TXT tables found on ftp.unicode.org are + * as follows: + * + * 1. CP932 uses ASCII, not JISX0201 Roman. + * + * 2. Some characters in the JISX0208 range are defined differently: + * + * code SHIFTJIS.TXT CP932.TXT + * 0x815F 0x005C # REVERSE SOLIDUS 0xFF3C # FULLWIDTH REVERSE SOLIDUS + * 0x8160 0x301C # WAVE DASH 0xFF5E # FULLWIDTH TILDE + * 0x8161 0x2016 # DOUBLE VERTICAL LINE 0x2225 # PARALLEL TO + * 0x817C 0x2212 # MINUS SIGN 0xFF0D # FULLWIDTH HYPHEN-MINUS + * 0x8191 0x00A2 # CENT SIGN 0xFFE0 # FULLWIDTH CENT SIGN + * 0x8192 0x00A3 # POUND SIGN 0xFFE1 # FULLWIDTH POUND SIGN + * 0x81CA 0x00AC # NOT SIGN 0xFFE2 # FULLWIDTH NOT SIGN + * + * We don't implement the latter 6 of these changes, only the first one. + * SHIFTJIS.TXT makes more sense. However, as a compromise with user + * expectation, we implement the middle 5 of these changes in the + * Unicode to CP932 direction. We don't implement the last one at all, + * because it would collide with the mapping of 0xFA54. + * + * 3. A few new rows. See cp932ext.h. + * + * Many variants of CP932 (in GNU libc, JDK, OSF/1, Windows-2000, ICU) also + * add: + * + * 4. Private area mappings: + * + * code Unicode + * 0x{F0..F9}{40..7E,80..FC} U+E000..U+E757 + * + * We add them too because, although there are backward compatibility problems + * when a character from a private area is moved to an official Unicode code + * point, they are useful for some people in practice. + */ + +#include "cp932ext.h" + +/* + Conversion between SJIS codes (s1,s2) and JISX0208 codes (c1,c2): + Example. (s1,s2) = 0x8140, (c1,c2) = 0x2121. + 0x81 <= s1 <= 0x9F || 0xE0 <= s1 <= 0xEA, + 0x40 <= s2 <= 0x7E || 0x80 <= s2 <= 0xFC, + 0x21 <= c1 <= 0x74, 0x21 <= c2 <= 0x7E. + Invariant: + 94*2*(s1 < 0xE0 ? s1-0x81 : s1-0xC1) + (s2 < 0x80 ? s2-0x40 : s2-0x41) + = 94*(c1-0x21)+(c2-0x21) + Conversion (s1,s2) -> (c1,c2): + t1 := (s1 < 0xE0 ? s1-0x81 : s1-0xC1) + t2 := (s2 < 0x80 ? s2-0x40 : s2-0x41) + c1 := 2*t1 + (t2 < 0x5E ? 0 : 1) + 0x21 + c2 := (t2 < 0x5E ? t2 : t2-0x5E) + 0x21 + Conversion (c1,c2) -> (s1,s2): + t1 := (c1 - 0x21) >> 1 + t2 := ((c1 - 0x21) & 1) * 0x5E + (c2 - 0x21) + s1 := (t1 < 0x1F ? t1+0x81 : t1+0xC1) + s2 := (t2 < 0x3F ? t2+0x40 : t2+0x41) + */ + +static int +cp932_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + else if (c >= 0xa1 && c <= 0xdf) + return jisx0201_mbtowc(conv,pwc,s,n); + else { + unsigned char s1, s2; + s1 = c; + if ((s1 >= 0x81 && s1 <= 0x9f && s1 != 0x87) || (s1 >= 0xe0 && s1 <= 0xea)) { + if (n < 2) + return RET_TOOFEW(0); + s2 = s[1]; + if ((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0x80 && s2 <= 0xfc)) { + unsigned char t1 = (s1 < 0xe0 ? s1-0x81 : s1-0xc1); + unsigned char t2 = (s2 < 0x80 ? s2-0x40 : s2-0x41); + unsigned char buf[2]; + buf[0] = 2*t1 + (t2 < 0x5e ? 0 : 1) + 0x21; + buf[1] = (t2 < 0x5e ? t2 : t2-0x5e) + 0x21; + return jisx0208_mbtowc(conv,pwc,buf,2); + } + } else if ((s1 == 0x87) || (s1 >= 0xed && s1 <= 0xee) || (s1 >= 0xfa)) { + if (n < 2) + return RET_TOOFEW(0); + return cp932ext_mbtowc(conv,pwc,s,2); + } else if (s1 >= 0xf0 && s1 <= 0xf9) { + /* User-defined range. See + * Ken Lunde's "CJKV Information Processing", table 4-66, p. 206. */ + if (n < 2) + return RET_TOOFEW(0); + s2 = s[1]; + if ((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0x80 && s2 <= 0xfc)) { + *pwc = 0xe000 + 188*(s1 - 0xf0) + (s2 < 0x80 ? s2-0x40 : s2-0x41); + return 2; + } + } + return RET_ILSEQ; + } +} + +static int +cp932_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Try ASCII. */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + unsigned char c; + if (ret != 1) abort(); + c = buf[0]; + if (c < 0x80) { + r[0] = c; + return 1; + } + } + + /* Try JIS X 0201-1976 Katakana. */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + unsigned char c; + if (ret != 1) abort(); + c = buf[0]; + if (c >= 0xa1 && c <= 0xdf) { + r[0] = c; + return 1; + } + } + + /* Try JIS X 0208-1990. */ + ret = jisx0208_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + unsigned char c1, c2; + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + c1 = buf[0]; + c2 = buf[1]; + if ((c1 >= 0x21 && c1 <= 0x74) && (c2 >= 0x21 && c2 <= 0x7e)) { + unsigned char t1 = (c1 - 0x21) >> 1; + unsigned char t2 = (((c1 - 0x21) & 1) ? 0x5e : 0) + (c2 - 0x21); + r[0] = (t1 < 0x1f ? t1+0x81 : t1+0xc1); + r[1] = (t2 < 0x3f ? t2+0x40 : t2+0x41); + return 2; + } + } + + /* Try CP932 extensions. */ + ret = cp932ext_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + + /* User-defined range. See + * Ken Lunde's "CJKV Information Processing", table 4-66, p. 206. */ + if (wc >= 0xe000 && wc < 0xe758) { + unsigned char c1, c2; + if (n < 2) + return RET_TOOSMALL; + c1 = (unsigned int) (wc - 0xe000) / 188; + c2 = (unsigned int) (wc - 0xe000) % 188; + r[0] = c1+0xf0; + r[1] = (c2 < 0x3f ? c2+0x40 : c2+0x41); + return 2; + } + + /* Irreversible mappings. */ + if (wc == 0xff5e) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x81; + r[1] = 0x60; + return 2; + } + if (wc == 0x2225) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x81; + r[1] = 0x61; + return 2; + } + if (wc == 0xff0d) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x81; + r[1] = 0x7c; + return 2; + } + if (wc == 0xffe0) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x81; + r[1] = 0x91; + return 2; + } + if (wc == 0xffe1) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x81; + r[1] = 0x92; + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp932ext.h b/jni/parted/libiconv/lib/cp932ext.h new file mode 100755 index 0000000..854572c --- /dev/null +++ b/jni/parted/libiconv/lib/cp932ext.h @@ -0,0 +1,708 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP932 extensions + */ + +static const unsigned short cp932ext_2uni_page87[92] = { + /* 0x87 */ + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, + 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, + 0x2470, 0x2471, 0x2472, 0x2473, 0x2160, 0x2161, 0x2162, 0x2163, + 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0xfffd, 0x3349, + 0x3314, 0x3322, 0x334d, 0x3318, 0x3327, 0x3303, 0x3336, 0x3351, + 0x3357, 0x330d, 0x3326, 0x3323, 0x332b, 0x334a, 0x333b, 0x339c, + 0x339d, 0x339e, 0x338e, 0x338f, 0x33c4, 0x33a1, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x337b, 0x301d, + 0x301f, 0x2116, 0x33cd, 0x2121, 0x32a4, 0x32a5, 0x32a6, 0x32a7, + 0x32a8, 0x3231, 0x3232, 0x3239, 0x337e, 0x337d, 0x337c, 0x2252, + 0x2261, 0x222b, 0x222e, 0x2211, 0x221a, 0x22a5, 0x2220, 0x221f, + 0x22bf, 0x2235, 0x2229, 0x222a, +}; +static const unsigned short cp932ext_2uni_pageed[376] = { + /* 0xed */ + 0x7e8a, 0x891c, 0x9348, 0x9288, 0x84dc, 0x4fc9, 0x70bb, 0x6631, + 0x68c8, 0x92f9, 0x66fb, 0x5f45, 0x4e28, 0x4ee1, 0x4efc, 0x4f00, + 0x4f03, 0x4f39, 0x4f56, 0x4f92, 0x4f8a, 0x4f9a, 0x4f94, 0x4fcd, + 0x5040, 0x5022, 0x4fff, 0x501e, 0x5046, 0x5070, 0x5042, 0x5094, + 0x50f4, 0x50d8, 0x514a, 0x5164, 0x519d, 0x51be, 0x51ec, 0x5215, + 0x529c, 0x52a6, 0x52c0, 0x52db, 0x5300, 0x5307, 0x5324, 0x5372, + 0x5393, 0x53b2, 0x53dd, 0xfa0e, 0x549c, 0x548a, 0x54a9, 0x54ff, + 0x5586, 0x5759, 0x5765, 0x57ac, 0x57c8, 0x57c7, 0xfa0f, 0xfa10, + 0x589e, 0x58b2, 0x590b, 0x5953, 0x595b, 0x595d, 0x5963, 0x59a4, + 0x59ba, 0x5b56, 0x5bc0, 0x752f, 0x5bd8, 0x5bec, 0x5c1e, 0x5ca6, + 0x5cba, 0x5cf5, 0x5d27, 0x5d53, 0xfa11, 0x5d42, 0x5d6d, 0x5db8, + 0x5db9, 0x5dd0, 0x5f21, 0x5f34, 0x5f67, 0x5fb7, 0x5fde, 0x605d, + 0x6085, 0x608a, 0x60de, 0x60d5, 0x6120, 0x60f2, 0x6111, 0x6137, + 0x6130, 0x6198, 0x6213, 0x62a6, 0x63f5, 0x6460, 0x649d, 0x64ce, + 0x654e, 0x6600, 0x6615, 0x663b, 0x6609, 0x662e, 0x661e, 0x6624, + 0x6665, 0x6657, 0x6659, 0xfa12, 0x6673, 0x6699, 0x66a0, 0x66b2, + 0x66bf, 0x66fa, 0x670e, 0xf929, 0x6766, 0x67bb, 0x6852, 0x67c0, + 0x6801, 0x6844, 0x68cf, 0xfa13, 0x6968, 0xfa14, 0x6998, 0x69e2, + 0x6a30, 0x6a6b, 0x6a46, 0x6a73, 0x6a7e, 0x6ae2, 0x6ae4, 0x6bd6, + 0x6c3f, 0x6c5c, 0x6c86, 0x6c6f, 0x6cda, 0x6d04, 0x6d87, 0x6d6f, + 0x6d96, 0x6dac, 0x6dcf, 0x6df8, 0x6df2, 0x6dfc, 0x6e39, 0x6e5c, + 0x6e27, 0x6e3c, 0x6ebf, 0x6f88, 0x6fb5, 0x6ff5, 0x7005, 0x7007, + 0x7028, 0x7085, 0x70ab, 0x710f, 0x7104, 0x715c, 0x7146, 0x7147, + 0xfa15, 0x71c1, 0x71fe, 0x72b1, + /* 0xee */ + 0x72be, 0x7324, 0xfa16, 0x7377, 0x73bd, 0x73c9, 0x73d6, 0x73e3, + 0x73d2, 0x7407, 0x73f5, 0x7426, 0x742a, 0x7429, 0x742e, 0x7462, + 0x7489, 0x749f, 0x7501, 0x756f, 0x7682, 0x769c, 0x769e, 0x769b, + 0x76a6, 0xfa17, 0x7746, 0x52af, 0x7821, 0x784e, 0x7864, 0x787a, + 0x7930, 0xfa18, 0xfa19, 0xfa1a, 0x7994, 0xfa1b, 0x799b, 0x7ad1, + 0x7ae7, 0xfa1c, 0x7aeb, 0x7b9e, 0xfa1d, 0x7d48, 0x7d5c, 0x7db7, + 0x7da0, 0x7dd6, 0x7e52, 0x7f47, 0x7fa1, 0xfa1e, 0x8301, 0x8362, + 0x837f, 0x83c7, 0x83f6, 0x8448, 0x84b4, 0x8553, 0x8559, 0x856b, + 0xfa1f, 0x85b0, 0xfa20, 0xfa21, 0x8807, 0x88f5, 0x8a12, 0x8a37, + 0x8a79, 0x8aa7, 0x8abe, 0x8adf, 0xfa22, 0x8af6, 0x8b53, 0x8b7f, + 0x8cf0, 0x8cf4, 0x8d12, 0x8d76, 0xfa23, 0x8ecf, 0xfa24, 0xfa25, + 0x9067, 0x90de, 0xfa26, 0x9115, 0x9127, 0x91da, 0x91d7, 0x91de, + 0x91ed, 0x91ee, 0x91e4, 0x91e5, 0x9206, 0x9210, 0x920a, 0x923a, + 0x9240, 0x923c, 0x924e, 0x9259, 0x9251, 0x9239, 0x9267, 0x92a7, + 0x9277, 0x9278, 0x92e7, 0x92d7, 0x92d9, 0x92d0, 0xfa27, 0x92d5, + 0x92e0, 0x92d3, 0x9325, 0x9321, 0x92fb, 0xfa28, 0x931e, 0x92ff, + 0x931d, 0x9302, 0x9370, 0x9357, 0x93a4, 0x93c6, 0x93de, 0x93f8, + 0x9431, 0x9445, 0x9448, 0x9592, 0xf9dc, 0xfa29, 0x969d, 0x96af, + 0x9733, 0x973b, 0x9743, 0x974d, 0x974f, 0x9751, 0x9755, 0x9857, + 0x9865, 0xfa2a, 0xfa2b, 0x9927, 0xfa2c, 0x999e, 0x9a4e, 0x9ad9, + 0x9adc, 0x9b75, 0x9b72, 0x9b8f, 0x9bb1, 0x9bbb, 0x9c00, 0x9d70, + 0x9d6b, 0xfa2d, 0x9e19, 0x9ed1, 0xfffd, 0xfffd, 0x2170, 0x2171, + 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, + 0xffe2, 0xffe4, 0xff07, 0xff02, +}; +static const unsigned short cp932ext_2uni_pagefa[388] = { + /* 0xfa */ + 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, + 0x2178, 0x2179, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, + 0x2166, 0x2167, 0x2168, 0x2169, 0xffe2, 0xffe4, 0xff07, 0xff02, + 0x3231, 0x2116, 0x2121, 0x2235, 0x7e8a, 0x891c, 0x9348, 0x9288, + 0x84dc, 0x4fc9, 0x70bb, 0x6631, 0x68c8, 0x92f9, 0x66fb, 0x5f45, + 0x4e28, 0x4ee1, 0x4efc, 0x4f00, 0x4f03, 0x4f39, 0x4f56, 0x4f92, + 0x4f8a, 0x4f9a, 0x4f94, 0x4fcd, 0x5040, 0x5022, 0x4fff, 0x501e, + 0x5046, 0x5070, 0x5042, 0x5094, 0x50f4, 0x50d8, 0x514a, 0x5164, + 0x519d, 0x51be, 0x51ec, 0x5215, 0x529c, 0x52a6, 0x52c0, 0x52db, + 0x5300, 0x5307, 0x5324, 0x5372, 0x5393, 0x53b2, 0x53dd, 0xfa0e, + 0x549c, 0x548a, 0x54a9, 0x54ff, 0x5586, 0x5759, 0x5765, 0x57ac, + 0x57c8, 0x57c7, 0xfa0f, 0xfa10, 0x589e, 0x58b2, 0x590b, 0x5953, + 0x595b, 0x595d, 0x5963, 0x59a4, 0x59ba, 0x5b56, 0x5bc0, 0x752f, + 0x5bd8, 0x5bec, 0x5c1e, 0x5ca6, 0x5cba, 0x5cf5, 0x5d27, 0x5d53, + 0xfa11, 0x5d42, 0x5d6d, 0x5db8, 0x5db9, 0x5dd0, 0x5f21, 0x5f34, + 0x5f67, 0x5fb7, 0x5fde, 0x605d, 0x6085, 0x608a, 0x60de, 0x60d5, + 0x6120, 0x60f2, 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, 0x62a6, + 0x63f5, 0x6460, 0x649d, 0x64ce, 0x654e, 0x6600, 0x6615, 0x663b, + 0x6609, 0x662e, 0x661e, 0x6624, 0x6665, 0x6657, 0x6659, 0xfa12, + 0x6673, 0x6699, 0x66a0, 0x66b2, 0x66bf, 0x66fa, 0x670e, 0xf929, + 0x6766, 0x67bb, 0x6852, 0x67c0, 0x6801, 0x6844, 0x68cf, 0xfa13, + 0x6968, 0xfa14, 0x6998, 0x69e2, 0x6a30, 0x6a6b, 0x6a46, 0x6a73, + 0x6a7e, 0x6ae2, 0x6ae4, 0x6bd6, 0x6c3f, 0x6c5c, 0x6c86, 0x6c6f, + 0x6cda, 0x6d04, 0x6d87, 0x6d6f, + /* 0xfb */ + 0x6d96, 0x6dac, 0x6dcf, 0x6df8, 0x6df2, 0x6dfc, 0x6e39, 0x6e5c, + 0x6e27, 0x6e3c, 0x6ebf, 0x6f88, 0x6fb5, 0x6ff5, 0x7005, 0x7007, + 0x7028, 0x7085, 0x70ab, 0x710f, 0x7104, 0x715c, 0x7146, 0x7147, + 0xfa15, 0x71c1, 0x71fe, 0x72b1, 0x72be, 0x7324, 0xfa16, 0x7377, + 0x73bd, 0x73c9, 0x73d6, 0x73e3, 0x73d2, 0x7407, 0x73f5, 0x7426, + 0x742a, 0x7429, 0x742e, 0x7462, 0x7489, 0x749f, 0x7501, 0x756f, + 0x7682, 0x769c, 0x769e, 0x769b, 0x76a6, 0xfa17, 0x7746, 0x52af, + 0x7821, 0x784e, 0x7864, 0x787a, 0x7930, 0xfa18, 0xfa19, 0xfa1a, + 0x7994, 0xfa1b, 0x799b, 0x7ad1, 0x7ae7, 0xfa1c, 0x7aeb, 0x7b9e, + 0xfa1d, 0x7d48, 0x7d5c, 0x7db7, 0x7da0, 0x7dd6, 0x7e52, 0x7f47, + 0x7fa1, 0xfa1e, 0x8301, 0x8362, 0x837f, 0x83c7, 0x83f6, 0x8448, + 0x84b4, 0x8553, 0x8559, 0x856b, 0xfa1f, 0x85b0, 0xfa20, 0xfa21, + 0x8807, 0x88f5, 0x8a12, 0x8a37, 0x8a79, 0x8aa7, 0x8abe, 0x8adf, + 0xfa22, 0x8af6, 0x8b53, 0x8b7f, 0x8cf0, 0x8cf4, 0x8d12, 0x8d76, + 0xfa23, 0x8ecf, 0xfa24, 0xfa25, 0x9067, 0x90de, 0xfa26, 0x9115, + 0x9127, 0x91da, 0x91d7, 0x91de, 0x91ed, 0x91ee, 0x91e4, 0x91e5, + 0x9206, 0x9210, 0x920a, 0x923a, 0x9240, 0x923c, 0x924e, 0x9259, + 0x9251, 0x9239, 0x9267, 0x92a7, 0x9277, 0x9278, 0x92e7, 0x92d7, + 0x92d9, 0x92d0, 0xfa27, 0x92d5, 0x92e0, 0x92d3, 0x9325, 0x9321, + 0x92fb, 0xfa28, 0x931e, 0x92ff, 0x931d, 0x9302, 0x9370, 0x9357, + 0x93a4, 0x93c6, 0x93de, 0x93f8, 0x9431, 0x9445, 0x9448, 0x9592, + 0xf9dc, 0xfa29, 0x969d, 0x96af, 0x9733, 0x973b, 0x9743, 0x974d, + 0x974f, 0x9751, 0x9755, 0x9857, 0x9865, 0xfa2a, 0xfa2b, 0x9927, + 0xfa2c, 0x999e, 0x9a4e, 0x9ad9, + /* 0xfc */ + 0x9adc, 0x9b75, 0x9b72, 0x9b8f, 0x9bb1, 0x9bbb, 0x9c00, 0x9d70, + 0x9d6b, 0xfa2d, 0x9e19, 0x9ed1, +}; + +static int +cp932ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 == 0x87) || (c1 >= 0xed && c1 <= 0xee) || (c1 >= 0xfa && c1 <= 0xfc)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0x80 && c2 < 0xfd)) { + unsigned int i = 188 * (c1 - (c1 >= 0xe0 ? 0xc1 : 0x81)) + (c2 - (c2 >= 0x80 ? 0x41 : 0x40)); + unsigned short wc = 0xfffd; + if (i < 8272) { + if (i < 1220) + wc = cp932ext_2uni_page87[i-1128]; + } else if (i < 10716) { + if (i < 8648) + wc = cp932ext_2uni_pageed[i-8272]; + } else { + if (i < 11104) + wc = cp932ext_2uni_pagefa[i-10716]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short cp932ext_2charset[457] = { + 0xfa59, 0xfa5a, 0xfa4a, 0xfa4b, 0xfa4c, 0xfa4d, 0xfa4e, 0xfa4f, + 0xfa50, 0xfa51, 0xfa52, 0xfa53, 0xfa40, 0xfa41, 0xfa42, 0xfa43, + 0xfa44, 0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, 0x8794, 0x8795, + 0x8798, 0x8797, 0x879b, 0x879c, 0x8792, 0x8793, 0xfa5b, 0x8790, + 0x8791, 0x8796, 0x8799, 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, + 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, + 0x874d, 0x874e, 0x874f, 0x8750, 0x8751, 0x8752, 0x8753, 0x8780, + 0x8781, 0xfa58, 0x878b, 0x878c, 0x8785, 0x8786, 0x8787, 0x8788, + 0x8789, 0x8765, 0x8769, 0x8760, 0x8763, 0x8761, 0x876b, 0x876a, + 0x8764, 0x876c, 0x8766, 0x876e, 0x875f, 0x876d, 0x8762, 0x8767, + 0x8768, 0x877e, 0x878f, 0x878e, 0x878d, 0x8772, 0x8773, 0x876f, + 0x8770, 0x8771, 0x8775, 0x8774, 0x8783, 0xfa68, 0xfa69, 0xfa6a, + 0xfa6b, 0xfa6c, 0xfa6d, 0xfa6e, 0xfa70, 0xfa6f, 0xfa72, 0xfa71, + 0xfa61, 0xfa73, 0xfa76, 0xfa77, 0xfa75, 0xfa74, 0xfa7a, 0xfa78, + 0xfa79, 0xfa7b, 0xfa7d, 0xfa7c, 0xfa7e, 0xfa80, 0xfa81, 0xfa82, + 0xfa83, 0xfa84, 0xfa85, 0xfa86, 0xfb77, 0xfa87, 0xfa88, 0xfa89, + 0xfa8a, 0xfa8b, 0xfa8c, 0xfa8d, 0xfa8e, 0xfa8f, 0xfa92, 0xfa91, + 0xfa93, 0xfa94, 0xfa95, 0xfa96, 0xfa97, 0xfa98, 0xfa9a, 0xfa99, + 0xfa9d, 0xfa9e, 0xfa9f, 0xfaa0, 0xfaa1, 0xfaa2, 0xfaa3, 0xfaa4, + 0xfaa5, 0xfaa6, 0xfaa7, 0xfaa9, 0xfaaa, 0xfaab, 0xfaac, 0xfaad, + 0xfaae, 0xfaaf, 0xfab2, 0xfab0, 0xfab3, 0xfab4, 0xfab5, 0xfab6, + 0xfab7, 0xfab8, 0xfa67, 0xfab9, 0xfaba, 0xfabb, 0xfabc, 0xfabd, + 0xfabe, 0xfac0, 0xfabf, 0xfac2, 0xfac3, 0xfac1, 0xfac5, 0xfac4, + 0xfac6, 0xfac7, 0xfac8, 0xfac9, 0xfaca, 0xfacb, 0xfacc, 0xfacd, + 0xface, 0xfad1, 0xfacf, 0xfad3, 0xfad4, 0xfad2, 0xfa63, 0xfad0, + 0xfad6, 0xfad7, 0xfad5, 0xfad9, 0xfada, 0xfadb, 0xfadc, 0xfadd, + 0xfade, 0xfa66, 0xfadf, 0xfae1, 0xfae2, 0xfae4, 0xfae5, 0xfae6, + 0xfae3, 0xfa64, 0xfae7, 0xfae9, 0xfaeb, 0xfaec, 0xfaed, 0xfaef, + 0xfaee, 0xfaf0, 0xfaf1, 0xfaf2, 0xfaf3, 0xfaf4, 0xfaf5, 0xfaf6, + 0xfaf8, 0xfaf7, 0xfaf9, 0xfafa, 0xfafc, 0xfafb, 0xfb40, 0xfb41, + 0xfb42, 0xfb44, 0xfb43, 0xfb45, 0xfb48, 0xfb46, 0xfb49, 0xfb47, + 0xfb4a, 0xfb4b, 0xfb4c, 0xfb4d, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51, + 0xfb52, 0xfa62, 0xfb54, 0xfb53, 0xfb56, 0xfb57, 0xfb55, 0xfb59, + 0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d, 0xfb5f, 0xfb60, 0xfb61, 0xfb64, + 0xfb62, 0xfb63, 0xfb66, 0xfb65, 0xfb67, 0xfb69, 0xfb68, 0xfb6a, + 0xfb6b, 0xfb6c, 0xfb6d, 0xfb6e, 0xfaa8, 0xfb6f, 0xfb70, 0xfb73, + 0xfb71, 0xfb72, 0xfb74, 0xfb76, 0xfb78, 0xfb79, 0xfb7a, 0xfb7b, + 0xfb7c, 0xfb81, 0xfb83, 0xfb84, 0xfb85, 0xfb87, 0xfb88, 0xfb8a, + 0xfb8b, 0xfb8d, 0xfb8c, 0xfb8e, 0xfb8f, 0xfa5c, 0xfb90, 0xfb91, + 0xfb93, 0xfb94, 0xfb95, 0xfb96, 0xfb97, 0xfb98, 0xfb99, 0xfa60, + 0xfb9a, 0xfb9b, 0xfb9c, 0xfb9e, 0xfba1, 0xfba2, 0xfa5d, 0xfba3, + 0xfba4, 0xfba5, 0xfba6, 0xfba7, 0xfba8, 0xfbaa, 0xfbab, 0xfbac, + 0xfbad, 0xfbae, 0xfbaf, 0xfbb0, 0xfbb2, 0xfbb5, 0xfbb6, 0xfbb8, + 0xfbb9, 0xfbbb, 0xfbba, 0xfbbc, 0xfbbf, 0xfbc0, 0xfbbd, 0xfbbe, + 0xfbc1, 0xfbc3, 0xfbc2, 0xfbca, 0xfbc4, 0xfbc6, 0xfbc5, 0xfbc7, + 0xfbc9, 0xfbc8, 0xfbcb, 0xfbcd, 0xfbce, 0xfa5f, 0xfbcc, 0xfbd2, + 0xfbd6, 0xfbd4, 0xfbd0, 0xfbd1, 0xfbd5, 0xfbcf, 0xfa65, 0xfbd9, + 0xfbdc, 0xfbde, 0xfbdd, 0xfbdb, 0xfbd8, 0xfbd7, 0xfa5e, 0xfbe0, + 0xfbdf, 0xfbe1, 0xfbe2, 0xfbe3, 0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7, + 0xfbe8, 0xfbeb, 0xfbec, 0xfbed, 0xfbee, 0xfbef, 0xfbf0, 0xfbf1, + 0xfbf2, 0xfbf3, 0xfbf4, 0xfbf5, 0xfbf8, 0xfbfa, 0xfbfb, 0xfbfc, + 0xfc40, 0xfc42, 0xfc41, 0xfc43, 0xfc44, 0xfc45, 0xfc46, 0xfc48, + 0xfc47, 0xfc4a, 0xfc4b, 0xfae0, 0xfbe9, 0xfa90, 0xfa9b, 0xfa9c, + 0xfab1, 0xfad8, 0xfae8, 0xfaea, 0xfb58, 0xfb5e, 0xfb75, 0xfb7d, + 0xfb7e, 0xfb80, 0xfb82, 0xfb86, 0xfb89, 0xfb92, 0xfb9d, 0xfb9f, + 0xfba0, 0xfba9, 0xfbb1, 0xfbb3, 0xfbb4, 0xfbb7, 0xfbd3, 0xfbda, + 0xfbea, 0xfbf6, 0xfbf7, 0xfbf9, 0xfc49, 0xfa57, 0xfa56, 0xfa54, + 0xfa55, +}; + +static const Summary16 cp932ext_uni2indx_page21[28] = { + /* 0x2100 */ + { 0, 0x0000 }, { 0, 0x0040 }, { 1, 0x0002 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x03ff }, { 12, 0x03ff }, + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + /* 0x2200 */ + { 22, 0x0000 }, { 22, 0x8402 }, { 25, 0x4e01 }, { 30, 0x0020 }, + { 31, 0x0000 }, { 31, 0x0004 }, { 32, 0x0002 }, { 33, 0x0000 }, + { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0020 }, { 34, 0x8000 }, +}; +static const Summary16 cp932ext_uni2indx_page24[8] = { + /* 0x2400 */ + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0xffff }, { 51, 0x000f }, +}; +static const Summary16 cp932ext_uni2indx_page30[2] = { + /* 0x3000 */ + { 55, 0x0000 }, { 55, 0xa000 }, +}; +static const Summary16 cp932ext_uni2indx_page32[29] = { + /* 0x3200 */ + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0206 }, + { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, + { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x01f0 }, { 65, 0x0000 }, + { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, + /* 0x3300 */ + { 65, 0x2008 }, { 67, 0x0110 }, { 69, 0x08cc }, { 74, 0x0840 }, + { 76, 0x2600 }, { 79, 0x0082 }, { 81, 0x0000 }, { 81, 0x7800 }, + { 85, 0xc000 }, { 87, 0x7000 }, { 90, 0x0002 }, { 91, 0x0000 }, + { 91, 0x2010 }, +}; +static const Summary16 cp932ext_uni2indx_page4e[121] = { + /* 0x4e00 */ + { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0100 }, { 94, 0x0000 }, + { 94, 0x0000 }, { 94, 0x0000 }, { 94, 0x0000 }, { 94, 0x0000 }, + { 94, 0x0000 }, { 94, 0x0000 }, { 94, 0x0000 }, { 94, 0x0000 }, + { 94, 0x0000 }, { 94, 0x0000 }, { 94, 0x0002 }, { 95, 0x1000 }, + /* 0x4f00 */ + { 96, 0x0009 }, { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0200 }, + { 99, 0x0000 }, { 99, 0x0040 }, { 100, 0x0000 }, { 100, 0x0000 }, + { 100, 0x0400 }, { 101, 0x0414 }, { 104, 0x0000 }, { 104, 0x0000 }, + { 104, 0x2200 }, { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x8000 }, + /* 0x5000 */ + { 107, 0x0000 }, { 107, 0x4000 }, { 108, 0x0004 }, { 109, 0x0000 }, + { 109, 0x0045 }, { 112, 0x0000 }, { 112, 0x0000 }, { 112, 0x0001 }, + { 113, 0x0000 }, { 113, 0x0010 }, { 114, 0x0000 }, { 114, 0x0000 }, + { 114, 0x0000 }, { 114, 0x0100 }, { 115, 0x0000 }, { 115, 0x0010 }, + /* 0x5100 */ + { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, + { 116, 0x0400 }, { 117, 0x0000 }, { 117, 0x0010 }, { 118, 0x0000 }, + { 118, 0x0000 }, { 118, 0x2000 }, { 119, 0x0000 }, { 119, 0x4000 }, + { 120, 0x0000 }, { 120, 0x0000 }, { 120, 0x1000 }, { 121, 0x0000 }, + /* 0x5200 */ + { 121, 0x0000 }, { 121, 0x0020 }, { 122, 0x0000 }, { 122, 0x0000 }, + { 122, 0x0000 }, { 122, 0x0000 }, { 122, 0x0000 }, { 122, 0x0000 }, + { 122, 0x0000 }, { 122, 0x1000 }, { 123, 0x8040 }, { 125, 0x0000 }, + { 125, 0x0001 }, { 126, 0x0800 }, { 127, 0x0000 }, { 127, 0x0000 }, + /* 0x5300 */ + { 127, 0x0081 }, { 129, 0x0000 }, { 129, 0x0010 }, { 130, 0x0000 }, + { 130, 0x0000 }, { 130, 0x0000 }, { 130, 0x0000 }, { 130, 0x0004 }, + { 131, 0x0000 }, { 131, 0x0008 }, { 132, 0x0000 }, { 132, 0x0004 }, + { 133, 0x0000 }, { 133, 0x2000 }, { 134, 0x0000 }, { 134, 0x0000 }, + /* 0x5400 */ + { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x0000 }, + { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x0000 }, + { 134, 0x0400 }, { 135, 0x1000 }, { 136, 0x0200 }, { 137, 0x0000 }, + { 137, 0x0000 }, { 137, 0x0000 }, { 137, 0x0000 }, { 137, 0x8000 }, + /* 0x5500 */ + { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, + { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, + { 138, 0x0040 }, +}; +static const Summary16 cp932ext_uni2indx_page57[44] = { + /* 0x5700 */ + { 139, 0x0000 }, { 139, 0x0000 }, { 139, 0x0000 }, { 139, 0x0000 }, + { 139, 0x0000 }, { 139, 0x0200 }, { 140, 0x0020 }, { 141, 0x0000 }, + { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x1000 }, { 142, 0x0000 }, + { 142, 0x0180 }, { 144, 0x0000 }, { 144, 0x0000 }, { 144, 0x0000 }, + /* 0x5800 */ + { 144, 0x0000 }, { 144, 0x0000 }, { 144, 0x0000 }, { 144, 0x0000 }, + { 144, 0x0000 }, { 144, 0x0000 }, { 144, 0x0000 }, { 144, 0x0000 }, + { 144, 0x0000 }, { 144, 0x4000 }, { 145, 0x0000 }, { 145, 0x0004 }, + { 146, 0x0000 }, { 146, 0x0000 }, { 146, 0x0000 }, { 146, 0x0000 }, + /* 0x5900 */ + { 146, 0x0800 }, { 147, 0x0000 }, { 147, 0x0000 }, { 147, 0x0000 }, + { 147, 0x0000 }, { 147, 0x2808 }, { 150, 0x0008 }, { 151, 0x0000 }, + { 151, 0x0000 }, { 151, 0x0000 }, { 151, 0x0010 }, { 152, 0x0400 }, +}; +static const Summary16 cp932ext_uni2indx_page5b[46] = { + /* 0x5b00 */ + { 153, 0x0000 }, { 153, 0x0000 }, { 153, 0x0000 }, { 153, 0x0000 }, + { 153, 0x0000 }, { 153, 0x0040 }, { 154, 0x0000 }, { 154, 0x0000 }, + { 154, 0x0000 }, { 154, 0x0000 }, { 154, 0x0000 }, { 154, 0x0000 }, + { 154, 0x0001 }, { 155, 0x0100 }, { 156, 0x1000 }, { 157, 0x0000 }, + /* 0x5c00 */ + { 157, 0x0000 }, { 157, 0x4000 }, { 158, 0x0000 }, { 158, 0x0000 }, + { 158, 0x0000 }, { 158, 0x0000 }, { 158, 0x0000 }, { 158, 0x0000 }, + { 158, 0x0000 }, { 158, 0x0000 }, { 158, 0x0040 }, { 159, 0x0400 }, + { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0020 }, + /* 0x5d00 */ + { 161, 0x0000 }, { 161, 0x0000 }, { 161, 0x0080 }, { 162, 0x0000 }, + { 162, 0x0004 }, { 163, 0x0008 }, { 164, 0x2000 }, { 165, 0x0000 }, + { 165, 0x0000 }, { 165, 0x0000 }, { 165, 0x0000 }, { 165, 0x0300 }, + { 167, 0x0000 }, { 167, 0x0001 }, +}; +static const Summary16 cp932ext_uni2indx_page5f[458] = { + /* 0x5f00 */ + { 168, 0x0000 }, { 168, 0x0000 }, { 168, 0x0002 }, { 169, 0x0010 }, + { 170, 0x0020 }, { 171, 0x0000 }, { 171, 0x0080 }, { 172, 0x0000 }, + { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x0080 }, + { 173, 0x0000 }, { 173, 0x4000 }, { 174, 0x0000 }, { 174, 0x0000 }, + /* 0x6000 */ + { 174, 0x0000 }, { 174, 0x0000 }, { 174, 0x0000 }, { 174, 0x0000 }, + { 174, 0x0000 }, { 174, 0x2000 }, { 175, 0x0000 }, { 175, 0x0000 }, + { 175, 0x0420 }, { 177, 0x0000 }, { 177, 0x0000 }, { 177, 0x0000 }, + { 177, 0x0000 }, { 177, 0x4020 }, { 179, 0x0000 }, { 179, 0x0004 }, + /* 0x6100 */ + { 180, 0x0000 }, { 180, 0x0002 }, { 181, 0x0001 }, { 182, 0x0081 }, + { 184, 0x0000 }, { 184, 0x0000 }, { 184, 0x0000 }, { 184, 0x0000 }, + { 184, 0x0000 }, { 184, 0x0100 }, { 185, 0x0000 }, { 185, 0x0000 }, + { 185, 0x0000 }, { 185, 0x0000 }, { 185, 0x0000 }, { 185, 0x0000 }, + /* 0x6200 */ + { 185, 0x0000 }, { 185, 0x0008 }, { 186, 0x0000 }, { 186, 0x0000 }, + { 186, 0x0000 }, { 186, 0x0000 }, { 186, 0x0000 }, { 186, 0x0000 }, + { 186, 0x0000 }, { 186, 0x0000 }, { 186, 0x0040 }, { 187, 0x0000 }, + { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0000 }, + /* 0x6300 */ + { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0000 }, + { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0000 }, + { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0000 }, + { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0000 }, { 187, 0x0020 }, + /* 0x6400 */ + { 188, 0x0000 }, { 188, 0x0000 }, { 188, 0x0000 }, { 188, 0x0000 }, + { 188, 0x0000 }, { 188, 0x0000 }, { 188, 0x0001 }, { 189, 0x0000 }, + { 189, 0x0000 }, { 189, 0x2000 }, { 190, 0x0000 }, { 190, 0x0000 }, + { 190, 0x4000 }, { 191, 0x0000 }, { 191, 0x0000 }, { 191, 0x0000 }, + /* 0x6500 */ + { 191, 0x0000 }, { 191, 0x0000 }, { 191, 0x0000 }, { 191, 0x0000 }, + { 191, 0x4000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, + { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, + { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, + /* 0x6600 */ + { 192, 0x0201 }, { 194, 0x4020 }, { 196, 0x4010 }, { 198, 0x0802 }, + { 200, 0x0000 }, { 200, 0x0280 }, { 202, 0x0020 }, { 203, 0x0008 }, + { 204, 0x0000 }, { 204, 0x0200 }, { 205, 0x0001 }, { 206, 0x8004 }, + { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0c00 }, + /* 0x6700 */ + { 210, 0x4000 }, { 211, 0x0000 }, { 211, 0x0000 }, { 211, 0x0000 }, + { 211, 0x0000 }, { 211, 0x0000 }, { 211, 0x0040 }, { 212, 0x0000 }, + { 212, 0x0000 }, { 212, 0x0000 }, { 212, 0x0000 }, { 212, 0x0800 }, + { 213, 0x0001 }, { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0000 }, + /* 0x6800 */ + { 214, 0x0002 }, { 215, 0x0000 }, { 215, 0x0000 }, { 215, 0x0000 }, + { 215, 0x0010 }, { 216, 0x0004 }, { 217, 0x0000 }, { 217, 0x0000 }, + { 217, 0x0000 }, { 217, 0x0000 }, { 217, 0x0000 }, { 217, 0x0000 }, + { 217, 0x8100 }, { 219, 0x0000 }, { 219, 0x0000 }, { 219, 0x0000 }, + /* 0x6900 */ + { 219, 0x0000 }, { 219, 0x0000 }, { 219, 0x0000 }, { 219, 0x0000 }, + { 219, 0x0000 }, { 219, 0x0000 }, { 219, 0x0100 }, { 220, 0x0000 }, + { 220, 0x0000 }, { 220, 0x0100 }, { 221, 0x0000 }, { 221, 0x0000 }, + { 221, 0x0000 }, { 221, 0x0000 }, { 221, 0x0004 }, { 222, 0x0000 }, + /* 0x6a00 */ + { 222, 0x0000 }, { 222, 0x0000 }, { 222, 0x0000 }, { 222, 0x0001 }, + { 223, 0x0040 }, { 224, 0x0000 }, { 224, 0x0800 }, { 225, 0x4008 }, + { 227, 0x0000 }, { 227, 0x0000 }, { 227, 0x0000 }, { 227, 0x0000 }, + { 227, 0x0000 }, { 227, 0x0000 }, { 227, 0x0014 }, { 229, 0x0000 }, + /* 0x6b00 */ + { 229, 0x0000 }, { 229, 0x0000 }, { 229, 0x0000 }, { 229, 0x0000 }, + { 229, 0x0000 }, { 229, 0x0000 }, { 229, 0x0000 }, { 229, 0x0000 }, + { 229, 0x0000 }, { 229, 0x0000 }, { 229, 0x0000 }, { 229, 0x0000 }, + { 229, 0x0000 }, { 229, 0x0040 }, { 230, 0x0000 }, { 230, 0x0000 }, + /* 0x6c00 */ + { 230, 0x0000 }, { 230, 0x0000 }, { 230, 0x0000 }, { 230, 0x8000 }, + { 231, 0x0000 }, { 231, 0x1000 }, { 232, 0x8000 }, { 233, 0x0000 }, + { 233, 0x0040 }, { 234, 0x0000 }, { 234, 0x0000 }, { 234, 0x0000 }, + { 234, 0x0000 }, { 234, 0x0400 }, { 235, 0x0000 }, { 235, 0x0000 }, + /* 0x6d00 */ + { 235, 0x0010 }, { 236, 0x0000 }, { 236, 0x0000 }, { 236, 0x0000 }, + { 236, 0x0000 }, { 236, 0x0000 }, { 236, 0x8000 }, { 237, 0x0000 }, + { 237, 0x0080 }, { 238, 0x0040 }, { 239, 0x1000 }, { 240, 0x0000 }, + { 240, 0x8000 }, { 241, 0x0000 }, { 241, 0x0000 }, { 241, 0x1104 }, + /* 0x6e00 */ + { 244, 0x0000 }, { 244, 0x0000 }, { 244, 0x0080 }, { 245, 0x1200 }, + { 247, 0x0000 }, { 247, 0x1000 }, { 248, 0x0000 }, { 248, 0x0000 }, + { 248, 0x0000 }, { 248, 0x0000 }, { 248, 0x0000 }, { 248, 0x8000 }, + { 249, 0x0000 }, { 249, 0x0000 }, { 249, 0x0000 }, { 249, 0x0000 }, + /* 0x6f00 */ + { 249, 0x0000 }, { 249, 0x0000 }, { 249, 0x0000 }, { 249, 0x0000 }, + { 249, 0x0000 }, { 249, 0x0000 }, { 249, 0x0000 }, { 249, 0x0000 }, + { 249, 0x0100 }, { 250, 0x0000 }, { 250, 0x0000 }, { 250, 0x0020 }, + { 251, 0x0000 }, { 251, 0x0000 }, { 251, 0x0000 }, { 251, 0x0020 }, + /* 0x7000 */ + { 252, 0x00a0 }, { 254, 0x0000 }, { 254, 0x0100 }, { 255, 0x0000 }, + { 255, 0x0000 }, { 255, 0x0000 }, { 255, 0x0000 }, { 255, 0x0000 }, + { 255, 0x0020 }, { 256, 0x0000 }, { 256, 0x0800 }, { 257, 0x0800 }, + { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, + /* 0x7100 */ + { 258, 0x8010 }, { 260, 0x0000 }, { 260, 0x0000 }, { 260, 0x0000 }, + { 260, 0x00c0 }, { 262, 0x1000 }, { 263, 0x0000 }, { 263, 0x0000 }, + { 263, 0x0000 }, { 263, 0x0000 }, { 263, 0x0000 }, { 263, 0x0000 }, + { 263, 0x0002 }, { 264, 0x0000 }, { 264, 0x0000 }, { 264, 0x4000 }, + /* 0x7200 */ + { 265, 0x0000 }, { 265, 0x0000 }, { 265, 0x0000 }, { 265, 0x0000 }, + { 265, 0x0000 }, { 265, 0x0000 }, { 265, 0x0000 }, { 265, 0x0000 }, + { 265, 0x0000 }, { 265, 0x0000 }, { 265, 0x0000 }, { 265, 0x4002 }, + { 267, 0x0000 }, { 267, 0x0000 }, { 267, 0x0000 }, { 267, 0x0000 }, + /* 0x7300 */ + { 267, 0x0000 }, { 267, 0x0000 }, { 267, 0x0010 }, { 268, 0x0000 }, + { 268, 0x0000 }, { 268, 0x0000 }, { 268, 0x0000 }, { 268, 0x0080 }, + { 269, 0x0000 }, { 269, 0x0000 }, { 269, 0x0000 }, { 269, 0x2000 }, + { 270, 0x0200 }, { 271, 0x0044 }, { 273, 0x0008 }, { 274, 0x0020 }, + /* 0x7400 */ + { 275, 0x0080 }, { 276, 0x0000 }, { 276, 0x4640 }, { 280, 0x0000 }, + { 280, 0x0000 }, { 280, 0x0000 }, { 280, 0x0004 }, { 281, 0x0000 }, + { 281, 0x0200 }, { 282, 0x8000 }, { 283, 0x0000 }, { 283, 0x0000 }, + { 283, 0x0000 }, { 283, 0x0000 }, { 283, 0x0000 }, { 283, 0x0000 }, + /* 0x7500 */ + { 283, 0x0002 }, { 284, 0x0000 }, { 284, 0x8000 }, { 285, 0x0000 }, + { 285, 0x0000 }, { 285, 0x0000 }, { 285, 0x8000 }, { 286, 0x0000 }, + { 286, 0x0000 }, { 286, 0x0000 }, { 286, 0x0000 }, { 286, 0x0000 }, + { 286, 0x0000 }, { 286, 0x0000 }, { 286, 0x0000 }, { 286, 0x0000 }, + /* 0x7600 */ + { 286, 0x0000 }, { 286, 0x0000 }, { 286, 0x0000 }, { 286, 0x0000 }, + { 286, 0x0000 }, { 286, 0x0000 }, { 286, 0x0000 }, { 286, 0x0000 }, + { 286, 0x0004 }, { 287, 0x5800 }, { 290, 0x0040 }, { 291, 0x0000 }, + { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, + /* 0x7700 */ + { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, + { 291, 0x0040 }, { 292, 0x0000 }, { 292, 0x0000 }, { 292, 0x0000 }, + { 292, 0x0000 }, { 292, 0x0000 }, { 292, 0x0000 }, { 292, 0x0000 }, + { 292, 0x0000 }, { 292, 0x0000 }, { 292, 0x0000 }, { 292, 0x0000 }, + /* 0x7800 */ + { 292, 0x0000 }, { 292, 0x0000 }, { 292, 0x0002 }, { 293, 0x0000 }, + { 293, 0x4000 }, { 294, 0x0000 }, { 294, 0x0010 }, { 295, 0x0400 }, + { 296, 0x0000 }, { 296, 0x0000 }, { 296, 0x0000 }, { 296, 0x0000 }, + { 296, 0x0000 }, { 296, 0x0000 }, { 296, 0x0000 }, { 296, 0x0000 }, + /* 0x7900 */ + { 296, 0x0000 }, { 296, 0x0000 }, { 296, 0x0000 }, { 296, 0x0001 }, + { 297, 0x0000 }, { 297, 0x0000 }, { 297, 0x0000 }, { 297, 0x0000 }, + { 297, 0x0000 }, { 297, 0x0810 }, { 299, 0x0000 }, { 299, 0x0000 }, + { 299, 0x0000 }, { 299, 0x0000 }, { 299, 0x0000 }, { 299, 0x0000 }, + /* 0x7a00 */ + { 299, 0x0000 }, { 299, 0x0000 }, { 299, 0x0000 }, { 299, 0x0000 }, + { 299, 0x0000 }, { 299, 0x0000 }, { 299, 0x0000 }, { 299, 0x0000 }, + { 299, 0x0000 }, { 299, 0x0000 }, { 299, 0x0000 }, { 299, 0x0000 }, + { 299, 0x0000 }, { 299, 0x0002 }, { 300, 0x0880 }, { 302, 0x0000 }, + /* 0x7b00 */ + { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, + { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0000 }, + { 302, 0x0000 }, { 302, 0x4000 }, +}; +static const Summary16 cp932ext_uni2indx_page7d[43] = { + /* 0x7d00 */ + { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, + { 303, 0x0100 }, { 304, 0x1000 }, { 305, 0x0000 }, { 305, 0x0000 }, + { 305, 0x0000 }, { 305, 0x0000 }, { 305, 0x0001 }, { 306, 0x0080 }, + { 307, 0x0000 }, { 307, 0x0040 }, { 308, 0x0000 }, { 308, 0x0000 }, + /* 0x7e00 */ + { 308, 0x0000 }, { 308, 0x0000 }, { 308, 0x0000 }, { 308, 0x0000 }, + { 308, 0x0000 }, { 308, 0x0004 }, { 309, 0x0000 }, { 309, 0x0000 }, + { 309, 0x0400 }, { 310, 0x0000 }, { 310, 0x0000 }, { 310, 0x0000 }, + { 310, 0x0000 }, { 310, 0x0000 }, { 310, 0x0000 }, { 310, 0x0000 }, + /* 0x7f00 */ + { 310, 0x0000 }, { 310, 0x0000 }, { 310, 0x0000 }, { 310, 0x0000 }, + { 310, 0x0080 }, { 311, 0x0000 }, { 311, 0x0000 }, { 311, 0x0000 }, + { 311, 0x0000 }, { 311, 0x0000 }, { 311, 0x0002 }, +}; +static const Summary16 cp932ext_uni2indx_page83[44] = { + /* 0x8300 */ + { 312, 0x0002 }, { 313, 0x0000 }, { 313, 0x0000 }, { 313, 0x0000 }, + { 313, 0x0000 }, { 313, 0x0000 }, { 313, 0x0004 }, { 314, 0x8000 }, + { 315, 0x0000 }, { 315, 0x0000 }, { 315, 0x0000 }, { 315, 0x0000 }, + { 315, 0x0080 }, { 316, 0x0000 }, { 316, 0x0000 }, { 316, 0x0040 }, + /* 0x8400 */ + { 317, 0x0000 }, { 317, 0x0000 }, { 317, 0x0000 }, { 317, 0x0000 }, + { 317, 0x0100 }, { 318, 0x0000 }, { 318, 0x0000 }, { 318, 0x0000 }, + { 318, 0x0000 }, { 318, 0x0000 }, { 318, 0x0000 }, { 318, 0x0010 }, + { 319, 0x0000 }, { 319, 0x1000 }, { 320, 0x0000 }, { 320, 0x0000 }, + /* 0x8500 */ + { 320, 0x0000 }, { 320, 0x0000 }, { 320, 0x0000 }, { 320, 0x0000 }, + { 320, 0x0000 }, { 320, 0x0208 }, { 322, 0x0800 }, { 323, 0x0000 }, + { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0001 }, +}; +static const Summary16 cp932ext_uni2indx_page88[109] = { + /* 0x8800 */ + { 324, 0x0080 }, { 325, 0x0000 }, { 325, 0x0000 }, { 325, 0x0000 }, + { 325, 0x0000 }, { 325, 0x0000 }, { 325, 0x0000 }, { 325, 0x0000 }, + { 325, 0x0000 }, { 325, 0x0000 }, { 325, 0x0000 }, { 325, 0x0000 }, + { 325, 0x0000 }, { 325, 0x0000 }, { 325, 0x0000 }, { 325, 0x0020 }, + /* 0x8900 */ + { 326, 0x0000 }, { 326, 0x1000 }, { 327, 0x0000 }, { 327, 0x0000 }, + { 327, 0x0000 }, { 327, 0x0000 }, { 327, 0x0000 }, { 327, 0x0000 }, + { 327, 0x0000 }, { 327, 0x0000 }, { 327, 0x0000 }, { 327, 0x0000 }, + { 327, 0x0000 }, { 327, 0x0000 }, { 327, 0x0000 }, { 327, 0x0000 }, + /* 0x8a00 */ + { 327, 0x0000 }, { 327, 0x0004 }, { 328, 0x0000 }, { 328, 0x0080 }, + { 329, 0x0000 }, { 329, 0x0000 }, { 329, 0x0000 }, { 329, 0x0200 }, + { 330, 0x0000 }, { 330, 0x0000 }, { 330, 0x0080 }, { 331, 0x4000 }, + { 332, 0x0000 }, { 332, 0x8000 }, { 333, 0x0000 }, { 333, 0x0040 }, + /* 0x8b00 */ + { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0000 }, + { 334, 0x0000 }, { 334, 0x0008 }, { 335, 0x0000 }, { 335, 0x8000 }, + { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, + { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, + /* 0x8c00 */ + { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, + { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, + { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, + { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0000 }, { 336, 0x0011 }, + /* 0x8d00 */ + { 338, 0x0000 }, { 338, 0x0004 }, { 339, 0x0000 }, { 339, 0x0000 }, + { 339, 0x0000 }, { 339, 0x0000 }, { 339, 0x0000 }, { 339, 0x0040 }, + { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, + { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, + /* 0x8e00 */ + { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, + { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, + { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, { 340, 0x0000 }, + { 340, 0x8000 }, +}; +static const Summary16 cp932ext_uni2indx_page90[238] = { + /* 0x9000 */ + { 341, 0x0000 }, { 341, 0x0000 }, { 341, 0x0000 }, { 341, 0x0000 }, + { 341, 0x0000 }, { 341, 0x0000 }, { 341, 0x0080 }, { 342, 0x0000 }, + { 342, 0x0000 }, { 342, 0x0000 }, { 342, 0x0000 }, { 342, 0x0000 }, + { 342, 0x0000 }, { 342, 0x4000 }, { 343, 0x0000 }, { 343, 0x0000 }, + /* 0x9100 */ + { 343, 0x0000 }, { 343, 0x0020 }, { 344, 0x0080 }, { 345, 0x0000 }, + { 345, 0x0000 }, { 345, 0x0000 }, { 345, 0x0000 }, { 345, 0x0000 }, + { 345, 0x0000 }, { 345, 0x0000 }, { 345, 0x0000 }, { 345, 0x0000 }, + { 345, 0x0000 }, { 345, 0x4480 }, { 348, 0x6030 }, { 352, 0x0000 }, + /* 0x9200 */ + { 352, 0x0440 }, { 354, 0x0001 }, { 355, 0x0000 }, { 355, 0x1600 }, + { 358, 0x4001 }, { 360, 0x0202 }, { 362, 0x0080 }, { 363, 0x0180 }, + { 365, 0x0100 }, { 366, 0x0000 }, { 366, 0x0080 }, { 367, 0x0000 }, + { 367, 0x0000 }, { 367, 0x02a9 }, { 372, 0x0081 }, { 374, 0x8a00 }, + /* 0x9300 */ + { 377, 0x0004 }, { 378, 0x6000 }, { 380, 0x0022 }, { 382, 0x0000 }, + { 382, 0x0100 }, { 383, 0x0080 }, { 384, 0x0000 }, { 384, 0x0001 }, + { 385, 0x0000 }, { 385, 0x0000 }, { 385, 0x0010 }, { 386, 0x0000 }, + { 386, 0x0040 }, { 387, 0x4000 }, { 388, 0x0000 }, { 388, 0x0100 }, + /* 0x9400 */ + { 389, 0x0000 }, { 389, 0x0000 }, { 389, 0x0000 }, { 389, 0x0002 }, + { 390, 0x0120 }, { 392, 0x0000 }, { 392, 0x0000 }, { 392, 0x0000 }, + { 392, 0x0000 }, { 392, 0x0000 }, { 392, 0x0000 }, { 392, 0x0000 }, + { 392, 0x0000 }, { 392, 0x0000 }, { 392, 0x0000 }, { 392, 0x0000 }, + /* 0x9500 */ + { 392, 0x0000 }, { 392, 0x0000 }, { 392, 0x0000 }, { 392, 0x0000 }, + { 392, 0x0000 }, { 392, 0x0000 }, { 392, 0x0000 }, { 392, 0x0000 }, + { 392, 0x0000 }, { 392, 0x0004 }, { 393, 0x0000 }, { 393, 0x0000 }, + { 393, 0x0000 }, { 393, 0x0000 }, { 393, 0x0000 }, { 393, 0x0000 }, + /* 0x9600 */ + { 393, 0x0000 }, { 393, 0x0000 }, { 393, 0x0000 }, { 393, 0x0000 }, + { 393, 0x0000 }, { 393, 0x0000 }, { 393, 0x0000 }, { 393, 0x0000 }, + { 393, 0x0000 }, { 393, 0x2000 }, { 394, 0x8000 }, { 395, 0x0000 }, + { 395, 0x0000 }, { 395, 0x0000 }, { 395, 0x0000 }, { 395, 0x0000 }, + /* 0x9700 */ + { 395, 0x0000 }, { 395, 0x0000 }, { 395, 0x0000 }, { 395, 0x0808 }, + { 397, 0xa008 }, { 400, 0x0022 }, { 402, 0x0000 }, { 402, 0x0000 }, + { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, + { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, + /* 0x9800 */ + { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, + { 402, 0x0000 }, { 402, 0x0080 }, { 403, 0x0020 }, { 404, 0x0000 }, + { 404, 0x0000 }, { 404, 0x0000 }, { 404, 0x0000 }, { 404, 0x0000 }, + { 404, 0x0000 }, { 404, 0x0000 }, { 404, 0x0000 }, { 404, 0x0000 }, + /* 0x9900 */ + { 404, 0x0000 }, { 404, 0x0000 }, { 404, 0x0080 }, { 405, 0x0000 }, + { 405, 0x0000 }, { 405, 0x0000 }, { 405, 0x0000 }, { 405, 0x0000 }, + { 405, 0x0000 }, { 405, 0x4000 }, { 406, 0x0000 }, { 406, 0x0000 }, + { 406, 0x0000 }, { 406, 0x0000 }, { 406, 0x0000 }, { 406, 0x0000 }, + /* 0x9a00 */ + { 406, 0x0000 }, { 406, 0x0000 }, { 406, 0x0000 }, { 406, 0x0000 }, + { 406, 0x4000 }, { 407, 0x0000 }, { 407, 0x0000 }, { 407, 0x0000 }, + { 407, 0x0000 }, { 407, 0x0000 }, { 407, 0x0000 }, { 407, 0x0000 }, + { 407, 0x0000 }, { 407, 0x1200 }, { 409, 0x0000 }, { 409, 0x0000 }, + /* 0x9b00 */ + { 409, 0x0000 }, { 409, 0x0000 }, { 409, 0x0000 }, { 409, 0x0000 }, + { 409, 0x0000 }, { 409, 0x0000 }, { 409, 0x0000 }, { 409, 0x0024 }, + { 411, 0x8000 }, { 412, 0x0000 }, { 412, 0x0000 }, { 412, 0x0802 }, + { 414, 0x0000 }, { 414, 0x0000 }, { 414, 0x0000 }, { 414, 0x0000 }, + /* 0x9c00 */ + { 414, 0x0001 }, { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0000 }, + { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0000 }, + { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0000 }, + { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0000 }, + /* 0x9d00 */ + { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0000 }, + { 415, 0x0000 }, { 415, 0x0000 }, { 415, 0x0800 }, { 416, 0x0001 }, + { 417, 0x0000 }, { 417, 0x0000 }, { 417, 0x0000 }, { 417, 0x0000 }, + { 417, 0x0000 }, { 417, 0x0000 }, { 417, 0x0000 }, { 417, 0x0000 }, + /* 0x9e00 */ + { 417, 0x0000 }, { 417, 0x0200 }, { 418, 0x0000 }, { 418, 0x0000 }, + { 418, 0x0000 }, { 418, 0x0000 }, { 418, 0x0000 }, { 418, 0x0000 }, + { 418, 0x0000 }, { 418, 0x0000 }, { 418, 0x0000 }, { 418, 0x0000 }, + { 418, 0x0000 }, { 418, 0x0002 }, +}; +static const Summary16 cp932ext_uni2indx_pagef9[19] = { + /* 0xf900 */ + { 419, 0x0000 }, { 419, 0x0000 }, { 419, 0x0200 }, { 420, 0x0000 }, + { 420, 0x0000 }, { 420, 0x0000 }, { 420, 0x0000 }, { 420, 0x0000 }, + { 420, 0x0000 }, { 420, 0x0000 }, { 420, 0x0000 }, { 420, 0x0000 }, + { 420, 0x0000 }, { 420, 0x1000 }, { 421, 0x0000 }, { 421, 0x0000 }, + /* 0xfa00 */ + { 421, 0xc000 }, { 423, 0xffff }, { 439, 0x3fff }, +}; +static const Summary16 cp932ext_uni2indx_pageff[15] = { + /* 0xff00 */ + { 453, 0x0084 }, { 455, 0x0000 }, { 455, 0x0000 }, { 455, 0x0000 }, + { 455, 0x0000 }, { 455, 0x0000 }, { 455, 0x0000 }, { 455, 0x0000 }, + { 455, 0x0000 }, { 455, 0x0000 }, { 455, 0x0000 }, { 455, 0x0000 }, + { 455, 0x0000 }, { 455, 0x0000 }, { 455, 0x0014 }, +}; + +static int +cp932ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x2100 && wc < 0x22c0) + summary = &cp932ext_uni2indx_page21[(wc>>4)-0x210]; + else if (wc >= 0x2400 && wc < 0x2480) + summary = &cp932ext_uni2indx_page24[(wc>>4)-0x240]; + else if (wc >= 0x3000 && wc < 0x3020) + summary = &cp932ext_uni2indx_page30[(wc>>4)-0x300]; + else if (wc >= 0x3200 && wc < 0x33d0) + summary = &cp932ext_uni2indx_page32[(wc>>4)-0x320]; + else if (wc >= 0x4e00 && wc < 0x5590) + summary = &cp932ext_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0x5700 && wc < 0x59c0) + summary = &cp932ext_uni2indx_page57[(wc>>4)-0x570]; + else if (wc >= 0x5b00 && wc < 0x5de0) + summary = &cp932ext_uni2indx_page5b[(wc>>4)-0x5b0]; + else if (wc >= 0x5f00 && wc < 0x7ba0) + summary = &cp932ext_uni2indx_page5f[(wc>>4)-0x5f0]; + else if (wc >= 0x7d00 && wc < 0x7fb0) + summary = &cp932ext_uni2indx_page7d[(wc>>4)-0x7d0]; + else if (wc >= 0x8300 && wc < 0x85c0) + summary = &cp932ext_uni2indx_page83[(wc>>4)-0x830]; + else if (wc >= 0x8800 && wc < 0x8ed0) + summary = &cp932ext_uni2indx_page88[(wc>>4)-0x880]; + else if (wc >= 0x9000 && wc < 0x9ee0) + summary = &cp932ext_uni2indx_page90[(wc>>4)-0x900]; + else if (wc >= 0xf900 && wc < 0xfa30) + summary = &cp932ext_uni2indx_pagef9[(wc>>4)-0xf90]; + else if (wc >= 0xff00 && wc < 0xfff0) + summary = &cp932ext_uni2indx_pageff[(wc>>4)-0xff0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = cp932ext_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/cp936.h b/jni/parted/libiconv/lib/cp936.h new file mode 100755 index 0000000..e99129e --- /dev/null +++ b/jni/parted/libiconv/lib/cp936.h @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP936 + */ + +/* + * The IANA has CP936 as an alias of GBK. But GBK is an official Chinese + * specification, whereas CP936 is de-facto maintained by Microsoft. And, + * of course, Microsoft modified CP936 since 1999. + * + * The differences from GBK are: + * + * 1. A single character: + * + * code CP936.TXT + * 0x80 0x20AC # EURO SIGN + * + * Some variants of CP936 (in JDK, Windows-2000, ICU) also add: + * + * 2. Private area mappings: + * + * code Unicode + * 0x{A1..A2}{40..7E,80..A0} U+E4C6..U+E585 + * 0x{AA..AF,F8..FE}{A1..FE} U+E000..U+E4C5 + * + * We add them too because, although there are backward compatibility problems + * when a character from a private area is moved to an official Unicode code + * point, they are useful for some people in practice. + */ + +static int +cp936_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + /* Try GBK first. */ + { + int ret = ces_gbk_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + } + /* Then handle the additional mappings. */ + { + unsigned char c = *s; + if (c == 0x80) { + *pwc = 0x20ac; + return 1; + } + /* User-defined characters */ + if (c >= 0xa1 && c <= 0xa2) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0x80 && c2 < 0xa1)) { + *pwc = 0xe4c6 + 96 * (c - 0xa1) + (c2 - (c2 >= 0x80 ? 0x41 : 0x40)); + return 2; + } + } + } else if ((c >= 0xaa && c < 0xb0) || (c >= 0xf8 && c < 0xff)) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 < 0xff) { + *pwc = 0xe000 + 94 * (c - (c >= 0xf8 ? 0xf2 : 0xaa)) + (c2 - 0xa1); + return 2; + } + } + } + } + return RET_ILSEQ; +} + +static int +cp936_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + /* Try GBK first. */ + { + int ret = ces_gbk_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + } + /* Then handle the additional mappings. */ + if (wc >= 0xe000 && wc < 0xe586) { + /* User-defined characters */ + if (n < 2) + return RET_TOOFEW(0); + if (wc < 0xe4c6) { + unsigned int i = wc - 0xe000; + unsigned int c1 = i / 94; + unsigned int c2 = i % 94; + r[0] = c1 + (c1 < 6 ? 0xaa : 0xf2); + r[1] = c2 + 0xa1; + return 2; + } else { + unsigned int i = wc - 0xe4c6; + unsigned int c1 = i / 96; + unsigned int c2 = i % 96; + r[0] = c1 + 0xa1; + r[1] = c2 + (c2 < 0x3f ? 0x40 : 0x41); + return 2; + } + } else if (wc == 0x20ac) { + r[0] = 0x80; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp936ext.h b/jni/parted/libiconv/lib/cp936ext.h new file mode 100755 index 0000000..6e0eae0 --- /dev/null +++ b/jni/parted/libiconv/lib/cp936ext.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP936 extensions + */ + +static const unsigned short cp936ext_2uni_pagea6[181-159] = { + /* 0xa6 */ + 0xfe35, + 0xfe36, 0xfe39, 0xfe3a, 0xfe3f, 0xfe40, 0xfe3d, 0xfe3e, 0xfe41, + 0xfe42, 0xfe43, 0xfe44, 0xfffd, 0xfffd, 0xfe3b, 0xfe3c, 0xfe37, + 0xfe38, 0xfe31, 0xfffd, 0xfe33, 0xfe34, +}; +static const unsigned short cp936ext_2uni_pagea8[128-122] = { + /* 0xa8 */ + 0x0251, 0xfffd, 0x0144, 0x0148, 0xfffd, 0x0261, +}; + +static int +cp936ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 == 0xa6) || (c1 == 0xa8)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0x80 && c2 < 0xff)) { + unsigned int i = 190 * (c1 - 0x81) + (c2 - (c2 >= 0x80 ? 0x41 : 0x40)); + unsigned short wc = 0xfffd; + if (i < 7410) { + if (i >= 7189 && i < 7211) + wc = cp936ext_2uni_pagea6[i-7189]; + } else { + if (i >= 7532 && i < 7538) + wc = cp936ext_2uni_pagea8[i-7532]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short cp936ext_page01[16] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xa8bd, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/ + 0xa8be, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ +}; +static const unsigned short cp936ext_page02[24] = { + 0x0000, 0xa8bb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ + 0x0000, 0xa8c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ +}; +static const unsigned short cp936ext_pagefe[24] = { + 0x0000, 0xa6f2, 0x0000, 0xa6f4, 0xa6f5, 0xa6e0, 0xa6e1, 0xa6f0, /*0x30-0x37*/ + 0xa6f1, 0xa6e2, 0xa6e3, 0xa6ee, 0xa6ef, 0xa6e6, 0xa6e7, 0xa6e4, /*0x38-0x3f*/ + 0xa6e5, 0xa6e8, 0xa6e9, 0xa6ea, 0xa6eb, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/ +}; + +static int +cp936ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + unsigned short c = 0; + if (wc >= 0x0140 && wc < 0x0150) + c = cp936ext_page01[wc-0x0140]; + else if (wc >= 0x0250 && wc < 0x0268) + c = cp936ext_page02[wc-0x0250]; + else if (wc >= 0xfe30 && wc < 0xfe48) + c = cp936ext_pagefe[wc-0xfe30]; + if (c != 0) { + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/cp943.h b/jni/parted/libiconv/lib/cp943.h new file mode 100755 index 0000000..8fad5b1 --- /dev/null +++ b/jni/parted/libiconv/lib/cp943.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 1999-2001 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM CP943 + */ + +/* This is essentially CP932, with many mappings missing in the AIX conversion + table. We just pretend it were the same as CP932. */ + +#define cp943_mbtowc cp932_mbtowc +#define cp943_wctomb cp932_wctomb diff --git a/jni/parted/libiconv/lib/cp949.h b/jni/parted/libiconv/lib/cp949.h new file mode 100755 index 0000000..685ad74 --- /dev/null +++ b/jni/parted/libiconv/lib/cp949.h @@ -0,0 +1,127 @@ +/* + * Copyright (C) 1999-2001, 2005, 2007, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP949 is EUC-KR, extended with UHC (Unified Hangul Code). + * + * Some variants of CP949 (in JDK, Windows-2000, ICU) also add: + * + * 2. Private area mappings: + * + * code Unicode + * 0xC9{A1..FE} U+E000..U+E05D + * 0xFE{A1..FE} U+E05E..U+E0BB + * + * We add them too because, although there are backward compatibility problems + * when a character from a private area is moved to an official Unicode code + * point, they are useful for some people in practice. + */ + +#include "uhc_1.h" +#include "uhc_2.h" + +static int +cp949_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* UHC part 1 */ + if (c >= 0x81 && c <= 0xa0) + return uhc_1_mbtowc(conv,pwc,s,n); + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 < 0xa1) + /* UHC part 2 */ + return uhc_2_mbtowc(conv,pwc,s,n); + else if (c2 < 0xff && !(c == 0xa2 && c2 == 0xe8)) { + /* Code set 1 (KS C 5601-1992, now KS X 1001:1998) */ + unsigned char buf[2]; + int ret; + buf[0] = c-0x80; buf[1] = c2-0x80; + ret = ksc5601_mbtowc(conv,pwc,buf,2); + if (ret != RET_ILSEQ) + return ret; + /* User-defined characters */ + if (c == 0xc9) { + *pwc = 0xe000 + (c2 - 0xa1); + return 2; + } + if (c == 0xfe) { + *pwc = 0xe05e + (c2 - 0xa1); + return 2; + } + } + } + } + return RET_ILSEQ; +} + +static int +cp949_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (KS C 5601-1992, now KS X 1001:1998) */ + if (wc != 0x327e) { + ret = ksc5601_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]+0x80; + r[1] = buf[1]+0x80; + return 2; + } + } + + /* UHC */ + if (wc >= 0xac00 && wc < 0xd7a4) { + if (wc < 0xc8a5) + return uhc_1_wctomb(conv,r,wc,n); + else + return uhc_2_wctomb(conv,r,wc,n); + } + + /* User-defined characters */ + if (wc >= 0xe000 && wc < 0xe0bc) { + if (n < 2) + return RET_TOOSMALL; + if (wc < 0xe05e) { + r[0] = 0xc9; + r[1] = wc - 0xe000 + 0xa1; + } else { + r[0] = 0xfe; + r[1] = wc - 0xe05e + 0xa1; + } + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp950.h b/jni/parted/libiconv/lib/cp950.h new file mode 100755 index 0000000..f7452a8 --- /dev/null +++ b/jni/parted/libiconv/lib/cp950.h @@ -0,0 +1,283 @@ +/* + * Copyright (C) 1999-2001, 2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP950 + */ + +/* + * Microsoft CP950 is a slightly extended and slightly modified version of + * BIG5. The differences between the EASTASIA/OTHER/BIG5.TXT and + * VENDORS/MICSFT/WINDOWS/CP950.TXT tables found on ftp.unicode.org are + * as follows: + * + * 1. Some characters in the BIG5 range are defined differently: + * + * code BIG5.TXT CP950.TXT + * 0xA145 0x2022 # BULLET 0x2027 # HYPHENATION POINT + * 0xA14E 0xFF64 # HALFWIDTH IDEOGRAPHIC COMMA + * 0xFE51 # SMALL IDEOGRAPHIC COMMA + * 0xA15A --- 0x2574 # BOX DRAWINGS LIGHT LEFT + * 0xA1C2 0x203E # OVERLINE 0x00AF # MACRON + * 0xA1C3 --- 0xFFE3 # FULLWIDTH MACRON + * 0xA1C5 --- 0x02CD # MODIFIER LETTER LOW MACRON + * 0xA1E3 0x223C # TILDE OPERATOR 0xFF5E # FULLWIDTH TILDE + * 0xA1F2 0x2641 # EARTH 0x2295 # CIRCLED PLUS + * 0xA1F3 0x2609 # SUN 0x2299 # CIRCLED DOT OPERATOR + * 0xA1FE --- 0xFF0F # FULLWIDTH SOLIDUS + * 0xA240 --- 0xFF3C # FULLWIDTH REVERSE SOLIDUS + * 0xA241 0xFF0F # FULLWIDTH SOLIDUS 0x2215 # DIVISION SLASH + * 0xA242 0xFF3C # FULLWIDTH REVERSE SOLIDUS + * 0xFE68 # SMALL REVERSE SOLIDUS + * 0xA244 0x00A5 # YEN SIGN 0xFFE5 # FULLWIDTH YEN SIGN + * 0xA246 0x00A2 # CENT SIGN 0xFFE0 # FULLWIDTH CENT SIGN + * 0xA247 0x00A3 # POUND SIGN 0xFFE1 # FULLWIDTH POUND SIGN + * 0xA2CC --- 0x5341 + * 0xA2CE --- 0x5345 + * + * 2. A small new row. See cp950ext.h. + * + * 3. CP950.TXT is lacking the range 0xC6A1..0xC7FC (Hiragana, Katakana, + * Cyrillic, circled digits, parenthesized digits). + * + * We implement this omission, because said range is marked "uncertain" + * in the unicode.org BIG5 table. + * + * The table found on Microsoft's website furthermore adds: + * + * 4. A single character: + * + * code CP950.TXT + * 0xA3E1 0x20AC # EURO SIGN + * + * Many variants of BIG5 or CP950 (in JDK, Solaris, OSF/1, Windows-2000, ICU, + * as well as our BIG5-2003 converter) also add: + * + * 5. Private area mappings: + * + * code Unicode + * 0x{81..8D}{40..7E,A1..FE} U+EEB8..U+F6B0 + * 0x{8E..A0}{40..7E,A1..FE} U+E311..U+EEB7 + * 0x{FA..FE}{40..7E,A1..FE} U+E000..U+E310 + * + * We add them too because, although there are backward compatibility problems + * when a character from a private area is moved to an official Unicode code + * point, they are useful for some people in practice. + */ + +static const unsigned short cp950_2uni_pagea1[314] = { + /* 0xa1 */ + 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2027, 0xff1b, 0xff1a, + 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xfe51, 0xfe52, + 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31, + 0x2014, 0xfe33, 0x2574, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35, + 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39, + 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d, + 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41, + 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0xfe5b, + 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d, + 0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7, + 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605, + 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, 0x32a3, 0x2105, + 0x00af, 0xffe3, 0xff3f, 0x02cd, 0xfe49, 0xfe4a, 0xfe4d, 0xfe4e, + 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, 0xff0d, 0x00d7, + 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, 0x2266, 0x2267, + 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, 0xfe64, 0xfe65, + 0xfe66, 0xff5e, 0x2229, 0x222a, 0x22a5, 0x2220, 0x221f, 0x22bf, + 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, 0x2640, 0x2642, + 0x2295, 0x2299, 0x2191, 0x2193, 0x2190, 0x2192, 0x2196, 0x2197, + 0x2199, 0x2198, 0x2225, 0x2223, 0xff0f, + /* 0xa2 */ + 0xff3c, 0x2215, 0xfe68, 0xff04, 0xffe5, 0x3012, 0xffe0, 0xffe1, + 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5, + 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4, + 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7, + 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, + 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a, + 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500, + 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x256e, + 0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561, 0x25e2, 0x25e3, + 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10, 0xff11, 0xff12, + 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0x2160, + 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, + 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, + 0x3028, 0x3029, 0x5341, 0x5344, 0x5345, 0xff21, 0xff22, 0xff23, + 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, + 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, + 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff41, + 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, + 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, + 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, +}; + +#include "cp950ext.h" + +static int +cp950_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (BIG5 extended) */ + if (c >= 0x81 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + if (c >= 0xa1) { + if (c < 0xa3) { + unsigned int i = 157 * (c - 0xa1) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + unsigned short wc = cp950_2uni_pagea1[i]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + if (!((c == 0xc6 && c2 >= 0xa1) || c == 0xc7)) { + int ret = big5_mbtowc(conv,pwc,s,2); + if (ret != RET_ILSEQ) + return ret; + } + if (c == 0xa3 && c2 == 0xe1) { + *pwc = 0x20ac; + return 2; + } + if (c >= 0xfa) { + /* User-defined characters */ + *pwc = 0xe000 + 157 * (c - 0xfa) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + return 2; + } + } else { + /* 0x81 <= c < 0xa1. */ + /* User-defined characters */ + *pwc = (c >= 0x8e ? 0xdb18 : 0xeeb8) + 157 * (c - 0x81) + + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + return 2; + } + } + } + if (c == 0xf9) { + int ret = cp950ext_mbtowc(conv,pwc,s,2); + if (ret != RET_ILSEQ) + return ret; + } + } + return RET_ILSEQ; +} + +static int +cp950_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (BIG5 extended) */ + switch (wc >> 8) { + case 0x00: + if (wc == 0x00af) { buf[0] = 0xa1; buf[1] = 0xc2; ret = 2; break; } + if (wc == 0x00a2 || wc == 0x00a3 || wc == 0x00a4) + return RET_ILUNI; + break; + case 0x02: + if (wc == 0x02cd) { buf[0] = 0xa1; buf[1] = 0xc5; ret = 2; break; } + break; + case 0x20: + if (wc == 0x2027) { buf[0] = 0xa1; buf[1] = 0x45; ret = 2; break; } + if (wc == 0x20ac) { buf[0] = 0xa3; buf[1] = 0xe1; ret = 2; break; } + if (wc == 0x2022 || wc == 0x203e) + return RET_ILUNI; + break; + case 0x22: + if (wc == 0x2215) { buf[0] = 0xa2; buf[1] = 0x41; ret = 2; break; } + if (wc == 0x2295) { buf[0] = 0xa1; buf[1] = 0xf2; ret = 2; break; } + if (wc == 0x2299) { buf[0] = 0xa1; buf[1] = 0xf3; ret = 2; break; } + if (wc == 0x223c) + return RET_ILUNI; + break; + case 0x25: + if (wc == 0x2574) { buf[0] = 0xa1; buf[1] = 0x5a; ret = 2; break; } + break; + case 0x26: + if (wc == 0x2609 || wc == 0x2641) + return RET_ILUNI; + break; + case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: + case 0xe6: case 0xe7: case 0xe8: case 0xe9: case 0xea: case 0xeb: + case 0xec: case 0xed: case 0xee: case 0xef: case 0xf0: case 0xf1: + case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: + { + /* User-defined characters */ + unsigned int i = wc - 0xe000; + if (i < 5809) { + unsigned int c1 = i / 157; + unsigned int c2 = i % 157; + buf[0] = c1 + (c1 < 5 ? 0xfa : c1 < 24 ? 0x89 : 0x69); + buf[1] = c2 + (c2 < 0x3f ? 0x40 : 0x62); + ret = 2; + break; + } + } + break; + case 0xfe: + if (wc == 0xfe51) { buf[0] = 0xa1; buf[1] = 0x4e; ret = 2; break; } + if (wc == 0xfe68) { buf[0] = 0xa2; buf[1] = 0x42; ret = 2; break; } + break; + case 0xff: + if (wc == 0xff0f) { buf[0] = 0xa1; buf[1] = 0xfe; ret = 2; break; } + if (wc == 0xff3c) { buf[0] = 0xa2; buf[1] = 0x40; ret = 2; break; } + if (wc == 0xff5e) { buf[0] = 0xa1; buf[1] = 0xe3; ret = 2; break; } + if (wc == 0xffe0) { buf[0] = 0xa2; buf[1] = 0x46; ret = 2; break; } + if (wc == 0xffe1) { buf[0] = 0xa2; buf[1] = 0x47; ret = 2; break; } + if (wc == 0xffe3) { buf[0] = 0xa1; buf[1] = 0xc3; ret = 2; break; } + if (wc == 0xffe5) { buf[0] = 0xa2; buf[1] = 0x44; ret = 2; break; } + if (wc == 0xff64) + return RET_ILUNI; + break; + } + if (ret == RET_ILUNI) + ret = big5_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (!((buf[0] == 0xc6 && buf[1] >= 0xa1) || buf[0] == 0xc7)) { + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + } + ret = cp950ext_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/cp950ext.h b/jni/parted/libiconv/lib/cp950ext.h new file mode 100755 index 0000000..142db6b --- /dev/null +++ b/jni/parted/libiconv/lib/cp950ext.h @@ -0,0 +1,160 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * CP950 extensions + */ + +static const unsigned short cp950ext_2uni_pagef9[157-116] = { + /* 0xf9 */ + 0x7881, 0x92b9, 0x88cf, 0x58bb, + 0x6052, 0x7ca7, 0x5afa, 0x2554, 0x2566, 0x2557, 0x2560, 0x256c, + 0x2563, 0x255a, 0x2569, 0x255d, 0x2552, 0x2564, 0x2555, 0x255e, + 0x256a, 0x2561, 0x2558, 0x2567, 0x255b, 0x2553, 0x2565, 0x2556, + 0x255f, 0x256b, 0x2562, 0x2559, 0x2568, 0x255c, 0x2551, 0x2550, + 0x256d, 0x256e, 0x2570, 0x256f, 0x2593, +}; + +static int +cp950ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if (c1 == 0xf9) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + unsigned int i = 157 * (c1 - 0xa1) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + unsigned short wc = 0xfffd; + { + if (i >= 13932 && i < 13973) + wc = cp950ext_2uni_pagef9[i-13932]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short cp950ext_2charset[41] = { + 0xf9f9, 0xf9f8, 0xf9e6, 0xf9ef, 0xf9dd, 0xf9e8, 0xf9f1, 0xf9df, + 0xf9ec, 0xf9f5, 0xf9e3, 0xf9ee, 0xf9f7, 0xf9e5, 0xf9e9, 0xf9f2, + 0xf9e0, 0xf9eb, 0xf9f4, 0xf9e2, 0xf9e7, 0xf9f0, 0xf9de, 0xf9ed, + 0xf9f6, 0xf9e4, 0xf9ea, 0xf9f3, 0xf9e1, 0xf9fa, 0xf9fb, 0xf9fd, + 0xf9fc, 0xf9fe, 0xf9d9, 0xf9dc, 0xf9da, 0xf9d6, 0xf9db, 0xf9d8, + 0xf9d7, +}; + +static const Summary16 cp950ext_uni2indx_page25[10] = { + /* 0x2500 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0xffff }, { 16, 0xffff }, { 32, 0x0001 }, + { 33, 0x0000 }, { 33, 0x0008 }, +}; +static const Summary16 cp950ext_uni2indx_page58[12] = { + /* 0x5800 */ + { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, + { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, + { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0800 }, +}; +static const Summary16 cp950ext_uni2indx_page5a[16] = { + /* 0x5a00 */ + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0400 }, +}; +static const Summary16 cp950ext_uni2indx_page60[6] = { + /* 0x6000 */ + { 36, 0x0000 }, { 36, 0x0000 }, { 36, 0x0000 }, { 36, 0x0000 }, + { 36, 0x0000 }, { 36, 0x0004 }, +}; +static const Summary16 cp950ext_uni2indx_page78[9] = { + /* 0x7800 */ + { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, + { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, + { 37, 0x0002 }, +}; +static const Summary16 cp950ext_uni2indx_page7c[11] = { + /* 0x7c00 */ + { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0000 }, + { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0000 }, + { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0080 }, +}; +static const Summary16 cp950ext_uni2indx_page88[13] = { + /* 0x8800 */ + { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, + { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, + { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, + { 39, 0x8000 }, +}; +static const Summary16 cp950ext_uni2indx_page92[12] = { + /* 0x9200 */ + { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, + { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, + { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0200 }, +}; + +static int +cp950ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x2500 && wc < 0x25a0) + summary = &cp950ext_uni2indx_page25[(wc>>4)-0x250]; + else if (wc >= 0x5800 && wc < 0x58c0) + summary = &cp950ext_uni2indx_page58[(wc>>4)-0x580]; + else if (wc >= 0x5a00 && wc < 0x5b00) + summary = &cp950ext_uni2indx_page5a[(wc>>4)-0x5a0]; + else if (wc >= 0x6000 && wc < 0x6060) + summary = &cp950ext_uni2indx_page60[(wc>>4)-0x600]; + else if (wc >= 0x7800 && wc < 0x7890) + summary = &cp950ext_uni2indx_page78[(wc>>4)-0x780]; + else if (wc >= 0x7c00 && wc < 0x7cb0) + summary = &cp950ext_uni2indx_page7c[(wc>>4)-0x7c0]; + else if (wc >= 0x8800 && wc < 0x88d0) + summary = &cp950ext_uni2indx_page88[(wc>>4)-0x880]; + else if (wc >= 0x9200 && wc < 0x92c0) + summary = &cp950ext_uni2indx_page92[(wc>>4)-0x920]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = cp950ext_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/dec_hanyu.h b/jni/parted/libiconv/lib/dec_hanyu.h new file mode 100755 index 0000000..10dd108 --- /dev/null +++ b/jni/parted/libiconv/lib/dec_hanyu.h @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2001, 2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * DEC-HANYU + */ + +static int +dec_hanyu_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (CNS 11643-1992 Plane 1), + Code set 2 (CNS 11643-1992 Plane 2), + Code set 3 (CNS 11643-1992 Plane 3) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c == 0xc2 && c2 == 0xcb) { + if (n < 4) + return RET_TOOFEW(0); + if (s[2] >= 0xa1 && s[2] < 0xff && s[3] >= 0xa1 && s[3] < 0xff) { + unsigned char buf[2]; + int ret; + buf[0] = s[2]-0x80; buf[1] = s[3]-0x80; + ret = cns11643_3_mbtowc(conv,pwc,buf,2); + if (ret != RET_ILSEQ) { + if (ret != 2) abort(); + return 4; + } + } + } else if (c2 >= 0xa1 && c2 < 0xff) { + if (c != 0xc2 || c2 < 0xc2) { + unsigned char buf[2]; + buf[0] = c-0x80; buf[1] = c2-0x80; + return cns11643_1_mbtowc(conv,pwc,buf,2); + } + } else if (c2 >= 0x21 && c2 < 0x7f) { + unsigned char buf[2]; + buf[0] = c-0x80; buf[1] = c2; + return cns11643_2_mbtowc(conv,pwc,buf,2); + } + } + } + return RET_ILSEQ; +} + +static int +dec_hanyu_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[3]; + int ret; + + /* Code set 0 (ASCII) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + ret = cns11643_wctomb(conv,buf,wc,3); + if (ret != RET_ILUNI) { + if (ret != 3) abort(); + + /* Code set 1 (CNS 11643-1992 Plane 1) */ + if (buf[0] == 1 && (buf[1] != 0x42 || buf[2] < 0x42)) { + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[1]+0x80; + r[1] = buf[2]+0x80; + return 2; + } + + /* Code set 2 (CNS 11643-1992 Plane 2) */ + if (buf[0] == 2) { + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[1]+0x80; + r[1] = buf[2]; + return 2; + } + + /* Code set 3 (CNS 11643-1992 Plane 3) */ + if (buf[0] == 3) { + if (n < 4) + return RET_TOOSMALL; + r[0] = 0xc2; + r[1] = 0xcb; + r[2] = buf[1]+0x80; + r[3] = buf[2]+0x80; + return 4; + } + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/dec_kanji.h b/jni/parted/libiconv/lib/dec_kanji.h new file mode 100755 index 0000000..522b798 --- /dev/null +++ b/jni/parted/libiconv/lib/dec_kanji.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * DEC-KANJI + */ + +static int +dec_kanji_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII or JIS X 0201-1976 Roman) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (JIS X 0208) */ + if (c >= 0xa1 && c < 0xf5) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 < 0xff) { + unsigned char buf[2]; + buf[0] = c-0x80; buf[1] = c2-0x80; + return jisx0208_mbtowc(conv,pwc,buf,2); + } + } + } + return RET_ILSEQ; +} + +static int +dec_kanji_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII or JIS X 0201-1976 Roman) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (JIS X 0208) */ + ret = jisx0208_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]+0x80; + r[1] = buf[1]+0x80; + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic037.h b/jni/parted/libiconv/lib/ebcdic037.h new file mode 100755 index 0000000..2de9805 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic037.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-037 + */ + +static const unsigned short ebcdic037_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x005e, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005b, 0x005d, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic037_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic037_2uni[c]; + return 1; +} + +static const unsigned char ebcdic037_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic037_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic037_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1025.h b/jni/parted/libiconv/lib/ebcdic1025.h new file mode 100755 index 0000000..28dcb2b --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1025.h @@ -0,0 +1,141 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1025 + */ + +static const unsigned short ebcdic1025_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, + 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a, + 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430, + 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, + /* 0x90 */ + 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xa0 */ + 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + /* 0xb0 */ + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421, + /* 0xe0 */ + 0x005c, 0x00a7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f, +}; + +static int +ebcdic1025_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1025_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1025_page00[176] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */ +}; +#if DEDUPLICATE_TABLES +#define ebcdic1025_page04 ebcdic880_page04 +#else /* Unoptimized */ +static const unsigned char ebcdic1025_page04[96] = { + 0x00, 0x63, 0x59, 0x62, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */ + 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */ + 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */ + 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */ + 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */ + 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */ + 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */ + 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */ + 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */ + 0x00, 0x44, 0x42, 0x43, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */ + 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */ +}; +#endif + +static int +ebcdic1025_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00b0) + c = ebcdic1025_page00[wc]; + else if (wc >= 0x0400 && wc < 0x0460) + c = ebcdic1025_page04[wc-0x0400]; + else if (wc == 0x2116) + c = 0x58; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1026.h b/jni/parted/libiconv/lib/ebcdic1026.h new file mode 100755 index 0000000..b4f2dc0 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1026.h @@ -0,0 +1,142 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1026 + */ + +static const unsigned short ebcdic1026_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x007b, 0x00f1, 0x00c7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x011e, 0x0130, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x005b, 0x00d1, 0x015f, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0131, 0x003a, 0x00d6, 0x015e, 0x0027, 0x003d, 0x00dc, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x007d, 0x0060, 0x00a6, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x005d, 0x0024, 0x0040, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e7, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x011f, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x005c, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00fc, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0023, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x0022, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1026_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1026_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1026_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0xfc, 0xec, 0xad, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xae, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x68, 0xdc, 0xac, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x8d, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x48, 0xbb, 0x8c, 0xcc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x8e, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x4a, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0x00, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7b, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0x7f, 0x00, 0x00, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xc0, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x00, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xa1, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xe0, 0x00, 0x00, 0xdf, /* 0xf8-0xff */ +}; +static const unsigned char ebcdic1026_page01[72] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xd0, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x5b, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x6a, /* 0x58-0x5f */ +}; + +static int +ebcdic1026_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1026_page00[wc]; + else if (wc >= 0x0118 && wc < 0x0160) + c = ebcdic1026_page01[wc-0x0118]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1047.h b/jni/parted/libiconv/lib/ebcdic1047.h new file mode 100755 index 0000000..1c9bc95 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1047.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1047 + */ + +static const unsigned short ebcdic1047_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x005b, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00ac, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00dd, 0x00a8, 0x00af, 0x005d, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1047_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1047_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1047_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1047_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1047_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1097.h b/jni/parted/libiconv/lib/ebcdic1097.h new file mode 100755 index 0000000..cb23176 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1097.h @@ -0,0 +1,186 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1097 + */ + +static const unsigned short ebcdic1097_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x060c, 0x064b, 0xfe81, 0xfe82, 0xf8fa, 0xfe8d, + 0xfe8e, 0xf8fb, 0x00a4, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0xfe80, 0xfe83, 0xfe84, 0xf8f9, 0xfe85, 0xfe8b, 0xfe8f, + 0xfe91, 0xfb56, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0xfb58, 0xfe95, 0xfe97, 0xfe99, 0xfe9b, 0xfe9d, + 0xfe9f, 0xfb7a, 0x061b, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0xfb7c, 0xfea1, 0xfea3, 0xfea5, 0xfea7, 0xfea9, 0xfeab, 0xfead, + 0xfeaf, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0xfb8a, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0xfeb1, 0xfeb3, 0xfeb5, 0xfeb7, + /* 0x90 */ + 0xfeb9, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0xfebb, 0xfebd, 0xfebf, 0xfec1, 0xfec3, 0xfec5, + /* 0xa0 */ + 0xfec7, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0xfec9, 0xfeca, 0xfecb, 0xfecc, 0xfecd, 0xfece, + /* 0xb0 */ + 0xfecf, 0xfed0, 0xfed1, 0xfed3, 0xfed5, 0xfed7, 0xfb8e, 0xfedb, + 0xfb92, 0xfb94, 0x005b, 0x005d, 0xfedd, 0xfedf, 0xfee1, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0xfee3, 0xfee5, 0xfee7, 0xfeed, 0xfee9, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0xfeeb, 0xfeec, 0xfba4, 0xfbfc, 0xfbfd, 0xfbfe, + /* 0xe0 */ + 0x005c, 0x061f, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0640, 0x06f0, 0x06f1, 0x06f2, 0x06f3, 0x06f4, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x06f5, 0x06f6, 0x06f7, 0x06f8, 0x06f9, 0x009f, +}; + +static int +ebcdic1097_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1097_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1097_page00[216] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0x00, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x8a, 0x5f, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xd0-0xd7 */ +}; +static const unsigned char ebcdic1097_page06[72] = { + 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0xe1, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ +}; +static const unsigned char ebcdic1097_page06_1[16] = { + 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, /* 0xf0-0xf7 */ + 0xfd, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char ebcdic1097_pagef8[8] = { + 0x00, 0x54, 0x46, 0x49, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char ebcdic1097_pagefb[88] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x00, /* 0x50-0x57 */ + 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x69, 0x00, 0x70, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb6, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0xb8, 0x00, 0xb9, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; +static const unsigned char ebcdic1097_pagefb_2[8] = { + 0x00, 0x00, 0x00, 0x00, 0xdd, 0xde, 0xdf, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char ebcdic1097_pagefe[112] = { + 0x51, 0x44, 0x45, 0x52, 0x53, 0x55, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x56, 0x00, 0x47, 0x48, 0x57, /* 0x88-0x8f */ + 0x00, 0x58, 0x00, 0x00, 0x00, 0x63, 0x00, 0x64, /* 0x90-0x97 */ + 0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, /* 0x98-0x9f */ + 0x00, 0x71, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, /* 0xa0-0xa7 */ + 0x00, 0x75, 0x00, 0x76, 0x00, 0x77, 0x00, 0x78, /* 0xa8-0xaf */ + 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f, /* 0xb0-0xb7 */ + 0x00, 0x90, 0x00, 0x9a, 0x00, 0x9b, 0x00, 0x9c, /* 0xb8-0xbf */ + 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, /* 0xc0-0xc7 */ + 0x00, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, /* 0xc8-0xcf */ + 0xb1, 0xb2, 0x00, 0xb3, 0x00, 0xb4, 0x00, 0xb5, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0xb7, 0x00, 0xbc, 0x00, 0xbd, /* 0xd8-0xdf */ + 0x00, 0xbe, 0x00, 0xcb, 0x00, 0xcc, 0x00, 0xcd, /* 0xe0-0xe7 */ + 0x00, 0xcf, 0x00, 0xda, 0xdb, 0xce, 0x00, 0x00, /* 0xe8-0xef */ +}; + +static int +ebcdic1097_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00d8) + c = ebcdic1097_page00[wc]; + else if (wc >= 0x0608 && wc < 0x0650) + c = ebcdic1097_page06[wc-0x0608]; + else if (wc >= 0x06f0 && wc < 0x0700) + c = ebcdic1097_page06_1[wc-0x06f0]; + else if (wc >= 0xf8f8 && wc < 0xf900) + c = ebcdic1097_pagef8[wc-0xf8f8]; + else if (wc >= 0xfb50 && wc < 0xfba8) + c = ebcdic1097_pagefb[wc-0xfb50]; + else if (wc >= 0xfbf8 && wc < 0xfc00) + c = ebcdic1097_pagefb_2[wc-0xfbf8]; + else if (wc >= 0xfe80 && wc < 0xfef0) + c = ebcdic1097_pagefe[wc-0xfe80]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1112.h b/jni/parted/libiconv/lib/ebcdic1112.h new file mode 100755 index 0000000..7ee8e4a --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1112.h @@ -0,0 +1,151 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1112 + */ + +static const unsigned short ebcdic1112_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0161, 0x00e4, 0x0105, 0x012f, 0x016b, 0x00e5, + 0x0113, 0x017e, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x0119, 0x0117, 0x010d, 0x0173, 0x201e, 0x201c, + 0x0123, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x0160, 0x00c4, 0x0104, 0x012e, 0x016a, 0x00c5, + 0x0112, 0x017d, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x0118, 0x0116, 0x010c, 0x0172, 0x012a, 0x013b, + 0x0122, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0101, 0x017c, 0x0144, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0156, 0x0157, 0x00e6, 0x0137, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x201d, 0x017a, 0x0100, 0x017b, 0x0143, 0x00ae, + /* 0xb0 */ + 0x005e, 0x00a3, 0x012b, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005b, 0x005d, 0x0179, 0x0136, 0x013c, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x014d, 0x00f6, 0x0146, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x0107, 0x00fc, 0x0142, 0x015b, 0x2019, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x014c, 0x00d6, 0x0145, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x0106, 0x00dc, 0x0141, 0x015a, 0x009f, +}; + +static int +ebcdic1112_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1112_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1112_page00[384] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x4a, 0xb1, 0x9f, 0x00, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0x00, 0xb4, 0x00, 0x8a, 0x5f, 0xca, 0xaf, 0x00, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x00, 0xda, 0x00, 0x8b, 0xb7, 0xb8, 0xb9, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x9e, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xee, 0x00, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x59, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x43, 0x47, 0x9c, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xce, 0x00, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0xac, 0x8c, 0x00, 0x00, 0x64, 0x44, 0xfb, 0xdb, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x68, 0x48, 0x00, 0x00, 0x73, 0x53, /* 0x10-0x17 */ + 0x72, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x78, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x76, 0xb2, 0x00, 0x00, 0x65, 0x45, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x9d, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x77, 0xbe, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0xfd, 0xdd, 0xae, 0x8e, 0xed, 0xcd, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xeb, 0xcb, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x9b, /* 0x50-0x57 */ + 0x00, 0x00, 0xfe, 0xde, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x62, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x75, 0x55, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xbc, 0xab, 0xad, 0x8d, 0x69, 0x49, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char ebcdic1112_page20[8] = { + 0x00, 0xdf, 0x00, 0x00, 0x57, 0xaa, 0x56, 0x00, /* 0x18-0x1f */ +}; + +static int +ebcdic1112_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0180) + c = ebcdic1112_page00[wc]; + else if (wc >= 0x2018 && wc < 0x2020) + c = ebcdic1112_page20[wc-0x2018]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1122.h b/jni/parted/libiconv/lib/ebcdic1122.h new file mode 100755 index 0000000..2b97ac3 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1122.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1122 + */ + +static const unsigned short ebcdic1122_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x007d, + 0x00e7, 0x00f1, 0x00a7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x0060, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x00a4, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x0023, 0x00c0, 0x00c1, 0x00c3, 0x0024, + 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x005c, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00e9, 0x003a, 0x00c4, 0x00d6, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0161, 0x00fd, 0x017e, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x005d, + /* 0xa0 */ + 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0160, 0x00dd, 0x017d, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x005b, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00c9, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0040, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1122_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1122_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1122_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x63, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xec, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xb5, 0x71, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x51, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x5a, 0xb2, 0xcc, 0x4a, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x7b, 0x5b, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0xe0, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0x00, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7c, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0x00, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0xc0, 0xd0, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x79, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x00, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x00, 0xdf, /* 0xf8-0xff */ +}; +static const unsigned char ebcdic1122_page01[32] = { + 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x8e, 0x00, /* 0x78-0x7f */ +}; + +static int +ebcdic1122_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1122_page00[wc]; + else if (wc >= 0x0160 && wc < 0x0180) + c = ebcdic1122_page01[wc-0x0160]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1123.h b/jni/parted/libiconv/lib/ebcdic1123.h new file mode 100755 index 0000000..bcd1952 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1123.h @@ -0,0 +1,148 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1123 + */ + +static const unsigned short ebcdic1123_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0452, 0x0491, 0x0451, 0x0454, 0x0455, 0x0456, + 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a, + 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x0490, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430, + 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, + /* 0x90 */ + 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xa0 */ + 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + /* 0xb0 */ + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421, + /* 0xe0 */ + 0x005c, 0x00a7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f, +}; + +static int +ebcdic1123_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1123_2uni[c]; + return 1; +} + +#if DEDUPLICATE_TABLES +#define ebcdic1123_page00 ebcdic1025_page00 +#else /* Unoptimized */ +static const unsigned char ebcdic1123_page00[176] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */ +}; +#endif +static const unsigned char ebcdic1123_page04[152] = { + 0x00, 0x63, 0x59, 0x00, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */ + 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */ + 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */ + 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */ + 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */ + 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */ + 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */ + 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */ + 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */ + 0x00, 0x44, 0x42, 0x00, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */ + 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x62, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static int +ebcdic1123_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00b0) + c = ebcdic1123_page00[wc]; + else if (wc >= 0x0400 && wc < 0x0498) + c = ebcdic1123_page04[wc-0x0400]; + else if (wc == 0x2116) + c = 0x58; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1130.h b/jni/parted/libiconv/lib/ebcdic1130.h new file mode 100755 index 0000000..ad9c8b4 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1130.h @@ -0,0 +1,164 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1130 + */ + +static const unsigned short ebcdic1130_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x0103, 0x00e5, + 0x00e7, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x0303, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x0102, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x20ab, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0111, 0x0309, 0x0300, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x0152, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0110, 0x0323, 0x0301, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x0153, 0x0178, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x01b0, 0x00f3, 0x01a1, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x01af, 0x00d3, 0x01a0, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1130_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1130_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1130_page00[440] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0x00, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x00, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x00, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x00, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0x00, 0x69, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0x00, 0x00, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x00, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x00, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x00, 0x49, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x9d, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xef, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, /* 0xa8-0xaf */ + 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ +}; +static const unsigned char ebcdic1130_page03[40] = { + 0x8e, 0xae, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static int +ebcdic1130_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x01b8) + c = ebcdic1130_page00[wc]; + else if (wc >= 0x0300 && wc < 0x0328) + c = ebcdic1130_page03[wc-0x0300]; + else if (wc == 0x20ab) + c = 0x78; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1132.h b/jni/parted/libiconv/lib/ebcdic1132.h new file mode 100755 index 0000000..1a6e91c --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1132.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1132 + */ + +static const unsigned short ebcdic1132_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0e81, 0x0e82, 0x0e84, 0x0e87, 0x0e88, 0x0eaa, + 0x0e8a, 0x005b, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0xfffd, 0x0e8d, 0x0e94, 0x0e95, 0x0e96, 0x0e97, 0x0e99, + 0x0e9a, 0x005d, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x0e9b, 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f, 0x0ea1, + 0x0ea2, 0x005e, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x20ad, 0xfffd, 0x0ea3, 0x0ea5, 0x0ea7, 0x0eab, 0x0ead, 0x0eae, + 0xfffd, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0xfffd, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0xfffd, 0xfffd, 0x0eaf, 0x0eb0, 0x0eb2, 0x0eb3, + /* 0x90 */ + 0xfffd, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, 0x0eb8, 0x0eb9, + /* 0xa0 */ + 0xfffd, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0ebc, 0x0eb1, 0x0ebb, 0x0ebd, 0xfffd, 0xfffd, + /* 0xb0 */ + 0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7, + 0x0ed8, 0x0ed9, 0xfffd, 0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0xfffd, 0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x0ecd, 0x0ec6, 0xfffd, 0x0edc, 0x0edd, 0xfffd, + /* 0xe0 */ + 0x005c, 0xfffd, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x009f, +}; + +static int +ebcdic1132_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic1132_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +#if DEDUPLICATE_TABLES +#define ebcdic1132_page00 ebcdic838_page00 +#else /* Unoptimized */ +static const unsigned char ebcdic1132_page00[176] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x49, 0xe0, 0x59, 0x69, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x6a, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; +#endif +static const unsigned char ebcdic1132_page0e[96] = { + 0x00, 0x42, 0x43, 0x00, 0x44, 0x00, 0x00, 0x45, /* 0x80-0x87 */ + 0x46, 0x00, 0x48, 0x00, 0x00, 0x52, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, /* 0x90-0x97 */ + 0x00, 0x57, 0x58, 0x62, 0x63, 0x64, 0x65, 0x66, /* 0x98-0x9f */ + 0x00, 0x67, 0x68, 0x72, 0x00, 0x73, 0x00, 0x74, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x47, 0x75, 0x00, 0x76, 0x77, 0x8c, /* 0xa8-0xaf */ + 0x8d, 0xab, 0x8e, 0x8f, 0x9a, 0x9b, 0x9c, 0x9d, /* 0xb0-0xb7 */ + 0x9e, 0x9f, 0x00, 0xac, 0xaa, 0xad, 0x00, 0x00, /* 0xb8-0xbf */ + 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0x00, 0xdb, 0x00, /* 0xc0-0xc7 */ + 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0x00, 0x00, /* 0xc8-0xcf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xd0-0xd7 */ + 0xb8, 0xb9, 0x00, 0x00, 0xdd, 0xde, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static int +ebcdic1132_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00b0) + c = ebcdic1132_page00[wc]; + else if (wc >= 0x0e80 && wc < 0x0ee0) + c = ebcdic1132_page0e[wc-0x0e80]; + else if (wc == 0x20ad) + c = 0x70; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1137.h b/jni/parted/libiconv/lib/ebcdic1137.h new file mode 100755 index 0000000..19b28a7 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1137.h @@ -0,0 +1,146 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1137 + */ + +static const unsigned short ebcdic1137_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0901, 0x0902, 0x0903, 0x0905, 0x0906, 0x0907, + 0x0908, 0x0909, 0x090a, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x090b, 0x090c, 0x090d, 0x090e, 0x090f, 0x0910, 0x0911, + 0x0912, 0x0913, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x0914, 0x0915, 0x0916, 0x0917, 0x0918, 0x0919, + 0x091a, 0x091b, 0x091c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x091d, 0x091e, 0x091f, 0x0920, 0x0921, 0x0922, 0x0923, 0x0924, + 0x0925, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0926, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0927, 0x0928, 0x092a, 0x092b, 0x092c, 0x092d, + /* 0x90 */ + 0x092e, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x092f, 0x0930, 0x0932, 0x0933, 0x0935, 0x0936, + /* 0xa0 */ + 0x200c, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0937, 0x0938, 0x0939, 0x005b, 0x093c, 0x093d, + /* 0xb0 */ + 0x093e, 0x093f, 0x0940, 0x0941, 0x0942, 0x0943, 0x0944, 0x0945, + 0x0946, 0x0947, 0x0948, 0x0949, 0x094a, 0x005d, 0x094b, 0x094c, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x094d, 0x0950, 0x0951, 0x0952, 0xfffd, 0xfffd, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x0960, 0x0961, 0x0962, 0x0963, 0x0964, 0x0965, + /* 0xe0 */ + 0x005c, 0x200d, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0966, 0x0967, 0x0968, 0x0969, 0x096a, 0x096b, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x096c, 0x096d, 0x096e, 0x096f, 0x0970, 0x009f, +}; + +static int +ebcdic1137_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic1137_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char ebcdic1137_page00[168] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; +static const unsigned char ebcdic1137_page09[120] = { + 0x00, 0x42, 0x43, 0x44, 0x00, 0x45, 0x46, 0x47, /* 0x00-0x07 */ + 0x48, 0x49, 0x4a, 0x51, 0x52, 0x53, 0x54, 0x55, /* 0x08-0x0f */ + 0x56, 0x57, 0x58, 0x59, 0x62, 0x63, 0x64, 0x65, /* 0x10-0x17 */ + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x70, 0x71, 0x72, /* 0x18-0x1f */ + 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x80, 0x8a, /* 0x20-0x27 */ + 0x8b, 0x00, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x9a, /* 0x28-0x2f */ + 0x9b, 0x00, 0x9c, 0x9d, 0x00, 0x9e, 0x9f, 0xaa, /* 0x30-0x37 */ + 0xab, 0xac, 0x00, 0x00, 0xae, 0xaf, 0xb0, 0xb1, /* 0x38-0x3f */ + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, /* 0x40-0x47 */ + 0xba, 0xbb, 0xbc, 0xbe, 0xbf, 0xca, 0x00, 0x00, /* 0x48-0x4f */ + 0xcb, 0xcc, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, /* 0x60-0x67 */ + 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, /* 0x68-0x6f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ +}; +static const unsigned char ebcdic1137_page20[8] = { + 0x00, 0x00, 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, /* 0x08-0x0f */ +}; + +static int +ebcdic1137_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a8) + c = ebcdic1137_page00[wc]; + else if (wc >= 0x0900 && wc < 0x0978) + c = ebcdic1137_page09[wc-0x0900]; + else if (wc >= 0x2008 && wc < 0x2010) + c = ebcdic1137_page20[wc-0x2008]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1140.h b/jni/parted/libiconv/lib/ebcdic1140.h new file mode 100755 index 0000000..f10c1cf --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1140.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1140 + */ + +static const unsigned short ebcdic1140_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x005e, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005b, 0x005d, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1140_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1140_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1140_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0x4a, 0xb1, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1140_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1140_page00[wc]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1141.h b/jni/parted/libiconv/lib/ebcdic1141.h new file mode 100755 index 0000000..94a1bba --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1141.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1141 + */ + +static const unsigned short ebcdic1141_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x00c4, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x007e, 0x00dc, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x005b, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x00a7, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x00df, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x0040, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00fc, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007d, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00d6, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x005c, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x005d, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1141_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1141_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1141_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xb5, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x63, 0xec, 0xfc, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0xdc, 0x59, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0xcc, 0x7c, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x4a, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xe0, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0x5a, 0xad, 0xae, 0xa1, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0xc0, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xd0, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1141_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1141_page00[wc]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1142.h b/jni/parted/libiconv/lib/ebcdic1142.h new file mode 100755 index 0000000..4676d66 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1142.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1142 + */ + +static const unsigned short ebcdic1142_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x007d, + 0x00e7, 0x00f1, 0x0023, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x20ac, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x0024, + 0x00c7, 0x00d1, 0x00f8, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00a6, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x00c6, 0x00d8, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x007b, 0x00b8, 0x005b, 0x005d, + /* 0xa0 */ + 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e6, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1142_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1142_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1142_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x4a, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x80, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x9e, 0xe0, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x9c, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x70, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x5b, 0x7b, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x7c, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0xd0, 0xc0, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x6a, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1142_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1142_page00[wc]; + else if (wc == 0x20ac) + c = 0x5a; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1143.h b/jni/parted/libiconv/lib/ebcdic1143.h new file mode 100755 index 0000000..e602466 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1143.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1143 + */ + +static const unsigned short ebcdic1143_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x007d, + 0x00e7, 0x00f1, 0x00a7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x0060, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x20ac, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x0023, 0x00c0, 0x00c1, 0x00c3, 0x0024, + 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x005c, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00e9, 0x003a, 0x00c4, 0x00d6, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x005d, + /* 0xa0 */ + 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x005b, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00c9, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0040, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1143_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1143_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1143_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x63, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xec, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xb5, 0x71, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x51, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0xcc, 0x4a, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x7b, 0x5b, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0xe0, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7c, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0xc0, 0xd0, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x79, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1143_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1143_page00[wc]; + else if (wc == 0x20ac) + c = 0x5a; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1144.h b/jni/parted/libiconv/lib/ebcdic1144.h new file mode 100755 index 0000000..5d63eb8 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1144.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1144 + */ + +static const unsigned short ebcdic1144_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x007b, 0x00e1, 0x00e3, 0x00e5, + 0x005c, 0x00f1, 0x00b0, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x005d, 0x00ea, 0x00eb, 0x007d, 0x00ed, 0x00ee, 0x00ef, + 0x007e, 0x00df, 0x00e9, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00f2, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00f9, 0x003a, 0x00a3, 0x00a7, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x005b, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x00ec, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x0023, 0x00a5, 0x00b7, 0x00a9, 0x0040, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e0, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00a6, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e8, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x0060, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00e7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1144_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1144_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1144_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0xb1, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xb5, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x90, 0x48, 0x51, 0x5f, 0x6d, /* 0x58-0x5f */ + 0xdd, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x44, 0xbb, 0x54, 0x58, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0x7b, 0x00, 0xb2, 0xcd, 0x7c, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x4a, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0xc0, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xe0, /* 0xe0-0xe7 */ + 0xd0, 0x5a, 0x52, 0x53, 0xa1, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0x6a, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0x79, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1144_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1144_page00[wc]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1145.h b/jni/parted/libiconv/lib/ebcdic1145.h new file mode 100755 index 0000000..23788d5 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1145.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1145 + */ + +static const unsigned short ebcdic1145_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00a6, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x0023, 0x00f1, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x00d1, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005e, 0x0021, 0x00af, 0x007e, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1145_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1145_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1145_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0xbb, 0x7f, 0x69, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0xba, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xbd, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x49, 0xb5, /* 0xa0-0xa7 */ + 0xa1, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x7b, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x6a, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1145_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1145_page00[wc]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1146.h b/jni/parted/libiconv/lib/ebcdic1146.h new file mode 100755 index 0000000..46a60b5 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1146.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1146 + */ + +static const unsigned short ebcdic1146_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x0024, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x0021, 0x00a3, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x00af, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x005b, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005e, 0x005d, 0x007e, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1146_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1146_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1146_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x4a, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xb1, 0xe0, 0xbb, 0xba, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xbc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0x5b, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xa1, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1146_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1146_page00[wc]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1147.h b/jni/parted/libiconv/lib/ebcdic1147.h new file mode 100755 index 0000000..34e3645 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1147.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1147 + */ + +static const unsigned short ebcdic1147_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0040, 0x00e1, 0x00e3, 0x00e5, + 0x005c, 0x00f1, 0x00b0, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x007b, 0x00ea, 0x00eb, 0x007d, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x00a7, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00f9, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00b5, 0x003a, 0x00a3, 0x00e0, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x005b, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x0060, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x0023, 0x00a5, 0x00b7, 0x00a9, 0x005d, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x007e, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e9, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e8, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00a6, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00e7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1147_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1147_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1147_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0xb1, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x44, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x90, 0x48, 0xb5, 0x5f, 0x6d, /* 0x58-0x5f */ + 0xa0, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x51, 0xbb, 0x54, 0xbd, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0x7b, 0x00, 0xb2, 0xdd, 0x5a, /* 0xa0-0xa7 */ + 0xa1, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x4a, 0x8f, 0xea, 0xfa, 0xbe, 0x79, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x7c, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xe0, /* 0xe0-0xe7 */ + 0xd0, 0xc0, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0x6a, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1147_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1147_page00[wc]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1148.h b/jni/parted/libiconv/lib/ebcdic1148.h new file mode 100755 index 0000000..fc51e27 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1148.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1148 + */ + +static const unsigned short ebcdic1148_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1148_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1148_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1148_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1148_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1148_page00[wc]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1149.h b/jni/parted/libiconv/lib/ebcdic1149.h new file mode 100755 index 0000000..027844e --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1149.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1149 + */ + +static const unsigned short ebcdic1149_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x00de, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x00c6, 0x0024, 0x002a, 0x0029, 0x003b, 0x00d6, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00f0, 0x003a, 0x0023, 0x00d0, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0060, 0x00fd, 0x007b, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x007d, 0x00b8, 0x005d, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0040, 0x00dd, 0x005b, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x005c, 0x00d7, + /* 0xc0 */ + 0x00fe, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e6, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00b4, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x005e, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1149_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1149_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1149_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xac, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xae, 0xbe, 0x9e, 0xec, 0x6d, /* 0x58-0x5f */ + 0x8c, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x8e, 0xbb, 0x9c, 0xcc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xe0, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x5a, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0x7c, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x5f, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0x4a, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0xd0, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x79, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xa1, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0xc0, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic1149_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1149_page00[wc]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1153.h b/jni/parted/libiconv/lib/ebcdic1153.h new file mode 100755 index 0000000..590e548 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1153.h @@ -0,0 +1,160 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1153 + */ + +static const unsigned short ebcdic1153_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0163, 0x00e1, 0x0103, 0x010d, + 0x00e7, 0x0107, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x0119, 0x00eb, 0x016f, 0x00ed, 0x00ee, 0x013e, + 0x013a, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x02dd, 0x00c1, 0x0102, 0x010c, + 0x00c7, 0x0106, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x02c7, 0x00c9, 0x0118, 0x00cb, 0x016e, 0x00cd, 0x00ce, 0x013d, + 0x0139, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x02d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x015b, 0x0148, 0x0111, 0x00fd, 0x0159, 0x015f, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0142, 0x0144, 0x0161, 0x00b8, 0x02db, 0x20ac, + /* 0xa0 */ + 0x0105, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x015a, 0x0147, 0x0110, 0x00dd, 0x0158, 0x015e, + /* 0xb0 */ + 0x02d9, 0x0104, 0x017c, 0x0162, 0x017b, 0x00a7, 0x017e, 0x017a, + 0x017d, 0x0179, 0x0141, 0x0143, 0x0160, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x0155, 0x00f3, 0x0151, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x011a, 0x0171, 0x00fc, 0x0165, 0x00fa, 0x011b, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x010f, 0x00d4, 0x00d6, 0x0154, 0x00d3, 0x0150, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x010e, 0x0170, 0x00dc, 0x0164, 0x00da, 0x009f, +}; + +static int +ebcdic1153_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1153_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1153_page00[384] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0x90, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x65, 0x62, 0x00, 0x63, 0x00, 0x00, 0x68, /* 0xc0-0xc7 */ + 0x00, 0x71, 0x00, 0x73, 0x00, 0x75, 0x76, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xfe, 0x00, 0xfc, 0xad, 0x00, 0x59, /* 0xd8-0xdf */ + 0x00, 0x45, 0x42, 0x00, 0x43, 0x00, 0x00, 0x48, /* 0xe0-0xe7 */ + 0x00, 0x51, 0x00, 0x53, 0x00, 0x55, 0x56, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xde, 0x00, 0xdc, 0x8d, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0x66, 0x46, 0xb1, 0xa0, 0x69, 0x49, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x67, 0x47, 0xfa, 0xea, /* 0x08-0x0f */ + 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x72, 0x52, 0xda, 0xdf, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x78, 0x58, 0x00, 0x00, 0x77, 0x57, 0x00, /* 0x38-0x3f */ + 0x00, 0xba, 0x9a, 0xbb, 0x9b, 0x00, 0x00, 0xab, /* 0x40-0x47 */ + 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xef, 0xcf, 0x00, 0x00, 0xed, 0xcd, 0x00, 0x00, /* 0x50-0x57 */ + 0xae, 0x8e, 0xaa, 0x8a, 0x00, 0x00, 0xaf, 0x8f, /* 0x58-0x5f */ + 0xbc, 0x9c, 0xb3, 0x44, 0xfd, 0xdd, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, /* 0x68-0x6f */ + 0xfb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xb9, 0xb7, 0xb4, 0xb2, 0xb8, 0xb6, 0x00, /* 0x78-0x7f */ +}; +#if DEDUPLICATE_TABLES +#define ebcdic1153_page02 ebcdic870_page02 +#else /* Unoptimized */ +static const unsigned char ebcdic1153_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x80, 0xb0, 0x00, 0x9e, 0x00, 0x64, 0x00, 0x00, /* 0xd8-0xdf */ +}; +#endif + +static int +ebcdic1153_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0180) + c = ebcdic1153_page00[wc]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = ebcdic1153_page02[wc-0x02c0]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1154.h b/jni/parted/libiconv/lib/ebcdic1154.h new file mode 100755 index 0000000..52095a9 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1154.h @@ -0,0 +1,143 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1154 + */ + +static const unsigned short ebcdic1154_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, + 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a, + 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430, + 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, + /* 0x90 */ + 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xa0 */ + 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + /* 0xb0 */ + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421, + /* 0xe0 */ + 0x005c, 0x20ac, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f, +}; + +static int +ebcdic1154_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1154_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1154_page00[176] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */ +}; +#if DEDUPLICATE_TABLES +#define ebcdic1154_page04 ebcdic880_page04 +#else /* Unoptimized */ +static const unsigned char ebcdic1154_page04[96] = { + 0x00, 0x63, 0x59, 0x62, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */ + 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */ + 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */ + 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */ + 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */ + 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */ + 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */ + 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */ + 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */ + 0x00, 0x44, 0x42, 0x43, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */ + 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */ +}; +#endif + +static int +ebcdic1154_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00b0) + c = ebcdic1154_page00[wc]; + else if (wc >= 0x0400 && wc < 0x0460) + c = ebcdic1154_page04[wc-0x0400]; + else if (wc == 0x20ac) + c = 0xe1; + else if (wc == 0x2116) + c = 0x58; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1155.h b/jni/parted/libiconv/lib/ebcdic1155.h new file mode 100755 index 0000000..0638a31 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1155.h @@ -0,0 +1,148 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1155 + */ + +static const unsigned short ebcdic1155_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x007b, 0x00f1, 0x00c7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x011e, 0x0130, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x005b, 0x00d1, 0x015f, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0131, 0x003a, 0x00d6, 0x015e, 0x0027, 0x003d, 0x00dc, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x007d, 0x0060, 0x00a6, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x005d, 0x0024, 0x0040, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e7, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x011f, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x005c, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00fc, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0023, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x0022, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1155_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1155_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1155_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0xfc, 0xec, 0xad, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xae, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x68, 0xdc, 0xac, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x8d, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x48, 0xbb, 0x8c, 0xcc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x8e, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x4a, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0x00, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7b, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0x7f, 0x00, 0x00, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xc0, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x00, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xa1, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xe0, 0x00, 0x00, 0xdf, /* 0xf8-0xff */ +}; +#if DEDUPLICATE_TABLES +#define ebcdic1155_page01 ebcdic1026_page01 +#else /* Unoptimized */ +static const unsigned char ebcdic1155_page01[72] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xd0, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x5b, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x6a, /* 0x58-0x5f */ +}; +#endif + +static int +ebcdic1155_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1155_page00[wc]; + else if (wc >= 0x0118 && wc < 0x0160) + c = ebcdic1155_page01[wc-0x0118]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1156.h b/jni/parted/libiconv/lib/ebcdic1156.h new file mode 100755 index 0000000..20ca348 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1156.h @@ -0,0 +1,157 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1156 + */ + +static const unsigned short ebcdic1156_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0161, 0x00e4, 0x0105, 0x012f, 0x016b, 0x00e5, + 0x0113, 0x017e, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x0119, 0x0117, 0x010d, 0x0173, 0x201e, 0x201c, + 0x0123, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x0160, 0x00c4, 0x0104, 0x012e, 0x016a, 0x00c5, + 0x0112, 0x017d, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x0118, 0x0116, 0x010c, 0x0172, 0x012a, 0x013b, + 0x0122, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0101, 0x017c, 0x0144, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0156, 0x0157, 0x00e6, 0x0137, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x201d, 0x017a, 0x0100, 0x017b, 0x0143, 0x00ae, + /* 0xb0 */ + 0x005e, 0x00a3, 0x012b, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005b, 0x005d, 0x0179, 0x0136, 0x013c, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x014d, 0x00f6, 0x0146, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x0107, 0x00fc, 0x0142, 0x015b, 0x2019, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x014c, 0x00d6, 0x0145, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x0106, 0x00dc, 0x0141, 0x015a, 0x009f, +}; + +static int +ebcdic1156_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1156_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1156_page00[384] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x4a, 0xb1, 0x00, 0x00, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0x00, 0xb4, 0x00, 0x8a, 0x5f, 0xca, 0xaf, 0x00, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x00, 0xda, 0x00, 0x8b, 0xb7, 0xb8, 0xb9, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x9e, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xee, 0x00, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x59, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x43, 0x47, 0x9c, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xce, 0x00, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0xac, 0x8c, 0x00, 0x00, 0x64, 0x44, 0xfb, 0xdb, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x68, 0x48, 0x00, 0x00, 0x73, 0x53, /* 0x10-0x17 */ + 0x72, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x78, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x76, 0xb2, 0x00, 0x00, 0x65, 0x45, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x9d, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x77, 0xbe, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0xfd, 0xdd, 0xae, 0x8e, 0xed, 0xcd, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xeb, 0xcb, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x9b, /* 0x50-0x57 */ + 0x00, 0x00, 0xfe, 0xde, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x62, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x75, 0x55, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xbc, 0xab, 0xad, 0x8d, 0x69, 0x49, 0x00, /* 0x78-0x7f */ +}; +#if DEDUPLICATE_TABLES +#define ebcdic1156_page20 ebcdic1112_page20 +#else /* Unoptimized */ +static const unsigned char ebcdic1156_page20[8] = { + 0x00, 0xdf, 0x00, 0x00, 0x57, 0xaa, 0x56, 0x00, /* 0x18-0x1f */ +}; +#endif + +static int +ebcdic1156_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0180) + c = ebcdic1156_page00[wc]; + else if (wc >= 0x2018 && wc < 0x2020) + c = ebcdic1156_page20[wc-0x2018]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1157.h b/jni/parted/libiconv/lib/ebcdic1157.h new file mode 100755 index 0000000..3a79ecf --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1157.h @@ -0,0 +1,143 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1157 + */ + +static const unsigned short ebcdic1157_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x007d, + 0x00e7, 0x00f1, 0x00a7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x0060, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x20ac, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x0023, 0x00c0, 0x00c1, 0x00c3, 0x0024, + 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x005c, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00e9, 0x003a, 0x00c4, 0x00d6, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0161, 0x00fd, 0x017e, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x005d, + /* 0xa0 */ + 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0160, 0x00dd, 0x017d, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x005b, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00c9, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0040, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1157_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1157_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1157_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x63, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xec, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xb5, 0x71, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x51, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0xcc, 0x4a, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x7b, 0x5b, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0xe0, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0x00, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7c, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0x00, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0xc0, 0xd0, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x79, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x00, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x00, 0xdf, /* 0xf8-0xff */ +}; +#if DEDUPLICATE_TABLES +#define ebcdic1157_page01 ebcdic1122_page01 +#else /* Unoptimized */ +static const unsigned char ebcdic1157_page01[32] = { + 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x8e, 0x00, /* 0x78-0x7f */ +}; +#endif + +static int +ebcdic1157_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic1157_page00[wc]; + else if (wc >= 0x0160 && wc < 0x0180) + c = ebcdic1157_page01[wc-0x0160]; + else if (wc == 0x20ac) + c = 0x5a; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1158.h b/jni/parted/libiconv/lib/ebcdic1158.h new file mode 100755 index 0000000..0d82b2a --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1158.h @@ -0,0 +1,154 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1158 + */ + +static const unsigned short ebcdic1158_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0452, 0x0491, 0x0451, 0x0454, 0x0455, 0x0456, + 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a, + 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x0490, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430, + 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, + /* 0x90 */ + 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xa0 */ + 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + /* 0xb0 */ + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421, + /* 0xe0 */ + 0x005c, 0x20ac, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f, +}; + +static int +ebcdic1158_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1158_2uni[c]; + return 1; +} + +#if DEDUPLICATE_TABLES +#define ebcdic1158_page00 ebcdic1154_page00 +#else /* Unoptimized */ +static const unsigned char ebcdic1158_page00[176] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */ +}; +#endif +#if DEDUPLICATE_TABLES +#define ebcdic1158_page04 ebcdic1123_page04 +#else /* Unoptimized */ +static const unsigned char ebcdic1158_page04[152] = { + 0x00, 0x63, 0x59, 0x00, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */ + 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */ + 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */ + 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */ + 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */ + 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */ + 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */ + 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */ + 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */ + 0x00, 0x44, 0x42, 0x00, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */ + 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x62, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +#endif + +static int +ebcdic1158_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00b0) + c = ebcdic1158_page00[wc]; + else if (wc >= 0x0400 && wc < 0x0498) + c = ebcdic1158_page04[wc-0x0400]; + else if (wc == 0x20ac) + c = 0xe1; + else if (wc == 0x2116) + c = 0x58; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1160.h b/jni/parted/libiconv/lib/ebcdic1160.h new file mode 100755 index 0000000..480bd8c --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1160.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1160 + */ + +static const unsigned short ebcdic1160_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, + 0x0e07, 0x005b, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x0e48, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, + 0x0e0e, 0x005d, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x0e0f, 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, + 0x0e15, 0x005e, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x0e3f, 0x0e4e, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, + 0x0e1c, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0e4f, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20, 0x0e21, 0x0e22, + /* 0x90 */ + 0x0e5a, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, + /* 0xa0 */ + 0x0e5b, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, + /* 0xb0 */ + 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, + 0x0e58, 0x0e59, 0x0e2f, 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x0e49, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x0e3a, 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, + /* 0xe0 */ + 0x005c, 0x0e4a, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, 0x0e4a, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4b, 0x20ac, 0x009f, +}; + +static int +ebcdic1160_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1160_2uni[c]; + return 1; +} + +#if DEDUPLICATE_TABLES +#define ebcdic1160_page00 ebcdic838_page00 +#else /* Unoptimized */ +static const unsigned char ebcdic1160_page00[176] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x49, 0xe0, 0x59, 0x69, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x6a, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; +#endif +#if DEDUPLICATE_TABLES +#define ebcdic1160_page0e ebcdic838_page0e +#else /* Unoptimized */ +static const unsigned char ebcdic1160_page0e[96] = { + 0x00, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* 0x00-0x07 */ + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x62, /* 0x08-0x0f */ + 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x72, 0x73, /* 0x10-0x17 */ + 0x74, 0x75, 0x76, 0x77, 0x78, 0x8a, 0x8b, 0x8c, /* 0x18-0x1f */ + 0x8d, 0x8e, 0x8f, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, /* 0x20-0x27 */ + 0x9f, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xba, /* 0x28-0x2f */ + 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xcb, 0xcc, 0xcd, /* 0x30-0x37 */ + 0xce, 0xcf, 0xda, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0x38-0x3f */ + 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, /* 0x40-0x47 */ + 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0x71, 0x80, /* 0x48-0x4f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x50-0x57 */ + 0xb8, 0xb9, 0x90, 0xa0, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ +}; +#endif + +static int +ebcdic1160_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00b0) + c = ebcdic1160_page00[wc]; + else if (wc >= 0x0e00 && wc < 0x0e60) + c = ebcdic1160_page0e[wc-0x0e00]; + else if (wc == 0x20ac) + c = 0xfe; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1164.h b/jni/parted/libiconv/lib/ebcdic1164.h new file mode 100755 index 0000000..d7f38fb --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1164.h @@ -0,0 +1,171 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1164 + */ + +static const unsigned short ebcdic1164_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x0103, 0x00e5, + 0x00e7, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x0303, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x0102, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x20ab, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0111, 0x0309, 0x0300, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x0152, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0110, 0x0323, 0x0301, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x0153, 0x0178, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x01b0, 0x00f3, 0x01a1, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x01af, 0x00d3, 0x01a0, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic1164_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1164_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1164_page00[440] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0x00, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x00, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x00, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x00, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0x00, 0x69, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0x00, 0x00, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x00, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x00, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x00, 0x49, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x9d, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xef, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, /* 0xa8-0xaf */ + 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ +}; +#if DEDUPLICATE_TABLES +#define ebcdic1164_page03 ebcdic1130_page03 +#else /* Unoptimized */ +static const unsigned char ebcdic1164_page03[40] = { + 0x8e, 0xae, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +#endif +static const unsigned char ebcdic1164_page20[8] = { + 0x00, 0x00, 0x00, 0x78, 0x9f, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; + +static int +ebcdic1164_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x01b8) + c = ebcdic1164_page00[wc]; + else if (wc >= 0x0300 && wc < 0x0328) + c = ebcdic1164_page03[wc-0x0300]; + else if (wc >= 0x20a8 && wc < 0x20b0) + c = ebcdic1164_page20[wc-0x20a8]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1165.h b/jni/parted/libiconv/lib/ebcdic1165.h new file mode 100755 index 0000000..79e99b7 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1165.h @@ -0,0 +1,160 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1165 + */ + +static const unsigned short ebcdic1165_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0163, 0x00e1, 0x0103, 0x010d, + 0x00e7, 0x0107, 0x00dd, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x0119, 0x00eb, 0x016f, 0x00ed, 0x00ee, 0x013e, + 0x013a, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x02dd, 0x00c1, 0x0102, 0x010c, + 0x00c7, 0x0106, 0x00a8, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x02c7, 0x00c9, 0x0118, 0x00cb, 0x016e, 0x00cd, 0x00ce, 0x013d, + 0x0139, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x02d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x015b, 0x0148, 0x0111, 0x00fd, 0x0159, 0x015f, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0142, 0x0144, 0x0161, 0x00b8, 0x02db, 0x20ac, + /* 0xa0 */ + 0x0105, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x015a, 0x0147, 0x0110, 0x005b, 0x0158, 0x015e, + /* 0xb0 */ + 0x02d9, 0x0104, 0x017c, 0x0162, 0x017b, 0x00a7, 0x017e, 0x017a, + 0x017d, 0x0179, 0x0141, 0x0143, 0x0160, 0x005d, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x0155, 0x00f3, 0x0151, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x011a, 0x0171, 0x00fc, 0x0165, 0x00fa, 0x011b, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x010f, 0x00d4, 0x00d6, 0x0154, 0x00d3, 0x0150, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x010e, 0x0170, 0x00dc, 0x0164, 0x00da, 0x009f, +}; + +static int +ebcdic1165_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1165_2uni[c]; + return 1; +} + +static const unsigned char ebcdic1165_page00[384] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */ + 0x6a, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0x90, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x65, 0x62, 0x00, 0x63, 0x00, 0x00, 0x68, /* 0xc0-0xc7 */ + 0x00, 0x71, 0x00, 0x73, 0x00, 0x75, 0x76, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xfe, 0x00, 0xfc, 0x4a, 0x00, 0x59, /* 0xd8-0xdf */ + 0x00, 0x45, 0x42, 0x00, 0x43, 0x00, 0x00, 0x48, /* 0xe0-0xe7 */ + 0x00, 0x51, 0x00, 0x53, 0x00, 0x55, 0x56, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xde, 0x00, 0xdc, 0x8d, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0x66, 0x46, 0xb1, 0xa0, 0x69, 0x49, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x67, 0x47, 0xfa, 0xea, /* 0x08-0x0f */ + 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x72, 0x52, 0xda, 0xdf, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x78, 0x58, 0x00, 0x00, 0x77, 0x57, 0x00, /* 0x38-0x3f */ + 0x00, 0xba, 0x9a, 0xbb, 0x9b, 0x00, 0x00, 0xab, /* 0x40-0x47 */ + 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xef, 0xcf, 0x00, 0x00, 0xed, 0xcd, 0x00, 0x00, /* 0x50-0x57 */ + 0xae, 0x8e, 0xaa, 0x8a, 0x00, 0x00, 0xaf, 0x8f, /* 0x58-0x5f */ + 0xbc, 0x9c, 0xb3, 0x44, 0xfd, 0xdd, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, /* 0x68-0x6f */ + 0xfb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xb9, 0xb7, 0xb4, 0xb2, 0xb8, 0xb6, 0x00, /* 0x78-0x7f */ +}; +#if DEDUPLICATE_TABLES +#define ebcdic1165_page02 ebcdic870_page02 +#else /* Unoptimized */ +static const unsigned char ebcdic1165_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x80, 0xb0, 0x00, 0x9e, 0x00, 0x64, 0x00, 0x00, /* 0xd8-0xdf */ +}; +#endif + +static int +ebcdic1165_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0180) + c = ebcdic1165_page00[wc]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = ebcdic1165_page02[wc-0x02c0]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic1166.h b/jni/parted/libiconv/lib/ebcdic1166.h new file mode 100755 index 0000000..e7aa22d --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic1166.h @@ -0,0 +1,161 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-1166 + */ + +static const unsigned short ebcdic1166_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x04d9, 0x0493, 0x0451, 0x0454, 0x0455, 0x0456, + 0x049b, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x04a3, 0x04e9, 0x04b1, 0x04af, 0x045e, 0x04bb, 0x042a, + 0x2116, 0x04d8, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x0492, 0x0401, 0x0404, 0x0405, 0x0406, 0x049a, + 0x0408, 0x04a2, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x04e8, 0x04b0, 0x04ae, 0x00ad, 0x040e, 0x04ba, 0x044e, 0x0430, + 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, + /* 0x90 */ + 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xa0 */ + 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + /* 0xb0 */ + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421, + /* 0xe0 */ + 0x005c, 0x20ac, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f, +}; + +static int +ebcdic1166_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic1166_2uni[c]; + return 1; +} + +#if DEDUPLICATE_TABLES +#define ebcdic1166_page00 ebcdic1154_page00 +#else /* Unoptimized */ +static const unsigned char ebcdic1166_page00[176] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */ +}; +#endif +static const unsigned char ebcdic1166_page04[240] = { + 0x00, 0x63, 0x00, 0x00, 0x64, 0x65, 0x66, 0x00, /* 0x00-0x07 */ + 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, /* 0x08-0x0f */ + 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */ + 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */ + 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */ + 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */ + 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */ + 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */ + 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */ + 0x00, 0x44, 0x00, 0x00, 0x45, 0x46, 0x47, 0x00, /* 0x50-0x57 */ + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x67, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x69, 0x51, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x54, /* 0xa8-0xaf */ + 0x71, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x75, 0x56, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x59, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x70, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; + +static int +ebcdic1166_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00b0) + c = ebcdic1166_page00[wc]; + else if (wc >= 0x0400 && wc < 0x04f0) + c = ebcdic1166_page04[wc-0x0400]; + else if (wc == 0x20ac) + c = 0xe1; + else if (wc == 0x2116) + c = 0x58; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic12712.h b/jni/parted/libiconv/lib/ebcdic12712.h new file mode 100755 index 0000000..42d9d33 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic12712.h @@ -0,0 +1,164 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-12712 + */ + +static const unsigned short ebcdic12712_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, + 0x05d7, 0x05d8, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + 0x05e0, 0x05e1, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0xfffd, 0x05ea, 0xfffd, 0xfffd, 0x00a0, 0xfffd, 0xfffd, 0xfffd, + 0x2017, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0xfffd, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0xfffd, 0xfffd, 0xfffd, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0xfffd, 0xfffd, 0x20ac, 0x00b8, 0x20aa, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x00ae, + /* 0xb0 */ + 0x005e, 0x00a3, 0x00a5, 0x2022, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005b, 0x005d, 0x203e, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x202d, 0x202e, 0x202c, 0xfffd, 0xfffd, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x202a, 0x202b, 0x200e, 0x200f, 0x009f, +}; + +static int +ebcdic12712_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic12712_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +#if DEDUPLICATE_TABLES +#define ebcdic12712_page00 ebcdic424_page00 +#else /* Unoptimized */ +static const unsigned char ebcdic12712_page00[248] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x74, 0x00, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x00, 0x8a, 0x5f, 0xca, 0xaf, 0x00, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0x00, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x00, 0x8b, 0xb7, 0xb8, 0xb9, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xf0-0xf7 */ +}; +#endif +#if DEDUPLICATE_TABLES +#define ebcdic12712_page05 ebcdic424_page05 +#else /* Unoptimized */ +static const unsigned char ebcdic12712_page05[32] = { + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* 0xd0-0xd7 */ + 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0xd8-0xdf */ + 0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0xe0-0xe7 */ + 0x68, 0x69, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; +#endif +static const unsigned char ebcdic12712_page20[56] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0xfb, 0xfc, 0xdd, 0xdb, 0xdc, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, /* 0x38-0x3f */ +}; +static const unsigned char ebcdic12712_page20_1[8] = { + 0x00, 0x00, 0x9e, 0x00, 0x9c, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; + +static int +ebcdic12712_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00f8) + c = ebcdic12712_page00[wc]; + else if (wc >= 0x05d0 && wc < 0x05f0) + c = ebcdic12712_page05[wc-0x05d0]; + else if (wc >= 0x2008 && wc < 0x2040) + c = ebcdic12712_page20[wc-0x2008]; + else if (wc >= 0x20a8 && wc < 0x20b0) + c = ebcdic12712_page20_1[wc-0x20a8]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic16804.h b/jni/parted/libiconv/lib/ebcdic16804.h new file mode 100755 index 0000000..fd7af59 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic16804.h @@ -0,0 +1,178 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-16804 + */ + +static const unsigned short ebcdic16804_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0651, 0xfe7d, 0x0640, 0x200b, 0x0621, 0x0622, + 0xfe82, 0x0623, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0xfe84, 0x0624, 0xfffd, 0xfffd, 0x0626, 0x0627, 0xfe8e, + 0x0628, 0xfe91, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x0629, 0x062a, 0xfe97, 0x062b, 0xfe9b, 0x062c, + 0xfe9f, 0x062d, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0xfea3, 0x062e, 0xfea7, 0x062f, 0x0630, 0x0631, 0x0632, 0x0633, + 0xfeb3, 0x060c, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0634, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0xfeb7, 0x0635, 0xfebb, 0x0636, 0xfebf, 0x0637, + /* 0x90 */ + 0x0638, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0639, 0xfeca, 0xfecb, 0xfecc, 0x063a, 0xfece, + /* 0xa0 */ + 0xfecf, 0x00f7, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0xfed0, 0x0641, 0xfed3, 0x0642, 0xfed7, 0x0643, + /* 0xb0 */ + 0xfedb, 0x0644, 0xfef5, 0xfef6, 0xfef7, 0xfef8, 0xfffd, 0xfffd, + 0xfefb, 0xfefc, 0xfedf, 0x0645, 0xfee3, 0x0646, 0xfee7, 0x0647, + /* 0xc0 */ + 0x061b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0xfeeb, 0xfffd, 0xfeec, 0xfffd, 0x0648, + /* 0xd0 */ + 0x061f, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x0649, 0xfef0, 0x064a, 0xfef2, 0xfef3, 0x0660, + /* 0xe0 */ + 0x00d7, 0x2007, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0661, 0x0662, 0xfffd, 0x0663, 0x0664, 0x0665, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x20ac, 0x0666, 0x0667, 0x0668, 0x0669, 0x009f, +}; + +static int +ebcdic16804_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic16804_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char ebcdic16804_page00[248] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x6d, /* 0x58-0x5f */ + 0x00, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x00, 0x4f, 0x00, 0x00, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x6a, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x5f, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, /* 0xf0-0xf7 */ +}; +static const unsigned char ebcdic16804_page06[104] = { + 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xd0, /* 0x18-0x1f */ + 0x00, 0x46, 0x47, 0x49, 0x52, 0x00, 0x55, 0x56, /* 0x20-0x27 */ + 0x58, 0x62, 0x63, 0x65, 0x67, 0x69, 0x71, 0x73, /* 0x28-0x2f */ + 0x74, 0x75, 0x76, 0x77, 0x80, 0x8b, 0x8d, 0x8f, /* 0x30-0x37 */ + 0x90, 0x9a, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x44, 0xab, 0xad, 0xaf, 0xb1, 0xbb, 0xbd, 0xbf, /* 0x40-0x47 */ + 0xcf, 0xda, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xdf, 0xea, 0xeb, 0xed, 0xee, 0xef, 0xfb, 0xfc, /* 0x60-0x67 */ + 0xfd, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ +}; +static const unsigned char ebcdic16804_page20[16] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ +}; +static const unsigned char ebcdic16804_pagefe[136] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x48, 0x00, 0x51, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, /* 0x88-0x8f */ + 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x68, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x72, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x8a, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x8e, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x9b, 0x9c, 0x9d, 0x00, 0x9f, 0xa0, /* 0xc8-0xcf */ + 0xaa, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0xae, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0xba, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xbe, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0xcb, 0xcd, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0xdb, 0x00, 0xdd, 0xde, 0x00, 0xb2, 0xb3, 0xb4, /* 0xf0-0xf7 */ + 0xb5, 0x00, 0x00, 0xb8, 0xb9, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static int +ebcdic16804_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00f8) + c = ebcdic16804_page00[wc]; + else if (wc >= 0x0608 && wc < 0x0670) + c = ebcdic16804_page06[wc-0x0608]; + else if (wc >= 0x2000 && wc < 0x2010) + c = ebcdic16804_page20[wc-0x2000]; + else if (wc == 0x20ac) + c = 0xfa; + else if (wc >= 0xfe78 && wc < 0xff00) + c = ebcdic16804_pagefe[wc-0xfe78]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic273.h b/jni/parted/libiconv/lib/ebcdic273.h new file mode 100755 index 0000000..6dc48f4 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic273.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-273 + */ + +static const unsigned short ebcdic273_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x00c4, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x007e, 0x00dc, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x005b, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x00a7, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x00df, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x0040, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00fc, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007d, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00d6, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x005c, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x005d, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic273_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic273_2uni[c]; + return 1; +} + +static const unsigned char ebcdic273_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xb5, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x63, 0xec, 0xfc, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0xdc, 0x59, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xcc, 0x7c, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x4a, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xe0, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0x5a, 0xad, 0xae, 0xa1, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0xc0, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xd0, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic273_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic273_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic277.h b/jni/parted/libiconv/lib/ebcdic277.h new file mode 100755 index 0000000..c21cfe2 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic277.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-277 + */ + +static const unsigned short ebcdic277_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x007d, + 0x00e7, 0x00f1, 0x0023, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x00a4, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x0024, + 0x00c7, 0x00d1, 0x00f8, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00a6, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x00c6, 0x00d8, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x007b, 0x00b8, 0x005b, 0x005d, + /* 0xa0 */ + 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e6, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic277_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic277_2uni[c]; + return 1; +} + +static const unsigned char ebcdic277_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x4a, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x80, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x9e, 0xe0, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x9c, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x5a, 0xb2, 0x70, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x5b, 0x7b, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x7c, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0xd0, 0xc0, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x6a, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic277_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic277_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic278.h b/jni/parted/libiconv/lib/ebcdic278.h new file mode 100755 index 0000000..37b06d4 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic278.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-278 + */ + +static const unsigned short ebcdic278_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x007d, + 0x00e7, 0x00f1, 0x00a7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x0060, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x00a4, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x0023, 0x00c0, 0x00c1, 0x00c3, 0x0024, + 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x005c, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00e9, 0x003a, 0x00c4, 0x00d6, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x005d, + /* 0xa0 */ + 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x005b, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00c9, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0040, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic278_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic278_2uni[c]; + return 1; +} + +static const unsigned char ebcdic278_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x63, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xec, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xb5, 0x71, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x51, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x5a, 0xb2, 0xcc, 0x4a, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x7b, 0x5b, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0xe0, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7c, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0xc0, 0xd0, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x79, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic278_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic278_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic280.h b/jni/parted/libiconv/lib/ebcdic280.h new file mode 100755 index 0000000..2102f15 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic280.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-280 + */ + +static const unsigned short ebcdic280_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x007b, 0x00e1, 0x00e3, 0x00e5, + 0x005c, 0x00f1, 0x00b0, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x005d, 0x00ea, 0x00eb, 0x007d, 0x00ed, 0x00ee, 0x00ef, + 0x007e, 0x00df, 0x00e9, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00f2, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00f9, 0x003a, 0x00a3, 0x00a7, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x005b, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x00ec, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x0023, 0x00a5, 0x00b7, 0x00a9, 0x0040, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e0, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00a6, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e8, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x0060, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00e7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic280_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic280_2uni[c]; + return 1; +} + +static const unsigned char ebcdic280_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0xb1, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xb5, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x90, 0x48, 0x51, 0x5f, 0x6d, /* 0x58-0x5f */ + 0xdd, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x44, 0xbb, 0x54, 0x58, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0x7b, 0x9f, 0xb2, 0xcd, 0x7c, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x4a, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0xc0, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xe0, /* 0xe0-0xe7 */ + 0xd0, 0x5a, 0x52, 0x53, 0xa1, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0x6a, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0x79, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic280_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic280_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic282.h b/jni/parted/libiconv/lib/ebcdic282.h new file mode 100755 index 0000000..3779bc1 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic282.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-282 + */ + +static const unsigned short ebcdic282_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x007b, 0x00e5, + 0x007e, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x0023, 0x00c5, + 0x005c, 0x00d1, 0x00f5, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x00c3, 0x00d5, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x00e7, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x007d, 0x00d7, + /* 0xc0 */ + 0x00e3, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00a6, + /* 0xd0 */ + 0x00b4, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00c7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x0040, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic282_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic282_2uni[c]; + return 1; +} + +static const unsigned char ebcdic282_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x66, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xef, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0x68, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x46, 0xbb, 0xbe, 0x48, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xcf, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xd0, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x7b, 0x63, 0x67, 0x9e, 0xe0, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0x7c, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0xc0, 0x43, 0x47, 0x9c, 0xa1, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0x6a, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic282_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic282_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic284.h b/jni/parted/libiconv/lib/ebcdic284.h new file mode 100755 index 0000000..368a7de --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic284.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-284 + */ + +static const unsigned short ebcdic284_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00a6, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x0023, 0x00f1, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x00d1, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005e, 0x0021, 0x00af, 0x007e, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic284_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic284_2uni[c]; + return 1; +} + +static const unsigned char ebcdic284_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0xbb, 0x7f, 0x69, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0xba, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xbd, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x49, 0xb5, /* 0xa0-0xa7 */ + 0xa1, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x7b, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x6a, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic284_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic284_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic285.h b/jni/parted/libiconv/lib/ebcdic285.h new file mode 100755 index 0000000..feb65a8 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic285.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-285 + */ + +static const unsigned short ebcdic285_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x0024, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x0021, 0x00a3, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x00af, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x005b, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005e, 0x005d, 0x007e, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic285_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic285_2uni[c]; + return 1; +} + +static const unsigned char ebcdic285_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x4a, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xb1, 0xe0, 0xbb, 0xba, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xbc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0x5b, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xa1, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic285_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic285_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic297.h b/jni/parted/libiconv/lib/ebcdic297.h new file mode 100755 index 0000000..391dff3 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic297.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-297 + */ + +static const unsigned short ebcdic297_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0040, 0x00e1, 0x00e3, 0x00e5, + 0x005c, 0x00f1, 0x00b0, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x007b, 0x00ea, 0x00eb, 0x007d, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x00a7, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00f9, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00b5, 0x003a, 0x00a3, 0x00e0, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x005b, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x0060, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x0023, 0x00a5, 0x00b7, 0x00a9, 0x005d, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x007e, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e9, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e8, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00a6, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00e7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic297_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic297_2uni[c]; + return 1; +} + +static const unsigned char ebcdic297_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0xb1, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x44, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x90, 0x48, 0xb5, 0x5f, 0x6d, /* 0x58-0x5f */ + 0xa0, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x51, 0xbb, 0x54, 0xbd, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0x7b, 0x9f, 0xb2, 0xdd, 0x5a, /* 0xa0-0xa7 */ + 0xa1, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x4a, 0x8f, 0xea, 0xfa, 0xbe, 0x79, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x7c, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xe0, /* 0xe0-0xe7 */ + 0xd0, 0xc0, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0x6a, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic297_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic297_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic423.h b/jni/parted/libiconv/lib/ebcdic423.h new file mode 100755 index 0000000..6dd6388 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic423.h @@ -0,0 +1,147 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-423 + */ + +static const unsigned short ebcdic423_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, + 0x03a1, 0x03a3, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, + 0xfffd, 0xfffd, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0xfffd, 0x0386, 0x0388, 0x0389, 0x00a0, 0x038a, 0x038c, 0x038e, + 0x038f, 0x0060, 0x003a, 0x00a3, 0x00a7, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00c4, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, + /* 0x90 */ + 0x00d6, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, + /* 0xa0 */ + 0x00dc, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, + /* 0xb0 */ + 0xfffd, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd, + 0x03cb, 0x03ce, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, + /* 0xc0 */ + 0x00b8, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x03c9, 0x00e2, 0x00e0, 0x00e4, 0x00ea, + /* 0xd0 */ + 0x00b4, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b1, 0x00e9, 0x00e8, 0x00eb, 0x00ee, 0x00ef, + /* 0xe0 */ + 0x00b0, 0xfffd, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00bd, 0x00f6, 0x00f4, 0x00fb, 0x00f9, 0x00fc, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00ff, 0x00e7, 0x00c7, 0xfffd, 0xfffd, 0x009f, +}; + +static int +ebcdic423_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic423_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char ebcdic423_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x00, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0x00, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x00, 0x6a, 0x00, 0x00, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x74, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x7c, /* 0xa0-0xa7 */ + 0xa1, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0xe0, 0xda, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0xc0, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xfc, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0xcd, 0x00, 0xcc, 0x00, 0xce, 0x00, 0x00, 0xfb, /* 0xe0-0xe7 */ + 0xdc, 0xdb, 0xcf, 0xdd, 0x00, 0x00, 0xde, 0xdf, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0xec, 0x00, 0xeb, 0x00, /* 0xf0-0xf7 */ + 0x00, 0xee, 0x00, 0xed, 0xef, 0x00, 0x00, 0xfa, /* 0xf8-0xff */ +}; +static const unsigned char ebcdic423_page03[80] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, /* 0x80-0x87 */ + 0x72, 0x73, 0x75, 0x00, 0x76, 0x00, 0x77, 0x78, /* 0x88-0x8f */ + 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x90-0x97 */ + 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, /* 0x98-0x9f */ + 0x57, 0x58, 0x00, 0x59, 0x62, 0x63, 0x64, 0x65, /* 0xa0-0xa7 */ + 0x66, 0x67, 0x00, 0x00, 0xb1, 0xb2, 0xb3, 0xb5, /* 0xa8-0xaf */ + 0x00, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x9a, /* 0xb0-0xb7 */ + 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xaa, 0xab, 0xac, /* 0xb8-0xbf */ + 0xad, 0xae, 0xba, 0xaf, 0xbb, 0xbc, 0xbd, 0xbe, /* 0xc0-0xc7 */ + 0xbf, 0xcb, 0xb4, 0xb8, 0xb6, 0xb7, 0xb9, 0x00, /* 0xc8-0xcf */ +}; + +static int +ebcdic423_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic423_page00[wc]; + else if (wc >= 0x0380 && wc < 0x03d0) + c = ebcdic423_page03[wc-0x0380]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic424.h b/jni/parted/libiconv/lib/ebcdic424.h new file mode 100755 index 0000000..f426e89 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic424.h @@ -0,0 +1,150 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-424 + */ + +static const unsigned short ebcdic424_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, + 0x05d7, 0x05d8, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + 0x05e0, 0x05e1, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0xfffd, 0x05ea, 0xfffd, 0xfffd, 0x00a0, 0xfffd, 0xfffd, 0xfffd, + 0x2017, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0xfffd, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0xfffd, 0xfffd, 0xfffd, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0xfffd, 0xfffd, 0xfffd, 0x00b8, 0xfffd, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x00ae, + /* 0xb0 */ + 0x005e, 0x00a3, 0x00a5, 0x2022, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x005b, 0x005d, 0x203e, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x009f, +}; + +static int +ebcdic424_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic424_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char ebcdic424_page00[248] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x74, 0x00, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x00, 0x8a, 0x5f, 0xca, 0xaf, 0x00, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0x00, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x00, 0x8b, 0xb7, 0xb8, 0xb9, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xf0-0xf7 */ +}; +static const unsigned char ebcdic424_page05[32] = { + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* 0xd0-0xd7 */ + 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0xd8-0xdf */ + 0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0xe0-0xe7 */ + 0x68, 0x69, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; +static const unsigned char ebcdic424_page20[48] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, /* 0x38-0x3f */ +}; + +static int +ebcdic424_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00f8) + c = ebcdic424_page00[wc]; + else if (wc >= 0x05d0 && wc < 0x05f0) + c = ebcdic424_page05[wc-0x05d0]; + else if (wc >= 0x2010 && wc < 0x2040) + c = ebcdic424_page20[wc-0x2010]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic425.h b/jni/parted/libiconv/lib/ebcdic425.h new file mode 100755 index 0000000..d2f04b1 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic425.h @@ -0,0 +1,164 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-425 + */ + +static const unsigned short ebcdic425_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x060c, 0x00e0, 0x061b, 0x0640, 0x061f, + 0x00e7, 0x0621, 0x0622, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x0623, 0x00ee, 0x00ef, + 0x0624, 0x0625, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x0626, 0x00c0, 0x0627, 0x0628, 0x0629, + 0x00c7, 0x062a, 0x062b, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x062c, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x062d, 0x00ce, 0x00cf, + 0x062e, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x062f, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0630, 0x0631, 0x0632, 0x0633, + /* 0x90 */ + 0x0634, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0635, 0x0636, 0x00e6, 0x0637, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0638, 0x0639, 0x063a, 0x005b, 0x0641, 0x0642, + /* 0xb0 */ + 0x0643, 0x0644, 0x0645, 0x0646, 0x00a9, 0x00a7, 0x0647, 0x0152, + 0x0153, 0x0178, 0x0648, 0x0649, 0x064a, 0x005d, 0x064b, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x064c, 0x064d, 0x064e, 0x064f, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x0650, 0x00fb, 0x00fc, 0x00f9, 0x0651, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0652, 0x00d4, 0x200c, 0x200d, 0x200e, 0x200f, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0xfffd, 0x00db, 0x00dc, 0x00d9, 0x00a4, 0x009f, +}; + +static int +ebcdic425_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic425_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char ebcdic425_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */ + 0x00, 0xb4, 0x00, 0x8a, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x64, 0x00, 0x62, 0x00, 0x00, 0x00, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x00, 0x00, 0x76, 0x77, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0xbf, /* 0xd0-0xd7 */ + 0x00, 0xfd, 0x00, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x44, 0x00, 0x42, 0x00, 0x00, 0x00, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x00, 0x00, 0x56, 0x57, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0xe1, /* 0xf0-0xf7 */ + 0x00, 0xdd, 0x00, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xf8-0xff */ +}; +static const unsigned char ebcdic425_page01[48] = { + 0x00, 0x00, 0xb7, 0xb8, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char ebcdic425_page06[80] = { + 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x47, /* 0x18-0x1f */ + 0x00, 0x49, 0x4a, 0x55, 0x58, 0x59, 0x63, 0x65, /* 0x20-0x27 */ + 0x66, 0x67, 0x69, 0x6a, 0x70, 0x75, 0x78, 0x80, /* 0x28-0x2f */ + 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x9a, 0x9b, 0x9d, /* 0x30-0x37 */ + 0xaa, 0xab, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x46, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb6, /* 0x40-0x47 */ + 0xba, 0xbb, 0xbc, 0xbe, 0xcc, 0xcd, 0xce, 0xcf, /* 0x48-0x4f */ + 0xda, 0xde, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ +}; +static const unsigned char ebcdic425_page20[8] = { + 0x00, 0x00, 0x00, 0x00, 0xec, 0xed, 0xee, 0xef, /* 0x08-0x0f */ +}; + +static int +ebcdic425_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic425_page00[wc]; + else if (wc >= 0x0150 && wc < 0x0180) + c = ebcdic425_page01[wc-0x0150]; + else if (wc >= 0x0608 && wc < 0x0658) + c = ebcdic425_page06[wc-0x0608]; + else if (wc >= 0x2008 && wc < 0x2010) + c = ebcdic425_page20[wc-0x2008]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic4971.h b/jni/parted/libiconv/lib/ebcdic4971.h new file mode 100755 index 0000000..63e23d9 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic4971.h @@ -0,0 +1,159 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-4971 + */ + +static const unsigned short ebcdic4971_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, + 0x03a1, 0x03a3, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, + 0x03aa, 0x03ab, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00a8, 0x0386, 0x0388, 0x0389, 0x00a0, 0x038a, 0x038c, 0x038e, + 0x038f, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0385, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, + /* 0xa0 */ + 0x00b4, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, + /* 0xb0 */ + 0x00a3, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd, + 0x03cb, 0x03ce, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x03c9, 0x0390, 0x03b0, 0x2018, 0x2015, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b1, 0x00bd, 0xfffd, 0x0387, 0x2019, 0x00a6, + /* 0xe0 */ + 0x005c, 0xfffd, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00a7, 0xfffd, 0xfffd, 0x00ab, 0x00ac, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00a9, 0x20ac, 0xfffd, 0x00bb, 0x009f, +}; + +static int +ebcdic4971_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic4971_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +#if DEDUPLICATE_TABLES +#define ebcdic4971_page00 ebcdic875_page00 +#else /* Unoptimized */ +static const unsigned char ebcdic4971_page00[192] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x74, 0x00, 0x00, 0xb0, 0x00, 0x00, 0xdf, 0xeb, /* 0xa0-0xa7 */ + 0x70, 0xfb, 0x00, 0xee, 0xef, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0x90, 0xda, 0xea, 0xfa, 0xa0, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xfe, 0x00, 0xdb, 0x00, 0x00, /* 0xb8-0xbf */ +}; +#endif +#if DEDUPLICATE_TABLES +#define ebcdic4971_page03 ebcdic875_page03 +#else /* Unoptimized */ +static const unsigned char ebcdic4971_page03[80] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x71, 0xdd, /* 0x80-0x87 */ + 0x72, 0x73, 0x75, 0x00, 0x76, 0x00, 0x77, 0x78, /* 0x88-0x8f */ + 0xcc, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x90-0x97 */ + 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, /* 0x98-0x9f */ + 0x57, 0x58, 0x00, 0x59, 0x62, 0x63, 0x64, 0x65, /* 0xa0-0xa7 */ + 0x66, 0x67, 0x68, 0x69, 0xb1, 0xb2, 0xb3, 0xb5, /* 0xa8-0xaf */ + 0xcd, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x9a, /* 0xb0-0xb7 */ + 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xaa, 0xab, 0xac, /* 0xb8-0xbf */ + 0xad, 0xae, 0xba, 0xaf, 0xbb, 0xbc, 0xbd, 0xbe, /* 0xc0-0xc7 */ + 0xbf, 0xcb, 0xb4, 0xb8, 0xb6, 0xb7, 0xb9, 0x00, /* 0xc8-0xcf */ +}; +#endif +#if DEDUPLICATE_TABLES +#define ebcdic4971_page20 ebcdic875_page20 +#else /* Unoptimized */ +static const unsigned char ebcdic4971_page20[16] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, /* 0x10-0x17 */ + 0xce, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; +#endif + +static int +ebcdic4971_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00c0) + c = ebcdic4971_page00[wc]; + else if (wc >= 0x0380 && wc < 0x03d0) + c = ebcdic4971_page03[wc-0x0380]; + else if (wc >= 0x2010 && wc < 0x2020) + c = ebcdic4971_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0xfc; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic500.h b/jni/parted/libiconv/lib/ebcdic500.h new file mode 100755 index 0000000..4270513 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic500.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-500 + */ + +static const unsigned short ebcdic500_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic500_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic500_2uni[c]; + return 1; +} + +static const unsigned char ebcdic500_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic500_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic500_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic838.h b/jni/parted/libiconv/lib/ebcdic838.h new file mode 100755 index 0000000..99911bd --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic838.h @@ -0,0 +1,135 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-838 + */ + +static const unsigned short ebcdic838_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, + 0x0e07, 0x005b, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x0e48, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, + 0x0e0e, 0x005d, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, + /* 0x60 */ + 0x002d, 0x002f, 0x0e0f, 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, + 0x0e15, 0x005e, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x0e3f, 0x0e4e, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, + 0x0e1c, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0e4f, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20, 0x0e21, 0x0e22, + /* 0x90 */ + 0x0e5a, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, + /* 0xa0 */ + 0x0e5b, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, + /* 0xb0 */ + 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, + 0x0e58, 0x0e59, 0x0e2f, 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x0e49, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x0e3a, 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, + /* 0xe0 */ + 0x005c, 0x0e4a, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, 0x0e4a, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4b, 0x0e4c, 0x009f, +}; + +static int +ebcdic838_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic838_2uni[c]; + return 1; +} + +static const unsigned char ebcdic838_page00[176] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x49, 0xe0, 0x59, 0x69, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x6a, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; +static const unsigned char ebcdic838_page0e[96] = { + 0x00, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* 0x00-0x07 */ + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x62, /* 0x08-0x0f */ + 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x72, 0x73, /* 0x10-0x17 */ + 0x74, 0x75, 0x76, 0x77, 0x78, 0x8a, 0x8b, 0x8c, /* 0x18-0x1f */ + 0x8d, 0x8e, 0x8f, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, /* 0x20-0x27 */ + 0x9f, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xba, /* 0x28-0x2f */ + 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xcb, 0xcc, 0xcd, /* 0x30-0x37 */ + 0xce, 0xcf, 0xda, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0x38-0x3f */ + 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, /* 0x40-0x47 */ + 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0x71, 0x80, /* 0x48-0x4f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x50-0x57 */ + 0xb8, 0xb9, 0x90, 0xa0, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ +}; + +static int +ebcdic838_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00b0) + c = ebcdic838_page00[wc]; + else if (wc >= 0x0e00 && wc < 0x0e60) + c = ebcdic838_page0e[wc-0x0e00]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic870.h b/jni/parted/libiconv/lib/ebcdic870.h new file mode 100755 index 0000000..8b14f83 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic870.h @@ -0,0 +1,154 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-870 + */ + +static const unsigned short ebcdic870_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0163, 0x00e1, 0x0103, 0x010d, + 0x00e7, 0x0107, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x0119, 0x00eb, 0x016f, 0x00ed, 0x00ee, 0x013e, + 0x013a, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x02dd, 0x00c1, 0x0102, 0x010c, + 0x00c7, 0x0106, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x02c7, 0x00c9, 0x0118, 0x00cb, 0x016e, 0x00cd, 0x00ce, 0x013d, + 0x0139, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x02d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x015b, 0x0148, 0x0111, 0x00fd, 0x0159, 0x015f, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0142, 0x0144, 0x0161, 0x00b8, 0x02db, 0x00a4, + /* 0xa0 */ + 0x0105, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x015a, 0x0147, 0x0110, 0x00dd, 0x0158, 0x015e, + /* 0xb0 */ + 0x02d9, 0x0104, 0x017c, 0x0162, 0x017b, 0x00a7, 0x017e, 0x017a, + 0x017d, 0x0179, 0x0141, 0x0143, 0x0160, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x0155, 0x00f3, 0x0151, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x011a, 0x0171, 0x00fc, 0x0165, 0x00fa, 0x011b, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x010f, 0x00d4, 0x00d6, 0x0154, 0x00d3, 0x0150, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x010e, 0x0170, 0x00dc, 0x0164, 0x00da, 0x009f, +}; + +static int +ebcdic870_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic870_2uni[c]; + return 1; +} + +static const unsigned char ebcdic870_page00[384] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0x90, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x65, 0x62, 0x00, 0x63, 0x00, 0x00, 0x68, /* 0xc0-0xc7 */ + 0x00, 0x71, 0x00, 0x73, 0x00, 0x75, 0x76, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xfe, 0x00, 0xfc, 0xad, 0x00, 0x59, /* 0xd8-0xdf */ + 0x00, 0x45, 0x42, 0x00, 0x43, 0x00, 0x00, 0x48, /* 0xe0-0xe7 */ + 0x00, 0x51, 0x00, 0x53, 0x00, 0x55, 0x56, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xde, 0x00, 0xdc, 0x8d, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0x66, 0x46, 0xb1, 0xa0, 0x69, 0x49, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x67, 0x47, 0xfa, 0xea, /* 0x08-0x0f */ + 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x72, 0x52, 0xda, 0xdf, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x78, 0x58, 0x00, 0x00, 0x77, 0x57, 0x00, /* 0x38-0x3f */ + 0x00, 0xba, 0x9a, 0xbb, 0x9b, 0x00, 0x00, 0xab, /* 0x40-0x47 */ + 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xef, 0xcf, 0x00, 0x00, 0xed, 0xcd, 0x00, 0x00, /* 0x50-0x57 */ + 0xae, 0x8e, 0xaa, 0x8a, 0x00, 0x00, 0xaf, 0x8f, /* 0x58-0x5f */ + 0xbc, 0x9c, 0xb3, 0x44, 0xfd, 0xdd, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, /* 0x68-0x6f */ + 0xfb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xb9, 0xb7, 0xb4, 0xb2, 0xb8, 0xb6, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char ebcdic870_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x80, 0xb0, 0x00, 0x9e, 0x00, 0x64, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static int +ebcdic870_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0180) + c = ebcdic870_page00[wc]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = ebcdic870_page02[wc-0x02c0]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic871.h b/jni/parted/libiconv/lib/ebcdic871.h new file mode 100755 index 0000000..0e091cd --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic871.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-871 + */ + +static const unsigned short ebcdic871_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x00de, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x00c6, 0x0024, 0x002a, 0x0029, 0x003b, 0x00d6, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x00f0, 0x003a, 0x0023, 0x00d0, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0060, 0x00fd, 0x007b, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x007d, 0x00b8, 0x005d, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0040, 0x00dd, 0x005b, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, + 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x005c, 0x00d7, + /* 0xc0 */ + 0x00fe, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x00e6, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x00b4, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x005e, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic871_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic871_2uni[c]; + return 1; +} + +static const unsigned char ebcdic871_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xac, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xae, 0xbe, 0x9e, 0xec, 0x6d, /* 0x58-0x5f */ + 0x8c, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x8e, 0xbb, 0x9c, 0xcc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0xe0, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x5a, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0x7c, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x5f, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0x4a, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0xd0, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x79, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xa1, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0xc0, 0xdf, /* 0xf8-0xff */ +}; + +static int +ebcdic871_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic871_page00[wc]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic875.h b/jni/parted/libiconv/lib/ebcdic875.h new file mode 100755 index 0000000..dee3f46 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic875.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-875 + */ + +static const unsigned short ebcdic875_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, + 0x03a1, 0x03a3, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, + 0x03aa, 0x03ab, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00a8, 0x0386, 0x0388, 0x0389, 0x00a0, 0x038a, 0x038c, 0x038e, + 0x038f, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0385, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, + /* 0xa0 */ + 0x00b4, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, + /* 0xb0 */ + 0x00a3, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd, + 0x03cb, 0x03ce, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x03c9, 0x0390, 0x03b0, 0x2018, 0x2015, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b1, 0x00bd, 0xfffd, 0x0387, 0x2019, 0x00a6, + /* 0xe0 */ + 0x005c, 0xfffd, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00a7, 0xfffd, 0xfffd, 0x00ab, 0x00ac, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00a9, 0xfffd, 0xfffd, 0x00bb, 0x009f, +}; + +static int +ebcdic875_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic875_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char ebcdic875_page00[192] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x74, 0x00, 0x00, 0xb0, 0x00, 0x00, 0xdf, 0xeb, /* 0xa0-0xa7 */ + 0x70, 0xfb, 0x00, 0xee, 0xef, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0x90, 0xda, 0xea, 0xfa, 0xa0, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xfe, 0x00, 0xdb, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char ebcdic875_page03[80] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x71, 0xdd, /* 0x80-0x87 */ + 0x72, 0x73, 0x75, 0x00, 0x76, 0x00, 0x77, 0x78, /* 0x88-0x8f */ + 0xcc, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x90-0x97 */ + 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, /* 0x98-0x9f */ + 0x57, 0x58, 0x00, 0x59, 0x62, 0x63, 0x64, 0x65, /* 0xa0-0xa7 */ + 0x66, 0x67, 0x68, 0x69, 0xb1, 0xb2, 0xb3, 0xb5, /* 0xa8-0xaf */ + 0xcd, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x9a, /* 0xb0-0xb7 */ + 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xaa, 0xab, 0xac, /* 0xb8-0xbf */ + 0xad, 0xae, 0xba, 0xaf, 0xbb, 0xbc, 0xbd, 0xbe, /* 0xc0-0xc7 */ + 0xbf, 0xcb, 0xb4, 0xb8, 0xb6, 0xb7, 0xb9, 0x00, /* 0xc8-0xcf */ +}; +static const unsigned char ebcdic875_page20[16] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, /* 0x10-0x17 */ + 0xce, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; + +static int +ebcdic875_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00c0) + c = ebcdic875_page00[wc]; + else if (wc >= 0x0380 && wc < 0x03d0) + c = ebcdic875_page03[wc-0x0380]; + else if (wc >= 0x2010 && wc < 0x2020) + c = ebcdic875_page20[wc-0x2010]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic880.h b/jni/parted/libiconv/lib/ebcdic880.h new file mode 100755 index 0000000..bcadc52 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic880.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-880 + */ + +static const unsigned short ebcdic880_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, + 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a, + 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430, + 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, + /* 0x90 */ + 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xa0 */ + 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + /* 0xb0 */ + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421, + /* 0xe0 */ + 0x005c, 0x00a4, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f, +}; + +static int +ebcdic880_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic880_2uni[c]; + return 1; +} + +static const unsigned char ebcdic880_page00[176] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */ +}; +static const unsigned char ebcdic880_page04[96] = { + 0x00, 0x63, 0x59, 0x62, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */ + 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */ + 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */ + 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */ + 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */ + 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */ + 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */ + 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */ + 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */ + 0x00, 0x44, 0x42, 0x43, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */ + 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */ +}; + +static int +ebcdic880_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00b0) + c = ebcdic880_page00[wc]; + else if (wc >= 0x0400 && wc < 0x0460) + c = ebcdic880_page04[wc-0x0400]; + else if (wc == 0x2116) + c = 0x58; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic905.h b/jni/parted/libiconv/lib/ebcdic905.h new file mode 100755 index 0000000..6041c99 --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic905.h @@ -0,0 +1,157 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-905 + */ + +static const unsigned short ebcdic905_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0xfffd, 0x010b, + 0x007b, 0x00f1, 0x00c7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x011e, 0x0130, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0xfffd, 0x010a, + 0x005b, 0x00d1, 0x015f, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0xfffd, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0131, 0x003a, 0x00d6, 0x015e, 0x0027, 0x003d, 0x00dc, + /* 0x80 */ + 0x02d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x0127, 0x0109, 0x015d, 0x016d, 0xfffd, 0x007c, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0125, 0x011d, 0x0135, 0x00b8, 0xfffd, 0x00a4, + /* 0xa0 */ + 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x0126, 0x0108, 0x015c, 0x016c, 0xfffd, 0x0040, + /* 0xb0 */ + 0x02d9, 0x00a3, 0x017c, 0x007d, 0x017b, 0x00a7, 0x005d, 0x00b7, + 0x00bd, 0x0024, 0x0124, 0x011c, 0x0134, 0x00a8, 0x00b4, 0x00d7, + /* 0xc0 */ + 0x00e7, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x0121, + /* 0xd0 */ + 0x011f, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x0060, 0x00fb, 0x005c, 0x00f9, 0x00fa, 0xfffd, + /* 0xe0 */ + 0x00fc, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0023, 0x00d2, 0x00d3, 0x0120, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x0022, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic905_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc = ebcdic905_2uni[c]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char ebcdic905_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x4f, 0xfc, 0xec, 0xb9, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0xaf, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0x68, 0xdc, 0xb6, 0x5f, 0x6d, /* 0x58-0x5f */ + 0xda, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0x48, 0x8f, 0xb3, 0xcc, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0x00, 0x00, 0xb1, 0x9f, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */ + 0xbd, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */ + 0x90, 0x00, 0xea, 0xfa, 0xbe, 0xa0, 0x00, 0xb7, /* 0xb0-0xb7 */ + 0x9d, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x00, 0x63, 0x00, 0x00, 0x4a, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0x00, 0x69, 0xed, 0xee, 0xeb, 0x00, 0x7b, 0xbf, /* 0xd0-0xd7 */ + 0x00, 0xfd, 0xfe, 0xfb, 0x7f, 0x00, 0x00, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x00, 0x43, 0x00, 0x00, 0xc0, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x00, 0x49, 0xcd, 0xce, 0xcb, 0x00, 0xa1, 0xe1, /* 0xf0-0xf7 */ + 0x00, 0xdd, 0xde, 0xdb, 0xe0, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char ebcdic905_page01[120] = { + 0xab, 0x8b, 0x67, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xbb, 0x9b, 0x5a, 0xd0, /* 0x18-0x1f */ + 0xef, 0xcf, 0x00, 0x00, 0xba, 0x9a, 0xaa, 0x8a, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x5b, 0x79, 0x00, 0x00, 0xbc, 0x9c, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xac, 0x8c, 0x7c, 0x6a, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xad, 0x8d, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0xb4, 0xb2, 0x00, 0x00, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char ebcdic905_page02[8] = { + 0x80, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static int +ebcdic905_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic905_page00[wc]; + else if (wc >= 0x0108 && wc < 0x0180) + c = ebcdic905_page01[wc-0x0108]; + else if (wc >= 0x02d8 && wc < 0x02e0) + c = ebcdic905_page02[wc-0x02d8]; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ebcdic924.h b/jni/parted/libiconv/lib/ebcdic924.h new file mode 100755 index 0000000..cc7cd7c --- /dev/null +++ b/jni/parted/libiconv/lib/ebcdic924.h @@ -0,0 +1,141 @@ +/* + * Copyright (C) 1999-2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * IBM-924 + */ + +static const unsigned short ebcdic924_2uni[256] = { + /* 0x00 */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, + 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, + 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20 */ + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, + /* 0x30 */ + 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, + 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, + /* 0x40 */ + 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, + 0x00e7, 0x00f1, 0x00dd, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, + /* 0x50 */ + 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, + 0x00ec, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, + /* 0x60 */ + 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, + 0x00c7, 0x00d1, 0x0160, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, + /* 0x70 */ + 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, + 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, + /* 0x80 */ + 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, + /* 0x90 */ + 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x017e, 0x00c6, 0x20ac, + /* 0xa0 */ + 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, + 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x005b, 0x00de, 0x00ae, + /* 0xb0 */ + 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x0152, + 0x0153, 0x0178, 0x00ac, 0x0161, 0x00af, 0x005d, 0x017d, 0x00d7, + /* 0xc0 */ + 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, + /* 0xd0 */ + 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, + /* 0xe0 */ + 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, + /* 0xf0 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f, +}; + +static int +ebcdic924_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) ebcdic924_2uni[c]; + return 1; +} + +static const unsigned char ebcdic924_page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */ + 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */ + 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */ + 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */ + 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */ + 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */ + 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */ + 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */ + 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */ + 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */ + 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */ + 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */ + 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */ + 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x00, 0xb5, /* 0xa0-0xa7 */ + 0x00, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */ + 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */ + 0x00, 0xda, 0x9b, 0x8b, 0x00, 0x00, 0x00, 0xab, /* 0xb8-0xbf */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */ + 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */ + 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0x4a, 0xae, 0x59, /* 0xd8-0xdf */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */ + 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */ + 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */ +}; +static const unsigned char ebcdic924_page01[48] = { + 0x00, 0x00, 0xb7, 0xb8, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x6a, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xb9, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x00, /* 0x78-0x7f */ +}; + +static int +ebcdic924_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0100) + c = ebcdic924_page00[wc]; + else if (wc >= 0x0150 && wc < 0x0180) + c = ebcdic924_page01[wc-0x0150]; + else if (wc == 0x20ac) + c = 0x9f; + if (c != 0 || wc == 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/encodings.def b/jni/parted/libiconv/lib/encodings.def new file mode 100755 index 0000000..41d8063 --- /dev/null +++ b/jni/parted/libiconv/lib/encodings.def @@ -0,0 +1,1040 @@ +/* Copyright (C) 1999-2011 Free Software Foundation, Inc. + This file is part of the GNU LIBICONV Library. + + The GNU LIBICONV Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + The GNU LIBICONV Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU LIBICONV Library; see the file COPYING.LIB. + If not, see . */ + +/* The list of all system independent user-visible encodings. */ + +/* By convention, an encoding named FOOBAR or FOO_BAR or FOO-BAR is defined + in a file named "foobar.h" through the functions foobar_mbtowc and + foobar_wctomb (and possibly foobar_reset). */ + +/* DEFENCODING(( name, alias1, ..., ), + xxx, + { xxx_mbtowc, xxx_flushwc }, + { xxx_wctomb, xxx_reset }) + defines an encoding with the given name and aliases. (There is no + difference between a name and an alias. By convention, the name is chosen + as the preferred MIME name or the standard name.) + All names and aliases must be in ASCII. Case is not significant, but + for the "cs*" aliases mixed case is preferred, otherwise UPPERCASE is + preferred. For all names and aliases, note where it comes from. + xxx is the name as used in the C code (lowercase). + */ + + +DEFENCODING(( "US-ASCII", /* IANA */ + "ASCII", /* IANA, JDK 1.1 */ + "ISO646-US", /* IANA */ + "ISO_646.IRV:1991", /* IANA */ + "ISO-IR-6", /* IANA */ + "ANSI_X3.4-1968", /* IANA */ + "ANSI_X3.4-1986", /* IANA */ + "CP367", /* IANA */ + "IBM367", /* IANA */ + "US", /* IANA */ + "csASCII", /* IANA */ + /*"ISO646.1991-IRV", X11R6.4 */ + ), + ascii, + { ascii_mbtowc, NULL }, { ascii_wctomb, NULL }) +#ifdef USE_SOLARIS_ALIASES +DEFALIAS( "646", /* Solaris */ + ascii) +#endif + +/* General multi-byte encodings */ + +DEFENCODING(( "UTF-8", /* IANA, RFC 2279 */ + /*"UTF8", JDK 1.1 */ + /*"CP65001", Windows */ + ), + utf8, + { utf8_mbtowc, NULL }, { utf8_wctomb, NULL }) +#ifdef USE_HPUX_ALIASES +DEFALIAS( "UTF8", /* HP-UX */ + utf8) +#endif + +DEFENCODING(( "UCS-2", /* glibc */ + "ISO-10646-UCS-2", /* IANA */ + "csUnicode", /* IANA */ + ), + ucs2, + { ucs2_mbtowc, NULL }, { ucs2_wctomb, NULL }) + +DEFENCODING(( "UCS-2BE", /* glibc */ + "UNICODEBIG", /* glibc */ + "UNICODE-1-1", /* IANA */ + "csUnicode11", /* IANA */ + /*"CP1201", Windows */ + ), + ucs2be, + { ucs2be_mbtowc, NULL }, { ucs2be_wctomb, NULL }) + +DEFENCODING(( "UCS-2LE", /* glibc */ + "UNICODELITTLE", /* glibc */ + /*"CP1200", Windows */ + ), + ucs2le, + { ucs2le_mbtowc, NULL }, { ucs2le_wctomb, NULL }) + +DEFENCODING(( "UCS-4", /* glibc */ + "ISO-10646-UCS-4", /* IANA */ + "csUCS4", /* IANA */ + ), + ucs4, + { ucs4_mbtowc, NULL }, { ucs4_wctomb, NULL }) + +DEFENCODING(( "UCS-4BE", /* glibc */ + /*"CP12001", Windows */ + ), + ucs4be, + { ucs4be_mbtowc, NULL }, { ucs4be_wctomb, NULL }) + +DEFENCODING(( "UCS-4LE", /* glibc */ + /*"CP12000", Windows */ + ), + ucs4le, + { ucs4le_mbtowc, NULL }, { ucs4le_wctomb, NULL }) + +DEFENCODING(( "UTF-16", /* IANA, RFC 2781 */ + ), + utf16, + { utf16_mbtowc, NULL }, { utf16_wctomb, NULL }) + +DEFENCODING(( "UTF-16BE", /* IANA, RFC 2781 */ + ), + utf16be, + { utf16be_mbtowc, NULL }, { utf16be_wctomb, NULL }) + +DEFENCODING(( "UTF-16LE", /* IANA, RFC 2781 */ + ), + utf16le, + { utf16le_mbtowc, NULL }, { utf16le_wctomb, NULL }) + +DEFENCODING(( "UTF-32", /* IANA, Unicode 3.1 */ + ), + utf32, + { utf32_mbtowc, NULL }, { utf32_wctomb, NULL }) + +DEFENCODING(( "UTF-32BE", /* IANA, Unicode 3.1 */ + ), + utf32be, + { utf32be_mbtowc, NULL }, { utf32be_wctomb, NULL }) + +DEFENCODING(( "UTF-32LE", /* IANA, Unicode 3.1 */ + ), + utf32le, + { utf32le_mbtowc, NULL }, { utf32le_wctomb, NULL }) + +DEFENCODING(( "UTF-7", /* IANA, RFC 2152 */ + "UNICODE-1-1-UTF-7", /* IANA, RFC 1642 */ + "csUnicode11UTF7", /* IANA */ + /*"CP65000", Windows */ + ), + utf7, + { utf7_mbtowc, NULL }, { utf7_wctomb, utf7_reset }) + +DEFENCODING(( "UCS-2-INTERNAL", /* libiconv */ + ), + ucs2internal, + { ucs2internal_mbtowc, NULL }, { ucs2internal_wctomb, NULL }) + +DEFENCODING(( "UCS-2-SWAPPED", /* libiconv */ + ), + ucs2swapped, + { ucs2swapped_mbtowc, NULL }, { ucs2swapped_wctomb, NULL }) + +DEFENCODING(( "UCS-4-INTERNAL", /* libiconv */ + ), + ucs4internal, + { ucs4internal_mbtowc, NULL },{ ucs4internal_wctomb, NULL }) + +DEFENCODING(( "UCS-4-SWAPPED", /* libiconv */ + ), + ucs4swapped, + { ucs4swapped_mbtowc, NULL }, { ucs4swapped_wctomb, NULL }) + +DEFENCODING(( "C99", + ), + c99, + { c99_mbtowc, NULL }, { c99_wctomb, NULL }) + +DEFENCODING(( "JAVA", + ), + java, + { java_mbtowc, NULL }, { java_wctomb, NULL }) + +/* Standard 8-bit encodings */ + +DEFENCODING(( "ISO-8859-1", /* IANA */ + "ISO_8859-1", /* IANA */ + "ISO_8859-1:1987", /* IANA */ + "ISO-IR-100", /* IANA */ + "CP819", /* IANA */ + "IBM819", /* IANA */ + "LATIN1", /* IANA */ + "L1", /* IANA */ + "csISOLatin1", /* IANA */ + "ISO8859-1", /* X11R6.4, glibc, FreeBSD, AIX, IRIX, OSF/1, Solaris */ + /*"ISO8859_1", JDK 1.1 */ + /*"CP28591", Windows */ + ), + iso8859_1, + { iso8859_1_mbtowc, NULL }, { iso8859_1_wctomb, NULL }) +#ifdef USE_HPUX_ALIASES +DEFALIAS( "ISO88591", /* HP-UX */ + iso8859_1) +#endif + +DEFENCODING(( "ISO-8859-2", /* IANA */ + "ISO_8859-2", /* IANA */ + "ISO_8859-2:1987", /* IANA */ + "ISO-IR-101", /* IANA */ + "LATIN2", /* IANA */ + "L2", /* IANA */ + "csISOLatin2", /* IANA */ + "ISO8859-2", /* X11R6.4, glibc, FreeBSD, AIX, IRIX, OSF/1, Solaris */ + /*"ISO8859_2", JDK 1.1 */ + /*"CP28592", Windows */ + ), + iso8859_2, + { iso8859_2_mbtowc, NULL }, { iso8859_2_wctomb, NULL }) +#ifdef USE_HPUX_ALIASES +DEFALIAS( "ISO88592", /* HP-UX */ + iso8859_2) +#endif + +DEFENCODING(( "ISO-8859-3", /* IANA */ + "ISO_8859-3", /* IANA */ + "ISO_8859-3:1988", /* IANA */ + "ISO-IR-109", /* IANA */ + "LATIN3", /* IANA */ + "L3", /* IANA */ + "csISOLatin3", /* IANA */ + "ISO8859-3", /* X11R6.4, glibc, FreeBSD, Solaris */ + /*"ISO8859_3", JDK 1.1 */ + /*"CP28593", Windows */ + ), + iso8859_3, + { iso8859_3_mbtowc, NULL }, { iso8859_3_wctomb, NULL }) + +DEFENCODING(( "ISO-8859-4", /* IANA */ + "ISO_8859-4", /* IANA */ + "ISO_8859-4:1988", /* IANA */ + "ISO-IR-110", /* IANA */ + "LATIN4", /* IANA */ + "L4", /* IANA */ + "csISOLatin4", /* IANA */ + "ISO8859-4", /* X11R6.4, glibc, FreeBSD, OSF/1, Solaris */ + /*"ISO8859_4", JDK 1.1 */ + /*"CP28594", Windows */ + ), + iso8859_4, + { iso8859_4_mbtowc, NULL }, { iso8859_4_wctomb, NULL }) + +DEFENCODING(( "ISO-8859-5", /* IANA */ + "ISO_8859-5", /* IANA */ + "ISO_8859-5:1988", /* IANA */ + "ISO-IR-144", /* IANA */ + "CYRILLIC", /* IANA */ + "csISOLatinCyrillic", /* IANA */ + "ISO8859-5", /* X11R6.4, glibc, FreeBSD, AIX, IRIX, OSF/1, Solaris */ + /*"ISO8859_5", JDK 1.1 */ + /*"CP28595", Windows */ + ), + iso8859_5, + { iso8859_5_mbtowc, NULL }, { iso8859_5_wctomb, NULL }) +#ifdef USE_HPUX_ALIASES +DEFALIAS( "ISO88595", /* HP-UX */ + iso8859_5) +#endif + +DEFENCODING(( "ISO-8859-6", /* IANA */ + "ISO_8859-6", /* IANA */ + "ISO_8859-6:1987", /* IANA */ + "ISO-IR-127", /* IANA */ + "ECMA-114", /* IANA */ + "ASMO-708", /* IANA */ + "ARABIC", /* IANA */ + "csISOLatinArabic", /* IANA */ + "ISO8859-6", /* X11R6.4, glibc, FreeBSD, AIX, Solaris */ + /*"ISO8859_6", JDK 1.1 */ + /*"CP28596", Windows */ + ), + iso8859_6, + { iso8859_6_mbtowc, NULL }, { iso8859_6_wctomb, NULL }) +#ifdef USE_HPUX_ALIASES +DEFALIAS( "ISO88596", /* HP-UX */ + iso8859_6) +#endif + +DEFENCODING(( "ISO-8859-7", /* IANA, RFC 1947 */ + "ISO_8859-7", /* IANA */ + "ISO_8859-7:1987", /* IANA */ + "ISO_8859-7:2003", + "ISO-IR-126", /* IANA */ + "ECMA-118", /* IANA */ + "ELOT_928", /* IANA */ + "GREEK8", /* IANA */ + "GREEK", /* IANA */ + "csISOLatinGreek", /* IANA */ + "ISO8859-7", /* X11R6.4, glibc, FreeBSD, AIX, IRIX, OSF/1, Solaris */ + /*"ISO8859_7", JDK 1.1 */ + /*"CP28597", Windows */ + ), + iso8859_7, + { iso8859_7_mbtowc, NULL }, { iso8859_7_wctomb, NULL }) +#ifdef USE_HPUX_ALIASES +DEFALIAS( "ISO88597", /* HP-UX */ + iso8859_7) +#endif + +DEFENCODING(( "ISO-8859-8", /* IANA */ + "ISO_8859-8", /* IANA */ + "ISO_8859-8:1988", /* IANA */ + "ISO-IR-138", /* IANA */ + "HEBREW", /* IANA */ + "csISOLatinHebrew", /* IANA */ + "ISO8859-8", /* X11R6.4, glibc, FreeBSD, AIX, OSF/1, Solaris */ + /*"ISO8859_8", JDK 1.1 */ + /*"CP28598", Windows */ + /*"CP38598", Windows */ + ), + iso8859_8, + { iso8859_8_mbtowc, NULL }, { iso8859_8_wctomb, NULL }) +#ifdef USE_HPUX_ALIASES +DEFALIAS( "ISO88598", /* HP-UX */ + iso8859_8) +#endif + +DEFENCODING(( "ISO-8859-9", /* IANA */ + "ISO_8859-9", /* IANA */ + "ISO_8859-9:1989", /* IANA */ + "ISO-IR-148", /* IANA */ + "LATIN5", /* IANA */ + "L5", /* IANA */ + "csISOLatin5", /* IANA */ + "ISO8859-9", /* X11R6.4, glibc, FreeBSD, AIX, IRIX, OSF/1, Solaris */ + /*"ISO8859_9", JDK 1.1 */ + /*"CP28599", Windows */ + ), + iso8859_9, + { iso8859_9_mbtowc, NULL }, { iso8859_9_wctomb, NULL }) +#ifdef USE_HPUX_ALIASES +DEFALIAS( "ISO88599", /* HP-UX */ + iso8859_9) +#endif + +DEFENCODING(( "ISO-8859-10", /* IANA */ + "ISO_8859-10", + "ISO_8859-10:1992", /* IANA */ + "ISO-IR-157", /* IANA */ + "LATIN6", /* IANA */ + "L6", /* IANA */ + "csISOLatin6", /* IANA */ + "ISO8859-10", /* X11R6.4, glibc, FreeBSD */ + ), + iso8859_10, + { iso8859_10_mbtowc, NULL }, { iso8859_10_wctomb, NULL }) + +DEFENCODING(( "ISO-8859-11", /* glibc */ + "ISO_8859-11", + "ISO8859-11", /* X11R6.7, glibc */ + ), + iso8859_11, + { iso8859_11_mbtowc, NULL }, { iso8859_11_wctomb, NULL }) + +DEFENCODING(( "ISO-8859-13", /* IANA, glibc */ + "ISO_8859-13", + "ISO-IR-179", /* glibc */ + "LATIN7", /* glibc */ + "L7", /* glibc */ + "ISO8859-13", /* glibc, FreeBSD */ + /*"CP28603", Windows */ + ), + iso8859_13, + { iso8859_13_mbtowc, NULL }, { iso8859_13_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-921", /* AIX */ + iso8859_13) +#endif + +DEFENCODING(( "ISO-8859-14", /* IANA, glibc */ + "ISO_8859-14", /* IANA */ + "ISO_8859-14:1998", /* IANA, glibc */ + "ISO-IR-199", /* IANA */ + "LATIN8", /* IANA, glibc */ + "L8", /* IANA, glibc */ + "ISO-CELTIC", /* IANA */ + "ISO8859-14", /* glibc, FreeBSD */ + ), + iso8859_14, + { iso8859_14_mbtowc, NULL }, { iso8859_14_wctomb, NULL }) + +DEFENCODING(( "ISO-8859-15", /* IANA, glibc */ + "ISO_8859-15", /* IANA */ + "ISO_8859-15:1998", /* glibc */ + "ISO-IR-203", + "LATIN-9", /* IANA */ + "ISO8859-15", /* glibc, FreeBSD, AIX, OSF/1, Solaris */ + /*"CP28605", Windows */ + ), + iso8859_15, + { iso8859_15_mbtowc, NULL }, { iso8859_15_wctomb, NULL }) +#ifdef USE_HPUX_ALIASES +DEFALIAS( "ISO885915", /* HP-UX */ + iso8859_15) +#endif + +DEFENCODING(( "ISO-8859-16", /* IANA */ + "ISO_8859-16", /* IANA */ + "ISO_8859-16:2001", /* IANA */ + "ISO-IR-226", /* IANA */ + "LATIN10", /* IANA */ + "L10", /* IANA */ + "ISO8859-16", /* glibc, FreeBSD */ + ), + iso8859_16, + { iso8859_16_mbtowc, NULL }, { iso8859_16_wctomb, NULL }) + +DEFENCODING(( "KOI8-R", /* IANA, RFC 1489, X11R6.4, JDK 1.1 */ + "csKOI8R", /* IANA */ + /*"CP20866", Windows */ + ), + koi8_r, + { koi8_r_mbtowc, NULL }, { koi8_r_wctomb, NULL }) + +DEFENCODING(( "KOI8-U", /* IANA, RFC 2319 */ + ), + koi8_u, + { koi8_u_mbtowc, NULL }, { koi8_u_wctomb, NULL }) + +DEFENCODING(( "KOI8-RU", + /*"CP21866", Windows */ + ), + koi8_ru, + { koi8_ru_mbtowc, NULL }, { koi8_ru_wctomb, NULL }) + +/* Windows 8-bit encodings */ + +DEFENCODING(( "CP1250", /* JDK 1.1 */ + "WINDOWS-1250", /* IANA */ + "MS-EE", + ), + cp1250, + { cp1250_mbtowc, NULL }, { cp1250_wctomb, NULL }) + +DEFENCODING(( "CP1251", /* JDK 1.1 */ + "WINDOWS-1251", /* IANA */ + "MS-CYRL", + ), + cp1251, + { cp1251_mbtowc, NULL }, { cp1251_wctomb, NULL }) +#ifdef USE_SOLARIS_ALIASES +DEFALIAS( "ANSI-1251", /* Solaris */ + cp1251) +#endif + +DEFENCODING(( "CP1252", /* JDK 1.1 */ + "WINDOWS-1252", /* IANA */ + "MS-ANSI", + ), + cp1252, + { cp1252_mbtowc, NULL }, { cp1252_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-1252", /* AIX */ + cp1252) +#endif + +DEFENCODING(( "CP1253", /* JDK 1.1 */ + "WINDOWS-1253", /* IANA */ + "MS-GREEK", + ), + cp1253, + { cp1253_mbtowc, NULL }, { cp1253_wctomb, NULL }) + +DEFENCODING(( "CP1254", /* JDK 1.1 */ + "WINDOWS-1254", /* IANA */ + "MS-TURK", + ), + cp1254, + { cp1254_mbtowc, NULL }, { cp1254_wctomb, NULL }) + +DEFENCODING(( "CP1255", /* JDK 1.1 */ + "WINDOWS-1255", /* IANA */ + "MS-HEBR", + ), + cp1255, + { cp1255_mbtowc, cp1255_flushwc }, { cp1255_wctomb, NULL }) + +DEFENCODING(( "CP1256", /* JDK 1.1 */ + "WINDOWS-1256", /* IANA */ + "MS-ARAB", + ), + cp1256, + { cp1256_mbtowc, NULL }, { cp1256_wctomb, NULL }) + +DEFENCODING(( "CP1257", /* JDK 1.1 */ + "WINDOWS-1257", /* IANA */ + "WINBALTRIM", + ), + cp1257, + { cp1257_mbtowc, NULL }, { cp1257_wctomb, NULL }) + +DEFENCODING(( "CP1258", /* JDK 1.1 */ + "WINDOWS-1258", /* IANA */ + ), + cp1258, + { cp1258_mbtowc, cp1258_flushwc }, { cp1258_wctomb, NULL }) + +/* DOS 8-bit encodings */ + +DEFENCODING(( "CP850", /* IANA, JDK 1.1 */ + "IBM850", /* IANA */ + "850", /* IANA */ + "csPC850Multilingual", /* IANA */ + ), + cp850, + { cp850_mbtowc, NULL }, { cp850_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-850", /* AIX */ + cp850) +#endif + +DEFENCODING(( "CP862", /* IANA, JDK 1.1 */ + "IBM862", /* IANA */ + "862", /* IANA */ + "csPC862LatinHebrew", /* IANA */ + ), + cp862, + { cp862_mbtowc, NULL }, { cp862_wctomb, NULL }) + +DEFENCODING(( "CP866", /* IANA, JDK 1.1 */ + "IBM866", /* IANA */ + "866", /* IANA */ + "csIBM866", /* IANA */ + ), + cp866, + { cp866_mbtowc, NULL }, { cp866_wctomb, NULL }) + +DEFENCODING(( "CP1131", /* FreeBSD, MacOS X */ + ), + cp1131, + { cp1131_mbtowc, NULL }, { cp1131_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-1131", /* AIX */ + cp1131) +#endif + +/* Macintosh 8-bit encodings */ + +DEFENCODING(( "MacRoman", /* JDK 1.1 */ + /* This is the best table for MACINTOSH. The ones */ + /* in glibc and FreeBSD-iconv are bad quality. */ + "MACINTOSH", /* IANA */ + "MAC", /* IANA */ + "csMacintosh", /* IANA */ + /*"CP10000", Windows */ + ), + mac_roman, + { mac_roman_mbtowc, NULL }, { mac_roman_wctomb, NULL }) + +DEFENCODING(( "MacCentralEurope", /* JDK 1.1 */ + /*"CP10029", Windows */ + ), + mac_centraleurope, + { mac_centraleurope_mbtowc, NULL }, { mac_centraleurope_wctomb, NULL }) + +DEFENCODING(( "MacIceland", /* JDK 1.1 */ + /*"CP10079", Windows */ + ), + mac_iceland, + { mac_iceland_mbtowc, NULL }, { mac_iceland_wctomb, NULL }) + +DEFENCODING(( "MacCroatian", /* JDK 1.1 */ + /*"CP10082", Windows */ + ), + mac_croatian, + { mac_croatian_mbtowc, NULL }, { mac_croatian_wctomb, NULL }) + +DEFENCODING(( "MacRomania", /* JDK 1.1 */ + /*"CP10010", Windows */ + ), + mac_romania, + { mac_romania_mbtowc, NULL }, { mac_romania_wctomb, NULL }) + +DEFENCODING(( "MacCyrillic", /* JDK 1.1 */ + /*"CP10007", Windows */ + ), + mac_cyrillic, + { mac_cyrillic_mbtowc, NULL }, { mac_cyrillic_wctomb, NULL }) + +DEFENCODING(( "MacUkraine", /* JDK 1.1 */ + /*"CP10017", Windows */ + ), + mac_ukraine, + { mac_ukraine_mbtowc, NULL }, { mac_ukraine_wctomb, NULL }) + +DEFENCODING(( "MacGreek", /* JDK 1.1 */ + /*"CP10006", Windows */ + ), + mac_greek, + { mac_greek_mbtowc, NULL }, { mac_greek_wctomb, NULL }) + +DEFENCODING(( "MacTurkish", /* JDK 1.1 */ + /*"CP10081", Windows */ + ), + mac_turkish, + { mac_turkish_mbtowc, NULL }, { mac_turkish_wctomb, NULL }) + +DEFENCODING(( "MacHebrew", /* JDK 1.1 */ + /*"CP10005", Windows */ + ), + mac_hebrew, + { mac_hebrew_mbtowc, NULL }, { mac_hebrew_wctomb, NULL }) + +DEFENCODING(( "MacArabic", /* JDK 1.1 */ + /*"CP10004", Windows */ + ), + mac_arabic, + { mac_arabic_mbtowc, NULL }, { mac_arabic_wctomb, NULL }) + +DEFENCODING(( "MacThai", /* JDK 1.1 */ + /*"CP10021", Windows */ + ), + mac_thai, + { mac_thai_mbtowc, NULL }, { mac_thai_wctomb, NULL }) + +/* Other platform specific 8-bit encodings */ + +DEFENCODING(( "HP-ROMAN8", /* IANA, X11R6.4 */ + "ROMAN8", /* IANA */ + "R8", /* IANA */ + "csHPRoman8", /* IANA */ + ), + hp_roman8, + { hp_roman8_mbtowc, NULL }, { hp_roman8_wctomb, NULL }) + +DEFENCODING(( "NEXTSTEP", + ), + nextstep, + { nextstep_mbtowc, NULL }, { nextstep_wctomb, NULL }) + +/* Regional 8-bit encodings used for a single language */ + +DEFENCODING(( "ARMSCII-8", + ), + armscii_8, + { armscii_8_mbtowc, NULL }, { armscii_8_wctomb, NULL }) + +DEFENCODING(( "GEORGIAN-ACADEMY", + ), + georgian_academy, + { georgian_academy_mbtowc, NULL }, { georgian_academy_wctomb, NULL }) + +DEFENCODING(( "GEORGIAN-PS", + ), + georgian_ps, + { georgian_ps_mbtowc, NULL }, { georgian_ps_wctomb, NULL }) + +DEFENCODING(( "KOI8-T", + ), + koi8_t, + { koi8_t_mbtowc, NULL }, { koi8_t_wctomb, NULL }) + +DEFENCODING(( "PT154", /* IANA, glibc */ + "PTCP154", /* IANA */ + "CP154", /* IANA */ + "CYRILLIC-ASIAN", /* IANA */ + "csPTCP154", /* IANA */ + ), + pt154, + { pt154_mbtowc, NULL }, { pt154_wctomb, NULL }) + +DEFENCODING(( "RK1048", /* IANA, glibc */ + "STRK1048-2002", /* IANA */ + "KZ-1048", /* IANA */ + "csKZ1048", /* IANA */ + ), + rk1048, + { rk1048_mbtowc, NULL }, { rk1048_wctomb, NULL }) + +DEFENCODING(( "MULELAO-1", + ), + mulelao, + { mulelao_mbtowc, NULL }, { mulelao_wctomb, NULL }) + +DEFENCODING(( "CP1133", + "IBM-CP1133", + ), + cp1133, + { cp1133_mbtowc, NULL }, { cp1133_wctomb, NULL }) + +DEFENCODING(( "TIS-620", /* IANA */ + "TIS620", /* glibc, HP-UX */ + "TIS620-0", /* glibc */ + "TIS620.2529-1", /* glibc */ + "TIS620.2533-0", /* glibc */ + "TIS620.2533-1", + "ISO-IR-166", /* glibc */ + ), + tis620, + { tis620_mbtowc, NULL }, { tis620_wctomb, NULL }) +#ifdef USE_OSF1_ALIASES +DEFALIAS( "TACTIS", /* OSF/1 */ + tis620) +#endif +#ifdef USE_SOLARIS_ALIASES +DEFALIAS( "TIS620.2533", /* Solaris */ + tis620) +#endif + +DEFENCODING(( "CP874", /* JDK 1.1 */ + "WINDOWS-874", + ), + cp874, + { cp874_mbtowc, NULL }, { cp874_wctomb, NULL }) + +DEFENCODING(( "VISCII", /* IANA, RFC 1456 */ + "VISCII1.1-1", + "csVISCII", /* IANA */ + ), + viscii, + { viscii_mbtowc, NULL }, { viscii_wctomb, NULL }) + +DEFENCODING(( "TCVN", + "TCVN-5712", + "TCVN5712-1", + "TCVN5712-1:1993", + ), + tcvn, + { tcvn_mbtowc, tcvn_flushwc }, { tcvn_wctomb, NULL }) + +/* CJK character sets (not documented) */ + +DEFENCODING(( "JIS_C6220-1969-RO", /* IANA */ + "ISO646-JP", /* IANA */ + "ISO-IR-14", /* IANA */ + "JP", /* IANA */ + "csISO14JISC6220ro", /* IANA */ + ), + iso646_jp, + { iso646_jp_mbtowc, NULL }, { iso646_jp_wctomb, NULL }) + +DEFENCODING(( "JIS_X0201", /* IANA */ + "JISX0201-1976", + "X0201", /* IANA */ + "csHalfWidthKatakana", /* IANA */ + /*"JISX0201.1976-0", X11R6.4 */ + /*"JIS0201", JDK 1.1 */ + ), + jisx0201, + { jisx0201_mbtowc, NULL }, { jisx0201_wctomb, NULL }) + +DEFENCODING(( "JIS_X0208", + "JIS_X0208-1983", /* IANA */ + "JIS_X0208-1990", + "JIS0208", + "X0208", /* IANA */ + "ISO-IR-87", /* IANA */ + "JIS_C6226-1983", /* IANA */ + "csISO87JISX0208", /* IANA */ + /*"JISX0208.1983-0", X11R6.4 */ + /*"JISX0208.1990-0", X11R6.4 */ + /*"JIS0208", JDK 1.1 */ + ), + jisx0208, + { jisx0208_mbtowc, NULL }, { jisx0208_wctomb, NULL }) + +DEFENCODING(( "JIS_X0212", + "JIS_X0212.1990-0", + "JIS_X0212-1990", /* IANA */ + "X0212", /* IANA */ + "ISO-IR-159", /* IANA */ + "csISO159JISX02121990", /* IANA */ + /*"JISX0212.1990-0", X11R6.4 */ + /*"JIS0212", JDK 1.1 */ + ), + jisx0212, + { jisx0212_mbtowc, NULL }, { jisx0212_wctomb, NULL }) + +DEFENCODING(( "GB_1988-80", /* IANA */ + "ISO646-CN", /* IANA */ + "ISO-IR-57", /* IANA */ + "CN", /* IANA */ + "csISO57GB1988", /* IANA */ + ), + iso646_cn, + { iso646_cn_mbtowc, NULL }, { iso646_cn_wctomb, NULL }) + +DEFENCODING(( "GB_2312-80", /* IANA */ + "ISO-IR-58", /* IANA */ + "csISO58GB231280", /* IANA */ + "CHINESE", /* IANA */ + /*"GB2312.1980-0", X11R6.4 */ + ), + gb2312, + { gb2312_mbtowc, NULL }, { gb2312_wctomb, NULL }) + +DEFENCODING(( "ISO-IR-165", + "CN-GB-ISOIR165", /* RFC 1922 */ + ), + isoir165, + { isoir165_mbtowc, NULL }, { isoir165_wctomb, NULL }) + +DEFENCODING(( "KSC_5601", /* IANA */ + "KS_C_5601-1987", /* IANA */ + "KS_C_5601-1989", /* IANA */ + "ISO-IR-149", /* IANA */ + "csKSC56011987", /* IANA */ + "KOREAN", /* IANA */ + /*"KSC5601.1987-0", X11R6.4 */ + /*"KSX1001:1992", Ken Lunde */ + ), + ksc5601, + { ksc5601_mbtowc, NULL }, { ksc5601_wctomb, NULL }) + +/* CJK encodings */ + +DEFENCODING(( "EUC-JP", /* IANA */ + "EUCJP", /* glibc, HP-UX, IRIX, OSF/1, Solaris */ + "Extended_UNIX_Code_Packed_Format_for_Japanese", /* IANA */ + "csEUCPkdFmtJapanese", /* IANA */ + /*"EUC_JP", JDK 1.1 */ + /*"CP51932", Windows */ + ), + euc_jp, + { euc_jp_mbtowc, NULL }, { euc_jp_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-EUCJP", /* AIX */ + euc_jp) +#endif +#ifdef USE_OSF1_ALIASES +DEFALIAS( "SDECKANJI", /* OSF/1 */ + euc_jp) +#endif + +DEFENCODING(( "SHIFT_JIS", /* IANA */ + "SHIFT-JIS", /* glibc */ + "SJIS", /* JDK 1.1, HP-UX, OSF/1 */ + "MS_KANJI", /* IANA */ + "csShiftJIS", /* IANA */ + ), + sjis, + { sjis_mbtowc, NULL }, { sjis_wctomb, NULL }) +#ifdef USE_SOLARIS_ALIASES +DEFALIAS( "PCK", /* Solaris */ + sjis) +#endif + +DEFENCODING(( "CP932", /* glibc */ + ), + cp932, + { cp932_mbtowc, NULL }, { cp932_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-932", /* AIX */ + cp932) +#endif + +DEFENCODING(( "ISO-2022-JP", /* IANA, RFC 1468 */ + "csISO2022JP", /* IANA */ + /*"ISO2022JP", JDK 1.1 */ + ), + iso2022_jp, + { iso2022_jp_mbtowc, NULL }, { iso2022_jp_wctomb, iso2022_jp_reset }) + +DEFENCODING(( "ISO-2022-JP-1", /* RFC 2237 */ + ), + iso2022_jp1, + { iso2022_jp1_mbtowc, NULL }, { iso2022_jp1_wctomb, iso2022_jp1_reset }) + +DEFENCODING(( "ISO-2022-JP-2", /* IANA, RFC 1554 */ + "csISO2022JP2", /* IANA */ + ), + iso2022_jp2, + { iso2022_jp2_mbtowc, NULL }, { iso2022_jp2_wctomb, iso2022_jp2_reset }) + +DEFENCODING(( "ISO-2022-JP-MS", + "CP50221", + /*"ISO-2022-JP-ESC", Windows */ + ), + iso2022_jpms, + { iso2022_jpms_mbtowc, NULL }, { iso2022_jpms_wctomb, iso2022_jpms_reset }) + +DEFENCODING(( "EUC-CN", /* glibc */ + "EUCCN", /* glibc, IRIX */ + "GB2312", /* IANA */ + "CN-GB", /* RFC 1922 */ + "csGB2312", /* IANA */ + /*"EUC_CN", JDK 1.1 */ + /*"CP51936", Windows */ + ), + euc_cn, + { euc_cn_mbtowc, NULL }, { euc_cn_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-EUCCN", /* AIX */ + euc_cn) +#endif +#ifdef USE_HPUX_ALIASES +DEFALIAS( "HP15CN", /* HP-UX */ + euc_cn) +#endif +#ifdef USE_OSF1_ALIASES +DEFALIAS( "DECHANZI", /* OSF/1 */ + euc_cn) +#endif + +DEFENCODING(( "GBK", /* IANA, JDK 1.1 */ + ), + ces_gbk, + { ces_gbk_mbtowc, NULL }, { ces_gbk_wctomb, NULL }) + +DEFENCODING(( "CP936", /* IANA */ + "MS936", /* IANA */ + "WINDOWS-936", /* IANA */ + ), + cp936, + { cp936_mbtowc, NULL }, { cp936_wctomb, NULL }) + +DEFENCODING(( "GB18030", /* IANA, glibc */ + /*"CP54936", Windows */ + ), + gb18030, + { gb18030_mbtowc, NULL }, { gb18030_wctomb, NULL }) + +DEFENCODING(( "ISO-2022-CN", /* IANA, RFC 1922 */ + "csISO2022CN", + /*"ISO2022CN", JDK 1.1 */ + ), + iso2022_cn, + { iso2022_cn_mbtowc, NULL }, { iso2022_cn_wctomb, iso2022_cn_reset }) + +DEFENCODING(( "ISO-2022-CN-EXT", /* IANA, RFC 1922 */ + ), + iso2022_cn_ext, + { iso2022_cn_ext_mbtowc, NULL }, { iso2022_cn_ext_wctomb, iso2022_cn_ext_reset }) + +DEFENCODING(( "HZ", /* RFC 1843 */ + "HZ-GB-2312", /* IANA, RFC 1842 */ + /*"CP52936", Windows */ + ), + hz, + { hz_mbtowc, NULL }, { hz_wctomb, hz_reset }) + +DEFENCODING(( "EUC-TW", /* glibc */ + "EUCTW", /* glibc, HP-UX, IRIX, OSF/1 */ + "csEUCTW", + /*"EUC_TW", JDK 1.1 */ + /*"CP51950", Windows */ + ), + euc_tw, + { euc_tw_mbtowc, NULL }, { euc_tw_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-EUCTW", /* AIX */ + euc_tw) +#endif +#ifdef USE_SOLARIS_ALIASES +DEFALIAS( "CNS11643", /* Solaris */ + euc_tw) +#endif + +DEFENCODING(( "BIG5", /* IANA, JDK 1.1 */ + "BIG-5", /* glibc */ + "BIG-FIVE", /* glibc */ + "BIGFIVE", /* glibc */ + "CN-BIG5", /* RFC 1922 */ + "csBig5", /* IANA */ + ), + ces_big5, + { ces_big5_mbtowc, NULL }, { ces_big5_wctomb, NULL }) + +DEFENCODING(( "CP950", /* JDK 1.1 */ + ), + cp950, + { cp950_mbtowc, NULL }, { cp950_wctomb, NULL }) + +DEFENCODING(( "BIG5-HKSCS:1999", + ), + big5hkscs1999, + { big5hkscs1999_mbtowc, big5hkscs1999_flushwc }, { big5hkscs1999_wctomb, big5hkscs1999_reset }) + +DEFENCODING(( "BIG5-HKSCS:2001", + ), + big5hkscs2001, + { big5hkscs2001_mbtowc, big5hkscs2001_flushwc }, { big5hkscs2001_wctomb, big5hkscs2001_reset }) + +DEFENCODING(( "BIG5-HKSCS:2004", + ), + big5hkscs2004, + { big5hkscs2004_mbtowc, big5hkscs2004_flushwc }, { big5hkscs2004_wctomb, big5hkscs2004_reset }) + +DEFENCODING(( "BIG5-HKSCS", /* IANA */ + "BIG5HKSCS", /* glibc */ + "BIG5-HKSCS:2008", + ), + big5hkscs2008, + { big5hkscs2008_mbtowc, big5hkscs2008_flushwc }, { big5hkscs2008_wctomb, big5hkscs2008_reset }) + +DEFENCODING(( "EUC-KR", /* IANA, RFC 1557 */ + "EUCKR", /* glibc, HP-UX, IRIX, OSF/1 */ + "csEUCKR", /* IANA */ + /*"EUC_KR", JDK 1.1 */ + /*"CP51949", Windows */ + ), + euc_kr, + { euc_kr_mbtowc, NULL }, { euc_kr_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-EUCKR", /* AIX */ + euc_kr) +#endif +#ifdef USE_OSF1_ALIASES +DEFALIAS( "DECKOREAN", /* OSF/1 */ + euc_kr) +#endif +#ifdef USE_SOLARIS_ALIASES +DEFALIAS( "5601", /* Solaris */ + euc_kr) +#endif + +DEFENCODING(( "CP949", /* JDK 1.1 */ + "UHC", /* glibc */ + ), + cp949, + { cp949_mbtowc, NULL }, { cp949_wctomb, NULL }) +#ifdef USE_OSF1_ALIASES +DEFALIAS( "KSC5601", /* OSF/1 */ + cp949) +#endif + +DEFENCODING(( "JOHAB", /* glibc */ + "CP1361", /* glibc */ + ), + johab, + { johab_mbtowc, NULL }, { johab_wctomb, NULL }) +#ifdef USE_SOLARIS_ALIASES +DEFALIAS( "KO_KR.JOHAP92", /* Solaris */ + johab) +#endif + +DEFENCODING(( "ISO-2022-KR", /* IANA, RFC 1557 */ + "csISO2022KR", /* IANA */ + /*"ISO2022KR", JDK 1.1 */ + /*"CP50225", Windows */ + ), + iso2022_kr, + { iso2022_kr_mbtowc, NULL }, { iso2022_kr_wctomb, iso2022_kr_reset }) + diff --git a/jni/parted/libiconv/lib/encodings_aix.def b/jni/parted/libiconv/lib/encodings_aix.def new file mode 100755 index 0000000..0a065f7 --- /dev/null +++ b/jni/parted/libiconv/lib/encodings_aix.def @@ -0,0 +1,96 @@ +/* Copyright (C) 2000-2002, 2008 Free Software Foundation, Inc. + This file is part of the GNU LIBICONV Library. + + The GNU LIBICONV Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + The GNU LIBICONV Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU LIBICONV Library; see the file COPYING.LIB. + If not, see . */ + +/* Encodings used by system dependent locales on AIX. */ + +DEFENCODING(( "CP856", + ), + cp856, + { cp856_mbtowc, NULL }, { cp856_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-856", /* AIX */ + cp856) +#endif + +DEFENCODING(( "CP922", + ), + cp922, + { cp922_mbtowc, NULL }, { cp922_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-922", /* AIX */ + cp922) +#endif + +DEFENCODING(( "CP943", + ), + cp943, + { cp943_mbtowc, NULL }, { cp943_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-943", /* AIX */ + cp943) +#endif + +DEFENCODING(( "CP1046", + ), + cp1046, + { cp1046_mbtowc, NULL }, { cp1046_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-1046", /* AIX */ + cp1046) +#endif + +DEFENCODING(( "CP1124", + ), + cp1124, + { cp1124_mbtowc, NULL }, { cp1124_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-1124", /* AIX */ + cp1124) +#endif + +DEFENCODING(( "CP1129", + ), + cp1129, + { cp1129_mbtowc, NULL }, { cp1129_wctomb, NULL }) +#ifdef USE_AIX_ALIASES +DEFALIAS( "IBM-1129", /* AIX */ + cp1129) +#endif + +DEFENCODING(( "CP1161", + "IBM1161", /* glibc */ + "IBM-1161", /* glibc */ + "csIBM1161", /* glibc */ + ), + cp1161, + { cp1161_mbtowc, NULL }, { cp1161_wctomb, NULL }) + +DEFENCODING(( "CP1162", + "IBM1162", /* glibc */ + "IBM-1162", /* glibc */ + "csIBM1162", /* glibc */ + ), + cp1162, + { cp1162_mbtowc, NULL }, { cp1162_wctomb, NULL }) + +DEFENCODING(( "CP1163", + "IBM1163", /* glibc */ + "IBM-1163", /* glibc */ + "csIBM1163", /* glibc */ + ), + cp1163, + { cp1163_mbtowc, NULL }, { cp1163_wctomb, NULL }) diff --git a/jni/parted/libiconv/lib/encodings_dos.def b/jni/parted/libiconv/lib/encodings_dos.def new file mode 100755 index 0000000..ae8cc55 --- /dev/null +++ b/jni/parted/libiconv/lib/encodings_dos.def @@ -0,0 +1,126 @@ +/* Copyright (C) 2001-2002 Free Software Foundation, Inc. + This file is part of the GNU LIBICONV Library. + + The GNU LIBICONV Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + The GNU LIBICONV Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU LIBICONV Library; see the file COPYING.LIB. + If not, see . */ + +/* Encodings used by system dependent locales on MSDOS. */ + +DEFENCODING(( "CP437", /* IANA, JDK 1.1 */ + "IBM437", /* IANA */ + "437", /* IANA */ + "csPC8CodePage437", /* IANA */ + ), + cp437, + { cp437_mbtowc, NULL }, { cp437_wctomb, NULL }) + +DEFENCODING(( "CP737", /* JDK 1.1 */ + ), + cp737, + { cp737_mbtowc, NULL }, { cp737_wctomb, NULL }) + +DEFENCODING(( "CP775", /* IANA, JDK 1.1 */ + "IBM775", /* IANA */ + "csPC775Baltic", /* IANA */ + ), + cp775, + { cp775_mbtowc, NULL }, { cp775_wctomb, NULL }) + +DEFENCODING(( "CP852", /* IANA, JDK 1.1 */ + "IBM852", /* IANA */ + "852", /* IANA */ + "csPCp852", /* IANA */ + ), + cp852, + { cp852_mbtowc, NULL }, { cp852_wctomb, NULL }) + +DEFENCODING(( "CP853", + ), + cp853, + { cp853_mbtowc, NULL }, { cp853_wctomb, NULL }) + +DEFENCODING(( "CP855", /* IANA, JDK 1.1 */ + "IBM855", /* IANA */ + "855", /* IANA */ + "csIBM855", /* IANA */ + ), + cp855, + { cp855_mbtowc, NULL }, { cp855_wctomb, NULL }) + +DEFENCODING(( "CP857", /* IANA, JDK 1.1 */ + "IBM857", /* IANA */ + "857", /* IANA */ + "csIBM857", /* IANA */ + ), + cp857, + { cp857_mbtowc, NULL }, { cp857_wctomb, NULL }) + +DEFENCODING(( "CP858", /* JDK 1.1.7 */ + ), + cp858, + { cp858_mbtowc, NULL }, { cp858_wctomb, NULL }) + +DEFENCODING(( "CP860", /* IANA, JDK 1.1 */ + "IBM860", /* IANA */ + "860", /* IANA */ + "csIBM860", /* IANA */ + ), + cp860, + { cp860_mbtowc, NULL }, { cp860_wctomb, NULL }) + +DEFENCODING(( "CP861", /* IANA, JDK 1.1 */ + "IBM861", /* IANA */ + "861", /* IANA */ + "CP-IS", /* IANA */ + "csIBM861", /* IANA */ + ), + cp861, + { cp861_mbtowc, NULL }, { cp861_wctomb, NULL }) + +DEFENCODING(( "CP863", /* IANA, JDK 1.1 */ + "IBM863", /* IANA */ + "863", /* IANA */ + "csIBM863", /* IANA */ + ), + cp863, + { cp863_mbtowc, NULL }, { cp863_wctomb, NULL }) + +DEFENCODING(( "CP864", /* IANA, JDK 1.1 */ + "IBM864", /* IANA */ + "csIBM864", /* IANA */ + ), + cp864, + { cp864_mbtowc, NULL }, { cp864_wctomb, NULL }) + +DEFENCODING(( "CP865", /* IANA, JDK 1.1 */ + "IBM865", /* IANA */ + "865", /* IANA */ + "csIBM865", /* IANA */ + ), + cp865, + { cp865_mbtowc, NULL }, { cp865_wctomb, NULL }) + +DEFENCODING(( "CP869", /* IANA, JDK 1.1 */ + "IBM869", /* IANA */ + "869", /* IANA */ + "CP-GR", /* IANA */ + "csIBM869", /* IANA */ + ), + cp869, + { cp869_mbtowc, NULL }, { cp869_wctomb, NULL }) + +DEFENCODING(( "CP1125", /* ICU */ + ), + cp1125, + { cp1125_mbtowc, NULL }, { cp1125_wctomb, NULL }) diff --git a/jni/parted/libiconv/lib/encodings_extra.def b/jni/parted/libiconv/lib/encodings_extra.def new file mode 100755 index 0000000..a72f690 --- /dev/null +++ b/jni/parted/libiconv/lib/encodings_extra.def @@ -0,0 +1,56 @@ +/* Copyright (C) 2002, 2005, 2008 Free Software Foundation, Inc. + This file is part of the GNU LIBICONV Library. + + The GNU LIBICONV Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + The GNU LIBICONV Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU LIBICONV Library; see the file COPYING.LIB. + If not, see . */ + +DEFENCODING(( "EUC-JISX0213", + "EUC-JIS-2004", /* x0213.org */ + ), + euc_jisx0213, + { euc_jisx0213_mbtowc, euc_jisx0213_flushwc }, { euc_jisx0213_wctomb, euc_jisx0213_reset }) + +DEFENCODING(( "SHIFT_JISX0213", + "SHIFT_JIS-2004", /* x0213.org */ + ), + shift_jisx0213, + { shift_jisx0213_mbtowc, shift_jisx0213_flushwc }, { shift_jisx0213_wctomb, shift_jisx0213_reset }) + +DEFENCODING(( "ISO-2022-JP-3", + "ISO-2022-JP-2004", /* x0213.org */ + ), + iso2022_jp3, + { iso2022_jp3_mbtowc, iso2022_jp3_flushwc }, { iso2022_jp3_wctomb, iso2022_jp3_reset }) + +DEFENCODING(( "BIG5-2003", + ), + big5_2003, + { big5_2003_mbtowc, NULL }, { big5_2003_wctomb, NULL }) + +DEFENCODING(( "TDS565", + "ISO-IR-230", + ), + tds565, + { tds565_mbtowc, NULL }, { tds565_wctomb, NULL }) + +DEFENCODING(( "ATARIST", + "ATARI", + ), + atarist, + { atarist_mbtowc, NULL }, { atarist_wctomb, NULL }) + +DEFENCODING(( "RISCOS-LATIN1", + ), + riscos1, + { riscos1_mbtowc, NULL }, { riscos1_wctomb, NULL }) diff --git a/jni/parted/libiconv/lib/encodings_local.def b/jni/parted/libiconv/lib/encodings_local.def new file mode 100755 index 0000000..4cbff9e --- /dev/null +++ b/jni/parted/libiconv/lib/encodings_local.def @@ -0,0 +1,28 @@ +/* Copyright (C) 2000-2001 Free Software Foundation, Inc. + This file is part of the GNU LIBICONV Library. + + The GNU LIBICONV Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + The GNU LIBICONV Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU LIBICONV Library; see the file COPYING.LIB. + If not, see . */ + +/* Names for locale dependent encodings. */ + +DEFENCODING(( "CHAR", + ), + local_char, + { NULL, NULL }, { NULL, NULL }) + +DEFENCODING(( "WCHAR_T", /* glibc */ + ), + local_wchar_t, + { NULL, NULL }, { NULL, NULL }) diff --git a/jni/parted/libiconv/lib/encodings_osf1.def b/jni/parted/libiconv/lib/encodings_osf1.def new file mode 100755 index 0000000..0ca581a --- /dev/null +++ b/jni/parted/libiconv/lib/encodings_osf1.def @@ -0,0 +1,36 @@ +/* Copyright (C) 2001, 2008 Free Software Foundation, Inc. + This file is part of the GNU LIBICONV Library. + + The GNU LIBICONV Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + The GNU LIBICONV Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU LIBICONV Library; see the file COPYING.LIB. + If not, see . */ + +/* Encodings used by system dependent locales on OSF/1 a.k.a. Tru64. */ + +DEFENCODING(( "DEC-KANJI", + ), + dec_kanji, + { dec_kanji_mbtowc, NULL }, { dec_kanji_wctomb, NULL }) +#ifdef USE_OSF1_ALIASES +DEFALIAS( "DECKANJI", /* OSF/1 */ + dec_kanji) +#endif + +DEFENCODING(( "DEC-HANYU", + ), + dec_hanyu, + { dec_hanyu_mbtowc, NULL }, { dec_hanyu_wctomb, NULL }) +#ifdef USE_OSF1_ALIASES +DEFALIAS( "DECHANYU", /* OSF/1 */ + dec_hanyu) +#endif diff --git a/jni/parted/libiconv/lib/encodings_zos.def b/jni/parted/libiconv/lib/encodings_zos.def new file mode 100755 index 0000000..838b6be --- /dev/null +++ b/jni/parted/libiconv/lib/encodings_zos.def @@ -0,0 +1,471 @@ +/* Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU LIBICONV Library. + + The GNU LIBICONV Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. + + The GNU LIBICONV Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU LIBICONV Library; see the file COPYING.LIB. + If not, see . */ + +/* Encodings used by system dependent locales on z/OS. */ + +DEFENCODING(( "IBM-037", + "IBM037", /* IANA */ + "CP037", /* IANA */ + "EBCDIC-CP-US", /* IANA */ + "EBCDIC-CP-CA", /* IANA */ + "EBCDIC-CP-WT", /* IANA */ + "EBCDIC-CP-NL", /* IANA */ + "csIBM037", /* IANA */ + ), + ebcdic037, + { ebcdic037_mbtowc, NULL }, { ebcdic037_wctomb, NULL }) + +DEFENCODING(( "IBM-273", + "IBM273", /* IANA */ + "CP273", /* IANA */ + "csIBM273", /* IANA */ + ), + ebcdic273, + { ebcdic273_mbtowc, NULL }, { ebcdic273_wctomb, NULL }) + +DEFENCODING(( "IBM-277", + "IBM277", /* IANA */ + "EBCDIC-CP-DK", /* IANA */ + "EBCDIC-CP-NO", /* IANA */ + "csIBM277", /* IANA */ + ), + ebcdic277, + { ebcdic277_mbtowc, NULL }, { ebcdic277_wctomb, NULL }) + +DEFENCODING(( "IBM-278", + "IBM278", /* IANA */ + "CP278", /* IANA */ + "EBCDIC-CP-FI", /* IANA */ + "EBCDIC-CP-SE", /* IANA */ + "csIBM278", /* IANA */ + ), + ebcdic278, + { ebcdic278_mbtowc, NULL }, { ebcdic278_wctomb, NULL }) + +DEFENCODING(( "IBM-280", + "IBM280", /* IANA */ + "CP280", /* IANA */ + "EBCDIC-CP-IT", /* IANA */ + "csIBM280", /* IANA */ + ), + ebcdic280, + { ebcdic280_mbtowc, NULL }, { ebcdic280_wctomb, NULL }) + +DEFENCODING(( "IBM-282", + "IBM282", + ), + ebcdic282, + { ebcdic282_mbtowc, NULL }, { ebcdic282_wctomb, NULL }) + +DEFENCODING(( "IBM-284", + "IBM284", /* IANA */ + "CP284", /* IANA */ + "EBCDIC-CP-ES", /* IANA */ + "csIBM284", /* IANA */ + ), + ebcdic284, + { ebcdic284_mbtowc, NULL }, { ebcdic284_wctomb, NULL }) + +DEFENCODING(( "IBM-285", + "IBM285", /* IANA */ + "CP285", /* IANA */ + "EBCDIC-CP-GB", /* IANA */ + "csIBM285", /* IANA */ + ), + ebcdic285, + { ebcdic285_mbtowc, NULL }, { ebcdic285_wctomb, NULL }) + +DEFENCODING(( "IBM-297", + "IBM297", /* IANA */ + "CP297", /* IANA */ + "EBCDIC-CP-FR", /* IANA */ + "csIBM297", /* IANA */ + ), + ebcdic297, + { ebcdic297_mbtowc, NULL }, { ebcdic297_wctomb, NULL }) + +DEFENCODING(( "IBM-423", + "IBM423", /* IANA */ + "CP423", /* IANA */ + "EBCDIC-CP-GR", /* IANA */ + "csIBM423", /* IANA */ + ), + ebcdic423, + { ebcdic423_mbtowc, NULL }, { ebcdic423_wctomb, NULL }) + +DEFENCODING(( "IBM-424", + "IBM424", /* IANA */ + "CP424", /* IANA */ + "EBCDIC-CP-HE", /* IANA */ + "csIBM424", /* IANA */ + ), + ebcdic424, + { ebcdic424_mbtowc, NULL }, { ebcdic424_wctomb, NULL }) + +DEFENCODING(( "IBM-425", + "IBM425", + ), + ebcdic425, + { ebcdic425_mbtowc, NULL }, { ebcdic425_wctomb, NULL }) + +DEFENCODING(( "IBM-500", + "IBM500", /* IANA */ + "CP500", /* IANA */ + "EBCDIC-CP-BE", /* IANA */ + "EBCDIC-CP-CH", /* IANA */ + "csIBM500", /* IANA */ + ), + ebcdic500, + { ebcdic500_mbtowc, NULL }, { ebcdic500_wctomb, NULL }) + +DEFENCODING(( "IBM-838", + "IBM838", + "IBM-THAI", /* IANA */ + "csIBMThai", /* IANA */ + ), + ebcdic838, + { ebcdic838_mbtowc, NULL }, { ebcdic838_wctomb, NULL }) + +DEFENCODING(( "IBM-870", + "IBM870", /* IANA */ + "CP870", /* IANA */ + "EBCDIC-CP-ROECE", /* IANA */ + "EBCDIC-CP-YU", /* IANA */ + "csIBM870", /* IANA */ + ), + ebcdic870, + { ebcdic870_mbtowc, NULL }, { ebcdic870_wctomb, NULL }) + +DEFENCODING(( "IBM-871", + "IBM871", /* IANA */ + "CP871", /* IANA */ + "EBCDIC-CP-IS", /* IANA */ + "csIBM871", /* IANA */ + ), + ebcdic871, + { ebcdic871_mbtowc, NULL }, { ebcdic871_wctomb, NULL }) + +DEFENCODING(( "IBM-875", + "IBM875", /* glibc */ + "CP875", /* glibc */ + "EBCDIC-GREEK", /* glibc */ + ), + ebcdic875, + { ebcdic875_mbtowc, NULL }, { ebcdic875_wctomb, NULL }) + +DEFENCODING(( "IBM-880", + "IBM880", /* IANA */ + "CP880", /* IANA */ + "EBCDIC-CYRILLIC", /* IANA */ + "csIBM880", /* IANA */ + ), + ebcdic880, + { ebcdic880_mbtowc, NULL }, { ebcdic880_wctomb, NULL }) + +DEFENCODING(( "IBM-905", + "IBM905", /* IANA */ + "CP905", /* IANA */ + "EBCDIC-CP-TR", /* IANA */ + "csIBM905", /* IANA */ + ), + ebcdic905, + { ebcdic905_mbtowc, NULL }, { ebcdic905_wctomb, NULL }) + +DEFENCODING(( "IBM-924", + "IBM924", + "IBM00924", /* IANA */ + "CCSID00924", /* IANA */ + "CP00924", /* IANA */ + "EBCDIC-LATIN9-EURO", /* IANA */ + "csIBM00924", /* IANA */ + ), + ebcdic924, + { ebcdic924_mbtowc, NULL }, { ebcdic924_wctomb, NULL }) + +DEFENCODING(( "IBM-1025", + "IBM1025", /* glibc */ + "CP1025", /* glibc */ + ), + ebcdic1025, + { ebcdic1025_mbtowc, NULL }, { ebcdic1025_wctomb, NULL }) + +DEFENCODING(( "IBM-1026", + "IBM1026", /* IANA */ + "CP1026", /* IANA */ + "csIBM1026", /* IANA */ + ), + ebcdic1026, + { ebcdic1026_mbtowc, NULL }, { ebcdic1026_wctomb, NULL }) + +DEFENCODING(( "IBM-1047", /* IANA */ + "IBM1047", /* IANA */ + "CP1047", /* glibc */ + "csIBM1047", /* IANA */ + ), + ebcdic1047, + { ebcdic1047_mbtowc, NULL }, { ebcdic1047_wctomb, NULL }) + +DEFENCODING(( "IBM-1097", + "IBM1097", /* glibc */ + "CP1097", /* glibc */ + ), + ebcdic1097, + { ebcdic1097_mbtowc, NULL }, { ebcdic1097_wctomb, NULL }) + +DEFENCODING(( "IBM-1112", + "IBM1112", /* glibc */ + "CP1112", /* glibc */ + ), + ebcdic1112, + { ebcdic1112_mbtowc, NULL }, { ebcdic1112_wctomb, NULL }) + +DEFENCODING(( "IBM-1122", + "IBM1122", /* glibc */ + "CP1122", /* glibc */ + ), + ebcdic1122, + { ebcdic1122_mbtowc, NULL }, { ebcdic1122_wctomb, NULL }) + +DEFENCODING(( "IBM-1123", + "IBM1123", /* glibc */ + "CP1123", /* glibc */ + ), + ebcdic1123, + { ebcdic1123_mbtowc, NULL }, { ebcdic1123_wctomb, NULL }) + +DEFENCODING(( "IBM-1130", + "IBM1130", /* glibc */ + "CP1130", /* glibc */ + ), + ebcdic1130, + { ebcdic1130_mbtowc, NULL }, { ebcdic1130_wctomb, NULL }) + +DEFENCODING(( "IBM-1132", + "IBM1132", /* glibc */ + "CP1132", /* glibc */ + ), + ebcdic1132, + { ebcdic1132_mbtowc, NULL }, { ebcdic1132_wctomb, NULL }) + +DEFENCODING(( "IBM-1137", + "IBM1137", /* glibc */ + "CP1137", /* glibc */ + ), + ebcdic1137, + { ebcdic1137_mbtowc, NULL }, { ebcdic1137_wctomb, NULL }) + +DEFENCODING(( "IBM-1140", + "IBM1140", + "IBM01140", /* IANA */ + "CCSID01140", /* IANA */ + "CP01140", /* IANA */ + "EBCDIC-US-37+EURO", /* IANA */ + "csIBM01140", /* IANA */ + ), + ebcdic1140, + { ebcdic1140_mbtowc, NULL }, { ebcdic1140_wctomb, NULL }) + +DEFENCODING(( "IBM-1141", + "IBM1141", + "IBM01141", /* IANA */ + "CCSID01141", /* IANA */ + "CP01141", /* IANA */ + "EBCDIC-DE-273+EURO", /* IANA */ + "csIBM01141", /* IANA */ + ), + ebcdic1141, + { ebcdic1141_mbtowc, NULL }, { ebcdic1141_wctomb, NULL }) + +DEFENCODING(( "IBM-1142", + "IBM1142", + "IBM01142", /* IANA */ + "CCSID01142", /* IANA */ + "CP01142", /* IANA */ + "EBCDIC-DK-277+EURO", /* IANA */ + "EBCDIC-NO-277+EURO", /* IANA */ + "csIBM01142", /* IANA */ + ), + ebcdic1142, + { ebcdic1142_mbtowc, NULL }, { ebcdic1142_wctomb, NULL }) + +DEFENCODING(( "IBM-1143", + "IBM1143", + "IBM01143", /* IANA */ + "CCSID01143", /* IANA */ + "CP01143", /* IANA */ + "EBCDIC-FI-278+EURO", /* IANA */ + "EBCDIC-SE-278+EURO", /* IANA */ + "csIBM01143", /* IANA */ + ), + ebcdic1143, + { ebcdic1143_mbtowc, NULL }, { ebcdic1143_wctomb, NULL }) + +DEFENCODING(( "IBM-1144", + "IBM1144", + "IBM01144", /* IANA */ + "CCSID01144", /* IANA */ + "CP01144", /* IANA */ + "EBCDIC-IT-280+EURO", /* IANA */ + "csPC8CodePage1144", /* IANA */ + ), + ebcdic1144, + { ebcdic1144_mbtowc, NULL }, { ebcdic1144_wctomb, NULL }) + +DEFENCODING(( "IBM-1145", + "IBM1145", + "IBM01145", /* IANA */ + "CCSID01145", /* IANA */ + "CP01145", /* IANA */ + "EBCDIC-ES-284+EURO", /* IANA */ + "csIBM01145", /* IANA */ + ), + ebcdic1145, + { ebcdic1145_mbtowc, NULL }, { ebcdic1145_wctomb, NULL }) + +DEFENCODING(( "IBM-1146", + "IBM1146", + "IBM01146", /* IANA */ + "CCSID01146", /* IANA */ + "CP01146", /* IANA */ + "EBCDIC-GB-285+EURO", /* IANA */ + "csPC8CodePage1146", /* IANA */ + ), + ebcdic1146, + { ebcdic1146_mbtowc, NULL }, { ebcdic1146_wctomb, NULL }) + +DEFENCODING(( "IBM-1147", + "IBM1147", + "IBM01147", /* IANA */ + "CCSID01147", /* IANA */ + "CP01147", /* IANA */ + "EBCDIC-FR-297+EURO", /* IANA */ + "csIBM01147", /* IANA */ + ), + ebcdic1147, + { ebcdic1147_mbtowc, NULL }, { ebcdic1147_wctomb, NULL }) + +DEFENCODING(( "IBM-1148", + "IBM1148", + "IBM01148", /* IANA */ + "CCSID01148", /* IANA */ + "CP01148", /* IANA */ + "EBCDIC-INTERNATIONAL-500+EURO", /* IANA */ + "csIBM01148", /* IANA */ + ), + ebcdic1148, + { ebcdic1148_mbtowc, NULL }, { ebcdic1148_wctomb, NULL }) + +DEFENCODING(( "IBM-1149", + "IBM1149", + "IBM01149", /* IANA */ + "CCSID01149", /* IANA */ + "CP01149", /* IANA */ + "EBCDIC-IS-871+EURO", /* IANA */ + "csIBM01149", /* IANA */ + ), + ebcdic1149, + { ebcdic1149_mbtowc, NULL }, { ebcdic1149_wctomb, NULL }) + +DEFENCODING(( "IBM-1153", + "IBM1153", /* glibc */ + "CP1153", /* glibc */ + ), + ebcdic1153, + { ebcdic1153_mbtowc, NULL }, { ebcdic1153_wctomb, NULL }) + +DEFENCODING(( "IBM-1154", + "IBM1154", /* glibc */ + "CP1154", /* glibc */ + ), + ebcdic1154, + { ebcdic1154_mbtowc, NULL }, { ebcdic1154_wctomb, NULL }) + +DEFENCODING(( "IBM-1155", + "IBM1155", /* glibc */ + "CP1155", /* glibc */ + ), + ebcdic1155, + { ebcdic1155_mbtowc, NULL }, { ebcdic1155_wctomb, NULL }) + +DEFENCODING(( "IBM-1156", + "IBM1156", /* glibc */ + "CP1156", /* glibc */ + ), + ebcdic1156, + { ebcdic1156_mbtowc, NULL }, { ebcdic1156_wctomb, NULL }) + +DEFENCODING(( "IBM-1157", + "IBM1157", /* glibc */ + "CP1157", /* glibc */ + ), + ebcdic1157, + { ebcdic1157_mbtowc, NULL }, { ebcdic1157_wctomb, NULL }) + +DEFENCODING(( "IBM-1158", + "IBM1158", /* glibc */ + "CP1158", /* glibc */ + ), + ebcdic1158, + { ebcdic1158_mbtowc, NULL }, { ebcdic1158_wctomb, NULL }) + +DEFENCODING(( "IBM-1160", + "IBM1160", /* glibc */ + "CP1160", /* glibc */ + ), + ebcdic1160, + { ebcdic1160_mbtowc, NULL }, { ebcdic1160_wctomb, NULL }) + +DEFENCODING(( "IBM-1164", + "IBM1164", /* glibc */ + "CP1164", /* glibc */ + ), + ebcdic1164, + { ebcdic1164_mbtowc, NULL }, { ebcdic1164_wctomb, NULL }) + +DEFENCODING(( "IBM-1165", + "IBM1165", + ), + ebcdic1165, + { ebcdic1165_mbtowc, NULL }, { ebcdic1165_wctomb, NULL }) + +DEFENCODING(( "IBM-1166", + "IBM1166", /* glibc */ + "CP1166", /* glibc */ + ), + ebcdic1166, + { ebcdic1166_mbtowc, NULL }, { ebcdic1166_wctomb, NULL }) + +DEFENCODING(( "IBM-4971", + "IBM4971", /* glibc */ + "CP4971", /* glibc */ + ), + ebcdic4971, + { ebcdic4971_mbtowc, NULL }, { ebcdic4971_wctomb, NULL }) + +DEFENCODING(( "IBM-12712", + "IBM12712", /* glibc */ + "CP12712", /* glibc */ + ), + ebcdic12712, + { ebcdic12712_mbtowc, NULL }, { ebcdic12712_wctomb, NULL }) + +DEFENCODING(( "IBM-16804", + "IBM16804", /* glibc */ + "CP16804", /* glibc */ + ), + ebcdic16804, + { ebcdic16804_mbtowc, NULL }, { ebcdic16804_wctomb, NULL }) diff --git a/jni/parted/libiconv/lib/euc_cn.h b/jni/parted/libiconv/lib/euc_cn.h new file mode 100755 index 0000000..d698617 --- /dev/null +++ b/jni/parted/libiconv/lib/euc_cn.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * EUC-CN + */ + +static int +euc_cn_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII or GB 1988-89) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (GB 2312-1980) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 < 0xff) { + unsigned char buf[2]; + buf[0] = c-0x80; buf[1] = c2-0x80; + return gb2312_mbtowc(conv,pwc,buf,2); + } else + return RET_ILSEQ; + } + } + return RET_ILSEQ; +} + +static int +euc_cn_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII or GB 1988-89) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (GB 2312-1980) */ + ret = gb2312_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]+0x80; + r[1] = buf[1]+0x80; + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/euc_jisx0213.h b/jni/parted/libiconv/lib/euc_jisx0213.h new file mode 100755 index 0000000..49becad --- /dev/null +++ b/jni/parted/libiconv/lib/euc_jisx0213.h @@ -0,0 +1,267 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * EUC-JISX0213 + */ + +/* The structure of EUC-JISX0213 is as follows: + + 0x00..0x7F: ASCII + + 0x8E{A1..FE}: JISX0201 Katakana, with prefix 0x8E, offset by +0x80. + + 0x8F{A1..FE}{A1..FE}: JISX0213 plane 2, with prefix 0x8F, offset by +0x8080. + + 0x{A1..FE}{A1..FE}: JISX0213 plane 1, offset by +0x8080. + + Note that some JISX0213 characters are not contained in Unicode 3.2 + and are therefore best represented as sequences of Unicode characters. +*/ + +#include "jisx0213.h" +#include "flushwc.h" + +static int +euc_jisx0213_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + ucs4_t last_wc = conv->istate; + if (last_wc) { + /* Output the buffered character. */ + conv->istate = 0; + *pwc = last_wc; + return 0; /* Don't advance the input pointer. */ + } else { + unsigned char c = *s; + if (c < 0x80) { + /* Plain ASCII character. */ + *pwc = (ucs4_t) c; + return 1; + } else { + if ((c >= 0xa1 && c <= 0xfe) || c == 0x8e || c == 0x8f) { + /* Two or three byte character. */ + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 <= 0xfe) { + if (c == 0x8e) { + /* Half-width katakana. */ + if (c2 <= 0xdf) { + *pwc = c2 + 0xfec0; + return 2; + } + } else { + ucs4_t wc; + if (c == 0x8f) { + /* JISX 0213 plane 2. */ + if (n >= 3) { + unsigned char c3 = s[2]; + wc = jisx0213_to_ucs4(0x200-0x80+c2,c3^0x80); + } else + return RET_TOOFEW(0); + } else { + /* JISX 0213 plane 1. */ + wc = jisx0213_to_ucs4(0x100-0x80+c,c2^0x80); + } + if (wc) { + if (wc < 0x80) { + /* It's a combining character. */ + ucs4_t wc1 = jisx0213_to_ucs_combining[wc - 1][0]; + ucs4_t wc2 = jisx0213_to_ucs_combining[wc - 1][1]; + /* We cannot output two Unicode characters at once. So, + output the first character and buffer the second one. */ + *pwc = wc1; + conv->istate = wc2; + } else + *pwc = wc; + return (c == 0x8f ? 3 : 2); + } + } + } + } else + return RET_TOOFEW(0); + } + return RET_ILSEQ; + } + } +} + +#define euc_jisx0213_flushwc normal_flushwc + +/* Composition tables for each of the relevant combining characters. */ +static const struct { unsigned short base; unsigned short composed; } euc_jisx0213_comp_table_data[] = { +#define euc_jisx0213_comp_table02e5_idx 0 +#define euc_jisx0213_comp_table02e5_len 1 + { 0xabe4, 0xabe5 }, /* 0x12B65 = 0x12B64 U+02E5 */ +#define euc_jisx0213_comp_table02e9_idx (euc_jisx0213_comp_table02e5_idx+euc_jisx0213_comp_table02e5_len) +#define euc_jisx0213_comp_table02e9_len 1 + { 0xabe0, 0xabe6 }, /* 0x12B66 = 0x12B60 U+02E9 */ +#define euc_jisx0213_comp_table0300_idx (euc_jisx0213_comp_table02e9_idx+euc_jisx0213_comp_table02e9_len) +#define euc_jisx0213_comp_table0300_len 5 + { 0xa9dc, 0xabc4 }, /* 0x12B44 = 0x1295C U+0300 */ + { 0xabb8, 0xabc8 }, /* 0x12B48 = 0x12B38 U+0300 */ + { 0xabb7, 0xabca }, /* 0x12B4A = 0x12B37 U+0300 */ + { 0xabb0, 0xabcc }, /* 0x12B4C = 0x12B30 U+0300 */ + { 0xabc3, 0xabce }, /* 0x12B4E = 0x12B43 U+0300 */ +#define euc_jisx0213_comp_table0301_idx (euc_jisx0213_comp_table0300_idx+euc_jisx0213_comp_table0300_len) +#define euc_jisx0213_comp_table0301_len 4 + { 0xabb8, 0xabc9 }, /* 0x12B49 = 0x12B38 U+0301 */ + { 0xabb7, 0xabcb }, /* 0x12B4B = 0x12B37 U+0301 */ + { 0xabb0, 0xabcd }, /* 0x12B4D = 0x12B30 U+0301 */ + { 0xabc3, 0xabcf }, /* 0x12B4F = 0x12B43 U+0301 */ +#define euc_jisx0213_comp_table309a_idx (euc_jisx0213_comp_table0301_idx+euc_jisx0213_comp_table0301_len) +#define euc_jisx0213_comp_table309a_len 14 + { 0xa4ab, 0xa4f7 }, /* 0x12477 = 0x1242B U+309A */ + { 0xa4ad, 0xa4f8 }, /* 0x12478 = 0x1242D U+309A */ + { 0xa4af, 0xa4f9 }, /* 0x12479 = 0x1242F U+309A */ + { 0xa4b1, 0xa4fa }, /* 0x1247A = 0x12431 U+309A */ + { 0xa4b3, 0xa4fb }, /* 0x1247B = 0x12433 U+309A */ + { 0xa5ab, 0xa5f7 }, /* 0x12577 = 0x1252B U+309A */ + { 0xa5ad, 0xa5f8 }, /* 0x12578 = 0x1252D U+309A */ + { 0xa5af, 0xa5f9 }, /* 0x12579 = 0x1252F U+309A */ + { 0xa5b1, 0xa5fa }, /* 0x1257A = 0x12531 U+309A */ + { 0xa5b3, 0xa5fb }, /* 0x1257B = 0x12533 U+309A */ + { 0xa5bb, 0xa5fc }, /* 0x1257C = 0x1253B U+309A */ + { 0xa5c4, 0xa5fd }, /* 0x1257D = 0x12544 U+309A */ + { 0xa5c8, 0xa5fe }, /* 0x1257E = 0x12548 U+309A */ + { 0xa6f5, 0xa6f8 }, /* 0x12678 = 0x12675 U+309A */ +}; + +static int +euc_jisx0213_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + int count = 0; + unsigned short lasttwo = conv->ostate; + + if (lasttwo) { + /* Attempt to combine the last character with this one. */ + unsigned int idx; + unsigned int len; + + if (wc == 0x02e5) + idx = euc_jisx0213_comp_table02e5_idx, + len = euc_jisx0213_comp_table02e5_len; + else if (wc == 0x02e9) + idx = euc_jisx0213_comp_table02e9_idx, + len = euc_jisx0213_comp_table02e9_len; + else if (wc == 0x0300) + idx = euc_jisx0213_comp_table0300_idx, + len = euc_jisx0213_comp_table0300_len; + else if (wc == 0x0301) + idx = euc_jisx0213_comp_table0301_idx, + len = euc_jisx0213_comp_table0301_len; + else if (wc == 0x309a) + idx = euc_jisx0213_comp_table309a_idx, + len = euc_jisx0213_comp_table309a_len; + else + goto not_combining; + + do + if (euc_jisx0213_comp_table_data[idx].base == lasttwo) + break; + while (++idx, --len > 0); + + if (len > 0) { + /* Output the combined character. */ + if (n >= 2) { + lasttwo = euc_jisx0213_comp_table_data[idx].composed; + r[0] = (lasttwo >> 8) & 0xff; + r[1] = lasttwo & 0xff; + conv->ostate = 0; + return 2; + } else + return RET_TOOSMALL; + } + + not_combining: + /* Output the buffered character. */ + if (n < 2) + return RET_TOOSMALL; + r[0] = (lasttwo >> 8) & 0xff; + r[1] = lasttwo & 0xff; + r += 2; + count = 2; + } + + if (wc < 0x80) { + /* Plain ASCII character. */ + if (n > count) { + r[0] = (unsigned char) wc; + conv->ostate = 0; + return count+1; + } else + return RET_TOOSMALL; + } else if (wc >= 0xff61 && wc <= 0xff9f) { + /* Half-width katakana. */ + if (n >= count+2) { + r[0] = 0x8e; + r[1] = wc - 0xfec0; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } else { + unsigned short jch = ucs4_to_jisx0213(wc); + if (jch != 0) { + if (jch & 0x0080) { + /* A possible match in comp_table_data. We have to buffer it. */ + /* We know it's a JISX 0213 plane 1 character. */ + if (jch & 0x8000) abort(); + conv->ostate = jch | 0x8080; + return count+0; + } + if (jch & 0x8000) { + /* JISX 0213 plane 2. */ + if (n >= count+3) { + r[0] = 0x8f; + r[1] = (jch >> 8) | 0x80; + r[2] = (jch & 0xff) | 0x80; + conv->ostate = 0; + return count+3; + } else + return RET_TOOSMALL; + } else { + /* JISX 0213 plane 1. */ + if (n >= count+2) { + r[0] = (jch >> 8) | 0x80; + r[1] = (jch & 0xff) | 0x80; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + } + return RET_ILUNI; + } +} + +static int +euc_jisx0213_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t lasttwo = conv->ostate; + + if (lasttwo) { + if (n < 2) + return RET_TOOSMALL; + r[0] = (lasttwo >> 8) & 0xff; + r[1] = lasttwo & 0xff; + /* conv->ostate = 0; will be done by the caller */ + return 2; + } else + return 0; +} diff --git a/jni/parted/libiconv/lib/euc_jp.h b/jni/parted/libiconv/lib/euc_jp.h new file mode 100755 index 0000000..f147c47 --- /dev/null +++ b/jni/parted/libiconv/lib/euc_jp.h @@ -0,0 +1,190 @@ +/* + * Copyright (C) 1999-2001, 2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * EUC-JP + */ + +static int +euc_jp_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII or JIS X 0201-1976 Roman) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (JIS X 0208) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + if (c < 0xf5) { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 < 0xff) { + unsigned char buf[2]; + buf[0] = c-0x80; buf[1] = c2-0x80; + return jisx0208_mbtowc(conv,pwc,buf,2); + } else + return RET_ILSEQ; + } else { + /* User-defined range. See + * Ken Lunde's "CJKV Information Processing", table 4-66, p. 206. */ + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 < 0xff) { + *pwc = 0xe000 + 94*(c-0xf5) + (c2-0xa1); + return 2; + } else + return RET_ILSEQ; + } + } + /* Code set 2 (half-width katakana) */ + if (c == 0x8e) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 < 0xe0) { + int ret = jisx0201_mbtowc(conv,pwc,s+1,n-1); + if (ret == RET_ILSEQ) + return RET_ILSEQ; + if (ret != 1) abort(); + return 2; + } else + return RET_ILSEQ; + } + } + /* Code set 3 (JIS X 0212-1990) */ + if (c == 0x8f) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 < 0xff) { + if (n < 3) + return RET_TOOFEW(0); + if (c2 < 0xf5) { + unsigned char c3 = s[2]; + if (c3 >= 0xa1 && c3 < 0xff) { + unsigned char buf[2]; + int ret; + buf[0] = c2-0x80; buf[1] = c3-0x80; + ret = jisx0212_mbtowc(conv,pwc,buf,2); + if (ret == RET_ILSEQ) + return RET_ILSEQ; + if (ret != 2) abort(); + return 3; + } else + return RET_ILSEQ; + } else { + /* User-defined range. See + * Ken Lunde's "CJKV Information Processing", table 4-66, p. 206. */ + unsigned char c3 = s[2]; + if (c3 >= 0xa1 && c3 < 0xff) { + *pwc = 0xe3ac + 94*(c2-0xf5) + (c3-0xa1); + return 3; + } else + return RET_ILSEQ; + } + } else + return RET_ILSEQ; + } + } + return RET_ILSEQ; +} + +static int +euc_jp_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII or JIS X 0201-1976 Roman) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (JIS X 0208) */ + ret = jisx0208_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]+0x80; + r[1] = buf[1]+0x80; + return 2; + } + + /* Code set 2 (half-width katakana) */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI && buf[0] >= 0x80) { + if (ret != 1) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = 0x8e; + r[1] = buf[0]; + return 2; + } + + /* Code set 3 (JIS X 0212-1990) */ + ret = jisx0212_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 3) + return RET_TOOSMALL; + r[0] = 0x8f; + r[1] = buf[0]+0x80; + r[2] = buf[1]+0x80; + return 3; + } + + /* Extra compatibility with Shift_JIS. */ + if (wc == 0x00a5) { + r[0] = 0x5c; + return 1; + } + if (wc == 0x203e) { + r[0] = 0x7e; + return 1; + } + + /* User-defined range. See + * Ken Lunde's "CJKV Information Processing", table 4-66, p. 206. */ + if (wc >= 0xe000 && wc < 0xe758) { + if (wc < 0xe3ac) { + unsigned char c1, c2; + if (n < 2) + return RET_TOOSMALL; + c1 = (unsigned int) (wc - 0xe000) / 94; + c2 = (unsigned int) (wc - 0xe000) % 94; + r[0] = c1+0xf5; + r[1] = c2+0xa1; + return 2; + } else { + unsigned char c1, c2; + if (n < 3) + return RET_TOOSMALL; + c1 = (unsigned int) (wc - 0xe3ac) / 94; + c2 = (unsigned int) (wc - 0xe3ac) % 94; + r[0] = 0x8f; + r[1] = c1+0xf5; + r[2] = c2+0xa1; + return 3; + } + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/euc_kr.h b/jni/parted/libiconv/lib/euc_kr.h new file mode 100755 index 0000000..2687f88 --- /dev/null +++ b/jni/parted/libiconv/lib/euc_kr.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 1999-2001, 2007, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * EUC-KR + */ + +/* Specification: RFC 1557 */ + +static int +euc_kr_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII or KS C 5636-1993) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (KS C 5601-1992, now KS X 1001:2002) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 < 0xff) { + unsigned char buf[2]; + buf[0] = c-0x80; buf[1] = c2-0x80; + return ksc5601_mbtowc(conv,pwc,buf,2); + } else + return RET_ILSEQ; + } + } + return RET_ILSEQ; +} + +static int +euc_kr_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII or KS C 5636-1993) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (KS C 5601-1992, now KS X 1001:2002) */ + ret = ksc5601_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]+0x80; + r[1] = buf[1]+0x80; + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/euc_tw.h b/jni/parted/libiconv/lib/euc_tw.h new file mode 100755 index 0000000..4fd4e14 --- /dev/null +++ b/jni/parted/libiconv/lib/euc_tw.h @@ -0,0 +1,115 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * EUC-TW + */ + +static int +euc_tw_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + /* Code set 0 (ASCII) */ + if (c < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + /* Code set 1 (CNS 11643-1992 Plane 1) */ + if (c >= 0xa1 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 < 0xff) { + unsigned char buf[2]; + buf[0] = c-0x80; buf[1] = c2-0x80; + return cns11643_1_mbtowc(conv,pwc,buf,2); + } else + return RET_ILSEQ; + } + } + /* Code set 2 (CNS 11643-1992 Planes 1-16) */ + if (c == 0x8e) { + if (n < 4) + return RET_TOOFEW(0); + { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 <= 0xb0) { + unsigned char c3 = s[2]; + unsigned char c4 = s[3]; + if (c3 >= 0xa1 && c3 < 0xff && c4 >= 0xa1 && c4 < 0xff) { + unsigned char buf[2]; + int ret; + buf[0] = c3-0x80; buf[1] = c4-0x80; + switch (c2-0xa0) { + case 1: ret = cns11643_1_mbtowc(conv,pwc,buf,2); break; + case 2: ret = cns11643_2_mbtowc(conv,pwc,buf,2); break; + case 3: ret = cns11643_3_mbtowc(conv,pwc,buf,2); break; + case 4: ret = cns11643_4_mbtowc(conv,pwc,buf,2); break; + case 5: ret = cns11643_5_mbtowc(conv,pwc,buf,2); break; + case 6: ret = cns11643_6_mbtowc(conv,pwc,buf,2); break; + case 7: ret = cns11643_7_mbtowc(conv,pwc,buf,2); break; + case 15: ret = cns11643_15_mbtowc(conv,pwc,buf,2); break; + default: return RET_ILSEQ; + } + if (ret == RET_ILSEQ) + return RET_ILSEQ; + if (ret != 2) abort(); + return 4; + } + } + } + } + return RET_ILSEQ; +} + +static int +euc_tw_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[3]; + int ret; + + /* Code set 0 (ASCII) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + ret = cns11643_wctomb(conv,buf,wc,3); + if (ret != RET_ILUNI) { + if (ret != 3) abort(); + + /* Code set 1 (CNS 11643-1992 Plane 1) */ + if (buf[0] == 1) { + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[1]+0x80; + r[1] = buf[2]+0x80; + return 2; + } + + /* Code set 2 (CNS 11643-1992 Planes 1-16) */ + if (n < 4) + return RET_TOOSMALL; + r[0] = 0x8e; + r[1] = buf[0]+0xa0; + r[2] = buf[1]+0x80; + r[3] = buf[2]+0x80; + return 4; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/flags.h b/jni/parted/libiconv/lib/flags.h new file mode 100755 index 0000000..2bb0388 --- /dev/null +++ b/jni/parted/libiconv/lib/flags.h @@ -0,0 +1,211 @@ +/* Generated automatically by genflags. */ + +/* Set if the encoding can encode + the acute and grave accents U+00B4 and U+0060. */ +#define HAVE_ACCENTS 1 + +/* Set if the encoding can encode + the single quotation marks U+2018 and U+2019. */ +#define HAVE_QUOTATION_MARKS 2 + +/* Set if the encoding can encode + the double-width Hangul letters (Jamo) U+3131 to U+3163. */ +#define HAVE_HANGUL_JAMO 4 + +#define ei_ascii_oflags (0) +#define ei_utf8_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs2_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs2be_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs2le_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs4_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs4be_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs4le_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_utf16_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_utf16be_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_utf16le_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_utf32_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_utf32be_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_utf32le_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_utf7_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs2internal_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs2swapped_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs4internal_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_ucs4swapped_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_c99_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_java_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_iso8859_1_oflags (HAVE_ACCENTS) +#define ei_iso8859_2_oflags (HAVE_ACCENTS) +#define ei_iso8859_3_oflags (HAVE_ACCENTS) +#define ei_iso8859_4_oflags (HAVE_ACCENTS) +#define ei_iso8859_5_oflags (0) +#define ei_iso8859_6_oflags (0) +#define ei_iso8859_7_oflags (HAVE_QUOTATION_MARKS) +#define ei_iso8859_8_oflags (HAVE_ACCENTS) +#define ei_iso8859_9_oflags (HAVE_ACCENTS) +#define ei_iso8859_10_oflags (0) +#define ei_iso8859_11_oflags (0) +#define ei_iso8859_13_oflags (0) +#define ei_iso8859_14_oflags (0) +#define ei_iso8859_15_oflags (0) +#define ei_iso8859_16_oflags (0) +#define ei_koi8_r_oflags (0) +#define ei_koi8_u_oflags (0) +#define ei_koi8_ru_oflags (0) +#define ei_cp1250_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_cp1251_oflags (HAVE_QUOTATION_MARKS) +#define ei_cp1252_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_cp1253_oflags (HAVE_QUOTATION_MARKS) +#define ei_cp1254_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_cp1255_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_cp1256_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_cp1257_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_cp1258_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_cp850_oflags (HAVE_ACCENTS) +#define ei_cp862_oflags (0) +#define ei_cp866_oflags (0) +#define ei_cp1131_oflags (0) +#define ei_mac_roman_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_mac_centraleurope_oflags (HAVE_QUOTATION_MARKS) +#define ei_mac_iceland_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_mac_croatian_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_mac_romania_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_mac_cyrillic_oflags (HAVE_QUOTATION_MARKS) +#define ei_mac_ukraine_oflags (HAVE_QUOTATION_MARKS) +#define ei_mac_greek_oflags (HAVE_QUOTATION_MARKS) +#define ei_mac_turkish_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_mac_hebrew_oflags (HAVE_QUOTATION_MARKS) +#define ei_mac_arabic_oflags (0) +#define ei_mac_thai_oflags (HAVE_QUOTATION_MARKS) +#define ei_hp_roman8_oflags (HAVE_ACCENTS) +#define ei_nextstep_oflags (HAVE_ACCENTS) +#define ei_armscii_8_oflags (0) +#define ei_georgian_academy_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_georgian_ps_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_koi8_t_oflags (HAVE_QUOTATION_MARKS) +#define ei_pt154_oflags (HAVE_QUOTATION_MARKS) +#define ei_rk1048_oflags (HAVE_QUOTATION_MARKS) +#define ei_mulelao_oflags (0) +#define ei_cp1133_oflags (0) +#define ei_tis620_oflags (0) +#define ei_cp874_oflags (HAVE_QUOTATION_MARKS) +#define ei_viscii_oflags (0) +#define ei_tcvn_oflags (HAVE_ACCENTS) +#define ei_iso646_jp_oflags (0) +#define ei_jisx0201_oflags (0) +#define ei_jisx0208_oflags (HAVE_QUOTATION_MARKS) +#define ei_jisx0212_oflags (0) +#define ei_iso646_cn_oflags (0) +#define ei_gb2312_oflags (HAVE_QUOTATION_MARKS) +#define ei_isoir165_oflags (HAVE_QUOTATION_MARKS) +#define ei_ksc5601_oflags (HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_euc_jp_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_sjis_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_cp932_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_iso2022_jp_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_iso2022_jp1_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_iso2022_jp2_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_iso2022_jpms_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_euc_cn_oflags (HAVE_QUOTATION_MARKS) +#define ei_ces_gbk_oflags (HAVE_QUOTATION_MARKS) +#define ei_cp936_oflags (HAVE_QUOTATION_MARKS) +#define ei_gb18030_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_iso2022_cn_oflags (HAVE_QUOTATION_MARKS) +#define ei_iso2022_cn_ext_oflags (HAVE_QUOTATION_MARKS) +#define ei_hz_oflags (HAVE_QUOTATION_MARKS) +#define ei_euc_tw_oflags (HAVE_QUOTATION_MARKS) +#define ei_ces_big5_oflags (HAVE_QUOTATION_MARKS) +#define ei_cp950_oflags (HAVE_QUOTATION_MARKS) +#define ei_big5hkscs1999_oflags (HAVE_QUOTATION_MARKS) +#define ei_big5hkscs2001_oflags (HAVE_QUOTATION_MARKS) +#define ei_big5hkscs2004_oflags (HAVE_QUOTATION_MARKS) +#define ei_big5hkscs2008_oflags (HAVE_QUOTATION_MARKS) +#define ei_euc_kr_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_cp949_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_johab_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_iso2022_kr_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO) +#define ei_cp856_oflags (HAVE_ACCENTS) +#define ei_cp922_oflags (HAVE_ACCENTS) +#define ei_cp943_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_cp1046_oflags (0) +#define ei_cp1124_oflags (0) +#define ei_cp1129_oflags (0) +#define ei_cp1161_oflags (0) +#define ei_cp1162_oflags (HAVE_QUOTATION_MARKS) +#define ei_cp1163_oflags (0) +#define ei_dec_kanji_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_dec_hanyu_oflags (HAVE_QUOTATION_MARKS) +#define ei_cp437_oflags (0) +#define ei_cp737_oflags (0) +#define ei_cp775_oflags (0) +#define ei_cp852_oflags (HAVE_ACCENTS) +#define ei_cp853_oflags (HAVE_ACCENTS) +#define ei_cp855_oflags (0) +#define ei_cp857_oflags (HAVE_ACCENTS) +#define ei_cp858_oflags (HAVE_ACCENTS) +#define ei_cp860_oflags (0) +#define ei_cp861_oflags (0) +#define ei_cp863_oflags (HAVE_ACCENTS) +#define ei_cp864_oflags (0) +#define ei_cp865_oflags (0) +#define ei_cp869_oflags (HAVE_QUOTATION_MARKS) +#define ei_cp1125_oflags (0) +#define ei_ebcdic037_oflags (HAVE_ACCENTS) +#define ei_ebcdic273_oflags (HAVE_ACCENTS) +#define ei_ebcdic277_oflags (HAVE_ACCENTS) +#define ei_ebcdic278_oflags (HAVE_ACCENTS) +#define ei_ebcdic280_oflags (HAVE_ACCENTS) +#define ei_ebcdic282_oflags (HAVE_ACCENTS) +#define ei_ebcdic284_oflags (HAVE_ACCENTS) +#define ei_ebcdic285_oflags (HAVE_ACCENTS) +#define ei_ebcdic297_oflags (HAVE_ACCENTS) +#define ei_ebcdic423_oflags (HAVE_ACCENTS) +#define ei_ebcdic424_oflags (HAVE_ACCENTS) +#define ei_ebcdic425_oflags (0) +#define ei_ebcdic500_oflags (HAVE_ACCENTS) +#define ei_ebcdic838_oflags (0) +#define ei_ebcdic870_oflags (HAVE_ACCENTS) +#define ei_ebcdic871_oflags (HAVE_ACCENTS) +#define ei_ebcdic875_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_ebcdic880_oflags (0) +#define ei_ebcdic905_oflags (HAVE_ACCENTS) +#define ei_ebcdic924_oflags (0) +#define ei_ebcdic1025_oflags (0) +#define ei_ebcdic1026_oflags (HAVE_ACCENTS) +#define ei_ebcdic1047_oflags (HAVE_ACCENTS) +#define ei_ebcdic1097_oflags (0) +#define ei_ebcdic1112_oflags (0) +#define ei_ebcdic1122_oflags (HAVE_ACCENTS) +#define ei_ebcdic1123_oflags (0) +#define ei_ebcdic1130_oflags (0) +#define ei_ebcdic1132_oflags (0) +#define ei_ebcdic1137_oflags (0) +#define ei_ebcdic1140_oflags (HAVE_ACCENTS) +#define ei_ebcdic1141_oflags (HAVE_ACCENTS) +#define ei_ebcdic1142_oflags (HAVE_ACCENTS) +#define ei_ebcdic1143_oflags (HAVE_ACCENTS) +#define ei_ebcdic1144_oflags (HAVE_ACCENTS) +#define ei_ebcdic1145_oflags (HAVE_ACCENTS) +#define ei_ebcdic1146_oflags (HAVE_ACCENTS) +#define ei_ebcdic1147_oflags (HAVE_ACCENTS) +#define ei_ebcdic1148_oflags (HAVE_ACCENTS) +#define ei_ebcdic1149_oflags (HAVE_ACCENTS) +#define ei_ebcdic1153_oflags (HAVE_ACCENTS) +#define ei_ebcdic1154_oflags (0) +#define ei_ebcdic1155_oflags (HAVE_ACCENTS) +#define ei_ebcdic1156_oflags (0) +#define ei_ebcdic1157_oflags (HAVE_ACCENTS) +#define ei_ebcdic1158_oflags (0) +#define ei_ebcdic1160_oflags (0) +#define ei_ebcdic1164_oflags (0) +#define ei_ebcdic1165_oflags (HAVE_ACCENTS) +#define ei_ebcdic1166_oflags (0) +#define ei_ebcdic4971_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_ebcdic12712_oflags (HAVE_ACCENTS) +#define ei_ebcdic16804_oflags (0) +#define ei_euc_jisx0213_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_shift_jisx0213_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_iso2022_jp3_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) +#define ei_big5_2003_oflags (HAVE_QUOTATION_MARKS) +#define ei_tds565_oflags (0) +#define ei_atarist_oflags (HAVE_ACCENTS) +#define ei_riscos1_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS) diff --git a/jni/parted/libiconv/lib/flushwc.h b/jni/parted/libiconv/lib/flushwc.h new file mode 100755 index 0000000..ec47fee --- /dev/null +++ b/jni/parted/libiconv/lib/flushwc.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2001 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +#ifndef _FLUSHWC_H +#define _FLUSHWC_H + +static int +normal_flushwc (conv_t conv, ucs4_t *pwc) +{ + ucs4_t last_wc = conv->istate; + if (last_wc) { + /* Output the buffered character. */ + conv->istate = 0; + *pwc = (ucs4_t) last_wc; + return 1; + } else + return 0; +} + +#endif /* _FLUSHWC_H */ diff --git a/jni/parted/libiconv/lib/gb12345.h b/jni/parted/libiconv/lib/gb12345.h new file mode 100755 index 0000000..b8d1eb6 --- /dev/null +++ b/jni/parted/libiconv/lib/gb12345.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GB/T 12345-1990 + */ + +/* + * GB/T 12345-1990 is a traditional chinese counterpart of GB 2312-1986. + * According to the unicode.org tables: + * 2146 characters have been changed to their traditional counterpart, + * 103 characters have been added, no characters have been removed. + * Therefore we use an auxiliary table, which contains only the changes. + */ + +#include "gb12345ext.h" + +static int +gb12345_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + int ret; + + /* The gb12345ext table overrides some entries in the gb2312 table. */ + /* Try the GB12345 extensions -> Unicode table. */ + ret = gb12345ext_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + /* Try the GB2312 -> Unicode table. */ + ret = gb2312_mbtowc(conv,pwc,s,n); + return ret; +} + +static int +gb12345_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + int ret; + + /* The gb12345ext table overrides some entries in the gb2312 table. */ + /* Try the Unicode -> GB12345 extensions table. */ + ret = gb12345ext_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + /* Try the Unicode -> GB2312 table, and check that the resulting GB2312 + byte sequence is not overridden by the GB12345 extensions table. */ + ret = gb2312_wctomb(conv,r,wc,n); + if (ret == 2 && gb12345ext_mbtowc(conv,&wc,r,2) == 2) + return RET_ILUNI; + else + return ret; +} diff --git a/jni/parted/libiconv/lib/gb12345ext.h b/jni/parted/libiconv/lib/gb12345ext.h new file mode 100755 index 0000000..1e9e2fd --- /dev/null +++ b/jni/parted/libiconv/lib/gb12345ext.h @@ -0,0 +1,1795 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GB/T 12345.1990-0 extensions + */ + +static const unsigned short gb12345ext_2uni_page21[12] = { + /* 0x21 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x2225, +}; +static const unsigned short gb12345ext_2uni_page26[85] = { + /* 0x26 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfe35, + 0xfe36, 0xfe39, 0xfe3a, 0xfe3f, 0xfe40, 0xfe3d, 0xfe3e, 0xfe41, + 0xfe42, 0xfe43, 0xfe44, 0xfffd, 0xfffd, 0xfe3b, 0xfe3c, 0xfe37, + 0xfe38, 0xfe31, 0xfffd, 0xfe33, 0xfe34, +}; +static const unsigned short gb12345ext_2uni_page28[32] = { + /* 0x28 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x0251, 0x1e3f, 0x0144, 0x0148, 0x01f9, 0x0261, +}; +static const unsigned short gb12345ext_2uni_page30[6871] = { + /* 0x30 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x769a, + 0xfffd, 0x85f9, 0xfffd, 0xfffd, 0x7919, 0x611b, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x9aaf, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8956, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x58e9, 0xfffd, 0x7f77, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x64fa, 0xfffd, 0x6557, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x9812, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x8fa6, 0x7d46, 0xfffd, 0x5e6b, 0xfffd, + 0xfffd, 0xfffd, 0x7d81, 0xfffd, 0xfffd, 0xfffd, 0x938a, 0xfffd, + 0x8b17, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x31 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x98fd, 0x5bf6, 0xfffd, 0x5831, + 0xfffd, 0xfffd, 0x9b91, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x8f29, 0xfffd, 0x8c9d, 0x92c7, 0xfffd, 0x72fd, 0x5099, + 0x618a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x7db3, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x7b46, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7562, 0x6583, + 0xfffd, 0x5e63, 0xfffd, 0xfffd, 0x9589, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x908a, 0x7de8, + 0x8cb6, 0xfffd, 0xfffd, 0x8b8a, 0xfffd, 0xfffd, 0x8faf, 0x8fae, + 0xfffd, 0x6a19, 0xfffd, 0xfffd, 0xfffd, 0x9c49, 0xfffd, 0xfffd, + 0x765f, 0xfffd, 0xfffd, 0x7015, 0x6ff1, 0x8cd3, 0x64ef, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9905, 0xfffd, + /* 0x32 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x64a5, 0x9262, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x9251, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x99c1, 0xfffd, 0xfffd, 0xfffd, + 0x88dc, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8ca1, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x53c3, 0x8836, 0x6b98, + 0x615a, 0x6158, 0x71e6, 0x84bc, 0x8259, 0x5009, 0x6ec4, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x53a0, 0xfffd, 0x5074, + 0xfffd, 0x6e2c, 0x5c64, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8a6b, 0xfffd, + 0xfffd, 0xfffd, 0x6519, 0x647b, 0x87ec, 0x995e, 0x8b92, 0x7e8f, + 0x93df, 0x7523, 0x95e1, 0x986b, 0xfffd, 0xfffd, + /* 0x33 */ + 0x5834, 0x5617, 0xfffd, 0x9577, 0x511f, 0x8178, 0x5ee0, 0xfffd, + 0x66a2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9214, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8eca, 0xfffd, 0xfffd, 0xfffd, + 0x5fb9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5875, 0xfffd, 0xfffd, + 0xfffd, 0x9673, 0xfffd, 0x896f, 0xfffd, 0x7a31, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x61f2, 0xfffd, 0x8aa0, 0xfffd, + 0xfffd, 0x9a01, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x9072, 0xfffd, 0x99b3, 0xfffd, 0x9f52, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x71be, 0xfffd, 0x885d, 0x87f2, 0xfffd, 0x5bf5, + 0xfffd, 0xfffd, 0x7587, 0x8e8a, 0xfffd, 0xfffd, 0x7c4c, 0xfffd, + 0x7da2, 0xfffd, 0x919c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x92e4, 0x96db, 0xfffd, 0xfffd, 0xfffd, + /* 0x34 */ + 0x790e, 0x5132, 0xfffd, 0xfffd, 0x89f8, 0x8655, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x50b3, 0xfffd, 0xfffd, 0xfffd, 0x7621, 0xfffd, + 0xfffd, 0xfffd, 0x95d6, 0x5275, 0xfffd, 0xfffd, 0xfffd, 0x9318, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7d14, 0xfffd, + 0xfffd, 0x7dbd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8fad, 0xfffd, + 0xfffd, 0x8a5e, 0xfffd, 0xfffd, 0x8cdc, 0xfffd, 0x8070, 0xfffd, + 0xfffd, 0xfffd, 0x5f9e, 0x53e2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x8ea5, 0xfffd, 0x7ac4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x932f, 0xfffd, 0x9054, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5e36, + 0xfffd, 0xfffd, 0x8cb8, 0xfffd, 0xfffd, 0xfffd, + /* 0x35 */ + 0xfffd, 0xfffd, 0x64d4, 0xfffd, 0x55ae, 0x9132, 0x64a3, 0x81bd, + 0xfffd, 0xfffd, 0xfffd, 0x619a, 0xfffd, 0x8a95, 0x5f48, 0xfffd, + 0x7576, 0x64cb, 0x9ee8, 0x8569, 0x6a94, 0xfffd, 0x6417, 0xfffd, + 0xfffd, 0x5cf6, 0x79b1, 0x5c0e, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x71c8, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x9127, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6575, + 0xfffd, 0xfffd, 0x6ecc, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x905e, 0x7de0, 0x985b, 0xfffd, + 0xfffd, 0xfffd, 0x9ede, 0xfffd, 0xfffd, 0x588a, 0x96fb, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6fb1, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x91e3, 0x8abf, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8adc, 0xfffd, + /* 0x36 */ + 0xfffd, 0xfffd, 0xfffd, 0x91d8, 0x9802, 0xfffd, 0x9320, 0xfffd, + 0x8a02, 0xfffd, 0x6771, 0xfffd, 0xfffd, 0xfffd, 0x52d5, 0x68df, + 0xfffd, 0xfffd, 0x51cd, 0xfffd, 0xfffd, 0xfffd, 0x9b25, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x72a2, 0x7368, + 0x8b80, 0xfffd, 0xfffd, 0x8ced, 0xfffd, 0x934d, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x935b, 0xfffd, 0x65b7, 0x7dde, + 0xfffd, 0xfffd, 0x968a, 0x5c0d, 0xfffd, 0x5678, 0xfffd, 0xfffd, + 0x9813, 0xfffd, 0x920d, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x596a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x58ae, 0xfffd, 0xfffd, 0x9d5d, 0xfffd, 0x984d, 0x8a1b, 0xfffd, + 0x60e1, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9913, 0xfffd, 0xfffd, + 0x5152, 0xfffd, 0x723e, 0x990c, 0xfffd, 0xfffd, + /* 0x37 */ + 0x8cb3, 0x767c, 0x7f70, 0xfffd, 0xfffd, 0xfffd, 0x95a5, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x792c, 0x91e9, + 0xfffd, 0xfffd, 0x7169, 0xfffd, 0xfffd, 0x7bc4, 0x8ca9, 0xfffd, + 0x98ef, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8a2a, 0x7d21, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x98db, 0xfffd, 0xfffd, 0x8ab9, 0xfffd, 0xfffd, 0x5ee2, 0xfffd, + 0x8cbb, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7d1b, 0x58b3, + 0xfffd, 0xfffd, 0xfffd, 0x596e, 0xfffd, 0xfffd, 0x61a4, 0x7cde, + 0x8c50, 0xfffd, 0x6953, 0xfffd, 0xfffd, 0x92d2, 0x98a8, 0x760b, + 0xfffd, 0xfffd, 0x99ae, 0x7e2b, 0x8af7, 0xfffd, 0x9cf3, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x819a, 0xfffd, 0xfffd, 0xfffd, 0x8f3b, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x38 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x64ab, 0x8f14, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8ce6, 0x5fa9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x8ca0, 0xfffd, 0x8a03, 0xfffd, 0x5a66, 0x7e1b, 0xfffd, + 0xfffd, 0xfffd, 0x8a72, 0xfffd, 0xfffd, 0x9223, 0x84cb, 0xfffd, + 0x5e79, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8d95, 0xfffd, + 0xfffd, 0xfffd, 0x8d1b, 0x5ca1, 0x525b, 0x92fc, 0xfffd, 0xfffd, + 0x7db1, 0x5d17, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x93ac, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x64f1, 0xfffd, 0x9d3f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x95a3, 0xfffd, 0x927b, 0x500b, 0xfffd, 0x7d66, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x39 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9f94, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x978f, 0xfffd, 0xfffd, + 0x8ca2, 0xfffd, 0x920e, 0xfffd, 0x6e9d, 0xfffd, 0xfffd, 0xfffd, + 0x69cb, 0x8cfc, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8831, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x9867, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x526e, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x95dc, + 0xfffd, 0xfffd, 0x89c0, 0xfffd, 0x9928, 0xfffd, 0x6163, 0xfffd, + 0x8cab, 0xfffd, 0x5ee3, 0xfffd, 0xfffd, 0x898f, 0xfffd, 0xfffd, + 0x6b78, 0x9f9c, 0x95a8, 0x8ecc, 0xfffd, 0x8a6d, 0xfffd, 0xfffd, + 0x6ac3, 0xfffd, 0x8cb4, 0x528a, 0x8f25, 0xfffd, 0xfffd, 0x934b, + 0xfffd, 0x570b, 0xfffd, 0xfffd, 0x904e, 0xfffd, + /* 0x3a */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x99ed, 0xfffd, + 0xfffd, 0xfffd, 0x97d3, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x6f22, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x865f, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x95a1, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9db4, 0x8cc0, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x8f5f, 0xfffd, 0xfffd, 0xfffd, 0x9d3b, + 0xfffd, 0xfffd, 0xfffd, 0x7d05, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x5f8c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x58fa, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x3b */ + 0xfffd, 0xfffd, 0xfffd, 0x8b77, 0xfffd, 0x6eec, 0xfffd, 0xfffd, + 0x5629, 0x83ef, 0xfffd, 0xfffd, 0x756b, 0x5283, 0xfffd, 0x8a71, + 0xfffd, 0xfffd, 0x61f7, 0xfffd, 0x58de, 0x6b61, 0x74b0, 0xfffd, + 0x9084, 0x7de9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8b0a, 0xfffd, 0x63ee, 0x8f1d, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8cc4, 0x7a62, + 0x6703, 0x71f4, 0x532f, 0x8af1, 0x8aa8, 0x7e6a, 0x8477, 0xfffd, + 0xfffd, 0xfffd, 0x6e3e, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x7372, 0xfffd, 0xfffd, 0xfffd, 0x8ca8, 0x798d, 0x64ca, 0xfffd, + 0xfffd, 0x6a5f, 0xfffd, 0xfffd, 0x7a4d, 0xfffd, + /* 0x3c */ + 0xfffd, 0x9951, 0xfffd, 0xfffd, 0x8b4f, 0x9dc4, 0xfffd, 0x7e3e, + 0x7ddd, 0xfffd, 0x6975, 0xfffd, 0x8f2f, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7d1a, 0x64e0, 0x5e7e, + 0xfffd, 0xfffd, 0x858a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x5291, 0xfffd, 0x6fdf, 0xfffd, 0xfffd, 0x8a08, 0x8a18, 0xfffd, + 0xfffd, 0x969b, 0xfffd, 0x7e7c, 0x7d00, 0xfffd, 0xfffd, 0x593e, + 0xfffd, 0xfffd, 0xfffd, 0x83a2, 0x9830, 0x8cc8, 0xfffd, 0x9240, + 0xfffd, 0xfffd, 0x50f9, 0xfffd, 0x99d5, 0xfffd, 0x6bb2, 0x76e3, + 0x5805, 0xfffd, 0x7b8b, 0x9593, 0xfffd, 0xfffd, 0xfffd, 0x8271, + 0xfffd, 0x7dd8, 0x7e6d, 0x6aa2, 0xfffd, 0xfffd, 0x9e7c, 0x63c0, + 0x64bf, 0x7c21, 0x5109, 0xfffd, 0xfffd, 0x85a6, 0x6abb, 0x9452, + 0x8e10, 0x8ce4, 0x898b, 0x9375, 0xfffd, 0xfffd, + /* 0x3d */ + 0xfffd, 0x8266, 0x528d, 0x991e, 0x6f38, 0x6ffa, 0x6f97, 0xfffd, + 0xfffd, 0xfffd, 0x5c07, 0x6f3f, 0xfffd, 0xfffd, 0x8523, 0x69f3, + 0x596c, 0x8b1b, 0xfffd, 0x91ac, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x81a0, 0xfffd, 0xfffd, 0x6f86, 0x9a55, 0x5b0c, 0xfffd, + 0x652a, 0x9278, 0x77ef, 0x50e5, 0xfffd, 0xfffd, 0xfffd, 0x9903, + 0x7e73, 0x7d5e, 0xfffd, 0xfffd, 0xfffd, 0x8f4e, 0x8f03, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x968e, 0xfffd, + 0xfffd, 0x7bc0, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6f54, + 0x7d50, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8aa1, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x7dca, 0x9326, 0x50c5, 0x8b39, 0x9032, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x71fc, 0xfffd, + /* 0x3e */ + 0x76e1, 0x52c1, 0xfffd, 0xfffd, 0x8396, 0xfffd, 0xfffd, 0x9be8, + 0xfffd, 0x9a5a, 0xfffd, 0xfffd, 0x7d93, 0xfffd, 0xfffd, 0xfffd, + 0x9838, 0xfffd, 0xfffd, 0xfffd, 0x93e1, 0x5f91, 0x75d9, 0xfffd, + 0xfffd, 0x7af6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7cfe, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x820a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x99d2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8209, 0xfffd, 0xfffd, 0xfffd, 0x64da, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x92f8, 0xfffd, 0xfffd, 0x61fc, 0xfffd, 0x5287, 0xfffd, + 0x9d51, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7d79, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x89ba, 0xfffd, 0x8a23, 0x7d76, + 0xfffd, 0xfffd, 0x921e, 0x8ecd, 0xfffd, 0xfffd, + /* 0x3f */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x99ff, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x958b, 0xfffd, 0xfffd, 0x51f1, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9846, 0xfffd, 0x6bbb, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8ab2, 0xfffd, 0xfffd, + 0x58be, 0x61c7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x6473, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x5eab, 0x8932, 0x8a87, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x584a, 0xfffd, 0x5108, 0xfffd, 0x5bec, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x7926, 0xfffd, 0x66e0, 0xfffd, 0x8667, 0xfffd, + 0x5dcb, 0x7aba, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x40 */ + 0x994b, 0xfffd, 0x6f70, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x64f4, 0xfffd, 0x95ca, 0xfffd, 0xfffd, 0xfffd, 0x881f, 0x81d8, + 0xfffd, 0xfffd, 0x840a, 0x4f86, 0x8cf4, 0x85cd, 0xfffd, 0x6b04, + 0x6514, 0x7c43, 0x95cc, 0x862d, 0x703e, 0x8b95, 0x652c, 0x89bd, + 0x61f6, 0x7e9c, 0x721b, 0x6feb, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x6488, 0x52de, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x6f87, 0xfffd, 0x6a02, 0xfffd, 0x9433, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x58d8, 0xfffd, 0xfffd, 0x985e, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x7c6c, 0xfffd, 0x96e2, 0x7055, 0xfffd, 0xfffd, 0x88cf, 0x9bc9, + 0x79ae, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9e97, 0x53b2, 0x52f5, + 0x792b, 0x6b77, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x41 */ + 0xfffd, 0xfffd, 0xfffd, 0x701d, 0x96b8, 0xfffd, 0xfffd, 0xfffd, + 0x5006, 0x806f, 0x84ee, 0x9023, 0x942e, 0xfffd, 0x6190, 0x6f23, + 0x7c3e, 0x6582, 0x81c9, 0x93c8, 0x6200, 0x7149, 0x7df4, 0x7ce7, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5169, 0x8f1b, 0xfffd, 0xfffd, + 0xfffd, 0x8ad2, 0xfffd, 0xfffd, 0xfffd, 0x7642, 0xfffd, 0xfffd, + 0x907c, 0xfffd, 0xfffd, 0xfffd, 0x9410, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x7375, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x81e8, 0x9130, 0x9c57, 0xfffd, 0xfffd, 0x8cc3, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x9f61, 0x9234, 0xfffd, 0xfffd, 0xfffd, + 0x9748, 0xfffd, 0x5dba, 0x9818, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x993e, 0xfffd, 0x5289, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x9f8d, 0x807e, 0x56a8, 0x7c60, 0xfffd, + /* 0x42 */ + 0xfffd, 0x58df, 0x650f, 0x96b4, 0x6a13, 0x5a41, 0x645f, 0x7c0d, + 0xfffd, 0xfffd, 0x8606, 0x76e7, 0x9871, 0x5eec, 0x7210, 0x64c4, + 0x6ef7, 0x865c, 0x9b6f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8cc2, + 0xfffd, 0xfffd, 0xfffd, 0x9332, 0x9678, 0xfffd, 0x9a62, 0xfffd, + 0x92c1, 0xfffd, 0xfffd, 0xfffd, 0x5c62, 0x7e37, 0x616e, 0xfffd, + 0xfffd, 0xfffd, 0x6ffe, 0x7dd1, 0x5dd2, 0x6523, 0x5b7f, 0x7064, + 0xfffd, 0x4e82, 0xfffd, 0xfffd, 0x6384, 0x8f2a, 0x502b, 0x4f96, + 0x6dea, 0x7db8, 0x8ad6, 0x863f, 0xfffd, 0x7f85, 0x908f, 0x947c, + 0x7c6e, 0x9a3e, 0xfffd, 0xfffd, 0xfffd, 0x99f1, 0x7d61, 0x5abd, + 0xfffd, 0x746a, 0x78bc, 0x879e, 0x99ac, 0x99e1, 0xfffd, 0x55ce, + 0xfffd, 0x8cb7, 0x9ea5, 0x8ce3, 0x9081, 0xfffd, 0x779e, 0x9945, + 0x883b, 0x6eff, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x43 */ + 0x8b3e, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x9328, 0xfffd, 0xfffd, 0x925a, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8cbf, 0x9ebd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9382, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9580, 0x60b6, 0x5011, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x9333, 0xfffd, 0x5922, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8b0e, 0x5f4c, 0xfffd, 0xfffd, + 0x8993, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7dbf, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7dec, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5edf, 0xfffd, 0xfffd, 0x6ec5, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x61ab, 0x95a9, 0xfffd, 0xfffd, + 0x9cf4, 0x9298, 0xfffd, 0xfffd, 0x8b2c, 0xfffd, + /* 0x44 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8b00, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x755d, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9209, 0xfffd, 0xfffd, + 0x7d0d, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x96e3, 0xfffd, 0x6493, 0x8166, 0x60f1, 0x9b27, 0xfffd, 0xfffd, + 0x9912, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x64ec, 0xfffd, 0xfffd, 0x81a9, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x6506, 0xfffd, 0xfffd, 0xfffd, 0x91c0, + 0x9ce5, 0xfffd, 0xfffd, 0x8076, 0xfffd, 0x5699, 0x9477, 0x93b3, + 0xfffd, 0xfffd, 0x6ab8, 0x7370, 0xfffd, 0x5be7, + /* 0x45 */ + 0x64f0, 0x6fd8, 0xfffd, 0xfffd, 0x9215, 0x7d10, 0x81bf, 0x6fc3, + 0x8fb2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x7627, 0xfffd, 0xfffd, 0xfffd, 0x8afe, 0xfffd, 0x6b50, 0x9dd7, + 0x6bc6, 0xfffd, 0x5614, 0xfffd, 0x6f1a, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x76e4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x9f90, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x8ce0, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5674, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x9d6c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x46 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9a19, 0x98c4, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x983b, 0x8ca7, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x860b, 0xfffd, 0xfffd, 0x6191, 0xfffd, 0x8a55, + 0xfffd, 0xfffd, 0x6f51, 0x9817, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x64b2, 0x92ea, 0x50d5, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x6a38, 0xfffd, 0xfffd, 0xfffd, 0x8b5c, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x81cd, 0x9f4a, 0xfffd, 0xfffd, 0xfffd, 0x9a0e, 0xfffd, + 0x8c48, 0xfffd, 0xfffd, 0x5553, 0xfffd, 0xfffd, 0xfffd, 0x6c23, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8a16, 0xfffd, + /* 0x47 */ + 0xfffd, 0xfffd, 0x727d, 0xfffd, 0x91fa, 0x925b, 0xfffd, 0x9077, + 0x7c3d, 0xfffd, 0x8b19, 0xfffd, 0xfffd, 0x9322, 0x9257, 0xfffd, + 0xfffd, 0xfffd, 0x6dfa, 0x8b74, 0x5879, 0xfffd, 0xfffd, 0xfffd, + 0x69cd, 0x55c6, 0xfffd, 0xfffd, 0x58bb, 0x8594, 0xfffd, 0x6436, + 0xfffd, 0x936c, 0xfffd, 0xfffd, 0x6a4b, 0xfffd, 0x55ac, 0x50d1, + 0xfffd, 0xfffd, 0xfffd, 0x7ff9, 0xfffd, 0xfffd, 0x7ac5, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x7aca, 0x6b3d, 0xfffd, 0x89aa, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5be2, 0xfffd, 0xfffd, + 0x8f15, 0x6c2b, 0x50be, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x9803, 0x8acb, 0x6176, 0x74ca, 0x7aae, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8da8, 0x5340, + 0xfffd, 0xfffd, 0x8ec0, 0xfffd, 0x9a45, 0xfffd, + /* 0x48 */ + 0xfffd, 0xfffd, 0x9f72, 0xfffd, 0xfffd, 0xfffd, 0x9874, 0x6b0a, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x52f8, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9d72, 0xfffd, 0x78ba, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8b93, 0x9952, 0x64fe, 0x7e5e, 0xfffd, 0x71b1, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x97cc, 0xfffd, 0x8a8d, 0xfffd, + 0xfffd, 0x7d09, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x69ae, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7d68, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8edf, 0xfffd, 0xfffd, 0xfffd, + 0x92ed, 0x958f, 0x6f64, 0xfffd, 0xfffd, 0xfffd, 0x7051, 0x85a9, + 0xfffd, 0x9c13, 0xfffd, 0x8cfd, 0xfffd, 0xfffd, + /* 0x49 */ + 0x5098, 0xfffd, 0xfffd, 0xfffd, 0x55aa, 0xfffd, 0x9a37, 0x6383, + 0xfffd, 0xfffd, 0xfffd, 0x6f80, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x6bba, 0xfffd, 0xfffd, 0x7d17, 0xfffd, 0xfffd, 0xfffd, 0x7be9, + 0x66ec, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x9583, 0x965d, 0xfffd, 0x8d0d, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x7e55, 0xfffd, 0x50b7, 0xfffd, 0x8cde, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x71d2, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x7d39, 0xfffd, 0x8cd2, 0xfffd, 0xfffd, + 0x6368, 0xfffd, 0x651d, 0xfffd, 0x61fe, 0xfffd, 0xfffd, 0x8a2d, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7d33, + 0xfffd, 0xfffd, 0x5be9, 0x5b38, 0xfffd, 0x814e, 0xfffd, 0x6ef2, + 0x8072, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7e69, + /* 0x4a */ + 0xfffd, 0xfffd, 0xfffd, 0x52dd, 0x8056, 0x5e2b, 0xfffd, 0x7345, + 0xfffd, 0x6fd5, 0x8a69, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x6642, 0xfffd, 0xfffd, 0x8755, 0x5be6, 0x8b58, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x99db, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x52e2, 0xfffd, 0xfffd, + 0xfffd, 0x9069, 0xfffd, 0xfffd, 0x91cb, 0x98fe, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8996, 0x8a66, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x58fd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7378, 0xfffd, 0x6a1e, + 0xfffd, 0xfffd, 0xfffd, 0x8f38, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x66f8, 0x8d16, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x5c6c, 0x8853, 0xfffd, 0x6a39, 0xfffd, + 0xfffd, 0x7aea, 0xfffd, 0xfffd, 0x6578, 0xfffd, + /* 0x4b */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5e25, 0xfffd, + 0xfffd, 0xfffd, 0x96d9, 0xfffd, 0x8ab0, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x9806, 0xfffd, 0x8aac, 0x78a9, 0xfffd, 0x720d, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7d72, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x98fc, 0xfffd, + 0x9b06, 0x8073, 0x616b, 0x980c, 0xfffd, 0xfffd, 0x8a1f, 0x8aa6, + 0xfffd, 0xfffd, 0x64fb, 0xfffd, 0x8607, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8a34, 0x8085, + 0xfffd, 0xfffd, 0xfffd, 0x96d6, 0xfffd, 0x96a8, 0x7d8f, 0xfffd, + 0xfffd, 0x6b72, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5b6b, 0x640d, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7e2e, 0x7463, 0xfffd, 0x9396, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x4c */ + 0x737a, 0x64bb, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x81fa, + 0xfffd, 0xfffd, 0xfffd, 0x614b, 0xfffd, 0xfffd, 0x6524, 0x8caa, + 0x7671, 0x7058, 0x58c7, 0xfffd, 0xfffd, 0xfffd, 0x8b5a, 0x8ac7, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5606, 0xfffd, 0x6e6f, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x71d9, 0xfffd, 0x6fe4, 0xfffd, 0x7e27, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8a0e, 0xfffd, 0xfffd, + 0xfffd, 0x9a30, 0xfffd, 0x8b04, 0xfffd, 0xfffd, 0xfffd, 0x92bb, + 0xfffd, 0x984c, 0xfffd, 0xfffd, 0x9ad4, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x689d, 0xfffd, 0xfffd, 0xfffd, + 0x8cbc, 0x9435, 0xfffd, 0x5ef3, 0x807d, 0x70f4, + /* 0x4d */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9285, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x7d71, 0xfffd, 0xfffd, 0xfffd, 0x982d, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x5716, 0xfffd, 0xfffd, 0x5857, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5718, 0xfffd, 0x983d, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x9d15, 0xfffd, 0x99b1, 0x99dd, 0x6a62, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7aaa, 0xfffd, 0xfffd, 0x896a, + 0xfffd, 0xfffd, 0xfffd, 0x5f4e, 0x7063, 0xfffd, 0x9811, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x842c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7db2, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x4e */ + 0xfffd, 0xfffd, 0xfffd, 0x97cb, 0x9055, 0xfffd, 0x570d, 0xfffd, + 0xfffd, 0x7232, 0x6ff0, 0x7dad, 0x8466, 0xfffd, 0xfffd, 0x5049, + 0x50de, 0xfffd, 0x7def, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8b02, 0xfffd, 0xfffd, 0x885b, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x805e, 0x7d0b, 0xfffd, 0x7a69, + 0xfffd, 0x554f, 0xfffd, 0xfffd, 0xfffd, 0x64be, 0x8778, 0x6e26, + 0x7aa9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x55da, + 0x93a2, 0x70cf, 0xfffd, 0x8aa3, 0xfffd, 0x7121, 0x856a, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x5862, 0xfffd, 0x9727, 0xfffd, 0xfffd, 0xfffd, + 0x52d9, 0xfffd, 0x8aa4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x932b, 0x72a7, + /* 0x4f */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8972, 0xfffd, 0x7fd2, + 0xfffd, 0xfffd, 0x9291, 0xfffd, 0xfffd, 0xfffd, 0x6232, 0x7d30, + 0xfffd, 0x8766, 0xfffd, 0xfffd, 0x8f44, 0xfffd, 0x5cfd, 0x4fe0, + 0x72f9, 0xfffd, 0xfffd, 0xfffd, 0x5687, 0xfffd, 0x9341, 0xfffd, + 0xfffd, 0x9bae, 0x7e96, 0xfffd, 0x8ce2, 0x929c, 0xfffd, 0x9591, + 0xfffd, 0xfffd, 0xfffd, 0x986f, 0x96aa, 0x73fe, 0x737b, 0x7e23, + 0xfffd, 0x9921, 0xfffd, 0x61b2, 0xfffd, 0xfffd, 0x7dab, 0xfffd, + 0xfffd, 0x9472, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9109, 0xfffd, + 0xfffd, 0x8a73, 0xfffd, 0x97ff, 0xfffd, 0x9805, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x856d, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x56c2, 0x92b7, 0xfffd, 0xfffd, 0xfffd, 0x66c9, + /* 0x50 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x562f, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5354, 0x633e, 0xfffd, 0xfffd, + 0xfffd, 0x8105, 0x8ae7, 0x5beb, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x7009, 0x8b1d, 0xfffd, 0xfffd, 0xfffd, 0x92c5, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x91c1, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8208, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x92b9, 0xfffd, 0xfffd, 0x7d89, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x9808, 0xfffd, 0x8a31, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7dd2, 0x7e8c, + 0x8ed2, 0xfffd, 0xfffd, 0x61f8, 0xfffd, 0xfffd, + /* 0x51 */ + 0x9078, 0x766c, 0xfffd, 0x7d62, 0xfffd, 0xfffd, 0x5b78, 0xfffd, + 0xfffd, 0xfffd, 0x52db, 0xfffd, 0xfffd, 0xfffd, 0x8a62, 0x5c0b, + 0x99b4, 0xfffd, 0xfffd, 0xfffd, 0x8a13, 0x8a0a, 0x905c, 0xfffd, + 0x58d3, 0xfffd, 0x9d09, 0x9d28, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x555e, 0x4e9e, 0x8a1d, + 0xfffd, 0xfffd, 0x95b9, 0xfffd, 0xfffd, 0x9e7d, 0x56b4, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9854, 0x95bb, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8277, 0xfffd, 0xfffd, + 0x53ad, 0x786f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8afa, + 0x9a57, 0xfffd, 0xfffd, 0x9d26, 0xfffd, 0x694a, 0x63da, 0xfffd, + 0x760d, 0xfffd, 0xfffd, 0x967d, 0xfffd, 0xfffd, 0x7662, 0x990a, + 0x6a23, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x52 */ + 0xfffd, 0x582f, 0xfffd, 0xfffd, 0x8b21, 0xfffd, 0xfffd, 0xfffd, + 0x85e5, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x723a, 0xfffd, + 0xfffd, 0xfffd, 0x9801, 0xfffd, 0x696d, 0x8449, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x91ab, 0xfffd, 0x92a5, 0xfffd, + 0xfffd, 0xfffd, 0x9824, 0xfffd, 0x907a, 0xfffd, 0x5100, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x87fb, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x85dd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x5104, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x61b6, 0x7fa9, 0xfffd, 0xfffd, 0x8a63, + 0x8b70, 0x8abc, 0x8b6f, 0xfffd, 0xfffd, 0xfffd, 0x7e79, 0xfffd, + 0x852d, 0xfffd, 0xfffd, 0xfffd, 0x9670, 0xfffd, 0xfffd, 0x9280, + 0xfffd, 0xfffd, 0x98f2, 0xfffd, 0xfffd, 0x96b1, + /* 0x53 */ + 0xfffd, 0xfffd, 0x6afb, 0x5b30, 0x9df9, 0x61c9, 0x7e93, 0x7469, + 0x87a2, 0x71df, 0x7192, 0x8805, 0xfffd, 0x8d0f, 0xfffd, 0xfffd, + 0x7a4e, 0xfffd, 0xfffd, 0x55b2, 0x64c1, 0x50ad, 0xfffd, 0x7670, + 0xfffd, 0xfffd, 0x8e34, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x512a, 0xfffd, 0x6182, 0xfffd, + 0xfffd, 0x90f5, 0x923e, 0x7336, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8a98, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8f3f, 0x9918, + 0xfffd, 0xfffd, 0x9b5a, 0xfffd, 0xfffd, 0x6f01, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8207, 0x5dbc, 0xfffd, 0xfffd, 0x8a9e, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x9b31, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x7344, 0xfffd, 0x8b7d, + /* 0x54 */ + 0xfffd, 0xfffd, 0xfffd, 0x9810, 0xfffd, 0x99ad, 0x9d1b, 0x6df5, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8f45, 0x5712, + 0x54e1, 0x5713, 0xfffd, 0xfffd, 0x7de3, 0x9060, 0xfffd, 0x9858, + 0xfffd, 0xfffd, 0xfffd, 0x7d04, 0xfffd, 0x8e8d, 0x9470, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x95b2, 0xfffd, 0x96f2, 0x9116, 0xfffd, + 0x9695, 0xfffd, 0x904b, 0x85f4, 0x9196, 0x6688, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x96dc, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8f09, + 0xfffd, 0xfffd, 0xfffd, 0x6522, 0x66ab, 0x8d0a, 0x8d1c, 0x81df, + 0xfffd, 0xfffd, 0xfffd, 0x947f, 0xfffd, 0x68d7, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7ac8, 0xfffd, 0x8cac, + 0x64c7, 0x5247, 0x6fa4, 0x8cca, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8d08, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8ecb, + /* 0x55 */ + 0x9358, 0x9598, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8a50, 0xfffd, 0x9f4b, 0xfffd, 0xfffd, 0x50b5, 0xfffd, 0xfffd, + 0x6c08, 0xfffd, 0xfffd, 0xfffd, 0x76de, 0x65ac, 0x8f3e, 0x5d84, + 0xfffd, 0xfffd, 0x68e7, 0xfffd, 0x6230, 0xfffd, 0xfffd, 0x7dbb, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5f35, 0xfffd, 0x6f32, 0xfffd, + 0xfffd, 0x5e33, 0x8cec, 0xfffd, 0x8139, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x8d99, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x87c4, 0x8f4d, 0xfffd, 0x937a, + 0xfffd, 0x9019, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x8c9e, 0x91dd, 0x5075, 0xfffd, 0xfffd, 0x8a3a, 0xfffd, + 0xfffd, 0x93ae, 0x9663, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x56 */ + 0x5e40, 0x7665, 0x912d, 0x8b49, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7e54, 0x8077, + 0xfffd, 0xfffd, 0xfffd, 0x57f7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8879, 0xfffd, 0x7d19, 0xfffd, 0x646f, 0x64f2, + 0xfffd, 0xfffd, 0xfffd, 0x5e5f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x8cea, 0xfffd, 0xfffd, 0x6eef, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x9418, 0xfffd, 0x7d42, 0x7a2e, 0x816b, 0xfffd, + 0xfffd, 0x8846, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8b05, 0xfffd, + 0x8ef8, 0xfffd, 0xfffd, 0xfffd, 0x76ba, 0xfffd, 0x665d, 0x9a5f, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8af8, 0x8a85, 0xfffd, + 0xfffd, 0x71ed, 0xfffd, 0xfffd, 0x77da, 0x56d1, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x8caf, 0x9444, 0x7bc9, + /* 0x57 */ + 0xfffd, 0xfffd, 0xfffd, 0x99d0, 0xfffd, 0xfffd, 0xfffd, 0x5c08, + 0x78da, 0x8f49, 0xfffd, 0x8cfa, 0xfffd, 0x6a01, 0x838a, 0x88dd, + 0x599d, 0xfffd, 0x58ef, 0x72c0, 0xfffd, 0x9310, 0xfffd, 0x8d05, + 0x589c, 0x7db4, 0x8ac4, 0x6e96, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6fc1, 0xfffd, + 0xfffd, 0x8cc7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6f2c, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x7d9c, 0x7e3d, 0x7e31, 0x9112, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8a5b, 0xfffd, + 0x7d44, 0x947d, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x58 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x55c7, 0xfffd, 0xfffd, 0x5399, 0xfffd, + 0x53b4, 0xfffd, 0xfffd, 0x9768, 0x8d0b, 0xfffd, 0xfffd, 0x532d, + 0x5331, 0xfffd, 0x8cfe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x5244, 0xfffd, 0x528c, 0x5274, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x50b4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5000, 0x5096, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x59 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5115, 0xfffd, 0x5102, 0xfffd, + 0x5114, 0x513c, 0x5137, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x50e8, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x50c2, 0x513b, 0x5110, 0x513a, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x50c9, 0xfffd, 0xfffd, 0xfffd, + 0x7cf4, 0xfffd, 0xfffd, 0x9ecc, 0xfffd, 0x56c5, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x9cec, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x893b, 0x81e0, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x5a */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8a01, 0x8a10, 0x8a0c, 0x8a15, + 0x8b33, 0x8a4e, 0x8a25, 0x8a41, 0x8a36, 0x8a46, 0x8a54, 0x8a58, + 0x8a52, 0x8a86, 0x8a84, 0x8a7f, 0x8a70, 0x8a7c, 0x8a75, 0x8a6c, + 0x8a6e, 0x8acd, 0x8ae2, 0x8a61, 0x8a9a, 0x8aa5, 0x8a91, 0x8a92, + 0x8acf, 0x8ad1, 0x8ac9, 0x8adb, 0x8ad7, 0x8ac2, 0x8ab6, 0x8af6, + 0x8aeb, 0x8b14, 0x8b01, 0x8ae4, 0x8aed, 0x8afc, 0x8af3, 0x8ae6, + 0x8aee, 0x8ade, 0x8b28, 0x8b9c, 0x8b16, 0x8b1a, 0x8b10, 0x8b2b, + 0x8b2d, 0x8b56, 0x8b59, 0x8b4e, 0x8b9e, 0x8b6b, 0x8b96, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x9658, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x913a, 0xfffd, + 0x9114, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9134, + /* 0x5b */ + 0xfffd, 0xfffd, 0x90df, 0xfffd, 0xfffd, 0x9136, 0xfffd, 0xfffd, + 0x9106, 0x9148, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x82bb, 0xfffd, 0x52f1, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5df0, 0xfffd, + 0x580a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x58d9, 0xfffd, 0xfffd, 0x58e2, 0xfffd, 0xfffd, + 0xfffd, 0x58e0, 0xfffd, 0x58da, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x57e1, 0xfffd, 0xfffd, 0x584f, 0xfffd, 0xfffd, + 0x5816, 0xfffd, 0xfffd, 0xfffd, 0x5852, 0x581d, 0x5864, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x5c */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x858c, 0xfffd, 0xfffd, 0x8553, 0xfffd, + 0xfffd, 0x85f6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x83a7, + 0x8407, 0x84ef, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x82e7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8622, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8526, + 0xfffd, 0xfffd, 0x584b, 0x7162, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8558, 0x84fd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x854e, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8588, 0xfffd, 0xfffd, + 0x85ba, 0xfffd, 0xfffd, 0xfffd, 0x7296, 0x6ece, + /* 0x5d */ + 0x8541, 0xfffd, 0x85ce, 0x8552, 0x84c0, 0x8452, 0x8464, 0xfffd, + 0xfffd, 0x8494, 0x8435, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x859f, 0xfffd, 0xfffd, 0x8555, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x9daf, 0x8493, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x7e08, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8546, 0xfffd, 0xfffd, 0x8562, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x851e, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x9a40, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x863a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x93a3, 0x8577, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x861e, 0xfffd, 0x85fa, + /* 0x5e */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8604, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x85ea, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x861a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5969, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5c37, 0xfffd, + 0x636b, 0x6476, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x649f, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x6451, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x645c, + 0xfffd, 0xfffd, 0xfffd, 0x64b3, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x6504, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x6516, 0xfffd, 0xfffd, + /* 0x5f */ + 0xfffd, 0x64f7, 0x64fc, 0xfffd, 0x651b, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x5630, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x5638, 0x56c8, 0xfffd, 0x56a6, 0xfffd, + 0xfffd, 0x5504, 0x54bc, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x5680, 0xfffd, 0xfffd, 0xfffd, 0x565d, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5660, 0xfffd, 0xfffd, 0x5635, + 0x55f6, 0xfffd, 0xfffd, 0x5666, 0xfffd, 0xfffd, 0xfffd, 0x5672, + 0xfffd, 0x568c, 0xfffd, 0xfffd, 0xfffd, 0x5665, 0xfffd, 0xfffd, + 0x561c, 0xfffd, 0x562e, 0xfffd, 0xfffd, 0xfffd, 0x55e9, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5616, 0xfffd, 0xfffd, 0xfffd, + 0x56c0, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x60 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x560d, 0x56b3, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x56c1, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x566f, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8f61, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x56b6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5695, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5707, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5e43, + 0xfffd, 0xfffd, 0xfffd, 0x5e6c, 0x5e58, 0x5e57, + /* 0x61 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x5d87, 0xfffd, 0x5cf4, 0xfffd, 0xfffd, 0x5d50, + 0xfffd, 0xfffd, 0xfffd, 0x5d2c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x5da7, 0xfffd, 0x5da0, 0xfffd, 0xfffd, 0x5d97, + 0x5d0d, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x5db8, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5d81, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x5dd4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x540e, 0x5fa0, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7377, 0x7341, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x736a, 0xfffd, 0x733b, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x736b, 0xfffd, + /* 0x62 */ + 0xfffd, 0xfffd, 0xfffd, 0x7380, 0xfffd, 0xfffd, 0xfffd, 0x737c, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x98e0, 0x9933, 0x98e9, 0x993c, 0x98ea, 0x98eb, + 0x98ed, 0x98f4, 0x9909, 0x9911, 0x4f59, 0x991b, 0x9937, 0x993f, + 0x9943, 0x9948, 0x9949, 0x994a, 0x994c, 0x9962, 0xfffd, 0x5ee1, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8ce1, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x61fa, 0x61ae, 0xfffd, 0x616a, 0xfffd, 0xfffd, + 0x613e, 0x60b5, 0x6134, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x61cc, + 0xfffd, 0x615f, 0x61e8, 0x60fb, 0x6137, 0xfffd, + /* 0x63 */ + 0xfffd, 0x60f2, 0xfffd, 0xfffd, 0x6173, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x611c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x6192, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9582, 0x9586, 0x95c8, 0x958e, + 0x9594, 0x958c, 0x95e5, 0x95ad, 0x95ab, 0x9b2e, 0x95ac, 0x95be, + 0x95b6, 0x9b29, 0x95bf, 0x95bd, 0x95bc, 0x95c3, 0x95cb, 0x95d4, + 0x95d0, 0x95d5, 0x95de, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x7043, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6f59, 0xfffd, 0xfffd, 0xfffd, + 0x7027, 0x7018, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6ffc, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6d87, + /* 0x64 */ + 0xfffd, 0xfffd, 0xfffd, 0x6d79, 0x6e5e, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x6fae, 0xfffd, 0xfffd, 0xfffd, 0x700f, 0x6ef8, + 0x6f6f, 0xfffd, 0xfffd, 0xfffd, 0x6df6, 0x6f7f, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x7006, 0xfffd, 0xfffd, 0x6fa0, 0xfffd, 0xfffd, 0xfffd, + 0x700b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x7067, 0xfffd, 0xfffd, 0x7044, 0xfffd, 0x7005, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x6f77, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x7020, 0x701f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x7032, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7028, + /* 0x65 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x705d, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x9a2b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9087, 0xfffd, + 0x9015, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9090, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5c68, + 0xfffd, 0x5f33, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x5af5, 0x5ad7, 0xfffd, + /* 0x66 */ + 0xfffd, 0xfffd, 0x5b00, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x5a6d, 0x5b08, 0xfffd, 0x5b4c, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x5aa7, 0x5afb, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5b0b, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x5b21, + 0x5b2a, 0xfffd, 0xfffd, 0xfffd, 0x5b19, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x99d4, + 0x99df, 0x99d9, 0x9a36, 0x9a5b, 0x99d1, 0x99d8, 0x9a4d, 0x9a4a, + 0x99e2, 0x9a6a, 0x9a0f, 0x9a0d, 0x9a05, 0x9a42, 0x9a2d, 0x9a16, + 0x9a41, 0x9a2e, 0x9a38, 0x9a43, 0x9a44, 0x9a4f, 0x9a65, 0x9a64, + 0x7cf9, 0x7d06, 0x7d02, 0x7d07, 0x7d08, 0x7e8a, + /* 0x67 */ + 0x7d1c, 0x7d15, 0x7d13, 0x7d3a, 0x7d32, 0x7d31, 0x7e10, 0x7d3c, + 0x7d40, 0x7d3f, 0x7d5d, 0x7d4e, 0x7d73, 0x7d86, 0x7d83, 0x7d88, + 0x7dbe, 0x7dba, 0x7dcb, 0x7dd4, 0x7dc4, 0x7d9e, 0x7dac, 0x7db9, + 0x7da3, 0x7db0, 0x7dc7, 0x7dd9, 0x7dd7, 0x7df9, 0x7df2, 0x7e62, + 0x7de6, 0x7df6, 0x7df1, 0x7e0b, 0x7de1, 0x7e09, 0x7e1d, 0x7e1f, + 0x7e1e, 0x7e2d, 0x7e0a, 0x7e11, 0x7e7d, 0x7e39, 0x7e35, 0x7e32, + 0x7e46, 0x7e45, 0x7e88, 0x7e5a, 0x7e52, 0x7e6e, 0x7e7e, 0x7e70, + 0x7e6f, 0x7e98, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x74a3, 0x744b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x74cf, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x980a, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x74bd, 0x743f, 0x7489, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x68 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x74a6, + 0xfffd, 0xfffd, 0xfffd, 0x74d4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x74da, 0xfffd, 0x97d9, + 0x97de, 0x97dc, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x69aa, 0x6aea, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6898, 0xfffd, 0x68d6, 0x6a05, + 0x689f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6adb, 0xfffd, 0x6af3, + 0xfffd, 0xfffd, 0x6ae8, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6adf, 0xfffd, 0x6a89, 0xfffd, + 0xfffd, 0x690f, 0x6a48, 0xfffd, 0x6968, 0xfffd, 0x69bf, 0xfffd, + 0xfffd, 0xfffd, 0x6a3a, 0xfffd, 0x6a9c, 0xfffd, 0x6b12, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x6b1e, 0xfffd, 0xfffd, 0x6add, 0x69e7, 0xfffd, + /* 0x69 */ + 0x6b0f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6b16, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x6aec, 0x6ada, 0xfffd, 0x6af8, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x6ab3, 0xfffd, 0x6ae7, 0xfffd, 0xfffd, + 0x6aa3, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6ad3, 0xfffd, 0xfffd, + 0xfffd, 0x6ade, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x6ba4, 0xfffd, 0x6b9e, 0x6bae, 0xfffd, + 0x6bab, 0xfffd, 0x6baf, 0xfffd, 0x8ed4, 0x8edb, 0x8ef2, 0x8efb, + 0x8f64, 0x8ef9, 0x8efc, 0x8eeb, 0x8ee4, 0x8f62, 0x8efa, 0x8efe, + 0x8f0a, 0x8f07, 0x8f05, 0x8f12, 0x8f26, 0x8f1e, + /* 0x6a */ + 0x8f1f, 0x8f1c, 0x8f33, 0x8f46, 0x8f54, 0xfffd, 0x6214, 0x6227, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x750c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x66c7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x66c4, 0xfffd, 0xfffd, 0x6689, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x66d6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x8cc1, 0x8cb0, 0x8cba, 0x8cbd, 0x8d04, 0x8cb2, 0x8cc5, + 0x8d10, 0x8cd1, 0x8cda, 0x8cd5, 0x8ceb, 0x8ce7, 0x8cfb, 0x8998, + 0x89ac, 0x89a1, 0x89bf, 0x89a6, 0x89af, 0x89b2, 0x89b7, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x6b */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6bff, 0xfffd, + 0xfffd, 0x6c0c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x6c2c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x7258, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x6727, 0x8156, 0xfffd, 0x81da, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x811b, 0xfffd, 0xfffd, + 0xfffd, 0x81be, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8161, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x81cf, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x6c */ + 0xfffd, 0xfffd, 0x6b5f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x98ae, 0x98af, 0x98b6, 0x98bc, 0x98c6, 0x98c8, 0xfffd, 0xfffd, + 0x8f42, 0xfffd, 0xfffd, 0x9f4f, 0x6595, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x716c, 0x7152, 0xfffd, + 0x7197, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x71c1, 0xfffd, + 0xfffd, 0xfffd, 0x71dc, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x71fe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x79b0, 0xfffd, 0xfffd, 0x798e, 0xfffd, 0xfffd, 0x79aa, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x6d */ + 0x61df, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x6164, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x61e3, 0x6207, + 0xfffd, 0xfffd, 0xfffd, 0x6fa9, 0xfffd, 0x78ef, 0xfffd, 0x78ad, + 0xfffd, 0x7868, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x78b8, 0xfffd, + 0xfffd, 0x792a, 0x7931, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x7864, 0x78fd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x78e7, 0xfffd, 0xfffd, 0xfffd, 0x78e3, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9f95, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7798, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x775e, 0x77bc, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x6e */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x7f86, 0xfffd, 0xfffd, 0x7f88, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x91d2, 0x91d3, 0x91d4, 0x91d9, 0x91d7, + 0x91d5, 0x91f7, 0x91e7, 0x91e4, 0x9346, 0x91f5, 0x91f9, 0x9208, + 0x9226, 0x9245, 0x9211, 0x9210, 0x9201, 0x9227, 0x9204, 0x9225, + 0x9200, 0x923a, 0x9266, 0x9237, 0x9233, 0x9255, 0x923d, 0x9238, + 0x925e, 0x926c, 0x926d, 0x923f, 0x9460, 0x9230, 0x9249, 0x9248, + 0x924d, 0x922e, 0x9239, 0x9438, 0x92ac, 0x92a0, 0x927a, 0x92aa, + 0x92ee, 0x92cf, 0x9403, 0x92e3, 0x943a, 0x92b1, 0x92a6, 0x93a7, + 0x9296, 0x92cc, 0x92a9, 0x93f5, 0x9293, 0x927f, + /* 0x6f */ + 0x93a9, 0x929a, 0x931a, 0x92ab, 0x9283, 0x940b, 0x92a8, 0x92a3, + 0x9412, 0x9338, 0x92f1, 0x93d7, 0x92e5, 0x92f0, 0x92ef, 0x92e8, + 0x92bc, 0x92dd, 0x92f6, 0x9426, 0x9427, 0x92c3, 0x92df, 0x92e6, + 0x9312, 0x9306, 0x9369, 0x931b, 0x9340, 0x9301, 0x9315, 0x932e, + 0x9343, 0x9307, 0x9308, 0x931f, 0x9319, 0x9365, 0x9347, 0x9376, + 0x9354, 0x9364, 0x93aa, 0x9370, 0x9384, 0x93e4, 0x93d8, 0x9428, + 0x9387, 0x93cc, 0x9398, 0x93b8, 0x93bf, 0x93a6, 0x93b0, 0x93b5, + 0x944c, 0x93e2, 0x93dc, 0x93dd, 0x93cd, 0x93de, 0x93c3, 0x93c7, + 0x93d1, 0x9414, 0x941d, 0x93f7, 0x9465, 0x9413, 0x946d, 0x9420, + 0x9479, 0x93f9, 0x9419, 0x944a, 0x9432, 0x943f, 0x9454, 0x9463, + 0x937e, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x70 */ + 0xfffd, 0xfffd, 0x7a61, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9ce9, 0x9cf6, + 0x9d07, 0x9d06, 0x9d23, 0x9d87, 0x9e15, 0x9d1d, 0x9d1f, 0x9de5, + 0x9d2f, 0x9dd9, 0x9d30, 0x9d42, 0x9e1e, 0x9d53, 0x9e1d, 0x9d60, + 0x9d52, 0x9df3, 0x9d5c, 0x9d61, 0x9d93, 0x9d6a, 0x9d6f, 0x9d89, + 0x9d98, 0x9d9a, 0x9dc0, 0x9da5, 0x9da9, 0x9dc2, 0x9dbc, 0x9e1a, + 0x9dd3, 0x9dda, 0x9def, 0x9de6, 0x9df2, 0x9df8, 0x9e0c, 0x9dfa, + 0x9e1b, 0xfffd, 0xfffd, 0x7664, 0x7658, 0xfffd, 0x7667, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x7602, 0xfffd, 0xfffd, 0x7646, 0xfffd, 0xfffd, 0x7647, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7649, 0xfffd, + 0x761e, 0xfffd, 0xfffd, 0x763b, 0xfffd, 0xfffd, + /* 0x71 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x766d, + 0xfffd, 0xfffd, 0x766e, 0xfffd, 0xfffd, 0x7669, 0xfffd, 0xfffd, + 0xfffd, 0x7672, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x7ac7, 0xfffd, 0xfffd, 0xfffd, 0x7ab6, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8960, 0xfffd, 0xfffd, 0xfffd, 0x8933, 0xfffd, 0x895d, 0x8947, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x8938, 0xfffd, 0x8964, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x76b8, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x802e, 0xfffd, 0xfffd, 0x802c, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8079, 0xfffd, + 0x8075, 0xfffd, 0xfffd, 0x9807, 0x980e, 0x980f, + /* 0x72 */ + 0x9821, 0x981c, 0x6f41, 0x9826, 0x9837, 0x984e, 0x9853, 0x9873, + 0x9862, 0x9859, 0x9865, 0x986c, 0x9870, 0xfffd, 0xfffd, 0xfffd, + 0x87e3, 0x8806, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8706, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x8823, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x87f6, 0xfffd, 0xfffd, 0x86fa, 0x87ef, 0xfffd, 0x8784, 0xfffd, + 0xfffd, 0xfffd, 0x8810, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x87c8, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8811, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x87bb, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x87ce, 0xfffd, + /* 0x73 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7f4c, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7be4, 0xfffd, 0x7b67, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7c69, 0xfffd, 0xfffd, + 0x7bf3, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7c00, 0x7bcb, 0xfffd, 0xfffd, + 0xfffd, 0x7c5c, 0xfffd, 0x7c1e, 0xfffd, 0xfffd, 0x7c2b, 0xfffd, + 0x7c23, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7c6a, 0xfffd, + /* 0x74 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7c5f, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8264, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x826b, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x88ca, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7fa5, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7cf2, 0x7cf6, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x7cdd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x7e36, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9ea9, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8db2, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x75 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x91c5, 0x91c3, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x9e7a, 0x8e89, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x8e4c, 0xfffd, 0xfffd, 0xfffd, 0x8e92, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8e7a, 0x8e55, 0xfffd, + 0x8e9a, 0x8e8b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x8e93, 0xfffd, 0xfffd, 0x8e91, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8ea1, 0x8e63, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8eaa, 0xfffd, + 0xfffd, 0x8ea6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x89f4, 0xfffd, 0xfffd, + /* 0x76 */ + 0xfffd, 0xfffd, 0x89f6, 0xfffd, 0xfffd, 0x975a, 0xfffd, 0x9742, + 0xfffd, 0xfffd, 0x973d, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9744, + 0xfffd, 0xfffd, 0x9f54, 0x9f5f, 0x9f59, 0x9f60, 0x9f5c, 0x9f66, + 0x9f6c, 0x9f6a, 0x9f77, 0x9efd, 0x9eff, 0x9f09, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x8b8e, 0xfffd, 0x947e, 0xfffd, + 0x93e8, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9b77, 0x9b74, + 0x9b81, 0x9b83, 0x9b8e, 0x9c78, 0x7a4c, 0x9b92, 0x9c5f, 0x9b90, + 0x9bad, 0x9b9a, 0x9baa, 0x9b9e, 0x9c6d, 0x9bab, 0x9b9d, 0x9c58, + 0x9bc1, 0x9c7a, 0x9c31, 0x9c39, 0x9c23, 0x9c37, 0x9bc0, 0x9bca, + 0x9bc7, 0x9bfd, 0x9bd6, 0x9bea, 0x9beb, 0x9be1, 0x9be4, 0x9be7, + 0x9bdd, 0x9be2, 0x9bf0, 0x9bdb, 0x9bf4, 0x9bd4, 0x9c5d, 0x9c08, + 0x9c10, 0x9c0d, 0x9c12, 0x9c09, 0x9bff, 0x9c20, + /* 0x77 */ + 0x9c32, 0x9c2d, 0x9c28, 0x9c25, 0x9c29, 0x9c33, 0x9c3e, 0x9c48, + 0x9c3b, 0x9c35, 0x9c45, 0x9c56, 0x9c54, 0x9c52, 0x9c67, 0xfffd, + 0xfffd, 0x97c3, 0x97bd, 0xfffd, 0x97c9, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9dbb, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x9acf, 0xfffd, 0x9ad6, 0x9ad5, 0xfffd, 0xfffd, + 0xfffd, 0x9b58, 0x9b4e, 0xfffd, 0xfffd, 0xfffd, 0x9957, 0x995c, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x9b22, 0xfffd, 0xfffd, + 0x4e48, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x9ef7, 0xfffd, 0xfffd, 0x9ef2, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x78 */ + 0x896c, 0x95c6, 0x9336, 0x5f46, 0x8514, 0x7e94, 0x5382, 0x51b2, + 0x4e11, 0x9f63, 0x5679, 0x515a, 0x6dc0, 0x9f15, 0x6597, 0x5641, + 0x9aee, 0x8303, 0x4e30, 0x8907, 0x5e72, 0x7a40, 0x98b3, 0x5e7f, + 0x95a4, 0x9b0d, 0x5212, 0x8ff4, 0x5f59, 0x7a6b, 0x98e2, 0x51e0, + 0x50a2, 0x4ef7, 0x8350, 0x8591, 0x5118, 0x636e, 0x6372, 0x524b, + 0x5938, 0x774f, 0x8721, 0x814a, 0x7e8d, 0x91cc, 0x66c6, 0x5e18, + 0x77ad, 0x9e75, 0x56c9, 0x9ef4, 0x6fdb, 0x61de, 0x77c7, 0x7030, + 0x9eb5, 0x884a, 0x95e2, 0x82f9, 0x51ed, 0x6251, 0x4ec6, 0x6734, + 0x97c6, 0x7c64, 0x7e34, 0x97a6, 0x9eaf, 0x786e, 0x820d, 0x672f, + 0x677e, 0x56cc, 0x53f0, 0x98b1, 0x6aaf, 0x7f4e, 0x6d82, 0x7cf0, + 0x4e07, 0x4fc2, 0x7e6b, 0x9e79, 0x56ae, 0x9b1a, 0x846f, 0x53f6, + 0x90c1, 0x79a6, 0x7c72, 0x613f, 0x4e91, 0x9ad2, + /* 0x79 */ + 0x75c7, 0x96bb, 0x53ea, 0x7dfb, 0x88fd, 0x79cd, 0x7843, 0x7b51, + 0x51c6, +}; + +static int +gb12345ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 == 0x21) || (c1 == 0x26) || (c1 == 0x28) || (c1 >= 0x30 && c1 <= 0x79)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + unsigned short wc = 0xfffd; + if (i < 470) { + if (i < 12) + wc = gb12345ext_2uni_page21[i]; + } else if (i < 658) { + if (i < 555) + wc = gb12345ext_2uni_page26[i-470]; + } else if (i < 1410) { + if (i < 690) + wc = gb12345ext_2uni_page28[i-658]; + } else { + if (i < 8281) + wc = gb12345ext_2uni_page30[i-1410]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short gb12345ext_2charset[2252] = { + 0x283d, 0x283e, 0x283f, 0x283b, 0x2840, 0x283c, 0x212c, 0x7871, + 0x7829, 0x7833, 0x7761, 0x4252, 0x787d, 0x5147, 0x785f, 0x7842, + 0x6245, 0x4034, 0x4258, 0x7872, 0x4f40, 0x5876, 0x4129, 0x3256, + 0x3876, 0x4347, 0x4257, 0x4e30, 0x3260, 0x556c, 0x5877, 0x4921, + 0x3138, 0x7841, 0x5336, 0x342b, 0x5871, 0x552e, 0x494b, 0x4763, + 0x594d, 0x3d76, 0x595d, 0x4748, 0x464d, 0x4e31, 0x3d44, 0x5947, + 0x3c5b, 0x5247, 0x592f, 0x525a, 0x3f6b, 0x3c73, 0x594f, 0x5931, + 0x592d, 0x7845, 0x3325, 0x5345, 0x3422, 0x5933, 0x5950, 0x594e, + 0x5932, 0x3679, 0x782c, 0x413d, 0x7828, 0x7929, 0x3633, 0x7840, + 0x785d, 0x3f2d, 0x783b, 0x5859, 0x5472, 0x7848, 0x3855, 0x3950, + 0x585c, 0x3434, 0x3b2e, 0x3e67, 0x4175, 0x3974, 0x585b, 0x3d23, + 0x3c41, 0x3e22, 0x362f, 0x4e71, 0x512b, 0x4a24, 0x404d, 0x4a46, + 0x5b3d, 0x4078, 0x4830, 0x5850, 0x3b63, 0x5851, 0x4778, 0x502d, + 0x7827, 0x5847, 0x325e, 0x5161, 0x4077, 0x5849, 0x324e, 0x3454, + 0x7923, 0x786b, 0x7878, 0x6161, 0x5f43, 0x5431, 0x5f42, 0x4e4a, + 0x4674, 0x5146, 0x4925, 0x4747, 0x3525, 0x5334, 0x473a, 0x5844, + 0x4270, 0x4e58, 0x5f6f, 0x5f59, 0x4c3e, 0x6036, 0x453b, 0x5f75, + 0x3322, 0x5f69, 0x3b29, 0x5f6b, 0x5025, 0x5f34, 0x5f58, 0x5f3c, + 0x7830, 0x5f50, 0x5f55, 0x5f66, 0x5f5c, 0x6048, 0x5f60, 0x4567, + 0x3656, 0x782b, 0x5f4c, 0x4f45, 0x5f62, 0x6060, 0x4476, 0x5f3f, + 0x417c, 0x7875, 0x6037, 0x514f, 0x6053, 0x5f79, 0x603f, 0x4f79, + 0x5966, 0x5f3d, 0x7853, 0x786a, 0x5676, 0x6070, 0x397a, 0x4e27, + 0x5430, 0x5432, 0x4d3c, 0x4d45, 0x5b6b, 0x5634, 0x3c61, 0x5b51, + 0x5b71, 0x5b76, 0x5222, 0x3128, 0x3321, 0x3f69, 0x5c63, 0x5b6e, + 0x5b75, 0x4d3f, 0x4e6b, 0x5b77, 0x333e, 0x4735, 0x3566, 0x5739, + 0x3669, 0x3758, 0x473d, 0x3f51, 0x4c33, 0x5139, 0x405d, 0x5b5b, + 0x5b64, 0x3b35, 0x4222, 0x5b62, 0x5b5e, 0x3053, 0x5733, 0x3a78, + 0x4a59, 0x434e, 0x7849, 0x3c50, 0x5e46, 0x3661, 0x3d31, 0x375c, + 0x5731, 0x4226, 0x383e, 0x662b, 0x6634, 0x4268, 0x657d, 0x657c, + 0x6635, 0x6623, 0x662c, 0x663f, 0x3d3f, 0x664d, 0x6648, 0x6649, + 0x5324, 0x4974, 0x662e, 0x4b6f, 0x5127, 0x424f, 0x475e, 0x4a35, + 0x447e, 0x4973, 0x5034, 0x3f6d, 0x3368, 0x3126, 0x3d2b, 0x5728, + 0x5130, 0x3654, 0x353c, 0x5e4f, 0x4245, 0x3263, 0x6570, 0x4a74, + 0x3854, 0x612d, 0x353a, 0x4f3f, 0x6141, 0x385a, 0x6134, 0x6130, + 0x6150, 0x5538, 0x612b, 0x6140, 0x613d, 0x613b, 0x6149, 0x416b, + 0x536c, 0x3f79, 0x424d, 0x615b, 0x5b4f, 0x7850, 0x4b27, 0x4a26, + 0x554a, 0x3478, 0x5621, 0x6078, 0x607e, 0x607d, 0x5644, 0x3152, + 0x306f, 0x607c, 0x7835, 0x3849, 0x3c38, 0x7838, 0x3f62, 0x436d, + 0x3327, 0x6250, 0x374f, 0x3963, 0x422e, 0x4c7c, 0x6572, 0x5545, + 0x7824, 0x352f, 0x4356, 0x4d64, 0x783d, 0x3a73, 0x3e36, 0x3453, + 0x6162, 0x3834, 0x3339, 0x626a, 0x4346, 0x3671, 0x4455, 0x6322, + 0x627c, 0x302e, 0x632b, 0x626b, 0x627d, 0x6269, 0x787c, 0x4c2c, + 0x3252, 0x3251, 0x627a, 0x395f, 0x6d28, 0x6266, 0x4b4b, 0x4247, + 0x6325, 0x476c, 0x5347, 0x3139, 0x412f, 0x463e, 0x6334, 0x352c, + 0x375f, 0x4375, 0x6264, 0x4f5c, 0x5264, 0x3f52, 0x5326, 0x6278, + 0x7856, 0x6d21, 0x6d2f, 0x627b, 0x334d, 0x4041, 0x3b33, 0x507c, + 0x6263, 0x3e65, 0x4965, 0x4135, 0x6d30, 0x6a27, 0x6a28, 0x553d, + 0x4f37, 0x785e, 0x502e, 0x4961, 0x5e51, 0x7846, 0x7847, 0x4928, + 0x4255, 0x3c70, 0x516f, 0x3b53, 0x4b70, 0x3537, 0x4740, 0x5e62, + 0x5e68, 0x4227, 0x563f, 0x3f59, 0x5e52, 0x3274, 0x404c, 0x4453, + 0x5e58, 0x3527, 0x3226, 0x3827, 0x464b, 0x5e6c, 0x4c22, 0x4e4e, + 0x3c71, 0x5335, 0x4230, 0x5471, 0x3b77, 0x3532, 0x3523, 0x3e5d, + 0x3c37, 0x4462, 0x3177, 0x4521, 0x3869, 0x5640, 0x4029, 0x5f22, + 0x305a, 0x4b53, 0x5f23, 0x4845, 0x5e73, 0x446c, 0x4223, 0x4039, + 0x5e7c, 0x3273, 0x5f25, 0x4963, 0x545c, 0x424e, 0x4c2f, 0x3d41, + 0x403f, 0x305c, 0x3550, 0x4a7d, 0x4132, 0x3150, 0x6c35, 0x782f, + 0x5536, 0x364f, 0x4a31, 0x5667, 0x544e, 0x6a4d, 0x3329, 0x545d, + 0x6a4a, 0x784f, 0x6a3c, 0x4f7e, 0x6a53, 0x3f75, 0x4939, 0x4a69, + 0x3b61, 0x6b4a, 0x7868, 0x7860, 0x362b, 0x7869, 0x6845, 0x4c75, + 0x6849, 0x6847, 0x5466, 0x3630, 0x553b, 0x6862, 0x516e, 0x3763, + 0x6865, 0x5235, 0x3c2b, 0x683f, 0x4859, 0x6867, 0x3939, 0x4739, + 0x687d, 0x3d30, 0x572e, 0x4056, 0x6848, 0x4225, 0x316a, 0x4a60, + 0x5179, 0x4653, 0x4a77, 0x686b, 0x6863, 0x4745, 0x3b7a, 0x4d56, + 0x685f, 0x3535, 0x686d, 0x3c6c, 0x6949, 0x786d, 0x6944, 0x447b, + 0x3c77, 0x3971, 0x6956, 0x6935, 0x684e, 0x687c, 0x695a, 0x685d, + 0x6946, 0x6853, 0x6840, 0x6934, 0x6850, 0x6937, 0x5323, 0x4038, + 0x4828, 0x6921, 0x686f, 0x692d, 0x6879, 0x4755, 0x4537, 0x6c23, + 0x3b36, 0x4b6a, 0x407a, 0x3969, 0x3250, 0x6966, 0x6964, 0x6969, + 0x6967, 0x696b, 0x3c5f, 0x4931, 0x3f47, 0x4539, 0x6b27, 0x5531, + 0x6b2a, 0x4678, 0x4762, 0x6b32, 0x6424, 0x786f, 0x637e, 0x782d, + 0x4259, 0x5428, 0x6435, 0x4733, 0x4e50, 0x3262, 0x3b6b, 0x6425, + 0x4c40, 0x573c, 0x3935, 0x3257, 0x4370, 0x3553, 0x5c7e, 0x3b26, + 0x564d, 0x4978, 0x4231, 0x6430, 0x427a, 0x5366, 0x453d, 0x3a3a, + 0x4130, 0x5755, 0x5547, 0x3d25, 0x3d2c, 0x7223, 0x4643, 0x3d60, + 0x636d, 0x4873, 0x6431, 0x4023, 0x6464, 0x6436, 0x492c, 0x3d3d, + 0x4054, 0x3d27, 0x6445, 0x5473, 0x6d34, 0x642b, 0x356d, 0x5747, + 0x4528, 0x4a2a, 0x4522, 0x7855, 0x3c43, 0x4c4e, 0x4044, 0x4e2b, + 0x3175, 0x3d26, 0x6378, 0x424b, 0x645e, 0x6442, 0x503a, 0x6449, + 0x642f, 0x3174, 0x6372, 0x4124, 0x646c, 0x646b, 0x6371, 0x647e, + 0x7858, 0x6472, 0x403d, 0x6363, 0x645c, 0x4877, 0x406c, 0x4c32, + 0x6530, 0x4d65, 0x4250, 0x6459, 0x4e5a, 0x4c7e, 0x4e5e, 0x4136, + 0x6c3f, 0x5c64, 0x3733, 0x6c3e, 0x532b, 0x6c41, 0x4848, 0x3363, + 0x6c47, 0x3546, 0x4955, 0x4c4c, 0x6c4b, 0x532a, 0x3253, 0x5672, + 0x3b62, 0x3d7d, 0x6c62, 0x4b38, 0x422f, 0x4043, 0x4e2a, 0x522f, + 0x367b, 0x6b39, 0x4723, 0x5c7d, 0x363f, 0x4e7e, 0x5734, 0x4f41, + 0x3137, 0x534c, 0x6178, 0x616f, 0x537c, 0x4a28, 0x3640, 0x6176, + 0x617d, 0x447c, 0x3b71, 0x4154, 0x616e, 0x4a5e, 0x4c21, 0x4f57, + 0x6228, 0x6224, 0x4f56, 0x6775, 0x6762, 0x4b76, 0x5328, 0x426a, + 0x6776, 0x6761, 0x6828, 0x3b37, 0x6774, 0x476d, 0x6767, 0x682c, + 0x6836, 0x6a31, 0x327a, 0x4436, 0x314f, 0x3b2d, 0x3531, 0x336b, + 0x7921, 0x3e37, 0x7069, 0x3768, 0x5171, 0x7079, 0x342f, 0x4531, + 0x707c, 0x4146, 0x706c, 0x706f, 0x7077, 0x705d, 0x3171, 0x5177, + 0x705c, 0x5622, 0x705f, 0x712e, 0x5122, 0x7128, 0x712b, 0x5338, + 0x4c31, 0x7132, 0x3722, 0x3028, 0x7164, 0x5665, 0x5535, 0x3e21, + 0x3c60, 0x454c, 0x422c, 0x784a, 0x6d79, 0x6d6e, 0x4277, 0x7851, + 0x6d7a, 0x7857, 0x5675, 0x3d43, 0x7927, 0x6d4c, 0x6d3a, 0x7866, + 0x5162, 0x4b36, 0x6d38, 0x6d3f, 0x4837, 0x426b, 0x5729, 0x6d57, + 0x6d53, 0x6d36, 0x6d4d, 0x3421, 0x302d, 0x3f73, 0x6d42, 0x4079, + 0x372f, 0x6d43, 0x3b76, 0x6c75, 0x787a, 0x6c78, 0x4071, 0x6c72, + 0x353b, 0x7926, 0x5656, 0x3346, 0x7836, 0x7655, 0x3b7d, 0x5331, + 0x7023, 0x3b60, 0x4e48, 0x783e, 0x4e51, 0x4d5d, 0x476e, 0x7140, + 0x3f7a, 0x345c, 0x474f, 0x713c, 0x546e, 0x4754, 0x4a7a, 0x3e3a, + 0x314a, 0x7928, 0x7348, 0x3c63, 0x3d5a, 0x3736, 0x567e, 0x7366, + 0x7346, 0x4938, 0x7359, 0x7365, 0x4228, 0x736c, 0x3c72, 0x7371, + 0x736f, 0x4729, 0x4131, 0x403a, 0x336f, 0x736a, 0x7425, 0x417d, + 0x7862, 0x7356, 0x737d, 0x4069, 0x4261, 0x787b, 0x7456, 0x3760, + 0x4138, 0x7870, 0x744f, 0x5961, 0x7450, 0x6679, 0x3e40, 0x3c4d, + 0x667b, 0x543c, 0x3a6c, 0x667a, 0x667c, 0x667d, 0x4852, 0x4e46, + 0x4449, 0x4526, 0x6723, 0x343f, 0x6722, 0x4934, 0x563d, 0x3c36, + 0x3757, 0x6721, 0x3744, 0x4f38, 0x6726, 0x6725, 0x4970, 0x495c, + 0x6724, 0x6728, 0x672a, 0x6729, 0x5655, 0x5769, 0x306d, 0x672c, + 0x3d61, 0x672b, 0x3d4a, 0x4267, 0x5124, 0x3878, 0x485e, 0x4d33, + 0x4b3f, 0x672d, 0x3e78, 0x3e6e, 0x3073, 0x672f, 0x672e, 0x6730, + 0x5065, 0x4b67, 0x3e2d, 0x575b, 0x6736, 0x3371, 0x6739, 0x4f5f, + 0x6737, 0x4e2c, 0x673a, 0x3859, 0x4d78, 0x3141, 0x573a, 0x425a, + 0x6738, 0x6732, 0x5540, 0x3442, 0x6731, 0x4360, 0x6735, 0x673b, + 0x3d74, 0x6733, 0x424c, 0x5077, 0x6734, 0x673d, 0x3c6a, 0x673c, + 0x3c29, 0x3650, 0x355e, 0x6745, 0x5435, 0x6741, 0x3160, 0x3b3a, + 0x4365, 0x4e33, 0x6743, 0x673f, 0x4137, 0x6742, 0x673e, 0x7924, + 0x5d53, 0x6746, 0x674b, 0x6744, 0x6727, 0x674c, 0x383f, 0x6747, + 0x6749, 0x6748, 0x4f58, 0x4c50, 0x376c, 0x674a, 0x4b75, 0x575d, + 0x6750, 0x7863, 0x674f, 0x746a, 0x4246, 0x674e, 0x575c, 0x3c28, + 0x6752, 0x6751, 0x6755, 0x562f, 0x4949, 0x6754, 0x4846, 0x6740, + 0x497e, 0x3b66, 0x7873, 0x3c6b, 0x6756, 0x6759, 0x6758, 0x3d49, + 0x526f, 0x3c4c, 0x674d, 0x6757, 0x6753, 0x667e, 0x5078, 0x784d, + 0x3278, 0x5327, 0x7826, 0x4f4b, 0x675a, 0x4042, 0x733f, 0x786e, + 0x3723, 0x3055, 0x425e, 0x6e3c, 0x6e3f, 0x7447, 0x5265, 0x4f30, + 0x474c, 0x716f, 0x716c, 0x4a25, 0x4e45, 0x412a, 0x344f, 0x4979, + 0x4b4a, 0x7179, 0x4474, 0x5630, 0x7177, 0x4c7d, 0x417b, 0x4b60, + 0x5032, 0x6b56, 0x554d, 0x784c, 0x4976, 0x6b4b, 0x6b61, 0x4454, + 0x5657, 0x3326, 0x3774, 0x3d3a, 0x4465, 0x3528, 0x6b5a, 0x4527, + 0x4133, 0x466a, 0x6b77, 0x4030, 0x6b4d, 0x5460, 0x5975, 0x4159, + 0x4c28, 0x536b, 0x504b, 0x3e59, 0x3e49, 0x7867, 0x3255, 0x742f, + 0x3d22, 0x7435, 0x3c68, 0x515e, 0x5b3b, 0x5c51, 0x785c, 0x7832, + 0x7843, 0x572f, 0x3e25, 0x3c54, 0x5c48, 0x3b2a, 0x5c49, 0x4033, + 0x4d72, 0x5d2b, 0x5236, 0x5d26, 0x5d27, 0x4e2d, 0x7877, 0x3b67, + 0x5d3b, 0x5d2a, 0x3254, 0x5d25, 0x3847, 0x412b, 0x5c4a, 0x5c6a, + 0x7825, 0x5d64, 0x3d2f, 0x5c60, 0x5271, 0x5d21, 0x5d5b, 0x5c71, + 0x5d24, 0x5c3f, 0x5d35, 0x5c69, 0x5d5e, 0x3534, 0x4e5f, 0x4f74, + 0x5d77, 0x5c76, 0x3c3b, 0x5c3c, 0x7844, 0x473e, 0x5d32, 0x3c76, + 0x4878, 0x5c79, 0x4036, 0x5d23, 0x5255, 0x5229, 0x5e34, 0x544c, + 0x5c42, 0x302a, 0x5d7e, 0x5e2d, 0x422b, 0x4b55, 0x463b, 0x5e3a, + 0x5d7c, 0x5c57, 0x403c, 0x5d71, 0x425c, 0x3426, 0x4232, 0x3a45, + 0x3f77, 0x724c, 0x7239, 0x784b, 0x4a34, 0x4f3a, 0x4e4f, 0x724f, + 0x426c, 0x5329, 0x7277, 0x555d, 0x7265, 0x727d, 0x7231, 0x3275, + 0x724d, 0x3366, 0x7249, 0x524f, 0x532c, 0x7232, 0x7253, 0x726e, + 0x402f, 0x7243, 0x3946, 0x324f, 0x4279, 0x565a, 0x785a, 0x4a75, + 0x4e40, 0x3365, 0x563b, 0x7441, 0x406f, 0x3239, 0x5730, 0x7925, + 0x7834, 0x3f63, 0x714d, 0x715a, 0x5974, 0x7150, 0x3040, 0x714f, + 0x7149, 0x715c, 0x4d60, 0x7821, 0x3344, 0x4f2e, 0x3c7b, 0x3966, + 0x4359, 0x4a53, 0x6a68, 0x6a6a, 0x6a6c, 0x4757, 0x6a69, 0x6a6d, + 0x6a6e, 0x6a6f, 0x3e75, 0x4040, 0x6a6b, 0x395b, 0x757c, 0x7623, + 0x3425, 0x5a25, 0x3629, 0x383c, 0x3c46, 0x5136, 0x5a27, 0x4c56, + 0x5a26, 0x5135, 0x5a28, 0x467d, 0x3c47, 0x366f, 0x5148, 0x4b4f, + 0x3e77, 0x5a2b, 0x3743, 0x4968, 0x506d, 0x4b5f, 0x5a2d, 0x556f, + 0x5a2c, 0x5a2e, 0x5a2a, 0x5529, 0x5a31, 0x5a2f, 0x4640, 0x5a30, + 0x5767, 0x344a, 0x5a3c, 0x512f, 0x5268, 0x4a54, 0x4a2b, 0x326f, + 0x5a38, 0x396e, 0x5a39, 0x5a35, 0x3b30, 0x3843, 0x4f6a, 0x5a37, + 0x5a36, 0x5a34, 0x5a33, 0x566f, 0x5a32, 0x3f64, 0x484f, 0x5a3f, + 0x5a40, 0x352e, 0x5355, 0x5a3d, 0x536f, 0x334f, 0x3d6b, 0x4e5c, + 0x4e73, 0x5a3e, 0x4b50, 0x3b65, 0x4b35, 0x4b2d, 0x3f4e, 0x5a47, + 0x374c, 0x526a, 0x3577, 0x5a46, 0x573b, 0x4c38, 0x5a43, 0x476b, + 0x5a3a, 0x5a41, 0x5a42, 0x4142, 0x425b, 0x5a45, 0x5a44, 0x357d, + 0x5a52, 0x5a3b, 0x5a4c, 0x5a50, 0x5033, 0x5a49, 0x5a4d, 0x5a51, + 0x3b64, 0x5a4f, 0x5a48, 0x376d, 0x566e, 0x5168, 0x5a4e, 0x4535, + 0x4431, 0x5a4b, 0x4e3d, 0x4c5c, 0x565f, 0x3b51, 0x4355, 0x5a57, + 0x5a4a, 0x5a55, 0x3079, 0x472b, 0x5a56, 0x3d32, 0x503b, 0x5225, + 0x5a53, 0x5a58, 0x437d, 0x5a59, 0x5a29, 0x3d77, 0x4321, 0x5624, + 0x5a5c, 0x3c25, 0x5a5a, 0x4a36, 0x5a5b, 0x4c37, 0x4657, 0x5a5e, + 0x526b, 0x5269, 0x4734, 0x3b24, 0x537e, 0x3641, 0x3164, 0x7645, + 0x3277, 0x4843, 0x403e, 0x5a5f, 0x5a54, 0x5a5d, 0x4671, 0x3761, + 0x3134, 0x556a, 0x383a, 0x3246, 0x3931, 0x4636, 0x3b75, 0x3737, + 0x4c30, 0x3961, 0x5470, 0x567c, 0x6a5b, 0x6a5f, 0x3721, 0x3973, + 0x3161, 0x4272, 0x347b, 0x6a5c, 0x3751, 0x4c79, 0x6a5d, 0x4333, + 0x3a58, 0x6a5a, 0x4238, 0x415e, 0x3b5f, 0x6a60, 0x574a, 0x3c56, + 0x5474, 0x6a62, 0x495e, 0x3176, 0x6a64, 0x6a63, 0x344d, 0x494d, + 0x4562, 0x6259, 0x4f4d, 0x4274, 0x3c7a, 0x3833, 0x6a66, 0x564a, + 0x6a65, 0x554b, 0x3644, 0x4035, 0x572c, 0x6a67, 0x393a, 0x487c, + 0x5853, 0x6a5e, 0x5738, 0x5479, 0x545e, 0x584d, 0x4944, 0x532e, + 0x6a61, 0x4a6a, 0x3853, 0x545f, 0x384f, 0x5554, 0x4777, 0x7475, + 0x3c79, 0x533b, 0x7544, 0x754f, 0x7567, 0x754e, 0x753b, 0x336c, + 0x7552, 0x543e, 0x755c, 0x7548, 0x7559, 0x7551, 0x7566, 0x345a, + 0x7572, 0x756f, 0x477b, 0x3335, 0x547e, 0x396c, 0x3e7c, 0x5079, + 0x696d, 0x696e, 0x486d, 0x6975, 0x6974, 0x696f, 0x5661, 0x6972, + 0x6977, 0x6970, 0x6973, 0x6978, 0x3d4f, 0x697b, 0x697a, 0x5458, + 0x6979, 0x697c, 0x3828, 0x4761, 0x413e, 0x6a22, 0x3b54, 0x697e, + 0x6a21, 0x3975, 0x697d, 0x3132, 0x4256, 0x3c2d, 0x6a23, 0x4a64, + 0x3778, 0x5537, 0x535f, 0x6c31, 0x4f3d, 0x542f, 0x6a24, 0x572a, + 0x555e, 0x3d4e, 0x6a25, 0x3a64, 0x604e, 0x6976, 0x6971, 0x306c, + 0x3447, 0x3168, 0x3167, 0x4529, 0x783c, 0x6549, 0x5562, 0x412c, + 0x3d78, 0x544b, 0x397d, 0x346f, 0x4e25, 0x5137, 0x355d, 0x5436, + 0x4a4a, 0x3359, 0x4728, 0x5121, 0x5245, 0x4149, 0x4275, 0x3b39, + 0x6547, 0x315f, 0x425f, 0x654e, 0x7879, 0x5b23, 0x534a, 0x5b29, + 0x4f67, 0x575e, 0x5a79, 0x5447, 0x354b, 0x5623, 0x415a, 0x3526, + 0x5a7e, 0x5b26, 0x5a77, 0x5b2a, 0x544d, 0x3373, 0x523d, 0x3d34, + 0x4470, 0x5046, 0x7527, 0x7526, 0x4a4d, 0x784e, 0x6e44, 0x6e45, + 0x6e46, 0x6e49, 0x6e48, 0x3624, 0x6e47, 0x556b, 0x3576, 0x6e4c, + 0x6e4b, 0x3730, 0x6e4e, 0x6e4a, 0x6e4f, 0x4725, 0x6e59, 0x6e55, + 0x6e57, 0x6e50, 0x4446, 0x365b, 0x3933, 0x6e54, 0x6e53, 0x332e, + 0x4525, 0x3e7b, 0x3846, 0x6e58, 0x6e51, 0x6e56, 0x6e6a, 0x6e66, + 0x6e5d, 0x4165, 0x6e5c, 0x6e60, 0x6e6b, 0x6e5a, 0x6e5f, 0x534b, + 0x6e64, 0x3c58, 0x6e52, 0x6e68, 0x6e67, 0x6e69, 0x322c, 0x6e5e, + 0x472f, 0x432d, 0x4726, 0x6e61, 0x3227, 0x6e5b, 0x6e62, 0x6e63, + 0x3d42, 0x6e6f, 0x3875, 0x6e7e, 0x5278, 0x6f25, 0x4d2d, 0x4f33, + 0x6e7d, 0x6e79, 0x437a, 0x6f22, 0x4f4e, 0x6e6e, 0x6f28, 0x523f, + 0x6e77, 0x6f27, 0x6e7b, 0x6e70, 0x6f24, 0x6e6d, 0x6e76, 0x4f7a, + 0x5062, 0x4c60, 0x6f31, 0x4241, 0x6f36, 0x503f, 0x3135, 0x6e7a, + 0x6e72, 0x3766, 0x6f32, 0x6f37, 0x6e74, 0x337a, 0x6f2d, 0x6f38, + 0x6f30, 0x464c, 0x4871, 0x6e71, 0x6f2f, 0x6f2e, 0x6f2b, 0x6f33, + 0x3e62, 0x3856, 0x6f3e, 0x6f3a, 0x6f42, 0x6f43, 0x5736, 0x6f39, + 0x6f3f, 0x3438, 0x6f45, 0x6f23, 0x6f3c, 0x6f44, 0x3627, 0x472e, + 0x3d75, 0x432a, 0x4e7d, 0x6f40, 0x346d, 0x423c, 0x434c, 0x7823, + 0x6f2a, 0x6f3d, 0x4f47, 0x6f41, 0x6e4d, 0x6f47, 0x3978, 0x3646, + 0x6f49, 0x5521, 0x364d, 0x6f4a, 0x6f46, 0x6f3b, 0x4742, 0x6f4c, + 0x3c7c, 0x6f48, 0x5560, 0x6f71, 0x433e, 0x6f4d, 0x6f51, 0x3077, + 0x4b78, 0x6f53, 0x4e59, 0x5d76, 0x6f56, 0x6e78, 0x6f21, 0x6f4b, + 0x3864, 0x5572, 0x6f57, 0x4478, 0x6f58, 0x6f54, 0x6f55, 0x6f5f, + 0x6f60, 0x4134, 0x6f52, 0x6f5d, 0x6f61, 0x6f2c, 0x6f4f, 0x6f5b, + 0x6f5c, 0x6f5e, 0x3279, 0x3e35, 0x6f5a, 0x6f4e, 0x7649, 0x6e7c, + 0x6f64, 0x6f6a, 0x6e73, 0x6f26, 0x414d, 0x6f29, 0x6f66, 0x6f62, + 0x5653, 0x6f6b, 0x6f63, 0x6f68, 0x6f34, 0x6f35, 0x6f50, 0x412d, + 0x6f6d, 0x4058, 0x4c7a, 0x6e6c, 0x6e75, 0x6f6e, 0x567d, 0x6f6c, + 0x6f59, 0x3c78, 0x6f6f, 0x6e65, 0x6f70, 0x6f65, 0x6f67, 0x543f, + 0x4f62, 0x4477, 0x6f69, 0x4260, 0x576a, 0x7647, 0x5464, 0x3324, + 0x4345, 0x6345, 0x4941, 0x6346, 0x3155, 0x3f2a, 0x634a, 0x6348, + 0x4872, 0x4f50, 0x3c64, 0x6349, 0x5522, 0x3a52, 0x3873, 0x7839, + 0x3727, 0x396b, 0x4376, 0x634d, 0x634f, 0x634c, 0x5444, 0x6351, + 0x514b, 0x5156, 0x6355, 0x6354, 0x6350, 0x6353, 0x6356, 0x7822, + 0x6347, 0x402b, 0x6357, 0x403b, 0x6359, 0x6358, 0x635a, 0x3433, + 0x3958, 0x635b, 0x327b, 0x785b, 0x634b, 0x5a6a, 0x4942, 0x5573, + 0x5275, 0x3342, 0x423d, 0x5174, 0x3653, 0x3d57, 0x5449, 0x3c4a, + 0x4b66, 0x4f55, 0x527e, 0x4224, 0x4125, 0x7922, 0x4b64, 0x4b2b, + 0x337b, 0x5453, 0x406b, 0x4451, 0x5446, 0x3567, 0x4e6d, 0x762b, + 0x7628, 0x7630, 0x4169, 0x7626, 0x584c, 0x392e, 0x7864, 0x7733, + 0x7732, 0x7861, 0x7735, 0x4e24, 0x484d, 0x3a2b, 0x6838, 0x683a, + 0x6839, 0x4f6c, 0x5233, 0x3625, 0x476a, 0x4f6e, 0x4b33, 0x717c, + 0x506b, 0x676f, 0x4b4c, 0x717d, 0x717e, 0x5424, 0x4d67, 0x3064, + 0x3659, 0x4644, 0x416c, 0x7222, 0x7221, 0x5243, 0x7224, 0x4d37, + 0x3c55, 0x7225, 0x3e31, 0x4635, 0x4d47, 0x3f45, 0x4c62, 0x366e, + 0x7226, 0x7227, 0x5155, 0x5438, 0x722a, 0x355f, 0x4060, 0x7229, + 0x722b, 0x394b, 0x327c, 0x722c, 0x4f54, 0x722d, 0x422d, 0x7228, + 0x4827, 0x3767, 0x6c29, 0x6c2a, 0x786c, 0x7837, 0x6c2b, 0x6c2c, + 0x462e, 0x6c2d, 0x6c2e, 0x3749, 0x623b, 0x783f, 0x623d, 0x623f, + 0x6240, 0x6241, 0x3739, 0x527b, 0x6242, 0x4b47, 0x3125, 0x4a4e, + 0x3d48, 0x317d, 0x6243, 0x5178, 0x367c, 0x6244, 0x4459, 0x3676, + 0x5360, 0x6246, 0x3d24, 0x4f5a, 0x395d, 0x623c, 0x6247, 0x623e, + 0x4173, 0x6248, 0x6249, 0x4278, 0x624a, 0x624b, 0x624c, 0x4021, + 0x624d, 0x3c22, 0x4844, 0x774f, 0x7750, 0x3276, 0x624e, 0x426d, + 0x5426, 0x376b, 0x4d54, 0x335b, 0x5131, 0x3235, 0x5724, 0x6665, + 0x3e54, 0x6660, 0x3c5d, 0x6666, 0x6662, 0x4a3b, 0x4d55, 0x6661, + 0x426e, 0x6669, 0x3a27, 0x4266, 0x3f25, 0x3352, 0x666d, 0x666c, + 0x466f, 0x666b, 0x6670, 0x462d, 0x6539, 0x666f, 0x6672, 0x4c5a, + 0x6663, 0x4927, 0x6673, 0x4262, 0x5d6b, 0x6671, 0x666e, 0x6674, + 0x6675, 0x477d, 0x6668, 0x6667, 0x6676, 0x3d3e, 0x5169, 0x3e2a, + 0x6664, 0x5668, 0x423f, 0x6678, 0x6677, 0x666a, 0x3039, 0x7743, + 0x787e, 0x4c65, 0x7746, 0x7745, 0x7831, 0x4b49, 0x783a, 0x7876, + 0x775e, 0x3637, 0x4456, 0x6352, 0x634e, 0x5374, 0x774b, 0x774a, + 0x5363, 0x4233, 0x7650, 0x764f, 0x7651, 0x7652, 0x7653, 0x7658, + 0x312b, 0x7656, 0x765a, 0x765f, 0x765c, 0x765b, 0x765e, 0x7659, + 0x4f4a, 0x7667, 0x7661, 0x7669, 0x4070, 0x7668, 0x7676, 0x766b, + 0x7674, 0x7671, 0x766e, 0x7672, 0x766f, 0x7670, 0x3e28, 0x766c, + 0x766d, 0x7673, 0x7675, 0x766a, 0x767d, 0x7678, 0x767c, 0x767a, + 0x7679, 0x767b, 0x487a, 0x767e, 0x7665, 0x7724, 0x7723, 0x7725, + 0x7722, 0x7663, 0x7721, 0x7726, 0x772a, 0x7666, 0x7664, 0x7729, + 0x7727, 0x772b, 0x7728, 0x316e, 0x772e, 0x772d, 0x772c, 0x415b, + 0x7660, 0x7677, 0x7657, 0x772f, 0x765d, 0x7654, 0x7662, 0x4471, + 0x702f, 0x596c, 0x376f, 0x4379, 0x7030, 0x7032, 0x7031, 0x513b, + 0x4d52, 0x5427, 0x7036, 0x7037, 0x7033, 0x516c, 0x513c, 0x7039, + 0x703b, 0x3a68, 0x386b, 0x703c, 0x3e69, 0x7041, 0x703e, 0x7043, + 0x366c, 0x7040, 0x7044, 0x7046, 0x4574, 0x7047, 0x4835, 0x7034, + 0x7048, 0x7045, 0x7049, 0x704a, 0x704c, 0x704d, 0x5d3a, 0x3a57, + 0x773d, 0x704f, 0x704b, 0x704e, 0x3c26, 0x7051, 0x4538, 0x703a, + 0x7052, 0x7038, 0x7054, 0x7053, 0x7055, 0x7042, 0x7056, 0x5325, + 0x7058, 0x7057, 0x7035, 0x7050, 0x7059, 0x703f, 0x703d, 0x7852, + 0x7874, 0x753a, 0x3c6f, 0x514e, 0x4076, 0x4273, 0x746f, 0x7865, + 0x7859, 0x4334, 0x5964, 0x3563, 0x3533, 0x7775, 0x7854, 0x7772, + 0x763c, 0x763d, 0x763e, 0x782e, 0x466b, 0x552b, 0x6c34, 0x335d, + 0x7633, 0x7635, 0x7637, 0x7634, 0x7636, 0x4164, 0x782a, 0x7638, + 0x763a, 0x7639, 0x4823, 0x763b, 0x417a, 0x4553, 0x3928, 0x6d68, + 0x396a, 0x2672, 0x2674, 0x2675, 0x2660, 0x2661, 0x2670, 0x2671, + 0x2662, 0x2663, 0x266e, 0x266f, 0x2666, 0x2667, 0x2664, 0x2665, + 0x2668, 0x2669, 0x266a, 0x266b, +}; + +static const Summary16 gb12345ext_uni2indx_page01[23] = { + /* 0x0100 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0110 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0200 }, + /* 0x0200 */ + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0002 }, { 4, 0x0002 }, +}; +static const Summary16 gb12345ext_uni2indx_page1e[4] = { + /* 0x1e00 */ + { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x8000 }, +}; +static const Summary16 gb12345ext_uni2indx_page22[3] = { + /* 0x2200 */ + { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0020 }, +}; +static const Summary16 gb12345ext_uni2indx_page4e[1306] = { + /* 0x4e00 */ + { 7, 0x0080 }, { 8, 0x0002 }, { 9, 0x0000 }, { 9, 0x0001 }, + { 10, 0x0100 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0004 }, { 12, 0x4002 }, { 14, 0x0000 }, { 14, 0x0000 }, + { 14, 0x0040 }, { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0080 }, + /* 0x4f00 */ + { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0000 }, + { 16, 0x0000 }, { 16, 0x0200 }, { 17, 0x0000 }, { 17, 0x0000 }, + { 17, 0x0040 }, { 18, 0x0040 }, { 19, 0x0000 }, { 19, 0x0000 }, + { 19, 0x0004 }, { 20, 0x0000 }, { 20, 0x0001 }, { 21, 0x0000 }, + /* 0x5000 */ + { 21, 0x0a41 }, { 25, 0x0002 }, { 26, 0x0800 }, { 27, 0x0000 }, + { 27, 0x0200 }, { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0030 }, + { 30, 0x0000 }, { 30, 0x0340 }, { 33, 0x2004 }, { 35, 0x40b8 }, + { 40, 0x0224 }, { 43, 0x4022 }, { 46, 0x0120 }, { 48, 0x0200 }, + /* 0x5100 */ + { 49, 0x0315 }, { 54, 0x8131 }, { 59, 0x0400 }, { 60, 0x1c84 }, + { 65, 0x0000 }, { 65, 0x0404 }, { 67, 0x0200 }, { 68, 0x0000 }, + { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0004 }, + { 69, 0x2040 }, { 71, 0x0000 }, { 71, 0x2001 }, { 73, 0x0002 }, + /* 0x5200 */ + { 74, 0x0000 }, { 74, 0x0004 }, { 75, 0x0000 }, { 75, 0x0000 }, + { 75, 0x0890 }, { 78, 0x0800 }, { 79, 0x4000 }, { 80, 0x0030 }, + { 82, 0x3688 }, { 88, 0x0002 }, { 89, 0x0000 }, { 89, 0x0000 }, + { 89, 0x0002 }, { 90, 0x6a20 }, { 95, 0x0004 }, { 96, 0x0122 }, + /* 0x5300 */ + { 99, 0x0000 }, { 99, 0x0000 }, { 99, 0xa000 }, { 101, 0x0002 }, + { 102, 0x0001 }, { 103, 0x0010 }, { 104, 0x0000 }, { 104, 0x0000 }, + { 104, 0x0004 }, { 105, 0x0200 }, { 106, 0x2001 }, { 108, 0x0014 }, + { 110, 0x0008 }, { 111, 0x0000 }, { 111, 0x0404 }, { 113, 0x0041 }, + /* 0x5400 */ + { 115, 0x4000 }, { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, + { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, + { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x1000 }, + { 117, 0x0000 }, { 117, 0x0000 }, { 117, 0x0002 }, { 118, 0x0000 }, + /* 0x5500 */ + { 118, 0x0010 }, { 119, 0x0000 }, { 119, 0x0000 }, { 119, 0x0000 }, + { 119, 0x8000 }, { 120, 0x4008 }, { 122, 0x0000 }, { 122, 0x0000 }, + { 122, 0x0000 }, { 122, 0x0000 }, { 122, 0x5400 }, { 125, 0x0004 }, + { 126, 0x40c0 }, { 129, 0x0400 }, { 130, 0x0200 }, { 131, 0x0040 }, + /* 0x5600 */ + { 132, 0x2040 }, { 134, 0x10d0 }, { 138, 0xc200 }, { 141, 0x0121 }, + { 144, 0x0002 }, { 145, 0x2000 }, { 146, 0x8061 }, { 150, 0x0314 }, + { 154, 0x1081 }, { 157, 0x0220 }, { 159, 0x4140 }, { 162, 0x0058 }, + { 165, 0x1327 }, { 172, 0x0002 }, { 173, 0x0000 }, { 173, 0x0000 }, + /* 0x5700 */ + { 173, 0x2880 }, { 176, 0x014c }, { 180, 0x0000 }, { 180, 0x0000 }, + { 180, 0x0000 }, { 180, 0x0000 }, { 180, 0x0000 }, { 180, 0x0000 }, + { 180, 0x0000 }, { 180, 0x0000 }, { 180, 0x0000 }, { 180, 0x0000 }, + { 180, 0x0000 }, { 180, 0x0000 }, { 180, 0x0002 }, { 181, 0x0080 }, + /* 0x5800 */ + { 182, 0x0420 }, { 184, 0x2040 }, { 186, 0x8000 }, { 187, 0x0012 }, + { 189, 0x8c00 }, { 192, 0x0084 }, { 194, 0x0014 }, { 196, 0x0220 }, + { 198, 0x0400 }, { 199, 0x1000 }, { 200, 0x4000 }, { 201, 0x4808 }, + { 204, 0x0080 }, { 205, 0xc708 }, { 211, 0x8205 }, { 215, 0x2400 }, + /* 0x5900 */ + { 217, 0x0000 }, { 217, 0x0000 }, { 217, 0x0004 }, { 218, 0x4100 }, + { 220, 0x0000 }, { 220, 0x0000 }, { 220, 0x5600 }, { 224, 0x0000 }, + { 224, 0x0000 }, { 224, 0x2000 }, { 225, 0x0000 }, { 225, 0x0000 }, + { 225, 0x0000 }, { 225, 0x0000 }, { 225, 0x0000 }, { 225, 0x0000 }, + /* 0x5a00 */ + { 225, 0x0000 }, { 225, 0x0000 }, { 225, 0x0000 }, { 225, 0x0000 }, + { 225, 0x0002 }, { 226, 0x0000 }, { 226, 0x2040 }, { 228, 0x0000 }, + { 228, 0x0000 }, { 228, 0x0000 }, { 228, 0x0080 }, { 229, 0x2000 }, + { 230, 0x0000 }, { 230, 0x0080 }, { 231, 0x0000 }, { 231, 0x0820 }, + /* 0x5b00 */ + { 233, 0x1901 }, { 237, 0x0200 }, { 238, 0x0402 }, { 240, 0x0101 }, + { 242, 0x1000 }, { 243, 0x0000 }, { 243, 0x0800 }, { 244, 0x8100 }, + { 246, 0x0000 }, { 246, 0x0000 }, { 246, 0x0000 }, { 246, 0x0000 }, + { 246, 0x0000 }, { 246, 0x0000 }, { 246, 0x1ac4 }, { 252, 0x0060 }, + /* 0x5c00 */ + { 254, 0x6980 }, { 259, 0x0000 }, { 259, 0x0000 }, { 259, 0x0080 }, + { 260, 0x0000 }, { 260, 0x0000 }, { 260, 0x1114 }, { 264, 0x0000 }, + { 264, 0x0000 }, { 264, 0x0000 }, { 264, 0x0002 }, { 265, 0x0000 }, + { 265, 0x0000 }, { 265, 0x0000 }, { 265, 0x0000 }, { 265, 0x2050 }, + /* 0x5d00 */ + { 268, 0x2000 }, { 269, 0x0080 }, { 270, 0x1000 }, { 271, 0x0000 }, + { 271, 0x0000 }, { 271, 0x0001 }, { 272, 0x0000 }, { 272, 0x0000 }, + { 272, 0x0092 }, { 275, 0x0080 }, { 276, 0x0081 }, { 278, 0x1500 }, + { 281, 0x0800 }, { 282, 0x0014 }, { 284, 0x0000 }, { 284, 0x0001 }, + /* 0x5e00 */ + { 285, 0x0000 }, { 285, 0x0100 }, { 286, 0x0820 }, { 288, 0x0048 }, + { 290, 0x0009 }, { 292, 0x8180 }, { 295, 0x1808 }, { 298, 0xc204 }, + { 302, 0x0000 }, { 302, 0x0000 }, { 302, 0x0800 }, { 303, 0x0000 }, + { 303, 0x0000 }, { 303, 0x8000 }, { 304, 0x100f }, { 309, 0x0008 }, + /* 0x5f00 */ + { 310, 0x0000 }, { 310, 0x0000 }, { 310, 0x0000 }, { 310, 0x0028 }, + { 312, 0x5140 }, { 316, 0x0200 }, { 317, 0x0000 }, { 317, 0x0000 }, + { 317, 0x1000 }, { 318, 0x4002 }, { 320, 0x0201 }, { 322, 0x0200 }, + { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0000 }, + /* 0x6000 */ + { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0000 }, + { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0000 }, + { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x0060 }, + { 325, 0x0000 }, { 325, 0x0000 }, { 325, 0x0002 }, { 326, 0x0806 }, + /* 0x6100 */ + { 329, 0x0000 }, { 329, 0x1800 }, { 331, 0x0000 }, { 331, 0xc090 }, + { 335, 0x0800 }, { 336, 0x8500 }, { 339, 0x4c18 }, { 344, 0x0048 }, + { 346, 0x0404 }, { 348, 0x0407 }, { 352, 0x4810 }, { 355, 0x0044 }, + { 357, 0x1280 }, { 360, 0xc000 }, { 362, 0x0108 }, { 364, 0x55c4 }, + /* 0x6200 */ + { 371, 0x0081 }, { 373, 0x0010 }, { 374, 0x0080 }, { 375, 0x0005 }, + { 377, 0x0000 }, { 377, 0x0002 }, { 378, 0x0000 }, { 378, 0x0000 }, + { 378, 0x0000 }, { 378, 0x0000 }, { 378, 0x0000 }, { 378, 0x0000 }, + { 378, 0x0000 }, { 378, 0x0000 }, { 378, 0x0000 }, { 378, 0x0000 }, + /* 0x6300 */ + { 378, 0x0000 }, { 378, 0x0000 }, { 378, 0x0000 }, { 378, 0x4000 }, + { 379, 0x0000 }, { 379, 0x0000 }, { 379, 0x4900 }, { 382, 0x0004 }, + { 383, 0x0018 }, { 385, 0x0000 }, { 385, 0x0000 }, { 385, 0x0000 }, + { 385, 0x0001 }, { 386, 0x0400 }, { 387, 0x4000 }, { 388, 0x0000 }, + /* 0x6400 */ + { 388, 0x2000 }, { 389, 0x0080 }, { 390, 0x0000 }, { 390, 0x0040 }, + { 391, 0x0000 }, { 391, 0x9002 }, { 394, 0x8000 }, { 395, 0x0848 }, + { 398, 0x0100 }, { 399, 0x8008 }, { 401, 0x0828 }, { 404, 0xc80c }, + { 409, 0x0c92 }, { 414, 0x0410 }, { 416, 0x9001 }, { 419, 0x5c97 }, + /* 0x6500 */ + { 428, 0x8050 }, { 431, 0x2a50 }, { 436, 0x141c }, { 441, 0x0000 }, + { 441, 0x0000 }, { 441, 0x0080 }, { 442, 0x0000 }, { 442, 0x0120 }, + { 444, 0x000c }, { 446, 0x00a0 }, { 448, 0x1000 }, { 449, 0x0080 }, + { 450, 0x0000 }, { 450, 0x0000 }, { 450, 0x0000 }, { 450, 0x0000 }, + /* 0x6600 */ + { 450, 0x0000 }, { 450, 0x0000 }, { 450, 0x0000 }, { 450, 0x0000 }, + { 450, 0x0004 }, { 451, 0x2000 }, { 452, 0x0000 }, { 452, 0x0000 }, + { 452, 0x0300 }, { 454, 0x0000 }, { 454, 0x0804 }, { 456, 0x0000 }, + { 456, 0x02d0 }, { 460, 0x0040 }, { 461, 0x1001 }, { 463, 0x0100 }, + /* 0x6700 */ + { 464, 0x0008 }, { 465, 0x0000 }, { 465, 0x8080 }, { 467, 0x0010 }, + { 468, 0x0000 }, { 468, 0x0000 }, { 468, 0x0000 }, { 468, 0x4002 }, + { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, + { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, + /* 0x6800 */ + { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, + { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, + { 470, 0x0000 }, { 470, 0xa100 }, { 473, 0x0000 }, { 473, 0x0000 }, + { 473, 0x0000 }, { 473, 0x80c0 }, { 476, 0x0080 }, { 477, 0x0000 }, + /* 0x6900 */ + { 477, 0x8000 }, { 478, 0x0000 }, { 478, 0x0000 }, { 478, 0x0000 }, + { 478, 0x0400 }, { 479, 0x0008 }, { 480, 0x2100 }, { 482, 0x0020 }, + { 483, 0x0000 }, { 483, 0x0000 }, { 483, 0x4400 }, { 485, 0x8000 }, + { 486, 0x2800 }, { 488, 0x0000 }, { 488, 0x0080 }, { 489, 0x0008 }, + /* 0x6a00 */ + { 490, 0x0026 }, { 493, 0x4208 }, { 496, 0x0008 }, { 497, 0x0700 }, + { 500, 0x0900 }, { 502, 0x8000 }, { 503, 0x0004 }, { 504, 0x0000 }, + { 504, 0x0200 }, { 505, 0x1010 }, { 507, 0x800c }, { 510, 0x0908 }, + { 513, 0x0008 }, { 514, 0xec08 }, { 520, 0x1580 }, { 524, 0x0908 }, + /* 0x6b00 */ + { 527, 0x8410 }, { 530, 0x4044 }, { 533, 0x0000 }, { 533, 0x2000 }, + { 534, 0x0000 }, { 534, 0x8001 }, { 536, 0x0002 }, { 537, 0x0184 }, + { 540, 0x0000 }, { 540, 0x4100 }, { 542, 0xc810 }, { 546, 0x0c04 }, + { 549, 0x0040 }, { 550, 0x0000 }, { 550, 0x0000 }, { 550, 0x8000 }, + /* 0x6c00 */ + { 551, 0x1100 }, { 553, 0x0000 }, { 553, 0x1808 }, { 556, 0x0000 }, + { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0000 }, + { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0000 }, + { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0000 }, + /* 0x6d00 */ + { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0000 }, + { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0000 }, { 556, 0x0200 }, + { 557, 0x0084 }, { 559, 0x0000 }, { 559, 0x0000 }, { 559, 0x0000 }, + { 559, 0x0001 }, { 560, 0x0000 }, { 560, 0x0400 }, { 561, 0x0460 }, + /* 0x6e00 */ + { 564, 0x0000 }, { 564, 0x0000 }, { 564, 0x1040 }, { 566, 0x4000 }, + { 567, 0x0000 }, { 567, 0x4000 }, { 568, 0x8000 }, { 569, 0x0000 }, + { 569, 0x0000 }, { 569, 0x2040 }, { 571, 0x0000 }, { 571, 0x0000 }, + { 571, 0x5030 }, { 575, 0x0000 }, { 575, 0x9000 }, { 577, 0x8184 }, + /* 0x6f00 */ + { 581, 0x0002 }, { 582, 0x0400 }, { 583, 0x100c }, { 586, 0x8104 }, + { 589, 0x0002 }, { 590, 0x0212 }, { 593, 0x8010 }, { 595, 0x8081 }, + { 598, 0x00c1 }, { 601, 0x0080 }, { 602, 0x4211 }, { 606, 0x0002 }, + { 607, 0x000a }, { 609, 0x8920 }, { 613, 0x0810 }, { 615, 0x5403 }, + /* 0x7000 */ + { 620, 0x8a60 }, { 625, 0xa120 }, { 629, 0x0181 }, { 632, 0x4005 }, + { 635, 0x0018 }, { 637, 0x2122 }, { 641, 0x0098 }, { 644, 0x0000 }, + { 644, 0x0000 }, { 644, 0x0000 }, { 644, 0x0000 }, { 644, 0x0000 }, + { 644, 0x8000 }, { 645, 0x0000 }, { 645, 0x0000 }, { 645, 0x0010 }, + /* 0x7100 */ + { 646, 0x0000 }, { 646, 0x0000 }, { 646, 0x0002 }, { 647, 0x0000 }, + { 647, 0x0200 }, { 648, 0x0004 }, { 649, 0x1204 }, { 652, 0x0000 }, + { 652, 0x0000 }, { 652, 0x0084 }, { 654, 0x0000 }, { 654, 0x4002 }, + { 656, 0x0102 }, { 658, 0x9204 }, { 662, 0x2040 }, { 664, 0x5010 }, + /* 0x7200 */ + { 667, 0x2000 }, { 668, 0x0801 }, { 670, 0x0000 }, { 670, 0x4404 }, + { 673, 0x0000 }, { 673, 0x0100 }, { 674, 0x0000 }, { 674, 0x2000 }, + { 675, 0x0000 }, { 675, 0x0040 }, { 676, 0x0084 }, { 678, 0x0000 }, + { 678, 0x0001 }, { 679, 0x0000 }, { 679, 0x0000 }, { 679, 0x2200 }, + /* 0x7300 */ + { 681, 0x0000 }, { 681, 0x0000 }, { 681, 0x0000 }, { 681, 0x0840 }, + { 683, 0x0032 }, { 686, 0x0000 }, { 686, 0x0d00 }, { 689, 0x1da5 }, + { 697, 0x0001 }, { 698, 0x0000 }, { 698, 0x0000 }, { 698, 0x0000 }, + { 698, 0x0000 }, { 698, 0x0000 }, { 698, 0x0000 }, { 698, 0x4000 }, + /* 0x7400 */ + { 699, 0x0000 }, { 699, 0x0000 }, { 699, 0x0000 }, { 699, 0x8000 }, + { 700, 0x0800 }, { 701, 0x0000 }, { 701, 0x0608 }, { 704, 0x0000 }, + { 704, 0x0200 }, { 705, 0x0000 }, { 705, 0x0048 }, { 707, 0x2001 }, + { 709, 0x8400 }, { 711, 0x0410 }, { 713, 0x0000 }, { 713, 0x0000 }, + /* 0x7500 */ + { 713, 0x1000 }, { 714, 0x0000 }, { 714, 0x0008 }, { 715, 0x0000 }, + { 715, 0x0000 }, { 715, 0x2000 }, { 716, 0x0804 }, { 718, 0x0040 }, + { 719, 0x0080 }, { 720, 0x0000 }, { 720, 0x0000 }, { 720, 0x0000 }, + { 720, 0x0080 }, { 721, 0x0200 }, { 722, 0x0000 }, { 722, 0x0000 }, + /* 0x7600 */ + { 722, 0x2804 }, { 725, 0x4000 }, { 726, 0x0082 }, { 728, 0x0800 }, + { 729, 0x02c4 }, { 733, 0x8100 }, { 735, 0x72b4 }, { 743, 0x1007 }, + { 747, 0x0000 }, { 747, 0x0400 }, { 748, 0x0000 }, { 748, 0x0500 }, + { 750, 0x0000 }, { 750, 0x4000 }, { 751, 0x009a }, { 755, 0x0000 }, + /* 0x7700 */ + { 755, 0x0000 }, { 755, 0x0000 }, { 755, 0x0000 }, { 755, 0x0000 }, + { 755, 0x8000 }, { 756, 0x4000 }, { 757, 0x0000 }, { 757, 0x0000 }, + { 757, 0x0000 }, { 757, 0x4100 }, { 759, 0x2000 }, { 760, 0x1000 }, + { 761, 0x0080 }, { 762, 0x0400 }, { 763, 0x8000 }, { 764, 0x0000 }, + /* 0x7800 */ + { 764, 0x0000 }, { 764, 0x0000 }, { 764, 0x0000 }, { 764, 0x0000 }, + { 764, 0x0008 }, { 765, 0x0000 }, { 765, 0xc110 }, { 769, 0x0000 }, + { 769, 0x0000 }, { 769, 0x0000 }, { 769, 0x2200 }, { 771, 0x1500 }, + { 774, 0x0000 }, { 774, 0x0400 }, { 775, 0x8088 }, { 778, 0x2000 }, + /* 0x7900 */ + { 779, 0x4000 }, { 780, 0x0200 }, { 781, 0x1c40 }, { 785, 0x0002 }, + { 786, 0x0000 }, { 786, 0x0000 }, { 786, 0x0000 }, { 786, 0x0000 }, + { 786, 0x6000 }, { 788, 0x0000 }, { 788, 0x4440 }, { 791, 0x0003 }, + { 793, 0x2000 }, { 794, 0x0000 }, { 794, 0x0000 }, { 794, 0x0000 }, + /* 0x7a00 */ + { 794, 0x0000 }, { 794, 0x0000 }, { 794, 0x4000 }, { 795, 0x0002 }, + { 796, 0x7001 }, { 800, 0x0000 }, { 800, 0x0a06 }, { 804, 0x0000 }, + { 804, 0x0000 }, { 804, 0x0000 }, { 804, 0x4600 }, { 807, 0x0440 }, + { 809, 0x05b0 }, { 814, 0x0000 }, { 814, 0x0400 }, { 815, 0x0040 }, + /* 0x7b00 */ + { 816, 0x0000 }, { 816, 0x0000 }, { 816, 0x0000 }, { 816, 0x0000 }, + { 816, 0x0040 }, { 817, 0x0002 }, { 818, 0x0080 }, { 819, 0x0000 }, + { 819, 0x0800 }, { 820, 0x0000 }, { 820, 0x0000 }, { 820, 0x0000 }, + { 820, 0x0a11 }, { 824, 0x0000 }, { 824, 0x0210 }, { 826, 0x0008 }, + /* 0x7c00 */ + { 827, 0x2001 }, { 829, 0x4000 }, { 830, 0x080a }, { 833, 0x6000 }, + { 835, 0x1008 }, { 837, 0x9000 }, { 839, 0x5611 }, { 845, 0x0004 }, + { 846, 0x0000 }, { 846, 0x0000 }, { 846, 0x0000 }, { 846, 0x0000 }, + { 846, 0x0000 }, { 846, 0x6000 }, { 848, 0x0080 }, { 849, 0x4255 }, + /* 0x7d00 */ + { 855, 0x2bf5 }, { 865, 0x1eb9 }, { 874, 0x0002 }, { 875, 0x960f }, + { 883, 0x4055 }, { 888, 0x6001 }, { 891, 0x0146 }, { 895, 0x024e }, + { 900, 0x834a }, { 906, 0x5008 }, { 909, 0x380c }, { 914, 0xef1f }, + { 926, 0x0c90 }, { 930, 0x6396 }, { 938, 0x934b }, { 946, 0x0a56 }, + /* 0x7e00 */ + { 952, 0x0f00 }, { 956, 0xe803 }, { 962, 0x6888 }, { 967, 0x62f6 }, + { 976, 0x0060 }, { 978, 0x4434 }, { 983, 0xee04 }, { 990, 0x7209 }, + { 996, 0xb500 }, { 1001, 0x1158 }, { 1006, 0x0000 }, { 1006, 0x0000 }, + { 1006, 0x0000 }, { 1006, 0x0000 }, { 1006, 0x0000 }, { 1006, 0x0000 }, + /* 0x7f00 */ + { 1006, 0x0000 }, { 1006, 0x0000 }, { 1006, 0x0000 }, { 1006, 0x0000 }, + { 1006, 0x5000 }, { 1008, 0x0000 }, { 1008, 0x0000 }, { 1008, 0x0081 }, + { 1010, 0x0160 }, { 1013, 0x0000 }, { 1013, 0x0220 }, { 1015, 0x0000 }, + { 1015, 0x0000 }, { 1015, 0x0004 }, { 1016, 0x0000 }, { 1016, 0x0200 }, + /* 0x8000 */ + { 1017, 0x0000 }, { 1017, 0x0000 }, { 1017, 0x5000 }, { 1019, 0x0000 }, + { 1019, 0x0000 }, { 1019, 0x4040 }, { 1021, 0x8000 }, { 1022, 0x62ed }, + { 1031, 0x0020 }, { 1032, 0x0000 }, { 1032, 0x0000 }, { 1032, 0x0000 }, + { 1032, 0x0000 }, { 1032, 0x0000 }, { 1032, 0x0000 }, { 1032, 0x0000 }, + /* 0x8100 */ + { 1032, 0x0020 }, { 1033, 0x0800 }, { 1034, 0x0000 }, { 1034, 0x0200 }, + { 1035, 0x4400 }, { 1037, 0x0040 }, { 1038, 0x0842 }, { 1041, 0x0100 }, + { 1042, 0x0000 }, { 1042, 0x0400 }, { 1043, 0x0201 }, { 1045, 0xe000 }, + { 1048, 0xa200 }, { 1051, 0x8500 }, { 1054, 0x0101 }, { 1056, 0x0400 }, + /* 0x8200 */ + { 1057, 0x2780 }, { 1062, 0x0000 }, { 1062, 0x0000 }, { 1062, 0x0000 }, + { 1062, 0x0000 }, { 1062, 0x0200 }, { 1063, 0x0850 }, { 1066, 0x0082 }, + { 1068, 0x0000 }, { 1068, 0x0000 }, { 1068, 0x0000 }, { 1068, 0x0800 }, + { 1069, 0x0000 }, { 1069, 0x0000 }, { 1069, 0x0080 }, { 1070, 0x0200 }, + /* 0x8300 */ + { 1071, 0x0008 }, { 1072, 0x0000 }, { 1072, 0x0000 }, { 1072, 0x0000 }, + { 1072, 0x0000 }, { 1072, 0x0001 }, { 1073, 0x0000 }, { 1073, 0x0000 }, + { 1073, 0x0400 }, { 1074, 0x0040 }, { 1075, 0x0084 }, { 1077, 0x0000 }, + { 1077, 0x0000 }, { 1077, 0x0000 }, { 1077, 0x8000 }, { 1078, 0x0000 }, + /* 0x8400 */ + { 1078, 0x0480 }, { 1080, 0x0000 }, { 1080, 0x1000 }, { 1081, 0x0020 }, + { 1082, 0x0200 }, { 1083, 0x0004 }, { 1084, 0x8050 }, { 1087, 0x0080 }, + { 1088, 0x0000 }, { 1088, 0x0018 }, { 1090, 0x0000 }, { 1090, 0x1000 }, + { 1091, 0x0801 }, { 1093, 0x0000 }, { 1093, 0xc000 }, { 1095, 0x2000 }, + /* 0x8500 */ + { 1096, 0x0000 }, { 1096, 0x4010 }, { 1098, 0x2048 }, { 1101, 0x0000 }, + { 1101, 0x4042 }, { 1104, 0x012c }, { 1108, 0x2604 }, { 1112, 0x0080 }, + { 1113, 0x1500 }, { 1116, 0x8012 }, { 1119, 0x0240 }, { 1121, 0x0400 }, + { 1122, 0x6000 }, { 1124, 0x2000 }, { 1125, 0x0420 }, { 1127, 0x0650 }, + /* 0x8600 */ + { 1131, 0x08d0 }, { 1135, 0x4400 }, { 1137, 0x2004 }, { 1139, 0x8400 }, + { 1141, 0x0000 }, { 1141, 0x9020 }, { 1144, 0x0080 }, { 1145, 0x0000 }, + { 1145, 0x0000 }, { 1145, 0x0000 }, { 1145, 0x0000 }, { 1145, 0x0000 }, + { 1145, 0x0000 }, { 1145, 0x0000 }, { 1145, 0x0000 }, { 1145, 0x0400 }, + /* 0x8700 */ + { 1146, 0x0040 }, { 1147, 0x0000 }, { 1147, 0x0002 }, { 1148, 0x0000 }, + { 1148, 0x0000 }, { 1148, 0x0020 }, { 1149, 0x0040 }, { 1150, 0x0100 }, + { 1151, 0x0010 }, { 1152, 0x4000 }, { 1153, 0x0004 }, { 1154, 0x0800 }, + { 1155, 0x4110 }, { 1158, 0x0000 }, { 1158, 0x9008 }, { 1161, 0x0844 }, + /* 0x8800 */ + { 1164, 0x0060 }, { 1166, 0x8003 }, { 1169, 0x0008 }, { 1170, 0x0842 }, + { 1173, 0x0440 }, { 1175, 0x2808 }, { 1178, 0x0000 }, { 1178, 0x0200 }, + { 1179, 0x0000 }, { 1179, 0x0000 }, { 1179, 0x0000 }, { 1179, 0x0000 }, + { 1179, 0x8400 }, { 1181, 0x3000 }, { 1183, 0x0000 }, { 1183, 0x2000 }, + /* 0x8900 */ + { 1184, 0x0080 }, { 1185, 0x0000 }, { 1185, 0x0000 }, { 1185, 0x090c }, + { 1189, 0x0080 }, { 1190, 0x2040 }, { 1192, 0x9411 }, { 1197, 0x0004 }, + { 1198, 0x8800 }, { 1200, 0x0148 }, { 1203, 0x9442 }, { 1208, 0xa484 }, + { 1213, 0x0001 }, { 1214, 0x0000 }, { 1214, 0x0000 }, { 1214, 0x0150 }, + /* 0x8a00 */ + { 1217, 0x550e }, { 1224, 0xa969 }, { 1232, 0x2428 }, { 1236, 0x0452 }, + { 1240, 0x4042 }, { 1243, 0x4935 }, { 1250, 0x7a4e }, { 1259, 0x902f }, + { 1266, 0x20f0 }, { 1271, 0x4526 }, { 1277, 0x117b }, { 1285, 0x9245 }, + { 1291, 0xaa94 }, { 1298, 0x58c6 }, { 1305, 0x68d4 }, { 1312, 0x55ca }, + /* 0x8b00 */ + { 1320, 0x4437 }, { 1327, 0x2ed1 }, { 1335, 0x3902 }, { 1340, 0x4208 }, + { 1343, 0xc200 }, { 1346, 0x1740 }, { 1351, 0x8800 }, { 1353, 0x2091 }, + { 1357, 0x4401 }, { 1360, 0x506c }, { 1366, 0x0000 }, { 1366, 0x0000 }, + { 1366, 0x0000 }, { 1366, 0x0000 }, { 1366, 0x0000 }, { 1366, 0x0000 }, + /* 0x8c00 */ + { 1366, 0x0000 }, { 1366, 0x0000 }, { 1366, 0x0000 }, { 1366, 0x0000 }, + { 1366, 0x0100 }, { 1367, 0x0001 }, { 1368, 0x0000 }, { 1368, 0x0000 }, + { 1368, 0x0000 }, { 1368, 0x6000 }, { 1370, 0x9f87 }, { 1380, 0xbddd }, + { 1392, 0x05bf }, { 1401, 0x542e }, { 1408, 0x3cdf }, { 1419, 0x7c10 }, + /* 0x8d00 */ + { 1425, 0xad30 }, { 1432, 0x1841 }, { 1436, 0x0000 }, { 1436, 0x0000 }, + { 1436, 0x0000 }, { 1436, 0x0000 }, { 1436, 0x0000 }, { 1436, 0x0000 }, + { 1436, 0x0000 }, { 1436, 0x0220 }, { 1438, 0x0100 }, { 1439, 0x0004 }, + { 1440, 0x0000 }, { 1440, 0x0000 }, { 1440, 0x0000 }, { 1440, 0x0000 }, + /* 0x8e00 */ + { 1440, 0x0000 }, { 1440, 0x0001 }, { 1441, 0x0000 }, { 1441, 0x0010 }, + { 1442, 0x1000 }, { 1443, 0x0020 }, { 1444, 0x0008 }, { 1445, 0x0400 }, + { 1446, 0x2e00 }, { 1450, 0x040e }, { 1454, 0x0462 }, { 1458, 0x0000 }, + { 1458, 0x3c01 }, { 1463, 0x8814 }, { 1467, 0x0810 }, { 1469, 0x5f04 }, + /* 0x8f00 */ + { 1476, 0x06a8 }, { 1481, 0xf834 }, { 1489, 0x8660 }, { 1494, 0xc908 }, + { 1499, 0x6274 }, { 1506, 0x8010 }, { 1508, 0x0016 }, { 1511, 0x0000 }, + { 1511, 0x0000 }, { 1511, 0x0000 }, { 1511, 0xe040 }, { 1515, 0x0004 }, + { 1516, 0x0000 }, { 1516, 0x0000 }, { 1516, 0x0000 }, { 1516, 0x0010 }, + /* 0x9000 */ + { 1517, 0x0000 }, { 1517, 0x0220 }, { 1519, 0x0008 }, { 1520, 0x0004 }, + { 1521, 0x4800 }, { 1523, 0x5030 }, { 1527, 0x0201 }, { 1529, 0x1584 }, + { 1534, 0x8492 }, { 1539, 0x0001 }, { 1540, 0x0000 }, { 1540, 0x0000 }, + { 1540, 0x0002 }, { 1541, 0x8000 }, { 1542, 0x0000 }, { 1542, 0x0020 }, + /* 0x9100 */ + { 1543, 0x0240 }, { 1545, 0x0054 }, { 1548, 0x2080 }, { 1550, 0x0455 }, + { 1555, 0x0100 }, { 1556, 0x0000 }, { 1556, 0x0000 }, { 1556, 0x0000 }, + { 1556, 0x0000 }, { 1556, 0x1040 }, { 1558, 0x1800 }, { 1560, 0x0000 }, + { 1560, 0x182b }, { 1566, 0x23bc }, { 1574, 0x0298 }, { 1578, 0x06a0 }, + /* 0x9200 */ + { 1582, 0x6313 }, { 1589, 0x4033 }, { 1594, 0x40e8 }, { 1599, 0xe799 }, + { 1609, 0x2321 }, { 1614, 0x4ca2 }, { 1620, 0x3044 }, { 1624, 0x8d00 }, + { 1628, 0x0029 }, { 1631, 0x154a }, { 1637, 0x1f69 }, { 1646, 0x1a82 }, + { 1651, 0x90aa }, { 1657, 0xa004 }, { 1660, 0xe578 }, { 1669, 0x1143 }, + /* 0x9300 */ + { 1674, 0x01c2 }, { 1678, 0x8f25 }, { 1686, 0xc945 }, { 1693, 0x014c }, + { 1697, 0x28cb }, { 1704, 0x0910 }, { 1707, 0x1230 }, { 1711, 0x4461 }, + { 1716, 0x0494 }, { 1720, 0x0140 }, { 1722, 0x56cc }, { 1730, 0x8129 }, + { 1735, 0x3188 }, { 1740, 0xf182 }, { 1747, 0x0116 }, { 1751, 0x02a0 }, + /* 0x9400 */ + { 1754, 0x0808 }, { 1756, 0x231d }, { 1763, 0x41c1 }, { 1768, 0x852c }, + { 1774, 0x1410 }, { 1777, 0x0014 }, { 1779, 0x2029 }, { 1783, 0xf285 }, + { 1791, 0x0000 }, { 1791, 0x0000 }, { 1791, 0x0000 }, { 1791, 0x0000 }, + { 1791, 0x0000 }, { 1791, 0x0000 }, { 1791, 0x0000 }, { 1791, 0x0000 }, + /* 0x9500 */ + { 1791, 0x0000 }, { 1791, 0x0000 }, { 1791, 0x0000 }, { 1791, 0x0000 }, + { 1791, 0x0000 }, { 1791, 0x0000 }, { 1791, 0x0000 }, { 1791, 0x0080 }, + { 1792, 0xda4d }, { 1801, 0x011a }, { 1805, 0x3b3a }, { 1814, 0xfa44 }, + { 1822, 0x1d48 }, { 1828, 0x5071 }, { 1834, 0x0026 }, { 1837, 0x0000 }, + /* 0x9600 */ + { 1837, 0x0000 }, { 1837, 0x0000 }, { 1837, 0x0000 }, { 1837, 0x0000 }, + { 1837, 0x0000 }, { 1837, 0x2100 }, { 1839, 0x0008 }, { 1840, 0x2109 }, + { 1844, 0x4400 }, { 1846, 0x0820 }, { 1848, 0x0500 }, { 1850, 0x0912 }, + { 1854, 0x0000 }, { 1854, 0x1a40 }, { 1858, 0x000c }, { 1860, 0x0804 }, + /* 0x9700 */ + { 1862, 0x0000 }, { 1862, 0x0000 }, { 1862, 0x0080 }, { 1863, 0x2000 }, + { 1864, 0x0114 }, { 1867, 0x0400 }, { 1868, 0x0100 }, { 1869, 0x0000 }, + { 1869, 0x8000 }, { 1870, 0x0000 }, { 1870, 0x0040 }, { 1871, 0x2000 }, + { 1872, 0x1a48 }, { 1877, 0x5208 }, { 1881, 0x0000 }, { 1881, 0x8000 }, + /* 0x9800 */ + { 1882, 0xd5ee }, { 1893, 0x118f }, { 1900, 0x2052 }, { 1904, 0x2981 }, + { 1909, 0x7040 }, { 1913, 0x4b18 }, { 1919, 0x98a4 }, { 1925, 0x001b }, + { 1929, 0x0000 }, { 1929, 0x0000 }, { 1929, 0xc100 }, { 1932, 0x104a }, + { 1936, 0x0150 }, { 1939, 0x0800 }, { 1940, 0xae05 }, { 1947, 0x7014 }, + /* 0x9900 */ + { 1952, 0x1628 }, { 1957, 0x490e }, { 1963, 0x0102 }, { 1965, 0xd088 }, + { 1970, 0x1f28 }, { 1977, 0x5086 }, { 1982, 0x0004 }, { 1983, 0x0000 }, + { 1983, 0x0000 }, { 1983, 0x0000 }, { 1983, 0x7000 }, { 1986, 0x001a }, + { 1989, 0x0002 }, { 1990, 0xab37 }, { 2000, 0x2006 }, { 2003, 0x8002 }, + /* 0x9a00 */ + { 2005, 0xe022 }, { 2010, 0x0240 }, { 2012, 0x6800 }, { 2015, 0x41c1 }, + { 2020, 0xa43f }, { 2029, 0x8ca0 }, { 2034, 0x0434 }, { 2038, 0x0000 }, + { 2038, 0x0000 }, { 2038, 0x0000 }, { 2038, 0x8000 }, { 2039, 0x0000 }, + { 2039, 0x8000 }, { 2040, 0x0074 }, { 2044, 0x4000 }, { 2045, 0x0000 }, + /* 0x9b00 */ + { 2045, 0x2040 }, { 2047, 0x0400 }, { 2048, 0x42a4 }, { 2053, 0x0002 }, + { 2054, 0x4000 }, { 2055, 0x0500 }, { 2057, 0x8000 }, { 2058, 0x0090 }, + { 2060, 0x400a }, { 2063, 0x6407 }, { 2069, 0x6c00 }, { 2073, 0x0000 }, + { 2073, 0x0683 }, { 2078, 0x2850 }, { 2082, 0x0d96 }, { 2089, 0xa011 }, + /* 0x9c00 */ + { 2093, 0x2300 }, { 2096, 0x000d }, { 2099, 0x2329 }, { 2105, 0x4aae }, + { 2113, 0x0320 }, { 2116, 0xa1d4 }, { 2123, 0x2080 }, { 2125, 0x0500 }, + { 2127, 0x0000 }, { 2127, 0x0000 }, { 2127, 0x0000 }, { 2127, 0x0000 }, + { 2127, 0x0000 }, { 2127, 0x0000 }, { 2127, 0x1220 }, { 2130, 0x0058 }, + /* 0x9d00 */ + { 2133, 0x02c0 }, { 2136, 0xa820 }, { 2140, 0x8148 }, { 2144, 0x8801 }, + { 2147, 0x0004 }, { 2148, 0x300e }, { 2153, 0x9403 }, { 2158, 0x0004 }, + { 2159, 0x0280 }, { 2161, 0x0508 }, { 2164, 0x8220 }, { 2167, 0x1810 }, + { 2170, 0x0015 }, { 2173, 0x0688 }, { 2177, 0x8060 }, { 2180, 0x070c }, + /* 0x9e00 */ + { 2185, 0x1000 }, { 2186, 0x6c20 }, { 2191, 0x0000 }, { 2191, 0x0000 }, + { 2191, 0x0000 }, { 2191, 0x0000 }, { 2191, 0x0000 }, { 2191, 0x3620 }, + { 2196, 0x0000 }, { 2196, 0x0080 }, { 2197, 0x8220 }, { 2200, 0x2020 }, + { 2202, 0x1000 }, { 2203, 0x4000 }, { 2204, 0x0100 }, { 2205, 0xa094 }, + /* 0x9f00 */ + { 2210, 0x0200 }, { 2211, 0x0020 }, { 2212, 0x0000 }, { 2212, 0x0000 }, + { 2212, 0x8c00 }, { 2215, 0x9214 }, { 2220, 0x144b }, { 2226, 0x0084 }, + { 2228, 0x2000 }, { 2229, 0x1031 }, +}; +static const Summary16 gb12345ext_uni2indx_pagefe[5] = { + /* 0xfe00 */ + { 2233, 0x0000 }, { 2233, 0x0000 }, { 2233, 0x0000 }, { 2233, 0xfffa }, + { 2247, 0x001f }, +}; + +static int +gb12345ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0100 && wc < 0x0270) + summary = &gb12345ext_uni2indx_page01[(wc>>4)-0x010]; + else if (wc >= 0x1e00 && wc < 0x1e40) + summary = &gb12345ext_uni2indx_page1e[(wc>>4)-0x1e0]; + else if (wc >= 0x2200 && wc < 0x2230) + summary = &gb12345ext_uni2indx_page22[(wc>>4)-0x220]; + else if (wc >= 0x4e00 && wc < 0x9fa0) + summary = &gb12345ext_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0xfe00 && wc < 0xfe50) + summary = &gb12345ext_uni2indx_pagefe[(wc>>4)-0xfe0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = gb12345ext_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/gb18030.h b/jni/parted/libiconv/lib/gb18030.h new file mode 100755 index 0000000..fc08b36 --- /dev/null +++ b/jni/parted/libiconv/lib/gb18030.h @@ -0,0 +1,380 @@ +/* + * Copyright (C) 1999-2001, 2005, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GB18030 + */ + +/* + * GB18030, as specified in the GB18030 standard, is an extension of GBK. + * + * In what follows, page numbers refer to the GB18030 standard (second + * printing). + * + * + * It consists of the following parts: + * + * One-byte range: + * ASCII p. 2 0x{00..7F} + * + * Two-byte range: + * GBK part 1 p. 10..12 0x{A1..A9}{A1..FE} + * GBK part 2 p. 13..36 0x{B0..F7}{A1..FE} + * GBK part 3 p. 37..52 0x{81..A0}{40..7E,80..FE} + * GBK part 4 p. 53..81 0x{AA..FE}{40..7E,80..A0} + * GBK part 5 p. 82 0x{A8..A9}{40..7E,80..A0} + * UDA part 1 p. 83..84 0x{AA..AF}{A1..FE} U+E000..U+E233 + * UDA part 2 p. 85..87 0x{F8..FE}{A1..FE} U+E234..U+E4C5 + * UDA part 3 p. 88..90 0x{A1..A7}{40..7E,80..A0} U+E4C6..U+E765 + * + * Four-byte range: + * BMP rest p. 94..283 0x{81..84}{30..39}{81..FE}{30..39} + * rest of U+0080..U+FFFF + * Planes 1-16 p. 5 0x{90..FE}{30..39}{81..FE}{30..39} + * U+10000..U+10FFFF + * + * To GBK part 1 were added: + * 1. 0xA2E3, 0xA8BF. + * 2. Characters mapped to the Unicode PUA + * 0xA2AB..0xA2B0 U+E766..U+E76B + * 0xA2E4 U+E76D + * 0xA2EF..0xA2F0 U+E76E..U+E76F + * 0xA2FD..0xA2FE U+E770..U+E771 + * 0xA4F4..0xA4FE U+E772..U+E77C + * 0xA5F7..0xA5FE U+E77D..U+E784 + * 0xA6B9..0xA6C0 U+E785..U+E78C + * 0xA6D9..0xA6DF [glyphs here!!] U+E78D..U+E793 + * 0xA6EC..0xA6ED [glyphs here!!] U+E794..U+E795 + * 0xA6F3 [glyphs here!!] U+E796 + * 0xA6F6..0xA6FE U+E797..U+E79F + * 0xA7C2..0xA7D0 U+E7A0..U+E7AE + * 0xA7F2..0xA7FE U+E7AF..U+E7BB + * 0xA8BC [glyphs here!!] U+E7C7 + * 0xA8C1..0xA8C4 U+E7C9..U+E7CC + * 0xA8EA..0xA8FE U+E7CD..U+E7E1 + * 0xA9A1..0xA9A3 U+E7FE..U+E800 + * 0xA9F0..0xA9FE U+E801..U+E80F + * + * To GBK part 2 were added: + * 3. Characters mapped to the Unicode PUA + * 0xD7FA..0xD7FE U+E810..0xE814 + * + * To GBK part 3 nothing was added. + * + * To GBK part 4 were added: + * 4. 0xFE{50,54..58,5A..60,62..65,68..6B,6E..75,77..7D,80..8F,92..9F}. + * 5. Characters mapped to the Unicode PUA + * 0xFE51..0xFE53 [glyphs here!!] U+E816..U+E818 + * 0xFE59 [glyphs here!!] U+E81E + * 0xFE61 [glyphs here!!] U+E826 + * 0xFE66..0xFE67 [glyphs here!!] U+E82B..U+E82C + * 0xFE6C..0xFE6D [glyphs here!!] U+E831..U+E832 + * 0xFE76 [glyphs here!!] U+E83B + * 0xFE7E [glyphs here!!] U+E843 + * 0xFE90..0xFE91 [glyphs here!!] U+E854..U+E855 + * 0xFEA0 [glyphs here!!] U+E864 + * + * To GBK part 5 were added: + * 6. 0xA98A..0xA995. + * 7. Characters mapped to the Unicode PUA + * 0xA896..0xA8A0 U+E7BC..U+E7C6 + * 0xA958 U+E7E2 + * 0xA95B U+E7E3 + * 0xA95D..0xA95F U+E7E4..U+E7E6 + * 0xA997..0xA9A0 U+E7F4..U+E7FD + * + * UDA part 1 contains the user-defined characters, mapped to the Unicode PUA + * U+E000..U+E233 in ascending order. + * + * UDA part 2 contains the user-defined characters, mapped to the Unicode PUA + * U+E234..U+E4C5 in ascending order. + * + * UDA part 3 contains the user-defined characters, mapped to the Unicode PUA + * U+E4C6..U+E765 in ascending order. + * + * The four-byte range 0x{81..84}{30..39}{81..FE}{30..39} + * contains the rest of the Unicode BMP in ascending order. + * Start: 0x81308130 = 0x0080 + * End: 0x8431A439 = 0xFFFF + * + * The four-byte range 0x{90..E3}{30..39}{81..FE}{30..39} + * contains the remaining 16 Unicode planes in Unicode order. + * Start: 0x90308130 = 0x010000 + * End: 0xE3329A35 = 0x10FFFF + * + * + * Unassigned Unicode characters are mapped. For example, + * U+173F = 0x8134BF35 (p. 120) + * U+2EFF = 0x81398B31 (p. 148) + * U+FFFE = 0x8431A438 (p. 283) + * + * + * The Unicode PUA (U+E000..U+F8FF) is mapped as follows: + * p. 83..84 0x{AA..AF}{A1..FE} U+E000..U+E233 + * p. 85..87 0x{F8..FE}{A1..FE} U+E234..U+E4C5 + * p. 88..90 0x{A1..A7}{40..7E,80..A0} U+E4C6..U+E765 + * p. 10 0xA2AB..0xA2B0 U+E766..U+E76B + * p. 255 0x8336C739 U+E76C + * p. 10 0xA2E4 U+E76D + * p. 10 0xA2EF..0xA2F0 U+E76E..U+E76F + * p. 10 0xA2FD..0xA2FE U+E770..U+E771 + * p. 11 0xA4F4..0xA4FE U+E772..U+E77C + * p. 11 0xA5F7..0xA5FE U+E77D..U+E784 + * p. 11 0xA6B9..0xA6C0 U+E785..U+E78C + * p. 11 0xA6D9..0xA6DF [glyphs here!!] U+E78D..U+E793 + * p. 11 0xA6EC..0xA6ED [glyphs here!!] U+E794..U+E795 + * p. 11 0xA6F3 [glyphs here!!] U+E796 + * p. 11 0xA6F6..0xA6FE U+E797..U+E79F + * p. 12 0xA7C2..0xA7D0 U+E7A0..U+E7AE + * p. 12 0xA7F2..0xA7FE U+E7AF..U+E7BB + * p. 82 0xA896..0xA8A0 U+E7BC..U+E7C6 + * p. 12 0x8135F437 U+E7C7 + * p. 255 0x8336C830 U+E7C8 + * p. 12 0xA8C1..0xA8C4 U+E7C9..U+E7CC + * p. 12 0xA8EA..0xA8FE U+E7CD..U+E7E1 + * p. 82 0xA958 U+E7E2 + * p. 82 0xA95B U+E7E3 + * p. 82 0xA95D..0xA95F U+E7E4..U+E7E6 + * p. 255 0x8336C831..0x8336C933 U+E7E7..U+E7F3 + * p. 82 0xA997..0xA9A0 U+E7F4..U+E7FD + * p. 12 0xA9A1..0xA9A3 U+E7FE..U+E800 + * p. 12 0xA9F0..0xA9FE U+E801..U+E80F + * p. 26 0xD7FA..0xD7FE U+E810..0xE814 + * p. 255 0x8336C934 U+E815 + * p. 81 0xFE51..0xFE53 [glyphs here!!] U+E816..U+E818 + * p. 255 0x8336C935..0x8336C939 U+E819..U+E81D + * p. 81 0xFE59 [glyphs here!!] U+E81E + * p. 255 0x8336CA30..0x8336CA36 U+E81F..U+E825 + * p. 81 0xFE61 [glyphs here!!] U+E826 + * p. 255 0x8336CA37..0x8336CB30 U+E827..U+E82A + * p. 81 0xFE66..0xFE67 [glyphs here!!] U+E82B..U+E82C + * p. 255 0x8336CB31..0x8336CB34 U+E82D..U+E830 + * p. 81 0xFE6C..0xFE6D [glyphs here!!] U+E831..U+E832 + * p. 255 0x8336CB35..0x8336CC32 U+E833..U+E83A + * p. 81 0xFE76 [glyphs here!!] U+E83B + * p. 255 0x8336CC33..0x8336CC39 U+E83C..U+E842 + * p. 81 0xFE7E [glyphs here!!] U+E843 + * p. 255 0x8336CD30..0x8336CE35 U+E844..U+E853 + * p. 81 0xFE90..0xFE91 [glyphs here!!] U+E854..U+E855 + * p. 255 0x8336CE36..0x8336CF39 U+E856..U+E863 + * p. 81 0xFEA0 [glyphs here!!] U+E864 + * p. 255..276 0x8336D030..0x84308130 U+E865..U+F8FF + * + * + * The Unicode surrogate area (U+D800..U+DFFF) is not mapped. (p. 255) + * + */ + +#include "gb18030ext.h" +#include "gb18030uni.h" + +static int +gb18030_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + int ret; + + /* Code set 0 (ASCII) */ + if (*s < 0x80) + return ascii_mbtowc(conv,pwc,s,n); + + /* Code set 1 (GBK extended) */ + ret = gbk_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + + ret = gb18030ext_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + + /* Code set 2 (remainder of Unicode U+0000..U+FFFF), including + User-defined characters, two-byte part of range U+E766..U+E864 */ + ret = gb18030uni_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + /* User-defined characters range U+E000..U+E765 */ + { + unsigned char c1 = s[0]; + if ((c1 >= 0xaa && c1 <= 0xaf) || (c1 >= 0xf8 && c1 <= 0xfe)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 <= 0xfe) { + *pwc = 0xe000 + 94 * (c1 >= 0xf8 ? c1 - 0xf2 : c1 - 0xaa) + (c2 - 0xa1); + return 2; + } + } else + return RET_TOOFEW(0); + } else if (c1 >= 0xa1 && c1 <= 0xa7) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x40 && c2 <= 0xa1 && c2 != 0x7f) { + *pwc = 0xe4c6 + 96 * (c1 - 0xa1) + c2 - (c2 >= 0x80 ? 0x41 : 0x40); + return 2; + } + } else + return RET_TOOFEW(0); + } + } + + /* Code set 3 (Unicode U+10000..U+10FFFF) */ + { + unsigned char c1 = s[0]; + if (c1 >= 0x90 && c1 <= 0xe3) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x30 && c2 <= 0x39) { + if (n >= 3) { + unsigned char c3 = s[2]; + if (c3 >= 0x81 && c3 <= 0xfe) { + if (n >= 4) { + unsigned char c4 = s[3]; + if (c4 >= 0x30 && c4 <= 0x39) { + unsigned int i = (((c1 - 0x90) * 10 + (c2 - 0x30)) * 126 + (c3 - 0x81)) * 10 + (c4 - 0x30); + if (i >= 0 && i < 0x100000) { + *pwc = (ucs4_t) (0x10000 + i); + return 4; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; + } +} + +static const unsigned short gb18030_pua2charset[31*3] = { +/* Unicode range GB18030 range */ + 0xe766, 0xe76b, 0xa2ab, /*.. 0xa2b0, */ + 0xe76d, 0xe76d, 0xa2e4, + 0xe76e, 0xe76f, 0xa2ef, /*.. 0xa2f0, */ + 0xe770, 0xe771, 0xa2fd, /*.. 0xa2fe, */ + 0xe772, 0xe77c, 0xa4f4, /*.. 0xa4fe, */ + 0xe77d, 0xe784, 0xa5f7, /*.. 0xa5fe, */ + 0xe785, 0xe78c, 0xa6b9, /*.. 0xa6c0, */ + 0xe78d, 0xe793, 0xa6d9, /*.. 0xa6df, */ + 0xe794, 0xe795, 0xa6ec, /*.. 0xa6ed, */ + 0xe796, 0xe796, 0xa6f3, + 0xe797, 0xe79f, 0xa6f6, /*.. 0xa6fe, */ + 0xe7a0, 0xe7ae, 0xa7c2, /*.. 0xa7d0, */ + 0xe7af, 0xe7bb, 0xa7f2, /*.. 0xa7fe, */ + 0xe7bc, 0xe7c6, 0xa896, /*.. 0xa8a0, */ + 0xe7c9, 0xe7cc, 0xa8c1, /*.. 0xa8c4, */ + 0xe7cd, 0xe7e1, 0xa8ea, /*.. 0xa8fe, */ + 0xe7e2, 0xe7e2, 0xa958, + 0xe7e3, 0xe7e3, 0xa95b, + 0xe7e4, 0xe7e6, 0xa95d, /*.. 0xa95f, */ + 0xe7f4, 0xe800, 0xa997, /*.. 0xa9a3, */ + 0xe801, 0xe80f, 0xa9f0, /*.. 0xa9fe, */ + 0xe810, 0xe814, 0xd7fa, /*.. 0xd7fe, */ + 0xe816, 0xe818, 0xfe51, /*.. 0xfe53, */ + 0xe81e, 0xe81e, 0xfe59, + 0xe826, 0xe826, 0xfe61, + 0xe82b, 0xe82c, 0xfe66, /*.. 0xfe67, */ + 0xe831, 0xe832, 0xfe6c, /*.. 0xfe6d, */ + 0xe83b, 0xe83b, 0xfe76, + 0xe843, 0xe843, 0xfe7e, + 0xe854, 0xe855, 0xfe90, /*.. 0xfe91, */ + 0xe864, 0xe864, 0xfea0, +}; + +static int +gb18030_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + int ret; + + /* Code set 0 (ASCII) */ + ret = ascii_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 1 (GBK extended) */ + ret = gbk_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + ret = gb18030ext_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 2 (remainder of Unicode U+0000..U+FFFF) */ + if (wc >= 0xe000 && wc <= 0xe864) { + if (n >= 2) { + if (wc < 0xe766) { + /* User-defined characters range U+E000..U+E765 */ + if (wc < 0xe4c6) { + unsigned int i = wc - 0xe000; + r[1] = (i % 94) + 0xa1; i = i / 94; + r[0] = (i < 6 ? i + 0xaa : i + 0xf2); + return 2; + } else { + unsigned int i = wc - 0xe4c6; + r[0] = (i / 96) + 0xa1; i = i % 96; + r[1] = i + (i >= 0x3f ? 0x41 : 0x40); + return 2; + } + } else { + /* User-defined characters, two-byte part of range U+E766..U+E864 */ + unsigned int k1 = 0; + unsigned int k2 = 31; + /* Invariant: We know that if wc occurs in Unicode interval in + gb18030_pua2charset, it does so at a k with k1 <= k < k2. */ + while (k1 < k2) { + unsigned int k = (k1 + k2) / 2; + if (wc < gb18030_pua2charset[k*3+0]) + k2 = k; + else if (wc > gb18030_pua2charset[k*3+1]) + k1 = k + 1; + else { + unsigned short c = + gb18030_pua2charset[k*3+2] + (wc - gb18030_pua2charset[k*3+0]); + r[0] = (c >> 8); + r[1] = (c & 0xff); + return 2; + } + } + } + } else + return RET_TOOSMALL; + } + ret = gb18030uni_wctomb(conv,r,wc,n); + if (ret != RET_ILUNI) + return ret; + + /* Code set 3 (Unicode U+10000..U+10FFFF) */ + if (n >= 4) { + if (wc >= 0x10000 && wc < 0x110000) { + unsigned int i = wc - 0x10000; + r[3] = (i % 10) + 0x30; i = i / 10; + r[2] = (i % 126) + 0x81; i = i / 126; + r[1] = (i % 10) + 0x30; i = i / 10; + r[0] = i + 0x90; + return 4; + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/gb18030ext.h b/jni/parted/libiconv/lib/gb18030ext.h new file mode 100755 index 0000000..62d9a27 --- /dev/null +++ b/jni/parted/libiconv/lib/gb18030ext.h @@ -0,0 +1,327 @@ +/* + * Copyright (C) 1999-2001, 2005, 2011, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GB18030 two-byte extension + */ + +static const unsigned short gb18030ext_2uni_pagea9[13] = { + /* 0xa9 */ + 0x303e, 0x2ff0, 0x2ff1, 0x2ff2, 0x2ff3, 0x2ff4, 0x2ff5, 0x2ff6, + 0x2ff7, 0x2ff8, 0x2ff9, 0x2ffa, 0x2ffb, +}; +static const unsigned int gb18030ext_2uni_pagefe[96] = { + /* 0xfe */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x2e81, 0x20087, 0x20089, 0x200cc, 0x2e84, 0x3473, 0x3447, 0x2e88, + 0x2e8b, 0x9fb4, 0x359e, 0x361a, 0x360e, 0x2e8c, 0x2e97, 0x396e, + 0x3918, 0x9fb5, 0x39cf, 0x39df, 0x3a73, 0x39d0, 0x9fb6, 0x9fb7, + 0x3b4e, 0x3c6e, 0x3ce0, 0x2ea7, 0x215d7, 0x9fb8, 0x2eaa, 0x4056, + 0x415f, 0x2eae, 0x4337, 0x2eb3, 0x2eb6, 0x2eb7, 0x2298f, 0x43b1, + 0x43ac, 0x2ebb, 0x43dd, 0x44d6, 0x4661, 0x464c, 0x9fb9, 0x4723, + 0x4729, 0x477c, 0x478d, 0x2eca, 0x4947, 0x497a, 0x497d, 0x4982, + 0x4983, 0x4985, 0x4986, 0x499f, 0x499b, 0x49b7, 0x49b6, 0x9fba, + 0x241fe, 0x4ca3, 0x4c9f, 0x4ca0, 0x4ca1, 0x4c77, 0x4ca2, 0x4d13, + 0x4d14, 0x4d15, 0x4d16, 0x4d17, 0x4d18, 0x4d19, 0x4dae, 0x9fbb, +}; + +static int +gb18030ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 == 0xa2) || (c1 >= 0xa4 && c1 <= 0xa9) || (c1 == 0xd7) || (c1 == 0xfe)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0x80 && c2 < 0xff)) { + unsigned int i = 190 * (c1 - 0x81) + (c2 - (c2 >= 0x80 ? 0x41 : 0x40)); + unsigned int wc = 0xfffd; + switch (c1) { + case 0xa2: + if (i >= 6376 && i <= 6381) /* 0xA2AB..0xA2B0 */ + wc = 0xe766 + (i - 6376); + else if (i == 6432) /* 0xA2E3 */ + wc = 0x20ac; + else if (i == 6433) /* 0xA2E4 */ + wc = 0xe76d; + else if (i >= 6444 && i <= 6445) /* 0xA2EF..0xA2F0 */ + wc = 0xe76e + (i - 6444); + else if (i >= 6458 && i <= 6459) /* 0xA2FD..0xA2FE */ + wc = 0xe770 + (i - 6458); + break; + case 0xa4: + if (i >= 6829 && i <= 6839) /* 0xA4F4..0xA4FE */ + wc = 0xe772 + (i - 6829); + break; + case 0xa5: + if (i >= 7022 && i <= 7029) /* 0xA5F7..0xA5FE */ + wc = 0xe77d + (i - 7022); + break; + case 0xa6: + if (i >= 7150 && i <= 7157) /* 0xA6B9..0xA6C0 */ + wc = 0xe785 + (i - 7150); + else if (i >= 7183 && i <= 7184) /* 0xA6DA..0xA6DB */ + wc = 0xfe12 - (i - 7183); + else if (i >= 7182 && i <= 7190) /* 0xA6D9..0xA6DF */ + wc = 0xfe10 + (i - 7182); + else if (i >= 7201 && i <= 7202) /* 0xA6EC..0xA6ED */ + wc = 0xfe17 + (i - 7201); + else if (i == 7208) /* 0xA6F3 */ + wc = 0xfe19; + else if (i >= 7211 && i <= 7219) /* 0xA6F6..0xA6FE */ + wc = 0xe797 + (i - 7211); + break; + case 0xa7: + if (i >= 7349 && i <= 7363) /* 0xA7C2..0xA7D0 */ + wc = 0xe7a0 + (i - 7349); + else if (i >= 7397 && i <= 7409) /* 0xA7F2..0xA7FE */ + wc = 0xe7af + (i - 7397); + break; + case 0xa8: + if (i >= 7495 && i <= 7505) /* 0xA896..0xA8A0 */ + wc = 0xe7bc + (i - 7495); + else if (i == 7533) /* 0xA8BC */ + wc = 0x1e3f; + else if (i == 7536) /* 0xA8BF */ + wc = 0x01f9; + else if (i >= 7538 && i <= 7541) /* 0xA8C1..0xA8C4 */ + wc = 0xe7c9 + (i - 7538); + else if (i >= 7579 && i <= 7599) /* 0xA8EA..0xA8FE */ + wc = 0xe7cd + (i - 7579); + break; + case 0xa9: + if (i == 7624) /* 0xA958 */ + wc = 0xe7e2; + else if (i == 7627) /* 0xA95B */ + wc = 0xe7e3; + else if (i >= 7629 && i <= 7631) /* 0xA95D..0xA95F */ + wc = 0xe7e4 + (i - 7629); + else if (i >= 7672 && i < 7685) /* 0xA989..0xA995 */ + wc = gb18030ext_2uni_pagea9[i-7672]; + else if (i >= 7686 && i <= 7698) /* 0xA997..0xA9A3 */ + wc = 0xe7f4 + (i - 7686); + else if (i >= 7775 && i <= 7789) /* 0xA9F0..0xA9FE */ + wc = 0xe801 + (i - 7775); + break; + case 0xd7: + if (i >= 16525 && i <= 16529) /* 0xD7FA..0xD7FE */ + wc = 0xe810 + (i - 16525); + break; + case 0xfe: + if (i < 23846) + wc = gb18030ext_2uni_pagefe[i-23750]; + break; + default: + break; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short gb18030ext_page2e[80] = { + 0x0000, 0xfe50, 0x0000, 0x0000, 0xfe54, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/ + 0xfe57, 0x0000, 0x0000, 0xfe58, 0xfe5d, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe5e, /*0x90-0x97*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe6b, /*0xa0-0xa7*/ + 0x0000, 0x0000, 0xfe6e, 0x0000, 0x0000, 0x0000, 0xfe71, 0x0000, /*0xa8-0xaf*/ + 0x0000, 0x0000, 0x0000, 0xfe73, 0x0000, 0x0000, 0xfe74, 0xfe75, /*0xb0-0xb7*/ + 0x0000, 0x0000, 0x0000, 0xfe79, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/ + 0x0000, 0x0000, 0xfe84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/ +}; +static const unsigned short gb18030ext_page2f[16] = { + 0xa98a, 0xa98b, 0xa98c, 0xa98d, 0xa98e, 0xa98f, 0xa990, 0xa991, /*0xf0-0xf7*/ + 0xa992, 0xa993, 0xa994, 0xa995, 0x0000, 0x0000, 0x0000, 0x0000, /*0xf8-0xff*/ +}; +static const unsigned short gb18030ext_page34[56] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe56, /*0x40-0x47*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/ + 0x0000, 0x0000, 0x0000, 0xfe55, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/ +}; +static const unsigned short gb18030ext_page36[24] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe5c, 0x0000, /*0x08-0x0f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/ + 0x0000, 0x0000, 0xfe5b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ +}; +static const unsigned short gb18030ext_page39[24] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe62, /*0xc8-0xcf*/ + 0xfe65, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe63, /*0xd8-0xdf*/ +}; +static const unsigned short gb18030ext_page43[56] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xfe78, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/ + 0x0000, 0xfe77, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe7a, 0x0000, 0x0000, /*0xd8-0xdf*/ +}; +static const unsigned short gb18030ext_page46[32] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xfe7d, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ + 0x0000, 0xfe7c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ +}; +static const unsigned short gb18030ext_page47_1[16] = { + 0x0000, 0x0000, 0x0000, 0xfe80, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/ + 0x0000, 0xfe81, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ +}; +static const unsigned short gb18030ext_page47_2[24] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xfe82, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe83, 0x0000, 0x0000, /*0x88-0x8f*/ +}; +static const unsigned short gb18030ext_page49[120] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe85, /*0x40-0x47*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/ + 0x0000, 0x0000, 0xfe86, 0x0000, 0x0000, 0xfe87, 0x0000, 0x0000, /*0x78-0x7f*/ + 0x0000, 0x0000, 0xfe88, 0xfe89, 0x0000, 0xfe8a, 0xfe8b, 0x0000, /*0x80-0x87*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/ + 0x0000, 0x0000, 0x0000, 0xfe8d, 0x0000, 0x0000, 0x0000, 0xfe8c, /*0x98-0x9f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe8f, 0xfe8e, /*0xb0-0xb7*/ +}; +static const unsigned short gb18030ext_page4c[56] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe96, /*0x70-0x77*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe93, /*0x98-0x9f*/ + 0xfe94, 0xfe95, 0xfe97, 0xfe92, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/ +}; +static const unsigned short gb18030ext_page4d[16] = { + 0x0000, 0x0000, 0x0000, 0xfe98, 0xfe99, 0xfe9a, 0xfe9b, 0xfe9c, /*0x10-0x17*/ + 0xfe9d, 0xfe9e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ +}; +static const unsigned short gb18030ext_page9f[16] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xfe59, 0xfe61, 0xfe66, 0xfe67, /*0xb0-0xb7*/ + 0xfe6d, 0xfe7e, 0xfe90, 0xfea0, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/ +}; +static const unsigned short gb18030ext_pagefe[16] = { + 0xa6d9, 0xa6db, 0xa6da, 0xa6dc, 0xa6dd, 0xa6de, 0xa6df, 0xa6ec, /*0x10-0x17*/ + 0xa6ed, 0xa6f3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ +}; + +static int +gb18030ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + unsigned short c = 0; + if (wc == 0x01f9) + c = 0xa8bf; + else if (wc == 0x1e3f) + c = 0xa8bc; + else if (wc == 0x20ac) + c = 0xa2e3; + else if (wc >= 0x2e80 && wc < 0x2ed0) + c = gb18030ext_page2e[wc-0x2e80]; + else if (wc >= 0x2ff0 && wc < 0x3000) + c = gb18030ext_page2f[wc-0x2ff0]; + else if (wc == 0x303e) + c = 0xa989; + else if (wc >= 0x3440 && wc < 0x3478) + c = gb18030ext_page34[wc-0x3440]; + else if (wc == 0x359e) + c = 0xfe5a; + else if (wc >= 0x3608 && wc < 0x3620) + c = gb18030ext_page36[wc-0x3608]; + else if (wc == 0x3918) + c = 0xfe60; + else if (wc == 0x396e) + c = 0xfe5f; + else if (wc >= 0x39c8 && wc < 0x39e0) + c = gb18030ext_page39[wc-0x39c8]; + else if (wc == 0x3a73) + c = 0xfe64; + else if (wc == 0x3b4e) + c = 0xfe68; + else if (wc == 0x3c6e) + c = 0xfe69; + else if (wc == 0x3ce0) + c = 0xfe6a; + else if (wc == 0x4056) + c = 0xfe6f; + else if (wc == 0x415f) + c = 0xfe70; + else if (wc == 0x4337) + c = 0xfe72; + else if (wc >= 0x43a8 && wc < 0x43e0) + c = gb18030ext_page43[wc-0x43a8]; + else if (wc == 0x44d6) + c = 0xfe7b; + else if (wc >= 0x4648 && wc < 0x4668) + c = gb18030ext_page46[wc-0x4648]; + else if (wc >= 0x4720 && wc < 0x4730) + c = gb18030ext_page47_1[wc-0x4720]; + else if (wc >= 0x4778 && wc < 0x4790) + c = gb18030ext_page47_2[wc-0x4778]; + else if (wc >= 0x4940 && wc < 0x49b8) + c = gb18030ext_page49[wc-0x4940]; + else if (wc >= 0x4c70 && wc < 0x4ca8) + c = gb18030ext_page4c[wc-0x4c70]; + else if (wc >= 0x4d10 && wc < 0x4d20) + c = gb18030ext_page4d[wc-0x4d10]; + else if (wc == 0x4dae) + c = 0xfe9f; + else if (wc >= 0x9fb4 && wc < 0x9fbc) + c = gb18030ext_page9f[wc-0x9fb0]; + else if (wc >= 0xfe10 && wc < 0xfe1a) + c = gb18030ext_pagefe[wc-0xfe10]; + else if (wc == 0x20087) + c = 0xfe51; + else if (wc == 0x20089) + c = 0xfe52; + else if (wc == 0x200cc) + c = 0xfe53; + else if (wc == 0x215d7) + c = 0xfe6c; + else if (wc == 0x2298f) + c = 0xfe76; + else if (wc == 0x241fe) + c = 0xfe91; + if (c != 0) { + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/gb18030uni.h b/jni/parted/libiconv/lib/gb18030uni.h new file mode 100755 index 0000000..c61ae89 --- /dev/null +++ b/jni/parted/libiconv/lib/gb18030uni.h @@ -0,0 +1,256 @@ +/* + * Copyright (C) 1999-2001, 2005, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GB18030 four-byte extension + */ + +static const unsigned short gb18030uni_charset2uni_ranges[412] = { + 0x0000, 0x0023, 0x0024, 0x0025, 0x0026, 0x002c, 0x002d, 0x0031, + 0x0032, 0x0050, 0x0051, 0x0058, 0x0059, 0x005e, 0x005f, 0x005f, + 0x0060, 0x0063, 0x0064, 0x0066, 0x0067, 0x0067, 0x0068, 0x0068, + 0x0069, 0x006c, 0x006d, 0x007d, 0x007e, 0x0084, 0x0085, 0x0093, + 0x0094, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b2, 0x00b3, 0x00cf, + 0x00d0, 0x0131, 0x0132, 0x0132, 0x0133, 0x0133, 0x0134, 0x0134, + 0x0135, 0x0135, 0x0136, 0x0136, 0x0137, 0x0137, 0x0138, 0x0138, + 0x0139, 0x0154, 0x0155, 0x01ab, 0x01ac, 0x01ba, 0x01bb, 0x021f, + 0x0220, 0x0220, 0x0221, 0x022d, 0x022e, 0x02e4, 0x02e5, 0x02e5, + 0x02e6, 0x02ec, 0x02ed, 0x02ed, 0x02ee, 0x0324, 0x0325, 0x0332, + 0x0333, 0x0333, 0x0334, 0x1ef1, 0x1ef2, 0x1ef3, 0x1ef4, 0x1ef4, + 0x1ef5, 0x1ef6, 0x1ef7, 0x1efd, 0x1efe, 0x1f06, 0x1f07, 0x1f07, + 0x1f08, 0x1f08, 0x1f09, 0x1f0d, 0x1f0e, 0x1f7d, 0x1f7e, 0x1fd3, + 0x1fd4, 0x1fd4, 0x1fd5, 0x1fd7, 0x1fd8, 0x1fe3, 0x1fe4, 0x1fed, + 0x1fee, 0x202b, 0x202c, 0x202f, 0x2030, 0x2045, 0x2046, 0x2047, + 0x2048, 0x20b5, 0x20b6, 0x20bb, 0x20bc, 0x20bc, 0x20bd, 0x20bf, + 0x20c0, 0x20c3, 0x20c4, 0x20c5, 0x20c6, 0x20c7, 0x20c8, 0x20c8, + 0x20c9, 0x20c9, 0x20ca, 0x20cb, 0x20cc, 0x20d0, 0x20d1, 0x20d5, + 0x20d6, 0x20df, 0x20e0, 0x20e2, 0x20e3, 0x20e7, 0x20e8, 0x20f4, + 0x20f5, 0x20f6, 0x20f7, 0x20fc, 0x20fd, 0x2121, 0x2122, 0x2124, + 0x2125, 0x212f, 0x2130, 0x2148, 0x2149, 0x219a, 0x219b, 0x22e7, + 0x22e8, 0x22f1, 0x22f2, 0x2355, 0x2356, 0x2359, 0x235a, 0x2366, + 0x2367, 0x2369, 0x236a, 0x2373, 0x2374, 0x2383, 0x2384, 0x238b, + 0x238c, 0x2393, 0x2394, 0x2396, 0x2397, 0x2398, 0x2399, 0x23aa, + 0x23ab, 0x23c9, 0x23ca, 0x23cb, 0x23cc, 0x2401, 0x2402, 0x2402, + 0x2403, 0x2c40, 0x2c41, 0x2c42, 0x2c43, 0x2c45, 0x2c46, 0x2c47, + 0x2c48, 0x2c51, 0x2c52, 0x2c60, 0x2c61, 0x2c62, 0x2c63, 0x2c65, + 0x2c66, 0x2c69, 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6e, 0x2c6f, 0x2c7c, + 0x2c7d, 0x2da1, 0x2da2, 0x2da5, 0x2da6, 0x2da6, 0x2da7, 0x2dab, + 0x2dac, 0x2dad, 0x2dae, 0x2dc1, 0x2dc2, 0x2dc3, 0x2dc4, 0x2dca, + 0x2dcb, 0x2dcc, 0x2dcd, 0x2dd1, 0x2dd2, 0x2dd7, 0x2dd8, 0x2ecd, + 0x2ece, 0x2ed4, 0x2ed5, 0x2f45, 0x2f46, 0x302f, 0x3030, 0x303b, + 0x303c, 0x303d, 0x303e, 0x305f, 0x3060, 0x3068, 0x3069, 0x306a, + 0x306b, 0x306c, 0x306d, 0x30dd, 0x30de, 0x3108, 0x3109, 0x3232, + 0x3233, 0x32a1, 0x32a2, 0x32ac, 0x32ad, 0x35a9, 0x35aa, 0x35fe, + 0x35ff, 0x365e, 0x365f, 0x366c, 0x366d, 0x36ff, 0x3700, 0x37d9, + 0x37da, 0x38f8, 0x38f9, 0x3969, 0x396a, 0x3cde, 0x3cdf, 0x3de6, + 0x3de7, 0x3fbd, 0x3fbe, 0x4031, 0x4032, 0x4035, 0x4036, 0x4060, + 0x4061, 0x4158, 0x4159, 0x42cd, 0x42ce, 0x42e1, 0x42e2, 0x43a2, + 0x43a3, 0x43a7, 0x43a8, 0x43f9, 0x43fa, 0x4409, 0x440a, 0x45c2, + 0x45c3, 0x45f4, 0x45f5, 0x45f6, 0x45f7, 0x45fa, 0x45fb, 0x45fb, + 0x45fc, 0x460f, 0x4610, 0x4612, 0x4613, 0x4628, 0x4629, 0x48e7, + 0x48e8, 0x490e, 0x490f, 0x497d, 0x497e, 0x4a11, 0x4a12, 0x4a62, + 0x4a63, 0x82bc, + 0x82bd, 0x82bd, 0x82be, 0x82be, 0x82bf, 0x82cb, + 0x82cc, 0x82cc, 0x82cd, 0x82d1, 0x82d2, 0x82d8, 0x82d9, 0x82dc, + 0x82dd, 0x82e0, 0x82e1, 0x82e8, 0x82e9, 0x82ef, 0x82f0, 0x82ff, + 0x8300, 0x830d, + 0x830e, 0x93d4, 0x93d5, 0x9420, 0x9421, 0x943b, + 0x943c, 0x948c, 0x948d, 0x9495, 0x9496, 0x94af, 0x94b0, 0x94b0, + 0x94b1, 0x94b1, 0x94b2, 0x94b4, 0x94b5, 0x94ba, 0x94bb, 0x94bb, + 0x94bc, 0x94bd, 0x94be, 0x98c3, 0x98c4, 0x98c4, 0x98c5, 0x98c8, + 0x98c9, 0x98c9, 0x98ca, 0x98ca, 0x98cb, 0x98cb, 0x98cc, 0x9960, + 0x9961, 0x99e1, 0x99e2, 0x99fb +}; + +static const unsigned short gb18030uni_uni2charset_ranges[412] = { + 0x0080, 0x00a3, 0x00a5, 0x00a6, 0x00a9, 0x00af, 0x00b2, 0x00b6, + 0x00b8, 0x00d6, 0x00d8, 0x00df, 0x00e2, 0x00e7, 0x00eb, 0x00eb, + 0x00ee, 0x00f1, 0x00f4, 0x00f6, 0x00f8, 0x00f8, 0x00fb, 0x00fb, + 0x00fd, 0x0100, 0x0102, 0x0112, 0x0114, 0x011a, 0x011c, 0x012a, + 0x012c, 0x0143, 0x0145, 0x0147, 0x0149, 0x014c, 0x014e, 0x016a, + 0x016c, 0x01cd, 0x01cf, 0x01cf, 0x01d1, 0x01d1, 0x01d3, 0x01d3, + 0x01d5, 0x01d5, 0x01d7, 0x01d7, 0x01d9, 0x01d9, 0x01db, 0x01db, + 0x01dd, 0x01f8, 0x01fa, 0x0250, 0x0252, 0x0260, 0x0262, 0x02c6, + 0x02c8, 0x02c8, 0x02cc, 0x02d8, 0x02da, 0x0390, 0x03a2, 0x03a2, + 0x03aa, 0x03b0, 0x03c2, 0x03c2, 0x03ca, 0x0400, 0x0402, 0x040f, + 0x0450, 0x0450, 0x0452, 0x200f, 0x2011, 0x2012, 0x2017, 0x2017, + 0x201a, 0x201b, 0x201e, 0x2024, 0x2027, 0x202f, 0x2031, 0x2031, + 0x2034, 0x2034, 0x2036, 0x203a, 0x203c, 0x20ab, 0x20ad, 0x2102, + 0x2104, 0x2104, 0x2106, 0x2108, 0x210a, 0x2115, 0x2117, 0x2120, + 0x2122, 0x215f, 0x216c, 0x216f, 0x217a, 0x218f, 0x2194, 0x2195, + 0x219a, 0x2207, 0x2209, 0x220e, 0x2210, 0x2210, 0x2212, 0x2214, + 0x2216, 0x2219, 0x221b, 0x221c, 0x2221, 0x2222, 0x2224, 0x2224, + 0x2226, 0x2226, 0x222c, 0x222d, 0x222f, 0x2233, 0x2238, 0x223c, + 0x223e, 0x2247, 0x2249, 0x224b, 0x224d, 0x2251, 0x2253, 0x225f, + 0x2262, 0x2263, 0x2268, 0x226d, 0x2270, 0x2294, 0x2296, 0x2298, + 0x229a, 0x22a4, 0x22a6, 0x22be, 0x22c0, 0x2311, 0x2313, 0x245f, + 0x246a, 0x2473, 0x249c, 0x24ff, 0x254c, 0x254f, 0x2574, 0x2580, + 0x2590, 0x2592, 0x2596, 0x259f, 0x25a2, 0x25b1, 0x25b4, 0x25bb, + 0x25be, 0x25c5, 0x25c8, 0x25ca, 0x25cc, 0x25cd, 0x25d0, 0x25e1, + 0x25e6, 0x2604, 0x2607, 0x2608, 0x260a, 0x263f, 0x2641, 0x2641, + 0x2643, 0x2e80, 0x2e82, 0x2e83, 0x2e85, 0x2e87, 0x2e89, 0x2e8a, + 0x2e8d, 0x2e96, 0x2e98, 0x2ea6, 0x2ea8, 0x2ea9, 0x2eab, 0x2ead, + 0x2eaf, 0x2eb2, 0x2eb4, 0x2eb5, 0x2eb8, 0x2eba, 0x2ebc, 0x2ec9, + 0x2ecb, 0x2fef, 0x2ffc, 0x2fff, 0x3004, 0x3004, 0x3018, 0x301c, + 0x301f, 0x3020, 0x302a, 0x303d, 0x303f, 0x3040, 0x3094, 0x309a, + 0x309f, 0x30a0, 0x30f7, 0x30fb, 0x30ff, 0x3104, 0x312a, 0x321f, + 0x322a, 0x3230, 0x3232, 0x32a2, 0x32a4, 0x338d, 0x3390, 0x339b, + 0x339f, 0x33a0, 0x33a2, 0x33c3, 0x33c5, 0x33cd, 0x33cf, 0x33d0, + 0x33d3, 0x33d4, 0x33d6, 0x3446, 0x3448, 0x3472, 0x3474, 0x359d, + 0x359f, 0x360d, 0x360f, 0x3619, 0x361b, 0x3917, 0x3919, 0x396d, + 0x396f, 0x39ce, 0x39d1, 0x39de, 0x39e0, 0x3a72, 0x3a74, 0x3b4d, + 0x3b4f, 0x3c6d, 0x3c6f, 0x3cdf, 0x3ce1, 0x4055, 0x4057, 0x415e, + 0x4160, 0x4336, 0x4338, 0x43ab, 0x43ad, 0x43b0, 0x43b2, 0x43dc, + 0x43de, 0x44d5, 0x44d7, 0x464b, 0x464d, 0x4660, 0x4662, 0x4722, + 0x4724, 0x4728, 0x472a, 0x477b, 0x477d, 0x478c, 0x478e, 0x4946, + 0x4948, 0x4979, 0x497b, 0x497c, 0x497e, 0x4981, 0x4984, 0x4984, + 0x4987, 0x499a, 0x499c, 0x499e, 0x49a0, 0x49b5, 0x49b8, 0x4c76, + 0x4c78, 0x4c9e, 0x4ca4, 0x4d12, 0x4d1a, 0x4dad, 0x4daf, 0x4dff, + 0x9fa6, 0xd7ff, + 0xe76c, 0xe76c, 0xe7c8, 0xe7c8, 0xe7e7, 0xe7f3, + 0xe815, 0xe815, 0xe819, 0xe81d, 0xe81f, 0xe825, 0xe827, 0xe82a, + 0xe82d, 0xe830, 0xe833, 0xe83a, 0xe83c, 0xe842, 0xe844, 0xe853, + 0xe856, 0xe863, + 0xe865, 0xf92b, 0xf92d, 0xf978, 0xf97a, 0xf994, + 0xf996, 0xf9e6, 0xf9e8, 0xf9f0, 0xf9f2, 0xfa0b, 0xfa10, 0xfa10, + 0xfa12, 0xfa12, 0xfa15, 0xfa17, 0xfa19, 0xfa1e, 0xfa22, 0xfa22, + 0xfa25, 0xfa26, 0xfa2a, 0xfe2f, 0xfe32, 0xfe32, 0xfe45, 0xfe48, + 0xfe53, 0xfe53, 0xfe58, 0xfe58, 0xfe67, 0xfe67, 0xfe6c, 0xff00, + 0xff5f, 0xffdf, 0xffe6, 0xffff +}; + +static const unsigned short gb18030uni_ranges[206] = { + 128, 129, 131, 133, 134, 135, 137, 140, + 142, 144, 145, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, + 168, 171, 172, 189, 196, 213, 220, 221, + 285, 286, 287, 291, 293, 295, 297, 298, + 300, 301, 302, 303, 304, 305, 306, 307, + 308, 320, 330, 334, 338, 339, 340, 341, + 342, 343, 347, 348, 349, 354, 355, 359, + 360, 361, 362, 363, 365, 369, 371, 372, + 373, 374, 375, 376, 386, 426, 502, 538, + 553, 556, 558, 560, 562, 564, 565, 567, + 571, 573, 574, 575, 576, 577, 578, 579, + 581, 582, 583, 584, 585, 586, 588, 589, + 590, 602, 606, 625, 627, 636, 637, 720, + 724, 810, 813, 850, 860, 861, 862, 864, + 867, 868, 869, 870, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 905, 907, 908, 909, 911, + 912, 917, 924, 925, 21827, + 25775, 25866, 25896, + 25929, 25932, 25933, 25934, 25936, 25938, 25939, 25940, + 25942, + 25943, 25944, 25945, 25946, 25947, 25948, 25952, + 25953, 25955, 25956, 25959, 25961, 25964, 25966, 25984, + 25994, 25998, 26012, 26016, 26110, 26116 +}; + +static int +gb18030uni_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if (c1 >= 0x81 && c1 <= 0x84) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x30 && c2 <= 0x39) { + if (n >= 3) { + unsigned char c3 = s[2]; + if (c3 >= 0x81 && c3 <= 0xfe) { + if (n >= 4) { + unsigned char c4 = s[3]; + if (c4 >= 0x30 && c4 <= 0x39) { + unsigned int i = (((c1 - 0x81) * 10 + (c2 - 0x30)) * 126 + (c3 - 0x81)) * 10 + (c4 - 0x30); + if (i >= 0 && i <= 39419) { + if (i == 7457) { + *pwc = 0xe7c7; + } else { + unsigned int k1 = 0; + unsigned int k2 = 205; + while (k1 < k2) { + unsigned int k = (k1 + k2) / 2; + if (i <= gb18030uni_charset2uni_ranges[2*k+1]) + k2 = k; + else if (i >= gb18030uni_charset2uni_ranges[2*k+2]) + k1 = k + 1; + else + return RET_ILSEQ; + } + { + unsigned int diff = gb18030uni_ranges[k1]; + *pwc = (ucs4_t) (i + diff); + } + } + return 4; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static int +gb18030uni_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 4) { + unsigned int i = wc; + if (i >= 0x0080 && i <= 0xffff) { + if (i == 0xe7c7) { + i = 7457; + } else { + unsigned int k1 = 0; + unsigned int k2 = 205; + while (k1 < k2) { + unsigned int k = (k1 + k2) / 2; + if (i <= gb18030uni_uni2charset_ranges[2*k+1]) + k2 = k; + else if (i >= gb18030uni_uni2charset_ranges[2*k+2]) + k1 = k + 1; + else + return RET_ILUNI; + } + { + unsigned int diff = gb18030uni_ranges[k1]; + i -= diff; + } + } + r[3] = (i % 10) + 0x30; i = i / 10; + r[2] = (i % 126) + 0x81; i = i / 126; + r[1] = (i % 10) + 0x30; i = i / 10; + r[0] = i + 0x81; + return 4; + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/gb2312.h b/jni/parted/libiconv/lib/gb2312.h new file mode 100755 index 0000000..fb0621a --- /dev/null +++ b/jni/parted/libiconv/lib/gb2312.h @@ -0,0 +1,2570 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GB2312.1980-0 + */ + +static const unsigned short gb2312_2uni_page21[831] = { + /* 0x21 */ + 0x3000, 0x3001, 0x3002, 0x30fb, 0x02c9, 0x02c7, 0x00a8, 0x3003, + 0x3005, 0x2015, 0xff5e, 0x2016, 0x2026, 0x2018, 0x2019, 0x201c, + 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, + 0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, 0x00b1, + 0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, 0x222a, + 0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, 0x2312, + 0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, 0x221d, + 0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, 0x2234, + 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, 0x00a4, + 0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, 0x25cb, + 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, + 0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, + /* 0x22 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f, + 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, + 0x2498, 0x2499, 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, 0x2477, + 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, + 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, + 0x2468, 0x2469, 0xfffd, 0xfffd, 0x3220, 0x3221, 0x3222, 0x3223, + 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0xfffd, 0xfffd, + 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, + 0x2168, 0x2169, 0x216a, 0x216b, 0xfffd, 0xfffd, + /* 0x23 */ + 0xff01, 0xff02, 0xff03, 0xffe5, 0xff05, 0xff06, 0xff07, 0xff08, + 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10, + 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, + 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20, + 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, + 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, + 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, + 0xff39, 0xff3a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40, + 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, + 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, + 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, + 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3, + /* 0x24 */ + 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, + 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, + 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, + 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, + 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, + 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, + 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, + 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, + 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, + 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, + 0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x25 */ + 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, + 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, + 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, + 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, + 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, + 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, + 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, + 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, + 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, + 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, + 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x26 */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, + 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, + 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, + 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, + 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x27 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 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, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, + 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, + 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, + 0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x28 */ + 0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9, 0x011b, 0x00e8, + 0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2, + 0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc, + 0x00fc, 0x00ea, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3105, 0x3106, 0x3107, 0x3108, + 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110, + 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, + 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120, + 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, + 0x3129, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x29 */ + 0xfffd, 0xfffd, 0xfffd, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504, + 0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, 0x250c, + 0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514, + 0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, 0x251c, + 0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, 0x2524, + 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, + 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, + 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, + 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, + 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, +}; +static const unsigned short gb2312_2uni_page30[6768] = { + /* 0x30 */ + 0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509, 0x54c0, 0x7691, + 0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231, 0x9698, 0x978d, + 0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8, 0x80fa, 0x6848, + 0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac, 0x7ff1, 0x8884, + 0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c, 0x6252, 0x53ed, + 0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4, 0x8dcb, 0x9776, + 0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238, 0x767d, 0x67cf, + 0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17, 0x6591, 0x73ed, + 0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248, 0x626e, 0x62cc, + 0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6, 0x5e2e, 0x6886, + 0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c, 0x9551, 0x508d, + 0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265, + /* 0x31 */ + 0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, 0x62a5, + 0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, 0x5351, + 0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, 0x5907, + 0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, 0x5d29, + 0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, 0x6bd4, + 0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, 0x6bd9, + 0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, 0x5fc5, + 0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, 0x7f16, + 0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, 0x8fab, + 0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, 0x522b, + 0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, 0x5175, + 0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3, + /* 0x32 */ + 0x75c5, 0x5e76, 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, 0x6ce2, + 0x535a, 0x52c3, 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, 0x8236, + 0x8116, 0x818a, 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, 0x54fa, + 0x8865, 0x57e0, 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, 0x6016, + 0x64e6, 0x731c, 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, 0x8e29, + 0x91c7, 0x5f69, 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, 0x6b8b, + 0x60ed, 0x60e8, 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, 0x85cf, + 0x64cd, 0x7cd9, 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, 0x4fa7, + 0x518c, 0x6d4b, 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, 0x8336, + 0x67e5, 0x78b4, 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, 0x62c6, + 0x67f4, 0x8c7a, 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, 0x7f20, + 0x94f2, 0x4ea7, 0x9610, 0x98a4, 0x660c, 0x7316, + /* 0x33 */ + 0x573a, 0x5c1d, 0x5e38, 0x957f, 0x507f, 0x80a0, 0x5382, 0x655e, + 0x7545, 0x5531, 0x5021, 0x8d85, 0x6284, 0x949e, 0x671d, 0x5632, + 0x6f6e, 0x5de2, 0x5435, 0x7092, 0x8f66, 0x626f, 0x64a4, 0x63a3, + 0x5f7b, 0x6f88, 0x90f4, 0x81e3, 0x8fb0, 0x5c18, 0x6668, 0x5ff1, + 0x6c89, 0x9648, 0x8d81, 0x886c, 0x6491, 0x79f0, 0x57ce, 0x6a59, + 0x6210, 0x5448, 0x4e58, 0x7a0b, 0x60e9, 0x6f84, 0x8bda, 0x627f, + 0x901e, 0x9a8b, 0x79e4, 0x5403, 0x75f4, 0x6301, 0x5319, 0x6c60, + 0x8fdf, 0x5f1b, 0x9a70, 0x803b, 0x9f7f, 0x4f88, 0x5c3a, 0x8d64, + 0x7fc5, 0x65a5, 0x70bd, 0x5145, 0x51b2, 0x866b, 0x5d07, 0x5ba0, + 0x62bd, 0x916c, 0x7574, 0x8e0c, 0x7a20, 0x6101, 0x7b79, 0x4ec7, + 0x7ef8, 0x7785, 0x4e11, 0x81ed, 0x521d, 0x51fa, 0x6a71, 0x53a8, + 0x8e87, 0x9504, 0x96cf, 0x6ec1, 0x9664, 0x695a, + /* 0x34 */ + 0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904, 0x63e3, 0x5ddd, + 0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32, 0x75ae, 0x7a97, + 0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a, 0x6376, 0x9524, + 0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3, 0x7eaf, 0x8822, + 0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc, 0x8f9e, 0x6148, + 0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21, 0x806a, 0x8471, + 0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97, 0x918b, 0x7c07, + 0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14, 0x50ac, 0x8106, + 0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58, 0x5bf8, 0x78cb, + 0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d, 0x8fbe, 0x7b54, + 0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3, 0x6234, 0x5e26, + 0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e, + /* 0x35 */ + 0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, 0x80c6, + 0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, 0x86cb, + 0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, 0x8e48, + 0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, 0x9053, + 0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, 0x7b49, + 0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, 0x654c, + 0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, 0x5730, + 0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, 0x6382, + 0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, 0x4f43, + 0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, 0x53fc, + 0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, 0x8dcc, + 0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0, + /* 0x36 */ + 0x4e01, 0x76ef, 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, 0x5b9a, + 0x8ba2, 0x4e22, 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, 0x680b, + 0x4f97, 0x606b, 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, 0x9661, + 0x8c46, 0x9017, 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, 0x72ec, + 0x8bfb, 0x5835, 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, 0x5ea6, + 0x6e21, 0x5992, 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, 0x7f0e, + 0x5806, 0x5151, 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, 0x6566, + 0x987f, 0x56e4, 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, 0x591a, + 0x593a, 0x579b, 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, 0x60f0, + 0x5815, 0x86fe, 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, 0x5a25, + 0x6076, 0x5384, 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, 0x800c, + 0x513f, 0x8033, 0x5c14, 0x9975, 0x6d31, 0x4e8c, + /* 0x37 */ + 0x8d30, 0x53d1, 0x7f5a, 0x7b4f, 0x4f10, 0x4e4f, 0x9600, 0x6cd5, + 0x73d0, 0x85e9, 0x5e06, 0x756a, 0x7ffb, 0x6a0a, 0x77fe, 0x9492, + 0x7e41, 0x51e1, 0x70e6, 0x53cd, 0x8fd4, 0x8303, 0x8d29, 0x72af, + 0x996d, 0x6cdb, 0x574a, 0x82b3, 0x65b9, 0x80aa, 0x623f, 0x9632, + 0x59a8, 0x4eff, 0x8bbf, 0x7eba, 0x653e, 0x83f2, 0x975e, 0x5561, + 0x98de, 0x80a5, 0x532a, 0x8bfd, 0x5420, 0x80ba, 0x5e9f, 0x6cb8, + 0x8d39, 0x82ac, 0x915a, 0x5429, 0x6c1b, 0x5206, 0x7eb7, 0x575f, + 0x711a, 0x6c7e, 0x7c89, 0x594b, 0x4efd, 0x5fff, 0x6124, 0x7caa, + 0x4e30, 0x5c01, 0x67ab, 0x8702, 0x5cf0, 0x950b, 0x98ce, 0x75af, + 0x70fd, 0x9022, 0x51af, 0x7f1d, 0x8bbd, 0x5949, 0x51e4, 0x4f5b, + 0x5426, 0x592b, 0x6577, 0x80a4, 0x5b75, 0x6276, 0x62c2, 0x8f90, + 0x5e45, 0x6c1f, 0x7b26, 0x4f0f, 0x4fd8, 0x670d, + /* 0x38 */ + 0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b, 0x629a, 0x8f85, + 0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c, 0x8150, 0x8d74, + 0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8, 0x961c, 0x7236, + 0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987, 0x7f1a, 0x5490, + 0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499, 0x76d6, 0x6e89, + 0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d, 0x8d76, 0x611f, + 0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2, 0x7f38, 0x809b, + 0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b, 0x9ad8, 0x818f, + 0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a, 0x54e5, 0x6b4c, + 0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272, 0x9769, 0x845b, + 0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a, 0x5404, 0x7ed9, + 0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9, + /* 0x39 */ + 0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, 0x9f9a, + 0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, 0x62f1, + 0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, 0x57a2, + 0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, 0x4f30, + 0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, 0x8c37, + 0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, 0x5250, + 0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, 0x5173, + 0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, 0x704c, + 0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, 0x7845, + 0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, 0x6842, + 0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, 0x9505, + 0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8, + /* 0x3a */ + 0x9ab8, 0x5b69, 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, 0x9163, + 0x61a8, 0x90af, 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, 0x558a, + 0x7f55, 0x7ff0, 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, 0x710a, + 0x6c57, 0x6c49, 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, 0x8c6a, + 0x6beb, 0x90dd, 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, 0x559d, + 0x8377, 0x83cf, 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, 0x76d2, + 0x8c89, 0x9602, 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, 0x8d3a, + 0x563f, 0x9ed1, 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, 0x4ea8, + 0x6a2a, 0x8861, 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, 0x9e3f, + 0x6d2a, 0x5b8f, 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, 0x543c, + 0x539a, 0x5019, 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, 0x58f6, + 0x846b, 0x80e1, 0x8774, 0x72d0, 0x7cca, 0x6e56, + /* 0x3b */ + 0x5f27, 0x864e, 0x552c, 0x62a4, 0x4e92, 0x6caa, 0x6237, 0x82b1, + 0x54d7, 0x534e, 0x733e, 0x6ed1, 0x753b, 0x5212, 0x5316, 0x8bdd, + 0x69d0, 0x5f8a, 0x6000, 0x6dee, 0x574f, 0x6b22, 0x73af, 0x6853, + 0x8fd8, 0x7f13, 0x6362, 0x60a3, 0x5524, 0x75ea, 0x8c62, 0x7115, + 0x6da3, 0x5ba6, 0x5e7b, 0x8352, 0x614c, 0x9ec4, 0x78fa, 0x8757, + 0x7c27, 0x7687, 0x51f0, 0x60f6, 0x714c, 0x6643, 0x5e4c, 0x604d, + 0x8c0e, 0x7070, 0x6325, 0x8f89, 0x5fbd, 0x6062, 0x86d4, 0x56de, + 0x6bc1, 0x6094, 0x6167, 0x5349, 0x60e0, 0x6666, 0x8d3f, 0x79fd, + 0x4f1a, 0x70e9, 0x6c47, 0x8bb3, 0x8bf2, 0x7ed8, 0x8364, 0x660f, + 0x5a5a, 0x9b42, 0x6d51, 0x6df7, 0x8c41, 0x6d3b, 0x4f19, 0x706b, + 0x83b7, 0x6216, 0x60d1, 0x970d, 0x8d27, 0x7978, 0x51fb, 0x573e, + 0x57fa, 0x673a, 0x7578, 0x7a3d, 0x79ef, 0x7b95, + /* 0x3c */ + 0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21, 0x59ec, 0x7ee9, + 0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d, 0x96c6, 0x53ca, + 0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7, 0x6324, 0x51e0, + 0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63, 0x4f0e, 0x796d, + 0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1, 0x8bb0, 0x65e2, + 0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609, 0x67b7, 0x5939, + 0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e, 0x7532, 0x94be, + 0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1, 0x6b7c, 0x76d1, + 0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c, 0x80a9, 0x8270, + 0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1, 0x7877, 0x62e3, + 0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350, 0x69db, 0x9274, + 0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6, + /* 0x3d */ + 0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, 0x5efa, + 0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, 0x6868, + 0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, 0x7901, + 0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, 0x56bc, + 0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, 0x997a, + 0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, 0x53eb, + 0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, 0x622a, + 0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, 0x6d01, + 0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, 0x501f, + 0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, 0x91d1, + 0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, 0x8fdb, + 0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78, + /* 0x3e */ + 0x5c3d, 0x52b2, 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, 0x9cb8, + 0x4eac, 0x60ca, 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, 0x666f, + 0x9888, 0x9759, 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, 0x9756, + 0x7adf, 0x7ade, 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, 0x7ea0, + 0x7396, 0x97ed, 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, 0x6551, + 0x65e7, 0x81fc, 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, 0x62d8, + 0x72d9, 0x75bd, 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, 0x77e9, + 0x4e3e, 0x6cae, 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, 0x8ddd, + 0x8e1e, 0x952f, 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, 0x6350, + 0x9e43, 0x5a1f, 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, 0x652b, + 0x6289, 0x6398, 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, 0x7edd, + 0x5747, 0x83cc, 0x94a7, 0x519b, 0x541b, 0x5cfb, + /* 0x3f */ + 0x4fca, 0x7ae3, 0x6d5a, 0x90e1, 0x9a8f, 0x5580, 0x5496, 0x5361, + 0x54af, 0x5f00, 0x63e9, 0x6977, 0x51ef, 0x6168, 0x520a, 0x582a, + 0x52d8, 0x574e, 0x780d, 0x770b, 0x5eb7, 0x6177, 0x7ce0, 0x625b, + 0x6297, 0x4ea2, 0x7095, 0x8003, 0x62f7, 0x70e4, 0x9760, 0x5777, + 0x82db, 0x67ef, 0x68f5, 0x78d5, 0x9897, 0x79d1, 0x58f3, 0x54b3, + 0x53ef, 0x6e34, 0x514b, 0x523b, 0x5ba2, 0x8bfe, 0x80af, 0x5543, + 0x57a6, 0x6073, 0x5751, 0x542d, 0x7a7a, 0x6050, 0x5b54, 0x63a7, + 0x62a0, 0x53e3, 0x6263, 0x5bc7, 0x67af, 0x54ed, 0x7a9f, 0x82e6, + 0x9177, 0x5e93, 0x88e4, 0x5938, 0x57ae, 0x630e, 0x8de8, 0x80ef, + 0x5757, 0x7b77, 0x4fa9, 0x5feb, 0x5bbd, 0x6b3e, 0x5321, 0x7b50, + 0x72c2, 0x6846, 0x77ff, 0x7736, 0x65f7, 0x51b5, 0x4e8f, 0x76d4, + 0x5cbf, 0x7aa5, 0x8475, 0x594e, 0x9b41, 0x5080, + /* 0x40 */ + 0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346, 0x56f0, 0x62ec, + 0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587, 0x8721, 0x814a, + 0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd, 0x5a6a, 0x680f, + 0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30, 0x63fd, 0x89c8, + 0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994, 0x72fc, 0x5eca, + 0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262, 0x8001, 0x4f6c, + 0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50, 0x96f7, 0x956d, + 0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2, 0x808b, 0x7c7b, + 0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8, 0x7281, 0x9ece, + 0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e, 0x91cc, 0x9ca4, + 0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d, 0x5389, 0x52b1, + 0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0, + /* 0x41 */ + 0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, 0x54e9, + 0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, 0x6d9f, + 0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, 0x7cae, + 0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, 0x667e, + 0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, 0x5be5, + 0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, 0x5217, + 0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, 0x9716, + 0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, 0x62ce, + 0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, 0x51cc, + 0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, 0x7409, + 0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, 0x67f3, + 0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf, + /* 0x42 */ + 0x9686, 0x5784, 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, 0x7bd3, + 0x6f0f, 0x964b, 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, 0x63b3, + 0x5364, 0x864f, 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, 0x8d42, + 0x9e7f, 0x6f5e, 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, 0x5415, + 0x94dd, 0x4fa3, 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, 0x6c2f, + 0x5f8b, 0x7387, 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, 0x6ee6, + 0x5375, 0x4e71, 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, 0x4ed1, + 0x6ca6, 0x7eb6, 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, 0x9523, + 0x7ba9, 0x9aa1, 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, 0x5988, + 0x9ebb, 0x739b, 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, 0x5417, + 0x57cb, 0x4e70, 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, 0x9992, + 0x86ee, 0x6ee1, 0x8513, 0x66fc, 0x6162, 0x6f2b, + /* 0x43 */ + 0x8c29, 0x8292, 0x832b, 0x76f2, 0x6c13, 0x5fd9, 0x83bd, 0x732b, + 0x8305, 0x951a, 0x6bdb, 0x77db, 0x94c6, 0x536f, 0x8302, 0x5192, + 0x5e3d, 0x8c8c, 0x8d38, 0x4e48, 0x73ab, 0x679a, 0x6885, 0x9176, + 0x9709, 0x7164, 0x6ca1, 0x7709, 0x5a92, 0x9541, 0x6bcf, 0x7f8e, + 0x6627, 0x5bd0, 0x59b9, 0x5a9a, 0x95e8, 0x95f7, 0x4eec, 0x840c, + 0x8499, 0x6aac, 0x76df, 0x9530, 0x731b, 0x68a6, 0x5b5f, 0x772f, + 0x919a, 0x9761, 0x7cdc, 0x8ff7, 0x8c1c, 0x5f25, 0x7c73, 0x79d8, + 0x89c5, 0x6ccc, 0x871c, 0x5bc6, 0x5e42, 0x68c9, 0x7720, 0x7ef5, + 0x5195, 0x514d, 0x52c9, 0x5a29, 0x7f05, 0x9762, 0x82d7, 0x63cf, + 0x7784, 0x85d0, 0x79d2, 0x6e3a, 0x5e99, 0x5999, 0x8511, 0x706d, + 0x6c11, 0x62bf, 0x76bf, 0x654f, 0x60af, 0x95fd, 0x660e, 0x879f, + 0x9e23, 0x94ed, 0x540d, 0x547d, 0x8c2c, 0x6478, + /* 0x44 */ + 0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469, 0x9b54, 0x62b9, + 0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20, 0x5bde, 0x964c, + 0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9, 0x59c6, 0x6bcd, + 0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728, 0x76ee, 0x7766, + 0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0, 0x90a3, 0x5a1c, + 0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948, 0x5357, 0x7537, + 0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9, 0x6dd6, 0x5462, + 0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713, 0x502a, 0x6ce5, + 0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006, 0x6eba, 0x852b, + 0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5, 0x5a18, 0x917f, + 0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e, 0x954a, 0x954d, + 0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81, + /* 0x45 */ + 0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, 0x6d53, + 0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, 0x8650, + 0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, 0x9e25, + 0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, 0x722c, + 0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, 0x6e43, + 0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, 0x5224, + 0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, 0x5486, + 0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, 0x57f9, + 0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, 0x76c6, + 0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, 0x787c, + 0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, 0x7812, + 0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7, + /* 0x46 */ + 0x5564, 0x813e, 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, 0x5c41, + 0x8b6c, 0x7bc7, 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, 0x74e2, + 0x7968, 0x6487, 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, 0x8058, + 0x4e52, 0x576a, 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, 0x8bc4, + 0x5c4f, 0x5761, 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, 0x8feb, + 0x7c95, 0x5256, 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, 0x83e9, + 0x84b2, 0x57d4, 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, 0x66dd, + 0x7011, 0x671f, 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, 0x51c4, + 0x6f06, 0x67d2, 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, 0x7566, + 0x5d0e, 0x8110, 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, 0x8d77, + 0x5c82, 0x4e5e, 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, 0x6c14, + 0x8fc4, 0x5f03, 0x6c7d, 0x6ce3, 0x8bab, 0x6390, + /* 0x47 */ + 0x6070, 0x6d3d, 0x7275, 0x6266, 0x948e, 0x94c5, 0x5343, 0x8fc1, + 0x7b7e, 0x4edf, 0x8c26, 0x4e7e, 0x9ed4, 0x94b1, 0x94b3, 0x524d, + 0x6f5c, 0x9063, 0x6d45, 0x8c34, 0x5811, 0x5d4c, 0x6b20, 0x6b49, + 0x67aa, 0x545b, 0x8154, 0x7f8c, 0x5899, 0x8537, 0x5f3a, 0x62a2, + 0x6a47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77a7, 0x4e54, 0x4fa8, + 0x5de7, 0x9798, 0x64ac, 0x7fd8, 0x5ced, 0x4fcf, 0x7a8d, 0x5207, + 0x8304, 0x4e14, 0x602f, 0x7a83, 0x94a6, 0x4fb5, 0x4eb2, 0x79e6, + 0x7434, 0x52e4, 0x82b9, 0x64d2, 0x79bd, 0x5bdd, 0x6c81, 0x9752, + 0x8f7b, 0x6c22, 0x503e, 0x537f, 0x6e05, 0x64ce, 0x6674, 0x6c30, + 0x60c5, 0x9877, 0x8bf7, 0x5e86, 0x743c, 0x7a77, 0x79cb, 0x4e18, + 0x90b1, 0x7403, 0x6c42, 0x56da, 0x914b, 0x6cc5, 0x8d8b, 0x533a, + 0x86c6, 0x66f2, 0x8eaf, 0x5c48, 0x9a71, 0x6e20, + /* 0x48 */ + 0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708, 0x98a7, 0x6743, + 0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac, 0x5238, 0x529d, + 0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7, 0x786e, 0x96c0, + 0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3, 0x74e4, 0x58e4, + 0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5, 0x60f9, 0x70ed, + 0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb, 0x8ba4, 0x5203, + 0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e, 0x8338, 0x84c9, + 0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2, 0x5197, 0x63c9, + 0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a, 0x5982, 0x8fb1, + 0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e, 0x854a, 0x745e, + 0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492, 0x6d12, 0x8428, + 0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1, + /* 0x49 */ + 0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, 0x626b, + 0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, 0x7802, + 0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, 0x7b5b, + 0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, 0x886b, + 0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, 0x6247, + 0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, 0x5c1a, + 0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, 0x97f6, + 0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, 0x820c, + 0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, 0x8bbe, + 0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, 0x7ec5, + 0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, 0x6e17, + 0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3, + /* 0x4a */ + 0x7701, 0x76db, 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, 0x72ee, + 0x65bd, 0x6e7f, 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, 0x62fe, + 0x65f6, 0x4ec0, 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, 0x77e2, + 0x4f7f, 0x5c4e, 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, 0x4e16, + 0x67ff, 0x4e8b, 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, 0x55dc, + 0x566c, 0x9002, 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, 0x5e02, + 0x6043, 0x5ba4, 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, 0x5b88, + 0x5bff, 0x6388, 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, 0x67a2, + 0x68b3, 0x6b8a, 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, 0x758f, + 0x4e66, 0x8d4e, 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, 0x7f72, + 0x8700, 0x9ecd, 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, 0x675f, + 0x620d, 0x7ad6, 0x5885, 0x5eb6, 0x6570, 0x6f31, + /* 0x4b */ + 0x6055, 0x5237, 0x800d, 0x6454, 0x8870, 0x7529, 0x5e05, 0x6813, + 0x62f4, 0x971c, 0x53cc, 0x723d, 0x8c01, 0x6c34, 0x7761, 0x7a0e, + 0x542e, 0x77ac, 0x987a, 0x821c, 0x8bf4, 0x7855, 0x6714, 0x70c1, + 0x65af, 0x6495, 0x5636, 0x601d, 0x79c1, 0x53f8, 0x4e1d, 0x6b7b, + 0x8086, 0x5bfa, 0x55e3, 0x56db, 0x4f3a, 0x4f3c, 0x9972, 0x5df3, + 0x677e, 0x8038, 0x6002, 0x9882, 0x9001, 0x5b8b, 0x8bbc, 0x8bf5, + 0x641c, 0x8258, 0x64de, 0x55fd, 0x82cf, 0x9165, 0x4fd7, 0x7d20, + 0x901f, 0x7c9f, 0x50f3, 0x5851, 0x6eaf, 0x5bbf, 0x8bc9, 0x8083, + 0x9178, 0x849c, 0x7b97, 0x867d, 0x968b, 0x968f, 0x7ee5, 0x9ad3, + 0x788e, 0x5c81, 0x7a57, 0x9042, 0x96a7, 0x795f, 0x5b59, 0x635f, + 0x7b0b, 0x84d1, 0x68ad, 0x5506, 0x7f29, 0x7410, 0x7d22, 0x9501, + 0x6240, 0x584c, 0x4ed6, 0x5b83, 0x5979, 0x5854, + /* 0x4c */ + 0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4, 0x62ac, 0x53f0, + 0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d, 0x644a, 0x8d2a, + 0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d, 0x8c2d, 0x8c08, + 0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9, 0x70ad, 0x6c64, + 0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510, 0x7cd6, 0x5018, + 0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b, 0x6ed4, 0x7ee6, + 0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8, 0x5957, 0x7279, + 0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254, 0x8e22, 0x9511, + 0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff, 0x568f, 0x60d5, + 0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b, 0x7530, 0x751c, + 0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2, 0x773a, 0x8df3, + 0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3, + /* 0x4d */ + 0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, 0x901a, + 0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, 0x6876, + 0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, 0x900f, + 0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, 0x5c60, + 0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, 0x817f, + 0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, 0x6258, + 0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, 0x62d3, + 0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, 0x889c, + 0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, 0x4e38, + 0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, 0x5b9b, + 0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, 0x7f51, + 0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01, + /* 0x4e */ + 0x5dcd, 0x5fae, 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, 0x552f, + 0x60df, 0x4e3a, 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, 0x4f1f, + 0x4f2a, 0x5c3e, 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, 0x80c3, + 0x5582, 0x9b4f, 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, 0x536b, + 0x761f, 0x6e29, 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, 0x7a33, + 0x7d0a, 0x95ee, 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, 0x6da1, + 0x7a9d, 0x6211, 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, 0x545c, + 0x94a8, 0x4e4c, 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, 0x68a7, + 0x543e, 0x5434, 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, 0x821e, + 0x4f0d, 0x4fae, 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, 0x52ff, + 0x52a1, 0x609f, 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, 0x7852, + 0x77fd, 0x6670, 0x563b, 0x5438, 0x9521, 0x727a, + /* 0x4f */ + 0x7a00, 0x606f, 0x5e0c, 0x6089, 0x819d, 0x5915, 0x60dc, 0x7184, + 0x70ef, 0x6eaa, 0x6c50, 0x7280, 0x6a84, 0x88ad, 0x5e2d, 0x4e60, + 0x5ab3, 0x559c, 0x94e3, 0x6d17, 0x7cfb, 0x9699, 0x620f, 0x7ec6, + 0x778e, 0x867e, 0x5323, 0x971e, 0x8f96, 0x6687, 0x5ce1, 0x4fa0, + 0x72ed, 0x4e0b, 0x53a6, 0x590f, 0x5413, 0x6380, 0x9528, 0x5148, + 0x4ed9, 0x9c9c, 0x7ea4, 0x54b8, 0x8d24, 0x8854, 0x8237, 0x95f2, + 0x6d8e, 0x5f26, 0x5acc, 0x663e, 0x9669, 0x73b0, 0x732e, 0x53bf, + 0x817a, 0x9985, 0x7fa1, 0x5baa, 0x9677, 0x9650, 0x7ebf, 0x76f8, + 0x53a2, 0x9576, 0x9999, 0x7bb1, 0x8944, 0x6e58, 0x4e61, 0x7fd4, + 0x7965, 0x8be6, 0x60f3, 0x54cd, 0x4eab, 0x9879, 0x5df7, 0x6a61, + 0x50cf, 0x5411, 0x8c61, 0x8427, 0x785d, 0x9704, 0x524a, 0x54ee, + 0x56a3, 0x9500, 0x6d88, 0x5bb5, 0x6dc6, 0x6653, + /* 0x50 */ + 0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11, 0x6548, 0x6954, + 0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f, 0x643a, 0x90aa, + 0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378, 0x87f9, 0x61c8, + 0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af, 0x950c, 0x6b23, + 0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845, 0x661f, 0x8165, + 0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62, 0x90a2, 0x884c, + 0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144, 0x51f6, 0x80f8, + 0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee, 0x7f9e, 0x673d, + 0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f, 0x620c, 0x9700, + 0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4, 0x9157, 0x53d9, + 0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f, 0x7eea, 0x7eed, + 0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384, + /* 0x51 */ + 0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, 0x7a74, + 0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, 0x5bfb, + 0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, 0x8fc5, + 0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, 0x7259, + 0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, 0x8bb6, + 0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, 0x7814, + 0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, 0x6cbf, + 0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, 0x71d5, + 0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, 0x8c1a, + 0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, 0x4f6f, + 0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, 0x517b, + 0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476, + /* 0x52 */ + 0x6447, 0x5c27, 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, 0x8200, + 0x836f, 0x8981, 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, 0x91ce, + 0x51b6, 0x4e5f, 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, 0x814b, + 0x591c, 0x6db2, 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, 0x4f9d, + 0x4f0a, 0x8863, 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, 0x80f0, + 0x7591, 0x6c82, 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, 0x501a, + 0x5df2, 0x4e59, 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, 0x9091, + 0x5c79, 0x4ebf, 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, 0x4ea6, + 0x88d4, 0x610f, 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, 0x8be3, + 0x8bae, 0x8c0a, 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, 0x8335, + 0x836b, 0x56e0, 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, 0x94f6, + 0x6deb, 0x5bc5, 0x996e, 0x5c39, 0x5f15, 0x9690, + /* 0x53 */ + 0x5370, 0x82f1, 0x6a31, 0x5a74, 0x9e70, 0x5e94, 0x7f28, 0x83b9, + 0x8424, 0x8425, 0x8367, 0x8747, 0x8fce, 0x8d62, 0x76c8, 0x5f71, + 0x9896, 0x786c, 0x6620, 0x54df, 0x62e5, 0x4f63, 0x81c3, 0x75c8, + 0x5eb8, 0x96cd, 0x8e0a, 0x86f9, 0x548f, 0x6cf3, 0x6d8c, 0x6c38, + 0x607f, 0x52c7, 0x7528, 0x5e7d, 0x4f18, 0x60a0, 0x5fe7, 0x5c24, + 0x7531, 0x90ae, 0x94c0, 0x72b9, 0x6cb9, 0x6e38, 0x9149, 0x6709, + 0x53cb, 0x53f3, 0x4f51, 0x91c9, 0x8bf1, 0x53c8, 0x5e7c, 0x8fc2, + 0x6de4, 0x4e8e, 0x76c2, 0x6986, 0x865e, 0x611a, 0x8206, 0x4f59, + 0x4fde, 0x903e, 0x9c7c, 0x6109, 0x6e1d, 0x6e14, 0x9685, 0x4e88, + 0x5a31, 0x96e8, 0x4e0e, 0x5c7f, 0x79b9, 0x5b87, 0x8bed, 0x7fbd, + 0x7389, 0x57df, 0x828b, 0x90c1, 0x5401, 0x9047, 0x55bb, 0x5cea, + 0x5fa1, 0x6108, 0x6b32, 0x72f1, 0x80b2, 0x8a89, + /* 0x54 */ + 0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d, 0x9e33, 0x6e0a, + 0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4, 0x8f95, 0x56ed, + 0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc, 0x82d1, 0x613f, + 0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3, 0x94a5, 0x5cb3, + 0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91, 0x90e7, 0x5300, + 0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655, 0x97f5, 0x5b55, + 0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e, 0x5bb0, 0x8f7d, + 0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e, 0x8d43, 0x810f, + 0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3, 0x65e9, 0x6fa1, + 0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076, 0x71e5, 0x8d23, + 0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e, 0x618e, 0x66fe, + 0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67, + /* 0x55 */ + 0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, 0x70b8, + 0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, 0x77bb, + 0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, 0x5d2d, + 0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, 0x7efd, + 0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, 0x6756, + 0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, 0x62db, + 0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, 0x8087, + 0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, 0x9517, + 0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, 0x7827, + 0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, 0x9707, + 0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, 0x72f0, + 0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f, + /* 0x56 */ + 0x5e27, 0x75c7, 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, 0x5431, + 0x8718, 0x77e5, 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, 0x804c, + 0x76f4, 0x690d, 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, 0x6307, + 0x6b62, 0x8dbe, 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, 0x63b7, + 0x81f3, 0x81f4, 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, 0x79e9, + 0x7a1a, 0x8d28, 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, 0x4e2d, + 0x76c5, 0x5fe0, 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, 0x91cd, + 0x4ef2, 0x4f17, 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, 0x7ca5, + 0x8f74, 0x8098, 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, 0x9aa4, + 0x73e0, 0x682a, 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, 0x9010, + 0x7af9, 0x70db, 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, 0x8457, + 0x67f1, 0x52a9, 0x86c0, 0x8d2e, 0x94f8, 0x7b51, + /* 0x57 */ + 0x4f4f, 0x6ce8, 0x795d, 0x9a7b, 0x6293, 0x722a, 0x62fd, 0x4e13, + 0x7816, 0x8f6c, 0x64b0, 0x8d5a, 0x7bc6, 0x6869, 0x5e84, 0x88c5, + 0x5986, 0x649e, 0x58ee, 0x72b6, 0x690e, 0x9525, 0x8ffd, 0x8d58, + 0x5760, 0x7f00, 0x8c06, 0x51c6, 0x6349, 0x62d9, 0x5353, 0x684c, + 0x7422, 0x8301, 0x914c, 0x5544, 0x7740, 0x707c, 0x6d4a, 0x5179, + 0x54a8, 0x8d44, 0x59ff, 0x6ecb, 0x6dc4, 0x5b5c, 0x7d2b, 0x4ed4, + 0x7c7d, 0x6ed3, 0x5b50, 0x81ea, 0x6e0d, 0x5b57, 0x9b03, 0x68d5, + 0x8e2a, 0x5b97, 0x7efc, 0x603b, 0x7eb5, 0x90b9, 0x8d70, 0x594f, + 0x63cd, 0x79df, 0x8db3, 0x5352, 0x65cf, 0x7956, 0x8bc5, 0x963b, + 0x7ec4, 0x94bb, 0x7e82, 0x5634, 0x9189, 0x6700, 0x7f6a, 0x5c0a, + 0x9075, 0x6628, 0x5de6, 0x4f50, 0x67de, 0x505a, 0x4f5c, 0x5750, + 0x5ea7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x58 */ + 0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345, 0x4e15, 0x4e98, + 0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba, 0x4e3f, 0x5315, + 0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df, 0x80e4, 0x9997, + 0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10, 0x4e5c, 0x4e69, + 0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4, 0x538d, 0x539d, + 0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a, 0x53f5, 0x5326, + 0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202, 0x5208, 0x520e, + 0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e, 0x5261, 0x525c, + 0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, 0x7f54, + 0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1, 0x4eeb, 0x4ede, + 0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25, 0x4f27, 0x4f09, + 0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d, + /* 0x59 */ + 0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, 0x4f89, + 0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, 0x4f94, + 0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, 0x4fd1, + 0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, 0x502e, + 0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, 0x5043, + 0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, 0x50a9, + 0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, 0x5107, + 0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, 0x6c46, + 0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, 0x52f9, + 0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, 0x5156, + 0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, 0x5b34, + 0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc, + /* 0x5a */ + 0x51c7, 0x5196, 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, 0x8baa, + 0x8bb4, 0x8bb5, 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, 0x8bce, + 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, 0x8bdf, + 0x8be0, 0x8be4, 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, 0x8bf6, + 0x8bf9, 0x8bfc, 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, 0x8c0c, + 0x8c0f, 0x8c11, 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, 0x8c1b, + 0x8c18, 0x8c1d, 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, 0x8c2a, + 0x8c2b, 0x8c2e, 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, 0x5369, + 0x537a, 0x961d, 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, 0x963c, + 0x9642, 0x9649, 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, 0x9674, + 0x9688, 0x968d, 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, 0x9099, + 0x90ac, 0x90a1, 0x90b4, 0x90b3, 0x90b6, 0x90ba, + /* 0x5b */ + 0x90b8, 0x90b0, 0x90cf, 0x90c5, 0x90be, 0x90d0, 0x90c4, 0x90c7, + 0x90d3, 0x90e6, 0x90e2, 0x90dc, 0x90d7, 0x90db, 0x90eb, 0x90ef, + 0x90fe, 0x9104, 0x9122, 0x911e, 0x9123, 0x9131, 0x912f, 0x9139, + 0x9143, 0x9146, 0x520d, 0x5942, 0x52a2, 0x52ac, 0x52ad, 0x52be, + 0x54ff, 0x52d0, 0x52d6, 0x52f0, 0x53df, 0x71ee, 0x77cd, 0x5ef4, + 0x51f5, 0x51fc, 0x9b2f, 0x53b6, 0x5f01, 0x755a, 0x5def, 0x574c, + 0x57a9, 0x57a1, 0x587e, 0x58bc, 0x58c5, 0x58d1, 0x5729, 0x572c, + 0x572a, 0x5733, 0x5739, 0x572e, 0x572f, 0x575c, 0x573b, 0x5742, + 0x5769, 0x5785, 0x576b, 0x5786, 0x577c, 0x577b, 0x5768, 0x576d, + 0x5776, 0x5773, 0x57ad, 0x57a4, 0x578c, 0x57b2, 0x57cf, 0x57a7, + 0x57b4, 0x5793, 0x57a0, 0x57d5, 0x57d8, 0x57da, 0x57d9, 0x57d2, + 0x57b8, 0x57f4, 0x57ef, 0x57f8, 0x57e4, 0x57dd, + /* 0x5c */ + 0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e, 0x5819, 0x5844, + 0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a, 0x5880, 0x99a8, + 0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f, 0x828a, 0x82a8, + 0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab, 0x82b8, 0x82be, + 0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7, 0x82ae, 0x82cb, + 0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa, 0x829f, 0x82c4, + 0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4, 0x830f, 0x8307, + 0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb, 0x82d3, 0x8311, + 0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5, 0x831c, 0x8351, + 0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334, 0x8331, 0x839b, + 0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f, 0x8340, 0x8317, + 0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365, + /* 0x5d */ + 0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, 0x83b0, + 0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, 0x8385, + 0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, 0x839e, + 0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, 0x5807, + 0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, 0x8411, + 0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, 0x83ea, + 0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, 0x845a, + 0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, 0x843c, + 0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, 0x84c1, + 0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, 0x84ba, + 0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, 0x850c, + 0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a, + /* 0x5e */ + 0x8556, 0x853b, 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, 0x8564, + 0x855e, 0x857a, 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, 0x85a8, + 0x8587, 0x858f, 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, 0x85b7, + 0x85b0, 0x85d3, 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, 0x8629, + 0x8616, 0x863c, 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, 0x5955, + 0x595a, 0x5958, 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, 0x624c, + 0x626a, 0x629f, 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, 0x6322, + 0x62f6, 0x6339, 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, 0x637a, + 0x638e, 0x63b4, 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, 0x63bc, + 0x63f2, 0x63f8, 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, 0x6452, + 0x63c6, 0x63be, 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, 0x640c, + 0x6426, 0x6421, 0x645e, 0x6484, 0x646d, 0x6496, + /* 0x5f */ + 0x647a, 0x64b7, 0x64b8, 0x6499, 0x64ba, 0x64c0, 0x64d0, 0x64d7, + 0x64e4, 0x64e2, 0x6509, 0x6525, 0x652e, 0x5f0b, 0x5fd2, 0x7519, + 0x5f11, 0x535f, 0x53f1, 0x53fd, 0x53e9, 0x53e8, 0x53fb, 0x5412, + 0x5416, 0x5406, 0x544b, 0x5452, 0x5453, 0x5454, 0x5456, 0x5443, + 0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, 0x5477, + 0x5471, 0x5464, 0x549a, 0x549b, 0x5484, 0x5476, 0x5466, 0x549d, + 0x54d0, 0x54ad, 0x54c2, 0x54b4, 0x54d2, 0x54a7, 0x54a6, 0x54d3, + 0x54d4, 0x5472, 0x54a3, 0x54d5, 0x54bb, 0x54bf, 0x54cc, 0x54d9, + 0x54da, 0x54dc, 0x54a9, 0x54aa, 0x54a4, 0x54dd, 0x54cf, 0x54de, + 0x551b, 0x54e7, 0x5520, 0x54fd, 0x5514, 0x54f3, 0x5522, 0x5523, + 0x550f, 0x5511, 0x5527, 0x552a, 0x5567, 0x558f, 0x55b5, 0x5549, + 0x556d, 0x5541, 0x5555, 0x553f, 0x5550, 0x553c, + /* 0x60 */ + 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, 0x555c, + 0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588, 0x5581, 0x559f, + 0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd, 0x55be, 0x5594, + 0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1, 0x55eb, 0x55ec, + 0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5, 0x55f2, 0x55f3, + 0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94, 0x561e, 0x5608, + 0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600, 0x5627, 0x562d, + 0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662, 0x5659, 0x565c, + 0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b, 0x567b, 0x567c, + 0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd, 0x56e1, 0x56f5, + 0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709, 0x571c, 0x5e0f, + 0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c, + /* 0x61 */ + 0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, 0x5c7a, + 0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, 0x5c9a, + 0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, 0x5ca3, + 0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, 0x5d02, + 0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, 0x5d1b, + 0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, 0x5d5d, + 0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, 0x5d9d, + 0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, 0x5f89, + 0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, 0x5fbc, + 0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, 0x72c3, + 0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, 0x72f2, + 0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa, + /* 0x62 */ + 0x72fb, 0x7317, 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, 0x7315, + 0x7322, 0x7339, 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, 0x734d, + 0x7357, 0x7360, 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, 0x98e7, + 0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b, + 0x996c, 0x9974, 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, 0x998a, + 0x998d, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, 0x5e91, + 0x5e8b, 0x5e96, 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, 0x5eb3, + 0x8d53, 0x5ed2, 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, 0x5fc4, + 0x5fc9, 0x5fd6, 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, 0x5fe4, + 0x5ffe, 0x6005, 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, 0x6035, + 0x6026, 0x601b, 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, 0x603f, + 0x6021, 0x6078, 0x6079, 0x607b, 0x607a, 0x6042, + /* 0x63 */ + 0x606a, 0x607d, 0x6096, 0x609a, 0x60ad, 0x609d, 0x6083, 0x6092, + 0x608c, 0x609b, 0x60ec, 0x60bb, 0x60b1, 0x60dd, 0x60d8, 0x60c6, + 0x60da, 0x60b4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60f4, 0x6100, + 0x610e, 0x612b, 0x614a, 0x6175, 0x61ac, 0x6194, 0x61a7, 0x61b7, + 0x61d4, 0x61f5, 0x5fdd, 0x96b3, 0x95e9, 0x95eb, 0x95f1, 0x95f3, + 0x95f5, 0x95f6, 0x95fc, 0x95fe, 0x9603, 0x9604, 0x9606, 0x9608, + 0x960a, 0x960b, 0x960c, 0x960d, 0x960f, 0x9612, 0x9615, 0x9616, + 0x9617, 0x9619, 0x961a, 0x4e2c, 0x723f, 0x6215, 0x6c35, 0x6c54, + 0x6c5c, 0x6c4a, 0x6ca3, 0x6c85, 0x6c90, 0x6c94, 0x6c8c, 0x6c68, + 0x6c69, 0x6c74, 0x6c76, 0x6c86, 0x6ca9, 0x6cd0, 0x6cd4, 0x6cad, + 0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7, 0x6cb2, 0x6ce0, 0x6cd6, 0x6cfa, + 0x6ceb, 0x6cee, 0x6cb1, 0x6cd3, 0x6cef, 0x6cfe, + /* 0x64 */ + 0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07, 0x6d04, 0x6d19, + 0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a, 0x6d4f, 0x6d52, + 0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0, 0x6d5e, 0x6d93, + 0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a, 0x6dc7, 0x6dc5, + 0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6, 0x6ddd, 0x6dd9, + 0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e, 0x6e4e, 0x6e6b, + 0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32, 0x6e25, 0x6e44, + 0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2, 0x6ea5, 0x6ea7, + 0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf, 0x6e8f, 0x6ec2, + 0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15, 0x6ef9, 0x6f2f, + 0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29, 0x6f89, 0x6f8d, + 0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1, + /* 0x65 */ + 0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, 0x6fde, + 0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, 0x704f, + 0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, 0x752f, + 0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, 0x8b07, + 0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, 0x8fe6, + 0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, 0x900d, + 0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, 0x9051, + 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, 0x9074, + 0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, 0x5f56, + 0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, 0x5c66, + 0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, 0x5c6e, + 0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3, + /* 0x66 */ + 0x5997, 0x59ca, 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, 0x59af, + 0x59d7, 0x59be, 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, 0x59d8, + 0x59f9, 0x5a0c, 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, 0x5a13, + 0x5a40, 0x5a67, 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, 0x80ec, + 0x5aaa, 0x5a9b, 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, 0x5ad2, + 0x5ad4, 0x5ab8, 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, 0x5ad8, + 0x5adc, 0x5b09, 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, 0x5c15, + 0x5c1c, 0x5b5a, 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, 0x9a75, + 0x9a77, 0x9a78, 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, 0x9a85, + 0x9a88, 0x9a8a, 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, 0x9a9b, + 0x9a9c, 0x9a9d, 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, 0x9aa7, + 0x7e9f, 0x7ea1, 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9, + /* 0x67 */ + 0x7ead, 0x7eb0, 0x7ebe, 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec9, 0x7ecb, + 0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7, 0x7edb, 0x7ee0, 0x7ee1, 0x7ee8, + 0x7eeb, 0x7eee, 0x7eef, 0x7ef1, 0x7ef2, 0x7f0d, 0x7ef6, 0x7efa, + 0x7efb, 0x7efe, 0x7f01, 0x7f02, 0x7f03, 0x7f07, 0x7f08, 0x7f0b, + 0x7f0c, 0x7f0f, 0x7f11, 0x7f12, 0x7f17, 0x7f19, 0x7f1c, 0x7f1b, + 0x7f1f, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27, + 0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2f, 0x7f30, 0x7f31, 0x7f32, + 0x7f33, 0x7f35, 0x5e7a, 0x757f, 0x5ddb, 0x753e, 0x9095, 0x738e, + 0x7391, 0x73ae, 0x73a2, 0x739f, 0x73cf, 0x73c2, 0x73d1, 0x73b7, + 0x73b3, 0x73c0, 0x73c9, 0x73c8, 0x73e5, 0x73d9, 0x987c, 0x740a, + 0x73e9, 0x73e7, 0x73de, 0x73ba, 0x73f2, 0x740f, 0x742a, 0x745b, + 0x7426, 0x7425, 0x7428, 0x7430, 0x742e, 0x742c, + /* 0x68 */ + 0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455, 0x7459, 0x7477, + 0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481, 0x7487, 0x748b, + 0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2, 0x74ba, 0x97ea, + 0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748, 0x6769, 0x67a5, + 0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775, 0x67a8, 0x679e, + 0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809, 0x67d8, 0x680a, + 0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da, 0x67b3, 0x67dd, + 0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1, 0x67fd, 0x6832, + 0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844, 0x6864, 0x6883, + 0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683e, 0x684a, + 0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877, 0x6893, 0x686b, + 0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9, + /* 0x69 */ + 0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, 0x6971, + 0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, 0x6998, + 0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, 0x6966, + 0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, 0x69d4, + 0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, 0x69ff, + 0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, 0x6a3e, + 0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, 0x6a28, + 0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, 0x7337, + 0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, 0x6b8d, + 0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, 0x8f72, + 0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, 0x8f7c, + 0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b, + /* 0x6a */ + 0x8f8d, 0x8f8e, 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, 0x6217, + 0x621b, 0x621f, 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, 0x81e7, + 0x74ef, 0x74f4, 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, 0x65ee, + 0x65ef, 0x65f0, 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, 0x6600, + 0x7085, 0x66f7, 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, 0x8006, + 0x665f, 0x6654, 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, 0x6677, + 0x6684, 0x668c, 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, 0x66e6, + 0x66e9, 0x8d32, 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, 0x8d45, + 0x8d46, 0x8d48, 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, 0x89c7, + 0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x726e, + 0x729f, 0x725d, 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, 0x728b, + 0x728d, 0x728f, 0x7292, 0x6308, 0x6332, 0x63b0, + /* 0x6b */ + 0x643f, 0x64d8, 0x8004, 0x6bea, 0x6bf3, 0x6bfd, 0x6bf5, 0x6bf9, + 0x6c05, 0x6c07, 0x6c06, 0x6c0d, 0x6c15, 0x6c18, 0x6c19, 0x6c1a, + 0x6c21, 0x6c29, 0x6c24, 0x6c2a, 0x6c32, 0x6535, 0x6555, 0x656b, + 0x724d, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809f, 0x809c, + 0x8093, 0x80bc, 0x670a, 0x80bd, 0x80b1, 0x80ab, 0x80ad, 0x80b4, + 0x80b7, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80db, 0x80c2, 0x80c4, + 0x80d9, 0x80cd, 0x80d7, 0x6710, 0x80dd, 0x80eb, 0x80f1, 0x80f4, + 0x80ed, 0x810d, 0x810e, 0x80f2, 0x80fc, 0x6715, 0x8112, 0x8c5a, + 0x8136, 0x811e, 0x812c, 0x8118, 0x8132, 0x8148, 0x814c, 0x8153, + 0x8174, 0x8159, 0x815a, 0x8171, 0x8160, 0x8169, 0x817c, 0x817d, + 0x816d, 0x8167, 0x584d, 0x5ab5, 0x8188, 0x8182, 0x8191, 0x6ed5, + 0x81a3, 0x81aa, 0x81cc, 0x6726, 0x81ca, 0x81bb, + /* 0x6c */ + 0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43, 0x6b46, 0x6b59, + 0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da, 0x6bb3, 0x5f40, + 0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc, 0x65c6, 0x65c4, + 0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080, 0x709c, 0x7096, + 0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1, 0x70e8, 0x70ca, + 0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173, 0x715c, 0x7168, + 0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198, 0x71b3, 0x71b5, + 0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9, 0x721d, 0x7228, + 0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d, 0x6243, 0x6248, + 0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b, 0x795c, 0x7953, + 0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967, 0x797a, 0x7985, + 0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0, + /* 0x6d */ + 0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, 0x60ab, + 0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, 0x6206, + 0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, 0x7800, + 0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, 0x781d, + 0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, 0x7823, + 0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, 0x7847, + 0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, 0x78a1, + 0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, 0x78ec, + 0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, 0x9f9b, + 0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, 0x7707, + 0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, 0x7738, + 0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768, + /* 0x6e */ + 0x7762, 0x7765, 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, 0x7791, + 0x779f, 0x77a0, 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, 0x754e, + 0x754b, 0x7548, 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, 0x7f61, + 0x7f5f, 0x8a48, 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, 0x7f7e, + 0x76cd, 0x76e5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, 0x948a, + 0x948c, 0x948d, 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, 0x949a, + 0x949b, 0x949c, 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, 0x94ac, + 0x94af, 0x94b0, 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, 0x94b9, + 0x94ba, 0x94bc, 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, 0x94ca, + 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5, + 0x94d6, 0x94d7, 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, 0x94e0, + 0x94e2, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94ea, + /* 0x6f */ + 0x94e9, 0x94eb, 0x94ee, 0x94ef, 0x94f3, 0x94f4, 0x94f5, 0x94f7, + 0x94f9, 0x94fc, 0x94fd, 0x94ff, 0x9503, 0x9502, 0x9506, 0x9507, + 0x9509, 0x950a, 0x950d, 0x950e, 0x950f, 0x9512, 0x9513, 0x9514, + 0x9515, 0x9516, 0x9518, 0x951b, 0x951d, 0x951e, 0x951f, 0x9522, + 0x952a, 0x952b, 0x9529, 0x952c, 0x9531, 0x9532, 0x9534, 0x9536, + 0x9537, 0x9538, 0x953c, 0x953e, 0x953f, 0x9542, 0x9535, 0x9544, + 0x9545, 0x9546, 0x9549, 0x954c, 0x954e, 0x954f, 0x9552, 0x9553, + 0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955b, 0x955e, 0x955f, + 0x955d, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568, + 0x9569, 0x956a, 0x956b, 0x956c, 0x956f, 0x9571, 0x9572, 0x9573, + 0x953a, 0x77e7, 0x77ec, 0x96c9, 0x79d5, 0x79ed, 0x79e3, 0x79eb, + 0x7a06, 0x5d47, 0x7a03, 0x7a02, 0x7a1e, 0x7a14, + /* 0x70 */ + 0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70, 0x7688, 0x768e, + 0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c, 0x9e20, 0x9e22, + 0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32, 0x9e31, 0x9e36, + 0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41, 0x9e42, 0x9e44, + 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e51, + 0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, 0x9e66, + 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e71, 0x9e6d, + 0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d, 0x75ac, 0x75a3, + 0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0, 0x75c3, 0x75c2, + 0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4, 0x75eb, 0x75e7, + 0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600, 0x7605, 0x760c, + 0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619, + /* 0x71 */ + 0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, 0x763f, + 0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, 0x765c, + 0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, 0x7a80, + 0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, 0x7aad, + 0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, 0x88a2, + 0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, 0x88e5, + 0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, 0x8919, + 0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, 0x8966, + 0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, 0x8014, + 0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029, + 0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, 0x8052, + 0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883, + /* 0x72 */ + 0x9889, 0x988c, 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, 0x989e, + 0x989f, 0x98a1, 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, 0x866c, + 0x866e, 0x867f, 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, 0x868b, + 0x86ac, 0x869d, 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, 0x86b6, + 0x86c4, 0x86b5, 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, 0x86c9, + 0x86cf, 0x86b4, 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, 0x86d0, + 0x8713, 0x86de, 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, 0x8707, + 0x86f8, 0x8708, 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, 0x871e, + 0x8725, 0x872e, 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, 0x8729, + 0x8737, 0x873f, 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, 0x8760, + 0x8770, 0x874c, 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, 0x8764, + 0x8759, 0x8765, 0x8793, 0x87af, 0x87a8, 0x87d2, + /* 0x73 */ + 0x87c6, 0x8788, 0x8785, 0x87ad, 0x8797, 0x8783, 0x87ab, 0x87e5, + 0x87ac, 0x87b5, 0x87b3, 0x87cb, 0x87d3, 0x87bd, 0x87d1, 0x87c0, + 0x87ca, 0x87db, 0x87ea, 0x87e0, 0x87ee, 0x8816, 0x8813, 0x87fe, + 0x880a, 0x881b, 0x8821, 0x8839, 0x883c, 0x7f36, 0x7f42, 0x7f44, + 0x7f45, 0x8210, 0x7afa, 0x7afd, 0x7b08, 0x7b03, 0x7b04, 0x7b15, + 0x7b0a, 0x7b2b, 0x7b0f, 0x7b47, 0x7b38, 0x7b2a, 0x7b19, 0x7b2e, + 0x7b31, 0x7b20, 0x7b25, 0x7b24, 0x7b33, 0x7b3e, 0x7b1e, 0x7b58, + 0x7b5a, 0x7b45, 0x7b75, 0x7b4c, 0x7b5d, 0x7b60, 0x7b6e, 0x7b7b, + 0x7b62, 0x7b72, 0x7b71, 0x7b90, 0x7ba6, 0x7ba7, 0x7bb8, 0x7bac, + 0x7b9d, 0x7ba8, 0x7b85, 0x7baa, 0x7b9c, 0x7ba2, 0x7bab, 0x7bb4, + 0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd, 0x7bda, 0x7be5, 0x7be6, 0x7bea, + 0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f, 0x7c16, 0x7c0b, + /* 0x74 */ + 0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40, 0x81fe, 0x8201, + 0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222, 0x8223, 0x822d, + 0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233, 0x8234, 0x823e, + 0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f, 0x8268, 0x887e, + 0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d, 0x7f9f, 0x7fa7, + 0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91, 0x7c9d, 0x7c9c, + 0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1, 0x7cc7, 0x7ccc, + 0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e, 0x66a8, 0x7fbf, + 0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9, 0x7fee, 0x7ff3, + 0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b, 0x9eb8, 0x9eb4, + 0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67, 0x8d6d, 0x8c47, + 0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164, + /* 0x75 */ + 0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, 0x9172, + 0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, 0x91a2, + 0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, 0x91ba, + 0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, 0x8db5, + 0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, 0x8dde, + 0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, 0x8de3, + 0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, 0x8e1f, + 0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, 0x8e35, + 0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, 0x8e4a, + 0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, 0x8e94, + 0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, 0x8c98, + 0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc, + /* 0x76 */ + 0x89e5, 0x89eb, 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, 0x96f3, + 0x96ef, 0x9706, 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, 0x972d, + 0x9730, 0x973e, 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, 0x9f88, + 0x9f89, 0x9f8a, 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, 0x96bc, + 0x96bd, 0x96ce, 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, 0x92c8, + 0x933e, 0x936a, 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, 0x9c82, + 0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, 0x9c90, + 0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, 0x9c9f, + 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, + 0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, + 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, + 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb, + /* 0x77 */ + 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5, + 0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd, 0x9cdf, 0x9ce2, 0x977c, + 0x9785, 0x9791, 0x9792, 0x9794, 0x97af, 0x97ab, 0x97a3, 0x97b2, + 0x97b4, 0x9ab1, 0x9ab0, 0x9ab7, 0x9e58, 0x9ab6, 0x9aba, 0x9abc, + 0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2, 0x9acb, 0x9acc, 0x9ad1, 0x9b45, + 0x9b43, 0x9b47, 0x9b49, 0x9b48, 0x9b4d, 0x9b51, 0x98e8, 0x990d, + 0x992e, 0x9955, 0x9954, 0x9adf, 0x9ae1, 0x9ae6, 0x9aef, 0x9aeb, + 0x9afb, 0x9aed, 0x9af9, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, 0x9b23, + 0x9ebd, 0x9ebe, 0x7e3b, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, 0x9e92, + 0x93d6, 0x9e9d, 0x9e9f, 0x9edb, 0x9edc, 0x9edd, 0x9ee0, 0x9edf, + 0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5, 0x9eea, 0x9eef, 0x9f22, 0x9f2c, + 0x9f2f, 0x9f39, 0x9f37, 0x9f3d, 0x9f3e, 0x9f44, +}; + +static int +gb2312_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x29) || (c1 >= 0x30 && c1 <= 0x77)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + unsigned short wc = 0xfffd; + if (i < 1410) { + if (i < 831) + wc = gb2312_2uni_page21[i]; + } else { + if (i < 8178) + wc = gb2312_2uni_page30[i-1410]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short gb2312_2charset[7445] = { + 0x2168, 0x216c, 0x2127, 0x2163, 0x2140, 0x2141, 0x2824, 0x2822, + 0x2828, 0x2826, 0x283a, 0x282c, 0x282a, 0x2830, 0x282e, 0x2142, + 0x2834, 0x2832, 0x2839, 0x2821, 0x2825, 0x2827, 0x2829, 0x282d, + 0x2831, 0x2823, 0x282b, 0x282f, 0x2833, 0x2835, 0x2836, 0x2837, + 0x2838, 0x2126, 0x2125, 0x2621, 0x2622, 0x2623, 0x2624, 0x2625, + 0x2626, 0x2627, 0x2628, 0x2629, 0x262a, 0x262b, 0x262c, 0x262d, + 0x262e, 0x262f, 0x2630, 0x2631, 0x2632, 0x2633, 0x2634, 0x2635, + 0x2636, 0x2637, 0x2638, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645, + 0x2646, 0x2647, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c, 0x264d, + 0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x2654, 0x2655, + 0x2656, 0x2657, 0x2658, 0x2727, 0x2721, 0x2722, 0x2723, 0x2724, + 0x2725, 0x2726, 0x2728, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, + 0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, + 0x2736, 0x2737, 0x2738, 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, + 0x273e, 0x273f, 0x2740, 0x2741, 0x2751, 0x2752, 0x2753, 0x2754, + 0x2755, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, 0x275d, + 0x275e, 0x275f, 0x2760, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, + 0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c, 0x276d, + 0x276e, 0x276f, 0x2770, 0x2771, 0x2757, 0x212a, 0x212c, 0x212e, + 0x212f, 0x2130, 0x2131, 0x212d, 0x216b, 0x2164, 0x2165, 0x2179, + 0x2166, 0x216d, 0x2271, 0x2272, 0x2273, 0x2274, 0x2275, 0x2276, + 0x2277, 0x2278, 0x2279, 0x227a, 0x227b, 0x227c, 0x217b, 0x217c, + 0x217a, 0x217d, 0x214a, 0x2147, 0x2146, 0x214c, 0x2158, 0x215e, + 0x214f, 0x214e, 0x2144, 0x2145, 0x2149, 0x2148, 0x2152, 0x2153, + 0x2160, 0x215f, 0x2143, 0x214b, 0x2157, 0x2156, 0x2155, 0x2159, + 0x2154, 0x215c, 0x215d, 0x215a, 0x215b, 0x2151, 0x214d, 0x2150, + 0x2259, 0x225a, 0x225b, 0x225c, 0x225d, 0x225e, 0x225f, 0x2260, + 0x2261, 0x2262, 0x2245, 0x2246, 0x2247, 0x2248, 0x2249, 0x224a, + 0x224b, 0x224c, 0x224d, 0x224e, 0x224f, 0x2250, 0x2251, 0x2252, + 0x2253, 0x2254, 0x2255, 0x2256, 0x2257, 0x2258, 0x2231, 0x2232, + 0x2233, 0x2234, 0x2235, 0x2236, 0x2237, 0x2238, 0x2239, 0x223a, + 0x223b, 0x223c, 0x223d, 0x223e, 0x223f, 0x2240, 0x2241, 0x2242, + 0x2243, 0x2244, 0x2924, 0x2925, 0x2926, 0x2927, 0x2928, 0x2929, + 0x292a, 0x292b, 0x292c, 0x292d, 0x292e, 0x292f, 0x2930, 0x2931, + 0x2932, 0x2933, 0x2934, 0x2935, 0x2936, 0x2937, 0x2938, 0x2939, + 0x293a, 0x293b, 0x293c, 0x293d, 0x293e, 0x293f, 0x2940, 0x2941, + 0x2942, 0x2943, 0x2944, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, + 0x294a, 0x294b, 0x294c, 0x294d, 0x294e, 0x294f, 0x2950, 0x2951, + 0x2952, 0x2953, 0x2954, 0x2955, 0x2956, 0x2957, 0x2958, 0x2959, + 0x295a, 0x295b, 0x295c, 0x295d, 0x295e, 0x295f, 0x2960, 0x2961, + 0x2962, 0x2963, 0x2964, 0x2965, 0x2966, 0x2967, 0x2968, 0x2969, + 0x296a, 0x296b, 0x296c, 0x296d, 0x296e, 0x296f, 0x2176, 0x2175, + 0x2178, 0x2177, 0x2174, 0x2173, 0x2170, 0x2172, 0x2171, 0x216f, + 0x216e, 0x2162, 0x2161, 0x2121, 0x2122, 0x2123, 0x2128, 0x2129, + 0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213a, 0x213b, + 0x213e, 0x213f, 0x217e, 0x2132, 0x2133, 0x213c, 0x213d, 0x2421, + 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, + 0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431, + 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, + 0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441, + 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, + 0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451, + 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, + 0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461, + 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, + 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, + 0x2472, 0x2473, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, + 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, 0x252d, 0x252e, + 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, + 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, 0x253d, 0x253e, + 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, + 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e, + 0x254f, 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, + 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, + 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, + 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, + 0x256f, 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, + 0x2124, 0x2845, 0x2846, 0x2847, 0x2848, 0x2849, 0x284a, 0x284b, + 0x284c, 0x284d, 0x284e, 0x284f, 0x2850, 0x2851, 0x2852, 0x2853, + 0x2854, 0x2855, 0x2856, 0x2857, 0x2858, 0x2859, 0x285a, 0x285b, + 0x285c, 0x285d, 0x285e, 0x285f, 0x2860, 0x2861, 0x2862, 0x2863, + 0x2864, 0x2865, 0x2866, 0x2867, 0x2868, 0x2869, 0x2265, 0x2266, + 0x2267, 0x2268, 0x2269, 0x226a, 0x226b, 0x226c, 0x226d, 0x226e, + 0x523b, 0x3621, 0x465f, 0x4d72, 0x5549, 0x487d, 0x494f, 0x4f42, + 0x5822, 0x323b, 0x536b, 0x5824, 0x3373, 0x5728, 0x4752, 0x5827, + 0x4a40, 0x4770, 0x317b, 0x5235, 0x3454, 0x362b, 0x4b3f, 0x5829, + 0x362a, 0x413d, 0x514f, 0x4925, 0x582d, 0x3876, 0x513e, 0x635c, + 0x5650, 0x3761, 0x342e, 0x4159, 0x583c, 0x4d68, 0x3524, 0x4e2a, + 0x5677, 0x4076, 0x3e59, 0x582f, 0x444b, 0x3e43, 0x5831, 0x4334, + 0x5265, 0x562e, 0x4e5a, 0x5527, 0x3a75, 0x3726, 0x4056, 0x4639, + 0x4552, 0x4747, 0x3954, 0x334b, 0x5252, 0x583f, 0x3e45, 0x4672, + 0x5232, 0x4f30, 0x4f67, 0x4a69, 0x5840, 0x4272, 0x4252, 0x4869, + 0x472c, 0x414b, 0x5368, 0x5579, 0x4a42, 0x367e, 0x5821, 0x535a, + 0x3f77, 0x5446, 0x3b25, 0x5841, 0x4e65, 0x3e2e, 0x5828, 0x5147, + 0x5029, 0x583d, 0x596f, 0x4d76, 0x3f3a, 0x3d3b, 0x3a25, 0x5260, + 0x327a, 0x3a60, 0x4436, 0x4f6d, 0x3e29, 0x4d24, 0x4141, 0x4757, + 0x5971, 0x5974, 0x484b, 0x5869, 0x525a, 0x4a32, 0x484a, 0x586c, + 0x586a, 0x5846, 0x3d76, 0x464d, 0x3370, 0x586b, 0x3d71, 0x3d69, + 0x4854, 0x3453, 0x4258, 0x3256, 0x5750, 0x4a4b, 0x4b7b, 0x554c, + 0x3836, 0x4f49, 0x595a, 0x5870, 0x472a, 0x586e, 0x347a, 0x416e, + 0x5254, 0x586d, 0x5247, 0x586f, 0x4347, 0x5176, 0x5659, 0x5872, + 0x5875, 0x3c7e, 0x3c5b, 0x484e, 0x375d, 0x3742, 0x4673, 0x5878, + 0x5241, 0x4e69, 0x3c3f, 0x377c, 0x3725, 0x505d, 0x565a, 0x5345, + 0x3b6f, 0x3b61, 0x5871, 0x4921, 0x4e30, 0x342b, 0x5873, 0x494b, + 0x5876, 0x4257, 0x5877, 0x4e31, 0x5879, 0x322e, 0x3940, 0x5923, + 0x3069, 0x4166, 0x496c, 0x4b45, 0x4b46, 0x5924, 0x3568, 0x352b, + 0x4e3b, 0x354d, 0x5721, 0x5774, 0x5353, 0x4c65, 0x3a4e, 0x5922, + 0x595c, 0x5360, 0x587d, 0x3770, 0x5777, 0x587e, 0x587a, 0x5921, + 0x4463, 0x5336, 0x5874, 0x595d, 0x587b, 0x4565, 0x4050, 0x5170, + 0x305b, 0x3c51, 0x5926, 0x5925, 0x592c, 0x592e, 0x592b, 0x4a39, + 0x5929, 0x5636, 0x335e, 0x5928, 0x407d, 0x4a4c, 0x592a, 0x5927, + 0x5930, 0x3631, 0x3929, 0x5240, 0x4f40, 0x4242, 0x3d44, 0x556c, + 0x3260, 0x4748, 0x3f6b, 0x592d, 0x592f, 0x4e6a, 0x3a6e, 0x4756, + 0x3163, 0x3459, 0x366d, 0x5934, 0x3f21, 0x595e, 0x474e, 0x407e, + 0x5938, 0x4b57, 0x377d, 0x5935, 0x5937, 0x3123, 0x5361, 0x5939, + 0x5045, 0x5936, 0x5931, 0x5932, 0x4129, 0x5933, 0x3c73, 0x505e, + 0x3829, 0x3e63, 0x593d, 0x593a, 0x3033, 0x5942, 0x5944, 0x3136, + 0x593f, 0x3539, 0x3e73, 0x4c48, 0x3a72, 0x5250, 0x5943, 0x3d68, + 0x332b, 0x5945, 0x3e6b, 0x5946, 0x593b, 0x445f, 0x593e, 0x5941, + 0x5940, 0x552e, 0x5635, 0x4763, 0x5948, 0x3c59, 0x594a, 0x593c, + 0x594b, 0x462b, 0x5949, 0x5776, 0x4d23, 0x3d21, 0x594c, 0x453c, + 0x4d35, 0x594d, 0x5947, 0x3325, 0x3f7e, 0x3835, 0x407c, 0x3078, + 0x3476, 0x594e, 0x594f, 0x3422, 0x5950, 0x345f, 0x3041, 0x5951, + 0x4935, 0x4f71, 0x5952, 0x4145, 0x5956, 0x492e, 0x5955, 0x5954, + 0x5957, 0x4b5b, 0x3d29, 0x4627, 0x5953, 0x5958, 0x5959, 0x4865, + 0x405c, 0x3679, 0x5823, 0x544a, 0x542a, 0x5056, 0x3364, 0x5557, + 0x4f48, 0x3962, 0x3f4b, 0x4362, 0x3652, 0x4d43, 0x596e, 0x5970, + 0x3533, 0x3635, 0x3e24, 0x486b, 0x482b, 0x304b, 0x392b, 0x4179, + 0x5962, 0x403c, 0x3932, 0x3958, 0x504b, 0x3178, 0x4664, 0x3e5f, + 0x3564, 0x5748, 0x5178, 0x3c66, 0x4a5e, 0x3c3d, 0x5966, 0x5867, + 0x445a, 0x3854, 0x483d, 0x3261, 0x5459, 0x4330, 0x4361, 0x5a22, + 0x485f, 0x5034, 0x3e7c, 0x4529, 0x395a, 0x5a23, 0x5429, 0x5a24, + 0x597b, 0x362c, 0x376b, 0x3179, 0x597c, 0x3365, 0x3e76, 0x3f76, + 0x5231, 0x4064, 0x3633, 0x597e, 0x597d, 0x3e3b, 0x4660, 0x573c, + 0x5a21, 0x4139, 0x3572, 0x4168, 0x3c75, 0x3455, 0x415d, 0x447d, + 0x3c38, 0x3732, 0x376f, 0x596c, 0x463e, 0x3f2d, 0x3b4b, 0x354a, + 0x5b49, 0x5057, 0x4d39, 0x303c, 0x3376, 0x3b77, 0x5b4a, 0x3a2f, + 0x5464, 0x3536, 0x3573, 0x5856, 0x4850, 0x3756, 0x4750, 0x5857, + 0x3f2f, 0x5b3b, 0x5858, 0x504c, 0x3b2e, 0x6b3e, 0x4150, 0x4175, + 0x5472, 0x3855, 0x3434, 0x3375, 0x493e, 0x4550, 0x4559, 0x407b, + 0x3170, 0x5859, 0x394e, 0x353d, 0x585a, 0x5646, 0x4b22, 0x482f, + 0x4932, 0x344c, 0x3f4c, 0x3974, 0x585b, 0x585c, 0x3667, 0x3c41, + 0x4c6a, 0x4f77, 0x585d, 0x4730, 0x3950, 0x3d23, 0x4c5e, 0x464a, + 0x5860, 0x585e, 0x585f, 0x307e, 0x3e67, 0x4a23, 0x3c74, 0x3831, + 0x386e, 0x5862, 0x3d4b, 0x5864, 0x5863, 0x457c, 0x5865, 0x5866, + 0x4126, 0x4830, 0x306c, 0x3926, 0x3c53, 0x4e71, 0x5b3d, 0x4153, + 0x362f, 0x567a, 0x452c, 0x3d59, 0x5b3e, 0x5b3f, 0x4078, 0x3e22, + 0x404d, 0x5b40, 0x4a46, 0x322a, 0x5342, 0x4363, 0x512b, 0x5b42, + 0x4055, 0x5b43, 0x3f31, 0x443c, 0x475a, 0x5b44, 0x5968, 0x4957, + 0x3934, 0x4e70, 0x5448, 0x307c, 0x3452, 0x5059, 0x5969, 0x5e4b, + 0x596b, 0x5830, 0x3b2f, 0x3131, 0x3357, 0x584e, 0x5451, 0x3d33, + 0x3f6f, 0x4f3b, 0x5850, 0x374b, 0x5851, 0x4625, 0x4778, 0x523d, + 0x5852, 0x4464, 0x4a2e, 0x4727, 0x5826, 0x497d, 0x4e67, 0x3b5c, + 0x306b, 0x3b2a, 0x502d, 0x3130, 0x5764, 0x573f, 0x3525, 0x4274, + 0x444f, 0x3229, 0x3237, 0x3165, 0x5f32, 0x553c, 0x3f28, 0x422c, + 0x5855, 0x4231, 0x5854, 0x4e54, 0x5a60, 0x4e40, 0x5834, 0x432e, + 0x5321, 0x4e23, 0x3c34, 0x4834, 0x4251, 0x3e6d, 0x5036, 0x5a61, + 0x4764, 0x3327, 0x3672, 0x4c7c, 0x407a, 0x4077, 0x5139, 0x5161, + 0x5847, 0x325e, 0x4065, 0x3a71, 0x5848, 0x542d, 0x4f61, 0x5849, + 0x584a, 0x4f43, 0x3378, 0x3e47, 0x584b, 0x5b4c, 0x4825, 0x4f58, + 0x487e, 0x324e, 0x5356, 0x3266, 0x3c30, 0x5351, 0x4b2b, 0x3734, + 0x3722, 0x4a65, 0x4821, 0x4a5c, 0x3164, 0x5070, 0x4551, 0x5b45, + 0x357e, 0x3f5a, 0x3945, 0x3e64, 0x416d, 0x5f36, 0x5f35, 0x563b, + 0x3d50, 0x5559, 0x3048, 0x3623, 0x3f49, 0x4c28, 0x5f33, 0x4a37, + 0x5352, 0x584f, 0x5236, 0x3a45, 0x4b3e, 0x4c3e, 0x5f37, 0x3570, + 0x5f34, 0x5375, 0x3354, 0x3877, 0x5f3a, 0x3a4f, 0x3c2a, 0x3575, + 0x4d2c, 0x437b, 0x3a73, 0x4074, 0x4d42, 0x4f72, 0x5f38, 0x4f45, + 0x4240, 0x5f39, 0x4270, 0x3e7d, 0x415f, 0x4d4c, 0x5277, 0x374d, + 0x5f41, 0x5f44, 0x3771, 0x3049, 0x3656, 0x3754, 0x3a2c, 0x4c7d, + 0x3f54, 0x4b31, 0x4674, 0x5628, 0x5f45, 0x4e62, 0x3333, 0x4e7c, + 0x3435, 0x4e47, 0x3a70, 0x4e61, 0x513d, 0x5f40, 0x3474, 0x334a, + 0x3866, 0x5f3b, 0x4445, 0x5f3c, 0x5f3d, 0x5f3e, 0x453b, 0x5f3f, + 0x5f42, 0x5431, 0x5f43, 0x473a, 0x4e58, 0x4458, 0x5f4a, 0x5f4f, + 0x565c, 0x5f49, 0x5f5a, 0x4e36, 0x3a47, 0x5f4e, 0x5f48, 0x455e, + 0x496b, 0x3a74, 0x437c, 0x3e57, 0x5f46, 0x5f4d, 0x4558, 0x5526, + 0x3a4d, 0x3e4c, 0x533d, 0x3840, 0x5664, 0x5f47, 0x393e, 0x3f27, + 0x417c, 0x5f4b, 0x5f4c, 0x5f50, 0x5f5b, 0x5f65, 0x5f57, 0x5f56, + 0x5749, 0x5f63, 0x5f64, 0x656b, 0x5227, 0x5f52, 0x3f29, 0x545b, + 0x3f48, 0x5f54, 0x4f4c, 0x5f5d, 0x514a, 0x5f5e, 0x3027, 0x4637, + 0x5f53, 0x3a65, 0x365f, 0x4d5b, 0x397e, 0x5455, 0x5f5f, 0x4f6c, + 0x3025, 0x5f67, 0x5f51, 0x5146, 0x5f55, 0x5f58, 0x5f59, 0x5f5c, + 0x3b29, 0x5f60, 0x5f61, 0x5f62, 0x5f66, 0x5f68, 0x5334, 0x3867, + 0x4536, 0x5f6a, 0x495a, 0x4128, 0x4444, 0x3f5e, 0x4f78, 0x555c, + 0x5f6e, 0x3238, 0x3a5f, 0x5f6c, 0x5b41, 0x5164, 0x4b74, 0x343d, + 0x3026, 0x5f71, 0x4c46, 0x5f72, 0x5f6d, 0x5f69, 0x5f6b, 0x5f6f, + 0x5f70, 0x3b3d, 0x5f73, 0x5f74, 0x3b23, 0x4a5b, 0x4e28, 0x6027, + 0x332a, 0x6026, 0x6021, 0x5f7e, 0x4d59, 0x5f7c, 0x5f7a, 0x3f50, + 0x5744, 0x494c, 0x5f78, 0x3021, 0x5f7d, 0x5f7b, 0x6022, 0x6028, + 0x3748, 0x4621, 0x4936, 0x4032, 0x5f75, 0x453e, 0x5844, 0x5f79, + 0x4476, 0x6023, 0x6024, 0x6025, 0x5025, 0x6034, 0x4c64, 0x6031, + 0x3f26, 0x602f, 0x4e39, 0x602b, 0x4946, 0x402e, 0x602e, 0x3a6d, + 0x3a30, 0x6029, 0x5f76, 0x6033, 0x6038, 0x342d, 0x6039, 0x4f32, + 0x3a48, 0x6030, 0x507a, 0x602c, 0x547b, 0x5f77, 0x4567, 0x602d, + 0x5377, 0x6036, 0x6037, 0x6044, 0x5061, 0x603c, 0x6049, 0x604a, + 0x603e, 0x602a, 0x4924, 0x6041, 0x6032, 0x4a48, 0x6043, 0x6035, + 0x4e4b, 0x4b43, 0x604d, 0x6046, 0x6042, 0x604b, 0x603a, 0x603f, + 0x6040, 0x6045, 0x6047, 0x6048, 0x604c, 0x603b, 0x4b54, 0x6055, + 0x6056, 0x6052, 0x6050, 0x3c4e, 0x6051, 0x3842, 0x5845, 0x506a, + 0x426f, 0x604f, 0x603d, 0x6054, 0x6053, 0x6057, 0x605c, 0x6058, + 0x5676, 0x3330, 0x576c, 0x4b3b, 0x605a, 0x4e7b, 0x3a59, 0x6061, + 0x605d, 0x522d, 0x6062, 0x605b, 0x6059, 0x605f, 0x6060, 0x605e, + 0x6064, 0x4677, 0x582c, 0x546b, 0x6066, 0x4a49, 0x6065, 0x3841, + 0x6067, 0x6068, 0x6069, 0x6063, 0x3a3f, 0x4c67, 0x606a, 0x4f79, + 0x606b, 0x4842, 0x3d40, 0x4452, 0x606c, 0x606d, 0x4774, 0x4b44, + 0x606e, 0x3b58, 0x5836, 0x5272, 0x606f, 0x4d45, 0x365a, 0x6071, + 0x5430, 0x4027, 0x3451, 0x4e27, 0x6070, 0x6072, 0x394c, 0x397a, + 0x4d3c, 0x6073, 0x4654, 0x6074, 0x5432, 0x4826, 0x6076, 0x6075, + 0x6077, 0x4d41, 0x4a25, 0x545a, 0x5b57, 0x5b59, 0x5b58, 0x3967, + 0x5b5c, 0x5b5d, 0x3558, 0x5b5a, 0x5b5b, 0x3321, 0x5b5f, 0x3b78, + 0x5637, 0x5b60, 0x3e79, 0x373b, 0x5b50, 0x4c2e, 0x3f32, 0x3b35, + 0x5778, 0x3f53, 0x3f69, 0x3c61, 0x4c33, 0x5b5e, 0x3053, 0x4e6b, + 0x3758, 0x5739, 0x4642, 0x4024, 0x4c39, 0x5b67, 0x5b61, 0x463a, + 0x5b63, 0x5b68, 0x4577, 0x5b6a, 0x5b69, 0x3f40, 0x5b66, 0x5b65, + 0x3439, 0x402c, 0x4222, 0x5b62, 0x5b64, 0x504d, 0x5b6d, 0x405d, + 0x5b72, 0x3662, 0x5b73, 0x5b52, 0x3938, 0x542b, 0x5b6c, 0x3f51, + 0x5b70, 0x5b51, 0x3566, 0x5b6b, 0x3f65, 0x5b6e, 0x5b71, 0x5b79, + 0x3921, 0x3023, 0x4271, 0x3347, 0x5b6f, 0x5b78, 0x4652, 0x5b74, + 0x5b75, 0x5b77, 0x5b76, 0x5b7e, 0x5372, 0x323a, 0x5b7d, 0x5c24, + 0x5b7b, 0x5b7a, 0x5b7c, 0x4560, 0x3b79, 0x5c23, 0x5c25, 0x4c43, + 0x3651, 0x5d40, 0x5c21, 0x5c22, 0x4735, 0x3669, 0x5c27, 0x5c26, + 0x5c29, 0x3124, 0x354c, 0x3f30, 0x515f, 0x3642, 0x5c28, 0x4b7a, + 0x6b73, 0x4b5c, 0x4b7e, 0x4c41, 0x487b, 0x5c2a, 0x4c6e, 0x5c2b, + 0x5b53, 0x5c2f, 0x5c2c, 0x3e33, 0x4a7b, 0x5c2d, 0x494a, 0x4439, + 0x473d, 0x5c2e, 0x5476, 0x5066, 0x442b, 0x3655, 0x5b54, 0x315a, + 0x5b55, 0x5b56, 0x3a3e, 0x4840, 0x4a3f, 0x4849, 0x5733, 0x4979, + 0x3f47, 0x3a78, 0x523c, 0x623a, 0x3426, 0x3138, 0x3834, 0x4f44, + 0x5967, 0x4f26, 0x4d62, 0x596d, 0x3660, 0x5239, 0x393b, 0x6239, + 0x6237, 0x3473, 0x4c6c, 0x4c2b, 0x3772, 0x5832, 0x516b, 0x3a3b, + 0x4a27, 0x4d37, 0x5244, 0x3f64, 0x3c50, 0x3661, 0x5e45, 0x5e46, + 0x5b3c, 0x5159, 0x4666, 0x444e, 0x376e, 0x375c, 0x3f7c, 0x5760, + 0x4675, 0x313c, 0x5e48, 0x3d31, 0x4c57, 0x5e4a, 0x5e49, 0x356c, + 0x495d, 0x3042, 0x452e, 0x452b, 0x444c, 0x3c69, 0x4b7d, 0x3a43, + 0x6579, 0x4867, 0x657a, 0x4d7d, 0x5731, 0x383e, 0x4268, 0x4851, + 0x657b, 0x364a, 0x3c4b, 0x517d, 0x6621, 0x436e, 0x6624, 0x657e, + 0x6625, 0x4d57, 0x3741, 0x657c, 0x657d, 0x6623, 0x445d, 0x6628, + 0x6627, 0x4343, 0x465e, 0x662a, 0x4437, 0x6622, 0x4a3c, 0x3d63, + 0x3943, 0x6626, 0x5055, 0x4e2f, 0x6629, 0x6630, 0x5226, 0x3d2a, + 0x662d, 0x662f, 0x4051, 0x524c, 0x3c27, 0x6631, 0x5276, 0x574b, + 0x4d7e, 0x4d5e, 0x4226, 0x662b, 0x662c, 0x3d3f, 0x662e, 0x6633, + 0x6632, 0x6636, 0x6638, 0x446f, 0x4448, 0x3e6a, 0x496f, 0x6637, + 0x3670, 0x4364, 0x5369, 0x6634, 0x6635, 0x4822, 0x663d, 0x6639, + 0x4645, 0x4d71, 0x663b, 0x663c, 0x3b69, 0x663e, 0x663a, 0x4037, + 0x5324, 0x663f, 0x4974, 0x6643, 0x6644, 0x5076, 0x433d, 0x4344, + 0x6642, 0x6641, 0x6647, 0x4f31, 0x6b74, 0x664a, 0x6645, 0x3c5e, + 0x4929, 0x3c35, 0x4f53, 0x6648, 0x6649, 0x664e, 0x6650, 0x6651, + 0x664b, 0x3555, 0x664c, 0x664f, 0x445b, 0x6646, 0x664d, 0x6652, + 0x6654, 0x6653, 0x6655, 0x5978, 0x6656, 0x6657, 0x5753, 0x665d, + 0x665e, 0x3f57, 0x5450, 0x5756, 0x3466, 0x4b6f, 0x665a, 0x5843, + 0x574e, 0x5022, 0x434f, 0x665f, 0x3c3e, 0x3942, 0x665b, 0x5127, + 0x3a22, 0x424f, 0x582b, 0x4a6b, 0x656e, 0x665c, 0x3775, 0x4866, + 0x4475, 0x6532, 0x447e, 0x4b7c, 0x6533, 0x552c, 0x536e, 0x4a58, + 0x3032, 0x4b4e, 0x4d6a, 0x3a6a, 0x6535, 0x6534, 0x575a, 0x3959, + 0x5666, 0x3628, 0x4d70, 0x524b, 0x3126, 0x4a35, 0x3368, 0x4973, + 0x3f4d, 0x507b, 0x4a52, 0x6536, 0x3b42, 0x4f5c, 0x392c, 0x5457, + 0x3a26, 0x5167, 0x4f7c, 0x3c52, 0x6537, 0x485d, 0x3f6d, 0x3176, + 0x4b5e, 0x3c45, 0x3c44, 0x527a, 0x435c, 0x3f5c, 0x383b, 0x4342, + 0x3a2e, 0x5422, 0x475e, 0x442f, 0x326c, 0x3951, 0x653b, 0x4148, + 0x552f, 0x653c, 0x653e, 0x3467, 0x3654, 0x4b42, 0x5130, 0x353c, + 0x4a59, 0x3762, 0x4964, 0x3d2b, 0x4e3e, 0x5770, 0x5021, 0x4959, + 0x367b, 0x6658, 0x3c62, 0x333e, 0x4950, 0x6659, 0x3322, 0x5e4c, + 0x5348, 0x5e4d, 0x5222, 0x5e4e, 0x3e4d, 0x5e4f, 0x4a2c, 0x527c, + 0x335f, 0x656a, 0x4461, 0x3e21, 0x4e32, 0x4472, 0x3e56, 0x4628, + 0x3263, 0x3e53, 0x477c, 0x4c6b, 0x3d6c, 0x4e5d, 0x4a3a, 0x4641, + 0x656c, 0x503c, 0x5539, 0x656d, 0x4a74, 0x4d40, 0x4245, 0x656f, + 0x4244, 0x6570, 0x6578, 0x4d4d, 0x493d, 0x5259, 0x6128, 0x536c, + 0x4b6a, 0x4671, 0x612c, 0x6127, 0x6129, 0x612a, 0x612f, 0x326d, + 0x612b, 0x385a, 0x612d, 0x612e, 0x6130, 0x353a, 0x6131, 0x6133, + 0x6138, 0x5152, 0x6136, 0x6135, 0x416b, 0x6137, 0x5440, 0x6132, + 0x613a, 0x3036, 0x6134, 0x3f79, 0x6139, 0x613b, 0x613e, 0x613c, + 0x5645, 0x4f3f, 0x613d, 0x613f, 0x424d, 0x366b, 0x5378, 0x474d, + 0x3765, 0x3e7e, 0x6140, 0x6141, 0x6147, 0x3367, 0x4669, 0x345e, + 0x5142, 0x6148, 0x6146, 0x6145, 0x6143, 0x6142, 0x3140, 0x5538, + 0x6144, 0x614b, 0x614c, 0x614a, 0x6f7a, 0x6153, 0x6152, 0x4736, + 0x6149, 0x614e, 0x6150, 0x6154, 0x6151, 0x614d, 0x614f, 0x6155, + 0x6156, 0x6157, 0x6158, 0x615a, 0x615b, 0x4e21, 0x675d, 0x3428, + 0x565d, 0x5132, 0x3332, 0x3924, 0x5773, 0x4749, 0x3e5e, 0x392e, + 0x4e57, 0x326e, 0x5b4f, 0x3c3a, 0x5251, 0x4b48, 0x304d, 0x4f6f, + 0x5963, 0x3d6d, 0x3152, 0x4a50, 0x323c, 0x4b27, 0x372b, 0x4a26, + 0x4f23, 0x6078, 0x554a, 0x607b, 0x607a, 0x4541, 0x4c7b, 0x4131, + 0x6079, 0x5663, 0x322f, 0x5644, 0x355b, 0x3478, 0x5621, 0x4f2f, + 0x306f, 0x607c, 0x6121, 0x3323, 0x607d, 0x607e, 0x4331, 0x435d, + 0x6122, 0x3779, 0x3b4f, 0x6123, 0x443b, 0x6124, 0x6125, 0x6126, + 0x3431, 0x3849, 0x463d, 0x446a, 0x3222, 0x5052, 0x675b, 0x3b43, + 0x5357, 0x5344, 0x3963, 0x624f, 0x572f, 0x476c, 0x3153, 0x3432, + 0x6251, 0x5072, 0x422e, 0x6250, 0x3f62, 0x5326, 0x3557, 0x6252, + 0x356a, 0x436d, 0x387d, 0x382e, 0x4553, 0x374f, 0x6254, 0x6253, + 0x3648, 0x5779, 0x4d25, 0x6258, 0x6256, 0x4a7c, 0x3f35, 0x5339, + 0x6255, 0x6257, 0x412e, 0x4048, 0x625b, 0x625a, 0x402a, 0x414e, + 0x625c, 0x625d, 0x625e, 0x5b48, 0x5153, 0x4d22, 0x3d28, 0x5e43, + 0x5825, 0x3f2a, 0x5b4d, 0x526c, 0x467a, 0x452a, 0x5e44, 0x3157, + 0x5f2e, 0x4a3d, 0x5f31, 0x392d, 0x527d, 0x3825, 0x3a6b, 0x335a, + 0x355c, 0x5545, 0x4356, 0x4f52, 0x3b21, 0x6573, 0x6572, 0x6574, + 0x4d64, 0x4875, 0x352f, 0x473f, 0x6576, 0x6c30, 0x6566, 0x3969, + 0x3531, 0x423c, 0x6568, 0x6567, 0x6569, 0x524d, 0x616a, 0x504e, + 0x4d2e, 0x5165, 0x324a, 0x316b, 0x3172, 0x456d, 0x5543, 0x5330, + 0x615c, 0x615d, 0x525b, 0x3339, 0x314b, 0x4d79, 0x5577, 0x615e, + 0x3e36, 0x347d, 0x615f, 0x3a5c, 0x6160, 0x3b32, 0x4249, 0x6161, + 0x506c, 0x4d3d, 0x6162, 0x3543, 0x4547, 0x6163, 0x6164, 0x5379, + 0x6165, 0x512d, 0x6166, 0x4e22, 0x6167, 0x3542, 0x6168, 0x3b55, + 0x5044, 0x6260, 0x3158, 0x5264, 0x6261, 0x3c49, 0x484c, 0x6263, + 0x6c7e, 0x6c7d, 0x5f2f, 0x6262, 0x563e, 0x4d7c, 0x4326, 0x6343, + 0x5652, 0x6267, 0x6268, 0x5347, 0x626c, 0x3f6c, 0x626d, 0x6265, + 0x3340, 0x446e, 0x626e, 0x5043, 0x3a76, 0x6269, 0x375e, 0x3b33, + 0x4c2c, 0x4b4b, 0x6264, 0x6266, 0x626a, 0x626b, 0x6277, 0x6274, + 0x5475, 0x6273, 0x452d, 0x557a, 0x4542, 0x3240, 0x626f, 0x6272, + 0x412f, 0x4b3c, 0x3521, 0x6279, 0x3c31, 0x6271, 0x5054, 0x5439, + 0x6275, 0x3956, 0x6276, 0x4753, 0x6270, 0x575c, 0x6d21, 0x6278, + 0x6d25, 0x627e, 0x4a51, 0x4135, 0x3b50, 0x3f56, 0x3a63, 0x4b21, + 0x6d26, 0x6d23, 0x6d22, 0x3b56, 0x6d27, 0x5074, 0x6d24, 0x3a5e, + 0x3677, 0x6321, 0x3632, 0x4c71, 0x3927, 0x4f22, 0x4721, 0x3f52, + 0x3671, 0x627a, 0x627b, 0x627d, 0x627c, 0x4455, 0x6322, 0x5341, + 0x6327, 0x4744, 0x4f24, 0x6329, 0x3a37, 0x6328, 0x3b5a, 0x6323, + 0x6324, 0x632a, 0x6326, 0x4e72, 0x5346, 0x3b3c, 0x5443, 0x447a, + 0x6d28, 0x507c, 0x6325, 0x4375, 0x632d, 0x312f, 0x6332, 0x3c42, + 0x632c, 0x353f, 0x4769, 0x6330, 0x3e2a, 0x4d6f, 0x3b73, 0x4c68, + 0x632f, 0x6331, 0x4f27, 0x632e, 0x4e29, 0x3b5d, 0x356b, 0x3e65, + 0x3252, 0x334d, 0x3139, 0x632b, 0x3251, 0x352c, 0x395f, 0x3668, + 0x4f6b, 0x6337, 0x3b4c, 0x4847, 0x504a, 0x6338, 0x336e, 0x6d29, + 0x537a, 0x5364, 0x6d2a, 0x6339, 0x5262, 0x6335, 0x535e, 0x3850, + 0x6333, 0x6336, 0x375f, 0x6334, 0x4022, 0x633a, 0x5438, 0x3448, + 0x633b, 0x3b45, 0x4977, 0x4965, 0x443d, 0x6d2b, 0x427d, 0x3b5b, + 0x3f2e, 0x4e3f, 0x633c, 0x3f36, 0x316f, 0x5477, 0x633e, 0x6d2d, + 0x633f, 0x3a29, 0x6d2c, 0x633d, 0x6340, 0x3a36, 0x362e, 0x5038, + 0x3043, 0x6d2e, 0x6d2f, 0x4041, 0x6341, 0x4533, 0x6342, 0x5c32, + 0x6d30, 0x386a, 0x4e6c, 0x6a27, 0x5067, 0x4a79, 0x4856, 0x4f37, + 0x3349, 0x4e52, 0x3d64, 0x635e, 0x3b72, 0x6a28, 0x553d, 0x465d, + 0x6a29, 0x6a2a, 0x6a2c, 0x6a2b, 0x6a2e, 0x6a2d, 0x3d58, 0x6a2f, + 0x423e, 0x3441, 0x3477, 0x3b27, 0x6c66, 0x6c65, 0x373f, 0x4b79, + 0x3162, 0x6c67, 0x4948, 0x6c68, 0x6c69, 0x4a56, 0x5e50, 0x3245, + 0x547a, 0x464b, 0x3047, 0x3472, 0x4853, 0x4d50, 0x3f38, 0x3f5b, + 0x4724, 0x5634, 0x4029, 0x5e51, 0x4928, 0x516f, 0x4524, 0x3067, + 0x3336, 0x4845, 0x3062, 0x3776, 0x457a, 0x3673, 0x5552, 0x3350, + 0x3c3c, 0x332d, 0x3e71, 0x3051, 0x5256, 0x4a63, 0x5725, 0x4d36, + 0x3636, 0x3f39, 0x555b, 0x3827, 0x4557, 0x5e52, 0x3f59, 0x4255, + 0x4740, 0x3b24, 0x3128, 0x456a, 0x457b, 0x4c27, 0x3127, 0x3556, + 0x4428, 0x5e53, 0x513a, 0x3369, 0x4372, 0x3777, 0x5674, 0x3523, + 0x3270, 0x4434, 0x4469, 0x402d, 0x5e54, 0x3068, 0x4544, 0x4160, + 0x3955, 0x3e5c, 0x4d58, 0x304e, 0x4d4f, 0x5e56, 0x3e50, 0x573e, + 0x5e55, 0x5550, 0x305d, 0x4462, 0x4223, 0x3c70, 0x5335, 0x4039, + 0x4521, 0x3226, 0x5471, 0x4028, 0x4a43, 0x5e57, 0x557c, 0x3930, + 0x482d, 0x4b29, 0x5e59, 0x3f3d, 0x4634, 0x5727, 0x4a30, 0x4443, + 0x3356, 0x3952, 0x5638, 0x6a7c, 0x3034, 0x3f66, 0x4c74, 0x4d5a, + 0x563f, 0x424e, 0x4e4e, 0x4c22, 0x502e, 0x4453, 0x3532, 0x5e58, + 0x5575, 0x3c37, 0x3b53, 0x3024, 0x4532, 0x346c, 0x5571, 0x6a7d, + 0x5e5a, 0x4d26, 0x4d6c, 0x4e66, 0x5e5c, 0x4d31, 0x4026, 0x573d, + 0x5e5b, 0x3046, 0x3a34, 0x4953, 0x4473, 0x3e68, 0x3236, 0x404c, + 0x4b70, 0x3c71, 0x3b3b, 0x3537, 0x4575, 0x5e66, 0x5e63, 0x3e5d, + 0x5e5f, 0x3437, 0x3d5d, 0x5e60, 0x446d, 0x4f46, 0x3560, 0x365e, + 0x4a5a, 0x3574, 0x5e65, 0x5546, 0x5e61, 0x4c4d, 0x467e, 0x4545, + 0x5234, 0x3e72, 0x4253, 0x4c3d, 0x3338, 0x3d53, 0x3f58, 0x4d46, + 0x515a, 0x346b, 0x5e64, 0x5e5d, 0x5e67, 0x6a7e, 0x4230, 0x5e62, + 0x5640, 0x3527, 0x3274, 0x5e68, 0x5e72, 0x5e6d, 0x5e71, 0x4860, + 0x5761, 0x5e6f, 0x4368, 0x4c61, 0x3265, 0x523e, 0x5e6e, 0x5e6b, + 0x4e55, 0x3427, 0x3f2b, 0x3e3e, 0x3d52, 0x5e69, 0x542e, 0x5e5e, + 0x5e6a, 0x403f, 0x5e6c, 0x3273, 0x3869, 0x4227, 0x3d41, 0x5e75, + 0x5e78, 0x322b, 0x3424, 0x346a, 0x4926, 0x5e76, 0x4b51, 0x3863, + 0x5e77, 0x5e7a, 0x5e79, 0x4c42, 0x3061, 0x346e, 0x653a, 0x502f, + 0x326b, 0x6b21, 0x5e74, 0x4963, 0x5e73, 0x305a, 0x5221, 0x3177, + 0x4c2f, 0x5e70, 0x4b24, 0x552a, 0x5e7b, 0x345d, 0x4426, 0x5e7d, + 0x437e, 0x4421, 0x5f21, 0x414c, 0x5e7c, 0x3e6f, 0x4632, 0x3345, + 0x4876, 0x4b3a, 0x5e7e, 0x5f24, 0x5732, 0x3337, 0x4143, 0x474b, + 0x3225, 0x3469, 0x572b, 0x446c, 0x5f22, 0x5f23, 0x5f25, 0x3a33, + 0x5f26, 0x405e, 0x4943, 0x3259, 0x4766, 0x5f27, 0x475c, 0x5f28, + 0x6b22, 0x4b53, 0x5f2a, 0x5f29, 0x3241, 0x454a, 0x5f2b, 0x545c, + 0x4841, 0x5f2c, 0x3e70, 0x5f2d, 0x5627, 0x6a37, 0x6b36, 0x4a55, + 0x587c, 0x3844, 0x3925, 0x3745, 0x557e, 0x394a, 0x5027, 0x744d, + 0x3550, 0x4374, 0x3e48, 0x6b37, 0x303d, 0x3d4c, 0x4132, 0x3156, + 0x3328, 0x3852, 0x4922, 0x3658, 0x6b38, 0x3e34, 0x4a7d, 0x4743, + 0x557b, 0x3773, 0x4e44, 0x552b, 0x3173, 0x6c33, 0x305f, 0x6c35, + 0x3637, 0x414f, 0x757a, 0x5031, 0x5565, 0x4e53, 0x3d6f, 0x3362, + 0x382b, 0x5536, 0x6d3d, 0x364f, 0x4b39, 0x5042, 0x373d, 0x6c36, + 0x4a29, 0x4554, 0x6c39, 0x6c38, 0x4243, 0x6c37, 0x507d, 0x6c3a, + 0x6c3b, 0x5765, 0x6c3c, 0x6c3d, 0x466c, 0x4e5e, 0x3c48, 0x4855, + 0x3529, 0x3e49, 0x563c, 0x5467, 0x512e, 0x5071, 0x6a38, 0x6a39, + 0x6a3a, 0x3a35, 0x4a31, 0x3f75, 0x4d7a, 0x6a40, 0x303a, 0x6a3e, + 0x4025, 0x6a3b, 0x327d, 0x4377, 0x3b68, 0x5257, 0x4e74, 0x6a3f, + 0x6a3c, 0x6a43, 0x5047, 0x5333, 0x343a, 0x4341, 0x5772, 0x5551, + 0x4a47, 0x6a45, 0x6a44, 0x6a47, 0x6a46, 0x5667, 0x4f54, 0x6a4b, + 0x3b4e, 0x3d7a, 0x494e, 0x6a4c, 0x4939, 0x4f7e, 0x6a4a, 0x544e, + 0x6a4d, 0x6a4f, 0x4d6d, 0x6a49, 0x6a4e, 0x4e6e, 0x3b5e, 0x333f, + 0x4655, 0x3e30, 0x4e7a, 0x4767, 0x3e27, 0x6a50, 0x5647, 0x4140, + 0x545d, 0x6a51, 0x4f3e, 0x6a52, 0x4a6e, 0x452f, 0x3035, 0x6a54, + 0x6a53, 0x745f, 0x443a, 0x3129, 0x655f, 0x6a55, 0x4a6f, 0x6a56, + 0x6a57, 0x4658, 0x6a58, 0x6a59, 0x543b, 0x477a, 0x5237, 0x387c, + 0x6a42, 0x325c, 0x427c, 0x5478, 0x4c66, 0x576e, 0x5442, 0x5350, + 0x6b43, 0x4573, 0x377e, 0x6b54, 0x4b37, 0x6b5e, 0x404a, 0x4d7b, + 0x332f, 0x465a, 0x6b7c, 0x443e, 0x4e34, 0x4429, 0x313e, 0x547d, + 0x4a75, 0x566c, 0x4653, 0x3664, 0x3b7a, 0x5060, 0x4931, 0x5453, + 0x4828, 0x384b, 0x683e, 0x493c, 0x683b, 0x406e, 0x5053, 0x3244, + 0x3465, 0x683c, 0x5548, 0x3645, 0x683d, 0x4a78, 0x385c, 0x4c75, + 0x4034, 0x516e, 0x683f, 0x6842, 0x3a3c, 0x312d, 0x3d5c, 0x6a3d, + 0x6843, 0x6846, 0x684b, 0x684c, 0x4b49, 0x3065, 0x3c2b, 0x3939, + 0x6841, 0x4d77, 0x684a, 0x4e76, 0x556d, 0x4156, 0x6844, 0x4336, + 0x397b, 0x5626, 0x6848, 0x4a60, 0x5466, 0x6840, 0x6845, 0x6847, + 0x4739, 0x3763, 0x6849, 0x3f5d, 0x6852, 0x6857, 0x6855, 0x3c5c, + 0x3c4f, 0x685b, 0x685e, 0x685a, 0x317a, 0x3058, 0x4433, 0x384c, + 0x4662, 0x483e, 0x4861, 0x684f, 0x6854, 0x6856, 0x3971, 0x6858, + 0x5775, 0x447b, 0x685c, 0x3269, 0x6851, 0x3c6d, 0x3f42, 0x684d, + 0x5679, 0x4178, 0x3271, 0x685f, 0x4a41, 0x6859, 0x5524, 0x316a, + 0x553b, 0x684e, 0x6850, 0x3630, 0x6853, 0x685d, 0x4038, 0x4a77, + 0x4b28, 0x465c, 0x4075, 0x6869, 0x5023, 0x6872, 0x566a, 0x6860, + 0x6861, 0x5179, 0x3a4b, 0x3879, 0x3871, 0x5454, 0x686f, 0x686e, + 0x686c, 0x3970, 0x4c52, 0x6866, 0x4e26, 0x3f72, 0x3038, 0x6871, + 0x6870, 0x5740, 0x6864, 0x4d29, 0x4923, 0x3b38, 0x3d5b, 0x686a, + 0x6862, 0x6863, 0x6865, 0x3535, 0x6867, 0x4745, 0x686b, 0x686d, + 0x3d30, 0x572e, 0x6878, 0x6875, 0x4d30, 0x6876, 0x413a, 0x6868, + 0x4337, 0x3070, 0x6874, 0x6877, 0x3923, 0x4952, 0x434e, 0x4e60, + 0x4066, 0x4b73, 0x4c5d, 0x5035, 0x4a61, 0x6873, 0x3c6c, 0x6879, + 0x435e, 0x4665, 0x3977, 0x3074, 0x5758, 0x3c2c, 0x456f, 0x4c44, + 0x6926, 0x492d, 0x6922, 0x4062, 0x3f43, 0x687e, 0x3957, 0x687b, + 0x6924, 0x524e, 0x6923, 0x5632, 0x5735, 0x6927, 0x3d37, 0x687c, + 0x687d, 0x6921, 0x4d56, 0x522c, 0x6932, 0x6929, 0x342a, 0x343b, + 0x692b, 0x5028, 0x6925, 0x337e, 0x692c, 0x4063, 0x692a, 0x6939, + 0x6938, 0x692e, 0x687a, 0x6928, 0x3f2c, 0x6931, 0x693a, 0x4225, + 0x692f, 0x3845, 0x692d, 0x535c, 0x6934, 0x6935, 0x6937, 0x6947, + 0x4046, 0x6945, 0x6930, 0x693b, 0x3071, 0x693c, 0x5525, 0x693e, + 0x693f, 0x6941, 0x4171, 0x4836, 0x693d, 0x6942, 0x6943, 0x6933, + 0x6936, 0x3b31, 0x6940, 0x3c77, 0x6944, 0x6946, 0x694a, 0x694e, + 0x325b, 0x6948, 0x372e, 0x694b, 0x694c, 0x5541, 0x4423, 0x6958, + 0x3a61, 0x6949, 0x5323, 0x6954, 0x6957, 0x6950, 0x694f, 0x4741, + 0x6952, 0x6959, 0x3348, 0x6953, 0x4f70, 0x694d, 0x3377, 0x6956, + 0x695a, 0x4c34, 0x4f2d, 0x6955, 0x695c, 0x695b, 0x695e, 0x6951, + 0x695d, 0x695f, 0x434a, 0x4737, 0x344e, 0x3b36, 0x5040, 0x6c23, + 0x4537, 0x537b, 0x6c24, 0x6c25, 0x465b, 0x3f6e, 0x6c26, 0x6c27, + 0x502a, 0x4738, 0x3868, 0x6c28, 0x5639, 0x557d, 0x344b, 0x323d, + 0x4e64, 0x4667, 0x4d61, 0x3475, 0x4b40, 0x3c5f, 0x6962, 0x6963, + 0x516a, 0x6965, 0x3479, 0x6964, 0x5133, 0x4a62, 0x3250, 0x6968, + 0x6966, 0x6967, 0x5633, 0x6969, 0x696a, 0x696b, 0x696c, 0x6c2f, + 0x4539, 0x364e, 0x5273, 0x356e, 0x3b59, 0x6c31, 0x5263, 0x4e63, + 0x4438, 0x433f, 0x363e, 0x5839, 0x3148, 0x314f, 0x3151, 0x457e, + 0x3150, 0x432b, 0x5531, 0x6b24, 0x3a41, 0x4c3a, 0x6b25, 0x6b27, + 0x6b28, 0x6b26, 0x6b29, 0x6b2b, 0x6b2a, 0x6b2c, 0x4a4f, 0x5835, + 0x4371, 0x4325, 0x4678, 0x6b2d, 0x444a, 0x6b2e, 0x6b2f, 0x6b30, + 0x3755, 0x377a, 0x6b31, 0x4762, 0x6b33, 0x3a24, 0x5175, 0x3031, + 0x6b32, 0x6b34, 0x352a, 0x4248, 0x4768, 0x6b35, 0x4b2e, 0x635f, + 0x5340, 0x595b, 0x4d21, 0x562d, 0x4773, 0x5960, 0x3b63, 0x3a3a, + 0x6362, 0x4f2b, 0x6360, 0x4947, 0x3a39, 0x5134, 0x6361, 0x486a, + 0x392f, 0x3d2d, 0x3358, 0x4e5b, 0x4c40, 0x6368, 0x6369, 0x4d74, + 0x4c2d, 0x3c33, 0x636a, 0x636b, 0x505a, 0x467b, 0x375a, 0x475f, + 0x524a, 0x4e56, 0x6364, 0x636c, 0x4972, 0x3341, 0x6367, 0x4663, + 0x6365, 0x6d33, 0x6366, 0x4933, 0x4566, 0x3935, 0x433b, 0x6363, + 0x453d, 0x4124, 0x4259, 0x3257, 0x636d, 0x3b26, 0x442d, 0x6370, + 0x3e5a, 0x637b, 0x6375, 0x3a53, 0x3750, 0x534d, 0x564e, 0x5553, + 0x3941, 0x5534, 0x5158, 0x5039, 0x4776, 0x482a, 0x3234, 0x435a, + 0x636e, 0x637c, 0x636f, 0x3728, 0x6377, 0x6374, 0x373a, 0x4522, + 0x6376, 0x455d, 0x3228, 0x467c, 0x4460, 0x5722, 0x4061, 0x6379, + 0x637a, 0x637d, 0x4c29, 0x6373, 0x533e, 0x3143, 0x6d34, 0x6371, + 0x6372, 0x6378, 0x503a, 0x4643, 0x5473, 0x637e, 0x3d60, 0x6427, + 0x6426, 0x5173, 0x6423, 0x6429, 0x4877, 0x4f34, 0x6428, 0x642e, + 0x4265, 0x3634, 0x3d72, 0x6422, 0x3a69, 0x642a, 0x642c, 0x367d, + 0x565e, 0x6432, 0x642d, 0x6421, 0x3b6e, 0x4d5d, 0x4722, 0x4549, + 0x4177, 0x6424, 0x4733, 0x3d2c, 0x3d3d, 0x6425, 0x5747, 0x3262, + 0x642b, 0x3c43, 0x642f, 0x3b6b, 0x6430, 0x4528, 0x6431, 0x5563, + 0x3f23, 0x643a, 0x6437, 0x643b, 0x643d, 0x4656, 0x3a46, 0x404b, + 0x3821, 0x6434, 0x5421, 0x3a23, 0x3d7e, 0x643c, 0x4d3f, 0x4479, + 0x4f7b, 0x4966, 0x533f, 0x4f51, 0x6433, 0x6438, 0x6439, 0x4c69, + 0x4c4e, 0x4054, 0x6435, 0x4130, 0x6436, 0x4e50, 0x3b41, 0x3553, + 0x4873, 0x3d27, 0x5547, 0x492c, 0x3822, 0x644a, 0x644c, 0x5144, + 0x523a, 0x3a2d, 0x3a54, 0x6443, 0x356d, 0x574d, 0x6440, 0x4f7d, + 0x643f, 0x415c, 0x4c4a, 0x4a67, 0x4457, 0x4c54, 0x6448, 0x6447, + 0x6441, 0x6444, 0x352d, 0x5359, 0x6446, 0x5279, 0x3463, 0x3b34, + 0x496e, 0x343e, 0x3b6c, 0x514d, 0x4c6d, 0x6d35, 0x4765, 0x5428, + 0x644b, 0x5755, 0x6442, 0x3d25, 0x6445, 0x5366, 0x6449, 0x4978, + 0x643e, 0x5365, 0x477e, 0x3649, 0x547c, 0x3233, 0x6457, 0x4e42, + 0x644d, 0x4e3c, 0x385b, 0x6456, 0x3f4a, 0x534e, 0x436c, 0x4548, + 0x6458, 0x4d44, 0x644f, 0x6454, 0x6455, 0x3a7e, 0x4f66, 0x553f, + 0x6452, 0x6450, 0x644e, 0x4d65, 0x4a2a, 0x4023, 0x3d26, 0x6453, + 0x3848, 0x6467, 0x5434, 0x645b, 0x416f, 0x6469, 0x5267, 0x645f, + 0x6460, 0x4f2a, 0x4b5d, 0x645a, 0x6451, 0x6465, 0x485c, 0x6463, + 0x4467, 0x6462, 0x6461, 0x337c, 0x6468, 0x3561, 0x574c, 0x6466, + 0x3b2c, 0x5752, 0x4c4f, 0x6b78, 0x6464, 0x3976, 0x564d, 0x6459, + 0x645c, 0x427a, 0x645e, 0x424b, 0x4044, 0x4250, 0x3175, 0x4c32, + 0x354e, 0x646f, 0x462f, 0x4661, 0x6475, 0x4229, 0x406c, 0x515d, + 0x646e, 0x442e, 0x646d, 0x6476, 0x6474, 0x427e, 0x645d, 0x6470, + 0x4a7e, 0x5544, 0x6471, 0x517a, 0x646b, 0x646c, 0x6472, 0x4e2b, + 0x454b, 0x4731, 0x423a, 0x646a, 0x414a, 0x4c36, 0x3331, 0x647b, + 0x6473, 0x647a, 0x647d, 0x647c, 0x334e, 0x333a, 0x6477, 0x6479, + 0x6478, 0x456c, 0x403d, 0x5468, 0x6522, 0x3044, 0x6524, 0x6523, + 0x3c24, 0x6525, 0x6521, 0x647e, 0x3174, 0x6528, 0x6529, 0x6526, + 0x6527, 0x652a, 0x4659, 0x652b, 0x652d, 0x652c, 0x652f, 0x652e, + 0x3960, 0x6530, 0x6531, 0x3b70, 0x6c61, 0x4370, 0x3546, 0x3b52, + 0x4169, 0x546e, 0x3e44, 0x5746, 0x5456, 0x3253, 0x6c3e, 0x6a41, + 0x422f, 0x3436, 0x5157, 0x3334, 0x4832, 0x3f3b, 0x6c40, 0x564b, + 0x6c3f, 0x6c41, 0x6c45, 0x3e66, 0x4c3f, 0x455a, 0x3e3c, 0x6c46, + 0x317e, 0x6c44, 0x5528, 0x3563, 0x6c42, 0x4136, 0x3363, 0x6c43, + 0x4b38, 0x4043, 0x4c7e, 0x4152, 0x6c48, 0x3a66, 0x4053, 0x5672, + 0x514c, 0x3f3e, 0x3733, 0x4955, 0x6c47, 0x3b62, 0x4c4c, 0x3d7d, + 0x4848, 0x4f29, 0x4d69, 0x456b, 0x3769, 0x5149, 0x3a38, 0x6c49, + 0x6c4a, 0x3b40, 0x6c4b, 0x6c62, 0x313a, 0x3759, 0x3d39, 0x6c4c, + 0x5166, 0x6c4d, 0x483b, 0x6c51, 0x6c53, 0x3b4d, 0x3c65, 0x6c4f, + 0x4937, 0x433a, 0x6c63, 0x5555, 0x6c50, 0x5673, 0x6c52, 0x6c4e, + 0x6c54, 0x6c55, 0x493f, 0x4f28, 0x505c, 0x512c, 0x485b, 0x6c56, + 0x4e75, 0x4a6c, 0x6c5a, 0x6c59, 0x303e, 0x6c57, 0x6c58, 0x6c64, + 0x483c, 0x4147, 0x6c5c, 0x5160, 0x6c5b, 0x546f, 0x6c5d, 0x5b46, + 0x6c5e, 0x312c, 0x6c5f, 0x6c60, 0x5726, 0x4540, 0x6b3c, 0x302e, + 0x3e74, 0x3838, 0x522f, 0x3056, 0x3579, 0x5833, 0x4b2c, 0x635d, + 0x462c, 0x3066, 0x4546, 0x6b39, 0x6b3a, 0x6b3b, 0x5140, 0x4523, + 0x6a72, 0x4432, 0x4435, 0x404e, 0x6a73, 0x4441, 0x4e6f, 0x6a70, + 0x6a74, 0x497c, 0x4723, 0x4c58, 0x4e7e, 0x6a75, 0x6a76, 0x4f2c, + 0x4067, 0x6a77, 0x363f, 0x6a78, 0x6a79, 0x6a7a, 0x6a7b, 0x6a71, + 0x482e, 0x616b, 0x3738, 0x616c, 0x616d, 0x5734, 0x616e, 0x616f, + 0x534c, 0x6171, 0x3f71, 0x6170, 0x3552, 0x3137, 0x6173, 0x6172, + 0x3a7c, 0x6174, 0x3937, 0x3e51, 0x447c, 0x3a5d, 0x3d46, 0x6175, + 0x6177, 0x3640, 0x4f41, 0x4a28, 0x6176, 0x5578, 0x537c, 0x6178, + 0x617c, 0x6179, 0x617a, 0x406a, 0x617e, 0x6221, 0x4047, 0x617b, + 0x617d, 0x6225, 0x4154, 0x6223, 0x6228, 0x327e, 0x6222, 0x434d, + 0x3242, 0x6227, 0x6226, 0x6224, 0x6229, 0x622b, 0x5049, 0x566d, + 0x4328, 0x622c, 0x4f57, 0x622e, 0x3a6f, 0x6960, 0x622d, 0x622a, + 0x3b2b, 0x5433, 0x6230, 0x622f, 0x6961, 0x6231, 0x6232, 0x6233, + 0x4c21, 0x6234, 0x6235, 0x507e, 0x424a, 0x5371, 0x4d75, 0x6760, + 0x6761, 0x3e41, 0x426a, 0x6764, 0x6763, 0x4d66, 0x4335, 0x6762, + 0x3b37, 0x4f56, 0x4161, 0x6769, 0x6768, 0x6774, 0x3223, 0x676a, + 0x6766, 0x676c, 0x676b, 0x493a, 0x5564, 0x6765, 0x3729, 0x6767, + 0x676e, 0x6773, 0x5669, 0x676d, 0x6772, 0x6771, 0x3060, 0x6775, + 0x4772, 0x4045, 0x406d, 0x4170, 0x6770, 0x6776, 0x4b76, 0x6822, + 0x6821, 0x5741, 0x677a, 0x6779, 0x677b, 0x6777, 0x677e, 0x677d, + 0x677c, 0x4155, 0x4759, 0x457d, 0x4543, 0x476d, 0x6823, 0x6826, + 0x6825, 0x6827, 0x3a77, 0x6778, 0x6824, 0x4870, 0x492a, 0x6829, + 0x3965, 0x517e, 0x6828, 0x682a, 0x682d, 0x682e, 0x4127, 0x682f, + 0x6830, 0x682c, 0x6834, 0x682b, 0x6831, 0x6835, 0x6832, 0x6833, + 0x6837, 0x6836, 0x394f, 0x702c, 0x702d, 0x4630, 0x306a, 0x483f, + 0x4d5f, 0x4e4d, 0x6a31, 0x6a32, 0x463f, 0x3449, 0x6a33, 0x5567, + 0x5d79, 0x6a34, 0x6a35, 0x6a36, 0x384a, 0x5f30, 0x4975, 0x4c70, + 0x497a, 0x497b, 0x5343, 0x4b26, 0x3826, 0x702e, 0x3142, 0x6538, + 0x4c6f, 0x5349, 0x3c57, 0x496a, 0x3567, 0x4450, 0x3569, 0x6e2e, + 0x3b2d, 0x675e, 0x6e2f, 0x3329, 0x6e32, 0x6e31, 0x3d67, 0x6e30, + 0x4e37, 0x454f, 0x4174, 0x5b4e, 0x6e33, 0x5073, 0x4254, 0x4668, + 0x372c, 0x6e34, 0x336b, 0x3b7b, 0x6e35, 0x675c, 0x6e36, 0x3d2e, + 0x7162, 0x4a68, 0x5249, 0x705a, 0x705b, 0x705c, 0x4146, 0x386d, + 0x3e4e, 0x705e, 0x4531, 0x705d, 0x5171, 0x7060, 0x304c, 0x3d6a, + 0x525f, 0x705f, 0x342f, 0x3768, 0x7066, 0x7065, 0x4623, 0x7061, + 0x7062, 0x3443, 0x7063, 0x556e, 0x4c5b, 0x3e52, 0x3c32, 0x7068, + 0x7067, 0x7064, 0x3221, 0x5622, 0x5338, 0x3e37, 0x482c, 0x706a, + 0x5177, 0x564c, 0x3a5b, 0x7069, 0x363b, 0x4d34, 0x4626, 0x4121, + 0x706b, 0x706e, 0x706d, 0x7070, 0x706c, 0x3b3e, 0x706f, 0x4c35, + 0x7072, 0x3355, 0x3154, 0x7073, 0x7074, 0x7076, 0x3461, 0x7071, + 0x7077, 0x707a, 0x7078, 0x7075, 0x707d, 0x7079, 0x707c, 0x707e, + 0x7121, 0x4e41, 0x7124, 0x7123, 0x4176, 0x707b, 0x4a5d, 0x3471, + 0x3171, 0x4c31, 0x7126, 0x7127, 0x712c, 0x554e, 0x7129, 0x4833, + 0x7122, 0x712b, 0x7128, 0x7125, 0x712a, 0x3029, 0x712d, 0x712f, + 0x7131, 0x7130, 0x712e, 0x5122, 0x7132, 0x7133, 0x396f, 0x3547, + 0x3057, 0x3059, 0x546d, 0x3544, 0x3d54, 0x3b4a, 0x7027, 0x385e, + 0x7028, 0x3028, 0x7029, 0x4d6e, 0x702a, 0x702b, 0x4624, 0x5665, + 0x7164, 0x7165, 0x4373, 0x535b, 0x5651, 0x4568, 0x532f, 0x5266, + 0x6e41, 0x303b, 0x5535, 0x514e, 0x3c60, 0x3a50, 0x3f78, 0x3847, + 0x3541, 0x454c, 0x4a22, 0x434b, 0x6e42, 0x443f, 0x3622, 0x6d6c, + 0x4324, 0x5631, 0x4f60, 0x6d6f, 0x454e, 0x365c, 0x4a21, 0x6d6d, + 0x6d70, 0x6d71, 0x433c, 0x3f34, 0x6d6e, 0x6d74, 0x6d72, 0x5566, + 0x435f, 0x6d73, 0x6d76, 0x5523, 0x5123, 0x6d75, 0x4350, 0x6d77, + 0x3f74, 0x3e6c, 0x6d78, 0x4c77, 0x515b, 0x5745, 0x5576, 0x6d7c, + 0x6d7b, 0x6d79, 0x6d7a, 0x6d7d, 0x3e26, 0x4b2f, 0x6e21, 0x363d, + 0x6e22, 0x4440, 0x6d7e, 0x3d5e, 0x3247, 0x3643, 0x6e25, 0x583a, + 0x6e23, 0x6e26, 0x4369, 0x3372, 0x6e27, 0x6e24, 0x4f39, 0x6e28, + 0x4277, 0x6e29, 0x6e2a, 0x5e2b, 0x4633, 0x4746, 0x5675, 0x3549, + 0x4b32, 0x6e2b, 0x4d2b, 0x6e2c, 0x5530, 0x6e2d, 0x7644, 0x5b47, + 0x3423, 0x432c, 0x7166, 0x4a38, 0x5253, 0x562a, 0x6f72, 0x3e58, + 0x3d43, 0x6f73, 0x364c, 0x302b, 0x4a2f, 0x6d36, 0x6d37, 0x4e79, + 0x372f, 0x3f73, 0x6d38, 0x426b, 0x4930, 0x6d39, 0x4676, 0x3f33, + 0x6d3c, 0x4578, 0x5150, 0x5729, 0x6d3a, 0x6d3b, 0x5162, 0x6d3f, + 0x6d40, 0x6d44, 0x6d48, 0x6d46, 0x6d4e, 0x5568, 0x6d49, 0x6d47, + 0x6d3e, 0x4569, 0x4646, 0x4969, 0x5452, 0x6d41, 0x6d42, 0x6d43, + 0x6d45, 0x4079, 0x3421, 0x3968, 0x6d50, 0x6d51, 0x6d4a, 0x6d4f, + 0x4e78, 0x4b36, 0x6d4c, 0x6d4d, 0x4f75, 0x6d52, 0x4172, 0x5332, + 0x6d4b, 0x4837, 0x3c6f, 0x4570, 0x6d56, 0x356f, 0x4235, 0x302d, + 0x4b69, 0x312e, 0x6d54, 0x4d6b, 0x3562, 0x6d55, 0x6d53, 0x6d57, + 0x357a, 0x6d58, 0x6d59, 0x6d5c, 0x314c, 0x4576, 0x3c6e, 0x6d5a, + 0x4c3c, 0x326a, 0x6d5b, 0x446b, 0x3445, 0x3075, 0x6d5f, 0x405a, + 0x3468, 0x454d, 0x6d5d, 0x3f44, 0x6d5e, 0x4425, 0x6d60, 0x6d61, + 0x6d63, 0x4157, 0x3b47, 0x3d38, 0x6d62, 0x6d64, 0x6d66, 0x6d65, + 0x6d67, 0x4a3e, 0x6c6a, 0x4071, 0x4967, 0x6c6b, 0x466e, 0x6c6c, + 0x466d, 0x6c6d, 0x6c70, 0x5766, 0x6c73, 0x6c71, 0x6c6e, 0x6c6f, + 0x5723, 0x4971, 0x4b6e, 0x6c74, 0x6c72, 0x4f69, 0x6c76, 0x4631, + 0x3c40, 0x6c75, 0x353b, 0x3b76, 0x6c77, 0x5977, 0x3d7b, 0x423b, + 0x6c78, 0x6c79, 0x3823, 0x6c7a, 0x6c7b, 0x6c7c, 0x536d, 0x582e, + 0x406b, 0x475d, 0x3a4c, 0x5063, 0x4b3d, 0x4d3a, 0x3851, 0x317c, + 0x476f, 0x5656, 0x3f46, 0x436b, 0x6f75, 0x4358, 0x5762, 0x6f77, + 0x3353, 0x4758, 0x516d, 0x5648, 0x6f78, 0x6f76, 0x3b7d, 0x3346, + 0x3d55, 0x5246, 0x3b60, 0x4f21, 0x6f7c, 0x6f7b, 0x6f79, 0x334c, + 0x4954, 0x4b30, 0x6f7e, 0x305e, 0x5649, 0x6f7d, 0x336d, 0x7655, + 0x4e48, 0x7022, 0x7021, 0x353e, 0x3c5a, 0x3b7c, 0x3865, 0x4442, + 0x7023, 0x4b6b, 0x7026, 0x5128, 0x3e3f, 0x476e, 0x7136, 0x7137, + 0x3f55, 0x3429, 0x7138, 0x4d3b, 0x4754, 0x552d, 0x7139, 0x713a, + 0x474f, 0x5224, 0x564f, 0x713b, 0x3d51, 0x3430, 0x3e3d, 0x345c, + 0x4e51, 0x3f5f, 0x713d, 0x3f7a, 0x713c, 0x713f, 0x713e, 0x7140, + 0x7141, 0x417e, 0x4122, 0x4a7a, 0x553e, 0x3e3a, 0x3e39, 0x5542, + 0x3f22, 0x4d2f, 0x7135, 0x3d5f, 0x364b, 0x5671, 0x7343, 0x7344, + 0x384d, 0x7346, 0x7347, 0x304a, 0x7345, 0x7349, 0x4b71, 0x734b, + 0x5026, 0x314a, 0x7348, 0x734f, 0x3551, 0x7357, 0x7352, 0x7354, + 0x7353, 0x377b, 0x313f, 0x734e, 0x734a, 0x355a, 0x7350, 0x7351, + 0x7355, 0x734d, 0x3c63, 0x417d, 0x7356, 0x735a, 0x734c, 0x3548, + 0x3d6e, 0x735c, 0x3724, 0x3f70, 0x567e, 0x4d32, 0x3470, 0x325f, + 0x7358, 0x7359, 0x4938, 0x735d, 0x735e, 0x7361, 0x735f, 0x7363, + 0x7362, 0x735b, 0x3f6a, 0x336f, 0x7360, 0x4729, 0x3c72, 0x736b, + 0x393f, 0x7364, 0x322d, 0x3b7e, 0x4b63, 0x736d, 0x7369, 0x395c, + 0x736e, 0x7365, 0x7366, 0x736a, 0x4261, 0x736c, 0x736f, 0x7368, + 0x3c7d, 0x4f64, 0x7370, 0x7367, 0x7372, 0x572d, 0x462a, 0x7373, + 0x7371, 0x4228, 0x385d, 0x7375, 0x7374, 0x345b, 0x7376, 0x7377, + 0x7378, 0x403a, 0x4069, 0x4571, 0x737b, 0x737a, 0x3458, 0x737e, + 0x7379, 0x737c, 0x737d, 0x7421, 0x7423, 0x3b49, 0x7422, 0x7424, + 0x323e, 0x7426, 0x7425, 0x3c2e, 0x4357, 0x5961, 0x4060, 0x744c, + 0x5751, 0x375b, 0x744e, 0x4123, 0x4649, 0x3456, 0x5533, 0x7450, + 0x744f, 0x7451, 0x4b5a, 0x7452, 0x5441, 0x5660, 0x3760, 0x4138, + 0x413b, 0x7453, 0x3e2c, 0x3462, 0x7454, 0x7455, 0x3e2b, 0x7456, + 0x745b, 0x7457, 0x745a, 0x3a7d, 0x7458, 0x7459, 0x3862, 0x4c47, + 0x745c, 0x325a, 0x4353, 0x5463, 0x3f37, 0x745d, 0x4534, 0x7469, + 0x4f35, 0x4e49, 0x4b58, 0x4b77, 0x3d74, 0x574f, 0x405b, 0x5075, + 0x746a, 0x746b, 0x746c, 0x7763, 0x3731, 0x746d, 0x576b, 0x746e, + 0x6679, 0x3e40, 0x667a, 0x3a6c, 0x667b, 0x4f4b, 0x667c, 0x543c, + 0x3c36, 0x667d, 0x667e, 0x3c4d, 0x4852, 0x4e33, 0x6721, 0x343f, + 0x6722, 0x4934, 0x3859, 0x4449, 0x575d, 0x425a, 0x3757, 0x563d, + 0x4e46, 0x3744, 0x4526, 0x6723, 0x4f5f, 0x6724, 0x6725, 0x6726, + 0x4137, 0x5769, 0x4970, 0x4f38, 0x562f, 0x5655, 0x6727, 0x306d, + 0x6728, 0x6729, 0x495c, 0x526f, 0x3e2d, 0x672a, 0x3073, 0x485e, + 0x3d61, 0x672b, 0x4846, 0x672c, 0x3b66, 0x3878, 0x5124, 0x672d, + 0x4267, 0x3e78, 0x3d4a, 0x4d33, 0x672e, 0x672f, 0x3e6e, 0x5065, + 0x4b67, 0x4c50, 0x3c4c, 0x6730, 0x3c28, 0x5077, 0x6731, 0x5078, + 0x6732, 0x6733, 0x3442, 0x6734, 0x6735, 0x497e, 0x4e2c, 0x4360, + 0x6737, 0x3141, 0x3371, 0x6738, 0x6739, 0x575b, 0x5540, 0x673a, + 0x424c, 0x573a, 0x673b, 0x673c, 0x673d, 0x3c6a, 0x4365, 0x4042, + 0x673e, 0x673f, 0x3c29, 0x6740, 0x6741, 0x6736, 0x3650, 0x6742, + 0x6743, 0x6744, 0x3b3a, 0x355e, 0x4246, 0x3160, 0x6745, 0x5435, + 0x6746, 0x383f, 0x6748, 0x6747, 0x376c, 0x6749, 0x3278, 0x674a, + 0x674b, 0x674c, 0x674d, 0x674e, 0x674f, 0x6750, 0x5327, 0x4b75, + 0x6751, 0x6752, 0x6753, 0x6754, 0x4949, 0x6755, 0x6756, 0x6757, + 0x6758, 0x6759, 0x3d49, 0x675a, 0x733e, 0x3857, 0x4831, 0x733f, + 0x7340, 0x7341, 0x395e, 0x4d78, 0x5868, 0x3a31, 0x425e, 0x6e37, + 0x3723, 0x6e39, 0x6e38, 0x3055, 0x6e3b, 0x5556, 0x576f, 0x5643, + 0x6e3d, 0x4a70, 0x6e3c, 0x6e3e, 0x6e40, 0x6e3f, 0x5172, 0x473c, + 0x4340, 0x3861, 0x4167, 0x7446, 0x505f, 0x7447, 0x4f5b, 0x483a, + 0x7448, 0x7449, 0x744a, 0x744b, 0x597a, 0x387e, 0x6571, 0x5370, + 0x7460, 0x4e4c, 0x3361, 0x7134, 0x526e, 0x7461, 0x4f68, 0x7462, + 0x474c, 0x3554, 0x3464, 0x7464, 0x7463, 0x7465, 0x7466, 0x7467, + 0x3a32, 0x303f, 0x7468, 0x372d, 0x526d, 0x522b, 0x404f, 0x3f3c, + 0x6b23, 0x555f, 0x6a48, 0x7173, 0x3678, 0x4b23, 0x444d, 0x7167, + 0x7168, 0x387b, 0x7169, 0x3a44, 0x5445, 0x3052, 0x716a, 0x716b, + 0x716c, 0x716d, 0x716e, 0x716f, 0x7171, 0x7170, 0x4555, 0x7172, + 0x367a, 0x7174, 0x522e, 0x5e47, 0x4b4a, 0x335c, 0x3522, 0x3922, + 0x4474, 0x7175, 0x7176, 0x4144, 0x417b, 0x5630, 0x7177, 0x7178, + 0x412a, 0x4638, 0x3e5b, 0x7179, 0x344f, 0x717a, 0x6d32, 0x6d31, + 0x4b60, 0x525e, 0x4b41, 0x5558, 0x4862, 0x405f, 0x3c21, 0x6b41, + 0x5024, 0x5662, 0x3647, 0x3858, 0x6b40, 0x384e, 0x6b3f, 0x3326, + 0x3949, 0x562b, 0x3774, 0x374a, 0x3c67, 0x373e, 0x6b46, 0x6b47, + 0x3039, 0x3f4f, 0x6b45, 0x537d, 0x6b48, 0x6b49, 0x374e, 0x6b42, + 0x6b44, 0x4976, 0x5657, 0x554d, 0x5032, 0x6b4f, 0x4e38, 0x6b50, + 0x3528, 0x3133, 0x6b52, 0x4c25, 0x4556, 0x6b53, 0x6b51, 0x455f, + 0x6b4e, 0x4a24, 0x6b55, 0x307b, 0x3a7a, 0x5837, 0x7163, 0x6b4a, + 0x6b4b, 0x6b4c, 0x6b4d, 0x6b56, 0x6640, 0x6b59, 0x3f68, 0x5248, + 0x6b57, 0x6b5c, 0x386c, 0x6b58, 0x3d3a, 0x5058, 0x3037, 0x6b5d, + 0x445c, 0x562c, 0x3460, 0x4276, 0x3c39, 0x6b5a, 0x6b5b, 0x5460, + 0x466a, 0x4454, 0x6b5f, 0x4527, 0x5975, 0x3231, 0x6b64, 0x3d45, + 0x6b62, 0x6b63, 0x382c, 0x4d51, 0x6b65, 0x6b61, 0x4133, 0x4622, + 0x4c73, 0x6b66, 0x4030, 0x5238, 0x6b67, 0x382f, 0x382d, 0x6b68, + 0x473b, 0x4d73, 0x6b6a, 0x6b6b, 0x6b6d, 0x5048, 0x6b72, 0x6b6e, + 0x6b71, 0x4879, 0x517c, 0x6b6c, 0x6b69, 0x3839, 0x4f59, 0x4465, + 0x6b6f, 0x6b70, 0x4c5a, 0x4d48, 0x3072, 0x6b76, 0x6b75, 0x3232, + 0x3860, 0x6b77, 0x316c, 0x4c45, 0x4424, 0x4f25, 0x6b79, 0x6c22, + 0x4572, 0x6b7a, 0x4945, 0x625f, 0x6b7e, 0x4d4e, 0x6c21, 0x315b, + 0x5337, 0x525c, 0x6b7d, 0x6b7b, 0x333c, 0x6a30, 0x5754, 0x742b, + 0x3374, 0x5641, 0x5642, 0x5569, 0x3e4a, 0x7427, 0x5228, 0x7428, + 0x7429, 0x742a, 0x3e4b, 0x535f, 0x4960, 0x4961, 0x7342, 0x4a66, + 0x4c72, 0x6236, 0x4b34, 0x4e68, 0x565b, 0x742d, 0x742e, 0x742f, + 0x7432, 0x3a3d, 0x7433, 0x3063, 0x7430, 0x7431, 0x3d22, 0x3255, + 0x7436, 0x7437, 0x3666, 0x3230, 0x4f4f, 0x7434, 0x342c, 0x7435, + 0x7438, 0x7439, 0x4d27, 0x743a, 0x743b, 0x743c, 0x4b52, 0x743d, + 0x743e, 0x743f, 0x745e, 0x413c, 0x3c68, 0x492b, 0x515e, 0x6575, + 0x5c33, 0x5255, 0x5c34, 0x302c, 0x5c35, 0x3d5a, 0x5c39, 0x5842, + 0x5c37, 0x5373, 0x4956, 0x5c3a, 0x5c36, 0x5c3b, 0x4322, 0x5c3c, + 0x5c45, 0x5c3d, 0x4e5f, 0x5625, 0x5c4f, 0x5c4d, 0x5c52, 0x3d66, + 0x422b, 0x5c38, 0x5c4b, 0x5c4e, 0x5c3e, 0x3752, 0x3045, 0x5c47, + 0x503e, 0x5c41, 0x3b28, 0x373c, 0x5c4c, 0x5c46, 0x5c3f, 0x475b, + 0x513f, 0x5c40, 0x5c4a, 0x5c50, 0x4e2d, 0x5c42, 0x5c43, 0x5c48, + 0x5c49, 0x3254, 0x5c51, 0x4b55, 0x5437, 0x5c5b, 0x5c5f, 0x4c26, + 0x5c66, 0x4367, 0x5c5c, 0x3f41, 0x5c59, 0x307a, 0x3936, 0x5c65, + 0x5c53, 0x5c44, 0x5c56, 0x4874, 0x3f60, 0x493b, 0x313d, 0x5322, + 0x5c5a, 0x5c55, 0x463b, 0x5c5e, 0x5742, 0x432f, 0x3736, 0x4751, + 0x4329, 0x5c62, 0x5c58, 0x5c6b, 0x5c54, 0x5c5d, 0x3e25, 0x5c57, + 0x5c60, 0x5c63, 0x5c64, 0x5c78, 0x5c61, 0x5d22, 0x5c67, 0x3c6b, + 0x3444, 0x4323, 0x3267, 0x5c7a, 0x5c72, 0x5c6f, 0x5c7c, 0x5c6e, + 0x5270, 0x3268, 0x4857, 0x4863, 0x5c7b, 0x5c6d, 0x5c77, 0x5c75, + 0x3e23, 0x5c74, 0x325d, 0x5c73, 0x3c76, 0x5c68, 0x3b44, 0x4073, + 0x3c54, 0x5c69, 0x5c6a, 0x5c71, 0x5c76, 0x5c79, 0x3534, 0x4859, + 0x3b67, 0x5c7e, 0x5c7d, 0x532b, 0x5d21, 0x5d23, 0x5d25, 0x5271, + 0x5d24, 0x5d26, 0x5d27, 0x5229, 0x3a49, 0x5d29, 0x5d36, 0x5d31, + 0x5d34, 0x5d30, 0x464e, 0x4072, 0x492f, 0x5c6c, 0x5d2e, 0x5d37, + 0x5c70, 0x5d2f, 0x5d38, 0x5d2c, 0x5d39, 0x5d33, 0x5d2d, 0x442a, + 0x5d28, 0x4033, 0x412b, 0x5d2a, 0x5d2b, 0x5d32, 0x3b71, 0x5d35, + 0x5328, 0x5d3a, 0x5d3b, 0x4327, 0x5d52, 0x5d3c, 0x5d51, 0x393d, + 0x3e55, 0x3e7a, 0x3a4a, 0x5d4a, 0x5d45, 0x5d3f, 0x324b, 0x5d43, + 0x5d4b, 0x3224, 0x5d55, 0x5d3e, 0x4650, 0x5d50, 0x5d54, 0x4162, + 0x3746, 0x5d4e, 0x5d4f, 0x5d44, 0x5d3d, 0x5d4d, 0x4c51, 0x5d49, + 0x5d42, 0x4348, 0x463c, 0x4e2e, 0x5d4c, 0x5d48, 0x5d41, 0x5d46, + 0x425c, 0x5329, 0x532a, 0x5d53, 0x4f74, 0x4878, 0x5d66, 0x5d47, + 0x5d60, 0x4264, 0x5d61, 0x5d57, 0x5678, 0x5d59, 0x5d58, 0x3870, + 0x5d56, 0x464f, 0x362d, 0x5d62, 0x3a79, 0x5461, 0x5d67, 0x3450, + 0x5d5a, 0x3f7b, 0x5d63, 0x5d5f, 0x5d5d, 0x3559, 0x5d5b, 0x5d5c, + 0x5d5e, 0x3d2f, 0x5d64, 0x5d65, 0x5d75, 0x4349, 0x4b62, 0x5d72, + 0x5861, 0x4651, 0x5d74, 0x5574, 0x5d73, 0x5d70, 0x5d6c, 0x5d6f, + 0x5d68, 0x506e, 0x4858, 0x5d6e, 0x5d69, 0x5d6a, 0x4b72, 0x5d6d, + 0x314d, 0x4036, 0x3c3b, 0x5d71, 0x5d77, 0x5d76, 0x5d6b, 0x456e, + 0x5d7b, 0x5e24, 0x5e23, 0x5d78, 0x436f, 0x427b, 0x5561, 0x4e35, + 0x5d7d, 0x324c, 0x4468, 0x4a5f, 0x473e, 0x5d7a, 0x5d7c, 0x5d7e, + 0x5e22, 0x302a, 0x314e, 0x5e2c, 0x5e26, 0x3d36, 0x486f, 0x5e21, + 0x5e25, 0x5e29, 0x5e28, 0x5e27, 0x5e2d, 0x544c, 0x5e33, 0x5e2a, + 0x5e2e, 0x4059, 0x3121, 0x5e36, 0x5e31, 0x5e32, 0x5126, 0x5e35, + 0x5e2f, 0x5e30, 0x503d, 0x5e34, 0x4a6d, 0x5e39, 0x5e38, 0x5e37, + 0x5e3b, 0x3d65, 0x3258, 0x436a, 0x5e3a, 0x453a, 0x5e3c, 0x4c59, + 0x372a, 0x5465, 0x5e3d, 0x5e3f, 0x4422, 0x5e41, 0x5e3e, 0x5e40, + 0x553a, 0x5e42, 0x722e, 0x3b22, 0x4232, 0x4530, 0x4247, 0x722f, + 0x5069, 0x535d, 0x6b3d, 0x3366, 0x7230, 0x7231, 0x4a2d, 0x3a67, + 0x7233, 0x7235, 0x7234, 0x4b64, 0x4f3a, 0x7232, 0x4a34, 0x524f, + 0x426c, 0x4e43, 0x7238, 0x3076, 0x7237, 0x723e, 0x324f, 0x5141, + 0x723a, 0x723c, 0x5469, 0x723b, 0x7236, 0x723f, 0x723d, 0x7239, + 0x7247, 0x7244, 0x7246, 0x724a, 0x7242, 0x7240, 0x7245, 0x567b, + 0x7241, 0x4779, 0x495f, 0x7248, 0x3946, 0x3530, 0x7243, 0x7249, + 0x7250, 0x7256, 0x3b57, 0x7255, 0x4d5c, 0x566b, 0x7252, 0x7254, + 0x3872, 0x724b, 0x724e, 0x4279, 0x555d, 0x724c, 0x724d, 0x724f, + 0x7253, 0x7259, 0x533c, 0x366a, 0x4a71, 0x3764, 0x7257, 0x7258, + 0x725a, 0x725d, 0x725b, 0x725c, 0x5151, 0x7251, 0x4d49, 0x4e4f, + 0x5629, 0x7263, 0x435b, 0x7260, 0x402f, 0x726c, 0x725e, 0x7261, + 0x7268, 0x7262, 0x7267, 0x7266, 0x7269, 0x725f, 0x7264, 0x726a, + 0x532c, 0x7265, 0x3275, 0x7272, 0x502b, 0x7275, 0x3b48, 0x7279, + 0x7270, 0x7276, 0x7278, 0x727a, 0x7273, 0x7271, 0x3a7b, 0x357b, + 0x726f, 0x7277, 0x726d, 0x726e, 0x726b, 0x7326, 0x7323, 0x7322, + 0x7274, 0x485a, 0x727b, 0x7325, 0x4378, 0x727d, 0x7327, 0x7329, + 0x7324, 0x727c, 0x732b, 0x732a, 0x425d, 0x732e, 0x7330, 0x7321, + 0x7331, 0x732c, 0x732f, 0x727e, 0x732d, 0x7332, 0x7334, 0x7328, + 0x7333, 0x7335, 0x5037, 0x7338, 0x5979, 0x7339, 0x7337, 0x4864, + 0x7336, 0x733a, 0x733b, 0x3440, 0x6e43, 0x733c, 0x733d, 0x512a, + 0x742c, 0x5046, 0x5050, 0x515c, 0x4f4e, 0x3d56, 0x5143, 0x3a62, + 0x6169, 0x5242, 0x7142, 0x3239, 0x316d, 0x7143, 0x4940, 0x3344, + 0x5972, 0x4b25, 0x7144, 0x5654, 0x7145, 0x7440, 0x7146, 0x542c, + 0x7147, 0x3040, 0x7441, 0x7442, 0x347c, 0x455b, 0x4c3b, 0x5064, + 0x4d60, 0x7148, 0x5973, 0x313b, 0x4f2e, 0x3824, 0x714a, 0x714b, + 0x3243, 0x4151, 0x5730, 0x7149, 0x714c, 0x714e, 0x5976, 0x5261, + 0x5423, 0x7443, 0x4839, 0x7444, 0x714d, 0x714f, 0x3f63, 0x7150, + 0x7154, 0x7156, 0x7151, 0x4951, 0x4561, 0x4263, 0x397c, 0x7153, + 0x7155, 0x3953, 0x715b, 0x3a56, 0x307d, 0x7159, 0x7158, 0x7152, + 0x715a, 0x7157, 0x486c, 0x4d4a, 0x715d, 0x653d, 0x715c, 0x715e, + 0x715f, 0x4f65, 0x7445, 0x3d73, 0x7160, 0x7161, 0x4e77, 0x522a, + 0x717b, 0x3832, 0x3c7b, 0x395b, 0x3966, 0x4359, 0x4a53, 0x6a68, + 0x4040, 0x3e75, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d, 0x6a6e, + 0x6a6f, 0x3d47, 0x757b, 0x757d, 0x757e, 0x757c, 0x3d62, 0x7621, + 0x3425, 0x7622, 0x7623, 0x6c32, 0x5154, 0x596a, 0x7624, 0x6e3a, + 0x5532, 0x537e, 0x4c5c, 0x4a44, 0x6540, 0x7625, 0x3e2f, 0x4629, + 0x5a25, 0x3c46, 0x3629, 0x383c, 0x484f, 0x3c25, 0x5a26, 0x5a27, + 0x4c56, 0x4843, 0x5a28, 0x467d, 0x5135, 0x5269, 0x5136, 0x3c47, + 0x3d32, 0x3b64, 0x5a29, 0x5a2a, 0x5148, 0x5a2b, 0x506d, 0x366f, + 0x425b, 0x4b4f, 0x376d, 0x4968, 0x3743, 0x3e77, 0x5624, 0x5a2c, + 0x5a2d, 0x4640, 0x5767, 0x4a36, 0x5529, 0x4b5f, 0x556f, 0x5a2e, + 0x565f, 0x344a, 0x5a30, 0x5a2f, 0x526b, 0x5a31, 0x5a32, 0x5a33, + 0x4a54, 0x5a34, 0x4a2b, 0x5a35, 0x5a36, 0x334f, 0x566f, 0x5a37, + 0x3b30, 0x352e, 0x5a38, 0x5a39, 0x396e, 0x512f, 0x5268, 0x5a3a, + 0x3843, 0x4f6a, 0x326f, 0x5a3b, 0x5a3c, 0x3d6b, 0x4e5c, 0x536f, + 0x5a3d, 0x4e73, 0x5a3e, 0x5355, 0x3b65, 0x5a3f, 0x4b35, 0x4b50, + 0x5a40, 0x476b, 0x566e, 0x5a41, 0x4535, 0x3641, 0x5a42, 0x374c, + 0x3f4e, 0x5a43, 0x5a44, 0x4b2d, 0x5a45, 0x3577, 0x5a46, 0x4142, + 0x573b, 0x5a47, 0x4c38, 0x526a, 0x4431, 0x5a48, 0x357d, 0x3b51, + 0x5a49, 0x5033, 0x5a4a, 0x5a4b, 0x4e3d, 0x5a4c, 0x5a4d, 0x5a4e, + 0x3277, 0x5a51, 0x5a4f, 0x5168, 0x5a50, 0x4355, 0x5a52, 0x5a53, + 0x5a54, 0x5a55, 0x503b, 0x5225, 0x3079, 0x5a56, 0x472b, 0x5a57, + 0x3d77, 0x4321, 0x5a58, 0x5a59, 0x437d, 0x4c37, 0x5a5a, 0x5a5b, + 0x403e, 0x4657, 0x5a5c, 0x5a5d, 0x4734, 0x5a5e, 0x5a5f, 0x3948, + 0x3b6d, 0x3639, 0x7478, 0x7479, 0x4d63, 0x7539, 0x6b60, 0x4f73, + 0x3b3f, 0x3a40, 0x5425, 0x6159, 0x7574, 0x312a, 0x3272, 0x7575, + 0x7577, 0x3a51, 0x7576, 0x4332, 0x7579, 0x7578, 0x3134, 0x556a, + 0x383a, 0x3931, 0x3246, 0x5470, 0x4f4d, 0x305c, 0x554b, 0x3b75, + 0x564a, 0x3737, 0x4c30, 0x4636, 0x3161, 0x393a, 0x567c, 0x3961, + 0x3721, 0x3c7a, 0x6a5a, 0x6a5b, 0x4c79, 0x3973, 0x6a5c, 0x347b, + 0x4333, 0x3751, 0x3a58, 0x6a5d, 0x5474, 0x6a5e, 0x3c56, 0x3b5f, + 0x6a5f, 0x415e, 0x4238, 0x545f, 0x574a, 0x6a60, 0x6a61, 0x6a64, + 0x6a62, 0x6a63, 0x495e, 0x3833, 0x3644, 0x6a65, 0x4a6a, 0x494d, + 0x344d, 0x6259, 0x4562, 0x6a66, 0x4035, 0x5738, 0x6a67, 0x572c, + 0x487c, 0x5853, 0x584d, 0x545e, 0x5479, 0x4944, 0x532e, 0x3853, + 0x3360, 0x4962, 0x7476, 0x3a55, 0x7477, 0x575f, 0x7471, 0x3830, + 0x5554, 0x384f, 0x4670, 0x3343, 0x7472, 0x332c, 0x543d, 0x4777, + 0x7474, 0x7473, 0x4c4b, 0x4824, 0x7475, 0x5763, 0x453f, 0x7540, + 0x753b, 0x7543, 0x7542, 0x563a, 0x7541, 0x543e, 0x7544, 0x754c, + 0x304f, 0x3578, 0x7549, 0x754a, 0x455c, 0x7545, 0x7546, 0x7547, + 0x754b, 0x3e60, 0x7548, 0x387a, 0x7550, 0x7553, 0x3f67, 0x3972, + 0x753c, 0x754d, 0x4237, 0x4c78, 0x3c79, 0x754e, 0x754f, 0x7551, + 0x3665, 0x7552, 0x7555, 0x753d, 0x7554, 0x533b, 0x336c, 0x4c24, + 0x7556, 0x7557, 0x3e61, 0x7558, 0x4c5f, 0x755b, 0x3248, 0x5759, + 0x7559, 0x755a, 0x755c, 0x7562, 0x7560, 0x755f, 0x755d, 0x7561, + 0x755e, 0x7564, 0x7565, 0x4c63, 0x653f, 0x3538, 0x7563, 0x7568, + 0x4c23, 0x7566, 0x7567, 0x753e, 0x3144, 0x753f, 0x3545, 0x3264, + 0x756c, 0x7569, 0x3657, 0x756d, 0x756a, 0x756b, 0x345a, 0x546a, + 0x756e, 0x3379, 0x756f, 0x7571, 0x7570, 0x7572, 0x7573, 0x496d, + 0x392a, 0x477b, 0x3663, 0x4c49, 0x6a26, 0x3335, 0x547e, 0x396c, + 0x5079, 0x696d, 0x572a, 0x696e, 0x4256, 0x486d, 0x3a64, 0x696f, + 0x6970, 0x6971, 0x5661, 0x6972, 0x6973, 0x6975, 0x6974, 0x6976, + 0x6977, 0x4761, 0x6978, 0x5458, 0x6979, 0x3d4e, 0x697a, 0x697b, + 0x3d4f, 0x697c, 0x3828, 0x413e, 0x697d, 0x3132, 0x3b54, 0x3975, + 0x697e, 0x6a21, 0x6a22, 0x6a23, 0x3778, 0x3c2d, 0x4a64, 0x604e, + 0x542f, 0x4f3d, 0x5537, 0x6a24, 0x555e, 0x6a25, 0x5041, 0x393c, + 0x3447, 0x3159, 0x4031, 0x3166, 0x3167, 0x3168, 0x333d, 0x4868, + 0x6541, 0x315f, 0x4149, 0x346f, 0x4728, 0x5358, 0x4679, 0x5138, + 0x397d, 0x4275, 0x532d, 0x544b, 0x3d7c, 0x6542, 0x3735, 0x6543, + 0x3b39, 0x5562, 0x3d78, 0x5436, 0x4e25, 0x412c, 0x3359, 0x4c76, + 0x6546, 0x6544, 0x6548, 0x654a, 0x6547, 0x354f, 0x4648, 0x357c, + 0x6545, 0x4a76, 0x6549, 0x4354, 0x3145, 0x3c23, 0x5737, 0x4d4b, + 0x4b4d, 0x4a4a, 0x4c53, 0x654c, 0x654b, 0x4466, 0x5121, 0x5137, + 0x654d, 0x6550, 0x4d38, 0x5670, 0x654f, 0x355d, 0x4d3e, 0x6551, + 0x363a, 0x4d28, 0x3964, 0x4a45, 0x3351, 0x4b59, 0x546c, 0x6552, + 0x376a, 0x654e, 0x6555, 0x347e, 0x6556, 0x6553, 0x6554, 0x525d, + 0x425f, 0x3146, 0x5362, 0x365d, 0x4b6c, 0x6557, 0x5376, 0x3169, + 0x3674, 0x655a, 0x6558, 0x6559, 0x3540, 0x5245, 0x655c, 0x655e, + 0x655d, 0x4732, 0x5223, 0x655b, 0x5462, 0x555a, 0x6560, 0x5771, + 0x6561, 0x315c, 0x517b, 0x6562, 0x6564, 0x6563, 0x6565, 0x5258, + 0x354b, 0x675f, 0x5a75, 0x5a78, 0x5a76, 0x5a77, 0x5a7a, 0x504f, + 0x4447, 0x306e, 0x5030, 0x5a79, 0x534a, 0x3a2a, 0x5b22, 0x4771, + 0x5a7c, 0x5a7b, 0x495b, 0x5a7d, 0x5b21, 0x575e, 0x5a7e, 0x415a, + 0x5b25, 0x5374, 0x5b27, 0x5b24, 0x5b28, 0x3d3c, 0x4049, 0x5b23, + 0x5b26, 0x5623, 0x5b29, 0x5b2d, 0x5b2e, 0x5b2c, 0x3a42, 0x3f24, + 0x5b2b, 0x5b2a, 0x5447, 0x323f, 0x5b2f, 0x3979, 0x5b30, 0x333b, + 0x3526, 0x363c, 0x5b31, 0x3675, 0x5b32, 0x3149, 0x5b34, 0x5b33, + 0x5b35, 0x5b37, 0x5b36, 0x5b38, 0x5b39, 0x5b3a, 0x534f, 0x747a, + 0x4775, 0x5743, 0x4564, 0x747c, 0x747d, 0x747b, 0x3e46, 0x506f, + 0x3753, 0x544d, 0x4c2a, 0x7522, 0x7521, 0x3a28, 0x747e, 0x4b56, + 0x7524, 0x4052, 0x336a, 0x4d2a, 0x7525, 0x7523, 0x3d34, 0x7528, + 0x7529, 0x3d4d, 0x4338, 0x3f61, 0x4b61, 0x752a, 0x7526, 0x7527, + 0x4470, 0x752c, 0x343c, 0x576d, 0x3457, 0x752b, 0x752e, 0x752d, + 0x752f, 0x5051, 0x4351, 0x4829, 0x7530, 0x7531, 0x7532, 0x7533, + 0x7534, 0x7535, 0x7537, 0x7536, 0x7538, 0x3249, 0x5354, 0x4a4d, + 0x406f, 0x5658, 0x5230, 0x413f, 0x3d70, 0x382a, 0x3c78, 0x7646, + 0x7647, 0x7648, 0x7649, 0x764a, 0x764c, 0x764b, 0x7769, 0x764d, + 0x764e, 0x6e44, 0x6e45, 0x6e46, 0x556b, 0x3624, 0x6e48, 0x6e47, + 0x6e49, 0x6e4a, 0x4725, 0x6e4b, 0x6e4c, 0x3730, 0x3576, 0x6e4d, + 0x6e4f, 0x6e4e, 0x3846, 0x6e50, 0x6e51, 0x6e52, 0x365b, 0x332e, + 0x5653, 0x4446, 0x3135, 0x3856, 0x6e53, 0x6e54, 0x543f, 0x4755, + 0x3e7b, 0x4e59, 0x3933, 0x6e56, 0x6e55, 0x6e58, 0x6e57, 0x4525, + 0x6e59, 0x6e5a, 0x472e, 0x6e5b, 0x472f, 0x6e5c, 0x3227, 0x6e5d, + 0x6e5e, 0x6e5f, 0x6e60, 0x6e61, 0x576a, 0x6e62, 0x6e63, 0x3c58, + 0x6e64, 0x534b, 0x4c7a, 0x322c, 0x4165, 0x6e65, 0x4726, 0x432d, + 0x6e66, 0x6e67, 0x6e68, 0x6e69, 0x6e6a, 0x6e6b, 0x6e6c, 0x6e6d, + 0x6e6e, 0x6e6f, 0x6e70, 0x6e71, 0x6e72, 0x6e74, 0x6e73, 0x6e75, + 0x4d2d, 0x4241, 0x6e76, 0x6e77, 0x6e78, 0x5521, 0x6e79, 0x4f33, + 0x6e7a, 0x6e7b, 0x6e7c, 0x6e7d, 0x6f21, 0x6e7e, 0x6f22, 0x3875, + 0x437a, 0x6f23, 0x6f24, 0x3d42, 0x523f, 0x3279, 0x6f25, 0x6f26, + 0x6f27, 0x5278, 0x6f28, 0x567d, 0x6f29, 0x464c, 0x6f2a, 0x6f2b, + 0x4134, 0x6f2c, 0x4f7a, 0x4b78, 0x6f2e, 0x6f2d, 0x337a, 0x3978, + 0x6f2f, 0x6f30, 0x5062, 0x6f31, 0x6f32, 0x3766, 0x503f, 0x6f33, + 0x6f34, 0x6f35, 0x4871, 0x4c60, 0x6f36, 0x6f37, 0x6f38, 0x6f39, + 0x6f3a, 0x5560, 0x6f3b, 0x346d, 0x432a, 0x6f3c, 0x6f3d, 0x6f3e, + 0x6f3f, 0x4e7d, 0x6f40, 0x4260, 0x3438, 0x5736, 0x3d75, 0x4f47, + 0x6f43, 0x6f41, 0x6f42, 0x6f44, 0x3627, 0x3c7c, 0x3e62, 0x434c, + 0x6f45, 0x6f46, 0x6f47, 0x6f4f, 0x6f48, 0x6f49, 0x6f4a, 0x4742, + 0x6f71, 0x364d, 0x6f4b, 0x6f4c, 0x6f4d, 0x3646, 0x433e, 0x6f4e, + 0x6f50, 0x6f51, 0x6f52, 0x5572, 0x6f53, 0x4477, 0x6f54, 0x4478, + 0x6f55, 0x6f56, 0x3864, 0x3077, 0x6f57, 0x6f58, 0x6f59, 0x6f5a, + 0x6f5b, 0x6f5c, 0x6f5d, 0x6f5e, 0x3e35, 0x6f61, 0x6f5f, 0x6f60, + 0x6f62, 0x6f63, 0x414d, 0x6f64, 0x6f65, 0x6f66, 0x6f67, 0x6f68, + 0x6f69, 0x6f6a, 0x6f6b, 0x6f6c, 0x4058, 0x6f6d, 0x412d, 0x6f6e, + 0x6f6f, 0x6f70, 0x4f62, 0x3324, 0x4345, 0x6345, 0x4941, 0x6346, + 0x3155, 0x4e4a, 0x3433, 0x4872, 0x6347, 0x4f50, 0x6348, 0x3c64, + 0x6349, 0x634a, 0x4346, 0x5522, 0x4456, 0x396b, 0x4e45, 0x634b, + 0x4376, 0x634c, 0x3727, 0x3873, 0x3a52, 0x634d, 0x634e, 0x5444, + 0x634f, 0x6350, 0x514b, 0x6351, 0x6352, 0x6353, 0x6354, 0x5156, + 0x6355, 0x327b, 0x403b, 0x6356, 0x402b, 0x6357, 0x6358, 0x6359, + 0x635a, 0x635b, 0x3837, 0x5a62, 0x3653, 0x5a64, 0x5a63, 0x5a66, + 0x486e, 0x5a65, 0x3740, 0x5174, 0x5275, 0x5573, 0x3d57, 0x5768, + 0x5a68, 0x5a67, 0x3022, 0x4d53, 0x5a69, 0x383d, 0x3c4a, 0x423d, + 0x4224, 0x3342, 0x5a6a, 0x422a, 0x4430, 0x3d35, 0x4f5e, 0x5a6b, + 0x4942, 0x315d, 0x5a6c, 0x3638, 0x543a, 0x337d, 0x5a6d, 0x5449, + 0x4f55, 0x4563, 0x5a6e, 0x5a6f, 0x5a70, 0x416a, 0x4c55, 0x4f5d, + 0x5367, 0x4221, 0x5a71, 0x4b65, 0x5a72, 0x4b66, 0x527e, 0x3874, + 0x5a73, 0x302f, 0x4f36, 0x554f, 0x4b6d, 0x5a74, 0x6344, 0x4125, + 0x763f, 0x7640, 0x7641, 0x4451, 0x4838, 0x5163, 0x505b, 0x5145, + 0x3c2f, 0x394d, 0x6f74, 0x3446, 0x533a, 0x7642, 0x337b, 0x7643, + 0x3571, 0x7645, 0x536a, 0x7627, 0x5129, 0x7629, 0x7628, 0x4163, + 0x4057, 0x3122, 0x4e6d, 0x5068, 0x762b, 0x4f76, 0x762a, 0x5570, + 0x762c, 0x4339, 0x3b74, 0x762e, 0x762d, 0x445e, 0x4158, 0x4b2a, + 0x4f3c, 0x762f, 0x7630, 0x7631, 0x4236, 0x3054, 0x4579, 0x7632, + 0x4760, 0x7626, 0x3e38, 0x3e32, 0x3565, 0x3747, 0x3f3f, 0x4352, + 0x4366, 0x584c, 0x386f, 0x3d79, 0x5125, 0x3050, 0x7730, 0x7731, + 0x502c, 0x3030, 0x7732, 0x7733, 0x7734, 0x474a, 0x3e4f, 0x7737, + 0x7736, 0x315e, 0x7735, 0x7738, 0x7739, 0x4e24, 0x484d, 0x3a2b, + 0x6838, 0x6839, 0x683a, 0x3e42, 0x5274, 0x544f, 0x4958, 0x5233, + 0x3625, 0x476a, 0x717c, 0x4f6e, 0x4b33, 0x506b, 0x676f, 0x4d67, + 0x394b, 0x3659, 0x717d, 0x3064, 0x4b4c, 0x717e, 0x5424, 0x422d, + 0x416c, 0x4644, 0x3e31, 0x7221, 0x3c55, 0x7222, 0x7223, 0x7224, + 0x5243, 0x4635, 0x4d47, 0x7225, 0x5331, 0x3f45, 0x4c62, 0x7226, + 0x7227, 0x5155, 0x366e, 0x7228, 0x7229, 0x355f, 0x722a, 0x722b, + 0x327c, 0x722c, 0x722d, 0x4827, 0x3767, 0x6c29, 0x6c2a, 0x6c2b, + 0x6c2c, 0x462e, 0x6c2d, 0x6c2e, 0x3749, 0x4a33, 0x6238, 0x774f, + 0x7750, 0x324d, 0x7751, 0x7753, 0x7752, 0x623b, 0x3c22, 0x623c, + 0x623d, 0x623e, 0x623f, 0x6240, 0x6241, 0x3739, 0x527b, 0x3d24, + 0x4a4e, 0x3125, 0x4b47, 0x6242, 0x367c, 0x4844, 0x6243, 0x3d48, + 0x317d, 0x6244, 0x3676, 0x6245, 0x4459, 0x6246, 0x4f5a, 0x395d, + 0x6247, 0x4021, 0x6248, 0x3276, 0x6249, 0x4173, 0x624a, 0x624b, + 0x4278, 0x624c, 0x624d, 0x624e, 0x4a57, 0x5838, 0x5965, 0x4f63, + 0x7025, 0x5c30, 0x426d, 0x5426, 0x4d54, 0x5131, 0x335b, 0x477d, + 0x3235, 0x423f, 0x6660, 0x4a3b, 0x6661, 0x6662, 0x3e54, 0x6663, + 0x5724, 0x4d55, 0x6665, 0x3c5d, 0x6664, 0x6666, 0x6667, 0x426e, + 0x3d3e, 0x6668, 0x4266, 0x3a27, 0x6669, 0x666a, 0x3352, 0x5169, + 0x3f25, 0x666b, 0x466f, 0x666c, 0x666d, 0x666e, 0x462d, 0x666f, + 0x4927, 0x6670, 0x6671, 0x6672, 0x6539, 0x6673, 0x6674, 0x4262, + 0x6675, 0x6676, 0x5668, 0x6677, 0x6678, 0x3947, 0x773b, 0x773a, + 0x773e, 0x773c, 0x3a21, 0x773f, 0x7740, 0x7742, 0x7741, 0x7744, + 0x7743, 0x7745, 0x7746, 0x7747, 0x4b68, 0x385f, 0x7754, 0x7755, + 0x7756, 0x7758, 0x775a, 0x7757, 0x775b, 0x7759, 0x5757, 0x775c, + 0x775d, 0x775e, 0x775f, 0x7760, 0x5b4b, 0x582a, 0x6577, 0x396d, + 0x3f7d, 0x3b6a, 0x7749, 0x4647, 0x7748, 0x774a, 0x774c, 0x774b, + 0x774d, 0x4e3a, 0x774e, 0x4427, 0x5363, 0x764f, 0x4233, 0x7650, + 0x7651, 0x7652, 0x7653, 0x7654, 0x7656, 0x312b, 0x7657, 0x7658, + 0x7659, 0x765a, 0x765b, 0x765c, 0x765d, 0x765e, 0x4f4a, 0x765f, + 0x7660, 0x7661, 0x7662, 0x7663, 0x7664, 0x4070, 0x7665, 0x7666, + 0x7667, 0x7668, 0x7669, 0x766a, 0x766b, 0x766c, 0x766d, 0x766e, + 0x766f, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x3e28, 0x7675, + 0x7676, 0x7677, 0x7678, 0x487a, 0x7679, 0x767a, 0x767b, 0x767c, + 0x767d, 0x767e, 0x7721, 0x7722, 0x7723, 0x7724, 0x7725, 0x7726, + 0x7727, 0x7728, 0x316e, 0x7729, 0x772a, 0x772b, 0x772c, 0x772d, + 0x415b, 0x772e, 0x772f, 0x4471, 0x702f, 0x3c26, 0x7030, 0x4379, + 0x4538, 0x513b, 0x7031, 0x7032, 0x7033, 0x7034, 0x7035, 0x513c, + 0x516c, 0x7037, 0x7036, 0x5427, 0x4d52, 0x7038, 0x703a, 0x7039, + 0x703b, 0x703c, 0x386b, 0x703d, 0x3a68, 0x703e, 0x703f, 0x3e69, + 0x7040, 0x366c, 0x7041, 0x7042, 0x7043, 0x7044, 0x4835, 0x7045, + 0x7046, 0x7047, 0x4574, 0x7048, 0x7049, 0x704a, 0x773d, 0x704b, + 0x704c, 0x704d, 0x704e, 0x704f, 0x3a57, 0x7050, 0x7051, 0x7052, + 0x7053, 0x7054, 0x7055, 0x7056, 0x7058, 0x5325, 0x7057, 0x7059, + 0x753a, 0x4239, 0x7764, 0x7765, 0x7766, 0x7767, 0x7768, 0x4234, + 0x776a, 0x776b, 0x4273, 0x7470, 0x746f, 0x4269, 0x7761, 0x7762, + 0x3b46, 0x5964, 0x4a72, 0x4068, 0x7024, 0x3a5a, 0x472d, 0x442c, + 0x776c, 0x776d, 0x776e, 0x7770, 0x776f, 0x7771, 0x7774, 0x7773, + 0x7772, 0x7775, 0x7776, 0x6d69, 0x6d6a, 0x6d6b, 0x763c, 0x763d, + 0x763e, 0x3626, 0x583e, 0x3944, 0x583b, 0x5c31, 0x4a73, 0x7777, + 0x7778, 0x7779, 0x777b, 0x777a, 0x3147, 0x777c, 0x777d, 0x777e, + 0x466b, 0x6c34, 0x335d, 0x7633, 0x7634, 0x4164, 0x7635, 0x7636, + 0x7637, 0x7638, 0x7639, 0x763a, 0x4823, 0x763b, 0x417a, 0x3928, + 0x6d68, 0x396a, 0x595f, 0x2321, 0x2322, 0x2323, 0x2167, 0x2325, + 0x2326, 0x2327, 0x2328, 0x2329, 0x232a, 0x232b, 0x232c, 0x232d, + 0x232e, 0x232f, 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, + 0x2336, 0x2337, 0x2338, 0x2339, 0x233a, 0x233b, 0x233c, 0x233d, + 0x233e, 0x233f, 0x2340, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, + 0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, + 0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, + 0x2356, 0x2357, 0x2358, 0x2359, 0x235a, 0x235b, 0x235c, 0x235d, + 0x235e, 0x235f, 0x2360, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, + 0x2366, 0x2367, 0x2368, 0x2369, 0x236a, 0x236b, 0x236c, 0x236d, + 0x236e, 0x236f, 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, + 0x2376, 0x2377, 0x2378, 0x2379, 0x237a, 0x237b, 0x237c, 0x237d, + 0x212b, 0x2169, 0x216a, 0x237e, 0x2324, +}; + +static const Summary16 gb2312_uni2indx_page00[70] = { + /* 0x0000 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0190 }, { 3, 0x0003 }, + { 5, 0x0000 }, { 5, 0x0080 }, { 6, 0x3703 }, { 13, 0x168c }, + /* 0x0100 */ + { 19, 0x0002 }, { 20, 0x0808 }, { 22, 0x0800 }, { 23, 0x0000 }, + { 23, 0x2000 }, { 24, 0x0000 }, { 24, 0x0800 }, { 25, 0x0000 }, + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, + { 25, 0x4000 }, { 26, 0x1555 }, { 33, 0x0000 }, { 33, 0x0000 }, + /* 0x0200 */ + { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, + { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, + { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, + { 33, 0x0280 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, + /* 0x0300 */ + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, + { 35, 0x0000 }, { 35, 0xfffe }, { 50, 0x03fb }, { 59, 0xfffe }, + { 74, 0x03fb }, { 83, 0x0000 }, { 83, 0x0000 }, { 83, 0x0000 }, + /* 0x0400 */ + { 83, 0x0002 }, { 84, 0xffff }, { 100, 0xffff }, { 116, 0xffff }, + { 132, 0xffff }, { 148, 0x0002 }, +}; +static const Summary16 gb2312_uni2indx_page20[101] = { + /* 0x2000 */ + { 149, 0x0000 }, { 149, 0x3360 }, { 155, 0x0040 }, { 156, 0x080d }, + { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, + { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, + { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, + /* 0x2100 */ + { 160, 0x0008 }, { 161, 0x0040 }, { 162, 0x0000 }, { 162, 0x0000 }, + { 162, 0x0000 }, { 162, 0x0000 }, { 162, 0x0fff }, { 174, 0x0000 }, + { 174, 0x0000 }, { 174, 0x000f }, { 178, 0x0000 }, { 178, 0x0000 }, + { 178, 0x0000 }, { 178, 0x0000 }, { 178, 0x0000 }, { 178, 0x0000 }, + /* 0x2200 */ + { 178, 0x8100 }, { 180, 0x6402 }, { 184, 0x4fa1 }, { 192, 0x20f0 }, + { 197, 0x1100 }, { 199, 0x0000 }, { 199, 0xc033 }, { 205, 0x0000 }, + { 205, 0x0000 }, { 205, 0x0200 }, { 206, 0x0020 }, { 207, 0x0000 }, + { 207, 0x0000 }, { 207, 0x0000 }, { 207, 0x0000 }, { 207, 0x0000 }, + /* 0x2300 */ + { 207, 0x0000 }, { 207, 0x0004 }, { 208, 0x0000 }, { 208, 0x0000 }, + { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, + { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, + { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, + /* 0x2400 */ + { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, + { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x03ff }, { 218, 0xfff0 }, + { 230, 0xffff }, { 246, 0x0fff }, { 258, 0x0000 }, { 258, 0x0000 }, + { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, + /* 0x2500 */ + { 258, 0xffff }, { 274, 0xffff }, { 290, 0xffff }, { 306, 0xffff }, + { 322, 0x0fff }, { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0000 }, + { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0003 }, { 336, 0x000c }, + { 338, 0xc8c0 }, { 343, 0x0000 }, { 343, 0x0000 }, { 343, 0x0000 }, + /* 0x2600 */ + { 343, 0x0060 }, { 345, 0x0000 }, { 345, 0x0000 }, { 345, 0x0000 }, + { 345, 0x0005 }, +}; +static const Summary16 gb2312_uni2indx_page30[35] = { + /* 0x3000 */ + { 347, 0xff2f }, { 360, 0x00fb }, { 367, 0x0000 }, { 367, 0x0000 }, + { 367, 0xfffe }, { 382, 0xffff }, { 398, 0xffff }, { 414, 0xffff }, + { 430, 0xffff }, { 446, 0x000f }, { 450, 0xfffe }, { 465, 0xffff }, + { 481, 0xffff }, { 497, 0xffff }, { 513, 0xffff }, { 529, 0x087f }, + /* 0x3100 */ + { 537, 0xffe0 }, { 548, 0xffff }, { 564, 0x03ff }, { 574, 0x0000 }, + { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, + { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, + { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, + /* 0x3200 */ + { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x03ff }, +}; +static const Summary16 gb2312_uni2indx_page4e[1263] = { + /* 0x4e00 */ + { 584, 0x7f8b }, { 595, 0x7f7b }, { 608, 0x3db4 }, { 617, 0xef55 }, + { 628, 0xfba8 }, { 638, 0xf35d }, { 649, 0x0243 }, { 653, 0x400b }, + { 657, 0xfb40 }, { 665, 0x8d3e }, { 674, 0x7bf7 }, { 687, 0x8c2c }, + { 693, 0x6eff }, { 706, 0xe3fa }, { 717, 0x1d3a }, { 725, 0xa8ed }, + /* 0x4f00 */ + { 734, 0xe602 }, { 740, 0xcf83 }, { 749, 0x8cf5 }, { 758, 0x3555 }, + { 766, 0xe048 }, { 771, 0xffab }, { 784, 0x92b9 }, { 792, 0xd859 }, + { 800, 0xab18 }, { 807, 0x2892 }, { 812, 0xd7e9 }, { 823, 0x8020 }, + { 825, 0xc438 }, { 831, 0xf583 }, { 840, 0xe74a }, { 849, 0x450a }, + /* 0x5000 */ + { 854, 0xb000 }, { 857, 0x9714 }, { 864, 0x7762 }, { 873, 0x5400 }, + { 876, 0xd188 }, { 882, 0x1420 }, { 885, 0x1020 }, { 887, 0xc8c0 }, + { 892, 0x2121 }, { 896, 0x0000 }, { 896, 0x13a8 }, { 902, 0x0c04 }, + { 905, 0x8000 }, { 906, 0x0440 }, { 908, 0x70c0 }, { 913, 0x0828 }, + /* 0x5100 */ + { 916, 0x08c0 }, { 919, 0x0004 }, { 920, 0x0002 }, { 921, 0x8000 }, + { 922, 0x2b7b }, { 932, 0x1472 }, { 938, 0x7924 }, { 945, 0x3bfb }, + { 957, 0x3327 }, { 965, 0x1ae4 }, { 972, 0x9835 }, { 979, 0x38ef }, + { 989, 0x9ad1 }, { 997, 0x2802 }, { 1000, 0xa813 }, { 1006, 0xbf69 }, + /* 0x5200 */ + { 1017, 0x65cf }, { 1027, 0x2fc6 }, { 1036, 0x6b11 }, { 1043, 0xafc9 }, + { 1053, 0x340f }, { 1060, 0x5053 }, { 1066, 0x86a2 }, { 1072, 0xa004 }, + { 1075, 0x0106 }, { 1078, 0xe809 }, { 1084, 0x3f0f }, { 1094, 0xc00e }, + { 1099, 0x0a88 }, { 1103, 0x8145 }, { 1108, 0x0010 }, { 1109, 0xc601 }, + /* 0x5300 */ + { 1114, 0xa161 }, { 1120, 0x26e1 }, { 1127, 0x444b }, { 1133, 0xce00 }, + { 1138, 0xc7aa }, { 1147, 0xd4ee }, { 1157, 0xcadf }, { 1168, 0x85bb }, + { 1177, 0x3a74 }, { 1185, 0xa520 }, { 1190, 0x436c }, { 1197, 0x8840 }, + { 1200, 0x3f06 }, { 1208, 0x8bd2 }, { 1216, 0xff79 }, { 1229, 0x3bef }, + /* 0x5400 */ + { 1241, 0xf75a }, { 1252, 0xe8ef }, { 1263, 0xfbcb }, { 1275, 0x5b36 }, + { 1284, 0x0d49 }, { 1290, 0x1bfd }, { 1301, 0x0154 }, { 1305, 0x39ee }, + { 1315, 0xd855 }, { 1323, 0x2e75 }, { 1332, 0xbfd8 }, { 1343, 0xa91a }, + { 1350, 0xf3d7 }, { 1362, 0xf6bf }, { 1375, 0x67e0 }, { 1383, 0xb40c }, + /* 0x5500 */ + { 1389, 0x82c2 }, { 1394, 0x0813 }, { 1398, 0xd49d }, { 1407, 0xd08b }, + { 1414, 0x065a }, { 1420, 0x1061 }, { 1424, 0x74f2 }, { 1433, 0x59e0 }, + { 1440, 0x8f9f }, { 1451, 0xb312 }, { 1458, 0x0080 }, { 1459, 0x6aaa }, + { 1467, 0x3230 }, { 1472, 0xb05e }, { 1480, 0x9d7a }, { 1490, 0x60ac }, + /* 0x5600 */ + { 1496, 0xd303 }, { 1503, 0xc900 }, { 1507, 0x3098 }, { 1512, 0x8a56 }, + { 1519, 0x7000 }, { 1522, 0x1390 }, { 1527, 0x1f14 }, { 1534, 0x1842 }, + { 1538, 0xc060 }, { 1542, 0x0008 }, { 1543, 0x8008 }, { 1545, 0x1080 }, + { 1547, 0x0400 }, { 1548, 0xec90 }, { 1555, 0x2817 }, { 1561, 0xe633 }, + /* 0x5700 */ + { 1570, 0x0758 }, { 1576, 0x9000 }, { 1578, 0xf708 }, { 1586, 0x4e09 }, + { 1592, 0xf485 }, { 1600, 0xfc83 }, { 1609, 0xaf53 }, { 1619, 0x18c8 }, + { 1624, 0x187c }, { 1631, 0x080c }, { 1634, 0x6adf }, { 1645, 0x0114 }, + { 1648, 0xc80c }, { 1653, 0xa734 }, { 1661, 0xa011 }, { 1665, 0x2710 }, + /* 0x5800 */ + { 1670, 0x28c5 }, { 1676, 0x4222 }, { 1680, 0x0413 }, { 1684, 0x0021 }, + { 1686, 0x3010 }, { 1689, 0x4112 }, { 1693, 0x1820 }, { 1696, 0x4000 }, + { 1697, 0x022b }, { 1702, 0xc60c }, { 1708, 0x0300 }, { 1710, 0x1000 }, + { 1711, 0x0022 }, { 1713, 0x0022 }, { 1715, 0x5810 }, { 1719, 0x0249 }, + /* 0x5900 */ + { 1723, 0xa094 }, { 1728, 0x9670 }, { 1735, 0xeeb0 }, { 1744, 0x1792 }, + { 1751, 0xcb96 }, { 1760, 0x05f2 }, { 1767, 0x0025 }, { 1770, 0x2358 }, + { 1776, 0x25de }, { 1785, 0x42cc }, { 1791, 0xcf38 }, { 1800, 0x4a04 }, + { 1804, 0x0c40 }, { 1807, 0x359f }, { 1817, 0x1128 }, { 1821, 0x8a00 }, + /* 0x5a00 */ + { 1824, 0x13fa }, { 1833, 0x910a }, { 1838, 0x0229 }, { 1842, 0x1056 }, + { 1847, 0x0641 }, { 1851, 0x0420 }, { 1853, 0x0484 }, { 1856, 0x84f0 }, + { 1862, 0x0000 }, { 1862, 0x0c04 }, { 1865, 0x0400 }, { 1866, 0x412c }, + { 1871, 0x1206 }, { 1875, 0x1154 }, { 1880, 0x0a4b }, { 1886, 0x0002 }, + /* 0x5b00 */ + { 1887, 0x0200 }, { 1888, 0x00c0 }, { 1890, 0x0000 }, { 1890, 0x0094 }, + { 1893, 0x0001 }, { 1894, 0xbfbb }, { 1907, 0x167c }, { 1915, 0x242b }, + { 1921, 0x9bbb }, { 1932, 0x7fa8 }, { 1942, 0x0c7f }, { 1951, 0xe379 }, + { 1961, 0x10f4 }, { 1967, 0xe00d }, { 1973, 0x4132 }, { 1978, 0x9f01 }, + /* 0x5c00 */ + { 1985, 0x8652 }, { 1991, 0x3572 }, { 1999, 0x10b4 }, { 2004, 0xff12 }, + { 2014, 0xcf27 }, { 2024, 0x4223 }, { 2029, 0xc06b }, { 2036, 0x8602 }, + { 2040, 0x3106 }, { 2045, 0x1fd3 }, { 2055, 0x3a0c }, { 2061, 0xa1aa }, + { 2068, 0x0812 }, { 2071, 0x0204 }, { 2073, 0x2572 }, { 2080, 0x0801 }, + /* 0x5d00 */ + { 2082, 0x40cc }, { 2087, 0x4850 }, { 2091, 0x62d0 }, { 2097, 0x6010 }, + { 2100, 0x1c80 }, { 2104, 0x2900 }, { 2107, 0x9a00 }, { 2111, 0x0010 }, + { 2112, 0x0004 }, { 2113, 0x2200 }, { 2115, 0x0000 }, { 2115, 0x0080 }, + { 2116, 0x2020 }, { 2118, 0x6800 }, { 2121, 0xcbe6 }, { 2131, 0x609e }, + /* 0x5e00 */ + { 2138, 0x916e }, { 2146, 0x3f73 }, { 2157, 0x60c0 }, { 2161, 0x3982 }, + { 2167, 0x1034 }, { 2171, 0x4830 }, { 2175, 0x0006 }, { 2177, 0xbd5c }, + { 2187, 0x8cd1 }, { 2194, 0xd6fb }, { 2206, 0x20e1 }, { 2211, 0x43e8 }, + { 2218, 0x0600 }, { 2220, 0x084e }, { 2225, 0x0500 }, { 2227, 0xc4d0 }, + /* 0x5f00 */ + { 2233, 0x8d1f }, { 2242, 0x89aa }, { 2249, 0xa6e1 }, { 2257, 0x1602 }, + { 2261, 0x0001 }, { 2262, 0x21ed }, { 2270, 0x3656 }, { 2278, 0x1a8b }, + { 2285, 0x1fb7 }, { 2296, 0x13a5 }, { 2303, 0x6502 }, { 2308, 0x30a0 }, + { 2312, 0xb278 }, { 2320, 0x23c7 }, { 2328, 0x6c93 }, { 2336, 0xe922 }, + /* 0x6000 */ + { 2343, 0xe47f }, { 2354, 0x3a74 }, { 2362, 0x8fe3 }, { 2372, 0x9820 }, + { 2376, 0x280e }, { 2381, 0x2625 }, { 2387, 0xbf9c }, { 2398, 0xbf49 }, + { 2408, 0x3218 }, { 2413, 0xac54 }, { 2420, 0xb949 }, { 2428, 0x1916 }, + { 2434, 0x0c60 }, { 2438, 0xb522 }, { 2445, 0xfbc1 }, { 2455, 0x0659 }, + /* 0x6100 */ + { 2461, 0xe343 }, { 2469, 0x8420 }, { 2472, 0x08d9 }, { 2478, 0x8000 }, + { 2479, 0x5500 }, { 2483, 0x2022 }, { 2486, 0x0184 }, { 2489, 0x00a1 }, + { 2492, 0x4800 }, { 2494, 0x2010 }, { 2496, 0x1380 }, { 2500, 0x4080 }, + { 2502, 0x0d04 }, { 2506, 0x0016 }, { 2509, 0x0040 }, { 2510, 0x8020 }, + /* 0x6200 */ + { 2512, 0xfd40 }, { 2520, 0x8de7 }, { 2530, 0x5436 }, { 2537, 0xe098 }, + { 2543, 0x7b8b }, { 2553, 0x091e }, { 2559, 0xfec8 }, { 2569, 0xd249 }, + { 2576, 0x0611 }, { 2580, 0x8dee }, { 2590, 0x1937 }, { 2598, 0xba22 }, + { 2605, 0x77f4 }, { 2616, 0x9fdd }, { 2628, 0xf3ec }, { 2639, 0xf0da }, + /* 0x6300 */ + { 2648, 0x4386 }, { 2654, 0xec42 }, { 2661, 0x8d3f }, { 2671, 0x2604 }, + { 2675, 0xfa6c }, { 2685, 0xc021 }, { 2689, 0x628e }, { 2696, 0x0cc2 }, + { 2701, 0xd785 }, { 2710, 0x0145 }, { 2714, 0x77ad }, { 2725, 0x5599 }, + { 2733, 0xe250 }, { 2739, 0x4045 }, { 2743, 0x260b }, { 2749, 0xa154 }, + /* 0x6400 */ + { 2755, 0x9827 }, { 2762, 0x5819 }, { 2768, 0x3443 }, { 2774, 0xa410 }, + { 2778, 0x05f2 }, { 2785, 0x4114 }, { 2789, 0x2280 }, { 2792, 0x0700 }, + { 2795, 0x00b4 }, { 2799, 0x4266 }, { 2805, 0x7210 }, { 2810, 0x15a1 }, + { 2816, 0x6025 }, { 2821, 0x4185 }, { 2826, 0x0054 }, { 2829, 0x0000 }, + /* 0x6500 */ + { 2829, 0x0201 }, { 2831, 0x0104 }, { 2833, 0xc820 }, { 2837, 0xcb70 }, + { 2845, 0x9320 }, { 2850, 0x6a62 }, { 2857, 0x184c }, { 2862, 0x0095 }, + { 2866, 0x1880 }, { 2869, 0x9a8b }, { 2877, 0xaab2 }, { 2885, 0x3201 }, + { 2889, 0xd87a }, { 2898, 0x00c4 }, { 2901, 0xf3e5 }, { 2912, 0x04c3 }, + /* 0x6600 */ + { 2917, 0xd44d }, { 2925, 0xa238 }, { 2931, 0xa1a1 }, { 2937, 0x5072 }, + { 2943, 0x980a }, { 2948, 0x84fc }, { 2956, 0xc152 }, { 2962, 0x44d1 }, + { 2968, 0x1094 }, { 2972, 0x20c2 }, { 2976, 0x4180 }, { 2979, 0x4210 }, + { 2982, 0x0000 }, { 2982, 0x3a00 }, { 2986, 0x0240 }, { 2988, 0xd29d }, + /* 0x6700 */ + { 2997, 0x2f01 }, { 3003, 0xa8b1 }, { 3010, 0xbd40 }, { 3017, 0x2432 }, + { 3022, 0xd34d }, { 3031, 0xd04b }, { 3038, 0xa723 }, { 3046, 0xd0ad }, + { 3054, 0x0a92 }, { 3059, 0x75a1 }, { 3067, 0xadac }, { 3076, 0x01e9 }, + { 3082, 0x801a }, { 3086, 0x771f }, { 3097, 0x9225 }, { 3103, 0xa01b }, + /* 0x6800 */ + { 3109, 0xdfa1 }, { 3119, 0x20ca }, { 3124, 0x0602 }, { 3127, 0x738c }, + { 3135, 0x577f }, { 3147, 0x003b }, { 3152, 0x0bff }, { 3163, 0x00d0 }, + { 3166, 0x806a }, { 3171, 0x0088 }, { 3173, 0xa1c4 }, { 3179, 0x0029 }, + { 3182, 0x2a05 }, { 3187, 0x0524 }, { 3191, 0x4009 }, { 3194, 0x1623 }, + /* 0x6900 */ + { 3200, 0x6822 }, { 3205, 0x8005 }, { 3208, 0x2011 }, { 3211, 0xa211 }, + { 3216, 0x0004 }, { 3217, 0x6490 }, { 3222, 0x4849 }, { 3227, 0x1382 }, + { 3232, 0x23d5 }, { 3240, 0x1930 }, { 3245, 0x2980 }, { 3249, 0x0892 }, + { 3253, 0x5402 }, { 3257, 0x8811 }, { 3261, 0x2001 }, { 3263, 0xa004 }, + /* 0x6a00 */ + { 3266, 0x0400 }, { 3267, 0x8180 }, { 3270, 0x8502 }, { 3274, 0x6022 }, + { 3278, 0x0090 }, { 3280, 0x0b01 }, { 3284, 0x0022 }, { 3286, 0x1202 }, + { 3289, 0x4011 }, { 3292, 0x0083 }, { 3295, 0x1a01 }, { 3299, 0x0000 }, + { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, + /* 0x6b00 */ + { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x009f }, { 3305, 0x4684 }, + { 3310, 0x12c8 }, { 3315, 0x0200 }, { 3316, 0x04fc }, { 3323, 0x1a00 }, + { 3326, 0x2ede }, { 3336, 0x0c4c }, { 3341, 0x0402 }, { 3343, 0x80b8 }, + { 3348, 0xa826 }, { 3354, 0x0afc }, { 3362, 0x8c02 }, { 3366, 0x2228 }, + /* 0x6c00 */ + { 3370, 0xa0e0 }, { 3375, 0x8f7b }, { 3386, 0xc7d6 }, { 3396, 0x2135 }, + { 3402, 0x06c7 }, { 3409, 0xf8b1 }, { 3418, 0x0713 }, { 3424, 0x6255 }, + { 3431, 0x936e }, { 3440, 0x8a19 }, { 3446, 0x6efa }, { 3457, 0xfb0e }, + { 3467, 0x1630 }, { 3472, 0x48f9 }, { 3480, 0xcd2f }, { 3490, 0x7deb }, + /* 0x6d00 */ + { 3502, 0x5892 }, { 3508, 0x4e84 }, { 3514, 0x4ca0 }, { 3519, 0x7a2e }, + { 3528, 0xedea }, { 3539, 0x561e }, { 3547, 0xc649 }, { 3554, 0x1190 }, + { 3558, 0x5324 }, { 3564, 0xe83a }, { 3572, 0xcfdb }, { 3584, 0x8124 }, + { 3588, 0x18f1 }, { 3595, 0x6342 }, { 3601, 0x5853 }, { 3608, 0x1a8a }, + /* 0x6e00 */ + { 3614, 0x7420 }, { 3619, 0x24d3 }, { 3626, 0xaa3b }, { 3635, 0x0514 }, + { 3639, 0x6018 }, { 3643, 0x8958 }, { 3649, 0x4800 }, { 3651, 0xc000 }, + { 3653, 0x8268 }, { 3658, 0x9101 }, { 3662, 0x84a4 }, { 3667, 0x2cd6 }, + { 3675, 0x8886 }, { 3680, 0xc4ba }, { 3688, 0x0377 }, { 3696, 0x0210 }, + /* 0x6f00 */ + { 3698, 0x8244 }, { 3702, 0x0038 }, { 3705, 0xae11 }, { 3712, 0x404a }, + { 3716, 0x28c0 }, { 3720, 0x5100 }, { 3723, 0x6044 }, { 3727, 0x1514 }, + { 3732, 0x7310 }, { 3738, 0x1000 }, { 3739, 0x0082 }, { 3741, 0x0248 }, + { 3744, 0x0205 }, { 3747, 0x4006 }, { 3750, 0xc003 }, { 3754, 0x0000 }, + /* 0x7000 */ + { 3754, 0x0000 }, { 3754, 0x0c02 }, { 3757, 0x0008 }, { 3758, 0x0220 }, + { 3760, 0x9000 }, { 3762, 0x4000 }, { 3763, 0xb800 }, { 3767, 0xd161 }, + { 3774, 0x4621 }, { 3779, 0x3274 }, { 3786, 0xf800 }, { 3791, 0x3b8a }, + { 3799, 0x050f }, { 3805, 0x8b00 }, { 3809, 0xbbd0 }, { 3818, 0x2280 }, + /* 0x7100 */ + { 3821, 0x0600 }, { 3823, 0x0769 }, { 3830, 0x8040 }, { 3832, 0x0043 }, + { 3835, 0x5420 }, { 3839, 0x5000 }, { 3841, 0x41d0 }, { 3846, 0x250c }, + { 3851, 0x8410 }, { 3854, 0x8310 }, { 3858, 0x1101 }, { 3861, 0x0228 }, + { 3864, 0x4008 }, { 3866, 0x0030 }, { 3868, 0x40a1 }, { 3872, 0x0200 }, + /* 0x7200 */ + { 3873, 0x0040 }, { 3874, 0x2000 }, { 3875, 0x1500 }, { 3878, 0xabe3 }, + { 3888, 0x3180 }, { 3892, 0xaa44 }, { 3898, 0xc2c6 }, { 3905, 0xc624 }, + { 3911, 0xac13 }, { 3918, 0x8004 }, { 3920, 0xb000 }, { 3923, 0x03d1 }, + { 3929, 0x611e }, { 3936, 0x4285 }, { 3941, 0xf303 }, { 3949, 0x1d9f }, + /* 0x7300 */ + { 3959, 0x440a }, { 3963, 0x78e8 }, { 3971, 0x5e26 }, { 3979, 0xc392 }, + { 3986, 0x2000 }, { 3987, 0x0085 }, { 3990, 0xb001 }, { 3994, 0x4000 }, + { 3995, 0x4a90 }, { 4000, 0x8842 }, { 4004, 0xca04 }, { 4009, 0x0c8d }, + { 4015, 0xa705 }, { 4022, 0x4203 }, { 4026, 0x22a1 }, { 4031, 0x0004 }, + /* 0x7400 */ + { 4032, 0x8668 }, { 4038, 0x0c01 }, { 4041, 0x5564 }, { 4048, 0x1079 }, + { 4054, 0x0002 }, { 4055, 0xdea0 }, { 4063, 0x2000 }, { 4064, 0x40c1 }, + { 4068, 0x488b }, { 4074, 0x5001 }, { 4077, 0x0380 }, { 4080, 0x0400 }, + { 4081, 0x0000 }, { 4081, 0x5004 }, { 4084, 0xc05d }, { 4091, 0x80d0 }, + /* 0x7500 */ + { 4095, 0xa010 }, { 4098, 0x970a }, { 4105, 0xbb20 }, { 4112, 0x4daf }, + { 4122, 0xd921 }, { 4129, 0x1e10 }, { 4134, 0x0460 }, { 4137, 0x8314 }, + { 4142, 0x8848 }, { 4146, 0xa6d6 }, { 4155, 0xd83b }, { 4164, 0x733f }, + { 4175, 0x27bc }, { 4184, 0x4974 }, { 4191, 0x0ddc }, { 4199, 0x9213 }, + /* 0x7600 */ + { 4205, 0x142b }, { 4211, 0x8ba1 }, { 4218, 0x2e75 }, { 4227, 0xd139 }, + { 4235, 0x3009 }, { 4239, 0x5050 }, { 4243, 0x8808 }, { 4246, 0x6900 }, + { 4250, 0x49d4 }, { 4257, 0x024a }, { 4261, 0x4010 }, { 4263, 0x8016 }, + { 4267, 0xe564 }, { 4275, 0x89d7 }, { 4284, 0xc020 }, { 4287, 0x5316 }, + /* 0x7700 */ + { 4294, 0x2b92 }, { 4301, 0x8600 }, { 4304, 0xa345 }, { 4311, 0x15e0 }, + { 4317, 0x008b }, { 4321, 0x0c03 }, { 4325, 0x196e }, { 4333, 0xe200 }, + { 4337, 0x7031 }, { 4343, 0x8006 }, { 4346, 0x16a5 }, { 4353, 0xa829 }, + { 4359, 0x2000 }, { 4360, 0x1880 }, { 4363, 0x7aac }, { 4372, 0xe148 }, + /* 0x7800 */ + { 4378, 0x3207 }, { 4384, 0xb5d6 }, { 4394, 0x32e8 }, { 4401, 0x5f91 }, + { 4410, 0x50a1 }, { 4415, 0x20e5 }, { 4421, 0x7c00 }, { 4426, 0x1080 }, + { 4428, 0x7280 }, { 4433, 0x9d8a }, { 4441, 0x00aa }, { 4445, 0x421f }, + { 4452, 0x0e22 }, { 4457, 0x0231 }, { 4461, 0x1100 }, { 4463, 0x0494 }, + /* 0x7900 */ + { 4467, 0x0022 }, { 4469, 0x4008 }, { 4471, 0x0010 }, { 4472, 0x5c10 }, + { 4477, 0x0343 }, { 4482, 0xfcc8 }, { 4491, 0xa1a5 }, { 4498, 0x0580 }, + { 4501, 0x8433 }, { 4507, 0x0400 }, { 4508, 0x0080 }, { 4509, 0x6e08 }, + { 4515, 0x2a4b }, { 4522, 0x8126 }, { 4527, 0xaad8 }, { 4535, 0x2901 }, + /* 0x7a00 */ + { 4539, 0x684d }, { 4546, 0x4490 }, { 4550, 0x0009 }, { 4552, 0xba88 }, + { 4559, 0x0040 }, { 4560, 0x0082 }, { 4562, 0x0000 }, { 4562, 0x87d1 }, + { 4570, 0x215b }, { 4577, 0xb1e6 }, { 4586, 0x3161 }, { 4592, 0x8008 }, + { 4594, 0x0800 }, { 4595, 0xc240 }, { 4599, 0xa069 }, { 4605, 0xa600 }, + /* 0x7b00 */ + { 4609, 0x8d58 }, { 4616, 0x4a32 }, { 4622, 0x5d71 }, { 4631, 0x550a }, + { 4637, 0x9aa0 }, { 4643, 0x2d57 }, { 4652, 0x4005 }, { 4655, 0x4aa6 }, + { 4662, 0x2021 }, { 4665, 0x30b1 }, { 4671, 0x3fc6 }, { 4681, 0x0112 }, + { 4684, 0x10c2 }, { 4688, 0x260a }, { 4693, 0x4462 }, { 4698, 0x5082 }, + /* 0x7c00 */ + { 4702, 0x9880 }, { 4706, 0x8040 }, { 4708, 0x04c0 }, { 4711, 0x8100 }, + { 4713, 0x2003 }, { 4716, 0x0000 }, { 4716, 0x0000 }, { 4716, 0x3818 }, + { 4721, 0x0200 }, { 4722, 0xf1a6 }, { 4731, 0x4434 }, { 4736, 0x720e }, + { 4743, 0x35a2 }, { 4750, 0x92e0 }, { 4756, 0x8101 }, { 4759, 0x0900 }, + /* 0x7d00 */ + { 4761, 0x0400 }, { 4762, 0x0000 }, { 4762, 0x8885 }, { 4767, 0x0000 }, + { 4767, 0x0000 }, { 4767, 0x0000 }, { 4767, 0x4000 }, { 4768, 0x0080 }, + { 4769, 0x0000 }, { 4769, 0x0000 }, { 4769, 0x4040 }, { 4771, 0x0000 }, + { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, + /* 0x7e00 */ + { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0800 }, + { 4772, 0x0082 }, { 4774, 0x0000 }, { 4774, 0x0000 }, { 4774, 0x0000 }, + { 4774, 0x0004 }, { 4775, 0x8800 }, { 4777, 0xbfff }, { 4792, 0xe7ef }, + { 4805, 0xffff }, { 4821, 0xffbf }, { 4836, 0xefef }, { 4850, 0xfdff }, + /* 0x7f00 */ + { 4865, 0xfbff }, { 4880, 0xbffe }, { 4894, 0xffff }, { 4910, 0x057f }, + { 4919, 0x0034 }, { 4922, 0x85b3 }, { 4930, 0x4706 }, { 4936, 0x4216 }, + { 4941, 0x5402 }, { 4945, 0xe410 }, { 4950, 0x8092 }, { 4954, 0xb305 }, + { 4961, 0x5422 }, { 4966, 0x8130 }, { 4970, 0x4263 }, { 4976, 0x180b }, + /* 0x8000 */ + { 4981, 0x387b }, { 4990, 0x13f5 }, { 4999, 0x07e5 }, { 5007, 0xa9ea }, + { 5016, 0x3c4c }, { 5023, 0x0514 }, { 5027, 0x0600 }, { 5029, 0x8002 }, + { 5031, 0x1ad9 }, { 5039, 0xbd48 }, { 5047, 0xee37 }, { 5058, 0xf496 }, + { 5067, 0x705f }, { 5076, 0x7ec0 }, { 5084, 0xbfb2 }, { 5095, 0x355f }, + /* 0x8100 */ + { 5105, 0xe644 }, { 5112, 0x455f }, { 5121, 0x9000 }, { 5123, 0x4146 }, + { 5128, 0x1d40 }, { 5133, 0x063b }, { 5140, 0x62a1 }, { 5146, 0xfe13 }, + { 5156, 0x8505 }, { 5161, 0x3902 }, { 5166, 0x0548 }, { 5170, 0x0c08 }, + { 5173, 0x144f }, { 5180, 0x0000 }, { 5180, 0x3488 }, { 5185, 0x5818 }, + /* 0x8200 */ + { 5190, 0x3077 }, { 5198, 0xd815 }, { 5205, 0xbd0e }, { 5214, 0x4bfb }, + { 5225, 0x8a90 }, { 5230, 0x8500 }, { 5233, 0xc100 }, { 5236, 0xe61d }, + { 5245, 0xed14 }, { 5253, 0xb386 }, { 5261, 0xff72 }, { 5273, 0x639b }, + { 5282, 0xfd92 }, { 5292, 0xd9be }, { 5303, 0x887b }, { 5311, 0x0a92 }, + /* 0x8300 */ + { 5316, 0xd3fe }, { 5328, 0x1cb2 }, { 5335, 0xb980 }, { 5341, 0x177a }, + { 5350, 0x82c9 }, { 5356, 0xdc17 }, { 5365, 0xfffb }, { 5380, 0x3980 }, + { 5385, 0x4260 }, { 5389, 0x590c }, { 5395, 0x0f01 }, { 5400, 0x37df }, + { 5412, 0x94a3 }, { 5419, 0xb150 }, { 5425, 0x0623 }, { 5430, 0x2307 }, + /* 0x8400 */ + { 5436, 0xf85a }, { 5445, 0x3102 }, { 5449, 0x01f0 }, { 5454, 0x3102 }, + { 5458, 0x0040 }, { 5459, 0x1e82 }, { 5465, 0x3a0a }, { 5471, 0x056a }, + { 5477, 0x5b84 }, { 5484, 0x1280 }, { 5487, 0x8002 }, { 5489, 0xa714 }, + { 5496, 0x2612 }, { 5501, 0xa04b }, { 5507, 0x1069 }, { 5512, 0x9001 }, + /* 0x8500 */ + { 5515, 0x1000 }, { 5516, 0x848a }, { 5521, 0x1802 }, { 5524, 0x3f80 }, + { 5531, 0x0708 }, { 5535, 0x4240 }, { 5538, 0x0110 }, { 5540, 0x4e14 }, + { 5546, 0x80b0 }, { 5550, 0x1800 }, { 5552, 0xc510 }, { 5557, 0x0281 }, + { 5560, 0x8202 }, { 5563, 0x1029 }, { 5567, 0x0210 }, { 5569, 0x8800 }, + /* 0x8600 */ + { 5571, 0x0020 }, { 5572, 0x0042 }, { 5574, 0x0280 }, { 5576, 0x1100 }, + { 5578, 0xe000 }, { 5581, 0x4413 }, { 5586, 0x5804 }, { 5590, 0xfe02 }, + { 5598, 0x3c07 }, { 5605, 0x3028 }, { 5609, 0x9798 }, { 5617, 0x0473 }, + { 5623, 0xced1 }, { 5632, 0xcb13 }, { 5640, 0x6210 }, { 5644, 0x431f }, + /* 0x8700 */ + { 5652, 0x278d }, { 5660, 0x55ac }, { 5668, 0x422e }, { 5674, 0xc892 }, + { 5680, 0x5380 }, { 5685, 0x0288 }, { 5688, 0x4039 }, { 5693, 0x7851 }, + { 5700, 0x292c }, { 5706, 0x8088 }, { 5709, 0xb900 }, { 5714, 0x2428 }, + { 5718, 0x0c41 }, { 5722, 0x080e }, { 5726, 0x4421 }, { 5730, 0x4200 }, + /* 0x8800 */ + { 5732, 0x0408 }, { 5734, 0x0868 }, { 5738, 0x0006 }, { 5740, 0x1204 }, + { 5743, 0x3031 }, { 5748, 0x0290 }, { 5751, 0x5b3e }, { 5761, 0xe085 }, + { 5767, 0x2936 }, { 5774, 0x1044 }, { 5777, 0x2814 }, { 5781, 0x1082 }, + { 5784, 0x4266 }, { 5790, 0x8334 }, { 5796, 0x013c }, { 5801, 0x531b }, + /* 0x8900 */ + { 5809, 0x0404 }, { 5811, 0x0e0d }, { 5817, 0x0c22 }, { 5821, 0x0051 }, + { 5824, 0x0012 }, { 5826, 0xc000 }, { 5828, 0x0040 }, { 5829, 0x8800 }, + { 5831, 0x004a }, { 5834, 0x0000 }, { 5834, 0x0000 }, { 5834, 0x0000 }, + { 5834, 0xdff6 }, { 5847, 0x5447 }, { 5854, 0x8868 }, { 5859, 0x0008 }, + /* 0x8a00 */ + { 5860, 0x0081 }, { 5862, 0x0000 }, { 5862, 0x0000 }, { 5862, 0x4000 }, + { 5863, 0x0100 }, { 5864, 0x0000 }, { 5864, 0x0000 }, { 5864, 0x0200 }, + { 5865, 0x0600 }, { 5867, 0x0008 }, { 5868, 0x0000 }, { 5868, 0x0000 }, + { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, + /* 0x8b00 */ + { 5868, 0x0080 }, { 5869, 0x0000 }, { 5869, 0x0040 }, { 5870, 0x0000 }, + { 5870, 0x0000 }, { 5870, 0x0000 }, { 5870, 0x1040 }, { 5872, 0x0000 }, + { 5872, 0x0000 }, { 5872, 0x0000 }, { 5872, 0xefff }, { 5887, 0xf7fd }, + { 5901, 0xff7f }, { 5916, 0xfffe }, { 5931, 0xfbff }, { 5946, 0xffff }, + /* 0x8c00 */ + { 5962, 0xfdff }, { 5977, 0xbfff }, { 5992, 0xffff }, { 6008, 0x00ff }, + { 6016, 0x12c2 }, { 6021, 0x0420 }, { 6023, 0x0c06 }, { 6027, 0x0708 }, + { 6031, 0x1624 }, { 6036, 0x0110 }, { 6038, 0x0000 }, { 6038, 0x0000 }, + { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, + /* 0x8d00 */ + { 6038, 0x0000 }, { 6038, 0xe000 }, { 6041, 0xfffe }, { 6056, 0xffff }, + { 6072, 0xffff }, { 6088, 0x7f79 }, { 6100, 0x28df }, { 6109, 0x00f9 }, + { 6115, 0x0c32 }, { 6120, 0x8012 }, { 6123, 0x0008 }, { 6124, 0xd53a }, + { 6133, 0xd858 }, { 6140, 0xecc2 }, { 6148, 0x9d18 }, { 6155, 0x2fa8 }, + /* 0x8e00 */ + { 6163, 0x9620 }, { 6168, 0xe010 }, { 6172, 0xd60c }, { 6179, 0x2622 }, + { 6184, 0x0f97 }, { 6193, 0x0206 }, { 6196, 0xb240 }, { 6201, 0x9055 }, + { 6207, 0x80a2 }, { 6211, 0x5011 }, { 6215, 0x9800 }, { 6218, 0x0404 }, + { 6220, 0x4000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, + /* 0x8f00 */ + { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, + { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0xfbc0 }, { 6230, 0xffff }, + { 6246, 0xeffe }, { 6260, 0xdffb }, { 6274, 0x0b08 }, { 6278, 0x6243 }, + { 6284, 0x41b6 }, { 6291, 0xfb3b }, { 6303, 0x6f74 }, { 6313, 0x2389 }, + /* 0x9000 */ + { 6319, 0xae7f }, { 6331, 0xecd7 }, { 6342, 0xe047 }, { 6349, 0x5960 }, + { 6355, 0xa096 }, { 6361, 0x098f }, { 6368, 0x612c }, { 6374, 0xa030 }, + { 6378, 0x090d }, { 6383, 0x2aaa }, { 6390, 0xd44e }, { 6398, 0x4f7b }, + { 6409, 0xc4b2 }, { 6416, 0x388b }, { 6423, 0xa9c6 }, { 6431, 0x6110 }, + /* 0x9100 */ + { 6435, 0x0014 }, { 6437, 0x4200 }, { 6439, 0x800c }, { 6442, 0x0202 }, + { 6444, 0xfe48 }, { 6453, 0x6485 }, { 6459, 0xd63e }, { 6469, 0xe3f7 }, + { 6481, 0x3aa0 }, { 6487, 0x0c07 }, { 6492, 0xe40c }, { 6498, 0x0430 }, + { 6501, 0xf680 }, { 6508, 0x1002 }, { 6510, 0x0000 }, { 6510, 0x0000 }, + /* 0x9200 */ + { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, + { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0010 }, + { 6511, 0x4000 }, { 6512, 0x0000 }, { 6512, 0x4000 }, { 6513, 0x0000 }, + { 6513, 0x0100 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 }, + /* 0x9300 */ + { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x4000 }, + { 6515, 0x0000 }, { 6515, 0x0000 }, { 6515, 0x0400 }, { 6516, 0x0000 }, + { 6516, 0x8000 }, { 6517, 0x0000 }, { 6517, 0x0000 }, { 6517, 0x0000 }, + { 6517, 0x0400 }, { 6518, 0x0040 }, { 6519, 0x0000 }, { 6519, 0x0000 }, + /* 0x9400 */ + { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x4000 }, + { 6520, 0x0000 }, { 6520, 0x0000 }, { 6520, 0x0800 }, { 6521, 0x0000 }, + { 6521, 0xffe0 }, { 6532, 0xfebd }, { 6545, 0xffff }, { 6561, 0xffff }, + { 6577, 0x7f7f }, { 6591, 0xfbe7 }, { 6604, 0xffbf }, { 6619, 0xf7ff }, + /* 0x9500 */ + { 6634, 0xffff }, { 6650, 0xefff }, { 6665, 0xff7e }, { 6679, 0xdff7 }, + { 6693, 0xf6f7 }, { 6706, 0xfbdf }, { 6720, 0xbffe }, { 6734, 0x804f }, + { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, + { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0xef00 }, { 6747, 0x7fff }, + /* 0x9600 */ + { 6762, 0xff7f }, { 6777, 0xb6f7 }, { 6789, 0x4406 }, { 6793, 0xb87e }, + { 6803, 0x3bf5 }, { 6814, 0x8831 }, { 6819, 0x1796 }, { 6827, 0x00f4 }, + { 6832, 0xa960 }, { 6838, 0x1391 }, { 6844, 0x0080 }, { 6845, 0x7249 }, + { 6852, 0xf2f3 }, { 6863, 0x0024 }, { 6865, 0x8701 }, { 6870, 0x42c8 }, + /* 0x9700 */ + { 6875, 0xe3d3 }, { 6885, 0x5048 }, { 6889, 0x2400 }, { 6891, 0x4305 }, + { 6896, 0x0000 }, { 6896, 0x4a4c }, { 6902, 0x0227 }, { 6907, 0x1058 }, + { 6911, 0x2820 }, { 6914, 0x0116 }, { 6918, 0xa809 }, { 6923, 0x0014 }, + { 6925, 0x0000 }, { 6925, 0x0000 }, { 6925, 0x3ec0 }, { 6932, 0x0068 }, + /* 0x9800 */ + { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, + { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0xffe0 }, + { 6946, 0xb7ff }, { 6960, 0xfddb }, { 6973, 0x00f7 }, { 6980, 0x0000 }, + { 6980, 0x4000 }, { 6981, 0xc72e }, { 6990, 0x0180 }, { 6992, 0x0000 }, + /* 0x9900 */ + { 6992, 0x2000 }, { 6993, 0x0001 }, { 6994, 0x4000 }, { 6995, 0x0000 }, + { 6995, 0x0000 }, { 6995, 0x0030 }, { 6997, 0xffa8 }, { 7008, 0xb4f7 }, + { 7019, 0xadf3 }, { 7030, 0x03ff }, { 7040, 0x0120 }, { 7042, 0x0000 }, + { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, + /* 0x9a00 */ + { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, + { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0xf000 }, { 7046, 0xfffb }, + { 7061, 0x9df7 }, { 7073, 0xfdcf }, { 7086, 0x01bf }, { 7094, 0x15c3 }, + { 7101, 0x1827 }, { 7107, 0x810a }, { 7111, 0xa842 }, { 7116, 0x0a00 }, + /* 0x9b00 */ + { 7118, 0x8108 }, { 7121, 0x8008 }, { 7123, 0x8008 }, { 7125, 0x1804 }, + { 7128, 0xa3be }, { 7138, 0x0012 }, { 7140, 0x0000 }, { 7140, 0x0000 }, + { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, + { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, + /* 0x9c00 */ + { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, + { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x9000 }, + { 7142, 0x69e6 }, { 7151, 0xdc37 }, { 7161, 0x6bff }, { 7174, 0x3dff }, + { 7187, 0xfcf8 }, { 7198, 0xf3f9 }, { 7210, 0x0004 }, +}; +static const Summary16 gb2312_uni2indx_page9e[27] = { + /* 0x9e00 */ + { 7211, 0x0000 }, { 7211, 0x8000 }, { 7212, 0xbf6f }, { 7225, 0xe7ee }, + { 7237, 0xdffe }, { 7251, 0x5da2 }, { 7259, 0x3fd8 }, { 7269, 0xc00b }, + { 7274, 0x0984 }, { 7278, 0xa00c }, { 7282, 0x0040 }, { 7283, 0x6910 }, + { 7288, 0xe210 }, { 7293, 0xb912 }, { 7300, 0x86a5 }, { 7307, 0x5a00 }, + /* 0x9f00 */ + { 7311, 0x6800 }, { 7314, 0x0289 }, { 7318, 0x9005 }, { 7322, 0x6a80 }, + { 7327, 0x0010 }, { 7328, 0x0003 }, { 7330, 0x0000 }, { 7330, 0x8000 }, + { 7331, 0x1ff9 }, { 7342, 0x8e00 }, { 7346, 0x0001 }, +}; +static const Summary16 gb2312_uni2indx_pageff[15] = { + /* 0xff00 */ + { 7347, 0xfffe }, { 7362, 0xffff }, { 7378, 0xffff }, { 7394, 0xffff }, + { 7410, 0xffff }, { 7426, 0x7fff }, { 7441, 0x0000 }, { 7441, 0x0000 }, + { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, + { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x002b }, +}; + +static int +gb2312_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0000 && wc < 0x0460) + summary = &gb2312_uni2indx_page00[(wc>>4)]; + else if (wc >= 0x2000 && wc < 0x2650) + summary = &gb2312_uni2indx_page20[(wc>>4)-0x200]; + else if (wc >= 0x3000 && wc < 0x3230) + summary = &gb2312_uni2indx_page30[(wc>>4)-0x300]; + else if (wc >= 0x4e00 && wc < 0x9cf0) + summary = &gb2312_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0x9e00 && wc < 0x9fb0) + summary = &gb2312_uni2indx_page9e[(wc>>4)-0x9e0]; + else if (wc >= 0xff00 && wc < 0xfff0) + summary = &gb2312_uni2indx_pageff[(wc>>4)-0xff0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = gb2312_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/gbk.h b/jni/parted/libiconv/lib/gbk.h new file mode 100755 index 0000000..7ed3509 --- /dev/null +++ b/jni/parted/libiconv/lib/gbk.h @@ -0,0 +1,168 @@ +/* + * Copyright (C) 1999-2001, 2005, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GBK + */ + +/* + * GBK, as described in Ken Lunde's book, is an extension of GB 2312-1980 + * (shifted by adding 0x8080 to the range 0xA1A1..0xFEFE, as used in EUC-CN). + * It adds the following ranges: + * + * (part of GBK/1) 0xA2A1-0xA2AA Small Roman numerals + * GBK/3 0x{81-A0}{40-7E,80-FE} 6080 new characters, all in Unicode + * GBK/4 0x{AA-FE}{40-7E,80-A0} 8160 new characters, 8080 in Unicode + * GBK/5 0x{A8-A9}{40-7E,80-A0} 166 new characters, 153 in Unicode + * + * Furthermore, all four tables I have looked at + * - the CP936 table by Microsoft, found on ftp.unicode.org in 1999, + * - the GBK table by Sun, investigated on a Solaris 2.7 machine, + * - the GBK tables by CWEX, found in the Big5+ package, + * - the GB18030 standard (second printing), + * agree in the following extensions. (Ken Lunde must have overlooked these + * differences between GB2312 and GBK. Also, the CWEX tables have additional + * differences.) + * + * 1. Some characters in the GB2312 range are defined differently: + * + * code GB2312 GBK + * 0xA1A4 0x30FB # KATAKANA MIDDLE DOT 0x00B7 # MIDDLE DOT + * 0xA1AA 0x2015 # HORIZONTAL BAR 0x2014 # EM DASH + * + * 2. 19 characters added in the range 0xA6E0-0xA6F5. + * + * 3. 4 characters added in the range 0xA8BB-0xA8C0. + * + * CP936 as of 1999 was identical to GBK. However, since 1999, Microsoft has + * added new mappings to CP936... + */ + +#include "gbkext1.h" +#include "gbkext2.h" +#include "gbkext_inv.h" +#include "cp936ext.h" + +static int +gbk_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + + if (c >= 0x81 && c < 0xff) { + if (n < 2) + return RET_TOOFEW(0); + if (c >= 0xa1 && c <= 0xf7) { + unsigned char c2 = s[1]; + if (c == 0xa1) { + if (c2 == 0xa4) { + *pwc = 0x00b7; + return 2; + } + if (c2 == 0xaa) { + *pwc = 0x2014; + return 2; + } + } + if (c2 >= 0xa1 && c2 < 0xff) { + unsigned char buf[2]; + int ret; + buf[0] = c-0x80; buf[1] = c2-0x80; + ret = gb2312_mbtowc(conv,pwc,buf,2); + if (ret != RET_ILSEQ) + return ret; + buf[0] = c; buf[1] = c2; + ret = cp936ext_mbtowc(conv,pwc,buf,2); + if (ret != RET_ILSEQ) + return ret; + } + } + if (c >= 0x81 && c <= 0xa0) + return gbkext1_mbtowc(conv,pwc,s,2); + if (c >= 0xa8 && c <= 0xfe) + return gbkext2_mbtowc(conv,pwc,s,2); + if (c == 0xa2) { + unsigned char c2 = s[1]; + if (c2 >= 0xa1 && c2 <= 0xaa) { + *pwc = 0x2170+(c2-0xa1); + return 2; + } + } + } + return RET_ILSEQ; +} + +static int +gbk_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + if (wc != 0x30fb && wc != 0x2015) { + ret = gb2312_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]+0x80; + r[1] = buf[1]+0x80; + return 2; + } + } + ret = gbkext_inv_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + if (wc >= 0x2170 && wc <= 0x2179) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0xa2; + r[1] = 0xa1 + (wc-0x2170); + return 2; + } + ret = cp936ext_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + if (wc == 0x00b7) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0xa1; + r[1] = 0xa4; + return 2; + } + if (wc == 0x2014) { + if (n < 2) + return RET_TOOSMALL; + r[0] = 0xa1; + r[1] = 0xaa; + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/gbkext1.h b/jni/parted/libiconv/lib/gbkext1.h new file mode 100755 index 0000000..7aac6c7 --- /dev/null +++ b/jni/parted/libiconv/lib/gbkext1.h @@ -0,0 +1,852 @@ +/* + * Copyright (C) 1999-2000, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GBK/3 extensions + */ + +static const unsigned short gbkext1_2uni_page81[6080] = { + /* 0x81 */ + 0x4e02, 0x4e04, 0x4e05, 0x4e06, 0x4e0f, 0x4e12, 0x4e17, 0x4e1f, + 0x4e20, 0x4e21, 0x4e23, 0x4e26, 0x4e29, 0x4e2e, 0x4e2f, 0x4e31, + 0x4e33, 0x4e35, 0x4e37, 0x4e3c, 0x4e40, 0x4e41, 0x4e42, 0x4e44, + 0x4e46, 0x4e4a, 0x4e51, 0x4e55, 0x4e57, 0x4e5a, 0x4e5b, 0x4e62, + 0x4e63, 0x4e64, 0x4e65, 0x4e67, 0x4e68, 0x4e6a, 0x4e6b, 0x4e6c, + 0x4e6d, 0x4e6e, 0x4e6f, 0x4e72, 0x4e74, 0x4e75, 0x4e76, 0x4e77, + 0x4e78, 0x4e79, 0x4e7a, 0x4e7b, 0x4e7c, 0x4e7d, 0x4e7f, 0x4e80, + 0x4e81, 0x4e82, 0x4e83, 0x4e84, 0x4e85, 0x4e87, 0x4e8a, 0x4e90, + 0x4e96, 0x4e97, 0x4e99, 0x4e9c, 0x4e9d, 0x4e9e, 0x4ea3, 0x4eaa, + 0x4eaf, 0x4eb0, 0x4eb1, 0x4eb4, 0x4eb6, 0x4eb7, 0x4eb8, 0x4eb9, + 0x4ebc, 0x4ebd, 0x4ebe, 0x4ec8, 0x4ecc, 0x4ecf, 0x4ed0, 0x4ed2, + 0x4eda, 0x4edb, 0x4edc, 0x4ee0, 0x4ee2, 0x4ee6, 0x4ee7, 0x4ee9, + 0x4eed, 0x4eee, 0x4eef, 0x4ef1, 0x4ef4, 0x4ef8, 0x4ef9, 0x4efa, + 0x4efc, 0x4efe, 0x4f00, 0x4f02, 0x4f03, 0x4f04, 0x4f05, 0x4f06, + 0x4f07, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12, 0x4f13, 0x4f14, 0x4f15, + 0x4f16, 0x4f1c, 0x4f1d, 0x4f21, 0x4f23, 0x4f28, 0x4f29, 0x4f2c, + 0x4f2d, 0x4f2e, 0x4f31, 0x4f33, 0x4f35, 0x4f37, 0x4f39, 0x4f3b, + 0x4f3e, 0x4f3f, 0x4f40, 0x4f41, 0x4f42, 0x4f44, 0x4f45, 0x4f47, + 0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56, + 0x4f61, 0x4f62, 0x4f66, 0x4f68, 0x4f6a, 0x4f6b, 0x4f6d, 0x4f6e, + 0x4f71, 0x4f72, 0x4f75, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7d, + 0x4f80, 0x4f81, 0x4f82, 0x4f85, 0x4f86, 0x4f87, 0x4f8a, 0x4f8c, + 0x4f8e, 0x4f90, 0x4f92, 0x4f93, 0x4f95, 0x4f96, 0x4f98, 0x4f99, + 0x4f9a, 0x4f9c, 0x4f9e, 0x4f9f, 0x4fa1, 0x4fa2, + /* 0x82 */ + 0x4fa4, 0x4fab, 0x4fad, 0x4fb0, 0x4fb1, 0x4fb2, 0x4fb3, 0x4fb4, + 0x4fb6, 0x4fb7, 0x4fb8, 0x4fb9, 0x4fba, 0x4fbb, 0x4fbc, 0x4fbd, + 0x4fbe, 0x4fc0, 0x4fc1, 0x4fc2, 0x4fc6, 0x4fc7, 0x4fc8, 0x4fc9, + 0x4fcb, 0x4fcc, 0x4fcd, 0x4fd2, 0x4fd3, 0x4fd4, 0x4fd5, 0x4fd6, + 0x4fd9, 0x4fdb, 0x4fe0, 0x4fe2, 0x4fe4, 0x4fe5, 0x4fe7, 0x4feb, + 0x4fec, 0x4ff0, 0x4ff2, 0x4ff4, 0x4ff5, 0x4ff6, 0x4ff7, 0x4ff9, + 0x4ffb, 0x4ffc, 0x4ffd, 0x4fff, 0x5000, 0x5001, 0x5002, 0x5003, + 0x5004, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, 0x500a, 0x500b, + 0x500e, 0x5010, 0x5011, 0x5013, 0x5015, 0x5016, 0x5017, 0x501b, + 0x501d, 0x501e, 0x5020, 0x5022, 0x5023, 0x5024, 0x5027, 0x502b, + 0x502f, 0x5030, 0x5031, 0x5032, 0x5033, 0x5034, 0x5035, 0x5036, + 0x5037, 0x5038, 0x5039, 0x503b, 0x503d, 0x503f, 0x5040, 0x5041, + 0x5042, 0x5044, 0x5045, 0x5046, 0x5049, 0x504a, 0x504b, 0x504d, + 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5056, 0x5057, 0x5058, + 0x5059, 0x505b, 0x505d, 0x505e, 0x505f, 0x5060, 0x5061, 0x5062, + 0x5063, 0x5064, 0x5066, 0x5067, 0x5068, 0x5069, 0x506a, 0x506b, + 0x506d, 0x506e, 0x506f, 0x5070, 0x5071, 0x5072, 0x5073, 0x5074, + 0x5075, 0x5078, 0x5079, 0x507a, 0x507c, 0x507d, 0x5081, 0x5082, + 0x5083, 0x5084, 0x5086, 0x5087, 0x5089, 0x508a, 0x508b, 0x508c, + 0x508e, 0x508f, 0x5090, 0x5091, 0x5092, 0x5093, 0x5094, 0x5095, + 0x5096, 0x5097, 0x5098, 0x5099, 0x509a, 0x509b, 0x509c, 0x509d, + 0x509e, 0x509f, 0x50a0, 0x50a1, 0x50a2, 0x50a4, 0x50a6, 0x50aa, + 0x50ab, 0x50ad, 0x50ae, 0x50af, 0x50b0, 0x50b1, 0x50b3, 0x50b4, + 0x50b5, 0x50b6, 0x50b7, 0x50b8, 0x50b9, 0x50bc, + /* 0x83 */ + 0x50bd, 0x50be, 0x50bf, 0x50c0, 0x50c1, 0x50c2, 0x50c3, 0x50c4, + 0x50c5, 0x50c6, 0x50c7, 0x50c8, 0x50c9, 0x50ca, 0x50cb, 0x50cc, + 0x50cd, 0x50ce, 0x50d0, 0x50d1, 0x50d2, 0x50d3, 0x50d4, 0x50d5, + 0x50d7, 0x50d8, 0x50d9, 0x50db, 0x50dc, 0x50dd, 0x50de, 0x50df, + 0x50e0, 0x50e1, 0x50e2, 0x50e3, 0x50e4, 0x50e5, 0x50e8, 0x50e9, + 0x50ea, 0x50eb, 0x50ef, 0x50f0, 0x50f1, 0x50f2, 0x50f4, 0x50f6, + 0x50f7, 0x50f8, 0x50f9, 0x50fa, 0x50fc, 0x50fd, 0x50fe, 0x50ff, + 0x5100, 0x5101, 0x5102, 0x5103, 0x5104, 0x5105, 0x5108, 0x5109, + 0x510a, 0x510c, 0x510d, 0x510e, 0x510f, 0x5110, 0x5111, 0x5113, + 0x5114, 0x5115, 0x5116, 0x5117, 0x5118, 0x5119, 0x511a, 0x511b, + 0x511c, 0x511d, 0x511e, 0x511f, 0x5120, 0x5122, 0x5123, 0x5124, + 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512a, 0x512b, 0x512c, + 0x512d, 0x512e, 0x512f, 0x5130, 0x5131, 0x5132, 0x5133, 0x5134, + 0x5135, 0x5136, 0x5137, 0x5138, 0x5139, 0x513a, 0x513b, 0x513c, + 0x513d, 0x513e, 0x5142, 0x5147, 0x514a, 0x514c, 0x514e, 0x514f, + 0x5150, 0x5152, 0x5153, 0x5157, 0x5158, 0x5159, 0x515b, 0x515d, + 0x515e, 0x515f, 0x5160, 0x5161, 0x5163, 0x5164, 0x5166, 0x5167, + 0x5169, 0x516a, 0x516f, 0x5172, 0x517a, 0x517e, 0x517f, 0x5183, + 0x5184, 0x5186, 0x5187, 0x518a, 0x518b, 0x518e, 0x518f, 0x5190, + 0x5191, 0x5193, 0x5194, 0x5198, 0x519a, 0x519d, 0x519e, 0x519f, + 0x51a1, 0x51a3, 0x51a6, 0x51a7, 0x51a8, 0x51a9, 0x51aa, 0x51ad, + 0x51ae, 0x51b4, 0x51b8, 0x51b9, 0x51ba, 0x51be, 0x51bf, 0x51c1, + 0x51c2, 0x51c3, 0x51c5, 0x51c8, 0x51ca, 0x51cd, 0x51ce, 0x51d0, + 0x51d2, 0x51d3, 0x51d4, 0x51d5, 0x51d6, 0x51d7, + /* 0x84 */ + 0x51d8, 0x51d9, 0x51da, 0x51dc, 0x51de, 0x51df, 0x51e2, 0x51e3, + 0x51e5, 0x51e6, 0x51e7, 0x51e8, 0x51e9, 0x51ea, 0x51ec, 0x51ee, + 0x51f1, 0x51f2, 0x51f4, 0x51f7, 0x51fe, 0x5204, 0x5205, 0x5209, + 0x520b, 0x520c, 0x520f, 0x5210, 0x5213, 0x5214, 0x5215, 0x521c, + 0x521e, 0x521f, 0x5221, 0x5222, 0x5223, 0x5225, 0x5226, 0x5227, + 0x522a, 0x522c, 0x522f, 0x5231, 0x5232, 0x5234, 0x5235, 0x523c, + 0x523e, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524b, + 0x524e, 0x524f, 0x5252, 0x5253, 0x5255, 0x5257, 0x5258, 0x5259, + 0x525a, 0x525b, 0x525d, 0x525f, 0x5260, 0x5262, 0x5263, 0x5264, + 0x5266, 0x5268, 0x526b, 0x526c, 0x526d, 0x526e, 0x5270, 0x5271, + 0x5273, 0x5274, 0x5275, 0x5276, 0x5277, 0x5278, 0x5279, 0x527a, + 0x527b, 0x527c, 0x527e, 0x5280, 0x5283, 0x5284, 0x5285, 0x5286, + 0x5287, 0x5289, 0x528a, 0x528b, 0x528c, 0x528d, 0x528e, 0x528f, + 0x5291, 0x5292, 0x5294, 0x5295, 0x5296, 0x5297, 0x5298, 0x5299, + 0x529a, 0x529c, 0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52ae, 0x52af, + 0x52b0, 0x52b4, 0x52b5, 0x52b6, 0x52b7, 0x52b8, 0x52b9, 0x52ba, + 0x52bb, 0x52bc, 0x52bd, 0x52c0, 0x52c1, 0x52c2, 0x52c4, 0x52c5, + 0x52c6, 0x52c8, 0x52ca, 0x52cc, 0x52cd, 0x52ce, 0x52cf, 0x52d1, + 0x52d3, 0x52d4, 0x52d5, 0x52d7, 0x52d9, 0x52da, 0x52db, 0x52dc, + 0x52dd, 0x52de, 0x52e0, 0x52e1, 0x52e2, 0x52e3, 0x52e5, 0x52e6, + 0x52e7, 0x52e8, 0x52e9, 0x52ea, 0x52eb, 0x52ec, 0x52ed, 0x52ee, + 0x52ef, 0x52f1, 0x52f2, 0x52f3, 0x52f4, 0x52f5, 0x52f6, 0x52f7, + 0x52f8, 0x52fb, 0x52fc, 0x52fd, 0x5301, 0x5302, 0x5303, 0x5304, + 0x5307, 0x5309, 0x530a, 0x530b, 0x530c, 0x530e, + /* 0x85 */ + 0x5311, 0x5312, 0x5313, 0x5314, 0x5318, 0x531b, 0x531c, 0x531e, + 0x531f, 0x5322, 0x5324, 0x5325, 0x5327, 0x5328, 0x5329, 0x532b, + 0x532c, 0x532d, 0x532f, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334, + 0x5335, 0x5336, 0x5337, 0x5338, 0x533c, 0x533d, 0x5340, 0x5342, + 0x5344, 0x5346, 0x534b, 0x534c, 0x534d, 0x5350, 0x5354, 0x5358, + 0x5359, 0x535b, 0x535d, 0x5365, 0x5368, 0x536a, 0x536c, 0x536d, + 0x5372, 0x5376, 0x5379, 0x537b, 0x537c, 0x537d, 0x537e, 0x5380, + 0x5381, 0x5383, 0x5387, 0x5388, 0x538a, 0x538e, 0x538f, 0x5390, + 0x5391, 0x5392, 0x5393, 0x5394, 0x5396, 0x5397, 0x5399, 0x539b, + 0x539c, 0x539e, 0x53a0, 0x53a1, 0x53a4, 0x53a7, 0x53aa, 0x53ab, + 0x53ac, 0x53ad, 0x53af, 0x53b0, 0x53b1, 0x53b2, 0x53b3, 0x53b4, + 0x53b5, 0x53b7, 0x53b8, 0x53b9, 0x53ba, 0x53bc, 0x53bd, 0x53be, + 0x53c0, 0x53c3, 0x53c4, 0x53c5, 0x53c6, 0x53c7, 0x53ce, 0x53cf, + 0x53d0, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dc, 0x53dd, 0x53de, + 0x53e1, 0x53e2, 0x53e7, 0x53f4, 0x53fa, 0x53fe, 0x53ff, 0x5400, + 0x5402, 0x5405, 0x5407, 0x540b, 0x5414, 0x5418, 0x5419, 0x541a, + 0x541c, 0x5422, 0x5424, 0x5425, 0x542a, 0x5430, 0x5433, 0x5436, + 0x5437, 0x543a, 0x543d, 0x543f, 0x5441, 0x5442, 0x5444, 0x5445, + 0x5447, 0x5449, 0x544c, 0x544d, 0x544e, 0x544f, 0x5451, 0x545a, + 0x545d, 0x545e, 0x545f, 0x5460, 0x5461, 0x5463, 0x5465, 0x5467, + 0x5469, 0x546a, 0x546b, 0x546c, 0x546d, 0x546e, 0x546f, 0x5470, + 0x5474, 0x5479, 0x547a, 0x547e, 0x547f, 0x5481, 0x5483, 0x5485, + 0x5487, 0x5488, 0x5489, 0x548a, 0x548d, 0x5491, 0x5493, 0x5497, + 0x5498, 0x549c, 0x549e, 0x549f, 0x54a0, 0x54a1, + /* 0x86 */ + 0x54a2, 0x54a5, 0x54ae, 0x54b0, 0x54b2, 0x54b5, 0x54b6, 0x54b7, + 0x54b9, 0x54ba, 0x54bc, 0x54be, 0x54c3, 0x54c5, 0x54ca, 0x54cb, + 0x54d6, 0x54d8, 0x54db, 0x54e0, 0x54e1, 0x54e2, 0x54e3, 0x54e4, + 0x54eb, 0x54ec, 0x54ef, 0x54f0, 0x54f1, 0x54f4, 0x54f5, 0x54f6, + 0x54f7, 0x54f8, 0x54f9, 0x54fb, 0x54fe, 0x5500, 0x5502, 0x5503, + 0x5504, 0x5505, 0x5508, 0x550a, 0x550b, 0x550c, 0x550d, 0x550e, + 0x5512, 0x5513, 0x5515, 0x5516, 0x5517, 0x5518, 0x5519, 0x551a, + 0x551c, 0x551d, 0x551e, 0x551f, 0x5521, 0x5525, 0x5526, 0x5528, + 0x5529, 0x552b, 0x552d, 0x5532, 0x5534, 0x5535, 0x5536, 0x5538, + 0x5539, 0x553a, 0x553b, 0x553d, 0x5540, 0x5542, 0x5545, 0x5547, + 0x5548, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5551, 0x5552, + 0x5553, 0x5554, 0x5557, 0x5558, 0x5559, 0x555a, 0x555b, 0x555d, + 0x555e, 0x555f, 0x5560, 0x5562, 0x5563, 0x5568, 0x5569, 0x556b, + 0x556f, 0x5570, 0x5571, 0x5572, 0x5573, 0x5574, 0x5579, 0x557a, + 0x557d, 0x557f, 0x5585, 0x5586, 0x558c, 0x558d, 0x558e, 0x5590, + 0x5592, 0x5593, 0x5595, 0x5596, 0x5597, 0x559a, 0x559b, 0x559e, + 0x55a0, 0x55a1, 0x55a2, 0x55a3, 0x55a4, 0x55a5, 0x55a6, 0x55a8, + 0x55a9, 0x55aa, 0x55ab, 0x55ac, 0x55ad, 0x55ae, 0x55af, 0x55b0, + 0x55b2, 0x55b4, 0x55b6, 0x55b8, 0x55ba, 0x55bc, 0x55bf, 0x55c0, + 0x55c1, 0x55c2, 0x55c3, 0x55c6, 0x55c7, 0x55c8, 0x55ca, 0x55cb, + 0x55ce, 0x55cf, 0x55d0, 0x55d5, 0x55d7, 0x55d8, 0x55d9, 0x55da, + 0x55db, 0x55de, 0x55e0, 0x55e2, 0x55e7, 0x55e9, 0x55ed, 0x55ee, + 0x55f0, 0x55f1, 0x55f4, 0x55f6, 0x55f8, 0x55f9, 0x55fa, 0x55fb, + 0x55fc, 0x55ff, 0x5602, 0x5603, 0x5604, 0x5605, + /* 0x87 */ + 0x5606, 0x5607, 0x560a, 0x560b, 0x560d, 0x5610, 0x5611, 0x5612, + 0x5613, 0x5614, 0x5615, 0x5616, 0x5617, 0x5619, 0x561a, 0x561c, + 0x561d, 0x5620, 0x5621, 0x5622, 0x5625, 0x5626, 0x5628, 0x5629, + 0x562a, 0x562b, 0x562e, 0x562f, 0x5630, 0x5633, 0x5635, 0x5637, + 0x5638, 0x563a, 0x563c, 0x563d, 0x563e, 0x5640, 0x5641, 0x5642, + 0x5643, 0x5644, 0x5645, 0x5646, 0x5647, 0x5648, 0x5649, 0x564a, + 0x564b, 0x564f, 0x5650, 0x5651, 0x5652, 0x5653, 0x5655, 0x5656, + 0x565a, 0x565b, 0x565d, 0x565e, 0x565f, 0x5660, 0x5661, 0x5663, + 0x5665, 0x5666, 0x5667, 0x566d, 0x566e, 0x566f, 0x5670, 0x5672, + 0x5673, 0x5674, 0x5675, 0x5677, 0x5678, 0x5679, 0x567a, 0x567d, + 0x567e, 0x567f, 0x5680, 0x5681, 0x5682, 0x5683, 0x5684, 0x5687, + 0x5688, 0x5689, 0x568a, 0x568b, 0x568c, 0x568d, 0x5690, 0x5691, + 0x5692, 0x5694, 0x5695, 0x5696, 0x5697, 0x5698, 0x5699, 0x569a, + 0x569b, 0x569c, 0x569d, 0x569e, 0x569f, 0x56a0, 0x56a1, 0x56a2, + 0x56a4, 0x56a5, 0x56a6, 0x56a7, 0x56a8, 0x56a9, 0x56aa, 0x56ab, + 0x56ac, 0x56ad, 0x56ae, 0x56b0, 0x56b1, 0x56b2, 0x56b3, 0x56b4, + 0x56b5, 0x56b6, 0x56b8, 0x56b9, 0x56ba, 0x56bb, 0x56bd, 0x56be, + 0x56bf, 0x56c0, 0x56c1, 0x56c2, 0x56c3, 0x56c4, 0x56c5, 0x56c6, + 0x56c7, 0x56c8, 0x56c9, 0x56cb, 0x56cc, 0x56cd, 0x56ce, 0x56cf, + 0x56d0, 0x56d1, 0x56d2, 0x56d3, 0x56d5, 0x56d6, 0x56d8, 0x56d9, + 0x56dc, 0x56e3, 0x56e5, 0x56e6, 0x56e7, 0x56e8, 0x56e9, 0x56ea, + 0x56ec, 0x56ee, 0x56ef, 0x56f2, 0x56f3, 0x56f6, 0x56f7, 0x56f8, + 0x56fb, 0x56fc, 0x5700, 0x5701, 0x5702, 0x5705, 0x5707, 0x570b, + 0x570c, 0x570d, 0x570e, 0x570f, 0x5710, 0x5711, + /* 0x88 */ + 0x5712, 0x5713, 0x5714, 0x5715, 0x5716, 0x5717, 0x5718, 0x5719, + 0x571a, 0x571b, 0x571d, 0x571e, 0x5720, 0x5721, 0x5722, 0x5724, + 0x5725, 0x5726, 0x5727, 0x572b, 0x5731, 0x5732, 0x5734, 0x5735, + 0x5736, 0x5737, 0x5738, 0x573c, 0x573d, 0x573f, 0x5741, 0x5743, + 0x5744, 0x5745, 0x5746, 0x5748, 0x5749, 0x574b, 0x5752, 0x5753, + 0x5754, 0x5755, 0x5756, 0x5758, 0x5759, 0x5762, 0x5763, 0x5765, + 0x5767, 0x576c, 0x576e, 0x5770, 0x5771, 0x5772, 0x5774, 0x5775, + 0x5778, 0x5779, 0x577a, 0x577d, 0x577e, 0x577f, 0x5780, 0x5781, + 0x5787, 0x5788, 0x5789, 0x578a, 0x578d, 0x578e, 0x578f, 0x5790, + 0x5791, 0x5794, 0x5795, 0x5796, 0x5797, 0x5798, 0x5799, 0x579a, + 0x579c, 0x579d, 0x579e, 0x579f, 0x57a5, 0x57a8, 0x57aa, 0x57ac, + 0x57af, 0x57b0, 0x57b1, 0x57b3, 0x57b5, 0x57b6, 0x57b7, 0x57b9, + 0x57ba, 0x57bb, 0x57bc, 0x57bd, 0x57be, 0x57bf, 0x57c0, 0x57c1, + 0x57c4, 0x57c5, 0x57c6, 0x57c7, 0x57c8, 0x57c9, 0x57ca, 0x57cc, + 0x57cd, 0x57d0, 0x57d1, 0x57d3, 0x57d6, 0x57d7, 0x57db, 0x57dc, + 0x57de, 0x57e1, 0x57e2, 0x57e3, 0x57e5, 0x57e6, 0x57e7, 0x57e8, + 0x57e9, 0x57ea, 0x57eb, 0x57ec, 0x57ee, 0x57f0, 0x57f1, 0x57f2, + 0x57f3, 0x57f5, 0x57f6, 0x57f7, 0x57fb, 0x57fc, 0x57fe, 0x57ff, + 0x5801, 0x5803, 0x5804, 0x5805, 0x5808, 0x5809, 0x580a, 0x580c, + 0x580e, 0x580f, 0x5810, 0x5812, 0x5813, 0x5814, 0x5816, 0x5817, + 0x5818, 0x581a, 0x581b, 0x581c, 0x581d, 0x581f, 0x5822, 0x5823, + 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, 0x582b, 0x582c, 0x582d, + 0x582e, 0x582f, 0x5831, 0x5832, 0x5833, 0x5834, 0x5836, 0x5837, + 0x5838, 0x5839, 0x583a, 0x583b, 0x583c, 0x583d, + /* 0x89 */ + 0x583e, 0x583f, 0x5840, 0x5841, 0x5842, 0x5843, 0x5845, 0x5846, + 0x5847, 0x5848, 0x5849, 0x584a, 0x584b, 0x584e, 0x584f, 0x5850, + 0x5852, 0x5853, 0x5855, 0x5856, 0x5857, 0x5859, 0x585a, 0x585b, + 0x585c, 0x585d, 0x585f, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, + 0x5866, 0x5867, 0x5868, 0x5869, 0x586a, 0x586d, 0x586e, 0x586f, + 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877, + 0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587f, 0x5882, + 0x5884, 0x5886, 0x5887, 0x5888, 0x588a, 0x588b, 0x588c, 0x588d, + 0x588e, 0x588f, 0x5890, 0x5891, 0x5894, 0x5895, 0x5896, 0x5897, + 0x5898, 0x589b, 0x589c, 0x589d, 0x58a0, 0x58a1, 0x58a2, 0x58a3, + 0x58a4, 0x58a5, 0x58a6, 0x58a7, 0x58aa, 0x58ab, 0x58ac, 0x58ad, + 0x58ae, 0x58af, 0x58b0, 0x58b1, 0x58b2, 0x58b3, 0x58b4, 0x58b5, + 0x58b6, 0x58b7, 0x58b8, 0x58b9, 0x58ba, 0x58bb, 0x58bd, 0x58be, + 0x58bf, 0x58c0, 0x58c2, 0x58c3, 0x58c4, 0x58c6, 0x58c7, 0x58c8, + 0x58c9, 0x58ca, 0x58cb, 0x58cc, 0x58cd, 0x58ce, 0x58cf, 0x58d0, + 0x58d2, 0x58d3, 0x58d4, 0x58d6, 0x58d7, 0x58d8, 0x58d9, 0x58da, + 0x58db, 0x58dc, 0x58dd, 0x58de, 0x58df, 0x58e0, 0x58e1, 0x58e2, + 0x58e3, 0x58e5, 0x58e6, 0x58e7, 0x58e8, 0x58e9, 0x58ea, 0x58ed, + 0x58ef, 0x58f1, 0x58f2, 0x58f4, 0x58f5, 0x58f7, 0x58f8, 0x58fa, + 0x58fb, 0x58fc, 0x58fd, 0x58fe, 0x58ff, 0x5900, 0x5901, 0x5903, + 0x5905, 0x5906, 0x5908, 0x5909, 0x590a, 0x590b, 0x590c, 0x590e, + 0x5910, 0x5911, 0x5912, 0x5913, 0x5917, 0x5918, 0x591b, 0x591d, + 0x591e, 0x5920, 0x5921, 0x5922, 0x5923, 0x5926, 0x5928, 0x592c, + 0x5930, 0x5932, 0x5933, 0x5935, 0x5936, 0x593b, + /* 0x8a */ + 0x593d, 0x593e, 0x593f, 0x5940, 0x5943, 0x5945, 0x5946, 0x594a, + 0x594c, 0x594d, 0x5950, 0x5952, 0x5953, 0x5959, 0x595b, 0x595c, + 0x595d, 0x595e, 0x595f, 0x5961, 0x5963, 0x5964, 0x5966, 0x5967, + 0x5968, 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f, + 0x5970, 0x5971, 0x5972, 0x5975, 0x5977, 0x597a, 0x597b, 0x597c, + 0x597e, 0x597f, 0x5980, 0x5985, 0x5989, 0x598b, 0x598c, 0x598e, + 0x598f, 0x5990, 0x5991, 0x5994, 0x5995, 0x5998, 0x599a, 0x599b, + 0x599c, 0x599d, 0x599f, 0x59a0, 0x59a1, 0x59a2, 0x59a6, 0x59a7, + 0x59ac, 0x59ad, 0x59b0, 0x59b1, 0x59b3, 0x59b4, 0x59b5, 0x59b6, + 0x59b7, 0x59b8, 0x59ba, 0x59bc, 0x59bd, 0x59bf, 0x59c0, 0x59c1, + 0x59c2, 0x59c3, 0x59c4, 0x59c5, 0x59c7, 0x59c8, 0x59c9, 0x59cc, + 0x59cd, 0x59ce, 0x59cf, 0x59d5, 0x59d6, 0x59d9, 0x59db, 0x59de, + 0x59df, 0x59e0, 0x59e1, 0x59e2, 0x59e4, 0x59e6, 0x59e7, 0x59e9, + 0x59ea, 0x59eb, 0x59ed, 0x59ee, 0x59ef, 0x59f0, 0x59f1, 0x59f2, + 0x59f3, 0x59f4, 0x59f5, 0x59f6, 0x59f7, 0x59f8, 0x59fa, 0x59fc, + 0x59fd, 0x59fe, 0x5a00, 0x5a02, 0x5a0a, 0x5a0b, 0x5a0d, 0x5a0e, + 0x5a0f, 0x5a10, 0x5a12, 0x5a14, 0x5a15, 0x5a16, 0x5a17, 0x5a19, + 0x5a1a, 0x5a1b, 0x5a1d, 0x5a1e, 0x5a21, 0x5a22, 0x5a24, 0x5a26, + 0x5a27, 0x5a28, 0x5a2a, 0x5a2b, 0x5a2c, 0x5a2d, 0x5a2e, 0x5a2f, + 0x5a30, 0x5a33, 0x5a35, 0x5a37, 0x5a38, 0x5a39, 0x5a3a, 0x5a3b, + 0x5a3d, 0x5a3e, 0x5a3f, 0x5a41, 0x5a42, 0x5a43, 0x5a44, 0x5a45, + 0x5a47, 0x5a48, 0x5a4b, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f, 0x5a50, + 0x5a51, 0x5a52, 0x5a53, 0x5a54, 0x5a56, 0x5a57, 0x5a58, 0x5a59, + 0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f, 0x5a60, + /* 0x8b */ + 0x5a61, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a68, 0x5a69, 0x5a6b, + 0x5a6c, 0x5a6d, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71, 0x5a72, 0x5a73, + 0x5a78, 0x5a79, 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5a80, 0x5a81, + 0x5a82, 0x5a83, 0x5a84, 0x5a85, 0x5a86, 0x5a87, 0x5a88, 0x5a89, + 0x5a8a, 0x5a8b, 0x5a8c, 0x5a8d, 0x5a8e, 0x5a8f, 0x5a90, 0x5a91, + 0x5a93, 0x5a94, 0x5a95, 0x5a96, 0x5a97, 0x5a98, 0x5a99, 0x5a9c, + 0x5a9d, 0x5a9e, 0x5a9f, 0x5aa0, 0x5aa1, 0x5aa2, 0x5aa3, 0x5aa4, + 0x5aa5, 0x5aa6, 0x5aa7, 0x5aa8, 0x5aa9, 0x5aab, 0x5aac, 0x5aad, + 0x5aae, 0x5aaf, 0x5ab0, 0x5ab1, 0x5ab4, 0x5ab6, 0x5ab7, 0x5ab9, + 0x5aba, 0x5abb, 0x5abc, 0x5abd, 0x5abf, 0x5ac0, 0x5ac3, 0x5ac4, + 0x5ac5, 0x5ac6, 0x5ac7, 0x5ac8, 0x5aca, 0x5acb, 0x5acd, 0x5ace, + 0x5acf, 0x5ad0, 0x5ad1, 0x5ad3, 0x5ad5, 0x5ad7, 0x5ad9, 0x5ada, + 0x5adb, 0x5add, 0x5ade, 0x5adf, 0x5ae2, 0x5ae4, 0x5ae5, 0x5ae7, + 0x5ae8, 0x5aea, 0x5aec, 0x5aed, 0x5aee, 0x5aef, 0x5af0, 0x5af2, + 0x5af3, 0x5af4, 0x5af5, 0x5af6, 0x5af7, 0x5af8, 0x5af9, 0x5afa, + 0x5afb, 0x5afc, 0x5afd, 0x5afe, 0x5aff, 0x5b00, 0x5b01, 0x5b02, + 0x5b03, 0x5b04, 0x5b05, 0x5b06, 0x5b07, 0x5b08, 0x5b0a, 0x5b0b, + 0x5b0c, 0x5b0d, 0x5b0e, 0x5b0f, 0x5b10, 0x5b11, 0x5b12, 0x5b13, + 0x5b14, 0x5b15, 0x5b18, 0x5b19, 0x5b1a, 0x5b1b, 0x5b1c, 0x5b1d, + 0x5b1e, 0x5b1f, 0x5b20, 0x5b21, 0x5b22, 0x5b23, 0x5b24, 0x5b25, + 0x5b26, 0x5b27, 0x5b28, 0x5b29, 0x5b2a, 0x5b2b, 0x5b2c, 0x5b2d, + 0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b33, 0x5b35, 0x5b36, 0x5b38, + 0x5b39, 0x5b3a, 0x5b3b, 0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f, 0x5b41, + 0x5b42, 0x5b43, 0x5b44, 0x5b45, 0x5b46, 0x5b47, + /* 0x8c */ + 0x5b48, 0x5b49, 0x5b4a, 0x5b4b, 0x5b4c, 0x5b4d, 0x5b4e, 0x5b4f, + 0x5b52, 0x5b56, 0x5b5e, 0x5b60, 0x5b61, 0x5b67, 0x5b68, 0x5b6b, + 0x5b6d, 0x5b6e, 0x5b6f, 0x5b72, 0x5b74, 0x5b76, 0x5b77, 0x5b78, + 0x5b79, 0x5b7b, 0x5b7c, 0x5b7e, 0x5b7f, 0x5b82, 0x5b86, 0x5b8a, + 0x5b8d, 0x5b8e, 0x5b90, 0x5b91, 0x5b92, 0x5b94, 0x5b96, 0x5b9f, + 0x5ba7, 0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5bae, 0x5baf, 0x5bb1, + 0x5bb2, 0x5bb7, 0x5bba, 0x5bbb, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bc3, + 0x5bc8, 0x5bc9, 0x5bca, 0x5bcb, 0x5bcd, 0x5bce, 0x5bcf, 0x5bd1, + 0x5bd4, 0x5bd5, 0x5bd6, 0x5bd7, 0x5bd8, 0x5bd9, 0x5bda, 0x5bdb, + 0x5bdc, 0x5be0, 0x5be2, 0x5be3, 0x5be6, 0x5be7, 0x5be9, 0x5bea, + 0x5beb, 0x5bec, 0x5bed, 0x5bef, 0x5bf1, 0x5bf2, 0x5bf3, 0x5bf4, + 0x5bf5, 0x5bf6, 0x5bf7, 0x5bfd, 0x5bfe, 0x5c00, 0x5c02, 0x5c03, + 0x5c05, 0x5c07, 0x5c08, 0x5c0b, 0x5c0c, 0x5c0d, 0x5c0e, 0x5c10, + 0x5c12, 0x5c13, 0x5c17, 0x5c19, 0x5c1b, 0x5c1e, 0x5c1f, 0x5c20, + 0x5c21, 0x5c23, 0x5c26, 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, 0x5c2d, + 0x5c2e, 0x5c2f, 0x5c30, 0x5c32, 0x5c33, 0x5c35, 0x5c36, 0x5c37, + 0x5c43, 0x5c44, 0x5c46, 0x5c47, 0x5c4c, 0x5c4d, 0x5c52, 0x5c53, + 0x5c54, 0x5c56, 0x5c57, 0x5c58, 0x5c5a, 0x5c5b, 0x5c5c, 0x5c5d, + 0x5c5f, 0x5c62, 0x5c64, 0x5c67, 0x5c68, 0x5c69, 0x5c6a, 0x5c6b, + 0x5c6c, 0x5c6d, 0x5c70, 0x5c72, 0x5c73, 0x5c74, 0x5c75, 0x5c76, + 0x5c77, 0x5c78, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c7e, 0x5c80, 0x5c83, + 0x5c84, 0x5c85, 0x5c86, 0x5c87, 0x5c89, 0x5c8a, 0x5c8b, 0x5c8e, + 0x5c8f, 0x5c92, 0x5c93, 0x5c95, 0x5c9d, 0x5c9e, 0x5c9f, 0x5ca0, + 0x5ca1, 0x5ca4, 0x5ca5, 0x5ca6, 0x5ca7, 0x5ca8, + /* 0x8d */ + 0x5caa, 0x5cae, 0x5caf, 0x5cb0, 0x5cb2, 0x5cb4, 0x5cb6, 0x5cb9, + 0x5cba, 0x5cbb, 0x5cbc, 0x5cbe, 0x5cc0, 0x5cc2, 0x5cc3, 0x5cc5, + 0x5cc6, 0x5cc7, 0x5cc8, 0x5cc9, 0x5cca, 0x5ccc, 0x5ccd, 0x5cce, + 0x5ccf, 0x5cd0, 0x5cd1, 0x5cd3, 0x5cd4, 0x5cd5, 0x5cd6, 0x5cd7, + 0x5cd8, 0x5cda, 0x5cdb, 0x5cdc, 0x5cdd, 0x5cde, 0x5cdf, 0x5ce0, + 0x5ce2, 0x5ce3, 0x5ce7, 0x5ce9, 0x5ceb, 0x5cec, 0x5cee, 0x5cef, + 0x5cf1, 0x5cf2, 0x5cf3, 0x5cf4, 0x5cf5, 0x5cf6, 0x5cf7, 0x5cf8, + 0x5cf9, 0x5cfa, 0x5cfc, 0x5cfd, 0x5cfe, 0x5cff, 0x5d00, 0x5d01, + 0x5d04, 0x5d05, 0x5d08, 0x5d09, 0x5d0a, 0x5d0b, 0x5d0c, 0x5d0d, + 0x5d0f, 0x5d10, 0x5d11, 0x5d12, 0x5d13, 0x5d15, 0x5d17, 0x5d18, + 0x5d19, 0x5d1a, 0x5d1c, 0x5d1d, 0x5d1f, 0x5d20, 0x5d21, 0x5d22, + 0x5d23, 0x5d25, 0x5d28, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2f, 0x5d30, + 0x5d31, 0x5d32, 0x5d33, 0x5d35, 0x5d36, 0x5d37, 0x5d38, 0x5d39, + 0x5d3a, 0x5d3b, 0x5d3c, 0x5d3f, 0x5d40, 0x5d41, 0x5d42, 0x5d43, + 0x5d44, 0x5d45, 0x5d46, 0x5d48, 0x5d49, 0x5d4d, 0x5d4e, 0x5d4f, + 0x5d50, 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, 0x5d57, + 0x5d59, 0x5d5a, 0x5d5c, 0x5d5e, 0x5d5f, 0x5d60, 0x5d61, 0x5d62, + 0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67, 0x5d68, 0x5d6a, 0x5d6d, + 0x5d6e, 0x5d70, 0x5d71, 0x5d72, 0x5d73, 0x5d75, 0x5d76, 0x5d77, + 0x5d78, 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, 0x5d7f, + 0x5d80, 0x5d81, 0x5d83, 0x5d84, 0x5d85, 0x5d86, 0x5d87, 0x5d88, + 0x5d89, 0x5d8a, 0x5d8b, 0x5d8c, 0x5d8d, 0x5d8e, 0x5d8f, 0x5d90, + 0x5d91, 0x5d92, 0x5d93, 0x5d94, 0x5d95, 0x5d96, 0x5d97, 0x5d98, + 0x5d9a, 0x5d9b, 0x5d9c, 0x5d9e, 0x5d9f, 0x5da0, + /* 0x8e */ + 0x5da1, 0x5da2, 0x5da3, 0x5da4, 0x5da5, 0x5da6, 0x5da7, 0x5da8, + 0x5da9, 0x5daa, 0x5dab, 0x5dac, 0x5dad, 0x5dae, 0x5daf, 0x5db0, + 0x5db1, 0x5db2, 0x5db3, 0x5db4, 0x5db5, 0x5db6, 0x5db8, 0x5db9, + 0x5dba, 0x5dbb, 0x5dbc, 0x5dbd, 0x5dbe, 0x5dbf, 0x5dc0, 0x5dc1, + 0x5dc2, 0x5dc3, 0x5dc4, 0x5dc6, 0x5dc7, 0x5dc8, 0x5dc9, 0x5dca, + 0x5dcb, 0x5dcc, 0x5dce, 0x5dcf, 0x5dd0, 0x5dd1, 0x5dd2, 0x5dd3, + 0x5dd4, 0x5dd5, 0x5dd6, 0x5dd7, 0x5dd8, 0x5dd9, 0x5dda, 0x5ddc, + 0x5ddf, 0x5de0, 0x5de3, 0x5de4, 0x5dea, 0x5dec, 0x5ded, 0x5df0, + 0x5df5, 0x5df6, 0x5df8, 0x5df9, 0x5dfa, 0x5dfb, 0x5dfc, 0x5dff, + 0x5e00, 0x5e04, 0x5e07, 0x5e09, 0x5e0a, 0x5e0b, 0x5e0d, 0x5e0e, + 0x5e12, 0x5e13, 0x5e17, 0x5e1e, 0x5e1f, 0x5e20, 0x5e21, 0x5e22, + 0x5e23, 0x5e24, 0x5e25, 0x5e28, 0x5e29, 0x5e2a, 0x5e2b, 0x5e2c, + 0x5e2f, 0x5e30, 0x5e32, 0x5e33, 0x5e34, 0x5e35, 0x5e36, 0x5e39, + 0x5e3a, 0x5e3e, 0x5e3f, 0x5e40, 0x5e41, 0x5e43, 0x5e46, 0x5e47, + 0x5e48, 0x5e49, 0x5e4a, 0x5e4b, 0x5e4d, 0x5e4e, 0x5e4f, 0x5e50, + 0x5e51, 0x5e52, 0x5e53, 0x5e56, 0x5e57, 0x5e58, 0x5e59, 0x5e5a, + 0x5e5c, 0x5e5d, 0x5e5f, 0x5e60, 0x5e63, 0x5e64, 0x5e65, 0x5e66, + 0x5e67, 0x5e68, 0x5e69, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, + 0x5e6f, 0x5e70, 0x5e71, 0x5e75, 0x5e77, 0x5e79, 0x5e7e, 0x5e81, + 0x5e82, 0x5e83, 0x5e85, 0x5e88, 0x5e89, 0x5e8c, 0x5e8d, 0x5e8e, + 0x5e92, 0x5e98, 0x5e9b, 0x5e9d, 0x5ea1, 0x5ea2, 0x5ea3, 0x5ea4, + 0x5ea8, 0x5ea9, 0x5eaa, 0x5eab, 0x5eac, 0x5eae, 0x5eaf, 0x5eb0, + 0x5eb1, 0x5eb2, 0x5eb4, 0x5eba, 0x5ebb, 0x5ebc, 0x5ebd, 0x5ebf, + 0x5ec0, 0x5ec1, 0x5ec2, 0x5ec3, 0x5ec4, 0x5ec5, + /* 0x8f */ + 0x5ec6, 0x5ec7, 0x5ec8, 0x5ecb, 0x5ecc, 0x5ecd, 0x5ece, 0x5ecf, + 0x5ed0, 0x5ed4, 0x5ed5, 0x5ed7, 0x5ed8, 0x5ed9, 0x5eda, 0x5edc, + 0x5edd, 0x5ede, 0x5edf, 0x5ee0, 0x5ee1, 0x5ee2, 0x5ee3, 0x5ee4, + 0x5ee5, 0x5ee6, 0x5ee7, 0x5ee9, 0x5eeb, 0x5eec, 0x5eed, 0x5eee, + 0x5eef, 0x5ef0, 0x5ef1, 0x5ef2, 0x5ef3, 0x5ef5, 0x5ef8, 0x5ef9, + 0x5efb, 0x5efc, 0x5efd, 0x5f05, 0x5f06, 0x5f07, 0x5f09, 0x5f0c, + 0x5f0d, 0x5f0e, 0x5f10, 0x5f12, 0x5f14, 0x5f16, 0x5f19, 0x5f1a, + 0x5f1c, 0x5f1d, 0x5f1e, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f28, + 0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f32, 0x5f33, 0x5f34, 0x5f35, + 0x5f36, 0x5f37, 0x5f38, 0x5f3b, 0x5f3d, 0x5f3e, 0x5f3f, 0x5f41, + 0x5f42, 0x5f43, 0x5f44, 0x5f45, 0x5f46, 0x5f47, 0x5f48, 0x5f49, + 0x5f4a, 0x5f4b, 0x5f4c, 0x5f4d, 0x5f4e, 0x5f4f, 0x5f51, 0x5f54, + 0x5f59, 0x5f5a, 0x5f5b, 0x5f5c, 0x5f5e, 0x5f5f, 0x5f60, 0x5f63, + 0x5f65, 0x5f67, 0x5f68, 0x5f6b, 0x5f6e, 0x5f6f, 0x5f72, 0x5f74, + 0x5f75, 0x5f76, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e, 0x5f7f, 0x5f83, + 0x5f86, 0x5f8d, 0x5f8e, 0x5f8f, 0x5f91, 0x5f93, 0x5f94, 0x5f96, + 0x5f9a, 0x5f9b, 0x5f9d, 0x5f9e, 0x5f9f, 0x5fa0, 0x5fa2, 0x5fa3, + 0x5fa4, 0x5fa5, 0x5fa6, 0x5fa7, 0x5fa9, 0x5fab, 0x5fac, 0x5faf, + 0x5fb0, 0x5fb1, 0x5fb2, 0x5fb3, 0x5fb4, 0x5fb6, 0x5fb8, 0x5fb9, + 0x5fba, 0x5fbb, 0x5fbe, 0x5fbf, 0x5fc0, 0x5fc1, 0x5fc2, 0x5fc7, + 0x5fc8, 0x5fca, 0x5fcb, 0x5fce, 0x5fd3, 0x5fd4, 0x5fd5, 0x5fda, + 0x5fdb, 0x5fdc, 0x5fde, 0x5fdf, 0x5fe2, 0x5fe3, 0x5fe5, 0x5fe6, + 0x5fe8, 0x5fe9, 0x5fec, 0x5fef, 0x5ff0, 0x5ff2, 0x5ff3, 0x5ff4, + 0x5ff6, 0x5ff7, 0x5ff9, 0x5ffa, 0x5ffc, 0x6007, + /* 0x90 */ + 0x6008, 0x6009, 0x600b, 0x600c, 0x6010, 0x6011, 0x6013, 0x6017, + 0x6018, 0x601a, 0x601e, 0x601f, 0x6022, 0x6023, 0x6024, 0x602c, + 0x602d, 0x602e, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6036, + 0x6037, 0x6038, 0x6039, 0x603a, 0x603d, 0x603e, 0x6040, 0x6044, + 0x6045, 0x6046, 0x6047, 0x6048, 0x6049, 0x604a, 0x604c, 0x604e, + 0x604f, 0x6051, 0x6053, 0x6054, 0x6056, 0x6057, 0x6058, 0x605b, + 0x605c, 0x605e, 0x605f, 0x6060, 0x6061, 0x6065, 0x6066, 0x606e, + 0x6071, 0x6072, 0x6074, 0x6075, 0x6077, 0x607e, 0x6080, 0x6081, + 0x6082, 0x6085, 0x6086, 0x6087, 0x6088, 0x608a, 0x608b, 0x608e, + 0x608f, 0x6090, 0x6091, 0x6093, 0x6095, 0x6097, 0x6098, 0x6099, + 0x609c, 0x609e, 0x60a1, 0x60a2, 0x60a4, 0x60a5, 0x60a7, 0x60a9, + 0x60aa, 0x60ae, 0x60b0, 0x60b3, 0x60b5, 0x60b6, 0x60b7, 0x60b9, + 0x60ba, 0x60bd, 0x60be, 0x60bf, 0x60c0, 0x60c1, 0x60c2, 0x60c3, + 0x60c4, 0x60c7, 0x60c8, 0x60c9, 0x60cc, 0x60cd, 0x60ce, 0x60cf, + 0x60d0, 0x60d2, 0x60d3, 0x60d4, 0x60d6, 0x60d7, 0x60d9, 0x60db, + 0x60de, 0x60e1, 0x60e2, 0x60e3, 0x60e4, 0x60e5, 0x60ea, 0x60f1, + 0x60f2, 0x60f5, 0x60f7, 0x60f8, 0x60fb, 0x60fc, 0x60fd, 0x60fe, + 0x60ff, 0x6102, 0x6103, 0x6104, 0x6105, 0x6107, 0x610a, 0x610b, + 0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, 0x6117, + 0x6118, 0x6119, 0x611b, 0x611c, 0x611d, 0x611e, 0x6121, 0x6122, + 0x6125, 0x6128, 0x6129, 0x612a, 0x612c, 0x612d, 0x612e, 0x612f, + 0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, 0x6137, + 0x6138, 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, 0x6140, + 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146, + /* 0x91 */ + 0x6147, 0x6149, 0x614b, 0x614d, 0x614f, 0x6150, 0x6152, 0x6153, + 0x6154, 0x6156, 0x6157, 0x6158, 0x6159, 0x615a, 0x615b, 0x615c, + 0x615e, 0x615f, 0x6160, 0x6161, 0x6163, 0x6164, 0x6165, 0x6166, + 0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f, 0x6171, + 0x6172, 0x6173, 0x6174, 0x6176, 0x6178, 0x6179, 0x617a, 0x617b, + 0x617c, 0x617d, 0x617e, 0x617f, 0x6180, 0x6181, 0x6182, 0x6183, + 0x6184, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, 0x618a, 0x618c, + 0x618d, 0x618f, 0x6190, 0x6191, 0x6192, 0x6193, 0x6195, 0x6196, + 0x6197, 0x6198, 0x6199, 0x619a, 0x619b, 0x619c, 0x619e, 0x619f, + 0x61a0, 0x61a1, 0x61a2, 0x61a3, 0x61a4, 0x61a5, 0x61a6, 0x61aa, + 0x61ab, 0x61ad, 0x61ae, 0x61af, 0x61b0, 0x61b1, 0x61b2, 0x61b3, + 0x61b4, 0x61b5, 0x61b6, 0x61b8, 0x61b9, 0x61ba, 0x61bb, 0x61bc, + 0x61bd, 0x61bf, 0x61c0, 0x61c1, 0x61c3, 0x61c4, 0x61c5, 0x61c6, + 0x61c7, 0x61c9, 0x61cc, 0x61cd, 0x61ce, 0x61cf, 0x61d0, 0x61d3, + 0x61d5, 0x61d6, 0x61d7, 0x61d8, 0x61d9, 0x61da, 0x61db, 0x61dc, + 0x61dd, 0x61de, 0x61df, 0x61e0, 0x61e1, 0x61e2, 0x61e3, 0x61e4, + 0x61e5, 0x61e7, 0x61e8, 0x61e9, 0x61ea, 0x61eb, 0x61ec, 0x61ed, + 0x61ee, 0x61ef, 0x61f0, 0x61f1, 0x61f2, 0x61f3, 0x61f4, 0x61f6, + 0x61f7, 0x61f8, 0x61f9, 0x61fa, 0x61fb, 0x61fc, 0x61fd, 0x61fe, + 0x6200, 0x6201, 0x6202, 0x6203, 0x6204, 0x6205, 0x6207, 0x6209, + 0x6213, 0x6214, 0x6219, 0x621c, 0x621d, 0x621e, 0x6220, 0x6223, + 0x6226, 0x6227, 0x6228, 0x6229, 0x622b, 0x622d, 0x622f, 0x6230, + 0x6231, 0x6232, 0x6235, 0x6236, 0x6238, 0x6239, 0x623a, 0x623b, + 0x623c, 0x6242, 0x6244, 0x6245, 0x6246, 0x624a, + /* 0x92 */ + 0x624f, 0x6250, 0x6255, 0x6256, 0x6257, 0x6259, 0x625a, 0x625c, + 0x625d, 0x625e, 0x625f, 0x6260, 0x6261, 0x6262, 0x6264, 0x6265, + 0x6268, 0x6271, 0x6272, 0x6274, 0x6275, 0x6277, 0x6278, 0x627a, + 0x627b, 0x627d, 0x6281, 0x6282, 0x6283, 0x6285, 0x6286, 0x6287, + 0x6288, 0x628b, 0x628c, 0x628d, 0x628e, 0x628f, 0x6290, 0x6294, + 0x6299, 0x629c, 0x629d, 0x629e, 0x62a3, 0x62a6, 0x62a7, 0x62a9, + 0x62aa, 0x62ad, 0x62ae, 0x62af, 0x62b0, 0x62b2, 0x62b3, 0x62b4, + 0x62b6, 0x62b7, 0x62b8, 0x62ba, 0x62be, 0x62c0, 0x62c1, 0x62c3, + 0x62cb, 0x62cf, 0x62d1, 0x62d5, 0x62dd, 0x62de, 0x62e0, 0x62e1, + 0x62e4, 0x62ea, 0x62eb, 0x62f0, 0x62f2, 0x62f5, 0x62f8, 0x62f9, + 0x62fa, 0x62fb, 0x6300, 0x6303, 0x6304, 0x6305, 0x6306, 0x630a, + 0x630b, 0x630c, 0x630d, 0x630f, 0x6310, 0x6312, 0x6313, 0x6314, + 0x6315, 0x6317, 0x6318, 0x6319, 0x631c, 0x6326, 0x6327, 0x6329, + 0x632c, 0x632d, 0x632e, 0x6330, 0x6331, 0x6333, 0x6334, 0x6335, + 0x6336, 0x6337, 0x6338, 0x633b, 0x633c, 0x633e, 0x633f, 0x6340, + 0x6341, 0x6344, 0x6347, 0x6348, 0x634a, 0x6351, 0x6352, 0x6353, + 0x6354, 0x6356, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b, 0x635c, + 0x635d, 0x6360, 0x6364, 0x6365, 0x6366, 0x6368, 0x636a, 0x636b, + 0x636c, 0x636f, 0x6370, 0x6372, 0x6373, 0x6374, 0x6375, 0x6378, + 0x6379, 0x637c, 0x637d, 0x637e, 0x637f, 0x6381, 0x6383, 0x6384, + 0x6385, 0x6386, 0x638b, 0x638d, 0x6391, 0x6393, 0x6394, 0x6395, + 0x6397, 0x6399, 0x639a, 0x639b, 0x639c, 0x639d, 0x639e, 0x639f, + 0x63a1, 0x63a4, 0x63a6, 0x63ab, 0x63af, 0x63b1, 0x63b2, 0x63b5, + 0x63b6, 0x63b9, 0x63bb, 0x63bd, 0x63bf, 0x63c0, + /* 0x93 */ + 0x63c1, 0x63c2, 0x63c3, 0x63c5, 0x63c7, 0x63c8, 0x63ca, 0x63cb, + 0x63cc, 0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63d7, 0x63d8, 0x63d9, + 0x63da, 0x63db, 0x63dc, 0x63dd, 0x63df, 0x63e2, 0x63e4, 0x63e5, + 0x63e6, 0x63e7, 0x63e8, 0x63eb, 0x63ec, 0x63ee, 0x63ef, 0x63f0, + 0x63f1, 0x63f3, 0x63f5, 0x63f7, 0x63f9, 0x63fa, 0x63fb, 0x63fc, + 0x63fe, 0x6403, 0x6404, 0x6406, 0x6407, 0x6408, 0x6409, 0x640a, + 0x640d, 0x640e, 0x6411, 0x6412, 0x6415, 0x6416, 0x6417, 0x6418, + 0x6419, 0x641a, 0x641d, 0x641f, 0x6422, 0x6423, 0x6424, 0x6425, + 0x6427, 0x6428, 0x6429, 0x642b, 0x642e, 0x642f, 0x6430, 0x6431, + 0x6432, 0x6433, 0x6435, 0x6436, 0x6437, 0x6438, 0x6439, 0x643b, + 0x643c, 0x643e, 0x6440, 0x6442, 0x6443, 0x6449, 0x644b, 0x644c, + 0x644d, 0x644e, 0x644f, 0x6450, 0x6451, 0x6453, 0x6455, 0x6456, + 0x6457, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d, 0x645f, 0x6460, + 0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, 0x6468, 0x646a, + 0x646b, 0x646c, 0x646e, 0x646f, 0x6470, 0x6471, 0x6472, 0x6473, + 0x6474, 0x6475, 0x6476, 0x6477, 0x647b, 0x647c, 0x647d, 0x647e, + 0x647f, 0x6480, 0x6481, 0x6483, 0x6486, 0x6488, 0x6489, 0x648a, + 0x648b, 0x648c, 0x648d, 0x648e, 0x648f, 0x6490, 0x6493, 0x6494, + 0x6497, 0x6498, 0x649a, 0x649b, 0x649c, 0x649d, 0x649f, 0x64a0, + 0x64a1, 0x64a2, 0x64a3, 0x64a5, 0x64a6, 0x64a7, 0x64a8, 0x64aa, + 0x64ab, 0x64af, 0x64b1, 0x64b2, 0x64b3, 0x64b4, 0x64b6, 0x64b9, + 0x64bb, 0x64bd, 0x64be, 0x64bf, 0x64c1, 0x64c3, 0x64c4, 0x64c6, + 0x64c7, 0x64c8, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64cf, 0x64d1, + 0x64d3, 0x64d4, 0x64d5, 0x64d6, 0x64d9, 0x64da, + /* 0x94 */ + 0x64db, 0x64dc, 0x64dd, 0x64df, 0x64e0, 0x64e1, 0x64e3, 0x64e5, + 0x64e7, 0x64e8, 0x64e9, 0x64ea, 0x64eb, 0x64ec, 0x64ed, 0x64ee, + 0x64ef, 0x64f0, 0x64f1, 0x64f2, 0x64f3, 0x64f4, 0x64f5, 0x64f6, + 0x64f7, 0x64f8, 0x64f9, 0x64fa, 0x64fb, 0x64fc, 0x64fd, 0x64fe, + 0x64ff, 0x6501, 0x6502, 0x6503, 0x6504, 0x6505, 0x6506, 0x6507, + 0x6508, 0x650a, 0x650b, 0x650c, 0x650d, 0x650e, 0x650f, 0x6510, + 0x6511, 0x6513, 0x6514, 0x6515, 0x6516, 0x6517, 0x6519, 0x651a, + 0x651b, 0x651c, 0x651d, 0x651e, 0x651f, 0x6520, 0x6521, 0x6522, + 0x6523, 0x6524, 0x6526, 0x6527, 0x6528, 0x6529, 0x652a, 0x652c, + 0x652d, 0x6530, 0x6531, 0x6532, 0x6533, 0x6537, 0x653a, 0x653c, + 0x653d, 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6546, 0x6547, + 0x654a, 0x654b, 0x654d, 0x654e, 0x6550, 0x6552, 0x6553, 0x6554, + 0x6557, 0x6558, 0x655a, 0x655c, 0x655f, 0x6560, 0x6561, 0x6564, + 0x6565, 0x6567, 0x6568, 0x6569, 0x656a, 0x656d, 0x656e, 0x656f, + 0x6571, 0x6573, 0x6575, 0x6576, 0x6578, 0x6579, 0x657a, 0x657b, + 0x657c, 0x657d, 0x657e, 0x657f, 0x6580, 0x6581, 0x6582, 0x6583, + 0x6584, 0x6585, 0x6586, 0x6588, 0x6589, 0x658a, 0x658d, 0x658e, + 0x658f, 0x6592, 0x6594, 0x6595, 0x6596, 0x6598, 0x659a, 0x659d, + 0x659e, 0x65a0, 0x65a2, 0x65a3, 0x65a6, 0x65a8, 0x65aa, 0x65ac, + 0x65ae, 0x65b1, 0x65b2, 0x65b3, 0x65b4, 0x65b5, 0x65b6, 0x65b7, + 0x65b8, 0x65ba, 0x65bb, 0x65be, 0x65bf, 0x65c0, 0x65c2, 0x65c7, + 0x65c8, 0x65c9, 0x65ca, 0x65cd, 0x65d0, 0x65d1, 0x65d3, 0x65d4, + 0x65d5, 0x65d8, 0x65d9, 0x65da, 0x65db, 0x65dc, 0x65dd, 0x65de, + 0x65df, 0x65e1, 0x65e3, 0x65e4, 0x65ea, 0x65eb, + /* 0x95 */ + 0x65f2, 0x65f3, 0x65f4, 0x65f5, 0x65f8, 0x65f9, 0x65fb, 0x65fc, + 0x65fd, 0x65fe, 0x65ff, 0x6601, 0x6604, 0x6605, 0x6607, 0x6608, + 0x6609, 0x660b, 0x660d, 0x6610, 0x6611, 0x6612, 0x6616, 0x6617, + 0x6618, 0x661a, 0x661b, 0x661c, 0x661e, 0x6621, 0x6622, 0x6623, + 0x6624, 0x6626, 0x6629, 0x662a, 0x662b, 0x662c, 0x662e, 0x6630, + 0x6632, 0x6633, 0x6637, 0x6638, 0x6639, 0x663a, 0x663b, 0x663d, + 0x663f, 0x6640, 0x6642, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648, + 0x6649, 0x664a, 0x664d, 0x664e, 0x6650, 0x6651, 0x6658, 0x6659, + 0x665b, 0x665c, 0x665d, 0x665e, 0x6660, 0x6662, 0x6663, 0x6665, + 0x6667, 0x6669, 0x666a, 0x666b, 0x666c, 0x666d, 0x6671, 0x6672, + 0x6673, 0x6675, 0x6678, 0x6679, 0x667b, 0x667c, 0x667d, 0x667f, + 0x6680, 0x6681, 0x6683, 0x6685, 0x6686, 0x6688, 0x6689, 0x668a, + 0x668b, 0x668d, 0x668e, 0x668f, 0x6690, 0x6692, 0x6693, 0x6694, + 0x6695, 0x6698, 0x6699, 0x669a, 0x669b, 0x669c, 0x669e, 0x669f, + 0x66a0, 0x66a1, 0x66a2, 0x66a3, 0x66a4, 0x66a5, 0x66a6, 0x66a9, + 0x66aa, 0x66ab, 0x66ac, 0x66ad, 0x66af, 0x66b0, 0x66b1, 0x66b2, + 0x66b3, 0x66b5, 0x66b6, 0x66b7, 0x66b8, 0x66ba, 0x66bb, 0x66bc, + 0x66bd, 0x66bf, 0x66c0, 0x66c1, 0x66c2, 0x66c3, 0x66c4, 0x66c5, + 0x66c6, 0x66c7, 0x66c8, 0x66c9, 0x66ca, 0x66cb, 0x66cc, 0x66cd, + 0x66ce, 0x66cf, 0x66d0, 0x66d1, 0x66d2, 0x66d3, 0x66d4, 0x66d5, + 0x66d6, 0x66d7, 0x66d8, 0x66da, 0x66de, 0x66df, 0x66e0, 0x66e1, + 0x66e2, 0x66e3, 0x66e4, 0x66e5, 0x66e7, 0x66e8, 0x66ea, 0x66eb, + 0x66ec, 0x66ed, 0x66ee, 0x66ef, 0x66f1, 0x66f5, 0x66f6, 0x66f8, + 0x66fa, 0x66fb, 0x66fd, 0x6701, 0x6702, 0x6703, + /* 0x96 */ + 0x6704, 0x6705, 0x6706, 0x6707, 0x670c, 0x670e, 0x670f, 0x6711, + 0x6712, 0x6713, 0x6716, 0x6718, 0x6719, 0x671a, 0x671c, 0x671e, + 0x6720, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 0x6727, 0x6729, + 0x672e, 0x6730, 0x6732, 0x6733, 0x6736, 0x6737, 0x6738, 0x6739, + 0x673b, 0x673c, 0x673e, 0x673f, 0x6741, 0x6744, 0x6745, 0x6747, + 0x674a, 0x674b, 0x674d, 0x6752, 0x6754, 0x6755, 0x6757, 0x6758, + 0x6759, 0x675a, 0x675b, 0x675d, 0x6762, 0x6763, 0x6764, 0x6766, + 0x6767, 0x676b, 0x676c, 0x676e, 0x6771, 0x6774, 0x6776, 0x6778, + 0x6779, 0x677a, 0x677b, 0x677d, 0x6780, 0x6782, 0x6783, 0x6785, + 0x6786, 0x6788, 0x678a, 0x678c, 0x678d, 0x678e, 0x678f, 0x6791, + 0x6792, 0x6793, 0x6794, 0x6796, 0x6799, 0x679b, 0x679f, 0x67a0, + 0x67a1, 0x67a4, 0x67a6, 0x67a9, 0x67ac, 0x67ae, 0x67b1, 0x67b2, + 0x67b4, 0x67b9, 0x67ba, 0x67bb, 0x67bc, 0x67bd, 0x67be, 0x67bf, + 0x67c0, 0x67c2, 0x67c5, 0x67c6, 0x67c7, 0x67c8, 0x67c9, 0x67ca, + 0x67cb, 0x67cc, 0x67cd, 0x67ce, 0x67d5, 0x67d6, 0x67d7, 0x67db, + 0x67df, 0x67e1, 0x67e3, 0x67e4, 0x67e6, 0x67e7, 0x67e8, 0x67ea, + 0x67eb, 0x67ed, 0x67ee, 0x67f2, 0x67f5, 0x67f6, 0x67f7, 0x67f8, + 0x67f9, 0x67fa, 0x67fb, 0x67fc, 0x67fe, 0x6801, 0x6802, 0x6803, + 0x6804, 0x6806, 0x680d, 0x6810, 0x6812, 0x6814, 0x6815, 0x6818, + 0x6819, 0x681a, 0x681b, 0x681c, 0x681e, 0x681f, 0x6820, 0x6822, + 0x6823, 0x6824, 0x6825, 0x6826, 0x6827, 0x6828, 0x682b, 0x682c, + 0x682d, 0x682e, 0x682f, 0x6830, 0x6831, 0x6834, 0x6835, 0x6836, + 0x683a, 0x683b, 0x683f, 0x6847, 0x684b, 0x684d, 0x684f, 0x6852, + 0x6856, 0x6857, 0x6858, 0x6859, 0x685a, 0x685b, + /* 0x97 */ + 0x685c, 0x685d, 0x685e, 0x685f, 0x686a, 0x686c, 0x686d, 0x686e, + 0x686f, 0x6870, 0x6871, 0x6872, 0x6873, 0x6875, 0x6878, 0x6879, + 0x687a, 0x687b, 0x687c, 0x687d, 0x687e, 0x687f, 0x6880, 0x6882, + 0x6884, 0x6887, 0x6888, 0x6889, 0x688a, 0x688b, 0x688c, 0x688d, + 0x688e, 0x6890, 0x6891, 0x6892, 0x6894, 0x6895, 0x6896, 0x6898, + 0x6899, 0x689a, 0x689b, 0x689c, 0x689d, 0x689e, 0x689f, 0x68a0, + 0x68a1, 0x68a3, 0x68a4, 0x68a5, 0x68a9, 0x68aa, 0x68ab, 0x68ac, + 0x68ae, 0x68b1, 0x68b2, 0x68b4, 0x68b6, 0x68b7, 0x68b8, 0x68b9, + 0x68ba, 0x68bb, 0x68bc, 0x68bd, 0x68be, 0x68bf, 0x68c1, 0x68c3, + 0x68c4, 0x68c5, 0x68c6, 0x68c7, 0x68c8, 0x68ca, 0x68cc, 0x68ce, + 0x68cf, 0x68d0, 0x68d1, 0x68d3, 0x68d4, 0x68d6, 0x68d7, 0x68d9, + 0x68db, 0x68dc, 0x68dd, 0x68de, 0x68df, 0x68e1, 0x68e2, 0x68e4, + 0x68e5, 0x68e6, 0x68e7, 0x68e8, 0x68e9, 0x68ea, 0x68eb, 0x68ec, + 0x68ed, 0x68ef, 0x68f2, 0x68f3, 0x68f4, 0x68f6, 0x68f7, 0x68f8, + 0x68fb, 0x68fd, 0x68fe, 0x68ff, 0x6900, 0x6902, 0x6903, 0x6904, + 0x6906, 0x6907, 0x6908, 0x6909, 0x690a, 0x690c, 0x690f, 0x6911, + 0x6913, 0x6914, 0x6915, 0x6916, 0x6917, 0x6918, 0x6919, 0x691a, + 0x691b, 0x691c, 0x691d, 0x691e, 0x6921, 0x6922, 0x6923, 0x6925, + 0x6926, 0x6927, 0x6928, 0x6929, 0x692a, 0x692b, 0x692c, 0x692e, + 0x692f, 0x6931, 0x6932, 0x6933, 0x6935, 0x6936, 0x6937, 0x6938, + 0x693a, 0x693b, 0x693c, 0x693e, 0x6940, 0x6941, 0x6943, 0x6944, + 0x6945, 0x6946, 0x6947, 0x6948, 0x6949, 0x694a, 0x694b, 0x694c, + 0x694d, 0x694e, 0x694f, 0x6950, 0x6951, 0x6952, 0x6953, 0x6955, + 0x6956, 0x6958, 0x6959, 0x695b, 0x695c, 0x695f, + /* 0x98 */ + 0x6961, 0x6962, 0x6964, 0x6965, 0x6967, 0x6968, 0x6969, 0x696a, + 0x696c, 0x696d, 0x696f, 0x6970, 0x6972, 0x6973, 0x6974, 0x6975, + 0x6976, 0x697a, 0x697b, 0x697d, 0x697e, 0x697f, 0x6981, 0x6983, + 0x6985, 0x698a, 0x698b, 0x698c, 0x698e, 0x698f, 0x6990, 0x6991, + 0x6992, 0x6993, 0x6996, 0x6997, 0x6999, 0x699a, 0x699d, 0x699e, + 0x699f, 0x69a0, 0x69a1, 0x69a2, 0x69a3, 0x69a4, 0x69a5, 0x69a6, + 0x69a9, 0x69aa, 0x69ac, 0x69ae, 0x69af, 0x69b0, 0x69b2, 0x69b3, + 0x69b5, 0x69b6, 0x69b8, 0x69b9, 0x69ba, 0x69bc, 0x69bd, 0x69be, + 0x69bf, 0x69c0, 0x69c2, 0x69c3, 0x69c4, 0x69c5, 0x69c6, 0x69c7, + 0x69c8, 0x69c9, 0x69cb, 0x69cd, 0x69cf, 0x69d1, 0x69d2, 0x69d3, + 0x69d5, 0x69d6, 0x69d7, 0x69d8, 0x69d9, 0x69da, 0x69dc, 0x69dd, + 0x69de, 0x69e1, 0x69e2, 0x69e3, 0x69e4, 0x69e5, 0x69e6, 0x69e7, + 0x69e8, 0x69e9, 0x69ea, 0x69eb, 0x69ec, 0x69ee, 0x69ef, 0x69f0, + 0x69f1, 0x69f3, 0x69f4, 0x69f5, 0x69f6, 0x69f7, 0x69f8, 0x69f9, + 0x69fa, 0x69fb, 0x69fc, 0x69fe, 0x6a00, 0x6a01, 0x6a02, 0x6a03, + 0x6a04, 0x6a05, 0x6a06, 0x6a07, 0x6a08, 0x6a09, 0x6a0b, 0x6a0c, + 0x6a0d, 0x6a0e, 0x6a0f, 0x6a10, 0x6a11, 0x6a12, 0x6a13, 0x6a14, + 0x6a15, 0x6a16, 0x6a19, 0x6a1a, 0x6a1b, 0x6a1c, 0x6a1d, 0x6a1e, + 0x6a20, 0x6a22, 0x6a23, 0x6a24, 0x6a25, 0x6a26, 0x6a27, 0x6a29, + 0x6a2b, 0x6a2c, 0x6a2d, 0x6a2e, 0x6a30, 0x6a32, 0x6a33, 0x6a34, + 0x6a36, 0x6a37, 0x6a38, 0x6a39, 0x6a3a, 0x6a3b, 0x6a3c, 0x6a3f, + 0x6a40, 0x6a41, 0x6a42, 0x6a43, 0x6a45, 0x6a46, 0x6a48, 0x6a49, + 0x6a4a, 0x6a4b, 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f, 0x6a51, 0x6a52, + 0x6a53, 0x6a54, 0x6a55, 0x6a56, 0x6a57, 0x6a5a, + /* 0x99 */ + 0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f, 0x6a60, 0x6a62, 0x6a63, 0x6a64, + 0x6a66, 0x6a67, 0x6a68, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d, + 0x6a6e, 0x6a6f, 0x6a70, 0x6a72, 0x6a73, 0x6a74, 0x6a75, 0x6a76, + 0x6a77, 0x6a78, 0x6a7a, 0x6a7b, 0x6a7d, 0x6a7e, 0x6a7f, 0x6a81, + 0x6a82, 0x6a83, 0x6a85, 0x6a86, 0x6a87, 0x6a88, 0x6a89, 0x6a8a, + 0x6a8b, 0x6a8c, 0x6a8d, 0x6a8f, 0x6a92, 0x6a93, 0x6a94, 0x6a95, + 0x6a96, 0x6a98, 0x6a99, 0x6a9a, 0x6a9b, 0x6a9c, 0x6a9d, 0x6a9e, + 0x6a9f, 0x6aa1, 0x6aa2, 0x6aa3, 0x6aa4, 0x6aa5, 0x6aa6, 0x6aa7, + 0x6aa8, 0x6aaa, 0x6aad, 0x6aae, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab2, + 0x6ab3, 0x6ab4, 0x6ab5, 0x6ab6, 0x6ab7, 0x6ab8, 0x6ab9, 0x6aba, + 0x6abb, 0x6abc, 0x6abd, 0x6abe, 0x6abf, 0x6ac0, 0x6ac1, 0x6ac2, + 0x6ac3, 0x6ac4, 0x6ac5, 0x6ac6, 0x6ac7, 0x6ac8, 0x6ac9, 0x6aca, + 0x6acb, 0x6acc, 0x6acd, 0x6ace, 0x6acf, 0x6ad0, 0x6ad1, 0x6ad2, + 0x6ad3, 0x6ad4, 0x6ad5, 0x6ad6, 0x6ad7, 0x6ad8, 0x6ad9, 0x6ada, + 0x6adb, 0x6adc, 0x6add, 0x6ade, 0x6adf, 0x6ae0, 0x6ae1, 0x6ae2, + 0x6ae3, 0x6ae4, 0x6ae5, 0x6ae6, 0x6ae7, 0x6ae8, 0x6ae9, 0x6aea, + 0x6aeb, 0x6aec, 0x6aed, 0x6aee, 0x6aef, 0x6af0, 0x6af1, 0x6af2, + 0x6af3, 0x6af4, 0x6af5, 0x6af6, 0x6af7, 0x6af8, 0x6af9, 0x6afa, + 0x6afb, 0x6afc, 0x6afd, 0x6afe, 0x6aff, 0x6b00, 0x6b01, 0x6b02, + 0x6b03, 0x6b04, 0x6b05, 0x6b06, 0x6b07, 0x6b08, 0x6b09, 0x6b0a, + 0x6b0b, 0x6b0c, 0x6b0d, 0x6b0e, 0x6b0f, 0x6b10, 0x6b11, 0x6b12, + 0x6b13, 0x6b14, 0x6b15, 0x6b16, 0x6b17, 0x6b18, 0x6b19, 0x6b1a, + 0x6b1b, 0x6b1c, 0x6b1d, 0x6b1e, 0x6b1f, 0x6b25, 0x6b26, 0x6b28, + 0x6b29, 0x6b2a, 0x6b2b, 0x6b2c, 0x6b2d, 0x6b2e, + /* 0x9a */ + 0x6b2f, 0x6b30, 0x6b31, 0x6b33, 0x6b34, 0x6b35, 0x6b36, 0x6b38, + 0x6b3b, 0x6b3c, 0x6b3d, 0x6b3f, 0x6b40, 0x6b41, 0x6b42, 0x6b44, + 0x6b45, 0x6b48, 0x6b4a, 0x6b4b, 0x6b4d, 0x6b4e, 0x6b4f, 0x6b50, + 0x6b51, 0x6b52, 0x6b53, 0x6b54, 0x6b55, 0x6b56, 0x6b57, 0x6b58, + 0x6b5a, 0x6b5b, 0x6b5c, 0x6b5d, 0x6b5e, 0x6b5f, 0x6b60, 0x6b61, + 0x6b68, 0x6b69, 0x6b6b, 0x6b6c, 0x6b6d, 0x6b6e, 0x6b6f, 0x6b70, + 0x6b71, 0x6b72, 0x6b73, 0x6b74, 0x6b75, 0x6b76, 0x6b77, 0x6b78, + 0x6b7a, 0x6b7d, 0x6b7e, 0x6b7f, 0x6b80, 0x6b85, 0x6b88, 0x6b8c, + 0x6b8e, 0x6b8f, 0x6b90, 0x6b91, 0x6b94, 0x6b95, 0x6b97, 0x6b98, + 0x6b99, 0x6b9c, 0x6b9d, 0x6b9e, 0x6b9f, 0x6ba0, 0x6ba2, 0x6ba3, + 0x6ba4, 0x6ba5, 0x6ba6, 0x6ba7, 0x6ba8, 0x6ba9, 0x6bab, 0x6bac, + 0x6bad, 0x6bae, 0x6baf, 0x6bb0, 0x6bb1, 0x6bb2, 0x6bb6, 0x6bb8, + 0x6bb9, 0x6bba, 0x6bbb, 0x6bbc, 0x6bbd, 0x6bbe, 0x6bc0, 0x6bc3, + 0x6bc4, 0x6bc6, 0x6bc7, 0x6bc8, 0x6bc9, 0x6bca, 0x6bcc, 0x6bce, + 0x6bd0, 0x6bd1, 0x6bd8, 0x6bda, 0x6bdc, 0x6bdd, 0x6bde, 0x6bdf, + 0x6be0, 0x6be2, 0x6be3, 0x6be4, 0x6be5, 0x6be6, 0x6be7, 0x6be8, + 0x6be9, 0x6bec, 0x6bed, 0x6bee, 0x6bf0, 0x6bf1, 0x6bf2, 0x6bf4, + 0x6bf6, 0x6bf7, 0x6bf8, 0x6bfa, 0x6bfb, 0x6bfc, 0x6bfe, 0x6bff, + 0x6c00, 0x6c01, 0x6c02, 0x6c03, 0x6c04, 0x6c08, 0x6c09, 0x6c0a, + 0x6c0b, 0x6c0c, 0x6c0e, 0x6c12, 0x6c17, 0x6c1c, 0x6c1d, 0x6c1e, + 0x6c20, 0x6c23, 0x6c25, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c31, 0x6c33, + 0x6c36, 0x6c37, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3e, 0x6c3f, + 0x6c43, 0x6c44, 0x6c45, 0x6c48, 0x6c4b, 0x6c4c, 0x6c4d, 0x6c4e, + 0x6c4f, 0x6c51, 0x6c52, 0x6c53, 0x6c56, 0x6c58, + /* 0x9b */ + 0x6c59, 0x6c5a, 0x6c62, 0x6c63, 0x6c65, 0x6c66, 0x6c67, 0x6c6b, + 0x6c6c, 0x6c6d, 0x6c6e, 0x6c6f, 0x6c71, 0x6c73, 0x6c75, 0x6c77, + 0x6c78, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7f, 0x6c80, 0x6c84, 0x6c87, + 0x6c8a, 0x6c8b, 0x6c8d, 0x6c8e, 0x6c91, 0x6c92, 0x6c95, 0x6c96, + 0x6c97, 0x6c98, 0x6c9a, 0x6c9c, 0x6c9d, 0x6c9e, 0x6ca0, 0x6ca2, + 0x6ca8, 0x6cac, 0x6caf, 0x6cb0, 0x6cb4, 0x6cb5, 0x6cb6, 0x6cb7, + 0x6cba, 0x6cc0, 0x6cc1, 0x6cc2, 0x6cc3, 0x6cc6, 0x6cc7, 0x6cc8, + 0x6ccb, 0x6ccd, 0x6cce, 0x6ccf, 0x6cd1, 0x6cd2, 0x6cd8, 0x6cd9, + 0x6cda, 0x6cdc, 0x6cdd, 0x6cdf, 0x6ce4, 0x6ce6, 0x6ce7, 0x6ce9, + 0x6cec, 0x6ced, 0x6cf2, 0x6cf4, 0x6cf9, 0x6cff, 0x6d00, 0x6d02, + 0x6d03, 0x6d05, 0x6d06, 0x6d08, 0x6d09, 0x6d0a, 0x6d0d, 0x6d0f, + 0x6d10, 0x6d11, 0x6d13, 0x6d14, 0x6d15, 0x6d16, 0x6d18, 0x6d1c, + 0x6d1d, 0x6d1f, 0x6d20, 0x6d21, 0x6d22, 0x6d23, 0x6d24, 0x6d26, + 0x6d28, 0x6d29, 0x6d2c, 0x6d2d, 0x6d2f, 0x6d30, 0x6d34, 0x6d36, + 0x6d37, 0x6d38, 0x6d3a, 0x6d3f, 0x6d40, 0x6d42, 0x6d44, 0x6d49, + 0x6d4c, 0x6d50, 0x6d55, 0x6d56, 0x6d57, 0x6d58, 0x6d5b, 0x6d5d, + 0x6d5f, 0x6d61, 0x6d62, 0x6d64, 0x6d65, 0x6d67, 0x6d68, 0x6d6b, + 0x6d6c, 0x6d6d, 0x6d70, 0x6d71, 0x6d72, 0x6d73, 0x6d75, 0x6d76, + 0x6d79, 0x6d7a, 0x6d7b, 0x6d7d, 0x6d7e, 0x6d7f, 0x6d80, 0x6d81, + 0x6d83, 0x6d84, 0x6d86, 0x6d87, 0x6d8a, 0x6d8b, 0x6d8d, 0x6d8f, + 0x6d90, 0x6d92, 0x6d96, 0x6d97, 0x6d98, 0x6d99, 0x6d9a, 0x6d9c, + 0x6da2, 0x6da5, 0x6dac, 0x6dad, 0x6db0, 0x6db1, 0x6db3, 0x6db4, + 0x6db6, 0x6db7, 0x6db9, 0x6dba, 0x6dbb, 0x6dbc, 0x6dbd, 0x6dbe, + 0x6dc1, 0x6dc2, 0x6dc3, 0x6dc8, 0x6dc9, 0x6dca, + /* 0x9c */ + 0x6dcd, 0x6dce, 0x6dcf, 0x6dd0, 0x6dd2, 0x6dd3, 0x6dd4, 0x6dd5, + 0x6dd7, 0x6dda, 0x6ddb, 0x6ddc, 0x6ddf, 0x6de2, 0x6de3, 0x6de5, + 0x6de7, 0x6de8, 0x6de9, 0x6dea, 0x6ded, 0x6def, 0x6df0, 0x6df2, + 0x6df4, 0x6df5, 0x6df6, 0x6df8, 0x6dfa, 0x6dfd, 0x6dfe, 0x6dff, + 0x6e00, 0x6e01, 0x6e02, 0x6e03, 0x6e04, 0x6e06, 0x6e07, 0x6e08, + 0x6e09, 0x6e0b, 0x6e0f, 0x6e12, 0x6e13, 0x6e15, 0x6e18, 0x6e19, + 0x6e1b, 0x6e1c, 0x6e1e, 0x6e1f, 0x6e22, 0x6e26, 0x6e27, 0x6e28, + 0x6e2a, 0x6e2c, 0x6e2e, 0x6e30, 0x6e31, 0x6e33, 0x6e35, 0x6e36, + 0x6e37, 0x6e39, 0x6e3b, 0x6e3c, 0x6e3d, 0x6e3e, 0x6e3f, 0x6e40, + 0x6e41, 0x6e42, 0x6e45, 0x6e46, 0x6e47, 0x6e48, 0x6e49, 0x6e4a, + 0x6e4b, 0x6e4c, 0x6e4f, 0x6e50, 0x6e51, 0x6e52, 0x6e55, 0x6e57, + 0x6e59, 0x6e5a, 0x6e5c, 0x6e5d, 0x6e5e, 0x6e60, 0x6e61, 0x6e62, + 0x6e63, 0x6e64, 0x6e65, 0x6e66, 0x6e67, 0x6e68, 0x6e69, 0x6e6a, + 0x6e6c, 0x6e6d, 0x6e6f, 0x6e70, 0x6e71, 0x6e72, 0x6e73, 0x6e74, + 0x6e75, 0x6e76, 0x6e77, 0x6e78, 0x6e79, 0x6e7a, 0x6e7b, 0x6e7c, + 0x6e7d, 0x6e80, 0x6e81, 0x6e82, 0x6e84, 0x6e87, 0x6e88, 0x6e8a, + 0x6e8b, 0x6e8c, 0x6e8d, 0x6e8e, 0x6e91, 0x6e92, 0x6e93, 0x6e94, + 0x6e95, 0x6e96, 0x6e97, 0x6e99, 0x6e9a, 0x6e9b, 0x6e9d, 0x6e9e, + 0x6ea0, 0x6ea1, 0x6ea3, 0x6ea4, 0x6ea6, 0x6ea8, 0x6ea9, 0x6eab, + 0x6eac, 0x6ead, 0x6eae, 0x6eb0, 0x6eb3, 0x6eb5, 0x6eb8, 0x6eb9, + 0x6ebc, 0x6ebe, 0x6ebf, 0x6ec0, 0x6ec3, 0x6ec4, 0x6ec5, 0x6ec6, + 0x6ec8, 0x6ec9, 0x6eca, 0x6ecc, 0x6ecd, 0x6ece, 0x6ed0, 0x6ed2, + 0x6ed6, 0x6ed8, 0x6ed9, 0x6edb, 0x6edc, 0x6edd, 0x6ee3, 0x6ee7, + 0x6eea, 0x6eeb, 0x6eec, 0x6eed, 0x6eee, 0x6eef, + /* 0x9d */ + 0x6ef0, 0x6ef1, 0x6ef2, 0x6ef3, 0x6ef5, 0x6ef6, 0x6ef7, 0x6ef8, + 0x6efa, 0x6efb, 0x6efc, 0x6efd, 0x6efe, 0x6eff, 0x6f00, 0x6f01, + 0x6f03, 0x6f04, 0x6f05, 0x6f07, 0x6f08, 0x6f0a, 0x6f0b, 0x6f0c, + 0x6f0d, 0x6f0e, 0x6f10, 0x6f11, 0x6f12, 0x6f16, 0x6f17, 0x6f18, + 0x6f19, 0x6f1a, 0x6f1b, 0x6f1c, 0x6f1d, 0x6f1e, 0x6f1f, 0x6f21, + 0x6f22, 0x6f23, 0x6f25, 0x6f26, 0x6f27, 0x6f28, 0x6f2c, 0x6f2e, + 0x6f30, 0x6f32, 0x6f34, 0x6f35, 0x6f37, 0x6f38, 0x6f39, 0x6f3a, + 0x6f3b, 0x6f3c, 0x6f3d, 0x6f3f, 0x6f40, 0x6f41, 0x6f42, 0x6f43, + 0x6f44, 0x6f45, 0x6f48, 0x6f49, 0x6f4a, 0x6f4c, 0x6f4e, 0x6f4f, + 0x6f50, 0x6f51, 0x6f52, 0x6f53, 0x6f54, 0x6f55, 0x6f56, 0x6f57, + 0x6f59, 0x6f5a, 0x6f5b, 0x6f5d, 0x6f5f, 0x6f60, 0x6f61, 0x6f63, + 0x6f64, 0x6f65, 0x6f67, 0x6f68, 0x6f69, 0x6f6a, 0x6f6b, 0x6f6c, + 0x6f6f, 0x6f70, 0x6f71, 0x6f73, 0x6f75, 0x6f76, 0x6f77, 0x6f79, + 0x6f7b, 0x6f7d, 0x6f7e, 0x6f7f, 0x6f80, 0x6f81, 0x6f82, 0x6f83, + 0x6f85, 0x6f86, 0x6f87, 0x6f8a, 0x6f8b, 0x6f8f, 0x6f90, 0x6f91, + 0x6f92, 0x6f93, 0x6f94, 0x6f95, 0x6f96, 0x6f97, 0x6f98, 0x6f99, + 0x6f9a, 0x6f9b, 0x6f9d, 0x6f9e, 0x6f9f, 0x6fa0, 0x6fa2, 0x6fa3, + 0x6fa4, 0x6fa5, 0x6fa6, 0x6fa8, 0x6fa9, 0x6faa, 0x6fab, 0x6fac, + 0x6fad, 0x6fae, 0x6faf, 0x6fb0, 0x6fb1, 0x6fb2, 0x6fb4, 0x6fb5, + 0x6fb7, 0x6fb8, 0x6fba, 0x6fbb, 0x6fbc, 0x6fbd, 0x6fbe, 0x6fbf, + 0x6fc1, 0x6fc3, 0x6fc4, 0x6fc5, 0x6fc6, 0x6fc7, 0x6fc8, 0x6fca, + 0x6fcb, 0x6fcc, 0x6fcd, 0x6fce, 0x6fcf, 0x6fd0, 0x6fd3, 0x6fd4, + 0x6fd5, 0x6fd6, 0x6fd7, 0x6fd8, 0x6fd9, 0x6fda, 0x6fdb, 0x6fdc, + 0x6fdd, 0x6fdf, 0x6fe2, 0x6fe3, 0x6fe4, 0x6fe5, + /* 0x9e */ + 0x6fe6, 0x6fe7, 0x6fe8, 0x6fe9, 0x6fea, 0x6feb, 0x6fec, 0x6fed, + 0x6ff0, 0x6ff1, 0x6ff2, 0x6ff3, 0x6ff4, 0x6ff5, 0x6ff6, 0x6ff7, + 0x6ff8, 0x6ff9, 0x6ffa, 0x6ffb, 0x6ffc, 0x6ffd, 0x6ffe, 0x6fff, + 0x7000, 0x7001, 0x7002, 0x7003, 0x7004, 0x7005, 0x7006, 0x7007, + 0x7008, 0x7009, 0x700a, 0x700b, 0x700c, 0x700d, 0x700e, 0x700f, + 0x7010, 0x7012, 0x7013, 0x7014, 0x7015, 0x7016, 0x7017, 0x7018, + 0x7019, 0x701c, 0x701d, 0x701e, 0x701f, 0x7020, 0x7021, 0x7022, + 0x7024, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, 0x702a, 0x702b, + 0x702c, 0x702d, 0x702e, 0x702f, 0x7030, 0x7031, 0x7032, 0x7033, + 0x7034, 0x7036, 0x7037, 0x7038, 0x703a, 0x703b, 0x703c, 0x703d, + 0x703e, 0x703f, 0x7040, 0x7041, 0x7042, 0x7043, 0x7044, 0x7045, + 0x7046, 0x7047, 0x7048, 0x7049, 0x704a, 0x704b, 0x704d, 0x704e, + 0x7050, 0x7051, 0x7052, 0x7053, 0x7054, 0x7055, 0x7056, 0x7057, + 0x7058, 0x7059, 0x705a, 0x705b, 0x705c, 0x705d, 0x705f, 0x7060, + 0x7061, 0x7062, 0x7063, 0x7064, 0x7065, 0x7066, 0x7067, 0x7068, + 0x7069, 0x706a, 0x706e, 0x7071, 0x7072, 0x7073, 0x7074, 0x7077, + 0x7079, 0x707a, 0x707b, 0x707d, 0x7081, 0x7082, 0x7083, 0x7084, + 0x7086, 0x7087, 0x7088, 0x708b, 0x708c, 0x708d, 0x708f, 0x7090, + 0x7091, 0x7093, 0x7097, 0x7098, 0x709a, 0x709b, 0x709e, 0x709f, + 0x70a0, 0x70a1, 0x70a2, 0x70a3, 0x70a4, 0x70a5, 0x70a6, 0x70a7, + 0x70a8, 0x70a9, 0x70aa, 0x70b0, 0x70b2, 0x70b4, 0x70b5, 0x70b6, + 0x70ba, 0x70be, 0x70bf, 0x70c4, 0x70c5, 0x70c6, 0x70c7, 0x70c9, + 0x70cb, 0x70cc, 0x70cd, 0x70ce, 0x70cf, 0x70d0, 0x70d1, 0x70d2, + 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d7, 0x70da, + /* 0x9f */ + 0x70dc, 0x70dd, 0x70de, 0x70e0, 0x70e1, 0x70e2, 0x70e3, 0x70e5, + 0x70ea, 0x70ee, 0x70f0, 0x70f1, 0x70f2, 0x70f3, 0x70f4, 0x70f5, + 0x70f6, 0x70f8, 0x70fa, 0x70fb, 0x70fc, 0x70fe, 0x70ff, 0x7100, + 0x7101, 0x7102, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x7108, + 0x710b, 0x710c, 0x710d, 0x710e, 0x710f, 0x7111, 0x7112, 0x7114, + 0x7117, 0x711b, 0x711c, 0x711d, 0x711e, 0x711f, 0x7120, 0x7121, + 0x7122, 0x7123, 0x7124, 0x7125, 0x7127, 0x7128, 0x7129, 0x712a, + 0x712b, 0x712c, 0x712d, 0x712e, 0x7132, 0x7133, 0x7134, 0x7135, + 0x7137, 0x7138, 0x7139, 0x713a, 0x713b, 0x713c, 0x713d, 0x713e, + 0x713f, 0x7140, 0x7141, 0x7142, 0x7143, 0x7144, 0x7146, 0x7147, + 0x7148, 0x7149, 0x714b, 0x714d, 0x714f, 0x7150, 0x7151, 0x7152, + 0x7153, 0x7154, 0x7155, 0x7156, 0x7157, 0x7158, 0x7159, 0x715a, + 0x715b, 0x715d, 0x715f, 0x7160, 0x7161, 0x7162, 0x7163, 0x7165, + 0x7169, 0x716a, 0x716b, 0x716c, 0x716d, 0x716f, 0x7170, 0x7171, + 0x7174, 0x7175, 0x7176, 0x7177, 0x7179, 0x717b, 0x717c, 0x717e, + 0x717f, 0x7180, 0x7181, 0x7182, 0x7183, 0x7185, 0x7186, 0x7187, + 0x7188, 0x7189, 0x718b, 0x718c, 0x718d, 0x718e, 0x7190, 0x7191, + 0x7192, 0x7193, 0x7195, 0x7196, 0x7197, 0x719a, 0x719b, 0x719c, + 0x719d, 0x719e, 0x71a1, 0x71a2, 0x71a3, 0x71a4, 0x71a5, 0x71a6, + 0x71a7, 0x71a9, 0x71aa, 0x71ab, 0x71ad, 0x71ae, 0x71af, 0x71b0, + 0x71b1, 0x71b2, 0x71b4, 0x71b6, 0x71b7, 0x71b8, 0x71ba, 0x71bb, + 0x71bc, 0x71bd, 0x71be, 0x71bf, 0x71c0, 0x71c1, 0x71c2, 0x71c4, + 0x71c5, 0x71c6, 0x71c7, 0x71c8, 0x71c9, 0x71ca, 0x71cb, 0x71cc, + 0x71cd, 0x71cf, 0x71d0, 0x71d1, 0x71d2, 0x71d3, + /* 0xa0 */ + 0x71d6, 0x71d7, 0x71d8, 0x71d9, 0x71da, 0x71db, 0x71dc, 0x71dd, + 0x71de, 0x71df, 0x71e1, 0x71e2, 0x71e3, 0x71e4, 0x71e6, 0x71e8, + 0x71e9, 0x71ea, 0x71eb, 0x71ec, 0x71ed, 0x71ef, 0x71f0, 0x71f1, + 0x71f2, 0x71f3, 0x71f4, 0x71f5, 0x71f6, 0x71f7, 0x71f8, 0x71fa, + 0x71fb, 0x71fc, 0x71fd, 0x71fe, 0x71ff, 0x7200, 0x7201, 0x7202, + 0x7203, 0x7204, 0x7205, 0x7207, 0x7208, 0x7209, 0x720a, 0x720b, + 0x720c, 0x720d, 0x720e, 0x720f, 0x7210, 0x7211, 0x7212, 0x7213, + 0x7214, 0x7215, 0x7216, 0x7217, 0x7218, 0x7219, 0x721a, 0x721b, + 0x721c, 0x721e, 0x721f, 0x7220, 0x7221, 0x7222, 0x7223, 0x7224, + 0x7225, 0x7226, 0x7227, 0x7229, 0x722b, 0x722d, 0x722e, 0x722f, + 0x7232, 0x7233, 0x7234, 0x723a, 0x723c, 0x723e, 0x7240, 0x7241, + 0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7249, 0x724a, 0x724b, + 0x724e, 0x724f, 0x7250, 0x7251, 0x7253, 0x7254, 0x7255, 0x7257, + 0x7258, 0x725a, 0x725c, 0x725e, 0x7260, 0x7263, 0x7264, 0x7265, + 0x7268, 0x726a, 0x726b, 0x726c, 0x726d, 0x7270, 0x7271, 0x7273, + 0x7274, 0x7276, 0x7277, 0x7278, 0x727b, 0x727c, 0x727d, 0x7282, + 0x7283, 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, 0x728c, 0x728e, + 0x7290, 0x7291, 0x7293, 0x7294, 0x7295, 0x7296, 0x7297, 0x7298, + 0x7299, 0x729a, 0x729b, 0x729c, 0x729d, 0x729e, 0x72a0, 0x72a1, + 0x72a2, 0x72a3, 0x72a4, 0x72a5, 0x72a6, 0x72a7, 0x72a8, 0x72a9, + 0x72aa, 0x72ab, 0x72ae, 0x72b1, 0x72b2, 0x72b3, 0x72b5, 0x72ba, + 0x72bb, 0x72bc, 0x72bd, 0x72be, 0x72bf, 0x72c0, 0x72c5, 0x72c6, + 0x72c7, 0x72c9, 0x72ca, 0x72cb, 0x72cc, 0x72cf, 0x72d1, 0x72d3, + 0x72d4, 0x72d5, 0x72d6, 0x72d8, 0x72da, 0x72db, +}; + +static int +gbkext1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x81 && c1 <= 0xa0)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0x80 && c2 < 0xff)) { + unsigned int i = 190 * (c1 - 0x81) + (c2 - (c2 >= 0x80 ? 0x41 : 0x40)); + unsigned short wc = 0xfffd; + { + if (i < 6080) + wc = gbkext1_2uni_page81[i]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + diff --git a/jni/parted/libiconv/lib/gbkext2.h b/jni/parted/libiconv/lib/gbkext2.h new file mode 100755 index 0000000..af19aa5 --- /dev/null +++ b/jni/parted/libiconv/lib/gbkext2.h @@ -0,0 +1,1173 @@ +/* + * Copyright (C) 1999-2000, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GBK/4 and GBK/5 extensions + */ + +static const unsigned short gbkext2_2uni_pagea8[8272] = { + /* 0xa8 */ + 0x02ca, 0x02cb, 0x02d9, 0x2013, 0x2015, 0x2025, 0x2035, 0x2105, + 0x2109, 0x2196, 0x2197, 0x2198, 0x2199, 0x2215, 0x221f, 0x2223, + 0x2252, 0x2266, 0x2267, 0x22bf, 0x2550, 0x2551, 0x2552, 0x2553, + 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, + 0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, + 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, + 0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572, 0x2573, + 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x2588, + 0x2589, 0x258a, 0x258b, 0x258c, 0x258d, 0x258e, 0x258f, 0x2593, + 0x2594, 0x2595, 0x25bc, 0x25bd, 0x25e2, 0x25e3, 0x25e4, 0x25e5, + 0x2609, 0x2295, 0x3012, 0x301d, 0x301e, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xa9 */ + 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, + 0x3029, 0x32a3, 0x338e, 0x338f, 0x339c, 0x339d, 0x339e, 0x33a1, + 0x33c4, 0x33ce, 0x33d1, 0x33d2, 0x33d5, 0xfe30, 0xffe2, 0xffe4, + 0xfffd, 0x2121, 0x3231, 0xfffd, 0x2010, 0xfffd, 0xfffd, 0xfffd, + 0x30fc, 0x309b, 0x309c, 0x30fd, 0x30fe, 0x3006, 0x309d, 0x309e, + 0xfe49, 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f, 0xfe50, + 0xfe51, 0xfe52, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xfe59, 0xfe5a, + 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0xfe5f, 0xfe60, 0xfe61, 0xfe62, + 0xfe63, 0xfe64, 0xfe65, 0xfe66, 0xfe68, 0xfe69, 0xfe6a, 0xfe6b, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3007, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xaa */ + 0x72dc, 0x72dd, 0x72df, 0x72e2, 0x72e3, 0x72e4, 0x72e5, 0x72e6, + 0x72e7, 0x72ea, 0x72eb, 0x72f5, 0x72f6, 0x72f9, 0x72fd, 0x72fe, + 0x72ff, 0x7300, 0x7302, 0x7304, 0x7305, 0x7306, 0x7307, 0x7308, + 0x7309, 0x730b, 0x730c, 0x730d, 0x730f, 0x7310, 0x7311, 0x7312, + 0x7314, 0x7318, 0x7319, 0x731a, 0x731f, 0x7320, 0x7323, 0x7324, + 0x7326, 0x7327, 0x7328, 0x732d, 0x732f, 0x7330, 0x7332, 0x7333, + 0x7335, 0x7336, 0x733a, 0x733b, 0x733c, 0x733d, 0x7340, 0x7341, + 0x7342, 0x7343, 0x7344, 0x7345, 0x7346, 0x7347, 0x7348, 0x7349, + 0x734a, 0x734b, 0x734c, 0x734e, 0x734f, 0x7351, 0x7353, 0x7354, + 0x7355, 0x7356, 0x7358, 0x7359, 0x735a, 0x735b, 0x735c, 0x735d, + 0x735e, 0x735f, 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, 0x7366, + 0x7367, 0x7368, 0x7369, 0x736a, 0x736b, 0x736e, 0x7370, 0x7371, + /* 0xab */ + 0x7372, 0x7373, 0x7374, 0x7375, 0x7376, 0x7377, 0x7378, 0x7379, + 0x737a, 0x737b, 0x737c, 0x737d, 0x737f, 0x7380, 0x7381, 0x7382, + 0x7383, 0x7385, 0x7386, 0x7388, 0x738a, 0x738c, 0x738d, 0x738f, + 0x7390, 0x7392, 0x7393, 0x7394, 0x7395, 0x7397, 0x7398, 0x7399, + 0x739a, 0x739c, 0x739d, 0x739e, 0x73a0, 0x73a1, 0x73a3, 0x73a4, + 0x73a5, 0x73a6, 0x73a7, 0x73a8, 0x73aa, 0x73ac, 0x73ad, 0x73b1, + 0x73b4, 0x73b5, 0x73b6, 0x73b8, 0x73b9, 0x73bc, 0x73bd, 0x73be, + 0x73bf, 0x73c1, 0x73c3, 0x73c4, 0x73c5, 0x73c6, 0x73c7, 0x73cb, + 0x73cc, 0x73ce, 0x73d2, 0x73d3, 0x73d4, 0x73d5, 0x73d6, 0x73d7, + 0x73d8, 0x73da, 0x73db, 0x73dc, 0x73dd, 0x73df, 0x73e1, 0x73e2, + 0x73e3, 0x73e4, 0x73e6, 0x73e8, 0x73ea, 0x73eb, 0x73ec, 0x73ee, + 0x73ef, 0x73f0, 0x73f1, 0x73f3, 0x73f4, 0x73f5, 0x73f6, 0x73f7, + /* 0xac */ + 0x73f8, 0x73f9, 0x73fa, 0x73fb, 0x73fc, 0x73fd, 0x73fe, 0x73ff, + 0x7400, 0x7401, 0x7402, 0x7404, 0x7407, 0x7408, 0x740b, 0x740c, + 0x740d, 0x740e, 0x7411, 0x7412, 0x7413, 0x7414, 0x7415, 0x7416, + 0x7417, 0x7418, 0x7419, 0x741c, 0x741d, 0x741e, 0x741f, 0x7420, + 0x7421, 0x7423, 0x7424, 0x7427, 0x7429, 0x742b, 0x742d, 0x742f, + 0x7431, 0x7432, 0x7437, 0x7438, 0x7439, 0x743a, 0x743b, 0x743d, + 0x743e, 0x743f, 0x7440, 0x7442, 0x7443, 0x7444, 0x7445, 0x7446, + 0x7447, 0x7448, 0x7449, 0x744a, 0x744b, 0x744c, 0x744d, 0x744e, + 0x744f, 0x7450, 0x7451, 0x7452, 0x7453, 0x7454, 0x7456, 0x7458, + 0x745d, 0x7460, 0x7461, 0x7462, 0x7463, 0x7464, 0x7465, 0x7466, + 0x7467, 0x7468, 0x7469, 0x746a, 0x746b, 0x746c, 0x746e, 0x746f, + 0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7478, 0x7479, 0x747a, + /* 0xad */ + 0x747b, 0x747c, 0x747d, 0x747f, 0x7482, 0x7484, 0x7485, 0x7486, + 0x7488, 0x7489, 0x748a, 0x748c, 0x748d, 0x748f, 0x7491, 0x7492, + 0x7493, 0x7494, 0x7495, 0x7496, 0x7497, 0x7498, 0x7499, 0x749a, + 0x749b, 0x749d, 0x749f, 0x74a0, 0x74a1, 0x74a2, 0x74a3, 0x74a4, + 0x74a5, 0x74a6, 0x74aa, 0x74ab, 0x74ac, 0x74ad, 0x74ae, 0x74af, + 0x74b0, 0x74b1, 0x74b2, 0x74b3, 0x74b4, 0x74b5, 0x74b6, 0x74b7, + 0x74b8, 0x74b9, 0x74bb, 0x74bc, 0x74bd, 0x74be, 0x74bf, 0x74c0, + 0x74c1, 0x74c2, 0x74c3, 0x74c4, 0x74c5, 0x74c6, 0x74c7, 0x74c8, + 0x74c9, 0x74ca, 0x74cb, 0x74cc, 0x74cd, 0x74ce, 0x74cf, 0x74d0, + 0x74d1, 0x74d3, 0x74d4, 0x74d5, 0x74d6, 0x74d7, 0x74d8, 0x74d9, + 0x74da, 0x74db, 0x74dd, 0x74df, 0x74e1, 0x74e5, 0x74e7, 0x74e8, + 0x74e9, 0x74ea, 0x74eb, 0x74ec, 0x74ed, 0x74f0, 0x74f1, 0x74f2, + /* 0xae */ + 0x74f3, 0x74f5, 0x74f8, 0x74f9, 0x74fa, 0x74fb, 0x74fc, 0x74fd, + 0x74fe, 0x7500, 0x7501, 0x7502, 0x7503, 0x7505, 0x7506, 0x7507, + 0x7508, 0x7509, 0x750a, 0x750b, 0x750c, 0x750e, 0x7510, 0x7512, + 0x7514, 0x7515, 0x7516, 0x7517, 0x751b, 0x751d, 0x751e, 0x7520, + 0x7521, 0x7522, 0x7523, 0x7524, 0x7526, 0x7527, 0x752a, 0x752e, + 0x7534, 0x7536, 0x7539, 0x753c, 0x753d, 0x753f, 0x7541, 0x7542, + 0x7543, 0x7544, 0x7546, 0x7547, 0x7549, 0x754a, 0x754d, 0x7550, + 0x7551, 0x7552, 0x7553, 0x7555, 0x7556, 0x7557, 0x7558, 0x755d, + 0x755e, 0x755f, 0x7560, 0x7561, 0x7562, 0x7563, 0x7564, 0x7567, + 0x7568, 0x7569, 0x756b, 0x756c, 0x756d, 0x756e, 0x756f, 0x7570, + 0x7571, 0x7573, 0x7575, 0x7576, 0x7577, 0x757a, 0x757b, 0x757c, + 0x757d, 0x757e, 0x7580, 0x7581, 0x7582, 0x7584, 0x7585, 0x7587, + /* 0xaf */ + 0x7588, 0x7589, 0x758a, 0x758c, 0x758d, 0x758e, 0x7590, 0x7593, + 0x7595, 0x7598, 0x759b, 0x759c, 0x759e, 0x75a2, 0x75a6, 0x75a7, + 0x75a8, 0x75a9, 0x75aa, 0x75ad, 0x75b6, 0x75b7, 0x75ba, 0x75bb, + 0x75bf, 0x75c0, 0x75c1, 0x75c6, 0x75cb, 0x75cc, 0x75ce, 0x75cf, + 0x75d0, 0x75d1, 0x75d3, 0x75d7, 0x75d9, 0x75da, 0x75dc, 0x75dd, + 0x75df, 0x75e0, 0x75e1, 0x75e5, 0x75e9, 0x75ec, 0x75ed, 0x75ee, + 0x75ef, 0x75f2, 0x75f3, 0x75f5, 0x75f6, 0x75f7, 0x75f8, 0x75fa, + 0x75fb, 0x75fd, 0x75fe, 0x7602, 0x7604, 0x7606, 0x7607, 0x7608, + 0x7609, 0x760b, 0x760d, 0x760e, 0x760f, 0x7611, 0x7612, 0x7613, + 0x7614, 0x7616, 0x761a, 0x761c, 0x761d, 0x761e, 0x7621, 0x7623, + 0x7627, 0x7628, 0x762c, 0x762e, 0x762f, 0x7631, 0x7632, 0x7636, + 0x7637, 0x7639, 0x763a, 0x763b, 0x763d, 0x7641, 0x7642, 0x7644, + /* 0xb0 */ + 0x7645, 0x7646, 0x7647, 0x7648, 0x7649, 0x764a, 0x764b, 0x764e, + 0x764f, 0x7650, 0x7651, 0x7652, 0x7653, 0x7655, 0x7657, 0x7658, + 0x7659, 0x765a, 0x765b, 0x765d, 0x765f, 0x7660, 0x7661, 0x7662, + 0x7664, 0x7665, 0x7666, 0x7667, 0x7668, 0x7669, 0x766a, 0x766c, + 0x766d, 0x766e, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x7675, + 0x7676, 0x7677, 0x7679, 0x767a, 0x767c, 0x767f, 0x7680, 0x7681, + 0x7683, 0x7685, 0x7689, 0x768a, 0x768c, 0x768d, 0x768f, 0x7690, + 0x7692, 0x7694, 0x7695, 0x7697, 0x7698, 0x769a, 0x769b, 0x769c, + 0x769d, 0x769e, 0x769f, 0x76a0, 0x76a1, 0x76a2, 0x76a3, 0x76a5, + 0x76a6, 0x76a7, 0x76a8, 0x76a9, 0x76aa, 0x76ab, 0x76ac, 0x76ad, + 0x76af, 0x76b0, 0x76b3, 0x76b5, 0x76b6, 0x76b7, 0x76b8, 0x76b9, + 0x76ba, 0x76bb, 0x76bc, 0x76bd, 0x76be, 0x76c0, 0x76c1, 0x76c3, + /* 0xb1 */ + 0x76c4, 0x76c7, 0x76c9, 0x76cb, 0x76cc, 0x76d3, 0x76d5, 0x76d9, + 0x76da, 0x76dc, 0x76dd, 0x76de, 0x76e0, 0x76e1, 0x76e2, 0x76e3, + 0x76e4, 0x76e6, 0x76e7, 0x76e8, 0x76e9, 0x76ea, 0x76eb, 0x76ec, + 0x76ed, 0x76f0, 0x76f3, 0x76f5, 0x76f6, 0x76f7, 0x76fa, 0x76fb, + 0x76fd, 0x76ff, 0x7700, 0x7702, 0x7703, 0x7705, 0x7706, 0x770a, + 0x770c, 0x770e, 0x770f, 0x7710, 0x7711, 0x7712, 0x7713, 0x7714, + 0x7715, 0x7716, 0x7717, 0x7718, 0x771b, 0x771c, 0x771d, 0x771e, + 0x7721, 0x7723, 0x7724, 0x7725, 0x7727, 0x772a, 0x772b, 0x772c, + 0x772e, 0x7730, 0x7731, 0x7732, 0x7733, 0x7734, 0x7739, 0x773b, + 0x773d, 0x773e, 0x773f, 0x7742, 0x7744, 0x7745, 0x7746, 0x7748, + 0x7749, 0x774a, 0x774b, 0x774c, 0x774d, 0x774e, 0x774f, 0x7752, + 0x7753, 0x7754, 0x7755, 0x7756, 0x7757, 0x7758, 0x7759, 0x775c, + /* 0xb2 */ + 0x775d, 0x775e, 0x775f, 0x7760, 0x7764, 0x7767, 0x7769, 0x776a, + 0x776d, 0x776e, 0x776f, 0x7770, 0x7771, 0x7772, 0x7773, 0x7774, + 0x7775, 0x7776, 0x7777, 0x7778, 0x777a, 0x777b, 0x777c, 0x7781, + 0x7782, 0x7783, 0x7786, 0x7787, 0x7788, 0x7789, 0x778a, 0x778b, + 0x778f, 0x7790, 0x7793, 0x7794, 0x7795, 0x7796, 0x7797, 0x7798, + 0x7799, 0x779a, 0x779b, 0x779c, 0x779d, 0x779e, 0x77a1, 0x77a3, + 0x77a4, 0x77a6, 0x77a8, 0x77ab, 0x77ad, 0x77ae, 0x77af, 0x77b1, + 0x77b2, 0x77b4, 0x77b6, 0x77b7, 0x77b8, 0x77b9, 0x77ba, 0x77bc, + 0x77be, 0x77c0, 0x77c1, 0x77c2, 0x77c3, 0x77c4, 0x77c5, 0x77c6, + 0x77c7, 0x77c8, 0x77c9, 0x77ca, 0x77cb, 0x77cc, 0x77ce, 0x77cf, + 0x77d0, 0x77d1, 0x77d2, 0x77d3, 0x77d4, 0x77d5, 0x77d6, 0x77d8, + 0x77d9, 0x77da, 0x77dd, 0x77de, 0x77df, 0x77e0, 0x77e1, 0x77e4, + /* 0xb3 */ + 0x77e6, 0x77e8, 0x77ea, 0x77ef, 0x77f0, 0x77f1, 0x77f2, 0x77f4, + 0x77f5, 0x77f7, 0x77f9, 0x77fa, 0x77fb, 0x77fc, 0x7803, 0x7804, + 0x7805, 0x7806, 0x7807, 0x7808, 0x780a, 0x780b, 0x780e, 0x780f, + 0x7810, 0x7813, 0x7815, 0x7819, 0x781b, 0x781e, 0x7820, 0x7821, + 0x7822, 0x7824, 0x7828, 0x782a, 0x782b, 0x782e, 0x782f, 0x7831, + 0x7832, 0x7833, 0x7835, 0x7836, 0x783d, 0x783f, 0x7841, 0x7842, + 0x7843, 0x7844, 0x7846, 0x7848, 0x7849, 0x784a, 0x784b, 0x784d, + 0x784f, 0x7851, 0x7853, 0x7854, 0x7858, 0x7859, 0x785a, 0x785b, + 0x785c, 0x785e, 0x785f, 0x7860, 0x7861, 0x7862, 0x7863, 0x7864, + 0x7865, 0x7866, 0x7867, 0x7868, 0x7869, 0x786f, 0x7870, 0x7871, + 0x7872, 0x7873, 0x7874, 0x7875, 0x7876, 0x7878, 0x7879, 0x787a, + 0x787b, 0x787d, 0x787e, 0x787f, 0x7880, 0x7881, 0x7882, 0x7883, + /* 0xb4 */ + 0x7884, 0x7885, 0x7886, 0x7888, 0x788a, 0x788b, 0x788f, 0x7890, + 0x7892, 0x7894, 0x7895, 0x7896, 0x7899, 0x789d, 0x789e, 0x78a0, + 0x78a2, 0x78a4, 0x78a6, 0x78a8, 0x78a9, 0x78aa, 0x78ab, 0x78ac, + 0x78ad, 0x78ae, 0x78af, 0x78b5, 0x78b6, 0x78b7, 0x78b8, 0x78ba, + 0x78bb, 0x78bc, 0x78bd, 0x78bf, 0x78c0, 0x78c2, 0x78c3, 0x78c4, + 0x78c6, 0x78c7, 0x78c8, 0x78cc, 0x78cd, 0x78ce, 0x78cf, 0x78d1, + 0x78d2, 0x78d3, 0x78d6, 0x78d7, 0x78d8, 0x78da, 0x78db, 0x78dc, + 0x78dd, 0x78de, 0x78df, 0x78e0, 0x78e1, 0x78e2, 0x78e3, 0x78e4, + 0x78e5, 0x78e6, 0x78e7, 0x78e9, 0x78ea, 0x78eb, 0x78ed, 0x78ee, + 0x78ef, 0x78f0, 0x78f1, 0x78f3, 0x78f5, 0x78f6, 0x78f8, 0x78f9, + 0x78fb, 0x78fc, 0x78fd, 0x78fe, 0x78ff, 0x7900, 0x7902, 0x7903, + 0x7904, 0x7906, 0x7907, 0x7908, 0x7909, 0x790a, 0x790b, 0x790c, + /* 0xb5 */ + 0x790d, 0x790e, 0x790f, 0x7910, 0x7911, 0x7912, 0x7914, 0x7915, + 0x7916, 0x7917, 0x7918, 0x7919, 0x791a, 0x791b, 0x791c, 0x791d, + 0x791f, 0x7920, 0x7921, 0x7922, 0x7923, 0x7925, 0x7926, 0x7927, + 0x7928, 0x7929, 0x792a, 0x792b, 0x792c, 0x792d, 0x792e, 0x792f, + 0x7930, 0x7931, 0x7932, 0x7933, 0x7935, 0x7936, 0x7937, 0x7938, + 0x7939, 0x793d, 0x793f, 0x7942, 0x7943, 0x7944, 0x7945, 0x7947, + 0x794a, 0x794b, 0x794c, 0x794d, 0x794e, 0x794f, 0x7950, 0x7951, + 0x7952, 0x7954, 0x7955, 0x7958, 0x7959, 0x7961, 0x7963, 0x7964, + 0x7966, 0x7969, 0x796a, 0x796b, 0x796c, 0x796e, 0x7970, 0x7971, + 0x7972, 0x7973, 0x7974, 0x7975, 0x7976, 0x7979, 0x797b, 0x797c, + 0x797d, 0x797e, 0x797f, 0x7982, 0x7983, 0x7986, 0x7987, 0x7988, + 0x7989, 0x798b, 0x798c, 0x798d, 0x798e, 0x7990, 0x7991, 0x7992, + /* 0xb6 */ + 0x7993, 0x7994, 0x7995, 0x7996, 0x7997, 0x7998, 0x7999, 0x799b, + 0x799c, 0x799d, 0x799e, 0x799f, 0x79a0, 0x79a1, 0x79a2, 0x79a3, + 0x79a4, 0x79a5, 0x79a6, 0x79a8, 0x79a9, 0x79aa, 0x79ab, 0x79ac, + 0x79ad, 0x79ae, 0x79af, 0x79b0, 0x79b1, 0x79b2, 0x79b4, 0x79b5, + 0x79b6, 0x79b7, 0x79b8, 0x79bc, 0x79bf, 0x79c2, 0x79c4, 0x79c5, + 0x79c7, 0x79c8, 0x79ca, 0x79cc, 0x79ce, 0x79cf, 0x79d0, 0x79d3, + 0x79d4, 0x79d6, 0x79d7, 0x79d9, 0x79da, 0x79db, 0x79dc, 0x79dd, + 0x79de, 0x79e0, 0x79e1, 0x79e2, 0x79e5, 0x79e8, 0x79ea, 0x79ec, + 0x79ee, 0x79f1, 0x79f2, 0x79f3, 0x79f4, 0x79f5, 0x79f6, 0x79f7, + 0x79f9, 0x79fa, 0x79fc, 0x79fe, 0x79ff, 0x7a01, 0x7a04, 0x7a05, + 0x7a07, 0x7a08, 0x7a09, 0x7a0a, 0x7a0c, 0x7a0f, 0x7a10, 0x7a11, + 0x7a12, 0x7a13, 0x7a15, 0x7a16, 0x7a18, 0x7a19, 0x7a1b, 0x7a1c, + /* 0xb7 */ + 0x7a1d, 0x7a1f, 0x7a21, 0x7a22, 0x7a24, 0x7a25, 0x7a26, 0x7a27, + 0x7a28, 0x7a29, 0x7a2a, 0x7a2b, 0x7a2c, 0x7a2d, 0x7a2e, 0x7a2f, + 0x7a30, 0x7a31, 0x7a32, 0x7a34, 0x7a35, 0x7a36, 0x7a38, 0x7a3a, + 0x7a3e, 0x7a40, 0x7a41, 0x7a42, 0x7a43, 0x7a44, 0x7a45, 0x7a47, + 0x7a48, 0x7a49, 0x7a4a, 0x7a4b, 0x7a4c, 0x7a4d, 0x7a4e, 0x7a4f, + 0x7a50, 0x7a52, 0x7a53, 0x7a54, 0x7a55, 0x7a56, 0x7a58, 0x7a59, + 0x7a5a, 0x7a5b, 0x7a5c, 0x7a5d, 0x7a5e, 0x7a5f, 0x7a60, 0x7a61, + 0x7a62, 0x7a63, 0x7a64, 0x7a65, 0x7a66, 0x7a67, 0x7a68, 0x7a69, + 0x7a6a, 0x7a6b, 0x7a6c, 0x7a6d, 0x7a6e, 0x7a6f, 0x7a71, 0x7a72, + 0x7a73, 0x7a75, 0x7a7b, 0x7a7c, 0x7a7d, 0x7a7e, 0x7a82, 0x7a85, + 0x7a87, 0x7a89, 0x7a8a, 0x7a8b, 0x7a8c, 0x7a8e, 0x7a8f, 0x7a90, + 0x7a93, 0x7a94, 0x7a99, 0x7a9a, 0x7a9b, 0x7a9e, 0x7aa1, 0x7aa2, + /* 0xb8 */ + 0x7aa3, 0x7aa4, 0x7aa7, 0x7aa9, 0x7aaa, 0x7aab, 0x7aae, 0x7aaf, + 0x7ab0, 0x7ab1, 0x7ab2, 0x7ab4, 0x7ab5, 0x7ab6, 0x7ab7, 0x7ab8, + 0x7ab9, 0x7aba, 0x7abb, 0x7abc, 0x7abd, 0x7abe, 0x7ac0, 0x7ac1, + 0x7ac2, 0x7ac3, 0x7ac4, 0x7ac5, 0x7ac6, 0x7ac7, 0x7ac8, 0x7ac9, + 0x7aca, 0x7acc, 0x7acd, 0x7ace, 0x7acf, 0x7ad0, 0x7ad1, 0x7ad2, + 0x7ad3, 0x7ad4, 0x7ad5, 0x7ad7, 0x7ad8, 0x7ada, 0x7adb, 0x7adc, + 0x7add, 0x7ae1, 0x7ae2, 0x7ae4, 0x7ae7, 0x7ae8, 0x7ae9, 0x7aea, + 0x7aeb, 0x7aec, 0x7aee, 0x7af0, 0x7af1, 0x7af2, 0x7af3, 0x7af4, + 0x7af5, 0x7af6, 0x7af7, 0x7af8, 0x7afb, 0x7afc, 0x7afe, 0x7b00, + 0x7b01, 0x7b02, 0x7b05, 0x7b07, 0x7b09, 0x7b0c, 0x7b0d, 0x7b0e, + 0x7b10, 0x7b12, 0x7b13, 0x7b16, 0x7b17, 0x7b18, 0x7b1a, 0x7b1c, + 0x7b1d, 0x7b1f, 0x7b21, 0x7b22, 0x7b23, 0x7b27, 0x7b29, 0x7b2d, + /* 0xb9 */ + 0x7b2f, 0x7b30, 0x7b32, 0x7b34, 0x7b35, 0x7b36, 0x7b37, 0x7b39, + 0x7b3b, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b42, 0x7b43, 0x7b44, + 0x7b46, 0x7b48, 0x7b4a, 0x7b4d, 0x7b4e, 0x7b53, 0x7b55, 0x7b57, + 0x7b59, 0x7b5c, 0x7b5e, 0x7b5f, 0x7b61, 0x7b63, 0x7b64, 0x7b65, + 0x7b66, 0x7b67, 0x7b68, 0x7b69, 0x7b6a, 0x7b6b, 0x7b6c, 0x7b6d, + 0x7b6f, 0x7b70, 0x7b73, 0x7b74, 0x7b76, 0x7b78, 0x7b7a, 0x7b7c, + 0x7b7d, 0x7b7f, 0x7b81, 0x7b82, 0x7b83, 0x7b84, 0x7b86, 0x7b87, + 0x7b88, 0x7b89, 0x7b8a, 0x7b8b, 0x7b8c, 0x7b8e, 0x7b8f, 0x7b91, + 0x7b92, 0x7b93, 0x7b96, 0x7b98, 0x7b99, 0x7b9a, 0x7b9b, 0x7b9e, + 0x7b9f, 0x7ba0, 0x7ba3, 0x7ba4, 0x7ba5, 0x7bae, 0x7baf, 0x7bb0, + 0x7bb2, 0x7bb3, 0x7bb5, 0x7bb6, 0x7bb7, 0x7bb9, 0x7bba, 0x7bbb, + 0x7bbc, 0x7bbd, 0x7bbe, 0x7bbf, 0x7bc0, 0x7bc2, 0x7bc3, 0x7bc4, + /* 0xba */ + 0x7bc5, 0x7bc8, 0x7bc9, 0x7bca, 0x7bcb, 0x7bcd, 0x7bce, 0x7bcf, + 0x7bd0, 0x7bd2, 0x7bd4, 0x7bd5, 0x7bd6, 0x7bd7, 0x7bd8, 0x7bdb, + 0x7bdc, 0x7bde, 0x7bdf, 0x7be0, 0x7be2, 0x7be3, 0x7be4, 0x7be7, + 0x7be8, 0x7be9, 0x7beb, 0x7bec, 0x7bed, 0x7bef, 0x7bf0, 0x7bf2, + 0x7bf3, 0x7bf4, 0x7bf5, 0x7bf6, 0x7bf8, 0x7bf9, 0x7bfa, 0x7bfb, + 0x7bfd, 0x7bff, 0x7c00, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c05, + 0x7c06, 0x7c08, 0x7c09, 0x7c0a, 0x7c0d, 0x7c0e, 0x7c10, 0x7c11, + 0x7c12, 0x7c13, 0x7c14, 0x7c15, 0x7c17, 0x7c18, 0x7c19, 0x7c1a, + 0x7c1b, 0x7c1c, 0x7c1d, 0x7c1e, 0x7c20, 0x7c21, 0x7c22, 0x7c23, + 0x7c24, 0x7c25, 0x7c28, 0x7c29, 0x7c2b, 0x7c2c, 0x7c2d, 0x7c2e, + 0x7c2f, 0x7c30, 0x7c31, 0x7c32, 0x7c33, 0x7c34, 0x7c35, 0x7c36, + 0x7c37, 0x7c39, 0x7c3a, 0x7c3b, 0x7c3c, 0x7c3d, 0x7c3e, 0x7c42, + /* 0xbb */ + 0x7c43, 0x7c44, 0x7c45, 0x7c46, 0x7c47, 0x7c48, 0x7c49, 0x7c4a, + 0x7c4b, 0x7c4c, 0x7c4e, 0x7c4f, 0x7c50, 0x7c51, 0x7c52, 0x7c53, + 0x7c54, 0x7c55, 0x7c56, 0x7c57, 0x7c58, 0x7c59, 0x7c5a, 0x7c5b, + 0x7c5c, 0x7c5d, 0x7c5e, 0x7c5f, 0x7c60, 0x7c61, 0x7c62, 0x7c63, + 0x7c64, 0x7c65, 0x7c66, 0x7c67, 0x7c68, 0x7c69, 0x7c6a, 0x7c6b, + 0x7c6c, 0x7c6d, 0x7c6e, 0x7c6f, 0x7c70, 0x7c71, 0x7c72, 0x7c75, + 0x7c76, 0x7c77, 0x7c78, 0x7c79, 0x7c7a, 0x7c7e, 0x7c7f, 0x7c80, + 0x7c81, 0x7c82, 0x7c83, 0x7c84, 0x7c85, 0x7c86, 0x7c87, 0x7c88, + 0x7c8a, 0x7c8b, 0x7c8c, 0x7c8d, 0x7c8e, 0x7c8f, 0x7c90, 0x7c93, + 0x7c94, 0x7c96, 0x7c99, 0x7c9a, 0x7c9b, 0x7ca0, 0x7ca1, 0x7ca3, + 0x7ca6, 0x7ca7, 0x7ca8, 0x7ca9, 0x7cab, 0x7cac, 0x7cad, 0x7caf, + 0x7cb0, 0x7cb4, 0x7cb5, 0x7cb6, 0x7cb7, 0x7cb8, 0x7cba, 0x7cbb, + /* 0xbc */ + 0x7cbf, 0x7cc0, 0x7cc2, 0x7cc3, 0x7cc4, 0x7cc6, 0x7cc9, 0x7ccb, + 0x7cce, 0x7ccf, 0x7cd0, 0x7cd1, 0x7cd2, 0x7cd3, 0x7cd4, 0x7cd8, + 0x7cda, 0x7cdb, 0x7cdd, 0x7cde, 0x7ce1, 0x7ce2, 0x7ce3, 0x7ce4, + 0x7ce5, 0x7ce6, 0x7ce7, 0x7ce9, 0x7cea, 0x7ceb, 0x7cec, 0x7ced, + 0x7cee, 0x7cf0, 0x7cf1, 0x7cf2, 0x7cf3, 0x7cf4, 0x7cf5, 0x7cf6, + 0x7cf7, 0x7cf9, 0x7cfa, 0x7cfc, 0x7cfd, 0x7cfe, 0x7cff, 0x7d00, + 0x7d01, 0x7d02, 0x7d03, 0x7d04, 0x7d05, 0x7d06, 0x7d07, 0x7d08, + 0x7d09, 0x7d0b, 0x7d0c, 0x7d0d, 0x7d0e, 0x7d0f, 0x7d10, 0x7d11, + 0x7d12, 0x7d13, 0x7d14, 0x7d15, 0x7d16, 0x7d17, 0x7d18, 0x7d19, + 0x7d1a, 0x7d1b, 0x7d1c, 0x7d1d, 0x7d1e, 0x7d1f, 0x7d21, 0x7d23, + 0x7d24, 0x7d25, 0x7d26, 0x7d28, 0x7d29, 0x7d2a, 0x7d2c, 0x7d2d, + 0x7d2e, 0x7d30, 0x7d31, 0x7d32, 0x7d33, 0x7d34, 0x7d35, 0x7d36, + /* 0xbd */ + 0x7d37, 0x7d38, 0x7d39, 0x7d3a, 0x7d3b, 0x7d3c, 0x7d3d, 0x7d3e, + 0x7d3f, 0x7d40, 0x7d41, 0x7d42, 0x7d43, 0x7d44, 0x7d45, 0x7d46, + 0x7d47, 0x7d48, 0x7d49, 0x7d4a, 0x7d4b, 0x7d4c, 0x7d4d, 0x7d4e, + 0x7d4f, 0x7d50, 0x7d51, 0x7d52, 0x7d53, 0x7d54, 0x7d55, 0x7d56, + 0x7d57, 0x7d58, 0x7d59, 0x7d5a, 0x7d5b, 0x7d5c, 0x7d5d, 0x7d5e, + 0x7d5f, 0x7d60, 0x7d61, 0x7d62, 0x7d63, 0x7d64, 0x7d65, 0x7d66, + 0x7d67, 0x7d68, 0x7d69, 0x7d6a, 0x7d6b, 0x7d6c, 0x7d6d, 0x7d6f, + 0x7d70, 0x7d71, 0x7d72, 0x7d73, 0x7d74, 0x7d75, 0x7d76, 0x7d78, + 0x7d79, 0x7d7a, 0x7d7b, 0x7d7c, 0x7d7d, 0x7d7e, 0x7d7f, 0x7d80, + 0x7d81, 0x7d82, 0x7d83, 0x7d84, 0x7d85, 0x7d86, 0x7d87, 0x7d88, + 0x7d89, 0x7d8a, 0x7d8b, 0x7d8c, 0x7d8d, 0x7d8e, 0x7d8f, 0x7d90, + 0x7d91, 0x7d92, 0x7d93, 0x7d94, 0x7d95, 0x7d96, 0x7d97, 0x7d98, + /* 0xbe */ + 0x7d99, 0x7d9a, 0x7d9b, 0x7d9c, 0x7d9d, 0x7d9e, 0x7d9f, 0x7da0, + 0x7da1, 0x7da2, 0x7da3, 0x7da4, 0x7da5, 0x7da7, 0x7da8, 0x7da9, + 0x7daa, 0x7dab, 0x7dac, 0x7dad, 0x7daf, 0x7db0, 0x7db1, 0x7db2, + 0x7db3, 0x7db4, 0x7db5, 0x7db6, 0x7db7, 0x7db8, 0x7db9, 0x7dba, + 0x7dbb, 0x7dbc, 0x7dbd, 0x7dbe, 0x7dbf, 0x7dc0, 0x7dc1, 0x7dc2, + 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dc7, 0x7dc8, 0x7dc9, 0x7dca, + 0x7dcb, 0x7dcc, 0x7dcd, 0x7dce, 0x7dcf, 0x7dd0, 0x7dd1, 0x7dd2, + 0x7dd3, 0x7dd4, 0x7dd5, 0x7dd6, 0x7dd7, 0x7dd8, 0x7dd9, 0x7dda, + 0x7ddb, 0x7ddc, 0x7ddd, 0x7dde, 0x7ddf, 0x7de0, 0x7de1, 0x7de2, + 0x7de3, 0x7de4, 0x7de5, 0x7de6, 0x7de7, 0x7de8, 0x7de9, 0x7dea, + 0x7deb, 0x7dec, 0x7ded, 0x7dee, 0x7def, 0x7df0, 0x7df1, 0x7df2, + 0x7df3, 0x7df4, 0x7df5, 0x7df6, 0x7df7, 0x7df8, 0x7df9, 0x7dfa, + /* 0xbf */ + 0x7dfb, 0x7dfc, 0x7dfd, 0x7dfe, 0x7dff, 0x7e00, 0x7e01, 0x7e02, + 0x7e03, 0x7e04, 0x7e05, 0x7e06, 0x7e07, 0x7e08, 0x7e09, 0x7e0a, + 0x7e0b, 0x7e0c, 0x7e0d, 0x7e0e, 0x7e0f, 0x7e10, 0x7e11, 0x7e12, + 0x7e13, 0x7e14, 0x7e15, 0x7e16, 0x7e17, 0x7e18, 0x7e19, 0x7e1a, + 0x7e1b, 0x7e1c, 0x7e1d, 0x7e1e, 0x7e1f, 0x7e20, 0x7e21, 0x7e22, + 0x7e23, 0x7e24, 0x7e25, 0x7e26, 0x7e27, 0x7e28, 0x7e29, 0x7e2a, + 0x7e2b, 0x7e2c, 0x7e2d, 0x7e2e, 0x7e2f, 0x7e30, 0x7e31, 0x7e32, + 0x7e33, 0x7e34, 0x7e35, 0x7e36, 0x7e37, 0x7e38, 0x7e39, 0x7e3a, + 0x7e3c, 0x7e3d, 0x7e3e, 0x7e3f, 0x7e40, 0x7e42, 0x7e43, 0x7e44, + 0x7e45, 0x7e46, 0x7e48, 0x7e49, 0x7e4a, 0x7e4b, 0x7e4c, 0x7e4d, + 0x7e4e, 0x7e4f, 0x7e50, 0x7e51, 0x7e52, 0x7e53, 0x7e54, 0x7e55, + 0x7e56, 0x7e57, 0x7e58, 0x7e59, 0x7e5a, 0x7e5b, 0x7e5c, 0x7e5d, + /* 0xc0 */ + 0x7e5e, 0x7e5f, 0x7e60, 0x7e61, 0x7e62, 0x7e63, 0x7e64, 0x7e65, + 0x7e66, 0x7e67, 0x7e68, 0x7e69, 0x7e6a, 0x7e6b, 0x7e6c, 0x7e6d, + 0x7e6e, 0x7e6f, 0x7e70, 0x7e71, 0x7e72, 0x7e73, 0x7e74, 0x7e75, + 0x7e76, 0x7e77, 0x7e78, 0x7e79, 0x7e7a, 0x7e7b, 0x7e7c, 0x7e7d, + 0x7e7e, 0x7e7f, 0x7e80, 0x7e81, 0x7e83, 0x7e84, 0x7e85, 0x7e86, + 0x7e87, 0x7e88, 0x7e89, 0x7e8a, 0x7e8b, 0x7e8c, 0x7e8d, 0x7e8e, + 0x7e8f, 0x7e90, 0x7e91, 0x7e92, 0x7e93, 0x7e94, 0x7e95, 0x7e96, + 0x7e97, 0x7e98, 0x7e99, 0x7e9a, 0x7e9c, 0x7e9d, 0x7e9e, 0x7eae, + 0x7eb4, 0x7ebb, 0x7ebc, 0x7ed6, 0x7ee4, 0x7eec, 0x7ef9, 0x7f0a, + 0x7f10, 0x7f1e, 0x7f37, 0x7f39, 0x7f3b, 0x7f3c, 0x7f3d, 0x7f3e, + 0x7f3f, 0x7f40, 0x7f41, 0x7f43, 0x7f46, 0x7f47, 0x7f48, 0x7f49, + 0x7f4a, 0x7f4b, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f4f, 0x7f52, 0x7f53, + /* 0xc1 */ + 0x7f56, 0x7f59, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f5e, 0x7f60, 0x7f63, + 0x7f64, 0x7f65, 0x7f66, 0x7f67, 0x7f6b, 0x7f6c, 0x7f6d, 0x7f6f, + 0x7f70, 0x7f73, 0x7f75, 0x7f76, 0x7f77, 0x7f78, 0x7f7a, 0x7f7b, + 0x7f7c, 0x7f7d, 0x7f7f, 0x7f80, 0x7f82, 0x7f83, 0x7f84, 0x7f85, + 0x7f86, 0x7f87, 0x7f88, 0x7f89, 0x7f8b, 0x7f8d, 0x7f8f, 0x7f90, + 0x7f91, 0x7f92, 0x7f93, 0x7f95, 0x7f96, 0x7f97, 0x7f98, 0x7f99, + 0x7f9b, 0x7f9c, 0x7fa0, 0x7fa2, 0x7fa3, 0x7fa5, 0x7fa6, 0x7fa8, + 0x7fa9, 0x7faa, 0x7fab, 0x7fac, 0x7fad, 0x7fae, 0x7fb1, 0x7fb3, + 0x7fb4, 0x7fb5, 0x7fb6, 0x7fb7, 0x7fba, 0x7fbb, 0x7fbe, 0x7fc0, + 0x7fc2, 0x7fc3, 0x7fc4, 0x7fc6, 0x7fc7, 0x7fc8, 0x7fc9, 0x7fcb, + 0x7fcd, 0x7fcf, 0x7fd0, 0x7fd1, 0x7fd2, 0x7fd3, 0x7fd6, 0x7fd7, + 0x7fd9, 0x7fda, 0x7fdb, 0x7fdc, 0x7fdd, 0x7fde, 0x7fe2, 0x7fe3, + /* 0xc2 */ + 0x7fe4, 0x7fe7, 0x7fe8, 0x7fea, 0x7feb, 0x7fec, 0x7fed, 0x7fef, + 0x7ff2, 0x7ff4, 0x7ff5, 0x7ff6, 0x7ff7, 0x7ff8, 0x7ff9, 0x7ffa, + 0x7ffd, 0x7ffe, 0x7fff, 0x8002, 0x8007, 0x8008, 0x8009, 0x800a, + 0x800e, 0x800f, 0x8011, 0x8013, 0x801a, 0x801b, 0x801d, 0x801e, + 0x801f, 0x8021, 0x8023, 0x8024, 0x802b, 0x802c, 0x802d, 0x802e, + 0x802f, 0x8030, 0x8032, 0x8034, 0x8039, 0x803a, 0x803c, 0x803e, + 0x8040, 0x8041, 0x8044, 0x8045, 0x8047, 0x8048, 0x8049, 0x804e, + 0x804f, 0x8050, 0x8051, 0x8053, 0x8055, 0x8056, 0x8057, 0x8059, + 0x805b, 0x805c, 0x805d, 0x805e, 0x805f, 0x8060, 0x8061, 0x8062, + 0x8063, 0x8064, 0x8065, 0x8066, 0x8067, 0x8068, 0x806b, 0x806c, + 0x806d, 0x806e, 0x806f, 0x8070, 0x8072, 0x8073, 0x8074, 0x8075, + 0x8076, 0x8077, 0x8078, 0x8079, 0x807a, 0x807b, 0x807c, 0x807d, + /* 0xc3 */ + 0x807e, 0x8081, 0x8082, 0x8085, 0x8088, 0x808a, 0x808d, 0x808e, + 0x808f, 0x8090, 0x8091, 0x8092, 0x8094, 0x8095, 0x8097, 0x8099, + 0x809e, 0x80a3, 0x80a6, 0x80a7, 0x80a8, 0x80ac, 0x80b0, 0x80b3, + 0x80b5, 0x80b6, 0x80b8, 0x80b9, 0x80bb, 0x80c5, 0x80c7, 0x80c8, + 0x80c9, 0x80ca, 0x80cb, 0x80cf, 0x80d0, 0x80d1, 0x80d2, 0x80d3, + 0x80d4, 0x80d5, 0x80d8, 0x80df, 0x80e0, 0x80e2, 0x80e3, 0x80e6, + 0x80ee, 0x80f5, 0x80f7, 0x80f9, 0x80fb, 0x80fe, 0x80ff, 0x8100, + 0x8101, 0x8103, 0x8104, 0x8105, 0x8107, 0x8108, 0x810b, 0x810c, + 0x8115, 0x8117, 0x8119, 0x811b, 0x811c, 0x811d, 0x811f, 0x8120, + 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126, 0x8127, 0x8128, + 0x8129, 0x812a, 0x812b, 0x812d, 0x812e, 0x8130, 0x8133, 0x8134, + 0x8135, 0x8137, 0x8139, 0x813a, 0x813b, 0x813c, 0x813d, 0x813f, + /* 0xc4 */ + 0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8147, 0x8149, + 0x814d, 0x814e, 0x814f, 0x8152, 0x8156, 0x8157, 0x8158, 0x815b, + 0x815c, 0x815d, 0x815e, 0x815f, 0x8161, 0x8162, 0x8163, 0x8164, + 0x8166, 0x8168, 0x816a, 0x816b, 0x816c, 0x816f, 0x8172, 0x8173, + 0x8175, 0x8176, 0x8177, 0x8178, 0x8181, 0x8183, 0x8184, 0x8185, + 0x8186, 0x8187, 0x8189, 0x818b, 0x818c, 0x818d, 0x818e, 0x8190, + 0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8199, 0x819a, + 0x819e, 0x819f, 0x81a0, 0x81a1, 0x81a2, 0x81a4, 0x81a5, 0x81a7, + 0x81a9, 0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, + 0x81b2, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0x81bc, + 0x81bd, 0x81be, 0x81bf, 0x81c4, 0x81c5, 0x81c7, 0x81c8, 0x81c9, + 0x81cb, 0x81cd, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d2, 0x81d3, + /* 0xc5 */ + 0x81d4, 0x81d5, 0x81d6, 0x81d7, 0x81d8, 0x81d9, 0x81da, 0x81db, + 0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, 0x81e1, 0x81e2, 0x81e4, + 0x81e5, 0x81e6, 0x81e8, 0x81e9, 0x81eb, 0x81ee, 0x81ef, 0x81f0, + 0x81f1, 0x81f2, 0x81f5, 0x81f6, 0x81f7, 0x81f8, 0x81f9, 0x81fa, + 0x81fd, 0x81ff, 0x8203, 0x8207, 0x8208, 0x8209, 0x820a, 0x820b, + 0x820e, 0x820f, 0x8211, 0x8213, 0x8215, 0x8216, 0x8217, 0x8218, + 0x8219, 0x821a, 0x821d, 0x8220, 0x8224, 0x8225, 0x8226, 0x8227, + 0x8229, 0x822e, 0x8232, 0x823a, 0x823c, 0x823d, 0x823f, 0x8240, + 0x8241, 0x8242, 0x8243, 0x8245, 0x8246, 0x8248, 0x824a, 0x824c, + 0x824d, 0x824e, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, + 0x8256, 0x8257, 0x8259, 0x825b, 0x825c, 0x825d, 0x825e, 0x8260, + 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267, 0x8269, + /* 0xc6 */ + 0x826a, 0x826b, 0x826c, 0x826d, 0x8271, 0x8275, 0x8276, 0x8277, + 0x8278, 0x827b, 0x827c, 0x8280, 0x8281, 0x8283, 0x8285, 0x8286, + 0x8287, 0x8289, 0x828c, 0x8290, 0x8293, 0x8294, 0x8295, 0x8296, + 0x829a, 0x829b, 0x829e, 0x82a0, 0x82a2, 0x82a3, 0x82a7, 0x82b2, + 0x82b5, 0x82b6, 0x82ba, 0x82bb, 0x82bc, 0x82bf, 0x82c0, 0x82c2, + 0x82c3, 0x82c5, 0x82c6, 0x82c9, 0x82d0, 0x82d6, 0x82d9, 0x82da, + 0x82dd, 0x82e2, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82ec, 0x82ed, + 0x82ee, 0x82f0, 0x82f2, 0x82f3, 0x82f5, 0x82f6, 0x82f8, 0x82fa, + 0x82fc, 0x82fd, 0x82fe, 0x82ff, 0x8300, 0x830a, 0x830b, 0x830d, + 0x8310, 0x8312, 0x8313, 0x8316, 0x8318, 0x8319, 0x831d, 0x831e, + 0x831f, 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, 0x8326, + 0x8329, 0x832a, 0x832e, 0x8330, 0x8332, 0x8337, 0x833b, 0x833d, + /* 0xc7 */ + 0x833e, 0x833f, 0x8341, 0x8342, 0x8344, 0x8345, 0x8348, 0x834a, + 0x834b, 0x834c, 0x834d, 0x834e, 0x8353, 0x8355, 0x8356, 0x8357, + 0x8358, 0x8359, 0x835d, 0x8362, 0x8370, 0x8371, 0x8372, 0x8373, + 0x8374, 0x8375, 0x8376, 0x8379, 0x837a, 0x837e, 0x837f, 0x8380, + 0x8381, 0x8382, 0x8383, 0x8384, 0x8387, 0x8388, 0x838a, 0x838b, + 0x838c, 0x838d, 0x838f, 0x8390, 0x8391, 0x8394, 0x8395, 0x8396, + 0x8397, 0x8399, 0x839a, 0x839d, 0x839f, 0x83a1, 0x83a2, 0x83a3, + 0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83ac, 0x83ad, 0x83ae, 0x83af, + 0x83b5, 0x83bb, 0x83be, 0x83bf, 0x83c2, 0x83c3, 0x83c4, 0x83c6, + 0x83c8, 0x83c9, 0x83cb, 0x83cd, 0x83ce, 0x83d0, 0x83d1, 0x83d2, + 0x83d3, 0x83d5, 0x83d7, 0x83d9, 0x83da, 0x83db, 0x83de, 0x83e2, + 0x83e3, 0x83e4, 0x83e6, 0x83e7, 0x83e8, 0x83eb, 0x83ec, 0x83ed, + /* 0xc8 */ + 0x83ee, 0x83ef, 0x83f3, 0x83f4, 0x83f5, 0x83f6, 0x83f7, 0x83fa, + 0x83fb, 0x83fc, 0x83fe, 0x83ff, 0x8400, 0x8402, 0x8405, 0x8407, + 0x8408, 0x8409, 0x840a, 0x8410, 0x8412, 0x8413, 0x8414, 0x8415, + 0x8416, 0x8417, 0x8419, 0x841a, 0x841b, 0x841e, 0x841f, 0x8420, + 0x8421, 0x8422, 0x8423, 0x8429, 0x842a, 0x842b, 0x842c, 0x842d, + 0x842e, 0x842f, 0x8430, 0x8432, 0x8433, 0x8434, 0x8435, 0x8436, + 0x8437, 0x8439, 0x843a, 0x843b, 0x843e, 0x843f, 0x8440, 0x8441, + 0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, 0x8449, 0x844a, + 0x844b, 0x844c, 0x844d, 0x844e, 0x844f, 0x8450, 0x8452, 0x8453, + 0x8454, 0x8455, 0x8456, 0x8458, 0x845d, 0x845e, 0x845f, 0x8460, + 0x8462, 0x8464, 0x8465, 0x8466, 0x8467, 0x8468, 0x846a, 0x846e, + 0x846f, 0x8470, 0x8472, 0x8474, 0x8477, 0x8479, 0x847b, 0x847c, + /* 0xc9 */ + 0x847d, 0x847e, 0x847f, 0x8480, 0x8481, 0x8483, 0x8484, 0x8485, + 0x8486, 0x848a, 0x848d, 0x848f, 0x8490, 0x8491, 0x8492, 0x8493, + 0x8494, 0x8495, 0x8496, 0x8498, 0x849a, 0x849b, 0x849d, 0x849e, + 0x849f, 0x84a0, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, + 0x84a8, 0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84b0, + 0x84b1, 0x84b3, 0x84b5, 0x84b6, 0x84b7, 0x84bb, 0x84bc, 0x84be, + 0x84c0, 0x84c2, 0x84c3, 0x84c5, 0x84c6, 0x84c7, 0x84c8, 0x84cb, + 0x84cc, 0x84ce, 0x84cf, 0x84d2, 0x84d4, 0x84d5, 0x84d7, 0x84d8, + 0x84d9, 0x84da, 0x84db, 0x84dc, 0x84de, 0x84e1, 0x84e2, 0x84e4, + 0x84e7, 0x84e8, 0x84e9, 0x84ea, 0x84eb, 0x84ed, 0x84ee, 0x84ef, + 0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, 0x84f8, + 0x84f9, 0x84fa, 0x84fb, 0x84fd, 0x84fe, 0x8500, 0x8501, 0x8502, + /* 0xca */ + 0x8503, 0x8504, 0x8505, 0x8506, 0x8507, 0x8508, 0x8509, 0x850a, + 0x850b, 0x850d, 0x850e, 0x850f, 0x8510, 0x8512, 0x8514, 0x8515, + 0x8516, 0x8518, 0x8519, 0x851b, 0x851c, 0x851d, 0x851e, 0x8520, + 0x8522, 0x8523, 0x8524, 0x8525, 0x8526, 0x8527, 0x8528, 0x8529, + 0x852a, 0x852d, 0x852e, 0x852f, 0x8530, 0x8531, 0x8532, 0x8533, + 0x8534, 0x8535, 0x8536, 0x853e, 0x853f, 0x8540, 0x8541, 0x8542, + 0x8544, 0x8545, 0x8546, 0x8547, 0x854b, 0x854c, 0x854d, 0x854e, + 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0x8557, + 0x8558, 0x855a, 0x855b, 0x855c, 0x855d, 0x855f, 0x8560, 0x8561, + 0x8562, 0x8563, 0x8565, 0x8566, 0x8567, 0x8569, 0x856a, 0x856b, + 0x856c, 0x856d, 0x856e, 0x856f, 0x8570, 0x8571, 0x8573, 0x8575, + 0x8576, 0x8577, 0x8578, 0x857c, 0x857d, 0x857f, 0x8580, 0x8581, + /* 0xcb */ + 0x8582, 0x8583, 0x8586, 0x8588, 0x8589, 0x858a, 0x858b, 0x858c, + 0x858d, 0x858e, 0x8590, 0x8591, 0x8592, 0x8593, 0x8594, 0x8595, + 0x8596, 0x8597, 0x8598, 0x8599, 0x859a, 0x859d, 0x859e, 0x859f, + 0x85a0, 0x85a1, 0x85a2, 0x85a3, 0x85a5, 0x85a6, 0x85a7, 0x85a9, + 0x85ab, 0x85ac, 0x85ad, 0x85b1, 0x85b2, 0x85b3, 0x85b4, 0x85b5, + 0x85b6, 0x85b8, 0x85ba, 0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf, + 0x85c0, 0x85c2, 0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, 0x85c8, + 0x85ca, 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85d1, 0x85d2, 0x85d4, + 0x85d6, 0x85d7, 0x85d8, 0x85d9, 0x85da, 0x85db, 0x85dd, 0x85de, + 0x85df, 0x85e0, 0x85e1, 0x85e2, 0x85e3, 0x85e5, 0x85e6, 0x85e7, + 0x85e8, 0x85ea, 0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef, 0x85f0, + 0x85f1, 0x85f2, 0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7, 0x85f8, + /* 0xcc */ + 0x85f9, 0x85fa, 0x85fc, 0x85fd, 0x85fe, 0x8600, 0x8601, 0x8602, + 0x8603, 0x8604, 0x8606, 0x8607, 0x8608, 0x8609, 0x860a, 0x860b, + 0x860c, 0x860d, 0x860e, 0x860f, 0x8610, 0x8612, 0x8613, 0x8614, + 0x8615, 0x8617, 0x8618, 0x8619, 0x861a, 0x861b, 0x861c, 0x861d, + 0x861e, 0x861f, 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625, + 0x8626, 0x8628, 0x862a, 0x862b, 0x862c, 0x862d, 0x862e, 0x862f, + 0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637, + 0x8639, 0x863a, 0x863b, 0x863d, 0x863e, 0x863f, 0x8640, 0x8641, + 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649, + 0x864a, 0x864b, 0x864c, 0x8652, 0x8653, 0x8655, 0x8656, 0x8657, + 0x8658, 0x8659, 0x865b, 0x865c, 0x865d, 0x865f, 0x8660, 0x8661, + 0x8663, 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866a, + /* 0xcd */ + 0x866d, 0x866f, 0x8670, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, + 0x8677, 0x8678, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, 0x8688, + 0x8689, 0x868e, 0x868f, 0x8690, 0x8691, 0x8692, 0x8694, 0x8696, + 0x8697, 0x8698, 0x8699, 0x869a, 0x869b, 0x869e, 0x869f, 0x86a0, + 0x86a1, 0x86a2, 0x86a5, 0x86a6, 0x86ab, 0x86ad, 0x86ae, 0x86b2, + 0x86b3, 0x86b7, 0x86b8, 0x86b9, 0x86bb, 0x86bc, 0x86bd, 0x86be, + 0x86bf, 0x86c1, 0x86c2, 0x86c3, 0x86c5, 0x86c8, 0x86cc, 0x86cd, + 0x86d2, 0x86d3, 0x86d5, 0x86d6, 0x86d7, 0x86da, 0x86dc, 0x86dd, + 0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e5, 0x86e6, 0x86e7, 0x86e8, + 0x86ea, 0x86eb, 0x86ec, 0x86ef, 0x86f5, 0x86f6, 0x86f7, 0x86fa, + 0x86fb, 0x86fc, 0x86fd, 0x86ff, 0x8701, 0x8704, 0x8705, 0x8706, + 0x870b, 0x870c, 0x870e, 0x870f, 0x8710, 0x8711, 0x8714, 0x8716, + /* 0xce */ + 0x8719, 0x871b, 0x871d, 0x871f, 0x8720, 0x8724, 0x8726, 0x8727, + 0x8728, 0x872a, 0x872b, 0x872c, 0x872d, 0x872f, 0x8730, 0x8732, + 0x8733, 0x8735, 0x8736, 0x8738, 0x8739, 0x873a, 0x873c, 0x873d, + 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x874a, + 0x874b, 0x874d, 0x874f, 0x8750, 0x8751, 0x8752, 0x8754, 0x8755, + 0x8756, 0x8758, 0x875a, 0x875b, 0x875c, 0x875d, 0x875e, 0x875f, + 0x8761, 0x8762, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, + 0x876c, 0x876d, 0x876f, 0x8771, 0x8772, 0x8773, 0x8775, 0x8777, + 0x8778, 0x8779, 0x877a, 0x877f, 0x8780, 0x8781, 0x8784, 0x8786, + 0x8787, 0x8789, 0x878a, 0x878c, 0x878e, 0x878f, 0x8790, 0x8791, + 0x8792, 0x8794, 0x8795, 0x8796, 0x8798, 0x8799, 0x879a, 0x879b, + 0x879c, 0x879d, 0x879e, 0x87a0, 0x87a1, 0x87a2, 0x87a3, 0x87a4, + /* 0xcf */ + 0x87a5, 0x87a6, 0x87a7, 0x87a9, 0x87aa, 0x87ae, 0x87b0, 0x87b1, + 0x87b2, 0x87b4, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87bb, 0x87bc, + 0x87be, 0x87bf, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c7, + 0x87c8, 0x87c9, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d4, + 0x87d5, 0x87d6, 0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87dc, 0x87dd, + 0x87de, 0x87df, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e6, 0x87e7, + 0x87e8, 0x87e9, 0x87eb, 0x87ec, 0x87ed, 0x87ef, 0x87f0, 0x87f1, + 0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6, 0x87f7, 0x87f8, 0x87fa, + 0x87fb, 0x87fc, 0x87fd, 0x87ff, 0x8800, 0x8801, 0x8802, 0x8804, + 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, 0x880b, 0x880c, 0x880d, + 0x880e, 0x880f, 0x8810, 0x8811, 0x8812, 0x8814, 0x8817, 0x8818, + 0x8819, 0x881a, 0x881c, 0x881d, 0x881e, 0x881f, 0x8820, 0x8823, + /* 0xd0 */ + 0x8824, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, 0x882a, 0x882b, + 0x882c, 0x882d, 0x882e, 0x882f, 0x8830, 0x8831, 0x8833, 0x8834, + 0x8835, 0x8836, 0x8837, 0x8838, 0x883a, 0x883b, 0x883d, 0x883e, + 0x883f, 0x8841, 0x8842, 0x8843, 0x8846, 0x8847, 0x8848, 0x8849, + 0x884a, 0x884b, 0x884e, 0x884f, 0x8850, 0x8851, 0x8852, 0x8853, + 0x8855, 0x8856, 0x8858, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e, + 0x885f, 0x8860, 0x8866, 0x8867, 0x886a, 0x886d, 0x886f, 0x8871, + 0x8873, 0x8874, 0x8875, 0x8876, 0x8878, 0x8879, 0x887a, 0x887b, + 0x887c, 0x8880, 0x8883, 0x8886, 0x8887, 0x8889, 0x888a, 0x888c, + 0x888e, 0x888f, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895, 0x8897, + 0x8898, 0x8899, 0x889a, 0x889b, 0x889d, 0x889e, 0x889f, 0x88a0, + 0x88a1, 0x88a3, 0x88a5, 0x88a6, 0x88a7, 0x88a8, 0x88a9, 0x88aa, + /* 0xd1 */ + 0x88ac, 0x88ae, 0x88af, 0x88b0, 0x88b2, 0x88b3, 0x88b4, 0x88b5, + 0x88b6, 0x88b8, 0x88b9, 0x88ba, 0x88bb, 0x88bd, 0x88be, 0x88bf, + 0x88c0, 0x88c3, 0x88c4, 0x88c7, 0x88c8, 0x88ca, 0x88cb, 0x88cc, + 0x88cd, 0x88cf, 0x88d0, 0x88d1, 0x88d3, 0x88d6, 0x88d7, 0x88da, + 0x88db, 0x88dc, 0x88dd, 0x88de, 0x88e0, 0x88e1, 0x88e6, 0x88e7, + 0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f2, + 0x88f5, 0x88f6, 0x88f7, 0x88fa, 0x88fb, 0x88fd, 0x88ff, 0x8900, + 0x8901, 0x8903, 0x8904, 0x8905, 0x8906, 0x8907, 0x8908, 0x8909, + 0x890b, 0x890c, 0x890d, 0x890e, 0x890f, 0x8911, 0x8914, 0x8915, + 0x8916, 0x8917, 0x8918, 0x891c, 0x891d, 0x891e, 0x891f, 0x8920, + 0x8922, 0x8923, 0x8924, 0x8926, 0x8927, 0x8928, 0x8929, 0x892c, + 0x892d, 0x892e, 0x892f, 0x8931, 0x8932, 0x8933, 0x8935, 0x8937, + /* 0xd2 */ + 0x8938, 0x8939, 0x893a, 0x893b, 0x893c, 0x893d, 0x893e, 0x893f, + 0x8940, 0x8942, 0x8943, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, + 0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951, + 0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, + 0x895a, 0x895b, 0x895c, 0x895d, 0x8960, 0x8961, 0x8962, 0x8963, + 0x8964, 0x8965, 0x8967, 0x8968, 0x8969, 0x896a, 0x896b, 0x896c, + 0x896d, 0x896e, 0x896f, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, + 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, 0x897a, 0x897c, 0x897d, + 0x897e, 0x8980, 0x8982, 0x8984, 0x8985, 0x8987, 0x8988, 0x8989, + 0x898a, 0x898b, 0x898c, 0x898d, 0x898e, 0x898f, 0x8990, 0x8991, + 0x8992, 0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, + 0x899a, 0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1, + /* 0xd3 */ + 0x89a2, 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9, + 0x89aa, 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1, + 0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9, + 0x89ba, 0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf, 0x89c0, 0x89c3, + 0x89cd, 0x89d3, 0x89d4, 0x89d5, 0x89d7, 0x89d8, 0x89d9, 0x89db, + 0x89dd, 0x89df, 0x89e0, 0x89e1, 0x89e2, 0x89e4, 0x89e7, 0x89e8, + 0x89e9, 0x89ea, 0x89ec, 0x89ed, 0x89ee, 0x89f0, 0x89f1, 0x89f2, + 0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, 0x89fa, 0x89fb, + 0x89fc, 0x89fd, 0x89fe, 0x89ff, 0x8a01, 0x8a02, 0x8a03, 0x8a04, + 0x8a05, 0x8a06, 0x8a08, 0x8a09, 0x8a0a, 0x8a0b, 0x8a0c, 0x8a0d, + 0x8a0e, 0x8a0f, 0x8a10, 0x8a11, 0x8a12, 0x8a13, 0x8a14, 0x8a15, + 0x8a16, 0x8a17, 0x8a18, 0x8a19, 0x8a1a, 0x8a1b, 0x8a1c, 0x8a1d, + /* 0xd4 */ + 0x8a1e, 0x8a1f, 0x8a20, 0x8a21, 0x8a22, 0x8a23, 0x8a24, 0x8a25, + 0x8a26, 0x8a27, 0x8a28, 0x8a29, 0x8a2a, 0x8a2b, 0x8a2c, 0x8a2d, + 0x8a2e, 0x8a2f, 0x8a30, 0x8a31, 0x8a32, 0x8a33, 0x8a34, 0x8a35, + 0x8a36, 0x8a37, 0x8a38, 0x8a39, 0x8a3a, 0x8a3b, 0x8a3c, 0x8a3d, + 0x8a3f, 0x8a40, 0x8a41, 0x8a42, 0x8a43, 0x8a44, 0x8a45, 0x8a46, + 0x8a47, 0x8a49, 0x8a4a, 0x8a4b, 0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f, + 0x8a50, 0x8a51, 0x8a52, 0x8a53, 0x8a54, 0x8a55, 0x8a56, 0x8a57, + 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, + 0x8a60, 0x8a61, 0x8a62, 0x8a63, 0x8a64, 0x8a65, 0x8a66, 0x8a67, + 0x8a68, 0x8a69, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f, + 0x8a70, 0x8a71, 0x8a72, 0x8a73, 0x8a74, 0x8a75, 0x8a76, 0x8a77, + 0x8a78, 0x8a7a, 0x8a7b, 0x8a7c, 0x8a7d, 0x8a7e, 0x8a7f, 0x8a80, + /* 0xd5 */ + 0x8a81, 0x8a82, 0x8a83, 0x8a84, 0x8a85, 0x8a86, 0x8a87, 0x8a88, + 0x8a8b, 0x8a8c, 0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a92, + 0x8a94, 0x8a95, 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, + 0x8a9c, 0x8a9d, 0x8a9e, 0x8a9f, 0x8aa0, 0x8aa1, 0x8aa2, 0x8aa3, + 0x8aa4, 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab, + 0x8aac, 0x8aad, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, + 0x8ab4, 0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9, 0x8aba, 0x8abb, + 0x8abc, 0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, 0x8ac3, + 0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, 0x8acb, + 0x8acc, 0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad2, 0x8ad3, + 0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, 0x8adb, + 0x8adc, 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3, + /* 0xd6 */ + 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb, + 0x8aec, 0x8aed, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3, + 0x8af4, 0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0x8afa, 0x8afb, + 0x8afc, 0x8afd, 0x8afe, 0x8aff, 0x8b00, 0x8b01, 0x8b02, 0x8b03, + 0x8b04, 0x8b05, 0x8b06, 0x8b08, 0x8b09, 0x8b0a, 0x8b0b, 0x8b0c, + 0x8b0d, 0x8b0e, 0x8b0f, 0x8b10, 0x8b11, 0x8b12, 0x8b13, 0x8b14, + 0x8b15, 0x8b16, 0x8b17, 0x8b18, 0x8b19, 0x8b1a, 0x8b1b, 0x8b1c, + 0x8b1d, 0x8b1e, 0x8b1f, 0x8b20, 0x8b21, 0x8b22, 0x8b23, 0x8b24, + 0x8b25, 0x8b27, 0x8b28, 0x8b29, 0x8b2a, 0x8b2b, 0x8b2c, 0x8b2d, + 0x8b2e, 0x8b2f, 0x8b30, 0x8b31, 0x8b32, 0x8b33, 0x8b34, 0x8b35, + 0x8b36, 0x8b37, 0x8b38, 0x8b39, 0x8b3a, 0x8b3b, 0x8b3c, 0x8b3d, + 0x8b3e, 0x8b3f, 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0x8b45, + /* 0xd7 */ + 0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d, + 0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55, + 0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, + 0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, + 0x8b67, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6d, 0x8b6e, 0x8b6f, + 0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, + 0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, 0x8b7e, 0x8b7f, + 0x8b80, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, 0x8b86, 0x8b87, + 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, 0x8b8e, 0x8b8f, + 0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, 0x8b96, 0x8b97, + 0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, 0x8b9e, 0x8b9f, + 0x8bac, 0x8bb1, 0x8bbb, 0x8bc7, 0x8bd0, 0x8bea, 0x8c09, 0x8c1e, + /* 0xd8 */ + 0x8c38, 0x8c39, 0x8c3a, 0x8c3b, 0x8c3c, 0x8c3d, 0x8c3e, 0x8c3f, + 0x8c40, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c48, 0x8c4a, 0x8c4b, + 0x8c4d, 0x8c4e, 0x8c4f, 0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54, + 0x8c56, 0x8c57, 0x8c58, 0x8c59, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e, + 0x8c5f, 0x8c60, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67, 0x8c68, + 0x8c69, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f, 0x8c70, 0x8c71, 0x8c72, + 0x8c74, 0x8c75, 0x8c76, 0x8c77, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e, + 0x8c7f, 0x8c80, 0x8c81, 0x8c83, 0x8c84, 0x8c86, 0x8c87, 0x8c88, + 0x8c8b, 0x8c8d, 0x8c8e, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, 0x8c93, + 0x8c95, 0x8c96, 0x8c97, 0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, 0x8c9d, + 0x8c9e, 0x8c9f, 0x8ca0, 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, 0x8ca5, + 0x8ca6, 0x8ca7, 0x8ca8, 0x8ca9, 0x8caa, 0x8cab, 0x8cac, 0x8cad, + /* 0xd9 */ + 0x8cae, 0x8caf, 0x8cb0, 0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5, + 0x8cb6, 0x8cb7, 0x8cb8, 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd, + 0x8cbe, 0x8cbf, 0x8cc0, 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5, + 0x8cc6, 0x8cc7, 0x8cc8, 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd, + 0x8cce, 0x8ccf, 0x8cd0, 0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5, + 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd, + 0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5, + 0x8ce6, 0x8ce7, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x8ced, + 0x8cee, 0x8cef, 0x8cf0, 0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, 0x8cf5, + 0x8cf6, 0x8cf7, 0x8cf8, 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, + 0x8cfe, 0x8cff, 0x8d00, 0x8d01, 0x8d02, 0x8d03, 0x8d04, 0x8d05, + 0x8d06, 0x8d07, 0x8d08, 0x8d09, 0x8d0a, 0x8d0b, 0x8d0c, 0x8d0d, + /* 0xda */ + 0x8d0e, 0x8d0f, 0x8d10, 0x8d11, 0x8d12, 0x8d13, 0x8d14, 0x8d15, + 0x8d16, 0x8d17, 0x8d18, 0x8d19, 0x8d1a, 0x8d1b, 0x8d1c, 0x8d20, + 0x8d51, 0x8d52, 0x8d57, 0x8d5f, 0x8d65, 0x8d68, 0x8d69, 0x8d6a, + 0x8d6c, 0x8d6e, 0x8d6f, 0x8d71, 0x8d72, 0x8d78, 0x8d79, 0x8d7a, + 0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8d7f, 0x8d80, 0x8d82, 0x8d83, + 0x8d86, 0x8d87, 0x8d88, 0x8d89, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f, + 0x8d90, 0x8d92, 0x8d93, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99, + 0x8d9a, 0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8da0, 0x8da1, 0x8da2, + 0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab, + 0x8dac, 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db2, 0x8db6, 0x8db7, + 0x8db9, 0x8dbb, 0x8dbd, 0x8dc0, 0x8dc1, 0x8dc2, 0x8dc5, 0x8dc7, + 0x8dc8, 0x8dc9, 0x8dca, 0x8dcd, 0x8dd0, 0x8dd2, 0x8dd3, 0x8dd4, + /* 0xdb */ + 0x8dd5, 0x8dd8, 0x8dd9, 0x8ddc, 0x8de0, 0x8de1, 0x8de2, 0x8de5, + 0x8de6, 0x8de7, 0x8de9, 0x8ded, 0x8dee, 0x8df0, 0x8df1, 0x8df2, + 0x8df4, 0x8df6, 0x8dfc, 0x8dfe, 0x8dff, 0x8e00, 0x8e01, 0x8e02, + 0x8e03, 0x8e04, 0x8e06, 0x8e07, 0x8e08, 0x8e0b, 0x8e0d, 0x8e0e, + 0x8e10, 0x8e11, 0x8e12, 0x8e13, 0x8e15, 0x8e16, 0x8e17, 0x8e18, + 0x8e19, 0x8e1a, 0x8e1b, 0x8e1c, 0x8e20, 0x8e21, 0x8e24, 0x8e25, + 0x8e26, 0x8e27, 0x8e28, 0x8e2b, 0x8e2d, 0x8e30, 0x8e32, 0x8e33, + 0x8e34, 0x8e36, 0x8e37, 0x8e38, 0x8e3b, 0x8e3c, 0x8e3e, 0x8e3f, + 0x8e43, 0x8e45, 0x8e46, 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50, + 0x8e53, 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e5a, 0x8e5b, + 0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0x8e63, + 0x8e64, 0x8e65, 0x8e67, 0x8e68, 0x8e6a, 0x8e6b, 0x8e6e, 0x8e71, + /* 0xdc */ + 0x8e73, 0x8e75, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, 0x8e7d, + 0x8e7e, 0x8e80, 0x8e82, 0x8e83, 0x8e84, 0x8e86, 0x8e88, 0x8e89, + 0x8e8a, 0x8e8b, 0x8e8c, 0x8e8d, 0x8e8e, 0x8e91, 0x8e92, 0x8e93, + 0x8e95, 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0x8e9d, + 0x8e9f, 0x8ea0, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, + 0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8ead, 0x8eae, 0x8eb0, 0x8eb1, + 0x8eb3, 0x8eb4, 0x8eb5, 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8ebb, + 0x8ebc, 0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3, + 0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb, + 0x8ecc, 0x8ecd, 0x8ecf, 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4, + 0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc, + 0x8edd, 0x8ede, 0x8edf, 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4, + /* 0xdd */ + 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec, + 0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4, + 0x8ef5, 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc, + 0x8efd, 0x8efe, 0x8eff, 0x8f00, 0x8f01, 0x8f02, 0x8f03, 0x8f04, + 0x8f05, 0x8f06, 0x8f07, 0x8f08, 0x8f09, 0x8f0a, 0x8f0b, 0x8f0c, + 0x8f0d, 0x8f0e, 0x8f0f, 0x8f10, 0x8f11, 0x8f12, 0x8f13, 0x8f14, + 0x8f15, 0x8f16, 0x8f17, 0x8f18, 0x8f19, 0x8f1a, 0x8f1b, 0x8f1c, + 0x8f1d, 0x8f1e, 0x8f1f, 0x8f20, 0x8f21, 0x8f22, 0x8f23, 0x8f24, + 0x8f25, 0x8f26, 0x8f27, 0x8f28, 0x8f29, 0x8f2a, 0x8f2b, 0x8f2c, + 0x8f2d, 0x8f2e, 0x8f2f, 0x8f30, 0x8f31, 0x8f32, 0x8f33, 0x8f34, + 0x8f35, 0x8f36, 0x8f37, 0x8f38, 0x8f39, 0x8f3a, 0x8f3b, 0x8f3c, + 0x8f3d, 0x8f3e, 0x8f3f, 0x8f40, 0x8f41, 0x8f42, 0x8f43, 0x8f44, + /* 0xde */ + 0x8f45, 0x8f46, 0x8f47, 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c, + 0x8f4d, 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54, + 0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c, + 0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64, + 0x8f65, 0x8f6a, 0x8f80, 0x8f8c, 0x8f92, 0x8f9d, 0x8fa0, 0x8fa1, + 0x8fa2, 0x8fa4, 0x8fa5, 0x8fa6, 0x8fa7, 0x8faa, 0x8fac, 0x8fad, + 0x8fae, 0x8faf, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb7, 0x8fb8, + 0x8fba, 0x8fbb, 0x8fbc, 0x8fbf, 0x8fc0, 0x8fc3, 0x8fc6, 0x8fc9, + 0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fcf, 0x8fd2, 0x8fd6, 0x8fd7, + 0x8fda, 0x8fe0, 0x8fe1, 0x8fe3, 0x8fe7, 0x8fec, 0x8fef, 0x8ff1, + 0x8ff2, 0x8ff4, 0x8ff5, 0x8ff6, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffe, + 0x8fff, 0x9007, 0x9008, 0x900c, 0x900e, 0x9013, 0x9015, 0x9018, + /* 0xdf */ + 0x9019, 0x901c, 0x9023, 0x9024, 0x9025, 0x9027, 0x9028, 0x9029, + 0x902a, 0x902b, 0x902c, 0x9030, 0x9031, 0x9032, 0x9033, 0x9034, + 0x9037, 0x9039, 0x903a, 0x903d, 0x903f, 0x9040, 0x9043, 0x9045, + 0x9046, 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904e, 0x9054, + 0x9055, 0x9056, 0x9059, 0x905a, 0x905c, 0x905d, 0x905e, 0x905f, + 0x9060, 0x9061, 0x9064, 0x9066, 0x9067, 0x9069, 0x906a, 0x906b, + 0x906c, 0x906f, 0x9070, 0x9071, 0x9072, 0x9073, 0x9076, 0x9077, + 0x9078, 0x9079, 0x907a, 0x907b, 0x907c, 0x907e, 0x9081, 0x9084, + 0x9085, 0x9086, 0x9087, 0x9089, 0x908a, 0x908c, 0x908d, 0x908e, + 0x908f, 0x9090, 0x9092, 0x9094, 0x9096, 0x9098, 0x909a, 0x909c, + 0x909e, 0x909f, 0x90a0, 0x90a4, 0x90a5, 0x90a7, 0x90a8, 0x90a9, + 0x90ab, 0x90ad, 0x90b2, 0x90b7, 0x90bc, 0x90bd, 0x90bf, 0x90c0, + /* 0xe0 */ + 0x90c2, 0x90c3, 0x90c6, 0x90c8, 0x90c9, 0x90cb, 0x90cc, 0x90cd, + 0x90d2, 0x90d4, 0x90d5, 0x90d6, 0x90d8, 0x90d9, 0x90da, 0x90de, + 0x90df, 0x90e0, 0x90e3, 0x90e4, 0x90e5, 0x90e9, 0x90ea, 0x90ec, + 0x90ee, 0x90f0, 0x90f1, 0x90f2, 0x90f3, 0x90f5, 0x90f6, 0x90f7, + 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90ff, 0x9100, 0x9101, 0x9103, + 0x9105, 0x9106, 0x9107, 0x9108, 0x9109, 0x910a, 0x910b, 0x910c, + 0x910d, 0x910e, 0x910f, 0x9110, 0x9111, 0x9112, 0x9113, 0x9114, + 0x9115, 0x9116, 0x9117, 0x9118, 0x911a, 0x911b, 0x911c, 0x911d, + 0x911f, 0x9120, 0x9121, 0x9124, 0x9125, 0x9126, 0x9127, 0x9128, + 0x9129, 0x912a, 0x912b, 0x912c, 0x912d, 0x912e, 0x9130, 0x9132, + 0x9133, 0x9134, 0x9135, 0x9136, 0x9137, 0x9138, 0x913a, 0x913b, + 0x913c, 0x913d, 0x913e, 0x913f, 0x9140, 0x9141, 0x9142, 0x9144, + /* 0xe1 */ + 0x9145, 0x9147, 0x9148, 0x9151, 0x9153, 0x9154, 0x9155, 0x9156, + 0x9158, 0x9159, 0x915b, 0x915c, 0x915f, 0x9160, 0x9166, 0x9167, + 0x9168, 0x916b, 0x916d, 0x9173, 0x917a, 0x917b, 0x917c, 0x9180, + 0x9181, 0x9182, 0x9183, 0x9184, 0x9186, 0x9188, 0x918a, 0x918e, + 0x918f, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, + 0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0x91a4, 0x91a5, + 0x91a6, 0x91a7, 0x91a8, 0x91a9, 0x91ab, 0x91ac, 0x91b0, 0x91b1, + 0x91b2, 0x91b3, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91bb, 0x91bc, + 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0x91c2, 0x91c3, 0x91c4, + 0x91c5, 0x91c6, 0x91c8, 0x91cb, 0x91d0, 0x91d2, 0x91d3, 0x91d4, + 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da, 0x91db, 0x91dd, + 0x91de, 0x91df, 0x91e0, 0x91e1, 0x91e2, 0x91e3, 0x91e4, 0x91e5, + /* 0xe2 */ + 0x91e6, 0x91e7, 0x91e8, 0x91e9, 0x91ea, 0x91eb, 0x91ec, 0x91ed, + 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f2, 0x91f3, 0x91f4, 0x91f5, + 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0x91fa, 0x91fb, 0x91fc, 0x91fd, + 0x91fe, 0x91ff, 0x9200, 0x9201, 0x9202, 0x9203, 0x9204, 0x9205, + 0x9206, 0x9207, 0x9208, 0x9209, 0x920a, 0x920b, 0x920c, 0x920d, + 0x920e, 0x920f, 0x9210, 0x9211, 0x9212, 0x9213, 0x9214, 0x9215, + 0x9216, 0x9217, 0x9218, 0x9219, 0x921a, 0x921b, 0x921c, 0x921d, + 0x921e, 0x921f, 0x9220, 0x9221, 0x9222, 0x9223, 0x9224, 0x9225, + 0x9226, 0x9227, 0x9228, 0x9229, 0x922a, 0x922b, 0x922c, 0x922d, + 0x922e, 0x922f, 0x9230, 0x9231, 0x9232, 0x9233, 0x9234, 0x9235, + 0x9236, 0x9237, 0x9238, 0x9239, 0x923a, 0x923b, 0x923c, 0x923d, + 0x923e, 0x923f, 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, 0x9245, + /* 0xe3 */ + 0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b, 0x924c, 0x924d, + 0x924e, 0x924f, 0x9250, 0x9251, 0x9252, 0x9253, 0x9254, 0x9255, + 0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b, 0x925c, 0x925d, + 0x925e, 0x925f, 0x9260, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, + 0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b, 0x926c, 0x926d, + 0x926e, 0x926f, 0x9270, 0x9271, 0x9272, 0x9273, 0x9275, 0x9276, + 0x9277, 0x9278, 0x9279, 0x927a, 0x927b, 0x927c, 0x927d, 0x927e, + 0x927f, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0x9286, + 0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, 0x928d, 0x928f, + 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, 0x9297, + 0x9298, 0x9299, 0x929a, 0x929b, 0x929c, 0x929d, 0x929e, 0x929f, + 0x92a0, 0x92a1, 0x92a2, 0x92a3, 0x92a4, 0x92a5, 0x92a6, 0x92a7, + /* 0xe4 */ + 0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac, 0x92ad, 0x92af, 0x92b0, + 0x92b1, 0x92b2, 0x92b3, 0x92b4, 0x92b5, 0x92b6, 0x92b7, 0x92b8, + 0x92b9, 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92be, 0x92bf, 0x92c0, + 0x92c1, 0x92c2, 0x92c3, 0x92c4, 0x92c5, 0x92c6, 0x92c7, 0x92c9, + 0x92ca, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1, + 0x92d2, 0x92d3, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0x92d8, 0x92d9, + 0x92da, 0x92db, 0x92dc, 0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1, + 0x92e2, 0x92e3, 0x92e4, 0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x92e9, + 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, 0x92f1, + 0x92f2, 0x92f3, 0x92f4, 0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9, + 0x92fa, 0x92fb, 0x92fc, 0x92fd, 0x92fe, 0x92ff, 0x9300, 0x9301, + 0x9302, 0x9303, 0x9304, 0x9305, 0x9306, 0x9307, 0x9308, 0x9309, + /* 0xe5 */ + 0x930a, 0x930b, 0x930c, 0x930d, 0x930e, 0x930f, 0x9310, 0x9311, + 0x9312, 0x9313, 0x9314, 0x9315, 0x9316, 0x9317, 0x9318, 0x9319, + 0x931a, 0x931b, 0x931c, 0x931d, 0x931e, 0x931f, 0x9320, 0x9321, + 0x9322, 0x9323, 0x9324, 0x9325, 0x9326, 0x9327, 0x9328, 0x9329, + 0x932a, 0x932b, 0x932c, 0x932d, 0x932e, 0x932f, 0x9330, 0x9331, + 0x9332, 0x9333, 0x9334, 0x9335, 0x9336, 0x9337, 0x9338, 0x9339, + 0x933a, 0x933b, 0x933c, 0x933d, 0x933f, 0x9340, 0x9341, 0x9342, + 0x9343, 0x9344, 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934a, + 0x934b, 0x934c, 0x934d, 0x934e, 0x934f, 0x9350, 0x9351, 0x9352, + 0x9353, 0x9354, 0x9355, 0x9356, 0x9357, 0x9358, 0x9359, 0x935a, + 0x935b, 0x935c, 0x935d, 0x935e, 0x935f, 0x9360, 0x9361, 0x9362, + 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, 0x936b, + /* 0xe6 */ + 0x936c, 0x936d, 0x936e, 0x936f, 0x9370, 0x9371, 0x9372, 0x9373, + 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, 0x937a, 0x937b, + 0x937c, 0x937d, 0x937e, 0x937f, 0x9380, 0x9381, 0x9382, 0x9383, + 0x9384, 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938a, 0x938b, + 0x938c, 0x938d, 0x938e, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, + 0x9395, 0x9396, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c, + 0x939d, 0x939e, 0x939f, 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4, + 0x93a5, 0x93a6, 0x93a7, 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, + 0x93ad, 0x93ae, 0x93af, 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0x93b4, + 0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, + 0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4, + 0x93c5, 0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93cb, 0x93cc, 0x93cd, + /* 0xe7 */ + 0x93ce, 0x93cf, 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5, + 0x93d7, 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de, + 0x93df, 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6, + 0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee, + 0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, + 0x93f7, 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe, + 0x93ff, 0x9400, 0x9401, 0x9402, 0x9403, 0x9404, 0x9405, 0x9406, + 0x9407, 0x9408, 0x9409, 0x940a, 0x940b, 0x940c, 0x940d, 0x940e, + 0x940f, 0x9410, 0x9411, 0x9412, 0x9413, 0x9414, 0x9415, 0x9416, + 0x9417, 0x9418, 0x9419, 0x941a, 0x941b, 0x941c, 0x941d, 0x941e, + 0x941f, 0x9420, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, 0x9426, + 0x9427, 0x9428, 0x9429, 0x942a, 0x942b, 0x942c, 0x942d, 0x942e, + /* 0xe8 */ + 0x942f, 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435, 0x9436, + 0x9437, 0x9438, 0x9439, 0x943a, 0x943b, 0x943c, 0x943d, 0x943f, + 0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447, + 0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, + 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, + 0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, + 0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, + 0x9468, 0x9469, 0x946a, 0x946c, 0x946d, 0x946e, 0x946f, 0x9470, + 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, 0x9478, + 0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x947f, 0x9480, + 0x9481, 0x9482, 0x9483, 0x9484, 0x9491, 0x9496, 0x9498, 0x94c7, + 0x94cf, 0x94d3, 0x94d4, 0x94da, 0x94e6, 0x94fb, 0x951c, 0x9520, + /* 0xe9 */ + 0x9527, 0x9533, 0x953d, 0x9543, 0x9548, 0x954b, 0x9555, 0x955a, + 0x9560, 0x956e, 0x9574, 0x9575, 0x9577, 0x9578, 0x9579, 0x957a, + 0x957b, 0x957c, 0x957d, 0x957e, 0x9580, 0x9581, 0x9582, 0x9583, + 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958a, 0x958b, + 0x958c, 0x958d, 0x958e, 0x958f, 0x9590, 0x9591, 0x9592, 0x9593, + 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959a, 0x959b, + 0x959c, 0x959d, 0x959e, 0x959f, 0x95a0, 0x95a1, 0x95a2, 0x95a3, + 0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa, 0x95ab, + 0x95ac, 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b2, 0x95b3, + 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba, 0x95bb, + 0x95bc, 0x95bd, 0x95be, 0x95bf, 0x95c0, 0x95c1, 0x95c2, 0x95c3, + 0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0x95ca, 0x95cb, + /* 0xea */ + 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, 0x95d3, + 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, 0x95db, + 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, 0x95e3, + 0x95e4, 0x95e5, 0x95e6, 0x95e7, 0x95ec, 0x95ff, 0x9607, 0x9613, + 0x9618, 0x961b, 0x961e, 0x9620, 0x9623, 0x9624, 0x9625, 0x9626, + 0x9627, 0x9628, 0x9629, 0x962b, 0x962c, 0x962d, 0x962f, 0x9630, + 0x9637, 0x9638, 0x9639, 0x963a, 0x963e, 0x9641, 0x9643, 0x964a, + 0x964e, 0x964f, 0x9651, 0x9652, 0x9653, 0x9656, 0x9657, 0x9658, + 0x9659, 0x965a, 0x965c, 0x965d, 0x965e, 0x9660, 0x9663, 0x9665, + 0x9666, 0x966b, 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, 0x9673, + 0x9678, 0x9679, 0x967a, 0x967b, 0x967c, 0x967d, 0x967e, 0x967f, + 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9687, 0x9689, 0x968a, + /* 0xeb */ + 0x968c, 0x968e, 0x9691, 0x9692, 0x9693, 0x9695, 0x9696, 0x969a, + 0x969b, 0x969d, 0x969e, 0x969f, 0x96a0, 0x96a1, 0x96a2, 0x96a3, + 0x96a4, 0x96a5, 0x96a6, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac, + 0x96ad, 0x96ae, 0x96af, 0x96b1, 0x96b2, 0x96b4, 0x96b5, 0x96b7, + 0x96b8, 0x96ba, 0x96bb, 0x96bf, 0x96c2, 0x96c3, 0x96c8, 0x96ca, + 0x96cb, 0x96d0, 0x96d1, 0x96d3, 0x96d4, 0x96d6, 0x96d7, 0x96d8, + 0x96d9, 0x96da, 0x96db, 0x96dc, 0x96dd, 0x96de, 0x96df, 0x96e1, + 0x96e2, 0x96e3, 0x96e4, 0x96e5, 0x96e6, 0x96e7, 0x96eb, 0x96ec, + 0x96ed, 0x96ee, 0x96f0, 0x96f1, 0x96f2, 0x96f4, 0x96f5, 0x96f8, + 0x96fa, 0x96fb, 0x96fc, 0x96fd, 0x96ff, 0x9702, 0x9703, 0x9705, + 0x970a, 0x970b, 0x970c, 0x9710, 0x9711, 0x9712, 0x9714, 0x9715, + 0x9717, 0x9718, 0x9719, 0x971a, 0x971b, 0x971d, 0x971f, 0x9720, + /* 0xec */ + 0x9721, 0x9722, 0x9723, 0x9724, 0x9725, 0x9726, 0x9727, 0x9728, + 0x9729, 0x972b, 0x972c, 0x972e, 0x972f, 0x9731, 0x9733, 0x9734, + 0x9735, 0x9736, 0x9737, 0x973a, 0x973b, 0x973c, 0x973d, 0x973f, + 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, + 0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, 0x974e, 0x974f, + 0x9750, 0x9751, 0x9754, 0x9755, 0x9757, 0x9758, 0x975a, 0x975c, + 0x975d, 0x975f, 0x9763, 0x9764, 0x9766, 0x9767, 0x9768, 0x976a, + 0x976b, 0x976c, 0x976d, 0x976e, 0x976f, 0x9770, 0x9771, 0x9772, + 0x9775, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977d, 0x977e, + 0x977f, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9786, 0x9787, + 0x9788, 0x9789, 0x978a, 0x978c, 0x978e, 0x978f, 0x9790, 0x9793, + 0x9795, 0x9796, 0x9797, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, + /* 0xed */ + 0x979e, 0x979f, 0x97a1, 0x97a2, 0x97a4, 0x97a5, 0x97a6, 0x97a7, + 0x97a8, 0x97a9, 0x97aa, 0x97ac, 0x97ae, 0x97b0, 0x97b1, 0x97b3, + 0x97b5, 0x97b6, 0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, + 0x97bd, 0x97be, 0x97bf, 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4, + 0x97c5, 0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, + 0x97cd, 0x97ce, 0x97cf, 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4, + 0x97d5, 0x97d6, 0x97d7, 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc, + 0x97dd, 0x97de, 0x97df, 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4, + 0x97e5, 0x97e8, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f4, + 0x97f7, 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, 0x97fe, + 0x97ff, 0x9800, 0x9801, 0x9802, 0x9803, 0x9804, 0x9805, 0x9806, + 0x9807, 0x9808, 0x9809, 0x980a, 0x980b, 0x980c, 0x980d, 0x980e, + /* 0xee */ + 0x980f, 0x9810, 0x9811, 0x9812, 0x9813, 0x9814, 0x9815, 0x9816, + 0x9817, 0x9818, 0x9819, 0x981a, 0x981b, 0x981c, 0x981d, 0x981e, + 0x981f, 0x9820, 0x9821, 0x9822, 0x9823, 0x9824, 0x9825, 0x9826, + 0x9827, 0x9828, 0x9829, 0x982a, 0x982b, 0x982c, 0x982d, 0x982e, + 0x982f, 0x9830, 0x9831, 0x9832, 0x9833, 0x9834, 0x9835, 0x9836, + 0x9837, 0x9838, 0x9839, 0x983a, 0x983b, 0x983c, 0x983d, 0x983e, + 0x983f, 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, + 0x9847, 0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e, + 0x984f, 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, + 0x9857, 0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, 0x985e, + 0x985f, 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, + 0x9867, 0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, + /* 0xef */ + 0x986f, 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x988b, 0x988e, + 0x9892, 0x9895, 0x9899, 0x98a3, 0x98a8, 0x98a9, 0x98aa, 0x98ab, + 0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3, + 0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb, + 0x98bc, 0x98bd, 0x98be, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3, + 0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0x98cb, + 0x98cc, 0x98cd, 0x98cf, 0x98d0, 0x98d4, 0x98d6, 0x98d7, 0x98db, + 0x98dc, 0x98dd, 0x98e0, 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5, + 0x98e6, 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef, + 0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7, + 0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, 0x98ff, + 0x9900, 0x9901, 0x9902, 0x9903, 0x9904, 0x9905, 0x9906, 0x9907, + /* 0xf0 */ + 0x9908, 0x9909, 0x990a, 0x990b, 0x990c, 0x990e, 0x990f, 0x9911, + 0x9912, 0x9913, 0x9914, 0x9915, 0x9916, 0x9917, 0x9918, 0x9919, + 0x991a, 0x991b, 0x991c, 0x991d, 0x991e, 0x991f, 0x9920, 0x9921, + 0x9922, 0x9923, 0x9924, 0x9925, 0x9926, 0x9927, 0x9928, 0x9929, + 0x992a, 0x992b, 0x992c, 0x992d, 0x992f, 0x9930, 0x9931, 0x9932, + 0x9933, 0x9934, 0x9935, 0x9936, 0x9937, 0x9938, 0x9939, 0x993a, + 0x993b, 0x993c, 0x993d, 0x993e, 0x993f, 0x9940, 0x9941, 0x9942, + 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0x994a, + 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, 0x9952, + 0x9953, 0x9956, 0x9957, 0x9958, 0x9959, 0x995a, 0x995b, 0x995c, + 0x995d, 0x995e, 0x995f, 0x9960, 0x9961, 0x9962, 0x9964, 0x9966, + 0x9973, 0x9978, 0x9979, 0x997b, 0x997e, 0x9982, 0x9983, 0x9989, + /* 0xf1 */ + 0x998c, 0x998e, 0x999a, 0x999b, 0x999c, 0x999d, 0x999e, 0x999f, + 0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a6, 0x99a7, 0x99a9, + 0x99aa, 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1, + 0x99b2, 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9, + 0x99ba, 0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf, 0x99c0, 0x99c1, + 0x99c2, 0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9, + 0x99ca, 0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1, + 0x99d2, 0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x99d9, + 0x99da, 0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df, 0x99e0, 0x99e1, + 0x99e2, 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8, 0x99e9, + 0x99ea, 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0, 0x99f1, + 0x99f2, 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, 0x99f9, + /* 0xf2 */ + 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x99ff, 0x9a00, 0x9a01, + 0x9a02, 0x9a03, 0x9a04, 0x9a05, 0x9a06, 0x9a07, 0x9a08, 0x9a09, + 0x9a0a, 0x9a0b, 0x9a0c, 0x9a0d, 0x9a0e, 0x9a0f, 0x9a10, 0x9a11, + 0x9a12, 0x9a13, 0x9a14, 0x9a15, 0x9a16, 0x9a17, 0x9a18, 0x9a19, + 0x9a1a, 0x9a1b, 0x9a1c, 0x9a1d, 0x9a1e, 0x9a1f, 0x9a20, 0x9a21, + 0x9a22, 0x9a23, 0x9a24, 0x9a25, 0x9a26, 0x9a27, 0x9a28, 0x9a29, + 0x9a2a, 0x9a2b, 0x9a2c, 0x9a2d, 0x9a2e, 0x9a2f, 0x9a30, 0x9a31, + 0x9a32, 0x9a33, 0x9a34, 0x9a35, 0x9a36, 0x9a37, 0x9a38, 0x9a39, + 0x9a3a, 0x9a3b, 0x9a3c, 0x9a3d, 0x9a3e, 0x9a3f, 0x9a40, 0x9a41, + 0x9a42, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49, + 0x9a4a, 0x9a4b, 0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51, + 0x9a52, 0x9a53, 0x9a54, 0x9a55, 0x9a56, 0x9a57, 0x9a58, 0x9a59, + /* 0xf3 */ + 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f, 0x9a60, 0x9a61, + 0x9a62, 0x9a63, 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69, + 0x9a6a, 0x9a6b, 0x9a72, 0x9a83, 0x9a89, 0x9a8d, 0x9a8e, 0x9a94, + 0x9a95, 0x9a99, 0x9aa6, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, 0x9aad, + 0x9aae, 0x9aaf, 0x9ab2, 0x9ab3, 0x9ab4, 0x9ab5, 0x9ab9, 0x9abb, + 0x9abd, 0x9abe, 0x9abf, 0x9ac3, 0x9ac4, 0x9ac6, 0x9ac7, 0x9ac8, + 0x9ac9, 0x9aca, 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad2, 0x9ad4, + 0x9ad5, 0x9ad6, 0x9ad7, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, 0x9add, + 0x9ade, 0x9ae0, 0x9ae2, 0x9ae3, 0x9ae4, 0x9ae5, 0x9ae7, 0x9ae8, + 0x9ae9, 0x9aea, 0x9aec, 0x9aee, 0x9af0, 0x9af1, 0x9af2, 0x9af3, + 0x9af4, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9afa, 0x9afc, 0x9afd, + 0x9afe, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b04, 0x9b05, 0x9b06, + /* 0xf4 */ + 0x9b07, 0x9b09, 0x9b0a, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, 0x9b10, + 0x9b11, 0x9b12, 0x9b14, 0x9b15, 0x9b16, 0x9b17, 0x9b18, 0x9b19, + 0x9b1a, 0x9b1b, 0x9b1c, 0x9b1d, 0x9b1e, 0x9b20, 0x9b21, 0x9b22, + 0x9b24, 0x9b25, 0x9b26, 0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2b, + 0x9b2c, 0x9b2d, 0x9b2e, 0x9b30, 0x9b31, 0x9b33, 0x9b34, 0x9b35, + 0x9b36, 0x9b37, 0x9b38, 0x9b39, 0x9b3a, 0x9b3d, 0x9b3e, 0x9b3f, + 0x9b40, 0x9b46, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4e, 0x9b50, 0x9b52, + 0x9b53, 0x9b55, 0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x9b5b, + 0x9b5c, 0x9b5d, 0x9b5e, 0x9b5f, 0x9b60, 0x9b61, 0x9b62, 0x9b63, + 0x9b64, 0x9b65, 0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, 0x9b6b, + 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, 0x9b73, + 0x9b74, 0x9b75, 0x9b76, 0x9b77, 0x9b78, 0x9b79, 0x9b7a, 0x9b7b, + /* 0xf5 */ + 0x9b7c, 0x9b7d, 0x9b7e, 0x9b7f, 0x9b80, 0x9b81, 0x9b82, 0x9b83, + 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b88, 0x9b89, 0x9b8a, 0x9b8b, + 0x9b8c, 0x9b8d, 0x9b8e, 0x9b8f, 0x9b90, 0x9b91, 0x9b92, 0x9b93, + 0x9b94, 0x9b95, 0x9b96, 0x9b97, 0x9b98, 0x9b99, 0x9b9a, 0x9b9b, + 0x9b9c, 0x9b9d, 0x9b9e, 0x9b9f, 0x9ba0, 0x9ba1, 0x9ba2, 0x9ba3, + 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0x9ba8, 0x9ba9, 0x9baa, 0x9bab, + 0x9bac, 0x9bad, 0x9bae, 0x9baf, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3, + 0x9bb4, 0x9bb5, 0x9bb6, 0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb, + 0x9bbc, 0x9bbd, 0x9bbe, 0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3, + 0x9bc4, 0x9bc5, 0x9bc6, 0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb, + 0x9bcc, 0x9bcd, 0x9bce, 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3, + 0x9bd4, 0x9bd5, 0x9bd6, 0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb, + /* 0xf6 */ + 0x9bdc, 0x9bdd, 0x9bde, 0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3, + 0x9be4, 0x9be5, 0x9be6, 0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb, + 0x9bec, 0x9bed, 0x9bee, 0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3, + 0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb, + 0x9bfc, 0x9bfd, 0x9bfe, 0x9bff, 0x9c00, 0x9c01, 0x9c02, 0x9c03, + 0x9c04, 0x9c05, 0x9c06, 0x9c07, 0x9c08, 0x9c09, 0x9c0a, 0x9c0b, + 0x9c0c, 0x9c0d, 0x9c0e, 0x9c0f, 0x9c10, 0x9c11, 0x9c12, 0x9c13, + 0x9c14, 0x9c15, 0x9c16, 0x9c17, 0x9c18, 0x9c19, 0x9c1a, 0x9c1b, + 0x9c1c, 0x9c1d, 0x9c1e, 0x9c1f, 0x9c20, 0x9c21, 0x9c22, 0x9c23, + 0x9c24, 0x9c25, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, 0x9c2b, + 0x9c2c, 0x9c2d, 0x9c2e, 0x9c2f, 0x9c30, 0x9c31, 0x9c32, 0x9c33, + 0x9c34, 0x9c35, 0x9c36, 0x9c37, 0x9c38, 0x9c39, 0x9c3a, 0x9c3b, + /* 0xf7 */ + 0x9c3c, 0x9c3d, 0x9c3e, 0x9c3f, 0x9c40, 0x9c41, 0x9c42, 0x9c43, + 0x9c44, 0x9c45, 0x9c46, 0x9c47, 0x9c48, 0x9c49, 0x9c4a, 0x9c4b, + 0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f, 0x9c50, 0x9c51, 0x9c52, 0x9c53, + 0x9c54, 0x9c55, 0x9c56, 0x9c57, 0x9c58, 0x9c59, 0x9c5a, 0x9c5b, + 0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c60, 0x9c61, 0x9c62, 0x9c63, + 0x9c64, 0x9c65, 0x9c66, 0x9c67, 0x9c68, 0x9c69, 0x9c6a, 0x9c6b, + 0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f, 0x9c70, 0x9c71, 0x9c72, 0x9c73, + 0x9c74, 0x9c75, 0x9c76, 0x9c77, 0x9c78, 0x9c79, 0x9c7a, 0x9c7b, + 0x9c7d, 0x9c7e, 0x9c80, 0x9c83, 0x9c84, 0x9c89, 0x9c8a, 0x9c8c, + 0x9c8f, 0x9c93, 0x9c96, 0x9c97, 0x9c98, 0x9c99, 0x9c9d, 0x9caa, + 0x9cac, 0x9caf, 0x9cb9, 0x9cbe, 0x9cbf, 0x9cc0, 0x9cc1, 0x9cc2, + 0x9cc8, 0x9cc9, 0x9cd1, 0x9cd2, 0x9cda, 0x9cdb, 0x9ce0, 0x9ce1, + /* 0xf8 */ + 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0x9ce9, 0x9cea, + 0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef, 0x9cf0, 0x9cf1, 0x9cf2, + 0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8, 0x9cf9, 0x9cfa, + 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9cff, 0x9d00, 0x9d01, 0x9d02, + 0x9d03, 0x9d04, 0x9d05, 0x9d06, 0x9d07, 0x9d08, 0x9d09, 0x9d0a, + 0x9d0b, 0x9d0c, 0x9d0d, 0x9d0e, 0x9d0f, 0x9d10, 0x9d11, 0x9d12, + 0x9d13, 0x9d14, 0x9d15, 0x9d16, 0x9d17, 0x9d18, 0x9d19, 0x9d1a, + 0x9d1b, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d1f, 0x9d20, 0x9d21, 0x9d22, + 0x9d23, 0x9d24, 0x9d25, 0x9d26, 0x9d27, 0x9d28, 0x9d29, 0x9d2a, + 0x9d2b, 0x9d2c, 0x9d2d, 0x9d2e, 0x9d2f, 0x9d30, 0x9d31, 0x9d32, + 0x9d33, 0x9d34, 0x9d35, 0x9d36, 0x9d37, 0x9d38, 0x9d39, 0x9d3a, + 0x9d3b, 0x9d3c, 0x9d3d, 0x9d3e, 0x9d3f, 0x9d40, 0x9d41, 0x9d42, + /* 0xf9 */ + 0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49, 0x9d4a, + 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51, 0x9d52, + 0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0x9d5a, + 0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f, 0x9d60, 0x9d61, 0x9d62, + 0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, 0x9d6a, + 0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, 0x9d72, + 0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, + 0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9d7f, 0x9d80, 0x9d81, 0x9d82, + 0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88, 0x9d89, 0x9d8a, + 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, 0x9d91, 0x9d92, + 0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9d99, 0x9d9a, + 0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0x9da1, 0x9da2, + /* 0xfa */ + 0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa, + 0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db2, + 0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba, + 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, + 0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, + 0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, + 0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9, 0x9dda, + 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, 0x9de1, 0x9de2, + 0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, 0x9dea, + 0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df2, + 0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0x9dfa, + 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9dff, 0x9e00, 0x9e01, 0x9e02, + /* 0xfb */ + 0x9e03, 0x9e04, 0x9e05, 0x9e06, 0x9e07, 0x9e08, 0x9e09, 0x9e0a, + 0x9e0b, 0x9e0c, 0x9e0d, 0x9e0e, 0x9e0f, 0x9e10, 0x9e11, 0x9e12, + 0x9e13, 0x9e14, 0x9e15, 0x9e16, 0x9e17, 0x9e18, 0x9e19, 0x9e1a, + 0x9e1b, 0x9e1c, 0x9e1d, 0x9e1e, 0x9e24, 0x9e27, 0x9e2e, 0x9e30, + 0x9e34, 0x9e3b, 0x9e3c, 0x9e40, 0x9e4d, 0x9e50, 0x9e52, 0x9e53, + 0x9e54, 0x9e56, 0x9e59, 0x9e5d, 0x9e5f, 0x9e60, 0x9e61, 0x9e62, + 0x9e65, 0x9e6e, 0x9e6f, 0x9e72, 0x9e74, 0x9e75, 0x9e76, 0x9e77, + 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e7d, 0x9e80, 0x9e81, + 0x9e83, 0x9e84, 0x9e85, 0x9e86, 0x9e89, 0x9e8a, 0x9e8c, 0x9e8d, + 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e94, 0x9e95, 0x9e96, 0x9e97, + 0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c, 0x9e9e, 0x9ea0, 0x9ea1, + 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea7, 0x9ea8, 0x9ea9, 0x9eaa, + /* 0xfc */ + 0x9eab, 0x9eac, 0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb2, + 0x9eb3, 0x9eb5, 0x9eb6, 0x9eb7, 0x9eb9, 0x9eba, 0x9ebc, 0x9ebf, + 0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, + 0x9eca, 0x9ecb, 0x9ecc, 0x9ed0, 0x9ed2, 0x9ed3, 0x9ed5, 0x9ed6, + 0x9ed7, 0x9ed9, 0x9eda, 0x9ede, 0x9ee1, 0x9ee3, 0x9ee4, 0x9ee6, + 0x9ee8, 0x9eeb, 0x9eec, 0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2, + 0x9ef3, 0x9ef4, 0x9ef5, 0x9ef6, 0x9ef7, 0x9ef8, 0x9efa, 0x9efd, + 0x9eff, 0x9f00, 0x9f01, 0x9f02, 0x9f03, 0x9f04, 0x9f05, 0x9f06, + 0x9f07, 0x9f08, 0x9f09, 0x9f0a, 0x9f0c, 0x9f0f, 0x9f11, 0x9f12, + 0x9f14, 0x9f15, 0x9f16, 0x9f18, 0x9f1a, 0x9f1b, 0x9f1c, 0x9f1d, + 0x9f1e, 0x9f1f, 0x9f21, 0x9f23, 0x9f24, 0x9f25, 0x9f26, 0x9f27, + 0x9f28, 0x9f29, 0x9f2a, 0x9f2b, 0x9f2d, 0x9f2e, 0x9f30, 0x9f31, + /* 0xfd */ + 0x9f32, 0x9f33, 0x9f34, 0x9f35, 0x9f36, 0x9f38, 0x9f3a, 0x9f3c, + 0x9f3f, 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f45, 0x9f46, 0x9f47, + 0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f, + 0x9f52, 0x9f53, 0x9f54, 0x9f55, 0x9f56, 0x9f57, 0x9f58, 0x9f59, + 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, 0x9f5f, 0x9f60, 0x9f61, + 0x9f62, 0x9f63, 0x9f64, 0x9f65, 0x9f66, 0x9f67, 0x9f68, 0x9f69, + 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, + 0x9f72, 0x9f73, 0x9f74, 0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x9f79, + 0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f81, 0x9f82, 0x9f8d, + 0x9f8e, 0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f93, 0x9f94, 0x9f95, + 0x9f96, 0x9f97, 0x9f98, 0x9f9c, 0x9f9d, 0x9f9e, 0x9fa1, 0x9fa2, + 0x9fa3, 0x9fa4, 0x9fa5, 0xf92c, 0xf979, 0xf995, 0xf9e7, 0xf9f1, + /* 0xfe */ + 0xfa0c, 0xfa0d, 0xfa0e, 0xfa0f, 0xfa11, 0xfa13, 0xfa14, 0xfa18, + 0xfa1f, 0xfa20, 0xfa21, 0xfa23, 0xfa24, 0xfa27, 0xfa28, 0xfa29, +}; + +static int +gbkext2_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0xa8 && c1 <= 0xfe)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0x80 && c2 < 0xa1)) { + unsigned int i = 96 * (c1 - 0x81) + (c2 - (c2 >= 0x80 ? 0x41 : 0x40)); + unsigned short wc = 0xfffd; + { + if (i < 12016) + wc = gbkext2_2uni_pagea8[i-3744]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + diff --git a/jni/parted/libiconv/lib/gbkext_inv.h b/jni/parted/libiconv/lib/gbkext_inv.h new file mode 100755 index 0000000..eeb76e4 --- /dev/null +++ b/jni/parted/libiconv/lib/gbkext_inv.h @@ -0,0 +1,2342 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GBK extensions + */ + +static const unsigned short gbkext_inv_2charset[14313] = { + 0xa840, 0xa841, 0xa842, 0xa95c, 0xa843, 0xa844, 0xa845, 0xa846, + 0xa847, 0xa848, 0xa959, 0xa849, 0xa84a, 0xa84b, 0xa84c, 0xa84d, + 0xa84e, 0xa84f, 0xa850, 0xa851, 0xa852, 0xa892, 0xa853, 0xa854, + 0xa855, 0xa856, 0xa857, 0xa858, 0xa859, 0xa85a, 0xa85b, 0xa85c, + 0xa85d, 0xa85e, 0xa85f, 0xa860, 0xa861, 0xa862, 0xa863, 0xa864, + 0xa865, 0xa866, 0xa867, 0xa868, 0xa869, 0xa86a, 0xa86b, 0xa86c, + 0xa86d, 0xa86e, 0xa86f, 0xa870, 0xa871, 0xa872, 0xa873, 0xa874, + 0xa875, 0xa876, 0xa877, 0xa878, 0xa879, 0xa87a, 0xa87b, 0xa87c, + 0xa87d, 0xa87e, 0xa880, 0xa881, 0xa882, 0xa883, 0xa884, 0xa885, + 0xa886, 0xa887, 0xa888, 0xa889, 0xa88a, 0xa88b, 0xa88c, 0xa88d, + 0xa88e, 0xa88f, 0xa890, 0xa891, 0xa965, 0xa996, 0xa893, 0xa894, + 0xa895, 0xa940, 0xa941, 0xa942, 0xa943, 0xa944, 0xa945, 0xa946, + 0xa947, 0xa948, 0xa961, 0xa962, 0xa966, 0xa967, 0xa960, 0xa963, + 0xa964, 0xa95a, 0xa949, 0xa94a, 0xa94b, 0xa94c, 0xa94d, 0xa94e, + 0xa94f, 0xa950, 0xa951, 0xa952, 0xa953, 0xa954, 0x8140, 0x8141, + 0x8142, 0x8143, 0x8144, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149, + 0x814a, 0x814b, 0x814c, 0x814d, 0x814e, 0x814f, 0x8150, 0x8151, + 0x8152, 0x8153, 0x8154, 0x8155, 0x8156, 0x8157, 0x8158, 0x8159, + 0x815a, 0x815b, 0x815c, 0x815d, 0x815e, 0x815f, 0x8160, 0x8161, + 0x8162, 0x8163, 0x8164, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, + 0x816a, 0x816b, 0x816c, 0x816d, 0x816e, 0x816f, 0x8170, 0x8171, + 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, 0x8179, + 0x817a, 0x817b, 0x817c, 0x817d, 0x817e, 0x8180, 0x8181, 0x8182, + 0x8183, 0x8184, 0x8185, 0x8186, 0x8187, 0x8188, 0x8189, 0x818a, + 0x818b, 0x818c, 0x818d, 0x818e, 0x818f, 0x8190, 0x8191, 0x8192, + 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8198, 0x8199, 0x819a, + 0x819b, 0x819c, 0x819d, 0x819e, 0x819f, 0x81a0, 0x81a1, 0x81a2, + 0x81a3, 0x81a4, 0x81a5, 0x81a6, 0x81a7, 0x81a8, 0x81a9, 0x81aa, + 0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, 0x81b2, + 0x81b3, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0x81ba, + 0x81bb, 0x81bc, 0x81bd, 0x81be, 0x81bf, 0x81c0, 0x81c1, 0x81c2, + 0x81c3, 0x81c4, 0x81c5, 0x81c6, 0x81c7, 0x81c8, 0x81c9, 0x81ca, + 0x81cb, 0x81cc, 0x81cd, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d2, + 0x81d3, 0x81d4, 0x81d5, 0x81d6, 0x81d7, 0x81d8, 0x81d9, 0x81da, + 0x81db, 0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, 0x81e1, 0x81e2, + 0x81e3, 0x81e4, 0x81e5, 0x81e6, 0x81e7, 0x81e8, 0x81e9, 0x81ea, + 0x81eb, 0x81ec, 0x81ed, 0x81ee, 0x81ef, 0x81f0, 0x81f1, 0x81f2, + 0x81f3, 0x81f4, 0x81f5, 0x81f6, 0x81f7, 0x81f8, 0x81f9, 0x81fa, + 0x81fb, 0x81fc, 0x81fd, 0x81fe, 0x8240, 0x8241, 0x8242, 0x8243, + 0x8244, 0x8245, 0x8246, 0x8247, 0x8248, 0x8249, 0x824a, 0x824b, + 0x824c, 0x824d, 0x824e, 0x824f, 0x8250, 0x8251, 0x8252, 0x8253, + 0x8254, 0x8255, 0x8256, 0x8257, 0x8258, 0x8259, 0x825a, 0x825b, + 0x825c, 0x825d, 0x825e, 0x825f, 0x8260, 0x8261, 0x8262, 0x8263, + 0x8264, 0x8265, 0x8266, 0x8267, 0x8268, 0x8269, 0x826a, 0x826b, + 0x826c, 0x826d, 0x826e, 0x826f, 0x8270, 0x8271, 0x8272, 0x8273, + 0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827a, 0x827b, + 0x827c, 0x827d, 0x827e, 0x8280, 0x8281, 0x8282, 0x8283, 0x8284, + 0x8285, 0x8286, 0x8287, 0x8288, 0x8289, 0x828a, 0x828b, 0x828c, + 0x828d, 0x828e, 0x828f, 0x8290, 0x8291, 0x8292, 0x8293, 0x8294, + 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, 0x829a, 0x829b, 0x829c, + 0x829d, 0x829e, 0x829f, 0x82a0, 0x82a1, 0x82a2, 0x82a3, 0x82a4, + 0x82a5, 0x82a6, 0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ab, 0x82ac, + 0x82ad, 0x82ae, 0x82af, 0x82b0, 0x82b1, 0x82b2, 0x82b3, 0x82b4, + 0x82b5, 0x82b6, 0x82b7, 0x82b8, 0x82b9, 0x82ba, 0x82bb, 0x82bc, + 0x82bd, 0x82be, 0x82bf, 0x82c0, 0x82c1, 0x82c2, 0x82c3, 0x82c4, + 0x82c5, 0x82c6, 0x82c7, 0x82c8, 0x82c9, 0x82ca, 0x82cb, 0x82cc, + 0x82cd, 0x82ce, 0x82cf, 0x82d0, 0x82d1, 0x82d2, 0x82d3, 0x82d4, + 0x82d5, 0x82d6, 0x82d7, 0x82d8, 0x82d9, 0x82da, 0x82db, 0x82dc, + 0x82dd, 0x82de, 0x82df, 0x82e0, 0x82e1, 0x82e2, 0x82e3, 0x82e4, + 0x82e5, 0x82e6, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82eb, 0x82ec, + 0x82ed, 0x82ee, 0x82ef, 0x82f0, 0x82f1, 0x82f2, 0x82f3, 0x82f4, + 0x82f5, 0x82f6, 0x82f7, 0x82f8, 0x82f9, 0x82fa, 0x82fb, 0x82fc, + 0x82fd, 0x82fe, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, + 0x8346, 0x8347, 0x8348, 0x8349, 0x834a, 0x834b, 0x834c, 0x834d, + 0x834e, 0x834f, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, + 0x8356, 0x8357, 0x8358, 0x8359, 0x835a, 0x835b, 0x835c, 0x835d, + 0x835e, 0x835f, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, + 0x8366, 0x8367, 0x8368, 0x8369, 0x836a, 0x836b, 0x836c, 0x836d, + 0x836e, 0x836f, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, + 0x8376, 0x8377, 0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d, + 0x837e, 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, + 0x8387, 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, 0x838d, 0x838e, + 0x838f, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0x8396, + 0x8397, 0x8398, 0x8399, 0x839a, 0x839b, 0x839c, 0x839d, 0x839e, + 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, 0x83a4, 0x83a5, 0x83a6, + 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, 0x83ac, 0x83ad, 0x83ae, + 0x83af, 0x83b0, 0x83b1, 0x83b2, 0x83b3, 0x83b4, 0x83b5, 0x83b6, + 0x83b7, 0x83b8, 0x83b9, 0x83ba, 0x83bb, 0x83bc, 0x83bd, 0x83be, + 0x83bf, 0x83c0, 0x83c1, 0x83c2, 0x83c3, 0x83c4, 0x83c5, 0x83c6, + 0x83c7, 0x83c8, 0x83c9, 0x83ca, 0x83cb, 0x83cc, 0x83cd, 0x83ce, + 0x83cf, 0x83d0, 0x83d1, 0x83d2, 0x83d3, 0x83d4, 0x83d5, 0x83d6, + 0x83d7, 0x83d8, 0x83d9, 0x83da, 0x83db, 0x83dc, 0x83dd, 0x83de, + 0x83df, 0x83e0, 0x83e1, 0x83e2, 0x83e3, 0x83e4, 0x83e5, 0x83e6, + 0x83e7, 0x83e8, 0x83e9, 0x83ea, 0x83eb, 0x83ec, 0x83ed, 0x83ee, + 0x83ef, 0x83f0, 0x83f1, 0x83f2, 0x83f3, 0x83f4, 0x83f5, 0x83f6, + 0x83f7, 0x83f8, 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe, + 0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8446, 0x8447, + 0x8448, 0x8449, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f, + 0x8450, 0x8451, 0x8452, 0x8453, 0x8454, 0x8455, 0x8456, 0x8457, + 0x8458, 0x8459, 0x845a, 0x845b, 0x845c, 0x845d, 0x845e, 0x845f, + 0x8460, 0x8461, 0x8462, 0x8463, 0x8464, 0x8465, 0x8466, 0x8467, + 0x8468, 0x8469, 0x846a, 0x846b, 0x846c, 0x846d, 0x846e, 0x846f, + 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, 0x8477, + 0x8478, 0x8479, 0x847a, 0x847b, 0x847c, 0x847d, 0x847e, 0x8480, + 0x8481, 0x8482, 0x8483, 0x8484, 0x8485, 0x8486, 0x8487, 0x8488, + 0x8489, 0x848a, 0x848b, 0x848c, 0x848d, 0x848e, 0x848f, 0x8490, + 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, 0x8496, 0x8497, 0x8498, + 0x8499, 0x849a, 0x849b, 0x849c, 0x849d, 0x849e, 0x849f, 0x84a0, + 0x84a1, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, 0x84a8, + 0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84af, 0x84b0, + 0x84b1, 0x84b2, 0x84b3, 0x84b4, 0x84b5, 0x84b6, 0x84b7, 0x84b8, + 0x84b9, 0x84ba, 0x84bb, 0x84bc, 0x84bd, 0x84be, 0x84bf, 0x84c0, + 0x84c1, 0x84c2, 0x84c3, 0x84c4, 0x84c5, 0x84c6, 0x84c7, 0x84c8, + 0x84c9, 0x84ca, 0x84cb, 0x84cc, 0x84cd, 0x84ce, 0x84cf, 0x84d0, + 0x84d1, 0x84d2, 0x84d3, 0x84d4, 0x84d5, 0x84d6, 0x84d7, 0x84d8, + 0x84d9, 0x84da, 0x84db, 0x84dc, 0x84dd, 0x84de, 0x84df, 0x84e0, + 0x84e1, 0x84e2, 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7, 0x84e8, + 0x84e9, 0x84ea, 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef, 0x84f0, + 0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, 0x84f8, + 0x84f9, 0x84fa, 0x84fb, 0x84fc, 0x84fd, 0x84fe, 0x8540, 0x8541, + 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, 0x8548, 0x8549, + 0x854a, 0x854b, 0x854c, 0x854d, 0x854e, 0x854f, 0x8550, 0x8551, + 0x8552, 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, + 0x855a, 0x855b, 0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561, + 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567, 0x8568, 0x8569, + 0x856a, 0x856b, 0x856c, 0x856d, 0x856e, 0x856f, 0x8570, 0x8571, + 0x8572, 0x8573, 0x8574, 0x8575, 0x8576, 0x8577, 0x8578, 0x8579, + 0x857a, 0x857b, 0x857c, 0x857d, 0x857e, 0x8580, 0x8581, 0x8582, + 0x8583, 0x8584, 0x8585, 0x8586, 0x8587, 0x8588, 0x8589, 0x858a, + 0x858b, 0x858c, 0x858d, 0x858e, 0x858f, 0x8590, 0x8591, 0x8592, + 0x8593, 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0x859a, + 0x859b, 0x859c, 0x859d, 0x859e, 0x859f, 0x85a0, 0x85a1, 0x85a2, + 0x85a3, 0x85a4, 0x85a5, 0x85a6, 0x85a7, 0x85a8, 0x85a9, 0x85aa, + 0x85ab, 0x85ac, 0x85ad, 0x85ae, 0x85af, 0x85b0, 0x85b1, 0x85b2, + 0x85b3, 0x85b4, 0x85b5, 0x85b6, 0x85b7, 0x85b8, 0x85b9, 0x85ba, + 0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c0, 0x85c1, 0x85c2, + 0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, 0x85c8, 0x85c9, 0x85ca, + 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85cf, 0x85d0, 0x85d1, 0x85d2, + 0x85d3, 0x85d4, 0x85d5, 0x85d6, 0x85d7, 0x85d8, 0x85d9, 0x85da, + 0x85db, 0x85dc, 0x85dd, 0x85de, 0x85df, 0x85e0, 0x85e1, 0x85e2, + 0x85e3, 0x85e4, 0x85e5, 0x85e6, 0x85e7, 0x85e8, 0x85e9, 0x85ea, + 0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef, 0x85f0, 0x85f1, 0x85f2, + 0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7, 0x85f8, 0x85f9, 0x85fa, + 0x85fb, 0x85fc, 0x85fd, 0x85fe, 0x8640, 0x8641, 0x8642, 0x8643, + 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649, 0x864a, 0x864b, + 0x864c, 0x864d, 0x864e, 0x864f, 0x8650, 0x8651, 0x8652, 0x8653, + 0x8654, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659, 0x865a, 0x865b, + 0x865c, 0x865d, 0x865e, 0x865f, 0x8660, 0x8661, 0x8662, 0x8663, + 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866a, 0x866b, + 0x866c, 0x866d, 0x866e, 0x866f, 0x8670, 0x8671, 0x8672, 0x8673, + 0x8674, 0x8675, 0x8676, 0x8677, 0x8678, 0x8679, 0x867a, 0x867b, + 0x867c, 0x867d, 0x867e, 0x8680, 0x8681, 0x8682, 0x8683, 0x8684, + 0x8685, 0x8686, 0x8687, 0x8688, 0x8689, 0x868a, 0x868b, 0x868c, + 0x868d, 0x868e, 0x868f, 0x8690, 0x8691, 0x8692, 0x8693, 0x8694, + 0x8695, 0x8696, 0x8697, 0x8698, 0x8699, 0x869a, 0x869b, 0x869c, + 0x869d, 0x869e, 0x869f, 0x86a0, 0x86a1, 0x86a2, 0x86a3, 0x86a4, + 0x86a5, 0x86a6, 0x86a7, 0x86a8, 0x86a9, 0x86aa, 0x86ab, 0x86ac, + 0x86ad, 0x86ae, 0x86af, 0x86b0, 0x86b1, 0x86b2, 0x86b3, 0x86b4, + 0x86b5, 0x86b6, 0x86b7, 0x86b8, 0x86b9, 0x86ba, 0x86bb, 0x86bc, + 0x86bd, 0x86be, 0x86bf, 0x86c0, 0x86c1, 0x86c2, 0x86c3, 0x86c4, + 0x86c5, 0x86c6, 0x86c7, 0x86c8, 0x86c9, 0x86ca, 0x86cb, 0x86cc, + 0x86cd, 0x86ce, 0x86cf, 0x86d0, 0x86d1, 0x86d2, 0x86d3, 0x86d4, + 0x86d5, 0x86d6, 0x86d7, 0x86d8, 0x86d9, 0x86da, 0x86db, 0x86dc, + 0x86dd, 0x86de, 0x86df, 0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e4, + 0x86e5, 0x86e6, 0x86e7, 0x86e8, 0x86e9, 0x86ea, 0x86eb, 0x86ec, + 0x86ed, 0x86ee, 0x86ef, 0x86f0, 0x86f1, 0x86f2, 0x86f3, 0x86f4, + 0x86f5, 0x86f6, 0x86f7, 0x86f8, 0x86f9, 0x86fa, 0x86fb, 0x86fc, + 0x86fd, 0x86fe, 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, + 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, 0x874d, + 0x874e, 0x874f, 0x8750, 0x8751, 0x8752, 0x8753, 0x8754, 0x8755, + 0x8756, 0x8757, 0x8758, 0x8759, 0x875a, 0x875b, 0x875c, 0x875d, + 0x875e, 0x875f, 0x8760, 0x8761, 0x8762, 0x8763, 0x8764, 0x8765, + 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, 0x876d, + 0x876e, 0x876f, 0x8770, 0x8771, 0x8772, 0x8773, 0x8774, 0x8775, + 0x8776, 0x8777, 0x8778, 0x8779, 0x877a, 0x877b, 0x877c, 0x877d, + 0x877e, 0x8780, 0x8781, 0x8782, 0x8783, 0x8784, 0x8785, 0x8786, + 0x8787, 0x8788, 0x8789, 0x878a, 0x878b, 0x878c, 0x878d, 0x878e, + 0x878f, 0x8790, 0x8791, 0x8792, 0x8793, 0x8794, 0x8795, 0x8796, + 0x8797, 0x8798, 0x8799, 0x879a, 0x879b, 0x879c, 0x879d, 0x879e, + 0x879f, 0x87a0, 0x87a1, 0x87a2, 0x87a3, 0x87a4, 0x87a5, 0x87a6, + 0x87a7, 0x87a8, 0x87a9, 0x87aa, 0x87ab, 0x87ac, 0x87ad, 0x87ae, + 0x87af, 0x87b0, 0x87b1, 0x87b2, 0x87b3, 0x87b4, 0x87b5, 0x87b6, + 0x87b7, 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0x87bc, 0x87bd, 0x87be, + 0x87bf, 0x87c0, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c6, + 0x87c7, 0x87c8, 0x87c9, 0x87ca, 0x87cb, 0x87cc, 0x87cd, 0x87ce, + 0x87cf, 0x87d0, 0x87d1, 0x87d2, 0x87d3, 0x87d4, 0x87d5, 0x87d6, + 0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87db, 0x87dc, 0x87dd, 0x87de, + 0x87df, 0x87e0, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e5, 0x87e6, + 0x87e7, 0x87e8, 0x87e9, 0x87ea, 0x87eb, 0x87ec, 0x87ed, 0x87ee, + 0x87ef, 0x87f0, 0x87f1, 0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6, + 0x87f7, 0x87f8, 0x87f9, 0x87fa, 0x87fb, 0x87fc, 0x87fd, 0x87fe, + 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, 0x8846, 0x8847, + 0x8848, 0x8849, 0x884a, 0x884b, 0x884c, 0x884d, 0x884e, 0x884f, + 0x8850, 0x8851, 0x8852, 0x8853, 0x8854, 0x8855, 0x8856, 0x8857, + 0x8858, 0x8859, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e, 0x885f, + 0x8860, 0x8861, 0x8862, 0x8863, 0x8864, 0x8865, 0x8866, 0x8867, + 0x8868, 0x8869, 0x886a, 0x886b, 0x886c, 0x886d, 0x886e, 0x886f, + 0x8870, 0x8871, 0x8872, 0x8873, 0x8874, 0x8875, 0x8876, 0x8877, + 0x8878, 0x8879, 0x887a, 0x887b, 0x887c, 0x887d, 0x887e, 0x8880, + 0x8881, 0x8882, 0x8883, 0x8884, 0x8885, 0x8886, 0x8887, 0x8888, + 0x8889, 0x888a, 0x888b, 0x888c, 0x888d, 0x888e, 0x888f, 0x8890, + 0x8891, 0x8892, 0x8893, 0x8894, 0x8895, 0x8896, 0x8897, 0x8898, + 0x8899, 0x889a, 0x889b, 0x889c, 0x889d, 0x889e, 0x889f, 0x88a0, + 0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, 0x88a7, 0x88a8, + 0x88a9, 0x88aa, 0x88ab, 0x88ac, 0x88ad, 0x88ae, 0x88af, 0x88b0, + 0x88b1, 0x88b2, 0x88b3, 0x88b4, 0x88b5, 0x88b6, 0x88b7, 0x88b8, + 0x88b9, 0x88ba, 0x88bb, 0x88bc, 0x88bd, 0x88be, 0x88bf, 0x88c0, + 0x88c1, 0x88c2, 0x88c3, 0x88c4, 0x88c5, 0x88c6, 0x88c7, 0x88c8, + 0x88c9, 0x88ca, 0x88cb, 0x88cc, 0x88cd, 0x88ce, 0x88cf, 0x88d0, + 0x88d1, 0x88d2, 0x88d3, 0x88d4, 0x88d5, 0x88d6, 0x88d7, 0x88d8, + 0x88d9, 0x88da, 0x88db, 0x88dc, 0x88dd, 0x88de, 0x88df, 0x88e0, + 0x88e1, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0x88e6, 0x88e7, 0x88e8, + 0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f0, + 0x88f1, 0x88f2, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0x88f7, 0x88f8, + 0x88f9, 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0x8940, 0x8941, + 0x8942, 0x8943, 0x8944, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, + 0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951, + 0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, + 0x895a, 0x895b, 0x895c, 0x895d, 0x895e, 0x895f, 0x8960, 0x8961, + 0x8962, 0x8963, 0x8964, 0x8965, 0x8966, 0x8967, 0x8968, 0x8969, + 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, 0x8970, 0x8971, + 0x8972, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, + 0x897a, 0x897b, 0x897c, 0x897d, 0x897e, 0x8980, 0x8981, 0x8982, + 0x8983, 0x8984, 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0x898a, + 0x898b, 0x898c, 0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8992, + 0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899a, + 0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1, 0x89a2, + 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9, 0x89aa, + 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1, 0x89b2, + 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9, 0x89ba, + 0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf, 0x89c0, 0x89c1, 0x89c2, + 0x89c3, 0x89c4, 0x89c5, 0x89c6, 0x89c7, 0x89c8, 0x89c9, 0x89ca, + 0x89cb, 0x89cc, 0x89cd, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x89d2, + 0x89d3, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8, 0x89d9, 0x89da, + 0x89db, 0x89dc, 0x89dd, 0x89de, 0x89df, 0x89e0, 0x89e1, 0x89e2, + 0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7, 0x89e8, 0x89e9, 0x89ea, + 0x89eb, 0x89ec, 0x89ed, 0x89ee, 0x89ef, 0x89f0, 0x89f1, 0x89f2, + 0x89f3, 0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, 0x89fa, + 0x89fb, 0x89fc, 0x89fd, 0x89fe, 0x8a40, 0x8a41, 0x8a42, 0x8a43, + 0x8a44, 0x8a45, 0x8a46, 0x8a47, 0x8a48, 0x8a49, 0x8a4a, 0x8a4b, + 0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a52, 0x8a53, + 0x8a54, 0x8a55, 0x8a56, 0x8a57, 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, + 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, 0x8a60, 0x8a61, 0x8a62, 0x8a63, + 0x8a64, 0x8a65, 0x8a66, 0x8a67, 0x8a68, 0x8a69, 0x8a6a, 0x8a6b, + 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f, 0x8a70, 0x8a71, 0x8a72, 0x8a73, + 0x8a74, 0x8a75, 0x8a76, 0x8a77, 0x8a78, 0x8a79, 0x8a7a, 0x8a7b, + 0x8a7c, 0x8a7d, 0x8a7e, 0x8a80, 0x8a81, 0x8a82, 0x8a83, 0x8a84, + 0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a89, 0x8a8a, 0x8a8b, 0x8a8c, + 0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a92, 0x8a93, 0x8a94, + 0x8a95, 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, 0x8a9c, + 0x8a9d, 0x8a9e, 0x8a9f, 0x8aa0, 0x8aa1, 0x8aa2, 0x8aa3, 0x8aa4, + 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab, 0x8aac, + 0x8aad, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, + 0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9, 0x8aba, 0x8abb, 0x8abc, + 0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, 0x8ac3, 0x8ac4, + 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, 0x8acb, 0x8acc, + 0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad2, 0x8ad3, 0x8ad4, + 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, 0x8adb, 0x8adc, + 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3, 0x8ae4, + 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb, 0x8aec, + 0x8aed, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, + 0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0x8afa, 0x8afb, 0x8afc, + 0x8afd, 0x8afe, 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0x8b45, + 0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d, + 0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55, + 0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, + 0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, + 0x8b66, 0x8b67, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, 0x8b6d, + 0x8b6e, 0x8b6f, 0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75, + 0x8b76, 0x8b77, 0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, + 0x8b7e, 0x8b80, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, 0x8b86, + 0x8b87, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, 0x8b8e, + 0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, 0x8b96, + 0x8b97, 0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, 0x8b9e, + 0x8b9f, 0x8ba0, 0x8ba1, 0x8ba2, 0x8ba3, 0x8ba4, 0x8ba5, 0x8ba6, + 0x8ba7, 0x8ba8, 0x8ba9, 0x8baa, 0x8bab, 0x8bac, 0x8bad, 0x8bae, + 0x8baf, 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, 0x8bb6, + 0x8bb7, 0x8bb8, 0x8bb9, 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, 0x8bbe, + 0x8bbf, 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, 0x8bc6, + 0x8bc7, 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb, 0x8bcc, 0x8bcd, 0x8bce, + 0x8bcf, 0x8bd0, 0x8bd1, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, + 0x8bd7, 0x8bd8, 0x8bd9, 0x8bda, 0x8bdb, 0x8bdc, 0x8bdd, 0x8bde, + 0x8bdf, 0x8be0, 0x8be1, 0x8be2, 0x8be3, 0x8be4, 0x8be5, 0x8be6, + 0x8be7, 0x8be8, 0x8be9, 0x8bea, 0x8beb, 0x8bec, 0x8bed, 0x8bee, + 0x8bef, 0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, + 0x8bf7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe, + 0x8c40, 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47, + 0x8c48, 0x8c49, 0x8c4a, 0x8c4b, 0x8c4c, 0x8c4d, 0x8c4e, 0x8c4f, + 0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54, 0x8c55, 0x8c56, 0x8c57, + 0x8c58, 0x8c59, 0x8c5a, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e, 0x8c5f, + 0x8c60, 0x8c61, 0x8c62, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67, + 0x8c68, 0x8c69, 0x8c6a, 0x8c6b, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f, + 0x8c70, 0x8c71, 0x8c72, 0x8c73, 0x8c74, 0x8c75, 0x8c76, 0x8c77, + 0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e, 0x8c80, + 0x8c81, 0x8c82, 0x8c83, 0x8c84, 0x8c85, 0x8c86, 0x8c87, 0x8c88, + 0x8c89, 0x8c8a, 0x8c8b, 0x8c8c, 0x8c8d, 0x8c8e, 0x8c8f, 0x8c90, + 0x8c91, 0x8c92, 0x8c93, 0x8c94, 0x8c95, 0x8c96, 0x8c97, 0x8c98, + 0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, 0x8c9d, 0x8c9e, 0x8c9f, 0x8ca0, + 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7, 0x8ca8, + 0x8ca9, 0x8caa, 0x8cab, 0x8cac, 0x8cad, 0x8cae, 0x8caf, 0x8cb0, + 0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0x8cb8, + 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd, 0x8cbe, 0x8cbf, 0x8cc0, + 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5, 0x8cc6, 0x8cc7, 0x8cc8, + 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0, + 0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, + 0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf, 0x8ce0, + 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0x8ce7, 0x8ce8, + 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x8ced, 0x8cee, 0x8cef, 0x8cf0, + 0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, 0x8cf5, 0x8cf6, 0x8cf7, 0x8cf8, + 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, 0x8cfe, 0x8d40, 0x8d41, + 0x8d42, 0x8d43, 0x8d44, 0x8d45, 0x8d46, 0x8d47, 0x8d48, 0x8d49, + 0x8d4a, 0x8d4b, 0x8d4c, 0x8d4d, 0x8d4e, 0x8d4f, 0x8d50, 0x8d51, + 0x8d52, 0x8d53, 0x8d54, 0x8d55, 0x8d56, 0x8d57, 0x8d58, 0x8d59, + 0x8d5a, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d5f, 0x8d60, 0x8d61, + 0x8d62, 0x8d63, 0x8d64, 0x8d65, 0x8d66, 0x8d67, 0x8d68, 0x8d69, + 0x8d6a, 0x8d6b, 0x8d6c, 0x8d6d, 0x8d6e, 0x8d6f, 0x8d70, 0x8d71, + 0x8d72, 0x8d73, 0x8d74, 0x8d75, 0x8d76, 0x8d77, 0x8d78, 0x8d79, + 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8d80, 0x8d81, 0x8d82, + 0x8d83, 0x8d84, 0x8d85, 0x8d86, 0x8d87, 0x8d88, 0x8d89, 0x8d8a, + 0x8d8b, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f, 0x8d90, 0x8d91, 0x8d92, + 0x8d93, 0x8d94, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99, 0x8d9a, + 0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8d9f, 0x8da0, 0x8da1, 0x8da2, + 0x8da3, 0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, + 0x8dab, 0x8dac, 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db1, 0x8db2, + 0x8db3, 0x8db4, 0x8db5, 0x8db6, 0x8db7, 0x8db8, 0x8db9, 0x8dba, + 0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0x8dbf, 0x8dc0, 0x8dc1, 0x8dc2, + 0x8dc3, 0x8dc4, 0x8dc5, 0x8dc6, 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca, + 0x8dcb, 0x8dcc, 0x8dcd, 0x8dce, 0x8dcf, 0x8dd0, 0x8dd1, 0x8dd2, + 0x8dd3, 0x8dd4, 0x8dd5, 0x8dd6, 0x8dd7, 0x8dd8, 0x8dd9, 0x8dda, + 0x8ddb, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf, 0x8de0, 0x8de1, 0x8de2, + 0x8de3, 0x8de4, 0x8de5, 0x8de6, 0x8de7, 0x8de8, 0x8de9, 0x8dea, + 0x8deb, 0x8dec, 0x8ded, 0x8dee, 0x8def, 0x8df0, 0x8df1, 0x8df2, + 0x8df3, 0x8df4, 0x8df5, 0x8df6, 0x8df7, 0x8df8, 0x8df9, 0x8dfa, + 0x8dfb, 0x8dfc, 0x8dfd, 0x8dfe, 0x8e40, 0x8e41, 0x8e42, 0x8e43, + 0x8e44, 0x8e45, 0x8e46, 0x8e47, 0x8e48, 0x8e49, 0x8e4a, 0x8e4b, + 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50, 0x8e51, 0x8e52, 0x8e53, + 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e59, 0x8e5a, 0x8e5b, + 0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0x8e63, + 0x8e64, 0x8e65, 0x8e66, 0x8e67, 0x8e68, 0x8e69, 0x8e6a, 0x8e6b, + 0x8e6c, 0x8e6d, 0x8e6e, 0x8e6f, 0x8e70, 0x8e71, 0x8e72, 0x8e73, + 0x8e74, 0x8e75, 0x8e76, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, + 0x8e7c, 0x8e7d, 0x8e7e, 0x8e80, 0x8e81, 0x8e82, 0x8e83, 0x8e84, + 0x8e85, 0x8e86, 0x8e87, 0x8e88, 0x8e89, 0x8e8a, 0x8e8b, 0x8e8c, + 0x8e8d, 0x8e8e, 0x8e8f, 0x8e90, 0x8e91, 0x8e92, 0x8e93, 0x8e94, + 0x8e95, 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0x8e9c, + 0x8e9d, 0x8e9e, 0x8e9f, 0x8ea0, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, + 0x8ea5, 0x8ea6, 0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8eab, 0x8eac, + 0x8ead, 0x8eae, 0x8eaf, 0x8eb0, 0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4, + 0x8eb5, 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0x8ebc, + 0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3, 0x8ec4, + 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb, 0x8ecc, + 0x8ecd, 0x8ece, 0x8ecf, 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4, + 0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc, + 0x8edd, 0x8ede, 0x8edf, 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4, + 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec, + 0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4, + 0x8ef5, 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc, + 0x8efd, 0x8efe, 0x8f40, 0x8f41, 0x8f42, 0x8f43, 0x8f44, 0x8f45, + 0x8f46, 0x8f47, 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c, 0x8f4d, + 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55, + 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c, 0x8f5d, + 0x8f5e, 0x8f5f, 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64, 0x8f65, + 0x8f66, 0x8f67, 0x8f68, 0x8f69, 0x8f6a, 0x8f6b, 0x8f6c, 0x8f6d, + 0x8f6e, 0x8f6f, 0x8f70, 0x8f71, 0x8f72, 0x8f73, 0x8f74, 0x8f75, + 0x8f76, 0x8f77, 0x8f78, 0x8f79, 0x8f7a, 0x8f7b, 0x8f7c, 0x8f7d, + 0x8f7e, 0x8f80, 0x8f81, 0x8f82, 0x8f83, 0x8f84, 0x8f85, 0x8f86, + 0x8f87, 0x8f88, 0x8f89, 0x8f8a, 0x8f8b, 0x8f8c, 0x8f8d, 0x8f8e, + 0x8f8f, 0x8f90, 0x8f91, 0x8f92, 0x8f93, 0x8f94, 0x8f95, 0x8f96, + 0x8f97, 0x8f98, 0x8f99, 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9d, 0x8f9e, + 0x8f9f, 0x8fa0, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4, 0x8fa5, 0x8fa6, + 0x8fa7, 0x8fa8, 0x8fa9, 0x8faa, 0x8fab, 0x8fac, 0x8fad, 0x8fae, + 0x8faf, 0x8fb0, 0x8fb1, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb6, + 0x8fb7, 0x8fb8, 0x8fb9, 0x8fba, 0x8fbb, 0x8fbc, 0x8fbd, 0x8fbe, + 0x8fbf, 0x8fc0, 0x8fc1, 0x8fc2, 0x8fc3, 0x8fc4, 0x8fc5, 0x8fc6, + 0x8fc7, 0x8fc8, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fce, + 0x8fcf, 0x8fd0, 0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, 0x8fd6, + 0x8fd7, 0x8fd8, 0x8fd9, 0x8fda, 0x8fdb, 0x8fdc, 0x8fdd, 0x8fde, + 0x8fdf, 0x8fe0, 0x8fe1, 0x8fe2, 0x8fe3, 0x8fe4, 0x8fe5, 0x8fe6, + 0x8fe7, 0x8fe8, 0x8fe9, 0x8fea, 0x8feb, 0x8fec, 0x8fed, 0x8fee, + 0x8fef, 0x8ff0, 0x8ff1, 0x8ff2, 0x8ff3, 0x8ff4, 0x8ff5, 0x8ff6, + 0x8ff7, 0x8ff8, 0x8ff9, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffd, 0x8ffe, + 0x9040, 0x9041, 0x9042, 0x9043, 0x9044, 0x9045, 0x9046, 0x9047, + 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904d, 0x904e, 0x904f, + 0x9050, 0x9051, 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0x9057, + 0x9058, 0x9059, 0x905a, 0x905b, 0x905c, 0x905d, 0x905e, 0x905f, + 0x9060, 0x9061, 0x9062, 0x9063, 0x9064, 0x9065, 0x9066, 0x9067, + 0x9068, 0x9069, 0x906a, 0x906b, 0x906c, 0x906d, 0x906e, 0x906f, + 0x9070, 0x9071, 0x9072, 0x9073, 0x9074, 0x9075, 0x9076, 0x9077, + 0x9078, 0x9079, 0x907a, 0x907b, 0x907c, 0x907d, 0x907e, 0x9080, + 0x9081, 0x9082, 0x9083, 0x9084, 0x9085, 0x9086, 0x9087, 0x9088, + 0x9089, 0x908a, 0x908b, 0x908c, 0x908d, 0x908e, 0x908f, 0x9090, + 0x9091, 0x9092, 0x9093, 0x9094, 0x9095, 0x9096, 0x9097, 0x9098, + 0x9099, 0x909a, 0x909b, 0x909c, 0x909d, 0x909e, 0x909f, 0x90a0, + 0x90a1, 0x90a2, 0x90a3, 0x90a4, 0x90a5, 0x90a6, 0x90a7, 0x90a8, + 0x90a9, 0x90aa, 0x90ab, 0x90ac, 0x90ad, 0x90ae, 0x90af, 0x90b0, + 0x90b1, 0x90b2, 0x90b3, 0x90b4, 0x90b5, 0x90b6, 0x90b7, 0x90b8, + 0x90b9, 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90be, 0x90bf, 0x90c0, + 0x90c1, 0x90c2, 0x90c3, 0x90c4, 0x90c5, 0x90c6, 0x90c7, 0x90c8, + 0x90c9, 0x90ca, 0x90cb, 0x90cc, 0x90cd, 0x90ce, 0x90cf, 0x90d0, + 0x90d1, 0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x90d6, 0x90d7, 0x90d8, + 0x90d9, 0x90da, 0x90db, 0x90dc, 0x90dd, 0x90de, 0x90df, 0x90e0, + 0x90e1, 0x90e2, 0x90e3, 0x90e4, 0x90e5, 0x90e6, 0x90e7, 0x90e8, + 0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef, 0x90f0, + 0x90f1, 0x90f2, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7, 0x90f8, + 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x9140, 0x9141, + 0x9142, 0x9143, 0x9144, 0x9145, 0x9146, 0x9147, 0x9148, 0x9149, + 0x914a, 0x914b, 0x914c, 0x914d, 0x914e, 0x914f, 0x9150, 0x9151, + 0x9152, 0x9153, 0x9154, 0x9155, 0x9156, 0x9157, 0x9158, 0x9159, + 0x915a, 0x915b, 0x915c, 0x915d, 0x915e, 0x915f, 0x9160, 0x9161, + 0x9162, 0x9163, 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, + 0x916a, 0x916b, 0x916c, 0x916d, 0x916e, 0x916f, 0x9170, 0x9171, + 0x9172, 0x9173, 0x9174, 0x9175, 0x9176, 0x9177, 0x9178, 0x9179, + 0x917a, 0x917b, 0x917c, 0x917d, 0x917e, 0x9180, 0x9181, 0x9182, + 0x9183, 0x9184, 0x9185, 0x9186, 0x9187, 0x9188, 0x9189, 0x918a, + 0x918b, 0x918c, 0x918d, 0x918e, 0x918f, 0x9190, 0x9191, 0x9192, + 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919a, + 0x919b, 0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0x91a2, + 0x91a3, 0x91a4, 0x91a5, 0x91a6, 0x91a7, 0x91a8, 0x91a9, 0x91aa, + 0x91ab, 0x91ac, 0x91ad, 0x91ae, 0x91af, 0x91b0, 0x91b1, 0x91b2, + 0x91b3, 0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91ba, + 0x91bb, 0x91bc, 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0x91c2, + 0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, 0x91c8, 0x91c9, 0x91ca, + 0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf, 0x91d0, 0x91d1, 0x91d2, + 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da, + 0x91db, 0x91dc, 0x91dd, 0x91de, 0x91df, 0x91e0, 0x91e1, 0x91e2, + 0x91e3, 0x91e4, 0x91e5, 0x91e6, 0x91e7, 0x91e8, 0x91e9, 0x91ea, + 0x91eb, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f2, + 0x91f3, 0x91f4, 0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0x91fa, + 0x91fb, 0x91fc, 0x91fd, 0x91fe, 0x9240, 0x9241, 0x9242, 0x9243, + 0x9244, 0x9245, 0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b, + 0x924c, 0x924d, 0x924e, 0x924f, 0x9250, 0x9251, 0x9252, 0x9253, + 0x9254, 0x9255, 0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b, + 0x925c, 0x925d, 0x925e, 0x925f, 0x9260, 0x9261, 0x9262, 0x9263, + 0x9264, 0x9265, 0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b, + 0x926c, 0x926d, 0x926e, 0x926f, 0x9270, 0x9271, 0x9272, 0x9273, + 0x9274, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279, 0x927a, 0x927b, + 0x927c, 0x927d, 0x927e, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, + 0x9285, 0x9286, 0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, + 0x928d, 0x928e, 0x928f, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, + 0x9295, 0x9296, 0x9297, 0x9298, 0x9299, 0x929a, 0x929b, 0x929c, + 0x929d, 0x929e, 0x929f, 0x92a0, 0x92a1, 0x92a2, 0x92a3, 0x92a4, + 0x92a5, 0x92a6, 0x92a7, 0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac, + 0x92ad, 0x92ae, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92b3, 0x92b4, + 0x92b5, 0x92b6, 0x92b7, 0x92b8, 0x92b9, 0x92ba, 0x92bb, 0x92bc, + 0x92bd, 0x92be, 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c4, + 0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92c9, 0x92ca, 0x92cb, 0x92cc, + 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1, 0x92d2, 0x92d3, 0x92d4, + 0x92d5, 0x92d6, 0x92d7, 0x92d8, 0x92d9, 0x92da, 0x92db, 0x92dc, + 0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1, 0x92e2, 0x92e3, 0x92e4, + 0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x92e9, 0x92ea, 0x92eb, 0x92ec, + 0x92ed, 0x92ee, 0x92ef, 0x92f0, 0x92f1, 0x92f2, 0x92f3, 0x92f4, + 0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9, 0x92fa, 0x92fb, 0x92fc, + 0x92fd, 0x92fe, 0x9340, 0x9341, 0x9342, 0x9343, 0x9344, 0x9345, + 0x9346, 0x9347, 0x9348, 0x9349, 0x934a, 0x934b, 0x934c, 0x934d, + 0x934e, 0x934f, 0x9350, 0x9351, 0x9352, 0x9353, 0x9354, 0x9355, + 0x9356, 0x9357, 0x9358, 0x9359, 0x935a, 0x935b, 0x935c, 0x935d, + 0x935e, 0x935f, 0x9360, 0x9361, 0x9362, 0x9363, 0x9364, 0x9365, + 0x9366, 0x9367, 0x9368, 0x9369, 0x936a, 0x936b, 0x936c, 0x936d, + 0x936e, 0x936f, 0x9370, 0x9371, 0x9372, 0x9373, 0x9374, 0x9375, + 0x9376, 0x9377, 0x9378, 0x9379, 0x937a, 0x937b, 0x937c, 0x937d, + 0x937e, 0x9380, 0x9381, 0x9382, 0x9383, 0x9384, 0x9385, 0x9386, + 0x9387, 0x9388, 0x9389, 0x938a, 0x938b, 0x938c, 0x938d, 0x938e, + 0x938f, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, 0x9396, + 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c, 0x939d, 0x939e, + 0x939f, 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, + 0x93a7, 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, + 0x93af, 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0x93b4, 0x93b5, 0x93b6, + 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, 0x93bd, 0x93be, + 0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4, 0x93c5, 0x93c6, + 0x93c7, 0x93c8, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93ce, + 0x93cf, 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5, 0x93d6, + 0x93d7, 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de, + 0x93df, 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6, + 0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee, + 0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, + 0x93f7, 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe, + 0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447, + 0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, + 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, + 0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, + 0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, + 0x9468, 0x9469, 0x946a, 0x946b, 0x946c, 0x946d, 0x946e, 0x946f, + 0x9470, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, + 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x9480, + 0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, 0x9487, 0x9488, + 0x9489, 0x948a, 0x948b, 0x948c, 0x948d, 0x948e, 0x948f, 0x9490, + 0x9491, 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498, + 0x9499, 0x949a, 0x949b, 0x949c, 0x949d, 0x949e, 0x949f, 0x94a0, + 0x94a1, 0x94a2, 0x94a3, 0x94a4, 0x94a5, 0x94a6, 0x94a7, 0x94a8, + 0x94a9, 0x94aa, 0x94ab, 0x94ac, 0x94ad, 0x94ae, 0x94af, 0x94b0, + 0x94b1, 0x94b2, 0x94b3, 0x94b4, 0x94b5, 0x94b6, 0x94b7, 0x94b8, + 0x94b9, 0x94ba, 0x94bb, 0x94bc, 0x94bd, 0x94be, 0x94bf, 0x94c0, + 0x94c1, 0x94c2, 0x94c3, 0x94c4, 0x94c5, 0x94c6, 0x94c7, 0x94c8, + 0x94c9, 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94cf, 0x94d0, + 0x94d1, 0x94d2, 0x94d3, 0x94d4, 0x94d5, 0x94d6, 0x94d7, 0x94d8, + 0x94d9, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, 0x94df, 0x94e0, + 0x94e1, 0x94e2, 0x94e3, 0x94e4, 0x94e5, 0x94e6, 0x94e7, 0x94e8, + 0x94e9, 0x94ea, 0x94eb, 0x94ec, 0x94ed, 0x94ee, 0x94ef, 0x94f0, + 0x94f1, 0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7, 0x94f8, + 0x94f9, 0x94fa, 0x94fb, 0x94fc, 0x94fd, 0x94fe, 0x9540, 0x9541, + 0x9542, 0x9543, 0x9544, 0x9545, 0x9546, 0x9547, 0x9548, 0x9549, + 0x954a, 0x954b, 0x954c, 0x954d, 0x954e, 0x954f, 0x9550, 0x9551, + 0x9552, 0x9553, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559, + 0x955a, 0x955b, 0x955c, 0x955d, 0x955e, 0x955f, 0x9560, 0x9561, + 0x9562, 0x9563, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, + 0x956a, 0x956b, 0x956c, 0x956d, 0x956e, 0x956f, 0x9570, 0x9571, + 0x9572, 0x9573, 0x9574, 0x9575, 0x9576, 0x9577, 0x9578, 0x9579, + 0x957a, 0x957b, 0x957c, 0x957d, 0x957e, 0x9580, 0x9581, 0x9582, + 0x9583, 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958a, + 0x958b, 0x958c, 0x958d, 0x958e, 0x958f, 0x9590, 0x9591, 0x9592, + 0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959a, + 0x959b, 0x959c, 0x959d, 0x959e, 0x959f, 0x95a0, 0x95a1, 0x95a2, + 0x95a3, 0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa, + 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b2, + 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba, + 0x95bb, 0x95bc, 0x95bd, 0x95be, 0x95bf, 0x95c0, 0x95c1, 0x95c2, + 0x95c3, 0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0x95ca, + 0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, + 0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, + 0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, + 0x95e3, 0x95e4, 0x95e5, 0x95e6, 0x95e7, 0x95e8, 0x95e9, 0x95ea, + 0x95eb, 0x95ec, 0x95ed, 0x95ee, 0x95ef, 0x95f0, 0x95f1, 0x95f2, + 0x95f3, 0x95f4, 0x95f5, 0x95f6, 0x95f7, 0x95f8, 0x95f9, 0x95fa, + 0x95fb, 0x95fc, 0x95fd, 0x95fe, 0x9640, 0x9641, 0x9642, 0x9643, + 0x9644, 0x9645, 0x9646, 0x9647, 0x9648, 0x9649, 0x964a, 0x964b, + 0x964c, 0x964d, 0x964e, 0x964f, 0x9650, 0x9651, 0x9652, 0x9653, + 0x9654, 0x9655, 0x9656, 0x9657, 0x9658, 0x9659, 0x965a, 0x965b, + 0x965c, 0x965d, 0x965e, 0x965f, 0x9660, 0x9661, 0x9662, 0x9663, + 0x9664, 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, 0x966a, 0x966b, + 0x966c, 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, 0x9672, 0x9673, + 0x9674, 0x9675, 0x9676, 0x9677, 0x9678, 0x9679, 0x967a, 0x967b, + 0x967c, 0x967d, 0x967e, 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, + 0x9685, 0x9686, 0x9687, 0x9688, 0x9689, 0x968a, 0x968b, 0x968c, + 0x968d, 0x968e, 0x968f, 0x9690, 0x9691, 0x9692, 0x9693, 0x9694, + 0x9695, 0x9696, 0x9697, 0x9698, 0x9699, 0x969a, 0x969b, 0x969c, + 0x969d, 0x969e, 0x969f, 0x96a0, 0x96a1, 0x96a2, 0x96a3, 0x96a4, + 0x96a5, 0x96a6, 0x96a7, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac, + 0x96ad, 0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b2, 0x96b3, 0x96b4, + 0x96b5, 0x96b6, 0x96b7, 0x96b8, 0x96b9, 0x96ba, 0x96bb, 0x96bc, + 0x96bd, 0x96be, 0x96bf, 0x96c0, 0x96c1, 0x96c2, 0x96c3, 0x96c4, + 0x96c5, 0x96c6, 0x96c7, 0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc, + 0x96cd, 0x96ce, 0x96cf, 0x96d0, 0x96d1, 0x96d2, 0x96d3, 0x96d4, + 0x96d5, 0x96d6, 0x96d7, 0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc, + 0x96dd, 0x96de, 0x96df, 0x96e0, 0x96e1, 0x96e2, 0x96e3, 0x96e4, + 0x96e5, 0x96e6, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, 0x96ec, + 0x96ed, 0x96ee, 0x96ef, 0x96f0, 0x96f1, 0x96f2, 0x96f3, 0x96f4, + 0x96f5, 0x96f6, 0x96f7, 0x96f8, 0x96f9, 0x96fa, 0x96fb, 0x96fc, + 0x96fd, 0x96fe, 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, + 0x9746, 0x9747, 0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, + 0x974e, 0x974f, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, + 0x9756, 0x9757, 0x9758, 0x9759, 0x975a, 0x975b, 0x975c, 0x975d, + 0x975e, 0x975f, 0x9760, 0x9761, 0x9762, 0x9763, 0x9764, 0x9765, + 0x9766, 0x9767, 0x9768, 0x9769, 0x976a, 0x976b, 0x976c, 0x976d, + 0x976e, 0x976f, 0x9770, 0x9771, 0x9772, 0x9773, 0x9774, 0x9775, + 0x9776, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977c, 0x977d, + 0x977e, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, + 0x9787, 0x9788, 0x9789, 0x978a, 0x978b, 0x978c, 0x978d, 0x978e, + 0x978f, 0x9790, 0x9791, 0x9792, 0x9793, 0x9794, 0x9795, 0x9796, + 0x9797, 0x9798, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, 0x979e, + 0x979f, 0x97a0, 0x97a1, 0x97a2, 0x97a3, 0x97a4, 0x97a5, 0x97a6, + 0x97a7, 0x97a8, 0x97a9, 0x97aa, 0x97ab, 0x97ac, 0x97ad, 0x97ae, + 0x97af, 0x97b0, 0x97b1, 0x97b2, 0x97b3, 0x97b4, 0x97b5, 0x97b6, + 0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, 0x97bd, 0x97be, + 0x97bf, 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, 0x97c6, + 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0x97cd, 0x97ce, + 0x97cf, 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4, 0x97d5, 0x97d6, + 0x97d7, 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc, 0x97dd, 0x97de, + 0x97df, 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4, 0x97e5, 0x97e6, + 0x97e7, 0x97e8, 0x97e9, 0x97ea, 0x97eb, 0x97ec, 0x97ed, 0x97ee, + 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f3, 0x97f4, 0x97f5, 0x97f6, + 0x97f7, 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, 0x97fe, + 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, 0x9847, + 0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e, 0x984f, + 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, 0x9857, + 0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, 0x985e, 0x985f, + 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, 0x9867, + 0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f, + 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877, + 0x9878, 0x9879, 0x987a, 0x987b, 0x987c, 0x987d, 0x987e, 0x9880, + 0x9881, 0x9882, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888, + 0x9889, 0x988a, 0x988b, 0x988c, 0x988d, 0x988e, 0x988f, 0x9890, + 0x9891, 0x9892, 0x9893, 0x9894, 0x9895, 0x9896, 0x9897, 0x9898, + 0x9899, 0x989a, 0x989b, 0x989c, 0x989d, 0x989e, 0x989f, 0x98a0, + 0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0x98a6, 0x98a7, 0x98a8, + 0x98a9, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0, + 0x98b1, 0x98b2, 0x98b3, 0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8, + 0x98b9, 0x98ba, 0x98bb, 0x98bc, 0x98bd, 0x98be, 0x98bf, 0x98c0, + 0x98c1, 0x98c2, 0x98c3, 0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, + 0x98c9, 0x98ca, 0x98cb, 0x98cc, 0x98cd, 0x98ce, 0x98cf, 0x98d0, + 0x98d1, 0x98d2, 0x98d3, 0x98d4, 0x98d5, 0x98d6, 0x98d7, 0x98d8, + 0x98d9, 0x98da, 0x98db, 0x98dc, 0x98dd, 0x98de, 0x98df, 0x98e0, + 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7, 0x98e8, + 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef, 0x98f0, + 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7, 0x98f8, + 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, 0x9940, 0x9941, + 0x9942, 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, + 0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, + 0x9952, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, 0x9959, + 0x995a, 0x995b, 0x995c, 0x995d, 0x995e, 0x995f, 0x9960, 0x9961, + 0x9962, 0x9963, 0x9964, 0x9965, 0x9966, 0x9967, 0x9968, 0x9969, + 0x996a, 0x996b, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0x9971, + 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, 0x9979, + 0x997a, 0x997b, 0x997c, 0x997d, 0x997e, 0x9980, 0x9981, 0x9982, + 0x9983, 0x9984, 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0x998a, + 0x998b, 0x998c, 0x998d, 0x998e, 0x998f, 0x9990, 0x9991, 0x9992, + 0x9993, 0x9994, 0x9995, 0x9996, 0x9997, 0x9998, 0x9999, 0x999a, + 0x999b, 0x999c, 0x999d, 0x999e, 0x999f, 0x99a0, 0x99a1, 0x99a2, + 0x99a3, 0x99a4, 0x99a5, 0x99a6, 0x99a7, 0x99a8, 0x99a9, 0x99aa, + 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b2, + 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9, 0x99ba, + 0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf, 0x99c0, 0x99c1, 0x99c2, + 0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca, + 0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d2, + 0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, + 0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df, 0x99e0, 0x99e1, 0x99e2, + 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8, 0x99e9, 0x99ea, + 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f2, + 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, 0x99f9, 0x99fa, + 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x9a40, 0x9a41, 0x9a42, 0x9a43, + 0x9a44, 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49, 0x9a4a, 0x9a4b, + 0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51, 0x9a52, 0x9a53, + 0x9a54, 0x9a55, 0x9a56, 0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a5b, + 0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f, 0x9a60, 0x9a61, 0x9a62, 0x9a63, + 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69, 0x9a6a, 0x9a6b, + 0x9a6c, 0x9a6d, 0x9a6e, 0x9a6f, 0x9a70, 0x9a71, 0x9a72, 0x9a73, + 0x9a74, 0x9a75, 0x9a76, 0x9a77, 0x9a78, 0x9a79, 0x9a7a, 0x9a7b, + 0x9a7c, 0x9a7d, 0x9a7e, 0x9a80, 0x9a81, 0x9a82, 0x9a83, 0x9a84, + 0x9a85, 0x9a86, 0x9a87, 0x9a88, 0x9a89, 0x9a8a, 0x9a8b, 0x9a8c, + 0x9a8d, 0x9a8e, 0x9a8f, 0x9a90, 0x9a91, 0x9a92, 0x9a93, 0x9a94, + 0x9a95, 0x9a96, 0x9a97, 0x9a98, 0x9a99, 0x9a9a, 0x9a9b, 0x9a9c, + 0x9a9d, 0x9a9e, 0x9a9f, 0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, + 0x9aa5, 0x9aa6, 0x9aa7, 0x9aa8, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, + 0x9aad, 0x9aae, 0x9aaf, 0x9ab0, 0x9ab1, 0x9ab2, 0x9ab3, 0x9ab4, + 0x9ab5, 0x9ab6, 0x9ab7, 0x9ab8, 0x9ab9, 0x9aba, 0x9abb, 0x9abc, + 0x9abd, 0x9abe, 0x9abf, 0x9ac0, 0x9ac1, 0x9ac2, 0x9ac3, 0x9ac4, + 0x9ac5, 0x9ac6, 0x9ac7, 0x9ac8, 0x9ac9, 0x9aca, 0x9acb, 0x9acc, + 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad1, 0x9ad2, 0x9ad3, 0x9ad4, + 0x9ad5, 0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, + 0x9add, 0x9ade, 0x9adf, 0x9ae0, 0x9ae1, 0x9ae2, 0x9ae3, 0x9ae4, + 0x9ae5, 0x9ae6, 0x9ae7, 0x9ae8, 0x9ae9, 0x9aea, 0x9aeb, 0x9aec, + 0x9aed, 0x9aee, 0x9aef, 0x9af0, 0x9af1, 0x9af2, 0x9af3, 0x9af4, + 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9, 0x9afa, 0x9afb, 0x9afc, + 0x9afd, 0x9afe, 0x9b40, 0x9b41, 0x9b42, 0x9b43, 0x9b44, 0x9b45, + 0x9b46, 0x9b47, 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4d, + 0x9b4e, 0x9b4f, 0x9b50, 0x9b51, 0x9b52, 0x9b53, 0x9b54, 0x9b55, + 0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x9b5b, 0x9b5c, 0x9b5d, + 0x9b5e, 0x9b5f, 0x9b60, 0x9b61, 0x9b62, 0x9b63, 0x9b64, 0x9b65, + 0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d, + 0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, 0x9b73, 0x9b74, 0x9b75, + 0x9b76, 0x9b77, 0x9b78, 0x9b79, 0x9b7a, 0x9b7b, 0x9b7c, 0x9b7d, + 0x9b7e, 0x9b80, 0x9b81, 0x9b82, 0x9b83, 0x9b84, 0x9b85, 0x9b86, + 0x9b87, 0x9b88, 0x9b89, 0x9b8a, 0x9b8b, 0x9b8c, 0x9b8d, 0x9b8e, + 0x9b8f, 0x9b90, 0x9b91, 0x9b92, 0x9b93, 0x9b94, 0x9b95, 0x9b96, + 0x9b97, 0x9b98, 0x9b99, 0x9b9a, 0x9b9b, 0x9b9c, 0x9b9d, 0x9b9e, + 0x9b9f, 0x9ba0, 0x9ba1, 0x9ba2, 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, + 0x9ba7, 0x9ba8, 0x9ba9, 0x9baa, 0x9bab, 0x9bac, 0x9bad, 0x9bae, + 0x9baf, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3, 0x9bb4, 0x9bb5, 0x9bb6, + 0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb, 0x9bbc, 0x9bbd, 0x9bbe, + 0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3, 0x9bc4, 0x9bc5, 0x9bc6, + 0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, + 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3, 0x9bd4, 0x9bd5, 0x9bd6, + 0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb, 0x9bdc, 0x9bdd, 0x9bde, + 0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3, 0x9be4, 0x9be5, 0x9be6, + 0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb, 0x9bec, 0x9bed, 0x9bee, + 0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3, 0x9bf4, 0x9bf5, 0x9bf6, + 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb, 0x9bfc, 0x9bfd, 0x9bfe, + 0x9c40, 0x9c41, 0x9c42, 0x9c43, 0x9c44, 0x9c45, 0x9c46, 0x9c47, + 0x9c48, 0x9c49, 0x9c4a, 0x9c4b, 0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f, + 0x9c50, 0x9c51, 0x9c52, 0x9c53, 0x9c54, 0x9c55, 0x9c56, 0x9c57, + 0x9c58, 0x9c59, 0x9c5a, 0x9c5b, 0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f, + 0x9c60, 0x9c61, 0x9c62, 0x9c63, 0x9c64, 0x9c65, 0x9c66, 0x9c67, + 0x9c68, 0x9c69, 0x9c6a, 0x9c6b, 0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f, + 0x9c70, 0x9c71, 0x9c72, 0x9c73, 0x9c74, 0x9c75, 0x9c76, 0x9c77, + 0x9c78, 0x9c79, 0x9c7a, 0x9c7b, 0x9c7c, 0x9c7d, 0x9c7e, 0x9c80, + 0x9c81, 0x9c82, 0x9c83, 0x9c84, 0x9c85, 0x9c86, 0x9c87, 0x9c88, + 0x9c89, 0x9c8a, 0x9c8b, 0x9c8c, 0x9c8d, 0x9c8e, 0x9c8f, 0x9c90, + 0x9c91, 0x9c92, 0x9c93, 0x9c94, 0x9c95, 0x9c96, 0x9c97, 0x9c98, + 0x9c99, 0x9c9a, 0x9c9b, 0x9c9c, 0x9c9d, 0x9c9e, 0x9c9f, 0x9ca0, + 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, + 0x9ca9, 0x9caa, 0x9cab, 0x9cac, 0x9cad, 0x9cae, 0x9caf, 0x9cb0, + 0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cb8, + 0x9cb9, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cbe, 0x9cbf, 0x9cc0, + 0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8, + 0x9cc9, 0x9cca, 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, + 0x9cd1, 0x9cd2, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd6, 0x9cd7, 0x9cd8, + 0x9cd9, 0x9cda, 0x9cdb, 0x9cdc, 0x9cdd, 0x9cde, 0x9cdf, 0x9ce0, + 0x9ce1, 0x9ce2, 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, + 0x9ce9, 0x9cea, 0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef, 0x9cf0, + 0x9cf1, 0x9cf2, 0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8, + 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9d40, 0x9d41, + 0x9d42, 0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49, + 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51, + 0x9d52, 0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, + 0x9d5a, 0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f, 0x9d60, 0x9d61, + 0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, + 0x9d6a, 0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, + 0x9d72, 0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, + 0x9d7a, 0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9d80, 0x9d81, 0x9d82, + 0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88, 0x9d89, 0x9d8a, + 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, 0x9d91, 0x9d92, + 0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9d99, 0x9d9a, + 0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0x9da1, 0x9da2, + 0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa, + 0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db2, + 0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba, + 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, + 0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, + 0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, + 0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9, 0x9dda, + 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, 0x9de1, 0x9de2, + 0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, 0x9dea, + 0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df2, + 0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0x9dfa, + 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9e40, 0x9e41, 0x9e42, 0x9e43, + 0x9e44, 0x9e45, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4a, 0x9e4b, + 0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f, 0x9e50, 0x9e51, 0x9e52, 0x9e53, + 0x9e54, 0x9e55, 0x9e56, 0x9e57, 0x9e58, 0x9e59, 0x9e5a, 0x9e5b, + 0x9e5c, 0x9e5d, 0x9e5e, 0x9e5f, 0x9e60, 0x9e61, 0x9e62, 0x9e63, + 0x9e64, 0x9e65, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, + 0x9e6c, 0x9e6d, 0x9e6e, 0x9e6f, 0x9e70, 0x9e71, 0x9e72, 0x9e73, + 0x9e74, 0x9e75, 0x9e76, 0x9e77, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, + 0x9e7c, 0x9e7d, 0x9e7e, 0x9e80, 0x9e81, 0x9e82, 0x9e83, 0x9e84, + 0x9e85, 0x9e86, 0x9e87, 0x9e88, 0x9e89, 0x9e8a, 0x9e8b, 0x9e8c, + 0x9e8d, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e92, 0x9e93, 0x9e94, + 0x9e95, 0x9e96, 0x9e97, 0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c, + 0x9e9d, 0x9e9e, 0x9e9f, 0x9ea0, 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, + 0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, 0x9ea9, 0x9eaa, 0x9eab, 0x9eac, + 0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4, + 0x9eb5, 0x9eb6, 0x9eb7, 0x9eb8, 0x9eb9, 0x9eba, 0x9ebb, 0x9ebc, + 0x9ebd, 0x9ebe, 0x9ebf, 0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec4, + 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, 0x9ec9, 0x9eca, 0x9ecb, 0x9ecc, + 0x9ecd, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed1, 0x9ed2, 0x9ed3, 0x9ed4, + 0x9ed5, 0x9ed6, 0x9ed7, 0x9ed8, 0x9ed9, 0x9eda, 0x9edb, 0x9edc, + 0x9edd, 0x9ede, 0x9edf, 0x9ee0, 0x9ee1, 0x9ee2, 0x9ee3, 0x9ee4, + 0x9ee5, 0x9ee6, 0x9ee7, 0x9ee8, 0x9ee9, 0x9eea, 0x9eeb, 0x9eec, + 0x9eed, 0x9eee, 0x9eef, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4, + 0x9ef5, 0x9ef6, 0x9ef7, 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc, + 0x9efd, 0x9efe, 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f44, 0x9f45, + 0x9f46, 0x9f47, 0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, + 0x9f4e, 0x9f4f, 0x9f50, 0x9f51, 0x9f52, 0x9f53, 0x9f54, 0x9f55, + 0x9f56, 0x9f57, 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, + 0x9f5e, 0x9f5f, 0x9f60, 0x9f61, 0x9f62, 0x9f63, 0x9f64, 0x9f65, + 0x9f66, 0x9f67, 0x9f68, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, + 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0x9f74, 0x9f75, + 0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d, + 0x9f7e, 0x9f80, 0x9f81, 0x9f82, 0x9f83, 0x9f84, 0x9f85, 0x9f86, + 0x9f87, 0x9f88, 0x9f89, 0x9f8a, 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e, + 0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f93, 0x9f94, 0x9f95, 0x9f96, + 0x9f97, 0x9f98, 0x9f99, 0x9f9a, 0x9f9b, 0x9f9c, 0x9f9d, 0x9f9e, + 0x9f9f, 0x9fa0, 0x9fa1, 0x9fa2, 0x9fa3, 0x9fa4, 0x9fa5, 0x9fa6, + 0x9fa7, 0x9fa8, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0x9fae, + 0x9faf, 0x9fb0, 0x9fb1, 0x9fb2, 0x9fb3, 0x9fb4, 0x9fb5, 0x9fb6, + 0x9fb7, 0x9fb8, 0x9fb9, 0x9fba, 0x9fbb, 0x9fbc, 0x9fbd, 0x9fbe, + 0x9fbf, 0x9fc0, 0x9fc1, 0x9fc2, 0x9fc3, 0x9fc4, 0x9fc5, 0x9fc6, + 0x9fc7, 0x9fc8, 0x9fc9, 0x9fca, 0x9fcb, 0x9fcc, 0x9fcd, 0x9fce, + 0x9fcf, 0x9fd0, 0x9fd1, 0x9fd2, 0x9fd3, 0x9fd4, 0x9fd5, 0x9fd6, + 0x9fd7, 0x9fd8, 0x9fd9, 0x9fda, 0x9fdb, 0x9fdc, 0x9fdd, 0x9fde, + 0x9fdf, 0x9fe0, 0x9fe1, 0x9fe2, 0x9fe3, 0x9fe4, 0x9fe5, 0x9fe6, + 0x9fe7, 0x9fe8, 0x9fe9, 0x9fea, 0x9feb, 0x9fec, 0x9fed, 0x9fee, + 0x9fef, 0x9ff0, 0x9ff1, 0x9ff2, 0x9ff3, 0x9ff4, 0x9ff5, 0x9ff6, + 0x9ff7, 0x9ff8, 0x9ff9, 0x9ffa, 0x9ffb, 0x9ffc, 0x9ffd, 0x9ffe, + 0xa040, 0xa041, 0xa042, 0xa043, 0xa044, 0xa045, 0xa046, 0xa047, + 0xa048, 0xa049, 0xa04a, 0xa04b, 0xa04c, 0xa04d, 0xa04e, 0xa04f, + 0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xa055, 0xa056, 0xa057, + 0xa058, 0xa059, 0xa05a, 0xa05b, 0xa05c, 0xa05d, 0xa05e, 0xa05f, + 0xa060, 0xa061, 0xa062, 0xa063, 0xa064, 0xa065, 0xa066, 0xa067, + 0xa068, 0xa069, 0xa06a, 0xa06b, 0xa06c, 0xa06d, 0xa06e, 0xa06f, + 0xa070, 0xa071, 0xa072, 0xa073, 0xa074, 0xa075, 0xa076, 0xa077, + 0xa078, 0xa079, 0xa07a, 0xa07b, 0xa07c, 0xa07d, 0xa07e, 0xa080, + 0xa081, 0xa082, 0xa083, 0xa084, 0xa085, 0xa086, 0xa087, 0xa088, + 0xa089, 0xa08a, 0xa08b, 0xa08c, 0xa08d, 0xa08e, 0xa08f, 0xa090, + 0xa091, 0xa092, 0xa093, 0xa094, 0xa095, 0xa096, 0xa097, 0xa098, + 0xa099, 0xa09a, 0xa09b, 0xa09c, 0xa09d, 0xa09e, 0xa09f, 0xa0a0, + 0xa0a1, 0xa0a2, 0xa0a3, 0xa0a4, 0xa0a5, 0xa0a6, 0xa0a7, 0xa0a8, + 0xa0a9, 0xa0aa, 0xa0ab, 0xa0ac, 0xa0ad, 0xa0ae, 0xa0af, 0xa0b0, + 0xa0b1, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xa0b6, 0xa0b7, 0xa0b8, + 0xa0b9, 0xa0ba, 0xa0bb, 0xa0bc, 0xa0bd, 0xa0be, 0xa0bf, 0xa0c0, + 0xa0c1, 0xa0c2, 0xa0c3, 0xa0c4, 0xa0c5, 0xa0c6, 0xa0c7, 0xa0c8, + 0xa0c9, 0xa0ca, 0xa0cb, 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf, 0xa0d0, + 0xa0d1, 0xa0d2, 0xa0d3, 0xa0d4, 0xa0d5, 0xa0d6, 0xa0d7, 0xa0d8, + 0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd, 0xa0de, 0xa0df, 0xa0e0, + 0xa0e1, 0xa0e2, 0xa0e3, 0xa0e4, 0xa0e5, 0xa0e6, 0xa0e7, 0xa0e8, + 0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, 0xa0ee, 0xa0ef, 0xa0f0, + 0xa0f1, 0xa0f2, 0xa0f3, 0xa0f4, 0xa0f5, 0xa0f6, 0xa0f7, 0xa0f8, + 0xa0f9, 0xa0fa, 0xa0fb, 0xa0fc, 0xa0fd, 0xa0fe, 0xaa40, 0xaa41, + 0xaa42, 0xaa43, 0xaa44, 0xaa45, 0xaa46, 0xaa47, 0xaa48, 0xaa49, + 0xaa4a, 0xaa4b, 0xaa4c, 0xaa4d, 0xaa4e, 0xaa4f, 0xaa50, 0xaa51, + 0xaa52, 0xaa53, 0xaa54, 0xaa55, 0xaa56, 0xaa57, 0xaa58, 0xaa59, + 0xaa5a, 0xaa5b, 0xaa5c, 0xaa5d, 0xaa5e, 0xaa5f, 0xaa60, 0xaa61, + 0xaa62, 0xaa63, 0xaa64, 0xaa65, 0xaa66, 0xaa67, 0xaa68, 0xaa69, + 0xaa6a, 0xaa6b, 0xaa6c, 0xaa6d, 0xaa6e, 0xaa6f, 0xaa70, 0xaa71, + 0xaa72, 0xaa73, 0xaa74, 0xaa75, 0xaa76, 0xaa77, 0xaa78, 0xaa79, + 0xaa7a, 0xaa7b, 0xaa7c, 0xaa7d, 0xaa7e, 0xaa80, 0xaa81, 0xaa82, + 0xaa83, 0xaa84, 0xaa85, 0xaa86, 0xaa87, 0xaa88, 0xaa89, 0xaa8a, + 0xaa8b, 0xaa8c, 0xaa8d, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa92, + 0xaa93, 0xaa94, 0xaa95, 0xaa96, 0xaa97, 0xaa98, 0xaa99, 0xaa9a, + 0xaa9b, 0xaa9c, 0xaa9d, 0xaa9e, 0xaa9f, 0xaaa0, 0xab40, 0xab41, + 0xab42, 0xab43, 0xab44, 0xab45, 0xab46, 0xab47, 0xab48, 0xab49, + 0xab4a, 0xab4b, 0xab4c, 0xab4d, 0xab4e, 0xab4f, 0xab50, 0xab51, + 0xab52, 0xab53, 0xab54, 0xab55, 0xab56, 0xab57, 0xab58, 0xab59, + 0xab5a, 0xab5b, 0xab5c, 0xab5d, 0xab5e, 0xab5f, 0xab60, 0xab61, + 0xab62, 0xab63, 0xab64, 0xab65, 0xab66, 0xab67, 0xab68, 0xab69, + 0xab6a, 0xab6b, 0xab6c, 0xab6d, 0xab6e, 0xab6f, 0xab70, 0xab71, + 0xab72, 0xab73, 0xab74, 0xab75, 0xab76, 0xab77, 0xab78, 0xab79, + 0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab7e, 0xab80, 0xab81, 0xab82, + 0xab83, 0xab84, 0xab85, 0xab86, 0xab87, 0xab88, 0xab89, 0xab8a, + 0xab8b, 0xab8c, 0xab8d, 0xab8e, 0xab8f, 0xab90, 0xab91, 0xab92, + 0xab93, 0xab94, 0xab95, 0xab96, 0xab97, 0xab98, 0xab99, 0xab9a, + 0xab9b, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, 0xac40, 0xac41, + 0xac42, 0xac43, 0xac44, 0xac45, 0xac46, 0xac47, 0xac48, 0xac49, + 0xac4a, 0xac4b, 0xac4c, 0xac4d, 0xac4e, 0xac4f, 0xac50, 0xac51, + 0xac52, 0xac53, 0xac54, 0xac55, 0xac56, 0xac57, 0xac58, 0xac59, + 0xac5a, 0xac5b, 0xac5c, 0xac5d, 0xac5e, 0xac5f, 0xac60, 0xac61, + 0xac62, 0xac63, 0xac64, 0xac65, 0xac66, 0xac67, 0xac68, 0xac69, + 0xac6a, 0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xac6f, 0xac70, 0xac71, + 0xac72, 0xac73, 0xac74, 0xac75, 0xac76, 0xac77, 0xac78, 0xac79, + 0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e, 0xac80, 0xac81, 0xac82, + 0xac83, 0xac84, 0xac85, 0xac86, 0xac87, 0xac88, 0xac89, 0xac8a, + 0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, 0xac92, + 0xac93, 0xac94, 0xac95, 0xac96, 0xac97, 0xac98, 0xac99, 0xac9a, + 0xac9b, 0xac9c, 0xac9d, 0xac9e, 0xac9f, 0xaca0, 0xad40, 0xad41, + 0xad42, 0xad43, 0xad44, 0xad45, 0xad46, 0xad47, 0xad48, 0xad49, + 0xad4a, 0xad4b, 0xad4c, 0xad4d, 0xad4e, 0xad4f, 0xad50, 0xad51, + 0xad52, 0xad53, 0xad54, 0xad55, 0xad56, 0xad57, 0xad58, 0xad59, + 0xad5a, 0xad5b, 0xad5c, 0xad5d, 0xad5e, 0xad5f, 0xad60, 0xad61, + 0xad62, 0xad63, 0xad64, 0xad65, 0xad66, 0xad67, 0xad68, 0xad69, + 0xad6a, 0xad6b, 0xad6c, 0xad6d, 0xad6e, 0xad6f, 0xad70, 0xad71, + 0xad72, 0xad73, 0xad74, 0xad75, 0xad76, 0xad77, 0xad78, 0xad79, + 0xad7a, 0xad7b, 0xad7c, 0xad7d, 0xad7e, 0xad80, 0xad81, 0xad82, + 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, 0xad88, 0xad89, 0xad8a, + 0xad8b, 0xad8c, 0xad8d, 0xad8e, 0xad8f, 0xad90, 0xad91, 0xad92, + 0xad93, 0xad94, 0xad95, 0xad96, 0xad97, 0xad98, 0xad99, 0xad9a, + 0xad9b, 0xad9c, 0xad9d, 0xad9e, 0xad9f, 0xada0, 0xae40, 0xae41, + 0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae47, 0xae48, 0xae49, + 0xae4a, 0xae4b, 0xae4c, 0xae4d, 0xae4e, 0xae4f, 0xae50, 0xae51, + 0xae52, 0xae53, 0xae54, 0xae55, 0xae56, 0xae57, 0xae58, 0xae59, + 0xae5a, 0xae5b, 0xae5c, 0xae5d, 0xae5e, 0xae5f, 0xae60, 0xae61, + 0xae62, 0xae63, 0xae64, 0xae65, 0xae66, 0xae67, 0xae68, 0xae69, + 0xae6a, 0xae6b, 0xae6c, 0xae6d, 0xae6e, 0xae6f, 0xae70, 0xae71, + 0xae72, 0xae73, 0xae74, 0xae75, 0xae76, 0xae77, 0xae78, 0xae79, + 0xae7a, 0xae7b, 0xae7c, 0xae7d, 0xae7e, 0xae80, 0xae81, 0xae82, + 0xae83, 0xae84, 0xae85, 0xae86, 0xae87, 0xae88, 0xae89, 0xae8a, + 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, 0xae90, 0xae91, 0xae92, + 0xae93, 0xae94, 0xae95, 0xae96, 0xae97, 0xae98, 0xae99, 0xae9a, + 0xae9b, 0xae9c, 0xae9d, 0xae9e, 0xae9f, 0xaea0, 0xaf40, 0xaf41, + 0xaf42, 0xaf43, 0xaf44, 0xaf45, 0xaf46, 0xaf47, 0xaf48, 0xaf49, + 0xaf4a, 0xaf4b, 0xaf4c, 0xaf4d, 0xaf4e, 0xaf4f, 0xaf50, 0xaf51, + 0xaf52, 0xaf53, 0xaf54, 0xaf55, 0xaf56, 0xaf57, 0xaf58, 0xaf59, + 0xaf5a, 0xaf5b, 0xaf5c, 0xaf5d, 0xaf5e, 0xaf5f, 0xaf60, 0xaf61, + 0xaf62, 0xaf63, 0xaf64, 0xaf65, 0xaf66, 0xaf67, 0xaf68, 0xaf69, + 0xaf6a, 0xaf6b, 0xaf6c, 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, 0xaf71, + 0xaf72, 0xaf73, 0xaf74, 0xaf75, 0xaf76, 0xaf77, 0xaf78, 0xaf79, + 0xaf7a, 0xaf7b, 0xaf7c, 0xaf7d, 0xaf7e, 0xaf80, 0xaf81, 0xaf82, + 0xaf83, 0xaf84, 0xaf85, 0xaf86, 0xaf87, 0xaf88, 0xaf89, 0xaf8a, + 0xaf8b, 0xaf8c, 0xaf8d, 0xaf8e, 0xaf8f, 0xaf90, 0xaf91, 0xaf92, + 0xaf93, 0xaf94, 0xaf95, 0xaf96, 0xaf97, 0xaf98, 0xaf99, 0xaf9a, + 0xaf9b, 0xaf9c, 0xaf9d, 0xaf9e, 0xaf9f, 0xafa0, 0xb040, 0xb041, + 0xb042, 0xb043, 0xb044, 0xb045, 0xb046, 0xb047, 0xb048, 0xb049, + 0xb04a, 0xb04b, 0xb04c, 0xb04d, 0xb04e, 0xb04f, 0xb050, 0xb051, + 0xb052, 0xb053, 0xb054, 0xb055, 0xb056, 0xb057, 0xb058, 0xb059, + 0xb05a, 0xb05b, 0xb05c, 0xb05d, 0xb05e, 0xb05f, 0xb060, 0xb061, + 0xb062, 0xb063, 0xb064, 0xb065, 0xb066, 0xb067, 0xb068, 0xb069, + 0xb06a, 0xb06b, 0xb06c, 0xb06d, 0xb06e, 0xb06f, 0xb070, 0xb071, + 0xb072, 0xb073, 0xb074, 0xb075, 0xb076, 0xb077, 0xb078, 0xb079, + 0xb07a, 0xb07b, 0xb07c, 0xb07d, 0xb07e, 0xb080, 0xb081, 0xb082, + 0xb083, 0xb084, 0xb085, 0xb086, 0xb087, 0xb088, 0xb089, 0xb08a, + 0xb08b, 0xb08c, 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xb091, 0xb092, + 0xb093, 0xb094, 0xb095, 0xb096, 0xb097, 0xb098, 0xb099, 0xb09a, + 0xb09b, 0xb09c, 0xb09d, 0xb09e, 0xb09f, 0xb0a0, 0xb140, 0xb141, + 0xb142, 0xb143, 0xb144, 0xb145, 0xb146, 0xb147, 0xb148, 0xb149, + 0xb14a, 0xb14b, 0xb14c, 0xb14d, 0xb14e, 0xb14f, 0xb150, 0xb151, + 0xb152, 0xb153, 0xb154, 0xb155, 0xb156, 0xb157, 0xb158, 0xb159, + 0xb15a, 0xb15b, 0xb15c, 0xb15d, 0xb15e, 0xb15f, 0xb160, 0xb161, + 0xb162, 0xb163, 0xb164, 0xb165, 0xb166, 0xb167, 0xb168, 0xb169, + 0xb16a, 0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f, 0xb170, 0xb171, + 0xb172, 0xb173, 0xb174, 0xb175, 0xb176, 0xb177, 0xb178, 0xb179, + 0xb17a, 0xb17b, 0xb17c, 0xb17d, 0xb17e, 0xb180, 0xb181, 0xb182, + 0xb183, 0xb184, 0xb185, 0xb186, 0xb187, 0xb188, 0xb189, 0xb18a, + 0xb18b, 0xb18c, 0xb18d, 0xb18e, 0xb18f, 0xb190, 0xb191, 0xb192, + 0xb193, 0xb194, 0xb195, 0xb196, 0xb197, 0xb198, 0xb199, 0xb19a, + 0xb19b, 0xb19c, 0xb19d, 0xb19e, 0xb19f, 0xb1a0, 0xb240, 0xb241, + 0xb242, 0xb243, 0xb244, 0xb245, 0xb246, 0xb247, 0xb248, 0xb249, + 0xb24a, 0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251, + 0xb252, 0xb253, 0xb254, 0xb255, 0xb256, 0xb257, 0xb258, 0xb259, + 0xb25a, 0xb25b, 0xb25c, 0xb25d, 0xb25e, 0xb25f, 0xb260, 0xb261, + 0xb262, 0xb263, 0xb264, 0xb265, 0xb266, 0xb267, 0xb268, 0xb269, + 0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xb26e, 0xb26f, 0xb270, 0xb271, + 0xb272, 0xb273, 0xb274, 0xb275, 0xb276, 0xb277, 0xb278, 0xb279, + 0xb27a, 0xb27b, 0xb27c, 0xb27d, 0xb27e, 0xb280, 0xb281, 0xb282, + 0xb283, 0xb284, 0xb285, 0xb286, 0xb287, 0xb288, 0xb289, 0xb28a, + 0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xb28f, 0xb290, 0xb291, 0xb292, + 0xb293, 0xb294, 0xb295, 0xb296, 0xb297, 0xb298, 0xb299, 0xb29a, + 0xb29b, 0xb29c, 0xb29d, 0xb29e, 0xb29f, 0xb2a0, 0xb340, 0xb341, + 0xb342, 0xb343, 0xb344, 0xb345, 0xb346, 0xb347, 0xb348, 0xb349, + 0xb34a, 0xb34b, 0xb34c, 0xb34d, 0xb34e, 0xb34f, 0xb350, 0xb351, + 0xb352, 0xb353, 0xb354, 0xb355, 0xb356, 0xb357, 0xb358, 0xb359, + 0xb35a, 0xb35b, 0xb35c, 0xb35d, 0xb35e, 0xb35f, 0xb360, 0xb361, + 0xb362, 0xb363, 0xb364, 0xb365, 0xb366, 0xb367, 0xb368, 0xb369, + 0xb36a, 0xb36b, 0xb36c, 0xb36d, 0xb36e, 0xb36f, 0xb370, 0xb371, + 0xb372, 0xb373, 0xb374, 0xb375, 0xb376, 0xb377, 0xb378, 0xb379, + 0xb37a, 0xb37b, 0xb37c, 0xb37d, 0xb37e, 0xb380, 0xb381, 0xb382, + 0xb383, 0xb384, 0xb385, 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a, + 0xb38b, 0xb38c, 0xb38d, 0xb38e, 0xb38f, 0xb390, 0xb391, 0xb392, + 0xb393, 0xb394, 0xb395, 0xb396, 0xb397, 0xb398, 0xb399, 0xb39a, + 0xb39b, 0xb39c, 0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xb440, 0xb441, + 0xb442, 0xb443, 0xb444, 0xb445, 0xb446, 0xb447, 0xb448, 0xb449, + 0xb44a, 0xb44b, 0xb44c, 0xb44d, 0xb44e, 0xb44f, 0xb450, 0xb451, + 0xb452, 0xb453, 0xb454, 0xb455, 0xb456, 0xb457, 0xb458, 0xb459, + 0xb45a, 0xb45b, 0xb45c, 0xb45d, 0xb45e, 0xb45f, 0xb460, 0xb461, + 0xb462, 0xb463, 0xb464, 0xb465, 0xb466, 0xb467, 0xb468, 0xb469, + 0xb46a, 0xb46b, 0xb46c, 0xb46d, 0xb46e, 0xb46f, 0xb470, 0xb471, + 0xb472, 0xb473, 0xb474, 0xb475, 0xb476, 0xb477, 0xb478, 0xb479, + 0xb47a, 0xb47b, 0xb47c, 0xb47d, 0xb47e, 0xb480, 0xb481, 0xb482, + 0xb483, 0xb484, 0xb485, 0xb486, 0xb487, 0xb488, 0xb489, 0xb48a, + 0xb48b, 0xb48c, 0xb48d, 0xb48e, 0xb48f, 0xb490, 0xb491, 0xb492, + 0xb493, 0xb494, 0xb495, 0xb496, 0xb497, 0xb498, 0xb499, 0xb49a, + 0xb49b, 0xb49c, 0xb49d, 0xb49e, 0xb49f, 0xb4a0, 0xb540, 0xb541, + 0xb542, 0xb543, 0xb544, 0xb545, 0xb546, 0xb547, 0xb548, 0xb549, + 0xb54a, 0xb54b, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xb550, 0xb551, + 0xb552, 0xb553, 0xb554, 0xb555, 0xb556, 0xb557, 0xb558, 0xb559, + 0xb55a, 0xb55b, 0xb55c, 0xb55d, 0xb55e, 0xb55f, 0xb560, 0xb561, + 0xb562, 0xb563, 0xb564, 0xb565, 0xb566, 0xb567, 0xb568, 0xb569, + 0xb56a, 0xb56b, 0xb56c, 0xb56d, 0xb56e, 0xb56f, 0xb570, 0xb571, + 0xb572, 0xb573, 0xb574, 0xb575, 0xb576, 0xb577, 0xb578, 0xb579, + 0xb57a, 0xb57b, 0xb57c, 0xb57d, 0xb57e, 0xb580, 0xb581, 0xb582, + 0xb583, 0xb584, 0xb585, 0xb586, 0xb587, 0xb588, 0xb589, 0xb58a, + 0xb58b, 0xb58c, 0xb58d, 0xb58e, 0xb58f, 0xb590, 0xb591, 0xb592, + 0xb593, 0xb594, 0xb595, 0xb596, 0xb597, 0xb598, 0xb599, 0xb59a, + 0xb59b, 0xb59c, 0xb59d, 0xb59e, 0xb59f, 0xb5a0, 0xb640, 0xb641, + 0xb642, 0xb643, 0xb644, 0xb645, 0xb646, 0xb647, 0xb648, 0xb649, + 0xb64a, 0xb64b, 0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650, 0xb651, + 0xb652, 0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659, + 0xb65a, 0xb65b, 0xb65c, 0xb65d, 0xb65e, 0xb65f, 0xb660, 0xb661, + 0xb662, 0xb663, 0xb664, 0xb665, 0xb666, 0xb667, 0xb668, 0xb669, + 0xb66a, 0xb66b, 0xb66c, 0xb66d, 0xb66e, 0xb66f, 0xb670, 0xb671, + 0xb672, 0xb673, 0xb674, 0xb675, 0xb676, 0xb677, 0xb678, 0xb679, + 0xb67a, 0xb67b, 0xb67c, 0xb67d, 0xb67e, 0xb680, 0xb681, 0xb682, + 0xb683, 0xb684, 0xb685, 0xb686, 0xb687, 0xb688, 0xb689, 0xb68a, + 0xb68b, 0xb68c, 0xb68d, 0xb68e, 0xb68f, 0xb690, 0xb691, 0xb692, + 0xb693, 0xb694, 0xb695, 0xb696, 0xb697, 0xb698, 0xb699, 0xb69a, + 0xb69b, 0xb69c, 0xb69d, 0xb69e, 0xb69f, 0xb6a0, 0xb740, 0xb741, + 0xb742, 0xb743, 0xb744, 0xb745, 0xb746, 0xb747, 0xb748, 0xb749, + 0xb74a, 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, 0xb750, 0xb751, + 0xb752, 0xb753, 0xb754, 0xb755, 0xb756, 0xb757, 0xb758, 0xb759, + 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xb75f, 0xb760, 0xb761, + 0xb762, 0xb763, 0xb764, 0xb765, 0xb766, 0xb767, 0xb768, 0xb769, + 0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xb76e, 0xb76f, 0xb770, 0xb771, + 0xb772, 0xb773, 0xb774, 0xb775, 0xb776, 0xb777, 0xb778, 0xb779, + 0xb77a, 0xb77b, 0xb77c, 0xb77d, 0xb77e, 0xb780, 0xb781, 0xb782, + 0xb783, 0xb784, 0xb785, 0xb786, 0xb787, 0xb788, 0xb789, 0xb78a, + 0xb78b, 0xb78c, 0xb78d, 0xb78e, 0xb78f, 0xb790, 0xb791, 0xb792, + 0xb793, 0xb794, 0xb795, 0xb796, 0xb797, 0xb798, 0xb799, 0xb79a, + 0xb79b, 0xb79c, 0xb79d, 0xb79e, 0xb79f, 0xb7a0, 0xb840, 0xb841, + 0xb842, 0xb843, 0xb844, 0xb845, 0xb846, 0xb847, 0xb848, 0xb849, + 0xb84a, 0xb84b, 0xb84c, 0xb84d, 0xb84e, 0xb84f, 0xb850, 0xb851, + 0xb852, 0xb853, 0xb854, 0xb855, 0xb856, 0xb857, 0xb858, 0xb859, + 0xb85a, 0xb85b, 0xb85c, 0xb85d, 0xb85e, 0xb85f, 0xb860, 0xb861, + 0xb862, 0xb863, 0xb864, 0xb865, 0xb866, 0xb867, 0xb868, 0xb869, + 0xb86a, 0xb86b, 0xb86c, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xb871, + 0xb872, 0xb873, 0xb874, 0xb875, 0xb876, 0xb877, 0xb878, 0xb879, + 0xb87a, 0xb87b, 0xb87c, 0xb87d, 0xb87e, 0xb880, 0xb881, 0xb882, + 0xb883, 0xb884, 0xb885, 0xb886, 0xb887, 0xb888, 0xb889, 0xb88a, + 0xb88b, 0xb88c, 0xb88d, 0xb88e, 0xb88f, 0xb890, 0xb891, 0xb892, + 0xb893, 0xb894, 0xb895, 0xb896, 0xb897, 0xb898, 0xb899, 0xb89a, + 0xb89b, 0xb89c, 0xb89d, 0xb89e, 0xb89f, 0xb8a0, 0xb940, 0xb941, + 0xb942, 0xb943, 0xb944, 0xb945, 0xb946, 0xb947, 0xb948, 0xb949, + 0xb94a, 0xb94b, 0xb94c, 0xb94d, 0xb94e, 0xb94f, 0xb950, 0xb951, + 0xb952, 0xb953, 0xb954, 0xb955, 0xb956, 0xb957, 0xb958, 0xb959, + 0xb95a, 0xb95b, 0xb95c, 0xb95d, 0xb95e, 0xb95f, 0xb960, 0xb961, + 0xb962, 0xb963, 0xb964, 0xb965, 0xb966, 0xb967, 0xb968, 0xb969, + 0xb96a, 0xb96b, 0xb96c, 0xb96d, 0xb96e, 0xb96f, 0xb970, 0xb971, + 0xb972, 0xb973, 0xb974, 0xb975, 0xb976, 0xb977, 0xb978, 0xb979, + 0xb97a, 0xb97b, 0xb97c, 0xb97d, 0xb97e, 0xb980, 0xb981, 0xb982, + 0xb983, 0xb984, 0xb985, 0xb986, 0xb987, 0xb988, 0xb989, 0xb98a, + 0xb98b, 0xb98c, 0xb98d, 0xb98e, 0xb98f, 0xb990, 0xb991, 0xb992, + 0xb993, 0xb994, 0xb995, 0xb996, 0xb997, 0xb998, 0xb999, 0xb99a, + 0xb99b, 0xb99c, 0xb99d, 0xb99e, 0xb99f, 0xb9a0, 0xba40, 0xba41, + 0xba42, 0xba43, 0xba44, 0xba45, 0xba46, 0xba47, 0xba48, 0xba49, + 0xba4a, 0xba4b, 0xba4c, 0xba4d, 0xba4e, 0xba4f, 0xba50, 0xba51, + 0xba52, 0xba53, 0xba54, 0xba55, 0xba56, 0xba57, 0xba58, 0xba59, + 0xba5a, 0xba5b, 0xba5c, 0xba5d, 0xba5e, 0xba5f, 0xba60, 0xba61, + 0xba62, 0xba63, 0xba64, 0xba65, 0xba66, 0xba67, 0xba68, 0xba69, + 0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0xba70, 0xba71, + 0xba72, 0xba73, 0xba74, 0xba75, 0xba76, 0xba77, 0xba78, 0xba79, + 0xba7a, 0xba7b, 0xba7c, 0xba7d, 0xba7e, 0xba80, 0xba81, 0xba82, + 0xba83, 0xba84, 0xba85, 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a, + 0xba8b, 0xba8c, 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, 0xba92, + 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, 0xba9a, + 0xba9b, 0xba9c, 0xba9d, 0xba9e, 0xba9f, 0xbaa0, 0xbb40, 0xbb41, + 0xbb42, 0xbb43, 0xbb44, 0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49, + 0xbb4a, 0xbb4b, 0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f, 0xbb50, 0xbb51, + 0xbb52, 0xbb53, 0xbb54, 0xbb55, 0xbb56, 0xbb57, 0xbb58, 0xbb59, + 0xbb5a, 0xbb5b, 0xbb5c, 0xbb5d, 0xbb5e, 0xbb5f, 0xbb60, 0xbb61, + 0xbb62, 0xbb63, 0xbb64, 0xbb65, 0xbb66, 0xbb67, 0xbb68, 0xbb69, + 0xbb6a, 0xbb6b, 0xbb6c, 0xbb6d, 0xbb6e, 0xbb6f, 0xbb70, 0xbb71, + 0xbb72, 0xbb73, 0xbb74, 0xbb75, 0xbb76, 0xbb77, 0xbb78, 0xbb79, + 0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb7e, 0xbb80, 0xbb81, 0xbb82, + 0xbb83, 0xbb84, 0xbb85, 0xbb86, 0xbb87, 0xbb88, 0xbb89, 0xbb8a, + 0xbb8b, 0xbb8c, 0xbb8d, 0xbb8e, 0xbb8f, 0xbb90, 0xbb91, 0xbb92, + 0xbb93, 0xbb94, 0xbb95, 0xbb96, 0xbb97, 0xbb98, 0xbb99, 0xbb9a, + 0xbb9b, 0xbb9c, 0xbb9d, 0xbb9e, 0xbb9f, 0xbba0, 0xbc40, 0xbc41, + 0xbc42, 0xbc43, 0xbc44, 0xbc45, 0xbc46, 0xbc47, 0xbc48, 0xbc49, + 0xbc4a, 0xbc4b, 0xbc4c, 0xbc4d, 0xbc4e, 0xbc4f, 0xbc50, 0xbc51, + 0xbc52, 0xbc53, 0xbc54, 0xbc55, 0xbc56, 0xbc57, 0xbc58, 0xbc59, + 0xbc5a, 0xbc5b, 0xbc5c, 0xbc5d, 0xbc5e, 0xbc5f, 0xbc60, 0xbc61, + 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0xbc68, 0xbc69, + 0xbc6a, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e, 0xbc6f, 0xbc70, 0xbc71, + 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, 0xbc77, 0xbc78, 0xbc79, + 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d, 0xbc7e, 0xbc80, 0xbc81, 0xbc82, + 0xbc83, 0xbc84, 0xbc85, 0xbc86, 0xbc87, 0xbc88, 0xbc89, 0xbc8a, + 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, 0xbc8f, 0xbc90, 0xbc91, 0xbc92, + 0xbc93, 0xbc94, 0xbc95, 0xbc96, 0xbc97, 0xbc98, 0xbc99, 0xbc9a, + 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0xbca0, 0xbd40, 0xbd41, + 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd48, 0xbd49, + 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, 0xbd4f, 0xbd50, 0xbd51, + 0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56, 0xbd57, 0xbd58, 0xbd59, + 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd5e, 0xbd5f, 0xbd60, 0xbd61, + 0xbd62, 0xbd63, 0xbd64, 0xbd65, 0xbd66, 0xbd67, 0xbd68, 0xbd69, + 0xbd6a, 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, 0xbd71, + 0xbd72, 0xbd73, 0xbd74, 0xbd75, 0xbd76, 0xbd77, 0xbd78, 0xbd79, + 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xbd80, 0xbd81, 0xbd82, + 0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xbd87, 0xbd88, 0xbd89, 0xbd8a, + 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, 0xbd90, 0xbd91, 0xbd92, + 0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97, 0xbd98, 0xbd99, 0xbd9a, + 0xbd9b, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, 0xbda0, 0xbe40, 0xbe41, + 0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, 0xbe47, 0xbe48, 0xbe49, + 0xbe4a, 0xbe4b, 0xbe4c, 0xbe4d, 0xbe4e, 0xbe4f, 0xbe50, 0xbe51, + 0xbe52, 0xbe53, 0xbe54, 0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59, + 0xbe5a, 0xbe5b, 0xbe5c, 0xbe5d, 0xbe5e, 0xbe5f, 0xbe60, 0xbe61, + 0xbe62, 0xbe63, 0xbe64, 0xbe65, 0xbe66, 0xbe67, 0xbe68, 0xbe69, + 0xbe6a, 0xbe6b, 0xbe6c, 0xbe6d, 0xbe6e, 0xbe6f, 0xbe70, 0xbe71, + 0xbe72, 0xbe73, 0xbe74, 0xbe75, 0xbe76, 0xbe77, 0xbe78, 0xbe79, + 0xbe7a, 0xbe7b, 0xbe7c, 0xbe7d, 0xbe7e, 0xbe80, 0xbe81, 0xbe82, + 0xbe83, 0xbe84, 0xbe85, 0xbe86, 0xbe87, 0xbe88, 0xbe89, 0xbe8a, + 0xbe8b, 0xbe8c, 0xbe8d, 0xbe8e, 0xbe8f, 0xbe90, 0xbe91, 0xbe92, + 0xbe93, 0xbe94, 0xbe95, 0xbe96, 0xbe97, 0xbe98, 0xbe99, 0xbe9a, + 0xbe9b, 0xbe9c, 0xbe9d, 0xbe9e, 0xbe9f, 0xbea0, 0xbf40, 0xbf41, + 0xbf42, 0xbf43, 0xbf44, 0xbf45, 0xbf46, 0xbf47, 0xbf48, 0xbf49, + 0xbf4a, 0xbf4b, 0xbf4c, 0xbf4d, 0xbf4e, 0xbf4f, 0xbf50, 0xbf51, + 0xbf52, 0xbf53, 0xbf54, 0xbf55, 0xbf56, 0xbf57, 0xbf58, 0xbf59, + 0xbf5a, 0xbf5b, 0xbf5c, 0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61, + 0xbf62, 0xbf63, 0xbf64, 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, + 0xbf6a, 0xbf6b, 0xbf6c, 0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71, + 0xbf72, 0xbf73, 0xbf74, 0xbf75, 0xbf76, 0xbf77, 0xbf78, 0xbf79, + 0xbf7a, 0xbf7b, 0xbf7c, 0xbf7d, 0xbf7e, 0xbf80, 0xbf81, 0xbf82, + 0xbf83, 0xbf84, 0xbf85, 0xbf86, 0xbf87, 0xbf88, 0xbf89, 0xbf8a, + 0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92, + 0xbf93, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a, + 0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f, 0xbfa0, 0xc040, 0xc041, + 0xc042, 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, + 0xc04a, 0xc04b, 0xc04c, 0xc04d, 0xc04e, 0xc04f, 0xc050, 0xc051, + 0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, 0xc058, 0xc059, + 0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e, 0xc05f, 0xc060, 0xc061, + 0xc062, 0xc063, 0xc064, 0xc065, 0xc066, 0xc067, 0xc068, 0xc069, + 0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f, 0xc070, 0xc071, + 0xc072, 0xc073, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, 0xc079, + 0xc07a, 0xc07b, 0xc07c, 0xc07d, 0xc07e, 0xc080, 0xc081, 0xc082, + 0xc083, 0xc084, 0xc085, 0xc086, 0xc087, 0xc088, 0xc089, 0xc08a, + 0xc08b, 0xc08c, 0xc08d, 0xc08e, 0xc08f, 0xc090, 0xc091, 0xc092, + 0xc093, 0xc094, 0xc095, 0xc096, 0xc097, 0xc098, 0xc099, 0xc09a, + 0xc09b, 0xc09c, 0xc09d, 0xc09e, 0xc09f, 0xc0a0, 0xc140, 0xc141, + 0xc142, 0xc143, 0xc144, 0xc145, 0xc146, 0xc147, 0xc148, 0xc149, + 0xc14a, 0xc14b, 0xc14c, 0xc14d, 0xc14e, 0xc14f, 0xc150, 0xc151, + 0xc152, 0xc153, 0xc154, 0xc155, 0xc156, 0xc157, 0xc158, 0xc159, + 0xc15a, 0xc15b, 0xc15c, 0xc15d, 0xc15e, 0xc15f, 0xc160, 0xc161, + 0xc162, 0xc163, 0xc164, 0xc165, 0xc166, 0xc167, 0xc168, 0xc169, + 0xc16a, 0xc16b, 0xc16c, 0xc16d, 0xc16e, 0xc16f, 0xc170, 0xc171, + 0xc172, 0xc173, 0xc174, 0xc175, 0xc176, 0xc177, 0xc178, 0xc179, + 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xc17e, 0xc180, 0xc181, 0xc182, + 0xc183, 0xc184, 0xc185, 0xc186, 0xc187, 0xc188, 0xc189, 0xc18a, + 0xc18b, 0xc18c, 0xc18d, 0xc18e, 0xc18f, 0xc190, 0xc191, 0xc192, + 0xc193, 0xc194, 0xc195, 0xc196, 0xc197, 0xc198, 0xc199, 0xc19a, + 0xc19b, 0xc19c, 0xc19d, 0xc19e, 0xc19f, 0xc1a0, 0xc240, 0xc241, + 0xc242, 0xc243, 0xc244, 0xc245, 0xc246, 0xc247, 0xc248, 0xc249, + 0xc24a, 0xc24b, 0xc24c, 0xc24d, 0xc24e, 0xc24f, 0xc250, 0xc251, + 0xc252, 0xc253, 0xc254, 0xc255, 0xc256, 0xc257, 0xc258, 0xc259, + 0xc25a, 0xc25b, 0xc25c, 0xc25d, 0xc25e, 0xc25f, 0xc260, 0xc261, + 0xc262, 0xc263, 0xc264, 0xc265, 0xc266, 0xc267, 0xc268, 0xc269, + 0xc26a, 0xc26b, 0xc26c, 0xc26d, 0xc26e, 0xc26f, 0xc270, 0xc271, + 0xc272, 0xc273, 0xc274, 0xc275, 0xc276, 0xc277, 0xc278, 0xc279, + 0xc27a, 0xc27b, 0xc27c, 0xc27d, 0xc27e, 0xc280, 0xc281, 0xc282, + 0xc283, 0xc284, 0xc285, 0xc286, 0xc287, 0xc288, 0xc289, 0xc28a, + 0xc28b, 0xc28c, 0xc28d, 0xc28e, 0xc28f, 0xc290, 0xc291, 0xc292, + 0xc293, 0xc294, 0xc295, 0xc296, 0xc297, 0xc298, 0xc299, 0xc29a, + 0xc29b, 0xc29c, 0xc29d, 0xc29e, 0xc29f, 0xc2a0, 0xc340, 0xc341, + 0xc342, 0xc343, 0xc344, 0xc345, 0xc346, 0xc347, 0xc348, 0xc349, + 0xc34a, 0xc34b, 0xc34c, 0xc34d, 0xc34e, 0xc34f, 0xc350, 0xc351, + 0xc352, 0xc353, 0xc354, 0xc355, 0xc356, 0xc357, 0xc358, 0xc359, + 0xc35a, 0xc35b, 0xc35c, 0xc35d, 0xc35e, 0xc35f, 0xc360, 0xc361, + 0xc362, 0xc363, 0xc364, 0xc365, 0xc366, 0xc367, 0xc368, 0xc369, + 0xc36a, 0xc36b, 0xc36c, 0xc36d, 0xc36e, 0xc36f, 0xc370, 0xc371, + 0xc372, 0xc373, 0xc374, 0xc375, 0xc376, 0xc377, 0xc378, 0xc379, + 0xc37a, 0xc37b, 0xc37c, 0xc37d, 0xc37e, 0xc380, 0xc381, 0xc382, + 0xc383, 0xc384, 0xc385, 0xc386, 0xc387, 0xc388, 0xc389, 0xc38a, + 0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f, 0xc390, 0xc391, 0xc392, + 0xc393, 0xc394, 0xc395, 0xc396, 0xc397, 0xc398, 0xc399, 0xc39a, + 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0xc3a0, 0xc440, 0xc441, + 0xc442, 0xc443, 0xc444, 0xc445, 0xc446, 0xc447, 0xc448, 0xc449, + 0xc44a, 0xc44b, 0xc44c, 0xc44d, 0xc44e, 0xc44f, 0xc450, 0xc451, + 0xc452, 0xc453, 0xc454, 0xc455, 0xc456, 0xc457, 0xc458, 0xc459, + 0xc45a, 0xc45b, 0xc45c, 0xc45d, 0xc45e, 0xc45f, 0xc460, 0xc461, + 0xc462, 0xc463, 0xc464, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, + 0xc46a, 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xc46f, 0xc470, 0xc471, + 0xc472, 0xc473, 0xc474, 0xc475, 0xc476, 0xc477, 0xc478, 0xc479, + 0xc47a, 0xc47b, 0xc47c, 0xc47d, 0xc47e, 0xc480, 0xc481, 0xc482, + 0xc483, 0xc484, 0xc485, 0xc486, 0xc487, 0xc488, 0xc489, 0xc48a, + 0xc48b, 0xc48c, 0xc48d, 0xc48e, 0xc48f, 0xc490, 0xc491, 0xc492, + 0xc493, 0xc494, 0xc495, 0xc496, 0xc497, 0xc498, 0xc499, 0xc49a, + 0xc49b, 0xc49c, 0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc540, 0xc541, + 0xc542, 0xc543, 0xc544, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549, + 0xc54a, 0xc54b, 0xc54c, 0xc54d, 0xc54e, 0xc54f, 0xc550, 0xc551, + 0xc552, 0xc553, 0xc554, 0xc555, 0xc556, 0xc557, 0xc558, 0xc559, + 0xc55a, 0xc55b, 0xc55c, 0xc55d, 0xc55e, 0xc55f, 0xc560, 0xc561, + 0xc562, 0xc563, 0xc564, 0xc565, 0xc566, 0xc567, 0xc568, 0xc569, + 0xc56a, 0xc56b, 0xc56c, 0xc56d, 0xc56e, 0xc56f, 0xc570, 0xc571, + 0xc572, 0xc573, 0xc574, 0xc575, 0xc576, 0xc577, 0xc578, 0xc579, + 0xc57a, 0xc57b, 0xc57c, 0xc57d, 0xc57e, 0xc580, 0xc581, 0xc582, + 0xc583, 0xc584, 0xc585, 0xc586, 0xc587, 0xc588, 0xc589, 0xc58a, + 0xc58b, 0xc58c, 0xc58d, 0xc58e, 0xc58f, 0xc590, 0xc591, 0xc592, + 0xc593, 0xc594, 0xc595, 0xc596, 0xc597, 0xc598, 0xc599, 0xc59a, + 0xc59b, 0xc59c, 0xc59d, 0xc59e, 0xc59f, 0xc5a0, 0xc640, 0xc641, + 0xc642, 0xc643, 0xc644, 0xc645, 0xc646, 0xc647, 0xc648, 0xc649, + 0xc64a, 0xc64b, 0xc64c, 0xc64d, 0xc64e, 0xc64f, 0xc650, 0xc651, + 0xc652, 0xc653, 0xc654, 0xc655, 0xc656, 0xc657, 0xc658, 0xc659, + 0xc65a, 0xc65b, 0xc65c, 0xc65d, 0xc65e, 0xc65f, 0xc660, 0xc661, + 0xc662, 0xc663, 0xc664, 0xc665, 0xc666, 0xc667, 0xc668, 0xc669, + 0xc66a, 0xc66b, 0xc66c, 0xc66d, 0xc66e, 0xc66f, 0xc670, 0xc671, + 0xc672, 0xc673, 0xc674, 0xc675, 0xc676, 0xc677, 0xc678, 0xc679, + 0xc67a, 0xc67b, 0xc67c, 0xc67d, 0xc67e, 0xc680, 0xc681, 0xc682, + 0xc683, 0xc684, 0xc685, 0xc686, 0xc687, 0xc688, 0xc689, 0xc68a, + 0xc68b, 0xc68c, 0xc68d, 0xc68e, 0xc68f, 0xc690, 0xc691, 0xc692, + 0xc693, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xc699, 0xc69a, + 0xc69b, 0xc69c, 0xc69d, 0xc69e, 0xc69f, 0xc6a0, 0xc740, 0xc741, + 0xc742, 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, + 0xc74a, 0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751, + 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, + 0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f, 0xc760, 0xc761, + 0xc762, 0xc763, 0xc764, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, + 0xc76a, 0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, + 0xc772, 0xc773, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, + 0xc77a, 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc780, 0xc781, 0xc782, + 0xc783, 0xc784, 0xc785, 0xc786, 0xc787, 0xc788, 0xc789, 0xc78a, + 0xc78b, 0xc78c, 0xc78d, 0xc78e, 0xc78f, 0xc790, 0xc791, 0xc792, + 0xc793, 0xc794, 0xc795, 0xc796, 0xc797, 0xc798, 0xc799, 0xc79a, + 0xc79b, 0xc79c, 0xc79d, 0xc79e, 0xc79f, 0xc7a0, 0xc840, 0xc841, + 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, 0xc847, 0xc848, 0xc849, + 0xc84a, 0xc84b, 0xc84c, 0xc84d, 0xc84e, 0xc84f, 0xc850, 0xc851, + 0xc852, 0xc853, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, + 0xc85a, 0xc85b, 0xc85c, 0xc85d, 0xc85e, 0xc85f, 0xc860, 0xc861, + 0xc862, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869, + 0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870, 0xc871, + 0xc872, 0xc873, 0xc874, 0xc875, 0xc876, 0xc877, 0xc878, 0xc879, + 0xc87a, 0xc87b, 0xc87c, 0xc87d, 0xc87e, 0xc880, 0xc881, 0xc882, + 0xc883, 0xc884, 0xc885, 0xc886, 0xc887, 0xc888, 0xc889, 0xc88a, + 0xc88b, 0xc88c, 0xc88d, 0xc88e, 0xc88f, 0xc890, 0xc891, 0xc892, + 0xc893, 0xc894, 0xc895, 0xc896, 0xc897, 0xc898, 0xc899, 0xc89a, + 0xc89b, 0xc89c, 0xc89d, 0xc89e, 0xc89f, 0xc8a0, 0xc940, 0xc941, + 0xc942, 0xc943, 0xc944, 0xc945, 0xc946, 0xc947, 0xc948, 0xc949, + 0xc94a, 0xc94b, 0xc94c, 0xc94d, 0xc94e, 0xc94f, 0xc950, 0xc951, + 0xc952, 0xc953, 0xc954, 0xc955, 0xc956, 0xc957, 0xc958, 0xc959, + 0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e, 0xc95f, 0xc960, 0xc961, + 0xc962, 0xc963, 0xc964, 0xc965, 0xc966, 0xc967, 0xc968, 0xc969, + 0xc96a, 0xc96b, 0xc96c, 0xc96d, 0xc96e, 0xc96f, 0xc970, 0xc971, + 0xc972, 0xc973, 0xc974, 0xc975, 0xc976, 0xc977, 0xc978, 0xc979, + 0xc97a, 0xc97b, 0xc97c, 0xc97d, 0xc97e, 0xc980, 0xc981, 0xc982, + 0xc983, 0xc984, 0xc985, 0xc986, 0xc987, 0xc988, 0xc989, 0xc98a, + 0xc98b, 0xc98c, 0xc98d, 0xc98e, 0xc98f, 0xc990, 0xc991, 0xc992, + 0xc993, 0xc994, 0xc995, 0xc996, 0xc997, 0xc998, 0xc999, 0xc99a, + 0xc99b, 0xc99c, 0xc99d, 0xc99e, 0xc99f, 0xc9a0, 0xca40, 0xca41, + 0xca42, 0xca43, 0xca44, 0xca45, 0xca46, 0xca47, 0xca48, 0xca49, + 0xca4a, 0xca4b, 0xca4c, 0xca4d, 0xca4e, 0xca4f, 0xca50, 0xca51, + 0xca52, 0xca53, 0xca54, 0xca55, 0xca56, 0xca57, 0xca58, 0xca59, + 0xca5a, 0xca5b, 0xca5c, 0xca5d, 0xca5e, 0xca5f, 0xca60, 0xca61, + 0xca62, 0xca63, 0xca64, 0xca65, 0xca66, 0xca67, 0xca68, 0xca69, + 0xca6a, 0xca6b, 0xca6c, 0xca6d, 0xca6e, 0xca6f, 0xca70, 0xca71, + 0xca72, 0xca73, 0xca74, 0xca75, 0xca76, 0xca77, 0xca78, 0xca79, + 0xca7a, 0xca7b, 0xca7c, 0xca7d, 0xca7e, 0xca80, 0xca81, 0xca82, + 0xca83, 0xca84, 0xca85, 0xca86, 0xca87, 0xca88, 0xca89, 0xca8a, + 0xca8b, 0xca8c, 0xca8d, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92, + 0xca93, 0xca94, 0xca95, 0xca96, 0xca97, 0xca98, 0xca99, 0xca9a, + 0xca9b, 0xca9c, 0xca9d, 0xca9e, 0xca9f, 0xcaa0, 0xcb40, 0xcb41, + 0xcb42, 0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, 0xcb48, 0xcb49, + 0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e, 0xcb4f, 0xcb50, 0xcb51, + 0xcb52, 0xcb53, 0xcb54, 0xcb55, 0xcb56, 0xcb57, 0xcb58, 0xcb59, + 0xcb5a, 0xcb5b, 0xcb5c, 0xcb5d, 0xcb5e, 0xcb5f, 0xcb60, 0xcb61, + 0xcb62, 0xcb63, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xcb69, + 0xcb6a, 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, 0xcb70, 0xcb71, + 0xcb72, 0xcb73, 0xcb74, 0xcb75, 0xcb76, 0xcb77, 0xcb78, 0xcb79, + 0xcb7a, 0xcb7b, 0xcb7c, 0xcb7d, 0xcb7e, 0xcb80, 0xcb81, 0xcb82, + 0xcb83, 0xcb84, 0xcb85, 0xcb86, 0xcb87, 0xcb88, 0xcb89, 0xcb8a, + 0xcb8b, 0xcb8c, 0xcb8d, 0xcb8e, 0xcb8f, 0xcb90, 0xcb91, 0xcb92, + 0xcb93, 0xcb94, 0xcb95, 0xcb96, 0xcb97, 0xcb98, 0xcb99, 0xcb9a, + 0xcb9b, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f, 0xcba0, 0xcc40, 0xcc41, + 0xcc42, 0xcc43, 0xcc44, 0xcc45, 0xcc46, 0xcc47, 0xcc48, 0xcc49, + 0xcc4a, 0xcc4b, 0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f, 0xcc50, 0xcc51, + 0xcc52, 0xcc53, 0xcc54, 0xcc55, 0xcc56, 0xcc57, 0xcc58, 0xcc59, + 0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0xcc60, 0xcc61, + 0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66, 0xcc67, 0xcc68, 0xcc69, + 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e, 0xcc6f, 0xcc70, 0xcc71, + 0xcc72, 0xcc73, 0xcc74, 0xcc75, 0xcc76, 0xcc77, 0xcc78, 0xcc79, + 0xcc7a, 0xcc7b, 0xcc7c, 0xcc7d, 0xcc7e, 0xcc80, 0xcc81, 0xcc82, + 0xcc83, 0xcc84, 0xcc85, 0xcc86, 0xcc87, 0xcc88, 0xcc89, 0xcc8a, + 0xcc8b, 0xcc8c, 0xcc8d, 0xcc8e, 0xcc8f, 0xcc90, 0xcc91, 0xcc92, + 0xcc93, 0xcc94, 0xcc95, 0xcc96, 0xcc97, 0xcc98, 0xcc99, 0xcc9a, + 0xcc9b, 0xcc9c, 0xcc9d, 0xcc9e, 0xcc9f, 0xcca0, 0xcd40, 0xcd41, + 0xcd42, 0xcd43, 0xcd44, 0xcd45, 0xcd46, 0xcd47, 0xcd48, 0xcd49, + 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e, 0xcd4f, 0xcd50, 0xcd51, + 0xcd52, 0xcd53, 0xcd54, 0xcd55, 0xcd56, 0xcd57, 0xcd58, 0xcd59, + 0xcd5a, 0xcd5b, 0xcd5c, 0xcd5d, 0xcd5e, 0xcd5f, 0xcd60, 0xcd61, + 0xcd62, 0xcd63, 0xcd64, 0xcd65, 0xcd66, 0xcd67, 0xcd68, 0xcd69, + 0xcd6a, 0xcd6b, 0xcd6c, 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, 0xcd71, + 0xcd72, 0xcd73, 0xcd74, 0xcd75, 0xcd76, 0xcd77, 0xcd78, 0xcd79, + 0xcd7a, 0xcd7b, 0xcd7c, 0xcd7d, 0xcd7e, 0xcd80, 0xcd81, 0xcd82, + 0xcd83, 0xcd84, 0xcd85, 0xcd86, 0xcd87, 0xcd88, 0xcd89, 0xcd8a, + 0xcd8b, 0xcd8c, 0xcd8d, 0xcd8e, 0xcd8f, 0xcd90, 0xcd91, 0xcd92, + 0xcd93, 0xcd94, 0xcd95, 0xcd96, 0xcd97, 0xcd98, 0xcd99, 0xcd9a, + 0xcd9b, 0xcd9c, 0xcd9d, 0xcd9e, 0xcd9f, 0xcda0, 0xce40, 0xce41, + 0xce42, 0xce43, 0xce44, 0xce45, 0xce46, 0xce47, 0xce48, 0xce49, + 0xce4a, 0xce4b, 0xce4c, 0xce4d, 0xce4e, 0xce4f, 0xce50, 0xce51, + 0xce52, 0xce53, 0xce54, 0xce55, 0xce56, 0xce57, 0xce58, 0xce59, + 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e, 0xce5f, 0xce60, 0xce61, + 0xce62, 0xce63, 0xce64, 0xce65, 0xce66, 0xce67, 0xce68, 0xce69, + 0xce6a, 0xce6b, 0xce6c, 0xce6d, 0xce6e, 0xce6f, 0xce70, 0xce71, + 0xce72, 0xce73, 0xce74, 0xce75, 0xce76, 0xce77, 0xce78, 0xce79, + 0xce7a, 0xce7b, 0xce7c, 0xce7d, 0xce7e, 0xce80, 0xce81, 0xce82, + 0xce83, 0xce84, 0xce85, 0xce86, 0xce87, 0xce88, 0xce89, 0xce8a, + 0xce8b, 0xce8c, 0xce8d, 0xce8e, 0xce8f, 0xce90, 0xce91, 0xce92, + 0xce93, 0xce94, 0xce95, 0xce96, 0xce97, 0xce98, 0xce99, 0xce9a, + 0xce9b, 0xce9c, 0xce9d, 0xce9e, 0xce9f, 0xcea0, 0xcf40, 0xcf41, + 0xcf42, 0xcf43, 0xcf44, 0xcf45, 0xcf46, 0xcf47, 0xcf48, 0xcf49, + 0xcf4a, 0xcf4b, 0xcf4c, 0xcf4d, 0xcf4e, 0xcf4f, 0xcf50, 0xcf51, + 0xcf52, 0xcf53, 0xcf54, 0xcf55, 0xcf56, 0xcf57, 0xcf58, 0xcf59, + 0xcf5a, 0xcf5b, 0xcf5c, 0xcf5d, 0xcf5e, 0xcf5f, 0xcf60, 0xcf61, + 0xcf62, 0xcf63, 0xcf64, 0xcf65, 0xcf66, 0xcf67, 0xcf68, 0xcf69, + 0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xcf6e, 0xcf6f, 0xcf70, 0xcf71, + 0xcf72, 0xcf73, 0xcf74, 0xcf75, 0xcf76, 0xcf77, 0xcf78, 0xcf79, + 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, 0xcf7e, 0xcf80, 0xcf81, 0xcf82, + 0xcf83, 0xcf84, 0xcf85, 0xcf86, 0xcf87, 0xcf88, 0xcf89, 0xcf8a, + 0xcf8b, 0xcf8c, 0xcf8d, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92, + 0xcf93, 0xcf94, 0xcf95, 0xcf96, 0xcf97, 0xcf98, 0xcf99, 0xcf9a, + 0xcf9b, 0xcf9c, 0xcf9d, 0xcf9e, 0xcf9f, 0xcfa0, 0xd040, 0xd041, + 0xd042, 0xd043, 0xd044, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049, + 0xd04a, 0xd04b, 0xd04c, 0xd04d, 0xd04e, 0xd04f, 0xd050, 0xd051, + 0xd052, 0xd053, 0xd054, 0xd055, 0xd056, 0xd057, 0xd058, 0xd059, + 0xd05a, 0xd05b, 0xd05c, 0xd05d, 0xd05e, 0xd05f, 0xd060, 0xd061, + 0xd062, 0xd063, 0xd064, 0xd065, 0xd066, 0xd067, 0xd068, 0xd069, + 0xd06a, 0xd06b, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070, 0xd071, + 0xd072, 0xd073, 0xd074, 0xd075, 0xd076, 0xd077, 0xd078, 0xd079, + 0xd07a, 0xd07b, 0xd07c, 0xd07d, 0xd07e, 0xd080, 0xd081, 0xd082, + 0xd083, 0xd084, 0xd085, 0xd086, 0xd087, 0xd088, 0xd089, 0xd08a, + 0xd08b, 0xd08c, 0xd08d, 0xd08e, 0xd08f, 0xd090, 0xd091, 0xd092, + 0xd093, 0xd094, 0xd095, 0xd096, 0xd097, 0xd098, 0xd099, 0xd09a, + 0xd09b, 0xd09c, 0xd09d, 0xd09e, 0xd09f, 0xd0a0, 0xd140, 0xd141, + 0xd142, 0xd143, 0xd144, 0xd145, 0xd146, 0xd147, 0xd148, 0xd149, + 0xd14a, 0xd14b, 0xd14c, 0xd14d, 0xd14e, 0xd14f, 0xd150, 0xd151, + 0xd152, 0xd153, 0xd154, 0xd155, 0xd156, 0xd157, 0xd158, 0xd159, + 0xd15a, 0xd15b, 0xd15c, 0xd15d, 0xd15e, 0xd15f, 0xd160, 0xd161, + 0xd162, 0xd163, 0xd164, 0xd165, 0xd166, 0xd167, 0xd168, 0xd169, + 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e, 0xd16f, 0xd170, 0xd171, + 0xd172, 0xd173, 0xd174, 0xd175, 0xd176, 0xd177, 0xd178, 0xd179, + 0xd17a, 0xd17b, 0xd17c, 0xd17d, 0xd17e, 0xd180, 0xd181, 0xd182, + 0xd183, 0xd184, 0xd185, 0xd186, 0xd187, 0xd188, 0xd189, 0xd18a, + 0xd18b, 0xd18c, 0xd18d, 0xd18e, 0xd18f, 0xd190, 0xd191, 0xd192, + 0xd193, 0xd194, 0xd195, 0xd196, 0xd197, 0xd198, 0xd199, 0xd19a, + 0xd19b, 0xd19c, 0xd19d, 0xd19e, 0xd19f, 0xd1a0, 0xd240, 0xd241, + 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, 0xd248, 0xd249, + 0xd24a, 0xd24b, 0xd24c, 0xd24d, 0xd24e, 0xd24f, 0xd250, 0xd251, + 0xd252, 0xd253, 0xd254, 0xd255, 0xd256, 0xd257, 0xd258, 0xd259, + 0xd25a, 0xd25b, 0xd25c, 0xd25d, 0xd25e, 0xd25f, 0xd260, 0xd261, + 0xd262, 0xd263, 0xd264, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269, + 0xd26a, 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270, 0xd271, + 0xd272, 0xd273, 0xd274, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279, + 0xd27a, 0xd27b, 0xd27c, 0xd27d, 0xd27e, 0xd280, 0xd281, 0xd282, + 0xd283, 0xd284, 0xd285, 0xd286, 0xd287, 0xd288, 0xd289, 0xd28a, + 0xd28b, 0xd28c, 0xd28d, 0xd28e, 0xd28f, 0xd290, 0xd291, 0xd292, + 0xd293, 0xd294, 0xd295, 0xd296, 0xd297, 0xd298, 0xd299, 0xd29a, + 0xd29b, 0xd29c, 0xd29d, 0xd29e, 0xd29f, 0xd2a0, 0xd340, 0xd341, + 0xd342, 0xd343, 0xd344, 0xd345, 0xd346, 0xd347, 0xd348, 0xd349, + 0xd34a, 0xd34b, 0xd34c, 0xd34d, 0xd34e, 0xd34f, 0xd350, 0xd351, + 0xd352, 0xd353, 0xd354, 0xd355, 0xd356, 0xd357, 0xd358, 0xd359, + 0xd35a, 0xd35b, 0xd35c, 0xd35d, 0xd35e, 0xd35f, 0xd360, 0xd361, + 0xd362, 0xd363, 0xd364, 0xd365, 0xd366, 0xd367, 0xd368, 0xd369, + 0xd36a, 0xd36b, 0xd36c, 0xd36d, 0xd36e, 0xd36f, 0xd370, 0xd371, + 0xd372, 0xd373, 0xd374, 0xd375, 0xd376, 0xd377, 0xd378, 0xd379, + 0xd37a, 0xd37b, 0xd37c, 0xd37d, 0xd37e, 0xd380, 0xd381, 0xd382, + 0xd383, 0xd384, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a, + 0xd38b, 0xd38c, 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391, 0xd392, + 0xd393, 0xd394, 0xd395, 0xd396, 0xd397, 0xd398, 0xd399, 0xd39a, + 0xd39b, 0xd39c, 0xd39d, 0xd39e, 0xd39f, 0xd3a0, 0xd440, 0xd441, + 0xd442, 0xd443, 0xd444, 0xd445, 0xd446, 0xd447, 0xd448, 0xd449, + 0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e, 0xd44f, 0xd450, 0xd451, + 0xd452, 0xd453, 0xd454, 0xd455, 0xd456, 0xd457, 0xd458, 0xd459, + 0xd45a, 0xd45b, 0xd45c, 0xd45d, 0xd45e, 0xd45f, 0xd460, 0xd461, + 0xd462, 0xd463, 0xd464, 0xd465, 0xd466, 0xd467, 0xd468, 0xd469, + 0xd46a, 0xd46b, 0xd46c, 0xd46d, 0xd46e, 0xd46f, 0xd470, 0xd471, + 0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, 0xd478, 0xd479, + 0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e, 0xd480, 0xd481, 0xd482, + 0xd483, 0xd484, 0xd485, 0xd486, 0xd487, 0xd488, 0xd489, 0xd48a, + 0xd48b, 0xd48c, 0xd48d, 0xd48e, 0xd48f, 0xd490, 0xd491, 0xd492, + 0xd493, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, 0xd499, 0xd49a, + 0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f, 0xd4a0, 0xd540, 0xd541, + 0xd542, 0xd543, 0xd544, 0xd545, 0xd546, 0xd547, 0xd548, 0xd549, + 0xd54a, 0xd54b, 0xd54c, 0xd54d, 0xd54e, 0xd54f, 0xd550, 0xd551, + 0xd552, 0xd553, 0xd554, 0xd555, 0xd556, 0xd557, 0xd558, 0xd559, + 0xd55a, 0xd55b, 0xd55c, 0xd55d, 0xd55e, 0xd55f, 0xd560, 0xd561, + 0xd562, 0xd563, 0xd564, 0xd565, 0xd566, 0xd567, 0xd568, 0xd569, + 0xd56a, 0xd56b, 0xd56c, 0xd56d, 0xd56e, 0xd56f, 0xd570, 0xd571, + 0xd572, 0xd573, 0xd574, 0xd575, 0xd576, 0xd577, 0xd578, 0xd579, + 0xd57a, 0xd57b, 0xd57c, 0xd57d, 0xd57e, 0xd580, 0xd581, 0xd582, + 0xd583, 0xd584, 0xd585, 0xd586, 0xd587, 0xd588, 0xd589, 0xd58a, + 0xd58b, 0xd58c, 0xd58d, 0xd58e, 0xd58f, 0xd590, 0xd591, 0xd592, + 0xd593, 0xd594, 0xd595, 0xd596, 0xd597, 0xd598, 0xd599, 0xd59a, + 0xd59b, 0xd59c, 0xd59d, 0xd59e, 0xd59f, 0xd5a0, 0xd640, 0xd641, + 0xd642, 0xd643, 0xd644, 0xd645, 0xd646, 0xd647, 0xd648, 0xd649, + 0xd64a, 0xd64b, 0xd64c, 0xd64d, 0xd64e, 0xd64f, 0xd650, 0xd651, + 0xd652, 0xd653, 0xd654, 0xd655, 0xd656, 0xd657, 0xd658, 0xd659, + 0xd65a, 0xd65b, 0xd65c, 0xd65d, 0xd65e, 0xd65f, 0xd660, 0xd661, + 0xd662, 0xd663, 0xd664, 0xd665, 0xd666, 0xd667, 0xd668, 0xd669, + 0xd66a, 0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0xd670, 0xd671, + 0xd672, 0xd673, 0xd674, 0xd675, 0xd676, 0xd677, 0xd678, 0xd679, + 0xd67a, 0xd67b, 0xd67c, 0xd67d, 0xd67e, 0xd680, 0xd681, 0xd682, + 0xd683, 0xd684, 0xd685, 0xd686, 0xd687, 0xd688, 0xd689, 0xd68a, + 0xd68b, 0xd68c, 0xd68d, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd692, + 0xd693, 0xd694, 0xd695, 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a, + 0xd69b, 0xd69c, 0xd69d, 0xd69e, 0xd69f, 0xd6a0, 0xd740, 0xd741, + 0xd742, 0xd743, 0xd744, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749, + 0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f, 0xd750, 0xd751, + 0xd752, 0xd753, 0xd754, 0xd755, 0xd756, 0xd757, 0xd758, 0xd759, + 0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e, 0xd75f, 0xd760, 0xd761, + 0xd762, 0xd763, 0xd764, 0xd765, 0xd766, 0xd767, 0xd768, 0xd769, + 0xd76a, 0xd76b, 0xd76c, 0xd76d, 0xd76e, 0xd76f, 0xd770, 0xd771, + 0xd772, 0xd773, 0xd774, 0xd775, 0xd776, 0xd777, 0xd778, 0xd779, + 0xd77a, 0xd77b, 0xd77c, 0xd77d, 0xd77e, 0xd780, 0xd781, 0xd782, + 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0xd788, 0xd789, 0xd78a, + 0xd78b, 0xd78c, 0xd78d, 0xd78e, 0xd78f, 0xd790, 0xd791, 0xd792, + 0xd793, 0xd794, 0xd795, 0xd796, 0xd797, 0xd798, 0xd799, 0xd79a, + 0xd79b, 0xd79c, 0xd79d, 0xd79e, 0xd79f, 0xd7a0, 0xd840, 0xd841, + 0xd842, 0xd843, 0xd844, 0xd845, 0xd846, 0xd847, 0xd848, 0xd849, + 0xd84a, 0xd84b, 0xd84c, 0xd84d, 0xd84e, 0xd84f, 0xd850, 0xd851, + 0xd852, 0xd853, 0xd854, 0xd855, 0xd856, 0xd857, 0xd858, 0xd859, + 0xd85a, 0xd85b, 0xd85c, 0xd85d, 0xd85e, 0xd85f, 0xd860, 0xd861, + 0xd862, 0xd863, 0xd864, 0xd865, 0xd866, 0xd867, 0xd868, 0xd869, + 0xd86a, 0xd86b, 0xd86c, 0xd86d, 0xd86e, 0xd86f, 0xd870, 0xd871, + 0xd872, 0xd873, 0xd874, 0xd875, 0xd876, 0xd877, 0xd878, 0xd879, + 0xd87a, 0xd87b, 0xd87c, 0xd87d, 0xd87e, 0xd880, 0xd881, 0xd882, + 0xd883, 0xd884, 0xd885, 0xd886, 0xd887, 0xd888, 0xd889, 0xd88a, + 0xd88b, 0xd88c, 0xd88d, 0xd88e, 0xd88f, 0xd890, 0xd891, 0xd892, + 0xd893, 0xd894, 0xd895, 0xd896, 0xd897, 0xd898, 0xd899, 0xd89a, + 0xd89b, 0xd89c, 0xd89d, 0xd89e, 0xd89f, 0xd8a0, 0xd940, 0xd941, + 0xd942, 0xd943, 0xd944, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949, + 0xd94a, 0xd94b, 0xd94c, 0xd94d, 0xd94e, 0xd94f, 0xd950, 0xd951, + 0xd952, 0xd953, 0xd954, 0xd955, 0xd956, 0xd957, 0xd958, 0xd959, + 0xd95a, 0xd95b, 0xd95c, 0xd95d, 0xd95e, 0xd95f, 0xd960, 0xd961, + 0xd962, 0xd963, 0xd964, 0xd965, 0xd966, 0xd967, 0xd968, 0xd969, + 0xd96a, 0xd96b, 0xd96c, 0xd96d, 0xd96e, 0xd96f, 0xd970, 0xd971, + 0xd972, 0xd973, 0xd974, 0xd975, 0xd976, 0xd977, 0xd978, 0xd979, + 0xd97a, 0xd97b, 0xd97c, 0xd97d, 0xd97e, 0xd980, 0xd981, 0xd982, + 0xd983, 0xd984, 0xd985, 0xd986, 0xd987, 0xd988, 0xd989, 0xd98a, + 0xd98b, 0xd98c, 0xd98d, 0xd98e, 0xd98f, 0xd990, 0xd991, 0xd992, + 0xd993, 0xd994, 0xd995, 0xd996, 0xd997, 0xd998, 0xd999, 0xd99a, + 0xd99b, 0xd99c, 0xd99d, 0xd99e, 0xd99f, 0xd9a0, 0xda40, 0xda41, + 0xda42, 0xda43, 0xda44, 0xda45, 0xda46, 0xda47, 0xda48, 0xda49, + 0xda4a, 0xda4b, 0xda4c, 0xda4d, 0xda4e, 0xda4f, 0xda50, 0xda51, + 0xda52, 0xda53, 0xda54, 0xda55, 0xda56, 0xda57, 0xda58, 0xda59, + 0xda5a, 0xda5b, 0xda5c, 0xda5d, 0xda5e, 0xda5f, 0xda60, 0xda61, + 0xda62, 0xda63, 0xda64, 0xda65, 0xda66, 0xda67, 0xda68, 0xda69, + 0xda6a, 0xda6b, 0xda6c, 0xda6d, 0xda6e, 0xda6f, 0xda70, 0xda71, + 0xda72, 0xda73, 0xda74, 0xda75, 0xda76, 0xda77, 0xda78, 0xda79, + 0xda7a, 0xda7b, 0xda7c, 0xda7d, 0xda7e, 0xda80, 0xda81, 0xda82, + 0xda83, 0xda84, 0xda85, 0xda86, 0xda87, 0xda88, 0xda89, 0xda8a, + 0xda8b, 0xda8c, 0xda8d, 0xda8e, 0xda8f, 0xda90, 0xda91, 0xda92, + 0xda93, 0xda94, 0xda95, 0xda96, 0xda97, 0xda98, 0xda99, 0xda9a, + 0xda9b, 0xda9c, 0xda9d, 0xda9e, 0xda9f, 0xdaa0, 0xdb40, 0xdb41, + 0xdb42, 0xdb43, 0xdb44, 0xdb45, 0xdb46, 0xdb47, 0xdb48, 0xdb49, + 0xdb4a, 0xdb4b, 0xdb4c, 0xdb4d, 0xdb4e, 0xdb4f, 0xdb50, 0xdb51, + 0xdb52, 0xdb53, 0xdb54, 0xdb55, 0xdb56, 0xdb57, 0xdb58, 0xdb59, + 0xdb5a, 0xdb5b, 0xdb5c, 0xdb5d, 0xdb5e, 0xdb5f, 0xdb60, 0xdb61, + 0xdb62, 0xdb63, 0xdb64, 0xdb65, 0xdb66, 0xdb67, 0xdb68, 0xdb69, + 0xdb6a, 0xdb6b, 0xdb6c, 0xdb6d, 0xdb6e, 0xdb6f, 0xdb70, 0xdb71, + 0xdb72, 0xdb73, 0xdb74, 0xdb75, 0xdb76, 0xdb77, 0xdb78, 0xdb79, + 0xdb7a, 0xdb7b, 0xdb7c, 0xdb7d, 0xdb7e, 0xdb80, 0xdb81, 0xdb82, + 0xdb83, 0xdb84, 0xdb85, 0xdb86, 0xdb87, 0xdb88, 0xdb89, 0xdb8a, + 0xdb8b, 0xdb8c, 0xdb8d, 0xdb8e, 0xdb8f, 0xdb90, 0xdb91, 0xdb92, + 0xdb93, 0xdb94, 0xdb95, 0xdb96, 0xdb97, 0xdb98, 0xdb99, 0xdb9a, + 0xdb9b, 0xdb9c, 0xdb9d, 0xdb9e, 0xdb9f, 0xdba0, 0xdc40, 0xdc41, + 0xdc42, 0xdc43, 0xdc44, 0xdc45, 0xdc46, 0xdc47, 0xdc48, 0xdc49, + 0xdc4a, 0xdc4b, 0xdc4c, 0xdc4d, 0xdc4e, 0xdc4f, 0xdc50, 0xdc51, + 0xdc52, 0xdc53, 0xdc54, 0xdc55, 0xdc56, 0xdc57, 0xdc58, 0xdc59, + 0xdc5a, 0xdc5b, 0xdc5c, 0xdc5d, 0xdc5e, 0xdc5f, 0xdc60, 0xdc61, + 0xdc62, 0xdc63, 0xdc64, 0xdc65, 0xdc66, 0xdc67, 0xdc68, 0xdc69, + 0xdc6a, 0xdc6b, 0xdc6c, 0xdc6d, 0xdc6e, 0xdc6f, 0xdc70, 0xdc71, + 0xdc72, 0xdc73, 0xdc74, 0xdc75, 0xdc76, 0xdc77, 0xdc78, 0xdc79, + 0xdc7a, 0xdc7b, 0xdc7c, 0xdc7d, 0xdc7e, 0xdc80, 0xdc81, 0xdc82, + 0xdc83, 0xdc84, 0xdc85, 0xdc86, 0xdc87, 0xdc88, 0xdc89, 0xdc8a, + 0xdc8b, 0xdc8c, 0xdc8d, 0xdc8e, 0xdc8f, 0xdc90, 0xdc91, 0xdc92, + 0xdc93, 0xdc94, 0xdc95, 0xdc96, 0xdc97, 0xdc98, 0xdc99, 0xdc9a, + 0xdc9b, 0xdc9c, 0xdc9d, 0xdc9e, 0xdc9f, 0xdca0, 0xdd40, 0xdd41, + 0xdd42, 0xdd43, 0xdd44, 0xdd45, 0xdd46, 0xdd47, 0xdd48, 0xdd49, + 0xdd4a, 0xdd4b, 0xdd4c, 0xdd4d, 0xdd4e, 0xdd4f, 0xdd50, 0xdd51, + 0xdd52, 0xdd53, 0xdd54, 0xdd55, 0xdd56, 0xdd57, 0xdd58, 0xdd59, + 0xdd5a, 0xdd5b, 0xdd5c, 0xdd5d, 0xdd5e, 0xdd5f, 0xdd60, 0xdd61, + 0xdd62, 0xdd63, 0xdd64, 0xdd65, 0xdd66, 0xdd67, 0xdd68, 0xdd69, + 0xdd6a, 0xdd6b, 0xdd6c, 0xdd6d, 0xdd6e, 0xdd6f, 0xdd70, 0xdd71, + 0xdd72, 0xdd73, 0xdd74, 0xdd75, 0xdd76, 0xdd77, 0xdd78, 0xdd79, + 0xdd7a, 0xdd7b, 0xdd7c, 0xdd7d, 0xdd7e, 0xdd80, 0xdd81, 0xdd82, + 0xdd83, 0xdd84, 0xdd85, 0xdd86, 0xdd87, 0xdd88, 0xdd89, 0xdd8a, + 0xdd8b, 0xdd8c, 0xdd8d, 0xdd8e, 0xdd8f, 0xdd90, 0xdd91, 0xdd92, + 0xdd93, 0xdd94, 0xdd95, 0xdd96, 0xdd97, 0xdd98, 0xdd99, 0xdd9a, + 0xdd9b, 0xdd9c, 0xdd9d, 0xdd9e, 0xdd9f, 0xdda0, 0xde40, 0xde41, + 0xde42, 0xde43, 0xde44, 0xde45, 0xde46, 0xde47, 0xde48, 0xde49, + 0xde4a, 0xde4b, 0xde4c, 0xde4d, 0xde4e, 0xde4f, 0xde50, 0xde51, + 0xde52, 0xde53, 0xde54, 0xde55, 0xde56, 0xde57, 0xde58, 0xde59, + 0xde5a, 0xde5b, 0xde5c, 0xde5d, 0xde5e, 0xde5f, 0xde60, 0xde61, + 0xde62, 0xde63, 0xde64, 0xde65, 0xde66, 0xde67, 0xde68, 0xde69, + 0xde6a, 0xde6b, 0xde6c, 0xde6d, 0xde6e, 0xde6f, 0xde70, 0xde71, + 0xde72, 0xde73, 0xde74, 0xde75, 0xde76, 0xde77, 0xde78, 0xde79, + 0xde7a, 0xde7b, 0xde7c, 0xde7d, 0xde7e, 0xde80, 0xde81, 0xde82, + 0xde83, 0xde84, 0xde85, 0xde86, 0xde87, 0xde88, 0xde89, 0xde8a, + 0xde8b, 0xde8c, 0xde8d, 0xde8e, 0xde8f, 0xde90, 0xde91, 0xde92, + 0xde93, 0xde94, 0xde95, 0xde96, 0xde97, 0xde98, 0xde99, 0xde9a, + 0xde9b, 0xde9c, 0xde9d, 0xde9e, 0xde9f, 0xdea0, 0xdf40, 0xdf41, + 0xdf42, 0xdf43, 0xdf44, 0xdf45, 0xdf46, 0xdf47, 0xdf48, 0xdf49, + 0xdf4a, 0xdf4b, 0xdf4c, 0xdf4d, 0xdf4e, 0xdf4f, 0xdf50, 0xdf51, + 0xdf52, 0xdf53, 0xdf54, 0xdf55, 0xdf56, 0xdf57, 0xdf58, 0xdf59, + 0xdf5a, 0xdf5b, 0xdf5c, 0xdf5d, 0xdf5e, 0xdf5f, 0xdf60, 0xdf61, + 0xdf62, 0xdf63, 0xdf64, 0xdf65, 0xdf66, 0xdf67, 0xdf68, 0xdf69, + 0xdf6a, 0xdf6b, 0xdf6c, 0xdf6d, 0xdf6e, 0xdf6f, 0xdf70, 0xdf71, + 0xdf72, 0xdf73, 0xdf74, 0xdf75, 0xdf76, 0xdf77, 0xdf78, 0xdf79, + 0xdf7a, 0xdf7b, 0xdf7c, 0xdf7d, 0xdf7e, 0xdf80, 0xdf81, 0xdf82, + 0xdf83, 0xdf84, 0xdf85, 0xdf86, 0xdf87, 0xdf88, 0xdf89, 0xdf8a, + 0xdf8b, 0xdf8c, 0xdf8d, 0xdf8e, 0xdf8f, 0xdf90, 0xdf91, 0xdf92, + 0xdf93, 0xdf94, 0xdf95, 0xdf96, 0xdf97, 0xdf98, 0xdf99, 0xdf9a, + 0xdf9b, 0xdf9c, 0xdf9d, 0xdf9e, 0xdf9f, 0xdfa0, 0xe040, 0xe041, + 0xe042, 0xe043, 0xe044, 0xe045, 0xe046, 0xe047, 0xe048, 0xe049, + 0xe04a, 0xe04b, 0xe04c, 0xe04d, 0xe04e, 0xe04f, 0xe050, 0xe051, + 0xe052, 0xe053, 0xe054, 0xe055, 0xe056, 0xe057, 0xe058, 0xe059, + 0xe05a, 0xe05b, 0xe05c, 0xe05d, 0xe05e, 0xe05f, 0xe060, 0xe061, + 0xe062, 0xe063, 0xe064, 0xe065, 0xe066, 0xe067, 0xe068, 0xe069, + 0xe06a, 0xe06b, 0xe06c, 0xe06d, 0xe06e, 0xe06f, 0xe070, 0xe071, + 0xe072, 0xe073, 0xe074, 0xe075, 0xe076, 0xe077, 0xe078, 0xe079, + 0xe07a, 0xe07b, 0xe07c, 0xe07d, 0xe07e, 0xe080, 0xe081, 0xe082, + 0xe083, 0xe084, 0xe085, 0xe086, 0xe087, 0xe088, 0xe089, 0xe08a, + 0xe08b, 0xe08c, 0xe08d, 0xe08e, 0xe08f, 0xe090, 0xe091, 0xe092, + 0xe093, 0xe094, 0xe095, 0xe096, 0xe097, 0xe098, 0xe099, 0xe09a, + 0xe09b, 0xe09c, 0xe09d, 0xe09e, 0xe09f, 0xe0a0, 0xe140, 0xe141, + 0xe142, 0xe143, 0xe144, 0xe145, 0xe146, 0xe147, 0xe148, 0xe149, + 0xe14a, 0xe14b, 0xe14c, 0xe14d, 0xe14e, 0xe14f, 0xe150, 0xe151, + 0xe152, 0xe153, 0xe154, 0xe155, 0xe156, 0xe157, 0xe158, 0xe159, + 0xe15a, 0xe15b, 0xe15c, 0xe15d, 0xe15e, 0xe15f, 0xe160, 0xe161, + 0xe162, 0xe163, 0xe164, 0xe165, 0xe166, 0xe167, 0xe168, 0xe169, + 0xe16a, 0xe16b, 0xe16c, 0xe16d, 0xe16e, 0xe16f, 0xe170, 0xe171, + 0xe172, 0xe173, 0xe174, 0xe175, 0xe176, 0xe177, 0xe178, 0xe179, + 0xe17a, 0xe17b, 0xe17c, 0xe17d, 0xe17e, 0xe180, 0xe181, 0xe182, + 0xe183, 0xe184, 0xe185, 0xe186, 0xe187, 0xe188, 0xe189, 0xe18a, + 0xe18b, 0xe18c, 0xe18d, 0xe18e, 0xe18f, 0xe190, 0xe191, 0xe192, + 0xe193, 0xe194, 0xe195, 0xe196, 0xe197, 0xe198, 0xe199, 0xe19a, + 0xe19b, 0xe19c, 0xe19d, 0xe19e, 0xe19f, 0xe1a0, 0xe240, 0xe241, + 0xe242, 0xe243, 0xe244, 0xe245, 0xe246, 0xe247, 0xe248, 0xe249, + 0xe24a, 0xe24b, 0xe24c, 0xe24d, 0xe24e, 0xe24f, 0xe250, 0xe251, + 0xe252, 0xe253, 0xe254, 0xe255, 0xe256, 0xe257, 0xe258, 0xe259, + 0xe25a, 0xe25b, 0xe25c, 0xe25d, 0xe25e, 0xe25f, 0xe260, 0xe261, + 0xe262, 0xe263, 0xe264, 0xe265, 0xe266, 0xe267, 0xe268, 0xe269, + 0xe26a, 0xe26b, 0xe26c, 0xe26d, 0xe26e, 0xe26f, 0xe270, 0xe271, + 0xe272, 0xe273, 0xe274, 0xe275, 0xe276, 0xe277, 0xe278, 0xe279, + 0xe27a, 0xe27b, 0xe27c, 0xe27d, 0xe27e, 0xe280, 0xe281, 0xe282, + 0xe283, 0xe284, 0xe285, 0xe286, 0xe287, 0xe288, 0xe289, 0xe28a, + 0xe28b, 0xe28c, 0xe28d, 0xe28e, 0xe28f, 0xe290, 0xe291, 0xe292, + 0xe293, 0xe294, 0xe295, 0xe296, 0xe297, 0xe298, 0xe299, 0xe29a, + 0xe29b, 0xe29c, 0xe29d, 0xe29e, 0xe29f, 0xe2a0, 0xe340, 0xe341, + 0xe342, 0xe343, 0xe344, 0xe345, 0xe346, 0xe347, 0xe348, 0xe349, + 0xe34a, 0xe34b, 0xe34c, 0xe34d, 0xe34e, 0xe34f, 0xe350, 0xe351, + 0xe352, 0xe353, 0xe354, 0xe355, 0xe356, 0xe357, 0xe358, 0xe359, + 0xe35a, 0xe35b, 0xe35c, 0xe35d, 0xe35e, 0xe35f, 0xe360, 0xe361, + 0xe362, 0xe363, 0xe364, 0xe365, 0xe366, 0xe367, 0xe368, 0xe369, + 0xe36a, 0xe36b, 0xe36c, 0xe36d, 0xe36e, 0xe36f, 0xe370, 0xe371, + 0xe372, 0xe373, 0xe374, 0xe375, 0xe376, 0xe377, 0xe378, 0xe379, + 0xe37a, 0xe37b, 0xe37c, 0xe37d, 0xe37e, 0xe380, 0xe381, 0xe382, + 0xe383, 0xe384, 0xe385, 0xe386, 0xe387, 0xe388, 0xe389, 0xe38a, + 0xe38b, 0xe38c, 0xe38d, 0xe38e, 0xe38f, 0xe390, 0xe391, 0xe392, + 0xe393, 0xe394, 0xe395, 0xe396, 0xe397, 0xe398, 0xe399, 0xe39a, + 0xe39b, 0xe39c, 0xe39d, 0xe39e, 0xe39f, 0xe3a0, 0xe440, 0xe441, + 0xe442, 0xe443, 0xe444, 0xe445, 0xe446, 0xe447, 0xe448, 0xe449, + 0xe44a, 0xe44b, 0xe44c, 0xe44d, 0xe44e, 0xe44f, 0xe450, 0xe451, + 0xe452, 0xe453, 0xe454, 0xe455, 0xe456, 0xe457, 0xe458, 0xe459, + 0xe45a, 0xe45b, 0xe45c, 0xe45d, 0xe45e, 0xe45f, 0xe460, 0xe461, + 0xe462, 0xe463, 0xe464, 0xe465, 0xe466, 0xe467, 0xe468, 0xe469, + 0xe46a, 0xe46b, 0xe46c, 0xe46d, 0xe46e, 0xe46f, 0xe470, 0xe471, + 0xe472, 0xe473, 0xe474, 0xe475, 0xe476, 0xe477, 0xe478, 0xe479, + 0xe47a, 0xe47b, 0xe47c, 0xe47d, 0xe47e, 0xe480, 0xe481, 0xe482, + 0xe483, 0xe484, 0xe485, 0xe486, 0xe487, 0xe488, 0xe489, 0xe48a, + 0xe48b, 0xe48c, 0xe48d, 0xe48e, 0xe48f, 0xe490, 0xe491, 0xe492, + 0xe493, 0xe494, 0xe495, 0xe496, 0xe497, 0xe498, 0xe499, 0xe49a, + 0xe49b, 0xe49c, 0xe49d, 0xe49e, 0xe49f, 0xe4a0, 0xe540, 0xe541, + 0xe542, 0xe543, 0xe544, 0xe545, 0xe546, 0xe547, 0xe548, 0xe549, + 0xe54a, 0xe54b, 0xe54c, 0xe54d, 0xe54e, 0xe54f, 0xe550, 0xe551, + 0xe552, 0xe553, 0xe554, 0xe555, 0xe556, 0xe557, 0xe558, 0xe559, + 0xe55a, 0xe55b, 0xe55c, 0xe55d, 0xe55e, 0xe55f, 0xe560, 0xe561, + 0xe562, 0xe563, 0xe564, 0xe565, 0xe566, 0xe567, 0xe568, 0xe569, + 0xe56a, 0xe56b, 0xe56c, 0xe56d, 0xe56e, 0xe56f, 0xe570, 0xe571, + 0xe572, 0xe573, 0xe574, 0xe575, 0xe576, 0xe577, 0xe578, 0xe579, + 0xe57a, 0xe57b, 0xe57c, 0xe57d, 0xe57e, 0xe580, 0xe581, 0xe582, + 0xe583, 0xe584, 0xe585, 0xe586, 0xe587, 0xe588, 0xe589, 0xe58a, + 0xe58b, 0xe58c, 0xe58d, 0xe58e, 0xe58f, 0xe590, 0xe591, 0xe592, + 0xe593, 0xe594, 0xe595, 0xe596, 0xe597, 0xe598, 0xe599, 0xe59a, + 0xe59b, 0xe59c, 0xe59d, 0xe59e, 0xe59f, 0xe5a0, 0xe640, 0xe641, + 0xe642, 0xe643, 0xe644, 0xe645, 0xe646, 0xe647, 0xe648, 0xe649, + 0xe64a, 0xe64b, 0xe64c, 0xe64d, 0xe64e, 0xe64f, 0xe650, 0xe651, + 0xe652, 0xe653, 0xe654, 0xe655, 0xe656, 0xe657, 0xe658, 0xe659, + 0xe65a, 0xe65b, 0xe65c, 0xe65d, 0xe65e, 0xe65f, 0xe660, 0xe661, + 0xe662, 0xe663, 0xe664, 0xe665, 0xe666, 0xe667, 0xe668, 0xe669, + 0xe66a, 0xe66b, 0xe66c, 0xe66d, 0xe66e, 0xe66f, 0xe670, 0xe671, + 0xe672, 0xe673, 0xe674, 0xe675, 0xe676, 0xe677, 0xe678, 0xe679, + 0xe67a, 0xe67b, 0xe67c, 0xe67d, 0xe67e, 0xe680, 0xe681, 0xe682, + 0xe683, 0xe684, 0xe685, 0xe686, 0xe687, 0xe688, 0xe689, 0xe68a, + 0xe68b, 0xe68c, 0xe68d, 0xe68e, 0xe68f, 0xe690, 0xe691, 0xe692, + 0xe693, 0xe694, 0xe695, 0xe696, 0xe697, 0xe698, 0xe699, 0xe69a, + 0xe69b, 0xe69c, 0xe69d, 0xe69e, 0xe69f, 0xe6a0, 0xe740, 0xe741, + 0xe742, 0xe743, 0xe744, 0xe745, 0xe746, 0xe747, 0xe748, 0xe749, + 0xe74a, 0xe74b, 0xe74c, 0xe74d, 0xe74e, 0xe74f, 0xe750, 0xe751, + 0xe752, 0xe753, 0xe754, 0xe755, 0xe756, 0xe757, 0xe758, 0xe759, + 0xe75a, 0xe75b, 0xe75c, 0xe75d, 0xe75e, 0xe75f, 0xe760, 0xe761, + 0xe762, 0xe763, 0xe764, 0xe765, 0xe766, 0xe767, 0xe768, 0xe769, + 0xe76a, 0xe76b, 0xe76c, 0xe76d, 0xe76e, 0xe76f, 0xe770, 0xe771, + 0xe772, 0xe773, 0xe774, 0xe775, 0xe776, 0xe777, 0xe778, 0xe779, + 0xe77a, 0xe77b, 0xe77c, 0xe77d, 0xe77e, 0xe780, 0xe781, 0xe782, + 0xe783, 0xe784, 0xe785, 0xe786, 0xe787, 0xe788, 0xe789, 0xe78a, + 0xe78b, 0xe78c, 0xe78d, 0xe78e, 0xe78f, 0xe790, 0xe791, 0xe792, + 0xe793, 0xe794, 0xe795, 0xe796, 0xe797, 0xe798, 0xe799, 0xe79a, + 0xe79b, 0xe79c, 0xe79d, 0xe79e, 0xe79f, 0xe7a0, 0xe840, 0xe841, + 0xe842, 0xe843, 0xe844, 0xe845, 0xe846, 0xe847, 0xe848, 0xe849, + 0xe84a, 0xe84b, 0xe84c, 0xe84d, 0xe84e, 0xe84f, 0xe850, 0xe851, + 0xe852, 0xe853, 0xe854, 0xe855, 0xe856, 0xe857, 0xe858, 0xe859, + 0xe85a, 0xe85b, 0xe85c, 0xe85d, 0xe85e, 0xe85f, 0xe860, 0xe861, + 0xe862, 0xe863, 0xe864, 0xe865, 0xe866, 0xe867, 0xe868, 0xe869, + 0xe86a, 0xe86b, 0xe86c, 0xe86d, 0xe86e, 0xe86f, 0xe870, 0xe871, + 0xe872, 0xe873, 0xe874, 0xe875, 0xe876, 0xe877, 0xe878, 0xe879, + 0xe87a, 0xe87b, 0xe87c, 0xe87d, 0xe87e, 0xe880, 0xe881, 0xe882, + 0xe883, 0xe884, 0xe885, 0xe886, 0xe887, 0xe888, 0xe889, 0xe88a, + 0xe88b, 0xe88c, 0xe88d, 0xe88e, 0xe88f, 0xe890, 0xe891, 0xe892, + 0xe893, 0xe894, 0xe895, 0xe896, 0xe897, 0xe898, 0xe899, 0xe89a, + 0xe89b, 0xe89c, 0xe89d, 0xe89e, 0xe89f, 0xe8a0, 0xe940, 0xe941, + 0xe942, 0xe943, 0xe944, 0xe945, 0xe946, 0xe947, 0xe948, 0xe949, + 0xe94a, 0xe94b, 0xe94c, 0xe94d, 0xe94e, 0xe94f, 0xe950, 0xe951, + 0xe952, 0xe953, 0xe954, 0xe955, 0xe956, 0xe957, 0xe958, 0xe959, + 0xe95a, 0xe95b, 0xe95c, 0xe95d, 0xe95e, 0xe95f, 0xe960, 0xe961, + 0xe962, 0xe963, 0xe964, 0xe965, 0xe966, 0xe967, 0xe968, 0xe969, + 0xe96a, 0xe96b, 0xe96c, 0xe96d, 0xe96e, 0xe96f, 0xe970, 0xe971, + 0xe972, 0xe973, 0xe974, 0xe975, 0xe976, 0xe977, 0xe978, 0xe979, + 0xe97a, 0xe97b, 0xe97c, 0xe97d, 0xe97e, 0xe980, 0xe981, 0xe982, + 0xe983, 0xe984, 0xe985, 0xe986, 0xe987, 0xe988, 0xe989, 0xe98a, + 0xe98b, 0xe98c, 0xe98d, 0xe98e, 0xe98f, 0xe990, 0xe991, 0xe992, + 0xe993, 0xe994, 0xe995, 0xe996, 0xe997, 0xe998, 0xe999, 0xe99a, + 0xe99b, 0xe99c, 0xe99d, 0xe99e, 0xe99f, 0xe9a0, 0xea40, 0xea41, + 0xea42, 0xea43, 0xea44, 0xea45, 0xea46, 0xea47, 0xea48, 0xea49, + 0xea4a, 0xea4b, 0xea4c, 0xea4d, 0xea4e, 0xea4f, 0xea50, 0xea51, + 0xea52, 0xea53, 0xea54, 0xea55, 0xea56, 0xea57, 0xea58, 0xea59, + 0xea5a, 0xea5b, 0xea5c, 0xea5d, 0xea5e, 0xea5f, 0xea60, 0xea61, + 0xea62, 0xea63, 0xea64, 0xea65, 0xea66, 0xea67, 0xea68, 0xea69, + 0xea6a, 0xea6b, 0xea6c, 0xea6d, 0xea6e, 0xea6f, 0xea70, 0xea71, + 0xea72, 0xea73, 0xea74, 0xea75, 0xea76, 0xea77, 0xea78, 0xea79, + 0xea7a, 0xea7b, 0xea7c, 0xea7d, 0xea7e, 0xea80, 0xea81, 0xea82, + 0xea83, 0xea84, 0xea85, 0xea86, 0xea87, 0xea88, 0xea89, 0xea8a, + 0xea8b, 0xea8c, 0xea8d, 0xea8e, 0xea8f, 0xea90, 0xea91, 0xea92, + 0xea93, 0xea94, 0xea95, 0xea96, 0xea97, 0xea98, 0xea99, 0xea9a, + 0xea9b, 0xea9c, 0xea9d, 0xea9e, 0xea9f, 0xeaa0, 0xeb40, 0xeb41, + 0xeb42, 0xeb43, 0xeb44, 0xeb45, 0xeb46, 0xeb47, 0xeb48, 0xeb49, + 0xeb4a, 0xeb4b, 0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f, 0xeb50, 0xeb51, + 0xeb52, 0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57, 0xeb58, 0xeb59, + 0xeb5a, 0xeb5b, 0xeb5c, 0xeb5d, 0xeb5e, 0xeb5f, 0xeb60, 0xeb61, + 0xeb62, 0xeb63, 0xeb64, 0xeb65, 0xeb66, 0xeb67, 0xeb68, 0xeb69, + 0xeb6a, 0xeb6b, 0xeb6c, 0xeb6d, 0xeb6e, 0xeb6f, 0xeb70, 0xeb71, + 0xeb72, 0xeb73, 0xeb74, 0xeb75, 0xeb76, 0xeb77, 0xeb78, 0xeb79, + 0xeb7a, 0xeb7b, 0xeb7c, 0xeb7d, 0xeb7e, 0xeb80, 0xeb81, 0xeb82, + 0xeb83, 0xeb84, 0xeb85, 0xeb86, 0xeb87, 0xeb88, 0xeb89, 0xeb8a, + 0xeb8b, 0xeb8c, 0xeb8d, 0xeb8e, 0xeb8f, 0xeb90, 0xeb91, 0xeb92, + 0xeb93, 0xeb94, 0xeb95, 0xeb96, 0xeb97, 0xeb98, 0xeb99, 0xeb9a, + 0xeb9b, 0xeb9c, 0xeb9d, 0xeb9e, 0xeb9f, 0xeba0, 0xec40, 0xec41, + 0xec42, 0xec43, 0xec44, 0xec45, 0xec46, 0xec47, 0xec48, 0xec49, + 0xec4a, 0xec4b, 0xec4c, 0xec4d, 0xec4e, 0xec4f, 0xec50, 0xec51, + 0xec52, 0xec53, 0xec54, 0xec55, 0xec56, 0xec57, 0xec58, 0xec59, + 0xec5a, 0xec5b, 0xec5c, 0xec5d, 0xec5e, 0xec5f, 0xec60, 0xec61, + 0xec62, 0xec63, 0xec64, 0xec65, 0xec66, 0xec67, 0xec68, 0xec69, + 0xec6a, 0xec6b, 0xec6c, 0xec6d, 0xec6e, 0xec6f, 0xec70, 0xec71, + 0xec72, 0xec73, 0xec74, 0xec75, 0xec76, 0xec77, 0xec78, 0xec79, + 0xec7a, 0xec7b, 0xec7c, 0xec7d, 0xec7e, 0xec80, 0xec81, 0xec82, + 0xec83, 0xec84, 0xec85, 0xec86, 0xec87, 0xec88, 0xec89, 0xec8a, + 0xec8b, 0xec8c, 0xec8d, 0xec8e, 0xec8f, 0xec90, 0xec91, 0xec92, + 0xec93, 0xec94, 0xec95, 0xec96, 0xec97, 0xec98, 0xec99, 0xec9a, + 0xec9b, 0xec9c, 0xec9d, 0xec9e, 0xec9f, 0xeca0, 0xed40, 0xed41, + 0xed42, 0xed43, 0xed44, 0xed45, 0xed46, 0xed47, 0xed48, 0xed49, + 0xed4a, 0xed4b, 0xed4c, 0xed4d, 0xed4e, 0xed4f, 0xed50, 0xed51, + 0xed52, 0xed53, 0xed54, 0xed55, 0xed56, 0xed57, 0xed58, 0xed59, + 0xed5a, 0xed5b, 0xed5c, 0xed5d, 0xed5e, 0xed5f, 0xed60, 0xed61, + 0xed62, 0xed63, 0xed64, 0xed65, 0xed66, 0xed67, 0xed68, 0xed69, + 0xed6a, 0xed6b, 0xed6c, 0xed6d, 0xed6e, 0xed6f, 0xed70, 0xed71, + 0xed72, 0xed73, 0xed74, 0xed75, 0xed76, 0xed77, 0xed78, 0xed79, + 0xed7a, 0xed7b, 0xed7c, 0xed7d, 0xed7e, 0xed80, 0xed81, 0xed82, + 0xed83, 0xed84, 0xed85, 0xed86, 0xed87, 0xed88, 0xed89, 0xed8a, + 0xed8b, 0xed8c, 0xed8d, 0xed8e, 0xed8f, 0xed90, 0xed91, 0xed92, + 0xed93, 0xed94, 0xed95, 0xed96, 0xed97, 0xed98, 0xed99, 0xed9a, + 0xed9b, 0xed9c, 0xed9d, 0xed9e, 0xed9f, 0xeda0, 0xee40, 0xee41, + 0xee42, 0xee43, 0xee44, 0xee45, 0xee46, 0xee47, 0xee48, 0xee49, + 0xee4a, 0xee4b, 0xee4c, 0xee4d, 0xee4e, 0xee4f, 0xee50, 0xee51, + 0xee52, 0xee53, 0xee54, 0xee55, 0xee56, 0xee57, 0xee58, 0xee59, + 0xee5a, 0xee5b, 0xee5c, 0xee5d, 0xee5e, 0xee5f, 0xee60, 0xee61, + 0xee62, 0xee63, 0xee64, 0xee65, 0xee66, 0xee67, 0xee68, 0xee69, + 0xee6a, 0xee6b, 0xee6c, 0xee6d, 0xee6e, 0xee6f, 0xee70, 0xee71, + 0xee72, 0xee73, 0xee74, 0xee75, 0xee76, 0xee77, 0xee78, 0xee79, + 0xee7a, 0xee7b, 0xee7c, 0xee7d, 0xee7e, 0xee80, 0xee81, 0xee82, + 0xee83, 0xee84, 0xee85, 0xee86, 0xee87, 0xee88, 0xee89, 0xee8a, + 0xee8b, 0xee8c, 0xee8d, 0xee8e, 0xee8f, 0xee90, 0xee91, 0xee92, + 0xee93, 0xee94, 0xee95, 0xee96, 0xee97, 0xee98, 0xee99, 0xee9a, + 0xee9b, 0xee9c, 0xee9d, 0xee9e, 0xee9f, 0xeea0, 0xef40, 0xef41, + 0xef42, 0xef43, 0xef44, 0xef45, 0xef46, 0xef47, 0xef48, 0xef49, + 0xef4a, 0xef4b, 0xef4c, 0xef4d, 0xef4e, 0xef4f, 0xef50, 0xef51, + 0xef52, 0xef53, 0xef54, 0xef55, 0xef56, 0xef57, 0xef58, 0xef59, + 0xef5a, 0xef5b, 0xef5c, 0xef5d, 0xef5e, 0xef5f, 0xef60, 0xef61, + 0xef62, 0xef63, 0xef64, 0xef65, 0xef66, 0xef67, 0xef68, 0xef69, + 0xef6a, 0xef6b, 0xef6c, 0xef6d, 0xef6e, 0xef6f, 0xef70, 0xef71, + 0xef72, 0xef73, 0xef74, 0xef75, 0xef76, 0xef77, 0xef78, 0xef79, + 0xef7a, 0xef7b, 0xef7c, 0xef7d, 0xef7e, 0xef80, 0xef81, 0xef82, + 0xef83, 0xef84, 0xef85, 0xef86, 0xef87, 0xef88, 0xef89, 0xef8a, + 0xef8b, 0xef8c, 0xef8d, 0xef8e, 0xef8f, 0xef90, 0xef91, 0xef92, + 0xef93, 0xef94, 0xef95, 0xef96, 0xef97, 0xef98, 0xef99, 0xef9a, + 0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f, 0xefa0, 0xf040, 0xf041, + 0xf042, 0xf043, 0xf044, 0xf045, 0xf046, 0xf047, 0xf048, 0xf049, + 0xf04a, 0xf04b, 0xf04c, 0xf04d, 0xf04e, 0xf04f, 0xf050, 0xf051, + 0xf052, 0xf053, 0xf054, 0xf055, 0xf056, 0xf057, 0xf058, 0xf059, + 0xf05a, 0xf05b, 0xf05c, 0xf05d, 0xf05e, 0xf05f, 0xf060, 0xf061, + 0xf062, 0xf063, 0xf064, 0xf065, 0xf066, 0xf067, 0xf068, 0xf069, + 0xf06a, 0xf06b, 0xf06c, 0xf06d, 0xf06e, 0xf06f, 0xf070, 0xf071, + 0xf072, 0xf073, 0xf074, 0xf075, 0xf076, 0xf077, 0xf078, 0xf079, + 0xf07a, 0xf07b, 0xf07c, 0xf07d, 0xf07e, 0xf080, 0xf081, 0xf082, + 0xf083, 0xf084, 0xf085, 0xf086, 0xf087, 0xf088, 0xf089, 0xf08a, + 0xf08b, 0xf08c, 0xf08d, 0xf08e, 0xf08f, 0xf090, 0xf091, 0xf092, + 0xf093, 0xf094, 0xf095, 0xf096, 0xf097, 0xf098, 0xf099, 0xf09a, + 0xf09b, 0xf09c, 0xf09d, 0xf09e, 0xf09f, 0xf0a0, 0xf140, 0xf141, + 0xf142, 0xf143, 0xf144, 0xf145, 0xf146, 0xf147, 0xf148, 0xf149, + 0xf14a, 0xf14b, 0xf14c, 0xf14d, 0xf14e, 0xf14f, 0xf150, 0xf151, + 0xf152, 0xf153, 0xf154, 0xf155, 0xf156, 0xf157, 0xf158, 0xf159, + 0xf15a, 0xf15b, 0xf15c, 0xf15d, 0xf15e, 0xf15f, 0xf160, 0xf161, + 0xf162, 0xf163, 0xf164, 0xf165, 0xf166, 0xf167, 0xf168, 0xf169, + 0xf16a, 0xf16b, 0xf16c, 0xf16d, 0xf16e, 0xf16f, 0xf170, 0xf171, + 0xf172, 0xf173, 0xf174, 0xf175, 0xf176, 0xf177, 0xf178, 0xf179, + 0xf17a, 0xf17b, 0xf17c, 0xf17d, 0xf17e, 0xf180, 0xf181, 0xf182, + 0xf183, 0xf184, 0xf185, 0xf186, 0xf187, 0xf188, 0xf189, 0xf18a, + 0xf18b, 0xf18c, 0xf18d, 0xf18e, 0xf18f, 0xf190, 0xf191, 0xf192, + 0xf193, 0xf194, 0xf195, 0xf196, 0xf197, 0xf198, 0xf199, 0xf19a, + 0xf19b, 0xf19c, 0xf19d, 0xf19e, 0xf19f, 0xf1a0, 0xf240, 0xf241, + 0xf242, 0xf243, 0xf244, 0xf245, 0xf246, 0xf247, 0xf248, 0xf249, + 0xf24a, 0xf24b, 0xf24c, 0xf24d, 0xf24e, 0xf24f, 0xf250, 0xf251, + 0xf252, 0xf253, 0xf254, 0xf255, 0xf256, 0xf257, 0xf258, 0xf259, + 0xf25a, 0xf25b, 0xf25c, 0xf25d, 0xf25e, 0xf25f, 0xf260, 0xf261, + 0xf262, 0xf263, 0xf264, 0xf265, 0xf266, 0xf267, 0xf268, 0xf269, + 0xf26a, 0xf26b, 0xf26c, 0xf26d, 0xf26e, 0xf26f, 0xf270, 0xf271, + 0xf272, 0xf273, 0xf274, 0xf275, 0xf276, 0xf277, 0xf278, 0xf279, + 0xf27a, 0xf27b, 0xf27c, 0xf27d, 0xf27e, 0xf280, 0xf281, 0xf282, + 0xf283, 0xf284, 0xf285, 0xf286, 0xf287, 0xf288, 0xf289, 0xf28a, + 0xf28b, 0xf28c, 0xf28d, 0xf28e, 0xf28f, 0xf290, 0xf291, 0xf292, + 0xf293, 0xf294, 0xf295, 0xf296, 0xf297, 0xf298, 0xf299, 0xf29a, + 0xf29b, 0xf29c, 0xf29d, 0xf29e, 0xf29f, 0xf2a0, 0xf340, 0xf341, + 0xf342, 0xf343, 0xf344, 0xf345, 0xf346, 0xf347, 0xf348, 0xf349, + 0xf34a, 0xf34b, 0xf34c, 0xf34d, 0xf34e, 0xf34f, 0xf350, 0xf351, + 0xf352, 0xf353, 0xf354, 0xf355, 0xf356, 0xf357, 0xf358, 0xf359, + 0xf35a, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f, 0xf360, 0xf361, + 0xf362, 0xf363, 0xf364, 0xf365, 0xf366, 0xf367, 0xf368, 0xf369, + 0xf36a, 0xf36b, 0xf36c, 0xf36d, 0xf36e, 0xf36f, 0xf370, 0xf371, + 0xf372, 0xf373, 0xf374, 0xf375, 0xf376, 0xf377, 0xf378, 0xf379, + 0xf37a, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf380, 0xf381, 0xf382, + 0xf383, 0xf384, 0xf385, 0xf386, 0xf387, 0xf388, 0xf389, 0xf38a, + 0xf38b, 0xf38c, 0xf38d, 0xf38e, 0xf38f, 0xf390, 0xf391, 0xf392, + 0xf393, 0xf394, 0xf395, 0xf396, 0xf397, 0xf398, 0xf399, 0xf39a, + 0xf39b, 0xf39c, 0xf39d, 0xf39e, 0xf39f, 0xf3a0, 0xf440, 0xf441, + 0xf442, 0xf443, 0xf444, 0xf445, 0xf446, 0xf447, 0xf448, 0xf449, + 0xf44a, 0xf44b, 0xf44c, 0xf44d, 0xf44e, 0xf44f, 0xf450, 0xf451, + 0xf452, 0xf453, 0xf454, 0xf455, 0xf456, 0xf457, 0xf458, 0xf459, + 0xf45a, 0xf45b, 0xf45c, 0xf45d, 0xf45e, 0xf45f, 0xf460, 0xf461, + 0xf462, 0xf463, 0xf464, 0xf465, 0xf466, 0xf467, 0xf468, 0xf469, + 0xf46a, 0xf46b, 0xf46c, 0xf46d, 0xf46e, 0xf46f, 0xf470, 0xf471, + 0xf472, 0xf473, 0xf474, 0xf475, 0xf476, 0xf477, 0xf478, 0xf479, + 0xf47a, 0xf47b, 0xf47c, 0xf47d, 0xf47e, 0xf480, 0xf481, 0xf482, + 0xf483, 0xf484, 0xf485, 0xf486, 0xf487, 0xf488, 0xf489, 0xf48a, + 0xf48b, 0xf48c, 0xf48d, 0xf48e, 0xf48f, 0xf490, 0xf491, 0xf492, + 0xf493, 0xf494, 0xf495, 0xf496, 0xf497, 0xf498, 0xf499, 0xf49a, + 0xf49b, 0xf49c, 0xf49d, 0xf49e, 0xf49f, 0xf4a0, 0xf540, 0xf541, + 0xf542, 0xf543, 0xf544, 0xf545, 0xf546, 0xf547, 0xf548, 0xf549, + 0xf54a, 0xf54b, 0xf54c, 0xf54d, 0xf54e, 0xf54f, 0xf550, 0xf551, + 0xf552, 0xf553, 0xf554, 0xf555, 0xf556, 0xf557, 0xf558, 0xf559, + 0xf55a, 0xf55b, 0xf55c, 0xf55d, 0xf55e, 0xf55f, 0xf560, 0xf561, + 0xf562, 0xf563, 0xf564, 0xf565, 0xf566, 0xf567, 0xf568, 0xf569, + 0xf56a, 0xf56b, 0xf56c, 0xf56d, 0xf56e, 0xf56f, 0xf570, 0xf571, + 0xf572, 0xf573, 0xf574, 0xf575, 0xf576, 0xf577, 0xf578, 0xf579, + 0xf57a, 0xf57b, 0xf57c, 0xf57d, 0xf57e, 0xf580, 0xf581, 0xf582, + 0xf583, 0xf584, 0xf585, 0xf586, 0xf587, 0xf588, 0xf589, 0xf58a, + 0xf58b, 0xf58c, 0xf58d, 0xf58e, 0xf58f, 0xf590, 0xf591, 0xf592, + 0xf593, 0xf594, 0xf595, 0xf596, 0xf597, 0xf598, 0xf599, 0xf59a, + 0xf59b, 0xf59c, 0xf59d, 0xf59e, 0xf59f, 0xf5a0, 0xf640, 0xf641, + 0xf642, 0xf643, 0xf644, 0xf645, 0xf646, 0xf647, 0xf648, 0xf649, + 0xf64a, 0xf64b, 0xf64c, 0xf64d, 0xf64e, 0xf64f, 0xf650, 0xf651, + 0xf652, 0xf653, 0xf654, 0xf655, 0xf656, 0xf657, 0xf658, 0xf659, + 0xf65a, 0xf65b, 0xf65c, 0xf65d, 0xf65e, 0xf65f, 0xf660, 0xf661, + 0xf662, 0xf663, 0xf664, 0xf665, 0xf666, 0xf667, 0xf668, 0xf669, + 0xf66a, 0xf66b, 0xf66c, 0xf66d, 0xf66e, 0xf66f, 0xf670, 0xf671, + 0xf672, 0xf673, 0xf674, 0xf675, 0xf676, 0xf677, 0xf678, 0xf679, + 0xf67a, 0xf67b, 0xf67c, 0xf67d, 0xf67e, 0xf680, 0xf681, 0xf682, + 0xf683, 0xf684, 0xf685, 0xf686, 0xf687, 0xf688, 0xf689, 0xf68a, + 0xf68b, 0xf68c, 0xf68d, 0xf68e, 0xf68f, 0xf690, 0xf691, 0xf692, + 0xf693, 0xf694, 0xf695, 0xf696, 0xf697, 0xf698, 0xf699, 0xf69a, + 0xf69b, 0xf69c, 0xf69d, 0xf69e, 0xf69f, 0xf6a0, 0xf740, 0xf741, + 0xf742, 0xf743, 0xf744, 0xf745, 0xf746, 0xf747, 0xf748, 0xf749, + 0xf74a, 0xf74b, 0xf74c, 0xf74d, 0xf74e, 0xf74f, 0xf750, 0xf751, + 0xf752, 0xf753, 0xf754, 0xf755, 0xf756, 0xf757, 0xf758, 0xf759, + 0xf75a, 0xf75b, 0xf75c, 0xf75d, 0xf75e, 0xf75f, 0xf760, 0xf761, + 0xf762, 0xf763, 0xf764, 0xf765, 0xf766, 0xf767, 0xf768, 0xf769, + 0xf76a, 0xf76b, 0xf76c, 0xf76d, 0xf76e, 0xf76f, 0xf770, 0xf771, + 0xf772, 0xf773, 0xf774, 0xf775, 0xf776, 0xf777, 0xf778, 0xf779, + 0xf77a, 0xf77b, 0xf77c, 0xf77d, 0xf77e, 0xf780, 0xf781, 0xf782, + 0xf783, 0xf784, 0xf785, 0xf786, 0xf787, 0xf788, 0xf789, 0xf78a, + 0xf78b, 0xf78c, 0xf78d, 0xf78e, 0xf78f, 0xf790, 0xf791, 0xf792, + 0xf793, 0xf794, 0xf795, 0xf796, 0xf797, 0xf798, 0xf799, 0xf79a, + 0xf79b, 0xf79c, 0xf79d, 0xf79e, 0xf79f, 0xf7a0, 0xf840, 0xf841, + 0xf842, 0xf843, 0xf844, 0xf845, 0xf846, 0xf847, 0xf848, 0xf849, + 0xf84a, 0xf84b, 0xf84c, 0xf84d, 0xf84e, 0xf84f, 0xf850, 0xf851, + 0xf852, 0xf853, 0xf854, 0xf855, 0xf856, 0xf857, 0xf858, 0xf859, + 0xf85a, 0xf85b, 0xf85c, 0xf85d, 0xf85e, 0xf85f, 0xf860, 0xf861, + 0xf862, 0xf863, 0xf864, 0xf865, 0xf866, 0xf867, 0xf868, 0xf869, + 0xf86a, 0xf86b, 0xf86c, 0xf86d, 0xf86e, 0xf86f, 0xf870, 0xf871, + 0xf872, 0xf873, 0xf874, 0xf875, 0xf876, 0xf877, 0xf878, 0xf879, + 0xf87a, 0xf87b, 0xf87c, 0xf87d, 0xf87e, 0xf880, 0xf881, 0xf882, + 0xf883, 0xf884, 0xf885, 0xf886, 0xf887, 0xf888, 0xf889, 0xf88a, + 0xf88b, 0xf88c, 0xf88d, 0xf88e, 0xf88f, 0xf890, 0xf891, 0xf892, + 0xf893, 0xf894, 0xf895, 0xf896, 0xf897, 0xf898, 0xf899, 0xf89a, + 0xf89b, 0xf89c, 0xf89d, 0xf89e, 0xf89f, 0xf8a0, 0xf940, 0xf941, + 0xf942, 0xf943, 0xf944, 0xf945, 0xf946, 0xf947, 0xf948, 0xf949, + 0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e, 0xf94f, 0xf950, 0xf951, + 0xf952, 0xf953, 0xf954, 0xf955, 0xf956, 0xf957, 0xf958, 0xf959, + 0xf95a, 0xf95b, 0xf95c, 0xf95d, 0xf95e, 0xf95f, 0xf960, 0xf961, + 0xf962, 0xf963, 0xf964, 0xf965, 0xf966, 0xf967, 0xf968, 0xf969, + 0xf96a, 0xf96b, 0xf96c, 0xf96d, 0xf96e, 0xf96f, 0xf970, 0xf971, + 0xf972, 0xf973, 0xf974, 0xf975, 0xf976, 0xf977, 0xf978, 0xf979, + 0xf97a, 0xf97b, 0xf97c, 0xf97d, 0xf97e, 0xf980, 0xf981, 0xf982, + 0xf983, 0xf984, 0xf985, 0xf986, 0xf987, 0xf988, 0xf989, 0xf98a, + 0xf98b, 0xf98c, 0xf98d, 0xf98e, 0xf98f, 0xf990, 0xf991, 0xf992, + 0xf993, 0xf994, 0xf995, 0xf996, 0xf997, 0xf998, 0xf999, 0xf99a, + 0xf99b, 0xf99c, 0xf99d, 0xf99e, 0xf99f, 0xf9a0, 0xfa40, 0xfa41, + 0xfa42, 0xfa43, 0xfa44, 0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, + 0xfa4a, 0xfa4b, 0xfa4c, 0xfa4d, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51, + 0xfa52, 0xfa53, 0xfa54, 0xfa55, 0xfa56, 0xfa57, 0xfa58, 0xfa59, + 0xfa5a, 0xfa5b, 0xfa5c, 0xfa5d, 0xfa5e, 0xfa5f, 0xfa60, 0xfa61, + 0xfa62, 0xfa63, 0xfa64, 0xfa65, 0xfa66, 0xfa67, 0xfa68, 0xfa69, + 0xfa6a, 0xfa6b, 0xfa6c, 0xfa6d, 0xfa6e, 0xfa6f, 0xfa70, 0xfa71, + 0xfa72, 0xfa73, 0xfa74, 0xfa75, 0xfa76, 0xfa77, 0xfa78, 0xfa79, + 0xfa7a, 0xfa7b, 0xfa7c, 0xfa7d, 0xfa7e, 0xfa80, 0xfa81, 0xfa82, + 0xfa83, 0xfa84, 0xfa85, 0xfa86, 0xfa87, 0xfa88, 0xfa89, 0xfa8a, + 0xfa8b, 0xfa8c, 0xfa8d, 0xfa8e, 0xfa8f, 0xfa90, 0xfa91, 0xfa92, + 0xfa93, 0xfa94, 0xfa95, 0xfa96, 0xfa97, 0xfa98, 0xfa99, 0xfa9a, + 0xfa9b, 0xfa9c, 0xfa9d, 0xfa9e, 0xfa9f, 0xfaa0, 0xfb40, 0xfb41, + 0xfb42, 0xfb43, 0xfb44, 0xfb45, 0xfb46, 0xfb47, 0xfb48, 0xfb49, + 0xfb4a, 0xfb4b, 0xfb4c, 0xfb4d, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51, + 0xfb52, 0xfb53, 0xfb54, 0xfb55, 0xfb56, 0xfb57, 0xfb58, 0xfb59, + 0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d, 0xfb5e, 0xfb5f, 0xfb60, 0xfb61, + 0xfb62, 0xfb63, 0xfb64, 0xfb65, 0xfb66, 0xfb67, 0xfb68, 0xfb69, + 0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d, 0xfb6e, 0xfb6f, 0xfb70, 0xfb71, + 0xfb72, 0xfb73, 0xfb74, 0xfb75, 0xfb76, 0xfb77, 0xfb78, 0xfb79, + 0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d, 0xfb7e, 0xfb80, 0xfb81, 0xfb82, + 0xfb83, 0xfb84, 0xfb85, 0xfb86, 0xfb87, 0xfb88, 0xfb89, 0xfb8a, + 0xfb8b, 0xfb8c, 0xfb8d, 0xfb8e, 0xfb8f, 0xfb90, 0xfb91, 0xfb92, + 0xfb93, 0xfb94, 0xfb95, 0xfb96, 0xfb97, 0xfb98, 0xfb99, 0xfb9a, + 0xfb9b, 0xfb9c, 0xfb9d, 0xfb9e, 0xfb9f, 0xfba0, 0xfc40, 0xfc41, + 0xfc42, 0xfc43, 0xfc44, 0xfc45, 0xfc46, 0xfc47, 0xfc48, 0xfc49, + 0xfc4a, 0xfc4b, 0xfc4c, 0xfc4d, 0xfc4e, 0xfc4f, 0xfc50, 0xfc51, + 0xfc52, 0xfc53, 0xfc54, 0xfc55, 0xfc56, 0xfc57, 0xfc58, 0xfc59, + 0xfc5a, 0xfc5b, 0xfc5c, 0xfc5d, 0xfc5e, 0xfc5f, 0xfc60, 0xfc61, + 0xfc62, 0xfc63, 0xfc64, 0xfc65, 0xfc66, 0xfc67, 0xfc68, 0xfc69, + 0xfc6a, 0xfc6b, 0xfc6c, 0xfc6d, 0xfc6e, 0xfc6f, 0xfc70, 0xfc71, + 0xfc72, 0xfc73, 0xfc74, 0xfc75, 0xfc76, 0xfc77, 0xfc78, 0xfc79, + 0xfc7a, 0xfc7b, 0xfc7c, 0xfc7d, 0xfc7e, 0xfc80, 0xfc81, 0xfc82, + 0xfc83, 0xfc84, 0xfc85, 0xfc86, 0xfc87, 0xfc88, 0xfc89, 0xfc8a, + 0xfc8b, 0xfc8c, 0xfc8d, 0xfc8e, 0xfc8f, 0xfc90, 0xfc91, 0xfc92, + 0xfc93, 0xfc94, 0xfc95, 0xfc96, 0xfc97, 0xfc98, 0xfc99, 0xfc9a, + 0xfc9b, 0xfc9c, 0xfc9d, 0xfc9e, 0xfc9f, 0xfca0, 0xfd40, 0xfd41, + 0xfd42, 0xfd43, 0xfd44, 0xfd45, 0xfd46, 0xfd47, 0xfd48, 0xfd49, + 0xfd4a, 0xfd4b, 0xfd4c, 0xfd4d, 0xfd4e, 0xfd4f, 0xfd50, 0xfd51, + 0xfd52, 0xfd53, 0xfd54, 0xfd55, 0xfd56, 0xfd57, 0xfd58, 0xfd59, + 0xfd5a, 0xfd5b, 0xfd5c, 0xfd5d, 0xfd5e, 0xfd5f, 0xfd60, 0xfd61, + 0xfd62, 0xfd63, 0xfd64, 0xfd65, 0xfd66, 0xfd67, 0xfd68, 0xfd69, + 0xfd6a, 0xfd6b, 0xfd6c, 0xfd6d, 0xfd6e, 0xfd6f, 0xfd70, 0xfd71, + 0xfd72, 0xfd73, 0xfd74, 0xfd75, 0xfd76, 0xfd77, 0xfd78, 0xfd79, + 0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, 0xfd7e, 0xfd80, 0xfd81, 0xfd82, + 0xfd83, 0xfd84, 0xfd85, 0xfd86, 0xfd87, 0xfd88, 0xfd89, 0xfd8a, + 0xfd8b, 0xfd8c, 0xfd8d, 0xfd8e, 0xfd8f, 0xfd90, 0xfd91, 0xfd92, + 0xfd93, 0xfd94, 0xfd95, 0xfd96, 0xfd97, 0xfd98, 0xfd99, 0xfd9a, + 0xfd9b, 0xfd9c, 0xfd9d, 0xfd9e, 0xfd9f, 0xfda0, 0xfe40, 0xfe41, + 0xfe42, 0xfe43, 0xfe44, 0xfe45, 0xfe46, 0xfe47, 0xfe48, 0xfe49, + 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f, 0xa955, 0xa968, + 0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, 0xa96e, 0xa96f, 0xa970, + 0xa971, 0xa972, 0xa973, 0xa974, 0xa975, 0xa976, 0xa977, 0xa978, + 0xa979, 0xa97a, 0xa97b, 0xa97c, 0xa97d, 0xa97e, 0xa980, 0xa981, + 0xa982, 0xa983, 0xa984, 0xa985, 0xa986, 0xa987, 0xa988, 0xa956, + 0xa957, +}; + +static const Summary16 gbkext_inv_uni2indx_page02[14] = { + /* 0x0200 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0c00 }, { 2, 0x0200 }, +}; +static const Summary16 gbkext_inv_uni2indx_page20[44] = { + /* 0x2000 */ + { 3, 0x0000 }, { 3, 0x0029 }, { 6, 0x0020 }, { 7, 0x0020 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + /* 0x2100 */ + { 8, 0x0220 }, { 10, 0x0000 }, { 10, 0x0002 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x03c0 }, { 15, 0x0000 }, { 15, 0x0000 }, + { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, + /* 0x2200 */ + { 15, 0x0000 }, { 15, 0x8020 }, { 17, 0x0008 }, { 18, 0x0000 }, + { 18, 0x0000 }, { 18, 0x0004 }, { 19, 0x00c0 }, { 21, 0x0000 }, + { 21, 0x0000 }, { 21, 0x0020 }, { 22, 0x0000 }, { 22, 0x8000 }, +}; +static const Summary16 gbkext_inv_uni2indx_page25[17] = { + /* 0x2500 */ + { 23, 0x0000 }, { 23, 0x0000 }, { 23, 0x0000 }, { 23, 0x0000 }, + { 23, 0x0000 }, { 23, 0xffff }, { 39, 0xffff }, { 55, 0x000f }, + { 59, 0xfffe }, { 74, 0x0038 }, { 77, 0x0000 }, { 77, 0x3000 }, + { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x003c }, { 83, 0x0000 }, + /* 0x2600 */ + { 83, 0x0200 }, +}; +static const Summary16 gbkext_inv_uni2indx_page30[16] = { + /* 0x3000 */ + { 84, 0x00c0 }, { 86, 0x6004 }, { 89, 0x03fe }, { 98, 0x0000 }, + { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, + { 98, 0x0000 }, { 98, 0x7800 }, { 102, 0x0000 }, { 102, 0x0000 }, + { 102, 0x0000 }, { 102, 0x0000 }, { 102, 0x0000 }, { 102, 0x7000 }, +}; +static const Summary16 gbkext_inv_uni2indx_page32[30] = { + /* 0x3200 */ + { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0002 }, + { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, + { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0008 }, { 107, 0x0000 }, + { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, + /* 0x3300 */ + { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, + { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, + { 107, 0xc000 }, { 109, 0x7000 }, { 112, 0x0002 }, { 113, 0x0000 }, + { 113, 0x4010 }, { 115, 0x0026 }, +}; +static const Summary16 gbkext_inv_uni2indx_page4e[1307] = { + /* 0x4e00 */ + { 118, 0x8074 }, { 123, 0x8084 }, { 126, 0xc24b }, { 133, 0x10aa }, + { 138, 0x0457 }, { 144, 0x0ca2 }, { 149, 0xfdbc }, { 161, 0xbff4 }, + { 173, 0x04bf }, { 181, 0x72c1 }, { 188, 0x8408 }, { 191, 0x73d3 }, + { 201, 0x9100 }, { 204, 0x1c05 }, { 209, 0xe2c5 }, { 217, 0x5712 }, + /* 0x4f00 */ + { 224, 0x19fd }, { 234, 0x307c }, { 241, 0x730a }, { 248, 0xcaaa }, + { 256, 0x1fb7 }, { 267, 0x0054 }, { 270, 0x6d46 }, { 278, 0x27a6 }, + { 286, 0x54e7 }, { 295, 0xd76d }, { 306, 0x2816 }, { 311, 0x7fdf }, + { 325, 0x3bc7 }, { 335, 0x0a7c }, { 342, 0x18b5 }, { 349, 0xbaf5 }, + /* 0x5000 */ + { 360, 0x4fff }, { 373, 0x68eb }, { 382, 0x889d }, { 389, 0xabff }, + { 402, 0x2e77 }, { 412, 0xebdf }, { 425, 0xefdf }, { 439, 0x373f }, + { 450, 0xdede }, { 462, 0xffff }, { 478, 0xec57 }, { 488, 0xf3fb }, + { 501, 0x7fff }, { 516, 0xfbbf }, { 530, 0x8f3f }, { 541, 0xf7d7 }, + /* 0x5100 */ + { 554, 0xf73f }, { 567, 0xfffb }, { 582, 0xfffd }, { 597, 0x7fff }, + { 612, 0xd484 }, { 618, 0xeb8d }, { 628, 0x86db }, { 637, 0xc404 }, + { 641, 0xccd8 }, { 649, 0xe51b }, { 658, 0x67ca }, { 667, 0xc710 }, + { 673, 0x652e }, { 681, 0xd7fd }, { 694, 0x57ec }, { 704, 0x4096 }, + /* 0x5200 */ + { 709, 0x9a30 }, { 715, 0xd039 }, { 722, 0x94ee }, { 731, 0x5036 }, + { 737, 0xcbf0 }, { 746, 0xafac }, { 756, 0x795d }, { 766, 0x5ffb }, + { 779, 0xfef9 }, { 792, 0x17f6 }, { 802, 0xc0f0 }, { 808, 0x3ff1 }, + { 819, 0xf577 }, { 831, 0x7eba }, { 842, 0xffef }, { 857, 0x39fe }, + /* 0x5300 */ + { 868, 0x5e9e }, { 878, 0xd91e }, { 887, 0xbbb4 }, { 897, 0x31ff }, + { 908, 0x3855 }, { 915, 0x2b11 }, { 921, 0x3520 }, { 926, 0x7a44 }, + { 933, 0xc58b }, { 941, 0x5adf }, { 952, 0xbc93 }, { 961, 0x77bf }, + { 974, 0xc0f9 }, { 982, 0x742d }, { 990, 0x0086 }, { 993, 0xc410 }, + /* 0x5400 */ + { 997, 0x08a5 }, { 1002, 0x1710 }, { 1007, 0x0434 }, { 1011, 0xa4c9 }, + { 1018, 0xf2b6 }, { 1028, 0xe402 }, { 1033, 0xfeab }, { 1045, 0xc611 }, + { 1051, 0x27aa }, { 1059, 0xd18a }, { 1066, 0x4027 }, { 1071, 0x56e5 }, + { 1080, 0x0c28 }, { 1084, 0x0940 }, { 1087, 0x981f }, { 1095, 0x4bf3 }, + /* 0x5500 */ + { 1105, 0x7d3d }, { 1116, 0xf7ec }, { 1128, 0x2b62 }, { 1135, 0x2f74 }, + { 1144, 0xf9a5 }, { 1154, 0xef9e }, { 1166, 0x8b0d }, { 1173, 0xa61f }, + { 1182, 0x7060 }, { 1187, 0x4ced }, { 1196, 0xff7f }, { 1211, 0x9555 }, + { 1219, 0xcdcf }, { 1230, 0x4fa1 }, { 1238, 0x6285 }, { 1244, 0x9f53 }, + /* 0x5600 */ + { 1254, 0x2cfc }, { 1263, 0x36ff }, { 1275, 0xcf67 }, { 1286, 0x75a9 }, + { 1295, 0x8fff }, { 1308, 0xec6f }, { 1319, 0xe0eb }, { 1328, 0xe7bd }, + { 1340, 0x3f9f }, { 1352, 0xfff7 }, { 1367, 0x7ff7 }, { 1381, 0xef7f }, + { 1395, 0xfbff }, { 1410, 0x136f }, { 1419, 0xd7e8 }, { 1429, 0x19cc }, + /* 0x5700 */ + { 1436, 0xf8a7 }, { 1446, 0x6fff }, { 1460, 0x08f7 }, { 1468, 0xb1f6 }, + { 1478, 0x0b7a }, { 1486, 0x037c }, { 1493, 0x50ac }, { 1499, 0xe737 }, + { 1510, 0xe783 }, { 1519, 0xf7f3 }, { 1532, 0x9520 }, { 1537, 0xfeeb }, + { 1550, 0x37f3 }, { 1561, 0x58cb }, { 1569, 0x5fee }, { 1581, 0xd8ef }, + /* 0x5800 */ + { 1592, 0xd73a }, { 1602, 0xbddd }, { 1614, 0xfbec }, { 1626, 0xffde }, + { 1640, 0xcfef }, { 1653, 0xbeed }, { 1665, 0xe7df }, { 1678, 0xbfff }, + { 1693, 0xfdd4 }, { 1704, 0x39f3 }, { 1714, 0xfcff }, { 1728, 0xefff }, + { 1743, 0xffdd }, { 1757, 0xffdd }, { 1771, 0xa7ef }, { 1783, 0xfdb6 }, + /* 0x5900 */ + { 1795, 0x5f6b }, { 1806, 0x698f }, { 1815, 0x114f }, { 1822, 0xe86d }, + { 1831, 0x3469 }, { 1838, 0xfa0d }, { 1847, 0xffda }, { 1860, 0xdca7 }, + { 1870, 0xda21 }, { 1877, 0xbd33 }, { 1887, 0x30c7 }, { 1894, 0xb5fb }, + { 1906, 0xf3bf }, { 1919, 0xca60 }, { 1925, 0xeed7 }, { 1937, 0x75ff }, + /* 0x5a00 */ + { 1950, 0xec05 }, { 1957, 0x6ef5 }, { 1968, 0xfdd6 }, { 1980, 0xefa9 }, + { 1991, 0xf9be }, { 2003, 0xfbdf }, { 2017, 0xfb7b }, { 2030, 0x7b0f }, + { 2040, 0xffff }, { 2056, 0xf3fb }, { 2069, 0xfbff }, { 2084, 0xbed3 }, + { 2095, 0xedf9 }, { 2107, 0xeeab }, { 2118, 0xf5b4 }, { 2128, 0xfffd }, + /* 0x5b00 */ + { 2143, 0xfdff }, { 2158, 0xff3f }, { 2172, 0xffff }, { 2188, 0xff6b }, + { 2201, 0xfffe }, { 2216, 0x4044 }, { 2219, 0xe983 }, { 2227, 0xdbd4 }, + { 2237, 0x6444 }, { 2242, 0x8057 }, { 2248, 0xf380 }, { 2255, 0x1c86 }, + { 2261, 0xef0b }, { 2271, 0x1ff2 }, { 2281, 0xbecd }, { 2292, 0x60fe }, + /* 0x5c00 */ + { 2301, 0x79ad }, { 2311, 0xca8d }, { 2319, 0xef4b }, { 2330, 0x00ed }, + { 2336, 0x30d8 }, { 2342, 0xbddc }, { 2353, 0x3f94 }, { 2362, 0x79fd }, + { 2374, 0xcef9 }, { 2385, 0xe02c }, { 2391, 0xc5f3 }, { 2401, 0x5e55 }, + { 2410, 0xf7ed }, { 2423, 0xfdfb }, { 2437, 0xda8d }, { 2446, 0xf7fe }, + /* 0x5d00 */ + { 2460, 0xbf33 }, { 2471, 0xb7af }, { 2483, 0x9d2f }, { 2493, 0x9fef }, + { 2506, 0xe37f }, { 2518, 0xd6ff }, { 2531, 0x65ff }, { 2543, 0xffef }, + { 2558, 0xfffb }, { 2573, 0xddff }, { 2587, 0xffff }, { 2603, 0xff7f }, + { 2618, 0xdfdf }, { 2632, 0x97ff }, { 2645, 0x3419 }, { 2651, 0x9f61 }, + /* 0x5e00 */ + { 2660, 0x6e91 }, { 2668, 0xc08c }, { 2673, 0x9f3f }, { 2685, 0xc67d }, + { 2695, 0xefcb }, { 2707, 0xb7cf }, { 2719, 0xfff9 }, { 2733, 0x42a3 }, + { 2739, 0x732e }, { 2748, 0x2904 }, { 2752, 0xdf1e }, { 2763, 0xbc17 }, + { 2772, 0xf9ff }, { 2786, 0xf7b1 }, { 2797, 0xfaff }, { 2811, 0x3b2f }, + /* 0x5f00 */ + { 2821, 0x72e0 }, { 2828, 0x7655 }, { 2837, 0x591e }, { 2845, 0xe9fd }, + { 2857, 0xfffe }, { 2872, 0xde12 }, { 2880, 0xc9a9 }, { 2888, 0xe574 }, + { 2897, 0xe048 }, { 2902, 0xec5a }, { 2911, 0x9afd }, { 2922, 0xcf5f }, + { 2934, 0x4d87 }, { 2942, 0xdc38 }, { 2950, 0x936c }, { 2958, 0x16dd }, + /* 0x6000 */ + { 2967, 0x1b80 }, { 2972, 0xc58b }, { 2980, 0x701c }, { 2986, 0x67df }, + { 2998, 0xd7f1 }, { 3009, 0xd9da }, { 3019, 0x4063 }, { 3024, 0x40b6 }, + { 3030, 0xcde7 }, { 3041, 0x53ab }, { 3050, 0x46b6 }, { 3058, 0xe6e9 }, + { 3068, 0xf39f }, { 3080, 0x4add }, { 3089, 0x043e }, { 3095, 0xf9a6 }, + /* 0x6100 */ + { 3105, 0x1cbc }, { 3113, 0x7bdf }, { 3126, 0xf726 }, { 3136, 0x7fff }, + { 3151, 0xaaff }, { 3163, 0xdfdd }, { 3176, 0xfe7b }, { 3189, 0xff5e }, + { 3202, 0xb7ff }, { 3216, 0xdfef }, { 3230, 0xec7f }, { 3242, 0xbf7f }, + { 3256, 0xf2fb }, { 3268, 0xffe9 }, { 3281, 0xffbf }, { 3296, 0x7fdf }, + /* 0x6200 */ + { 3310, 0x02bf }, { 3318, 0x7218 }, { 3324, 0xabc9 }, { 3333, 0x1f67 }, + { 3343, 0x8474 }, { 3349, 0xf6e1 }, { 3359, 0x0137 }, { 3365, 0x2db6 }, + { 3374, 0xf9ee }, { 3386, 0x7211 }, { 3392, 0xe6c8 }, { 3400, 0x45dd }, + { 3409, 0x880b }, { 3414, 0x6022 }, { 3418, 0x0c13 }, { 3423, 0x0f25 }, + /* 0x6300 */ + { 3430, 0xbc79 }, { 3440, 0x13bd }, { 3449, 0x72c0 }, { 3455, 0xd9fb }, + { 3467, 0x0593 }, { 3473, 0x3fde }, { 3485, 0x9d71 }, { 3494, 0xf33d }, + { 3505, 0x287a }, { 3512, 0xfeba }, { 3524, 0x8852 }, { 3529, 0xaa66 }, + { 3537, 0x1daf }, { 3547, 0xbfba }, { 3559, 0xd9f4 }, { 3569, 0x5eab }, + /* 0x6400 */ + { 3579, 0x67d8 }, { 3588, 0xa7e6 }, { 3598, 0xcbbc }, { 3608, 0x5bef }, + { 3620, 0xfa0d }, { 3629, 0xbeeb }, { 3641, 0xdd7f }, { 3654, 0xf8ff }, + { 3667, 0xff4b }, { 3679, 0xbd99 }, { 3689, 0x8def }, { 3700, 0xea5e }, + { 3710, 0x9fda }, { 3721, 0xbe7a }, { 3732, 0xffab }, { 3745, 0xffff }, + /* 0x6500 */ + { 3761, 0xfdfe }, { 3775, 0xfefb }, { 3789, 0x37df }, { 3801, 0x348f }, + { 3809, 0x6cdf }, { 3820, 0x959d }, { 3829, 0xe7b3 }, { 3840, 0xff6a }, + { 3852, 0xe77f }, { 3865, 0x6574 }, { 3873, 0x554d }, { 3881, 0xcdfe }, + { 3893, 0x2785 }, { 3900, 0xff3b }, { 3913, 0x0c1a }, { 3918, 0xfb3c }, + /* 0x6600 */ + { 3929, 0x2bb2 }, { 3937, 0x5dc7 }, { 3947, 0x5e5e }, { 3957, 0xaf8d }, + { 3967, 0x67f5 }, { 3978, 0x7b03 }, { 3986, 0x3ead }, { 3996, 0xbb2e }, + { 4006, 0xef6b }, { 4018, 0xdf3d }, { 4030, 0xbe7f }, { 4043, 0xbdef }, + { 4056, 0xffff }, { 4072, 0xc5ff }, { 4084, 0xfdbf }, { 4098, 0x2d62 }, + /* 0x6700 */ + { 4105, 0xd0fe }, { 4115, 0x574e }, { 4124, 0x42bf }, { 4133, 0xdbcd }, + { 4144, 0x2cb2 }, { 4151, 0x2fb4 }, { 4160, 0x58dc }, { 4168, 0x2f52 }, + { 4176, 0xf56d }, { 4187, 0x8a5e }, { 4195, 0x5253 }, { 4202, 0xfe16 }, + { 4212, 0x7fe5 }, { 4224, 0x88e0 }, { 4229, 0x6dda }, { 4239, 0x5fe4 }, + /* 0x6800 */ + { 4249, 0x205e }, { 4255, 0xdf35 }, { 4266, 0xf9fd }, { 4279, 0x8c73 }, + { 4287, 0xa880 }, { 4291, 0xffc4 }, { 4302, 0xf400 }, { 4307, 0xff2f }, + { 4320, 0x7f95 }, { 4331, 0xff77 }, { 4345, 0x5e3b }, { 4355, 0xffd6 }, + { 4368, 0xd5fa }, { 4379, 0xfadb }, { 4391, 0xbff6 }, { 4404, 0xe9dc }, + /* 0x6900 */ + { 4414, 0x97dd }, { 4425, 0x7ffa }, { 4438, 0xdfee }, { 4451, 0x5dee }, + { 4462, 0xfffb }, { 4477, 0x9b6f }, { 4488, 0xb7b6 }, { 4499, 0xec7d }, + { 4510, 0xdc2a }, { 4518, 0xe6cf }, { 4529, 0xd67f }, { 4541, 0xf76d }, + { 4553, 0xabfd }, { 4565, 0x77ee }, { 4577, 0xdffe }, { 4591, 0x5ffb }, + /* 0x6a00 */ + { 4604, 0xfbff }, { 4619, 0x7e7f }, { 4632, 0x7afd }, { 4644, 0x9fdd }, + { 4656, 0xff6f }, { 4670, 0xf4fe }, { 4682, 0xffdd }, { 4696, 0xedfd }, + { 4709, 0xbfee }, { 4722, 0xff7c }, { 4735, 0xe5fe }, { 4747, 0xffff }, + { 4763, 0xffff }, { 4779, 0xffff }, { 4795, 0xffff }, { 4811, 0xffff }, + /* 0x6b00 */ + { 4827, 0xffff }, { 4843, 0xffff }, { 4859, 0xff60 }, { 4869, 0xb97b }, + { 4880, 0xed37 }, { 4891, 0xfdff }, { 4906, 0xfb03 }, { 4915, 0xe5ff }, + { 4928, 0xd121 }, { 4934, 0xf3b3 }, { 4945, 0xfbfd }, { 4959, 0x7f47 }, + { 4970, 0x57d9 }, { 4980, 0xf503 }, { 4988, 0x73fd }, { 5000, 0xddd7 }, + /* 0x6c00 */ + { 5012, 0x5f1f }, { 5023, 0x7084 }, { 5028, 0x3829 }, { 5034, 0xdeca }, + { 5044, 0xf938 }, { 5053, 0x074e }, { 5060, 0xf8ec }, { 5070, 0x9daa }, + { 5079, 0x6c91 }, { 5086, 0x75e6 }, { 5096, 0x9105 }, { 5101, 0x04f1 }, + { 5107, 0xe9cf }, { 5118, 0xb706 }, { 5126, 0x32d0 }, { 5132, 0x8214 }, + /* 0x6d00 */ + { 5136, 0xa76d }, { 5146, 0xb17b }, { 5156, 0xb35f }, { 5167, 0x85d1 }, + { 5174, 0x1215 }, { 5179, 0xa9e1 }, { 5187, 0x39b6 }, { 5196, 0xee6f }, + { 5208, 0xacdb }, { 5218, 0x17c5 }, { 5226, 0x3024 }, { 5230, 0x7edb }, + { 5242, 0xe70e }, { 5251, 0x9cbd }, { 5261, 0xa7ac }, { 5270, 0xe575 }, + /* 0x6e00 */ + { 5280, 0x8bdf }, { 5291, 0xdb2c }, { 5300, 0x55c4 }, { 5307, 0xfaeb }, + { 5319, 0x9fe7 }, { 5331, 0x76a7 }, { 5341, 0xb7ff }, { 5355, 0x3fff }, + { 5369, 0x7d97 }, { 5380, 0x6efe }, { 5392, 0x7b5b }, { 5403, 0xd329 }, + { 5411, 0x7779 }, { 5422, 0x3b45 }, { 5430, 0xfc88 }, { 5438, 0xfdef }, + /* 0x6f00 */ + { 5452, 0x7dbb }, { 5464, 0xffc7 }, { 5477, 0x51ee }, { 5486, 0xbfb5 }, + { 5498, 0xd73f }, { 5510, 0xaeff }, { 5523, 0x9fbb }, { 5535, 0xeaeb }, + { 5546, 0x8cef }, { 5556, 0xefff }, { 5571, 0xff7d }, { 5585, 0xfdb7 }, + { 5598, 0xfdfa }, { 5611, 0xbff9 }, { 5624, 0x3ffc }, { 5636, 0xffff }, + /* 0x7000 */ + { 5652, 0xffff }, { 5668, 0xf3fd }, { 5681, 0xfff7 }, { 5696, 0xfddf }, + { 5710, 0x6fff }, { 5724, 0xbfff }, { 5739, 0x47ff }, { 5751, 0x2e9e }, + { 5760, 0xb9de }, { 5771, 0xcd8b }, { 5780, 0x07ff }, { 5791, 0xc475 }, + { 5799, 0xfaf0 }, { 5809, 0x74ff }, { 5821, 0x442f }, { 5828, 0xdd7f }, + /* 0x7100 */ + { 5841, 0xf9ff }, { 5855, 0xf896 }, { 5864, 0x7fbf }, { 5878, 0xffbc }, + { 5891, 0xabdf }, { 5903, 0xafff }, { 5917, 0xbe2f }, { 5928, 0xdaf3 }, + { 5939, 0x7bef }, { 5952, 0x7cef }, { 5964, 0xeefe }, { 5977, 0xfdd7 }, + { 5990, 0xbff7 }, { 6004, 0xffcf }, { 6018, 0xbf5e }, { 6030, 0xfdff }, + /* 0x7200 */ + { 6045, 0xffbf }, { 6060, 0xdfff }, { 6075, 0xeaff }, { 6088, 0x541c }, + { 6094, 0xce7f }, { 6106, 0x55bb }, { 6116, 0x3d39 }, { 6125, 0x39db }, + { 6135, 0x53ec }, { 6144, 0x7ffb }, { 6158, 0x4fff }, { 6171, 0xfc2e }, + { 6181, 0x9ee1 }, { 6190, 0xbd7a }, { 6201, 0x0cfc }, { 6209, 0xe260 }, + /* 0x7300 */ + { 6215, 0xbbf5 }, { 6227, 0x8717 }, { 6235, 0xa1d9 }, { 6243, 0x3c6d }, + { 6252, 0xdfff }, { 6267, 0xff7a }, { 6280, 0x4ffe }, { 6292, 0xbfff }, + { 6307, 0xb56f }, { 6318, 0x77bd }, { 6330, 0x35fb }, { 6341, 0xf372 }, + { 6351, 0x58fa }, { 6360, 0xbdfc }, { 6372, 0xdd5e }, { 6383, 0xfffb }, + /* 0x7400 */ + { 6398, 0x7997 }, { 6408, 0xf3fe }, { 6421, 0xaa9b }, { 6430, 0xef86 }, + { 6440, 0xfffd }, { 6455, 0x215f }, { 6463, 0xdfff }, { 6478, 0xbf3e }, + { 6490, 0xb774 }, { 6500, 0xaffe }, { 6513, 0xfc7f }, { 6526, 0xfbff }, + { 6541, 0xffff }, { 6557, 0xaffb }, { 6570, 0x3fa2 }, { 6579, 0x7f2f }, + /* 0x7500 */ + { 6591, 0x5fef }, { 6604, 0x68f5 }, { 6613, 0x44df }, { 6622, 0xb250 }, + { 6628, 0x26de }, { 6637, 0xe1ef }, { 6648, 0xfb9f }, { 6661, 0x7ceb }, + { 6672, 0x77b7 }, { 6684, 0x5929 }, { 6691, 0x27c4 }, { 6698, 0x8cc0 }, + { 6703, 0xd843 }, { 6710, 0xb68b }, { 6719, 0xf223 }, { 6727, 0x6dec }, + /* 0x7600 */ + { 6737, 0xebd4 }, { 6747, 0x745e }, { 6756, 0xd18a }, { 6763, 0x2ec6 }, + { 6771, 0xcff6 }, { 6783, 0xafaf }, { 6795, 0x77f7 }, { 6808, 0x96ff }, + { 6820, 0xb62b }, { 6829, 0xfdb5 }, { 6841, 0xbfef }, { 6855, 0x7fe9 }, + { 6867, 0x1a9b }, { 6875, 0x7628 }, { 6882, 0x3fdf }, { 6895, 0xace9 }, + /* 0x7700 */ + { 6904, 0xd46d }, { 6913, 0x79ff }, { 6926, 0x5cba }, { 6935, 0xea1f }, + { 6945, 0xff74 }, { 6957, 0xf3fc }, { 6969, 0xe691 }, { 6977, 0x1dff }, + { 6989, 0x8fce }, { 6999, 0x7ff9 }, { 7012, 0xe95a }, { 7021, 0x57d6 }, + { 7031, 0xdfff }, { 7046, 0xe77f }, { 7059, 0x8553 }, { 7066, 0x1eb7 }, + /* 0x7800 */ + { 7076, 0xcdf8 }, { 7086, 0x4a29 }, { 7092, 0xcd17 }, { 7101, 0xa06e }, + { 7108, 0xaf5e }, { 7119, 0xdf1a }, { 7129, 0x83ff }, { 7140, 0xef7f }, + { 7154, 0x8d7f }, { 7165, 0x6275 }, { 7173, 0xff55 }, { 7185, 0xbde0 }, + { 7194, 0xf1dd }, { 7205, 0xfdce }, { 7217, 0xeeff }, { 7231, 0xfb6b }, + /* 0x7900 */ + { 7243, 0xffdd }, { 7257, 0xbff7 }, { 7271, 0xffef }, { 7286, 0xa3ef }, + { 7297, 0xfcbc }, { 7308, 0x0337 }, { 7315, 0x5e5a }, { 7324, 0xfa7f }, + { 7337, 0x7bcc }, { 7347, 0xfbff }, { 7362, 0xff7f }, { 7377, 0x91f7 }, + { 7387, 0xd5b4 }, { 7396, 0x7ed9 }, { 7407, 0x5527 }, { 7415, 0xd6fe }, + /* 0x7a00 */ + { 7427, 0x97b2 }, { 7436, 0xbb6f }, { 7448, 0xfff6 }, { 7462, 0x4577 }, + { 7471, 0xffbf }, { 7486, 0xff7d }, { 7500, 0xffff }, { 7516, 0x782e }, + { 7524, 0xdea4 }, { 7533, 0x4e19 }, { 7540, 0xce9e }, { 7550, 0x7ff7 }, + { 7564, 0xf7ff }, { 7579, 0x3dbf }, { 7591, 0x5f96 }, { 7601, 0x59ff }, + /* 0x7b00 */ + { 7613, 0x72a7 }, { 7622, 0xb5cd }, { 7632, 0xa28e }, { 7639, 0xaaf5 }, + { 7649, 0x655f }, { 7659, 0xd2a8 }, { 7666, 0xbffa }, { 7679, 0xb559 }, + { 7688, 0xdfde }, { 7701, 0xcf4e }, { 7711, 0xc039 }, { 7717, 0xfeed }, + { 7730, 0xef3d }, { 7742, 0xd9f5 }, { 7753, 0xbb9d }, { 7764, 0xaf7d }, + /* 0x7c00 */ + { 7776, 0x677f }, { 7788, 0x7fbf }, { 7802, 0xfb3f }, { 7815, 0x7eff }, + { 7829, 0xdffc }, { 7842, 0xffff }, { 7858, 0xffff }, { 7874, 0xc7e7 }, + { 7885, 0xfdff }, { 7900, 0x0e59 }, { 7907, 0xbbcb }, { 7918, 0x8df1 }, + { 7927, 0xca5d }, { 7936, 0x6d1f }, { 7946, 0x7efe }, { 7959, 0xf6ff }, + /* 0x7d00 */ + { 7973, 0xfbff }, { 7988, 0xffff }, { 8004, 0x777a }, { 8015, 0xffff }, + { 8031, 0xffff }, { 8047, 0xffff }, { 8063, 0xbfff }, { 8078, 0xff7f }, + { 8093, 0xffff }, { 8109, 0xffff }, { 8125, 0xbfbf }, { 8139, 0xffff }, + { 8155, 0xffff }, { 8171, 0xffff }, { 8187, 0xffff }, { 8203, 0xffff }, + /* 0x7e00 */ + { 8219, 0xffff }, { 8235, 0xffff }, { 8251, 0xffff }, { 8267, 0xf7ff }, + { 8282, 0xff7d }, { 8296, 0xffff }, { 8312, 0xffff }, { 8328, 0xffff }, + { 8344, 0xfffb }, { 8359, 0x77ff }, { 8373, 0x4000 }, { 8374, 0x1810 }, + { 8377, 0x0000 }, { 8377, 0x0040 }, { 8378, 0x1010 }, { 8380, 0x0200 }, + /* 0x7f00 */ + { 8381, 0x0400 }, { 8382, 0x4001 }, { 8384, 0x0000 }, { 8384, 0xfa80 }, + { 8391, 0xffcb }, { 8404, 0x7a4c }, { 8412, 0xb8f9 }, { 8422, 0xbde9 }, + { 8433, 0xabfd }, { 8445, 0x1bef }, { 8456, 0x7f6d }, { 8468, 0x4cfa }, + { 8477, 0xabdd }, { 8488, 0x7ecf }, { 8500, 0xbd9c }, { 8510, 0xe7f4 }, + /* 0x8000 */ + { 8521, 0xc784 }, { 8528, 0xec0a }, { 8535, 0xf81a }, { 8543, 0x5615 }, + { 8550, 0xc3b3 }, { 8559, 0xfaeb }, { 8571, 0xf9ff }, { 8585, 0x7ffd }, + { 8599, 0xe526 }, { 8607, 0x42b7 }, { 8615, 0x11c8 }, { 8620, 0x0b69 }, + { 8627, 0x8fa0 }, { 8634, 0x813f }, { 8642, 0x404d }, { 8647, 0xcaa0 }, + /* 0x8100 */ + { 8653, 0x19bb }, { 8662, 0xbaa0 }, { 8669, 0x6fff }, { 8683, 0xbeb9 }, + { 8694, 0xe2bf }, { 8705, 0xf9c4 }, { 8714, 0x9d5e }, { 8724, 0x01ec }, + { 8730, 0x7afa }, { 8741, 0xc6fd }, { 8752, 0xfab7 }, { 8764, 0xf3f7 }, + { 8777, 0xebb0 }, { 8786, 0xffff }, { 8802, 0xcb77 }, { 8813, 0xa7e7 }, + /* 0x8200 */ + { 8824, 0xcf88 }, { 8832, 0x27ea }, { 8841, 0x42f1 }, { 8848, 0xb404 }, + { 8853, 0x756f }, { 8864, 0x7aff }, { 8877, 0x3eff }, { 8890, 0x19e2 }, + { 8897, 0x12eb }, { 8905, 0x4c79 }, { 8913, 0x008d }, { 8917, 0x9c64 }, + { 8924, 0x026d }, { 8930, 0x2641 }, { 8935, 0x7784 }, { 8943, 0xf56d }, + /* 0x8300 */ + { 8954, 0x2c01 }, { 8958, 0xe34d }, { 8967, 0x467f }, { 8977, 0xe885 }, + { 8984, 0x7d36 }, { 8994, 0x23e8 }, { 9001, 0x0004 }, { 9002, 0xc67f }, + { 9013, 0xbd9f }, { 9025, 0xa6f3 }, { 9035, 0xf0fe }, { 9046, 0xc820 }, + { 9050, 0x6b5c }, { 9059, 0x4eaf }, { 9069, 0xf9dc }, { 9080, 0xdcf8 }, + /* 0x8400 */ + { 9090, 0x07a5 }, { 9097, 0xcefd }, { 9109, 0xfe0f }, { 9120, 0xcefd }, + { 9132, 0xffbf }, { 9147, 0xe17d }, { 9157, 0xc5f5 }, { 9167, 0xfa95 }, + { 9177, 0xa47b }, { 9186, 0xed7f }, { 9199, 0x7ffd }, { 9213, 0x58eb }, + { 9222, 0xd9ed }, { 9233, 0x5fb4 }, { 9243, 0xef96 }, { 9254, 0x6ffe }, + /* 0x8500 */ + { 9267, 0xefff }, { 9282, 0x7b75 }, { 9293, 0xe7fd }, { 9306, 0xc07f }, + { 9315, 0xf8f7 }, { 9327, 0xbdbf }, { 9340, 0xfeef }, { 9354, 0xb1eb }, + { 9364, 0x7f4f }, { 9376, 0xe7ff }, { 9390, 0x3aef }, { 9401, 0xfd7e }, + { 9414, 0x7dfd }, { 9427, 0xefd6 }, { 9439, 0xfdef }, { 9453, 0x77ff }, + /* 0x8600 */ + { 9467, 0xffdf }, { 9482, 0xffbd }, { 9496, 0xfd7f }, { 9510, 0xeeff }, + { 9524, 0x1fff }, { 9537, 0xbbec }, { 9548, 0xa7fb }, { 9560, 0x01fd }, + { 9568, 0xc3f8 }, { 9577, 0xcfd7 }, { 9589, 0x6867 }, { 9597, 0xfb8c }, + { 9607, 0x312e }, { 9614, 0x34ec }, { 9622, 0x9def }, { 9634, 0xbce0 }, + /* 0x8700 */ + { 9642, 0xd872 }, { 9650, 0xaa53 }, { 9658, 0xbdd1 }, { 9668, 0x376d }, + { 9678, 0xac7f }, { 9689, 0xfd77 }, { 9702, 0xbfc6 }, { 9713, 0x87ae }, + { 9722, 0xd6d3 }, { 9732, 0x7f77 }, { 9745, 0x46ff }, { 9756, 0xdbd7 }, + { 9768, 0xf3be }, { 9780, 0xf7f1 }, { 9792, 0xbbde }, { 9804, 0xbdff }, + /* 0x8800 */ + { 9818, 0xfbf7 }, { 9832, 0xf797 }, { 9844, 0xfff9 }, { 9858, 0xedfb }, + { 9871, 0xcfce }, { 9882, 0xfd6f }, { 9895, 0xa4c1 }, { 9901, 0x1f7a }, + { 9911, 0xd6c9 }, { 9920, 0xefbb }, { 9933, 0xd7eb }, { 9945, 0xef7d }, + { 9958, 0xbd99 }, { 9968, 0x7ccb }, { 9978, 0xfec3 }, { 9989, 0xace4 }, + /* 0x8900 */ + { 9997, 0xfbfb }, { 10011, 0xf1f2 }, { 10021, 0xf3dd }, { 10033, 0xffae }, + { 10046, 0xffed }, { 10060, 0x3fff }, { 10074, 0xffbf }, { 10089, 0x77ff }, + { 10103, 0xffb5 }, { 10116, 0xffff }, { 10132, 0xffff }, { 10148, 0xffff }, + { 10164, 0x2009 }, { 10167, 0xabb8 }, { 10176, 0x7797 }, { 10187, 0xfff7 }, + /* 0x8a00 */ + { 10202, 0xff7e }, { 10216, 0xffff }, { 10232, 0xffff }, { 10248, 0xbfff }, + { 10263, 0xfeff }, { 10278, 0xffff }, { 10294, 0xffff }, { 10310, 0xfdff }, + { 10325, 0xf9ff }, { 10339, 0xfff7 }, { 10354, 0xffff }, { 10370, 0xffff }, + { 10386, 0xffff }, { 10402, 0xffff }, { 10418, 0xffff }, { 10434, 0xffff }, + /* 0x8b00 */ + { 10450, 0xff7f }, { 10465, 0xffff }, { 10481, 0xffbf }, { 10496, 0xffff }, + { 10512, 0xffff }, { 10528, 0xffff }, { 10544, 0xefbf }, { 10558, 0xffff }, + { 10574, 0xffff }, { 10590, 0xffff }, { 10606, 0x1000 }, { 10607, 0x0802 }, + { 10609, 0x0080 }, { 10610, 0x0001 }, { 10611, 0x0400 }, { 10612, 0x0000 }, + /* 0x8c00 */ + { 10612, 0x0200 }, { 10613, 0x4000 }, { 10614, 0x0000 }, { 10614, 0xff00 }, + { 10622, 0xed3d }, { 10633, 0xfbdf }, { 10647, 0xf3f9 }, { 10659, 0xf8f7 }, + { 10671, 0xe9db }, { 10682, 0xfeef }, { 10696, 0xffff }, { 10712, 0xffff }, + { 10728, 0xffff }, { 10744, 0xffff }, { 10760, 0xffff }, { 10776, 0xffff }, + /* 0x8d00 */ + { 10792, 0xffff }, { 10808, 0x1fff }, { 10821, 0x0001 }, { 10822, 0x0000 }, + { 10822, 0x0000 }, { 10822, 0x8086 }, { 10826, 0xd720 }, { 10833, 0xff06 }, + { 10843, 0xf3cd }, { 10854, 0x7fed }, { 10867, 0xfff7 }, { 10882, 0x2ac5 }, + { 10889, 0x27a7 }, { 10898, 0x133d }, { 10906, 0x62e7 }, { 10915, 0xd057 }, + /* 0x8e00 */ + { 10923, 0x69df }, { 10934, 0x1fef }, { 10946, 0x29f3 }, { 10955, 0xd9dd }, + { 10966, 0xf068 }, { 10973, 0xfdf9 }, { 10986, 0x4dbf }, { 10997, 0x6faa }, + { 11007, 0x7f5d }, { 11019, 0xafee }, { 11031, 0x67ff }, { 11044, 0xfbfb }, + { 11058, 0xbfff }, { 11073, 0xffff }, { 11089, 0xffff }, { 11105, 0xffff }, + /* 0x8f00 */ + { 11121, 0xffff }, { 11137, 0xffff }, { 11153, 0xffff }, { 11169, 0xffff }, + { 11185, 0xffff }, { 11201, 0xffff }, { 11217, 0x043f }, { 11224, 0x0000 }, + { 11224, 0x1001 }, { 11226, 0x2004 }, { 11228, 0xf4f7 }, { 11240, 0x9dbc }, + { 11250, 0xbe49 }, { 11259, 0x04c4 }, { 11263, 0x908b }, { 11269, 0xdc76 }, + /* 0x9000 */ + { 11279, 0x5180 }, { 11283, 0x1328 }, { 11288, 0x1fb8 }, { 11297, 0xa69f }, + { 11307, 0x5f69 }, { 11317, 0xf670 }, { 11326, 0x9ed3 }, { 11336, 0x5fcf }, + { 11348, 0xf6f2 }, { 11359, 0xd555 }, { 11368, 0x2bb1 }, { 11376, 0xb084 }, + { 11381, 0x3b4d }, { 11390, 0xc774 }, { 11399, 0x5639 }, { 11407, 0x9eef }, + /* 0x9100 */ + { 11419, 0xffeb }, { 11433, 0xbdff }, { 11447, 0x7ff3 }, { 11460, 0xfdfd }, + { 11474, 0x01b7 }, { 11481, 0x9b7a }, { 11491, 0x29c1 }, { 11497, 0x1c08 }, + { 11501, 0xc55f }, { 11511, 0xf3f8 }, { 11522, 0x1bf3 }, { 11532, 0xfbcf }, + { 11545, 0x097f }, { 11554, 0xeffd }, { 11568, 0xffff }, { 11584, 0xffff }, + /* 0x9200 */ + { 11600, 0xffff }, { 11616, 0xffff }, { 11632, 0xffff }, { 11648, 0xffff }, + { 11664, 0xffff }, { 11680, 0xffff }, { 11696, 0xffff }, { 11712, 0xffef }, + { 11727, 0xbfff }, { 11742, 0xffff }, { 11758, 0xbfff }, { 11773, 0xffff }, + { 11789, 0xfeff }, { 11804, 0xffff }, { 11820, 0xffff }, { 11836, 0xffff }, + /* 0x9300 */ + { 11852, 0xffff }, { 11868, 0xffff }, { 11884, 0xffff }, { 11900, 0xbfff }, + { 11915, 0xffff }, { 11931, 0xffff }, { 11947, 0xfbff }, { 11962, 0xffff }, + { 11978, 0x7fff }, { 11993, 0xffff }, { 12009, 0xffff }, { 12025, 0xffff }, + { 12041, 0xfbff }, { 12056, 0xffbf }, { 12071, 0xffff }, { 12087, 0xffff }, + /* 0x9400 */ + { 12103, 0xffff }, { 12119, 0xffff }, { 12135, 0xffff }, { 12151, 0xbfff }, + { 12166, 0xffff }, { 12182, 0xffff }, { 12198, 0xf7ff }, { 12213, 0xffff }, + { 12229, 0x001f }, { 12234, 0x0142 }, { 12237, 0x0000 }, { 12237, 0x0000 }, + { 12237, 0x8080 }, { 12239, 0x0418 }, { 12242, 0x0040 }, { 12243, 0x0800 }, + /* 0x9500 */ + { 12244, 0x0000 }, { 12244, 0x1000 }, { 12245, 0x0081 }, { 12247, 0x2008 }, + { 12249, 0x0908 }, { 12252, 0x0420 }, { 12254, 0x4001 }, { 12256, 0x7fb0 }, + { 12266, 0xffff }, { 12282, 0xffff }, { 12298, 0xffff }, { 12314, 0xffff }, + { 12330, 0xffff }, { 12346, 0xffff }, { 12362, 0x10ff }, { 12371, 0x8000 }, + /* 0x9600 */ + { 12372, 0x0080 }, { 12373, 0x4908 }, { 12377, 0xbbf9 }, { 12389, 0x4781 }, + { 12395, 0xc40a }, { 12400, 0x77ce }, { 12411, 0xe869 }, { 12419, 0xff0b }, + { 12430, 0x569f }, { 12440, 0xec6e }, { 12450, 0xff7f }, { 12465, 0x8db6 }, + { 12474, 0x0d0c }, { 12479, 0xffdb }, { 12493, 0x78fe }, { 12504, 0xbd37 }, + /* 0x9700 */ + { 12515, 0x1c2c }, { 12521, 0xafb7 }, { 12533, 0xdbff }, { 12547, 0xbcfa }, + { 12558, 0xffff }, { 12574, 0xb5b3 }, { 12584, 0xfdd8 }, { 12595, 0xefa7 }, + { 12607, 0xd7df }, { 12620, 0xfee9 }, { 12632, 0x57f6 }, { 12643, 0xffeb }, + { 12657, 0xffff }, { 12673, 0xffff }, { 12689, 0xc13f }, { 12698, 0xff97 }, + /* 0x9800 */ + { 12711, 0xffff }, { 12727, 0xffff }, { 12743, 0xffff }, { 12759, 0xffff }, + { 12775, 0xffff }, { 12791, 0xffff }, { 12807, 0xffff }, { 12823, 0x001f }, + { 12828, 0x4800 }, { 12830, 0x0224 }, { 12833, 0xff08 }, { 12842, 0xffff }, + { 12858, 0xbfff }, { 12873, 0x38d1 }, { 12880, 0xfe7f }, { 12894, 0xffff }, + /* 0x9900 */ + { 12910, 0xdfff }, { 12925, 0xfffe }, { 12940, 0xbfff }, { 12955, 0xffff }, + { 12971, 0xffff }, { 12987, 0xffcf }, { 13001, 0x0057 }, { 13006, 0x4b08 }, + { 13011, 0x520c }, { 13016, 0xfc00 }, { 13022, 0xfedf }, { 13036, 0xffff }, + { 13052, 0xffff }, { 13068, 0xffff }, { 13084, 0xffff }, { 13100, 0xffff }, + /* 0x9a00 */ + { 13116, 0xffff }, { 13132, 0xffff }, { 13148, 0xffff }, { 13164, 0xffff }, + { 13180, 0xffff }, { 13196, 0xffff }, { 13212, 0x0fff }, { 13224, 0x0004 }, + { 13225, 0x6208 }, { 13229, 0x0230 }, { 13232, 0xfe40 }, { 13240, 0xea3c }, + { 13249, 0xe7d8 }, { 13259, 0x7ef5 }, { 13271, 0x57bd }, { 13282, 0xf5ff }, + /* 0x9b00 */ + { 13296, 0x7ef7 }, { 13309, 0x7ff7 }, { 13323, 0x7ff7 }, { 13337, 0xe7fb }, + { 13350, 0x5c41 }, { 13356, 0xffed }, { 13370, 0xffff }, { 13386, 0xffff }, + { 13402, 0xffff }, { 13418, 0xffff }, { 13434, 0xffff }, { 13450, 0xffff }, + { 13466, 0xffff }, { 13482, 0xffff }, { 13498, 0xffff }, { 13514, 0xffff }, + /* 0x9c00 */ + { 13530, 0xffff }, { 13546, 0xffff }, { 13562, 0xffff }, { 13578, 0xffff }, + { 13594, 0xffff }, { 13610, 0xffff }, { 13626, 0xffff }, { 13642, 0x6fff }, + { 13656, 0x9619 }, { 13663, 0x23c8 }, { 13669, 0x9400 }, { 13672, 0xc200 }, + { 13675, 0x0307 }, { 13680, 0x0c06 }, { 13684, 0xfffb }, { 13699, 0xffff }, + /* 0x9d00 */ + { 13715, 0xffff }, { 13731, 0xffff }, { 13747, 0xffff }, { 13763, 0xffff }, + { 13779, 0xffff }, { 13795, 0xffff }, { 13811, 0xffff }, { 13827, 0xffff }, + { 13843, 0xffff }, { 13859, 0xffff }, { 13875, 0xffff }, { 13891, 0xffff }, + { 13907, 0xffff }, { 13923, 0xffff }, { 13939, 0xffff }, { 13955, 0xffff }, + /* 0x9e00 */ + { 13971, 0xffff }, { 13987, 0x7fff }, { 14002, 0x4090 }, { 14005, 0x1811 }, + { 14009, 0x2001 }, { 14011, 0xa25d }, { 14019, 0xc027 }, { 14025, 0x3ff4 }, + { 14036, 0xf67b }, { 14048, 0x5ff3 }, { 14060, 0xffbf }, { 14075, 0x96ef }, + { 14086, 0x1def }, { 14097, 0x46ed }, { 14106, 0x795a }, { 14115, 0xa5ff }, + /* 0x9f00 */ + { 14127, 0x97ff }, { 14140, 0xfd76 }, { 14152, 0x6ffa }, { 14164, 0x957f }, + { 14175, 0xffef }, { 14190, 0xfffc }, { 14204, 0xffff }, { 14220, 0x7fff }, + { 14235, 0xe006 }, { 14240, 0x71ff }, { 14252, 0x003e }, +}; +static const Summary16 gbkext_inv_uni2indx_pagef9[19] = { + /* 0xf900 */ + { 14257, 0x0000 }, { 14257, 0x0000 }, { 14257, 0x1000 }, { 14258, 0x0000 }, + { 14258, 0x0000 }, { 14258, 0x0000 }, { 14258, 0x0000 }, { 14258, 0x0200 }, + { 14259, 0x0000 }, { 14259, 0x0020 }, { 14260, 0x0000 }, { 14260, 0x0000 }, + { 14260, 0x0000 }, { 14260, 0x0000 }, { 14260, 0x0080 }, { 14261, 0x0002 }, + /* 0xfa00 */ + { 14262, 0xf000 }, { 14266, 0x811a }, { 14271, 0x039b }, +}; +static const Summary16 gbkext_inv_uni2indx_pagefe[31] = { + /* 0xfe00 */ + { 14278, 0x0000 }, { 14278, 0x0000 }, { 14278, 0x0000 }, { 14278, 0x0001 }, + { 14279, 0xfe00 }, { 14286, 0xfef7 }, { 14300, 0x0f7f }, { 14311, 0x0000 }, + { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, + { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, + /* 0xff00 */ + { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, + { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, + { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, + { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0014 }, +}; + +static int +gbkext_inv_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0200 && wc < 0x02e0) + summary = &gbkext_inv_uni2indx_page02[(wc>>4)-0x020]; + else if (wc >= 0x2000 && wc < 0x22c0) + summary = &gbkext_inv_uni2indx_page20[(wc>>4)-0x200]; + else if (wc >= 0x2500 && wc < 0x2610) + summary = &gbkext_inv_uni2indx_page25[(wc>>4)-0x250]; + else if (wc >= 0x3000 && wc < 0x3100) + summary = &gbkext_inv_uni2indx_page30[(wc>>4)-0x300]; + else if (wc >= 0x3200 && wc < 0x33e0) + summary = &gbkext_inv_uni2indx_page32[(wc>>4)-0x320]; + else if (wc >= 0x4e00 && wc < 0x9fb0) + summary = &gbkext_inv_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0xf900 && wc < 0xfa30) + summary = &gbkext_inv_uni2indx_pagef9[(wc>>4)-0xf90]; + else if (wc >= 0xfe00 && wc < 0xfff0) + summary = &gbkext_inv_uni2indx_pagefe[(wc>>4)-0xfe0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = gbkext_inv_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/georgian_academy.h b/jni/parted/libiconv/lib/georgian_academy.h new file mode 100755 index 0000000..ff00fd3 --- /dev/null +++ b/jni/parted/libiconv/lib/georgian_academy.h @@ -0,0 +1,105 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GEORGIAN-ACADEMY + */ + +static const unsigned short georgian_academy_2uni[32] = { + /* 0x80 */ + 0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f, + /* 0x90 */ + 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178, +}; + +static int +georgian_academy_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c >= 0x80 && c < 0xa0) + *pwc = (ucs4_t) georgian_academy_2uni[c-0x80]; + else if (c >= 0xc0 && c < 0xe7) + *pwc = (ucs4_t) c + 0x1010; + else + *pwc = (ucs4_t) c; + return 1; +} + +static const unsigned char georgian_academy_page00[32] = { + 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ +}; +static const unsigned char georgian_academy_page01[72] = { + 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char georgian_academy_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char georgian_academy_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +georgian_academy_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x0080 && wc < 0x00a0) + c = georgian_academy_page00[wc-0x0080]; + else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e7 && wc < 0x0100)) + c = wc; + else if (wc >= 0x0150 && wc < 0x0198) + c = georgian_academy_page01[wc-0x0150]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = georgian_academy_page02[wc-0x02c0]; + else if (wc >= 0x10d0 && wc < 0x10f7) + c = wc-0x1010; + else if (wc >= 0x2010 && wc < 0x2040) + c = georgian_academy_page20[wc-0x2010]; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/georgian_ps.h b/jni/parted/libiconv/lib/georgian_ps.h new file mode 100755 index 0000000..2809f94 --- /dev/null +++ b/jni/parted/libiconv/lib/georgian_ps.h @@ -0,0 +1,122 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * GEORGIAN-PS + */ + +static const unsigned short georgian_ps_2uni_1[32] = { + /* 0x80 */ + 0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f, + /* 0x90 */ + 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178, +}; +static const unsigned short georgian_ps_2uni_2[39] = { + /* 0xc0 */ + 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10f1, + 0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10f2, 0x10dd, + /* 0xd0 */ + 0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10f3, 0x10e3, 0x10e4, + 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, + /* 0xe0 */ + 0x10ed, 0x10ee, 0x10f4, 0x10ef, 0x10f0, 0x10f5, +}; + +static int +georgian_ps_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c >= 0x80 && c < 0xa0) + *pwc = (ucs4_t) georgian_ps_2uni_1[c-0x80]; + else if (c >= 0xc0 && c < 0xe6) + *pwc = (ucs4_t) georgian_ps_2uni_2[c-0xc0]; + else + *pwc = (ucs4_t) c; + return 1; +} + +static const unsigned char georgian_ps_page00[32] = { + 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ +}; +static const unsigned char georgian_ps_page01[72] = { + 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char georgian_ps_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char georgian_ps_page10[40] = { + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc8, /* 0xd0-0xd7 */ + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xcf, 0xd0, 0xd1, /* 0xd8-0xdf */ + 0xd2, 0xd3, 0xd4, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, /* 0xe0-0xe7 */ + 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe3, /* 0xe8-0xef */ + 0xe4, 0xc7, 0xce, 0xd5, 0xe2, 0xe5, 0x00, 0x00, /* 0xf0-0xf7 */ +}; +static const unsigned char georgian_ps_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static int +georgian_ps_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x0080 && wc < 0x00a0) + c = georgian_ps_page00[wc-0x0080]; + else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e6 && wc < 0x0100)) + c = wc; + else if (wc >= 0x0150 && wc < 0x0198) + c = georgian_ps_page01[wc-0x0150]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = georgian_ps_page02[wc-0x02c0]; + else if (wc >= 0x10d0 && wc < 0x10f8) + c = georgian_ps_page10[wc-0x10d0]; + else if (wc >= 0x2010 && wc < 0x2040) + c = georgian_ps_page20[wc-0x2010]; + else if (wc == 0x2122) + c = 0x99; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/hkscs1999.h b/jni/parted/libiconv/lib/hkscs1999.h new file mode 100755 index 0000000..91607d7 --- /dev/null +++ b/jni/parted/libiconv/lib/hkscs1999.h @@ -0,0 +1,3004 @@ +/* + * Copyright (C) 1999-2006, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * HKSCS:1999 + */ + +static const unsigned short hkscs1999_2uni_page88[627] = { + /* 0x88 */ + 0x06c0, 0x06c1, 0x06c2, 0x06c3, 0x06c4, 0x720c, 0x06c5, 0x71d1, + 0x71cd, 0x06c6, 0x06c7, 0x71cb, 0x8c68, 0x06c8, 0x71ca, 0x06c9, + 0x06ca, 0x06cb, 0x06cc, 0x720e, 0x06cd, 0x06ce, 0x0080, 0x0041, + 0x010d, 0x0040, 0x0092, 0x0049, 0x009a, 0x0048, 0x00cc, 0x0053, + 0x0111, 0x0052, 0x70fd, 0x02be, 0x70fd, 0x02c0, 0x004a, 0x0081, + 0x0061, 0x010e, 0x0060, 0x0151, 0x0093, 0x0069, 0x009b, 0x0068, + 0x00ab, 0x006d, 0x0110, 0x006c, 0x00cd, 0x0073, 0x0112, 0x0072, + 0x00eb, 0x007a, 0x0114, 0x0079, 0x0116, 0x0118, 0x011a, 0x011c, + 0x007c, 0x70fd, 0x02bf, 0x70fd, 0x02c1, 0x006a, 0x0161, 0x041a, + 0x041b, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + /* 0x89 */ + 0xf029, 0x8005, 0x70fd, 0x374a, 0x70fd, 0x70fd, 0x207d, 0x40dd, + 0x6dce, 0x62df, 0x70fd, 0x70fd, 0xd275, 0x36d1, 0x215a, 0x2168, + 0x21e8, 0x2396, 0x23b4, 0x23dc, 0x2424, 0x24e1, 0x24e8, 0x257b, + 0x258e, 0x2611, 0x2618, 0x2922, 0x2b30, 0x2b44, 0x2b47, 0x2b72, + 0x2b74, 0x2da6, 0x2dde, 0x2ddf, 0x2eda, 0x30c6, 0x327b, 0x37c9, + 0x3a3e, 0x3a44, 0x3aa5, 0x3f8e, 0x42bc, 0x4735, 0x50a4, 0x50ac, + 0x50ba, 0x50c7, 0x50cf, 0x50df, 0x5106, 0x5137, 0x547a, 0x54cf, + 0x556f, 0x5b46, 0x5d3e, 0x5d62, 0x60a6, 0x60a7, 0x60ae, 0x4611, + 0x4efc, 0x4fcd, 0x3b86, 0x4cc9, 0x2467, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x628c, 0x4ab8, 0x625e, 0x52bc, 0x70fd, 0x5e4b, 0x52f6, + 0x78e7, 0x70fd, 0x70fd, 0x529f, 0x6f47, 0x1f8d, 0x6e49, 0x6e8c, + 0x1efe, 0xebb6, 0xcd4e, 0x6e8a, 0xee73, 0x0901, 0x70fd, 0x409a, + 0x543e, 0x4719, 0x70fd, 0x1c11, 0x6b6c, 0x6b8f, 0x7019, 0x4b87, + 0xdcac, 0x8a8a, 0x7650, 0x9526, 0x2064, 0x20c1, 0x20c0, 0x20c7, + 0x20ff, 0x212b, 0x2177, 0x078c, 0x21fd, 0x1148, 0x2243, 0x22c8, + 0x07bd, 0x07d3, 0x07e5, 0x23c6, 0x2b45, 0x241b, 0x243c, 0x2445, + 0x20c9, 0x24b9, 0x24d0, 0x2567, 0x0907, 0x25e9, 0x0891, 0x25f0, + 0x0893, 0x2602, 0x2663, 0x08ad, 0x08b2, 0x09c1, 0x26d3, 0x26e3, + 0x26f4, 0x26f9, 0x2710, 0x272f, 0x2758, 0x2763, 0x2768, 0x08d8, + 0x277f, 0x08e5, 0x08ff, 0x2817, 0x0905, + /* 0x8a */ + 0xd784, 0x2765, 0x70fd, 0x7b02, 0x7bd5, 0xb42b, 0x27d0, 0x96c6, + 0x0d2c, 0x7401, 0x5f86, 0xb138, 0xe665, 0x1353, 0xd97e, 0x497a, + 0x9638, 0x0d74, 0x1ad5, 0xda1d, 0xc7b2, 0xb16a, 0x371d, 0x7c3c, + 0x7e74, 0x7b95, 0x7fb4, 0x36cd, 0x5fbe, 0x7d56, 0x7acb, 0x7e24, + 0x96a9, 0xdad6, 0xaa13, 0x70fd, 0x7c06, 0xe9cd, 0xd9a9, 0x1af4, + 0xb227, 0x96c2, 0x6bb2, 0x0da7, 0xe6f4, 0x12ed, 0x0846, 0xb587, + 0xe754, 0xd3c8, 0x9744, 0x6dee, 0x6915, 0x70fd, 0x16d9, 0xbfe5, + 0x36f4, 0x2723, 0x974c, 0x95ca, 0x7f37, 0x0d3b, 0x7f2f, 0xc49a, + 0xc4d6, 0xd4a0, 0x372a, 0xb392, 0x7b03, 0x5fa8, 0x8de1, 0xe14c, + 0x7731, 0x70fd, 0x1b0b, 0x7269, 0x12fa, 0x2ab3, 0x978d, 0x70fd, + 0xaac8, 0x75bc, 0xbfd7, 0x7e0c, 0x7c56, 0x27b9, 0x13bb, 0x16ba, + 0x70fd, 0x1d74, 0x94e6, 0x7f5d, 0x53aa, 0x69f5, 0x7c5c, 0x35b9, + 0x0d3e, 0x9275, 0x5f00, 0x28e1, 0x36bc, 0x1143, 0x70fd, 0xf101, + 0x7cc9, 0x950f, 0x96c9, 0x70fd, 0x7f88, 0xa142, 0x0cd2, 0x0d46, + 0xdb1b, 0x08b8, 0xbdc9, 0x8d07, 0x2892, 0x7df1, 0x96b2, 0xe720, + 0x07fc, 0x3e7d, 0xb1bb, 0x70fd, 0x70fd, 0xd0f4, 0x988b, 0x8e48, + 0xf15b, 0xe24d, 0x7d3a, 0x7af4, 0xc5dc, 0x5193, 0x7f8f, 0x9303, + 0x9439, 0x093b, 0xb4a3, 0x7d4c, 0x7e4d, 0x7d6a, 0x1293, 0x7df0, + 0x7c07, 0x800f, 0x7d0c, 0x70fd, 0x7d6b, 0x7a69, 0x7c08, 0x7f80, + 0x7ffd, 0x12f9, 0x9196, 0x3672, 0x7e6d, + /* 0x8b */ + 0x9d34, 0xd1b9, 0x95ce, 0x7c3e, 0x7c3f, 0x9651, 0x9655, 0x0d58, + 0x7d58, 0x7f87, 0x7dee, 0xf132, 0xc890, 0xe252, 0xe2d9, 0xe24a, + 0x66aa, 0x270c, 0x54c4, 0x27f9, 0x70fd, 0xec83, 0x6d26, 0x6bb6, + 0xd29e, 0x97ee, 0x4340, 0x536d, 0x52ec, 0x2e5c, 0xc3b2, 0x5334, + 0x0ad7, 0x259f, 0xd97d, 0x62b6, 0x7dba, 0x7ccf, 0x7d37, 0x7dbb, + 0x091d, 0xb16b, 0x0949, 0x7b96, 0x28ef, 0x92b5, 0x7f89, 0x7cd0, + 0x7d38, 0x7f38, 0x8008, 0xda87, 0x8315, 0x7d39, 0xb1d0, 0x97a4, + 0x2c94, 0x7edd, 0x7ede, 0x7fb5, 0x7fb6, 0x29dc, 0x7cd1, 0xd214, + 0xdb4d, 0x7e75, 0x7d3b, 0xb47e, 0x0a43, 0x7e76, 0x8040, 0xb598, + 0xefbd, 0xae5a, 0x867a, 0xa6b7, 0xdafc, 0x2ad9, 0x24a8, 0x095a, + 0xb8bd, 0x4db2, 0x2da8, 0x1b00, 0x1dec, 0x6fa7, 0x1ce7, 0x6d1f, + 0x6c8d, 0xbb74, 0x9abd, 0x283b, 0x0932, 0x28c9, 0x2068, 0x2b42, + 0x8901, 0xf238, 0x6851, 0x7186, 0x209b, 0x20fb, 0x087e, 0x2e63, + 0x3191, 0x3204, 0x0c3a, 0x348c, 0x3775, 0x3dba, 0x3e75, 0x3e7a, + 0x426c, 0x442b, 0x206c, 0x44ad, 0xad69, 0x5152, 0x4b3b, 0x4ef9, + 0x5153, 0xc12a, 0x0801, 0x70fd, 0xc1cb, 0x5202, 0x5280, 0xc412, + 0xc711, 0x259d, 0x59e4, 0x5b41, 0xd3b2, 0x5d20, 0x5e5d, 0x6585, + 0x6678, 0x667f, 0x66e8, 0xe30f, 0x68e6, 0x6975, 0x69ce, 0x69de, + 0x6a63, 0xe790, 0x6d7c, 0x6e9f, 0x6f44, 0x3daf, 0x7047, 0x2077, + 0x7187, 0x671d, 0x3477, 0x65a2, +}; +static const unsigned short hkscs1999_2uni_page8d[3140] = { + /* 0x8d */ + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x2f7e, 0x2f88, 0x2f96, 0x10fc, 0x0b4f, 0x2fe4, 0x2ff9, 0x0b60, + 0x0b78, 0x3082, 0x30fd, 0x3165, 0x31c3, 0x0c48, 0x0c54, 0x0c7f, + 0x0c8d, 0x3317, 0x337d, 0x2f25, 0x0cc9, 0x33f7, 0x33f9, 0x340f, + 0x0cf8, 0x346c, 0x34d0, 0x3525, 0x3558, 0x0d38, 0x28f1, 0x0d43, + 0x3622, 0x363b, 0x3647, 0x369a, 0x0d8b, 0x3700, 0x2f55, 0x2861, + 0x701f, 0x0dd7, 0x37c6, 0x0dfd, 0x383f, 0x3893, 0x0e32, 0x38d2, + 0x0e62, 0x3956, 0x0e82, 0x39e4, 0x3a40, 0x0e98, 0x3a8a, 0x3ac4, + 0x0eb2, 0x0eb1, 0x0ebb, 0x3b49, 0x3b83, 0x445c, 0x3ba4, 0x3bdf, + 0x3bc5, 0x0efc, 0x3c16, 0x0f1d, 0x3ca5, 0x3cb4, 0x3cb1, 0x3cc2, + 0x0f2c, 0x3cd9, 0x0f32, 0x3ceb, 0x3cf5, 0x3d14, 0x3d36, 0x3dc1, + 0x3e01, 0x3e2a, 0x3eb5, 0x3eea, 0x0fcb, 0x3f42, 0x3f46, 0x3f66, + 0x3fc1, 0x0fef, 0x3fe4, 0x3ff1, 0x4015, 0x4018, 0x4029, 0x4086, + 0xdfc0, 0x40bb, 0x40e2, 0x40da, 0x6fff, 0x40e8, 0x40e9, 0x4124, + 0x4134, 0x1046, 0xa481, 0x4181, 0x41be, 0x106a, 0x1075, 0x43b7, + 0x2ed9, 0x108a, 0x422c, 0x1091, 0x4250, 0x4254, 0x426f, 0x427f, + 0x4289, 0x73e5, 0x16c1, 0x0931, 0x7d98, + /* 0x8e */ + 0xa417, 0x29fe, 0xcc13, 0x433e, 0xb920, 0x098e, 0x3be2, 0xe1e9, + 0x2db4, 0x4c49, 0xb9a1, 0xe659, 0x4c65, 0x4c7d, 0xba6c, 0x4cbb, + 0x4cb0, 0x4cc2, 0x4cc3, 0x43d1, 0xc30d, 0x14ca, 0x4cda, 0x4cdd, + 0x4cea, 0x14ef, 0x26f2, 0xbc01, 0x4d0b, 0x4d55, 0x4d29, 0xb5ce, + 0xbcfe, 0x4da2, 0x4d6f, 0x559c, 0xbbb4, 0xc9bf, 0x4dd0, 0x5621, + 0x4d92, 0x70fd, 0xbd20, 0x10ad, 0xbc65, 0x5692, 0x4dfa, 0x70fd, + 0x4e35, 0xbcc1, 0x4e44, 0x4e83, 0xad02, 0x4ea6, 0x38bd, 0xaab8, + 0x4ec9, 0x4ec7, 0x4ee6, 0x4e74, 0x4ef3, 0x4ef5, 0x70fd, 0x5067, + 0x181d, 0xcb84, 0x4f5d, 0xcc16, 0x468d, 0x4f89, 0x4fab, 0x4335, + 0x4fb3, 0x70fd, 0xa597, 0xbf69, 0x4fe4, 0x1013, 0x4ff5, 0x8639, + 0x4fe5, 0xdbed, 0x70fd, 0xc021, 0xc05a, 0x506e, 0x5092, 0x162b, + 0x656c, 0x5027, 0x5140, 0x5141, 0x5147, 0x4b36, 0xc150, 0x6ae1, + 0x5197, 0xc1d1, 0x51a3, 0x84a1, 0x7168, 0x185c, 0xa066, 0x1803, + 0xdbba, 0x51fa, 0xc309, 0x70fd, 0x5208, 0x521d, 0x70fd, 0x522f, + 0xedc7, 0xca03, 0x523b, 0x523c, 0x5261, 0x9214, 0x1c89, 0xc426, + 0xa363, 0xc4a8, 0x3965, 0x52a7, 0xe048, 0x5307, 0x531a, 0x2af0, + 0x91f6, 0x3ebf, 0xc318, 0xb2f8, 0x3727, 0x834a, 0x5418, 0x869e, + 0x3c93, 0xaee5, 0xaf15, 0x177a, 0x5429, 0x7a0d, 0xc812, 0xa2fe, + 0x2239, 0x83bd, 0x56e2, 0x5562, 0xc84a, 0xae27, 0x9e30, 0x85b3, + 0xa378, 0x54aa, 0x3b5b, 0xf2d4, 0x14db, + /* 0x8f */ + 0x574b, 0x54d0, 0x551a, 0x7cd6, 0x85f4, 0x0a01, 0x9afd, 0x9e5a, + 0x547b, 0x54e2, 0x5518, 0xa3cb, 0xcae3, 0xc845, 0xc8d7, 0x9ece, + 0x10bf, 0x551d, 0x282c, 0x5585, 0x180b, 0xcae5, 0x55ac, 0x70fd, + 0x55d3, 0x07be, 0xcc14, 0x3c97, 0x575a, 0x07d6, 0xcb82, 0x98ef, + 0x5658, 0xbbe4, 0x5671, 0x10d3, 0x17e4, 0x3ce7, 0x564a, 0xa275, + 0x4b58, 0x70fd, 0xc8d6, 0xcbb7, 0xcb83, 0x56de, 0x70fd, 0x5591, + 0x17a0, 0x5693, 0x56e4, 0xbc91, 0x1540, 0xbcc0, 0x1843, 0x5734, + 0x2d32, 0xcbd9, 0x1827, 0x5773, 0x1816, 0x39ff, 0x57d6, 0xdde5, + 0xddfb, 0x5781, 0xcdc8, 0x57c2, 0x8402, 0xce0d, 0xf2f2, 0x186a, + 0x57e8, 0x0988, 0x86e2, 0x2637, 0xcfda, 0x583e, 0x58f1, 0xee38, + 0x596e, 0x9627, 0x5931, 0x595a, 0x598f, 0x28a1, 0x582c, 0x3a96, + 0x190f, 0x59c5, 0x59c6, 0xd160, 0xa339, 0xd164, 0x59de, 0x5a1c, + 0x195b, 0x5a34, 0x5a35, 0x3601, 0x5a45, 0x4977, 0xd24f, 0x5b07, + 0x5b0a, 0x70fd, 0x70fd, 0x5b27, 0x5b3c, 0xe025, 0x5b67, 0xd424, + 0xd5bd, 0x5c1c, 0x4993, 0x62fe, 0x5c10, 0xd559, 0x4ce9, 0xd63a, + 0xa4cf, 0x1a13, 0xd638, 0x437c, 0x5c8c, 0x5c9f, 0xb630, 0xb6e5, + 0x5cbf, 0x5ccc, 0x5ccd, 0x5c29, 0xaefa, 0x5d10, 0x5d1b, 0x5c2f, + 0x851f, 0x1915, 0x59cf, 0x5ddb, 0xd754, 0xd78f, 0xf314, 0x0a65, + 0xd753, 0x5e16, 0xd798, 0xd7bd, 0x5e52, 0x5e43, 0x8750, 0x5e1b, + 0x425c, 0x5e51, 0xb089, 0x11d0, 0x70fd, + /* 0x90 */ + 0x5ee9, 0xd8c2, 0x7ed4, 0xae0a, 0x0ebc, 0xda7c, 0xce4c, 0x4ce7, + 0x5fed, 0x5ff6, 0x6003, 0x63d4, 0x6059, 0x606d, 0xdbe5, 0xdc52, + 0x60e5, 0x6403, 0xef9f, 0x7950, 0x60f3, 0x1c2a, 0xdfde, 0xdd3d, + 0xa33b, 0x3138, 0x9be2, 0x6139, 0xed94, 0xde3c, 0xdd01, 0x8ee5, + 0x0cc0, 0xcc17, 0x6177, 0xdd3c, 0xd5be, 0x61a1, 0xdd6c, 0xddcb, + 0x61e8, 0xde93, 0x6204, 0xde66, 0x61ee, 0x70fd, 0x6267, 0x0e30, + 0x62a9, 0x62c4, 0x4eac, 0xdf33, 0x8b09, 0x630e, 0x3edf, 0x6341, + 0x6362, 0xb739, 0x70fd, 0xe0c6, 0xa25b, 0xe10c, 0xb75b, 0x7bf1, + 0x642c, 0x646b, 0xe0e1, 0xe1eb, 0x428f, 0x2d03, 0xe0e2, 0xe0e5, + 0x1c65, 0x6344, 0xe1ec, 0xe239, 0xe1ff, 0x6473, 0x655b, 0x5ffc, + 0x6685, 0x66a6, 0x6526, 0x66a0, 0x41f6, 0x15b9, 0x917a, 0xde58, + 0x813c, 0xa3ae, 0x1cdf, 0x3e5c, 0x677b, 0x6796, 0x146c, 0x67a3, + 0xcc15, 0x341a, 0x67b6, 0x4af5, 0xe0e0, 0x67bd, 0x260c, 0x1ca1, + 0xc9f8, 0x7334, 0xc290, 0xe46f, 0xe4a5, 0xaf51, 0x8755, 0x9c8a, + 0x6831, 0x5802, 0x6836, 0x1d0f, 0x183d, 0x1885, 0xaf69, 0x4275, + 0x2d81, 0x681b, 0x70fd, 0xe595, 0x6857, 0x2d8a, 0xe5ab, 0x685f, + 0x6525, 0x2310, 0x9a37, 0x9a3c, 0x6889, 0x689f, 0x68b1, 0x68be, + 0x68c0, 0x68d2, 0x68e0, 0xb66c, 0x68ee, 0x461c, 0xe5f3, 0x70fd, + 0x68f5, 0xe5dd, 0xd47a, 0x1d91, 0x6934, 0x6933, 0x694b, 0x6966, + 0x0e4e, 0xceb5, 0x1051, 0x76b0, 0xa69c, + /* 0x91 */ + 0xb886, 0x69ca, 0x69b7, 0x69c8, 0x69c7, 0x1dbf, 0xca67, 0x8513, + 0x27f0, 0x69e1, 0x69e6, 0x69ec, 0x6478, 0x6a39, 0xaea9, 0x1e32, + 0xe7d7, 0xe885, 0x6af5, 0x6b0c, 0x6b3b, 0x6b10, 0x6b58, 0xb8a5, + 0x0a04, 0xe471, 0xea55, 0x6be0, 0x6be2, 0xea05, 0x6bf4, 0x1ece, + 0x6c14, 0x6c2d, 0xddc0, 0x2274, 0x6c34, 0xc768, 0x0c03, 0x99fd, + 0x6c50, 0x6c40, 0xeafe, 0x2c85, 0x86a3, 0x6c8e, 0xa78b, 0x6d02, + 0x6cff, 0x6d0c, 0xec28, 0x6e54, 0xed37, 0xeed2, 0xeeeb, 0xee21, + 0xee63, 0xef1f, 0x6dfe, 0x6e03, 0xee74, 0x6e8e, 0x3ac8, 0x6e44, + 0x8d9b, 0xeed3, 0xef60, 0x877b, 0xef73, 0x6db9, 0xedf9, 0xefb4, + 0x6f10, 0x6f15, 0x6f1e, 0x6f22, 0x1ff4, 0x6f2a, 0x6f2f, 0xa8a4, + 0x6f41, 0x0ea0, 0x0d25, 0x101d, 0x2172, 0x0afe, 0xe22b, 0x6f82, + 0x6f88, 0x1e56, 0x6524, 0xcae2, 0x6f97, 0x70fd, 0x6fb9, 0x28df, + 0x28ca, 0x6fc5, 0x6ab8, 0xe44b, 0x68f2, 0x567f, 0x6fe2, 0x6fe9, + 0x4cdc, 0x700e, 0x4416, 0x1e7e, 0xadf5, 0xae3b, 0x4377, 0xae78, + 0xa888, 0xaed1, 0x459e, 0xe1da, 0x873a, 0x4b9f, 0xdf7e, 0xe336, + 0x6469, 0x64f3, 0xe044, 0x63ec, 0x6481, 0x64cb, 0xdf6c, 0xa9f9, + 0x4417, 0x11eb, 0x4972, 0x4c43, 0x42d0, 0xa9b3, 0xa938, 0x437e, + 0x862f, 0x42a3, 0x86fe, 0x9e99, 0x11c7, 0x86c5, 0xb62f, 0x8638, + 0x0a62, 0x853b, 0x8679, 0x0a21, 0x85b4, 0x8711, 0xbecb, 0x0a63, + 0x8500, 0x299b, 0xaea5, 0x82be, 0x8168, + /* 0x92 */ + 0x8286, 0x8376, 0x5703, 0x9fa6, 0x70fd, 0x5655, 0xae14, 0xcea5, + 0xa3b1, 0xb6dc, 0xa43b, 0xcd92, 0x17f4, 0x9fee, 0xe91d, 0xcc66, + 0x3a39, 0x0a73, 0x0f55, 0x10e7, 0x2aac, 0x8762, 0x3a50, 0x1357, + 0xa03f, 0xa621, 0xa5cb, 0xa64f, 0xc961, 0x270b, 0x28de, 0xc471, + 0x28d2, 0x7e9f, 0x7a68, 0x7ccd, 0x64c6, 0xe113, 0x649c, 0x2138, + 0x236b, 0x0b59, 0xa976, 0x20fc, 0x7525, 0x743f, 0x218b, 0x21ca, + 0xb7d1, 0x2ca8, 0x726b, 0x748b, 0x0cd9, 0x73ca, 0x74d4, 0x0775, + 0x2169, 0x7380, 0xe3b3, 0x7335, 0x5c5a, 0x72cc, 0x20d8, 0x230d, + 0x234d, 0x21e2, 0x2143, 0xae8e, 0xa3ca, 0x2182, 0x226e, 0x22ac, + 0x22c1, 0x220c, 0x2225, 0x2298, 0x233c, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x4076, 0x9e95, 0xa3b9, 0xa3ff, 0x3fb2, 0x86c4, 0xa3c9, + 0x23e8, 0x2403, 0x7660, 0x17dd, 0x7563, 0x7552, 0x7551, 0x5eba, + 0xe09c, 0x770e, 0x2499, 0x24e4, 0x77f3, 0x2521, 0x70fd, 0x197a, + 0x438c, 0xa8cc, 0x7ae0, 0xae2c, 0x7fa4, 0x3c11, 0x7cdd, 0x70fd, + 0x11de, 0x4699, 0x4614, 0x4656, 0x4598, 0x1e4e, 0xaf3c, 0xa5cd, + 0x2610, 0x08c4, 0x440f, 0xa609, 0x27f4, 0x7405, 0x270d, 0x7a86, + 0x295d, 0x635d, 0x67f4, 0x6466, 0x2a1d, 0x29cd, 0x29bf, 0x097e, + 0x2b0b, 0x2cd9, 0xe046, 0x853a, 0x85af, 0x8550, 0x2c6c, 0x2bf8, + 0x638f, 0x2cbe, 0x2d0f, 0x2c52, 0xba06, 0x8833, 0x86a1, 0xa7d5, + 0x0a35, 0x3f45, 0x4643, 0x2c61, 0xbe03, + /* 0x93 */ + 0x2cc1, 0xe1d7, 0x74d3, 0x64e0, 0x468c, 0x81c3, 0x4305, 0x1c72, + 0x6508, 0xdffb, 0x64bd, 0x0ae0, 0x2e5e, 0x2ede, 0x309e, 0x3088, + 0x87d6, 0x87bc, 0xa1ee, 0x310d, 0x2d8f, 0x8743, 0x8744, 0x0a41, + 0x86e0, 0x0a1d, 0x853e, 0x0a13, 0x532a, 0xe047, 0x8a7a, 0x9db2, + 0xdfa8, 0x314c, 0x314e, 0x8767, 0x85eb, 0x2cab, 0x857b, 0x2d84, + 0x57d4, 0xd17d, 0x59e0, 0x32be, 0x9360, 0x912b, 0x321b, 0x11b8, + 0x90ef, 0x90fe, 0xe448, 0xccb3, 0x3400, 0x713e, 0x7146, 0x911b, + 0x33d9, 0x33d8, 0x32b5, 0x969b, 0x9707, 0xabd4, 0xe50d, 0x36b1, + 0xab65, 0x95aa, 0x0d69, 0x9562, 0x9d90, 0xe86a, 0x9878, 0x3577, + 0xf09b, 0x36f6, 0x3571, 0x3611, 0xae63, 0x9767, 0x34e4, 0x96a1, + 0x367b, 0x37ab, 0x3bb2, 0x0f34, 0x9a0e, 0x9c2d, 0xae09, 0x9c2b, + 0x274d, 0x9c60, 0x8719, 0xe5ff, 0x390e, 0x9c09, 0x9b33, 0x0e20, + 0x1490, 0xb704, 0xe122, 0xb70f, 0x853c, 0xb6db, 0xb625, 0x4aee, + 0x9a83, 0x866a, 0x9bb4, 0x07a4, 0x9b8f, 0x9b02, 0xa809, 0x38ce, + 0xca64, 0x38ab, 0x1e53, 0x3870, 0xd370, 0x8aab, 0x38a3, 0x9c52, + 0x9c61, 0x385e, 0xb972, 0x0c11, 0xa13a, 0xa0bc, 0x0ed9, 0xa0a2, + 0x9d3e, 0x46d0, 0x0ed6, 0x39cf, 0xab2a, 0x3af6, 0x3a5e, 0x0f04, + 0x3cfe, 0x0ba3, 0xa0d5, 0xa9c7, 0x3c73, 0x3c92, 0x3d09, 0x3d45, + 0x8752, 0x3751, 0x3ad8, 0x3c8c, 0x0f17, 0x3cba, 0x3d97, 0xa500, + 0xa25a, 0x64a0, 0x63f2, 0xe1ea, 0xe0cb, + /* 0x94 */ + 0x6389, 0xd8de, 0xdfdc, 0x6567, 0x3fe5, 0x410b, 0xae6c, 0x70fd, + 0xa4bf, 0x108f, 0x4004, 0xa57c, 0x2c7d, 0x400a, 0x2a87, 0x3f64, + 0x4a42, 0x433b, 0xa85a, 0xa7b6, 0x42f1, 0x4450, 0x4487, 0x4494, + 0xac4f, 0xac25, 0x23b9, 0xaf24, 0x766b, 0x467a, 0xa438, 0x9f5f, + 0xaeca, 0xad97, 0xbf21, 0x1206, 0x11b1, 0xaf5f, 0xe223, 0xa475, + 0x32e7, 0x11f3, 0x46cc, 0x463c, 0x6487, 0x4637, 0x179f, 0xcb2a, + 0x1851, 0x4783, 0x1263, 0xb099, 0xb0c6, 0x1258, 0x4755, 0x4873, + 0xf0c6, 0x0e59, 0x4668, 0xe0cc, 0xae2b, 0xae0e, 0x0e3b, 0x10cd, + 0xaece, 0x11ff, 0xae45, 0xad73, 0x62fa, 0x2972, 0x6442, 0xe0e3, + 0x86a4, 0x231f, 0xb4e1, 0xb4a7, 0x4978, 0x9bb2, 0x490e, 0x490f, + 0x497b, 0xab97, 0xa081, 0x0d9e, 0xad70, 0x4638, 0x469b, 0x11bf, + 0xaf3a, 0xaf47, 0x13c8, 0xaf16, 0xc0ae, 0x6407, 0xb701, 0x4a1e, + 0x4a8d, 0x4a88, 0x4ad2, 0x45d0, 0x4b59, 0xd281, 0xb863, 0x140e, + 0x70fd, 0x5696, 0x4ba5, 0x3c6d, 0xa43a, 0x4c3a, 0x4bf4, 0x146e, + 0x8526, 0x1432, 0x6335, 0x4bf1, 0x7c0c, 0xae0c, 0x7359, 0xa33a, + 0x85ae, 0x08d7, 0x27ab, 0x08b0, 0x09ea, 0x7294, 0x7acd, 0x4ce2, + 0x2c99, 0x91f5, 0xbaef, 0xbadc, 0x2c4d, 0x731b, 0x4af0, 0x2c6a, + 0xbbc6, 0x4cfe, 0x14f9, 0x4e5d, 0x4e6d, 0x1511, 0xbbb3, 0xbe3c, + 0xbe26, 0x4ecd, 0xae79, 0x85f0, 0x4e8e, 0x4e7c, 0x4eae, 0x3cf2, + 0x4fdc, 0x5007, 0x4fd3, 0x514e, 0xc121, + /* 0x95 */ + 0xc05c, 0xd648, 0x4f97, 0xbe02, 0x156a, 0xc8b5, 0x7856, 0x3a16, + 0x714e, 0x9ecf, 0x2a04, 0xc292, 0xc278, 0xade2, 0x51dd, 0x4d27, + 0x77ac, 0xbb29, 0xbd43, 0x4d0c, 0xbd8e, 0x6ae6, 0x5805, 0x6b63, + 0x3c5c, 0x9d7f, 0x0d22, 0xae77, 0xc3ed, 0x6b1f, 0xc3e0, 0x5680, + 0xce67, 0xca11, 0x17ea, 0x5337, 0x1702, 0x52c6, 0x5309, 0x5342, + 0xc574, 0x69c3, 0xc802, 0x5462, 0x5465, 0xc811, 0x5653, 0xcae7, + 0x57d0, 0xcf1b, 0x2cc6, 0x147f, 0x8680, 0x2d6b, 0x86e1, 0x2d24, + 0x8718, 0x5860, 0xf2fc, 0xa30f, 0x59ad, 0xd022, 0x2c42, 0x59ee, + 0x2185, 0x5a07, 0x5a3f, 0x5a66, 0x5ae5, 0x5acd, 0xb803, 0x5ad4, + 0xd2c5, 0xd2c4, 0xe1f5, 0xe1d9, 0xe19c, 0xdff9, 0x11ad, 0x56a3, + 0x19f5, 0x19cf, 0x0b32, 0x5bbd, 0x5b9c, 0xe608, 0x318d, 0x632b, + 0xa7c4, 0x3814, 0x4329, 0x42c4, 0x8685, 0x6ded, 0x5ddf, 0x5e29, + 0xd7dc, 0x2bda, 0x49c3, 0x2c30, 0x166e, 0x0a14, 0x5f6a, 0x5fe7, + 0xb009, 0x6070, 0x608a, 0x15f4, 0x3e98, 0x41bb, 0x8ee1, 0x1b9b, + 0x4179, 0x408b, 0x861a, 0x6ce9, 0x09f5, 0xadaf, 0x61fb, 0x70fd, + 0x27b1, 0x1c06, 0x62bb, 0x6504, 0xe04b, 0x1362, 0xe0fc, 0x6527, + 0xe21d, 0xe23b, 0x56e5, 0x5bab, 0x6699, 0x66a7, 0x6697, 0x6696, + 0xe2b4, 0x4645, 0x11c2, 0xad7f, 0xaec2, 0xa92a, 0x11e7, 0x9ba5, + 0x678f, 0xe3e7, 0xe366, 0xe365, 0x11cc, 0xae6d, 0xaef8, 0xa52e, + 0x4612, 0x466b, 0x11fc, 0x6841, 0xe470, + /* 0x96 */ + 0x3a87, 0x1d1d, 0xe453, 0xb91f, 0x70fd, 0x6468, 0xdf89, 0xe226, + 0xe12f, 0xc23e, 0x63ba, 0x2d51, 0x5ce9, 0x1c3c, 0x45f9, 0xa75b, + 0x689b, 0x6871, 0x6a38, 0x7de6, 0x3001, 0xe1c5, 0xaf32, 0x691f, + 0xe65a, 0x63f6, 0xe6d7, 0x62e5, 0x17c0, 0xe150, 0xaee7, 0xe164, + 0x69dc, 0xe045, 0x1200, 0x632a, 0x1c25, 0x5614, 0x6a3b, 0x6a4d, + 0xd606, 0x10fd, 0x6a9b, 0x1e2f, 0x6aaa, 0x6b5c, 0xe165, 0xb988, + 0x3ccf, 0x6b21, 0x2d3e, 0x6b2f, 0xe871, 0x1e50, 0xe8c8, 0x6abc, + 0x1e7d, 0x1e57, 0x647d, 0x2ab2, 0x81c2, 0x2a62, 0xae38, 0x83a8, + 0x4a44, 0x921f, 0xa338, 0x3b05, 0x107d, 0x6558, 0x0c67, 0x3390, + 0x9281, 0x946b, 0x3347, 0x6d4f, 0x6d53, 0x6d7b, 0x6d35, 0x6d10, + 0x6c7f, 0x6ccf, 0xebed, 0x6c9f, 0xef35, 0xee3e, 0x6da1, 0x1f6e, + 0xa644, 0x6e98, 0x1f70, 0x6d8c, 0xeef4, 0xee2d, 0xee33, 0xe8af, + 0x6e25, 0x56bd, 0xcb52, 0xcd1f, 0xc8c2, 0x57bc, 0x1833, 0xcae4, + 0xcbc4, 0xcb30, 0x5620, 0x57ae, 0xcb40, 0xa0d7, 0xbfa4, 0x4be2, + 0x9e9c, 0x9f40, 0x1c2d, 0xae5e, 0x1062, 0x64db, 0x63be, 0x6448, + 0x737f, 0x4ab9, 0x6377, 0x654d, 0x2224, 0x0780, 0x61a4, 0xb6dd, + 0x4a3d, 0x4a54, 0x4ab6, 0x4a4b, 0x8597, 0x9b49, 0xadc1, 0x09da, + 0x21b2, 0x41da, 0x41d9, 0x70fd, 0x421e, 0x2654, 0xa6f5, 0x29fb, + 0x2b33, 0x29ca, 0x6d96, 0x2a17, 0x4334, 0x07ef, 0xa6ec, 0x43eb, + 0xc980, 0xb2d7, 0x70fd, 0x85f5, 0xe049, + /* 0x97 */ + 0x334c, 0x2d0e, 0x2c4b, 0x15bc, 0xa9c8, 0x0a6c, 0x1e3b, 0xdffc, + 0x64bb, 0x64b8, 0x8716, 0x7ddd, 0x5672, 0xca00, 0x82d3, 0xa83a, + 0x9626, 0xa901, 0x2bd4, 0xa337, 0xc501, 0x4fa8, 0xc05b, 0xbfe4, + 0xae39, 0xae0b, 0xdffa, 0x63e5, 0x45e2, 0x11e9, 0x46b4, 0xe163, + 0x86df, 0x11e1, 0xaf33, 0x3d18, 0x45f3, 0x45fb, 0x11d6, 0xaebe, + 0xaf14, 0x8619, 0xaee6, 0x7467, 0x82e4, 0xae65, 0x4648, 0xad96, + 0x42a5, 0xadf6, 0x6384, 0x45e6, 0x645f, 0x75be, 0x6431, 0xe0ce, + 0xe016, 0x6486, 0xe1e7, 0xb755, 0x1c35, 0xe082, 0x436b, 0xadc3, + 0x7bbf, 0x28e4, 0x769a, 0x7aab, 0x7b78, 0x2742, 0x4bc4, 0x863a, + 0x4ffe, 0x8502, 0xaed0, 0x8692, 0x182e, 0x6501, 0x0a4a, 0xe0c0, + 0xae2d, 0x2bf0, 0x86ff, 0x86c3, 0xd084, 0x2ce1, 0x0a22, 0xa2db, + 0x09f0, 0x635f, 0x2cb9, 0xe081, 0x86a2, 0x6474, 0x0fcd, 0x79b4, + 0x1d56, 0x0cca, 0x2334, 0x1069, 0x104c, 0x825c, 0x4375, 0x15fb, + 0xda98, 0x400f, 0xe4a4, 0x17eb, 0x3f97, 0xd80f, 0x4267, 0x3eef, + 0x0fd6, 0xa52d, 0xa3ad, 0x4002, 0x410c, 0x106f, 0x74b5, 0x4751, + 0x09fc, 0x0808, 0x1980, 0x11da, 0x1b71, 0x2c04, 0x636e, 0x1c3e, + 0x6081, 0xe21c, 0xc900, 0x2a52, 0x2a08, 0x0a16, 0x8312, 0x42fe, + 0xa8a2, 0xaef1, 0x9963, 0x8170, 0x8f3d, 0x3af9, 0x3ba7, 0x8258, + 0x9de5, 0xd6b4, 0x9fdf, 0xe083, 0xa0d6, 0x9d3a, 0xb05f, 0x3c5a, + 0x9fad, 0xc9f7, 0x563e, 0x17df, 0x17ce, + /* 0x98 */ + 0xca66, 0xca91, 0xc9c2, 0xcd1e, 0x4117, 0xce49, 0x553d, 0x857a, + 0x55ed, 0xc9c0, 0xcd93, 0x861b, 0x2bc9, 0x2cc2, 0x85f3, 0x2ca1, + 0x2cb1, 0x8745, 0xa73c, 0x0a6d, 0x2c2f, 0x857c, 0x0a07, 0x438e, + 0x6490, 0x38da, 0xa7e5, 0x2cae, 0x2c6b, 0xa7d3, 0x3c6b, 0xa439, + 0xd276, 0xa99b, 0xa80a, 0x431d, 0xa799, 0xdfe1, 0x21f0, 0xca68, + 0x2f02, 0xaa0e, 0xd80d, 0xa8fd, 0x3c4c, 0xa796, 0x81c4, 0x42a6, + 0x4333, 0xa929, 0x10a5, 0x3f1f, 0xf1e5, 0xaecf, 0x5065, 0x2c2b, + 0x2f6f, 0x10f3, 0x319c, 0xaedd, 0x861f, 0x4fa4, 0x5626, 0x26c5, + 0xa1fa, 0x9c80, 0x72d4, 0x29be, 0x7815, 0x7699, 0x12e5, 0x8c1e, + 0xefb6, 0x4203, 0xe51b, 0x2fb0, 0x458f, 0x4ed3, 0xe059, 0xe5e0, + 0x2208, 0x51e7, 0x44cd, 0x4510, 0xd5f4, 0x4538, 0x4539, 0xb876, + 0x4541, 0x4548, 0x11a9, 0xd618, 0x61ac, 0x43f5, 0xad72, 0x45e1, + 0x53f6, 0x11ca, 0x490c, 0x11d1, 0x3ee2, 0x293d, 0x4619, 0x461e, + 0x461f, 0x11e2, 0x11f0, 0x11f4, 0x11fa, 0x46d3, 0x120e, 0x1253, + 0x4742, 0x476d, 0x4772, 0x478d, 0x127c, 0x47c8, 0x47dc, 0x12c0, + 0x484d, 0x12d7, 0x4874, 0x12dc, 0x487a, 0xb29c, 0x4388, 0x2863, + 0x5b00, 0x2aa9, 0x131d, 0x4943, 0x1339, 0x39a1, 0x1345, 0x091b, + 0x4998, 0x136a, 0x136f, 0x2e9e, 0x49be, 0x49cb, 0x2b32, 0x4a18, + 0x42b9, 0x4a1c, 0x13a8, 0x4a39, 0x4a47, 0x4a51, 0x4a66, 0x5648, + 0xb6b5, 0x4b33, 0x3a43, 0x4b32, 0x1403, + /* 0x99 */ + 0x1409, 0x4b91, 0x4b99, 0x60fb, 0x4c06, 0x60fc, 0x1467, 0x4c91, + 0x14b2, 0x4cbc, 0x5479, 0x14c4, 0x4ccf, 0x4cdb, 0x14cf, 0x2061, + 0x4d62, 0x4d6c, 0x4d7b, 0x4e12, 0x4e1b, 0x1560, 0x157a, 0x4e7b, + 0x4e9c, 0x158c, 0x4eb8, 0x1594, 0x4eed, 0x60d3, 0x42c0, 0x7b8f, + 0x4fcf, 0x4fd4, 0x4fd0, 0x4ffd, 0x51ae, 0x51b4, 0x449f, 0x1697, + 0x5220, 0x5225, 0x4d39, 0x522e, 0x5231, 0x5254, 0x10cc, 0x29f4, + 0x42a0, 0x52b7, 0x52e9, 0x16ed, 0x530c, 0x452a, 0x530e, 0x5312, + 0x4760, 0x5314, 0x1701, 0x0e79, 0x5356, 0x5359, 0x535a, 0x1713, + 0x2a7a, 0x537c, 0x5384, 0x1725, 0x5393, 0x172d, 0x53a5, 0x2a2f, + 0x53c1, 0x53e4, 0x5454, 0x178f, 0x54a6, 0x5476, 0x54ca, 0x54d8, + 0x54ff, 0x17b0, 0x5557, 0x6769, 0x3bca, 0x5605, 0x42f5, 0x5664, + 0x3323, 0x5688, 0x1804, 0x56be, 0x56e1, 0x56f8, 0x5710, 0x5738, + 0x5752, 0x183b, 0x576f, 0x5770, 0x57a0, 0x1877, 0x5832, 0x5852, + 0x5872, 0x58af, 0x6745, 0x590b, 0x1906, 0x1917, 0x5a2e, 0x5a7f, + 0x5aa4, 0x5ac7, 0x5b11, 0xd467, 0x5ba9, 0x5bb8, 0x5c14, 0x5c34, + 0x5d91, 0x5e14, 0x5e32, 0x5e5c, 0x1a98, 0x2a9f, 0x5f03, 0x1aed, + 0x212e, 0x5f7a, 0x2818, 0x2994, 0x5fb1, 0x2835, 0x5ff0, 0x1b37, + 0x600e, 0x6022, 0x6024, 0x602d, 0x6032, 0x60f7, 0x6101, 0x610a, + 0x610c, 0x6173, 0x6ac4, 0x1bad, 0x69e0, 0x6313, 0x1c1e, 0x6328, + 0x6358, 0x636b, 0x63b1, 0x63ae, 0x63bf, + /* 0x9a */ + 0x63e3, 0x63eb, 0x63f3, 0x63f4, 0x63fd, 0x6443, 0x6484, 0x64ad, + 0x1c45, 0x1c51, 0x6f3f, 0x6517, 0x2541, 0x651d, 0x652d, 0x653e, + 0x1c6a, 0x6554, 0x6579, 0x662d, 0x66a2, 0x1ca7, 0x66f4, 0x6733, + 0x1ce5, 0x39e0, 0x1d24, 0x6840, 0x1d35, 0x68b2, 0x68c2, 0x2894, + 0x1da4, 0x3328, 0x69b9, 0x1dd9, 0x69f1, 0x2a84, 0x6a0e, 0x6a19, + 0x23f4, 0x6a1c, 0x6a37, 0x6a42, 0x6a5d, 0x6a62, 0x1e30, 0x6ac5, + 0x1e5d, 0x6b3c, 0x6c0f, 0x4c83, 0x6c69, 0x6c81, 0x6cdd, 0x6cf1, + 0x6cf4, 0x1f2d, 0x6d20, 0x0aaf, 0x8902, 0x6dc9, 0x6d3a, 0x6f7e, + 0x2890, 0x6e13, 0x6e3d, 0x6e40, 0x6e7c, 0x65f6, 0x60f6, 0x6efb, + 0x6f2c, 0x6f31, 0x6f3d, 0x6f46, 0x65dc, 0x6f62, 0x6f71, 0x6f78, + 0x4cc8, 0x6fc4, 0x7194, 0x7377, 0x7460, 0x3b5a, 0x65c3, 0x2bec, + 0x7597, 0x2a80, 0x65c1, 0x0af9, 0x7655, 0x7695, 0x76f6, 0x84fa, + 0x2997, 0x4373, 0x79c2, 0x79cd, 0x7a7f, 0x26aa, 0xf1fb, 0x7a8b, + 0x26de, 0x7abb, 0x7afb, 0x7b13, 0x7b25, 0x7b3c, 0x3327, 0x7b4d, + 0x28ba, 0x7b75, 0x7b9d, 0x7bad, 0x7c2f, 0x7c72, 0x7c88, 0x3b95, + 0x6d2f, 0x5925, 0x7cc4, 0x7cce, 0x7d97, 0x7e50, 0x7ded, 0x7d33, + 0x2e60, 0x7e7c, 0x304b, 0x7f1c, 0x7f0f, 0x7f36, 0x395e, 0x7f3b, + 0x7f48, 0x7f56, 0x0987, 0x7f7f, 0x7f93, 0x7fef, 0x7ffb, 0x25a4, + 0x56ad, 0x81a3, 0x8235, 0x81f6, 0x5d01, 0x83f7, 0x8459, 0x8603, + 0x8607, 0x20b8, 0x42bb, 0x866d, 0x87aa, + /* 0x9b */ + 0x886d, 0x8885, 0x896a, 0x89b0, 0x89ec, 0x8b48, 0x3503, 0x8b55, + 0x8b95, 0x4398, 0x3a95, 0x8c85, 0x3c29, 0x0a08, 0x8ebc, 0x8f57, + 0x8f7a, 0x922a, 0x9371, 0x944f, 0x54fd, 0x9467, 0x9493, 0x9515, + 0x5b25, 0x9528, 0x60e0, 0x954e, 0x68b8, 0x957f, 0x6947, 0x6bbd, + 0x964c, 0x70fd, 0x9688, 0x96b7, 0xbbe8, 0x9708, 0x9712, 0x97b7, + 0x9795, 0x9842, 0x9934, 0x994c, 0x99b3, 0x99e6, 0x9c9f, 0x9d1e, + 0x31f1, 0x3888, 0x38ff, 0xd579, 0x9e67, 0x9ef3, 0x70fd, 0xae3a, + 0x70fd, 0x9f1a, 0xa016, 0x70fd, 0x7406, 0x2af5, 0x394e, 0x3b58, + 0xa1a7, 0xd1d7, 0xbf22, 0xa391, 0xa3f9, 0xd17e, 0x8cda, 0x1bd0, + 0x1d78, 0xa659, 0xe09a, 0xa82e, 0xa84d, 0xa57b, 0xa874, 0xa8d6, + 0xaec5, 0x764a, 0x2412, 0x7691, 0x2bdf, 0x8b28, 0x0efe, 0xa2bf, + 0xa944, 0xaa16, 0x29c8, 0xab74, 0x0cdb, 0xac2f, 0xdda8, 0xe949, + 0x0aa2, 0x8e03, 0x5cde, 0xe14e, 0x70fd, 0xacd2, 0xad7b, 0xae95, + 0x4409, 0xaf40, 0x7b38, 0x2ba5, 0xb225, 0xb2c6, 0x7779, 0x601a, + 0xb36c, 0x24cf, 0x297f, 0x4371, 0xb559, 0xb619, 0xa48a, 0xaf27, + 0x27fc, 0xb646, 0xb66e, 0xc892, 0x70fd, 0x07b3, 0xb6bf, 0xd1b2, + 0xb6de, 0x1a18, 0xb6e2, 0xb6e6, 0xb907, 0xadbf, 0xb95d, 0x22a6, + 0x083b, 0x9d0c, 0x70fd, 0xb9c3, 0x1a7c, 0xdf48, 0xbaee, 0xbb89, + 0xbc06, 0x8a50, 0x29e1, 0x4351, 0x70fd, 0xc002, 0xd6d2, 0x6196, + 0xc0b2, 0xb2da, 0x5ce2, 0xc282, 0xc2ca, + /* 0x9c */ + 0x2f9b, 0xc937, 0x70fd, 0xc304, 0x875c, 0x5c6a, 0xae76, 0xc308, + 0xa52f, 0xc352, 0x1e80, 0xc3ff, 0xc475, 0x921b, 0x6565, 0xb921, + 0x33d5, 0x2c67, 0xf28d, 0x70fd, 0x28f9, 0xaa61, 0xc4bc, 0x20aa, + 0xadb4, 0x6756, 0x3fcf, 0xc9fd, 0x0958, 0x5af7, 0xc559, 0xc62e, + 0xc291, 0xc61e, 0x70fd, 0xc687, 0x4d42, 0xe480, 0x7911, 0xc6e6, + 0x70fd, 0xc6f9, 0x4c45, 0x70fd, 0xc7ba, 0x6b26, 0xc7ed, 0x099f, + 0xc2e9, 0x7121, 0x4b83, 0xc7f4, 0xc89b, 0x2f6c, 0x9e19, 0x70fd, + 0xc8dd, 0x19d0, 0xc9e4, 0x473b, 0x59e5, 0xcaee, 0x2af6, 0x0a5c, + 0x90cd, 0xcd8b, 0xcecd, 0x0f94, 0xcf40, 0xcf45, 0x6381, 0x8dba, + 0xcf4b, 0x6430, 0xcfa6, 0xae50, 0x3e79, 0x659f, 0xd050, 0x7db8, + 0x59a7, 0x5a75, 0x9426, 0xdcb3, 0x85f1, 0x40b8, 0xaeaa, 0x8660, + 0x0ce4, 0x09f9, 0x70fd, 0x70fd, 0x183f, 0x38f6, 0xeaad, 0xe824, + 0x5ac3, 0xd30c, 0xd358, 0x2916, 0x13df, 0x844a, 0x0ce1, 0xa02f, + 0xd9a8, 0x8285, 0x43ad, 0x5566, 0xd4dd, 0xe568, 0x70fd, 0x1f77, + 0xcdef, 0xdfab, 0xd4fd, 0xd50a, 0xd60b, 0xd766, 0xa6ba, 0x4d43, + 0x4b7e, 0xd8c9, 0x41b5, 0xefdf, 0x3c43, 0xdb98, 0x25e2, 0xcb47, + 0x64bf, 0x3a76, 0x685d, 0xda2f, 0xd8e3, 0xc775, 0x82ad, 0x9baf, + 0xd908, 0x2fc5, 0xe230, 0xd943, 0x2955, 0x6923, 0xdf49, 0x2feb, + 0xae08, 0x37fe, 0x3c15, 0x2612, 0xaf25, 0xa4c1, 0x0f51, 0x3976, + 0xd950, 0xd9b4, 0xd9ee, 0x8c21, 0xda0f, + /* 0x9d */ + 0xda49, 0xda6f, 0xda9a, 0xdb86, 0xdbaf, 0xdc0a, 0x090a, 0xdca8, + 0xde2a, 0x1bfa, 0x3626, 0xdf56, 0x4a08, 0x6355, 0xdfb8, 0x16f2, + 0xdfe7, 0x16df, 0xdfe8, 0xe146, 0xe1d4, 0x2c38, 0xe209, 0x70fd, + 0xe405, 0xe4ac, 0x70fd, 0xe4d0, 0xe4fc, 0x10f7, 0xe51e, 0xaf4a, + 0x6110, 0x448f, 0x28cb, 0xe667, 0xe6e9, 0xe6b0, 0xe6b8, 0xe732, + 0xe851, 0xe8c9, 0xe8ea, 0xe943, 0xe9a8, 0xea0e, 0xeb1a, 0xeb5b, + 0x509f, 0xecb8, 0xece3, 0x1f64, 0x6647, 0xef93, 0x43a2, 0xefff, + 0x2011, 0x6152, 0xf0cb, 0x201c, 0x7b5c, 0x60fe, 0x2801, 0x60fa, + 0x8ff0, 0x60f9, 0xaf13, 0x1809, 0x507f, 0x4156, 0x3cf1, 0x212a, + 0x0824, 0xe12c, 0xd39d, 0x0a7a, 0x5fc0, 0x8635, 0xd8e4, 0xe16c, + 0xe199, 0xd53e, 0xc46f, 0x10eb, 0xd1d5, 0xa277, 0xb7b5, 0xba16, + 0x20da, 0xbe01, 0xc118, 0x28ff, 0x7d2d, 0x5f4e, 0x2dad, 0xa3c8, + 0xb05e, 0x361e, 0x70fd, 0x8636, 0x86bb, 0x3770, 0x286d, 0xbc4a, + 0x265a, 0xb5d1, 0x10c6, 0xeb58, 0x1f3d, 0x2862, 0x285e, 0x5149, + 0xbe58, 0x2bb5, 0xa2c0, 0x58f0, 0x205c, 0x7eaa, 0x7c09, 0x9fba, + 0x5317, 0x6dde, 0x5e58, 0x483b, 0x6d45, 0x484e, 0x49b9, 0x6445, + 0x2672, 0x5348, 0x54f7, 0x2865, 0x5332, 0x5618, 0x52bd, 0x282a, + 0x4b62, 0x2883, 0x2656, 0x7d5d, 0x090e, 0x2845, 0x2831, 0x3931, + 0xdb62, 0x096d, 0x4734, 0x2830, 0x27fa, 0x26d7, 0x27b2, 0x7b01, + 0x7b56, 0x3110, 0xb448, 0x7d36, 0x9662, + /* 0x9e */ + 0x7d62, 0x6f2b, 0x4f5a, 0x281e, 0x7f35, 0x34dd, 0x686d, 0x26d4, + 0x5e0d, 0x43f6, 0x6276, 0x363c, 0x35f9, 0x363e, 0x27a9, 0x9583, + 0x6d72, 0x98b3, 0x23da, 0x081f, 0x7c67, 0x23e7, 0x268d, 0x275e, + 0x2753, 0x4866, 0x5f6d, 0xc64a, 0x47b1, 0x52b6, 0x5984, 0x5906, + 0x5a47, 0x53b6, 0x561c, 0x7f81, 0x17ec, 0x4504, 0xac06, 0x2dd0, + 0x550b, 0xc653, 0x28bb, 0x91f4, 0xd72f, 0xa6e3, 0xd773, 0xcc10, + 0xcf76, 0x6270, 0x8099, 0x6308, 0xa2bc, 0xf1a9, 0x7d6c, 0x7db9, + 0x4466, 0x89e2, 0x1a4e, 0xb302, 0xd8b9, 0x7eab, 0x13fa, 0x6d5d, + 0x375f, 0x97a0, 0x1bf3, 0xaca0, 0xeb3c, 0x7eac, 0x7cca, 0x70fd, + 0xd123, 0x7ead, 0x70fd, 0xbf88, 0x8047, 0x43a3, 0x508e, 0x6dd0, + 0x205a, 0x2044, 0x08b7, 0x2d4d, 0x3ef2, 0x25a7, 0x09ec, 0x0d1c, + 0x25bd, 0x09e5, 0xab18, 0x2ada, 0xafae, 0x542d, 0x268b, 0x29ea, + 0xbad5, 0x78b9, 0x70fd, 0x0d92, 0x8fa5, 0x4574, 0xec6c, 0x1fc9, + 0x6ced, 0xa2be, 0xecf0, 0x1f1b, 0xb2e9, 0xe69e, 0xed5e, 0x565c, + 0xa336, 0xcf72, 0xc573, 0xa020, 0x356e, 0x4f25, 0xa437, 0xa3ac, + 0x0d6a, 0x6148, 0x250c, 0x1174, 0x09ba, 0x18e9, 0x754e, 0x4840, + 0x2d30, 0x7d76, 0x4a7a, 0xd86e, 0x2ae7, 0x13bf, 0x28bc, 0x6c8b, + 0x2fb4, 0x4854, 0xf074, 0x6f05, 0x1fa1, 0x70fd, 0x0b3b, 0x3359, + 0x9a5a, 0xa932, 0x70fd, 0x289d, 0x8169, 0x29e7, 0xade3, 0xebc6, + 0x2474, 0xcdee, 0x08ed, 0x70fd, 0x6dfc, + /* 0x9f */ + 0x4e56, 0x6c39, 0x2a1e, 0x85ac, 0x2e93, 0x3713, 0xe650, 0xc1b5, + 0xcea4, 0x586d, 0x7be8, 0xca62, 0xaf62, 0x7c31, 0x70fd, 0x243e, + 0x8b8f, 0x2fce, 0x6803, 0x8a91, 0x6f01, 0x618c, 0x4d1f, 0x6c02, + 0x2f11, 0x4da3, 0x34a8, 0x3575, 0x6bff, 0x4dcf, 0x6c2a, 0x4e7e, + 0x70fd, 0x4e42, 0x4e86, 0x6d15, 0x4dfc, 0x6c09, 0x70fd, 0x6d1b, + 0xadbe, 0x6fda, 0x27b3, 0x2e03, 0x223d, 0x6f18, 0x2232, 0x24a0, + 0x1106, 0x2511, 0x29a7, 0x2296, 0x2bf7, 0x3052, 0x68c8, 0x6e2b, + 0x609c, 0x26a9, 0x68b4, 0x6a40, 0x68ba, 0x256c, 0x3370, 0x3b6c, + 0x261a, 0x6d0a, 0x6d82, 0x1efb, 0x6741, 0x3bc0, 0x22e6, 0x4746, + 0x85ad, 0x6ada, 0x24b3, 0x70fd, 0x6259, 0x6781, 0x625c, 0x70fd, + 0x6251, 0xe397, 0x35bf, 0xca63, 0x3d0a, 0x2851, 0x628e, 0x477a, + 0x34c5, 0x74bc, 0x454f, 0x4e70, 0xbc21, 0xa2bd, 0x70fd, 0xad99, + 0x48d6, 0x6c9d, 0x206a, 0x7b94, 0x55be, 0x59c2, 0x70fd, 0x2e8a, + 0x3c00, 0x70fd, 0x29ba, 0x245f, 0x3035, 0x210e, 0x3e71, 0x72b2, + 0x2179, 0x26dc, 0x271a, 0x24da, 0x5ec2, 0x093e, 0x70fd, 0x0933, + 0x70fd, 0x3d92, 0x627c, 0x7025, 0x6c97, 0x692e, 0x69b4, 0x6bba, + 0x6f28, 0x6f04, 0x437a, 0x4d14, 0x70fd, 0x3e3a, 0x5998, 0x5178, + 0x70fd, 0x2860, 0xf14a, 0x5fb7, 0x6fd3, 0x70fd, 0x5f14, 0x5f8f, + 0x6e9c, 0x5f41, 0x34c2, 0xdbfd, 0x5f68, 0x5fb5, 0x4cd3, 0xaef7, + 0x4c3e, 0x4ad8, 0x3f2a, 0x5be7, 0x4807, + /* 0xa0 */ + 0xe05a, 0x6fa6, 0x3f0e, 0x5956, 0x47c3, 0xefb2, 0x4a53, 0xf200, + 0x5e4c, 0x44e2, 0x4571, 0x5cad, 0x4502, 0x46f1, 0x5e2b, 0xaf3b, + 0x57ef, 0x31fa, 0x5a20, 0x17b7, 0x70fd, 0x867b, 0xcb45, 0x70fd, + 0x5bfe, 0x905b, 0x70fd, 0x333d, 0x4867, 0x6bd7, 0x6dc4, 0x646e, + 0x6c8f, 0x5975, 0x70fd, 0x70fd, 0x5e37, 0x452c, 0x6821, 0x6cb0, + 0x0916, 0x44b2, 0x1ec7, 0x4e51, 0x6a4a, 0xc059, 0x3399, 0x1ec4, + 0x6f16, 0x33bd, 0x70fd, 0x299f, 0x33af, 0x34e6, 0x3479, 0x70fd, + 0x0d9c, 0x3422, 0x25ea, 0x9d35, 0x35a4, 0x3a42, 0x0912, 0x2f97, + 0xe1c2, 0x611a, 0xe339, 0x70fd, 0x2319, 0x8a06, 0x4b06, 0x2572, + 0x6738, 0x7dfb, 0x1365, 0x70fd, 0x49fe, 0x70fd, 0x4ec2, 0xbe9a, + 0x4eda, 0x4c2d, 0x5266, 0x5263, 0x4f4d, 0x4705, 0x46f2, 0x5b14, + 0x541a, 0x394c, 0x5262, 0xd086, 0x525b, 0x46f0, 0x5303, 0x4924, + 0x5b09, 0xc58c, 0x4753, 0xcc11, 0x5929, 0x594e, 0x53c8, 0x590c, + 0x5bc9, 0x5ded, 0x5cc3, 0x492b, 0x46f8, 0x56da, 0x0975, 0x3bf2, + 0x5ee6, 0x70fd, 0x5b29, 0x70fd, 0x3ff9, 0x5941, 0xa551, 0x46e7, + 0x10db, 0x4376, 0x32e4, 0x33dc, 0x0fd1, 0x70fd, 0x32b7, 0x70fd, + 0x5171, 0xe12d, 0x70fd, 0x3329, 0x1e3e, 0x2460, 0x0f58, 0xa287, + 0xbe57, 0xd1d6, 0xb6b1, 0x8784, 0x81be, 0xe883, 0xcb1c, 0xcded, + 0x2f01, 0xc0ad, 0xe00f, 0x9f77, 0x71ee, 0xc606, 0xb24e, 0x1862, + 0x2d5f, 0xc1cc, 0x6fd0, 0x6f26, 0xc12b, +}; +static const unsigned short hkscs1999_2uni_pagec6[471] = { + /* 0xc6 */ + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x0460, + 0x0461, 0x0462, 0x0463, 0x0464, 0x0465, 0x0466, 0x0467, 0x0468, + 0x0469, 0x0474, 0x0475, 0x0476, 0x0477, 0x0478, 0x0479, 0x047a, + 0x047b, 0x047c, 0x047d, 0x0370, 0x0371, 0x0372, 0x0373, 0x0374, + 0x0375, 0x0376, 0x0377, 0x0378, 0x0379, 0x2076, 0x207f, 0x20c5, + 0x20e0, 0x23c2, 0x23d6, 0x23eb, 0x2539, 0x2578, 0x25a9, 0x25f6, + 0x2b4a, 0x2dc0, 0x301b, 0x05b3, 0x30bf, 0x70fd, 0x3190, 0x31a1, + 0x3774, 0x70fd, 0x4792, 0x70fd, 0x60f5, 0x70fd, 0x0028, 0x01c6, + 0x06bd, 0x06be, 0x065d, 0x065e, 0x70fd, 0x70fd, 0x05c5, 0x05c6, + 0x05c7, 0x06bc, 0x70bb, 0x70bd, 0x04fd, 0x0601, 0x0602, 0x0603, + 0x0604, 0x0605, 0x0606, 0x0607, 0x0608, 0x0609, 0x060a, 0x060b, + 0x060c, 0x060d, 0x060e, 0x060f, 0x0610, 0x0611, 0x0612, 0x0613, + 0x0614, 0x0615, 0x0616, 0x0617, 0x0618, + /* 0xc7 */ + 0x0619, 0x061a, 0x061b, 0x061c, 0x061d, 0x061e, 0x061f, 0x0620, + 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, + 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, 0x0630, + 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, + 0x0639, 0x063a, 0x063b, 0x063c, 0x063d, 0x063e, 0x063f, 0x0640, + 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, + 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, 0x0650, + 0x0651, 0x0652, 0x0653, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, + 0x0666, 0x0667, 0x0668, 0x0669, 0x066a, 0x066b, 0x066c, 0x066d, + 0x066e, 0x066f, 0x0670, 0x0671, 0x0672, 0x0673, 0x0674, 0x0675, + 0x0676, 0x0677, 0x0678, 0x0679, 0x067a, 0x067b, 0x067c, 0x067d, + 0x067e, 0x067f, 0x0680, 0x0681, 0x0682, 0x0683, 0x0684, 0x0685, + 0x0686, 0x0687, 0x0688, 0x0689, 0x068a, 0x068b, 0x068c, 0x068d, + 0x068e, 0x068f, 0x0690, 0x0691, 0x0692, 0x0693, 0x0694, 0x0695, + 0x0696, 0x0697, 0x0698, 0x0699, 0x069a, 0x069b, 0x069c, 0x069d, + 0x069e, 0x069f, 0x06a0, 0x06a1, 0x06a2, 0x06a3, 0x06a4, 0x06a5, + 0x06a6, 0x06a7, 0x06a8, 0x06a9, 0x06aa, 0x06ab, 0x06ac, 0x06ad, + 0x06ae, 0x06af, 0x06b0, 0x06b1, 0x06b2, 0x06b3, 0x06b4, 0x06b5, + 0x06b6, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214, 0x0215, 0x0201, + 0x0216, 0x0217, 0x0218, 0x0219, 0x021a, + /* 0xc8 */ + 0x021b, 0x021c, 0x021d, 0x021e, 0x021f, 0x0220, 0x0221, 0x0222, + 0x0223, 0x0224, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022a, + 0x022b, 0x022c, 0x022d, 0x022e, 0x022f, 0x0230, 0x0231, 0x0232, + 0x0233, 0x0234, 0x0235, 0x0251, 0x0236, 0x0237, 0x0238, 0x0239, + 0x023a, 0x023b, 0x023c, 0x023d, 0x023e, 0x023f, 0x0240, 0x0241, + 0x0242, 0x0243, 0x0244, 0x0245, 0x0246, 0x0247, 0x0248, 0x0249, + 0x024a, 0x024b, 0x024c, 0x024d, 0x024e, 0x024f, 0x03e7, 0x03b8, + 0x03b9, 0x06cf, 0x71cc, 0x209a, 0x718a, 0x2442, 0x1791, 0x7030, + 0x23c8, 0x7031, 0xd187, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70e2, 0x70e4, 0x7087, 0x7082, 0x0731, + 0x0316, 0x0321, 0x065b, 0x065c, 0x0500, 0x0504, 0x0506, 0x0507, + 0x0508, 0x050a, 0x050c, 0x050d, 0x0515, 0x051c, 0x051d, 0x0525, + 0x0527, 0x052a, 0x052c, 0x052e, 0x0536, 0x053c, 0x053e, 0x0546, + 0x054a, 0x054c, 0x054d, 0x054f, 0x0556, 0x0557, 0x055e, 0x0563, + 0x70fd, 0x70fd, 0x70fd, 0x0183, 0x0150, 0x015b, 0x0154, 0x0175, + 0x00d3, 0x0078, 0x00cb, 0x018a, 0x016a, +}; +static const unsigned short hkscs1999_2uni_pagef9[942] = { + /* 0xf9 */ + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x70fd, + 0x70fd, 0x70fd, 0x70fd, 0x70fd, 0x4a81, 0x63b9, 0x5a4f, 0x2afb, + 0x3292, 0x4ea7, 0x2d3a, 0x0494, 0x04a6, 0x0497, 0x04a0, 0x04ac, + 0x04a3, 0x049a, 0x04a9, 0x049d, 0x0492, 0x04a4, 0x0495, 0x049e, + 0x04aa, 0x04a1, 0x0498, 0x04a7, 0x049b, 0x0493, 0x04a5, 0x0496, + 0x049f, 0x04ab, 0x04a2, 0x0499, 0x04a8, 0x049c, 0x0491, 0x0490, + 0x04ad, 0x04ae, 0x04b0, 0x04af, 0x70ed, + /* 0xfa */ + 0x75c7, 0x63db, 0x765f, 0xa505, 0x574c, 0x15b5, 0x45ef, 0x23f5, + 0x0989, 0xadc2, 0xdfe4, 0x6444, 0x881b, 0x54ee, 0xa288, 0x4a3c, + 0x3984, 0x351f, 0xadb3, 0xdfaa, 0x7360, 0xc8f3, 0x81c5, 0x21eb, + 0x902d, 0x2248, 0xca69, 0xd584, 0x9f00, 0xaf31, 0x9053, 0x70fd, + 0x743e, 0x31e4, 0x7440, 0x7407, 0x40db, 0x74df, 0x70fd, 0x2341, + 0x07ba, 0x234e, 0x696c, 0x0a83, 0x5616, 0xae24, 0x7547, 0x23a0, + 0x9cf4, 0x23aa, 0x7abf, 0x8d3c, 0x73a5, 0x9070, 0x760e, 0x9bb3, + 0x87c3, 0x2dc2, 0x58fd, 0x7633, 0xa259, 0x23f2, 0x23f8, 0x6db4, + 0x2409, 0x240f, 0x2411, 0x0fdc, 0x2413, 0xaf26, 0x23f3, 0x2422, + 0x2582, 0x242d, 0x55cd, 0x3b7e, 0xa02d, 0x31bb, 0x244b, 0x2466, + 0x247c, 0x24f5, 0x2497, 0x24d4, 0x24f9, 0x2505, 0x4e15, 0x5742, + 0x2520, 0x57cd, 0xc853, 0x70fd, 0xe0de, 0x2789, 0x40d9, 0xa4c0, + 0x7894, 0xa52c, 0x2573, 0x70fd, 0x7aa2, 0x3f0b, 0x8566, 0x3a5b, + 0x45d5, 0x328a, 0x11aa, 0x0c0c, 0x8528, 0x43dd, 0x17a2, 0x25ad, + 0x25b4, 0xde2b, 0x25be, 0x70fd, 0x8416, 0x8453, 0x49e6, 0x25d3, + 0xe09b, 0x25e0, 0x25eb, 0x25ee, 0x45a7, 0xb8f2, 0x1259, 0x459c, + 0x2601, 0x2605, 0x3e89, 0x2089, 0x2a3e, 0x2619, 0x0deb, 0x7a4f, + 0x2620, 0xa52b, 0x97a3, 0x2636, 0x7b37, 0x2653, 0x4279, 0x276b, + 0x3897, 0x3f9b, 0x26ad, 0xc893, 0x7c34, 0x279d, 0x26cf, 0x26e4, + 0x1aa6, 0x854d, 0x7d9d, 0x10b4, 0x7c0d, + /* 0xfb */ + 0xdfbc, 0x9198, 0x2787, 0x1fad, 0x266f, 0x4617, 0x27c6, 0x27e9, + 0x70fd, 0x8717, 0xa57a, 0x1852, 0xa975, 0x38f3, 0x7f74, 0x2877, + 0x390d, 0x9c0a, 0x38e4, 0x38ed, 0x288d, 0x288f, 0x4af1, 0x2931, + 0x6887, 0x263e, 0x2940, 0x292f, 0x292d, 0xe166, 0x0963, 0x810f, + 0x2986, 0xa6e5, 0x3eae, 0x428b, 0x2982, 0x09f1, 0xc9be, 0x2a26, + 0x82d6, 0x2a43, 0x8314, 0xa8a3, 0x2a66, 0xaff5, 0x2a9c, 0x2aea, + 0x08a1, 0x2b20, 0x2b1c, 0x80fc, 0x2b3b, 0x2e3f, 0x2983, 0xee90, + 0xa7b8, 0x64d3, 0x08e1, 0x2b5f, 0x3ae6, 0x0a03, 0x4059, 0x847e, + 0x2c64, 0x2793, 0x84d2, 0x5705, 0x2c09, 0x7c0e, 0xc9c1, 0xca6a, + 0x861c, 0x2c19, 0x863b, 0x85f2, 0xcae6, 0x3fb1, 0x8668, 0x8515, + 0x2c39, 0xcb85, 0x2ceb, 0x2ca3, 0x0a26, 0xae29, 0x70fd, 0x0a48, + 0x2cd6, 0x4665, 0x2d13, 0xcce1, 0x9094, 0x1085, 0x8751, 0x0a72, + 0x84f8, 0x30c3, 0x2510, 0x2db6, 0x37c8, 0x2dbc, 0xd50e, 0x1304, + 0x1b5d, 0x72c4, 0x2e15, 0x33a0, 0x8874, 0xba8c, 0x7625, 0x2e33, + 0x2ddd, 0x1fd0, 0x2e45, 0x88c4, 0x2e53, 0x45ce, 0x2e54, 0x89e5, + 0xc868, 0x2e89, 0x1bdd, 0x2ec5, 0x2f29, 0x2f2f, 0x2fcb, 0x8ab9, + 0x8af7, 0x2f50, 0x2f58, 0x2f86, 0x8b24, 0x2efa, 0x3017, 0x54fc, + 0x0b6d, 0xad81, 0x8c89, 0x8db3, 0x5487, 0x0b76, 0x0f02, 0x306e, + 0x3cca, 0x70fd, 0x30ba, 0xa9fc, 0x7b93, 0x25e6, 0x20f7, 0x70fd, + 0x25e8, 0x85b1, 0x3049, 0x3134, 0xdcc2, + /* 0xfc */ + 0x3139, 0x313b, 0x0be0, 0x313c, 0x3a7e, 0x651b, 0x314d, 0x7281, + 0xf254, 0x0e1e, 0x1bae, 0x81fa, 0x317a, 0xc648, 0x8f50, 0x70fd, + 0x8fb1, 0x31a3, 0x68bd, 0xcbae, 0x31b2, 0x6440, 0xe036, 0x31e7, + 0x2ff6, 0x105f, 0xb510, 0x8bea, 0xce38, 0x9168, 0x62d6, 0x735e, + 0xe029, 0x3271, 0x38c5, 0x86b7, 0x0ca3, 0x10c7, 0x0979, 0x29d0, + 0x92b4, 0x4b71, 0x1140, 0x32de, 0x70fd, 0x32f3, 0xae02, 0xae0f, + 0xd553, 0x46a4, 0x2321, 0x2ce0, 0x33a4, 0x5624, 0x3382, 0xf266, + 0xcc12, 0x33c1, 0x2434, 0x76d6, 0x33c7, 0x2dea, 0xa4f7, 0x935f, + 0x3413, 0xe19d, 0xe8dd, 0x3410, 0x0c72, 0x9480, 0x93c1, 0x3263, + 0x339c, 0x375e, 0x35cb, 0x7218, 0x3505, 0x85b0, 0x3515, 0x980d, + 0x35ac, 0xae5f, 0x0d57, 0x3678, 0x3638, 0x824e, 0x863c, 0x70fd, + 0x418a, 0x9836, 0x6914, 0xa5cc, 0xb89d, 0x3721, 0x3725, 0x657b, + 0x0da6, 0x367a, 0x0d97, 0x378d, 0x4116, 0xaea8, 0xaea3, 0x37c5, + 0x37ad, 0x379f, 0x99fe, 0x37f5, 0xadc0, 0x1df7, 0x3811, 0x13d8, + 0x8669, 0x3820, 0x3823, 0x321f, 0x9d40, 0x3858, 0x9b77, 0x9b78, + 0x3884, 0x9b24, 0x9b25, 0x388b, 0x7d35, 0x38a7, 0xb4a6, 0x38b3, + 0x70fd, 0x8afd, 0x9bb1, 0xddb4, 0x9b48, 0xb5d3, 0x49c5, 0x93f7, + 0x6aa4, 0x3942, 0xa8dc, 0xaea1, 0x0e6b, 0x3c3a, 0xa0c2, 0x70fd, + 0x39a7, 0x39a2, 0xa70d, 0xe4ad, 0x3a17, 0x17e9, 0x3a62, 0x4050, + 0x633c, 0x3a41, 0x9d26, 0xcae0, 0x3a9d, + /* 0xfd */ + 0x9daf, 0x3c21, 0x3c4b, 0xe0df, 0x3bb3, 0x3b03, 0x9ecd, 0x3b41, + 0x3b40, 0x1032, 0x0d41, 0x9f3c, 0x0ec0, 0x39ec, 0x3ba1, 0xe04a, + 0x15fc, 0x3b76, 0x3bd8, 0x0ee1, 0x7489, 0x5563, 0x22d0, 0x3c39, + 0x9f59, 0x8d6a, 0x3c85, 0xa003, 0x3cdd, 0x0f33, 0x39f1, 0x3d08, + 0xe55c, 0x0f4d, 0x3d5d, 0x7863, 0x331e, 0x3d75, 0x3db4, 0x92cd, + 0x40b5, 0xa1db, 0x7475, 0x8798, 0x0a80, 0x2661, 0xa21a, 0x3e21, + 0xa43c, 0x3e1c, 0x3e77, 0x8fcb, 0xad71, 0xc891, 0x3e9a, 0x5426, + 0x3eb9, 0xa33c, 0x17c5, 0xa33d, 0xa6e4, 0xad8c, 0xad80, 0xa289, + 0x0a25, 0x0feb, 0x7bf2, 0x6c83, 0x9b79, 0x8fd1, 0x518f, 0x3a77, + 0xca65, 0xcae1, 0xcb2b, 0x3fd6, 0x3f9c, 0x407c, 0x4104, 0xadff, + 0xa5c5, 0xcbb2, 0x5733, 0xccb4, 0x2407, 0x70fd, 0x70fd, 0x562e, + 0xe121, 0x70fd, 0xa3af, 0x4653, 0xa4c2, 0x4bcc, 0x404f, 0x2cd1, + 0x99cb, 0x41f8, 0x0a4d, 0x419d, 0xa3b0, 0x40fa, 0x8357, 0xa57d, + 0x1855, 0x64f0, 0x4144, 0x415c, 0x104e, 0x4174, 0xe530, 0x103b, + 0x419f, 0xa684, 0x41d3, 0xa5d1, 0xa695, 0xa579, 0xa530, 0xa4f4, + 0xa67f, 0x241f, 0xa696, 0xa697, 0xa680, 0xc0dd, 0x424b, 0x427e, + 0x42a7, 0x4281, 0x42cc, 0x42d5, 0x42d6, 0x42df, 0x1404, 0x10e8, + 0x43b4, 0x4396, 0xa7b7, 0x432b, 0x4345, 0x2cc8, 0x434a, 0x70fd, + 0x2edc, 0xa8a5, 0x434f, 0x6462, 0xa801, 0x432c, 0xa99a, 0xaea7, + 0xaea2, 0x43ba, 0xe1e8, 0x42bd, 0x440e, + /* 0xfe */ + 0x6542, 0x4415, 0x2b51, 0x6543, 0x4424, 0x6441, 0xb785, 0x442e, + 0x4440, 0xadf4, 0x3afd, 0x4455, 0x4457, 0x1155, 0x99c4, 0x3a4d, + 0x413d, 0x4482, 0x70fd, 0x452b, 0xace3, 0xdeeb, 0x1bed, 0xdec4, + 0x4528, 0x452e, 0x45cf, 0x45aa, 0x7afa, 0xc7ee, 0x45c9, 0x4649, + 0xa722, 0x8527, 0xaea4, 0x3863, 0x0a05, 0xae37, 0xae0d, 0xae7b, + 0x45f7, 0x4615, 0x3b43, 0xaea6, 0x4639, 0x7643, 0x11d7, 0x70fd, + 0x93ad, 0x4660, 0xe3b2, 0x4647, 0x45e4, 0x4676, 0x55b9, 0x466c, + 0x0a70, 0x4674, 0x64f1, 0x3c6c, 0x4682, 0x1c53, 0xaf0c, 0xa69f, + 0xaef9, 0xe18f, 0x2d86, 0xe203, 0x86de, 0x46c8, 0x87c8, 0x470e, + 0x70fd, 0x471e, 0xe3d9, 0x888b, 0x2e17, 0xe3ac, 0x6485, 0x474d, + 0x474a, 0x4767, 0x476e, 0xb2c2, 0x1204, 0xb0d3, 0x478e, 0x465d, + 0x479e, 0x47b4, 0x4802, 0x482c, 0x4851, 0x484f, 0x486f, 0x4876, + 0xc275, 0x4890, 0x53ef, 0x0b38, 0xc6d1, 0xc6ce, 0x48a1, 0x48a5, + 0x48b7, 0x48cc, 0xccdf, 0x5662, 0xb3dd, 0xb47d, 0x8adc, 0x491e, + 0x4926, 0x4940, 0x36ef, 0xb4e0, 0x4958, 0x9c2c, 0x49af, 0xdf64, + 0xdf68, 0x8501, 0x49f4, 0x70fd, 0x8236, 0xae92, 0x3b0a, 0x4aaf, + 0x4ac7, 0x4ad3, 0x67a5, 0x4b2e, 0xb760, 0x4ad7, 0x4b34, 0x4ab1, + 0xd18c, 0x60f8, 0x5a04, 0xe12b, 0xbfc3, 0x911c, 0x4b86, 0x5a80, + 0x3b42, 0x4b80, 0xb957, 0x4b9d, 0xd639, 0x4b3c, 0x4ba9, 0x402a, + 0xce66, 0x11a8, 0x4bc6, 0xe4cd, 0x4bd4, +}; + +static const ucs4_t hkscs1999_2uni_upages[973] = { + 0x00080, 0x000c0, 0x00100, 0x00140, 0x001c0, 0x00240, 0x00280, 0x002c0, + 0x00400, 0x00440, 0x01e80, 0x01ec0, 0x02100, 0x02140, 0x02180, 0x021c0, + 0x023c0, 0x02440, 0x02540, 0x02700, 0x02e80, 0x02ec0, 0x02f00, 0x03000, + 0x03040, 0x03080, 0x030c0, 0x031c0, 0x03200, 0x03400, 0x03440, 0x03480, + 0x034c0, 0x03500, 0x03540, 0x03580, 0x035c0, 0x03600, 0x03640, 0x03680, + 0x036c0, 0x03700, 0x03740, 0x03780, 0x037c0, 0x03800, 0x03840, 0x03880, + 0x038c0, 0x03900, 0x03940, 0x03980, 0x039c0, 0x03a00, 0x03a40, 0x03a80, + 0x03ac0, 0x03b00, 0x03b40, 0x03b80, 0x03bc0, 0x03c00, 0x03c40, 0x03cc0, + 0x03d00, 0x03d40, 0x03d80, 0x03dc0, 0x03e00, 0x03e40, 0x03e80, 0x03ec0, + 0x03f00, 0x03f40, 0x03f80, 0x03fc0, 0x04000, 0x04040, 0x04080, 0x040c0, + 0x04100, 0x04140, 0x04180, 0x041c0, 0x04200, 0x04240, 0x04280, 0x042c0, + 0x04300, 0x04340, 0x04380, 0x043c0, 0x04400, 0x04440, 0x04480, 0x044c0, + 0x04500, 0x04540, 0x04580, 0x045c0, 0x04600, 0x04640, 0x04680, 0x046c0, + 0x04700, 0x04740, 0x04780, 0x047c0, 0x04800, 0x04840, 0x04880, 0x048c0, + 0x04900, 0x04940, 0x04980, 0x049c0, 0x04a00, 0x04a80, 0x04ac0, 0x04b00, + 0x04b40, 0x04b80, 0x04bc0, 0x04c00, 0x04c40, 0x04c80, 0x04cc0, 0x04d00, + 0x04d80, 0x04e00, 0x04e40, 0x04e80, 0x04ec0, 0x04f00, 0x04f40, 0x04f80, + 0x04fc0, 0x05000, 0x05040, 0x05080, 0x050c0, 0x05100, 0x05140, 0x05180, + 0x051c0, 0x05200, 0x05240, 0x05280, 0x052c0, 0x05300, 0x05340, 0x05380, + 0x053c0, 0x05400, 0x05440, 0x05480, 0x054c0, 0x05500, 0x05540, 0x05580, + 0x055c0, 0x05600, 0x05640, 0x05680, 0x056c0, 0x05700, 0x05740, 0x05780, + 0x057c0, 0x05800, 0x05840, 0x05880, 0x058c0, 0x05900, 0x05940, 0x05980, + 0x059c0, 0x05a00, 0x05a40, 0x05a80, 0x05ac0, 0x05b00, 0x05b40, 0x05b80, + 0x05bc0, 0x05c00, 0x05c40, 0x05c80, 0x05cc0, 0x05d00, 0x05d40, 0x05d80, + 0x05dc0, 0x05e00, 0x05e40, 0x05e80, 0x05ec0, 0x05f00, 0x05f40, 0x05f80, + 0x05fc0, 0x06000, 0x06040, 0x06080, 0x060c0, 0x06100, 0x06140, 0x06180, + 0x061c0, 0x06200, 0x06240, 0x06280, 0x062c0, 0x06300, 0x06340, 0x06380, + 0x063c0, 0x06400, 0x06440, 0x06480, 0x064c0, 0x06500, 0x06540, 0x06580, + 0x065c0, 0x06600, 0x06640, 0x06680, 0x066c0, 0x06700, 0x06740, 0x06780, + 0x067c0, 0x06800, 0x06840, 0x06880, 0x068c0, 0x06900, 0x06940, 0x06980, + 0x069c0, 0x06a00, 0x06a40, 0x06a80, 0x06ac0, 0x06b00, 0x06b40, 0x06b80, + 0x06bc0, 0x06c00, 0x06c40, 0x06c80, 0x06cc0, 0x06d00, 0x06d40, 0x06d80, + 0x06e00, 0x06e40, 0x06e80, 0x06ec0, 0x06f00, 0x06f40, 0x06f80, 0x06fc0, + 0x07000, 0x07040, 0x07080, 0x070c0, 0x07100, 0x07140, 0x07180, 0x071c0, + 0x07200, 0x07240, 0x07280, 0x072c0, 0x07300, 0x07340, 0x07380, 0x073c0, + 0x07400, 0x07440, 0x07480, 0x074c0, 0x07500, 0x07540, 0x07580, 0x075c0, + 0x07600, 0x07640, 0x07680, 0x076c0, 0x07700, 0x07740, 0x07780, 0x077c0, + 0x07800, 0x07840, 0x07880, 0x078c0, 0x07900, 0x07940, 0x07980, 0x079c0, + 0x07a00, 0x07a40, 0x07a80, 0x07ac0, 0x07b00, 0x07b40, 0x07b80, 0x07bc0, + 0x07c00, 0x07c40, 0x07c80, 0x07cc0, 0x07d00, 0x07d40, 0x07d80, 0x07dc0, + 0x07e00, 0x07e40, 0x07e80, 0x07ec0, 0x07f00, 0x07f40, 0x07f80, 0x07fc0, + 0x08000, 0x08040, 0x08080, 0x080c0, 0x08100, 0x08140, 0x08180, 0x081c0, + 0x08200, 0x08240, 0x08280, 0x082c0, 0x08300, 0x08340, 0x08380, 0x083c0, + 0x08400, 0x08440, 0x08480, 0x084c0, 0x08500, 0x08540, 0x085c0, 0x08600, + 0x08640, 0x08680, 0x086c0, 0x08740, 0x08780, 0x087c0, 0x08800, 0x08840, + 0x08880, 0x088c0, 0x08900, 0x08940, 0x08980, 0x089c0, 0x08a00, 0x08a40, + 0x08a80, 0x08ac0, 0x08b00, 0x08b40, 0x08b80, 0x08bc0, 0x08c40, 0x08c80, + 0x08cc0, 0x08d00, 0x08d40, 0x08d80, 0x08dc0, 0x08e00, 0x08e40, 0x08e80, + 0x08ec0, 0x08f00, 0x08f40, 0x08f80, 0x08fc0, 0x09000, 0x09040, 0x09080, + 0x090c0, 0x09140, 0x09180, 0x091c0, 0x09200, 0x09240, 0x09280, 0x092c0, + 0x09300, 0x09340, 0x09380, 0x093c0, 0x09400, 0x09440, 0x09480, 0x094c0, + 0x09500, 0x09540, 0x09580, 0x095c0, 0x09600, 0x09640, 0x09680, 0x096c0, + 0x09700, 0x09740, 0x09780, 0x097c0, 0x09800, 0x09840, 0x09880, 0x098c0, + 0x09900, 0x09940, 0x09980, 0x099c0, 0x09a00, 0x09a40, 0x09a80, 0x09ac0, + 0x09b00, 0x09b40, 0x09b80, 0x09bc0, 0x09c00, 0x09c40, 0x09d00, 0x09d40, + 0x09d80, 0x09dc0, 0x09e00, 0x09e40, 0x09e80, 0x09ec0, 0x09f00, 0x09f40, + 0x09f80, 0x0f900, 0x0ff00, 0x0ffc0, 0x20000, 0x20040, 0x20080, 0x200c0, + 0x20100, 0x20180, 0x201c0, 0x20200, 0x20240, 0x20280, 0x202c0, 0x20300, + 0x20340, 0x20380, 0x203c0, 0x20400, 0x20440, 0x20480, 0x204c0, 0x20540, + 0x20580, 0x205c0, 0x20600, 0x20640, 0x20700, 0x20740, 0x20800, 0x20840, + 0x208c0, 0x20900, 0x20940, 0x209c0, 0x20a00, 0x20a40, 0x20a80, 0x20ac0, + 0x20b00, 0x20b80, 0x20bc0, 0x20c00, 0x20c40, 0x20c80, 0x20cc0, 0x20d00, + 0x20d40, 0x20d80, 0x20dc0, 0x20e00, 0x20e40, 0x20e80, 0x20ec0, 0x20f00, + 0x20f40, 0x20f80, 0x20fc0, 0x21000, 0x21040, 0x21080, 0x210c0, 0x21100, + 0x21140, 0x21180, 0x211c0, 0x21200, 0x21240, 0x21280, 0x212c0, 0x21300, + 0x21340, 0x21380, 0x213c0, 0x21400, 0x21440, 0x21480, 0x214c0, 0x21540, + 0x21580, 0x21600, 0x21640, 0x21680, 0x216c0, 0x21700, 0x21740, 0x21780, + 0x217c0, 0x21800, 0x21840, 0x21880, 0x218c0, 0x21900, 0x21940, 0x21980, + 0x219c0, 0x21a00, 0x21a40, 0x21b40, 0x21bc0, 0x21c00, 0x21c40, 0x21c80, + 0x21d40, 0x21d80, 0x21dc0, 0x21e00, 0x21e80, 0x21ec0, 0x21f00, 0x21f40, + 0x21f80, 0x21fc0, 0x22040, 0x22080, 0x220c0, 0x22100, 0x22140, 0x22180, + 0x221c0, 0x22200, 0x22240, 0x22300, 0x22380, 0x223c0, 0x22440, 0x22480, + 0x224c0, 0x22500, 0x22540, 0x22580, 0x22600, 0x22640, 0x22680, 0x226c0, + 0x22700, 0x22740, 0x22780, 0x227c0, 0x22800, 0x22840, 0x22880, 0x228c0, + 0x22900, 0x22940, 0x22980, 0x22a40, 0x22ac0, 0x22b00, 0x22b40, 0x22bc0, + 0x22c00, 0x22c40, 0x22c80, 0x22cc0, 0x22d00, 0x22d40, 0x22d80, 0x22dc0, + 0x22e00, 0x22e40, 0x22e80, 0x22ec0, 0x22f40, 0x22fc0, 0x23000, 0x23040, + 0x23080, 0x230c0, 0x23100, 0x23140, 0x23180, 0x231c0, 0x23200, 0x23240, + 0x23280, 0x232c0, 0x23300, 0x23380, 0x233c0, 0x23400, 0x23440, 0x234c0, + 0x23500, 0x23540, 0x23580, 0x235c0, 0x23600, 0x23640, 0x23680, 0x236c0, + 0x23700, 0x23740, 0x23780, 0x237c0, 0x23800, 0x239c0, 0x23a80, 0x23ac0, + 0x23b40, 0x23c80, 0x23cc0, 0x23d40, 0x23d80, 0x23dc0, 0x23e00, 0x23e80, + 0x23ec0, 0x23f00, 0x23f40, 0x23f80, 0x23fc0, 0x24000, 0x24040, 0x24080, + 0x240c0, 0x24100, 0x24140, 0x24180, 0x241c0, 0x24200, 0x24240, 0x24280, + 0x242c0, 0x24300, 0x24340, 0x24380, 0x243c0, 0x24400, 0x24440, 0x24480, + 0x244c0, 0x24500, 0x24540, 0x245c0, 0x24600, 0x24640, 0x24680, 0x246c0, + 0x24700, 0x24780, 0x247c0, 0x24800, 0x24880, 0x248c0, 0x24900, 0x24940, + 0x24980, 0x249c0, 0x24a00, 0x24a40, 0x24a80, 0x24ac0, 0x24b40, 0x24bc0, + 0x24c00, 0x24c80, 0x24cc0, 0x24d00, 0x24d80, 0x24dc0, 0x24e00, 0x24e40, + 0x24e80, 0x24f00, 0x24f40, 0x24f80, 0x24fc0, 0x25000, 0x25040, 0x25080, + 0x25100, 0x25140, 0x251c0, 0x25200, 0x25240, 0x25280, 0x252c0, 0x25300, + 0x25400, 0x25440, 0x25500, 0x25540, 0x25580, 0x255c0, 0x25600, 0x25640, + 0x25680, 0x256c0, 0x25700, 0x25740, 0x257c0, 0x25840, 0x258c0, 0x25900, + 0x25940, 0x25980, 0x259c0, 0x25a80, 0x25ac0, 0x25b40, 0x25b80, 0x25bc0, + 0x25c00, 0x25c40, 0x25c80, 0x25cc0, 0x25d00, 0x25d40, 0x25e00, 0x25e40, + 0x25e80, 0x25ec0, 0x25f00, 0x25f40, 0x25fc0, 0x26000, 0x26040, 0x26080, + 0x26100, 0x26140, 0x26180, 0x261c0, 0x26240, 0x262c0, 0x26300, 0x26340, + 0x26380, 0x263c0, 0x26400, 0x26440, 0x26480, 0x26500, 0x26540, 0x26580, + 0x26600, 0x26680, 0x266c0, 0x26700, 0x26740, 0x26780, 0x267c0, 0x26800, + 0x26840, 0x26880, 0x268c0, 0x26900, 0x26940, 0x26980, 0x269c0, 0x26a00, + 0x26a40, 0x26b00, 0x26b40, 0x26b80, 0x26bc0, 0x26c00, 0x26c40, 0x26c80, + 0x26cc0, 0x26d00, 0x26d40, 0x26d80, 0x26dc0, 0x26e00, 0x26e40, 0x26e80, + 0x26ec0, 0x26f00, 0x26f40, 0x26f80, 0x26fc0, 0x27000, 0x27040, 0x27080, + 0x270c0, 0x27100, 0x27140, 0x271c0, 0x27200, 0x27280, 0x272c0, 0x27380, + 0x27400, 0x27440, 0x27480, 0x27540, 0x27580, 0x275c0, 0x27600, 0x27640, + 0x27680, 0x27700, 0x27740, 0x27780, 0x277c0, 0x27840, 0x27880, 0x278c0, + 0x27900, 0x27940, 0x27980, 0x279c0, 0x27a00, 0x27a40, 0x27a80, 0x27ac0, + 0x27b00, 0x27b40, 0x27bc0, 0x27c00, 0x27d00, 0x27d40, 0x27d80, 0x27dc0, + 0x27e40, 0x27f00, 0x27fc0, 0x28000, 0x28040, 0x28080, 0x280c0, 0x28100, + 0x28140, 0x28180, 0x28200, 0x28240, 0x28280, 0x282c0, 0x28300, 0x28340, + 0x28380, 0x28400, 0x28440, 0x28480, 0x28500, 0x28540, 0x285c0, 0x28600, + 0x28680, 0x286c0, 0x28700, 0x28800, 0x28900, 0x28940, 0x28980, 0x289c0, + 0x28a00, 0x28a40, 0x28a80, 0x28ac0, 0x28b00, 0x28b40, 0x28b80, 0x28bc0, + 0x28c00, 0x28cc0, 0x28d00, 0x28d80, 0x28e00, 0x28e40, 0x28e80, 0x28ec0, + 0x28fc0, 0x29080, 0x290c0, 0x29100, 0x29140, 0x29180, 0x291c0, 0x29400, + 0x29440, 0x294c0, 0x29580, 0x295c0, 0x29700, 0x297c0, 0x29800, 0x29840, + 0x29880, 0x298c0, 0x29900, 0x29940, 0x29980, 0x299c0, 0x29a00, 0x29a40, + 0x29b00, 0x29bc0, 0x29c80, 0x29d00, 0x29d40, 0x29d80, 0x29dc0, 0x29e00, + 0x29e40, 0x29e80, 0x29ec0, 0x29f00, 0x29f80, 0x29fc0, 0x2a000, 0x2a080, + 0x2a0c0, 0x2a100, 0x2a140, 0x2a180, 0x2a1c0, 0x2a200, 0x2a280, 0x2a2c0, + 0x2a380, 0x2a400, 0x2a440, 0x2a5c0, 0x2a600, 0x2a640, 0x2a680, 0x2f800, + 0x2f840, 0x2f880, 0x2f8c0, 0x2f980, 0x2f9c0, +}; + +static int +hkscs1999_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x88 && c1 <= 0x8b) || (c1 >= 0x8d && c1 <= 0xa0) || (c1 >= 0xc6 && c1 <= 0xc8) || (c1 >= 0xf9 && c1 <= 0xfe)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + unsigned int i = 157 * (c1 - 0x80) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + ucs4_t wc = 0xfffd; + unsigned short swc; + if (i < 2041) { + if (i < 1883) + swc = hkscs1999_2uni_page88[i-1256], + wc = hkscs1999_2uni_upages[swc>>6] | (swc & 0x3f); + } else if (i < 10990) { + if (i < 5181) + swc = hkscs1999_2uni_page8d[i-2041], + wc = hkscs1999_2uni_upages[swc>>6] | (swc & 0x3f); + } else if (i < 18997) { + if (i < 11461) + swc = hkscs1999_2uni_pagec6[i-10990], + wc = hkscs1999_2uni_upages[swc>>6] | (swc & 0x3f); + } else { + if (i < 19939) + swc = hkscs1999_2uni_pagef9[i-18997], + wc = hkscs1999_2uni_upages[swc>>6] | (swc & 0x3f); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short hkscs1999_2charset[4698] = { + 0xc6d8, 0x8859, 0x8857, 0x885d, 0x885b, 0x8866, 0x8861, 0x885f, + 0x886a, 0x8868, 0x886f, 0x886d, 0x88a7, 0x8873, 0x8871, 0x8877, + 0x8875, 0xc8fb, 0x887b, 0x8879, 0x88a2, 0x8856, 0x8867, 0x885a, + 0x886c, 0x885c, 0x886e, 0x8870, 0xc8fc, 0x885e, 0x8874, 0xc8fa, + 0x8878, 0x8858, 0x8869, 0x8872, 0x8860, 0x8876, 0x887a, 0x887c, + 0x887d, 0x887e, 0x88a1, 0xc8f6, 0x886b, 0xc8f8, 0xc8f7, 0x88a8, + 0xc8fe, 0xc8f9, 0xc8f5, 0xc8fd, 0xc6d9, 0xc7f9, 0xc7f3, 0xc7f4, + 0xc7f5, 0xc7f6, 0xc7f7, 0xc7f8, 0xc7fa, 0xc7fb, 0xc7fc, 0xc7fd, + 0xc7fe, 0xc840, 0xc841, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, + 0xc847, 0xc848, 0xc849, 0xc84a, 0xc84b, 0xc84c, 0xc84d, 0xc84e, + 0xc84f, 0xc850, 0xc851, 0xc852, 0xc853, 0xc854, 0xc855, 0xc856, + 0xc857, 0xc858, 0xc859, 0xc85a, 0xc85c, 0xc85d, 0xc85e, 0xc85f, + 0xc860, 0xc861, 0xc862, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, + 0xc868, 0xc869, 0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, + 0xc870, 0xc871, 0xc872, 0xc873, 0xc874, 0xc875, 0xc85b, 0x8863, + 0x88a4, 0x8865, 0x88a6, 0xc8d2, 0xc8d3, 0xc6b5, 0xc6b6, 0xc6b7, + 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb, 0xc6bc, 0xc6bd, 0xc6be, 0xc877, + 0xc878, 0xc876, 0x88a9, 0x88aa, 0xc6a1, 0xc6a2, 0xc6a3, 0xc6a4, + 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9, 0xc6aa, 0xc6ab, 0xc6ac, + 0xc6ad, 0xc6ae, 0xc6af, 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3, 0xc6b4, + 0xf9f9, 0xf9f8, 0xf9e6, 0xf9ef, 0xf9dd, 0xf9e8, 0xf9f1, 0xf9df, + 0xf9ec, 0xf9f5, 0xf9e3, 0xf9ee, 0xf9f7, 0xf9e5, 0xf9e9, 0xf9f2, + 0xf9e0, 0xf9eb, 0xf9f4, 0xf9e2, 0xf9e7, 0xf9f0, 0xf9de, 0xf9ed, + 0xf9f6, 0xf9e4, 0xf9ea, 0xf9f3, 0xf9e1, 0xf9fa, 0xf9fb, 0xf9fd, + 0xf9fc, 0xc6e6, 0xc8d6, 0xc8d7, 0xc8d8, 0xc8d9, 0xc8da, 0xc8db, + 0xc8dc, 0xc8dd, 0xc8de, 0xc8df, 0xc8e0, 0xc8e1, 0xc8e2, 0xc8e3, + 0xc8e4, 0xc8e5, 0xc8e6, 0xc8e7, 0xc8e8, 0xc8e9, 0xc8ea, 0xc8eb, + 0xc8ec, 0xc8ed, 0xc8ee, 0xc8ef, 0xc8f0, 0xc8f1, 0xc6cd, 0xc6e0, + 0xc6e1, 0xc6e2, 0xc6e7, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb, 0xc6ec, + 0xc6ed, 0xc6ee, 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3, 0xc6f4, + 0xc6f5, 0xc6f6, 0xc6f7, 0xc6f8, 0xc6f9, 0xc6fa, 0xc6fb, 0xc6fc, + 0xc6fd, 0xc6fe, 0xc740, 0xc741, 0xc742, 0xc743, 0xc744, 0xc745, + 0xc746, 0xc747, 0xc748, 0xc749, 0xc74a, 0xc74b, 0xc74c, 0xc74d, + 0xc74e, 0xc74f, 0xc750, 0xc751, 0xc752, 0xc753, 0xc754, 0xc755, + 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a, 0xc75b, 0xc75c, 0xc75d, + 0xc75e, 0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xc764, 0xc765, + 0xc766, 0xc767, 0xc768, 0xc769, 0xc76a, 0xc76b, 0xc76c, 0xc76d, + 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc772, 0xc773, 0xc774, 0xc775, + 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, 0xc8d4, 0xc8d5, 0xc6dc, + 0xc6dd, 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc7a1, 0xc7a2, 0xc7a3, + 0xc7a4, 0xc7a5, 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, + 0xc7ac, 0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc7b1, 0xc7b2, 0xc7b3, + 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba, 0xc7bb, + 0xc7bc, 0xc7bd, 0xc7be, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c2, 0xc7c3, + 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0xc7c8, 0xc7c9, 0xc7ca, 0xc7cb, + 0xc7cc, 0xc7cd, 0xc7ce, 0xc7cf, 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3, + 0xc7d4, 0xc7d5, 0xc7d6, 0xc7d7, 0xc7d8, 0xc7d9, 0xc7da, 0xc7db, + 0xc7dc, 0xc7dd, 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3, + 0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7e9, 0xc7ea, 0xc7eb, + 0xc7ec, 0xc7ed, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f2, 0xc6e3, + 0xc6da, 0xc6db, 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8846, + 0x8849, 0x884a, 0x884d, 0x884f, 0x8850, 0x8851, 0x8852, 0x8854, + 0x8855, 0xc879, 0xc8d1, 0x9277, 0x96df, 0x89d5, 0x93cd, 0x9bdf, + 0xfa68, 0x89da, 0x8f59, 0x89db, 0x8f5d, 0x89dc, 0x96f7, 0x8ada, + 0x8bdc, 0x97db, 0x9e53, 0x9daa, 0x9bea, 0x8a6e, 0x8bc8, 0x89e8, + 0x89ea, 0xfb70, 0x89ed, 0x94dd, 0x89ee, 0x9eb4, 0x8ad3, 0x92db, + 0x94db, 0x89f9, 0xfb7a, 0x89fb, 0x9efc, 0x89fc, 0x89bf, 0x89fe, + 0x89e6, 0x9d46, 0x9dee, 0xa07e, 0xa068, 0x98e9, 0x8b68, 0x8dfd, + 0x8bbe, 0x9fd9, 0x8aeb, 0x9fd7, 0x8b6a, 0x9c5c, 0x8bb1, 0xfb5e, + 0x9df3, 0xa0d0, 0xfc66, 0x92e9, 0x9aec, 0x8fab, 0xfa48, 0x8e45, + 0x9c6f, 0x9ede, 0x89ef, 0x96e9, 0x9ebb, 0x94de, 0x9eb8, 0x97ba, + 0xfb65, 0x95d6, 0x9cbb, 0x97da, 0x8f45, 0xfb7d, 0x9158, 0xfe64, + 0x9856, 0x9b4d, 0x935b, 0x95c7, 0x97e7, 0x9359, 0x91f5, 0x97b8, + 0xfda2, 0xfbb6, 0x92fa, 0x9357, 0x8ba6, 0xfbb9, 0x97b0, 0xfdc4, + 0x9ca1, 0x91f2, 0x91f9, 0x8ff1, 0x9745, 0x9853, 0xfe78, 0xfbc1, + 0x9251, 0x9dad, 0xfd6c, 0xfa6b, 0x9bc2, 0x9a7b, 0x8b60, 0x934b, + 0x9abd, 0x91b7, 0x95b4, 0xfec5, 0x9ef0, 0x8d64, 0x9269, 0x8d67, + 0xfbea, 0xfbef, 0x8d68, 0x93eb, 0xfc42, 0x9166, 0xfacd, 0x93dd, + 0x8bcc, 0x8d6d, 0x8d6e, 0x96a8, 0xfca6, 0x8d6f, 0x8d70, 0xfc64, + 0x9060, 0x8d74, 0x97c3, 0x8ad0, 0x9274, 0x9bbe, 0x9cc8, 0x9cba, + 0x8d78, 0x9eb9, 0x955a, 0x91b4, 0x8a48, 0x8d7d, 0x8a7d, 0x8ac2, + 0xfd4a, 0x8da1, 0x8ad1, 0xfcb4, 0x8b47, 0x93a4, 0x9eda, 0x8a51, + 0x8da6, 0x9ec5, 0xfcc4, 0xa078, 0x94b5, 0xfcc2, 0x8a6b, 0x8dab, + 0xfae8, 0x8dad, 0xfc49, 0x93c1, 0x906f, 0x8db0, 0x947e, 0x90fa, + 0x9479, 0x8db2, 0xfcee, 0x997b, 0x8db4, 0x8db7, 0x91b3, 0x8dbb, + 0x8dba, 0x8dbc, 0x9044, 0xfd4c, 0x93e4, 0x93e0, 0xfd53, 0x8dc3, + 0x9bb8, 0xfbf0, 0x93e9, 0x93f6, 0x8dc5, 0x8dca, 0x8dcc, 0xfd5d, + 0x93b5, 0xfd61, 0x9cf8, 0x9252, 0xa0e8, 0x9ca5, 0x8dd6, 0x97c0, + 0xa0de, 0x97d2, 0xfaa5, 0xfda3, 0x8ddb, 0x8eaf, 0x91b5, 0xfd49, + 0xfdd1, 0x8deb, 0x97c6, 0xfdce, 0x90fc, 0xfc59, 0x96d6, 0x97c5, + 0x8def, 0x97d7, 0x8df0, 0x96a6, 0xfbbf, 0x8df3, 0x9449, 0x8df5, + 0x9872, 0x8e6b, 0xfafd, 0x8f50, 0x9dcc, 0xfc65, 0x996e, 0x94a1, + 0x8f63, 0xa0da, 0x9253, 0xfde9, 0x9db5, 0x9879, 0x9d5d, 0x8d63, + 0x9669, 0x9f70, 0xfc6a, 0x8ac7, 0x89d7, 0xfe4d, 0x9edd, 0xfefb, + 0x98bc, 0xfacc, 0x95b0, 0x9464, 0x936f, 0x94b9, 0x95ec, 0x91ee, + 0x98c3, 0x95f6, 0x8ffd, 0x98c5, 0x9766, 0xfe6e, 0x97dd, 0x92d2, + 0x9761, 0x98cb, 0x95f0, 0x975d, 0x91e3, 0x98cc, 0x9469, 0x98cd, + 0x98ce, 0x95fc, 0x94a3, 0x9662, 0xfeb6, 0x9463, 0x98d0, 0x98d1, + 0x9475, 0xfae0, 0x9472, 0x98d6, 0x8af0, 0x98d9, 0x98db, 0x98dd, + 0x98a8, 0x8a6d, 0x8afb, 0x8aae, 0xfbc9, 0x98e4, 0x98e6, 0x98e8, + 0x8a4d, 0x9257, 0x95df, 0xa0ac, 0x98eb, 0x98ec, 0x98f4, 0x8ab8, + 0x9ee7, 0x94bc, 0xfcd1, 0x9cc6, 0x9e7e, 0x98fe, 0xfde8, 0x9940, + 0x94c9, 0x94d3, 0x9946, 0x90c0, 0x94d1, 0x9573, 0x93c2, 0x9948, + 0x994b, 0x8e55, 0x994e, 0x8efe, 0x8e59, 0x94ec, 0x94ef, 0x8f74, + 0x9955, 0x9544, 0x9956, 0x9959, 0x995b, 0xfa45, 0x90b7, 0x9743, + 0x95cd, 0x97c9, 0xfd50, 0x8eb9, 0x95c6, 0x9967, 0x8ab9, 0x8dfc, + 0x8a76, 0x9d51, 0x9973, 0x9d4f, 0x997a, 0x9564, 0x99a1, 0x99a5, + 0x99a7, 0x8eed, 0x99ad, 0xc87e, 0x946e, 0x8f70, 0xfad0, 0x99b3, + 0xa053, 0x965c, 0xfd7a, 0x97fe, 0x92bd, 0x97fd, 0x8f64, 0xfcf7, + 0x9562, 0x97cd, 0x9e64, 0x924c, 0x8ec9, 0x99bc, 0x9da5, 0x8f54, + 0x8f7c, 0x8ea2, 0x8f7a, 0x97ae, 0x96c8, 0x99c3, 0x90d6, 0x9cbe, + 0x8f76, 0x9470, 0xfb4b, 0xfdca, 0x8ec7, 0xa0f9, 0x8fa9, 0x99c7, + 0x90d7, 0x9edf, 0x99ce, 0x8fba, 0x8feb, 0x99cf, 0x8fc2, 0x92c9, + 0x97dc, 0x95b3, 0x9c79, 0x95b2, 0x8fdb, 0x9be3, 0x9e7a, 0x9bee, + 0x99de, 0xfafa, 0x8a52, 0x99e1, 0x8a67, 0x8bb5, 0x8aac, 0x99e9, + 0xfbca, 0x97de, 0x95d1, 0x99f5, 0xfc4a, 0x9ba9, 0xfbdc, 0xfe56, + 0x9ea4, 0x9d49, 0x95db, 0x89c5, 0x99f8, 0x9664, 0x9055, 0x96d4, + 0x977c, 0x964d, 0x97e1, 0x9a48, 0x9a49, 0xfe7d, 0x90aa, 0x9a50, + 0x9347, 0x8ed8, 0x90c9, 0x9a55, 0x90bc, 0x9a58, 0x8bb8, 0x90d5, + 0x9641, 0x9a5a, 0x9a5c, 0x97c2, 0x8abb, 0x9baa, 0x90f5, 0x9a60, + 0x9145, 0x9a63, 0x8bb6, 0xfccf, 0x966b, 0x9a6e, 0x914f, 0x9746, + 0xa0e6, 0x92d7, 0x9675, 0x93d4, 0x91bb, 0x9679, 0x9a70, 0x9678, + 0x91cd, 0x9c4a, 0xa06f, 0xa06a, 0x915f, 0x9fa5, 0x89ba, 0x9ecd, + 0x9a79, 0x9dce, 0x9d73, 0x96b9, 0x96bc, 0x9cd1, 0x89b7, 0x9eee, + 0xfb43, 0x9ec9, 0xfbd3, 0x91ae, 0x9d78, 0x9d7b, 0x9eb3, 0x9eb2, + 0x9dd6, 0x994f, 0x89ce, 0x8bc0, 0x9fc4, 0x8bd4, 0xc6bf, 0x8bf9, + 0x8946, 0xc6c0, 0xfae5, 0xc87b, 0x8bc6, 0x9c57, 0x9afb, 0x89d0, + 0x89cf, 0xc6c1, 0x89d1, 0x89e2, 0x927e, 0x9dba, 0xc6c2, 0xfbf8, + 0x8bc7, 0x926b, 0x89d2, 0x9fcf, 0x9da9, 0x89d3, 0x99e2, 0x9267, + 0x92a4, 0x894e, 0x894f, 0x9278, 0x91b6, 0x89d4, 0x9fd2, 0x92a7, + 0x95a2, 0x926e, 0x96ea, 0x926f, 0x92a3, 0x8950, 0xfa57, 0x9866, + 0x89d6, 0x98b2, 0x92ab, 0x96de, 0x92ac, 0x9f6e, 0x8ef2, 0x9f6c, + 0x89d8, 0xfa59, 0x92a8, 0x9163, 0x9f73, 0x92ad, 0x9be9, 0x92a9, + 0x92aa, 0x89d9, 0xfd56, 0x9fa8, 0x92a1, 0x90e3, 0xa0a6, 0x94ab, + 0xfc72, 0x97c4, 0x92ae, 0xfa67, 0x92a2, 0xfa69, 0x9268, 0x8951, + 0xfa6f, 0xfa71, 0x8952, 0x945a, 0xc6c3, 0x89dd, 0xc8a2, 0xc6c4, + 0x9e52, 0x8953, 0x9e55, 0x92ba, 0xc6c5, 0xfa7d, 0xfaa8, 0x9a68, + 0xfa47, 0xfa7e, 0x92bb, 0xfdb6, 0xfaa2, 0xfaa3, 0xfaa4, 0x9bb4, + 0xfaa6, 0x89df, 0xfddb, 0xfaa9, 0x8954, 0xfaab, 0xfc7a, 0x89e0, + 0x9f4f, 0xc87d, 0x89e1, 0xfab0, 0x9fcd, 0xa0e7, 0xfab1, 0x89a6, + 0x9efa, 0xfab2, 0xfab4, 0x92c4, 0x9f6f, 0x8bb0, 0x9fac, 0x89e3, + 0x9bd3, 0x89e4, 0xfab5, 0x9fd5, 0x8955, 0x92c5, 0x8956, 0xfab3, + 0xfab6, 0xfab7, 0x9edc, 0xfbc4, 0x9f71, 0xfaba, 0x92c7, 0xc6c6, + 0x9a4c, 0x89e5, 0x9f7d, 0xa0a9, 0xfac4, 0xc6c7, 0x8957, 0xfaaa, + 0x8958, 0x8be3, 0x8b61, 0x9af1, 0x9eb7, 0xc6c8, 0xfad1, 0xfad2, + 0x9eba, 0xfad4, 0xfad9, 0xfadb, 0x9ce0, 0xfbf7, 0xfbfa, 0x89e7, + 0xa07a, 0xfadc, 0xfadd, 0x89e9, 0xc6c9, 0xfae2, 0x89eb, 0xfae3, + 0x90c8, 0x92da, 0x8959, 0x9cf5, 0x895a, 0xfae7, 0x9fa2, 0xfaea, + 0xfaed, 0x8fad, 0xfb59, 0xfaef, 0x96ef, 0x9dec, 0x9dca, 0xfd6d, + 0x89ec, 0xfb44, 0x9de2, 0x9ec0, 0x9e56, 0x9f79, 0x9ac7, 0xfaf4, + 0x98a1, 0xfaf8, 0x89f0, 0x9e47, 0x9df7, 0x9fd3, 0x9aca, 0x89f1, + 0xfaf9, 0x8e5a, 0x89f2, 0x89f3, 0x925d, 0x8b51, 0x92e0, 0x89f4, + 0x9fd4, 0x8a79, 0x89f5, 0x97a7, 0x93ba, 0x9e58, 0x89f6, 0x9e57, + 0x89f7, 0x8a41, 0x89f8, 0xfaf1, 0x89fa, 0xfb42, 0xfabf, 0xfba3, + 0xfaf7, 0x9e4e, 0x94dc, 0x95da, 0x9df8, 0x9f6a, 0x8ab7, 0xfb46, + 0x8a46, 0xfb47, 0x9148, 0x92de, 0x8b53, 0x9df6, 0x9bda, 0x9d7e, + 0x89fd, 0x99e4, 0x9e43, 0x9de9, 0x8f52, 0x9df5, 0x9df0, 0x99e7, + 0x8bbd, 0x9def, 0x9fb7, 0x9dd0, 0x9feb, 0x8da9, 0x9dcf, 0x98e1, + 0x9de5, 0x9dc8, 0xfb4f, 0x9deb, 0xfb54, 0xfb55, 0x9aa2, 0x8ad6, + 0x9a5f, 0x9ef5, 0x8fb7, 0x9ad2, 0x9e6a, 0x9ee8, 0x8bbf, 0x91c2, + 0x9d62, 0x9260, 0x925e, 0x91c1, 0x8ac5, 0x97a3, 0x8b6c, 0x8d7e, + 0x9c54, 0x9dbd, 0x9cc5, 0x895b, 0xfb5c, 0xfb5b, 0xfb57, 0x98c7, + 0xfb5a, 0x9cee, 0x92e2, 0x94a7, 0x9bd4, 0xfb64, 0xfb76, 0xfb60, + 0x99e5, 0x9ac2, 0x91fb, 0xa073, 0x9f72, 0x9fcc, 0x98a5, 0x92e8, + 0x9bbc, 0x96f3, 0x92e7, 0xfc67, 0x8b7d, 0x9bf4, 0x9ef7, 0x9ec1, + 0x996f, 0x96f1, 0x8e41, 0x954a, 0x97e6, 0x96f5, 0x92e6, 0x9f42, + 0xfb67, 0x99a9, 0xfae6, 0xfb69, 0x97e5, 0x967d, 0xfb6c, 0x99a2, + 0x9abb, 0x9a65, 0x944e, 0xfb6e, 0x99df, 0x98e3, 0x9254, 0x967b, + 0x8aaf, 0x8baf, 0x9ebd, 0x9ee6, 0xfb6f, 0x8ee1, 0x9b7d, 0x9c7e, + 0xf9d9, 0x92ea, 0xfb72, 0xfb71, 0x895c, 0x98f0, 0x96f2, 0xfb74, + 0x8bc1, 0x895d, 0x89de, 0x895e, 0xc6ca, 0xfe42, 0xfb7b, 0x895f, + 0x8960, 0x9bcd, 0x9dd3, 0x984c, 0x9752, 0x95c3, 0x9bb6, 0x9ab9, + 0x97b3, 0x9f74, 0x92f1, 0x97df, 0xfba6, 0xfbab, 0x9877, 0x9854, + 0x95c5, 0x9d55, 0xfbb2, 0x957e, 0x9742, 0x94e6, 0x92f5, 0x92fd, + 0xfba2, 0x9c51, 0x94e9, 0x985c, 0x92f0, 0x944c, 0x916b, 0x8b78, + 0x94e2, 0x984f, 0xfbb5, 0x9271, 0x9365, 0x985b, 0x9850, 0x97bc, + 0x92f3, 0x9340, 0x984d, 0x9572, 0xfdef, 0xfdc1, 0xfbba, 0x92eb, + 0xfc73, 0x97b7, 0xfbb4, 0x90a7, 0x9741, 0x92f4, 0xfbbc, 0x9577, + 0x9ee2, 0x8f78, 0xf9dc, 0x9672, 0x9eb5, 0x964b, 0xa0fa, 0x9575, + 0x90da, 0x9367, 0xfea4, 0x90df, 0x9354, 0x8961, 0x8bb4, 0x9dc0, + 0x8e48, 0xfbc5, 0xfbc7, 0xc6cb, 0xfa79, 0x9e67, 0xfbd2, 0x8962, + 0x8963, 0xfc7d, 0x9f6b, 0xfbcc, 0xfeae, 0xfbd1, 0xfb75, 0xfbd4, + 0xfbd6, 0xfbd8, 0x8b5d, 0x934c, 0x9ae2, 0x8bc9, 0xfbdb, 0x9fc9, + 0x9f44, 0x98ed, 0xfbdd, 0x8df2, 0x8964, 0xfdf2, 0x934d, 0xfbe7, + 0xa0f2, 0x9868, 0x9f58, 0x8d73, 0xfbde, 0xfbdf, 0xfbe3, 0x8da8, + 0xfbe4, 0x9c75, 0x9878, 0x8d60, 0xfbe5, 0x8d61, 0x8d62, 0xa0a1, + 0x9c40, 0x98ad, 0x9eea, 0x9ceb, 0xfbe0, 0x9f51, 0x8d65, 0x9cf1, + 0xfc58, 0x8d66, 0x9654, 0xfbe8, 0xc6cc, 0x9fce, 0xfbfc, 0x9ae4, + 0x9f75, 0xfbf1, 0x8d69, 0x934f, 0x934e, 0xfbf4, 0xc6ce, 0xfbc3, + 0x8965, 0x8d6a, 0x9353, 0x9dfb, 0xfbfd, 0x9059, 0xfc40, 0xfc41, + 0xfc43, 0x9361, 0xfc46, 0x9362, 0x8d6b, 0xfc4c, 0x95b8, 0xc6d0, + 0x8bca, 0x987a, 0xc6d1, 0xfc51, 0xfc54, 0xfaaf, 0x8d6c, 0xfa61, + 0xfc57, 0x9b70, 0xa051, 0x8bcb, 0x936e, 0xfcd5, 0xfca9, 0xfc61, + 0x8966, 0xfacb, 0xf9da, 0x937a, 0xa0e0, 0x936b, 0xfc6b, 0xa0dc, + 0x9468, 0xfc6d, 0x8d71, 0xfd64, 0x99ba, 0x9ad0, 0x9a61, 0xa0e5, + 0xa05b, 0x96ac, 0x9740, 0x9ef1, 0x9f7e, 0x8d72, 0xfc76, 0x96a9, + 0xa06e, 0xfcaa, 0xfbcd, 0xfc74, 0xa074, 0xa071, 0xfc79, 0xfc7c, + 0x9c50, 0x9379, 0x9378, 0xa0dd, 0x8d75, 0x8d76, 0x9374, 0x8d77, + 0xfca5, 0xfca2, 0x90c3, 0xa079, 0x8d79, 0x8bfc, 0xa076, 0x8bcd, + 0x9f5a, 0x9ff4, 0x9fba, 0x8d7a, 0x9e45, 0x93b0, 0xa075, 0x9b46, + 0xfcae, 0xfcb0, 0xfa51, 0x8d7b, 0x8d7c, 0x9ed6, 0x93ac, 0x9f5b, + 0x93a9, 0xa07c, 0xfcb2, 0x8ac1, 0x9fb4, 0xfcac, 0x9e4c, 0x8fc5, + 0x93ad, 0x9dc3, 0x8da2, 0x9d4a, 0xfcb6, 0x8da3, 0x9e4b, 0x9e4d, + 0x8da4, 0x8afd, 0xfcb5, 0xfcc3, 0x93b2, 0x8da5, 0x93a1, 0x8ac6, + 0x8a5b, 0x894d, 0xfed4, 0x8a78, 0x93ab, 0x8da7, 0x9f45, 0x8a56, + 0xfcbf, 0xfcc0, 0x8ee6, 0x8aa4, 0x8943, 0x93f3, 0xfcab, 0x9ea2, + 0x9dc7, 0xc6d2, 0x8bce, 0xfcc5, 0xfccb, 0x93b3, 0xfcca, 0xfcc9, + 0x8dac, 0xfbc6, 0x8967, 0xfccd, 0x9cf3, 0xfcd0, 0x95bb, 0xfcd3, + 0xfcd4, 0x8dae, 0xfcd7, 0x93db, 0xfe63, 0x93d5, 0xfcda, 0x9b71, + 0xfcdd, 0x8daf, 0xfaf2, 0x93d8, 0xfcdf, 0x93d3, 0xfce1, 0x8e76, + 0xfc62, 0x93d1, 0x8db1, 0x9859, 0xfb52, 0xfb53, 0xfb4d, 0x9cbf, + 0x9b72, 0xfb50, 0x93be, 0x9df1, 0xfceb, 0xa0bb, 0x9b7e, 0x8db3, + 0x9ae8, 0x8edc, 0x9cf9, 0xfa50, 0x98e7, 0xfcf3, 0xfcf2, 0x93e5, + 0x9a59, 0x8db5, 0xfd4d, 0xfd5e, 0x8f7d, 0x9547, 0xfcf6, 0x9250, + 0x8968, 0x8db6, 0xfcfb, 0xa07d, 0x98fc, 0x8969, 0xfe4f, 0x9256, + 0xfac9, 0x93e8, 0xfcf8, 0x9ce3, 0xfda9, 0xfc44, 0x9640, 0x8db8, + 0x9b4a, 0x8fb9, 0xfcfe, 0x896a, 0x8db9, 0x917e, 0x93f4, 0xfb7c, + 0x93e7, 0x97ef, 0xfe4a, 0xfd45, 0x96a5, 0xfee0, 0xfd48, 0xfd47, + 0xfef2, 0xfe6a, 0x8dbd, 0x9ba1, 0x9ab7, 0x8efc, 0x9fa1, 0xfd51, + 0xfaad, 0x8dbe, 0x89a4, 0x9ad9, 0xfd4e, 0x8dc0, 0x97f0, 0x93b4, + 0xfd44, 0x9fa7, 0x8dc2, 0x99b6, 0xfd52, 0x8dc1, 0x8e46, 0xa0d1, + 0x9fca, 0x92cf, 0x9cf4, 0x8dc4, 0xfd41, 0x9b4c, 0xfd57, 0xfcef, + 0x9cde, 0xfd42, 0x986c, 0x97f9, 0x9558, 0x985e, 0xfe7b, 0x94cd, + 0x93ee, 0xfd5a, 0x93f5, 0x93ef, 0x8eea, 0x8f5b, 0x8dc6, 0x8dc8, + 0x8dc7, 0x93f7, 0x8dc9, 0xfbf2, 0x9670, 0x8dcb, 0xfd5c, 0x8f65, + 0x8dcd, 0x9da8, 0x94f9, 0x8dce, 0x93ea, 0xfd5f, 0x93f0, 0x9fb6, + 0x8dcf, 0x9763, 0x8dd0, 0x93f1, 0xfd62, 0xfd65, 0x9fdb, 0x93f8, + 0x8bf7, 0xfd66, 0x8bcf, 0x8dd1, 0x8dd2, 0xfd71, 0xfd6f, 0x8dd3, + 0x9fe7, 0x90bd, 0x9fd0, 0x8bd0, 0xfd72, 0x9cae, 0x8bd1, 0x8adb, + 0xfae4, 0x95ce, 0xfd76, 0xfb62, 0x8dd4, 0xfd78, 0x8ee3, 0x9076, + 0x98c6, 0x8dd5, 0x97d1, 0x9eb6, 0xfac7, 0xa042, 0x9873, 0x9ffc, + 0x8dd7, 0x92fb, 0x8dd8, 0x944f, 0x8dd9, 0x896b, 0x97ce, 0xfaf3, + 0xfdae, 0xfbaf, 0x92b7, 0x8dda, 0x9c5a, 0xfdad, 0x8ddc, 0x9444, + 0x8ddd, 0xa0d6, 0x97d5, 0x944a, 0x944d, 0x97cb, 0x8dde, 0x8ddf, + 0x8de0, 0xfef9, 0xfdc0, 0xfcf9, 0xfb7e, 0x92b3, 0xfdaf, 0x8de1, + 0x95d3, 0x89c1, 0xfd68, 0x9cb7, 0x8de3, 0xfac0, 0x8de5, 0xfa64, + 0x8947, 0x8de4, 0x8de7, 0x8de8, 0xfdc7, 0xfdb0, 0x9445, 0x97d6, + 0xfcc6, 0x9844, 0x8de9, 0x8dea, 0xfe50, 0xfdcc, 0x9da7, 0xfdcd, + 0xfdcf, 0x95d2, 0x8ded, 0xfcba, 0xfdc5, 0xfdd2, 0x9cdc, 0x95cf, + 0x8dee, 0xfdd4, 0x96ec, 0x96eb, 0x90b6, 0xfdc3, 0x98ab, 0x96ee, + 0x8df4, 0xfde0, 0x8df6, 0x8df7, 0x8ffa, 0x97d0, 0x8bd2, 0x8df8, + 0x90d9, 0xfaf0, 0xfde1, 0x8df9, 0xfde3, 0x8dfa, 0xfb63, 0x90a6, + 0x9970, 0x91eb, 0x9770, 0x986f, 0xfde2, 0x98f2, 0x9afc, 0x896c, + 0xfdfd, 0x995e, 0x95bd, 0xfde4, 0x91e6, 0xfde5, 0xfde6, 0xfde7, + 0x9454, 0x99b8, 0x97e9, 0x9346, 0x9863, 0x95bc, 0xfded, 0xfdf7, + 0x9870, 0x96f6, 0x8ea9, 0x9451, 0x8e43, 0x8b5a, 0xfdee, 0xfdf0, + 0xfdf4, 0x9bf5, 0x977e, 0x9bd5, 0x9ac3, 0x97c8, 0xa0db, 0x91d0, + 0x9fe4, 0x8fdd, 0x91e9, 0x98e0, 0x92ca, 0x9857, 0xfdeb, 0x9b49, + 0x9d76, 0x9eaf, 0x9ccc, 0xfdea, 0x8df1, 0xfdfb, 0x8e53, 0xfacf, + 0x96f9, 0x98bf, 0x9e49, 0x9bca, 0xfdfe, 0x92dc, 0xfe41, 0x91cc, + 0x91e2, 0xfe44, 0x8bd3, 0xfe47, 0xfe48, 0x9455, 0xfe4b, 0xfe4c, + 0x8dbf, 0x9e78, 0xfe51, 0x9456, 0x9d61, 0x9457, 0x9966, 0x8bd5, + 0xa069, 0x98b4, 0xa049, 0xa04c, 0x9e65, 0x98b5, 0xfe58, 0x9975, + 0xfe53, 0xa065, 0xfe59, 0x98b7, 0x98b8, 0x98ba, 0x98bb, 0x9fbc, + 0xa04a, 0x9ec7, 0x98ae, 0x92d6, 0xfae1, 0x91d4, 0xfade, 0xfe5b, + 0xfe5e, 0xfbd7, 0xfe5a, 0x94c5, 0xfaca, 0x98c1, 0x975c, 0xfe74, + 0x9773, 0xfa46, 0x9764, 0xfe68, 0x964e, 0x9765, 0x89a1, 0x95fa, + 0x92d4, 0xfe69, 0xfb45, 0x98c8, 0x90ef, 0x98c9, 0x98ca, 0x946d, + 0x94b7, 0xfe6c, 0x946b, 0x92fc, 0x95eb, 0xfe73, 0x976e, 0xfe5f, + 0xfdbd, 0x92d5, 0xfeb9, 0xfe71, 0xfbbb, 0x947a, 0x95fb, 0xfe77, + 0xfe79, 0xfe75, 0x945d, 0xfe7c, 0x9344, 0x8ea6, 0x92d3, 0x94b8, + 0xfc71, 0x975e, 0xfea7, 0x946a, 0x93e3, 0x98cf, 0xa0d9, 0xa0bf, + 0xa04d, 0xa0b8, 0xa0ce, 0xa0b7, 0xfea9, 0x89c3, 0xfeab, 0x9df4, + 0x896d, 0x9c7b, 0x98d2, 0x9fa9, 0xfeb2, 0xfeb1, 0x97d9, 0xa0c4, + 0x9476, 0x9978, 0xfeb3, 0x98d3, 0xfeb4, 0x98d4, 0x9fb9, 0x9471, + 0x98d5, 0xfeb8, 0xc6d4, 0xfeba, 0x9e5c, 0xfebb, 0xa044, 0x98d7, + 0x98d8, 0xfebc, 0x9ffe, 0xfebd, 0x9ddd, 0x9ee1, 0x98da, 0x9ddf, + 0xfebf, 0xfebe, 0x9eeb, 0x9e59, 0xa05c, 0xfec0, 0x9477, 0x98dc, + 0xfec1, 0x98de, 0xfec3, 0xfec8, 0xfec9, 0xfeca, 0xfecb, 0x9fc2, + 0x98c4, 0x94b0, 0x94b1, 0xfed1, 0xa0c1, 0xfed2, 0xa0cd, 0xfed3, + 0x98e5, 0xfed6, 0x91e4, 0x8fc7, 0x94ae, 0x8a4f, 0x94b2, 0x8fd4, + 0x98ea, 0xfed8, 0x9de0, 0x98ee, 0x95c4, 0xfce8, 0x98ef, 0xfad8, + 0xfedc, 0xa0ae, 0x9d4c, 0x98f1, 0x98f3, 0x94c1, 0x98f5, 0xfa4f, + 0x96e2, 0x9450, 0x96a2, 0x98f6, 0x96e5, 0x98f7, 0xa046, 0x96e3, + 0x98f8, 0x9ee4, 0xf9d6, 0x94c3, 0x94c2, 0xfee1, 0xfee9, 0x96e4, + 0x89ac, 0x96db, 0xfee2, 0x94c4, 0xfee3, 0xfee7, 0x9ffb, 0x93c9, + 0x94e8, 0xfb56, 0x90c5, 0xa0a8, 0xfee5, 0x98fd, 0x98fb, 0xfee8, + 0x8ebf, 0x8bd8, 0xfef7, 0x8f68, 0x94c6, 0x9dea, 0xfc69, 0x9cda, + 0xfef3, 0x9c72, 0xfef0, 0x89c9, 0x9941, 0x9942, 0xfef5, 0x91d7, + 0x94cc, 0xfef8, 0x97a8, 0xfefc, 0xfdbf, 0xfefe, 0x96d1, 0x94d5, + 0x94d0, 0x9944, 0xa0b3, 0x94cf, 0x9ffa, 0x91e5, 0x9c6a, 0x8e49, + 0x8e4c, 0x8e4d, 0x9a73, 0x9947, 0x8e50, 0x8e4f, 0x9949, 0x8e51, + 0x8e52, 0x9ab2, 0x89a5, 0x994c, 0x9ff8, 0x8e56, 0x994d, 0x91ca, + 0x8e57, 0x94e1, 0x9047, 0x8fd8, 0x8e58, 0x94eb, 0x8e5c, 0x9553, + 0x9fe5, 0x9f56, 0x954f, 0x8e5e, 0x996a, 0x9c64, 0x9cd9, 0x8e5d, + 0x9950, 0x9951, 0x8e62, 0x9952, 0x8e68, 0x8e61, 0x9f59, 0x8bb3, + 0x9f5d, 0x8e66, 0x8e6e, 0x9f64, 0x9953, 0xfab8, 0x9954, 0x8e70, + 0x9f61, 0x8e72, 0xa06b, 0x9f40, 0x94ed, 0x94ee, 0x9fbd, 0x8e7b, + 0x9957, 0x94f7, 0x9f5f, 0x8e73, 0x9f62, 0x94f6, 0x9958, 0x8e75, + 0xf9db, 0x9072, 0x94f8, 0x995a, 0xa0b0, 0x8e79, 0x8e78, 0x94f3, + 0x98af, 0xa0b2, 0x8e7a, 0x995c, 0x8e7c, 0x8e7d, 0x8bd9, 0x89a2, + 0x9ed7, 0xa0b6, 0x9e42, 0x8ea4, 0x8ea7, 0x9542, 0x987d, 0x9755, + 0x8ea8, 0x8eaa, 0x89a3, 0x9960, 0x9962, 0x94fc, 0x9961, 0x94fa, + 0x8eae, 0x8eb2, 0x8eb0, 0x9963, 0x97aa, 0x94fb, 0x8ebb, 0x9876, + 0x8ea1, 0x8eb7, 0x9da6, 0x9eb0, 0x8eb8, 0x9d70, 0x896e, 0x896f, + 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0x8ebc, 0x8ebd, + 0x8ebe, 0x9dd1, 0x94fd, 0x8bd7, 0x8bda, 0xa0e2, 0x9fe9, 0xfda8, + 0x8ae7, 0x8ec2, 0x8ec4, 0x9964, 0x9965, 0x954e, 0x98b3, 0x8ecb, + 0x8bdf, 0x8ece, 0x8ecf, 0x9968, 0x9969, 0x996b, 0x8ed1, 0x996c, + 0x8ed4, 0x8ed5, 0x996d, 0xa0be, 0x8ed6, 0xa0bc, 0xa0b5, 0xa0b4, + 0x8be0, 0x89b5, 0x8edd, 0x9e5d, 0x9971, 0x89ae, 0x9de8, 0x9565, + 0x9972, 0x8b5c, 0x89b1, 0xa0c0, 0x8edf, 0x9566, 0x9974, 0x9976, + 0x9977, 0x9979, 0x9dda, 0x8ee0, 0x935c, 0x9de6, 0x8b5f, 0x9563, + 0x9567, 0x9de3, 0x997c, 0x997d, 0x997e, 0x8b5b, 0x99a3, 0x99a4, + 0x99a6, 0x99a8, 0x8abe, 0x9e61, 0x99aa, 0xa0c8, 0x99ab, 0xfec4, + 0x98c2, 0x8ee8, 0xa0ba, 0xfd77, 0x8eee, 0x9ebf, 0x89c2, 0x99ac, + 0x956b, 0x956c, 0x99af, 0x994a, 0x8976, 0x8f48, 0xfbee, 0x99ae, + 0x8efb, 0x8b52, 0x99b0, 0x8977, 0x8f41, 0x99b1, 0x8f49, 0xfa4d, + 0x9de4, 0xfbe9, 0x9b54, 0x99b2, 0x9e68, 0x8f4a, 0x8f42, 0x8f51, + 0x9846, 0x99b4, 0x8ef5, 0xfd55, 0x9ccd, 0x8978, 0x8f53, 0x8f6f, + 0x8e63, 0x8f56, 0xfe76, 0x9fc6, 0xfaac, 0x8f58, 0x9848, 0x99b7, + 0x9665, 0xfa6c, 0x9de7, 0x9e62, 0x96cc, 0x8e67, 0xfc75, 0x987e, + 0xfdb9, 0x97fc, 0x98f9, 0x8f66, 0x956e, 0x9245, 0x8f60, 0x9ed1, + 0xfecd, 0x99b9, 0x8f62, 0x974c, 0x91c7, 0x955f, 0x99bb, 0x8e6d, + 0x8f71, 0x94cb, 0x95b1, 0x9af2, 0x96c3, 0x99bd, 0xa0cf, 0x8f6d, + 0x99be, 0x8ef4, 0x8f72, 0x95e4, 0x99bf, 0x9242, 0xfba5, 0x99c0, + 0xfdb4, 0x8f77, 0x99c1, 0xfab9, 0x8f40, 0xfa44, 0x99c2, 0x8f5c, + 0x99c4, 0x99c5, 0x8f7b, 0x8fa3, 0x99c6, 0x96cd, 0x96c7, 0x8fa5, + 0xfabb, 0x9570, 0x9368, 0x8f7e, 0x8faa, 0xa050, 0x90d3, 0x9556, + 0x8fb8, 0x99c8, 0x8faf, 0x99c9, 0x9579, 0x9f49, 0x99ca, 0x99cb, + 0x9dd5, 0x8fb0, 0xfa7a, 0x9e5f, 0x99cd, 0xa0c9, 0x9adb, 0xa0c6, + 0x8fb4, 0xa0d7, 0xa0c7, 0xa043, 0x8fb5, 0x8fb2, 0xa061, 0x9e5e, + 0x8fb6, 0x9fe8, 0x9cb2, 0x957c, 0x9fc7, 0x8fbb, 0x8fbc, 0x8fec, + 0x8fc0, 0x936a, 0x8be4, 0x9c7c, 0x95a1, 0xfeec, 0x95a3, 0x8fc1, + 0xa052, 0x99d0, 0x8fc3, 0x8fc4, 0x95a4, 0x8fc6, 0x9e60, 0xf9d8, + 0x95a5, 0x9cb3, 0x99d1, 0xfef1, 0x99d2, 0x9cc2, 0x99d3, 0x95a7, + 0x95a9, 0x95a6, 0x9c5d, 0x98e2, 0x8fc9, 0xa0c2, 0x8fca, 0x99d4, + 0xa0b9, 0x9b58, 0x8fcd, 0xa0d4, 0x8fce, 0x8be5, 0x8979, 0x8fd0, + 0x95b6, 0x99d6, 0x95e5, 0x99d7, 0x95b5, 0xa0ca, 0x9ffd, 0xa058, + 0x8fd6, 0x99d8, 0x8fd3, 0x8fe5, 0x8fe9, 0x99d9, 0x927c, 0x9c45, + 0x8fde, 0x8fdf, 0xa04b, 0x8fe2, 0xa0cc, 0x8fe3, 0x8fe4, 0x9bc4, + 0x9bfc, 0x964c, 0x9af6, 0x8fe7, 0x8fe8, 0x8be7, 0x897a, 0x897b, + 0x99da, 0x8fed, 0x95c0, 0xa0cb, 0x9e48, 0x99db, 0x8ff3, 0x8ff9, + 0x95c1, 0xa04e, 0x99dc, 0xa064, 0x8ff7, 0x89b0, 0xa048, 0x8ffb, + 0x8ff6, 0x9ddc, 0x99dd, 0x8be8, 0x92c1, 0x9fd6, 0xa0d2, 0x9040, + 0x8ac4, 0x99e0, 0x9ff0, 0x9ff3, 0x9dbf, 0x9ff6, 0x95c8, 0x9e5a, + 0x99e3, 0x8a4a, 0x9ff1, 0x8aa7, 0x99e6, 0x9ff7, 0x9fed, 0x8a5c, + 0x9dae, 0x95c9, 0x9048, 0x99e8, 0x9049, 0x90b1, 0x904a, 0x99ea, + 0x9bd1, 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x904c, 0x904d, 0x95cb, + 0x97e2, 0x95cc, 0x9f78, 0x897c, 0x897d, 0x897e, 0x995d, 0x9b5a, + 0x9050, 0x9054, 0xc6d6, 0x9aa8, 0x99ef, 0xfeeb, 0x9da3, 0x9da1, + 0x9943, 0x9945, 0x9d7d, 0x99f0, 0x99f1, 0x99f2, 0x9d60, 0xa0a3, + 0x905b, 0x9edb, 0x9d79, 0x99f3, 0x9062, 0x9f55, 0x9bf9, 0x9065, + 0x96e0, 0x98be, 0x9068, 0x906c, 0x95d8, 0x906a, 0x9fb2, 0x9fae, + 0x9fb0, 0x89ad, 0x906e, 0x9e71, 0x9e4a, 0x9fdc, 0x89ab, 0x9fb8, + 0x9070, 0x8b63, 0x95dc, 0x9071, 0xfc5e, 0x8949, 0x965b, 0x94a6, + 0x8fd5, 0x9e73, 0x9075, 0x99f7, 0x99f9, 0x9663, 0x95b9, 0x94d4, + 0xfcfa, 0x9077, 0x90ab, 0x9d4d, 0x99fa, 0x92e3, 0x97bb, 0x9078, + 0x99fb, 0x97e0, 0x96dc, 0x9ca8, 0x9772, 0x9440, 0x92f2, 0x99fd, + 0x99fc, 0xf9d7, 0x964a, 0x96d8, 0x99fe, 0x904b, 0xfa41, 0x9a40, + 0x975b, 0x9a41, 0x91dd, 0x93fc, 0x9a42, 0x9a43, 0x9659, 0x9a44, + 0x9051, 0x94bf, 0x90a2, 0x9cab, 0x9776, 0xfc55, 0xfe45, 0x94a8, + 0x9a45, 0xfa4b, 0x9de1, 0x96d9, 0x9774, 0xfdf5, 0x92e5, 0x9645, + 0x91da, 0x90a3, 0xa05f, 0x90af, 0x97bf, 0x914c, 0x967a, 0x91de, + 0x9a46, 0xfeb0, 0x9779, 0x946c, 0x9858, 0x9266, 0x93fb, 0x9a47, + 0x9749, 0x9748, 0x934a, 0x9ce2, 0x9264, 0x91df, 0xfb79, 0x96d7, + 0x9343, 0xfdcb, 0xfe7a, 0x91db, 0x97af, 0x95dd, 0x9348, 0x9a4b, + 0xfc45, 0x9a4d, 0x91bc, 0x90e2, 0x90b4, 0x95e1, 0x9a4e, 0x9a4f, + 0xfe40, 0xfe43, 0x96dd, 0x9a51, 0x96a7, 0x90b0, 0x9c4e, 0x9443, + 0x8eba, 0x9a52, 0xfcc1, 0x8be9, 0x9caf, 0x8bfd, 0x9abc, 0x9ab8, + 0x9aae, 0x9aa7, 0x9a53, 0x9d74, 0x8bea, 0x8beb, 0x90b2, 0x95e9, + 0x95e8, 0x95e6, 0x90b5, 0x9a54, 0x90b3, 0x95e7, 0x8b50, 0x8bec, + 0x9a56, 0x8bfb, 0x9a57, 0xa0aa, 0x9fa6, 0x99cc, 0x9c59, 0x99b5, + 0x90be, 0x9faf, 0x95f2, 0x90bf, 0x90c1, 0xfee4, 0x90c4, 0x90c7, + 0x92e4, 0x9f52, 0x90db, 0xa066, 0x90d2, 0x90d4, 0x9a5b, 0x95fd, + 0x8bc4, 0x90de, 0x9ce4, 0x90e1, 0x9e46, 0x9651, 0xfb58, 0x90e6, + 0x9650, 0x90e7, 0x90e8, 0x9a5d, 0x9f7a, 0x9b5c, 0x9f7c, 0xfc52, + 0x90e9, 0x90ea, 0x9a5e, 0x9f76, 0x90eb, 0x90ec, 0x8bee, 0x90ee, + 0x91c6, 0x90f2, 0xfcbc, 0x8a74, 0x9657, 0x9cef, 0x9fdf, 0x90f7, + 0x90f6, 0x9b5e, 0x90f8, 0x90f9, 0xfa6a, 0x8bef, 0x9fe0, 0x9142, + 0x9a62, 0x9569, 0x9144, 0x9143, 0x9141, 0x8bf0, 0x9660, 0x8bf1, + 0x99f6, 0x9149, 0x914a, 0x914b, 0x9a64, 0x8abf, 0x9a66, 0x9a67, + 0x9a69, 0x9a6a, 0x9652, 0x914d, 0x9666, 0x9f7b, 0x9a6b, 0xa06c, + 0x9667, 0x9a6c, 0x9a6d, 0x8bf2, 0x966a, 0xfcea, 0x966c, 0x91c4, + 0x9677, 0x99f4, 0x9a6f, 0x9fab, 0x8ec1, 0x9555, 0x9152, 0x9153, + 0x9155, 0x955d, 0x9671, 0x9c6d, 0x9673, 0x9154, 0x9a71, 0x9156, + 0x966d, 0x9557, 0x89c6, 0x89c7, 0x8a6a, 0x8b57, 0x9fe1, 0x9b5f, + 0xa05d, 0x915b, 0x915c, 0x915e, 0x9f5c, 0x9f57, 0x9f65, 0x9a72, + 0x9160, 0x9f5e, 0x9161, 0x9164, 0x9f41, 0x9169, 0x9168, 0x9a74, + 0x96b2, 0x9a75, 0xfda5, 0x9ee9, 0x8bba, 0x916d, 0xa060, 0x9fde, + 0x9fc3, 0x96b5, 0xa067, 0x96b3, 0x9a76, 0x95d5, 0x9eca, 0x9a77, + 0x9a78, 0x9170, 0x916f, 0x9fa3, 0x9171, 0x96b1, 0x9f63, 0x9f67, + 0x8bb9, 0x9a7a, 0x8b56, 0x9ada, 0x96b0, 0x9a7e, 0x9dde, 0x96ad, + 0x96ae, 0x9ea1, 0x9e50, 0x96af, 0x8bf4, 0x9fa4, 0x96bd, 0x96f4, + 0x96b8, 0xfaa1, 0x91a7, 0xa05e, 0x9a7d, 0x8948, 0x9eb1, 0x9ddb, + 0x95bf, 0x8a73, 0x9efe, 0x917a, 0x917b, 0x9aa3, 0x96c2, 0x9f77, + 0x9aa4, 0x9aa5, 0x91a1, 0x89b8, 0x9173, 0x9aa6, 0x89bd, 0x89b9, + 0x917d, 0x96bb, 0x9ff2, 0x8bf5, 0x9aa9, 0x9f54, 0x9fe3, 0x9eed, + 0x91aa, 0x91ab, 0xa070, 0x9f6d, 0x91ac, 0x91ad, 0xa0fd, 0x9fe2, + 0x91af, 0x9e41, 0x9aaa, 0x91b0, 0x9aab, 0x9aac, 0x9a4a, 0x91b2, + 0x8bf6, 0x9aad, 0x89b6, 0x9aaf, 0x9ab0, 0x9ab1, 0x9aa1, 0x91b9, + 0x91ba, 0x91be, 0xa041, 0x8bb7, 0x91c0, 0x9ab3, 0x91c3, 0xa0fc, + 0x9fee, 0x9f69, 0x91c8, 0x91c9, 0x8de6, 0x91cb, 0x89c8, 0x8daa, + 0x9fdd, 0xc8a1, 0xc8a3, 0x8bf8, 0xc8d0, 0xc8cf, 0xc6e4, 0xc6e5, + 0xc8cd, 0xc8ce, 0xf9fe, 0x9c71, 0x9375, 0x9376, 0x9548, 0x8ec6, + 0x8bc5, 0x8bfa, 0xc87c, 0x9ab4, 0x884e, 0x884b, 0xc87a, 0x8848, + 0x8847, 0xa0f6, 0x8845, 0x8853, 0xfcad, 0x8aad, 0x9272, 0xfc47, + 0x94df, 0x9fd1, 0xfbcb, 0x927d, 0x98a4, 0x94e7, 0x90cb, 0x927b, + 0x94d8, 0xfc5f, 0xfa54, 0x9ab5, 0x96da, 0x9279, 0xfa74, 0x9275, + 0x8dfb, 0x8a49, 0x92df, 0x9b7c, 0xfa63, 0xfa60, 0x926d, 0xfa62, + 0x9ab6, 0x976b, 0xfd6a, 0xfd54, 0x9273, 0x97d8, 0x9fbb, 0x9342, + 0x9276, 0xfa65, 0x926c, 0xfa6e, 0x9ee0, 0x92c0, 0x92bf, 0x92be, + 0x9aba, 0x8ab3, 0x9775, 0xfa40, 0xfa76, 0xfbd0, 0xfa7b, 0xfe6d, + 0x9bb3, 0x89cc, 0x9abe, 0xfa42, 0x92bc, 0x945c, 0x9bb5, 0x9abf, + 0x98a7, 0x97a4, 0x90fd, 0xfc7b, 0x9ac0, 0x92c3, 0x8aaa, 0x9bd0, + 0x9550, 0x92c6, 0x98a6, 0x9546, 0xfd63, 0xfac2, 0x9ec3, 0x89b2, + 0x9c66, 0x9053, 0x97c1, 0x9ac4, 0x9ac5, 0x8eef, 0xfae9, 0x9262, + 0x8af7, 0x9ac6, 0x92e1, 0x9ac9, 0xfac6, 0x97a5, 0x9acb, 0xfa72, + 0x8a5e, 0x94e0, 0x92cc, 0x8ae5, 0xfe5c, 0x9acc, 0x9df9, 0x8a43, + 0x8aa6, 0x9acd, 0x9ace, 0xfaee, 0x9bcc, 0x9acf, 0x9ad1, 0x9dfa, + 0x9d7c, 0x9ad3, 0x97a6, 0x995f, 0xfbf6, 0x9fc5, 0x8a59, 0x8b6b, + 0x9ad4, 0x9ad5, 0x97a2, 0x8a44, 0x9f4a, 0x90a1, 0xfda4, 0x8a64, + 0x8af2, 0x8af8, 0x9dd8, 0x94d6, 0xfafe, 0xfba7, 0x9ad6, 0x9f4d, + 0xfaf6, 0x8a57, 0x8b43, 0x8b44, 0x8ab6, 0x8ac0, 0x9e54, 0x9ad7, + 0x9ad8, 0x9adc, 0x8aca, 0x9ea8, 0x9263, 0x9add, 0x8b65, 0x8b6f, + 0x8b7e, 0x8f43, 0x92d0, 0x8af4, 0x9dbe, 0x9ae1, 0xfcde, 0x9dfd, + 0x8b66, 0x8b70, 0x8b75, 0x8ae4, 0x8ba4, 0x8aed, 0x8a5d, 0x8b48, + 0x9ded, 0x9e40, 0x8aef, 0x8af6, 0x9e76, 0x9ee3, 0x9ade, 0x8dfe, + 0xfafc, 0x9cb1, 0x9e77, 0x8b64, 0x8b67, 0x974b, 0x9653, 0x9ae0, + 0x8b4a, 0x8af1, 0x8ad7, 0xa0ab, 0x8ab5, 0x8a5f, 0x8aee, 0x9adf, + 0x8afe, 0x8a58, 0x8ba3, 0x8ba7, 0x9ae3, 0x9261, 0x9dd7, 0x9e7d, + 0x9ea7, 0x9eab, 0x9042, 0x8b79, 0x8b7a, 0x9ae6, 0x9ae5, 0x8a7e, + 0x9e44, 0x9ae7, 0x8a7c, 0x8b71, 0x9ae9, 0x9aea, 0x9aeb, 0x8abd, + 0xfb4e, 0x9aed, 0x8af9, 0x9e63, 0x8b49, 0x8ace, 0x8b6e, 0x8ae8, + 0x9aee, 0x92ce, 0x8a5a, 0x8b7b, 0x8b7c, 0x9aef, 0x9af0, 0x8afa, + 0x8941, 0x8b72, 0x8af3, 0x8ba8, 0x9eae, 0x9e72, 0xfb73, 0xfb5f, + 0x90ba, 0x91fe, 0x9ef6, 0x97ed, 0x9af3, 0xa0ee, 0x967c, 0x9345, + 0x986e, 0xfa56, 0x9af5, 0xfc4b, 0x9af4, 0xfede, 0xfcb7, 0x97f1, + 0x97c7, 0x9ccb, 0x9240, 0x9ce8, 0x91fd, 0x974e, 0xfb68, 0x976c, + 0x97e8, 0xfb6a, 0x8b74, 0x8ee7, 0xfdc8, 0x9241, 0x96a1, 0x8ef3, + 0x9af7, 0x8fa6, 0xfad6, 0x9cc7, 0xfad7, 0x9af8, 0xfba1, 0x8ec5, + 0xfba4, 0xfbc2, 0x9ac1, 0x91fa, 0xfedb, 0x97ab, 0x9147, 0xfbb1, + 0x8fea, 0x94d2, 0xfe61, 0xface, 0x92ed, 0x91f3, 0x93c6, 0x935a, + 0xfafb, 0x92ef, 0xfac8, 0x9847, 0x9366, 0x9855, 0x96e6, 0x9f43, + 0x9faa, 0x94da, 0x92ee, 0xfcaf, 0xfbfb, 0x8ef9, 0x91f6, 0x9364, + 0x94f5, 0x9cb6, 0xfbad, 0x984e, 0x8f44, 0x96fd, 0x9af9, 0x9afa, + 0x9769, 0x95d4, 0x984b, 0xfbaa, 0x987c, 0x91ea, 0x9daf, 0x9dc5, + 0x91f1, 0x8eb1, 0x97a9, 0xfbac, 0xfcb8, 0x9cb9, 0xfbb0, 0xfcd2, + 0x93cb, 0x9afd, 0x91f4, 0x8bac, 0xa055, 0x9574, 0x95be, 0x97ad, + 0x8ee9, 0x92f8, 0x97be, 0x916c, 0x94aa, 0xfc63, 0x9dc6, 0x97b5, + 0x92b8, 0x91ef, 0xfea6, 0x9760, 0x9358, 0x9576, 0x8fac, 0x91ec, + 0x97b4, 0x91f7, 0x974a, 0xfb49, 0x9578, 0x93bc, 0x91d6, 0x9355, + 0x9356, 0x9851, 0x8ff8, 0xfbc0, 0x93f2, 0x90d0, 0x9c44, 0x9255, + 0x9363, 0x91a5, 0xa0ed, 0xfd6b, 0x9afe, 0x9351, 0xfa78, 0xfea8, + 0x9350, 0xfa4c, 0x92f7, 0x9b40, 0xfbce, 0x9b41, 0xfead, 0xfbd5, + 0x8bc2, 0x9a7c, 0x9b42, 0x9b43, 0x9e79, 0xfbd9, 0x9b44, 0xa0a7, + 0x9bf3, 0x935e, 0x89cb, 0x9f53, 0x93d7, 0xfbe1, 0xfed0, 0xfbe2, + 0xfce3, 0x9074, 0xfbe6, 0x9bb7, 0x9b45, 0x9b47, 0x9f50, 0x9b48, + 0xfc5b, 0x98a9, 0x9cfd, 0x884c, 0x9b4b, 0xfbec, 0x9ba8, 0x8ad5, + 0xfa73, 0xfd59, 0x91a2, 0xfbed, 0x9ca9, 0x8aa8, 0x9bc3, 0x8ae1, + 0x9b4e, 0x95d0, 0x905f, 0x97ee, 0xfc4e, 0x9b4f, 0x9b50, 0x9ec6, + 0xfc50, 0xfd73, 0xfda7, 0x9da2, 0xfa58, 0xfa5e, 0xa059, 0xfa75, + 0xfbbe, 0x9ca2, 0x9370, 0x9371, 0x9377, 0xfeef, 0x936d, 0xfc5d, + 0x90b8, 0x8afc, 0xfb41, 0x9e6b, 0x94e3, 0x8ee2, 0x8ed7, 0x9c4d, + 0x96a3, 0x9b51, 0x8ac3, 0x96aa, 0xfc68, 0x8b6d, 0xfd67, 0x8ae9, + 0xfca1, 0x936c, 0x9b52, 0xfe70, 0xfca8, 0xfce9, 0x9cb4, 0x8aea, + 0x9b53, 0x9b55, 0x96ab, 0xfca7, 0x9b56, 0x8abc, 0x8acb, 0x9b57, + 0x89cd, 0x9b59, 0x9b5b, 0x93a5, 0x9b5d, 0x9e4f, 0x93a3, 0x8a7b, + 0x8b42, 0x9750, 0x8fb3, 0x8a50, 0x9b60, 0x8b45, 0x8b46, 0x9dfe, + 0x9b62, 0x937b, 0x93b1, 0x8a60, 0x8ad8, 0x9b63, 0x8a69, 0x8a47, + 0x8acc, 0x937c, 0x9b65, 0x9b66, 0x8a72, 0x8a7a, 0x93af, 0x8ab0, + 0x9b68, 0x9ea3, 0xfaec, 0x8b77, 0x9b67, 0x8b59, 0xfcb1, 0xfcbb, + 0x9b69, 0x93a8, 0x8ae0, 0x9e51, 0x8f5f, 0x9b6a, 0x9b6b, 0x97ec, + 0x9b6c, 0xfe4e, 0xfdc2, 0x9b6d, 0x9167, 0xfccc, 0x93b6, 0x90e4, + 0x90e5, 0x9ef2, 0x93ca, 0x8bbc, 0x8f46, 0x93cf, 0xfcdb, 0xfcdc, + 0x93c0, 0xfce6, 0x96e7, 0xfcd8, 0xfcd9, 0xfda6, 0x93ce, 0x95f1, + 0x9ce9, 0xfce4, 0x94af, 0xfa77, 0x93cc, 0x905a, 0x93bf, 0xfb51, + 0x93b9, 0xfed7, 0x93b7, 0x93d9, 0x93bb, 0x93da, 0x98a3, 0x90d1, + 0x9b6e, 0xfa70, 0x9beb, 0x9b6f, 0xfcfc, 0x8b40, 0xa07b, 0x97f7, + 0x93e2, 0xfcd6, 0x9559, 0x93a6, 0xfd40, 0x935f, 0x97f2, 0x9c76, + 0x8ef8, 0x8f47, 0x9b74, 0x92b4, 0x91ed, 0x96d2, 0xfd46, 0x8f4f, + 0x9549, 0x9b75, 0xfa5c, 0x9b79, 0xfd4b, 0x96d3, 0xfd58, 0x945f, + 0xa0f5, 0x9243, 0x97fa, 0x9dd9, 0x97f4, 0x924d, 0xfd5b, 0x9b7a, + 0x9ed5, 0xfaae, 0x9cc9, 0x9258, 0x8ec8, 0x94b4, 0x93e1, 0x93df, + 0xfcf0, 0x93ec, 0x97f6, 0x96cf, 0x93de, 0x8acf, 0x9ba2, 0xfd69, + 0x9352, 0x98a2, 0xfd6e, 0xfa7c, 0x93fa, 0x907c, 0x8f67, 0x9db7, + 0xa0e9, 0xfa4e, 0xfda1, 0x9e74, 0x9fbf, 0x9ecb, 0x9bb9, 0x9dd4, + 0x97b9, 0x8ef1, 0x957b, 0x9ed2, 0x9753, 0x96a4, 0x8fbe, 0x94d9, + 0x9058, 0xfd79, 0xfd7b, 0x8eda, 0x8efa, 0x9ba5, 0x9ed9, 0x97d4, + 0x90bb, 0xfdbc, 0xfdc6, 0x9248, 0x92b5, 0x9dc1, 0x92b9, 0x92a6, + 0x8f4b, 0x9ba6, 0x92b6, 0x8e40, 0x9ed8, 0x945e, 0x985f, 0x94ce, + 0x924a, 0xfd70, 0x9467, 0x8dec, 0x9bd8, 0x9448, 0xfac1, 0x9cf7, + 0xfdbe, 0x8fda, 0xfdd9, 0xfc7e, 0x93f9, 0xfa43, 0xfaeb, 0xfac3, + 0x97d3, 0x95f9, 0x9c48, 0xfdd8, 0xa0d8, 0xfdd7, 0xfb4a, 0x9baf, + 0x944b, 0xfdc9, 0x8eac, 0xfdb2, 0x925a, 0xfcbd, 0x92d9, 0xfdd5, + 0x92dd, 0x9259, 0x96ba, 0x925b, 0x9bab, 0xfdda, 0xfdde, 0xfdd3, + 0xfdd6, 0xfddc, 0xfddd, 0x90fe, 0xfea1, 0x8bad, 0x9cd8, 0x9e6d, + 0xfd7c, 0xfb61, 0x96f8, 0x96f0, 0xfcf4, 0xfe60, 0x9852, 0x964f, + 0x916e, 0x986d, 0x9864, 0x9453, 0xfdec, 0xfb78, 0x95ba, 0x985d, + 0x92f9, 0x985a, 0xfdf6, 0x93d0, 0x9862, 0x9bad, 0x974f, 0x9bae, + 0x9452, 0x9bb0, 0x91d2, 0x97ea, 0xfb6b, 0x91b1, 0xfdf3, 0x92cb, + 0x9bb1, 0xfcec, 0x986b, 0x9751, 0x9871, 0x95ef, 0x9ef3, 0x91e8, + 0x9bba, 0xfb4c, 0x926a, 0xfdf8, 0x9861, 0x91e7, 0x93ed, 0x9744, + 0x91e1, 0xfbf5, 0x9869, 0x8a62, 0x9bbb, 0x9c55, 0x8e77, 0x8ab2, + 0x9ebc, 0x93e6, 0x93a2, 0x9bbd, 0x94b3, 0x937d, 0x9e66, 0x9459, + 0x9bbf, 0x9458, 0x9ea5, 0x9bc7, 0xfe54, 0x8e74, 0x8bd6, 0x94b6, + 0xfd74, 0x98c0, 0x94a5, 0x9bc8, 0x95ed, 0xfd7e, 0xfbeb, 0xfd7d, + 0x976f, 0x9461, 0x9fc1, 0x95d7, 0xfa52, 0x9c58, 0x9f68, 0x9be7, + 0xfcce, 0x96e8, 0xfa49, 0x97a1, 0x954d, 0x9ef8, 0xfe49, 0x91ce, + 0x9771, 0xfdb1, 0xfc6e, 0x9cf2, 0x93b8, 0x9043, 0x9759, 0x94d7, + 0xfe66, 0x947d, 0xfc6f, 0x9246, 0xfa6d, 0x8ef7, 0xfbb7, 0x947c, + 0x92cd, 0x97b2, 0xfe65, 0x967e, 0x9758, 0x9b77, 0x91cf, 0x94a4, + 0x9cad, 0x8bab, 0x96d5, 0xfcb3, 0x93ae, 0x976d, 0x9446, 0x95f7, + 0x9c46, 0x955b, 0x91d1, 0x94f4, 0xfe67, 0x92a5, 0xfedf, 0x9bc9, + 0xfced, 0xfdfa, 0xfcc8, 0xfe62, 0x91fc, 0xfe6b, 0xfdf9, 0xfcc7, + 0x914e, 0x9cb8, 0x9767, 0x95ee, 0x9bb2, 0x9460, 0x94a2, 0x9875, + 0x97ac, 0x91d3, 0x987b, 0x8eeb, 0x976a, 0x965e, 0x97eb, 0x9ff9, + 0x95f8, 0xfea2, 0x8fe6, 0xfe7e, 0x9da4, 0x9768, 0x8eec, 0x94bd, + 0x945b, 0x9cf6, 0xfaa7, 0x9bd9, 0xfa5d, 0x9656, 0x9762, 0x94ba, + 0xa04f, 0x92d8, 0x9bcb, 0x94bb, 0x9d5f, 0x90cf, 0x9465, 0x9f4c, + 0x90d8, 0x9ebe, 0xfb6d, 0x95ca, 0x9dc2, 0x97f8, 0x8ffc, 0x9473, + 0x9474, 0xfeb7, 0x8a4b, 0x8a55, 0x8b69, 0x8adc, 0x8b76, 0x9bce, + 0x8a68, 0xa0f8, 0x98df, 0xfeb5, 0x9bcf, 0x96fb, 0x9bfb, 0x9ece, + 0x8ee5, 0x9e7b, 0x9bd2, 0x8aa5, 0xfece, 0x8a45, 0x9dfc, 0xfecf, + 0x8ba5, 0x8aec, 0xfce0, 0x94ad, 0xfed5, 0x94ac, 0xfc5a, 0x9bd6, + 0x8a6f, 0x8ba9, 0x8e5f, 0x9dcb, 0xfce7, 0x9bd7, 0x93c8, 0x91f0, + 0x8fe0, 0x9bdb, 0x90ed, 0x9bdc, 0xa0ec, 0x98fa, 0x9be0, 0x93c7, + 0x9249, 0x96e1, 0x9be2, 0x9be4, 0x8fe1, 0x9be5, 0x94c0, 0x93c3, + 0x93c5, 0x9079, 0x977b, 0x907e, 0xfee6, 0xfe46, 0x9db8, 0x9270, + 0x95a8, 0x94c8, 0x98b9, 0x9140, 0xfcbe, 0x9157, 0x8bb2, 0xfadf, + 0x9be6, 0x9643, 0x8e44, 0x9c4f, 0xfef4, 0x9be8, 0x93dc, 0x966f, + 0x8e4a, 0x9bed, 0x92f6, 0x9db9, 0x8e4e, 0xfbcf, 0x9ec2, 0x94e5, + 0x9bf0, 0x94e4, 0x9551, 0x8bbb, 0x9bf1, 0x94f0, 0x8e64, 0x94ea, + 0x8f61, 0x9b64, 0x8e5b, 0x9bf2, 0x9fbe, 0x9dc9, 0x8e6c, 0x8f73, + 0x8f75, 0x8e71, 0x8e60, 0x8e6a, 0x9552, 0x9554, 0x8ad4, 0x9dbb, + 0x9543, 0x92fe, 0x94f2, 0x94f1, 0xa0ea, 0x9dd2, 0xa0b1, 0x91f8, + 0x9462, 0x9ba4, 0x8ead, 0x9ead, 0x96d0, 0xfeee, 0x8ab4, 0x9757, + 0x8a77, 0x9bf7, 0x8eb5, 0xa06d, 0x8eb6, 0x9756, 0x9540, 0xa0f3, + 0x94be, 0x9bfa, 0xfddf, 0x9dbc, 0x94fe, 0x8bdb, 0xa0fe, 0x8ec0, + 0x9f47, 0x8bde, 0xa0fb, 0x8ec3, 0x9649, 0xfec2, 0x954c, 0x9bfd, + 0x90cc, 0x9c60, 0x954b, 0x9bfe, 0x9c70, 0x9c43, 0x9c47, 0x8ecc, + 0x8e54, 0x8ee4, 0x9c49, 0x8b5e, 0x955e, 0x955c, 0x9c4b, 0x8be1, + 0x8ed9, 0x9db4, 0x925f, 0x9c4c, 0x8aa1, 0x8edb, 0x9c56, 0x8aa2, + 0x9754, 0x9c5e, 0x9ed4, 0x9568, 0xa0c3, 0x8ae6, 0xa0f7, 0x9c61, + 0x9c5f, 0xfc4d, 0x9e5b, 0x9e69, 0x9c63, 0xfec7, 0xfec6, 0x9c67, + 0x9c69, 0x8be2, 0x9165, 0x9ce7, 0x8a54, 0x9c6c, 0x9c6e, 0xfe5d, + 0x9c73, 0x956a, 0x956d, 0x8ef0, 0x8f4d, 0x8ef6, 0xfabc, 0xfbda, + 0x8b4c, 0xfd75, 0x9bdd, 0xfaf5, 0x9c74, 0x9545, 0x96c6, 0x8f6a, + 0x8f4e, 0x9c78, 0xfa55, 0x97e4, 0x9c41, 0x925c, 0x96fa, 0xfb66, + 0x8e65, 0x9849, 0xfba8, 0x9842, 0x9c7a, 0x97fb, 0x90ca, 0x9c5b, + 0x974d, 0x8ed3, 0x9561, 0x9f4b, 0x9fb5, 0x93d2, 0xfdaa, 0x9840, + 0x9146, 0x9867, 0xfa5a, 0xfba9, 0x9841, 0xfcfd, 0xfdab, 0x91bd, + 0x8f4c, 0x96c9, 0x8f55, 0xfbae, 0x956f, 0x9c7d, 0xa0f0, 0x946f, + 0xfdac, 0x96cb, 0x96ce, 0xa056, 0x9ce1, 0x96c4, 0x8f5e, 0x8f6c, + 0x8ea3, 0xfbb3, 0xfc53, 0xfdb3, 0x8f6b, 0x96ca, 0x8f79, 0x9e6f, + 0xa0c5, 0xfc78, 0x8e42, 0x8f5a, 0x90c2, 0x8ea5, 0x9061, 0x924f, + 0x9373, 0xfdb5, 0xfecc, 0xfbbd, 0x9843, 0x96c5, 0x89bc, 0x9ca3, + 0x924b, 0x984a, 0x8fa4, 0xa0f1, 0x9efb, 0x9cd2, 0x8fa7, 0xfc5c, + 0x9845, 0x9046, 0xfefa, 0x9560, 0x9f48, 0x9247, 0x90fb, 0x9ca4, + 0x9571, 0x9ca6, 0x9ca7, 0x9caa, 0x9ed3, 0x9e70, 0x9cac, 0x8fae, + 0x957d, 0x9cb0, 0x97b6, 0xa0bd, 0x8adf, 0x9eaa, 0x8fbd, 0x8fbf, + 0x9369, 0x9ba7, 0xc8a4, 0xfeea, 0x9be1, 0x8b41, 0x9db6, 0xa0eb, + 0x9ba3, 0x8ba1, 0x8fc8, 0x894c, 0x9860, 0x94c7, 0x8b58, 0x95ab, + 0x95aa, 0x9cc3, 0x9cc4, 0x93d6, 0x9dac, 0x8be6, 0x8a71, 0x8fd1, + 0x99d5, 0x90f4, 0x8aa3, 0x9cce, 0x9cd4, 0x9cd5, 0xfbc8, 0x9db3, + 0xfc70, 0x8fd7, 0x9b73, 0xfa5b, 0x8fd2, 0x9064, 0x98b6, 0x9668, + 0x9cd6, 0x98bd, 0x8fdc, 0xfef6, 0x8fd9, 0x9541, 0x97f3, 0x9bf8, + 0x9e6c, 0x8ff2, 0x8fee, 0x9cd7, 0x9e6e, 0x8a40, 0x8fef, 0x8ff4, + 0x8ff5, 0x95c2, 0x986a, 0x97cf, 0x9ee5, 0x9e7c, 0x9041, 0x9cdb, + 0x9441, 0x9ce6, 0x9db0, 0x9cea, 0x9ced, 0x9cfa, 0x8b62, 0x8a4e, + 0x9cca, 0x8a66, 0x9cfb, 0x9cfc, 0x9cfe, 0x8a53, 0x9ce5, 0x9d40, + 0x9d41, 0x9045, 0x8b73, 0x97ca, 0x9d42, 0x8a61, 0x8bae, 0x8ad2, + 0x8ba2, 0x9df2, 0x9d43, 0x9cdf, 0x9d44, 0x8eca, 0x904e, 0x8eb3, + 0x9ff5, 0x9d45, 0x904f, 0x9d47, 0x89ca, 0x9cb5, 0xfbfe, 0x905e, + 0x9063, 0x9057, 0x9066, 0x9bc0, 0xfce5, 0x9162, 0x9067, 0x8fa1, + 0x8fa2, 0x9d48, 0xfad3, 0x905d, 0x90b9, 0x906b, 0x9069, 0xfe57, + 0xfe55, 0x9073, 0x9bef, 0x9cf0, 0x9d4b, 0xfed9, 0xfeda, 0x91e0, + 0x91d8, 0x9646, 0x9360, 0xfa53, 0x9cd3, 0x9d4e, 0xfb40, 0x8de2, + 0x9442, 0x9056, 0x9865, 0xfa4a, 0x9d50, 0x9d52, 0x95af, 0x975a, + 0x9349, 0x9747, 0xa0f4, 0x9778, 0x8fcf, 0xfc60, 0xfc56, 0x91dc, + 0x9661, 0x92ec, 0x935d, 0x8ede, 0x96fe, 0xfd4f, 0x95de, 0x98b0, + 0xa040, 0x97bd, 0x977d, 0x97f5, 0x9bac, 0xfada, 0x92c2, 0x97b1, + 0x907b, 0x93fe, 0x947b, 0x9777, 0xfabe, 0xfd43, 0x90c6, 0x90a4, + 0x90a8, 0x94a9, 0x90a9, 0x95e0, 0x907d, 0x9265, 0xfdba, 0x93c4, + 0xfeed, 0x9dab, 0xa0e3, 0x9648, 0x9d53, 0x8aa9, 0x9bc5, 0x965d, + 0x975f, 0x965f, 0x966e, 0xfb5d, 0x9db1, 0xfea3, 0x9db2, 0x95ae, + 0xfca3, 0xa0a2, 0x9655, 0x9d54, 0x9341, 0x95ad, 0x91d5, 0x977a, + 0xfdfc, 0x8e47, 0x93fd, 0x90a5, 0x90ac, 0x95ac, 0x90ae, 0xfea5, + 0x9d56, 0x97e3, 0x95e2, 0x9466, 0x9647, 0x91b8, 0x9cec, 0x90ad, + 0x95e3, 0x8b4f, 0x8ae3, 0x8b4d, 0x95ea, 0x8b4e, 0x8bed, 0x91d9, + 0xa0a4, 0x95f5, 0x95f4, 0x9fb3, 0xfeaf, 0xfe72, 0x927a, 0xfeac, + 0x95f3, 0x9d58, 0x9372, 0x91c5, 0x9642, 0x90cd, 0x95fe, 0x9159, + 0x9c65, 0x97cc, 0x90ce, 0x9d59, 0xfcf5, 0xfefd, 0x9d5b, 0x9d5c, + 0x937e, 0x98ac, 0x9d5e, 0xfdd0, 0xfd60, 0x9ccf, 0x90dd, 0x90e0, + 0x90f3, 0x98b1, 0x90f0, 0x93bd, 0x95b7, 0x9f46, 0x8e4b, 0x9658, + 0x8a4c, 0x9d63, 0x9ecf, 0x9d65, 0x9d66, 0x965a, 0x9d64, 0x8a6c, + 0x8ad9, 0x9d67, 0x8a70, 0x8bf3, 0x9150, 0x9cc1, 0x9d68, 0x93a7, + 0x9674, 0xa0ef, 0x9151, 0x96c1, 0x9676, 0x9d69, 0xfca4, 0x9d6a, + 0x924e, 0x9d6b, 0x9bc1, 0x9d6c, 0x8a65, 0x915d, 0x9d6d, 0x915a, + 0x9cc0, 0x916a, 0x9d6e, 0x9ea6, 0x9dcd, 0x9d6f, 0x89bb, 0x9ef9, + 0x96b4, 0x9172, 0x9ec8, 0x8b55, 0x9d71, 0x9d72, 0x9ecc, 0x9174, + 0x9ed0, 0x905c, 0x8ed2, 0x91a8, 0x9177, 0x96bf, 0x96c0, 0x8fb1, + 0x96b7, 0x9178, 0x89be, 0x917c, 0xfb77, 0x9175, 0x91a3, 0x9176, + 0x96be, 0x9179, 0x96b6, 0x91a4, 0x91a6, 0x9d75, 0x9052, 0xa045, + 0x91a9, 0x98aa, 0x8baa, 0x9cdd, 0x9d77, 0x8940, 0x9eec, 0x93aa, + 0x9478, 0x9d7a, 0x8ac9, 0x8b4b, 0x9fec, 0x8ae2, 0x9e75, 0x9874, + 0x9ac8, 0xa047, 0x8bc3, 0xfc48, 0xfc77, 0x9c52, 0x8efd, 0x8fa8, + 0x957a, 0x8ff0, +}; + +static const Summary16 hkscs1999_uni2indx_page00[45] = { + /* 0x0000 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0100 }, { 1, 0x0000 }, + { 1, 0x0703 }, { 6, 0x000c }, { 8, 0x3703 }, { 15, 0x170c }, + /* 0x0100 */ + { 21, 0x0003 }, { 23, 0x0c0c }, { 27, 0x0800 }, { 28, 0x0000 }, + { 28, 0x3800 }, { 31, 0x0008 }, { 32, 0x0800 }, { 33, 0x0000 }, + { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, + { 33, 0x6000 }, { 35, 0x1557 }, { 43, 0x0000 }, { 43, 0x0000 }, + /* 0x0200 */ + { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, + { 43, 0x0000 }, { 43, 0x0813 }, { 47, 0x0402 }, { 49, 0x0020 }, + { 50, 0x0408 }, { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0000 }, + { 52, 0x0040 }, +}; +static const Summary16 hkscs1999_uni2indx_page04[6] = { + /* 0x0400 */ + { 53, 0x0002 }, { 54, 0xffff }, { 70, 0xffff }, { 86, 0xffff }, + { 102, 0xffff }, { 118, 0x0002 }, +}; +static const Summary16 hkscs1999_uni2indx_page1e[13] = { + /* 0x1e00 */ + { 119, 0x0000 }, { 119, 0x0000 }, { 119, 0x0000 }, { 119, 0x0000 }, + { 119, 0x0000 }, { 119, 0x0000 }, { 119, 0x0000 }, { 119, 0x0000 }, + { 119, 0x0000 }, { 119, 0x0000 }, { 119, 0x0000 }, { 119, 0xc000 }, + { 121, 0x0003 }, +}; +static const Summary16 hkscs1999_uni2indx_page21[15] = { + /* 0x2100 */ + { 123, 0x0000 }, { 123, 0x0040 }, { 124, 0x0002 }, { 125, 0x0000 }, + { 125, 0x0000 }, { 125, 0x0000 }, { 125, 0x0000 }, { 125, 0x03ff }, + { 135, 0x0000 }, { 135, 0x0000 }, { 135, 0x0000 }, { 135, 0x0300 }, + { 137, 0x0000 }, { 137, 0x0000 }, { 137, 0x0080 }, +}; +static const Summary16 hkscs1999_uni2indx_page23[40] = { + /* 0x2300 */ + { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, + { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, + { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, { 138, 0x0000 }, + { 138, 0x0000 }, { 138, 0x0c00 }, { 140, 0x0000 }, { 140, 0x0000 }, + /* 0x2400 */ + { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, + { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x03ff }, { 150, 0x3ff0 }, + { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, + { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, + /* 0x2500 */ + { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, + { 160, 0x0000 }, { 160, 0xffff }, { 176, 0xffff }, { 192, 0x0001 }, +}; +static const Summary16 hkscs1999_uni2indx_page27[4] = { + /* 0x2700 */ + { 193, 0x0000 }, { 193, 0x0000 }, { 193, 0x0000 }, { 193, 0x2000 }, +}; +static const Summary16 hkscs1999_uni2indx_page2e[68] = { + /* 0x2e00 */ + { 194, 0x0000 }, { 194, 0x0000 }, { 194, 0x0000 }, { 194, 0x0000 }, + { 194, 0x0000 }, { 194, 0x0000 }, { 194, 0x0000 }, { 194, 0x0000 }, + { 194, 0x35d1 }, { 202, 0x3020 }, { 205, 0x54a0 }, { 210, 0x5040 }, + { 213, 0xb440 }, { 218, 0x40c0 }, { 221, 0x0008 }, { 222, 0x0000 }, + /* 0x2f00 */ + { 222, 0x0000 }, { 222, 0x0000 }, { 222, 0x0000 }, { 222, 0x0008 }, + { 223, 0x0000 }, { 223, 0x0000 }, { 223, 0x0000 }, { 223, 0x0000 }, + { 223, 0x0000 }, { 223, 0x0000 }, { 223, 0x0000 }, { 223, 0x0000 }, + { 223, 0x0000 }, { 223, 0x0000 }, { 223, 0x0000 }, { 223, 0x0000 }, + /* 0x3000 */ + { 223, 0x00e0 }, { 226, 0x0000 }, { 226, 0x0000 }, { 226, 0x0000 }, + { 226, 0xfffe }, { 241, 0xffff }, { 257, 0xffff }, { 273, 0xffff }, + { 289, 0xffff }, { 305, 0x780f }, { 313, 0xfffe }, { 328, 0xffff }, + { 344, 0xffff }, { 360, 0xffff }, { 376, 0xffff }, { 392, 0x707f }, + /* 0x3100 */ + { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, + { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, + { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, { 402, 0x0000 }, + { 402, 0xffff }, { 418, 0x0000 }, { 418, 0x0000 }, { 418, 0x0000 }, + /* 0x3200 */ + { 418, 0x0000 }, { 418, 0x0000 }, { 418, 0x0000 }, { 418, 0x0002 }, +}; +static const Summary16 hkscs1999_uni2indx_page34[1724] = { + /* 0x3400 */ + { 419, 0x0000 }, { 419, 0x0000 }, { 419, 0x0000 }, { 419, 0x0020 }, + { 420, 0x1001 }, { 422, 0x0000 }, { 422, 0x0010 }, { 423, 0x6408 }, + { 427, 0x0000 }, { 427, 0x0048 }, { 429, 0x8020 }, { 431, 0x1000 }, + { 432, 0x0102 }, { 434, 0x8000 }, { 435, 0x0010 }, { 436, 0x0800 }, + /* 0x3500 */ + { 437, 0x0040 }, { 438, 0x0000 }, { 438, 0x0000 }, { 438, 0x4000 }, + { 439, 0x0000 }, { 439, 0x000a }, { 441, 0x2002 }, { 443, 0x0185 }, + { 447, 0x0010 }, { 448, 0x0180 }, { 450, 0x2022 }, { 453, 0x8000 }, + { 454, 0x44a2 }, { 459, 0x2844 }, { 463, 0x0000 }, { 463, 0x480e }, + /* 0x3600 */ + { 468, 0x0200 }, { 469, 0x0500 }, { 471, 0x2008 }, { 473, 0x4220 }, + { 476, 0x4380 }, { 480, 0x8000 }, { 481, 0x0000 }, { 481, 0x0400 }, + { 482, 0x0002 }, { 483, 0x0400 }, { 484, 0x1420 }, { 487, 0x1223 }, + { 492, 0x01ba }, { 498, 0x2058 }, { 502, 0x0066 }, { 506, 0x0020 }, + /* 0x3700 */ + { 507, 0x250a }, { 512, 0x1000 }, { 513, 0x302c }, { 518, 0x040d }, + { 522, 0x0009 }, { 524, 0x0000 }, { 524, 0x8004 }, { 526, 0x0000 }, + { 526, 0x0000 }, { 526, 0x0080 }, { 527, 0x0001 }, { 528, 0x4200 }, + { 530, 0x0000 }, { 530, 0x0000 }, { 530, 0x0000 }, { 530, 0x0904 }, + /* 0x3800 */ + { 533, 0x8000 }, { 534, 0x0200 }, { 535, 0x2001 }, { 537, 0x0140 }, + { 539, 0x0000 }, { 539, 0x0000 }, { 539, 0x0008 }, { 540, 0x0000 }, + { 540, 0x0000 }, { 540, 0x0000 }, { 540, 0x0001 }, { 541, 0x0000 }, + { 541, 0x1008 }, { 543, 0x0002 }, { 544, 0x0000 }, { 544, 0x0400 }, + /* 0x3900 */ + { 545, 0x0100 }, { 546, 0x0010 }, { 547, 0x0080 }, { 548, 0x8004 }, + { 550, 0x2000 }, { 551, 0x0000 }, { 551, 0x0008 }, { 552, 0x0000 }, + { 552, 0x0601 }, { 555, 0x0a04 }, { 558, 0x0012 }, { 560, 0x0100 }, + { 561, 0x0000 }, { 561, 0x1000 }, { 562, 0x1024 }, { 565, 0x4900 }, + /* 0x3a00 */ + { 568, 0x004a }, { 571, 0x0180 }, { 573, 0x0600 }, { 575, 0x0010 }, + { 576, 0x0800 }, { 577, 0x5084 }, { 581, 0x00c0 }, { 583, 0x0000 }, + { 583, 0x0000 }, { 583, 0x0080 }, { 584, 0x0800 }, { 585, 0x2000 }, + { 586, 0x0000 }, { 586, 0x4000 }, { 587, 0x0001 }, { 588, 0x0805 }, + /* 0x3b00 */ + { 591, 0x4000 }, { 592, 0x0200 }, { 593, 0x0804 }, { 595, 0x0200 }, + { 596, 0x0004 }, { 597, 0x0100 }, { 598, 0x0001 }, { 599, 0x1806 }, + { 603, 0x0001 }, { 604, 0x0240 }, { 606, 0x0002 }, { 607, 0x5000 }, + { 609, 0x0014 }, { 611, 0x2080 }, { 613, 0x1000 }, { 614, 0x001c }, + /* 0x3c00 */ + { 617, 0x2000 }, { 618, 0x0122 }, { 621, 0x0000 }, { 621, 0x0000 }, + { 621, 0x0000 }, { 621, 0x0010 }, { 622, 0x0000 }, { 622, 0x0000 }, + { 622, 0x0000 }, { 622, 0x0000 }, { 622, 0x0000 }, { 622, 0x0000 }, + { 622, 0x2800 }, { 624, 0x1042 }, { 627, 0x8800 }, { 629, 0x0000 }, + /* 0x3d00 */ + { 629, 0x0000 }, { 629, 0x2008 }, { 631, 0x0000 }, { 631, 0x0804 }, + { 633, 0x5040 }, { 636, 0x8002 }, { 638, 0x8604 }, { 642, 0x2020 }, + { 644, 0x8420 }, { 647, 0x0002 }, { 648, 0x2020 }, { 650, 0x8010 }, + { 652, 0x30c0 }, { 656, 0x0808 }, { 658, 0x0980 }, { 661, 0x3088 }, + /* 0x3e00 */ + { 665, 0x0040 }, { 666, 0x0000 }, { 666, 0x0000 }, { 666, 0x0000 }, + { 666, 0x0109 }, { 669, 0x0020 }, { 670, 0x0000 }, { 670, 0x0010 }, + { 671, 0x0000 }, { 671, 0x0000 }, { 671, 0x2700 }, { 675, 0x8102 }, + { 678, 0x1484 }, { 682, 0x44c3 }, { 688, 0x0a86 }, { 693, 0x9419 }, + /* 0x3f00 */ + { 699, 0x4051 }, { 703, 0x0000 }, { 703, 0x0000 }, { 703, 0x0000 }, + { 703, 0x0000 }, { 703, 0x0308 }, { 706, 0x0008 }, { 707, 0x1000 }, + { 708, 0x0000 }, { 708, 0x0008 }, { 709, 0x0000 }, { 709, 0x0000 }, + { 709, 0x0001 }, { 710, 0x1080 }, { 712, 0x2020 }, { 714, 0x0600 }, + /* 0x4000 */ + { 716, 0x0010 }, { 717, 0x2000 }, { 718, 0x0000 }, { 718, 0x0200 }, + { 719, 0x0020 }, { 720, 0x0088 }, { 722, 0x8424 }, { 726, 0x0000 }, + { 726, 0x0000 }, { 726, 0x0000 }, { 726, 0x0100 }, { 727, 0x8800 }, + { 729, 0x0100 }, { 730, 0x8100 }, { 732, 0x0000 }, { 732, 0x0400 }, + /* 0x4100 */ + { 733, 0x4218 }, { 737, 0x0000 }, { 737, 0x0000 }, { 737, 0x0004 }, + { 738, 0x0000 }, { 738, 0x0000 }, { 738, 0x5080 }, { 741, 0x8000 }, + { 742, 0x0000 }, { 742, 0x0001 }, { 743, 0x0000 }, { 743, 0x0004 }, + { 744, 0x8410 }, { 747, 0x0800 }, { 748, 0x8000 }, { 749, 0x0200 }, + /* 0x4200 */ + { 750, 0x0000 }, { 750, 0x0002 }, { 751, 0x0000 }, { 751, 0x0000 }, + { 751, 0x0001 }, { 752, 0x0000 }, { 752, 0x0401 }, { 754, 0x0400 }, + { 755, 0x1000 }, { 756, 0x0010 }, { 757, 0x0000 }, { 757, 0x1220 }, + { 760, 0x0000 }, { 760, 0x0000 }, { 760, 0x0000 }, { 760, 0x1810 }, + /* 0x4300 */ + { 763, 0x0000 }, { 763, 0x0000 }, { 763, 0x0800 }, { 764, 0x0000 }, + { 764, 0x0000 }, { 764, 0x0000 }, { 764, 0x4000 }, { 765, 0x0000 }, + { 765, 0x0000 }, { 765, 0x0080 }, { 766, 0x0000 }, { 766, 0x0400 }, + { 767, 0x0002 }, { 768, 0x8200 }, { 770, 0x2000 }, { 771, 0x0004 }, + /* 0x4400 */ + { 772, 0x0006 }, { 774, 0x0008 }, { 775, 0x2020 }, { 777, 0x0000 }, + { 777, 0x0000 }, { 777, 0x0000 }, { 777, 0x0000 }, { 777, 0x0400 }, + { 778, 0x8000 }, { 779, 0x8002 }, { 781, 0x0005 }, { 783, 0x0081 }, + { 785, 0x4021 }, { 788, 0xa000 }, { 790, 0x1e10 }, { 795, 0x0010 }, + /* 0x4500 */ + { 796, 0x0a18 }, { 800, 0x2040 }, { 802, 0x4080 }, { 804, 0xa808 }, + { 808, 0x0008 }, { 809, 0x1026 }, { 813, 0x0404 }, { 815, 0x0080 }, + { 816, 0x0020 }, { 817, 0x0000 }, { 817, 0x0000 }, { 817, 0x0000 }, + { 817, 0x0000 }, { 817, 0x0000 }, { 817, 0x0200 }, { 818, 0x0000 }, + /* 0x4600 */ + { 818, 0x8040 }, { 820, 0x00a0 }, { 822, 0x0000 }, { 822, 0x0000 }, + { 822, 0x0000 }, { 822, 0x0800 }, { 823, 0x0000 }, { 823, 0x0400 }, + { 824, 0x0001 }, { 825, 0x0000 }, { 825, 0x0000 }, { 825, 0x0000 }, + { 825, 0x8000 }, { 826, 0x0001 }, { 827, 0x0000 }, { 827, 0x0020 }, + /* 0x4700 */ + { 828, 0x0000 }, { 828, 0x0108 }, { 830, 0x0000 }, { 830, 0x0000 }, + { 830, 0x4000 }, { 831, 0x0000 }, { 831, 0x0000 }, { 831, 0x1000 }, + { 832, 0x0000 }, { 832, 0x0100 }, { 833, 0x0040 }, { 834, 0x0000 }, + { 834, 0x0000 }, { 834, 0x0020 }, { 835, 0x2000 }, { 836, 0x0010 }, + /* 0x4800 */ + { 837, 0x0801 }, { 839, 0x0000 }, { 839, 0x0000 }, { 839, 0x0080 }, + { 840, 0x0000 }, { 840, 0x2000 }, { 841, 0x0000 }, { 841, 0x0002 }, + { 842, 0x0000 }, { 842, 0x0800 }, { 843, 0x6000 }, { 845, 0x0000 }, + { 845, 0x0000 }, { 845, 0x2001 }, { 847, 0x2000 }, { 848, 0x0408 }, + /* 0x4900 */ + { 850, 0x0040 }, { 851, 0x4002 }, { 853, 0x2420 }, { 856, 0x5020 }, + { 859, 0x0020 }, { 860, 0x000a }, { 862, 0x0420 }, { 864, 0x0004 }, + { 865, 0x0200 }, { 866, 0x0000 }, { 866, 0x0082 }, { 868, 0x0000 }, + { 868, 0x0000 }, { 868, 0x8000 }, { 869, 0x00a0 }, { 871, 0x0000 }, + /* 0x4a00 */ + { 871, 0x8000 }, { 872, 0x2000 }, { 873, 0x0010 }, { 874, 0x0020 }, + { 875, 0x0000 }, { 875, 0x0000 }, { 875, 0x0000 }, { 875, 0x0000 }, + { 875, 0x0000 }, { 875, 0x0040 }, { 876, 0x0000 }, { 876, 0x0110 }, + { 878, 0x0000 }, { 878, 0x0002 }, { 879, 0x0010 }, { 880, 0x8000 }, + /* 0x4b00 */ + { 881, 0x0000 }, { 881, 0x0200 }, { 882, 0x1000 }, { 883, 0x0080 }, + { 884, 0x0000 }, { 884, 0x0000 }, { 884, 0x8000 }, { 885, 0x4805 }, + { 889, 0x4000 }, { 890, 0x20c9 }, { 895, 0x0000 }, { 895, 0x6000 }, + { 897, 0x0001 }, { 898, 0x0000 }, { 898, 0x0000 }, { 898, 0x0000 }, + /* 0x4c00 */ + { 898, 0x4090 }, { 901, 0x0000 }, { 901, 0x0000 }, { 901, 0x4800 }, + { 903, 0x0000 }, { 903, 0x0800 }, { 904, 0x2000 }, { 905, 0x2000 }, + { 906, 0x0000 }, { 906, 0x0000 }, { 906, 0x4010 }, { 908, 0x0081 }, + { 910, 0x2000 }, { 911, 0x0000 }, { 911, 0x2002 }, { 913, 0x0000 }, + /* 0x4d00 */ + { 913, 0x0200 }, { 914, 0x0001 }, { 915, 0x0000 }, { 915, 0x0010 }, + { 916, 0x0000 }, { 916, 0x0000 }, { 916, 0x0000 }, { 916, 0x0000 }, + { 916, 0x0000 }, { 916, 0x1002 }, { 918, 0x0000 }, { 918, 0x0000 }, + { 918, 0x0000 }, { 918, 0x0000 }, { 918, 0x0000 }, { 918, 0x0000 }, + /* 0x4e00 */ + { 918, 0x0010 }, { 919, 0x1400 }, { 921, 0x1512 }, { 926, 0xa0c0 }, + { 930, 0x0200 }, { 931, 0x0c00 }, { 933, 0x0400 }, { 934, 0x0100 }, + { 935, 0x02a3 }, { 940, 0x0500 }, { 942, 0x0001 }, { 943, 0x9880 }, + { 947, 0x4000 }, { 948, 0x0000 }, { 948, 0x4c00 }, { 951, 0x0100 }, + /* 0x4f00 */ + { 952, 0x0008 }, { 953, 0x0400 }, { 954, 0x0300 }, { 956, 0x0284 }, + { 959, 0x0824 }, { 962, 0x0000 }, { 962, 0x0000 }, { 962, 0x0004 }, + { 963, 0x0400 }, { 964, 0x0000 }, { 964, 0x0904 }, { 967, 0x2001 }, + { 969, 0x1100 }, { 971, 0x0000 }, { 971, 0x0030 }, { 973, 0x2204 }, + /* 0x5000 */ + { 976, 0x0108 }, { 978, 0x0000 }, { 978, 0x4000 }, { 979, 0x0010 }, + { 980, 0x0000 }, { 980, 0x0140 }, { 982, 0x1040 }, { 984, 0x0000 }, + { 984, 0x0102 }, { 986, 0x0001 }, { 987, 0x0040 }, { 988, 0x0000 }, + { 988, 0x2000 }, { 989, 0x8201 }, { 992, 0x0002 }, { 993, 0x1010 }, + /* 0x5100 */ + { 995, 0x6002 }, { 998, 0x0000 }, { 998, 0x0800 }, { 999, 0x0000 }, + { 999, 0x0000 }, { 999, 0x0040 }, { 1000, 0x0401 }, { 1002, 0x0210 }, + { 1004, 0x0144 }, { 1007, 0x1440 }, { 1010, 0x0980 }, { 1013, 0x013c }, + { 1018, 0x8288 }, { 1022, 0x880e }, { 1027, 0x2014 }, { 1030, 0x5010 }, + /* 0x5200 */ + { 1033, 0x0824 }, { 1036, 0x8000 }, { 1037, 0x00c1 }, { 1040, 0x1010 }, + { 1042, 0x0000 }, { 1042, 0x0280 }, { 1044, 0x0101 }, { 1046, 0x0208 }, + { 1048, 0x8000 }, { 1049, 0x0411 }, { 1052, 0x0112 }, { 1055, 0x0220 }, + { 1057, 0x1020 }, { 1059, 0x0003 }, { 1061, 0x0003 }, { 1063, 0x0200 }, + /* 0x5300 */ + { 1064, 0x0002 }, { 1065, 0x0000 }, { 1065, 0x1080 }, { 1067, 0x090c }, + { 1071, 0x4004 }, { 1073, 0xa000 }, { 1075, 0x2290 }, { 1079, 0x6010 }, + { 1082, 0x0000 }, { 1082, 0x0008 }, { 1083, 0x4f45 }, { 1091, 0x0041 }, + { 1093, 0x1026 }, { 1097, 0x0707 }, { 1103, 0x0001 }, { 1104, 0x40c0 }, + /* 0x5400 */ + { 1107, 0x0000 }, { 1107, 0x0458 }, { 1111, 0x800a }, { 1114, 0x0004 }, + { 1115, 0x2800 }, { 1117, 0x0000 }, { 1117, 0x2600 }, { 1120, 0x0000 }, + { 1120, 0x8020 }, { 1122, 0x5098 }, { 1127, 0x0018 }, { 1129, 0x0214 }, + { 1132, 0x3800 }, { 1135, 0x0401 }, { 1137, 0x8008 }, { 1139, 0x0000 }, + /* 0x5500 */ + { 1139, 0x2004 }, { 1141, 0x4108 }, { 1144, 0x0928 }, { 1148, 0x8000 }, + { 1149, 0x0280 }, { 1151, 0x2008 }, { 1153, 0x0a00 }, { 1155, 0x020e }, + { 1159, 0x0040 }, { 1160, 0x0001 }, { 1161, 0x0200 }, { 1162, 0x1611 }, + { 1167, 0x0002 }, { 1168, 0x4180 }, { 1171, 0x1400 }, { 1173, 0x0823 }, + /* 0x5600 */ + { 1177, 0x0020 }, { 1178, 0x4002 }, { 1180, 0x202f }, { 1186, 0x0080 }, + { 1187, 0xa008 }, { 1190, 0x2015 }, { 1194, 0x0002 }, { 1195, 0x1c00 }, + { 1198, 0x0e00 }, { 1201, 0xc004 }, { 1204, 0x8012 }, { 1207, 0x8202 }, + { 1210, 0x0000 }, { 1210, 0x0040 }, { 1211, 0xa004 }, { 1214, 0x2002 }, + /* 0x5700 */ + { 1216, 0x0001 }, { 1217, 0x2020 }, { 1219, 0x0000 }, { 1219, 0x8004 }, + { 1221, 0x004c }, { 1224, 0x8890 }, { 1228, 0x0080 }, { 1229, 0xc400 }, + { 1232, 0x2500 }, { 1235, 0x1001 }, { 1237, 0x0482 }, { 1240, 0x4810 }, + { 1243, 0x0110 }, { 1245, 0x6080 }, { 1248, 0x8040 }, { 1250, 0x4000 }, + /* 0x5800 */ + { 1251, 0x0008 }, { 1252, 0x0004 }, { 1253, 0x0044 }, { 1255, 0x0400 }, + { 1256, 0x0091 }, { 1259, 0x9000 }, { 1261, 0x1200 }, { 1263, 0x000c }, + { 1265, 0x0000 }, { 1265, 0x0600 }, { 1267, 0x0480 }, { 1269, 0x0861 }, + { 1273, 0x0800 }, { 1274, 0x1000 }, { 1275, 0x0001 }, { 1276, 0x080d }, + /* 0x5900 */ + { 1280, 0x04b4 }, { 1285, 0x8002 }, { 1287, 0x0000 }, { 1287, 0x0014 }, + { 1289, 0x0000 }, { 1289, 0x0000 }, { 1289, 0x0020 }, { 1290, 0x0020 }, + { 1291, 0x0200 }, { 1292, 0x8410 }, { 1295, 0x1000 }, { 1296, 0x0181 }, + { 1299, 0x0210 }, { 1301, 0x0200 }, { 1302, 0x8800 }, { 1304, 0x0301 }, + /* 0x5a00 */ + { 1307, 0x2804 }, { 1310, 0x0004 }, { 1311, 0x1c92 }, { 1317, 0x2000 }, + { 1318, 0x0020 }, { 1319, 0x0210 }, { 1321, 0x490a }, { 1326, 0x4202 }, + { 1329, 0x0146 }, { 1333, 0x0242 }, { 1336, 0x0803 }, { 1339, 0x0000 }, + { 1339, 0xc008 }, { 1342, 0x0008 }, { 1343, 0x0010 }, { 1344, 0x4405 }, + /* 0x5b00 */ + { 1348, 0x2000 }, { 1349, 0x8002 }, { 1351, 0x0800 }, { 1352, 0x0000 }, + { 1352, 0x8452 }, { 1357, 0x0000 }, { 1357, 0x2140 }, { 1360, 0x1050 }, + { 1363, 0x0005 }, { 1365, 0xe001 }, { 1369, 0x0400 }, { 1370, 0x0000 }, + { 1370, 0x0008 }, { 1371, 0x00a0 }, { 1373, 0x0000 }, { 1373, 0x8008 }, + /* 0x5c00 */ + { 1375, 0x0020 }, { 1376, 0x5018 }, { 1380, 0x0009 }, { 1382, 0x0000 }, + { 1382, 0x0600 }, { 1384, 0x4008 }, { 1386, 0x0000 }, { 1386, 0x0000 }, + { 1386, 0x0020 }, { 1387, 0x5600 }, { 1391, 0x0000 }, { 1391, 0x0400 }, + { 1392, 0x0006 }, { 1394, 0x0002 }, { 1395, 0x8220 }, { 1398, 0x0000 }, + /* 0x5d00 */ + { 1398, 0x0000 }, { 1398, 0x0121 }, { 1401, 0x9000 }, { 1403, 0x4000 }, + { 1404, 0x0140 }, { 1406, 0x08c0 }, { 1409, 0x0000 }, { 1409, 0x0011 }, + { 1411, 0x4820 }, { 1414, 0x0000 }, { 1414, 0x0810 }, { 1416, 0x0240 }, + { 1418, 0x0002 }, { 1419, 0x0880 }, { 1421, 0x0000 }, { 1421, 0x0020 }, + /* 0x5e00 */ + { 1422, 0x0a00 }, { 1424, 0x0004 }, { 1425, 0x4000 }, { 1426, 0x0000 }, + { 1426, 0x0104 }, { 1428, 0x4000 }, { 1429, 0x0000 }, { 1429, 0x8400 }, + { 1431, 0x0048 }, { 1433, 0x0000 }, { 1433, 0x0000 }, { 1433, 0x2000 }, + { 1434, 0x2000 }, { 1435, 0x0001 }, { 1436, 0x0000 }, { 1436, 0x1b10 }, + /* 0x5f00 */ + { 1441, 0x7000 }, { 1444, 0x0000 }, { 1444, 0x0020 }, { 1445, 0x0400 }, + { 1446, 0x2000 }, { 1447, 0x1003 }, { 1450, 0x000a }, { 1452, 0x0804 }, + { 1454, 0x0008 }, { 1455, 0x0000 }, { 1455, 0x0090 }, { 1457, 0x0402 }, + { 1459, 0x0010 }, { 1460, 0x8800 }, { 1462, 0x0000 }, { 1462, 0x0000 }, + /* 0x6000 */ + { 1462, 0x0000 }, { 1462, 0x0000 }, { 1462, 0x0008 }, { 1463, 0x0802 }, + { 1465, 0x0400 }, { 1466, 0x0004 }, { 1467, 0x0000 }, { 1467, 0x40a0 }, + { 1470, 0x0000 }, { 1470, 0x4000 }, { 1471, 0x0090 }, { 1473, 0x0008 }, + { 1474, 0x0000 }, { 1474, 0x4080 }, { 1476, 0x0388 }, { 1480, 0x2000 }, + /* 0x6100 */ + { 1481, 0x1080 }, { 1483, 0x0200 }, { 1484, 0x0000 }, { 1484, 0x2001 }, + { 1486, 0x0004 }, { 1487, 0x1201 }, { 1490, 0x8011 }, { 1493, 0x2000 }, + { 1494, 0x0082 }, { 1496, 0x1320 }, { 1500, 0x0000 }, { 1500, 0x0280 }, + { 1502, 0x8001 }, { 1504, 0x0409 }, { 1507, 0x0004 }, { 1508, 0x0000 }, + /* 0x6200 */ + { 1508, 0x0000 }, { 1508, 0x0000 }, { 1508, 0x1000 }, { 1509, 0x0280 }, + { 1511, 0x1000 }, { 1512, 0x0000 }, { 1512, 0x0100 }, { 1513, 0x0000 }, + { 1513, 0x0024 }, { 1515, 0x2001 }, { 1517, 0x0050 }, { 1519, 0x0000 }, + { 1519, 0x0028 }, { 1521, 0x8020 }, { 1523, 0x0020 }, { 1524, 0x0000 }, + /* 0x6300 */ + { 1524, 0x0000 }, { 1524, 0x0100 }, { 1525, 0x4000 }, { 1526, 0x00a2 }, + { 1529, 0x0000 }, { 1529, 0x0000 }, { 1529, 0x1010 }, { 1531, 0x8200 }, + { 1533, 0x0800 }, { 1534, 0x0000 }, { 1534, 0x0000 }, { 1534, 0x0200 }, + { 1535, 0x0002 }, { 1536, 0x4002 }, { 1538, 0x0044 }, { 1540, 0x5900 }, + /* 0x6400 */ + { 1544, 0x0080 }, { 1545, 0x0000 }, { 1545, 0x0000 }, { 1545, 0x0d04 }, + { 1549, 0x0000 }, { 1549, 0x0400 }, { 1550, 0x0000 }, { 1550, 0x1002 }, + { 1552, 0x2000 }, { 1553, 0x0002 }, { 1554, 0x8000 }, { 1555, 0x0050 }, + { 1557, 0x0001 }, { 1558, 0x2008 }, { 1560, 0x04a2 }, { 1564, 0x0000 }, + /* 0x6500 */ + { 1564, 0x0400 }, { 1565, 0xc002 }, { 1568, 0x0000 }, { 1568, 0x0031 }, + { 1571, 0x2000 }, { 1572, 0x8000 }, { 1573, 0x2800 }, { 1575, 0x0000 }, + { 1575, 0x0360 }, { 1579, 0x0000 }, { 1579, 0x0000 }, { 1579, 0x4020 }, + { 1581, 0x0000 }, { 1581, 0x0012 }, { 1583, 0x0009 }, { 1585, 0x8000 }, + /* 0x6600 */ + { 1586, 0x0000 }, { 1586, 0x4100 }, { 1588, 0x0008 }, { 1589, 0x0001 }, + { 1590, 0x0910 }, { 1593, 0x0088 }, { 1595, 0x0888 }, { 1598, 0x2008 }, + { 1600, 0x4020 }, { 1602, 0x0404 }, { 1604, 0x2010 }, { 1606, 0x8048 }, + { 1609, 0x6000 }, { 1611, 0x0000 }, { 1611, 0x0000 }, { 1611, 0x0002 }, + /* 0x6700 */ + { 1612, 0x5004 }, { 1615, 0x4040 }, { 1617, 0x0020 }, { 1618, 0x0040 }, + { 1619, 0x0010 }, { 1620, 0x0000 }, { 1620, 0x0086 }, { 1623, 0x0000 }, + { 1623, 0x8000 }, { 1624, 0x0000 }, { 1624, 0x1011 }, { 1627, 0x8002 }, + { 1629, 0x0000 }, { 1629, 0x00c0 }, { 1631, 0x0000 }, { 1631, 0x4200 }, + /* 0x6800 */ + { 1633, 0x201f }, { 1639, 0x4801 }, { 1642, 0x0004 }, { 1643, 0x40c0 }, + { 1646, 0x0480 }, { 1648, 0x2060 }, { 1651, 0x0020 }, { 1652, 0x0000 }, + { 1652, 0x0110 }, { 1654, 0x0100 }, { 1655, 0x0040 }, { 1656, 0x2240 }, + { 1659, 0x0428 }, { 1662, 0x0000 }, { 1662, 0x0000 }, { 1662, 0x0000 }, + /* 0x6900 */ + { 1662, 0x020f }, { 1667, 0x0d00 }, { 1670, 0x1000 }, { 1671, 0x4040 }, + { 1673, 0x0048 }, { 1675, 0x0020 }, { 1676, 0x0092 }, { 1679, 0x000c }, + { 1681, 0x0421 }, { 1684, 0x8100 }, { 1686, 0x0004 }, { 1687, 0x0004 }, + { 1688, 0x0001 }, { 1689, 0x0062 }, { 1692, 0x0202 }, { 1694, 0x0600 }, + /* 0x6a00 */ + { 1696, 0x1808 }, { 1699, 0x1400 }, { 1701, 0x3800 }, { 1704, 0x0008 }, + { 1705, 0x1020 }, { 1707, 0x008c }, { 1710, 0x0020 }, { 1711, 0x0412 }, + { 1714, 0x8404 }, { 1717, 0x2200 }, { 1719, 0x0880 }, { 1721, 0x4026 }, + { 1725, 0x0700 }, { 1728, 0x0110 }, { 1730, 0x0000 }, { 1730, 0x0040 }, + /* 0x6b00 */ + { 1731, 0x0020 }, { 1732, 0x2000 }, { 1733, 0x0000 }, { 1733, 0x0020 }, + { 1734, 0x0000 }, { 1734, 0x0084 }, { 1736, 0x8000 }, { 1737, 0x0410 }, + { 1739, 0x0002 }, { 1740, 0x0000 }, { 1740, 0x0000 }, { 1740, 0x0000 }, + { 1740, 0x0002 }, { 1741, 0x1000 }, { 1742, 0x0402 }, { 1744, 0x0400 }, + /* 0x6c00 */ + { 1745, 0x0000 }, { 1745, 0x1000 }, { 1746, 0x0000 }, { 1746, 0x26a2 }, + { 1752, 0x0200 }, { 1753, 0x0500 }, { 1755, 0x4000 }, { 1756, 0x8220 }, + { 1759, 0x0000 }, { 1759, 0x8000 }, { 1760, 0x8404 }, { 1763, 0x0004 }, + { 1764, 0x4800 }, { 1766, 0x8000 }, { 1767, 0x0400 }, { 1768, 0x0000 }, + /* 0x6d00 */ + { 1768, 0x0064 }, { 1771, 0x0000 }, { 1771, 0x0050 }, { 1773, 0x0000 }, + { 1773, 0x4000 }, { 1774, 0x1880 }, { 1777, 0x0000 }, { 1777, 0x0006 }, + { 1779, 0x8002 }, { 1781, 0x0040 }, { 1782, 0x0030 }, { 1784, 0x0202 }, + { 1786, 0x0000 }, { 1786, 0x0000 }, { 1786, 0x0000 }, { 1786, 0x0000 }, + /* 0x6e00 */ + { 1786, 0x8414 }, { 1790, 0x0120 }, { 1792, 0x0600 }, { 1794, 0x0000 }, + { 1794, 0x8000 }, { 1795, 0x0201 }, { 1797, 0x0000 }, { 1797, 0x1040 }, + { 1799, 0x0840 }, { 1801, 0x0400 }, { 1802, 0x0000 }, { 1802, 0x0920 }, + { 1805, 0x0000 }, { 1805, 0x2e00 }, { 1809, 0x0304 }, { 1812, 0x0400 }, + /* 0x6f00 */ + { 1813, 0x1810 }, { 1816, 0x00c0 }, { 1818, 0x0010 }, { 1819, 0x2010 }, + { 1821, 0x0010 }, { 1822, 0x1040 }, { 1824, 0x0000 }, { 1824, 0x0210 }, + { 1826, 0x0402 }, { 1828, 0xa000 }, { 1830, 0x0000 }, { 1830, 0x4820 }, + { 1833, 0x0000 }, { 1833, 0x0608 }, { 1836, 0x0000 }, { 1836, 0x0140 }, + /* 0x7000 */ + { 1838, 0x0008 }, { 1839, 0x4000 }, { 1840, 0x1000 }, { 1841, 0x0000 }, + { 1841, 0x0800 }, { 1842, 0x1011 }, { 1845, 0x9080 }, { 1848, 0xc220 }, + { 1852, 0x8a02 }, { 1856, 0x0000 }, { 1856, 0x00e9 }, { 1861, 0x3a00 }, + { 1865, 0x1011 }, { 1868, 0x8061 }, { 1872, 0x0000 }, { 1872, 0x4022 }, + /* 0x7100 */ + { 1875, 0x0020 }, { 1876, 0x2000 }, { 1877, 0x1a00 }, { 1880, 0x4838 }, + { 1885, 0x8421 }, { 1889, 0x0002 }, { 1890, 0x0800 }, { 1891, 0x54ea }, + { 1899, 0x5100 }, { 1902, 0x0140 }, { 1904, 0x200c }, { 1907, 0x0490 }, + { 1910, 0x0000 }, { 1910, 0x2002 }, { 1912, 0x0800 }, { 1913, 0x0060 }, + /* 0x7200 */ + { 1915, 0xc200 }, { 1918, 0x00e0 }, { 1921, 0x4810 }, { 1924, 0x0000 }, + { 1924, 0x0001 }, { 1925, 0x10a1 }, { 1929, 0x0040 }, { 1930, 0x0000 }, + { 1930, 0x8084 }, { 1933, 0x8010 }, { 1935, 0x2000 }, { 1936, 0x0004 }, + { 1937, 0x2000 }, { 1938, 0x0000 }, { 1938, 0x0004 }, { 1939, 0x0000 }, + /* 0x7300 */ + { 1939, 0x0014 }, { 1941, 0x0001 }, { 1942, 0x5d00 }, { 1947, 0x0300 }, + { 1949, 0x8102 }, { 1952, 0x0000 }, { 1952, 0x0000 }, { 1952, 0x0012 }, + { 1954, 0x8000 }, { 1955, 0x5100 }, { 1958, 0x0480 }, { 1960, 0x0000 }, + { 1960, 0xc200 }, { 1963, 0x0021 }, { 1965, 0x8056 }, { 1970, 0x0a88 }, + /* 0x7400 */ + { 1974, 0x0000 }, { 1974, 0xd2b6 }, { 1983, 0x0000 }, { 1983, 0x1380 }, + { 1987, 0x03a8 }, { 1992, 0x2048 }, { 1995, 0x1921 }, { 2000, 0x0450 }, + { 2003, 0x3004 }, { 2006, 0x0a00 }, { 2008, 0x0010 }, { 2009, 0x0010 }, + { 2010, 0x1100 }, { 2012, 0x0009 }, { 2014, 0x0080 }, { 2015, 0x0107 }, + /* 0x7500 */ + { 2019, 0x4020 }, { 2021, 0x4200 }, { 2023, 0x0000 }, { 2023, 0x0830 }, + { 2026, 0x2444 }, { 2030, 0x002a }, { 2033, 0x6081 }, { 2037, 0x0404 }, + { 2039, 0x6008 }, { 2042, 0x4004 }, { 2044, 0x0000 }, { 2044, 0x0012 }, + { 2046, 0x0108 }, { 2048, 0x1000 }, { 2049, 0x0000 }, { 2049, 0x0000 }, + /* 0x7600 */ + { 2049, 0x0084 }, { 2051, 0x0000 }, { 2051, 0x1000 }, { 2052, 0x0800 }, + { 2053, 0xe001 }, { 2057, 0x0012 }, { 2059, 0x80c0 }, { 2062, 0x0458 }, + { 2066, 0x0000 }, { 2066, 0x0001 }, { 2067, 0x0022 }, { 2069, 0x0080 }, + { 2070, 0x1000 }, { 2071, 0x0040 }, { 2072, 0x0000 }, { 2072, 0x0000 }, + /* 0x7700 */ + { 2072, 0xd000 }, { 2075, 0x4000 }, { 2076, 0x0850 }, { 2079, 0x0000 }, + { 2079, 0x0009 }, { 2081, 0x0100 }, { 2082, 0x0000 }, { 2082, 0x0d84 }, + { 2087, 0x0000 }, { 2087, 0x0108 }, { 2089, 0x8000 }, { 2090, 0x4200 }, + { 2092, 0x0828 }, { 2095, 0x0000 }, { 2095, 0x0040 }, { 2096, 0x4010 }, + /* 0x7800 */ + { 2098, 0x0100 }, { 2099, 0x5100 }, { 2102, 0x0000 }, { 2102, 0x3200 }, + { 2105, 0x0894 }, { 2109, 0x001a }, { 2112, 0x0040 }, { 2113, 0x0400 }, + { 2114, 0x2102 }, { 2117, 0x0000 }, { 2117, 0x8000 }, { 2118, 0x0342 }, + { 2122, 0x0080 }, { 2123, 0x018c }, { 2127, 0x4000 }, { 2128, 0x0023 }, + /* 0x7900 */ + { 2131, 0x0040 }, { 2132, 0x0000 }, { 2132, 0x4000 }, { 2133, 0x185c }, + { 2139, 0x0000 }, { 2139, 0x0300 }, { 2141, 0x0004 }, { 2142, 0x4002 }, + { 2144, 0x00c9 }, { 2148, 0xa202 }, { 2152, 0x0220 }, { 2154, 0x0000 }, + { 2154, 0x1050 }, { 2157, 0x0010 }, { 2158, 0x0004 }, { 2159, 0x0012 }, + /* 0x7a00 */ + { 2161, 0x0040 }, { 2162, 0x0000 }, { 2162, 0x2000 }, { 2163, 0x4400 }, + { 2165, 0x0228 }, { 2168, 0x0000 }, { 2168, 0x0020 }, { 2169, 0x2000 }, + { 2170, 0x0008 }, { 2171, 0x0002 }, { 2172, 0x0000 }, { 2172, 0x1801 }, + { 2175, 0x830c }, { 2180, 0x3c08 }, { 2185, 0x0684 }, { 2189, 0x4000 }, + /* 0x7b00 */ + { 2190, 0x1800 }, { 2192, 0x8010 }, { 2194, 0x0280 }, { 2196, 0x0200 }, + { 2197, 0x000c }, { 2199, 0x0020 }, { 2200, 0x9004 }, { 2203, 0x0800 }, + { 2204, 0x0000 }, { 2204, 0x0004 }, { 2205, 0x000c }, { 2207, 0x0004 }, + { 2208, 0x8000 }, { 2209, 0x0001 }, { 2210, 0x0000 }, { 2210, 0x1400 }, + /* 0x7c00 */ + { 2212, 0x0000 }, { 2212, 0x0824 }, { 2215, 0x0000 }, { 2215, 0x0020 }, + { 2216, 0x0014 }, { 2218, 0x2042 }, { 2221, 0x2000 }, { 2222, 0x5811 }, + { 2227, 0x4048 }, { 2230, 0x1000 }, { 2231, 0x50c0 }, { 2235, 0x0100 }, + { 2236, 0x2284 }, { 2240, 0x0408 }, { 2242, 0x2040 }, { 2244, 0x1228 }, + /* 0x7d00 */ + { 2248, 0x0000 }, { 2248, 0x0000 }, { 2248, 0x0020 }, { 2249, 0x0000 }, + { 2249, 0x2000 }, { 2250, 0x2400 }, { 2252, 0x0000 }, { 2252, 0x0000 }, + { 2252, 0x0200 }, { 2253, 0x0080 }, { 2254, 0x0910 }, { 2257, 0x0008 }, + { 2258, 0xa000 }, { 2260, 0x1019 }, { 2264, 0x0030 }, { 2266, 0x6020 }, + /* 0x7e00 */ + { 2269, 0x0080 }, { 2270, 0x0000 }, { 2270, 0x0080 }, { 2271, 0x0000 }, + { 2271, 0x0000 }, { 2271, 0x0000 }, { 2271, 0x40a0 }, { 2274, 0x8000 }, + { 2275, 0x4000 }, { 2276, 0x8004 }, { 2278, 0x1010 }, { 2280, 0x0400 }, + { 2281, 0x8080 }, { 2283, 0x8000 }, { 2284, 0x0000 }, { 2284, 0x0000 }, + /* 0x7f00 */ + { 2284, 0x0040 }, { 2285, 0x0000 }, { 2285, 0x0000 }, { 2285, 0x0080 }, + { 2286, 0x4283 }, { 2291, 0x000c }, { 2293, 0x0000 }, { 2293, 0x0102 }, + { 2295, 0x8000 }, { 2296, 0x0088 }, { 2298, 0x4008 }, { 2300, 0x0010 }, + { 2301, 0x0000 }, { 2301, 0x2000 }, { 2302, 0x0080 }, { 2303, 0x0400 }, + /* 0x8000 */ + { 2304, 0x0104 }, { 2306, 0x2000 }, { 2307, 0xc021 }, { 2311, 0x1802 }, + { 2314, 0x0000 }, { 2314, 0x0810 }, { 2316, 0x004e }, { 2320, 0x0000 }, + { 2320, 0x0001 }, { 2321, 0x8000 }, { 2322, 0x0080 }, { 2323, 0x30c0 }, + { 2327, 0x0040 }, { 2328, 0x0000 }, { 2328, 0x1200 }, { 2330, 0x0040 }, + /* 0x8100 */ + { 2331, 0x5288 }, { 2336, 0x0494 }, { 2340, 0x0400 }, { 2341, 0x0094 }, + { 2344, 0x0104 }, { 2346, 0x0640 }, { 2349, 0x2000 }, { 2350, 0x1000 }, + { 2351, 0x0010 }, { 2352, 0x0008 }, { 2353, 0x0420 }, { 2355, 0x0040 }, + { 2356, 0x0102 }, { 2358, 0x0000 }, { 2358, 0x8010 }, { 2360, 0x0040 }, + /* 0x8200 */ + { 2361, 0x0000 }, { 2361, 0x0500 }, { 2363, 0x2240 }, { 2366, 0x4000 }, + { 2367, 0x0000 }, { 2367, 0x0010 }, { 2368, 0x0024 }, { 2370, 0x0e40 }, + { 2374, 0x0080 }, { 2375, 0x0000 }, { 2375, 0x0440 }, { 2377, 0x0000 }, + { 2377, 0x8410 }, { 2380, 0x0101 }, { 2382, 0x4004 }, { 2384, 0xb080 }, + /* 0x8300 */ + { 2388, 0x0800 }, { 2389, 0x2500 }, { 2392, 0x0000 }, { 2392, 0x2000 }, + { 2393, 0x0000 }, { 2393, 0x0080 }, { 2394, 0x804c }, { 2398, 0x0000 }, + { 2398, 0x0020 }, { 2399, 0x1002 }, { 2401, 0x1000 }, { 2402, 0x4200 }, + { 2404, 0x2000 }, { 2405, 0x0008 }, { 2406, 0x2000 }, { 2407, 0x0000 }, + /* 0x8400 */ + { 2407, 0x0020 }, { 2408, 0x1150 }, { 2412, 0x4053 }, { 2417, 0x4000 }, + { 2418, 0x0500 }, { 2420, 0x1128 }, { 2424, 0x0014 }, { 2426, 0x8006 }, + { 2429, 0x0101 }, { 2431, 0x004c }, { 2434, 0x2008 }, { 2436, 0x6000 }, + { 2438, 0x0000 }, { 2438, 0x4400 }, { 2440, 0x0036 }, { 2444, 0x0100 }, + /* 0x8500 */ + { 2445, 0x0028 }, { 2447, 0x0001 }, { 2448, 0x0000 }, { 2448, 0x0118 }, + { 2451, 0x1804 }, { 2454, 0x0404 }, { 2456, 0x8000 }, { 2457, 0x0009 }, + { 2459, 0x0000 }, { 2459, 0x0000 }, { 2459, 0x0000 }, { 2459, 0x0000 }, + { 2459, 0x0002 }, { 2460, 0x0000 }, { 2460, 0x4001 }, { 2462, 0x1000 }, + /* 0x8600 */ + { 2463, 0x2004 }, { 2465, 0x0051 }, { 2468, 0x8100 }, { 2470, 0x0000 }, + { 2470, 0x0024 }, { 2472, 0x0000 }, { 2472, 0x1000 }, { 2473, 0x4004 }, + { 2475, 0x0000 }, { 2475, 0x0004 }, { 2476, 0x2001 }, { 2478, 0x0004 }, + { 2479, 0x0000 }, { 2479, 0x0000 }, { 2479, 0x8000 }, { 2480, 0x0000 }, + /* 0x8700 */ + { 2480, 0x0000 }, { 2480, 0x0000 }, { 2480, 0x0000 }, { 2480, 0x0000 }, + { 2480, 0x0000 }, { 2480, 0x0000 }, { 2480, 0x0000 }, { 2480, 0x2003 }, + { 2483, 0x1840 }, { 2486, 0x0000 }, { 2486, 0x0220 }, { 2488, 0x0002 }, + { 2489, 0x4002 }, { 2491, 0x0440 }, { 2493, 0x4000 }, { 2494, 0x0020 }, + /* 0x8800 */ + { 2495, 0x8010 }, { 2497, 0x0100 }, { 2498, 0x2080 }, { 2500, 0x0000 }, + { 2500, 0x8064 }, { 2504, 0x4000 }, { 2505, 0x4031 }, { 2509, 0x0000 }, + { 2509, 0x0090 }, { 2511, 0x1000 }, { 2512, 0x4001 }, { 2514, 0x8030 }, + { 2517, 0x80a0 }, { 2520, 0x0000 }, { 2520, 0x0040 }, { 2521, 0x8020 }, + /* 0x8900 */ + { 2523, 0x0001 }, { 2524, 0x0000 }, { 2524, 0x0010 }, { 2525, 0x0000 }, + { 2525, 0x2088 }, { 2528, 0x0010 }, { 2529, 0x0020 }, { 2530, 0x0080 }, + { 2531, 0x0681 }, { 2535, 0x0012 }, { 2537, 0x02a0 }, { 2540, 0x1000 }, + { 2541, 0x0042 }, { 2543, 0x0000 }, { 2543, 0x0080 }, { 2544, 0x0000 }, + /* 0x8a00 */ + { 2544, 0x0000 }, { 2544, 0x1000 }, { 2545, 0x0a00 }, { 2547, 0x2100 }, + { 2549, 0x0200 }, { 2550, 0x0000 }, { 2550, 0x0080 }, { 2551, 0x4000 }, + { 2552, 0x0000 }, { 2552, 0x1011 }, { 2555, 0x8200 }, { 2557, 0x0010 }, + { 2558, 0x0000 }, { 2558, 0x0400 }, { 2559, 0x0400 }, { 2560, 0x0000 }, + /* 0x8b00 */ + { 2560, 0x1000 }, { 2561, 0x8000 }, { 2562, 0x2000 }, { 2563, 0x8000 }, + { 2564, 0x3008 }, { 2567, 0x4000 }, { 2568, 0x0204 }, { 2570, 0x0000 }, + { 2570, 0x0002 }, { 2571, 0x0801 }, { 2573, 0x0001 }, { 2574, 0x4000 }, + { 2575, 0x0000 }, { 2575, 0x0000 }, { 2575, 0x0004 }, { 2576, 0x0000 }, + /* 0x8c00 */ + { 2576, 0x0000 }, { 2576, 0x0000 }, { 2576, 0x0000 }, { 2576, 0x0000 }, + { 2576, 0x0000 }, { 2576, 0x0002 }, { 2577, 0x0000 }, { 2577, 0x0000 }, + { 2577, 0x0000 }, { 2577, 0x8800 }, { 2579, 0x2000 }, { 2580, 0x0000 }, + { 2580, 0x2000 }, { 2581, 0x0850 }, { 2584, 0x0a00 }, { 2586, 0x0084 }, + /* 0x8d00 */ + { 2588, 0x1808 }, { 2591, 0x3106 }, { 2596, 0x0000 }, { 2596, 0x0000 }, + { 2596, 0x0000 }, { 2596, 0x0000 }, { 2596, 0x0000 }, { 2596, 0x0400 }, + { 2597, 0x0004 }, { 2598, 0x0000 }, { 2598, 0x0240 }, { 2600, 0x0000 }, + { 2600, 0x0009 }, { 2602, 0x0010 }, { 2603, 0x0000 }, { 2603, 0x0000 }, + /* 0x8e00 */ + { 2603, 0x4002 }, { 2605, 0x0000 }, { 2605, 0x2500 }, { 2608, 0x0400 }, + { 2609, 0x8040 }, { 2611, 0x0000 }, { 2611, 0x0100 }, { 2612, 0x40a2 }, + { 2616, 0x0001 }, { 2617, 0x0000 }, { 2617, 0x2080 }, { 2619, 0x1041 }, + { 2622, 0x4008 }, { 2624, 0x0400 }, { 2625, 0x2014 }, { 2628, 0x0004 }, + /* 0x8f00 */ + { 2629, 0x0000 }, { 2629, 0x0200 }, { 2630, 0x2000 }, { 2631, 0x0001 }, + { 2632, 0x0402 }, { 2634, 0x1000 }, { 2635, 0x40c0 }, { 2638, 0x0000 }, + { 2638, 0x0000 }, { 2638, 0x0008 }, { 2639, 0x0021 }, { 2641, 0x5fe8 }, + { 2651, 0x1402 }, { 2654, 0x0401 }, { 2656, 0x0000 }, { 2656, 0x0200 }, + /* 0x9000 */ + { 2657, 0x0100 }, { 2658, 0x0004 }, { 2659, 0x0000 }, { 2659, 0x0088 }, + { 2661, 0x1000 }, { 2662, 0x0040 }, { 2663, 0x1012 }, { 2666, 0x0000 }, + { 2666, 0x0000 }, { 2666, 0x0000 }, { 2666, 0x4100 }, { 2668, 0x0800 }, + { 2669, 0x0010 }, { 2670, 0x0000 }, { 2670, 0x0000 }, { 2670, 0x0000 }, + /* 0x9100 */ + { 2670, 0x0000 }, { 2670, 0x0000 }, { 2670, 0x0000 }, { 2670, 0x0000 }, + { 2670, 0x0000 }, { 2670, 0x5202 }, { 2674, 0x0080 }, { 2675, 0x1041 }, + { 2678, 0x5000 }, { 2680, 0x0000 }, { 2680, 0x0200 }, { 2681, 0x0840 }, + { 2683, 0x0010 }, { 2684, 0x8040 }, { 2686, 0x0020 }, { 2687, 0x4400 }, + /* 0x9200 */ + { 2689, 0x4100 }, { 2691, 0x0008 }, { 2692, 0x0d00 }, { 2695, 0x1020 }, + { 2697, 0x0012 }, { 2699, 0xa120 }, { 2703, 0x4804 }, { 2706, 0x0080 }, + { 2707, 0x8212 }, { 2711, 0x0000 }, { 2711, 0x4000 }, { 2712, 0xc602 }, + { 2717, 0x0000 }, { 2717, 0x0810 }, { 2719, 0x1828 }, { 2723, 0x205c }, + /* 0x9300 */ + { 2728, 0x0088 }, { 2730, 0x0000 }, { 2730, 0x1000 }, { 2731, 0x0003 }, + { 2733, 0x013f }, { 2740, 0x8000 }, { 2741, 0x4b44 }, { 2747, 0x2118 }, + { 2751, 0x00f2 }, { 2756, 0x1001 }, { 2758, 0x2001 }, { 2760, 0xa900 }, + { 2764, 0x0840 }, { 2766, 0x0808 }, { 2768, 0x0001 }, { 2769, 0x000b }, + /* 0x9400 */ + { 2772, 0x0112 }, { 2775, 0x2880 }, { 2778, 0x20f0 }, { 2783, 0x4000 }, + { 2784, 0x200c }, { 2787, 0x0910 }, { 2790, 0x10a0 }, { 2793, 0x0a00 }, + { 2795, 0x0020 }, { 2796, 0x8000 }, { 2797, 0x0004 }, { 2798, 0x0000 }, + { 2798, 0x000a }, { 2800, 0x1000 }, { 2801, 0x0000 }, { 2801, 0x0040 }, + /* 0x9500 */ + { 2802, 0x0000 }, { 2802, 0x0000 }, { 2802, 0x2000 }, { 2803, 0x0000 }, + { 2803, 0x0080 }, { 2804, 0x0000 }, { 2804, 0x0000 }, { 2804, 0x8100 }, + { 2806, 0x0020 }, { 2807, 0x02c0 }, { 2810, 0x04c5 }, { 2815, 0x0000 }, + { 2815, 0x0000 }, { 2815, 0x0000 }, { 2815, 0x0100 }, { 2816, 0x0010 }, + /* 0x9600 */ + { 2817, 0x0000 }, { 2817, 0x2000 }, { 2818, 0x0000 }, { 2818, 0x0108 }, + { 2820, 0x0022 }, { 2822, 0x0040 }, { 2823, 0x0200 }, { 2824, 0x0800 }, + { 2825, 0x8002 }, { 2827, 0x0040 }, { 2828, 0x0028 }, { 2830, 0x2040 }, + { 2832, 0x0000 }, { 2832, 0x0000 }, { 2832, 0x0000 }, { 2832, 0x0010 }, + /* 0x9700 */ + { 2833, 0x0008 }, { 2834, 0x0800 }, { 2835, 0x0002 }, { 2836, 0x0042 }, + { 2838, 0x0003 }, { 2840, 0xa082 }, { 2844, 0x2000 }, { 2845, 0x0002 }, + { 2846, 0x0280 }, { 2848, 0x8800 }, { 2850, 0x0000 }, { 2850, 0x6516 }, + { 2857, 0x0105 }, { 2860, 0x0004 }, { 2861, 0x4041 }, { 2864, 0x0024 }, + /* 0x9800 */ + { 2866, 0x0000 }, { 2866, 0x8030 }, { 2869, 0x4008 }, { 2871, 0x0018 }, + { 2873, 0x0880 }, { 2875, 0x0000 }, { 2875, 0x1040 }, { 2877, 0x0020 }, + { 2878, 0x0000 }, { 2878, 0x0000 }, { 2878, 0x0000 }, { 2878, 0x0290 }, + { 2881, 0x4588 }, { 2886, 0x5000 }, { 2888, 0x1043 }, { 2892, 0x0022 }, + /* 0x9900 */ + { 2894, 0x4000 }, { 2895, 0x1200 }, { 2897, 0x0000 }, { 2897, 0x0b80 }, + { 2901, 0x2405 }, { 2905, 0x2000 }, { 2906, 0x000c }, { 2908, 0x0000 }, + { 2908, 0x0000 }, { 2908, 0x0800 }, { 2909, 0x0410 }, { 2911, 0x1100 }, + { 2913, 0x0030 }, { 2915, 0x0400 }, { 2916, 0x0042 }, { 2918, 0x0020 }, + /* 0x9a00 */ + { 2919, 0x1000 }, { 2920, 0x8001 }, { 2922, 0x8042 }, { 2925, 0x1800 }, + { 2927, 0x0000 }, { 2927, 0x1100 }, { 2929, 0x1008 }, { 2931, 0x0000 }, + { 2931, 0x8000 }, { 2932, 0x0000 }, { 2932, 0x0000 }, { 2932, 0x2444 }, + { 2936, 0x0000 }, { 2936, 0x0080 }, { 2937, 0x0005 }, { 2939, 0x8010 }, + /* 0x9b00 */ + { 2941, 0x8204 }, { 2944, 0x0010 }, { 2945, 0x2400 }, { 2947, 0x0210 }, + { 2949, 0x0001 }, { 2950, 0x0001 }, { 2951, 0x0200 }, { 2952, 0x8000 }, + { 2953, 0xe80a }, { 2959, 0xa080 }, { 2962, 0x0000 }, { 2962, 0x0001 }, + { 2963, 0x8000 }, { 2964, 0x2000 }, { 2965, 0x2200 }, { 2967, 0x8012 }, + /* 0x9c00 */ + { 2970, 0x1404 }, { 2973, 0x8821 }, { 2977, 0x8041 }, { 2980, 0x0420 }, + { 2982, 0x8020 }, { 2984, 0x2008 }, { 2986, 0x0000 }, { 2986, 0x1804 }, + { 2989, 0x0000 }, { 2989, 0x0000 }, { 2989, 0x0000 }, { 2989, 0x0000 }, + { 2989, 0x0000 }, { 2989, 0x0000 }, { 2989, 0x0000 }, { 2989, 0x0000 }, + /* 0x9d00 */ + { 2989, 0x1004 }, { 2991, 0x0040 }, { 2992, 0x0002 }, { 2993, 0x0210 }, + { 2995, 0x4210 }, { 2998, 0x4001 }, { 3000, 0x6000 }, { 3002, 0x5000 }, + { 3004, 0x0008 }, { 3005, 0x0008 }, { 3006, 0x0820 }, { 3008, 0x2000 }, + { 3009, 0x0211 }, { 3012, 0x0010 }, { 3013, 0x0000 }, { 3013, 0x1000 }, + /* 0x9e00 */ + { 3014, 0x5400 }, { 3017, 0x9100 }, { 3020, 0x0000 }, { 3020, 0x0000 }, + { 3020, 0x0000 }, { 3020, 0x0000 }, { 3020, 0x0000 }, { 3020, 0x0800 }, + { 3021, 0x0032 }, { 3024, 0x4161 }, { 3029, 0x9d44 }, { 3036, 0xa002 }, + { 3039, 0x00d2 }, { 3043, 0x0000 }, { 3043, 0x0004 }, { 3044, 0x4102 }, + /* 0x9f00 */ + { 3047, 0x0104 }, { 3049, 0x0080 }, { 3050, 0x00c0 }, { 3052, 0x0200 }, + { 3053, 0x0030 }, { 3055, 0x0409 }, { 3058, 0x0204 }, { 3060, 0x8000 }, + { 3061, 0x4000 }, { 3062, 0x8200 }, { 3064, 0x0020 }, { 3065, 0x0003 }, +}; +static const Summary16 hkscs1999_uni2indx_pagef9[1] = { + /* 0xf900 */ + { 3067, 0x0080 }, +}; +static const Summary16 hkscs1999_uni2indx_pageff[15] = { + /* 0xff00 */ + { 3068, 0x0084 }, { 3070, 0x0000 }, { 3070, 0x0000 }, { 3070, 0x2800 }, + { 3072, 0x0000 }, { 3072, 0x0000 }, { 3072, 0x0000 }, { 3072, 0x0000 }, + { 3072, 0x0000 }, { 3072, 0x0000 }, { 3072, 0x0000 }, { 3072, 0x0000 }, + { 3072, 0x0000 }, { 3072, 0x0000 }, { 3072, 0x2014 }, +}; +static const Summary16 hkscs1999_uni2indx_page200[2335] = { + /* 0x20000 */ + { 3075, 0x0000 }, { 3075, 0x0000 }, { 3075, 0x0002 }, { 3076, 0x4000 }, + { 3077, 0x4040 }, { 3079, 0x0000 }, { 3079, 0x0100 }, { 3080, 0x0000 }, + { 3080, 0x04c0 }, { 3083, 0x0010 }, { 3084, 0x0000 }, { 3084, 0x0000 }, + { 3084, 0x3c00 }, { 3088, 0x0002 }, { 3089, 0x4000 }, { 3090, 0x0000 }, + /* 0x20100 */ + { 3090, 0x5000 }, { 3092, 0x0100 }, { 3093, 0x0000 }, { 3093, 0x0000 }, + { 3093, 0x0000 }, { 3093, 0x0000 }, { 3093, 0x0000 }, { 3093, 0x0000 }, + { 3093, 0x0000 }, { 3093, 0x0000 }, { 3093, 0x0a00 }, { 3095, 0x0000 }, + { 3095, 0x0002 }, { 3096, 0x0010 }, { 3097, 0x0000 }, { 3097, 0x0004 }, + /* 0x20200 */ + { 3098, 0x1010 }, { 3100, 0x0010 }, { 3101, 0x0000 }, { 3101, 0x0000 }, + { 3101, 0x0000 }, { 3101, 0x0800 }, { 3102, 0x0000 }, { 3102, 0x0030 }, + { 3104, 0x0000 }, { 3104, 0x4200 }, { 3106, 0x0001 }, { 3107, 0x8080 }, + { 3109, 0x0001 }, { 3110, 0x0000 }, { 3110, 0x0020 }, { 3111, 0x0000 }, + /* 0x20300 */ + { 3111, 0x0400 }, { 3112, 0x0000 }, { 3112, 0x0020 }, { 3113, 0x0000 }, + { 3113, 0x00e2 }, { 3117, 0x0000 }, { 3117, 0x0000 }, { 3117, 0xc000 }, + { 3119, 0x0001 }, { 3120, 0x0000 }, { 3120, 0x0081 }, { 3122, 0x0020 }, + { 3123, 0x0a00 }, { 3125, 0x0000 }, { 3125, 0x0000 }, { 3125, 0x1020 }, + /* 0x20400 */ + { 3127, 0x0000 }, { 3127, 0x8018 }, { 3130, 0x0000 }, { 3130, 0x0000 }, + { 3130, 0x0000 }, { 3130, 0x0000 }, { 3130, 0x0020 }, { 3131, 0x0000 }, + { 3131, 0x4080 }, { 3133, 0x0006 }, { 3135, 0x0008 }, { 3136, 0x0000 }, + { 3136, 0x0000 }, { 3136, 0x0080 }, { 3137, 0x0000 }, { 3137, 0x5000 }, + /* 0x20500 */ + { 3139, 0x0000 }, { 3139, 0x0000 }, { 3139, 0x0000 }, { 3139, 0x0000 }, + { 3139, 0x0080 }, { 3140, 0x0000 }, { 3140, 0x0000 }, { 3140, 0x0000 }, + { 3140, 0x4000 }, { 3141, 0x0000 }, { 3141, 0x0020 }, { 3142, 0x0008 }, + { 3143, 0x0408 }, { 3145, 0x8021 }, { 3148, 0x0801 }, { 3150, 0x0000 }, + /* 0x20600 */ + { 3150, 0x0000 }, { 3150, 0x0622 }, { 3154, 0x0000 }, { 3154, 0x0001 }, + { 3155, 0x0000 }, { 3155, 0x0040 }, { 3156, 0x0000 }, { 3156, 0x0040 }, + { 3157, 0x0000 }, { 3157, 0x0000 }, { 3157, 0x0000 }, { 3157, 0x0000 }, + { 3157, 0x0000 }, { 3157, 0x0000 }, { 3157, 0x0000 }, { 3157, 0x0000 }, + /* 0x20700 */ + { 3157, 0x4000 }, { 3158, 0x0000 }, { 3158, 0x0000 }, { 3158, 0x0002 }, + { 3159, 0x0000 }, { 3159, 0x0000 }, { 3159, 0x0000 }, { 3159, 0x0200 }, + { 3160, 0x0000 }, { 3160, 0x0000 }, { 3160, 0x0000 }, { 3160, 0x0000 }, + { 3160, 0x0000 }, { 3160, 0x0000 }, { 3160, 0x0000 }, { 3160, 0x0000 }, + /* 0x20800 */ + { 3160, 0x0000 }, { 3160, 0x0000 }, { 3160, 0x1000 }, { 3161, 0x0000 }, + { 3161, 0x0000 }, { 3161, 0x0000 }, { 3161, 0x0000 }, { 3161, 0x0008 }, + { 3162, 0x0000 }, { 3162, 0x0000 }, { 3162, 0x0000 }, { 3162, 0x0000 }, + { 3162, 0x0000 }, { 3162, 0x0020 }, { 3163, 0x0000 }, { 3163, 0x0000 }, + /* 0x20900 */ + { 3163, 0x0000 }, { 3163, 0x0040 }, { 3164, 0x0008 }, { 3165, 0x0000 }, + { 3165, 0x0000 }, { 3165, 0x0010 }, { 3166, 0x0000 }, { 3166, 0x0200 }, + { 3167, 0x0000 }, { 3167, 0x0000 }, { 3167, 0x0000 }, { 3167, 0x0000 }, + { 3167, 0x0000 }, { 3167, 0x0000 }, { 3167, 0x0080 }, { 3168, 0x0000 }, + /* 0x20a00 */ + { 3168, 0x0000 }, { 3168, 0x0002 }, { 3169, 0x0000 }, { 3169, 0x0000 }, + { 3169, 0x0000 }, { 3169, 0x0001 }, { 3170, 0x0000 }, { 3170, 0x0000 }, + { 3170, 0x0000 }, { 3170, 0x0000 }, { 3170, 0x0000 }, { 3170, 0x0010 }, + { 3171, 0x2004 }, { 3173, 0x0000 }, { 3173, 0x0000 }, { 3173, 0x0000 }, + /* 0x20b00 */ + { 3173, 0x2000 }, { 3174, 0x0000 }, { 3174, 0x0000 }, { 3174, 0x0000 }, + { 3174, 0x0000 }, { 3174, 0x0000 }, { 3174, 0x0000 }, { 3174, 0x0000 }, + { 3174, 0x8000 }, { 3175, 0x0000 }, { 3175, 0x0300 }, { 3177, 0x8000 }, + { 3178, 0x0840 }, { 3180, 0x0000 }, { 3180, 0x0804 }, { 3182, 0x8800 }, + /* 0x20c00 */ + { 3184, 0x2800 }, { 3186, 0x0000 }, { 3186, 0x0001 }, { 3187, 0x0c10 }, + { 3190, 0x000e }, { 3193, 0x0008 }, { 3194, 0x0020 }, { 3195, 0x1180 }, + { 3198, 0x2000 }, { 3199, 0x1040 }, { 3201, 0x0000 }, { 3201, 0x0120 }, + { 3203, 0x8000 }, { 3204, 0x2078 }, { 3209, 0x2000 }, { 3210, 0x8000 }, + /* 0x20d00 */ + { 3211, 0x0000 }, { 3211, 0x0020 }, { 3212, 0x0100 }, { 3213, 0x0006 }, + { 3215, 0x73c0 }, { 3222, 0x0000 }, { 3222, 0x8000 }, { 3223, 0xd012 }, + { 3228, 0x0000 }, { 3228, 0x1040 }, { 3230, 0x0080 }, { 3231, 0x0004 }, + { 3232, 0x0100 }, { 3233, 0x0000 }, { 3233, 0x0000 }, { 3233, 0x0000 }, + /* 0x20e00 */ + { 3233, 0xe610 }, { 3239, 0x2043 }, { 3243, 0x0000 }, { 3243, 0x0000 }, + { 3243, 0x1000 }, { 3244, 0x0000 }, { 3244, 0x2000 }, { 3245, 0x0fe8 }, + { 3253, 0x1000 }, { 3254, 0x2140 }, { 3257, 0x1c04 }, { 3261, 0x0040 }, + { 3262, 0x0000 }, { 3262, 0x2180 }, { 3265, 0x0000 }, { 3265, 0x0f00 }, + /* 0x20f00 */ + { 3269, 0x0000 }, { 3269, 0x2000 }, { 3270, 0x6040 }, { 3273, 0x0803 }, + { 3276, 0x1000 }, { 3277, 0x0000 }, { 3277, 0x0010 }, { 3278, 0x0000 }, + { 3278, 0x2000 }, { 3279, 0x0001 }, { 3280, 0x2000 }, { 3281, 0x1070 }, + { 3285, 0x0000 }, { 3285, 0x8000 }, { 3286, 0x3c00 }, { 3290, 0x0000 }, + /* 0x21000 */ + { 3290, 0x0000 }, { 3290, 0x6010 }, { 3293, 0x0000 }, { 3293, 0x0000 }, + { 3293, 0x8000 }, { 3294, 0x1000 }, { 3295, 0x8000 }, { 3296, 0x09e0 }, + { 3301, 0x0100 }, { 3302, 0x2040 }, { 3304, 0x0000 }, { 3304, 0x8010 }, + { 3306, 0x8383 }, { 3312, 0x0008 }, { 3313, 0x0010 }, { 3314, 0x0070 }, + /* 0x21100 */ + { 3317, 0x0000 }, { 3317, 0x0000 }, { 3317, 0x8000 }, { 3318, 0x2800 }, + { 3320, 0x8120 }, { 3323, 0x0000 }, { 3323, 0x0000 }, { 3323, 0x0000 }, + { 3323, 0x0081 }, { 3325, 0x0000 }, { 3325, 0x0000 }, { 3325, 0x0000 }, + { 3325, 0x0000 }, { 3325, 0x0200 }, { 3326, 0x0000 }, { 3326, 0x0000 }, + /* 0x21200 */ + { 3326, 0x0000 }, { 3326, 0x0000 }, { 3326, 0x0000 }, { 3326, 0x1000 }, + { 3327, 0x8000 }, { 3328, 0x0000 }, { 3328, 0x0000 }, { 3328, 0x1000 }, + { 3329, 0x0000 }, { 3329, 0x0000 }, { 3329, 0x0300 }, { 3331, 0x0001 }, + { 3332, 0x0000 }, { 3332, 0x0000 }, { 3332, 0x0008 }, { 3333, 0x4000 }, + /* 0x21300 */ + { 3334, 0x003c }, { 3338, 0x0000 }, { 3338, 0x0000 }, { 3338, 0x0440 }, + { 3340, 0x0000 }, { 3340, 0x0000 }, { 3340, 0x0000 }, { 3340, 0x0060 }, + { 3342, 0x4000 }, { 3343, 0x1100 }, { 3345, 0x0000 }, { 3345, 0x0000 }, + { 3345, 0x0060 }, { 3347, 0x0000 }, { 3347, 0x2000 }, { 3348, 0x4000 }, + /* 0x21400 */ + { 3349, 0x0000 }, { 3349, 0x0048 }, { 3351, 0x0010 }, { 3352, 0x0000 }, + { 3352, 0x0000 }, { 3352, 0x0034 }, { 3355, 0x0000 }, { 3355, 0x0000 }, + { 3355, 0x0400 }, { 3356, 0x0080 }, { 3357, 0x0000 }, { 3357, 0x0040 }, + { 3358, 0x0000 }, { 3358, 0x0000 }, { 3358, 0x0100 }, { 3359, 0x2000 }, + /* 0x21500 */ + { 3360, 0x0000 }, { 3360, 0x0000 }, { 3360, 0x0000 }, { 3360, 0x0000 }, + { 3360, 0x0000 }, { 3360, 0x0000 }, { 3360, 0x0000 }, { 3360, 0x0080 }, + { 3361, 0x0004 }, { 3362, 0x0040 }, { 3363, 0x0000 }, { 3363, 0x0000 }, + { 3363, 0x0000 }, { 3363, 0x0000 }, { 3363, 0x0000 }, { 3363, 0x0000 }, + /* 0x21600 */ + { 3363, 0x0400 }, { 3364, 0x0208 }, { 3366, 0x0000 }, { 3366, 0x4000 }, + { 3367, 0x0000 }, { 3367, 0x0000 }, { 3367, 0x0002 }, { 3368, 0x0000 }, + { 3368, 0x0000 }, { 3368, 0x0004 }, { 3369, 0x0000 }, { 3369, 0x0500 }, + { 3371, 0x0007 }, { 3374, 0x8028 }, { 3377, 0x01c0 }, { 3380, 0x5c00 }, + /* 0x21700 */ + { 3384, 0x2000 }, { 3385, 0x0001 }, { 3386, 0x0040 }, { 3387, 0x1c00 }, + { 3390, 0x0000 }, { 3390, 0x0080 }, { 3391, 0xf000 }, { 3395, 0x001b }, + { 3399, 0x0000 }, { 3399, 0x0000 }, { 3399, 0x0800 }, { 3400, 0x003f }, + { 3406, 0x0088 }, { 3408, 0x9e00 }, { 3413, 0x8000 }, { 3414, 0x1f60 }, + /* 0x21800 */ + { 3421, 0x0000 }, { 3421, 0x0000 }, { 3421, 0x2701 }, { 3426, 0x0e00 }, + { 3429, 0x0021 }, { 3431, 0x4004 }, { 3433, 0x001e }, { 3437, 0x0880 }, + { 3439, 0x0038 }, { 3442, 0xc000 }, { 3444, 0x0007 }, { 3447, 0xc000 }, + { 3449, 0x0000 }, { 3449, 0x03c2 }, { 3454, 0x0000 }, { 3454, 0x0400 }, + /* 0x21900 */ + { 3455, 0x0038 }, { 3458, 0x1027 }, { 3463, 0x0084 }, { 3465, 0x0800 }, + { 3466, 0x0010 }, { 3467, 0x0100 }, { 3468, 0x0400 }, { 3469, 0x1000 }, + { 3470, 0x0108 }, { 3472, 0x0040 }, { 3473, 0x0000 }, { 3473, 0x0000 }, + { 3473, 0x0000 }, { 3473, 0x0800 }, { 3474, 0x0000 }, { 3474, 0x0008 }, + /* 0x21a00 */ + { 3475, 0x0000 }, { 3475, 0x0000 }, { 3475, 0x2000 }, { 3476, 0x0010 }, + { 3477, 0x0820 }, { 3479, 0x0000 }, { 3479, 0x0000 }, { 3479, 0x0000 }, + { 3479, 0x0000 }, { 3479, 0x0000 }, { 3479, 0x0000 }, { 3479, 0x0000 }, + { 3479, 0x0000 }, { 3479, 0x0000 }, { 3479, 0x0000 }, { 3479, 0x0000 }, + /* 0x21b00 */ + { 3479, 0x0000 }, { 3479, 0x0000 }, { 3479, 0x0000 }, { 3479, 0x0000 }, + { 3479, 0x0010 }, { 3480, 0x0000 }, { 3480, 0x0000 }, { 3480, 0x0000 }, + { 3480, 0x0000 }, { 3480, 0x0000 }, { 3480, 0x0000 }, { 3480, 0x0000 }, + { 3480, 0x0006 }, { 3482, 0x0000 }, { 3482, 0x0000 }, { 3482, 0x0000 }, + /* 0x21c00 */ + { 3482, 0x0000 }, { 3482, 0x0000 }, { 3482, 0x0400 }, { 3483, 0x0000 }, + { 3483, 0x0000 }, { 3483, 0x0000 }, { 3483, 0x0000 }, { 3483, 0x0001 }, + { 3484, 0x0000 }, { 3484, 0x0000 }, { 3484, 0x1024 }, { 3487, 0x0000 }, + { 3487, 0x0000 }, { 3487, 0x0000 }, { 3487, 0x0000 }, { 3487, 0x0000 }, + /* 0x21d00 */ + { 3487, 0x0000 }, { 3487, 0x0000 }, { 3487, 0x0000 }, { 3487, 0x0000 }, + { 3487, 0x0040 }, { 3488, 0x0000 }, { 3488, 0x0000 }, { 3488, 0x0000 }, + { 3488, 0x0000 }, { 3488, 0x0001 }, { 3489, 0x0000 }, { 3489, 0x0400 }, + { 3490, 0x0400 }, { 3491, 0x0002 }, { 3492, 0x0800 }, { 3493, 0x0200 }, + /* 0x21e00 */ + { 3494, 0x0000 }, { 3494, 0x1000 }, { 3495, 0x0000 }, { 3495, 0x2080 }, + { 3497, 0x0000 }, { 3497, 0x0000 }, { 3497, 0x0000 }, { 3497, 0x0000 }, + { 3497, 0x0200 }, { 3498, 0x0000 }, { 3498, 0x0110 }, { 3500, 0x0000 }, + { 3500, 0x0100 }, { 3501, 0x0020 }, { 3502, 0x0000 }, { 3502, 0x0000 }, + /* 0x21f00 */ + { 3502, 0x8000 }, { 3503, 0x0020 }, { 3504, 0x0000 }, { 3504, 0x0000 }, + { 3504, 0x0000 }, { 3504, 0x0000 }, { 3504, 0x0400 }, { 3505, 0x0000 }, + { 3505, 0x0000 }, { 3505, 0x4000 }, { 3506, 0x0002 }, { 3507, 0x0000 }, + { 3507, 0x0000 }, { 3507, 0x0000 }, { 3507, 0x0100 }, { 3508, 0x0000 }, + /* 0x22000 */ + { 3508, 0x0000 }, { 3508, 0x0000 }, { 3508, 0x0000 }, { 3508, 0x0000 }, + { 3508, 0x0220 }, { 3510, 0x0000 }, { 3510, 0x0000 }, { 3510, 0x0000 }, + { 3510, 0x0000 }, { 3510, 0x0400 }, { 3511, 0x0000 }, { 3511, 0x0000 }, + { 3511, 0x0080 }, { 3512, 0x0000 }, { 3512, 0x0000 }, { 3512, 0x1000 }, + /* 0x22100 */ + { 3513, 0x0000 }, { 3513, 0x0000 }, { 3513, 0x0400 }, { 3514, 0x0000 }, + { 3514, 0x0000 }, { 3514, 0x0800 }, { 3515, 0x0000 }, { 3515, 0x0408 }, + { 3517, 0x0000 }, { 3517, 0x0000 }, { 3517, 0x0002 }, { 3518, 0x0000 }, + { 3518, 0x0008 }, { 3519, 0x0000 }, { 3519, 0x0000 }, { 3519, 0x0000 }, + /* 0x22200 */ + { 3519, 0x0100 }, { 3520, 0x0000 }, { 3520, 0x0000 }, { 3520, 0x0000 }, + { 3520, 0x0000 }, { 3520, 0x0000 }, { 3520, 0x0000 }, { 3520, 0x1000 }, + { 3521, 0x0000 }, { 3521, 0x0000 }, { 3521, 0x0000 }, { 3521, 0x0000 }, + { 3521, 0x0000 }, { 3521, 0x0000 }, { 3521, 0x0000 }, { 3521, 0x0000 }, + /* 0x22300 */ + { 3521, 0x0000 }, { 3521, 0x0000 }, { 3521, 0x0022 }, { 3523, 0x0000 }, + { 3523, 0x0000 }, { 3523, 0x0000 }, { 3523, 0x0000 }, { 3523, 0x0000 }, + { 3523, 0x0000 }, { 3523, 0x0000 }, { 3523, 0x0000 }, { 3523, 0x2000 }, + { 3524, 0x0000 }, { 3524, 0x0081 }, { 3526, 0x0000 }, { 3526, 0x0400 }, + /* 0x22400 */ + { 3527, 0x0000 }, { 3527, 0x0000 }, { 3527, 0x0000 }, { 3527, 0x0000 }, + { 3527, 0x0000 }, { 3527, 0x0000 }, { 3527, 0x0020 }, { 3528, 0x0002 }, + { 3529, 0x0800 }, { 3530, 0x0002 }, { 3531, 0x0000 }, { 3531, 0x0001 }, + { 3532, 0x0000 }, { 3532, 0x0000 }, { 3532, 0x2000 }, { 3533, 0x0000 }, + /* 0x22500 */ + { 3533, 0x0000 }, { 3533, 0x0808 }, { 3535, 0x0000 }, { 3535, 0x0001 }, + { 3536, 0x0000 }, { 3536, 0x0010 }, { 3537, 0x0000 }, { 3537, 0x0000 }, + { 3537, 0x2000 }, { 3538, 0x0000 }, { 3538, 0x8000 }, { 3539, 0x4000 }, + { 3540, 0x0000 }, { 3540, 0x0000 }, { 3540, 0x0000 }, { 3540, 0x0000 }, + /* 0x22600 */ + { 3540, 0x0000 }, { 3540, 0x1800 }, { 3542, 0x0800 }, { 3543, 0x0000 }, + { 3543, 0x0000 }, { 3543, 0x0000 }, { 3543, 0x0100 }, { 3544, 0x0400 }, + { 3545, 0x0000 }, { 3545, 0x0140 }, { 3547, 0x0000 }, { 3547, 0x0000 }, + { 3547, 0x0000 }, { 3547, 0x0000 }, { 3547, 0x0000 }, { 3547, 0x0070 }, + /* 0x22700 */ + { 3550, 0x0000 }, { 3550, 0x8810 }, { 3553, 0x0400 }, { 3554, 0x0000 }, + { 3554, 0x0000 }, { 3554, 0x0000 }, { 3554, 0x0000 }, { 3554, 0x0020 }, + { 3555, 0x0002 }, { 3556, 0x0000 }, { 3556, 0x0000 }, { 3556, 0x0030 }, + { 3558, 0x2000 }, { 3559, 0x0000 }, { 3559, 0x0000 }, { 3559, 0x0000 }, + /* 0x22800 */ + { 3559, 0x0008 }, { 3560, 0x0000 }, { 3560, 0x0000 }, { 3560, 0x0000 }, + { 3560, 0x0000 }, { 3560, 0x8000 }, { 3561, 0x0001 }, { 3562, 0x0002 }, + { 3563, 0x0000 }, { 3563, 0x0000 }, { 3563, 0x2000 }, { 3564, 0x0000 }, + { 3564, 0x0002 }, { 3565, 0x0000 }, { 3565, 0x0000 }, { 3565, 0x0080 }, + /* 0x22900 */ + { 3566, 0x0000 }, { 3566, 0x0000 }, { 3566, 0x0040 }, { 3567, 0x0200 }, + { 3568, 0x8000 }, { 3569, 0x0000 }, { 3569, 0x0880 }, { 3571, 0x0000 }, + { 3571, 0x0001 }, { 3572, 0x0008 }, { 3573, 0x0000 }, { 3573, 0x0000 }, + { 3573, 0x0000 }, { 3573, 0x0000 }, { 3573, 0x0000 }, { 3573, 0x0000 }, + /* 0x22a00 */ + { 3573, 0x0000 }, { 3573, 0x0000 }, { 3573, 0x0000 }, { 3573, 0x0000 }, + { 3573, 0x0000 }, { 3573, 0x0000 }, { 3573, 0x0040 }, { 3574, 0x0000 }, + { 3574, 0x0000 }, { 3574, 0x0000 }, { 3574, 0x0000 }, { 3574, 0x0000 }, + { 3574, 0x8000 }, { 3575, 0x0020 }, { 3576, 0x0140 }, { 3578, 0x0000 }, + /* 0x22b00 */ + { 3578, 0x4000 }, { 3579, 0x0000 }, { 3579, 0x0004 }, { 3580, 0x8000 }, + { 3581, 0x0008 }, { 3582, 0x0000 }, { 3582, 0x0400 }, { 3583, 0x0000 }, + { 3583, 0x0000 }, { 3583, 0x0000 }, { 3583, 0x0000 }, { 3583, 0x0000 }, + { 3583, 0x4400 }, { 3585, 0x0000 }, { 3585, 0x0000 }, { 3585, 0x0000 }, + /* 0x22c00 */ + { 3585, 0x0000 }, { 3585, 0x0000 }, { 3585, 0x00c0 }, { 3587, 0x0100 }, + { 3588, 0x1000 }, { 3589, 0x0022 }, { 3591, 0x0004 }, { 3592, 0x0000 }, + { 3592, 0x0100 }, { 3593, 0x0800 }, { 3594, 0x0202 }, { 3596, 0x0084 }, + { 3598, 0x0244 }, { 3601, 0x0000 }, { 3601, 0x0000 }, { 3601, 0x0000 }, + /* 0x22d00 */ + { 3601, 0x0180 }, { 3603, 0x0004 }, { 3604, 0x0000 }, { 3604, 0x0000 }, + { 3604, 0x1010 }, { 3606, 0x0000 }, { 3606, 0x0080 }, { 3607, 0x0000 }, + { 3607, 0x2000 }, { 3608, 0x0020 }, { 3609, 0x0019 }, { 3612, 0x0080 }, + { 3613, 0x0000 }, { 3613, 0x0000 }, { 3613, 0x4000 }, { 3614, 0x0000 }, + /* 0x22e00 */ + { 3614, 0x2000 }, { 3615, 0x0000 }, { 3615, 0x0000 }, { 3615, 0x0040 }, + { 3616, 0x0004 }, { 3617, 0x0000 }, { 3617, 0x0000 }, { 3617, 0x0100 }, + { 3618, 0x0800 }, { 3619, 0x0000 }, { 3619, 0x0000 }, { 3619, 0x0008 }, + { 3620, 0x0000 }, { 3620, 0x0000 }, { 3620, 0x8000 }, { 3621, 0x0000 }, + /* 0x22f00 */ + { 3621, 0x0000 }, { 3621, 0x0000 }, { 3621, 0x0000 }, { 3621, 0x0000 }, + { 3621, 0x0000 }, { 3621, 0x0000 }, { 3621, 0x0000 }, { 3621, 0x0010 }, + { 3622, 0x0000 }, { 3622, 0x0000 }, { 3622, 0x0000 }, { 3622, 0x0000 }, + { 3622, 0x1000 }, { 3623, 0x0000 }, { 3623, 0x0008 }, { 3624, 0x0000 }, + /* 0x23000 */ + { 3624, 0x0000 }, { 3624, 0x0000 }, { 3624, 0x0000 }, { 3624, 0x0008 }, + { 3625, 0x0810 }, { 3627, 0x0000 }, { 3627, 0x0040 }, { 3628, 0x6000 }, + { 3630, 0x4000 }, { 3631, 0x0000 }, { 3631, 0x0000 }, { 3631, 0x1080 }, + { 3633, 0x0000 }, { 3633, 0x0400 }, { 3634, 0x0000 }, { 3634, 0x0000 }, + /* 0x23100 */ + { 3634, 0x0008 }, { 3635, 0x0000 }, { 3635, 0x0000 }, { 3635, 0x2000 }, + { 3636, 0x0000 }, { 3636, 0x0000 }, { 3636, 0x0000 }, { 3636, 0x2000 }, + { 3637, 0x0004 }, { 3638, 0x0000 }, { 3638, 0x0030 }, { 3640, 0x0008 }, + { 3641, 0x0300 }, { 3643, 0x0000 }, { 3643, 0x0000 }, { 3643, 0x0380 }, + /* 0x23200 */ + { 3646, 0x8000 }, { 3647, 0x0000 }, { 3647, 0x8020 }, { 3649, 0x001e }, + { 3653, 0x0000 }, { 3653, 0x0000 }, { 3653, 0x0004 }, { 3654, 0x0000 }, + { 3654, 0x0600 }, { 3656, 0x0000 }, { 3656, 0x3800 }, { 3659, 0x0000 }, + { 3659, 0x0000 }, { 3659, 0x0004 }, { 3660, 0x0003 }, { 3662, 0x0000 }, + /* 0x23300 */ + { 3662, 0x0401 }, { 3664, 0x8000 }, { 3665, 0x0000 }, { 3665, 0x0000 }, + { 3665, 0x0000 }, { 3665, 0x0000 }, { 3665, 0x0000 }, { 3665, 0x0000 }, + { 3665, 0x0000 }, { 3665, 0x0000 }, { 3665, 0x0000 }, { 3665, 0x0010 }, + { 3666, 0x1000 }, { 3667, 0x4000 }, { 3668, 0x0040 }, { 3669, 0x4430 }, + /* 0x23400 */ + { 3673, 0x0001 }, { 3674, 0x0000 }, { 3674, 0x0000 }, { 3674, 0x8000 }, + { 3675, 0x0000 }, { 3675, 0x0001 }, { 3676, 0x8000 }, { 3677, 0x0004 }, + { 3678, 0x0000 }, { 3678, 0x0000 }, { 3678, 0x0000 }, { 3678, 0x0000 }, + { 3678, 0x0000 }, { 3678, 0x0000 }, { 3678, 0x0020 }, { 3679, 0x0000 }, + /* 0x23500 */ + { 3679, 0x0000 }, { 3679, 0x0200 }, { 3680, 0x0000 }, { 3680, 0x0001 }, + { 3681, 0x0000 }, { 3681, 0x0400 }, { 3682, 0x0080 }, { 3683, 0x0000 }, + { 3683, 0x0000 }, { 3683, 0x1220 }, { 3686, 0x0000 }, { 3686, 0x0000 }, + { 3686, 0xe000 }, { 3689, 0x0000 }, { 3689, 0x0000 }, { 3689, 0x0008 }, + /* 0x23600 */ + { 3690, 0x0001 }, { 3691, 0x0400 }, { 3692, 0x0000 }, { 3692, 0x1000 }, + { 3693, 0x0001 }, { 3694, 0x8200 }, { 3696, 0x0000 }, { 3696, 0x0080 }, + { 3697, 0x0000 }, { 3697, 0x0000 }, { 3697, 0x2040 }, { 3699, 0x0400 }, + { 3700, 0x0000 }, { 3700, 0x8000 }, { 3701, 0x4000 }, { 3702, 0x0000 }, + /* 0x23700 */ + { 3702, 0x0008 }, { 3703, 0x0040 }, { 3704, 0xa001 }, { 3707, 0x8000 }, + { 3708, 0x0000 }, { 3708, 0x0000 }, { 3708, 0x0040 }, { 3709, 0x0000 }, + { 3709, 0x0002 }, { 3710, 0x0000 }, { 3710, 0x0004 }, { 3711, 0x1000 }, + { 3712, 0x0004 }, { 3713, 0x00e0 }, { 3716, 0x0000 }, { 3716, 0x0000 }, + /* 0x23800 */ + { 3716, 0x0000 }, { 3716, 0x0000 }, { 3716, 0x0000 }, { 3716, 0x0400 }, + { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, + { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, + { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, + /* 0x23900 */ + { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, + { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, + { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, { 3717, 0x0000 }, + { 3717, 0x0004 }, { 3718, 0x0000 }, { 3718, 0x0000 }, { 3718, 0x0000 }, + /* 0x23a00 */ + { 3718, 0x0000 }, { 3718, 0x0000 }, { 3718, 0x0000 }, { 3718, 0x0000 }, + { 3718, 0x0000 }, { 3718, 0x0000 }, { 3718, 0x0000 }, { 3718, 0x0000 }, + { 3718, 0x0000 }, { 3718, 0x0000 }, { 3718, 0x0080 }, { 3719, 0x0000 }, + { 3719, 0x0000 }, { 3719, 0x0800 }, { 3720, 0x4000 }, { 3721, 0x0400 }, + /* 0x23b00 */ + { 3722, 0x0000 }, { 3722, 0x0000 }, { 3722, 0x0000 }, { 3722, 0x0000 }, + { 3722, 0x0000 }, { 3722, 0x0400 }, { 3723, 0x0000 }, { 3723, 0x0000 }, + { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, + { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, + /* 0x23c00 */ + { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, + { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, + { 3723, 0x0000 }, { 3723, 0x0e00 }, { 3726, 0x0000 }, { 3726, 0x00a0 }, + { 3728, 0x0380 }, { 3731, 0x0000 }, { 3731, 0x0000 }, { 3731, 0xf000 }, + /* 0x23d00 */ + { 3735, 0x0000 }, { 3735, 0x0000 }, { 3735, 0x0000 }, { 3735, 0x0000 }, + { 3735, 0x0001 }, { 3736, 0x0800 }, { 3737, 0x0000 }, { 3737, 0x4000 }, + { 3738, 0x8000 }, { 3739, 0x0000 }, { 3739, 0x0000 }, { 3739, 0x3fc0 }, + { 3747, 0x0000 }, { 3747, 0x0000 }, { 3747, 0x0008 }, { 3748, 0x0100 }, + /* 0x23e00 */ + { 3749, 0x0000 }, { 3749, 0x0002 }, { 3750, 0xf000 }, { 3754, 0x0203 }, + { 3757, 0x0000 }, { 3757, 0x0000 }, { 3757, 0x0000 }, { 3757, 0x0000 }, + { 3757, 0x0f00 }, { 3761, 0x0000 }, { 3761, 0x0000 }, { 3761, 0x8200 }, + { 3763, 0x0000 }, { 3763, 0x0080 }, { 3764, 0x0000 }, { 3764, 0x1f80 }, + /* 0x23f00 */ + { 3770, 0x0000 }, { 3770, 0x0000 }, { 3770, 0x0000 }, { 3770, 0x0020 }, + { 3771, 0x0402 }, { 3773, 0x0000 }, { 3773, 0x0000 }, { 3773, 0x8000 }, + { 3774, 0x8007 }, { 3778, 0x0000 }, { 3778, 0x0000 }, { 3778, 0x0090 }, + { 3780, 0x0021 }, { 3782, 0x0000 }, { 3782, 0xf800 }, { 3787, 0x0001 }, + /* 0x24000 */ + { 3788, 0x0000 }, { 3788, 0x0002 }, { 3789, 0x0000 }, { 3789, 0x3e00 }, + { 3794, 0x0000 }, { 3794, 0x0080 }, { 3795, 0x0000 }, { 3795, 0x0000 }, + { 3795, 0x3820 }, { 3799, 0x0002 }, { 3800, 0x0000 }, { 3800, 0x0000 }, + { 3800, 0x0200 }, { 3801, 0x0000 }, { 3801, 0x0002 }, { 3802, 0x0000 }, + /* 0x24100 */ + { 3802, 0x8010 }, { 3804, 0x0200 }, { 3805, 0x0000 }, { 3805, 0x8000 }, + { 3806, 0x0011 }, { 3808, 0x90e0 }, { 3813, 0x0000 }, { 3813, 0x0480 }, + { 3815, 0x0000 }, { 3815, 0x0000 }, { 3815, 0x1038 }, { 3819, 0x0020 }, + { 3820, 0x2000 }, { 3821, 0x0000 }, { 3821, 0x0004 }, { 3822, 0x1000 }, + /* 0x24200 */ + { 3823, 0x0000 }, { 3823, 0x0800 }, { 3824, 0x0000 }, { 3824, 0x0000 }, + { 3824, 0x0800 }, { 3825, 0x0240 }, { 3827, 0x0000 }, { 3827, 0x01c0 }, + { 3830, 0x0010 }, { 3831, 0x0028 }, { 3833, 0x0020 }, { 3834, 0x0000 }, + { 3834, 0x0602 }, { 3837, 0x0000 }, { 3837, 0x4000 }, { 3838, 0x0400 }, + /* 0x24300 */ + { 3839, 0x2000 }, { 3840, 0x0400 }, { 3841, 0x0000 }, { 3841, 0x0010 }, + { 3842, 0x0100 }, { 3843, 0x0000 }, { 3843, 0x003c }, { 3847, 0x0000 }, + { 3847, 0x1000 }, { 3848, 0x1040 }, { 3850, 0x0000 }, { 3850, 0x2000 }, + { 3851, 0x0002 }, { 3852, 0x0000 }, { 3852, 0x0600 }, { 3854, 0x0104 }, + /* 0x24400 */ + { 3856, 0x0010 }, { 3857, 0x0000 }, { 3857, 0x0000 }, { 3857, 0x0060 }, + { 3859, 0x0000 }, { 3859, 0x0c00 }, { 3861, 0x0000 }, { 3861, 0x0008 }, + { 3862, 0x0180 }, { 3864, 0x0000 }, { 3864, 0x0000 }, { 3864, 0x1200 }, + { 3866, 0x4000 }, { 3867, 0x0048 }, { 3869, 0x0000 }, { 3869, 0x0000 }, + /* 0x24500 */ + { 3869, 0x0000 }, { 3869, 0x0000 }, { 3869, 0x0002 }, { 3870, 0x0000 }, + { 3870, 0x0000 }, { 3870, 0x0000 }, { 3870, 0x0000 }, { 3870, 0x0100 }, + { 3871, 0x0000 }, { 3871, 0x0000 }, { 3871, 0x0000 }, { 3871, 0x0000 }, + { 3871, 0x0100 }, { 3872, 0x0000 }, { 3872, 0x0000 }, { 3872, 0x0000 }, + /* 0x24600 */ + { 3872, 0x0000 }, { 3872, 0x0100 }, { 3873, 0x0400 }, { 3874, 0x0000 }, + { 3874, 0x0000 }, { 3874, 0x0000 }, { 3874, 0x0020 }, { 3875, 0x0010 }, + { 3876, 0x0000 }, { 3876, 0x0080 }, { 3877, 0x0000 }, { 3877, 0x0000 }, + { 3877, 0x0000 }, { 3877, 0x0010 }, { 3878, 0x0000 }, { 3878, 0x0000 }, + /* 0x24700 */ + { 3878, 0x0040 }, { 3879, 0x0000 }, { 3879, 0x8020 }, { 3881, 0x0000 }, + { 3881, 0x0000 }, { 3881, 0x0000 }, { 3881, 0x0000 }, { 3881, 0x0000 }, + { 3881, 0x8000 }, { 3882, 0x0000 }, { 3882, 0x0000 }, { 3882, 0x0000 }, + { 3882, 0x0000 }, { 3882, 0x0000 }, { 3882, 0x0001 }, { 3883, 0x0000 }, + /* 0x24800 */ + { 3883, 0x0000 }, { 3883, 0x0004 }, { 3884, 0x0008 }, { 3885, 0x0000 }, + { 3885, 0x0000 }, { 3885, 0x0000 }, { 3885, 0x0000 }, { 3885, 0x0000 }, + { 3885, 0x0004 }, { 3886, 0x0000 }, { 3886, 0x0000 }, { 3886, 0x0000 }, + { 3886, 0x0000 }, { 3886, 0x0000 }, { 3886, 0x0200 }, { 3887, 0x880f }, + /* 0x24900 */ + { 3893, 0x1003 }, { 3896, 0x02c0 }, { 3899, 0x8000 }, { 3900, 0xc018 }, + { 3904, 0x000f }, { 3908, 0x0000 }, { 3908, 0x000c }, { 3910, 0x8070 }, + { 3914, 0xff04 }, { 3923, 0x0010 }, { 3924, 0x3a90 }, { 3930, 0x0f80 }, + { 3935, 0x0020 }, { 3936, 0xc401 }, { 3940, 0x3028 }, { 3944, 0x0bc0 }, + /* 0x24a00 */ + { 3949, 0x4000 }, { 3950, 0x0024 }, { 3952, 0x07fe }, { 3962, 0x4000 }, + { 3963, 0xc424 }, { 3968, 0x2003 }, { 3971, 0x00e0 }, { 3974, 0x0782 }, + { 3979, 0x1000 }, { 3980, 0x0078 }, { 3984, 0x00f0 }, { 3988, 0x1c0e }, + { 3994, 0x0481 }, { 3997, 0x8002 }, { 3999, 0x0204 }, { 4001, 0x0000 }, + /* 0x24b00 */ + { 4001, 0x0000 }, { 4001, 0x0000 }, { 4001, 0x0000 }, { 4001, 0x0000 }, + { 4001, 0x0000 }, { 4001, 0x0000 }, { 4001, 0x4000 }, { 4002, 0x0000 }, + { 4002, 0x0000 }, { 4002, 0x0000 }, { 4002, 0x0000 }, { 4002, 0x0000 }, + { 4002, 0x0000 }, { 4002, 0x0000 }, { 4002, 0x0000 }, { 4002, 0x0020 }, + /* 0x24c00 */ + { 4003, 0x0200 }, { 4004, 0x0000 }, { 4004, 0x0000 }, { 4004, 0x0000 }, + { 4004, 0x0000 }, { 4004, 0x0000 }, { 4004, 0x0000 }, { 4004, 0x0000 }, + { 4004, 0x0000 }, { 4004, 0xc000 }, { 4006, 0x0000 }, { 4006, 0x0000 }, + { 4006, 0x0200 }, { 4007, 0x0200 }, { 4008, 0x0000 }, { 4008, 0x0000 }, + /* 0x24d00 */ + { 4008, 0x0040 }, { 4009, 0x0008 }, { 4010, 0x0000 }, { 4010, 0x0000 }, + { 4010, 0x0000 }, { 4010, 0x0000 }, { 4010, 0x0000 }, { 4010, 0x0000 }, + { 4010, 0x0000 }, { 4010, 0x0000 }, { 4010, 0x0000 }, { 4010, 0x0100 }, + { 4011, 0x0000 }, { 4011, 0x0000 }, { 4011, 0x0c00 }, { 4013, 0x0000 }, + /* 0x24e00 */ + { 4013, 0x0000 }, { 4013, 0x0000 }, { 4013, 0x0000 }, { 4013, 0x0800 }, + { 4014, 0x0000 }, { 4014, 0x0001 }, { 4015, 0x0000 }, { 4015, 0x0000 }, + { 4015, 0x0000 }, { 4015, 0x0000 }, { 4015, 0x00a0 }, { 4017, 0x0000 }, + { 4017, 0x0000 }, { 4017, 0x0000 }, { 4017, 0x0000 }, { 4017, 0x0000 }, + /* 0x24f00 */ + { 4017, 0x4000 }, { 4018, 0x0000 }, { 4018, 0x0000 }, { 4018, 0x0000 }, + { 4018, 0x0000 }, { 4018, 0x1000 }, { 4019, 0x0000 }, { 4019, 0x0000 }, + { 4019, 0x0044 }, { 4021, 0x0480 }, { 4023, 0x0200 }, { 4024, 0x0100 }, + { 4025, 0x0004 }, { 4026, 0x0000 }, { 4026, 0x0000 }, { 4026, 0x0000 }, + /* 0x25000 */ + { 4026, 0x0000 }, { 4026, 0x0000 }, { 4026, 0x1000 }, { 4027, 0x0000 }, + { 4027, 0x0000 }, { 4027, 0x0004 }, { 4028, 0x0000 }, { 4028, 0x0000 }, + { 4028, 0x0000 }, { 4028, 0x2000 }, { 4029, 0x0000 }, { 4029, 0x0000 }, + { 4029, 0x0000 }, { 4029, 0x0000 }, { 4029, 0x0000 }, { 4029, 0x0000 }, + /* 0x25100 */ + { 4029, 0x0000 }, { 4029, 0x0000 }, { 4029, 0x0800 }, { 4030, 0x0000 }, + { 4030, 0x0100 }, { 4031, 0x0000 }, { 4031, 0x0000 }, { 4031, 0x6000 }, + { 4033, 0x0000 }, { 4033, 0x0000 }, { 4033, 0x0000 }, { 4033, 0x0000 }, + { 4033, 0x0000 }, { 4033, 0x0000 }, { 4033, 0x00c8 }, { 4036, 0x0000 }, + /* 0x25200 */ + { 4036, 0x0000 }, { 4036, 0x0000 }, { 4036, 0x0003 }, { 4038, 0x0000 }, + { 4038, 0x0000 }, { 4038, 0x0001 }, { 4039, 0x0000 }, { 4039, 0x0000 }, + { 4039, 0x0000 }, { 4039, 0x0200 }, { 4040, 0x0000 }, { 4040, 0x0000 }, + { 4040, 0x0080 }, { 4041, 0x0100 }, { 4042, 0x0000 }, { 4042, 0x0000 }, + /* 0x25300 */ + { 4042, 0x4000 }, { 4043, 0x000a }, { 4045, 0x0000 }, { 4045, 0x0000 }, + { 4045, 0x0000 }, { 4045, 0x0000 }, { 4045, 0x0000 }, { 4045, 0x0000 }, + { 4045, 0x0000 }, { 4045, 0x0000 }, { 4045, 0x0000 }, { 4045, 0x0000 }, + { 4045, 0x0000 }, { 4045, 0x0000 }, { 4045, 0x0000 }, { 4045, 0x0000 }, + /* 0x25400 */ + { 4045, 0x0000 }, { 4045, 0x0200 }, { 4046, 0x8020 }, { 4048, 0x0001 }, + { 4049, 0x0040 }, { 4050, 0x0000 }, { 4050, 0x5000 }, { 4052, 0x0000 }, + { 4052, 0x0000 }, { 4052, 0x0000 }, { 4052, 0x0000 }, { 4052, 0x0000 }, + { 4052, 0x0000 }, { 4052, 0x0000 }, { 4052, 0x0000 }, { 4052, 0x0000 }, + /* 0x25500 */ + { 4052, 0x0000 }, { 4052, 0x0000 }, { 4052, 0x0000 }, { 4052, 0x8022 }, + { 4055, 0x0000 }, { 4055, 0x7800 }, { 4059, 0x0064 }, { 4062, 0x0000 }, + { 4062, 0x8012 }, { 4065, 0x0000 }, { 4065, 0x0000 }, { 4065, 0x0200 }, + { 4066, 0x0000 }, { 4066, 0x0820 }, { 4068, 0x0001 }, { 4069, 0x0000 }, + /* 0x25600 */ + { 4069, 0x0020 }, { 4070, 0x0000 }, { 4070, 0x0000 }, { 4070, 0x0020 }, + { 4071, 0x0000 }, { 4071, 0x0002 }, { 4072, 0x0000 }, { 4072, 0x0000 }, + { 4072, 0x0008 }, { 4073, 0x0000 }, { 4073, 0x0000 }, { 4073, 0x0000 }, + { 4073, 0x0000 }, { 4073, 0x0000 }, { 4073, 0x0008 }, { 4074, 0x0040 }, + /* 0x25700 */ + { 4075, 0x0040 }, { 4076, 0x2000 }, { 4077, 0x0020 }, { 4078, 0x2000 }, + { 4079, 0x0000 }, { 4079, 0x0000 }, { 4079, 0x0000 }, { 4079, 0x0004 }, + { 4080, 0x0000 }, { 4080, 0x0000 }, { 4080, 0x0000 }, { 4080, 0x0000 }, + { 4080, 0x0080 }, { 4081, 0x8000 }, { 4082, 0x0003 }, { 4084, 0x0000 }, + /* 0x25800 */ + { 4084, 0x0000 }, { 4084, 0x0000 }, { 4084, 0x0000 }, { 4084, 0x0000 }, + { 4084, 0x0000 }, { 4084, 0x2080 }, { 4086, 0x0000 }, { 4086, 0x0004 }, + { 4087, 0x0000 }, { 4087, 0x0000 }, { 4087, 0x0000 }, { 4087, 0x0000 }, + { 4087, 0x0100 }, { 4088, 0x0000 }, { 4088, 0x0002 }, { 4089, 0x0000 }, + /* 0x25900 */ + { 4089, 0x0008 }, { 4090, 0x0000 }, { 4090, 0x0000 }, { 4090, 0x0000 }, + { 4090, 0x0040 }, { 4091, 0x0040 }, { 4092, 0x0000 }, { 4092, 0x0000 }, + { 4092, 0x0000 }, { 4092, 0x0000 }, { 4092, 0x1000 }, { 4093, 0x0000 }, + { 4093, 0x1000 }, { 4094, 0x0000 }, { 4094, 0x0000 }, { 4094, 0x0000 }, + /* 0x25a00 */ + { 4094, 0x0000 }, { 4094, 0x0000 }, { 4094, 0x0000 }, { 4094, 0x0000 }, + { 4094, 0x0000 }, { 4094, 0x0000 }, { 4094, 0x0000 }, { 4094, 0x0000 }, + { 4094, 0x0000 }, { 4094, 0x1020 }, { 4096, 0xc000 }, { 4098, 0x0000 }, + { 4098, 0x0000 }, { 4098, 0x0000 }, { 4098, 0x0200 }, { 4099, 0x0000 }, + /* 0x25b00 */ + { 4099, 0x0000 }, { 4099, 0x0000 }, { 4099, 0x0000 }, { 4099, 0x0000 }, + { 4099, 0x0000 }, { 4099, 0x0000 }, { 4099, 0x0000 }, { 4099, 0x0010 }, + { 4100, 0x0200 }, { 4101, 0x0000 }, { 4101, 0x0000 }, { 4101, 0x0018 }, + { 4103, 0x0040 }, { 4104, 0x0000 }, { 4104, 0x0110 }, { 4106, 0x0000 }, + /* 0x25c00 */ + { 4106, 0x0042 }, { 4108, 0x0000 }, { 4108, 0x0002 }, { 4109, 0x0000 }, + { 4109, 0x0400 }, { 4110, 0x0000 }, { 4110, 0x0020 }, { 4111, 0x0000 }, + { 4111, 0x0000 }, { 4111, 0x0002 }, { 4112, 0x0000 }, { 4112, 0x0000 }, + { 4112, 0x0003 }, { 4114, 0x0000 }, { 4114, 0x0000 }, { 4114, 0x4000 }, + /* 0x25d00 */ + { 4115, 0x0000 }, { 4115, 0x0000 }, { 4115, 0x0001 }, { 4116, 0x0000 }, + { 4116, 0x0008 }, { 4117, 0x0000 }, { 4117, 0x0000 }, { 4117, 0x0000 }, + { 4117, 0x0000 }, { 4117, 0x0000 }, { 4117, 0x0000 }, { 4117, 0x0000 }, + { 4117, 0x0000 }, { 4117, 0x0000 }, { 4117, 0x0000 }, { 4117, 0x0000 }, + /* 0x25e00 */ + { 4117, 0x4000 }, { 4118, 0x0000 }, { 4118, 0x0000 }, { 4118, 0x0000 }, + { 4118, 0x0200 }, { 4119, 0x0000 }, { 4119, 0x0000 }, { 4119, 0x0000 }, + { 4119, 0x000e }, { 4122, 0x0000 }, { 4122, 0x0040 }, { 4123, 0x1000 }, + { 4124, 0x0000 }, { 4124, 0x0180 }, { 4126, 0x0000 }, { 4126, 0x0000 }, + /* 0x25f00 */ + { 4126, 0x0000 }, { 4126, 0x0400 }, { 4127, 0x0000 }, { 4127, 0x0000 }, + { 4127, 0x0800 }, { 4128, 0x0000 }, { 4128, 0x0000 }, { 4128, 0x0000 }, + { 4128, 0x0000 }, { 4128, 0x0000 }, { 4128, 0x0000 }, { 4128, 0x0000 }, + { 4128, 0x0000 }, { 4128, 0x0000 }, { 4128, 0x0006 }, { 4130, 0x0000 }, + /* 0x26000 */ + { 4130, 0x0000 }, { 4130, 0x0000 }, { 4130, 0x0200 }, { 4131, 0x0000 }, + { 4131, 0x0100 }, { 4132, 0x0000 }, { 4132, 0x0010 }, { 4133, 0x0000 }, + { 4133, 0x0008 }, { 4134, 0x0080 }, { 4135, 0x0030 }, { 4137, 0x0000 }, + { 4137, 0x0000 }, { 4137, 0x0000 }, { 4137, 0x0000 }, { 4137, 0x0000 }, + /* 0x26100 */ + { 4137, 0x0004 }, { 4138, 0x0000 }, { 4138, 0x0002 }, { 4139, 0x0000 }, + { 4139, 0x0000 }, { 4139, 0x1e00 }, { 4143, 0x0000 }, { 4143, 0x0000 }, + { 4143, 0x0000 }, { 4143, 0x0000 }, { 4143, 0x6000 }, { 4145, 0x0004 }, + { 4146, 0x0000 }, { 4146, 0x2000 }, { 4147, 0x0000 }, { 4147, 0x0000 }, + /* 0x26200 */ + { 4147, 0x0000 }, { 4147, 0x0000 }, { 4147, 0x0000 }, { 4147, 0x0000 }, + { 4147, 0x0000 }, { 4147, 0x0100 }, { 4148, 0x0c02 }, { 4151, 0x0000 }, + { 4151, 0x0000 }, { 4151, 0x0000 }, { 4151, 0x0000 }, { 4151, 0x0000 }, + { 4151, 0x0000 }, { 4151, 0x0001 }, { 4152, 0x0000 }, { 4152, 0x0000 }, + /* 0x26300 */ + { 4152, 0x0000 }, { 4152, 0x0000 }, { 4152, 0x0000 }, { 4152, 0x0020 }, + { 4153, 0x1800 }, { 4155, 0x0002 }, { 4156, 0x0000 }, { 4156, 0x0000 }, + { 4156, 0x0000 }, { 4156, 0x0000 }, { 4156, 0x0000 }, { 4156, 0x4000 }, + { 4157, 0x0000 }, { 4157, 0x0000 }, { 4157, 0x0000 }, { 4157, 0x0120 }, + /* 0x26400 */ + { 4159, 0x0004 }, { 4160, 0x0007 }, { 4163, 0x0000 }, { 4163, 0x0000 }, + { 4163, 0x0400 }, { 4164, 0x0000 }, { 4164, 0x0200 }, { 4165, 0x0000 }, + { 4165, 0x2310 }, { 4169, 0x0100 }, { 4170, 0x0000 }, { 4170, 0x0000 }, + { 4170, 0x0000 }, { 4170, 0x0000 }, { 4170, 0x0000 }, { 4170, 0x0000 }, + /* 0x26500 */ + { 4170, 0x0000 }, { 4170, 0x0004 }, { 4171, 0x0000 }, { 4171, 0x0000 }, + { 4171, 0x0000 }, { 4171, 0x0000 }, { 4171, 0x0000 }, { 4171, 0x0004 }, + { 4172, 0x0000 }, { 4172, 0x0000 }, { 4172, 0x2001 }, { 4174, 0x8000 }, + { 4175, 0x0000 }, { 4175, 0x0000 }, { 4175, 0x0000 }, { 4175, 0x0000 }, + /* 0x26600 */ + { 4175, 0x0000 }, { 4175, 0x0004 }, { 4176, 0x0040 }, { 4177, 0x0000 }, + { 4177, 0x0000 }, { 4177, 0x0000 }, { 4177, 0x0000 }, { 4177, 0x0000 }, + { 4177, 0x0000 }, { 4177, 0x0000 }, { 4177, 0x8000 }, { 4178, 0x0022 }, + { 4180, 0x0000 }, { 4180, 0x0400 }, { 4181, 0x0100 }, { 4182, 0x1000 }, + /* 0x26700 */ + { 4183, 0x0000 }, { 4183, 0x0040 }, { 4184, 0x0000 }, { 4184, 0x0000 }, + { 4184, 0x0002 }, { 4185, 0x0000 }, { 4185, 0x0000 }, { 4185, 0x0000 }, + { 4185, 0x0000 }, { 4185, 0x0200 }, { 4186, 0x0000 }, { 4186, 0x0018 }, + { 4188, 0x1000 }, { 4189, 0x0000 }, { 4189, 0x0000 }, { 4189, 0x0000 }, + /* 0x26800 */ + { 4189, 0x0000 }, { 4189, 0x1000 }, { 4190, 0x0000 }, { 4190, 0x0000 }, + { 4190, 0x0040 }, { 4191, 0x4000 }, { 4192, 0x4000 }, { 4193, 0x0000 }, + { 4193, 0x0500 }, { 4195, 0x0008 }, { 4196, 0x0000 }, { 4196, 0x0000 }, + { 4196, 0x0080 }, { 4197, 0x0000 }, { 4197, 0x0000 }, { 4197, 0x0000 }, + /* 0x26900 */ + { 4197, 0x4000 }, { 4198, 0x0002 }, { 4199, 0x0040 }, { 4200, 0x0200 }, + { 4201, 0x0000 }, { 4201, 0x0002 }, { 4202, 0x0000 }, { 4202, 0x0000 }, + { 4202, 0x0000 }, { 4202, 0x0000 }, { 4202, 0x0100 }, { 4203, 0x0020 }, + { 4204, 0x0000 }, { 4204, 0x0000 }, { 4204, 0x0000 }, { 4204, 0x0404 }, + /* 0x26a00 */ + { 4206, 0x0000 }, { 4206, 0x0000 }, { 4206, 0x6000 }, { 4208, 0x0010 }, + { 4209, 0x0004 }, { 4210, 0x0006 }, { 4212, 0x0000 }, { 4212, 0x0000 }, + { 4212, 0x0000 }, { 4212, 0x0000 }, { 4212, 0x0000 }, { 4212, 0x0000 }, + { 4212, 0x0000 }, { 4212, 0x0000 }, { 4212, 0x0000 }, { 4212, 0x0000 }, + /* 0x26b00 */ + { 4212, 0x0420 }, { 4214, 0x0008 }, { 4215, 0x0100 }, { 4216, 0x0000 }, + { 4216, 0x0000 }, { 4216, 0x080f }, { 4221, 0x0000 }, { 4221, 0x0020 }, + { 4222, 0x0004 }, { 4223, 0x20c0 }, { 4226, 0x0000 }, { 4226, 0x0008 }, + { 4227, 0x0001 }, { 4228, 0x0000 }, { 4228, 0x0000 }, { 4228, 0x0080 }, + /* 0x26c00 */ + { 4229, 0x0000 }, { 4229, 0x0000 }, { 4229, 0x0002 }, { 4230, 0x0000 }, + { 4230, 0x0001 }, { 4231, 0x0000 }, { 4231, 0x0000 }, { 4231, 0xc000 }, + { 4233, 0x0007 }, { 4236, 0x0000 }, { 4236, 0x0010 }, { 4237, 0x2180 }, + { 4240, 0x0009 }, { 4242, 0x0002 }, { 4243, 0x0000 }, { 4243, 0x0000 }, + /* 0x26d00 */ + { 4243, 0x0000 }, { 4243, 0x0000 }, { 4243, 0x07fc }, { 4252, 0x0000 }, + { 4252, 0x0000 }, { 4252, 0x0002 }, { 4253, 0x0000 }, { 4253, 0x0000 }, + { 4253, 0x0000 }, { 4253, 0x0000 }, { 4253, 0x40ff }, { 4262, 0x0000 }, + { 4262, 0x0000 }, { 4262, 0x1000 }, { 4263, 0x0c00 }, { 4265, 0x0001 }, + /* 0x26e00 */ + { 4266, 0x00a1 }, { 4269, 0x0004 }, { 4270, 0x0000 }, { 4270, 0x0000 }, + { 4270, 0x003c }, { 4274, 0x0000 }, { 4274, 0x4000 }, { 4275, 0x0084 }, + { 4277, 0x0010 }, { 4278, 0x0200 }, { 4279, 0x0000 }, { 4279, 0x0000 }, + { 4279, 0x0000 }, { 4279, 0x00ff }, { 4287, 0x0000 }, { 4287, 0x0000 }, + /* 0x26f00 */ + { 4287, 0x0000 }, { 4287, 0x0000 }, { 4287, 0x0040 }, { 4288, 0x0000 }, + { 4288, 0x0000 }, { 4288, 0x0000 }, { 4288, 0x0000 }, { 4288, 0x0018 }, + { 4290, 0x0000 }, { 4290, 0x8000 }, { 4291, 0x0002 }, { 4292, 0x0000 }, + { 4292, 0x0000 }, { 4292, 0xc000 }, { 4294, 0x0000 }, { 4294, 0x0000 }, + /* 0x27000 */ + { 4294, 0x4000 }, { 4295, 0x0000 }, { 4295, 0x0000 }, { 4295, 0x0000 }, + { 4295, 0x0800 }, { 4296, 0x000c }, { 4298, 0x0000 }, { 4298, 0x0000 }, + { 4298, 0x0100 }, { 4299, 0x0000 }, { 4299, 0xe000 }, { 4302, 0x0000 }, + { 4302, 0x2000 }, { 4303, 0x0000 }, { 4303, 0x0000 }, { 4303, 0x0100 }, + /* 0x27100 */ + { 4304, 0x1200 }, { 4306, 0x0000 }, { 4306, 0x00c0 }, { 4308, 0x0000 }, + { 4308, 0x0000 }, { 4308, 0x0000 }, { 4308, 0x0030 }, { 4310, 0x0020 }, + { 4311, 0x0000 }, { 4311, 0x0000 }, { 4311, 0x0000 }, { 4311, 0x0000 }, + { 4311, 0x2000 }, { 4312, 0x0000 }, { 4312, 0x0000 }, { 4312, 0x0000 }, + /* 0x27200 */ + { 4312, 0x0000 }, { 4312, 0x0800 }, { 4313, 0x0000 }, { 4313, 0x0000 }, + { 4313, 0x0000 }, { 4313, 0x0000 }, { 4313, 0x0000 }, { 4313, 0x0000 }, + { 4313, 0x0821 }, { 4316, 0x0000 }, { 4316, 0x0000 }, { 4316, 0x0044 }, + { 4318, 0x0000 }, { 4318, 0x0000 }, { 4318, 0x0040 }, { 4319, 0x0000 }, + /* 0x27300 */ + { 4319, 0x0000 }, { 4319, 0x0000 }, { 4319, 0x0000 }, { 4319, 0x0000 }, + { 4319, 0x0000 }, { 4319, 0x0000 }, { 4319, 0x0000 }, { 4319, 0x0000 }, + { 4319, 0x0000 }, { 4319, 0x0400 }, { 4320, 0x0000 }, { 4320, 0x0000 }, + { 4320, 0x0000 }, { 4320, 0x0000 }, { 4320, 0x0000 }, { 4320, 0x0000 }, + /* 0x27400 */ + { 4320, 0x0000 }, { 4320, 0x0000 }, { 4320, 0x0004 }, { 4321, 0x0000 }, + { 4321, 0x0000 }, { 4321, 0x0001 }, { 4322, 0x0000 }, { 4322, 0x0000 }, + { 4322, 0x0050 }, { 4324, 0x0000 }, { 4324, 0x0000 }, { 4324, 0x0000 }, + { 4324, 0x0000 }, { 4324, 0x0000 }, { 4324, 0x0000 }, { 4324, 0x0000 }, + /* 0x27500 */ + { 4324, 0x0000 }, { 4324, 0x0000 }, { 4324, 0x0000 }, { 4324, 0x0000 }, + { 4324, 0x0000 }, { 4324, 0x0000 }, { 4324, 0x0000 }, { 4324, 0x0010 }, + { 4325, 0x0000 }, { 4325, 0x0000 }, { 4325, 0x0008 }, { 4326, 0x0000 }, + { 4326, 0x0000 }, { 4326, 0x0000 }, { 4326, 0x0011 }, { 4328, 0x6000 }, + /* 0x27600 */ + { 4330, 0x1080 }, { 4332, 0x0000 }, { 4332, 0x0000 }, { 4332, 0x0204 }, + { 4334, 0x0000 }, { 4334, 0x00e0 }, { 4337, 0x0000 }, { 4337, 0x0000 }, + { 4337, 0x0000 }, { 4337, 0x0010 }, { 4338, 0x0000 }, { 4338, 0x0000 }, + { 4338, 0x0000 }, { 4338, 0x0000 }, { 4338, 0x0000 }, { 4338, 0x0000 }, + /* 0x27700 */ + { 4338, 0x8000 }, { 4339, 0x0000 }, { 4339, 0x0000 }, { 4339, 0x0060 }, + { 4341, 0x0002 }, { 4342, 0x4000 }, { 4343, 0x0000 }, { 4343, 0x0000 }, + { 4343, 0x0030 }, { 4345, 0x0000 }, { 4345, 0x0000 }, { 4345, 0x0000 }, + { 4345, 0x1000 }, { 4346, 0x0000 }, { 4346, 0x0000 }, { 4346, 0x0000 }, + /* 0x27800 */ + { 4346, 0x0000 }, { 4346, 0x0000 }, { 4346, 0x0000 }, { 4346, 0x0000 }, + { 4346, 0x0000 }, { 4346, 0x0100 }, { 4347, 0x0000 }, { 4347, 0x0001 }, + { 4348, 0x0000 }, { 4348, 0x2000 }, { 4349, 0x0000 }, { 4349, 0x0004 }, + { 4350, 0x0100 }, { 4351, 0x0000 }, { 4351, 0x0000 }, { 4351, 0x0000 }, + /* 0x27900 */ + { 4351, 0x0000 }, { 4351, 0x0000 }, { 4351, 0x0010 }, { 4352, 0x0000 }, + { 4352, 0x0000 }, { 4352, 0x0000 }, { 4352, 0x0080 }, { 4353, 0x0400 }, + { 4354, 0x0000 }, { 4354, 0x0000 }, { 4354, 0x0001 }, { 4355, 0x0000 }, + { 4355, 0x0000 }, { 4355, 0x2000 }, { 4356, 0x0000 }, { 4356, 0x2000 }, + /* 0x27a00 */ + { 4357, 0x4400 }, { 4359, 0x0000 }, { 4359, 0x0000 }, { 4359, 0x4000 }, + { 4360, 0x0000 }, { 4360, 0x0208 }, { 4362, 0x0000 }, { 4362, 0x0200 }, + { 4363, 0x0010 }, { 4364, 0x0000 }, { 4364, 0x0000 }, { 4364, 0x6000 }, + { 4366, 0x0000 }, { 4366, 0x0000 }, { 4366, 0x0000 }, { 4366, 0x0010 }, + /* 0x27b00 */ + { 4367, 0x0840 }, { 4369, 0x0100 }, { 4370, 0x0000 }, { 4370, 0x0700 }, + { 4373, 0x0100 }, { 4374, 0x0000 }, { 4374, 0x0000 }, { 4374, 0x0000 }, + { 4374, 0x0000 }, { 4374, 0x0000 }, { 4374, 0x0000 }, { 4374, 0x0000 }, + { 4374, 0x0000 }, { 4374, 0x0000 }, { 4374, 0x0000 }, { 4374, 0x0010 }, + /* 0x27c00 */ + { 4375, 0x0000 }, { 4375, 0x0004 }, { 4376, 0x0000 }, { 4376, 0x0000 }, + { 4376, 0x0000 }, { 4376, 0x0000 }, { 4376, 0x0000 }, { 4376, 0x0000 }, + { 4376, 0x0000 }, { 4376, 0x0000 }, { 4376, 0x0000 }, { 4376, 0x0000 }, + { 4376, 0x0000 }, { 4376, 0x0000 }, { 4376, 0x0000 }, { 4376, 0x0000 }, + /* 0x27d00 */ + { 4376, 0x0000 }, { 4376, 0x0000 }, { 4376, 0x8000 }, { 4377, 0x0000 }, + { 4377, 0x0000 }, { 4377, 0x0018 }, { 4379, 0x0040 }, { 4380, 0x0008 }, + { 4381, 0x8010 }, { 4383, 0x0100 }, { 4384, 0x0000 }, { 4384, 0x2000 }, + { 4385, 0x0000 }, { 4385, 0x1000 }, { 4386, 0x0000 }, { 4386, 0x0000 }, + /* 0x27e00 */ + { 4386, 0x0000 }, { 4386, 0x0000 }, { 4386, 0x0000 }, { 4386, 0x0000 }, + { 4386, 0xa000 }, { 4388, 0x0000 }, { 4388, 0x0000 }, { 4388, 0x0000 }, + { 4388, 0x0000 }, { 4388, 0x0000 }, { 4388, 0x0000 }, { 4388, 0x0000 }, + { 4388, 0x0000 }, { 4388, 0x0000 }, { 4388, 0x0000 }, { 4388, 0x0000 }, + /* 0x27f00 */ + { 4388, 0x0000 }, { 4388, 0x0000 }, { 4388, 0x4000 }, { 4389, 0x0000 }, + { 4389, 0x0000 }, { 4389, 0x0000 }, { 4389, 0x0000 }, { 4389, 0x0000 }, + { 4389, 0x0000 }, { 4389, 0x0000 }, { 4389, 0x0000 }, { 4389, 0x0000 }, + { 4389, 0x0000 }, { 4389, 0x0000 }, { 4389, 0x0000 }, { 4389, 0x0200 }, + /* 0x28000 */ + { 4390, 0x0204 }, { 4392, 0x4000 }, { 4393, 0x0018 }, { 4395, 0x0000 }, + { 4395, 0x0100 }, { 4396, 0x0000 }, { 4396, 0x0000 }, { 4396, 0x0000 }, + { 4396, 0x0008 }, { 4397, 0x0001 }, { 4398, 0x0000 }, { 4398, 0x6000 }, + { 4400, 0x0000 }, { 4400, 0x0000 }, { 4400, 0x0300 }, { 4402, 0x0010 }, + /* 0x28100 */ + { 4403, 0x0000 }, { 4403, 0x0000 }, { 4403, 0x4000 }, { 4404, 0x0000 }, + { 4404, 0x8000 }, { 4405, 0x2000 }, { 4406, 0x8000 }, { 4407, 0x0000 }, + { 4407, 0x0200 }, { 4408, 0x0000 }, { 4408, 0x8000 }, { 4409, 0x1000 }, + { 4410, 0x0000 }, { 4410, 0x0000 }, { 4410, 0x0000 }, { 4410, 0x0000 }, + /* 0x28200 */ + { 4410, 0x0080 }, { 4411, 0x0500 }, { 4413, 0x0000 }, { 4413, 0x0000 }, + { 4413, 0x0000 }, { 4413, 0x0040 }, { 4414, 0x0000 }, { 4414, 0x1000 }, + { 4415, 0x0000 }, { 4415, 0x0800 }, { 4416, 0x0000 }, { 4416, 0x0000 }, + { 4416, 0x2000 }, { 4417, 0x0000 }, { 4417, 0x0004 }, { 4418, 0x0000 }, + /* 0x28300 */ + { 4418, 0x0040 }, { 4419, 0x0100 }, { 4420, 0x8000 }, { 4421, 0x0400 }, + { 4422, 0x0000 }, { 4422, 0x0000 }, { 4422, 0x2020 }, { 4424, 0x2000 }, + { 4425, 0x0400 }, { 4426, 0x0000 }, { 4426, 0x0000 }, { 4426, 0x0000 }, + { 4426, 0x0000 }, { 4426, 0x0000 }, { 4426, 0x0000 }, { 4426, 0x0000 }, + /* 0x28400 */ + { 4426, 0x0000 }, { 4426, 0x0004 }, { 4427, 0x0000 }, { 4427, 0x0000 }, + { 4427, 0x0000 }, { 4427, 0x0000 }, { 4427, 0x1100 }, { 4429, 0x0008 }, + { 4430, 0x0004 }, { 4431, 0x0000 }, { 4431, 0x0000 }, { 4431, 0x0000 }, + { 4431, 0x0000 }, { 4431, 0x0000 }, { 4431, 0x0000 }, { 4431, 0x0000 }, + /* 0x28500 */ + { 4431, 0x0002 }, { 4432, 0x0000 }, { 4432, 0x0000 }, { 4432, 0x3000 }, + { 4434, 0x0000 }, { 4434, 0x0000 }, { 4434, 0x1000 }, { 4435, 0x0000 }, + { 4435, 0x0000 }, { 4435, 0x0000 }, { 4435, 0x0000 }, { 4435, 0x0000 }, + { 4435, 0x0000 }, { 4435, 0x0000 }, { 4435, 0x0100 }, { 4436, 0x0010 }, + /* 0x28600 */ + { 4437, 0x0801 }, { 4439, 0x0000 }, { 4439, 0x0020 }, { 4440, 0x0800 }, + { 4441, 0x0000 }, { 4441, 0x0000 }, { 4441, 0x0000 }, { 4441, 0x0000 }, + { 4441, 0x0000 }, { 4441, 0x0000 }, { 4441, 0x0c00 }, { 4443, 0x1000 }, + { 4444, 0x0000 }, { 4444, 0x0100 }, { 4445, 0x0040 }, { 4446, 0x0000 }, + /* 0x28700 */ + { 4446, 0x0000 }, { 4446, 0x0008 }, { 4447, 0x0000 }, { 4447, 0x0000 }, + { 4447, 0x0000 }, { 4447, 0x0000 }, { 4447, 0x0000 }, { 4447, 0x0000 }, + { 4447, 0x0000 }, { 4447, 0x0000 }, { 4447, 0x0000 }, { 4447, 0x0000 }, + { 4447, 0x0000 }, { 4447, 0x0000 }, { 4447, 0x0000 }, { 4447, 0x0000 }, + /* 0x28800 */ + { 4447, 0x0010 }, { 4448, 0x0000 }, { 4448, 0x0800 }, { 4449, 0x0000 }, + { 4449, 0x0000 }, { 4449, 0x0000 }, { 4449, 0x0000 }, { 4449, 0x0000 }, + { 4449, 0x0000 }, { 4449, 0x0000 }, { 4449, 0x0000 }, { 4449, 0x0000 }, + { 4449, 0x0000 }, { 4449, 0x0000 }, { 4449, 0x0000 }, { 4449, 0x0000 }, + /* 0x28900 */ + { 4449, 0x0000 }, { 4449, 0x0000 }, { 4449, 0x0000 }, { 4449, 0x0008 }, + { 4450, 0x0300 }, { 4452, 0x0040 }, { 4453, 0x1110 }, { 4456, 0x4000 }, + { 4457, 0x0200 }, { 4458, 0x0000 }, { 4458, 0x0d00 }, { 4461, 0x1100 }, + { 4463, 0x0001 }, { 4464, 0x5000 }, { 4466, 0x0192 }, { 4470, 0x1e00 }, + /* 0x28a00 */ + { 4474, 0x8000 }, { 4475, 0x0040 }, { 4476, 0x0220 }, { 4478, 0x0040 }, + { 4479, 0x0ff0 }, { 4487, 0x0600 }, { 4489, 0x0000 }, { 4489, 0x0000 }, + { 4489, 0x000e }, { 4492, 0x1c00 }, { 4495, 0x0000 }, { 4495, 0x0000 }, + { 4495, 0x5841 }, { 4500, 0xc000 }, { 4502, 0x002f }, { 4507, 0x1000 }, + /* 0x28b00 */ + { 4508, 0x1000 }, { 4509, 0x0008 }, { 4510, 0xb806 }, { 4516, 0x0000 }, + { 4516, 0x5040 }, { 4519, 0x0001 }, { 4520, 0x1078 }, { 4525, 0x0000 }, + { 4525, 0x8000 }, { 4526, 0x3200 }, { 4529, 0x0000 }, { 4529, 0x0000 }, + { 4529, 0x0024 }, { 4531, 0x0690 }, { 4535, 0x1f80 }, { 4541, 0x8020 }, + /* 0x28c00 */ + { 4543, 0x0208 }, { 4545, 0x3000 }, { 4547, 0x0848 }, { 4550, 0x0a01 }, + { 4553, 0x0000 }, { 4553, 0x0000 }, { 4553, 0x0000 }, { 4553, 0x0000 }, + { 4553, 0x0000 }, { 4553, 0x0000 }, { 4553, 0x0000 }, { 4553, 0x0000 }, + { 4553, 0x2400 }, { 4555, 0x0004 }, { 4556, 0x0000 }, { 4556, 0x0000 }, + /* 0x28d00 */ + { 4556, 0x0000 }, { 4556, 0x0000 }, { 4556, 0x0000 }, { 4556, 0x0010 }, + { 4557, 0x0000 }, { 4557, 0x0000 }, { 4557, 0x0000 }, { 4557, 0x0000 }, + { 4557, 0x0000 }, { 4557, 0x0200 }, { 4558, 0x0000 }, { 4558, 0x0000 }, + { 4558, 0x0000 }, { 4558, 0x0000 }, { 4558, 0x0000 }, { 4558, 0x0000 }, + /* 0x28e00 */ + { 4558, 0x8000 }, { 4559, 0x0000 }, { 4559, 0x0000 }, { 4559, 0x0240 }, + { 4561, 0x0000 }, { 4561, 0x0000 }, { 4561, 0x0060 }, { 4563, 0x0000 }, + { 4563, 0x0000 }, { 4563, 0x0080 }, { 4564, 0x1000 }, { 4565, 0x000c }, + { 4567, 0x0000 }, { 4567, 0x0200 }, { 4568, 0x0080 }, { 4569, 0x0000 }, + /* 0x28f00 */ + { 4569, 0x0000 }, { 4569, 0x0000 }, { 4569, 0x0000 }, { 4569, 0x0000 }, + { 4569, 0x0000 }, { 4569, 0x0000 }, { 4569, 0x0000 }, { 4569, 0x0000 }, + { 4569, 0x0000 }, { 4569, 0x0000 }, { 4569, 0x0000 }, { 4569, 0x0000 }, + { 4569, 0x0020 }, { 4570, 0x0000 }, { 4570, 0x0000 }, { 4570, 0x0000 }, + /* 0x29000 */ + { 4570, 0x0000 }, { 4570, 0x0000 }, { 4570, 0x0000 }, { 4570, 0x0000 }, + { 4570, 0x0000 }, { 4570, 0x0000 }, { 4570, 0x0000 }, { 4570, 0x0000 }, + { 4570, 0x0900 }, { 4572, 0x0008 }, { 4573, 0x8000 }, { 4574, 0x0003 }, + { 4576, 0x0001 }, { 4577, 0x0000 }, { 4577, 0x3030 }, { 4581, 0x0000 }, + /* 0x29100 */ + { 4581, 0x2000 }, { 4582, 0x0001 }, { 4583, 0x0000 }, { 4583, 0x1000 }, + { 4584, 0x2000 }, { 4585, 0x4800 }, { 4587, 0x0000 }, { 4587, 0x0001 }, + { 4588, 0x0000 }, { 4588, 0x1000 }, { 4589, 0x0100 }, { 4590, 0x0000 }, + { 4590, 0x0000 }, { 4590, 0x0020 }, { 4591, 0x0800 }, +}; +static const Summary16 hkscs1999_uni2indx_page294[32] = { + /* 0x29400 */ + { 4592, 0x0000 }, { 4592, 0x2000 }, { 4593, 0x0001 }, { 4594, 0x8008 }, + { 4596, 0x0100 }, { 4597, 0x0000 }, { 4597, 0x0000 }, { 4597, 0x0000 }, + { 4597, 0x0000 }, { 4597, 0x0000 }, { 4597, 0x0000 }, { 4597, 0x0000 }, + { 4597, 0x0000 }, { 4597, 0x0601 }, { 4600, 0x00a0 }, { 4602, 0x0000 }, + /* 0x29500 */ + { 4602, 0x0000 }, { 4602, 0x0000 }, { 4602, 0x0000 }, { 4602, 0x0000 }, + { 4602, 0x0000 }, { 4602, 0x0000 }, { 4602, 0x0000 }, { 4602, 0x0000 }, + { 4602, 0x0000 }, { 4602, 0x4000 }, { 4603, 0x0000 }, { 4603, 0x0101 }, + { 4605, 0x0000 }, { 4605, 0x0080 }, { 4606, 0x0200 }, { 4607, 0x0010 }, +}; +static const Summary16 hkscs1999_uni2indx_page297[251] = { + /* 0x29700 */ + { 4608, 0x0000 }, { 4608, 0x0000 }, { 4608, 0x0001 }, { 4609, 0x0004 }, + { 4610, 0x0000 }, { 4610, 0x0000 }, { 4610, 0x0000 }, { 4610, 0x0000 }, + { 4610, 0x0000 }, { 4610, 0x0000 }, { 4610, 0x0000 }, { 4610, 0x0000 }, + { 4610, 0x0000 }, { 4610, 0x0010 }, { 4611, 0x0000 }, { 4611, 0x0000 }, + /* 0x29800 */ + { 4611, 0x0000 }, { 4611, 0x0001 }, { 4612, 0x0000 }, { 4612, 0x0000 }, + { 4612, 0x0000 }, { 4612, 0x0080 }, { 4613, 0x0000 }, { 4613, 0x0000 }, + { 4613, 0x0000 }, { 4613, 0x0000 }, { 4613, 0x0010 }, { 4614, 0x0000 }, + { 4614, 0x0000 }, { 4614, 0x0002 }, { 4615, 0x0400 }, { 4616, 0x0002 }, + /* 0x29900 */ + { 4617, 0x0028 }, { 4619, 0x0000 }, { 4619, 0x8000 }, { 4620, 0x0000 }, + { 4620, 0x0300 }, { 4622, 0x2000 }, { 4623, 0x0400 }, { 4624, 0x0000 }, + { 4624, 0x0000 }, { 4624, 0x2000 }, { 4625, 0x0000 }, { 4625, 0x0000 }, + { 4625, 0x0208 }, { 4627, 0x0000 }, { 4627, 0x0000 }, { 4627, 0x0000 }, + /* 0x29a00 */ + { 4627, 0x0000 }, { 4627, 0x0000 }, { 4627, 0x0100 }, { 4628, 0x0000 }, + { 4628, 0x2000 }, { 4629, 0x0000 }, { 4629, 0x0000 }, { 4629, 0x0000 }, + { 4629, 0x0000 }, { 4629, 0x0000 }, { 4629, 0x0000 }, { 4629, 0x0000 }, + { 4629, 0x0000 }, { 4629, 0x0000 }, { 4629, 0x0000 }, { 4629, 0x0000 }, + /* 0x29b00 */ + { 4629, 0x4020 }, { 4631, 0x0000 }, { 4631, 0x0000 }, { 4631, 0x0000 }, + { 4631, 0x0000 }, { 4631, 0x0000 }, { 4631, 0x0000 }, { 4631, 0x0000 }, + { 4631, 0x0000 }, { 4631, 0x0000 }, { 4631, 0x0000 }, { 4631, 0x0000 }, + { 4631, 0x0000 }, { 4631, 0x0020 }, { 4632, 0x0000 }, { 4632, 0x0000 }, + /* 0x29c00 */ + { 4632, 0x0000 }, { 4632, 0x0000 }, { 4632, 0x0000 }, { 4632, 0x0000 }, + { 4632, 0x0000 }, { 4632, 0x0000 }, { 4632, 0x0000 }, { 4632, 0x0000 }, + { 4632, 0x0000 }, { 4632, 0x0000 }, { 4632, 0x2000 }, { 4633, 0x0000 }, + { 4633, 0x0000 }, { 4633, 0x0000 }, { 4633, 0x0000 }, { 4633, 0x0000 }, + /* 0x29d00 */ + { 4633, 0x0000 }, { 4633, 0x0000 }, { 4633, 0x0000 }, { 4633, 0x4000 }, + { 4634, 0x0000 }, { 4634, 0x0400 }, { 4635, 0x0000 }, { 4635, 0x1000 }, + { 4636, 0x0000 }, { 4636, 0x0900 }, { 4638, 0x0000 }, { 4638, 0x0000 }, + { 4638, 0x0000 }, { 4638, 0x0000 }, { 4638, 0x0000 }, { 4638, 0x0040 }, + /* 0x29e00 */ + { 4639, 0x0040 }, { 4640, 0x0000 }, { 4640, 0x2000 }, { 4641, 0x0000 }, + { 4641, 0x0000 }, { 4641, 0x0000 }, { 4641, 0x0100 }, { 4642, 0x0000 }, + { 4642, 0x0000 }, { 4642, 0x0000 }, { 4642, 0x1000 }, { 4643, 0x0000 }, + { 4643, 0x0008 }, { 4644, 0x0000 }, { 4644, 0x0000 }, { 4644, 0x0100 }, + /* 0x29f00 */ + { 4645, 0x0000 }, { 4645, 0x0000 }, { 4645, 0x0008 }, { 4646, 0x0001 }, + { 4647, 0x0000 }, { 4647, 0x0000 }, { 4647, 0x0000 }, { 4647, 0x0000 }, + { 4647, 0x0000 }, { 4647, 0x0000 }, { 4647, 0x0000 }, { 4647, 0x0080 }, + { 4648, 0x0000 }, { 4648, 0x4000 }, { 4649, 0x0000 }, { 4649, 0x0000 }, + /* 0x2a000 */ + { 4649, 0x0000 }, { 4649, 0x0010 }, { 4650, 0x0000 }, { 4650, 0x0000 }, + { 4650, 0x0000 }, { 4650, 0x0000 }, { 4650, 0x0000 }, { 4650, 0x0000 }, + { 4650, 0x0080 }, { 4651, 0x0000 }, { 4651, 0x0000 }, { 4651, 0x0200 }, + { 4652, 0x0000 }, { 4652, 0x0000 }, { 4652, 0x2002 }, { 4654, 0x4108 }, + /* 0x2a100 */ + { 4657, 0x0000 }, { 4657, 0x0000 }, { 4657, 0x0008 }, { 4658, 0x0018 }, + { 4660, 0x0000 }, { 4660, 0x0001 }, { 4661, 0x0000 }, { 4661, 0x0000 }, + { 4661, 0x0000 }, { 4661, 0x000c }, { 4663, 0x0800 }, { 4664, 0x0010 }, + { 4665, 0x0000 }, { 4665, 0x8000 }, { 4666, 0x0000 }, { 4666, 0x0020 }, + /* 0x2a200 */ + { 4667, 0x0000 }, { 4667, 0x0000 }, { 4667, 0x0001 }, { 4668, 0x0008 }, + { 4669, 0x0000 }, { 4669, 0x0000 }, { 4669, 0x0000 }, { 4669, 0x0000 }, + { 4669, 0x0000 }, { 4669, 0x8008 }, { 4671, 0x0000 }, { 4671, 0x2054 }, + { 4675, 0x0000 }, { 4675, 0x8000 }, { 4676, 0x0000 }, { 4676, 0x8000 }, + /* 0x2a300 */ + { 4677, 0x0000 }, { 4677, 0x0000 }, { 4677, 0x0000 }, { 4677, 0x0000 }, + { 4677, 0x0000 }, { 4677, 0x0000 }, { 4677, 0x0000 }, { 4677, 0x0000 }, + { 4677, 0x0000 }, { 4677, 0x0000 }, { 4677, 0x0200 }, { 4678, 0x0000 }, + { 4678, 0x0000 }, { 4678, 0x0000 }, { 4678, 0x0000 }, { 4678, 0x0000 }, + /* 0x2a400 */ + { 4678, 0x0000 }, { 4678, 0x0000 }, { 4678, 0x0000 }, { 4678, 0x0010 }, + { 4679, 0x0000 }, { 4679, 0x0800 }, { 4680, 0x0000 }, { 4680, 0x0000 }, + { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, + { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, + /* 0x2a500 */ + { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, + { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, + { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, { 4680, 0x0000 }, + { 4680, 0x0840 }, { 4682, 0x0000 }, { 4682, 0x0000 }, { 4682, 0x0000 }, + /* 0x2a600 */ + { 4682, 0x0002 }, { 4683, 0x0000 }, { 4683, 0x0000 }, { 4683, 0x0004 }, + { 4684, 0x0400 }, { 4685, 0x0800 }, { 4686, 0x0000 }, { 4686, 0x0000 }, + { 4686, 0x0000 }, { 4686, 0x0000 }, { 4686, 0x0200 }, +}; +static const Summary16 hkscs1999_uni2indx_page2f8[30] = { + /* 0x2f800 */ + { 4687, 0x0000 }, { 4687, 0x0000 }, { 4687, 0x0020 }, { 4688, 0x0800 }, + { 4689, 0x0001 }, { 4690, 0x0000 }, { 4690, 0x0000 }, { 4690, 0x0100 }, + { 4691, 0x0000 }, { 4691, 0x0010 }, { 4692, 0x0040 }, { 4693, 0x0000 }, + { 4693, 0x2000 }, { 4694, 0x0000 }, { 4694, 0x0000 }, { 4694, 0x0000 }, + /* 0x2f900 */ + { 4694, 0x0000 }, { 4694, 0x0000 }, { 4694, 0x0000 }, { 4694, 0x0000 }, + { 4694, 0x0000 }, { 4694, 0x0000 }, { 4694, 0x0000 }, { 4694, 0x0000 }, + { 4694, 0x0000 }, { 4694, 0x0010 }, { 4695, 0x0000 }, { 4695, 0x1004 }, + { 4697, 0x0000 }, { 4697, 0x0010 }, +}; + +static int +hkscs1999_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0000 && wc < 0x02d0) + summary = &hkscs1999_uni2indx_page00[(wc>>4)]; + else if (wc >= 0x0400 && wc < 0x0460) + summary = &hkscs1999_uni2indx_page04[(wc>>4)-0x040]; + else if (wc >= 0x1e00 && wc < 0x1ed0) + summary = &hkscs1999_uni2indx_page1e[(wc>>4)-0x1e0]; + else if (wc >= 0x2100 && wc < 0x21f0) + summary = &hkscs1999_uni2indx_page21[(wc>>4)-0x210]; + else if (wc >= 0x2300 && wc < 0x2580) + summary = &hkscs1999_uni2indx_page23[(wc>>4)-0x230]; + else if (wc >= 0x2700 && wc < 0x2740) + summary = &hkscs1999_uni2indx_page27[(wc>>4)-0x270]; + else if (wc >= 0x2e00 && wc < 0x3240) + summary = &hkscs1999_uni2indx_page2e[(wc>>4)-0x2e0]; + else if (wc >= 0x3400 && wc < 0x9fc0) + summary = &hkscs1999_uni2indx_page34[(wc>>4)-0x340]; + else if (wc >= 0xf900 && wc < 0xf910) + summary = &hkscs1999_uni2indx_pagef9[(wc>>4)-0xf90]; + else if (wc >= 0xff00 && wc < 0xfff0) + summary = &hkscs1999_uni2indx_pageff[(wc>>4)-0xff0]; + else if (wc >= 0x20000 && wc < 0x291f0) + summary = &hkscs1999_uni2indx_page200[(wc>>4)-0x2000]; + else if (wc >= 0x29400 && wc < 0x29600) + summary = &hkscs1999_uni2indx_page294[(wc>>4)-0x2940]; + else if (wc >= 0x29700 && wc < 0x2a6b0) + summary = &hkscs1999_uni2indx_page297[(wc>>4)-0x2970]; + else if (wc >= 0x2f800 && wc < 0x2f9e0) + summary = &hkscs1999_uni2indx_page2f8[(wc>>4)-0x2f80]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = hkscs1999_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/hkscs2001.h b/jni/parted/libiconv/lib/hkscs2001.h new file mode 100755 index 0000000..45351ab --- /dev/null +++ b/jni/parted/libiconv/lib/hkscs2001.h @@ -0,0 +1,682 @@ +/* + * Copyright (C) 1999-2006, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * HKSCS:2001 + */ + +static const unsigned short hkscs2001_2uni_page8c[123] = { + /* 0x8c */ + 0x0a3b, 0x1cfe, 0x5273, 0x37a6, 0x02c9, 0x2d8f, 0x414e, 0x1d77, + 0x12f5, 0x0620, 0x45cd, 0x0059, 0x4830, 0x1622, 0x4f32, 0x30a7, + 0x31f6, 0x1e91, 0x1819, 0x20ba, 0x3e81, 0x5307, 0x018b, 0x3a80, + 0x0610, 0x24e4, 0x2102, 0x0bae, 0x4d0f, 0x0409, 0x1a63, 0x54ba, + 0x0523, 0x2c0f, 0x38fd, 0x252a, 0x5147, 0x4fea, 0x3455, 0x1d4d, + 0x0c24, 0x3c7e, 0x33f4, 0x22d9, 0x4ee3, 0x37a7, 0x23dd, 0x08a3, + 0x09f0, 0x0abc, 0x082f, 0x0917, 0x37a8, 0x0d34, 0x288b, 0x0f92, + 0x0fd0, 0x3bb6, 0x1492, 0x1499, 0x15c2, 0x3d12, 0x178b, 0x3ff9, + 0x1919, 0x1a43, 0x4063, 0x1bff, 0x38fd, 0x1f00, 0x4205, 0x208c, + 0x03db, 0x4413, 0x1115, 0x21b9, 0x2e83, 0x47a4, 0x4695, 0x2593, + 0x26ec, 0x27c3, 0x296c, 0x2af8, 0x2b97, 0x37a9, 0x2d90, 0x37aa, + 0x2fb9, 0x37ab, 0x30cf, 0x2b5f, 0x36e0, 0x3221, 0x37ac, 0x50b9, + 0x393f, 0x0471, 0x05a2, 0x101a, 0x38fd, 0x38fd, 0x38fd, 0x3568, + 0x186b, 0x0576, 0x0e3d, 0x38fd, 0x2bd6, 0x437b, 0x2abf, 0x4c0d, + 0x0781, 0x4a74, 0x137b, 0x4915, 0x4bbe, 0x37ad, 0x37ae, 0x1196, + 0x37af, 0x38fd, 0x295b, +}; + +static const ucs4_t hkscs2001_2uni_upages[85] = { + 0x03500, 0x03c00, 0x03d00, 0x03e00, 0x04000, 0x04200, 0x04b00, 0x04c00, + 0x04e00, 0x04f00, 0x05000, 0x05100, 0x05300, 0x05400, 0x05700, 0x05800, + 0x05a00, 0x05b00, 0x05c00, 0x05d00, 0x05e00, 0x05f00, 0x06100, 0x06500, + 0x06700, 0x06900, 0x06a00, 0x06c00, 0x06d00, 0x07000, 0x07100, 0x07200, + 0x07300, 0x07400, 0x07600, 0x07700, 0x07800, 0x07a00, 0x07b00, 0x07c00, + 0x07d00, 0x07e00, 0x08200, 0x08500, 0x08600, 0x08800, 0x08b00, 0x08e00, + 0x08f00, 0x09100, 0x09200, 0x09300, 0x09700, 0x09800, 0x09900, 0x09f00, + 0x0ff00, 0x21400, 0x21900, 0x21d00, 0x22000, 0x22700, 0x23200, 0x23300, + 0x23c00, 0x24100, 0x24500, 0x24900, 0x24a00, 0x25100, 0x25600, 0x25c00, + 0x25d00, 0x26b00, 0x26d00, 0x26f00, 0x27100, 0x28700, 0x28900, 0x28a00, + 0x28d00, 0x29900, 0x29c00, 0x2a100, 0x2a200, +}; + +static int +hkscs2001_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if (c1 == 0x8c) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + unsigned int i = 157 * (c1 - 0x80) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + ucs4_t wc = 0xfffd; + unsigned short swc; + { + if (i < 2007) + swc = hkscs2001_2uni_page8c[i-1884], + wc = hkscs2001_2uni_upages[swc>>8] | (swc & 0xff); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short hkscs2001_2charset[116] = { + 0x8c4b, 0x8c56, 0x8c44, 0x8caa, 0x8c5d, 0x8cc3, 0x8c60, 0x8ccb, + 0x8cc4, 0x8c58, 0x8c49, 0x8cd2, 0x8c72, 0x8c6f, 0x8c73, 0x8c70, + 0x8c40, 0x8c71, 0x8c5b, 0x8c68, 0x8c75, 0x8ccc, 0x8c77, 0x8c78, + 0x8cc5, 0x8cac, 0x8cd9, 0x8c48, 0x8cd4, 0x8c7a, 0x8c7b, 0x8c7c, + 0x8c4d, 0x8c7e, 0x8c52, 0x8cca, 0x8ca2, 0x8ca3, 0x8c5e, 0x8ca5, + 0x8c41, 0x8c67, 0x8c47, 0x8c51, 0x8ca7, 0x8ca9, 0x8c53, 0x8c5a, + 0x8cad, 0x8c6b, 0x8c6e, 0x8c59, 0x8c63, 0x8cb1, 0x8cb2, 0x8cb3, + 0x8c76, 0x8cdc, 0x8cb4, 0x8cd0, 0x8cb5, 0x8cbd, 0x8cb6, 0x8cce, + 0x8c61, 0x8c45, 0x8cb8, 0x8cae, 0x8cba, 0x8c4f, 0x8cbc, 0x8c50, + 0x8cbf, 0x8c6a, 0x8c66, 0x8cc9, 0x8cbe, 0x8c43, 0x8c6d, 0x8c74, + 0x8cb7, 0x8cb9, 0x8cbb, 0x8cc0, 0x8cd7, 0x8cd8, 0x8cda, 0x8cc2, + 0x8c57, 0x8c79, 0x8c69, 0x8c7d, 0x8c54, 0x8ca1, 0x8ca4, 0x8c46, + 0x8ca8, 0x8ccf, 0x8cab, 0x8c4a, 0x8cb0, 0x8caf, 0x8c4c, 0x8cd5, + 0x8cd3, 0x8cd6, 0x8cd1, 0x8c5c, 0x8c6c, 0x8c4e, 0x8c65, 0x8cc1, + 0x8c64, 0x8c42, 0x8c55, 0x8c5f, +}; + +static const Summary16 hkscs2001_uni2indx_page35[6] = { + /* 0x3500 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0200 }, +}; +static const Summary16 hkscs2001_uni2indx_page3c[46] = { + /* 0x3c00 */ + { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0000 }, + { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0000 }, + { 1, 0x0800 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + /* 0x3d00 */ + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + { 2, 0x0200 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + /* 0x3e00 */ + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0800 }, +}; +static const Summary16 hkscs2001_uni2indx_page40[8] = { + /* 0x4000 */ + { 4, 0x0200 }, { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0000 }, + { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0002 }, +}; +static const Summary16 hkscs2001_uni2indx_page42[11] = { + /* 0x4200 */ + { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0008 }, { 7, 0x0000 }, + { 7, 0x0000 }, { 7, 0x0000 }, { 7, 0x0000 }, { 7, 0x0040 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0004 }, +}; +static const Summary16 hkscs2001_uni2indx_page4b[25] = { + /* 0x4b00 */ + { 9, 0x0000 }, { 9, 0x0001 }, { 10, 0x0001 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + /* 0x4c00 */ + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0002 }, +}; +static const Summary16 hkscs2001_uni2indx_page4e[59] = { + /* 0x4e00 */ + { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x8000 }, { 13, 0x0000 }, + { 13, 0x0000 }, { 13, 0x0000 }, { 13, 0x0000 }, { 13, 0x0000 }, + { 13, 0x0000 }, { 13, 0x0000 }, { 13, 0x0008 }, { 14, 0x0000 }, + { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, + /* 0x4f00 */ + { 14, 0x0000 }, { 14, 0x0080 }, { 15, 0x0000 }, { 15, 0x0000 }, + { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, + { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, + { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0001 }, + /* 0x5000 */ + { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0800 }, + { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, + { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x1000 }, + { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, + /* 0x5100 */ + { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, + { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, + { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x4000 }, +}; +static const Summary16 hkscs2001_uni2indx_page53[20] = { + /* 0x5300 */ + { 19, 0x0000 }, { 19, 0x0000 }, { 19, 0x0010 }, { 20, 0x0000 }, + { 20, 0x0000 }, { 20, 0x0000 }, { 20, 0x0000 }, { 20, 0x0000 }, + { 20, 0x0000 }, { 20, 0x0000 }, { 20, 0x0000 }, { 20, 0x0000 }, + { 20, 0x0000 }, { 20, 0x0000 }, { 20, 0x0000 }, { 20, 0x0000 }, + /* 0x5400 */ + { 20, 0x0000 }, { 20, 0x0000 }, { 20, 0x0000 }, { 20, 0x0010 }, +}; +static const Summary16 hkscs2001_uni2indx_page57[30] = { + /* 0x5700 */ + { 21, 0x0000 }, { 21, 0x0000 }, { 21, 0x0000 }, { 21, 0x2000 }, + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + /* 0x5800 */ + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + { 22, 0x0000 }, { 22, 0x0004 }, { 23, 0x0000 }, { 23, 0x0000 }, + { 23, 0x0000 }, { 23, 0x0001 }, +}; +static const Summary16 hkscs2001_uni2indx_page5a[93] = { + /* 0x5a00 */ + { 24, 0x0000 }, { 24, 0x0400 }, { 25, 0x0000 }, { 25, 0x0000 }, + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, + /* 0x5b00 */ + { 25, 0x0000 }, { 25, 0x0020 }, { 26, 0x0000 }, { 26, 0x0000 }, + { 26, 0x0000 }, { 26, 0x0000 }, { 26, 0x0000 }, { 26, 0x0000 }, + { 26, 0x0000 }, { 26, 0x0040 }, { 27, 0x0000 }, { 27, 0x0000 }, + { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, + /* 0x5c00 */ + { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, + { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, + { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, + { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0020 }, + /* 0x5d00 */ + { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, + { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0800 }, + { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, + { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, + /* 0x5e00 */ + { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, + { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, + { 29, 0x0000 }, { 29, 0x0204 }, { 31, 0x0000 }, { 31, 0x0000 }, + { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0000 }, + /* 0x5f00 */ + { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0000 }, + { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0000 }, + { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0000 }, + { 31, 0x0004 }, +}; +static const Summary16 hkscs2001_uni2indx_page61[3] = { + /* 0x6100 */ + { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0004 }, +}; +static const Summary16 hkscs2001_uni2indx_page65[9] = { + /* 0x6500 */ + { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, + { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, + { 33, 0x0800 }, +}; +static const Summary16 hkscs2001_uni2indx_page67[7] = { + /* 0x6700 */ + { 34, 0x0000 }, { 34, 0x0200 }, { 35, 0x0000 }, { 35, 0x0000 }, + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0800 }, +}; +static const Summary16 hkscs2001_uni2indx_page69[23] = { + /* 0x6900 */ + { 36, 0x0000 }, { 36, 0x0200 }, { 37, 0x0000 }, { 37, 0x0000 }, + { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, + { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, + { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, + /* 0x6a00 */ + { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, + { 37, 0x0008 }, { 38, 0x0000 }, { 38, 0x0008 }, +}; +static const Summary16 hkscs2001_uni2indx_page6c[32] = { + /* 0x6c00 */ + { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, + { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, + { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, + { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x8000 }, + /* 0x6d00 */ + { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, + { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, + { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, + { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x4000 }, +}; +static const Summary16 hkscs2001_uni2indx_page70[76] = { + /* 0x7000 */ + { 41, 0x0000 }, { 41, 0x0000 }, { 41, 0x0000 }, { 41, 0x0000 }, + { 41, 0x2000 }, { 42, 0x0000 }, { 42, 0x0000 }, { 42, 0x0080 }, + { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, + { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, + /* 0x7100 */ + { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, + { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, { 43, 0x0000 }, + { 43, 0x0000 }, { 43, 0x0002 }, { 44, 0x0000 }, { 44, 0x0000 }, + { 44, 0x0000 }, { 44, 0x0000 }, { 44, 0x0000 }, { 44, 0x0000 }, + /* 0x7200 */ + { 44, 0x0001 }, { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, + { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, + { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, + { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, + /* 0x7300 */ + { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, + { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, { 45, 0x0000 }, + { 45, 0x1000 }, { 46, 0x0000 }, { 46, 0x0000 }, { 46, 0x0400 }, + { 47, 0x0000 }, { 47, 0x0000 }, { 47, 0x0000 }, { 47, 0x0000 }, + /* 0x7400 */ + { 47, 0x0004 }, { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, + { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, + { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0200 }, +}; +static const Summary16 hkscs2001_uni2indx_page76[47] = { + /* 0x7600 */ + { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, + { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, + { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, + { 49, 0x0000 }, { 49, 0x0200 }, { 50, 0x0000 }, { 50, 0x0000 }, + /* 0x7700 */ + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + { 50, 0x0000 }, { 50, 0x2000 }, { 51, 0x0000 }, { 51, 0x0000 }, + /* 0x7800 */ + { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, + { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, + { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, + { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0010 }, +}; +static const Summary16 hkscs2001_uni2indx_page7a[71] = { + /* 0x7a00 */ + { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0400 }, { 53, 0x0000 }, + { 53, 0x0000 }, { 53, 0x0000 }, { 53, 0x0000 }, { 53, 0x0000 }, + { 53, 0x0000 }, { 53, 0x0008 }, { 54, 0x0000 }, { 54, 0x0000 }, + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, + /* 0x7b00 */ + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x1000 }, { 55, 0x0000 }, + /* 0x7c00 */ + { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, + { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, + { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, + { 55, 0x0008 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, + /* 0x7d00 */ + { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, + { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, + { 56, 0x0800 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + /* 0x7e00 */ + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + { 57, 0x0000 }, { 57, 0x0800 }, { 58, 0x1000 }, +}; +static const Summary16 hkscs2001_uni2indx_page82[16] = { + /* 0x8200 */ + { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, + { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, + { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x8000 }, + { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0100 }, +}; +static const Summary16 hkscs2001_uni2indx_page85[17] = { + /* 0x8500 */ + { 61, 0x0000 }, { 61, 0x0000 }, { 61, 0x0000 }, { 61, 0x0000 }, + { 61, 0x0000 }, { 61, 0x8000 }, { 62, 0x0000 }, { 62, 0x0000 }, + { 62, 0x0000 }, { 62, 0x0080 }, { 63, 0x0000 }, { 63, 0x0000 }, + { 63, 0x0000 }, { 63, 0x0040 }, { 64, 0x0000 }, { 64, 0x0000 }, + /* 0x8600 */ + { 64, 0x8000 }, +}; +static const Summary16 hkscs2001_uni2indx_page88[10] = { + /* 0x8800 */ + { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, + { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, + { 65, 0x8000 }, { 66, 0x0001 }, +}; +static const Summary16 hkscs2001_uni2indx_page8b[9] = { + /* 0x8b00 */ + { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, + { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, + { 67, 0x0008 }, +}; +static const Summary16 hkscs2001_uni2indx_page8e[29] = { + /* 0x8e00 */ + { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0000 }, + { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0000 }, + { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0200 }, + { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, + /* 0x8f00 */ + { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, + { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, + { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0080 }, { 70, 0x0000 }, + { 70, 0x8000 }, +}; +static const Summary16 hkscs2001_uni2indx_page91[48] = { + /* 0x9100 */ + { 71, 0x0000 }, { 71, 0x0000 }, { 71, 0x0000 }, { 71, 0x0000 }, + { 71, 0x0000 }, { 71, 0x0000 }, { 71, 0x0000 }, { 71, 0x0000 }, + { 71, 0x0000 }, { 71, 0x0000 }, { 71, 0x0000 }, { 71, 0x0000 }, + { 71, 0x0000 }, { 71, 0x0000 }, { 71, 0x0000 }, { 71, 0x0040 }, + /* 0x9200 */ + { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x0002 }, { 73, 0x0000 }, + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, + /* 0x9300 */ + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0010 }, +}; +static const Summary16 hkscs2001_uni2indx_page97[47] = { + /* 0x9700 */ + { 74, 0x0000 }, { 74, 0x0000 }, { 74, 0x0000 }, { 74, 0x0000 }, + { 74, 0x0000 }, { 74, 0x0020 }, { 75, 0x0000 }, { 75, 0x0000 }, + { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, + { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, + /* 0x9800 */ + { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, + { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0100 }, { 76, 0x0000 }, + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, + /* 0x9900 */ + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0001 }, +}; +static const Summary16 hkscs2001_uni2indx_page9f[11] = { + /* 0x9f00 */ + { 77, 0x0000 }, { 77, 0x0000 }, { 77, 0x0000 }, { 77, 0x0000 }, + { 77, 0x0000 }, { 77, 0x0000 }, { 77, 0x0000 }, { 77, 0x0000 }, + { 77, 0x0000 }, { 77, 0x0000 }, { 77, 0xffc0 }, +}; +static const Summary16 hkscs2001_uni2indx_page214[4] = { + /* 0x21400 */ + { 87, 0x0000 }, { 87, 0x0000 }, { 87, 0x0000 }, { 87, 0x8000 }, +}; +static const Summary16 hkscs2001_uni2indx_page219[9] = { + /* 0x21900 */ + { 88, 0x0000 }, { 88, 0x0000 }, { 88, 0x0000 }, { 88, 0x0000 }, + { 88, 0x0000 }, { 88, 0x0000 }, { 88, 0x0000 }, { 88, 0x0000 }, + { 88, 0x0001 }, +}; +static const Summary16 hkscs2001_uni2indx_page21d[12] = { + /* 0x21d00 */ + { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, + { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, + { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0040 }, +}; +static const Summary16 hkscs2001_uni2indx_page220[8] = { + /* 0x22000 */ + { 90, 0x0000 }, { 90, 0x0000 }, { 90, 0x0000 }, { 90, 0x0000 }, + { 90, 0x0000 }, { 90, 0x0000 }, { 90, 0x0000 }, { 90, 0x4000 }, +}; +static const Summary16 hkscs2001_uni2indx_page227[2] = { + /* 0x22700 */ + { 91, 0x0000 }, { 91, 0x0004 }, +}; +static const Summary16 hkscs2001_uni2indx_page232[32] = { + /* 0x23200 */ + { 92, 0x0000 }, { 92, 0x0000 }, { 92, 0x0000 }, { 92, 0x0000 }, + { 92, 0x0000 }, { 92, 0x0000 }, { 92, 0x0000 }, { 92, 0x0000 }, + { 92, 0x0002 }, { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, + { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, + /* 0x23300 */ + { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, + { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, + { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, + { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0200 }, +}; +static const Summary16 hkscs2001_uni2indx_page23c[7] = { + /* 0x23c00 */ + { 94, 0x0000 }, { 94, 0x0000 }, { 94, 0x0000 }, { 94, 0x0000 }, + { 94, 0x0000 }, { 94, 0x0000 }, { 94, 0x0008 }, +}; +static const Summary16 hkscs2001_uni2indx_page241[5] = { + /* 0x24100 */ + { 95, 0x0000 }, { 95, 0x0000 }, { 95, 0x0000 }, { 95, 0x0000 }, + { 95, 0x4000 }, +}; +static const Summary16 hkscs2001_uni2indx_page245[1] = { + /* 0x24500 */ + { 96, 0x0020 }, +}; +static const Summary16 hkscs2001_uni2indx_page249[18] = { + /* 0x24900 */ + { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, + { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0800 }, + { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, + { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, + /* 0x24a00 */ + { 98, 0x0000 }, { 98, 0x0008 }, +}; +static const Summary16 hkscs2001_uni2indx_page251[13] = { + /* 0x25100 */ + { 99, 0x0000 }, { 99, 0x0000 }, { 99, 0x0000 }, { 99, 0x0000 }, + { 99, 0x0000 }, { 99, 0x0000 }, { 99, 0x0000 }, { 99, 0x0000 }, + { 99, 0x0000 }, { 99, 0x0000 }, { 99, 0x0000 }, { 99, 0x0000 }, + { 99, 0x2000 }, +}; +static const Summary16 hkscs2001_uni2indx_page256[10] = { + /* 0x25600 */ + { 100, 0x0000 }, { 100, 0x0000 }, { 100, 0x0000 }, { 100, 0x0000 }, + { 100, 0x0000 }, { 100, 0x0000 }, { 100, 0x0000 }, { 100, 0x0000 }, + { 100, 0x0000 }, { 100, 0x0020 }, +}; +static const Summary16 hkscs2001_uni2indx_page25c[20] = { + /* 0x25c00 */ + { 101, 0x0000 }, { 101, 0x0000 }, { 101, 0x0000 }, { 101, 0x0000 }, + { 101, 0x0000 }, { 101, 0x0000 }, { 101, 0x0000 }, { 101, 0x0000 }, + { 101, 0x0000 }, { 101, 0x0000 }, { 101, 0x0010 }, { 102, 0x0000 }, + { 102, 0x0000 }, { 102, 0x0000 }, { 102, 0x0000 }, { 102, 0x0000 }, + /* 0x25d00 */ + { 102, 0x0000 }, { 102, 0x0000 }, { 102, 0x0000 }, { 102, 0x0001 }, +}; +static const Summary16 hkscs2001_uni2indx_page26b[2] = { + /* 0x26b00 */ + { 103, 0x0000 }, { 103, 0x0020 }, +}; +static const Summary16 hkscs2001_uni2indx_page26d[8] = { + /* 0x26d00 */ + { 104, 0x0000 }, { 104, 0x0000 }, { 104, 0x0000 }, { 104, 0x0000 }, + { 104, 0x0000 }, { 104, 0x0000 }, { 104, 0x0000 }, { 104, 0x0010 }, +}; +static const Summary16 hkscs2001_uni2indx_page26f[12] = { + /* 0x26f00 */ + { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, + { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, + { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x4000 }, +}; +static const Summary16 hkscs2001_uni2indx_page271[1] = { + /* 0x27100 */ + { 106, 0x2000 }, +}; +static const Summary16 hkscs2001_uni2indx_page287[1] = { + /* 0x28700 */ + { 107, 0x8000 }, +}; +static const Summary16 hkscs2001_uni2indx_page289[31] = { + /* 0x28900 */ + { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, + { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, + { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, + { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0008 }, { 109, 0x0000 }, + /* 0x28a00 */ + { 109, 0x0000 }, { 109, 0x0000 }, { 109, 0x0000 }, { 109, 0x0004 }, + { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, + { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, + { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0400 }, +}; +static const Summary16 hkscs2001_uni2indx_page28d[12] = { + /* 0x28d00 */ + { 111, 0x0000 }, { 111, 0x0000 }, { 111, 0x0000 }, { 111, 0x0000 }, + { 111, 0x0000 }, { 111, 0x0000 }, { 111, 0x0000 }, { 111, 0x0000 }, + { 111, 0x0000 }, { 111, 0x0000 }, { 111, 0x0000 }, { 111, 0x0200 }, +}; +static const Summary16 hkscs2001_uni2indx_page299[5] = { + /* 0x29900 */ + { 112, 0x0000 }, { 112, 0x0000 }, { 112, 0x0000 }, { 112, 0x0000 }, + { 112, 0x0080 }, +}; +static const Summary16 hkscs2001_uni2indx_page29c[8] = { + /* 0x29c00 */ + { 113, 0x0000 }, { 113, 0x0000 }, { 113, 0x0000 }, { 113, 0x0000 }, + { 113, 0x0000 }, { 113, 0x0000 }, { 113, 0x0000 }, { 113, 0x0008 }, +}; +static const Summary16 hkscs2001_uni2indx_page2a1[28] = { + /* 0x2a100 */ + { 114, 0x0080 }, { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, + { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, + { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, + { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, + /* 0x2a200 */ + { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, + { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, + { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0400 }, +}; + +static int +hkscs2001_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc < 0x9f00) { + if (wc < 0x6900) { + if (wc >= 0x3500 && wc < 0x3560) + summary = &hkscs2001_uni2indx_page35[(wc>>4)-0x350]; + else if (wc >= 0x3c00 && wc < 0x3ee0) + summary = &hkscs2001_uni2indx_page3c[(wc>>4)-0x3c0]; + else if (wc >= 0x4000 && wc < 0x4080) + summary = &hkscs2001_uni2indx_page40[(wc>>4)-0x400]; + else if (wc >= 0x4200 && wc < 0x42b0) + summary = &hkscs2001_uni2indx_page42[(wc>>4)-0x420]; + else if (wc >= 0x4b00 && wc < 0x4c90) + summary = &hkscs2001_uni2indx_page4b[(wc>>4)-0x4b0]; + else if (wc >= 0x4e00 && wc < 0x51b0) + summary = &hkscs2001_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0x5300 && wc < 0x5440) + summary = &hkscs2001_uni2indx_page53[(wc>>4)-0x530]; + else if (wc >= 0x5700 && wc < 0x58e0) + summary = &hkscs2001_uni2indx_page57[(wc>>4)-0x570]; + else if (wc >= 0x5a00 && wc < 0x5fd0) + summary = &hkscs2001_uni2indx_page5a[(wc>>4)-0x5a0]; + else if (wc >= 0x6100 && wc < 0x6130) + summary = &hkscs2001_uni2indx_page61[(wc>>4)-0x610]; + else if (wc >= 0x6500 && wc < 0x6590) + summary = &hkscs2001_uni2indx_page65[(wc>>4)-0x650]; + else if (wc >= 0x6700 && wc < 0x6770) + summary = &hkscs2001_uni2indx_page67[(wc>>4)-0x670]; + } else { + if (wc >= 0x6900 && wc < 0x6a70) + summary = &hkscs2001_uni2indx_page69[(wc>>4)-0x690]; + else if (wc >= 0x6c00 && wc < 0x6e00) + summary = &hkscs2001_uni2indx_page6c[(wc>>4)-0x6c0]; + else if (wc >= 0x7000 && wc < 0x74c0) + summary = &hkscs2001_uni2indx_page70[(wc>>4)-0x700]; + else if (wc >= 0x7600 && wc < 0x78f0) + summary = &hkscs2001_uni2indx_page76[(wc>>4)-0x760]; + else if (wc >= 0x7a00 && wc < 0x7e70) + summary = &hkscs2001_uni2indx_page7a[(wc>>4)-0x7a0]; + else if (wc >= 0x8200 && wc < 0x8300) + summary = &hkscs2001_uni2indx_page82[(wc>>4)-0x820]; + else if (wc >= 0x8500 && wc < 0x8610) + summary = &hkscs2001_uni2indx_page85[(wc>>4)-0x850]; + else if (wc >= 0x8800 && wc < 0x88a0) + summary = &hkscs2001_uni2indx_page88[(wc>>4)-0x880]; + else if (wc >= 0x8b00 && wc < 0x8b90) + summary = &hkscs2001_uni2indx_page8b[(wc>>4)-0x8b0]; + else if (wc >= 0x8e00 && wc < 0x8fd0) + summary = &hkscs2001_uni2indx_page8e[(wc>>4)-0x8e0]; + else if (wc >= 0x9100 && wc < 0x9400) + summary = &hkscs2001_uni2indx_page91[(wc>>4)-0x910]; + else if (wc >= 0x9700 && wc < 0x99f0) + summary = &hkscs2001_uni2indx_page97[(wc>>4)-0x970]; + } + } else { + if (wc < 0x25600) { + if (wc >= 0x9f00 && wc < 0x9fb0) + summary = &hkscs2001_uni2indx_page9f[(wc>>4)-0x9f0]; + else if (wc >= 0x21400 && wc < 0x21440) + summary = &hkscs2001_uni2indx_page214[(wc>>4)-0x2140]; + else if (wc >= 0x21900 && wc < 0x21990) + summary = &hkscs2001_uni2indx_page219[(wc>>4)-0x2190]; + else if (wc >= 0x21d00 && wc < 0x21dc0) + summary = &hkscs2001_uni2indx_page21d[(wc>>4)-0x21d0]; + else if (wc >= 0x22000 && wc < 0x22080) + summary = &hkscs2001_uni2indx_page220[(wc>>4)-0x2200]; + else if (wc >= 0x22700 && wc < 0x22720) + summary = &hkscs2001_uni2indx_page227[(wc>>4)-0x2270]; + else if (wc >= 0x23200 && wc < 0x23400) + summary = &hkscs2001_uni2indx_page232[(wc>>4)-0x2320]; + else if (wc >= 0x23c00 && wc < 0x23c70) + summary = &hkscs2001_uni2indx_page23c[(wc>>4)-0x23c0]; + else if (wc >= 0x24100 && wc < 0x24150) + summary = &hkscs2001_uni2indx_page241[(wc>>4)-0x2410]; + else if (wc >= 0x24500 && wc < 0x24510) + summary = &hkscs2001_uni2indx_page245[(wc>>4)-0x2450]; + else if (wc >= 0x24900 && wc < 0x24a20) + summary = &hkscs2001_uni2indx_page249[(wc>>4)-0x2490]; + else if (wc >= 0x25100 && wc < 0x251d0) + summary = &hkscs2001_uni2indx_page251[(wc>>4)-0x2510]; + } else { + if (wc >= 0x25600 && wc < 0x256a0) + summary = &hkscs2001_uni2indx_page256[(wc>>4)-0x2560]; + else if (wc >= 0x25c00 && wc < 0x25d40) + summary = &hkscs2001_uni2indx_page25c[(wc>>4)-0x25c0]; + else if (wc >= 0x26b00 && wc < 0x26b20) + summary = &hkscs2001_uni2indx_page26b[(wc>>4)-0x26b0]; + else if (wc >= 0x26d00 && wc < 0x26d80) + summary = &hkscs2001_uni2indx_page26d[(wc>>4)-0x26d0]; + else if (wc >= 0x26f00 && wc < 0x26fc0) + summary = &hkscs2001_uni2indx_page26f[(wc>>4)-0x26f0]; + else if (wc >= 0x27100 && wc < 0x27110) + summary = &hkscs2001_uni2indx_page271[(wc>>4)-0x2710]; + else if (wc >= 0x28700 && wc < 0x28710) + summary = &hkscs2001_uni2indx_page287[(wc>>4)-0x2870]; + else if (wc >= 0x28900 && wc < 0x28af0) + summary = &hkscs2001_uni2indx_page289[(wc>>4)-0x2890]; + else if (wc >= 0x28d00 && wc < 0x28dc0) + summary = &hkscs2001_uni2indx_page28d[(wc>>4)-0x28d0]; + else if (wc >= 0x29900 && wc < 0x29950) + summary = &hkscs2001_uni2indx_page299[(wc>>4)-0x2990]; + else if (wc >= 0x29c00 && wc < 0x29c80) + summary = &hkscs2001_uni2indx_page29c[(wc>>4)-0x29c0]; + else if (wc >= 0x2a100 && wc < 0x2a2c0) + summary = &hkscs2001_uni2indx_page2a1[(wc>>4)-0x2a10]; + } + } + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = hkscs2001_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/hkscs2004.h b/jni/parted/libiconv/lib/hkscs2004.h new file mode 100755 index 0000000..943a0b7 --- /dev/null +++ b/jni/parted/libiconv/lib/hkscs2004.h @@ -0,0 +1,678 @@ +/* + * Copyright (C) 1999-2006, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * HKSCS:2004 + */ + +static const unsigned short hkscs2004_2uni_page87[58] = { + /* 0x87 */ + 0x0af0, 0x1032, 0x0d03, 0x0ca6, 0x0c78, 0x4167, 0x1177, 0x0cb3, + 0x44b1, 0x10e2, 0x44c5, 0x0595, 0x0e36, 0x0e44, 0x1047, 0x1040, + 0x39bf, 0x3417, 0x4252, 0x3f8b, 0x40d2, 0x1057, 0x4d51, 0x0e4f, + 0x0cda, 0x1085, 0x446c, 0x1107, 0x0fa4, 0x0da1, 0x3d23, 0x1e25, + 0x3c54, 0x2d63, 0x3606, 0x3761, 0x1a4d, 0x13fb, 0x28fd, 0x2195, + 0x141d, 0x47b9, 0x06f4, 0x2534, 0x43ef, 0x16db, 0x2e5e, 0x15a4, + 0x0125, 0x4bb0, 0x15d1, 0x16b7, 0x17fc, 0x1b6e, 0x2393, 0x4a45, + 0x1f61, 0x1f9d, +}; +static const unsigned short hkscs2004_2uni_page8c[189] = { + /* 0x8c */ + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x2b6f, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, + 0x28fd, 0x1ae7, 0x28fd, 0x1c57, 0x20ca, 0x0688, 0x0bc3, 0x3256, + 0x3196, 0x0a9a, 0x0c36, 0x28fd, 0x17d5, 0x351a, 0x24f9, 0x1778, + 0x0612, 0x3351, 0x1878, 0x27b2, 0x1d57, 0x0c58, 0x38ec, 0x2f23, + 0x1077, 0x0478, 0x004a, 0x29a4, 0x3e41, 0x24cc, 0x12b4, 0x2a39, + 0x14bf, 0x226c, 0x2656, 0x49fa, 0x193b, + /* 0x8d */ + 0x2c9f, 0x28fd, 0x30c1, 0x466d, 0x0902, 0x0dbb, 0x4879, 0x0707, + 0x27b3, 0x4cb5, 0x08f8, 0x02d6, 0x0df7, 0x3e46, 0x097c, 0x45b2, + 0x42ff, 0x0c6d, 0x03d4, 0x3b9a, 0x0c61, 0x0c1b, 0x1189, 0x107b, + 0x1176, 0x0cea, 0x07c8, 0x3a0f, 0x0161, 0x0bde, 0x0bbd, 0x09ed, +}; + +static const ucs4_t hkscs2004_2uni_upages[78] = { + 0x03400, 0x03600, 0x03700, 0x03800, 0x03900, 0x03b00, 0x03d00, 0x03f00, + 0x04000, 0x04100, 0x04300, 0x04400, 0x04500, 0x04600, 0x04700, 0x04a00, + 0x04c00, 0x04d00, 0x04f00, 0x05600, 0x05900, 0x05a00, 0x05b00, 0x05c00, + 0x05d00, 0x05f00, 0x06600, 0x06700, 0x06e00, 0x07100, 0x07200, 0x07400, + 0x07900, 0x07d00, 0x08100, 0x08500, 0x08a00, 0x09700, 0x09800, 0x09f00, + 0x0ff00, 0x20100, 0x20200, 0x20a00, 0x20b00, 0x21a00, 0x21d00, 0x21e00, + 0x22100, 0x22700, 0x23200, 0x23500, 0x23600, 0x23b00, 0x23e00, 0x23f00, + 0x24000, 0x24200, 0x24b00, 0x25400, 0x25a00, 0x26b00, 0x26c00, 0x26e00, + 0x27000, 0x27200, 0x27300, 0x27b00, 0x27c00, 0x28600, 0x28900, 0x28b00, + 0x29000, 0x29800, 0x29900, 0x29e00, 0x2a100, 0x2a300, +}; + +static int +hkscs2004_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 == 0x87) || (c1 >= 0x8c && c1 <= 0x8d)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + unsigned int i = 157 * (c1 - 0x80) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + ucs4_t wc = 0xfffd; + unsigned short swc; + if (i < 1884) { + if (i < 1157) + swc = hkscs2004_2uni_page87[i-1099], + wc = hkscs2004_2uni_upages[swc>>8] | (swc & 0xff); + } else { + if (i < 2073) + swc = hkscs2004_2uni_page8c[i-1884], + wc = hkscs2004_2uni_upages[swc>>8] | (swc & 0xff); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short hkscs2004_2charset[123] = { + 0x8cf4, 0x8770, 0x8d5c, 0x8d4b, 0x8d52, 0x8cf3, 0x874b, 0x8cea, + 0x8cdf, 0x876a, 0x8d47, 0x8d5a, 0x8d4a, 0x8d44, 0x8d4e, 0x8d5f, + 0x8ce3, 0x8740, 0x8d5e, 0x8ce0, 0x8d5d, 0x8d55, 0x8ce4, 0x8cef, + 0x8d54, 0x8d51, 0x8744, 0x8743, 0x8747, 0x8758, 0x8d59, 0x8742, + 0x875d, 0x8d45, 0x8d4c, 0x874c, 0x874d, 0x8757, 0x875c, 0x8741, + 0x874f, 0x874e, 0x8755, 0x8cf2, 0x8d57, 0x8759, 0x8749, 0x875b, + 0x8d58, 0x8746, 0x8d56, 0x8cf8, 0x8765, 0x8768, 0x8cfa, 0x876f, + 0x8772, 0x8773, 0x876d, 0x8ce9, 0x8ce6, 0x8774, 0x8cec, 0x8cfe, + 0x8764, 0x8cdb, 0x8775, 0x8cdd, 0x8cee, 0x875f, 0x8778, 0x8779, + 0x8cde, 0x8767, 0x8cfb, 0x8776, 0x8cf7, 0x8ce8, 0x876b, 0x8cfc, + 0x8ced, 0x8d48, 0x8cf5, 0x8cf9, 0x8c62, 0x8d40, 0x8761, 0x876e, + 0x8cf1, 0x8d42, 0x8ce2, 0x8ce1, 0x8ceb, 0x8751, 0x8ce7, 0x8762, + 0x8763, 0x8cf0, 0x8750, 0x8d5b, 0x8d53, 0x8760, 0x875e, 0x8cf6, + 0x8d4d, 0x8753, 0x8754, 0x8745, 0x8752, 0x8d50, 0x876c, 0x875a, + 0x8748, 0x874a, 0x8d4f, 0x8d43, 0x8769, 0x8d46, 0x8cfd, 0x8777, + 0x8771, 0x8d49, 0x8756, +}; + +static const Summary16 hkscs2004_uni2indx_page34[5] = { + /* 0x3400 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0400 }, +}; +static const Summary16 hkscs2004_uni2indx_page36[56] = { + /* 0x3600 */ + { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0020 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0002 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + /* 0x3700 */ + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0040 }, { 4, 0x0000 }, { 4, 0x0000 }, + /* 0x3800 */ + { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, + { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, + { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, + { 4, 0x0000 }, { 4, 0x0010 }, { 5, 0x0000 }, { 5, 0x0000 }, + /* 0x3900 */ + { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0000 }, + { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0100 }, +}; +static const Summary16 hkscs2004_uni2indx_page3b[10] = { + /* 0x3b00 */ + { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, + { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, + { 6, 0x0000 }, { 6, 0x0020 }, +}; +static const Summary16 hkscs2004_uni2indx_page3d[16] = { + /* 0x3d00 */ + { 7, 0x0000 }, { 7, 0x0004 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0100 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, + { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0010 }, +}; +static const Summary16 hkscs2004_uni2indx_page3f[47] = { + /* 0x3f00 */ + { 10, 0x0080 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0100 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, + /* 0x4000 */ + { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, + { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, + { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, + { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0100 }, + /* 0x4100 */ + { 13, 0x0004 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, + { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x1000 }, + { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, + { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x2000 }, +}; +static const Summary16 hkscs2004_uni2indx_page43[69] = { + /* 0x4300 */ + { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0000 }, + { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0000 }, + { 16, 0x0000 }, { 16, 0x0400 }, { 17, 0x0000 }, { 17, 0x0000 }, + { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0001 }, + /* 0x4400 */ + { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, + { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, + { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x2000 }, + { 19, 0x0008 }, { 20, 0x4000 }, { 21, 0x0000 }, { 21, 0x0000 }, + /* 0x4500 */ + { 21, 0x0000 }, { 21, 0x0800 }, { 22, 0x0000 }, { 22, 0x0040 }, + { 23, 0x0000 }, { 23, 0x0100 }, { 24, 0x2002 }, { 26, 0x0100 }, + { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0040 }, { 28, 0x0008 }, + { 29, 0x0000 }, { 29, 0x0400 }, { 30, 0x0400 }, { 31, 0x0000 }, + /* 0x4600 */ + { 31, 0x0008 }, { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, + { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, + { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0002 }, { 33, 0x0800 }, + { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0080 }, + /* 0x4700 */ + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0040 }, + { 36, 0x8010 }, +}; +static const Summary16 hkscs2004_uni2indx_page4a[11] = { + /* 0x4a00 */ + { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0000 }, + { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0000 }, + { 38, 0x0000 }, { 38, 0x0000 }, { 38, 0x0010 }, +}; +static const Summary16 hkscs2004_uni2indx_page4c[25] = { + /* 0x4c00 */ + { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x0004 }, + { 40, 0x0081 }, { 42, 0x0080 }, { 43, 0x0000 }, { 43, 0x0880 }, + { 45, 0x0020 }, { 46, 0x0000 }, { 46, 0x0000 }, { 46, 0x0000 }, + { 46, 0x0000 }, { 46, 0x0000 }, { 46, 0x0004 }, { 47, 0x0000 }, + /* 0x4d00 */ + { 47, 0x0080 }, { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, + { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x00c0 }, + { 50, 0x0200 }, +}; +static const Summary16 hkscs2004_uni2indx_page4f[12] = { + /* 0x4f00 */ + { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, + { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, + { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0000 }, { 51, 0x0010 }, +}; +static const Summary16 hkscs2004_uni2indx_page56[16] = { + /* 0x5600 */ + { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0000 }, + { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0000 }, + { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0000 }, + { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0000 }, { 52, 0x0800 }, +}; +static const Summary16 hkscs2004_uni2indx_page59[72] = { + /* 0x5900 */ + { 53, 0x0000 }, { 53, 0x2000 }, { 54, 0x0000 }, { 54, 0x0000 }, + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x8000 }, + { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, + /* 0x5a00 */ + { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, + { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, + { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0010 }, { 56, 0x0000 }, + { 56, 0x0000 }, { 56, 0x0002 }, { 57, 0x0000 }, { 57, 0x0000 }, + /* 0x5b00 */ + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0080 }, + { 58, 0x0000 }, { 58, 0x0800 }, { 59, 0x0000 }, { 59, 0x0000 }, + /* 0x5c00 */ + { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, + { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0100 }, + { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, + { 60, 0x0000 }, { 60, 0x0020 }, { 61, 0x0000 }, { 61, 0x1000 }, + /* 0x5d00 */ + { 62, 0x0000 }, { 62, 0x0000 }, { 62, 0x0000 }, { 62, 0x0000 }, + { 62, 0x0000 }, { 62, 0x0000 }, { 62, 0x0000 }, { 62, 0x0100 }, +}; +static const Summary16 hkscs2004_uni2indx_page5f[4] = { + /* 0x5f00 */ + { 63, 0x0000 }, { 63, 0x0000 }, { 63, 0x0000 }, { 63, 0x0800 }, +}; +static const Summary16 hkscs2004_uni2indx_page66[23] = { + /* 0x6600 */ + { 64, 0x0000 }, { 64, 0x0000 }, { 64, 0x0000 }, { 64, 0x0000 }, + { 64, 0x2000 }, { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, + { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, + { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0080 }, { 66, 0x0000 }, + /* 0x6700 */ + { 66, 0x0000 }, { 66, 0x0000 }, { 66, 0x0000 }, { 66, 0x0000 }, + { 66, 0x0000 }, { 66, 0x0000 }, { 66, 0x4000 }, +}; +static const Summary16 hkscs2004_uni2indx_page6e[6] = { + /* 0x6e00 */ + { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, + { 67, 0x0000 }, { 67, 0x0080 }, +}; +static const Summary16 hkscs2004_uni2indx_page71[19] = { + /* 0x7100 */ + { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0000 }, { 68, 0x0000 }, + { 68, 0x0000 }, { 68, 0x0080 }, { 69, 0x0000 }, { 69, 0x0000 }, + { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, + { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, + /* 0x7200 */ + { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0020 }, +}; +static const Summary16 hkscs2004_uni2indx_page74[10] = { + /* 0x7400 */ + { 70, 0x0000 }, { 70, 0x0000 }, { 70, 0x0000 }, { 70, 0x0000 }, + { 70, 0x0000 }, { 70, 0x0000 }, { 70, 0x0002 }, { 71, 0x0000 }, + { 71, 0x0000 }, { 71, 0x2000 }, +}; +static const Summary16 hkscs2004_uni2indx_page79[13] = { + /* 0x7900 */ + { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x0000 }, + { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x0000 }, + { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x0000 }, { 72, 0x0000 }, + { 72, 0x0400 }, +}; +static const Summary16 hkscs2004_uni2indx_page7d[10] = { + /* 0x7d00 */ + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, + { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, + { 73, 0x0000 }, { 73, 0x0020 }, +}; +static const Summary16 hkscs2004_uni2indx_page81[7] = { + /* 0x8100 */ + { 74, 0x0000 }, { 74, 0x0000 }, { 74, 0x0000 }, { 74, 0x0000 }, + { 74, 0x0000 }, { 74, 0x0000 }, { 74, 0x1000 }, +}; +static const Summary16 hkscs2004_uni2indx_page85[10] = { + /* 0x8500 */ + { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, + { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, { 75, 0x0000 }, + { 75, 0x0000 }, { 75, 0x0008 }, +}; +static const Summary16 hkscs2004_uni2indx_page8a[16] = { + /* 0x8a00 */ + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, + { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, { 76, 0x0000 }, + { 76, 0x1000 }, { 77, 0x0000 }, { 77, 0x0000 }, { 77, 0x0200 }, +}; +static const Summary16 hkscs2004_uni2indx_page97[22] = { + /* 0x9700 */ + { 78, 0x0000 }, { 78, 0x0000 }, { 78, 0x0000 }, { 78, 0x0010 }, + { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x0000 }, + { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x0000 }, + { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x0000 }, + /* 0x9800 */ + { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x0000 }, + { 79, 0x0000 }, { 79, 0x0040 }, +}; +static const Summary16 hkscs2004_uni2indx_page9f[12] = { + /* 0x9f00 */ + { 80, 0x0000 }, { 80, 0x0000 }, { 80, 0x0000 }, { 80, 0x0000 }, + { 80, 0x0000 }, { 80, 0x0000 }, { 80, 0x0000 }, { 80, 0x0000 }, + { 80, 0x0000 }, { 80, 0x0000 }, { 80, 0x0000 }, { 80, 0x000c }, +}; +static const Summary16 hkscs2004_uni2indx_page201[20] = { + /* 0x20100 */ + { 82, 0x0000 }, { 82, 0x0000 }, { 82, 0x0000 }, { 82, 0x0000 }, + { 82, 0x0000 }, { 82, 0x0000 }, { 82, 0x0000 }, { 82, 0x0000 }, + { 82, 0x0000 }, { 82, 0x0000 }, { 82, 0x0010 }, { 83, 0x0000 }, + { 83, 0x0000 }, { 83, 0x0000 }, { 83, 0x0000 }, { 83, 0x0000 }, + /* 0x20200 */ + { 83, 0x0000 }, { 83, 0x0000 }, { 83, 0x0000 }, { 83, 0x0200 }, +}; +static const Summary16 hkscs2004_uni2indx_page20a[26] = { + /* 0x20a00 */ + { 84, 0x0000 }, { 84, 0x0000 }, { 84, 0x0000 }, { 84, 0x0000 }, + { 84, 0x0000 }, { 84, 0x0000 }, { 84, 0x8000 }, { 85, 0x0000 }, + { 85, 0x0000 }, { 85, 0x0000 }, { 85, 0x0000 }, { 85, 0x0000 }, + { 85, 0x0000 }, { 85, 0x0000 }, { 85, 0x0000 }, { 85, 0x0000 }, + /* 0x20b00 */ + { 85, 0x0000 }, { 85, 0x0000 }, { 85, 0x0000 }, { 85, 0x0000 }, + { 85, 0x0000 }, { 85, 0x0000 }, { 85, 0x0000 }, { 85, 0x0000 }, + { 85, 0x0000 }, { 85, 0x8000 }, +}; +static const Summary16 hkscs2004_uni2indx_page21a[7] = { + /* 0x21a00 */ + { 86, 0x0000 }, { 86, 0x0000 }, { 86, 0x0000 }, { 86, 0x0000 }, + { 86, 0x0000 }, { 86, 0x0000 }, { 86, 0x0008 }, +}; +static const Summary16 hkscs2004_uni2indx_page21d[19] = { + /* 0x21d00 */ + { 87, 0x0000 }, { 87, 0x0000 }, { 87, 0x0000 }, { 87, 0x0000 }, + { 87, 0x0000 }, { 87, 0x4000 }, { 88, 0x0000 }, { 88, 0x0000 }, + { 88, 0x0000 }, { 88, 0x0000 }, { 88, 0x0000 }, { 88, 0x0000 }, + { 88, 0x0000 }, { 88, 0x0000 }, { 88, 0x0000 }, { 88, 0x0000 }, + /* 0x21e00 */ + { 88, 0x0000 }, { 88, 0x0000 }, { 88, 0x0008 }, +}; +static const Summary16 hkscs2004_uni2indx_page221[13] = { + /* 0x22100 */ + { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, + { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, + { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, { 89, 0x0000 }, + { 89, 0x0002 }, +}; +static const Summary16 hkscs2004_uni2indx_page227[10] = { + /* 0x22700 */ + { 90, 0x0000 }, { 90, 0x0000 }, { 90, 0x0000 }, { 90, 0x0000 }, + { 90, 0x0000 }, { 90, 0x0000 }, { 90, 0x0000 }, { 90, 0x0000 }, + { 90, 0x0000 }, { 90, 0x0040 }, +}; +static const Summary16 hkscs2004_uni2indx_page232[6] = { + /* 0x23200 */ + { 91, 0x0000 }, { 91, 0x0000 }, { 91, 0x0000 }, { 91, 0x0000 }, + { 91, 0x0000 }, { 91, 0x0040 }, +}; +static const Summary16 hkscs2004_uni2indx_page235[18] = { + /* 0x23500 */ + { 92, 0x0000 }, { 92, 0x0000 }, { 92, 0x0000 }, { 92, 0x0000 }, + { 92, 0x0000 }, { 92, 0x0002 }, { 93, 0x0000 }, { 93, 0x0000 }, + { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, + { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, { 93, 0x0000 }, + /* 0x23600 */ + { 93, 0x0000 }, { 93, 0x0080 }, +}; +static const Summary16 hkscs2004_uni2indx_page23b[2] = { + /* 0x23b00 */ + { 94, 0x0000 }, { 94, 0x0400 }, +}; +static const Summary16 hkscs2004_uni2indx_page23e[47] = { + /* 0x23e00 */ + { 95, 0x0040 }, { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0000 }, + { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0000 }, + { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0000 }, + { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0000 }, + /* 0x23f00 */ + { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0000 }, + { 96, 0x0000 }, { 96, 0x0000 }, { 96, 0x0002 }, { 97, 0x0000 }, + { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, + { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, + /* 0x24000 */ + { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, + { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, + { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x0000 }, + { 97, 0x0000 }, { 97, 0x0000 }, { 97, 0x1000 }, +}; +static const Summary16 hkscs2004_uni2indx_page242[12] = { + /* 0x24200 */ + { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, + { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, + { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x8000 }, +}; +static const Summary16 hkscs2004_uni2indx_page24b[1] = { + /* 0x24b00 */ + { 99, 0x8000 }, +}; +static const Summary16 hkscs2004_uni2indx_page254[10] = { + /* 0x25400 */ + { 100, 0x0000 }, { 100, 0x0000 }, { 100, 0x0000 }, { 100, 0x0000 }, + { 100, 0x0000 }, { 100, 0x0000 }, { 100, 0x0000 }, { 100, 0x0000 }, + { 100, 0x0000 }, { 100, 0x0400 }, +}; +static const Summary16 hkscs2004_uni2indx_page25a[6] = { + /* 0x25a00 */ + { 101, 0x0000 }, { 101, 0x0000 }, { 101, 0x0000 }, { 101, 0x0000 }, + { 101, 0x0000 }, { 101, 0x0010 }, +}; +static const Summary16 hkscs2004_uni2indx_page26b[21] = { + /* 0x26b00 */ + { 102, 0x0000 }, { 102, 0x0000 }, { 102, 0x0008 }, { 103, 0x0000 }, + { 103, 0x0000 }, { 103, 0x0000 }, { 103, 0x0000 }, { 103, 0x0000 }, + { 103, 0x0000 }, { 103, 0x0000 }, { 103, 0x0000 }, { 103, 0x0000 }, + { 103, 0x0000 }, { 103, 0x0000 }, { 103, 0x0000 }, { 103, 0x0000 }, + /* 0x26c00 */ + { 103, 0x0000 }, { 103, 0x0000 }, { 103, 0x0000 }, { 103, 0x0000 }, + { 103, 0x0042 }, +}; +static const Summary16 hkscs2004_uni2indx_page26e[9] = { + /* 0x26e00 */ + { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, + { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, + { 105, 0x0800 }, +}; +static const Summary16 hkscs2004_uni2indx_page270[14] = { + /* 0x27000 */ + { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, + { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, + { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, + { 106, 0x0000 }, { 106, 0x0004 }, +}; +static const Summary16 hkscs2004_uni2indx_page272[32] = { + /* 0x27200 */ + { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, + { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0080 }, { 108, 0x0000 }, + { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, + { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, + /* 0x27300 */ + { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, { 108, 0x0000 }, + { 108, 0x0000 }, { 108, 0x0004 }, { 109, 0x0000 }, { 109, 0x0000 }, + { 109, 0x0000 }, { 109, 0x0000 }, { 109, 0x0000 }, { 109, 0x0000 }, + { 109, 0x0000 }, { 109, 0x0000 }, { 109, 0x0000 }, { 109, 0x8000 }, +}; +static const Summary16 hkscs2004_uni2indx_page27b[29] = { + /* 0x27b00 */ + { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, + { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, + { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x0000 }, + { 110, 0x0000 }, { 110, 0x0000 }, { 110, 0x8000 }, { 111, 0x0000 }, + /* 0x27c00 */ + { 111, 0x0000 }, { 111, 0x0000 }, { 111, 0x0000 }, { 111, 0x0000 }, + { 111, 0x0000 }, { 111, 0x0000 }, { 111, 0x1000 }, { 112, 0x0000 }, + { 112, 0x0000 }, { 112, 0x0000 }, { 112, 0x0000 }, { 112, 0x0002 }, + { 113, 0x0020 }, +}; +static const Summary16 hkscs2004_uni2indx_page286[12] = { + /* 0x28600 */ + { 114, 0x0000 }, { 114, 0x0000 }, { 114, 0x0000 }, { 114, 0x0000 }, + { 114, 0x0000 }, { 114, 0x0000 }, { 114, 0x0000 }, { 114, 0x0000 }, + { 114, 0x0000 }, { 114, 0x0000 }, { 114, 0x0000 }, { 114, 0x0004 }, +}; +static const Summary16 hkscs2004_uni2indx_page289[7] = { + /* 0x28900 */ + { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x0000 }, + { 115, 0x0000 }, { 115, 0x0000 }, { 115, 0x2000 }, +}; +static const Summary16 hkscs2004_uni2indx_page28b[12] = { + /* 0x28b00 */ + { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, + { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, + { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0200 }, +}; +static const Summary16 hkscs2004_uni2indx_page290[8] = { + /* 0x29000 */ + { 117, 0x0000 }, { 117, 0x0000 }, { 117, 0x0000 }, { 117, 0x0000 }, + { 117, 0x0000 }, { 117, 0x0000 }, { 117, 0x0000 }, { 117, 0x0200 }, +}; +static const Summary16 hkscs2004_uni2indx_page298[21] = { + /* 0x29800 */ + { 118, 0x0000 }, { 118, 0x0000 }, { 118, 0x0000 }, { 118, 0x0000 }, + { 118, 0x0000 }, { 118, 0x0000 }, { 118, 0x0000 }, { 118, 0x0000 }, + { 118, 0x0000 }, { 118, 0x0000 }, { 118, 0x0000 }, { 118, 0x0000 }, + { 118, 0x0000 }, { 118, 0x0000 }, { 118, 0x0000 }, { 118, 0x0400 }, + /* 0x29900 */ + { 119, 0x0000 }, { 119, 0x0000 }, { 119, 0x0000 }, { 119, 0x0000 }, + { 119, 0x0020 }, +}; +static const Summary16 hkscs2004_uni2indx_page29e[12] = { + /* 0x29e00 */ + { 120, 0x0000 }, { 120, 0x0000 }, { 120, 0x0000 }, { 120, 0x0000 }, + { 120, 0x0000 }, { 120, 0x0000 }, { 120, 0x0000 }, { 120, 0x0000 }, + { 120, 0x0000 }, { 120, 0x0000 }, { 120, 0x0000 }, { 120, 0x0001 }, +}; +static const Summary16 hkscs2004_uni2indx_page2a1[12] = { + /* 0x2a100 */ + { 121, 0x0000 }, { 121, 0x0000 }, { 121, 0x0000 }, { 121, 0x0000 }, + { 121, 0x0000 }, { 121, 0x0000 }, { 121, 0x0000 }, { 121, 0x0000 }, + { 121, 0x0000 }, { 121, 0x0000 }, { 121, 0x0000 }, { 121, 0x0020 }, +}; +static const Summary16 hkscs2004_uni2indx_page2a3[6] = { + /* 0x2a300 */ + { 122, 0x0000 }, { 122, 0x0000 }, { 122, 0x0000 }, { 122, 0x0000 }, + { 122, 0x0000 }, { 122, 0x0002 }, +}; + +static int +hkscs2004_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc < 0x21a00) { + if (wc < 0x6e00) { + if (wc >= 0x3400 && wc < 0x3450) + summary = &hkscs2004_uni2indx_page34[(wc>>4)-0x340]; + else if (wc >= 0x3600 && wc < 0x3980) + summary = &hkscs2004_uni2indx_page36[(wc>>4)-0x360]; + else if (wc >= 0x3b00 && wc < 0x3ba0) + summary = &hkscs2004_uni2indx_page3b[(wc>>4)-0x3b0]; + else if (wc >= 0x3d00 && wc < 0x3e00) + summary = &hkscs2004_uni2indx_page3d[(wc>>4)-0x3d0]; + else if (wc >= 0x3f00 && wc < 0x41f0) + summary = &hkscs2004_uni2indx_page3f[(wc>>4)-0x3f0]; + else if (wc >= 0x4300 && wc < 0x4750) + summary = &hkscs2004_uni2indx_page43[(wc>>4)-0x430]; + else if (wc >= 0x4a00 && wc < 0x4ab0) + summary = &hkscs2004_uni2indx_page4a[(wc>>4)-0x4a0]; + else if (wc >= 0x4c00 && wc < 0x4d90) + summary = &hkscs2004_uni2indx_page4c[(wc>>4)-0x4c0]; + else if (wc >= 0x4f00 && wc < 0x4fc0) + summary = &hkscs2004_uni2indx_page4f[(wc>>4)-0x4f0]; + else if (wc >= 0x5600 && wc < 0x5700) + summary = &hkscs2004_uni2indx_page56[(wc>>4)-0x560]; + else if (wc >= 0x5900 && wc < 0x5d80) + summary = &hkscs2004_uni2indx_page59[(wc>>4)-0x590]; + else if (wc >= 0x5f00 && wc < 0x5f40) + summary = &hkscs2004_uni2indx_page5f[(wc>>4)-0x5f0]; + else if (wc >= 0x6600 && wc < 0x6770) + summary = &hkscs2004_uni2indx_page66[(wc>>4)-0x660]; + } else { + if (wc >= 0x6e00 && wc < 0x6e60) + summary = &hkscs2004_uni2indx_page6e[(wc>>4)-0x6e0]; + else if (wc >= 0x7100 && wc < 0x7230) + summary = &hkscs2004_uni2indx_page71[(wc>>4)-0x710]; + else if (wc >= 0x7400 && wc < 0x74a0) + summary = &hkscs2004_uni2indx_page74[(wc>>4)-0x740]; + else if (wc >= 0x7900 && wc < 0x79d0) + summary = &hkscs2004_uni2indx_page79[(wc>>4)-0x790]; + else if (wc >= 0x7d00 && wc < 0x7da0) + summary = &hkscs2004_uni2indx_page7d[(wc>>4)-0x7d0]; + else if (wc >= 0x8100 && wc < 0x8170) + summary = &hkscs2004_uni2indx_page81[(wc>>4)-0x810]; + else if (wc >= 0x8500 && wc < 0x85a0) + summary = &hkscs2004_uni2indx_page85[(wc>>4)-0x850]; + else if (wc >= 0x8a00 && wc < 0x8b00) + summary = &hkscs2004_uni2indx_page8a[(wc>>4)-0x8a0]; + else if (wc >= 0x9700 && wc < 0x9860) + summary = &hkscs2004_uni2indx_page97[(wc>>4)-0x970]; + else if (wc >= 0x9f00 && wc < 0x9fc0) + summary = &hkscs2004_uni2indx_page9f[(wc>>4)-0x9f0]; + else if (wc >= 0x20100 && wc < 0x20240) + summary = &hkscs2004_uni2indx_page201[(wc>>4)-0x2010]; + else if (wc >= 0x20a00 && wc < 0x20ba0) + summary = &hkscs2004_uni2indx_page20a[(wc>>4)-0x20a0]; + } + } else { + if (wc < 0x26b00) { + if (wc >= 0x21a00 && wc < 0x21a70) + summary = &hkscs2004_uni2indx_page21a[(wc>>4)-0x21a0]; + else if (wc >= 0x21d00 && wc < 0x21e30) + summary = &hkscs2004_uni2indx_page21d[(wc>>4)-0x21d0]; + else if (wc >= 0x22100 && wc < 0x221d0) + summary = &hkscs2004_uni2indx_page221[(wc>>4)-0x2210]; + else if (wc >= 0x22700 && wc < 0x227a0) + summary = &hkscs2004_uni2indx_page227[(wc>>4)-0x2270]; + else if (wc >= 0x23200 && wc < 0x23260) + summary = &hkscs2004_uni2indx_page232[(wc>>4)-0x2320]; + else if (wc >= 0x23500 && wc < 0x23620) + summary = &hkscs2004_uni2indx_page235[(wc>>4)-0x2350]; + else if (wc >= 0x23b00 && wc < 0x23b20) + summary = &hkscs2004_uni2indx_page23b[(wc>>4)-0x23b0]; + else if (wc >= 0x23e00 && wc < 0x240f0) + summary = &hkscs2004_uni2indx_page23e[(wc>>4)-0x23e0]; + else if (wc >= 0x24200 && wc < 0x242c0) + summary = &hkscs2004_uni2indx_page242[(wc>>4)-0x2420]; + else if (wc >= 0x24b00 && wc < 0x24b10) + summary = &hkscs2004_uni2indx_page24b[(wc>>4)-0x24b0]; + else if (wc >= 0x25400 && wc < 0x254a0) + summary = &hkscs2004_uni2indx_page254[(wc>>4)-0x2540]; + else if (wc >= 0x25a00 && wc < 0x25a60) + summary = &hkscs2004_uni2indx_page25a[(wc>>4)-0x25a0]; + } else { + if (wc >= 0x26b00 && wc < 0x26c50) + summary = &hkscs2004_uni2indx_page26b[(wc>>4)-0x26b0]; + else if (wc >= 0x26e00 && wc < 0x26e90) + summary = &hkscs2004_uni2indx_page26e[(wc>>4)-0x26e0]; + else if (wc >= 0x27000 && wc < 0x270e0) + summary = &hkscs2004_uni2indx_page270[(wc>>4)-0x2700]; + else if (wc >= 0x27200 && wc < 0x27400) + summary = &hkscs2004_uni2indx_page272[(wc>>4)-0x2720]; + else if (wc >= 0x27b00 && wc < 0x27cd0) + summary = &hkscs2004_uni2indx_page27b[(wc>>4)-0x27b0]; + else if (wc >= 0x28600 && wc < 0x286c0) + summary = &hkscs2004_uni2indx_page286[(wc>>4)-0x2860]; + else if (wc >= 0x28900 && wc < 0x28970) + summary = &hkscs2004_uni2indx_page289[(wc>>4)-0x2890]; + else if (wc >= 0x28b00 && wc < 0x28bc0) + summary = &hkscs2004_uni2indx_page28b[(wc>>4)-0x28b0]; + else if (wc >= 0x29000 && wc < 0x29080) + summary = &hkscs2004_uni2indx_page290[(wc>>4)-0x2900]; + else if (wc >= 0x29800 && wc < 0x29950) + summary = &hkscs2004_uni2indx_page298[(wc>>4)-0x2980]; + else if (wc >= 0x29e00 && wc < 0x29ec0) + summary = &hkscs2004_uni2indx_page29e[(wc>>4)-0x29e0]; + else if (wc >= 0x2a100 && wc < 0x2a1c0) + summary = &hkscs2004_uni2indx_page2a1[(wc>>4)-0x2a10]; + else if (wc >= 0x2a300 && wc < 0x2a360) + summary = &hkscs2004_uni2indx_page2a3[(wc>>4)-0x2a30]; + } + } + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = hkscs2004_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/hkscs2008.h b/jni/parted/libiconv/lib/hkscs2008.h new file mode 100755 index 0000000..6935cad --- /dev/null +++ b/jni/parted/libiconv/lib/hkscs2008.h @@ -0,0 +1,466 @@ +/* + * Copyright (C) 1999-2010, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * HKSCS:2008 + */ + +static const unsigned short hkscs2008_2uni_page87[126] = { + /* 0x87 */ + 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, + 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, + 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, + 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, + 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, + 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, + 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, 0x22fd, + 0x22fd, 0x22fd, 0x0175, 0x2453, 0x299e, 0x2d21, 0x03ec, 0x2bde, + 0x02f5, 0x16fc, 0x2197, 0x2a61, 0x300d, 0x26ea, 0x238a, 0x275e, + 0x060a, 0x1884, 0x2196, 0x1f2f, 0x0930, 0x1a13, 0x0d96, 0x204a, + 0x1e18, 0x15d0, 0x1632, 0x0f60, 0x1129, 0x1b9d, 0x144c, 0x17c5, + 0x1082, 0x162c, 0x0a4f, 0x1d46, 0x00e6, 0x13c4, 0x2cb9, 0x14c6, + 0x21c7, 0x0cb3, 0x092f, 0x0b4c, 0x0531, 0x298e, 0x0d18, 0x1672, + 0x2f65, 0x1c8f, 0x08ae, 0x2e88, 0x0581, 0x2c99, 0x17ae, 0x25bc, + 0x21c8, 0x25c1, 0x25c9, 0x25cc, 0x21c9, 0x1904, 0x28bb, 0x04b4, + 0x21ca, 0x07e1, 0x31ff, 0x0ec1, 0x126e, 0x21cb, +}; + +static const ucs4_t hkscs2008_2uni_upages[50] = { + 0x03400, 0x03800, 0x03a00, 0x03e00, 0x04000, 0x04100, 0x04300, 0x04400, + 0x04600, 0x04900, 0x05200, 0x05400, 0x05700, 0x05800, 0x06200, 0x06600, + 0x06700, 0x06a00, 0x07000, 0x07300, 0x07400, 0x07900, 0x07a00, 0x07b00, + 0x08400, 0x08500, 0x08600, 0x08800, 0x08b00, 0x09000, 0x09200, 0x09400, + 0x09700, 0x09f00, 0x0ff00, 0x20a00, 0x21d00, 0x22400, 0x23100, 0x23200, + 0x23500, 0x23600, 0x24100, 0x25800, 0x25d00, 0x26000, 0x26e00, 0x27b00, + 0x28900, 0x2ad00, +}; + +static int +hkscs2008_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if (c1 == 0x87) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { + unsigned int i = 157 * (c1 - 0x80) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); + ucs4_t wc = 0xfffd; + unsigned short swc; + { + if (i < 1225) + swc = hkscs2008_2uni_page87[i-1099], + wc = hkscs2008_2uni_upages[swc>>8] | (swc & 0xff); + } + if (wc != 0xfffd) { + *pwc = wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short hkscs2008_2charset[68] = { + 0x87be, 0x877a, 0x87a2, 0x877e, 0x87d9, 0x87c6, 0x87ce, 0x87aa, + 0x87db, 0x87cc, 0x87c4, 0x87ae, 0x87bc, 0x87c5, 0x87c3, 0x87c8, + 0x87b0, 0x87dd, 0x87b5, 0x87ba, 0x87b6, 0x87de, 0x87bf, 0x87b8, + 0x87c1, 0x87b3, 0x87bb, 0x87b4, 0x87c9, 0x87a3, 0x87d0, 0x87b9, + 0x87ab, 0x87d7, 0x87af, 0x87b7, 0x87cb, 0x87bd, 0x87b2, 0x87ad, + 0x87b1, 0x87ac, 0x87a4, 0x87c2, 0x87d2, 0x87d6, 0x87da, 0x87df, + 0x87a8, 0x877b, 0x87d1, 0x87d3, 0x87d4, 0x87d5, 0x87a7, 0x87a9, + 0x87d8, 0x87c7, 0x877c, 0x87a5, 0x87a1, 0x87cf, 0x87c0, 0x877d, + 0x87cd, 0x87ca, 0x87a6, 0x87dc, +}; + +static const Summary16 hkscs2008_uni2indx_page34[15] = { + /* 0x3400 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0040 }, +}; +static const Summary16 hkscs2008_uni2indx_page38[8] = { + /* 0x3800 */ + { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0000 }, + { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0020 }, +}; +static const Summary16 hkscs2008_uni2indx_page3a[16] = { + /* 0x3a00 */ + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, + { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0000 }, { 2, 0x0020 }, +}; +static const Summary16 hkscs2008_uni2indx_page3e[15] = { + /* 0x3e00 */ + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x0000 }, + { 3, 0x0000 }, { 3, 0x0000 }, { 3, 0x1000 }, +}; +static const Summary16 hkscs2008_uni2indx_page40[25] = { + /* 0x4000 */ + { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, + { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, + { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0000 }, { 4, 0x0010 }, + { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0000 }, + /* 0x4100 */ + { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0000 }, { 5, 0x0002 }, + { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, { 6, 0x0000 }, + { 6, 0x0002 }, +}; +static const Summary16 hkscs2008_uni2indx_page43[31] = { + /* 0x4300 */ + { 7, 0x0400 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + /* 0x4400 */ + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, + { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0002 }, +}; +static const Summary16 hkscs2008_uni2indx_page46[11] = { + /* 0x4600 */ + { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, + { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, + { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x4000 }, +}; +static const Summary16 hkscs2008_uni2indx_page49[4] = { + /* 0x4900 */ + { 10, 0x0000 }, { 10, 0x0000 }, { 10, 0x8000 }, { 11, 0x0001 }, +}; +static const Summary16 hkscs2008_uni2indx_page52[5] = { + /* 0x5200 */ + { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, + { 12, 0x8000 }, +}; +static const Summary16 hkscs2008_uni2indx_page54[5] = { + /* 0x5400 */ + { 13, 0x0000 }, { 13, 0x0000 }, { 13, 0x0000 }, { 13, 0x0000 }, + { 13, 0x1000 }, +}; +static const Summary16 hkscs2008_uni2indx_page57[26] = { + /* 0x5700 */ + { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, + { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, + { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0008 }, + { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, + /* 0x5800 */ + { 15, 0x0000 }, { 15, 0x0100 }, { 16, 0x0000 }, { 16, 0x0000 }, + { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0000 }, { 16, 0x0000 }, + { 16, 0x0000 }, { 16, 0x0040 }, +}; +static const Summary16 hkscs2008_uni2indx_page62[13] = { + /* 0x6200 */ + { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, + { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, + { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, + { 17, 0x0002 }, +}; +static const Summary16 hkscs2008_uni2indx_page66[25] = { + /* 0x6600 */ + { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0000 }, + { 18, 0x0000 }, { 18, 0x0000 }, { 18, 0x0001 }, { 19, 0x0000 }, + { 19, 0x0000 }, { 19, 0x0000 }, { 19, 0x0000 }, { 19, 0x0000 }, + { 19, 0x0000 }, { 19, 0x0000 }, { 19, 0x0000 }, { 19, 0x0000 }, + /* 0x6700 */ + { 19, 0x0000 }, { 19, 0x0000 }, { 19, 0x0000 }, { 19, 0x0000 }, + { 19, 0x0000 }, { 19, 0x0000 }, { 19, 0x0000 }, { 19, 0x0000 }, + { 19, 0x0004 }, +}; +static const Summary16 hkscs2008_uni2indx_page6a[3] = { + /* 0x6a00 */ + { 20, 0x0000 }, { 20, 0x0000 }, { 20, 0x0200 }, +}; +static const Summary16 hkscs2008_uni2indx_page70[7] = { + /* 0x7000 */ + { 21, 0x0000 }, { 21, 0x0000 }, { 21, 0x0000 }, { 21, 0x0000 }, + { 21, 0x0000 }, { 21, 0x0000 }, { 21, 0x4000 }, +}; +static const Summary16 hkscs2008_uni2indx_page73[29] = { + /* 0x7300 */ + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, { 22, 0x0000 }, + { 22, 0x0010 }, { 23, 0x0000 }, { 23, 0x0000 }, { 23, 0x0000 }, + /* 0x7400 */ + { 23, 0x0000 }, { 23, 0x0000 }, { 23, 0x0000 }, { 23, 0x0000 }, + { 23, 0x1000 }, { 24, 0x0000 }, { 24, 0x0000 }, { 24, 0x0000 }, + { 24, 0x0000 }, { 24, 0x0000 }, { 24, 0x0000 }, { 24, 0x0000 }, + { 24, 0x0040 }, +}; +static const Summary16 hkscs2008_uni2indx_page79[45] = { + /* 0x7900 */ + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, + { 25, 0x0000 }, { 25, 0x0001 }, { 26, 0x0000 }, { 26, 0x0000 }, + /* 0x7a00 */ + { 26, 0x0000 }, { 26, 0x0000 }, { 26, 0x1000 }, { 27, 0x0004 }, + { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0004 }, + { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, + { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x1000 }, + /* 0x7b00 */ + { 30, 0x0000 }, { 30, 0x0000 }, { 30, 0x0000 }, { 30, 0x0000 }, + { 30, 0x0000 }, { 30, 0x0000 }, { 30, 0x0000 }, { 30, 0x0000 }, + { 30, 0x0000 }, { 30, 0x0000 }, { 30, 0x4000 }, { 31, 0x0000 }, + { 31, 0x0020 }, +}; +static const Summary16 hkscs2008_uni2indx_page84[34] = { + /* 0x8400 */ + { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, + { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, + { 32, 0x0010 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, + { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, + /* 0x8500 */ + { 33, 0x0010 }, { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, + { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, + { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, + { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, { 34, 0x0000 }, + /* 0x8600 */ + { 34, 0x0000 }, { 34, 0x0008 }, +}; +static const Summary16 hkscs2008_uni2indx_page88[10] = { + /* 0x8800 */ + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, + { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, + { 35, 0x0000 }, { 35, 0x2000 }, +}; +static const Summary16 hkscs2008_uni2indx_page8b[9] = { + /* 0x8b00 */ + { 36, 0x0000 }, { 36, 0x0000 }, { 36, 0x0000 }, { 36, 0x0000 }, + { 36, 0x0000 }, { 36, 0x0000 }, { 36, 0x0000 }, { 36, 0x0000 }, + { 36, 0x8000 }, +}; +static const Summary16 hkscs2008_uni2indx_page90[5] = { + /* 0x9000 */ + { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, { 37, 0x0000 }, + { 37, 0x0040 }, +}; +static const Summary16 hkscs2008_uni2indx_page92[2] = { + /* 0x9200 */ + { 38, 0x0000 }, { 38, 0x0100 }, +}; +static const Summary16 hkscs2008_uni2indx_page94[3] = { + /* 0x9400 */ + { 39, 0x0000 }, { 39, 0x0000 }, { 39, 0x8000 }, +}; +static const Summary16 hkscs2008_uni2indx_page97[5] = { + /* 0x9700 */ + { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, { 40, 0x0000 }, + { 40, 0x0400 }, +}; +static const Summary16 hkscs2008_uni2indx_page9f[13] = { + /* 0x9f00 */ + { 41, 0x0000 }, { 41, 0x0000 }, { 41, 0x0000 }, { 41, 0x0000 }, + { 41, 0x0000 }, { 41, 0x0000 }, { 41, 0x0000 }, { 41, 0x0000 }, + { 41, 0x0000 }, { 41, 0x00c0 }, { 43, 0x0000 }, { 43, 0x0000 }, + { 43, 0x0f80 }, +}; +static const Summary16 hkscs2008_uni2indx_page20a[9] = { + /* 0x20a00 */ + { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, + { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, { 48, 0x0000 }, + { 48, 0x0400 }, +}; +static const Summary16 hkscs2008_uni2indx_page21d[6] = { + /* 0x21d00 */ + { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, + { 49, 0x0000 }, { 49, 0x0008 }, +}; +static const Summary16 hkscs2008_uni2indx_page224[13] = { + /* 0x22400 */ + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x1000 }, + { 51, 0x1202 }, +}; +static const Summary16 hkscs2008_uni2indx_page231[22] = { + /* 0x23100 */ + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0000 }, + { 54, 0x0000 }, { 54, 0x0000 }, { 54, 0x0400 }, { 55, 0x0000 }, + /* 0x23200 */ + { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, { 55, 0x0000 }, + { 55, 0x0000 }, { 55, 0x4000 }, +}; +static const Summary16 hkscs2008_uni2indx_page235[26] = { + /* 0x23500 */ + { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, + { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, + { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0800 }, + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + /* 0x23600 */ + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + { 57, 0x4000 }, { 58, 0x4000 }, +}; +static const Summary16 hkscs2008_uni2indx_page241[7] = { + /* 0x24100 */ + { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, + { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0002 }, +}; +static const Summary16 hkscs2008_uni2indx_page258[14] = { + /* 0x25800 */ + { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, + { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, + { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, + { 60, 0x0000 }, { 60, 0x4000 }, +}; +static const Summary16 hkscs2008_uni2indx_page25d[12] = { + /* 0x25d00 */ + { 61, 0x0000 }, { 61, 0x0000 }, { 61, 0x0000 }, { 61, 0x0000 }, + { 61, 0x0000 }, { 61, 0x0000 }, { 61, 0x0000 }, { 61, 0x0000 }, + { 61, 0x0000 }, { 61, 0x0200 }, { 62, 0x0000 }, { 62, 0x0200 }, +}; +static const Summary16 hkscs2008_uni2indx_page260[3] = { + /* 0x26000 */ + { 63, 0x0000 }, { 63, 0x0000 }, { 63, 0x0002 }, +}; +static const Summary16 hkscs2008_uni2indx_page26e[9] = { + /* 0x26e00 */ + { 64, 0x0000 }, { 64, 0x0000 }, { 64, 0x0000 }, { 64, 0x0000 }, + { 64, 0x0000 }, { 64, 0x0000 }, { 64, 0x0000 }, { 64, 0x0000 }, + { 64, 0x0100 }, +}; +static const Summary16 hkscs2008_uni2indx_page27b[7] = { + /* 0x27b00 */ + { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, + { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0020 }, +}; +static const Summary16 hkscs2008_uni2indx_page289[1] = { + /* 0x28900 */ + { 66, 0x2000 }, +}; +static const Summary16 hkscs2008_uni2indx_page2ad[16] = { + /* 0x2ad00 */ + { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, + { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, + { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, + { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x0000 }, { 67, 0x8000 }, +}; + +static int +hkscs2008_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x3400 && wc < 0x34f0) + summary = &hkscs2008_uni2indx_page34[(wc>>4)-0x340]; + else if (wc >= 0x3800 && wc < 0x3880) + summary = &hkscs2008_uni2indx_page38[(wc>>4)-0x380]; + else if (wc >= 0x3a00 && wc < 0x3b00) + summary = &hkscs2008_uni2indx_page3a[(wc>>4)-0x3a0]; + else if (wc >= 0x3e00 && wc < 0x3ef0) + summary = &hkscs2008_uni2indx_page3e[(wc>>4)-0x3e0]; + else if (wc >= 0x4000 && wc < 0x4190) + summary = &hkscs2008_uni2indx_page40[(wc>>4)-0x400]; + else if (wc >= 0x4300 && wc < 0x44f0) + summary = &hkscs2008_uni2indx_page43[(wc>>4)-0x430]; + else if (wc >= 0x4600 && wc < 0x46b0) + summary = &hkscs2008_uni2indx_page46[(wc>>4)-0x460]; + else if (wc >= 0x4900 && wc < 0x4940) + summary = &hkscs2008_uni2indx_page49[(wc>>4)-0x490]; + else if (wc >= 0x5200 && wc < 0x5250) + summary = &hkscs2008_uni2indx_page52[(wc>>4)-0x520]; + else if (wc >= 0x5400 && wc < 0x5450) + summary = &hkscs2008_uni2indx_page54[(wc>>4)-0x540]; + else if (wc >= 0x5700 && wc < 0x58a0) + summary = &hkscs2008_uni2indx_page57[(wc>>4)-0x570]; + else if (wc >= 0x6200 && wc < 0x62d0) + summary = &hkscs2008_uni2indx_page62[(wc>>4)-0x620]; + else if (wc >= 0x6600 && wc < 0x6790) + summary = &hkscs2008_uni2indx_page66[(wc>>4)-0x660]; + else if (wc >= 0x6a00 && wc < 0x6a30) + summary = &hkscs2008_uni2indx_page6a[(wc>>4)-0x6a0]; + else if (wc >= 0x7000 && wc < 0x7070) + summary = &hkscs2008_uni2indx_page70[(wc>>4)-0x700]; + else if (wc >= 0x7300 && wc < 0x74d0) + summary = &hkscs2008_uni2indx_page73[(wc>>4)-0x730]; + else if (wc >= 0x7900 && wc < 0x7bd0) + summary = &hkscs2008_uni2indx_page79[(wc>>4)-0x790]; + else if (wc >= 0x8400 && wc < 0x8620) + summary = &hkscs2008_uni2indx_page84[(wc>>4)-0x840]; + else if (wc >= 0x8800 && wc < 0x88a0) + summary = &hkscs2008_uni2indx_page88[(wc>>4)-0x880]; + else if (wc >= 0x8b00 && wc < 0x8b90) + summary = &hkscs2008_uni2indx_page8b[(wc>>4)-0x8b0]; + else if (wc >= 0x9000 && wc < 0x9050) + summary = &hkscs2008_uni2indx_page90[(wc>>4)-0x900]; + else if (wc >= 0x9200 && wc < 0x9220) + summary = &hkscs2008_uni2indx_page92[(wc>>4)-0x920]; + else if (wc >= 0x9400 && wc < 0x9430) + summary = &hkscs2008_uni2indx_page94[(wc>>4)-0x940]; + else if (wc >= 0x9700 && wc < 0x9750) + summary = &hkscs2008_uni2indx_page97[(wc>>4)-0x970]; + else if (wc >= 0x9f00 && wc < 0x9fd0) + summary = &hkscs2008_uni2indx_page9f[(wc>>4)-0x9f0]; + else if (wc >= 0x20a00 && wc < 0x20a90) + summary = &hkscs2008_uni2indx_page20a[(wc>>4)-0x20a0]; + else if (wc >= 0x21d00 && wc < 0x21d60) + summary = &hkscs2008_uni2indx_page21d[(wc>>4)-0x21d0]; + else if (wc >= 0x22400 && wc < 0x224d0) + summary = &hkscs2008_uni2indx_page224[(wc>>4)-0x2240]; + else if (wc >= 0x23100 && wc < 0x23260) + summary = &hkscs2008_uni2indx_page231[(wc>>4)-0x2310]; + else if (wc >= 0x23500 && wc < 0x236a0) + summary = &hkscs2008_uni2indx_page235[(wc>>4)-0x2350]; + else if (wc >= 0x24100 && wc < 0x24170) + summary = &hkscs2008_uni2indx_page241[(wc>>4)-0x2410]; + else if (wc >= 0x25800 && wc < 0x258e0) + summary = &hkscs2008_uni2indx_page258[(wc>>4)-0x2580]; + else if (wc >= 0x25d00 && wc < 0x25dc0) + summary = &hkscs2008_uni2indx_page25d[(wc>>4)-0x25d0]; + else if (wc >= 0x26000 && wc < 0x26030) + summary = &hkscs2008_uni2indx_page260[(wc>>4)-0x2600]; + else if (wc >= 0x26e00 && wc < 0x26e90) + summary = &hkscs2008_uni2indx_page26e[(wc>>4)-0x26e0]; + else if (wc >= 0x27b00 && wc < 0x27b70) + summary = &hkscs2008_uni2indx_page27b[(wc>>4)-0x27b0]; + else if (wc >= 0x28900 && wc < 0x28910) + summary = &hkscs2008_uni2indx_page289[(wc>>4)-0x2890]; + else if (wc >= 0x2ad00 && wc < 0x2ae00) + summary = &hkscs2008_uni2indx_page2ad[(wc>>4)-0x2ad0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = hkscs2008_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/hp_roman8.h b/jni/parted/libiconv/lib/hp_roman8.h new file mode 100755 index 0000000..671a166 --- /dev/null +++ b/jni/parted/libiconv/lib/hp_roman8.h @@ -0,0 +1,118 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * HP-ROMAN8 + */ + +static const unsigned short hp_roman8_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x00c0, 0x00c2, 0x00c8, 0x00ca, 0x00cb, 0x00ce, 0x00cf, + 0x00b4, 0x02cb, 0x02c6, 0x00a8, 0x02dc, 0x00d9, 0x00db, 0x20a4, + /* 0xb0 */ + 0x00af, 0x00dd, 0x00fd, 0x00b0, 0x00c7, 0x00e7, 0x00d1, 0x00f1, + 0x00a1, 0x00bf, 0x00a4, 0x00a3, 0x00a5, 0x00a7, 0x0192, 0x00a2, + /* 0xc0 */ + 0x00e2, 0x00ea, 0x00f4, 0x00fb, 0x00e1, 0x00e9, 0x00f3, 0x00fa, + 0x00e0, 0x00e8, 0x00f2, 0x00f9, 0x00e4, 0x00eb, 0x00f6, 0x00fc, + /* 0xd0 */ + 0x00c5, 0x00ee, 0x00d8, 0x00c6, 0x00e5, 0x00ed, 0x00f8, 0x00e6, + 0x00c4, 0x00ec, 0x00d6, 0x00dc, 0x00c9, 0x00ef, 0x00df, 0x00d4, + /* 0xe0 */ + 0x00c1, 0x00c3, 0x00e3, 0x00d0, 0x00f0, 0x00cd, 0x00cc, 0x00d3, + 0x00d2, 0x00d5, 0x00f5, 0x0160, 0x0161, 0x00da, 0x0178, 0x00ff, + /* 0xf0 */ + 0x00de, 0x00fe, 0x00b7, 0x00b5, 0x00b6, 0x00be, 0x2014, 0x00bc, + 0x00bd, 0x00aa, 0x00ba, 0x00ab, 0x25a0, 0x00bb, 0x00b1, 0xfffd, +}; + +static int +hp_roman8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = hp_roman8_2uni[c-0xa0]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char hp_roman8_page00[96] = { + 0xa0, 0xb8, 0xbf, 0xbb, 0xba, 0xbc, 0x00, 0xbd, /* 0xa0-0xa7 */ + 0xab, 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xb0, /* 0xa8-0xaf */ + 0xb3, 0xfe, 0x00, 0x00, 0xa8, 0xf3, 0xf4, 0xf2, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xfa, 0xfd, 0xf7, 0xf8, 0xf5, 0xb9, /* 0xb8-0xbf */ + 0xa1, 0xe0, 0xa2, 0xe1, 0xd8, 0xd0, 0xd3, 0xb4, /* 0xc0-0xc7 */ + 0xa3, 0xdc, 0xa4, 0xa5, 0xe6, 0xe5, 0xa6, 0xa7, /* 0xc8-0xcf */ + 0xe3, 0xb6, 0xe8, 0xe7, 0xdf, 0xe9, 0xda, 0x00, /* 0xd0-0xd7 */ + 0xd2, 0xad, 0xed, 0xae, 0xdb, 0xb1, 0xf0, 0xde, /* 0xd8-0xdf */ + 0xc8, 0xc4, 0xc0, 0xe2, 0xcc, 0xd4, 0xd7, 0xb5, /* 0xe0-0xe7 */ + 0xc9, 0xc5, 0xc1, 0xcd, 0xd9, 0xd5, 0xd1, 0xdd, /* 0xe8-0xef */ + 0xe4, 0xb7, 0xca, 0xc6, 0xc2, 0xea, 0xce, 0x00, /* 0xf0-0xf7 */ + 0xd6, 0xcb, 0xc7, 0xc3, 0xcf, 0xb2, 0xf1, 0xef, /* 0xf8-0xff */ +}; +static const unsigned char hp_roman8_page01[56] = { + 0xeb, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char hp_roman8_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static int +hp_roman8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = hp_roman8_page00[wc-0x00a0]; + else if (wc >= 0x0160 && wc < 0x0198) + c = hp_roman8_page01[wc-0x0160]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = hp_roman8_page02[wc-0x02c0]; + else if (wc == 0x2014) + c = 0xf6; + else if (wc == 0x20a4) + c = 0xaf; + else if (wc == 0x25a0) + c = 0xfc; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/hz.h b/jni/parted/libiconv/lib/hz.h new file mode 100755 index 0000000..9e78518 --- /dev/null +++ b/jni/parted/libiconv/lib/hz.h @@ -0,0 +1,163 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * HZ + */ + +/* Specification: RFC 1842, RFC 1843 */ + +/* + * The state is 1 in GB mode, 0 in ASCII mode. + */ + +static int +hz_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + unsigned int count = 0; + unsigned char c; + for (;;) { + c = *s; + if (c == '~') { + if (n < count+2) + goto none; + c = s[1]; + if (state == 0) { + if (c == '~') { + *pwc = (ucs4_t) '~'; + conv->istate = state; + return count+2; + } + if (c == '{') { + state = 1; + s += 2; count += 2; + if (n < count+1) + goto none; + continue; + } + if (c == '\n') { + s += 2; count += 2; + if (n < count+1) + goto none; + continue; + } + } else { + if (c == '}') { + state = 0; + s += 2; count += 2; + if (n < count+1) + goto none; + continue; + } + } + goto ilseq; + } + break; + } + if (state == 0) { + *pwc = (ucs4_t) c; + conv->istate = state; + return count+1; + } else { + int ret; + if (n < count+2) + goto none; + ret = gb2312_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + conv->istate = state; + return count+2; + } + +none: + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +static int +hz_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + state_t state = conv->ostate; + unsigned char buf[2]; + int ret; + + /* Code set 0 (ASCII or GB 1988-89) */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state ? 3 : 1); + if (n < count) + return RET_TOOSMALL; + if (state) { + r[0] = '~'; + r[1] = '}'; + r += 2; + state = 0; + } + r[0] = buf[0]; + conv->ostate = state; + return count; + } + } + + /* Code set 1 (GB 2312-1980) */ + ret = gb2312_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state ? 2 : 4); + if (n < count) + return RET_TOOSMALL; + if (!state) { + r[0] = '~'; + r[1] = '{'; + r += 2; + state = 1; + } + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = state; + return count; + } + } + + return RET_ILUNI; +} + +static int +hz_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + if (state) { + if (n < 2) + return RET_TOOSMALL; + r[0] = '~'; + r[1] = '}'; + /* conv->ostate = 0; will be done by the caller */ + return 2; + } else + return 0; +} diff --git a/jni/parted/libiconv/lib/iconv.c b/jni/parted/libiconv/lib/iconv.c new file mode 100755 index 0000000..673457e --- /dev/null +++ b/jni/parted/libiconv/lib/iconv.c @@ -0,0 +1,629 @@ +/* + * Copyright (C) 1999-2008, 2011, 2016, 2018, 2020, 2022 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +#include + +#include +#include +#include +#include "config.h" +#include "localcharset.h" + +#ifdef __CYGWIN__ +#include +#endif + +#if ENABLE_EXTRA +/* + * Consider all system dependent encodings, for any system, + * and the extra encodings. + */ +#define USE_AIX +#define USE_OSF1 +#define USE_DOS +#define USE_ZOS +#define USE_EXTRA +#else +/* + * Consider those system dependent encodings that are needed for the + * current system. + */ +#ifdef _AIX +#define USE_AIX +#endif +#if defined(__osf__) || defined(VMS) +#define USE_OSF1 +#endif +#if defined(__DJGPP__) || (defined(_WIN32) && (defined(_MSC_VER) || defined(__MINGW32__))) +#define USE_DOS +#endif +/* Enable the EBCDIC encodings not only on z/OS but also on Linux/s390, for + easier interoperability between z/OS and Linux/s390. */ +#if defined(__MVS__) || (defined(__linux__) && (defined(__s390__) || defined(__s390x__))) +#define USE_ZOS +#endif +#endif + +/* + * Data type for general conversion loop. + */ +struct loop_funcs { + size_t (*loop_convert) (iconv_t icd, + const char* * inbuf, size_t *inbytesleft, + char* * outbuf, size_t *outbytesleft); + size_t (*loop_reset) (iconv_t icd, + char* * outbuf, size_t *outbytesleft); +}; + +/* + * Converters. + */ +#include "converters.h" + +/* + * Transliteration tables. + */ +#include "cjk_variants.h" +#include "translit.h" + +/* + * Table of all supported encodings. + */ +struct encoding { + struct mbtowc_funcs ifuncs; /* conversion multibyte -> unicode */ + struct wctomb_funcs ofuncs; /* conversion unicode -> multibyte */ + int oflags; /* flags for unicode -> multibyte conversion */ +}; +#define DEFALIAS(xxx_alias,xxx) /* nothing */ +enum { +#define DEFENCODING(xxx_names,xxx,xxx_ifuncs1,xxx_ifuncs2,xxx_ofuncs1,xxx_ofuncs2) \ + ei_##xxx , +#include "encodings.def" +#ifdef USE_AIX +# include "encodings_aix.def" +#endif +#ifdef USE_OSF1 +# include "encodings_osf1.def" +#endif +#ifdef USE_DOS +# include "encodings_dos.def" +#endif +#ifdef USE_ZOS +# include "encodings_zos.def" +#endif +#ifdef USE_EXTRA +# include "encodings_extra.def" +#endif +#include "encodings_local.def" +#undef DEFENCODING +ei_for_broken_compilers_that_dont_like_trailing_commas +}; +#include "flags.h" +static struct encoding const all_encodings[] = { +#define DEFENCODING(xxx_names,xxx,xxx_ifuncs1,xxx_ifuncs2,xxx_ofuncs1,xxx_ofuncs2) \ + { xxx_ifuncs1,xxx_ifuncs2, xxx_ofuncs1,xxx_ofuncs2, ei_##xxx##_oflags }, +#include "encodings.def" +#ifdef USE_AIX +# include "encodings_aix.def" +#endif +#ifdef USE_OSF1 +# include "encodings_osf1.def" +#endif +#ifdef USE_DOS +# include "encodings_dos.def" +#endif +#ifdef USE_ZOS +# include "encodings_zos.def" +#endif +#ifdef USE_EXTRA +# include "encodings_extra.def" +#endif +#undef DEFENCODING +#define DEFENCODING(xxx_names,xxx,xxx_ifuncs1,xxx_ifuncs2,xxx_ofuncs1,xxx_ofuncs2) \ + { xxx_ifuncs1,xxx_ifuncs2, xxx_ofuncs1,xxx_ofuncs2, 0 }, +#include "encodings_local.def" +#undef DEFENCODING +}; +#undef DEFALIAS + +/* + * Conversion loops. + */ +#include "loops.h" + +/* + * Alias lookup function. + * Defines + * struct alias { int name; unsigned int encoding_index; }; + * const struct alias * aliases_lookup (const char *str, unsigned int len); + * #define MAX_WORD_LENGTH ... + */ +#if defined _AIX +# include "aliases_sysaix.h" +#elif defined hpux || defined __hpux +# include "aliases_syshpux.h" +#elif defined __osf__ +# include "aliases_sysosf1.h" +#elif defined __sun +# include "aliases_syssolaris.h" +#else +# include "aliases.h" +#endif + +/* + * System dependent alias lookup function. + * Defines + * const struct alias * aliases2_lookup (const char *str); + */ +#if defined(USE_AIX) || defined(USE_OSF1) || defined(USE_DOS) || defined(USE_ZOS) || defined(USE_EXTRA) /* || ... */ +struct stringpool2_t { +#define S(tag,name,encoding_index) char stringpool_##tag[sizeof(name)]; +#include "aliases2.h" +#undef S +}; +static const struct stringpool2_t stringpool2_contents = { +#define S(tag,name,encoding_index) name, +#include "aliases2.h" +#undef S +}; +#define stringpool2 ((const char *) &stringpool2_contents) +static const struct alias sysdep_aliases[] = { +#define S(tag,name,encoding_index) { (int)(long)&((struct stringpool2_t *)0)->stringpool_##tag, encoding_index }, +#include "aliases2.h" +#undef S +}; +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const struct alias * +aliases2_lookup (register const char *str) +{ + const struct alias * ptr; + unsigned int count; + for (ptr = sysdep_aliases, count = sizeof(sysdep_aliases)/sizeof(sysdep_aliases[0]); count > 0; ptr++, count--) + if (!strcmp(str, stringpool2 + ptr->name)) + return ptr; + return NULL; +} +#else +#define aliases2_lookup(str) NULL +#define stringpool2 NULL +#endif + +#if 0 +/* Like !strcasecmp, except that the both strings can be assumed to be ASCII + and the first string can be assumed to be in uppercase. */ +static int strequal (const char* str1, const char* str2) +{ + unsigned char c1; + unsigned char c2; + for (;;) { + c1 = * (unsigned char *) str1++; + c2 = * (unsigned char *) str2++; + if (c1 == 0) + break; + if (c2 >= 'a' && c2 <= 'z') + c2 -= 'a'-'A'; + if (c1 != c2) + break; + } + return (c1 == c2); +} +#endif + +iconv_t iconv_open (const char* tocode, const char* fromcode) +{ + struct conv_struct * cd; + unsigned int from_index; + int from_wchar; + unsigned int to_index; + int to_wchar; + int transliterate; + int discard_ilseq; + +#include "iconv_open1.h" + + cd = (struct conv_struct *) malloc(from_wchar != to_wchar + ? sizeof(struct wchar_conv_struct) + : sizeof(struct conv_struct)); + if (cd == NULL) { + errno = ENOMEM; + return (iconv_t)(-1); + } + +#include "iconv_open2.h" + + return (iconv_t)cd; +invalid: + errno = EINVAL; + return (iconv_t)(-1); +} + +size_t iconv (iconv_t icd, + ICONV_CONST char* * inbuf, size_t *inbytesleft, + char* * outbuf, size_t *outbytesleft) +{ + conv_t cd = (conv_t) icd; + if (inbuf == NULL || *inbuf == NULL) + return cd->lfuncs.loop_reset(icd,outbuf,outbytesleft); + else + return cd->lfuncs.loop_convert(icd, + (const char* *)inbuf,inbytesleft, + outbuf,outbytesleft); +} + +int iconv_close (iconv_t icd) +{ + conv_t cd = (conv_t) icd; + free(cd); + return 0; +} + +#ifndef LIBICONV_PLUG + +/* + * Verify that a 'struct conv_struct' and a 'struct wchar_conv_struct' each + * fit in an iconv_allocation_t. + * If this verification fails, iconv_allocation_t must be made larger and + * the major version in LIBICONV_VERSION_INFO must be bumped. + * Currently 'struct conv_struct' has 21 integer/pointer fields, and + * 'struct wchar_conv_struct' additionally has an 'mbstate_t' field. + */ +typedef int verify_size_1[2 * (sizeof (struct conv_struct) <= sizeof (iconv_allocation_t)) - 1]; +typedef int verify_size_2[2 * (sizeof (struct wchar_conv_struct) <= sizeof (iconv_allocation_t)) - 1]; + +int iconv_open_into (const char* tocode, const char* fromcode, + iconv_allocation_t* resultp) +{ + struct conv_struct * cd; + unsigned int from_index; + int from_wchar; + unsigned int to_index; + int to_wchar; + int transliterate; + int discard_ilseq; + +#include "iconv_open1.h" + + cd = (struct conv_struct *) resultp; + +#include "iconv_open2.h" + + return 0; +invalid: + errno = EINVAL; + return -1; +} + +int iconvctl (iconv_t icd, int request, void* argument) +{ + conv_t cd = (conv_t) icd; + switch (request) { + case ICONV_TRIVIALP: + *(int *)argument = + ((cd->lfuncs.loop_convert == unicode_loop_convert + && cd->iindex == cd->oindex) + || cd->lfuncs.loop_convert == wchar_id_loop_convert + ? 1 : 0); + return 0; + case ICONV_GET_TRANSLITERATE: + *(int *)argument = cd->transliterate; + return 0; + case ICONV_SET_TRANSLITERATE: + cd->transliterate = (*(const int *)argument ? 1 : 0); + return 0; + case ICONV_GET_DISCARD_ILSEQ: + *(int *)argument = cd->discard_ilseq; + return 0; + case ICONV_SET_DISCARD_ILSEQ: + cd->discard_ilseq = (*(const int *)argument ? 1 : 0); + return 0; + case ICONV_SET_HOOKS: + if (argument != NULL) { + cd->hooks = *(const struct iconv_hooks *)argument; + } else { + cd->hooks.uc_hook = NULL; + cd->hooks.wc_hook = NULL; + cd->hooks.data = NULL; + } + return 0; + case ICONV_SET_FALLBACKS: + if (argument != NULL) { + cd->fallbacks = *(const struct iconv_fallbacks *)argument; + } else { + cd->fallbacks.mb_to_uc_fallback = NULL; + cd->fallbacks.uc_to_mb_fallback = NULL; + cd->fallbacks.mb_to_wc_fallback = NULL; + cd->fallbacks.wc_to_mb_fallback = NULL; + cd->fallbacks.data = NULL; + } + return 0; + default: + errno = EINVAL; + return -1; + } +} + +/* An alias after its name has been converted from 'int' to 'const char*'. */ +struct nalias { const char* name; unsigned int encoding_index; }; + +static int compare_by_index (const void * arg1, const void * arg2) +{ + const struct nalias * alias1 = (const struct nalias *) arg1; + const struct nalias * alias2 = (const struct nalias *) arg2; + return (int)alias1->encoding_index - (int)alias2->encoding_index; +} + +static int compare_by_name (const void * arg1, const void * arg2) +{ + const char * name1 = *(const char * const *)arg1; + const char * name2 = *(const char * const *)arg2; + /* Compare alphabetically, but put "CS" names at the end. */ + int sign = strcmp(name1,name2); + if (sign != 0) { + sign = ((name1[0]=='C' && name1[1]=='S') - (name2[0]=='C' && name2[1]=='S')) + * 4 + (sign >= 0 ? 1 : -1); + } + return sign; +} + +void iconvlist (int (*do_one) (unsigned int namescount, + const char * const * names, + void* data), + void* data) +{ +#define aliascount1 sizeof(aliases)/sizeof(aliases[0]) +#ifndef aliases2_lookup +#define aliascount2 sizeof(sysdep_aliases)/sizeof(sysdep_aliases[0]) +#else +#define aliascount2 0 +#endif +#define aliascount (aliascount1+aliascount2) + struct nalias aliasbuf[aliascount]; + const char * namesbuf[aliascount]; + size_t num_aliases; + { + /* Put all existing aliases into a buffer. */ + size_t i; + size_t j; + j = 0; + for (i = 0; i < aliascount1; i++) { + const struct alias * p = &aliases[i]; + if (p->name >= 0 + && p->encoding_index != ei_local_char + && p->encoding_index != ei_local_wchar_t) { + aliasbuf[j].name = stringpool + p->name; + aliasbuf[j].encoding_index = p->encoding_index; + j++; + } + } +#ifndef aliases2_lookup + for (i = 0; i < aliascount2; i++) { + aliasbuf[j].name = stringpool2 + sysdep_aliases[i].name; + aliasbuf[j].encoding_index = sysdep_aliases[i].encoding_index; + j++; + } +#endif + num_aliases = j; + } + /* Sort by encoding_index. */ + if (num_aliases > 1) + qsort(aliasbuf, num_aliases, sizeof(struct nalias), compare_by_index); + { + /* Process all aliases with the same encoding_index together. */ + size_t j; + j = 0; + while (j < num_aliases) { + unsigned int ei = aliasbuf[j].encoding_index; + size_t i = 0; + do + namesbuf[i++] = aliasbuf[j++].name; + while (j < num_aliases && aliasbuf[j].encoding_index == ei); + if (i > 1) + qsort(namesbuf, i, sizeof(const char *), compare_by_name); + /* Call the callback. */ + if (do_one(i,namesbuf,data)) + break; + } + } +#undef aliascount +#undef aliascount2 +#undef aliascount1 +} + +/* + * Table of canonical names of encodings. + * Instead of strings, it contains offsets into stringpool and stringpool2. + */ +static const unsigned short all_canonical[] = { +#if defined _AIX +# include "canonical_sysaix.h" +#elif defined hpux || defined __hpux +# include "canonical_syshpux.h" +#elif defined __osf__ +# include "canonical_sysosf1.h" +#elif defined __sun +# include "canonical_syssolaris.h" +#else +# include "canonical.h" +#endif +#ifdef USE_AIX +# if defined _AIX +# include "canonical_aix_sysaix.h" +# else +# include "canonical_aix.h" +# endif +#endif +#ifdef USE_OSF1 +# if defined __osf__ +# include "canonical_osf1_sysosf1.h" +# else +# include "canonical_osf1.h" +# endif +#endif +#ifdef USE_DOS +# include "canonical_dos.h" +#endif +#ifdef USE_ZOS +# include "canonical_zos.h" +#endif +#ifdef USE_EXTRA +# include "canonical_extra.h" +#endif +#if defined _AIX +# include "canonical_local_sysaix.h" +#elif defined hpux || defined __hpux +# include "canonical_local_syshpux.h" +#elif defined __osf__ +# include "canonical_local_sysosf1.h" +#elif defined __sun +# include "canonical_local_syssolaris.h" +#else +# include "canonical_local.h" +#endif +}; + +const char * iconv_canonicalize (const char * name) +{ + const char* code; + char buf[MAX_WORD_LENGTH+10+1]; + const char* cp; + char* bp; + const struct alias * ap; + unsigned int count; + unsigned int index; + const char* pool; + + /* Before calling aliases_lookup, convert the input string to upper case, + * and check whether it's entirely ASCII (we call gperf with option "-7" + * to achieve a smaller table) and non-empty. If it's not entirely ASCII, + * or if it's too long, it is not a valid encoding name. + */ + for (code = name;;) { + /* Search code in the table. */ + for (cp = code, bp = buf, count = MAX_WORD_LENGTH+10+1; ; cp++, bp++) { + unsigned char c = (unsigned char) *cp; + if (c >= 0x80) + goto invalid; + if (c >= 'a' && c <= 'z') + c -= 'a'-'A'; + *bp = c; + if (c == '\0') + break; + if (--count == 0) + goto invalid; + } + for (;;) { + if (bp-buf >= 10 && memcmp(bp-10,"//TRANSLIT",10)==0) { + bp -= 10; + *bp = '\0'; + continue; + } + if (bp-buf >= 8 && memcmp(bp-8,"//IGNORE",8)==0) { + bp -= 8; + *bp = '\0'; + continue; + } + break; + } + if (buf[0] == '\0') { + code = locale_charset(); + /* Avoid an endless loop that could occur when using an older version + of localcharset.c. */ + if (code[0] == '\0') + goto invalid; + continue; + } + pool = stringpool; + ap = aliases_lookup(buf,bp-buf); + if (ap == NULL) { + pool = stringpool2; + ap = aliases2_lookup(buf); + if (ap == NULL) + goto invalid; + } + if (ap->encoding_index == ei_local_char) { + code = locale_charset(); + /* Avoid an endless loop that could occur when using an older version + of localcharset.c. */ + if (code[0] == '\0') + goto invalid; + continue; + } + if (ap->encoding_index == ei_local_wchar_t) { + /* On systems which define __STDC_ISO_10646__, wchar_t is Unicode. + This is also the case on native Woe32 systems and Cygwin >= 1.7, where + we know that it is UTF-16. */ +#if (defined _WIN32 && !defined __CYGWIN__) || (defined __CYGWIN__ && CYGWIN_VERSION_DLL_MAJOR >= 1007) + if (sizeof(wchar_t) == 4) { + index = ei_ucs4internal; + break; + } + if (sizeof(wchar_t) == 2) { +# if WORDS_LITTLEENDIAN + index = ei_utf16le; +# else + index = ei_utf16be; +# endif + break; + } +#elif __STDC_ISO_10646__ + if (sizeof(wchar_t) == 4) { + index = ei_ucs4internal; + break; + } + if (sizeof(wchar_t) == 2) { + index = ei_ucs2internal; + break; + } + if (sizeof(wchar_t) == 1) { + index = ei_iso8859_1; + break; + } +#endif + } + index = ap->encoding_index; + break; + } + return all_canonical[index] + pool; + invalid: + return name; +} + +int _libiconv_version = _LIBICONV_VERSION; + +#if defined __FreeBSD__ && !defined __gnu_freebsd__ +/* GNU libiconv is the native FreeBSD iconv implementation since 2002. + It wants to define the symbols 'iconv_open', 'iconv', 'iconv_close'. */ +#define strong_alias(name, aliasname) _strong_alias(name, aliasname) +#define _strong_alias(name, aliasname) \ + extern __typeof (name) aliasname __attribute__ ((alias (#name))); +#undef iconv_open +#undef iconv +#undef iconv_close +strong_alias (libiconv_open, iconv_open) +strong_alias (libiconv, iconv) +strong_alias (libiconv_close, iconv_close) +#endif + +#endif diff --git a/jni/parted/libiconv/lib/iconv_open1.h b/jni/parted/libiconv/lib/iconv_open1.h new file mode 100755 index 0000000..c6b24ef --- /dev/null +++ b/jni/parted/libiconv/lib/iconv_open1.h @@ -0,0 +1,228 @@ +/* + * Copyright (C) 1999-2008, 2011, 2018, 2020 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* Part 1 of iconv_open. + Input: const char* tocode, const char* fromcode. + Output: + unsigned int from_index; + int from_wchar; + unsigned int to_index; + int to_wchar; + int transliterate; + int discard_ilseq; + Jumps to 'invalid' in case of errror. + */ +{ + char buf[MAX_WORD_LENGTH+10+1]; + const char* cp; + char* bp; + const struct alias * ap; + unsigned int count; + + transliterate = 0; + discard_ilseq = 0; + + /* Before calling aliases_lookup, convert the input string to upper case, + * and check whether it's entirely ASCII (we call gperf with option "-7" + * to achieve a smaller table) and non-empty. If it's not entirely ASCII, + * or if it's too long, it is not a valid encoding name. + */ + for (to_wchar = 0;;) { + /* Search tocode in the table. */ + for (cp = tocode, bp = buf, count = MAX_WORD_LENGTH+10+1; ; cp++, bp++) { + unsigned char c = (unsigned char) *cp; + if (c >= 0x80) + goto invalid; + if (c >= 'a' && c <= 'z') + c -= 'a'-'A'; + *bp = c; + if (c == '\0') + break; + if (--count == 0) + goto invalid; + } + for (;;) { + if (bp-buf >= 10 && memcmp(bp-10,"//TRANSLIT",10)==0) { + bp -= 10; + *bp = '\0'; + transliterate = 1; + continue; + } + if (bp-buf >= 8 && memcmp(bp-8,"//IGNORE",8)==0) { + bp -= 8; + *bp = '\0'; + discard_ilseq = 1; + continue; + } + break; + } + if (buf[0] == '\0') { + tocode = locale_charset(); + /* Avoid an endless loop that could occur when using an older version + of localcharset.c. */ + if (tocode[0] == '\0') + goto invalid; + continue; + } + ap = aliases_lookup(buf,bp-buf); + if (ap == NULL) { + ap = aliases2_lookup(buf); + if (ap == NULL) + goto invalid; + } + if (ap->encoding_index == ei_local_char) { + tocode = locale_charset(); + /* Avoid an endless loop that could occur when using an older version + of localcharset.c. */ + if (tocode[0] == '\0') + goto invalid; + continue; + } + if (ap->encoding_index == ei_local_wchar_t) { + /* On systems which define __STDC_ISO_10646__, wchar_t is Unicode. + This is also the case on native Woe32 systems and Cygwin >= 1.7, where + we know that it is UTF-16. */ +#if (defined _WIN32 && !defined __CYGWIN__) || (defined __CYGWIN__ && CYGWIN_VERSION_DLL_MAJOR >= 1007) + if (sizeof(wchar_t) == 4) { + to_index = ei_ucs4internal; + break; + } + if (sizeof(wchar_t) == 2) { +# if WORDS_LITTLEENDIAN + to_index = ei_utf16le; +# else + to_index = ei_utf16be; +# endif + break; + } +#elif __STDC_ISO_10646__ + if (sizeof(wchar_t) == 4) { + to_index = ei_ucs4internal; + break; + } + if (sizeof(wchar_t) == 2) { + to_index = ei_ucs2internal; + break; + } + if (sizeof(wchar_t) == 1) { + to_index = ei_iso8859_1; + break; + } +#endif +#if HAVE_MBRTOWC + to_wchar = 1; + tocode = locale_charset(); + continue; +#endif + goto invalid; + } + to_index = ap->encoding_index; + break; + } + for (from_wchar = 0;;) { + /* Search fromcode in the table. */ + for (cp = fromcode, bp = buf, count = MAX_WORD_LENGTH+10+1; ; cp++, bp++) { + unsigned char c = (unsigned char) *cp; + if (c >= 0x80) + goto invalid; + if (c >= 'a' && c <= 'z') + c -= 'a'-'A'; + *bp = c; + if (c == '\0') + break; + if (--count == 0) + goto invalid; + } + for (;;) { + if (bp-buf >= 10 && memcmp(bp-10,"//TRANSLIT",10)==0) { + bp -= 10; + *bp = '\0'; + continue; + } + if (bp-buf >= 8 && memcmp(bp-8,"//IGNORE",8)==0) { + bp -= 8; + *bp = '\0'; + continue; + } + break; + } + if (buf[0] == '\0') { + fromcode = locale_charset(); + /* Avoid an endless loop that could occur when using an older version + of localcharset.c. */ + if (fromcode[0] == '\0') + goto invalid; + continue; + } + ap = aliases_lookup(buf,bp-buf); + if (ap == NULL) { + ap = aliases2_lookup(buf); + if (ap == NULL) + goto invalid; + } + if (ap->encoding_index == ei_local_char) { + fromcode = locale_charset(); + /* Avoid an endless loop that could occur when using an older version + of localcharset.c. */ + if (fromcode[0] == '\0') + goto invalid; + continue; + } + if (ap->encoding_index == ei_local_wchar_t) { + /* On systems which define __STDC_ISO_10646__, wchar_t is Unicode. + This is also the case on native Woe32 systems and Cygwin >= 1.7, where + we know that it is UTF-16. */ +#if (defined _WIN32 && !defined __CYGWIN__) || (defined __CYGWIN__ && CYGWIN_VERSION_DLL_MAJOR >= 1007) + if (sizeof(wchar_t) == 4) { + from_index = ei_ucs4internal; + break; + } + if (sizeof(wchar_t) == 2) { +# if WORDS_LITTLEENDIAN + from_index = ei_utf16le; +# else + from_index = ei_utf16be; +# endif + break; + } +#elif __STDC_ISO_10646__ + if (sizeof(wchar_t) == 4) { + from_index = ei_ucs4internal; + break; + } + if (sizeof(wchar_t) == 2) { + from_index = ei_ucs2internal; + break; + } + if (sizeof(wchar_t) == 1) { + from_index = ei_iso8859_1; + break; + } +#endif +#if HAVE_WCRTOMB + from_wchar = 1; + fromcode = locale_charset(); + continue; +#endif + goto invalid; + } + from_index = ap->encoding_index; + break; + } +} diff --git a/jni/parted/libiconv/lib/iconv_open2.h b/jni/parted/libiconv/lib/iconv_open2.h new file mode 100755 index 0000000..aaac547 --- /dev/null +++ b/jni/parted/libiconv/lib/iconv_open2.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 1999-2009 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* Part 2 of iconv_open. + Input: + struct conv_struct * cd; + unsigned int from_index; + int from_wchar; + unsigned int to_index; + int to_wchar; + int transliterate; + int discard_ilseq; + Output: none. + Side effects: Fills cd. + */ + + cd->iindex = from_index; + cd->ifuncs = all_encodings[from_index].ifuncs; + cd->oindex = to_index; + cd->ofuncs = all_encodings[to_index].ofuncs; + cd->oflags = all_encodings[to_index].oflags; + /* Initialize the loop functions. */ +#if HAVE_MBRTOWC + if (to_wchar) { +#if HAVE_WCRTOMB + if (from_wchar) { + cd->lfuncs.loop_convert = wchar_id_loop_convert; + cd->lfuncs.loop_reset = wchar_id_loop_reset; + } else +#endif + { + cd->lfuncs.loop_convert = wchar_to_loop_convert; + cd->lfuncs.loop_reset = wchar_to_loop_reset; + } + } else +#endif + { +#if HAVE_WCRTOMB + if (from_wchar) { + cd->lfuncs.loop_convert = wchar_from_loop_convert; + cd->lfuncs.loop_reset = wchar_from_loop_reset; + } else +#endif + { + cd->lfuncs.loop_convert = unicode_loop_convert; + cd->lfuncs.loop_reset = unicode_loop_reset; + } + } + /* Initialize the states. */ + memset(&cd->istate,'\0',sizeof(state_t)); + memset(&cd->ostate,'\0',sizeof(state_t)); + /* Initialize the operation flags. */ + cd->transliterate = transliterate; + cd->discard_ilseq = discard_ilseq; + #ifndef LIBICONV_PLUG + cd->fallbacks.mb_to_uc_fallback = NULL; + cd->fallbacks.uc_to_mb_fallback = NULL; + cd->fallbacks.mb_to_wc_fallback = NULL; + cd->fallbacks.wc_to_mb_fallback = NULL; + cd->fallbacks.data = NULL; + cd->hooks.uc_hook = NULL; + cd->hooks.wc_hook = NULL; + cd->hooks.data = NULL; + #endif + /* Initialize additional fields. */ + if (from_wchar != to_wchar) { + struct wchar_conv_struct * wcd = (struct wchar_conv_struct *) cd; +#if HAVE_WCRTOMB || HAVE_MBRTOWC + memset(&wcd->state,'\0',sizeof(mbstate_t)); +#endif + } + /* Done. */ diff --git a/jni/parted/libiconv/lib/iso2022_cn.h b/jni/parted/libiconv/lib/iso2022_cn.h new file mode 100755 index 0000000..800863c --- /dev/null +++ b/jni/parted/libiconv/lib/iso2022_cn.h @@ -0,0 +1,323 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-2022-CN + */ + +/* Specification: RFC 1922 */ + +#define ESC 0x1b +#define SO 0x0e +#define SI 0x0f + +/* + * The state is composed of one of the following values + */ +#define STATE_ASCII 0 +#define STATE_TWOBYTE 1 +/* + * and one of the following values, << 8 + */ +#define STATE2_NONE 0 +#define STATE2_DESIGNATED_GB2312 1 +#define STATE2_DESIGNATED_CNS11643_1 2 +/* + * and one of the following values, << 16 + */ +#define STATE3_NONE 0 +#define STATE3_DESIGNATED_CNS11643_2 1 + +#define SPLIT_STATE \ + unsigned int state1 = state & 0xff, state2 = (state >> 8) & 0xff, state3 = state >> 16 +#define COMBINE_STATE \ + state = (state3 << 16) | (state2 << 8) | state1 + +static int +iso2022_cn_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + SPLIT_STATE; + int count = 0; + unsigned char c; + for (;;) { + c = *s; + if (c == ESC) { + if (n < count+4) + goto none; + if (s[1] == '$') { + if (s[2] == ')') { + if (s[3] == 'A') { + state2 = STATE2_DESIGNATED_GB2312; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + if (s[3] == 'G') { + state2 = STATE2_DESIGNATED_CNS11643_1; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + } + if (s[2] == '*') { + if (s[3] == 'H') { + state3 = STATE3_DESIGNATED_CNS11643_2; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + } + } + if (s[1] == 'N') { + switch (state3) { + case STATE3_NONE: + goto ilseq; + case STATE3_DESIGNATED_CNS11643_2: + if (s[2] < 0x80 && s[3] < 0x80) { + int ret = cns11643_2_mbtowc(conv,pwc,s+2,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+4; + } else + goto ilseq; + default: abort(); + } + } + goto ilseq; + } + if (c == SO) { + if (state2 != STATE2_DESIGNATED_GB2312 && state2 != STATE2_DESIGNATED_CNS11643_1) + goto ilseq; + state1 = STATE_TWOBYTE; + s++; count++; + if (n < count+1) + goto none; + continue; + } + if (c == SI) { + state1 = STATE_ASCII; + s++; count++; + if (n < count+1) + goto none; + continue; + } + break; + } + switch (state1) { + case STATE_ASCII: + if (c < 0x80) { + int ret = ascii_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + if (*pwc == 0x000a || *pwc == 0x000d) { + state2 = STATE2_NONE; state3 = STATE3_NONE; + } + COMBINE_STATE; + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_TWOBYTE: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret; + switch (state2) { + case STATE2_NONE: + goto ilseq; + case STATE2_DESIGNATED_GB2312: + ret = gb2312_mbtowc(conv,pwc,s,2); break; + case STATE2_DESIGNATED_CNS11643_1: + ret = cns11643_1_mbtowc(conv,pwc,s,2); break; + default: abort(); + } + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+2; + } else + goto ilseq; + default: abort(); + } + +none: + COMBINE_STATE; + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + COMBINE_STATE; + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +static int +iso2022_cn_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + state_t state = conv->ostate; + SPLIT_STATE; + unsigned char buf[3]; + int ret; + + /* There is no need to handle Unicode 3.1 tag characters and to look for + "zh-CN" or "zh-TW" tags, because GB2312 and CNS11643 are disjoint. */ + + /* Try ASCII. */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state1 == STATE_ASCII ? 1 : 2); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_ASCII) { + r[0] = SI; + r += 1; + state1 = STATE_ASCII; + } + r[0] = buf[0]; + if (wc == 0x000a || wc == 0x000d) { + state2 = STATE2_NONE; state3 = STATE3_NONE; + } + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + /* Try GB 2312-1980. */ + ret = gb2312_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state2 == STATE2_DESIGNATED_GB2312 ? 0 : 4) + (state1 == STATE_TWOBYTE ? 0 : 1) + 2; + if (n < count) + return RET_TOOSMALL; + if (state2 != STATE2_DESIGNATED_GB2312) { + r[0] = ESC; + r[1] = '$'; + r[2] = ')'; + r[3] = 'A'; + r += 4; + state2 = STATE2_DESIGNATED_GB2312; + } + if (state1 != STATE_TWOBYTE) { + r[0] = SO; + r += 1; + state1 = STATE_TWOBYTE; + } + r[0] = buf[0]; + r[1] = buf[1]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + ret = cns11643_wctomb(conv,buf,wc,3); + if (ret != RET_ILUNI) { + if (ret != 3) abort(); + + /* Try CNS 11643-1992 Plane 1. */ + if (buf[0] == 1 && buf[1] < 0x80 && buf[2] < 0x80) { + int count = (state2 == STATE2_DESIGNATED_CNS11643_1 ? 0 : 4) + (state1 == STATE_TWOBYTE ? 0 : 1) + 2; + if (n < count) + return RET_TOOSMALL; + if (state2 != STATE2_DESIGNATED_CNS11643_1) { + r[0] = ESC; + r[1] = '$'; + r[2] = ')'; + r[3] = 'G'; + r += 4; + state2 = STATE2_DESIGNATED_CNS11643_1; + } + if (state1 != STATE_TWOBYTE) { + r[0] = SO; + r += 1; + state1 = STATE_TWOBYTE; + } + r[0] = buf[1]; + r[1] = buf[2]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + + /* Try CNS 11643-1992 Plane 2. */ + if (buf[0] == 2 && buf[1] < 0x80 && buf[2] < 0x80) { + int count = (state3 == STATE3_DESIGNATED_CNS11643_2 ? 0 : 4) + 4; + if (n < count) + return RET_TOOSMALL; + if (state3 != STATE3_DESIGNATED_CNS11643_2) { + r[0] = ESC; + r[1] = '$'; + r[2] = '*'; + r[3] = 'H'; + r += 4; + state3 = STATE3_DESIGNATED_CNS11643_2; + } + r[0] = ESC; + r[1] = 'N'; + r[2] = buf[1]; + r[3] = buf[2]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + return RET_ILUNI; +} + +static int +iso2022_cn_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + SPLIT_STATE; + (void)state2; + (void)state3; + if (state1 != STATE_ASCII) { + if (n < 1) + return RET_TOOSMALL; + r[0] = SI; + /* conv->ostate = 0; will be done by the caller */ + return 1; + } else + return 0; +} + +#undef COMBINE_STATE +#undef SPLIT_STATE +#undef STATE3_DESIGNATED_CNS11643_2 +#undef STATE3_NONE +#undef STATE2_DESIGNATED_CNS11643_1 +#undef STATE2_DESIGNATED_GB2312 +#undef STATE2_NONE +#undef STATE_TWOBYTE +#undef STATE_ASCII diff --git a/jni/parted/libiconv/lib/iso2022_cnext.h b/jni/parted/libiconv/lib/iso2022_cnext.h new file mode 100755 index 0000000..8e6d309 --- /dev/null +++ b/jni/parted/libiconv/lib/iso2022_cnext.h @@ -0,0 +1,589 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-2022-CN-EXT + */ + +/* Specification: RFC 1922 */ + +#define ESC 0x1b +#define SO 0x0e +#define SI 0x0f + +/* + * The state is composed of one of the following values + */ +#define STATE_ASCII 0 +#define STATE_TWOBYTE 1 +/* + * and one of the following values, << 8 + */ +#define STATE2_NONE 0 +#define STATE2_DESIGNATED_GB2312 1 +#define STATE2_DESIGNATED_CNS11643_1 2 +#define STATE2_DESIGNATED_ISO_IR_165 3 +/* + * and one of the following values, << 16 + */ +#define STATE3_NONE 0 +#define STATE3_DESIGNATED_CNS11643_2 1 +/* + * and one of the following values, << 24 + */ +#define STATE4_NONE 0 +#define STATE4_DESIGNATED_CNS11643_3 1 +#define STATE4_DESIGNATED_CNS11643_4 2 +#define STATE4_DESIGNATED_CNS11643_5 3 +#define STATE4_DESIGNATED_CNS11643_6 4 +#define STATE4_DESIGNATED_CNS11643_7 5 + +#define SPLIT_STATE \ + unsigned int state1 = state & 0xff, state2 = (state >> 8) & 0xff, state3 = (state >> 16) & 0xff, state4 = state >> 24 +#define COMBINE_STATE \ + state = (state4 << 24) | (state3 << 16) | (state2 << 8) | state1 + +static int +iso2022_cn_ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + SPLIT_STATE; + int count = 0; + unsigned char c; + for (;;) { + c = *s; + if (c == ESC) { + if (n < count+4) + goto none; + if (s[1] == '$') { + if (s[2] == ')') { + if (s[3] == 'A') { + state2 = STATE2_DESIGNATED_GB2312; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + if (s[3] == 'G') { + state2 = STATE2_DESIGNATED_CNS11643_1; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + if (s[3] == 'E') { + state2 = STATE2_DESIGNATED_ISO_IR_165; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + } + if (s[2] == '*') { + if (s[3] == 'H') { + state3 = STATE3_DESIGNATED_CNS11643_2; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + } + if (s[2] == '+') { + if (s[3] == 'I') { + state4 = STATE4_DESIGNATED_CNS11643_3; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + if (s[3] == 'J') { + state4 = STATE4_DESIGNATED_CNS11643_4; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + if (s[3] == 'K') { + state4 = STATE4_DESIGNATED_CNS11643_5; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + if (s[3] == 'L') { + state4 = STATE4_DESIGNATED_CNS11643_6; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + if (s[3] == 'M') { + state4 = STATE4_DESIGNATED_CNS11643_7; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + } + } + if (s[1] == 'N') { + switch (state3) { + case STATE3_NONE: + goto ilseq; + case STATE3_DESIGNATED_CNS11643_2: + if (s[2] < 0x80 && s[3] < 0x80) { + int ret = cns11643_2_mbtowc(conv,pwc,s+2,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+4; + } else + goto ilseq; + default: abort(); + } + } + if (s[1] == 'O') { + switch (state4) { + case STATE4_NONE: + goto ilseq; + case STATE4_DESIGNATED_CNS11643_3: + if (s[2] < 0x80 && s[3] < 0x80) { + int ret = cns11643_3_mbtowc(conv,pwc,s+2,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+4; + } else + goto ilseq; + case STATE4_DESIGNATED_CNS11643_4: + if (s[2] < 0x80 && s[3] < 0x80) { + int ret = cns11643_4_mbtowc(conv,pwc,s+2,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+4; + } else + goto ilseq; + case STATE4_DESIGNATED_CNS11643_5: + if (s[2] < 0x80 && s[3] < 0x80) { + int ret = cns11643_5_mbtowc(conv,pwc,s+2,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+4; + } else + goto ilseq; + case STATE4_DESIGNATED_CNS11643_6: + if (s[2] < 0x80 && s[3] < 0x80) { + int ret = cns11643_6_mbtowc(conv,pwc,s+2,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+4; + } else + goto ilseq; + case STATE4_DESIGNATED_CNS11643_7: + if (s[2] < 0x80 && s[3] < 0x80) { + int ret = cns11643_7_mbtowc(conv,pwc,s+2,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+4; + } else + goto ilseq; + default: abort(); + } + } + goto ilseq; + } + if (c == SO) { + if (state2 != STATE2_DESIGNATED_GB2312 && state2 != STATE2_DESIGNATED_CNS11643_1 && state2 != STATE2_DESIGNATED_ISO_IR_165) + goto ilseq; + state1 = STATE_TWOBYTE; + s++; count++; + if (n < count+1) + goto none; + continue; + } + if (c == SI) { + state1 = STATE_ASCII; + s++; count++; + if (n < count+1) + goto none; + continue; + } + break; + } + switch (state1) { + case STATE_ASCII: + if (c < 0x80) { + int ret = ascii_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + if (*pwc == 0x000a || *pwc == 0x000d) { + state2 = STATE2_NONE; state3 = STATE3_NONE; state4 = STATE3_NONE; + } + COMBINE_STATE; + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_TWOBYTE: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret; + switch (state2) { + case STATE2_NONE: + goto ilseq; + case STATE2_DESIGNATED_GB2312: + ret = gb2312_mbtowc(conv,pwc,s,2); break; + case STATE2_DESIGNATED_CNS11643_1: + ret = cns11643_1_mbtowc(conv,pwc,s,2); break; + case STATE2_DESIGNATED_ISO_IR_165: + ret = isoir165_mbtowc(conv,pwc,s,2); break; + default: abort(); + } + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+2; + } else + goto ilseq; + default: abort(); + } + +none: + COMBINE_STATE; + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + COMBINE_STATE; + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +static int +iso2022_cn_ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + state_t state = conv->ostate; + SPLIT_STATE; + unsigned char buf[3]; + int ret; + + /* There is no need to handle Unicode 3.1 tag characters and to look for + "zh-CN" or "zh-TW" tags, because GB2312 and CNS11643 are disjoint. */ + + /* Try ASCII. */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state1 == STATE_ASCII ? 1 : 2); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_ASCII) { + r[0] = SI; + r += 1; + state1 = STATE_ASCII; + } + r[0] = buf[0]; + if (wc == 0x000a || wc == 0x000d) { + state2 = STATE2_NONE; state3 = STATE3_NONE; state4 = STATE3_NONE; + } + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + /* Try GB 2312-1980. */ + ret = gb2312_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state2 == STATE2_DESIGNATED_GB2312 ? 0 : 4) + (state1 == STATE_TWOBYTE ? 0 : 1) + 2; + if (n < count) + return RET_TOOSMALL; + if (state2 != STATE2_DESIGNATED_GB2312) { + r[0] = ESC; + r[1] = '$'; + r[2] = ')'; + r[3] = 'A'; + r += 4; + state2 = STATE2_DESIGNATED_GB2312; + } + if (state1 != STATE_TWOBYTE) { + r[0] = SO; + r += 1; + state1 = STATE_TWOBYTE; + } + r[0] = buf[0]; + r[1] = buf[1]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + ret = cns11643_wctomb(conv,buf,wc,3); + if (ret != RET_ILUNI) { + if (ret != 3) abort(); + + /* Try CNS 11643-1992 Plane 1. */ + if (buf[0] == 1 && buf[1] < 0x80 && buf[2] < 0x80) { + int count = (state2 == STATE2_DESIGNATED_CNS11643_1 ? 0 : 4) + (state1 == STATE_TWOBYTE ? 0 : 1) + 2; + if (n < count) + return RET_TOOSMALL; + if (state2 != STATE2_DESIGNATED_CNS11643_1) { + r[0] = ESC; + r[1] = '$'; + r[2] = ')'; + r[3] = 'G'; + r += 4; + state2 = STATE2_DESIGNATED_CNS11643_1; + } + if (state1 != STATE_TWOBYTE) { + r[0] = SO; + r += 1; + state1 = STATE_TWOBYTE; + } + r[0] = buf[1]; + r[1] = buf[2]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + + /* Try CNS 11643-1992 Plane 2. */ + if (buf[0] == 2 && buf[1] < 0x80 && buf[2] < 0x80) { + int count = (state3 == STATE3_DESIGNATED_CNS11643_2 ? 0 : 4) + 4; + if (n < count) + return RET_TOOSMALL; + if (state3 != STATE3_DESIGNATED_CNS11643_2) { + r[0] = ESC; + r[1] = '$'; + r[2] = '*'; + r[3] = 'H'; + r += 4; + state3 = STATE3_DESIGNATED_CNS11643_2; + } + r[0] = ESC; + r[1] = 'N'; + r[2] = buf[1]; + r[3] = buf[2]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + + /* Try CNS 11643-1992 Plane 3. */ + if (buf[0] == 3 && buf[1] < 0x80 && buf[2] < 0x80) { + int count = (state4 == STATE4_DESIGNATED_CNS11643_3 ? 0 : 4) + 4; + if (n < count) + return RET_TOOSMALL; + if (state4 != STATE4_DESIGNATED_CNS11643_3) { + r[0] = ESC; + r[1] = '$'; + r[2] = '+'; + r[3] = 'I'; + r += 4; + state4 = STATE4_DESIGNATED_CNS11643_3; + } + r[0] = ESC; + r[1] = 'O'; + r[2] = buf[1]; + r[3] = buf[2]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + + /* Try CNS 11643-1992 Plane 4. */ + if (buf[0] == 4 && buf[1] < 0x80 && buf[2] < 0x80) { + int count = (state4 == STATE4_DESIGNATED_CNS11643_4 ? 0 : 4) + 4; + if (n < count) + return RET_TOOSMALL; + if (state4 != STATE4_DESIGNATED_CNS11643_4) { + r[0] = ESC; + r[1] = '$'; + r[2] = '+'; + r[3] = 'J'; + r += 4; + state4 = STATE4_DESIGNATED_CNS11643_4; + } + r[0] = ESC; + r[1] = 'O'; + r[2] = buf[1]; + r[3] = buf[2]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + + /* Try CNS 11643-1992 Plane 5. */ + if (buf[0] == 5 && buf[1] < 0x80 && buf[2] < 0x80) { + int count = (state4 == STATE4_DESIGNATED_CNS11643_5 ? 0 : 4) + 4; + if (n < count) + return RET_TOOSMALL; + if (state4 != STATE4_DESIGNATED_CNS11643_5) { + r[0] = ESC; + r[1] = '$'; + r[2] = '+'; + r[3] = 'K'; + r += 4; + state4 = STATE4_DESIGNATED_CNS11643_5; + } + r[0] = ESC; + r[1] = 'O'; + r[2] = buf[1]; + r[3] = buf[2]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + + /* Try CNS 11643-1992 Plane 6. */ + if (buf[0] == 6 && buf[1] < 0x80 && buf[2] < 0x80) { + int count = (state4 == STATE4_DESIGNATED_CNS11643_6 ? 0 : 4) + 4; + if (n < count) + return RET_TOOSMALL; + if (state4 != STATE4_DESIGNATED_CNS11643_6) { + r[0] = ESC; + r[1] = '$'; + r[2] = '+'; + r[3] = 'L'; + r += 4; + state4 = STATE4_DESIGNATED_CNS11643_6; + } + r[0] = ESC; + r[1] = 'O'; + r[2] = buf[1]; + r[3] = buf[2]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + + /* Try CNS 11643-1992 Plane 7. */ + if (buf[0] == 7 && buf[1] < 0x80 && buf[2] < 0x80) { + int count = (state4 == STATE4_DESIGNATED_CNS11643_7 ? 0 : 4) + 4; + if (n < count) + return RET_TOOSMALL; + if (state4 != STATE4_DESIGNATED_CNS11643_7) { + r[0] = ESC; + r[1] = '$'; + r[2] = '+'; + r[3] = 'M'; + r += 4; + state4 = STATE4_DESIGNATED_CNS11643_7; + } + r[0] = ESC; + r[1] = 'O'; + r[2] = buf[1]; + r[3] = buf[2]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + + } + + /* Try ISO-IR-165. */ + ret = isoir165_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state2 == STATE2_DESIGNATED_ISO_IR_165 ? 0 : 4) + (state1 == STATE_TWOBYTE ? 0 : 1) + 2; + if (n < count) + return RET_TOOSMALL; + if (state2 != STATE2_DESIGNATED_ISO_IR_165) { + r[0] = ESC; + r[1] = '$'; + r[2] = ')'; + r[3] = 'E'; + r += 4; + state2 = STATE2_DESIGNATED_ISO_IR_165; + } + if (state1 != STATE_TWOBYTE) { + r[0] = SO; + r += 1; + state1 = STATE_TWOBYTE; + } + r[0] = buf[0]; + r[1] = buf[1]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + return RET_ILUNI; +} + +static int +iso2022_cn_ext_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + SPLIT_STATE; + (void)state2; + (void)state3; + (void)state4; + if (state1 != STATE_ASCII) { + if (n < 1) + return RET_TOOSMALL; + r[0] = SI; + /* conv->ostate = 0; will be done by the caller */ + return 1; + } else + return 0; +} + +#undef COMBINE_STATE +#undef SPLIT_STATE +#undef STATE4_DESIGNATED_CNS11643_7 +#undef STATE4_DESIGNATED_CNS11643_6 +#undef STATE4_DESIGNATED_CNS11643_5 +#undef STATE4_DESIGNATED_CNS11643_4 +#undef STATE4_DESIGNATED_CNS11643_3 +#undef STATE4_NONE +#undef STATE3_DESIGNATED_CNS11643_2 +#undef STATE3_NONE +#undef STATE2_DESIGNATED_ISO_IR_165 +#undef STATE2_DESIGNATED_CNS11643_1 +#undef STATE2_DESIGNATED_GB2312 +#undef STATE2_NONE +#undef STATE_TWOBYTE +#undef STATE_ASCII diff --git a/jni/parted/libiconv/lib/iso2022_jp.h b/jni/parted/libiconv/lib/iso2022_jp.h new file mode 100755 index 0000000..cdc0496 --- /dev/null +++ b/jni/parted/libiconv/lib/iso2022_jp.h @@ -0,0 +1,215 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-2022-JP + */ + +/* Specification: RFC 1468 */ + +#define ESC 0x1b + +/* + * The state can be one of the following values. + */ +#define STATE_ASCII 0 +#define STATE_JISX0201ROMAN 1 +#define STATE_JISX0208 2 + +static int +iso2022_jp_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + int count = 0; + unsigned char c; + for (;;) { + c = *s; + if (c == ESC) { + if (n < count+3) + goto none; + if (s[1] == '(') { + if (s[2] == 'B') { + state = STATE_ASCII; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'J') { + state = STATE_JISX0201ROMAN; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + goto ilseq; + } + if (s[1] == '$') { + if (s[2] == '@' || s[2] == 'B') { + /* We don't distinguish JIS X 0208-1978 and JIS X 0208-1983. */ + state = STATE_JISX0208; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + goto ilseq; + } + goto ilseq; + } + break; + } + switch (state) { + case STATE_ASCII: + if (c < 0x80) { + int ret = ascii_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0201ROMAN: + if (c < 0x80) { + int ret = jisx0201_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0208: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret = jisx0208_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + conv->istate = state; + return count+2; + } else + goto ilseq; + default: abort(); + } + +none: + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +static int +iso2022_jp_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + state_t state = conv->ostate; + unsigned char buf[2]; + int ret; + + /* Try ASCII. */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state == STATE_ASCII ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_ASCII) { + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + r += 3; + state = STATE_ASCII; + } + r[0] = buf[0]; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0201-1976 Roman. */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state == STATE_JISX0201ROMAN ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0201ROMAN) { + r[0] = ESC; + r[1] = '('; + r[2] = 'J'; + r += 3; + state = STATE_JISX0201ROMAN; + } + r[0] = buf[0]; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0208-1990 in place of JIS X 0208-1978 and JIS X 0208-1983. */ + ret = jisx0208_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state == STATE_JISX0208 ? 2 : 5); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0208) { + r[0] = ESC; + r[1] = '$'; + r[2] = 'B'; + r += 3; + state = STATE_JISX0208; + } + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = state; + return count; + } + } + + return RET_ILUNI; +} + +static int +iso2022_jp_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + if (state != STATE_ASCII) { + if (n < 3) + return RET_TOOSMALL; + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + /* conv->ostate = 0; will be done by the caller */ + return 3; + } else + return 0; +} + +#undef STATE_JISX0208 +#undef STATE_JISX0201ROMAN +#undef STATE_ASCII diff --git a/jni/parted/libiconv/lib/iso2022_jp1.h b/jni/parted/libiconv/lib/iso2022_jp1.h new file mode 100755 index 0000000..050184e --- /dev/null +++ b/jni/parted/libiconv/lib/iso2022_jp1.h @@ -0,0 +1,263 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-2022-JP-1 + */ + +/* Specification: RFC 2237 */ + +#define ESC 0x1b + +/* + * The state can be one of the following values. + */ +#define STATE_ASCII 0 +#define STATE_JISX0201ROMAN 1 +#define STATE_JISX0208 2 +#define STATE_JISX0212 3 + +static int +iso2022_jp1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + int count = 0; + unsigned char c; + for (;;) { + c = *s; + if (c == ESC) { + if (n < count+3) + goto none; + if (s[1] == '(') { + if (s[2] == 'B') { + state = STATE_ASCII; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'J') { + state = STATE_JISX0201ROMAN; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + goto ilseq; + } + if (s[1] == '$') { + if (s[2] == '@' || s[2] == 'B') { + /* We don't distinguish JIS X 0208-1978 and JIS X 0208-1983. */ + state = STATE_JISX0208; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == '(') { + if (n < count+4) + goto none; + if (s[3] == 'D') { + state = STATE_JISX0212; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + } + goto ilseq; + } + goto ilseq; + } + break; + } + switch (state) { + case STATE_ASCII: + if (c < 0x80) { + int ret = ascii_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0201ROMAN: + if (c < 0x80) { + int ret = jisx0201_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0208: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret = jisx0208_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + conv->istate = state; + return count+2; + } else + goto ilseq; + case STATE_JISX0212: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret = jisx0212_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + conv->istate = state; + return count+2; + } else + goto ilseq; + default: abort(); + } + +none: + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +static int +iso2022_jp1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + state_t state = conv->ostate; + unsigned char buf[2]; + int ret; + + /* Try ASCII. */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state == STATE_ASCII ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_ASCII) { + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + r += 3; + state = STATE_ASCII; + } + r[0] = buf[0]; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0201-1976 Roman. */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state == STATE_JISX0201ROMAN ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0201ROMAN) { + r[0] = ESC; + r[1] = '('; + r[2] = 'J'; + r += 3; + state = STATE_JISX0201ROMAN; + } + r[0] = buf[0]; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0208-1990 in place of JIS X 0208-1978 and JIS X 0208-1983. */ + ret = jisx0208_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state == STATE_JISX0208 ? 2 : 5); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0208) { + r[0] = ESC; + r[1] = '$'; + r[2] = 'B'; + r += 3; + state = STATE_JISX0208; + } + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0212-1990. */ + ret = jisx0212_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state == STATE_JISX0212 ? 2 : 6); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0212) { + r[0] = ESC; + r[1] = '$'; + r[2] = '('; + r[3] = 'D'; + r += 4; + state = STATE_JISX0212; + } + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = state; + return count; + } + } + + return RET_ILUNI; +} + +static int +iso2022_jp1_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + if (state != STATE_ASCII) { + if (n < 3) + return RET_TOOSMALL; + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + /* conv->ostate = 0; will be done by the caller */ + return 3; + } else + return 0; +} + +#undef STATE_JISX0212 +#undef STATE_JISX0208 +#undef STATE_JISX0201ROMAN +#undef STATE_ASCII diff --git a/jni/parted/libiconv/lib/iso2022_jp2.h b/jni/parted/libiconv/lib/iso2022_jp2.h new file mode 100755 index 0000000..2090cc0 --- /dev/null +++ b/jni/parted/libiconv/lib/iso2022_jp2.h @@ -0,0 +1,692 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-2022-JP-2 + */ + +/* Specification: RFC 1554 */ +/* ESC '(' 'I' for JISX0201 Katakana is an extension not found in RFC 1554 or + CJK.INF, but implemented in glibc-2.1 and qt-2.0. */ + +#define ESC 0x1b + +/* + * The state is composed of one of the following values + */ +#define STATE_ASCII 0 +#define STATE_JISX0201ROMAN 1 +#define STATE_JISX0201KATAKANA 2 +#define STATE_JISX0208 3 +#define STATE_JISX0212 4 +#define STATE_GB2312 5 +#define STATE_KSC5601 6 +/* + * and one of the following values, << 8 + */ +#define STATE_G2_NONE 0 +#define STATE_G2_ISO8859_1 1 +#define STATE_G2_ISO8859_7 2 + +#define SPLIT_STATE \ + unsigned int state1 = state & 0xff, state2 = state >> 8 +#define COMBINE_STATE \ + state = (state2 << 8) | state1 + +static int +iso2022_jp2_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + SPLIT_STATE; + int count = 0; + unsigned char c; + for (;;) { + c = *s; + if (c == ESC) { + if (n < count+3) + goto none; + if (s[1] == '(') { + if (s[2] == 'B') { + state1 = STATE_ASCII; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'J') { + state1 = STATE_JISX0201ROMAN; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'I') { + state1 = STATE_JISX0201KATAKANA; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + goto ilseq; + } + if (s[1] == '$') { + if (s[2] == '@' || s[2] == 'B') { + /* We don't distinguish JIS X 0208-1978 and JIS X 0208-1983. */ + state1 = STATE_JISX0208; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'A') { + state1 = STATE_GB2312; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == '(') { + if (n < count+4) + goto none; + if (s[3] == 'D') { + state1 = STATE_JISX0212; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + if (s[3] == 'C') { + state1 = STATE_KSC5601; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + goto ilseq; + } + goto ilseq; + } + if (s[1] == '.') { + if (n < count+3) + goto none; + if (s[2] == 'A') { + state2 = STATE_G2_ISO8859_1; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'F') { + state2 = STATE_G2_ISO8859_7; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + goto ilseq; + } + if (s[1] == 'N') { + switch (state2) { + case STATE_G2_NONE: + goto ilseq; + case STATE_G2_ISO8859_1: + if (s[2] < 0x80) { + unsigned char buf = s[2]+0x80; + int ret = iso8859_1_mbtowc(conv,pwc,&buf,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + COMBINE_STATE; + conv->istate = state; + return count+3; + } else + goto ilseq; + case STATE_G2_ISO8859_7: + if (s[2] < 0x80) { + unsigned char buf = s[2]+0x80; + int ret = iso8859_7_mbtowc(conv,pwc,&buf,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + COMBINE_STATE; + conv->istate = state; + return count+3; + } else + goto ilseq; + default: abort(); + } + } + goto ilseq; + } + break; + } + switch (state1) { + case STATE_ASCII: + if (c < 0x80) { + int ret = ascii_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + if (*pwc == 0x000a || *pwc == 0x000d) + state2 = STATE_G2_NONE; + COMBINE_STATE; + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0201ROMAN: + if (c < 0x80) { + int ret = jisx0201_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + if (*pwc == 0x000a || *pwc == 0x000d) + state2 = STATE_G2_NONE; + COMBINE_STATE; + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0201KATAKANA: + if (c < 0x80) { + unsigned char buf = c+0x80; + int ret = jisx0201_mbtowc(conv,pwc,&buf,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + COMBINE_STATE; + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0208: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret = jisx0208_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+2; + } else + goto ilseq; + case STATE_JISX0212: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret = jisx0212_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+2; + } else + goto ilseq; + case STATE_GB2312: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret = gb2312_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+2; + } else + goto ilseq; + case STATE_KSC5601: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret = ksc5601_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+2; + } else + goto ilseq; + default: abort(); + } + +none: + COMBINE_STATE; + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + COMBINE_STATE; + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +#undef COMBINE_STATE +#undef SPLIT_STATE + +/* + * The state can also contain one of the following values, << 16. + * Values >= STATE_TAG_LANGUAGE are temporary tag parsing states. + */ +#define STATE_TAG_NONE 0 +#define STATE_TAG_LANGUAGE 4 +#define STATE_TAG_LANGUAGE_j 5 +#define STATE_TAG_LANGUAGE_ja 1 +#define STATE_TAG_LANGUAGE_k 6 +#define STATE_TAG_LANGUAGE_ko 2 +#define STATE_TAG_LANGUAGE_z 7 +#define STATE_TAG_LANGUAGE_zh 3 + +#define SPLIT_STATE \ + unsigned int state1 = state & 0xff, state2 = (state >> 8) & 0xff, state3 = state >> 16 +#define COMBINE_STATE \ + state = (state3 << 16) | (state2 << 8) | state1 + +static int +iso2022_jp2_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + state_t state = conv->ostate; + SPLIT_STATE; + unsigned char buf[2]; + int ret; + /* This defines the conversion preferences depending on the current + langauge tag. */ + enum conversion { none = 0, european, japanese, chinese, korean, other }; + static const unsigned int conversion_lists[STATE_TAG_LANGUAGE] = { + /* STATE_TAG_NONE */ + japanese + (european << 3) + (chinese << 6) + (korean << 9) + (other << 12), + /* STATE_TAG_LANGUAGE_ja */ + japanese + (european << 3) + (chinese << 6) + (korean << 9) + (other << 12), + /* STATE_TAG_LANGUAGE_ko */ + korean + (european << 3) + (japanese << 6) + (chinese << 9) + (other << 12), + /* STATE_TAG_LANGUAGE_zh */ + chinese + (european << 3) + (japanese << 6) + (korean << 9) + (other << 12) + }; + unsigned int conversion_list; + + /* Handle Unicode tag characters (range U+E0000..U+E007F). */ + if ((wc >> 7) == (0xe0000 >> 7)) { + char c = wc & 0x7f; + if (c >= 'A' && c <= 'Z') + c += 'a'-'A'; + switch (c) { + case 0x01: + state3 = STATE_TAG_LANGUAGE; + COMBINE_STATE; + conv->ostate = state; + return 0; + case 'j': + if (state3 == STATE_TAG_LANGUAGE) { + state3 = STATE_TAG_LANGUAGE_j; + COMBINE_STATE; + conv->ostate = state; + return 0; + } + break; + case 'a': + if (state3 == STATE_TAG_LANGUAGE_j) { + state3 = STATE_TAG_LANGUAGE_ja; + COMBINE_STATE; + conv->ostate = state; + return 0; + } + break; + case 'k': + if (state3 == STATE_TAG_LANGUAGE) { + state3 = STATE_TAG_LANGUAGE_k; + COMBINE_STATE; + conv->ostate = state; + return 0; + } + break; + case 'o': + if (state3 == STATE_TAG_LANGUAGE_k) { + state3 = STATE_TAG_LANGUAGE_ko; + COMBINE_STATE; + conv->ostate = state; + return 0; + } + break; + case 'z': + if (state3 == STATE_TAG_LANGUAGE) { + state3 = STATE_TAG_LANGUAGE_z; + COMBINE_STATE; + conv->ostate = state; + return 0; + } + break; + case 'h': + if (state3 == STATE_TAG_LANGUAGE_z) { + state3 = STATE_TAG_LANGUAGE_zh; + COMBINE_STATE; + conv->ostate = state; + return 0; + } + break; + case 0x7f: + state3 = STATE_TAG_NONE; + COMBINE_STATE; + conv->ostate = state; + return 0; + default: + break; + } + /* Other tag characters reset the tag parsing state or are ignored. */ + if (state3 >= STATE_TAG_LANGUAGE) + state3 = STATE_TAG_NONE; + COMBINE_STATE; + conv->ostate = state; + return 0; + } + if (state3 >= STATE_TAG_LANGUAGE) + state3 = STATE_TAG_NONE; + + /* Try ASCII. */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state1 == STATE_ASCII ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_ASCII) { + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + r += 3; + state1 = STATE_ASCII; + } + r[0] = buf[0]; + if (wc == 0x000a || wc == 0x000d) + state2 = STATE_G2_NONE; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + conversion_list = conversion_lists[state3]; + + do { + switch (conversion_list & ((1 << 3) - 1)) { + + case european: + + /* Try ISO-8859-1. */ + ret = iso8859_1_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] >= 0x80) { + int count = (state2 == STATE_G2_ISO8859_1 ? 3 : 6); + if (n < count) + return RET_TOOSMALL; + if (state2 != STATE_G2_ISO8859_1) { + r[0] = ESC; + r[1] = '.'; + r[2] = 'A'; + r += 3; + state2 = STATE_G2_ISO8859_1; + } + r[0] = ESC; + r[1] = 'N'; + r[2] = buf[0]-0x80; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + /* Try ISO-8859-7. */ + ret = iso8859_7_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] >= 0x80) { + int count = (state2 == STATE_G2_ISO8859_7 ? 3 : 6); + if (n < count) + return RET_TOOSMALL; + if (state2 != STATE_G2_ISO8859_7) { + r[0] = ESC; + r[1] = '.'; + r[2] = 'F'; + r += 3; + state2 = STATE_G2_ISO8859_7; + } + r[0] = ESC; + r[1] = 'N'; + r[2] = buf[0]-0x80; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + break; + + case japanese: + + /* Try JIS X 0201-1976 Roman. */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state1 == STATE_JISX0201ROMAN ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_JISX0201ROMAN) { + r[0] = ESC; + r[1] = '('; + r[2] = 'J'; + r += 3; + state1 = STATE_JISX0201ROMAN; + } + r[0] = buf[0]; + if (wc == 0x000a || wc == 0x000d) + state2 = STATE_G2_NONE; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0208-1990 in place of JIS X 0208-1978 and + JIS X 0208-1983. */ + ret = jisx0208_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state1 == STATE_JISX0208 ? 2 : 5); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_JISX0208) { + r[0] = ESC; + r[1] = '$'; + r[2] = 'B'; + r += 3; + state1 = STATE_JISX0208; + } + r[0] = buf[0]; + r[1] = buf[1]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0212-1990. */ + ret = jisx0212_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state1 == STATE_JISX0212 ? 2 : 6); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_JISX0212) { + r[0] = ESC; + r[1] = '$'; + r[2] = '('; + r[3] = 'D'; + r += 4; + state1 = STATE_JISX0212; + } + r[0] = buf[0]; + r[1] = buf[1]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + break; + + case chinese: + + /* Try GB 2312-1980. */ + ret = gb2312_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state1 == STATE_GB2312 ? 2 : 5); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_GB2312) { + r[0] = ESC; + r[1] = '$'; + r[2] = 'A'; + r += 3; + state1 = STATE_GB2312; + } + r[0] = buf[0]; + r[1] = buf[1]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + break; + + case korean: + + /* Try KS C 5601-1992. */ + ret = ksc5601_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state1 == STATE_KSC5601 ? 2 : 6); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_KSC5601) { + r[0] = ESC; + r[1] = '$'; + r[2] = '('; + r[3] = 'C'; + r += 4; + state1 = STATE_KSC5601; + } + r[0] = buf[0]; + r[1] = buf[1]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + break; + + case other: + + /* Try JIS X 0201-1976 Kana. This is not officially part of + ISO-2022-JP-2, according to RFC 1554. Therefore we try this + only after all other attempts. */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] >= 0x80) { + int count = (state1 == STATE_JISX0201KATAKANA ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_JISX0201KATAKANA) { + r[0] = ESC; + r[1] = '('; + r[2] = 'I'; + r += 3; + state1 = STATE_JISX0201KATAKANA; + } + r[0] = buf[0]-0x80; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + break; + + default: + abort(); + } + + conversion_list = conversion_list >> 3; + } while (conversion_list != 0); + + return RET_ILUNI; +} + +static int +iso2022_jp2_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + SPLIT_STATE; + (void)state2; + (void)state3; + if (state1 != STATE_ASCII) { + if (n < 3) + return RET_TOOSMALL; + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + /* conv->ostate = 0; will be done by the caller */ + return 3; + } else + return 0; +} + +#undef COMBINE_STATE +#undef SPLIT_STATE +#undef STATE_TAG_LANGUAGE_zh +#undef STATE_TAG_LANGUAGE_z +#undef STATE_TAG_LANGUAGE_ko +#undef STATE_TAG_LANGUAGE_k +#undef STATE_TAG_LANGUAGE_ja +#undef STATE_TAG_LANGUAGE_j +#undef STATE_TAG_LANGUAGE +#undef STATE_TAG_NONE +#undef STATE_G2_ISO8859_7 +#undef STATE_G2_ISO8859_1 +#undef STATE_G2_NONE +#undef STATE_KSC5601 +#undef STATE_GB2312 +#undef STATE_JISX0212 +#undef STATE_JISX0208 +#undef STATE_JISX0201KATAKANA +#undef STATE_JISX0201ROMAN +#undef STATE_ASCII diff --git a/jni/parted/libiconv/lib/iso2022_jp3.h b/jni/parted/libiconv/lib/iso2022_jp3.h new file mode 100755 index 0000000..9b38f16 --- /dev/null +++ b/jni/parted/libiconv/lib/iso2022_jp3.h @@ -0,0 +1,537 @@ +/* + * Copyright (C) 1999-2004, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-2022-JP-3 + */ + +#include "jisx0213.h" + +#define ESC 0x1b + +/* + * The state is composed of one of the following values + */ +#define STATE_ASCII 0 /* Esc ( B */ +#define STATE_JISX0201ROMAN 1 /* Esc ( J */ +#define STATE_JISX0201KATAKANA 2 /* Esc ( I */ +#define STATE_JISX0208 3 /* Esc $ @ or Esc $ B */ +#define STATE_JISX02131 4 /* Esc $ ( O or Esc $ ( Q*/ +#define STATE_JISX02132 5 /* Esc $ ( P */ + +/* + * In the ISO-2022-JP-3 to UCS-4 direction, the state also holds the last + * character to be output, shifted by 3 bits. + */ + +static int +iso2022_jp3_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + ucs4_t last_wc = conv->istate >> 3; + if (last_wc) { + /* Output the buffered character. */ + conv->istate &= 7; + *pwc = last_wc; + return 0; /* Don't advance the input pointer. */ + } else { + state_t state = conv->istate; + int count = 0; + unsigned char c; + for (;;) { + c = *s; + if (c == ESC) { + if (n < count+3) + goto none; + if (s[1] == '(') { + if (s[2] == 'B') { + state = STATE_ASCII; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'J') { + state = STATE_JISX0201ROMAN; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'I') { + state = STATE_JISX0201KATAKANA; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + goto ilseq; + } + if (s[1] == '$') { + if (s[2] == '@' || s[2] == 'B') { + /* We don't distinguish JIS X 0208-1978 and JIS X 0208-1983. */ + state = STATE_JISX0208; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == '(') { + if (n < count+4) + goto none; + if (s[3] == 'O' || s[3] == 'Q') { + state = STATE_JISX02131; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + if (s[3] == 'P') { + state = STATE_JISX02132; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + } + goto ilseq; + } + goto ilseq; + } + break; + } + switch (state) { + case STATE_ASCII: + if (c < 0x80) { + int ret = ascii_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0201ROMAN: + if (c < 0x80) { + int ret = jisx0201_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0201KATAKANA: + if (c < 0x80) { + unsigned char buf = c+0x80; + int ret = jisx0201_mbtowc(conv,pwc,&buf,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0208: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret = jisx0208_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + conv->istate = state; + return count+2; + } else + goto ilseq; + case STATE_JISX02131: + case STATE_JISX02132: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + ucs4_t wc = jisx0213_to_ucs4(((state-STATE_JISX02131+1)<<8)+s[0],s[1]); + if (wc) { + if (wc < 0x80) { + /* It's a combining character. */ + ucs4_t wc1 = jisx0213_to_ucs_combining[wc - 1][0]; + ucs4_t wc2 = jisx0213_to_ucs_combining[wc - 1][1]; + /* We cannot output two Unicode characters at once. So, + output the first character and buffer the second one. */ + *pwc = wc1; + conv->istate = (wc2 << 3) | state; + } else { + *pwc = wc; + conv->istate = state; + } + return count+2; + } + } + goto ilseq; + default: abort(); + } + none: + conv->istate = state; + return RET_TOOFEW(count); + + ilseq: + conv->istate = state; + return RET_SHIFT_ILSEQ(count); + } +} + +static int +iso2022_jp3_flushwc (conv_t conv, ucs4_t *pwc) +{ + ucs4_t last_wc = conv->istate >> 3; + if (last_wc) { + /* Output the buffered character. */ + conv->istate &= 7; + *pwc = last_wc; + return 1; + } else + return 0; +} + +/* + * In the UCS-4 to ISO-2022-JP-3 direction, the state also holds the last two + * bytes to be output, shifted by 3 bits, and the STATE_xxxxx value that was + * effective before this buffered character, shifted by 19 bits. + */ + +/* Composition tables for each of the relevant combining characters. */ +static const struct { unsigned short base; unsigned short composed; } iso2022_jp3_comp_table_data[] = { +#define iso2022_jp3_comp_table02e5_idx 0 +#define iso2022_jp3_comp_table02e5_len 1 + { 0x2b64, 0x2b65 }, /* 0x12B65 = 0x12B64 U+02E5 */ +#define iso2022_jp3_comp_table02e9_idx (iso2022_jp3_comp_table02e5_idx+iso2022_jp3_comp_table02e5_len) +#define iso2022_jp3_comp_table02e9_len 1 + { 0x2b60, 0x2b66 }, /* 0x12B66 = 0x12B60 U+02E9 */ +#define iso2022_jp3_comp_table0300_idx (iso2022_jp3_comp_table02e9_idx+iso2022_jp3_comp_table02e9_len) +#define iso2022_jp3_comp_table0300_len 5 + { 0x295c, 0x2b44 }, /* 0x12B44 = 0x1295C U+0300 */ + { 0x2b38, 0x2b48 }, /* 0x12B48 = 0x12B38 U+0300 */ + { 0x2b37, 0x2b4a }, /* 0x12B4A = 0x12B37 U+0300 */ + { 0x2b30, 0x2b4c }, /* 0x12B4C = 0x12B30 U+0300 */ + { 0x2b43, 0x2b4e }, /* 0x12B4E = 0x12B43 U+0300 */ +#define iso2022_jp3_comp_table0301_idx (iso2022_jp3_comp_table0300_idx+iso2022_jp3_comp_table0300_len) +#define iso2022_jp3_comp_table0301_len 4 + { 0x2b38, 0x2b49 }, /* 0x12B49 = 0x12B38 U+0301 */ + { 0x2b37, 0x2b4b }, /* 0x12B4B = 0x12B37 U+0301 */ + { 0x2b30, 0x2b4d }, /* 0x12B4D = 0x12B30 U+0301 */ + { 0x2b43, 0x2b4f }, /* 0x12B4F = 0x12B43 U+0301 */ +#define iso2022_jp3_comp_table309a_idx (iso2022_jp3_comp_table0301_idx+iso2022_jp3_comp_table0301_len) +#define iso2022_jp3_comp_table309a_len 14 + { 0x242b, 0x2477 }, /* 0x12477 = 0x1242B U+309A */ + { 0x242d, 0x2478 }, /* 0x12478 = 0x1242D U+309A */ + { 0x242f, 0x2479 }, /* 0x12479 = 0x1242F U+309A */ + { 0x2431, 0x247a }, /* 0x1247A = 0x12431 U+309A */ + { 0x2433, 0x247b }, /* 0x1247B = 0x12433 U+309A */ + { 0x252b, 0x2577 }, /* 0x12577 = 0x1252B U+309A */ + { 0x252d, 0x2578 }, /* 0x12578 = 0x1252D U+309A */ + { 0x252f, 0x2579 }, /* 0x12579 = 0x1252F U+309A */ + { 0x2531, 0x257a }, /* 0x1257A = 0x12531 U+309A */ + { 0x2533, 0x257b }, /* 0x1257B = 0x12533 U+309A */ + { 0x253b, 0x257c }, /* 0x1257C = 0x1253B U+309A */ + { 0x2544, 0x257d }, /* 0x1257D = 0x12544 U+309A */ + { 0x2548, 0x257e }, /* 0x1257E = 0x12548 U+309A */ + { 0x2675, 0x2678 }, /* 0x12678 = 0x12675 U+309A */ +}; + +#define SPLIT_STATE \ + unsigned short lasttwo = state >> 3; state_t prevstate = state >> 19; state &= 7 +#define COMBINE_STATE \ + state |= (prevstate << 19) | (lasttwo << 3) +#define COMBINE_STATE_NO_LASTTWO \ + /* assume lasttwo == 0, then prevstate is ignored */ + +static int +iso2022_jp3_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + int count = 0; + unsigned char buf[2]; + unsigned short jch; + int ret; + state_t state = conv->ostate; + SPLIT_STATE; + + if (lasttwo) { + /* Attempt to combine the last character with this one. */ + unsigned int idx; + unsigned int len; + + if (wc == 0x02e5) + idx = iso2022_jp3_comp_table02e5_idx, + len = iso2022_jp3_comp_table02e5_len; + else if (wc == 0x02e9) + idx = iso2022_jp3_comp_table02e9_idx, + len = iso2022_jp3_comp_table02e9_len; + else if (wc == 0x0300) + idx = iso2022_jp3_comp_table0300_idx, + len = iso2022_jp3_comp_table0300_len; + else if (wc == 0x0301) + idx = iso2022_jp3_comp_table0301_idx, + len = iso2022_jp3_comp_table0301_len; + else if (wc == 0x309a) + idx = iso2022_jp3_comp_table309a_idx, + len = iso2022_jp3_comp_table309a_len; + else + goto not_combining; + + do + if (iso2022_jp3_comp_table_data[idx].base == lasttwo) + break; + while (++idx, --len > 0); + + if (len > 0) { + /* Output the combined character. */ + /* We know the combined character is in JISX0213 plane 1, but + the buffered character may have been in JISX0208 or in + JISX0213 plane 1. */ + count = (state != STATE_JISX02131 ? 4 : 0) + 2; + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX02131) { + r[0] = ESC; + r[1] = '$'; + r[2] = '('; + r[3] = 'Q'; + r += 4; + state = STATE_JISX02131; + } + lasttwo = iso2022_jp3_comp_table_data[idx].composed; + r[0] = (lasttwo >> 8) & 0xff; + r[1] = lasttwo & 0xff; + COMBINE_STATE_NO_LASTTWO; + conv->ostate = state; + return count; + } + + not_combining: + /* Output the buffered character. */ + /* We know it is in JISX0208 or in JISX0213 plane 1. */ + count = (prevstate != state ? 3 : 0) + 2; + if (n < count) + return RET_TOOSMALL; + if (prevstate != state) { + if (state != STATE_JISX0208) abort(); + r[0] = ESC; + r[1] = '$'; + r[2] = 'B'; + r += 3; + } + r[0] = (lasttwo >> 8) & 0xff; + r[1] = lasttwo & 0xff; + r += 2; + } + + /* Try ASCII. */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + count += (state == STATE_ASCII ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_ASCII) { + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + r += 3; + state = STATE_ASCII; + } + r[0] = buf[0]; + COMBINE_STATE_NO_LASTTWO; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0201-1976 Roman. */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + count += (state == STATE_JISX0201ROMAN ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0201ROMAN) { + r[0] = ESC; + r[1] = '('; + r[2] = 'J'; + r += 3; + state = STATE_JISX0201ROMAN; + } + r[0] = buf[0]; + COMBINE_STATE_NO_LASTTWO; + conv->ostate = state; + return count; + } + } + + jch = ucs4_to_jisx0213(wc); + + /* Try JIS X 0208-1990 in place of JIS X 0208-1978 and JIS X 0208-1983. */ + ret = jisx0208_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + if (jch & 0x0080) { + /* A possible match in comp_table_data. Buffer it. */ + prevstate = state; + lasttwo = jch & 0x7f7f; + state = STATE_JISX0208; + COMBINE_STATE; + conv->ostate = state; + return count; + } else { + count += (state == STATE_JISX0208 ? 2 : 5); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0208) { + r[0] = ESC; + r[1] = '$'; + r[2] = 'B'; + r += 3; + state = STATE_JISX0208; + } + r[0] = buf[0]; + r[1] = buf[1]; + COMBINE_STATE_NO_LASTTWO; + conv->ostate = state; + return count; + } + } + } + + /* Try JISX 0213 plane 1 and JISX 0213 plane 2. */ + if (jch != 0) { + if (jch & 0x8000) { + /* JISX 0213 plane 2. */ + if (state != STATE_JISX02132) { + count += 4; + if (n < count) + return RET_TOOSMALL; + r[0] = ESC; + r[1] = '$'; + r[2] = '('; + r[3] = 'P'; + r += 4; + state = STATE_JISX02132; + } + } else { + /* JISX 0213 plane 1. */ + if (state != STATE_JISX02131) { + count += 4; + if (n < count) + return RET_TOOSMALL; + r[0] = ESC; + r[1] = '$'; + r[2] = '('; + r[3] = 'Q'; + r += 4; + state = STATE_JISX02131; + } + } + if (jch & 0x0080) { + /* A possible match in comp_table_data. We have to buffer it. */ + /* We know it's a JISX 0213 plane 1 character. */ + if (jch & 0x8000) abort(); + prevstate = state; + lasttwo = jch & 0x7f7f; + COMBINE_STATE; + conv->ostate = state; + return count; + } + count += 2; + if (n < count) + return RET_TOOSMALL; + r[0] = (jch >> 8) & 0x7f; + r[1] = jch & 0x7f; + COMBINE_STATE_NO_LASTTWO; + conv->ostate = state; + return count; + } + + /* Try JIS X 0201-1976 Katakana. This is not officially part of + ISO-2022-JP-3. Therefore we try it after all other attempts. */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] >= 0x80) { + count += (state == STATE_JISX0201KATAKANA ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0201KATAKANA) { + r[0] = ESC; + r[1] = '('; + r[2] = 'I'; + r += 3; + state = STATE_JISX0201KATAKANA; + } + r[0] = buf[0]-0x80; + COMBINE_STATE_NO_LASTTWO; + conv->ostate = state; + return count; + } + } + + return RET_ILUNI; +} + +static int +iso2022_jp3_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + SPLIT_STATE; + { + int count = + (lasttwo ? (prevstate != state ? 3 : 0) + 2 : 0) + + (state != STATE_ASCII ? 3 : 0); + if (n < count) + return RET_TOOSMALL; + if (lasttwo) { + if (prevstate != state) { + if (state != STATE_JISX0208) abort(); + r[0] = ESC; + r[1] = '$'; + r[2] = 'B'; + r += 3; + } + r[0] = (lasttwo >> 8) & 0xff; + r[1] = lasttwo & 0xff; + r += 2; + } + if (state != STATE_ASCII) { + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + } + /* conv->ostate = 0; will be done by the caller */ + return count; + } +} + +#undef COMBINE_STATE_NO_LASTTWO +#undef COMBINE_STATE +#undef SPLIT_STATE +#undef STATE_JISX02132 +#undef STATE_JISX02131 +#undef STATE_JISX0208 +#undef STATE_JISX0201KATAKANA +#undef STATE_JISX0201ROMAN +#undef STATE_ASCII diff --git a/jni/parted/libiconv/lib/iso2022_jpms.h b/jni/parted/libiconv/lib/iso2022_jpms.h new file mode 100755 index 0000000..2c42405 --- /dev/null +++ b/jni/parted/libiconv/lib/iso2022_jpms.h @@ -0,0 +1,445 @@ +/* + * Copyright (C) 1999-2001, 2008, 2011-2012, 2016, 2018 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-2022-JP-MS + * alias CP50221 + * + * This is an extension of ISO-2022-JP-1 with larger character sets. + * It uses ESC $ B and ESC $ ( D to denote *extensions* of JIS X 0208 and + * JIS X 0212, respectively. This violates the principles of ISO 2022, + * where + * 1. character sets to be used by ISO 2022 have to be registered at the + * ISO IR registry , + * 2. different character sets are designated by different escape + * sequences. + * It's a typical instance of the "embrace and extend" strategy by Microsoft + * . + */ + +/* + * Windows has three encodings CP50220, CP50221, CP50222. + * The common parts are: + * - US-ASCII (0x00..0x7F) + * - JIS X 0208 extended by + * - one row (0x2D), + * - a private use area (rows 0x75..0x7E = U+E000..U+E3AB), + * enabled with ESC $ B, disabled with ESC ( B. + * - JIS X 0212 extended by + * - two rows (0x73..0x74), + * - a private use area (rows 0x75..0x7E = U+E3AC..U+E757), + * enabled with ESC $ ( D, disabled with ESC ( B. + * They differ in the handling of JIS X 0201 characters (halfwidth Katakana) + * in the conversion direction Unicode -> CP5022x: + * * CP50220 maps the halfwidth Katakana to fullwidth Katakana characters. + * * CP50221 contains the JIS X 0201 halfwidth Katakana characters, + * enabled with ESC ( I, disabled with ESC ( B. + * * CP50222 contains the JIS X 0201 halfwidth Katakana characters, + * enabled with ESC ( J 0x0E, disabled with ESC ( B. + * In the conversion direction CP5022x -> Unicode, all three operate the same: + * - ESC ( I is supported and understood. + * - ESC ( J 0x0E is not accepted. (Tested on Windows XP SP3.) + * Conclusion: + * - CP50222 should not be used, because the multibyte sequence that it + * produces cannot be parsed by either of the three encodings. + * - CP50221 is preferrable to CP50220, because it can faithfully represent + * the halfwidth Katakana characters. + * We therefore implement CP50221. As an extension, in the mbtowc conversion + * direction, we support also ESC ( J 0x0E, just in case. + */ + +#include "cp50221_0208_ext.h" +#include "cp50221_0212_ext.h" + +#define ESC 0x1b +#define SO 0x0e +#define SI 0x0f + +/* + * The state can be one of the following values. + */ +#define STATE_ASCII 0 /* Esc ( B */ +#define STATE_JISX0201ROMAN 1 /* Esc ( J */ /* only in mbtowc direction */ +#define STATE_JISX0201KATAKANA 2 /* Esc ( I */ +#define STATE_JISX0208MS 3 /* Esc $ @ or Esc $ B */ +#define STATE_JISX0212MS 4 /* Esc $ ( D */ + +static int +iso2022_jpms_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + int count = 0; + unsigned char c; + for (;;) { + c = *s; + if (c == ESC) { + if (n < count+3) + goto none; + if (s[1] == '(') { + if (s[2] == 'B') { + state = STATE_ASCII; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'I') { + state = STATE_JISX0201KATAKANA; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == 'J') { + state = STATE_JISX0201ROMAN; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + goto ilseq; + } + if (s[1] == '$') { + if (s[2] == '@' || s[2] == 'B') { + /* We don't distinguish JIS X 0208-1978 and JIS X 0208-1983. */ + state = STATE_JISX0208MS; + s += 3; count += 3; + if (n < count+1) + goto none; + continue; + } + if (s[2] == '(') { + if (n < count+4) + goto none; + if (s[3] == 'D') { + state = STATE_JISX0212MS; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + } + goto ilseq; + } + goto ilseq; + } + if (c == SO) { + if (state == STATE_JISX0201ROMAN) + state = STATE_JISX0201KATAKANA; + s += 1; count += 1; + if (n < count+1) + goto none; + continue; + } + if (c == SI) { + if (state == STATE_JISX0201KATAKANA) + state = STATE_JISX0201ROMAN; + s += 1; count += 1; + if (n < count+1) + goto none; + continue; + } + break; + } + switch (state) { + case STATE_ASCII: + if (c < 0x80) { + int ret = ascii_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0201ROMAN: + if (c < 0x80) { + int ret = jisx0201_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0201KATAKANA: + if (c < 0x80) { + unsigned char buf = c+0x80; + int ret = jisx0201_mbtowc(conv,pwc,&buf,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_JISX0208MS: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret; + if (s[0] < 0x75) { + if (s[0] == 0x2d) { + /* Extension of JIS X 0208. */ + if (s[1] >= 0x21 && s[1] <= 0x79) { + unsigned char i = (s[1] - 0x21) + 1; + ret = cp50221_0208_ext_mbtowc(conv,pwc,&i,1); + if (ret == 1) + ret = 2; + } else + ret = RET_ILSEQ; + } else { + /* JIS X 0208. */ + ret = jisx0208_mbtowc(conv,pwc,s,2); + } + } else { + /* Extension of JIS X 0208. + 0x{75..7E}{21..8E} maps to U+E000..U+E3AB. + But some rows maps to characters present in CP932. */ + if (s[0] <= 0x7e && (s[1] >= 0x21 && s[1] <= 0x7e)) { + unsigned short wc = 0xfffd; + if (s[0] >= 0x79 && s[0] <= 0x7c) + wc = cp932ext_2uni_pageed[(s[0] - 0x79) * 94 + (s[1] - 0x21)]; + if (wc == 0xfffd) + wc = (s[0] - 0x75) * 94 + (s[1] - 0x21) + 0xe000; + *pwc = wc; + ret = 2; + } else + ret = RET_ILSEQ; + } + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + conv->istate = state; + return count+2; + } else + goto ilseq; + case STATE_JISX0212MS: + if (n < count+2) + goto none; + if (s[0] < 0x80 && s[1] < 0x80) { + int ret; + if (s[0] < 0x73) { + /* JIS X 0212. */ + ret = jisx0212_mbtowc(conv,pwc,s,2); + } else { + if (s[0] < 0x75) { + /* Extension of JIS X 0212. */ + if (s[1] >= 0x21 && s[1] <= 0x7e) { + unsigned char i = (s[0] - 0x73) * 94 + (s[1] - 0x21) + 1; + ret = cp50221_0212_ext_mbtowc(conv,pwc,&i,1); + if (ret == 1) + ret = 2; + } else + ret = RET_ILSEQ; + } else { + /* Extension of JIS X 0208. + 0x{75..7E}{21..8E} maps to U+E3AC..U+E757. */ + if (s[0] <= 0x7e && (s[1] >= 0x21 && s[1] <= 0x7e)) { + *pwc = (s[0] - 0x75) * 94 + (s[1] - 0x21) + 0xe3ac; + ret = 2; + } else + ret = RET_ILSEQ; + } + } + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + conv->istate = state; + return count+2; + } else + goto ilseq; + default: abort(); + } + +none: + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +static int +iso2022_jpms_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + state_t state = conv->ostate; + unsigned char buf[2]; + int ret; + + /* Try ASCII. */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state == STATE_ASCII ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_ASCII) { + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + r += 3; + state = STATE_ASCII; + } + r[0] = buf[0]; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0201-1976 Katakana. */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] >= 0x80) { + int count = (state == STATE_JISX0201KATAKANA ? 1 : 4); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0201KATAKANA) { + r[0] = ESC; + r[1] = '('; + r[2] = 'I'; + r += 3; + state = STATE_JISX0201KATAKANA; + } + r[0] = buf[0]-0x80; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0208-1990, in place of JIS X 0208-1978 and JIS X 0208-1983, + and the extensions mentioned above. */ + if (wc >= 0xe000 && wc < 0xe3ac) { + unsigned short i = wc - 0xe000; + buf[0] = (i / 94) + 0x75; + buf[1] = (i % 94) + 0x21; + ret = 2; + } else { + ret = jisx0208_wctomb(conv,buf,wc,2); + if (ret == RET_ILUNI) { + /* Extension of JIS X 0208. */ + unsigned char i; + ret = cp50221_0208_ext_wctomb(conv,&i,wc,1); + if (ret == 1) { + buf[0] = 0x2d; + buf[1] = i-1 + 0x21; + ret = 2; + } else if (wc == 0x663B) { + buf[0] = 0x7a; + buf[1] = 0x36; + ret = 2; + } else if (wc == 0xffe2) { + buf[0] = 0x7c; + buf[1] = 0x7b; + ret = 2; + } else if (wc == 0xffe4) { + buf[0] = 0x7c; + buf[1] = 0x7c; + ret = 2; + } + } + } + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state == STATE_JISX0208MS ? 2 : 5); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0208MS) { + r[0] = ESC; + r[1] = '$'; + r[2] = 'B'; + r += 3; + state = STATE_JISX0208MS; + } + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = state; + return count; + } + } + + /* Try JIS X 0212-1990 and the extensions mentioned above. */ + if (wc >= 0xe3ac && wc < 0xe758) { + unsigned short i = wc - 0xe3ac; + buf[0] = (i / 94) + 0x75; + buf[1] = (i % 94) + 0x21; + ret = 2; + } else { + ret = jisx0212_wctomb(conv,buf,wc,2); + if (ret == RET_ILUNI) { + /* Extension of JIS X 0212. */ + unsigned char i; + ret = cp50221_0212_ext_wctomb(conv,&i,wc,1); + if (ret == 1) { + i -= 1; + buf[0] = (i / 94) + 0x73; + buf[1] = (i % 94) + 0x21; + ret = 2; + } + } + } + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state == STATE_JISX0212MS ? 2 : 6); + if (n < count) + return RET_TOOSMALL; + if (state != STATE_JISX0212MS) { + r[0] = ESC; + r[1] = '$'; + r[2] = '('; + r[3] = 'D'; + r += 4; + state = STATE_JISX0212MS; + } + r[0] = buf[0]; + r[1] = buf[1]; + conv->ostate = state; + return count; + } + } + + return RET_ILUNI; +} + +static int +iso2022_jpms_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + if (state != STATE_ASCII) { + if (n < 3) + return RET_TOOSMALL; + r[0] = ESC; + r[1] = '('; + r[2] = 'B'; + /* conv->ostate = 0; will be done by the caller */ + return 3; + } else + return 0; +} + +#undef STATE_JISX0212MS +#undef STATE_JISX0208MS +#undef STATE_JISX0201KATAKANA +#undef STATE_JISX0201ROMAN +#undef STATE_ASCII diff --git a/jni/parted/libiconv/lib/iso2022_kr.h b/jni/parted/libiconv/lib/iso2022_kr.h new file mode 100755 index 0000000..0256505 --- /dev/null +++ b/jni/parted/libiconv/lib/iso2022_kr.h @@ -0,0 +1,221 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-2022-KR + */ + +/* Specification: RFC 1557 */ + +/* Note: CJK.INF says the SO designator needs to appear only once at the + beginning of a text, but to decrease the risk of ambiguities, when + producing ISO-2022-KR, we repeat the designator in every line containing + SO characters. RFC 1557 does not mandate this. */ + +#define ESC 0x1b +#define SO 0x0e +#define SI 0x0f + +/* + * The state is composed of one of the following values + */ +#define STATE_ASCII 0 +#define STATE_TWOBYTE 1 +/* + * and one of the following values, << 8 + */ +#define STATE2_NONE 0 +#define STATE2_DESIGNATED_KSC5601 1 + +#define SPLIT_STATE \ + unsigned int state1 = state & 0xff, state2 = state >> 8 +#define COMBINE_STATE \ + state = (state2 << 8) | state1 + +static int +iso2022_kr_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + SPLIT_STATE; + int count = 0; + unsigned char c; + for (;;) { + c = *s; + if (c == ESC) { + if (n < count+4) + goto none; + if (s[1] == '$') { + if (s[2] == ')') { + if (s[3] == 'C') { + state2 = STATE2_DESIGNATED_KSC5601; + s += 4; count += 4; + if (n < count+1) + goto none; + continue; + } + } + } + goto ilseq; + } + if (c == SO) { + if (state2 != STATE2_DESIGNATED_KSC5601) + goto ilseq; + state1 = STATE_TWOBYTE; + s++; count++; + if (n < count+1) + goto none; + continue; + } + if (c == SI) { + state1 = STATE_ASCII; + s++; count++; + if (n < count+1) + goto none; + continue; + } + break; + } + switch (state1) { + case STATE_ASCII: + if (c < 0x80) { + int ret = ascii_mbtowc(conv,pwc,s,1); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 1) abort(); +#if 0 /* Accept ISO-2022-KR according to CJK.INF. */ + if (*pwc == 0x000a || *pwc == 0x000d) + state2 = STATE2_NONE; +#endif + COMBINE_STATE; + conv->istate = state; + return count+1; + } else + goto ilseq; + case STATE_TWOBYTE: + if (n < count+2) + goto none; + if (state2 != STATE2_DESIGNATED_KSC5601) abort(); + if (s[0] < 0x80 && s[1] < 0x80) { + int ret = ksc5601_mbtowc(conv,pwc,s,2); + if (ret == RET_ILSEQ) + goto ilseq; + if (ret != 2) abort(); + COMBINE_STATE; + conv->istate = state; + return count+2; + } else + goto ilseq; + default: abort(); + } + +none: + COMBINE_STATE; + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + COMBINE_STATE; + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +static int +iso2022_kr_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + state_t state = conv->ostate; + SPLIT_STATE; + unsigned char buf[2]; + int ret; + + /* Try ASCII. */ + ret = ascii_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] < 0x80) { + int count = (state1 == STATE_ASCII ? 1 : 2); + if (n < count) + return RET_TOOSMALL; + if (state1 != STATE_ASCII) { + r[0] = SI; + r += 1; + state1 = STATE_ASCII; + } + r[0] = buf[0]; + if (wc == 0x000a || wc == 0x000d) + state2 = STATE2_NONE; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + /* Try KS C 5601-1992. */ + ret = ksc5601_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (buf[0] < 0x80 && buf[1] < 0x80) { + int count = (state2 == STATE2_DESIGNATED_KSC5601 ? 0 : 4) + (state1 == STATE_TWOBYTE ? 0 : 1) + 2; + if (n < count) + return RET_TOOSMALL; + if (state2 != STATE2_DESIGNATED_KSC5601) { + r[0] = ESC; + r[1] = '$'; + r[2] = ')'; + r[3] = 'C'; + r += 4; + state2 = STATE2_DESIGNATED_KSC5601; + } + if (state1 != STATE_TWOBYTE) { + r[0] = SO; + r += 1; + state1 = STATE_TWOBYTE; + } + r[0] = buf[0]; + r[1] = buf[1]; + COMBINE_STATE; + conv->ostate = state; + return count; + } + } + + return RET_ILUNI; +} + +static int +iso2022_kr_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + SPLIT_STATE; + (void)state2; + if (state1 != STATE_ASCII) { + if (n < 1) + return RET_TOOSMALL; + r[0] = SI; + /* conv->ostate = 0; will be done by the caller */ + return 1; + } else + return 0; +} + +#undef COMBINE_STATE +#undef SPLIT_STATE +#undef STATE2_DESIGNATED_KSC5601 +#undef STATE2_NONE +#undef STATE_TWOBYTE +#undef STATE_ASCII diff --git a/jni/parted/libiconv/lib/iso646_cn.h b/jni/parted/libiconv/lib/iso646_cn.h new file mode 100755 index 0000000..3e7e2a0 --- /dev/null +++ b/jni/parted/libiconv/lib/iso646_cn.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO646-CN + * also known as GB_1988-80 + */ + +static int +iso646_cn_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + if (c == 0x24) + *pwc = (ucs4_t) 0x00a5; + else if (c == 0x7e) + *pwc = (ucs4_t) 0x203e; + else + *pwc = (ucs4_t) c; + return 1; + } + return RET_ILSEQ; +} + +static int +iso646_cn_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x0080 && !(wc == 0x0024 || wc == 0x007e)) { + *r = wc; + return 1; + } + if (wc == 0x00a5) { + *r = 0x24; + return 1; + } + if (wc == 0x203e) { + *r = 0x7e; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso646_jp.h b/jni/parted/libiconv/lib/iso646_jp.h new file mode 100755 index 0000000..189dc73 --- /dev/null +++ b/jni/parted/libiconv/lib/iso646_jp.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO646-JP + * also known as JIS_C6220-1969-RO + */ + +/* This is the lower half of JIS_X0201. */ + +static int +iso646_jp_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + if (c == 0x5c) + *pwc = (ucs4_t) 0x00a5; + else if (c == 0x7e) + *pwc = (ucs4_t) 0x203e; + else + *pwc = (ucs4_t) c; + return 1; + } + return RET_ILSEQ; +} + +static int +iso646_jp_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x0080 && !(wc == 0x005c || wc == 0x007e)) { + *r = wc; + return 1; + } + if (wc == 0x00a5) { + *r = 0x5c; + return 1; + } + if (wc == 0x203e) { + *r = 0x7e; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_1.h b/jni/parted/libiconv/lib/iso8859_1.h new file mode 100755 index 0000000..d6251d9 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_1.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-1 + */ + +static int +iso8859_1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + *pwc = (ucs4_t) c; + return 1; +} + +static int +iso8859_1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x0100) { + *r = wc; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_10.h b/jni/parted/libiconv/lib/iso8859_10.h new file mode 100755 index 0000000..5d47195 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_10.h @@ -0,0 +1,105 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-10 + */ + +static const unsigned short iso8859_10_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7, + 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a, + /* 0xb0 */ + 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7, + 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b, + /* 0xc0 */ + 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0 */ + 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168, + 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + /* 0xe0 */ + 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0 */ + 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169, + 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138, +}; + +static int +iso8859_10_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) iso8859_10_2uni[c-0xa0]; + return 1; +} + +static const unsigned char iso8859_10_page00[224] = { + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, /* 0xc0-0xc7 */ + 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0x00, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */ + 0xd8, 0x00, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, /* 0xe0-0xe7 */ + 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0x00, 0x00, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */ + 0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ + 0xa9, 0xb9, 0xa2, 0xb2, 0x00, 0x00, 0xcc, 0xec, /* 0x10-0x17 */ + 0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xa3, 0xb3, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0xa5, 0xb5, 0xa4, 0xb4, 0x00, 0x00, 0xc7, 0xe7, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xb6, /* 0x30-0x37 */ + 0xff, 0x00, 0x00, 0xa8, 0xb8, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0xaf, 0xbf, 0xd2, 0xf2, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xaa, 0xba, 0x00, 0x00, 0x00, 0x00, 0xab, 0xbb, /* 0x60-0x67 */ + 0xd7, 0xf7, 0xae, 0xbe, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, 0x00, /* 0x78-0x7f */ +}; + +static int +iso8859_10_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = iso8859_10_page00[wc-0x00a0]; + else if (wc == 0x2015) + c = 0xbd; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_11.h b/jni/parted/libiconv/lib/iso8859_11.h new file mode 100755 index 0000000..d42de9e --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_11.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 1999-2004, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-11 + */ + +static int +iso8859_11_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa1) { + *pwc = (ucs4_t) c; + return 1; + } + else if (c <= 0xfb && !(c >= 0xdb && c <= 0xde)) { + *pwc = (ucs4_t) (c + 0x0d60); + return 1; + } + return RET_ILSEQ; +} + +static int +iso8859_11_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x00a1) { + *r = wc; + return 1; + } + else if (wc >= 0x0e01 && wc <= 0x0e5b && !(wc >= 0x0e3b && wc <= 0x0e3e)) { + *r = wc-0x0d60; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_13.h b/jni/parted/libiconv/lib/iso8859_13.h new file mode 100755 index 0000000..98df56a --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_13.h @@ -0,0 +1,108 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-13 + */ + +static const unsigned short iso8859_13_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7, + 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7, + 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, + /* 0xc0 */ + 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, + 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, + /* 0xd0 */ + 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, + 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, + /* 0xe0 */ + 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, + 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, + /* 0xf0 */ + 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, + 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019, +}; + +static int +iso8859_13_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) iso8859_13_2uni[c-0xa0]; + return 1; +} + +static const unsigned char iso8859_13_page00[224] = { + 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0xc4, 0xc5, 0xaf, 0x00, /* 0xc0-0xc7 */ + 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xa8, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0xe4, 0xe5, 0xbf, 0x00, /* 0xe0-0xe7 */ + 0x00, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xf3, 0x00, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xb8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0xc2, 0xe2, 0x00, 0x00, 0xc0, 0xe0, 0xc3, 0xe3, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0xc7, 0xe7, 0x00, 0x00, 0xcb, 0xeb, /* 0x10-0x17 */ + 0xc6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0xce, 0xee, 0x00, 0x00, 0xc1, 0xe1, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xed, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0xcf, 0xef, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xd4, 0xf4, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba, /* 0x50-0x57 */ + 0x00, 0x00, 0xda, 0xfa, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char iso8859_13_page20[8] = { + 0x00, 0xff, 0x00, 0x00, 0xb4, 0xa1, 0xa5, 0x00, /* 0x18-0x1f */ +}; + +static int +iso8859_13_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = iso8859_13_page00[wc-0x00a0]; + else if (wc >= 0x2018 && wc < 0x2020) + c = iso8859_13_page20[wc-0x2018]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_14.h b/jni/parted/libiconv/lib/iso8859_14.h new file mode 100755 index 0000000..16630d7 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_14.h @@ -0,0 +1,126 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-14 + */ + +static const unsigned short iso8859_14_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7, + 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178, + /* 0xb0 */ + 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56, + 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, + /* 0xc0 */ + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0 */ + 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df, + /* 0xe0 */ + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0 */ + 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff, +}; + +static int +iso8859_14_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c >= 0xa0) + *pwc = (ucs4_t) iso8859_14_2uni[c-0xa0]; + else + *pwc = (ucs4_t) c; + return 1; +} + +static const unsigned char iso8859_14_page00[96] = { + 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0x00, 0x00, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x00, 0xff, /* 0xf8-0xff */ +}; +static const unsigned char iso8859_14_page01_0[32] = { + 0x00, 0x00, 0xa4, 0xa5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char iso8859_14_page01_1[16] = { + 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe, /* 0x70-0x77 */ + 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char iso8859_14_page1e_0[136] = { + 0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x00, 0x00, /* 0x80-0x87 */ +}; +static const unsigned char iso8859_14_page1e_1[8] = { + 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ +}; + +static int +iso8859_14_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = iso8859_14_page00[wc-0x00a0]; + else if (wc >= 0x0108 && wc < 0x0128) + c = iso8859_14_page01_0[wc-0x0108]; + else if (wc >= 0x0170 && wc < 0x0180) + c = iso8859_14_page01_1[wc-0x0170]; + else if (wc >= 0x1e00 && wc < 0x1e88) + c = iso8859_14_page1e_0[wc-0x1e00]; + else if (wc >= 0x1ef0 && wc < 0x1ef8) + c = iso8859_14_page1e_1[wc-0x1ef0]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_15.h b/jni/parted/libiconv/lib/iso8859_15.h new file mode 100755 index 0000000..d3feb89 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_15.h @@ -0,0 +1,80 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-15 + */ + +static const unsigned short iso8859_15_2uni[32] = { + /* 0xa0 */ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7, + 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7, + 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf, +}; + +static int +iso8859_15_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c >= 0xa0 && c < 0xc0) + *pwc = (ucs4_t) iso8859_15_2uni[c-0xa0]; + else + *pwc = (ucs4_t) c; + return 1; +} + +static const unsigned char iso8859_15_page00[32] = { + 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0xb9, 0xba, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0xb8-0xbf */ +}; +static const unsigned char iso8859_15_page01[48] = { + 0x00, 0x00, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xbe, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */ +}; + +static int +iso8859_15_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = iso8859_15_page00[wc-0x00a0]; + else if (wc >= 0x00c0 && wc < 0x0100) + c = wc; + else if (wc >= 0x0150 && wc < 0x0180) + c = iso8859_15_page01[wc-0x0150]; + else if (wc == 0x20ac) + c = 0xa4; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_16.h b/jni/parted/libiconv/lib/iso8859_16.h new file mode 100755 index 0000000..cbb112a --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_16.h @@ -0,0 +1,115 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-16 + */ + +static const unsigned short iso8859_16_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7, + 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7, + 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c, + /* 0xc0 */ + 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0 */ + 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a, + 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df, + /* 0xe0 */ + 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0 */ + 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b, + 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff, +}; + +static int +iso8859_16_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) iso8859_16_2uni[c-0xa0]; + return 1; +} + +static const unsigned char iso8859_16_page00[224] = { + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0xab, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0x00, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0x00, /* 0xd0-0xd7 */ + 0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0x00, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0x00, /* 0xf0-0xf7 */ + 0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xa2, 0xc5, 0xe5, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xb2, 0xb9, 0x00, 0x00, /* 0x08-0x0f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xd5, 0xf5, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xbe, 0xac, 0xae, 0xaf, 0xbf, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char iso8859_16_page02[8] = { + 0xaa, 0xba, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; +static const unsigned char iso8859_16_page20[8] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xa5, 0x00, /* 0x18-0x1f */ +}; + +static int +iso8859_16_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = iso8859_16_page00[wc-0x00a0]; + else if (wc >= 0x0218 && wc < 0x0220) + c = iso8859_16_page02[wc-0x0218]; + else if (wc >= 0x2018 && wc < 0x2020) + c = iso8859_16_page20[wc-0x2018]; + else if (wc == 0x20ac) + c = 0xa4; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_2.h b/jni/parted/libiconv/lib/iso8859_2.h new file mode 100755 index 0000000..2744bc6 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_2.h @@ -0,0 +1,111 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-2 + */ + +static const unsigned short iso8859_2_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, + 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, + /* 0xb0 */ + 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, + 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, + /* 0xc0 */ + 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, + /* 0xd0 */ + 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, + 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, + /* 0xe0 */ + 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, + /* 0xf0 */ + 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, + 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9, +}; + +static int +iso8859_2_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) iso8859_2_2uni[c-0xa0]; + return 1; +} + +static const unsigned char iso8859_2_page00[224] = { + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */ + 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xda, 0x00, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ + 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xfa, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xb1, 0xc6, 0xe6, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0xcf, 0xef, /* 0x08-0x0f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xca, 0xea, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0xc5, 0xe5, 0x00, 0x00, 0xa5, 0xb5, 0x00, /* 0x38-0x3f */ + 0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0xd2, /* 0x40-0x47 */ + 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xd5, 0xf5, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00, /* 0x50-0x57 */ + 0xd8, 0xf8, 0xa6, 0xb6, 0x00, 0x00, 0xaa, 0xba, /* 0x58-0x5f */ + 0xa9, 0xb9, 0xde, 0xfe, 0xab, 0xbb, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9, /* 0x68-0x6f */ + 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xac, 0xbc, 0xaf, 0xbf, 0xae, 0xbe, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char iso8859_2_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xa2, 0xff, 0x00, 0xb2, 0x00, 0xbd, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static int +iso8859_2_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = iso8859_2_page00[wc-0x00a0]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = iso8859_2_page02[wc-0x02c0]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_3.h b/jni/parted/libiconv/lib/iso8859_3.h new file mode 100755 index 0000000..85dde03 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_3.h @@ -0,0 +1,117 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-3 + */ + +static const unsigned short iso8859_3_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0xfffd, 0x0124, 0x00a7, + 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0xfffd, 0x017b, + /* 0xb0 */ + 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, + 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0xfffd, 0x017c, + /* 0xc0 */ + 0x00c0, 0x00c1, 0x00c2, 0xfffd, 0x00c4, 0x010a, 0x0108, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0 */ + 0xfffd, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, + 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, + /* 0xe0 */ + 0x00e0, 0x00e1, 0x00e2, 0xfffd, 0x00e4, 0x010b, 0x0109, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0 */ + 0xfffd, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, + 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9, +}; + +static int +iso8859_3_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = iso8859_3_2uni[c-0xa0]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char iso8859_3_page00[96] = { + 0xa0, 0x00, 0x00, 0xa3, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char iso8859_3_page01[120] = { + 0xc6, 0xe6, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xd8, 0xf8, 0xab, 0xbb, /* 0x18-0x1f */ + 0xd5, 0xf5, 0x00, 0x00, 0xa6, 0xb6, 0xa1, 0xb1, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xa9, 0xb9, 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, 0xaa, 0xba, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xdd, 0xfd, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char iso8859_3_page02[8] = { + 0xa2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static int +iso8859_3_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = iso8859_3_page00[wc-0x00a0]; + else if (wc >= 0x0108 && wc < 0x0180) + c = iso8859_3_page01[wc-0x0108]; + else if (wc >= 0x02d8 && wc < 0x02e0) + c = iso8859_3_page02[wc-0x02d8]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_4.h b/jni/parted/libiconv/lib/iso8859_4.h new file mode 100755 index 0000000..50c777c --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_4.h @@ -0,0 +1,111 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-4 + */ + +static const unsigned short iso8859_4_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, + 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, + /* 0xb0 */ + 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, + 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, + /* 0xc0 */ + 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, + /* 0xd0 */ + 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, + /* 0xe0 */ + 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, + /* 0xf0 */ + 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9, +}; + +static int +iso8859_4_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) iso8859_4_2uni[c-0xa0]; + return 1; +} + +static const unsigned char iso8859_4_page00[224] = { + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, /* 0xc0-0xc7 */ + 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0x00, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, /* 0xe0-0xe7 */ + 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ + 0xd0, 0xf0, 0xaa, 0xba, 0x00, 0x00, 0xcc, 0xec, /* 0x10-0x17 */ + 0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xab, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0xa5, 0xb5, 0xcf, 0xef, 0x00, 0x00, 0xc7, 0xe7, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xf3, /* 0x30-0x37 */ + 0xa2, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0xbd, 0xbf, 0xd2, 0xf2, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xb3, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xa9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, /* 0x60-0x67 */ + 0xdd, 0xfd, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xbe, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char iso8859_4_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0xff, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static int +iso8859_4_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = iso8859_4_page00[wc-0x00a0]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = iso8859_4_page02[wc-0x02c0]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_5.h b/jni/parted/libiconv/lib/iso8859_5.h new file mode 100755 index 0000000..e56347f --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_5.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-5 + */ + +static const unsigned short iso8859_5_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, + /* 0xb0 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + /* 0xc0 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xd0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xe0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + /* 0xf0 */ + 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f, +}; + +static int +iso8859_5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) iso8859_5_2uni[c-0xa0]; + return 1; +} + +static const unsigned char iso8859_5_page00[16] = { + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ +}; +static const unsigned char iso8859_5_page04[96] = { + 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x08-0x0f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff, /* 0x58-0x5f */ +}; + +static int +iso8859_5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00b0) + c = iso8859_5_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0460) + c = iso8859_5_page04[wc-0x0400]; + else if (wc == 0x2116) + c = 0xf0; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_6.h b/jni/parted/libiconv/lib/iso8859_6.h new file mode 100755 index 0000000..bbe9370 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_6.h @@ -0,0 +1,97 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-6 + */ + +static const unsigned short iso8859_6_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0xfffd, 0xfffd, 0xfffd, 0x00a4, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x060c, 0x00ad, 0xfffd, 0xfffd, + /* 0xb0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x061b, 0xfffd, 0xfffd, 0xfffd, 0x061f, + /* 0xc0 */ + 0xfffd, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, + /* 0xd0 */ + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, + 0x0638, 0x0639, 0x063a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xe0 */ + 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, + 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, + /* 0xf0 */ + 0x0650, 0x0651, 0x0652, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, +}; + +static int +iso8859_6_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = iso8859_6_2uni[c-0xa0]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char iso8859_6_page00[16] = { + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ +}; +static const unsigned char iso8859_6_page06[80] = { + 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ +}; + +static int +iso8859_6_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00b0) + c = iso8859_6_page00[wc-0x00a0]; + else if (wc >= 0x0608 && wc < 0x0658) + c = iso8859_6_page06[wc-0x0608]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_7.h b/jni/parted/libiconv/lib/iso8859_7.h new file mode 100755 index 0000000..3d9b724 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_7.h @@ -0,0 +1,110 @@ +/* + * Copyright (C) 1999-2004, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-7 + */ + +static const unsigned short iso8859_7_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x2018, 0x2019, 0x00a3, 0x20ac, 0x20af, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x037a, 0x00ab, 0x00ac, 0x00ad, 0xfffd, 0x2015, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, + 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, + /* 0xc0 */ + 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, + /* 0xd0 */ + 0x03a0, 0x03a1, 0xfffd, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, + /* 0xe0 */ + 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + /* 0xf0 */ + 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0xfffd, +}; + +static int +iso8859_7_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = iso8859_7_2uni[c-0xa0]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char iso8859_7_page00[32] = { + 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0x00, 0x00, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char iso8859_7_page03[88] = { + 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0x00, /* 0x80-0x87 */ + 0xb8, 0xb9, 0xba, 0x00, 0xbc, 0x00, 0xbe, 0xbf, /* 0x88-0x8f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x90-0x97 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x98-0x9f */ + 0xd0, 0xd1, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xa0-0xa7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xa8-0xaf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xb0-0xb7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xb8-0xbf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xc0-0xc7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xc8-0xcf */ +}; +static const unsigned char iso8859_7_page20[16] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, /* 0x10-0x17 */ + 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; + +static int +iso8859_7_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = iso8859_7_page00[wc-0x00a0]; + else if (wc >= 0x0378 && wc < 0x03d0) + c = iso8859_7_page03[wc-0x0378]; + else if (wc >= 0x2010 && wc < 0x2020) + c = iso8859_7_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0xa4; + else if (wc == 0x20af) + c = 0xa5; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_8.h b/jni/parted/libiconv/lib/iso8859_8.h new file mode 100755 index 0000000..7e3ba96 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_8.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-8 + */ + +static const unsigned short iso8859_8_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0xfffd, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0xfffd, + /* 0xc0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xd0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2017, + /* 0xe0 */ + 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + /* 0xf0 */ + 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd, +}; + +static int +iso8859_8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c >= 0xa0) { + unsigned short wc = iso8859_8_2uni[c-0xa0]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + else { + *pwc = (ucs4_t) c; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char iso8859_8_page00[88] = { + 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, /* 0xf0-0xf7 */ +}; +static const unsigned char iso8859_8_page05[32] = { + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */ + 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; +static const unsigned char iso8859_8_page20[16] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x10-0x17 */ +}; + +static int +iso8859_8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00f8) + c = iso8859_8_page00[wc-0x00a0]; + else if (wc >= 0x05d0 && wc < 0x05f0) + c = iso8859_8_page05[wc-0x05d0]; + else if (wc >= 0x2008 && wc < 0x2018) + c = iso8859_8_page20[wc-0x2008]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/iso8859_9.h b/jni/parted/libiconv/lib/iso8859_9.h new file mode 100755 index 0000000..eb09c58 --- /dev/null +++ b/jni/parted/libiconv/lib/iso8859_9.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-8859-9 + */ + +static const unsigned short iso8859_9_2uni[48] = { + /* 0xd0 */ + 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, + /* 0xe0 */ + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0 */ + 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, +}; + +static int +iso8859_9_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c >= 0xd0) + *pwc = (ucs4_t) iso8859_9_2uni[c-0xd0]; + else + *pwc = (ucs4_t) c; + return 1; +} + +static const unsigned char iso8859_9_page00[48] = { + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */ +}; +static const unsigned char iso8859_9_page01[72] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, /* 0x58-0x5f */ +}; + +static int +iso8859_9_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00d0) { + *r = wc; + return 1; + } + else if (wc >= 0x00d0 && wc < 0x0100) + c = iso8859_9_page00[wc-0x00d0]; + else if (wc >= 0x0118 && wc < 0x0160) + c = iso8859_9_page01[wc-0x0118]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/isoir165.h b/jni/parted/libiconv/lib/isoir165.h new file mode 100755 index 0000000..28f47e3 --- /dev/null +++ b/jni/parted/libiconv/lib/isoir165.h @@ -0,0 +1,158 @@ +/* + * Copyright (C) 1999-2001, 2005, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-IR-165 + */ + +/* + * ISO-IR-165 is an extension of GB 2312, consisting of: + * 1. GB 6345.1-86 corrections: + * Two corrections to GB 2312, at 0x2367 and 0x6F71. + * 2. GB 6345.1-86 additions: + * - 6 new full-width pinyin characters in row 0x28. + * - ISO646-CN in row 0x2A. + * - 32 half-width pinyin characters in row 0x2B. + * 3. GB 8565.2-88 additions: + * - 50 characters in row 0x2D. + * - 92 characters in row 0x2E. + * - 93 characters in row 0x2F. + * - 470 characters in rows 0x7A-0x7E. + * 4. ISO-IR-165 additions: + * - 22 characters in row 0x26. + * - 94 characters in row 0x2C. + * - 44 new characters in row 0x2D. + * - 1 new character in row 0x2F. + * + * The conversion table was created from the following sources: + * Ad 1. The 0x2367 correction is already integrated in the unicode.org + * GB2312.TXT table. The 0x6F71 mapping is the same in the unicode.org + * GB2312.TXT and UNIHAN.TXT table and in Koichi Yasuoka's Uni2GB table, + * so we assume it's correct. + * The unicode.org UNIHAN.TXT table about GB 8565 is not usable: it has + * extraneous code points at rows 0x28, 0x2C, 0x2D. Note also that it does + * not list the 69 non-hanzi in row 0x2F. Moreover, it has the characters + * 0x2F7A-0x2F7D shifted down by one to 0x2F79-0x2F7C. + * Therefore we take the GB8565 and ISO-IR-165 data from Koichi Yasuoka's + * Uni2GB table. + * Ad 1. Yasuoka maps 0x2367 to U+0261 (small script g) and 0x2840 to U+FF47 + * (full-width small normal g). While coherent with ISO-IR's 165.pdf, + * this disagrees with Ken Lunde's book: He says that ISO-IR-165 + * includes the GB6345 correction, i.e. maps 0x2367 to U+FF47 or U+0067 + * and _not_ to U+0261 (small script g). + * To overcome the confusion, we just map both 0x2367 and 0x2840 to + * U+FF47. + * Ad 2. Row 0x28: Add a mapping from 0x283F to U+01F9. + * Row 0x2A: Mapping is well-known, also present in Koichi Yasuoka's + * table. + * Row 0x2B: Typed in by hand from appendix E in Ken Lunde's book. + * When converting from Unicode to ISO-IR-165, prefer the half-width + * range 0x2B{21..40} to the full-width range 0x28{21..40}. + * Ad 3. Rows 0x2D, 0x2E: Both Koichi Yasuoka's Uni2GB table and the UNIHAN.TXT + * data for GB 8565 agree here. + * Row 0x2F: Taken from Koichi Yasuoka's Uni2GB table. + * Rows 0x7A-0x7E: Koichi Yasuoka's Uni2GB table and the UNIHAN.TXT + * data for GB 8565 agree here mostly. Differences: + * 0x7C38 -> U+6F26 or U+527A ? We choose U+6F26. + * 0x7C5A -> U+7A40 or U+6996 ? We choose U+6996. + * Ad 4. Row 0x26: Mapping unknown. + * Rows 0x2C, 0x2D: Both Koichi Yasuoka's Uni2GB table and the UNIHAN.TXT + * data for GB 8565 (!) agree here. + * Row 0x2F: Taken from Koichi Yasuoka's Uni2GB table. + */ + +#include "isoir165ext.h" + +static int +isoir165_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + int ret; + + /* Map full-width pinyin (row 0x28) like half-width pinyin (row 0x2B). */ + if (s[0] == 0x28) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 <= 0x40) { + unsigned char buf[2]; + buf[0] = 0x2b; + buf[1] = c2; + ret = isoir165ext_mbtowc(conv,pwc,buf,2); + if (ret != RET_ILSEQ) + return ret; + } + } + } + /* Try the GB2312 -> Unicode table. */ + ret = gb2312_mbtowc(conv,pwc,s,n); + if (ret != RET_ILSEQ) + return ret; + /* Row 0x2A is GB_1988-80. */ + if (s[0] == 0x2a) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + ret = iso646_cn_mbtowc(conv,pwc,s+1,1); + if (ret != 1) abort(); + return 2; + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + /* Try the ISO-IR-165 extensions -> Unicode table. */ + ret = isoir165ext_mbtowc(conv,pwc,s,n); + return ret; +} + +static int +isoir165_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Try the Unicode -> GB2312 table. */ + ret = gb2312_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (!(buf[0] == 0x28 && buf[1] >= 0x21 && buf[1] <= 0x40)) { + if (n >= 2) { + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + return RET_TOOSMALL; + } + } + /* Row 0x2A is GB_1988-80. */ + ret = iso646_cn_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + if (ret != 1) abort(); + if (buf[0] >= 0x21 && buf[0] < 0x7f) { + if (n >= 2) { + r[0] = 0x2a; + r[1] = buf[0]; + return 2; + } + return RET_TOOSMALL; + } + } + /* Try the Unicode -> ISO-IR-165 extensions table. */ + ret = isoir165ext_wctomb(conv,r,wc,n); + return ret; +} diff --git a/jni/parted/libiconv/lib/isoir165ext.h b/jni/parted/libiconv/lib/isoir165ext.h new file mode 100755 index 0000000..c92cc40 --- /dev/null +++ b/jni/parted/libiconv/lib/isoir165ext.h @@ -0,0 +1,799 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * ISO-IR-165 extensions + */ + +static const unsigned short isoir165ext_2uni_page2b[470] = { + /* 0x2b */ + 0x1fb1, 0x03ac, 0x1fb0, 0x1f70, 0x0113, 0x00e9, 0x011b, 0x00e8, + 0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2, + 0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc, + 0x00fc, 0x00ea, 0x03b1, 0x1e3f, 0x0144, 0x0148, 0x01f9, 0xff47, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x2c */ + 0x53be, 0x4eb8, 0x4f3e, 0x501e, 0x50c7, 0x9118, 0x6c98, 0x6cdc, + 0x6cc3, 0x6e5d, 0x6ea6, 0x6eeb, 0x6fa5, 0x6165, 0x5ea4, 0x9618, + 0x5848, 0x8453, 0x7cf5, 0x5f07, 0x6294, 0x647d, 0x725a, 0x5574, + 0x55a4, 0x5640, 0x5684, 0x5d1f, 0x72c9, 0x998c, 0x59de, 0x59fd, + 0x5a5e, 0x7ebb, 0x7ee4, 0x7ef9, 0x9a99, 0x71cf, 0x6245, 0x624a, + 0x797c, 0x739a, 0x742b, 0x7488, 0x74aa, 0x74d8, 0x6767, 0x6ab5, + 0x71ca, 0x6ba3, 0x8f80, 0x8f92, 0x8d5f, 0x9b36, 0x72a8, 0x87a3, + 0x8152, 0x6b38, 0x98d0, 0x8897, 0x88af, 0x8955, 0x770a, 0x94da, + 0x955a, 0x9560, 0x9e24, 0x9e40, 0x9e50, 0x9e5d, 0x9e60, 0x870e, + 0x7b5c, 0x7fd9, 0x7fef, 0x7e44, 0x8e45, 0x8e36, 0x8e62, 0x8e5c, + 0x9778, 0x9b46, 0x9f2b, 0x9f41, 0x7526, 0x4e26, 0x8bac, 0x8129, + 0x5091, 0x50cd, 0x52b9, 0x89d4, 0x5557, 0x94c7, + /* 0x2d */ + 0x9496, 0x9498, 0x94cf, 0x94d3, 0x94d4, 0x94e6, 0x9533, 0x951c, + 0x9520, 0x9527, 0x953d, 0x9543, 0x956e, 0x9574, 0x9c80, 0x9c84, + 0x9c8a, 0x9c93, 0x9c96, 0x9c97, 0x9c98, 0x9c99, 0x9cbf, 0x9cc0, + 0x9cc1, 0x9cd2, 0x9cdb, 0x9ce0, 0x9ce3, 0x9770, 0x977a, 0x97a1, + 0x97ae, 0x97a8, 0x9964, 0x9966, 0x9978, 0x9979, 0x997b, 0x997e, + 0x9982, 0x9983, 0x998e, 0x9b10, 0x9b18, 0x65a2, 0x9e80, 0x911c, + 0x9e91, 0x9f12, 0x52f3, 0x6c96, 0x6d44, 0x6e1b, 0x6e67, 0x6f82, + 0x6fec, 0x60ae, 0x5ec8, 0x8ffa, 0x577f, 0x5586, 0x849e, 0x8460, + 0x5c05, 0x5e0b, 0x5d11, 0x5d19, 0x5dd6, 0x59b3, 0x5aae, 0x9a94, + 0x658f, 0x709e, 0x7551, 0x71ff, 0x691d, 0x6a11, 0x68bf, 0x6607, + 0x668e, 0x6673, 0x6c25, 0x7652, 0x778b, 0x76ea, 0x9895, 0x8780, + 0x882d, 0x7b87, 0x7c50, 0x8ead, 0x9575, 0x65c2, + /* 0x2e */ + 0x5390, 0x79b8, 0x4f15, 0x4f21, 0x4f3b, 0x4fa2, 0x50a4, 0x5092, + 0x530a, 0x51c3, 0x51a8, 0x8d20, 0x5787, 0x579a, 0x5795, 0x57eb, + 0x585d, 0x585a, 0x5871, 0x5895, 0x5c30, 0x5f0c, 0x5f0d, 0x5f0e, + 0x5c72, 0x5cc7, 0x5fac, 0x5f68, 0x5f5f, 0x5a12, 0x5a65, 0x5a84, + 0x5ac4, 0x7394, 0x73ea, 0x73ee, 0x7437, 0x7415, 0x7454, 0x6799, + 0x686c, 0x68f8, 0x69fe, 0x72e2, 0x6667, 0x8d52, 0x89c3, 0x89cd, + 0x6427, 0x6477, 0x6c1d, 0x813f, 0x6b54, 0x98d6, 0x707a, 0x70f1, + 0x7120, 0x6153, 0x6c87, 0x6dad, 0x6e81, 0x6eb5, 0x6f94, 0x6f9b, + 0x793d, 0x794e, 0x7806, 0x7859, 0x7894, 0x78dc, 0x7903, 0x7a16, + 0x7a5e, 0x75e0, 0x7adc, 0x7676, 0x9892, 0x7bf2, 0x7c30, 0x7c5d, + 0x9c9d, 0x7cac, 0x8278, 0x83d1, 0x84ea, 0x7fc0, 0x7f1e, 0x8e21, + 0x8e53, 0x9754, 0x9f0c, 0x94fb, 0xfffd, 0xfffd, + /* 0x2f */ + 0x32c0, 0x32c1, 0x32c2, 0x32c3, 0x32c4, 0x32c5, 0x32c6, 0x32c7, + 0x32c8, 0x32c9, 0x32ca, 0x32cb, 0x33e0, 0x33e1, 0x33e2, 0x33e3, + 0x33e4, 0x33e5, 0x33e6, 0x33e7, 0x33e8, 0x33e9, 0x33ea, 0x33eb, + 0x33ec, 0x33ed, 0x33ee, 0x33ef, 0x33f0, 0x33f1, 0x33f2, 0x33f3, + 0x33f4, 0x33f5, 0x33f6, 0x33f7, 0x33f8, 0x33f9, 0x33fa, 0x33fb, + 0x33fc, 0x33fd, 0x33fe, 0x3358, 0x3359, 0x335a, 0x335b, 0x335c, + 0x335d, 0x335e, 0x335f, 0x3360, 0x3361, 0x3362, 0x3363, 0x3364, + 0x3365, 0x3366, 0x3367, 0x3368, 0x3369, 0x336a, 0x336b, 0x336c, + 0x336d, 0x336e, 0x336f, 0x3370, 0x3037, 0x90a8, 0x965e, 0x5842, + 0x5803, 0x6c3e, 0x6d29, 0x6ee7, 0x8534, 0x84c6, 0x633c, 0x5d05, + 0x7f10, 0x7eec, 0x7287, 0x712e, 0x8218, 0x8216, 0x756c, 0x75f3, + 0x9b25, 0x8980, 0x7ca6, 0x4e85, 0x5570, 0x91c6, +}; +static const unsigned short isoir165ext_2uni_page7a[470] = { + /* 0x7a */ + 0x4e0f, 0x673f, 0x4e42, 0x752a, 0x592c, 0x9ee1, 0x8652, 0x531c, + 0x5187, 0x518f, 0x50f0, 0x4f0b, 0x4f23, 0x4f03, 0x4f61, 0x4f7a, + 0x4f6b, 0x4feb, 0x4ff5, 0x5034, 0x5022, 0x4ff6, 0x5072, 0x4eb6, + 0x51ae, 0x5910, 0x6bda, 0x522c, 0x5232, 0x4fb4, 0x5298, 0x52bb, + 0x52bc, 0x52cd, 0x52da, 0x52f7, 0x53c6, 0x53c7, 0x5770, 0x576c, + 0x57b1, 0x579f, 0x579e, 0x57be, 0x57cc, 0x580e, 0x580c, 0x57f5, + 0x5809, 0x583c, 0x5843, 0x5845, 0x5846, 0x583d, 0x5853, 0x5888, + 0x5884, 0x58f8, 0x56ad, 0x5940, 0x5953, 0x596d, 0x5c2a, 0x54a5, + 0x551d, 0x5536, 0x556f, 0x554d, 0x569a, 0x569c, 0x56f7, 0x5710, + 0x5719, 0x5e17, 0x5e21, 0x5e28, 0x5e6a, 0x5c74, 0x5c7c, 0x5ca8, + 0x5c9e, 0x5cc3, 0x5cd3, 0x5ce3, 0x5ce7, 0x5cff, 0x5d04, 0x5d00, + 0x5d1a, 0x5d0c, 0x5d4e, 0x5d5a, 0x5d85, 0x5d93, + /* 0x7b */ + 0x5d92, 0x5dc2, 0x5dc9, 0x8852, 0x5faf, 0x5906, 0x65a8, 0x7241, + 0x7242, 0x5ebc, 0x5ecb, 0x95ec, 0x95ff, 0x8a1a, 0x9607, 0x9613, + 0x961b, 0x5bac, 0x5ba7, 0x5c5d, 0x5f22, 0x59ee, 0x5a7c, 0x5a96, + 0x5a73, 0x5a9e, 0x5aad, 0x5ada, 0x5aea, 0x5b1b, 0x5b56, 0x9a72, + 0x9a83, 0x9a89, 0x9a8d, 0x9a8e, 0x9a95, 0x9aa6, 0x7395, 0x7399, + 0x73a0, 0x73b1, 0x73a5, 0x73a6, 0x73d6, 0x73f0, 0x73fd, 0x73e3, + 0x7424, 0x740e, 0x7407, 0x73f6, 0x73fa, 0x7432, 0x742f, 0x7444, + 0x7442, 0x7471, 0x7478, 0x7462, 0x7486, 0x749f, 0x74a0, 0x7498, + 0x74b2, 0x97e8, 0x6745, 0x679f, 0x677b, 0x67c8, 0x67ee, 0x684b, + 0x68a0, 0x6812, 0x681f, 0x686a, 0x68bc, 0x68fb, 0x686f, 0x68b1, + 0x68c1, 0x68eb, 0x6913, 0x68d1, 0x6911, 0x68d3, 0x68ec, 0x692b, + 0x68e8, 0x69be, 0x6969, 0x6940, 0x696f, 0x695f, + /* 0x7c */ + 0x6962, 0x6935, 0x6959, 0x69bc, 0x69c5, 0x69da, 0x69dc, 0x6a0b, + 0x69e5, 0x6a66, 0x6a96, 0x6ab4, 0x72dd, 0x5cf1, 0x7314, 0x733a, + 0x6b95, 0x5f67, 0x80fe, 0x74fb, 0x7503, 0x655c, 0x6569, 0x6f26, + 0x65f8, 0x65fb, 0x6609, 0x663d, 0x6662, 0x665e, 0x666c, 0x668d, + 0x668b, 0x8d51, 0x8d57, 0x7263, 0x7277, 0x63b1, 0x6261, 0x6260, + 0x6283, 0x62e4, 0x62c3, 0x631c, 0x6326, 0x63af, 0x63fe, 0x6422, + 0x6412, 0x64ed, 0x6713, 0x6718, 0x8158, 0x81d1, 0x98cf, 0x98d4, + 0x98d7, 0x6996, 0x7098, 0x70dc, 0x70fa, 0x710c, 0x711c, 0x71cb, + 0x721f, 0x70dd, 0x659d, 0x6246, 0x6017, 0x60c7, 0x60d3, 0x60b0, + 0x60d9, 0x6114, 0x6c3f, 0x6c67, 0x6c84, 0x6c9a, 0x6c6d, 0x6ca8, + 0x6cc6, 0x6cb5, 0x6d49, 0x6d38, 0x6d11, 0x6d3a, 0x6d28, 0x6d50, + 0x6d34, 0x6d55, 0x6d61, 0x6da2, 0x6d65, 0x6d5b, + /* 0x7d */ + 0x6d64, 0x6db4, 0x6e9a, 0x6e5c, 0x6e72, 0x6ea0, 0x6e87, 0x6e8e, + 0x6ec9, 0x6ec3, 0x6f37, 0x6ed8, 0x6eea, 0x6f56, 0x6f75, 0x6f5f, + 0x6fb4, 0x6fbc, 0x7014, 0x700d, 0x700c, 0x703c, 0x7943, 0x7947, + 0x794a, 0x7950, 0x7972, 0x7998, 0x79a0, 0x79a4, 0x77fc, 0x77fb, + 0x7822, 0x7820, 0x7841, 0x785a, 0x7875, 0x78b6, 0x78e1, 0x7933, + 0x8a5f, 0x76fb, 0x771b, 0x772c, 0x7786, 0x77ab, 0x77ad, 0x7564, + 0x756f, 0x6983, 0x7f7d, 0x76dd, 0x76e6, 0x76ec, 0x7521, 0x79fe, + 0x7a44, 0x767f, 0x769e, 0x9e27, 0x9e2e, 0x9e30, 0x9e34, 0x9e4d, + 0x9e52, 0x9e53, 0x9e54, 0x9e56, 0x9e59, 0x9e61, 0x9e62, 0x9e65, + 0x9e6f, 0x9e74, 0x75a2, 0x7604, 0x7608, 0x761d, 0x7ad1, 0x7a85, + 0x7a8e, 0x7aa3, 0x7ab8, 0x7abe, 0x77de, 0x8030, 0x988b, 0x988e, + 0x9899, 0x98a3, 0x8683, 0x8705, 0x8758, 0x87cf, + /* 0x7e */ + 0x87e2, 0x880b, 0x80d4, 0x7f4d, 0x7b4a, 0x7b4e, 0x7b7f, 0x7b93, + 0x7bef, 0x7c09, 0x7bf0, 0x7c15, 0x7c03, 0x7c20, 0x823a, 0x8886, + 0x88aa, 0x88c0, 0x88c8, 0x8926, 0x8976, 0x7f91, 0x8283, 0x82bc, + 0x82a7, 0x8313, 0x82fe, 0x8300, 0x835d, 0x8345, 0x8344, 0x831d, + 0x83a6, 0x8399, 0x83fe, 0x841a, 0x83fc, 0x8429, 0x8439, 0x84a8, + 0x84cf, 0x849f, 0x84c2, 0x84f7, 0x8570, 0x85b3, 0x85a2, 0x96d8, + 0x85b8, 0x85e0, 0x7fda, 0x7eae, 0x7eb4, 0x7ebc, 0x7ed6, 0x7f0a, + 0x5b43, 0x8d6a, 0x5245, 0x8c68, 0x8c6e, 0x8c6d, 0x8e16, 0x8e26, + 0x8e27, 0x8e50, 0x9098, 0x90a0, 0x90bd, 0x90c8, 0x90c3, 0x90da, + 0x90ff, 0x911a, 0x910c, 0x9120, 0x9142, 0x8fb5, 0x90e4, 0x8c86, + 0x89f1, 0x8bb1, 0x8bbb, 0x8bc7, 0x8bea, 0x8c09, 0x8c1e, 0x9702, + 0x68d0, 0x7306, 0x9f81, 0x9f82, 0x92c6, 0x9491, +}; + +static int +isoir165ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x2b && c1 <= 0x2f) || (c1 >= 0x7a && c1 <= 0x7e)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + unsigned short wc = 0xfffd; + if (i < 8366) { + if (i < 1410) + wc = isoir165ext_2uni_page2b[i-940]; + } else { + if (i < 8836) + wc = isoir165ext_2uni_page7a[i-8366]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short isoir165ext_2charset[876] = { + 0x2b28, 0x2b26, 0x2b3a, 0x2b2c, 0x2b2a, 0x2b30, 0x2b2e, 0x2b34, + 0x2b32, 0x2b39, 0x2b25, 0x2b27, 0x2b29, 0x2b3d, 0x2b3e, 0x2b2d, + 0x2b31, 0x2b2b, 0x2b2f, 0x2b33, 0x2b35, 0x2b36, 0x2b37, 0x2b38, + 0x2b3f, 0x2b22, 0x2b3b, 0x2b3c, 0x2b24, 0x2b23, 0x2b21, 0x2f65, + 0x2f21, 0x2f22, 0x2f23, 0x2f24, 0x2f25, 0x2f26, 0x2f27, 0x2f28, + 0x2f29, 0x2f2a, 0x2f2b, 0x2f2c, 0x2f4c, 0x2f4d, 0x2f4e, 0x2f4f, + 0x2f50, 0x2f51, 0x2f52, 0x2f53, 0x2f54, 0x2f55, 0x2f56, 0x2f57, + 0x2f58, 0x2f59, 0x2f5a, 0x2f5b, 0x2f5c, 0x2f5d, 0x2f5e, 0x2f5f, + 0x2f60, 0x2f61, 0x2f62, 0x2f63, 0x2f64, 0x2f2d, 0x2f2e, 0x2f2f, + 0x2f30, 0x2f31, 0x2f32, 0x2f33, 0x2f34, 0x2f35, 0x2f36, 0x2f37, + 0x2f38, 0x2f39, 0x2f3a, 0x2f3b, 0x2f3c, 0x2f3d, 0x2f3e, 0x2f3f, + 0x2f40, 0x2f41, 0x2f42, 0x2f43, 0x2f44, 0x2f45, 0x2f46, 0x2f47, + 0x2f48, 0x2f49, 0x2f4a, 0x2f4b, 0x7a21, 0x2c76, 0x7a23, 0x2f7c, + 0x7a38, 0x2c22, 0x7a2e, 0x7a2c, 0x2e23, 0x2e24, 0x7a2d, 0x2e25, + 0x2c23, 0x7a2f, 0x7a31, 0x7a30, 0x2e26, 0x7a3e, 0x7a32, 0x7a33, + 0x7a36, 0x2c24, 0x7a35, 0x7a34, 0x7a37, 0x2c79, 0x2e28, 0x2e27, + 0x2c25, 0x2c7a, 0x7a2b, 0x7a29, 0x7a2a, 0x2e2b, 0x7a39, 0x2e2a, + 0x7a3c, 0x7a3d, 0x7e5b, 0x7a3f, 0x2c7b, 0x7a40, 0x7a41, 0x7a42, + 0x7a43, 0x2d53, 0x7a44, 0x2e29, 0x7a28, 0x2e21, 0x2c21, 0x7a45, + 0x7a46, 0x7a60, 0x7a61, 0x7a62, 0x7a64, 0x2c7d, 0x7a63, 0x2f7d, + 0x2c38, 0x2d5e, 0x2c39, 0x2c3a, 0x2c3b, 0x7a65, 0x7a66, 0x7a5b, + 0x7a67, 0x7a68, 0x7a69, 0x7a48, 0x7a47, 0x2d5d, 0x2e2d, 0x2e2f, + 0x2e2e, 0x7a4b, 0x7a4a, 0x7a49, 0x7a4c, 0x7a4d, 0x2e30, 0x7a50, + 0x2f69, 0x7a51, 0x7a4f, 0x7a4e, 0x7a52, 0x7a56, 0x2f68, 0x7a53, + 0x7a54, 0x7a55, 0x2c31, 0x7a57, 0x2e32, 0x2e31, 0x2e33, 0x7a59, + 0x7a58, 0x2e34, 0x7a5a, 0x7b26, 0x7a3a, 0x7a25, 0x7a5c, 0x7a5d, + 0x7a5e, 0x2d66, 0x2c3f, 0x7b36, 0x2c40, 0x2e3e, 0x2c41, 0x2e3f, + 0x7b39, 0x7b37, 0x2e40, 0x7b38, 0x7b3a, 0x7b3b, 0x2d67, 0x2e41, + 0x7b3c, 0x7b3d, 0x7b3e, 0x7e59, 0x7b3f, 0x7b33, 0x7b32, 0x2d61, + 0x7a5f, 0x2e35, 0x7b34, 0x2e39, 0x7a6e, 0x7a6f, 0x7a71, 0x7a70, + 0x7a72, 0x2e3a, 0x7a73, 0x7a74, 0x7a75, 0x7c2e, 0x7a76, 0x7a78, + 0x7a77, 0x2f70, 0x7a7a, 0x2d63, 0x2d64, 0x7a79, 0x2c3c, 0x7a7b, + 0x7a7c, 0x7a7d, 0x7b21, 0x7a7e, 0x7b22, 0x7b23, 0x2d65, 0x2d62, + 0x7a6a, 0x7a6b, 0x7a6c, 0x7a6d, 0x2c2f, 0x7b2a, 0x2d5b, 0x7b2b, + 0x2c34, 0x2e36, 0x2e37, 0x2e38, 0x7b35, 0x2e3d, 0x7c32, 0x2e3c, + 0x2e3b, 0x7b25, 0x7c65, 0x2d5a, 0x7c68, 0x7c66, 0x7c67, 0x7c69, + 0x7c6a, 0x2e5a, 0x2c2e, 0x2c47, 0x7c64, 0x2c48, 0x7c48, 0x7c47, + 0x7c49, 0x2c35, 0x7c4b, 0x7c4a, 0x7c4c, 0x7c4d, 0x2f6f, 0x7c4e, + 0x7c46, 0x7c4f, 0x7c51, 0x7c50, 0x2e51, 0x2e52, 0x2c36, 0x7c52, + 0x7c36, 0x7c37, 0x2d69, 0x7c63, 0x2d4e, 0x7b27, 0x2d7e, 0x7c39, + 0x7c3a, 0x2d70, 0x7c3b, 0x7c3c, 0x7c3e, 0x7c3d, 0x2e4d, 0x7c3f, + 0x2d72, 0x7c41, 0x7c40, 0x2d71, 0x7c53, 0x7c54, 0x7a22, 0x7b63, + 0x2c4f, 0x7b65, 0x2e48, 0x7b64, 0x7b66, 0x7b67, 0x7b6a, 0x7b6b, + 0x7b68, 0x7b6c, 0x2e49, 0x7b6f, 0x7b69, 0x7b70, 0x7b6d, 0x2d6f, + 0x7b71, 0x7e79, 0x7b74, 0x7b76, 0x7b79, 0x7b72, 0x7b77, 0x2e4a, + 0x7b6e, 0x7b75, 0x7b73, 0x2d6d, 0x7b78, 0x7c22, 0x7b7c, 0x7c23, + 0x7b7e, 0x7c21, 0x7b7b, 0x7b7d, 0x7d52, 0x7c5a, 0x7c24, 0x7b7a, + 0x7c25, 0x7c26, 0x7c27, 0x7c29, 0x2e4b, 0x7c28, 0x2d6e, 0x7c2a, + 0x7c2b, 0x7c2c, 0x2c50, 0x2c5a, 0x2e55, 0x7c31, 0x2c52, 0x7a3b, + 0x2e53, 0x2d73, 0x2f6a, 0x7c6b, 0x7c6c, 0x7c6f, 0x7c6d, 0x2e5b, + 0x2d54, 0x2c27, 0x7c6e, 0x7c70, 0x7c72, 0x2c29, 0x7c71, 0x2c28, + 0x7c75, 0x7c77, 0x2f6b, 0x7c79, 0x7c74, 0x7c76, 0x2d55, 0x7c73, + 0x7c78, 0x7c7a, 0x7c7e, 0x7c7b, 0x7d21, 0x7c7d, 0x7c7c, 0x2e5c, + 0x7d22, 0x2d56, 0x7d24, 0x2c2a, 0x2d57, 0x7d25, 0x2e5d, 0x7d27, + 0x7d28, 0x7d23, 0x7d26, 0x2c2b, 0x2e5e, 0x7d2a, 0x7d29, 0x7d2c, + 0x2f6c, 0x7d2d, 0x2c2c, 0x7c38, 0x7d2b, 0x7d2e, 0x7d30, 0x7d2f, + 0x2d58, 0x2e5f, 0x2e60, 0x2c2d, 0x7d31, 0x7d32, 0x2d59, 0x7d35, + 0x7d34, 0x7d33, 0x7d36, 0x2e57, 0x7c5b, 0x2d6a, 0x7c5c, 0x7c62, + 0x2e58, 0x7c5d, 0x7c5e, 0x7c5f, 0x2e59, 0x2f74, 0x2c51, 0x7c60, + 0x2c46, 0x2d6c, 0x7c61, 0x7b28, 0x7b29, 0x2c37, 0x7c44, 0x7c45, + 0x2f73, 0x2c57, 0x2c3d, 0x7c2d, 0x2e4c, 0x7e7a, 0x7c2f, 0x7c30, + 0x2e42, 0x7b47, 0x7b48, 0x2c4a, 0x7b49, 0x7b4b, 0x7b4c, 0x7b4a, + 0x7b4d, 0x7b50, 0x2e43, 0x2e44, 0x7b4e, 0x7b54, 0x7b55, 0x7b4f, + 0x7b53, 0x7b52, 0x2e46, 0x7b51, 0x2c4b, 0x7b57, 0x7b56, 0x2e45, + 0x7b59, 0x7b58, 0x2e47, 0x7b5c, 0x7b5a, 0x7b5b, 0x7b5d, 0x2c4c, + 0x7b60, 0x7b5e, 0x7b5f, 0x2c4d, 0x7b61, 0x2c4e, 0x7c34, 0x7c35, + 0x7d57, 0x2c75, 0x7a24, 0x2d6b, 0x7d50, 0x2f77, 0x7d51, 0x7d6b, + 0x2e6a, 0x2f78, 0x7d6c, 0x7d6d, 0x7d6e, 0x2d74, 0x2e6c, 0x7d5a, + 0x7d5b, 0x7d54, 0x7d55, 0x2d76, 0x7d56, 0x7d4a, 0x2c5f, 0x7d4b, + 0x7d4c, 0x7d4d, 0x2d75, 0x7d4e, 0x7d4f, 0x7d75, 0x7d40, 0x7d3f, + 0x2e63, 0x7d42, 0x7d41, 0x7d43, 0x2e64, 0x7d44, 0x7d45, 0x2e65, + 0x7d46, 0x2e66, 0x7d47, 0x2e67, 0x7d48, 0x2e61, 0x7d37, 0x7d38, + 0x7d39, 0x2e62, 0x7d3a, 0x7d3b, 0x2c49, 0x7d3c, 0x7d3d, 0x7d3e, + 0x2e22, 0x7d58, 0x2e68, 0x7d59, 0x2e69, 0x7d70, 0x7d71, 0x7d72, + 0x7d73, 0x7d74, 0x7d6f, 0x2e6b, 0x7e25, 0x7e26, 0x2c69, 0x7e27, + 0x2d7a, 0x7e28, 0x7e29, 0x7e2b, 0x2e6e, 0x7e2d, 0x7e2a, 0x7e2c, + 0x7e2e, 0x2e6f, 0x2d7b, 0x2e70, 0x2f7b, 0x2e72, 0x2c33, 0x2c6c, + 0x7e54, 0x7e55, 0x2c42, 0x7e56, 0x7e57, 0x2c43, 0x2f72, 0x2c44, + 0x7e58, 0x2f71, 0x2e77, 0x7e24, 0x7d53, 0x7e36, 0x2e76, 0x2c6a, + 0x7e53, 0x2c6b, 0x7d76, 0x7e23, 0x7c33, 0x2c78, 0x2e54, 0x2c59, + 0x7c55, 0x7c56, 0x2f76, 0x2f75, 0x7e2f, 0x2e73, 0x7e37, 0x7e39, + 0x7e38, 0x7e3b, 0x7e3c, 0x7e3a, 0x7e40, 0x7e3f, 0x7e3e, 0x7e3d, + 0x7e42, 0x7e41, 0x2e74, 0x7e45, 0x7e43, 0x7e44, 0x7e46, 0x7e47, + 0x2c32, 0x2d60, 0x2d5f, 0x7e4a, 0x7e48, 0x7e4b, 0x2f6e, 0x7e49, + 0x2e75, 0x7e4c, 0x2f6d, 0x7e4d, 0x7e4f, 0x7e4e, 0x7e51, 0x7e52, + 0x7a27, 0x7d7b, 0x7d7c, 0x2c68, 0x7d7d, 0x2d78, 0x2c58, 0x7d7e, + 0x7e21, 0x7e22, 0x2d79, 0x7b24, 0x7e30, 0x2c5c, 0x7e31, 0x2c5d, + 0x7e32, 0x7e33, 0x7e34, 0x2c5e, 0x7e35, 0x2f7a, 0x2e4f, 0x2e50, + 0x2c7c, 0x7e71, 0x7b2e, 0x7d49, 0x2c77, 0x7e72, 0x7e73, 0x7e74, + 0x7e75, 0x7e76, 0x7e77, 0x7e5c, 0x7e5e, 0x7e5d, 0x7e70, 0x2e2c, + 0x7c42, 0x2e4e, 0x7c43, 0x2c55, 0x7e5a, 0x7e5f, 0x2e78, 0x7e60, + 0x7e61, 0x2c6e, 0x2c6d, 0x7e62, 0x2e79, 0x2c70, 0x2c6f, 0x2d7c, + 0x2c53, 0x2c54, 0x7e6e, 0x2d5c, 0x7e63, 0x7e64, 0x2f66, 0x7e65, + 0x7e67, 0x7e66, 0x7e68, 0x7e6f, 0x7e69, 0x7e6b, 0x2c26, 0x7e6a, + 0x2d50, 0x7e6c, 0x7e6d, 0x2f7e, 0x7e7d, 0x7e7e, 0x2d21, 0x2d22, + 0x2c7e, 0x2d23, 0x2d24, 0x2d25, 0x2c60, 0x2d26, 0x2e7c, 0x2d28, + 0x2d29, 0x2d2a, 0x2d27, 0x2d2b, 0x2d2c, 0x2c61, 0x2c62, 0x2d2d, + 0x2d2e, 0x2d7d, 0x7b2c, 0x7b2d, 0x7b2f, 0x7b30, 0x2c30, 0x7b31, + 0x2f67, 0x7e50, 0x7e78, 0x2e7a, 0x2d3e, 0x2c71, 0x2d3f, 0x2d40, + 0x2d42, 0x2d41, 0x7b62, 0x7d77, 0x7d78, 0x2e6d, 0x2d77, 0x7d79, + 0x7d7a, 0x7c57, 0x2c5b, 0x7c58, 0x2e56, 0x7c59, 0x2d43, 0x2d44, + 0x2d45, 0x2d46, 0x2d47, 0x2d48, 0x2d49, 0x2d4a, 0x2c3e, 0x2d4b, + 0x7b40, 0x7b41, 0x7b42, 0x7b43, 0x7b44, 0x2d68, 0x7b45, 0x2c45, + 0x7b46, 0x2d4c, 0x2d4d, 0x2f79, 0x2c56, 0x2c72, 0x2d2f, 0x2d30, + 0x2d31, 0x2d32, 0x2d33, 0x2d34, 0x2d35, 0x2d36, 0x2e71, 0x2d37, + 0x2d38, 0x2d39, 0x2d3a, 0x2d3b, 0x2d3c, 0x2d3d, 0x2c63, 0x7d5c, + 0x7d5d, 0x7d5e, 0x7d5f, 0x2c64, 0x7d60, 0x2c65, 0x7d61, 0x7d62, + 0x7d63, 0x7d64, 0x7d65, 0x2c66, 0x2c67, 0x7d66, 0x7d67, 0x7d68, + 0x7d69, 0x7d6a, 0x2d4f, 0x2d51, 0x7a26, 0x2e7b, 0x2d52, 0x2c73, + 0x2c74, 0x7e7b, 0x7e7c, 0x2b40, +}; + +static const Summary16 isoir165ext_uni2indx_page00[32] = { + /* 0x0000 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x3700 }, { 5, 0x160c }, + /* 0x0100 */ + { 10, 0x0000 }, { 10, 0x0808 }, { 12, 0x0800 }, { 13, 0x0000 }, + { 13, 0x2110 }, { 16, 0x0000 }, { 16, 0x0800 }, { 17, 0x0000 }, + { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, { 17, 0x0000 }, + { 17, 0x0000 }, { 17, 0x1555 }, { 24, 0x0000 }, { 24, 0x0200 }, +}; +static const Summary16 isoir165ext_uni2indx_page03[12] = { + /* 0x0300 */ + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, + { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x1000 }, { 26, 0x0002 }, +}; +static const Summary16 isoir165ext_uni2indx_page1e[28] = { + /* 0x1e00 */ + { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x0000 }, { 27, 0x8000 }, + { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, + { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, + { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, + /* 0x1f00 */ + { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, + { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0000 }, { 28, 0x0001 }, + { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0000 }, { 29, 0x0003 }, +}; +static const Summary16 isoir165ext_uni2indx_page30[4] = { + /* 0x3000 */ + { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0000 }, { 31, 0x0080 }, +}; +static const Summary16 isoir165ext_uni2indx_page32[32] = { + /* 0x3200 */ + { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, + { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, + { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, { 32, 0x0000 }, + { 32, 0x0fff }, { 44, 0x0000 }, { 44, 0x0000 }, { 44, 0x0000 }, + /* 0x3300 */ + { 44, 0x0000 }, { 44, 0x0000 }, { 44, 0x0000 }, { 44, 0x0000 }, + { 44, 0x0000 }, { 44, 0xff00 }, { 52, 0xffff }, { 68, 0x0001 }, + { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0x0000 }, + { 69, 0x0000 }, { 69, 0x0000 }, { 69, 0xffff }, { 85, 0x7fff }, +}; +static const Summary16 isoir165ext_uni2indx_page4e[752] = { + /* 0x4e00 */ + { 100, 0x8000 }, { 101, 0x0000 }, { 101, 0x0040 }, { 102, 0x0000 }, + { 102, 0x0004 }, { 103, 0x0000 }, { 103, 0x0000 }, { 103, 0x0000 }, + { 103, 0x0020 }, { 104, 0x0000 }, { 104, 0x0000 }, { 104, 0x0140 }, + { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, + /* 0x4f00 */ + { 106, 0x0808 }, { 108, 0x0020 }, { 109, 0x000a }, { 111, 0x4800 }, + { 113, 0x0000 }, { 113, 0x0000 }, { 113, 0x0802 }, { 115, 0x0400 }, + { 116, 0x0000 }, { 116, 0x0000 }, { 116, 0x0004 }, { 117, 0x0010 }, + { 118, 0x0000 }, { 118, 0x0000 }, { 118, 0x0800 }, { 119, 0x0060 }, + /* 0x5000 */ + { 121, 0x0000 }, { 121, 0x4000 }, { 122, 0x0004 }, { 123, 0x0010 }, + { 124, 0x0000 }, { 124, 0x0000 }, { 124, 0x0000 }, { 124, 0x0004 }, + { 125, 0x0000 }, { 125, 0x0006 }, { 127, 0x0010 }, { 128, 0x0000 }, + { 128, 0x2080 }, { 130, 0x0000 }, { 130, 0x0000 }, { 130, 0x0001 }, + /* 0x5100 */ + { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, + { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, + { 131, 0x8080 }, { 133, 0x0000 }, { 133, 0x4100 }, { 135, 0x0000 }, + { 135, 0x0008 }, { 136, 0x0000 }, { 136, 0x0000 }, { 136, 0x0000 }, + /* 0x5200 */ + { 136, 0x0000 }, { 136, 0x0000 }, { 136, 0x1000 }, { 137, 0x0004 }, + { 138, 0x0020 }, { 139, 0x0000 }, { 139, 0x0000 }, { 139, 0x0000 }, + { 139, 0x0000 }, { 139, 0x0100 }, { 140, 0x0000 }, { 140, 0x1a00 }, + { 143, 0x2000 }, { 144, 0x0400 }, { 145, 0x0000 }, { 145, 0x0088 }, + /* 0x5300 */ + { 147, 0x0400 }, { 148, 0x1000 }, { 149, 0x0000 }, { 149, 0x0000 }, + { 149, 0x0000 }, { 149, 0x0000 }, { 149, 0x0000 }, { 149, 0x0000 }, + { 149, 0x0000 }, { 149, 0x0001 }, { 150, 0x0000 }, { 150, 0x4000 }, + { 151, 0x00c0 }, { 153, 0x0000 }, { 153, 0x0000 }, { 153, 0x0000 }, + /* 0x5400 */ + { 153, 0x0000 }, { 153, 0x0000 }, { 153, 0x0000 }, { 153, 0x0000 }, + { 153, 0x0000 }, { 153, 0x0000 }, { 153, 0x0000 }, { 153, 0x0000 }, + { 153, 0x0000 }, { 153, 0x0000 }, { 153, 0x0020 }, { 154, 0x0000 }, + { 154, 0x0000 }, { 154, 0x0000 }, { 154, 0x0000 }, { 154, 0x0000 }, + /* 0x5500 */ + { 154, 0x0000 }, { 154, 0x2000 }, { 155, 0x0000 }, { 155, 0x0040 }, + { 156, 0x2000 }, { 157, 0x0080 }, { 158, 0x8000 }, { 159, 0x0011 }, + { 161, 0x0040 }, { 162, 0x0000 }, { 162, 0x0010 }, { 163, 0x0000 }, + { 163, 0x0000 }, { 163, 0x0000 }, { 163, 0x0000 }, { 163, 0x0000 }, + /* 0x5600 */ + { 163, 0x0000 }, { 163, 0x0000 }, { 163, 0x0000 }, { 163, 0x0000 }, + { 163, 0x0001 }, { 164, 0x0000 }, { 164, 0x0000 }, { 164, 0x0000 }, + { 164, 0x0010 }, { 165, 0x1400 }, { 167, 0x2000 }, { 168, 0x0000 }, + { 168, 0x0000 }, { 168, 0x0000 }, { 168, 0x0000 }, { 168, 0x0080 }, + /* 0x5700 */ + { 169, 0x0000 }, { 169, 0x0201 }, { 171, 0x0000 }, { 171, 0x0000 }, + { 171, 0x0000 }, { 171, 0x0000 }, { 171, 0x1000 }, { 172, 0x8001 }, + { 174, 0x0080 }, { 175, 0xc420 }, { 179, 0x0000 }, { 179, 0x4002 }, + { 181, 0x1000 }, { 182, 0x0000 }, { 182, 0x0800 }, { 183, 0x0020 }, + /* 0x5800 */ + { 184, 0x5208 }, { 188, 0x0000 }, { 188, 0x0000 }, { 188, 0x3000 }, + { 190, 0x016c }, { 195, 0x2408 }, { 198, 0x0000 }, { 198, 0x0002 }, + { 199, 0x0110 }, { 201, 0x0020 }, { 202, 0x0000 }, { 202, 0x0000 }, + { 202, 0x0000 }, { 202, 0x0000 }, { 202, 0x0000 }, { 202, 0x0100 }, + /* 0x5900 */ + { 203, 0x0040 }, { 204, 0x0001 }, { 205, 0x1000 }, { 206, 0x0000 }, + { 206, 0x0001 }, { 207, 0x0008 }, { 208, 0x2000 }, { 209, 0x0000 }, + { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0008 }, + { 210, 0x0000 }, { 210, 0x4000 }, { 211, 0x4000 }, { 212, 0x2000 }, + /* 0x5a00 */ + { 213, 0x0000 }, { 213, 0x0004 }, { 214, 0x0000 }, { 214, 0x0000 }, + { 214, 0x0000 }, { 214, 0x4000 }, { 215, 0x0020 }, { 216, 0x1008 }, + { 218, 0x0010 }, { 219, 0x4040 }, { 221, 0x6000 }, { 223, 0x0000 }, + { 223, 0x0010 }, { 224, 0x0400 }, { 225, 0x0400 }, { 226, 0x0000 }, + /* 0x5b00 */ + { 226, 0x0000 }, { 226, 0x0800 }, { 227, 0x0000 }, { 227, 0x0000 }, + { 227, 0x0008 }, { 228, 0x0040 }, { 229, 0x0000 }, { 229, 0x0000 }, + { 229, 0x0000 }, { 229, 0x0000 }, { 229, 0x1080 }, { 231, 0x0000 }, + { 231, 0x0000 }, { 231, 0x0000 }, { 231, 0x0000 }, { 231, 0x0000 }, + /* 0x5c00 */ + { 231, 0x0020 }, { 232, 0x0000 }, { 232, 0x0400 }, { 233, 0x0001 }, + { 234, 0x0000 }, { 234, 0x2000 }, { 235, 0x0000 }, { 235, 0x1014 }, + { 238, 0x0000 }, { 238, 0x4000 }, { 239, 0x0100 }, { 240, 0x0000 }, + { 240, 0x0088 }, { 242, 0x0008 }, { 243, 0x0088 }, { 245, 0x8002 }, + /* 0x5d00 */ + { 247, 0x1031 }, { 251, 0x8602 }, { 255, 0x0000 }, { 255, 0x0000 }, + { 255, 0x4000 }, { 256, 0x0400 }, { 257, 0x0000 }, { 257, 0x0000 }, + { 257, 0x0020 }, { 258, 0x000c }, { 260, 0x0000 }, { 260, 0x0000 }, + { 260, 0x0204 }, { 262, 0x0040 }, { 263, 0x0000 }, { 263, 0x0000 }, + /* 0x5e00 */ + { 263, 0x0800 }, { 264, 0x0080 }, { 265, 0x0102 }, { 267, 0x0000 }, + { 267, 0x0000 }, { 267, 0x0000 }, { 267, 0x0400 }, { 268, 0x0000 }, + { 268, 0x0000 }, { 268, 0x0000 }, { 268, 0x0010 }, { 269, 0x1000 }, + { 270, 0x0900 }, { 272, 0x0000 }, { 272, 0x0000 }, { 272, 0x0000 }, + /* 0x5f00 */ + { 272, 0x7080 }, { 276, 0x0000 }, { 276, 0x0004 }, { 277, 0x0000 }, + { 277, 0x0000 }, { 277, 0x8000 }, { 278, 0x0180 }, { 280, 0x0000 }, + { 280, 0x0000 }, { 280, 0x0000 }, { 280, 0x9000 }, { 282, 0x0000 }, + { 282, 0x0000 }, { 282, 0x0000 }, { 282, 0x0000 }, { 282, 0x0000 }, + /* 0x6000 */ + { 282, 0x0000 }, { 282, 0x0080 }, { 283, 0x0000 }, { 283, 0x0000 }, + { 283, 0x0000 }, { 283, 0x0000 }, { 283, 0x0000 }, { 283, 0x0000 }, + { 283, 0x0000 }, { 283, 0x0000 }, { 283, 0x4000 }, { 284, 0x0001 }, + { 285, 0x0080 }, { 286, 0x0208 }, { 288, 0x0000 }, { 288, 0x0000 }, + /* 0x6100 */ + { 288, 0x0000 }, { 288, 0x0010 }, { 289, 0x0000 }, { 289, 0x0000 }, + { 289, 0x0000 }, { 289, 0x0008 }, { 290, 0x0020 }, { 291, 0x0000 }, + { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, + { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, + /* 0x6200 */ + { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, { 291, 0x0000 }, + { 291, 0x0460 }, { 294, 0x0000 }, { 294, 0x0003 }, { 296, 0x0000 }, + { 296, 0x0008 }, { 297, 0x0010 }, { 298, 0x0000 }, { 298, 0x0000 }, + { 298, 0x0008 }, { 299, 0x0000 }, { 299, 0x0010 }, { 300, 0x0000 }, + /* 0x6300 */ + { 300, 0x0000 }, { 300, 0x1000 }, { 301, 0x0040 }, { 302, 0x1000 }, + { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x0000 }, + { 303, 0x0000 }, { 303, 0x0000 }, { 303, 0x8000 }, { 304, 0x0002 }, + { 305, 0x0000 }, { 305, 0x0000 }, { 305, 0x0000 }, { 305, 0x4000 }, + /* 0x6400 */ + { 306, 0x0000 }, { 306, 0x0004 }, { 307, 0x0084 }, { 309, 0x0000 }, + { 309, 0x0000 }, { 309, 0x0000 }, { 309, 0x0000 }, { 309, 0x2080 }, + { 311, 0x0000 }, { 311, 0x0000 }, { 311, 0x0000 }, { 311, 0x0000 }, + { 311, 0x0000 }, { 311, 0x0000 }, { 311, 0x2000 }, { 312, 0x0000 }, + /* 0x6500 */ + { 312, 0x0000 }, { 312, 0x0000 }, { 312, 0x0000 }, { 312, 0x0000 }, + { 312, 0x0000 }, { 312, 0x1000 }, { 313, 0x0200 }, { 314, 0x0000 }, + { 314, 0x8000 }, { 315, 0x2000 }, { 316, 0x0104 }, { 318, 0x0000 }, + { 318, 0x0004 }, { 319, 0x0000 }, { 319, 0x0000 }, { 319, 0x0900 }, + /* 0x6600 */ + { 321, 0x0280 }, { 323, 0x0000 }, { 323, 0x0000 }, { 323, 0x2000 }, + { 324, 0x0000 }, { 324, 0x4000 }, { 325, 0x1084 }, { 328, 0x0008 }, + { 329, 0x6800 }, { 332, 0x0000 }, { 332, 0x0000 }, { 332, 0x0000 }, + { 332, 0x0000 }, { 332, 0x0000 }, { 332, 0x0000 }, { 332, 0x0000 }, + /* 0x6700 */ + { 332, 0x0000 }, { 332, 0x0108 }, { 334, 0x0000 }, { 334, 0x8000 }, + { 335, 0x0020 }, { 336, 0x0000 }, { 336, 0x0080 }, { 337, 0x0800 }, + { 338, 0x0000 }, { 338, 0x8200 }, { 340, 0x0000 }, { 340, 0x0000 }, + { 340, 0x0100 }, { 341, 0x0000 }, { 341, 0x4000 }, { 342, 0x0000 }, + /* 0x6800 */ + { 342, 0x0000 }, { 342, 0x8004 }, { 344, 0x0000 }, { 344, 0x0000 }, + { 344, 0x0800 }, { 345, 0x0000 }, { 345, 0x9400 }, { 348, 0x0000 }, + { 348, 0x0000 }, { 348, 0x0000 }, { 348, 0x0001 }, { 349, 0x9002 }, + { 352, 0x0002 }, { 353, 0x000b }, { 356, 0x1900 }, { 359, 0x0900 }, + /* 0x6900 */ + { 361, 0x0000 }, { 361, 0x200a }, { 364, 0x0800 }, { 365, 0x0020 }, + { 366, 0x0001 }, { 367, 0x8200 }, { 369, 0x8204 }, { 372, 0x0000 }, + { 372, 0x0008 }, { 373, 0x0040 }, { 374, 0x0000 }, { 374, 0x5000 }, + { 376, 0x0020 }, { 377, 0x1400 }, { 379, 0x0020 }, { 380, 0x4000 }, + /* 0x6a00 */ + { 381, 0x0800 }, { 382, 0x0002 }, { 383, 0x0000 }, { 383, 0x0000 }, + { 383, 0x0000 }, { 383, 0x0000 }, { 383, 0x0040 }, { 384, 0x0000 }, + { 384, 0x0000 }, { 384, 0x0040 }, { 385, 0x0000 }, { 385, 0x0030 }, + { 387, 0x0000 }, { 387, 0x0000 }, { 387, 0x0000 }, { 387, 0x0000 }, + /* 0x6b00 */ + { 387, 0x0000 }, { 387, 0x0000 }, { 387, 0x0000 }, { 387, 0x0100 }, + { 388, 0x0000 }, { 388, 0x0010 }, { 389, 0x0000 }, { 389, 0x0000 }, + { 389, 0x0000 }, { 389, 0x0020 }, { 390, 0x0008 }, { 391, 0x0000 }, + { 391, 0x0000 }, { 391, 0x0400 }, { 392, 0x0000 }, { 392, 0x0000 }, + /* 0x6c00 */ + { 392, 0x0000 }, { 392, 0x2000 }, { 393, 0x0020 }, { 394, 0xc000 }, + { 396, 0x0000 }, { 396, 0x0000 }, { 396, 0x2080 }, { 398, 0x0000 }, + { 398, 0x0090 }, { 400, 0x0540 }, { 403, 0x0100 }, { 404, 0x0020 }, + { 405, 0x0048 }, { 407, 0x1000 }, { 408, 0x0000 }, { 408, 0x0000 }, + /* 0x6d00 */ + { 408, 0x0000 }, { 408, 0x0002 }, { 409, 0x0300 }, { 411, 0x0510 }, + { 414, 0x0210 }, { 416, 0x0821 }, { 419, 0x0032 }, { 422, 0x0000 }, + { 422, 0x0000 }, { 422, 0x0000 }, { 422, 0x2004 }, { 424, 0x0010 }, + { 425, 0x0000 }, { 425, 0x0000 }, { 425, 0x0000 }, { 425, 0x0000 }, + /* 0x6e00 */ + { 425, 0x0000 }, { 425, 0x0800 }, { 426, 0x0000 }, { 426, 0x0000 }, + { 426, 0x0000 }, { 426, 0x3000 }, { 428, 0x0080 }, { 429, 0x0004 }, + { 430, 0x4082 }, { 433, 0x0400 }, { 434, 0x0041 }, { 436, 0x0020 }, + { 437, 0x0208 }, { 439, 0x0100 }, { 440, 0x0c80 }, { 443, 0x0000 }, + /* 0x6f00 */ + { 443, 0x0000 }, { 443, 0x0000 }, { 443, 0x0040 }, { 444, 0x0080 }, + { 445, 0x0000 }, { 445, 0x8040 }, { 447, 0x0000 }, { 447, 0x0020 }, + { 448, 0x0004 }, { 449, 0x0810 }, { 451, 0x0020 }, { 452, 0x1010 }, + { 454, 0x0000 }, { 454, 0x0000 }, { 454, 0x1000 }, { 455, 0x0000 }, + /* 0x7000 */ + { 455, 0x3000 }, { 457, 0x0010 }, { 458, 0x0000 }, { 458, 0x1000 }, + { 459, 0x0000 }, { 459, 0x0000 }, { 459, 0x0000 }, { 459, 0x0400 }, + { 460, 0x0000 }, { 460, 0x4100 }, { 462, 0x0000 }, { 462, 0x0000 }, + { 462, 0x0000 }, { 462, 0x3000 }, { 464, 0x0000 }, { 464, 0x0402 }, + /* 0x7100 */ + { 466, 0x1000 }, { 467, 0x1000 }, { 468, 0x4001 }, { 470, 0x0000 }, + { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, + { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, { 470, 0x0000 }, + { 470, 0x8c00 }, { 473, 0x0000 }, { 473, 0x0000 }, { 473, 0x8000 }, + /* 0x7200 */ + { 474, 0x0000 }, { 474, 0x8000 }, { 475, 0x0000 }, { 475, 0x0000 }, + { 475, 0x0006 }, { 477, 0x0400 }, { 478, 0x0008 }, { 479, 0x0080 }, + { 480, 0x0080 }, { 481, 0x0000 }, { 481, 0x0100 }, { 482, 0x0000 }, + { 482, 0x0200 }, { 483, 0x2000 }, { 484, 0x0004 }, { 485, 0x0000 }, + /* 0x7300 */ + { 485, 0x0040 }, { 486, 0x0010 }, { 487, 0x0000 }, { 487, 0x0400 }, + { 488, 0x0000 }, { 488, 0x0000 }, { 488, 0x0000 }, { 488, 0x0000 }, + { 488, 0x0000 }, { 488, 0x0630 }, { 492, 0x0061 }, { 495, 0x0002 }, + { 496, 0x0000 }, { 496, 0x0040 }, { 497, 0x4408 }, { 500, 0x2441 }, + /* 0x7400 */ + { 504, 0x4080 }, { 506, 0x0020 }, { 507, 0x8810 }, { 510, 0x0084 }, + { 512, 0x0014 }, { 514, 0x0010 }, { 515, 0x0004 }, { 516, 0x0102 }, + { 518, 0x0140 }, { 520, 0x8100 }, { 522, 0x0401 }, { 524, 0x0004 }, + { 525, 0x0000 }, { 525, 0x0100 }, { 526, 0x0000 }, { 526, 0x0800 }, + /* 0x7500 */ + { 527, 0x0008 }, { 528, 0x0000 }, { 528, 0x0442 }, { 531, 0x0000 }, + { 531, 0x0000 }, { 531, 0x0002 }, { 532, 0x9010 }, { 535, 0x0000 }, + { 535, 0x0000 }, { 535, 0x0000 }, { 535, 0x0004 }, { 536, 0x0000 }, + { 536, 0x0000 }, { 536, 0x0000 }, { 536, 0x0001 }, { 537, 0x0008 }, + /* 0x7600 */ + { 538, 0x0110 }, { 540, 0x2000 }, { 541, 0x0000 }, { 541, 0x0000 }, + { 541, 0x0000 }, { 541, 0x0004 }, { 542, 0x0000 }, { 542, 0x8040 }, + { 544, 0x0000 }, { 544, 0x4000 }, { 545, 0x0000 }, { 545, 0x0000 }, + { 545, 0x0000 }, { 545, 0x2000 }, { 546, 0x1440 }, { 549, 0x0800 }, + /* 0x7700 */ + { 550, 0x0400 }, { 551, 0x0800 }, { 552, 0x1000 }, { 553, 0x0000 }, + { 553, 0x0000 }, { 553, 0x0000 }, { 553, 0x0000 }, { 553, 0x0000 }, + { 553, 0x0840 }, { 555, 0x0000 }, { 555, 0x2800 }, { 557, 0x0000 }, + { 557, 0x0000 }, { 557, 0x4000 }, { 558, 0x0000 }, { 558, 0x1800 }, + /* 0x7800 */ + { 560, 0x0040 }, { 561, 0x0000 }, { 561, 0x0005 }, { 563, 0x0000 }, + { 563, 0x0002 }, { 564, 0x0600 }, { 566, 0x0000 }, { 566, 0x0020 }, + { 567, 0x0000 }, { 567, 0x0010 }, { 568, 0x0000 }, { 568, 0x0040 }, + { 569, 0x0000 }, { 569, 0x1000 }, { 570, 0x0002 }, { 571, 0x0000 }, + /* 0x7900 */ + { 571, 0x0008 }, { 572, 0x0000 }, { 572, 0x0000 }, { 572, 0x2008 }, + { 574, 0x4488 }, { 578, 0x0001 }, { 579, 0x0000 }, { 579, 0x1004 }, + { 581, 0x0000 }, { 581, 0x0100 }, { 582, 0x0011 }, { 584, 0x0100 }, + { 585, 0x0000 }, { 585, 0x0000 }, { 585, 0x0000 }, { 585, 0x4000 }, + /* 0x7a00 */ + { 586, 0x0000 }, { 586, 0x0040 }, { 587, 0x0000 }, { 587, 0x0000 }, + { 587, 0x0010 }, { 588, 0x4000 }, { 589, 0x0000 }, { 589, 0x0000 }, + { 589, 0x4020 }, { 591, 0x0000 }, { 591, 0x0008 }, { 592, 0x4100 }, + { 594, 0x0000 }, { 594, 0x1002 }, { 596, 0x0000 }, { 596, 0x0000 }, + /* 0x7b00 */ + { 596, 0x0000 }, { 596, 0x0000 }, { 596, 0x0000 }, { 596, 0x0000 }, + { 596, 0x4400 }, { 598, 0x1000 }, { 599, 0x0000 }, { 599, 0x8000 }, + { 600, 0x0080 }, { 601, 0x0008 }, { 602, 0x0000 }, { 602, 0x0000 }, + { 602, 0x0000 }, { 602, 0x0000 }, { 602, 0x8000 }, { 603, 0x0005 }, + /* 0x7c00 */ + { 605, 0x0208 }, { 607, 0x0020 }, { 608, 0x0001 }, { 609, 0x0001 }, + { 610, 0x0000 }, { 610, 0x2001 }, { 612, 0x0000 }, { 612, 0x0000 }, + { 612, 0x0000 }, { 612, 0x0000 }, { 612, 0x1040 }, { 614, 0x0000 }, + { 614, 0x0000 }, { 614, 0x0000 }, { 614, 0x0000 }, { 614, 0x0020 }, +}; +static const Summary16 isoir165ext_uni2indx_page7e[333] = { + /* 0x7e00 */ + { 615, 0x0000 }, { 615, 0x0000 }, { 615, 0x0000 }, { 615, 0x0000 }, + { 615, 0x0010 }, { 616, 0x0000 }, { 616, 0x0000 }, { 616, 0x0000 }, + { 616, 0x0000 }, { 616, 0x0000 }, { 616, 0x4000 }, { 617, 0x1810 }, + { 620, 0x0000 }, { 620, 0x0040 }, { 621, 0x1010 }, { 623, 0x0200 }, + /* 0x7f00 */ + { 624, 0x0400 }, { 625, 0x4001 }, { 627, 0x0000 }, { 627, 0x0000 }, + { 627, 0x2000 }, { 628, 0x0000 }, { 628, 0x0000 }, { 628, 0x2000 }, + { 629, 0x0000 }, { 629, 0x0002 }, { 630, 0x0000 }, { 630, 0x0000 }, + { 630, 0x0001 }, { 631, 0x0600 }, { 633, 0x8000 }, { 634, 0x0000 }, + /* 0x8000 */ + { 634, 0x0000 }, { 634, 0x0000 }, { 634, 0x0000 }, { 634, 0x0001 }, + { 635, 0x0000 }, { 635, 0x0000 }, { 635, 0x0000 }, { 635, 0x0000 }, + { 635, 0x0000 }, { 635, 0x0000 }, { 635, 0x0000 }, { 635, 0x0000 }, + { 635, 0x0000 }, { 635, 0x0010 }, { 636, 0x0000 }, { 636, 0x4000 }, + /* 0x8100 */ + { 637, 0x0000 }, { 637, 0x0000 }, { 637, 0x0200 }, { 638, 0x8000 }, + { 639, 0x0000 }, { 639, 0x0104 }, { 641, 0x0000 }, { 641, 0x0000 }, + { 641, 0x0000 }, { 641, 0x0000 }, { 641, 0x0000 }, { 641, 0x0000 }, + { 641, 0x0000 }, { 641, 0x0002 }, { 642, 0x0000 }, { 642, 0x0000 }, + /* 0x8200 */ + { 642, 0x0000 }, { 642, 0x0140 }, { 644, 0x0000 }, { 644, 0x0400 }, + { 645, 0x0000 }, { 645, 0x0000 }, { 645, 0x0000 }, { 645, 0x0100 }, + { 646, 0x0008 }, { 647, 0x0000 }, { 647, 0x0080 }, { 648, 0x1000 }, + { 649, 0x0000 }, { 649, 0x0000 }, { 649, 0x0000 }, { 649, 0x4000 }, + /* 0x8300 */ + { 650, 0x0001 }, { 651, 0x2008 }, { 653, 0x0000 }, { 653, 0x0000 }, + { 653, 0x0030 }, { 655, 0x2000 }, { 656, 0x0000 }, { 656, 0x0000 }, + { 656, 0x0000 }, { 656, 0x0200 }, { 657, 0x0040 }, { 658, 0x0000 }, + { 658, 0x0000 }, { 658, 0x0002 }, { 659, 0x0000 }, { 659, 0x5000 }, + /* 0x8400 */ + { 661, 0x0000 }, { 661, 0x0400 }, { 662, 0x0200 }, { 663, 0x0200 }, + { 664, 0x0000 }, { 664, 0x0008 }, { 665, 0x0001 }, { 666, 0x0000 }, + { 666, 0x0000 }, { 666, 0xc000 }, { 668, 0x0100 }, { 669, 0x0000 }, + { 669, 0x8044 }, { 672, 0x0000 }, { 672, 0x0400 }, { 673, 0x0080 }, + /* 0x8500 */ + { 674, 0x0000 }, { 674, 0x0000 }, { 674, 0x0000 }, { 674, 0x0010 }, + { 675, 0x0000 }, { 675, 0x0000 }, { 675, 0x0000 }, { 675, 0x0001 }, + { 676, 0x0000 }, { 676, 0x0000 }, { 676, 0x0004 }, { 677, 0x0108 }, + { 679, 0x0000 }, { 679, 0x0000 }, { 679, 0x0001 }, { 680, 0x0000 }, + /* 0x8600 */ + { 680, 0x0000 }, { 680, 0x0000 }, { 680, 0x0000 }, { 680, 0x0000 }, + { 680, 0x0000 }, { 680, 0x0004 }, { 681, 0x0000 }, { 681, 0x0000 }, + { 681, 0x0008 }, { 682, 0x0000 }, { 682, 0x0000 }, { 682, 0x0000 }, + { 682, 0x0000 }, { 682, 0x0000 }, { 682, 0x0000 }, { 682, 0x0000 }, + /* 0x8700 */ + { 682, 0x4020 }, { 684, 0x0000 }, { 684, 0x0000 }, { 684, 0x0000 }, + { 684, 0x0000 }, { 684, 0x0100 }, { 685, 0x0000 }, { 685, 0x0000 }, + { 685, 0x0001 }, { 686, 0x0000 }, { 686, 0x0008 }, { 687, 0x0000 }, + { 687, 0x8000 }, { 688, 0x0000 }, { 688, 0x0004 }, { 689, 0x0000 }, + /* 0x8800 */ + { 689, 0x0800 }, { 690, 0x0000 }, { 690, 0x2000 }, { 691, 0x0000 }, + { 691, 0x0000 }, { 691, 0x0004 }, { 692, 0x0000 }, { 692, 0x0000 }, + { 692, 0x0040 }, { 693, 0x0080 }, { 694, 0x8400 }, { 696, 0x0000 }, + { 696, 0x0101 }, { 698, 0x0000 }, { 698, 0x0000 }, { 698, 0x0000 }, + /* 0x8900 */ + { 698, 0x0000 }, { 698, 0x0000 }, { 698, 0x0040 }, { 699, 0x0000 }, + { 699, 0x0000 }, { 699, 0x0020 }, { 700, 0x0000 }, { 700, 0x0040 }, + { 701, 0x0001 }, { 702, 0x0000 }, { 702, 0x0000 }, { 702, 0x0000 }, + { 702, 0x2008 }, { 704, 0x0010 }, { 705, 0x0000 }, { 705, 0x0002 }, + /* 0x8a00 */ + { 706, 0x0000 }, { 706, 0x0400 }, { 707, 0x0000 }, { 707, 0x0000 }, + { 707, 0x0000 }, { 707, 0x8000 }, { 708, 0x0000 }, { 708, 0x0000 }, + { 708, 0x0000 }, { 708, 0x0000 }, { 708, 0x0000 }, { 708, 0x0000 }, + { 708, 0x0000 }, { 708, 0x0000 }, { 708, 0x0000 }, { 708, 0x0000 }, + /* 0x8b00 */ + { 708, 0x0000 }, { 708, 0x0000 }, { 708, 0x0000 }, { 708, 0x0000 }, + { 708, 0x0000 }, { 708, 0x0000 }, { 708, 0x0000 }, { 708, 0x0000 }, + { 708, 0x0000 }, { 708, 0x0000 }, { 708, 0x1000 }, { 709, 0x0802 }, + { 711, 0x0080 }, { 712, 0x0000 }, { 712, 0x0400 }, { 713, 0x0000 }, + /* 0x8c00 */ + { 713, 0x0200 }, { 714, 0x4000 }, { 715, 0x0000 }, { 715, 0x0000 }, + { 715, 0x0000 }, { 715, 0x0000 }, { 715, 0x6100 }, { 718, 0x0000 }, + { 718, 0x0040 }, { 719, 0x0000 }, { 719, 0x0000 }, { 719, 0x0000 }, + { 719, 0x0000 }, { 719, 0x0000 }, { 719, 0x0000 }, { 719, 0x0000 }, + /* 0x8d00 */ + { 719, 0x0000 }, { 719, 0x0000 }, { 719, 0x0001 }, { 720, 0x0000 }, + { 720, 0x0000 }, { 720, 0x8086 }, { 724, 0x0400 }, { 725, 0x0000 }, + { 725, 0x0000 }, { 725, 0x0000 }, { 725, 0x0000 }, { 725, 0x0000 }, + { 725, 0x0000 }, { 725, 0x0000 }, { 725, 0x0000 }, { 725, 0x0000 }, + /* 0x8e00 */ + { 725, 0x0000 }, { 725, 0x0040 }, { 726, 0x00c2 }, { 729, 0x0040 }, + { 730, 0x0020 }, { 731, 0x1009 }, { 734, 0x0004 }, { 735, 0x0000 }, + { 735, 0x0000 }, { 735, 0x0000 }, { 735, 0x2000 }, { 736, 0x0000 }, + { 736, 0x0000 }, { 736, 0x0000 }, { 736, 0x0000 }, { 736, 0x0000 }, + /* 0x8f00 */ + { 736, 0x0000 }, { 736, 0x0000 }, { 736, 0x0000 }, { 736, 0x0000 }, + { 736, 0x0000 }, { 736, 0x0000 }, { 736, 0x0000 }, { 736, 0x0000 }, + { 736, 0x0001 }, { 737, 0x0004 }, { 738, 0x0000 }, { 738, 0x0020 }, + { 739, 0x0000 }, { 739, 0x0000 }, { 739, 0x0000 }, { 739, 0x0400 }, + /* 0x9000 */ + { 740, 0x0000 }, { 740, 0x0000 }, { 740, 0x0000 }, { 740, 0x0000 }, + { 740, 0x0000 }, { 740, 0x0000 }, { 740, 0x0000 }, { 740, 0x0000 }, + { 740, 0x0000 }, { 740, 0x0100 }, { 741, 0x0101 }, { 743, 0x2000 }, + { 744, 0x0108 }, { 746, 0x0400 }, { 747, 0x0010 }, { 748, 0x8000 }, + /* 0x9100 */ + { 749, 0x1000 }, { 750, 0x1500 }, { 753, 0x0001 }, { 754, 0x0000 }, + { 754, 0x0004 }, { 755, 0x0000 }, { 755, 0x0000 }, { 755, 0x0000 }, + { 755, 0x0000 }, { 755, 0x0000 }, { 755, 0x0000 }, { 755, 0x0000 }, + { 755, 0x0040 }, { 756, 0x0000 }, { 756, 0x0000 }, { 756, 0x0000 }, + /* 0x9200 */ + { 756, 0x0000 }, { 756, 0x0000 }, { 756, 0x0000 }, { 756, 0x0000 }, + { 756, 0x0000 }, { 756, 0x0000 }, { 756, 0x0000 }, { 756, 0x0000 }, + { 756, 0x0000 }, { 756, 0x0000 }, { 756, 0x0000 }, { 756, 0x0000 }, + { 756, 0x0040 }, +}; +static const Summary16 isoir165ext_uni2indx_page94[143] = { + /* 0x9400 */ + { 757, 0x0000 }, { 757, 0x0000 }, { 757, 0x0000 }, { 757, 0x0000 }, + { 757, 0x0000 }, { 757, 0x0000 }, { 757, 0x0000 }, { 757, 0x0000 }, + { 757, 0x0000 }, { 757, 0x0142 }, { 760, 0x0000 }, { 760, 0x0000 }, + { 760, 0x8080 }, { 762, 0x0418 }, { 765, 0x0040 }, { 766, 0x0800 }, + /* 0x9500 */ + { 767, 0x0000 }, { 767, 0x1000 }, { 768, 0x0081 }, { 770, 0x2008 }, + { 772, 0x0008 }, { 773, 0x0400 }, { 774, 0x4001 }, { 776, 0x0030 }, + { 778, 0x0000 }, { 778, 0x0000 }, { 778, 0x0000 }, { 778, 0x0000 }, + { 778, 0x0000 }, { 778, 0x0000 }, { 778, 0x1000 }, { 779, 0x8000 }, + /* 0x9600 */ + { 780, 0x0080 }, { 781, 0x0908 }, { 784, 0x0000 }, { 784, 0x0000 }, + { 784, 0x0000 }, { 784, 0x4000 }, { 785, 0x0000 }, { 785, 0x0000 }, + { 785, 0x0000 }, { 785, 0x0000 }, { 785, 0x0000 }, { 785, 0x0000 }, + { 785, 0x0000 }, { 785, 0x0100 }, { 786, 0x0000 }, { 786, 0x0000 }, + /* 0x9700 */ + { 786, 0x0004 }, { 787, 0x0000 }, { 787, 0x0000 }, { 787, 0x0000 }, + { 787, 0x0000 }, { 787, 0x0010 }, { 788, 0x0000 }, { 788, 0x0501 }, + { 791, 0x0000 }, { 791, 0x0000 }, { 791, 0x4102 }, { 794, 0x0000 }, + { 794, 0x0000 }, { 794, 0x0000 }, { 794, 0x0100 }, { 795, 0x0000 }, + /* 0x9800 */ + { 795, 0x0000 }, { 795, 0x0000 }, { 795, 0x0000 }, { 795, 0x0000 }, + { 795, 0x0000 }, { 795, 0x0000 }, { 795, 0x0000 }, { 795, 0x0000 }, + { 795, 0x4800 }, { 797, 0x0224 }, { 800, 0x0008 }, { 801, 0x0000 }, + { 801, 0x8000 }, { 802, 0x00d1 }, { 806, 0x0000 }, { 806, 0x0000 }, + /* 0x9900 */ + { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, + { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0050 }, { 808, 0x4b00 }, + { 812, 0x500c }, { 816, 0x0000 }, { 816, 0x0000 }, { 816, 0x0000 }, + { 816, 0x0000 }, { 816, 0x0000 }, { 816, 0x0000 }, { 816, 0x0000 }, + /* 0x9a00 */ + { 816, 0x0000 }, { 816, 0x0000 }, { 816, 0x0000 }, { 816, 0x0000 }, + { 816, 0x0000 }, { 816, 0x0000 }, { 816, 0x0000 }, { 816, 0x0004 }, + { 817, 0x6208 }, { 821, 0x0230 }, { 824, 0x0040 }, { 825, 0x0000 }, + { 825, 0x0000 }, { 825, 0x0000 }, { 825, 0x0000 }, { 825, 0x0000 }, + /* 0x9b00 */ + { 825, 0x0000 }, { 825, 0x0101 }, { 827, 0x0020 }, { 828, 0x0040 }, + { 829, 0x0040 }, { 830, 0x0000 }, { 830, 0x0000 }, { 830, 0x0000 }, + { 830, 0x0000 }, { 830, 0x0000 }, { 830, 0x0000 }, { 830, 0x0000 }, + { 830, 0x0000 }, { 830, 0x0000 }, { 830, 0x0000 }, { 830, 0x0000 }, + /* 0x9c00 */ + { 830, 0x0000 }, { 830, 0x0000 }, { 830, 0x0000 }, { 830, 0x0000 }, + { 830, 0x0000 }, { 830, 0x0000 }, { 830, 0x0000 }, { 830, 0x0000 }, + { 830, 0x0411 }, { 833, 0x23c8 }, { 839, 0x0000 }, { 839, 0x8000 }, + { 840, 0x0003 }, { 842, 0x0804 }, { 844, 0x0009 }, +}; +static const Summary16 isoir165ext_uni2indx_page9e[25] = { + /* 0x9e00 */ + { 846, 0x0000 }, { 846, 0x0000 }, { 846, 0x4090 }, { 849, 0x0011 }, + { 851, 0x2001 }, { 853, 0x225d }, { 860, 0x8027 }, { 865, 0x0010 }, + { 866, 0x0001 }, { 867, 0x0002 }, { 868, 0x0000 }, { 868, 0x0000 }, + { 868, 0x0000 }, { 868, 0x0000 }, { 868, 0x0002 }, { 869, 0x0000 }, + /* 0x9f00 */ + { 869, 0x1000 }, { 870, 0x0004 }, { 871, 0x0800 }, { 872, 0x0000 }, + { 872, 0x0002 }, { 873, 0x0000 }, { 873, 0x0000 }, { 873, 0x0000 }, + { 873, 0x0006 }, +}; +static const Summary16 isoir165ext_uni2indx_pageff[5] = { + /* 0xff00 */ + { 875, 0x0000 }, { 875, 0x0000 }, { 875, 0x0000 }, { 875, 0x0000 }, + { 875, 0x0080 }, +}; + +static int +isoir165ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0000 && wc < 0x0200) + summary = &isoir165ext_uni2indx_page00[(wc>>4)]; + else if (wc >= 0x0300 && wc < 0x03c0) + summary = &isoir165ext_uni2indx_page03[(wc>>4)-0x030]; + else if (wc >= 0x1e00 && wc < 0x1fc0) + summary = &isoir165ext_uni2indx_page1e[(wc>>4)-0x1e0]; + else if (wc >= 0x3000 && wc < 0x3040) + summary = &isoir165ext_uni2indx_page30[(wc>>4)-0x300]; + else if (wc >= 0x3200 && wc < 0x3400) + summary = &isoir165ext_uni2indx_page32[(wc>>4)-0x320]; + else if (wc >= 0x4e00 && wc < 0x7d00) + summary = &isoir165ext_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0x7e00 && wc < 0x92d0) + summary = &isoir165ext_uni2indx_page7e[(wc>>4)-0x7e0]; + else if (wc >= 0x9400 && wc < 0x9cf0) + summary = &isoir165ext_uni2indx_page94[(wc>>4)-0x940]; + else if (wc >= 0x9e00 && wc < 0x9f90) + summary = &isoir165ext_uni2indx_page9e[(wc>>4)-0x9e0]; + else if (wc >= 0xff00 && wc < 0xff50) + summary = &isoir165ext_uni2indx_pageff[(wc>>4)-0xff0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = isoir165ext_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/java.h b/jni/parted/libiconv/lib/java.h new file mode 100755 index 0000000..841bfa9 --- /dev/null +++ b/jni/parted/libiconv/lib/java.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * JAVA + * This is ISO 8859-1 with \uXXXX escape sequences, denoting Unicode BMP + * characters. Consecutive pairs of \uXXXX escape sequences in the surrogate + * range, as in UTF-16, denote Unicode characters outside the BMP. + */ + +static int +java_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c; + ucs4_t wc, wc2; + int i; + + c = s[0]; + if (c != '\\') { + *pwc = c; + return 1; + } + if (n < 2) + return RET_TOOFEW(0); + if (s[1] != 'u') + goto simply_backslash; + wc = 0; + for (i = 2; i < 6; i++) { + if (n <= i) + return RET_TOOFEW(0); + c = s[i]; + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'Z') + c -= 'A'-10; + else if (c >= 'a' && c <= 'z') + c -= 'a'-10; + else + goto simply_backslash; + wc |= (ucs4_t) c << (4 * (5-i)); + } + if (!(wc >= 0xd800 && wc < 0xe000)) { + *pwc = wc; + return 6; + } + if (wc >= 0xdc00) + goto simply_backslash; + if (n < 7) + return RET_TOOFEW(0); + if (s[6] != '\\') + goto simply_backslash; + if (n < 8) + return RET_TOOFEW(0); + if (s[7] != 'u') + goto simply_backslash; + wc2 = 0; + for (i = 8; i < 12; i++) { + if (n <= i) + return RET_TOOFEW(0); + c = s[i]; + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'Z') + c -= 'A'-10; + else if (c >= 'a' && c <= 'z') + c -= 'a'-10; + else + goto simply_backslash; + wc2 |= (ucs4_t) c << (4 * (11-i)); + } + if (!(wc2 >= 0xdc00 && wc2 < 0xe000)) + goto simply_backslash; + *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00); + return 12; +simply_backslash: + *pwc = '\\'; + return 1; +} + +static int +java_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x80) { + *r = wc; + return 1; + } else if (wc < 0x10000) { + if (n >= 6) { + unsigned int i; + r[0] = '\\'; + r[1] = 'u'; + i = (wc >> 12) & 0x0f; r[2] = (i < 10 ? '0'+i : 'a'-10+i); + i = (wc >> 8) & 0x0f; r[3] = (i < 10 ? '0'+i : 'a'-10+i); + i = (wc >> 4) & 0x0f; r[4] = (i < 10 ? '0'+i : 'a'-10+i); + i = wc & 0x0f; r[5] = (i < 10 ? '0'+i : 'a'-10+i); + return 6; + } else + return RET_TOOSMALL; + } else if (wc < 0x110000) { + if (n >= 12) { + ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10); + ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff); + unsigned int i; + r[0] = '\\'; + r[1] = 'u'; + i = (wc1 >> 12) & 0x0f; r[2] = (i < 10 ? '0'+i : 'a'-10+i); + i = (wc1 >> 8) & 0x0f; r[3] = (i < 10 ? '0'+i : 'a'-10+i); + i = (wc1 >> 4) & 0x0f; r[4] = (i < 10 ? '0'+i : 'a'-10+i); + i = wc1 & 0x0f; r[5] = (i < 10 ? '0'+i : 'a'-10+i); + r[6] = '\\'; + r[7] = 'u'; + i = (wc2 >> 12) & 0x0f; r[8] = (i < 10 ? '0'+i : 'a'-10+i); + i = (wc2 >> 8) & 0x0f; r[9] = (i < 10 ? '0'+i : 'a'-10+i); + i = (wc2 >> 4) & 0x0f; r[10] = (i < 10 ? '0'+i : 'a'-10+i); + i = wc2 & 0x0f; r[11] = (i < 10 ? '0'+i : 'a'-10+i); + return 12; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/jisx0201.h b/jni/parted/libiconv/lib/jisx0201.h new file mode 100755 index 0000000..739fae6 --- /dev/null +++ b/jni/parted/libiconv/lib/jisx0201.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * JISX0201.1976-0 + */ + +static int +jisx0201_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + if (c == 0x5c) + *pwc = (ucs4_t) 0x00a5; + else if (c == 0x7e) + *pwc = (ucs4_t) 0x203e; + else + *pwc = (ucs4_t) c; + return 1; + } else { + if (c >= 0xa1 && c < 0xe0) { + *pwc = (ucs4_t) c + 0xfec0; + return 1; + } + } + return RET_ILSEQ; +} + +static int +jisx0201_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x0080 && !(wc == 0x005c || wc == 0x007e)) { + *r = wc; + return 1; + } + if (wc == 0x00a5) { + *r = 0x5c; + return 1; + } + if (wc == 0x203e) { + *r = 0x7e; + return 1; + } + if (wc >= 0xff61 && wc < 0xffa0) { + *r = wc - 0xfec0; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/jisx0208.h b/jni/parted/libiconv/lib/jisx0208.h new file mode 100755 index 0000000..262cd40 --- /dev/null +++ b/jni/parted/libiconv/lib/jisx0208.h @@ -0,0 +1,2414 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * JISX0208.1990-0 + */ + +static const unsigned short jisx0208_2uni_page21[690] = { + /* 0x21 */ + 0x3000, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb, 0xff1a, 0xff1b, + 0xff1f, 0xff01, 0x309b, 0x309c, 0x00b4, 0xff40, 0x00a8, 0xff3e, + 0xffe3, 0xff3f, 0x30fd, 0x30fe, 0x309d, 0x309e, 0x3003, 0x4edd, + 0x3005, 0x3006, 0x3007, 0x30fc, 0x2015, 0x2010, 0xff0f, 0xff3c, + 0x301c, 0x2016, 0xff5c, 0x2026, 0x2025, 0x2018, 0x2019, 0x201c, + 0x201d, 0xff08, 0xff09, 0x3014, 0x3015, 0xff3b, 0xff3d, 0xff5b, + 0xff5d, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, + 0x300f, 0x3010, 0x3011, 0xff0b, 0x2212, 0x00b1, 0x00d7, 0x00f7, + 0xff1d, 0x2260, 0xff1c, 0xff1e, 0x2266, 0x2267, 0x221e, 0x2234, + 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xffe5, 0xff04, + 0x00a2, 0x00a3, 0xff05, 0xff03, 0xff06, 0xff0a, 0xff20, 0x00a7, + 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, + /* 0x22 */ + 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x203b, + 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a, + 0x2229, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x2227, 0x2228, 0x00ac, 0x21d2, 0x21d4, 0x2200, 0x2203, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, + 0x2261, 0x2252, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235, + 0x222b, 0x222c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x212b, 0x2030, 0x266f, 0x266d, 0x266a, 0x2020, 0x2021, + 0x00b6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x25ef, + /* 0x23 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff10, + 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, + 0xff19, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, + 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, + 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, + 0xff39, 0xff3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, + 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, + 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, + 0xff59, 0xff5a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x24 */ + 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, + 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, + 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, + 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, + 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, + 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, + 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, + 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, + 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, + 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, + 0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x25 */ + 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, + 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, + 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, + 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, + 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, + 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, + 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, + 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, + 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, + 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, + 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x26 */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, + 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, + 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, + 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, + 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x27 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 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, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, + 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, + 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, + 0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x28 */ + 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c, + 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b, + 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f, + 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542, +}; +static const unsigned short jisx0208_2uni_page30[6398] = { + /* 0x30 */ + 0x4e9c, 0x5516, 0x5a03, 0x963f, 0x54c0, 0x611b, 0x6328, 0x59f6, + 0x9022, 0x8475, 0x831c, 0x7a50, 0x60aa, 0x63e1, 0x6e25, 0x65ed, + 0x8466, 0x82a6, 0x9bf5, 0x6893, 0x5727, 0x65a1, 0x6271, 0x5b9b, + 0x59d0, 0x867b, 0x98f4, 0x7d62, 0x7dbe, 0x9b8e, 0x6216, 0x7c9f, + 0x88b7, 0x5b89, 0x5eb5, 0x6309, 0x6697, 0x6848, 0x95c7, 0x978d, + 0x674f, 0x4ee5, 0x4f0a, 0x4f4d, 0x4f9d, 0x5049, 0x56f2, 0x5937, + 0x59d4, 0x5a01, 0x5c09, 0x60df, 0x610f, 0x6170, 0x6613, 0x6905, + 0x70ba, 0x754f, 0x7570, 0x79fb, 0x7dad, 0x7def, 0x80c3, 0x840e, + 0x8863, 0x8b02, 0x9055, 0x907a, 0x533b, 0x4e95, 0x4ea5, 0x57df, + 0x80b2, 0x90c1, 0x78ef, 0x4e00, 0x58f1, 0x6ea2, 0x9038, 0x7a32, + 0x8328, 0x828b, 0x9c2f, 0x5141, 0x5370, 0x54bd, 0x54e1, 0x56e0, + 0x59fb, 0x5f15, 0x98f2, 0x6deb, 0x80e4, 0x852d, + /* 0x31 */ + 0x9662, 0x9670, 0x96a0, 0x97fb, 0x540b, 0x53f3, 0x5b87, 0x70cf, + 0x7fbd, 0x8fc2, 0x96e8, 0x536f, 0x9d5c, 0x7aba, 0x4e11, 0x7893, + 0x81fc, 0x6e26, 0x5618, 0x5504, 0x6b1d, 0x851a, 0x9c3b, 0x59e5, + 0x53a9, 0x6d66, 0x74dc, 0x958f, 0x5642, 0x4e91, 0x904b, 0x96f2, + 0x834f, 0x990c, 0x53e1, 0x55b6, 0x5b30, 0x5f71, 0x6620, 0x66f3, + 0x6804, 0x6c38, 0x6cf3, 0x6d29, 0x745b, 0x76c8, 0x7a4e, 0x9834, + 0x82f1, 0x885b, 0x8a60, 0x92ed, 0x6db2, 0x75ab, 0x76ca, 0x99c5, + 0x60a6, 0x8b01, 0x8d8a, 0x95b2, 0x698e, 0x53ad, 0x5186, 0x5712, + 0x5830, 0x5944, 0x5bb4, 0x5ef6, 0x6028, 0x63a9, 0x63f4, 0x6cbf, + 0x6f14, 0x708e, 0x7114, 0x7159, 0x71d5, 0x733f, 0x7e01, 0x8276, + 0x82d1, 0x8597, 0x9060, 0x925b, 0x9d1b, 0x5869, 0x65bc, 0x6c5a, + 0x7525, 0x51f9, 0x592e, 0x5965, 0x5f80, 0x5fdc, + /* 0x32 */ + 0x62bc, 0x65fa, 0x6a2a, 0x6b27, 0x6bb4, 0x738b, 0x7fc1, 0x8956, + 0x9d2c, 0x9d0e, 0x9ec4, 0x5ca1, 0x6c96, 0x837b, 0x5104, 0x5c4b, + 0x61b6, 0x81c6, 0x6876, 0x7261, 0x4e59, 0x4ffa, 0x5378, 0x6069, + 0x6e29, 0x7a4f, 0x97f3, 0x4e0b, 0x5316, 0x4eee, 0x4f55, 0x4f3d, + 0x4fa1, 0x4f73, 0x52a0, 0x53ef, 0x5609, 0x590f, 0x5ac1, 0x5bb6, + 0x5be1, 0x79d1, 0x6687, 0x679c, 0x67b6, 0x6b4c, 0x6cb3, 0x706b, + 0x73c2, 0x798d, 0x79be, 0x7a3c, 0x7b87, 0x82b1, 0x82db, 0x8304, + 0x8377, 0x83ef, 0x83d3, 0x8766, 0x8ab2, 0x5629, 0x8ca8, 0x8fe6, + 0x904e, 0x971e, 0x868a, 0x4fc4, 0x5ce8, 0x6211, 0x7259, 0x753b, + 0x81e5, 0x82bd, 0x86fe, 0x8cc0, 0x96c5, 0x9913, 0x99d5, 0x4ecb, + 0x4f1a, 0x89e3, 0x56de, 0x584a, 0x58ca, 0x5efb, 0x5feb, 0x602a, + 0x6094, 0x6062, 0x61d0, 0x6212, 0x62d0, 0x6539, + /* 0x33 */ + 0x9b41, 0x6666, 0x68b0, 0x6d77, 0x7070, 0x754c, 0x7686, 0x7d75, + 0x82a5, 0x87f9, 0x958b, 0x968e, 0x8c9d, 0x51f1, 0x52be, 0x5916, + 0x54b3, 0x5bb3, 0x5d16, 0x6168, 0x6982, 0x6daf, 0x788d, 0x84cb, + 0x8857, 0x8a72, 0x93a7, 0x9ab8, 0x6d6c, 0x99a8, 0x86d9, 0x57a3, + 0x67ff, 0x86ce, 0x920e, 0x5283, 0x5687, 0x5404, 0x5ed3, 0x62e1, + 0x64b9, 0x683c, 0x6838, 0x6bbb, 0x7372, 0x78ba, 0x7a6b, 0x899a, + 0x89d2, 0x8d6b, 0x8f03, 0x90ed, 0x95a3, 0x9694, 0x9769, 0x5b66, + 0x5cb3, 0x697d, 0x984d, 0x984e, 0x639b, 0x7b20, 0x6a2b, 0x6a7f, + 0x68b6, 0x9c0d, 0x6f5f, 0x5272, 0x559d, 0x6070, 0x62ec, 0x6d3b, + 0x6e07, 0x6ed1, 0x845b, 0x8910, 0x8f44, 0x4e14, 0x9c39, 0x53f6, + 0x691b, 0x6a3a, 0x9784, 0x682a, 0x515c, 0x7ac3, 0x84b2, 0x91dc, + 0x938c, 0x565b, 0x9d28, 0x6822, 0x8305, 0x8431, + /* 0x34 */ + 0x7ca5, 0x5208, 0x82c5, 0x74e6, 0x4e7e, 0x4f83, 0x51a0, 0x5bd2, + 0x520a, 0x52d8, 0x52e7, 0x5dfb, 0x559a, 0x582a, 0x59e6, 0x5b8c, + 0x5b98, 0x5bdb, 0x5e72, 0x5e79, 0x60a3, 0x611f, 0x6163, 0x61be, + 0x63db, 0x6562, 0x67d1, 0x6853, 0x68fa, 0x6b3e, 0x6b53, 0x6c57, + 0x6f22, 0x6f97, 0x6f45, 0x74b0, 0x7518, 0x76e3, 0x770b, 0x7aff, + 0x7ba1, 0x7c21, 0x7de9, 0x7f36, 0x7ff0, 0x809d, 0x8266, 0x839e, + 0x89b3, 0x8acc, 0x8cab, 0x9084, 0x9451, 0x9593, 0x9591, 0x95a2, + 0x9665, 0x97d3, 0x9928, 0x8218, 0x4e38, 0x542b, 0x5cb8, 0x5dcc, + 0x73a9, 0x764c, 0x773c, 0x5ca9, 0x7feb, 0x8d0b, 0x96c1, 0x9811, + 0x9854, 0x9858, 0x4f01, 0x4f0e, 0x5371, 0x559c, 0x5668, 0x57fa, + 0x5947, 0x5b09, 0x5bc4, 0x5c90, 0x5e0c, 0x5e7e, 0x5fcc, 0x63ee, + 0x673a, 0x65d7, 0x65e2, 0x671f, 0x68cb, 0x68c4, + /* 0x35 */ + 0x6a5f, 0x5e30, 0x6bc5, 0x6c17, 0x6c7d, 0x757f, 0x7948, 0x5b63, + 0x7a00, 0x7d00, 0x5fbd, 0x898f, 0x8a18, 0x8cb4, 0x8d77, 0x8ecc, + 0x8f1d, 0x98e2, 0x9a0e, 0x9b3c, 0x4e80, 0x507d, 0x5100, 0x5993, + 0x5b9c, 0x622f, 0x6280, 0x64ec, 0x6b3a, 0x72a0, 0x7591, 0x7947, + 0x7fa9, 0x87fb, 0x8abc, 0x8b70, 0x63ac, 0x83ca, 0x97a0, 0x5409, + 0x5403, 0x55ab, 0x6854, 0x6a58, 0x8a70, 0x7827, 0x6775, 0x9ecd, + 0x5374, 0x5ba2, 0x811a, 0x8650, 0x9006, 0x4e18, 0x4e45, 0x4ec7, + 0x4f11, 0x53ca, 0x5438, 0x5bae, 0x5f13, 0x6025, 0x6551, 0x673d, + 0x6c42, 0x6c72, 0x6ce3, 0x7078, 0x7403, 0x7a76, 0x7aae, 0x7b08, + 0x7d1a, 0x7cfe, 0x7d66, 0x65e7, 0x725b, 0x53bb, 0x5c45, 0x5de8, + 0x62d2, 0x62e0, 0x6319, 0x6e20, 0x865a, 0x8a31, 0x8ddd, 0x92f8, + 0x6f01, 0x79a6, 0x9b5a, 0x4ea8, 0x4eab, 0x4eac, + /* 0x36 */ + 0x4f9b, 0x4fa0, 0x50d1, 0x5147, 0x7af6, 0x5171, 0x51f6, 0x5354, + 0x5321, 0x537f, 0x53eb, 0x55ac, 0x5883, 0x5ce1, 0x5f37, 0x5f4a, + 0x602f, 0x6050, 0x606d, 0x631f, 0x6559, 0x6a4b, 0x6cc1, 0x72c2, + 0x72ed, 0x77ef, 0x80f8, 0x8105, 0x8208, 0x854e, 0x90f7, 0x93e1, + 0x97ff, 0x9957, 0x9a5a, 0x4ef0, 0x51dd, 0x5c2d, 0x6681, 0x696d, + 0x5c40, 0x66f2, 0x6975, 0x7389, 0x6850, 0x7c81, 0x50c5, 0x52e4, + 0x5747, 0x5dfe, 0x9326, 0x65a4, 0x6b23, 0x6b3d, 0x7434, 0x7981, + 0x79bd, 0x7b4b, 0x7dca, 0x82b9, 0x83cc, 0x887f, 0x895f, 0x8b39, + 0x8fd1, 0x91d1, 0x541f, 0x9280, 0x4e5d, 0x5036, 0x53e5, 0x533a, + 0x72d7, 0x7396, 0x77e9, 0x82e6, 0x8eaf, 0x99c6, 0x99c8, 0x99d2, + 0x5177, 0x611a, 0x865e, 0x55b0, 0x7a7a, 0x5076, 0x5bd3, 0x9047, + 0x9685, 0x4e32, 0x6adb, 0x91e7, 0x5c51, 0x5c48, + /* 0x37 */ + 0x6398, 0x7a9f, 0x6c93, 0x9774, 0x8f61, 0x7aaa, 0x718a, 0x9688, + 0x7c82, 0x6817, 0x7e70, 0x6851, 0x936c, 0x52f2, 0x541b, 0x85ab, + 0x8a13, 0x7fa4, 0x8ecd, 0x90e1, 0x5366, 0x8888, 0x7941, 0x4fc2, + 0x50be, 0x5211, 0x5144, 0x5553, 0x572d, 0x73ea, 0x578b, 0x5951, + 0x5f62, 0x5f84, 0x6075, 0x6176, 0x6167, 0x61a9, 0x63b2, 0x643a, + 0x656c, 0x666f, 0x6842, 0x6e13, 0x7566, 0x7a3d, 0x7cfb, 0x7d4c, + 0x7d99, 0x7e4b, 0x7f6b, 0x830e, 0x834a, 0x86cd, 0x8a08, 0x8a63, + 0x8b66, 0x8efd, 0x981a, 0x9d8f, 0x82b8, 0x8fce, 0x9be8, 0x5287, + 0x621f, 0x6483, 0x6fc0, 0x9699, 0x6841, 0x5091, 0x6b20, 0x6c7a, + 0x6f54, 0x7a74, 0x7d50, 0x8840, 0x8a23, 0x6708, 0x4ef6, 0x5039, + 0x5026, 0x5065, 0x517c, 0x5238, 0x5263, 0x55a7, 0x570f, 0x5805, + 0x5acc, 0x5efa, 0x61b2, 0x61f8, 0x62f3, 0x6372, + /* 0x38 */ + 0x691c, 0x6a29, 0x727d, 0x72ac, 0x732e, 0x7814, 0x786f, 0x7d79, + 0x770c, 0x80a9, 0x898b, 0x8b19, 0x8ce2, 0x8ed2, 0x9063, 0x9375, + 0x967a, 0x9855, 0x9a13, 0x9e78, 0x5143, 0x539f, 0x53b3, 0x5e7b, + 0x5f26, 0x6e1b, 0x6e90, 0x7384, 0x73fe, 0x7d43, 0x8237, 0x8a00, + 0x8afa, 0x9650, 0x4e4e, 0x500b, 0x53e4, 0x547c, 0x56fa, 0x59d1, + 0x5b64, 0x5df1, 0x5eab, 0x5f27, 0x6238, 0x6545, 0x67af, 0x6e56, + 0x72d0, 0x7cca, 0x88b4, 0x80a1, 0x80e1, 0x83f0, 0x864e, 0x8a87, + 0x8de8, 0x9237, 0x96c7, 0x9867, 0x9f13, 0x4e94, 0x4e92, 0x4f0d, + 0x5348, 0x5449, 0x543e, 0x5a2f, 0x5f8c, 0x5fa1, 0x609f, 0x68a7, + 0x6a8e, 0x745a, 0x7881, 0x8a9e, 0x8aa4, 0x8b77, 0x9190, 0x4e5e, + 0x9bc9, 0x4ea4, 0x4f7c, 0x4faf, 0x5019, 0x5016, 0x5149, 0x516c, + 0x529f, 0x52b9, 0x52fe, 0x539a, 0x53e3, 0x5411, + /* 0x39 */ + 0x540e, 0x5589, 0x5751, 0x57a2, 0x597d, 0x5b54, 0x5b5d, 0x5b8f, + 0x5de5, 0x5de7, 0x5df7, 0x5e78, 0x5e83, 0x5e9a, 0x5eb7, 0x5f18, + 0x6052, 0x614c, 0x6297, 0x62d8, 0x63a7, 0x653b, 0x6602, 0x6643, + 0x66f4, 0x676d, 0x6821, 0x6897, 0x69cb, 0x6c5f, 0x6d2a, 0x6d69, + 0x6e2f, 0x6e9d, 0x7532, 0x7687, 0x786c, 0x7a3f, 0x7ce0, 0x7d05, + 0x7d18, 0x7d5e, 0x7db1, 0x8015, 0x8003, 0x80af, 0x80b1, 0x8154, + 0x818f, 0x822a, 0x8352, 0x884c, 0x8861, 0x8b1b, 0x8ca2, 0x8cfc, + 0x90ca, 0x9175, 0x9271, 0x783f, 0x92fc, 0x95a4, 0x964d, 0x9805, + 0x9999, 0x9ad8, 0x9d3b, 0x525b, 0x52ab, 0x53f7, 0x5408, 0x58d5, + 0x62f7, 0x6fe0, 0x8c6a, 0x8f5f, 0x9eb9, 0x514b, 0x523b, 0x544a, + 0x56fd, 0x7a40, 0x9177, 0x9d60, 0x9ed2, 0x7344, 0x6f09, 0x8170, + 0x7511, 0x5ffd, 0x60da, 0x9aa8, 0x72db, 0x8fbc, + /* 0x3a */ + 0x6b64, 0x9803, 0x4eca, 0x56f0, 0x5764, 0x58be, 0x5a5a, 0x6068, + 0x61c7, 0x660f, 0x6606, 0x6839, 0x68b1, 0x6df7, 0x75d5, 0x7d3a, + 0x826e, 0x9b42, 0x4e9b, 0x4f50, 0x53c9, 0x5506, 0x5d6f, 0x5de6, + 0x5dee, 0x67fb, 0x6c99, 0x7473, 0x7802, 0x8a50, 0x9396, 0x88df, + 0x5750, 0x5ea7, 0x632b, 0x50b5, 0x50ac, 0x518d, 0x6700, 0x54c9, + 0x585e, 0x59bb, 0x5bb0, 0x5f69, 0x624d, 0x63a1, 0x683d, 0x6b73, + 0x6e08, 0x707d, 0x91c7, 0x7280, 0x7815, 0x7826, 0x796d, 0x658e, + 0x7d30, 0x83dc, 0x88c1, 0x8f09, 0x969b, 0x5264, 0x5728, 0x6750, + 0x7f6a, 0x8ca1, 0x51b4, 0x5742, 0x962a, 0x583a, 0x698a, 0x80b4, + 0x54b2, 0x5d0e, 0x57fc, 0x7895, 0x9dfa, 0x4f5c, 0x524a, 0x548b, + 0x643e, 0x6628, 0x6714, 0x67f5, 0x7a84, 0x7b56, 0x7d22, 0x932f, + 0x685c, 0x9bad, 0x7b39, 0x5319, 0x518a, 0x5237, + /* 0x3b */ + 0x5bdf, 0x62f6, 0x64ae, 0x64e6, 0x672d, 0x6bba, 0x85a9, 0x96d1, + 0x7690, 0x9bd6, 0x634c, 0x9306, 0x9bab, 0x76bf, 0x6652, 0x4e09, + 0x5098, 0x53c2, 0x5c71, 0x60e8, 0x6492, 0x6563, 0x685f, 0x71e6, + 0x73ca, 0x7523, 0x7b97, 0x7e82, 0x8695, 0x8b83, 0x8cdb, 0x9178, + 0x9910, 0x65ac, 0x66ab, 0x6b8b, 0x4ed5, 0x4ed4, 0x4f3a, 0x4f7f, + 0x523a, 0x53f8, 0x53f2, 0x55e3, 0x56db, 0x58eb, 0x59cb, 0x59c9, + 0x59ff, 0x5b50, 0x5c4d, 0x5e02, 0x5e2b, 0x5fd7, 0x601d, 0x6307, + 0x652f, 0x5b5c, 0x65af, 0x65bd, 0x65e8, 0x679d, 0x6b62, 0x6b7b, + 0x6c0f, 0x7345, 0x7949, 0x79c1, 0x7cf8, 0x7d19, 0x7d2b, 0x80a2, + 0x8102, 0x81f3, 0x8996, 0x8a5e, 0x8a69, 0x8a66, 0x8a8c, 0x8aee, + 0x8cc7, 0x8cdc, 0x96cc, 0x98fc, 0x6b6f, 0x4e8b, 0x4f3c, 0x4f8d, + 0x5150, 0x5b57, 0x5bfa, 0x6148, 0x6301, 0x6642, + /* 0x3c */ + 0x6b21, 0x6ecb, 0x6cbb, 0x723e, 0x74bd, 0x75d4, 0x78c1, 0x793a, + 0x800c, 0x8033, 0x81ea, 0x8494, 0x8f9e, 0x6c50, 0x9e7f, 0x5f0f, + 0x8b58, 0x9d2b, 0x7afa, 0x8ef8, 0x5b8d, 0x96eb, 0x4e03, 0x53f1, + 0x57f7, 0x5931, 0x5ac9, 0x5ba4, 0x6089, 0x6e7f, 0x6f06, 0x75be, + 0x8cea, 0x5b9f, 0x8500, 0x7be0, 0x5072, 0x67f4, 0x829d, 0x5c61, + 0x854a, 0x7e1e, 0x820e, 0x5199, 0x5c04, 0x6368, 0x8d66, 0x659c, + 0x716e, 0x793e, 0x7d17, 0x8005, 0x8b1d, 0x8eca, 0x906e, 0x86c7, + 0x90aa, 0x501f, 0x52fa, 0x5c3a, 0x6753, 0x707c, 0x7235, 0x914c, + 0x91c8, 0x932b, 0x82e5, 0x5bc2, 0x5f31, 0x60f9, 0x4e3b, 0x53d6, + 0x5b88, 0x624b, 0x6731, 0x6b8a, 0x72e9, 0x73e0, 0x7a2e, 0x816b, + 0x8da3, 0x9152, 0x9996, 0x5112, 0x53d7, 0x546a, 0x5bff, 0x6388, + 0x6a39, 0x7dac, 0x9700, 0x56da, 0x53ce, 0x5468, + /* 0x3d */ + 0x5b97, 0x5c31, 0x5dde, 0x4fee, 0x6101, 0x62fe, 0x6d32, 0x79c0, + 0x79cb, 0x7d42, 0x7e4d, 0x7fd2, 0x81ed, 0x821f, 0x8490, 0x8846, + 0x8972, 0x8b90, 0x8e74, 0x8f2f, 0x9031, 0x914b, 0x916c, 0x96c6, + 0x919c, 0x4ec0, 0x4f4f, 0x5145, 0x5341, 0x5f93, 0x620e, 0x67d4, + 0x6c41, 0x6e0b, 0x7363, 0x7e26, 0x91cd, 0x9283, 0x53d4, 0x5919, + 0x5bbf, 0x6dd1, 0x795d, 0x7e2e, 0x7c9b, 0x587e, 0x719f, 0x51fa, + 0x8853, 0x8ff0, 0x4fca, 0x5cfb, 0x6625, 0x77ac, 0x7ae3, 0x821c, + 0x99ff, 0x51c6, 0x5faa, 0x65ec, 0x696f, 0x6b89, 0x6df3, 0x6e96, + 0x6f64, 0x76fe, 0x7d14, 0x5de1, 0x9075, 0x9187, 0x9806, 0x51e6, + 0x521d, 0x6240, 0x6691, 0x66d9, 0x6e1a, 0x5eb6, 0x7dd2, 0x7f72, + 0x66f8, 0x85af, 0x85f7, 0x8af8, 0x52a9, 0x53d9, 0x5973, 0x5e8f, + 0x5f90, 0x6055, 0x92e4, 0x9664, 0x50b7, 0x511f, + /* 0x3e */ + 0x52dd, 0x5320, 0x5347, 0x53ec, 0x54e8, 0x5546, 0x5531, 0x5617, + 0x5968, 0x59be, 0x5a3c, 0x5bb5, 0x5c06, 0x5c0f, 0x5c11, 0x5c1a, + 0x5e84, 0x5e8a, 0x5ee0, 0x5f70, 0x627f, 0x6284, 0x62db, 0x638c, + 0x6377, 0x6607, 0x660c, 0x662d, 0x6676, 0x677e, 0x68a2, 0x6a1f, + 0x6a35, 0x6cbc, 0x6d88, 0x6e09, 0x6e58, 0x713c, 0x7126, 0x7167, + 0x75c7, 0x7701, 0x785d, 0x7901, 0x7965, 0x79f0, 0x7ae0, 0x7b11, + 0x7ca7, 0x7d39, 0x8096, 0x83d6, 0x848b, 0x8549, 0x885d, 0x88f3, + 0x8a1f, 0x8a3c, 0x8a54, 0x8a73, 0x8c61, 0x8cde, 0x91a4, 0x9266, + 0x937e, 0x9418, 0x969c, 0x9798, 0x4e0a, 0x4e08, 0x4e1e, 0x4e57, + 0x5197, 0x5270, 0x57ce, 0x5834, 0x58cc, 0x5b22, 0x5e38, 0x60c5, + 0x64fe, 0x6761, 0x6756, 0x6d44, 0x72b6, 0x7573, 0x7a63, 0x84b8, + 0x8b72, 0x91b8, 0x9320, 0x5631, 0x57f4, 0x98fe, + /* 0x3f */ + 0x62ed, 0x690d, 0x6b96, 0x71ed, 0x7e54, 0x8077, 0x8272, 0x89e6, + 0x98df, 0x8755, 0x8fb1, 0x5c3b, 0x4f38, 0x4fe1, 0x4fb5, 0x5507, + 0x5a20, 0x5bdd, 0x5be9, 0x5fc3, 0x614e, 0x632f, 0x65b0, 0x664b, + 0x68ee, 0x699b, 0x6d78, 0x6df1, 0x7533, 0x75b9, 0x771f, 0x795e, + 0x79e6, 0x7d33, 0x81e3, 0x82af, 0x85aa, 0x89aa, 0x8a3a, 0x8eab, + 0x8f9b, 0x9032, 0x91dd, 0x9707, 0x4eba, 0x4ec1, 0x5203, 0x5875, + 0x58ec, 0x5c0b, 0x751a, 0x5c3d, 0x814e, 0x8a0a, 0x8fc5, 0x9663, + 0x976d, 0x7b25, 0x8acf, 0x9808, 0x9162, 0x56f3, 0x53a8, 0x9017, + 0x5439, 0x5782, 0x5e25, 0x63a8, 0x6c34, 0x708a, 0x7761, 0x7c8b, + 0x7fe0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968f, 0x745e, + 0x9ac4, 0x5d07, 0x5d69, 0x6570, 0x67a2, 0x8da8, 0x96db, 0x636e, + 0x6749, 0x6919, 0x83c5, 0x9817, 0x96c0, 0x88fe, + /* 0x40 */ + 0x6f84, 0x647a, 0x5bf8, 0x4e16, 0x702c, 0x755d, 0x662f, 0x51c4, + 0x5236, 0x52e2, 0x59d3, 0x5f81, 0x6027, 0x6210, 0x653f, 0x6574, + 0x661f, 0x6674, 0x68f2, 0x6816, 0x6b63, 0x6e05, 0x7272, 0x751f, + 0x76db, 0x7cbe, 0x8056, 0x58f0, 0x88fd, 0x897f, 0x8aa0, 0x8a93, + 0x8acb, 0x901d, 0x9192, 0x9752, 0x9759, 0x6589, 0x7a0e, 0x8106, + 0x96bb, 0x5e2d, 0x60dc, 0x621a, 0x65a5, 0x6614, 0x6790, 0x77f3, + 0x7a4d, 0x7c4d, 0x7e3e, 0x810a, 0x8cac, 0x8d64, 0x8de1, 0x8e5f, + 0x78a9, 0x5207, 0x62d9, 0x63a5, 0x6442, 0x6298, 0x8a2d, 0x7a83, + 0x7bc0, 0x8aac, 0x96ea, 0x7d76, 0x820c, 0x8749, 0x4ed9, 0x5148, + 0x5343, 0x5360, 0x5ba3, 0x5c02, 0x5c16, 0x5ddd, 0x6226, 0x6247, + 0x64b0, 0x6813, 0x6834, 0x6cc9, 0x6d45, 0x6d17, 0x67d3, 0x6f5c, + 0x714e, 0x717d, 0x65cb, 0x7a7f, 0x7bad, 0x7dda, + /* 0x41 */ + 0x7e4a, 0x7fa8, 0x817a, 0x821b, 0x8239, 0x85a6, 0x8a6e, 0x8cce, + 0x8df5, 0x9078, 0x9077, 0x92ad, 0x9291, 0x9583, 0x9bae, 0x524d, + 0x5584, 0x6f38, 0x7136, 0x5168, 0x7985, 0x7e55, 0x81b3, 0x7cce, + 0x564c, 0x5851, 0x5ca8, 0x63aa, 0x66fe, 0x66fd, 0x695a, 0x72d9, + 0x758f, 0x758e, 0x790e, 0x7956, 0x79df, 0x7c97, 0x7d20, 0x7d44, + 0x8607, 0x8a34, 0x963b, 0x9061, 0x9f20, 0x50e7, 0x5275, 0x53cc, + 0x53e2, 0x5009, 0x55aa, 0x58ee, 0x594f, 0x723d, 0x5b8b, 0x5c64, + 0x531d, 0x60e3, 0x60f3, 0x635c, 0x6383, 0x633f, 0x63bb, 0x64cd, + 0x65e9, 0x66f9, 0x5de3, 0x69cd, 0x69fd, 0x6f15, 0x71e5, 0x4e89, + 0x75e9, 0x76f8, 0x7a93, 0x7cdf, 0x7dcf, 0x7d9c, 0x8061, 0x8349, + 0x8358, 0x846c, 0x84bc, 0x85fb, 0x88c5, 0x8d70, 0x9001, 0x906d, + 0x9397, 0x971c, 0x9a12, 0x50cf, 0x5897, 0x618e, + /* 0x42 */ + 0x81d3, 0x8535, 0x8d08, 0x9020, 0x4fc3, 0x5074, 0x5247, 0x5373, + 0x606f, 0x6349, 0x675f, 0x6e2c, 0x8db3, 0x901f, 0x4fd7, 0x5c5e, + 0x8cca, 0x65cf, 0x7d9a, 0x5352, 0x8896, 0x5176, 0x63c3, 0x5b58, + 0x5b6b, 0x5c0a, 0x640d, 0x6751, 0x905c, 0x4ed6, 0x591a, 0x592a, + 0x6c70, 0x8a51, 0x553e, 0x5815, 0x59a5, 0x60f0, 0x6253, 0x67c1, + 0x8235, 0x6955, 0x9640, 0x99c4, 0x9a28, 0x4f53, 0x5806, 0x5bfe, + 0x8010, 0x5cb1, 0x5e2f, 0x5f85, 0x6020, 0x614b, 0x6234, 0x66ff, + 0x6cf0, 0x6ede, 0x80ce, 0x817f, 0x82d4, 0x888b, 0x8cb8, 0x9000, + 0x902e, 0x968a, 0x9edb, 0x9bdb, 0x4ee3, 0x53f0, 0x5927, 0x7b2c, + 0x918d, 0x984c, 0x9df9, 0x6edd, 0x7027, 0x5353, 0x5544, 0x5b85, + 0x6258, 0x629e, 0x62d3, 0x6ca2, 0x6fef, 0x7422, 0x8a17, 0x9438, + 0x6fc1, 0x8afe, 0x8338, 0x51e7, 0x86f8, 0x53ea, + /* 0x43 */ + 0x53e9, 0x4f46, 0x9054, 0x8fb0, 0x596a, 0x8131, 0x5dfd, 0x7aea, + 0x8fbf, 0x68da, 0x8c37, 0x72f8, 0x9c48, 0x6a3d, 0x8ab0, 0x4e39, + 0x5358, 0x5606, 0x5766, 0x62c5, 0x63a2, 0x65e6, 0x6b4e, 0x6de1, + 0x6e5b, 0x70ad, 0x77ed, 0x7aef, 0x7baa, 0x7dbb, 0x803d, 0x80c6, + 0x86cb, 0x8a95, 0x935b, 0x56e3, 0x58c7, 0x5f3e, 0x65ad, 0x6696, + 0x6a80, 0x6bb5, 0x7537, 0x8ac7, 0x5024, 0x77e5, 0x5730, 0x5f1b, + 0x6065, 0x667a, 0x6c60, 0x75f4, 0x7a1a, 0x7f6e, 0x81f4, 0x8718, + 0x9045, 0x99b3, 0x7bc9, 0x755c, 0x7af9, 0x7b51, 0x84c4, 0x9010, + 0x79e9, 0x7a92, 0x8336, 0x5ae1, 0x7740, 0x4e2d, 0x4ef2, 0x5b99, + 0x5fe0, 0x62bd, 0x663c, 0x67f1, 0x6ce8, 0x866b, 0x8877, 0x8a3b, + 0x914e, 0x92f3, 0x99d0, 0x6a17, 0x7026, 0x732a, 0x82e7, 0x8457, + 0x8caf, 0x4e01, 0x5146, 0x51cb, 0x558b, 0x5bf5, + /* 0x44 */ + 0x5e16, 0x5e33, 0x5e81, 0x5f14, 0x5f35, 0x5f6b, 0x5fb4, 0x61f2, + 0x6311, 0x66a2, 0x671d, 0x6f6e, 0x7252, 0x753a, 0x773a, 0x8074, + 0x8139, 0x8178, 0x8776, 0x8abf, 0x8adc, 0x8d85, 0x8df3, 0x929a, + 0x9577, 0x9802, 0x9ce5, 0x52c5, 0x6357, 0x76f4, 0x6715, 0x6c88, + 0x73cd, 0x8cc3, 0x93ae, 0x9673, 0x6d25, 0x589c, 0x690e, 0x69cc, + 0x8ffd, 0x939a, 0x75db, 0x901a, 0x585a, 0x6802, 0x63b4, 0x69fb, + 0x4f43, 0x6f2c, 0x67d8, 0x8fbb, 0x8526, 0x7db4, 0x9354, 0x693f, + 0x6f70, 0x576a, 0x58f7, 0x5b2c, 0x7d2c, 0x722a, 0x540a, 0x91e3, + 0x9db4, 0x4ead, 0x4f4e, 0x505c, 0x5075, 0x5243, 0x8c9e, 0x5448, + 0x5824, 0x5b9a, 0x5e1d, 0x5e95, 0x5ead, 0x5ef7, 0x5f1f, 0x608c, + 0x62b5, 0x633a, 0x63d0, 0x68af, 0x6c40, 0x7887, 0x798e, 0x7a0b, + 0x7de0, 0x8247, 0x8a02, 0x8ae6, 0x8e44, 0x9013, + /* 0x45 */ + 0x90b8, 0x912d, 0x91d8, 0x9f0e, 0x6ce5, 0x6458, 0x64e2, 0x6575, + 0x6ef4, 0x7684, 0x7b1b, 0x9069, 0x93d1, 0x6eba, 0x54f2, 0x5fb9, + 0x64a4, 0x8f4d, 0x8fed, 0x9244, 0x5178, 0x586b, 0x5929, 0x5c55, + 0x5e97, 0x6dfb, 0x7e8f, 0x751c, 0x8cbc, 0x8ee2, 0x985b, 0x70b9, + 0x4f1d, 0x6bbf, 0x6fb1, 0x7530, 0x96fb, 0x514e, 0x5410, 0x5835, + 0x5857, 0x59ac, 0x5c60, 0x5f92, 0x6597, 0x675c, 0x6e21, 0x767b, + 0x83df, 0x8ced, 0x9014, 0x90fd, 0x934d, 0x7825, 0x783a, 0x52aa, + 0x5ea6, 0x571f, 0x5974, 0x6012, 0x5012, 0x515a, 0x51ac, 0x51cd, + 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5b95, 0x5cf6, 0x5d8b, + 0x60bc, 0x6295, 0x642d, 0x6771, 0x6843, 0x68bc, 0x68df, 0x76d7, + 0x6dd8, 0x6e6f, 0x6d9b, 0x706f, 0x71c8, 0x5f53, 0x75d8, 0x7977, + 0x7b49, 0x7b54, 0x7b52, 0x7cd6, 0x7d71, 0x5230, + /* 0x46 */ + 0x8463, 0x8569, 0x85e4, 0x8a0e, 0x8b04, 0x8c46, 0x8e0f, 0x9003, + 0x900f, 0x9419, 0x9676, 0x982d, 0x9a30, 0x95d8, 0x50cd, 0x52d5, + 0x540c, 0x5802, 0x5c0e, 0x61a7, 0x649e, 0x6d1e, 0x77b3, 0x7ae5, + 0x80f4, 0x8404, 0x9053, 0x9285, 0x5ce0, 0x9d07, 0x533f, 0x5f97, + 0x5fb3, 0x6d9c, 0x7279, 0x7763, 0x79bf, 0x7be4, 0x6bd2, 0x72ec, + 0x8aad, 0x6803, 0x6a61, 0x51f8, 0x7a81, 0x6934, 0x5c4a, 0x9cf6, + 0x82eb, 0x5bc5, 0x9149, 0x701e, 0x5678, 0x5c6f, 0x60c7, 0x6566, + 0x6c8c, 0x8c5a, 0x9041, 0x9813, 0x5451, 0x66c7, 0x920d, 0x5948, + 0x90a3, 0x5185, 0x4e4d, 0x51ea, 0x8599, 0x8b0e, 0x7058, 0x637a, + 0x934b, 0x6962, 0x99b4, 0x7e04, 0x7577, 0x5357, 0x6960, 0x8edf, + 0x96e3, 0x6c5d, 0x4e8c, 0x5c3c, 0x5f10, 0x8fe9, 0x5302, 0x8cd1, + 0x8089, 0x8679, 0x5eff, 0x65e5, 0x4e73, 0x5165, + /* 0x47 */ + 0x5982, 0x5c3f, 0x97ee, 0x4efb, 0x598a, 0x5fcd, 0x8a8d, 0x6fe1, + 0x79b0, 0x7962, 0x5be7, 0x8471, 0x732b, 0x71b1, 0x5e74, 0x5ff5, + 0x637b, 0x649a, 0x71c3, 0x7c98, 0x4e43, 0x5efc, 0x4e4b, 0x57dc, + 0x56a2, 0x60a9, 0x6fc3, 0x7d0d, 0x80fd, 0x8133, 0x81bf, 0x8fb2, + 0x8997, 0x86a4, 0x5df4, 0x628a, 0x64ad, 0x8987, 0x6777, 0x6ce2, + 0x6d3e, 0x7436, 0x7834, 0x5a46, 0x7f75, 0x82ad, 0x99ac, 0x4ff3, + 0x5ec3, 0x62dd, 0x6392, 0x6557, 0x676f, 0x76c3, 0x724c, 0x80cc, + 0x80ba, 0x8f29, 0x914d, 0x500d, 0x57f9, 0x5a92, 0x6885, 0x6973, + 0x7164, 0x72fd, 0x8cb7, 0x58f2, 0x8ce0, 0x966a, 0x9019, 0x877f, + 0x79e4, 0x77e7, 0x8429, 0x4f2f, 0x5265, 0x535a, 0x62cd, 0x67cf, + 0x6cca, 0x767d, 0x7b94, 0x7c95, 0x8236, 0x8584, 0x8feb, 0x66dd, + 0x6f20, 0x7206, 0x7e1b, 0x83ab, 0x99c1, 0x9ea6, + /* 0x48 */ + 0x51fd, 0x7bb1, 0x7872, 0x7bb8, 0x8087, 0x7b48, 0x6ae8, 0x5e61, + 0x808c, 0x7551, 0x7560, 0x516b, 0x9262, 0x6e8c, 0x767a, 0x9197, + 0x9aea, 0x4f10, 0x7f70, 0x629c, 0x7b4f, 0x95a5, 0x9ce9, 0x567a, + 0x5859, 0x86e4, 0x96bc, 0x4f34, 0x5224, 0x534a, 0x53cd, 0x53db, + 0x5e06, 0x642c, 0x6591, 0x677f, 0x6c3e, 0x6c4e, 0x7248, 0x72af, + 0x73ed, 0x7554, 0x7e41, 0x822c, 0x85e9, 0x8ca9, 0x7bc4, 0x91c6, + 0x7169, 0x9812, 0x98ef, 0x633d, 0x6669, 0x756a, 0x76e4, 0x78d0, + 0x8543, 0x86ee, 0x532a, 0x5351, 0x5426, 0x5983, 0x5e87, 0x5f7c, + 0x60b2, 0x6249, 0x6279, 0x62ab, 0x6590, 0x6bd4, 0x6ccc, 0x75b2, + 0x76ae, 0x7891, 0x79d8, 0x7dcb, 0x7f77, 0x80a5, 0x88ab, 0x8ab9, + 0x8cbb, 0x907f, 0x975e, 0x98db, 0x6a0b, 0x7c38, 0x5099, 0x5c3e, + 0x5fae, 0x6787, 0x6bd8, 0x7435, 0x7709, 0x7f8e, + /* 0x49 */ + 0x9f3b, 0x67ca, 0x7a17, 0x5339, 0x758b, 0x9aed, 0x5f66, 0x819d, + 0x83f1, 0x8098, 0x5f3c, 0x5fc5, 0x7562, 0x7b46, 0x903c, 0x6867, + 0x59eb, 0x5a9b, 0x7d10, 0x767e, 0x8b2c, 0x4ff5, 0x5f6a, 0x6a19, + 0x6c37, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8a55, 0x8c79, 0x5edf, + 0x63cf, 0x75c5, 0x79d2, 0x82d7, 0x9328, 0x92f2, 0x849c, 0x86ed, + 0x9c2d, 0x54c1, 0x5f6c, 0x658c, 0x6d5c, 0x7015, 0x8ca7, 0x8cd3, + 0x983b, 0x654f, 0x74f6, 0x4e0d, 0x4ed8, 0x57e0, 0x592b, 0x5a66, + 0x5bcc, 0x51a8, 0x5e03, 0x5e9c, 0x6016, 0x6276, 0x6577, 0x65a7, + 0x666e, 0x6d6e, 0x7236, 0x7b26, 0x8150, 0x819a, 0x8299, 0x8b5c, + 0x8ca0, 0x8ce6, 0x8d74, 0x961c, 0x9644, 0x4fae, 0x64ab, 0x6b66, + 0x821e, 0x8461, 0x856a, 0x90e8, 0x5c01, 0x6953, 0x98a8, 0x847a, + 0x8557, 0x4f0f, 0x526f, 0x5fa9, 0x5e45, 0x670d, + /* 0x4a */ + 0x798f, 0x8179, 0x8907, 0x8986, 0x6df5, 0x5f17, 0x6255, 0x6cb8, + 0x4ecf, 0x7269, 0x9b92, 0x5206, 0x543b, 0x5674, 0x58b3, 0x61a4, + 0x626e, 0x711a, 0x596e, 0x7c89, 0x7cde, 0x7d1b, 0x96f0, 0x6587, + 0x805e, 0x4e19, 0x4f75, 0x5175, 0x5840, 0x5e63, 0x5e73, 0x5f0a, + 0x67c4, 0x4e26, 0x853d, 0x9589, 0x965b, 0x7c73, 0x9801, 0x50fb, + 0x58c1, 0x7656, 0x78a7, 0x5225, 0x77a5, 0x8511, 0x7b86, 0x504f, + 0x5909, 0x7247, 0x7bc7, 0x7de8, 0x8fba, 0x8fd4, 0x904d, 0x4fbf, + 0x52c9, 0x5a29, 0x5f01, 0x97ad, 0x4fdd, 0x8217, 0x92ea, 0x5703, + 0x6355, 0x6b69, 0x752b, 0x88dc, 0x8f14, 0x7a42, 0x52df, 0x5893, + 0x6155, 0x620a, 0x66ae, 0x6bcd, 0x7c3f, 0x83e9, 0x5023, 0x4ff8, + 0x5305, 0x5446, 0x5831, 0x5949, 0x5b9d, 0x5cf0, 0x5cef, 0x5d29, + 0x5e96, 0x62b1, 0x6367, 0x653e, 0x65b9, 0x670b, + /* 0x4b */ + 0x6cd5, 0x6ce1, 0x70f9, 0x7832, 0x7e2b, 0x80de, 0x82b3, 0x840c, + 0x84ec, 0x8702, 0x8912, 0x8a2a, 0x8c4a, 0x90a6, 0x92d2, 0x98fd, + 0x9cf3, 0x9d6c, 0x4e4f, 0x4ea1, 0x508d, 0x5256, 0x574a, 0x59a8, + 0x5e3d, 0x5fd8, 0x5fd9, 0x623f, 0x66b4, 0x671b, 0x67d0, 0x68d2, + 0x5192, 0x7d21, 0x80aa, 0x81a8, 0x8b00, 0x8c8c, 0x8cbf, 0x927e, + 0x9632, 0x5420, 0x982c, 0x5317, 0x50d5, 0x535c, 0x58a8, 0x64b2, + 0x6734, 0x7267, 0x7766, 0x7a46, 0x91e6, 0x52c3, 0x6ca1, 0x6b86, + 0x5800, 0x5e4c, 0x5954, 0x672c, 0x7ffb, 0x51e1, 0x76c6, 0x6469, + 0x78e8, 0x9b54, 0x9ebb, 0x57cb, 0x59b9, 0x6627, 0x679a, 0x6bce, + 0x54e9, 0x69d9, 0x5e55, 0x819c, 0x6795, 0x9baa, 0x67fe, 0x9c52, + 0x685d, 0x4ea6, 0x4fe3, 0x53c8, 0x62b9, 0x672b, 0x6cab, 0x8fc4, + 0x4fad, 0x7e6d, 0x9ebf, 0x4e07, 0x6162, 0x6e80, + /* 0x4c */ + 0x6f2b, 0x8513, 0x5473, 0x672a, 0x9b45, 0x5df3, 0x7b95, 0x5cac, + 0x5bc6, 0x871c, 0x6e4a, 0x84d1, 0x7a14, 0x8108, 0x5999, 0x7c8d, + 0x6c11, 0x7720, 0x52d9, 0x5922, 0x7121, 0x725f, 0x77db, 0x9727, + 0x9d61, 0x690b, 0x5a7f, 0x5a18, 0x51a5, 0x540d, 0x547d, 0x660e, + 0x76df, 0x8ff7, 0x9298, 0x9cf4, 0x59ea, 0x725d, 0x6ec5, 0x514d, + 0x68c9, 0x7dbf, 0x7dec, 0x9762, 0x9eba, 0x6478, 0x6a21, 0x8302, + 0x5984, 0x5b5f, 0x6bdb, 0x731b, 0x76f2, 0x7db2, 0x8017, 0x8499, + 0x5132, 0x6728, 0x9ed9, 0x76ee, 0x6762, 0x52ff, 0x9905, 0x5c24, + 0x623b, 0x7c7e, 0x8cb0, 0x554f, 0x60b6, 0x7d0b, 0x9580, 0x5301, + 0x4e5f, 0x51b6, 0x591c, 0x723a, 0x8036, 0x91ce, 0x5f25, 0x77e2, + 0x5384, 0x5f79, 0x7d04, 0x85ac, 0x8a33, 0x8e8d, 0x9756, 0x67f3, + 0x85ae, 0x9453, 0x6109, 0x6108, 0x6cb9, 0x7652, + /* 0x4d */ + 0x8aed, 0x8f38, 0x552f, 0x4f51, 0x512a, 0x52c7, 0x53cb, 0x5ba5, + 0x5e7d, 0x60a0, 0x6182, 0x63d6, 0x6709, 0x67da, 0x6e67, 0x6d8c, + 0x7336, 0x7337, 0x7531, 0x7950, 0x88d5, 0x8a98, 0x904a, 0x9091, + 0x90f5, 0x96c4, 0x878d, 0x5915, 0x4e88, 0x4f59, 0x4e0e, 0x8a89, + 0x8f3f, 0x9810, 0x50ad, 0x5e7c, 0x5996, 0x5bb9, 0x5eb8, 0x63da, + 0x63fa, 0x64c1, 0x66dc, 0x694a, 0x69d8, 0x6d0b, 0x6eb6, 0x7194, + 0x7528, 0x7aaf, 0x7f8a, 0x8000, 0x8449, 0x84c9, 0x8981, 0x8b21, + 0x8e0a, 0x9065, 0x967d, 0x990a, 0x617e, 0x6291, 0x6b32, 0x6c83, + 0x6d74, 0x7fcc, 0x7ffc, 0x6dc0, 0x7f85, 0x87ba, 0x88f8, 0x6765, + 0x83b1, 0x983c, 0x96f7, 0x6d1b, 0x7d61, 0x843d, 0x916a, 0x4e71, + 0x5375, 0x5d50, 0x6b04, 0x6feb, 0x85cd, 0x862d, 0x89a7, 0x5229, + 0x540f, 0x5c65, 0x674e, 0x68a8, 0x7406, 0x7483, + /* 0x4e */ + 0x75e2, 0x88cf, 0x88e1, 0x91cc, 0x96e2, 0x9678, 0x5f8b, 0x7387, + 0x7acb, 0x844e, 0x63a0, 0x7565, 0x5289, 0x6d41, 0x6e9c, 0x7409, + 0x7559, 0x786b, 0x7c92, 0x9686, 0x7adc, 0x9f8d, 0x4fb6, 0x616e, + 0x65c5, 0x865c, 0x4e86, 0x4eae, 0x50da, 0x4e21, 0x51cc, 0x5bee, + 0x6599, 0x6881, 0x6dbc, 0x731f, 0x7642, 0x77ad, 0x7a1c, 0x7ce7, + 0x826f, 0x8ad2, 0x907c, 0x91cf, 0x9675, 0x9818, 0x529b, 0x7dd1, + 0x502b, 0x5398, 0x6797, 0x6dcb, 0x71d0, 0x7433, 0x81e8, 0x8f2a, + 0x96a3, 0x9c57, 0x9e9f, 0x7460, 0x5841, 0x6d99, 0x7d2f, 0x985e, + 0x4ee4, 0x4f36, 0x4f8b, 0x51b7, 0x52b1, 0x5dba, 0x601c, 0x73b2, + 0x793c, 0x82d3, 0x9234, 0x96b7, 0x96f6, 0x970a, 0x9e97, 0x9f62, + 0x66a6, 0x6b74, 0x5217, 0x52a3, 0x70c8, 0x88c2, 0x5ec9, 0x604b, + 0x6190, 0x6f23, 0x7149, 0x7c3e, 0x7df4, 0x806f, + /* 0x4f */ + 0x84ee, 0x9023, 0x932c, 0x5442, 0x9b6f, 0x6ad3, 0x7089, 0x8cc2, + 0x8def, 0x9732, 0x52b4, 0x5a41, 0x5eca, 0x5f04, 0x6717, 0x697c, + 0x6994, 0x6d6a, 0x6f0f, 0x7262, 0x72fc, 0x7bed, 0x8001, 0x807e, + 0x874b, 0x90ce, 0x516d, 0x9e93, 0x7984, 0x808b, 0x9332, 0x8ad6, + 0x502d, 0x548c, 0x8a71, 0x6b6a, 0x8cc4, 0x8107, 0x60d1, 0x67a0, + 0x9df2, 0x4e99, 0x4e98, 0x9c10, 0x8a6b, 0x85c1, 0x8568, 0x6900, + 0x6e7e, 0x7897, 0x8155, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x50 */ + 0x5f0c, 0x4e10, 0x4e15, 0x4e2a, 0x4e31, 0x4e36, 0x4e3c, 0x4e3f, + 0x4e42, 0x4e56, 0x4e58, 0x4e82, 0x4e85, 0x8c6b, 0x4e8a, 0x8212, + 0x5f0d, 0x4e8e, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea2, 0x4eb0, 0x4eb3, + 0x4eb6, 0x4ece, 0x4ecd, 0x4ec4, 0x4ec6, 0x4ec2, 0x4ed7, 0x4ede, + 0x4eed, 0x4edf, 0x4ef7, 0x4f09, 0x4f5a, 0x4f30, 0x4f5b, 0x4f5d, + 0x4f57, 0x4f47, 0x4f76, 0x4f88, 0x4f8f, 0x4f98, 0x4f7b, 0x4f69, + 0x4f70, 0x4f91, 0x4f6f, 0x4f86, 0x4f96, 0x5118, 0x4fd4, 0x4fdf, + 0x4fce, 0x4fd8, 0x4fdb, 0x4fd1, 0x4fda, 0x4fd0, 0x4fe4, 0x4fe5, + 0x501a, 0x5028, 0x5014, 0x502a, 0x5025, 0x5005, 0x4f1c, 0x4ff6, + 0x5021, 0x5029, 0x502c, 0x4ffe, 0x4fef, 0x5011, 0x5006, 0x5043, + 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505a, 0x5056, 0x506c, + 0x5078, 0x5080, 0x509a, 0x5085, 0x50b4, 0x50b2, + /* 0x51 */ + 0x50c9, 0x50ca, 0x50b3, 0x50c2, 0x50d6, 0x50de, 0x50e5, 0x50ed, + 0x50e3, 0x50ee, 0x50f9, 0x50f5, 0x5109, 0x5101, 0x5102, 0x5116, + 0x5115, 0x5114, 0x511a, 0x5121, 0x513a, 0x5137, 0x513c, 0x513b, + 0x513f, 0x5140, 0x5152, 0x514c, 0x5154, 0x5162, 0x7af8, 0x5169, + 0x516a, 0x516e, 0x5180, 0x5182, 0x56d8, 0x518c, 0x5189, 0x518f, + 0x5191, 0x5193, 0x5195, 0x5196, 0x51a4, 0x51a6, 0x51a2, 0x51a9, + 0x51aa, 0x51ab, 0x51b3, 0x51b1, 0x51b2, 0x51b0, 0x51b5, 0x51bd, + 0x51c5, 0x51c9, 0x51db, 0x51e0, 0x8655, 0x51e9, 0x51ed, 0x51f0, + 0x51f5, 0x51fe, 0x5204, 0x520b, 0x5214, 0x520e, 0x5227, 0x522a, + 0x522e, 0x5233, 0x5239, 0x524f, 0x5244, 0x524b, 0x524c, 0x525e, + 0x5254, 0x526a, 0x5274, 0x5269, 0x5273, 0x527f, 0x527d, 0x528d, + 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8fa8, + /* 0x52 */ + 0x8fa7, 0x52ac, 0x52ad, 0x52bc, 0x52b5, 0x52c1, 0x52cd, 0x52d7, + 0x52de, 0x52e3, 0x52e6, 0x98ed, 0x52e0, 0x52f3, 0x52f5, 0x52f8, + 0x52f9, 0x5306, 0x5308, 0x7538, 0x530d, 0x5310, 0x530f, 0x5315, + 0x531a, 0x5323, 0x532f, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, + 0x5345, 0x4e17, 0x5349, 0x534d, 0x51d6, 0x535e, 0x5369, 0x536e, + 0x5918, 0x537b, 0x5377, 0x5382, 0x5396, 0x53a0, 0x53a6, 0x53a5, + 0x53ae, 0x53b0, 0x53b6, 0x53c3, 0x7c12, 0x96d9, 0x53df, 0x66fc, + 0x71ee, 0x53ee, 0x53e8, 0x53ed, 0x53fa, 0x5401, 0x543d, 0x5440, + 0x542c, 0x542d, 0x543c, 0x542e, 0x5436, 0x5429, 0x541d, 0x544e, + 0x548f, 0x5475, 0x548e, 0x545f, 0x5471, 0x5477, 0x5470, 0x5492, + 0x547b, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54c7, 0x54a2, + 0x54b8, 0x54a5, 0x54ac, 0x54c4, 0x54c8, 0x54a8, + /* 0x53 */ + 0x54ab, 0x54c2, 0x54a4, 0x54be, 0x54bc, 0x54d8, 0x54e5, 0x54e6, + 0x550f, 0x5514, 0x54fd, 0x54ee, 0x54ed, 0x54fa, 0x54e2, 0x5539, + 0x5540, 0x5563, 0x554c, 0x552e, 0x555c, 0x5545, 0x5556, 0x5557, + 0x5538, 0x5533, 0x555d, 0x5599, 0x5580, 0x54af, 0x558a, 0x559f, + 0x557b, 0x557e, 0x5598, 0x559e, 0x55ae, 0x557c, 0x5583, 0x55a9, + 0x5587, 0x55a8, 0x55da, 0x55c5, 0x55df, 0x55c4, 0x55dc, 0x55e4, + 0x55d4, 0x5614, 0x55f7, 0x5616, 0x55fe, 0x55fd, 0x561b, 0x55f9, + 0x564e, 0x5650, 0x71df, 0x5634, 0x5636, 0x5632, 0x5638, 0x566b, + 0x5664, 0x562f, 0x566c, 0x566a, 0x5686, 0x5680, 0x568a, 0x56a0, + 0x5694, 0x568f, 0x56a5, 0x56ae, 0x56b6, 0x56b4, 0x56c2, 0x56bc, + 0x56c1, 0x56c3, 0x56c0, 0x56c8, 0x56ce, 0x56d1, 0x56d3, 0x56d7, + 0x56ee, 0x56f9, 0x5700, 0x56ff, 0x5704, 0x5709, + /* 0x54 */ + 0x5708, 0x570b, 0x570d, 0x5713, 0x5718, 0x5716, 0x55c7, 0x571c, + 0x5726, 0x5737, 0x5738, 0x574e, 0x573b, 0x5740, 0x574f, 0x5769, + 0x57c0, 0x5788, 0x5761, 0x577f, 0x5789, 0x5793, 0x57a0, 0x57b3, + 0x57a4, 0x57aa, 0x57b0, 0x57c3, 0x57c6, 0x57d4, 0x57d2, 0x57d3, + 0x580a, 0x57d6, 0x57e3, 0x580b, 0x5819, 0x581d, 0x5872, 0x5821, + 0x5862, 0x584b, 0x5870, 0x6bc0, 0x5852, 0x583d, 0x5879, 0x5885, + 0x58b9, 0x589f, 0x58ab, 0x58ba, 0x58de, 0x58bb, 0x58b8, 0x58ae, + 0x58c5, 0x58d3, 0x58d1, 0x58d7, 0x58d9, 0x58d8, 0x58e5, 0x58dc, + 0x58e4, 0x58df, 0x58ef, 0x58fa, 0x58f9, 0x58fb, 0x58fc, 0x58fd, + 0x5902, 0x590a, 0x5910, 0x591b, 0x68a6, 0x5925, 0x592c, 0x592d, + 0x5932, 0x5938, 0x593e, 0x7ad2, 0x5955, 0x5950, 0x594e, 0x595a, + 0x5958, 0x5962, 0x5960, 0x5967, 0x596c, 0x5969, + /* 0x55 */ + 0x5978, 0x5981, 0x599d, 0x4f5e, 0x4fab, 0x59a3, 0x59b2, 0x59c6, + 0x59e8, 0x59dc, 0x598d, 0x59d9, 0x59da, 0x5a25, 0x5a1f, 0x5a11, + 0x5a1c, 0x5a09, 0x5a1a, 0x5a40, 0x5a6c, 0x5a49, 0x5a35, 0x5a36, + 0x5a62, 0x5a6a, 0x5a9a, 0x5abc, 0x5abe, 0x5acb, 0x5ac2, 0x5abd, + 0x5ae3, 0x5ad7, 0x5ae6, 0x5ae9, 0x5ad6, 0x5afa, 0x5afb, 0x5b0c, + 0x5b0b, 0x5b16, 0x5b32, 0x5ad0, 0x5b2a, 0x5b36, 0x5b3e, 0x5b43, + 0x5b45, 0x5b40, 0x5b51, 0x5b55, 0x5b5a, 0x5b5b, 0x5b65, 0x5b69, + 0x5b70, 0x5b73, 0x5b75, 0x5b78, 0x6588, 0x5b7a, 0x5b80, 0x5b83, + 0x5ba6, 0x5bb8, 0x5bc3, 0x5bc7, 0x5bc9, 0x5bd4, 0x5bd0, 0x5be4, + 0x5be6, 0x5be2, 0x5bde, 0x5be5, 0x5beb, 0x5bf0, 0x5bf6, 0x5bf3, + 0x5c05, 0x5c07, 0x5c08, 0x5c0d, 0x5c13, 0x5c20, 0x5c22, 0x5c28, + 0x5c38, 0x5c39, 0x5c41, 0x5c46, 0x5c4e, 0x5c53, + /* 0x56 */ + 0x5c50, 0x5c4f, 0x5b71, 0x5c6c, 0x5c6e, 0x4e62, 0x5c76, 0x5c79, + 0x5c8c, 0x5c91, 0x5c94, 0x599b, 0x5cab, 0x5cbb, 0x5cb6, 0x5cbc, + 0x5cb7, 0x5cc5, 0x5cbe, 0x5cc7, 0x5cd9, 0x5ce9, 0x5cfd, 0x5cfa, + 0x5ced, 0x5d8c, 0x5cea, 0x5d0b, 0x5d15, 0x5d17, 0x5d5c, 0x5d1f, + 0x5d1b, 0x5d11, 0x5d14, 0x5d22, 0x5d1a, 0x5d19, 0x5d18, 0x5d4c, + 0x5d52, 0x5d4e, 0x5d4b, 0x5d6c, 0x5d73, 0x5d76, 0x5d87, 0x5d84, + 0x5d82, 0x5da2, 0x5d9d, 0x5dac, 0x5dae, 0x5dbd, 0x5d90, 0x5db7, + 0x5dbc, 0x5dc9, 0x5dcd, 0x5dd3, 0x5dd2, 0x5dd6, 0x5ddb, 0x5deb, + 0x5df2, 0x5df5, 0x5e0b, 0x5e1a, 0x5e19, 0x5e11, 0x5e1b, 0x5e36, + 0x5e37, 0x5e44, 0x5e43, 0x5e40, 0x5e4e, 0x5e57, 0x5e54, 0x5e5f, + 0x5e62, 0x5e64, 0x5e47, 0x5e75, 0x5e76, 0x5e7a, 0x9ebc, 0x5e7f, + 0x5ea0, 0x5ec1, 0x5ec2, 0x5ec8, 0x5ed0, 0x5ecf, + /* 0x57 */ + 0x5ed6, 0x5ee3, 0x5edd, 0x5eda, 0x5edb, 0x5ee2, 0x5ee1, 0x5ee8, + 0x5ee9, 0x5eec, 0x5ef1, 0x5ef3, 0x5ef0, 0x5ef4, 0x5ef8, 0x5efe, + 0x5f03, 0x5f09, 0x5f5d, 0x5f5c, 0x5f0b, 0x5f11, 0x5f16, 0x5f29, + 0x5f2d, 0x5f38, 0x5f41, 0x5f48, 0x5f4c, 0x5f4e, 0x5f2f, 0x5f51, + 0x5f56, 0x5f57, 0x5f59, 0x5f61, 0x5f6d, 0x5f73, 0x5f77, 0x5f83, + 0x5f82, 0x5f7f, 0x5f8a, 0x5f88, 0x5f91, 0x5f87, 0x5f9e, 0x5f99, + 0x5f98, 0x5fa0, 0x5fa8, 0x5fad, 0x5fbc, 0x5fd6, 0x5ffb, 0x5fe4, + 0x5ff8, 0x5ff1, 0x5fdd, 0x60b3, 0x5fff, 0x6021, 0x6060, 0x6019, + 0x6010, 0x6029, 0x600e, 0x6031, 0x601b, 0x6015, 0x602b, 0x6026, + 0x600f, 0x603a, 0x605a, 0x6041, 0x606a, 0x6077, 0x605f, 0x604a, + 0x6046, 0x604d, 0x6063, 0x6043, 0x6064, 0x6042, 0x606c, 0x606b, + 0x6059, 0x6081, 0x608d, 0x60e7, 0x6083, 0x609a, + /* 0x58 */ + 0x6084, 0x609b, 0x6096, 0x6097, 0x6092, 0x60a7, 0x608b, 0x60e1, + 0x60b8, 0x60e0, 0x60d3, 0x60b4, 0x5ff0, 0x60bd, 0x60c6, 0x60b5, + 0x60d8, 0x614d, 0x6115, 0x6106, 0x60f6, 0x60f7, 0x6100, 0x60f4, + 0x60fa, 0x6103, 0x6121, 0x60fb, 0x60f1, 0x610d, 0x610e, 0x6147, + 0x613e, 0x6128, 0x6127, 0x614a, 0x613f, 0x613c, 0x612c, 0x6134, + 0x613d, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615a, + 0x616b, 0x6174, 0x616f, 0x6165, 0x6171, 0x615f, 0x615d, 0x6153, + 0x6175, 0x6199, 0x6196, 0x6187, 0x61ac, 0x6194, 0x619a, 0x618a, + 0x6191, 0x61ab, 0x61ae, 0x61cc, 0x61ca, 0x61c9, 0x61f7, 0x61c8, + 0x61c3, 0x61c6, 0x61ba, 0x61cb, 0x7f79, 0x61cd, 0x61e6, 0x61e3, + 0x61f6, 0x61fa, 0x61f4, 0x61ff, 0x61fd, 0x61fc, 0x61fe, 0x6200, + 0x6208, 0x6209, 0x620d, 0x620c, 0x6214, 0x621b, + /* 0x59 */ + 0x621e, 0x6221, 0x622a, 0x622e, 0x6230, 0x6232, 0x6233, 0x6241, + 0x624e, 0x625e, 0x6263, 0x625b, 0x6260, 0x6268, 0x627c, 0x6282, + 0x6289, 0x627e, 0x6292, 0x6293, 0x6296, 0x62d4, 0x6283, 0x6294, + 0x62d7, 0x62d1, 0x62bb, 0x62cf, 0x62ff, 0x62c6, 0x64d4, 0x62c8, + 0x62dc, 0x62cc, 0x62ca, 0x62c2, 0x62c7, 0x629b, 0x62c9, 0x630c, + 0x62ee, 0x62f1, 0x6327, 0x6302, 0x6308, 0x62ef, 0x62f5, 0x6350, + 0x633e, 0x634d, 0x641c, 0x634f, 0x6396, 0x638e, 0x6380, 0x63ab, + 0x6376, 0x63a3, 0x638f, 0x6389, 0x639f, 0x63b5, 0x636b, 0x6369, + 0x63be, 0x63e9, 0x63c0, 0x63c6, 0x63e3, 0x63c9, 0x63d2, 0x63f6, + 0x63c4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651d, + 0x6417, 0x6428, 0x640f, 0x6467, 0x646f, 0x6476, 0x644e, 0x652a, + 0x6495, 0x6493, 0x64a5, 0x64a9, 0x6488, 0x64bc, + /* 0x5a */ + 0x64da, 0x64d2, 0x64c5, 0x64c7, 0x64bb, 0x64d8, 0x64c2, 0x64f1, + 0x64e7, 0x8209, 0x64e0, 0x64e1, 0x62ac, 0x64e3, 0x64ef, 0x652c, + 0x64f6, 0x64f4, 0x64f2, 0x64fa, 0x6500, 0x64fd, 0x6518, 0x651c, + 0x6505, 0x6524, 0x6523, 0x652b, 0x6534, 0x6535, 0x6537, 0x6536, + 0x6538, 0x754b, 0x6548, 0x6556, 0x6555, 0x654d, 0x6558, 0x655e, + 0x655d, 0x6572, 0x6578, 0x6582, 0x6583, 0x8b8a, 0x659b, 0x659f, + 0x65ab, 0x65b7, 0x65c3, 0x65c6, 0x65c1, 0x65c4, 0x65cc, 0x65d2, + 0x65db, 0x65d9, 0x65e0, 0x65e1, 0x65f1, 0x6772, 0x660a, 0x6603, + 0x65fb, 0x6773, 0x6635, 0x6636, 0x6634, 0x661c, 0x664f, 0x6644, + 0x6649, 0x6641, 0x665e, 0x665d, 0x6664, 0x6667, 0x6668, 0x665f, + 0x6662, 0x6670, 0x6683, 0x6688, 0x668e, 0x6689, 0x6684, 0x6698, + 0x669d, 0x66c1, 0x66b9, 0x66c9, 0x66be, 0x66bc, + /* 0x5b */ + 0x66c4, 0x66b8, 0x66d6, 0x66da, 0x66e0, 0x663f, 0x66e6, 0x66e9, + 0x66f0, 0x66f5, 0x66f7, 0x670f, 0x6716, 0x671e, 0x6726, 0x6727, + 0x9738, 0x672e, 0x673f, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, + 0x675e, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67a9, + 0x677c, 0x676a, 0x678c, 0x678b, 0x67a6, 0x67a1, 0x6785, 0x67b7, + 0x67ef, 0x67b4, 0x67ec, 0x67b3, 0x67e9, 0x67b8, 0x67e4, 0x67de, + 0x67dd, 0x67e2, 0x67ee, 0x67b9, 0x67ce, 0x67c6, 0x67e7, 0x6a9c, + 0x681e, 0x6846, 0x6829, 0x6840, 0x684d, 0x6832, 0x684e, 0x68b3, + 0x682b, 0x6859, 0x6863, 0x6877, 0x687f, 0x689f, 0x688f, 0x68ad, + 0x6894, 0x689d, 0x689b, 0x6883, 0x6aae, 0x68b9, 0x6874, 0x68b5, + 0x68a0, 0x68ba, 0x690f, 0x688d, 0x687e, 0x6901, 0x68ca, 0x6908, + 0x68d8, 0x6922, 0x6926, 0x68e1, 0x690c, 0x68cd, + /* 0x5c */ + 0x68d4, 0x68e7, 0x68d5, 0x6936, 0x6912, 0x6904, 0x68d7, 0x68e3, + 0x6925, 0x68f9, 0x68e0, 0x68ef, 0x6928, 0x692a, 0x691a, 0x6923, + 0x6921, 0x68c6, 0x6979, 0x6977, 0x695c, 0x6978, 0x696b, 0x6954, + 0x697e, 0x696e, 0x6939, 0x6974, 0x693d, 0x6959, 0x6930, 0x6961, + 0x695e, 0x695d, 0x6981, 0x696a, 0x69b2, 0x69ae, 0x69d0, 0x69bf, + 0x69c1, 0x69d3, 0x69be, 0x69ce, 0x5be8, 0x69ca, 0x69dd, 0x69bb, + 0x69c3, 0x69a7, 0x6a2e, 0x6991, 0x69a0, 0x699c, 0x6995, 0x69b4, + 0x69de, 0x69e8, 0x6a02, 0x6a1b, 0x69ff, 0x6b0a, 0x69f9, 0x69f2, + 0x69e7, 0x6a05, 0x69b1, 0x6a1e, 0x69ed, 0x6a14, 0x69eb, 0x6a0a, + 0x6a12, 0x6ac1, 0x6a23, 0x6a13, 0x6a44, 0x6a0c, 0x6a72, 0x6a36, + 0x6a78, 0x6a47, 0x6a62, 0x6a59, 0x6a66, 0x6a48, 0x6a38, 0x6a22, + 0x6a90, 0x6a8d, 0x6aa0, 0x6a84, 0x6aa2, 0x6aa3, + /* 0x5d */ + 0x6a97, 0x8617, 0x6abb, 0x6ac3, 0x6ac2, 0x6ab8, 0x6ab3, 0x6aac, + 0x6ade, 0x6ad1, 0x6adf, 0x6aaa, 0x6ada, 0x6aea, 0x6afb, 0x6b05, + 0x8616, 0x6afa, 0x6b12, 0x6b16, 0x9b31, 0x6b1f, 0x6b38, 0x6b37, + 0x76dc, 0x6b39, 0x98ee, 0x6b47, 0x6b43, 0x6b49, 0x6b50, 0x6b59, + 0x6b54, 0x6b5b, 0x6b5f, 0x6b61, 0x6b78, 0x6b79, 0x6b7f, 0x6b80, + 0x6b84, 0x6b83, 0x6b8d, 0x6b98, 0x6b95, 0x6b9e, 0x6ba4, 0x6baa, + 0x6bab, 0x6baf, 0x6bb2, 0x6bb1, 0x6bb3, 0x6bb7, 0x6bbc, 0x6bc6, + 0x6bcb, 0x6bd3, 0x6bdf, 0x6bec, 0x6beb, 0x6bf3, 0x6bef, 0x9ebe, + 0x6c08, 0x6c13, 0x6c14, 0x6c1b, 0x6c24, 0x6c23, 0x6c5e, 0x6c55, + 0x6c62, 0x6c6a, 0x6c82, 0x6c8d, 0x6c9a, 0x6c81, 0x6c9b, 0x6c7e, + 0x6c68, 0x6c73, 0x6c92, 0x6c90, 0x6cc4, 0x6cf1, 0x6cd3, 0x6cbd, + 0x6cd7, 0x6cc5, 0x6cdd, 0x6cae, 0x6cb1, 0x6cbe, + /* 0x5e */ + 0x6cba, 0x6cdb, 0x6cef, 0x6cd9, 0x6cea, 0x6d1f, 0x884d, 0x6d36, + 0x6d2b, 0x6d3d, 0x6d38, 0x6d19, 0x6d35, 0x6d33, 0x6d12, 0x6d0c, + 0x6d63, 0x6d93, 0x6d64, 0x6d5a, 0x6d79, 0x6d59, 0x6d8e, 0x6d95, + 0x6fe4, 0x6d85, 0x6df9, 0x6e15, 0x6e0a, 0x6db5, 0x6dc7, 0x6de6, + 0x6db8, 0x6dc6, 0x6dec, 0x6dde, 0x6dcc, 0x6de8, 0x6dd2, 0x6dc5, + 0x6dfa, 0x6dd9, 0x6de4, 0x6dd5, 0x6dea, 0x6dee, 0x6e2d, 0x6e6e, + 0x6e2e, 0x6e19, 0x6e72, 0x6e5f, 0x6e3e, 0x6e23, 0x6e6b, 0x6e2b, + 0x6e76, 0x6e4d, 0x6e1f, 0x6e43, 0x6e3a, 0x6e4e, 0x6e24, 0x6eff, + 0x6e1d, 0x6e38, 0x6e82, 0x6eaa, 0x6e98, 0x6ec9, 0x6eb7, 0x6ed3, + 0x6ebd, 0x6eaf, 0x6ec4, 0x6eb2, 0x6ed4, 0x6ed5, 0x6e8f, 0x6ea5, + 0x6ec2, 0x6e9f, 0x6f41, 0x6f11, 0x704c, 0x6eec, 0x6ef8, 0x6efe, + 0x6f3f, 0x6ef2, 0x6f31, 0x6eef, 0x6f32, 0x6ecc, + /* 0x5f */ + 0x6f3e, 0x6f13, 0x6ef7, 0x6f86, 0x6f7a, 0x6f78, 0x6f81, 0x6f80, + 0x6f6f, 0x6f5b, 0x6ff3, 0x6f6d, 0x6f82, 0x6f7c, 0x6f58, 0x6f8e, + 0x6f91, 0x6fc2, 0x6f66, 0x6fb3, 0x6fa3, 0x6fa1, 0x6fa4, 0x6fb9, + 0x6fc6, 0x6faa, 0x6fdf, 0x6fd5, 0x6fec, 0x6fd4, 0x6fd8, 0x6ff1, + 0x6fee, 0x6fdb, 0x7009, 0x700b, 0x6ffa, 0x7011, 0x7001, 0x700f, + 0x6ffe, 0x701b, 0x701a, 0x6f74, 0x701d, 0x7018, 0x701f, 0x7030, + 0x703e, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70af, 0x70f1, + 0x70ac, 0x70b8, 0x70b3, 0x70ae, 0x70df, 0x70cb, 0x70dd, 0x70d9, + 0x7109, 0x70fd, 0x711c, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166, + 0x7162, 0x714c, 0x7156, 0x716c, 0x718f, 0x71fb, 0x7184, 0x7195, + 0x71a8, 0x71ac, 0x71d7, 0x71b9, 0x71be, 0x71d2, 0x71c9, 0x71d4, + 0x71ce, 0x71e0, 0x71ec, 0x71e7, 0x71f5, 0x71fc, + /* 0x60 */ + 0x71f9, 0x71ff, 0x720d, 0x7210, 0x721b, 0x7228, 0x722d, 0x722c, + 0x7230, 0x7232, 0x723b, 0x723c, 0x723f, 0x7240, 0x7246, 0x724b, + 0x7258, 0x7274, 0x727e, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, + 0x72a2, 0x72a7, 0x72b9, 0x72b2, 0x72c3, 0x72c6, 0x72c4, 0x72ce, + 0x72d2, 0x72e2, 0x72e0, 0x72e1, 0x72f9, 0x72f7, 0x500f, 0x7317, + 0x730a, 0x731c, 0x7316, 0x731d, 0x7334, 0x732f, 0x7329, 0x7325, + 0x733e, 0x734e, 0x734f, 0x9ed8, 0x7357, 0x736a, 0x7368, 0x7370, + 0x7378, 0x7375, 0x737b, 0x737a, 0x73c8, 0x73b3, 0x73ce, 0x73bb, + 0x73c0, 0x73e5, 0x73ee, 0x73de, 0x74a2, 0x7405, 0x746f, 0x7425, + 0x73f8, 0x7432, 0x743a, 0x7455, 0x743f, 0x745f, 0x7459, 0x7441, + 0x745c, 0x7469, 0x7470, 0x7463, 0x746a, 0x7476, 0x747e, 0x748b, + 0x749e, 0x74a7, 0x74ca, 0x74cf, 0x74d4, 0x73f1, + /* 0x61 */ + 0x74e0, 0x74e3, 0x74e7, 0x74e9, 0x74ee, 0x74f2, 0x74f0, 0x74f1, + 0x74f8, 0x74f7, 0x7504, 0x7503, 0x7505, 0x750c, 0x750e, 0x750d, + 0x7515, 0x7513, 0x751e, 0x7526, 0x752c, 0x753c, 0x7544, 0x754d, + 0x754a, 0x7549, 0x755b, 0x7546, 0x755a, 0x7569, 0x7564, 0x7567, + 0x756b, 0x756d, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758a, + 0x7589, 0x7582, 0x7594, 0x759a, 0x759d, 0x75a5, 0x75a3, 0x75c2, + 0x75b3, 0x75c3, 0x75b5, 0x75bd, 0x75b8, 0x75bc, 0x75b1, 0x75cd, + 0x75ca, 0x75d2, 0x75d9, 0x75e3, 0x75de, 0x75fe, 0x75ff, 0x75fc, + 0x7601, 0x75f0, 0x75fa, 0x75f2, 0x75f3, 0x760b, 0x760d, 0x7609, + 0x761f, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630, + 0x763b, 0x7647, 0x7648, 0x7646, 0x765c, 0x7658, 0x7661, 0x7662, + 0x7668, 0x7669, 0x766a, 0x7667, 0x766c, 0x7670, + /* 0x62 */ + 0x7672, 0x7676, 0x7678, 0x767c, 0x7680, 0x7683, 0x7688, 0x768b, + 0x768e, 0x7696, 0x7693, 0x7699, 0x769a, 0x76b0, 0x76b4, 0x76b8, + 0x76b9, 0x76ba, 0x76c2, 0x76cd, 0x76d6, 0x76d2, 0x76de, 0x76e1, + 0x76e5, 0x76e7, 0x76ea, 0x862f, 0x76fb, 0x7708, 0x7707, 0x7704, + 0x7729, 0x7724, 0x771e, 0x7725, 0x7726, 0x771b, 0x7737, 0x7738, + 0x7747, 0x775a, 0x7768, 0x776b, 0x775b, 0x7765, 0x777f, 0x777e, + 0x7779, 0x778e, 0x778b, 0x7791, 0x77a0, 0x779e, 0x77b0, 0x77b6, + 0x77b9, 0x77bf, 0x77bc, 0x77bd, 0x77bb, 0x77c7, 0x77cd, 0x77d7, + 0x77da, 0x77dc, 0x77e3, 0x77ee, 0x77fc, 0x780c, 0x7812, 0x7926, + 0x7820, 0x792a, 0x7845, 0x788e, 0x7874, 0x7886, 0x787c, 0x789a, + 0x788c, 0x78a3, 0x78b5, 0x78aa, 0x78af, 0x78d1, 0x78c6, 0x78cb, + 0x78d4, 0x78be, 0x78bc, 0x78c5, 0x78ca, 0x78ec, + /* 0x63 */ + 0x78e7, 0x78da, 0x78fd, 0x78f4, 0x7907, 0x7912, 0x7911, 0x7919, + 0x792c, 0x792b, 0x7940, 0x7960, 0x7957, 0x795f, 0x795a, 0x7955, + 0x7953, 0x797a, 0x797f, 0x798a, 0x799d, 0x79a7, 0x9f4b, 0x79aa, + 0x79ae, 0x79b3, 0x79b9, 0x79ba, 0x79c9, 0x79d5, 0x79e7, 0x79ec, + 0x79e1, 0x79e3, 0x7a08, 0x7a0d, 0x7a18, 0x7a19, 0x7a20, 0x7a1f, + 0x7980, 0x7a31, 0x7a3b, 0x7a3e, 0x7a37, 0x7a43, 0x7a57, 0x7a49, + 0x7a61, 0x7a62, 0x7a69, 0x9f9d, 0x7a70, 0x7a79, 0x7a7d, 0x7a88, + 0x7a97, 0x7a95, 0x7a98, 0x7a96, 0x7aa9, 0x7ac8, 0x7ab0, 0x7ab6, + 0x7ac5, 0x7ac4, 0x7abf, 0x9083, 0x7ac7, 0x7aca, 0x7acd, 0x7acf, + 0x7ad5, 0x7ad3, 0x7ad9, 0x7ada, 0x7add, 0x7ae1, 0x7ae2, 0x7ae6, + 0x7aed, 0x7af0, 0x7b02, 0x7b0f, 0x7b0a, 0x7b06, 0x7b33, 0x7b18, + 0x7b19, 0x7b1e, 0x7b35, 0x7b28, 0x7b36, 0x7b50, + /* 0x64 */ + 0x7b7a, 0x7b04, 0x7b4d, 0x7b0b, 0x7b4c, 0x7b45, 0x7b75, 0x7b65, + 0x7b74, 0x7b67, 0x7b70, 0x7b71, 0x7b6c, 0x7b6e, 0x7b9d, 0x7b98, + 0x7b9f, 0x7b8d, 0x7b9c, 0x7b9a, 0x7b8b, 0x7b92, 0x7b8f, 0x7b5d, + 0x7b99, 0x7bcb, 0x7bc1, 0x7bcc, 0x7bcf, 0x7bb4, 0x7bc6, 0x7bdd, + 0x7be9, 0x7c11, 0x7c14, 0x7be6, 0x7be5, 0x7c60, 0x7c00, 0x7c07, + 0x7c13, 0x7bf3, 0x7bf7, 0x7c17, 0x7c0d, 0x7bf6, 0x7c23, 0x7c27, + 0x7c2a, 0x7c1f, 0x7c37, 0x7c2b, 0x7c3d, 0x7c4c, 0x7c43, 0x7c54, + 0x7c4f, 0x7c40, 0x7c50, 0x7c58, 0x7c5f, 0x7c64, 0x7c56, 0x7c65, + 0x7c6c, 0x7c75, 0x7c83, 0x7c90, 0x7ca4, 0x7cad, 0x7ca2, 0x7cab, + 0x7ca1, 0x7ca8, 0x7cb3, 0x7cb2, 0x7cb1, 0x7cae, 0x7cb9, 0x7cbd, + 0x7cc0, 0x7cc5, 0x7cc2, 0x7cd8, 0x7cd2, 0x7cdc, 0x7ce2, 0x9b3b, + 0x7cef, 0x7cf2, 0x7cf4, 0x7cf6, 0x7cfa, 0x7d06, + /* 0x65 */ + 0x7d02, 0x7d1c, 0x7d15, 0x7d0a, 0x7d45, 0x7d4b, 0x7d2e, 0x7d32, + 0x7d3f, 0x7d35, 0x7d46, 0x7d73, 0x7d56, 0x7d4e, 0x7d72, 0x7d68, + 0x7d6e, 0x7d4f, 0x7d63, 0x7d93, 0x7d89, 0x7d5b, 0x7d8f, 0x7d7d, + 0x7d9b, 0x7dba, 0x7dae, 0x7da3, 0x7db5, 0x7dc7, 0x7dbd, 0x7dab, + 0x7e3d, 0x7da2, 0x7daf, 0x7ddc, 0x7db8, 0x7d9f, 0x7db0, 0x7dd8, + 0x7ddd, 0x7de4, 0x7dde, 0x7dfb, 0x7df2, 0x7de1, 0x7e05, 0x7e0a, + 0x7e23, 0x7e21, 0x7e12, 0x7e31, 0x7e1f, 0x7e09, 0x7e0b, 0x7e22, + 0x7e46, 0x7e66, 0x7e3b, 0x7e35, 0x7e39, 0x7e43, 0x7e37, 0x7e32, + 0x7e3a, 0x7e67, 0x7e5d, 0x7e56, 0x7e5e, 0x7e59, 0x7e5a, 0x7e79, + 0x7e6a, 0x7e69, 0x7e7c, 0x7e7b, 0x7e83, 0x7dd5, 0x7e7d, 0x8fae, + 0x7e7f, 0x7e88, 0x7e89, 0x7e8c, 0x7e92, 0x7e90, 0x7e93, 0x7e94, + 0x7e96, 0x7e8e, 0x7e9b, 0x7e9c, 0x7f38, 0x7f3a, + /* 0x66 */ + 0x7f45, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f50, 0x7f51, 0x7f55, 0x7f54, + 0x7f58, 0x7f5f, 0x7f60, 0x7f68, 0x7f69, 0x7f67, 0x7f78, 0x7f82, + 0x7f86, 0x7f83, 0x7f88, 0x7f87, 0x7f8c, 0x7f94, 0x7f9e, 0x7f9d, + 0x7f9a, 0x7fa3, 0x7faf, 0x7fb2, 0x7fb9, 0x7fae, 0x7fb6, 0x7fb8, + 0x8b71, 0x7fc5, 0x7fc6, 0x7fca, 0x7fd5, 0x7fd4, 0x7fe1, 0x7fe6, + 0x7fe9, 0x7ff3, 0x7ff9, 0x98dc, 0x8006, 0x8004, 0x800b, 0x8012, + 0x8018, 0x8019, 0x801c, 0x8021, 0x8028, 0x803f, 0x803b, 0x804a, + 0x8046, 0x8052, 0x8058, 0x805a, 0x805f, 0x8062, 0x8068, 0x8073, + 0x8072, 0x8070, 0x8076, 0x8079, 0x807d, 0x807f, 0x8084, 0x8086, + 0x8085, 0x809b, 0x8093, 0x809a, 0x80ad, 0x5190, 0x80ac, 0x80db, + 0x80e5, 0x80d9, 0x80dd, 0x80c4, 0x80da, 0x80d6, 0x8109, 0x80ef, + 0x80f1, 0x811b, 0x8129, 0x8123, 0x812f, 0x814b, + /* 0x67 */ + 0x968b, 0x8146, 0x813e, 0x8153, 0x8151, 0x80fc, 0x8171, 0x816e, + 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818a, 0x8180, 0x8182, + 0x81a0, 0x8195, 0x81a4, 0x81a3, 0x815f, 0x8193, 0x81a9, 0x81b0, + 0x81b5, 0x81be, 0x81b8, 0x81bd, 0x81c0, 0x81c2, 0x81ba, 0x81c9, + 0x81cd, 0x81d1, 0x81d9, 0x81d8, 0x81c8, 0x81da, 0x81df, 0x81e0, + 0x81e7, 0x81fa, 0x81fb, 0x81fe, 0x8201, 0x8202, 0x8205, 0x8207, + 0x820a, 0x820d, 0x8210, 0x8216, 0x8229, 0x822b, 0x8238, 0x8233, + 0x8240, 0x8259, 0x8258, 0x825d, 0x825a, 0x825f, 0x8264, 0x8262, + 0x8268, 0x826a, 0x826b, 0x822e, 0x8271, 0x8277, 0x8278, 0x827e, + 0x828d, 0x8292, 0x82ab, 0x829f, 0x82bb, 0x82ac, 0x82e1, 0x82e3, + 0x82df, 0x82d2, 0x82f4, 0x82f3, 0x82fa, 0x8393, 0x8303, 0x82fb, + 0x82f9, 0x82de, 0x8306, 0x82dc, 0x8309, 0x82d9, + /* 0x68 */ + 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, + 0x8345, 0x832f, 0x832b, 0x8317, 0x8318, 0x8385, 0x839a, 0x83aa, + 0x839f, 0x83a2, 0x8396, 0x8323, 0x838e, 0x8387, 0x838a, 0x837c, + 0x83b5, 0x8373, 0x8375, 0x83a0, 0x8389, 0x83a8, 0x83f4, 0x8413, + 0x83eb, 0x83ce, 0x83fd, 0x8403, 0x83d8, 0x840b, 0x83c1, 0x83f7, + 0x8407, 0x83e0, 0x83f2, 0x840d, 0x8422, 0x8420, 0x83bd, 0x8438, + 0x8506, 0x83fb, 0x846d, 0x842a, 0x843c, 0x855a, 0x8484, 0x8477, + 0x846b, 0x84ad, 0x846e, 0x8482, 0x8469, 0x8446, 0x842c, 0x846f, + 0x8479, 0x8435, 0x84ca, 0x8462, 0x84b9, 0x84bf, 0x849f, 0x84d9, + 0x84cd, 0x84bb, 0x84da, 0x84d0, 0x84c1, 0x84c6, 0x84d6, 0x84a1, + 0x8521, 0x84ff, 0x84f4, 0x8517, 0x8518, 0x852c, 0x851f, 0x8515, + 0x8514, 0x84fc, 0x8540, 0x8563, 0x8558, 0x8548, + /* 0x69 */ + 0x8541, 0x8602, 0x854b, 0x8555, 0x8580, 0x85a4, 0x8588, 0x8591, + 0x858a, 0x85a8, 0x856d, 0x8594, 0x859b, 0x85ea, 0x8587, 0x859c, + 0x8577, 0x857e, 0x8590, 0x85c9, 0x85ba, 0x85cf, 0x85b9, 0x85d0, + 0x85d5, 0x85dd, 0x85e5, 0x85dc, 0x85f9, 0x860a, 0x8613, 0x860b, + 0x85fe, 0x85fa, 0x8606, 0x8622, 0x861a, 0x8630, 0x863f, 0x864d, + 0x4e55, 0x8654, 0x865f, 0x8667, 0x8671, 0x8693, 0x86a3, 0x86a9, + 0x86aa, 0x868b, 0x868c, 0x86b6, 0x86af, 0x86c4, 0x86c6, 0x86b0, + 0x86c9, 0x8823, 0x86ab, 0x86d4, 0x86de, 0x86e9, 0x86ec, 0x86df, + 0x86db, 0x86ef, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86fb, + 0x8711, 0x8709, 0x870d, 0x86f9, 0x870a, 0x8734, 0x873f, 0x8737, + 0x873b, 0x8725, 0x8729, 0x871a, 0x8760, 0x875f, 0x8778, 0x874c, + 0x874e, 0x8774, 0x8757, 0x8768, 0x876e, 0x8759, + /* 0x6a */ + 0x8753, 0x8763, 0x876a, 0x8805, 0x87a2, 0x879f, 0x8782, 0x87af, + 0x87cb, 0x87bd, 0x87c0, 0x87d0, 0x96d6, 0x87ab, 0x87c4, 0x87b3, + 0x87c7, 0x87c6, 0x87bb, 0x87ef, 0x87f2, 0x87e0, 0x880f, 0x880d, + 0x87fe, 0x87f6, 0x87f7, 0x880e, 0x87d2, 0x8811, 0x8816, 0x8815, + 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883b, 0x8844, + 0x8842, 0x8852, 0x8859, 0x885e, 0x8862, 0x886b, 0x8881, 0x887e, + 0x889e, 0x8875, 0x887d, 0x88b5, 0x8872, 0x8882, 0x8897, 0x8892, + 0x88ae, 0x8899, 0x88a2, 0x888d, 0x88a4, 0x88b0, 0x88bf, 0x88b1, + 0x88c3, 0x88c4, 0x88d4, 0x88d8, 0x88d9, 0x88dd, 0x88f9, 0x8902, + 0x88fc, 0x88f4, 0x88e8, 0x88f2, 0x8904, 0x890c, 0x890a, 0x8913, + 0x8943, 0x891e, 0x8925, 0x892a, 0x892b, 0x8941, 0x8944, 0x893b, + 0x8936, 0x8938, 0x894c, 0x891d, 0x8960, 0x895e, + /* 0x6b */ + 0x8966, 0x8964, 0x896d, 0x896a, 0x896f, 0x8974, 0x8977, 0x897e, + 0x8983, 0x8988, 0x898a, 0x8993, 0x8998, 0x89a1, 0x89a9, 0x89a6, + 0x89ac, 0x89af, 0x89b2, 0x89ba, 0x89bd, 0x89bf, 0x89c0, 0x89da, + 0x89dc, 0x89dd, 0x89e7, 0x89f4, 0x89f8, 0x8a03, 0x8a16, 0x8a10, + 0x8a0c, 0x8a1b, 0x8a1d, 0x8a25, 0x8a36, 0x8a41, 0x8a5b, 0x8a52, + 0x8a46, 0x8a48, 0x8a7c, 0x8a6d, 0x8a6c, 0x8a62, 0x8a85, 0x8a82, + 0x8a84, 0x8aa8, 0x8aa1, 0x8a91, 0x8aa5, 0x8aa6, 0x8a9a, 0x8aa3, + 0x8ac4, 0x8acd, 0x8ac2, 0x8ada, 0x8aeb, 0x8af3, 0x8ae7, 0x8ae4, + 0x8af1, 0x8b14, 0x8ae0, 0x8ae2, 0x8af7, 0x8ade, 0x8adb, 0x8b0c, + 0x8b07, 0x8b1a, 0x8ae1, 0x8b16, 0x8b10, 0x8b17, 0x8b20, 0x8b33, + 0x97ab, 0x8b26, 0x8b2b, 0x8b3e, 0x8b28, 0x8b41, 0x8b4c, 0x8b4f, + 0x8b4e, 0x8b49, 0x8b56, 0x8b5b, 0x8b5a, 0x8b6b, + /* 0x6c */ + 0x8b5f, 0x8b6c, 0x8b6f, 0x8b74, 0x8b7d, 0x8b80, 0x8b8c, 0x8b8e, + 0x8b92, 0x8b93, 0x8b96, 0x8b99, 0x8b9a, 0x8c3a, 0x8c41, 0x8c3f, + 0x8c48, 0x8c4c, 0x8c4e, 0x8c50, 0x8c55, 0x8c62, 0x8c6c, 0x8c78, + 0x8c7a, 0x8c82, 0x8c89, 0x8c85, 0x8c8a, 0x8c8d, 0x8c8e, 0x8c94, + 0x8c7c, 0x8c98, 0x621d, 0x8cad, 0x8caa, 0x8cbd, 0x8cb2, 0x8cb3, + 0x8cae, 0x8cb6, 0x8cc8, 0x8cc1, 0x8ce4, 0x8ce3, 0x8cda, 0x8cfd, + 0x8cfa, 0x8cfb, 0x8d04, 0x8d05, 0x8d0a, 0x8d07, 0x8d0f, 0x8d0d, + 0x8d10, 0x9f4e, 0x8d13, 0x8ccd, 0x8d14, 0x8d16, 0x8d67, 0x8d6d, + 0x8d71, 0x8d73, 0x8d81, 0x8d99, 0x8dc2, 0x8dbe, 0x8dba, 0x8dcf, + 0x8dda, 0x8dd6, 0x8dcc, 0x8ddb, 0x8dcb, 0x8dea, 0x8deb, 0x8ddf, + 0x8de3, 0x8dfc, 0x8e08, 0x8e09, 0x8dff, 0x8e1d, 0x8e1e, 0x8e10, + 0x8e1f, 0x8e42, 0x8e35, 0x8e30, 0x8e34, 0x8e4a, + /* 0x6d */ + 0x8e47, 0x8e49, 0x8e4c, 0x8e50, 0x8e48, 0x8e59, 0x8e64, 0x8e60, + 0x8e2a, 0x8e63, 0x8e55, 0x8e76, 0x8e72, 0x8e7c, 0x8e81, 0x8e87, + 0x8e85, 0x8e84, 0x8e8b, 0x8e8a, 0x8e93, 0x8e91, 0x8e94, 0x8e99, + 0x8eaa, 0x8ea1, 0x8eac, 0x8eb0, 0x8ec6, 0x8eb1, 0x8ebe, 0x8ec5, + 0x8ec8, 0x8ecb, 0x8edb, 0x8ee3, 0x8efc, 0x8efb, 0x8eeb, 0x8efe, + 0x8f0a, 0x8f05, 0x8f15, 0x8f12, 0x8f19, 0x8f13, 0x8f1c, 0x8f1f, + 0x8f1b, 0x8f0c, 0x8f26, 0x8f33, 0x8f3b, 0x8f39, 0x8f45, 0x8f42, + 0x8f3e, 0x8f4c, 0x8f49, 0x8f46, 0x8f4e, 0x8f57, 0x8f5c, 0x8f62, + 0x8f63, 0x8f64, 0x8f9c, 0x8f9f, 0x8fa3, 0x8fad, 0x8faf, 0x8fb7, + 0x8fda, 0x8fe5, 0x8fe2, 0x8fea, 0x8fef, 0x9087, 0x8ff4, 0x9005, + 0x8ff9, 0x8ffa, 0x9011, 0x9015, 0x9021, 0x900d, 0x901e, 0x9016, + 0x900b, 0x9027, 0x9036, 0x9035, 0x9039, 0x8ff8, + /* 0x6e */ + 0x904f, 0x9050, 0x9051, 0x9052, 0x900e, 0x9049, 0x903e, 0x9056, + 0x9058, 0x905e, 0x9068, 0x906f, 0x9076, 0x96a8, 0x9072, 0x9082, + 0x907d, 0x9081, 0x9080, 0x908a, 0x9089, 0x908f, 0x90a8, 0x90af, + 0x90b1, 0x90b5, 0x90e2, 0x90e4, 0x6248, 0x90db, 0x9102, 0x9112, + 0x9119, 0x9132, 0x9130, 0x914a, 0x9156, 0x9158, 0x9163, 0x9165, + 0x9169, 0x9173, 0x9172, 0x918b, 0x9189, 0x9182, 0x91a2, 0x91ab, + 0x91af, 0x91aa, 0x91b5, 0x91b4, 0x91ba, 0x91c0, 0x91c1, 0x91c9, + 0x91cb, 0x91d0, 0x91d6, 0x91df, 0x91e1, 0x91db, 0x91fc, 0x91f5, + 0x91f6, 0x921e, 0x91ff, 0x9214, 0x922c, 0x9215, 0x9211, 0x925e, + 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923f, 0x924b, + 0x9250, 0x929c, 0x9296, 0x9293, 0x929b, 0x925a, 0x92cf, 0x92b9, + 0x92b7, 0x92e9, 0x930f, 0x92fa, 0x9344, 0x932e, + /* 0x6f */ + 0x9319, 0x9322, 0x931a, 0x9323, 0x933a, 0x9335, 0x933b, 0x935c, + 0x9360, 0x937c, 0x936e, 0x9356, 0x93b0, 0x93ac, 0x93ad, 0x9394, + 0x93b9, 0x93d6, 0x93d7, 0x93e8, 0x93e5, 0x93d8, 0x93c3, 0x93dd, + 0x93d0, 0x93c8, 0x93e4, 0x941a, 0x9414, 0x9413, 0x9403, 0x9407, + 0x9410, 0x9436, 0x942b, 0x9435, 0x9421, 0x943a, 0x9441, 0x9452, + 0x9444, 0x945b, 0x9460, 0x9462, 0x945e, 0x946a, 0x9229, 0x9470, + 0x9475, 0x9477, 0x947d, 0x945a, 0x947c, 0x947e, 0x9481, 0x947f, + 0x9582, 0x9587, 0x958a, 0x9594, 0x9596, 0x9598, 0x9599, 0x95a0, + 0x95a8, 0x95a7, 0x95ad, 0x95bc, 0x95bb, 0x95b9, 0x95be, 0x95ca, + 0x6ff6, 0x95c3, 0x95cd, 0x95cc, 0x95d5, 0x95d4, 0x95d6, 0x95dc, + 0x95e1, 0x95e5, 0x95e2, 0x9621, 0x9628, 0x962e, 0x962f, 0x9642, + 0x964c, 0x964f, 0x964b, 0x9677, 0x965c, 0x965e, + /* 0x70 */ + 0x965d, 0x965f, 0x9666, 0x9672, 0x966c, 0x968d, 0x9698, 0x9695, + 0x9697, 0x96aa, 0x96a7, 0x96b1, 0x96b2, 0x96b0, 0x96b4, 0x96b6, + 0x96b8, 0x96b9, 0x96ce, 0x96cb, 0x96c9, 0x96cd, 0x894d, 0x96dc, + 0x970d, 0x96d5, 0x96f9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970e, + 0x9711, 0x970f, 0x9716, 0x9719, 0x9724, 0x972a, 0x9730, 0x9739, + 0x973d, 0x973e, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975c, + 0x9760, 0x9764, 0x9766, 0x9768, 0x52d2, 0x976b, 0x9771, 0x9779, + 0x9785, 0x977c, 0x9781, 0x977a, 0x9786, 0x978b, 0x978f, 0x9790, + 0x979c, 0x97a8, 0x97a6, 0x97a3, 0x97b3, 0x97b4, 0x97c3, 0x97c6, + 0x97c8, 0x97cb, 0x97dc, 0x97ed, 0x9f4f, 0x97f2, 0x7adf, 0x97f6, + 0x97f5, 0x980f, 0x980c, 0x9838, 0x9824, 0x9821, 0x9837, 0x983d, + 0x9846, 0x984f, 0x984b, 0x986b, 0x986f, 0x9870, + /* 0x71 */ + 0x9871, 0x9874, 0x9873, 0x98aa, 0x98af, 0x98b1, 0x98b6, 0x98c4, + 0x98c3, 0x98c6, 0x98e9, 0x98eb, 0x9903, 0x9909, 0x9912, 0x9914, + 0x9918, 0x9921, 0x991d, 0x991e, 0x9924, 0x9920, 0x992c, 0x992e, + 0x993d, 0x993e, 0x9942, 0x9949, 0x9945, 0x9950, 0x994b, 0x9951, + 0x9952, 0x994c, 0x9955, 0x9997, 0x9998, 0x99a5, 0x99ad, 0x99ae, + 0x99bc, 0x99df, 0x99db, 0x99dd, 0x99d8, 0x99d1, 0x99ed, 0x99ee, + 0x99f1, 0x99f2, 0x99fb, 0x99f8, 0x9a01, 0x9a0f, 0x9a05, 0x99e2, + 0x9a19, 0x9a2b, 0x9a37, 0x9a45, 0x9a42, 0x9a40, 0x9a43, 0x9a3e, + 0x9a55, 0x9a4d, 0x9a5b, 0x9a57, 0x9a5f, 0x9a62, 0x9a65, 0x9a64, + 0x9a69, 0x9a6b, 0x9a6a, 0x9aad, 0x9ab0, 0x9abc, 0x9ac0, 0x9acf, + 0x9ad1, 0x9ad3, 0x9ad4, 0x9ade, 0x9adf, 0x9ae2, 0x9ae3, 0x9ae6, + 0x9aef, 0x9aeb, 0x9aee, 0x9af4, 0x9af1, 0x9af7, + /* 0x72 */ + 0x9afb, 0x9b06, 0x9b18, 0x9b1a, 0x9b1f, 0x9b22, 0x9b23, 0x9b25, + 0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2e, 0x9b2f, 0x9b32, 0x9b44, + 0x9b43, 0x9b4f, 0x9b4d, 0x9b4e, 0x9b51, 0x9b58, 0x9b74, 0x9b93, + 0x9b83, 0x9b91, 0x9b96, 0x9b97, 0x9b9f, 0x9ba0, 0x9ba8, 0x9bb4, + 0x9bc0, 0x9bca, 0x9bb9, 0x9bc6, 0x9bcf, 0x9bd1, 0x9bd2, 0x9be3, + 0x9be2, 0x9be4, 0x9bd4, 0x9be1, 0x9c3a, 0x9bf2, 0x9bf1, 0x9bf0, + 0x9c15, 0x9c14, 0x9c09, 0x9c13, 0x9c0c, 0x9c06, 0x9c08, 0x9c12, + 0x9c0a, 0x9c04, 0x9c2e, 0x9c1b, 0x9c25, 0x9c24, 0x9c21, 0x9c30, + 0x9c47, 0x9c32, 0x9c46, 0x9c3e, 0x9c5a, 0x9c60, 0x9c67, 0x9c76, + 0x9c78, 0x9ce7, 0x9cec, 0x9cf0, 0x9d09, 0x9d08, 0x9ceb, 0x9d03, + 0x9d06, 0x9d2a, 0x9d26, 0x9daf, 0x9d23, 0x9d1f, 0x9d44, 0x9d15, + 0x9d12, 0x9d41, 0x9d3f, 0x9d3e, 0x9d46, 0x9d48, + /* 0x73 */ + 0x9d5d, 0x9d5e, 0x9d64, 0x9d51, 0x9d50, 0x9d59, 0x9d72, 0x9d89, + 0x9d87, 0x9dab, 0x9d6f, 0x9d7a, 0x9d9a, 0x9da4, 0x9da9, 0x9db2, + 0x9dc4, 0x9dc1, 0x9dbb, 0x9db8, 0x9dba, 0x9dc6, 0x9dcf, 0x9dc2, + 0x9dd9, 0x9dd3, 0x9df8, 0x9de6, 0x9ded, 0x9def, 0x9dfd, 0x9e1a, + 0x9e1b, 0x9e1e, 0x9e75, 0x9e79, 0x9e7d, 0x9e81, 0x9e88, 0x9e8b, + 0x9e8c, 0x9e92, 0x9e95, 0x9e91, 0x9e9d, 0x9ea5, 0x9ea9, 0x9eb8, + 0x9eaa, 0x9ead, 0x9761, 0x9ecc, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed4, + 0x9edc, 0x9ede, 0x9edd, 0x9ee0, 0x9ee5, 0x9ee8, 0x9eef, 0x9ef4, + 0x9ef6, 0x9ef7, 0x9ef9, 0x9efb, 0x9efc, 0x9efd, 0x9f07, 0x9f08, + 0x76b7, 0x9f15, 0x9f21, 0x9f2c, 0x9f3e, 0x9f4a, 0x9f52, 0x9f54, + 0x9f63, 0x9f5f, 0x9f60, 0x9f61, 0x9f66, 0x9f67, 0x9f6c, 0x9f6a, + 0x9f77, 0x9f72, 0x9f76, 0x9f95, 0x9f9c, 0x9fa0, + /* 0x74 */ + 0x582f, 0x69c7, 0x9059, 0x7464, 0x51dc, 0x7199, +}; + +static int +jisx0208_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x28) || (c1 >= 0x30 && c1 <= 0x74)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + unsigned short wc = 0xfffd; + if (i < 1410) { + if (i < 690) + wc = jisx0208_2uni_page21[i]; + } else { + if (i < 7808) + wc = jisx0208_2uni_page30[i-1410]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short jisx0208_2charset[6879] = { + 0x2171, 0x2172, 0x2178, 0x212f, 0x224c, 0x216b, 0x215e, 0x212d, + 0x2279, 0x215f, 0x2160, 0x2621, 0x2622, 0x2623, 0x2624, 0x2625, + 0x2626, 0x2627, 0x2628, 0x2629, 0x262a, 0x262b, 0x262c, 0x262d, + 0x262e, 0x262f, 0x2630, 0x2631, 0x2632, 0x2633, 0x2634, 0x2635, + 0x2636, 0x2637, 0x2638, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645, + 0x2646, 0x2647, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c, 0x264d, + 0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x2654, 0x2655, + 0x2656, 0x2657, 0x2658, 0x2727, 0x2721, 0x2722, 0x2723, 0x2724, + 0x2725, 0x2726, 0x2728, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, + 0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, + 0x2736, 0x2737, 0x2738, 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, + 0x273e, 0x273f, 0x2740, 0x2741, 0x2751, 0x2752, 0x2753, 0x2754, + 0x2755, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, 0x275d, + 0x275e, 0x275f, 0x2760, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, + 0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c, 0x276d, + 0x276e, 0x276f, 0x2770, 0x2771, 0x2757, 0x213e, 0x213d, 0x2142, + 0x2146, 0x2147, 0x2148, 0x2149, 0x2277, 0x2278, 0x2145, 0x2144, + 0x2273, 0x216c, 0x216d, 0x2228, 0x216e, 0x2272, 0x222b, 0x222c, + 0x222a, 0x222d, 0x224d, 0x224e, 0x224f, 0x225f, 0x2250, 0x2260, + 0x223a, 0x223b, 0x215d, 0x2265, 0x2267, 0x2167, 0x225c, 0x224a, + 0x224b, 0x2241, 0x2240, 0x2269, 0x226a, 0x2168, 0x2268, 0x2266, + 0x2262, 0x2162, 0x2261, 0x2165, 0x2166, 0x2263, 0x2264, 0x223e, + 0x223f, 0x223c, 0x223d, 0x225d, 0x225e, 0x2821, 0x282c, 0x2822, + 0x282d, 0x2823, 0x282e, 0x2824, 0x282f, 0x2826, 0x2831, 0x2825, + 0x2830, 0x2827, 0x283c, 0x2837, 0x2832, 0x2829, 0x283e, 0x2839, + 0x2834, 0x2828, 0x2838, 0x283d, 0x2833, 0x282a, 0x283a, 0x283f, + 0x2835, 0x282b, 0x283b, 0x2840, 0x2836, 0x2223, 0x2222, 0x2225, + 0x2224, 0x2227, 0x2226, 0x2221, 0x217e, 0x217b, 0x217d, 0x217c, + 0x227e, 0x217a, 0x2179, 0x216a, 0x2169, 0x2276, 0x2275, 0x2274, + 0x2121, 0x2122, 0x2123, 0x2137, 0x2139, 0x213a, 0x213b, 0x2152, + 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, + 0x215b, 0x2229, 0x222e, 0x214c, 0x214d, 0x2141, 0x2421, 0x2422, + 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242a, + 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431, 0x2432, + 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, 0x243a, + 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441, 0x2442, + 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244a, + 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451, 0x2452, + 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, 0x245a, + 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461, 0x2462, + 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a, + 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, 0x2472, + 0x2473, 0x212b, 0x212c, 0x2135, 0x2136, 0x2521, 0x2522, 0x2523, + 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, + 0x252c, 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, + 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, + 0x253c, 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, + 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, + 0x254c, 0x254d, 0x254e, 0x254f, 0x2550, 0x2551, 0x2552, 0x2553, + 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, + 0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, + 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, + 0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572, 0x2573, + 0x2574, 0x2575, 0x2576, 0x2126, 0x213c, 0x2133, 0x2134, 0x306c, + 0x437a, 0x3c37, 0x4b7c, 0x3e66, 0x3b30, 0x3e65, 0x323c, 0x4954, + 0x4d3f, 0x5022, 0x312f, 0x336e, 0x5023, 0x4024, 0x5242, 0x3556, + 0x4a3a, 0x3e67, 0x4e3e, 0x4a42, 0x5024, 0x4366, 0x5025, 0x367a, + 0x5026, 0x345d, 0x4330, 0x3c67, 0x5027, 0x5028, 0x5029, 0x4735, + 0x3557, 0x4737, 0x4663, 0x3843, 0x4b33, 0x6949, 0x502a, 0x3e68, + 0x502b, 0x3235, 0x3665, 0x3870, 0x4c69, 0x5626, 0x4d70, 0x467d, + 0x3425, 0x3535, 0x502c, 0x502d, 0x4e3b, 0x4d3d, 0x4168, 0x502f, + 0x3b76, 0x4673, 0x5032, 0x313e, 0x385f, 0x385e, 0x3066, 0x4f4b, + 0x4f4a, 0x3a33, 0x3021, 0x5033, 0x5034, 0x5035, 0x4b34, 0x5036, + 0x3872, 0x3067, 0x4b72, 0x357c, 0x357d, 0x357e, 0x4462, 0x4e3c, + 0x5037, 0x5038, 0x5039, 0x3f4d, 0x3d3a, 0x3f4e, 0x503e, 0x503c, + 0x503d, 0x3558, 0x3a23, 0x3270, 0x503b, 0x503a, 0x4a29, 0x3b46, + 0x3b45, 0x423e, 0x503f, 0x4955, 0x4067, 0x2138, 0x5040, 0x5042, + 0x4265, 0x4e61, 0x304a, 0x5041, 0x323e, 0x3644, 0x4367, 0x376f, + 0x5043, 0x4724, 0x346b, 0x5044, 0x304b, 0x3860, 0x346c, 0x497a, + 0x4832, 0x3559, 0x3271, 0x5067, 0x4541, 0x476c, 0x5046, 0x483c, + 0x4e62, 0x3f2d, 0x3b47, 0x3b77, 0x3240, 0x4451, 0x4322, 0x504a, + 0x304c, 0x4463, 0x3d3b, 0x3a34, 0x4d24, 0x424e, 0x323f, 0x5049, + 0x4d3e, 0x5045, 0x5047, 0x3a6e, 0x5048, 0x5524, 0x5050, 0x5053, + 0x5051, 0x3242, 0x4a3b, 0x504b, 0x504f, 0x3873, 0x3b48, 0x3426, + 0x5054, 0x504c, 0x4e63, 0x3b78, 0x504d, 0x5052, 0x5055, 0x504e, + 0x3621, 0x304d, 0x3622, 0x3241, 0x5525, 0x4b79, 0x496e, 0x3874, + 0x3f2f, 0x4e37, 0x4a58, 0x3738, 0x4225, 0x3264, 0x3d53, 0x5059, + 0x505e, 0x505c, 0x5057, 0x422f, 0x505a, 0x505d, 0x505b, 0x4a5d, + 0x5058, 0x3f2e, 0x4b73, 0x505f, 0x5060, 0x3d24, 0x506d, 0x4750, + 0x4936, 0x5068, 0x4a70, 0x3236, 0x506c, 0x5066, 0x506f, 0x4152, + 0x3844, 0x475c, 0x6047, 0x506e, 0x455d, 0x5063, 0x3876, 0x3875, + 0x5061, 0x3c5a, 0x5069, 0x4a6f, 0x434d, 0x5065, 0x3771, 0x5062, + 0x506a, 0x5064, 0x4e51, 0x506b, 0x4f41, 0x3666, 0x3770, 0x5070, + 0x5071, 0x5075, 0x304e, 0x4a50, 0x5074, 0x5073, 0x5077, 0x5076, + 0x4464, 0x3772, 0x5078, 0x3c45, 0x4226, 0x4465, 0x3676, 0x5079, + 0x3536, 0x507a, 0x507c, 0x4b35, 0x3766, 0x3b31, 0x4877, 0x507b, + 0x3a45, 0x4d43, 0x507e, 0x5123, 0x507d, 0x3a44, 0x3d7d, 0x3739, + 0x5124, 0x364f, 0x5121, 0x5122, 0x462f, 0x417c, 0x3623, 0x4b4d, + 0x5125, 0x4e3d, 0x5126, 0x5129, 0x5127, 0x414e, 0x5128, 0x512a, + 0x512c, 0x512b, 0x4a48, 0x3537, 0x512e, 0x512f, 0x322f, 0x512d, + 0x3c74, 0x5132, 0x5131, 0x5130, 0x5056, 0x5133, 0x3d7e, 0x5134, + 0x4d25, 0x4c59, 0x5136, 0x5135, 0x5138, 0x5137, 0x5139, 0x513a, + 0x3074, 0x3835, 0x373b, 0x3d3c, 0x437b, 0x3624, 0x4068, 0x3877, + 0x396e, 0x513c, 0x4c48, 0x4546, 0x3b79, 0x513b, 0x513d, 0x455e, + 0x3375, 0x513e, 0x467e, 0x4134, 0x5140, 0x5141, 0x482c, 0x3878, + 0x4f3b, 0x5142, 0x3626, 0x4a3c, 0x4236, 0x3671, 0x4535, 0x3773, + 0x5143, 0x5144, 0x4662, 0x315f, 0x5147, 0x3a7d, 0x5146, 0x3a46, + 0x5148, 0x666e, 0x5149, 0x4b41, 0x514a, 0x514b, 0x514c, 0x3e69, + 0x3c4c, 0x3427, 0x514f, 0x514d, 0x4c3d, 0x514e, 0x495a, 0x5150, + 0x5151, 0x5152, 0x455f, 0x5156, 0x5154, 0x5155, 0x5153, 0x3a63, + 0x5157, 0x4c6a, 0x4e64, 0x5158, 0x4028, 0x5159, 0x3d5a, 0x515a, + 0x437c, 0x4e3f, 0x4560, 0x5245, 0x515b, 0x7425, 0x3645, 0x515c, + 0x4b5e, 0x3d68, 0x427c, 0x515e, 0x4664, 0x515f, 0x5160, 0x332e, + 0x5161, 0x3627, 0x464c, 0x317a, 0x3d50, 0x4821, 0x5162, 0x4561, + 0x3f4f, 0x5163, 0x4a2c, 0x405a, 0x3422, 0x3429, 0x5164, 0x5166, + 0x373a, 0x5165, 0x4e73, 0x3d69, 0x483d, 0x4a4c, 0x5167, 0x4d78, + 0x5168, 0x5169, 0x457e, 0x516a, 0x4029, 0x3a7e, 0x3774, 0x516b, + 0x3b49, 0x396f, 0x4466, 0x516d, 0x4227, 0x3a6f, 0x516e, 0x516f, + 0x4130, 0x516c, 0x5171, 0x4b36, 0x3964, 0x5170, 0x3775, 0x3a5e, + 0x476d, 0x5174, 0x5172, 0x497b, 0x3e6a, 0x517b, 0x3364, 0x5175, + 0x5173, 0x414f, 0x5177, 0x5176, 0x3344, 0x3760, 0x517c, 0x4e2d, + 0x5178, 0x517d, 0x517a, 0x5179, 0x4e4f, 0x3879, 0x3243, 0x4e74, + 0x3d75, 0x4558, 0x3965, 0x5222, 0x5223, 0x4e65, 0x4f2b, 0x5225, + 0x387a, 0x5224, 0x332f, 0x5226, 0x4b56, 0x443c, 0x4d26, 0x4a59, + 0x5227, 0x7055, 0x4630, 0x5228, 0x342a, 0x4c33, 0x3e21, 0x5229, + 0x4a67, 0x522d, 0x402a, 0x522a, 0x3650, 0x522b, 0x342b, 0x372e, + 0x522e, 0x522f, 0x5230, 0x5231, 0x3c5b, 0x387b, 0x4c5e, 0x4c68, + 0x4677, 0x4a71, 0x5232, 0x5233, 0x5235, 0x5237, 0x5236, 0x5238, + 0x323d, 0x4b4c, 0x3a7c, 0x5239, 0x4159, 0x3e22, 0x3629, 0x523a, + 0x485b, 0x523b, 0x523c, 0x523d, 0x523e, 0x4924, 0x3668, 0x3065, + 0x463f, 0x523f, 0x3d3d, 0x4069, 0x5241, 0x5240, 0x3e23, 0x3861, + 0x5243, 0x483e, 0x5244, 0x485c, 0x4234, 0x426e, 0x3628, 0x466e, + 0x4331, 0x476e, 0x4b4e, 0x5246, 0x406a, 0x3735, 0x5247, 0x5248, + 0x312c, 0x3075, 0x346d, 0x4228, 0x3551, 0x4d71, 0x524b, 0x3237, + 0x524a, 0x362a, 0x524c, 0x4c71, 0x524d, 0x4e52, 0x387c, 0x3836, + 0x524e, 0x5250, 0x524f, 0x3f5f, 0x3139, 0x315e, 0x5251, 0x5252, + 0x3837, 0x5253, 0x356e, 0x3b32, 0x5254, 0x4b74, 0x3a35, 0x355a, + 0x4d27, 0x4150, 0x483f, 0x3c7d, 0x3d47, 0x3c68, 0x3c75, 0x3d76, + 0x4840, 0x5257, 0x3143, 0x4151, 0x387d, 0x3845, 0x3667, 0x525b, + 0x4321, 0x427e, 0x362b, 0x3e24, 0x525c, 0x525a, 0x3244, 0x4266, + 0x3c38, 0x3b4b, 0x3126, 0x3370, 0x3966, 0x3b4a, 0x525d, 0x525e, + 0x3549, 0x3346, 0x3967, 0x3548, 0x445f, 0x3125, 0x4631, 0x4c3e, + 0x3921, 0x4d79, 0x4547, 0x387e, 0x372f, 0x5267, 0x3663, 0x4b4a, + 0x485d, 0x5266, 0x345e, 0x5261, 0x5262, 0x5264, 0x5265, 0x355b, + 0x3f61, 0x4a2d, 0x5263, 0x525f, 0x3863, 0x5260, 0x4f24, 0x4a72, + 0x4468, 0x3862, 0x3970, 0x5268, 0x465d, 0x526c, 0x3c7e, 0x3c76, + 0x526f, 0x526d, 0x4c23, 0x526a, 0x5273, 0x526e, 0x5271, 0x3846, + 0x4c3f, 0x5272, 0x5274, 0x5276, 0x3a70, 0x4f42, 0x526b, 0x5269, + 0x5275, 0x5270, 0x5278, 0x5323, 0x527a, 0x527e, 0x5321, 0x527b, + 0x533e, 0x3a69, 0x3331, 0x5279, 0x5325, 0x3076, 0x5324, 0x3025, + 0x494a, 0x5322, 0x527c, 0x5277, 0x527d, 0x3a48, 0x5326, 0x3077, + 0x532f, 0x5327, 0x5328, 0x3e25, 0x4b69, 0x532d, 0x532c, 0x452f, + 0x532e, 0x532b, 0x3134, 0x3a36, 0x3f30, 0x5329, 0x4562, 0x532a, + 0x3022, 0x5334, 0x4d23, 0x3e27, 0x533a, 0x5339, 0x5330, 0x4243, + 0x5331, 0x426f, 0x5336, 0x3e26, 0x5333, 0x4c64, 0x373c, 0x5337, + 0x5338, 0x5335, 0x533b, 0x5332, 0x5341, 0x5346, 0x5342, 0x533d, + 0x5347, 0x4131, 0x5349, 0x3922, 0x533f, 0x437d, 0x5343, 0x533c, + 0x342d, 0x346e, 0x3365, 0x5344, 0x5340, 0x3776, 0x534a, 0x5348, + 0x4153, 0x354a, 0x362c, 0x5345, 0x3674, 0x3144, 0x534e, 0x534c, + 0x5427, 0x5351, 0x534b, 0x534f, 0x534d, 0x3b4c, 0x5350, 0x5353, + 0x5358, 0x5356, 0x5355, 0x4332, 0x3245, 0x5352, 0x5354, 0x3e28, + 0x3133, 0x5357, 0x325e, 0x5362, 0x3e7c, 0x535e, 0x535c, 0x535d, + 0x535f, 0x313d, 0x4139, 0x5359, 0x535a, 0x337a, 0x5361, 0x346f, + 0x5364, 0x5360, 0x5363, 0x4a2e, 0x4655, 0x4838, 0x5366, 0x5365, + 0x3345, 0x5367, 0x536a, 0x5369, 0x5368, 0x4739, 0x536b, 0x536c, + 0x536e, 0x536d, 0x5370, 0x5373, 0x5371, 0x536f, 0x5372, 0x5374, + 0x5375, 0x5376, 0x5377, 0x5378, 0x5145, 0x3c7c, 0x3b4d, 0x3273, + 0x3078, 0x4344, 0x5379, 0x3a24, 0x304f, 0x3f5e, 0x537a, 0x3847, + 0x3971, 0x537c, 0x537b, 0x4a60, 0x537d, 0x5421, 0x537e, 0x5422, + 0x5423, 0x3777, 0x3160, 0x5424, 0x5426, 0x5425, 0x5428, 0x455a, + 0x5429, 0x3035, 0x3a5f, 0x373d, 0x434f, 0x542a, 0x542b, 0x542d, + 0x542e, 0x3a64, 0x3651, 0x4b37, 0x542c, 0x542f, 0x3a41, 0x3923, + 0x5433, 0x3a25, 0x4333, 0x5430, 0x445a, 0x5434, 0x3f62, 0x5432, + 0x5435, 0x373f, 0x5436, 0x5437, 0x3924, 0x3340, 0x5439, 0x543a, + 0x543b, 0x5438, 0x5431, 0x543c, 0x543d, 0x4b64, 0x3e6b, 0x543f, + 0x5440, 0x543e, 0x5442, 0x4738, 0x3068, 0x4956, 0x5443, 0x3e7d, + 0x3c39, 0x475d, 0x3470, 0x3a6b, 0x4b59, 0x4632, 0x3778, 0x424f, + 0x5441, 0x5444, 0x4244, 0x5445, 0x5446, 0x5448, 0x4469, 0x342e, + 0x7421, 0x3161, 0x4a73, 0x3e6c, 0x4548, 0x3a66, 0x544e, 0x4a3d, + 0x4e5d, 0x3274, 0x544a, 0x413a, 0x544d, 0x4563, 0x4549, 0x4564, + 0x4839, 0x444d, 0x3a49, 0x5449, 0x3176, 0x4536, 0x544b, 0x5447, + 0x3f50, 0x544f, 0x3d4e, 0x362d, 0x5450, 0x4a68, 0x417d, 0x4446, + 0x5452, 0x4b4f, 0x5453, 0x5458, 0x4a2f, 0x5457, 0x5451, 0x5454, + 0x5456, 0x3a26, 0x4a49, 0x5459, 0x4345, 0x3275, 0x3e6d, 0x545b, + 0x545a, 0x3968, 0x545c, 0x545e, 0x545d, 0x5460, 0x5455, 0x5462, + 0x5461, 0x545f, 0x3b4e, 0x3f51, 0x4154, 0x5463, 0x403c, 0x306d, + 0x4764, 0x445b, 0x5465, 0x5464, 0x5466, 0x5467, 0x5468, 0x5469, + 0x4a51, 0x546a, 0x3246, 0x546b, 0x4d3c, 0x3330, 0x5249, 0x3d48, + 0x423f, 0x546c, 0x4c6b, 0x4c34, 0x546e, 0x4267, 0x4537, 0x4240, + 0x4957, 0x546f, 0x5470, 0x317b, 0x3c3a, 0x5471, 0x3050, 0x5472, + 0x5473, 0x3162, 0x3471, 0x4660, 0x4a74, 0x5477, 0x4155, 0x5476, + 0x3740, 0x4b5b, 0x5475, 0x4565, 0x5479, 0x5478, 0x547b, 0x547a, + 0x317c, 0x547c, 0x3e29, 0x547e, 0x4325, 0x547d, 0x4a33, 0x3d77, + 0x455b, 0x5521, 0x3925, 0x5522, 0x4721, 0x485e, 0x4c51, 0x4725, + 0x552b, 0x3538, 0x4d45, 0x4c2f, 0x562c, 0x5523, 0x5526, 0x4245, + 0x4b38, 0x454a, 0x5527, 0x4b65, 0x3a4a, 0x3e2a, 0x5528, 0x3b50, + 0x3b4f, 0x3039, 0x3848, 0x402b, 0x3051, 0x552c, 0x552d, 0x552a, + 0x3138, 0x342f, 0x5529, 0x4c45, 0x4931, 0x3028, 0x3079, 0x3b51, + 0x3052, 0x3023, 0x5532, 0x5530, 0x4c3c, 0x5533, 0x5531, 0x552f, + 0x3f31, 0x552e, 0x4a5a, 0x3864, 0x5537, 0x5538, 0x3e2b, 0x5534, + 0x4f2c, 0x474c, 0x5536, 0x3a27, 0x5539, 0x4958, 0x553a, 0x5535, + 0x4c3b, 0x475e, 0x553b, 0x4932, 0x553c, 0x5540, 0x553d, 0x3247, + 0x553f, 0x3c3b, 0x553e, 0x3779, 0x554c, 0x5545, 0x5542, 0x4364, + 0x5541, 0x5543, 0x5544, 0x5546, 0x5547, 0x3472, 0x5549, 0x5548, + 0x554a, 0x3e6e, 0x554d, 0x445c, 0x3145, 0x554b, 0x554e, 0x554f, + 0x5552, 0x5550, 0x5551, 0x3b52, 0x5553, 0x3926, 0x5554, 0x3b7a, + 0x4238, 0x5555, 0x5556, 0x3b5a, 0x3927, 0x4c52, 0x3528, 0x3849, + 0x5557, 0x3358, 0x5558, 0x4239, 0x5559, 0x5623, 0x555a, 0x555b, + 0x555c, 0x555e, 0x555f, 0x5560, 0x4270, 0x3127, 0x3c69, 0x3042, + 0x4157, 0x3430, 0x3c35, 0x3928, 0x4566, 0x3d21, 0x3431, 0x4368, + 0x446a, 0x3038, 0x3539, 0x4a75, 0x3c42, 0x3552, 0x406b, 0x3c3c, + 0x4d28, 0x5561, 0x355c, 0x3a4b, 0x3332, 0x3163, 0x3e2c, 0x3248, + 0x5562, 0x4d46, 0x3d49, 0x3c64, 0x5563, 0x3473, 0x4652, 0x4c29, + 0x5564, 0x5565, 0x4959, 0x5567, 0x3428, 0x3677, 0x5566, 0x3432, + 0x3f32, 0x556b, 0x3b21, 0x3249, 0x556a, 0x5568, 0x556c, 0x5569, + 0x472b, 0x5c4d, 0x3f33, 0x556d, 0x4e40, 0x556e, 0x5570, 0x437e, + 0x556f, 0x4023, 0x3b7b, 0x4250, 0x3c77, 0x4975, 0x406c, 0x3c4d, + 0x5571, 0x3e2d, 0x5572, 0x5573, 0x3053, 0x423a, 0x3f52, 0x5574, + 0x4633, 0x3e2e, 0x3e2f, 0x5575, 0x406d, 0x3e30, 0x5576, 0x5577, + 0x4c60, 0x5578, 0x3646, 0x3d22, 0x5579, 0x557a, 0x3c5c, 0x3f2c, + 0x4674, 0x3f54, 0x4878, 0x4722, 0x3649, 0x557b, 0x356f, 0x557c, + 0x367e, 0x464f, 0x3230, 0x3b53, 0x557d, 0x5622, 0x5621, 0x367d, + 0x557e, 0x4538, 0x4230, 0x454b, 0x3c48, 0x4158, 0x4d7a, 0x5624, + 0x5625, 0x4656, 0x3b33, 0x5627, 0x5628, 0x5629, 0x3474, 0x562a, + 0x562b, 0x322c, 0x413b, 0x3464, 0x562d, 0x4c28, 0x4252, 0x3359, + 0x562f, 0x5631, 0x345f, 0x562e, 0x5630, 0x5633, 0x5632, 0x5634, + 0x5635, 0x463d, 0x362e, 0x3265, 0x5636, 0x563b, 0x5639, 0x4a77, + 0x4a76, 0x4567, 0x5638, 0x3d54, 0x5637, 0x3f72, 0x563c, 0x3a6a, + 0x5642, 0x5643, 0x563d, 0x3333, 0x563e, 0x5647, 0x5646, 0x5645, + 0x5641, 0x5640, 0x5644, 0x4a78, 0x564b, 0x5648, 0x564a, 0x4d72, + 0x5649, 0x563f, 0x3f73, 0x564c, 0x3a37, 0x564d, 0x564e, 0x5651, + 0x5650, 0x564f, 0x4568, 0x563a, 0x5657, 0x5653, 0x5652, 0x5654, + 0x5655, 0x5658, 0x4e66, 0x5659, 0x5656, 0x565a, 0x3460, 0x565b, + 0x565d, 0x565c, 0x565e, 0x565f, 0x406e, 0x3d23, 0x3d64, 0x4163, + 0x3929, 0x3a38, 0x392a, 0x3570, 0x5660, 0x3a39, 0x384a, 0x5661, + 0x4c26, 0x4743, 0x5662, 0x392b, 0x342c, 0x4327, 0x3652, 0x3b54, + 0x495b, 0x4841, 0x5663, 0x3475, 0x5666, 0x4421, 0x5665, 0x5664, + 0x5667, 0x446b, 0x3f63, 0x3b55, 0x404a, 0x4253, 0x3522, 0x4422, + 0x5668, 0x5669, 0x3e6f, 0x4b39, 0x566c, 0x566b, 0x566a, 0x497d, + 0x5673, 0x4b5a, 0x566d, 0x566f, 0x4b6b, 0x566e, 0x5670, 0x4828, + 0x5671, 0x4a3e, 0x5672, 0x3433, 0x4a3f, 0x472f, 0x5674, 0x5675, + 0x392c, 0x3434, 0x5676, 0x3838, 0x4d44, 0x4d29, 0x3476, 0x5678, + 0x4423, 0x392d, 0x3e31, 0x485f, 0x3e32, 0x3d78, 0x446c, 0x4a79, + 0x4539, 0x392e, 0x495c, 0x5679, 0x4559, 0x3a42, 0x384b, 0x446d, + 0x3043, 0x3d6e, 0x392f, 0x4d47, 0x567a, 0x567b, 0x4751, 0x567c, + 0x4e77, 0x4f2d, 0x567e, 0x567d, 0x3347, 0x5721, 0x5724, 0x5725, + 0x5723, 0x4940, 0x3e33, 0x5727, 0x5726, 0x5722, 0x5728, 0x5729, + 0x572a, 0x572d, 0x572b, 0x572c, 0x572e, 0x3164, 0x446e, 0x572f, + 0x377a, 0x3276, 0x4736, 0x5730, 0x467b, 0x4a5b, 0x5731, 0x4f2e, + 0x5732, 0x4a40, 0x5735, 0x5021, 0x5031, 0x3c30, 0x4675, 0x5736, + 0x355d, 0x4424, 0x307a, 0x5737, 0x4a26, 0x3930, 0x4350, 0x446f, + 0x4c6f, 0x3839, 0x384c, 0x5738, 0x5739, 0x573f, 0x3c65, 0x4425, + 0x362f, 0x573a, 0x492b, 0x4346, 0x573b, 0x573c, 0x3630, 0x573d, + 0x573e, 0x5740, 0x4576, 0x5741, 0x5742, 0x5743, 0x5734, 0x5733, + 0x5744, 0x3741, 0x4927, 0x3a4c, 0x4937, 0x4426, 0x494b, 0x5745, + 0x3e34, 0x3146, 0x5746, 0x5747, 0x4c72, 0x4860, 0x574a, 0x317d, + 0x402c, 0x5749, 0x5748, 0x3742, 0x4254, 0x574e, 0x574c, 0x574b, + 0x4e27, 0x3865, 0x3d79, 0x574d, 0x454c, 0x3d3e, 0x4640, 0x5751, + 0x5750, 0x574f, 0x5752, 0x3866, 0x5753, 0x497c, 0x3d5b, 0x5754, + 0x4879, 0x4641, 0x4427, 0x4530, 0x5755, 0x352b, 0x3f34, 0x492c, + 0x3477, 0x4726, 0x5756, 0x3b56, 0x4b3a, 0x4b3b, 0x317e, 0x575b, + 0x4369, 0x5758, 0x3277, 0x582d, 0x575a, 0x4730, 0x5759, 0x5757, + 0x397a, 0x575d, 0x5763, 0x5769, 0x5761, 0x455c, 0x5766, 0x495d, + 0x5760, 0x5765, 0x4e67, 0x3b57, 0x4255, 0x575e, 0x355e, 0x5768, + 0x402d, 0x3165, 0x5762, 0x3278, 0x5767, 0x3631, 0x5764, 0x576a, + 0x576c, 0x5776, 0x5774, 0x5771, 0x5770, 0x4e78, 0x5772, 0x3632, + 0x3931, 0x3d7a, 0x5779, 0x576b, 0x576f, 0x575f, 0x327a, 0x5773, + 0x5775, 0x4351, 0x3a28, 0x3238, 0x576d, 0x5778, 0x5777, 0x3633, + 0x4229, 0x3366, 0x3743, 0x576e, 0x577a, 0x577d, 0x5821, 0x3c3d, + 0x5827, 0x4470, 0x577b, 0x5825, 0x3279, 0x5823, 0x5824, 0x577e, + 0x5822, 0x3867, 0x4d2a, 0x3435, 0x3159, 0x5826, 0x473a, 0x302d, + 0x4861, 0x575c, 0x582c, 0x5830, 0x4c65, 0x5829, 0x4569, 0x582e, + 0x3e70, 0x582f, 0x4657, 0x4f47, 0x582b, 0x5831, 0x397b, 0x404b, + 0x3054, 0x582a, 0x5828, 0x415a, 0x577c, 0x3b34, 0x4246, 0x583d, + 0x415b, 0x5838, 0x5835, 0x5836, 0x3c66, 0x5839, 0x583c, 0x5837, + 0x3d25, 0x583a, 0x5834, 0x4c7c, 0x4c7b, 0x583e, 0x583f, 0x3055, + 0x5833, 0x3672, 0x3026, 0x3436, 0x583b, 0x5843, 0x5842, 0x5847, + 0x5848, 0x5846, 0x5849, 0x5841, 0x5845, 0x584a, 0x584b, 0x5840, + 0x3b7c, 0x5844, 0x4256, 0x3932, 0x5832, 0x3f35, 0x5858, 0x4a69, + 0x584e, 0x584f, 0x5850, 0x5857, 0x5856, 0x4b7d, 0x3437, 0x5854, + 0x3745, 0x3334, 0x5851, 0x4e38, 0x5853, 0x3056, 0x5855, 0x584c, + 0x5852, 0x5859, 0x3744, 0x584d, 0x4d5d, 0x4d2b, 0x585c, 0x5860, + 0x417e, 0x4e79, 0x5861, 0x585e, 0x585b, 0x585a, 0x585f, 0x4a30, + 0x4634, 0x3746, 0x5862, 0x585d, 0x5863, 0x377b, 0x3231, 0x586b, + 0x3438, 0x5869, 0x586a, 0x3a29, 0x5868, 0x5866, 0x5865, 0x586c, + 0x5864, 0x586e, 0x327b, 0x5870, 0x586f, 0x4428, 0x5873, 0x5871, + 0x5867, 0x377c, 0x5872, 0x5876, 0x5875, 0x5877, 0x5874, 0x5878, + 0x5879, 0x587a, 0x4a6a, 0x587c, 0x587b, 0x3d3f, 0x402e, 0x3266, + 0x327c, 0x587d, 0x303f, 0x404c, 0x587e, 0x6c43, 0x5921, 0x3761, + 0x5922, 0x406f, 0x5923, 0x5924, 0x353a, 0x5925, 0x5926, 0x5927, + 0x4257, 0x384d, 0x4c61, 0x4b3c, 0x3d6a, 0x5928, 0x4070, 0x6e3d, + 0x4862, 0x3c6a, 0x3a4d, 0x5929, 0x4247, 0x4a27, 0x4271, 0x592c, + 0x592a, 0x592d, 0x592b, 0x592e, 0x4a31, 0x3037, 0x495e, 0x4863, + 0x592f, 0x5932, 0x3e35, 0x353b, 0x5930, 0x5937, 0x3e36, 0x5931, + 0x4744, 0x4d5e, 0x5933, 0x5934, 0x5938, 0x456a, 0x5935, 0x3933, + 0x405e, 0x5946, 0x4834, 0x4272, 0x4864, 0x5a2d, 0x4a7a, 0x4471, + 0x4b75, 0x593b, 0x3221, 0x436a, 0x5944, 0x4334, 0x593e, 0x5945, + 0x5940, 0x5947, 0x5943, 0x5942, 0x476f, 0x593c, 0x327d, 0x593a, + 0x3571, 0x4273, 0x5936, 0x5939, 0x3934, 0x405b, 0x3e37, 0x5941, + 0x4752, 0x3572, 0x3348, 0x3367, 0x3f21, 0x5949, 0x594e, 0x594a, + 0x377d, 0x594f, 0x3b22, 0x3969, 0x3d26, 0x593d, 0x3b7d, 0x594c, + 0x3b58, 0x594d, 0x3044, 0x5948, 0x4429, 0x3573, 0x3634, 0x594b, + 0x3027, 0x3a43, 0x3f36, 0x4472, 0x4854, 0x5951, 0x415e, 0x422a, + 0x3b2b, 0x5952, 0x5954, 0x5950, 0x4a61, 0x443d, 0x415c, 0x4a7b, + 0x3c4e, 0x5960, 0x595f, 0x3f78, 0x377e, 0x5959, 0x3e39, 0x4668, + 0x4731, 0x5957, 0x415d, 0x3c78, 0x595c, 0x3e38, 0x5956, 0x595b, + 0x4753, 0x5955, 0x3721, 0x335d, 0x595d, 0x4e2b, 0x3a4e, 0x4335, + 0x595a, 0x405c, 0x3935, 0x3f64, 0x3166, 0x413c, 0x5958, 0x3545, + 0x3747, 0x444f, 0x595e, 0x415f, 0x5961, 0x5963, 0x4237, 0x5969, + 0x5964, 0x5966, 0x4941, 0x4473, 0x5967, 0x4d2c, 0x4d48, 0x3439, + 0x302e, 0x5965, 0x5962, 0x3478, 0x3167, 0x5968, 0x4d49, 0x596c, + 0x423b, 0x5973, 0x596d, 0x596a, 0x5971, 0x5953, 0x596e, 0x5972, + 0x4842, 0x456b, 0x596b, 0x596f, 0x3748, 0x3a71, 0x405d, 0x5977, + 0x4526, 0x5974, 0x4b60, 0x5975, 0x5976, 0x4c4e, 0x4022, 0x3762, + 0x597d, 0x3b35, 0x597a, 0x5979, 0x4732, 0x4635, 0x4531, 0x597b, + 0x597c, 0x496f, 0x4745, 0x3b23, 0x4071, 0x4b50, 0x3349, 0x5a25, + 0x597e, 0x4d4a, 0x5a27, 0x5a23, 0x5a24, 0x4160, 0x5a22, 0x593f, + 0x5a26, 0x5a21, 0x5a2b, 0x5a2c, 0x4527, 0x5a2e, 0x3b24, 0x5a29, + 0x353c, 0x5a2f, 0x5a28, 0x5a33, 0x5a32, 0x5a31, 0x5a34, 0x5a36, + 0x3e71, 0x5a35, 0x5a39, 0x5a37, 0x5a38, 0x5970, 0x5a3b, 0x5a3a, + 0x5978, 0x5a3c, 0x5a30, 0x3b59, 0x5a3d, 0x5a3e, 0x5a40, 0x5a3f, + 0x5a41, 0x327e, 0x3936, 0x4a7c, 0x402f, 0x384e, 0x5a43, 0x5a46, + 0x4952, 0x355f, 0x5a45, 0x5a44, 0x4754, 0x5a47, 0x3635, 0x5a49, + 0x5a48, 0x343a, 0x3b36, 0x4658, 0x3749, 0x3f74, 0x5a4a, 0x4030, + 0x4528, 0x495f, 0x5a4b, 0x5a4c, 0x5a4d, 0x4a38, 0x555d, 0x4046, + 0x494c, 0x3a58, 0x4865, 0x4843, 0x454d, 0x4e41, 0x5a4f, 0x3c50, + 0x5a50, 0x3036, 0x3654, 0x404d, 0x4960, 0x5a51, 0x3b42, 0x4347, + 0x3b5b, 0x3f37, 0x5a52, 0x4a7d, 0x3177, 0x3b5c, 0x5a55, 0x5a53, + 0x5a56, 0x4e39, 0x5a54, 0x407b, 0x5a57, 0x4232, 0x5a58, 0x347a, + 0x5a5a, 0x5a59, 0x5a5b, 0x5a5c, 0x347b, 0x467c, 0x4336, 0x356c, + 0x3b5d, 0x4161, 0x3d5c, 0x3030, 0x5a5d, 0x3222, 0x5a61, 0x3937, + 0x5a60, 0x3a2b, 0x3e3a, 0x5a5f, 0x3e3b, 0x4c40, 0x3a2a, 0x3057, + 0x404e, 0x5a66, 0x4031, 0x3147, 0x3d55, 0x4b66, 0x3a72, 0x3e3c, + 0x4027, 0x5a65, 0x5a63, 0x5a64, 0x436b, 0x5b26, 0x5a6a, 0x3b7e, + 0x3938, 0x5a68, 0x5a69, 0x3f38, 0x5a67, 0x3b2f, 0x5a6c, 0x5a6b, + 0x5a70, 0x5a71, 0x5a6d, 0x3322, 0x5a6e, 0x5a6f, 0x4855, 0x4961, + 0x374a, 0x5a72, 0x4032, 0x3e3d, 0x4352, 0x3647, 0x5a73, 0x5a77, + 0x324b, 0x5a74, 0x5a76, 0x5a75, 0x3d6b, 0x4348, 0x3045, 0x5a78, + 0x5a79, 0x442a, 0x4e71, 0x3b43, 0x4a6b, 0x4b3d, 0x5b22, 0x5a7b, + 0x5a7e, 0x5a7d, 0x5a7a, 0x5b21, 0x465e, 0x5a7c, 0x5b23, 0x3d6c, + 0x5b24, 0x4d4b, 0x4778, 0x5b25, 0x5b27, 0x5b28, 0x5b29, 0x364a, + 0x3148, 0x3939, 0x5b2a, 0x5b2b, 0x3d71, 0x4162, 0x5258, 0x413e, + 0x413d, 0x4258, 0x3a47, 0x5072, 0x376e, 0x4d2d, 0x4a7e, 0x497e, + 0x5b2c, 0x3a73, 0x443f, 0x5b2d, 0x4f2f, 0x4b3e, 0x442b, 0x5b2e, + 0x347c, 0x5b2f, 0x5b30, 0x4c5a, 0x4c24, 0x4b76, 0x4b5c, 0x3b25, + 0x5b32, 0x3c6b, 0x4b51, 0x5b34, 0x5b37, 0x5b36, 0x3479, 0x3560, + 0x5b33, 0x5b35, 0x5b38, 0x3f79, 0x4d7b, 0x3049, 0x3a60, 0x423c, + 0x3c5d, 0x3e73, 0x5b3b, 0x454e, 0x5b39, 0x422b, 0x5b3a, 0x3e72, + 0x4c5d, 0x5b3c, 0x5b3d, 0x4d68, 0x5b42, 0x393a, 0x4755, 0x5b3f, + 0x456c, 0x5a5e, 0x5a62, 0x354f, 0x4747, 0x5b41, 0x3e3e, 0x4844, + 0x5b47, 0x487a, 0x5b3e, 0x5b44, 0x5b43, 0x404f, 0x4b6d, 0x4e53, + 0x4b67, 0x324c, 0x3b5e, 0x4f48, 0x5b46, 0x3f75, 0x5b45, 0x5b40, + 0x384f, 0x5b4c, 0x5b4a, 0x324d, 0x5b48, 0x5b4e, 0x5b54, 0x4248, + 0x4a41, 0x5b56, 0x4922, 0x5b55, 0x4770, 0x4b3f, 0x343b, 0x4077, + 0x3d40, 0x4453, 0x4d2e, 0x5b51, 0x5b50, 0x5b52, 0x5b4f, 0x5b57, + 0x5b4d, 0x5b4b, 0x5b53, 0x5b49, 0x436c, 0x4c78, 0x3c46, 0x3a74, + 0x3a3a, 0x4b6f, 0x3341, 0x444e, 0x464a, 0x3149, 0x4072, 0x4034, + 0x372a, 0x5b59, 0x393b, 0x337c, 0x5b5b, 0x3374, 0x5b61, 0x5b5e, + 0x4073, 0x334b, 0x3a2c, 0x334a, 0x3a4f, 0x5b5c, 0x3765, 0x374b, + 0x456d, 0x5b5a, 0x3046, 0x5b5d, 0x5b5f, 0x364d, 0x372c, 0x343c, + 0x354b, 0x5b62, 0x3a79, 0x4b71, 0x3b37, 0x5b63, 0x4930, 0x5b6f, + 0x3233, 0x5b64, 0x5b75, 0x5b65, 0x4e42, 0x5b6c, 0x475f, 0x5b74, + 0x5b67, 0x3034, 0x5b69, 0x393c, 0x5b6b, 0x5b6a, 0x5b66, 0x5b71, + 0x3e3f, 0x546d, 0x3868, 0x4d7c, 0x5b68, 0x4474, 0x3323, 0x3a2d, + 0x5b60, 0x5b70, 0x3361, 0x5b6e, 0x5b72, 0x456e, 0x347e, 0x5c32, + 0x4c49, 0x5b77, 0x347d, 0x5b7e, 0x4b40, 0x5c21, 0x5c23, 0x5c27, + 0x5b79, 0x432a, 0x456f, 0x5c2b, 0x5b7c, 0x5c28, 0x5c22, 0x3f39, + 0x5c2c, 0x4033, 0x5c2a, 0x343d, 0x4f50, 0x5b76, 0x5c26, 0x3058, + 0x5b78, 0x4c3a, 0x5b7d, 0x3f22, 0x4447, 0x5b73, 0x5c25, 0x3f7a, + 0x5c2f, 0x3371, 0x3821, 0x5c31, 0x5b7a, 0x5c30, 0x5c29, 0x5b7b, + 0x5c2d, 0x5c2e, 0x5c3f, 0x464e, 0x5c24, 0x5c3b, 0x5c3d, 0x4458, + 0x4d4c, 0x4976, 0x5c38, 0x424a, 0x5c3e, 0x413f, 0x5c35, 0x5c42, + 0x5c41, 0x466f, 0x5c40, 0x466a, 0x5c44, 0x5c37, 0x3648, 0x5c3a, + 0x3d5d, 0x4760, 0x5c3c, 0x364b, 0x5c34, 0x5c36, 0x5c33, 0x4f30, + 0x335a, 0x5c39, 0x5c43, 0x3335, 0x3a67, 0x315d, 0x5c54, 0x4f31, + 0x5c57, 0x3f3a, 0x5c56, 0x5c55, 0x5c52, 0x5c46, 0x5c63, 0x5c45, + 0x5c58, 0x5c50, 0x5c4b, 0x5c48, 0x5c49, 0x5c51, 0x7422, 0x5c4e, + 0x393d, 0x4448, 0x4164, 0x5c4c, 0x5c47, 0x5c4a, 0x4d4d, 0x4b6a, + 0x5c4f, 0x5c59, 0x5c61, 0x5c5a, 0x5c67, 0x5c65, 0x5c60, 0x5c5f, + 0x4450, 0x4165, 0x5c5d, 0x5c5b, 0x5c62, 0x5c68, 0x4875, 0x5c6e, + 0x5c69, 0x5c6c, 0x5c66, 0x4374, 0x4938, 0x5c5c, 0x5c64, 0x3e40, + 0x4c4f, 0x5c78, 0x5c6b, 0x3822, 0x3223, 0x335f, 0x5c53, 0x3e41, + 0x5c70, 0x5c77, 0x3c79, 0x3372, 0x432e, 0x5c6d, 0x5c72, 0x5c76, + 0x3636, 0x354c, 0x5c74, 0x3521, 0x464b, 0x5c73, 0x5c75, 0x5c6f, + 0x5c71, 0x3360, 0x4349, 0x5c7c, 0x5c7a, 0x3869, 0x5c79, 0x5d21, + 0x5b58, 0x5c7b, 0x5c7d, 0x5c7e, 0x5d2c, 0x5d28, 0x5b6d, 0x5d27, + 0x5d26, 0x5d23, 0x5c6a, 0x5d25, 0x5d24, 0x5d2a, 0x4f26, 0x5d2d, + 0x367b, 0x5d29, 0x5d2b, 0x4827, 0x5d2e, 0x5d32, 0x5d2f, 0x4d73, + 0x5d30, 0x5c5e, 0x5d33, 0x5d34, 0x3135, 0x5d36, 0x3767, 0x3c21, + 0x3655, 0x3224, 0x4d5f, 0x5d38, 0x5d37, 0x5d3a, 0x353d, 0x3656, + 0x343e, 0x5d3d, 0x5d3c, 0x5d3e, 0x324e, 0x4337, 0x5d3f, 0x343f, + 0x5d41, 0x5d40, 0x5d42, 0x5d43, 0x5d44, 0x3b5f, 0x4035, 0x3a21, + 0x4970, 0x4a62, 0x4f44, 0x3b75, 0x3a50, 0x4e72, 0x5d45, 0x5d46, + 0x3b60, 0x5d47, 0x5d48, 0x5d4a, 0x5d49, 0x4b58, 0x3d5e, 0x3c6c, + 0x3b44, 0x5d4b, 0x5d4d, 0x3f23, 0x5d4c, 0x5d4e, 0x5d4f, 0x5d50, + 0x5d51, 0x5d52, 0x5d54, 0x5d53, 0x5d55, 0x3225, 0x434a, 0x5d56, + 0x3b26, 0x334c, 0x5d57, 0x4542, 0x544c, 0x3523, 0x5d58, 0x5d59, + 0x4a6c, 0x4b68, 0x4647, 0x5d5a, 0x4866, 0x487b, 0x4c53, 0x5d5b, + 0x5d5d, 0x5d5c, 0x5d5f, 0x5d5e, 0x5d61, 0x3b61, 0x4c31, 0x5d62, + 0x5d63, 0x3524, 0x5d64, 0x5d66, 0x5d65, 0x3f65, 0x4939, 0x314a, + 0x4845, 0x4475, 0x3d41, 0x3561, 0x4846, 0x3c2e, 0x5d68, 0x3440, + 0x3178, 0x4672, 0x5d67, 0x393e, 0x4353, 0x5d69, 0x5d71, 0x5d6a, + 0x4241, 0x3562, 0x5d72, 0x3768, 0x3525, 0x5d70, 0x5d6e, 0x5d6b, + 0x4d60, 0x4440, 0x4659, 0x5d6c, 0x5d74, 0x5d73, 0x3723, 0x322d, + 0x3a3b, 0x5d6d, 0x5d6f, 0x4b57, 0x4274, 0x4b77, 0x5d7c, 0x5d7d, + 0x324f, 0x4a28, 0x4c7d, 0x5e21, 0x3c23, 0x3e42, 0x5d78, 0x5d7e, + 0x3168, 0x3637, 0x5d75, 0x5d7a, 0x4074, 0x4771, 0x4867, 0x5d77, + 0x4b21, 0x5d79, 0x5e24, 0x5e22, 0x5d7b, 0x4b22, 0x4748, 0x3563, + 0x4525, 0x436d, 0x5e25, 0x5e23, 0x4259, 0x5d76, 0x314b, 0x4d4e, + 0x5e30, 0x5e2f, 0x4076, 0x5e2c, 0x4d6c, 0x4636, 0x5e26, 0x4445, + 0x314c, 0x393f, 0x5e29, 0x3d27, 0x5e2e, 0x5e2d, 0x5e28, 0x5e2b, + 0x3368, 0x5e2a, 0x4749, 0x4e2e, 0x3e74, 0x4075, 0x5e36, 0x5e34, + 0x494d, 0x5e31, 0x5e33, 0x313a, 0x3940, 0x4f32, 0x333d, 0x4962, + 0x4d61, 0x3324, 0x3f3b, 0x5e35, 0x5e3a, 0x3e43, 0x4d30, 0x5e37, + 0x5e32, 0x5e38, 0x4e5e, 0x4573, 0x4642, 0x3336, 0x3155, 0x5e3e, + 0x5e41, 0x4e43, 0x4d64, 0x5e48, 0x5e42, 0x5e3f, 0x4e54, 0x5e45, + 0x3d4a, 0x5e47, 0x5e4c, 0x4571, 0x5e4a, 0x5e44, 0x4338, 0x5e4b, + 0x5e40, 0x5e46, 0x5e4d, 0x307c, 0x5e43, 0x5e4e, 0x3f3c, 0x3d5f, + 0x4a25, 0x3a2e, 0x5e3b, 0x5e49, 0x453a, 0x4036, 0x3369, 0x3a51, + 0x3e44, 0x5e3d, 0x3d42, 0x374c, 0x5e3c, 0x5e52, 0x3d6d, 0x383a, + 0x5e61, 0x5e5b, 0x3574, 0x454f, 0x5e56, 0x5e5f, 0x302f, 0x3132, + 0x3239, 0x5e58, 0x422c, 0x5e4f, 0x5e51, 0x3941, 0x5e62, 0x5e5d, + 0x5e55, 0x5e5c, 0x4c2b, 0x5e5a, 0x5e5e, 0x3850, 0x3e45, 0x4339, + 0x5e54, 0x4d2f, 0x5e57, 0x5e50, 0x4572, 0x5e53, 0x5e59, 0x4f51, + 0x3c3e, 0x4b7e, 0x5e63, 0x482e, 0x5e6f, 0x383b, 0x3d60, 0x5e65, + 0x4e2f, 0x3942, 0x5e72, 0x306e, 0x5e70, 0x5e64, 0x5e6a, 0x5e6c, + 0x4d4f, 0x5e67, 0x452e, 0x5e69, 0x5e71, 0x5e6b, 0x4c47, 0x5e66, + 0x3c22, 0x5e7e, 0x336a, 0x5e68, 0x5e6d, 0x5e6e, 0x426c, 0x425a, + 0x5e76, 0x5e7c, 0x5e7a, 0x4529, 0x5f23, 0x5e77, 0x5e78, 0x5e60, + 0x3579, 0x493a, 0x3c3f, 0x3977, 0x4f33, 0x5e74, 0x5f22, 0x3169, + 0x4166, 0x4779, 0x3441, 0x4e7a, 0x4c21, 0x4452, 0x5e7b, 0x5e7d, + 0x4132, 0x5f21, 0x5e79, 0x5e73, 0x3443, 0x3769, 0x5f2f, 0x5f2a, + 0x4078, 0x3363, 0x3d61, 0x5f33, 0x5f2c, 0x442c, 0x5f29, 0x4459, + 0x5f4c, 0x5f26, 0x5f25, 0x5f2e, 0x5f28, 0x5f27, 0x5f2d, 0x4021, + 0x5f24, 0x5f30, 0x5f31, 0x3442, 0x5f36, 0x5f35, 0x5f37, 0x5f3a, + 0x4543, 0x5f34, 0x5f38, 0x3763, 0x4279, 0x5f32, 0x473b, 0x5f39, + 0x5f3e, 0x5f3c, 0x5f3f, 0x5f42, 0x5f3b, 0x396a, 0x4728, 0x5e39, + 0x4d74, 0x5f3d, 0x5f41, 0x4275, 0x5f40, 0x5f2b, 0x6f69, 0x5f45, + 0x5f49, 0x5f47, 0x5f43, 0x5f44, 0x5f48, 0x5f46, 0x494e, 0x5f4e, + 0x5f4b, 0x5f4a, 0x5f4d, 0x4654, 0x5f4f, 0x4375, 0x426d, 0x4025, + 0x5f50, 0x5f52, 0x5f51, 0x5e75, 0x5f53, 0x4667, 0x5f54, 0x3250, + 0x4574, 0x3325, 0x3564, 0x3c5e, 0x3a52, 0x4f27, 0x3f66, 0x316a, + 0x5f56, 0x5f55, 0x5f59, 0x433a, 0x5f5c, 0x5f57, 0x5f5b, 0x5f5a, + 0x4540, 0x3059, 0x4e75, 0x5f5e, 0x3128, 0x5f60, 0x5f5f, 0x5f5d, + 0x5f58, 0x4b23, 0x5f62, 0x5f61, 0x316b, 0x5f64, 0x4a32, 0x5f63, + 0x4c35, 0x3e47, 0x4133, 0x3e46, 0x4e7b, 0x5f6a, 0x4079, 0x5f66, + 0x5f6b, 0x316c, 0x5f69, 0x4761, 0x5f65, 0x5f68, 0x3e48, 0x4851, + 0x5f6c, 0x3c51, 0x407a, 0x5f6f, 0x5f67, 0x3727, 0x5f6d, 0x4d50, + 0x5f70, 0x7426, 0x3d4f, 0x5f71, 0x5f72, 0x472e, 0x5f74, 0x5f75, + 0x4733, 0x4575, 0x5f77, 0x5f79, 0x4e55, 0x5f76, 0x5f78, 0x316d, + 0x5f73, 0x535b, 0x5f7a, 0x4167, 0x3b38, 0x5f7c, 0x5f7b, 0x3f24, + 0x5259, 0x5f7d, 0x6021, 0x5f6e, 0x5f7e, 0x6022, 0x477a, 0x6023, + 0x6024, 0x6025, 0x6026, 0x445e, 0x6028, 0x6027, 0x6029, 0x602a, + 0x3c5f, 0x4963, 0x4c6c, 0x602b, 0x602c, 0x4156, 0x3c24, 0x602d, + 0x602e, 0x602f, 0x4a52, 0x4847, 0x6030, 0x4757, 0x442d, 0x6031, + 0x3267, 0x356d, 0x4c46, 0x4c36, 0x3234, 0x4f34, 0x4b52, 0x4a2a, + 0x4037, 0x6032, 0x4643, 0x3823, 0x6033, 0x3a54, 0x6035, 0x6034, + 0x6036, 0x6037, 0x6038, 0x353e, 0x6039, 0x603a, 0x3824, 0x4848, + 0x603c, 0x3e75, 0x603b, 0x3638, 0x603d, 0x603f, 0x603e, 0x6040, + 0x3851, 0x6041, 0x3669, 0x4140, 0x397d, 0x6043, 0x6044, 0x6042, + 0x3c6d, 0x4648, 0x3639, 0x6046, 0x432c, 0x6045, 0x4f35, 0x4762, + 0x6049, 0x604b, 0x6048, 0x4c54, 0x604a, 0x604c, 0x4e44, 0x6050, + 0x604f, 0x4376, 0x472d, 0x3825, 0x604e, 0x604d, 0x4d31, 0x4d32, + 0x6051, 0x316e, 0x3976, 0x3b62, 0x6052, 0x6053, 0x6055, 0x3d43, + 0x6057, 0x6056, 0x6058, 0x334d, 0x605a, 0x6059, 0x605c, 0x605b, + 0x383c, 0x4e28, 0x364c, 0x3226, 0x366a, 0x3461, 0x4e68, 0x605e, + 0x6060, 0x6061, 0x3251, 0x605d, 0x3b39, 0x4441, 0x605f, 0x6064, + 0x3c6e, 0x6062, 0x373e, 0x4849, 0x6063, 0x607e, 0x6069, 0x383d, + 0x3565, 0x6066, 0x4d7d, 0x4e30, 0x4276, 0x6068, 0x606a, 0x4e56, + 0x3657, 0x487c, 0x474a, 0x606b, 0x606d, 0x6070, 0x606c, 0x606f, + 0x386a, 0x314d, 0x6071, 0x3f70, 0x606e, 0x4e5c, 0x6074, 0x7424, + 0x6072, 0x6075, 0x6067, 0x6073, 0x3a3c, 0x6076, 0x6077, 0x4d7e, + 0x6078, 0x6079, 0x6065, 0x607a, 0x3444, 0x3c25, 0x607b, 0x607c, + 0x607d, 0x313b, 0x6121, 0x493b, 0x6122, 0x3424, 0x6123, 0x6124, + 0x6125, 0x6127, 0x6128, 0x6126, 0x4953, 0x612a, 0x6129, 0x612c, + 0x612b, 0x612d, 0x612e, 0x6130, 0x612f, 0x3979, 0x6132, 0x6131, + 0x3445, 0x3f53, 0x453c, 0x6133, 0x4038, 0x3b3a, 0x3179, 0x6134, + 0x4d51, 0x4a63, 0x6135, 0x4544, 0x4d33, 0x3943, 0x3f3d, 0x434b, + 0x5234, 0x442e, 0x3268, 0x6136, 0x6137, 0x613c, 0x613a, 0x6139, + 0x5a42, 0x3326, 0x6138, 0x305a, 0x482a, 0x484a, 0x4e31, 0x613d, + 0x613b, 0x435c, 0x4026, 0x482b, 0x492d, 0x613f, 0x4e2c, 0x374d, + 0x6140, 0x613e, 0x4856, 0x6141, 0x6142, 0x305b, 0x3e76, 0x6147, + 0x6144, 0x466d, 0x6143, 0x3526, 0x614a, 0x6145, 0x6146, 0x6149, + 0x6148, 0x4925, 0x4142, 0x4141, 0x353f, 0x614b, 0x614c, 0x614d, + 0x614f, 0x614e, 0x3156, 0x6157, 0x4868, 0x6151, 0x6153, 0x6155, + 0x3f3e, 0x6156, 0x6154, 0x3c40, 0x6150, 0x6152, 0x4942, 0x3e49, + 0x6159, 0x6158, 0x615a, 0x3c26, 0x3a2f, 0x4577, 0x615b, 0x444b, + 0x615d, 0x4e21, 0x615c, 0x4169, 0x6162, 0x6164, 0x6165, 0x4354, + 0x6163, 0x6160, 0x615e, 0x615f, 0x6161, 0x6168, 0x6166, 0x6167, + 0x6169, 0x616b, 0x616c, 0x616d, 0x616e, 0x616a, 0x6170, 0x616f, + 0x6171, 0x4e45, 0x6174, 0x6172, 0x6173, 0x3462, 0x4c7e, 0x4a4a, + 0x6176, 0x6175, 0x6177, 0x6178, 0x617c, 0x6179, 0x617a, 0x617b, + 0x617d, 0x617e, 0x6221, 0x6222, 0x6223, 0x482f, 0x4550, 0x6224, + 0x4772, 0x4934, 0x6225, 0x6226, 0x452a, 0x3327, 0x3944, 0x6227, + 0x6228, 0x6229, 0x3b29, 0x622b, 0x622a, 0x622c, 0x622d, 0x4869, + 0x622e, 0x622f, 0x7369, 0x6230, 0x6231, 0x6232, 0x3b2e, 0x6233, + 0x4756, 0x4b5f, 0x314e, 0x3157, 0x6234, 0x6236, 0x6235, 0x4570, + 0x4039, 0x5d39, 0x6237, 0x4c41, 0x6238, 0x3446, 0x4857, 0x6239, + 0x623a, 0x623b, 0x4c5c, 0x4c55, 0x443e, 0x416a, 0x623d, 0x3d62, + 0x3e4a, 0x6240, 0x623f, 0x623e, 0x487d, 0x3447, 0x3829, 0x6246, + 0x6243, 0x3f3f, 0x4c32, 0x6242, 0x6244, 0x6245, 0x6241, 0x6247, + 0x6248, 0x442f, 0x3463, 0x4365, 0x6249, 0x624a, 0x624d, 0x3f67, + 0x4644, 0x624e, 0x4b53, 0x624b, 0x624c, 0x6251, 0x6250, 0x624f, + 0x6253, 0x6252, 0x6254, 0x6256, 0x6255, 0x4a4d, 0x3d56, 0x4e46, + 0x6257, 0x4637, 0x6258, 0x6259, 0x625d, 0x625b, 0x625c, 0x625a, + 0x625e, 0x625f, 0x6260, 0x6261, 0x4c37, 0x6262, 0x4c70, 0x6263, + 0x434e, 0x476a, 0x366b, 0x433b, 0x6264, 0x363a, 0x4050, 0x6265, + 0x3a3d, 0x6266, 0x6267, 0x3826, 0x3a55, 0x6269, 0x4556, 0x3a56, + 0x354e, 0x4b24, 0x474b, 0x4557, 0x395c, 0x626b, 0x3e4b, 0x4e32, + 0x3945, 0x3827, 0x4823, 0x626d, 0x626f, 0x386b, 0x626e, 0x4476, + 0x6271, 0x3337, 0x626c, 0x486a, 0x3130, 0x3a6c, 0x4f52, 0x6270, + 0x6272, 0x4a4b, 0x4059, 0x6274, 0x6275, 0x6273, 0x334e, 0x627b, + 0x627a, 0x3c27, 0x627c, 0x6277, 0x627d, 0x6278, 0x4858, 0x6276, + 0x6279, 0x6322, 0x6321, 0x4b61, 0x627e, 0x306b, 0x6324, 0x6323, + 0x3e4c, 0x6325, 0x4143, 0x6327, 0x6326, 0x6328, 0x6268, 0x626a, + 0x632a, 0x6329, 0x3c28, 0x4e69, 0x3c52, 0x632b, 0x3737, 0x3540, + 0x3527, 0x3b63, 0x4d34, 0x6331, 0x6330, 0x4144, 0x632d, 0x632f, + 0x3d4b, 0x3f40, 0x632e, 0x632c, 0x472a, 0x3e4d, 0x493c, 0x3a57, + 0x4578, 0x6332, 0x6333, 0x6349, 0x3658, 0x4f3d, 0x4135, 0x6334, + 0x3252, 0x4477, 0x4a21, 0x6335, 0x357a, 0x6336, 0x6338, 0x6339, + 0x4729, 0x633a, 0x633b, 0x633c, 0x3659, 0x3253, 0x4645, 0x3d28, + 0x3b64, 0x633d, 0x3d29, 0x324a, 0x4943, 0x633e, 0x486b, 0x4145, + 0x6341, 0x6342, 0x4769, 0x3f41, 0x633f, 0x4361, 0x6340, 0x3e4e, + 0x305c, 0x3529, 0x6343, 0x4478, 0x6344, 0x4047, 0x4c2d, 0x4923, + 0x6345, 0x6346, 0x4355, 0x4e47, 0x6348, 0x6347, 0x3c6f, 0x634a, + 0x3070, 0x634d, 0x634b, 0x3254, 0x374e, 0x634c, 0x3946, 0x3972, + 0x4a66, 0x634e, 0x4b54, 0x6350, 0x4051, 0x314f, 0x323a, 0x302c, + 0x634f, 0x6351, 0x6352, 0x3e77, 0x6353, 0x334f, 0x6355, 0x376a, + 0x3566, 0x6356, 0x3675, 0x6357, 0x407c, 0x464d, 0x4060, 0x3a75, + 0x6358, 0x4362, 0x416b, 0x635a, 0x635c, 0x6359, 0x635b, 0x3722, + 0x635d, 0x3726, 0x3567, 0x4d52, 0x635f, 0x6360, 0x312e, 0x6363, + 0x3376, 0x6362, 0x6361, 0x6365, 0x635e, 0x6366, 0x4e29, 0x6367, + 0x6368, 0x5474, 0x636a, 0x6369, 0x636b, 0x636c, 0x4e35, 0x636d, + 0x706f, 0x3e4f, 0x636e, 0x636f, 0x3d57, 0x4638, 0x6370, 0x4328, + 0x6371, 0x433c, 0x6372, 0x3625, 0x513f, 0x435d, 0x3c33, 0x3448, + 0x6373, 0x6422, 0x6376, 0x3568, 0x6375, 0x6424, 0x6374, 0x3e50, + 0x6378, 0x6379, 0x452b, 0x637a, 0x335e, 0x3f5a, 0x4964, 0x637c, + 0x4268, 0x6377, 0x637b, 0x637d, 0x3a7b, 0x6426, 0x492e, 0x4826, + 0x4579, 0x365a, 0x6425, 0x6423, 0x4835, 0x637e, 0x435e, 0x457b, + 0x457a, 0x3a76, 0x6438, 0x6428, 0x642a, 0x642d, 0x642e, 0x642b, + 0x642c, 0x6429, 0x6427, 0x6421, 0x4a4f, 0x3255, 0x6435, 0x6432, + 0x6437, 0x6436, 0x4773, 0x4c27, 0x3b3b, 0x6430, 0x6439, 0x6434, + 0x6433, 0x642f, 0x6431, 0x3449, 0x433d, 0x407d, 0x4822, 0x643e, + 0x4824, 0x4061, 0x643b, 0x484f, 0x643f, 0x4a53, 0x435b, 0x643a, + 0x643c, 0x643d, 0x6440, 0x3c44, 0x4646, 0x6445, 0x6444, 0x6441, + 0x4f36, 0x644a, 0x644e, 0x644b, 0x6447, 0x6448, 0x644d, 0x6442, + 0x5255, 0x6449, 0x6443, 0x644c, 0x6452, 0x344a, 0x644f, 0x6450, + 0x6451, 0x6454, 0x6453, 0x4876, 0x6455, 0x4e7c, 0x4a6d, 0x645a, + 0x6457, 0x6456, 0x4052, 0x6459, 0x645b, 0x6458, 0x645f, 0x645c, + 0x645d, 0x6446, 0x645e, 0x6460, 0x6461, 0x4a46, 0x6462, 0x4c62, + 0x364e, 0x3729, 0x6463, 0x4a34, 0x3f68, 0x4c30, 0x6464, 0x4e33, + 0x4774, 0x4146, 0x4734, 0x3d4d, 0x3040, 0x6469, 0x6467, 0x6465, + 0x3421, 0x3e51, 0x646a, 0x6468, 0x6466, 0x646e, 0x646d, 0x646c, + 0x646b, 0x646f, 0x6470, 0x403a, 0x6471, 0x6473, 0x6472, 0x3852, + 0x4138, 0x6475, 0x457c, 0x6474, 0x6476, 0x4a35, 0x416c, 0x3947, + 0x6477, 0x4e48, 0x6479, 0x647a, 0x647b, 0x647c, 0x3b65, 0x647d, + 0x374f, 0x356a, 0x352a, 0x6521, 0x4c73, 0x3948, 0x647e, 0x6524, + 0x4c66, 0x473c, 0x4933, 0x3d63, 0x6523, 0x3c53, 0x3949, 0x3b66, + 0x3569, 0x4a36, 0x6522, 0x4147, 0x4b42, 0x3a77, 0x3b67, 0x445d, + 0x6527, 0x4e5f, 0x3a59, 0x6528, 0x3f42, 0x652a, 0x3e52, 0x3a30, + 0x6529, 0x3d2a, 0x383e, 0x4148, 0x6525, 0x652b, 0x6526, 0x3750, + 0x652e, 0x6532, 0x376b, 0x652d, 0x6536, 0x394a, 0x4d6d, 0x303c, + 0x6533, 0x356b, 0x6530, 0x6531, 0x457d, 0x652f, 0x652c, 0x3328, + 0x4064, 0x3828, 0x6538, 0x6535, 0x6537, 0x6534, 0x3751, 0x4233, + 0x6539, 0x416e, 0x6546, 0x6542, 0x653c, 0x6540, 0x3c7a, 0x305d, + 0x653b, 0x6543, 0x6547, 0x394b, 0x4c56, 0x4456, 0x653d, 0x6545, + 0x653a, 0x433e, 0x653f, 0x303d, 0x4c4a, 0x653e, 0x365b, 0x486c, + 0x416d, 0x4e50, 0x3d6f, 0x656e, 0x6548, 0x407e, 0x6544, 0x6549, + 0x654b, 0x4479, 0x654e, 0x654a, 0x4a54, 0x344b, 0x4c4b, 0x305e, + 0x654d, 0x4e7d, 0x654c, 0x316f, 0x466c, 0x654f, 0x6556, 0x6550, + 0x6557, 0x6553, 0x477b, 0x3c4a, 0x6555, 0x6552, 0x6558, 0x6551, + 0x3d44, 0x4b25, 0x3d4c, 0x6554, 0x6560, 0x655c, 0x655f, 0x655d, + 0x6561, 0x655b, 0x6541, 0x4053, 0x484b, 0x655e, 0x6559, 0x4121, + 0x3752, 0x3d2b, 0x3f25, 0x4136, 0x6564, 0x6566, 0x6567, 0x6563, + 0x6565, 0x655a, 0x6562, 0x656a, 0x6569, 0x4b7a, 0x372b, 0x6568, + 0x656c, 0x656b, 0x656f, 0x6571, 0x3b3c, 0x656d, 0x6572, 0x6573, + 0x6574, 0x657a, 0x453b, 0x6576, 0x6575, 0x6577, 0x6578, 0x6579, + 0x657b, 0x657c, 0x344c, 0x657d, 0x657e, 0x6621, 0x6622, 0x6623, + 0x6624, 0x6625, 0x6626, 0x6628, 0x6627, 0x6629, 0x662a, 0x662b, + 0x662e, 0x662c, 0x662d, 0x3a61, 0x3753, 0x4356, 0x4833, 0x3d70, + 0x474d, 0x486d, 0x662f, 0x586d, 0x6630, 0x6632, 0x4d65, 0x6631, + 0x6634, 0x6633, 0x4d53, 0x6635, 0x487e, 0x6636, 0x6639, 0x6638, + 0x6637, 0x663a, 0x3732, 0x4122, 0x3541, 0x663e, 0x663b, 0x663c, + 0x663f, 0x6640, 0x663d, 0x3129, 0x3227, 0x6642, 0x6643, 0x6644, + 0x4d62, 0x3d2c, 0x6646, 0x6645, 0x3f69, 0x6647, 0x6648, 0x6649, + 0x3465, 0x344d, 0x664a, 0x664b, 0x4b5d, 0x4d63, 0x4d54, 0x4f37, + 0x394d, 0x664e, 0x3c54, 0x664d, 0x664f, 0x3c29, 0x4251, 0x6650, + 0x394c, 0x4c57, 0x6651, 0x6652, 0x6653, 0x6654, 0x6655, 0x3c2a, + 0x4c6d, 0x6657, 0x433f, 0x6656, 0x6659, 0x6658, 0x665a, 0x403b, + 0x665b, 0x665c, 0x4a39, 0x665d, 0x416f, 0x665e, 0x665f, 0x4e7e, + 0x6662, 0x6661, 0x6660, 0x4430, 0x6663, 0x3f26, 0x6664, 0x6665, + 0x4f38, 0x6666, 0x6667, 0x6669, 0x6668, 0x4825, 0x4679, 0x4f3e, + 0x4829, 0x666b, 0x3e53, 0x492a, 0x666c, 0x666a, 0x344e, 0x3854, + 0x3b68, 0x486e, 0x382a, 0x4b43, 0x666f, 0x666d, 0x394e, 0x394f, + 0x3069, 0x3a68, 0x4759, 0x305f, 0x6674, 0x4340, 0x4758, 0x425b, + 0x6676, 0x6672, 0x6675, 0x6670, 0x6673, 0x4b26, 0x3855, 0x307d, + 0x6671, 0x6678, 0x6679, 0x4639, 0x363b, 0x6726, 0x473d, 0x3b69, + 0x363c, 0x4048, 0x4f46, 0x4c2e, 0x6677, 0x4054, 0x3553, 0x667a, + 0x667c, 0x667b, 0x667d, 0x4326, 0x473e, 0x4431, 0x6723, 0x6722, + 0x667e, 0x3f55, 0x4965, 0x6725, 0x6724, 0x3950, 0x4f53, 0x6735, + 0x6729, 0x672a, 0x3c70, 0x6728, 0x3978, 0x6727, 0x672b, 0x4432, + 0x4a22, 0x4123, 0x425c, 0x672f, 0x6730, 0x672c, 0x672d, 0x672e, + 0x3951, 0x6736, 0x6732, 0x4966, 0x4b6c, 0x4928, 0x6731, 0x6734, + 0x6733, 0x4b44, 0x6737, 0x6738, 0x4137, 0x6739, 0x673b, 0x673f, + 0x673c, 0x673a, 0x473f, 0x673d, 0x673e, 0x3232, 0x6745, 0x6740, + 0x6741, 0x6742, 0x4221, 0x6744, 0x6743, 0x6746, 0x6747, 0x6748, + 0x3f43, 0x3269, 0x6749, 0x4e57, 0x3c2b, 0x3d2d, 0x3b6a, 0x4357, + 0x674a, 0x674b, 0x3131, 0x674c, 0x674d, 0x674e, 0x674f, 0x6750, + 0x363d, 0x5a2a, 0x6751, 0x4065, 0x6752, 0x3c4b, 0x6753, 0x5030, + 0x6754, 0x4a5e, 0x345c, 0x4124, 0x3d58, 0x4971, 0x3d2e, 0x6755, + 0x3952, 0x6756, 0x484c, 0x6764, 0x6758, 0x4249, 0x4775, 0x383f, + 0x6757, 0x4125, 0x6759, 0x447a, 0x675b, 0x675a, 0x675d, 0x675c, + 0x675e, 0x6760, 0x675f, 0x344f, 0x6761, 0x6762, 0x6763, 0x3a31, + 0x4e49, 0x6765, 0x3f27, 0x3170, 0x6766, 0x6767, 0x6768, 0x3072, + 0x6769, 0x676a, 0x4967, 0x3c47, 0x676c, 0x3329, 0x3032, 0x676b, + 0x676e, 0x474e, 0x3f44, 0x3256, 0x4b27, 0x375d, 0x365c, 0x676d, + 0x326a, 0x3423, 0x3171, 0x6772, 0x4e6a, 0x425d, 0x4944, 0x677e, + 0x3257, 0x677c, 0x677a, 0x6771, 0x676f, 0x6770, 0x3c63, 0x366c, + 0x4377, 0x4651, 0x3151, 0x6774, 0x6773, 0x6779, 0x6775, 0x6778, + 0x4c50, 0x6777, 0x3258, 0x337d, 0x677b, 0x677d, 0x3754, 0x6823, + 0x682c, 0x682d, 0x302b, 0x6834, 0x3071, 0x682b, 0x682a, 0x6825, + 0x6824, 0x6822, 0x6821, 0x4363, 0x427b, 0x6827, 0x6826, 0x6829, + 0x4170, 0x3755, 0x3141, 0x6828, 0x3953, 0x4171, 0x683a, 0x683b, + 0x3259, 0x322e, 0x6838, 0x682e, 0x6836, 0x683d, 0x6837, 0x6835, + 0x6776, 0x6833, 0x682f, 0x3450, 0x6831, 0x683c, 0x6832, 0x683e, + 0x6830, 0x477c, 0x4d69, 0x6839, 0x684f, 0x6847, 0x3f7b, 0x3546, + 0x365d, 0x6842, 0x325b, 0x3e54, 0x6845, 0x3a5a, 0x4551, 0x684a, + 0x4a6e, 0x6841, 0x325a, 0x3856, 0x4929, 0x684b, 0x683f, 0x6848, + 0x6852, 0x6843, 0x6844, 0x463a, 0x6849, 0x6846, 0x4b28, 0x684c, + 0x3060, 0x6840, 0x684e, 0x684d, 0x476b, 0x6854, 0x685f, 0x337e, + 0x6862, 0x6850, 0x6855, 0x4d6e, 0x685e, 0x4d55, 0x4e2a, 0x4378, + 0x336b, 0x4972, 0x6864, 0x4621, 0x3031, 0x685d, 0x6859, 0x4172, + 0x6853, 0x685b, 0x6860, 0x472c, 0x302a, 0x6858, 0x6861, 0x4978, + 0x685c, 0x6857, 0x3e55, 0x3d2f, 0x3c2c, 0x4c58, 0x4947, 0x6867, + 0x6870, 0x685a, 0x3377, 0x3e78, 0x6865, 0x686a, 0x4173, 0x6866, + 0x686d, 0x435f, 0x686e, 0x4d56, 0x6863, 0x3338, 0x6869, 0x686c, + 0x4c2c, 0x686f, 0x6868, 0x686b, 0x4b29, 0x4f21, 0x6873, 0x687a, + 0x6872, 0x3c43, 0x6851, 0x4a4e, 0x4c22, 0x6879, 0x6878, 0x6874, + 0x6875, 0x3136, 0x6877, 0x6871, 0x4455, 0x6876, 0x307e, 0x4222, + 0x4a43, 0x687b, 0x6921, 0x4859, 0x687e, 0x3e56, 0x3c49, 0x6923, + 0x363e, 0x6924, 0x4979, 0x687d, 0x6856, 0x687c, 0x4f4f, 0x4622, + 0x4973, 0x692b, 0x6931, 0x6932, 0x6925, 0x4776, 0x692f, 0x6927, + 0x6929, 0x6933, 0x6928, 0x692c, 0x3172, 0x4665, 0x692d, 0x6930, + 0x6926, 0x4126, 0x692a, 0x3b27, 0x3f45, 0x3730, 0x4c74, 0x4c79, + 0x3d72, 0x6937, 0x6935, 0x4f4e, 0x6934, 0x4d75, 0x6936, 0x6938, + 0x6939, 0x693c, 0x693a, 0x4623, 0x693b, 0x484d, 0x692e, 0x3d73, + 0x693d, 0x6942, 0x4174, 0x6941, 0x6922, 0x6943, 0x4149, 0x693e, + 0x6940, 0x693f, 0x5d31, 0x5d22, 0x6945, 0x6944, 0x4d76, 0x623c, + 0x6946, 0x6947, 0x6948, 0x3857, 0x3554, 0x694a, 0x515d, 0x3575, + 0x4e3a, 0x3673, 0x694b, 0x694c, 0x436e, 0x694d, 0x467a, 0x303a, + 0x3263, 0x6952, 0x6953, 0x694e, 0x3b3d, 0x694f, 0x4742, 0x6950, + 0x6951, 0x695b, 0x6955, 0x6958, 0x6954, 0x6956, 0x6957, 0x3c58, + 0x6959, 0x4341, 0x3756, 0x3342, 0x695c, 0x333f, 0x6961, 0x695d, + 0x6960, 0x483a, 0x695e, 0x695f, 0x4948, 0x485a, 0x6962, 0x427d, + 0x696c, 0x6968, 0x326b, 0x6966, 0x4b2a, 0x6967, 0x6964, 0x6965, + 0x696a, 0x696d, 0x696b, 0x6969, 0x6963, 0x4358, 0x6974, 0x4c2a, + 0x6972, 0x6973, 0x696e, 0x6970, 0x6971, 0x696f, 0x4066, 0x4f39, + 0x6978, 0x6979, 0x6a21, 0x3f2a, 0x697b, 0x697e, 0x6976, 0x6975, + 0x6a22, 0x325c, 0x697c, 0x6a23, 0x697d, 0x697a, 0x4433, 0x6977, + 0x4768, 0x6a27, 0x4d3b, 0x6a26, 0x6a25, 0x6a2e, 0x6a28, 0x6a30, + 0x4d66, 0x6a33, 0x6a2a, 0x6a2b, 0x6a2f, 0x6a32, 0x6a31, 0x6a29, + 0x6a2c, 0x6a3d, 0x6a36, 0x6a34, 0x6a35, 0x6a3a, 0x6a3b, 0x332a, + 0x3542, 0x6a39, 0x6a24, 0x6a38, 0x6a3c, 0x6a37, 0x6a3e, 0x6a40, + 0x6a3f, 0x6a42, 0x6a41, 0x695a, 0x6a46, 0x6a43, 0x6a44, 0x6a45, + 0x6a47, 0x376c, 0x6a49, 0x6a48, 0x3d30, 0x3954, 0x5e27, 0x6a4a, + 0x3d51, 0x3339, 0x6a4b, 0x3152, 0x3e57, 0x6a4c, 0x3955, 0x6a4d, + 0x3061, 0x493d, 0x6a4e, 0x3f6a, 0x6a55, 0x6a52, 0x436f, 0x6a53, + 0x6a50, 0x365e, 0x6a4f, 0x6a56, 0x3736, 0x425e, 0x6a5c, 0x6a58, + 0x4235, 0x6a57, 0x6a5a, 0x6a51, 0x6a5b, 0x6a5d, 0x486f, 0x6a59, + 0x6a5e, 0x6a60, 0x3853, 0x6a54, 0x3041, 0x6a5f, 0x3a5b, 0x4e76, + 0x6a61, 0x6a62, 0x4175, 0x4e22, 0x6a63, 0x4d35, 0x6a64, 0x6a65, + 0x4a64, 0x6a66, 0x3a40, 0x4e23, 0x6a6b, 0x6a6c, 0x3e58, 0x6a6a, + 0x4d67, 0x6a67, 0x6a69, 0x403d, 0x3f7e, 0x6a68, 0x6a6d, 0x4a23, + 0x6a6f, 0x6a6e, 0x336c, 0x4b2b, 0x6a70, 0x6a7c, 0x6a72, 0x6a73, + 0x6a74, 0x6a75, 0x6a79, 0x6a7a, 0x6a78, 0x6a76, 0x6a71, 0x6a77, + 0x6a7b, 0x7037, 0x3228, 0x6a7e, 0x365f, 0x6a7d, 0x6b22, 0x6b21, + 0x6b24, 0x6b23, 0x6b25, 0x3d31, 0x6b26, 0x6b27, 0x6b28, 0x403e, + 0x4d57, 0x6b29, 0x4a24, 0x4746, 0x6b2a, 0x6b2b, 0x382b, 0x352c, + 0x6b2c, 0x3b6b, 0x4741, 0x6b2d, 0x3350, 0x6b2e, 0x6b30, 0x4d77, + 0x6b2f, 0x3f46, 0x6b31, 0x6b32, 0x6b33, 0x3451, 0x6b34, 0x6b35, + 0x6b36, 0x6b37, 0x3351, 0x6b38, 0x6b39, 0x6b3a, 0x3272, 0x3f28, + 0x6b3b, 0x6b3c, 0x6b3d, 0x3840, 0x447b, 0x6b3e, 0x3757, 0x3f56, + 0x6b41, 0x4624, 0x6b40, 0x3731, 0x6b3f, 0x4277, 0x352d, 0x6b42, + 0x6b43, 0x3e59, 0x376d, 0x6b44, 0x4b2c, 0x405f, 0x3576, 0x4c75, + 0x414a, 0x6b45, 0x3f47, 0x4370, 0x3e5a, 0x6b46, 0x6b49, 0x6b4a, + 0x3a3e, 0x4242, 0x6b48, 0x3e5b, 0x493e, 0x6b47, 0x3b6c, 0x3153, + 0x6b4e, 0x3758, 0x3b6e, 0x3b6d, 0x4f4d, 0x6b4d, 0x6b4c, 0x4127, + 0x354d, 0x4f43, 0x333a, 0x3e5c, 0x6b4b, 0x6b50, 0x6b51, 0x6b4f, + 0x3858, 0x4d40, 0x3b6f, 0x4727, 0x6b54, 0x4040, 0x4342, 0x4d36, + 0x6b57, 0x386c, 0x403f, 0x6b53, 0x6b58, 0x386d, 0x6b55, 0x6b56, + 0x6b52, 0x4062, 0x4649, 0x432f, 0x325d, 0x4870, 0x3543, 0x4434, + 0x6b5b, 0x6b59, 0x434c, 0x4041, 0x3452, 0x6b5a, 0x3f5b, 0x4e4a, + 0x4f40, 0x6b5c, 0x6b67, 0x4435, 0x6b66, 0x6b63, 0x6b6b, 0x6b64, + 0x6b60, 0x447c, 0x6b5f, 0x6b5d, 0x4d21, 0x3b70, 0x6b61, 0x6b5e, + 0x6b65, 0x3d74, 0x3841, 0x427a, 0x4b45, 0x315a, 0x3062, 0x4625, + 0x6b69, 0x6b68, 0x4666, 0x6b6d, 0x6b62, 0x6b6c, 0x6b6e, 0x382c, + 0x6b6a, 0x3956, 0x3c55, 0x6b6f, 0x4d58, 0x6b72, 0x6b75, 0x6b73, + 0x4935, 0x6b70, 0x3660, 0x6b74, 0x6b76, 0x6b7a, 0x6b77, 0x6b79, + 0x6b78, 0x6b7b, 0x3c31, 0x6b7d, 0x6b7c, 0x4968, 0x6c21, 0x3759, + 0x6b7e, 0x6c22, 0x6c23, 0x3544, 0x6641, 0x3e79, 0x6c24, 0x386e, + 0x6c25, 0x6c26, 0x3b3e, 0x5a4e, 0x6c27, 0x6c28, 0x3d32, 0x6c29, + 0x6c2a, 0x6c2b, 0x6c2c, 0x6c2d, 0x432b, 0x6c2e, 0x6c30, 0x6c2f, + 0x4626, 0x6c31, 0x4b2d, 0x6c32, 0x6c33, 0x6c34, 0x6c35, 0x465a, + 0x3e5d, 0x6c36, 0x396b, 0x502e, 0x6c37, 0x6c38, 0x493f, 0x6c39, + 0x6c41, 0x6c3a, 0x6c3c, 0x6c3b, 0x6c3d, 0x4b46, 0x6c3e, 0x6c3f, + 0x6c40, 0x6c42, 0x332d, 0x4467, 0x4969, 0x3a62, 0x3957, 0x494f, + 0x325f, 0x484e, 0x6c45, 0x3453, 0x4055, 0x6c44, 0x6c49, 0x4379, + 0x4c63, 0x6c47, 0x6c48, 0x352e, 0x6c4a, 0x4763, 0x425f, 0x4871, + 0x453d, 0x6c46, 0x4b47, 0x326c, 0x6c4c, 0x4f28, 0x4442, 0x4f45, + 0x3b71, 0x6c4b, 0x4231, 0x6c5c, 0x4128, 0x4678, 0x4950, 0x6c4f, + 0x3b3f, 0x3b72, 0x3e5e, 0x4765, 0x382d, 0x6c4e, 0x6c4d, 0x496a, + 0x3c41, 0x4552, 0x6c51, 0x6c52, 0x3958, 0x6c50, 0x6c53, 0x6c54, + 0x6c56, 0x4223, 0x6c55, 0x3466, 0x6c58, 0x6c57, 0x6c59, 0x6c5b, + 0x6c5d, 0x6c5e, 0x4056, 0x3c4f, 0x6c5f, 0x3352, 0x6c60, 0x4176, + 0x6c61, 0x6c62, 0x496b, 0x352f, 0x6c63, 0x4436, 0x315b, 0x6c64, + 0x3c71, 0x3f76, 0x422d, 0x6c67, 0x6c66, 0x6c65, 0x6c6d, 0x6c6b, + 0x6c68, 0x6c6a, 0x6c69, 0x6c6c, 0x3577, 0x6c70, 0x4057, 0x6c71, + 0x3859, 0x6c6e, 0x6c6f, 0x4f29, 0x4437, 0x4129, 0x6c72, 0x6c75, + 0x6c73, 0x6c74, 0x4d59, 0x4627, 0x6c78, 0x6c76, 0x6c77, 0x6c79, + 0x6d29, 0x6c7c, 0x6c7d, 0x6c7b, 0x6c7a, 0x447d, 0x6d21, 0x6d25, + 0x6d22, 0x6c7e, 0x6d23, 0x6d24, 0x6d2b, 0x6d26, 0x4058, 0x6d28, + 0x6d2a, 0x6d27, 0x6d2d, 0x3d33, 0x6d2c, 0x6d2e, 0x6d2f, 0x6d32, + 0x6d31, 0x6d30, 0x6d34, 0x6d33, 0x4c76, 0x6d36, 0x6d35, 0x6d37, + 0x6d38, 0x6d3a, 0x6d39, 0x3f48, 0x6d3b, 0x366d, 0x6d3c, 0x6d3e, + 0x6d3f, 0x6d40, 0x6d3d, 0x6d41, 0x3c56, 0x6d42, 0x3530, 0x3733, + 0x382e, 0x6d43, 0x4670, 0x453e, 0x6d44, 0x6d47, 0x3c34, 0x6d46, + 0x6d45, 0x375a, 0x6d48, 0x3353, 0x6d4a, 0x3a5c, 0x6d49, 0x6d52, + 0x6d4c, 0x6d4e, 0x4a65, 0x6d4b, 0x6d4d, 0x6d51, 0x6d4f, 0x3531, + 0x6d50, 0x6d53, 0x475a, 0x4e58, 0x3d34, 0x6d54, 0x4d22, 0x6d56, + 0x6d55, 0x6d59, 0x4d41, 0x6d58, 0x336d, 0x6d57, 0x6d5c, 0x6d5b, + 0x6d5a, 0x4532, 0x6d5d, 0x6d5e, 0x6d5f, 0x396c, 0x3725, 0x6d60, + 0x6d61, 0x6d62, 0x3f49, 0x6d63, 0x3c2d, 0x6d64, 0x6d65, 0x5221, + 0x517e, 0x6d66, 0x6570, 0x6d67, 0x4324, 0x3f2b, 0x4740, 0x6d68, + 0x4a55, 0x4454, 0x397e, 0x4329, 0x312a, 0x4b78, 0x3f57, 0x375e, + 0x3661, 0x4a56, 0x6d69, 0x6d6b, 0x6d6a, 0x3260, 0x4676, 0x6d6c, + 0x4777, 0x4533, 0x6d6d, 0x3d52, 0x6d6f, 0x4c42, 0x6d7e, 0x6d71, + 0x6d72, 0x4449, 0x4260, 0x4177, 0x4628, 0x6d70, 0x3555, 0x6d79, + 0x6d76, 0x6e25, 0x4629, 0x4360, 0x6d73, 0x447e, 0x4553, 0x6d74, + 0x6d78, 0x3f60, 0x4767, 0x444c, 0x4042, 0x6d77, 0x422e, 0x4224, + 0x6d75, 0x3029, 0x4f22, 0x6d7a, 0x4261, 0x3d35, 0x3f4a, 0x6d7c, + 0x6d7b, 0x306f, 0x6d7d, 0x492f, 0x6e27, 0x465b, 0x3f6b, 0x4359, + 0x3678, 0x6e26, 0x4d37, 0x313f, 0x4a57, 0x3261, 0x6e21, 0x6e22, + 0x6e23, 0x6e24, 0x463b, 0x4323, 0x3063, 0x6e28, 0x6e29, 0x7423, + 0x423d, 0x6e2a, 0x3173, 0x414c, 0x382f, 0x4d5a, 0x6e2b, 0x452c, + 0x4178, 0x3c57, 0x6e2c, 0x6e2f, 0x3d65, 0x6e2d, 0x412b, 0x412a, + 0x3064, 0x4e4b, 0x6e31, 0x4872, 0x6e33, 0x6e32, 0x6e30, 0x6364, + 0x3454, 0x6d6e, 0x6e35, 0x6e34, 0x6e36, 0x4d38, 0x4661, 0x4b2e, + 0x6e37, 0x3c59, 0x6e38, 0x6e39, 0x6e3a, 0x4521, 0x306a, 0x3959, + 0x4f3a, 0x6e3e, 0x3734, 0x6e3b, 0x6e3c, 0x4974, 0x3354, 0x4d39, + 0x363f, 0x4554, 0x6e3f, 0x6e40, 0x6e41, 0x4522, 0x6e43, 0x6e42, + 0x4653, 0x6e44, 0x3d36, 0x3c60, 0x475b, 0x4371, 0x3c72, 0x3f6c, + 0x6e45, 0x6e46, 0x3f5d, 0x6e47, 0x6e48, 0x6e49, 0x4d6f, 0x3d37, + 0x6e4b, 0x6e4a, 0x395a, 0x3973, 0x3b40, 0x6e4e, 0x3d66, 0x6e4d, + 0x6e4c, 0x4269, 0x386f, 0x4043, 0x4830, 0x3d39, 0x6e4f, 0x3e5f, + 0x6e52, 0x6e50, 0x6e51, 0x6e54, 0x6e53, 0x3e7a, 0x6e55, 0x6e56, + 0x6e57, 0x4850, 0x3a53, 0x3c61, 0x6e58, 0x6e59, 0x4e24, 0x3d45, + 0x4c6e, 0x4e4c, 0x6e5a, 0x3662, 0x6e5b, 0x4523, 0x6e5e, 0x3378, + 0x3f4b, 0x6e5c, 0x6e5d, 0x4460, 0x4b55, 0x367c, 0x6e60, 0x6e61, + 0x6e5f, 0x6e63, 0x465f, 0x3343, 0x6e67, 0x6e64, 0x6e66, 0x6e62, + 0x6f4f, 0x6e65, 0x4e6b, 0x385a, 0x6e6f, 0x4534, 0x6e6a, 0x6e6d, + 0x6e6b, 0x6e70, 0x6e71, 0x6e69, 0x6e76, 0x3174, 0x6e68, 0x482d, + 0x6e6c, 0x3e60, 0x395b, 0x4b48, 0x3664, 0x3d46, 0x463c, 0x412d, + 0x6e74, 0x6e6e, 0x6e73, 0x4c43, 0x4438, 0x6e75, 0x6e72, 0x412c, + 0x6e79, 0x6e78, 0x6e77, 0x4b2f, 0x3d7b, 0x6e7a, 0x4a5f, 0x3154, + 0x4946, 0x4372, 0x3578, 0x6e7c, 0x395d, 0x3b2c, 0x6e7b, 0x3f6d, + 0x3f6e, 0x6f21, 0x6f23, 0x3e7b, 0x6f22, 0x6f24, 0x3653, 0x4945, + 0x3c62, 0x4f23, 0x6e7e, 0x3a78, 0x4f3f, 0x6f26, 0x6f25, 0x6f27, + 0x6e7d, 0x4669, 0x4555, 0x4457, 0x6f2c, 0x4343, 0x6f28, 0x6f29, + 0x372d, 0x6f2b, 0x3830, 0x6f2a, 0x3e61, 0x3379, 0x6f30, 0x3a3f, + 0x4179, 0x444a, 0x333b, 0x6f2e, 0x6f2f, 0x4443, 0x6f2d, 0x6f31, + 0x6f37, 0x6f3a, 0x6f39, 0x452d, 0x6f32, 0x6f33, 0x6f36, 0x6f38, + 0x3640, 0x6f3b, 0x6f35, 0x6f34, 0x6f3f, 0x6f40, 0x6f41, 0x6f3e, + 0x6f3d, 0x3e62, 0x462a, 0x6f3c, 0x6f45, 0x6f43, 0x6f44, 0x6f42, + 0x4278, 0x6f46, 0x6f47, 0x6f49, 0x3455, 0x6f48, 0x4c7a, 0x6f54, + 0x6f4a, 0x6f4d, 0x6f4b, 0x6f4c, 0x6f4e, 0x6f50, 0x6f51, 0x6f52, + 0x6f55, 0x6f53, 0x6f56, 0x6f58, 0x6f57, 0x4439, 0x4c67, 0x6f59, + 0x412e, 0x6f5a, 0x4a44, 0x6f5b, 0x332b, 0x313c, 0x3457, 0x3456, + 0x6f5c, 0x6f5d, 0x6f5e, 0x6f5f, 0x6f60, 0x3458, 0x3355, 0x395e, + 0x4836, 0x6f62, 0x6f61, 0x6f63, 0x315c, 0x6f66, 0x6f65, 0x6f64, + 0x6f67, 0x6f6a, 0x3047, 0x6f68, 0x6f6c, 0x6f6b, 0x6f6e, 0x6f6d, + 0x6f6f, 0x462e, 0x6f70, 0x6f71, 0x6f73, 0x6f72, 0x496c, 0x6f74, + 0x6f75, 0x3a65, 0x6f76, 0x6f77, 0x4b49, 0x414b, 0x3024, 0x424b, + 0x6f78, 0x496d, 0x6f7b, 0x6f79, 0x395f, 0x6f7a, 0x3842, 0x4a45, + 0x6f7d, 0x7021, 0x6f7e, 0x7022, 0x3121, 0x3f58, 0x3d7c, 0x3459, + 0x7023, 0x4766, 0x7025, 0x3122, 0x7024, 0x4444, 0x4e4d, 0x462b, + 0x6f7c, 0x4e26, 0x3831, 0x4d5b, 0x3679, 0x4e34, 0x3728, 0x4262, + 0x6721, 0x7026, 0x332c, 0x3f6f, 0x3356, 0x7028, 0x7029, 0x7027, + 0x3764, 0x3a5d, 0x3e63, 0x3123, 0x4e59, 0x702b, 0x6e2e, 0x702a, + 0x702e, 0x702c, 0x702d, 0x702f, 0x7030, 0x4e6c, 0x7031, 0x7032, + 0x4049, 0x483b, 0x3f7d, 0x3467, 0x4d3a, 0x326d, 0x3d38, 0x385b, + 0x7035, 0x7034, 0x3b73, 0x7036, 0x7033, 0x3b28, 0x703a, 0x6a2d, + 0x5256, 0x3f77, 0x7038, 0x4e25, 0x4671, 0x312b, 0x4063, 0x3c36, + 0x4a37, 0x3140, 0x4e6d, 0x4d6b, 0x703b, 0x4545, 0x3c7b, 0x703c, + 0x703d, 0x3f4c, 0x703e, 0x4e6e, 0x7039, 0x7040, 0x7042, 0x7041, + 0x703f, 0x7043, 0x7044, 0x417a, 0x3262, 0x7045, 0x4c38, 0x7046, + 0x7047, 0x4f2a, 0x5b31, 0x7048, 0x7049, 0x704a, 0x704e, 0x704b, + 0x704c, 0x704d, 0x704f, 0x4044, 0x4c77, 0x4045, 0x7050, 0x4873, + 0x7051, 0x7353, 0x4c4c, 0x7052, 0x7053, 0x7054, 0x3357, 0x7056, + 0x3f59, 0x7057, 0x3724, 0x7058, 0x705c, 0x705a, 0x705b, 0x3373, + 0x7059, 0x705d, 0x705e, 0x3048, 0x705f, 0x7060, 0x3e64, 0x7061, + 0x3547, 0x7064, 0x7063, 0x7062, 0x6b71, 0x4a5c, 0x7065, 0x7066, + 0x7067, 0x7068, 0x7069, 0x706a, 0x345a, 0x706b, 0x706c, 0x4723, + 0x706e, 0x323b, 0x7071, 0x7070, 0x3124, 0x3641, 0x4a47, 0x443a, + 0x3a22, 0x3960, 0x3d67, 0x3f5c, 0x7073, 0x7072, 0x4d42, 0x3468, + 0x4852, 0x465c, 0x3f7c, 0x4e4e, 0x375b, 0x7076, 0x7075, 0x4b4b, + 0x462c, 0x3150, 0x7077, 0x7074, 0x4951, 0x4d6a, 0x7078, 0x7079, + 0x707b, 0x426a, 0x335b, 0x335c, 0x707a, 0x3469, 0x3832, 0x346a, + 0x453f, 0x4e60, 0x385c, 0x707c, 0x707d, 0x707e, 0x7121, 0x7123, + 0x7122, 0x4977, 0x7124, 0x7125, 0x7126, 0x7127, 0x7129, 0x7128, + 0x712a, 0x4874, 0x664c, 0x3f29, 0x3532, 0x712b, 0x712c, 0x522c, + 0x5d3b, 0x4853, 0x307b, 0x303b, 0x3b74, 0x4b30, 0x3e7e, 0x712d, + 0x4c5f, 0x712e, 0x4d5c, 0x3142, 0x3b41, 0x712f, 0x326e, 0x7130, + 0x7131, 0x7133, 0x7134, 0x7136, 0x7132, 0x7135, 0x345b, 0x7137, + 0x7138, 0x7139, 0x713a, 0x713b, 0x713d, 0x713c, 0x713f, 0x7142, + 0x713e, 0x7140, 0x7141, 0x7143, 0x3642, 0x3c73, 0x7144, 0x7145, + 0x3961, 0x7146, 0x333e, 0x474f, 0x7147, 0x7148, 0x435a, 0x466b, + 0x7149, 0x477d, 0x424c, 0x3158, 0x366e, 0x366f, 0x4373, 0x714e, + 0x3670, 0x326f, 0x714d, 0x714b, 0x714c, 0x714a, 0x7158, 0x714f, + 0x7150, 0x7151, 0x7152, 0x7154, 0x7153, 0x3d59, 0x7155, 0x7157, + 0x3533, 0x7156, 0x417b, 0x3833, 0x7159, 0x424d, 0x715a, 0x462d, + 0x715b, 0x7160, 0x715e, 0x715d, 0x715f, 0x715c, 0x7162, 0x7161, + 0x7164, 0x3643, 0x7163, 0x7165, 0x7166, 0x7168, 0x7167, 0x7169, + 0x716b, 0x716a, 0x397c, 0x716c, 0x716d, 0x333c, 0x716e, 0x716f, + 0x3f71, 0x7170, 0x7171, 0x7172, 0x7173, 0x3962, 0x7174, 0x7175, + 0x7176, 0x7177, 0x7178, 0x4831, 0x717a, 0x4926, 0x717b, 0x7179, + 0x717d, 0x717c, 0x717e, 0x7221, 0x7222, 0x7223, 0x7224, 0x7225, + 0x7226, 0x7227, 0x7228, 0x7229, 0x722a, 0x722b, 0x722c, 0x722d, + 0x722e, 0x5d35, 0x722f, 0x6478, 0x3534, 0x3321, 0x3a32, 0x7231, + 0x7230, 0x4c25, 0x7233, 0x7234, 0x7232, 0x7235, 0x4b62, 0x7236, + 0x357b, 0x4f25, 0x7237, 0x7239, 0x303e, 0x723a, 0x4a2b, 0x7238, + 0x723b, 0x723c, 0x723d, 0x723e, 0x723f, 0x4b6e, 0x3b2d, 0x3a7a, + 0x412f, 0x7240, 0x7243, 0x7241, 0x7244, 0x3871, 0x7242, 0x7245, + 0x7246, 0x7247, 0x724b, 0x3b2a, 0x4264, 0x724c, 0x7249, 0x7248, + 0x724a, 0x375f, 0x7250, 0x724f, 0x724e, 0x3033, 0x725a, 0x7256, + 0x7257, 0x7253, 0x7259, 0x7255, 0x3362, 0x4f4c, 0x7258, 0x7254, + 0x7252, 0x7251, 0x725c, 0x725f, 0x725e, 0x725d, 0x4949, 0x725b, + 0x3073, 0x7260, 0x7262, 0x336f, 0x724d, 0x3137, 0x7264, 0x7263, + 0x7261, 0x432d, 0x4b70, 0x4e5a, 0x7265, 0x7266, 0x7267, 0x7268, + 0x7269, 0x443b, 0x726a, 0x4837, 0x726f, 0x726b, 0x726c, 0x4b31, + 0x4c44, 0x4650, 0x7270, 0x7271, 0x463e, 0x726e, 0x726d, 0x322a, + 0x7279, 0x7278, 0x3175, 0x7276, 0x7275, 0x7273, 0x337b, 0x7272, + 0x3c32, 0x3229, 0x3963, 0x727c, 0x727b, 0x727a, 0x7277, 0x727d, + 0x727e, 0x7325, 0x7324, 0x7326, 0x312d, 0x7321, 0x7322, 0x3974, + 0x4c39, 0x7323, 0x4b32, 0x732b, 0x7327, 0x732c, 0x7329, 0x7328, + 0x375c, 0x732d, 0x732e, 0x732f, 0x732a, 0x7274, 0x7330, 0x4461, + 0x7334, 0x7335, 0x7333, 0x7332, 0x7338, 0x7331, 0x7336, 0x7337, + 0x733a, 0x7339, 0x733c, 0x733d, 0x733e, 0x4f49, 0x733b, 0x426b, + 0x3a6d, 0x733f, 0x7340, 0x7341, 0x7342, 0x7343, 0x3834, 0x7344, + 0x7345, 0x3c2f, 0x7346, 0x7347, 0x7348, 0x7349, 0x734c, 0x734a, + 0x4f3c, 0x734b, 0x4e6f, 0x734d, 0x4e5b, 0x734e, 0x477e, 0x734f, + 0x7351, 0x7352, 0x7350, 0x396d, 0x4c4d, 0x4b63, 0x5677, 0x5d60, + 0x4b7b, 0x322b, 0x7354, 0x3550, 0x7355, 0x7356, 0x7357, 0x3975, + 0x7358, 0x6054, 0x4c5b, 0x4263, 0x7359, 0x735b, 0x735a, 0x735c, + 0x735d, 0x735e, 0x735f, 0x7360, 0x7361, 0x7362, 0x7363, 0x7364, + 0x7365, 0x7366, 0x7367, 0x7368, 0x4524, 0x385d, 0x736a, 0x414d, + 0x736b, 0x736c, 0x4921, 0x736d, 0x736e, 0x6337, 0x6c5a, 0x706d, + 0x736f, 0x7370, 0x7372, 0x7373, 0x7374, 0x4e70, 0x7371, 0x7375, + 0x7376, 0x7378, 0x7377, 0x737a, 0x737b, 0x7379, 0x4e36, 0x737c, + 0x737d, 0x6354, 0x737e, 0x212a, 0x2174, 0x2170, 0x2173, 0x2175, + 0x214a, 0x214b, 0x2176, 0x215c, 0x2124, 0x2125, 0x213f, 0x2330, + 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, 0x2338, + 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129, 0x2177, + 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, 0x2348, + 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, 0x234f, 0x2350, + 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, 0x2358, + 0x2359, 0x235a, 0x214e, 0x2140, 0x214f, 0x2130, 0x2132, 0x212e, + 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, 0x2368, + 0x2369, 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, 0x236f, 0x2370, + 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, 0x2378, + 0x2379, 0x237a, 0x2150, 0x2143, 0x2151, 0x2131, 0x216f, +}; + +static const Summary16 jisx0208_uni2indx_page00[16] = { + /* 0x0000 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x118c }, { 5, 0x0053 }, + { 9, 0x0000 }, { 9, 0x0080 }, { 10, 0x0000 }, { 10, 0x0080 }, +}; +static const Summary16 jisx0208_uni2indx_page03[22] = { + /* 0x0300 */ + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, + { 11, 0x0000 }, { 11, 0xfffe }, { 26, 0x03fb }, { 35, 0xfffe }, + { 50, 0x03fb }, { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, + /* 0x0400 */ + { 59, 0x0002 }, { 60, 0xffff }, { 76, 0xffff }, { 92, 0xffff }, + { 108, 0xffff }, { 124, 0x0002 }, +}; +static const Summary16 jisx0208_uni2indx_page20[50] = { + /* 0x2000 */ + { 125, 0x0000 }, { 125, 0x3361 }, { 132, 0x0063 }, { 136, 0x080d }, + { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, + { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, + { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, + /* 0x2100 */ + { 140, 0x0008 }, { 141, 0x0000 }, { 141, 0x0800 }, { 142, 0x0000 }, + { 142, 0x0000 }, { 142, 0x0000 }, { 142, 0x0000 }, { 142, 0x0000 }, + { 142, 0x0000 }, { 142, 0x000f }, { 146, 0x0000 }, { 146, 0x0000 }, + { 146, 0x0000 }, { 146, 0x0014 }, { 148, 0x0000 }, { 148, 0x0000 }, + /* 0x2200 */ + { 148, 0x098d }, { 154, 0x6404 }, { 158, 0x1f81 }, { 165, 0x2030 }, + { 168, 0x0000 }, { 168, 0x0004 }, { 169, 0x0cc3 }, { 175, 0x0000 }, + { 175, 0x00cc }, { 179, 0x0000 }, { 179, 0x0020 }, { 180, 0x0000 }, + { 180, 0x0000 }, { 180, 0x0000 }, { 180, 0x0000 }, { 180, 0x0000 }, + /* 0x2300 */ + { 180, 0x0000 }, { 180, 0x0004 }, +}; +static const Summary16 jisx0208_uni2indx_page25[23] = { + /* 0x2500 */ + { 181, 0x900f }, { 187, 0x3999 }, { 195, 0x9939 }, { 203, 0x9999 }, + { 211, 0x0804 }, { 213, 0x0000 }, { 213, 0x0000 }, { 213, 0x0000 }, + { 213, 0x0000 }, { 213, 0x0000 }, { 213, 0x0003 }, { 215, 0x300c }, + { 219, 0xc8c0 }, { 224, 0x0000 }, { 224, 0x8000 }, { 225, 0x0000 }, + /* 0x2600 */ + { 225, 0x0060 }, { 227, 0x0000 }, { 227, 0x0000 }, { 227, 0x0000 }, + { 227, 0x0005 }, { 229, 0x0000 }, { 229, 0xa400 }, +}; +static const Summary16 jisx0208_uni2indx_page30[16] = { + /* 0x3000 */ + { 232, 0xffef }, { 247, 0x103f }, { 254, 0x0000 }, { 254, 0x0000 }, + { 254, 0xfffe }, { 269, 0xffff }, { 285, 0xffff }, { 301, 0xffff }, + { 317, 0xffff }, { 333, 0x780f }, { 341, 0xfffe }, { 356, 0xffff }, + { 372, 0xffff }, { 388, 0xffff }, { 404, 0xffff }, { 420, 0x787f }, +}; +static const Summary16 jisx0208_uni2indx_page4e[1307] = { + /* 0x4e00 */ + { 431, 0x6f8b }, { 441, 0x43f3 }, { 450, 0x2442 }, { 454, 0x9b46 }, + { 462, 0xe82c }, { 469, 0xe3e0 }, { 477, 0x0004 }, { 478, 0x400a }, + { 481, 0x5f65 }, { 491, 0xdb36 }, { 501, 0x7977 }, { 512, 0x0449 }, + { 516, 0xecd7 }, { 527, 0xe3f0 }, { 536, 0x6038 }, { 541, 0x08c5 }, + /* 0x4f00 */ + { 546, 0xe602 }, { 552, 0x3403 }, { 557, 0x8000 }, { 558, 0x3551 }, + { 565, 0xe0c8 }, { 571, 0x7eab }, { 582, 0x8200 }, { 584, 0x9869 }, + { 591, 0xa948 }, { 597, 0x2942 }, { 602, 0xe803 }, { 608, 0x8060 }, + { 611, 0x441c }, { 616, 0xad93 }, { 625, 0xc03a }, { 631, 0x4568 }, + /* 0x5000 */ + { 637, 0xaa60 }, { 643, 0x8656 }, { 650, 0x3f7a }, { 661, 0x0240 }, + { 663, 0x8388 }, { 668, 0x1461 }, { 673, 0x1020 }, { 675, 0x2174 }, + { 681, 0x2021 }, { 684, 0x0702 }, { 688, 0x3000 }, { 690, 0x40bc }, + { 696, 0xa624 }, { 702, 0x4462 }, { 707, 0x60a8 }, { 712, 0x0a20 }, + /* 0x5100 */ + { 715, 0x0217 }, { 720, 0x8574 }, { 727, 0x0402 }, { 729, 0x9c84 }, + { 735, 0x7bfb }, { 748, 0x1415 }, { 753, 0x7f24 }, { 762, 0x11e2 }, + { 768, 0xb665 }, { 777, 0x02ef }, { 785, 0x1f75 }, { 795, 0x20ff }, + { 804, 0x3a70 }, { 811, 0x3840 }, { 815, 0x26c3 }, { 822, 0x6763 }, + /* 0x5200 */ + { 831, 0x4dd9 }, { 840, 0x2092 }, { 844, 0x46b0 }, { 850, 0x0fc9 }, + { 858, 0xbc98 }, { 866, 0x4850 }, { 870, 0x8638 }, { 876, 0xa03f }, + { 884, 0x2388 }, { 889, 0x8816 }, { 894, 0x3e09 }, { 901, 0x5232 }, + { 907, 0x22aa }, { 913, 0xe3a4 }, { 921, 0x00dd }, { 927, 0xc72c }, + /* 0x5300 */ + { 935, 0xa166 }, { 942, 0x26e1 }, { 949, 0x840b }, { 954, 0x8f0a }, + { 961, 0x27eb }, { 971, 0x559e }, { 980, 0xc241 }, { 985, 0x89bb }, + { 994, 0x0014 }, { 996, 0x8540 }, { 1000, 0x6361 }, { 1007, 0x0849 }, + { 1011, 0x7f0c }, { 1020, 0x8ad0 }, { 1026, 0xff3e }, { 1039, 0x05cf }, + /* 0x5400 */ + { 1047, 0xff1a }, { 1058, 0xa803 }, { 1063, 0x7a41 }, { 1070, 0x7b40 }, + { 1077, 0x4745 }, { 1084, 0x8002 }, { 1086, 0x0500 }, { 1088, 0x38eb }, + { 1097, 0xd851 }, { 1104, 0x0005 }, { 1106, 0x9934 }, { 1113, 0x710c }, + { 1119, 0x0397 }, { 1126, 0x0100 }, { 1127, 0x6366 }, { 1135, 0x2404 }, + /* 0x5500 */ + { 1138, 0x80d0 }, { 1142, 0x0051 }, { 1145, 0xc000 }, { 1147, 0x430a }, + { 1152, 0x9071 }, { 1158, 0x30c8 }, { 1163, 0x0008 }, { 1164, 0x5800 }, + { 1167, 0x0e99 }, { 1174, 0xf700 }, { 1181, 0x5f80 }, { 1188, 0x0041 }, + { 1190, 0x00b0 }, { 1193, 0x9410 }, { 1197, 0x0018 }, { 1199, 0x6280 }, + /* 0x5600 */ + { 1203, 0x0240 }, { 1205, 0x09d0 }, { 1210, 0x8200 }, { 1212, 0x0156 }, + { 1217, 0x5004 }, { 1220, 0x0801 }, { 1222, 0x1d10 }, { 1227, 0x0510 }, + { 1230, 0x84c1 }, { 1235, 0x0010 }, { 1236, 0x4025 }, { 1240, 0x1050 }, + { 1243, 0x410f }, { 1249, 0x4d8a }, { 1256, 0x4009 }, { 1259, 0xa60d }, + /* 0x5700 */ + { 1266, 0xab19 }, { 1274, 0x914c }, { 1280, 0x21c0 }, { 1284, 0x0981 }, + { 1288, 0xc485 }, { 1294, 0x0003 }, { 1296, 0x0652 }, { 1301, 0x8000 }, + { 1302, 0x0b04 }, { 1306, 0x0008 }, { 1307, 0x041d }, { 1312, 0x0009 }, + { 1314, 0x4849 }, { 1319, 0x905c }, { 1325, 0x0009 }, { 1327, 0x1690 }, + /* 0x5800 */ + { 1332, 0x0c65 }, { 1338, 0x2220 }, { 1341, 0x8412 }, { 1345, 0x2433 }, + { 1351, 0x0c03 }, { 1355, 0x4796 }, { 1363, 0x0a04 }, { 1366, 0x4225 }, + { 1371, 0x0028 }, { 1373, 0x9088 }, { 1377, 0x4900 }, { 1380, 0x4f08 }, + { 1386, 0x14a2 }, { 1391, 0xd3aa }, { 1400, 0xd830 }, { 1406, 0x3e87 }, + /* 0x5900 */ + { 1415, 0x8604 }, { 1419, 0x1f61 }, { 1427, 0x7ea4 }, { 1436, 0x4186 }, + { 1441, 0xc390 }, { 1447, 0x05b3 }, { 1454, 0x57a5 }, { 1463, 0x2118 }, + { 1467, 0x241e }, { 1473, 0x2a48 }, { 1478, 0x1128 }, { 1482, 0x4a04 }, + { 1486, 0x0a40 }, { 1489, 0x161b }, { 1496, 0x0d60 }, { 1501, 0x8840 }, + /* 0x5a00 */ + { 1504, 0x020a }, { 1507, 0x9502 }, { 1512, 0x8221 }, { 1516, 0x1060 }, + { 1519, 0x0243 }, { 1523, 0x0400 }, { 1524, 0x1444 }, { 1528, 0x8000 }, + { 1529, 0x0000 }, { 1529, 0x0c04 }, { 1532, 0x0000 }, { 1532, 0x7000 }, + { 1535, 0x1a06 }, { 1540, 0x00c1 }, { 1543, 0x024a }, { 1547, 0x0c00 }, + /* 0x5b00 */ + { 1549, 0x1a00 }, { 1552, 0x0040 }, { 1553, 0x1404 }, { 1556, 0x4045 }, + { 1560, 0x0029 }, { 1563, 0xbdb3 }, { 1574, 0x0a78 }, { 1580, 0x052b }, + { 1586, 0xbba9 }, { 1596, 0xbfa0 }, { 1605, 0x407c }, { 1611, 0x8379 }, + { 1619, 0x12fc }, { 1627, 0xe81d }, { 1635, 0x4bf6 }, { 1645, 0xc569 }, + /* 0x5c00 */ + { 1653, 0xeff6 }, { 1666, 0x044a }, { 1670, 0x2115 }, { 1675, 0xff02 }, + { 1684, 0xed63 }, { 1694, 0x402b }, { 1699, 0xd033 }, { 1706, 0x0242 }, + { 1709, 0x1000 }, { 1710, 0x0013 }, { 1713, 0x1b02 }, { 1718, 0x59ca }, + { 1726, 0x00a0 }, { 1728, 0x0200 }, { 1729, 0xa703 }, { 1736, 0x2c41 }, + /* 0x5d00 */ + { 1741, 0x4880 }, { 1744, 0x8ff2 }, { 1754, 0x0204 }, { 1756, 0x0000 }, + { 1756, 0x5800 }, { 1759, 0x1005 }, { 1762, 0x9200 }, { 1765, 0x0048 }, + { 1767, 0x1894 }, { 1772, 0x2001 }, { 1774, 0x5004 }, { 1777, 0x3480 }, + { 1781, 0x3200 }, { 1784, 0x684c }, { 1790, 0x49ea }, { 1798, 0x68be }, + /* 0x5e00 */ + { 1807, 0x184c }, { 1812, 0x2e42 }, { 1818, 0xa820 }, { 1822, 0x21c9 }, + { 1828, 0x50b9 }, { 1835, 0x80b0 }, { 1839, 0x001e }, { 1843, 0xff7c }, + { 1856, 0x849a }, { 1862, 0x14e0 }, { 1867, 0x28c1 }, { 1872, 0x01e0 }, + { 1876, 0x870e }, { 1883, 0xac49 }, { 1890, 0x130f }, { 1897, 0xdddb }, + /* 0x5f00 */ + { 1909, 0xbe1a }, { 1918, 0x89fb }, { 1928, 0xa2e0 }, { 1934, 0x51a2 }, + { 1940, 0x5502 }, { 1945, 0x32ca }, { 1952, 0x3e46 }, { 1960, 0x928b }, + { 1967, 0x1dbf }, { 1978, 0x438f }, { 1986, 0x6703 }, { 1993, 0x3218 }, + { 1998, 0x3028 }, { 2002, 0x33c0 }, { 2008, 0x0811 }, { 2011, 0xa923 }, + /* 0x6000 */ + { 2018, 0xc000 }, { 2020, 0x3a65 }, { 2028, 0x8fe3 }, { 2038, 0x0402 }, + { 2040, 0x2c4e }, { 2047, 0x8625 }, { 2053, 0xbf3d }, { 2065, 0x00a1 }, + { 2068, 0x3a1a }, { 2075, 0x8cd4 }, { 2082, 0x06c9 }, { 2088, 0x317c }, + { 2096, 0x00e0 }, { 2099, 0x950a }, { 2105, 0x018b }, { 2110, 0x0edb }, + /* 0x6100 */ + { 2119, 0xe34b }, { 2128, 0x8c20 }, { 2132, 0x1182 }, { 2136, 0xf010 }, + { 2141, 0x7d94 }, { 2150, 0xa728 }, { 2157, 0xc9ac }, { 2165, 0x40fb }, + { 2173, 0x4484 }, { 2177, 0x0653 }, { 2183, 0x5a90 }, { 2189, 0x4444 }, + { 2193, 0x3fc8 }, { 2202, 0x0001 }, { 2203, 0x0048 }, { 2205, 0xf5d4 }, + /* 0x6200 */ + { 2215, 0x7701 }, { 2222, 0xec57 }, { 2232, 0xc442 }, { 2237, 0x891d }, + { 2244, 0x6b83 }, { 2252, 0x4928 }, { 2257, 0x4109 }, { 2261, 0xd242 }, + { 2267, 0x061d }, { 2273, 0x59fe }, { 2284, 0x1800 }, { 2286, 0x3a22 }, + { 2292, 0xb7e4 }, { 2302, 0x3b9f }, { 2313, 0xf003 }, { 2319, 0xc0ea }, + /* 0x6300 */ + { 2326, 0x1386 }, { 2332, 0x8202 }, { 2335, 0x8980 }, { 2339, 0xe400 }, + { 2343, 0xb200 }, { 2347, 0x10a1 }, { 2351, 0x4b80 }, { 2356, 0x0cc4 }, + { 2361, 0xd309 }, { 2368, 0x8944 }, { 2373, 0x1faf }, { 2384, 0x4834 }, + { 2389, 0x8259 }, { 2395, 0x0c45 }, { 2400, 0x420a }, { 2404, 0x0450 }, + /* 0x6400 */ + { 2407, 0xa040 }, { 2410, 0x10c8 }, { 2414, 0x3140 }, { 2418, 0x4450 }, + { 2422, 0x4004 }, { 2424, 0x0100 }, { 2425, 0x8280 }, { 2428, 0x0540 }, + { 2431, 0x0108 }, { 2433, 0x442c }, { 2438, 0x6a30 }, { 2444, 0x1a05 }, + { 2449, 0x20a6 }, { 2454, 0x0514 }, { 2458, 0x90cf }, { 2466, 0x6456 }, + /* 0x6500 */ + { 2473, 0x0021 }, { 2475, 0x3100 }, { 2478, 0x9c18 }, { 2484, 0xcbf0 }, + { 2493, 0xa120 }, { 2497, 0x63e2 }, { 2505, 0x104c }, { 2509, 0x01b5 }, + { 2515, 0x538c }, { 2522, 0x9a83 }, { 2529, 0xb8b2 }, { 2537, 0x3281 }, + { 2542, 0x987a }, { 2550, 0x0a84 }, { 2554, 0x33e7 }, { 2564, 0x0c02 }, + /* 0x6600 */ + { 2567, 0xd4cc }, { 2575, 0x9018 }, { 2579, 0xa1a1 }, { 2585, 0x9070 }, + { 2590, 0x8a1e }, { 2597, 0xe004 }, { 2601, 0xc3d4 }, { 2609, 0x0451 }, + { 2613, 0x439a }, { 2620, 0x21c2 }, { 2625, 0x4844 }, { 2629, 0x5310 }, + { 2634, 0x0292 }, { 2638, 0x3640 }, { 2643, 0x0241 }, { 2646, 0xf3bd }, + /* 0x6700 */ + { 2658, 0xab09 }, { 2665, 0xe8f0 }, { 2673, 0x7dc0 }, { 2681, 0xa5d2 }, + { 2689, 0xc242 }, { 2694, 0xd24b }, { 2702, 0xa43f }, { 2711, 0xd0af }, + { 2720, 0x1aa0 }, { 2725, 0x34a1 }, { 2731, 0x8247 }, { 2737, 0x03d8 }, + { 2743, 0xc452 }, { 2749, 0x651b }, { 2757, 0xd294 }, { 2764, 0xc83a }, + /* 0x6800 */ + { 2771, 0x001c }, { 2774, 0x40c8 }, { 2778, 0x0e06 }, { 2783, 0x3314 }, + { 2789, 0x614f }, { 2797, 0xb21b }, { 2805, 0x0088 }, { 2807, 0xc0d0 }, + { 2812, 0xa02a }, { 2817, 0xa898 }, { 2823, 0xa1c5 }, { 2830, 0x166b }, + { 2838, 0x2e50 }, { 2844, 0x85b4 }, { 2851, 0xc08b }, { 2857, 0x0604 }, + /* 0x6900 */ + { 2860, 0xf933 }, { 2870, 0x1e04 }, { 2875, 0x056e }, { 2882, 0xa251 }, + { 2888, 0x0400 }, { 2889, 0x7638 }, { 2897, 0xec07 }, { 2905, 0x73b8 }, + { 2914, 0x4406 }, { 2918, 0x1832 }, { 2923, 0x4081 }, { 2926, 0xc816 }, + { 2932, 0x7c8a }, { 2940, 0x6309 }, { 2946, 0x2980 }, { 2950, 0xaa04 }, + /* 0x6a00 */ + { 2955, 0x1c24 }, { 2960, 0xca9c }, { 2968, 0x4e0e }, { 2975, 0x2760 }, + { 2981, 0x0990 }, { 2985, 0x8300 }, { 2988, 0x0046 }, { 2991, 0x8104 }, + { 2994, 0x6011 }, { 2998, 0x1081 }, { 3001, 0x540d }, { 3007, 0x0908 }, + { 3010, 0x000e }, { 3013, 0xcc0a }, { 3019, 0x0500 }, { 3021, 0x0c00 }, + /* 0x6b00 */ + { 3023, 0x0430 }, { 3026, 0xa044 }, { 3030, 0x008b }, { 3034, 0x6784 }, + { 3041, 0x5288 }, { 3046, 0x8a19 }, { 3052, 0x865e }, { 3060, 0x8b18 }, + { 3066, 0x2e59 }, { 3074, 0x4160 }, { 3078, 0x8c10 }, { 3082, 0x9cbe }, + { 3092, 0x6861 }, { 3098, 0x891c }, { 3104, 0x9800 }, { 3107, 0x0008 }, + /* 0x6c00 */ + { 3108, 0x8100 }, { 3110, 0x089a }, { 3115, 0x0018 }, { 3117, 0x4190 }, + { 3121, 0x4007 }, { 3125, 0xe4a1 }, { 3132, 0x0505 }, { 3136, 0x640d }, + { 3142, 0x310e }, { 3148, 0x0e4d }, { 3155, 0x4806 }, { 3159, 0xff0a }, + { 3169, 0x1632 }, { 3175, 0x2aa8 }, { 3181, 0x852e }, { 3188, 0x000b }, + /* 0x6d00 */ + { 3191, 0x1800 }, { 3193, 0xca84 }, { 3199, 0x0e20 }, { 3203, 0x696c }, + { 3211, 0x0032 }, { 3214, 0x1600 }, { 3217, 0x5658 }, { 3224, 0x0390 }, + { 3228, 0x5120 }, { 3232, 0x1a28 }, { 3237, 0x8000 }, { 3238, 0x1124 }, + { 3242, 0x18e1 }, { 3248, 0x4326 }, { 3254, 0x5d52 }, { 3262, 0x0eaa }, + /* 0x6e00 */ + { 3269, 0x0fa0 }, { 3275, 0xae28 }, { 3282, 0xfa7b }, { 3294, 0x4500 }, + { 3297, 0x6408 }, { 3301, 0x8940 }, { 3305, 0xc880 }, { 3309, 0xc044 }, + { 3313, 0x9005 }, { 3317, 0xb141 }, { 3323, 0x8424 }, { 3327, 0x24c4 }, + { 3332, 0x1a34 }, { 3338, 0x603a }, { 3344, 0x9000 }, { 3346, 0xc194 }, + /* 0x6f00 */ + { 3352, 0x8246 }, { 3357, 0x003a }, { 3361, 0x180d }, { 3366, 0xc106 }, + { 3371, 0x0022 }, { 3373, 0x9910 }, { 3378, 0xe050 }, { 3383, 0x1511 }, + { 3388, 0x4057 }, { 3394, 0x0082 }, { 3396, 0x041a }, { 3400, 0x020a }, + { 3403, 0x004f }, { 3408, 0x8930 }, { 3413, 0xd813 }, { 3420, 0x444a }, + /* 0x7000 */ + { 3425, 0x8a02 }, { 3429, 0xed22 }, { 3437, 0x10c0 }, { 3440, 0x4005 }, + { 3443, 0x1000 }, { 3444, 0x0102 }, { 3446, 0x8808 }, { 3449, 0x3101 }, + { 3453, 0x4600 }, { 3456, 0x0204 }, { 3458, 0xf000 }, { 3462, 0x0708 }, + { 3466, 0x8900 }, { 3469, 0xa200 }, { 3472, 0x0000 }, { 3472, 0x2202 }, + /* 0x7100 */ + { 3475, 0x0200 }, { 3476, 0x1610 }, { 3480, 0x0042 }, { 3482, 0x1040 }, + { 3484, 0x5200 }, { 3487, 0x0260 }, { 3490, 0x52f4 }, { 3498, 0x2000 }, + { 3499, 0x8510 }, { 3503, 0x8230 }, { 3507, 0x1100 }, { 3509, 0x4202 }, + { 3512, 0x4308 }, { 3516, 0x80b5 }, { 3522, 0x70e1 }, { 3529, 0x9a20 }, + /* 0x7200 */ + { 3534, 0x2040 }, { 3536, 0x0801 }, { 3538, 0x3500 }, { 3542, 0xfc65 }, + { 3552, 0x19c1 }, { 3558, 0xab04 }, { 3564, 0x0286 }, { 3568, 0x6214 }, + { 3573, 0x0087 }, { 3577, 0x0044 }, { 3579, 0x9085 }, { 3584, 0x0244 }, + { 3587, 0x405c }, { 3592, 0x0a85 }, { 3597, 0x3207 }, { 3603, 0x3380 }, + /* 0x7300 */ + { 3608, 0x0400 }, { 3609, 0xb8c0 }, { 3615, 0xce20 }, { 3621, 0xc0d0 }, + { 3626, 0xc030 }, { 3630, 0x0080 }, { 3631, 0x0508 }, { 3634, 0x0d25 }, + { 3640, 0x0a90 }, { 3644, 0x0040 }, { 3645, 0x0200 }, { 3646, 0x080c }, + { 3649, 0x6505 }, { 3655, 0x4000 }, { 3656, 0x6421 }, { 3661, 0x4102 }, + /* 0x7400 */ + { 3664, 0x0268 }, { 3668, 0x0000 }, { 3668, 0x0024 }, { 3670, 0x847c }, + { 3677, 0x0002 }, { 3678, 0xde20 }, { 3685, 0x8619 }, { 3691, 0x4049 }, + { 3695, 0x0808 }, { 3697, 0x4000 }, { 3698, 0x0084 }, { 3700, 0x2001 }, + { 3702, 0x8400 }, { 3704, 0x1010 }, { 3706, 0x42cd }, { 3713, 0x01c7 }, + /* 0x7500 */ + { 3719, 0x7038 }, { 3725, 0xd52a }, { 3733, 0x1968 }, { 3739, 0x1d8f }, + { 3748, 0xbe50 }, { 3756, 0x3e12 }, { 3763, 0x2ef5 }, { 3773, 0x81d9 }, + { 3780, 0xcec4 }, { 3788, 0x2412 }, { 3792, 0x0828 }, { 3795, 0x732e }, + { 3804, 0x24ac }, { 3810, 0x4b34 }, { 3817, 0x020c }, { 3820, 0xd41d }, + /* 0x7600 */ + { 3828, 0x2a02 }, { 3832, 0x8000 }, { 3833, 0x0097 }, { 3838, 0x0811 }, + { 3841, 0x11c4 }, { 3846, 0x1144 }, { 3850, 0x1786 }, { 3857, 0x7d45 }, + { 3866, 0x49d9 }, { 3874, 0x0649 }, { 3879, 0x4000 }, { 3880, 0x8791 }, + { 3887, 0x254c }, { 3893, 0xd8c4 }, { 3900, 0x44ba }, { 3907, 0x4914 }, + /* 0x7700 */ + { 3912, 0x1b92 }, { 3919, 0xc800 }, { 3922, 0x0271 }, { 3927, 0x1580 }, + { 3931, 0x0081 }, { 3933, 0x0c00 }, { 3935, 0x096a }, { 3941, 0xc200 }, + { 3944, 0x4800 }, { 3946, 0x4002 }, { 3948, 0x3021 }, { 3952, 0xba49 }, + { 3960, 0x2080 }, { 3962, 0x1c80 }, { 3966, 0xe2ac }, { 3974, 0x1008 }, + /* 0x7800 */ + { 3976, 0x1004 }, { 3978, 0x0034 }, { 3981, 0x00e1 }, { 3985, 0x8414 }, + { 3989, 0x0020 }, { 3990, 0x2000 }, { 3991, 0x9800 }, { 3994, 0x1014 }, + { 3997, 0x70c2 }, { 4003, 0x04aa }, { 4008, 0x8688 }, { 4013, 0x5420 }, + { 4017, 0x0c62 }, { 4022, 0x0413 }, { 4026, 0x9180 }, { 4030, 0x2010 }, + /* 0x7900 */ + { 4032, 0x4082 }, { 4035, 0x0206 }, { 4038, 0x1c40 }, { 4042, 0x5400 }, + { 4045, 0x0383 }, { 4050, 0xe4e9 }, { 4059, 0x2125 }, { 4064, 0x8480 }, + { 4067, 0xe433 }, { 4075, 0x2000 }, { 4076, 0x44c0 }, { 4080, 0xe609 }, + { 4087, 0x0a03 }, { 4091, 0x8126 }, { 4096, 0x12da }, { 4103, 0x0801 }, + /* 0x7a00 */ + { 4105, 0x6901 }, { 4110, 0x9790 }, { 4117, 0x4001 }, { 4119, 0xf886 }, + { 4127, 0xe24d }, { 4135, 0x0081 }, { 4137, 0x0a0e }, { 4142, 0xa651 }, + { 4149, 0x011a }, { 4153, 0x81ec }, { 4160, 0xc600 }, { 4164, 0x8441 }, + { 4168, 0xadb8 }, { 4177, 0xb62c }, { 4185, 0xa46f }, { 4194, 0x8741 }, + /* 0x7b00 */ + { 4200, 0x8d54 }, { 4207, 0x4b02 }, { 4212, 0x1161 }, { 4217, 0x0268 }, + { 4221, 0xbb60 }, { 4229, 0x2057 }, { 4235, 0x50a0 }, { 4239, 0x0433 }, + { 4244, 0xa8c0 }, { 4249, 0xb7b4 }, { 4259, 0x2402 }, { 4262, 0x0112 }, + { 4265, 0x9ad3 }, { 4274, 0x2000 }, { 4275, 0x2271 }, { 4281, 0x00c8 }, + /* 0x7c00 */ + { 4284, 0x2081 }, { 4287, 0x809e }, { 4293, 0x0c8a }, { 4298, 0xe180 }, + { 4303, 0xb009 }, { 4308, 0x8151 }, { 4313, 0x1031 }, { 4317, 0x4028 }, + { 4320, 0x2a0e }, { 4326, 0x89a5 }, { 4333, 0x69b6 }, { 4342, 0x620e }, + { 4348, 0x4425 }, { 4353, 0xd144 }, { 4359, 0x8085 }, { 4363, 0x4d54 }, + /* 0x7d00 */ + { 4370, 0x2c75 }, { 4378, 0x1fb1 }, { 4387, 0xd807 }, { 4394, 0x862d }, + { 4401, 0xd87c }, { 4410, 0x4841 }, { 4414, 0x414e }, { 4420, 0x226e }, + { 4427, 0x8200 }, { 4429, 0x9e08 }, { 4435, 0xf80c }, { 4442, 0xed37 }, + { 4453, 0x8c80 }, { 4457, 0x7526 }, { 4465, 0x9313 }, { 4472, 0x0814 }, + /* 0x7e00 */ + { 4475, 0x0e32 }, { 4481, 0xc804 }, { 4485, 0x484e }, { 4491, 0x6ea6 }, + { 4500, 0x2c4a }, { 4506, 0x6670 }, { 4513, 0x26c0 }, { 4518, 0xba01 }, + { 4524, 0xd30c }, { 4531, 0x185d }, { 4538, 0x0000 }, { 4538, 0x0000 }, + { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0000 }, + /* 0x7f00 */ + { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0540 }, + { 4541, 0x7020 }, { 4545, 0x8133 }, { 4551, 0x4f81 }, { 4558, 0x03a5 }, + { 4564, 0x55ec }, { 4573, 0x6410 }, { 4577, 0xc318 }, { 4583, 0x2344 }, + { 4588, 0x1462 }, { 4593, 0x0034 }, { 4596, 0x0a43 }, { 4601, 0x1a09 }, + /* 0x8000 */ + { 4606, 0x187b }, { 4614, 0x13a5 }, { 4621, 0x0102 }, { 4623, 0xa848 }, + { 4628, 0x0440 }, { 4630, 0xc544 }, { 4636, 0x8106 }, { 4640, 0xe2dd }, + { 4650, 0x1af0 }, { 4657, 0x2d48 }, { 4663, 0xb626 }, { 4671, 0x0416 }, + { 4675, 0x5058 }, { 4680, 0x6e40 }, { 4686, 0x8032 }, { 4690, 0x3112 }, + /* 0x8100 */ + { 4695, 0x07e4 }, { 4702, 0x0c00 }, { 4704, 0x8208 }, { 4707, 0x420a }, + { 4711, 0x4840 }, { 4714, 0x803b }, { 4720, 0x4860 }, { 4724, 0x8713 }, + { 4731, 0x850d }, { 4737, 0x3428 }, { 4742, 0x0319 }, { 4747, 0xe529 }, + { 4755, 0x2345 }, { 4761, 0x870a }, { 4767, 0x25a9 }, { 4774, 0x5c18 }, + /* 0x8200 */ + { 4780, 0x77a6 }, { 4790, 0xd9c5 }, { 4799, 0x5e00 }, { 4804, 0x03e8 }, + { 4810, 0x0081 }, { 4812, 0xa700 }, { 4817, 0xcd54 }, { 4825, 0x41c6 }, + { 4831, 0x2800 }, { 4833, 0xa204 }, { 4837, 0xb860 }, { 4843, 0x2b0a }, + { 4849, 0x0020 }, { 4850, 0xda9e }, { 4860, 0x08ea }, { 4866, 0x0e1a }, + /* 0x8300 */ + { 4872, 0x427c }, { 4879, 0x11c0 }, { 4883, 0x8908 }, { 4887, 0x0376 }, + { 4894, 0x8621 }, { 4899, 0x0105 }, { 4902, 0x0000 }, { 4902, 0x18a8 }, + { 4907, 0x46a0 }, { 4912, 0xc448 }, { 4917, 0x0d05 }, { 4922, 0x2022 }, + { 4925, 0x5422 }, { 4930, 0x9148 }, { 4935, 0x8a01 }, { 4939, 0x2897 }, + /* 0x8400 */ + { 4946, 0x7898 }, { 4953, 0x0008 }, { 4954, 0x1605 }, { 4959, 0x3122 }, + { 4964, 0x4240 }, { 4967, 0x0880 }, { 4969, 0xfa4e }, { 4979, 0x06a2 }, + { 4984, 0x0814 }, { 4987, 0x9211 }, { 4992, 0x2002 }, { 4994, 0x9b04 }, + { 5000, 0x2e52 }, { 5007, 0x0643 }, { 5012, 0x5000 }, { 5014, 0x9010 }, + /* 0x8500 */ + { 5017, 0x0041 }, { 5019, 0x85ba }, { 5027, 0x3042 }, { 5031, 0x2020 }, + { 5033, 0x4f0b }, { 5041, 0x05a0 }, { 5045, 0x2708 }, { 5050, 0x4080 }, + { 5052, 0x0591 }, { 5057, 0x1a93 }, { 5064, 0xdf50 }, { 5073, 0x0600 }, + { 5075, 0xa202 }, { 5079, 0x3021 }, { 5083, 0x0630 }, { 5087, 0x4e80 }, + /* 0x8600 */ + { 5092, 0x0cc4 }, { 5097, 0x04c8 }, { 5101, 0xa004 }, { 5104, 0x8001 }, + { 5106, 0x6000 }, { 5108, 0xd431 }, { 5115, 0x0880 }, { 5117, 0x0a02 }, + { 5120, 0x1c00 }, { 5123, 0x0028 }, { 5125, 0x8e18 }, { 5131, 0x0041 }, + { 5133, 0x6ad0 }, { 5140, 0xca10 }, { 5145, 0xf210 }, { 5151, 0x4b00 }, + /* 0x8700 */ + { 5155, 0x274d }, { 5163, 0x1506 }, { 5168, 0x0220 }, { 5170, 0x8890 }, + { 5174, 0x5a00 }, { 5178, 0x82a8 }, { 5183, 0x4549 }, { 5189, 0x8150 }, + { 5193, 0x2004 }, { 5195, 0x8000 }, { 5196, 0x8804 }, { 5199, 0x2c08 }, + { 5203, 0x08d1 }, { 5208, 0x0005 }, { 5210, 0x8001 }, { 5212, 0x4ac4 }, + /* 0x8800 */ + { 5218, 0xe020 }, { 5222, 0x0062 }, { 5225, 0x008e }, { 5229, 0x0a42 }, + { 5233, 0x3055 }, { 5239, 0x6a8c }, { 5246, 0x090e }, { 5251, 0xe0a5 }, + { 5258, 0x2906 }, { 5263, 0x42c4 }, { 5268, 0x4814 }, { 5272, 0x80b3 }, + { 5278, 0x803e }, { 5284, 0xb330 }, { 5291, 0x0102 }, { 5293, 0x731c }, + /* 0x8900 */ + { 5301, 0x1494 }, { 5306, 0x600d }, { 5311, 0x0c20 }, { 5314, 0x0940 }, + { 5317, 0x301a }, { 5322, 0xc040 }, { 5325, 0xa451 }, { 5331, 0xc094 }, + { 5336, 0x8dca }, { 5344, 0x05c8 }, { 5349, 0x96c2 }, { 5356, 0xa40c }, + { 5361, 0x0001 }, { 5362, 0x3404 }, { 5366, 0x00c8 }, { 5369, 0x0110 }, + /* 0x8a00 */ + { 5371, 0x550d }, { 5378, 0xa9c9 }, { 5386, 0x2428 }, { 5390, 0x1c5a }, + { 5397, 0x0142 }, { 5400, 0x4837 }, { 5407, 0x7a4d }, { 5416, 0x100f }, + { 5421, 0x32b4 }, { 5428, 0x452a }, { 5434, 0x317b }, { 5443, 0x9205 }, + { 5448, 0xb894 }, { 5455, 0x5c44 }, { 5461, 0x68d7 }, { 5470, 0x458a }, + /* 0x8b00 */ + { 5476, 0x5097 }, { 5483, 0x2ed1 }, { 5491, 0x1943 }, { 5497, 0x4208 }, + { 5500, 0xd202 }, { 5505, 0x9d40 }, { 5511, 0x9840 }, { 5515, 0x2097 }, + { 5521, 0x5409 }, { 5526, 0x064d }, { 5532, 0x0000 }, { 5532, 0x0000 }, + { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x0000 }, + /* 0x8c00 */ + { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x8480 }, + { 5535, 0x5542 }, { 5541, 0x0421 }, { 5544, 0x1c06 }, { 5549, 0x1700 }, + { 5553, 0x7624 }, { 5560, 0x6110 }, { 5564, 0xff87 }, { 5576, 0xb9dd }, + { 5587, 0x659f }, { 5597, 0x5c0a }, { 5603, 0x245d }, { 5610, 0x3c00 }, + /* 0x8d00 */ + { 5614, 0xadb0 }, { 5622, 0x0059 }, { 5626, 0x0000 }, { 5626, 0x0000 }, + { 5626, 0x0000 }, { 5626, 0x0000 }, { 5626, 0x28d0 }, { 5631, 0x009b }, + { 5636, 0x0422 }, { 5639, 0x0200 }, { 5640, 0x0108 }, { 5642, 0x4408 }, + { 5645, 0x9804 }, { 5649, 0xac40 }, { 5654, 0x8d0a }, { 5660, 0x9028 }, + /* 0x8e00 */ + { 5664, 0x8700 }, { 5668, 0xe001 }, { 5672, 0x0400 }, { 5673, 0x0031 }, + { 5676, 0x1794 }, { 5683, 0x8221 }, { 5687, 0x0019 }, { 5690, 0x1054 }, + { 5694, 0x2cb2 }, { 5701, 0x021a }, { 5705, 0x9c02 }, { 5710, 0x4003 }, + { 5713, 0x3d60 }, { 5720, 0x8804 }, { 5723, 0x080c }, { 5726, 0x7900 }, + /* 0x8f00 */ + { 5731, 0x1628 }, { 5736, 0xba3c }, { 5745, 0x8640 }, { 5749, 0xcb08 }, + { 5755, 0x7274 }, { 5763, 0x9080 }, { 5766, 0x001e }, { 5770, 0x0000 }, + { 5770, 0x0000 }, { 5770, 0xd800 }, { 5774, 0xe188 }, { 5780, 0x9c87 }, + { 5788, 0x4034 }, { 5792, 0x0412 }, { 5795, 0xae64 }, { 5803, 0x2791 }, + /* 0x9000 */ + { 5810, 0xe86b }, { 5819, 0xe6fb }, { 5831, 0x408f }, { 5837, 0x5366 }, + { 5845, 0xeea6 }, { 5855, 0x537f }, { 5866, 0xe32b }, { 5875, 0xb5e4 }, + { 5884, 0x869f }, { 5893, 0x0002 }, { 5894, 0x8548 }, { 5899, 0x0122 }, + { 5902, 0x4402 }, { 5905, 0x0800 }, { 5906, 0x2116 }, { 5911, 0x20a0 }, + /* 0x9100 */ + { 5914, 0x0004 }, { 5915, 0x0204 }, { 5917, 0x2000 }, { 5918, 0x0005 }, + { 5920, 0x7e00 }, { 5926, 0x0154 }, { 5930, 0x162c }, { 5936, 0x01ac }, + { 5941, 0x2a84 }, { 5946, 0x1085 }, { 5950, 0x8c14 }, { 5955, 0x0530 }, + { 5959, 0xfbc3 }, { 5970, 0xb943 }, { 5978, 0x00ca }, { 5982, 0x9060 }, + /* 0x9200 */ + { 5986, 0x6000 }, { 5988, 0x4032 }, { 5992, 0x1200 }, { 5994, 0x8090 }, + { 5997, 0x0b30 }, { 6002, 0x4c81 }, { 6007, 0x0054 }, { 6010, 0x4002 }, + { 6012, 0x0029 }, { 6015, 0x1d6a }, { 6023, 0x2000 }, { 6024, 0x0280 }, + { 6026, 0x8000 }, { 6027, 0x0004 }, { 6028, 0x2610 }, { 6032, 0x150c }, + /* 0x9300 */ + { 6037, 0x8040 }, { 6039, 0x0701 }, { 6043, 0xd94d }, { 6052, 0x0c24 }, + { 6056, 0x2810 }, { 6059, 0x1850 }, { 6063, 0x5001 }, { 6066, 0x5020 }, + { 6069, 0x1000 }, { 6070, 0x04d0 }, { 6074, 0x7080 }, { 6078, 0x0201 }, + { 6080, 0x0108 }, { 6082, 0x21c3 }, { 6088, 0x0132 }, { 6092, 0x0000 }, + /* 0x9400 */ + { 6092, 0x0088 }, { 6094, 0x0719 }, { 6100, 0x0802 }, { 6102, 0x0560 }, + { 6106, 0x0012 }, { 6108, 0x4c0e }, { 6114, 0x0405 }, { 6117, 0xf0a1 }, + { 6124, 0x0002 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, + { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, + /* 0x9500 */ + { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, + { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0080 }, + { 6126, 0x8e8d }, { 6134, 0x035a }, { 6140, 0x21bd }, { 6148, 0x5a04 }, + { 6153, 0x3488 }, { 6158, 0x1170 }, { 6163, 0x0026 }, { 6166, 0x0000 }, + /* 0x9600 */ + { 6166, 0x0000 }, { 6166, 0x1000 }, { 6167, 0xc502 }, { 6172, 0x8804 }, + { 6175, 0xb815 }, { 6182, 0xf801 }, { 6188, 0x147c }, { 6195, 0x25ed }, + { 6204, 0xed60 }, { 6212, 0x1bb0 }, { 6219, 0x0589 }, { 6224, 0x1bd7 }, + { 6234, 0x7af3 }, { 6245, 0x1a62 }, { 6251, 0x0d0c }, { 6256, 0x0ac5 }, + /* 0x9700 */ + { 6262, 0xe5d1 }, { 6271, 0x524a }, { 6277, 0x0490 }, { 6280, 0x6305 }, + { 6286, 0x0354 }, { 6291, 0x5244 }, { 6296, 0x2b57 }, { 6305, 0x1612 }, + { 6310, 0xa872 }, { 6317, 0x1101 }, { 6320, 0x2949 }, { 6326, 0x0018 }, + { 6328, 0x0948 }, { 6332, 0x1008 }, { 6334, 0x6000 }, { 6336, 0x886c }, + /* 0x9800 */ + { 6342, 0x916e }, { 6350, 0x058f }, { 6357, 0x3012 }, { 6361, 0x3990 }, + { 6367, 0xf840 }, { 6373, 0x4930 }, { 6378, 0x8880 }, { 6381, 0x001b }, + { 6385, 0x0000 }, { 6385, 0x0000 }, { 6385, 0x8500 }, { 6388, 0x0042 }, + { 6390, 0x0058 }, { 6393, 0x9800 }, { 6396, 0xea04 }, { 6402, 0x7014 }, + /* 0x9900 */ + { 6407, 0x1628 }, { 6412, 0x611d }, { 6419, 0x5113 }, { 6425, 0x6000 }, + { 6427, 0x1a24 }, { 6432, 0x00a7 }, { 6437, 0x0000 }, { 6437, 0x0000 }, + { 6437, 0x0000 }, { 6437, 0x03c0 }, { 6441, 0x7120 }, { 6446, 0x1018 }, + { 6449, 0x0172 }, { 6454, 0xa927 }, { 6462, 0x6004 }, { 6465, 0x8906 }, + /* 0x9a00 */ + { 6470, 0xc022 }, { 6474, 0x020c }, { 6477, 0x0900 }, { 6479, 0x4081 }, + { 6482, 0x202d }, { 6487, 0x8ca0 }, { 6492, 0x0e34 }, { 6498, 0x0000 }, + { 6498, 0x0000 }, { 6498, 0x0000 }, { 6498, 0x2100 }, { 6500, 0x1101 }, + { 6503, 0x8011 }, { 6506, 0xc11a }, { 6512, 0xec4c }, { 6520, 0x0892 }, + /* 0x9b00 */ + { 6524, 0x0040 }, { 6525, 0x8500 }, { 6528, 0xc7ac }, { 6537, 0x1806 }, + { 6541, 0xe03e }, { 6549, 0x0512 }, { 6553, 0x8000 }, { 6554, 0x0010 }, + { 6555, 0x4008 }, { 6557, 0x80ce }, { 6563, 0x6d01 }, { 6569, 0x0210 }, + { 6571, 0x8641 }, { 6576, 0x0856 }, { 6581, 0x011e }, { 6586, 0x0027 }, + /* 0x9c00 */ + { 6590, 0x3750 }, { 6597, 0x083d }, { 6603, 0xe032 }, { 6609, 0x4e05 }, + { 6615, 0x01c0 }, { 6618, 0x0484 }, { 6621, 0x0081 }, { 6623, 0x0140 }, + { 6625, 0x0000 }, { 6625, 0x0000 }, { 6625, 0x0000 }, { 6625, 0x0000 }, + { 6625, 0x0000 }, { 6625, 0x0000 }, { 6625, 0x1aa0 }, { 6630, 0x0059 }, + /* 0x9d00 */ + { 6634, 0x43c8 }, { 6640, 0x8824 }, { 6644, 0x1d48 }, { 6650, 0xc800 }, + { 6653, 0x0152 }, { 6657, 0x7203 }, { 6663, 0x9013 }, { 6668, 0x0404 }, + { 6670, 0x8280 }, { 6673, 0x0400 }, { 6674, 0x8a10 }, { 6678, 0x0d14 }, + { 6683, 0x8056 }, { 6688, 0x0208 }, { 6690, 0xa040 }, { 6693, 0x2704 }, + /* 0x9e00 */ + { 6698, 0x0000 }, { 6698, 0x4c00 }, { 6701, 0x0000 }, { 6701, 0x0000 }, + { 6701, 0x0000 }, { 6701, 0x0000 }, { 6701, 0x0000 }, { 6701, 0xa320 }, + { 6706, 0x1902 }, { 6710, 0xa0ae }, { 6717, 0x2660 }, { 6722, 0xdf00 }, + { 6729, 0xf010 }, { 6734, 0x7b15 }, { 6743, 0x8121 }, { 6747, 0x3ad0 }, + /* 0x9f00 */ + { 6754, 0x4180 }, { 6757, 0x0028 }, { 6759, 0x1003 }, { 6762, 0x4800 }, + { 6764, 0xcc00 }, { 6768, 0x8014 }, { 6771, 0x14cf }, { 6779, 0x00c4 }, + { 6782, 0x2000 }, { 6783, 0x3020 }, { 6786, 0x0001 }, +}; +static const Summary16 jisx0208_uni2indx_pageff[15] = { + /* 0xff00 */ + { 6787, 0xdf7a }, { 6799, 0xffff }, { 6815, 0xffff }, { 6831, 0xffff }, + { 6847, 0xffff }, { 6863, 0x3fff }, { 6877, 0x0000 }, { 6877, 0x0000 }, + { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, + { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0028 }, +}; + +static int +jisx0208_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0000 && wc < 0x0100) + summary = &jisx0208_uni2indx_page00[(wc>>4)]; + else if (wc >= 0x0300 && wc < 0x0460) + summary = &jisx0208_uni2indx_page03[(wc>>4)-0x030]; + else if (wc >= 0x2000 && wc < 0x2320) + summary = &jisx0208_uni2indx_page20[(wc>>4)-0x200]; + else if (wc >= 0x2500 && wc < 0x2670) + summary = &jisx0208_uni2indx_page25[(wc>>4)-0x250]; + else if (wc >= 0x3000 && wc < 0x3100) + summary = &jisx0208_uni2indx_page30[(wc>>4)-0x300]; + else if (wc >= 0x4e00 && wc < 0x9fb0) + summary = &jisx0208_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0xff00 && wc < 0xfff0) + summary = &jisx0208_uni2indx_pageff[(wc>>4)-0xff0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = jisx0208_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/jisx0212.h b/jni/parted/libiconv/lib/jisx0212.h new file mode 100755 index 0000000..05fbdc8 --- /dev/null +++ b/jni/parted/libiconv/lib/jisx0212.h @@ -0,0 +1,2188 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * JISX0212.1990-0 + */ + +static const unsigned short jisx0212_2uni_page22[81] = { + /* 0x22 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x02d8, 0x02c7, + 0x00b8, 0x02d9, 0x02dd, 0x00af, 0x02db, 0x02da, 0xff5e, 0x0384, + 0x0385, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x00a1, 0x00a6, 0x00bf, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0x00ba, 0x00aa, 0x00a9, 0x00ae, 0x2122, 0x00a4, + 0x2116, +}; +static const unsigned short jisx0212_2uni_page26[188] = { + /* 0x26 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0xfffd, 0x038c, 0xfffd, + 0x038e, 0x03ab, 0xfffd, 0x038f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, 0x03c2, + 0x03cd, 0x03cb, 0x03b0, 0x03ce, 0xfffd, 0xfffd, + /* 0x27 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, + 0x0409, 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, + 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, +}; +static const unsigned short jisx0212_2uni_page29[275] = { + /* 0x29 */ + 0x00c6, 0x0110, 0xfffd, 0x0126, 0xfffd, 0x0132, 0xfffd, 0x0141, + 0x013f, 0xfffd, 0x014a, 0x00d8, 0x0152, 0xfffd, 0x0166, 0x00de, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0142, + 0x0140, 0x0149, 0x014b, 0x00f8, 0x0153, 0x00df, 0x0167, 0x00fe, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x2a */ + 0x00c1, 0x00c0, 0x00c4, 0x00c2, 0x0102, 0x01cd, 0x0100, 0x0104, + 0x00c5, 0x00c3, 0x0106, 0x0108, 0x010c, 0x00c7, 0x010a, 0x010e, + 0x00c9, 0x00c8, 0x00cb, 0x00ca, 0x011a, 0x0116, 0x0112, 0x0118, + 0xfffd, 0x011c, 0x011e, 0x0122, 0x0120, 0x0124, 0x00cd, 0x00cc, + 0x00cf, 0x00ce, 0x01cf, 0x0130, 0x012a, 0x012e, 0x0128, 0x0134, + 0x0136, 0x0139, 0x013d, 0x013b, 0x0143, 0x0147, 0x0145, 0x00d1, + 0x00d3, 0x00d2, 0x00d6, 0x00d4, 0x01d1, 0x0150, 0x014c, 0x00d5, + 0x0154, 0x0158, 0x0156, 0x015a, 0x015c, 0x0160, 0x015e, 0x0164, + 0x0162, 0x00da, 0x00d9, 0x00dc, 0x00db, 0x016c, 0x01d3, 0x0170, + 0x016a, 0x0172, 0x016e, 0x0168, 0x01d7, 0x01db, 0x01d9, 0x01d5, + 0x0174, 0x00dd, 0x0178, 0x0176, 0x0179, 0x017d, 0x017b, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x2b */ + 0x00e1, 0x00e0, 0x00e4, 0x00e2, 0x0103, 0x01ce, 0x0101, 0x0105, + 0x00e5, 0x00e3, 0x0107, 0x0109, 0x010d, 0x00e7, 0x010b, 0x010f, + 0x00e9, 0x00e8, 0x00eb, 0x00ea, 0x011b, 0x0117, 0x0113, 0x0119, + 0x01f5, 0x011d, 0x011f, 0xfffd, 0x0121, 0x0125, 0x00ed, 0x00ec, + 0x00ef, 0x00ee, 0x01d0, 0xfffd, 0x012b, 0x012f, 0x0129, 0x0135, + 0x0137, 0x013a, 0x013e, 0x013c, 0x0144, 0x0148, 0x0146, 0x00f1, + 0x00f3, 0x00f2, 0x00f6, 0x00f4, 0x01d2, 0x0151, 0x014d, 0x00f5, + 0x0155, 0x0159, 0x0157, 0x015b, 0x015d, 0x0161, 0x015f, 0x0165, + 0x0163, 0x00fa, 0x00f9, 0x00fc, 0x00fb, 0x016d, 0x01d4, 0x0171, + 0x016b, 0x0173, 0x016f, 0x0169, 0x01d8, 0x01dc, 0x01da, 0x01d6, + 0x0175, 0x00fd, 0x00ff, 0x0177, 0x017a, 0x017e, 0x017c, +}; +static const unsigned short jisx0212_2uni_page30[5801] = { + /* 0x30 */ + 0x4e02, 0x4e04, 0x4e05, 0x4e0c, 0x4e12, 0x4e1f, 0x4e23, 0x4e24, + 0x4e28, 0x4e2b, 0x4e2e, 0x4e2f, 0x4e30, 0x4e35, 0x4e40, 0x4e41, + 0x4e44, 0x4e47, 0x4e51, 0x4e5a, 0x4e5c, 0x4e63, 0x4e68, 0x4e69, + 0x4e74, 0x4e75, 0x4e79, 0x4e7f, 0x4e8d, 0x4e96, 0x4e97, 0x4e9d, + 0x4eaf, 0x4eb9, 0x4ec3, 0x4ed0, 0x4eda, 0x4edb, 0x4ee0, 0x4ee1, + 0x4ee2, 0x4ee8, 0x4eef, 0x4ef1, 0x4ef3, 0x4ef5, 0x4efd, 0x4efe, + 0x4eff, 0x4f00, 0x4f02, 0x4f03, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12, + 0x4f15, 0x4f16, 0x4f17, 0x4f19, 0x4f2e, 0x4f31, 0x4f60, 0x4f33, + 0x4f35, 0x4f37, 0x4f39, 0x4f3b, 0x4f3e, 0x4f40, 0x4f42, 0x4f48, + 0x4f49, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56, 0x4f58, 0x4f5f, + 0x4f63, 0x4f6a, 0x4f6c, 0x4f6e, 0x4f71, 0x4f77, 0x4f78, 0x4f79, + 0x4f7a, 0x4f7d, 0x4f7e, 0x4f81, 0x4f82, 0x4f84, + /* 0x31 */ + 0x4f85, 0x4f89, 0x4f8a, 0x4f8c, 0x4f8e, 0x4f90, 0x4f92, 0x4f93, + 0x4f94, 0x4f97, 0x4f99, 0x4f9a, 0x4f9e, 0x4f9f, 0x4fb2, 0x4fb7, + 0x4fb9, 0x4fbb, 0x4fbc, 0x4fbd, 0x4fbe, 0x4fc0, 0x4fc1, 0x4fc5, + 0x4fc6, 0x4fc8, 0x4fc9, 0x4fcb, 0x4fcc, 0x4fcd, 0x4fcf, 0x4fd2, + 0x4fdc, 0x4fe0, 0x4fe2, 0x4ff0, 0x4ff2, 0x4ffc, 0x4ffd, 0x4fff, + 0x5000, 0x5001, 0x5004, 0x5007, 0x500a, 0x500c, 0x500e, 0x5010, + 0x5013, 0x5017, 0x5018, 0x501b, 0x501c, 0x501d, 0x501e, 0x5022, + 0x5027, 0x502e, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040, 0x5041, + 0x5042, 0x5045, 0x5046, 0x504a, 0x504c, 0x504e, 0x5051, 0x5052, + 0x5053, 0x5057, 0x5059, 0x505f, 0x5060, 0x5062, 0x5063, 0x5066, + 0x5067, 0x506a, 0x506d, 0x5070, 0x5071, 0x503b, 0x5081, 0x5083, + 0x5084, 0x5086, 0x508a, 0x508e, 0x508f, 0x5090, + /* 0x32 */ + 0x5092, 0x5093, 0x5094, 0x5096, 0x509b, 0x509c, 0x509e, 0x509f, + 0x50a0, 0x50a1, 0x50a2, 0x50aa, 0x50af, 0x50b0, 0x50b9, 0x50ba, + 0x50bd, 0x50c0, 0x50c3, 0x50c4, 0x50c7, 0x50cc, 0x50ce, 0x50d0, + 0x50d3, 0x50d4, 0x50d8, 0x50dc, 0x50dd, 0x50df, 0x50e2, 0x50e4, + 0x50e6, 0x50e8, 0x50e9, 0x50ef, 0x50f1, 0x50f6, 0x50fa, 0x50fe, + 0x5103, 0x5106, 0x5107, 0x5108, 0x510b, 0x510c, 0x510d, 0x510e, + 0x50f2, 0x5110, 0x5117, 0x5119, 0x511b, 0x511c, 0x511d, 0x511e, + 0x5123, 0x5127, 0x5128, 0x512c, 0x512d, 0x512f, 0x5131, 0x5133, + 0x5134, 0x5135, 0x5138, 0x5139, 0x5142, 0x514a, 0x514f, 0x5153, + 0x5155, 0x5157, 0x5158, 0x515f, 0x5164, 0x5166, 0x517e, 0x5183, + 0x5184, 0x518b, 0x518e, 0x5198, 0x519d, 0x51a1, 0x51a3, 0x51ad, + 0x51b8, 0x51ba, 0x51bc, 0x51be, 0x51bf, 0x51c2, + /* 0x33 */ + 0x51c8, 0x51cf, 0x51d1, 0x51d2, 0x51d3, 0x51d5, 0x51d8, 0x51de, + 0x51e2, 0x51e5, 0x51ee, 0x51f2, 0x51f3, 0x51f4, 0x51f7, 0x5201, + 0x5202, 0x5205, 0x5212, 0x5213, 0x5215, 0x5216, 0x5218, 0x5222, + 0x5228, 0x5231, 0x5232, 0x5235, 0x523c, 0x5245, 0x5249, 0x5255, + 0x5257, 0x5258, 0x525a, 0x525c, 0x525f, 0x5260, 0x5261, 0x5266, + 0x526e, 0x5277, 0x5278, 0x5279, 0x5280, 0x5282, 0x5285, 0x528a, + 0x528c, 0x5293, 0x5295, 0x5296, 0x5297, 0x5298, 0x529a, 0x529c, + 0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52af, 0x52b0, 0x52b6, 0x52b7, + 0x52b8, 0x52ba, 0x52bb, 0x52bd, 0x52c0, 0x52c4, 0x52c6, 0x52c8, + 0x52cc, 0x52cf, 0x52d1, 0x52d4, 0x52d6, 0x52db, 0x52dc, 0x52e1, + 0x52e5, 0x52e8, 0x52e9, 0x52ea, 0x52ec, 0x52f0, 0x52f1, 0x52f4, + 0x52f6, 0x52f7, 0x5300, 0x5303, 0x530a, 0x530b, + /* 0x34 */ + 0x530c, 0x5311, 0x5313, 0x5318, 0x531b, 0x531c, 0x531e, 0x531f, + 0x5325, 0x5327, 0x5328, 0x5329, 0x532b, 0x532c, 0x532d, 0x5330, + 0x5332, 0x5335, 0x533c, 0x533d, 0x533e, 0x5342, 0x534c, 0x534b, + 0x5359, 0x535b, 0x5361, 0x5363, 0x5365, 0x536c, 0x536d, 0x5372, + 0x5379, 0x537e, 0x5383, 0x5387, 0x5388, 0x538e, 0x5393, 0x5394, + 0x5399, 0x539d, 0x53a1, 0x53a4, 0x53aa, 0x53ab, 0x53af, 0x53b2, + 0x53b4, 0x53b5, 0x53b7, 0x53b8, 0x53ba, 0x53bd, 0x53c0, 0x53c5, + 0x53cf, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dd, 0x53de, 0x53e0, + 0x53e6, 0x53e7, 0x53f5, 0x5402, 0x5413, 0x541a, 0x5421, 0x5427, + 0x5428, 0x542a, 0x542f, 0x5431, 0x5434, 0x5435, 0x5443, 0x5444, + 0x5447, 0x544d, 0x544f, 0x545e, 0x5462, 0x5464, 0x5466, 0x5467, + 0x5469, 0x546b, 0x546d, 0x546e, 0x5474, 0x547f, + /* 0x35 */ + 0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548d, 0x5491, 0x5495, + 0x5496, 0x549c, 0x549f, 0x54a1, 0x54a6, 0x54a7, 0x54a9, 0x54aa, + 0x54ad, 0x54ae, 0x54b1, 0x54b7, 0x54b9, 0x54ba, 0x54bb, 0x54bf, + 0x54c6, 0x54ca, 0x54cd, 0x54ce, 0x54e0, 0x54ea, 0x54ec, 0x54ef, + 0x54f6, 0x54fc, 0x54fe, 0x54ff, 0x5500, 0x5501, 0x5505, 0x5508, + 0x5509, 0x550c, 0x550d, 0x550e, 0x5515, 0x552a, 0x552b, 0x5532, + 0x5535, 0x5536, 0x553b, 0x553c, 0x553d, 0x5541, 0x5547, 0x5549, + 0x554a, 0x554d, 0x5550, 0x5551, 0x5558, 0x555a, 0x555b, 0x555e, + 0x5560, 0x5561, 0x5564, 0x5566, 0x557f, 0x5581, 0x5582, 0x5586, + 0x5588, 0x558e, 0x558f, 0x5591, 0x5592, 0x5593, 0x5594, 0x5597, + 0x55a3, 0x55a4, 0x55ad, 0x55b2, 0x55bf, 0x55c1, 0x55c3, 0x55c6, + 0x55c9, 0x55cb, 0x55cc, 0x55ce, 0x55d1, 0x55d2, + /* 0x36 */ + 0x55d3, 0x55d7, 0x55d8, 0x55db, 0x55de, 0x55e2, 0x55e9, 0x55f6, + 0x55ff, 0x5605, 0x5608, 0x560a, 0x560d, 0x560e, 0x560f, 0x5610, + 0x5611, 0x5612, 0x5619, 0x562c, 0x5630, 0x5633, 0x5635, 0x5637, + 0x5639, 0x563b, 0x563c, 0x563d, 0x563f, 0x5640, 0x5641, 0x5643, + 0x5644, 0x5646, 0x5649, 0x564b, 0x564d, 0x564f, 0x5654, 0x565e, + 0x5660, 0x5661, 0x5662, 0x5663, 0x5666, 0x5669, 0x566d, 0x566f, + 0x5671, 0x5672, 0x5675, 0x5684, 0x5685, 0x5688, 0x568b, 0x568c, + 0x5695, 0x5699, 0x569a, 0x569d, 0x569e, 0x569f, 0x56a6, 0x56a7, + 0x56a8, 0x56a9, 0x56ab, 0x56ac, 0x56ad, 0x56b1, 0x56b3, 0x56b7, + 0x56be, 0x56c5, 0x56c9, 0x56ca, 0x56cb, 0x56cf, 0x56d0, 0x56cc, + 0x56cd, 0x56d9, 0x56dc, 0x56dd, 0x56df, 0x56e1, 0x56e4, 0x56e5, + 0x56e6, 0x56e7, 0x56e8, 0x56f1, 0x56eb, 0x56ed, + /* 0x37 */ + 0x56f6, 0x56f7, 0x5701, 0x5702, 0x5707, 0x570a, 0x570c, 0x5711, + 0x5715, 0x571a, 0x571b, 0x571d, 0x5720, 0x5722, 0x5723, 0x5724, + 0x5725, 0x5729, 0x572a, 0x572c, 0x572e, 0x572f, 0x5733, 0x5734, + 0x573d, 0x573e, 0x573f, 0x5745, 0x5746, 0x574c, 0x574d, 0x5752, + 0x5762, 0x5765, 0x5767, 0x5768, 0x576b, 0x576d, 0x576e, 0x576f, + 0x5770, 0x5771, 0x5773, 0x5774, 0x5775, 0x5777, 0x5779, 0x577a, + 0x577b, 0x577c, 0x577e, 0x5781, 0x5783, 0x578c, 0x5794, 0x5797, + 0x5799, 0x579a, 0x579c, 0x579d, 0x579e, 0x579f, 0x57a1, 0x5795, + 0x57a7, 0x57a8, 0x57a9, 0x57ac, 0x57b8, 0x57bd, 0x57c7, 0x57c8, + 0x57cc, 0x57cf, 0x57d5, 0x57dd, 0x57de, 0x57e4, 0x57e6, 0x57e7, + 0x57e9, 0x57ed, 0x57f0, 0x57f5, 0x57f6, 0x57f8, 0x57fd, 0x57fe, + 0x57ff, 0x5803, 0x5804, 0x5808, 0x5809, 0x57e1, + /* 0x38 */ + 0x580c, 0x580d, 0x581b, 0x581e, 0x581f, 0x5820, 0x5826, 0x5827, + 0x582d, 0x5832, 0x5839, 0x583f, 0x5849, 0x584c, 0x584d, 0x584f, + 0x5850, 0x5855, 0x585f, 0x5861, 0x5864, 0x5867, 0x5868, 0x5878, + 0x587c, 0x587f, 0x5880, 0x5881, 0x5887, 0x5888, 0x5889, 0x588a, + 0x588c, 0x588d, 0x588f, 0x5890, 0x5894, 0x5896, 0x589d, 0x58a0, + 0x58a1, 0x58a2, 0x58a6, 0x58a9, 0x58b1, 0x58b2, 0x58c4, 0x58bc, + 0x58c2, 0x58c8, 0x58cd, 0x58ce, 0x58d0, 0x58d2, 0x58d4, 0x58d6, + 0x58da, 0x58dd, 0x58e1, 0x58e2, 0x58e9, 0x58f3, 0x5905, 0x5906, + 0x590b, 0x590c, 0x5912, 0x5913, 0x5914, 0x8641, 0x591d, 0x5921, + 0x5923, 0x5924, 0x5928, 0x592f, 0x5930, 0x5933, 0x5935, 0x5936, + 0x593f, 0x5943, 0x5946, 0x5952, 0x5953, 0x5959, 0x595b, 0x595d, + 0x595e, 0x595f, 0x5961, 0x5963, 0x596b, 0x596d, + /* 0x39 */ + 0x596f, 0x5972, 0x5975, 0x5976, 0x5979, 0x597b, 0x597c, 0x598b, + 0x598c, 0x598e, 0x5992, 0x5995, 0x5997, 0x599f, 0x59a4, 0x59a7, + 0x59ad, 0x59ae, 0x59af, 0x59b0, 0x59b3, 0x59b7, 0x59ba, 0x59bc, + 0x59c1, 0x59c3, 0x59c4, 0x59c8, 0x59ca, 0x59cd, 0x59d2, 0x59dd, + 0x59de, 0x59df, 0x59e3, 0x59e4, 0x59e7, 0x59ee, 0x59ef, 0x59f1, + 0x59f2, 0x59f4, 0x59f7, 0x5a00, 0x5a04, 0x5a0c, 0x5a0d, 0x5a0e, + 0x5a12, 0x5a13, 0x5a1e, 0x5a23, 0x5a24, 0x5a27, 0x5a28, 0x5a2a, + 0x5a2d, 0x5a30, 0x5a44, 0x5a45, 0x5a47, 0x5a48, 0x5a4c, 0x5a50, + 0x5a55, 0x5a5e, 0x5a63, 0x5a65, 0x5a67, 0x5a6d, 0x5a77, 0x5a7a, + 0x5a7b, 0x5a7e, 0x5a8b, 0x5a90, 0x5a93, 0x5a96, 0x5a99, 0x5a9c, + 0x5a9e, 0x5a9f, 0x5aa0, 0x5aa2, 0x5aa7, 0x5aac, 0x5ab1, 0x5ab2, + 0x5ab3, 0x5ab5, 0x5ab8, 0x5aba, 0x5abb, 0x5abf, + /* 0x3a */ + 0x5ac4, 0x5ac6, 0x5ac8, 0x5acf, 0x5ada, 0x5adc, 0x5ae0, 0x5ae5, + 0x5aea, 0x5aee, 0x5af5, 0x5af6, 0x5afd, 0x5b00, 0x5b01, 0x5b08, + 0x5b17, 0x5b34, 0x5b19, 0x5b1b, 0x5b1d, 0x5b21, 0x5b25, 0x5b2d, + 0x5b38, 0x5b41, 0x5b4b, 0x5b4c, 0x5b52, 0x5b56, 0x5b5e, 0x5b68, + 0x5b6e, 0x5b6f, 0x5b7c, 0x5b7d, 0x5b7e, 0x5b7f, 0x5b81, 0x5b84, + 0x5b86, 0x5b8a, 0x5b8e, 0x5b90, 0x5b91, 0x5b93, 0x5b94, 0x5b96, + 0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5baf, 0x5bb1, 0x5bb2, 0x5bb7, + 0x5bba, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bcd, 0x5bcf, 0x5bd6, 0x5bd7, + 0x5bd8, 0x5bd9, 0x5bda, 0x5be0, 0x5bef, 0x5bf1, 0x5bf4, 0x5bfd, + 0x5c0c, 0x5c17, 0x5c1e, 0x5c1f, 0x5c23, 0x5c26, 0x5c29, 0x5c2b, + 0x5c2c, 0x5c2e, 0x5c30, 0x5c32, 0x5c35, 0x5c36, 0x5c59, 0x5c5a, + 0x5c5c, 0x5c62, 0x5c63, 0x5c67, 0x5c68, 0x5c69, + /* 0x3b */ + 0x5c6d, 0x5c70, 0x5c74, 0x5c75, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d, + 0x5c87, 0x5c88, 0x5c8a, 0x5c8f, 0x5c92, 0x5c9d, 0x5c9f, 0x5ca0, + 0x5ca2, 0x5ca3, 0x5ca6, 0x5caa, 0x5cb2, 0x5cb4, 0x5cb5, 0x5cba, + 0x5cc9, 0x5ccb, 0x5cd2, 0x5cdd, 0x5cd7, 0x5cee, 0x5cf1, 0x5cf2, + 0x5cf4, 0x5d01, 0x5d06, 0x5d0d, 0x5d12, 0x5d2b, 0x5d23, 0x5d24, + 0x5d26, 0x5d27, 0x5d31, 0x5d34, 0x5d39, 0x5d3d, 0x5d3f, 0x5d42, + 0x5d43, 0x5d46, 0x5d48, 0x5d55, 0x5d51, 0x5d59, 0x5d4a, 0x5d5f, + 0x5d60, 0x5d61, 0x5d62, 0x5d64, 0x5d6a, 0x5d6d, 0x5d70, 0x5d79, + 0x5d7a, 0x5d7e, 0x5d7f, 0x5d81, 0x5d83, 0x5d88, 0x5d8a, 0x5d92, + 0x5d93, 0x5d94, 0x5d95, 0x5d99, 0x5d9b, 0x5d9f, 0x5da0, 0x5da7, + 0x5dab, 0x5db0, 0x5db4, 0x5db8, 0x5db9, 0x5dc3, 0x5dc7, 0x5dcb, + 0x5dd0, 0x5dce, 0x5dd8, 0x5dd9, 0x5de0, 0x5de4, + /* 0x3c */ + 0x5de9, 0x5df8, 0x5df9, 0x5e00, 0x5e07, 0x5e0d, 0x5e12, 0x5e14, + 0x5e15, 0x5e18, 0x5e1f, 0x5e20, 0x5e2e, 0x5e28, 0x5e32, 0x5e35, + 0x5e3e, 0x5e4b, 0x5e50, 0x5e49, 0x5e51, 0x5e56, 0x5e58, 0x5e5b, + 0x5e5c, 0x5e5e, 0x5e68, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, + 0x5e70, 0x5e80, 0x5e8b, 0x5e8e, 0x5ea2, 0x5ea4, 0x5ea5, 0x5ea8, + 0x5eaa, 0x5eac, 0x5eb1, 0x5eb3, 0x5ebd, 0x5ebe, 0x5ebf, 0x5ec6, + 0x5ecc, 0x5ecb, 0x5ece, 0x5ed1, 0x5ed2, 0x5ed4, 0x5ed5, 0x5edc, + 0x5ede, 0x5ee5, 0x5eeb, 0x5f02, 0x5f06, 0x5f07, 0x5f08, 0x5f0e, + 0x5f19, 0x5f1c, 0x5f1d, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f28, + 0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f34, 0x5f36, 0x5f3b, 0x5f3d, + 0x5f3f, 0x5f40, 0x5f44, 0x5f45, 0x5f47, 0x5f4d, 0x5f50, 0x5f54, + 0x5f58, 0x5f5b, 0x5f60, 0x5f63, 0x5f64, 0x5f67, + /* 0x3d */ + 0x5f6f, 0x5f72, 0x5f74, 0x5f75, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e, + 0x5f89, 0x5f8d, 0x5f8f, 0x5f96, 0x5f9c, 0x5f9d, 0x5fa2, 0x5fa7, + 0x5fab, 0x5fa4, 0x5fac, 0x5faf, 0x5fb0, 0x5fb1, 0x5fb8, 0x5fc4, + 0x5fc7, 0x5fc8, 0x5fc9, 0x5fcb, 0x5fd0, 0x5fd1, 0x5fd2, 0x5fd3, + 0x5fd4, 0x5fde, 0x5fe1, 0x5fe2, 0x5fe8, 0x5fe9, 0x5fea, 0x5fec, + 0x5fed, 0x5fee, 0x5fef, 0x5ff2, 0x5ff3, 0x5ff6, 0x5ffa, 0x5ffc, + 0x6007, 0x600a, 0x600d, 0x6013, 0x6014, 0x6017, 0x6018, 0x601a, + 0x601f, 0x6024, 0x602d, 0x6033, 0x6035, 0x6040, 0x6047, 0x6048, + 0x6049, 0x604c, 0x6051, 0x6054, 0x6056, 0x6057, 0x605d, 0x6061, + 0x6067, 0x6071, 0x607e, 0x607f, 0x6082, 0x6086, 0x6088, 0x608a, + 0x608e, 0x6091, 0x6093, 0x6095, 0x6098, 0x609d, 0x609e, 0x60a2, + 0x60a4, 0x60a5, 0x60a8, 0x60b0, 0x60b1, 0x60b7, + /* 0x3e */ + 0x60bb, 0x60be, 0x60c2, 0x60c4, 0x60c8, 0x60c9, 0x60ca, 0x60cb, + 0x60ce, 0x60cf, 0x60d4, 0x60d5, 0x60d9, 0x60db, 0x60dd, 0x60de, + 0x60e2, 0x60e5, 0x60f2, 0x60f5, 0x60f8, 0x60fc, 0x60fd, 0x6102, + 0x6107, 0x610a, 0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, + 0x6116, 0x6117, 0x6119, 0x611c, 0x611e, 0x6122, 0x612a, 0x612b, + 0x6130, 0x6131, 0x6135, 0x6136, 0x6137, 0x6139, 0x6141, 0x6145, + 0x6146, 0x6149, 0x615e, 0x6160, 0x616c, 0x6172, 0x6178, 0x617b, + 0x617c, 0x617f, 0x6180, 0x6181, 0x6183, 0x6184, 0x618b, 0x618d, + 0x6192, 0x6193, 0x6197, 0x6198, 0x619c, 0x619d, 0x619f, 0x61a0, + 0x61a5, 0x61a8, 0x61aa, 0x61ad, 0x61b8, 0x61b9, 0x61bc, 0x61c0, + 0x61c1, 0x61c2, 0x61ce, 0x61cf, 0x61d5, 0x61dc, 0x61dd, 0x61de, + 0x61df, 0x61e1, 0x61e2, 0x61e7, 0x61e9, 0x61e5, + /* 0x3f */ + 0x61ec, 0x61ed, 0x61ef, 0x6201, 0x6203, 0x6204, 0x6207, 0x6213, + 0x6215, 0x621c, 0x6220, 0x6222, 0x6223, 0x6227, 0x6229, 0x622b, + 0x6239, 0x623d, 0x6242, 0x6243, 0x6244, 0x6246, 0x624c, 0x6250, + 0x6251, 0x6252, 0x6254, 0x6256, 0x625a, 0x625c, 0x6264, 0x626d, + 0x626f, 0x6273, 0x627a, 0x627d, 0x628d, 0x628e, 0x628f, 0x6290, + 0x62a6, 0x62a8, 0x62b3, 0x62b6, 0x62b7, 0x62ba, 0x62be, 0x62bf, + 0x62c4, 0x62ce, 0x62d5, 0x62d6, 0x62da, 0x62ea, 0x62f2, 0x62f4, + 0x62fc, 0x62fd, 0x6303, 0x6304, 0x630a, 0x630b, 0x630d, 0x6310, + 0x6313, 0x6316, 0x6318, 0x6329, 0x632a, 0x632d, 0x6335, 0x6336, + 0x6339, 0x633c, 0x6341, 0x6342, 0x6343, 0x6344, 0x6346, 0x634a, + 0x634b, 0x634e, 0x6352, 0x6353, 0x6354, 0x6358, 0x635b, 0x6365, + 0x6366, 0x636c, 0x636d, 0x6371, 0x6374, 0x6375, + /* 0x40 */ + 0x6378, 0x637c, 0x637d, 0x637f, 0x6382, 0x6384, 0x6387, 0x638a, + 0x6390, 0x6394, 0x6395, 0x6399, 0x639a, 0x639e, 0x63a4, 0x63a6, + 0x63ad, 0x63ae, 0x63af, 0x63bd, 0x63c1, 0x63c5, 0x63c8, 0x63ce, + 0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63dc, 0x63e0, 0x63e5, 0x63ea, + 0x63ec, 0x63f2, 0x63f3, 0x63f5, 0x63f8, 0x63f9, 0x6409, 0x640a, + 0x6410, 0x6412, 0x6414, 0x6418, 0x641e, 0x6420, 0x6422, 0x6424, + 0x6425, 0x6429, 0x642a, 0x642f, 0x6430, 0x6435, 0x643d, 0x643f, + 0x644b, 0x644f, 0x6451, 0x6452, 0x6453, 0x6454, 0x645a, 0x645b, + 0x645c, 0x645d, 0x645f, 0x6460, 0x6461, 0x6463, 0x646d, 0x6473, + 0x6474, 0x647b, 0x647d, 0x6485, 0x6487, 0x648f, 0x6490, 0x6491, + 0x6498, 0x6499, 0x649b, 0x649d, 0x649f, 0x64a1, 0x64a3, 0x64a6, + 0x64a8, 0x64ac, 0x64b3, 0x64bd, 0x64be, 0x64bf, + /* 0x41 */ + 0x64c4, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64ce, 0x64d0, 0x64d1, + 0x64d5, 0x64d7, 0x64e4, 0x64e5, 0x64e9, 0x64ea, 0x64ed, 0x64f0, + 0x64f5, 0x64f7, 0x64fb, 0x64ff, 0x6501, 0x6504, 0x6508, 0x6509, + 0x650a, 0x650f, 0x6513, 0x6514, 0x6516, 0x6519, 0x651b, 0x651e, + 0x651f, 0x6522, 0x6526, 0x6529, 0x652e, 0x6531, 0x653a, 0x653c, + 0x653d, 0x6543, 0x6547, 0x6549, 0x6550, 0x6552, 0x6554, 0x655f, + 0x6560, 0x6567, 0x656b, 0x657a, 0x657d, 0x6581, 0x6585, 0x658a, + 0x6592, 0x6595, 0x6598, 0x659d, 0x65a0, 0x65a3, 0x65a6, 0x65ae, + 0x65b2, 0x65b3, 0x65b4, 0x65bf, 0x65c2, 0x65c8, 0x65c9, 0x65ce, + 0x65d0, 0x65d4, 0x65d6, 0x65d8, 0x65df, 0x65f0, 0x65f2, 0x65f4, + 0x65f5, 0x65f9, 0x65fe, 0x65ff, 0x6600, 0x6604, 0x6608, 0x6609, + 0x660d, 0x6611, 0x6612, 0x6615, 0x6616, 0x661d, + /* 0x42 */ + 0x661e, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, 0x662a, + 0x662b, 0x662c, 0x662e, 0x6630, 0x6631, 0x6633, 0x6639, 0x6637, + 0x6640, 0x6645, 0x6646, 0x664a, 0x664c, 0x6651, 0x664e, 0x6657, + 0x6658, 0x6659, 0x665b, 0x665c, 0x6660, 0x6661, 0x66fb, 0x666a, + 0x666b, 0x666c, 0x667e, 0x6673, 0x6675, 0x667f, 0x6677, 0x6678, + 0x6679, 0x667b, 0x6680, 0x667c, 0x668b, 0x668c, 0x668d, 0x6690, + 0x6692, 0x6699, 0x669a, 0x669b, 0x669c, 0x669f, 0x66a0, 0x66a4, + 0x66ad, 0x66b1, 0x66b2, 0x66b5, 0x66bb, 0x66bf, 0x66c0, 0x66c2, + 0x66c3, 0x66c8, 0x66cc, 0x66ce, 0x66cf, 0x66d4, 0x66db, 0x66df, + 0x66e8, 0x66eb, 0x66ec, 0x66ee, 0x66fa, 0x6705, 0x6707, 0x670e, + 0x6713, 0x6719, 0x671c, 0x6720, 0x6722, 0x6733, 0x673e, 0x6745, + 0x6747, 0x6748, 0x674c, 0x6754, 0x6755, 0x675d, + /* 0x43 */ + 0x6766, 0x676c, 0x676e, 0x6774, 0x6776, 0x677b, 0x6781, 0x6784, + 0x678e, 0x678f, 0x6791, 0x6793, 0x6796, 0x6798, 0x6799, 0x679b, + 0x67b0, 0x67b1, 0x67b2, 0x67b5, 0x67bb, 0x67bc, 0x67bd, 0x67f9, + 0x67c0, 0x67c2, 0x67c3, 0x67c5, 0x67c8, 0x67c9, 0x67d2, 0x67d7, + 0x67d9, 0x67dc, 0x67e1, 0x67e6, 0x67f0, 0x67f2, 0x67f6, 0x67f7, + 0x6852, 0x6814, 0x6819, 0x681d, 0x681f, 0x6828, 0x6827, 0x682c, + 0x682d, 0x682f, 0x6830, 0x6831, 0x6833, 0x683b, 0x683f, 0x6844, + 0x6845, 0x684a, 0x684c, 0x6855, 0x6857, 0x6858, 0x685b, 0x686b, + 0x686e, 0x686f, 0x6870, 0x6871, 0x6872, 0x6875, 0x6879, 0x687a, + 0x687b, 0x687c, 0x6882, 0x6884, 0x6886, 0x6888, 0x6896, 0x6898, + 0x689a, 0x689c, 0x68a1, 0x68a3, 0x68a5, 0x68a9, 0x68aa, 0x68ae, + 0x68b2, 0x68bb, 0x68c5, 0x68c8, 0x68cc, 0x68cf, + /* 0x44 */ + 0x68d0, 0x68d1, 0x68d3, 0x68d6, 0x68d9, 0x68dc, 0x68dd, 0x68e5, + 0x68e8, 0x68ea, 0x68eb, 0x68ec, 0x68ed, 0x68f0, 0x68f1, 0x68f5, + 0x68f6, 0x68fb, 0x68fc, 0x68fd, 0x6906, 0x6909, 0x690a, 0x6910, + 0x6911, 0x6913, 0x6916, 0x6917, 0x6931, 0x6933, 0x6935, 0x6938, + 0x693b, 0x6942, 0x6945, 0x6949, 0x694e, 0x6957, 0x695b, 0x6963, + 0x6964, 0x6965, 0x6966, 0x6968, 0x6969, 0x696c, 0x6970, 0x6971, + 0x6972, 0x697a, 0x697b, 0x697f, 0x6980, 0x698d, 0x6992, 0x6996, + 0x6998, 0x69a1, 0x69a5, 0x69a6, 0x69a8, 0x69ab, 0x69ad, 0x69af, + 0x69b7, 0x69b8, 0x69ba, 0x69bc, 0x69c5, 0x69c8, 0x69d1, 0x69d6, + 0x69d7, 0x69e2, 0x69e5, 0x69ee, 0x69ef, 0x69f1, 0x69f3, 0x69f5, + 0x69fe, 0x6a00, 0x6a01, 0x6a03, 0x6a0f, 0x6a11, 0x6a15, 0x6a1a, + 0x6a1d, 0x6a20, 0x6a24, 0x6a28, 0x6a30, 0x6a32, + /* 0x45 */ + 0x6a34, 0x6a37, 0x6a3b, 0x6a3e, 0x6a3f, 0x6a45, 0x6a46, 0x6a49, + 0x6a4a, 0x6a4e, 0x6a50, 0x6a51, 0x6a52, 0x6a55, 0x6a56, 0x6a5b, + 0x6a64, 0x6a67, 0x6a6a, 0x6a71, 0x6a73, 0x6a7e, 0x6a81, 0x6a83, + 0x6a86, 0x6a87, 0x6a89, 0x6a8b, 0x6a91, 0x6a9b, 0x6a9d, 0x6a9e, + 0x6a9f, 0x6aa5, 0x6aab, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab4, 0x6abd, + 0x6abe, 0x6abf, 0x6ac6, 0x6ac9, 0x6ac8, 0x6acc, 0x6ad0, 0x6ad4, + 0x6ad5, 0x6ad6, 0x6adc, 0x6add, 0x6ae4, 0x6ae7, 0x6aec, 0x6af0, + 0x6af1, 0x6af2, 0x6afc, 0x6afd, 0x6b02, 0x6b03, 0x6b06, 0x6b07, + 0x6b09, 0x6b0f, 0x6b10, 0x6b11, 0x6b17, 0x6b1b, 0x6b1e, 0x6b24, + 0x6b28, 0x6b2b, 0x6b2c, 0x6b2f, 0x6b35, 0x6b36, 0x6b3b, 0x6b3f, + 0x6b46, 0x6b4a, 0x6b4d, 0x6b52, 0x6b56, 0x6b58, 0x6b5d, 0x6b60, + 0x6b67, 0x6b6b, 0x6b6e, 0x6b70, 0x6b75, 0x6b7d, + /* 0x46 */ + 0x6b7e, 0x6b82, 0x6b85, 0x6b97, 0x6b9b, 0x6b9f, 0x6ba0, 0x6ba2, + 0x6ba3, 0x6ba8, 0x6ba9, 0x6bac, 0x6bad, 0x6bae, 0x6bb0, 0x6bb8, + 0x6bb9, 0x6bbd, 0x6bbe, 0x6bc3, 0x6bc4, 0x6bc9, 0x6bcc, 0x6bd6, + 0x6bda, 0x6be1, 0x6be3, 0x6be6, 0x6be7, 0x6bee, 0x6bf1, 0x6bf7, + 0x6bf9, 0x6bff, 0x6c02, 0x6c04, 0x6c05, 0x6c09, 0x6c0d, 0x6c0e, + 0x6c10, 0x6c12, 0x6c19, 0x6c1f, 0x6c26, 0x6c27, 0x6c28, 0x6c2c, + 0x6c2e, 0x6c33, 0x6c35, 0x6c36, 0x6c3a, 0x6c3b, 0x6c3f, 0x6c4a, + 0x6c4b, 0x6c4d, 0x6c4f, 0x6c52, 0x6c54, 0x6c59, 0x6c5b, 0x6c5c, + 0x6c6b, 0x6c6d, 0x6c6f, 0x6c74, 0x6c76, 0x6c78, 0x6c79, 0x6c7b, + 0x6c85, 0x6c86, 0x6c87, 0x6c89, 0x6c94, 0x6c95, 0x6c97, 0x6c98, + 0x6c9c, 0x6c9f, 0x6cb0, 0x6cb2, 0x6cb4, 0x6cc2, 0x6cc6, 0x6ccd, + 0x6ccf, 0x6cd0, 0x6cd1, 0x6cd2, 0x6cd4, 0x6cd6, + /* 0x47 */ + 0x6cda, 0x6cdc, 0x6ce0, 0x6ce7, 0x6ce9, 0x6ceb, 0x6cec, 0x6cee, + 0x6cf2, 0x6cf4, 0x6d04, 0x6d07, 0x6d0a, 0x6d0e, 0x6d0f, 0x6d11, + 0x6d13, 0x6d1a, 0x6d26, 0x6d27, 0x6d28, 0x6c67, 0x6d2e, 0x6d2f, + 0x6d31, 0x6d39, 0x6d3c, 0x6d3f, 0x6d57, 0x6d5e, 0x6d5f, 0x6d61, + 0x6d65, 0x6d67, 0x6d6f, 0x6d70, 0x6d7c, 0x6d82, 0x6d87, 0x6d91, + 0x6d92, 0x6d94, 0x6d96, 0x6d97, 0x6d98, 0x6daa, 0x6dac, 0x6db4, + 0x6db7, 0x6db9, 0x6dbd, 0x6dbf, 0x6dc4, 0x6dc8, 0x6dca, 0x6dce, + 0x6dcf, 0x6dd6, 0x6ddb, 0x6ddd, 0x6ddf, 0x6de0, 0x6de2, 0x6de5, + 0x6de9, 0x6def, 0x6df0, 0x6df4, 0x6df6, 0x6dfc, 0x6e00, 0x6e04, + 0x6e1e, 0x6e22, 0x6e27, 0x6e32, 0x6e36, 0x6e39, 0x6e3b, 0x6e3c, + 0x6e44, 0x6e45, 0x6e48, 0x6e49, 0x6e4b, 0x6e4f, 0x6e51, 0x6e52, + 0x6e53, 0x6e54, 0x6e57, 0x6e5c, 0x6e5d, 0x6e5e, + /* 0x48 */ + 0x6e62, 0x6e63, 0x6e68, 0x6e73, 0x6e7b, 0x6e7d, 0x6e8d, 0x6e93, + 0x6e99, 0x6ea0, 0x6ea7, 0x6ead, 0x6eae, 0x6eb1, 0x6eb3, 0x6ebb, + 0x6ebf, 0x6ec0, 0x6ec1, 0x6ec3, 0x6ec7, 0x6ec8, 0x6eca, 0x6ecd, + 0x6ece, 0x6ecf, 0x6eeb, 0x6eed, 0x6eee, 0x6ef9, 0x6efb, 0x6efd, + 0x6f04, 0x6f08, 0x6f0a, 0x6f0c, 0x6f0d, 0x6f16, 0x6f18, 0x6f1a, + 0x6f1b, 0x6f26, 0x6f29, 0x6f2a, 0x6f2f, 0x6f30, 0x6f33, 0x6f36, + 0x6f3b, 0x6f3c, 0x6f2d, 0x6f4f, 0x6f51, 0x6f52, 0x6f53, 0x6f57, + 0x6f59, 0x6f5a, 0x6f5d, 0x6f5e, 0x6f61, 0x6f62, 0x6f68, 0x6f6c, + 0x6f7d, 0x6f7e, 0x6f83, 0x6f87, 0x6f88, 0x6f8b, 0x6f8c, 0x6f8d, + 0x6f90, 0x6f92, 0x6f93, 0x6f94, 0x6f96, 0x6f9a, 0x6f9f, 0x6fa0, + 0x6fa5, 0x6fa6, 0x6fa7, 0x6fa8, 0x6fae, 0x6faf, 0x6fb0, 0x6fb5, + 0x6fb6, 0x6fbc, 0x6fc5, 0x6fc7, 0x6fc8, 0x6fca, + /* 0x49 */ + 0x6fda, 0x6fde, 0x6fe8, 0x6fe9, 0x6ff0, 0x6ff5, 0x6ff9, 0x6ffc, + 0x6ffd, 0x7000, 0x7005, 0x7006, 0x7007, 0x700d, 0x7017, 0x7020, + 0x7023, 0x702f, 0x7034, 0x7037, 0x7039, 0x703c, 0x7043, 0x7044, + 0x7048, 0x7049, 0x704a, 0x704b, 0x7054, 0x7055, 0x705d, 0x705e, + 0x704e, 0x7064, 0x7065, 0x706c, 0x706e, 0x7075, 0x7076, 0x707e, + 0x7081, 0x7085, 0x7086, 0x7094, 0x7095, 0x7096, 0x7097, 0x7098, + 0x709b, 0x70a4, 0x70ab, 0x70b0, 0x70b1, 0x70b4, 0x70b7, 0x70ca, + 0x70d1, 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d8, 0x70dc, 0x70e4, + 0x70fa, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710b, 0x710c, + 0x710f, 0x711e, 0x7120, 0x712b, 0x712d, 0x712f, 0x7130, 0x7131, + 0x7138, 0x7141, 0x7145, 0x7146, 0x7147, 0x714a, 0x714b, 0x7150, + 0x7152, 0x7157, 0x715a, 0x715c, 0x715e, 0x7160, + /* 0x4a */ + 0x7168, 0x7179, 0x7180, 0x7185, 0x7187, 0x718c, 0x7192, 0x719a, + 0x719b, 0x71a0, 0x71a2, 0x71af, 0x71b0, 0x71b2, 0x71b3, 0x71ba, + 0x71bf, 0x71c0, 0x71c1, 0x71c4, 0x71cb, 0x71cc, 0x71d3, 0x71d6, + 0x71d9, 0x71da, 0x71dc, 0x71f8, 0x71fe, 0x7200, 0x7207, 0x7208, + 0x7209, 0x7213, 0x7217, 0x721a, 0x721d, 0x721f, 0x7224, 0x722b, + 0x722f, 0x7234, 0x7238, 0x7239, 0x7241, 0x7242, 0x7243, 0x7245, + 0x724e, 0x724f, 0x7250, 0x7253, 0x7255, 0x7256, 0x725a, 0x725c, + 0x725e, 0x7260, 0x7263, 0x7268, 0x726b, 0x726e, 0x726f, 0x7271, + 0x7277, 0x7278, 0x727b, 0x727c, 0x727f, 0x7284, 0x7289, 0x728d, + 0x728e, 0x7293, 0x729b, 0x72a8, 0x72ad, 0x72ae, 0x72b1, 0x72b4, + 0x72be, 0x72c1, 0x72c7, 0x72c9, 0x72cc, 0x72d5, 0x72d6, 0x72d8, + 0x72df, 0x72e5, 0x72f3, 0x72f4, 0x72fa, 0x72fb, + /* 0x4b */ + 0x72fe, 0x7302, 0x7304, 0x7305, 0x7307, 0x730b, 0x730d, 0x7312, + 0x7313, 0x7318, 0x7319, 0x731e, 0x7322, 0x7324, 0x7327, 0x7328, + 0x732c, 0x7331, 0x7332, 0x7335, 0x733a, 0x733b, 0x733d, 0x7343, + 0x734d, 0x7350, 0x7352, 0x7356, 0x7358, 0x735d, 0x735e, 0x735f, + 0x7360, 0x7366, 0x7367, 0x7369, 0x736b, 0x736c, 0x736e, 0x736f, + 0x7371, 0x7377, 0x7379, 0x737c, 0x7380, 0x7381, 0x7383, 0x7385, + 0x7386, 0x738e, 0x7390, 0x7393, 0x7395, 0x7397, 0x7398, 0x739c, + 0x739e, 0x739f, 0x73a0, 0x73a2, 0x73a5, 0x73a6, 0x73aa, 0x73ab, + 0x73ad, 0x73b5, 0x73b7, 0x73b9, 0x73bc, 0x73bd, 0x73bf, 0x73c5, + 0x73c6, 0x73c9, 0x73cb, 0x73cc, 0x73cf, 0x73d2, 0x73d3, 0x73d6, + 0x73d9, 0x73dd, 0x73e1, 0x73e3, 0x73e6, 0x73e7, 0x73e9, 0x73f4, + 0x73f5, 0x73f7, 0x73f9, 0x73fa, 0x73fb, 0x73fd, + /* 0x4c */ + 0x73ff, 0x7400, 0x7401, 0x7404, 0x7407, 0x740a, 0x7411, 0x741a, + 0x741b, 0x7424, 0x7426, 0x7428, 0x7429, 0x742a, 0x742b, 0x742c, + 0x742d, 0x742e, 0x742f, 0x7430, 0x7431, 0x7439, 0x7440, 0x7443, + 0x7444, 0x7446, 0x7447, 0x744b, 0x744d, 0x7451, 0x7452, 0x7457, + 0x745d, 0x7462, 0x7466, 0x7467, 0x7468, 0x746b, 0x746d, 0x746e, + 0x7471, 0x7472, 0x7480, 0x7481, 0x7485, 0x7486, 0x7487, 0x7489, + 0x748f, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499, 0x749a, 0x749c, + 0x749f, 0x74a0, 0x74a1, 0x74a3, 0x74a6, 0x74a8, 0x74a9, 0x74aa, + 0x74ab, 0x74ae, 0x74af, 0x74b1, 0x74b2, 0x74b5, 0x74b9, 0x74bb, + 0x74bf, 0x74c8, 0x74c9, 0x74cc, 0x74d0, 0x74d3, 0x74d8, 0x74da, + 0x74db, 0x74de, 0x74df, 0x74e4, 0x74e8, 0x74ea, 0x74eb, 0x74ef, + 0x74f4, 0x74fa, 0x74fb, 0x74fc, 0x74ff, 0x7506, + /* 0x4d */ + 0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527, 0x7529, + 0x752a, 0x752f, 0x7536, 0x7539, 0x753d, 0x753e, 0x753f, 0x7540, + 0x7543, 0x7547, 0x7548, 0x754e, 0x7550, 0x7552, 0x7557, 0x755e, + 0x755f, 0x7561, 0x756f, 0x7571, 0x7579, 0x757a, 0x757b, 0x757c, + 0x757d, 0x757e, 0x7581, 0x7585, 0x7590, 0x7592, 0x7593, 0x7595, + 0x7599, 0x759c, 0x75a2, 0x75a4, 0x75b4, 0x75ba, 0x75bf, 0x75c0, + 0x75c1, 0x75c4, 0x75c6, 0x75cc, 0x75ce, 0x75cf, 0x75d7, 0x75dc, + 0x75df, 0x75e0, 0x75e1, 0x75e4, 0x75e7, 0x75ec, 0x75ee, 0x75ef, + 0x75f1, 0x75f9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607, 0x7608, + 0x760a, 0x760c, 0x760f, 0x7612, 0x7613, 0x7615, 0x7616, 0x7619, + 0x761b, 0x761c, 0x761d, 0x761e, 0x7623, 0x7625, 0x7626, 0x7629, + 0x762d, 0x7632, 0x7633, 0x7635, 0x7638, 0x7639, + /* 0x4e */ + 0x763a, 0x763c, 0x764a, 0x7640, 0x7641, 0x7643, 0x7644, 0x7645, + 0x7649, 0x764b, 0x7655, 0x7659, 0x765f, 0x7664, 0x7665, 0x766d, + 0x766e, 0x766f, 0x7671, 0x7674, 0x7681, 0x7685, 0x768c, 0x768d, + 0x7695, 0x769b, 0x769c, 0x769d, 0x769f, 0x76a0, 0x76a2, 0x76a3, + 0x76a4, 0x76a5, 0x76a6, 0x76a7, 0x76a8, 0x76aa, 0x76ad, 0x76bd, + 0x76c1, 0x76c5, 0x76c9, 0x76cb, 0x76cc, 0x76ce, 0x76d4, 0x76d9, + 0x76e0, 0x76e6, 0x76e8, 0x76ec, 0x76f0, 0x76f1, 0x76f6, 0x76f9, + 0x76fc, 0x7700, 0x7706, 0x770a, 0x770e, 0x7712, 0x7714, 0x7715, + 0x7717, 0x7719, 0x771a, 0x771c, 0x7722, 0x7728, 0x772d, 0x772e, + 0x772f, 0x7734, 0x7735, 0x7736, 0x7739, 0x773d, 0x773e, 0x7742, + 0x7745, 0x7746, 0x774a, 0x774d, 0x774e, 0x774f, 0x7752, 0x7756, + 0x7757, 0x775c, 0x775e, 0x775f, 0x7760, 0x7762, + /* 0x4f */ + 0x7764, 0x7767, 0x776a, 0x776c, 0x7770, 0x7772, 0x7773, 0x7774, + 0x777a, 0x777d, 0x7780, 0x7784, 0x778c, 0x778d, 0x7794, 0x7795, + 0x7796, 0x779a, 0x779f, 0x77a2, 0x77a7, 0x77aa, 0x77ae, 0x77af, + 0x77b1, 0x77b5, 0x77be, 0x77c3, 0x77c9, 0x77d1, 0x77d2, 0x77d5, + 0x77d9, 0x77de, 0x77df, 0x77e0, 0x77e4, 0x77e6, 0x77ea, 0x77ec, + 0x77f0, 0x77f1, 0x77f4, 0x77f8, 0x77fb, 0x7805, 0x7806, 0x7809, + 0x780d, 0x780e, 0x7811, 0x781d, 0x7821, 0x7822, 0x7823, 0x782d, + 0x782e, 0x7830, 0x7835, 0x7837, 0x7843, 0x7844, 0x7847, 0x7848, + 0x784c, 0x784e, 0x7852, 0x785c, 0x785e, 0x7860, 0x7861, 0x7863, + 0x7864, 0x7868, 0x786a, 0x786e, 0x787a, 0x787e, 0x788a, 0x788f, + 0x7894, 0x7898, 0x78a1, 0x789d, 0x789e, 0x789f, 0x78a4, 0x78a8, + 0x78ac, 0x78ad, 0x78b0, 0x78b1, 0x78b2, 0x78b3, + /* 0x50 */ + 0x78bb, 0x78bd, 0x78bf, 0x78c7, 0x78c8, 0x78c9, 0x78cc, 0x78ce, + 0x78d2, 0x78d3, 0x78d5, 0x78d6, 0x78e4, 0x78db, 0x78df, 0x78e0, + 0x78e1, 0x78e6, 0x78ea, 0x78f2, 0x78f3, 0x7900, 0x78f6, 0x78f7, + 0x78fa, 0x78fb, 0x78ff, 0x7906, 0x790c, 0x7910, 0x791a, 0x791c, + 0x791e, 0x791f, 0x7920, 0x7925, 0x7927, 0x7929, 0x792d, 0x7931, + 0x7934, 0x7935, 0x793b, 0x793d, 0x793f, 0x7944, 0x7945, 0x7946, + 0x794a, 0x794b, 0x794f, 0x7951, 0x7954, 0x7958, 0x795b, 0x795c, + 0x7967, 0x7969, 0x796b, 0x7972, 0x7979, 0x797b, 0x797c, 0x797e, + 0x798b, 0x798c, 0x7991, 0x7993, 0x7994, 0x7995, 0x7996, 0x7998, + 0x799b, 0x799c, 0x79a1, 0x79a8, 0x79a9, 0x79ab, 0x79af, 0x79b1, + 0x79b4, 0x79b8, 0x79bb, 0x79c2, 0x79c4, 0x79c7, 0x79c8, 0x79ca, + 0x79cf, 0x79d4, 0x79d6, 0x79da, 0x79dd, 0x79de, + /* 0x51 */ + 0x79e0, 0x79e2, 0x79e5, 0x79ea, 0x79eb, 0x79ed, 0x79f1, 0x79f8, + 0x79fc, 0x7a02, 0x7a03, 0x7a07, 0x7a09, 0x7a0a, 0x7a0c, 0x7a11, + 0x7a15, 0x7a1b, 0x7a1e, 0x7a21, 0x7a27, 0x7a2b, 0x7a2d, 0x7a2f, + 0x7a30, 0x7a34, 0x7a35, 0x7a38, 0x7a39, 0x7a3a, 0x7a44, 0x7a45, + 0x7a47, 0x7a48, 0x7a4c, 0x7a55, 0x7a56, 0x7a59, 0x7a5c, 0x7a5d, + 0x7a5f, 0x7a60, 0x7a65, 0x7a67, 0x7a6a, 0x7a6d, 0x7a75, 0x7a78, + 0x7a7e, 0x7a80, 0x7a82, 0x7a85, 0x7a86, 0x7a8a, 0x7a8b, 0x7a90, + 0x7a91, 0x7a94, 0x7a9e, 0x7aa0, 0x7aa3, 0x7aac, 0x7ab3, 0x7ab5, + 0x7ab9, 0x7abb, 0x7abc, 0x7ac6, 0x7ac9, 0x7acc, 0x7ace, 0x7ad1, + 0x7adb, 0x7ae8, 0x7ae9, 0x7aeb, 0x7aec, 0x7af1, 0x7af4, 0x7afb, + 0x7afd, 0x7afe, 0x7b07, 0x7b14, 0x7b1f, 0x7b23, 0x7b27, 0x7b29, + 0x7b2a, 0x7b2b, 0x7b2d, 0x7b2e, 0x7b2f, 0x7b30, + /* 0x52 */ + 0x7b31, 0x7b34, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b47, 0x7b4e, + 0x7b55, 0x7b60, 0x7b64, 0x7b66, 0x7b69, 0x7b6a, 0x7b6d, 0x7b6f, + 0x7b72, 0x7b73, 0x7b77, 0x7b84, 0x7b89, 0x7b8e, 0x7b90, 0x7b91, + 0x7b96, 0x7b9b, 0x7b9e, 0x7ba0, 0x7ba5, 0x7bac, 0x7baf, 0x7bb0, + 0x7bb2, 0x7bb5, 0x7bb6, 0x7bba, 0x7bbb, 0x7bbc, 0x7bbd, 0x7bc2, + 0x7bc5, 0x7bc8, 0x7bca, 0x7bd4, 0x7bd6, 0x7bd7, 0x7bd9, 0x7bda, + 0x7bdb, 0x7be8, 0x7bea, 0x7bf2, 0x7bf4, 0x7bf5, 0x7bf8, 0x7bf9, + 0x7bfa, 0x7bfc, 0x7bfe, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c06, + 0x7c09, 0x7c0b, 0x7c0c, 0x7c0e, 0x7c0f, 0x7c19, 0x7c1b, 0x7c20, + 0x7c25, 0x7c26, 0x7c28, 0x7c2c, 0x7c31, 0x7c33, 0x7c34, 0x7c36, + 0x7c39, 0x7c3a, 0x7c46, 0x7c4a, 0x7c55, 0x7c51, 0x7c52, 0x7c53, + 0x7c59, 0x7c5a, 0x7c5b, 0x7c5c, 0x7c5d, 0x7c5e, + /* 0x53 */ + 0x7c61, 0x7c63, 0x7c67, 0x7c69, 0x7c6d, 0x7c6e, 0x7c70, 0x7c72, + 0x7c79, 0x7c7c, 0x7c7d, 0x7c86, 0x7c87, 0x7c8f, 0x7c94, 0x7c9e, + 0x7ca0, 0x7ca6, 0x7cb0, 0x7cb6, 0x7cb7, 0x7cba, 0x7cbb, 0x7cbc, + 0x7cbf, 0x7cc4, 0x7cc7, 0x7cc8, 0x7cc9, 0x7ccd, 0x7ccf, 0x7cd3, + 0x7cd4, 0x7cd5, 0x7cd7, 0x7cd9, 0x7cda, 0x7cdd, 0x7ce6, 0x7ce9, + 0x7ceb, 0x7cf5, 0x7d03, 0x7d07, 0x7d08, 0x7d09, 0x7d0f, 0x7d11, + 0x7d12, 0x7d13, 0x7d16, 0x7d1d, 0x7d1e, 0x7d23, 0x7d26, 0x7d2a, + 0x7d2d, 0x7d31, 0x7d3c, 0x7d3d, 0x7d3e, 0x7d40, 0x7d41, 0x7d47, + 0x7d48, 0x7d4d, 0x7d51, 0x7d53, 0x7d57, 0x7d59, 0x7d5a, 0x7d5c, + 0x7d5d, 0x7d65, 0x7d67, 0x7d6a, 0x7d70, 0x7d78, 0x7d7a, 0x7d7b, + 0x7d7f, 0x7d81, 0x7d82, 0x7d83, 0x7d85, 0x7d86, 0x7d88, 0x7d8b, + 0x7d8c, 0x7d8d, 0x7d91, 0x7d96, 0x7d97, 0x7d9d, + /* 0x54 */ + 0x7d9e, 0x7da6, 0x7da7, 0x7daa, 0x7db3, 0x7db6, 0x7db7, 0x7db9, + 0x7dc2, 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dcc, 0x7dcd, 0x7dce, + 0x7dd7, 0x7dd9, 0x7e00, 0x7de2, 0x7de5, 0x7de6, 0x7dea, 0x7deb, + 0x7ded, 0x7df1, 0x7df5, 0x7df6, 0x7df9, 0x7dfa, 0x7e08, 0x7e10, + 0x7e11, 0x7e15, 0x7e17, 0x7e1c, 0x7e1d, 0x7e20, 0x7e27, 0x7e28, + 0x7e2c, 0x7e2d, 0x7e2f, 0x7e33, 0x7e36, 0x7e3f, 0x7e44, 0x7e45, + 0x7e47, 0x7e4e, 0x7e50, 0x7e52, 0x7e58, 0x7e5f, 0x7e61, 0x7e62, + 0x7e65, 0x7e6b, 0x7e6e, 0x7e6f, 0x7e73, 0x7e78, 0x7e7e, 0x7e81, + 0x7e86, 0x7e87, 0x7e8a, 0x7e8d, 0x7e91, 0x7e95, 0x7e98, 0x7e9a, + 0x7e9d, 0x7e9e, 0x7f3c, 0x7f3b, 0x7f3d, 0x7f3e, 0x7f3f, 0x7f43, + 0x7f44, 0x7f47, 0x7f4f, 0x7f52, 0x7f53, 0x7f5b, 0x7f5c, 0x7f5d, + 0x7f61, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f6d, + /* 0x55 */ + 0x7f71, 0x7f7d, 0x7f7e, 0x7f7f, 0x7f80, 0x7f8b, 0x7f8d, 0x7f8f, + 0x7f90, 0x7f91, 0x7f96, 0x7f97, 0x7f9c, 0x7fa1, 0x7fa2, 0x7fa6, + 0x7faa, 0x7fad, 0x7fb4, 0x7fbc, 0x7fbf, 0x7fc0, 0x7fc3, 0x7fc8, + 0x7fce, 0x7fcf, 0x7fdb, 0x7fdf, 0x7fe3, 0x7fe5, 0x7fe8, 0x7fec, + 0x7fee, 0x7fef, 0x7ff2, 0x7ffa, 0x7ffd, 0x7ffe, 0x7fff, 0x8007, + 0x8008, 0x800a, 0x800d, 0x800e, 0x800f, 0x8011, 0x8013, 0x8014, + 0x8016, 0x801d, 0x801e, 0x801f, 0x8020, 0x8024, 0x8026, 0x802c, + 0x802e, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803a, 0x803c, + 0x803e, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806d, 0x8071, + 0x8075, 0x8081, 0x8088, 0x808e, 0x809c, 0x809e, 0x80a6, 0x80a7, + 0x80ab, 0x80b8, 0x80b9, 0x80c8, 0x80cd, 0x80cf, 0x80d2, 0x80d4, + 0x80d5, 0x80d7, 0x80d8, 0x80e0, 0x80ed, 0x80ee, + /* 0x56 */ + 0x80f0, 0x80f2, 0x80f3, 0x80f6, 0x80f9, 0x80fa, 0x80fe, 0x8103, + 0x810b, 0x8116, 0x8117, 0x8118, 0x811c, 0x811e, 0x8120, 0x8124, + 0x8127, 0x812c, 0x8130, 0x8135, 0x813a, 0x813c, 0x8145, 0x8147, + 0x814a, 0x814c, 0x8152, 0x8157, 0x8160, 0x8161, 0x8167, 0x8168, + 0x8169, 0x816d, 0x816f, 0x8177, 0x8181, 0x8190, 0x8184, 0x8185, + 0x8186, 0x818b, 0x818e, 0x8196, 0x8198, 0x819b, 0x819e, 0x81a2, + 0x81ae, 0x81b2, 0x81b4, 0x81bb, 0x81cb, 0x81c3, 0x81c5, 0x81ca, + 0x81ce, 0x81cf, 0x81d5, 0x81d7, 0x81db, 0x81dd, 0x81de, 0x81e1, + 0x81e4, 0x81eb, 0x81ec, 0x81f0, 0x81f1, 0x81f2, 0x81f5, 0x81f6, + 0x81f8, 0x81f9, 0x81fd, 0x81ff, 0x8200, 0x8203, 0x820f, 0x8213, + 0x8214, 0x8219, 0x821a, 0x821d, 0x8221, 0x8222, 0x8228, 0x8232, + 0x8234, 0x823a, 0x8243, 0x8244, 0x8245, 0x8246, + /* 0x57 */ + 0x824b, 0x824e, 0x824f, 0x8251, 0x8256, 0x825c, 0x8260, 0x8263, + 0x8267, 0x826d, 0x8274, 0x827b, 0x827d, 0x827f, 0x8280, 0x8281, + 0x8283, 0x8284, 0x8287, 0x8289, 0x828a, 0x828e, 0x8291, 0x8294, + 0x8296, 0x8298, 0x829a, 0x829b, 0x82a0, 0x82a1, 0x82a3, 0x82a4, + 0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ae, 0x82b0, 0x82b2, 0x82b4, + 0x82b7, 0x82ba, 0x82bc, 0x82be, 0x82bf, 0x82c6, 0x82d0, 0x82d5, + 0x82da, 0x82e0, 0x82e2, 0x82e4, 0x82e8, 0x82ea, 0x82ed, 0x82ef, + 0x82f6, 0x82f7, 0x82fd, 0x82fe, 0x8300, 0x8301, 0x8307, 0x8308, + 0x830a, 0x830b, 0x8354, 0x831b, 0x831d, 0x831e, 0x831f, 0x8321, + 0x8322, 0x832c, 0x832d, 0x832e, 0x8330, 0x8333, 0x8337, 0x833a, + 0x833c, 0x833d, 0x8342, 0x8343, 0x8344, 0x8347, 0x834d, 0x834e, + 0x8351, 0x8355, 0x8356, 0x8357, 0x8370, 0x8378, + /* 0x58 */ + 0x837d, 0x837f, 0x8380, 0x8382, 0x8384, 0x8386, 0x838d, 0x8392, + 0x8394, 0x8395, 0x8398, 0x8399, 0x839b, 0x839c, 0x839d, 0x83a6, + 0x83a7, 0x83a9, 0x83ac, 0x83be, 0x83bf, 0x83c0, 0x83c7, 0x83c9, + 0x83cf, 0x83d0, 0x83d1, 0x83d4, 0x83dd, 0x8353, 0x83e8, 0x83ea, + 0x83f6, 0x83f8, 0x83f9, 0x83fc, 0x8401, 0x8406, 0x840a, 0x840f, + 0x8411, 0x8415, 0x8419, 0x83ad, 0x842f, 0x8439, 0x8445, 0x8447, + 0x8448, 0x844a, 0x844d, 0x844f, 0x8451, 0x8452, 0x8456, 0x8458, + 0x8459, 0x845a, 0x845c, 0x8460, 0x8464, 0x8465, 0x8467, 0x846a, + 0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847c, 0x847d, 0x8481, + 0x8485, 0x8492, 0x8493, 0x8495, 0x849e, 0x84a6, 0x84a8, 0x84a9, + 0x84aa, 0x84af, 0x84b1, 0x84b4, 0x84ba, 0x84bd, 0x84be, 0x84c0, + 0x84c2, 0x84c7, 0x84c8, 0x84cc, 0x84cf, 0x84d3, + /* 0x59 */ + 0x84dc, 0x84e7, 0x84ea, 0x84ef, 0x84f0, 0x84f1, 0x84f2, 0x84f7, + 0x8532, 0x84fa, 0x84fb, 0x84fd, 0x8502, 0x8503, 0x8507, 0x850c, + 0x850e, 0x8510, 0x851c, 0x851e, 0x8522, 0x8523, 0x8524, 0x8525, + 0x8527, 0x852a, 0x852b, 0x852f, 0x8533, 0x8534, 0x8536, 0x853f, + 0x8546, 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8556, 0x8559, + 0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561, 0x8562, 0x8564, + 0x856b, 0x856f, 0x8579, 0x857a, 0x857b, 0x857d, 0x857f, 0x8581, + 0x8585, 0x8586, 0x8589, 0x858b, 0x858c, 0x858f, 0x8593, 0x8598, + 0x859d, 0x859f, 0x85a0, 0x85a2, 0x85a5, 0x85a7, 0x85b4, 0x85b6, + 0x85b7, 0x85b8, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c2, 0x85c7, + 0x85ca, 0x85cb, 0x85ce, 0x85ad, 0x85d8, 0x85da, 0x85df, 0x85e0, + 0x85e6, 0x85e8, 0x85ed, 0x85f3, 0x85f6, 0x85fc, + /* 0x5a */ + 0x85ff, 0x8600, 0x8604, 0x8605, 0x860d, 0x860e, 0x8610, 0x8611, + 0x8612, 0x8618, 0x8619, 0x861b, 0x861e, 0x8621, 0x8627, 0x8629, + 0x8636, 0x8638, 0x863a, 0x863c, 0x863d, 0x8640, 0x8642, 0x8646, + 0x8652, 0x8653, 0x8656, 0x8657, 0x8658, 0x8659, 0x865d, 0x8660, + 0x8661, 0x8662, 0x8663, 0x8664, 0x8669, 0x866c, 0x866f, 0x8675, + 0x8676, 0x8677, 0x867a, 0x868d, 0x8691, 0x8696, 0x8698, 0x869a, + 0x869c, 0x86a1, 0x86a6, 0x86a7, 0x86a8, 0x86ad, 0x86b1, 0x86b3, + 0x86b4, 0x86b5, 0x86b7, 0x86b8, 0x86b9, 0x86bf, 0x86c0, 0x86c1, + 0x86c3, 0x86c5, 0x86d1, 0x86d2, 0x86d5, 0x86d7, 0x86da, 0x86dc, + 0x86e0, 0x86e3, 0x86e5, 0x86e7, 0x8688, 0x86fa, 0x86fc, 0x86fd, + 0x8704, 0x8705, 0x8707, 0x870b, 0x870e, 0x870f, 0x8710, 0x8713, + 0x8714, 0x8719, 0x871e, 0x871f, 0x8721, 0x8723, + /* 0x5b */ + 0x8728, 0x872e, 0x872f, 0x8731, 0x8732, 0x8739, 0x873a, 0x873c, + 0x873d, 0x873e, 0x8740, 0x8743, 0x8745, 0x874d, 0x8758, 0x875d, + 0x8761, 0x8764, 0x8765, 0x876f, 0x8771, 0x8772, 0x877b, 0x8783, + 0x8784, 0x8785, 0x8786, 0x8787, 0x8788, 0x8789, 0x878b, 0x878c, + 0x8790, 0x8793, 0x8795, 0x8797, 0x8798, 0x8799, 0x879e, 0x87a0, + 0x87a3, 0x87a7, 0x87ac, 0x87ad, 0x87ae, 0x87b1, 0x87b5, 0x87be, + 0x87bf, 0x87c1, 0x87c8, 0x87c9, 0x87ca, 0x87ce, 0x87d5, 0x87d6, + 0x87d9, 0x87da, 0x87dc, 0x87df, 0x87e2, 0x87e3, 0x87e4, 0x87ea, + 0x87eb, 0x87ed, 0x87f1, 0x87f3, 0x87f8, 0x87fa, 0x87ff, 0x8801, + 0x8803, 0x8806, 0x8809, 0x880a, 0x880b, 0x8810, 0x8819, 0x8812, + 0x8813, 0x8814, 0x8818, 0x881a, 0x881b, 0x881c, 0x881e, 0x881f, + 0x8828, 0x882d, 0x882e, 0x8830, 0x8832, 0x8835, + /* 0x5c */ + 0x883a, 0x883c, 0x8841, 0x8843, 0x8845, 0x8848, 0x8849, 0x884a, + 0x884b, 0x884e, 0x8851, 0x8855, 0x8856, 0x8858, 0x885a, 0x885c, + 0x885f, 0x8860, 0x8864, 0x8869, 0x8871, 0x8879, 0x887b, 0x8880, + 0x8898, 0x889a, 0x889b, 0x889c, 0x889f, 0x88a0, 0x88a8, 0x88aa, + 0x88ba, 0x88bd, 0x88be, 0x88c0, 0x88ca, 0x88cb, 0x88cc, 0x88cd, + 0x88ce, 0x88d1, 0x88d2, 0x88d3, 0x88db, 0x88de, 0x88e7, 0x88ef, + 0x88f0, 0x88f1, 0x88f5, 0x88f7, 0x8901, 0x8906, 0x890d, 0x890e, + 0x890f, 0x8915, 0x8916, 0x8918, 0x8919, 0x891a, 0x891c, 0x8920, + 0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932, 0x8935, 0x8939, + 0x893a, 0x893e, 0x8940, 0x8942, 0x8945, 0x8946, 0x8949, 0x894f, + 0x8952, 0x8957, 0x895a, 0x895b, 0x895c, 0x8961, 0x8962, 0x8963, + 0x896b, 0x896e, 0x8970, 0x8973, 0x8975, 0x897a, + /* 0x5d */ + 0x897b, 0x897c, 0x897d, 0x8989, 0x898d, 0x8990, 0x8994, 0x8995, + 0x899b, 0x899c, 0x899f, 0x89a0, 0x89a5, 0x89b0, 0x89b4, 0x89b5, + 0x89b6, 0x89b7, 0x89bc, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8, + 0x89e5, 0x89e9, 0x89eb, 0x89ed, 0x89f1, 0x89f3, 0x89f6, 0x89f9, + 0x89fd, 0x89ff, 0x8a04, 0x8a05, 0x8a07, 0x8a0f, 0x8a11, 0x8a12, + 0x8a14, 0x8a15, 0x8a1e, 0x8a20, 0x8a22, 0x8a24, 0x8a26, 0x8a2b, + 0x8a2c, 0x8a2f, 0x8a35, 0x8a37, 0x8a3d, 0x8a3e, 0x8a40, 0x8a43, + 0x8a45, 0x8a47, 0x8a49, 0x8a4d, 0x8a4e, 0x8a53, 0x8a56, 0x8a57, + 0x8a58, 0x8a5c, 0x8a5d, 0x8a61, 0x8a65, 0x8a67, 0x8a75, 0x8a76, + 0x8a77, 0x8a79, 0x8a7a, 0x8a7b, 0x8a7e, 0x8a7f, 0x8a80, 0x8a83, + 0x8a86, 0x8a8b, 0x8a8f, 0x8a90, 0x8a92, 0x8a96, 0x8a97, 0x8a99, + 0x8a9f, 0x8aa7, 0x8aa9, 0x8aae, 0x8aaf, 0x8ab3, + /* 0x5e */ + 0x8ab6, 0x8ab7, 0x8abb, 0x8abe, 0x8ac3, 0x8ac6, 0x8ac8, 0x8ac9, + 0x8aca, 0x8ad1, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad7, 0x8add, 0x8adf, + 0x8aec, 0x8af0, 0x8af4, 0x8af5, 0x8af6, 0x8afc, 0x8aff, 0x8b05, + 0x8b06, 0x8b0b, 0x8b11, 0x8b1c, 0x8b1e, 0x8b1f, 0x8b0a, 0x8b2d, + 0x8b30, 0x8b37, 0x8b3c, 0x8b42, 0x8b43, 0x8b44, 0x8b45, 0x8b46, + 0x8b48, 0x8b52, 0x8b53, 0x8b54, 0x8b59, 0x8b4d, 0x8b5e, 0x8b63, + 0x8b6d, 0x8b76, 0x8b78, 0x8b79, 0x8b7c, 0x8b7e, 0x8b81, 0x8b84, + 0x8b85, 0x8b8b, 0x8b8d, 0x8b8f, 0x8b94, 0x8b95, 0x8b9c, 0x8b9e, + 0x8b9f, 0x8c38, 0x8c39, 0x8c3d, 0x8c3e, 0x8c45, 0x8c47, 0x8c49, + 0x8c4b, 0x8c4f, 0x8c51, 0x8c53, 0x8c54, 0x8c57, 0x8c58, 0x8c5b, + 0x8c5d, 0x8c59, 0x8c63, 0x8c64, 0x8c66, 0x8c68, 0x8c69, 0x8c6d, + 0x8c73, 0x8c75, 0x8c76, 0x8c7b, 0x8c7e, 0x8c86, + /* 0x5f */ + 0x8c87, 0x8c8b, 0x8c90, 0x8c92, 0x8c93, 0x8c99, 0x8c9b, 0x8c9c, + 0x8ca4, 0x8cb9, 0x8cba, 0x8cc5, 0x8cc6, 0x8cc9, 0x8ccb, 0x8ccf, + 0x8cd6, 0x8cd5, 0x8cd9, 0x8cdd, 0x8ce1, 0x8ce8, 0x8cec, 0x8cef, + 0x8cf0, 0x8cf2, 0x8cf5, 0x8cf7, 0x8cf8, 0x8cfe, 0x8cff, 0x8d01, + 0x8d03, 0x8d09, 0x8d12, 0x8d17, 0x8d1b, 0x8d65, 0x8d69, 0x8d6c, + 0x8d6e, 0x8d7f, 0x8d82, 0x8d84, 0x8d88, 0x8d8d, 0x8d90, 0x8d91, + 0x8d95, 0x8d9e, 0x8d9f, 0x8da0, 0x8da6, 0x8dab, 0x8dac, 0x8daf, + 0x8db2, 0x8db5, 0x8db7, 0x8db9, 0x8dbb, 0x8dc0, 0x8dc5, 0x8dc6, + 0x8dc7, 0x8dc8, 0x8dca, 0x8dce, 0x8dd1, 0x8dd4, 0x8dd5, 0x8dd7, + 0x8dd9, 0x8de4, 0x8de5, 0x8de7, 0x8dec, 0x8df0, 0x8dbc, 0x8df1, + 0x8df2, 0x8df4, 0x8dfd, 0x8e01, 0x8e04, 0x8e05, 0x8e06, 0x8e0b, + 0x8e11, 0x8e14, 0x8e16, 0x8e20, 0x8e21, 0x8e22, + /* 0x60 */ + 0x8e23, 0x8e26, 0x8e27, 0x8e31, 0x8e33, 0x8e36, 0x8e37, 0x8e38, + 0x8e39, 0x8e3d, 0x8e40, 0x8e41, 0x8e4b, 0x8e4d, 0x8e4e, 0x8e4f, + 0x8e54, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e61, 0x8e62, 0x8e69, + 0x8e6c, 0x8e6d, 0x8e6f, 0x8e70, 0x8e71, 0x8e79, 0x8e7a, 0x8e7b, + 0x8e82, 0x8e83, 0x8e89, 0x8e90, 0x8e92, 0x8e95, 0x8e9a, 0x8e9b, + 0x8e9d, 0x8e9e, 0x8ea2, 0x8ea7, 0x8ea9, 0x8ead, 0x8eae, 0x8eb3, + 0x8eb5, 0x8eba, 0x8ebb, 0x8ec0, 0x8ec1, 0x8ec3, 0x8ec4, 0x8ec7, + 0x8ecf, 0x8ed1, 0x8ed4, 0x8edc, 0x8ee8, 0x8eee, 0x8ef0, 0x8ef1, + 0x8ef7, 0x8ef9, 0x8efa, 0x8eed, 0x8f00, 0x8f02, 0x8f07, 0x8f08, + 0x8f0f, 0x8f10, 0x8f16, 0x8f17, 0x8f18, 0x8f1e, 0x8f20, 0x8f21, + 0x8f23, 0x8f25, 0x8f27, 0x8f28, 0x8f2c, 0x8f2d, 0x8f2e, 0x8f34, + 0x8f35, 0x8f36, 0x8f37, 0x8f3a, 0x8f40, 0x8f41, + /* 0x61 */ + 0x8f43, 0x8f47, 0x8f4f, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55, + 0x8f58, 0x8f5d, 0x8f5e, 0x8f65, 0x8f9d, 0x8fa0, 0x8fa1, 0x8fa4, + 0x8fa5, 0x8fa6, 0x8fb5, 0x8fb6, 0x8fb8, 0x8fbe, 0x8fc0, 0x8fc1, + 0x8fc6, 0x8fca, 0x8fcb, 0x8fcd, 0x8fd0, 0x8fd2, 0x8fd3, 0x8fd5, + 0x8fe0, 0x8fe3, 0x8fe4, 0x8fe8, 0x8fee, 0x8ff1, 0x8ff5, 0x8ff6, + 0x8ffb, 0x8ffe, 0x9002, 0x9004, 0x9008, 0x900c, 0x9018, 0x901b, + 0x9028, 0x9029, 0x902f, 0x902a, 0x902c, 0x902d, 0x9033, 0x9034, + 0x9037, 0x903f, 0x9043, 0x9044, 0x904c, 0x905b, 0x905d, 0x9062, + 0x9066, 0x9067, 0x906c, 0x9070, 0x9074, 0x9079, 0x9085, 0x9088, + 0x908b, 0x908c, 0x908e, 0x9090, 0x9095, 0x9097, 0x9098, 0x9099, + 0x909b, 0x90a0, 0x90a1, 0x90a2, 0x90a5, 0x90b0, 0x90b2, 0x90b3, + 0x90b4, 0x90b6, 0x90bd, 0x90cc, 0x90be, 0x90c3, + /* 0x62 */ + 0x90c4, 0x90c5, 0x90c7, 0x90c8, 0x90d5, 0x90d7, 0x90d8, 0x90d9, + 0x90dc, 0x90dd, 0x90df, 0x90e5, 0x90d2, 0x90f6, 0x90eb, 0x90ef, + 0x90f0, 0x90f4, 0x90fe, 0x90ff, 0x9100, 0x9104, 0x9105, 0x9106, + 0x9108, 0x910d, 0x9110, 0x9114, 0x9116, 0x9117, 0x9118, 0x911a, + 0x911c, 0x911e, 0x9120, 0x9125, 0x9122, 0x9123, 0x9127, 0x9129, + 0x912e, 0x912f, 0x9131, 0x9134, 0x9136, 0x9137, 0x9139, 0x913a, + 0x913c, 0x913d, 0x9143, 0x9147, 0x9148, 0x914f, 0x9153, 0x9157, + 0x9159, 0x915a, 0x915b, 0x9161, 0x9164, 0x9167, 0x916d, 0x9174, + 0x9179, 0x917a, 0x917b, 0x9181, 0x9183, 0x9185, 0x9186, 0x918a, + 0x918e, 0x9191, 0x9193, 0x9194, 0x9195, 0x9198, 0x919e, 0x91a1, + 0x91a6, 0x91a8, 0x91ac, 0x91ad, 0x91ae, 0x91b0, 0x91b1, 0x91b2, + 0x91b3, 0x91b6, 0x91bb, 0x91bc, 0x91bd, 0x91bf, + /* 0x63 */ + 0x91c2, 0x91c3, 0x91c5, 0x91d3, 0x91d4, 0x91d7, 0x91d9, 0x91da, + 0x91de, 0x91e4, 0x91e5, 0x91e9, 0x91ea, 0x91ec, 0x91ed, 0x91ee, + 0x91ef, 0x91f0, 0x91f1, 0x91f7, 0x91f9, 0x91fb, 0x91fd, 0x9200, + 0x9201, 0x9204, 0x9205, 0x9206, 0x9207, 0x9209, 0x920a, 0x920c, + 0x9210, 0x9212, 0x9213, 0x9216, 0x9218, 0x921c, 0x921d, 0x9223, + 0x9224, 0x9225, 0x9226, 0x9228, 0x922e, 0x922f, 0x9230, 0x9233, + 0x9235, 0x9236, 0x9238, 0x9239, 0x923a, 0x923c, 0x923e, 0x9240, + 0x9242, 0x9243, 0x9246, 0x9247, 0x924a, 0x924d, 0x924e, 0x924f, + 0x9251, 0x9258, 0x9259, 0x925c, 0x925d, 0x9260, 0x9261, 0x9265, + 0x9267, 0x9268, 0x9269, 0x926e, 0x926f, 0x9270, 0x9275, 0x9276, + 0x9277, 0x9278, 0x9279, 0x927b, 0x927c, 0x927d, 0x927f, 0x9288, + 0x9289, 0x928a, 0x928d, 0x928e, 0x9292, 0x9297, + /* 0x64 */ + 0x9299, 0x929f, 0x92a0, 0x92a4, 0x92a5, 0x92a7, 0x92a8, 0x92ab, + 0x92af, 0x92b2, 0x92b6, 0x92b8, 0x92ba, 0x92bb, 0x92bc, 0x92bd, + 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c5, 0x92c6, 0x92c7, + 0x92c8, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92d0, 0x92d3, 0x92d5, + 0x92d7, 0x92d8, 0x92d9, 0x92dc, 0x92dd, 0x92df, 0x92e0, 0x92e1, + 0x92e3, 0x92e5, 0x92e7, 0x92e8, 0x92ec, 0x92ee, 0x92f0, 0x92f9, + 0x92fb, 0x92ff, 0x9300, 0x9302, 0x9308, 0x930d, 0x9311, 0x9314, + 0x9315, 0x931c, 0x931d, 0x931e, 0x931f, 0x9321, 0x9324, 0x9325, + 0x9327, 0x9329, 0x932a, 0x9333, 0x9334, 0x9336, 0x9337, 0x9347, + 0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355, 0x9357, 0x9358, + 0x935a, 0x935e, 0x9364, 0x9365, 0x9367, 0x9369, 0x936a, 0x936d, + 0x936f, 0x9370, 0x9371, 0x9373, 0x9374, 0x9376, + /* 0x65 */ + 0x937a, 0x937d, 0x937f, 0x9380, 0x9381, 0x9382, 0x9388, 0x938a, + 0x938b, 0x938d, 0x938f, 0x9392, 0x9395, 0x9398, 0x939b, 0x939e, + 0x93a1, 0x93a3, 0x93a4, 0x93a6, 0x93a8, 0x93ab, 0x93b4, 0x93b5, + 0x93b6, 0x93ba, 0x93a9, 0x93c1, 0x93c4, 0x93c5, 0x93c6, 0x93c7, + 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93d3, 0x93d9, 0x93dc, + 0x93de, 0x93df, 0x93e2, 0x93e6, 0x93e7, 0x93f9, 0x93f7, 0x93f8, + 0x93fa, 0x93fb, 0x93fd, 0x9401, 0x9402, 0x9404, 0x9408, 0x9409, + 0x940d, 0x940e, 0x940f, 0x9415, 0x9416, 0x9417, 0x941f, 0x942e, + 0x942f, 0x9431, 0x9432, 0x9433, 0x9434, 0x943b, 0x943f, 0x943d, + 0x9443, 0x9445, 0x9448, 0x944a, 0x944c, 0x9455, 0x9459, 0x945c, + 0x945f, 0x9461, 0x9463, 0x9468, 0x946b, 0x946d, 0x946e, 0x946f, + 0x9471, 0x9472, 0x9484, 0x9483, 0x9578, 0x9579, + /* 0x66 */ + 0x957e, 0x9584, 0x9588, 0x958c, 0x958d, 0x958e, 0x959d, 0x959e, + 0x959f, 0x95a1, 0x95a6, 0x95a9, 0x95ab, 0x95ac, 0x95b4, 0x95b6, + 0x95ba, 0x95bd, 0x95bf, 0x95c6, 0x95c8, 0x95c9, 0x95cb, 0x95d0, + 0x95d1, 0x95d2, 0x95d3, 0x95d9, 0x95da, 0x95dd, 0x95de, 0x95df, + 0x95e0, 0x95e4, 0x95e6, 0x961d, 0x961e, 0x9622, 0x9624, 0x9625, + 0x9626, 0x962c, 0x9631, 0x9633, 0x9637, 0x9638, 0x9639, 0x963a, + 0x963c, 0x963d, 0x9641, 0x9652, 0x9654, 0x9656, 0x9657, 0x9658, + 0x9661, 0x966e, 0x9674, 0x967b, 0x967c, 0x967e, 0x967f, 0x9681, + 0x9682, 0x9683, 0x9684, 0x9689, 0x9691, 0x9696, 0x969a, 0x969d, + 0x969f, 0x96a4, 0x96a5, 0x96a6, 0x96a9, 0x96ae, 0x96af, 0x96b3, + 0x96ba, 0x96ca, 0x96d2, 0x5db2, 0x96d8, 0x96da, 0x96dd, 0x96de, + 0x96df, 0x96e9, 0x96ef, 0x96f1, 0x96fa, 0x9702, + /* 0x67 */ + 0x9703, 0x9705, 0x9709, 0x971a, 0x971b, 0x971d, 0x9721, 0x9722, + 0x9723, 0x9728, 0x9731, 0x9733, 0x9741, 0x9743, 0x974a, 0x974e, + 0x974f, 0x9755, 0x9757, 0x9758, 0x975a, 0x975b, 0x9763, 0x9767, + 0x976a, 0x976e, 0x9773, 0x9776, 0x9777, 0x9778, 0x977b, 0x977d, + 0x977f, 0x9780, 0x9789, 0x9795, 0x9796, 0x9797, 0x9799, 0x979a, + 0x979e, 0x979f, 0x97a2, 0x97ac, 0x97ae, 0x97b1, 0x97b2, 0x97b5, + 0x97b6, 0x97b8, 0x97b9, 0x97ba, 0x97bc, 0x97be, 0x97bf, 0x97c1, + 0x97c4, 0x97c5, 0x97c7, 0x97c9, 0x97ca, 0x97cc, 0x97cd, 0x97ce, + 0x97d0, 0x97d1, 0x97d4, 0x97d7, 0x97d8, 0x97d9, 0x97dd, 0x97de, + 0x97e0, 0x97db, 0x97e1, 0x97e4, 0x97ef, 0x97f1, 0x97f4, 0x97f7, + 0x97f8, 0x97fa, 0x9807, 0x980a, 0x9819, 0x980d, 0x980e, 0x9814, + 0x9816, 0x981c, 0x981e, 0x9820, 0x9823, 0x9826, + /* 0x68 */ + 0x982b, 0x982e, 0x982f, 0x9830, 0x9832, 0x9833, 0x9835, 0x9825, + 0x983e, 0x9844, 0x9847, 0x984a, 0x9851, 0x9852, 0x9853, 0x9856, + 0x9857, 0x9859, 0x985a, 0x9862, 0x9863, 0x9865, 0x9866, 0x986a, + 0x986c, 0x98ab, 0x98ad, 0x98ae, 0x98b0, 0x98b4, 0x98b7, 0x98b8, + 0x98ba, 0x98bb, 0x98bf, 0x98c2, 0x98c5, 0x98c8, 0x98cc, 0x98e1, + 0x98e3, 0x98e5, 0x98e6, 0x98e7, 0x98ea, 0x98f3, 0x98f6, 0x9902, + 0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917, 0x991a, 0x991b, + 0x991c, 0x991f, 0x9922, 0x9926, 0x9927, 0x992b, 0x9931, 0x9932, + 0x9933, 0x9934, 0x9935, 0x9939, 0x993a, 0x993b, 0x993c, 0x9940, + 0x9941, 0x9946, 0x9947, 0x9948, 0x994d, 0x994e, 0x9954, 0x9958, + 0x9959, 0x995b, 0x995c, 0x995e, 0x995f, 0x9960, 0x999b, 0x999d, + 0x999f, 0x99a6, 0x99b0, 0x99b1, 0x99b2, 0x99b5, + /* 0x69 */ + 0x99b9, 0x99ba, 0x99bd, 0x99bf, 0x99c3, 0x99c9, 0x99d3, 0x99d4, + 0x99d9, 0x99da, 0x99dc, 0x99de, 0x99e7, 0x99ea, 0x99eb, 0x99ec, + 0x99f0, 0x99f4, 0x99f5, 0x99f9, 0x99fd, 0x99fe, 0x9a02, 0x9a03, + 0x9a04, 0x9a0b, 0x9a0c, 0x9a10, 0x9a11, 0x9a16, 0x9a1e, 0x9a20, + 0x9a22, 0x9a23, 0x9a24, 0x9a27, 0x9a2d, 0x9a2e, 0x9a33, 0x9a35, + 0x9a36, 0x9a38, 0x9a47, 0x9a41, 0x9a44, 0x9a4a, 0x9a4b, 0x9a4c, + 0x9a4e, 0x9a51, 0x9a54, 0x9a56, 0x9a5d, 0x9aaa, 0x9aac, 0x9aae, + 0x9aaf, 0x9ab2, 0x9ab4, 0x9ab5, 0x9ab6, 0x9ab9, 0x9abb, 0x9abe, + 0x9abf, 0x9ac1, 0x9ac3, 0x9ac6, 0x9ac8, 0x9ace, 0x9ad0, 0x9ad2, + 0x9ad5, 0x9ad6, 0x9ad7, 0x9adb, 0x9adc, 0x9ae0, 0x9ae4, 0x9ae5, + 0x9ae7, 0x9ae9, 0x9aec, 0x9af2, 0x9af3, 0x9af5, 0x9af9, 0x9afa, + 0x9afd, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b03, + /* 0x6a */ + 0x9b04, 0x9b05, 0x9b08, 0x9b09, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, + 0x9b10, 0x9b12, 0x9b16, 0x9b19, 0x9b1b, 0x9b1c, 0x9b20, 0x9b26, + 0x9b2b, 0x9b2d, 0x9b33, 0x9b34, 0x9b35, 0x9b37, 0x9b39, 0x9b3a, + 0x9b3d, 0x9b48, 0x9b4b, 0x9b4c, 0x9b55, 0x9b56, 0x9b57, 0x9b5b, + 0x9b5e, 0x9b61, 0x9b63, 0x9b65, 0x9b66, 0x9b68, 0x9b6a, 0x9b6b, + 0x9b6c, 0x9b6d, 0x9b6e, 0x9b73, 0x9b75, 0x9b77, 0x9b78, 0x9b79, + 0x9b7f, 0x9b80, 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b89, 0x9b8a, + 0x9b8b, 0x9b8d, 0x9b8f, 0x9b90, 0x9b94, 0x9b9a, 0x9b9d, 0x9b9e, + 0x9ba6, 0x9ba7, 0x9ba9, 0x9bac, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb7, + 0x9bb8, 0x9bbb, 0x9bbc, 0x9bbe, 0x9bbf, 0x9bc1, 0x9bc7, 0x9bc8, + 0x9bce, 0x9bd0, 0x9bd7, 0x9bd8, 0x9bdd, 0x9bdf, 0x9be5, 0x9be7, + 0x9bea, 0x9beb, 0x9bef, 0x9bf3, 0x9bf7, 0x9bf8, + /* 0x6b */ + 0x9bf9, 0x9bfa, 0x9bfd, 0x9bff, 0x9c00, 0x9c02, 0x9c0b, 0x9c0f, + 0x9c11, 0x9c16, 0x9c18, 0x9c19, 0x9c1a, 0x9c1c, 0x9c1e, 0x9c22, + 0x9c23, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, 0x9c31, 0x9c35, + 0x9c36, 0x9c37, 0x9c3d, 0x9c41, 0x9c43, 0x9c44, 0x9c45, 0x9c49, + 0x9c4a, 0x9c4e, 0x9c4f, 0x9c50, 0x9c53, 0x9c54, 0x9c56, 0x9c58, + 0x9c5b, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c63, 0x9c69, 0x9c6a, 0x9c5c, + 0x9c6b, 0x9c68, 0x9c6e, 0x9c70, 0x9c72, 0x9c75, 0x9c77, 0x9c7b, + 0x9ce6, 0x9cf2, 0x9cf7, 0x9cf9, 0x9d0b, 0x9d02, 0x9d11, 0x9d17, + 0x9d18, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d2f, 0x9d30, 0x9d32, 0x9d33, + 0x9d34, 0x9d3a, 0x9d3c, 0x9d45, 0x9d3d, 0x9d42, 0x9d43, 0x9d47, + 0x9d4a, 0x9d53, 0x9d54, 0x9d5f, 0x9d63, 0x9d62, 0x9d65, 0x9d69, + 0x9d6a, 0x9d6b, 0x9d70, 0x9d76, 0x9d77, 0x9d7b, + /* 0x6c */ + 0x9d7c, 0x9d7e, 0x9d83, 0x9d84, 0x9d86, 0x9d8a, 0x9d8d, 0x9d8e, + 0x9d92, 0x9d93, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9da1, 0x9daa, + 0x9dac, 0x9dae, 0x9db1, 0x9db5, 0x9db9, 0x9dbc, 0x9dbf, 0x9dc3, + 0x9dc7, 0x9dc9, 0x9dca, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dda, + 0x9dde, 0x9ddf, 0x9de0, 0x9de5, 0x9de7, 0x9de9, 0x9deb, 0x9dee, + 0x9df0, 0x9df3, 0x9df4, 0x9dfe, 0x9e0a, 0x9e02, 0x9e07, 0x9e0e, + 0x9e10, 0x9e11, 0x9e12, 0x9e15, 0x9e16, 0x9e19, 0x9e1c, 0x9e1d, + 0x9e7a, 0x9e7b, 0x9e7c, 0x9e80, 0x9e82, 0x9e83, 0x9e84, 0x9e85, + 0x9e87, 0x9e8e, 0x9e8f, 0x9e96, 0x9e98, 0x9e9b, 0x9e9e, 0x9ea4, + 0x9ea8, 0x9eac, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb3, 0x9eb4, 0x9eb5, + 0x9ec6, 0x9ec8, 0x9ecb, 0x9ed5, 0x9edf, 0x9ee4, 0x9ee7, 0x9eec, + 0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef5, + /* 0x6d */ + 0x9ef8, 0x9eff, 0x9f02, 0x9f03, 0x9f09, 0x9f0f, 0x9f10, 0x9f11, + 0x9f12, 0x9f14, 0x9f16, 0x9f17, 0x9f19, 0x9f1a, 0x9f1b, 0x9f1f, + 0x9f22, 0x9f26, 0x9f2a, 0x9f2b, 0x9f2f, 0x9f31, 0x9f32, 0x9f34, + 0x9f37, 0x9f39, 0x9f3a, 0x9f3c, 0x9f3d, 0x9f3f, 0x9f41, 0x9f43, + 0x9f44, 0x9f45, 0x9f46, 0x9f47, 0x9f53, 0x9f55, 0x9f56, 0x9f57, + 0x9f58, 0x9f5a, 0x9f5d, 0x9f5e, 0x9f68, 0x9f69, 0x9f6d, 0x9f6e, + 0x9f6f, 0x9f70, 0x9f71, 0x9f73, 0x9f75, 0x9f7a, 0x9f7d, 0x9f8f, + 0x9f90, 0x9f91, 0x9f92, 0x9f94, 0x9f96, 0x9f97, 0x9f9e, 0x9fa1, + 0x9fa2, 0x9fa3, 0x9fa5, +}; + +static int +jisx0212_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 == 0x22) || (c1 >= 0x26 && c1 <= 0x27) || (c1 >= 0x29 && c1 <= 0x2b) || (c1 >= 0x30 && c1 <= 0x6d)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + unsigned short wc = 0xfffd; + if (i < 470) { + if (i < 175) + wc = jisx0212_2uni_page22[i-94]; + } else if (i < 752) { + if (i < 658) + wc = jisx0212_2uni_page26[i-470]; + } else if (i < 1410) { + if (i < 1027) + wc = jisx0212_2uni_page29[i-752]; + } else { + if (i < 7211) + wc = jisx0212_2uni_page30[i-1410]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short jisx0212_2charset[6067] = { + 0x2242, 0x2270, 0x2243, 0x226d, 0x226c, 0x226e, 0x2234, 0x2231, + 0x226b, 0x2244, 0x2a22, 0x2a21, 0x2a24, 0x2a2a, 0x2a23, 0x2a29, + 0x2921, 0x2a2e, 0x2a32, 0x2a31, 0x2a34, 0x2a33, 0x2a40, 0x2a3f, + 0x2a42, 0x2a41, 0x2a50, 0x2a52, 0x2a51, 0x2a54, 0x2a58, 0x2a53, + 0x292c, 0x2a63, 0x2a62, 0x2a65, 0x2a64, 0x2a72, 0x2930, 0x294e, + 0x2b22, 0x2b21, 0x2b24, 0x2b2a, 0x2b23, 0x2b29, 0x2941, 0x2b2e, + 0x2b32, 0x2b31, 0x2b34, 0x2b33, 0x2b40, 0x2b3f, 0x2b42, 0x2b41, + 0x2943, 0x2b50, 0x2b52, 0x2b51, 0x2b54, 0x2b58, 0x2b53, 0x294c, + 0x2b63, 0x2b62, 0x2b65, 0x2b64, 0x2b72, 0x2950, 0x2b73, 0x2a27, + 0x2b27, 0x2a25, 0x2b25, 0x2a28, 0x2b28, 0x2a2b, 0x2b2b, 0x2a2c, + 0x2b2c, 0x2a2f, 0x2b2f, 0x2a2d, 0x2b2d, 0x2a30, 0x2b30, 0x2922, + 0x2942, 0x2a37, 0x2b37, 0x2a36, 0x2b36, 0x2a38, 0x2b38, 0x2a35, + 0x2b35, 0x2a3a, 0x2b3a, 0x2a3b, 0x2b3b, 0x2a3d, 0x2b3d, 0x2a3c, + 0x2a3e, 0x2b3e, 0x2924, 0x2944, 0x2a47, 0x2b47, 0x2a45, 0x2b45, + 0x2a46, 0x2b46, 0x2a44, 0x2945, 0x2926, 0x2946, 0x2a48, 0x2b48, + 0x2a49, 0x2b49, 0x2947, 0x2a4a, 0x2b4a, 0x2a4c, 0x2b4c, 0x2a4b, + 0x2b4b, 0x2929, 0x2949, 0x2928, 0x2948, 0x2a4d, 0x2b4d, 0x2a4f, + 0x2b4f, 0x2a4e, 0x2b4e, 0x294a, 0x292b, 0x294b, 0x2a57, 0x2b57, + 0x2a56, 0x2b56, 0x292d, 0x294d, 0x2a59, 0x2b59, 0x2a5b, 0x2b5b, + 0x2a5a, 0x2b5a, 0x2a5c, 0x2b5c, 0x2a5d, 0x2b5d, 0x2a5f, 0x2b5f, + 0x2a5e, 0x2b5e, 0x2a61, 0x2b61, 0x2a60, 0x2b60, 0x292f, 0x294f, + 0x2a6c, 0x2b6c, 0x2a69, 0x2b69, 0x2a66, 0x2b66, 0x2a6b, 0x2b6b, + 0x2a68, 0x2b68, 0x2a6a, 0x2b6a, 0x2a71, 0x2b71, 0x2a74, 0x2b74, + 0x2a73, 0x2a75, 0x2b75, 0x2a77, 0x2b77, 0x2a76, 0x2b76, 0x2a26, + 0x2b26, 0x2a43, 0x2b43, 0x2a55, 0x2b55, 0x2a67, 0x2b67, 0x2a70, + 0x2b70, 0x2a6d, 0x2b6d, 0x2a6f, 0x2b6f, 0x2a6e, 0x2b6e, 0x2b39, + 0x2230, 0x222f, 0x2232, 0x2236, 0x2235, 0x2233, 0x2238, 0x2239, + 0x2661, 0x2662, 0x2663, 0x2664, 0x2667, 0x2669, 0x266c, 0x2676, + 0x2665, 0x266a, 0x2671, 0x2672, 0x2673, 0x2674, 0x267b, 0x2678, + 0x2675, 0x267a, 0x2677, 0x2679, 0x267c, 0x2742, 0x2743, 0x2744, + 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274a, 0x274b, 0x274c, + 0x274d, 0x274e, 0x2772, 0x2773, 0x2774, 0x2775, 0x2776, 0x2777, + 0x2778, 0x2779, 0x277a, 0x277b, 0x277c, 0x277d, 0x277e, 0x2271, + 0x226f, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, + 0x3028, 0x3029, 0x302a, 0x302b, 0x302c, 0x302d, 0x302e, 0x302f, + 0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036, 0x3037, + 0x3038, 0x3039, 0x303a, 0x303b, 0x303c, 0x303d, 0x303e, 0x303f, + 0x3040, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, + 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, + 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, + 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x3060, + 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, + 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, + 0x305f, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, + 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x3121, + 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, + 0x312a, 0x312b, 0x312c, 0x312d, 0x312e, 0x312f, 0x3130, 0x3131, + 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139, + 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140, 0x3141, + 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, + 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150, 0x3151, + 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, + 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x3176, 0x315f, 0x3160, + 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168, + 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170, + 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3177, 0x3178, 0x3179, + 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x3221, 0x3222, 0x3223, + 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0x322a, 0x322b, + 0x322c, 0x322d, 0x322e, 0x322f, 0x3230, 0x3231, 0x3232, 0x3233, + 0x3234, 0x3235, 0x3236, 0x3237, 0x3238, 0x3239, 0x323a, 0x323b, + 0x323c, 0x323d, 0x323e, 0x323f, 0x3240, 0x3241, 0x3242, 0x3243, + 0x3244, 0x3245, 0x3251, 0x3246, 0x3247, 0x3248, 0x3249, 0x324a, + 0x324b, 0x324c, 0x324d, 0x324e, 0x324f, 0x3250, 0x3252, 0x3253, + 0x3254, 0x3255, 0x3256, 0x3257, 0x3258, 0x3259, 0x325a, 0x325b, + 0x325c, 0x325d, 0x325e, 0x325f, 0x3260, 0x3261, 0x3262, 0x3263, + 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326a, 0x326b, + 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272, 0x3273, + 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a, 0x327b, + 0x327c, 0x327d, 0x327e, 0x3321, 0x3322, 0x3323, 0x3324, 0x3325, + 0x3326, 0x3327, 0x3328, 0x3329, 0x332a, 0x332b, 0x332c, 0x332d, + 0x332e, 0x332f, 0x3330, 0x3331, 0x3332, 0x3333, 0x3334, 0x3335, + 0x3336, 0x3337, 0x3338, 0x3339, 0x333a, 0x333b, 0x333c, 0x333d, + 0x333e, 0x333f, 0x3340, 0x3341, 0x3342, 0x3343, 0x3344, 0x3345, + 0x3346, 0x3347, 0x3348, 0x3349, 0x334a, 0x334b, 0x334c, 0x334d, + 0x334e, 0x334f, 0x3350, 0x3351, 0x3352, 0x3353, 0x3354, 0x3355, + 0x3356, 0x3357, 0x3358, 0x3359, 0x335a, 0x335b, 0x335c, 0x335d, + 0x335e, 0x335f, 0x3360, 0x3361, 0x3362, 0x3363, 0x3364, 0x3365, + 0x3366, 0x3367, 0x3368, 0x3369, 0x336a, 0x336b, 0x336c, 0x336d, + 0x336e, 0x336f, 0x3370, 0x3371, 0x3372, 0x3373, 0x3374, 0x3375, + 0x3376, 0x3377, 0x3378, 0x3379, 0x337a, 0x337b, 0x337c, 0x337d, + 0x337e, 0x3421, 0x3422, 0x3423, 0x3424, 0x3425, 0x3426, 0x3427, + 0x3428, 0x3429, 0x342a, 0x342b, 0x342c, 0x342d, 0x342e, 0x342f, + 0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436, 0x3438, + 0x3437, 0x3439, 0x343a, 0x343b, 0x343c, 0x343d, 0x343e, 0x343f, + 0x3440, 0x3441, 0x3442, 0x3443, 0x3444, 0x3445, 0x3446, 0x3447, + 0x3448, 0x3449, 0x344a, 0x344b, 0x344c, 0x344d, 0x344e, 0x344f, + 0x3450, 0x3451, 0x3452, 0x3453, 0x3454, 0x3455, 0x3456, 0x3457, + 0x3458, 0x3459, 0x345a, 0x345b, 0x345c, 0x345d, 0x345e, 0x345f, + 0x3460, 0x3461, 0x3462, 0x3463, 0x3464, 0x3465, 0x3466, 0x3467, + 0x3468, 0x3469, 0x346a, 0x346b, 0x346c, 0x346d, 0x346e, 0x346f, + 0x3470, 0x3471, 0x3472, 0x3473, 0x3474, 0x3475, 0x3476, 0x3477, + 0x3478, 0x3479, 0x347a, 0x347b, 0x347c, 0x347d, 0x347e, 0x3521, + 0x3522, 0x3523, 0x3524, 0x3525, 0x3526, 0x3527, 0x3528, 0x3529, + 0x352a, 0x352b, 0x352c, 0x352d, 0x352e, 0x352f, 0x3530, 0x3531, + 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537, 0x3538, 0x3539, + 0x353a, 0x353b, 0x353c, 0x353d, 0x353e, 0x353f, 0x3540, 0x3541, + 0x3542, 0x3543, 0x3544, 0x3545, 0x3546, 0x3547, 0x3548, 0x3549, + 0x354a, 0x354b, 0x354c, 0x354d, 0x354e, 0x354f, 0x3550, 0x3551, + 0x3552, 0x3553, 0x3554, 0x3555, 0x3556, 0x3557, 0x3558, 0x3559, + 0x355a, 0x355b, 0x355c, 0x355d, 0x355e, 0x355f, 0x3560, 0x3561, + 0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568, 0x3569, + 0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570, 0x3571, + 0x3572, 0x3573, 0x3574, 0x3575, 0x3576, 0x3577, 0x3578, 0x3579, + 0x357a, 0x357b, 0x357c, 0x357d, 0x357e, 0x3621, 0x3622, 0x3623, + 0x3624, 0x3625, 0x3626, 0x3627, 0x3628, 0x3629, 0x362a, 0x362b, + 0x362c, 0x362d, 0x362e, 0x362f, 0x3630, 0x3631, 0x3632, 0x3633, + 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639, 0x363a, 0x363b, + 0x363c, 0x363d, 0x363e, 0x363f, 0x3640, 0x3641, 0x3642, 0x3643, + 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364a, 0x364b, + 0x364c, 0x364d, 0x364e, 0x364f, 0x3650, 0x3651, 0x3652, 0x3653, + 0x3654, 0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365a, 0x365b, + 0x365c, 0x365d, 0x365e, 0x365f, 0x3660, 0x3661, 0x3662, 0x3663, + 0x3664, 0x3665, 0x3666, 0x3667, 0x3668, 0x3669, 0x366a, 0x366b, + 0x366c, 0x366d, 0x3670, 0x3671, 0x366e, 0x366f, 0x3672, 0x3673, + 0x3674, 0x3675, 0x3676, 0x3677, 0x3678, 0x3679, 0x367a, 0x367b, + 0x367d, 0x367e, 0x367c, 0x3721, 0x3722, 0x3723, 0x3724, 0x3725, + 0x3726, 0x3727, 0x3728, 0x3729, 0x372a, 0x372b, 0x372c, 0x372d, + 0x372e, 0x372f, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734, 0x3735, + 0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c, 0x373d, + 0x373e, 0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744, 0x3745, + 0x3746, 0x3747, 0x3748, 0x3749, 0x374a, 0x374b, 0x374c, 0x374d, + 0x374e, 0x374f, 0x3750, 0x3751, 0x3752, 0x3753, 0x3754, 0x3755, + 0x3756, 0x3757, 0x3760, 0x3758, 0x3759, 0x375a, 0x375b, 0x375c, + 0x375d, 0x375e, 0x375f, 0x3761, 0x3762, 0x3763, 0x3764, 0x3765, + 0x3766, 0x3767, 0x3768, 0x3769, 0x376a, 0x376b, 0x376c, 0x376d, + 0x377e, 0x376e, 0x376f, 0x3770, 0x3771, 0x3772, 0x3773, 0x3774, + 0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377a, 0x377b, 0x377c, + 0x377d, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826, 0x3827, + 0x3828, 0x3829, 0x382a, 0x382b, 0x382c, 0x382d, 0x382e, 0x382f, + 0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836, 0x3837, + 0x3838, 0x3839, 0x383a, 0x383b, 0x383c, 0x383d, 0x383e, 0x383f, + 0x3840, 0x3841, 0x3842, 0x3843, 0x3844, 0x3845, 0x3846, 0x3847, + 0x3848, 0x3849, 0x384a, 0x384b, 0x384c, 0x384d, 0x384e, 0x3850, + 0x3851, 0x384f, 0x3852, 0x3853, 0x3854, 0x3855, 0x3856, 0x3857, + 0x3858, 0x3859, 0x385a, 0x385b, 0x385c, 0x385d, 0x385e, 0x385f, + 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3867, 0x3868, + 0x3869, 0x386a, 0x386b, 0x386c, 0x386d, 0x386e, 0x386f, 0x3870, + 0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876, 0x3877, 0x3878, + 0x3879, 0x387a, 0x387b, 0x387c, 0x387d, 0x387e, 0x3921, 0x3922, + 0x3923, 0x3924, 0x3925, 0x3926, 0x3927, 0x3928, 0x3929, 0x392a, + 0x392b, 0x392c, 0x392d, 0x392e, 0x392f, 0x3930, 0x3931, 0x3932, + 0x3933, 0x3934, 0x3935, 0x3936, 0x3937, 0x3938, 0x3939, 0x393a, + 0x393b, 0x393c, 0x393d, 0x393e, 0x393f, 0x3940, 0x3941, 0x3942, + 0x3943, 0x3944, 0x3945, 0x3946, 0x3947, 0x3948, 0x3949, 0x394a, + 0x394b, 0x394c, 0x394d, 0x394e, 0x394f, 0x3950, 0x3951, 0x3952, + 0x3953, 0x3954, 0x3955, 0x3956, 0x3957, 0x3958, 0x3959, 0x395a, + 0x395b, 0x395c, 0x395d, 0x395e, 0x395f, 0x3960, 0x3961, 0x3962, + 0x3963, 0x3964, 0x3965, 0x3966, 0x3967, 0x3968, 0x3969, 0x396a, + 0x396b, 0x396c, 0x396d, 0x396e, 0x396f, 0x3970, 0x3971, 0x3972, + 0x3973, 0x3974, 0x3975, 0x3976, 0x3977, 0x3978, 0x3979, 0x397a, + 0x397b, 0x397c, 0x397d, 0x397e, 0x3a21, 0x3a22, 0x3a23, 0x3a24, + 0x3a25, 0x3a26, 0x3a27, 0x3a28, 0x3a29, 0x3a2a, 0x3a2b, 0x3a2c, + 0x3a2d, 0x3a2e, 0x3a2f, 0x3a30, 0x3a31, 0x3a33, 0x3a34, 0x3a35, + 0x3a36, 0x3a37, 0x3a38, 0x3a32, 0x3a39, 0x3a3a, 0x3a3b, 0x3a3c, + 0x3a3d, 0x3a3e, 0x3a3f, 0x3a40, 0x3a41, 0x3a42, 0x3a43, 0x3a44, + 0x3a45, 0x3a46, 0x3a47, 0x3a48, 0x3a49, 0x3a4a, 0x3a4b, 0x3a4c, + 0x3a4d, 0x3a4e, 0x3a4f, 0x3a50, 0x3a51, 0x3a52, 0x3a53, 0x3a54, + 0x3a55, 0x3a56, 0x3a57, 0x3a58, 0x3a59, 0x3a5a, 0x3a5b, 0x3a5c, + 0x3a5d, 0x3a5e, 0x3a5f, 0x3a60, 0x3a61, 0x3a62, 0x3a63, 0x3a64, + 0x3a65, 0x3a66, 0x3a67, 0x3a68, 0x3a69, 0x3a6a, 0x3a6b, 0x3a6c, + 0x3a6d, 0x3a6e, 0x3a6f, 0x3a70, 0x3a71, 0x3a72, 0x3a73, 0x3a74, + 0x3a75, 0x3a76, 0x3a77, 0x3a78, 0x3a79, 0x3a7a, 0x3a7b, 0x3a7c, + 0x3a7d, 0x3a7e, 0x3b21, 0x3b22, 0x3b23, 0x3b24, 0x3b25, 0x3b26, + 0x3b27, 0x3b28, 0x3b29, 0x3b2a, 0x3b2b, 0x3b2c, 0x3b2d, 0x3b2e, + 0x3b2f, 0x3b30, 0x3b31, 0x3b32, 0x3b33, 0x3b34, 0x3b35, 0x3b36, + 0x3b37, 0x3b38, 0x3b39, 0x3b3a, 0x3b3b, 0x3b3d, 0x3b3c, 0x3b3e, + 0x3b3f, 0x3b40, 0x3b41, 0x3b42, 0x3b43, 0x3b44, 0x3b45, 0x3b47, + 0x3b48, 0x3b49, 0x3b4a, 0x3b46, 0x3b4b, 0x3b4c, 0x3b4d, 0x3b4e, + 0x3b4f, 0x3b50, 0x3b51, 0x3b52, 0x3b53, 0x3b57, 0x3b55, 0x3b54, + 0x3b56, 0x3b58, 0x3b59, 0x3b5a, 0x3b5b, 0x3b5c, 0x3b5d, 0x3b5e, + 0x3b5f, 0x3b60, 0x3b61, 0x3b62, 0x3b63, 0x3b64, 0x3b65, 0x3b66, + 0x3b67, 0x3b68, 0x3b69, 0x3b6a, 0x3b6b, 0x3b6c, 0x3b6d, 0x3b6e, + 0x3b6f, 0x3b70, 0x3b71, 0x3b72, 0x6674, 0x3b73, 0x3b74, 0x3b75, + 0x3b76, 0x3b77, 0x3b78, 0x3b7a, 0x3b79, 0x3b7b, 0x3b7c, 0x3b7d, + 0x3b7e, 0x3c21, 0x3c22, 0x3c23, 0x3c24, 0x3c25, 0x3c26, 0x3c27, + 0x3c28, 0x3c29, 0x3c2a, 0x3c2b, 0x3c2c, 0x3c2e, 0x3c2d, 0x3c2f, + 0x3c30, 0x3c31, 0x3c34, 0x3c32, 0x3c33, 0x3c35, 0x3c36, 0x3c37, + 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, 0x3c3c, 0x3c3d, 0x3c3e, 0x3c3f, + 0x3c40, 0x3c41, 0x3c42, 0x3c43, 0x3c44, 0x3c45, 0x3c46, 0x3c47, + 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4d, 0x3c4e, 0x3c4f, + 0x3c50, 0x3c52, 0x3c51, 0x3c53, 0x3c54, 0x3c55, 0x3c56, 0x3c57, + 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0x3c5c, 0x3c5d, 0x3c5e, 0x3c5f, + 0x3c60, 0x3c61, 0x3c62, 0x3c63, 0x3c64, 0x3c65, 0x3c66, 0x3c67, + 0x3c68, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c6d, 0x3c6e, 0x3c6f, + 0x3c70, 0x3c71, 0x3c72, 0x3c73, 0x3c74, 0x3c75, 0x3c76, 0x3c77, + 0x3c78, 0x3c79, 0x3c7a, 0x3c7b, 0x3c7c, 0x3c7d, 0x3c7e, 0x3d21, + 0x3d22, 0x3d23, 0x3d24, 0x3d25, 0x3d26, 0x3d27, 0x3d28, 0x3d29, + 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, 0x3d2e, 0x3d2f, 0x3d32, 0x3d30, + 0x3d31, 0x3d33, 0x3d34, 0x3d35, 0x3d36, 0x3d37, 0x3d38, 0x3d39, + 0x3d3a, 0x3d3b, 0x3d3c, 0x3d3d, 0x3d3e, 0x3d3f, 0x3d40, 0x3d41, + 0x3d42, 0x3d43, 0x3d44, 0x3d45, 0x3d46, 0x3d47, 0x3d48, 0x3d49, + 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4d, 0x3d4e, 0x3d4f, 0x3d50, 0x3d51, + 0x3d52, 0x3d53, 0x3d54, 0x3d55, 0x3d56, 0x3d57, 0x3d58, 0x3d59, + 0x3d5a, 0x3d5b, 0x3d5c, 0x3d5d, 0x3d5e, 0x3d5f, 0x3d60, 0x3d61, + 0x3d62, 0x3d63, 0x3d64, 0x3d65, 0x3d66, 0x3d67, 0x3d68, 0x3d69, + 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6d, 0x3d6e, 0x3d6f, 0x3d70, 0x3d71, + 0x3d72, 0x3d73, 0x3d74, 0x3d75, 0x3d76, 0x3d77, 0x3d78, 0x3d79, + 0x3d7a, 0x3d7b, 0x3d7c, 0x3d7d, 0x3d7e, 0x3e21, 0x3e22, 0x3e23, + 0x3e24, 0x3e25, 0x3e26, 0x3e27, 0x3e28, 0x3e29, 0x3e2a, 0x3e2b, + 0x3e2c, 0x3e2d, 0x3e2e, 0x3e2f, 0x3e30, 0x3e31, 0x3e32, 0x3e33, + 0x3e34, 0x3e35, 0x3e36, 0x3e37, 0x3e38, 0x3e39, 0x3e3a, 0x3e3b, + 0x3e3c, 0x3e3d, 0x3e3e, 0x3e3f, 0x3e40, 0x3e41, 0x3e42, 0x3e43, + 0x3e44, 0x3e45, 0x3e46, 0x3e47, 0x3e48, 0x3e49, 0x3e4a, 0x3e4b, + 0x3e4c, 0x3e4d, 0x3e4e, 0x3e4f, 0x3e50, 0x3e51, 0x3e52, 0x3e53, + 0x3e54, 0x3e55, 0x3e56, 0x3e57, 0x3e58, 0x3e59, 0x3e5a, 0x3e5b, + 0x3e5c, 0x3e5d, 0x3e5e, 0x3e5f, 0x3e60, 0x3e61, 0x3e62, 0x3e63, + 0x3e64, 0x3e65, 0x3e66, 0x3e67, 0x3e68, 0x3e69, 0x3e6a, 0x3e6b, + 0x3e6c, 0x3e6d, 0x3e6e, 0x3e6f, 0x3e70, 0x3e71, 0x3e72, 0x3e73, + 0x3e74, 0x3e75, 0x3e76, 0x3e77, 0x3e78, 0x3e79, 0x3e7a, 0x3e7b, + 0x3e7e, 0x3e7c, 0x3e7d, 0x3f21, 0x3f22, 0x3f23, 0x3f24, 0x3f25, + 0x3f26, 0x3f27, 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, + 0x3f2e, 0x3f2f, 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34, 0x3f35, + 0x3f36, 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c, 0x3f3d, + 0x3f3e, 0x3f3f, 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44, 0x3f45, + 0x3f46, 0x3f47, 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c, 0x3f4d, + 0x3f4e, 0x3f4f, 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54, 0x3f55, + 0x3f56, 0x3f57, 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c, 0x3f5d, + 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64, 0x3f65, + 0x3f66, 0x3f67, 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c, 0x3f6d, + 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74, 0x3f75, + 0x3f76, 0x3f77, 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c, 0x3f7d, + 0x3f7e, 0x4021, 0x4022, 0x4023, 0x4024, 0x4025, 0x4026, 0x4027, + 0x4028, 0x4029, 0x402a, 0x402b, 0x402c, 0x402d, 0x402e, 0x402f, + 0x4030, 0x4031, 0x4032, 0x4033, 0x4034, 0x4035, 0x4036, 0x4037, + 0x4038, 0x4039, 0x403a, 0x403b, 0x403c, 0x403d, 0x403e, 0x403f, + 0x4040, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046, 0x4047, + 0x4048, 0x4049, 0x404a, 0x404b, 0x404c, 0x404d, 0x404e, 0x404f, + 0x4050, 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 0x4056, 0x4057, + 0x4058, 0x4059, 0x405a, 0x405b, 0x405c, 0x405d, 0x405e, 0x405f, + 0x4060, 0x4061, 0x4062, 0x4063, 0x4064, 0x4065, 0x4066, 0x4067, + 0x4068, 0x4069, 0x406a, 0x406b, 0x406c, 0x406d, 0x406e, 0x406f, + 0x4070, 0x4071, 0x4072, 0x4073, 0x4074, 0x4075, 0x4076, 0x4077, + 0x4078, 0x4079, 0x407a, 0x407b, 0x407c, 0x407d, 0x407e, 0x4121, + 0x4122, 0x4123, 0x4124, 0x4125, 0x4126, 0x4127, 0x4128, 0x4129, + 0x412a, 0x412b, 0x412c, 0x412d, 0x412e, 0x412f, 0x4130, 0x4131, + 0x4132, 0x4133, 0x4134, 0x4135, 0x4136, 0x4137, 0x4138, 0x4139, + 0x413a, 0x413b, 0x413c, 0x413d, 0x413e, 0x413f, 0x4140, 0x4141, + 0x4142, 0x4143, 0x4144, 0x4145, 0x4146, 0x4147, 0x4148, 0x4149, + 0x414a, 0x414b, 0x414c, 0x414d, 0x414e, 0x414f, 0x4150, 0x4151, + 0x4152, 0x4153, 0x4154, 0x4155, 0x4156, 0x4157, 0x4158, 0x4159, + 0x415a, 0x415b, 0x415c, 0x415d, 0x415e, 0x415f, 0x4160, 0x4161, + 0x4162, 0x4163, 0x4164, 0x4165, 0x4166, 0x4167, 0x4168, 0x4169, + 0x416a, 0x416b, 0x416c, 0x416d, 0x416e, 0x416f, 0x4170, 0x4171, + 0x4172, 0x4173, 0x4174, 0x4175, 0x4176, 0x4177, 0x4178, 0x4179, + 0x417a, 0x417b, 0x417c, 0x417d, 0x417e, 0x4221, 0x4222, 0x4223, + 0x4224, 0x4225, 0x4226, 0x4227, 0x4228, 0x4229, 0x422a, 0x422b, + 0x422c, 0x422d, 0x422e, 0x4230, 0x422f, 0x4231, 0x4232, 0x4233, + 0x4234, 0x4235, 0x4237, 0x4236, 0x4238, 0x4239, 0x423a, 0x423b, + 0x423c, 0x423d, 0x423e, 0x4240, 0x4241, 0x4242, 0x4244, 0x4245, + 0x4247, 0x4248, 0x4249, 0x424a, 0x424c, 0x4243, 0x4246, 0x424b, + 0x424d, 0x424e, 0x424f, 0x4250, 0x4251, 0x4252, 0x4253, 0x4254, + 0x4255, 0x4256, 0x4257, 0x4258, 0x4259, 0x425a, 0x425b, 0x425c, + 0x425d, 0x425e, 0x425f, 0x4260, 0x4261, 0x4262, 0x4263, 0x4264, + 0x4265, 0x4266, 0x4267, 0x4268, 0x4269, 0x426a, 0x426b, 0x426c, + 0x426d, 0x423f, 0x426e, 0x426f, 0x4270, 0x4271, 0x4272, 0x4273, + 0x4274, 0x4275, 0x4276, 0x4277, 0x4278, 0x4279, 0x427a, 0x427b, + 0x427c, 0x427d, 0x427e, 0x4321, 0x4322, 0x4323, 0x4324, 0x4325, + 0x4326, 0x4327, 0x4328, 0x4329, 0x432a, 0x432b, 0x432c, 0x432d, + 0x432e, 0x432f, 0x4330, 0x4331, 0x4332, 0x4333, 0x4334, 0x4335, + 0x4336, 0x4337, 0x4339, 0x433a, 0x433b, 0x433c, 0x433d, 0x433e, + 0x433f, 0x4340, 0x4341, 0x4342, 0x4343, 0x4344, 0x4345, 0x4346, + 0x4347, 0x4348, 0x4338, 0x434a, 0x434b, 0x434c, 0x434d, 0x434f, + 0x434e, 0x4350, 0x4351, 0x4352, 0x4353, 0x4354, 0x4355, 0x4356, + 0x4357, 0x4358, 0x4359, 0x435a, 0x435b, 0x4349, 0x435c, 0x435d, + 0x435e, 0x435f, 0x4360, 0x4361, 0x4362, 0x4363, 0x4364, 0x4365, + 0x4366, 0x4367, 0x4368, 0x4369, 0x436a, 0x436b, 0x436c, 0x436d, + 0x436e, 0x436f, 0x4370, 0x4371, 0x4372, 0x4373, 0x4374, 0x4375, + 0x4376, 0x4377, 0x4378, 0x4379, 0x437a, 0x437b, 0x437c, 0x437d, + 0x437e, 0x4421, 0x4422, 0x4423, 0x4424, 0x4425, 0x4426, 0x4427, + 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e, 0x442f, + 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, 0x4436, 0x4437, + 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, 0x443e, 0x443f, + 0x4440, 0x4441, 0x4442, 0x4443, 0x4444, 0x4445, 0x4446, 0x4447, + 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e, 0x444f, + 0x4450, 0x4451, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456, 0x4457, + 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445e, 0x445f, + 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466, 0x4467, + 0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446e, 0x446f, + 0x4470, 0x4471, 0x4472, 0x4473, 0x4474, 0x4475, 0x4476, 0x4477, + 0x4478, 0x4479, 0x447a, 0x447b, 0x447c, 0x447d, 0x447e, 0x4521, + 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528, 0x4529, + 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x452f, 0x4530, 0x4531, + 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538, 0x4539, + 0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f, 0x4540, 0x4541, + 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548, 0x4549, + 0x454a, 0x454b, 0x454d, 0x454c, 0x454e, 0x454f, 0x4550, 0x4551, + 0x4552, 0x4553, 0x4554, 0x4555, 0x4556, 0x4557, 0x4558, 0x4559, + 0x455a, 0x455b, 0x455c, 0x455d, 0x455e, 0x455f, 0x4560, 0x4561, + 0x4562, 0x4563, 0x4564, 0x4565, 0x4566, 0x4567, 0x4568, 0x4569, + 0x456a, 0x456b, 0x456c, 0x456d, 0x456e, 0x456f, 0x4570, 0x4571, + 0x4572, 0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578, 0x4579, + 0x457a, 0x457b, 0x457c, 0x457d, 0x457e, 0x4621, 0x4622, 0x4623, + 0x4624, 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, 0x462a, 0x462b, + 0x462c, 0x462d, 0x462e, 0x462f, 0x4630, 0x4631, 0x4632, 0x4633, + 0x4634, 0x4635, 0x4636, 0x4637, 0x4638, 0x4639, 0x463a, 0x463b, + 0x463c, 0x463d, 0x463e, 0x463f, 0x4640, 0x4641, 0x4642, 0x4643, + 0x4644, 0x4645, 0x4646, 0x4647, 0x4648, 0x4649, 0x464a, 0x464b, + 0x464c, 0x464d, 0x464e, 0x464f, 0x4650, 0x4651, 0x4652, 0x4653, + 0x4654, 0x4655, 0x4656, 0x4657, 0x4658, 0x4659, 0x465a, 0x465b, + 0x465c, 0x465d, 0x465e, 0x465f, 0x4660, 0x4736, 0x4661, 0x4662, + 0x4663, 0x4664, 0x4665, 0x4666, 0x4667, 0x4668, 0x4669, 0x466a, + 0x466b, 0x466c, 0x466d, 0x466e, 0x466f, 0x4670, 0x4671, 0x4672, + 0x4673, 0x4674, 0x4675, 0x4676, 0x4677, 0x4678, 0x4679, 0x467a, + 0x467b, 0x467c, 0x467d, 0x467e, 0x4721, 0x4722, 0x4723, 0x4724, + 0x4725, 0x4726, 0x4727, 0x4728, 0x4729, 0x472a, 0x472b, 0x472c, + 0x472d, 0x472e, 0x472f, 0x4730, 0x4731, 0x4732, 0x4733, 0x4734, + 0x4735, 0x4737, 0x4738, 0x4739, 0x473a, 0x473b, 0x473c, 0x473d, + 0x473e, 0x473f, 0x4740, 0x4741, 0x4742, 0x4743, 0x4744, 0x4745, + 0x4746, 0x4747, 0x4748, 0x4749, 0x474a, 0x474b, 0x474c, 0x474d, + 0x474e, 0x474f, 0x4750, 0x4751, 0x4752, 0x4753, 0x4754, 0x4755, + 0x4756, 0x4757, 0x4758, 0x4759, 0x475a, 0x475b, 0x475c, 0x475d, + 0x475e, 0x475f, 0x4760, 0x4761, 0x4762, 0x4763, 0x4764, 0x4765, + 0x4766, 0x4767, 0x4768, 0x4769, 0x476a, 0x476b, 0x476c, 0x476d, + 0x476e, 0x476f, 0x4770, 0x4771, 0x4772, 0x4773, 0x4774, 0x4775, + 0x4776, 0x4777, 0x4778, 0x4779, 0x477a, 0x477b, 0x477c, 0x477d, + 0x477e, 0x4821, 0x4822, 0x4823, 0x4824, 0x4825, 0x4826, 0x4827, + 0x4828, 0x4829, 0x482a, 0x482b, 0x482c, 0x482d, 0x482e, 0x482f, + 0x4830, 0x4831, 0x4832, 0x4833, 0x4834, 0x4835, 0x4836, 0x4837, + 0x4838, 0x4839, 0x483a, 0x483b, 0x483c, 0x483d, 0x483e, 0x483f, + 0x4840, 0x4841, 0x4842, 0x4843, 0x4844, 0x4845, 0x4846, 0x4847, + 0x4848, 0x4849, 0x484a, 0x484b, 0x484c, 0x4853, 0x484d, 0x484e, + 0x484f, 0x4850, 0x4851, 0x4852, 0x4854, 0x4855, 0x4856, 0x4857, + 0x4858, 0x4859, 0x485a, 0x485b, 0x485c, 0x485d, 0x485e, 0x485f, + 0x4860, 0x4861, 0x4862, 0x4863, 0x4864, 0x4865, 0x4866, 0x4867, + 0x4868, 0x4869, 0x486a, 0x486b, 0x486c, 0x486d, 0x486e, 0x486f, + 0x4870, 0x4871, 0x4872, 0x4873, 0x4874, 0x4875, 0x4876, 0x4877, + 0x4878, 0x4879, 0x487a, 0x487b, 0x487c, 0x487d, 0x487e, 0x4921, + 0x4922, 0x4923, 0x4924, 0x4925, 0x4926, 0x4927, 0x4928, 0x4929, + 0x492a, 0x492b, 0x492c, 0x492d, 0x492e, 0x492f, 0x4930, 0x4931, + 0x4932, 0x4933, 0x4934, 0x4935, 0x4936, 0x4937, 0x4938, 0x4939, + 0x493a, 0x493b, 0x493c, 0x4941, 0x493d, 0x493e, 0x493f, 0x4940, + 0x4942, 0x4943, 0x4944, 0x4945, 0x4946, 0x4947, 0x4948, 0x4949, + 0x494a, 0x494b, 0x494c, 0x494d, 0x494e, 0x494f, 0x4950, 0x4951, + 0x4952, 0x4953, 0x4954, 0x4955, 0x4956, 0x4957, 0x4958, 0x4959, + 0x495a, 0x495b, 0x495c, 0x495d, 0x495e, 0x495f, 0x4960, 0x4961, + 0x4962, 0x4963, 0x4964, 0x4965, 0x4966, 0x4967, 0x4968, 0x4969, + 0x496a, 0x496b, 0x496c, 0x496d, 0x496e, 0x496f, 0x4970, 0x4971, + 0x4972, 0x4973, 0x4974, 0x4975, 0x4976, 0x4977, 0x4978, 0x4979, + 0x497a, 0x497b, 0x497c, 0x497d, 0x497e, 0x4a21, 0x4a22, 0x4a23, + 0x4a24, 0x4a25, 0x4a26, 0x4a27, 0x4a28, 0x4a29, 0x4a2a, 0x4a2b, + 0x4a2c, 0x4a2d, 0x4a2e, 0x4a2f, 0x4a30, 0x4a31, 0x4a32, 0x4a33, + 0x4a34, 0x4a35, 0x4a36, 0x4a37, 0x4a38, 0x4a39, 0x4a3a, 0x4a3b, + 0x4a3c, 0x4a3d, 0x4a3e, 0x4a3f, 0x4a40, 0x4a41, 0x4a42, 0x4a43, + 0x4a44, 0x4a45, 0x4a46, 0x4a47, 0x4a48, 0x4a49, 0x4a4a, 0x4a4b, + 0x4a4c, 0x4a4d, 0x4a4e, 0x4a4f, 0x4a50, 0x4a51, 0x4a52, 0x4a53, + 0x4a54, 0x4a55, 0x4a56, 0x4a57, 0x4a58, 0x4a59, 0x4a5a, 0x4a5b, + 0x4a5c, 0x4a5d, 0x4a5e, 0x4a5f, 0x4a60, 0x4a61, 0x4a62, 0x4a63, + 0x4a64, 0x4a65, 0x4a66, 0x4a67, 0x4a68, 0x4a69, 0x4a6a, 0x4a6b, + 0x4a6c, 0x4a6d, 0x4a6e, 0x4a6f, 0x4a70, 0x4a71, 0x4a72, 0x4a73, + 0x4a74, 0x4a75, 0x4a76, 0x4a77, 0x4a78, 0x4a79, 0x4a7a, 0x4a7b, + 0x4a7c, 0x4a7d, 0x4a7e, 0x4b21, 0x4b22, 0x4b23, 0x4b24, 0x4b25, + 0x4b26, 0x4b27, 0x4b28, 0x4b29, 0x4b2a, 0x4b2b, 0x4b2c, 0x4b2d, + 0x4b2e, 0x4b2f, 0x4b30, 0x4b31, 0x4b32, 0x4b33, 0x4b34, 0x4b35, + 0x4b36, 0x4b37, 0x4b38, 0x4b39, 0x4b3a, 0x4b3b, 0x4b3c, 0x4b3d, + 0x4b3e, 0x4b3f, 0x4b40, 0x4b41, 0x4b42, 0x4b43, 0x4b44, 0x4b45, + 0x4b46, 0x4b47, 0x4b48, 0x4b49, 0x4b4a, 0x4b4b, 0x4b4c, 0x4b4d, + 0x4b4e, 0x4b4f, 0x4b50, 0x4b51, 0x4b52, 0x4b53, 0x4b54, 0x4b55, + 0x4b56, 0x4b57, 0x4b58, 0x4b59, 0x4b5a, 0x4b5b, 0x4b5c, 0x4b5d, + 0x4b5e, 0x4b5f, 0x4b60, 0x4b61, 0x4b62, 0x4b63, 0x4b64, 0x4b65, + 0x4b66, 0x4b67, 0x4b68, 0x4b69, 0x4b6a, 0x4b6b, 0x4b6c, 0x4b6d, + 0x4b6e, 0x4b6f, 0x4b70, 0x4b71, 0x4b72, 0x4b73, 0x4b74, 0x4b75, + 0x4b76, 0x4b77, 0x4b78, 0x4b79, 0x4b7a, 0x4b7b, 0x4b7c, 0x4b7d, + 0x4b7e, 0x4c21, 0x4c22, 0x4c23, 0x4c24, 0x4c25, 0x4c26, 0x4c27, + 0x4c28, 0x4c29, 0x4c2a, 0x4c2b, 0x4c2c, 0x4c2d, 0x4c2e, 0x4c2f, + 0x4c30, 0x4c31, 0x4c32, 0x4c33, 0x4c34, 0x4c35, 0x4c36, 0x4c37, + 0x4c38, 0x4c39, 0x4c3a, 0x4c3b, 0x4c3c, 0x4c3d, 0x4c3e, 0x4c3f, + 0x4c40, 0x4c41, 0x4c42, 0x4c43, 0x4c44, 0x4c45, 0x4c46, 0x4c47, + 0x4c48, 0x4c49, 0x4c4a, 0x4c4b, 0x4c4c, 0x4c4d, 0x4c4e, 0x4c4f, + 0x4c50, 0x4c51, 0x4c52, 0x4c53, 0x4c54, 0x4c55, 0x4c56, 0x4c57, + 0x4c58, 0x4c59, 0x4c5a, 0x4c5b, 0x4c5c, 0x4c5d, 0x4c5e, 0x4c5f, + 0x4c60, 0x4c61, 0x4c62, 0x4c63, 0x4c64, 0x4c65, 0x4c66, 0x4c67, + 0x4c68, 0x4c69, 0x4c6a, 0x4c6b, 0x4c6c, 0x4c6d, 0x4c6e, 0x4c6f, + 0x4c70, 0x4c71, 0x4c72, 0x4c73, 0x4c74, 0x4c75, 0x4c76, 0x4c77, + 0x4c78, 0x4c79, 0x4c7a, 0x4c7b, 0x4c7c, 0x4c7d, 0x4c7e, 0x4d21, + 0x4d22, 0x4d23, 0x4d24, 0x4d25, 0x4d26, 0x4d27, 0x4d28, 0x4d29, + 0x4d2a, 0x4d2b, 0x4d2c, 0x4d2d, 0x4d2e, 0x4d2f, 0x4d30, 0x4d31, + 0x4d32, 0x4d33, 0x4d34, 0x4d35, 0x4d36, 0x4d37, 0x4d38, 0x4d39, + 0x4d3a, 0x4d3b, 0x4d3c, 0x4d3d, 0x4d3e, 0x4d3f, 0x4d40, 0x4d41, + 0x4d42, 0x4d43, 0x4d44, 0x4d45, 0x4d46, 0x4d47, 0x4d48, 0x4d49, + 0x4d4a, 0x4d4b, 0x4d4c, 0x4d4d, 0x4d4e, 0x4d4f, 0x4d50, 0x4d51, + 0x4d52, 0x4d53, 0x4d54, 0x4d55, 0x4d56, 0x4d57, 0x4d58, 0x4d59, + 0x4d5a, 0x4d5b, 0x4d5c, 0x4d5d, 0x4d5e, 0x4d5f, 0x4d60, 0x4d61, + 0x4d62, 0x4d63, 0x4d64, 0x4d65, 0x4d66, 0x4d67, 0x4d68, 0x4d69, + 0x4d6a, 0x4d6b, 0x4d6c, 0x4d6d, 0x4d6e, 0x4d6f, 0x4d70, 0x4d71, + 0x4d72, 0x4d73, 0x4d74, 0x4d75, 0x4d76, 0x4d77, 0x4d78, 0x4d79, + 0x4d7a, 0x4d7b, 0x4d7c, 0x4d7d, 0x4d7e, 0x4e21, 0x4e22, 0x4e24, + 0x4e25, 0x4e26, 0x4e27, 0x4e28, 0x4e29, 0x4e23, 0x4e2a, 0x4e2b, + 0x4e2c, 0x4e2d, 0x4e2e, 0x4e2f, 0x4e30, 0x4e31, 0x4e32, 0x4e33, + 0x4e34, 0x4e35, 0x4e36, 0x4e37, 0x4e38, 0x4e39, 0x4e3a, 0x4e3b, + 0x4e3c, 0x4e3d, 0x4e3e, 0x4e3f, 0x4e40, 0x4e41, 0x4e42, 0x4e43, + 0x4e44, 0x4e45, 0x4e46, 0x4e47, 0x4e48, 0x4e49, 0x4e4a, 0x4e4b, + 0x4e4c, 0x4e4d, 0x4e4e, 0x4e4f, 0x4e50, 0x4e51, 0x4e52, 0x4e53, + 0x4e54, 0x4e55, 0x4e56, 0x4e57, 0x4e58, 0x4e59, 0x4e5a, 0x4e5b, + 0x4e5c, 0x4e5d, 0x4e5e, 0x4e5f, 0x4e60, 0x4e61, 0x4e62, 0x4e63, + 0x4e64, 0x4e65, 0x4e66, 0x4e67, 0x4e68, 0x4e69, 0x4e6a, 0x4e6b, + 0x4e6c, 0x4e6d, 0x4e6e, 0x4e6f, 0x4e70, 0x4e71, 0x4e72, 0x4e73, + 0x4e74, 0x4e75, 0x4e76, 0x4e77, 0x4e78, 0x4e79, 0x4e7a, 0x4e7b, + 0x4e7c, 0x4e7d, 0x4e7e, 0x4f21, 0x4f22, 0x4f23, 0x4f24, 0x4f25, + 0x4f26, 0x4f27, 0x4f28, 0x4f29, 0x4f2a, 0x4f2b, 0x4f2c, 0x4f2d, + 0x4f2e, 0x4f2f, 0x4f30, 0x4f31, 0x4f32, 0x4f33, 0x4f34, 0x4f35, + 0x4f36, 0x4f37, 0x4f38, 0x4f39, 0x4f3a, 0x4f3b, 0x4f3c, 0x4f3d, + 0x4f3e, 0x4f3f, 0x4f40, 0x4f41, 0x4f42, 0x4f43, 0x4f44, 0x4f45, + 0x4f46, 0x4f47, 0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c, 0x4f4d, + 0x4f4e, 0x4f4f, 0x4f50, 0x4f51, 0x4f52, 0x4f53, 0x4f54, 0x4f55, + 0x4f56, 0x4f57, 0x4f58, 0x4f59, 0x4f5a, 0x4f5b, 0x4f5c, 0x4f5d, + 0x4f5e, 0x4f5f, 0x4f60, 0x4f61, 0x4f62, 0x4f63, 0x4f64, 0x4f65, + 0x4f66, 0x4f67, 0x4f68, 0x4f69, 0x4f6a, 0x4f6b, 0x4f6c, 0x4f6d, + 0x4f6e, 0x4f6f, 0x4f70, 0x4f71, 0x4f72, 0x4f74, 0x4f75, 0x4f76, + 0x4f73, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7b, 0x4f7c, 0x4f7d, + 0x4f7e, 0x5021, 0x5022, 0x5023, 0x5024, 0x5025, 0x5026, 0x5027, + 0x5028, 0x5029, 0x502a, 0x502b, 0x502c, 0x502e, 0x502f, 0x5030, + 0x5031, 0x502d, 0x5032, 0x5033, 0x5034, 0x5035, 0x5037, 0x5038, + 0x5039, 0x503a, 0x503b, 0x5036, 0x503c, 0x503d, 0x503e, 0x503f, + 0x5040, 0x5041, 0x5042, 0x5043, 0x5044, 0x5045, 0x5046, 0x5047, + 0x5048, 0x5049, 0x504a, 0x504b, 0x504c, 0x504d, 0x504e, 0x504f, + 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5055, 0x5056, 0x5057, + 0x5058, 0x5059, 0x505a, 0x505b, 0x505c, 0x505d, 0x505e, 0x505f, + 0x5060, 0x5061, 0x5062, 0x5063, 0x5064, 0x5065, 0x5066, 0x5067, + 0x5068, 0x5069, 0x506a, 0x506b, 0x506c, 0x506d, 0x506e, 0x506f, + 0x5070, 0x5071, 0x5072, 0x5073, 0x5074, 0x5075, 0x5076, 0x5077, + 0x5078, 0x5079, 0x507a, 0x507b, 0x507c, 0x507d, 0x507e, 0x5121, + 0x5122, 0x5123, 0x5124, 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, + 0x512a, 0x512b, 0x512c, 0x512d, 0x512e, 0x512f, 0x5130, 0x5131, + 0x5132, 0x5133, 0x5134, 0x5135, 0x5136, 0x5137, 0x5138, 0x5139, + 0x513a, 0x513b, 0x513c, 0x513d, 0x513e, 0x513f, 0x5140, 0x5141, + 0x5142, 0x5143, 0x5144, 0x5145, 0x5146, 0x5147, 0x5148, 0x5149, + 0x514a, 0x514b, 0x514c, 0x514d, 0x514e, 0x514f, 0x5150, 0x5151, + 0x5152, 0x5153, 0x5154, 0x5155, 0x5156, 0x5157, 0x5158, 0x5159, + 0x515a, 0x515b, 0x515c, 0x515d, 0x515e, 0x515f, 0x5160, 0x5161, + 0x5162, 0x5163, 0x5164, 0x5165, 0x5166, 0x5167, 0x5168, 0x5169, + 0x516a, 0x516b, 0x516c, 0x516d, 0x516e, 0x516f, 0x5170, 0x5171, + 0x5172, 0x5173, 0x5174, 0x5175, 0x5176, 0x5177, 0x5178, 0x5179, + 0x517a, 0x517b, 0x517c, 0x517d, 0x517e, 0x5221, 0x5222, 0x5223, + 0x5224, 0x5225, 0x5226, 0x5227, 0x5228, 0x5229, 0x522a, 0x522b, + 0x522c, 0x522d, 0x522e, 0x522f, 0x5230, 0x5231, 0x5232, 0x5233, + 0x5234, 0x5235, 0x5236, 0x5237, 0x5238, 0x5239, 0x523a, 0x523b, + 0x523c, 0x523d, 0x523e, 0x523f, 0x5240, 0x5241, 0x5242, 0x5243, + 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524a, 0x524b, + 0x524c, 0x524d, 0x524e, 0x524f, 0x5250, 0x5251, 0x5252, 0x5253, + 0x5254, 0x5255, 0x5256, 0x5257, 0x5258, 0x5259, 0x525a, 0x525b, + 0x525c, 0x525d, 0x525e, 0x525f, 0x5260, 0x5261, 0x5262, 0x5263, + 0x5264, 0x5265, 0x5266, 0x5267, 0x5268, 0x5269, 0x526a, 0x526b, + 0x526c, 0x526d, 0x526e, 0x526f, 0x5270, 0x5271, 0x5272, 0x5273, + 0x5274, 0x5276, 0x5277, 0x5278, 0x5275, 0x5279, 0x527a, 0x527b, + 0x527c, 0x527d, 0x527e, 0x5321, 0x5322, 0x5323, 0x5324, 0x5325, + 0x5326, 0x5327, 0x5328, 0x5329, 0x532a, 0x532b, 0x532c, 0x532d, + 0x532e, 0x532f, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334, 0x5335, + 0x5336, 0x5337, 0x5338, 0x5339, 0x533a, 0x533b, 0x533c, 0x533d, + 0x533e, 0x533f, 0x5340, 0x5341, 0x5342, 0x5343, 0x5344, 0x5345, + 0x5346, 0x5347, 0x5348, 0x5349, 0x534a, 0x534b, 0x534c, 0x534d, + 0x534e, 0x534f, 0x5350, 0x5351, 0x5352, 0x5353, 0x5354, 0x5355, + 0x5356, 0x5357, 0x5358, 0x5359, 0x535a, 0x535b, 0x535c, 0x535d, + 0x535e, 0x535f, 0x5360, 0x5361, 0x5362, 0x5363, 0x5364, 0x5365, + 0x5366, 0x5367, 0x5368, 0x5369, 0x536a, 0x536b, 0x536c, 0x536d, + 0x536e, 0x536f, 0x5370, 0x5371, 0x5372, 0x5373, 0x5374, 0x5375, + 0x5376, 0x5377, 0x5378, 0x5379, 0x537a, 0x537b, 0x537c, 0x537d, + 0x537e, 0x5421, 0x5422, 0x5423, 0x5424, 0x5425, 0x5426, 0x5427, + 0x5428, 0x5429, 0x542a, 0x542b, 0x542c, 0x542d, 0x542e, 0x542f, + 0x5430, 0x5431, 0x5432, 0x5434, 0x5435, 0x5436, 0x5437, 0x5438, + 0x5439, 0x543a, 0x543b, 0x543c, 0x543d, 0x543e, 0x5433, 0x543f, + 0x5440, 0x5441, 0x5442, 0x5443, 0x5444, 0x5445, 0x5446, 0x5447, + 0x5448, 0x5449, 0x544a, 0x544b, 0x544c, 0x544d, 0x544e, 0x544f, + 0x5450, 0x5451, 0x5452, 0x5453, 0x5454, 0x5455, 0x5456, 0x5457, + 0x5458, 0x5459, 0x545a, 0x545b, 0x545c, 0x545d, 0x545e, 0x545f, + 0x5460, 0x5461, 0x5462, 0x5463, 0x5464, 0x5465, 0x5466, 0x5467, + 0x5468, 0x5469, 0x546a, 0x546c, 0x546b, 0x546d, 0x546e, 0x546f, + 0x5470, 0x5471, 0x5472, 0x5473, 0x5474, 0x5475, 0x5476, 0x5477, + 0x5478, 0x5479, 0x547a, 0x547b, 0x547c, 0x547d, 0x547e, 0x5521, + 0x5522, 0x5523, 0x5524, 0x5525, 0x5526, 0x5527, 0x5528, 0x5529, + 0x552a, 0x552b, 0x552c, 0x552d, 0x552e, 0x552f, 0x5530, 0x5531, + 0x5532, 0x5533, 0x5534, 0x5535, 0x5536, 0x5537, 0x5538, 0x5539, + 0x553a, 0x553b, 0x553c, 0x553d, 0x553e, 0x553f, 0x5540, 0x5541, + 0x5542, 0x5543, 0x5544, 0x5545, 0x5546, 0x5547, 0x5548, 0x5549, + 0x554a, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5550, 0x5551, + 0x5552, 0x5553, 0x5554, 0x5555, 0x5556, 0x5557, 0x5558, 0x5559, + 0x555a, 0x555b, 0x555c, 0x555d, 0x555e, 0x555f, 0x5560, 0x5561, + 0x5562, 0x5563, 0x5564, 0x5565, 0x5566, 0x5567, 0x5568, 0x5569, + 0x556a, 0x556b, 0x556c, 0x556d, 0x556e, 0x556f, 0x5570, 0x5571, + 0x5572, 0x5573, 0x5574, 0x5575, 0x5576, 0x5577, 0x5578, 0x5579, + 0x557a, 0x557b, 0x557c, 0x557d, 0x557e, 0x5621, 0x5622, 0x5623, + 0x5624, 0x5625, 0x5626, 0x5627, 0x5628, 0x5629, 0x562a, 0x562b, + 0x562c, 0x562d, 0x562e, 0x562f, 0x5630, 0x5631, 0x5632, 0x5633, + 0x5634, 0x5635, 0x5636, 0x5637, 0x5638, 0x5639, 0x563a, 0x563b, + 0x563c, 0x563d, 0x563e, 0x563f, 0x5640, 0x5641, 0x5642, 0x5643, + 0x5644, 0x5645, 0x5647, 0x5648, 0x5649, 0x564a, 0x564b, 0x5646, + 0x564c, 0x564d, 0x564e, 0x564f, 0x5650, 0x5651, 0x5652, 0x5653, + 0x5654, 0x5656, 0x5657, 0x5658, 0x5655, 0x5659, 0x565a, 0x565b, + 0x565c, 0x565d, 0x565e, 0x565f, 0x5660, 0x5661, 0x5662, 0x5663, + 0x5664, 0x5665, 0x5666, 0x5667, 0x5668, 0x5669, 0x566a, 0x566b, + 0x566c, 0x566d, 0x566e, 0x566f, 0x5670, 0x5671, 0x5672, 0x5673, + 0x5674, 0x5675, 0x5676, 0x5677, 0x5678, 0x5679, 0x567a, 0x567b, + 0x567c, 0x567d, 0x567e, 0x5721, 0x5722, 0x5723, 0x5724, 0x5725, + 0x5726, 0x5727, 0x5728, 0x5729, 0x572a, 0x572b, 0x572c, 0x572d, + 0x572e, 0x572f, 0x5730, 0x5731, 0x5732, 0x5733, 0x5734, 0x5735, + 0x5736, 0x5737, 0x5738, 0x5739, 0x573a, 0x573b, 0x573c, 0x573d, + 0x573e, 0x573f, 0x5740, 0x5741, 0x5742, 0x5743, 0x5744, 0x5745, + 0x5746, 0x5747, 0x5748, 0x5749, 0x574a, 0x574b, 0x574c, 0x574d, + 0x574e, 0x574f, 0x5750, 0x5751, 0x5752, 0x5753, 0x5754, 0x5755, + 0x5756, 0x5757, 0x5758, 0x5759, 0x575a, 0x575b, 0x575c, 0x575d, + 0x575e, 0x575f, 0x5760, 0x5761, 0x5762, 0x5764, 0x5765, 0x5766, + 0x5767, 0x5768, 0x5769, 0x576a, 0x576b, 0x576c, 0x576d, 0x576e, + 0x576f, 0x5770, 0x5771, 0x5772, 0x5773, 0x5774, 0x5775, 0x5776, + 0x5777, 0x5778, 0x5779, 0x583e, 0x5763, 0x577a, 0x577b, 0x577c, + 0x577d, 0x577e, 0x5821, 0x5822, 0x5823, 0x5824, 0x5825, 0x5826, + 0x5827, 0x5828, 0x5829, 0x582a, 0x582b, 0x582c, 0x582d, 0x582e, + 0x582f, 0x5830, 0x5831, 0x5832, 0x5833, 0x584c, 0x5834, 0x5835, + 0x5836, 0x5837, 0x5838, 0x5839, 0x583a, 0x583b, 0x583c, 0x583d, + 0x583f, 0x5840, 0x5841, 0x5842, 0x5843, 0x5844, 0x5845, 0x5846, + 0x5847, 0x5848, 0x5849, 0x584a, 0x584b, 0x584d, 0x584e, 0x584f, + 0x5850, 0x5851, 0x5852, 0x5853, 0x5854, 0x5855, 0x5856, 0x5857, + 0x5858, 0x5859, 0x585a, 0x585b, 0x585c, 0x585d, 0x585e, 0x585f, + 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, 0x5865, 0x5866, 0x5867, + 0x5868, 0x5869, 0x586a, 0x586b, 0x586c, 0x586d, 0x586e, 0x586f, + 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877, + 0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587e, 0x5921, + 0x5922, 0x5923, 0x5924, 0x5925, 0x5926, 0x5927, 0x5928, 0x592a, + 0x592b, 0x592c, 0x592d, 0x592e, 0x592f, 0x5930, 0x5931, 0x5932, + 0x5933, 0x5934, 0x5935, 0x5936, 0x5937, 0x5938, 0x5939, 0x593a, + 0x593b, 0x593c, 0x5929, 0x593d, 0x593e, 0x593f, 0x5940, 0x5941, + 0x5942, 0x5943, 0x5944, 0x5945, 0x5946, 0x5947, 0x5948, 0x5949, + 0x594a, 0x594b, 0x594c, 0x594d, 0x594e, 0x594f, 0x5950, 0x5951, + 0x5952, 0x5953, 0x5954, 0x5955, 0x5956, 0x5957, 0x5958, 0x5959, + 0x595a, 0x595b, 0x595c, 0x595d, 0x595e, 0x595f, 0x5960, 0x5961, + 0x5962, 0x5963, 0x5964, 0x5965, 0x5966, 0x5974, 0x5967, 0x5968, + 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f, 0x5970, + 0x5971, 0x5972, 0x5973, 0x5975, 0x5976, 0x5977, 0x5978, 0x5979, + 0x597a, 0x597b, 0x597c, 0x597d, 0x597e, 0x5a21, 0x5a22, 0x5a23, + 0x5a24, 0x5a25, 0x5a26, 0x5a27, 0x5a28, 0x5a29, 0x5a2a, 0x5a2b, + 0x5a2c, 0x5a2d, 0x5a2e, 0x5a2f, 0x5a30, 0x5a31, 0x5a32, 0x5a33, + 0x5a34, 0x5a35, 0x5a36, 0x3866, 0x5a37, 0x5a38, 0x5a39, 0x5a3a, + 0x5a3b, 0x5a3c, 0x5a3d, 0x5a3e, 0x5a3f, 0x5a40, 0x5a41, 0x5a42, + 0x5a43, 0x5a44, 0x5a45, 0x5a46, 0x5a47, 0x5a48, 0x5a49, 0x5a4a, + 0x5a4b, 0x5a6d, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f, 0x5a50, 0x5a51, + 0x5a52, 0x5a53, 0x5a54, 0x5a55, 0x5a56, 0x5a57, 0x5a58, 0x5a59, + 0x5a5a, 0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f, 0x5a60, 0x5a61, + 0x5a62, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a67, 0x5a68, 0x5a69, + 0x5a6a, 0x5a6b, 0x5a6c, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71, 0x5a72, + 0x5a73, 0x5a74, 0x5a75, 0x5a76, 0x5a77, 0x5a78, 0x5a79, 0x5a7a, + 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5b21, 0x5b22, 0x5b23, 0x5b24, + 0x5b25, 0x5b26, 0x5b27, 0x5b28, 0x5b29, 0x5b2a, 0x5b2b, 0x5b2c, + 0x5b2d, 0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b32, 0x5b33, 0x5b34, + 0x5b35, 0x5b36, 0x5b37, 0x5b38, 0x5b39, 0x5b3a, 0x5b3b, 0x5b3c, + 0x5b3d, 0x5b3e, 0x5b3f, 0x5b40, 0x5b41, 0x5b42, 0x5b43, 0x5b44, + 0x5b45, 0x5b46, 0x5b47, 0x5b48, 0x5b49, 0x5b4a, 0x5b4b, 0x5b4c, + 0x5b4d, 0x5b4e, 0x5b4f, 0x5b50, 0x5b51, 0x5b52, 0x5b53, 0x5b54, + 0x5b55, 0x5b56, 0x5b57, 0x5b58, 0x5b59, 0x5b5a, 0x5b5b, 0x5b5c, + 0x5b5d, 0x5b5e, 0x5b5f, 0x5b60, 0x5b61, 0x5b62, 0x5b63, 0x5b64, + 0x5b65, 0x5b66, 0x5b67, 0x5b68, 0x5b69, 0x5b6a, 0x5b6b, 0x5b6c, + 0x5b6d, 0x5b6e, 0x5b70, 0x5b71, 0x5b72, 0x5b73, 0x5b6f, 0x5b74, + 0x5b75, 0x5b76, 0x5b77, 0x5b78, 0x5b79, 0x5b7a, 0x5b7b, 0x5b7c, + 0x5b7d, 0x5b7e, 0x5c21, 0x5c22, 0x5c23, 0x5c24, 0x5c25, 0x5c26, + 0x5c27, 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, 0x5c2c, 0x5c2d, 0x5c2e, + 0x5c2f, 0x5c30, 0x5c31, 0x5c32, 0x5c33, 0x5c34, 0x5c35, 0x5c36, + 0x5c37, 0x5c38, 0x5c39, 0x5c3a, 0x5c3b, 0x5c3c, 0x5c3d, 0x5c3e, + 0x5c3f, 0x5c40, 0x5c41, 0x5c42, 0x5c43, 0x5c44, 0x5c45, 0x5c46, + 0x5c47, 0x5c48, 0x5c49, 0x5c4a, 0x5c4b, 0x5c4c, 0x5c4d, 0x5c4e, + 0x5c4f, 0x5c50, 0x5c51, 0x5c52, 0x5c53, 0x5c54, 0x5c55, 0x5c56, + 0x5c57, 0x5c58, 0x5c59, 0x5c5a, 0x5c5b, 0x5c5c, 0x5c5d, 0x5c5e, + 0x5c5f, 0x5c60, 0x5c61, 0x5c62, 0x5c63, 0x5c64, 0x5c65, 0x5c66, + 0x5c67, 0x5c68, 0x5c69, 0x5c6a, 0x5c6b, 0x5c6c, 0x5c6d, 0x5c6e, + 0x5c6f, 0x5c70, 0x5c71, 0x5c72, 0x5c73, 0x5c74, 0x5c75, 0x5c76, + 0x5c77, 0x5c78, 0x5c79, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c7e, + 0x5d21, 0x5d22, 0x5d23, 0x5d24, 0x5d25, 0x5d26, 0x5d27, 0x5d28, + 0x5d29, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2d, 0x5d2e, 0x5d2f, 0x5d30, + 0x5d31, 0x5d32, 0x5d33, 0x5d34, 0x5d35, 0x5d36, 0x5d37, 0x5d38, + 0x5d39, 0x5d3a, 0x5d3b, 0x5d3c, 0x5d3d, 0x5d3e, 0x5d3f, 0x5d40, + 0x5d41, 0x5d42, 0x5d43, 0x5d44, 0x5d45, 0x5d46, 0x5d47, 0x5d48, + 0x5d49, 0x5d4a, 0x5d4b, 0x5d4c, 0x5d4d, 0x5d4e, 0x5d4f, 0x5d50, + 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, 0x5d57, 0x5d58, + 0x5d59, 0x5d5a, 0x5d5b, 0x5d5c, 0x5d5d, 0x5d5e, 0x5d5f, 0x5d60, + 0x5d61, 0x5d62, 0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67, 0x5d68, + 0x5d69, 0x5d6a, 0x5d6b, 0x5d6c, 0x5d6d, 0x5d6e, 0x5d6f, 0x5d70, + 0x5d71, 0x5d72, 0x5d73, 0x5d74, 0x5d75, 0x5d76, 0x5d77, 0x5d78, + 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, 0x5e21, 0x5e22, + 0x5e23, 0x5e24, 0x5e25, 0x5e26, 0x5e27, 0x5e28, 0x5e29, 0x5e2a, + 0x5e2b, 0x5e2c, 0x5e2d, 0x5e2e, 0x5e2f, 0x5e30, 0x5e31, 0x5e32, + 0x5e33, 0x5e34, 0x5e35, 0x5e36, 0x5e37, 0x5e38, 0x5e39, 0x5e3f, + 0x5e3a, 0x5e3b, 0x5e3c, 0x5e3d, 0x5e3e, 0x5e40, 0x5e41, 0x5e42, + 0x5e43, 0x5e44, 0x5e45, 0x5e46, 0x5e47, 0x5e48, 0x5e49, 0x5e4e, + 0x5e4a, 0x5e4b, 0x5e4c, 0x5e4d, 0x5e4f, 0x5e50, 0x5e51, 0x5e52, + 0x5e53, 0x5e54, 0x5e55, 0x5e56, 0x5e57, 0x5e58, 0x5e59, 0x5e5a, + 0x5e5b, 0x5e5c, 0x5e5d, 0x5e5e, 0x5e5f, 0x5e60, 0x5e61, 0x5e62, + 0x5e63, 0x5e64, 0x5e65, 0x5e66, 0x5e67, 0x5e68, 0x5e69, 0x5e6a, + 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, 0x5e6f, 0x5e72, 0x5e70, 0x5e71, + 0x5e73, 0x5e74, 0x5e75, 0x5e76, 0x5e77, 0x5e78, 0x5e79, 0x5e7a, + 0x5e7b, 0x5e7c, 0x5e7d, 0x5e7e, 0x5f21, 0x5f22, 0x5f23, 0x5f24, + 0x5f25, 0x5f26, 0x5f27, 0x5f28, 0x5f29, 0x5f2a, 0x5f2b, 0x5f2c, + 0x5f2d, 0x5f2e, 0x5f2f, 0x5f30, 0x5f32, 0x5f31, 0x5f33, 0x5f34, + 0x5f35, 0x5f36, 0x5f37, 0x5f38, 0x5f39, 0x5f3a, 0x5f3b, 0x5f3c, + 0x5f3d, 0x5f3e, 0x5f3f, 0x5f40, 0x5f41, 0x5f42, 0x5f43, 0x5f44, + 0x5f45, 0x5f46, 0x5f47, 0x5f48, 0x5f49, 0x5f4a, 0x5f4b, 0x5f4c, + 0x5f4d, 0x5f4e, 0x5f4f, 0x5f50, 0x5f51, 0x5f52, 0x5f53, 0x5f54, + 0x5f55, 0x5f56, 0x5f57, 0x5f58, 0x5f59, 0x5f5a, 0x5f5b, 0x5f5c, + 0x5f5d, 0x5f6f, 0x5f5e, 0x5f5f, 0x5f60, 0x5f61, 0x5f62, 0x5f63, + 0x5f64, 0x5f65, 0x5f66, 0x5f67, 0x5f68, 0x5f69, 0x5f6a, 0x5f6b, + 0x5f6c, 0x5f6d, 0x5f6e, 0x5f70, 0x5f71, 0x5f72, 0x5f73, 0x5f74, + 0x5f75, 0x5f76, 0x5f77, 0x5f78, 0x5f79, 0x5f7a, 0x5f7b, 0x5f7c, + 0x5f7d, 0x5f7e, 0x6021, 0x6022, 0x6023, 0x6024, 0x6025, 0x6026, + 0x6027, 0x6028, 0x6029, 0x602a, 0x602b, 0x602c, 0x602d, 0x602e, + 0x602f, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6035, 0x6036, + 0x6037, 0x6038, 0x6039, 0x603a, 0x603b, 0x603c, 0x603d, 0x603e, + 0x603f, 0x6040, 0x6041, 0x6042, 0x6043, 0x6044, 0x6045, 0x6046, + 0x6047, 0x6048, 0x6049, 0x604a, 0x604b, 0x604c, 0x604d, 0x604e, + 0x604f, 0x6050, 0x6051, 0x6052, 0x6053, 0x6054, 0x6055, 0x6056, + 0x6057, 0x6058, 0x6059, 0x605a, 0x605b, 0x605c, 0x605d, 0x6064, + 0x605e, 0x605f, 0x6060, 0x6061, 0x6062, 0x6063, 0x6065, 0x6066, + 0x6067, 0x6068, 0x6069, 0x606a, 0x606b, 0x606c, 0x606d, 0x606e, + 0x606f, 0x6070, 0x6071, 0x6072, 0x6073, 0x6074, 0x6075, 0x6076, + 0x6077, 0x6078, 0x6079, 0x607a, 0x607b, 0x607c, 0x607d, 0x607e, + 0x6121, 0x6122, 0x6123, 0x6124, 0x6125, 0x6126, 0x6127, 0x6128, + 0x6129, 0x612a, 0x612b, 0x612c, 0x612d, 0x612e, 0x612f, 0x6130, + 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, 0x6137, 0x6138, + 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, 0x613f, 0x6140, + 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146, 0x6147, 0x6148, + 0x6149, 0x614a, 0x614b, 0x614c, 0x614d, 0x614e, 0x614f, 0x6150, + 0x6151, 0x6152, 0x6154, 0x6155, 0x6156, 0x6153, 0x6157, 0x6158, + 0x6159, 0x615a, 0x615b, 0x615c, 0x615d, 0x615e, 0x615f, 0x6160, + 0x6161, 0x6162, 0x6163, 0x6164, 0x6165, 0x6166, 0x6167, 0x6168, + 0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f, 0x6170, + 0x6171, 0x6172, 0x6173, 0x6174, 0x6175, 0x6176, 0x6177, 0x6178, + 0x6179, 0x617a, 0x617b, 0x617d, 0x617e, 0x6221, 0x6222, 0x6223, + 0x6224, 0x617c, 0x622d, 0x6225, 0x6226, 0x6227, 0x6228, 0x6229, + 0x622a, 0x622b, 0x622c, 0x622f, 0x6230, 0x6231, 0x6232, 0x622e, + 0x6233, 0x6234, 0x6235, 0x6236, 0x6237, 0x6238, 0x6239, 0x623a, + 0x623b, 0x623c, 0x623d, 0x623e, 0x623f, 0x6240, 0x6241, 0x6242, + 0x6243, 0x6245, 0x6246, 0x6244, 0x6247, 0x6248, 0x6249, 0x624a, + 0x624b, 0x624c, 0x624d, 0x624e, 0x624f, 0x6250, 0x6251, 0x6252, + 0x6253, 0x6254, 0x6255, 0x6256, 0x6257, 0x6258, 0x6259, 0x625a, + 0x625b, 0x625c, 0x625d, 0x625e, 0x625f, 0x6260, 0x6261, 0x6262, + 0x6263, 0x6264, 0x6265, 0x6266, 0x6267, 0x6268, 0x6269, 0x626a, + 0x626b, 0x626c, 0x626d, 0x626e, 0x626f, 0x6270, 0x6271, 0x6272, + 0x6273, 0x6274, 0x6275, 0x6276, 0x6277, 0x6278, 0x6279, 0x627a, + 0x627b, 0x627c, 0x627d, 0x627e, 0x6321, 0x6322, 0x6323, 0x6324, + 0x6325, 0x6326, 0x6327, 0x6328, 0x6329, 0x632a, 0x632b, 0x632c, + 0x632d, 0x632e, 0x632f, 0x6330, 0x6331, 0x6332, 0x6333, 0x6334, + 0x6335, 0x6336, 0x6337, 0x6338, 0x6339, 0x633a, 0x633b, 0x633c, + 0x633d, 0x633e, 0x633f, 0x6340, 0x6341, 0x6342, 0x6343, 0x6344, + 0x6345, 0x6346, 0x6347, 0x6348, 0x6349, 0x634a, 0x634b, 0x634c, + 0x634d, 0x634e, 0x634f, 0x6350, 0x6351, 0x6352, 0x6353, 0x6354, + 0x6355, 0x6356, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b, 0x635c, + 0x635d, 0x635e, 0x635f, 0x6360, 0x6361, 0x6362, 0x6363, 0x6364, + 0x6365, 0x6366, 0x6367, 0x6368, 0x6369, 0x636a, 0x636b, 0x636c, + 0x636d, 0x636e, 0x636f, 0x6370, 0x6371, 0x6372, 0x6373, 0x6374, + 0x6375, 0x6376, 0x6377, 0x6378, 0x6379, 0x637a, 0x637b, 0x637c, + 0x637d, 0x637e, 0x6421, 0x6422, 0x6423, 0x6424, 0x6425, 0x6426, + 0x6427, 0x6428, 0x6429, 0x642a, 0x642b, 0x642c, 0x642d, 0x642e, + 0x642f, 0x6430, 0x6431, 0x6432, 0x6433, 0x6434, 0x6435, 0x6436, + 0x6437, 0x6438, 0x6439, 0x643a, 0x643b, 0x643c, 0x643d, 0x643e, + 0x643f, 0x6440, 0x6441, 0x6442, 0x6443, 0x6444, 0x6445, 0x6446, + 0x6447, 0x6448, 0x6449, 0x644a, 0x644b, 0x644c, 0x644d, 0x644e, + 0x644f, 0x6450, 0x6451, 0x6452, 0x6453, 0x6454, 0x6455, 0x6456, + 0x6457, 0x6458, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d, 0x645e, + 0x645f, 0x6460, 0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, + 0x6467, 0x6468, 0x6469, 0x646a, 0x646b, 0x646c, 0x646d, 0x646e, + 0x646f, 0x6470, 0x6471, 0x6472, 0x6473, 0x6474, 0x6475, 0x6476, + 0x6477, 0x6478, 0x6479, 0x647a, 0x647b, 0x647c, 0x647d, 0x647e, + 0x6521, 0x6522, 0x6523, 0x6524, 0x6525, 0x6526, 0x6527, 0x6528, + 0x6529, 0x652a, 0x652b, 0x652c, 0x652d, 0x652e, 0x652f, 0x6530, + 0x6531, 0x6532, 0x6533, 0x6534, 0x6535, 0x653b, 0x6536, 0x6537, + 0x6538, 0x6539, 0x653a, 0x653c, 0x653d, 0x653e, 0x653f, 0x6540, + 0x6541, 0x6542, 0x6543, 0x6544, 0x6545, 0x6546, 0x6547, 0x6548, + 0x6549, 0x654a, 0x654b, 0x654c, 0x654d, 0x654f, 0x6550, 0x654e, + 0x6551, 0x6552, 0x6553, 0x6554, 0x6555, 0x6556, 0x6557, 0x6558, + 0x6559, 0x655a, 0x655b, 0x655c, 0x655d, 0x655e, 0x655f, 0x6560, + 0x6561, 0x6562, 0x6563, 0x6564, 0x6565, 0x6566, 0x6568, 0x6567, + 0x6569, 0x656a, 0x656b, 0x656c, 0x656d, 0x656e, 0x656f, 0x6570, + 0x6571, 0x6572, 0x6573, 0x6574, 0x6575, 0x6576, 0x6577, 0x6578, + 0x6579, 0x657a, 0x657c, 0x657b, 0x657d, 0x657e, 0x6621, 0x6622, + 0x6623, 0x6624, 0x6625, 0x6626, 0x6627, 0x6628, 0x6629, 0x662a, + 0x662b, 0x662c, 0x662d, 0x662e, 0x662f, 0x6630, 0x6631, 0x6632, + 0x6633, 0x6634, 0x6635, 0x6636, 0x6637, 0x6638, 0x6639, 0x663a, + 0x663b, 0x663c, 0x663d, 0x663e, 0x663f, 0x6640, 0x6641, 0x6642, + 0x6643, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648, 0x6649, 0x664a, + 0x664b, 0x664c, 0x664d, 0x664e, 0x664f, 0x6650, 0x6651, 0x6652, + 0x6653, 0x6654, 0x6655, 0x6656, 0x6657, 0x6658, 0x6659, 0x665a, + 0x665b, 0x665c, 0x665d, 0x665e, 0x665f, 0x6660, 0x6661, 0x6662, + 0x6663, 0x6664, 0x6665, 0x6666, 0x6667, 0x6668, 0x6669, 0x666a, + 0x666b, 0x666c, 0x666d, 0x666e, 0x666f, 0x6670, 0x6671, 0x6672, + 0x6673, 0x6675, 0x6676, 0x6677, 0x6678, 0x6679, 0x667a, 0x667b, + 0x667c, 0x667d, 0x667e, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, + 0x6726, 0x6727, 0x6728, 0x6729, 0x672a, 0x672b, 0x672c, 0x672d, + 0x672e, 0x672f, 0x6730, 0x6731, 0x6732, 0x6733, 0x6734, 0x6735, + 0x6736, 0x6737, 0x6738, 0x6739, 0x673a, 0x673b, 0x673c, 0x673d, + 0x673e, 0x673f, 0x6740, 0x6741, 0x6742, 0x6743, 0x6744, 0x6745, + 0x6746, 0x6747, 0x6748, 0x6749, 0x674a, 0x674b, 0x674c, 0x674d, + 0x674e, 0x674f, 0x6750, 0x6751, 0x6752, 0x6753, 0x6754, 0x6755, + 0x6756, 0x6757, 0x6758, 0x6759, 0x675a, 0x675b, 0x675c, 0x675d, + 0x675e, 0x675f, 0x6760, 0x6761, 0x6762, 0x6763, 0x6764, 0x6765, + 0x6766, 0x676a, 0x6767, 0x6768, 0x6769, 0x676b, 0x676c, 0x676d, + 0x676e, 0x676f, 0x6770, 0x6771, 0x6772, 0x6773, 0x6774, 0x6776, + 0x6777, 0x6778, 0x6779, 0x6775, 0x677a, 0x677b, 0x677c, 0x677d, + 0x6828, 0x677e, 0x6821, 0x6822, 0x6823, 0x6824, 0x6825, 0x6826, + 0x6827, 0x6829, 0x682a, 0x682b, 0x682c, 0x682d, 0x682e, 0x682f, + 0x6830, 0x6831, 0x6832, 0x6833, 0x6834, 0x6835, 0x6836, 0x6837, + 0x6838, 0x6839, 0x683a, 0x683b, 0x683c, 0x683d, 0x683e, 0x683f, + 0x6840, 0x6841, 0x6842, 0x6843, 0x6844, 0x6845, 0x6846, 0x6847, + 0x6848, 0x6849, 0x684a, 0x684b, 0x684c, 0x684d, 0x684e, 0x684f, + 0x6850, 0x6851, 0x6852, 0x6853, 0x6854, 0x6855, 0x6856, 0x6857, + 0x6858, 0x6859, 0x685a, 0x685b, 0x685c, 0x685d, 0x685e, 0x685f, + 0x6860, 0x6861, 0x6862, 0x6863, 0x6864, 0x6865, 0x6866, 0x6867, + 0x6868, 0x6869, 0x686a, 0x686b, 0x686c, 0x686d, 0x686e, 0x686f, + 0x6870, 0x6871, 0x6872, 0x6873, 0x6874, 0x6875, 0x6876, 0x6877, + 0x6878, 0x6879, 0x687a, 0x687b, 0x687c, 0x687d, 0x687e, 0x6921, + 0x6922, 0x6923, 0x6924, 0x6925, 0x6926, 0x6927, 0x6928, 0x6929, + 0x692a, 0x692b, 0x692c, 0x692d, 0x692e, 0x692f, 0x6930, 0x6931, + 0x6932, 0x6933, 0x6934, 0x6935, 0x6936, 0x6937, 0x6938, 0x6939, + 0x693a, 0x693b, 0x693c, 0x693d, 0x693e, 0x693f, 0x6940, 0x6941, + 0x6942, 0x6943, 0x6944, 0x6945, 0x6946, 0x6947, 0x6948, 0x6949, + 0x694a, 0x694c, 0x694d, 0x694b, 0x694e, 0x694f, 0x6950, 0x6951, + 0x6952, 0x6953, 0x6954, 0x6955, 0x6956, 0x6957, 0x6958, 0x6959, + 0x695a, 0x695b, 0x695c, 0x695d, 0x695e, 0x695f, 0x6960, 0x6961, + 0x6962, 0x6963, 0x6964, 0x6965, 0x6966, 0x6967, 0x6968, 0x6969, + 0x696a, 0x696b, 0x696c, 0x696d, 0x696e, 0x696f, 0x6970, 0x6971, + 0x6972, 0x6973, 0x6974, 0x6975, 0x6976, 0x6977, 0x6978, 0x6979, + 0x697a, 0x697b, 0x697c, 0x697d, 0x697e, 0x6a21, 0x6a22, 0x6a23, + 0x6a24, 0x6a25, 0x6a26, 0x6a27, 0x6a28, 0x6a29, 0x6a2a, 0x6a2b, + 0x6a2c, 0x6a2d, 0x6a2e, 0x6a2f, 0x6a30, 0x6a31, 0x6a32, 0x6a33, + 0x6a34, 0x6a35, 0x6a36, 0x6a37, 0x6a38, 0x6a39, 0x6a3a, 0x6a3b, + 0x6a3c, 0x6a3d, 0x6a3e, 0x6a3f, 0x6a40, 0x6a41, 0x6a42, 0x6a43, + 0x6a44, 0x6a45, 0x6a46, 0x6a47, 0x6a48, 0x6a49, 0x6a4a, 0x6a4b, + 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f, 0x6a50, 0x6a51, 0x6a52, 0x6a53, + 0x6a54, 0x6a55, 0x6a56, 0x6a57, 0x6a58, 0x6a59, 0x6a5a, 0x6a5b, + 0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f, 0x6a60, 0x6a61, 0x6a62, 0x6a63, + 0x6a64, 0x6a65, 0x6a66, 0x6a67, 0x6a68, 0x6a69, 0x6a6a, 0x6a6b, + 0x6a6c, 0x6a6d, 0x6a6e, 0x6a6f, 0x6a70, 0x6a71, 0x6a72, 0x6a73, + 0x6a74, 0x6a75, 0x6a76, 0x6a77, 0x6a78, 0x6a79, 0x6a7a, 0x6a7b, + 0x6a7c, 0x6a7d, 0x6a7e, 0x6b21, 0x6b22, 0x6b23, 0x6b24, 0x6b25, + 0x6b26, 0x6b27, 0x6b28, 0x6b29, 0x6b2a, 0x6b2b, 0x6b2c, 0x6b2d, + 0x6b2e, 0x6b2f, 0x6b30, 0x6b31, 0x6b32, 0x6b33, 0x6b34, 0x6b35, + 0x6b36, 0x6b37, 0x6b38, 0x6b39, 0x6b3a, 0x6b3b, 0x6b3c, 0x6b3d, + 0x6b3e, 0x6b3f, 0x6b40, 0x6b41, 0x6b42, 0x6b43, 0x6b44, 0x6b45, + 0x6b46, 0x6b47, 0x6b48, 0x6b49, 0x6b50, 0x6b4a, 0x6b4b, 0x6b4c, + 0x6b4d, 0x6b52, 0x6b4e, 0x6b4f, 0x6b51, 0x6b53, 0x6b54, 0x6b55, + 0x6b56, 0x6b57, 0x6b58, 0x6b59, 0x6b5a, 0x6b5b, 0x6b5c, 0x6b5e, + 0x6b5d, 0x6b5f, 0x6b60, 0x6b61, 0x6b62, 0x6b63, 0x6b64, 0x6b65, + 0x6b66, 0x6b67, 0x6b68, 0x6b69, 0x6b6a, 0x6b6b, 0x6b6d, 0x6b6e, + 0x6b6f, 0x6b6c, 0x6b70, 0x6b71, 0x6b72, 0x6b73, 0x6b74, 0x6b76, + 0x6b75, 0x6b77, 0x6b78, 0x6b79, 0x6b7a, 0x6b7b, 0x6b7c, 0x6b7d, + 0x6b7e, 0x6c21, 0x6c22, 0x6c23, 0x6c24, 0x6c25, 0x6c26, 0x6c27, + 0x6c28, 0x6c29, 0x6c2a, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c2e, 0x6c2f, + 0x6c30, 0x6c31, 0x6c32, 0x6c33, 0x6c34, 0x6c35, 0x6c36, 0x6c37, + 0x6c38, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3d, 0x6c3e, 0x6c3f, + 0x6c40, 0x6c41, 0x6c42, 0x6c43, 0x6c44, 0x6c45, 0x6c46, 0x6c47, + 0x6c48, 0x6c49, 0x6c4a, 0x6c4b, 0x6c4c, 0x6c4e, 0x6c4f, 0x6c4d, + 0x6c50, 0x6c51, 0x6c52, 0x6c53, 0x6c54, 0x6c55, 0x6c56, 0x6c57, + 0x6c58, 0x6c59, 0x6c5a, 0x6c5b, 0x6c5c, 0x6c5d, 0x6c5e, 0x6c5f, + 0x6c60, 0x6c61, 0x6c62, 0x6c63, 0x6c64, 0x6c65, 0x6c66, 0x6c67, + 0x6c68, 0x6c69, 0x6c6a, 0x6c6b, 0x6c6c, 0x6c6d, 0x6c6e, 0x6c6f, + 0x6c70, 0x6c71, 0x6c72, 0x6c73, 0x6c74, 0x6c75, 0x6c76, 0x6c77, + 0x6c78, 0x6c79, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7d, 0x6c7e, 0x6d21, + 0x6d22, 0x6d23, 0x6d24, 0x6d25, 0x6d26, 0x6d27, 0x6d28, 0x6d29, + 0x6d2a, 0x6d2b, 0x6d2c, 0x6d2d, 0x6d2e, 0x6d2f, 0x6d30, 0x6d31, + 0x6d32, 0x6d33, 0x6d34, 0x6d35, 0x6d36, 0x6d37, 0x6d38, 0x6d39, + 0x6d3a, 0x6d3b, 0x6d3c, 0x6d3d, 0x6d3e, 0x6d3f, 0x6d40, 0x6d41, + 0x6d42, 0x6d43, 0x6d44, 0x6d45, 0x6d46, 0x6d47, 0x6d48, 0x6d49, + 0x6d4a, 0x6d4b, 0x6d4c, 0x6d4d, 0x6d4e, 0x6d4f, 0x6d50, 0x6d51, + 0x6d52, 0x6d53, 0x6d54, 0x6d55, 0x6d56, 0x6d57, 0x6d58, 0x6d59, + 0x6d5a, 0x6d5b, 0x6d5c, 0x6d5d, 0x6d5e, 0x6d5f, 0x6d60, 0x6d61, + 0x6d62, 0x6d63, 0x2237, +}; + +static const Summary16 jisx0212_uni2indx_page00[70] = { + /* 0x0000 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0xc652 }, { 7, 0x8500 }, + { 10, 0xffff }, { 26, 0xff7e }, { 40, 0xffff }, { 56, 0xff7f }, + /* 0x0100 */ + { 71, 0xffff }, { 87, 0xffcf }, { 101, 0xcff7 }, { 114, 0xffff }, + { 130, 0x3fff }, { 144, 0xffff }, { 160, 0xffff }, { 176, 0x7fff }, + { 191, 0x0000 }, { 191, 0x0000 }, { 191, 0x0000 }, { 191, 0x0000 }, + { 191, 0xe000 }, { 194, 0x1fff }, { 207, 0x0000 }, { 207, 0x0020 }, + /* 0x0200 */ + { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, + { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, + { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, + { 208, 0x0080 }, { 209, 0x2f00 }, { 214, 0x0000 }, { 214, 0x0000 }, + /* 0x0300 */ + { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0000 }, + { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0000 }, + { 214, 0xd770 }, { 223, 0x0001 }, { 224, 0xfc00 }, { 230, 0x0001 }, + { 231, 0x7c04 }, { 237, 0x0000 }, { 237, 0x0000 }, { 237, 0x0000 }, + /* 0x0400 */ + { 237, 0xdffc }, { 250, 0x0000 }, { 250, 0x0000 }, { 250, 0x0000 }, + { 250, 0x0000 }, { 250, 0xdffc }, +}; +static const Summary16 jisx0212_uni2indx_page21[3] = { + /* 0x2100 */ + { 263, 0x0000 }, { 263, 0x0040 }, { 264, 0x0004 }, +}; +static const Summary16 jisx0212_uni2indx_page4e[1307] = { + /* 0x4e00 */ + { 265, 0x1034 }, { 269, 0x8004 }, { 271, 0xc918 }, { 277, 0x0021 }, + { 279, 0x0093 }, { 283, 0x1402 }, { 286, 0x0308 }, { 289, 0x8230 }, + { 293, 0x2000 }, { 294, 0x20c0 }, { 297, 0x8000 }, { 298, 0x0200 }, + { 299, 0x0008 }, { 300, 0x0c01 }, { 303, 0x8107 }, { 308, 0xe02a }, + /* 0x4f00 */ + { 314, 0x190d }, { 320, 0x02e4 }, { 325, 0x4000 }, { 326, 0x4aaa }, + { 333, 0x1b05 }, { 339, 0x8154 }, { 344, 0x5409 }, { 349, 0x6782 }, + { 356, 0x5636 }, { 364, 0xc69d }, { 373, 0x0000 }, { 373, 0x7a84 }, + { 380, 0xbb63 }, { 390, 0x1004 }, { 392, 0x0005 }, { 394, 0xb005 }, + /* 0x5000 */ + { 399, 0x5493 }, { 406, 0x7989 }, { 414, 0x4084 }, { 417, 0x082d }, + { 422, 0x5467 }, { 430, 0x828e }, { 436, 0x24cd }, { 443, 0x0003 }, + { 445, 0xc45a }, { 452, 0xd85d }, { 461, 0x8407 }, { 466, 0x2601 }, + { 470, 0x5099 }, { 476, 0xb119 }, { 483, 0x8354 }, { 489, 0x4446 }, + /* 0x5100 */ + { 494, 0x79c8 }, { 502, 0x7a81 }, { 509, 0xb188 }, { 515, 0x033a }, + { 521, 0x8404 }, { 524, 0x81a8 }, { 529, 0x0050 }, { 531, 0x4000 }, + { 532, 0x4818 }, { 536, 0x2100 }, { 538, 0x200a }, { 541, 0xd500 }, + { 546, 0x8104 }, { 549, 0x412e }, { 555, 0x4024 }, { 558, 0x009c }, + /* 0x5200 */ + { 562, 0x0026 }, { 565, 0x016c }, { 570, 0x0104 }, { 572, 0x1026 }, + { 576, 0x0220 }, { 578, 0x95a0 }, { 584, 0x4043 }, { 588, 0x0380 }, + { 591, 0x1425 }, { 596, 0x15e8 }, { 603, 0x80f0 }, { 608, 0x2dc1 }, + { 615, 0x9151 }, { 621, 0x1852 }, { 626, 0x1722 }, { 632, 0x00d3 }, + /* 0x5300 */ + { 637, 0x1c09 }, { 642, 0xd90a }, { 649, 0x3ba0 }, { 656, 0x7025 }, + { 662, 0x1804 }, { 665, 0x0a00 }, { 667, 0x302a }, { 672, 0x4204 }, + { 675, 0x4188 }, { 679, 0x2218 }, { 683, 0x8c12 }, { 688, 0x25b4 }, + { 695, 0x8021 }, { 698, 0x642c }, { 704, 0x00c1 }, { 707, 0x0020 }, + /* 0x5400 */ + { 708, 0x0004 }, { 709, 0x0408 }, { 711, 0x8582 }, { 716, 0x0032 }, + { 719, 0xa098 }, { 724, 0x4000 }, { 725, 0x6ad4 }, { 733, 0x8010 }, + { 735, 0x232a }, { 741, 0x9062 }, { 746, 0x66c2 }, { 753, 0x8e82 }, + { 759, 0x6440 }, { 763, 0x0000 }, { 763, 0x9401 }, { 767, 0xd040 }, + /* 0x5500 */ + { 771, 0x7323 }, { 779, 0x0020 }, { 780, 0x0c00 }, { 782, 0x3864 }, + { 788, 0x2682 }, { 793, 0x4d03 }, { 799, 0x0053 }, { 803, 0x8000 }, + { 804, 0xc146 }, { 810, 0x009e }, { 815, 0x2018 }, { 818, 0x8004 }, + { 820, 0x5a4a }, { 827, 0x498e }, { 834, 0x0204 }, { 836, 0x8040 }, + /* 0x5600 */ + { 838, 0xe520 }, { 844, 0x0207 }, { 848, 0x1000 }, { 849, 0xbaa9 }, + { 858, 0xaa5b }, { 867, 0x4010 }, { 869, 0xa24f }, { 877, 0x0026 }, + { 880, 0x1930 }, { 885, 0xe620 }, { 891, 0x3bc0 }, { 898, 0x408a }, + { 902, 0xbe20 }, { 909, 0xb201 }, { 914, 0x29f2 }, { 922, 0x00c2 }, + /* 0x5700 */ + { 925, 0x1486 }, { 930, 0x2c22 }, { 935, 0xd63d }, { 945, 0xe018 }, + { 950, 0x3060 }, { 954, 0x0004 }, { 955, 0xe9a4 }, { 963, 0x5ebb }, + { 974, 0x100a }, { 977, 0xf6b0 }, { 986, 0x1382 }, { 991, 0x2100 }, + { 993, 0x9180 }, { 997, 0x6020 }, { 1000, 0x22d2 }, { 1006, 0xe161 }, + /* 0x5800 */ + { 1013, 0x3318 }, { 1019, 0xc800 }, { 1022, 0x20c1 }, { 1026, 0x8204 }, + { 1029, 0xb200 }, { 1033, 0x8021 }, { 1036, 0x0192 }, { 1040, 0x9100 }, + { 1043, 0xb783 }, { 1052, 0x2051 }, { 1056, 0x0247 }, { 1061, 0x1006 }, + { 1064, 0x6114 }, { 1069, 0x2455 }, { 1075, 0x0206 }, { 1078, 0x0008 }, + /* 0x5900 */ + { 1079, 0x1860 }, { 1083, 0x201c }, { 1087, 0x811a }, { 1092, 0x8069 }, + { 1097, 0x0048 }, { 1099, 0xea0c }, { 1106, 0xa80a }, { 1111, 0x1a64 }, + { 1117, 0x5800 }, { 1120, 0x80a4 }, { 1124, 0xe090 }, { 1129, 0x1489 }, + { 1134, 0x251a }, { 1140, 0xe004 }, { 1144, 0xc098 }, { 1149, 0x0096 }, + /* 0x5a00 */ + { 1153, 0x7011 }, { 1158, 0x400c }, { 1161, 0x2598 }, { 1167, 0x0001 }, + { 1168, 0x11b0 }, { 1173, 0x4021 }, { 1176, 0x20a8 }, { 1180, 0x4c80 }, + { 1184, 0x0800 }, { 1185, 0xd249 }, { 1192, 0x1085 }, { 1196, 0x8d2e }, + { 1204, 0x8150 }, { 1208, 0x1400 }, { 1210, 0x4421 }, { 1214, 0x2060 }, + /* 0x5b00 */ + { 1217, 0x0103 }, { 1220, 0x2a80 }, { 1224, 0x2022 }, { 1227, 0x0110 }, + { 1229, 0x1802 }, { 1232, 0x4044 }, { 1235, 0xc100 }, { 1238, 0xf000 }, + { 1242, 0x4452 }, { 1247, 0x005b }, { 1252, 0xb300 }, { 1257, 0x1486 }, + { 1262, 0xa003 }, { 1266, 0x07c0 }, { 1271, 0x8001 }, { 1273, 0x2012 }, + /* 0x5c00 */ + { 1276, 0x1000 }, { 1277, 0xc080 }, { 1280, 0x5a48 }, { 1286, 0x0065 }, + { 1290, 0x0000 }, { 1290, 0x1600 }, { 1293, 0x238c }, { 1299, 0x3c31 }, + { 1306, 0x8580 }, { 1310, 0xa004 }, { 1313, 0x044d }, { 1318, 0x0434 }, + { 1322, 0x0a00 }, { 1324, 0x2084 }, { 1327, 0x4000 }, { 1328, 0x0016 }, + /* 0x5d00 */ + { 1331, 0x2042 }, { 1334, 0x0004 }, { 1335, 0x08d8 }, { 1340, 0xa212 }, + { 1345, 0x054c }, { 1350, 0x8222 }, { 1354, 0x2417 }, { 1360, 0xc601 }, + { 1365, 0x050a }, { 1369, 0x8a3c }, { 1376, 0x0881 }, { 1379, 0x0315 }, + { 1384, 0x4888 }, { 1388, 0x0301 }, { 1391, 0x0211 }, { 1394, 0x0300 }, + /* 0x5e00 */ + { 1396, 0x2081 }, { 1399, 0x8134 }, { 1404, 0x4101 }, { 1407, 0x4024 }, + { 1410, 0x0a00 }, { 1412, 0x5943 }, { 1419, 0x7d00 }, { 1425, 0x0001 }, + { 1426, 0x4801 }, { 1429, 0x0000 }, { 1429, 0x1534 }, { 1435, 0xe00a }, + { 1440, 0x5840 }, { 1444, 0x5036 }, { 1450, 0x0820 }, { 1452, 0x0000 }, + /* 0x5f00 */ + { 1452, 0x41c4 }, { 1457, 0x3200 }, { 1460, 0x591e }, { 1468, 0xa851 }, + { 1474, 0x20b1 }, { 1479, 0x0911 }, { 1483, 0x8099 }, { 1488, 0x6534 }, + { 1495, 0xa200 }, { 1498, 0x3040 }, { 1501, 0x9894 }, { 1507, 0x0103 }, + { 1510, 0x0b90 }, { 1515, 0x401f }, { 1521, 0xf706 }, { 1530, 0x144c }, + /* 0x6000 */ + { 1535, 0x2480 }, { 1538, 0x8598 }, { 1544, 0x2010 }, { 1546, 0x0028 }, + { 1548, 0x1381 }, { 1553, 0x20d2 }, { 1558, 0x0082 }, { 1560, 0xc002 }, + { 1563, 0x4544 }, { 1568, 0x612a }, { 1574, 0x0134 }, { 1578, 0x4883 }, + { 1583, 0xcf14 }, { 1591, 0x6a30 }, { 1597, 0x0024 }, { 1599, 0x3124 }, + /* 0x6100 */ + { 1604, 0x1484 }, { 1608, 0x52df }, { 1618, 0x0c04 }, { 1621, 0x02e3 }, + { 1627, 0x0262 }, { 1631, 0x4000 }, { 1632, 0x1001 }, { 1634, 0x9904 }, + { 1639, 0x281b }, { 1645, 0xb18c }, { 1652, 0x2521 }, { 1657, 0x1300 }, + { 1660, 0xc007 }, { 1665, 0xf020 }, { 1670, 0xb2a6 }, { 1678, 0x0000 }, + /* 0x6200 */ + { 1678, 0x009a }, { 1682, 0x1028 }, { 1685, 0x0a8d }, { 1691, 0x2200 }, + { 1693, 0x105c }, { 1698, 0x1457 }, { 1705, 0xa010 }, { 1708, 0x2408 }, + { 1711, 0xe000 }, { 1714, 0x0001 }, { 1715, 0x0140 }, { 1717, 0xc4c8 }, + { 1723, 0x4010 }, { 1725, 0x0460 }, { 1728, 0x0400 }, { 1729, 0x3014 }, + /* 0x6300 */ + { 1733, 0x2c18 }, { 1738, 0x0149 }, { 1742, 0x2600 }, { 1745, 0x1260 }, + { 1749, 0x4c5e }, { 1757, 0x091c }, { 1762, 0x3060 }, { 1766, 0xb132 }, + { 1773, 0x0494 }, { 1777, 0x4631 }, { 1783, 0xe050 }, { 1788, 0x2000 }, + { 1789, 0x4122 }, { 1793, 0x103a }, { 1798, 0x1421 }, { 1802, 0x032c }, + /* 0x6400 */ + { 1807, 0x0600 }, { 1809, 0x4115 }, { 1814, 0x8635 }, { 1821, 0xa021 }, + { 1825, 0x8800 }, { 1827, 0xbc1e }, { 1836, 0x200b }, { 1840, 0x2818 }, + { 1844, 0x80a0 }, { 1847, 0xab03 }, { 1854, 0x114a }, { 1859, 0xe008 }, + { 1863, 0x5e10 }, { 1869, 0x00a3 }, { 1873, 0x2630 }, { 1878, 0x88a1 }, + /* 0x6500 */ + { 1883, 0x8712 }, { 1889, 0xca58 }, { 1896, 0x4244 }, { 1900, 0x3402 }, + { 1904, 0x0288 }, { 1907, 0x8015 }, { 1911, 0x0881 }, { 1914, 0x2400 }, + { 1916, 0x0422 }, { 1919, 0x2124 }, { 1923, 0x4049 }, { 1927, 0x801c }, + { 1931, 0x4304 }, { 1935, 0x8151 }, { 1940, 0x0000 }, { 1940, 0xc235 }, + /* 0x6600 */ + { 1947, 0x2311 }, { 1952, 0x6066 }, { 1958, 0x5e5e }, { 1968, 0x028b }, + { 1973, 0x5461 }, { 1979, 0x1b82 }, { 1985, 0x1c03 }, { 1990, 0xdba8 }, + { 1999, 0x3801 }, { 2003, 0x9e05 }, { 2010, 0x2011 }, { 2013, 0x8826 }, + { 2018, 0xd10d }, { 2025, 0x8810 }, { 2028, 0x5900 }, { 2032, 0x0c00 }, + /* 0x6700 */ + { 2034, 0x40a0 }, { 2037, 0x1208 }, { 2040, 0x0005 }, { 2042, 0x4008 }, + { 2044, 0x11a0 }, { 2048, 0x2030 }, { 2051, 0x5040 }, { 2054, 0x0850 }, + { 2057, 0xc012 }, { 2061, 0x0b4a }, { 2067, 0x0000 }, { 2067, 0x3827 }, + { 2074, 0x032d }, { 2080, 0x1284 }, { 2084, 0x0042 }, { 2086, 0x02c5 }, + /* 0x6800 */ + { 2091, 0x0000 }, { 2091, 0xa210 }, { 2095, 0xb180 }, { 2100, 0x880b }, + { 2105, 0x1430 }, { 2109, 0x09a4 }, { 2114, 0xc800 }, { 2117, 0x1e27 }, + { 2125, 0x0154 }, { 2129, 0x1540 }, { 2133, 0x462a }, { 2139, 0x0804 }, + { 2141, 0x9120 }, { 2145, 0x324b }, { 2152, 0x3d20 }, { 2158, 0x3863 }, + /* 0x6900 */ + { 2165, 0x0640 }, { 2168, 0x00cb }, { 2173, 0x0000 }, { 2173, 0x092a }, + { 2178, 0x4224 }, { 2182, 0x0880 }, { 2184, 0x1378 }, { 2191, 0x8c07 }, + { 2197, 0x2001 }, { 2199, 0x0144 }, { 2202, 0xa962 }, { 2209, 0x1580 }, + { 2213, 0x0120 }, { 2215, 0x00c2 }, { 2218, 0xc024 }, { 2222, 0x402a }, + /* 0x6a00 */ + { 2226, 0x800b }, { 2230, 0x2422 }, { 2234, 0x0111 }, { 2237, 0xc895 }, + { 2244, 0x4660 }, { 2249, 0x0867 }, { 2255, 0x0490 }, { 2258, 0x400a }, + { 2261, 0x0aca }, { 2267, 0xe802 }, { 2272, 0x8820 }, { 2275, 0xe013 }, + { 2281, 0x1340 }, { 2285, 0x3071 }, { 2291, 0x1090 }, { 2294, 0x3007 }, + /* 0x6b00 */ + { 2299, 0x82cc }, { 2305, 0x4883 }, { 2310, 0x9910 }, { 2315, 0x8860 }, + { 2319, 0x2440 }, { 2322, 0x2144 }, { 2326, 0x4881 }, { 2330, 0x6021 }, + { 2334, 0x0024 }, { 2336, 0x8880 }, { 2339, 0x730d }, { 2347, 0x6301 }, + { 2352, 0x1218 }, { 2356, 0x0440 }, { 2358, 0x40ca }, { 2363, 0x8282 }, + /* 0x6c00 */ + { 2367, 0x6234 }, { 2373, 0x8205 }, { 2377, 0x51c0 }, { 2382, 0x8c68 }, + { 2388, 0xac00 }, { 2392, 0x1a14 }, { 2397, 0xa880 }, { 2401, 0x0b50 }, + { 2406, 0x02e0 }, { 2410, 0x91b0 }, { 2416, 0x0000 }, { 2416, 0x0015 }, + { 2419, 0xa044 }, { 2423, 0x1457 }, { 2430, 0x5a81 }, { 2436, 0x0014 }, + /* 0x6d00 */ + { 2438, 0xc490 }, { 2443, 0x040a }, { 2446, 0xc1c0 }, { 2451, 0x9202 }, + { 2455, 0x0000 }, { 2455, 0xc080 }, { 2458, 0x80a2 }, { 2462, 0x1001 }, + { 2464, 0x0084 }, { 2466, 0x01d6 }, { 2472, 0x1400 }, { 2474, 0xa290 }, + { 2479, 0xc510 }, { 2484, 0xa840 }, { 2488, 0x8225 }, { 2493, 0x1051 }, + /* 0x6e00 */ + { 2497, 0x0011 }, { 2499, 0x4000 }, { 2500, 0x0084 }, { 2502, 0x1a44 }, + { 2507, 0x8b30 }, { 2513, 0x709e }, { 2521, 0x010c }, { 2524, 0x2808 }, + { 2527, 0x2000 }, { 2528, 0x0208 }, { 2530, 0x6081 }, { 2534, 0x880a }, + { 2538, 0xe58b }, { 2547, 0x0000 }, { 2547, 0x6800 }, { 2550, 0x2a00 }, + /* 0x6f00 */ + { 2553, 0x3510 }, { 2558, 0x0d40 }, { 2562, 0xa640 }, { 2567, 0x1849 }, + { 2572, 0x8000 }, { 2573, 0x668e }, { 2581, 0x1106 }, { 2585, 0x6000 }, + { 2587, 0x3988 }, { 2593, 0x845d }, { 2600, 0xc1e1 }, { 2607, 0x1061 }, + { 2611, 0x05a0 }, { 2615, 0x4400 }, { 2617, 0x0300 }, { 2619, 0x3221 }, + /* 0x7000 */ + { 2624, 0x20e1 }, { 2629, 0x0080 }, { 2630, 0x8009 }, { 2633, 0x1290 }, + { 2637, 0x4f18 }, { 2644, 0x6030 }, { 2648, 0x5030 }, { 2652, 0x4060 }, + { 2655, 0x0062 }, { 2658, 0x09f0 }, { 2664, 0x0810 }, { 2666, 0x0093 }, + { 2670, 0x0400 }, { 2671, 0x117a }, { 2678, 0x0010 }, { 2679, 0x0400 }, + /* 0x7100 */ + { 2680, 0x98f8 }, { 2688, 0x4000 }, { 2689, 0xa801 }, { 2693, 0x0103 }, + { 2696, 0x0ce2 }, { 2702, 0x5485 }, { 2708, 0x0101 }, { 2710, 0x0200 }, + { 2711, 0x10a1 }, { 2715, 0x0c04 }, { 2718, 0x8005 }, { 2721, 0x840d }, + { 2726, 0x1813 }, { 2731, 0x1648 }, { 2736, 0x0000 }, { 2736, 0x4100 }, + /* 0x7200 */ + { 2738, 0x0381 }, { 2742, 0xa488 }, { 2747, 0x8810 }, { 2750, 0x0310 }, + { 2753, 0xc02e }, { 2759, 0x5469 }, { 2766, 0xc909 }, { 2772, 0x9982 }, + { 2778, 0x6210 }, { 2782, 0x0808 }, { 2784, 0x6100 }, { 2787, 0x4012 }, + { 2790, 0x1282 }, { 2794, 0x8160 }, { 2798, 0x0020 }, { 2799, 0x4c18 }, + /* 0x7300 */ + { 2804, 0x28b4 }, { 2810, 0x430c }, { 2815, 0x1194 }, { 2820, 0x2c26 }, + { 2826, 0x2008 }, { 2828, 0xe145 }, { 2835, 0xdac1 }, { 2843, 0x1282 }, + { 2847, 0x406b }, { 2853, 0xd1a9 }, { 2861, 0x2c65 }, { 2868, 0xb2a0 }, + { 2874, 0x9a60 }, { 2880, 0x224c }, { 2885, 0x02ca }, { 2890, 0xaeb0 }, + /* 0x7400 */ + { 2898, 0x0493 }, { 2903, 0x0c02 }, { 2906, 0xff50 }, { 2916, 0x0203 }, + { 2919, 0x28d9 }, { 2926, 0x2086 }, { 2930, 0x69c4 }, { 2937, 0x0006 }, + { 2939, 0x82e3 }, { 2946, 0x9707 }, { 2954, 0xcf4b }, { 2964, 0x8a26 }, + { 2970, 0x1300 }, { 2973, 0xcd09 }, { 2980, 0x8d10 }, { 2985, 0x9c10 }, + /* 0x7500 */ + { 2990, 0x0040 }, { 2991, 0x00c4 }, { 2994, 0x8693 }, { 3001, 0xe240 }, + { 3006, 0x4189 }, { 3011, 0xc085 }, { 3016, 0x8002 }, { 3018, 0x7e02 }, + { 3025, 0x0022 }, { 3027, 0x122d }, { 3033, 0x0014 }, { 3035, 0x8410 }, + { 3038, 0xd053 }, { 3045, 0x9080 }, { 3048, 0xd093 }, { 3055, 0x0202 }, + /* 0x7600 */ + { 3057, 0x959d }, { 3066, 0x7a6c }, { 3075, 0x2268 }, { 3080, 0x172c }, + { 3087, 0x0e3b }, { 3095, 0x8220 }, { 3098, 0xe030 }, { 3103, 0x0012 }, + { 3105, 0x3022 }, { 3109, 0xb820 }, { 3114, 0x25fd }, { 3124, 0x2000 }, + { 3125, 0x5a22 }, { 3131, 0x0210 }, { 3133, 0x1141 }, { 3137, 0x1243 }, + /* 0x7700 */ + { 3142, 0x4441 }, { 3146, 0x16b4 }, { 3153, 0xe104 }, { 3158, 0x6270 }, + { 3164, 0xe464 }, { 3171, 0xd0c4 }, { 3177, 0x1495 }, { 3183, 0x241d }, + { 3189, 0x3011 }, { 3193, 0x8470 }, { 3198, 0xc484 }, { 3203, 0x4022 }, + { 3206, 0x0208 }, { 3208, 0xc226 }, { 3214, 0x1451 }, { 3219, 0x0913 }, + /* 0x7800 */ + { 3224, 0x6260 }, { 3229, 0x2002 }, { 3231, 0x600e }, { 3236, 0x00a1 }, + { 3239, 0x5198 }, { 3245, 0x5004 }, { 3248, 0x451b }, { 3255, 0x4400 }, + { 3257, 0x8400 }, { 3259, 0xe110 }, { 3264, 0x3112 }, { 3269, 0xa80f }, + { 3276, 0x5380 }, { 3281, 0x886c }, { 3287, 0x0453 }, { 3292, 0x8ccc }, + /* 0x7900 */ + { 3299, 0x1041 }, { 3302, 0xd401 }, { 3307, 0x22a1 }, { 3312, 0xa832 }, + { 3318, 0x8c70 }, { 3324, 0x1912 }, { 3329, 0x0a80 }, { 3332, 0x5a04 }, + { 3337, 0x1800 }, { 3339, 0x197a }, { 3347, 0x8b02 }, { 3352, 0x0912 }, + { 3356, 0x8594 }, { 3362, 0x6450 }, { 3367, 0x2c25 }, { 3373, 0x1102 }, + /* 0x7a00 */ + { 3376, 0x168c }, { 3382, 0x4822 }, { 3386, 0xa882 }, { 3391, 0x0731 }, + { 3397, 0x11b0 }, { 3402, 0xb260 }, { 3408, 0x24a1 }, { 3413, 0x4120 }, + { 3416, 0x0c65 }, { 3422, 0x4013 }, { 3426, 0x1009 }, { 3429, 0x1a28 }, + { 3434, 0x5240 }, { 3438, 0x0802 }, { 3440, 0x1b00 }, { 3444, 0x6812 }, + /* 0x7b00 */ + { 3449, 0x0080 }, { 3450, 0x8010 }, { 3452, 0xee88 }, { 3460, 0xa013 }, + { 3465, 0x4083 }, { 3469, 0x0020 }, { 3470, 0xa651 }, { 3477, 0x008c }, + { 3480, 0x4210 }, { 3483, 0x4843 }, { 3488, 0x9021 }, { 3492, 0x3c65 }, + { 3500, 0x0524 }, { 3504, 0x0ed0 }, { 3510, 0x0500 }, { 3512, 0x5734 }, + /* 0x7c00 */ + { 3520, 0xda5e }, { 3530, 0x0a00 }, { 3532, 0x1161 }, { 3537, 0x065a }, + { 3543, 0x0440 }, { 3545, 0x7e2e }, { 3555, 0x628a }, { 3561, 0x3205 }, + { 3566, 0x80c0 }, { 3569, 0x4010 }, { 3571, 0x0041 }, { 3573, 0x9cc1 }, + { 3580, 0xa390 }, { 3586, 0x26b8 }, { 3593, 0x0a40 }, { 3596, 0x0020 }, + /* 0x7d00 */ + { 3597, 0x8388 }, { 3602, 0x604e }, { 3608, 0x2448 }, { 3612, 0x7002 }, + { 3616, 0x2183 }, { 3621, 0x368a }, { 3628, 0x04a0 }, { 3631, 0x8d01 }, + { 3636, 0x396e }, { 3645, 0x60c2 }, { 3650, 0x04c0 }, { 3653, 0x02c8 }, + { 3657, 0x707c }, { 3665, 0x0280 }, { 3667, 0x2c64 }, { 3673, 0x0662 }, + /* 0x7e00 */ + { 3678, 0x0101 }, { 3680, 0x30a3 }, { 3686, 0xb181 }, { 3692, 0x8048 }, + { 3695, 0x40b0 }, { 3699, 0x8105 }, { 3703, 0xc826 }, { 3709, 0x4108 }, + { 3712, 0x24c2 }, { 3717, 0x6522 }, { 3723, 0x0000 }, { 3723, 0x0000 }, + { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, + /* 0x7f00 */ + { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0x0000 }, { 3723, 0xf800 }, + { 3728, 0x8098 }, { 3732, 0x380c }, { 3737, 0x207a }, { 3743, 0xe002 }, + { 3747, 0xa801 }, { 3751, 0x10c3 }, { 3756, 0x2446 }, { 3761, 0x9010 }, + { 3764, 0xc109 }, { 3769, 0x8800 }, { 3771, 0xd128 }, { 3777, 0xe404 }, + /* 0x8000 */ + { 3782, 0xe580 }, { 3788, 0xe05a }, { 3795, 0x5051 }, { 3800, 0x56b1 }, + { 3808, 0x0011 }, { 3810, 0x0000 }, { 3810, 0x2051 }, { 3814, 0x0022 }, + { 3816, 0x4102 }, { 3819, 0x5000 }, { 3821, 0x08c0 }, { 3824, 0x0300 }, + { 3826, 0xa100 }, { 3829, 0x01b4 }, { 3834, 0x6001 }, { 3837, 0x464d }, + /* 0x8100 */ + { 3844, 0x0808 }, { 3846, 0x51c0 }, { 3851, 0x1091 }, { 3855, 0x1421 }, + { 3859, 0x14a0 }, { 3863, 0x0084 }, { 3865, 0xa383 }, { 3872, 0x0080 }, + { 3873, 0x4872 }, { 3879, 0x4941 }, { 3884, 0x4004 }, { 3886, 0x0814 }, + { 3889, 0xcc28 }, { 3895, 0x68a0 }, { 3900, 0x1812 }, { 3904, 0xa367 }, + /* 0x8200 */ + { 3913, 0x8009 }, { 3916, 0x2618 }, { 3921, 0x0106 }, { 3924, 0x0414 }, + { 3927, 0xc878 }, { 3934, 0x1042 }, { 3937, 0x2089 }, { 3941, 0xa810 }, + { 3945, 0x469b }, { 3953, 0x0d52 }, { 3959, 0x479b }, { 3968, 0xd495 }, + { 3976, 0x0040 }, { 3977, 0x0421 }, { 3980, 0xa515 }, { 3987, 0x60c0 }, + /* 0x8300 */ + { 3991, 0x0d83 }, { 3997, 0xe800 }, { 4001, 0x7006 }, { 4006, 0x3489 }, + { 4012, 0x609c }, { 4018, 0x00fa }, { 4024, 0x0000 }, { 4024, 0xa101 }, + { 4028, 0x2055 }, { 4033, 0x3b34 }, { 4041, 0x32c0 }, { 4046, 0xc000 }, + { 4048, 0x8281 }, { 4052, 0x2013 }, { 4056, 0x0500 }, { 4058, 0x1340 }, + /* 0x8400 */ + { 4062, 0x8442 }, { 4066, 0x0222 }, { 4069, 0x8000 }, { 4070, 0x0200 }, + { 4071, 0xa5a0 }, { 4077, 0x1746 }, { 4084, 0x04b1 }, { 4089, 0x3159 }, + { 4096, 0x0022 }, { 4098, 0x402c }, { 4102, 0x8740 }, { 4107, 0x6412 }, + { 4112, 0x9185 }, { 4118, 0x1008 }, { 4120, 0x8480 }, { 4123, 0x2c87 }, + /* 0x8500 */ + { 4130, 0x508c }, { 4135, 0x5001 }, { 4138, 0x8cbc }, { 4146, 0x805c }, + { 4151, 0x8040 }, { 4153, 0xf24f }, { 4163, 0x8817 }, { 4169, 0xae00 }, + { 4174, 0x9a62 }, { 4181, 0xa108 }, { 4185, 0x20a5 }, { 4190, 0xf1d0 }, + { 4198, 0x4c84 }, { 4203, 0x8500 }, { 4206, 0x2141 }, { 4210, 0x9048 }, + /* 0x8600 */ + { 4214, 0x6031 }, { 4219, 0x4b07 }, { 4226, 0x0282 }, { 4229, 0x3540 }, + { 4234, 0x0047 }, { 4238, 0x23cc }, { 4245, 0x921f }, { 4253, 0x04e0 }, + { 4257, 0x2100 }, { 4259, 0x1542 }, { 4264, 0x21c2 }, { 4269, 0x83ba }, + { 4277, 0x002b }, { 4281, 0x14a6 }, { 4287, 0x00a9 }, { 4291, 0x3400 }, + /* 0x8700 */ + { 4294, 0xc8b0 }, { 4300, 0xc219 }, { 4306, 0xc10a }, { 4311, 0x7606 }, + { 4318, 0x2029 }, { 4322, 0x2100 }, { 4324, 0x8032 }, { 4328, 0x0806 }, + { 4331, 0x1bf8 }, { 4340, 0x43a9 }, { 4347, 0x7089 }, { 4353, 0xc022 }, + { 4357, 0x4702 }, { 4362, 0x9660 }, { 4368, 0x2c1c }, { 4374, 0x850a }, + /* 0x8800 */ + { 4379, 0x0e4a }, { 4385, 0xdf1d }, { 4396, 0x6100 }, { 4399, 0x1425 }, + { 4404, 0x4f2a }, { 4412, 0x9562 }, { 4419, 0x0211 }, { 4422, 0x0a02 }, + { 4425, 0x0001 }, { 4426, 0x9d00 }, { 4431, 0x0501 }, { 4434, 0x6400 }, + { 4437, 0x7c01 }, { 4443, 0x480e }, { 4448, 0x8080 }, { 4450, 0x00a3 }, + /* 0x8900 */ + { 4454, 0xe042 }, { 4459, 0x1760 }, { 4465, 0x01c1 }, { 4469, 0x4627 }, + { 4476, 0x8265 }, { 4482, 0x1c84 }, { 4487, 0x480e }, { 4492, 0x3c29 }, + { 4499, 0x2200 }, { 4501, 0x9831 }, { 4507, 0x0021 }, { 4509, 0x10f1 }, + { 4515, 0x0000 }, { 4515, 0x01f0 }, { 4520, 0x2a20 }, { 4524, 0xa24a }, + /* 0x8a00 */ + { 4530, 0x80b0 }, { 4534, 0x4036 }, { 4539, 0x9855 }, { 4546, 0x60a0 }, + { 4550, 0x62a9 }, { 4557, 0x31c8 }, { 4563, 0x00a2 }, { 4566, 0xcee0 }, + { 4574, 0x8849 }, { 4579, 0x82c5 }, { 4585, 0xc280 }, { 4589, 0x48c8 }, + { 4594, 0x0748 }, { 4599, 0xa0ba }, { 4606, 0x1000 }, { 4607, 0x9071 }, + /* 0x8b00 */ + { 4613, 0x0c60 }, { 4617, 0xd002 }, { 4621, 0x2000 }, { 4622, 0x1081 }, + { 4625, 0x217c }, { 4632, 0x421c }, { 4637, 0x2008 }, { 4639, 0x5340 }, + { 4644, 0xa832 }, { 4650, 0xd030 }, { 4655, 0x0000 }, { 4655, 0x0000 }, + { 4655, 0x0000 }, { 4655, 0x0000 }, { 4655, 0x0000 }, { 4655, 0x0000 }, + /* 0x8c00 */ + { 4655, 0x0000 }, { 4655, 0x0000 }, { 4655, 0x0000 }, { 4655, 0x6300 }, + { 4659, 0x8aa0 }, { 4664, 0x2b9a }, { 4672, 0x2358 }, { 4678, 0x4868 }, + { 4683, 0x08c0 }, { 4686, 0x1a0d }, { 4692, 0x0010 }, { 4693, 0x0600 }, + { 4695, 0x8a60 }, { 4700, 0x2260 }, { 4704, 0x9102 }, { 4708, 0xc1a5 }, + /* 0x8d00 */ + { 4715, 0x020a }, { 4718, 0x0884 }, { 4721, 0x0000 }, { 4721, 0x0000 }, + { 4721, 0x0000 }, { 4721, 0x0000 }, { 4721, 0x5220 }, { 4725, 0x8000 }, + { 4726, 0x2114 }, { 4730, 0xc023 }, { 4735, 0x9841 }, { 4740, 0x1aa4 }, + { 4746, 0x45e1 }, { 4753, 0x02b2 }, { 4758, 0x10b0 }, { 4762, 0x2017 }, + /* 0x8e00 */ + { 4767, 0x0872 }, { 4772, 0x0052 }, { 4775, 0x00cf }, { 4781, 0x23ca }, + { 4788, 0xe803 }, { 4794, 0x7810 }, { 4799, 0xb206 }, { 4805, 0x0e03 }, + { 4810, 0x020c }, { 4813, 0x6c25 }, { 4820, 0x6284 }, { 4825, 0x0c28 }, + { 4829, 0x809b }, { 4835, 0x1012 }, { 4838, 0x6100 }, { 4841, 0x0683 }, + /* 0x8f00 */ + { 4846, 0x8185 }, { 4851, 0x41c1 }, { 4856, 0x71ab }, { 4865, 0x04f0 }, + { 4870, 0x808b }, { 4875, 0x613e }, { 4883, 0x0020 }, { 4884, 0x0000 }, + { 4884, 0x0000 }, { 4884, 0x2000 }, { 4885, 0x0073 }, { 4890, 0x4160 }, + { 4894, 0x2c43 }, { 4900, 0x002d }, { 4904, 0x4119 }, { 4909, 0x4862 }, + /* 0x9000 */ + { 4914, 0x1114 }, { 4918, 0x0900 }, { 4920, 0xb700 }, { 4926, 0x8098 }, + { 4930, 0x1018 }, { 4933, 0x2800 }, { 4935, 0x10c4 }, { 4939, 0x0211 }, + { 4942, 0x5920 }, { 4947, 0x0ba1 }, { 4953, 0x0027 }, { 4957, 0x605d }, + { 4964, 0x11b8 }, { 4970, 0xb3a4 }, { 4978, 0x8820 }, { 4981, 0xc051 }, + /* 0x9100 */ + { 4986, 0x2171 }, { 4992, 0x55d1 }, { 5000, 0xc2ad }, { 5008, 0x36d2 }, + { 5016, 0x8188 }, { 5020, 0x0e88 }, { 5025, 0x2092 }, { 5029, 0x0e10 }, + { 5033, 0x446a }, { 5039, 0x413a }, { 5045, 0x7142 }, { 5051, 0xb84f }, + { 5060, 0x002c }, { 5063, 0x4698 }, { 5069, 0xf630 }, { 5077, 0x2a83 }, + /* 0x9200 */ + { 5083, 0x16f3 }, { 5092, 0x314d }, { 5099, 0xc178 }, { 5106, 0x5769 }, + { 5115, 0xe4cd }, { 5124, 0x3302 }, { 5129, 0xc3a3 }, { 5137, 0xbbe1 }, + { 5147, 0x6700 }, { 5152, 0x8284 }, { 5156, 0x89b1 }, { 5163, 0xbd44 }, + { 5171, 0x79ef }, { 5183, 0xb3a9 }, { 5192, 0x51ab }, { 5200, 0x8a01 }, + /* 0x9300 */ + { 5204, 0x2105 }, { 5208, 0xf032 }, { 5215, 0x06b2 }, { 5221, 0x00d8 }, + { 5225, 0x0380 }, { 5228, 0x45a7 }, { 5236, 0xa6b0 }, { 5243, 0xa45b }, + { 5251, 0xad07 }, { 5259, 0x4924 }, { 5264, 0x0b5a }, { 5271, 0x0470 }, + { 5275, 0x3ef2 }, { 5285, 0xd208 }, { 5290, 0x00c4 }, { 5293, 0x2f80 }, + /* 0x9400 */ + { 5299, 0xe316 }, { 5307, 0x80e0 }, { 5311, 0xc000 }, { 5313, 0xa81e }, + { 5320, 0x1528 }, { 5325, 0x9220 }, { 5329, 0xe90a }, { 5336, 0x0006 }, + { 5338, 0x0018 }, { 5340, 0x0000 }, { 5340, 0x0000 }, { 5340, 0x0000 }, + { 5340, 0x0000 }, { 5340, 0x0000 }, { 5340, 0x0000 }, { 5340, 0x0000 }, + /* 0x9500 */ + { 5340, 0x0000 }, { 5340, 0x0000 }, { 5340, 0x0000 }, { 5340, 0x0000 }, + { 5340, 0x0000 }, { 5340, 0x0000 }, { 5340, 0x0000 }, { 5340, 0x4300 }, + { 5343, 0x7110 }, { 5348, 0xe000 }, { 5351, 0x1a42 }, { 5356, 0xa450 }, + { 5361, 0x0b40 }, { 5365, 0xe60f }, { 5374, 0x0051 }, { 5377, 0x0000 }, + /* 0x9600 */ + { 5377, 0x0000 }, { 5377, 0x6000 }, { 5379, 0x1074 }, { 5384, 0x378a }, + { 5392, 0x0002 }, { 5393, 0x01d4 }, { 5398, 0x4002 }, { 5400, 0xd810 }, + { 5405, 0x021e }, { 5410, 0xa442 }, { 5415, 0xc270 }, { 5421, 0x0408 }, + { 5423, 0x0400 }, { 5424, 0xe504 }, { 5430, 0x8200 }, { 5432, 0x0402 }, + /* 0x9700 */ + { 5434, 0x022c }, { 5438, 0x2c00 }, { 5441, 0x010e }, { 5445, 0x000a }, + { 5447, 0xc40a }, { 5452, 0x0da0 }, { 5457, 0x4488 }, { 5461, 0xa9c8 }, + { 5468, 0x0201 }, { 5470, 0xc6e0 }, { 5477, 0x5004 }, { 5480, 0xd766 }, + { 5490, 0x76b2 }, { 5499, 0x6b93 }, { 5508, 0x8013 }, { 5512, 0x0592 }, + /* 0x9800 */ + { 5517, 0x6480 }, { 5521, 0x5250 }, { 5526, 0xc869 }, { 5533, 0x402d }, + { 5538, 0x0490 }, { 5541, 0x06ce }, { 5548, 0x146c }, { 5554, 0x0000 }, + { 5554, 0x0000 }, { 5554, 0x0000 }, { 5554, 0x6800 }, { 5557, 0x8d91 }, + { 5564, 0x1124 }, { 5568, 0x0000 }, { 5568, 0x04ea }, { 5574, 0x0048 }, + /* 0x9900 */ + { 5576, 0x0184 }, { 5579, 0x9ce2 }, { 5587, 0x08c4 }, { 5591, 0x1e3e }, + { 5600, 0x61c3 }, { 5607, 0xdb10 }, { 5614, 0x0001 }, { 5615, 0x0000 }, + { 5615, 0x0000 }, { 5615, 0xa800 }, { 5618, 0x0040 }, { 5619, 0xa627 }, + { 5627, 0x0208 }, { 5629, 0x5618 }, { 5635, 0x1c80 }, { 5639, 0x6231 }, + /* 0x9a00 */ + { 5645, 0x181c }, { 5650, 0x4043 }, { 5654, 0x609d }, { 5661, 0x0168 }, + { 5665, 0x5c92 }, { 5672, 0x2052 }, { 5676, 0x0000 }, { 5676, 0x0000 }, + { 5676, 0x0000 }, { 5676, 0x0000 }, { 5676, 0xd400 }, { 5680, 0xca74 }, + { 5688, 0x414a }, { 5693, 0x18e5 }, { 5700, 0x12b1 }, { 5706, 0xa62c }, + /* 0x9b00 */ + { 5713, 0x7b3f }, { 5725, 0x1a45 }, { 5731, 0x2841 }, { 5735, 0x26b8 }, + { 5742, 0x1900 }, { 5745, 0x48e0 }, { 5750, 0x7d6a }, { 5760, 0x83a8 }, + { 5766, 0xaef1 }, { 5776, 0x6411 }, { 5781, 0x12c0 }, { 5785, 0xd987 }, + { 5794, 0x4182 }, { 5798, 0xa181 }, { 5803, 0x8ca0 }, { 5808, 0xa788 }, + /* 0x9c00 */ + { 5815, 0x8805 }, { 5819, 0x5742 }, { 5826, 0x07cc }, { 5833, 0x20e2 }, + { 5838, 0xc63a }, { 5846, 0xf959 }, { 5856, 0x4f08 }, { 5862, 0x08a5 }, + { 5867, 0x0000 }, { 5867, 0x0000 }, { 5867, 0x0000 }, { 5867, 0x0000 }, + { 5867, 0x0000 }, { 5867, 0x0000 }, { 5867, 0x0040 }, { 5868, 0x0284 }, + /* 0x9d00 */ + { 5871, 0x0804 }, { 5873, 0x7182 }, { 5879, 0x8000 }, { 5880, 0x341d }, + { 5887, 0x04ac }, { 5892, 0x8018 }, { 5895, 0x0e2c }, { 5901, 0x58c1 }, + { 5907, 0x6458 }, { 5913, 0x01ec }, { 5919, 0x5402 }, { 5923, 0x9222 }, + { 5928, 0x0688 }, { 5932, 0xc4f0 }, { 5939, 0x4aa1 }, { 5945, 0x4019 }, + /* 0x9e00 */ + { 5949, 0x4484 }, { 5953, 0x3267 }, { 5961, 0x0000 }, { 5961, 0x0000 }, + { 5961, 0x0000 }, { 5961, 0x0000 }, { 5961, 0x0000 }, { 5961, 0x1c00 }, + { 5964, 0xc0bd }, { 5972, 0x4940 }, { 5976, 0xd110 }, { 5981, 0x0039 }, + { 5985, 0x0940 }, { 5988, 0x8020 }, { 5990, 0x7090 }, { 5995, 0x8127 }, + /* 0x9f00 */ + { 6001, 0x820c }, { 6005, 0x8ed7 }, { 6015, 0x8c44 }, { 6020, 0xb696 }, + { 6029, 0x00fa }, { 6035, 0x65e8 }, { 6043, 0xe300 }, { 6048, 0x242b }, + { 6054, 0x8000 }, { 6055, 0x40d7 }, { 6062, 0x002e }, +}; +static const Summary16 jisx0212_uni2indx_pageff[6] = { + /* 0xff00 */ + { 6066, 0x0000 }, { 6066, 0x0000 }, { 6066, 0x0000 }, { 6066, 0x0000 }, + { 6066, 0x0000 }, { 6066, 0x4000 }, +}; + +static int +jisx0212_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0000 && wc < 0x0460) + summary = &jisx0212_uni2indx_page00[(wc>>4)]; + else if (wc >= 0x2100 && wc < 0x2130) + summary = &jisx0212_uni2indx_page21[(wc>>4)-0x210]; + else if (wc >= 0x4e00 && wc < 0x9fb0) + summary = &jisx0212_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0xff00 && wc < 0xff60) + summary = &jisx0212_uni2indx_pageff[(wc>>4)-0xff0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = jisx0212_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/jisx0213.h b/jni/parted/libiconv/lib/jisx0213.h new file mode 100755 index 0000000..9c0016a --- /dev/null +++ b/jni/parted/libiconv/lib/jisx0213.h @@ -0,0 +1,5923 @@ +/* + * Copyright (C) 1999-2004, 2012 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * JISX0213:2004 + */ + +#ifndef _JISX0213_H +#define _JISX0213_H + +/* JISX0213 plane 1 (= ISO-IR-233) characters are in the range + 0x{21..7E}{21..7E}. + JISX0213 plane 2 (= ISO-IR-229) characters are in the range + 0x{21,23..25,28,2C..2F,6E..7E}{21..7E}. + Together this makes 120 rows of 94 characters. +*/ + +static const unsigned short jisx0213_to_ucs_combining[][2] = { + { 0x304b, 0x309a }, + { 0x304d, 0x309a }, + { 0x304f, 0x309a }, + { 0x3051, 0x309a }, + { 0x3053, 0x309a }, + { 0x30ab, 0x309a }, + { 0x30ad, 0x309a }, + { 0x30af, 0x309a }, + { 0x30b1, 0x309a }, + { 0x30b3, 0x309a }, + { 0x30bb, 0x309a }, + { 0x30c4, 0x309a }, + { 0x30c8, 0x309a }, + { 0x31f7, 0x309a }, + { 0x00e6, 0x0300 }, + { 0x0254, 0x0300 }, + { 0x0254, 0x0301 }, + { 0x028c, 0x0300 }, + { 0x028c, 0x0301 }, + { 0x0259, 0x0300 }, + { 0x0259, 0x0301 }, + { 0x025a, 0x0300 }, + { 0x025a, 0x0301 }, + { 0x02e9, 0x02e5 }, + { 0x02e5, 0x02e9 }, +}; + +static const unsigned short jisx0213_to_ucs_main[120 * 94] = { + /* 0x12121..0x1217E */ + 0x1000, 0x1001, 0x1002, 0x830c, 0x830e, 0x10fb, 0x831a, 0x831b, + 0x831f, 0x8301, 0x109b, 0x109c, 0x00b4, 0x8340, 0x00a8, 0x833e, + 0x83e3, 0x833f, 0x10fd, 0x10fe, 0x109d, 0x109e, 0x1003, 0x2edd, + 0x1005, 0x1006, 0x1007, 0x10fc, 0x0714, 0x0710, 0x830f, 0x833c, + 0x101c, 0x0716, 0x835c, 0x0726, 0x0725, 0x0718, 0x0719, 0x071c, + 0x071d, 0x8308, 0x8309, 0x1014, 0x1015, 0x833b, 0x833d, 0x835b, + 0x835d, 0x1008, 0x1009, 0x100a, 0x100b, 0x100c, 0x100d, 0x100e, + 0x100f, 0x1010, 0x1011, 0x830b, 0x0912, 0x00b1, 0x00d7, 0x00f7, + 0x831d, 0x0960, 0x831c, 0x831e, 0x0966, 0x0967, 0x091e, 0x0934, + 0x0d42, 0x0d40, 0x00b0, 0x0732, 0x0733, 0x0803, 0x83e5, 0x8304, + 0x00a2, 0x00a3, 0x8305, 0x8303, 0x8306, 0x830a, 0x8320, 0x00a7, + 0x0d06, 0x0d05, 0x0ccb, 0x0ccf, 0x0cce, 0x0cc7, + /* 0x12221..0x1227E */ + 0x0cc6, 0x0ca1, 0x0ca0, 0x0cb3, 0x0cb2, 0x0cbd, 0x0cbc, 0x073b, + 0x1012, 0x0892, 0x0890, 0x0891, 0x0893, 0x1013, 0x8307, 0x8302, + 0x830d, 0x835e, 0x1033, 0x1034, 0x1035, 0x103b, 0x103c, 0x10ff, + 0x109f, 0x0908, 0x090b, 0x0986, 0x0987, 0x0982, 0x0983, 0x092a, + 0x0929, 0x0984, 0x0985, 0x098a, 0x098b, 0x0909, 0x0905, 0x0a05, + 0x0a06, 0x0927, 0x0928, 0x00ac, 0x08d2, 0x08d4, 0x0900, 0x0903, + 0x0995, 0x0996, 0x0997, 0x0925, 0x0926, 0x835f, 0x8360, 0x1018, + 0x1019, 0x1016, 0x1017, 0x0920, 0x09a5, 0x0a12, 0x0902, 0x0907, + 0x0961, 0x0952, 0x096a, 0x096b, 0x091a, 0x093d, 0x091d, 0x0935, + 0x092b, 0x092c, 0x0962, 0x0943, 0x0945, 0x0948, 0x0976, 0x0977, + 0x0894, 0x082b, 0x0730, 0x0d6f, 0x0d6d, 0x0d6a, 0x0720, 0x0721, + 0x00b6, 0x0d6e, 0x0d6b, 0x0d6c, 0x0d69, 0x0cef, + /* 0x12321..0x1237E */ + 0x0cb7, 0x0cb6, 0x0cc1, 0x0cc0, 0x0897, 0x0898, 0x0896, 0x0899, + 0x08c4, 0x08e8, 0x08e6, 0x08e7, 0x08e9, 0x0f34, 0x0f35, 0x8310, + 0x8311, 0x8312, 0x8313, 0x8314, 0x8315, 0x8316, 0x8317, 0x8318, + 0x8319, 0x0fbf, 0x0cc9, 0x103d, 0x8246, 0x8245, 0x0ce6, 0x0722, + 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, 0x8326, 0x8327, 0x8328, + 0x8329, 0x832a, 0x832b, 0x832c, 0x832d, 0x832e, 0x832f, 0x8330, + 0x8331, 0x8332, 0x8333, 0x8334, 0x8335, 0x8336, 0x8337, 0x8338, + 0x8339, 0x833a, 0x0913, 0x0835, 0x080f, 0x13cb, 0x0813, 0x0827, + 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, + 0x8349, 0x834a, 0x834b, 0x834c, 0x834d, 0x834e, 0x834f, 0x8350, + 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0x8358, + 0x8359, 0x835a, 0x10a0, 0x0713, 0x0ffa, 0x0ffb, + /* 0x12421..0x1247E */ + 0x1041, 0x1042, 0x1043, 0x1044, 0x1045, 0x1046, 0x1047, 0x1048, + 0x1049, 0x104a, 0x104b, 0x104c, 0x104d, 0x104e, 0x104f, 0x1050, + 0x1051, 0x1052, 0x1053, 0x1054, 0x1055, 0x1056, 0x1057, 0x1058, + 0x1059, 0x105a, 0x105b, 0x105c, 0x105d, 0x105e, 0x105f, 0x1060, + 0x1061, 0x1062, 0x1063, 0x1064, 0x1065, 0x1066, 0x1067, 0x1068, + 0x1069, 0x106a, 0x106b, 0x106c, 0x106d, 0x106e, 0x106f, 0x1070, + 0x1071, 0x1072, 0x1073, 0x1074, 0x1075, 0x1076, 0x1077, 0x1078, + 0x1079, 0x107a, 0x107b, 0x107c, 0x107d, 0x107e, 0x107f, 0x1080, + 0x1081, 0x1082, 0x1083, 0x1084, 0x1085, 0x1086, 0x1087, 0x1088, + 0x1089, 0x108a, 0x108b, 0x108c, 0x108d, 0x108e, 0x108f, 0x1090, + 0x1091, 0x1092, 0x1093, 0x1094, 0x1095, 0x1096, 0x0001, 0x0002, + 0x0003, 0x0004, 0x0005, 0x0000, 0x0000, 0x0000, + /* 0x12521..0x1257E */ + 0x10a1, 0x10a2, 0x10a3, 0x10a4, 0x10a5, 0x10a6, 0x10a7, 0x10a8, + 0x10a9, 0x10aa, 0x10ab, 0x10ac, 0x10ad, 0x10ae, 0x10af, 0x10b0, + 0x10b1, 0x10b2, 0x10b3, 0x10b4, 0x10b5, 0x10b6, 0x10b7, 0x10b8, + 0x10b9, 0x10ba, 0x10bb, 0x10bc, 0x10bd, 0x10be, 0x10bf, 0x10c0, + 0x10c1, 0x10c2, 0x10c3, 0x10c4, 0x10c5, 0x10c6, 0x10c7, 0x10c8, + 0x10c9, 0x10ca, 0x10cb, 0x10cc, 0x10cd, 0x10ce, 0x10cf, 0x10d0, + 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7, 0x10d8, + 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df, 0x10e0, + 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, 0x10e8, + 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef, 0x10f0, + 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0x10f6, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, + /* 0x12621..0x1267E */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, + 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, + 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, + 0x0d64, 0x0d60, 0x0d62, 0x0d66, 0x0d61, 0x0d65, 0x0d67, 0x0d63, + 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, + 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, + 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, + 0x03c2, 0x0bf5, 0x0bf6, 0x0bf7, 0x0bf8, 0x0bf9, 0x0bfa, 0x0bfb, + 0x0bfc, 0x0bfd, 0x0bfe, 0x0d16, 0x0d17, 0x1020, 0x0d0e, 0x0d00, + 0x0d01, 0x0d02, 0x0d03, 0x0d68, 0x0cb1, 0x11f0, 0x11f1, 0x11f2, + 0x11f3, 0x11f4, 0x11f5, 0x11f6, 0x11f7, 0x11f8, 0x11f9, 0x000e, + 0x11fa, 0x11fb, 0x11fc, 0x11fd, 0x11fe, 0x11ff, + /* 0x12721..0x1277E */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 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, 0x0abe, 0x0abf, 0x0ac0, 0x0ac1, 0x0ac2, 0x0ac3, 0x0ac4, + 0x0ac5, 0x0ac6, 0x0ac7, 0x0ac8, 0x0ac9, 0x0aca, 0x0acb, 0x0acc, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, + 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, + 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, + 0x044f, 0x10f7, 0x10f8, 0x10f9, 0x10fa, 0x09da, 0x09db, 0x0853, + 0x0854, 0x0855, 0x0e13, 0x0a18, 0x0b23, 0x0ace, + /* 0x12821..0x1287E */ + 0x0c00, 0x0c02, 0x0c0c, 0x0c10, 0x0c18, 0x0c14, 0x0c1c, 0x0c2c, + 0x0c24, 0x0c34, 0x0c3c, 0x0c01, 0x0c03, 0x0c0f, 0x0c13, 0x0c1b, + 0x0c17, 0x0c23, 0x0c33, 0x0c2b, 0x0c3b, 0x0c4b, 0x0c20, 0x0c2f, + 0x0c28, 0x0c37, 0x0c3f, 0x0c1d, 0x0c30, 0x0c25, 0x0c38, 0x0c42, + 0x1251, 0x1252, 0x1253, 0x1254, 0x1255, 0x1256, 0x1257, 0x1258, + 0x1259, 0x125a, 0x125b, 0x125c, 0x125d, 0x125e, 0x125f, 0x12b1, + 0x12b2, 0x12b3, 0x12b4, 0x12b5, 0x12b6, 0x12b7, 0x12b8, 0x12b9, + 0x12ba, 0x12bb, 0x12bc, 0x12bd, 0x12be, 0x12bf, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0cd0, 0x0cd1, + 0x0cd2, 0x0cd3, 0x073c, 0x0747, 0x0748, 0x0749, 0x01cd, 0x01ce, + 0x01d0, 0x053e, 0x053f, 0x01f8, 0x01f9, 0x01d1, 0x01d2, 0x01d4, + 0x01d6, 0x01d8, 0x01da, 0x01dc, 0x0000, 0x0000, + /* 0x12921..0x1297E */ + 0x07ac, 0x00a0, 0x00a1, 0x00a4, 0x00a6, 0x00a9, 0x00aa, 0x00ab, + 0x00ad, 0x00ae, 0x00af, 0x00b2, 0x00b3, 0x00b7, 0x00b8, 0x00b9, + 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, + 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, + 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, + 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d8, 0x00d9, 0x00da, + 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, + 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, + 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, + 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f8, 0x00f9, 0x00fa, 0x00fb, + 0x00fc, 0x00fd, 0x00fe, 0x00ff, 0x0100, 0x012a, 0x016a, 0x0112, + 0x014c, 0x0101, 0x012b, 0x016b, 0x0113, 0x014d, + /* 0x12A21..0x12A7E */ + 0x0104, 0x02d8, 0x0141, 0x013d, 0x015a, 0x0160, 0x015e, 0x0164, + 0x0179, 0x017d, 0x017b, 0x0105, 0x02db, 0x0142, 0x013e, 0x015b, + 0x02c7, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, + 0x0154, 0x0102, 0x0139, 0x0106, 0x010c, 0x0118, 0x011a, 0x010e, + 0x0143, 0x0147, 0x0150, 0x0158, 0x016e, 0x0170, 0x0162, 0x0155, + 0x0103, 0x013a, 0x0107, 0x010d, 0x0119, 0x011b, 0x010f, 0x0111, + 0x0144, 0x0148, 0x0151, 0x0159, 0x016f, 0x0171, 0x0163, 0x02d9, + 0x0108, 0x011c, 0x0124, 0x0134, 0x015c, 0x016c, 0x0109, 0x011d, + 0x0125, 0x0135, 0x015d, 0x016d, 0x0271, 0x028b, 0x027e, 0x0283, + 0x0292, 0x026c, 0x026e, 0x0279, 0x0288, 0x0256, 0x0273, 0x027d, + 0x0282, 0x0290, 0x027b, 0x026d, 0x025f, 0x0272, 0x029d, 0x028e, + 0x0261, 0x014b, 0x0270, 0x0281, 0x0127, 0x0295, + /* 0x12B21..0x12B7E */ + 0x0294, 0x0266, 0x0298, 0x01c2, 0x0253, 0x0257, 0x0284, 0x0260, + 0x0193, 0x0153, 0x0152, 0x0268, 0x0289, 0x0258, 0x0275, 0x0259, + 0x025c, 0x025e, 0x0250, 0x026f, 0x028a, 0x0264, 0x028c, 0x0254, + 0x0251, 0x0252, 0x028d, 0x0265, 0x02a2, 0x02a1, 0x0255, 0x0291, + 0x027a, 0x0267, 0x025a, 0x000f, 0x01fd, 0x0670, 0x0671, 0x0010, + 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0672, + 0x0673, 0x0361, 0x02c8, 0x02cc, 0x02d0, 0x02d1, 0x0306, 0x073f, + 0x030b, 0x0301, 0x0304, 0x0300, 0x030f, 0x030c, 0x0302, 0x02e5, + 0x02e6, 0x02e7, 0x02e8, 0x02e9, 0x0018, 0x0019, 0x0325, 0x032c, + 0x0339, 0x031c, 0x031f, 0x0320, 0x0308, 0x033d, 0x0329, 0x032f, + 0x02de, 0x0324, 0x0330, 0x033c, 0x0334, 0x031d, 0x031e, 0x0318, + 0x0319, 0x032a, 0x033a, 0x033b, 0x0303, 0x031a, + /* 0x12C21..0x12C7E */ + 0x0e76, 0x0e77, 0x0e78, 0x0e79, 0x0e7a, 0x0e7b, 0x0e7c, 0x0e7d, + 0x0e7e, 0x0e7f, 0x0beb, 0x0bec, 0x0bed, 0x0bee, 0x0bef, 0x0bf0, + 0x0bf1, 0x0bf2, 0x0bf3, 0x0bf4, 0x0870, 0x0871, 0x0872, 0x0873, + 0x0874, 0x0875, 0x0876, 0x0877, 0x0878, 0x0879, 0x087a, 0x087b, + 0x0bd0, 0x0bd1, 0x0bd2, 0x0bd3, 0x0bd4, 0x0bd5, 0x0bd6, 0x0bd7, + 0x0bd8, 0x0bd9, 0x0bda, 0x0bdb, 0x0bdc, 0x0bdd, 0x0bde, 0x0bdf, + 0x0be0, 0x0be1, 0x0be2, 0x0be3, 0x0be4, 0x0be5, 0x0be6, 0x0be7, + 0x0be8, 0x0be9, 0x12d0, 0x12d1, 0x12d2, 0x12d3, 0x12d4, 0x12d5, + 0x12d6, 0x12d7, 0x12d8, 0x12d9, 0x12da, 0x12db, 0x12dc, 0x12dd, + 0x12de, 0x12df, 0x12e0, 0x12e1, 0x12e2, 0x12e3, 0x12fa, 0x12e9, + 0x12e5, 0x12ed, 0x12ec, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0751, 0x0742, + /* 0x12D21..0x12D7E */ + 0x0b60, 0x0b61, 0x0b62, 0x0b63, 0x0b64, 0x0b65, 0x0b66, 0x0b67, + 0x0b68, 0x0b69, 0x0b6a, 0x0b6b, 0x0b6c, 0x0b6d, 0x0b6e, 0x0b6f, + 0x0b70, 0x0b71, 0x0b72, 0x0b73, 0x0860, 0x0861, 0x0862, 0x0863, + 0x0864, 0x0865, 0x0866, 0x0867, 0x0868, 0x0869, 0x086a, 0x1349, + 0x1314, 0x1322, 0x134d, 0x1318, 0x1327, 0x1303, 0x1336, 0x1351, + 0x1357, 0x130d, 0x1326, 0x1323, 0x132b, 0x134a, 0x133b, 0x139c, + 0x139d, 0x139e, 0x138e, 0x138f, 0x13c4, 0x13a1, 0x086b, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x137b, 0x101d, + 0x101f, 0x0816, 0x13cd, 0x0821, 0x12a4, 0x12a5, 0x12a6, 0x12a7, + 0x12a8, 0x1231, 0x1232, 0x1239, 0x137e, 0x137d, 0x137c, 0x0000, + 0x0000, 0x0000, 0x092e, 0x0000, 0x0000, 0x0000, 0x0000, 0x091f, + 0x09bf, 0x0000, 0x0000, 0x0000, 0x0e56, 0x0d1e, + /* 0x12E21..0x12E7E */ + 0x2ff1, 0x840b, 0x1402, 0x2e28, 0x2e2f, 0x2e30, 0x2e8d, 0x2ee1, + 0x2efd, 0x2eff, 0x2f03, 0x2f0b, 0x2f60, 0x2f48, 0x2f49, 0x2f56, + 0x2f5f, 0x2f6a, 0x2f6c, 0x2f7e, 0x2f8a, 0x2f94, 0x2f97, 0x8130, + 0x2fc9, 0x2fe0, 0x3001, 0x3002, 0x300e, 0x3018, 0x3027, 0x302e, + 0x3040, 0x303b, 0x3041, 0x3094, 0x30cc, 0x30f2, 0x30d0, 0x30e6, + 0x8131, 0x3106, 0x3103, 0x310b, 0x311e, 0x3135, 0x314a, 0x8132, + 0x3155, 0x3157, 0x14b5, 0x319d, 0x31c3, 0x31ca, 0x31de, 0x31e2, + 0x31ee, 0x3201, 0x14db, 0x3213, 0x3215, 0x3249, 0x3257, 0x3261, + 0x3293, 0x32c8, 0x8133, 0x32cc, 0x32d0, 0x32d6, 0x32db, 0x8134, + 0x32f0, 0x32fb, 0x3300, 0x3307, 0x331c, 0x8135, 0x3361, 0x3363, + 0x337d, 0x3393, 0x339d, 0x33b2, 0x3412, 0x3427, 0x344d, 0x349c, + 0x346b, 0x3474, 0x347f, 0x3488, 0x3496, 0x34a1, + /* 0x12F21..0x12F7E */ + 0x34a9, 0x34c6, 0x34ff, 0x350e, 0x352b, 0x3535, 0x3550, 0x355e, + 0x3581, 0x3586, 0x358e, 0x8136, 0x35ad, 0x35ce, 0x8137, 0x3608, + 0x360e, 0x363b, 0x3649, 0x3676, 0x3666, 0x8138, 0x366f, 0x3671, + 0x3672, 0x3699, 0x369e, 0x36a9, 0x36ac, 0x36b3, 0x36c9, 0x36ca, + 0x370a, 0x923d, 0x3721, 0x372f, 0x3733, 0x3734, 0x3770, 0x3777, + 0x377c, 0x379c, 0x810f, 0x931b, 0x37b8, 0x37c7, 0x37c8, 0x37cf, + 0x37e4, 0x37ed, 0x37f5, 0x37f6, 0x37ff, 0x3809, 0x8110, 0x3861, + 0x3864, 0x8139, 0x387c, 0x3889, 0x389e, 0x813a, 0x38a9, 0x946e, + 0x38d2, 0x38ce, 0x38d4, 0x38da, 0x38e0, 0x38e9, 0x390c, 0x6641, + 0x395d, 0x396d, 0x398b, 0x3992, 0x39a4, 0x39c3, 0x39d2, 0x39dd, + 0x3a13, 0x3a23, 0x3a67, 0x3a6d, 0x3a77, 0x3a7e, 0x3a84, 0x3a9e, + 0x3aa7, 0x3ac4, 0x98bd, 0x3b19, 0x3b25, 0x325d, + /* 0x13021..0x1307E */ + 0x2e9c, 0x3516, 0x3a03, 0x763f, 0x34c0, 0x411b, 0x4328, 0x39f6, + 0x7022, 0x6475, 0x631c, 0x5a50, 0x40aa, 0x43e1, 0x4e25, 0x45ed, + 0x6466, 0x62a6, 0x7bf5, 0x4893, 0x3727, 0x45a1, 0x4271, 0x3b9b, + 0x39d0, 0x667b, 0x78f4, 0x5d62, 0x5dbe, 0x7b8e, 0x4216, 0x5c9f, + 0x68b7, 0x3b89, 0x3eb5, 0x4309, 0x4697, 0x4848, 0x75c7, 0x778d, + 0x474f, 0x2ee5, 0x2f0a, 0x2f4d, 0x2f9d, 0x3049, 0x36f2, 0x3937, + 0x39d4, 0x3a01, 0x3c09, 0x40df, 0x410f, 0x4170, 0x4613, 0x4905, + 0x50ba, 0x554f, 0x5570, 0x59fb, 0x5dad, 0x5def, 0x60c3, 0x640e, + 0x6863, 0x6b02, 0x7055, 0x707a, 0x333b, 0x2e95, 0x2ea5, 0x37df, + 0x60b2, 0x70c1, 0x58ef, 0x2e00, 0x38f1, 0x4ea2, 0x7038, 0x5a32, + 0x6328, 0x628b, 0x7c2f, 0x3141, 0x3370, 0x34bd, 0x34e1, 0x36e0, + 0x39fb, 0x3f15, 0x78f2, 0x4deb, 0x60e4, 0x652d, + /* 0x13121..0x1317E */ + 0x7662, 0x7670, 0x76a0, 0x77fb, 0x340b, 0x33f3, 0x3b87, 0x50cf, + 0x5fbd, 0x6fc2, 0x76e8, 0x336f, 0x7d5c, 0x5aba, 0x2e11, 0x5893, + 0x61fc, 0x4e26, 0x3618, 0x3504, 0x4b1d, 0x651a, 0x7c3b, 0x39e5, + 0x33a9, 0x4d66, 0x54dc, 0x758f, 0x3642, 0x2e91, 0x704b, 0x76f2, + 0x634f, 0x790c, 0x33e1, 0x35b6, 0x3b30, 0x3f71, 0x4620, 0x46f3, + 0x4804, 0x4c38, 0x4cf3, 0x4d29, 0x545b, 0x56c8, 0x5a4e, 0x7834, + 0x62f1, 0x685b, 0x6a60, 0x72ed, 0x4db2, 0x55ab, 0x56ca, 0x79c5, + 0x40a6, 0x6b01, 0x6d8a, 0x75b2, 0x498e, 0x33ad, 0x3186, 0x3712, + 0x3830, 0x3944, 0x3bb4, 0x3ef6, 0x4028, 0x43a9, 0x43f4, 0x4cbf, + 0x4f14, 0x508e, 0x5114, 0x5159, 0x51d5, 0x533f, 0x5e01, 0x6276, + 0x62d1, 0x6597, 0x7060, 0x725b, 0x7d1b, 0x3869, 0x45bc, 0x4c5a, + 0x5525, 0x31f9, 0x392e, 0x3965, 0x3f80, 0x3fdc, + /* 0x13221..0x1327E */ + 0x42bc, 0x45fa, 0x4a2a, 0x4b27, 0x4bb4, 0x538b, 0x5fc1, 0x6956, + 0x7d2c, 0x7d0e, 0x7ec4, 0x3ca1, 0x4c96, 0x637b, 0x3104, 0x3c4b, + 0x41b6, 0x61c6, 0x4876, 0x5261, 0x2e59, 0x2ffa, 0x3378, 0x4069, + 0x4e29, 0x5a4f, 0x77f3, 0x2e0b, 0x3316, 0x2eee, 0x2f55, 0x2f3d, + 0x2fa1, 0x2f73, 0x32a0, 0x33ef, 0x3609, 0x390f, 0x3ac1, 0x3bb6, + 0x3be1, 0x59d1, 0x4687, 0x479c, 0x47b6, 0x4b4c, 0x4cb3, 0x506b, + 0x53c2, 0x598d, 0x59be, 0x5a3c, 0x5b87, 0x62b1, 0x62db, 0x6304, + 0x6377, 0x63ef, 0x63d3, 0x6766, 0x6ab2, 0x3629, 0x6ca8, 0x6fe6, + 0x704e, 0x771e, 0x668a, 0x2fc4, 0x3ce8, 0x4211, 0x5259, 0x553b, + 0x61e5, 0x62bd, 0x66fe, 0x6cc0, 0x76c5, 0x7913, 0x79d5, 0x2ecb, + 0x2f1a, 0x69e3, 0x36de, 0x384a, 0x38ca, 0x3efb, 0x3feb, 0x402a, + 0x4094, 0x4062, 0x41d0, 0x4212, 0x42d0, 0x4539, + /* 0x13321..0x1337E */ + 0x7b41, 0x4666, 0x48b0, 0x4d77, 0x5070, 0x554c, 0x5686, 0x5d75, + 0x62a5, 0x67f9, 0x758b, 0x768e, 0x6c9d, 0x31f1, 0x32be, 0x3916, + 0x34b3, 0x3bb3, 0x3d16, 0x4168, 0x4982, 0x4daf, 0x588d, 0x64cb, + 0x6857, 0x6a72, 0x73a7, 0x7ab8, 0x4d6c, 0x79a8, 0x66d9, 0x37a3, + 0x47ff, 0x66ce, 0x720e, 0x3283, 0x3687, 0x3404, 0x3ed3, 0x42e1, + 0x44b9, 0x483c, 0x4838, 0x4bbb, 0x5372, 0x58ba, 0x5a6b, 0x699a, + 0x69d2, 0x6d6b, 0x6f03, 0x70ed, 0x75a3, 0x7694, 0x7769, 0x3b66, + 0x3cb3, 0x497d, 0x784d, 0x784e, 0x439b, 0x5b20, 0x4a2b, 0x4a7f, + 0x48b6, 0x7c0d, 0x4f5f, 0x3272, 0x359d, 0x4070, 0x42ec, 0x4d3b, + 0x4e07, 0x4ed1, 0x645b, 0x6910, 0x6f44, 0x2e14, 0x7c39, 0x33f6, + 0x491b, 0x4a3a, 0x7784, 0x482a, 0x315c, 0x5ac3, 0x64b2, 0x71dc, + 0x738c, 0x365b, 0x7d28, 0x4822, 0x6305, 0x6431, + /* 0x13421..0x1347E */ + 0x5ca5, 0x3208, 0x62c5, 0x54e6, 0x2e7e, 0x2f83, 0x31a0, 0x3bd2, + 0x320a, 0x32d8, 0x32e7, 0x3dfb, 0x359a, 0x382a, 0x39e6, 0x3b8c, + 0x3b98, 0x3bdb, 0x3e72, 0x3e79, 0x40a3, 0x411f, 0x4163, 0x41be, + 0x43db, 0x4562, 0x47d1, 0x4853, 0x48fa, 0x4b3e, 0x4b53, 0x4c57, + 0x4f22, 0x4f97, 0x4f45, 0x54b0, 0x5518, 0x56e3, 0x570b, 0x5aff, + 0x5ba1, 0x5c21, 0x5de9, 0x5f36, 0x5ff0, 0x609d, 0x6266, 0x639e, + 0x69b3, 0x6acc, 0x6cab, 0x7084, 0x7451, 0x7593, 0x7591, 0x75a2, + 0x7665, 0x77d3, 0x7928, 0x6218, 0x2e38, 0x342b, 0x3cb8, 0x3dcc, + 0x53a9, 0x564c, 0x573c, 0x3ca9, 0x5feb, 0x6d0b, 0x76c1, 0x7811, + 0x7854, 0x7858, 0x2f01, 0x2f0e, 0x3371, 0x359c, 0x3668, 0x37fa, + 0x3947, 0x3b09, 0x3bc4, 0x3c90, 0x3e0c, 0x3e7e, 0x3fcc, 0x43ee, + 0x473a, 0x45d7, 0x45e2, 0x471f, 0x48cb, 0x48c4, + /* 0x13521..0x1357E */ + 0x4a5f, 0x3e30, 0x4bc5, 0x4c17, 0x4c7d, 0x557f, 0x5948, 0x3b63, + 0x5a00, 0x5d00, 0x3fbd, 0x698f, 0x6a18, 0x6cb4, 0x6d77, 0x6ecc, + 0x6f1d, 0x78e2, 0x7a0e, 0x7b3c, 0x2e80, 0x307d, 0x3100, 0x3993, + 0x3b9c, 0x422f, 0x4280, 0x44ec, 0x4b3a, 0x52a0, 0x5591, 0x5947, + 0x5fa9, 0x67fb, 0x6abc, 0x6b70, 0x43ac, 0x63ca, 0x77a0, 0x3409, + 0x3403, 0x35ab, 0x4854, 0x4a58, 0x6a70, 0x5827, 0x4775, 0x7ecd, + 0x3374, 0x3ba2, 0x611a, 0x6650, 0x7006, 0x2e18, 0x2e45, 0x2ec7, + 0x2f11, 0x33ca, 0x3438, 0x3bae, 0x3f13, 0x4025, 0x4551, 0x473d, + 0x4c42, 0x4c72, 0x4ce3, 0x5078, 0x5403, 0x5a76, 0x5aae, 0x5b08, + 0x5d1a, 0x5cfe, 0x5d66, 0x45e7, 0x525b, 0x33bb, 0x3c45, 0x3de8, + 0x42d2, 0x42e0, 0x4319, 0x4e20, 0x665a, 0x6a31, 0x6ddd, 0x72f8, + 0x4f01, 0x59a6, 0x7b5a, 0x2ea8, 0x2eab, 0x2eac, + /* 0x13621..0x1367E */ + 0x2f9b, 0x2fa0, 0x30d1, 0x3147, 0x5af6, 0x3171, 0x31f6, 0x3354, + 0x3321, 0x337f, 0x33eb, 0x35ac, 0x3883, 0x3ce1, 0x3f37, 0x3f4a, + 0x402f, 0x4050, 0x406d, 0x431f, 0x4559, 0x4a4b, 0x4cc1, 0x52c2, + 0x52ed, 0x57ef, 0x60f8, 0x6105, 0x6208, 0x654e, 0x70f7, 0x73e1, + 0x77ff, 0x7957, 0x7a5a, 0x2ef0, 0x31dd, 0x3c2d, 0x4681, 0x496d, + 0x3c40, 0x46f2, 0x4975, 0x5389, 0x4850, 0x5c81, 0x30c5, 0x32e4, + 0x3747, 0x3dfe, 0x7326, 0x45a4, 0x4b23, 0x4b3d, 0x5434, 0x5981, + 0x59bd, 0x5b4b, 0x5dca, 0x62b9, 0x63cc, 0x687f, 0x695f, 0x6b39, + 0x6fd1, 0x71d1, 0x341f, 0x7280, 0x2e5d, 0x3036, 0x33e5, 0x333a, + 0x52d7, 0x5396, 0x57e9, 0x62e6, 0x6eaf, 0x79c6, 0x79c8, 0x79d2, + 0x3177, 0x411a, 0x665e, 0x35b0, 0x5a7a, 0x3076, 0x3bd3, 0x7047, + 0x7685, 0x2e32, 0x4adb, 0x71e7, 0x3c51, 0x3c48, + /* 0x13721..0x1377E */ + 0x4398, 0x5a9f, 0x4c93, 0x7774, 0x6f61, 0x5aaa, 0x518a, 0x7688, + 0x5c82, 0x4817, 0x5e70, 0x4851, 0x736c, 0x32f2, 0x341b, 0x65ab, + 0x6a13, 0x5fa4, 0x6ecd, 0x70e1, 0x3366, 0x6888, 0x5941, 0x2fc2, + 0x30be, 0x3211, 0x3144, 0x3553, 0x372d, 0x53ea, 0x378b, 0x3951, + 0x3f62, 0x3f84, 0x4075, 0x4176, 0x4167, 0x41a9, 0x43b2, 0x443a, + 0x456c, 0x466f, 0x4842, 0x4e13, 0x5566, 0x5a3d, 0x5cfb, 0x5d4c, + 0x5d99, 0x5e4b, 0x5f6b, 0x630e, 0x634a, 0x66cd, 0x6a08, 0x6a63, + 0x6b66, 0x6efd, 0x781a, 0x7d8f, 0x62b8, 0x6fce, 0x7be8, 0x3287, + 0x421f, 0x4483, 0x4fc0, 0x7699, 0x4841, 0x3091, 0x4b20, 0x4c7a, + 0x4f54, 0x5a74, 0x5d50, 0x6840, 0x6a23, 0x4708, 0x2ef6, 0x3039, + 0x3026, 0x3065, 0x317c, 0x3238, 0x3263, 0x35a7, 0x370f, 0x3805, + 0x3acc, 0x3efa, 0x41b2, 0x41f8, 0x42f3, 0x4372, + /* 0x13821..0x1387E */ + 0x491c, 0x4a29, 0x527d, 0x52ac, 0x532e, 0x5814, 0x586f, 0x5d79, + 0x570c, 0x60a9, 0x698b, 0x6b19, 0x6ce2, 0x6ed2, 0x7063, 0x7375, + 0x767a, 0x7855, 0x7a13, 0x7e78, 0x3143, 0x339f, 0x33b3, 0x3e7b, + 0x3f26, 0x4e1b, 0x4e90, 0x5384, 0x53fe, 0x5d43, 0x6237, 0x6a00, + 0x6afa, 0x7650, 0x2e4e, 0x300b, 0x33e4, 0x347c, 0x36fa, 0x39d1, + 0x3b64, 0x3df1, 0x3eab, 0x3f27, 0x4238, 0x4545, 0x47af, 0x4e56, + 0x52d0, 0x5cca, 0x68b4, 0x60a1, 0x60e1, 0x63f0, 0x664e, 0x6a87, + 0x6de8, 0x7237, 0x76c7, 0x7867, 0x7f13, 0x2e94, 0x2e92, 0x2f0d, + 0x3348, 0x3449, 0x343e, 0x3a2f, 0x3f8c, 0x3fa1, 0x409f, 0x48a7, + 0x4a8e, 0x545a, 0x5881, 0x6a9e, 0x6aa4, 0x6b77, 0x7190, 0x2e5e, + 0x7bc9, 0x2ea4, 0x2f7c, 0x2faf, 0x3019, 0x3016, 0x3149, 0x316c, + 0x329f, 0x32b9, 0x32fe, 0x339a, 0x33e3, 0x3411, + /* 0x13921..0x1397E */ + 0x340e, 0x3589, 0x3751, 0x37a2, 0x397d, 0x3b54, 0x3b5d, 0x3b8f, + 0x3de5, 0x3de7, 0x3df7, 0x3e78, 0x3e83, 0x3e9a, 0x3eb7, 0x3f18, + 0x4052, 0x414c, 0x4297, 0x42d8, 0x43a7, 0x453b, 0x4602, 0x4643, + 0x46f4, 0x476d, 0x4821, 0x4897, 0x49cb, 0x4c5f, 0x4d2a, 0x4d69, + 0x4e2f, 0x4e9d, 0x5532, 0x5687, 0x586c, 0x5a3f, 0x5ce0, 0x5d05, + 0x5d18, 0x5d5e, 0x5db1, 0x6015, 0x6003, 0x60af, 0x60b1, 0x6154, + 0x618f, 0x622a, 0x6352, 0x684c, 0x6861, 0x6b1b, 0x6ca2, 0x6cfc, + 0x70ca, 0x7175, 0x7271, 0x583f, 0x72fc, 0x75a4, 0x764d, 0x7805, + 0x7999, 0x7ad8, 0x7d3b, 0x325b, 0x32ab, 0x33f7, 0x3408, 0x38d5, + 0x42f7, 0x4fe0, 0x6c6a, 0x6f5f, 0x7eb9, 0x314b, 0x323b, 0x344a, + 0x36fd, 0x5a40, 0x7177, 0x7d60, 0x7ed2, 0x5344, 0x4f09, 0x6170, + 0x5511, 0x3ffd, 0x40da, 0x7aa8, 0x52db, 0x6fbc, + /* 0x13A21..0x13A7E */ + 0x4b64, 0x7803, 0x2eca, 0x36f0, 0x3764, 0x38be, 0x3a5a, 0x4068, + 0x41c7, 0x460f, 0x4606, 0x4839, 0x48b1, 0x4df7, 0x55d5, 0x5d3a, + 0x626e, 0x7b42, 0x2e9b, 0x2f50, 0x33c9, 0x3506, 0x3d6f, 0x3de6, + 0x3dee, 0x47fb, 0x4c99, 0x5473, 0x5802, 0x6a50, 0x7396, 0x68df, + 0x3750, 0x3ea7, 0x432b, 0x30b5, 0x30ac, 0x318d, 0x4700, 0x34c9, + 0x385e, 0x39bb, 0x3bb0, 0x3f69, 0x424d, 0x43a1, 0x483d, 0x4b73, + 0x4e08, 0x507d, 0x71c7, 0x5280, 0x5815, 0x5826, 0x596d, 0x458e, + 0x5d30, 0x63dc, 0x68c1, 0x6f09, 0x769b, 0x3264, 0x3728, 0x4750, + 0x5f6a, 0x6ca1, 0x31b4, 0x3742, 0x762a, 0x383a, 0x498a, 0x60b4, + 0x34b2, 0x3d0e, 0x37fc, 0x5895, 0x7dfa, 0x2f5c, 0x324a, 0x348b, + 0x443e, 0x4628, 0x4714, 0x47f5, 0x5a84, 0x5b56, 0x5d22, 0x732f, + 0x485c, 0x7bad, 0x5b39, 0x3319, 0x318a, 0x3237, + /* 0x13B21..0x13B7E */ + 0x3bdf, 0x42f6, 0x44ae, 0x44e6, 0x472d, 0x4bba, 0x65a9, 0x76d1, + 0x5690, 0x7bd6, 0x434c, 0x7306, 0x7bab, 0x56bf, 0x4652, 0x2e09, + 0x3098, 0x33c2, 0x3c71, 0x40e8, 0x4492, 0x4563, 0x485f, 0x51e6, + 0x53ca, 0x5523, 0x5b97, 0x5e82, 0x6695, 0x6b83, 0x6cdb, 0x7178, + 0x7910, 0x45ac, 0x46ab, 0x4b8b, 0x2ed5, 0x2ed4, 0x2f3a, 0x2f7f, + 0x323a, 0x33f8, 0x33f2, 0x35e3, 0x36db, 0x38eb, 0x39cb, 0x39c9, + 0x39ff, 0x3b50, 0x3c4d, 0x3e02, 0x3e2b, 0x3fd7, 0x401d, 0x4307, + 0x452f, 0x3b5c, 0x45af, 0x45bd, 0x45e8, 0x479d, 0x4b62, 0x4b7b, + 0x4c0f, 0x5345, 0x5949, 0x59c1, 0x5cf8, 0x5d19, 0x5d2b, 0x60a2, + 0x6102, 0x61f3, 0x6996, 0x6a5e, 0x6a69, 0x6a66, 0x6a8c, 0x6aee, + 0x6cc7, 0x6cdc, 0x76cc, 0x78fc, 0x4b6f, 0x2e8b, 0x2f3c, 0x2f8d, + 0x3150, 0x3b57, 0x3bfa, 0x4148, 0x4301, 0x4642, + /* 0x13C21..0x13C7E */ + 0x4b21, 0x4ecb, 0x4cbb, 0x523e, 0x54bd, 0x55d4, 0x58c1, 0x593a, + 0x600c, 0x6033, 0x61ea, 0x6494, 0x6f9e, 0x4c50, 0x7e7f, 0x3f0f, + 0x6b58, 0x7d2b, 0x5afa, 0x6ef8, 0x3b8d, 0x76eb, 0x2e03, 0x33f1, + 0x37f7, 0x3931, 0x3ac9, 0x3ba4, 0x4089, 0x4e7f, 0x4f06, 0x55be, + 0x6cea, 0x3b9f, 0x6500, 0x5be0, 0x3072, 0x47f4, 0x629d, 0x3c61, + 0x654a, 0x5e1e, 0x620e, 0x3199, 0x3c04, 0x4368, 0x6d66, 0x459c, + 0x516e, 0x593e, 0x5d17, 0x6005, 0x6b1d, 0x6eca, 0x706e, 0x66c7, + 0x70aa, 0x301f, 0x32fa, 0x3c3a, 0x4753, 0x507c, 0x5235, 0x714c, + 0x71c8, 0x732b, 0x62e5, 0x3bc2, 0x3f31, 0x40f9, 0x2e3b, 0x33d6, + 0x3b88, 0x424b, 0x4731, 0x4b8a, 0x52e9, 0x53e0, 0x5a2e, 0x616b, + 0x6da3, 0x7152, 0x7996, 0x3112, 0x33d7, 0x346a, 0x3bff, 0x4388, + 0x4a39, 0x5dac, 0x7700, 0x36da, 0x33ce, 0x3468, + /* 0x13D21..0x13D7E */ + 0x3b97, 0x3c31, 0x3dde, 0x2fee, 0x4101, 0x42fe, 0x4d32, 0x59c0, + 0x59cb, 0x5d42, 0x5e4d, 0x5fd2, 0x61ed, 0x621f, 0x6490, 0x6846, + 0x6972, 0x6b90, 0x6e74, 0x6f2f, 0x7031, 0x714b, 0x716c, 0x76c6, + 0x719c, 0x2ec0, 0x2f4f, 0x3145, 0x3341, 0x3f93, 0x420e, 0x47d4, + 0x4c41, 0x4e0b, 0x5363, 0x5e26, 0x71cd, 0x7283, 0x33d4, 0x3919, + 0x3bbf, 0x4dd1, 0x595d, 0x5e2e, 0x5c9b, 0x387e, 0x519f, 0x31fa, + 0x6853, 0x6ff0, 0x2fca, 0x3cfb, 0x4625, 0x57ac, 0x5ae3, 0x621c, + 0x79ff, 0x31c6, 0x3faa, 0x45ec, 0x496f, 0x4b89, 0x4df3, 0x4e96, + 0x4f64, 0x56fe, 0x5d14, 0x3de1, 0x7075, 0x7187, 0x7806, 0x31e6, + 0x321d, 0x4240, 0x4691, 0x46d9, 0x4e1a, 0x3eb6, 0x5dd2, 0x5f72, + 0x46f8, 0x65af, 0x65f7, 0x6af8, 0x32a9, 0x33d9, 0x3973, 0x3e8f, + 0x3f90, 0x4055, 0x72e4, 0x7664, 0x30b7, 0x311f, + /* 0x13E21..0x13E7E */ + 0x32dd, 0x3320, 0x3347, 0x33ec, 0x34e8, 0x3546, 0x3531, 0x3617, + 0x3968, 0x39be, 0x3a3c, 0x3bb5, 0x3c06, 0x3c0f, 0x3c11, 0x3c1a, + 0x3e84, 0x3e8a, 0x3ee0, 0x3f70, 0x427f, 0x4284, 0x42db, 0x438c, + 0x4377, 0x4607, 0x460c, 0x462d, 0x4676, 0x477e, 0x48a2, 0x4a1f, + 0x4a35, 0x4cbc, 0x4d88, 0x4e09, 0x4e58, 0x513c, 0x5126, 0x5167, + 0x55c7, 0x5701, 0x585d, 0x5901, 0x5965, 0x59f0, 0x5ae0, 0x5b11, + 0x5ca7, 0x5d39, 0x6096, 0x63d6, 0x648b, 0x6549, 0x685d, 0x68f3, + 0x6a1f, 0x6a3c, 0x6a54, 0x6a73, 0x6c61, 0x6cde, 0x71a4, 0x7266, + 0x737e, 0x7418, 0x769c, 0x7798, 0x2e0a, 0x2e08, 0x2e1e, 0x2e57, + 0x3197, 0x3270, 0x37ce, 0x3834, 0x38cc, 0x3b22, 0x3e38, 0x40c5, + 0x44fe, 0x4761, 0x4756, 0x4d44, 0x52b6, 0x5573, 0x5a63, 0x64b8, + 0x6b72, 0x71b8, 0x7320, 0x3631, 0x37f4, 0x78fe, + /* 0x13F21..0x13F7E */ + 0x42ed, 0x490d, 0x4b96, 0x51ed, 0x5e54, 0x6077, 0x6272, 0x69e6, + 0x78df, 0x6755, 0x6fb1, 0x3c3b, 0x2f38, 0x2fe1, 0x2fb5, 0x3507, + 0x3a20, 0x3bdd, 0x3be9, 0x3fc3, 0x414e, 0x432f, 0x45b0, 0x464b, + 0x48ee, 0x499b, 0x4d78, 0x4df1, 0x5533, 0x55b9, 0x571f, 0x595e, + 0x59e6, 0x5d33, 0x61e3, 0x62af, 0x65aa, 0x69aa, 0x6a3a, 0x6eab, + 0x6f9b, 0x7032, 0x71dd, 0x7707, 0x2eba, 0x2ec1, 0x3203, 0x3875, + 0x38ec, 0x3c0b, 0x551a, 0x3c3d, 0x614e, 0x6a0a, 0x6fc5, 0x7663, + 0x776d, 0x5b25, 0x6acf, 0x7808, 0x7162, 0x36f3, 0x33a8, 0x7017, + 0x3439, 0x3782, 0x3e25, 0x43a8, 0x4c34, 0x508a, 0x5761, 0x5c8b, + 0x5fe0, 0x6870, 0x7042, 0x7154, 0x7310, 0x7318, 0x768f, 0x545e, + 0x7ac4, 0x3d07, 0x3d69, 0x4570, 0x47a2, 0x6da8, 0x76db, 0x436e, + 0x4749, 0x4919, 0x63c5, 0x7817, 0x76c0, 0x68fe, + /* 0x14021..0x1407E */ + 0x4f84, 0x447a, 0x3bf8, 0x2e16, 0x502c, 0x555d, 0x462f, 0x31c4, + 0x3236, 0x32e2, 0x39d3, 0x3f81, 0x4027, 0x4210, 0x453f, 0x4574, + 0x461f, 0x4674, 0x48f2, 0x4816, 0x4b63, 0x4e05, 0x5272, 0x551f, + 0x56db, 0x5cbe, 0x6056, 0x38f0, 0x68fd, 0x697f, 0x6aa0, 0x6a93, + 0x6acb, 0x701d, 0x7192, 0x7752, 0x7759, 0x4589, 0x5a0e, 0x6106, + 0x76bb, 0x3e2d, 0x40dc, 0x421a, 0x45a5, 0x4614, 0x4790, 0x57f3, + 0x5a4d, 0x5c4d, 0x5e3e, 0x610a, 0x6cac, 0x6d64, 0x6de1, 0x6e5f, + 0x58a9, 0x3207, 0x42d9, 0x43a5, 0x4442, 0x4298, 0x6a2d, 0x5a83, + 0x5bc0, 0x6aac, 0x76ea, 0x5d76, 0x620c, 0x6749, 0x2ed9, 0x3148, + 0x3343, 0x3360, 0x3ba3, 0x3c02, 0x3c16, 0x3ddd, 0x4226, 0x4247, + 0x44b0, 0x4813, 0x4834, 0x4cc9, 0x4d45, 0x4d17, 0x47d3, 0x4f5c, + 0x514e, 0x517d, 0x45cb, 0x5a7f, 0x5bad, 0x5dda, + /* 0x14121..0x1417E */ + 0x5e4a, 0x5fa8, 0x617a, 0x621b, 0x6239, 0x65a6, 0x6a6e, 0x6cce, + 0x6df5, 0x7078, 0x7077, 0x72ad, 0x7291, 0x7583, 0x7bae, 0x324d, + 0x3584, 0x4f38, 0x5136, 0x3168, 0x5985, 0x5e55, 0x61b3, 0x5cce, + 0x364c, 0x3851, 0x3ca8, 0x43aa, 0x46fe, 0x46fd, 0x495a, 0x52d9, + 0x558f, 0x558e, 0x590e, 0x5956, 0x59df, 0x5c97, 0x5d20, 0x5d44, + 0x6607, 0x6a34, 0x763b, 0x7061, 0x7f20, 0x30e7, 0x3275, 0x33cc, + 0x33e2, 0x3009, 0x35aa, 0x38ee, 0x394f, 0x523d, 0x3b8b, 0x3c64, + 0x331d, 0x40e3, 0x40f3, 0x435c, 0x4383, 0x433f, 0x43bb, 0x44cd, + 0x45e9, 0x46f9, 0x3de3, 0x49cd, 0x49fd, 0x4f15, 0x51e5, 0x2e89, + 0x55e9, 0x56f8, 0x5a93, 0x5cdf, 0x5dcf, 0x5d9c, 0x6061, 0x6349, + 0x6358, 0x646c, 0x64bc, 0x65fb, 0x68c5, 0x6d70, 0x7001, 0x706d, + 0x7397, 0x771c, 0x7a12, 0x30cf, 0x3897, 0x418e, + /* 0x14221..0x1427E */ + 0x61d3, 0x6535, 0x6d08, 0x7020, 0x2fc3, 0x3074, 0x3247, 0x3373, + 0x406f, 0x4349, 0x475f, 0x4e2c, 0x6db3, 0x701f, 0x2fd7, 0x3c5e, + 0x6cca, 0x45cf, 0x5d9a, 0x3352, 0x6896, 0x3176, 0x43c3, 0x3b58, + 0x3b6b, 0x3c0a, 0x440d, 0x4751, 0x705c, 0x2ed6, 0x391a, 0x392a, + 0x4c70, 0x6a51, 0x353e, 0x3815, 0x39a5, 0x40f0, 0x4253, 0x47c1, + 0x6235, 0x4955, 0x7640, 0x79c4, 0x7a28, 0x2f53, 0x3806, 0x3bfe, + 0x6010, 0x3cb1, 0x3e2f, 0x3f85, 0x4020, 0x414b, 0x4234, 0x46ff, + 0x4cf0, 0x4ede, 0x60ce, 0x617f, 0x62d4, 0x688b, 0x6cb8, 0x7000, + 0x702e, 0x768a, 0x7edb, 0x7bdb, 0x2ee3, 0x33f0, 0x3927, 0x5b2c, + 0x718d, 0x784c, 0x7df9, 0x4edd, 0x5027, 0x3353, 0x3544, 0x3b85, + 0x4258, 0x429e, 0x42d3, 0x4ca2, 0x4fef, 0x5422, 0x6a17, 0x7438, + 0x4fc1, 0x6afe, 0x6338, 0x31e7, 0x66f8, 0x33ea, + /* 0x14321..0x1437E */ + 0x33e9, 0x2f46, 0x7054, 0x6fb0, 0x396a, 0x6131, 0x3dfd, 0x5aea, + 0x6fbf, 0x48da, 0x6c37, 0x52f8, 0x7c48, 0x4a3d, 0x6ab0, 0x2e39, + 0x3358, 0x3606, 0x3766, 0x42c5, 0x43a2, 0x45e6, 0x4b4e, 0x4de1, + 0x4e5b, 0x50ad, 0x57ed, 0x5aef, 0x5baa, 0x5dbb, 0x603d, 0x60c6, + 0x66cb, 0x6a95, 0x735b, 0x36e3, 0x38c7, 0x3f3e, 0x45ad, 0x4696, + 0x4a80, 0x4bb5, 0x5537, 0x6ac7, 0x3024, 0x57e5, 0x3730, 0x3f1b, + 0x4065, 0x467a, 0x4c60, 0x55f4, 0x5a1a, 0x5f6e, 0x61f4, 0x6718, + 0x7045, 0x79b3, 0x5bc9, 0x555c, 0x5af9, 0x5b51, 0x64c4, 0x7010, + 0x59e9, 0x5a92, 0x6336, 0x3ae1, 0x5740, 0x2e2d, 0x2ef2, 0x3b99, + 0x3fe0, 0x42bd, 0x463c, 0x47f1, 0x4ce8, 0x666b, 0x6877, 0x6a3b, + 0x714e, 0x72f3, 0x79d0, 0x4a17, 0x5026, 0x532a, 0x62e7, 0x6457, + 0x6caf, 0x2e01, 0x3146, 0x31cb, 0x358b, 0x3bf5, + /* 0x14421..0x1447E */ + 0x3e16, 0x3e33, 0x3e81, 0x3f14, 0x3f35, 0x3f6b, 0x3fb4, 0x41f2, + 0x4311, 0x46a2, 0x471d, 0x4f6e, 0x5252, 0x553a, 0x573a, 0x6074, + 0x6139, 0x6178, 0x6776, 0x6abf, 0x6adc, 0x6d85, 0x6df3, 0x729a, + 0x7577, 0x7802, 0x7ce5, 0x32c5, 0x4357, 0x56f4, 0x4715, 0x4c88, + 0x53cd, 0x6cc3, 0x73ae, 0x7673, 0x4d25, 0x389c, 0x490e, 0x49cc, + 0x6ffd, 0x739a, 0x55db, 0x701a, 0x385a, 0x4802, 0x43b4, 0x49fb, + 0x2f43, 0x4f2c, 0x47d8, 0x6fbb, 0x6526, 0x5db4, 0x7354, 0x493f, + 0x4f70, 0x376a, 0x38f7, 0x3b2c, 0x5d2c, 0x522a, 0x340a, 0x71e3, + 0x7db4, 0x2ead, 0x2f4e, 0x305c, 0x3075, 0x3243, 0x6c9e, 0x3448, + 0x3824, 0x3b9a, 0x3e1d, 0x3e95, 0x3ead, 0x3ef7, 0x3f1f, 0x408c, + 0x42b5, 0x433a, 0x43d0, 0x48af, 0x4c40, 0x5887, 0x598e, 0x5a0b, + 0x5de0, 0x6247, 0x6a02, 0x6ae6, 0x6e44, 0x7013, + /* 0x14521..0x1457E */ + 0x70b8, 0x712d, 0x71d8, 0x7f0e, 0x4ce5, 0x4458, 0x44e2, 0x4575, + 0x4ef4, 0x5684, 0x5b1b, 0x7069, 0x73d1, 0x4eba, 0x34f2, 0x3fb9, + 0x44a4, 0x6f4d, 0x6fed, 0x7244, 0x3178, 0x386b, 0x3929, 0x3c55, + 0x3e97, 0x4dfb, 0x5e8f, 0x551c, 0x6cbc, 0x6ee2, 0x785b, 0x50b9, + 0x2f1d, 0x4bbf, 0x4fb1, 0x5530, 0x76fb, 0x314e, 0x3410, 0x3835, + 0x3857, 0x39ac, 0x3c60, 0x3f92, 0x4597, 0x475c, 0x4e21, 0x567b, + 0x63df, 0x6ced, 0x7014, 0x70fd, 0x734d, 0x5825, 0x583a, 0x32aa, + 0x3ea6, 0x371f, 0x3974, 0x4012, 0x3012, 0x315a, 0x31ac, 0x31cd, + 0x3200, 0x3510, 0x3854, 0x3858, 0x3957, 0x3b95, 0x3cf6, 0x3d8b, + 0x40bc, 0x4295, 0x442d, 0x4771, 0x4843, 0x48bc, 0x48df, 0x56d7, + 0x4dd8, 0x4e6f, 0x4d9b, 0x506f, 0x51c8, 0x3f53, 0x55d8, 0x5977, + 0x5b49, 0x5b54, 0x5b52, 0x5cd6, 0x5d71, 0x3230, + /* 0x14621..0x1467E */ + 0x6463, 0x6569, 0x65e4, 0x6a0e, 0x6b04, 0x6c46, 0x6e0f, 0x7003, + 0x700f, 0x7419, 0x7676, 0x782d, 0x7a30, 0x75d8, 0x30cd, 0x32d5, + 0x340c, 0x3802, 0x3c0e, 0x41a7, 0x449e, 0x4d1e, 0x57b3, 0x5ae5, + 0x60f4, 0x6404, 0x7053, 0x7285, 0x3ce0, 0x7d07, 0x333f, 0x3f97, + 0x3fb3, 0x4d9c, 0x5279, 0x5763, 0x59bf, 0x5be4, 0x4bd2, 0x52ec, + 0x6aad, 0x4803, 0x4a61, 0x31f8, 0x5a81, 0x4934, 0x3c4a, 0x7cf6, + 0x62eb, 0x3bc5, 0x7149, 0x501e, 0x3678, 0x3c6f, 0x40c7, 0x4566, + 0x4c8c, 0x6c5a, 0x7041, 0x7813, 0x3451, 0x46c7, 0x720d, 0x3948, + 0x70a3, 0x3185, 0x2e4d, 0x31ea, 0x6599, 0x6b0e, 0x5058, 0x437a, + 0x734b, 0x4962, 0x79b4, 0x5e04, 0x5577, 0x3357, 0x4960, 0x6edf, + 0x76e3, 0x4c5d, 0x2e8c, 0x3c3c, 0x3f10, 0x6fe9, 0x3302, 0x6cd1, + 0x6089, 0x6679, 0x3eff, 0x45e5, 0x2e73, 0x3165, + /* 0x14721..0x1477E */ + 0x3982, 0x3c3f, 0x77ee, 0x2efb, 0x398a, 0x3fcd, 0x6a8d, 0x4fe1, + 0x59b0, 0x5962, 0x3be7, 0x6471, 0x532b, 0x51b1, 0x3e74, 0x3ff5, + 0x437b, 0x449a, 0x51c3, 0x5c98, 0x2e43, 0x3efc, 0x2e4b, 0x37dc, + 0x36a2, 0x40a9, 0x4fc3, 0x5d0d, 0x60fd, 0x6133, 0x61bf, 0x6fb2, + 0x6997, 0x66a4, 0x3df4, 0x428a, 0x44ad, 0x6987, 0x4777, 0x4ce2, + 0x4d3e, 0x5436, 0x5834, 0x3a46, 0x5f75, 0x62ad, 0x79ac, 0x2ff3, + 0x3ec3, 0x42dd, 0x4392, 0x4557, 0x476f, 0x56c3, 0x524c, 0x60cc, + 0x60ba, 0x6f29, 0x714d, 0x300d, 0x37f9, 0x3a92, 0x4885, 0x4973, + 0x5164, 0x52fd, 0x6cb7, 0x38f2, 0x6ce0, 0x766a, 0x7019, 0x677f, + 0x59e4, 0x57e7, 0x6429, 0x2f2f, 0x3265, 0x335a, 0x42cd, 0x47cf, + 0x4cca, 0x567d, 0x5b94, 0x5c95, 0x6236, 0x6584, 0x6feb, 0x46dd, + 0x4f20, 0x5206, 0x5e1b, 0x63ab, 0x79c1, 0x7ea6, + /* 0x14821..0x1487E */ + 0x31fd, 0x5bb1, 0x5872, 0x5bb8, 0x6087, 0x5b48, 0x4ae8, 0x3e61, + 0x608c, 0x5551, 0x5560, 0x316b, 0x7262, 0x4e8c, 0x567a, 0x7197, + 0x7aea, 0x2f10, 0x5f70, 0x429c, 0x5b4f, 0x75a5, 0x7ce9, 0x367a, + 0x3859, 0x66e4, 0x76bc, 0x2f34, 0x3224, 0x334a, 0x33cd, 0x33db, + 0x3e06, 0x442c, 0x4591, 0x477f, 0x4c3e, 0x4c4e, 0x5248, 0x52af, + 0x53ed, 0x5554, 0x5e41, 0x622c, 0x65e9, 0x6ca9, 0x5bc4, 0x71c6, + 0x5169, 0x7812, 0x78ef, 0x433d, 0x4669, 0x556a, 0x56e4, 0x58d0, + 0x6543, 0x66ee, 0x332a, 0x3351, 0x3426, 0x3983, 0x3e87, 0x3f7c, + 0x40b2, 0x4249, 0x4279, 0x42ab, 0x4590, 0x4bd4, 0x4ccc, 0x55b2, + 0x56ae, 0x5891, 0x59d8, 0x5dcb, 0x5f77, 0x60a5, 0x68ab, 0x6ab9, + 0x6cbb, 0x707f, 0x775e, 0x78db, 0x4a0b, 0x5c38, 0x3099, 0x3c3e, + 0x3fae, 0x4787, 0x4bd8, 0x5435, 0x5709, 0x5f8e, + /* 0x14921..0x1497E */ + 0x7f3b, 0x47ca, 0x5a17, 0x3339, 0x558b, 0x7aed, 0x3f66, 0x619d, + 0x63f1, 0x6098, 0x3f3c, 0x3fc5, 0x5562, 0x5b46, 0x703c, 0x4867, + 0x39eb, 0x3a9b, 0x5d10, 0x567e, 0x6b2c, 0x2ff5, 0x3f6a, 0x4a19, + 0x4c37, 0x4f02, 0x54e2, 0x5968, 0x6868, 0x6a55, 0x6c79, 0x3edf, + 0x43cf, 0x55c5, 0x59d2, 0x62d7, 0x7328, 0x72f2, 0x649c, 0x66ed, + 0x7c2d, 0x34c1, 0x3f6c, 0x458c, 0x4d5c, 0x5015, 0x6ca7, 0x6cd3, + 0x783b, 0x454f, 0x54f6, 0x2e0d, 0x2ed8, 0x37e0, 0x392b, 0x3a66, + 0x3bcc, 0x31a8, 0x3e03, 0x3e9c, 0x4016, 0x4276, 0x4577, 0x45a7, + 0x466e, 0x4d6e, 0x5236, 0x5b26, 0x6150, 0x619a, 0x6299, 0x6b5c, + 0x6ca0, 0x6ce6, 0x6d74, 0x761c, 0x7644, 0x2fae, 0x44ab, 0x4b66, + 0x621e, 0x6461, 0x656a, 0x70e8, 0x3c01, 0x4953, 0x78a8, 0x647a, + 0x6557, 0x2f0f, 0x326f, 0x3fa9, 0x3e45, 0x470d, + /* 0x14A21..0x14A7E */ + 0x598f, 0x6179, 0x6907, 0x6986, 0x4df5, 0x3f17, 0x4255, 0x4cb8, + 0x2ecf, 0x5269, 0x7b92, 0x3206, 0x343b, 0x3674, 0x38b3, 0x41a4, + 0x426e, 0x511a, 0x396e, 0x5c89, 0x5cde, 0x5d1b, 0x76f0, 0x4587, + 0x605e, 0x2e19, 0x2f75, 0x3175, 0x3840, 0x3e63, 0x3e73, 0x3f0a, + 0x47c4, 0x2e26, 0x653d, 0x7589, 0x765b, 0x5c73, 0x7801, 0x30fb, + 0x38c1, 0x5656, 0x58a7, 0x3225, 0x57a5, 0x6511, 0x5b86, 0x304f, + 0x3909, 0x5247, 0x5bc7, 0x5de8, 0x6fba, 0x6fd4, 0x704d, 0x2fbf, + 0x32c9, 0x3a29, 0x3f01, 0x77ad, 0x2fdd, 0x6217, 0x72ea, 0x3703, + 0x4355, 0x4b69, 0x552b, 0x68dc, 0x6f14, 0x5a42, 0x32df, 0x3893, + 0x4155, 0x420a, 0x46ae, 0x4bcd, 0x5c3f, 0x63e9, 0x3023, 0x2ff8, + 0x3305, 0x3446, 0x3831, 0x3949, 0x3b9d, 0x3cf0, 0x3cef, 0x3d29, + 0x3e96, 0x42b1, 0x4367, 0x453e, 0x45b9, 0x470b, + /* 0x14B21..0x14B7E */ + 0x4cd5, 0x4ce1, 0x50f9, 0x5832, 0x5e2b, 0x60de, 0x62b3, 0x640c, + 0x64ec, 0x6702, 0x6912, 0x6a2a, 0x6c4a, 0x70a6, 0x72d2, 0x78fd, + 0x7cf3, 0x7d6c, 0x2e4f, 0x2ea1, 0x308d, 0x3256, 0x374a, 0x39a8, + 0x3e3d, 0x3fd8, 0x3fd9, 0x423f, 0x46b4, 0x471b, 0x47d0, 0x48d2, + 0x3192, 0x5d21, 0x60aa, 0x61a8, 0x6b00, 0x6c8c, 0x6cbf, 0x727e, + 0x7632, 0x3420, 0x782c, 0x3317, 0x30d5, 0x335c, 0x38a8, 0x44b2, + 0x4734, 0x5267, 0x5766, 0x5a46, 0x71e6, 0x32c3, 0x4ca1, 0x4b86, + 0x3800, 0x3e4c, 0x3954, 0x472c, 0x5ffb, 0x31e1, 0x56c6, 0x4469, + 0x58e8, 0x7b54, 0x7ebb, 0x37cb, 0x39b9, 0x4627, 0x479a, 0x4bce, + 0x34e9, 0x49d9, 0x3e55, 0x619c, 0x4795, 0x7baa, 0x47fe, 0x7c52, + 0x485d, 0x2ea6, 0x2fe3, 0x33c8, 0x42b9, 0x472b, 0x4cab, 0x6fc4, + 0x2fad, 0x5e6d, 0x7ebf, 0x2e07, 0x4162, 0x4e80, + /* 0x14C21..0x14C7E */ + 0x4f2b, 0x6513, 0x3473, 0x472a, 0x7b45, 0x3df3, 0x5b95, 0x3cac, + 0x3bc6, 0x671c, 0x4e4a, 0x64d1, 0x5a14, 0x6108, 0x3999, 0x5c8d, + 0x4c11, 0x5720, 0x32d9, 0x3922, 0x5121, 0x525f, 0x57db, 0x7727, + 0x7d61, 0x490b, 0x3a7f, 0x3a18, 0x31a5, 0x340d, 0x347d, 0x460e, + 0x56df, 0x6ff7, 0x7298, 0x7cf4, 0x39ea, 0x525d, 0x4ec5, 0x314d, + 0x48c9, 0x5dbf, 0x5dec, 0x7762, 0x7eba, 0x4478, 0x4a21, 0x6302, + 0x3984, 0x3b5f, 0x4bdb, 0x531b, 0x56f2, 0x5db2, 0x6017, 0x6499, + 0x3132, 0x4728, 0x7ed9, 0x56ee, 0x4762, 0x32ff, 0x7905, 0x3c24, + 0x423b, 0x5c7e, 0x6cb0, 0x354f, 0x40b6, 0x5d0b, 0x7580, 0x3301, + 0x2e5f, 0x31b6, 0x391c, 0x523a, 0x6036, 0x71ce, 0x3f25, 0x57e2, + 0x3384, 0x3f79, 0x5d04, 0x65ac, 0x6a33, 0x6e8d, 0x7756, 0x47f3, + 0x65ae, 0x7453, 0x4109, 0x4108, 0x4cb9, 0x5652, + /* 0x14D21..0x14D7E */ + 0x6aed, 0x6f38, 0x352f, 0x2f51, 0x312a, 0x32c7, 0x33cb, 0x3ba5, + 0x3e7d, 0x40a0, 0x4182, 0x43d6, 0x4709, 0x47da, 0x4e67, 0x4d8c, + 0x5336, 0x5337, 0x5531, 0x5950, 0x68d5, 0x6a98, 0x704a, 0x7091, + 0x70f5, 0x76c4, 0x678d, 0x3915, 0x2e88, 0x2f59, 0x2e0e, 0x6a89, + 0x6f3f, 0x7810, 0x30ad, 0x3e7c, 0x3996, 0x3bb9, 0x3eb8, 0x43da, + 0x43fa, 0x44c1, 0x46dc, 0x494a, 0x49d8, 0x4d0b, 0x4eb6, 0x5194, + 0x5528, 0x5aaf, 0x5f8a, 0x6000, 0x6449, 0x64c9, 0x6981, 0x6b21, + 0x6e0a, 0x7065, 0x767d, 0x790a, 0x417e, 0x4291, 0x4b32, 0x4c83, + 0x4d74, 0x5fcc, 0x5ffc, 0x4dc0, 0x5f85, 0x67ba, 0x68f8, 0x4765, + 0x63b1, 0x783c, 0x76f7, 0x4d1b, 0x5d61, 0x643d, 0x716a, 0x2e71, + 0x3375, 0x3d50, 0x4b04, 0x4feb, 0x65cd, 0x662d, 0x69a7, 0x3229, + 0x340f, 0x3c65, 0x474e, 0x48a8, 0x5406, 0x5483, + /* 0x14E21..0x14E7E */ + 0x55e2, 0x68cf, 0x68e1, 0x71cc, 0x76e2, 0x7678, 0x3f8b, 0x5387, + 0x5acb, 0x644e, 0x43a0, 0x5565, 0x3289, 0x4d41, 0x4e9c, 0x5409, + 0x5559, 0x586b, 0x5c92, 0x7686, 0x5adc, 0x7f8d, 0x2fb6, 0x416e, + 0x45c5, 0x665c, 0x2e86, 0x2eae, 0x30da, 0x2e21, 0x31cc, 0x3bee, + 0x4599, 0x4881, 0x4dbc, 0x531f, 0x5642, 0x57ad, 0x5a1c, 0x5ce7, + 0x626f, 0x6ad2, 0x707c, 0x71cf, 0x7675, 0x7818, 0x329b, 0x5dd1, + 0x302b, 0x3398, 0x4797, 0x4dcb, 0x51d0, 0x5433, 0x61e8, 0x6f2a, + 0x76a3, 0x7c57, 0x7e9f, 0x5460, 0x3841, 0x4d99, 0x5d2f, 0x785e, + 0x2ee4, 0x2f36, 0x2f8b, 0x31b7, 0x32b1, 0x3dba, 0x401c, 0x53b2, + 0x593c, 0x62d3, 0x7234, 0x76b7, 0x76f6, 0x770a, 0x7e97, 0x7f62, + 0x46a6, 0x4b74, 0x3217, 0x32a3, 0x50c8, 0x68c2, 0x3ec9, 0x404b, + 0x4190, 0x4f23, 0x5149, 0x5c3e, 0x5df4, 0x606f, + /* 0x14F21..0x14F7E */ + 0x64ee, 0x7023, 0x732c, 0x3442, 0x7b6f, 0x4ad3, 0x5089, 0x6cc2, + 0x6def, 0x7732, 0x32b4, 0x3a41, 0x3eca, 0x3f04, 0x4717, 0x497c, + 0x4994, 0x4d6a, 0x4f0f, 0x5262, 0x52fc, 0x5bed, 0x6001, 0x607e, + 0x674b, 0x70ce, 0x316d, 0x7e93, 0x5984, 0x608b, 0x7332, 0x6ad6, + 0x302d, 0x348c, 0x6a71, 0x4b6a, 0x6cc4, 0x6107, 0x40d1, 0x47a0, + 0x7df2, 0x2e99, 0x2e98, 0x7c10, 0x6a6b, 0x65c1, 0x6568, 0x4900, + 0x4e7e, 0x5897, 0x6155, 0x8e9f, 0x3b41, 0x3b56, 0x3b7d, 0x3b93, + 0x3bd8, 0x3bec, 0x3c12, 0x3c1e, 0x3c23, 0x3c2b, 0x178d, 0x3c62, + 0x813b, 0x813c, 0x96b4, 0x3c7a, 0x3c8f, 0x3c9f, 0x3ca3, 0x3caa, + 0x3cba, 0x3ccb, 0x3cd0, 0x3cd2, 0x3cf4, 0x9c34, 0x17e2, 0x3d0d, + 0x3d27, 0x8111, 0x3d46, 0x3d47, 0x3d53, 0x3d4a, 0x3d6d, 0x3d81, + 0x3da0, 0x3da4, 0x3da7, 0x3db8, 0x3dcb, 0x341e, + /* 0x15021..0x1507E */ + 0x3f0c, 0x2e10, 0x2e15, 0x2e2a, 0x2e31, 0x2e36, 0x2e3c, 0x2e3f, + 0x2e42, 0x2e56, 0x2e58, 0x2e82, 0x2e85, 0x6c6b, 0x2e8a, 0x6212, + 0x3f0d, 0x2e8e, 0x2e9e, 0x2e9f, 0x2ea0, 0x2ea2, 0x2eb0, 0x2eb3, + 0x2eb6, 0x2ece, 0x2ecd, 0x2ec4, 0x2ec6, 0x2ec2, 0x2ed7, 0x2ede, + 0x2eed, 0x2edf, 0x2ef7, 0x2f09, 0x2f5a, 0x2f30, 0x2f5b, 0x2f5d, + 0x2f57, 0x2f47, 0x2f76, 0x2f88, 0x2f8f, 0x2f98, 0x2f7b, 0x2f69, + 0x2f70, 0x2f91, 0x2f6f, 0x2f86, 0x2f96, 0x3118, 0x2fd4, 0x2fdf, + 0x2fce, 0x2fd8, 0x2fdb, 0x2fd1, 0x2fda, 0x2fd0, 0x2fe4, 0x2fe5, + 0x301a, 0x3028, 0x3014, 0x302a, 0x3025, 0x3005, 0x2f1c, 0x2ff6, + 0x3021, 0x3029, 0x302c, 0x2ffe, 0x2fef, 0x3011, 0x3006, 0x3043, + 0x3047, 0x4703, 0x3055, 0x3050, 0x3048, 0x305a, 0x3056, 0x306c, + 0x3078, 0x3080, 0x309a, 0x3085, 0x30b4, 0x30b2, + /* 0x15121..0x1517E */ + 0x30c9, 0x30ca, 0x30b3, 0x30c2, 0x30d6, 0x30de, 0x30e5, 0x30ed, + 0x30e3, 0x30ee, 0x30f9, 0x30f5, 0x3109, 0x3101, 0x3102, 0x3116, + 0x3115, 0x3114, 0x311a, 0x3121, 0x313a, 0x3137, 0x313c, 0x313b, + 0x313f, 0x3140, 0x3152, 0x314c, 0x3154, 0x3162, 0x5af8, 0x3169, + 0x316a, 0x316e, 0x3180, 0x3182, 0x36d8, 0x318c, 0x3189, 0x318f, + 0x3191, 0x3193, 0x3195, 0x3196, 0x31a4, 0x31a6, 0x31a2, 0x31a9, + 0x31aa, 0x31ab, 0x31b3, 0x31b1, 0x31b2, 0x31b0, 0x31b5, 0x31bd, + 0x31c5, 0x31c9, 0x31db, 0x31e0, 0x6655, 0x31e9, 0x31ed, 0x31f0, + 0x31f5, 0x31fe, 0x3204, 0x320b, 0x3214, 0x320e, 0x3227, 0x322a, + 0x322e, 0x3233, 0x3239, 0x324f, 0x3244, 0x324b, 0x324c, 0x325e, + 0x3254, 0x326a, 0x3274, 0x3269, 0x3273, 0x327f, 0x327d, 0x328d, + 0x3294, 0x3292, 0x3271, 0x3288, 0x3291, 0x6fa8, + /* 0x15221..0x1527E */ + 0x6fa7, 0x32ac, 0x32ad, 0x32bc, 0x32b5, 0x32c1, 0x32cd, 0x32d7, + 0x32de, 0x32e3, 0x32e6, 0x78ed, 0x32e0, 0x32f3, 0x32f5, 0x32f8, + 0x32f9, 0x3306, 0x3308, 0x5538, 0x330d, 0x3310, 0x330f, 0x3315, + 0x331a, 0x3323, 0x332f, 0x3331, 0x3333, 0x3338, 0x3340, 0x3346, + 0x3345, 0x2e17, 0x3349, 0x334d, 0x31d6, 0x335e, 0x3369, 0x336e, + 0x3918, 0x337b, 0x3377, 0x3382, 0x3396, 0x33a0, 0x33a6, 0x33a5, + 0x33ae, 0x33b0, 0x33b6, 0x33c3, 0x5c12, 0x76d9, 0x33df, 0x46fc, + 0x51ee, 0x33ee, 0x33e8, 0x33ed, 0x33fa, 0x3401, 0x343d, 0x3440, + 0x342c, 0x342d, 0x343c, 0x342e, 0x3436, 0x3429, 0x341d, 0x344e, + 0x348f, 0x3475, 0x348e, 0x345f, 0x3471, 0x3477, 0x3470, 0x3492, + 0x347b, 0x3480, 0x3476, 0x3484, 0x3490, 0x3486, 0x34c7, 0x34a2, + 0x34b8, 0x34a5, 0x34ac, 0x34c4, 0x34c8, 0x34a8, + /* 0x15321..0x1537E */ + 0x34ab, 0x34c2, 0x34a4, 0x34be, 0x34bc, 0x34d8, 0x34e5, 0x34e6, + 0x350f, 0x3514, 0x34fd, 0x34ee, 0x34ed, 0x34fa, 0x34e2, 0x3539, + 0x3540, 0x3563, 0x354c, 0x352e, 0x355c, 0x3545, 0x3556, 0x3557, + 0x3538, 0x3533, 0x355d, 0x3599, 0x3580, 0x34af, 0x358a, 0x359f, + 0x357b, 0x357e, 0x3598, 0x359e, 0x35ae, 0x357c, 0x3583, 0x35a9, + 0x3587, 0x35a8, 0x35da, 0x35c5, 0x35df, 0x35c4, 0x35dc, 0x35e4, + 0x35d4, 0x3614, 0x35f7, 0x3616, 0x35fe, 0x35fd, 0x361b, 0x35f9, + 0x364e, 0x3650, 0x51df, 0x3634, 0x3636, 0x3632, 0x3638, 0x366b, + 0x3664, 0x362f, 0x366c, 0x366a, 0x3686, 0x3680, 0x368a, 0x36a0, + 0x3694, 0x368f, 0x36a5, 0x36ae, 0x36b6, 0x36b4, 0x36c2, 0x36bc, + 0x36c1, 0x36c3, 0x36c0, 0x36c8, 0x36ce, 0x36d1, 0x36d3, 0x36d7, + 0x36ee, 0x36f9, 0x3700, 0x36ff, 0x3704, 0x3709, + /* 0x15421..0x1547E */ + 0x3708, 0x370b, 0x370d, 0x3713, 0x3718, 0x3716, 0x35c7, 0x371c, + 0x3726, 0x3737, 0x3738, 0x374e, 0x373b, 0x3740, 0x374f, 0x3769, + 0x37c0, 0x3788, 0x3761, 0x377f, 0x3789, 0x3793, 0x37a0, 0x37b3, + 0x37a4, 0x37aa, 0x37b0, 0x37c3, 0x37c6, 0x37d4, 0x37d2, 0x37d3, + 0x380a, 0x37d6, 0x37e3, 0x380b, 0x3819, 0x381d, 0x3872, 0x3821, + 0x3862, 0x384b, 0x3870, 0x4bc0, 0x3852, 0x383d, 0x3879, 0x3885, + 0x38b9, 0x389f, 0x38ab, 0x38ba, 0x38de, 0x38bb, 0x38b8, 0x38ae, + 0x38c5, 0x38d3, 0x38d1, 0x38d7, 0x38d9, 0x38d8, 0x38e5, 0x38dc, + 0x38e4, 0x38df, 0x38ef, 0x38fa, 0x38f9, 0x38fb, 0x38fc, 0x38fd, + 0x3902, 0x390a, 0x3910, 0x391b, 0x48a6, 0x3925, 0x392c, 0x392d, + 0x3932, 0x3938, 0x393e, 0x5ad2, 0x3955, 0x3950, 0x394e, 0x395a, + 0x3958, 0x3962, 0x3960, 0x3967, 0x396c, 0x3969, + /* 0x15521..0x1557E */ + 0x3978, 0x3981, 0x399d, 0x2f5e, 0x2fab, 0x39a3, 0x39b2, 0x39c6, + 0x39e8, 0x39dc, 0x398d, 0x39d9, 0x39da, 0x3a25, 0x3a1f, 0x3a11, + 0x3a1c, 0x3a09, 0x3a1a, 0x3a40, 0x3a6c, 0x3a49, 0x3a35, 0x3a36, + 0x3a62, 0x3a6a, 0x3a9a, 0x3abc, 0x3abe, 0x3acb, 0x3ac2, 0x3abd, + 0x3ae3, 0x3ad7, 0x3ae6, 0x3ae9, 0x3ad6, 0x3afa, 0x3afb, 0x3b0c, + 0x3b0b, 0x3b16, 0x3b32, 0x3ad0, 0x3b2a, 0x3b36, 0x3b3e, 0x3b43, + 0x3b45, 0x3b40, 0x3b51, 0x3b55, 0x3b5a, 0x3b5b, 0x3b65, 0x3b69, + 0x3b70, 0x3b73, 0x3b75, 0x3b78, 0x4588, 0x3b7a, 0x3b80, 0x3b83, + 0x3ba6, 0x3bb8, 0x3bc3, 0x3bc7, 0x3bc9, 0x3bd4, 0x3bd0, 0x3be4, + 0x3be6, 0x3be2, 0x3bde, 0x3be5, 0x3beb, 0x3bf0, 0x3bf6, 0x3bf3, + 0x3c05, 0x3c07, 0x3c08, 0x3c0d, 0x3c13, 0x3c20, 0x3c22, 0x3c28, + 0x3c38, 0x3c39, 0x3c41, 0x3c46, 0x3c4e, 0x3c53, + /* 0x15621..0x1567E */ + 0x3c50, 0x3c4f, 0x3b71, 0x3c6c, 0x3c6e, 0x2e62, 0x3c76, 0x3c79, + 0x3c8c, 0x3c91, 0x3c94, 0x399b, 0x3cab, 0x3cbb, 0x3cb6, 0x3cbc, + 0x3cb7, 0x3cc5, 0x3cbe, 0x3cc7, 0x3cd9, 0x3ce9, 0x3cfd, 0x3cfa, + 0x3ced, 0x3d8c, 0x3cea, 0x3d0b, 0x3d15, 0x3d17, 0x3d5c, 0x3d1f, + 0x3d1b, 0x3d11, 0x3d14, 0x3d22, 0x3d1a, 0x3d19, 0x3d18, 0x3d4c, + 0x3d52, 0x3d4e, 0x3d4b, 0x3d6c, 0x3d73, 0x3d76, 0x3d87, 0x3d84, + 0x3d82, 0x3da2, 0x3d9d, 0x3dac, 0x3dae, 0x3dbd, 0x3d90, 0x3db7, + 0x3dbc, 0x3dc9, 0x3dcd, 0x3dd3, 0x3dd2, 0x3dd6, 0x3ddb, 0x3deb, + 0x3df2, 0x3df5, 0x3e0b, 0x3e1a, 0x3e19, 0x3e11, 0x3e1b, 0x3e36, + 0x3e37, 0x3e44, 0x3e43, 0x3e40, 0x3e4e, 0x3e57, 0x3e54, 0x3e5f, + 0x3e62, 0x3e64, 0x3e47, 0x3e75, 0x3e76, 0x3e7a, 0x7ebc, 0x3e7f, + 0x3ea0, 0x3ec1, 0x3ec2, 0x3ec8, 0x3ed0, 0x3ecf, + /* 0x15721..0x1577E */ + 0x3ed6, 0x3ee3, 0x3edd, 0x3eda, 0x3edb, 0x3ee2, 0x3ee1, 0x3ee8, + 0x3ee9, 0x3eec, 0x3ef1, 0x3ef3, 0x3ef0, 0x3ef4, 0x3ef8, 0x3efe, + 0x3f03, 0x3f09, 0x3f5d, 0x3f5c, 0x3f0b, 0x3f11, 0x3f16, 0x3f29, + 0x3f2d, 0x3f38, 0x3f41, 0x3f48, 0x3f4c, 0x3f4e, 0x3f2f, 0x3f51, + 0x3f56, 0x3f57, 0x3f59, 0x3f61, 0x3f6d, 0x3f73, 0x3f77, 0x3f83, + 0x3f82, 0x3f7f, 0x3f8a, 0x3f88, 0x3f91, 0x3f87, 0x3f9e, 0x3f99, + 0x3f98, 0x3fa0, 0x3fa8, 0x3fad, 0x3fbc, 0x3fd6, 0x3ffb, 0x3fe4, + 0x3ff8, 0x3ff1, 0x3fdd, 0x40b3, 0x3fff, 0x4021, 0x4060, 0x4019, + 0x4010, 0x4029, 0x400e, 0x4031, 0x401b, 0x4015, 0x402b, 0x4026, + 0x400f, 0x403a, 0x405a, 0x4041, 0x406a, 0x4077, 0x405f, 0x404a, + 0x4046, 0x404d, 0x4063, 0x4043, 0x4064, 0x4042, 0x406c, 0x406b, + 0x4059, 0x4081, 0x408d, 0x40e7, 0x4083, 0x409a, + /* 0x15821..0x1587E */ + 0x4084, 0x409b, 0x4096, 0x4097, 0x4092, 0x40a7, 0x408b, 0x40e1, + 0x40b8, 0x40e0, 0x40d3, 0x40b4, 0x3ff0, 0x40bd, 0x40c6, 0x40b5, + 0x40d8, 0x414d, 0x4115, 0x4106, 0x40f6, 0x40f7, 0x4100, 0x40f4, + 0x40fa, 0x4103, 0x4121, 0x40fb, 0x40f1, 0x410d, 0x410e, 0x4147, + 0x413e, 0x4128, 0x4127, 0x414a, 0x413f, 0x413c, 0x412c, 0x4134, + 0x413d, 0x4142, 0x4144, 0x4173, 0x4177, 0x4158, 0x4159, 0x415a, + 0x416b, 0x4174, 0x416f, 0x4165, 0x4171, 0x415f, 0x415d, 0x4153, + 0x4175, 0x4199, 0x4196, 0x4187, 0x41ac, 0x4194, 0x419a, 0x418a, + 0x4191, 0x41ab, 0x41ae, 0x41cc, 0x41ca, 0x41c9, 0x41f7, 0x41c8, + 0x41c3, 0x41c6, 0x41ba, 0x41cb, 0x5f79, 0x41cd, 0x41e6, 0x41e3, + 0x41f6, 0x41fa, 0x41f4, 0x41ff, 0x41fd, 0x41fc, 0x41fe, 0x4200, + 0x4208, 0x4209, 0x420d, 0x420c, 0x4214, 0x421b, + /* 0x15921..0x1597E */ + 0x421e, 0x4221, 0x422a, 0x422e, 0x4230, 0x4232, 0x4233, 0x4241, + 0x424e, 0x425e, 0x4263, 0x425b, 0x4260, 0x4268, 0x427c, 0x4282, + 0x4289, 0x427e, 0x4292, 0x4293, 0x4296, 0x42d4, 0x4283, 0x4294, + 0x42d7, 0x42d1, 0x42bb, 0x42cf, 0x42ff, 0x42c6, 0x44d4, 0x42c8, + 0x42dc, 0x42cc, 0x42ca, 0x42c2, 0x42c7, 0x429b, 0x42c9, 0x430c, + 0x42ee, 0x42f1, 0x4327, 0x4302, 0x4308, 0x42ef, 0x42f5, 0x4350, + 0x433e, 0x434d, 0x441c, 0x434f, 0x4396, 0x438e, 0x4380, 0x43ab, + 0x4376, 0x43a3, 0x438f, 0x4389, 0x439f, 0x43b5, 0x436b, 0x4369, + 0x43be, 0x43e9, 0x43c0, 0x43c6, 0x43e3, 0x43c9, 0x43d2, 0x43f6, + 0x43c4, 0x4416, 0x4434, 0x4406, 0x4413, 0x4426, 0x4436, 0x451d, + 0x4417, 0x4428, 0x440f, 0x4467, 0x446f, 0x4476, 0x444e, 0x452a, + 0x4495, 0x4493, 0x44a5, 0x44a9, 0x4488, 0x44bc, + /* 0x15A21..0x15A7E */ + 0x44da, 0x44d2, 0x44c5, 0x44c7, 0x44bb, 0x44d8, 0x44c2, 0x44f1, + 0x44e7, 0x6209, 0x44e0, 0x44e1, 0x42ac, 0x44e3, 0x44ef, 0x452c, + 0x44f6, 0x44f4, 0x44f2, 0x44fa, 0x4500, 0x44fd, 0x4518, 0x451c, + 0x4505, 0x4524, 0x4523, 0x452b, 0x4534, 0x4535, 0x4537, 0x4536, + 0x4538, 0x554b, 0x4548, 0x4556, 0x4555, 0x454d, 0x4558, 0x455e, + 0x455d, 0x4572, 0x4578, 0x4582, 0x4583, 0x6b8a, 0x459b, 0x459f, + 0x45ab, 0x45b7, 0x45c3, 0x45c6, 0x45c1, 0x45c4, 0x45cc, 0x45d2, + 0x45db, 0x45d9, 0x45e0, 0x45e1, 0x45f1, 0x4772, 0x460a, 0x4603, + 0x45fb, 0x4773, 0x4635, 0x4636, 0x4634, 0x461c, 0x464f, 0x4644, + 0x4649, 0x4641, 0x465e, 0x465d, 0x4664, 0x4667, 0x4668, 0x465f, + 0x4662, 0x4670, 0x4683, 0x4688, 0x468e, 0x4689, 0x4684, 0x4698, + 0x469d, 0x46c1, 0x46b9, 0x46c9, 0x46be, 0x46bc, + /* 0x15B21..0x15B7E */ + 0x46c4, 0x46b8, 0x46d6, 0x46da, 0x46e0, 0x463f, 0x46e6, 0x46e9, + 0x46f0, 0x46f5, 0x46f7, 0x470f, 0x4716, 0x471e, 0x4726, 0x4727, + 0x7738, 0x472e, 0x473f, 0x4736, 0x4741, 0x4738, 0x4737, 0x4746, + 0x475e, 0x4760, 0x4759, 0x4763, 0x4764, 0x4789, 0x4770, 0x47a9, + 0x477c, 0x476a, 0x478c, 0x478b, 0x47a6, 0x47a1, 0x4785, 0x47b7, + 0x47ef, 0x47b4, 0x47ec, 0x47b3, 0x47e9, 0x47b8, 0x47e4, 0x47de, + 0x47dd, 0x47e2, 0x47ee, 0x47b9, 0x47ce, 0x47c6, 0x47e7, 0x4a9c, + 0x481e, 0x4846, 0x4829, 0x4840, 0x484d, 0x4832, 0x484e, 0x48b3, + 0x482b, 0x4859, 0x4863, 0x4877, 0x487f, 0x489f, 0x488f, 0x48ad, + 0x4894, 0x489d, 0x489b, 0x4883, 0x4aae, 0x48b9, 0x4874, 0x48b5, + 0x48a0, 0x48ba, 0x490f, 0x488d, 0x487e, 0x4901, 0x48ca, 0x4908, + 0x48d8, 0x4922, 0x4926, 0x48e1, 0x490c, 0x48cd, + /* 0x15C21..0x15C7E */ + 0x48d4, 0x48e7, 0x48d5, 0x4936, 0x4912, 0x4904, 0x48d7, 0x48e3, + 0x4925, 0x48f9, 0x48e0, 0x48ef, 0x4928, 0x492a, 0x491a, 0x4923, + 0x4921, 0x48c6, 0x4979, 0x4977, 0x495c, 0x4978, 0x496b, 0x4954, + 0x497e, 0x496e, 0x4939, 0x4974, 0x493d, 0x4959, 0x4930, 0x4961, + 0x495e, 0x495d, 0x4981, 0x496a, 0x49b2, 0x49ae, 0x49d0, 0x49bf, + 0x49c1, 0x49d3, 0x49be, 0x49ce, 0x3be8, 0x49ca, 0x49dd, 0x49bb, + 0x49c3, 0x49a7, 0x4a2e, 0x4991, 0x49a0, 0x499c, 0x4995, 0x49b4, + 0x49de, 0x49e8, 0x4a02, 0x4a1b, 0x49ff, 0x4b0a, 0x49f9, 0x49f2, + 0x49e7, 0x4a05, 0x49b1, 0x4a1e, 0x49ed, 0x4a14, 0x49eb, 0x4a0a, + 0x4a12, 0x4ac1, 0x4a23, 0x4a13, 0x4a44, 0x4a0c, 0x4a72, 0x4a36, + 0x4a78, 0x4a47, 0x4a62, 0x4a59, 0x4a66, 0x4a48, 0x4a38, 0x4a22, + 0x4a90, 0x4a8d, 0x4aa0, 0x4a84, 0x4aa2, 0x4aa3, + /* 0x15D21..0x15D7E */ + 0x4a97, 0x6617, 0x4abb, 0x4ac3, 0x4ac2, 0x4ab8, 0x4ab3, 0x4aac, + 0x4ade, 0x4ad1, 0x4adf, 0x4aaa, 0x4ada, 0x4aea, 0x4afb, 0x4b05, + 0x6616, 0x4afa, 0x4b12, 0x4b16, 0x7b31, 0x4b1f, 0x4b38, 0x4b37, + 0x56dc, 0x4b39, 0x78ee, 0x4b47, 0x4b43, 0x4b49, 0x4b50, 0x4b59, + 0x4b54, 0x4b5b, 0x4b5f, 0x4b61, 0x4b78, 0x4b79, 0x4b7f, 0x4b80, + 0x4b84, 0x4b83, 0x4b8d, 0x4b98, 0x4b95, 0x4b9e, 0x4ba4, 0x4baa, + 0x4bab, 0x4baf, 0x4bb2, 0x4bb1, 0x4bb3, 0x4bb7, 0x4bbc, 0x4bc6, + 0x4bcb, 0x4bd3, 0x4bdf, 0x4bec, 0x4beb, 0x4bf3, 0x4bef, 0x7ebe, + 0x4c08, 0x4c13, 0x4c14, 0x4c1b, 0x4c24, 0x4c23, 0x4c5e, 0x4c55, + 0x4c62, 0x4c6a, 0x4c82, 0x4c8d, 0x4c9a, 0x4c81, 0x4c9b, 0x4c7e, + 0x4c68, 0x4c73, 0x4c92, 0x4c90, 0x4cc4, 0x4cf1, 0x4cd3, 0x4cbd, + 0x4cd7, 0x4cc5, 0x4cdd, 0x4cae, 0x4cb1, 0x4cbe, + /* 0x15E21..0x15E7E */ + 0x4cba, 0x4cdb, 0x4cef, 0x4cd9, 0x4cea, 0x4d1f, 0x684d, 0x4d36, + 0x4d2b, 0x4d3d, 0x4d38, 0x4d19, 0x4d35, 0x4d33, 0x4d12, 0x4d0c, + 0x4d63, 0x4d93, 0x4d64, 0x4d5a, 0x4d79, 0x4d59, 0x4d8e, 0x4d95, + 0x4fe4, 0x4d85, 0x4df9, 0x4e15, 0x4e0a, 0x4db5, 0x4dc7, 0x4de6, + 0x4db8, 0x4dc6, 0x4dec, 0x4dde, 0x4dcc, 0x4de8, 0x4dd2, 0x4dc5, + 0x4dfa, 0x4dd9, 0x4de4, 0x4dd5, 0x4dea, 0x4dee, 0x4e2d, 0x4e6e, + 0x4e2e, 0x4e19, 0x4e72, 0x4e5f, 0x4e3e, 0x4e23, 0x4e6b, 0x4e2b, + 0x4e76, 0x4e4d, 0x4e1f, 0x4e43, 0x4e3a, 0x4e4e, 0x4e24, 0x4eff, + 0x4e1d, 0x4e38, 0x4e82, 0x4eaa, 0x4e98, 0x4ec9, 0x4eb7, 0x4ed3, + 0x4ebd, 0x4eaf, 0x4ec4, 0x4eb2, 0x4ed4, 0x4ed5, 0x4e8f, 0x4ea5, + 0x4ec2, 0x4e9f, 0x4f41, 0x4f11, 0x504c, 0x4eec, 0x4ef8, 0x4efe, + 0x4f3f, 0x4ef2, 0x4f31, 0x4eef, 0x4f32, 0x4ecc, + /* 0x15F21..0x15F7E */ + 0x4f3e, 0x4f13, 0x4ef7, 0x4f86, 0x4f7a, 0x4f78, 0x4f81, 0x4f80, + 0x4f6f, 0x4f5b, 0x4ff3, 0x4f6d, 0x4f82, 0x4f7c, 0x4f58, 0x4f8e, + 0x4f91, 0x4fc2, 0x4f66, 0x4fb3, 0x4fa3, 0x4fa1, 0x4fa4, 0x4fb9, + 0x4fc6, 0x4faa, 0x4fdf, 0x4fd5, 0x4fec, 0x4fd4, 0x4fd8, 0x4ff1, + 0x4fee, 0x4fdb, 0x5009, 0x500b, 0x4ffa, 0x5011, 0x5001, 0x500f, + 0x4ffe, 0x501b, 0x501a, 0x4f74, 0x501d, 0x5018, 0x501f, 0x5030, + 0x503e, 0x5032, 0x5051, 0x5063, 0x5099, 0x5092, 0x50af, 0x50f1, + 0x50ac, 0x50b8, 0x50b3, 0x50ae, 0x50df, 0x50cb, 0x50dd, 0x50d9, + 0x5109, 0x50fd, 0x511c, 0x5119, 0x5165, 0x5155, 0x5188, 0x5166, + 0x5162, 0x514c, 0x5156, 0x516c, 0x518f, 0x51fb, 0x5184, 0x5195, + 0x51a8, 0x51ac, 0x51d7, 0x51b9, 0x51be, 0x51d2, 0x51c9, 0x51d4, + 0x51ce, 0x51e0, 0x51ec, 0x51e7, 0x51f5, 0x51fc, + /* 0x16021..0x1607E */ + 0x51f9, 0x51ff, 0x520d, 0x5210, 0x521b, 0x5228, 0x522d, 0x522c, + 0x5230, 0x5232, 0x523b, 0x523c, 0x523f, 0x5240, 0x5246, 0x524b, + 0x5258, 0x5274, 0x527e, 0x5282, 0x5281, 0x5287, 0x5292, 0x5296, + 0x52a2, 0x52a7, 0x52b9, 0x52b2, 0x52c3, 0x52c6, 0x52c4, 0x52ce, + 0x52d2, 0x52e2, 0x52e0, 0x52e1, 0x52f9, 0x52f7, 0x300f, 0x5317, + 0x530a, 0x531c, 0x5316, 0x531d, 0x5334, 0x532f, 0x5329, 0x5325, + 0x533e, 0x534e, 0x534f, 0x7ed8, 0x5357, 0x536a, 0x5368, 0x5370, + 0x5378, 0x5375, 0x537b, 0x537a, 0x53c8, 0x53b3, 0x53ce, 0x53bb, + 0x53c0, 0x53e5, 0x53ee, 0x53de, 0x54a2, 0x5405, 0x546f, 0x5425, + 0x53f8, 0x5432, 0x543a, 0x5455, 0x543f, 0x545f, 0x5459, 0x5441, + 0x545c, 0x5469, 0x5470, 0x5463, 0x546a, 0x5476, 0x547e, 0x548b, + 0x549e, 0x54a7, 0x54ca, 0x54cf, 0x54d4, 0x53f1, + /* 0x16121..0x1617E */ + 0x54e0, 0x54e3, 0x54e7, 0x54e9, 0x54ee, 0x54f2, 0x54f0, 0x54f1, + 0x54f8, 0x54f7, 0x5504, 0x5503, 0x5505, 0x550c, 0x550e, 0x550d, + 0x5515, 0x5513, 0x551e, 0x5526, 0x552c, 0x553c, 0x5544, 0x554d, + 0x554a, 0x5549, 0x555b, 0x5546, 0x555a, 0x5569, 0x5564, 0x5567, + 0x556b, 0x556d, 0x5578, 0x5576, 0x5586, 0x5587, 0x5574, 0x558a, + 0x5589, 0x5582, 0x5594, 0x559a, 0x559d, 0x55a5, 0x55a3, 0x55c2, + 0x55b3, 0x55c3, 0x55b5, 0x55bd, 0x55b8, 0x55bc, 0x55b1, 0x55cd, + 0x55ca, 0x55d2, 0x55d9, 0x55e3, 0x55de, 0x55fe, 0x55ff, 0x55fc, + 0x5601, 0x55f0, 0x55fa, 0x55f2, 0x55f3, 0x560b, 0x560d, 0x5609, + 0x561f, 0x5627, 0x5620, 0x5621, 0x5622, 0x5624, 0x5634, 0x5630, + 0x563b, 0x5647, 0x5648, 0x5646, 0x565c, 0x5658, 0x5661, 0x5662, + 0x5668, 0x5669, 0x566a, 0x5667, 0x566c, 0x5670, + /* 0x16221..0x1627E */ + 0x5672, 0x5676, 0x5678, 0x567c, 0x5680, 0x5683, 0x5688, 0x568b, + 0x568e, 0x5696, 0x5693, 0x5699, 0x569a, 0x56b0, 0x56b4, 0x56b8, + 0x56b9, 0x56ba, 0x56c2, 0x56cd, 0x56d6, 0x56d2, 0x56de, 0x56e1, + 0x56e5, 0x56e7, 0x56ea, 0x662f, 0x56fb, 0x5708, 0x5707, 0x5704, + 0x5729, 0x5724, 0x571e, 0x5725, 0x5726, 0x571b, 0x5737, 0x5738, + 0x5747, 0x575a, 0x5768, 0x576b, 0x575b, 0x5765, 0x577f, 0x577e, + 0x5779, 0x578e, 0x578b, 0x5791, 0x57a0, 0x579e, 0x57b0, 0x57b6, + 0x57b9, 0x57bf, 0x57bc, 0x57bd, 0x57bb, 0x57c7, 0x57cd, 0x57d7, + 0x57da, 0x57dc, 0x57e3, 0x57ee, 0x57fc, 0x580c, 0x5812, 0x5926, + 0x5820, 0x592a, 0x5845, 0x588e, 0x5874, 0x5886, 0x587c, 0x589a, + 0x588c, 0x58a3, 0x58b5, 0x58aa, 0x58af, 0x58d1, 0x58c6, 0x58cb, + 0x58d4, 0x58be, 0x58bc, 0x58c5, 0x58ca, 0x58ec, + /* 0x16321..0x1637E */ + 0x58e7, 0x58da, 0x58fd, 0x58f4, 0x5907, 0x5912, 0x5911, 0x5919, + 0x592c, 0x592b, 0x5940, 0x5960, 0x5957, 0x595f, 0x595a, 0x5955, + 0x5953, 0x597a, 0x597f, 0x598a, 0x599d, 0x59a7, 0x7f4b, 0x59aa, + 0x59ae, 0x59b3, 0x59b9, 0x59ba, 0x59c9, 0x59d5, 0x59e7, 0x59ec, + 0x59e1, 0x59e3, 0x5a08, 0x5a0d, 0x5a18, 0x5a19, 0x5a20, 0x5a1f, + 0x5980, 0x5a31, 0x5a3b, 0x5a3e, 0x5a37, 0x5a43, 0x5a57, 0x5a49, + 0x5a61, 0x5a62, 0x5a69, 0x7f9d, 0x5a70, 0x5a79, 0x5a7d, 0x5a88, + 0x5a97, 0x5a95, 0x5a98, 0x5a96, 0x5aa9, 0x5ac8, 0x5ab0, 0x5ab6, + 0x5ac5, 0x5ac4, 0x5abf, 0x7083, 0x5ac7, 0x5aca, 0x5acd, 0x5acf, + 0x5ad5, 0x5ad3, 0x5ad9, 0x5ada, 0x5add, 0x5ae1, 0x5ae2, 0x5ae6, + 0x5aed, 0x5af0, 0x5b02, 0x5b0f, 0x5b0a, 0x5b06, 0x5b33, 0x5b18, + 0x5b19, 0x5b1e, 0x5b35, 0x5b28, 0x5b36, 0x5b50, + /* 0x16421..0x1647E */ + 0x5b7a, 0x5b04, 0x5b4d, 0x5b0b, 0x5b4c, 0x5b45, 0x5b75, 0x5b65, + 0x5b74, 0x5b67, 0x5b70, 0x5b71, 0x5b6c, 0x5b6e, 0x5b9d, 0x5b98, + 0x5b9f, 0x5b8d, 0x5b9c, 0x5b9a, 0x5b8b, 0x5b92, 0x5b8f, 0x5b5d, + 0x5b99, 0x5bcb, 0x5bc1, 0x5bcc, 0x5bcf, 0x5bb4, 0x5bc6, 0x5bdd, + 0x5be9, 0x5c11, 0x5c14, 0x5be6, 0x5be5, 0x5c60, 0x5c00, 0x5c07, + 0x5c13, 0x5bf3, 0x5bf7, 0x5c17, 0x5c0d, 0x5bf6, 0x5c23, 0x5c27, + 0x5c2a, 0x5c1f, 0x5c37, 0x5c2b, 0x5c3d, 0x5c4c, 0x5c43, 0x5c54, + 0x5c4f, 0x5c40, 0x5c50, 0x5c58, 0x5c5f, 0x5c64, 0x5c56, 0x5c65, + 0x5c6c, 0x5c75, 0x5c83, 0x5c90, 0x5ca4, 0x5cad, 0x5ca2, 0x5cab, + 0x5ca1, 0x5ca8, 0x5cb3, 0x5cb2, 0x5cb1, 0x5cae, 0x5cb9, 0x5cbd, + 0x5cc0, 0x5cc5, 0x5cc2, 0x5cd8, 0x5cd2, 0x5cdc, 0x5ce2, 0x7b3b, + 0x5cef, 0x5cf2, 0x5cf4, 0x5cf6, 0x5cfa, 0x5d06, + /* 0x16521..0x1657E */ + 0x5d02, 0x5d1c, 0x5d15, 0x5d0a, 0x5d45, 0x5d4b, 0x5d2e, 0x5d32, + 0x5d3f, 0x5d35, 0x5d46, 0x5d73, 0x5d56, 0x5d4e, 0x5d72, 0x5d68, + 0x5d6e, 0x5d4f, 0x5d63, 0x5d93, 0x5d89, 0x5d5b, 0x5d8f, 0x5d7d, + 0x5d9b, 0x5dba, 0x5dae, 0x5da3, 0x5db5, 0x5dc7, 0x5dbd, 0x5dab, + 0x5e3d, 0x5da2, 0x5daf, 0x5ddc, 0x5db8, 0x5d9f, 0x5db0, 0x5dd8, + 0x5ddd, 0x5de4, 0x5dde, 0x5dfb, 0x5df2, 0x5de1, 0x5e05, 0x5e0a, + 0x5e23, 0x5e21, 0x5e12, 0x5e31, 0x5e1f, 0x5e09, 0x5e0b, 0x5e22, + 0x5e46, 0x5e66, 0x5e3b, 0x5e35, 0x5e39, 0x5e43, 0x5e37, 0x5e32, + 0x5e3a, 0x5e67, 0x5e5d, 0x5e56, 0x5e5e, 0x5e59, 0x5e5a, 0x5e79, + 0x5e6a, 0x5e69, 0x5e7c, 0x5e7b, 0x5e83, 0x5dd5, 0x5e7d, 0x6fae, + 0x5e7f, 0x5e88, 0x5e89, 0x5e8c, 0x5e92, 0x5e90, 0x5e93, 0x5e94, + 0x5e96, 0x5e8e, 0x5e9b, 0x5e9c, 0x5f38, 0x5f3a, + /* 0x16621..0x1667E */ + 0x5f45, 0x5f4c, 0x5f4d, 0x5f4e, 0x5f50, 0x5f51, 0x5f55, 0x5f54, + 0x5f58, 0x5f5f, 0x5f60, 0x5f68, 0x5f69, 0x5f67, 0x5f78, 0x5f82, + 0x5f86, 0x5f83, 0x5f88, 0x5f87, 0x5f8c, 0x5f94, 0x5f9e, 0x5f9d, + 0x5f9a, 0x5fa3, 0x5faf, 0x5fb2, 0x5fb9, 0x5fae, 0x5fb6, 0x5fb8, + 0x6b71, 0x5fc5, 0x5fc6, 0x5fca, 0x5fd5, 0x5fd4, 0x5fe1, 0x5fe6, + 0x5fe9, 0x5ff3, 0x5ff9, 0x78dc, 0x6006, 0x6004, 0x600b, 0x6012, + 0x6018, 0x6019, 0x601c, 0x6021, 0x6028, 0x603f, 0x603b, 0x604a, + 0x6046, 0x6052, 0x6058, 0x605a, 0x605f, 0x6062, 0x6068, 0x6073, + 0x6072, 0x6070, 0x6076, 0x6079, 0x607d, 0x607f, 0x6084, 0x6086, + 0x6085, 0x609b, 0x6093, 0x609a, 0x60ad, 0x3190, 0x60ac, 0x60db, + 0x60e5, 0x60d9, 0x60dd, 0x60c4, 0x60da, 0x60d6, 0x6109, 0x60ef, + 0x60f1, 0x611b, 0x6129, 0x6123, 0x612f, 0x614b, + /* 0x16721..0x1677E */ + 0x768b, 0x6146, 0x613e, 0x6153, 0x6151, 0x60fc, 0x6171, 0x616e, + 0x6165, 0x6166, 0x6174, 0x6183, 0x6188, 0x618a, 0x6180, 0x6182, + 0x61a0, 0x6195, 0x61a4, 0x61a3, 0x615f, 0x6193, 0x61a9, 0x61b0, + 0x61b5, 0x61be, 0x61b8, 0x61bd, 0x61c0, 0x61c2, 0x61ba, 0x61c9, + 0x61cd, 0x61d1, 0x61d9, 0x61d8, 0x61c8, 0x61da, 0x61df, 0x61e0, + 0x61e7, 0x61fa, 0x61fb, 0x61fe, 0x6201, 0x6202, 0x6205, 0x6207, + 0x620a, 0x620d, 0x6210, 0x6216, 0x6229, 0x622b, 0x6238, 0x6233, + 0x6240, 0x6259, 0x6258, 0x625d, 0x625a, 0x625f, 0x6264, 0x6262, + 0x6268, 0x626a, 0x626b, 0x622e, 0x6271, 0x6277, 0x6278, 0x627e, + 0x628d, 0x6292, 0x62ab, 0x629f, 0x62bb, 0x62ac, 0x62e1, 0x62e3, + 0x62df, 0x62d2, 0x62f4, 0x62f3, 0x62fa, 0x6393, 0x6303, 0x62fb, + 0x62f9, 0x62de, 0x6306, 0x62dc, 0x6309, 0x62d9, + /* 0x16821..0x1687E */ + 0x6335, 0x6334, 0x6316, 0x6332, 0x6331, 0x6340, 0x6339, 0x6350, + 0x6345, 0x632f, 0x632b, 0x6317, 0x6318, 0x6385, 0x639a, 0x63aa, + 0x639f, 0x63a2, 0x6396, 0x6323, 0x638e, 0x6387, 0x638a, 0x637c, + 0x63b5, 0x6373, 0x6375, 0x63a0, 0x6389, 0x63a8, 0x63f4, 0x6413, + 0x63eb, 0x63ce, 0x63fd, 0x6403, 0x63d8, 0x640b, 0x63c1, 0x63f7, + 0x6407, 0x63e0, 0x63f2, 0x640d, 0x6422, 0x6420, 0x63bd, 0x6438, + 0x6506, 0x63fb, 0x646d, 0x642a, 0x643c, 0x655a, 0x6484, 0x6477, + 0x646b, 0x64ad, 0x646e, 0x6482, 0x6469, 0x6446, 0x642c, 0x646f, + 0x6479, 0x6435, 0x64ca, 0x6462, 0x64b9, 0x64bf, 0x649f, 0x64d9, + 0x64cd, 0x64bb, 0x64da, 0x64d0, 0x64c1, 0x64c6, 0x64d6, 0x64a1, + 0x6521, 0x64ff, 0x64f4, 0x6517, 0x6518, 0x652c, 0x651f, 0x6515, + 0x6514, 0x64fc, 0x6540, 0x6563, 0x6558, 0x6548, + /* 0x16921..0x1697E */ + 0x6541, 0x6602, 0x654b, 0x6555, 0x6580, 0x65a4, 0x6588, 0x6591, + 0x658a, 0x65a8, 0x656d, 0x6594, 0x659b, 0x65ea, 0x6587, 0x659c, + 0x6577, 0x657e, 0x6590, 0x65c9, 0x65ba, 0x65cf, 0x65b9, 0x65d0, + 0x65d5, 0x65dd, 0x65e5, 0x65dc, 0x65f9, 0x660a, 0x6613, 0x660b, + 0x65fe, 0x65fa, 0x6606, 0x6622, 0x661a, 0x6630, 0x663f, 0x664d, + 0x2e55, 0x6654, 0x665f, 0x6667, 0x6671, 0x6693, 0x66a3, 0x66a9, + 0x66aa, 0x668b, 0x668c, 0x66b6, 0x66af, 0x66c4, 0x66c6, 0x66b0, + 0x66c9, 0x6823, 0x66ab, 0x66d4, 0x66de, 0x66e9, 0x66ec, 0x66df, + 0x66db, 0x66ef, 0x6712, 0x6706, 0x6708, 0x6700, 0x6703, 0x66fb, + 0x6711, 0x6709, 0x670d, 0x66f9, 0x670a, 0x6734, 0x673f, 0x6737, + 0x673b, 0x6725, 0x6729, 0x671a, 0x6760, 0x675f, 0x6778, 0x674c, + 0x674e, 0x6774, 0x6757, 0x6768, 0x676e, 0x6759, + /* 0x16A21..0x16A7E */ + 0x6753, 0x6763, 0x676a, 0x6805, 0x67a2, 0x679f, 0x6782, 0x67af, + 0x67cb, 0x67bd, 0x67c0, 0x67d0, 0x76d6, 0x67ab, 0x67c4, 0x67b3, + 0x67c7, 0x67c6, 0x67bb, 0x67ef, 0x67f2, 0x67e0, 0x680f, 0x680d, + 0x67fe, 0x67f6, 0x67f7, 0x680e, 0x67d2, 0x6811, 0x6816, 0x6815, + 0x6822, 0x6821, 0x6831, 0x6836, 0x6839, 0x6827, 0x683b, 0x6844, + 0x6842, 0x6852, 0x6859, 0x685e, 0x6862, 0x686b, 0x6881, 0x687e, + 0x689e, 0x6875, 0x687d, 0x68b5, 0x6872, 0x6882, 0x6897, 0x6892, + 0x68ae, 0x6899, 0x68a2, 0x688d, 0x68a4, 0x68b0, 0x68bf, 0x68b1, + 0x68c3, 0x68c4, 0x68d4, 0x68d8, 0x68d9, 0x68dd, 0x68f9, 0x6902, + 0x68fc, 0x68f4, 0x68e8, 0x68f2, 0x6904, 0x690c, 0x690a, 0x6913, + 0x6943, 0x691e, 0x6925, 0x692a, 0x692b, 0x6941, 0x6944, 0x693b, + 0x6936, 0x6938, 0x694c, 0x691d, 0x6960, 0x695e, + /* 0x16B21..0x16B7E */ + 0x6966, 0x6964, 0x696d, 0x696a, 0x696f, 0x6974, 0x6977, 0x697e, + 0x6983, 0x6988, 0x698a, 0x6993, 0x6998, 0x69a1, 0x69a9, 0x69a6, + 0x69ac, 0x69af, 0x69b2, 0x69ba, 0x69bd, 0x69bf, 0x69c0, 0x69da, + 0x69dc, 0x69dd, 0x69e7, 0x69f4, 0x69f8, 0x6a03, 0x6a16, 0x6a10, + 0x6a0c, 0x6a1b, 0x6a1d, 0x6a25, 0x6a36, 0x6a41, 0x6a5b, 0x6a52, + 0x6a46, 0x6a48, 0x6a7c, 0x6a6d, 0x6a6c, 0x6a62, 0x6a85, 0x6a82, + 0x6a84, 0x6aa8, 0x6aa1, 0x6a91, 0x6aa5, 0x6aa6, 0x6a9a, 0x6aa3, + 0x6ac4, 0x6acd, 0x6ac2, 0x6ada, 0x6aeb, 0x6af3, 0x6ae7, 0x6ae4, + 0x6af1, 0x6b14, 0x6ae0, 0x6ae2, 0x6af7, 0x6ade, 0x6adb, 0x6b0c, + 0x6b07, 0x6b1a, 0x6ae1, 0x6b16, 0x6b10, 0x6b17, 0x6b20, 0x6b33, + 0x77ab, 0x6b26, 0x6b2b, 0x6b3e, 0x6b28, 0x6b41, 0x6b4c, 0x6b4f, + 0x6b4e, 0x6b49, 0x6b56, 0x6b5b, 0x6b5a, 0x6b6b, + /* 0x16C21..0x16C7E */ + 0x6b5f, 0x6b6c, 0x6b6f, 0x6b74, 0x6b7d, 0x6b80, 0x6b8c, 0x6b8e, + 0x6b92, 0x6b93, 0x6b96, 0x6b99, 0x6b9a, 0x6c3a, 0x6c41, 0x6c3f, + 0x6c48, 0x6c4c, 0x6c4e, 0x6c50, 0x6c55, 0x6c62, 0x6c6c, 0x6c78, + 0x6c7a, 0x6c82, 0x6c89, 0x6c85, 0x6c8a, 0x6c8d, 0x6c8e, 0x6c94, + 0x6c7c, 0x6c98, 0x421d, 0x6cad, 0x6caa, 0x6cbd, 0x6cb2, 0x6cb3, + 0x6cae, 0x6cb6, 0x6cc8, 0x6cc1, 0x6ce4, 0x6ce3, 0x6cda, 0x6cfd, + 0x6cfa, 0x6cfb, 0x6d04, 0x6d05, 0x6d0a, 0x6d07, 0x6d0f, 0x6d0d, + 0x6d10, 0x7f4e, 0x6d13, 0x6ccd, 0x6d14, 0x6d16, 0x6d67, 0x6d6d, + 0x6d71, 0x6d73, 0x6d81, 0x6d99, 0x6dc2, 0x6dbe, 0x6dba, 0x6dcf, + 0x6dda, 0x6dd6, 0x6dcc, 0x6ddb, 0x6dcb, 0x6dea, 0x6deb, 0x6ddf, + 0x6de3, 0x6dfc, 0x6e08, 0x6e09, 0x6dff, 0x6e1d, 0x6e1e, 0x6e10, + 0x6e1f, 0x6e42, 0x6e35, 0x6e30, 0x6e34, 0x6e4a, + /* 0x16D21..0x16D7E */ + 0x6e47, 0x6e49, 0x6e4c, 0x6e50, 0x6e48, 0x6e59, 0x6e64, 0x6e60, + 0x6e2a, 0x6e63, 0x6e55, 0x6e76, 0x6e72, 0x6e7c, 0x6e81, 0x6e87, + 0x6e85, 0x6e84, 0x6e8b, 0x6e8a, 0x6e93, 0x6e91, 0x6e94, 0x6e99, + 0x6eaa, 0x6ea1, 0x6eac, 0x6eb0, 0x6ec6, 0x6eb1, 0x6ebe, 0x6ec5, + 0x6ec8, 0x6ecb, 0x6edb, 0x6ee3, 0x6efc, 0x6efb, 0x6eeb, 0x6efe, + 0x6f0a, 0x6f05, 0x6f15, 0x6f12, 0x6f19, 0x6f13, 0x6f1c, 0x6f1f, + 0x6f1b, 0x6f0c, 0x6f26, 0x6f33, 0x6f3b, 0x6f39, 0x6f45, 0x6f42, + 0x6f3e, 0x6f4c, 0x6f49, 0x6f46, 0x6f4e, 0x6f57, 0x6f5c, 0x6f62, + 0x6f63, 0x6f64, 0x6f9c, 0x6f9f, 0x6fa3, 0x6fad, 0x6faf, 0x6fb7, + 0x6fda, 0x6fe5, 0x6fe2, 0x6fea, 0x6fef, 0x7087, 0x6ff4, 0x7005, + 0x6ff9, 0x6ffa, 0x7011, 0x7015, 0x7021, 0x700d, 0x701e, 0x7016, + 0x700b, 0x7027, 0x7036, 0x7035, 0x7039, 0x6ff8, + /* 0x16E21..0x16E7E */ + 0x704f, 0x7050, 0x7051, 0x7052, 0x700e, 0x7049, 0x703e, 0x7056, + 0x7058, 0x705e, 0x7068, 0x706f, 0x7076, 0x76a8, 0x7072, 0x7082, + 0x707d, 0x7081, 0x7080, 0x708a, 0x7089, 0x708f, 0x70a8, 0x70af, + 0x70b1, 0x70b5, 0x70e2, 0x70e4, 0x4248, 0x70db, 0x7102, 0x7112, + 0x7119, 0x7132, 0x7130, 0x714a, 0x7156, 0x7158, 0x7163, 0x7165, + 0x7169, 0x7173, 0x7172, 0x718b, 0x7189, 0x7182, 0x71a2, 0x71ab, + 0x71af, 0x71aa, 0x71b5, 0x71b4, 0x71ba, 0x71c0, 0x71c1, 0x71c9, + 0x71cb, 0x71d0, 0x71d6, 0x71df, 0x71e1, 0x71db, 0x71fc, 0x71f5, + 0x71f6, 0x721e, 0x71ff, 0x7214, 0x722c, 0x7215, 0x7211, 0x725e, + 0x7257, 0x7245, 0x7249, 0x7264, 0x7248, 0x7295, 0x723f, 0x724b, + 0x7250, 0x729c, 0x7296, 0x7293, 0x729b, 0x725a, 0x72cf, 0x72b9, + 0x72b7, 0x72e9, 0x730f, 0x72fa, 0x7344, 0x732e, + /* 0x16F21..0x16F7E */ + 0x7319, 0x7322, 0x731a, 0x7323, 0x733a, 0x7335, 0x733b, 0x735c, + 0x7360, 0x737c, 0x736e, 0x7356, 0x73b0, 0x73ac, 0x73ad, 0x7394, + 0x73b9, 0x73d6, 0x73d7, 0x73e8, 0x73e5, 0x73d8, 0x73c3, 0x73dd, + 0x73d0, 0x73c8, 0x73e4, 0x741a, 0x7414, 0x7413, 0x7403, 0x7407, + 0x7410, 0x7436, 0x742b, 0x7435, 0x7421, 0x743a, 0x7441, 0x7452, + 0x7444, 0x745b, 0x7460, 0x7462, 0x745e, 0x746a, 0x7229, 0x7470, + 0x7475, 0x7477, 0x747d, 0x745a, 0x747c, 0x747e, 0x7481, 0x747f, + 0x7582, 0x7587, 0x758a, 0x7594, 0x7596, 0x7598, 0x7599, 0x75a0, + 0x75a8, 0x75a7, 0x75ad, 0x75bc, 0x75bb, 0x75b9, 0x75be, 0x75ca, + 0x4ff6, 0x75c3, 0x75cd, 0x75cc, 0x75d5, 0x75d4, 0x75d6, 0x75dc, + 0x75e1, 0x75e5, 0x75e2, 0x7621, 0x7628, 0x762e, 0x762f, 0x7642, + 0x764c, 0x764f, 0x764b, 0x7677, 0x765c, 0x765e, + /* 0x17021..0x1707E */ + 0x765d, 0x765f, 0x7666, 0x7672, 0x766c, 0x768d, 0x7698, 0x7695, + 0x7697, 0x76aa, 0x76a7, 0x76b1, 0x76b2, 0x76b0, 0x76b4, 0x76b6, + 0x76b8, 0x76b9, 0x76ce, 0x76cb, 0x76c9, 0x76cd, 0x694d, 0x76dc, + 0x770d, 0x76d5, 0x76f9, 0x7704, 0x7706, 0x7708, 0x7713, 0x770e, + 0x7711, 0x770f, 0x7716, 0x7719, 0x7724, 0x772a, 0x7730, 0x7739, + 0x773d, 0x773e, 0x7744, 0x7746, 0x7748, 0x7742, 0x7749, 0x775c, + 0x7760, 0x7764, 0x7766, 0x7768, 0x32d2, 0x776b, 0x7771, 0x7779, + 0x7785, 0x777c, 0x7781, 0x777a, 0x7786, 0x778b, 0x778f, 0x7790, + 0x779c, 0x77a8, 0x77a6, 0x77a3, 0x77b3, 0x77b4, 0x77c3, 0x77c6, + 0x77c8, 0x77cb, 0x77dc, 0x77ed, 0x7f4f, 0x77f2, 0x5adf, 0x77f6, + 0x77f5, 0x780f, 0x780c, 0x7838, 0x7824, 0x7821, 0x7837, 0x783d, + 0x7846, 0x784f, 0x784b, 0x786b, 0x786f, 0x7870, + /* 0x17121..0x1717E */ + 0x7871, 0x7874, 0x7873, 0x78aa, 0x78af, 0x78b1, 0x78b6, 0x78c4, + 0x78c3, 0x78c6, 0x78e9, 0x78eb, 0x7903, 0x7909, 0x7912, 0x7914, + 0x7918, 0x7921, 0x791d, 0x791e, 0x7924, 0x7920, 0x792c, 0x792e, + 0x793d, 0x793e, 0x7942, 0x7949, 0x7945, 0x7950, 0x794b, 0x7951, + 0x7952, 0x794c, 0x7955, 0x7997, 0x7998, 0x79a5, 0x79ad, 0x79ae, + 0x79bc, 0x79df, 0x79db, 0x79dd, 0x79d8, 0x79d1, 0x79ed, 0x79ee, + 0x79f1, 0x79f2, 0x79fb, 0x79f8, 0x7a01, 0x7a0f, 0x7a05, 0x79e2, + 0x7a19, 0x7a2b, 0x7a37, 0x7a45, 0x7a42, 0x7a40, 0x7a43, 0x7a3e, + 0x7a55, 0x7a4d, 0x7a5b, 0x7a57, 0x7a5f, 0x7a62, 0x7a65, 0x7a64, + 0x7a69, 0x7a6b, 0x7a6a, 0x7aad, 0x7ab0, 0x7abc, 0x7ac0, 0x7acf, + 0x7ad1, 0x7ad3, 0x7ad4, 0x7ade, 0x7adf, 0x7ae2, 0x7ae3, 0x7ae6, + 0x7aef, 0x7aeb, 0x7aee, 0x7af4, 0x7af1, 0x7af7, + /* 0x17221..0x1727E */ + 0x7afb, 0x7b06, 0x7b18, 0x7b1a, 0x7b1f, 0x7b22, 0x7b23, 0x7b25, + 0x7b27, 0x7b28, 0x7b29, 0x7b2a, 0x7b2e, 0x7b2f, 0x7b32, 0x7b44, + 0x7b43, 0x7b4f, 0x7b4d, 0x7b4e, 0x7b51, 0x7b58, 0x7b74, 0x7b93, + 0x7b83, 0x7b91, 0x7b96, 0x7b97, 0x7b9f, 0x7ba0, 0x7ba8, 0x7bb4, + 0x7bc0, 0x7bca, 0x7bb9, 0x7bc6, 0x7bcf, 0x7bd1, 0x7bd2, 0x7be3, + 0x7be2, 0x7be4, 0x7bd4, 0x7be1, 0x7c3a, 0x7bf2, 0x7bf1, 0x7bf0, + 0x7c15, 0x7c14, 0x7c09, 0x7c13, 0x7c0c, 0x7c06, 0x7c08, 0x7c12, + 0x7c0a, 0x7c04, 0x7c2e, 0x7c1b, 0x7c25, 0x7c24, 0x7c21, 0x7c30, + 0x7c47, 0x7c32, 0x7c46, 0x7c3e, 0x7c5a, 0x7c60, 0x7c67, 0x7c76, + 0x7c78, 0x7ce7, 0x7cec, 0x7cf0, 0x7d09, 0x7d08, 0x7ceb, 0x7d03, + 0x7d06, 0x7d2a, 0x7d26, 0x7daf, 0x7d23, 0x7d1f, 0x7d44, 0x7d15, + 0x7d12, 0x7d41, 0x7d3f, 0x7d3e, 0x7d46, 0x7d48, + /* 0x17321..0x1737E */ + 0x7d5d, 0x7d5e, 0x7d64, 0x7d51, 0x7d50, 0x7d59, 0x7d72, 0x7d89, + 0x7d87, 0x7dab, 0x7d6f, 0x7d7a, 0x7d9a, 0x7da4, 0x7da9, 0x7db2, + 0x7dc4, 0x7dc1, 0x7dbb, 0x7db8, 0x7dba, 0x7dc6, 0x7dcf, 0x7dc2, + 0x7dd9, 0x7dd3, 0x7df8, 0x7de6, 0x7ded, 0x7def, 0x7dfd, 0x7e1a, + 0x7e1b, 0x7e1e, 0x7e75, 0x7e79, 0x7e7d, 0x7e81, 0x7e88, 0x7e8b, + 0x7e8c, 0x7e92, 0x7e95, 0x7e91, 0x7e9d, 0x7ea5, 0x7ea9, 0x7eb8, + 0x7eaa, 0x7ead, 0x7761, 0x7ecc, 0x7ece, 0x7ecf, 0x7ed0, 0x7ed4, + 0x7edc, 0x7ede, 0x7edd, 0x7ee0, 0x7ee5, 0x7ee8, 0x7eef, 0x7ef4, + 0x7ef6, 0x7ef7, 0x7ef9, 0x7efb, 0x7efc, 0x7efd, 0x7f07, 0x7f08, + 0x56b7, 0x7f15, 0x7f21, 0x7f2c, 0x7f3e, 0x7f4a, 0x7f52, 0x7f54, + 0x7f63, 0x7f5f, 0x7f60, 0x7f61, 0x7f66, 0x7f67, 0x7f6c, 0x7f6a, + 0x7f77, 0x7f72, 0x7f76, 0x7f95, 0x7f9c, 0x7fa0, + /* 0x17421..0x1747E */ + 0x382f, 0x49c7, 0x7059, 0x5464, 0x31dc, 0x5199, 0x3653, 0x3de2, + 0x3e14, 0x3e18, 0x3e58, 0x3e5e, 0x3ebe, 0x8028, 0x3ecb, 0x3ef9, + 0x3f00, 0x3f02, 0x3f07, 0x3f1d, 0x3f23, 0x3f34, 0x3f36, 0x3f3d, + 0x3f40, 0x3f45, 0x3f54, 0x3f58, 0x3f64, 0x3f67, 0x3f7d, 0x3f89, + 0x3f9c, 0x3fa7, 0x3faf, 0x3fb5, 0x3fb7, 0x3fc9, 0x3fde, 0x3fe1, + 0x3fe9, 0x400d, 0x4014, 0x4018, 0x4033, 0x4035, 0x4047, 0x813d, + 0x409d, 0x409e, 0x40cb, 0x40d4, 0x40d5, 0x40dd, 0x40f8, 0x411c, + 0x412b, 0x4130, 0x4137, 0x813e, 0x418d, 0x813f, 0x41bc, 0x41b9, + 0x8140, 0x4222, 0x423e, 0x4243, 0x4256, 0x425a, 0x426f, 0x4285, + 0x42c4, 0x42d6, 0x42fc, 0x430a, 0x4318, 0x4339, 0x4343, 0x4365, + 0x437c, 0x43e5, 0x43ed, 0x43f5, 0x4410, 0x4414, 0x4422, 0x4479, + 0x4451, 0x4460, 0x446d, 0x44ce, 0x44be, 0x44bf, + /* 0x17521..0x1757E */ + 0x44c4, 0x44ca, 0x44d0, 0x44f7, 0x44fb, 0x4522, 0x4529, 0x8141, + 0x4567, 0x459d, 0x8142, 0x4600, 0x4609, 0x4615, 0x461e, 0x463a, + 0x4622, 0x4624, 0x462b, 0x4630, 0x4631, 0x4633, 0x46fb, 0x4648, + 0x464c, 0xa8c4, 0x4659, 0x465a, 0x4661, 0x4665, 0x4673, 0x4677, + 0x4678, 0x468d, 0x8143, 0x46a0, 0x46b2, 0x46bb, 0x46c6, 0x46c8, + 0x1b22, 0x46db, 0x46e8, 0x46fa, 0x4713, 0x8029, 0x4733, 0x4766, + 0x4747, 0x4748, 0x477b, 0x4781, 0x4793, 0x4798, 0x479b, 0x47bb, + 0x47f9, 0x47c0, 0x47d7, 0x47fc, 0x4801, 0x4852, 0x481d, 0x482c, + 0x4831, 0x485b, 0x4872, 0x4875, 0x8144, 0x48a3, 0x48a5, 0x48b2, + 0x48c8, 0x48d0, 0x48e8, 0x48ed, 0x48f0, 0x48f1, 0x48fc, 0x490a, + 0x4949, 0xabc4, 0x4935, 0x4942, 0x4957, 0x4963, 0x4964, 0x4968, + 0x4980, 0x8114, 0x49a5, 0x49ad, 0x49cf, 0x1bb6, + /* 0x17621..0x1767E */ + 0x1bc3, 0x49e2, 0x49e9, 0x49ea, 0x49f5, 0x49f6, 0x4a0f, 0x4a15, + 0xad3f, 0x4a3b, 0x4a3e, 0x4a45, 0x4a50, 0x4a56, 0x4a5b, 0x4a6b, + 0x4a73, 0xad63, 0x4a89, 0x4a94, 0x4a9d, 0x4a9e, 0x4aa5, 0x4ae4, + 0x4ae7, 0x1c0f, 0x801d, 0x4b1b, 0x4b1e, 0x4b2c, 0x4b35, 0x4b46, + 0x4b56, 0x4b60, 0x4b65, 0x4b67, 0x4b77, 0x4b82, 0x4ba9, 0x4bad, + 0x8070, 0x4bcf, 0x4bd6, 0x4bd7, 0x4bff, 0x4c05, 0x4c10, 0x4c33, + 0x4c59, 0x4c5c, 0x4caa, 0x4c74, 0x4c76, 0x4c85, 0x4c86, 0x4c98, + 0x4c9c, 0x4cfb, 0x4cc6, 0x4cd4, 0x4ce0, 0x4ceb, 0x4cee, 0xb0fe, + 0x4d04, 0x4d0e, 0x4d2e, 0x4d31, 0x4d39, 0x4d3f, 0x4d58, 0x4d65, + 0x8145, 0x4d82, 0x4d87, 0x4d89, 0x4d94, 0x4daa, 0x4dac, 0x4dbf, + 0x4dc4, 0x4dd6, 0x4dda, 0x4ddb, 0x4ddd, 0x4dfc, 0x8146, 0x4e34, + 0x4e44, 0x4e5c, 0x4e5e, 0x4eab, 0x4eb1, 0x4ec1, + /* 0x17721..0x1777E */ + 0x4ec7, 0x4ece, 0x4f10, 0x4f1a, 0x8147, 0x4f2a, 0x4f2f, 0x4f33, + 0x4f51, 0x4f59, 0x4f5e, 0x4f61, 0x4f62, 0x4f7e, 0x4f88, 0x4f8c, + 0x4f8d, 0x4f94, 0x4fa0, 0x4fa7, 0x4fb6, 0x4fbc, 0x4fc7, 0x4fca, + 0x4ff9, 0x4ff0, 0x4ff5, 0x5005, 0x5006, 0x5028, 0x504a, 0x505d, + 0x505e, 0x504e, 0x5064, 0x5075, 0x5085, 0x50a4, 0x50ab, 0x50b7, + 0x50d4, 0x50d8, 0x50e4, 0x510f, 0x512b, 0x511e, 0x5120, 0x512e, + 0x5130, 0x5146, 0x5147, 0x5151, 0x8148, 0x5152, 0x515c, 0x5160, + 0x5168, 0x8115, 0x5185, 0x5187, 0x5192, 0x51c1, 0x51ba, 0x51c4, + 0x51fe, 0x5200, 0x5215, 0x5255, 0x5256, 0x1e3f, 0x528d, 0x529b, + 0x52be, 0x52c0, 0x52fb, 0xb7f1, 0x5327, 0x5328, 0x8116, 0x5350, + 0x5366, 0x537c, 0x5395, 0x539f, 0x53a0, 0x53a2, 0x53a6, 0x53ab, + 0x53c9, 0x53cf, 0x53d6, 0x53d9, 0x53e3, 0x53e9, + /* 0x17821..0x1787E */ + 0x5407, 0x540a, 0x541a, 0x541b, 0x814a, 0x5426, 0x5428, 0x542a, + 0x542b, 0x542c, 0x542e, 0x542f, 0x5430, 0x5444, 0x5446, 0x5447, + 0x544b, 0x5457, 0x5462, 0x546b, 0x546d, 0x5486, 0x5487, 0x5489, + 0x5498, 0x549c, 0x549f, 0x54a3, 0x5490, 0x54a6, 0x54a8, 0x54a9, + 0x54b5, 0x54bf, 0x54c8, 0x54c9, 0x54da, 0x54ff, 0x5501, 0x5517, + 0x552f, 0x556f, 0x5579, 0x5592, 0x1f72, 0x55ce, 0x55e4, 0x5600, + 0x5602, 0x5608, 0x5615, 0x5616, 0x5619, 0x561e, 0x562d, 0x5635, + 0x5643, 0x564b, 0x5664, 0x5665, 0x566d, 0x566f, 0x5671, 0x5681, + 0x569b, 0x569d, 0x569e, 0x56a6, 0x56aa, 0x56b6, 0x56c5, 0x56cc, + 0x56ce, 0x56d4, 0x56e6, 0x56f1, 0x56fc, 0x570a, 0x5719, 0x5734, + 0x5736, 0x5746, 0x574d, 0x574e, 0x575c, 0x575f, 0x5762, 0x577a, + 0x5780, 0x5794, 0x57aa, 0x57e0, 0x582d, 0xc18e, + /* 0x17921..0x1797E */ + 0x5843, 0x584e, 0x584f, 0x5851, 0x5868, 0x586e, 0x814b, 0x58b0, + 0xc20e, 0x58ad, 0x58e4, 0x58f2, 0x5900, 0x58f7, 0x591c, 0x592e, + 0x5931, 0x5934, 0x814c, 0x814d, 0x5945, 0x5946, 0x814e, 0x814f, + 0x8150, 0x595c, 0x8151, 0x8119, 0x811a, 0x5979, 0x8152, 0x8153, + 0x811b, 0x5998, 0x59b1, 0x59b8, 0x59c8, 0x59ca, 0xc371, 0x59d4, + 0x59de, 0x59eb, 0x59ed, 0x5a03, 0x8154, 0x5a39, 0x5a5d, 0x5a6d, + 0x8155, 0x5a85, 0x5aa0, 0xc4c4, 0x5ab3, 0x5abb, 0x5ace, 0x5aeb, + 0x5afd, 0x5b12, 0x5b2d, 0x5b3b, 0x5b47, 0x5b4e, 0x5b60, 0x5b6d, + 0x5b6f, 0x5b72, 0x5b9e, 0x8156, 0x5bd7, 0x5bd9, 0x5c01, 0x5c31, + 0x5c1e, 0x5c20, 0x5c33, 0x5c36, 0x2264, 0xc7a1, 0x5c59, 0x5c6d, + 0x5c79, 0x5c8f, 0x5c94, 0x5ca0, 0x5cbc, 0x5cd5, 0x5cd9, 0x5cdd, + 0x5d07, 0x5d08, 0x5d13, 0x5d1d, 0x5d23, 0x5d31, + /* 0x17A21..0x17A7E */ + 0x5d41, 0x5d48, 0x5d53, 0x5d5c, 0x5d7a, 0x5d83, 0x5d8b, 0x5da0, + 0x5da6, 0x5dc2, 0x5dcc, 0x5dd6, 0x5de3, 0x8157, 0x5e28, 0x5e08, + 0x5e11, 0x5e15, 0x8159, 0x5e47, 0x5e52, 0x5e61, 0x5e8a, 0x5e8d, + 0x5f47, 0x815a, 0x5f91, 0x5f97, 0x5fbf, 0x5fce, 0x5fdb, 0x5fdf, + 0x5fec, 0x5fee, 0x5ffa, 0x815b, 0x6014, 0x6026, 0x6035, 0x6037, + 0x603c, 0x60ca, 0x60d7, 0x60e0, 0x60f3, 0x6118, 0x614a, 0x6160, + 0x6167, 0x6168, 0x616d, 0x61bb, 0x61ca, 0x61cf, 0x61d7, 0x815c, + 0x2453, 0x245b, 0x6260, 0x6274, 0xd2ff, 0x628e, 0x62a1, 0x62a3, + 0x62a4, 0x62a9, 0x62ae, 0x62b7, 0x62be, 0x62bf, 0x62c6, 0x62d5, + 0x62fd, 0x62fe, 0x6300, 0x6301, 0x6362, 0x6322, 0x632d, 0x633a, + 0x6343, 0x6347, 0x6351, 0x6355, 0x637d, 0x6386, 0x6392, 0x6398, + 0x63a7, 0x63a9, 0x63bf, 0x63c0, 0x63c7, 0x63cf, + /* 0x17B21..0x17B7E */ + 0x63d1, 0x63e1, 0x63ea, 0x6401, 0x6406, 0x640a, 0x815f, 0x6448, + 0x645f, 0x6470, 0x6473, 0x6485, 0x649e, 0x64af, 0x64b4, 0x64ba, + 0x64c0, 0x64c2, 0xd440, 0x6532, 0x651e, 0x6523, 0x652f, 0x6559, + 0x6564, 0x811f, 0x65ad, 0x657a, 0x658c, 0x658f, 0x65a2, 0x65b0, + 0x65cb, 0x65ce, 0x65ed, 0x6612, 0x65ff, 0x6604, 0x6605, 0x6610, + 0xd674, 0x6618, 0x6629, 0x6638, 0x6657, 0x665b, 0x8036, 0x6662, + 0x259d, 0x666c, 0x6675, 0x6698, 0x66b8, 0x66fa, 0x66fc, 0x66fd, + 0x670b, 0x6771, 0x6787, 0x6788, 0x67ac, 0x67ad, 0x67b5, 0x25ea, + 0x67d6, 0x67ec, 0x6806, 0x680a, 0x6810, 0x6814, 0x681f, 0x6898, + 0x68aa, 0x68ca, 0x68ce, 0xd884, 0x68f5, 0x691c, 0x8160, 0x6918, + 0x6919, 0x691a, 0x6927, 0x6930, 0x6932, 0x6939, 0x6940, 0x6994, + 0x8161, 0x69d4, 0x69e5, 0x69f6, 0x6a12, 0x6a15, + /* 0x17C21..0x17C7E */ + 0x6a22, 0x6a37, 0x6a47, 0x6a4e, 0x6a5d, 0x6a61, 0x6a75, 0x6a79, + 0x6aa7, 0x6ad0, 0x6adf, 0x6af4, 0x6af6, 0x8122, 0x8162, 0x8163, + 0x6b46, 0x6b54, 0x6b59, 0x6b69, 0x6b9d, 0x6c49, 0x6c68, 0x8164, + 0x6ce1, 0x6cf4, 0x6cf8, 0x6cfe, 0x8165, 0x6d12, 0x6d1b, 0x6daf, + 0x6dce, 0x6dd1, 0x6dd7, 0x6e20, 0x6e23, 0x6e3d, 0x6e70, 0x6e7b, + 0xe177, 0x6ec0, 0x2844, 0x6efa, 0x6f1e, 0x6f2d, 0x6f36, 0x6f54, + 0xe24d, 0x6fa6, 0x6fb5, 0x6fe4, 0x6fe8, 0x6fee, 0x7008, 0x702d, + 0x8167, 0x7088, 0x7095, 0x7097, 0x7099, 0x709b, 0x70a2, 0x70b3, + 0x70be, 0x70c4, 0x70c5, 0x70c7, 0x70d7, 0x70dd, 0x70de, 0x70ef, + 0x70f4, 0x8126, 0x7114, 0x7115, 0x7116, 0x7122, 0x7123, 0x7127, + 0x712f, 0x7131, 0x7134, 0x713d, 0x7148, 0x715b, 0x7183, 0x719e, + 0x71ac, 0x71b1, 0x71bc, 0x71d7, 0x71fb, 0x71e4, + /* 0x17D21..0x17D7E */ + 0x71e5, 0x71ed, 0x71f1, 0x7207, 0x7210, 0x7238, 0x7239, 0x723a, + 0x723c, 0x7240, 0x7243, 0x724f, 0x7278, 0x7288, 0x72c2, 0x72cb, + 0x72cc, 0x72d3, 0x72e0, 0x72ff, 0x7304, 0x731f, 0x7321, 0x7325, + 0x7348, 0x7349, 0x734a, 0x7364, 0x7365, 0x736a, 0x7370, 0x739b, + 0x73a3, 0x73ba, 0x73c6, 0x73de, 0x73df, 0x7404, 0x73fd, 0x7433, + 0x744a, 0x7463, 0x746b, 0x7471, 0x7472, 0x758e, 0x759f, 0x75a6, + 0x75a9, 0x75ac, 0x75b6, 0x75bd, 0x75cb, 0x75d0, 0x75d3, 0x29b0, + 0x75da, 0x75de, 0x7658, 0x7684, 0x80dc, 0x769d, 0x76a4, 0x76a5, + 0x76d2, 0x76de, 0x8168, 0x76e9, 0x76ef, 0x7733, 0x773b, 0x774d, + 0x774e, 0x774f, 0x775a, 0x776e, 0x7773, 0x7795, 0x77ae, 0x77ba, + 0x77c1, 0x77c9, 0x77de, 0x77db, 0x77f4, 0x8169, 0x780a, 0x781e, + 0x782b, 0x7830, 0x816a, 0x7852, 0x7853, 0x7856, + /* 0x17E21..0x17E7E */ + 0x7857, 0x7859, 0x785a, 0x80d0, 0x7865, 0x786c, 0x78ba, 0x78c8, + 0x78e7, 0x7958, 0x799e, 0x7a02, 0x7a03, 0x7a24, 0x7a2d, 0x7a2e, + 0x7a38, 0x7a4a, 0x7a4e, 0x7a52, 0x7ab6, 0x7ac1, 0x7ac3, 0x7ace, + 0x7ad6, 0x7af9, 0x7b02, 0x7b08, 0x7b20, 0x2c17, 0x7b2d, 0x7b5e, + 0x7b79, 0x7b66, 0x7b72, 0x7b75, 0x7b84, 0x7b8a, 0x7b8f, 0x7b9e, + 0x7ba7, 0x7bc1, 0x7bce, 0x7be5, 0x7bf8, 0x7bfd, 0x7c00, 0x7c23, + 0x7c41, 0x7c4f, 0x7c50, 0x7c53, 0x7c63, 0x7c65, 0x7c77, 0x7d1d, + 0x7d1e, 0x7d43, 0x7d47, 0x7d52, 0x7d63, 0x7d70, 0x7d7c, 0x7d8a, + 0x7d96, 0x7dc0, 0x7dac, 0x7dbc, 0x7dd7, 0xf690, 0x7de7, 0x7e07, + 0x7e15, 0x7e7c, 0x7e9e, 0x7ea4, 0x7eac, 0x7eaf, 0x7eb4, 0x7eb5, + 0x7ec3, 0x7ed1, 0x7f10, 0x7f39, 0x7f57, 0x7f90, 0x7f94, 0x7f97, + 0x7fa2, 0x39f8, 0x3c5b, 0x3e77, 0x5626, 0x5e6b, + /* 0x22121..0x2217E */ + 0x8489, 0x2e02, 0x2e0f, 0x2e12, 0x2e29, 0x2e2b, 0x2e2e, 0x2e40, + 0x2e47, 0x2e48, 0x84a2, 0x2e51, 0x1406, 0x84a4, 0x2e5a, 0x2e69, + 0x2e9d, 0x142c, 0x142e, 0x2eb9, 0x2ebb, 0x8522, 0x2ebc, 0x2ec3, + 0x2ec8, 0x2ed0, 0x2eeb, 0x2eda, 0x2ef1, 0x2ef5, 0x2f00, 0x2f16, + 0x2f64, 0x2f37, 0x2f3e, 0x2f54, 0x2f58, 0x8593, 0x2f77, 0x2f78, + 0x2f7a, 0x2f7d, 0x2f82, 0x2f85, 0x2f92, 0x2f9a, 0x2fe6, 0x2fb2, + 0x2fbe, 0x2fc5, 0x2fcb, 0x2fcf, 0x2fd2, 0x146a, 0x2ff2, 0x3000, + 0x3010, 0x3013, 0x301c, 0x301e, 0x3022, 0x1468, 0x3042, 0x3046, + 0x304e, 0x3053, 0x3057, 0x3063, 0x3066, 0x306a, 0x3070, 0x30a3, + 0x3088, 0x3092, 0x3093, 0x3095, 0x3096, 0x309c, 0x30aa, 0x862b, + 0x30b1, 0x30ba, 0x30bb, 0x30c4, 0x30c7, 0x30f3, 0x8681, 0x30ce, + 0x8671, 0x30d4, 0x30d9, 0x30e1, 0x30e9, 0x1492, + /* 0x22321..0x2237E */ + 0x3108, 0x86f9, 0x3117, 0x311b, 0x874a, 0x3160, 0x8809, 0x3173, + 0x3183, 0x318b, 0x14bc, 0x3198, 0x31a3, 0x31ad, 0x14c7, 0x31bc, + 0x88d6, 0x8928, 0x31f3, 0x31f4, 0x3202, 0x3212, 0x3216, 0x8a4f, + 0x3255, 0x325c, 0x326c, 0x3277, 0x3284, 0x3282, 0x8b07, 0x3298, + 0x8b3a, 0x32a4, 0x32a6, 0x32af, 0x32ba, 0x32bb, 0x32ca, 0x151f, + 0x32d1, 0x8bb9, 0x32f7, 0x330a, 0x330b, 0x3324, 0x3335, 0x333e, + 0x3342, 0x8c7c, 0x8c9d, 0x3367, 0x336c, 0x337a, 0x33a4, 0x33b4, + 0x8dd3, 0x33b7, 0x33c0, 0x8e1d, 0x155d, 0x155e, 0x33d5, 0x33da, + 0x1563, 0x33f4, 0x33f5, 0x3455, 0x3424, 0x3428, 0x156e, 0x3443, + 0x3462, 0x3466, 0x346c, 0x348a, 0x348d, 0x3495, 0x34a0, 0x34a6, + 0x34ad, 0x34ae, 0x34b7, 0x34ba, 0x34bf, 0x34c3, 0x8f45, 0x34ec, + 0x34ef, 0x34f1, 0x34f3, 0x3500, 0x3501, 0x3509, + /* 0x22421..0x2247E */ + 0x353c, 0x3541, 0x15a6, 0x3547, 0x354a, 0x15a8, 0x3560, 0x3561, + 0x3564, 0x8fe1, 0x357d, 0x3582, 0x3588, 0x3591, 0x15c5, 0x35d2, + 0x9095, 0x906d, 0x35bf, 0x35c9, 0x35cc, 0x35d1, 0x35dd, 0x15da, + 0x35e2, 0x9064, 0x35e9, 0x3628, 0x915f, 0x3607, 0x3610, 0x3630, + 0x3637, 0x15f4, 0x363d, 0x363f, 0x3640, 0x3647, 0x365e, 0x3660, + 0x366d, 0x1605, 0x3688, 0x368c, 0x3695, 0x369a, 0x369d, 0x36a8, + 0x36ad, 0x36b2, 0x36c5, 0x36cd, 0x36df, 0x36e8, 0x36f6, 0x36f7, + 0x9201, 0x3715, 0x3723, 0x9255, 0x3729, 0x927b, 0x3745, 0x3746, + 0x374c, 0x374d, 0x9274, 0x3768, 0x376f, 0x3773, 0x3774, 0x3775, + 0x377b, 0x92e4, 0x92d7, 0x37ac, 0x379a, 0x379d, 0x379e, 0x37a8, + 0x37d7, 0x92fd, 0x37cc, 0x9336, 0x9344, 0x37de, 0x37e6, 0x37f0, + 0x164a, 0x37f8, 0x37fb, 0x37fd, 0x3804, 0x381e, + /* 0x22521..0x2257E */ + 0x3820, 0x3827, 0x3832, 0x3839, 0x93c4, 0x3849, 0x384c, 0x3867, + 0x388a, 0x388b, 0x388d, 0x388f, 0x3890, 0x3894, 0x389d, 0x38aa, + 0x38b1, 0x946d, 0x38c3, 0x38cd, 0x38e2, 0x38f3, 0x38f4, 0x3905, + 0x3906, 0x390b, 0x390d, 0x3914, 0x3924, 0x95d7, 0x1691, 0x393d, + 0x1699, 0x3946, 0x1696, 0xd329, 0x395b, 0x395f, 0x9647, 0x3975, + 0x3976, 0x397c, 0x399f, 0x39ae, 0x39bc, 0x39c8, 0x39cd, 0x39de, + 0x39e3, 0x39e4, 0x39e7, 0x39ee, 0x9706, 0x9742, 0x16cf, 0x3a0c, + 0x3a0d, 0x3a17, 0x3a27, 0x3a2d, 0x3a55, 0x3a65, 0x3a7a, 0x3a8b, + 0x3a9c, 0x3a9f, 0x3aa0, 0x3aa2, 0x3ab1, 0x3ab3, 0x3ab5, 0x3aba, + 0x3abf, 0x3ada, 0x3adc, 0x3ae0, 0x3ae5, 0x3af0, 0x3aee, 0x3af5, + 0x3b00, 0x3b08, 0x3b17, 0x3b34, 0x3b2d, 0x3b4c, 0x3b52, 0x3b68, + 0x3b6f, 0x3b7c, 0x3b7f, 0x3b81, 0x3b84, 0x99c3, + /* 0x22821..0x2287E */ + 0x3b96, 0x3bac, 0x1761, 0x3bc0, 0x1762, 0x3bce, 0x3bd6, 0x176c, + 0x176b, 0x3bf1, 0x3bfd, 0x1775, 0x3c03, 0x3c29, 0x3c30, 0x9a56, + 0x3c5f, 0x3c63, 0x3c67, 0x3c68, 0x3c69, 0x3c70, 0x9b2d, 0x9b45, + 0x3c7c, 0x9b78, 0x9b62, 0x3c88, 0x3c8a, 0x17c1, 0x9ba1, 0x9b9c, + 0x3ca0, 0x3ca2, 0x3ca6, 0x3ca7, 0x9b92, 0x3cad, 0x3cb5, 0x9bb7, + 0x3cc9, 0x9be0, 0x9c33, 0x3d06, 0x3d10, 0x3d2b, 0x3d1d, 0x3d20, + 0x3d24, 0x3d26, 0x3d31, 0x3d39, 0x3d42, 0x17e8, 0x3d61, 0x3d6a, + 0x17f4, 0x3d70, 0x9d1e, 0x17fd, 0x3d88, 0x1800, 0x3d92, 0x3d94, + 0x3d97, 0x3d99, 0x3db0, 0x3db2, 0x3db4, 0x9d76, 0x3db9, 0x3dd1, + 0x3dd7, 0x3dd8, 0x3de0, 0x9dfa, 0x3de4, 0x3de9, 0x182f, 0x3e00, + 0x1836, 0x3e12, 0x3e15, 0x1840, 0x3e1f, 0x3e2e, 0x3e3e, 0x3e49, + 0x185c, 0x3e56, 0x1861, 0x3e6b, 0x3e6c, 0x3e6d, + /* 0x22C21..0x22C7E */ + 0x3e6e, 0x9e7b, 0x3ea5, 0x3eaa, 0x3eac, 0x3eb9, 0x3ebf, 0x3ec6, + 0x3ed2, 0x3ed9, 0xa01e, 0x3efd, 0x3f08, 0x3f0e, 0x3f1c, 0xa0ad, + 0x3f1e, 0x3f47, 0x3f63, 0x3f72, 0x3f7e, 0x3f8f, 0x3fa2, 0x3fa4, + 0x3fb8, 0x3fc4, 0x18fa, 0x3fc7, 0x3fcb, 0x3fd2, 0x3fd3, 0x3fd4, + 0x3fe2, 0x3fee, 0x3fef, 0x3ff3, 0x3ffc, 0x1917, 0x4017, 0x4022, + 0x4024, 0x191a, 0x404c, 0x407f, 0x408a, 0x4095, 0x40a8, 0xa1f3, + 0x40b0, 0x40b1, 0x40be, 0x40c8, 0x40d9, 0x40db, 0x40ee, 0x40f2, + 0x40f5, 0x4110, 0x4112, 0x4113, 0x4119, 0x411e, 0x413a, 0x196f, + 0x4141, 0x4146, 0x4160, 0x417c, 0xa25b, 0x4192, 0x4193, 0x4197, + 0x4198, 0x41a5, 0x41a8, 0x41ad, 0xa2ab, 0x41d5, 0x41dd, 0x41df, + 0x41f5, 0xa38f, 0x4215, 0x4223, 0x4229, 0x4246, 0x424c, 0x4251, + 0x4252, 0x4261, 0x4264, 0x427b, 0x426d, 0x4273, + /* 0x22D21..0x22D7E */ + 0x4299, 0x42a6, 0x42d5, 0xa4b8, 0x42fd, 0x4303, 0x430d, 0x4310, + 0xa54f, 0xa550, 0x4332, 0x4335, 0x433b, 0x433c, 0x4341, 0x4344, + 0x434e, 0xa546, 0x4359, 0xa61d, 0xa5a6, 0x436c, 0x4384, 0x4399, + 0xa624, 0x4394, 0x43bd, 0x43f7, 0x43d4, 0x43d5, 0x43dc, 0x43e0, + 0x43eb, 0x43ec, 0x43f2, 0x4409, 0x441e, 0x4425, 0x4429, 0x442f, + 0x445a, 0x445b, 0x445d, 0x4473, 0x447d, 0x4487, 0x4491, 0x449d, + 0x449f, 0x44cb, 0x44cc, 0x44d5, 0x44d7, 0xa7e1, 0x44e4, 0x44e5, + 0x44ff, 0x4504, 0x1a6e, 0x450f, 0x4514, 0x4516, 0x1a73, 0x451e, + 0x4532, 0x4544, 0x4554, 0x456b, 0x457a, 0x4581, 0x4584, 0x4585, + 0x458a, 0x45b2, 0x45b5, 0x45b8, 0x45bf, 0x45c2, 0x45c9, 0x45d4, + 0x1ad6, 0x45f2, 0x45f9, 0x45fc, 0x4604, 0x4608, 0x4621, 0x462a, + 0x4645, 0x4651, 0x464e, 0x1aea, 0xa8c3, 0x4657, + /* 0x22E21..0x22E7E */ + 0x465b, 0x4663, 0xa8f5, 0xa8b6, 0x466a, 0x466b, 0x466c, 0x466d, + 0x467b, 0x4680, 0x4690, 0x4692, 0x4699, 0x1b0e, 0x46ad, 0x46b1, + 0x46b5, 0x1b1a, 0x46bf, 0x1b1c, 0x46ec, 0x1ad7, 0x4701, 0x4705, + 0x4712, 0xa972, 0x4719, 0xa9d3, 0xa9d2, 0x474c, 0x474d, 0x4754, + 0x475d, 0xa9d0, 0xa9e4, 0xa9d5, 0x4774, 0x4776, 0xa9da, 0x4792, + 0xa9df, 0x6363, 0x4810, 0x47b0, 0x47b2, 0x47c3, 0x47c8, 0x47d2, + 0x47d9, 0x47db, 0x47f0, 0x47f7, 0xaa4a, 0xaa51, 0xaa4b, 0x4818, + 0x481f, 0x482d, 0xaa65, 0x4833, 0x483b, 0x483e, 0x4844, 0x4845, + 0x4849, 0x484c, 0x4855, 0x4857, 0x1b77, 0x486b, 0x486e, 0x487a, + 0x487c, 0x4882, 0x4890, 0x4896, 0x1b6d, 0x4898, 0x4899, 0x489a, + 0x489c, 0x48aa, 0x48ab, 0x48b4, 0x48bb, 0x48fb, 0xaae4, 0xab5a, + 0x8113, 0x48c3, 0x48c5, 0x48cc, 0x48cf, 0x48d6, + /* 0x22F21..0x22F7E */ + 0x48d9, 0x48e4, 0x48e5, 0x48ec, 0x48f7, 0x4903, 0x4907, 0x1b87, + 0x1b88, 0xab94, 0x493b, 0x1b8d, 0x4946, 0x4969, 0x496c, 0x4972, + 0x497a, 0x497f, 0x4992, 0x1ba4, 0x4996, 0x4998, 0x49a6, 0x49b0, + 0x49b7, 0x49ba, 0x49bc, 0x49c0, 0x49d1, 0x49d6, 0xac39, 0xac47, + 0x4a30, 0xac38, 0xac3a, 0x49e3, 0x49ee, 0x49ef, 0x49f3, 0x1bcd, + 0x49f4, 0x49fe, 0x4a11, 0x4a1a, 0x4a1d, 0xad1c, 0x4a32, 0x4a33, + 0x4a34, 0x4a3f, 0x4a46, 0x4a49, 0x4a7a, 0x4a4e, 0x4a52, 0x4a64, + 0xad0c, 0x4a7e, 0x4a83, 0x4a8b, 0x1bf0, 0x4a91, 0x4a9f, 0x4aa1, + 0xad64, 0x4aab, 0x4abd, 0x4ac6, 0x4ad4, 0x4ad0, 0x4adc, 0x4add, + 0xadff, 0xade7, 0x4aec, 0x4af1, 0x4af2, 0x4af3, 0x4afd, 0xae24, + 0x4b0b, 0x4b0f, 0x4b10, 0x4b11, 0xae3d, 0x4b17, 0x1c26, 0x4b2f, + 0x4b4a, 0x4b58, 0x4b6c, 0x4b75, 0x4b7a, 0x4b81, + /* 0x26E21..0x26E7E */ + 0x4b9b, 0x4bae, 0xaf98, 0x4bbd, 0x4bbe, 0x4bc7, 0x4bc8, 0x4bc9, + 0x4bda, 0x4be6, 0x4be7, 0x4bee, 0x4bf1, 0x4c02, 0x4c0a, 0x4c0e, + 0x4c35, 0x4c36, 0x4c3a, 0xb07f, 0x4c3f, 0x4c4d, 0x4c5b, 0x4c6d, + 0x4c84, 0x4c89, 0x1cc3, 0x4c94, 0x4c95, 0x4c97, 0x4cad, 0x4cc2, + 0x4cd0, 0x1cd2, 0x4cd6, 0x4cda, 0x4cdc, 0x4ce9, 0x4cec, 0x4ced, + 0xb100, 0x4d00, 0x4d0a, 0x4d24, 0x4d26, 0x4d27, 0x4c67, 0x4d2f, + 0x4d3c, 0x4d5b, 0x4d5e, 0x4d60, 0x4d70, 0x4d80, 0x4d81, 0x4d8a, + 0x4d8d, 0x4d91, 0x4d98, 0xb140, 0x4e17, 0xb1fa, 0xb1f9, 0xb1d3, + 0x4dab, 0x4dae, 0x4db4, 0x4dc2, 0x4d34, 0x4dc8, 0x4dce, 0x4dcf, + 0x4dd0, 0x4ddf, 0x4de9, 0x4df6, 0x4e36, 0x4e1e, 0x4e22, 0x4e27, + 0x1d11, 0x4e32, 0x4e3c, 0x4e48, 0x4e49, 0x4e4b, 0x4e4c, 0x4e4f, + 0x4e51, 0x4e53, 0x4e54, 0x4e57, 0x4e63, 0x1d1e, + /* 0x26F21..0x26F7E */ + 0x4e93, 0x4ea7, 0x4eb4, 0x4ebf, 0x4ec3, 0x4eca, 0x4ed9, 0x4f35, + 0x4eeb, 0x4ef9, 0x4efb, 0x4f0a, 0x4f0c, 0x4f18, 0x4f25, 0x4f36, + 0x4f3c, 0xb27e, 0x4f52, 0x4f57, 0x4f5a, 0x4f60, 0x4f68, 0x4f98, + 0x4f7d, 0x4f90, 0x4f96, 0x4fbe, 0x4f9f, 0x4fa5, 0x4faf, 0x1d64, + 0x4fb5, 0x4fc8, 0x4fc9, 0x4fda, 0x4fde, 0x4fe9, 0xb396, 0x4ffc, + 0x5000, 0x5007, 0x500a, 0x5023, 0xb403, 0x5039, 0x503a, 0x503c, + 0x5043, 0x5047, 0x504b, 0x1d9a, 0x5054, 0x5065, 0x5069, 0x506c, + 0x506e, 0x5076, 0x507e, 0x5081, 0x5086, 0x5095, 0x5097, 0x50bb, + 0xb4c6, 0x509f, 0x50b1, 0xb4fe, 0x50ec, 0x50ca, 0x50d1, 0x50d3, + 0x50dc, 0x5103, 0x5104, 0x5106, 0x5107, 0x5108, 0x510c, 0x1dc0, + 0x512f, 0x5131, 0x5150, 0x514a, 0x5153, 0x515e, 0x1dd4, 0x5196, + 0x5180, 0x519b, 0x51a0, 0x51a2, 0x51ae, 0x51af, + /* 0x27021..0x2707E */ + 0x51b3, 0xb5bc, 0x51cb, 0x51d3, 0x51d9, 0x51dc, 0x5207, 0x1e05, + 0x8149, 0x522b, 0x5234, 0x5238, 0x5239, 0x2e2c, 0x5242, 0x5253, + 0x5257, 0x5263, 0xb629, 0x526e, 0x526f, 0x5278, 0x527f, 0x528e, + 0xb6a5, 0x52ad, 0x52ae, 0x52b0, 0x52b1, 0x52c1, 0x1e60, 0x52cc, + 0x1e66, 0x1e68, 0x52f3, 0x52fa, 0x5307, 0x5312, 0x5318, 0x5319, + 0x1e83, 0x5339, 0x532c, 0x5331, 0x5333, 0x533d, 0x5352, 0x1e94, + 0x536b, 0x536c, 0xb896, 0x536e, 0x536f, 0x5371, 0x5377, 0x5381, + 0x5385, 0x538a, 0x5394, 0x5398, 0x539c, 0x539e, 0x53a5, 0x53a8, + 0x53b5, 0x53b7, 0x53b9, 0x53bc, 0x53bf, 0x53c5, 0x53cb, 0x53e1, + 0x53e7, 0x53f9, 0x5413, 0x53fa, 0x5401, 0x5424, 0x5431, 0x5439, + 0x5453, 0x5440, 0x5443, 0x544d, 0x5452, 0x545d, 0x5471, 0x5481, + 0x5485, 0x5488, 0xb94d, 0x5492, 0x5497, 0x5499, + /* 0x27121..0x2717E */ + 0x54a0, 0x54a1, 0x54a5, 0x54aa, 0x54ab, 0x54b9, 0x54bb, 0x54ba, + 0x54d6, 0x54d8, 0x54de, 0x54ef, 0x54eb, 0xba56, 0x54fa, 0xba6f, + 0x5520, 0x5524, 0x552a, 0x1f57, 0xbb16, 0x553d, 0x553e, 0x5540, + 0x5548, 0x554e, 0x5550, 0x5552, 0x556c, 0x5572, 0x5571, 0x557a, + 0x557d, 0x557e, 0x5581, 0xbc14, 0x558c, 0x1f75, 0x55a2, 0x1f77, + 0x55b0, 0x55b7, 0x55bf, 0x55c0, 0x55c6, 0x55cf, 0x55d3, 0x55dd, + 0x55df, 0x55e0, 0x55e7, 0x55ec, 0x55ee, 0x55f1, 0x55f9, 0x5603, + 0x5618, 0x5607, 0x560f, 0x1fae, 0xbd0e, 0x5613, 0x561b, 0x561c, + 0xbd37, 0x5625, 0x5628, 0x563c, 0x5633, 0xbd6a, 0x1fc9, 0x5641, + 0xbd8b, 0x5649, 0x5655, 0x1fd7, 0x566e, 0x5695, 0x569c, 0x56a1, + 0x56a0, 0x56a7, 0x56a8, 0x56af, 0xbe4a, 0x56c9, 0xbe55, 0x56e8, + 0x56ec, 0xbf22, 0x5717, 0x571a, 0x572d, 0x5735, + /* 0x27221..0x2727E */ + 0xbfa9, 0x2039, 0xbfe5, 0xbfcd, 0x5758, 0x5760, 0x576a, 0xc01e, + 0x5772, 0x577c, 0x577d, 0xc04c, 0x2058, 0x579a, 0x579f, 0x57a2, + 0x57a4, 0x57a9, 0x57de, 0x57df, 0x57e4, 0x57e6, 0x57ea, 0x57ec, + 0x2093, 0x57f0, 0x57f4, 0x57fb, 0xc12e, 0x5805, 0x5806, 0x5809, + 0x580d, 0x5819, 0x5821, 0x582c, 0x5847, 0x5864, 0x586a, 0xc1d9, + 0x588a, 0x5894, 0x58a4, 0x589d, 0x589e, 0x589f, 0x58bb, 0x58c8, + 0x58cc, 0x58ce, 0x58d5, 0x58e0, 0x58e1, 0x58e6, 0x58f9, 0x58fa, + 0x58fb, 0x58fe, 0xc2a7, 0x5910, 0x591b, 0x5930, 0x5925, 0x593b, + 0x594a, 0x5958, 0x595b, 0x2105, 0x5967, 0x5972, 0x5994, 0x5995, + 0x5996, 0x599b, 0x59a1, 0x59a9, 0x59b4, 0x59bb, 0x59c2, 0x59c7, + 0x59cc, 0x59cd, 0x59d6, 0x2148, 0xc3a9, 0xc3b4, 0x214f, 0x5a0a, + 0x5a11, 0x5a15, 0x5a1b, 0x5a1e, 0x2163, 0x5a2d, + /* 0x27321..0x2737E */ + 0x5a38, 0x5a47, 0x5a4c, 0x5a56, 0x5a59, 0x5a5c, 0x5a5f, 0x5a60, + 0x5a67, 0x5a6a, 0x5a75, 0x5a78, 0x5a82, 0x5a8a, 0x5a90, 0x5aa3, + 0x5aac, 0xc4d4, 0x21b4, 0x5ab9, 0x5abc, 0x5abe, 0x21bf, 0x5acc, + 0x5ad1, 0x5ae7, 0x5ae8, 0x5af4, 0xc5e4, 0xc5e3, 0x5b07, 0xc5f1, + 0x5b3d, 0x5b27, 0x5b2a, 0x5b2e, 0x5b2f, 0x5b31, 0x21e6, 0x21f3, + 0x5b7f, 0x5b41, 0x21ee, 0x5b55, 0x5b79, 0x5b64, 0x5b66, 0x5b69, + 0x5b73, 0xc632, 0x2207, 0x5b90, 0x5b91, 0x5b9b, 0x220e, 0x5baf, + 0x5bb5, 0x5bbc, 0x5bc5, 0x5bca, 0xc6cb, 0xc6e4, 0x5bd4, 0x5bd6, + 0x5bda, 0x5bea, 0x5bf0, 0x5c03, 0x5c0b, 0x5c0e, 0x5c0f, 0x5c26, + 0x5c45, 0x5c4a, 0x5c51, 0x5c57, 0x5c5e, 0x5c61, 0x5c69, 0x5c6e, + 0x5c6f, 0x5c70, 0xc82e, 0xc856, 0xc865, 0x5ca6, 0xc862, 0x5cb6, + 0x5cb7, 0x5cbf, 0xc8d8, 0x5cc4, 0xc8c2, 0x5cc8, + /* 0x27421..0x2747E */ + 0x5ccd, 0xc8e8, 0x5cd7, 0xc923, 0x5ce6, 0x5ceb, 0xc95c, 0x5cf5, + 0x5d03, 0x5d09, 0x22c6, 0x5d12, 0x5d1e, 0xc9e0, 0xc9d4, 0x5d3d, + 0x5d3e, 0x5d40, 0x5d47, 0xca0c, 0xc9fb, 0x22d6, 0x5d59, 0x5d5a, + 0x5d6a, 0x5d70, 0x22dd, 0x5d7f, 0xca17, 0x5d86, 0x5d88, 0x5d8c, + 0x5d97, 0xca60, 0x5d9d, 0x5da7, 0x5daa, 0x5db6, 0x5db7, 0x5dc0, + 0x5dd7, 0x5dd9, 0x5de6, 0x5df1, 0x5df9, 0x2302, 0xcaed, 0x8158, + 0x5e10, 0x5e17, 0x5e1d, 0x5e20, 0x5e27, 0x5e2c, 0x5e45, 0x5e73, + 0x5e75, 0x5e7e, 0x5e86, 0x5e87, 0x232b, 0x5e91, 0x5e98, 0x5e9a, + 0x2343, 0x5f3c, 0x5f3b, 0x5f3e, 0x5f43, 0x5f44, 0x5f4f, 0x14c1, + 0xcb70, 0x5f52, 0xcb86, 0x5f61, 0x5f63, 0x5f64, 0x5f6d, 0x5f7d, + 0x5f7e, 0xcc4c, 0x5f90, 0x317b, 0xb10e, 0x5f96, 0x5f9c, 0x5fad, + 0xcd02, 0x5fc3, 0x5fcf, 0x5fe3, 0x5fe5, 0x5fef, + /* 0x27521..0x2757E */ + 0x5ff2, 0x6002, 0x600a, 0x6008, 0x600e, 0x6011, 0x6016, 0x6024, + 0x602c, 0x6030, 0x6043, 0x6066, 0x6071, 0x6075, 0x607b, 0x6099, + 0x609c, 0x60a4, 0x60a7, 0x60b8, 0xce7e, 0x60c5, 0x60d5, 0x60d8, + 0x60e6, 0xceb0, 0x610d, 0x60f5, 0x60fb, 0x23ee, 0x6135, 0x6116, + 0x611e, 0x23f0, 0x6124, 0x6127, 0x612c, 0xcf1d, 0x613d, 0x2408, + 0x6169, 0x2417, 0x6181, 0x241c, 0x6184, 0x6185, 0x2422, 0x6198, + 0x61b2, 0x61c1, 0x61c3, 0x61d6, 0x61db, 0xd0dd, 0x61e4, 0xd0ea, + 0x61ec, 0xd151, 0x61fd, 0x61ff, 0xd16f, 0x6204, 0xd1dd, 0x6219, + 0x6221, 0x6222, 0xd21e, 0x6232, 0x6234, 0x623c, 0x6246, 0x6249, + 0x6245, 0xd258, 0x624b, 0x2476, 0x624f, 0x247a, 0x6257, 0xd28c, + 0x625c, 0x6263, 0xd2b7, 0x815d, 0x815e, 0x6279, 0x2491, 0x627d, + 0x627f, 0x6283, 0x628a, 0x6293, 0x62a7, 0x62a8, + /* 0x27621..0x2767E */ + 0x62b2, 0x62b4, 0x62ba, 0x62bc, 0x62e2, 0x62e8, 0x62f7, 0x6307, + 0x6308, 0x630c, 0x6354, 0x631b, 0x631d, 0x6330, 0x633c, 0x6344, + 0x6357, 0x24be, 0x637f, 0x24d4, 0x24b3, 0x638d, 0x6394, 0x6395, + 0x639b, 0x639d, 0x63c9, 0x63d0, 0x63d4, 0x63dd, 0x63e5, 0x63f9, + 0x640f, 0x6411, 0x6415, 0xd373, 0x6417, 0x6439, 0x644a, 0x644f, + 0x6451, 0x6452, 0x6459, 0x645a, 0x645c, 0xd3dd, 0x6465, 0x6476, + 0x6478, 0x647c, 0x6481, 0x250d, 0x64dc, 0x6497, 0x64a6, 0x64be, + 0x2508, 0x64ce, 0x64cf, 0x64d3, 0xd465, 0x64e7, 0x64ea, 0x64ef, + 0x64f0, 0x64f1, 0x64fa, 0x64fd, 0x650c, 0x651b, 0x6524, 0x6525, + 0x652b, 0x6534, 0x654f, 0x656f, 0x2525, 0x2543, 0x653e, 0x6551, + 0x6553, 0x655e, 0x6561, 0x6562, 0xd594, 0x657b, 0x657d, 0x657f, + 0x6581, 0x6586, 0x6593, 0x659d, 0x659f, 0xd5f8, + /* 0x27721..0x2777E */ + 0xd5f6, 0xd5f7, 0x65b7, 0x65bc, 0x65c7, 0x65ca, 0x65d8, 0x65d9, + 0x65df, 0x65e1, 0x65e6, 0x65f6, 0x6600, 0x6611, 0x661e, 0x6621, + 0x6624, 0x6627, 0xd68d, 0x6639, 0x663c, 0xd6b9, 0x6640, 0x8120, + 0x6653, 0x6656, 0x666f, 0x6677, 0x667a, 0x6687, 0x6689, 0x668d, + 0x6691, 0x669c, 0x669d, 0x66a8, 0x8121, 0x66b1, 0x66b3, 0x66c1, + 0x66c3, 0x66d1, 0x66d5, 0x66d7, 0x66e3, 0x66e6, 0x25b8, 0x6705, + 0x6707, 0x670e, 0x6710, 0x6713, 0x6719, 0x671f, 0x6721, 0x6723, + 0x6731, 0x673a, 0x673e, 0x6740, 0x6743, 0x6751, 0x6758, 0x6764, + 0x6765, 0x6772, 0x677c, 0xd75b, 0xd75a, 0x67a7, 0x6789, 0x678b, + 0x6793, 0x67a0, 0xd77e, 0x25e5, 0x67be, 0xd790, 0x67c1, 0x67ce, + 0x67f5, 0x67df, 0xd7c9, 0x67e3, 0x67e5, 0x67e6, 0x67ea, 0x67eb, + 0x67ed, 0x6801, 0x6803, 0x680b, 0x6813, 0x6828, + /* 0x27821..0x2787E */ + 0x682e, 0x6832, 0x683c, 0x260f, 0x684a, 0x6858, 0x685f, 0x6864, + 0xd815, 0xd814, 0x6869, 0xd831, 0x686f, 0x68a0, 0x68bc, 0x68bd, + 0x68be, 0x68c0, 0x68d2, 0xd893, 0x68d1, 0x68d3, 0x68db, 0x68f0, + 0x68f1, 0x2641, 0x6901, 0xd90e, 0x6937, 0xd923, 0x6942, 0x6945, + 0x6949, 0xd952, 0x2665, 0x6962, 0x6980, 0x6989, 0x6990, 0x699f, + 0x69b0, 0x69b7, 0x69d6, 0x69d8, 0x69eb, 0x26a1, 0x69f1, 0x69f3, + 0x69fd, 0x69ff, 0x26af, 0x6a11, 0x6a14, 0xda85, 0x6a21, 0x6a35, + 0x6a3e, 0x6a45, 0x6a4d, 0x6a58, 0x6aae, 0x6a90, 0x6ab7, 0x6abe, + 0x6ad7, 0x6afc, 0xdb84, 0x6b0a, 0x6b05, 0x6b0d, 0x6b1c, 0x6b1f, + 0x6b2d, 0x6b43, 0x270c, 0x6b51, 0x6b5e, 0x6b76, 0x6b7f, 0x6b81, + 0x6b8b, 0x6b94, 0x6b95, 0x6b9c, 0x6b9e, 0x6c39, 0xdcb3, 0x6c3d, + 0xdcbe, 0xdcc7, 0x6c45, 0x6c47, 0x6c4f, 0x6c54, + /* 0x27921..0x2797E */ + 0x6c57, 0x6c69, 0x6c6d, 0x6c73, 0xddb8, 0x6c93, 0x6c92, 0x6c99, + 0x2764, 0x6c9b, 0x6ca4, 0x6cd6, 0x6cd5, 0x6cd9, 0xde20, 0x6cf0, + 0x6cf1, 0xde90, 0x6d09, 0x6d0e, 0x6d6c, 0x6d84, 0x6d95, 0x6da6, + 0xdfb7, 0x6dc6, 0x6dc8, 0x6dd9, 0x6dec, 0x6e0c, 0x27fd, 0x6dfd, + 0x6e06, 0xe08a, 0x6e14, 0x6e16, 0x6e21, 0x6e22, 0x6e27, 0xe0bb, + 0x2816, 0x6e36, 0x6e39, 0x6e4b, 0x6e54, 0x6e62, 0x6e6c, 0x6e6d, + 0x6e6f, 0x6e98, 0x6e9e, 0x6eae, 0x6eb3, 0x6eb5, 0x6eb6, 0x6ebb, + 0xe182, 0x6ed1, 0x6ed4, 0x284e, 0x6ef9, 0xe1f3, 0x6f00, 0x6f08, + 0x6f17, 0x6f2b, 0x6f40, 0x6f4a, 0x6f58, 0xe28c, 0x6fa4, 0x6fb4, + 0x8166, 0x6fb6, 0xe2d5, 0x6fc1, 0x6fc6, 0x8124, 0x6fca, 0x6fcd, + 0x6fd3, 0x6fd5, 0x6fe0, 0x6ff1, 0x6ff5, 0x6ffb, 0x7002, 0x700c, + 0x7037, 0xe36b, 0x7043, 0x7044, 0x705d, 0xe3c8, + /* 0x27A21..0x27A7E */ + 0xe3c9, 0x7085, 0x708c, 0x7090, 0x761d, 0x70a1, 0x28b5, 0x70b0, + 0x70b6, 0x70c3, 0x70c8, 0xe4d7, 0x70dc, 0x70df, 0xe4fa, 0x70f6, + 0x70f2, 0x7100, 0x70eb, 0x70fe, 0x70ff, 0x7104, 0x7106, 0x7118, + 0x711c, 0x711e, 0x7137, 0x7139, 0x713a, 0x7146, 0x7147, 0x7157, + 0x7159, 0x7161, 0x7164, 0x7174, 0x7179, 0x7185, 0x718e, 0x71a8, + 0x71ae, 0x71b3, 0x71b6, 0x71c3, 0x71c4, 0x71da, 0xe549, 0xe546, + 0x71ec, 0x71ee, 0x7201, 0x720a, 0x7216, 0x7217, 0xe56b, 0x7233, + 0x7242, 0x7247, 0x724a, 0x724e, 0x7251, 0x7256, 0x7259, 0x7260, + 0x7261, 0x7265, 0x7267, 0x7268, 0xe587, 0xe588, 0x727c, 0x727d, + 0x727f, 0x7289, 0x728d, 0x7297, 0x7299, 0x729f, 0x72a7, 0x72ab, + 0xe5ba, 0xe5bb, 0x72b2, 0x72bf, 0x72c0, 0x72c6, 0x72ce, 0x72d0, + 0x72d7, 0x72d9, 0x72e5, 0x72e7, 0x7311, 0xe61e, + /* 0x27B21..0x27B7E */ + 0xe629, 0x72f7, 0x72f9, 0x72fb, 0x7302, 0x730d, 0x7315, 0x731d, + 0x731e, 0x7327, 0x7329, 0xe671, 0xe643, 0x7347, 0x7351, 0x7357, + 0x735a, 0x736b, 0x7371, 0x7373, 0x73a1, 0xe699, 0xe6cd, 0x7388, + 0x738b, 0x738f, 0x739e, 0x73f5, 0xe6e4, 0xe6dd, 0x73f1, 0x73c1, + 0x73c7, 0x73dc, 0x73e2, 0x73e7, 0x7409, 0x740f, 0x7416, 0x7417, + 0x73fb, 0x7432, 0x7434, 0x743b, 0x7445, 0xe7c1, 0xe7ef, 0x746d, + 0x746f, 0x7578, 0x7579, 0x7586, 0x758c, 0x758d, 0xe810, 0x75ab, + 0x75b4, 0xe871, 0x75c8, 0xe8fb, 0xe91f, 0x762c, 0x7633, 0x7634, + 0xe936, 0x763c, 0x7641, 0x7661, 0xe989, 0x7682, 0xe9eb, 0x769a, + 0xea32, 0x29e7, 0x76a9, 0x76af, 0x76b3, 0x76ba, 0x76bd, 0x29fa, + 0xeaf8, 0x76d8, 0x76da, 0x76dd, 0x2a04, 0x7714, 0x7723, 0x2a29, + 0x7736, 0x7741, 0x7747, 0x7755, 0x7757, 0x775b, + /* 0x27C21..0x27C7E */ + 0x776a, 0xeba0, 0xebb1, 0x7796, 0x779a, 0x779e, 0x77a2, 0x77b1, + 0x77b2, 0x77be, 0x77cc, 0x77d1, 0x77d4, 0x77d8, 0x77d9, 0x77e1, + 0x77f1, 0x7804, 0x780d, 0x780e, 0x7814, 0x7816, 0x2abc, 0xec90, + 0x7823, 0x7832, 0x7833, 0x7825, 0x7847, 0x7866, 0x78ab, 0x78ad, + 0x78b0, 0xedcf, 0x78b7, 0x78b8, 0x78bb, 0x78bc, 0x78bf, 0x78c2, + 0x78c7, 0x78cb, 0x78e0, 0xee7f, 0x78e1, 0x78e3, 0x78e5, 0x78ea, + 0x78f0, 0x78f1, 0x78f3, 0x7908, 0x2b3b, 0xeef0, 0x7916, 0x7917, + 0xef19, 0x791a, 0x791b, 0x791c, 0xef50, 0x7931, 0x7932, 0x7933, + 0x793a, 0x793b, 0x793c, 0x7940, 0x7941, 0x7946, 0x794d, 0x794e, + 0x795c, 0x795f, 0x7960, 0x79a3, 0x79a6, 0x79b9, 0x79bd, 0x79bf, + 0x79c3, 0x79c9, 0x79d4, 0x79d9, 0x79de, 0xf0c6, 0x79f0, 0x79f9, + 0x79fc, 0x7a0a, 0x7a11, 0x7a16, 0x7a1a, 0x7a20, + /* 0x27D21..0x27D7E */ + 0x7a31, 0x7a36, 0x7a44, 0x7a4c, 0x7a58, 0x2bc2, 0x7aaf, 0x2bca, + 0x7ab7, 0x2bd2, 0x7ab9, 0xf172, 0x7ac6, 0x7ad0, 0x7ad2, 0x7ad5, + 0x2be8, 0x7adc, 0x7ae0, 0x7ae5, 0x7ae9, 0x7b03, 0x7b0c, 0x7b10, + 0x7b12, 0x7b16, 0x7b1c, 0x7b2b, 0x7b33, 0x7b3d, 0x2c20, 0x7b4b, + 0x7b63, 0x7b65, 0x7b6b, 0x7b6c, 0x7b73, 0x7b76, 0x7b77, 0x7ba6, + 0x7bac, 0x7bb1, 0xf2db, 0xf33d, 0x7bb2, 0x7bb8, 0x7bbe, 0x7bc7, + 0x7bf3, 0x7bd8, 0x7bdd, 0x7be7, 0x7bea, 0x7beb, 0x7bef, 0x7bee, + 0xf315, 0x7bfa, 0xf38a, 0x7bf7, 0xf349, 0x7c16, 0x7c18, 0x7c19, + 0x7c1a, 0x7c1d, 0x7c22, 0x7c27, 0x7c29, 0x7c2a, 0xf3c4, 0x7c31, + 0x7c36, 0x7c37, 0x7c45, 0x7c5c, 0xf3e9, 0x7c49, 0x7c4a, 0xf3db, + 0x7c54, 0x7c58, 0x7c5b, 0x7c5d, 0x7c5f, 0x7c69, 0x7c6a, 0x7c6b, + 0x7c6d, 0x7c6e, 0x7c70, 0x7c72, 0x7c75, 0x7c7a, + /* 0x27E21..0x27E7E */ + 0x7ce6, 0x7cf2, 0x7d0b, 0x7d02, 0xf4ce, 0x7d11, 0x7d17, 0x7d18, + 0xf52f, 0x2cc4, 0xf51a, 0x7d32, 0x2cd1, 0x7d42, 0x7d4a, 0x7d5f, + 0x7d62, 0xf5f9, 0x7d69, 0x7d6b, 0xf582, 0x7d73, 0x7d76, 0x7d77, + 0x7d7e, 0x7d84, 0x7d8d, 0x7d99, 0x7da1, 0x7dbf, 0x7db5, 0x7db9, + 0x7dbd, 0x7dc3, 0x7dc7, 0x7dc9, 0x7dd6, 0x7dda, 0x7ddf, 0x7de0, + 0x7de3, 0x7df4, 0x2d07, 0x7e0a, 0x7e02, 0x7e0d, 0x7e19, 0x7e1c, + 0x7e1d, 0x7e7b, 0x9f18, 0x7e80, 0x7e85, 0x7e9b, 0x7ea8, 0xf70c, + 0x7ebd, 0xf7b7, 0x7edf, 0x7ee7, 0x7eee, 0x7eff, 0x7f02, 0x2d77, + 0x7f03, 0x7f17, 0x7f19, 0x7f2f, 0x7f37, 0x7f3a, 0x7f3d, 0x7f41, + 0x7f45, 0x7f46, 0x7f53, 0x7f55, 0x7f58, 0xf8f1, 0x7f5d, 0xf902, + 0x7f69, 0xf91a, 0x7f6d, 0x7f70, 0x7f75, 0xf9b2, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +}; + +static const ucs4_t jisx0213_to_ucs_pagestart[] = { + 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1e00, 0x1f00, 0x2000, + 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, 0x2700, 0x2900, + 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500, 0x3600, 0x3700, + 0x3800, 0x3900, 0x3a00, 0x3b00, 0x3c00, 0x3d00, 0x3e00, 0x3f00, + 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, 0x4600, 0x4700, + 0x4800, 0x4900, 0x4a00, 0x4b00, 0x4c00, 0x4d00, 0x4e00, 0x4f00, + 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, 0x5600, 0x5700, + 0x5800, 0x5900, 0x5a00, 0x5b00, 0x5c00, 0x5d00, 0x5e00, 0x5f00, + 0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500, 0x6600, 0x6700, + 0x6800, 0x6900, 0x6a00, 0x6b00, 0x6c00, 0x6d00, 0x6e00, 0x6f00, + 0x7000, 0x7100, 0x7200, 0x7300, 0x7400, 0x7500, 0x7600, 0x7700, + 0x7800, 0x7900, 0x7a00, 0x7b00, 0x7c00, 0x7d00, 0x7e00, 0x7f00, + 0x8000, 0x8100, 0x8200, 0x8300, 0x8400, 0x8500, 0x8600, 0x8700, + 0x8800, 0x8900, 0x8a00, 0x8b00, 0x8c00, 0x8d00, 0x8e00, 0x8f00, + 0x9000, 0x9100, 0x9200, 0x9300, 0x9400, 0x9500, 0x9600, 0x9700, + 0x9800, 0x9900, 0x9a00, 0x9b00, 0x9c00, 0x9d00, 0x9e00, 0x9f00, + 0xf900, 0xfa00, 0xfe00, 0xff00, 0x20000, 0x20180, 0x20300, 0x20400, + 0x20500, 0x20600, 0x20700, 0x20800, 0x20900, 0x20a00, 0x20b00, 0x20d00, + 0x20e00, 0x20f00, 0x21200, 0x21300, 0x21400, 0x21500, 0x21600, 0x21700, + 0x21800, 0x21900, 0x21c00, 0x21d00, 0x21e00, 0x21f00, 0x22100, 0x22200, + 0x22300, 0x22600, 0x22800, 0x22900, 0x22a00, 0x22b00, 0x22c00, 0x22d00, + 0x23100, 0x23300, 0x23400, 0x23500, 0x23600, 0x23700, 0x23800, 0x23a00, + 0x23c00, 0x23d00, 0x23f00, 0x24000, 0x24100, 0x24300, 0x24600, 0x24700, + 0x24800, 0x24a00, 0x24b00, 0x24c00, 0x24d00, 0x24e00, 0x25000, 0x25100, + 0x25200, 0x25400, 0x25500, 0x25700, 0x25900, 0x25a00, 0x25b80, 0x25d00, + 0x25e00, 0x25f00, 0x26000, 0x26200, 0x26300, 0x26400, 0x26600, 0x26700, + 0x26800, 0x26900, 0x26a00, 0x26c00, 0x26e00, 0x26f00, 0x27080, 0x27380, + 0x27600, 0x27700, 0x27900, 0x27a00, 0x27b00, 0x27c00, 0x27d80, 0x27f00, + 0x28000, 0x28200, 0x28380, 0x28500, 0x28600, 0x28900, 0x28a00, 0x28b00, + 0x28d00, 0x28e00, 0x28f00, 0x29200, 0x29400, 0x29500, 0x29600, 0x29700, + 0x29800, 0x29a00, 0x29d00, 0x29e00, 0x29f00, 0x2a000, 0x2a100, 0x2a380, + 0x2a500, 0x2a600, +}; + +static const short jisx0213_from_ucs_level1[2715] = { + -1, -1, 0, 1, 2, 3, 4, 5, + -1, 6, 7, 8, 9, 10, 11, 12, + 13, 14, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 15, -1, -1, -1, -1, 16, -1, -1, + 17, 18, 19, -1, 20, 21, 22, 23, + 24, 25, 26, 27, 28, -1, 29, 30, + 31, 32, -1, 33, 34, 35, 36, 37, + 38, 39, -1, -1, 40, 41, -1, -1, + -1, -1, -1, -1, 42, -1, 43, 44, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 45, 46, 47, 48, -1, -1, -1, 49, + 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, -1, 70, 71, 72, + 73, 74, -1, 75, 76, 77, -1, -1, + -1, 78, -1, 79, 80, 81, 82, 83, + 84, -1, -1, 85, 86, 87, 88, 89, + 90, 91, 92, -1, -1, 93, 94, 95, + 96, 97, 98, -1, 99, 100, 101, 102, + 103, 104, -1, 105, 106, 107, -1, 108, + 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, -1, 120, 121, -1, 122, + 123, 124, 125, -1, -1, -1, 126, 127, + 128, -1, 129, -1, 130, -1, -1, 131, + 132, -1, -1, 133, 134, 135, -1, -1, + 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, -1, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, + 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, -1, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, -1, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 458, 459, -1, 460, + 461, 462, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 463, -1, -1, 464, 465, -1, 466, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 467, -1, 468, -1, -1, -1, 469, -1, + 470, -1, -1, -1, 471, 472, 473, 474, + -1, 475, -1, -1, 476, -1, -1, 477, + 478, -1, -1, -1, -1, 479, -1, -1, + 480, -1, 481, -1, -1, 482, 483, -1, + -1, -1, -1, 484, 485, -1, 486, -1, + -1, -1, -1, -1, -1, 487, -1, 488, + -1, 489, 490, -1, -1, 491, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 492, 493, -1, 494, 495, 496, -1, 497, + -1, 498, -1, -1, -1, -1, -1, 499, + -1, 500, 501, -1, 502, 503, -1, -1, + -1, -1, 504, -1, -1, -1, -1, 505, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 506, -1, -1, 507, 508, 509, 510, + 511, -1, -1, -1, 512, 513, -1, 514, + -1, -1, -1, -1, -1, 515, -1, -1, + 516, -1, -1, -1, 517, -1, 518, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 519, -1, -1, -1, -1, + -1, 520, 521, -1, -1, -1, 522, -1, + -1, -1, 523, -1, -1, 524, 525, -1, + 526, -1, -1, -1, -1, -1, -1, 527, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 528, 529, + -1, -1, -1, -1, -1, 530, -1, 531, + -1, 532, -1, 533, -1, 534, 535, 536, + 537, 538, -1, -1, 539, 540, -1, 541, + 542, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 543, -1, -1, -1, -1, -1, + -1, 544, -1, 545, 546, 547, -1, 548, + -1, -1, -1, -1, -1, 549, -1, -1, + -1, -1, 550, -1, 551, -1, -1, 552, + -1, -1, -1, -1, -1, -1, 553, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 554, -1, 555, -1, -1, -1, -1, 556, + -1, -1, 557, -1, -1, -1, -1, -1, + -1, 558, -1, -1, -1, 559, -1, -1, + 560, -1, -1, -1, 561, -1, -1, -1, + 562, 563, 564, -1, -1, -1, -1, -1, + -1, 565, -1, -1, 566, -1, 567, 568, + 569, 570, -1, -1, -1, -1, -1, -1, + 571, -1, 572, 573, 574, -1, 575, -1, + -1, -1, -1, -1, -1, 576, 577, -1, + -1, -1, -1, -1, -1, -1, -1, 578, + -1, -1, -1, 579, -1, -1, 580, -1, + -1, 581, -1, -1, -1, -1, 582, -1, + 583, 584, -1, 585, 586, 587, -1, 588, + 589, 590, -1, 591, -1, -1, -1, -1, + -1, 592, 593, -1, -1, 594, -1, -1, + 595, -1, -1, -1, -1, -1, -1, -1, + -1, 596, 597, -1, 598, -1, -1, -1, + -1, -1, -1, 599, -1, 600, -1, 601, + 602, 603, 604, 605, -1, -1, -1, -1, + 606, 607, -1, 608, -1, -1, -1, -1, + -1, 609, -1, -1, -1, -1, 610, 611, + -1, -1, -1, 612, 613, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 614, + 615, 616, -1, -1, -1, -1, -1, -1, + 617, -1, 618, -1, 619, 620, -1, -1, + -1, -1, -1, -1, -1, -1, 621, -1, + -1, -1, 622, -1, -1, -1, 623, 624, + -1, -1, 625, -1, -1, -1, 626, -1, + 627, -1, -1, -1, -1, -1, 628, -1, + -1, -1, 629, -1, -1, -1, -1, -1, + -1, 630, 631, 632, -1, -1, -1, 633, + 634, 635, -1, -1, -1, 636, -1, 637, + -1, -1, -1, 638, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 639, 640, -1, + 641, 642, 643, 644, -1, -1, -1, 645, + -1, -1, -1, -1, 646, 647, -1, 648, + 649, -1, 650, 651, 652, -1, -1, 653, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 654, -1, -1, -1, -1, -1, + -1, -1, 655, -1, -1, -1, -1, 656, + -1, 657, -1, 658, 659, 660, -1, -1, + -1, -1, -1, 661, -1, -1, -1, -1, + -1, 662, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 663, + 664, 665, 666, 667, -1, -1, -1, 668, + 669, -1, 670, 671, -1, -1, 672, -1, + -1, -1, -1, -1, -1, -1, 673, -1, + 674, -1, -1, -1, -1, -1, -1, 675, + 676, -1, 677, +}; + +static const unsigned short jisx0213_from_ucs_level2_data[] = { + /* 0x0080 */ + 0x2922, 0x2923, 0x2171, 0x2172, 0x2924, 0x2925, 0x2178, 0x212f, + 0x2926, 0x2927, 0x2928, 0x224c, 0x2929, 0x292a, 0x292b, 0x216b, + 0x215e, 0x292c, 0x292d, 0x212d, 0x2279, 0x292e, 0x292f, 0x2930, + 0x2931, 0x2932, 0x2933, 0x2934, 0x2935, 0x2936, + /* 0x00C0 */ + 0x2937, 0x2938, 0x2939, 0x293a, 0x293b, 0x293c, 0x293d, 0x293e, + 0x293f, 0x2940, 0x2941, 0x2942, 0x2943, 0x2944, 0x2945, 0x2946, + 0x2947, 0x2948, 0x2949, 0x294a, 0x294b, 0x294c, 0x294d, 0x215f, + 0x294e, 0x294f, 0x2950, 0x2951, 0x2952, 0x2953, 0x2954, 0x2955, + 0x2956, 0x2957, 0x2958, 0x2959, 0x295a, 0x295b, 0x29dc, 0x295d, + 0x295e, 0x295f, 0x2960, 0x2961, 0x2962, 0x2963, 0x2964, 0x2965, + 0x2966, 0x2967, 0x2968, 0x2969, 0x296a, 0x296b, 0x296c, 0x2160, + 0x296d, 0x296e, 0x296f, 0x2970, 0x2971, 0x2972, 0x2973, 0x2974, + /* 0x0100 */ + 0x2975, 0x297a, 0x2a3a, 0x2a49, 0x2a21, 0x2a2c, 0x2a3c, 0x2a4b, + 0x2a59, 0x2a5f, 0x2a3d, 0x2a4c, 0x2a40, 0x2a4f, 0x2a50, 0x2978, + 0x297d, 0x2a3e, 0x2a4d, 0x2a3f, 0x2a4e, 0x2a5a, 0x2a60, 0x2a5b, + 0x2a61, 0x2a7d, 0x2976, 0x297b, 0x2a5c, 0x2a62, 0x2a3b, 0x2a4a, + 0x2a24, 0x2a2f, + /* 0x0140 */ + 0x2a23, 0x2a2e, 0x2a41, 0x2a51, 0x2a42, 0x2a52, 0x2a7a, 0x2979, + 0x297e, 0x2a43, 0x2a53, 0x2b2b, 0x2b2a, 0x2a39, 0x2a48, 0x2a44, + 0x2a54, 0x2a25, 0x2a30, 0x2a5d, 0x2a63, 0x2a27, 0x2a33, 0x2a26, + 0x2a32, 0x2a47, 0x2a57, 0x2a28, 0x2a34, 0x2977, 0x297c, 0x2a5e, + 0x2a64, 0x2a45, 0x2a55, 0x2a46, 0x2a56, 0x2a29, 0x2a35, 0x2a2b, + 0x2a38, 0x2a2a, 0x2a37, + /* 0x0180 */ + 0x2b29, + /* 0x01C0 */ + 0x2b24, 0x286f, 0x2870, 0x2871, 0x2876, 0x2877, 0x2878, 0x2879, + 0x287a, 0x287b, 0x287c, 0x2874, 0x2875, 0x2b45, + /* 0x0240 */ + 0x2b33, 0x2b39, 0x2b3a, 0x2b25, 0x2bb8, 0x2b3f, 0x2a6e, 0x2b26, + 0x2b2e, 0x2bb0, 0x2bc3, 0x2b31, 0x2b32, 0x2a75, 0x2b28, 0x2a79, + 0x2b36, 0x2b3c, 0x2b22, 0x2b42, 0x2b2c, 0x2a6a, 0x2a74, 0x2a6b, + 0x2b34, 0x2a7b, 0x2a65, 0x2a76, 0x2a6f, 0x2b2f, 0x2a6c, 0x2b41, + 0x2a73, 0x2a70, 0x2a67, + /* 0x0280 */ + 0x2a7c, 0x2a71, 0x2a68, 0x2b27, 0x2a6d, 0x2b2d, 0x2b35, 0x2a66, + 0x2bb7, 0x2b3b, 0x2a78, 0x2a72, 0x2b40, 0x2a69, 0x2b21, 0x2a7e, + 0x2b23, 0x2a77, 0x2b3e, 0x2b3d, + /* 0x02C0 */ + 0x2a31, 0x2b53, 0x2b54, 0x2b55, 0x2b56, 0x2a22, 0x2a58, 0x2a2d, + 0x2a36, 0x2b71, 0x2be0, 0x2b61, 0x2b62, 0x2b63, 0x2be4, + /* 0x0300 */ + 0x2b5c, 0x2b5a, 0x2b5f, 0x2b7d, 0x2b5b, 0x2b57, 0x2b6d, 0x2b59, + 0x2b5e, 0x2b5d, 0x2b78, 0x2b79, 0x2b7e, 0x2b6a, 0x2b76, 0x2b77, + 0x2b6b, 0x2b6c, 0x2b72, 0x2b67, 0x2b6f, 0x2b7a, 0x2b68, 0x2b70, + 0x2b73, 0x2b75, 0x2b69, 0x2b7b, 0x2b7c, 0x2b74, 0x2b6e, + /* 0x0340 */ + 0x2b52, + /* 0x0380 */ + 0x2621, 0x2622, 0x2623, 0x2624, 0x2625, 0x2626, 0x2627, 0x2628, + 0x2629, 0x262a, 0x262b, 0x262c, 0x262d, 0x262e, 0x262f, 0x2630, + 0x2631, 0x2632, 0x2633, 0x2634, 0x2635, 0x2636, 0x2637, 0x2638, + 0x2641, 0x2642, 0x2643, 0x2644, 0x2645, 0x2646, 0x2647, 0x2648, + 0x2649, 0x264a, 0x264b, 0x264c, 0x264d, 0x264e, 0x264f, + /* 0x03C0 */ + 0x2650, 0x2651, 0x2659, 0x2652, 0x2653, 0x2654, 0x2655, 0x2656, + 0x2657, 0x2658, + /* 0x0400 */ + 0x2727, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2728, + 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, 0x272e, 0x272f, 0x2730, + 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, + 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, 0x273e, 0x273f, 0x2740, + 0x2741, 0x2751, 0x2752, 0x2753, 0x2754, 0x2755, 0x2756, 0x2758, + 0x2759, 0x275a, 0x275b, 0x275c, 0x275d, 0x275e, 0x275f, 0x2760, + 0x2761, + /* 0x0440 */ + 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2768, 0x2769, + 0x276a, 0x276b, 0x276c, 0x276d, 0x276e, 0x276f, 0x2770, 0x2771, + 0x2757, + /* 0x1E00 */ + 0x2872, 0x2873, + /* 0x1F40 */ + 0x2b46, 0x2b47, 0x2b50, 0x2b51, + /* 0x2000 */ + 0x213e, 0x237c, 0x213d, 0x2142, 0x2146, 0x2147, 0x2148, 0x2149, + 0x2277, 0x2278, 0x2340, 0x2145, 0x2144, 0x2273, 0x216c, 0x216d, + 0x2228, 0x286b, 0x2b58, + /* 0x2040 */ + 0x2c7e, 0x286c, 0x286d, 0x286e, 0x2c7d, + /* 0x2080 */ + 0x2921, + /* 0x2100 */ + 0x216e, 0x235d, 0x235f, 0x2d62, 0x2d64, 0x2360, 0x2272, 0x235c, + /* 0x2140 */ + 0x2778, 0x2779, 0x277a, 0x2d35, 0x2d36, 0x2d37, 0x2d38, 0x2d39, + 0x2d3a, 0x2d3b, 0x2d3c, 0x2d3d, 0x2d3e, 0x2d3f, 0x2d57, 0x2c35, + 0x2c36, 0x2c37, 0x2c38, 0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, + 0x2c3e, 0x2c3f, 0x2c40, + /* 0x2180 */ + 0x222b, 0x222c, 0x222a, 0x222d, 0x2271, 0x2327, 0x2325, 0x2326, + 0x2328, + /* 0x21C0 */ + 0x2329, 0x224d, 0x224e, 0x232b, 0x232c, 0x232a, 0x232d, + /* 0x2200 */ + 0x224f, 0x225f, 0x2250, 0x2247, 0x2260, 0x223a, 0x2246, 0x223b, + 0x215d, 0x235b, 0x2265, 0x2267, 0x2167, 0x2d78, 0x225c, 0x2254, + 0x2255, 0x224a, 0x224b, 0x2241, 0x2240, 0x2269, 0x226a, 0x2d73, + 0x2168, 0x2268, 0x2266, + /* 0x2240 */ + 0x226c, 0x226d, 0x226e, 0x2262, 0x2162, 0x2261, 0x226b, 0x2165, + 0x2166, 0x2263, 0x2264, 0x226f, 0x2270, + /* 0x2280 */ + 0x223e, 0x223f, 0x2242, 0x2243, 0x223c, 0x223d, 0x2244, 0x2245, + 0x2251, 0x2252, 0x2253, 0x225d, 0x2d79, + /* 0x22C0 */ + 0x2776, 0x2777, + /* 0x2300 */ + 0x2248, 0x2249, 0x225e, 0x277c, + /* 0x2380 */ + 0x2742, 0x2743, + /* 0x23C0 */ + 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274a, 0x274b, + 0x274c, 0x274d, 0x274e, 0x274f, 0x2750, 0x277e, + /* 0x2400 */ + 0x277d, + /* 0x2440 */ + 0x2d21, 0x2d22, 0x2d23, 0x2d24, 0x2d25, 0x2d26, 0x2d27, 0x2d28, + 0x2d29, 0x2d2a, 0x2d2b, 0x2d2c, 0x2d2d, 0x2d2e, 0x2d2f, 0x2d30, + 0x2d31, 0x2d32, 0x2d33, 0x2d34, + /* 0x24C0 */ + 0x2c41, 0x2c42, 0x2c43, 0x2c44, 0x2c45, 0x2c46, 0x2c47, 0x2c48, + 0x2c49, 0x2c4a, 0x2c4b, 0x2c4c, 0x2c4d, 0x2c4e, 0x2c4f, 0x2c50, + 0x2c51, 0x2c52, 0x2c53, 0x2c54, 0x2c55, 0x2c56, 0x2c57, 0x2c58, + 0x2c59, 0x2c5a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c2f, 0x2c30, + 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x265a, 0x265b, 0x265c, 0x265d, + 0x265e, 0x265f, 0x2660, 0x2661, 0x2662, 0x2663, + /* 0x2500 */ + 0x2821, 0x282c, 0x2822, 0x282d, 0x2823, 0x282e, 0x2824, 0x282f, + 0x2826, 0x2831, 0x2825, 0x2830, 0x2827, 0x283c, 0x2837, 0x2832, + 0x2829, 0x283e, 0x2839, 0x2834, 0x2828, 0x2838, 0x283d, 0x2833, + 0x282a, 0x283a, 0x283f, 0x2835, 0x282b, 0x283b, + /* 0x2540 */ + 0x2840, 0x2836, + /* 0x2580 */ + 0x2223, 0x2222, 0x266d, 0x2225, 0x2224, 0x2322, 0x2321, 0x2227, + 0x2226, + /* 0x25C0 */ + 0x2324, 0x2323, 0x2221, 0x217e, 0x233b, 0x217b, 0x217d, 0x217c, + 0x2867, 0x2868, 0x2869, 0x286a, 0x233f, 0x227e, + /* 0x2600 */ + 0x2668, 0x2669, 0x266a, 0x266b, 0x217a, 0x2179, 0x2667, 0x2664, + 0x2665, 0x2d7e, + /* 0x2640 */ + 0x216a, 0x2169, 0x263a, 0x263d, 0x263b, 0x2640, 0x2639, 0x263e, + 0x263c, 0x263f, 0x266c, 0x227d, 0x2276, 0x227b, 0x227c, 0x2275, + 0x227a, 0x2274, + /* 0x2700 */ + 0x277b, + /* 0x2740 */ + 0x2d7d, 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c27, + 0x2c28, 0x2c29, 0x2c2a, + /* 0x2900 */ + 0x232e, 0x232f, + /* 0x2980 */ + 0x233a, + /* 0x29C0 */ + 0x237d, 0x237e, + /* 0x3000 */ + 0x2121, 0x2122, 0x2123, 0x2137, 0x2139, 0x213a, 0x213b, 0x2152, + 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, + 0x215b, 0x2229, 0x222e, 0x214c, 0x214d, 0x225a, 0x225b, 0x2258, + 0x2259, 0x2141, 0x2d60, 0x2d61, 0x2666, 0x2233, 0x2234, 0x2235, + 0x2236, 0x2237, 0x233c, + /* 0x3040 */ + 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, + 0x2429, 0x242a, 0x24ab, 0x242c, 0x24ad, 0x242e, 0x24af, 0x2430, + 0x24b1, 0x2432, 0x24b3, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, + 0x2439, 0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, + 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, + 0x2449, 0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, + 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, + 0x2459, 0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, + /* 0x3080 */ + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, + 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, + 0x2470, 0x2471, 0x2472, 0x2473, 0x2474, 0x2475, 0x2476, 0x212b, + 0x212c, 0x2135, 0x2136, 0x2239, 0x237b, 0x2521, 0x2522, 0x2523, + 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x25ab, + 0x252c, 0x25ad, 0x252e, 0x25af, 0x2530, 0x25b1, 0x2532, 0x25b3, + 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x25bb, + 0x253c, 0x253d, 0x253e, 0x253f, + /* 0x30C0 */ + 0x2540, 0x2541, 0x2542, 0x2543, 0x25c4, 0x2545, 0x2546, 0x2547, + 0x25c8, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e, 0x254f, + 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, + 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, 0x255f, + 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, + 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, 0x256f, + 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2772, + 0x2773, 0x2774, 0x2775, 0x2126, 0x213c, 0x2133, 0x2134, 0x2238, + /* 0x31C0 */ + 0x266e, 0x266f, 0x2670, 0x2671, 0x2672, 0x2673, 0x2674, 0x26f5, + 0x2676, 0x2677, 0x2679, 0x267a, 0x267b, 0x267c, 0x267d, 0x267e, + /* 0x3200 */ + 0x2d6a, 0x2d6b, 0x2d6c, + /* 0x3240 */ + 0x2841, 0x2842, 0x2843, 0x2844, 0x2845, 0x2846, 0x2847, 0x2848, + 0x2849, 0x284a, 0x284b, 0x284c, 0x284d, 0x284e, 0x284f, + /* 0x3280 */ + 0x2d65, 0x2d66, 0x2d67, 0x2d68, 0x2d69, 0x2850, 0x2851, 0x2852, + 0x2853, 0x2854, 0x2855, 0x2856, 0x2857, 0x2858, 0x2859, 0x285a, + 0x285b, 0x285c, 0x285d, 0x285e, + /* 0x32C0 */ + 0x2c5b, 0x2c5c, 0x2c5d, 0x2c5e, 0x2c5f, 0x2c60, 0x2c61, 0x2c62, + 0x2c63, 0x2c64, 0x2c65, 0x2c66, 0x2c67, 0x2c68, 0x2c69, 0x2c6a, + 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c71, 0x2c70, 0x2c73, 0x2c72, + 0x2c6f, + /* 0x3300 */ + 0x2d46, 0x2d4a, 0x2d41, 0x2d44, 0x2d42, 0x2d4c, 0x2d4b, 0x2d45, + 0x2d4d, 0x2d47, 0x2d4f, + /* 0x3340 */ + 0x2d40, 0x2d4e, 0x2d43, 0x2d48, 0x2d49, 0x2d5f, 0x2d6f, 0x2d6e, + 0x2d6d, + /* 0x3380 */ + 0x2d53, 0x2d54, 0x2d50, 0x2d51, 0x2d52, 0x2d56, + /* 0x33C0 */ + 0x2d55, 0x235e, 0x2d63, + /* 0x3400 */ + 0x2e23, 0xa12d, 0xa132, 0xa133, + /* 0x3440 */ + 0xa15e, 0xa156, + /* 0x3480 */ + 0xa17e, 0x2e53, 0xa32b, + /* 0x34C0 */ + 0xf468, 0xa32f, 0x2e5b, + /* 0x3500 */ + 0xa348, + /* 0x3540 */ + 0xa35d, 0xa35e, 0xa361, 0xa367, + /* 0x3580 */ + 0xa423, 0xa426, + /* 0x35C0 */ + 0xa42f, 0xa438, 0xa442, + /* 0x3600 */ + 0xa44a, + /* 0x3640 */ + 0xa479, + /* 0x3680 */ + 0xa53f, 0xa543, 0xa541, + /* 0x36C0 */ + 0xa557, + /* 0x3740 */ + 0xa823, 0xa825, 0xa829, 0xa828, 0xa82c, + /* 0x3780 */ + 0x4f5f, + /* 0x37C0 */ + 0xa83e, 0x4f6f, 0xa856, 0xa859, 0xa85c, + /* 0x3800 */ + 0xa85e, 0xa86f, 0xa871, + /* 0x3840 */ + 0xa874, 0xa879, 0xa87b, + /* 0x38C0 */ + 0xac3b, + /* 0x3900 */ + 0xac46, 0xac4a, + /* 0x3940 */ + 0xac60, + /* 0x3A40 */ + 0xad5b, 0xad5f, + /* 0x3AC0 */ + 0xad71, 0xae36, 0xad7c, + /* 0x3B00 */ + 0xae2e, 0xae32, 0xae34, 0x7549, + /* 0x3B40 */ + 0xae6d, 0xae65, + /* 0x3B80 */ + 0xaf28, 0xaf29, 0xaf2c, 0xaf34, 0x757e, + /* 0x3BC0 */ + 0x7621, 0xaf48, 0xaf5d, + /* 0x3C00 */ + 0x763a, 0xaf77, + /* 0x3CC0 */ + 0xee3b, 0xee42, + /* 0x3D00 */ + 0xee71, 0xee7e, + /* 0x3D40 */ + 0xef40, + /* 0x3D80 */ + 0xef54, + /* 0x3DC0 */ + 0xef70, 0xef77, + /* 0x3E00 */ + 0xf028, 0x7766, + /* 0x3E40 */ + 0xf03f, 0xf041, 0xf042, + /* 0x3E80 */ + 0xf049, 0xf050, + /* 0x3F40 */ + 0xf134, 0x784d, 0xf146, 0xf148, + /* 0x3F80 */ + 0xf15c, + /* 0x3FC0 */ + 0xf167, 0xf16c, + /* 0x4000 */ + 0xf222, + /* 0x4040 */ + 0xf22d, + /* 0x4080 */ + 0xf239, + /* 0x4100 */ + 0xf264, + /* 0x4140 */ + 0xf274, 0xf277, 0xf27d, + /* 0x4180 */ + 0xf333, 0xf337, + /* 0x41C0 */ + 0xf347, 0xf34b, 0xf348, + /* 0x4200 */ + 0xf353, 0xf357, + /* 0x4240 */ + 0x796d, + /* 0x42C0 */ + 0xf42b, 0xf436, 0xf43b, + /* 0x4300 */ + 0xf44e, 0xf45d, + /* 0x4340 */ + 0xf461, + /* 0x43C0 */ + 0xf53e, 0xf542, + /* 0x4400 */ + 0xf548, 0xf54a, 0xf54c, 0xf54f, + /* 0x4440 */ + 0x7a59, 0x7a5a, 0xf56c, 0xf56e, + /* 0x4480 */ + 0xf577, 0xf635, 0xf632, + /* 0x44C0 */ + 0xf634, + /* 0x4500 */ + 0xf659, 0xf654, 0xf66d, + /* 0x4540 */ + 0xf66e, + /* 0x4580 */ + 0x7b51, 0xf74f, + /* 0x45C0 */ + 0xf76c, 0x7b60, + /* 0x4600 */ + 0xf824, + /* 0x4640 */ + 0xf83a, 0xf843, + /* 0x4680 */ + 0xf84e, 0xf853, + /* 0x4700 */ + 0xf86b, + /* 0x4740 */ + 0xf929, + /* 0x47C0 */ + 0xf93f, + /* 0x4800 */ + 0xf949, + /* 0x4840 */ + 0x7c4b, 0xf95c, + /* 0x4880 */ + 0xfa27, + /* 0x4980 */ + 0x7d58, + /* 0x49C0 */ + 0xfb6a, 0xfb70, + /* 0x4A00 */ + 0xfb75, 0xfb78, + /* 0x4A80 */ + 0xfc37, + /* 0x4B00 */ + 0xfc55, + /* 0x4BC0 */ + 0xfd26, 0xfd28, 0xfd2a, 0xfd31, + /* 0x4C00 */ + 0x7e3e, 0xfd3f, + /* 0x4CC0 */ + 0xfe2a, 0xfe2d, + /* 0x4D00 */ + 0xfe4b, + /* 0x4D40 */ + 0xfe60, + /* 0x4E00 */ + 0x306c, 0x437a, 0xa122, 0x3c37, 0x4b7c, 0x3e66, 0x3b30, 0x3e65, + 0x323c, 0x4954, 0x4d3f, 0xa123, 0x5022, 0x312f, 0xa124, 0x336e, + 0x5023, 0x4024, 0x5242, 0x3556, 0x4a3a, 0x3e67, 0x4e3e, 0x4a42, + 0x2e24, 0xa125, 0x5024, 0xa126, 0xf02e, 0x4366, 0xa127, 0x2e25, + 0x2e26, 0x5025, 0x367a, 0x5026, 0x345d, 0x4330, 0x3c67, 0x5027, + 0x5028, + /* 0x4E40 */ + 0xa128, 0x5029, 0x4735, 0x3557, 0xa129, 0xa12a, 0x4737, 0x4663, + 0x3843, 0x4b33, 0xa12c, 0x6949, 0x502a, 0x3e68, 0x502b, 0x3235, + 0xa12f, 0x3665, 0x3870, 0x4c69, 0x5626, 0xa130, 0x4d70, 0x467d, + 0x3425, + /* 0x4E80 */ + 0x3535, 0x502c, 0x502d, 0x4e3b, 0x4d3d, 0x4168, 0x502f, 0x3b76, + 0x4673, 0x2e27, 0x5032, 0x313e, 0x385f, 0x385e, 0x3066, 0x4f4b, + 0x4f4a, 0x3a33, 0x3021, 0xa131, 0x5033, 0x5034, 0x5035, 0x4b34, + 0x5036, 0x3872, 0x3067, 0x4b72, 0x357c, 0x357d, 0x357e, 0x4462, + 0x4e3c, 0x5037, 0x5038, 0x5039, 0xa134, 0x3f4d, 0xa135, 0xa137, + /* 0x4EC0 */ + 0x3d3a, 0x3f4e, 0x503e, 0xa138, 0x503c, 0x503d, 0x3558, 0xa139, + 0x3a23, 0x3270, 0x503b, 0x503a, 0x4a29, 0xa13a, 0x3b46, 0x3b45, + 0x423e, 0x503f, 0x4955, 0x4067, 0xa13c, 0x2138, 0x5040, 0x5042, + 0x2e28, 0x4265, 0x4e61, 0x304a, 0xa13b, 0x5041, 0x323e, 0x3644, + 0xa13d, 0x4367, 0xa13e, 0x376f, 0x5043, 0x4724, 0x2e29, 0x2e2a, + /* 0x4F00 */ + 0xa13f, 0x346b, 0x2e2b, 0x5044, 0x304b, 0x2e2c, 0x3860, 0x346c, + 0x497a, 0x4832, 0x3559, 0xa140, 0x3271, 0x5067, 0x4541, 0x476c, + 0x5046, 0x483c, 0x4e62, 0xa142, 0x3f2d, 0x3b47, 0x3b77, 0x3240, + 0xa143, + /* 0x4F40 */ + 0x4451, 0x4322, 0x504a, 0x2e2e, 0x2e2f, 0x304c, 0x4463, 0x3d3b, + 0x3a34, 0x4d24, 0x424e, 0xa144, 0x323f, 0x2e30, 0x5049, 0xa145, + 0x4d3e, 0x5045, 0x5047, 0x3a6e, 0x5048, 0x5524, 0x2e31, 0x2e2d, + 0xa141, 0x5050, 0x2e32, 0x2e33, 0x5053, 0x5051, 0x3242, 0x4a3b, + 0x504b, 0xa147, 0xa148, 0xa149, 0x504f, 0x3873, 0xa14a, 0x2e34, + 0x3b48, + /* 0x4F80 */ + 0xa14b, 0x3426, 0xa14c, 0x5054, 0x504c, 0x2e35, 0x4e63, 0x3b78, + 0x504d, 0x5052, 0xa14d, 0x2e36, 0x5055, 0x2e37, 0x504e, 0xa14e, + 0x3621, 0x304d, 0x3622, 0x3241, 0x5525, 0x4b79, 0x496e, 0x3874, + 0xa150, 0x3f2f, 0x4e37, 0xa151, 0x4a58, + /* 0x4FC0 */ + 0x3738, 0x4225, 0x3264, 0xa152, 0x2e39, 0x3d53, 0xa153, 0x5059, + 0xa154, 0x505e, 0x505c, 0xa155, 0x5057, 0x422f, 0x505a, 0x505d, + 0x505b, 0x4a5d, 0x5058, 0x2e3a, 0x3f2e, 0x4b73, 0x505f, 0x5060, + 0xa14f, 0x3d24, 0x506d, 0x2e21, 0xa157, 0x4750, 0x4936, 0x5068, + 0x4a70, 0x3236, 0x506c, + /* 0x5000 */ + 0xa158, 0x2e3b, 0x2e3c, 0x5066, 0x506f, 0x4152, 0x3844, 0x475c, + 0x2e3d, 0x6047, 0xa159, 0x506e, 0x455d, 0xa15a, 0x5063, 0x3876, + 0x2e3e, 0x3875, 0x5061, 0xa15b, 0xa15c, 0x3c5a, 0x5069, 0xa15d, + 0x4a6f, 0x434d, 0x5065, 0x3771, 0x2e3f, 0x5062, 0x506a, 0x5064, + 0x4e51, 0x506b, 0x4f41, 0x2e40, 0x3666, 0x3770, 0x2e42, + /* 0x5040 */ + 0x2e41, 0x2e43, 0xa15f, 0x5070, 0xa160, 0x5071, 0x5075, 0x304e, + 0xa161, 0x4a50, 0x5074, 0xa162, 0x5073, 0x5077, 0xa163, 0x5076, + 0x4464, 0xa164, 0x3772, 0xa165, 0xa166, 0x5078, 0xa167, 0x3c45, + 0x4226, 0x4465, 0x3676, 0x5079, 0x3536, + /* 0x5080 */ + 0x507a, 0x507c, 0xa169, 0x4b35, 0x3766, 0xa16a, 0xa16b, 0x2e44, + 0xa16c, 0xa16d, 0x3b31, 0x4877, 0x507b, 0xa16e, 0xa168, 0xa16f, + 0x3a45, 0x4d43, 0xa171, 0x507e, 0x5123, 0x507d, 0x3a44, 0x3d7d, + 0xa172, 0xa173, 0x3739, + /* 0x50C0 */ + 0x5124, 0xa174, 0x364f, 0xa175, 0x5121, 0x5122, 0x2e45, 0x462f, + 0xa178, 0x417c, 0x2e47, 0x3623, 0xa17a, 0x4b4d, 0x5125, 0xa17b, + 0x4e3d, 0x5126, 0xa17c, 0x5129, 0x5127, 0x2e48, 0x414e, 0xa17d, + 0x5128, 0x512a, 0x2e46, 0xa176, 0x512c, 0x512b, 0x4a48, + /* 0x5100 */ + 0x3537, 0x512e, 0x512f, 0x2e4b, 0x322f, 0x2e4a, 0xa321, 0x512d, + 0x2e4c, 0x3c74, 0x5132, 0x5131, 0x5130, 0xa323, 0x5056, 0x5133, + 0xa324, 0x2e4d, 0x3d7e, 0x5134, 0x4d25, 0x4c59, 0x2e4e, 0x5136, + 0x5135, 0x5138, 0x5137, 0x5139, + /* 0x5140 */ + 0x513a, 0x3074, 0x3835, 0x373b, 0x3d3c, 0x437b, 0x3624, 0x4068, + 0x3877, 0x2e4f, 0x396e, 0x513c, 0x4c48, 0x4546, 0x3b79, 0x513b, + 0x513d, 0x2e51, 0x2e52, 0x455e, 0x3375, 0xa326, 0x513e, 0x467e, + 0x4134, 0x5140, 0x5141, 0x482c, 0x3878, 0x4f3b, 0x5142, 0x3626, + 0xa328, 0x4a3c, 0x4236, 0x3671, 0x4535, 0xf474, 0x3773, + /* 0x5180 */ + 0x5143, 0x5144, 0xa329, 0x4662, 0x315f, 0x5147, 0x3a7d, 0xa32a, + 0x5146, 0x3a46, 0x5148, 0x666e, 0x5149, 0x4b41, 0x514a, 0x514b, + 0x514c, 0x3e69, 0xa32c, 0x3c4c, 0x2e54, 0x3427, 0x514f, 0xa32d, + 0x514d, 0x4c3d, 0x514e, 0x495a, 0x5150, 0x5151, 0x5152, 0x455f, + 0xa32e, 0x5156, 0x5154, 0x5155, 0x5153, 0x3a63, 0x5157, 0x4c6a, + 0x4e64, 0xa330, 0x5158, + /* 0x51C0 */ + 0x2e55, 0x4028, 0x5159, 0x3d5a, 0x515a, 0x2e56, 0x437c, 0x4e3f, + 0x4560, 0x5245, 0x515b, 0x7425, 0x3645, 0x2e57, 0x515c, 0x4b5e, + 0x2e58, 0x3d68, 0x427c, 0x515e, 0x4664, 0x515f, 0x2e59, 0x5160, + 0x332e, 0xa333, 0xa334, 0x5161, 0x3627, 0x464c, 0x317a, 0x3d50, + 0x4821, 0x5162, + /* 0x5200 */ + 0x4561, 0x2e5a, 0xa335, 0x3f4f, 0x5163, 0x4a2c, 0x405a, 0x3422, + 0x3429, 0x5164, 0x5166, 0x373a, 0xa336, 0x2e5c, 0x5165, 0x2e5d, + 0xa337, 0x4e73, 0x3d69, 0x483d, 0x4a4c, 0x5167, 0x4d78, 0x5168, + 0x5169, 0x457e, 0x516a, 0x4029, 0x3a7e, 0x3774, 0x516b, 0x3b49, + 0x396f, + /* 0x5240 */ + 0x4466, 0x516d, 0x4227, 0x2e5e, 0x3a6f, 0x516e, 0x516f, 0x4130, + 0x516c, 0x5171, 0xa339, 0x4b36, 0x2e5f, 0x3964, 0xa33a, 0x2f7e, + 0x5170, 0x2e60, 0x3775, 0x3a5e, 0x476d, 0x5174, 0x5172, 0xa33b, + 0x497b, 0x3e6a, 0x517b, 0x3364, 0x5175, 0x5173, 0x414f, 0xa33c, + 0x5177, 0x5176, + /* 0x5280 */ + 0xa33e, 0x3344, 0xa33d, 0x3760, 0x517c, 0x4e2d, 0x5178, 0x517d, + 0x517a, 0x2e61, 0x5179, 0xa340, 0x4e4f, 0x3879, 0x3243, 0x4e74, + 0xa342, 0xa343, 0x3d75, 0x4558, 0x3965, 0x5222, 0x5223, 0xa344, + 0x4e65, 0x4f2b, 0x5225, 0x387a, 0xa345, 0xa346, 0x5224, 0x332f, + /* 0x52C0 */ + 0x5226, 0x4b56, 0x443c, 0x4d26, 0x2e62, 0x4a59, 0xa347, 0x2e64, + 0x5227, 0x2e65, 0xa349, 0x7055, 0x4630, 0x2e66, 0x5228, 0x342a, + 0x4c33, 0x2e67, 0x3e21, 0x5229, 0x4a67, 0x522d, 0x402a, 0x522a, + 0x3650, 0x522b, 0x342b, 0x2e69, 0x372e, 0x522e, 0x522f, 0xa34b, + 0x5230, 0x5231, 0x3c5b, 0x2e6a, 0x387b, 0x4c5e, + /* 0x5300 */ + 0x2e6b, 0x4c68, 0x4677, 0x4a71, 0x5232, 0x2e6c, 0x5233, 0xa34c, + 0xa34d, 0x5235, 0x5237, 0x5236, 0x5238, 0x323d, 0x4b4c, 0x3a7c, + 0x5239, 0x2e6d, 0x4159, 0x3e22, 0x3629, 0x523a, 0xa34e, 0x485b, + 0x523b, 0x523c, 0x523d, 0xa34f, 0x523e, 0x4924, 0x3668, 0x3065, + 0xa350, 0x463f, + /* 0x5340 */ + 0x523f, 0x3d3d, 0xa351, 0x4069, 0x5241, 0x5240, 0x3e23, 0x3861, + 0x5243, 0x483e, 0x5244, 0x485c, 0x4234, 0x426e, 0x3628, 0x466e, + 0x4331, 0x476e, 0x4b4e, 0x5246, 0x406a, 0x2e6f, 0x2e70, 0x3735, + 0xa354, 0x5247, 0xa355, 0x5248, 0x312c, 0x3075, 0x346d, 0x4228, + 0x3551, 0x4d71, 0x524b, 0x3237, 0xa356, 0x524a, 0x2e71, 0x362a, + /* 0x5380 */ + 0x524c, 0x4c71, 0x2e72, 0x524d, 0x4e52, 0x387c, 0x2e73, 0x3836, + 0x524e, 0xa357, 0x5250, 0x524f, 0x3f5f, 0x3139, 0x315e, 0x5251, + 0x5252, 0x2e74, 0x3837, 0xa358, 0x5253, 0xa35a, 0x356e, + /* 0x53C0 */ + 0xa35b, 0x3b32, 0x5254, 0x4b74, 0x3a35, 0x355a, 0x4d27, 0x4150, + 0x483f, 0x3c7d, 0x3d47, 0xa35f, 0x3c68, 0x3c75, 0x3d76, 0xa360, + 0x4840, 0x5257, 0x3143, 0x4151, 0x387d, 0x3845, 0x3667, 0x525b, + 0x4321, 0x427e, 0x362b, 0x3e24, 0x525c, 0x525a, 0x3244, 0x4266, + 0x3c38, 0x3b4b, 0x3126, 0xa362, 0xa363, 0x3370, 0x3966, 0x3b4a, + 0x525d, + /* 0x5400 */ + 0x525e, 0x3549, 0x3346, 0x3967, 0x3548, 0x445f, 0x3125, 0x4631, + 0x4c3e, 0x3921, 0x4d79, 0x4547, 0x387e, 0x2e75, 0x372f, 0x5267, + 0x4f7e, 0x3663, 0x4b4a, 0xa365, 0x485d, 0x2e76, 0xa366, 0x5266, + 0x345e, 0x5261, 0x5262, 0x5264, 0x5265, 0x355b, 0x3f61, 0x4a2d, + 0x5263, 0x525f, 0x3863, + /* 0x5440 */ + 0x5260, 0x4f24, 0xa368, 0x4a72, 0x4468, 0x3862, 0x3970, 0x2e77, + 0x5268, 0x465d, 0xa364, 0x526c, 0xa369, 0xa36a, 0x3c7e, 0x3c76, + 0x2e79, 0xa36b, 0x526f, 0x526d, 0x4c23, 0x2e7a, 0x526a, 0x5273, + 0x526e, 0x5271, 0x3846, 0x4c3f, 0x2e7b, + /* 0x5480 */ + 0x5272, 0x5274, 0x5276, 0x2e7c, 0xa36c, 0x3a70, 0x4f42, 0xa36d, + 0x526b, 0x5269, 0x5275, 0x5270, 0xa36e, 0x2e7d, 0x2e78, 0xa36f, + 0x2e7e, 0x5278, 0x5323, 0x527a, 0xa370, 0x527e, 0x2f21, 0x5321, + 0x527b, 0xa371, 0xa372, 0x533e, 0x3a69, 0x3331, 0xa373, 0x5279, + 0xa374, 0x5325, 0x3076, 0x5324, 0xa375, + /* 0x54C0 */ + 0x3025, 0x494a, 0x5322, 0xa376, 0x527c, 0x2f22, 0x5277, 0x527d, + 0x3a48, 0x5326, 0x3077, 0x532f, 0x5327, 0x5328, 0x3e25, 0x4b69, + 0xa378, 0x532d, 0x532c, 0xa379, 0xa37a, 0x452f, 0xa37b, 0x532e, + 0x532b, 0x2f23, + /* 0x5500 */ + 0xa37c, 0xa37d, 0x3134, 0x3a36, 0x3f30, 0xa37e, 0x2f24, 0x5329, + 0x4562, 0x532a, 0x3022, 0x2f25, 0x5334, 0x4d23, 0x3e27, 0x533a, + 0x2f26, 0x5339, 0x5330, 0xa421, 0x4243, + /* 0x5540 */ + 0x5331, 0xa422, 0x426f, 0x5336, 0x3e26, 0xa424, 0xa425, 0x5333, + 0x4c64, 0x2f27, 0x373c, 0x5337, 0x5338, 0x5335, 0x533b, 0x2f28, + 0xa427, 0xa428, 0x5332, 0xa429, 0x5341, 0x5346, 0xa42b, 0x5342, + /* 0x5580 */ + 0x533d, 0x2f29, 0xa42c, 0x5347, 0x4131, 0x2f2a, 0x5349, 0xa42d, + 0x3922, 0x533f, 0x437d, 0x2f2b, 0xa42e, 0x5343, 0x533c, 0x342d, + 0x346e, 0x3365, 0x5344, 0x5340, 0x3776, 0x534a, 0x5348, 0x4153, + 0x354a, 0x362c, 0x2f2d, 0x5345, 0x3674, 0x3144, 0xa433, + /* 0x55C0 */ + 0x534e, 0x534c, 0x5427, 0xa434, 0xa435, 0x2f2e, 0xa436, 0xa430, + 0x5351, 0x534b, 0x534f, 0xa437, 0x534d, 0xa439, 0x3b4c, 0x5350, + 0xa43b, 0x5353, 0x5358, 0x5356, 0x5355, + /* 0x5600 */ + 0x4332, 0xa43e, 0x2f30, 0x3245, 0x2f31, 0xa43f, 0x5352, 0x5354, + 0x3e28, 0x3133, 0x5357, 0xa43c, 0x325e, 0x5362, 0xa440, 0x3e7c, + 0x535e, 0x535c, 0x535d, 0xa441, 0x535f, 0x2f32, 0xa443, 0xa444, + /* 0x5640 */ + 0xa445, 0x313d, 0xa446, 0x2f33, 0x4139, 0x5359, 0x535a, 0x7427, + 0x337a, 0xa447, 0xa448, 0x5361, 0x2f35, 0x346f, 0x5364, 0x5360, + 0x5363, 0xa449, 0x2f37, 0x2f38, 0x2f39, 0x4a2e, 0x2f34, 0x4655, + 0x4838, + /* 0x5680 */ + 0x5366, 0x5365, 0x3345, 0xa44b, 0x5367, 0xa44c, 0x536a, 0x5369, + 0xa44d, 0x2f3a, 0xa44e, 0xa44f, 0x2f3b, 0x5368, 0x4739, 0x536b, + 0xa450, 0x2f3c, 0x2f3d, 0xa451, 0x536c, 0xa452, 0x2f3e, 0x536e, + 0x536d, 0x5370, + /* 0x56C0 */ + 0x5373, 0x5371, 0x536f, 0x5372, 0xa453, 0x5374, 0x2f3f, 0x2f40, + 0xa454, 0x5375, 0x5376, 0x5377, 0x5378, 0x5145, 0x3c7c, 0x3b4d, + 0x3273, 0xa455, 0x3078, 0x4344, 0xa456, 0x5379, 0x3a24, 0x304f, + 0x3f5e, 0xa457, 0xa458, 0x537a, 0x3847, 0x3971, 0x537c, + /* 0x5700 */ + 0x537b, 0x4a60, 0x537d, 0x5421, 0x537e, 0x2f41, 0x5422, 0x5423, + 0x3777, 0x3160, 0x5424, 0xa45a, 0x5426, 0x5425, 0x5428, 0x455a, + 0x2f43, 0xa45b, 0x5429, 0x3035, 0x3a5f, 0xa45d, 0x373d, 0x2f44, + 0x434f, 0x2f45, 0x2f46, 0x542a, 0x542b, 0x542d, + /* 0x5740 */ + 0x542e, 0x3a64, 0xa45f, 0xa460, 0x3651, 0x4b37, 0xa461, 0xa462, + 0x542c, 0x542f, 0x3a41, 0x3923, 0x5433, 0x3a25, 0x4333, 0xa464, + 0x5430, 0x445a, 0xa465, 0x2f47, 0xa466, 0xa467, 0xa468, 0x2f48, + 0xa469, 0x2f49, 0x5434, + /* 0x5780 */ + 0x3f62, 0x5432, 0x5435, 0x373f, 0x5436, 0xa46d, 0x2f4a, 0xa46e, + 0xa46f, 0x5437, 0x3924, 0x3340, 0x5439, 0xa470, 0x543a, 0xa46c, + 0x543b, 0x5438, 0x2f4d, + /* 0x57C0 */ + 0x5431, 0x543c, 0x543d, 0x2f4e, 0x2f4f, 0x4b64, 0xa473, 0x3e6b, + 0x2f50, 0x543f, 0x5440, 0x543e, 0x5442, 0xa471, 0x4738, 0xa476, + 0x3068, 0x4956, 0x5443, 0x2f51, 0xa477, 0x2f52, 0xa478, 0x3e7d, + 0x2f53, 0x2f54, 0x3c39, 0xa47a, 0x475d, 0x3470, 0xa47b, 0x3a6b, + 0xa47c, 0x2f55, + /* 0x5800 */ + 0x4b59, 0x4632, 0xa47d, 0x3778, 0x424f, 0x2f56, 0x5441, 0x5444, + 0x4244, 0x5445, 0x5446, 0xa47e, 0xa521, 0x5448, 0x4469, 0xa522, + 0x342e, 0x7421, 0x3161, 0x4a73, 0xa523, 0x3e6c, 0x4548, 0xa524, + 0x3a66, 0x544e, + /* 0x5840 */ + 0x4a3d, 0x4e5d, 0xa526, 0x3274, 0x544a, 0xa527, 0x413a, 0x544d, + 0x4563, 0x4549, 0x4564, 0x4839, 0x444d, 0x3a49, 0x2f58, 0x5449, + 0x2f59, 0xa528, 0x3176, 0x4536, 0x544b, 0x5447, 0x3f50, 0x544f, + 0x2f5b, 0x3d4e, + /* 0x5880 */ + 0x362d, 0x5450, 0x2f5c, 0xa529, 0xa52a, 0xa52b, 0xa52c, 0xa52d, + 0x4a68, 0xa52e, 0x417d, 0x4446, 0xa52f, 0x2f5d, 0x5452, 0x4b4f, + 0x2f5f, 0xa530, 0x5453, 0x5458, 0xa531, 0x4a2f, 0x5457, 0x5451, + 0x5454, 0x5456, 0x3a26, + /* 0x58C0 */ + 0x4a49, 0xa533, 0x5459, 0x4345, 0x3275, 0x3e6d, 0xa534, 0x2f62, + 0x545b, 0x2f61, 0x545a, 0x2f63, 0x3968, 0x545c, 0x545e, 0x545d, + 0x2f64, 0x5460, 0x5455, 0x5462, 0x2f65, 0xa535, 0x5461, 0x545f, + 0x2f66, 0x3b4e, 0x3f51, 0x4154, 0x5463, 0x403c, 0x306d, 0x4764, + 0xa536, 0xa537, 0x445b, 0x5465, 0x5464, 0x5466, 0x5467, 0x5468, + /* 0x5900 */ + 0x5469, 0xa538, 0xa539, 0x4a51, 0x546a, 0xa53a, 0x2f67, 0xa53b, + 0x3246, 0x546b, 0xa53c, 0x4d3c, 0x3330, 0x5249, 0x3d48, 0x423f, + 0x546c, 0x4c6b, 0x4c34, 0xa53d, 0x546e, 0x4267, 0x4537, 0x4240, + 0x4957, 0x546f, 0x5470, 0x317b, 0x3c3a, 0x5471, 0x3050, 0x5472, + 0xa540, 0x5473, + /* 0x5940 */ + 0x3162, 0xa542, 0x3471, 0x4660, 0x4a74, 0x5477, 0x4155, 0x5476, + 0x3740, 0x4b5b, 0x5475, 0x4565, 0x5479, 0x5478, 0xa545, 0x2f69, + 0xa546, 0x547b, 0x547a, 0x317c, 0x547c, 0x3e29, 0x547e, 0x4325, + 0x547d, 0x2f6a, 0x4a33, 0x3d77, 0x455b, 0xa548, 0xa549, 0x5521, + 0xa54a, 0x3925, + /* 0x5980 */ + 0x5522, 0x4721, 0x485e, 0x4c51, 0x4725, 0x2f6b, 0x552b, 0x2f6c, + 0x3538, 0x4d45, 0x4c2f, 0x562c, 0x5523, 0xa54b, 0x5526, 0x2f6d, + 0x4245, 0x4b38, 0x454a, 0xa54c, 0x5527, 0x4b65, 0x3a4a, 0xa54d, + 0x3e2a, + /* 0x59C0 */ + 0x2f6e, 0x5528, 0xa54e, 0x3b50, 0x3b4f, 0xa54f, 0x3039, 0x3848, + 0x2f6f, 0x402b, 0x3051, 0x552c, 0x552d, 0x552a, 0x2f70, 0xa550, + 0xa551, 0xa552, 0x3138, 0x342f, 0xa553, 0x5529, 0x4c45, 0x4931, + 0xa554, 0x3028, 0x7e7a, 0x3079, 0x3b51, + /* 0x5A00 */ + 0x3052, 0x3023, 0x5532, 0xa558, 0xa559, 0x5530, 0x2f71, 0xa55a, + 0x4c3c, 0x5533, 0x5531, 0x552f, 0x3f31, 0x2f72, 0x552e, 0xa55b, + 0x4a5a, 0xa55c, 0x3864, 0x5537, 0x5538, 0x3e2b, + /* 0x5A40 */ + 0x5534, 0x4f2c, 0x474c, 0x5536, 0xa55d, 0x3a27, 0x5539, 0xa55e, + 0x4958, 0x2f73, 0x553a, 0x5535, 0x2f74, 0x2f75, 0xa55f, 0x2f76, + 0x4c3b, + /* 0x5A80 */ + 0x2f77, 0xa560, 0x475e, 0x553b, 0x4932, 0xa561, 0x2f78, 0xa562, + 0xa563, 0xa564, 0x2f79, 0xa565, 0xa566, 0xa567, 0xa568, 0x553c, + 0x5540, 0x553d, 0xa569, + /* 0x5AC0 */ + 0x3247, 0x553f, 0x2f7a, 0x3c3b, 0x553e, 0x3779, 0x554c, 0x5545, + 0x5542, 0xa56a, 0xa56b, 0xa56c, 0x4364, 0x5541, 0xa56d, 0x5543, + 0x5544, 0xa56f, 0xa56e, 0xa570, 0x5546, 0x5547, + /* 0x5B00 */ + 0xa571, 0xa572, 0x3472, 0x5549, 0x5548, 0x554a, 0xa573, 0x2f7c, + 0x3e6e, 0x2f7d, 0x554d, 0x445c, 0xa575, 0x3145, 0x554b, 0xa574, + 0x554e, 0x554f, + /* 0x5B40 */ + 0x5552, 0x4f55, 0x5550, 0x5551, 0xa576, 0x3b52, 0x5553, 0xa577, + 0x3926, 0x5554, 0x4f56, 0x3b7a, 0x4238, 0x5555, 0x5556, 0x3b5a, + 0x3927, 0x4c52, 0x3528, 0x3849, 0x5557, 0x3358, 0xa578, 0x5558, + 0x4239, 0xa579, 0x5559, 0x5623, 0x555a, 0x555b, 0x555c, 0x555e, + 0xa57a, 0x4f57, 0xa57b, + /* 0x5B80 */ + 0x555f, 0xa57c, 0x5560, 0xa57d, 0x4270, 0x3127, 0x3c69, 0x3042, + 0x4157, 0x3430, 0x3c35, 0x3928, 0x4f58, 0x4566, 0xa821, 0x3d21, + 0x3431, 0x4368, 0x446a, 0x3038, 0x3539, 0x4a75, 0x3c42, 0x3552, + 0x406b, 0x3c3c, 0x4d28, 0x5561, 0xa822, 0x355c, 0x3a4b, 0x3332, + 0x3163, 0x3e2c, 0x3248, 0x5562, 0x4d46, 0x3d49, + /* 0x5BC0 */ + 0xa824, 0x3c64, 0x5563, 0x3473, 0x4652, 0x4c29, 0x5564, 0x5565, + 0x4959, 0xa826, 0x5567, 0x3428, 0x3677, 0x5566, 0xa827, 0x4f59, + 0x3432, 0x3f32, 0x556b, 0x3b21, 0x3249, 0x556a, 0x5568, 0x556c, + 0x5569, 0x472b, 0x5c4d, 0x3f33, 0x556d, 0x4f5a, 0x4e40, 0x556e, + 0xa82a, 0x5570, 0x437e, 0x556f, 0x4023, 0x3b7b, 0xa82b, 0x4250, + 0x3c77, + /* 0x5C00 */ + 0x4975, 0x406c, 0xa82d, 0x3c4d, 0x5571, 0x3e2d, 0x5572, 0x5573, + 0x3053, 0x423a, 0x3f52, 0x5574, 0x4633, 0x3e2e, 0x3e2f, 0x4f5b, + 0x5575, 0x406d, 0x3e30, 0x4f5c, 0x5576, 0x5577, 0x4f5d, 0x4c60, + 0x5578, 0xa82e, 0x4f5e, 0x3646, 0xa82f, 0x3d22, 0x5579, 0x557a, + 0x3c5c, 0x3f2c, 0x4674, 0x3f54, 0x4878, 0x4722, + /* 0x5C40 */ + 0x3649, 0x557b, 0x356f, 0x557c, 0x367e, 0x464f, 0x3230, 0x3b53, + 0x557d, 0x5622, 0x5621, 0x367d, 0x557e, 0x4538, 0x7e7b, 0x4230, + 0xa831, 0x454b, 0x3c48, 0x4f60, 0xa832, 0x4158, 0x4d7a, 0xa833, + 0xa834, 0xa835, 0x5624, 0x5625, 0x4656, 0xa836, 0x3b33, 0x5627, + 0x5628, 0x4f64, 0xa839, + /* 0x5C80 */ + 0xa83c, 0xa83d, 0x5629, 0x4f65, 0x3474, 0x562a, 0x562b, 0x4f66, + 0xa841, 0x322c, 0xa842, 0x4f67, 0xa843, 0xa844, 0x413b, 0x3464, + 0x4f68, 0x562d, 0x4c28, 0xa846, 0x4252, 0x3359, 0xa847, 0x562f, + 0x5631, 0x345f, 0x4f69, 0x562e, 0x5630, 0x5633, + /* 0x5CC0 */ + 0x5632, 0x5634, 0xa849, 0x4f6a, 0x4f6b, 0x4f6c, 0x5635, 0x463d, + 0x362e, 0x3265, 0x5636, 0x563b, 0x5639, 0x4a77, 0x4a76, 0x4f6d, + 0x4567, 0x5638, 0x3d54, 0x5637, + /* 0x5D00 */ + 0xa84c, 0x3f72, 0x563c, 0x4f70, 0x3a6a, 0xa84d, 0x5642, 0x5643, + 0x563d, 0x3333, 0x563e, 0x5647, 0x5646, 0x5645, 0x5641, 0xa84f, + 0x5640, 0xa850, 0x5644, 0xa851, 0xa852, 0x4f71, 0x4a78, 0xa84e, + 0xa853, 0xa854, + /* 0x5D40 */ + 0xa855, 0x4f73, 0x4f74, 0x4f76, 0x564b, 0x5648, 0x564a, 0x4d72, + 0x5649, 0x4f75, 0x563f, 0xa857, 0x3f73, 0xa858, 0x564c, 0x4f77, + 0x3a37, 0xa85a, 0x564d, 0x564e, + /* 0x5D80 */ + 0x4f78, 0x5651, 0x5650, 0x564f, 0xa85d, 0x4568, 0x563a, 0x5657, + 0xa85f, 0xa860, 0xa861, 0xa862, 0x5653, 0x4f79, 0x5652, 0x4f7a, + 0x4f7b, 0x5654, 0x5655, 0xa863, 0xa864, 0xa865, 0x5658, 0x4f7c, + 0xa867, 0x4e66, 0x5659, 0x5656, + /* 0x5DC0 */ + 0x565a, 0x4f7d, 0x3460, 0x565b, 0xa868, 0x565d, 0x565c, 0x565e, + 0xa869, 0xa86a, 0x565f, 0x406e, 0x3d23, 0xa86b, 0x3d64, 0x7428, + 0x4163, 0xa86d, 0x3929, 0x3a38, 0x392a, 0x3570, 0xa86e, 0x5660, + 0x3a39, 0x384a, 0x5661, 0x4c26, 0x4743, 0x5662, 0x392b, 0x342c, + 0x4327, 0x3652, + /* 0x5E00 */ + 0xa870, 0x3b54, 0x495b, 0x4841, 0x5663, 0x3475, 0x5666, 0xa872, + 0x7429, 0xa873, 0x4421, 0x742a, 0x5665, 0x5664, 0x5667, 0x446b, + 0xa875, 0x3f63, 0x3b55, 0x404a, 0xa876, 0x4253, 0x3522, 0x4422, + 0x5668, 0x5669, 0x3e6f, 0x4b39, 0xa877, + /* 0x5E40 */ + 0x566c, 0x566b, 0x566a, 0x497d, 0x5673, 0xa878, 0x4b5a, 0x566d, + 0x566f, 0x4b6b, 0xa87a, 0x566e, 0x742b, 0x742c, 0x5670, 0x4828, + 0x5671, 0x4a3e, 0x5672, 0xa87c, 0xa87d, 0xa87e, 0xac21, 0x3433, + 0x4a3f, 0x472f, 0x5674, 0x5675, 0x7e7c, 0x392c, 0x3434, 0x5676, + 0x3838, 0x4d44, 0x4d29, 0x3476, 0x5678, + /* 0x5E80 */ + 0x4423, 0x392d, 0x3e31, 0x485f, 0x3e32, 0x3d78, 0x446c, 0x4a79, + 0x4539, 0x392e, 0x495c, 0x5679, 0xac23, 0x4559, 0x3a42, 0xac24, + 0x384b, 0xac25, 0x446d, 0x3043, 0x3d6e, 0x392f, 0x4d47, 0xac26, + 0x742d, 0xac27, + /* 0x5EC0 */ + 0x567a, 0x567b, 0x4751, 0xac28, 0x567c, 0x4e77, 0x4f2d, 0x742f, + 0x567e, 0x567d, 0xac29, 0x3347, 0x5721, 0xac2a, 0x5724, 0x5725, + 0x5723, 0x4940, 0x3e33, 0x5727, 0x5726, 0x5722, 0x5728, 0x5729, + 0x572a, 0x572d, 0x572b, 0x572c, 0x572e, 0x3164, 0x446e, 0x572f, + 0x7430, 0x377a, 0x3276, 0x4736, 0xac2c, 0x5730, 0x467b, + /* 0x5F00 */ + 0x7431, 0x4a5b, 0x7432, 0x5731, 0x4f2e, 0x7433, 0xac2d, 0x5732, + 0x4a40, 0x5735, 0x5021, 0x5031, 0xac2e, 0x3c30, 0x4675, 0x5736, + 0x355d, 0x4424, 0x307a, 0x5737, 0x4a26, 0x3930, 0x4350, 0xac2f, + 0x7434, 0xac31, 0x446f, 0x7435, 0x4c6f, 0x3839, 0x384c, 0x5738, + 0x5739, 0x573f, 0x3c65, 0x7436, 0x4425, 0x7437, 0x362f, 0x573a, + 0x492b, 0x7438, 0x4346, + /* 0x5F40 */ + 0x7439, 0x573b, 0x743a, 0xac32, 0x573c, 0x3630, 0x573d, 0x573e, + 0x5740, 0x4576, 0x743b, 0x5741, 0x5742, 0x743c, 0x5743, 0x5734, + 0x5733, 0x5744, 0x3741, 0xac33, 0x743d, 0x4927, 0x743e, 0x3a4c, + 0x4937, 0x4426, 0x494b, 0x5745, 0x3e34, 0x3146, 0xac34, 0x5746, + 0x5747, 0x4c72, 0x4860, 0x743f, 0xac35, 0x574a, + /* 0x5F80 */ + 0x317d, 0x402c, 0x5749, 0x5748, 0x3742, 0x4254, 0x574e, 0x574c, + 0x7440, 0x574b, 0x4e27, 0x3865, 0xac36, 0x3d79, 0x574d, 0x454c, + 0x3d3e, 0x4640, 0x5751, 0x5750, 0x7441, 0x574f, 0x5752, 0x3866, + 0xac37, 0xac38, 0x7442, 0x5753, 0x497c, 0x3d5b, 0x5754, 0x4879, + 0x7443, 0x4641, 0x4427, 0x7444, 0x7445, 0xac39, 0x4530, 0x5755, + 0x352b, + /* 0x5FC0 */ + 0x3f34, 0xac3a, 0x492c, 0xac3c, 0x7446, 0xac3d, 0x3477, 0x4726, + 0xac3e, 0xac3f, 0xac40, 0x5756, 0x3b56, 0x4b3a, 0x4b3b, 0x317e, + 0x575b, 0x7447, 0x4369, 0x7448, 0xac41, 0x5758, 0x7449, 0x3277, + 0xac42, 0xac43, 0x582d, 0x575a, 0xac44, 0x4730, 0x5759, 0x5757, + 0xac45, 0x397a, 0x575d, + /* 0x6000 */ + 0x744a, 0x5763, 0x5769, 0x5761, 0x455c, 0x744b, 0x5766, 0x495d, + 0xac47, 0x744c, 0x5760, 0x5765, 0x4e67, 0x3b57, 0x4255, 0x575e, + 0xac48, 0xac49, 0x355e, 0x5768, 0x402d, 0x3165, 0x5762, 0x3278, + 0x5767, 0x3631, 0x5764, 0x744d, 0x744e, 0x576a, + /* 0x6040 */ + 0x576c, 0x5776, 0x5774, 0x5771, 0x744f, 0x5770, 0x4e78, 0xac4b, + 0x5772, 0x3632, 0x3931, 0x3d7a, 0x5779, 0x576b, 0x576f, 0x575f, + 0x327a, 0x5773, 0x5775, 0x4351, 0x3a28, 0x3238, 0x576d, 0x5778, + 0x5777, 0x3633, 0x4229, 0x3366, 0x3743, 0x576e, 0xac4c, + /* 0x6080 */ + 0x577a, 0x577d, 0x5821, 0x3c3d, 0xac4d, 0x5827, 0x4470, 0x577b, + 0x5825, 0x3279, 0xac4e, 0x5823, 0x5824, 0x577e, 0x5822, 0x7451, + 0x7452, 0x3867, 0x4d2a, 0x3435, 0x3159, 0x5826, 0xac4f, 0x473a, + 0x302d, 0xac51, 0xac52, 0x4861, 0x575c, 0x582c, 0x5830, 0x4c65, + 0x5829, 0x4569, 0x582e, 0xac53, + /* 0x60C0 */ + 0x3e70, 0x582f, 0x4657, 0xac54, 0x7453, 0x4f47, 0x582b, 0x7454, + 0x7455, 0x5831, 0xac55, 0x397b, 0xac56, 0x404b, 0x7456, 0x3054, + 0x582a, 0x5828, 0x415a, 0x577c, 0x3b34, 0xac57, 0x4246, 0x583d, + 0xac58, 0x415b, 0x5838, 0xac59, 0x5835, 0x5836, 0x7457, 0x3c66, + 0x5839, 0x583c, + /* 0x6100 */ + 0x5837, 0x3d25, 0x583a, 0x5834, 0x4c7c, 0x4c7b, 0x583e, 0x583f, + 0x3055, 0xac5a, 0xac5b, 0xac5c, 0x5833, 0xac5d, 0x3672, 0x3026, + 0x7458, 0xac5e, 0x3436, 0x583b, 0x5843, 0x5842, 0x7459, 0x5847, + 0x745a, 0x5848, 0x745b, 0xac5f, 0x5846, 0x5849, 0x5841, 0x5845, + /* 0x6140 */ + 0xac61, 0x584a, 0x584b, 0xac62, 0x5840, 0x3b7c, 0x5844, 0x4256, + 0x3932, 0x5832, 0x3f35, 0x5858, 0x4a69, 0x584e, 0x584f, 0x5850, + 0x5857, 0x5856, 0xac63, 0x4b7d, 0x3437, 0x5854, 0x3745, 0x3334, + 0x5851, 0x4e38, 0x5853, 0x3056, 0x5855, 0x584c, 0x5852, 0x5859, + 0x3744, 0x584d, 0xac64, 0x4d5d, + /* 0x6180 */ + 0x4d2b, 0x585c, 0x5860, 0x745d, 0x417e, 0x4e79, 0x5861, 0xac66, + 0xac67, 0x585e, 0x585b, 0xac68, 0xac69, 0x585a, 0x585f, 0x4a30, + 0xac6a, 0x4634, 0xac6b, 0x3746, 0x5862, 0x585d, 0xac6c, 0x5863, + 0x377b, 0x3231, 0x7460, 0x586b, 0x745f, 0x3438, + /* 0x61C0 */ + 0x5869, 0x586a, 0x3a29, 0x5868, 0x5866, 0x5865, 0x586c, 0x5864, + 0x586e, 0x327b, 0xac6e, 0xac6f, 0xac70, 0x5870, 0x586f, 0x4428, + 0x5873, 0xac71, 0x5871, 0x5867, 0x377c, 0x5872, 0x5876, 0x5875, + 0x5877, 0x5874, + /* 0x6200 */ + 0x5878, 0x5879, 0x587a, 0x4a6a, 0x587c, 0x587b, 0x3d3f, 0x402e, + 0x3266, 0x327c, 0x587d, 0xac73, 0x303f, 0x404c, 0x587e, 0x6c43, + 0x5921, 0x3761, 0x5922, 0x7462, 0xac74, 0x406f, 0xac75, 0x5923, + 0x5924, 0x353a, 0x5925, 0x5926, 0x5927, 0x4257, 0x384d, 0x4c61, + 0x7463, 0x4b3c, + /* 0x6240 */ + 0x3d6a, 0x5928, 0x7464, 0xac76, 0x4070, 0x6e3d, 0x4862, 0x3c6a, + 0xac77, 0x3a4d, 0x5929, 0xac78, 0xac79, 0x4247, 0x4a27, 0x7465, + 0x4271, 0x7466, 0x592c, 0x592a, 0x592d, 0xac7a, 0x592b, 0xac7b, + 0x592e, 0xac7d, 0x4a31, 0x7467, 0x3037, 0xac7e, 0x495e, 0x4863, + 0xac7c, 0x592f, 0x5932, 0x3e35, + /* 0x6280 */ + 0x353b, 0x5930, 0x5937, 0x3e36, 0x7468, 0x5931, 0x4744, 0x4d5e, + 0x5933, 0x5934, 0x5938, 0x456a, 0x5935, 0x3933, 0x405e, 0xad21, + 0x5946, 0x4834, 0x4272, 0xad22, 0x4864, 0x5a2d, 0x4a7a, 0x4471, + 0x4b75, 0x593b, 0x3221, 0x436a, + /* 0x62C0 */ + 0x5944, 0x7469, 0x4334, 0x593e, 0x5945, 0x5940, 0x5947, 0x5943, + 0x5942, 0x476f, 0x593c, 0x327d, 0x593a, 0x3571, 0x4273, 0x5936, + 0xad23, 0x746a, 0x5939, 0x3934, 0x405b, 0x3e37, 0x5941, 0x4752, + 0x3572, 0x3348, 0x3367, 0x3f21, 0x5949, 0x594e, 0x594a, 0x377d, + 0x594f, 0x3b22, 0x3969, 0x746b, 0xad25, 0x3d26, 0x593d, + /* 0x6300 */ + 0x3b7d, 0x594c, 0xad26, 0x3b58, 0x594d, 0x3044, 0x746c, 0x5948, + 0xad27, 0xad28, 0x4429, 0x746d, 0x3573, 0x3634, 0x594b, 0x3027, + 0x3a43, 0x3f36, 0xad2b, 0xad2c, 0x746e, 0x4472, 0xad2d, 0xad2e, + 0x4854, 0x5951, 0x415e, + /* 0x6340 */ + 0xad2f, 0x746f, 0xad30, 0x422a, 0x3b2b, 0x5952, 0xad31, 0x5954, + 0x5950, 0x4a61, 0x443d, 0xad33, 0x415c, 0x7470, 0x4a7b, 0x3c4e, + 0x5960, 0x595f, 0xad36, 0x3f78, 0x377e, 0x5959, 0x3e39, 0x4668, + 0x4731, 0x7471, + /* 0x6380 */ + 0x5957, 0x415d, 0xad37, 0x3c78, 0x595c, 0x3e38, 0x5956, 0x595b, + 0x4753, 0xad3a, 0x5955, 0x3721, 0xad38, 0x335d, 0x595d, 0x4e2b, + 0x3a4e, 0x4335, 0x595a, 0x405c, 0x3935, 0x3f64, 0x3166, 0x413c, + 0x5958, 0x3545, 0x3747, 0x444f, 0x595e, 0x415f, 0xad3b, 0x5961, + /* 0x63C0 */ + 0x5963, 0x4237, 0x5969, 0x5964, 0x5966, 0x4941, 0x4473, 0x5967, + 0xad3d, 0xad3e, 0x4d2c, 0x4d48, 0x3439, 0xad3f, 0xad40, 0x302e, + 0x5965, 0x7472, 0x5962, 0xad41, 0xad42, 0x7473, 0x3478, 0xad43, + 0x3167, 0x7474, 0x5968, 0xad3c, 0x4d49, + /* 0x6400 */ + 0x596c, 0xad44, 0x423b, 0x5973, 0x7475, 0x596d, 0x7476, 0x596a, + 0x5971, 0x5953, 0xad45, 0x7477, 0xad46, 0x596e, 0x5972, 0xad47, + 0x4842, 0x456b, 0xad48, 0x596b, 0x596f, 0x3748, 0x3a71, + /* 0x6440 */ + 0x405d, 0x5977, 0x7479, 0x4526, 0xad49, 0xad4a, 0xad4b, 0x747a, + 0x5974, 0x4b60, 0x747b, 0x5975, 0xad4c, 0x5976, 0x4c4e, 0x7478, + 0x4022, 0xad4d, + /* 0x6480 */ + 0x3762, 0xad4e, 0x597d, 0xad4f, 0x3b35, 0x597a, 0x5979, 0x4732, + 0xad50, 0x4635, 0xad51, 0x4531, 0x597b, 0x597c, 0x496f, 0x4745, + 0x3b23, 0x4071, 0x4b50, 0x3349, 0x5a25, 0x597e, 0x747d, 0x747e, + /* 0x64C0 */ + 0x4d4a, 0x5a27, 0x7521, 0x5a23, 0x5a24, 0x7522, 0xad52, 0xad53, + 0x4160, 0x747c, 0x7523, 0x5a22, 0x593f, 0xad54, 0xad55, 0x5a26, + 0x5a21, 0x5a2b, 0x5a2c, 0x4527, 0x5a2e, 0xad57, 0xad58, 0x3b24, + 0x5a29, 0x353c, 0x5a2f, 0x5a28, 0x5a33, 0x5a32, 0x5a31, 0x7524, + 0x5a34, 0x7525, 0x5a36, 0x3e71, 0xad59, + /* 0x6500 */ + 0x5a35, 0xad5a, 0x5a39, 0xad5c, 0xad5d, 0xad5e, 0x5a37, 0x5a38, + 0x5970, 0xad60, 0x7526, 0x5a3b, 0x5a3a, 0x7527, 0x5978, 0x5a3c, + 0x5a30, 0x3b59, 0xad61, 0x5a3d, 0x5a3e, 0x5a40, 0x5a3f, 0x5a41, + 0x327e, 0x3936, 0x4a7c, 0x402f, + /* 0x6540 */ + 0xad62, 0x384e, 0x5a43, 0x5a46, 0x4952, 0x355f, 0xad63, 0x5a45, + 0x5a44, 0x4754, 0x5a47, 0x3635, 0x5a49, 0x5a48, 0x343a, 0x3b36, + 0x4658, 0x7529, 0xad64, 0x3749, 0x3f74, 0x5a4a, 0x4030, 0x4528, + 0x495f, 0x5a4b, 0xad65, + /* 0x6580 */ + 0xad66, 0x5a4c, 0x5a4d, 0xad67, 0xad68, 0x4a38, 0x555d, 0x4046, + 0xad69, 0x494c, 0x3a58, 0x4865, 0x4843, 0x454d, 0x4e41, 0x5a4f, + 0x3c50, 0x752a, 0x5a50, 0x3036, 0x3654, 0x404d, 0x4960, 0x5a51, + 0x3b42, 0x4347, 0x3b5b, 0x3f37, 0xad6a, 0xad6b, 0x5a52, 0xad6c, + 0x4a7d, 0x3177, 0x3b5c, 0xad6d, + /* 0x65C0 */ + 0x5a55, 0xad6e, 0x5a53, 0x5a56, 0x4e39, 0x5a54, 0xad6f, 0x407b, + 0x5a57, 0x4232, 0x5a58, 0xad70, 0x347a, 0x5a5a, 0x5a59, 0x5a5b, + 0x5a5c, 0x347b, 0x467c, 0x4336, 0x356c, 0x3b5d, 0x4161, 0x3d5c, + 0x3030, 0x5a5d, 0xad72, 0xad73, 0x3222, 0x5a61, 0xad74, + /* 0x6600 */ + 0x752c, 0x3937, 0x5a60, 0xad75, 0x3a2b, 0x3e3a, 0xad76, 0x752d, + 0x5a5f, 0x3e3b, 0x4c40, 0x3a2a, 0x3057, 0x404e, 0x752e, 0x5a66, + 0x752f, 0x4031, 0x3147, 0xad77, 0x7531, 0x7532, 0x3d55, 0x4b66, + 0x3a72, 0xad78, 0x7533, 0x3e3c, 0x4027, 0x7534, 0x7535, 0x7536, + 0x5a65, 0x5a63, 0x5a64, 0x7530, 0x436b, 0x5b26, + /* 0x6640 */ + 0x5a6a, 0x3b7e, 0x3938, 0x5a68, 0xad79, 0x7538, 0x5a69, 0x3f38, + 0x7539, 0xad7b, 0x5a67, 0xad7a, 0x3b2f, 0xad7e, 0x753b, 0x753c, + 0xae21, 0x5a6c, 0x5a6b, 0x5a70, 0x753d, 0x5a71, 0xae22, 0x5a6d, + 0x753e, 0x3322, 0x5a6e, 0x5a6f, 0x4855, 0xae25, 0xae26, 0xae27, + 0xae28, 0x4961, 0x374a, 0x5a72, 0x753f, 0x4032, 0x3e3d, 0x7540, + 0x7541, 0x4352, 0xae29, + /* 0x6680 */ + 0xae2a, 0x3647, 0x5a73, 0x5a77, 0x324b, 0x5a74, 0x5a76, 0x7542, + 0x5a75, 0xae2b, 0x3d6b, 0xae2c, 0x4348, 0x3045, 0x5a78, 0xae2d, + 0x5a79, 0x7544, 0x442a, 0x4e71, 0x3b43, 0xae2f, 0x4a6b, 0xae30, + 0x7545, 0x4b3d, 0xae31, 0x5b22, 0x5a7b, 0x7546, 0x5a7e, 0x5a7d, + 0xae33, + /* 0x66C0 */ + 0x5a7a, 0x5b21, 0x7547, 0x465e, 0x7548, 0x5a7c, 0x5b23, 0x3d6c, + 0x5b24, 0x754a, 0x4d4b, 0x4778, 0x5b25, 0x5b27, 0x754b, 0x5b28, + 0xae35, 0x5b29, 0x364a, 0x3148, 0x3939, 0x5b2a, 0x5b2b, 0x3d71, + 0x4162, 0x754c, 0x7537, 0x5258, 0x413e, 0x413d, 0x4258, + /* 0x6700 */ + 0x3a47, 0xae37, 0x5072, 0xae38, 0x376e, 0x4d2d, 0x4a7e, 0x497e, + 0x5b2c, 0xae39, 0x754d, 0x3a73, 0x443f, 0x5b2d, 0x4f2f, 0xae3b, + 0x4b3e, 0x442b, 0x5b2e, 0x347c, 0x5b2f, 0x5b30, 0x4c5a, 0x4c24, + 0x4b76, 0x4b5c, 0x3b25, 0x5b32, 0x3c6b, 0x754f, 0x4b51, 0x5b34, + 0x5b37, 0x5b36, 0x3479, 0x3560, 0x5b33, + /* 0x6740 */ + 0x5b35, 0x5b38, 0x7551, 0x7552, 0x3f79, 0xae3e, 0xae3f, 0x4d7b, + 0x3049, 0x3a60, 0x423c, 0x3c5d, 0xae40, 0x3e73, 0x5b3b, 0x454e, + 0xae41, 0x5b39, 0x422b, 0x5b3a, 0x3e72, 0x4c5d, 0x5b3c, 0x5b3d, + 0x4d68, 0x7550, 0x5b42, 0x393a, 0x4755, 0x5b3f, 0x456c, 0x5a5e, + 0x5a62, 0xae45, 0x354f, 0xae46, 0x4747, 0x7553, 0x5b41, 0x3e3e, + 0x4844, + /* 0x6780 */ + 0x7554, 0x5b47, 0x487a, 0x5b3e, 0x5b44, 0x5b43, 0x404f, 0xae48, + 0x7555, 0x4b6d, 0x4e53, 0x7556, 0x4b67, 0x7557, 0x324c, 0x3b5e, + 0x4f48, 0x5b46, 0x3f75, 0x5b45, 0x5b40, 0x384f, 0xae4c, 0xae4d, + 0x5b4c, 0x5b4a, 0x324d, 0x5b48, 0x5b4e, 0x5b54, 0x7558, + /* 0x67C0 */ + 0x755a, 0x4248, 0xae4e, 0x4a41, 0x5b56, 0xae4f, 0x4922, 0x5b55, + 0x4770, 0x4b3f, 0x343b, 0xae50, 0x4077, 0x3d40, 0x755b, 0x4453, + 0xae51, 0x4d2e, 0xae52, 0x5b51, 0x5b50, 0x5b52, 0x5b4f, 0x5b57, + 0x5b4d, 0x5b4b, 0x5b53, 0x5b49, 0xae53, 0x436c, 0x4c78, 0x3c46, + 0x3a74, 0xae54, 0x7559, 0x3a3a, 0x755c, 0x4b6f, 0x3341, + /* 0x6800 */ + 0x755d, 0x444e, 0x464a, 0x3149, 0xae4b, 0x4072, 0x4034, 0x372a, + 0xae58, 0x755f, 0x5b59, 0xae59, 0x393b, 0x337c, 0x5b5b, 0x3374, + 0x5b61, 0x7560, 0xae5a, 0x7561, 0x5b5e, 0xae5c, 0x4073, 0x334b, + 0x3a2c, 0xae5d, 0x334a, 0x3a4f, 0xae5e, + /* 0x6840 */ + 0x5b5c, 0x3765, 0x374b, 0x456d, 0xae5f, 0xae60, 0x5b5a, 0x3046, + 0xae61, 0xae62, 0x5b5d, 0x5b5f, 0x364d, 0x372c, 0x755e, 0x343c, + 0x354b, 0xae63, 0xae64, 0x5b62, 0x7562, 0x3a79, 0x4b71, 0x3b37, + 0x5b63, 0x4930, 0xae66, 0xae67, 0x7563, 0x5b6f, 0x7564, 0x3233, + 0x5b64, 0xae68, 0xae69, 0x5b75, 0x5b65, + /* 0x6880 */ + 0x4e42, 0xae6a, 0x5b6c, 0x475f, 0x5b74, 0x5b67, 0xae6b, 0x3034, + 0x5b69, 0xae6c, 0x393c, 0xae6e, 0xae6f, 0xae70, 0x5b6b, 0xae71, + 0x5b6a, 0x5b66, 0x5b71, 0x3e3f, 0x7566, 0x7567, 0x546d, 0x3868, + 0x4d7c, 0xae72, 0xae73, 0x5b68, 0x4474, 0x3323, 0x3a2d, 0x7568, + 0x5b60, 0xae74, 0x5b70, 0x3361, 0x5b6e, 0x5b72, 0xae75, 0x456e, + /* 0x68C0 */ + 0xae7a, 0x347e, 0xae7b, 0x5c32, 0x7569, 0x4c49, 0x5b77, 0x347d, + 0xae7c, 0x5b7e, 0xae7d, 0x756a, 0x4b40, 0x5c21, 0x5c23, 0xae7e, + 0x5c27, 0x5b79, 0xaf21, 0x432a, 0x456f, 0x5c2b, 0x5b7c, 0x5c28, + 0xaf22, 0xaf23, 0x5c22, 0x756b, 0xaf24, 0x756c, 0x3f39, 0x5c2c, + 0x756d, 0x756e, 0x4033, 0xaf25, 0x5c2a, 0x343d, 0xae76, 0x756f, + /* 0x6900 */ + 0x4f50, 0x5b76, 0xaf26, 0x5c26, 0x3058, 0xaf27, 0x5b78, 0x7570, + 0x4c3a, 0x5b7d, 0x3f22, 0x4447, 0x5b73, 0x5c25, 0x3f7a, 0x5c2f, + 0x3371, 0x3821, 0x5c31, 0x5b7a, 0x5c30, 0x5c29, 0x5b7b, 0x5c2d, + 0x5c2e, 0x5c3f, 0x464e, 0x7573, 0x5c24, 0x5c3b, 0xaf2b, 0x5c3d, + 0x4458, + /* 0x6940 */ + 0x7574, 0xaf2d, 0x7571, 0x4d4c, 0x4976, 0x5c38, 0x424a, 0x7575, + 0x5c3e, 0x413f, 0x5c35, 0x5c42, 0x5c41, 0x466f, 0x5c40, 0x466a, + 0x7576, 0x7577, 0x7578, 0xaf2e, 0x5c44, 0x5c37, 0xaf2f, 0x3648, + 0x5c3a, 0x3d5d, 0xaf30, 0x4760, 0x5c3c, 0x364b, 0x5c34, 0x5c36, + 0x5c33, 0xaf31, 0x4f30, 0x335a, 0x5c39, 0xaf32, + /* 0x6980 */ + 0x7579, 0x5c43, 0x3335, 0x3a67, 0x315d, 0x5c54, 0xaf33, 0x4f31, + 0x5c57, 0xaf35, 0xaf36, 0x3f3a, 0x5c56, 0x5c55, 0x757b, 0xaf37, + 0x5c52, 0x757c, 0x5c46, 0xaf38, 0x5c63, 0x5c45, 0x5c58, 0xaf39, + 0xaf3a, 0x5c50, 0xaf3b, 0x5c4b, 0x5c48, + /* 0x69C0 */ + 0xaf3c, 0x5c49, 0x5c51, 0x7422, 0x5c4e, 0x393d, 0x4448, 0x4164, + 0x5c4c, 0x757d, 0x5c47, 0xaf3d, 0x5c4a, 0xaf3e, 0x4d4d, 0x4b6a, + 0x5c4f, 0x5c59, 0x7622, 0xaf44, 0x5c61, 0x5c5a, 0x7623, 0x7624, + 0x5c67, 0x5c65, 0xaf45, 0xaf46, 0x5c60, 0xaf47, 0xaf49, 0x7625, + 0x7626, 0x5c5f, 0x4450, 0x4165, 0xaf4a, 0x5c5d, + /* 0x6A00 */ + 0x5c5b, 0x5c62, 0x5c68, 0x4875, 0x5c6e, 0x7627, 0xaf4b, 0x5c69, + 0x5c6c, 0x5c66, 0x7628, 0x4374, 0x4938, 0xaf4c, 0x5c5c, 0xaf4d, + 0x5c64, 0x3e40, 0x4c4f, 0x5c78, 0x5c6b, 0x3822, 0x3223, 0x335f, + 0x5c53, 0xaf41, 0xaf4f, 0xaf50, 0xaf51, 0x3e41, 0x5c70, 0x5c77, + 0x3c79, 0x3372, 0x762a, 0x432e, 0x762b, 0xaf52, + /* 0x6A40 */ + 0x5c6d, 0x762c, 0xaf53, 0x5c72, 0x5c76, 0xaf54, 0x3636, 0xaf56, + 0x762d, 0xaf57, 0x762e, 0x354c, 0x5c74, 0x762f, 0x3521, 0x464b, + 0x5c73, 0xaf58, 0x5c75, 0x7630, 0x5c6f, 0x7631, 0x5c71, 0xaf55, + 0xaf5a, 0x3360, + /* 0x6A80 */ + 0x4349, 0xaf5b, 0x5c7c, 0x7633, 0xaf5c, 0x5c7a, 0x3869, 0x5c79, + 0xaf5e, 0x7634, 0x5d21, 0x5b58, 0x7635, 0x7636, 0xaf5f, 0x5c7b, + 0xaf60, 0x5c7d, 0x5c7e, 0x7637, 0x5d2c, 0xaf62, 0x5d28, 0x5b6d, + 0x5d27, 0x5d26, 0x5d23, 0xaf63, + /* 0x6AC0 */ + 0x5c6a, 0x5d25, 0x5d24, 0xaf64, 0xaf66, 0x5d2a, 0x4f26, 0xaf65, + 0x5d2d, 0x367b, 0xaf67, 0xaf68, 0x5d29, 0x5d2b, 0x7638, 0x7639, + 0x4827, 0x5d2e, 0xaf6b, 0xaf6c, 0xaf6d, 0xaf6e, 0x5d32, 0x5d2f, + 0xaf6f, + /* 0x6B00 */ + 0x4d73, 0x5d30, 0x5c5e, 0xaf71, 0xaf72, 0xaf73, 0xaf74, 0x5d33, + 0x5d34, 0xaf76, 0x763c, 0x3135, 0x763d, 0x5d36, 0x3767, 0x3c21, + 0x3655, 0x3224, 0x763e, 0xaf78, 0x4d5f, 0x763f, 0x5d38, 0x5d37, + 0x5d3a, 0x353d, 0x3656, 0x343e, + /* 0x6B40 */ + 0x5d3d, 0x7640, 0x5d3c, 0x5d3e, 0xaf79, 0x324e, 0x4337, 0x5d3f, + 0x343f, 0x5d41, 0x7641, 0xaf7a, 0x5d40, 0x5d42, 0x5d43, 0x7642, + 0x5d44, 0x3b5f, 0x4035, 0x3a21, 0x7643, 0x4970, 0x7644, 0x4a62, + 0x4f44, 0xaf7b, 0x3b75, 0x3a50, 0x4e72, 0xaf7c, 0x7645, 0x5d45, + 0x5d46, 0xaf7d, 0x3b60, 0x5d47, + /* 0x6B80 */ + 0x5d48, 0xaf7e, 0x7646, 0x5d4a, 0x5d49, 0x4b58, 0x3d5e, 0x3c6c, + 0x3b44, 0x5d4b, 0x5d4d, 0x3f23, 0x5d4c, 0xee21, 0x5d4e, 0x5d4f, + 0x7647, 0x5d50, 0x5d51, 0x7648, 0xee22, 0x5d52, 0x5d54, 0x5d53, + 0x5d55, 0x3225, 0x434a, 0x5d56, 0x3b26, 0x334c, 0x5d57, 0xee24, + 0xee25, 0x4542, + /* 0x6BC0 */ + 0x544c, 0x3523, 0x5d58, 0xee26, 0xee27, 0xee28, 0x5d59, 0x4a6c, + 0x4b68, 0x764a, 0x4647, 0x5d5a, 0x4866, 0x764b, 0x764c, 0x487b, + 0xee29, 0x4c53, 0x5d5b, 0xee2a, 0xee2b, 0x5d5d, 0x5d5c, 0xee2c, + 0x5d5f, 0xee2d, 0x5d5e, 0x764d, + /* 0x6C00 */ + 0xee2e, 0x764e, 0x5d61, 0xee2f, 0xee30, 0x3b61, 0x764f, 0x4c31, + 0x5d62, 0x5d63, 0x3524, 0x5d64, 0x5d66, 0x5d65, 0x7650, 0x3f65, + 0xee31, 0xee32, 0x4939, 0x314a, 0xee33, 0x4845, 0xee35, + /* 0x6C40 */ + 0x4475, 0x3d41, 0x3561, 0xee36, 0x4846, 0x3c2e, 0x5d68, 0x3440, + 0x7651, 0x3178, 0xee37, 0x7652, 0x4672, 0x5d67, 0x393e, 0x4353, + 0x5d69, 0xee4f, 0x5d71, 0x5d6a, 0xee38, 0x4241, 0x3562, 0x5d72, + 0x7654, 0x7655, 0x3768, 0x3525, 0x5d70, + /* 0x6C80 */ + 0x5d6e, 0x5d6b, 0x4d60, 0xee39, 0x7656, 0x7657, 0x4440, 0xee3a, + 0x4659, 0x5d6c, 0x5d74, 0x5d73, 0x3723, 0xee3c, 0xee3d, 0x322d, + 0xee3e, 0x7658, 0x3a3b, 0x5d6d, 0x5d6f, 0x7659, 0x4b57, 0x4274, + 0x7653, 0x4b77, 0xee3f, 0x5d7c, 0x5d7d, 0x324f, 0x4a28, 0x4c7d, + 0x5e21, 0x3c23, 0x3e42, 0x5d78, 0x5d7e, 0x3168, + /* 0x6CC0 */ + 0x3637, 0xee40, 0x5d75, 0x5d7a, 0x765b, 0x4074, 0x4771, 0x4867, + 0xee41, 0x5d77, 0x765c, 0x4b21, 0xee43, 0x5d79, 0x5e24, 0xee44, + 0x5e22, 0xee45, 0x5d7b, 0x765d, 0x4b22, 0x4748, 0x3563, 0x4525, + 0x436d, 0xee46, 0x5e25, 0x765e, 0xee47, 0xee48, 0x765f, 0x5e23, + 0x4259, 0x5d76, 0x314b, 0x765a, + /* 0x6D00 */ + 0xee4a, 0x7661, 0xee4b, 0x4d4e, 0x5e30, 0x7662, 0x5e2f, 0x4076, + 0x5e2c, 0x4d6c, 0x4636, 0x5e26, 0xee4c, 0x4445, 0xee4d, 0xee4e, + 0x314c, 0x393f, 0x5e29, 0x7663, 0xee50, 0x7664, 0x3d27, 0x5e2e, + 0xee65, 0x5e2d, 0x5e28, 0x5e2b, 0x7665, 0x3368, 0xee51, 0x5e2a, + 0x4749, 0x7666, + /* 0x6D40 */ + 0x4e2e, 0x3e74, 0x4075, 0x7667, 0x5e36, 0x5e34, 0xee52, 0x494d, + 0xee53, 0xee54, 0x5e31, 0x5e33, 0x7668, 0x313a, 0x3940, 0x4f32, + 0x333d, 0x4962, 0xee55, 0x4d61, 0x3324, 0x3f3b, 0x5e35, + /* 0x6D80 */ + 0xee56, 0xee57, 0x766a, 0x5e3a, 0x766b, 0x3e43, 0x766c, 0xee58, + 0x4d30, 0xee59, 0x5e37, 0xee5a, 0x5e32, 0x766d, 0x5e38, 0xee5b, + 0x4e5e, 0x4573, 0x4642, 0x766e, 0xee61, 0x766f, 0xee62, 0x3336, + 0x3155, 0xee63, 0x5e3e, 0x5e41, 0x4e43, 0x7670, + /* 0x6DC0 */ + 0x4d64, 0xee64, 0x7671, 0x5e48, 0x5e42, 0x5e3f, 0xee66, 0x4e54, + 0x5e45, 0xee67, 0xee68, 0xee69, 0x3d4a, 0x5e47, 0x5e4c, 0x7672, + 0x4571, 0x5e4a, 0x7673, 0x7674, 0x7675, 0x5e44, 0xee6a, 0x4338, + 0x5e4b, 0x5e40, 0x5e46, 0xee6b, 0x5e4d, 0x307c, 0x5e43, 0x5e4e, + 0x3f3c, 0x3d5f, 0x4a25, 0xee6c, 0x3a2e, 0x5e3b, 0x5e49, 0x453a, + 0x7676, + /* 0x6E00 */ + 0x4036, 0x3369, 0x3a51, 0x3e44, 0x5e3d, 0x3d42, 0x374c, 0x5e3c, + 0xee5d, 0x5e52, 0x3d6d, 0x383a, 0x5e61, 0xee6e, 0x5e5b, 0x3574, + 0x454f, 0xee6f, 0x5e56, 0x5e5f, 0x302f, 0x3132, 0xee70, 0x3239, + 0x5e58, 0x422c, 0x5e4f, 0x5e51, 0x3941, 0xee72, 0x7678, 0xee6d, + 0x5e62, 0x5e5d, 0xee73, 0x5e55, + /* 0x6E40 */ + 0x5e5c, 0x7679, 0xee74, 0xee75, 0x4c2b, 0xee76, 0xee77, 0x5e5a, + 0x5e5e, 0xee78, 0xee79, 0xee7a, 0xee7b, 0x3850, 0xee7c, 0x3e45, + 0x4339, 0x767a, 0x767b, 0x5e54, 0xee7d, 0x4d2f, 0x5e57, 0x5e50, + 0x4572, 0x5e53, 0x5e59, 0x4f51, 0x3c3e, + /* 0x6E80 */ + 0x4b7e, 0x5e63, 0x482e, 0x5e6f, 0x383b, 0xef21, 0x3d60, 0x5e65, + 0x4e2f, 0x3942, 0x5e72, 0x306e, 0x5e70, 0xef22, 0x5e64, 0x767c, + 0x5e6a, 0x767d, 0x5e6c, 0xef23, 0x4d4f, 0x5e67, 0x452e, 0x5e69, + 0xef24, + /* 0x6EC0 */ + 0x767e, 0x5e71, 0xef25, 0x5e6b, 0x4c47, 0x7721, 0x5e66, 0xef26, + 0x3c22, 0x5e7e, 0x7722, 0x336a, 0x5e68, 0x5e6d, 0x5e6e, 0xef27, + 0x426c, 0x425a, 0xef29, 0x5e76, 0x5e7c, 0x5e7a, 0x4529, 0x5f23, + 0x5e77, 0xef2a, 0xef2b, 0x5e78, 0x5e60, + /* 0x6F00 */ + 0x3579, 0x493a, 0x3c3f, 0x3977, 0xef2c, 0xef2d, 0x4f33, 0x7723, + 0x5e74, 0x5f22, 0x3169, 0x4166, 0xef2e, 0x7724, 0x4779, 0x3441, + 0x4e7a, 0xef2f, 0x7726, 0x4c21, 0x4452, 0x7727, 0x5e7b, 0x5e7d, + 0x7728, 0xef28, 0xef30, 0x4132, 0xef31, 0x5f21, 0x5e79, + /* 0x6F40 */ + 0x5e73, 0x3443, 0x7729, 0xef33, 0x3769, 0xef34, 0x5f2f, 0x772a, + 0xef35, 0x5f2a, 0x4078, 0x772b, 0x3363, 0xef36, 0x772c, 0x772d, + 0x3d61, 0x5f33, 0xef37, 0x5f2c, 0x442c, 0x5f29, 0x4459, 0x5f4c, + 0x5f26, 0x5f25, 0x5f2e, 0xef39, 0x772e, + /* 0x6F80 */ + 0x5f28, 0x5f27, 0x5f2d, 0x4021, 0x5f24, 0x772f, 0x7730, 0x7731, + 0x5f30, 0xef3a, 0x5f31, 0x7732, 0xef3b, 0x3442, 0xef38, 0xef3d, + 0x7733, 0x5f36, 0x5f35, 0x5f37, 0xef3e, 0x7734, 0x5f3a, 0xef3f, + 0x4543, 0x5f34, 0xef41, 0x7735, 0x5f38, 0x7736, 0xef3c, + /* 0x6FC0 */ + 0x3763, 0x4279, 0x5f32, 0x473b, 0x5f39, 0x7737, 0xef42, 0xef43, + 0x7738, 0x5f3e, 0x5f3c, 0x5f3f, 0xef44, 0x5f42, 0xef45, 0x5f3b, + 0x396a, 0x4728, 0x5e39, 0xef46, 0x4d74, 0x5f3d, 0x5f41, 0x4275, + 0x773a, 0x5f40, 0x5f2b, 0x773b, 0x6f69, 0x7739, 0x5f45, 0xef48, + 0x5f49, + /* 0x7000 */ + 0xef49, 0x5f47, 0x773c, 0x773d, 0xef4a, 0x5f43, 0xef4b, 0x5f44, + 0x5f48, 0x5f46, 0x494e, 0x5f4e, 0x5f4b, 0x5f4a, 0x5f4d, 0x4654, + 0x5f4f, 0xef4c, 0x4375, 0x426d, 0x773e, 0x4025, 0x5f50, 0x5f52, + 0xef4e, 0xef4f, 0xef50, 0x5f51, + /* 0x7040 */ + 0xef51, 0xef52, 0x773f, 0xef53, 0x5e75, 0x7742, 0x5f53, 0xef55, + 0x4667, 0x7740, 0x7741, 0x5f54, 0x7743, 0xef56, 0xef57, 0x3250, + 0xef58, 0xef59, 0x4574, 0x3325, 0x7744, 0xef5a, 0x3564, 0x3c5e, + 0x3a52, 0xef5b, + /* 0x7080 */ + 0xef5c, 0x7745, 0xef5d, 0x4f27, 0x3f66, 0x316a, 0x5f56, 0xef5e, + 0xef5f, 0x5f55, 0xef62, 0x7746, 0x7747, 0x5f59, 0x433a, 0x5f5c, + 0x5f57, 0xef63, 0x5f5b, 0x7748, 0x5f5a, 0x4540, 0x3059, 0xef60, + /* 0x70C0 */ + 0x4e75, 0xef66, 0x5f5e, 0x3128, 0xef67, 0xef68, 0x7749, 0x774a, + 0x5f60, 0xef69, 0x5f5f, 0x5f5d, 0x774b, 0xef65, 0x5f58, 0x4b23, + 0x5f62, + /* 0x7100 */ + 0xef6a, 0xef6b, 0xef6c, 0xef6d, 0xef6e, 0x5f61, 0xef6f, 0x774c, + 0x316b, 0x5f64, 0x4a32, 0x5f63, 0x774e, 0x774f, 0x4c35, 0x3e47, + 0x774d, 0x7750, 0xef71, 0x7751, 0xef72, 0x4133, 0x3e46, + /* 0x7140 */ + 0x7752, 0x7753, 0x4e7b, 0xef74, 0x5f6a, 0x4079, 0xef73, 0x7754, + 0x7756, 0xef75, 0x5f66, 0x5f6b, 0x316c, 0x7757, 0xef76, 0x7758, + 0x5f69, 0x4761, 0x5f65, 0x5f68, 0x3e48, 0x7759, 0x4851, 0x5f6c, + 0x3c51, 0x407a, + /* 0x7180 */ + 0xef79, 0x5f6f, 0x775b, 0x775c, 0x5f67, 0x3727, 0x5f6d, 0x775d, + 0x4d50, 0x5f70, 0xef78, 0x7426, 0xef7a, 0x3d4f, 0xef7b, 0xef7c, + 0x5f71, 0x5f72, 0xef7d, 0xef7e, 0x472e, 0xf021, 0x5f74, 0x775f, + 0x5f75, + /* 0x71C0 */ + 0x775e, 0x4733, 0x7760, 0x4575, 0x5f77, 0xf023, 0x5f79, 0x4e55, + 0x5f76, 0xf024, 0x5f78, 0x316d, 0x5f73, 0xf025, 0xf026, 0x535b, + 0x5f7a, 0x4167, 0x3b38, 0x5f7c, 0x5f7b, 0x3f24, 0x5259, 0x5f7d, + 0x6021, 0x5f6e, 0x5f7e, 0x7761, 0x6022, + /* 0x7200 */ + 0x7762, 0x477a, 0xf027, 0x6023, 0x6024, 0x7763, 0x6025, 0x6026, + 0x445e, 0xf02a, 0x6028, 0x6027, 0x6029, 0x602a, 0xf02b, 0x3c5f, + 0x4963, 0xf02c, 0xf02d, 0x4c6c, 0x602b, 0x602c, 0x4156, 0x3c24, + 0x602d, + /* 0x7240 */ + 0x602e, 0xf02f, 0x602f, 0x4a52, 0x4847, 0x6030, 0x4757, 0x442d, + 0xf030, 0x7764, 0x7765, 0xf031, 0x6031, 0x3267, 0x356d, 0x4c46, + 0x4c36, 0x3234, 0x4f34, 0xf032, 0x4b52, 0x4a2a, 0xf034, 0xf035, + 0x4037, 0x6032, 0xf036, 0x4643, 0x3823, 0x6033, 0xf037, + /* 0x7280 */ + 0x3a54, 0x6035, 0x6034, 0x6036, 0x7767, 0xf038, 0x6037, 0x6038, + 0x7768, 0x353e, 0x6039, 0x603a, 0x3824, 0xf03a, 0xf03b, 0x4848, + 0xf03c, 0xf03d, 0x603c, 0x3e75, 0x603b, 0x7769, + /* 0x72C0 */ + 0x776a, 0xf03e, 0x3638, 0x603d, 0x603f, 0x603e, 0xf040, 0x6040, + 0x3851, 0x6041, 0x3669, 0x4140, 0x397d, 0x6043, 0x6044, 0x6042, + 0x3c6d, 0x4648, 0x3639, 0xf043, 0x6046, 0x432c, 0x6045, 0xf044, + 0x776b, 0x4f35, 0x4762, + /* 0x7300 */ + 0xf045, 0x6049, 0xf046, 0x604b, 0x6048, 0xf047, 0xf048, 0x4c54, + 0x604a, 0x604c, 0x4e44, 0x6050, 0x776d, 0x776e, 0x604f, 0x4376, + 0x472d, 0xf04b, 0x3825, 0x604e, 0xf04c, 0xf04d, 0x604d, 0x4d31, + 0x4d32, 0xf04a, 0xf04e, 0x6051, 0x316e, + /* 0x7340 */ + 0x3976, 0x3b62, 0x6052, 0x6053, 0x7770, 0xf04f, 0x6055, 0x3d43, + 0x7771, 0x6057, 0x6056, 0xf051, 0xf052, 0xf054, 0xf055, 0x6058, + 0xf056, 0x334d, 0x605a, 0xf057, 0x6059, 0x605c, 0x605b, 0x7772, + /* 0x7380 */ + 0xf058, 0x383c, 0xf059, 0x4e28, 0x364c, 0xf05a, 0x3226, 0xf05b, + 0x7773, 0x366a, 0xf05c, 0xf05d, 0xf05e, 0x7774, 0x7775, 0x7776, + 0xf05f, 0x7777, 0xf060, 0x3461, 0x7778, 0x4e68, 0x605e, 0xf061, + 0xf062, 0xf063, 0x6060, 0xf064, 0xf065, + /* 0x73C0 */ + 0x6061, 0x3251, 0xf066, 0x605d, 0x7779, 0x3b39, 0xf067, 0x4441, + 0x605f, 0x777a, 0x777b, 0x777c, 0x6064, 0x3c6e, 0xf068, 0x777d, + 0x6062, 0xf069, 0x777e, 0x373e, 0x4849, 0x6063, 0x607e, 0x6069, + 0xf06a, 0xf06c, 0x383d, + /* 0x7400 */ + 0xf06d, 0x3565, 0x6066, 0x4d7d, 0x7821, 0x4e30, 0x7822, 0xf06b, + 0x7823, 0x7824, 0x4276, 0xf06e, 0x6068, 0x7826, 0x7827, 0x7828, + 0x7829, 0x782a, 0x782b, 0x782c, 0x782d, 0xf06f, 0x606a, 0x4e56, + 0x3657, 0x487c, 0x474a, 0xf070, 0x606b, 0x606d, + /* 0x7440 */ + 0xf072, 0x6070, 0xf073, 0x782e, 0x782f, 0x7830, 0x7831, 0xf074, + 0xf075, 0xf071, 0x606c, 0x7832, 0x606f, 0x386a, 0x314d, 0x6071, + 0xf076, 0x3f70, 0x606e, 0x4e5c, 0x7833, 0x6074, 0x7424, 0x6072, + 0x6075, 0x7834, 0x7835, 0x6067, 0x6073, 0xf077, 0x3a3c, 0x6076, + 0x6077, + /* 0x7480 */ + 0xf078, 0x4d7e, 0xf079, 0x7836, 0x7837, 0xf07a, 0x7838, 0x6078, + 0x783d, 0xf07c, 0xf07d, 0x7839, 0xf07e, 0x783a, 0x6079, 0x783b, + 0xf121, 0xf122, 0x6065, 0x783c, 0xf123, 0x783e, 0x607a, 0x783f, + 0x7840, 0xf124, 0xf125, 0x3444, 0x7841, 0xf126, 0xf128, 0xf127, + 0x3c25, 0x7842, + /* 0x74C0 */ + 0x7843, 0x7844, 0x607b, 0x607c, 0x607d, 0xf129, 0xf12a, 0x7845, + 0x313b, 0xf12b, 0x6121, 0x493b, 0x6122, 0x3424, 0x6123, 0x6124, + 0xf12d, 0x6125, 0xf12c, 0x6127, 0x6128, 0x6126, 0x4953, 0x612a, + 0x6129, 0xf12f, 0x7846, + /* 0x7500 */ + 0x7847, 0x612c, 0x612b, 0x612d, 0x612e, 0x6130, 0x612f, 0x3979, + 0x6132, 0x6131, 0x7848, 0x3445, 0x3f53, 0x453c, 0x6133, 0x4038, + 0xf131, 0x3b3a, 0xf132, 0x3179, 0x6134, 0x4d51, 0xf133, 0x4a63, + 0x6135, 0x7849, 0x4544, 0x4d33, 0x3943, 0x3f3d, 0x434b, 0x5234, + 0x442e, 0x3268, 0x6136, 0xf136, 0xf137, + /* 0x7540 */ + 0xf138, 0x6137, 0x613c, 0xf139, 0x613a, 0x6139, 0x5a42, 0x3326, + 0x6138, 0xf13a, 0x305a, 0xf13b, 0x482a, 0xf13c, 0x484a, 0x4e31, + 0x613d, 0x613b, 0x435c, 0x4026, 0x482b, 0x492d, 0x613f, 0x4e2c, + 0x374d, 0x6140, 0x613e, 0x4856, 0x6141, 0xf13d, 0x6142, 0x784a, + 0x305b, 0xf13f, 0xf13e, 0x3e76, 0x6147, 0x6144, 0x466d, 0x6143, + 0x784b, 0xf140, 0xf141, 0xf142, 0x3526, + /* 0x7580 */ + 0xf143, 0x614a, 0x6145, 0x6146, 0x6149, 0x6148, 0x4925, 0xf145, + 0x4142, 0x4141, 0x353f, 0x784c, 0x614b, 0x614c, 0x614d, 0xf147, + 0x614f, 0x614e, 0x3156, 0xf149, 0x6157, 0x4868, 0x6151, 0x6153, + 0xf14a, 0x6155, 0x3f3e, 0x6156, 0x6154, 0x3c40, 0xf14b, + /* 0x75C0 */ + 0xf14c, 0x6150, 0x6152, 0x4942, 0xf14d, 0x3e49, 0x6159, 0x6158, + 0x784e, 0xf14e, 0x615a, 0xf14f, 0x3c26, 0x3a2f, 0x4577, 0x615b, + 0x444b, 0xf150, 0x615d, 0xf151, 0xf152, 0x4e21, 0x615c, 0x784f, + 0xf153, 0x4169, 0xf154, 0xf155, 0x6162, 0xf156, 0x6164, 0x6165, + 0x4354, 0xf157, 0x6163, 0x6160, 0x615e, 0x615f, + /* 0x7600 */ + 0x7850, 0x6161, 0x7851, 0xf158, 0xf15a, 0x7852, 0x6168, 0x6166, + 0x6167, 0xf15b, 0xf15e, 0x7853, 0x7854, 0xf159, 0x7855, 0xf15f, + 0xf160, 0x7856, 0x6169, 0x616b, 0x616c, 0x616d, 0x616e, 0xf162, + 0x7e7d, 0x616a, 0xf163, 0x7857, 0x6170, 0xf165, 0x616f, 0x7858, + 0x6171, 0xf164, + /* 0x7640 */ + 0xf168, 0x4e45, 0x7859, 0x6174, 0x6172, 0x6173, 0xf16a, 0x785a, + 0x3462, 0x4c7e, 0xf16b, 0x4a4a, 0x6176, 0x6175, 0x6177, 0x6178, + 0x785b, 0x785c, 0x617c, 0x6179, 0x617a, 0x617b, 0x617d, 0x785d, + 0xf16d, 0x785e, 0x617e, 0x785f, 0x6221, 0x6222, 0x6223, 0x482f, + 0x4550, 0x6224, 0x4772, 0x4934, + /* 0x7680 */ + 0x6225, 0x7860, 0x6226, 0x452a, 0x3327, 0x3944, 0x6227, 0x6228, + 0x6229, 0x3b29, 0x622b, 0xf16e, 0x622a, 0x622c, 0x622d, 0x7861, + 0xf16f, 0x7862, 0x7863, 0xf171, 0xf170, 0x7864, 0xf172, 0xf173, + 0x7865, 0x4869, 0xf174, 0x622e, 0x622f, 0x7866, 0x7369, 0x6230, + 0x6231, 0x6232, 0x3b2e, + /* 0x76C0 */ + 0x6233, 0x4756, 0x7867, 0x4b5f, 0x314e, 0xf176, 0x3157, 0x7868, + 0x6234, 0x7869, 0x6236, 0x786a, 0x6235, 0x4570, 0x4039, 0x5d39, + 0x6237, 0x4c41, 0x6238, 0x3446, 0x4857, 0x6239, 0x786b, 0x623a, + 0xf178, 0x623b, 0xf179, 0x4c5c, 0x786c, 0x4c55, 0x443e, 0x416a, + 0x623d, 0x786d, 0x3d62, + /* 0x7700 */ + 0x3e4a, 0x6240, 0x623f, 0x623e, 0x487d, 0x786e, 0x3447, 0x3829, + 0xf17b, 0x786f, 0xf17c, 0x6246, 0x6243, 0x3f3f, 0x4c32, 0x6242, + 0x6244, 0x6245, 0x6241, 0xf17d, 0x7870, 0xf17e, 0x7871, 0x6247, + 0x6248, 0x442f, 0x3463, + /* 0x7740 */ + 0x4365, 0x7872, 0x6249, 0x7873, 0x7874, 0xf225, 0x624a, 0x624d, + 0x7875, 0x7876, 0xf226, 0x3f67, 0x7877, 0x4644, 0x624e, 0x4b53, + 0x624b, 0xf227, 0x624c, 0xf229, 0x6251, 0x7878, 0xf22a, 0xf22b, + 0x6250, 0x624f, + /* 0x7780 */ + 0x7879, 0x6253, 0x6252, 0x6254, 0x787a, 0xf22e, 0x6256, 0xf22f, + 0x6255, 0xf230, 0xf231, 0x4a4d, 0xf232, 0x787b, 0x3d56, 0x4e46, + 0x6257, 0x4637, 0x6258, 0x6259, 0x625d, 0x625b, 0x625c, 0x625a, + /* 0x77C0 */ + 0x625e, 0x625f, 0x6260, 0x6261, 0x4c37, 0x6262, 0xf233, 0xf234, + 0x787c, 0x4c70, 0x6263, 0xf235, 0x434e, 0xf236, 0x476a, 0x366b, + 0xf237, 0xf238, 0x433b, 0x6264, 0x363a, 0xf23a, 0x4050, 0xf23b, + 0xf23c, 0x6265, + /* 0x7800 */ + 0x3a3d, 0xf23e, 0xf23f, 0xf240, 0x6266, 0xf241, 0x6267, 0x3826, + 0x3a55, 0xf242, 0x6269, 0xf243, 0x4556, 0x3a56, 0x354e, 0xf244, + 0x787d, 0x4b24, 0x474b, 0x4557, 0x395c, + /* 0x7840 */ + 0x7921, 0x626b, 0xf245, 0x7922, 0x7923, 0x7924, 0x3e4b, 0xf246, + 0x7925, 0xf247, 0x4e32, 0x3945, 0x7926, 0x3827, 0x4823, 0x626d, + 0x626f, + /* 0x7880 */ + 0x386b, 0x626e, 0x4476, 0xf249, 0x6271, 0x3337, 0x626c, 0x486a, + 0x3130, 0xf24a, 0x3a6c, 0x4f52, 0x6270, 0xf24c, 0xf24d, 0xf24e, + 0x6272, 0xf24b, 0x4a4b, 0x4059, 0x6274, 0x792a, 0x6275, 0x7928, + 0x6273, 0x334e, 0xf24f, 0x627b, 0x627a, + /* 0x78C0 */ + 0x3c27, 0x627c, 0x6277, 0xf250, 0x627d, 0x6278, 0xf251, 0xf252, + 0x4858, 0x6276, 0x6279, 0xf253, 0x6322, 0xf254, 0xf255, 0x792b, + 0xf256, 0x6321, 0x4b61, 0x627e, 0x306b, 0x792c, 0x6324, 0x792e, + 0xf257, 0xf258, 0xf259, 0x6323, 0xf25a, + /* 0x7900 */ + 0x792d, 0x3e4c, 0x6325, 0x4143, 0xf25c, 0x6327, 0x6326, 0x6328, + 0xf25d, 0x792f, 0xf25f, 0x6268, 0x626a, 0x632a, 0x6329, 0x7930, + 0xf25e, 0x7931, 0x7932, 0x3c28, 0xf260, 0x4e69, 0x3c52, + /* 0x7940 */ + 0x632b, 0x3737, 0x7935, 0x7936, 0x3540, 0x3527, 0x3b63, 0xf261, + 0x4d34, 0x6331, 0x6330, 0x4144, 0x632d, 0xf262, 0x632f, 0xf263, + 0x793a, 0x3d4b, 0x3f40, 0x632e, 0x632c, 0x472a, 0x3e4d, 0xf265, + 0x493c, 0x3a57, 0xf266, 0x4578, 0x793e, 0x6332, 0x6333, + /* 0x7980 */ + 0x6349, 0x3658, 0x4f3d, 0x4135, 0x6334, 0x3252, 0x4477, 0x4a21, + 0xf267, 0xf268, 0xf269, 0x7942, 0xf26a, 0x6335, 0xf26b, 0x357a, + 0x6336, 0xf26c, 0x6338, 0x6339, 0x4729, 0x7943, 0x633a, 0xf26d, + 0x7944, 0x633b, 0x633c, 0xf26e, 0x3659, 0x3253, 0x4645, + /* 0x79C0 */ + 0x3d28, 0x3b64, 0xf26f, 0xf270, 0x7945, 0x633d, 0x7946, 0x3d29, + 0xf271, 0xf272, 0x324a, 0x4943, 0x7948, 0x633e, 0xf273, 0x486b, + 0x7949, 0x4145, 0x6341, 0x6342, 0x4769, 0x3f41, 0x633f, 0x4361, + 0x794a, 0x6340, 0x794b, 0x3e4e, 0x305c, + /* 0x7A00 */ + 0x3529, 0x794c, 0x6343, 0xf278, 0x4478, 0x6344, 0x4047, 0xf279, + 0x4c2d, 0xf27a, 0x4923, 0x6345, 0x6346, 0x4355, 0xf27b, 0x4e47, + 0xf27c, 0x6348, 0x6347, 0xf27e, 0x3c6f, 0x634a, 0x3070, 0x634d, + 0xf321, 0x794e, 0x634b, 0x3254, 0x374e, 0x634c, 0x3946, + /* 0x7A40 */ + 0x3972, 0x4a66, 0x634e, 0x4b54, 0xf322, 0x6350, 0xf323, 0x4051, + 0x314f, 0x323a, 0x302c, 0xf324, 0x634f, 0xf325, 0xf326, 0x794f, + 0xf327, 0xf328, 0x6351, 0x6352, 0x3e77, 0xf329, 0x6353, 0xf32a, + 0x334f, 0x7950, 0x6355, 0x376a, 0xf32b, 0x3566, 0xf32c, 0x6356, + 0x3675, 0x6357, 0x407c, + /* 0x7A80 */ + 0x464d, 0xf32d, 0x4060, 0x3a75, 0x7952, 0x6358, 0xf32e, 0xf32f, + 0x4362, 0x416b, 0x635a, 0x635c, 0x6359, 0x635b, 0x3722, 0x7953, + 0xf330, 0x635d, 0x3726, 0xf331, 0x3567, 0x4d52, 0x635f, 0x7955, + 0x6360, 0xf334, 0x312e, 0x7956, 0xf335, 0xf336, 0x6363, + /* 0x7AC0 */ + 0x3376, 0x6362, 0x6361, 0x6365, 0x635e, 0x6366, 0x4e29, 0xf338, + 0x6367, 0x7957, 0x6368, 0xf339, 0x5474, 0x636a, 0x6369, 0x636b, + 0x636c, 0x4e35, 0x636d, 0x706f, 0x3e4f, 0x636e, 0x636f, 0x3d57, + 0x4638, 0x6370, 0xf33a, 0xf33b, 0x4328, 0x7958, 0x6371, 0x433c, + 0x6372, 0xf33c, 0x3625, 0x513f, 0x435d, 0x3c33, 0x7959, 0x3448, + /* 0x7B00 */ + 0x6373, 0x6422, 0x6376, 0xf33f, 0x3568, 0x6375, 0x6424, 0x6374, + 0x3e50, 0x795a, 0x6378, 0x6379, 0x452b, 0x637a, 0x335e, 0x3f5a, + 0x4964, 0xf342, 0x637c, 0xf343, 0x4268, 0x795b, 0xf344, 0xf345, + 0xf346, 0x6377, 0x637b, 0x637d, 0x3a7b, 0x795c, 0xf341, + /* 0x7B40 */ + 0xf34a, 0x6426, 0x492e, 0x795d, 0x4826, 0x4579, 0x365a, 0x6425, + 0x6423, 0x795e, 0x4835, 0x637e, 0x435e, 0x457b, 0x457a, 0xf34c, + 0x3a76, 0x6438, 0x795f, 0xf34e, 0x6428, 0xf34f, 0x642a, 0xf350, + 0x642d, 0x7960, 0x642e, 0x7961, 0x642b, 0x642c, 0x7962, 0xf351, + 0x6429, 0x6427, 0xf34d, 0x6421, 0xf349, + /* 0x7B80 */ + 0x4a4f, 0x3255, 0x6435, 0x6432, 0x6437, 0xf354, 0xf355, 0x6436, + 0x4773, 0x4c27, 0x3b3b, 0x6430, 0x6439, 0x6434, 0xf356, 0x6433, + 0x642f, 0x7963, 0x6431, 0x3449, 0x433d, 0x407d, 0xf358, 0x4822, + 0x643e, 0xf359, 0x4824, 0xf35a, + /* 0x7BC0 */ + 0x4061, 0x643b, 0x484f, 0xf35b, 0x643f, 0x4a53, 0x435b, 0xf35c, + 0x643a, 0x643c, 0x643d, 0xf35f, 0xf360, 0x7965, 0x7966, 0xf361, + 0x6440, 0x3c44, 0x4646, 0x6445, 0x6444, 0x6441, 0xf362, 0x4f36, + 0xf363, 0x644a, 0x644e, 0x644b, + /* 0x7C00 */ + 0x6447, 0x7967, 0xf364, 0x6448, 0xf365, 0x644d, 0xf366, 0xf367, + 0x6442, 0x5255, 0x6449, 0x6443, 0x644c, 0x7969, 0x6452, 0x796a, + 0x344a, 0x644f, 0xf368, 0x6450, 0x6451, 0x6454, 0x7968, 0x796b, + 0x796c, 0x6453, 0x4876, 0x6455, 0x4e7c, 0x4a6d, + /* 0x7C40 */ + 0x645a, 0x6457, 0xf369, 0xf36a, 0x6456, 0x4052, 0x6459, 0x645b, + 0xf36b, 0x6458, 0x645f, 0xf36c, 0x645c, 0x796f, 0xf36d, 0x645d, + 0x6446, 0xf36e, 0x645e, 0x6460, 0xf36f, 0x6461, 0x7970, 0xf370, + 0xf371, 0xf372, 0x4a46, 0x6462, 0x7971, 0x4c62, + /* 0x7C80 */ + 0x364e, 0x3729, 0x6463, 0x4a34, 0x3f68, 0x4c30, 0x7972, 0x6464, + 0x4e33, 0x7973, 0x4774, 0x4146, 0x4734, 0x3d4d, 0x3040, 0x7974, + 0x6469, 0x6467, 0x6465, 0x3421, 0xf376, 0x3e51, 0x646a, 0x6468, + 0x6466, 0x646e, 0x646d, 0x646c, 0x646b, 0xf378, 0xf379, 0x646f, + 0x7975, 0x6470, 0x403a, 0xf37a, + /* 0x7CC0 */ + 0x6471, 0x6473, 0xf37c, 0x6472, 0xf37e, 0x3852, 0xf421, 0x4138, + 0x6475, 0x7976, 0x457c, 0xf423, 0x6474, 0x7977, 0x6476, 0x7978, + 0x4a35, 0x416c, 0x3947, 0x6477, 0xf425, 0x4e48, 0xf426, 0x6479, + 0x647a, 0x647b, 0xf428, 0x647c, 0x3b65, 0x647d, 0x374f, 0x356a, + /* 0x7D00 */ + 0x352a, 0x6521, 0xf429, 0x4c73, 0x3948, 0x647e, 0x7979, 0x797a, + 0xf42a, 0x6524, 0x4c66, 0x473c, 0x4933, 0xf42c, 0x797b, 0x3d63, + 0x6523, 0x3c53, 0x3949, 0x3b66, 0x3569, 0x4a36, 0x6522, 0x797c, + 0xf42d, 0x4147, 0x4b42, 0x3a77, 0x797d, 0x3b67, 0x445d, 0x6527, + 0x4e5f, 0x3a59, 0x797e, 0x6528, 0x3f42, 0x652a, 0x3e52, 0x3a30, + 0xf430, 0xf431, 0x6529, + /* 0x7D40 */ + 0xf432, 0x7a21, 0x3d2a, 0x383e, 0x4148, 0x6525, 0x652b, 0xf433, + 0x7a22, 0x6526, 0x3750, 0x652e, 0x6532, 0x376b, 0x7a23, 0x652d, + 0xf437, 0xf438, 0x6536, 0x7a24, 0x394a, 0x4d6d, 0x303c, 0x6533, + 0x356b, 0x6530, 0xf439, 0x6531, 0xf43a, 0x457d, 0x652f, 0x652c, + 0x3328, 0x4064, 0x3828, 0x7a25, 0x6538, 0xf43c, + /* 0x7D80 */ + 0x7a26, 0xf43e, 0xf43f, 0x6535, 0x7a27, 0xf440, 0x6537, 0x6534, + 0xf441, 0x3751, 0x4233, 0x6539, 0x416e, 0xf443, 0x6546, 0x7a28, + 0x6542, 0x653c, 0x7a29, 0xf444, 0xf445, 0x6540, 0x3c7a, 0x305d, + 0x653b, 0x6543, 0x6547, 0x394b, 0x4c56, 0x4456, 0x653d, 0xf446, + 0xf447, 0x6545, 0x653a, 0x433e, 0x653f, 0x303d, 0x4c4a, + /* 0x7DC0 */ + 0xf448, 0x7a2a, 0x653e, 0x365b, 0x486c, 0x7a2b, 0x416d, 0x4e50, + 0x3d6f, 0x656e, 0x7a2c, 0xf449, 0x6548, 0xf44a, 0x407e, 0x6544, + 0x6549, 0x654b, 0x4479, 0x654e, 0x7a2d, 0x654a, 0xf44b, 0x4a54, + 0x344b, 0x4c4b, 0x305e, 0xf44c, 0x654d, 0x4e7d, 0xf44d, 0x654c, + /* 0x7E00 */ + 0x316f, 0x466c, 0x654f, 0x7a30, 0x6556, 0x6550, 0x6557, 0xf451, + 0x7a31, 0x6553, 0x7a32, 0xf452, 0x477b, 0xf453, 0x3c4a, 0x6555, + 0xf454, 0x6552, 0x6558, 0x6551, 0x3d44, 0xf455, 0x7a2f, 0x4b25, + 0xf456, 0x3d4c, 0x6554, 0x6560, 0x655c, 0x655f, 0x655d, 0x6561, + 0x655b, 0x6541, 0x4053, + /* 0x7E40 */ + 0x484b, 0x655e, 0xf457, 0x6559, 0x7a34, 0x4121, 0x3752, 0x3d2b, + 0x7a35, 0x3f25, 0x4136, 0x6564, 0x6566, 0x6567, 0x6563, 0x6565, + 0x7a36, 0x655a, 0x6562, 0x656a, 0x6569, 0x7e7e, 0x4b7a, 0x372b, + 0xf458, 0xf459, 0x6568, 0x656c, 0x656b, 0x656f, 0xf45a, 0x6571, + /* 0x7E80 */ + 0x3b3c, 0x656d, 0xf45b, 0xf45c, 0x6572, 0x6573, 0x7a37, 0x6574, + 0x7a38, 0x657a, 0x453b, 0x6576, 0xf45e, 0x6575, 0x6577, 0x6578, + 0x6579, 0xf45f, 0xf460, 0x657b, 0x657c, + /* 0x7F00 */ + 0x344c, 0x657d, 0x657e, 0xf463, 0xf462, 0xf464, + /* 0x7F40 */ + 0xf465, 0xf466, 0x6621, 0x7a39, 0x6622, 0x6623, 0x6624, 0xf467, + 0x6625, 0x6626, 0xf46a, 0x6628, 0x6627, 0x6629, 0x662a, 0x662b, + 0xf46c, 0xf46d, 0xf46e, 0x662e, 0x662c, 0x662d, 0x3a61, 0x3753, + 0xf46f, 0x4356, 0x4833, 0x3d70, 0x474d, 0x486d, 0x662f, 0x586d, + 0xf470, 0xf471, + /* 0x7F80 */ + 0x6630, 0x6632, 0x4d65, 0x6631, 0x6634, 0x6633, 0x4d53, 0x6635, + 0x487e, 0xf473, 0x7a3b, 0x6636, 0xf476, 0x7a3c, 0x6639, 0xf477, + 0x6638, 0x6637, 0x663a, 0x3732, 0x4122, 0x3541, 0xf478, 0x663e, + 0x663b, 0x663c, 0x663f, 0x6640, 0x663d, 0x3129, 0x7a3d, + /* 0x7FC0 */ + 0x3227, 0xf47a, 0x6642, 0x6643, 0x6644, 0x4d62, 0x7a3e, 0xf47b, + 0x3d2c, 0x6646, 0x6645, 0x7a3f, 0x7a40, 0x3f69, 0x6647, 0xf47c, + 0xf47d, 0x6648, 0x6649, 0x3465, 0x7a41, 0x7a42, 0xf47e, 0x344d, + 0xf521, 0x664a, 0x664b, 0x7a43, 0x4b5d, 0x4d63, + /* 0x8000 */ + 0x4d54, 0x4f37, 0xf522, 0x394d, 0x664e, 0x3c54, 0x664d, 0xf524, + 0xf523, 0x664f, 0x3c29, 0xf525, 0x4251, 0xf526, 0x6650, 0x7a45, + 0x394c, 0xf527, 0x4c57, 0x6651, 0x6652, 0x6653, 0x6654, 0xf528, + 0x7a46, 0x6655, 0xf529, 0xf52a, 0x3c2a, 0x7a47, 0x4c6d, 0x7a48, + 0x6657, 0x7a49, 0x433f, 0x6656, + /* 0x8040 */ + 0xf52b, 0x6659, 0x6658, 0x665a, 0x403b, 0x665b, 0x665c, 0x4a39, + 0x665d, 0x416f, 0x665e, 0xf52c, 0x665f, 0x4e7e, 0x6662, 0xf52d, + 0x6661, 0x6660, 0x4430, 0xf52e, 0x6663, 0x3f26, 0x6664, 0xf52f, + 0x6665, 0x4f38, 0x6666, + /* 0x8080 */ + 0x6667, 0x6669, 0x6668, 0x4825, 0x4679, 0x4f3e, 0x4829, 0x666b, + 0x3e53, 0x492a, 0xf530, 0x666c, 0x666a, 0xf531, 0x344e, 0x3854, + 0x3b68, 0xf532, 0x486e, 0xf533, 0x382a, 0x4b43, 0x666f, 0x666d, + 0x394e, 0x394f, 0x3069, 0x3a68, 0xf534, 0x4759, + /* 0x80C0 */ + 0x305f, 0x6674, 0xf536, 0x4340, 0x7a4a, 0x4758, 0x425b, 0xf537, + 0x6676, 0x7a4b, 0xf538, 0x6672, 0x6675, 0x6670, 0x6673, 0x4b26, + 0x7a4c, 0x3855, 0x307d, 0x6671, 0xf539, 0x6678, 0x6679, 0x7a4d, + 0x4639, 0xf53c, 0x363b, 0xf53d, 0x6726, 0x473d, + /* 0x8100 */ + 0x3b69, 0x363c, 0x4048, 0x4f46, 0x4c2e, 0x6677, 0x4054, 0xf53b, + 0xf540, 0x7a4e, 0x3553, 0x667a, 0xf541, 0x667c, 0xf543, 0xf544, + 0x667b, 0xf545, 0x667d, 0x4326, 0x473e, 0xf53f, 0x4431, 0xf547, + 0x6723, + /* 0x8140 */ + 0x6722, 0x7a4f, 0x667e, 0x3f55, 0x4965, 0x6725, 0x6724, 0x3950, + 0x4f53, 0x6735, 0x7a50, 0x6729, 0x672a, 0x7a51, 0x7a52, 0xf549, + 0x3c70, 0x7a53, 0x6728, 0x3978, 0x6727, 0x672b, 0x4432, 0x4a22, + 0x4123, 0x425c, + /* 0x8180 */ + 0x672f, 0xf54b, 0x6730, 0x672c, 0xf54d, 0xf54e, 0x672d, 0x672e, + 0x3951, 0x6736, 0x6732, 0xf550, 0x4966, 0x4b6c, 0x4928, 0x6731, + 0x6734, 0x6733, 0x4b44, 0x6737, 0x6738, 0xf551, 0x4137, 0x6739, + 0x673b, 0x673f, 0x7a54, 0x673c, 0x673a, 0x473f, + /* 0x81C0 */ + 0x673d, 0xf552, 0x673e, 0xf553, 0x3232, 0x6745, 0x6740, 0x7a55, + 0x6741, 0x7a56, 0x6742, 0x4221, 0xf554, 0x7a57, 0x6744, 0x6743, + 0x6746, 0xf555, 0x6747, 0x6748, 0x3f43, 0xf557, 0x3269, 0x6749, + 0x4e57, 0x3c2b, 0xf559, 0x3d2d, 0x3b6a, 0x4357, 0x674a, 0x674b, + 0x3131, 0xf55b, 0x674c, 0xf55c, + /* 0x8200 */ + 0x674d, 0x674e, 0xf55e, 0x674f, 0x6750, 0x363d, 0x5a2a, 0x6751, + 0x4065, 0x6752, 0x3c4b, 0x6753, 0x5030, 0x6754, 0x4a5e, 0x345c, + 0xf560, 0x4124, 0x3d58, 0x4971, 0x3d2e, 0xf561, 0xf562, 0x6755, + 0x3952, 0x6756, 0x484c, 0x6764, 0xf564, 0x6758, 0xf565, 0x4249, + 0x4775, 0x383f, 0x6757, 0x4125, 0xf566, + /* 0x8240 */ + 0x6759, 0xf569, 0xf567, 0x447a, 0xf568, 0xf56b, 0xf56d, 0xf56f, + 0x675b, 0x675a, 0x675d, 0xf571, 0x675c, 0x675e, 0x7a5b, 0x6760, + 0xf572, 0x675f, 0x344f, 0x6761, 0x6762, 0x6763, 0x3a31, 0x4e49, + 0x6765, 0x3f27, 0x7a5c, 0x3170, 0x6766, 0x6767, 0xf576, 0xf578, + 0x6768, 0xf579, + /* 0x8280 */ + 0xf57a, 0xf57b, 0x3072, 0x6769, 0x7a5e, 0x676a, 0xf57c, 0x4967, + 0x3c47, 0x676c, 0x7a5f, 0x7a60, 0x7a61, 0x3329, 0x3032, 0xf57d, + 0xf57e, 0x7a62, 0x676b, 0x676e, 0x474e, 0x7a63, 0x3f44, 0x3256, + 0xf621, 0x4b27, 0xf622, 0x7a64, 0x375d, 0x365c, 0xf623, 0x676d, + 0xf624, 0x326a, 0x7a65, 0x7a66, + /* 0x82C0 */ + 0x3423, 0x7a67, 0x3171, 0x6772, 0x4e6a, 0x425d, 0x7a68, 0x4944, + 0x677e, 0x3257, 0x677c, 0x677a, 0x6771, 0x676f, 0xf625, 0x6770, + 0x3c63, 0x366c, 0x4377, 0xf626, 0x4651, 0x3151, 0x6774, 0x6773, + 0xf627, 0x6779, 0x6775, 0x6778, 0x7a69, 0x7a6a, + /* 0x8300 */ + 0x7a6b, 0x7a6c, 0x4c50, 0x6777, 0x3258, 0x337d, 0x677b, 0xf628, + 0xf629, 0x677d, 0xf62a, 0x3754, 0x6823, 0x682c, 0x682d, 0xf62c, + 0x302b, 0xf62d, 0x7a6e, 0x6834, 0x3071, 0x682b, 0x7a6f, 0x682a, + 0xf62e, 0x6825, 0x6824, 0x6822, 0x6821, 0x4363, 0x427b, 0x6827, + 0x7a70, 0xf62f, + /* 0x8340 */ + 0x6826, 0x7a71, 0xf630, 0x6829, 0x7a72, 0x4170, 0x3755, 0x3141, + 0x6828, 0x7a73, 0x3953, 0xf62b, 0x7a74, 0xf631, 0x4171, 0x7a6d, + 0xae4a, 0x683a, 0x683b, 0x3259, 0x322e, 0x6838, 0x7a75, 0xf633, + /* 0x8380 */ + 0x682e, 0x7a76, 0x6836, 0x683d, 0x6837, 0xf636, 0x6835, 0x7a77, + 0x6776, 0xf637, 0xf638, 0x6833, 0x7a78, 0x682f, 0xf639, 0xf63a, + 0x3450, 0x6831, 0x683c, 0x6832, 0x7a79, 0x683e, 0x7a7a, 0x6830, + 0x477c, 0x4d69, 0x6839, 0x684f, 0x7a7b, + /* 0x83C0 */ + 0x7a7c, 0x6847, 0x3f7b, 0x7a7d, 0xf63b, 0x3546, 0x365d, 0x6842, + 0x7a7e, 0xf63c, 0x7b21, 0x325b, 0xf63d, 0x3e54, 0x6845, 0x3a5a, + 0xf63e, 0x4551, 0x684a, 0x7b22, 0xf63f, 0x4a6e, 0x7b23, 0x6841, + 0x325a, 0x3856, 0x4929, 0x684b, 0x683f, 0x6848, 0xf640, 0x6852, + 0x6843, + /* 0x8400 */ + 0x7b24, 0x6844, 0x463a, 0x7b25, 0x6849, 0x7b26, 0x6846, 0x4b28, + 0x684c, 0x3060, 0xf641, 0xf642, 0x6840, 0xf643, 0xf645, 0x684e, + 0x684d, 0x476b, 0x6854, 0x685f, 0x337e, 0x6862, 0x6850, 0xf646, + 0x6855, 0x4d6e, + /* 0x8440 */ + 0x685e, 0x7b28, 0x4d55, 0xf647, 0x4e2a, 0xf648, 0xf649, 0xf64a, + 0x4378, 0xf64b, 0xf64c, 0x336b, 0xf64d, 0x7b29, 0x4972, 0x6864, + 0x4621, 0xf64f, 0x3031, 0x685d, 0x6859, 0x4172, 0x6853, 0x685b, + 0x6860, 0x7b2a, 0x472c, 0x7b2b, 0x302a, 0xf650, 0x6858, 0xf651, + 0x6861, 0x4978, 0xf652, + /* 0x8480 */ + 0xf653, 0x685c, 0x6857, 0x7b2c, 0x3e55, 0x3d2f, 0x3c2c, 0xf656, + 0x4c58, 0x4947, 0x7b2d, 0x6867, 0x6870, 0xf657, 0x685a, 0x7b2e, + 0x3377, 0x7b2f, 0x3e78, 0x6865, 0x7b30, 0x686a, 0x4173, 0xf658, + 0x6866, + /* 0x84C0 */ + 0x7b31, 0x686d, 0x7b32, 0x435f, 0x686e, 0x4d56, 0x6863, 0x3338, + 0x6869, 0xf65a, 0xf65b, 0x686c, 0x4c2c, 0xf65c, 0x686f, 0x6868, + 0x686b, 0xf655, 0xf65e, 0xf65f, 0x4b29, 0x4f21, 0xf660, 0xf661, + 0xf662, 0x6873, 0xf663, 0x687a, 0xf664, 0x6872, + /* 0x8500 */ + 0x3c43, 0x6851, 0xf665, 0x4a4e, 0x4c22, 0x6879, 0x6878, 0x6874, + 0x6875, 0x3136, 0xf666, 0x7b35, 0x6877, 0x6871, 0x7b36, 0xf667, + 0xf668, 0x4455, 0xf669, 0x6876, 0x307e, 0x7b37, 0x7b34, 0xf66a, + 0x4222, 0x4a43, 0xf66f, + /* 0x8540 */ + 0x687b, 0x6921, 0x4859, 0x687e, 0x3e56, 0x3c49, 0x6923, 0x363e, + 0xf66b, 0xf670, 0xf671, 0x6924, 0x4979, 0x687d, 0x7b38, 0x6856, + 0xf672, 0xf673, 0xf674, 0x687c, 0x7b39, 0x4f4f, 0x4622, 0x4973, + 0x692b, 0xf66c, 0x6931, 0x7b3c, 0xf676, 0xf677, 0x6932, 0xf678, + /* 0x8580 */ + 0x6925, 0xf679, 0x4776, 0xf67a, 0x692f, 0x6927, 0x6929, 0x7b3d, + 0x7b3e, 0x6933, 0x6928, 0xf67b, 0x692c, 0x3172, 0x4665, 0x692d, + 0x6930, 0xf67c, 0xf67d, 0x7b3f, 0x6926, 0x4126, 0x692a, 0x3b27, + 0x3f45, 0x3730, 0x4c74, 0x7b3b, 0x4c79, 0x3d72, 0x7b40, 0xf723, + 0x6937, 0x6935, 0xf724, + /* 0x85C0 */ + 0x4f4e, 0xf725, 0x6934, 0xf726, 0x7b41, 0x4d75, 0x7b42, 0x6936, + 0x6938, 0x6939, 0xf727, 0xf728, 0x693c, 0x693a, 0xf729, 0xf72a, + 0x4623, 0x693b, 0xf72b, 0x484d, 0x692e, 0x7b43, 0xf72c, 0x3d73, + 0x693d, 0x6942, 0x4174, 0x6941, 0x7b45, + /* 0x8600 */ + 0xf72d, 0x6922, 0x7b46, 0x7b47, 0x6943, 0x4149, 0x693e, 0x6940, + 0x7b48, 0xf72e, 0x7b44, 0x693f, 0x5d31, 0x5d22, 0x7b4a, 0x6945, + 0xf72f, 0xf730, 0x6944, 0xf731, 0xf732, 0x7b4b, 0x4d76, 0x623c, + 0x6946, 0x7b4c, 0xf734, 0xf735, 0x6947, + /* 0x8640 */ + 0xf737, 0x2f68, 0x6948, 0x3857, 0x3554, 0xf739, 0x694a, 0x515d, + 0xf73a, 0x7b4d, 0x3575, 0x7b4e, 0x4e3a, 0x3673, 0x694b, 0x7b50, + 0x694c, 0x436e, 0x7b52, 0xf73b, 0x694d, 0x7b53, 0xf73c, 0x467a, + 0xf73d, 0x303a, + /* 0x8680 */ + 0xf73e, 0xf73f, 0x3263, 0x6952, 0x6953, 0xf740, 0xf741, 0x694e, + 0x3b3d, 0x7b54, 0xf742, 0xf743, 0x694f, 0x4742, 0xf744, 0x6950, + 0x6951, 0x695b, 0x6955, 0x6958, 0xf746, 0xf747, 0x6954, 0x7b55, + /* 0x86C0 */ + 0xf748, 0xf749, 0x6956, 0x6957, 0x3c58, 0x6959, 0x4341, 0x3756, + 0x3342, 0xf74a, 0x695c, 0xf74b, 0xf74c, 0x333f, 0x6961, 0x695d, + 0x6960, 0xf74d, 0x483a, 0xf74e, 0x695e, 0x695f, 0x4948, 0x485a, + 0x6962, 0x427d, 0x696c, 0x7b56, 0x6968, 0x7b57, 0x7b58, 0x326b, + /* 0x8700 */ + 0x6966, 0x4b2a, 0x6967, 0xf750, 0x6964, 0xf751, 0x6965, 0x696a, + 0x696d, 0x7b59, 0x696b, 0xf752, 0xf753, 0x6969, 0x6963, 0xf754, + 0x4358, 0xf755, 0x6974, 0x4c2a, 0xf756, 0xf757, 0xf758, 0x6972, + 0x6973, 0xf759, 0x696e, 0x6970, 0xf75a, 0x6971, 0xf75b, 0x696f, + /* 0x8740 */ + 0xf75c, 0xf75d, 0x4066, 0x4f39, 0x6978, 0x6979, 0xf75e, 0x6a21, + 0x3f2a, 0x697b, 0xf75f, 0x697e, 0x6976, 0x6975, 0x6a22, 0xf760, + 0xf761, 0x325c, 0x697c, 0x6a23, 0x697d, 0x7b5a, 0xf762, 0x697a, + 0x4433, 0x6977, 0xf763, 0x4768, + /* 0x8780 */ + 0x6a27, 0x7b5b, 0x7b5c, 0xf767, 0xf768, 0x4d3b, 0xf769, 0x6a26, + 0xf76a, 0x6a25, 0xf766, 0x6a2e, 0x7b5d, 0x7b5e, 0x6a28, 0x6a30, + 0x7b5f, 0x4d66, 0x6a33, 0x6a2a, 0xf76d, + /* 0x87C0 */ + 0x6a2b, 0xf76f, 0x6a2f, 0x6a32, 0x6a31, 0x6a29, 0xf770, 0x6a2c, + 0x6a3d, 0x7b61, 0xf772, 0x6a36, 0xf774, 0xf775, 0xf776, 0xf777, + 0xf778, 0x7b62, 0xf779, 0x6a34, 0x6a35, 0xf771, 0x6a3a, 0x6a3b, + 0x332a, 0x3542, 0x6a39, + /* 0x8800 */ + 0xf77a, 0xf77b, 0x6a24, 0x7b63, 0x7b64, 0xf77c, 0x6a38, 0x6a3c, + 0x6a37, 0x7b65, 0x6a3e, 0xf77d, 0x7b66, 0x6a40, 0x6a3f, 0x7b67, + 0x6a42, 0x6a41, 0x695a, 0x6a46, 0xf77e, 0xf821, 0x6a43, 0xf822, + 0x6a44, 0x6a45, 0x6a47, 0xf823, + /* 0x8840 */ + 0x376c, 0x6a49, 0x6a48, 0x3d30, 0xf825, 0x3954, 0x5e27, 0x6a4a, + 0x3d51, 0x3339, 0xf826, 0x6a4b, 0x3152, 0x3e57, 0x6a4c, 0xf827, + 0x3955, 0x6a4d, 0x3061, 0xf828, 0x493d, 0xf82b, 0x6a4e, 0xf82d, + 0x3f6a, 0x6a55, 0x6a52, 0x436f, 0x6a53, 0x6a50, 0x365e, + /* 0x8880 */ + 0x6a4f, 0x6a56, 0x3736, 0x425e, 0x6a5c, 0x6a58, 0x4235, 0x6a57, + 0x7b68, 0x6a5a, 0x6a51, 0xf82e, 0x6a5b, 0x6a5d, 0x7b69, 0x486f, + 0x6a59, 0x6a5e, 0x6a60, 0x3853, 0x6a54, 0x3041, 0xf82f, 0xf830, + 0xf831, 0x6a5f, + /* 0x88C0 */ + 0xf832, 0x3a5b, 0x4e76, 0x6a61, 0x6a62, 0x4175, 0x7b6a, 0x7b6b, + 0x4e22, 0xf835, 0xf833, 0xf836, 0x6a63, 0x4d35, 0x6a64, 0x6a65, + 0xf837, 0x4a64, 0x6a66, 0x3a40, 0x4e23, 0x6a6b, 0xf838, 0xf839, + 0x6a6c, 0x3e58, 0x6a6a, 0x7b6d, 0x4d67, 0x6a67, 0x6a69, 0x403d, + 0x3f7e, + /* 0x8900 */ + 0xf83b, 0x6a68, 0x6a6d, 0x4a23, 0x6a6f, 0x6a6e, 0x336c, 0x4b2b, + 0x6a70, 0x7b70, 0x7b71, 0x7b72, 0x7b6e, 0x6a7c, 0x6a72, 0x6a73, + 0x7b73, 0x6a74, 0x6a75, 0x7b74, 0x7b75, 0x6a79, 0xf83d, 0x6a7a, + 0x7b76, 0x6a78, + /* 0x8940 */ + 0x7b77, 0x6a76, 0xf83f, 0x6a71, 0x6a77, 0xf840, 0xf841, 0x6a7b, + 0x7037, 0x3228, 0x6a7e, 0x365f, 0x6a7d, 0xf844, 0x6b22, 0x6b21, + 0x6b24, 0x6b23, 0x6b25, 0x3d31, 0x6b26, 0x6b27, 0x6b28, 0x403e, + /* 0x8980 */ + 0xf845, 0x4d57, 0x6b29, 0x4a24, 0x4746, 0x6b2a, 0xf846, 0x6b2b, + 0x382b, 0x352c, 0xf847, 0x6b2c, 0x7b78, 0x3b6b, 0x4741, 0x6b2d, + 0x3350, 0xf848, 0x6b2e, 0x6b30, 0x4d77, 0x6b2f, 0x3f46, 0x6b31, + 0x6b32, 0xf849, 0x6b33, 0x3451, 0xf84a, 0x6b34, 0x6b35, 0x6b36, + /* 0x89C0 */ + 0x6b37, 0x3351, 0x7b7a, 0xf84b, 0xf84c, 0x6b38, 0x6b39, 0x6b3a, + 0x3272, 0x7b7b, 0x3f28, 0x6b3b, 0xf84d, 0xf84f, 0xf850, 0x6b3c, + 0x7b7c, 0x6b3d, 0xf851, 0xf852, + /* 0x8A00 */ + 0x3840, 0x447b, 0x6b3e, 0x3757, 0x3f56, 0x6b41, 0x4624, 0x6b40, + 0xf854, 0x7b7d, 0x3731, 0xf855, 0x7b7e, 0x6b3f, 0x4277, 0x352d, + 0x6b42, 0x6b43, 0x3e59, 0xf857, 0x7c21, 0x376d, 0x6b44, 0x4b2c, + 0x405f, 0x3576, 0x4c75, 0x414a, 0xf858, 0x6b45, 0x7c22, 0x3f47, + 0x4370, 0x3e5a, 0xf859, + /* 0x8A40 */ + 0x6b46, 0xf85a, 0x6b49, 0x7c23, 0x6b4a, 0xf85b, 0x7c24, 0x3a3e, + 0x4242, 0x6b48, 0x3e5b, 0x493e, 0xf85c, 0x6b47, 0x7c25, 0x3b6c, + 0x3153, 0x7c26, 0x6b4e, 0x3758, 0x3b6e, 0x3b6d, 0x4f4d, 0x6b4d, + 0x6b4c, 0x4127, 0x354d, 0x4f43, 0x333a, 0x3e5c, 0x7c27, 0x7c28, + 0x6b4b, + /* 0x8A80 */ + 0x6b50, 0x6b51, 0x6b4f, 0x3858, 0x4d40, 0x3b6f, 0x4727, 0xf85e, + 0x6b54, 0x4040, 0x4342, 0x4d36, 0x6b57, 0x386c, 0x403f, 0x6b53, + 0x6b58, 0x386d, 0x6b55, 0x6b56, 0x7c29, 0x6b52, 0x4062, 0x4649, + 0xf85d, 0x432f, 0x325d, 0xf85f, 0x4870, 0x3543, 0xf860, 0x4434, + /* 0x8AC0 */ + 0x6b5b, 0x6b59, 0x434c, 0x4041, 0x3452, 0x6b5a, 0x3f5b, 0x7c2a, + 0x4e4a, 0x4f40, 0xf861, 0x6b5c, 0x6b67, 0x4435, 0x6b66, 0x7c2b, + 0x6b63, 0x6b6b, 0x6b64, 0x6b60, 0x447c, 0x6b5f, 0x6b5d, 0x4d21, + 0x3b70, 0x6b61, 0x6b5e, 0x7c2c, 0x7c2d, 0x6b65, 0x3d74, 0x3841, + 0xf862, 0x427a, + /* 0x8B00 */ + 0x4b45, 0x315a, 0x3062, 0x4625, 0xf865, 0x6b69, 0xf864, 0x6b68, + 0xf866, 0x4666, 0x6b6d, 0x6b62, 0x6b6c, 0x6b6e, 0x382c, 0x6b6a, + 0x3956, 0xf867, 0x3c55, 0xf868, 0x6b6f, 0x4d58, 0x6b72, 0x6b75, + 0x6b73, 0x4935, 0xf869, 0x6b70, 0x3660, 0x6b74, + /* 0x8B40 */ + 0x6b76, 0xf86a, 0x7c31, 0x6b7a, 0x6b77, 0x6b79, 0x6b78, 0xf86c, + 0x7c32, 0x6b7b, 0x3c31, 0x7c33, 0x6b7d, 0x6b7c, 0x4968, 0xf86d, + 0x6c21, 0x3759, 0x7c34, 0x6b7e, 0x6c22, 0x6c23, 0x3544, 0x6641, + 0x3e79, 0x6c24, 0xf86e, 0x386e, 0x6c25, 0xf86f, + /* 0x8B80 */ + 0x6c26, 0xf870, 0x3b3e, 0x5a4e, 0xf871, 0x6c27, 0x6c28, 0x3d32, + 0x6c29, 0x6c2a, 0xf872, 0xf873, 0x6c2b, 0x6c2c, 0x6c2d, 0xf874, + 0x7c35, 0xf875, + /* 0x8C00 */ + 0x432b, 0xf876, 0x6c2e, 0xf878, 0x6c30, + /* 0x8C40 */ + 0x6c2f, 0xf87b, 0x4626, 0xf87c, 0x6c31, 0x7c36, 0x4b2d, 0x6c32, + 0x6c33, 0xf87d, 0x6c34, 0xf87e, 0x6c35, 0xf921, 0x465a, 0x3e5d, + 0x6c36, 0x7c37, 0xf922, 0x396b, 0x502e, 0x6c37, 0xf923, 0xf924, + 0x6c38, 0x493f, 0x6c39, 0x6c41, + /* 0x8C80 */ + 0x6c3a, 0x6c3c, 0x6c3b, 0x6c3d, 0x4b46, 0x6c3e, 0x6c3f, 0xf927, + 0xf926, 0x6c40, 0x6c42, 0xf928, 0xf92a, 0x332d, 0x4467, 0x4969, + 0x3a62, 0x3957, 0xf92b, 0x494f, 0x325f, 0x484e, 0x6c45, 0x3453, + 0x4055, 0x6c44, 0x6c49, 0x4379, 0x4c63, 0x6c47, 0x6c48, 0x352e, + 0x6c4a, 0x4763, 0x425f, 0x4871, 0x453d, 0x6c46, 0x4b47, + /* 0x8CC0 */ + 0x326c, 0x6c4c, 0x4f28, 0x4442, 0x4f45, 0x3b71, 0x6c4b, 0x4231, + 0x6c5c, 0x4128, 0x4678, 0x4950, 0xf92d, 0xf92c, 0xf92e, 0x6c4f, + 0x3b3f, 0x3b72, 0x3e5e, 0x4765, 0x7c39, 0x382d, 0x6c4e, 0x6c4d, + 0x496a, 0x3c41, 0x4552, 0xf930, 0xf931, 0x7c3a, 0x7c3b, 0x6c51, + 0x6c52, 0x3958, 0x6c50, 0x7c3c, + /* 0x8D00 */ + 0x6c53, 0x6c54, 0x6c56, 0x4223, 0xf933, 0x6c55, 0x3466, 0x6c58, + 0xf934, 0x6c57, 0x6c59, 0x7c3e, 0x6c5b, 0x6c5d, 0x6c5e, 0x7c3f, + /* 0x8D40 */ + 0x4056, 0x3c4f, 0x6c5f, 0x3352, 0xf935, 0x6c60, 0x4176, 0x6c61, + 0x6c62, 0x496b, 0x352f, + /* 0x8D80 */ + 0x6c63, 0xf936, 0x4436, 0x315b, 0xf937, 0x6c64, 0x3c71, 0xf938, + 0x3f76, 0x7c40, 0x422d, 0x6c67, 0x6c66, + /* 0x8DC0 */ + 0x6c65, 0xf93a, 0xf93b, 0x6c6d, 0x6c6b, 0x7c41, 0x6c68, 0x7c42, + 0x6c6a, 0x7c43, 0xf93c, 0x6c69, 0x6c6c, 0x3577, 0x6c70, 0x4057, + 0x6c71, 0x3859, 0x6c6e, 0x6c6f, 0xf93d, 0x4f29, 0x4437, 0x4129, + 0x6c72, 0xf940, 0x6c75, + /* 0x8E00 */ + 0xf941, 0x6c73, 0x6c74, 0x4d59, 0xf93e, 0x4627, 0x6c78, 0xf943, + 0xf944, 0x6c76, 0x6c77, 0x6c79, 0x7c44, 0xf945, 0xf946, 0x7c45, + 0xf947, 0x6d29, 0x6c7c, 0x6c7d, 0x6c7b, 0xf94a, 0xf94b, 0x7c46, + /* 0x8E40 */ + 0x6c7a, 0x447d, 0x6d21, 0x6d25, 0x6d22, 0x6c7e, 0xf94c, 0x6d23, + 0x6d24, 0xf94d, 0x6d2b, 0x6d26, 0x4058, 0x6d28, 0xf94e, 0x6d2a, + 0x6d27, 0xf94f, 0xf950, 0xf951, 0x7c47, 0x6d2d, 0x3d33, 0x6d2c, + 0x7c48, 0x6d2e, + /* 0x8E80 */ + 0x6d2f, 0x6d32, 0x6d31, 0x6d30, 0x6d34, 0x6d33, 0x4c76, 0x6d36, + 0x6d35, 0x6d37, 0xf952, 0x6d38, 0xf953, 0x6d3a, 0x6d39, 0x3f48, + 0x6d3b, 0xf954, 0x366d, 0x6d3c, 0x6d3e, 0xf955, 0xf956, 0xf957, + 0xf958, 0x6d3f, + /* 0x8EC0 */ + 0x7c4a, 0x6d40, 0x6d3d, 0x6d41, 0x3c56, 0x6d42, 0x3530, 0x3733, + 0xf95a, 0x382e, 0xf95b, 0x6d43, 0x4670, 0x453e, 0x6d44, 0x6d47, + 0x3c34, 0xf95d, 0x7c4c, 0x6d46, 0x6d45, 0x375a, 0x6d48, + /* 0x8F00 */ + 0xf95f, 0x3353, 0x6d4a, 0xf960, 0x3a5c, 0x6d49, 0x6d52, 0x6d4c, + 0x6d4e, 0x4a65, 0x6d4b, 0xf961, 0x6d4d, 0x6d51, 0x6d4f, 0x3531, + 0x7c4d, 0x6d50, 0x6d53, 0x475a, 0x4e58, 0xf962, 0x7c4e, 0x3d34, + 0x6d54, 0x7c4f, 0x4d22, 0x6d56, 0x6d55, 0x6d59, 0x4d41, + /* 0x8F40 */ + 0xf963, 0x6d58, 0x336d, 0x6d57, 0x6d5c, 0x6d5b, 0xf964, 0x6d5a, + 0x4532, 0x6d5d, 0x7c50, 0x6d5e, 0xf965, 0x6d5f, 0x396c, 0x3725, + 0x6d60, 0x6d61, 0x6d62, + /* 0x8F80 */ + 0x3f49, 0x6d63, 0x3c2d, 0x6d64, 0x6d65, 0xf967, 0x7c52, 0x5221, + 0x517e, 0x6d66, 0x6570, 0x6d67, 0x4324, 0x3f2b, 0x4740, 0xf968, + 0x7c53, 0xf96a, 0x6d68, 0x4a55, 0x4454, 0x397e, 0x4329, + /* 0x8FC0 */ + 0xf96c, 0x312a, 0x4b78, 0x3f57, 0xf96d, 0xf96f, 0xf970, 0x375e, + 0x3661, 0xf971, 0x4a56, 0xf972, 0x6d69, 0xf973, 0x6d6b, 0x7c54, + 0x6d6a, 0x3260, 0x7c55, 0x4676, 0x6d6c, 0x4777, 0x4533, 0x7c56, + 0x6d6d, 0x3d52, 0xf974, 0x6d6f, 0xf975, 0x4c42, 0x6d7e, 0x6d71, + 0x6d72, 0xf976, 0x4449, + /* 0x9000 */ + 0x4260, 0x4177, 0xf977, 0x4628, 0x6d70, 0x3555, 0x7c57, 0x6d79, + 0xf978, 0x6d76, 0x6e25, 0x4629, 0x4360, 0x6d73, 0x447e, 0x4553, + 0x6d74, 0x6d78, 0x3f60, 0x4767, 0x444c, 0x4042, 0x6d77, 0x422e, + 0x4224, 0x6d75, 0x3029, 0x4f22, 0x6d7a, 0x7c58, 0x4261, 0x3d35, + 0x3f4a, 0x6d7c, 0x6d7b, 0xf979, 0x306f, 0x6d7d, 0x492f, 0x6e27, + /* 0x9040 */ + 0x465b, 0x3f6b, 0xf97b, 0xf97c, 0x4359, 0x3678, 0x6e26, 0x4d37, + 0x313f, 0x4a57, 0x3261, 0x6e21, 0x6e22, 0x6e23, 0x6e24, 0x463b, + 0x4323, 0x3063, 0x6e28, 0x6e29, 0x7423, 0x423d, 0xf97d, 0x6e2a, + 0x3173, 0x414c, 0x382f, 0x4d5a, 0x6e2b, 0x452c, 0x4178, 0x3c57, + 0x6e2c, 0x6e2f, 0x3d65, 0x6e2d, 0x412b, 0x412a, 0x3064, 0x4e4b, + 0x6e31, 0x4872, + /* 0x9080 */ + 0x6e33, 0x6e32, 0x6e30, 0x6364, 0x3454, 0xfa22, 0x6d6e, 0x7c5a, + 0x6e35, 0x6e34, 0xfa23, 0x6e36, 0xfa24, 0x4d38, 0x7c5b, 0x7c5c, + 0x7c5d, 0x7c5e, 0xfa26, 0x7c5f, 0x4661, 0x4b2e, 0x6e37, 0x3c59, + 0x6e38, 0xfa28, 0x6e39, 0x7c60, 0x6e3a, 0xfa29, 0x4521, 0x7c61, + /* 0x90C0 */ + 0x306a, 0xfa2a, 0x7c62, 0x7c63, 0x7c64, 0xfa2b, 0x3959, 0x4f3a, + 0x7c65, 0x6e3e, 0xfa2d, 0x7c66, 0x7c67, 0xfa2e, 0x3734, 0x6e3b, + 0x6e3c, 0x4974, 0xfa33, 0x3354, 0x7c68, 0xfa31, 0x7c69, 0x4d39, + 0xfa30, 0x363f, 0x4554, 0xfa34, 0xfa35, + /* 0x9100 */ + 0xfa32, 0x6e3f, 0xfa36, 0xfa37, 0x6e40, 0x7c6b, 0x7c6c, 0x7c6d, + 0xfa38, 0x6e41, 0xfa39, 0xfa3a, 0x7c6e, 0x7c6f, 0x7c70, 0x4522, + 0x7c71, 0x6e43, 0x7c72, 0x6e42, 0x7c73, 0xfa3b, 0xfa3c, 0xfa3d, + 0x7c74, + /* 0x9140 */ + 0xfa3e, 0xfa3f, 0x7c75, 0x4653, 0x6e44, 0x3d36, 0x3c60, 0x475b, + 0x4371, 0x3c72, 0x3f6c, 0x6e45, 0xfa40, 0x6e46, 0xfa41, 0x7c76, + 0xfa42, 0x3f5d, 0x6e47, 0xfa43, 0x6e48, 0x6e49, 0x4d6f, 0x3d37, + 0x6e4b, 0x6e4a, 0xfa44, 0x395a, 0x3973, 0x3b40, 0xfa45, + /* 0x9180 */ + 0x6e4e, 0x7c77, 0xfa46, 0x3d66, 0x6e4d, 0x6e4c, 0x4269, 0xfa47, + 0x386f, 0x4043, 0x4830, 0x3d39, 0x7c78, 0x6e4f, 0x3e5f, 0xfa48, + 0x6e52, 0x6e50, 0x7c79, 0xfa49, 0x6e51, 0x7c7a, 0xfa4a, 0x6e54, + 0x6e53, 0xfa4b, 0x3e7a, 0x6e55, 0x7c7b, + /* 0x91C0 */ + 0x6e56, 0x6e57, 0xfa4c, 0xfa4d, 0x4850, 0x3a53, 0x3c61, 0x6e58, + 0x6e59, 0x4e24, 0x3d45, 0x4c6e, 0x4e4c, 0x6e5a, 0x3662, 0x6e5b, + 0x7c7c, 0x4523, 0xfa4e, 0x6e5e, 0x3378, 0x3f4b, 0x6e5c, 0x6e5d, + 0x4460, 0x7c7e, 0x7d21, 0x4b55, 0x367c, 0xfa51, 0x7d22, 0xfa52, + 0x7d23, 0x6e60, 0x6e61, 0x7c7d, 0x6e5f, 0x6e63, + /* 0x9200 */ + 0xfa53, 0x7d24, 0xfa54, 0x465f, 0x3343, 0x7d25, 0x6e67, 0x6e64, + 0x6e66, 0xfa55, 0xfa56, 0x6e62, 0x6f4f, 0x6e65, 0xfa58, 0x4e6b, + 0x385a, 0x7d26, 0x7d27, 0x7d28, 0x7d29, 0x6e6f, + /* 0x9240 */ + 0x7d2a, 0xfa59, 0x7d2b, 0x4534, 0x6e6a, 0xfa5a, 0x6e6d, 0x6e6b, + 0xfa5b, 0x6e70, 0xfa5c, 0x7d2c, 0x6e71, 0xfa5d, 0xfa5e, 0x6e69, + 0xfa5f, 0x6e76, 0x3174, 0x6e68, 0xfa60, 0xfa61, 0x482d, 0x6e6c, + 0xfa62, 0x3e60, 0xfa63, 0xfa64, 0x395b, 0x7d2d, 0xfa67, 0xfa68, + 0x4b48, 0xfa69, + /* 0x9280 */ + 0x3664, 0x3d46, 0x463c, 0x7d2e, 0xfa6a, 0xfa6b, 0x412d, 0x6e74, + 0x6e6e, 0x6e73, 0xfa6c, 0x4c43, 0xfa6d, 0x4438, 0x6e75, 0x6e72, + 0xfa6e, 0xfa6f, 0xfa70, 0x412c, 0xfa73, 0x6e79, 0x6e78, 0xfa74, + /* 0x92C0 */ + 0xfa75, 0x7d2f, 0xfa76, 0x7d30, 0x7d31, 0xfa77, 0x6e77, 0xfa78, + 0x4b2f, 0x7d32, 0xfa79, 0xfa7a, 0x7d33, 0x3d7b, 0xfa7b, 0xfa7c, + 0x6e7a, 0x4a5f, 0x3154, 0x4946, 0x4372, 0xfb22, 0x3578, 0xfb23, + 0x6e7c, 0xfb24, 0x395d, 0x7d34, + /* 0x9300 */ + 0xfb25, 0x7d35, 0x3b2c, 0xfb26, 0x6e7b, 0x3f6d, 0xfa7d, 0xfb27, + 0x3f6e, 0x6f21, 0x6f23, 0xfb28, 0xfb29, 0x7d36, 0x3e7b, 0x7d37, + 0x6f22, 0x6f24, 0x7d38, 0x3653, 0xfb2a, 0x4945, 0xfb2b, 0x3c62, + 0x4f23, 0x6e7e, 0x3a78, 0x4f3f, 0x6f26, 0x6f25, 0x6f27, + /* 0x9340 */ + 0x6e7d, 0xfb2e, 0x7d39, 0x7d3a, 0x7d3b, 0x4669, 0x4555, 0xfb2f, + 0x4457, 0x6f2c, 0xfb30, 0xfb31, 0x4343, 0x6f28, 0x6f29, 0x7d3c, + 0x7d3d, 0x7d3e, 0xfb32, 0x372d, 0x6f2b, 0x7d3f, 0xfb33, 0xfb34, + 0x3830, 0x6f2a, 0x3e61, + /* 0x9380 */ + 0xfb38, 0xfb39, 0x3379, 0xfb3a, 0x6f30, 0x3a3f, 0x4179, 0x444a, + 0x7d40, 0xfb3b, 0xfb35, 0x7d41, 0x333b, 0x6f2e, 0x6f2f, 0x4443, + 0x6f2d, 0x6f31, 0x7d42, + /* 0x93C0 */ + 0xfb40, 0x6f37, 0x7d43, 0xfb41, 0x6f3a, 0x6f39, 0x452d, 0x6f32, + 0x6f33, 0x6f36, 0xfb42, 0x6f38, 0x7d44, 0x7d45, 0x3640, 0xfb43, + 0x6f3b, 0x6f35, 0xfb44, 0x6f34, 0xfb3f, 0xfb3c, 0xfb49, 0x7d47, + /* 0x9400 */ + 0x6f3f, 0x7d46, 0x6f40, 0xfb45, 0xfb46, 0x6f41, 0x6f3e, 0x6f3d, + 0xfb47, 0xfb48, 0x3e62, 0x462a, 0x6f3c, 0x6f45, 0x6f43, 0xfb4a, + 0x7d48, 0xfb4b, 0x6f44, 0x6f42, 0x4278, 0x6f46, 0xfb4c, + /* 0x9440 */ + 0x6f47, 0x6f49, 0xfb4d, 0x7d49, 0x3455, 0x6f48, 0x4c7a, 0x6f54, + 0x6f4a, 0x6f4d, 0x6f4b, 0x6f4c, 0x7d4a, 0x6f4e, 0x7d4b, 0xfb50, + 0xfb51, 0x6f50, 0x7d4c, 0x7d4d, 0x6f51, 0x6f52, 0x6f55, 0x6f53, + 0x6f56, 0x6f58, + /* 0x9480 */ + 0x6f57, + /* 0x9540 */ + 0x4439, 0xfb52, 0xfb53, + /* 0x9580 */ + 0x4c67, 0x6f59, 0x412e, 0xfb54, 0x6f5a, 0x4a44, 0x6f5b, 0x332b, + 0xfb55, 0xfb56, 0x7d4e, 0x313c, 0x3457, 0x3456, 0x6f5c, 0x6f5d, + 0x6f5e, 0x6f5f, 0x7d4f, 0x6f60, 0x3458, 0x3355, 0x395e, 0x4836, + 0x7d50, 0x6f62, 0x6f61, 0x7d51, 0xfb58, 0x7d52, 0x6f63, 0x315c, + 0xfb59, 0x7d53, 0x6f66, 0x6f65, 0x6f64, 0x7d54, 0x6f67, + /* 0x95C0 */ + 0x6f6a, 0x3047, 0xfb5b, 0x6f68, 0x7d55, 0x6f6c, 0x6f6b, 0x7d56, + 0x7d57, 0x6f6e, 0x6f6d, 0x6f6f, 0x462e, 0x7d59, 0x6f70, 0x7d5a, + 0x6f71, 0x6f73, 0x6f72, + /* 0x9600 */ + 0x496c, 0xfa25, 0x6f74, 0x6f75, 0x3a65, 0xfb5e, 0x6f76, 0x6f77, + 0x4b49, 0xfb5f, 0xfb60, 0x414b, 0xfb62, 0x3024, + /* 0x9640 */ + 0x424b, 0xfb63, 0x6f78, 0x496d, 0x6f7b, 0x6f79, 0x395f, 0x6f7a, + 0x3842, 0x7d5b, 0x4a45, 0x6f7d, 0x7021, 0x6f7e, 0x7022, 0xfb64, + 0x3121, 0x3f58, 0x3d7c, 0x3459, 0x7023, 0x4766, 0x7025, 0x3122, + 0x7024, 0x4444, 0x4e4d, 0x462b, 0x6f7c, 0x4e26, 0x3831, 0x4d5b, + /* 0x9680 */ + 0xfb66, 0x7d5c, 0x3679, 0x4e34, 0x3728, 0x4262, 0x6721, 0x7026, + 0x332c, 0x3f6f, 0x3356, 0x7028, 0x7029, 0x7027, 0x3764, 0xfb68, + 0x3a5d, 0x3e63, 0x7d5e, 0x3123, 0x4e59, 0x7d5f, 0x7d60, 0x702b, + 0x6e2e, 0xfb6b, 0x702a, 0xfb6c, 0x702e, 0x702c, 0x702d, 0xfb6d, + 0x702f, 0x7030, 0x4e6c, 0x7031, 0x7032, 0xfb6e, 0x4049, 0x483b, + 0xfb6f, + /* 0x96C0 */ + 0x3f7d, 0x3467, 0x4d3a, 0x326d, 0x3d38, 0x385b, 0x7035, 0x7034, + 0x3b73, 0x7036, 0x7033, 0x3b28, 0x7d61, 0x703a, 0x6a2d, 0xfb72, + 0x5256, 0xfb73, 0x3f77, 0x7038, 0xfb74, 0x7d62, 0x4e25, 0x4671, + 0x312b, 0x7d64, 0x4063, 0x3c36, 0x7d65, 0x4a37, 0x3140, 0x4e6d, + 0x4d6b, 0x703b, 0x4545, + /* 0x9700 */ + 0x3c7b, 0x703c, 0x703d, 0x3f4c, 0x703e, 0x4e6e, 0x7039, 0x7040, + 0x7042, 0x7041, 0x703f, 0xfb76, 0x7043, 0x7044, 0x417a, 0x3262, + 0xfb77, 0x7045, 0x4c38, 0x7046, 0x7047, 0x4f2a, 0x7d66, 0xfb79, + 0x5b31, 0x7048, 0x7d67, 0x7049, 0x704a, + /* 0x9740 */ + 0xfb7a, 0x704e, 0x704b, 0x704c, 0xfb7b, 0x704d, 0x704f, 0x7d68, + 0x7d69, 0x7d6a, 0x4044, 0xfb7c, 0x4c77, 0xfb7d, 0x4045, 0x7d6b, + 0xfb7e, 0x7050, 0x4873, 0x7051, 0x7353, 0x4c4c, 0x7052, 0x7053, + 0x7054, 0x3357, 0xfc21, 0x7056, 0x3f59, 0x7d6c, 0x7057, 0x7d6d, + 0x3724, 0x7058, 0x705c, 0x705a, + /* 0x9780 */ + 0x705b, 0x3373, 0x7059, 0x705d, 0x705e, 0x3048, 0x705f, 0x7060, + 0x7d6e, 0xfc24, 0x3e64, 0xfc25, 0x7061, 0xfc26, 0x3547, 0xfc27, + 0x7064, 0x7063, 0x7062, 0x6b71, 0x4a5c, 0x7d6f, 0xfc28, 0xfc29, + 0x7065, 0x7066, 0x7d70, 0xfc2a, + /* 0x97C0 */ + 0x7d71, 0x7067, 0x7068, 0x7069, 0x7d72, 0x706a, 0xfc2b, 0xfc2c, + 0x345a, 0xfc2d, 0xfc2e, 0xfc2f, 0x7d74, 0x706b, 0x7d73, 0xfc30, + 0x706c, 0x4723, 0xfc31, 0x706e, 0x323b, 0x7d75, 0x7071, 0x7070, + 0x3124, 0x3641, + /* 0x9800 */ + 0x4a47, 0x443a, 0x3a22, 0xfc32, 0x3960, 0x3d67, 0x3f5c, 0x7d77, + 0x7073, 0xfc33, 0xfc34, 0x7072, 0x4d42, 0x3468, 0x4852, 0x465c, + 0xfc35, 0xfc36, 0x3f7c, 0x4e4e, 0x375b, 0x7d78, 0x7076, 0xfc39, + 0x7075, 0xfc3c, 0x7d79, 0x4b4b, 0x462c, 0x7d7a, 0xfc3a, 0xfc3b, + 0x3150, 0x7077, 0x7074, 0x4951, 0x4d6a, 0x7078, + /* 0x9840 */ + 0x7079, 0xfc3d, 0x707b, 0x426a, 0x335b, 0x335c, 0x707a, 0x7d7c, + 0x7d7d, 0x3469, 0x3832, 0x7d7e, 0x7e21, 0x346a, 0x7e22, 0x7e23, + 0x453f, 0x4e60, 0x7e25, 0xfc3e, 0x385c, 0x707c, 0x7e26, 0x707d, + 0x707e, 0x7121, 0x7123, 0x7122, + /* 0x9880 */ + 0x4977, 0x7124, 0xfc3f, 0xfc40, 0x7125, 0xfc41, 0x7126, 0x7127, + 0xfc43, 0xfc44, 0x7e27, 0xfc45, 0xfc46, 0xfc47, + /* 0x98C0 */ + 0xfc48, 0x7129, 0x7128, 0x712a, 0xfc49, 0x7e28, 0xfc4a, 0x4874, + 0x664c, 0x3f29, 0xfc4b, 0xfc4d, 0x3532, 0xfc4e, 0xfc4f, 0x7e29, + 0x712b, 0xfc50, 0x712c, 0x522c, 0x5d3b, 0x4853, 0xfc51, 0xfc52, + 0x307b, 0xfc53, 0x303b, 0x3b74, 0x4b30, 0x3e7e, + /* 0x9900 */ + 0x712d, 0x4c5f, 0xfc54, 0x712e, 0x4d5c, 0x3142, 0x3b41, 0x712f, + 0x326e, 0x7130, 0xfc57, 0xfc58, 0x7131, 0xfc5a, 0xfc5b, 0xfc5c, + 0x7133, 0x7134, 0x7136, 0x7132, 0x7135, 0x345b, 0x7137, 0x7138, + 0xfc5e, 0xfc5f, 0xfc60, 0xfc61, 0xfc62, 0xfc63, 0x7139, 0x713a, + /* 0x9940 */ + 0xfc64, 0xfc65, 0x713b, 0x713d, 0xfc66, 0x713c, 0x713f, 0x7142, + 0xfc67, 0xfc68, 0x713e, 0x7140, 0x7141, 0x7143, 0x3642, 0x7e2a, + 0xfc69, 0xfc6a, 0xfc6b, + /* 0x9980 */ + 0x3c73, 0x7144, 0x7145, 0x3961, 0x7e2b, 0xfc6c, 0x7146, 0xfc6d, + 0x333e, 0x474f, 0x7147, 0x7148, 0x435a, 0x466b, 0xfc6e, 0x7149, + 0xfc6f, 0xfc70, + /* 0x99C0 */ + 0x477d, 0xfc71, 0x424c, 0x3158, 0x366e, 0x366f, 0xfc72, 0x4373, + 0x714e, 0x3670, 0xfc73, 0x326f, 0x714d, 0xfc74, 0x714b, 0x714c, + 0xfc75, 0x714a, 0x7158, 0x714f, 0x7150, 0xfc77, 0x7151, 0x7152, + 0x7154, 0xfc78, 0x7153, 0xfc79, 0x3d59, + /* 0x9A00 */ + 0x7155, 0x7e2c, 0x7e2d, 0x7157, 0xfc7a, 0x3533, 0x7156, 0xfc7b, + 0x417b, 0x3833, 0xfc7c, 0x7159, 0xfc7d, 0xfc7e, 0x7e2e, 0x424d, + 0x715a, 0x7e2f, 0x7e30, 0x462d, 0xfd21, 0xfd22, 0x715b, 0x7e31, + 0x7160, + /* 0x9A40 */ + 0x715e, 0x715d, 0x715f, 0xfd23, 0x715c, 0x7e32, 0xfd24, 0x7162, + 0x7e33, 0x7e34, 0x7161, 0x7164, 0xfd25, 0x3643, 0x7163, 0x7165, + 0x7166, 0x7168, 0x7167, 0x7169, 0x716b, 0x716a, + /* 0x9A80 */ + 0x397c, 0x716c, 0xfd27, 0x716d, 0x7e35, 0xfd29, 0x333c, 0xfd2b, + 0x716e, + /* 0x9AC0 */ + 0x716f, 0x7e36, 0x7e37, 0x3f71, 0xfd2d, 0x7e38, 0x7170, 0xfd2e, + 0x7171, 0xfd2f, 0x7172, 0x7173, 0xfd30, 0x7e39, 0x3962, 0xfd32, + 0x7174, 0x7175, 0xfd33, 0x7176, 0x7177, 0xfd34, 0x7178, 0xfd35, + 0x4831, 0x717a, 0x4926, 0x717b, 0x7179, 0x717d, 0x717c, 0x717e, + 0x7e3a, 0x7221, + /* 0x9B00 */ + 0x7e3b, 0xfd36, 0x7222, 0x7e3c, 0xfd37, 0xfd38, 0xfd39, 0xfd3a, + 0x7223, 0x7224, 0xfd3b, 0x7225, 0x7e3d, 0x7226, 0x7227, 0x7228, + 0x7229, 0x722a, 0x722b, 0x722c, 0xfd3c, 0x7e3f, 0x722d, 0x722e, + 0x5d35, 0x722f, 0xfd3d, 0x6478, 0x3534, 0xfd3e, + /* 0x9B40 */ + 0x3321, 0x3a32, 0x7231, 0x7230, 0x4c25, 0xfd40, 0x7233, 0x7234, + 0x7232, 0x7235, 0x4b62, 0x7236, 0x357b, 0x7e40, 0xfd41, 0xfd42, + 0x7e42, 0xfd43, 0xfd44, 0x4f25, 0x7e43, 0xfd45, 0x7237, 0x7e44, + 0xfd46, 0xfd47, 0x7e41, + /* 0x9B80 */ + 0x7239, 0x7e45, 0x7e46, 0x303e, 0x7e47, 0x723a, 0x4a2b, 0x7238, + 0x723b, 0x723c, 0x7e48, 0x723d, 0x723e, 0xfd48, 0x7e49, 0x723f, + 0x4b6e, 0x3b2d, 0xfd49, 0x3a7a, 0x412f, 0xfd4a, 0xfd4d, 0x7240, + 0xfd4e, 0x7243, 0xfd4f, + /* 0x9BC0 */ + 0x7241, 0x7e4a, 0x7244, 0xfd50, 0x3871, 0x7242, 0x7e4b, 0x7245, + 0x7246, 0x7247, 0x724b, 0x3b2a, 0xfd52, 0x4264, 0xfd53, 0x724c, + 0x7249, 0x7248, 0x724a, 0x7e4c, 0xfd54, 0x375f, 0xfd55, 0xfd56, + 0xfd58, 0xfd57, 0x7250, 0x724f, 0x724e, 0xfd51, 0x3033, 0xfd5c, + 0x7e4d, 0xfd5a, 0x7e4e, + /* 0x9C00 */ + 0x7e4f, 0x725a, 0x7256, 0x7257, 0x7253, 0x7259, 0x7255, 0x3362, + 0x4f4c, 0x7258, 0x7254, 0x7252, 0x7251, 0xfd5e, 0xfd5f, 0xfd60, + 0xfd61, 0x725c, 0xfd62, 0x725f, 0xfd63, 0x7e50, 0x725e, 0x725d, + 0xfd64, 0xfd65, 0xfd66, 0x4949, 0x725b, 0x3073, 0x7260, 0xfd68, + 0x7262, 0xfd69, 0xfd6a, 0x336f, 0x724d, 0x3137, 0x7264, + /* 0x9C40 */ + 0x7e51, 0xfd6b, 0x7263, 0x7261, 0x432d, 0xfd6e, 0xfd6f, 0x7e52, + 0x7e53, 0x4b70, 0x7e54, 0xfd71, 0x4e5a, 0xfd72, 0x7265, 0xfd73, + 0xfd6c, 0xfd74, 0xfd75, 0x7266, 0x7e55, 0x7e56, 0x7267, 0xfd76, + 0xfd77, 0xfd78, 0xfd79, 0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, 0x7268, + 0x7e57, 0x7269, 0xfd7e, + /* 0x9CC0 */ + 0x443b, 0xfe21, 0x726a, 0x4837, 0x726f, 0x726b, 0x726c, 0xfe22, + 0x4b31, 0x4c44, 0x4650, + /* 0x9D00 */ + 0xfe24, 0x7270, 0x7271, 0x463e, 0x726e, 0x726d, 0xfe23, 0x322a, + 0xfe26, 0x7279, 0x7278, 0xfe27, 0xfe28, 0x3175, 0x7e58, 0x7e59, + 0x7276, 0x7275, 0x7273, 0x337b, 0x7272, 0x3c32, 0x3229, 0xfe2c, + 0x3963, 0x727c, 0x727b, + /* 0x9D40 */ + 0x727a, 0xfe2e, 0x7e5a, 0x7277, 0x727d, 0x7e5b, 0x727e, 0xfe2f, + 0x7325, 0x7324, 0x7e5c, 0x7326, 0x312d, 0x7321, 0x7322, 0xfe30, + 0x3974, 0x4c39, 0xfe31, 0x7e5d, 0x7323, 0xfe33, 0xfe34, 0x4b32, + 0x732b, 0x7e5e, 0x7327, 0xfe36, 0xfe37, 0xfe38, 0x732c, 0x7e5f, + 0xfe39, + /* 0x9D80 */ + 0xfe3a, 0x7329, 0x7328, 0x7e60, 0xfe3b, 0x375c, 0x7e61, 0xfe3c, + 0x732d, 0xfe3d, 0x732e, 0x732f, 0x732a, 0x7e63, 0x7274, 0x7330, + 0x4461, 0xfe3f, 0x7334, 0xfe40, 0x7335, 0x7333, 0x7e64, 0xfe41, + 0xfe3e, + /* 0x9DC0 */ + 0x7e62, 0x7332, 0x7338, 0xfe42, 0x7331, 0x7336, 0xfe43, 0xfe44, + 0x7337, 0x733a, 0xfe45, 0x7e65, 0x7339, 0xfe46, 0xfe47, 0xfe48, + 0xfe49, 0x733c, 0x7e67, 0x733d, 0x733e, 0x4f49, 0xfe4a, 0x733b, + 0x426b, 0x3a6d, 0x733f, + /* 0x9E00 */ + 0xfe4d, 0x7e68, 0xfe4c, 0xfe4e, 0x7e69, 0xfe4f, 0x7340, 0x7341, + 0xfe50, 0xfe51, 0x7342, + /* 0x9E40 */ + 0x7343, 0x3834, 0x7344, 0xfe52, 0x7e6a, 0x7345, 0x3c2f, + /* 0x9E80 */ + 0xfe54, 0x7346, 0xfe55, 0x7347, 0x7348, 0x7349, 0x734c, 0x734a, + 0x4f3c, 0x734b, 0x4e6f, 0xfe56, 0x734d, 0x7e6b, 0x4e5b, 0x7e6c, + 0x734e, 0x477e, 0xfe57, 0x734f, 0x7351, 0x7e6d, 0x7352, 0x7e6e, + 0x7e6f, 0x7e70, 0x7350, 0x396d, 0x4c4d, 0x4b63, 0x5677, 0xfe59, + 0x5d60, 0x4b7b, + /* 0x9EC0 */ + 0x7e71, 0x322b, 0x7354, 0x3550, 0x7355, 0x7356, 0x7357, 0x7e72, + 0x3975, 0x7358, 0x6054, 0x4c5b, 0x4263, 0x7359, 0x735b, 0x735a, + 0xfe5b, 0x735c, 0x735d, 0xfe5c, 0x735e, 0xfe5d, 0x735f, 0x7360, + 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, 0x7366, 0xfe5e, + /* 0x9F00 */ + 0xfe5f, 0xfe61, 0x7367, 0x7368, 0x4524, 0x7e73, 0x385d, 0x736a, + 0xfe62, 0xfe63, 0x414d, 0x736b, 0x736c, 0xfe64, 0xfe65, 0x7e74, + 0xfe66, 0x4921, 0xfe67, 0x736d, + /* 0x9F40 */ + 0xfe68, 0xfe69, 0xfe6a, 0x736e, 0x6337, 0x6c5a, 0x706d, 0x736f, + 0xfe6b, 0x7370, 0xfe6c, 0x7e75, 0xfe6d, 0xfe6f, 0x7372, 0x7373, + 0x7374, 0x4e70, 0x7371, 0x7375, 0x7376, 0xfe71, 0x7378, 0x7377, + 0xfe73, 0xfe74, 0x737a, 0xfe75, 0x737b, 0x7379, + /* 0x9F80 */ + 0x4e36, 0x7e76, 0x7e77, 0x737c, 0x7e78, 0x737d, 0x6354, 0x737e, + 0x7e79, + /* 0xF900 */ + 0x763b, 0x742e, 0x754e, 0x7b4f, + /* 0xF940 */ + 0x7649, + /* 0xF9C0 */ + 0x7e24, 0x7d5d, + /* 0xFA00 */ + 0x2f4b, 0x2f57, 0x4f72, 0xae79, 0x757a, 0x775a, 0x776f, 0x793c, + 0x793d, 0x7941, 0x7b3a, 0xf738, 0xf745, 0x7c2e, 0xf96e, 0x7c6a, + 0x2e38, 0x2e49, 0x2e50, 0x2e63, 0x2e68, 0x2e6e, 0x2f2c, 0x2f2f, + 0x2f36, 0x2f5a, 0x2f5e, 0x4f61, 0x4f62, 0x7450, 0x745c, 0x745e, + /* 0xFA40 */ + 0x7461, 0x7528, 0x752b, 0x7543, 0x7565, 0x7669, 0x7677, 0x7725, + 0x7755, 0xf029, 0x7825, 0x7927, 0x7933, 0x7934, 0x7937, 0x7938, + 0x7939, 0x793b, 0x793f, 0x7940, 0x794d, 0x7951, 0x7964, 0x7a2e, + 0xf450, 0x7a33, 0x7a3a, 0x7a44, 0x7a58, 0xf574, 0xf575, 0x7b27, + 0x7b6f, 0x7b79, 0x7c2f, 0x7c30, 0x7c38, 0x7c3d, 0xf969, 0x7c59, + 0x7d63, 0x7d76, 0x7d7b, + /* 0xFE40 */ + 0x233e, 0x233d, + /* 0xFF00 */ + 0x212a, 0x2230, 0x2174, 0x2170, 0x2173, 0x2175, 0x222f, 0x214a, + 0x214b, 0x2176, 0x215c, 0x2124, 0x2231, 0x2125, 0x213f, 0x2330, + 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, 0x2338, + 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129, 0x2177, + 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, 0x2348, + 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, 0x234f, 0x2350, + 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, 0x2358, + 0x2359, 0x235a, 0x214e, 0x2140, 0x214f, 0x2130, 0x2132, + /* 0xFF40 */ + 0x212e, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, + 0x2368, 0x2369, 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, 0x236f, + 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, + 0x2378, 0x2379, 0x237a, 0x2150, 0x2143, 0x2151, 0x2232, 0x2256, + 0x2257, + /* 0xFFC0 */ + 0x2131, 0x216f, + /* 0x20000 */ + 0x2e22, + /* 0x20080 */ + 0xa121, 0xa12b, 0xa12e, + /* 0x20180 */ + 0xa136, + /* 0x20200 */ + 0xa146, + /* 0x20300 */ + 0xa170, + /* 0x20340 */ + 0xa179, + /* 0x20380 */ + 0xa177, + /* 0x203C0 */ + 0xa322, + /* 0x20440 */ + 0xa325, + /* 0x20500 */ + 0xa327, + /* 0x205C0 */ + 0xa331, + /* 0x20600 */ + 0xa332, + /* 0x20740 */ + 0xa338, + /* 0x20800 */ + 0xa33f, 0xa341, + /* 0x20880 */ + 0xa34a, + /* 0x20940 */ + 0xa352, + /* 0x20980 */ + 0xa353, + /* 0x20AC0 */ + 0xa359, + /* 0x20B00 */ + 0xa35c, + /* 0x20B80 */ + 0x4f54, + /* 0x20D40 */ + 0xa377, + /* 0x20DC0 */ + 0xa42a, + /* 0x20E40 */ + 0xa43a, 0xa432, + /* 0x20E80 */ + 0xa431, + /* 0x20F40 */ + 0xa43d, + /* 0x21200 */ + 0xa459, 0x2f42, + /* 0x21240 */ + 0xa45c, 0xa463, 0xa45e, + /* 0x212C0 */ + 0xa46b, 0xa46a, 0xa472, + /* 0x21300 */ + 0x2f4c, 0xa474, + /* 0x21340 */ + 0xa475, + /* 0x213C0 */ + 0xa525, + /* 0x21440 */ + 0xa532, 0x2f60, + /* 0x215C0 */ + 0xa53e, + /* 0x21640 */ + 0xa547, + /* 0x21680 */ + 0x4f63, + /* 0x21700 */ + 0xa555, + /* 0x21740 */ + 0xa556, + /* 0x21880 */ + 0x2f7b, + /* 0x219C0 */ + 0xa57e, + /* 0x21C40 */ + 0xa830, + /* 0x21D00 */ + 0xa837, + /* 0x21D40 */ + 0xa838, 0xa83b, 0xa83a, + /* 0x21D80 */ + 0xa845, 0xa840, 0xa83f, 0xa848, + /* 0x21DC0 */ + 0xa84a, + /* 0x21E00 */ + 0xa84b, 0x4f6e, + /* 0x21F00 */ + 0xa85b, + /* 0x21F40 */ + 0xa866, + /* 0x21FC0 */ + 0xa86c, + /* 0x22140 */ + 0xac22, + /* 0x22200 */ + 0xfe53, + /* 0x22300 */ + 0xac2b, + /* 0x22380 */ + 0xac30, + /* 0x226C0 */ + 0xac50, + /* 0x22840 */ + 0xac65, + /* 0x22880 */ + 0xac6d, + /* 0x22980 */ + 0xac72, + /* 0x22A80 */ + 0xad24, + /* 0x22B40 */ + 0xad32, 0xad29, 0xad2a, + /* 0x22B80 */ + 0xad35, + /* 0x22C00 */ + 0xad34, 0xad39, + /* 0x22DC0 */ + 0xad56, + /* 0x23180 */ + 0xae24, + /* 0x231C0 */ + 0xad7d, 0x753a, 0xae23, + /* 0x23340 */ + 0xae3a, + /* 0x233C0 */ + 0xae42, 0xae3d, 0xae3c, 0xae44, 0xae47, 0xae49, 0xae43, + /* 0x23440 */ + 0xae55, 0xae57, 0xae56, 0xae5b, + /* 0x234C0 */ + 0xae77, + /* 0x23540 */ + 0xae78, + /* 0x23580 */ + 0xaf2a, + /* 0x235C0 */ + 0x7572, + /* 0x23600 */ + 0xaf42, 0xaf3f, 0xaf43, + /* 0x23640 */ + 0xaf40, + /* 0x23700 */ + 0xaf59, 0xaf4e, 0x7629, + /* 0x23740 */ + 0x7632, 0xaf61, + /* 0x237C0 */ + 0xaf6a, 0xaf69, + /* 0x23800 */ + 0xaf70, 0xaf75, + /* 0x23A80 */ + 0xee23, + /* 0x23C40 */ + 0xee34, + /* 0x23CC0 */ + 0x7660, + /* 0x23D00 */ + 0xee49, 0xf475, + /* 0x23D40 */ + 0xee5c, + /* 0x23DC0 */ + 0xee60, 0xee5f, 0xee5e, + /* 0x23F40 */ + 0xef32, + /* 0x24080 */ + 0xef47, + /* 0x24100 */ + 0xef4d, + /* 0x241C0 */ + 0xef61, 0xef64, + /* 0x24380 */ + 0xf022, + /* 0x24600 */ + 0xf033, + /* 0x24680 */ + 0xf039, + /* 0x247C0 */ + 0x776c, + /* 0x24880 */ + 0xf053, + /* 0x24A40 */ + 0xf07b, + /* 0x24B40 */ + 0xf12e, 0xf130, + /* 0x24C00 */ + 0xf135, + /* 0x24D00 */ + 0xf144, + /* 0x24E00 */ + 0xf15d, 0xf161, + /* 0x24E40 */ + 0xf166, + /* 0x24E80 */ + 0xf169, + /* 0x25040 */ + 0xf175, 0xf177, + /* 0x25100 */ + 0xf17a, + /* 0x25180 */ + 0xf221, + /* 0x251C0 */ + 0xf224, 0xf223, + /* 0x25200 */ + 0xf228, + /* 0x25240 */ + 0xf22c, + /* 0x25400 */ + 0xf23d, + /* 0x25480 */ + 0x787e, + /* 0x254C0 */ + 0xf248, + /* 0x25500 */ + 0x7929, + /* 0x25580 */ + 0xf25b, + /* 0x25740 */ + 0x7947, + /* 0x25780 */ + 0xf275, 0xf276, + /* 0x259C0 */ + 0x7954, 0xf332, + /* 0x25AC0 */ + 0xf33e, 0xf33d, 0xf340, + /* 0x25B80 */ + 0xf352, + /* 0x25C40 */ + 0xf35d, 0xf35e, + /* 0x25D80 */ + 0x796e, + /* 0x25E00 */ + 0xf373, + /* 0x25E40 */ + 0xf374, 0xf377, 0xf375, + /* 0x25EC0 */ + 0xf37d, 0xf37b, 0xf422, + /* 0x25F00 */ + 0xf424, + /* 0x25F40 */ + 0xf427, + /* 0x25FC0 */ + 0xf42f, 0xf42e, 0xf435, + /* 0x26000 */ + 0xf434, 0xf43d, + /* 0x26040 */ + 0xf442, + /* 0x260C0 */ + 0xf44f, + /* 0x26240 */ + 0xf469, + /* 0x26280 */ + 0xf46b, + /* 0x26340 */ + 0xf472, + /* 0x26400 */ + 0xf479, + /* 0x26640 */ + 0xf535, + /* 0x26680 */ + 0xf53a, + /* 0x26700 */ + 0xf546, + /* 0x268C0 */ + 0xf556, 0xf558, + /* 0x26940 */ + 0xf55a, 0xf55d, + /* 0x269C0 */ + 0xf55f, + /* 0x26A00 */ + 0xf563, + /* 0x26A40 */ + 0xf56a, + /* 0x26A80 */ + 0xf570, 0xf573, + /* 0x26AC0 */ + 0x7a5d, + /* 0x26C00 */ + 0xa544, + /* 0x26C40 */ + 0xf644, + /* 0x26CC0 */ + 0xf64e, + /* 0x26E40 */ + 0x7b33, 0xf65d, + /* 0x26F80 */ + 0xf675, + /* 0x26FC0 */ + 0xf721, 0xf722, 0xf67e, + /* 0x270C0 */ + 0x7b49, + /* 0x27100 */ + 0xf733, 0xf736, + /* 0x273C0 */ + 0xf765, 0xf764, 0xf76b, + /* 0x27400 */ + 0xf76e, + /* 0x27440 */ + 0xf773, + /* 0x27600 */ + 0xf82a, 0xf829, 0xf82c, + /* 0x27680 */ + 0x7b6c, 0xf834, + /* 0x27700 */ + 0xf83c, 0xf83e, + /* 0x27740 */ + 0xf842, + /* 0x27980 */ + 0xf856, + /* 0x27A80 */ + 0xf863, + /* 0x27B80 */ + 0xf877, 0xf879, + /* 0x27BC0 */ + 0xf87a, + /* 0x27C80 */ + 0xf925, + /* 0x27D80 */ + 0xf92f, + /* 0x27E00 */ + 0xf932, + /* 0x27F80 */ + 0xf939, + /* 0x28080 */ + 0xf942, 0xf948, + /* 0x28240 */ + 0x7c49, + /* 0x28280 */ + 0xf959, + /* 0x282C0 */ + 0xf95e, + /* 0x283C0 */ + 0x7c51, + /* 0x28400 */ + 0xf966, + /* 0x28440 */ + 0xf96b, + /* 0x28540 */ + 0xf97a, + /* 0x285C0 */ + 0xf97e, 0xfa21, + /* 0x286C0 */ + 0xfa2c, 0xfa2f, + /* 0x28940 */ + 0xfa50, 0xfa4f, 0xfa57, + /* 0x28980 */ + 0xfa65, 0xfa66, 0xfa71, 0xfa72, + /* 0x28A00 */ + 0xfa7e, 0xfb21, + /* 0x28A40 */ + 0xfb2d, 0xfb2c, + /* 0x28A80 */ + 0xfb36, + /* 0x28AC0 */ + 0xfb37, 0xfb3e, 0xfb3d, + /* 0x28BC0 */ + 0xfb4e, 0xfb4f, + /* 0x28D00 */ + 0xfb57, + /* 0x28D40 */ + 0xfb5a, + /* 0x28DC0 */ + 0xfb5c, + /* 0x28E00 */ + 0xfb5d, 0xfb61, + /* 0x28E80 */ + 0xfb65, + /* 0x28EC0 */ + 0xfb67, + /* 0x28F00 */ + 0xfb69, + /* 0x28FC0 */ + 0xfb71, + /* 0x29280 */ + 0xfc22, 0xfc23, + /* 0x29480 */ + 0xfc38, + /* 0x295C0 */ + 0xfc42, + /* 0x29640 */ + 0xfc4c, + /* 0x296C0 */ + 0xfc56, + /* 0x29700 */ + 0xfc59, + /* 0x29740 */ + 0xfc5d, + /* 0x298C0 */ + 0xfc76, + /* 0x29A40 */ + 0xfd2c, + /* 0x29DC0 */ + 0xfd4b, + /* 0x29E00 */ + 0xfd59, 0xfd4c, + /* 0x29E40 */ + 0xfd5d, + /* 0x29E80 */ + 0xfd5b, + /* 0x29EC0 */ + 0xfd67, 0xfd70, 0xfd6d, + /* 0x29FC0 */ + 0xfe25, + /* 0x2A000 */ + 0xfe2b, 0xfe29, + /* 0x2A080 */ + 0xfe35, + /* 0x2A0C0 */ + 0xfe32, + /* 0x2A180 */ + 0x7e66, + /* 0x2A380 */ + 0xfe58, + /* 0x2A400 */ + 0xfe5a, + /* 0x2A5C0 */ + 0xfe6e, + /* 0x2A600 */ + 0xfe70, 0xfe72, + /* 0x2A680 */ + 0xfe76, +}; + +static const Summary16 jisx0213_from_ucs_level2_2indx[] = { + /* 0x0080 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0xffdf }, { 15, 0xffdf }, + /* 0x00C0 */ + { 30, 0xffff }, { 46, 0xffff }, { 62, 0xffff }, { 78, 0xffff }, + /* 0x0100 */ + { 94, 0xf3ff }, { 108, 0x3f0e }, { 117, 0x0cb0 }, { 122, 0x6630 }, + /* 0x0140 */ + { 128, 0x399e }, { 137, 0xff3f }, { 151, 0xfc3f }, { 163, 0x7e03 }, + /* 0x0180 */ + { 171, 0x0000 }, { 171, 0x0008 }, { 172, 0x0000 }, { 172, 0x0000 }, + /* 0x01C0 */ + { 172, 0x6004 }, { 175, 0x1557 }, { 183, 0x0000 }, { 183, 0x2300 }, + /* 0x0240 */ + { 186, 0x0000 }, { 186, 0xd7ff }, { 200, 0xf1f3 }, { 211, 0x6e2f }, + /* 0x0280 */ + { 221, 0x7f1e }, { 232, 0x2137 }, { 239, 0x0006 }, { 241, 0x0000 }, + /* 0x02C0 */ + { 241, 0x1180 }, { 244, 0x6b03 }, { 251, 0x03e0 }, { 256, 0x0000 }, + /* 0x0300 */ + { 256, 0x995f }, { 266, 0xf700 }, { 273, 0x9631 }, { 280, 0x3e11 }, + /* 0x0340 */ + { 287, 0x0000 }, { 287, 0x0000 }, { 287, 0x0002 }, { 288, 0x0000 }, + /* 0x0380 */ + { 288, 0x0000 }, { 288, 0xfffe }, { 303, 0x03fb }, { 312, 0xfffe }, + /* 0x03C0 */ + { 327, 0x03ff }, { 337, 0x0000 }, { 337, 0x0000 }, { 337, 0x0000 }, + /* 0x0400 */ + { 337, 0x0002 }, { 338, 0xffff }, { 354, 0xffff }, { 370, 0xffff }, + /* 0x0440 */ + { 386, 0xffff }, { 402, 0x0002 }, { 403, 0x0000 }, { 403, 0x0000 }, + /* 0x1E00 */ + { 403, 0x0000 }, { 403, 0x0000 }, { 403, 0x0000 }, { 403, 0xc000 }, + /* 0x1F40 */ + { 405, 0x0000 }, { 405, 0x0000 }, { 405, 0x0000 }, { 405, 0x000f }, + /* 0x2000 */ + { 409, 0x0000 }, { 409, 0x3359 }, { 417, 0x0067 }, { 422, 0x980d }, + /* 0x2040 */ + { 428, 0x0384 }, { 432, 0x0002 }, { 433, 0x0000 }, { 433, 0x0000 }, + /* 0x2080 */ + { 433, 0x0000 }, { 433, 0x0000 }, { 433, 0x1000 }, { 434, 0x0000 }, + /* 0x2100 */ + { 434, 0x8008 }, { 436, 0x0048 }, { 438, 0x0882 }, { 441, 0x0020 }, + /* 0x2140 */ + { 442, 0x0000 }, { 442, 0x0038 }, { 445, 0x0fff }, { 457, 0x0fff }, + /* 0x2180 */ + { 469, 0x0000 }, { 469, 0x03df }, { 478, 0x0000 }, { 478, 0x0000 }, + /* 0x21C0 */ + { 478, 0x0010 }, { 479, 0x0014 }, { 481, 0x03c0 }, { 485, 0x0000 }, + /* 0x2200 */ + { 485, 0x0bad }, { 493, 0xe40c }, { 499, 0x5fe1 }, { 509, 0x2030 }, + /* 0x2240 */ + { 512, 0x0128 }, { 515, 0x0004 }, { 516, 0x0cc7 }, { 523, 0x00c0 }, + /* 0x2280 */ + { 525, 0x0cfc }, { 533, 0x00e0 }, { 536, 0x0020 }, { 537, 0x8000 }, + /* 0x22C0 */ + { 538, 0x0000 }, { 538, 0x0c00 }, { 540, 0x0000 }, { 540, 0x0000 }, + /* 0x2300 */ + { 540, 0x0060 }, { 542, 0x0104 }, { 544, 0x0000 }, { 544, 0x0000 }, + /* 0x2380 */ + { 544, 0x0000 }, { 544, 0x0000 }, { 544, 0x0000 }, { 544, 0xc000 }, + /* 0x23C0 */ + { 546, 0x5fff }, { 560, 0x0000 }, { 560, 0x0000 }, { 560, 0x0000 }, + /* 0x2400 */ + { 560, 0x0000 }, { 560, 0x0000 }, { 560, 0x0008 }, { 561, 0x0000 }, + /* 0x2440 */ + { 561, 0x0000 }, { 561, 0x0000 }, { 561, 0xffff }, { 577, 0x000f }, + /* 0x24C0 */ + { 581, 0x0000 }, { 581, 0xffff }, { 597, 0xfbff }, { 612, 0x7fff }, + /* 0x2500 */ + { 627, 0x900f }, { 633, 0x3999 }, { 641, 0x9939 }, { 649, 0x9999 }, + /* 0x2540 */ + { 657, 0x0804 }, { 659, 0x0000 }, { 659, 0x0000 }, { 659, 0x0000 }, + /* 0x2580 */ + { 659, 0x0000 }, { 659, 0x0000 }, { 659, 0x0003 }, { 661, 0x30ce }, + /* 0x25C0 */ + { 668, 0xcac3 }, { 676, 0x000f }, { 680, 0x8040 }, { 682, 0x0000 }, + /* 0x2600 */ + { 682, 0x406f }, { 689, 0x40c0 }, { 692, 0x0000 }, { 692, 0x0000 }, + /* 0x2640 */ + { 692, 0x0005 }, { 694, 0x0000 }, { 694, 0xffff }, { 710, 0x0000 }, + /* 0x2700 */ + { 710, 0x0000 }, { 710, 0x0008 }, { 711, 0x0000 }, { 711, 0x0000 }, + /* 0x2740 */ + { 711, 0x0000 }, { 711, 0x0040 }, { 712, 0x0000 }, { 712, 0xffc0 }, + /* 0x2900 */ + { 722, 0x0000 }, { 722, 0x0000 }, { 722, 0x0000 }, { 722, 0x0030 }, + /* 0x2980 */ + { 724, 0x0000 }, { 724, 0x0000 }, { 724, 0x0000 }, { 724, 0x8000 }, + /* 0x29C0 */ + { 725, 0x0000 }, { 725, 0x0000 }, { 725, 0x0000 }, { 725, 0x0c00 }, + /* 0x3000 */ + { 727, 0xffef }, { 742, 0xb3ff }, { 755, 0x0001 }, { 756, 0x3838 }, + /* 0x3040 */ + { 762, 0xfffe }, { 777, 0xffff }, { 793, 0xffff }, { 809, 0xffff }, + /* 0x3080 */ + { 825, 0xffff }, { 841, 0xf87f }, { 853, 0xffff }, { 869, 0xffff }, + /* 0x30C0 */ + { 885, 0xffff }, { 901, 0xffff }, { 917, 0xffff }, { 933, 0xffff }, + /* 0x31C0 */ + { 949, 0x0000 }, { 949, 0x0000 }, { 949, 0x0000 }, { 949, 0xffff }, + /* 0x3200 */ + { 965, 0x0000 }, { 965, 0x0000 }, { 965, 0x0000 }, { 965, 0x0206 }, + /* 0x3240 */ + { 968, 0x0000 }, { 968, 0xfffe }, { 983, 0x0000 }, { 983, 0x0000 }, + /* 0x3280 */ + { 983, 0x0000 }, { 983, 0x0000 }, { 983, 0x01f0 }, { 988, 0xfffe }, + /* 0x32C0 */ + { 1003, 0x0000 }, { 1003, 0xffff }, { 1019, 0x322f }, { 1027, 0x0400 }, + /* 0x3300 */ + { 1028, 0x2008 }, { 1030, 0x0110 }, { 1032, 0x08cc }, { 1037, 0x0840 }, + /* 0x3340 */ + { 1039, 0x2600 }, { 1042, 0x0082 }, { 1044, 0x0000 }, { 1044, 0x7800 }, + /* 0x3380 */ + { 1048, 0xc000 }, { 1050, 0x7000 }, { 1053, 0x0002 }, { 1054, 0x0000 }, + /* 0x33C0 */ + { 1054, 0x2810 }, { 1057, 0x0000 }, { 1057, 0x0000 }, { 1057, 0x0000 }, + /* 0x3400 */ + { 1057, 0x0044 }, { 1059, 0x0000 }, { 1059, 0x5000 }, { 1061, 0x0000 }, + /* 0x3440 */ + { 1061, 0x0000 }, { 1061, 0x0000 }, { 1061, 0x0500 }, { 1063, 0x0000 }, + /* 0x3480 */ + { 1063, 0x0000 }, { 1063, 0x0004 }, { 1064, 0x0000 }, { 1064, 0x1020 }, + /* 0x34C0 */ + { 1066, 0x0082 }, { 1068, 0x0800 }, { 1069, 0x0000 }, { 1069, 0x0000 }, + /* 0x3500 */ + { 1069, 0x0000 }, { 1069, 0x8000 }, { 1070, 0x0000 }, { 1070, 0x0000 }, + /* 0x3540 */ + { 1070, 0x0000 }, { 1070, 0x6000 }, { 1072, 0x4008 }, { 1074, 0x0000 }, + /* 0x3580 */ + { 1074, 0x0000 }, { 1074, 0x0000 }, { 1074, 0x0140 }, { 1076, 0x0000 }, + /* 0x35C0 */ + { 1076, 0x0020 }, { 1077, 0x0400 }, { 1078, 0x0000 }, { 1078, 0x0010 }, + /* 0x3600 */ + { 1079, 0x0020 }, { 1080, 0x0000 }, { 1080, 0x0000 }, { 1080, 0x0000 }, + /* 0x3640 */ + { 1080, 0x0400 }, { 1081, 0x0000 }, { 1081, 0x0000 }, { 1081, 0x0000 }, + /* 0x3680 */ + { 1081, 0x0000 }, { 1081, 0x0242 }, { 1084, 0x0000 }, { 1084, 0x0000 }, + /* 0x36C0 */ + { 1084, 0x8000 }, { 1085, 0x0000 }, { 1085, 0x0000 }, { 1085, 0x0000 }, + /* 0x3740 */ + { 1085, 0x0000 }, { 1085, 0x0000 }, { 1085, 0x1806 }, { 1089, 0x0020 }, + /* 0x3780 */ + { 1090, 0x2000 }, { 1091, 0x0000 }, { 1091, 0x0000 }, { 1091, 0x0000 }, + /* 0x37C0 */ + { 1091, 0x0002 }, { 1092, 0x0000 }, { 1092, 0x0104 }, { 1094, 0x2010 }, + /* 0x3800 */ + { 1096, 0x0001 }, { 1097, 0x0000 }, { 1097, 0x8000 }, { 1098, 0x0040 }, + /* 0x3840 */ + { 1099, 0x0001 }, { 1100, 0x1000 }, { 1101, 0x0002 }, { 1102, 0x0000 }, + /* 0x38C0 */ + { 1102, 0x0000 }, { 1102, 0x0000 }, { 1102, 0x0000 }, { 1102, 0x0400 }, + /* 0x3900 */ + { 1103, 0x0000 }, { 1103, 0x0480 }, { 1105, 0x0000 }, { 1105, 0x0000 }, + /* 0x3940 */ + { 1105, 0x0000 }, { 1105, 0x0000 }, { 1105, 0x8000 }, { 1106, 0x0000 }, + /* 0x3A40 */ + { 1106, 0x0000 }, { 1106, 0x0000 }, { 1106, 0x4000 }, { 1107, 0x0008 }, + /* 0x3AC0 */ + { 1108, 0x0000 }, { 1108, 0x00c0 }, { 1110, 0x0400 }, { 1111, 0x0000 }, + /* 0x3B00 */ + { 1111, 0x4000 }, { 1112, 0x1400 }, { 1114, 0x0004 }, { 1115, 0x0000 }, + /* 0x3B40 */ + { 1115, 0x0000 }, { 1115, 0x0000 }, { 1115, 0x2000 }, { 1116, 0x0080 }, + /* 0x3B80 */ + { 1117, 0x2180 }, { 1120, 0x0000 }, { 1120, 0x0010 }, { 1121, 0x0040 }, + /* 0x3BC0 */ + { 1122, 0x2008 }, { 1124, 0x0000 }, { 1124, 0x0000 }, { 1124, 0x0001 }, + /* 0x3C00 */ + { 1125, 0x8000 }, { 1126, 0x0000 }, { 1126, 0x0040 }, { 1127, 0x0000 }, + /* 0x3CC0 */ + { 1127, 0x0008 }, { 1128, 0x0004 }, { 1129, 0x0000 }, { 1129, 0x0000 }, + /* 0x3D00 */ + { 1129, 0x0000 }, { 1129, 0x4002 }, { 1131, 0x0000 }, { 1131, 0x0000 }, + /* 0x3D40 */ + { 1131, 0x0000 }, { 1131, 0x0000 }, { 1131, 0x0010 }, { 1132, 0x0000 }, + /* 0x3D80 */ + { 1132, 0x0000 }, { 1132, 0x0400 }, { 1133, 0x0000 }, { 1133, 0x0000 }, + /* 0x3DC0 */ + { 1133, 0x0001 }, { 1134, 0x0010 }, { 1135, 0x0000 }, { 1135, 0x0000 }, + /* 0x3E00 */ + { 1135, 0x0020 }, { 1136, 0x0000 }, { 1136, 0x0000 }, { 1136, 0x8000 }, + /* 0x3E40 */ + { 1137, 0x0000 }, { 1137, 0x0000 }, { 1137, 0x0141 }, { 1140, 0x0000 }, + /* 0x3E80 */ + { 1140, 0x0008 }, { 1141, 0x0010 }, { 1142, 0x0000 }, { 1142, 0x0000 }, + /* 0x3F40 */ + { 1142, 0x0000 }, { 1142, 0x0080 }, { 1143, 0x0000 }, { 1143, 0x00a4 }, + /* 0x3F80 */ + { 1146, 0x0000 }, { 1146, 0x0000 }, { 1146, 0x4000 }, { 1147, 0x0000 }, + /* 0x3FC0 */ + { 1147, 0x0200 }, { 1148, 0x0080 }, { 1149, 0x0000 }, { 1149, 0x0000 }, + /* 0x4000 */ + { 1149, 0x0000 }, { 1149, 0x0000 }, { 1149, 0x0000 }, { 1149, 0x0200 }, + /* 0x4040 */ + { 1150, 0x0000 }, { 1150, 0x0100 }, { 1151, 0x0000 }, { 1151, 0x0000 }, + /* 0x4080 */ + { 1151, 0x0000 }, { 1151, 0x0008 }, { 1152, 0x0000 }, { 1152, 0x0000 }, + /* 0x4100 */ + { 1152, 0x0020 }, { 1153, 0x0000 }, { 1153, 0x0000 }, { 1153, 0x0000 }, + /* 0x4140 */ + { 1153, 0x8100 }, { 1155, 0x0000 }, { 1155, 0x0008 }, { 1156, 0x0000 }, + /* 0x4180 */ + { 1156, 0x0000 }, { 1156, 0x0000 }, { 1156, 0x0000 }, { 1156, 0x8010 }, + /* 0x41C0 */ + { 1158, 0x0000 }, { 1158, 0x0000 }, { 1158, 0x4040 }, { 1160, 0x0008 }, + /* 0x4200 */ + { 1161, 0x4080 }, { 1163, 0x0000 }, { 1163, 0x0000 }, { 1163, 0x0000 }, + /* 0x4240 */ + { 1163, 0x0000 }, { 1163, 0x0000 }, { 1163, 0x0010 }, { 1164, 0x0000 }, + /* 0x42C0 */ + { 1164, 0x0040 }, { 1165, 0x2040 }, { 1167, 0x0000 }, { 1167, 0x0000 }, + /* 0x4300 */ + { 1167, 0x0004 }, { 1168, 0x0000 }, { 1168, 0x0800 }, { 1169, 0x0000 }, + /* 0x4340 */ + { 1169, 0x0008 }, { 1170, 0x0000 }, { 1170, 0x0000 }, { 1170, 0x0000 }, + /* 0x43C0 */ + { 1170, 0x0000 }, { 1170, 0x0000 }, { 1170, 0x4000 }, { 1171, 0x0001 }, + /* 0x4400 */ + { 1172, 0x0100 }, { 1173, 0x1080 }, { 1175, 0x0004 }, { 1176, 0x0000 }, + /* 0x4440 */ + { 1176, 0x0000 }, { 1176, 0x0808 }, { 1178, 0x0000 }, { 1178, 0x0440 }, + /* 0x4480 */ + { 1180, 0x0000 }, { 1180, 0x0002 }, { 1181, 0x0000 }, { 1181, 0x4008 }, + /* 0x44C0 */ + { 1183, 0x0000 }, { 1183, 0x0010 }, { 1184, 0x0000 }, { 1184, 0x0000 }, + /* 0x4500 */ + { 1184, 0x2100 }, { 1186, 0x0000 }, { 1186, 0x0020 }, { 1187, 0x0000 }, + /* 0x4540 */ + { 1187, 0x0008 }, { 1188, 0x0000 }, { 1188, 0x0000 }, { 1188, 0x0000 }, + /* 0x4580 */ + { 1188, 0x0000 }, { 1188, 0x2000 }, { 1189, 0x0000 }, { 1189, 0x0100 }, + /* 0x45C0 */ + { 1190, 0x0000 }, { 1190, 0x0000 }, { 1190, 0x0420 }, { 1192, 0x0000 }, + /* 0x4600 */ + { 1192, 0x8000 }, { 1193, 0x0000 }, { 1193, 0x0000 }, { 1193, 0x0000 }, + /* 0x4640 */ + { 1193, 0x0002 }, { 1194, 0x0000 }, { 1194, 0x0020 }, { 1195, 0x0000 }, + /* 0x4680 */ + { 1195, 0x0000 }, { 1195, 0x0000 }, { 1195, 0x8002 }, { 1197, 0x0000 }, + /* 0x4700 */ + { 1197, 0x1000 }, { 1198, 0x0000 }, { 1198, 0x0000 }, { 1198, 0x0000 }, + /* 0x4740 */ + { 1198, 0x0000 }, { 1198, 0x0000 }, { 1198, 0x0010 }, { 1199, 0x0000 }, + /* 0x47C0 */ + { 1199, 0x0000 }, { 1199, 0x0000 }, { 1199, 0x0000 }, { 1199, 0x2000 }, + /* 0x4800 */ + { 1200, 0x0000 }, { 1200, 0x0040 }, { 1201, 0x0000 }, { 1201, 0x0000 }, + /* 0x4840 */ + { 1201, 0x4010 }, { 1203, 0x0000 }, { 1203, 0x0000 }, { 1203, 0x0000 }, + /* 0x4880 */ + { 1203, 0x0000 }, { 1203, 0x0000 }, { 1203, 0x0000 }, { 1203, 0x0020 }, + /* 0x4980 */ + { 1204, 0x0000 }, { 1204, 0x0000 }, { 1204, 0x0000 }, { 1204, 0x0001 }, + /* 0x49C0 */ + { 1205, 0x0000 }, { 1205, 0x0000 }, { 1205, 0x0080 }, { 1206, 0x0400 }, + /* 0x4A00 */ + { 1207, 0x0010 }, { 1208, 0x0000 }, { 1208, 0x0200 }, { 1209, 0x0000 }, + /* 0x4A80 */ + { 1209, 0x0000 }, { 1209, 0x0000 }, { 1209, 0x0000 }, { 1209, 0x1000 }, + /* 0x4B00 */ + { 1210, 0x0000 }, { 1210, 0x0000 }, { 1210, 0x0000 }, { 1210, 0x0800 }, + /* 0x4BC0 */ + { 1211, 0x0404 }, { 1213, 0x0004 }, { 1214, 0x0100 }, { 1215, 0x0000 }, + /* 0x4C00 */ + { 1215, 0x0000 }, { 1215, 0x0080 }, { 1216, 0x0001 }, { 1217, 0x0000 }, + /* 0x4CC0 */ + { 1217, 0x0010 }, { 1218, 0x0002 }, { 1219, 0x0000 }, { 1219, 0x0000 }, + /* 0x4D00 */ + { 1219, 0x0080 }, { 1220, 0x0000 }, { 1220, 0x0000 }, { 1220, 0x0000 }, + /* 0x4D40 */ + { 1220, 0x0000 }, { 1220, 0x0000 }, { 1220, 0x0000 }, { 1220, 0x0080 }, + /* 0x4E00 */ + { 1221, 0xef8f }, { 1233, 0x43f7 }, { 1243, 0xff42 }, { 1253, 0x9b47 }, + /* 0x4E40 */ + { 1262, 0xe9ad }, { 1272, 0xe7e2 }, { 1282, 0x0204 }, { 1284, 0x400a }, + /* 0x4E80 */ + { 1287, 0x7f65 }, { 1298, 0xfb36 }, { 1309, 0x7977 }, { 1320, 0x1e49 }, + /* 0x4EC0 */ + { 1327, 0xeddf }, { 1340, 0xe7f1 }, { 1351, 0x683a }, { 1358, 0xa8e7 }, + /* 0x4F00 */ + { 1367, 0xee0b }, { 1376, 0x3443 }, { 1382, 0x8000 }, { 1383, 0x75d1 }, + /* 0x4F40 */ + { 1392, 0xe3c8 }, { 1400, 0xfffb }, { 1415, 0x9611 }, { 1421, 0xfde9 }, + /* 0x4F80 */ + { 1433, 0xad6c }, { 1442, 0x2dd6 }, { 1451, 0xe803 }, { 1457, 0xc064 }, + /* 0x4FC0 */ + { 1462, 0xce3c }, { 1471, 0xad97 }, { 1481, 0xc07b }, { 1489, 0x456e }, + /* 0x5000 */ + { 1497, 0xea67 }, { 1507, 0xd75f }, { 1519, 0x7ffe }, { 1533, 0x0a40 }, + /* 0x5040 */ + { 1536, 0xc3cf }, { 1546, 0x14e9 }, { 1553, 0x1468 }, { 1558, 0x2175 }, + /* 0x5080 */ + { 1565, 0x2121 }, { 1569, 0x177e }, { 1579, 0x3408 }, { 1583, 0x4cbe }, + /* 0x50C0 */ + { 1592, 0xf6b4 }, { 1602, 0x4673 }, { 1610, 0x62ea }, { 1618, 0x0a2c }, + /* 0x5100 */ + { 1623, 0x0b5f }, { 1632, 0xcdf4 }, { 1642, 0x0402 }, { 1644, 0x9ca4 }, + /* 0x5140 */ + { 1651, 0x7ffb }, { 1665, 0x14b5 }, { 1672, 0x7f25 }, { 1682, 0x19ea }, + /* 0x5180 */ + { 1690, 0xbe6d }, { 1701, 0x23ef }, { 1711, 0x3f7d }, { 1723, 0x30ff }, + /* 0x51C0 */ + { 1733, 0x3e78 }, { 1742, 0x7840 }, { 1747, 0x66c7 }, { 1756, 0x677b }, + /* 0x5200 */ + { 1767, 0x4ddf }, { 1778, 0x20fe }, { 1786, 0x46b0 }, { 1792, 0x0fc9 }, + /* 0x5240 */ + { 1800, 0xbe98 }, { 1809, 0x78f0 }, { 1817, 0x963a }, { 1825, 0xa0bf }, + /* 0x5280 */ + { 1834, 0x239c }, { 1841, 0x891e }, { 1848, 0xbe59 }, { 1858, 0x5e32 }, + /* 0x52C0 */ + { 1866, 0x37aa }, { 1875, 0xebe7 }, { 1887, 0x00dd }, { 1893, 0xcfad }, + /* 0x5300 */ + { 1904, 0xade7 }, { 1915, 0x36e1 }, { 1923, 0x841b }, { 1929, 0xcf2a }, + /* 0x5340 */ + { 1938, 0x27ef }, { 1949, 0x559e }, { 1958, 0xd2cb }, { 1967, 0xadbb }, + /* 0x5380 */ + { 1978, 0x0014 }, { 1980, 0xa548 }, { 1986, 0x6371 }, { 1994, 0x08dd }, + /* 0x53C0 */ + { 2001, 0x7f0d }, { 2011, 0x8ef0 }, { 2019, 0xff3e }, { 2032, 0x05ff }, + /* 0x5400 */ + { 2042, 0xff1a }, { 2053, 0xe807 }, { 2060, 0x7bd1 }, { 2070, 0x7b40 }, + /* 0x5440 */ + { 2077, 0x674d }, { 2086, 0x8022 }, { 2089, 0x1d44 }, { 2095, 0xb8fb }, + /* 0x5480 */ + { 2106, 0xfd51 }, { 2116, 0x1065 }, { 2121, 0xfb77 }, { 2134, 0xf58c }, + /* 0x54C0 */ + { 2143, 0x03df }, { 2152, 0x0100 }, { 2153, 0xf366 }, { 2163, 0xa40e }, + /* 0x5500 */ + { 2169, 0xc2d3 }, { 2177, 0x0051 }, { 2180, 0xc800 }, { 2183, 0x532a }, + /* 0x5540 */ + { 2190, 0x94f3 }, { 2199, 0x70c9 }, { 2206, 0x001b }, { 2210, 0x7800 }, + /* 0x5580 */ + { 2214, 0x4fdf }, { 2226, 0xf702 }, { 2234, 0x7f80 }, { 2242, 0x8041 }, + /* 0x55C0 */ + { 2245, 0x52b0 }, { 2251, 0xb416 }, { 2258, 0x021c }, { 2262, 0x6280 }, + /* 0x5600 */ + { 2266, 0x43c0 }, { 2271, 0x09d1 }, { 2277, 0x8300 }, { 2280, 0xa9d7 }, + /* 0x5640 */ + { 2290, 0x5285 }, { 2296, 0x4809 }, { 2300, 0xbd51 }, { 2309, 0x0556 }, + /* 0x5680 */ + { 2315, 0x95c1 }, { 2322, 0x6630 }, { 2328, 0x7325 }, { 2336, 0x105c }, + /* 0x56C0 */ + { 2341, 0x672f }, { 2351, 0xcd8a }, { 2359, 0x4109 }, { 2363, 0xa6cd }, + /* 0x5700 */ + { 2372, 0xaf19 }, { 2381, 0x916c }, { 2388, 0xa3ca }, { 2396, 0x0999 }, + /* 0x5740 */ + { 2402, 0xf4e5 }, { 2412, 0x0003 }, { 2414, 0x8752 }, { 2421, 0x98b9 }, + /* 0x5780 */ + { 2429, 0x0b04 }, { 2433, 0x7408 }, { 2438, 0x151d }, { 2445, 0x0109 }, + /* 0x57C0 */ + { 2448, 0xd9c9 }, { 2457, 0xd0dc }, { 2465, 0x2059 }, { 2470, 0xbff1 }, + /* 0x5800 */ + { 2482, 0x0e75 }, { 2490, 0x6220 }, { 2494, 0x8493 }, { 2500, 0x2637 }, + /* 0x5840 */ + { 2508, 0x1e03 }, { 2514, 0x4796 }, { 2522, 0x0a96 }, { 2528, 0x5225 }, + /* 0x5880 */ + { 2534, 0xae28 }, { 2541, 0xf099 }, { 2549, 0x4f00 }, { 2554, 0x4f0a }, + /* 0x58C0 */ + { 2561, 0x74aa }, { 2569, 0xd7be }, { 2581, 0xda35 }, { 2590, 0x3e9f }, + /* 0x5900 */ + { 2601, 0xbe64 }, { 2610, 0x1f71 }, { 2619, 0x7eb4 }, { 2629, 0x6186 }, + /* 0x5940 */ + { 2635, 0xc3d0 }, { 2642, 0xadb3 }, { 2652, 0x77a5 }, { 2662, 0x3178 }, + /* 0x5980 */ + { 2669, 0x2c1e }, { 2676, 0xaa4c }, { 2683, 0x5138 }, { 2689, 0x5a04 }, + /* 0x59C0 */ + { 2694, 0x2b48 }, { 2700, 0x761f }, { 2710, 0x4df8 }, { 2719, 0x8940 }, + /* 0x5A00 */ + { 2723, 0x320a }, { 2728, 0x958a }, { 2735, 0xa2a9 }, { 2742, 0x1060 }, + /* 0x5A40 */ + { 2745, 0x0243 }, { 2749, 0x0420 }, { 2751, 0x34e4 }, { 2758, 0xc480 }, + /* 0x5A80 */ + { 2762, 0x0810 }, { 2764, 0xdc04 }, { 2770, 0x0085 }, { 2773, 0xf42a }, + /* 0x5AC0 */ + { 2781, 0x1a16 }, { 2787, 0x14c1 }, { 2792, 0x426b }, { 2799, 0x0c21 }, + /* 0x5B00 */ + { 2803, 0x1b01 }, { 2808, 0x02c0 }, { 2811, 0x3424 }, { 2816, 0x4055 }, + /* 0x5B40 */ + { 2821, 0x102b }, { 2826, 0xbdf7 }, { 2839, 0x8b78 }, { 2847, 0xb52b }, + /* 0x5B80 */ + { 2856, 0xbbbb }, { 2868, 0xbfe8 }, { 2879, 0x507c }, { 2886, 0x8379 }, + /* 0x5BC0 */ + { 2894, 0x52fd }, { 2904, 0xe95d }, { 2914, 0x5bf6 }, { 2925, 0xe56b }, + /* 0x5C00 */ + { 2935, 0xeffe }, { 2949, 0x444e }, { 2955, 0x2b1d }, { 2963, 0xff03 }, + /* 0x5C40 */ + { 2973, 0xed63 }, { 2983, 0xc82b }, { 2990, 0xd3bf }, { 3002, 0x1643 }, + /* 0x5C80 */ + { 3008, 0x9500 }, { 3012, 0x8013 }, { 3016, 0x3fcf }, { 3028, 0x5dea }, + /* 0x5CC0 */ + { 3038, 0x0aa0 }, { 3042, 0x0205 }, { 3045, 0xa703 }, { 3052, 0x2c51 }, + /* 0x5D00 */ + { 3058, 0x68c0 }, { 3063, 0xaff3 }, { 3075, 0x0ad5 }, { 3082, 0x0202 }, + /* 0x5D40 */ + { 3084, 0x5cc4 }, { 3091, 0x100d }, { 3095, 0xb602 }, { 3101, 0x0049 }, + /* 0x5D80 */ + { 3104, 0x1996 }, { 3111, 0x2295 }, { 3117, 0x5095 }, { 3123, 0x3795 }, + /* 0x5DC0 */ + { 3132, 0x3a00 }, { 3136, 0x69ce }, { 3145, 0x4bff }, { 3157, 0x68be }, + /* 0x5E00 */ + { 3166, 0x184d }, { 3172, 0xaf76 }, { 3183, 0xe820 }, { 3188, 0x61c9 }, + /* 0x5E40 */ + { 3195, 0x52b9 }, { 3203, 0xc1f0 }, { 3210, 0x781e }, { 3218, 0xfffc }, + /* 0x5E80 */ + { 3232, 0x849a }, { 3238, 0x14e0 }, { 3243, 0x3ce1 }, { 3251, 0xc3e0 }, + /* 0x5EC0 */ + { 3258, 0x8f4e }, { 3267, 0xae4d }, { 3276, 0x130f }, { 3283, 0xffdb }, + /* 0x5F00 */ + { 3297, 0xff9f }, { 3311, 0xf9fb }, { 3324, 0xa2e8 }, { 3331, 0x71f2 }, + /* 0x5F40 */ + { 3340, 0x55a3 }, { 3348, 0x33da }, { 3357, 0x3ede }, { 3368, 0xf28f }, + /* 0x5F80 */ + { 3378, 0x9fbf }, { 3391, 0x538f }, { 3400, 0xe797 }, { 3411, 0x33b8 }, + /* 0x5FC0 */ + { 3419, 0x3ab8 }, { 3427, 0x73dc }, { 3437, 0xca17 }, { 3445, 0xb92b }, + /* 0x6000 */ + { 3454, 0xe000 }, { 3457, 0x3bf5 }, { 3468, 0x8ff7 }, { 3480, 0x042a }, + /* 0x6040 */ + { 3484, 0x3cce }, { 3493, 0x8625 }, { 3499, 0xbf3d }, { 3511, 0x80a1 }, + /* 0x6080 */ + { 3515, 0x3e1a }, { 3523, 0xecf4 }, { 3533, 0x07c9 }, { 3540, 0x717f }, + /* 0x60C0 */ + { 3551, 0x09e0 }, { 3556, 0xbf3a }, { 3567, 0x418b }, { 3573, 0x0fff }, + /* 0x6100 */ + { 3585, 0xe34b }, { 3594, 0xde2d }, { 3604, 0x1982 }, { 3609, 0xf491 }, + /* 0x6140 */ + { 3617, 0x7dd6 }, { 3628, 0xa728 }, { 3635, 0xc9ad }, { 3644, 0x50fb }, + /* 0x6180 */ + { 3653, 0x6484 }, { 3658, 0x07df }, { 3668, 0x7bb0 }, { 3677, 0x5644 }, + /* 0x61C0 */ + { 3683, 0x3fc8 }, { 3692, 0xa021 }, { 3696, 0x0048 }, { 3698, 0xf5f4 }, + /* 0x6200 */ + { 3709, 0x7701 }, { 3716, 0xec77 }, { 3727, 0xc64e }, { 3735, 0xc91d }, + /* 0x6240 */ + { 3743, 0x7bcb }, { 3754, 0x4d6e }, { 3763, 0xe11b }, { 3771, 0xda4a }, + /* 0x6280 */ + { 3779, 0x063d }, { 3786, 0x5bfe }, { 3798, 0x1840 }, { 3801, 0x3a22 }, + /* 0x62C0 */ + { 3807, 0xb7f4 }, { 3818, 0x3bff }, { 3831, 0xf003 }, { 3837, 0xf0ea }, + /* 0x6300 */ + { 3846, 0x378e }, { 3855, 0x8303 }, { 3860, 0x8980 }, { 3864, 0xfe24 }, + /* 0x6340 */ + { 3873, 0xf21a }, { 3881, 0x12a1 }, { 3886, 0x5ba0 }, { 3893, 0x1cc4 }, + /* 0x6380 */ + { 3899, 0xd319 }, { 3907, 0x8b54 }, { 3914, 0x1faf }, { 3925, 0x6834 }, + /* 0x63C0 */ + { 3931, 0x8259 }, { 3937, 0x1c75 }, { 3945, 0x7a2b }, { 3954, 0x04f4 }, + /* 0x6400 */ + { 3960, 0xa240 }, { 3964, 0x50d9 }, { 3971, 0xb364 }, { 3979, 0x4450 }, + /* 0x6440 */ + { 3983, 0x4004 }, { 3985, 0x2d02 }, { 3990, 0xa281 }, { 3995, 0x2748 }, + /* 0x6480 */ + { 4001, 0x0188 }, { 4004, 0xe42e }, { 4012, 0x6a30 }, { 4018, 0xda05 }, + /* 0x64C0 */ + { 4025, 0x7cb6 }, { 4035, 0x05b5 }, { 4042, 0x90ff }, { 4052, 0xecd6 }, + /* 0x6500 */ + { 4062, 0x8031 }, { 4066, 0x7150 }, { 4072, 0x9e1c }, { 4080, 0xcbf4 }, + /* 0x6540 */ + { 4090, 0xa130 }, { 4095, 0x63f2 }, { 4104, 0x18cc }, { 4110, 0x05b5 }, + /* 0x6580 */ + { 4117, 0x57be }, { 4128, 0xba83 }, { 4136, 0xb8b2 }, { 4144, 0xb3a5 }, + /* 0x65C0 */ + { 4153, 0x9a7e }, { 4163, 0x0a94 }, { 4168, 0x33e7 }, { 4178, 0x1e06 }, + /* 0x6600 */ + { 4184, 0xd7dd }, { 4196, 0xd038 }, { 4202, 0xadb7 }, { 4213, 0x947b }, + /* 0x6640 */ + { 4222, 0xdb3e }, { 4233, 0xee86 }, { 4242, 0xfffe }, { 4257, 0x0dd9 }, + /* 0x6680 */ + { 4265, 0x639b }, { 4274, 0x23c7 }, { 4282, 0x6845 }, { 4288, 0xdb36 }, + /* 0x66C0 */ + { 4298, 0x03d2 }, { 4304, 0x3e40 }, { 4310, 0x1341 }, { 4315, 0xffbd }, + /* 0x6700 */ + { 4329, 0xab2b }, { 4338, 0xeafc }, { 4349, 0x7dc0 }, { 4357, 0xa5da }, + /* 0x6740 */ + { 4366, 0xf3c2 }, { 4375, 0xf25b }, { 4385, 0xa47f }, { 4395, 0xd8ff }, + /* 0x6780 */ + { 4407, 0x1aa2 }, { 4413, 0x3dad }, { 4423, 0x8247 }, { 4429, 0x0bdd }, + /* 0x67C0 */ + { 4438, 0xc55b }, { 4447, 0x6f9f }, { 4459, 0xd294 }, { 4466, 0xdabb }, + /* 0x6800 */ + { 4477, 0x001e }, { 4481, 0xe1c9 }, { 4489, 0x3e06 }, { 4496, 0x7b1e }, + /* 0x6840 */ + { 4506, 0x737f }, { 4518, 0xbabf }, { 4530, 0x4888 }, { 4534, 0xd4f4 }, + /* 0x6880 */ + { 4543, 0xa02e }, { 4549, 0xbfd9 }, { 4561, 0xaded }, { 4572, 0x1e7f }, + /* 0x68C0 */ + { 4583, 0xbf78 }, { 4594, 0x87f5 }, { 4604, 0xf1bb }, { 4615, 0x1e87 }, + /* 0x6900 */ + { 4623, 0xfdbb }, { 4636, 0x1e04 }, { 4641, 0x056e }, { 4648, 0xaa71 }, + /* 0x6940 */ + { 4656, 0x0644 }, { 4660, 0x76b8 }, { 4669, 0xff1f }, { 4682, 0xf7bc }, + /* 0x6980 */ + { 4694, 0x4407 }, { 4699, 0x1976 }, { 4707, 0x60e1 }, { 4713, 0xdc97 }, + /* 0x69C0 */ + { 4723, 0xfc8b }, { 4733, 0x634b }, { 4741, 0xef8c }, { 4751, 0xea7c }, + /* 0x6A00 */ + { 4761, 0x9c24 }, { 4767, 0xeebe }, { 4779, 0x4e0e }, { 4786, 0xef7d }, + /* 0x6A40 */ + { 4799, 0x4bf0 }, { 4807, 0x8b45 }, { 4814, 0x0856 }, { 4819, 0xc50c }, + /* 0x6A80 */ + { 4825, 0x6a19 }, { 4832, 0xf093 }, { 4840, 0x5c2f }, { 4849, 0x2908 }, + /* 0x6AC0 */ + { 4853, 0x004e }, { 4857, 0xfc1b }, { 4867, 0x1590 }, { 4872, 0x2c0e }, + /* 0x6B00 */ + { 4878, 0x8c30 }, { 4883, 0xe8c7 }, { 4892, 0x908b }, { 4898, 0x67a4 }, + /* 0x6B40 */ + { 4906, 0x56c8 }, { 4913, 0x8b59 }, { 4921, 0x96ff }, { 4933, 0x8fb8 }, + /* 0x6B80 */ + { 4942, 0x2e5f }, { 4952, 0x4960 }, { 4957, 0xee10 }, { 4964, 0xfcbe }, + /* 0x6BC0 */ + { 4976, 0xebe1 }, { 4986, 0x8ddc }, { 4995, 0xd8c0 }, { 5001, 0x800a }, + /* 0x6C00 */ + { 5004, 0xc524 }, { 5010, 0x089b }, { 5016, 0x0018 }, { 5018, 0xc5f8 }, + /* 0x6C40 */ + { 5027, 0x6007 }, { 5032, 0xfea1 }, { 5042, 0x2585 }, { 5048, 0x645d }, + /* 0x6C80 */ + { 5056, 0x337e }, { 5066, 0x1ffd }, { 5078, 0x6c06 }, { 5084, 0xff0a }, + /* 0x6CC0 */ + { 5094, 0x1676 }, { 5102, 0x3ef9 }, { 5113, 0xff2f }, { 5126, 0x080b }, + /* 0x6D00 */ + { 5130, 0x5c11 }, { 5136, 0xca84 }, { 5142, 0xcef0 }, { 5151, 0xfb7e }, + /* 0x6D40 */ + { 5164, 0x0032 }, { 5167, 0x5f00 }, { 5173, 0x5679 }, { 5182, 0x0391 }, + /* 0x6D80 */ + { 5187, 0x77a7 }, { 5198, 0x1b3a }, { 5206, 0xdc00 }, { 5211, 0x9134 }, + /* 0x6DC0 */ + { 5217, 0xd9f5 }, { 5228, 0xef67 }, { 5240, 0x5f52 }, { 5249, 0x1eea }, + /* 0x6E00 */ + { 5258, 0x0fa0 }, { 5264, 0xeea8 }, { 5273, 0xfaff }, { 5287, 0x5554 }, + /* 0x6E40 */ + { 5294, 0xff18 }, { 5304, 0xd9da }, { 5314, 0xc888 }, { 5319, 0xc044 }, + /* 0x6E80 */ + { 5323, 0x9005 }, { 5327, 0xb149 }, { 5334, 0x8ca4 }, { 5340, 0xa4d6 }, + /* 0x6EC0 */ + { 5348, 0x5ebe }, { 5359, 0x623a }, { 5366, 0x9800 }, { 5369, 0xcb94 }, + /* 0x6F00 */ + { 5377, 0x9646 }, { 5384, 0x053b }, { 5391, 0x9c2d }, { 5399, 0xd16e }, + /* 0x6F40 */ + { 5408, 0x0022 }, { 5410, 0xdf96 }, { 5421, 0xe157 }, { 5430, 0x7511 }, + /* 0x6F80 */ + { 5437, 0x7157 }, { 5446, 0x81d3 }, { 5453, 0x84bb }, { 5461, 0x526a }, + /* 0x6FC0 */ + { 5468, 0x07cf }, { 5477, 0xcd30 }, { 5484, 0xda13 }, { 5492, 0x566b }, + /* 0x7000 */ + { 5501, 0x8ee3 }, { 5510, 0xed22 }, { 5518, 0x11c8 }, { 5523, 0x5605 }, + /* 0x7040 */ + { 5529, 0x5c88 }, { 5535, 0x6112 }, { 5540, 0xda38 }, { 5548, 0x7161 }, + /* 0x7080 */ + { 5555, 0x4662 }, { 5561, 0x82a4 }, { 5566, 0xf810 }, { 5572, 0x0f8a }, + /* 0x70C0 */ + { 5579, 0x8d00 }, { 5583, 0xb31a }, { 5591, 0x1010 }, { 5593, 0x2202 }, + /* 0x7100 */ + { 5596, 0x93d8 }, { 5604, 0x5610 }, { 5609, 0xc843 }, { 5615, 0x1043 }, + /* 0x7140 */ + { 5619, 0x56c0 }, { 5625, 0x526f }, { 5634, 0x53f5 }, { 5644, 0x2000 }, + /* 0x7180 */ + { 5645, 0x85b1 }, { 5652, 0x8a74 }, { 5659, 0xd105 }, { 5665, 0x460a }, + /* 0x71C0 */ + { 5670, 0x4b1a }, { 5677, 0x92bd }, { 5686, 0x70e1 }, { 5693, 0xda20 }, + /* 0x7200 */ + { 5699, 0x20c1 }, { 5703, 0x0821 }, { 5706, 0x3d00 }, { 5711, 0xff75 }, + /* 0x7240 */ + { 5724, 0x19c5 }, { 5731, 0xabec }, { 5741, 0xc28e }, { 5748, 0xe314 }, + /* 0x7280 */ + { 5755, 0x6087 }, { 5761, 0x0844 }, { 5764, 0xf085 }, { 5771, 0x4247 }, + /* 0x72C0 */ + { 5777, 0x505f }, { 5785, 0x0a85 }, { 5790, 0x3207 }, { 5796, 0x3f88 }, + /* 0x7300 */ + { 5804, 0x0480 }, { 5806, 0xbbc4 }, { 5815, 0xdfa0 }, { 5824, 0xe2da }, + /* 0x7340 */ + { 5833, 0xc030 }, { 5837, 0x0085 }, { 5840, 0xdd48 }, { 5848, 0x1da7 }, + /* 0x7380 */ + { 5857, 0x0eb2 }, { 5864, 0xd170 }, { 5871, 0x0b65 }, { 5878, 0x9aac }, + /* 0x73C0 */ + { 5886, 0xef25 }, { 5896, 0x4240 }, { 5899, 0x66ab }, { 5908, 0x4702 }, + /* 0x7400 */ + { 5913, 0x06ea }, { 5920, 0x0c08 }, { 5923, 0xdd74 }, { 5933, 0x867f }, + /* 0x7440 */ + { 5943, 0x28db }, { 5951, 0xfeac }, { 5962, 0xae1d }, { 5971, 0x404b }, + /* 0x7480 */ + { 5976, 0x0bea }, { 5984, 0xd385 }, { 5992, 0x0fef }, { 6003, 0xae21 }, + /* 0x74C0 */ + { 6010, 0x8700 }, { 6014, 0x5550 }, { 6020, 0xcacd }, { 6029, 0x85c7 }, + /* 0x7500 */ + { 6037, 0x703a }, { 6044, 0xd5aa }, { 6053, 0x9d79 }, { 6063, 0x7d8f }, + /* 0x7540 */ + { 6074, 0xff51 }, { 6085, 0x3e17 }, { 6094, 0xbef5 }, { 6106, 0xe7df }, + /* 0x7580 */ + { 6119, 0xdec6 }, { 6129, 0x2416 }, { 6134, 0x082c }, { 6138, 0xf3af }, + /* 0x75C0 */ + { 6150, 0xe4ed }, { 6160, 0xeb3c }, { 6170, 0x529d }, { 6178, 0xd61f }, + /* 0x7600 */ + { 6188, 0xab8f }, { 6198, 0xdb68 }, { 6207, 0x21f7 }, { 6216, 0x1839 }, + /* 0x7640 */ + { 6222, 0x1bce }, { 6231, 0x1164 }, { 6236, 0xf7b6 }, { 6248, 0x7d47 }, + /* 0x7680 */ + { 6258, 0x49db }, { 6267, 0x7e69 }, { 6277, 0xc5c3 }, { 6285, 0x87d1 }, + /* 0x76C0 */ + { 6293, 0x776c }, { 6303, 0xd8d4 }, { 6311, 0x55fa }, { 6321, 0x5916 }, + /* 0x7700 */ + { 6328, 0x1f92 }, { 6336, 0xce80 }, { 6342, 0x2271 }, { 6348, 0x15f0 }, + /* 0x7740 */ + { 6355, 0x60c1 }, { 6360, 0x9d00 }, { 6365, 0x0d6f }, { 6374, 0xf604 }, + /* 0x7780 */ + { 6381, 0x4801 }, { 6384, 0xc412 }, { 6389, 0x3635 }, { 6397, 0xba49 }, + /* 0x77C0 */ + { 6405, 0x2080 }, { 6407, 0xdc80 }, { 6413, 0xf6fd }, { 6426, 0x1819 }, + /* 0x7800 */ + { 6431, 0x3264 }, { 6437, 0x0234 }, { 6441, 0x30e3 }, { 6448, 0x8414 }, + /* 0x7840 */ + { 6452, 0xc0a8 }, { 6457, 0x2002 }, { 6459, 0xdd10 }, { 6466, 0x1014 }, + /* 0x7880 */ + { 6469, 0x74c2 }, { 6476, 0xe4ba }, { 6485, 0xa698 }, { 6492, 0x5c21 }, + /* 0x78C0 */ + { 6498, 0x5d62 }, { 6506, 0x0433 }, { 6511, 0x91d3 }, { 6519, 0x6e94 }, + /* 0x7900 */ + { 6527, 0x4083 }, { 6531, 0x1a07 }, { 6537, 0x5c60 }, { 6543, 0x5c13 }, + /* 0x7940 */ + { 6550, 0x07e3 }, { 6558, 0xfde9 }, { 6570, 0x21a5 }, { 6576, 0x8684 }, + /* 0x7980 */ + { 6581, 0xe433 }, { 6589, 0x2970 }, { 6595, 0x46c2 }, { 6601, 0xef1b }, + /* 0x79C0 */ + { 6612, 0x3f87 }, { 6622, 0xc176 }, { 6630, 0x3ada }, { 6639, 0x0801 }, + /* 0x7A00 */ + { 6641, 0x6d09 }, { 6648, 0xdfb2 }, { 6659, 0x6001 }, { 6662, 0xfb86 }, + /* 0x7A40 */ + { 6672, 0xf2cd }, { 6682, 0xb2c1 }, { 6689, 0x2e8f }, { 6698, 0xa771 }, + /* 0x7A80 */ + { 6707, 0x053e }, { 6714, 0x81ed }, { 6722, 0xd609 }, { 6729, 0xde49 }, + /* 0x7AC0 */ + { 6738, 0xfdb8 }, { 6749, 0xb62e }, { 6758, 0xadef }, { 6770, 0xa751 }, + /* 0x7B00 */ + { 6778, 0x8dd4 }, { 6786, 0x4b06 }, { 6792, 0xf5e1 }, { 6802, 0x2a6a }, + /* 0x7B40 */ + { 6809, 0xfbe2 }, { 6820, 0x2077 }, { 6827, 0xf2f1 }, { 6837, 0x863f }, + /* 0x7B80 */ + { 6846, 0xa8c0 }, { 6851, 0xffb7 }, { 6865, 0xa402 }, { 6869, 0x1132 }, + /* 0x7BC0 */ + { 6874, 0x9ef3 }, { 6885, 0x26d0 }, { 6891, 0x2671 }, { 6898, 0x00c9 }, + /* 0x7C00 */ + { 6902, 0xe88b }, { 6910, 0xc09e }, { 6917, 0x0ccb }, { 6924, 0xe1ca }, + /* 0x7C40 */ + { 6932, 0xb429 }, { 6939, 0xc3d3 }, { 6948, 0xf233 }, { 6957, 0x4229 }, + /* 0x7C80 */ + { 6962, 0xaa0e }, { 6969, 0x89b5 }, { 6977, 0x69f7 }, { 6988, 0xf2ce }, + /* 0x7CC0 */ + { 6998, 0x6535 }, { 7006, 0xf3e4 }, { 7016, 0x88c5 }, { 7022, 0x4d74 }, + /* 0x7D00 */ + { 7030, 0x2ffd }, { 7042, 0x7fbd }, { 7055, 0xd80f }, { 7063, 0xe62f }, + /* 0x7D40 */ + { 7073, 0xd9ff }, { 7086, 0x5e49 }, { 7094, 0x454e }, { 7101, 0xa66f }, + /* 0x7D80 */ + { 7111, 0x9b48 }, { 7118, 0xbe88 }, { 7126, 0xfccd }, { 7137, 0xedf7 }, + /* 0x7DC0 */ + { 7150, 0x9c85 }, { 7157, 0x77e6 }, { 7168, 0x935b }, { 7177, 0x0a16 }, + /* 0x7E00 */ + { 7182, 0x0f32 }, { 7189, 0xe8a7 }, { 7198, 0x59cf }, { 7208, 0x6ea6 }, + /* 0x7E40 */ + { 7217, 0x2cea }, { 7225, 0x6674 }, { 7233, 0x2ec2 }, { 7240, 0xfa29 }, + /* 0x7E80 */ + { 7249, 0xf7cc }, { 7260, 0x1d5f }, { 7270, 0x0000 }, { 7270, 0x0000 }, + /* 0x7F00 */ + { 7270, 0x0000 }, { 7270, 0x0000 }, { 7270, 0x0000 }, { 7270, 0x5d40 }, + /* 0x7F40 */ + { 7276, 0xf0b8 }, { 7284, 0x8137 }, { 7291, 0x6f9b }, { 7302, 0x63a5 }, + /* 0x7F80 */ + { 7310, 0x55ec }, { 7319, 0x74d3 }, { 7328, 0xe318 }, { 7335, 0xa344 }, + /* 0x7FC0 */ + { 7341, 0xd46a }, { 7349, 0x8834 }, { 7354, 0xda6b }, { 7364, 0x1e0d }, + /* 0x8000 */ + { 7371, 0x5d7f }, { 7383, 0x13f7 }, { 7393, 0x1152 }, { 7398, 0xb8e9 }, + /* 0x8040 */ + { 7407, 0x0448 }, { 7410, 0xc544 }, { 7416, 0x8146 }, { 7421, 0xeaff }, + /* 0x8080 */ + { 7434, 0x1af0 }, { 7441, 0x3f48 }, { 7449, 0xb6b6 }, { 7459, 0x0516 }, + /* 0x80C0 */ + { 7464, 0x5478 }, { 7471, 0x6fe0 }, { 7480, 0x8073 }, { 7486, 0x393a }, + /* 0x8100 */ + { 7494, 0x27e4 }, { 7502, 0x4d40 }, { 7507, 0x9298 }, { 7513, 0x622a }, + /* 0x8140 */ + { 7519, 0x4c40 }, { 7523, 0x803b }, { 7529, 0x6be1 }, { 7538, 0x8713 }, + /* 0x8180 */ + { 7545, 0x853f }, { 7554, 0x3528 }, { 7560, 0x0319 }, { 7565, 0xed2d }, + /* 0x81C0 */ + { 7575, 0xa74f }, { 7585, 0x8fca }, { 7594, 0x35b9 }, { 7603, 0xfc18 }, + /* 0x8200 */ + { 7611, 0x77b6 }, { 7622, 0xdbc5 }, { 7632, 0x5e06 }, { 7639, 0x13fc }, + /* 0x8240 */ + { 7648, 0x8ae1 }, { 7655, 0xb780 }, { 7662, 0xcd5d }, { 7672, 0xe3d6 }, + /* 0x8280 */ + { 7682, 0x6c08 }, { 7687, 0xa20c }, { 7692, 0xfbfa }, { 7705, 0xff9e }, + /* 0x82C0 */ + { 7718, 0x0060 }, { 7720, 0xdabe }, { 7731, 0x09ee }, { 7739, 0x6e9a }, + /* 0x8300 */ + { 7748, 0x53ff }, { 7760, 0x39c0 }, { 7766, 0xa90c }, { 7772, 0x1777 }, + /* 0x8340 */ + { 7782, 0x86b9 }, { 7790, 0x01b7 }, { 7797, 0x000c }, { 7799, 0xb8a8 }, + /* 0x8380 */ + { 7806, 0x66e0 }, { 7813, 0xed7c }, { 7824, 0x0f85 }, { 7831, 0xa022 }, + /* 0x83C0 */ + { 7835, 0xd6a3 }, { 7844, 0xb15b }, { 7853, 0x8e23 }, { 7860, 0x2a97 }, + /* 0x8400 */ + { 7868, 0xfcda }, { 7879, 0x00aa }, { 7883, 0x1605 }, { 7888, 0x3322 }, + /* 0x8440 */ + { 7894, 0xc740 }, { 7900, 0x9e86 }, { 7908, 0xfa6e }, { 7919, 0x17eb }, + /* 0x8480 */ + { 7929, 0x0836 }, { 7934, 0xd291 }, { 7941, 0xa042 }, { 7945, 0xdf14 }, + /* 0x84C0 */ + { 7954, 0xee57 }, { 7965, 0x164b }, { 7972, 0xd480 }, { 7977, 0xb413 }, + /* 0x8500 */ + { 7984, 0x1041 }, { 7987, 0xcdba }, { 7997, 0xb87a }, { 8006, 0x6034 }, + /* 0x8540 */ + { 8011, 0xcf0b }, { 8020, 0x47aa }, { 8028, 0xa71e }, { 8037, 0xec80 }, + /* 0x8580 */ + { 8043, 0x95d3 }, { 8052, 0xba9b }, { 8062, 0xff54 }, { 8073, 0x1681 }, + /* 0x85C0 */ + { 8078, 0xee82 }, { 8086, 0xb321 }, { 8093, 0x2672 }, { 8100, 0xcec0 }, + /* 0x8600 */ + { 8107, 0x0cf5 }, { 8115, 0x45cf }, { 8124, 0xa296 }, { 8131, 0x9301 }, + /* 0x8640 */ + { 8136, 0x6003 }, { 8140, 0xdcf9 }, { 8151, 0x9884 }, { 8156, 0x0ea2 }, + /* 0x8680 */ + { 8162, 0x3e80 }, { 8168, 0x312a }, { 8174, 0x8f18 }, { 8181, 0x014b }, + /* 0x86C0 */ + { 8186, 0x6ada }, { 8195, 0xcab2 }, { 8203, 0xf258 }, { 8211, 0x7f00 }, + /* 0x8700 */ + { 8218, 0x6fed }, { 8230, 0x970f }, { 8239, 0x022a }, { 8243, 0xcc92 }, + /* 0x8740 */ + { 8250, 0x5a09 }, { 8256, 0x83aa }, { 8263, 0x4579 }, { 8271, 0x9156 }, + /* 0x8780 */ + { 8278, 0x2b84 }, { 8284, 0x8008 }, { 8286, 0xb885 }, { 8293, 0x6c28 }, + /* 0x87C0 */ + { 8299, 0x48d3 }, { 8306, 0x8045 }, { 8310, 0xbc69 }, { 8319, 0x4ae4 }, + /* 0x8800 */ + { 8326, 0xec6a }, { 8335, 0x807b }, { 8342, 0x418e }, { 8348, 0x1a46 }, + /* 0x8840 */ + { 8354, 0x3455 }, { 8361, 0xeb8c }, { 8370, 0x8b1e }, { 8378, 0xe0a5 }, + /* 0x8880 */ + { 8385, 0x2906 }, { 8390, 0x43c4 }, { 8396, 0x4c15 }, { 8402, 0xf0b3 }, + /* 0x88C0 */ + { 8411, 0xc43f }, { 8420, 0xbb3e }, { 8431, 0x0102 }, { 8433, 0x733f }, + /* 0x8900 */ + { 8444, 0x1496 }, { 8450, 0x770d }, { 8459, 0x0ca0 }, { 8463, 0x0bc5 }, + /* 0x8940 */ + { 8470, 0x323f }, { 8479, 0xc040 }, { 8482, 0xa455 }, { 8489, 0xc094 }, + /* 0x8980 */ + { 8494, 0x8fcb }, { 8504, 0x85d9 }, { 8512, 0x96c2 }, { 8519, 0xa48d }, + /* 0x89C0 */ + { 8526, 0x0001 }, { 8527, 0x3554 }, { 8534, 0x08e8 }, { 8539, 0xa15a }, + /* 0x8A00 */ + { 8546, 0x550d }, { 8553, 0xa9ff }, { 8565, 0x242e }, { 8571, 0x5cfa }, + /* 0x8A40 */ + { 8581, 0x61e2 }, { 8588, 0x6937 }, { 8597, 0x7a4f }, { 8607, 0x122f }, + /* 0x8A80 */ + { 8614, 0x32b4 }, { 8621, 0x452b }, { 8628, 0x71fb }, { 8639, 0xd285 }, + /* 0x8AC0 */ + { 8646, 0xb894 }, { 8653, 0xdcc5 }, { 8662, 0x68d7 }, { 8671, 0x55da }, + /* 0x8B00 */ + { 8680, 0x74b7 }, { 8690, 0xbed1 }, { 8700, 0x3943 }, { 8707, 0x4208 }, + /* 0x8B40 */ + { 8710, 0xd24a }, { 8717, 0xdf52 }, { 8727, 0x9a40 }, { 8732, 0xa0d7 }, + /* 0x8B80 */ + { 8740, 0x5c0b }, { 8747, 0x767d }, { 8758, 0x0000 }, { 8758, 0x0000 }, + /* 0x8C00 */ + { 8758, 0x0000 }, { 8758, 0x0000 }, { 8758, 0x0000 }, { 8758, 0xa680 }, + /* 0x8C40 */ + { 8763, 0xd7e2 }, { 8773, 0x04b1 }, { 8778, 0x3f06 }, { 8786, 0x1708 }, + /* 0x8C80 */ + { 8791, 0x7624 }, { 8798, 0x6b1c }, { 8806, 0xff97 }, { 8819, 0xb9dd }, + /* 0x8CC0 */ + { 8830, 0x659f }, { 8840, 0x5e6a }, { 8849, 0x245f }, { 8857, 0x7d13 }, + /* 0x8D00 */ + { 8866, 0xefb0 }, { 8876, 0x085d }, { 8882, 0x0000 }, { 8882, 0x0000 }, + /* 0x8D40 */ + { 8882, 0x0000 }, { 8882, 0x0000 }, { 8882, 0x38d0 }, { 8888, 0x009b }, + /* 0x8D80 */ + { 8893, 0x0432 }, { 8897, 0x0220 }, { 8899, 0x8148 }, { 8903, 0x4408 }, + /* 0x8DC0 */ + { 8906, 0xd944 }, { 8913, 0xaec2 }, { 8921, 0x9d0a }, { 8928, 0xb028 }, + /* 0x8E00 */ + { 8933, 0x9740 }, { 8939, 0xe051 }, { 8945, 0x048f }, { 8951, 0x2271 }, + /* 0x8E40 */ + { 8957, 0x1f94 }, { 8965, 0x8231 }, { 8970, 0xb01d }, { 8977, 0x1855 }, + /* 0x8E80 */ + { 8983, 0x2cb2 }, { 8990, 0x431a }, { 8996, 0xdc02 }, { 9002, 0x486b }, + /* 0x8EC0 */ + { 9009, 0x3d61 }, { 9017, 0x8816 }, { 9022, 0x080c }, { 9025, 0x7f00 }, + /* 0x8F00 */ + { 9032, 0x1729 }, { 9039, 0xfabc }, { 9050, 0xae40 }, { 9056, 0xcb48 }, + /* 0x8F40 */ + { 9063, 0x7675 }, { 9073, 0x9190 }, { 9078, 0x001e }, { 9082, 0x0000 }, + /* 0x8F80 */ + { 9082, 0x0000 }, { 9082, 0xd800 }, { 9086, 0xe1d8 }, { 9094, 0x9cf7 }, + /* 0x8FC0 */ + { 9105, 0x6476 }, { 9113, 0x043a }, { 9118, 0xef75 }, { 9130, 0x2fb3 }, + /* 0x9000 */ + { 9140, 0xf96f }, { 9152, 0xe6fb }, { 9164, 0x608f }, { 9171, 0x53e6 }, + /* 0x9040 */ + { 9180, 0xeebe }, { 9192, 0x737f }, { 9204, 0xe32b }, { 9213, 0xb5e4 }, + /* 0x9080 */ + { 9222, 0x97bf }, { 9234, 0x0aa3 }, { 9240, 0x854e }, { 9247, 0x416b }, + /* 0x90C0 */ + { 9254, 0x45ba }, { 9262, 0xf880 }, { 9268, 0xa916 }, { 9275, 0xe0f4 }, + /* 0x9100 */ + { 9283, 0x0055 }, { 9287, 0x5374 }, { 9295, 0xa08c }, { 9300, 0x2697 }, + /* 0x9140 */ + { 9308, 0x7fc0 }, { 9317, 0x0bd4 }, { 9324, 0x163e }, { 9332, 0x03bc }, + /* 0x9180 */ + { 9339, 0x6aac }, { 9347, 0x5085 }, { 9352, 0xdd14 }, { 9360, 0x157a }, + /* 0x91C0 */ + { 9368, 0xfbdb }, { 9381, 0xbdc3 }, { 9391, 0x70fa }, { 9400, 0x9862 }, + /* 0x9200 */ + { 9406, 0x6482 }, { 9411, 0x40f3 }, { 9418, 0x1200 }, { 9420, 0x9798 }, + /* 0x9240 */ + { 9428, 0xcfbd }, { 9440, 0x4ec3 }, { 9448, 0x01f7 }, { 9456, 0xf102 }, + /* 0x9280 */ + { 9462, 0x2329 }, { 9468, 0x9fea }, { 9479, 0x2880 }, { 9482, 0x8284 }, + /* 0x92C0 */ + { 9486, 0xd845 }, { 9493, 0x028d }, { 9498, 0x26b1 }, { 9505, 0x9f8c }, + /* 0x9300 */ + { 9514, 0xa054 }, { 9519, 0xe723 }, { 9528, 0xdbef }, { 9541, 0x0c24 }, + /* 0x9340 */ + { 9545, 0x2f90 }, { 9552, 0x1cd2 }, { 9559, 0x5c31 }, { 9566, 0x502b }, + /* 0x9380 */ + { 9572, 0x9900 }, { 9576, 0x4cd0 }, { 9582, 0x708a }, { 9588, 0x0601 }, + /* 0x93C0 */ + { 9591, 0x01ca }, { 9596, 0xf1c3 }, { 9605, 0x01b6 }, { 9611, 0x2822 }, + /* 0x9400 */ + { 9615, 0x8298 }, { 9620, 0x07d9 }, { 9628, 0x0802 }, { 9630, 0x0d7c }, + /* 0x9440 */ + { 9638, 0x0432 }, { 9642, 0x4c0e }, { 9648, 0xac0d }, { 9655, 0xf0a7 }, + /* 0x9480 */ + { 9664, 0x0002 }, { 9665, 0x0000 }, { 9665, 0x0000 }, { 9665, 0x0000 }, + /* 0x9540 */ + { 9665, 0x0000 }, { 9665, 0x0000 }, { 9665, 0x0000 }, { 9665, 0x0380 }, + /* 0x9580 */ + { 9668, 0xfecd }, { 9680, 0x835a }, { 9687, 0x3bfd }, { 9699, 0x7a54 }, + /* 0x95C0 */ + { 9707, 0x3d88 }, { 9714, 0x5579 }, { 9723, 0x0026 }, { 9726, 0x0000 }, + /* 0x9600 */ + { 9726, 0x0000 }, { 9726, 0x3000 }, { 9728, 0xd502 }, { 9734, 0x981c }, + /* 0x9640 */ + { 9740, 0xb817 }, { 9748, 0xf901 }, { 9755, 0x147e }, { 9763, 0x25ed }, + /* 0x9680 */ + { 9772, 0xed74 }, { 9782, 0x3fb0 }, { 9791, 0x87b9 }, { 9800, 0x3fdf }, + /* 0x96C0 */ + { 9813, 0x7af3 }, { 9824, 0x7f66 }, { 9835, 0x8f0c }, { 9842, 0x0ac5 }, + /* 0x9700 */ + { 9848, 0xe5d1 }, { 9857, 0x525a }, { 9864, 0x0498 }, { 9868, 0x6b4d }, + /* 0x9740 */ + { 9877, 0xe3d6 }, { 9887, 0x5ee4 }, { 9896, 0x6f57 }, { 9907, 0x161a }, + /* 0x9780 */ + { 9913, 0xa872 }, { 9920, 0x5561 }, { 9927, 0x694d }, { 9935, 0x441e }, + /* 0x97C0 */ + { 9941, 0x1b4a }, { 9948, 0x5b1a }, { 9956, 0x6002 }, { 9959, 0x887e }, + /* 0x9800 */ + { 9967, 0xf57e }, { 9979, 0x45df }, { 9989, 0x383a }, { 9996, 0x399d }, + /* 0x9840 */ + { 10005, 0xf8c0 }, { 10012, 0x4ffc }, { 10023, 0x98e0 }, { 10029, 0x001b }, + /* 0x9880 */ + { 10033, 0x0000 }, { 10033, 0x0000 }, { 10033, 0xad00 }, { 10038, 0x9dc3 }, + /* 0x98C0 */ + { 10047, 0x09dc }, { 10054, 0x9800 }, { 10057, 0xeeaf }, { 10069, 0x701f }, + /* 0x9900 */ + { 10077, 0x1728 }, { 10083, 0x7ddd }, { 10095, 0x5113 }, { 10101, 0x7c0e }, + /* 0x9940 */ + { 10109, 0x7a67 }, { 10119, 0x91a7 }, { 10127, 0x0001 }, { 10128, 0x0000 }, + /* 0x9980 */ + { 10128, 0x0000 }, { 10128, 0x43c0 }, { 10133, 0x7168 }, { 10140, 0xb218 }, + /* 0x99C0 */ + { 10146, 0x037a }, { 10153, 0xeb37 }, { 10164, 0x6004 }, { 10167, 0x9b07 }, + /* 0x9A00 */ + { 10175, 0xc42e }, { 10182, 0x064e }, { 10188, 0x6911 }, { 10194, 0x41c3 }, + /* 0x9A40 */ + { 10200, 0x743d }, { 10209, 0x8da4 }, { 10216, 0x0e34 }, { 10222, 0x0000 }, + /* 0x9A80 */ + { 10222, 0x0000 }, { 10222, 0x0000 }, { 10222, 0xa100 }, { 10225, 0x13c1 }, + /* 0x9AC0 */ + { 10231, 0xc05b }, { 10238, 0xd17f }, { 10249, 0xee6d }, { 10260, 0x0a92 }, + /* 0x9B00 */ + { 10265, 0x114c }, { 10270, 0x9545 }, { 10277, 0xefad }, { 10289, 0x380e }, + /* 0x9B40 */ + { 10295, 0xe83e }, { 10304, 0x4512 }, { 10309, 0x9868 }, { 10315, 0x02fc }, + /* 0x9B80 */ + { 10322, 0xc418 }, { 10327, 0xc0ce }, { 10334, 0x7dc1 }, { 10343, 0x4316 }, + /* 0x9BC0 */ + { 10349, 0xc6c3 }, { 10357, 0x2956 }, { 10364, 0xcdbe }, { 10375, 0x25af }, + /* 0x9C00 */ + { 10384, 0x3751 }, { 10392, 0x2f7d }, { 10403, 0xe6be }, { 10414, 0x4ec7 }, + /* 0x9C40 */ + { 10423, 0x87e2 }, { 10431, 0xbd9d }, { 10442, 0x6ea9 }, { 10451, 0x05e5 }, + /* 0x9CC0 */ + { 10458, 0x0000 }, { 10458, 0x0000 }, { 10458, 0x1ae0 }, { 10464, 0x005d }, + /* 0x9D00 */ + { 10469, 0x4bcc }, { 10477, 0xe9a6 }, { 10486, 0x1d48 }, { 10492, 0xc804 }, + /* 0x9D40 */ + { 10496, 0x05de }, { 10504, 0xf207 }, { 10512, 0x9a1f }, { 10521, 0x54cd }, + /* 0x9D80 */ + { 10529, 0xa690 }, { 10535, 0x0640 }, { 10538, 0x9a12 }, { 10544, 0xbf34 }, + /* 0x9DC0 */ + { 10554, 0x82df }, { 10563, 0x86c8 }, { 10569, 0xa0c9 }, { 10575, 0x2714 }, + /* 0x9E00 */ + { 10581, 0x2484 }, { 10585, 0x7e20 }, { 10592, 0x0000 }, { 10592, 0x0000 }, + /* 0x9E40 */ + { 10592, 0x0000 }, { 10592, 0x0000 }, { 10592, 0x0000 }, { 10592, 0xbb20 }, + /* 0x9E80 */ + { 10599, 0x1923 }, { 10605, 0xe8ae }, { 10614, 0xb770 }, { 10623, 0xff30 }, + /* 0x9EC0 */ + { 10633, 0xf018 }, { 10639, 0xfb17 }, { 10650, 0xc1a1 }, { 10656, 0xbad0 }, + /* 0x9F00 */ + { 10664, 0x418c }, { 10669, 0x02a9 }, { 10674, 0x9003 }, { 10678, 0x6e80 }, + /* 0x9F40 */ + { 10684, 0xcc62 }, { 10691, 0xa1bc }, { 10699, 0x36cf }, { 10709, 0x00e5 }, + /* 0x9F80 */ + { 10714, 0x2000 }, { 10715, 0x30b1 }, { 10721, 0x0005 }, { 10723, 0x0000 }, + /* 0xF900 */ + { 10723, 0x0000 }, { 10723, 0x2000 }, { 10724, 0x0300 }, { 10726, 0x0040 }, + /* 0xF940 */ + { 10727, 0x0000 }, { 10727, 0x0000 }, { 10727, 0x0000 }, { 10727, 0x0001 }, + /* 0xF9C0 */ + { 10728, 0x0000 }, { 10728, 0x1001 }, { 10730, 0x0000 }, { 10730, 0x0000 }, + /* 0xFA00 */ + { 10730, 0x8000 }, { 10731, 0x8e7b }, { 10741, 0x0057 }, { 10746, 0xffff }, + /* 0xFA40 */ + { 10762, 0xffff }, { 10778, 0xffff }, { 10794, 0x07ff }, { 10805, 0x0000 }, + /* 0xFE40 */ + { 10805, 0x0060 }, { 10807, 0x0000 }, { 10807, 0x0000 }, { 10807, 0x0000 }, + /* 0xFF00 */ + { 10807, 0xfffe }, { 10822, 0xffff }, { 10838, 0xffff }, { 10854, 0xffff }, + /* 0xFF40 */ + { 10870, 0xffff }, { 10886, 0xffff }, { 10902, 0x0001 }, { 10903, 0x0000 }, + /* 0xFFC0 */ + { 10903, 0x0000 }, { 10903, 0x0000 }, { 10903, 0x0028 }, { 10905, 0x0000 }, + /* 0x20000 */ + { 10905, 0x0800 }, { 10906, 0x0000 }, { 10906, 0x0000 }, { 10906, 0x0000 }, + /* 0x20080 */ + { 10906, 0x0200 }, { 10907, 0x0000 }, { 10907, 0x0014 }, { 10909, 0x0000 }, + /* 0x20180 */ + { 10909, 0x0000 }, { 10909, 0x0000 }, { 10909, 0x0004 }, { 10910, 0x0000 }, + /* 0x20200 */ + { 10910, 0x0000 }, { 10910, 0x0008 }, { 10911, 0x0000 }, { 10911, 0x0000 }, + /* 0x20300 */ + { 10911, 0x0000 }, { 10911, 0x0000 }, { 10911, 0x0800 }, { 10912, 0x0000 }, + /* 0x20340 */ + { 10912, 0x0000 }, { 10912, 0x0000 }, { 10912, 0x0000 }, { 10912, 0x0002 }, + /* 0x20380 */ + { 10913, 0x0002 }, { 10914, 0x0000 }, { 10914, 0x0000 }, { 10914, 0x0000 }, + /* 0x203C0 */ + { 10914, 0x0000 }, { 10914, 0x0000 }, { 10914, 0x0000 }, { 10914, 0x0200 }, + /* 0x20440 */ + { 10915, 0x0400 }, { 10916, 0x0000 }, { 10916, 0x0000 }, { 10916, 0x0000 }, + /* 0x20500 */ + { 10916, 0x0200 }, { 10917, 0x0000 }, { 10917, 0x0000 }, { 10917, 0x0000 }, + /* 0x205C0 */ + { 10917, 0x0000 }, { 10917, 0x0040 }, { 10918, 0x0000 }, { 10918, 0x0000 }, + /* 0x20600 */ + { 10918, 0x0000 }, { 10918, 0x0000 }, { 10918, 0x0100 }, { 10919, 0x0000 }, + /* 0x20740 */ + { 10919, 0x8000 }, { 10920, 0x0000 }, { 10920, 0x0000 }, { 10920, 0x0000 }, + /* 0x20800 */ + { 10920, 0x0080 }, { 10921, 0x0000 }, { 10921, 0x0000 }, { 10921, 0x0400 }, + /* 0x20880 */ + { 10922, 0x0000 }, { 10922, 0x0000 }, { 10922, 0x0000 }, { 10922, 0x0200 }, + /* 0x20940 */ + { 10923, 0x0000 }, { 10923, 0x0000 }, { 10923, 0x0000 }, { 10923, 0x1000 }, + /* 0x20980 */ + { 10924, 0x0000 }, { 10924, 0x2000 }, { 10925, 0x0000 }, { 10925, 0x0000 }, + /* 0x20AC0 */ + { 10925, 0x0000 }, { 10925, 0x0008 }, { 10926, 0x0000 }, { 10926, 0x0000 }, + /* 0x20B00 */ + { 10926, 0x0000 }, { 10926, 0x2000 }, { 10927, 0x0000 }, { 10927, 0x0000 }, + /* 0x20B80 */ + { 10927, 0x0000 }, { 10927, 0x8000 }, { 10928, 0x0000 }, { 10928, 0x0000 }, + /* 0x20D40 */ + { 10928, 0x0020 }, { 10929, 0x0000 }, { 10929, 0x0000 }, { 10929, 0x0000 }, + /* 0x20DC0 */ + { 10929, 0x0000 }, { 10929, 0x0000 }, { 10929, 0x0002 }, { 10930, 0x0000 }, + /* 0x20E40 */ + { 10930, 0x0000 }, { 10930, 0x0000 }, { 10930, 0x2010 }, { 10932, 0x0000 }, + /* 0x20E80 */ + { 10932, 0x0000 }, { 10932, 0x0020 }, { 10933, 0x0000 }, { 10933, 0x0000 }, + /* 0x20F40 */ + { 10933, 0x0000 }, { 10933, 0x8000 }, { 10934, 0x0000 }, { 10934, 0x0000 }, + /* 0x21200 */ + { 10934, 0x0002 }, { 10935, 0x0000 }, { 10935, 0x0000 }, { 10935, 0x2000 }, + /* 0x21240 */ + { 10936, 0x0000 }, { 10936, 0x0020 }, { 10937, 0x0000 }, { 10937, 0x0810 }, + /* 0x212C0 */ + { 10939, 0x0000 }, { 10939, 0x0080 }, { 10940, 0x0010 }, { 10941, 0x2000 }, + /* 0x21300 */ + { 10942, 0x0000 }, { 10942, 0x0800 }, { 10943, 0x0000 }, { 10943, 0x0040 }, + /* 0x21340 */ + { 10944, 0x0010 }, { 10945, 0x0000 }, { 10945, 0x0000 }, { 10945, 0x0000 }, + /* 0x213C0 */ + { 10945, 0x0010 }, { 10946, 0x0000 }, { 10946, 0x0000 }, { 10946, 0x0000 }, + /* 0x21440 */ + { 10946, 0x0000 }, { 10946, 0x0000 }, { 10946, 0x6000 }, { 10948, 0x0000 }, + /* 0x215C0 */ + { 10948, 0x0000 }, { 10948, 0x0080 }, { 10949, 0x0000 }, { 10949, 0x0000 }, + /* 0x21640 */ + { 10949, 0x0080 }, { 10950, 0x0000 }, { 10950, 0x0000 }, { 10950, 0x0000 }, + /* 0x21680 */ + { 10950, 0x0000 }, { 10950, 0x0000 }, { 10950, 0x0000 }, { 10950, 0x0010 }, + /* 0x21700 */ + { 10951, 0x0040 }, { 10952, 0x0000 }, { 10952, 0x0000 }, { 10952, 0x0000 }, + /* 0x21740 */ + { 10952, 0x0004 }, { 10953, 0x0000 }, { 10953, 0x0000 }, { 10953, 0x0000 }, + /* 0x21880 */ + { 10953, 0x0000 }, { 10953, 0x0000 }, { 10953, 0x0000 }, { 10953, 0x2000 }, + /* 0x219C0 */ + { 10954, 0x0008 }, { 10955, 0x0000 }, { 10955, 0x0000 }, { 10955, 0x0000 }, + /* 0x21C40 */ + { 10955, 0x0000 }, { 10955, 0x0040 }, { 10956, 0x0000 }, { 10956, 0x0000 }, + /* 0x21D00 */ + { 10956, 0x0000 }, { 10956, 0x0000 }, { 10956, 0x2000 }, { 10957, 0x0000 }, + /* 0x21D40 */ + { 10957, 0x0020 }, { 10958, 0x0000 }, { 10958, 0x0004 }, { 10959, 0x0100 }, + /* 0x21D80 */ + { 10960, 0x0000 }, { 10960, 0x1004 }, { 10962, 0x0002 }, { 10963, 0x0080 }, + /* 0x21DC0 */ + { 10964, 0x0000 }, { 10964, 0x0000 }, { 10964, 0x0001 }, { 10965, 0x0000 }, + /* 0x21E00 */ + { 10965, 0x0000 }, { 10965, 0x0000 }, { 10965, 0x0000 }, { 10965, 0x0018 }, + /* 0x21F00 */ + { 10967, 0x0000 }, { 10967, 0x4000 }, { 10968, 0x0000 }, { 10968, 0x0000 }, + /* 0x21F40 */ + { 10968, 0x0000 }, { 10968, 0x0000 }, { 10968, 0x0000 }, { 10968, 0x0040 }, + /* 0x21FC0 */ + { 10969, 0x0000 }, { 10969, 0x0000 }, { 10969, 0x0000 }, { 10969, 0x0400 }, + /* 0x22140 */ + { 10970, 0x0000 }, { 10970, 0x0000 }, { 10970, 0x0000 }, { 10970, 0x0800 }, + /* 0x22200 */ + { 10971, 0x0000 }, { 10971, 0x0100 }, { 10972, 0x0000 }, { 10972, 0x0000 }, + /* 0x22300 */ + { 10972, 0x0000 }, { 10972, 0x4000 }, { 10973, 0x0000 }, { 10973, 0x0000 }, + /* 0x22380 */ + { 10973, 0x0000 }, { 10973, 0x0000 }, { 10973, 0x2000 }, { 10974, 0x0000 }, + /* 0x226C0 */ + { 10974, 0x0000 }, { 10974, 0x0000 }, { 10974, 0x0000 }, { 10974, 0x0008 }, + /* 0x22840 */ + { 10975, 0x0000 }, { 10975, 0x0800 }, { 10976, 0x0000 }, { 10976, 0x0000 }, + /* 0x22880 */ + { 10976, 0x0000 }, { 10976, 0x0000 }, { 10976, 0x0800 }, { 10977, 0x0000 }, + /* 0x22980 */ + { 10977, 0x8000 }, { 10978, 0x0000 }, { 10978, 0x0000 }, { 10978, 0x0000 }, + /* 0x22A80 */ + { 10978, 0x0000 }, { 10978, 0x0000 }, { 10978, 0x0000 }, { 10978, 0x0100 }, + /* 0x22B40 */ + { 10979, 0x8040 }, { 10981, 0x0001 }, { 10982, 0x0000 }, { 10982, 0x0000 }, + /* 0x22B80 */ + { 10982, 0x0000 }, { 10982, 0x0000 }, { 10982, 0x0040 }, { 10983, 0x0000 }, + /* 0x22C00 */ + { 10983, 0x0000 }, { 10983, 0x2000 }, { 10984, 0x0010 }, { 10985, 0x0000 }, + /* 0x22DC0 */ + { 10985, 0x0000 }, { 10985, 0x0000 }, { 10985, 0x0002 }, { 10986, 0x0000 }, + /* 0x23180 */ + { 10986, 0x0000 }, { 10986, 0x0000 }, { 10986, 0x0000 }, { 10986, 0x0040 }, + /* 0x231C0 */ + { 10987, 0x0018 }, { 10989, 0x0000 }, { 10989, 0x0000 }, { 10989, 0x0020 }, + /* 0x23340 */ + { 10990, 0x0000 }, { 10990, 0x0000 }, { 10990, 0x0000 }, { 10990, 0x0004 }, + /* 0x233C0 */ + { 10991, 0x0000 }, { 10991, 0x842d }, { 10997, 0x0010 }, { 10998, 0x0000 }, + /* 0x23440 */ + { 10998, 0x0c00 }, { 11000, 0x0002 }, { 11001, 0x0020 }, { 11002, 0x0000 }, + /* 0x234C0 */ + { 11002, 0x0000 }, { 11002, 0x0000 }, { 11002, 0x0010 }, { 11003, 0x0000 }, + /* 0x23540 */ + { 11003, 0x0000 }, { 11003, 0x0400 }, { 11004, 0x0000 }, { 11004, 0x0000 }, + /* 0x23580 */ + { 11004, 0x0000 }, { 11004, 0x0010 }, { 11005, 0x0000 }, { 11005, 0x0000 }, + /* 0x235C0 */ + { 11005, 0x0010 }, { 11006, 0x0000 }, { 11006, 0x0000 }, { 11006, 0x0000 }, + /* 0x23600 */ + { 11006, 0x0000 }, { 11006, 0x0000 }, { 11006, 0x0000 }, { 11006, 0x0700 }, + /* 0x23640 */ + { 11009, 0x0080 }, { 11010, 0x0000 }, { 11010, 0x0000 }, { 11010, 0x0000 }, + /* 0x23700 */ + { 11010, 0x1000 }, { 11011, 0x1000 }, { 11012, 0x0000 }, { 11012, 0x8000 }, + /* 0x23740 */ + { 11013, 0x0000 }, { 11013, 0x0000 }, { 11013, 0x0018 }, { 11015, 0x0000 }, + /* 0x237C0 */ + { 11015, 0x0000 }, { 11015, 0x0000 }, { 11015, 0x0080 }, { 11016, 0x8000 }, + /* 0x23800 */ + { 11017, 0x0000 }, { 11017, 0x0000 }, { 11017, 0x0010 }, { 11018, 0x2000 }, + /* 0x23A80 */ + { 11019, 0x0000 }, { 11019, 0x0100 }, { 11020, 0x0000 }, { 11020, 0x0000 }, + /* 0x23C40 */ + { 11020, 0x0000 }, { 11020, 0x0000 }, { 11020, 0x0000 }, { 11020, 0x8000 }, + /* 0x23CC0 */ + { 11021, 0x0000 }, { 11021, 0x0000 }, { 11021, 0x0000 }, { 11021, 0x4000 }, + /* 0x23D00 */ + { 11022, 0x4001 }, { 11024, 0x0000 }, { 11024, 0x0000 }, { 11024, 0x0000 }, + /* 0x23D40 */ + { 11024, 0x0001 }, { 11025, 0x0000 }, { 11025, 0x0000 }, { 11025, 0x0000 }, + /* 0x23DC0 */ + { 11025, 0x0000 }, { 11025, 0x0008 }, { 11026, 0x0000 }, { 11026, 0x0600 }, + /* 0x23F40 */ + { 11028, 0x0000 }, { 11028, 0x0000 }, { 11028, 0x0000 }, { 11028, 0x4000 }, + /* 0x24080 */ + { 11029, 0x0000 }, { 11029, 0x0040 }, { 11030, 0x0000 }, { 11030, 0x0000 }, + /* 0x24100 */ + { 11030, 0x0008 }, { 11031, 0x0000 }, { 11031, 0x0000 }, { 11031, 0x0000 }, + /* 0x241C0 */ + { 11031, 0x0040 }, { 11032, 0x0000 }, { 11032, 0x0000 }, { 11032, 0x4000 }, + /* 0x24380 */ + { 11033, 0x0000 }, { 11033, 0x0000 }, { 11033, 0x0000 }, { 11033, 0x1000 }, + /* 0x24600 */ + { 11034, 0x0000 }, { 11034, 0x0000 }, { 11034, 0x0200 }, { 11035, 0x0000 }, + /* 0x24680 */ + { 11035, 0x0000 }, { 11035, 0x0000 }, { 11035, 0x0020 }, { 11036, 0x0000 }, + /* 0x247C0 */ + { 11036, 0x0000 }, { 11036, 0x0000 }, { 11036, 0x0000 }, { 11036, 0x0002 }, + /* 0x24880 */ + { 11037, 0x0000 }, { 11037, 0x0040 }, { 11038, 0x0000 }, { 11038, 0x0000 }, + /* 0x24A40 */ + { 11038, 0x2000 }, { 11039, 0x0000 }, { 11039, 0x0000 }, { 11039, 0x0000 }, + /* 0x24B40 */ + { 11039, 0x0000 }, { 11039, 0x0040 }, { 11040, 0x8000 }, { 11041, 0x0000 }, + /* 0x24C00 */ + { 11041, 0x0000 }, { 11041, 0x0040 }, { 11042, 0x0000 }, { 11042, 0x0000 }, + /* 0x24D00 */ + { 11042, 0x0000 }, { 11042, 0x0010 }, { 11043, 0x0000 }, { 11043, 0x0000 }, + /* 0x24E00 */ + { 11043, 0x4000 }, { 11044, 0x0000 }, { 11044, 0x0000 }, { 11044, 0x0080 }, + /* 0x24E40 */ + { 11045, 0x0000 }, { 11045, 0x0000 }, { 11045, 0x0400 }, { 11046, 0x0000 }, + /* 0x24E80 */ + { 11046, 0x0800 }, { 11047, 0x0000 }, { 11047, 0x0000 }, { 11047, 0x0000 }, + /* 0x25040 */ + { 11047, 0x0400 }, { 11048, 0x0020 }, { 11049, 0x0000 }, { 11049, 0x0000 }, + /* 0x25100 */ + { 11049, 0x0000 }, { 11049, 0x0000 }, { 11049, 0x0004 }, { 11050, 0x0000 }, + /* 0x25180 */ + { 11050, 0x0000 }, { 11050, 0x0000 }, { 11050, 0x0200 }, { 11051, 0x0000 }, + /* 0x251C0 */ + { 11051, 0x2000 }, { 11052, 0x0000 }, { 11052, 0x0020 }, { 11053, 0x0000 }, + /* 0x25200 */ + { 11053, 0x0000 }, { 11053, 0x4000 }, { 11054, 0x0000 }, { 11054, 0x0000 }, + /* 0x25240 */ + { 11054, 0x1000 }, { 11055, 0x0000 }, { 11055, 0x0000 }, { 11055, 0x0000 }, + /* 0x25400 */ + { 11055, 0x0000 }, { 11055, 0x0000 }, { 11055, 0x4000 }, { 11056, 0x0000 }, + /* 0x25480 */ + { 11056, 0x4000 }, { 11057, 0x0000 }, { 11057, 0x0000 }, { 11057, 0x0000 }, + /* 0x254C0 */ + { 11057, 0x0000 }, { 11057, 0x0200 }, { 11058, 0x0000 }, { 11058, 0x0000 }, + /* 0x25500 */ + { 11058, 0x4000 }, { 11059, 0x0000 }, { 11059, 0x0000 }, { 11059, 0x0000 }, + /* 0x25580 */ + { 11059, 0x0000 }, { 11059, 0x0000 }, { 11059, 0x0080 }, { 11060, 0x0000 }, + /* 0x25740 */ + { 11060, 0x0000 }, { 11060, 0x0000 }, { 11060, 0x0000 }, { 11060, 0x0002 }, + /* 0x25780 */ + { 11061, 0x0000 }, { 11061, 0x0000 }, { 11061, 0x0200 }, { 11062, 0x0010 }, + /* 0x259C0 */ + { 11063, 0x0010 }, { 11064, 0x0010 }, { 11065, 0x0000 }, { 11065, 0x0000 }, + /* 0x25AC0 */ + { 11065, 0x0000 }, { 11065, 0x0000 }, { 11065, 0x0018 }, { 11067, 0x0002 }, + /* 0x25B80 */ + { 11068, 0x0000 }, { 11068, 0x0000 }, { 11068, 0x0000 }, { 11068, 0x0004 }, + /* 0x25C40 */ + { 11069, 0x0800 }, { 11070, 0x0000 }, { 11070, 0x0010 }, { 11071, 0x0000 }, + /* 0x25D80 */ + { 11071, 0x0000 }, { 11071, 0x0000 }, { 11071, 0x0002 }, { 11072, 0x0000 }, + /* 0x25E00 */ + { 11072, 0x0000 }, { 11072, 0x0000 }, { 11072, 0x4000 }, { 11073, 0x0000 }, + /* 0x25E40 */ + { 11073, 0x0000 }, { 11073, 0x0040 }, { 11074, 0x0024 }, { 11076, 0x0000 }, + /* 0x25EC0 */ + { 11076, 0x0004 }, { 11077, 0x0100 }, { 11078, 0x0100 }, { 11079, 0x0000 }, + /* 0x25F00 */ + { 11079, 0x0000 }, { 11079, 0x0000 }, { 11079, 0x0008 }, { 11080, 0x0000 }, + /* 0x25F40 */ + { 11080, 0x0000 }, { 11080, 0x1000 }, { 11081, 0x0000 }, { 11081, 0x0000 }, + /* 0x25FC0 */ + { 11081, 0x0000 }, { 11081, 0x0010 }, { 11082, 0x0001 }, { 11083, 0x0800 }, + /* 0x26000 */ + { 11084, 0x1000 }, { 11085, 0x0080 }, { 11086, 0x0000 }, { 11086, 0x0000 }, + /* 0x26040 */ + { 11086, 0x0000 }, { 11086, 0x0000 }, { 11086, 0x0001 }, { 11087, 0x0000 }, + /* 0x260C0 */ + { 11087, 0x0000 }, { 11087, 0x0000 }, { 11087, 0x2000 }, { 11088, 0x0000 }, + /* 0x26240 */ + { 11088, 0x0000 }, { 11088, 0x0000 }, { 11088, 0x0000 }, { 11088, 0x0001 }, + /* 0x26280 */ + { 11089, 0x0040 }, { 11090, 0x0000 }, { 11090, 0x0000 }, { 11090, 0x0000 }, + /* 0x26340 */ + { 11090, 0x1000 }, { 11091, 0x0000 }, { 11091, 0x0000 }, { 11091, 0x0000 }, + /* 0x26400 */ + { 11091, 0x0004 }, { 11092, 0x0000 }, { 11092, 0x0000 }, { 11092, 0x0000 }, + /* 0x26640 */ + { 11092, 0x0000 }, { 11092, 0x0000 }, { 11092, 0x0000 }, { 11092, 0x4000 }, + /* 0x26680 */ + { 11093, 0x0000 }, { 11093, 0x0000 }, { 11093, 0x0000 }, { 11093, 0x0001 }, + /* 0x26700 */ + { 11094, 0x0000 }, { 11094, 0x2000 }, { 11095, 0x0000 }, { 11095, 0x0000 }, + /* 0x268C0 */ + { 11095, 0x0000 }, { 11095, 0x2000 }, { 11096, 0x0400 }, { 11097, 0x0000 }, + /* 0x26940 */ + { 11097, 0x0000 }, { 11097, 0x0002 }, { 11098, 0x8000 }, { 11099, 0x0000 }, + /* 0x269C0 */ + { 11099, 0x0000 }, { 11099, 0x2000 }, { 11100, 0x0000 }, { 11100, 0x0000 }, + /* 0x26A00 */ + { 11100, 0x0000 }, { 11100, 0x4000 }, { 11101, 0x0000 }, { 11101, 0x0000 }, + /* 0x26A40 */ + { 11101, 0x0000 }, { 11101, 0x0100 }, { 11102, 0x0000 }, { 11102, 0x0000 }, + /* 0x26A80 */ + { 11102, 0x1000 }, { 11103, 0x0000 }, { 11103, 0x0000 }, { 11103, 0x0080 }, + /* 0x26AC0 */ + { 11104, 0x0000 }, { 11104, 0x0000 }, { 11104, 0x0000 }, { 11104, 0x8000 }, + /* 0x26C00 */ + { 11105, 0x0000 }, { 11105, 0x0000 }, { 11105, 0x0200 }, { 11106, 0x0000 }, + /* 0x26C40 */ + { 11106, 0x0000 }, { 11106, 0x0000 }, { 11106, 0x0000 }, { 11106, 0x0008 }, + /* 0x26CC0 */ + { 11107, 0x0000 }, { 11107, 0x2000 }, { 11108, 0x0000 }, { 11108, 0x0000 }, + /* 0x26E40 */ + { 11108, 0x0001 }, { 11109, 0x0000 }, { 11109, 0x0020 }, { 11110, 0x0000 }, + /* 0x26F80 */ + { 11110, 0x0000 }, { 11110, 0x0010 }, { 11111, 0x0000 }, { 11111, 0x0000 }, + /* 0x26FC0 */ + { 11111, 0x0000 }, { 11111, 0x0000 }, { 11111, 0x0000 }, { 11111, 0x01c0 }, + /* 0x270C0 */ + { 11114, 0x0000 }, { 11114, 0x0000 }, { 11114, 0x0000 }, { 11114, 0x0010 }, + /* 0x27100 */ + { 11115, 0x2000 }, { 11116, 0x0000 }, { 11116, 0x0000 }, { 11116, 0x0200 }, + /* 0x273C0 */ + { 11117, 0x0000 }, { 11117, 0x0c00 }, { 11119, 0x0000 }, { 11119, 0x4000 }, + /* 0x27400 */ + { 11120, 0x0000 }, { 11120, 0x0001 }, { 11121, 0x0000 }, { 11121, 0x0000 }, + /* 0x27440 */ + { 11121, 0x0200 }, { 11122, 0x0000 }, { 11122, 0x0000 }, { 11122, 0x0000 }, + /* 0x27600 */ + { 11122, 0x0000 }, { 11122, 0x0030 }, { 11124, 0x0000 }, { 11124, 0x0002 }, + /* 0x27680 */ + { 11125, 0x0010 }, { 11126, 0x0008 }, { 11127, 0x0000 }, { 11127, 0x0000 }, + /* 0x27700 */ + { 11127, 0x4000 }, { 11128, 0x0000 }, { 11128, 0x0008 }, { 11129, 0x0000 }, + /* 0x27740 */ + { 11129, 0x0000 }, { 11129, 0x0004 }, { 11130, 0x0000 }, { 11130, 0x0000 }, + /* 0x27980 */ + { 11130, 0x0020 }, { 11131, 0x0000 }, { 11131, 0x0000 }, { 11131, 0x0000 }, + /* 0x27A80 */ + { 11131, 0x0010 }, { 11132, 0x0000 }, { 11132, 0x0000 }, { 11132, 0x0000 }, + /* 0x27B80 */ + { 11132, 0x0000 }, { 11132, 0x0000 }, { 11132, 0x0000 }, { 11132, 0x4008 }, + /* 0x27BC0 */ + { 11134, 0x0080 }, { 11135, 0x0000 }, { 11135, 0x0000 }, { 11135, 0x0000 }, + /* 0x27C80 */ + { 11135, 0x0000 }, { 11135, 0x0000 }, { 11135, 0x0000 }, { 11135, 0x0100 }, + /* 0x27D80 */ + { 11136, 0x0000 }, { 11136, 0x0000 }, { 11136, 0x0001 }, { 11137, 0x0000 }, + /* 0x27E00 */ + { 11137, 0x0000 }, { 11137, 0x0001 }, { 11138, 0x0000 }, { 11138, 0x0000 }, + /* 0x27F80 */ + { 11138, 0x0000 }, { 11138, 0x0000 }, { 11138, 0x0000 }, { 11138, 0x0080 }, + /* 0x28080 */ + { 11139, 0x0400 }, { 11140, 0x0000 }, { 11140, 0x0000 }, { 11140, 0x0800 }, + /* 0x28240 */ + { 11141, 0x0000 }, { 11141, 0x0000 }, { 11141, 0x0000 }, { 11141, 0x0080 }, + /* 0x28280 */ + { 11142, 0x0004 }, { 11143, 0x0000 }, { 11143, 0x0000 }, { 11143, 0x0000 }, + /* 0x282C0 */ + { 11143, 0x0000 }, { 11143, 0x0000 }, { 11143, 0x0000 }, { 11143, 0x0008 }, + /* 0x283C0 */ + { 11144, 0x2000 }, { 11145, 0x0000 }, { 11145, 0x0000 }, { 11145, 0x0000 }, + /* 0x28400 */ + { 11145, 0x1000 }, { 11146, 0x0000 }, { 11146, 0x0000 }, { 11146, 0x0000 }, + /* 0x28440 */ + { 11146, 0x0000 }, { 11146, 0x0020 }, { 11147, 0x0000 }, { 11147, 0x0000 }, + /* 0x28540 */ + { 11147, 0x0000 }, { 11147, 0x0000 }, { 11147, 0x0800 }, { 11148, 0x0000 }, + /* 0x285C0 */ + { 11148, 0x0300 }, { 11150, 0x0000 }, { 11150, 0x0000 }, { 11150, 0x0000 }, + /* 0x286C0 */ + { 11150, 0x0000 }, { 11150, 0x0080 }, { 11151, 0x0000 }, { 11151, 0x0400 }, + /* 0x28940 */ + { 11152, 0x0240 }, { 11154, 0x0000 }, { 11154, 0x0800 }, { 11155, 0x0000 }, + /* 0x28980 */ + { 11155, 0x0180 }, { 11157, 0x0000 }, { 11157, 0x0000 }, { 11157, 0x0c00 }, + /* 0x28A00 */ + { 11159, 0x0000 }, { 11159, 0x4000 }, { 11160, 0x0200 }, { 11161, 0x0000 }, + /* 0x28A40 */ + { 11161, 0x0008 }, { 11162, 0x0000 }, { 11162, 0x0000 }, { 11162, 0x0002 }, + /* 0x28A80 */ + { 11163, 0x0000 }, { 11163, 0x0200 }, { 11164, 0x0000 }, { 11164, 0x0000 }, + /* 0x28AC0 */ + { 11164, 0x2000 }, { 11165, 0x2000 }, { 11166, 0x0010 }, { 11167, 0x0000 }, + /* 0x28BC0 */ + { 11167, 0x0002 }, { 11168, 0x0000 }, { 11168, 0x8000 }, { 11169, 0x0000 }, + /* 0x28D00 */ + { 11169, 0x0000 }, { 11169, 0x0001 }, { 11170, 0x0000 }, { 11170, 0x0000 }, + /* 0x28D40 */ + { 11170, 0x0000 }, { 11170, 0x0000 }, { 11170, 0x0000 }, { 11170, 0x0002 }, + /* 0x28DC0 */ + { 11171, 0x0000 }, { 11171, 0x0000 }, { 11171, 0x0000 }, { 11171, 0x0800 }, + /* 0x28E00 */ + { 11172, 0x0000 }, { 11172, 0x8000 }, { 11173, 0x0000 }, { 11173, 0x0040 }, + /* 0x28E80 */ + { 11174, 0x0200 }, { 11175, 0x0000 }, { 11175, 0x0000 }, { 11175, 0x0000 }, + /* 0x28EC0 */ + { 11175, 0x0000 }, { 11175, 0x0000 }, { 11175, 0x0800 }, { 11176, 0x0000 }, + /* 0x28F00 */ + { 11176, 0x0000 }, { 11176, 0x0000 }, { 11176, 0x0000 }, { 11176, 0x0004 }, + /* 0x28FC0 */ + { 11177, 0x0000 }, { 11177, 0x0000 }, { 11177, 0x0000 }, { 11177, 0x0100 }, + /* 0x29280 */ + { 11178, 0x0000 }, { 11178, 0x0000 }, { 11178, 0x0001 }, { 11179, 0x0002 }, + /* 0x29480 */ + { 11180, 0x0000 }, { 11180, 0x0001 }, { 11181, 0x0000 }, { 11181, 0x0000 }, + /* 0x295C0 */ + { 11181, 0x8000 }, { 11182, 0x0000 }, { 11182, 0x0000 }, { 11182, 0x0000 }, + /* 0x29640 */ + { 11182, 0x0000 }, { 11182, 0x0000 }, { 11182, 0x0000 }, { 11182, 0x8000 }, + /* 0x296C0 */ + { 11183, 0x0000 }, { 11183, 0x0000 }, { 11183, 0x0000 }, { 11183, 0x0001 }, + /* 0x29700 */ + { 11184, 0x0000 }, { 11184, 0x0200 }, { 11185, 0x0000 }, { 11185, 0x0000 }, + /* 0x29740 */ + { 11185, 0x0000 }, { 11185, 0x0001 }, { 11186, 0x0000 }, { 11186, 0x0000 }, + /* 0x298C0 */ + { 11186, 0x0040 }, { 11187, 0x0000 }, { 11187, 0x0000 }, { 11187, 0x0000 }, + /* 0x29A40 */ + { 11187, 0x0000 }, { 11187, 0x0000 }, { 11187, 0x0000 }, { 11187, 0x0004 }, + /* 0x29DC0 */ + { 11188, 0x0000 }, { 11188, 0x0800 }, { 11189, 0x0000 }, { 11189, 0x0000 }, + /* 0x29E00 */ + { 11189, 0x0000 }, { 11189, 0x0020 }, { 11190, 0x0000 }, { 11190, 0x2000 }, + /* 0x29E40 */ + { 11191, 0x0200 }, { 11192, 0x0000 }, { 11192, 0x0000 }, { 11192, 0x0000 }, + /* 0x29E80 */ + { 11192, 0x0400 }, { 11193, 0x0000 }, { 11193, 0x0000 }, { 11193, 0x0000 }, + /* 0x29EC0 */ + { 11193, 0x0010 }, { 11194, 0x0800 }, { 11195, 0x0200 }, { 11196, 0x0000 }, + /* 0x29FC0 */ + { 11196, 0x4000 }, { 11197, 0x0000 }, { 11197, 0x0000 }, { 11197, 0x0000 }, + /* 0x2A000 */ + { 11197, 0x0000 }, { 11197, 0x0400 }, { 11198, 0x8000 }, { 11199, 0x0000 }, + /* 0x2A080 */ + { 11199, 0x0004 }, { 11200, 0x0000 }, { 11200, 0x0000 }, { 11200, 0x0000 }, + /* 0x2A0C0 */ + { 11200, 0x0000 }, { 11200, 0x0000 }, { 11200, 0x0000 }, { 11200, 0x0200 }, + /* 0x2A180 */ + { 11201, 0x0000 }, { 11201, 0x0001 }, { 11202, 0x0000 }, { 11202, 0x0000 }, + /* 0x2A380 */ + { 11202, 0x1000 }, { 11203, 0x0000 }, { 11203, 0x0000 }, { 11203, 0x0000 }, + /* 0x2A400 */ + { 11203, 0x0000 }, { 11203, 0x0000 }, { 11203, 0x0000 }, { 11203, 0x0080 }, + /* 0x2A5C0 */ + { 11204, 0x0000 }, { 11204, 0x0000 }, { 11204, 0x0000 }, { 11204, 0x0002 }, + /* 0x2A600 */ + { 11205, 0x0004 }, { 11206, 0x0400 }, { 11207, 0x0000 }, { 11207, 0x0000 }, + /* 0x2A680 */ + { 11207, 0x0000 }, { 11207, 0x0000 }, { 11207, 0x0000 }, { 11207, 0x0004 }, +}; + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static ucs4_t jisx0213_to_ucs4 (unsigned int row, unsigned int col) +{ + ucs4_t val; + + if (row >= 0x121 && row <= 0x17e) + row -= 289; + else if (row == 0x221) + row -= 451; + else if (row >= 0x223 && row <= 0x225) + row -= 452; + else if (row == 0x228) + row -= 454; + else if (row >= 0x22c && row <= 0x22f) + row -= 457; + else if (row >= 0x26e && row <= 0x27e) + row -= 519; + else + return 0x0000; + + if (col >= 0x21 && col <= 0x7e) + col -= 0x21; + else + return 0x0000; + + val = jisx0213_to_ucs_main[row * 94 + col]; + val = jisx0213_to_ucs_pagestart[val >> 8] + (val & 0xff); + if (val == 0xfffd) + val = 0x0000; + return val; +} + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned short ucs4_to_jisx0213 (ucs4_t ucs) +{ + if (ucs < (sizeof(jisx0213_from_ucs_level1)/sizeof(jisx0213_from_ucs_level1[0])) << 6) { + int index1 = jisx0213_from_ucs_level1[ucs >> 6]; + if (index1 >= 0) { + const Summary16 *summary = &jisx0213_from_ucs_level2_2indx[((index1 << 6) + (ucs & 0x3f)) >> 4]; + unsigned short used = summary->used; + unsigned int i = ucs & 0x0f; + if (used & ((unsigned short) 1 << i)) { + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + return jisx0213_from_ucs_level2_data[summary->indx + used]; + }; + }; + } + return 0x0000; +} + +#endif /* _JISX0213_H */ diff --git a/jni/parted/libiconv/lib/johab.h b/jni/parted/libiconv/lib/johab.h new file mode 100755 index 0000000..6ac624d --- /dev/null +++ b/jni/parted/libiconv/lib/johab.h @@ -0,0 +1,138 @@ +/* + * Copyright (C) 1999-2001, 2007, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * JOHAB + */ + +/* + Conversion between JOHAB codes (s1,s2) and KSX1001 codes (c1,c2): + Example. (s1,s2) = 0xD931, (c1,c2) = 0x2121. + (s1,s2) = 0xDEF1, (c1,c2) = 0x2C71. + (s1,s2) = 0xE031, (c1,c2) = 0x4A21. + (s1,s2) = 0xF9FE, (c1,c2) = 0x7D7E. + 0xD9 <= s1 <= 0xDE || 0xE0 <= s1 <= 0xF9, + 0x31 <= s2 <= 0x7E || 0x91 <= s2 <= 0xFE, + 0x21 <= c1 <= 0x2C || 0x4A <= c1 <= 0x7D, + 0x21 <= c2 <= 0x7E. + Invariant: + 94*(s1 < 0xE0 ? 2*s1-0x1B2 : 2*s1-0x197) + (s2 < 0x91 ? s2-0x31 : s2-0x43) + = 94*(c1-0x21)+(c2-0x21) + Conversion (s1,s2) -> (c1,c2): + t1 := (s1 < 0xE0 ? 2*s1-0x1B2 : 2*s1-0x197) + t2 := (s2 < 0x91 ? s2-0x31 : s2-0x43) + c1 := t1 + (t2 < 0x5E ? 0 : 1) + 0x21 + c2 := (t2 < 0x5E ? t2 : t2-0x5E) + 0x21 + Conversion (c1,c2) -> (s1,s2): + t := (c1 < 0x4A ? (c1-0x21+0x1B2) : (c1-0x21+0x197)) + s1 := t >> 1 + t2 := (t & 1) * 0x5E + (c2 - 0x21) + s2 := (t2 < 0x4E ? t2+0x31 : t2+0x43) + */ + +static int +johab_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + if (c == 0x5c) + *pwc = (ucs4_t) 0x20a9; + else + *pwc = (ucs4_t) c; + return 1; + } else if (c < 0xd8) { + return johab_hangul_mbtowc(conv,pwc,s,n); + } else { + unsigned char s1, s2; + s1 = c; + if ((s1 >= 0xd9 && s1 <= 0xde) || (s1 >= 0xe0 && s1 <= 0xf9)) { + if (n < 2) + return RET_TOOFEW(0); + s2 = s[1]; + if ((s2 >= 0x31 && s2 <= 0x7e) || (s2 >= 0x91 && s2 <= 0xfe)) { + /* In KSC 5601, now KS X 1001, the region s1 = 0xDA, 0xA1 <= s2 <= 0xD3 + contains the 51 Jamo (Hangul letters). But in the Johab encoding, + they have been moved to the Hangul section, see + johab_hangul_page31. */ + if (!(s1 == 0xda && (s2 >= 0xa1 && s2 <= 0xd3))) { + unsigned char t1 = (s1 < 0xe0 ? 2*(s1-0xd9) : 2*s1-0x197); + unsigned char t2 = (s2 < 0x91 ? s2-0x31 : s2-0x43); + unsigned char buf[2]; + buf[0] = t1 + (t2 < 0x5e ? 0 : 1) + 0x21; + buf[1] = (t2 < 0x5e ? t2 : t2-0x5e) + 0x21; + return ksc5601_mbtowc(conv,pwc,buf,2); + } + } + } + return RET_ILSEQ; + } +} + +static int +johab_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Try ASCII variation. */ + if (wc < 0x0080 && wc != 0x005c) { + *r = wc; + return 1; + } + if (wc == 0x20a9) { + *r = 0x5c; + return 1; + } + + /* Try JOHAB Hangul table before KSC5601 table, because the KSC5601 table + contains some (2350 out of 11172) Hangul syllables (rows 0x30XX..0x48XX), + and we want the search to return the JOHAB Hangul table entry. */ + + /* Try JOHAB Hangul. */ + ret = johab_hangul_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + r[0] = buf[0]; + r[1] = buf[1]; + return 2; + } + + /* Try KSC5601, now KS X 1001. */ + ret = ksc5601_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + unsigned char c1, c2; + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + c1 = buf[0]; + c2 = buf[1]; + if (((c1 >= 0x21 && c1 <= 0x2c) || (c1 >= 0x4a && c1 <= 0x7d)) + && (c2 >= 0x21 && c2 <= 0x7e)) { + unsigned int t = (c1 < 0x4A ? (c1-0x21+0x1B2) : (c1-0x21+0x197)); + unsigned char t2 = ((t & 1) ? 0x5e : 0) + (c2 - 0x21); + r[0] = t >> 1; + r[1] = (t2 < 0x4e ? t2+0x31 : t2+0x43); + return 2; + } + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/johab_hangul.h b/jni/parted/libiconv/lib/johab_hangul.h new file mode 100755 index 0000000..1a9bc73 --- /dev/null +++ b/jni/parted/libiconv/lib/johab_hangul.h @@ -0,0 +1,261 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * JOHAB Hangul + * + * Ken Lunde writes in his "CJKV Information Processing" book, p. 114: + * "Hangul can be composed of two or three jamo (some jamo are considered + * compound). Johab uses 19 initial jamo (consonants), 21 medial jamo (vowels) + * and 27 final jamo (consonants; 28 when you include the "fill" character + * for Hangul containing only two jamo). Multiplying these numbers results in + * 11172." + * + * Structure of the Johab encoding (see p. 181-184): + * bit 15 = 1 + * bit 14..10 = initial jamo, only 19+1 out of 32 possible values are used + * bit 9..5 = medial jamo, only 21+1 out of 32 possible values are used + * bit 4..0 = final jamo, only 27+1 out of 32 possible values are used + * + * Structure of the Unicode encoding: + * grep '^0x\([8-C]...\|D[0-7]..\)' unicode.org-mappings/EASTASIA/KSC/JOHAB.TXT + * You see that all characters there are marked "HANGUL LETTER" or "HANGUL + * SYLLABLE". If you eliminate the "HANGUL LETTER"s, the table is sorted + * in ascending order according to Johab encoding and according to the Unicode + * encoding. Now look a little more carefully, and you see that the following + * formula holds: + * unicode == 0xAC00 + * + 21 * 28 * (jamo_initial_index[(johab >> 10) & 31] - 1) + * + 28 * (jamo_medial_index[(johab >> 5) & 31] - 1) + * + jamo_final_index[johab & 31] + * where the index tables are defined as below. + */ + +/* Tables mapping 5-bit groups to jamo letters. */ +/* Note that Jamo XX = UHC 0xA4A0+XX = Unicode 0x3130+XX */ +#define NONE 0xfd +#define FILL 0xff +static const unsigned char jamo_initial[32] = { + NONE, FILL, 0x01, 0x02, 0x04, 0x07, 0x08, 0x09, + 0x11, 0x12, 0x13, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, +}; +static const unsigned char jamo_medial[32] = { + NONE, NONE, FILL, 0x1f, 0x20, 0x21, 0x22, 0x23, + NONE, NONE, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + NONE, NONE, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + NONE, NONE, 0x30, 0x31, 0x32, 0x33, NONE, NONE, +}; +static const unsigned char jamo_final[32] = { + NONE, FILL, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, NONE, 0x12, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, NONE, NONE, +}; +/* Same as jamo_final, except that it excludes characters already + contained in jamo_initial. 11 characters instead of 27. */ +static const unsigned char jamo_final_notinitial[32] = { + NONE, NONE, NONE, NONE, 0x03, NONE, 0x05, 0x06, + NONE, NONE, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, NONE, NONE, NONE, 0x14, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, +}; + +/* Tables mapping 5-bit groups to packed indices. */ +#define none -1 +#define fill 0 +static const signed char jamo_initial_index[32] = { + none, fill, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, none, none, none, + none, none, none, none, none, none, none, none, +}; +static const signed char jamo_medial_index[32] = { + none, none, fill, 0x01, 0x02, 0x03, 0x04, 0x05, + none, none, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + none, none, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + none, none, 0x12, 0x13, 0x14, 0x15, none, none, +}; +static const signed char jamo_final_index[32] = { + none, fill, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, none, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, none, none, +}; + +static int +johab_hangul_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x84 && c1 <= 0xd3)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x41 && c2 < 0x7f) || (c2 >= 0x81 && c2 < 0xff)) { + unsigned int johab = (c1 << 8) | c2; + unsigned int bitspart1 = (johab >> 10) & 31; + unsigned int bitspart2 = (johab >> 5) & 31; + unsigned int bitspart3 = johab & 31; + int index1 = jamo_initial_index[bitspart1]; + int index2 = jamo_medial_index[bitspart2]; + int index3 = jamo_final_index[bitspart3]; + /* Exclude "none" values. */ + if (index1 >= 0 && index2 >= 0 && index3 >= 0) { + /* Deal with "fill" values in initial or medial position. */ + if (index1 == fill) { + if (index2 == fill) { + unsigned char jamo3 = jamo_final_notinitial[bitspart3]; + if (jamo3 != NONE) { + *pwc = (ucs4_t) 0x3130 + jamo3; + return 2; + } + } else if (index3 == fill) { + unsigned char jamo2 = jamo_medial[bitspart2]; + if (jamo2 != NONE && jamo2 != FILL) { + *pwc = (ucs4_t) 0x3130 + jamo2; + return 2; + } + } + /* Syllables composed only of medial and final don't exist. */ + } else if (index2 == fill) { + if (index3 == fill) { + unsigned char jamo1 = jamo_initial[bitspart1]; + if (jamo1 != NONE && jamo1 != FILL) { + *pwc = (ucs4_t) 0x3130 + jamo1; + return 2; + } + } + /* Syllables composed only of initial and final don't exist. */ + } else { + /* index1 and index2 are not fill, but index3 may be fill. */ + /* Nothing more to exclude. All 11172 code points are valid. */ + *pwc = 0xac00 + ((index1 - 1) * 21 + (index2 - 1)) * 28 + index3; + return 2; + } + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +/* 51 Jamo: 19 initial, 21 medial, 11 final not initial. */ +static const unsigned short johab_hangul_page31[51] = { + 0x8841, 0x8c41, 0x8444, 0x9041, 0x8446, 0x8447, 0x9441, /*0x30-0x37*/ + 0x9841, 0x9c41, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f, /*0x38-0x3f*/ + 0x8450, 0xa041, 0xa441, 0xa841, 0x8454, 0xac41, 0xb041, 0xb441, /*0x40-0x47*/ + 0xb841, 0xbc41, 0xc041, 0xc441, 0xc841, 0xcc41, 0xd041, 0x8461, /*0x48-0x4f*/ + 0x8481, 0x84a1, 0x84c1, 0x84e1, 0x8541, 0x8561, 0x8581, 0x85a1, /*0x50-0x57*/ + 0x85c1, 0x85e1, 0x8641, 0x8661, 0x8681, 0x86a1, 0x86c1, 0x86e1, /*0x58-0x5f*/ + 0x8741, 0x8761, 0x8781, 0x87a1, /*0x60-0x67*/ +}; + +/* Tables mapping packed indices to 5-bit groups. */ +/* index1+1 = jamo_initial_index[bitspart1] <==> + bitspart1 = jamo_initial_index_inverse[index1] */ +static const char jamo_initial_index_inverse[19] = { + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, +}; +/* index2+1 = jamo_medial_index[bitspart2] <==> + bitspart2 = jamo_medial_index_inverse[index2] */ +static const char jamo_medial_index_inverse[21] = { + 0x03, 0x04, 0x05, 0x06, 0x07, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x1a, 0x1b, 0x1c, 0x1d, +}; +/* index3 = jamo_final_index[bitspart3] <==> + bitspart3 = jamo_final_index_inverse[index3] */ +static const char jamo_final_index_inverse[28] = { + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, +}; + +static int +johab_hangul_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + if (wc >= 0x3131 && wc < 0x3164) { + unsigned short c = johab_hangul_page31[wc-0x3131]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } else if (wc >= 0xac00 && wc < 0xd7a4) { + unsigned int index1; + unsigned int index2; + unsigned int index3; + unsigned short c; + unsigned int tmp = wc - 0xac00; + index3 = tmp % 28; tmp = tmp / 28; + index2 = tmp % 21; tmp = tmp / 21; + index1 = tmp; + c = (((((1 << 5) + | jamo_initial_index_inverse[index1]) << 5) + | jamo_medial_index_inverse[index2]) << 5) + | jamo_final_index_inverse[index3]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} + +/* + * Decomposition of JOHAB Hangul in one to three Johab Jamo elements. + */ + +/* Decompose wc into r[0..2], and return the number of resulting Jamo elements. + Return RET_ILUNI if decomposition is not possible. */ + +static int johab_hangul_decompose (conv_t conv, ucs4_t* r, ucs4_t wc) +{ + unsigned char buf[2]; + int ret = johab_hangul_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + unsigned int hangul = (buf[0] << 8) | buf[1]; + unsigned char jamo1 = jamo_initial[(hangul >> 10) & 31]; + unsigned char jamo2 = jamo_medial[(hangul >> 5) & 31]; + unsigned char jamo3 = jamo_final[hangul & 31]; + if ((hangul >> 15) != 1) abort(); + if (jamo1 != NONE && jamo2 != NONE && jamo3 != NONE) { + /* They are not all three == FILL because that would correspond to + johab = 0x8441, which doesn't exist. */ + ucs4_t* p = r; + if (jamo1 != FILL) + *p++ = 0x3130 + jamo1; + if (jamo2 != FILL) + *p++ = 0x3130 + jamo2; + if (jamo3 != FILL) + *p++ = 0x3130 + jamo3; + return p-r; + } + } + return RET_ILUNI; +} + +#undef fill +#undef none +#undef FILL +#undef NONE diff --git a/jni/parted/libiconv/lib/koi8_r.h b/jni/parted/libiconv/lib/koi8_r.h new file mode 100755 index 0000000..a60c5fa --- /dev/null +++ b/jni/parted/libiconv/lib/koi8_r.h @@ -0,0 +1,152 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * KOI8-R + */ + +/* Specification: RFC 1489 */ + +static const unsigned short koi8_r_2uni[128] = { + /* 0x80 */ + 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, + /* 0x90 */ + 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, + /* 0xa0 */ + 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, + 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, + /* 0xb0 */ + 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9, + /* 0xc0 */ + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + /* 0xd0 */ + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + /* 0xe0 */ + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + /* 0xf0 */ + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a, +}; + +static int +koi8_r_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) koi8_r_2uni[c-0x80]; + return 1; +} + +static const unsigned char koi8_r_page00[88] = { + 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */ +}; +static const unsigned char koi8_r_page04[88] = { + 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ + 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ +}; +static const unsigned char koi8_r_page22[80] = { + 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char koi8_r_page23[8] = { + 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char koi8_r_page25[168] = { + 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, /* 0x50-0x57 */ + 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */ + 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, /* 0x60-0x67 */ + 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +koi8_r_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00f8) + c = koi8_r_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0458) + c = koi8_r_page04[wc-0x0400]; + else if (wc >= 0x2218 && wc < 0x2268) + c = koi8_r_page22[wc-0x2218]; + else if (wc >= 0x2320 && wc < 0x2328) + c = koi8_r_page23[wc-0x2320]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = koi8_r_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/koi8_ru.h b/jni/parted/libiconv/lib/koi8_ru.h new file mode 100755 index 0000000..ee0b033 --- /dev/null +++ b/jni/parted/libiconv/lib/koi8_ru.h @@ -0,0 +1,158 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * KOI8-RU + */ + +static const unsigned short koi8_ru_2uni[128] = { + /* 0x80 */ + 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, + /* 0x90 */ + 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, + /* 0xa0 */ + 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, + 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x0491, 0x045e, 0x255e, + /* 0xb0 */ + 0x255f, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x0490, 0x040e, 0x00a9, + /* 0xc0 */ + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + /* 0xd0 */ + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + /* 0xe0 */ + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + /* 0xf0 */ + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a, +}; + +static int +koi8_ru_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) koi8_ru_2uni[c-0x80]; + return 1; +} + +static const unsigned char koi8_ru_page00[88] = { + 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */ +}; +static const unsigned char koi8_ru_page04[152] = { + 0x00, 0xb3, 0x00, 0x00, 0xb4, 0x00, 0xb6, 0xb7, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x00, /* 0x08-0x0f */ + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ + 0x00, 0xa3, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xbd, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char koi8_ru_page22[80] = { + 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char koi8_ru_page23[8] = { + 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char koi8_ru_page25[168] = { + 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xa0, 0xa1, 0xa2, 0x00, 0xa5, 0x00, 0x00, 0xa8, /* 0x50-0x57 */ + 0xa9, 0xaa, 0xab, 0xac, 0x00, 0x00, 0xaf, 0xb0, /* 0x58-0x5f */ + 0xb1, 0xb2, 0x00, 0xb5, 0x00, 0x00, 0xb8, 0xb9, /* 0x60-0x67 */ + 0xba, 0xbb, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +koi8_ru_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00f8) + c = koi8_ru_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0498) + c = koi8_ru_page04[wc-0x0400]; + else if (wc >= 0x2218 && wc < 0x2268) + c = koi8_ru_page22[wc-0x2218]; + else if (wc >= 0x2320 && wc < 0x2328) + c = koi8_ru_page23[wc-0x2320]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = koi8_ru_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/koi8_t.h b/jni/parted/libiconv/lib/koi8_t.h new file mode 100755 index 0000000..a2e9bf5 --- /dev/null +++ b/jni/parted/libiconv/lib/koi8_t.h @@ -0,0 +1,142 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * KOI8-T + */ + +static const unsigned short koi8_t_2uni[128] = { + /* 0x80 */ + 0x049b, 0x0493, 0x201a, 0x0492, 0x201e, 0x2026, 0x2020, 0x2021, + 0xfffd, 0x2030, 0x04b3, 0x2039, 0x04b2, 0x04b7, 0x04b6, 0xfffd, + /* 0x90 */ + 0x049a, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0xfffd, 0x2122, 0xfffd, 0x203a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xa0 */ + 0xfffd, 0x04ef, 0x04ee, 0x0451, 0x00a4, 0x04e3, 0x00a6, 0x00a7, + 0xfffd, 0xfffd, 0xfffd, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0xfffd, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x00b2, 0x0401, 0xfffd, 0x04e2, 0x00b6, 0x00b7, + 0xfffd, 0x2116, 0xfffd, 0x00bb, 0xfffd, 0xfffd, 0xfffd, 0x00a9, + /* 0xc0 */ + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + /* 0xd0 */ + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + /* 0xe0 */ + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + /* 0xf0 */ + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a, +}; + +static int +koi8_t_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = koi8_t_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char koi8_t_page00[32] = { + 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xbf, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char koi8_t_page04[240] = { + 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ + 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x83, 0x81, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x8c, 0x8a, 0x00, 0x00, 0x8e, 0x8d, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0xb5, 0xa5, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xa1, /* 0xe8-0xef */ +}; +static const unsigned char koi8_t_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; +static const unsigned char koi8_t_page21[24] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static int +koi8_t_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = koi8_t_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x04f0) + c = koi8_t_page04[wc-0x0400]; + else if (wc >= 0x2010 && wc < 0x2040) + c = koi8_t_page20[wc-0x2010]; + else if (wc >= 0x2110 && wc < 0x2128) + c = koi8_t_page21[wc-0x2110]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/koi8_u.h b/jni/parted/libiconv/lib/koi8_u.h new file mode 100755 index 0000000..f035b30 --- /dev/null +++ b/jni/parted/libiconv/lib/koi8_u.h @@ -0,0 +1,160 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * KOI8-U + */ + +/* Specification: RFC 2319 */ + +static const unsigned short koi8_u_2uni[128] = { + /* 0x80 */ + 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, + /* 0x90 */ + 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, + /* 0xa0 */ + 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, + 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x0491, 0x255d, 0x255e, + /* 0xb0 */ + 0x255f, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x0490, 0x256c, 0x00a9, + /* 0xc0 */ + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + /* 0xd0 */ + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + /* 0xe0 */ + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + /* 0xf0 */ + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a, +}; + +static int +koi8_u_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) koi8_u_2uni[c-0x80]; + return 1; +} + +static const unsigned char koi8_u_page00[88] = { + 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */ +}; +static const unsigned char koi8_u_page04[152] = { + 0x00, 0xb3, 0x00, 0x00, 0xb4, 0x00, 0xb6, 0xb7, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ + 0x00, 0xa3, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xbd, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char koi8_u_page22[80] = { + 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char koi8_u_page23[8] = { + 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char koi8_u_page25[168] = { + 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xa0, 0xa1, 0xa2, 0x00, 0xa5, 0x00, 0x00, 0xa8, /* 0x50-0x57 */ + 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */ + 0xb1, 0xb2, 0x00, 0xb5, 0x00, 0x00, 0xb8, 0xb9, /* 0x60-0x67 */ + 0xba, 0xbb, 0xbc, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static int +koi8_u_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00f8) + c = koi8_u_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x0498) + c = koi8_u_page04[wc-0x0400]; + else if (wc >= 0x2218 && wc < 0x2268) + c = koi8_u_page22[wc-0x2218]; + else if (wc >= 0x2320 && wc < 0x2328) + c = koi8_u_page23[wc-0x2320]; + else if (wc >= 0x2500 && wc < 0x25a8) + c = koi8_u_page25[wc-0x2500]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ksc5601.h b/jni/parted/libiconv/lib/ksc5601.h new file mode 100755 index 0000000..0a0b748 --- /dev/null +++ b/jni/parted/libiconv/lib/ksc5601.h @@ -0,0 +1,3021 @@ +/* + * Copyright (C) 1999-2007, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * KSC5601.1987-0, now KS X 1001:2002 + */ + +static const unsigned short ksc5601_2uni_page21[1115] = { + /* 0x21 */ + 0x3000, 0x3001, 0x3002, 0x00b7, 0x2025, 0x2026, 0x00a8, 0x3003, + 0x00ad, 0x2015, 0x2225, 0xff3c, 0x223c, 0x2018, 0x2019, 0x201c, + 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, + 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7, + 0x2260, 0x2264, 0x2265, 0x221e, 0x2234, 0x00b0, 0x2032, 0x2033, + 0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5, 0x2642, 0x2640, 0x2220, + 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00a7, 0x203b, + 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, + 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190, 0x2191, + 0x2193, 0x2194, 0x3013, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, + 0x2235, 0x222b, 0x222c, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, + 0x2283, 0x222a, 0x2229, 0x2227, 0x2228, 0xffe2, + /* 0x22 */ + 0x21d2, 0x21d4, 0x2200, 0x2203, 0x00b4, 0xff5e, 0x02c7, 0x02d8, + 0x02dd, 0x02da, 0x02d9, 0x00b8, 0x02db, 0x00a1, 0x00bf, 0x02d0, + 0x222e, 0x2211, 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1, 0x25c0, + 0x25b7, 0x25b6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, 0x2663, + 0x2299, 0x25c8, 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4, 0x25a5, + 0x25a8, 0x25a7, 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e, 0x261c, + 0x261e, 0x00b6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, 0x2196, + 0x2198, 0x266d, 0x2669, 0x266a, 0x266c, 0x327f, 0x321c, 0x2116, + 0x33c7, 0x2122, 0x33c2, 0x33d8, 0x2121, 0x20ac, 0x00ae, 0x327e, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x23 */ + 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, 0xff08, + 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10, + 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, + 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20, + 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, + 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, + 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, + 0xff39, 0xff3a, 0xff3b, 0xffe6, 0xff3d, 0xff3e, 0xff3f, 0xff40, + 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, + 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, + 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, + 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3, + /* 0x24 */ + 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, + 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140, + 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148, + 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150, + 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, + 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160, + 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168, + 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170, + 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, 0x3178, + 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x317f, 0x3180, + 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, 0x3188, + 0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e, + /* 0x25 */ + 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, + 0x2178, 0x2179, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2160, + 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, + 0x2169, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, + 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, + 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, + 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, + 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x26 */ + 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c, + 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b, + 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f, + 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542, + 0x2512, 0x2511, 0x251a, 0x2519, 0x2516, 0x2515, 0x250e, 0x250d, + 0x251e, 0x251f, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, 0x252a, + 0x252d, 0x252e, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, 0x253a, + 0x253d, 0x253e, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, 0x2546, + 0x2547, 0x2548, 0x2549, 0x254a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x27 */ + 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33c4, 0x33a3, 0x33a4, + 0x33a5, 0x33a6, 0x3399, 0x339a, 0x339b, 0x339c, 0x339d, 0x339e, + 0x339f, 0x33a0, 0x33a1, 0x33a2, 0x33ca, 0x338d, 0x338e, 0x338f, + 0x33cf, 0x3388, 0x3389, 0x33c8, 0x33a7, 0x33a8, 0x33b0, 0x33b1, + 0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7, 0x33b8, 0x33b9, + 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33ba, 0x33bb, 0x33bc, + 0x33bd, 0x33be, 0x33bf, 0x3390, 0x3391, 0x3392, 0x3393, 0x3394, + 0x2126, 0x33c0, 0x33c1, 0x338a, 0x338b, 0x338c, 0x33d6, 0x33c5, + 0x33ad, 0x33ae, 0x33af, 0x33db, 0x33a9, 0x33aa, 0x33ab, 0x33ac, + 0x33dd, 0x33d0, 0x33d3, 0x33c3, 0x33c9, 0x33dc, 0x33c6, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x28 */ + 0x00c6, 0x00d0, 0x00aa, 0x0126, 0xfffd, 0x0132, 0xfffd, 0x013f, + 0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166, 0x014a, 0xfffd, + 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267, + 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f, + 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277, + 0x3278, 0x3279, 0x327a, 0x327b, 0x24d0, 0x24d1, 0x24d2, 0x24d3, + 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, 0x24db, + 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, 0x24e3, + 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2460, 0x2461, + 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, + 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd, 0x2153, 0x2154, + 0x00bc, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e, + /* 0x29 */ + 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0140, + 0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x0167, 0x014b, 0x0149, + 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, 0x3207, + 0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e, 0x320f, + 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, 0x3217, + 0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e, 0x249f, + 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7, + 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af, + 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x2474, 0x2475, + 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, + 0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x00b9, 0x00b2, 0x00b3, + 0x2074, 0x207f, 0x2081, 0x2082, 0x2083, 0x2084, + /* 0x2a */ + 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, + 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, + 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, + 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, + 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, + 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, + 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, + 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, + 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, + 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, + 0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x2b */ + 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, + 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, + 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, + 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, + 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, + 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, + 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, + 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, + 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, + 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, + 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0x2c */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 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, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, + 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, + 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, + 0x044f, +}; +static const unsigned short ksc5601_2uni_page30[2350] = { + /* 0x30 */ + 0xac00, 0xac01, 0xac04, 0xac07, 0xac08, 0xac09, 0xac0a, 0xac10, + 0xac11, 0xac12, 0xac13, 0xac14, 0xac15, 0xac16, 0xac17, 0xac19, + 0xac1a, 0xac1b, 0xac1c, 0xac1d, 0xac20, 0xac24, 0xac2c, 0xac2d, + 0xac2f, 0xac30, 0xac31, 0xac38, 0xac39, 0xac3c, 0xac40, 0xac4b, + 0xac4d, 0xac54, 0xac58, 0xac5c, 0xac70, 0xac71, 0xac74, 0xac77, + 0xac78, 0xac7a, 0xac80, 0xac81, 0xac83, 0xac84, 0xac85, 0xac86, + 0xac89, 0xac8a, 0xac8b, 0xac8c, 0xac90, 0xac94, 0xac9c, 0xac9d, + 0xac9f, 0xaca0, 0xaca1, 0xaca8, 0xaca9, 0xacaa, 0xacac, 0xacaf, + 0xacb0, 0xacb8, 0xacb9, 0xacbb, 0xacbc, 0xacbd, 0xacc1, 0xacc4, + 0xacc8, 0xaccc, 0xacd5, 0xacd7, 0xace0, 0xace1, 0xace4, 0xace7, + 0xace8, 0xacea, 0xacec, 0xacef, 0xacf0, 0xacf1, 0xacf3, 0xacf5, + 0xacf6, 0xacfc, 0xacfd, 0xad00, 0xad04, 0xad06, + /* 0x31 */ + 0xad0c, 0xad0d, 0xad0f, 0xad11, 0xad18, 0xad1c, 0xad20, 0xad29, + 0xad2c, 0xad2d, 0xad34, 0xad35, 0xad38, 0xad3c, 0xad44, 0xad45, + 0xad47, 0xad49, 0xad50, 0xad54, 0xad58, 0xad61, 0xad63, 0xad6c, + 0xad6d, 0xad70, 0xad73, 0xad74, 0xad75, 0xad76, 0xad7b, 0xad7c, + 0xad7d, 0xad7f, 0xad81, 0xad82, 0xad88, 0xad89, 0xad8c, 0xad90, + 0xad9c, 0xad9d, 0xada4, 0xadb7, 0xadc0, 0xadc1, 0xadc4, 0xadc8, + 0xadd0, 0xadd1, 0xadd3, 0xaddc, 0xade0, 0xade4, 0xadf8, 0xadf9, + 0xadfc, 0xadff, 0xae00, 0xae01, 0xae08, 0xae09, 0xae0b, 0xae0d, + 0xae14, 0xae30, 0xae31, 0xae34, 0xae37, 0xae38, 0xae3a, 0xae40, + 0xae41, 0xae43, 0xae45, 0xae46, 0xae4a, 0xae4c, 0xae4d, 0xae4e, + 0xae50, 0xae54, 0xae56, 0xae5c, 0xae5d, 0xae5f, 0xae60, 0xae61, + 0xae65, 0xae68, 0xae69, 0xae6c, 0xae70, 0xae78, + /* 0x32 */ + 0xae79, 0xae7b, 0xae7c, 0xae7d, 0xae84, 0xae85, 0xae8c, 0xaebc, + 0xaebd, 0xaebe, 0xaec0, 0xaec4, 0xaecc, 0xaecd, 0xaecf, 0xaed0, + 0xaed1, 0xaed8, 0xaed9, 0xaedc, 0xaee8, 0xaeeb, 0xaeed, 0xaef4, + 0xaef8, 0xaefc, 0xaf07, 0xaf08, 0xaf0d, 0xaf10, 0xaf2c, 0xaf2d, + 0xaf30, 0xaf32, 0xaf34, 0xaf3c, 0xaf3d, 0xaf3f, 0xaf41, 0xaf42, + 0xaf43, 0xaf48, 0xaf49, 0xaf50, 0xaf5c, 0xaf5d, 0xaf64, 0xaf65, + 0xaf79, 0xaf80, 0xaf84, 0xaf88, 0xaf90, 0xaf91, 0xaf95, 0xaf9c, + 0xafb8, 0xafb9, 0xafbc, 0xafc0, 0xafc7, 0xafc8, 0xafc9, 0xafcb, + 0xafcd, 0xafce, 0xafd4, 0xafdc, 0xafe8, 0xafe9, 0xaff0, 0xaff1, + 0xaff4, 0xaff8, 0xb000, 0xb001, 0xb004, 0xb00c, 0xb010, 0xb014, + 0xb01c, 0xb01d, 0xb028, 0xb044, 0xb045, 0xb048, 0xb04a, 0xb04c, + 0xb04e, 0xb053, 0xb054, 0xb055, 0xb057, 0xb059, + /* 0x33 */ + 0xb05d, 0xb07c, 0xb07d, 0xb080, 0xb084, 0xb08c, 0xb08d, 0xb08f, + 0xb091, 0xb098, 0xb099, 0xb09a, 0xb09c, 0xb09f, 0xb0a0, 0xb0a1, + 0xb0a2, 0xb0a8, 0xb0a9, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae, 0xb0af, + 0xb0b1, 0xb0b3, 0xb0b4, 0xb0b5, 0xb0b8, 0xb0bc, 0xb0c4, 0xb0c5, + 0xb0c7, 0xb0c8, 0xb0c9, 0xb0d0, 0xb0d1, 0xb0d4, 0xb0d8, 0xb0e0, + 0xb0e5, 0xb108, 0xb109, 0xb10b, 0xb10c, 0xb110, 0xb112, 0xb113, + 0xb118, 0xb119, 0xb11b, 0xb11c, 0xb11d, 0xb123, 0xb124, 0xb125, + 0xb128, 0xb12c, 0xb134, 0xb135, 0xb137, 0xb138, 0xb139, 0xb140, + 0xb141, 0xb144, 0xb148, 0xb150, 0xb151, 0xb154, 0xb155, 0xb158, + 0xb15c, 0xb160, 0xb178, 0xb179, 0xb17c, 0xb180, 0xb182, 0xb188, + 0xb189, 0xb18b, 0xb18d, 0xb192, 0xb193, 0xb194, 0xb198, 0xb19c, + 0xb1a8, 0xb1cc, 0xb1d0, 0xb1d4, 0xb1dc, 0xb1dd, + /* 0x34 */ + 0xb1df, 0xb1e8, 0xb1e9, 0xb1ec, 0xb1f0, 0xb1f9, 0xb1fb, 0xb1fd, + 0xb204, 0xb205, 0xb208, 0xb20b, 0xb20c, 0xb214, 0xb215, 0xb217, + 0xb219, 0xb220, 0xb234, 0xb23c, 0xb258, 0xb25c, 0xb260, 0xb268, + 0xb269, 0xb274, 0xb275, 0xb27c, 0xb284, 0xb285, 0xb289, 0xb290, + 0xb291, 0xb294, 0xb298, 0xb299, 0xb29a, 0xb2a0, 0xb2a1, 0xb2a3, + 0xb2a5, 0xb2a6, 0xb2aa, 0xb2ac, 0xb2b0, 0xb2b4, 0xb2c8, 0xb2c9, + 0xb2cc, 0xb2d0, 0xb2d2, 0xb2d8, 0xb2d9, 0xb2db, 0xb2dd, 0xb2e2, + 0xb2e4, 0xb2e5, 0xb2e6, 0xb2e8, 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee, + 0xb2ef, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f7, 0xb2f8, 0xb2f9, 0xb2fa, + 0xb2fb, 0xb2ff, 0xb300, 0xb301, 0xb304, 0xb308, 0xb310, 0xb311, + 0xb313, 0xb314, 0xb315, 0xb31c, 0xb354, 0xb355, 0xb356, 0xb358, + 0xb35b, 0xb35c, 0xb35e, 0xb35f, 0xb364, 0xb365, + /* 0x35 */ + 0xb367, 0xb369, 0xb36b, 0xb36e, 0xb370, 0xb371, 0xb374, 0xb378, + 0xb380, 0xb381, 0xb383, 0xb384, 0xb385, 0xb38c, 0xb390, 0xb394, + 0xb3a0, 0xb3a1, 0xb3a8, 0xb3ac, 0xb3c4, 0xb3c5, 0xb3c8, 0xb3cb, + 0xb3cc, 0xb3ce, 0xb3d0, 0xb3d4, 0xb3d5, 0xb3d7, 0xb3d9, 0xb3db, + 0xb3dd, 0xb3e0, 0xb3e4, 0xb3e8, 0xb3fc, 0xb410, 0xb418, 0xb41c, + 0xb420, 0xb428, 0xb429, 0xb42b, 0xb434, 0xb450, 0xb451, 0xb454, + 0xb458, 0xb460, 0xb461, 0xb463, 0xb465, 0xb46c, 0xb480, 0xb488, + 0xb49d, 0xb4a4, 0xb4a8, 0xb4ac, 0xb4b5, 0xb4b7, 0xb4b9, 0xb4c0, + 0xb4c4, 0xb4c8, 0xb4d0, 0xb4d5, 0xb4dc, 0xb4dd, 0xb4e0, 0xb4e3, + 0xb4e4, 0xb4e6, 0xb4ec, 0xb4ed, 0xb4ef, 0xb4f1, 0xb4f8, 0xb514, + 0xb515, 0xb518, 0xb51b, 0xb51c, 0xb524, 0xb525, 0xb527, 0xb528, + 0xb529, 0xb52a, 0xb530, 0xb531, 0xb534, 0xb538, + /* 0x36 */ + 0xb540, 0xb541, 0xb543, 0xb544, 0xb545, 0xb54b, 0xb54c, 0xb54d, + 0xb550, 0xb554, 0xb55c, 0xb55d, 0xb55f, 0xb560, 0xb561, 0xb5a0, + 0xb5a1, 0xb5a4, 0xb5a8, 0xb5aa, 0xb5ab, 0xb5b0, 0xb5b1, 0xb5b3, + 0xb5b4, 0xb5b5, 0xb5bb, 0xb5bc, 0xb5bd, 0xb5c0, 0xb5c4, 0xb5cc, + 0xb5cd, 0xb5cf, 0xb5d0, 0xb5d1, 0xb5d8, 0xb5ec, 0xb610, 0xb611, + 0xb614, 0xb618, 0xb625, 0xb62c, 0xb634, 0xb648, 0xb664, 0xb668, + 0xb69c, 0xb69d, 0xb6a0, 0xb6a4, 0xb6ab, 0xb6ac, 0xb6b1, 0xb6d4, + 0xb6f0, 0xb6f4, 0xb6f8, 0xb700, 0xb701, 0xb705, 0xb728, 0xb729, + 0xb72c, 0xb72f, 0xb730, 0xb738, 0xb739, 0xb73b, 0xb744, 0xb748, + 0xb74c, 0xb754, 0xb755, 0xb760, 0xb764, 0xb768, 0xb770, 0xb771, + 0xb773, 0xb775, 0xb77c, 0xb77d, 0xb780, 0xb784, 0xb78c, 0xb78d, + 0xb78f, 0xb790, 0xb791, 0xb792, 0xb796, 0xb797, + /* 0x37 */ + 0xb798, 0xb799, 0xb79c, 0xb7a0, 0xb7a8, 0xb7a9, 0xb7ab, 0xb7ac, + 0xb7ad, 0xb7b4, 0xb7b5, 0xb7b8, 0xb7c7, 0xb7c9, 0xb7ec, 0xb7ed, + 0xb7f0, 0xb7f4, 0xb7fc, 0xb7fd, 0xb7ff, 0xb800, 0xb801, 0xb807, + 0xb808, 0xb809, 0xb80c, 0xb810, 0xb818, 0xb819, 0xb81b, 0xb81d, + 0xb824, 0xb825, 0xb828, 0xb82c, 0xb834, 0xb835, 0xb837, 0xb838, + 0xb839, 0xb840, 0xb844, 0xb851, 0xb853, 0xb85c, 0xb85d, 0xb860, + 0xb864, 0xb86c, 0xb86d, 0xb86f, 0xb871, 0xb878, 0xb87c, 0xb88d, + 0xb8a8, 0xb8b0, 0xb8b4, 0xb8b8, 0xb8c0, 0xb8c1, 0xb8c3, 0xb8c5, + 0xb8cc, 0xb8d0, 0xb8d4, 0xb8dd, 0xb8df, 0xb8e1, 0xb8e8, 0xb8e9, + 0xb8ec, 0xb8f0, 0xb8f8, 0xb8f9, 0xb8fb, 0xb8fd, 0xb904, 0xb918, + 0xb920, 0xb93c, 0xb93d, 0xb940, 0xb944, 0xb94c, 0xb94f, 0xb951, + 0xb958, 0xb959, 0xb95c, 0xb960, 0xb968, 0xb969, + /* 0x38 */ + 0xb96b, 0xb96d, 0xb974, 0xb975, 0xb978, 0xb97c, 0xb984, 0xb985, + 0xb987, 0xb989, 0xb98a, 0xb98d, 0xb98e, 0xb9ac, 0xb9ad, 0xb9b0, + 0xb9b4, 0xb9bc, 0xb9bd, 0xb9bf, 0xb9c1, 0xb9c8, 0xb9c9, 0xb9cc, + 0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d8, 0xb9d9, 0xb9db, + 0xb9dd, 0xb9de, 0xb9e1, 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e8, 0xb9ec, + 0xb9f4, 0xb9f5, 0xb9f7, 0xb9f8, 0xb9f9, 0xb9fa, 0xba00, 0xba01, + 0xba08, 0xba15, 0xba38, 0xba39, 0xba3c, 0xba40, 0xba42, 0xba48, + 0xba49, 0xba4b, 0xba4d, 0xba4e, 0xba53, 0xba54, 0xba55, 0xba58, + 0xba5c, 0xba64, 0xba65, 0xba67, 0xba68, 0xba69, 0xba70, 0xba71, + 0xba74, 0xba78, 0xba83, 0xba84, 0xba85, 0xba87, 0xba8c, 0xbaa8, + 0xbaa9, 0xbaab, 0xbaac, 0xbab0, 0xbab2, 0xbab8, 0xbab9, 0xbabb, + 0xbabd, 0xbac4, 0xbac8, 0xbad8, 0xbad9, 0xbafc, + /* 0x39 */ + 0xbb00, 0xbb04, 0xbb0d, 0xbb0f, 0xbb11, 0xbb18, 0xbb1c, 0xbb20, + 0xbb29, 0xbb2b, 0xbb34, 0xbb35, 0xbb36, 0xbb38, 0xbb3b, 0xbb3c, + 0xbb3d, 0xbb3e, 0xbb44, 0xbb45, 0xbb47, 0xbb49, 0xbb4d, 0xbb4f, + 0xbb50, 0xbb54, 0xbb58, 0xbb61, 0xbb63, 0xbb6c, 0xbb88, 0xbb8c, + 0xbb90, 0xbba4, 0xbba8, 0xbbac, 0xbbb4, 0xbbb7, 0xbbc0, 0xbbc4, + 0xbbc8, 0xbbd0, 0xbbd3, 0xbbf8, 0xbbf9, 0xbbfc, 0xbbff, 0xbc00, + 0xbc02, 0xbc08, 0xbc09, 0xbc0b, 0xbc0c, 0xbc0d, 0xbc0f, 0xbc11, + 0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc1b, 0xbc1c, 0xbc1d, + 0xbc1e, 0xbc1f, 0xbc24, 0xbc25, 0xbc27, 0xbc29, 0xbc2d, 0xbc30, + 0xbc31, 0xbc34, 0xbc38, 0xbc40, 0xbc41, 0xbc43, 0xbc44, 0xbc45, + 0xbc49, 0xbc4c, 0xbc4d, 0xbc50, 0xbc5d, 0xbc84, 0xbc85, 0xbc88, + 0xbc8b, 0xbc8c, 0xbc8e, 0xbc94, 0xbc95, 0xbc97, + /* 0x3a */ + 0xbc99, 0xbc9a, 0xbca0, 0xbca1, 0xbca4, 0xbca7, 0xbca8, 0xbcb0, + 0xbcb1, 0xbcb3, 0xbcb4, 0xbcb5, 0xbcbc, 0xbcbd, 0xbcc0, 0xbcc4, + 0xbccd, 0xbccf, 0xbcd0, 0xbcd1, 0xbcd5, 0xbcd8, 0xbcdc, 0xbcf4, + 0xbcf5, 0xbcf6, 0xbcf8, 0xbcfc, 0xbd04, 0xbd05, 0xbd07, 0xbd09, + 0xbd10, 0xbd14, 0xbd24, 0xbd2c, 0xbd40, 0xbd48, 0xbd49, 0xbd4c, + 0xbd50, 0xbd58, 0xbd59, 0xbd64, 0xbd68, 0xbd80, 0xbd81, 0xbd84, + 0xbd87, 0xbd88, 0xbd89, 0xbd8a, 0xbd90, 0xbd91, 0xbd93, 0xbd95, + 0xbd99, 0xbd9a, 0xbd9c, 0xbda4, 0xbdb0, 0xbdb8, 0xbdd4, 0xbdd5, + 0xbdd8, 0xbddc, 0xbde9, 0xbdf0, 0xbdf4, 0xbdf8, 0xbe00, 0xbe03, + 0xbe05, 0xbe0c, 0xbe0d, 0xbe10, 0xbe14, 0xbe1c, 0xbe1d, 0xbe1f, + 0xbe44, 0xbe45, 0xbe48, 0xbe4c, 0xbe4e, 0xbe54, 0xbe55, 0xbe57, + 0xbe59, 0xbe5a, 0xbe5b, 0xbe60, 0xbe61, 0xbe64, + /* 0x3b */ + 0xbe68, 0xbe6a, 0xbe70, 0xbe71, 0xbe73, 0xbe74, 0xbe75, 0xbe7b, + 0xbe7c, 0xbe7d, 0xbe80, 0xbe84, 0xbe8c, 0xbe8d, 0xbe8f, 0xbe90, + 0xbe91, 0xbe98, 0xbe99, 0xbea8, 0xbed0, 0xbed1, 0xbed4, 0xbed7, + 0xbed8, 0xbee0, 0xbee3, 0xbee4, 0xbee5, 0xbeec, 0xbf01, 0xbf08, + 0xbf09, 0xbf18, 0xbf19, 0xbf1b, 0xbf1c, 0xbf1d, 0xbf40, 0xbf41, + 0xbf44, 0xbf48, 0xbf50, 0xbf51, 0xbf55, 0xbf94, 0xbfb0, 0xbfc5, + 0xbfcc, 0xbfcd, 0xbfd0, 0xbfd4, 0xbfdc, 0xbfdf, 0xbfe1, 0xc03c, + 0xc051, 0xc058, 0xc05c, 0xc060, 0xc068, 0xc069, 0xc090, 0xc091, + 0xc094, 0xc098, 0xc0a0, 0xc0a1, 0xc0a3, 0xc0a5, 0xc0ac, 0xc0ad, + 0xc0af, 0xc0b0, 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0bc, 0xc0bd, + 0xc0bf, 0xc0c0, 0xc0c1, 0xc0c5, 0xc0c8, 0xc0c9, 0xc0cc, 0xc0d0, + 0xc0d8, 0xc0d9, 0xc0db, 0xc0dc, 0xc0dd, 0xc0e4, + /* 0x3c */ + 0xc0e5, 0xc0e8, 0xc0ec, 0xc0f4, 0xc0f5, 0xc0f7, 0xc0f9, 0xc100, + 0xc104, 0xc108, 0xc110, 0xc115, 0xc11c, 0xc11d, 0xc11e, 0xc11f, + 0xc120, 0xc123, 0xc124, 0xc126, 0xc127, 0xc12c, 0xc12d, 0xc12f, + 0xc130, 0xc131, 0xc136, 0xc138, 0xc139, 0xc13c, 0xc140, 0xc148, + 0xc149, 0xc14b, 0xc14c, 0xc14d, 0xc154, 0xc155, 0xc158, 0xc15c, + 0xc164, 0xc165, 0xc167, 0xc168, 0xc169, 0xc170, 0xc174, 0xc178, + 0xc185, 0xc18c, 0xc18d, 0xc18e, 0xc190, 0xc194, 0xc196, 0xc19c, + 0xc19d, 0xc19f, 0xc1a1, 0xc1a5, 0xc1a8, 0xc1a9, 0xc1ac, 0xc1b0, + 0xc1bd, 0xc1c4, 0xc1c8, 0xc1cc, 0xc1d4, 0xc1d7, 0xc1d8, 0xc1e0, + 0xc1e4, 0xc1e8, 0xc1f0, 0xc1f1, 0xc1f3, 0xc1fc, 0xc1fd, 0xc200, + 0xc204, 0xc20c, 0xc20d, 0xc20f, 0xc211, 0xc218, 0xc219, 0xc21c, + 0xc21f, 0xc220, 0xc228, 0xc229, 0xc22b, 0xc22d, + /* 0x3d */ + 0xc22f, 0xc231, 0xc232, 0xc234, 0xc248, 0xc250, 0xc251, 0xc254, + 0xc258, 0xc260, 0xc265, 0xc26c, 0xc26d, 0xc270, 0xc274, 0xc27c, + 0xc27d, 0xc27f, 0xc281, 0xc288, 0xc289, 0xc290, 0xc298, 0xc29b, + 0xc29d, 0xc2a4, 0xc2a5, 0xc2a8, 0xc2ac, 0xc2ad, 0xc2b4, 0xc2b5, + 0xc2b7, 0xc2b9, 0xc2dc, 0xc2dd, 0xc2e0, 0xc2e3, 0xc2e4, 0xc2eb, + 0xc2ec, 0xc2ed, 0xc2ef, 0xc2f1, 0xc2f6, 0xc2f8, 0xc2f9, 0xc2fb, + 0xc2fc, 0xc300, 0xc308, 0xc309, 0xc30c, 0xc30d, 0xc313, 0xc314, + 0xc315, 0xc318, 0xc31c, 0xc324, 0xc325, 0xc328, 0xc329, 0xc345, + 0xc368, 0xc369, 0xc36c, 0xc370, 0xc372, 0xc378, 0xc379, 0xc37c, + 0xc37d, 0xc384, 0xc388, 0xc38c, 0xc3c0, 0xc3d8, 0xc3d9, 0xc3dc, + 0xc3df, 0xc3e0, 0xc3e2, 0xc3e8, 0xc3e9, 0xc3ed, 0xc3f4, 0xc3f5, + 0xc3f8, 0xc408, 0xc410, 0xc424, 0xc42c, 0xc430, + /* 0x3e */ + 0xc434, 0xc43c, 0xc43d, 0xc448, 0xc464, 0xc465, 0xc468, 0xc46c, + 0xc474, 0xc475, 0xc479, 0xc480, 0xc494, 0xc49c, 0xc4b8, 0xc4bc, + 0xc4e9, 0xc4f0, 0xc4f1, 0xc4f4, 0xc4f8, 0xc4fa, 0xc4ff, 0xc500, + 0xc501, 0xc50c, 0xc510, 0xc514, 0xc51c, 0xc528, 0xc529, 0xc52c, + 0xc530, 0xc538, 0xc539, 0xc53b, 0xc53d, 0xc544, 0xc545, 0xc548, + 0xc549, 0xc54a, 0xc54c, 0xc54d, 0xc54e, 0xc553, 0xc554, 0xc555, + 0xc557, 0xc558, 0xc559, 0xc55d, 0xc55e, 0xc560, 0xc561, 0xc564, + 0xc568, 0xc570, 0xc571, 0xc573, 0xc574, 0xc575, 0xc57c, 0xc57d, + 0xc580, 0xc584, 0xc587, 0xc58c, 0xc58d, 0xc58f, 0xc591, 0xc595, + 0xc597, 0xc598, 0xc59c, 0xc5a0, 0xc5a9, 0xc5b4, 0xc5b5, 0xc5b8, + 0xc5b9, 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5c4, 0xc5c5, 0xc5c6, + 0xc5c7, 0xc5c8, 0xc5c9, 0xc5ca, 0xc5cc, 0xc5ce, + /* 0x3f */ + 0xc5d0, 0xc5d1, 0xc5d4, 0xc5d8, 0xc5e0, 0xc5e1, 0xc5e3, 0xc5e5, + 0xc5ec, 0xc5ed, 0xc5ee, 0xc5f0, 0xc5f4, 0xc5f6, 0xc5f7, 0xc5fc, + 0xc5fd, 0xc5fe, 0xc5ff, 0xc600, 0xc601, 0xc605, 0xc606, 0xc607, + 0xc608, 0xc60c, 0xc610, 0xc618, 0xc619, 0xc61b, 0xc61c, 0xc624, + 0xc625, 0xc628, 0xc62c, 0xc62d, 0xc62e, 0xc630, 0xc633, 0xc634, + 0xc635, 0xc637, 0xc639, 0xc63b, 0xc640, 0xc641, 0xc644, 0xc648, + 0xc650, 0xc651, 0xc653, 0xc654, 0xc655, 0xc65c, 0xc65d, 0xc660, + 0xc66c, 0xc66f, 0xc671, 0xc678, 0xc679, 0xc67c, 0xc680, 0xc688, + 0xc689, 0xc68b, 0xc68d, 0xc694, 0xc695, 0xc698, 0xc69c, 0xc6a4, + 0xc6a5, 0xc6a7, 0xc6a9, 0xc6b0, 0xc6b1, 0xc6b4, 0xc6b8, 0xc6b9, + 0xc6ba, 0xc6c0, 0xc6c1, 0xc6c3, 0xc6c5, 0xc6cc, 0xc6cd, 0xc6d0, + 0xc6d4, 0xc6dc, 0xc6dd, 0xc6e0, 0xc6e1, 0xc6e8, + /* 0x40 */ + 0xc6e9, 0xc6ec, 0xc6f0, 0xc6f8, 0xc6f9, 0xc6fd, 0xc704, 0xc705, + 0xc708, 0xc70c, 0xc714, 0xc715, 0xc717, 0xc719, 0xc720, 0xc721, + 0xc724, 0xc728, 0xc730, 0xc731, 0xc733, 0xc735, 0xc737, 0xc73c, + 0xc73d, 0xc740, 0xc744, 0xc74a, 0xc74c, 0xc74d, 0xc74f, 0xc751, + 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc75c, + 0xc760, 0xc768, 0xc76b, 0xc774, 0xc775, 0xc778, 0xc77c, 0xc77d, + 0xc77e, 0xc783, 0xc784, 0xc785, 0xc787, 0xc788, 0xc789, 0xc78a, + 0xc78e, 0xc790, 0xc791, 0xc794, 0xc796, 0xc797, 0xc798, 0xc79a, + 0xc7a0, 0xc7a1, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7ac, 0xc7ad, + 0xc7b0, 0xc7b4, 0xc7bc, 0xc7bd, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c8, + 0xc7c9, 0xc7cc, 0xc7ce, 0xc7d0, 0xc7d8, 0xc7dd, 0xc7e4, 0xc7e8, + 0xc7ec, 0xc800, 0xc801, 0xc804, 0xc808, 0xc80a, + /* 0x41 */ + 0xc810, 0xc811, 0xc813, 0xc815, 0xc816, 0xc81c, 0xc81d, 0xc820, + 0xc824, 0xc82c, 0xc82d, 0xc82f, 0xc831, 0xc838, 0xc83c, 0xc840, + 0xc848, 0xc849, 0xc84c, 0xc84d, 0xc854, 0xc870, 0xc871, 0xc874, + 0xc878, 0xc87a, 0xc880, 0xc881, 0xc883, 0xc885, 0xc886, 0xc887, + 0xc88b, 0xc88c, 0xc88d, 0xc894, 0xc89d, 0xc89f, 0xc8a1, 0xc8a8, + 0xc8bc, 0xc8bd, 0xc8c4, 0xc8c8, 0xc8cc, 0xc8d4, 0xc8d5, 0xc8d7, + 0xc8d9, 0xc8e0, 0xc8e1, 0xc8e4, 0xc8f5, 0xc8fc, 0xc8fd, 0xc900, + 0xc904, 0xc905, 0xc906, 0xc90c, 0xc90d, 0xc90f, 0xc911, 0xc918, + 0xc92c, 0xc934, 0xc950, 0xc951, 0xc954, 0xc958, 0xc960, 0xc961, + 0xc963, 0xc96c, 0xc970, 0xc974, 0xc97c, 0xc988, 0xc989, 0xc98c, + 0xc990, 0xc998, 0xc999, 0xc99b, 0xc99d, 0xc9c0, 0xc9c1, 0xc9c4, + 0xc9c7, 0xc9c8, 0xc9ca, 0xc9d0, 0xc9d1, 0xc9d3, + /* 0x42 */ + 0xc9d5, 0xc9d6, 0xc9d9, 0xc9da, 0xc9dc, 0xc9dd, 0xc9e0, 0xc9e2, + 0xc9e4, 0xc9e7, 0xc9ec, 0xc9ed, 0xc9ef, 0xc9f0, 0xc9f1, 0xc9f8, + 0xc9f9, 0xc9fc, 0xca00, 0xca08, 0xca09, 0xca0b, 0xca0c, 0xca0d, + 0xca14, 0xca18, 0xca29, 0xca4c, 0xca4d, 0xca50, 0xca54, 0xca5c, + 0xca5d, 0xca5f, 0xca60, 0xca61, 0xca68, 0xca7d, 0xca84, 0xca98, + 0xcabc, 0xcabd, 0xcac0, 0xcac4, 0xcacc, 0xcacd, 0xcacf, 0xcad1, + 0xcad3, 0xcad8, 0xcad9, 0xcae0, 0xcaec, 0xcaf4, 0xcb08, 0xcb10, + 0xcb14, 0xcb18, 0xcb20, 0xcb21, 0xcb41, 0xcb48, 0xcb49, 0xcb4c, + 0xcb50, 0xcb58, 0xcb59, 0xcb5d, 0xcb64, 0xcb78, 0xcb79, 0xcb9c, + 0xcbb8, 0xcbd4, 0xcbe4, 0xcbe7, 0xcbe9, 0xcc0c, 0xcc0d, 0xcc10, + 0xcc14, 0xcc1c, 0xcc1d, 0xcc21, 0xcc22, 0xcc27, 0xcc28, 0xcc29, + 0xcc2c, 0xcc2e, 0xcc30, 0xcc38, 0xcc39, 0xcc3b, + /* 0x43 */ + 0xcc3c, 0xcc3d, 0xcc3e, 0xcc44, 0xcc45, 0xcc48, 0xcc4c, 0xcc54, + 0xcc55, 0xcc57, 0xcc58, 0xcc59, 0xcc60, 0xcc64, 0xcc66, 0xcc68, + 0xcc70, 0xcc75, 0xcc98, 0xcc99, 0xcc9c, 0xcca0, 0xcca8, 0xcca9, + 0xccab, 0xccac, 0xccad, 0xccb4, 0xccb5, 0xccb8, 0xccbc, 0xccc4, + 0xccc5, 0xccc7, 0xccc9, 0xccd0, 0xccd4, 0xcce4, 0xccec, 0xccf0, + 0xcd01, 0xcd08, 0xcd09, 0xcd0c, 0xcd10, 0xcd18, 0xcd19, 0xcd1b, + 0xcd1d, 0xcd24, 0xcd28, 0xcd2c, 0xcd39, 0xcd5c, 0xcd60, 0xcd64, + 0xcd6c, 0xcd6d, 0xcd6f, 0xcd71, 0xcd78, 0xcd88, 0xcd94, 0xcd95, + 0xcd98, 0xcd9c, 0xcda4, 0xcda5, 0xcda7, 0xcda9, 0xcdb0, 0xcdc4, + 0xcdcc, 0xcdd0, 0xcde8, 0xcdec, 0xcdf0, 0xcdf8, 0xcdf9, 0xcdfb, + 0xcdfd, 0xce04, 0xce08, 0xce0c, 0xce14, 0xce19, 0xce20, 0xce21, + 0xce24, 0xce28, 0xce30, 0xce31, 0xce33, 0xce35, + /* 0x44 */ + 0xce58, 0xce59, 0xce5c, 0xce5f, 0xce60, 0xce61, 0xce68, 0xce69, + 0xce6b, 0xce6d, 0xce74, 0xce75, 0xce78, 0xce7c, 0xce84, 0xce85, + 0xce87, 0xce89, 0xce90, 0xce91, 0xce94, 0xce98, 0xcea0, 0xcea1, + 0xcea3, 0xcea4, 0xcea5, 0xceac, 0xcead, 0xcec1, 0xcee4, 0xcee5, + 0xcee8, 0xceeb, 0xceec, 0xcef4, 0xcef5, 0xcef7, 0xcef8, 0xcef9, + 0xcf00, 0xcf01, 0xcf04, 0xcf08, 0xcf10, 0xcf11, 0xcf13, 0xcf15, + 0xcf1c, 0xcf20, 0xcf24, 0xcf2c, 0xcf2d, 0xcf2f, 0xcf30, 0xcf31, + 0xcf38, 0xcf54, 0xcf55, 0xcf58, 0xcf5c, 0xcf64, 0xcf65, 0xcf67, + 0xcf69, 0xcf70, 0xcf71, 0xcf74, 0xcf78, 0xcf80, 0xcf85, 0xcf8c, + 0xcfa1, 0xcfa8, 0xcfb0, 0xcfc4, 0xcfe0, 0xcfe1, 0xcfe4, 0xcfe8, + 0xcff0, 0xcff1, 0xcff3, 0xcff5, 0xcffc, 0xd000, 0xd004, 0xd011, + 0xd018, 0xd02d, 0xd034, 0xd035, 0xd038, 0xd03c, + /* 0x45 */ + 0xd044, 0xd045, 0xd047, 0xd049, 0xd050, 0xd054, 0xd058, 0xd060, + 0xd06c, 0xd06d, 0xd070, 0xd074, 0xd07c, 0xd07d, 0xd081, 0xd0a4, + 0xd0a5, 0xd0a8, 0xd0ac, 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b9, 0xd0c0, + 0xd0c1, 0xd0c4, 0xd0c8, 0xd0c9, 0xd0d0, 0xd0d1, 0xd0d3, 0xd0d4, + 0xd0d5, 0xd0dc, 0xd0dd, 0xd0e0, 0xd0e4, 0xd0ec, 0xd0ed, 0xd0ef, + 0xd0f0, 0xd0f1, 0xd0f8, 0xd10d, 0xd130, 0xd131, 0xd134, 0xd138, + 0xd13a, 0xd140, 0xd141, 0xd143, 0xd144, 0xd145, 0xd14c, 0xd14d, + 0xd150, 0xd154, 0xd15c, 0xd15d, 0xd15f, 0xd161, 0xd168, 0xd16c, + 0xd17c, 0xd184, 0xd188, 0xd1a0, 0xd1a1, 0xd1a4, 0xd1a8, 0xd1b0, + 0xd1b1, 0xd1b3, 0xd1b5, 0xd1ba, 0xd1bc, 0xd1c0, 0xd1d8, 0xd1f4, + 0xd1f8, 0xd207, 0xd209, 0xd210, 0xd22c, 0xd22d, 0xd230, 0xd234, + 0xd23c, 0xd23d, 0xd23f, 0xd241, 0xd248, 0xd25c, + /* 0x46 */ + 0xd264, 0xd280, 0xd281, 0xd284, 0xd288, 0xd290, 0xd291, 0xd295, + 0xd29c, 0xd2a0, 0xd2a4, 0xd2ac, 0xd2b1, 0xd2b8, 0xd2b9, 0xd2bc, + 0xd2bf, 0xd2c0, 0xd2c2, 0xd2c8, 0xd2c9, 0xd2cb, 0xd2d4, 0xd2d8, + 0xd2dc, 0xd2e4, 0xd2e5, 0xd2f0, 0xd2f1, 0xd2f4, 0xd2f8, 0xd300, + 0xd301, 0xd303, 0xd305, 0xd30c, 0xd30d, 0xd30e, 0xd310, 0xd314, + 0xd316, 0xd31c, 0xd31d, 0xd31f, 0xd320, 0xd321, 0xd325, 0xd328, + 0xd329, 0xd32c, 0xd330, 0xd338, 0xd339, 0xd33b, 0xd33c, 0xd33d, + 0xd344, 0xd345, 0xd37c, 0xd37d, 0xd380, 0xd384, 0xd38c, 0xd38d, + 0xd38f, 0xd390, 0xd391, 0xd398, 0xd399, 0xd39c, 0xd3a0, 0xd3a8, + 0xd3a9, 0xd3ab, 0xd3ad, 0xd3b4, 0xd3b8, 0xd3bc, 0xd3c4, 0xd3c5, + 0xd3c8, 0xd3c9, 0xd3d0, 0xd3d8, 0xd3e1, 0xd3e3, 0xd3ec, 0xd3ed, + 0xd3f0, 0xd3f4, 0xd3fc, 0xd3fd, 0xd3ff, 0xd401, + /* 0x47 */ + 0xd408, 0xd41d, 0xd440, 0xd444, 0xd45c, 0xd460, 0xd464, 0xd46d, + 0xd46f, 0xd478, 0xd479, 0xd47c, 0xd47f, 0xd480, 0xd482, 0xd488, + 0xd489, 0xd48b, 0xd48d, 0xd494, 0xd4a9, 0xd4cc, 0xd4d0, 0xd4d4, + 0xd4dc, 0xd4df, 0xd4e8, 0xd4ec, 0xd4f0, 0xd4f8, 0xd4fb, 0xd4fd, + 0xd504, 0xd508, 0xd50c, 0xd514, 0xd515, 0xd517, 0xd53c, 0xd53d, + 0xd540, 0xd544, 0xd54c, 0xd54d, 0xd54f, 0xd551, 0xd558, 0xd559, + 0xd55c, 0xd560, 0xd565, 0xd568, 0xd569, 0xd56b, 0xd56d, 0xd574, + 0xd575, 0xd578, 0xd57c, 0xd584, 0xd585, 0xd587, 0xd588, 0xd589, + 0xd590, 0xd5a5, 0xd5c8, 0xd5c9, 0xd5cc, 0xd5d0, 0xd5d2, 0xd5d8, + 0xd5d9, 0xd5db, 0xd5dd, 0xd5e4, 0xd5e5, 0xd5e8, 0xd5ec, 0xd5f4, + 0xd5f5, 0xd5f7, 0xd5f9, 0xd600, 0xd601, 0xd604, 0xd608, 0xd610, + 0xd611, 0xd613, 0xd614, 0xd615, 0xd61c, 0xd620, + /* 0x48 */ + 0xd624, 0xd62d, 0xd638, 0xd639, 0xd63c, 0xd640, 0xd645, 0xd648, + 0xd649, 0xd64b, 0xd64d, 0xd651, 0xd654, 0xd655, 0xd658, 0xd65c, + 0xd667, 0xd669, 0xd670, 0xd671, 0xd674, 0xd683, 0xd685, 0xd68c, + 0xd68d, 0xd690, 0xd694, 0xd69d, 0xd69f, 0xd6a1, 0xd6a8, 0xd6ac, + 0xd6b0, 0xd6b9, 0xd6bb, 0xd6c4, 0xd6c5, 0xd6c8, 0xd6cc, 0xd6d1, + 0xd6d4, 0xd6d7, 0xd6d9, 0xd6e0, 0xd6e4, 0xd6e8, 0xd6f0, 0xd6f5, + 0xd6fc, 0xd6fd, 0xd700, 0xd704, 0xd711, 0xd718, 0xd719, 0xd71c, + 0xd720, 0xd728, 0xd729, 0xd72b, 0xd72d, 0xd734, 0xd735, 0xd738, + 0xd73c, 0xd744, 0xd747, 0xd749, 0xd750, 0xd751, 0xd754, 0xd756, + 0xd757, 0xd758, 0xd759, 0xd760, 0xd761, 0xd763, 0xd765, 0xd769, + 0xd76c, 0xd770, 0xd774, 0xd77c, 0xd77d, 0xd781, 0xd788, 0xd789, + 0xd78c, 0xd790, 0xd798, 0xd799, 0xd79b, 0xd79d, +}; +static const unsigned short ksc5601_2uni_page4a[4888] = { + /* 0x4a */ + 0x4f3d, 0x4f73, 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475, 0x54e5, + 0x5609, 0x5ac1, 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef, 0x6b4c, + 0x73c2, 0x75c2, 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888, 0x8a36, + 0x8cc8, 0x8dcf, 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374, 0x5404, + 0x606a, 0x6164, 0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2, 0x95a3, + 0x4f83, 0x520a, 0x58be, 0x5978, 0x59e6, 0x5e72, 0x5e79, 0x61c7, + 0x63c0, 0x6746, 0x67ec, 0x687f, 0x6f97, 0x764e, 0x770b, 0x78f5, + 0x7a08, 0x7aff, 0x7c21, 0x809d, 0x826e, 0x8271, 0x8aeb, 0x9593, + 0x4e6b, 0x559d, 0x66f7, 0x6e34, 0x78a3, 0x7aed, 0x845b, 0x8910, + 0x874e, 0x97a8, 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x611f, 0x61be, + 0x6221, 0x6562, 0x67d1, 0x6a44, 0x6e1b, 0x7518, 0x75b3, 0x76e3, + 0x77b0, 0x7d3a, 0x90af, 0x9451, 0x9452, 0x9f95, + /* 0x4b */ + 0x5323, 0x5cac, 0x7532, 0x80db, 0x9240, 0x9598, 0x525b, 0x5808, + 0x59dc, 0x5ca1, 0x5d17, 0x5eb7, 0x5f3a, 0x5f4a, 0x6177, 0x6c5f, + 0x757a, 0x7586, 0x7ce0, 0x7d73, 0x7db1, 0x7f8c, 0x8154, 0x8221, + 0x8591, 0x8941, 0x8b1b, 0x92fc, 0x964d, 0x9c47, 0x4ecb, 0x4ef7, + 0x500b, 0x51f1, 0x584f, 0x6137, 0x613e, 0x6168, 0x6539, 0x69ea, + 0x6f11, 0x75a5, 0x7686, 0x76d6, 0x7b87, 0x82a5, 0x84cb, 0xf900, + 0x93a7, 0x958b, 0x5580, 0x5ba2, 0x5751, 0xf901, 0x7cb3, 0x7fb9, + 0x91b5, 0x5028, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x636e, 0x64da, + 0x64e7, 0x6e20, 0x70ac, 0x795b, 0x8ddd, 0x8e1e, 0xf902, 0x907d, + 0x9245, 0x92f8, 0x4e7e, 0x4ef6, 0x5065, 0x5dfe, 0x5efa, 0x6106, + 0x6957, 0x8171, 0x8654, 0x8e47, 0x9375, 0x9a2b, 0x4e5e, 0x5091, + 0x6770, 0x6840, 0x5109, 0x528d, 0x5292, 0x6aa2, + /* 0x4c */ + 0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2, 0x5048, 0x61a9, + 0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188, 0x89a1, 0x9694, + 0x5805, 0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d, 0x80a9, 0x898b, + 0x8b74, 0x9063, 0x9d51, 0x6289, 0x6c7a, 0x6f54, 0x7d50, 0x7f3a, + 0x8a23, 0x517c, 0x614a, 0x7b9d, 0x8b19, 0x9257, 0x938c, 0x4eac, + 0x4fd3, 0x501e, 0x50be, 0x5106, 0x52c1, 0x52cd, 0x537f, 0x5770, + 0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac, 0x64ce, 0x656c, 0x666f, + 0x66bb, 0x66f4, 0x6897, 0x6d87, 0x7085, 0x70f1, 0x749f, 0x74a5, + 0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6, 0x7d45, 0x7d93, + 0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15, 0x9015, 0x93e1, + 0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2, 0x5553, 0x583a, 0x5951, + 0x5b63, 0x5c46, 0x60b8, 0x6212, 0x6842, 0x68b0, + /* 0x4d */ + 0x68e8, 0x6eaa, 0x754c, 0x7678, 0x78ce, 0x7a3d, 0x7cfb, 0x7e6b, + 0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e, 0x9dc4, 0x53e4, 0x53e9, + 0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b, 0x5eab, 0x62f7, + 0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd, 0x75fc, + 0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f, 0x82e6, + 0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0xf903, 0x8f9c, + 0x932e, 0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b, 0x66f2, + 0x688f, 0x7a40, 0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11, 0x6606, + 0x68b1, 0x68cd, 0x6efe, 0x7428, 0x889e, 0x9be4, 0x6c68, 0xf904, + 0x9aa8, 0x4f9b, 0x516c, 0x5171, 0x529f, 0x5b54, 0x5de5, 0x6050, + 0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9, 0x7a7a, 0x86a3, 0x8ca2, + 0x978f, 0x4e32, 0x5be1, 0x6208, 0x679c, 0x74dc, + /* 0x4e */ + 0x79d1, 0x83d3, 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b, 0x9846, + 0x5ed3, 0x69e8, 0x85ff, 0x90ed, 0xf905, 0x51a0, 0x5b98, 0x5bec, + 0x6163, 0x68fa, 0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1, 0x7f50, + 0x83c5, 0x89c0, 0x8cab, 0x95dc, 0x9928, 0x522e, 0x605d, 0x62ec, + 0x9002, 0x4f8a, 0x5149, 0x5321, 0x58d9, 0x5ee3, 0x66e0, 0x6d38, + 0x709a, 0x72c2, 0x73d6, 0x7b50, 0x80f1, 0x945b, 0x5366, 0x639b, + 0x7f6b, 0x4e56, 0x5080, 0x584a, 0x58de, 0x602a, 0x6127, 0x62d0, + 0x69d0, 0x9b41, 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4, 0x50d1, + 0x54ac, 0x55ac, 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e, 0x6821, + 0x6a4b, 0x72e1, 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x81a0, 0x854e, + 0x86df, 0x8f03, 0x8f4e, 0x90ca, 0x9903, 0x9a55, 0x9bab, 0x4e18, + 0x4e45, 0x4e5d, 0x4ec7, 0x4ff1, 0x5177, 0x52fe, + /* 0x4f */ + 0x5340, 0x53e3, 0x53e5, 0x548e, 0x5614, 0x5775, 0x57a2, 0x5bc7, + 0x5d87, 0x5ed0, 0x61fc, 0x62d8, 0x6551, 0x67b8, 0x67e9, 0x69cb, + 0x6b50, 0x6bc6, 0x6bec, 0x6c42, 0x6e9d, 0x7078, 0x72d7, 0x7396, + 0x7403, 0x77bf, 0x77e9, 0x7a76, 0x7d7f, 0x8009, 0x81fc, 0x8205, + 0x820a, 0x82df, 0x8862, 0x8b33, 0x8cfc, 0x8ec0, 0x9011, 0x90b1, + 0x9264, 0x92b6, 0x99d2, 0x9a45, 0x9ce9, 0x9dd7, 0x9f9c, 0x570b, + 0x5c40, 0x83ca, 0x97a0, 0x97ab, 0x9eb4, 0x541b, 0x7a98, 0x7fa4, + 0x88d9, 0x8ecd, 0x90e1, 0x5800, 0x5c48, 0x6398, 0x7a9f, 0x5bae, + 0x5f13, 0x7a79, 0x7aae, 0x828e, 0x8eac, 0x5026, 0x5238, 0x52f8, + 0x5377, 0x5708, 0x62f3, 0x6372, 0x6b0a, 0x6dc3, 0x7737, 0x53a5, + 0x7357, 0x8568, 0x8e76, 0x95d5, 0x673a, 0x6ac3, 0x6f70, 0x8a6d, + 0x8ecc, 0x994b, 0xf906, 0x6677, 0x6b78, 0x8cb4, + /* 0x50 */ + 0x9b3c, 0xf907, 0x53eb, 0x572d, 0x594e, 0x63c6, 0x69fb, 0x73ea, + 0x7845, 0x7aba, 0x7ac5, 0x7cfe, 0x8475, 0x898f, 0x8d73, 0x9035, + 0x95a8, 0x52fb, 0x5747, 0x7547, 0x7b60, 0x83cc, 0x921e, 0xf908, + 0x6a58, 0x514b, 0x524b, 0x5287, 0x621f, 0x68d8, 0x6975, 0x9699, + 0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4, 0x6839, 0x69ff, 0x747e, + 0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1, 0x9949, 0xf909, + 0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434, 0x7981, 0x79bd, + 0x82a9, 0x887e, 0x887f, 0x895f, 0xf90a, 0x9326, 0x4f0b, 0x53ca, + 0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98, 0x5162, 0x77dc, + 0x80af, 0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc, 0x5668, 0x573b, + 0x57fa, 0x57fc, 0x5914, 0x5947, 0x5993, 0x5bc4, 0x5c90, 0x5d0e, + 0x5df1, 0x5e7e, 0x5fcc, 0x6280, 0x65d7, 0x65e3, + /* 0x51 */ + 0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f, 0x6b3a, 0x6c23, + 0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482, 0x74a3, + 0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948, 0x797a, + 0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c, 0x8a18, + 0x8b4f, 0x8c48, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951, 0x9a0e, + 0x9a0f, 0x9a65, 0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee, 0x6854, + 0x91d1, 0x55ab, 0x513a, 0xf90b, 0xf90c, 0x5a1c, 0x61e6, 0xf90d, + 0x62cf, 0x62ff, 0xf90e, 0xf90f, 0xf910, 0xf911, 0xf912, 0xf913, + 0x90a3, 0xf914, 0xf915, 0xf916, 0xf917, 0xf918, 0x8afe, 0xf919, + 0xf91a, 0xf91b, 0xf91c, 0x6696, 0xf91d, 0x7156, 0xf91e, 0xf91f, + 0x96e3, 0xf920, 0x634f, 0x637a, 0x5357, 0xf921, 0x678f, 0x6960, + 0x6e73, 0xf922, 0x7537, 0xf923, 0xf924, 0xf925, + /* 0x52 */ + 0x7d0d, 0xf926, 0xf927, 0x8872, 0x56ca, 0x5a18, 0xf928, 0xf929, + 0xf92a, 0xf92b, 0xf92c, 0x4e43, 0xf92d, 0x5167, 0x5948, 0x67f0, + 0x8010, 0xf92e, 0x5973, 0x5e74, 0x649a, 0x79ca, 0x5ff5, 0x606c, + 0x62c8, 0x637b, 0x5be7, 0x5bd7, 0x52aa, 0xf92f, 0x5974, 0x5f29, + 0x6012, 0xf930, 0xf931, 0xf932, 0x7459, 0xf933, 0xf934, 0xf935, + 0xf936, 0xf937, 0xf938, 0x99d1, 0xf939, 0xf93a, 0xf93b, 0xf93c, + 0xf93d, 0xf93e, 0xf93f, 0xf940, 0xf941, 0xf942, 0xf943, 0x6fc3, + 0xf944, 0xf945, 0x81bf, 0x8fb2, 0x60f1, 0xf946, 0xf947, 0x8166, + 0xf948, 0xf949, 0x5c3f, 0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e, + 0xf94f, 0xf950, 0xf951, 0x5ae9, 0x8a25, 0x677b, 0x7d10, 0xf952, + 0xf953, 0xf954, 0xf955, 0xf956, 0xf957, 0x80fd, 0xf958, 0xf959, + 0x5c3c, 0x6ce5, 0x533f, 0x6eba, 0x591a, 0x8336, + /* 0x53 */ + 0x4e39, 0x4eb6, 0x4f46, 0x55ae, 0x5718, 0x58c7, 0x5f56, 0x65b7, + 0x65e6, 0x6a80, 0x6bb5, 0x6e4d, 0x77ed, 0x7aef, 0x7c1e, 0x7dde, + 0x86cb, 0x8892, 0x9132, 0x935b, 0x64bb, 0x6fbe, 0x737a, 0x75b8, + 0x9054, 0x5556, 0x574d, 0x61ba, 0x64d4, 0x66c7, 0x6de1, 0x6e5b, + 0x6f6d, 0x6fb9, 0x75f0, 0x8043, 0x81bd, 0x8541, 0x8983, 0x8ac7, + 0x8b5a, 0x931f, 0x6c93, 0x7553, 0x7b54, 0x8e0f, 0x905d, 0x5510, + 0x5802, 0x5858, 0x5e62, 0x6207, 0x649e, 0x68e0, 0x7576, 0x7cd6, + 0x87b3, 0x9ee8, 0x4ee3, 0x5788, 0x576e, 0x5927, 0x5c0d, 0x5cb1, + 0x5e36, 0x5f85, 0x6234, 0x64e1, 0x73b3, 0x81fa, 0x888b, 0x8cb8, + 0x968a, 0x9edb, 0x5b85, 0x5fb7, 0x60b3, 0x5012, 0x5200, 0x5230, + 0x5716, 0x5835, 0x5857, 0x5c0e, 0x5c60, 0x5cf6, 0x5d8b, 0x5ea6, + 0x5f92, 0x60bc, 0x6311, 0x6389, 0x6417, 0x6843, + /* 0x54 */ + 0x68f9, 0x6ac2, 0x6dd8, 0x6e21, 0x6ed4, 0x6fe4, 0x71fe, 0x76dc, + 0x7779, 0x79b1, 0x7a3b, 0x8404, 0x89a9, 0x8ced, 0x8df3, 0x8e48, + 0x9003, 0x9014, 0x9053, 0x90fd, 0x934d, 0x9676, 0x97dc, 0x6bd2, + 0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf, 0x7be4, 0x7e9b, + 0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be, 0x6c8c, 0x711e, + 0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd, 0x51ac, 0x51cd, + 0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df, 0x6d1e, 0x6f7c, + 0x75bc, 0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285, 0x515c, 0x6597, + 0x675c, 0x6793, 0x75d8, 0x7ac7, 0x8373, 0xf95a, 0x8c46, 0x9017, + 0x982d, 0x5c6f, 0x81c0, 0x829a, 0x9041, 0x906f, 0x920d, 0x5f97, + 0x5d9d, 0x6a59, 0x71c8, 0x767b, 0x7b49, 0x85e4, 0x8b04, 0x9127, + 0x9a30, 0x5587, 0x61f6, 0xf95b, 0x7669, 0x7f85, + /* 0x55 */ + 0x863f, 0x87ba, 0x88f8, 0x908f, 0xf95c, 0x6d1b, 0x70d9, 0x73de, + 0x7d61, 0x843d, 0xf95d, 0x916a, 0x99f1, 0xf95e, 0x4e82, 0x5375, + 0x6b04, 0x6b12, 0x703e, 0x721b, 0x862d, 0x9e1e, 0x524c, 0x8fa3, + 0x5d50, 0x64e5, 0x652c, 0x6b16, 0x6feb, 0x7c43, 0x7e9c, 0x85cd, + 0x8964, 0x89bd, 0x62c9, 0x81d8, 0x881f, 0x5eca, 0x6717, 0x6d6a, + 0x72fc, 0x7405, 0x746f, 0x8782, 0x90de, 0x4f86, 0x5d0d, 0x5fa0, + 0x840a, 0x51b7, 0x63a0, 0x7565, 0x4eae, 0x5006, 0x5169, 0x51c9, + 0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f, 0x8ad2, 0x8f1b, + 0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e, 0x623e, + 0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad, 0x9a62, + 0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d, 0x792b, + 0x8f62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6f23, + /* 0x56 */ + 0x7149, 0x7489, 0x7df4, 0x806f, 0x84ee, 0x8f26, 0x9023, 0x934a, + 0x51bd, 0x5217, 0x52a3, 0x6d0c, 0x70c8, 0x88c2, 0x5ec9, 0x6582, + 0x6bae, 0x6fc2, 0x7c3e, 0x7375, 0x4ee4, 0x4f36, 0x56f9, 0xf95f, + 0x5cba, 0x5dba, 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce, 0x8046, + 0x901e, 0x9234, 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b, 0x6fa7, + 0x79ae, 0x91b4, 0x96b7, 0x52de, 0xf960, 0x6488, 0x64c4, 0x6ad3, + 0x6f5e, 0x7018, 0x7210, 0x76e7, 0x8001, 0x8606, 0x865c, 0x8def, + 0x8f05, 0x9732, 0x9b6f, 0x9dfa, 0x9e75, 0x788c, 0x797f, 0x7da0, + 0x83c9, 0x9304, 0x9e7f, 0x9e93, 0x8ad6, 0x58df, 0x5f04, 0x6727, + 0x7027, 0x74cf, 0x7c60, 0x807e, 0x5121, 0x7028, 0x7262, 0x78ca, + 0x8cc2, 0x8cda, 0x8cf4, 0x96f7, 0x4e86, 0x50da, 0x5bee, 0x5ed6, + 0x6599, 0x71ce, 0x7642, 0x77ad, 0x804a, 0x84fc, + /* 0x57 */ + 0x907c, 0x9b27, 0x9f8d, 0x58d8, 0x5a41, 0x5c62, 0x6a13, 0x6dda, + 0x6f0f, 0x763b, 0x7d2f, 0x7e37, 0x851e, 0x8938, 0x93e4, 0x964b, + 0x5289, 0x65d2, 0x67f3, 0x69b4, 0x6d41, 0x6e9c, 0x700f, 0x7409, + 0x7460, 0x7559, 0x7624, 0x786b, 0x8b2c, 0x985e, 0x516d, 0x622e, + 0x9678, 0x4f96, 0x502b, 0x5d19, 0x6dea, 0x7db8, 0x8f2a, 0x5f8b, + 0x6144, 0x6817, 0xf961, 0x9686, 0x52d2, 0x808b, 0x51dc, 0x51cc, + 0x695e, 0x7a1c, 0x7dbe, 0x83f1, 0x9675, 0x4fda, 0x5229, 0x5398, + 0x540f, 0x550e, 0x5c65, 0x60a7, 0x674e, 0x68a8, 0x6d6c, 0x7281, + 0x72f8, 0x7406, 0x7483, 0xf962, 0x75e2, 0x7c6c, 0x7f79, 0x7fb8, + 0x8389, 0x88cf, 0x88e1, 0x91cc, 0x91d0, 0x96e2, 0x9bc9, 0x541d, + 0x6f7e, 0x71d0, 0x7498, 0x85fa, 0x8eaa, 0x96a3, 0x9c57, 0x9e9f, + 0x6797, 0x6dcb, 0x7433, 0x81e8, 0x9716, 0x782c, + /* 0x58 */ + 0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a, 0x75f2, 0x78bc, 0x78e8, + 0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20, 0x819c, 0x83ab, + 0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e, 0x6162, 0x633d, + 0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e, 0x842c, 0x8513, + 0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9, 0x672b, 0x6cab, + 0x8309, 0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8, 0x5fd9, 0x671b, + 0x7db2, 0x7f54, 0x8292, 0x832b, 0x83bd, 0x8f1e, 0x9099, 0x57cb, + 0x59b9, 0x5a92, 0x5bd0, 0x6627, 0x679a, 0x6885, 0x6bcf, 0x7164, + 0x7f75, 0x8cb7, 0x8ce3, 0x9081, 0x9b45, 0x8108, 0x8c8a, 0x964c, + 0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b, 0x76f2, 0x76df, 0x840c, + 0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9, 0x68c9, 0x6c94, 0x7704, + 0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5, 0x6ec5, + /* 0x59 */ + 0x8511, 0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927, 0x6e9f, + 0x76bf, 0x7791, 0x8317, 0x84c2, 0x879f, 0x9169, 0x9298, 0x9cf4, + 0x8882, 0x4fae, 0x5192, 0x52df, 0x59c6, 0x5e3d, 0x6155, 0x6478, + 0x6479, 0x66ae, 0x67d0, 0x6a21, 0x6bcd, 0x6bdb, 0x725f, 0x7261, + 0x7441, 0x7738, 0x77db, 0x8017, 0x82bc, 0x8305, 0x8b00, 0x8b28, + 0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766, 0x7a46, 0x9da9, + 0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893, 0x5999, + 0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7, 0x82d7, + 0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7, 0x64ab, + 0x65e0, 0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d, 0x7e46, + 0x821e, 0x8302, 0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61, 0x58a8, + 0x9ed8, 0x5011, 0x520e, 0x543b, 0x554f, 0x6587, + /* 0x5a */ + 0x6c76, 0x7d0a, 0x7d0b, 0x805e, 0x868a, 0x9580, 0x96ef, 0x52ff, + 0x6c95, 0x7269, 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c, 0x5fae, + 0x672a, 0x68b6, 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73, 0x7f8e, + 0x8587, 0x8b0e, 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6, 0x610d, + 0x61ab, 0x654f, 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f, 0x73c9, + 0x7de1, 0x9594, 0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a, 0x62cd, + 0x640f, 0x64b2, 0x6734, 0x6a38, 0x6cca, 0x73c0, 0x749e, 0x7b94, + 0x7c95, 0x7e1b, 0x818a, 0x8236, 0x8584, 0x8feb, 0x96f9, 0x99c1, + 0x4f34, 0x534a, 0x53cd, 0x53db, 0x62cc, 0x642c, 0x6500, 0x6591, + 0x69c3, 0x6cee, 0x6f58, 0x73ed, 0x7554, 0x7622, 0x76e4, 0x76fc, + 0x78d0, 0x78fb, 0x792c, 0x7d46, 0x822c, 0x87e0, 0x8fd4, 0x9812, + 0x98ef, 0x52c3, 0x62d4, 0x64a5, 0x6e24, 0x6f51, + /* 0x5b */ + 0x767c, 0x8dcb, 0x91b1, 0x9262, 0x9aee, 0x9b43, 0x5023, 0x508d, + 0x574a, 0x59a8, 0x5c28, 0x5e47, 0x5f77, 0x623f, 0x653e, 0x65b9, + 0x65c1, 0x6609, 0x678b, 0x699c, 0x6ec2, 0x78c5, 0x7d21, 0x80aa, + 0x8180, 0x822b, 0x82b3, 0x84a1, 0x868c, 0x8a2a, 0x8b17, 0x90a6, + 0x9632, 0x9f90, 0x500d, 0x4ff3, 0xf963, 0x57f9, 0x5f98, 0x62dc, + 0x6392, 0x676f, 0x6e43, 0x7119, 0x76c3, 0x80cc, 0x80da, 0x88f4, + 0x88f5, 0x8919, 0x8ce0, 0x8f29, 0x914d, 0x966a, 0x4f2f, 0x4f70, + 0x5e1b, 0x67cf, 0x6822, 0x767d, 0x767e, 0x9b44, 0x5e61, 0x6a0a, + 0x7169, 0x71d4, 0x756a, 0xf964, 0x7e41, 0x8543, 0x85e9, 0x98dc, + 0x4f10, 0x7b4f, 0x7f70, 0x95a5, 0x51e1, 0x5e06, 0x68b5, 0x6c3e, + 0x6c4e, 0x6cdb, 0x72af, 0x7bc4, 0x8303, 0x6cd5, 0x743a, 0x50fb, + 0x5288, 0x58c1, 0x64d8, 0x6a97, 0x74a7, 0x7656, + /* 0x5c */ + 0x78a7, 0x8617, 0x95e2, 0x9739, 0xf965, 0x535e, 0x5f01, 0x8b8a, + 0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49, 0x9f08, 0x4e19, + 0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a, 0x67c4, 0x68c5, + 0x70b3, 0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27, 0x9920, 0x9a08, + 0x4fdd, 0x5821, 0x5831, 0x5bf6, 0x666e, 0x6b65, 0x6d11, 0x6e7a, + 0x6f7d, 0x73e4, 0x752b, 0x83e9, 0x88dc, 0x8913, 0x8b5c, 0x8f14, + 0x4f0f, 0x50d5, 0x5310, 0x535c, 0x5b93, 0x5fa9, 0x670d, 0x798f, + 0x8179, 0x832f, 0x8514, 0x8907, 0x8986, 0x8f39, 0x8f3b, 0x99a5, + 0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01, 0x5cef, 0x5cf0, + 0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b, 0x84ec, 0x8702, + 0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8, 0x4fef, 0x5085, 0x5256, + 0x526f, 0x5426, 0x5490, 0x57e0, 0x592b, 0x5a66, + /* 0x5d */ + 0x5b5a, 0x5b75, 0x5bcc, 0x5e9c, 0xf966, 0x6276, 0x6577, 0x65a7, + 0x6d6e, 0x6ea5, 0x7236, 0x7b26, 0x7c3f, 0x7f36, 0x8150, 0x8151, + 0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03, 0x8ca0, 0x8ce6, 0x8cfb, + 0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644, 0x99d9, 0x9ce7, + 0x5317, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e, 0x5fff, + 0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89, 0x7cde, + 0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0xf967, 0x4f5b, 0x5f17, 0x5f7f, + 0x62c2, 0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c, 0x4e15, + 0x5099, 0x5315, 0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87, 0x60b2, + 0x618a, 0x6249, 0x6279, 0x6590, 0x6787, 0x69a7, 0x6bd4, 0x6bd6, + 0x6bd7, 0x6bd8, 0x6cb8, 0xf968, 0x7435, 0x75fa, 0x7812, 0x7891, + 0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1, 0x80a5, + /* 0x5e */ + 0x813e, 0x81c2, 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c, 0x8cbb, + 0x9119, 0x975e, 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c, 0x658c, + 0x6ab3, 0x6baf, 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad, 0x8ca7, + 0x8cd3, 0x983b, 0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d, 0x4e8b, + 0x4e9b, 0x4ed5, 0x4f3a, 0x4f3c, 0x4f7f, 0x4fdf, 0x50ff, 0x53f2, + 0x53f8, 0x5506, 0x55e3, 0x56db, 0x58eb, 0x5962, 0x5a11, 0x5beb, + 0x5bfa, 0x5c04, 0x5df3, 0x5e2b, 0x5f99, 0x601d, 0x6368, 0x659c, + 0x65af, 0x67f6, 0x67fb, 0x68ad, 0x6b7b, 0x6c99, 0x6cd7, 0x6e23, + 0x7009, 0x7345, 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1, 0x7be9, + 0x7d17, 0x7d72, 0x8086, 0x820d, 0x838e, 0x84d1, 0x86c7, 0x88df, + 0x8a50, 0x8a5e, 0x8b1d, 0x8cdc, 0x8d66, 0x8fad, 0x90aa, 0x98fc, + 0x99df, 0x9e9d, 0x524a, 0xf969, 0x6714, 0xf96a, + /* 0x5f */ + 0x5098, 0x522a, 0x5c71, 0x6563, 0x6c55, 0x73ca, 0x7523, 0x759d, + 0x7b97, 0x849c, 0x9178, 0x9730, 0x4e77, 0x6492, 0x6bba, 0x715e, + 0x85a9, 0x4e09, 0xf96b, 0x6749, 0x68ee, 0x6e17, 0x829f, 0x8518, + 0x886b, 0x63f7, 0x6f81, 0x9212, 0x98af, 0x4e0a, 0x50b7, 0x50cf, + 0x511f, 0x5546, 0x55aa, 0x5617, 0x5b40, 0x5c19, 0x5ce0, 0x5e38, + 0x5e8a, 0x5ea0, 0x5ec2, 0x60f3, 0x6851, 0x6a61, 0x6e58, 0x723d, + 0x7240, 0x72c0, 0x76f8, 0x7965, 0x7bb1, 0x7fd4, 0x88f3, 0x89f4, + 0x8a73, 0x8c61, 0x8cde, 0x971c, 0x585e, 0x74bd, 0x8cfd, 0x55c7, + 0xf96c, 0x7a61, 0x7d22, 0x8272, 0x7272, 0x751f, 0x7525, 0xf96d, + 0x7b19, 0x5885, 0x58fb, 0x5dbc, 0x5e8f, 0x5eb6, 0x5f90, 0x6055, + 0x6292, 0x637f, 0x654d, 0x6691, 0x66d9, 0x66f8, 0x6816, 0x68f2, + 0x7280, 0x745e, 0x7b6e, 0x7d6e, 0x7dd6, 0x7f72, + /* 0x60 */ + 0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d, 0x92e4, 0x9ecd, + 0x9f20, 0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614, 0x6673, 0x6790, + 0x6c50, 0x6dc5, 0x6f5f, 0x77f3, 0x78a9, 0x84c6, 0x91cb, 0x932b, + 0x4ed9, 0x50ca, 0x5148, 0x5584, 0x5b0b, 0x5ba3, 0x6247, 0x657e, + 0x65cb, 0x6e32, 0x717d, 0x7401, 0x7444, 0x7487, 0x74bf, 0x766c, + 0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a, 0x81b3, 0x8239, 0x861a, + 0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425, 0x994d, 0x9bae, + 0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b, 0x820c, 0x859b, + 0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261, 0x66b9, 0x6bb2, + 0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d, 0x6d89, 0x71ee, + 0xf96e, 0x57ce, 0x59d3, 0x5bac, 0x6027, 0x60fa, 0x6210, 0x661f, + 0x665f, 0x7329, 0x73f9, 0x76db, 0x7701, 0x7b6c, + /* 0x61 */ + 0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192, 0x4e16, 0x52e2, 0x6b72, + 0x6d17, 0x7a05, 0x7b39, 0x7d30, 0xf96f, 0x8cb0, 0x53ec, 0x562f, + 0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383, 0x6414, + 0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4, 0x71d2, + 0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b, 0x7d20, + 0x7d39, 0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061, 0x90b5, + 0x92b7, 0x97f6, 0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91, 0x7c9f, + 0x7e8c, 0x8b16, 0x8d16, 0x901f, 0x5b6b, 0x5dfd, 0x640d, 0x84c0, + 0x905c, 0x98e1, 0x7387, 0x5b8b, 0x609a, 0x677e, 0x6dde, 0x8a1f, + 0x8aa6, 0x9001, 0x980c, 0x5237, 0xf970, 0x7051, 0x788e, 0x9396, + 0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da, 0x5782, 0x58fd, + 0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101, + /* 0x62 */ + 0x620d, 0x624b, 0x6388, 0x641c, 0x6536, 0x6578, 0x6a39, 0x6b8a, + 0x6c34, 0x6d19, 0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407, 0x74b2, + 0x7626, 0x7761, 0x79c0, 0x7a57, 0x7aea, 0x7cb9, 0x7d8f, 0x7dac, + 0x7e61, 0x7f9e, 0x8129, 0x8331, 0x8490, 0x84da, 0x85ea, 0x8896, + 0x8ab0, 0x8b90, 0x8f38, 0x9042, 0x9083, 0x916c, 0x9296, 0x92b9, + 0x968b, 0x96a7, 0x96a8, 0x96d6, 0x9700, 0x9808, 0x9996, 0x9ad3, + 0x9b1a, 0x53d4, 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1, 0x6f5a, + 0x719f, 0x7421, 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87, 0x5faa, + 0x6042, 0x65ec, 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35, 0x6df3, + 0x73e3, 0x76fe, 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x821c, 0x8340, + 0x84f4, 0x8563, 0x8a62, 0x8ac4, 0x9187, 0x931e, 0x9806, 0x99b4, + 0x620c, 0x8853, 0x8ff0, 0x9265, 0x5d07, 0x5d27, + /* 0x63 */ + 0x5d69, 0x745f, 0x819d, 0x8768, 0x6fd5, 0x62fe, 0x7fd2, 0x8936, + 0x8972, 0x4e1e, 0x4e58, 0x50e7, 0x52dd, 0x5347, 0x627f, 0x6607, + 0x7e69, 0x8805, 0x965e, 0x4f8d, 0x5319, 0x5636, 0x59cb, 0x5aa4, + 0x5c38, 0x5c4e, 0x5c4d, 0x5e02, 0x5f11, 0x6043, 0x65bd, 0x662f, + 0x6642, 0x67be, 0x67f4, 0x731c, 0x77e2, 0x793a, 0x7fc5, 0x8494, + 0x84cd, 0x8996, 0x8a66, 0x8a69, 0x8ae1, 0x8c55, 0x8c7a, 0x57f4, + 0x5bd4, 0x5f0f, 0x606f, 0x62ed, 0x690d, 0x6b96, 0x6e5c, 0x7184, + 0x7bd2, 0x8755, 0x8b58, 0x8efe, 0x98df, 0x98fe, 0x4f38, 0x4f81, + 0x4fe1, 0x547b, 0x5a20, 0x5bb8, 0x613c, 0x65b0, 0x6668, 0x71fc, + 0x7533, 0x795e, 0x7d33, 0x814e, 0x81e3, 0x8398, 0x85aa, 0x85ce, + 0x8703, 0x8a0a, 0x8eab, 0x8f9b, 0xf971, 0x8fc5, 0x5931, 0x5ba4, + 0x5be6, 0x6089, 0x5be9, 0x5c0b, 0x5fc3, 0x6c81, + /* 0x64 */ + 0xf972, 0x6df1, 0x700b, 0x751a, 0x82af, 0x8af6, 0x4ec0, 0x5341, + 0xf973, 0x96d9, 0x6c0f, 0x4e9e, 0x4fc4, 0x5152, 0x555e, 0x5a25, + 0x5ce8, 0x6211, 0x7259, 0x82bd, 0x83aa, 0x86fe, 0x8859, 0x8a1d, + 0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d, 0x580a, 0x5cb3, 0x5dbd, + 0x5e44, 0x60e1, 0x6115, 0x63e1, 0x6a02, 0x6e25, 0x9102, 0x9354, + 0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309, 0x664f, 0x6848, + 0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1, 0x8b01, 0x8ecb, + 0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697, 0x764c, 0x83f4, + 0x95c7, 0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0, 0x592e, 0x600f, + 0x663b, 0x6b83, 0x79e7, 0x9d26, 0x5393, 0x54c0, 0x57c3, 0x5d16, + 0x611b, 0x66d6, 0x6daf, 0x788d, 0x827e, 0x9698, 0x9744, 0x5384, + 0x627c, 0x6396, 0x6db2, 0x7e0a, 0x814b, 0x984d, + /* 0x65 */ + 0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6, 0x591c, + 0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0xf974, 0x91ce, 0x5f31, + 0xf975, 0xf976, 0x7d04, 0x82e5, 0x846f, 0x84bb, 0x85e5, 0x8e8d, + 0xf977, 0x4f6f, 0xf978, 0xf979, 0x58e4, 0x5b43, 0x6059, 0x63da, + 0x6518, 0x656d, 0x6698, 0xf97a, 0x694a, 0x6a23, 0x6d0b, 0x7001, + 0x716c, 0x75d2, 0x760d, 0x79b3, 0x7a70, 0xf97b, 0x7f8a, 0xf97c, + 0x8944, 0xf97d, 0x8b93, 0x91c0, 0x967d, 0xf97e, 0x990a, 0x5704, + 0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6, 0x8a9e, 0x99ad, 0x9b5a, + 0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6, 0x5043, 0x5830, + 0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa, 0x513c, + 0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186, 0x4e88, + 0x4f59, 0xf97f, 0xf980, 0xf981, 0x5982, 0xf982, + /* 0x66 */ + 0xf983, 0x6b5f, 0x6c5d, 0xf984, 0x74b5, 0x7916, 0xf985, 0x8207, + 0x8245, 0x8339, 0x8f3f, 0x8f5d, 0xf986, 0x9918, 0xf987, 0xf988, + 0xf989, 0x4ea6, 0xf98a, 0x57df, 0x5f79, 0x6613, 0xf98b, 0xf98c, + 0x75ab, 0x7e79, 0x8b6f, 0xf98d, 0x9006, 0x9a5b, 0x56a5, 0x5827, + 0x59f8, 0x5a1f, 0x5bb4, 0xf98e, 0x5ef6, 0xf98f, 0xf990, 0x6350, + 0x633b, 0xf991, 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93, 0x6df5, + 0x6f14, 0xf992, 0x70df, 0x7136, 0x7159, 0xf993, 0x71c3, 0x71d5, + 0xf994, 0x784f, 0x786f, 0xf995, 0x7b75, 0x7de3, 0xf996, 0x7e2f, + 0xf997, 0x884d, 0x8edf, 0xf998, 0xf999, 0xf99a, 0x925b, 0xf99b, + 0x9cf6, 0xf99c, 0xf99d, 0xf99e, 0x6085, 0x6d85, 0xf99f, 0x71b1, + 0xf9a0, 0xf9a1, 0x95b1, 0x53ad, 0xf9a2, 0xf9a3, 0xf9a4, 0x67d3, + 0xf9a5, 0x708e, 0x7130, 0x7430, 0x8276, 0x82d2, + /* 0x67 */ + 0xf9a6, 0x95bb, 0x9ae5, 0x9e7d, 0x66c4, 0xf9a7, 0x71c1, 0x8449, + 0xf9a8, 0xf9a9, 0x584b, 0xf9aa, 0xf9ab, 0x5db8, 0x5f71, 0xf9ac, + 0x6620, 0x668e, 0x6979, 0x69ae, 0x6c38, 0x6cf3, 0x6e36, 0x6f41, + 0x6fda, 0x701b, 0x702f, 0x7150, 0x71df, 0x7370, 0xf9ad, 0x745b, + 0xf9ae, 0x74d4, 0x76c8, 0x7a4e, 0x7e93, 0xf9af, 0xf9b0, 0x82f1, + 0x8a60, 0x8fce, 0xf9b1, 0x9348, 0xf9b2, 0x9719, 0xf9b3, 0xf9b4, + 0x4e42, 0x502a, 0xf9b5, 0x5208, 0x53e1, 0x66f3, 0x6c6d, 0x6fca, + 0x730a, 0x777f, 0x7a62, 0x82ae, 0x85dd, 0x8602, 0xf9b6, 0x88d4, + 0x8a63, 0x8b7d, 0x8c6b, 0xf9b7, 0x92b3, 0xf9b8, 0x9713, 0x9810, + 0x4e94, 0x4f0d, 0x4fc9, 0x50b2, 0x5348, 0x543e, 0x5433, 0x55da, + 0x5862, 0x58ba, 0x5967, 0x5a1b, 0x5be4, 0x609f, 0xf9b9, 0x61ca, + 0x6556, 0x65ff, 0x6664, 0x68a7, 0x6c5a, 0x6fb3, + /* 0x68 */ + 0x70cf, 0x71ac, 0x7352, 0x7b7d, 0x8708, 0x8aa4, 0x9c32, 0x9f07, + 0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a, 0x6eab, 0x7465, 0x761f, + 0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1, 0x74ee, 0x7515, + 0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26, 0x74e6, 0x7aa9, + 0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49, 0x5b8c, 0x5b9b, + 0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c, 0x7897, 0x7de9, + 0x7feb, 0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e, 0x9811, 0x66f0, + 0x5f80, 0x65fa, 0x6789, 0x6c6a, 0x738b, 0x502d, 0x5a03, 0x6b6a, + 0x77ee, 0x5916, 0x5d6c, 0x5dcd, 0x7325, 0x754f, 0xf9ba, 0xf9bb, + 0x50e5, 0x51f9, 0x582f, 0x592d, 0x5996, 0x59da, 0x5be5, 0xf9bc, + 0xf9bd, 0x5da2, 0x62d7, 0x6416, 0x6493, 0x64fe, 0xf9be, 0x66dc, + 0xf9bf, 0x6a48, 0xf9c0, 0x71ff, 0x7464, 0xf9c1, + /* 0x69 */ + 0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0xf9c2, 0x87ef, + 0x8981, 0x8b20, 0x9059, 0xf9c3, 0x9080, 0x9952, 0x617e, 0x6b32, + 0x6d74, 0x7e1f, 0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197, 0x52c7, + 0x57c7, 0x5889, 0x5bb9, 0x5eb8, 0x6142, 0x6995, 0x6d8c, 0x6e67, + 0x6eb6, 0x7194, 0x7462, 0x7528, 0x752c, 0x8073, 0x8338, 0x84c9, + 0x8e0a, 0x9394, 0x93de, 0xf9c4, 0x4e8e, 0x4f51, 0x5076, 0x512a, + 0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24, 0x611a, 0x6182, + 0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991, 0x79b9, + 0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047, 0x90f5, + 0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed, 0x6631, + 0x682f, 0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0xf9c5, 0x6a52, + 0x6b9e, 0x6f90, 0x7189, 0x8018, 0x82b8, 0x8553, + /* 0x6a */ + 0x904b, 0x9695, 0x96f2, 0x97fb, 0x851a, 0x9b31, 0x4e90, 0x718a, + 0x96c4, 0x5143, 0x539f, 0x54e1, 0x5713, 0x5712, 0x57a3, 0x5a9b, + 0x5ac4, 0x5bc3, 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39, 0x6e72, + 0x6e90, 0x7230, 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45, 0x9060, + 0xf9c6, 0x9662, 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e, 0x4f4d, + 0x5049, 0x50de, 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09, 0x6170, + 0x6690, 0x6e2d, 0x7232, 0x744b, 0x7def, 0x80c3, 0x840e, 0x8466, + 0x853f, 0x875f, 0x885b, 0x8918, 0x8b02, 0x9055, 0x97cb, 0x9b4f, + 0x4e73, 0x4f91, 0x5112, 0x516a, 0xf9c7, 0x552f, 0x55a9, 0x5b7a, + 0x5ba5, 0x5e7c, 0x5e7d, 0x5ebe, 0x60a0, 0x60df, 0x6108, 0x6109, + 0x63c4, 0x6538, 0x6709, 0xf9c8, 0x67d4, 0x67da, 0xf9c9, 0x6961, + 0x6962, 0x6cb9, 0x6d27, 0xf9ca, 0x6e38, 0xf9cb, + /* 0x6b */ + 0x6fe1, 0x7336, 0x7337, 0xf9cc, 0x745c, 0x7531, 0xf9cd, 0x7652, + 0xf9ce, 0xf9cf, 0x7dad, 0x81fe, 0x8438, 0x88d5, 0x8a98, 0x8adb, + 0x8aed, 0x8e30, 0x8e42, 0x904a, 0x903e, 0x907a, 0x9149, 0x91c9, + 0x936e, 0xf9d0, 0xf9d1, 0x5809, 0xf9d2, 0x6bd3, 0x8089, 0x80b2, + 0xf9d3, 0xf9d4, 0x5141, 0x596b, 0x5c39, 0xf9d5, 0xf9d6, 0x6f64, + 0x73a7, 0x80e4, 0x8d07, 0xf9d7, 0x9217, 0x958f, 0xf9d8, 0xf9d9, + 0xf9da, 0xf9db, 0x807f, 0x620e, 0x701c, 0x7d68, 0x878d, 0xf9dc, + 0x57a0, 0x6069, 0x6147, 0x6bb7, 0x8abe, 0x9280, 0x96b1, 0x4e59, + 0x541f, 0x6deb, 0x852d, 0x9670, 0x97f3, 0x98ee, 0x63d6, 0x6ce3, + 0x9091, 0x51dd, 0x61c9, 0x81ba, 0x9df9, 0x4f9d, 0x501a, 0x5100, + 0x5b9c, 0x610f, 0x61ff, 0x64ec, 0x6905, 0x6bc5, 0x7591, 0x77e3, + 0x7fa9, 0x8264, 0x858f, 0x87fb, 0x8863, 0x8abc, + /* 0x6c */ + 0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0xf9dd, 0xf9de, 0x5937, + 0x59e8, 0xf9df, 0x5df2, 0x5f1b, 0x5f5b, 0x6021, 0xf9e0, 0xf9e1, + 0xf9e2, 0xf9e3, 0x723e, 0x73e5, 0xf9e4, 0x7570, 0x75cd, 0xf9e5, + 0x79fb, 0xf9e6, 0x800c, 0x8033, 0x8084, 0x82e1, 0x8351, 0xf9e7, + 0xf9e8, 0x8cbd, 0x8cb3, 0x9087, 0xf9e9, 0xf9ea, 0x98f4, 0x990c, + 0xf9eb, 0xf9ec, 0x7037, 0x76ca, 0x7fca, 0x7fcc, 0x7ffc, 0x8b1a, + 0x4eba, 0x4ec1, 0x5203, 0x5370, 0xf9ed, 0x54bd, 0x56e0, 0x59fb, + 0x5bc5, 0x5f15, 0x5fcd, 0x6e6e, 0xf9ee, 0xf9ef, 0x7d6a, 0x8335, + 0xf9f0, 0x8693, 0x8a8d, 0xf9f1, 0x976d, 0x9777, 0xf9f2, 0xf9f3, + 0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2, 0x9038, 0x93b0, + 0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9, 0x6041, 0xf9f4, 0xf9f5, + 0x7a14, 0xf9f6, 0x834f, 0x8cc3, 0x5165, 0x5344, + /* 0x6d */ + 0xf9f7, 0xf9f8, 0xf9f9, 0x4ecd, 0x5269, 0x5b55, 0x82bf, 0x4ed4, + 0x523a, 0x54a8, 0x59c9, 0x59ff, 0x5b50, 0x5b57, 0x5b5c, 0x6063, + 0x6148, 0x6ecb, 0x7099, 0x716e, 0x7386, 0x74f7, 0x75b5, 0x78c1, + 0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517, 0x85c9, 0x8aee, 0x8cc7, + 0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628, 0x707c, 0x70b8, + 0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71, 0x68e7, + 0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4, 0x7c2a, + 0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb, 0x58ef, + 0x596c, 0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2, 0x6756, + 0x6a1f, 0x6aa3, 0x6b0c, 0x6f3f, 0x7246, 0xf9fa, 0x7350, 0x748b, + 0x7ae0, 0x7ca7, 0x8178, 0x81df, 0x81e7, 0x838a, 0x846c, 0x8523, + 0x8594, 0x85cf, 0x88dd, 0x8d13, 0x91ac, 0x9577, + /* 0x6e */ + 0x969c, 0x518d, 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750, 0x683d, + 0x6893, 0x6e3d, 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1, 0x8f09, + 0x9f4b, 0x9f4e, 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47, 0x4f4e, + 0x5132, 0x5480, 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e, 0x6a17, + 0x6cae, 0x6e1a, 0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35, 0x82e7, + 0x83f9, 0x8457, 0x85f7, 0x8a5b, 0x8caf, 0x8e87, 0x9019, 0x90b8, + 0x96ce, 0x9f5f, 0x52e3, 0x540a, 0x5ae1, 0x5bc2, 0x6458, 0x6575, + 0x6ef4, 0x72c4, 0xf9fb, 0x7684, 0x7a4d, 0x7b1b, 0x7c4d, 0x7e3e, + 0x7fdf, 0x837b, 0x8b2b, 0x8cca, 0x8d64, 0x8de1, 0x8e5f, 0x8fea, + 0x8ff9, 0x9069, 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x5168, 0x5178, + 0x524d, 0x526a, 0x5861, 0x587c, 0x5960, 0x5c08, 0x5c55, 0x5edb, + 0x609b, 0x6230, 0x6813, 0x6bbf, 0x6c08, 0x6fb1, + /* 0x6f */ + 0x714e, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7b4c, 0x7b8b, + 0x7bad, 0x7bc6, 0x7e8f, 0x8a6e, 0x8f3e, 0x8f49, 0x923f, 0x9293, + 0x9322, 0x942b, 0x96fb, 0x985a, 0x986b, 0x991e, 0x5207, 0x622a, + 0x6298, 0x6d59, 0x7664, 0x7aca, 0x7bc0, 0x7d76, 0x5360, 0x5cbe, + 0x5e97, 0x6f38, 0x70b9, 0x7c98, 0x9711, 0x9b8e, 0x9ede, 0x63a5, + 0x647a, 0x8776, 0x4e01, 0x4e95, 0x4ead, 0x505c, 0x5075, 0x5448, + 0x59c3, 0x5b9a, 0x5e40, 0x5ead, 0x5ef7, 0x5f81, 0x60c5, 0x633a, + 0x653f, 0x6574, 0x65cc, 0x6676, 0x6678, 0x67fe, 0x6968, 0x6a89, + 0x6b63, 0x6c40, 0x6dc0, 0x6de8, 0x6e1f, 0x6e5e, 0x701e, 0x70a1, + 0x738e, 0x73fd, 0x753a, 0x775b, 0x7887, 0x798e, 0x7a0b, 0x7a7d, + 0x7cbe, 0x7d8e, 0x8247, 0x8a02, 0x8aea, 0x8c9e, 0x912d, 0x914a, + 0x91d8, 0x9266, 0x92cc, 0x9320, 0x9706, 0x9756, + /* 0x70 */ + 0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c, 0x5824, 0x5e1d, + 0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d, 0x7b2c, 0x81cd, + 0x85ba, 0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664, 0x969b, 0x973d, + 0x984c, 0x9f4a, 0x4fce, 0x5146, 0x51cb, 0x52a9, 0x5632, 0x5f14, + 0x5f6b, 0x63aa, 0x64cd, 0x65e9, 0x6641, 0x66fa, 0x66f9, 0x671d, + 0x689d, 0x68d7, 0x69fd, 0x6f15, 0x6f6e, 0x7167, 0x71e5, 0x722a, + 0x74aa, 0x773a, 0x7956, 0x795a, 0x79df, 0x7a20, 0x7a95, 0x7c97, + 0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4, 0x8a54, 0x8abf, + 0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b, 0x96d5, 0x9ce5, + 0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a, 0x5352, 0x62d9, + 0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0, 0x616b, 0x68d5, 0x6dd9, + 0x742e, 0x7a2e, 0x7d42, 0x7d9c, 0x7e31, 0x816b, + /* 0x71 */ + 0x8e2a, 0x8e35, 0x937e, 0x9418, 0x4f50, 0x5750, 0x5de6, 0x5ea7, + 0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f, 0x505a, 0x59dd, 0x80c4, + 0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde, 0x5eda, 0x665d, + 0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d, 0x70b7, + 0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f, 0x86db, + 0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e, 0x9152, + 0x9444, 0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6, 0x57c8, + 0x5bef, 0x5cfb, 0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec, 0x710c, + 0x756f, 0x7ae3, 0x8822, 0x9021, 0x9075, 0x96cb, 0x99ff, 0x8301, + 0x4e2d, 0x4ef2, 0x8846, 0x91cd, 0x537d, 0x6adb, 0x696b, 0x6c41, + 0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef, 0x70dd, 0x7511, 0x75c7, + 0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea, + /* 0x72 */ + 0x54ab, 0x5730, 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f, 0x652f, + 0x65e8, 0x667a, 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a, 0x6f2c, + 0x77e5, 0x7825, 0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102, 0x81f3, + 0x829d, 0x82b7, 0x8718, 0x8a8c, 0xf9fc, 0x8d04, 0x8dbe, 0x9072, + 0x76f4, 0x7a19, 0x7a37, 0x7e54, 0x8077, 0x5507, 0x55d4, 0x5875, + 0x632f, 0x6422, 0x6649, 0x664b, 0x686d, 0x699b, 0x6b84, 0x6d25, + 0x6eb1, 0x73cd, 0x7468, 0x74a1, 0x755b, 0x75b9, 0x76e1, 0x771e, + 0x778b, 0x79e6, 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897, 0x8a3a, + 0x8cd1, 0x8eeb, 0x8fb0, 0x9032, 0x93ad, 0x9663, 0x9673, 0x9707, + 0x4f84, 0x53f1, 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x74c6, 0x75be, + 0x79e9, 0x7a92, 0x81a3, 0x86ed, 0x8cea, 0x8dcc, 0x8fed, 0x659f, + 0x6715, 0xf9fd, 0x57f7, 0x6f57, 0x7ddd, 0x8f2f, + /* 0x73 */ + 0x93f6, 0x96c6, 0x5fb5, 0x61f2, 0x6f84, 0x4e14, 0x4f98, 0x501f, + 0x53c9, 0x55df, 0x5d6f, 0x5dee, 0x6b21, 0x6b64, 0x78cb, 0x7b9a, + 0xf9fe, 0x8e49, 0x8eca, 0x906e, 0x6349, 0x643e, 0x7740, 0x7a84, + 0x932f, 0x947f, 0x9f6a, 0x64b0, 0x6faf, 0x71e6, 0x74a8, 0x74da, + 0x7ac4, 0x7c12, 0x7e82, 0x7cb2, 0x7e98, 0x8b9a, 0x8d0a, 0x947d, + 0x9910, 0x994c, 0x5239, 0x5bdf, 0x64e6, 0x672d, 0x7d2e, 0x50ed, + 0x53c3, 0x5879, 0x6158, 0x6159, 0x61fa, 0x65ac, 0x7ad9, 0x8b92, + 0x8b96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5a3c, 0x5ee0, 0x5f70, + 0x6134, 0x655e, 0x660c, 0x6636, 0x66a2, 0x69cd, 0x6ec4, 0x6f32, + 0x7316, 0x7621, 0x7a93, 0x8139, 0x8259, 0x83d6, 0x84bc, 0x50b5, + 0x57f0, 0x5bc0, 0x5be8, 0x5f69, 0x63a1, 0x7826, 0x7db5, 0x83dc, + 0x8521, 0x91c7, 0x91f5, 0x518a, 0x67f5, 0x7b56, + /* 0x74 */ + 0x8cac, 0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c, 0xf9ff, 0x5254, + 0x5c3a, 0x617d, 0x621a, 0x62d3, 0x64f2, 0x65a5, 0x6ecc, 0x7620, + 0x810a, 0x8e60, 0x965f, 0x96bb, 0x4edf, 0x5343, 0x5598, 0x5929, + 0x5ddd, 0x64c5, 0x6cc9, 0x6dfa, 0x7394, 0x7a7f, 0x821b, 0x85a6, + 0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1, 0x9621, 0x97c6, 0x51f8, + 0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4, 0x8f1f, 0x8f4d, + 0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b, 0x77bb, 0x7c3d, + 0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16, 0x6377, 0x7252, + 0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3, 0x6674, 0x6df8, + 0x807d, 0x83c1, 0x8acb, 0x9751, 0x9bd6, 0xfa00, 0x5243, 0x66ff, + 0x6d95, 0x6eef, 0x7de0, 0x8ae6, 0x902e, 0x905e, 0x9ad4, 0x521d, + 0x527f, 0x54e8, 0x6194, 0x6284, 0x62db, 0x68a2, + /* 0x75 */ + 0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d, 0x7901, 0x790e, + 0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549, 0x8c82, + 0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed, 0x77d7, + 0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2, 0x585a, + 0x5bf5, 0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525, 0x9283, + 0x64ae, 0x50ac, 0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8, 0x690e, + 0x6978, 0x6a1e, 0x6e6b, 0x76ba, 0x79cb, 0x82bb, 0x8429, 0x8acf, + 0x8da8, 0x8ffd, 0x9112, 0x914b, 0x919c, 0x9310, 0x9318, 0x939a, + 0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c, 0x795d, 0x7afa, 0x7b51, + 0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8, 0x9010, 0x6625, + 0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0, 0x6c96, + 0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403, + /* 0x76 */ + 0x8d05, 0x53d6, 0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a, 0x7fe0, + 0x805a, 0x8106, 0x81ed, 0x8da3, 0x9189, 0x9a5f, 0x9df2, 0x5074, + 0x4ec4, 0x53a0, 0x60fb, 0x6e2c, 0x5c64, 0x4f88, 0x5024, 0x55e4, + 0x5cd9, 0x5e5f, 0x6065, 0x6894, 0x6cbb, 0x6dc4, 0x71be, 0x75d4, + 0x75f4, 0x7661, 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb, 0x7f6e, 0x81f4, + 0x86a9, 0x8f1c, 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5, 0x98ed, + 0x89aa, 0x4e03, 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795, 0x6c88, + 0x6d78, 0x741b, 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4, 0x7a31, + 0x5feb, 0x4ed6, 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0, 0x6253, + 0x62d6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99b1, 0x99dd, 0x502c, + 0x5353, 0x5544, 0x577c, 0xfa01, 0x6258, 0xfa02, 0x64e2, 0x666b, + 0x67dd, 0x6fc1, 0x6fef, 0x7422, 0x7438, 0x8a17, + /* 0x77 */ + 0x9438, 0x5451, 0x5606, 0x5766, 0x5f48, 0x619a, 0x6b4e, 0x7058, + 0x70ad, 0x7dbb, 0x8a95, 0x596a, 0x812b, 0x63a2, 0x7708, 0x803d, + 0x8caa, 0x5854, 0x642d, 0x69bb, 0x5b95, 0x5e11, 0x6e6f, 0xfa03, + 0x8569, 0x514c, 0x53f0, 0x592a, 0x6020, 0x614b, 0x6b86, 0x6c70, + 0x6cf0, 0x7b1e, 0x80ce, 0x82d4, 0x8dc6, 0x90b0, 0x98b1, 0xfa04, + 0x64c7, 0x6fa4, 0x6491, 0x6504, 0x514e, 0x5410, 0x571f, 0x8a0e, + 0x615f, 0x6876, 0xfa05, 0x75db, 0x7b52, 0x7d71, 0x901a, 0x5806, + 0x69cc, 0x817f, 0x892a, 0x9000, 0x9839, 0x5078, 0x5957, 0x59ac, + 0x6295, 0x900f, 0x9b2a, 0x615d, 0x7279, 0x95d6, 0x5761, 0x5a46, + 0x5df4, 0x628a, 0x64ad, 0x64fa, 0x6777, 0x6ce2, 0x6d3e, 0x722c, + 0x7436, 0x7834, 0x7f77, 0x82ad, 0x8ddb, 0x9817, 0x5224, 0x5742, + 0x677f, 0x7248, 0x74e3, 0x8ca9, 0x8fa6, 0x9211, + /* 0x78 */ + 0x962a, 0x516b, 0x53ed, 0x634c, 0x4f69, 0x5504, 0x6096, 0x6557, + 0x6c9b, 0x6d7f, 0x724c, 0x72fd, 0x7a17, 0x8987, 0x8c9d, 0x5f6d, + 0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x4fbf, 0x504f, 0x6241, 0x7247, + 0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19, 0x8cb6, 0x576a, + 0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16, 0x5e63, 0x5ee2, + 0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b, 0x4f48, 0x5305, + 0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03, 0x6016, 0x629b, + 0x62b1, 0x6355, 0xfa06, 0x6ce1, 0x6d66, 0x75b1, 0x7832, 0x80de, + 0x812f, 0x82de, 0x8461, 0x84b2, 0x888d, 0x8912, 0x900b, 0x92ea, + 0x98fd, 0x9b91, 0x5e45, 0x66b4, 0x66dd, 0x7011, 0x7206, 0xfa07, + 0x4ff5, 0x527d, 0x5f6a, 0x6153, 0x6753, 0x6a19, 0x6f02, 0x74e2, + 0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4, 0x9a43, + /* 0x79 */ + 0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae, 0x5f7c, + 0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339, 0x5f3c, + 0x5fc5, 0x6ccc, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe, 0x999d, + 0x4e4f, 0x903c, 0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8, 0x6630, + 0x6cb3, 0x7455, 0x8377, 0x8766, 0x8cc0, 0x9050, 0x971e, 0x9c15, + 0x58d1, 0x5b78, 0x8650, 0x8b14, 0x9db4, 0x5bd2, 0x6068, 0x608d, + 0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a, 0x7f55, 0x7ff0, 0x9591, + 0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd, 0x542b, 0x54b8, + 0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c, 0x9677, + 0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4, 0x965c, + 0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297, 0x676d, + 0x6841, 0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a, + /* 0x7a */ + 0xfa08, 0xfa09, 0x9805, 0x4ea5, 0x5055, 0x54b3, 0x5793, 0x595a, + 0x5b69, 0x5bb3, 0x61c8, 0x6977, 0x6d77, 0x7023, 0x87f9, 0x89e3, + 0x8a72, 0x8ae7, 0x9082, 0x99ed, 0x9ab8, 0x52be, 0x6838, 0x5016, + 0x5e78, 0x674f, 0x8347, 0x884c, 0x4eab, 0x5411, 0x56ae, 0x73e6, + 0x9115, 0x97ff, 0x9909, 0x9957, 0x9999, 0x5653, 0x589f, 0x865b, + 0x8a31, 0x61b2, 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa, 0x9a57, + 0x5955, 0x7200, 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26, 0x61f8, + 0x665b, 0x6ceb, 0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729, 0x774d, + 0x7d43, 0x7d62, 0x7e23, 0x8237, 0x8852, 0xfa0a, 0x8ce2, 0x9249, + 0x986f, 0x5b51, 0x7a74, 0x8840, 0x9801, 0x5acc, 0x4fe0, 0x5354, + 0x593e, 0x5cfd, 0x633e, 0x6d79, 0x72f9, 0x8105, 0x8107, 0x83a2, + 0x92cf, 0x9830, 0x4ea8, 0x5144, 0x5211, 0x578b, + /* 0x7b */ + 0x5f62, 0x6cc2, 0x6ece, 0x7005, 0x7050, 0x70af, 0x7192, 0x73e9, + 0x7469, 0x834a, 0x87a2, 0x8861, 0x9008, 0x90a2, 0x93a3, 0x99a8, + 0x516e, 0x5f57, 0x60e0, 0x6167, 0x66b3, 0x8559, 0x8e4a, 0x91af, + 0x978b, 0x4e4e, 0x4e92, 0x547c, 0x58d5, 0x58fa, 0x597d, 0x5cb5, + 0x5f27, 0x6236, 0x6248, 0x660a, 0x6667, 0x6beb, 0x6d69, 0x6dcf, + 0x6e56, 0x6ef8, 0x6f94, 0x6fe0, 0x6fe9, 0x705d, 0x72d0, 0x7425, + 0x745a, 0x74e0, 0x7693, 0x795c, 0x7cca, 0x7e1e, 0x80e1, 0x82a6, + 0x846b, 0x84bf, 0x864e, 0x865f, 0x8774, 0x8b77, 0x8c6a, 0x93ac, + 0x9800, 0x9865, 0x60d1, 0x6216, 0x9177, 0x5a5a, 0x660f, 0x6df7, + 0x6e3e, 0x743f, 0x9b42, 0x5ffd, 0x60da, 0x7b0f, 0x54c4, 0x5f18, + 0x6c5e, 0x6cd3, 0x6d2a, 0x70d8, 0x7d05, 0x8679, 0x8a0c, 0x9d3b, + 0x5316, 0x548c, 0x5b05, 0x6a3a, 0x706b, 0x7575, + /* 0x7c */ + 0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71, 0x8b41, 0x8ca8, 0x9774, + 0xfa0b, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b, 0x4e38, 0x559a, + 0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61, 0x6665, 0x6853, + 0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69, 0x9c25, 0x6d3b, + 0x6ed1, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c, 0x5fa8, 0x604d, + 0x60f6, 0x6130, 0x614c, 0x6643, 0x6644, 0x69a5, 0x6cc1, 0x6e5f, + 0x6ec9, 0x6f62, 0x714c, 0x749c, 0x7687, 0x7bc1, 0x7c27, 0x8352, + 0x8757, 0x9051, 0x968d, 0x9ec3, 0x532f, 0x56de, 0x5efb, 0x5f8a, + 0x6062, 0x6094, 0x61f7, 0x6666, 0x6703, 0x6a9c, 0x6dee, 0x6fae, + 0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334, 0x86d4, 0x8aa8, 0x8cc4, + 0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404, 0x54ee, 0x5686, 0x5b5d, + 0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d, 0x6dc6, + /* 0x7d */ + 0x723b, 0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a, 0x540e, + 0x543c, 0x5589, 0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166, 0x73dd, + 0x9005, 0x52db, 0x52f3, 0x5864, 0x58ce, 0x7104, 0x718f, 0x71fb, + 0x85b0, 0x8a13, 0x6688, 0x85a8, 0x55a7, 0x6684, 0x714a, 0x8431, + 0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd, 0x63ee, 0x6689, 0x7147, + 0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb, 0x7566, 0x8667, + 0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36, 0x80f8, + 0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79, 0x7d07, + 0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d, 0x7fd5, + 0x8208, 0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec, 0x5b09, + 0x5e0c, 0x6199, 0x6198, 0x6231, 0x665e, 0x66e6, 0x7199, 0x71b9, + 0x71ba, 0x72a7, 0x79a7, 0x7a00, 0x7fb2, 0x8a70, +}; + +static int +ksc5601_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x21 && c1 <= 0x2c) || (c1 >= 0x30 && c1 <= 0x48) || (c1 >= 0x4a && c1 <= 0x7d)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if (c2 >= 0x21 && c2 < 0x7f) { + unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); + unsigned short wc = 0xfffd; + if (i < 1410) { + if (i < 1115) + wc = ksc5601_2uni_page21[i]; + } else if (i < 3854) { + if (i < 3760) + wc = ksc5601_2uni_page30[i-1410]; + } else { + if (i < 8742) + wc = ksc5601_2uni_page4a[i-3854]; + } + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short ksc5601_2charset[8227] = { + 0x222e, 0x2234, 0x2157, 0x2127, 0x2823, 0x2129, 0x2267, 0x2146, + 0x213e, 0x2977, 0x2978, 0x2225, 0x2252, 0x2124, 0x222c, 0x2976, + 0x282c, 0x2879, 0x2876, 0x287a, 0x222f, 0x2821, 0x2822, 0x213f, + 0x282a, 0x282d, 0x292c, 0x2921, 0x2923, 0x2140, 0x292a, 0x292d, + 0x2922, 0x2824, 0x2924, 0x2925, 0x2826, 0x2926, 0x2927, 0x2828, + 0x2928, 0x2829, 0x2929, 0x2930, 0x282f, 0x292f, 0x282b, 0x292b, + 0x282e, 0x292e, 0x2227, 0x2230, 0x2228, 0x222b, 0x222a, 0x222d, + 0x2229, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, + 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e, 0x254f, + 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, + 0x2558, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, + 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, 0x256f, + 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2577, + 0x2578, 0x2c27, 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, + 0x2c28, 0x2c29, 0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c2f, + 0x2c30, 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, + 0x2c38, 0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f, + 0x2c40, 0x2c41, 0x2c51, 0x2c52, 0x2c53, 0x2c54, 0x2c55, 0x2c56, + 0x2c58, 0x2c59, 0x2c5a, 0x2c5b, 0x2c5c, 0x2c5d, 0x2c5e, 0x2c5f, + 0x2c60, 0x2c61, 0x2c62, 0x2c63, 0x2c64, 0x2c65, 0x2c66, 0x2c67, + 0x2c68, 0x2c69, 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c6f, + 0x2c70, 0x2c71, 0x2c57, 0x212a, 0x212e, 0x212f, 0x2130, 0x2131, + 0x2253, 0x2254, 0x2125, 0x2126, 0x2236, 0x2147, 0x2148, 0x2158, + 0x2979, 0x297a, 0x297b, 0x297c, 0x297d, 0x297e, 0x2266, 0x2149, + 0x2235, 0x2724, 0x2260, 0x2265, 0x2262, 0x2759, 0x214a, 0x2877, + 0x2878, 0x287b, 0x287c, 0x287d, 0x287e, 0x2530, 0x2531, 0x2532, + 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x2521, + 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, + 0x252a, 0x2167, 0x2168, 0x2166, 0x2169, 0x216a, 0x2255, 0x2258, + 0x2256, 0x2259, 0x2257, 0x2221, 0x2222, 0x2223, 0x2153, 0x2224, + 0x2154, 0x2174, 0x2175, 0x2233, 0x2232, 0x216e, 0x2170, 0x2144, + 0x2150, 0x212b, 0x217c, 0x217d, 0x217b, 0x217a, 0x2172, 0x2173, + 0x2231, 0x2145, 0x2171, 0x212d, 0x216f, 0x2156, 0x2141, 0x2155, + 0x2142, 0x2143, 0x216c, 0x216d, 0x2178, 0x2179, 0x2176, 0x2177, + 0x2241, 0x2151, 0x2152, 0x2867, 0x2868, 0x2869, 0x286a, 0x286b, + 0x286c, 0x286d, 0x286e, 0x286f, 0x2870, 0x2871, 0x2872, 0x2873, + 0x2874, 0x2875, 0x2967, 0x2968, 0x2969, 0x296a, 0x296b, 0x296c, + 0x296d, 0x296e, 0x296f, 0x2970, 0x2971, 0x2972, 0x2973, 0x2974, + 0x2975, 0x294d, 0x294e, 0x294f, 0x2950, 0x2951, 0x2952, 0x2953, + 0x2954, 0x2955, 0x2956, 0x2957, 0x2958, 0x2959, 0x295a, 0x295b, + 0x295c, 0x295d, 0x295e, 0x295f, 0x2960, 0x2961, 0x2962, 0x2963, + 0x2964, 0x2965, 0x2966, 0x284d, 0x284e, 0x284f, 0x2850, 0x2851, + 0x2852, 0x2853, 0x2854, 0x2855, 0x2856, 0x2857, 0x2858, 0x2859, + 0x285a, 0x285b, 0x285c, 0x285d, 0x285e, 0x285f, 0x2860, 0x2861, + 0x2862, 0x2863, 0x2864, 0x2865, 0x2866, 0x2621, 0x262c, 0x2622, + 0x262d, 0x2623, 0x2648, 0x2647, 0x262e, 0x2624, 0x2642, 0x2641, + 0x262f, 0x2626, 0x2646, 0x2645, 0x2631, 0x2625, 0x2644, 0x2643, + 0x2630, 0x2627, 0x263c, 0x2649, 0x264a, 0x2637, 0x264b, 0x264c, + 0x2632, 0x2629, 0x263e, 0x264d, 0x264e, 0x2639, 0x264f, 0x2650, + 0x2634, 0x2628, 0x2651, 0x2652, 0x2638, 0x263d, 0x2653, 0x2654, + 0x2633, 0x262a, 0x2655, 0x2656, 0x263a, 0x263f, 0x2657, 0x2658, + 0x2635, 0x262b, 0x2659, 0x265a, 0x263b, 0x265b, 0x265c, 0x2640, + 0x265d, 0x265e, 0x265f, 0x2660, 0x2661, 0x2662, 0x2663, 0x2664, + 0x2636, 0x2246, 0x2161, 0x2160, 0x2243, 0x2247, 0x2248, 0x224b, + 0x224a, 0x2249, 0x224c, 0x2163, 0x2162, 0x223a, 0x2239, 0x2165, + 0x2164, 0x2238, 0x2237, 0x215f, 0x215e, 0x2242, 0x215b, 0x215d, + 0x215c, 0x2244, 0x2245, 0x215a, 0x2159, 0x224f, 0x224e, 0x2250, + 0x2251, 0x214f, 0x214e, 0x223c, 0x223d, 0x2240, 0x223b, 0x223e, + 0x223f, 0x224d, 0x225b, 0x225c, 0x225d, 0x225a, 0x2121, 0x2122, + 0x2123, 0x2128, 0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, + 0x213a, 0x213b, 0x213c, 0x213d, 0x216b, 0x2132, 0x2133, 0x2a21, + 0x2a22, 0x2a23, 0x2a24, 0x2a25, 0x2a26, 0x2a27, 0x2a28, 0x2a29, + 0x2a2a, 0x2a2b, 0x2a2c, 0x2a2d, 0x2a2e, 0x2a2f, 0x2a30, 0x2a31, + 0x2a32, 0x2a33, 0x2a34, 0x2a35, 0x2a36, 0x2a37, 0x2a38, 0x2a39, + 0x2a3a, 0x2a3b, 0x2a3c, 0x2a3d, 0x2a3e, 0x2a3f, 0x2a40, 0x2a41, + 0x2a42, 0x2a43, 0x2a44, 0x2a45, 0x2a46, 0x2a47, 0x2a48, 0x2a49, + 0x2a4a, 0x2a4b, 0x2a4c, 0x2a4d, 0x2a4e, 0x2a4f, 0x2a50, 0x2a51, + 0x2a52, 0x2a53, 0x2a54, 0x2a55, 0x2a56, 0x2a57, 0x2a58, 0x2a59, + 0x2a5a, 0x2a5b, 0x2a5c, 0x2a5d, 0x2a5e, 0x2a5f, 0x2a60, 0x2a61, + 0x2a62, 0x2a63, 0x2a64, 0x2a65, 0x2a66, 0x2a67, 0x2a68, 0x2a69, + 0x2a6a, 0x2a6b, 0x2a6c, 0x2a6d, 0x2a6e, 0x2a6f, 0x2a70, 0x2a71, + 0x2a72, 0x2a73, 0x2b21, 0x2b22, 0x2b23, 0x2b24, 0x2b25, 0x2b26, + 0x2b27, 0x2b28, 0x2b29, 0x2b2a, 0x2b2b, 0x2b2c, 0x2b2d, 0x2b2e, + 0x2b2f, 0x2b30, 0x2b31, 0x2b32, 0x2b33, 0x2b34, 0x2b35, 0x2b36, + 0x2b37, 0x2b38, 0x2b39, 0x2b3a, 0x2b3b, 0x2b3c, 0x2b3d, 0x2b3e, + 0x2b3f, 0x2b40, 0x2b41, 0x2b42, 0x2b43, 0x2b44, 0x2b45, 0x2b46, + 0x2b47, 0x2b48, 0x2b49, 0x2b4a, 0x2b4b, 0x2b4c, 0x2b4d, 0x2b4e, + 0x2b4f, 0x2b50, 0x2b51, 0x2b52, 0x2b53, 0x2b54, 0x2b55, 0x2b56, + 0x2b57, 0x2b58, 0x2b59, 0x2b5a, 0x2b5b, 0x2b5c, 0x2b5d, 0x2b5e, + 0x2b5f, 0x2b60, 0x2b61, 0x2b62, 0x2b63, 0x2b64, 0x2b65, 0x2b66, + 0x2b67, 0x2b68, 0x2b69, 0x2b6a, 0x2b6b, 0x2b6c, 0x2b6d, 0x2b6e, + 0x2b6f, 0x2b70, 0x2b71, 0x2b72, 0x2b73, 0x2b74, 0x2b75, 0x2b76, + 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, + 0x2429, 0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, + 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, + 0x2439, 0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, + 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, + 0x2449, 0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, + 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, + 0x2459, 0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, + 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, + 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, + 0x2471, 0x2472, 0x2473, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, + 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x2931, 0x2932, + 0x2933, 0x2934, 0x2935, 0x2936, 0x2937, 0x2938, 0x2939, 0x293a, + 0x293b, 0x293c, 0x293d, 0x293e, 0x293f, 0x2940, 0x2941, 0x2942, + 0x2943, 0x2944, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, 0x294a, + 0x294b, 0x294c, 0x225f, 0x2831, 0x2832, 0x2833, 0x2834, 0x2835, + 0x2836, 0x2837, 0x2838, 0x2839, 0x283a, 0x283b, 0x283c, 0x283d, + 0x283e, 0x283f, 0x2840, 0x2841, 0x2842, 0x2843, 0x2844, 0x2845, + 0x2846, 0x2847, 0x2848, 0x2849, 0x284a, 0x284b, 0x284c, 0x2268, + 0x225e, 0x2749, 0x274a, 0x274b, 0x274c, 0x274d, 0x273a, 0x273b, + 0x275c, 0x275d, 0x275e, 0x2736, 0x2737, 0x2738, 0x2754, 0x2755, + 0x2756, 0x2757, 0x2758, 0x2721, 0x2722, 0x2723, 0x2725, 0x272b, + 0x272c, 0x272d, 0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, + 0x2734, 0x2727, 0x2728, 0x2729, 0x272a, 0x273d, 0x273e, 0x2765, + 0x2766, 0x2767, 0x2768, 0x2761, 0x2762, 0x2763, 0x273f, 0x2740, + 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, + 0x274e, 0x274f, 0x2750, 0x2751, 0x2752, 0x2753, 0x275a, 0x275b, + 0x2263, 0x276c, 0x2726, 0x2760, 0x276f, 0x2261, 0x273c, 0x276d, + 0x2735, 0x2739, 0x276a, 0x276b, 0x275f, 0x2264, 0x2764, 0x276e, + 0x2769, 0x6c69, 0x6f4b, 0x7652, 0x5832, 0x6d5b, 0x5f32, 0x5f3e, + 0x793b, 0x5c74, 0x7564, 0x7326, 0x5d60, 0x6126, 0x4e78, 0x5c30, + 0x632a, 0x7169, 0x4d7a, 0x7c2f, 0x5321, 0x712b, 0x6751, 0x522c, + 0x4e79, 0x717d, 0x5e3f, 0x7b3a, 0x7939, 0x4e52, 0x632b, 0x6b60, + 0x4e7a, 0x4b77, 0x6525, 0x4a61, 0x544c, 0x6a61, 0x5c63, 0x5f2d, + 0x4b6b, 0x552f, 0x5675, 0x6578, 0x5e40, 0x6c23, 0x694d, 0x6a27, + 0x6976, 0x7b3b, 0x6769, 0x6f4c, 0x5066, 0x5e41, 0x642c, 0x584c, + 0x7971, 0x4e5f, 0x7a24, 0x6632, 0x7a7b, 0x7a3d, 0x4c48, 0x6f4d, + 0x5555, 0x5322, 0x6c51, 0x6427, 0x6c52, 0x7631, 0x4e7b, 0x5051, + 0x4b3f, 0x6d24, 0x6d28, 0x5e42, 0x7662, 0x6d5c, 0x5c75, 0x6039, + 0x544e, 0x7435, 0x535b, 0x5635, 0x6c24, 0x6466, 0x716a, 0x4b6c, + 0x4b40, 0x6c72, 0x506a, 0x7972, 0x6c25, 0x505f, 0x676a, 0x506b, + 0x5c51, 0x5b69, 0x7d4c, 0x5b57, 0x5a61, 0x5636, 0x635f, 0x5e43, + 0x5e44, 0x4a21, 0x6e6c, 0x5323, 0x6e37, 0x784f, 0x6a48, 0x6e38, + 0x712c, 0x7125, 0x694e, 0x793c, 0x6579, 0x6c6a, 0x5d56, 0x6d42, + 0x7825, 0x653a, 0x5b58, 0x4a22, 0x514d, 0x6e6d, 0x6c6b, 0x5e45, + 0x6360, 0x4a49, 0x7269, 0x554e, 0x7636, 0x4e42, 0x5647, 0x6334, + 0x712d, 0x6a62, 0x5742, 0x7327, 0x4d6a, 0x6b6e, 0x5932, 0x7d25, + 0x7655, 0x5562, 0x7835, 0x4c75, 0x7535, 0x642d, 0x676b, 0x7155, + 0x703b, 0x6935, 0x4c49, 0x7a55, 0x6154, 0x5756, 0x5c41, 0x5e46, + 0x7a6f, 0x6361, 0x6173, 0x5c76, 0x4e7c, 0x5b44, 0x7871, 0x5c64, + 0x656f, 0x5c31, 0x5556, 0x735a, 0x4b41, 0x5b43, 0x597a, 0x536e, + 0x7a38, 0x7d26, 0x6b6f, 0x7426, 0x4c4a, 0x7328, 0x735b, 0x5b27, + 0x7637, 0x4f66, 0x7072, 0x4b5a, 0x6752, 0x5743, 0x7670, 0x685e, + 0x6526, 0x6567, 0x4a23, 0x4c27, 0x6a49, 0x7836, 0x7a25, 0x712e, + 0x6f4e, 0x4b6d, 0x7630, 0x6f4f, 0x694f, 0x775e, 0x4e53, 0x5c77, + 0x5b28, 0x4b78, 0x5f21, 0x5d61, 0x754a, 0x6936, 0x676c, 0x6e6e, + 0x7370, 0x5f3f, 0x4c4b, 0x5041, 0x7452, 0x603a, 0x5f40, 0x4e60, + 0x5c52, 0x7d6a, 0x5676, 0x6a4a, 0x6869, 0x632c, 0x7350, 0x4a24, + 0x5b78, 0x5e47, 0x6b70, 0x7156, 0x6562, 0x4c4c, 0x4b7b, 0x6a63, + 0x5f41, 0x566d, 0x6950, 0x6e39, 0x5563, 0x5153, 0x6570, 0x6834, + 0x6b43, 0x6a2a, 0x7a7c, 0x7576, 0x703c, 0x7d54, 0x603b, 0x4e43, + 0x503a, 0x773a, 0x5873, 0x774d, 0x642e, 0x545f, 0x5067, 0x6c7d, + 0x522e, 0x6e6f, 0x5557, 0x6a64, 0x7822, 0x4d6b, 0x573f, 0x7b31, + 0x4d6c, 0x5c32, 0x506c, 0x4e7d, 0x6e70, 0x4c42, 0x506d, 0x6577, + 0x737c, 0x6e22, 0x5933, 0x5874, 0x6937, 0x4e2e, 0x5922, 0x5871, + 0x544f, 0x6527, 0x5552, 0x5629, 0x7422, 0x7157, 0x5558, 0x703d, + 0x5750, 0x5450, 0x574f, 0x6b6a, 0x7d6b, 0x5b6d, 0x7c45, 0x4b42, + 0x7d55, 0x7448, 0x686a, 0x7573, 0x795e, 0x536f, 0x6c53, 0x5d42, + 0x6f37, 0x6754, 0x4a4a, 0x597b, 0x7a7d, 0x562a, 0x7478, 0x7777, + 0x5c2c, 0x5757, 0x5f22, 0x4e3e, 0x5370, 0x7024, 0x616c, 0x4f67, + 0x734b, 0x6d29, 0x4a3e, 0x746f, 0x764e, 0x5e7b, 0x503b, 0x5537, + 0x6e71, 0x7428, 0x5c78, 0x4b27, 0x5a4e, 0x6066, 0x6d25, 0x6e72, + 0x5c79, 0x795c, 0x735c, 0x7872, 0x7479, 0x7c71, 0x503c, 0x5b79, + 0x5731, 0x4b7c, 0x7025, 0x4b7d, 0x5574, 0x4d6d, 0x4a25, 0x562b, + 0x5042, 0x703e, 0x523d, 0x4c24, 0x7a36, 0x4c4d, 0x5a7a, 0x764f, + 0x6938, 0x5875, 0x4c4e, 0x574d, 0x5451, 0x696d, 0x4a6b, 0x5962, + 0x7d32, 0x632d, 0x564c, 0x5934, 0x6127, 0x6e53, 0x5043, 0x7d33, + 0x5564, 0x4f68, 0x6d43, 0x5032, 0x4e7e, 0x5a28, 0x7850, 0x7d56, + 0x7851, 0x7852, 0x5c53, 0x5d62, 0x7b79, 0x5d41, 0x6335, 0x6d5d, + 0x4e44, 0x4b21, 0x5d63, 0x7c5d, 0x792f, 0x527b, 0x4f21, 0x6428, + 0x7436, 0x6c7e, 0x632e, 0x676d, 0x7d41, 0x5a62, 0x5833, 0x5d64, + 0x706f, 0x7671, 0x7a70, 0x5175, 0x5a4f, 0x5c54, 0x5c26, 0x6f3f, + 0x4e4f, 0x6059, 0x5956, 0x6c54, 0x6a4b, 0x4a3f, 0x5530, 0x4f69, + 0x716d, 0x4c4f, 0x6478, 0x646d, 0x5758, 0x7d27, 0x6a2b, 0x7632, + 0x4f70, 0x793d, 0x6674, 0x4b5b, 0x7351, 0x6951, 0x7329, 0x5060, + 0x6952, 0x5a63, 0x6252, 0x7622, 0x6174, 0x5a64, 0x6755, 0x753f, + 0x4f22, 0x4d2f, 0x4f23, 0x4d30, 0x717e, 0x5023, 0x612f, 0x7823, + 0x4a26, 0x773b, 0x726a, 0x5e48, 0x6953, 0x5e49, 0x7d5e, 0x4a40, + 0x796a, 0x514e, 0x6e54, 0x5452, 0x5923, 0x7d28, 0x5759, 0x774e, + 0x7a3e, 0x4f56, 0x5770, 0x6b61, 0x7845, 0x5c7a, 0x5d43, 0x795f, + 0x676f, 0x7d65, 0x7623, 0x597c, 0x7d29, 0x676e, 0x5565, 0x6f50, + 0x4d31, 0x7722, 0x7132, 0x7131, 0x4d32, 0x5a2b, 0x4a27, 0x6362, + 0x7b3c, 0x5924, 0x6e3a, 0x7853, 0x7b7a, 0x4f24, 0x5c7b, 0x7663, + 0x6d2a, 0x7221, 0x4e61, 0x7a26, 0x7960, 0x6c56, 0x646e, 0x7921, + 0x7b6f, 0x796b, 0x6e23, 0x6a2c, 0x4a28, 0x747a, 0x4d56, 0x7c76, + 0x7449, 0x7854, 0x7826, 0x5e4a, 0x7246, 0x575a, 0x5350, 0x5845, + 0x6a66, 0x735d, 0x645a, 0x7664, 0x7672, 0x5f42, 0x597d, 0x4c76, + 0x533a, 0x642f, 0x7961, 0x7026, 0x4b53, 0x603c, 0x744a, 0x547a, + 0x7d2a, 0x7962, 0x7437, 0x7d42, 0x7c30, 0x7d6c, 0x4a62, 0x7d3d, + 0x6a67, 0x5f43, 0x5152, 0x4e62, 0x5324, 0x7d2b, 0x5f60, 0x7247, + 0x6770, 0x506e, 0x732a, 0x5e4b, 0x7638, 0x6175, 0x7133, 0x7723, + 0x4a29, 0x4f25, 0x5f44, 0x6130, 0x703f, 0x7624, 0x6336, 0x7a46, + 0x506f, 0x7d6d, 0x5d44, 0x7c77, 0x663f, 0x5e2d, 0x7a3f, 0x6571, + 0x6d44, 0x5225, 0x7d6e, 0x7536, 0x6176, 0x5e4c, 0x7c5e, 0x6c57, + 0x4d5d, 0x5637, 0x4d33, 0x7855, 0x6558, 0x4f6a, 0x4f50, 0x6a4c, + 0x6a2e, 0x6a2d, 0x5371, 0x5325, 0x774f, 0x6e24, 0x5024, 0x7222, + 0x5070, 0x7223, 0x7778, 0x5033, 0x5b29, 0x533b, 0x4a6c, 0x7126, + 0x4b55, 0x7767, 0x4d5e, 0x7724, 0x7840, 0x535d, 0x4c50, 0x4f26, + 0x7673, 0x6177, 0x535c, 0x7a7e, 0x7a27, 0x6b59, 0x4f27, 0x6a2f, + 0x646f, 0x6939, 0x7158, 0x5858, 0x6072, 0x6634, 0x5c7c, 0x7371, + 0x6350, 0x727b, 0x5b46, 0x5071, 0x5072, 0x4f5c, 0x5351, 0x4c31, + 0x7758, 0x4b28, 0x6b3c, 0x643e, 0x745c, 0x5c42, 0x7027, 0x6640, + 0x4a6d, 0x686b, 0x6568, 0x5c43, 0x6d5e, 0x5372, 0x4c77, 0x4e54, + 0x672b, 0x4b43, 0x6131, 0x7732, 0x5373, 0x5352, 0x7540, 0x5f5d, + 0x6e73, 0x6771, 0x7d34, 0x7248, 0x7352, 0x6e74, 0x6253, 0x4c51, + 0x5f6a, 0x693a, 0x5957, 0x754d, 0x7172, 0x7a47, 0x5978, 0x5442, + 0x7665, 0x5d45, 0x6772, 0x6d5f, 0x4a4b, 0x5b7a, 0x6835, 0x5326, + 0x7d35, 0x7949, 0x6462, 0x7b3d, 0x5724, 0x4e45, 0x4e55, 0x5666, + 0x653d, 0x5e4d, 0x6c73, 0x6d60, 0x6c6c, 0x7b3e, 0x5f6b, 0x6178, + 0x793e, 0x5073, 0x602a, 0x6862, 0x6254, 0x527d, 0x6528, 0x5953, + 0x535e, 0x7438, 0x773c, 0x5c7d, 0x686c, 0x6467, 0x6377, 0x6c28, + 0x7a71, 0x6572, 0x5074, 0x522f, 0x5c65, 0x5025, 0x7134, 0x7c31, + 0x4c78, 0x5d46, 0x7a51, 0x775f, 0x7a28, 0x6e75, 0x5e4e, 0x6773, + 0x772c, 0x6b44, 0x6d61, 0x602b, 0x5d47, 0x5233, 0x523f, 0x4a4c, + 0x7b3f, 0x657d, 0x5d65, 0x584d, 0x6c74, 0x5075, 0x686d, 0x5052, + 0x5958, 0x7666, 0x5b2a, 0x7760, 0x5859, 0x7423, 0x745d, 0x6f51, + 0x5935, 0x6d2b, 0x6337, 0x6e3b, 0x4d34, 0x6073, 0x6a4d, 0x6c75, + 0x686e, 0x4b29, 0x712f, 0x4a4d, 0x6c29, 0x726b, 0x7d6f, 0x7973, + 0x6641, 0x6c58, 0x6d2c, 0x6a4e, 0x685f, 0x5e4f, 0x5226, 0x6774, + 0x5156, 0x6642, 0x6363, 0x6430, 0x5834, 0x7625, 0x735e, 0x5725, + 0x7768, 0x6846, 0x7b66, 0x5d66, 0x5c7e, 0x585a, 0x5a2c, 0x6a30, + 0x6338, 0x4a2a, 0x6179, 0x6a31, 0x726c, 0x7a6e, 0x6e55, 0x7974, + 0x526c, 0x7b7b, 0x7d70, 0x603d, 0x4e63, 0x7846, 0x5e2e, 0x5f45, + 0x653e, 0x6d2d, 0x7a6a, 0x4d6e, 0x6d26, 0x6d2e, 0x706d, 0x5d21, + 0x6d2f, 0x7c78, 0x586b, 0x4c79, 0x4d35, 0x7a29, 0x615d, 0x6255, + 0x6d4f, 0x5d22, 0x794a, 0x6a68, 0x656d, 0x536b, 0x6954, 0x617a, + 0x644c, 0x6164, 0x6847, 0x4e5b, 0x5c55, 0x7735, 0x7c73, 0x7073, + 0x4e2f, 0x7135, 0x6f52, 0x6848, 0x6b71, 0x4b54, 0x603e, 0x6378, + 0x6a69, 0x7c32, 0x6074, 0x4f60, 0x6e25, 0x7a2a, 0x6643, 0x6132, + 0x4a2b, 0x6364, 0x693b, 0x6256, 0x7372, 0x6e56, 0x6a32, 0x5076, + 0x6c59, 0x5a4b, 0x4f28, 0x5d23, 0x585b, 0x794e, 0x6955, 0x6351, + 0x523c, 0x582c, 0x734c, 0x4d7b, 0x7656, 0x6775, 0x686f, 0x6379, + 0x523b, 0x7373, 0x637b, 0x5e50, 0x4e30, 0x5677, 0x7159, 0x7541, + 0x5c44, 0x753b, 0x5e51, 0x5c66, 0x5e52, 0x6d62, 0x6e76, 0x6a4f, + 0x706e, 0x637c, 0x535f, 0x5374, 0x6133, 0x6134, 0x7453, 0x5f46, + 0x6956, 0x5b2b, 0x7626, 0x6339, 0x6b45, 0x7429, 0x4d36, 0x5279, + 0x5a2d, 0x5263, 0x4f51, 0x4b5c, 0x4c7a, 0x4f5d, 0x6829, 0x633b, + 0x633a, 0x605a, 0x6e77, 0x5c33, 0x5375, 0x5726, 0x7635, 0x575b, + 0x6155, 0x546a, 0x5f23, 0x7d5f, 0x5077, 0x6d54, 0x4b2a, 0x645b, + 0x617b, 0x4b22, 0x5360, 0x643f, 0x7b40, 0x5a3e, 0x644d, 0x5639, + 0x6f40, 0x617c, 0x7639, 0x5f47, 0x6431, 0x5c67, 0x5c68, 0x7a56, + 0x5376, 0x715a, 0x7a72, 0x627d, 0x554f, 0x5078, 0x4d5f, 0x754b, + 0x6470, 0x4b2b, 0x5744, 0x627e, 0x5d5a, 0x5a2e, 0x4a6e, 0x5539, + 0x6321, 0x6863, 0x732b, 0x4f29, 0x5377, 0x5471, 0x4e64, 0x6872, + 0x6575, 0x672e, 0x563a, 0x5f6c, 0x6440, 0x6864, 0x5835, 0x645c, + 0x7439, 0x7136, 0x625e, 0x6135, 0x4d6f, 0x7127, 0x4e65, 0x4b5d, + 0x5963, 0x732c, 0x5079, 0x6c2b, 0x5e53, 0x7769, 0x7975, 0x615e, + 0x4b6e, 0x633c, 0x7856, 0x5b6e, 0x7d71, 0x7736, 0x745e, 0x726d, + 0x5b59, 0x7028, 0x617d, 0x5e54, 0x602c, 0x6d63, 0x5361, 0x5f48, + 0x5936, 0x7d2c, 0x6f53, 0x6441, 0x786b, 0x5b2c, 0x7c46, 0x582d, + 0x763a, 0x5b5f, 0x5353, 0x7847, 0x4a4e, 0x7841, 0x5234, 0x5c34, + 0x7a39, 0x4a4f, 0x7c33, 0x6a6a, 0x6a6b, 0x507a, 0x6d64, 0x5d67, + 0x5f49, 0x5f6d, 0x6e3c, 0x6f41, 0x4c52, 0x5d24, 0x5f4a, 0x5378, + 0x7128, 0x4d37, 0x6f54, 0x645d, 0x5f6e, 0x4b2c, 0x693c, 0x6a6c, + 0x5f4b, 0x793f, 0x562f, 0x5546, 0x4f2a, 0x4e29, 0x5678, 0x7137, + 0x6e78, 0x5959, 0x735f, 0x7848, 0x4e46, 0x5566, 0x7466, 0x6645, + 0x6f55, 0x4b6f, 0x7c5f, 0x5c27, 0x5667, 0x7849, 0x6352, 0x633d, + 0x4f61, 0x7040, 0x6c5a, 0x5d57, 0x7b70, 0x6c2c, 0x7029, 0x7a57, + 0x7b41, 0x5240, 0x6530, 0x6d65, 0x4b2d, 0x7930, 0x7725, 0x4b2e, + 0x5a2f, 0x5836, 0x5327, 0x7b32, 0x7d44, 0x6c2d, 0x7b21, 0x6569, + 0x696e, 0x7374, 0x7873, 0x7041, 0x5e2f, 0x7830, 0x7360, 0x672f, + 0x5b2d, 0x6635, 0x7928, 0x5d58, 0x6859, 0x6f56, 0x5362, 0x625f, + 0x7c60, 0x5748, 0x7d2d, 0x5f6f, 0x4c53, 0x5379, 0x5470, 0x5b47, + 0x5e55, 0x7074, 0x5550, 0x6559, 0x7c47, 0x5c56, 0x6260, 0x5a30, + 0x7323, 0x536c, 0x744b, 0x7d45, 0x637d, 0x7931, 0x507b, 0x6c5b, + 0x753c, 0x7224, 0x584e, 0x584f, 0x7577, 0x7661, 0x5237, 0x7b6c, + 0x5d48, 0x6468, 0x5241, 0x7857, 0x563b, 0x5e56, 0x773d, 0x6c2e, + 0x5061, 0x6075, 0x6a33, 0x4e56, 0x4c25, 0x6c76, 0x6261, 0x633e, + 0x7c48, 0x4d70, 0x7976, 0x5f70, 0x653f, 0x4e3f, 0x7c61, 0x6d30, + 0x7d51, 0x763b, 0x794f, 0x6b5a, 0x4a41, 0x5238, 0x4d71, 0x6353, + 0x7d66, 0x666d, 0x637a, 0x702a, 0x7950, 0x7c62, 0x7827, 0x6165, + 0x6e79, 0x6776, 0x6a6d, 0x7c34, 0x7542, 0x575c, 0x7075, 0x5d68, + 0x536d, 0x757c, 0x5a3f, 0x4c7b, 0x537a, 0x7424, 0x6f57, 0x5443, + 0x7b63, 0x7b6d, 0x602d, 0x6a6e, 0x7b33, 0x6442, 0x7667, 0x525d, + 0x5f4c, 0x7c49, 0x6529, 0x6076, 0x7633, 0x617e, 0x4b70, 0x6a6f, + 0x6a70, 0x5a40, 0x7834, 0x6b72, 0x6443, 0x6957, 0x6471, 0x4a6f, + 0x4e57, 0x7c4a, 0x7361, 0x4b44, 0x6365, 0x4b45, 0x6a34, 0x693d, + 0x5749, 0x6b5b, 0x6d31, 0x4c43, 0x773e, 0x7c4b, 0x7874, 0x5937, + 0x7353, 0x7354, 0x7764, 0x7751, 0x5837, 0x4e31, 0x4a42, 0x7b34, + 0x4b46, 0x7076, 0x5567, 0x6a50, 0x4c54, 0x4b2f, 0x742a, 0x692f, + 0x7543, 0x6958, 0x5d69, 0x7173, 0x557b, 0x5e3b, 0x747b, 0x7d73, + 0x7d72, 0x7726, 0x5d49, 0x5453, 0x4c28, 0x5a41, 0x4c55, 0x5964, + 0x7a4a, 0x6563, 0x533c, 0x4a70, 0x5044, 0x4a50, 0x7a2b, 0x6b6b, + 0x6778, 0x5965, 0x5157, 0x7324, 0x547b, 0x7c63, 0x7a58, 0x7355, + 0x4f2b, 0x6b73, 0x557c, 0x5354, 0x4d7c, 0x5966, 0x6279, 0x6221, + 0x6b54, 0x6077, 0x6432, 0x4c7c, 0x7b64, 0x742b, 0x503d, 0x4a71, + 0x6f38, 0x5740, 0x6e7a, 0x7d74, 0x5363, 0x7b42, 0x5568, 0x5b2e, + 0x6136, 0x7837, 0x603f, 0x7b43, 0x5d6a, 0x6222, 0x6e26, 0x7668, + 0x7675, 0x5d4a, 0x5062, 0x5d26, 0x5d6b, 0x6479, 0x632f, 0x507c, + 0x747c, 0x4c3c, 0x776a, 0x6564, 0x5f71, 0x7761, 0x7977, 0x6f39, + 0x7858, 0x7929, 0x7859, 0x6e3d, 0x5846, 0x6463, 0x754e, 0x5d59, + 0x5967, 0x5239, 0x5543, 0x5a65, 0x5a50, 0x5159, 0x4e58, 0x4b5e, + 0x742c, 0x5a7b, 0x7669, 0x6873, 0x4f2c, 0x7070, 0x747d, 0x5b48, + 0x4e40, 0x6354, 0x514f, 0x7175, 0x4d72, 0x4f6b, 0x4d38, 0x6326, + 0x515a, 0x7225, 0x7226, 0x644e, 0x537b, 0x7129, 0x7249, 0x6f58, + 0x6649, 0x5838, 0x7a73, 0x7335, 0x7824, 0x5173, 0x6648, 0x785a, + 0x5c69, 0x5e57, 0x4b5f, 0x4f6c, 0x745f, 0x5174, 0x523a, 0x5f72, + 0x6137, 0x6223, 0x537c, 0x6d66, 0x5b49, 0x647a, 0x4f5e, 0x4e50, + 0x5553, 0x7375, 0x772e, 0x6f48, 0x4d73, 0x754f, 0x6573, 0x7042, + 0x4a51, 0x6a71, 0x5026, 0x595a, 0x702b, 0x6b67, 0x6540, 0x7c35, + 0x6444, 0x4c29, 0x7d46, 0x6a35, 0x652a, 0x5f3a, 0x615f, 0x5a51, + 0x6138, 0x6874, 0x537d, 0x6224, 0x724a, 0x5a66, 0x7733, 0x7d4d, + 0x7336, 0x6e57, 0x7544, 0x5824, 0x7227, 0x5938, 0x5939, 0x6f49, + 0x564e, 0x774b, 0x5f2e, 0x6875, 0x5235, 0x5355, 0x744c, 0x5a7c, + 0x5968, 0x776b, 0x7549, 0x733c, 0x5a52, 0x5335, 0x6836, 0x564f, + 0x743a, 0x7749, 0x4c2a, 0x7043, 0x4c56, 0x5053, 0x533d, 0x5b7b, + 0x4b60, 0x5364, 0x7677, 0x553a, 0x734d, 0x4b61, 0x6b74, 0x742d, + 0x7c2a, 0x776c, 0x6876, 0x5a67, 0x774c, 0x6541, 0x606e, 0x557d, + 0x4e66, 0x7c2b, 0x553b, 0x7228, 0x6225, 0x4d39, 0x6a72, 0x4b47, + 0x4d74, 0x5b2f, 0x6f59, 0x4d3a, 0x7c79, 0x5f73, 0x4e67, 0x5a42, + 0x4f2d, 0x6779, 0x7828, 0x7362, 0x4a72, 0x5f24, 0x5444, 0x4c57, + 0x6542, 0x4d3b, 0x6f5a, 0x6e58, 0x5d27, 0x6226, 0x6040, 0x5630, + 0x784a, 0x7c7a, 0x597e, 0x5e30, 0x5d6c, 0x5a68, 0x5460, 0x5679, + 0x4d57, 0x5e58, 0x7278, 0x6456, 0x5045, 0x742e, 0x5d28, 0x6d45, + 0x7356, 0x5e59, 0x6366, 0x5328, 0x5b30, 0x655a, 0x633f, 0x5b31, + 0x5569, 0x6041, 0x6f5b, 0x7069, 0x5732, 0x507d, 0x5969, 0x507e, + 0x6c6d, 0x5329, 0x7229, 0x7044, 0x6262, 0x696f, 0x7951, 0x6959, + 0x685a, 0x5a43, 0x5a44, 0x5445, 0x677a, 0x4d60, 0x6330, 0x5b32, + 0x7b44, 0x7363, 0x5925, 0x7b67, 0x5d4b, 0x5054, 0x6636, 0x602e, + 0x7d5a, 0x5c35, 0x6078, 0x6731, 0x7570, 0x585c, 0x6d46, 0x6139, + 0x6340, 0x7940, 0x6970, 0x595b, 0x7364, 0x5c36, 0x6469, 0x7045, + 0x6341, 0x7c4c, 0x7c4d, 0x724b, 0x724c, 0x644f, 0x715b, 0x7a59, + 0x7138, 0x7d75, 0x6079, 0x677b, 0x7c37, 0x7c64, 0x7b45, 0x6367, + 0x5839, 0x7678, 0x5c45, 0x4c58, 0x602f, 0x7467, 0x6f5c, 0x4f7c, + 0x6f5d, 0x722a, 0x7d3e, 0x4a2c, 0x7d3b, 0x7d47, 0x6732, 0x6a51, + 0x5f74, 0x516c, 0x645e, 0x6543, 0x5926, 0x4d3c, 0x7365, 0x6d55, + 0x593a, 0x6d67, 0x7b35, 0x786c, 0x6067, 0x4c59, 0x5446, 0x6725, + 0x5575, 0x533e, 0x7c7b, 0x6472, 0x5f75, 0x6878, 0x786d, 0x4e47, + 0x7d76, 0x6858, 0x4d58, 0x6756, 0x4c5a, 0x4a63, 0x5f76, 0x7047, + 0x7046, 0x583a, 0x7174, 0x7470, 0x754c, 0x7c65, 0x6a45, 0x6a73, + 0x5d5b, 0x5c57, 0x5e7d, 0x7279, 0x5547, 0x5850, 0x7048, 0x5121, + 0x5122, 0x5954, 0x5668, 0x594a, 0x5a31, 0x5847, 0x5c62, 0x734e, + 0x7574, 0x7139, 0x5a53, 0x766a, 0x4f75, 0x7d2e, 0x4a52, 0x5f34, + 0x575d, 0x7a3a, 0x6e27, 0x753d, 0x7875, 0x6d68, 0x5461, 0x5123, + 0x6156, 0x7978, 0x5b4a, 0x4b79, 0x5454, 0x595c, 0x6e3e, 0x776d, + 0x526e, 0x6166, 0x7779, 0x5d6d, 0x685b, 0x5b33, 0x5177, 0x6030, + 0x5462, 0x7657, 0x5779, 0x585d, 0x4d7d, 0x722b, 0x4d3d, 0x7842, + 0x722c, 0x4a2d, 0x4a2e, 0x4f2e, 0x6342, 0x5c37, 0x5b5a, 0x593b, + 0x4a73, 0x7653, 0x6678, 0x6a75, 0x6a76, 0x7679, 0x4f2f, 0x4a53, + 0x4a2f, 0x5230, 0x713a, 0x5733, 0x6343, 0x737d, 0x5e5a, 0x5e5b, + 0x6f5e, 0x6263, 0x6e7b, 0x5f77, 0x574a, 0x4e68, 0x5b5b, 0x713b, + 0x6971, 0x7a37, 0x5046, 0x4c2b, 0x6e28, 0x4b7a, 0x7979, 0x4c7d, + 0x537e, 0x6450, 0x726e, 0x5455, 0x5f4d, 0x7c38, 0x5150, 0x724d, + 0x7752, 0x4a54, 0x5559, 0x585e, 0x4d59, 0x6e29, 0x763c, 0x4c5b, + 0x7049, 0x7c7c, 0x6849, 0x747e, 0x677c, 0x575e, 0x5e5c, 0x702c, + 0x4c7e, 0x4d61, 0x613a, 0x5b6f, 0x5a32, 0x5125, 0x5c38, 0x5876, + 0x5124, 0x4d62, 0x5c6a, 0x7077, 0x704a, 0x503e, 0x5d5c, 0x5456, + 0x5356, 0x6d50, 0x4d21, 0x5f35, 0x5f78, 0x5421, 0x4e32, 0x684a, + 0x6b75, 0x6355, 0x7550, 0x7521, 0x5927, 0x652b, 0x664b, 0x7571, + 0x6545, 0x7923, 0x605b, 0x766b, 0x4b71, 0x596a, 0x7522, 0x5751, + 0x5178, 0x6a78, 0x6a79, 0x5a33, 0x6f5f, 0x716f, 0x6576, 0x6e3f, + 0x6264, 0x503f, 0x7a2c, 0x7551, 0x6733, 0x693e, 0x724e, 0x5b34, + 0x7c4e, 0x5d6e, 0x6734, 0x5734, 0x7734, 0x4d3e, 0x5a69, 0x4f30, + 0x7759, 0x7366, 0x4e59, 0x4e2a, 0x4b48, 0x5027, 0x704b, 0x5047, + 0x6445, 0x5b60, 0x555a, 0x5727, 0x6e40, 0x7876, 0x7552, 0x6d69, + 0x593c, 0x6546, 0x7523, 0x5a54, 0x6227, 0x7b7c, 0x715c, 0x4a74, + 0x687a, 0x4e69, 0x6978, 0x6265, 0x5039, 0x5472, 0x5126, 0x5f4e, + 0x7c74, 0x532a, 0x4c2c, 0x6f60, 0x6565, 0x5055, 0x5b7c, 0x7c66, + 0x4b7e, 0x6d6a, 0x5e31, 0x7963, 0x5422, 0x4f76, 0x5650, 0x556a, + 0x716e, 0x7a4b, 0x6521, 0x5531, 0x4f6d, 0x6d6b, 0x5532, 0x553c, + 0x7d62, 0x732d, 0x7d5b, 0x6930, 0x5127, 0x7d63, 0x4e33, 0x7d64, + 0x7a4e, 0x4a30, 0x7727, 0x4f31, 0x6622, 0x7c36, 0x722d, 0x6f61, + 0x732e, 0x5c46, 0x596b, 0x6860, 0x6128, 0x5576, 0x4f7d, 0x5e5d, + 0x5951, 0x646a, 0x724f, 0x773f, 0x6266, 0x6228, 0x6356, 0x6d51, + 0x6979, 0x5631, 0x5e32, 0x6068, 0x532b, 0x6b5c, 0x5f2f, 0x4a43, + 0x6e7c, 0x7d43, 0x6b76, 0x4f32, 0x596c, 0x593d, 0x585f, 0x5438, + 0x6b3e, 0x5d6f, 0x5d70, 0x5d71, 0x5d72, 0x593e, 0x7b46, 0x4f33, + 0x6e7d, 0x642b, 0x5a45, 0x586c, 0x5128, 0x6229, 0x5e3c, 0x6735, + 0x5b70, 0x6f62, 0x7170, 0x4f34, 0x5b71, 0x6031, 0x5f25, 0x7952, + 0x677d, 0x6623, 0x7b71, 0x4b30, 0x722e, 0x4d67, 0x685c, 0x6757, + 0x7740, 0x5063, 0x5a21, 0x4c3d, 0x5129, 0x5d4c, 0x637e, 0x512a, + 0x682a, 0x6a36, 0x797a, 0x664c, 0x7658, 0x5447, 0x594b, 0x5952, + 0x534b, 0x5877, 0x5a29, 0x7578, 0x5e5e, 0x722f, 0x7829, 0x5848, + 0x6e41, 0x7941, 0x5d73, 0x6a7a, 0x763d, 0x613b, 0x4d3f, 0x7454, + 0x664d, 0x7c4f, 0x7b22, 0x605c, 0x743b, 0x5a55, 0x7932, 0x7b72, + 0x5b76, 0x5e5f, 0x5b72, 0x785c, 0x776e, 0x6b68, 0x527a, 0x713c, + 0x7a5a, 0x5a6a, 0x5a46, 0x7741, 0x6736, 0x6547, 0x562c, 0x5c47, + 0x6129, 0x622a, 0x5526, 0x5457, 0x7250, 0x6a7b, 0x605d, 0x7b73, + 0x713d, 0x6267, 0x7d57, 0x4e48, 0x6a37, 0x7c40, 0x7d67, 0x776f, + 0x5735, 0x6f3a, 0x715d, 0x5e33, 0x684b, 0x785d, 0x7b47, 0x5548, + 0x575f, 0x5d29, 0x6931, 0x7a2d, 0x7659, 0x7a74, 0x782a, 0x666e, + 0x4c5c, 0x613c, 0x606f, 0x693f, 0x7c7d, 0x664e, 0x6157, 0x664f, + 0x7471, 0x6473, 0x647b, 0x7964, 0x6f63, 0x4f6e, 0x763e, 0x6032, + 0x7c7e, 0x512b, 0x577a, 0x7b48, 0x6257, 0x5423, 0x7078, 0x5728, + 0x6167, 0x533f, 0x6f64, 0x5745, 0x6b62, 0x7c67, 0x6422, 0x6268, + 0x6650, 0x7b68, 0x7468, 0x6574, 0x743c, 0x7455, 0x5f36, 0x7c39, + 0x6e42, 0x4a75, 0x6f65, 0x4b62, 0x5424, 0x5e60, 0x5a7d, 0x6446, + 0x683e, 0x605e, 0x7634, 0x6a52, 0x797b, 0x6042, 0x4a64, 0x6737, + 0x6a7d, 0x595d, 0x5a34, 0x6e2a, 0x7b69, 0x5b4b, 0x5a35, 0x713e, + 0x532c, 0x7b49, 0x5f4f, 0x5340, 0x6357, 0x6f66, 0x7c50, 0x6940, + 0x7553, 0x6c5c, 0x7737, 0x6a38, 0x5179, 0x5c48, 0x6a39, 0x715e, + 0x5736, 0x4f35, 0x5928, 0x6c6e, 0x5d2a, 0x4d22, 0x682e, 0x613d, + 0x7251, 0x6941, 0x527c, 0x5b35, 0x7367, 0x587e, 0x7c51, 0x6d32, + 0x742f, 0x7b23, 0x7c41, 0x6e2b, 0x5425, 0x7472, 0x6e59, 0x7b4a, + 0x4d63, 0x583b, 0x655b, 0x7877, 0x7654, 0x5729, 0x4b49, 0x6651, + 0x704c, 0x582e, 0x7953, 0x557e, 0x583c, 0x7230, 0x622b, 0x7368, + 0x6f42, 0x6d6c, 0x6738, 0x5a7e, 0x4c3e, 0x727c, 0x5a6b, 0x6258, + 0x6d56, 0x5651, 0x6033, 0x7c52, 0x6b48, 0x5341, 0x704d, 0x4f77, + 0x6d52, 0x5458, 0x5c49, 0x5771, 0x5f3b, 0x7325, 0x744d, 0x713f, + 0x7831, 0x697a, 0x7b4b, 0x4a55, 0x7954, 0x774a, 0x5648, 0x7c68, + 0x733d, 0x6e7e, 0x677e, 0x5342, 0x5336, 0x4c2d, 0x767a, 0x5632, + 0x5258, 0x6758, 0x6325, 0x6739, 0x702d, 0x7b4c, 0x6b21, 0x5426, + 0x7b4d, 0x553d, 0x715f, 0x767b, 0x5e34, 0x556b, 0x6548, 0x7b24, + 0x5439, 0x5e61, 0x6423, 0x5737, 0x786e, 0x5e35, 0x5652, 0x7955, + 0x673a, 0x6b55, 0x5577, 0x6f67, 0x613e, 0x7a2e, 0x5669, 0x566e, + 0x673b, 0x6c4b, 0x5533, 0x4e34, 0x7b25, 0x616e, 0x7728, 0x7b4e, + 0x583d, 0x7b7d, 0x7c69, 0x4f36, 0x6d47, 0x6e2c, 0x4c5d, 0x7627, + 0x667a, 0x7524, 0x7d5c, 0x6d33, 0x4e49, 0x6f68, 0x613f, 0x7a5b, + 0x4b63, 0x7729, 0x7b26, 0x5c39, 0x7140, 0x6d48, 0x6f43, 0x562d, + 0x7d4e, 0x6821, 0x7b74, 0x5527, 0x7176, 0x6653, 0x4c5e, 0x7832, + 0x5c6b, 0x7d36, 0x656a, 0x7160, 0x5b4c, 0x5d4d, 0x5448, 0x596d, + 0x7525, 0x667b, 0x6654, 0x7d48, 0x5621, 0x7d3f, 0x7c53, 0x6f21, + 0x673c, 0x516e, 0x6655, 0x6972, 0x5f30, 0x5860, 0x7c3a, 0x7d2f, + 0x704e, 0x5b61, 0x6549, 0x6d34, 0x6043, 0x6358, 0x697b, 0x6a28, + 0x7d37, 0x7b27, 0x6942, 0x7d77, 0x6259, 0x5c6c, 0x6822, 0x6670, + 0x7d78, 0x7d79, 0x763f, 0x6727, 0x6657, 0x5473, 0x5449, 0x567a, + 0x5772, 0x6140, 0x5b62, 0x6658, 0x673d, 0x704f, 0x733e, 0x622c, + 0x7537, 0x6070, 0x7d38, 0x6368, 0x5427, 0x687c, 0x7a52, 0x786f, + 0x5653, 0x5534, 0x7050, 0x7770, 0x6e33, 0x6a3a, 0x6a53, 0x6d49, + 0x5d2b, 0x652c, 0x7d21, 0x5f50, 0x6c33, 0x5f51, 0x6d6d, 0x7838, + 0x777a, 0x782b, 0x7460, 0x543a, 0x6433, 0x695a, 0x5e36, 0x593f, + 0x5940, 0x566f, 0x594c, 0x5a2a, 0x5f65, 0x7765, 0x4c32, 0x5f79, + 0x5760, 0x543b, 0x7d7a, 0x4c33, 0x5b73, 0x5f52, 0x4e4a, 0x6e5a, + 0x6464, 0x7b4f, 0x4f37, 0x6e43, 0x4e6a, 0x622d, 0x5761, 0x7a75, + 0x5549, 0x782c, 0x6759, 0x7369, 0x586d, 0x6344, 0x7071, 0x6865, + 0x607a, 0x6e44, 0x595e, 0x6b22, 0x6b23, 0x7c42, 0x6a3b, 0x682b, + 0x5e62, 0x6d6f, 0x6823, 0x4f71, 0x543c, 0x7c6a, 0x673e, 0x7c72, + 0x5634, 0x622e, 0x5337, 0x7a4c, 0x7a5c, 0x6d35, 0x6163, 0x682c, + 0x685d, 0x6f69, 0x743d, 0x4f38, 0x695b, 0x512c, 0x5a47, 0x6b49, + 0x684c, 0x5e37, 0x563c, 0x5365, 0x7a5d, 0x5a56, 0x4a31, 0x5a48, + 0x5f26, 0x7933, 0x7252, 0x4a44, 0x4e4b, 0x4d75, 0x7d30, 0x5528, + 0x7141, 0x6269, 0x5c4a, 0x6c34, 0x7a40, 0x7b28, 0x5028, 0x5a6c, + 0x596e, 0x607b, 0x6f6a, 0x7a5e, 0x6044, 0x4f39, 0x554a, 0x5762, + 0x622f, 0x5738, 0x684d, 0x765a, 0x6f22, 0x625a, 0x767c, 0x7b50, + 0x512d, 0x4d64, 0x512e, 0x5c6d, 0x684e, 0x7079, 0x4e35, 0x667c, + 0x577b, 0x5056, 0x5d75, 0x7771, 0x767d, 0x5b77, 0x7b6a, 0x695c, + 0x5941, 0x7572, 0x6045, 0x6a54, 0x7942, 0x6a3c, 0x5245, 0x7b51, + 0x6740, 0x6b25, 0x5f7a, 0x6322, 0x5739, 0x6943, 0x687d, 0x682f, + 0x7253, 0x7b29, 0x5825, 0x554b, 0x5048, 0x512f, 0x5763, 0x6046, + 0x5622, 0x6d70, 0x5773, 0x7c54, 0x5a57, 0x4c5f, 0x7254, 0x5130, + 0x4c60, 0x5b7d, 0x733f, 0x7051, 0x7c3b, 0x6230, 0x6625, 0x625b, + 0x5f5e, 0x6047, 0x726f, 0x4c61, 0x566a, 0x6742, 0x4e36, 0x7340, + 0x4d7e, 0x7b52, 0x7878, 0x777b, 0x683f, 0x6837, 0x6d36, 0x5c3a, + 0x4c34, 0x7177, 0x6838, 0x4a76, 0x6424, 0x7456, 0x5f66, 0x5f27, + 0x5f67, 0x6141, 0x6944, 0x5c4b, 0x6945, 0x6f23, 0x6b26, 0x4b23, + 0x6369, 0x517b, 0x6f24, 0x6f6b, 0x5034, 0x4d23, 0x6866, 0x6f25, + 0x534c, 0x5a6d, 0x573a, 0x7255, 0x7565, 0x596f, 0x7934, 0x5554, + 0x7d4f, 0x5b63, 0x7161, 0x6c36, 0x7b7e, 0x5357, 0x5131, 0x4b31, + 0x5132, 0x4b32, 0x7142, 0x7461, 0x7935, 0x6143, 0x6142, 0x6b77, + 0x5f28, 0x4b4a, 0x6639, 0x785e, 0x792a, 0x4a77, 0x6d37, 0x5338, + 0x7256, 0x5459, 0x6e45, 0x7270, 0x4a32, 0x5c3b, 0x7178, 0x6c37, + 0x654a, 0x7640, 0x7d5d, 0x5463, 0x4c62, 0x7754, 0x5765, 0x5343, + 0x5826, 0x7641, 0x5d76, 0x4d40, 0x655c, 0x654b, 0x6144, 0x6830, + 0x7430, 0x736a, 0x5a6e, 0x573b, 0x6231, 0x572a, 0x567b, 0x645f, + 0x4a56, 0x6b28, 0x5b7e, 0x7642, 0x6f3b, 0x547d, 0x6048, 0x6839, + 0x6f26, 0x4d24, 0x5474, 0x5b21, 0x5b5c, 0x5b5d, 0x6e5c, 0x4b4b, + 0x7c55, 0x4e6b, 0x4d41, 0x7b53, 0x792b, 0x7554, 0x5929, 0x695d, + 0x5b4d, 0x5d4e, 0x6743, 0x6c4c, 0x796c, 0x4b4c, 0x607c, 0x5428, + 0x6d53, 0x586f, 0x7257, 0x4a78, 0x5a6f, 0x5654, 0x594d, 0x586e, + 0x7241, 0x5f53, 0x5a70, 0x626a, 0x607d, 0x5878, 0x772f, 0x5a36, + 0x4a57, 0x7258, 0x5879, 0x7a5f, 0x4f6f, 0x5942, 0x7052, 0x6451, + 0x7337, 0x7a60, 0x6f6c, 0x6232, 0x543d, 0x594e, 0x7462, 0x5429, + 0x4d42, 0x675a, 0x7259, 0x592a, 0x583e, 0x5c2d, 0x626b, 0x567c, + 0x4a79, 0x545a, 0x7457, 0x4c21, 0x4f3a, 0x7538, 0x5943, 0x5068, + 0x6345, 0x6b78, 0x7231, 0x4f3b, 0x532d, 0x6861, 0x4e6c, 0x6034, + 0x5e63, 0x5d77, 0x7232, 0x7376, 0x765b, 0x577e, 0x785f, 0x7772, + 0x5029, 0x665a, 0x7526, 0x573c, 0x4c63, 0x665b, 0x5d5d, 0x5133, + 0x6f6d, 0x565e, 0x6474, 0x616f, 0x5d78, 0x684f, 0x4a65, 0x5c21, + 0x6035, 0x7c2c, 0x7c2d, 0x5827, 0x6d38, 0x5b36, 0x5670, 0x732f, + 0x4d25, 0x5a71, 0x5828, 0x4c64, 0x5134, 0x4a58, 0x5a72, 0x7527, + 0x7528, 0x6626, 0x556c, 0x5578, 0x5a73, 0x6346, 0x5e64, 0x5e65, + 0x5135, 0x5136, 0x5137, 0x7233, 0x695e, 0x7053, 0x7234, 0x7054, + 0x4b64, 0x7b54, 0x7566, 0x636a, 0x5e66, 0x5f54, 0x7879, 0x702e, + 0x5138, 0x565f, 0x5057, 0x7c21, 0x6f6e, 0x5c58, 0x695f, 0x655d, + 0x7d7b, 0x6049, 0x5649, 0x542a, 0x654c, 0x6960, 0x5058, 0x7c22, + 0x543e, 0x6233, 0x5e67, 0x5c3c, 0x5236, 0x7555, 0x4e21, 0x7529, + 0x5d79, 0x5d7a, 0x7055, 0x765f, 0x725a, 0x646b, 0x7271, 0x6c39, + 0x7d7c, 0x612a, 0x4a59, 0x6f6f, 0x752a, 0x6c79, 0x782d, 0x7242, + 0x7643, 0x5752, 0x7922, 0x7056, 0x707a, 0x7660, 0x6973, 0x7243, + 0x542b, 0x4a33, 0x4d26, 0x4d43, 0x4d5a, 0x594f, 0x7644, 0x6e5d, + 0x6744, 0x6234, 0x5f62, 0x675b, 0x6831, 0x7c2e, 0x654d, 0x7a6b, + 0x4f3c, 0x4f62, 0x4d76, 0x6f70, 0x743e, 0x544d, 0x7338, 0x6921, + 0x7272, 0x736b, 0x7057, 0x4f57, 0x4f5f, 0x6840, 0x6841, 0x4f63, + 0x6922, 0x502a, 0x7341, 0x502b, 0x5464, 0x6f3c, 0x5821, 0x595f, + 0x7357, 0x5c3d, 0x4c65, 0x6d71, 0x7162, 0x545b, 0x6235, 0x4a66, + 0x532e, 0x4c66, 0x7153, 0x7567, 0x4a5a, 0x7b6e, 0x6145, 0x5f69, + 0x6e5e, 0x7742, 0x5822, 0x5d2c, 0x702f, 0x563d, 0x612b, 0x7936, + 0x5475, 0x5049, 0x6f27, 0x626c, 0x5b6a, 0x4e4c, 0x7568, 0x7755, + 0x534d, 0x737e, 0x5035, 0x607e, 0x5f7b, 0x665d, 0x6824, 0x4b4d, + 0x6f28, 0x6e34, 0x5a58, 0x5139, 0x5f29, 0x7330, 0x4c44, 0x4e37, + 0x6f29, 0x5f55, 0x6d57, 0x6e46, 0x6f3d, 0x7c56, 0x5b74, 0x6f2a, + 0x7839, 0x7569, 0x6359, 0x6146, 0x543f, 0x5e68, 0x706a, 0x7342, + 0x532f, 0x4a5b, 0x7c57, 0x6d58, 0x6147, 0x7458, 0x5633, 0x5d2d, + 0x553e, 0x7143, 0x6e5f, 0x566b, 0x7459, 0x5766, 0x5a37, 0x5d7b, + 0x5d4f, 0x5823, 0x5a59, 0x7058, 0x6f44, 0x6158, 0x7154, 0x6d72, + 0x555b, 0x555c, 0x7344, 0x4b57, 0x6236, 0x6f71, 0x7b55, 0x5358, + 0x5d50, 0x7059, 0x4b33, 0x555d, 0x4d27, 0x502c, 0x513a, 0x7144, + 0x6533, 0x7b75, 0x6961, 0x7d60, 0x7c3c, 0x5a22, 0x5a23, 0x5221, + 0x526f, 0x626d, 0x5e69, 0x4e5c, 0x7235, 0x5064, 0x5d51, 0x6148, + 0x5b37, 0x5f63, 0x6d39, 0x7145, 0x734f, 0x572b, 0x612c, 0x636b, + 0x6e47, 0x6149, 0x4a7a, 0x707b, 0x7a61, 0x705a, 0x4c67, 0x5a74, + 0x4c3f, 0x4e6d, 0x5529, 0x7a62, 0x5065, 0x6b56, 0x6c5f, 0x5f7c, + 0x7756, 0x5e6a, 0x4b34, 0x6f3e, 0x4c35, 0x4f3d, 0x6f72, 0x6237, + 0x4c68, 0x707c, 0x5660, 0x7146, 0x6238, 0x6b2b, 0x4b35, 0x5851, + 0x744e, 0x7377, 0x5746, 0x513b, 0x772a, 0x6d4a, 0x5753, 0x587a, + 0x7645, 0x514c, 0x5d7c, 0x5f7d, 0x7965, 0x604a, 0x727d, 0x5330, + 0x7473, 0x5a49, 0x665e, 0x783a, 0x6850, 0x587b, 0x6a55, 0x5623, + 0x7646, 0x725b, 0x647c, 0x6832, 0x5a5a, 0x725c, 0x7b56, 0x6932, + 0x6e2d, 0x7a63, 0x5c6e, 0x756a, 0x6660, 0x707d, 0x572c, 0x7545, + 0x6e60, 0x5b65, 0x5d5e, 0x5970, 0x6923, 0x7179, 0x7244, 0x604b, + 0x6924, 0x6239, 0x6331, 0x7c6b, 0x4d28, 0x4c36, 0x705b, 0x663a, + 0x4d29, 0x7343, 0x6159, 0x6f2b, 0x6745, 0x6069, 0x7345, 0x5440, + 0x553f, 0x5d2e, 0x797c, 0x4c40, 0x6522, 0x4e38, 0x5852, 0x7956, + 0x712a, 0x4e51, 0x7647, 0x5b6b, 0x5f7e, 0x5861, 0x7773, 0x5767, + 0x547e, 0x513c, 0x654f, 0x4b36, 0x5a38, 0x4d44, 0x563e, 0x623a, + 0x4f58, 0x604c, 0x6b79, 0x7d7d, 0x5768, 0x4b58, 0x6962, 0x683a, + 0x6347, 0x6c4d, 0x6c4e, 0x563f, 0x6327, 0x5f56, 0x7d68, 0x6e61, + 0x7628, 0x5d7d, 0x783b, 0x6851, 0x7957, 0x4e6e, 0x6c4f, 0x6925, + 0x5655, 0x4d45, 0x6d3a, 0x513d, 0x4f3e, 0x6c3b, 0x5231, 0x4c69, + 0x5944, 0x697c, 0x513e, 0x6c3c, 0x652d, 0x7730, 0x4c6a, 0x5344, + 0x5640, 0x567d, 0x6121, 0x5e3d, 0x7629, 0x5a24, 0x5624, 0x7546, + 0x6122, 0x6946, 0x7245, 0x7469, 0x566c, 0x6b53, 0x6c3d, 0x625c, + 0x5e6b, 0x705c, 0x6b3f, 0x574e, 0x513f, 0x752b, 0x797d, 0x4a5c, + 0x4d46, 0x7236, 0x5d7e, 0x4c37, 0x5b38, 0x5069, 0x4e5d, 0x6b40, + 0x7d22, 0x784b, 0x6a56, 0x7130, 0x5b4e, 0x7743, 0x5b4f, 0x4b24, + 0x7860, 0x7b57, 0x6b4a, 0x6021, 0x4e4d, 0x545c, 0x7d58, 0x5276, + 0x7237, 0x7a76, 0x762a, 0x7a77, 0x5866, 0x7431, 0x6852, 0x4a45, + 0x4c6b, 0x626e, 0x623b, 0x772d, 0x7861, 0x736c, 0x5e21, 0x647d, + 0x636c, 0x5d2f, 0x5d30, 0x4b37, 0x6853, 0x6123, 0x5260, 0x707e, + 0x6926, 0x4b72, 0x6d73, 0x5c59, 0x604d, 0x775a, 0x5b39, 0x4c2e, + 0x5a5b, 0x4d47, 0x5d31, 0x582f, 0x6323, 0x4e6f, 0x7273, 0x7833, + 0x604e, 0x757d, 0x6b6c, 0x5345, 0x7c6c, 0x525b, 0x546b, 0x5e22, + 0x6566, 0x7030, 0x5544, 0x6d74, 0x636d, 0x6842, 0x6d75, 0x577c, + 0x6d3b, 0x762b, 0x7238, 0x7648, 0x5366, 0x725d, 0x4f3f, 0x6b2c, + 0x4f40, 0x6628, 0x7d69, 0x4f41, 0x605f, 0x5e6c, 0x6022, 0x743f, + 0x626f, 0x5971, 0x7147, 0x4b38, 0x797e, 0x5b3a, 0x5a75, 0x766c, + 0x5a5c, 0x7a64, 0x604f, 0x5d32, 0x6629, 0x6f73, 0x736d, 0x6b7a, + 0x7966, 0x4a5d, 0x555e, 0x4a5e, 0x5f64, 0x667d, 0x752c, 0x6475, + 0x6963, 0x6d4b, 0x4f64, 0x5853, 0x5d33, 0x546c, 0x7239, 0x5f37, + 0x4b4e, 0x7b58, 0x5059, 0x5d52, 0x7774, 0x675c, 0x6425, 0x7c23, + 0x5b3b, 0x723a, 0x697d, 0x504a, 0x7556, 0x5945, 0x6434, 0x6d27, + 0x6a3d, 0x667e, 0x7744, 0x752d, 0x5960, 0x4a34, 0x7862, 0x4f42, + 0x6c3e, 0x6534, 0x4d48, 0x6e48, 0x6748, 0x4d49, 0x7937, 0x7168, + 0x5972, 0x5b75, 0x4a35, 0x5946, 0x5849, 0x592b, 0x6d3c, 0x5854, + 0x5c5a, 0x623c, 0x7c6d, 0x6c60, 0x527e, 0x6947, 0x662a, 0x6270, + 0x7a3b, 0x752e, 0x7b2a, 0x6c7b, 0x6c3f, 0x7c58, 0x5465, 0x7943, + 0x6e62, 0x5769, 0x6d76, 0x5e6d, 0x4c6c, 0x636e, 0x6854, 0x7a78, + 0x5d34, 0x6435, 0x5830, 0x5855, 0x746a, 0x4e39, 0x5661, 0x4f52, + 0x5036, 0x4e22, 0x736e, 0x7378, 0x5c4c, 0x504b, 0x7c24, 0x4d4a, + 0x5754, 0x5e23, 0x6460, 0x6e49, 0x625d, 0x757e, 0x542c, 0x5551, + 0x5870, 0x7843, 0x6a57, 0x7557, 0x583f, 0x7d40, 0x6b2d, 0x552a, + 0x6728, 0x6e4a, 0x4a67, 0x7863, 0x545d, 0x6a58, 0x7b59, 0x6d77, + 0x6535, 0x502d, 0x7171, 0x623d, 0x6348, 0x5955, 0x5f2a, 0x5b3c, + 0x7864, 0x717a, 0x6536, 0x736f, 0x7b5a, 0x6160, 0x592c, 0x756b, + 0x6036, 0x6948, 0x4b4f, 0x6349, 0x5e6e, 0x623e, 0x5c6f, 0x5625, + 0x6271, 0x567e, 0x5921, 0x5840, 0x5c5b, 0x6d3d, 0x5f38, 0x6a25, + 0x572d, 0x7379, 0x6d78, 0x7547, 0x614a, 0x6b63, 0x725e, 0x784c, + 0x6a59, 0x5346, 0x5b66, 0x752f, 0x4e70, 0x697e, 0x7b36, 0x6272, + 0x4f72, 0x7739, 0x5973, 0x614b, 0x5a5d, 0x5a39, 0x6b7b, 0x4b39, + 0x6d79, 0x6060, 0x7440, 0x7d3c, 0x5f31, 0x636f, 0x6023, 0x7d39, + 0x7031, 0x4d4b, 0x6d3e, 0x5540, 0x6370, 0x6d7a, 0x6964, 0x556d, + 0x675d, 0x5476, 0x6537, 0x5b67, 0x623f, 0x6e4b, 0x5774, 0x705d, + 0x4e2b, 0x675e, 0x5656, 0x614c, 0x6833, 0x656e, 0x5c22, 0x6050, + 0x5535, 0x5521, 0x7b5b, 0x794b, 0x4b73, 0x7425, 0x7a48, 0x5657, + 0x6965, 0x7b5c, 0x7d50, 0x7b76, 0x5a25, 0x5b3d, 0x6c62, 0x4d77, + 0x705e, 0x7649, 0x5e6f, 0x5331, 0x7c6e, 0x6843, 0x7148, 0x4e71, + 0x796d, 0x7274, 0x6436, 0x7539, 0x5c70, 0x6371, 0x6825, 0x723b, + 0x5e24, 0x5a4c, 0x4a69, 0x635a, 0x7c59, 0x6a5a, 0x7944, 0x6324, + 0x7b5d, 0x6f4a, 0x6844, 0x554c, 0x6b57, 0x592d, 0x7b2b, 0x5359, + 0x5522, 0x765e, 0x5a76, 0x6051, 0x6928, 0x7579, 0x7a2f, 0x6b7c, + 0x606a, 0x6332, 0x5545, 0x7163, 0x556e, 0x4d4c, 0x6d59, 0x5841, + 0x7a6c, 0x716b, 0x7a3c, 0x6662, 0x7a65, 0x627a, 0x4a36, 0x6437, + 0x6a5b, 0x757a, 0x7b2c, 0x4f43, 0x6b7d, 0x787a, 0x5f39, 0x6171, + 0x5224, 0x757b, 0x505a, 0x505b, 0x6a3e, 0x5931, 0x4a37, 0x5367, + 0x7865, 0x5332, 0x6240, 0x725f, 0x4d65, 0x792c, 0x4d4d, 0x6e2e, + 0x562e, 0x576a, 0x6760, 0x6b2e, 0x4f59, 0x5c4d, 0x6d7b, 0x5e70, + 0x576b, 0x5e25, 0x5f57, 0x5b50, 0x5b51, 0x5523, 0x7032, 0x5c5c, + 0x4a68, 0x7866, 0x5c4e, 0x6a5c, 0x5b52, 0x6933, 0x775b, 0x6328, + 0x572e, 0x6061, 0x4b3a, 0x6551, 0x505c, 0x5541, 0x584a, 0x6329, + 0x6024, 0x6929, 0x5347, 0x5c5d, 0x782e, 0x4c38, 0x502e, 0x5872, + 0x634a, 0x4c2f, 0x542d, 0x7651, 0x504c, 0x4a46, 0x5542, 0x4e3a, + 0x4a47, 0x7a30, 0x5f58, 0x753a, 0x656b, 0x6f74, 0x5d35, 0x4d2a, + 0x6372, 0x7b77, 0x7750, 0x7d3a, 0x7d61, 0x767e, 0x5140, 0x6845, + 0x6438, 0x6168, 0x4c41, 0x526d, 0x5b3e, 0x6062, 0x7a49, 0x614d, + 0x4a38, 0x7260, 0x7149, 0x5e71, 0x705f, 0x7844, 0x6e4c, 0x5e72, + 0x6749, 0x6273, 0x6761, 0x634b, 0x634c, 0x4f78, 0x6f2c, 0x7d7e, + 0x7c25, 0x7a31, 0x5f59, 0x6052, 0x745a, 0x714a, 0x4e23, 0x723c, + 0x6c63, 0x6025, 0x772b, 0x6b2f, 0x655e, 0x6124, 0x4d2b, 0x5974, + 0x6826, 0x4d4e, 0x6169, 0x7c6f, 0x6063, 0x6241, 0x4e24, 0x5e26, + 0x6b7e, 0x6b5d, 0x7060, 0x745b, 0x6274, 0x5348, 0x746b, 0x6e35, + 0x7558, 0x555f, 0x5665, 0x6b30, 0x7463, 0x634d, 0x7474, 0x7a32, + 0x6f75, 0x4a5f, 0x6b31, 0x6d3f, 0x7d49, 0x6426, 0x7924, 0x7033, + 0x656c, 0x5167, 0x5947, 0x6457, 0x6a5d, 0x5477, 0x5a3a, 0x5a4d, + 0x794c, 0x615a, 0x5b3f, 0x4c45, 0x6c50, 0x4b3b, 0x5e73, 0x692a, + 0x5948, 0x6e63, 0x573d, 0x4f44, 0x504d, 0x7c26, 0x717b, 0x7d52, + 0x5141, 0x635b, 0x5349, 0x5c4f, 0x4c6d, 0x5e27, 0x663b, 0x6c21, + 0x4c39, 0x7b5e, 0x6762, 0x5441, 0x5c28, 0x6242, 0x7358, 0x6553, + 0x7359, 0x7346, 0x4d5b, 0x4d2c, 0x7c43, 0x5467, 0x5142, 0x7925, + 0x6855, 0x634e, 0x544a, 0x5f5a, 0x7b5f, 0x6763, 0x787b, 0x634f, + 0x7530, 0x5867, 0x5949, 0x782f, 0x6f76, 0x5d36, 0x6e2f, 0x4d78, + 0x5e38, 0x7c27, 0x777c, 0x7731, 0x4e3b, 0x7421, 0x6e4d, 0x612e, + 0x6c43, 0x4f7e, 0x783f, 0x5862, 0x5368, 0x5e28, 0x7464, 0x6c42, + 0x5975, 0x7945, 0x5d53, 0x5671, 0x6c7c, 0x7c70, 0x6d40, 0x4a39, + 0x6e64, 0x7261, 0x5e39, 0x5672, 0x5e74, 0x5f5b, 0x5b53, 0x7a67, + 0x5863, 0x7441, 0x5d37, 0x7275, 0x542e, 0x5673, 0x5d38, 0x4f45, + 0x5f5f, 0x723e, 0x7621, 0x6b4b, 0x717c, 0x7347, 0x606b, 0x6d7c, + 0x615b, 0x6e65, 0x5e75, 0x7a53, 0x714b, 0x502f, 0x5d39, 0x5143, + 0x7531, 0x6a46, 0x7061, 0x762c, 0x7559, 0x706b, 0x5d3a, 0x723f, + 0x7745, 0x5b22, 0x7276, 0x4a3a, 0x7775, 0x4b65, 0x6e66, 0x6053, + 0x4e25, 0x5658, 0x542f, 0x6949, 0x534e, 0x7442, 0x4b66, 0x7121, + 0x6b32, 0x7122, 0x6b33, 0x7034, 0x4b74, 0x5430, 0x7332, 0x7b37, + 0x756c, 0x6e67, 0x7432, 0x756d, 0x4f73, 0x7062, 0x6e4e, 0x714c, + 0x6538, 0x5775, 0x6373, 0x4f65, 0x4f46, 0x7333, 0x6458, 0x4f79, + 0x4f5a, 0x7a4d, 0x6663, 0x7262, 0x756e, 0x4a3b, 0x635c, 0x4e72, + 0x5659, 0x6e30, 0x7465, 0x5842, 0x5c50, 0x4c6e, 0x5560, 0x764a, + 0x7d4a, 0x5856, 0x744f, 0x5626, 0x5c3e, 0x5b54, 0x5747, 0x727e, + 0x714d, 0x6243, 0x5c5e, 0x5c5f, 0x6f2d, 0x662b, 0x795d, 0x6a3f, + 0x6f2e, 0x7450, 0x4e73, 0x662c, 0x4e5e, 0x5579, 0x6374, 0x4d50, + 0x5538, 0x777d, 0x5c29, 0x5e76, 0x5c2a, 0x7263, 0x6934, 0x525c, + 0x6966, 0x6376, 0x674a, 0x504e, 0x5a77, 0x4a3c, 0x6e68, 0x5a5e, + 0x7277, 0x627b, 0x4c26, 0x5a3b, 0x6e69, 0x755a, 0x775c, 0x616a, + 0x4e41, 0x5431, 0x7d31, 0x663d, 0x7b2d, 0x7867, 0x614e, 0x7762, + 0x756f, 0x4f47, 0x5432, 0x4c6f, 0x5468, 0x6e4f, 0x7757, 0x6026, + 0x5641, 0x615c, 0x7063, 0x7164, 0x5c71, 0x5627, 0x7475, 0x714e, + 0x7264, 0x5030, 0x6c6f, 0x793a, 0x6b35, 0x546d, 0x6244, 0x6967, + 0x6b34, 0x6a21, 0x783c, 0x4e26, 0x7946, 0x7c5a, 0x5433, 0x5339, + 0x6a5e, 0x692b, 0x6161, 0x534f, 0x7476, 0x6a40, 0x614f, 0x4c3a, + 0x6e6a, 0x7064, 0x7334, 0x546e, 0x7240, 0x7165, 0x7443, 0x6054, + 0x6b36, 0x5721, 0x4b68, 0x792d, 0x692d, 0x5864, 0x7a33, 0x6245, + 0x7c3d, 0x6c44, 0x5831, 0x5c2b, 0x5524, 0x6b69, 0x683b, 0x5857, + 0x7b2e, 0x5161, 0x5b40, 0x753e, 0x5e77, 0x4a7b, 0x7746, 0x4f48, + 0x6150, 0x6e50, 0x6974, 0x4e74, 0x554d, 0x4f5b, 0x5d3b, 0x4e2c, + 0x6968, 0x5434, 0x6447, 0x755b, 0x7a41, 0x5e29, 0x5478, 0x6f77, + 0x5333, 0x6b37, 0x6f78, 0x755c, 0x6d4c, 0x5b55, 0x714f, 0x7150, + 0x7532, 0x592e, 0x552c, 0x6246, 0x7d23, 0x7b65, 0x5f2b, 0x6275, + 0x762d, 0x7533, 0x7035, 0x6125, 0x755d, 0x6c22, 0x6d7d, 0x7534, + 0x7b38, 0x5b23, 0x564a, 0x4b59, 0x6554, 0x737a, 0x6b38, 0x6037, + 0x576c, 0x716c, 0x652f, 0x5561, 0x576d, 0x5151, 0x6172, 0x6f79, + 0x5d3c, 0x765c, 0x7065, 0x7444, 0x6969, 0x737b, 0x546f, 0x4c22, + 0x777e, 0x5f3c, 0x6b4d, 0x5037, 0x5642, 0x682d, 0x6f2f, 0x4b25, + 0x4b69, 0x7a68, 0x4c46, 0x6667, 0x6a47, 0x5b24, 0x4f49, 0x627c, + 0x6f7a, 0x6b5e, 0x7548, 0x545e, 0x6055, 0x6f30, 0x6247, 0x592f, + 0x7967, 0x6765, 0x4f4a, 0x6151, 0x6248, 0x6f7b, 0x7a79, 0x5c72, + 0x6027, 0x7868, 0x4b6a, 0x4b3c, 0x5662, 0x755e, 0x755f, 0x6e36, + 0x6276, 0x534a, 0x6f7c, 0x5144, 0x6f31, 0x5145, 0x505e, 0x5961, + 0x6038, 0x4d51, 0x7339, 0x674c, 0x5628, 0x4e27, 0x5435, 0x6448, + 0x5334, 0x6b39, 0x4b75, 0x765d, 0x7123, 0x4c47, 0x694a, 0x6170, + 0x7560, 0x7b2f, 0x4b51, 0x7b60, 0x7265, 0x6c70, 0x706c, 0x6e6b, + 0x694b, 0x4c70, 0x572f, 0x7321, 0x7c75, 0x7124, 0x6056, 0x6f32, + 0x7451, 0x7721, 0x7151, 0x4a7c, 0x4a7d, 0x4e4e, 0x7348, 0x733a, + 0x6d7e, 0x5a26, 0x606c, 0x784d, 0x4b52, 0x6b4e, 0x7958, 0x7959, + 0x4a60, 0x5a4a, 0x4b26, 0x4a48, 0x796e, 0x5b6c, 0x5031, 0x556f, + 0x6673, 0x6722, 0x6459, 0x6461, 0x7c44, 0x796f, 0x4f74, 0x7766, + 0x4e3c, 0x7445, 0x5c23, 0x5d3d, 0x7446, 0x7821, 0x6856, 0x5b41, + 0x7066, 0x6439, 0x766d, 0x792e, 0x5d3e, 0x5730, 0x5868, 0x4b3d, + 0x795a, 0x784e, 0x7970, 0x606d, 0x6333, 0x7433, 0x6a42, 0x7266, + 0x7036, 0x5b56, 0x6b64, 0x7267, 0x5755, 0x5436, 0x7968, 0x5741, + 0x6555, 0x696a, 0x574c, 0x5369, 0x6249, 0x7c5b, 0x4d2d, 0x4c30, + 0x6a22, 0x6476, 0x5040, 0x7037, 0x6e21, 0x5776, 0x624a, 0x624b, + 0x7a4f, 0x6b5f, 0x564b, 0x7434, 0x6d4d, 0x6452, 0x6a29, 0x643a, + 0x7322, 0x4d52, 0x764b, 0x7166, 0x6d41, 0x683c, 0x6e51, 0x7067, + 0x624c, 0x642a, 0x7561, 0x6d5a, 0x576e, 0x5171, 0x696b, 0x696c, + 0x6064, 0x5a27, 0x5d54, 0x6a23, 0x5643, 0x5674, 0x5a5f, 0x6f33, + 0x624d, 0x6f7d, 0x7268, 0x6f45, 0x6767, 0x577d, 0x674e, 0x5f5c, + 0x7947, 0x5976, 0x5f2c, 0x565a, 0x5c24, 0x7038, 0x557a, 0x6477, + 0x5644, 0x746c, 0x6f7e, 0x7021, 0x5e2a, 0x5a3c, 0x587c, 0x7a54, + 0x6c65, 0x7c28, 0x6c66, 0x584b, 0x7b39, 0x6453, 0x4d79, 0x4f53, + 0x4a6a, 0x4f54, 0x783d, 0x7447, 0x6a5f, 0x795b, 0x5437, 0x6b65, + 0x6152, 0x6a24, 0x7a42, 0x7b61, 0x7a6d, 0x7022, 0x4c71, 0x7a23, + 0x6277, 0x624e, 0x6975, 0x616b, 0x6768, 0x6857, 0x5a78, 0x544b, + 0x7776, 0x5645, 0x5469, 0x7a7a, 0x4c72, 0x775d, 0x5e3a, 0x4e28, + 0x7039, 0x647e, 0x6449, 0x6454, 0x6a43, 0x6f34, 0x573e, 0x7b62, + 0x4d53, 0x6f35, 0x7a69, 0x7926, 0x5f3d, 0x7747, 0x787d, 0x787c, + 0x5e2b, 0x5b68, 0x635d, 0x6162, 0x5146, 0x7650, 0x6b66, 0x5a79, + 0x6c47, 0x5e78, 0x7869, 0x635e, 0x4e75, 0x7a43, 0x6557, 0x6c48, + 0x7349, 0x643b, 0x662e, 0x6f36, 0x5c3f, 0x4e3d, 0x5843, 0x504f, + 0x4f7a, 0x734a, 0x6057, 0x5147, 0x692e, 0x683d, 0x7a44, 0x624f, + 0x7a45, 0x7938, 0x5c60, 0x7b30, 0x5829, 0x655f, 0x7927, 0x766e, + 0x764c, 0x6278, 0x6c71, 0x5a60, 0x7152, 0x524c, 0x4f4b, 0x4a3d, + 0x5d3f, 0x766f, 0x5e79, 0x7a34, 0x552d, 0x7167, 0x5e3e, 0x5c40, + 0x5148, 0x5149, 0x783e, 0x4b76, 0x5479, 0x7562, 0x6153, 0x5869, + 0x787e, 0x4f4c, 0x7d24, 0x4e76, 0x7a50, 0x4c73, 0x663e, 0x762e, + 0x5570, 0x514a, 0x7c3e, 0x5571, 0x4d69, 0x7a35, 0x6250, 0x7477, + 0x4d54, 0x6723, 0x5b25, 0x6251, 0x5722, 0x7763, 0x6a26, 0x5021, + 0x4e5a, 0x7b6b, 0x5b26, 0x5b5e, 0x5865, 0x6a60, 0x582a, 0x6560, + 0x565b, 0x6f46, 0x786a, 0x6455, 0x4e77, 0x6058, 0x576f, 0x746d, + 0x4d66, 0x4c74, 0x7563, 0x644a, 0x5c61, 0x7948, 0x7c3f, 0x6827, + 0x5844, 0x4b3e, 0x5c2e, 0x5777, 0x7068, 0x5d40, 0x4f4d, 0x5c73, + 0x5930, 0x6669, 0x643c, 0x6a44, 0x646c, 0x6465, 0x7b78, 0x4c3b, + 0x643d, 0x4d5c, 0x5977, 0x5d5f, 0x6d4e, 0x5950, 0x6523, 0x794d, + 0x4d2e, 0x4f4e, 0x762f, 0x7d53, 0x6b6d, 0x565c, 0x6524, 0x5536, + 0x565d, 0x7969, 0x6724, 0x5663, 0x514b, 0x5664, 0x5572, 0x5e7a, + 0x5778, 0x586a, 0x4f55, 0x587d, 0x582b, 0x7d4b, 0x7c5c, 0x6028, + 0x5573, 0x7d59, 0x4c23, 0x5979, 0x536a, 0x7575, 0x6f47, 0x535a, + 0x5a3d, 0x6828, 0x5c2f, 0x7023, 0x4d55, 0x6029, 0x5e2c, 0x703a, + 0x6e31, 0x6e32, 0x764d, 0x6e52, 0x5646, 0x6065, 0x733b, 0x6561, + 0x644b, 0x5723, 0x5b42, 0x4a7e, 0x4f4f, 0x3021, 0x3022, 0x3023, + 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0x302a, 0x302b, + 0x302c, 0x302d, 0x302e, 0x302f, 0x3030, 0x3031, 0x3032, 0x3033, + 0x3034, 0x3035, 0x3036, 0x3037, 0x3038, 0x3039, 0x303a, 0x303b, + 0x303c, 0x303d, 0x303e, 0x303f, 0x3040, 0x3041, 0x3042, 0x3043, + 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, + 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, + 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, + 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, + 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, + 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, + 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, + 0x307c, 0x307d, 0x307e, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, + 0x3126, 0x3127, 0x3128, 0x3129, 0x312a, 0x312b, 0x312c, 0x312d, + 0x312e, 0x312f, 0x3130, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, + 0x3136, 0x3137, 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, + 0x313e, 0x313f, 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, + 0x3146, 0x3147, 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, + 0x314e, 0x314f, 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, + 0x3156, 0x3157, 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, + 0x315e, 0x315f, 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, + 0x3166, 0x3167, 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, + 0x316e, 0x316f, 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, + 0x3176, 0x3177, 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, + 0x317e, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, + 0x3228, 0x3229, 0x322a, 0x322b, 0x322c, 0x322d, 0x322e, 0x322f, + 0x3230, 0x3231, 0x3232, 0x3233, 0x3234, 0x3235, 0x3236, 0x3237, + 0x3238, 0x3239, 0x323a, 0x323b, 0x323c, 0x323d, 0x323e, 0x323f, + 0x3240, 0x3241, 0x3242, 0x3243, 0x3244, 0x3245, 0x3246, 0x3247, + 0x3248, 0x3249, 0x324a, 0x324b, 0x324c, 0x324d, 0x324e, 0x324f, + 0x3250, 0x3251, 0x3252, 0x3253, 0x3254, 0x3255, 0x3256, 0x3257, + 0x3258, 0x3259, 0x325a, 0x325b, 0x325c, 0x325d, 0x325e, 0x325f, + 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267, + 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f, + 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277, + 0x3278, 0x3279, 0x327a, 0x327b, 0x327c, 0x327d, 0x327e, 0x3321, + 0x3322, 0x3323, 0x3324, 0x3325, 0x3326, 0x3327, 0x3328, 0x3329, + 0x332a, 0x332b, 0x332c, 0x332d, 0x332e, 0x332f, 0x3330, 0x3331, + 0x3332, 0x3333, 0x3334, 0x3335, 0x3336, 0x3337, 0x3338, 0x3339, + 0x333a, 0x333b, 0x333c, 0x333d, 0x333e, 0x333f, 0x3340, 0x3341, + 0x3342, 0x3343, 0x3344, 0x3345, 0x3346, 0x3347, 0x3348, 0x3349, + 0x334a, 0x334b, 0x334c, 0x334d, 0x334e, 0x334f, 0x3350, 0x3351, + 0x3352, 0x3353, 0x3354, 0x3355, 0x3356, 0x3357, 0x3358, 0x3359, + 0x335a, 0x335b, 0x335c, 0x335d, 0x335e, 0x335f, 0x3360, 0x3361, + 0x3362, 0x3363, 0x3364, 0x3365, 0x3366, 0x3367, 0x3368, 0x3369, + 0x336a, 0x336b, 0x336c, 0x336d, 0x336e, 0x336f, 0x3370, 0x3371, + 0x3372, 0x3373, 0x3374, 0x3375, 0x3376, 0x3377, 0x3378, 0x3379, + 0x337a, 0x337b, 0x337c, 0x337d, 0x337e, 0x3421, 0x3422, 0x3423, + 0x3424, 0x3425, 0x3426, 0x3427, 0x3428, 0x3429, 0x342a, 0x342b, + 0x342c, 0x342d, 0x342e, 0x342f, 0x3430, 0x3431, 0x3432, 0x3433, + 0x3434, 0x3435, 0x3436, 0x3437, 0x3438, 0x3439, 0x343a, 0x343b, + 0x343c, 0x343d, 0x343e, 0x343f, 0x3440, 0x3441, 0x3442, 0x3443, + 0x3444, 0x3445, 0x3446, 0x3447, 0x3448, 0x3449, 0x344a, 0x344b, + 0x344c, 0x344d, 0x344e, 0x344f, 0x3450, 0x3451, 0x3452, 0x3453, + 0x3454, 0x3455, 0x3456, 0x3457, 0x3458, 0x3459, 0x345a, 0x345b, + 0x345c, 0x345d, 0x345e, 0x345f, 0x3460, 0x3461, 0x3462, 0x3463, + 0x3464, 0x3465, 0x3466, 0x3467, 0x3468, 0x3469, 0x346a, 0x346b, + 0x346c, 0x346d, 0x346e, 0x346f, 0x3470, 0x3471, 0x3472, 0x3473, + 0x3474, 0x3475, 0x3476, 0x3477, 0x3478, 0x3479, 0x347a, 0x347b, + 0x347c, 0x347d, 0x347e, 0x3521, 0x3522, 0x3523, 0x3524, 0x3525, + 0x3526, 0x3527, 0x3528, 0x3529, 0x352a, 0x352b, 0x352c, 0x352d, + 0x352e, 0x352f, 0x3530, 0x3531, 0x3532, 0x3533, 0x3534, 0x3535, + 0x3536, 0x3537, 0x3538, 0x3539, 0x353a, 0x353b, 0x353c, 0x353d, + 0x353e, 0x353f, 0x3540, 0x3541, 0x3542, 0x3543, 0x3544, 0x3545, + 0x3546, 0x3547, 0x3548, 0x3549, 0x354a, 0x354b, 0x354c, 0x354d, + 0x354e, 0x354f, 0x3550, 0x3551, 0x3552, 0x3553, 0x3554, 0x3555, + 0x3556, 0x3557, 0x3558, 0x3559, 0x355a, 0x355b, 0x355c, 0x355d, + 0x355e, 0x355f, 0x3560, 0x3561, 0x3562, 0x3563, 0x3564, 0x3565, + 0x3566, 0x3567, 0x3568, 0x3569, 0x356a, 0x356b, 0x356c, 0x356d, + 0x356e, 0x356f, 0x3570, 0x3571, 0x3572, 0x3573, 0x3574, 0x3575, + 0x3576, 0x3577, 0x3578, 0x3579, 0x357a, 0x357b, 0x357c, 0x357d, + 0x357e, 0x3621, 0x3622, 0x3623, 0x3624, 0x3625, 0x3626, 0x3627, + 0x3628, 0x3629, 0x362a, 0x362b, 0x362c, 0x362d, 0x362e, 0x362f, + 0x3630, 0x3631, 0x3632, 0x3633, 0x3634, 0x3635, 0x3636, 0x3637, + 0x3638, 0x3639, 0x363a, 0x363b, 0x363c, 0x363d, 0x363e, 0x363f, + 0x3640, 0x3641, 0x3642, 0x3643, 0x3644, 0x3645, 0x3646, 0x3647, + 0x3648, 0x3649, 0x364a, 0x364b, 0x364c, 0x364d, 0x364e, 0x364f, + 0x3650, 0x3651, 0x3652, 0x3653, 0x3654, 0x3655, 0x3656, 0x3657, + 0x3658, 0x3659, 0x365a, 0x365b, 0x365c, 0x365d, 0x365e, 0x365f, + 0x3660, 0x3661, 0x3662, 0x3663, 0x3664, 0x3665, 0x3666, 0x3667, + 0x3668, 0x3669, 0x366a, 0x366b, 0x366c, 0x366d, 0x366e, 0x366f, + 0x3670, 0x3671, 0x3672, 0x3673, 0x3674, 0x3675, 0x3676, 0x3677, + 0x3678, 0x3679, 0x367a, 0x367b, 0x367c, 0x367d, 0x367e, 0x3721, + 0x3722, 0x3723, 0x3724, 0x3725, 0x3726, 0x3727, 0x3728, 0x3729, + 0x372a, 0x372b, 0x372c, 0x372d, 0x372e, 0x372f, 0x3730, 0x3731, + 0x3732, 0x3733, 0x3734, 0x3735, 0x3736, 0x3737, 0x3738, 0x3739, + 0x373a, 0x373b, 0x373c, 0x373d, 0x373e, 0x373f, 0x3740, 0x3741, + 0x3742, 0x3743, 0x3744, 0x3745, 0x3746, 0x3747, 0x3748, 0x3749, + 0x374a, 0x374b, 0x374c, 0x374d, 0x374e, 0x374f, 0x3750, 0x3751, + 0x3752, 0x3753, 0x3754, 0x3755, 0x3756, 0x3757, 0x3758, 0x3759, + 0x375a, 0x375b, 0x375c, 0x375d, 0x375e, 0x375f, 0x3760, 0x3761, + 0x3762, 0x3763, 0x3764, 0x3765, 0x3766, 0x3767, 0x3768, 0x3769, + 0x376a, 0x376b, 0x376c, 0x376d, 0x376e, 0x376f, 0x3770, 0x3771, + 0x3772, 0x3773, 0x3774, 0x3775, 0x3776, 0x3777, 0x3778, 0x3779, + 0x377a, 0x377b, 0x377c, 0x377d, 0x377e, 0x3821, 0x3822, 0x3823, + 0x3824, 0x3825, 0x3826, 0x3827, 0x3828, 0x3829, 0x382a, 0x382b, + 0x382c, 0x382d, 0x382e, 0x382f, 0x3830, 0x3831, 0x3832, 0x3833, + 0x3834, 0x3835, 0x3836, 0x3837, 0x3838, 0x3839, 0x383a, 0x383b, + 0x383c, 0x383d, 0x383e, 0x383f, 0x3840, 0x3841, 0x3842, 0x3843, + 0x3844, 0x3845, 0x3846, 0x3847, 0x3848, 0x3849, 0x384a, 0x384b, + 0x384c, 0x384d, 0x384e, 0x384f, 0x3850, 0x3851, 0x3852, 0x3853, + 0x3854, 0x3855, 0x3856, 0x3857, 0x3858, 0x3859, 0x385a, 0x385b, + 0x385c, 0x385d, 0x385e, 0x385f, 0x3860, 0x3861, 0x3862, 0x3863, + 0x3864, 0x3865, 0x3866, 0x3867, 0x3868, 0x3869, 0x386a, 0x386b, + 0x386c, 0x386d, 0x386e, 0x386f, 0x3870, 0x3871, 0x3872, 0x3873, + 0x3874, 0x3875, 0x3876, 0x3877, 0x3878, 0x3879, 0x387a, 0x387b, + 0x387c, 0x387d, 0x387e, 0x3921, 0x3922, 0x3923, 0x3924, 0x3925, + 0x3926, 0x3927, 0x3928, 0x3929, 0x392a, 0x392b, 0x392c, 0x392d, + 0x392e, 0x392f, 0x3930, 0x3931, 0x3932, 0x3933, 0x3934, 0x3935, + 0x3936, 0x3937, 0x3938, 0x3939, 0x393a, 0x393b, 0x393c, 0x393d, + 0x393e, 0x393f, 0x3940, 0x3941, 0x3942, 0x3943, 0x3944, 0x3945, + 0x3946, 0x3947, 0x3948, 0x3949, 0x394a, 0x394b, 0x394c, 0x394d, + 0x394e, 0x394f, 0x3950, 0x3951, 0x3952, 0x3953, 0x3954, 0x3955, + 0x3956, 0x3957, 0x3958, 0x3959, 0x395a, 0x395b, 0x395c, 0x395d, + 0x395e, 0x395f, 0x3960, 0x3961, 0x3962, 0x3963, 0x3964, 0x3965, + 0x3966, 0x3967, 0x3968, 0x3969, 0x396a, 0x396b, 0x396c, 0x396d, + 0x396e, 0x396f, 0x3970, 0x3971, 0x3972, 0x3973, 0x3974, 0x3975, + 0x3976, 0x3977, 0x3978, 0x3979, 0x397a, 0x397b, 0x397c, 0x397d, + 0x397e, 0x3a21, 0x3a22, 0x3a23, 0x3a24, 0x3a25, 0x3a26, 0x3a27, + 0x3a28, 0x3a29, 0x3a2a, 0x3a2b, 0x3a2c, 0x3a2d, 0x3a2e, 0x3a2f, + 0x3a30, 0x3a31, 0x3a32, 0x3a33, 0x3a34, 0x3a35, 0x3a36, 0x3a37, + 0x3a38, 0x3a39, 0x3a3a, 0x3a3b, 0x3a3c, 0x3a3d, 0x3a3e, 0x3a3f, + 0x3a40, 0x3a41, 0x3a42, 0x3a43, 0x3a44, 0x3a45, 0x3a46, 0x3a47, + 0x3a48, 0x3a49, 0x3a4a, 0x3a4b, 0x3a4c, 0x3a4d, 0x3a4e, 0x3a4f, + 0x3a50, 0x3a51, 0x3a52, 0x3a53, 0x3a54, 0x3a55, 0x3a56, 0x3a57, + 0x3a58, 0x3a59, 0x3a5a, 0x3a5b, 0x3a5c, 0x3a5d, 0x3a5e, 0x3a5f, + 0x3a60, 0x3a61, 0x3a62, 0x3a63, 0x3a64, 0x3a65, 0x3a66, 0x3a67, + 0x3a68, 0x3a69, 0x3a6a, 0x3a6b, 0x3a6c, 0x3a6d, 0x3a6e, 0x3a6f, + 0x3a70, 0x3a71, 0x3a72, 0x3a73, 0x3a74, 0x3a75, 0x3a76, 0x3a77, + 0x3a78, 0x3a79, 0x3a7a, 0x3a7b, 0x3a7c, 0x3a7d, 0x3a7e, 0x3b21, + 0x3b22, 0x3b23, 0x3b24, 0x3b25, 0x3b26, 0x3b27, 0x3b28, 0x3b29, + 0x3b2a, 0x3b2b, 0x3b2c, 0x3b2d, 0x3b2e, 0x3b2f, 0x3b30, 0x3b31, + 0x3b32, 0x3b33, 0x3b34, 0x3b35, 0x3b36, 0x3b37, 0x3b38, 0x3b39, + 0x3b3a, 0x3b3b, 0x3b3c, 0x3b3d, 0x3b3e, 0x3b3f, 0x3b40, 0x3b41, + 0x3b42, 0x3b43, 0x3b44, 0x3b45, 0x3b46, 0x3b47, 0x3b48, 0x3b49, + 0x3b4a, 0x3b4b, 0x3b4c, 0x3b4d, 0x3b4e, 0x3b4f, 0x3b50, 0x3b51, + 0x3b52, 0x3b53, 0x3b54, 0x3b55, 0x3b56, 0x3b57, 0x3b58, 0x3b59, + 0x3b5a, 0x3b5b, 0x3b5c, 0x3b5d, 0x3b5e, 0x3b5f, 0x3b60, 0x3b61, + 0x3b62, 0x3b63, 0x3b64, 0x3b65, 0x3b66, 0x3b67, 0x3b68, 0x3b69, + 0x3b6a, 0x3b6b, 0x3b6c, 0x3b6d, 0x3b6e, 0x3b6f, 0x3b70, 0x3b71, + 0x3b72, 0x3b73, 0x3b74, 0x3b75, 0x3b76, 0x3b77, 0x3b78, 0x3b79, + 0x3b7a, 0x3b7b, 0x3b7c, 0x3b7d, 0x3b7e, 0x3c21, 0x3c22, 0x3c23, + 0x3c24, 0x3c25, 0x3c26, 0x3c27, 0x3c28, 0x3c29, 0x3c2a, 0x3c2b, + 0x3c2c, 0x3c2d, 0x3c2e, 0x3c2f, 0x3c30, 0x3c31, 0x3c32, 0x3c33, + 0x3c34, 0x3c35, 0x3c36, 0x3c37, 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, + 0x3c3c, 0x3c3d, 0x3c3e, 0x3c3f, 0x3c40, 0x3c41, 0x3c42, 0x3c43, + 0x3c44, 0x3c45, 0x3c46, 0x3c47, 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, + 0x3c4c, 0x3c4d, 0x3c4e, 0x3c4f, 0x3c50, 0x3c51, 0x3c52, 0x3c53, + 0x3c54, 0x3c55, 0x3c56, 0x3c57, 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, + 0x3c5c, 0x3c5d, 0x3c5e, 0x3c5f, 0x3c60, 0x3c61, 0x3c62, 0x3c63, + 0x3c64, 0x3c65, 0x3c66, 0x3c67, 0x3c68, 0x3c69, 0x3c6a, 0x3c6b, + 0x3c6c, 0x3c6d, 0x3c6e, 0x3c6f, 0x3c70, 0x3c71, 0x3c72, 0x3c73, + 0x3c74, 0x3c75, 0x3c76, 0x3c77, 0x3c78, 0x3c79, 0x3c7a, 0x3c7b, + 0x3c7c, 0x3c7d, 0x3c7e, 0x3d21, 0x3d22, 0x3d23, 0x3d24, 0x3d25, + 0x3d26, 0x3d27, 0x3d28, 0x3d29, 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, + 0x3d2e, 0x3d2f, 0x3d30, 0x3d31, 0x3d32, 0x3d33, 0x3d34, 0x3d35, + 0x3d36, 0x3d37, 0x3d38, 0x3d39, 0x3d3a, 0x3d3b, 0x3d3c, 0x3d3d, + 0x3d3e, 0x3d3f, 0x3d40, 0x3d41, 0x3d42, 0x3d43, 0x3d44, 0x3d45, + 0x3d46, 0x3d47, 0x3d48, 0x3d49, 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4d, + 0x3d4e, 0x3d4f, 0x3d50, 0x3d51, 0x3d52, 0x3d53, 0x3d54, 0x3d55, + 0x3d56, 0x3d57, 0x3d58, 0x3d59, 0x3d5a, 0x3d5b, 0x3d5c, 0x3d5d, + 0x3d5e, 0x3d5f, 0x3d60, 0x3d61, 0x3d62, 0x3d63, 0x3d64, 0x3d65, + 0x3d66, 0x3d67, 0x3d68, 0x3d69, 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6d, + 0x3d6e, 0x3d6f, 0x3d70, 0x3d71, 0x3d72, 0x3d73, 0x3d74, 0x3d75, + 0x3d76, 0x3d77, 0x3d78, 0x3d79, 0x3d7a, 0x3d7b, 0x3d7c, 0x3d7d, + 0x3d7e, 0x3e21, 0x3e22, 0x3e23, 0x3e24, 0x3e25, 0x3e26, 0x3e27, + 0x3e28, 0x3e29, 0x3e2a, 0x3e2b, 0x3e2c, 0x3e2d, 0x3e2e, 0x3e2f, + 0x3e30, 0x3e31, 0x3e32, 0x3e33, 0x3e34, 0x3e35, 0x3e36, 0x3e37, + 0x3e38, 0x3e39, 0x3e3a, 0x3e3b, 0x3e3c, 0x3e3d, 0x3e3e, 0x3e3f, + 0x3e40, 0x3e41, 0x3e42, 0x3e43, 0x3e44, 0x3e45, 0x3e46, 0x3e47, + 0x3e48, 0x3e49, 0x3e4a, 0x3e4b, 0x3e4c, 0x3e4d, 0x3e4e, 0x3e4f, + 0x3e50, 0x3e51, 0x3e52, 0x3e53, 0x3e54, 0x3e55, 0x3e56, 0x3e57, + 0x3e58, 0x3e59, 0x3e5a, 0x3e5b, 0x3e5c, 0x3e5d, 0x3e5e, 0x3e5f, + 0x3e60, 0x3e61, 0x3e62, 0x3e63, 0x3e64, 0x3e65, 0x3e66, 0x3e67, + 0x3e68, 0x3e69, 0x3e6a, 0x3e6b, 0x3e6c, 0x3e6d, 0x3e6e, 0x3e6f, + 0x3e70, 0x3e71, 0x3e72, 0x3e73, 0x3e74, 0x3e75, 0x3e76, 0x3e77, + 0x3e78, 0x3e79, 0x3e7a, 0x3e7b, 0x3e7c, 0x3e7d, 0x3e7e, 0x3f21, + 0x3f22, 0x3f23, 0x3f24, 0x3f25, 0x3f26, 0x3f27, 0x3f28, 0x3f29, + 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, 0x3f2e, 0x3f2f, 0x3f30, 0x3f31, + 0x3f32, 0x3f33, 0x3f34, 0x3f35, 0x3f36, 0x3f37, 0x3f38, 0x3f39, + 0x3f3a, 0x3f3b, 0x3f3c, 0x3f3d, 0x3f3e, 0x3f3f, 0x3f40, 0x3f41, + 0x3f42, 0x3f43, 0x3f44, 0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, + 0x3f4a, 0x3f4b, 0x3f4c, 0x3f4d, 0x3f4e, 0x3f4f, 0x3f50, 0x3f51, + 0x3f52, 0x3f53, 0x3f54, 0x3f55, 0x3f56, 0x3f57, 0x3f58, 0x3f59, + 0x3f5a, 0x3f5b, 0x3f5c, 0x3f5d, 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, + 0x3f62, 0x3f63, 0x3f64, 0x3f65, 0x3f66, 0x3f67, 0x3f68, 0x3f69, + 0x3f6a, 0x3f6b, 0x3f6c, 0x3f6d, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, + 0x3f72, 0x3f73, 0x3f74, 0x3f75, 0x3f76, 0x3f77, 0x3f78, 0x3f79, + 0x3f7a, 0x3f7b, 0x3f7c, 0x3f7d, 0x3f7e, 0x4021, 0x4022, 0x4023, + 0x4024, 0x4025, 0x4026, 0x4027, 0x4028, 0x4029, 0x402a, 0x402b, + 0x402c, 0x402d, 0x402e, 0x402f, 0x4030, 0x4031, 0x4032, 0x4033, + 0x4034, 0x4035, 0x4036, 0x4037, 0x4038, 0x4039, 0x403a, 0x403b, + 0x403c, 0x403d, 0x403e, 0x403f, 0x4040, 0x4041, 0x4042, 0x4043, + 0x4044, 0x4045, 0x4046, 0x4047, 0x4048, 0x4049, 0x404a, 0x404b, + 0x404c, 0x404d, 0x404e, 0x404f, 0x4050, 0x4051, 0x4052, 0x4053, + 0x4054, 0x4055, 0x4056, 0x4057, 0x4058, 0x4059, 0x405a, 0x405b, + 0x405c, 0x405d, 0x405e, 0x405f, 0x4060, 0x4061, 0x4062, 0x4063, + 0x4064, 0x4065, 0x4066, 0x4067, 0x4068, 0x4069, 0x406a, 0x406b, + 0x406c, 0x406d, 0x406e, 0x406f, 0x4070, 0x4071, 0x4072, 0x4073, + 0x4074, 0x4075, 0x4076, 0x4077, 0x4078, 0x4079, 0x407a, 0x407b, + 0x407c, 0x407d, 0x407e, 0x4121, 0x4122, 0x4123, 0x4124, 0x4125, + 0x4126, 0x4127, 0x4128, 0x4129, 0x412a, 0x412b, 0x412c, 0x412d, + 0x412e, 0x412f, 0x4130, 0x4131, 0x4132, 0x4133, 0x4134, 0x4135, + 0x4136, 0x4137, 0x4138, 0x4139, 0x413a, 0x413b, 0x413c, 0x413d, + 0x413e, 0x413f, 0x4140, 0x4141, 0x4142, 0x4143, 0x4144, 0x4145, + 0x4146, 0x4147, 0x4148, 0x4149, 0x414a, 0x414b, 0x414c, 0x414d, + 0x414e, 0x414f, 0x4150, 0x4151, 0x4152, 0x4153, 0x4154, 0x4155, + 0x4156, 0x4157, 0x4158, 0x4159, 0x415a, 0x415b, 0x415c, 0x415d, + 0x415e, 0x415f, 0x4160, 0x4161, 0x4162, 0x4163, 0x4164, 0x4165, + 0x4166, 0x4167, 0x4168, 0x4169, 0x416a, 0x416b, 0x416c, 0x416d, + 0x416e, 0x416f, 0x4170, 0x4171, 0x4172, 0x4173, 0x4174, 0x4175, + 0x4176, 0x4177, 0x4178, 0x4179, 0x417a, 0x417b, 0x417c, 0x417d, + 0x417e, 0x4221, 0x4222, 0x4223, 0x4224, 0x4225, 0x4226, 0x4227, + 0x4228, 0x4229, 0x422a, 0x422b, 0x422c, 0x422d, 0x422e, 0x422f, + 0x4230, 0x4231, 0x4232, 0x4233, 0x4234, 0x4235, 0x4236, 0x4237, + 0x4238, 0x4239, 0x423a, 0x423b, 0x423c, 0x423d, 0x423e, 0x423f, + 0x4240, 0x4241, 0x4242, 0x4243, 0x4244, 0x4245, 0x4246, 0x4247, + 0x4248, 0x4249, 0x424a, 0x424b, 0x424c, 0x424d, 0x424e, 0x424f, + 0x4250, 0x4251, 0x4252, 0x4253, 0x4254, 0x4255, 0x4256, 0x4257, + 0x4258, 0x4259, 0x425a, 0x425b, 0x425c, 0x425d, 0x425e, 0x425f, + 0x4260, 0x4261, 0x4262, 0x4263, 0x4264, 0x4265, 0x4266, 0x4267, + 0x4268, 0x4269, 0x426a, 0x426b, 0x426c, 0x426d, 0x426e, 0x426f, + 0x4270, 0x4271, 0x4272, 0x4273, 0x4274, 0x4275, 0x4276, 0x4277, + 0x4278, 0x4279, 0x427a, 0x427b, 0x427c, 0x427d, 0x427e, 0x4321, + 0x4322, 0x4323, 0x4324, 0x4325, 0x4326, 0x4327, 0x4328, 0x4329, + 0x432a, 0x432b, 0x432c, 0x432d, 0x432e, 0x432f, 0x4330, 0x4331, + 0x4332, 0x4333, 0x4334, 0x4335, 0x4336, 0x4337, 0x4338, 0x4339, + 0x433a, 0x433b, 0x433c, 0x433d, 0x433e, 0x433f, 0x4340, 0x4341, + 0x4342, 0x4343, 0x4344, 0x4345, 0x4346, 0x4347, 0x4348, 0x4349, + 0x434a, 0x434b, 0x434c, 0x434d, 0x434e, 0x434f, 0x4350, 0x4351, + 0x4352, 0x4353, 0x4354, 0x4355, 0x4356, 0x4357, 0x4358, 0x4359, + 0x435a, 0x435b, 0x435c, 0x435d, 0x435e, 0x435f, 0x4360, 0x4361, + 0x4362, 0x4363, 0x4364, 0x4365, 0x4366, 0x4367, 0x4368, 0x4369, + 0x436a, 0x436b, 0x436c, 0x436d, 0x436e, 0x436f, 0x4370, 0x4371, + 0x4372, 0x4373, 0x4374, 0x4375, 0x4376, 0x4377, 0x4378, 0x4379, + 0x437a, 0x437b, 0x437c, 0x437d, 0x437e, 0x4421, 0x4422, 0x4423, + 0x4424, 0x4425, 0x4426, 0x4427, 0x4428, 0x4429, 0x442a, 0x442b, + 0x442c, 0x442d, 0x442e, 0x442f, 0x4430, 0x4431, 0x4432, 0x4433, + 0x4434, 0x4435, 0x4436, 0x4437, 0x4438, 0x4439, 0x443a, 0x443b, + 0x443c, 0x443d, 0x443e, 0x443f, 0x4440, 0x4441, 0x4442, 0x4443, + 0x4444, 0x4445, 0x4446, 0x4447, 0x4448, 0x4449, 0x444a, 0x444b, + 0x444c, 0x444d, 0x444e, 0x444f, 0x4450, 0x4451, 0x4452, 0x4453, + 0x4454, 0x4455, 0x4456, 0x4457, 0x4458, 0x4459, 0x445a, 0x445b, + 0x445c, 0x445d, 0x445e, 0x445f, 0x4460, 0x4461, 0x4462, 0x4463, + 0x4464, 0x4465, 0x4466, 0x4467, 0x4468, 0x4469, 0x446a, 0x446b, + 0x446c, 0x446d, 0x446e, 0x446f, 0x4470, 0x4471, 0x4472, 0x4473, + 0x4474, 0x4475, 0x4476, 0x4477, 0x4478, 0x4479, 0x447a, 0x447b, + 0x447c, 0x447d, 0x447e, 0x4521, 0x4522, 0x4523, 0x4524, 0x4525, + 0x4526, 0x4527, 0x4528, 0x4529, 0x452a, 0x452b, 0x452c, 0x452d, + 0x452e, 0x452f, 0x4530, 0x4531, 0x4532, 0x4533, 0x4534, 0x4535, + 0x4536, 0x4537, 0x4538, 0x4539, 0x453a, 0x453b, 0x453c, 0x453d, + 0x453e, 0x453f, 0x4540, 0x4541, 0x4542, 0x4543, 0x4544, 0x4545, + 0x4546, 0x4547, 0x4548, 0x4549, 0x454a, 0x454b, 0x454c, 0x454d, + 0x454e, 0x454f, 0x4550, 0x4551, 0x4552, 0x4553, 0x4554, 0x4555, + 0x4556, 0x4557, 0x4558, 0x4559, 0x455a, 0x455b, 0x455c, 0x455d, + 0x455e, 0x455f, 0x4560, 0x4561, 0x4562, 0x4563, 0x4564, 0x4565, + 0x4566, 0x4567, 0x4568, 0x4569, 0x456a, 0x456b, 0x456c, 0x456d, + 0x456e, 0x456f, 0x4570, 0x4571, 0x4572, 0x4573, 0x4574, 0x4575, + 0x4576, 0x4577, 0x4578, 0x4579, 0x457a, 0x457b, 0x457c, 0x457d, + 0x457e, 0x4621, 0x4622, 0x4623, 0x4624, 0x4625, 0x4626, 0x4627, + 0x4628, 0x4629, 0x462a, 0x462b, 0x462c, 0x462d, 0x462e, 0x462f, + 0x4630, 0x4631, 0x4632, 0x4633, 0x4634, 0x4635, 0x4636, 0x4637, + 0x4638, 0x4639, 0x463a, 0x463b, 0x463c, 0x463d, 0x463e, 0x463f, + 0x4640, 0x4641, 0x4642, 0x4643, 0x4644, 0x4645, 0x4646, 0x4647, + 0x4648, 0x4649, 0x464a, 0x464b, 0x464c, 0x464d, 0x464e, 0x464f, + 0x4650, 0x4651, 0x4652, 0x4653, 0x4654, 0x4655, 0x4656, 0x4657, + 0x4658, 0x4659, 0x465a, 0x465b, 0x465c, 0x465d, 0x465e, 0x465f, + 0x4660, 0x4661, 0x4662, 0x4663, 0x4664, 0x4665, 0x4666, 0x4667, + 0x4668, 0x4669, 0x466a, 0x466b, 0x466c, 0x466d, 0x466e, 0x466f, + 0x4670, 0x4671, 0x4672, 0x4673, 0x4674, 0x4675, 0x4676, 0x4677, + 0x4678, 0x4679, 0x467a, 0x467b, 0x467c, 0x467d, 0x467e, 0x4721, + 0x4722, 0x4723, 0x4724, 0x4725, 0x4726, 0x4727, 0x4728, 0x4729, + 0x472a, 0x472b, 0x472c, 0x472d, 0x472e, 0x472f, 0x4730, 0x4731, + 0x4732, 0x4733, 0x4734, 0x4735, 0x4736, 0x4737, 0x4738, 0x4739, + 0x473a, 0x473b, 0x473c, 0x473d, 0x473e, 0x473f, 0x4740, 0x4741, + 0x4742, 0x4743, 0x4744, 0x4745, 0x4746, 0x4747, 0x4748, 0x4749, + 0x474a, 0x474b, 0x474c, 0x474d, 0x474e, 0x474f, 0x4750, 0x4751, + 0x4752, 0x4753, 0x4754, 0x4755, 0x4756, 0x4757, 0x4758, 0x4759, + 0x475a, 0x475b, 0x475c, 0x475d, 0x475e, 0x475f, 0x4760, 0x4761, + 0x4762, 0x4763, 0x4764, 0x4765, 0x4766, 0x4767, 0x4768, 0x4769, + 0x476a, 0x476b, 0x476c, 0x476d, 0x476e, 0x476f, 0x4770, 0x4771, + 0x4772, 0x4773, 0x4774, 0x4775, 0x4776, 0x4777, 0x4778, 0x4779, + 0x477a, 0x477b, 0x477c, 0x477d, 0x477e, 0x4821, 0x4822, 0x4823, + 0x4824, 0x4825, 0x4826, 0x4827, 0x4828, 0x4829, 0x482a, 0x482b, + 0x482c, 0x482d, 0x482e, 0x482f, 0x4830, 0x4831, 0x4832, 0x4833, + 0x4834, 0x4835, 0x4836, 0x4837, 0x4838, 0x4839, 0x483a, 0x483b, + 0x483c, 0x483d, 0x483e, 0x483f, 0x4840, 0x4841, 0x4842, 0x4843, + 0x4844, 0x4845, 0x4846, 0x4847, 0x4848, 0x4849, 0x484a, 0x484b, + 0x484c, 0x484d, 0x484e, 0x484f, 0x4850, 0x4851, 0x4852, 0x4853, + 0x4854, 0x4855, 0x4856, 0x4857, 0x4858, 0x4859, 0x485a, 0x485b, + 0x485c, 0x485d, 0x485e, 0x485f, 0x4860, 0x4861, 0x4862, 0x4863, + 0x4864, 0x4865, 0x4866, 0x4867, 0x4868, 0x4869, 0x486a, 0x486b, + 0x486c, 0x486d, 0x486e, 0x486f, 0x4870, 0x4871, 0x4872, 0x4873, + 0x4874, 0x4875, 0x4876, 0x4877, 0x4878, 0x4879, 0x487a, 0x487b, + 0x487c, 0x487d, 0x487e, 0x4b50, 0x4b56, 0x4b67, 0x4d4f, 0x4d68, + 0x4e2d, 0x4f7b, 0x5022, 0x5038, 0x5050, 0x505d, 0x5154, 0x5155, + 0x5158, 0x515b, 0x515c, 0x515d, 0x515e, 0x515f, 0x5160, 0x5162, + 0x5163, 0x5164, 0x5165, 0x5166, 0x5168, 0x5169, 0x516a, 0x516b, + 0x516d, 0x516f, 0x5170, 0x5172, 0x5176, 0x517a, 0x517c, 0x517d, + 0x517e, 0x5222, 0x5223, 0x5227, 0x5228, 0x5229, 0x522a, 0x522b, + 0x522d, 0x5232, 0x523e, 0x5242, 0x5243, 0x5244, 0x5246, 0x5247, + 0x5248, 0x5249, 0x524a, 0x524b, 0x524d, 0x524e, 0x524f, 0x5250, + 0x5251, 0x5252, 0x5253, 0x5254, 0x5255, 0x5256, 0x5257, 0x5259, + 0x525a, 0x525e, 0x525f, 0x5261, 0x5262, 0x5264, 0x5265, 0x5266, + 0x5267, 0x5268, 0x5269, 0x526a, 0x526b, 0x5270, 0x5271, 0x5272, + 0x5273, 0x5274, 0x5275, 0x5277, 0x5278, 0x5466, 0x547c, 0x5525, + 0x552b, 0x552e, 0x5638, 0x564d, 0x574b, 0x5764, 0x5b45, 0x5b64, + 0x5c25, 0x5d25, 0x5d55, 0x5d74, 0x5e7c, 0x5e7e, 0x5f33, 0x5f61, + 0x5f68, 0x6071, 0x612d, 0x616d, 0x6375, 0x6421, 0x6429, 0x652e, + 0x6531, 0x6532, 0x6539, 0x653b, 0x653c, 0x6544, 0x654e, 0x6550, + 0x6552, 0x6556, 0x657a, 0x657b, 0x657c, 0x657e, 0x6621, 0x6624, + 0x6627, 0x662d, 0x662f, 0x6630, 0x6631, 0x6633, 0x6637, 0x6638, + 0x663c, 0x6644, 0x6646, 0x6647, 0x664a, 0x6652, 0x6656, 0x6659, + 0x665c, 0x665f, 0x6661, 0x6664, 0x6665, 0x6666, 0x6668, 0x666a, + 0x666b, 0x666c, 0x666f, 0x6671, 0x6672, 0x6675, 0x6676, 0x6677, + 0x6679, 0x6721, 0x6726, 0x6729, 0x672a, 0x672c, 0x672d, 0x6730, + 0x673f, 0x6741, 0x6746, 0x6747, 0x674b, 0x674d, 0x674f, 0x6750, + 0x6753, 0x675f, 0x6764, 0x6766, 0x6777, 0x6867, 0x6868, 0x6870, + 0x6871, 0x6877, 0x6879, 0x687b, 0x687e, 0x6927, 0x692c, 0x694c, + 0x6977, 0x6a41, 0x6a65, 0x6a74, 0x6a77, 0x6a7c, 0x6a7e, 0x6b24, + 0x6b27, 0x6b29, 0x6b2a, 0x6b3a, 0x6b3b, 0x6b3d, 0x6b41, 0x6b42, + 0x6b46, 0x6b47, 0x6b4c, 0x6b4f, 0x6b50, 0x6b51, 0x6b52, 0x6b58, + 0x6c26, 0x6c27, 0x6c2a, 0x6c2f, 0x6c30, 0x6c31, 0x6c32, 0x6c35, + 0x6c38, 0x6c3a, 0x6c40, 0x6c41, 0x6c45, 0x6c46, 0x6c49, 0x6c4a, + 0x6c55, 0x6c5d, 0x6c5e, 0x6c61, 0x6c64, 0x6c67, 0x6c68, 0x6c77, + 0x6c78, 0x6c7a, 0x6d21, 0x6d22, 0x6d23, 0x6d6e, 0x6e5b, 0x723d, + 0x727a, 0x7331, 0x7427, 0x746e, 0x7674, 0x7676, 0x7738, 0x7748, + 0x7753, 0x785b, 0x7870, 0x7a21, 0x7a22, 0x7a66, 0x7c29, 0x2321, + 0x2322, 0x2323, 0x2324, 0x2325, 0x2326, 0x2327, 0x2328, 0x2329, + 0x232a, 0x232b, 0x232c, 0x232d, 0x232e, 0x232f, 0x2330, 0x2331, + 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, 0x2338, 0x2339, + 0x233a, 0x233b, 0x233c, 0x233d, 0x233e, 0x233f, 0x2340, 0x2341, + 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, 0x2348, 0x2349, + 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, 0x234f, 0x2350, 0x2351, + 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, 0x2358, 0x2359, + 0x235a, 0x235b, 0x212c, 0x235d, 0x235e, 0x235f, 0x2360, 0x2361, + 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, 0x2368, 0x2369, + 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, 0x236f, 0x2370, 0x2371, + 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, 0x2378, 0x2379, + 0x237a, 0x237b, 0x237c, 0x237d, 0x2226, 0x214b, 0x214c, 0x217e, + 0x237e, 0x214d, 0x235c, +}; + +static const Summary16 ksc5601_uni2indx_page00[70] = { + /* 0x0000 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x6592 }, { 7, 0xf7df }, + { 21, 0x0040 }, { 22, 0xc181 }, { 27, 0x0040 }, { 28, 0x4181 }, + /* 0x0100 */ + { 32, 0x0000 }, { 32, 0x0002 }, { 33, 0x00c0 }, { 35, 0x810e }, + { 40, 0x0e07 }, { 46, 0x000c }, { 48, 0x00c0 }, { 50, 0x0000 }, + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + /* 0x0200 */ + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, { 50, 0x0000 }, + { 50, 0x0080 }, { 51, 0x2f01 }, { 57, 0x0000 }, { 57, 0x0000 }, + /* 0x0300 */ + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, { 57, 0x0000 }, + { 57, 0x0000 }, { 57, 0xfffe }, { 72, 0x03fb }, { 81, 0xfffe }, + { 96, 0x03fb }, { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, + /* 0x0400 */ + { 105, 0x0002 }, { 106, 0xffff }, { 122, 0xffff }, { 138, 0xffff }, + { 154, 0xffff }, { 170, 0x0002 }, +}; +static const Summary16 ksc5601_uni2indx_page20[103] = { + /* 0x2000 */ + { 171, 0x0000 }, { 171, 0x3320 }, { 176, 0x0063 }, { 180, 0x080d }, + { 184, 0x0000 }, { 184, 0x0000 }, { 184, 0x0000 }, { 184, 0x8010 }, + { 186, 0x001e }, { 190, 0x0000 }, { 190, 0x1000 }, { 191, 0x0000 }, + { 191, 0x0000 }, { 191, 0x0000 }, { 191, 0x0000 }, { 191, 0x0000 }, + /* 0x2100 */ + { 191, 0x0208 }, { 193, 0x0048 }, { 195, 0x0846 }, { 199, 0x0000 }, + { 199, 0x0000 }, { 199, 0x7818 }, { 205, 0x03ff }, { 215, 0x03ff }, + { 225, 0x0000 }, { 225, 0x03ff }, { 235, 0x0000 }, { 235, 0x0000 }, + { 235, 0x0000 }, { 235, 0x0014 }, { 237, 0x0000 }, { 237, 0x0000 }, + /* 0x2200 */ + { 237, 0x898d }, { 244, 0x6402 }, { 248, 0x5fa1 }, { 257, 0x3030 }, + { 261, 0x0000 }, { 261, 0x0004 }, { 262, 0x0c33 }, { 268, 0x0000 }, + { 268, 0x00cc }, { 272, 0x0200 }, { 273, 0x0020 }, { 274, 0x0000 }, + { 274, 0x0000 }, { 274, 0x0000 }, { 274, 0x0000 }, { 274, 0x0000 }, + /* 0x2300 */ + { 274, 0x0000 }, { 274, 0x0004 }, { 275, 0x0000 }, { 275, 0x0000 }, + { 275, 0x0000 }, { 275, 0x0000 }, { 275, 0x0000 }, { 275, 0x0000 }, + { 275, 0x0000 }, { 275, 0x0000 }, { 275, 0x0000 }, { 275, 0x0000 }, + { 275, 0x0000 }, { 275, 0x0000 }, { 275, 0x0000 }, { 275, 0x0000 }, + /* 0x2400 */ + { 275, 0x0000 }, { 275, 0x0000 }, { 275, 0x0000 }, { 275, 0x0000 }, + { 275, 0x0000 }, { 275, 0x0000 }, { 275, 0x7fff }, { 290, 0xfff0 }, + { 302, 0x0007 }, { 305, 0xf000 }, { 309, 0xffff }, { 325, 0x003f }, + { 331, 0x0000 }, { 331, 0xffff }, { 347, 0x03ff }, { 357, 0x0000 }, + /* 0x2500 */ + { 357, 0xf00f }, { 365, 0xffff }, { 381, 0xffff }, { 397, 0xffff }, + { 413, 0x0fff }, { 425, 0x0000 }, { 425, 0x0000 }, { 425, 0x0000 }, + { 425, 0x0000 }, { 425, 0x0004 }, { 426, 0x03fb }, { 435, 0x30cc }, + { 441, 0xc9c3 }, { 449, 0x0003 }, { 451, 0x0000 }, { 451, 0x0000 }, + /* 0x2600 */ + { 451, 0xc060 }, { 455, 0x5000 }, { 457, 0x0000 }, { 457, 0x0000 }, + { 457, 0x0005 }, { 459, 0x0000 }, { 459, 0x37bb }, +}; +static const Summary16 ksc5601_uni2indx_page30[62] = { + /* 0x3000 */ + { 470, 0xff0f }, { 482, 0x003b }, { 487, 0x0000 }, { 487, 0x0000 }, + { 487, 0xfffe }, { 502, 0xffff }, { 518, 0xffff }, { 534, 0xffff }, + { 550, 0xffff }, { 566, 0x000f }, { 570, 0xfffe }, { 585, 0xffff }, + { 601, 0xffff }, { 617, 0xffff }, { 633, 0xffff }, { 649, 0x007f }, + /* 0x3100 */ + { 656, 0x0000 }, { 656, 0x0000 }, { 656, 0x0000 }, { 656, 0xfffe }, + { 671, 0xffff }, { 687, 0xffff }, { 703, 0xffff }, { 719, 0xffff }, + { 735, 0x7fff }, { 750, 0x0000 }, { 750, 0x0000 }, { 750, 0x0000 }, + { 750, 0x0000 }, { 750, 0x0000 }, { 750, 0x0000 }, { 750, 0x0000 }, + /* 0x3200 */ + { 750, 0xffff }, { 766, 0x1fff }, { 779, 0x0000 }, { 779, 0x0000 }, + { 779, 0x0000 }, { 779, 0x0000 }, { 779, 0xffff }, { 795, 0xcfff }, + { 809, 0x0000 }, { 809, 0x0000 }, { 809, 0x0000 }, { 809, 0x0000 }, + { 809, 0x0000 }, { 809, 0x0000 }, { 809, 0x0000 }, { 809, 0x0000 }, + /* 0x3300 */ + { 809, 0x0000 }, { 809, 0x0000 }, { 809, 0x0000 }, { 809, 0x0000 }, + { 809, 0x0000 }, { 809, 0x0000 }, { 809, 0x0000 }, { 809, 0x0000 }, + { 809, 0xff1f }, { 822, 0xffff }, { 838, 0xffff }, { 854, 0xffff }, + { 870, 0x87ff }, { 882, 0x3949 }, +}; +static const Summary16 ksc5601_uni2indx_page4e[1306] = { + /* 0x4e00 */ + { 889, 0x2f8b }, { 898, 0x4372 }, { 905, 0x2000 }, { 906, 0x0b04 }, + { 910, 0xe82c }, { 917, 0xe340 }, { 923, 0x2800 }, { 925, 0x40c8 }, + { 929, 0x5944 }, { 935, 0x4937 }, { 943, 0x7976 }, { 953, 0x0440 }, + { 955, 0x2c93 }, { 962, 0xa3f0 }, { 970, 0x0038 }, { 973, 0x08c5 }, + /* 0x4f00 */ + { 978, 0xee02 }, { 985, 0x0003 }, { 987, 0x8000 }, { 988, 0x3550 }, + { 994, 0xe1c8 }, { 1001, 0x1e23 }, { 1008, 0x8200 }, { 1010, 0xc449 }, + { 1016, 0xad5a }, { 1025, 0x2942 }, { 1030, 0xc000 }, { 1032, 0x8060 }, + { 1035, 0x461c }, { 1041, 0xa49a }, { 1048, 0xc003 }, { 1052, 0x052a }, + /* 0x5000 */ + { 1057, 0x2a44 }, { 1062, 0xd646 }, { 1070, 0x3dda }, { 1080, 0x0800 }, + { 1081, 0x8388 }, { 1086, 0x1420 }, { 1089, 0x0020 }, { 1090, 0x0170 }, + { 1094, 0x2021 }, { 1097, 0x0302 }, { 1100, 0x3000 }, { 1102, 0x40ac }, + { 1107, 0x8620 }, { 1111, 0x4462 }, { 1116, 0x20a0 }, { 1119, 0x8a00 }, + /* 0x5100 */ + { 1122, 0x0253 }, { 1127, 0x8004 }, { 1129, 0x0402 }, { 1131, 0x1484 }, + { 1135, 0x7bfb }, { 1148, 0x1004 }, { 1150, 0x7fa4 }, { 1160, 0x11e2 }, + { 1166, 0x2441 }, { 1170, 0x00a4 }, { 1173, 0x1421 }, { 1177, 0x20c0 }, + { 1180, 0x3a50 }, { 1186, 0x7000 }, { 1189, 0x0002 }, { 1190, 0x2743 }, + /* 0x5200 */ + { 1197, 0x45c9 }, { 1204, 0x2082 }, { 1207, 0x4630 }, { 1212, 0x0fc1 }, + { 1219, 0x3c88 }, { 1225, 0x2850 }, { 1229, 0x8602 }, { 1233, 0xa024 }, + { 1237, 0x2388 }, { 1242, 0x8806 }, { 1246, 0x0e19 }, { 1252, 0x4000 }, + { 1253, 0x22aa }, { 1259, 0xeb64 }, { 1268, 0x001c }, { 1271, 0xcd28 }, + /* 0x5300 */ + { 1278, 0xa120 }, { 1282, 0x02e1 }, { 1287, 0x840b }, { 1292, 0x8200 }, + { 1294, 0x279b }, { 1303, 0x549e }, { 1311, 0x8141 }, { 1315, 0xa0b3 }, + { 1322, 0x0010 }, { 1323, 0x8508 }, { 1327, 0x2061 }, { 1331, 0x0800 }, + { 1332, 0x2f08 }, { 1338, 0x08d0 }, { 1342, 0xbe3e }, { 1353, 0x010f }, + /* 0x5400 */ + { 1358, 0xf718 }, { 1367, 0xa803 }, { 1372, 0x0a41 }, { 1376, 0x5b08 }, + { 1382, 0x0504 }, { 1385, 0x0002 }, { 1386, 0x0500 }, { 1388, 0x382a }, + { 1394, 0x5041 }, { 1398, 0x0001 }, { 1399, 0x1910 }, { 1403, 0x2108 }, + { 1406, 0x0313 }, { 1411, 0x0000 }, { 1411, 0x6122 }, { 1416, 0x0404 }, + /* 0x5500 */ + { 1418, 0x40d0 }, { 1422, 0x1001 }, { 1424, 0x8000 }, { 1425, 0x4022 }, + { 1428, 0x8050 }, { 1431, 0x4048 }, { 1434, 0x0008 }, { 1435, 0x1000 }, + { 1436, 0x06d1 }, { 1442, 0x3700 }, { 1447, 0x5e80 }, { 1453, 0x0000 }, + { 1453, 0x00a0 }, { 1455, 0x9410 }, { 1459, 0x0018 }, { 1461, 0x6000 }, + /* 0x5600 */ + { 1463, 0x0240 }, { 1465, 0x0090 }, { 1467, 0x8000 }, { 1468, 0x0054 }, + { 1471, 0x0000 }, { 1471, 0x0008 }, { 1472, 0x0900 }, { 1474, 0x0010 }, + { 1475, 0x0040 }, { 1476, 0x0000 }, { 1476, 0x5020 }, { 1479, 0x1010 }, + { 1481, 0x2400 }, { 1483, 0x4c02 }, { 1487, 0x0001 }, { 1488, 0x0601 }, + /* 0x5700 */ + { 1491, 0x2918 }, { 1496, 0x814c }, { 1501, 0x2100 }, { 1503, 0x0801 }, + { 1505, 0x6485 }, { 1511, 0x0003 }, { 1513, 0x4452 }, { 1518, 0x1021 }, + { 1521, 0x0904 }, { 1524, 0x0008 }, { 1525, 0x000d }, { 1528, 0x0000 }, + { 1528, 0x4988 }, { 1533, 0x8000 }, { 1534, 0x0001 }, { 1535, 0x1691 }, + /* 0x5800 */ + { 1541, 0x0765 }, { 1548, 0x4000 }, { 1549, 0x8492 }, { 1554, 0x0433 }, + { 1559, 0x8c00 }, { 1562, 0x4592 }, { 1568, 0x0016 }, { 1571, 0x5220 }, + { 1575, 0x0228 }, { 1578, 0xd008 }, { 1582, 0x4300 }, { 1585, 0x4c08 }, + { 1589, 0x40a2 }, { 1593, 0xc32a }, { 1600, 0x9810 }, { 1604, 0x2e00 }, + /* 0x5900 */ + { 1608, 0x8000 }, { 1609, 0x1670 }, { 1615, 0x6e84 }, { 1622, 0x4082 }, + { 1625, 0xc390 }, { 1631, 0x04b3 }, { 1637, 0x7c85 }, { 1645, 0x2118 }, + { 1649, 0x041c }, { 1653, 0x02c8 }, { 1657, 0x1120 }, { 1660, 0x4a00 }, + { 1663, 0x0a48 }, { 1667, 0x361b }, { 1675, 0x5540 }, { 1680, 0x8900 }, + /* 0x5a00 */ + { 1683, 0x000a }, { 1685, 0x9902 }, { 1690, 0x0221 }, { 1693, 0x1040 }, + { 1695, 0x0242 }, { 1698, 0x0400 }, { 1699, 0x0044 }, { 1701, 0x0000 }, + { 1701, 0x0000 }, { 1701, 0x0c04 }, { 1704, 0x0010 }, { 1705, 0x0000 }, + { 1705, 0x1216 }, { 1710, 0x0000 }, { 1710, 0x0242 }, { 1713, 0x0000 }, + /* 0x5b00 */ + { 1713, 0x1a20 }, { 1717, 0x0040 }, { 1718, 0x0400 }, { 1719, 0x0000 }, + { 1719, 0x0009 }, { 1721, 0xb5b3 }, { 1731, 0x0a18 }, { 1735, 0x1523 }, + { 1741, 0x9ba0 }, { 1748, 0x1fe8 }, { 1757, 0x507c }, { 1764, 0x8379 }, + { 1772, 0x10fd }, { 1780, 0xc09d }, { 1787, 0xdbf6 }, { 1799, 0x0560 }, + /* 0x5c00 */ + { 1803, 0xef92 }, { 1813, 0x0242 }, { 1816, 0x0110 }, { 1818, 0xdf02 }, + { 1826, 0x6961 }, { 1833, 0x0822 }, { 1836, 0x9035 }, { 1842, 0x0202 }, + { 1844, 0x0000 }, { 1844, 0x0003 }, { 1846, 0x1a02 }, { 1850, 0x45aa }, + { 1857, 0x0001 }, { 1858, 0x0200 }, { 1859, 0x8101 }, { 1862, 0x2851 }, + /* 0x5d00 */ + { 1867, 0x6080 }, { 1870, 0x02d2 }, { 1875, 0x0280 }, { 1877, 0x0000 }, + { 1877, 0x1800 }, { 1879, 0x0001 }, { 1880, 0x9200 }, { 1883, 0x0000 }, + { 1883, 0x0880 }, { 1885, 0x2000 }, { 1886, 0x0405 }, { 1889, 0x3500 }, + { 1893, 0x2000 }, { 1894, 0x6044 }, { 1898, 0x49e6 }, { 1906, 0x609e }, + /* 0x5e00 */ + { 1913, 0x104c }, { 1917, 0x2a42 }, { 1922, 0x2820 }, { 1925, 0xa148 }, + { 1930, 0x10b1 }, { 1935, 0x8020 }, { 1937, 0x000e }, { 1940, 0x7b9c }, + { 1950, 0x8490 }, { 1954, 0x14a0 }, { 1958, 0x28c1 }, { 1963, 0x41e0 }, + { 1968, 0x0704 }, { 1972, 0x8c49 }, { 1978, 0x100d }, { 1982, 0x0cc8 }, + /* 0x5f00 */ + { 1987, 0x8412 }, { 1991, 0x89ba }, { 1999, 0x02c0 }, { 2002, 0x1422 }, + { 2006, 0x5500 }, { 2010, 0x0ac0 }, { 2014, 0x3ec4 }, { 2022, 0x9283 }, + { 2028, 0x1ca3 }, { 2035, 0x4387 }, { 2042, 0x4703 }, { 2048, 0x22a0 }, + { 2052, 0x3028 }, { 2056, 0x03c0 }, { 2060, 0x0801 }, { 2062, 0xa020 }, + /* 0x6000 */ + { 2065, 0x8000 }, { 2066, 0x3044 }, { 2070, 0x85a3 }, { 2077, 0x0000 }, + { 2077, 0x200e }, { 2081, 0x2225 }, { 2086, 0xb73c }, { 2096, 0x0001 }, + { 2097, 0x3220 }, { 2101, 0x8c50 }, { 2106, 0x0099 }, { 2110, 0x315d }, + { 2118, 0x00a0 }, { 2120, 0x9402 }, { 2124, 0x0003 }, { 2126, 0x0e4b }, + /* 0x6100 */ + { 2133, 0xe342 }, { 2140, 0x8c20 }, { 2144, 0x0080 }, { 2145, 0xd091 }, + { 2151, 0x1d94 }, { 2158, 0xa328 }, { 2164, 0x499c }, { 2171, 0x60c1 }, + { 2176, 0x4406 }, { 2180, 0x0713 }, { 2186, 0x5a90 }, { 2192, 0x4444 }, + { 2196, 0x0f88 }, { 2202, 0x0000 }, { 2202, 0x0040 }, { 2203, 0x95c4 }, + /* 0x6200 */ + { 2210, 0x7581 }, { 2217, 0x8447 }, { 2223, 0x4402 }, { 2226, 0xc053 }, + { 2232, 0x2b83 }, { 2239, 0x0108 }, { 2241, 0x4000 }, { 2242, 0x9242 }, + { 2247, 0x0611 }, { 2251, 0x09a6 }, { 2257, 0x0800 }, { 2258, 0x3222 }, + { 2263, 0xb384 }, { 2270, 0x1bdd }, { 2280, 0xf000 }, { 2284, 0xc08a }, + /* 0x6300 */ + { 2289, 0x0282 }, { 2292, 0x0002 }, { 2293, 0x8800 }, { 2295, 0x6c00 }, + { 2299, 0x9200 }, { 2302, 0x0021 }, { 2304, 0x4180 }, { 2307, 0x8c84 }, + { 2312, 0x1308 }, { 2316, 0x0944 }, { 2320, 0x07a7 }, { 2328, 0x0000 }, + { 2328, 0x8051 }, { 2332, 0x0c41 }, { 2336, 0x6002 }, { 2339, 0x00d0 }, + /* 0x6400 */ + { 2342, 0xa000 }, { 2344, 0x10d0 }, { 2348, 0x3004 }, { 2351, 0x4400 }, + { 2353, 0x0000 }, { 2353, 0x0100 }, { 2354, 0x8201 }, { 2357, 0x0700 }, + { 2360, 0x0100 }, { 2361, 0x440e }, { 2366, 0x6830 }, { 2371, 0x0805 }, + { 2374, 0x64b2 }, { 2381, 0x0514 }, { 2385, 0x10e6 }, { 2391, 0x4414 }, + /* 0x6500 */ + { 2395, 0x0011 }, { 2397, 0x2100 }, { 2399, 0x9c08 }, { 2404, 0xcbc0 }, + { 2411, 0xe120 }, { 2416, 0x40c2 }, { 2420, 0x304c }, { 2425, 0x41b4 }, + { 2431, 0x10ac }, { 2436, 0x9a83 }, { 2443, 0x98b2 }, { 2450, 0x3281 }, + { 2455, 0x9822 }, { 2460, 0x0084 }, { 2462, 0x3369 }, { 2470, 0xbc12 }, + /* 0x6600 */ + { 2477, 0xd6c0 }, { 2484, 0xc03b }, { 2491, 0xa1a1 }, { 2497, 0x0c53 }, + { 2503, 0x8a1e }, { 2510, 0xea00 }, { 2515, 0xcbf0 }, { 2524, 0x05d8 }, + { 2530, 0x4390 }, { 2535, 0x21c3 }, { 2541, 0x4805 }, { 2545, 0x4a1c }, + { 2551, 0x02d0 }, { 2555, 0x3240 }, { 2559, 0x0041 }, { 2561, 0xd79d }, + /* 0x6700 */ + { 2572, 0x2b09 }, { 2578, 0xe8b0 }, { 2585, 0x7dc0 }, { 2593, 0x2452 }, + { 2598, 0xc240 }, { 2602, 0xd04b }, { 2609, 0xa000 }, { 2611, 0xc8ab }, + { 2619, 0x8a80 }, { 2623, 0x34a9 }, { 2630, 0x8000 }, { 2631, 0x41c9 }, + { 2637, 0x8010 }, { 2639, 0x241f }, { 2646, 0x9200 }, { 2649, 0x487b }, + /* 0x6800 */ + { 2657, 0x0000 }, { 2657, 0x00cc }, { 2661, 0x8406 }, { 2665, 0x3300 }, + { 2669, 0x410f }, { 2675, 0x001b }, { 2679, 0x2000 }, { 2680, 0x8040 }, + { 2682, 0x8022 }, { 2685, 0xa098 }, { 2690, 0xa186 }, { 2696, 0x006b }, + { 2701, 0x2a30 }, { 2706, 0x85a4 }, { 2712, 0x4181 }, { 2716, 0x0604 }, + /* 0x6900 */ + { 2719, 0x6021 }, { 2723, 0x0004 }, { 2724, 0x0080 }, { 2725, 0xa001 }, + { 2728, 0x0400 }, { 2729, 0x46b8 }, { 2736, 0xe90f }, { 2745, 0x03a0 }, + { 2749, 0x0000 }, { 2749, 0x1820 }, { 2752, 0x40a0 }, { 2755, 0x0810 }, + { 2757, 0x380a }, { 2762, 0x0001 }, { 2763, 0x0500 }, { 2765, 0xa800 }, + /* 0x6a00 */ + { 2768, 0x0404 }, { 2770, 0xc28a }, { 2776, 0x000a }, { 2778, 0x2720 }, + { 2783, 0x0910 }, { 2786, 0x830c }, { 2791, 0x0802 }, { 2793, 0x0000 }, + { 2793, 0x6211 }, { 2798, 0x1080 }, { 2800, 0x000c }, { 2802, 0x0808 }, + { 2804, 0x000c }, { 2806, 0x0c08 }, { 2809, 0x0000 }, { 2809, 0x0840 }, + /* 0x6b00 */ + { 2811, 0x1410 }, { 2814, 0x0044 }, { 2816, 0x000b }, { 2819, 0x6404 }, + { 2823, 0x50c0 }, { 2827, 0x8001 }, { 2829, 0x047e }, { 2836, 0x8984 }, + { 2841, 0x0658 }, { 2846, 0x4140 }, { 2849, 0xc000 }, { 2851, 0x94a4 }, + { 2857, 0xa862 }, { 2863, 0x09dc }, { 2870, 0x1800 }, { 2872, 0x0000 }, + /* 0x6c00 */ + { 2872, 0x8100 }, { 2874, 0x000a }, { 2876, 0x0008 }, { 2877, 0x4190 }, + { 2881, 0x4007 }, { 2885, 0xe4a1 }, { 2892, 0x2501 }, { 2896, 0x6445 }, + { 2902, 0x11ee }, { 2910, 0x0e7d }, { 2919, 0x4800 }, { 2921, 0xfb08 }, + { 2929, 0x1616 }, { 2935, 0x08a8 }, { 2939, 0xc92e }, { 2947, 0x0009 }, + /* 0x6d00 */ + { 2949, 0x1800 }, { 2951, 0x4a82 }, { 2956, 0x06a0 }, { 2960, 0x6b64 }, + { 2968, 0x0002 }, { 2969, 0x1600 }, { 2972, 0x5648 }, { 2978, 0x8390 }, + { 2983, 0x73a0 }, { 2990, 0x002a }, { 2993, 0x8000 }, { 2994, 0x0024 }, + { 2996, 0x88f9 }, { 3004, 0x4702 }, { 3009, 0x4d02 }, { 3014, 0x0faa }, + /* 0x6e00 */ + { 3022, 0x0000 }, { 3022, 0x8e80 }, { 3027, 0xb87b }, { 3037, 0x7554 }, + { 3045, 0x2418 }, { 3049, 0xd940 }, { 3055, 0xc880 }, { 3059, 0x040c }, + { 3062, 0x0000 }, { 3062, 0xb041 }, { 3067, 0x8c24 }, { 3072, 0x0442 }, + { 3075, 0x5a34 }, { 3082, 0x001a }, { 3085, 0x8000 }, { 3086, 0xc110 }, + /* 0x6f00 */ + { 3090, 0x8046 }, { 3094, 0x0032 }, { 3097, 0x180d }, { 3102, 0x8106 }, + { 3106, 0x0002 }, { 3107, 0xcd92 }, { 3115, 0x6014 }, { 3119, 0x7401 }, + { 3124, 0x6112 }, { 3129, 0x0091 }, { 3132, 0xc098 }, { 3137, 0x420a }, + { 3141, 0x040f }, { 3146, 0x8420 }, { 3149, 0x9a13 }, { 3156, 0x4002 }, + /* 0x7000 */ + { 3158, 0x8a62 }, { 3164, 0xfd22 }, { 3173, 0x8188 }, { 3177, 0x4080 }, + { 3179, 0x1000 }, { 3180, 0x2103 }, { 3184, 0x0808 }, { 3186, 0x3101 }, + { 3190, 0x4420 }, { 3193, 0x0704 }, { 3197, 0xb812 }, { 3203, 0x0388 }, + { 3207, 0x8900 }, { 3210, 0xa300 }, { 3214, 0x0000 }, { 3214, 0x2202 }, + /* 0x7100 */ + { 3217, 0x1210 }, { 3220, 0x4600 }, { 3223, 0x0042 }, { 3225, 0x0041 }, + { 3227, 0x5680 }, { 3232, 0x5241 }, { 3237, 0x52f0 }, { 3244, 0x2000 }, + { 3245, 0x8610 }, { 3249, 0x8214 }, { 3253, 0x1004 }, { 3255, 0x4602 }, + { 3259, 0x430a }, { 3264, 0x8035 }, { 3269, 0x60e0 }, { 3274, 0xd800 }, + /* 0x7200 */ + { 3278, 0x0041 }, { 3280, 0x0801 }, { 3282, 0x3400 }, { 3285, 0x6c65 }, + { 3293, 0x11c1 }, { 3298, 0xab04 }, { 3304, 0x0286 }, { 3308, 0x2204 }, + { 3311, 0x0003 }, { 3313, 0x0000 }, { 3313, 0x9084 }, { 3317, 0x0000 }, + { 3317, 0x4015 }, { 3321, 0x0281 }, { 3324, 0x0202 }, { 3326, 0x3300 }, + /* 0x7300 */ + { 3330, 0x0400 }, { 3331, 0x3840 }, { 3335, 0x0e20 }, { 3339, 0xc0c0 }, + { 3343, 0x0030 }, { 3345, 0x0085 }, { 3348, 0x0500 }, { 3350, 0x0d25 }, + { 3356, 0x4ad0 }, { 3362, 0x81d0 }, { 3367, 0x2280 }, { 3370, 0x020c }, + { 3373, 0xb605 }, { 3380, 0x6240 }, { 3384, 0x2679 }, { 3392, 0x6280 }, + /* 0x7400 */ + { 3396, 0x02ea }, { 3402, 0x0808 }, { 3404, 0xdd67 }, { 3415, 0x8579 }, + { 3423, 0x081b }, { 3428, 0xdea0 }, { 3436, 0x8735 }, { 3444, 0x4000 }, + { 3445, 0x0a8c }, { 3450, 0xd100 }, { 3454, 0x05aa }, { 3460, 0xa225 }, + { 3466, 0x8440 }, { 3469, 0x1510 }, { 3473, 0x404d }, { 3478, 0x0080 }, + /* 0x7500 */ + { 3479, 0x0012 }, { 3481, 0x8d22 }, { 3487, 0x1968 }, { 3493, 0x058f }, + { 3500, 0x9080 }, { 3503, 0x3a1a }, { 3510, 0x8464 }, { 3515, 0x8561 }, + { 3521, 0xccc0 }, { 3527, 0x2002 }, { 3529, 0x0820 }, { 3531, 0x732e }, + { 3540, 0x20a4 }, { 3544, 0x0b34 }, { 3550, 0x0004 }, { 3551, 0x1415 }, + /* 0x7600 */ + { 3556, 0x2001 }, { 3558, 0x8200 }, { 3560, 0x0057 }, { 3565, 0x0800 }, + { 3566, 0x5004 }, { 3569, 0x0044 }, { 3571, 0x1212 }, { 3575, 0x7905 }, + { 3582, 0x40d0 }, { 3586, 0x0009 }, { 3588, 0x4000 }, { 3589, 0x8400 }, + { 3591, 0x054c }, { 3596, 0xd844 }, { 3602, 0x409a }, { 3607, 0x5114 }, + /* 0x7700 */ + { 3612, 0x0b12 }, { 3617, 0x4000 }, { 3618, 0x0201 }, { 3620, 0x1580 }, + { 3624, 0x2001 }, { 3626, 0x0800 }, { 3627, 0x084a }, { 3631, 0xc200 }, + { 3634, 0x0800 }, { 3635, 0x4002 }, { 3637, 0x3020 }, { 3640, 0x9809 }, + { 3645, 0x0000 }, { 3645, 0x1880 }, { 3648, 0xe22c }, { 3655, 0x0008 }, + /* 0x7800 */ + { 3656, 0x0004 }, { 3657, 0x0004 }, { 3658, 0x10e0 }, { 3662, 0x0014 }, + { 3664, 0x8020 }, { 3666, 0x2000 }, { 3667, 0x9800 }, { 3670, 0x1000 }, + { 3671, 0x7082 }, { 3676, 0x0082 }, { 3678, 0x0288 }, { 3681, 0x1c00 }, + { 3684, 0x4c22 }, { 3689, 0x0001 }, { 3690, 0x9100 }, { 3693, 0x0820 }, + /* 0x7900 */ + { 3695, 0x4002 }, { 3697, 0x0040 }, { 3698, 0x1c00 }, { 3701, 0x4400 }, + { 3703, 0x0383 }, { 3708, 0x7cc1 }, { 3716, 0x2121 }, { 3720, 0x8400 }, + { 3722, 0xe002 }, { 3726, 0x0002 }, { 3727, 0x44c0 }, { 3731, 0xe20a }, + { 3737, 0x0e03 }, { 3742, 0x8126 }, { 3747, 0x02d0 }, { 3751, 0x0800 }, + /* 0x7a00 */ + { 3752, 0x2921 }, { 3757, 0x9690 }, { 3763, 0x4001 }, { 3765, 0xb8c2 }, + { 3772, 0x6241 }, { 3777, 0x0080 }, { 3778, 0x0a06 }, { 3782, 0xa651 }, + { 3789, 0x0112 }, { 3792, 0x812c }, { 3797, 0xc600 }, { 3801, 0x0400 }, + { 3802, 0x0cb0 }, { 3807, 0xa280 }, { 3811, 0xa429 }, { 3817, 0x8640 }, + /* 0x7b00 */ + { 3821, 0x8000 }, { 3822, 0x4a02 }, { 3826, 0x3041 }, { 3830, 0x0200 }, + { 3831, 0xba40 }, { 3837, 0x0057 }, { 3842, 0x5001 }, { 3845, 0x2020 }, + { 3847, 0x8880 }, { 3850, 0x24b0 }, { 3855, 0x2002 }, { 3857, 0x0112 }, + { 3860, 0x02d3 }, { 3866, 0x0004 }, { 3867, 0x0211 }, { 3870, 0x0000 }, + /* 0x7c00 */ + { 3870, 0x0080 }, { 3871, 0x4004 }, { 3873, 0x0c82 }, { 3877, 0xe000 }, + { 3880, 0x3008 }, { 3883, 0x0000 }, { 3883, 0x1011 }, { 3886, 0x0008 }, + { 3887, 0x0208 }, { 3889, 0x81a4 }, { 3894, 0x40a0 }, { 3897, 0x420e }, + { 3902, 0x0400 }, { 3903, 0xc040 }, { 3906, 0x0081 }, { 3908, 0x4800 }, + /* 0x7d00 */ + { 3910, 0x2df5 }, { 3920, 0x0f91 }, { 3927, 0xd807 }, { 3934, 0x0629 }, + { 3939, 0x007c }, { 3944, 0x4001 }, { 3946, 0x4546 }, { 3952, 0x824e }, + { 3958, 0xc000 }, { 3960, 0x1008 }, { 3962, 0x3005 }, { 3966, 0xed36 }, + { 3976, 0x0c80 }, { 3979, 0x6540 }, { 3984, 0x930b }, { 3991, 0x0810 }, + /* 0x7e00 */ + { 3993, 0x0600 }, { 3995, 0xe820 }, { 4000, 0xc80a }, { 4005, 0x6082 }, + { 4009, 0x00ca }, { 4013, 0x4034 }, { 4017, 0x2e02 }, { 4022, 0x1201 }, + { 4025, 0x9004 }, { 4028, 0x1948 }, { 4033, 0x0000 }, { 4033, 0x0000 }, + { 4033, 0x0000 }, { 4033, 0x0000 }, { 4033, 0x0000 }, { 4033, 0x0000 }, + /* 0x7f00 */ + { 4033, 0x0000 }, { 4033, 0x0000 }, { 4033, 0x0000 }, { 4033, 0x0540 }, + { 4036, 0x1000 }, { 4037, 0x0031 }, { 4040, 0x4c00 }, { 4043, 0x02a5 }, + { 4048, 0x5520 }, { 4053, 0x4410 }, { 4056, 0x0310 }, { 4059, 0x2304 }, + { 4063, 0x5422 }, { 4068, 0x8034 }, { 4072, 0x0a03 }, { 4076, 0x1201 }, + /* 0x8000 */ + { 4079, 0x126b }, { 4086, 0x01a1 }, { 4090, 0x2000 }, { 4091, 0xa048 }, + { 4095, 0x0448 }, { 4098, 0x4540 }, { 4102, 0x8000 }, { 4103, 0xe08d }, + { 4110, 0x1af0 }, { 4117, 0x2840 }, { 4120, 0x8626 }, { 4126, 0x0416 }, + { 4130, 0x5018 }, { 4134, 0x4c00 }, { 4137, 0x0032 }, { 4140, 0x2112 }, + /* 0x8100 */ + { 4144, 0x05e4 }, { 4150, 0x0d00 }, { 4153, 0x8a08 }, { 4157, 0x4200 }, + { 4159, 0x4800 }, { 4161, 0x0033 }, { 4165, 0x0860 }, { 4168, 0x8703 }, + { 4174, 0x8501 }, { 4178, 0x3400 }, { 4181, 0x0109 }, { 4184, 0xe428 }, + { 4190, 0x2045 }, { 4194, 0x8100 }, { 4196, 0x25a8 }, { 4202, 0x5c18 }, + /* 0x8200 */ + { 4208, 0x35a0 }, { 4214, 0xd804 }, { 4219, 0x1c02 }, { 4223, 0x02e0 }, + { 4227, 0x00a1 }, { 4230, 0x0200 }, { 4231, 0xc050 }, { 4235, 0x4146 }, + { 4240, 0x6800 }, { 4243, 0xa604 }, { 4248, 0xf260 }, { 4255, 0xbb8a }, + { 4264, 0x0000 }, { 4264, 0xc8b6 }, { 4272, 0x00e2 }, { 4276, 0x6002 }, + /* 0x8300 */ + { 4279, 0x023e }, { 4285, 0x0080 }, { 4286, 0x8900 }, { 4289, 0x0372 }, + { 4295, 0x8681 }, { 4300, 0x0006 }, { 4302, 0x0000 }, { 4302, 0x0888 }, + { 4305, 0x4600 }, { 4308, 0x4140 }, { 4311, 0x0e04 }, { 4315, 0x2000 }, + { 4316, 0x1622 }, { 4321, 0x1048 }, { 4324, 0x8a00 }, { 4327, 0x2217 }, + /* 0x8400 */ + { 4333, 0x7418 }, { 4339, 0x0000 }, { 4339, 0x1200 }, { 4341, 0x2102 }, + { 4344, 0x0200 }, { 4345, 0x0880 }, { 4347, 0x984a }, { 4353, 0x0420 }, + { 4355, 0x0000 }, { 4355, 0x1211 }, { 4359, 0x0002 }, { 4360, 0x9904 }, + { 4365, 0x2a55 }, { 4372, 0x0402 }, { 4374, 0x5000 }, { 4376, 0x1010 }, + /* 0x8500 */ + { 4378, 0x0000 }, { 4378, 0x459a }, { 4385, 0xb02a }, { 4391, 0xa000 }, + { 4393, 0x420a }, { 4397, 0x0208 }, { 4399, 0x2708 }, { 4404, 0x0000 }, + { 4404, 0x8090 }, { 4407, 0x0812 }, { 4410, 0x8740 }, { 4415, 0x0401 }, + { 4417, 0xe202 }, { 4422, 0x3020 }, { 4425, 0x0630 }, { 4429, 0x8c80 }, + /* 0x8600 */ + { 4433, 0x04c4 }, { 4437, 0x04c0 }, { 4440, 0x2000 }, { 4441, 0x8000 }, + { 4442, 0x4000 }, { 4443, 0xd831 }, { 4450, 0x0080 }, { 4451, 0x0200 }, + { 4452, 0x1400 }, { 4454, 0x0008 }, { 4455, 0x0218 }, { 4458, 0x0000 }, + { 4458, 0x0880 }, { 4460, 0x8a10 }, { 4464, 0x2010 }, { 4466, 0x4000 }, + /* 0x8700 */ + { 4467, 0x010d }, { 4471, 0x1500 }, { 4474, 0x0000 }, { 4474, 0x0000 }, + { 4474, 0x4000 }, { 4475, 0x80a0 }, { 4478, 0x0140 }, { 4480, 0x0150 }, + { 4483, 0x2004 }, { 4485, 0x8000 }, { 4486, 0x0004 }, { 4487, 0x0408 }, + { 4489, 0x0010 }, { 4490, 0x0000 }, { 4490, 0x9001 }, { 4493, 0x4a04 }, + /* 0x8800 */ + { 4497, 0x0020 }, { 4498, 0x8000 }, { 4499, 0x000c }, { 4501, 0x0842 }, + { 4504, 0x3041 }, { 4508, 0x2a8c }, { 4514, 0x090e }, { 4519, 0xc085 }, + { 4524, 0x2906 }, { 4529, 0x40c4 }, { 4533, 0x0800 }, { 4534, 0x0010 }, + { 4535, 0x8006 }, { 4538, 0xb230 }, { 4544, 0x0102 }, { 4546, 0x2138 }, + /* 0x8900 */ + { 4551, 0x0080 }, { 4552, 0x030d }, { 4557, 0x0420 }, { 4559, 0x0940 }, + { 4562, 0x0012 }, { 4564, 0x8000 }, { 4565, 0x0410 }, { 4567, 0x8004 }, + { 4569, 0x88ca }, { 4575, 0x0048 }, { 4577, 0x0602 }, { 4580, 0x2404 }, + { 4583, 0x0001 }, { 4584, 0x0004 }, { 4585, 0x0008 }, { 4586, 0x0110 }, + /* 0x8a00 */ + { 4588, 0x550d }, { 4595, 0xa9c8 }, { 4602, 0x2428 }, { 4606, 0x0c52 }, + { 4611, 0x0000 }, { 4611, 0x4831 }, { 4616, 0x624d }, { 4623, 0x022f }, + { 4629, 0x30a0 }, { 4633, 0x4128 }, { 4637, 0x057b }, { 4645, 0xd205 }, + { 4651, 0xa894 }, { 4657, 0x1844 }, { 4661, 0x6cc2 }, { 4668, 0x45c2 }, + /* 0x8b00 */ + { 4674, 0x4017 }, { 4679, 0x2ed1 }, { 4687, 0x1901 }, { 4691, 0x0208 }, + { 4693, 0xc202 }, { 4697, 0x1500 }, { 4700, 0x9040 }, { 4703, 0x2091 }, + { 4707, 0x0401 }, { 4709, 0x044d }, { 4714, 0x0000 }, { 4714, 0x0000 }, + { 4714, 0x0000 }, { 4714, 0x0000 }, { 4714, 0x0000 }, { 4714, 0x0000 }, + /* 0x8c00 */ + { 4714, 0x0000 }, { 4714, 0x0000 }, { 4714, 0x0000 }, { 4714, 0x8080 }, + { 4716, 0x1542 }, { 4721, 0x0420 }, { 4723, 0x0c02 }, { 4726, 0x0600 }, + { 4728, 0x1404 }, { 4731, 0x6000 }, { 4733, 0x9f87 }, { 4743, 0xb9d9 }, + { 4753, 0x059f }, { 4761, 0x540a }, { 4766, 0x245d }, { 4773, 0x3810 }, + /* 0x8d00 */ + { 4777, 0x25b0 }, { 4783, 0x0048 }, { 4785, 0x0000 }, { 4785, 0x0000 }, + { 4785, 0x0000 }, { 4785, 0x0000 }, { 4785, 0x0850 }, { 4788, 0x0099 }, + { 4792, 0x0420 }, { 4794, 0x0200 }, { 4795, 0x0108 }, { 4797, 0x4408 }, + { 4800, 0x9840 }, { 4804, 0x2800 }, { 4806, 0x810a }, { 4810, 0x0008 }, + /* 0x8e00 */ + { 4811, 0x8400 }, { 4813, 0x4001 }, { 4815, 0x0400 }, { 4816, 0x0021 }, + { 4818, 0x0794 }, { 4824, 0x8200 }, { 4826, 0x0001 }, { 4827, 0x0050 }, + { 4829, 0x2482 }, { 4833, 0x0000 }, { 4833, 0x1c00 }, { 4836, 0x0000 }, + { 4836, 0x3c01 }, { 4841, 0x8004 }, { 4843, 0x0800 }, { 4844, 0x4900 }, + /* 0x8f00 */ + { 4847, 0x0228 }, { 4850, 0xf83c }, { 4859, 0x86c0 }, { 4864, 0xcb08 }, + { 4870, 0x6230 }, { 4875, 0xa000 }, { 4877, 0x0004 }, { 4878, 0x0000 }, + { 4878, 0x0000 }, { 4878, 0x1800 }, { 4880, 0xa148 }, { 4885, 0x0007 }, + { 4888, 0x4024 }, { 4891, 0x0012 }, { 4893, 0x2c40 }, { 4897, 0x2285 }, + /* 0x9000 */ + { 4902, 0xa96f }, { 4912, 0xe6b3 }, { 4922, 0x400f }, { 4927, 0x5126 }, + { 4933, 0x6c86 }, { 4940, 0x723b }, { 4949, 0xe20b }, { 4956, 0xb5a4 }, + { 4964, 0x859f }, { 4973, 0x0222 }, { 4976, 0x854c }, { 4982, 0x0123 }, + { 4986, 0x0402 }, { 4988, 0x4000 }, { 4989, 0x2102 }, { 4992, 0x2020 }, + /* 0x9100 */ + { 4994, 0x0004 }, { 4995, 0x0224 }, { 4998, 0x2080 }, { 5000, 0x0004 }, + { 5001, 0x7e00 }, { 5007, 0x0004 }, { 5008, 0x1604 }, { 5012, 0x01a0 }, + { 5015, 0x2a80 }, { 5019, 0x1004 }, { 5021, 0xd800 }, { 5025, 0x0032 }, + { 5028, 0xfa81 }, { 5036, 0x3183 }, { 5042, 0x0488 }, { 5045, 0x0020 }, + /* 0x9200 */ + { 5046, 0x2000 }, { 5047, 0x4087 }, { 5052, 0x0000 }, { 5052, 0x8410 }, + { 5055, 0x0221 }, { 5058, 0x4880 }, { 5061, 0x0074 }, { 5065, 0x0000 }, + { 5065, 0x0029 }, { 5068, 0x114a }, { 5073, 0x0000 }, { 5073, 0x02c8 }, + { 5077, 0x9000 }, { 5079, 0x0004 }, { 5080, 0x0410 }, { 5082, 0x1100 }, + /* 0x9300 */ + { 5084, 0x0010 }, { 5085, 0xc501 }, { 5090, 0xc957 }, { 5099, 0x0000 }, + { 5099, 0x2d00 }, { 5103, 0x0810 }, { 5105, 0x4000 }, { 5106, 0x5020 }, + { 5109, 0x1000 }, { 5110, 0x0450 }, { 5113, 0x3088 }, { 5117, 0x0001 }, + { 5118, 0x0008 }, { 5119, 0x4002 }, { 5121, 0x0012 }, { 5123, 0x0040 }, + /* 0x9400 */ + { 5124, 0x0010 }, { 5125, 0x0100 }, { 5126, 0x0820 }, { 5128, 0x0120 }, + { 5130, 0x0010 }, { 5131, 0x0806 }, { 5134, 0x0000 }, { 5134, 0xa000 }, + { 5136, 0x0000 }, { 5136, 0x0000 }, { 5136, 0x0000 }, { 5136, 0x0000 }, + { 5136, 0x0000 }, { 5136, 0x0000 }, { 5136, 0x0000 }, { 5136, 0x0000 }, + /* 0x9500 */ + { 5136, 0x0000 }, { 5136, 0x0000 }, { 5136, 0x0000 }, { 5136, 0x0000 }, + { 5136, 0x0000 }, { 5136, 0x0000 }, { 5136, 0x0000 }, { 5136, 0x0080 }, + { 5137, 0x8a09 }, { 5142, 0x011e }, { 5147, 0x2138 }, { 5152, 0x1802 }, + { 5155, 0x0480 }, { 5157, 0x1070 }, { 5161, 0x0006 }, { 5163, 0x0000 }, + /* 0x9600 */ + { 5163, 0x0000 }, { 5163, 0x1000 }, { 5164, 0x4402 }, { 5167, 0x8804 }, + { 5170, 0x3815 }, { 5176, 0xf801 }, { 5182, 0x041c }, { 5186, 0x21e9 }, + { 5193, 0x6c60 }, { 5199, 0x1b30 }, { 5205, 0x0588 }, { 5209, 0x0882 }, + { 5212, 0x7af3 }, { 5223, 0x1a60 }, { 5228, 0x870c }, { 5234, 0x0ac5 }, + /* 0x9700 */ + { 5240, 0x00c1 }, { 5243, 0x524a }, { 5249, 0x0080 }, { 5250, 0x2205 }, + { 5254, 0x0114 }, { 5257, 0x5042 }, { 5261, 0x2206 }, { 5265, 0x0490 }, + { 5268, 0xa800 }, { 5271, 0x0000 }, { 5271, 0x2901 }, { 5275, 0x0000 }, + { 5275, 0x0840 }, { 5277, 0x1008 }, { 5279, 0x0000 }, { 5279, 0x8848 }, + /* 0x9800 */ + { 5283, 0x156f }, { 5292, 0x018f }, { 5298, 0x2000 }, { 5299, 0x0b01 }, + { 5303, 0x7040 }, { 5307, 0x4510 }, { 5311, 0x88a0 }, { 5315, 0x0000 }, + { 5315, 0x0000 }, { 5315, 0x0000 }, { 5315, 0x8100 }, { 5317, 0x0002 }, + { 5318, 0x0090 }, { 5320, 0x9800 }, { 5323, 0xe006 }, { 5328, 0x7010 }, + /* 0x9900 */ + { 5332, 0x1608 }, { 5336, 0x4109 }, { 5340, 0x0101 }, { 5342, 0x0000 }, + { 5342, 0x3a20 }, { 5347, 0x0096 }, { 5351, 0x0000 }, { 5351, 0x0000 }, + { 5351, 0x0000 }, { 5351, 0x2240 }, { 5354, 0x7120 }, { 5359, 0x021a }, + { 5363, 0x0002 }, { 5364, 0xa227 }, { 5371, 0x2000 }, { 5372, 0x8002 }, + /* 0x9a00 */ + { 5374, 0xc102 }, { 5378, 0x0200 }, { 5379, 0x0800 }, { 5380, 0x00c1 }, + { 5383, 0x2029 }, { 5387, 0x8ca0 }, { 5392, 0x0624 }, { 5396, 0x0000 }, + { 5396, 0x0000 }, { 5396, 0x0000 }, { 5396, 0x0100 }, { 5397, 0x0100 }, + { 5398, 0x0000 }, { 5398, 0x0118 }, { 5401, 0x4020 }, { 5403, 0x0000 }, + /* 0x9b00 */ + { 5403, 0x0000 }, { 5403, 0x0400 }, { 5404, 0x0480 }, { 5406, 0x1002 }, + { 5408, 0x803e }, { 5414, 0x0410 }, { 5416, 0x8000 }, { 5417, 0x0000 }, + { 5417, 0x4000 }, { 5418, 0x8002 }, { 5420, 0x4800 }, { 5422, 0x0000 }, + { 5422, 0x0200 }, { 5423, 0x0040 }, { 5424, 0x0110 }, { 5426, 0x0000 }, + /* 0x9c00 */ + { 5426, 0x2000 }, { 5427, 0x0025 }, { 5430, 0x0020 }, { 5431, 0x0804 }, + { 5433, 0x0280 }, { 5435, 0x0080 }, { 5436, 0x0000 }, { 5436, 0x0000 }, + { 5436, 0x0000 }, { 5436, 0x0000 }, { 5436, 0x0000 }, { 5436, 0x0000 }, + { 5436, 0x0000 }, { 5436, 0x0000 }, { 5436, 0x02a0 }, { 5439, 0x0058 }, + /* 0x9d00 */ + { 5442, 0x0200 }, { 5443, 0x0800 }, { 5444, 0x0140 }, { 5446, 0x0800 }, + { 5447, 0x0000 }, { 5447, 0x2002 }, { 5449, 0x1003 }, { 5452, 0x0004 }, + { 5453, 0x0000 }, { 5453, 0x0000 }, { 5453, 0x8200 }, { 5455, 0x0010 }, + { 5456, 0x0010 }, { 5457, 0x0080 }, { 5458, 0x0000 }, { 5458, 0x0704 }, + /* 0x9e00 */ + { 5462, 0x0000 }, { 5462, 0x4400 }, { 5464, 0x0000 }, { 5464, 0x0000 }, + { 5464, 0x0000 }, { 5464, 0x0000 }, { 5464, 0x0000 }, { 5464, 0xa220 }, + { 5468, 0x0000 }, { 5468, 0xa08c }, { 5473, 0x0020 }, { 5474, 0x4830 }, + { 5478, 0x6008 }, { 5481, 0x5912 }, { 5487, 0x0100 }, { 5488, 0x0010 }, + /* 0x9f00 */ + { 5489, 0x4180 }, { 5492, 0x0008 }, { 5493, 0x0001 }, { 5494, 0x0800 }, + { 5495, 0x4c00 }, { 5498, 0x8004 }, { 5500, 0x1482 }, { 5504, 0x0080 }, + { 5505, 0x2000 }, { 5506, 0x1021 }, +}; +static const Summary16 ksc5601_uni2indx_pageac[698] = { + /* 0xac00 */ + { 5509, 0x0793 }, { 5516, 0x3eff }, { 5529, 0xb011 }, { 5534, 0x1303 }, + { 5539, 0x2801 }, { 5542, 0x1110 }, { 5545, 0x0000 }, { 5545, 0x0593 }, + { 5551, 0x1e7b }, { 5561, 0xb011 }, { 5566, 0x9703 }, { 5573, 0x3b01 }, + { 5579, 0x1112 }, { 5583, 0x00a0 }, { 5585, 0x9593 }, { 5593, 0x306b }, + /* 0xad00 */ + { 5600, 0xb051 }, { 5606, 0x1102 }, { 5609, 0x3201 }, { 5613, 0x1130 }, + { 5617, 0x02b0 }, { 5621, 0x0111 }, { 5624, 0x300a }, { 5628, 0xb879 }, + { 5637, 0x1306 }, { 5642, 0x3001 }, { 5645, 0x0010 }, { 5646, 0x0080 }, + { 5647, 0x0113 }, { 5651, 0x100b }, { 5655, 0x0011 }, { 5657, 0x9300 }, + /* 0xae00 */ + { 5661, 0x2b03 }, { 5667, 0x0010 }, { 5668, 0x0000 }, { 5668, 0x0593 }, + { 5674, 0x746b }, { 5683, 0xb051 }, { 5689, 0x1323 }, { 5695, 0x3b01 }, + { 5701, 0x1030 }, { 5704, 0x0000 }, { 5704, 0x0000 }, { 5704, 0x7000 }, + { 5707, 0xb011 }, { 5712, 0x1303 }, { 5717, 0x2900 }, { 5720, 0x1110 }, + /* 0xaf00 */ + { 5723, 0x2180 }, { 5726, 0x0001 }, { 5727, 0x3000 }, { 5729, 0xb015 }, + { 5735, 0x030e }, { 5740, 0x3001 }, { 5743, 0x0030 }, { 5745, 0x0200 }, + { 5746, 0x0111 }, { 5749, 0x1023 }, { 5753, 0x0000 }, { 5753, 0x1300 }, + { 5756, 0x6b81 }, { 5763, 0x1010 }, { 5765, 0x0300 }, { 5767, 0x0113 }, + /* 0xb000 */ + { 5771, 0x1013 }, { 5775, 0x3011 }, { 5779, 0x0100 }, { 5780, 0x0000 }, + { 5780, 0x5530 }, { 5786, 0x22b8 }, { 5792, 0x0000 }, { 5792, 0x3000 }, + { 5794, 0xb011 }, { 5799, 0x9702 }, { 5805, 0xfb07 }, { 5815, 0x113a }, + { 5821, 0x03b0 }, { 5826, 0x0113 }, { 5830, 0x0021 }, { 5832, 0x0000 }, + /* 0xb100 */ + { 5832, 0x1b00 }, { 5836, 0x3b0d }, { 5844, 0x1138 }, { 5849, 0x03b0 }, + { 5854, 0x0113 }, { 5858, 0x1133 }, { 5864, 0x0001 }, { 5865, 0x1300 }, + { 5868, 0x2b05 }, { 5874, 0x111c }, { 5879, 0x0100 }, { 5880, 0x0000 }, + { 5880, 0x1000 }, { 5881, 0xb011 }, { 5886, 0x1300 }, { 5889, 0x2a01 }, + /* 0xb200 */ + { 5893, 0x1930 }, { 5898, 0x02b0 }, { 5902, 0x0001 }, { 5903, 0x1010 }, + { 5905, 0x0000 }, { 5905, 0x1100 }, { 5907, 0x0301 }, { 5910, 0x1030 }, + { 5913, 0x0230 }, { 5916, 0x0713 }, { 5922, 0x146b }, { 5929, 0x0011 }, + { 5931, 0x1300 }, { 5934, 0x2b05 }, { 5940, 0xf974 }, { 5950, 0x8fb8 }, + /* 0xb300 */ + { 5959, 0x0113 }, { 5963, 0x103b }, { 5969, 0x0000 }, { 5969, 0x0000 }, + { 5969, 0x0000 }, { 5969, 0xd970 }, { 5977, 0x4ab0 }, { 5983, 0x0113 }, + { 5987, 0x103b }, { 5993, 0x0011 }, { 5995, 0x1103 }, { 5999, 0x0000 }, + { 5999, 0x5930 }, { 6005, 0x2ab1 }, { 6012, 0x0111 }, { 6015, 0x1000 }, + /* 0xb400 */ + { 6016, 0x0000 }, { 6016, 0x1101 }, { 6019, 0x0b01 }, { 6023, 0x0010 }, + { 6024, 0x0000 }, { 6024, 0x0113 }, { 6028, 0x102b }, { 6033, 0x0000 }, + { 6033, 0x0101 }, { 6035, 0x2000 }, { 6036, 0x1110 }, { 6039, 0x02a0 }, + { 6042, 0x0111 }, { 6045, 0x3021 }, { 6049, 0xb059 }, { 6056, 0x0102 }, + /* 0xb500 */ + { 6058, 0x0000 }, { 6058, 0x1930 }, { 6063, 0x07b0 }, { 6069, 0x0113 }, + { 6073, 0x383b }, { 6081, 0xb011 }, { 6086, 0x0003 }, { 6088, 0x0000 }, + { 6088, 0x0000 }, { 6088, 0x0000 }, { 6088, 0x0d13 }, { 6094, 0x383b }, + { 6102, 0xb011 }, { 6107, 0x0103 }, { 6110, 0x1000 }, { 6111, 0x0000 }, + /* 0xb600 */ + { 6111, 0x0000 }, { 6111, 0x0113 }, { 6115, 0x1020 }, { 6117, 0x0010 }, + { 6118, 0x0100 }, { 6119, 0x0000 }, { 6119, 0x0110 }, { 6121, 0x0000 }, + { 6121, 0x0000 }, { 6121, 0x3000 }, { 6123, 0x1811 }, { 6127, 0x0002 }, + { 6128, 0x0000 }, { 6128, 0x0010 }, { 6129, 0x0000 }, { 6129, 0x0111 }, + /* 0xb700 */ + { 6132, 0x0023 }, { 6135, 0x0000 }, { 6135, 0x9300 }, { 6139, 0x0b01 }, + { 6143, 0x1110 }, { 6146, 0x0030 }, { 6148, 0x0111 }, { 6151, 0x302b }, + { 6157, 0xb011 }, { 6162, 0x13c7 }, { 6170, 0x3b01 }, { 6176, 0x0130 }, + { 6179, 0x0280 }, { 6181, 0x0000 }, { 6181, 0x3000 }, { 6183, 0xb011 }, + /* 0xb800 */ + { 6188, 0x1383 }, { 6194, 0x2b01 }, { 6199, 0x1130 }, { 6203, 0x03b0 }, + { 6208, 0x0011 }, { 6210, 0x300a }, { 6214, 0xb011 }, { 6219, 0x1102 }, + { 6222, 0x2000 }, { 6223, 0x0000 }, { 6223, 0x0100 }, { 6224, 0x0111 }, + { 6227, 0x102b }, { 6232, 0xa011 }, { 6236, 0x1302 }, { 6240, 0x2b01 }, + /* 0xb900 */ + { 6245, 0x0010 }, { 6246, 0x0100 }, { 6247, 0x0001 }, { 6248, 0x3000 }, + { 6250, 0x9011 }, { 6254, 0x1302 }, { 6258, 0x2b01 }, { 6263, 0x1130 }, + { 6267, 0x66b0 }, { 6274, 0x0000 }, { 6274, 0x3000 }, { 6276, 0xb011 }, + { 6281, 0xd302 }, { 6287, 0x6b07 }, { 6295, 0x113a }, { 6301, 0x07b0 }, + /* 0xba00 */ + { 6307, 0x0103 }, { 6310, 0x0020 }, { 6311, 0x0000 }, { 6311, 0x1300 }, + { 6314, 0x6b05 }, { 6321, 0x1138 }, { 6326, 0x03b0 }, { 6331, 0x0113 }, + { 6335, 0x10b8 }, { 6340, 0x0000 }, { 6340, 0x1b00 }, { 6344, 0x2b05 }, + { 6350, 0x0110 }, { 6352, 0x0300 }, { 6354, 0x0000 }, { 6354, 0x1000 }, + /* 0xbb00 */ + { 6355, 0xa011 }, { 6359, 0x1102 }, { 6362, 0x0a01 }, { 6365, 0x7970 }, + { 6373, 0xa2b0 }, { 6379, 0x0111 }, { 6382, 0x100a }, { 6385, 0x0000 }, + { 6385, 0x1100 }, { 6387, 0x0001 }, { 6388, 0x1110 }, { 6391, 0x0090 }, + { 6393, 0x0111 }, { 6396, 0x0009 }, { 6398, 0x0000 }, { 6398, 0x9300 }, + /* 0xbc00 */ + { 6402, 0xbb05 }, { 6410, 0xf9f2 }, { 6421, 0x22b0 }, { 6426, 0x0113 }, + { 6430, 0x323b }, { 6438, 0x2001 }, { 6440, 0x0000 }, { 6440, 0x0000 }, + { 6440, 0x5930 }, { 6446, 0x06b0 }, { 6451, 0x0193 }, { 6456, 0x303b }, + { 6463, 0xa011 }, { 6467, 0x1123 }, { 6472, 0x0000 }, { 6472, 0x1170 }, + /* 0xbd00 */ + { 6477, 0x02b0 }, { 6481, 0x0011 }, { 6483, 0x1010 }, { 6485, 0x0000 }, + { 6485, 0x1301 }, { 6489, 0x0301 }, { 6492, 0x0110 }, { 6494, 0x0000 }, + { 6494, 0x0793 }, { 6501, 0x162b }, { 6508, 0x0010 }, { 6509, 0x0101 }, + { 6511, 0x0000 }, { 6511, 0x1130 }, { 6515, 0x0200 }, { 6516, 0x0111 }, + /* 0xbe00 */ + { 6519, 0x3029 }, { 6524, 0xb011 }, { 6529, 0x0000 }, { 6529, 0x0000 }, + { 6529, 0x5130 }, { 6534, 0x0eb0 }, { 6540, 0x0513 }, { 6545, 0x383b }, + { 6553, 0xb011 }, { 6558, 0x0303 }, { 6562, 0x0100 }, { 6563, 0x0000 }, + { 6563, 0x0000 }, { 6563, 0x0193 }, { 6568, 0x1039 }, { 6573, 0x0000 }, + /* 0xbf00 */ + { 6573, 0x0302 }, { 6576, 0x3b00 }, { 6581, 0x0000 }, { 6581, 0x0000 }, + { 6581, 0x0113 }, { 6585, 0x0023 }, { 6588, 0x0000 }, { 6588, 0x0000 }, + { 6588, 0x0000 }, { 6588, 0x0010 }, { 6589, 0x0000 }, { 6589, 0x0001 }, + { 6590, 0x3020 }, { 6593, 0x9011 }, { 6597, 0x0002 }, { 6598, 0x0000 }, + /* 0xc000 */ + { 6598, 0x0000 }, { 6598, 0x0000 }, { 6598, 0x0000 }, { 6598, 0x1000 }, + { 6599, 0x0000 }, { 6599, 0x1102 }, { 6602, 0x0301 }, { 6605, 0x0000 }, + { 6605, 0x0000 }, { 6605, 0x0113 }, { 6609, 0xb02b }, { 6616, 0xb079 }, + { 6624, 0x1323 }, { 6630, 0x3b01 }, { 6636, 0x1130 }, { 6640, 0x02b0 }, + /* 0xc100 */ + { 6644, 0x0111 }, { 6647, 0xf021 }, { 6653, 0xb0d9 }, { 6661, 0x1343 }, + { 6667, 0x3b01 }, { 6673, 0x1130 }, { 6677, 0x03b0 }, { 6682, 0x0111 }, + { 6685, 0x7020 }, { 6689, 0xb051 }, { 6695, 0x1322 }, { 6700, 0x2001 }, + { 6702, 0x1110 }, { 6705, 0x0190 }, { 6708, 0x0111 }, { 6711, 0x300b }, + /* 0xc200 */ + { 6716, 0xb011 }, { 6721, 0x9302 }, { 6726, 0xab01 }, { 6732, 0x0016 }, + { 6735, 0x0100 }, { 6736, 0x0113 }, { 6740, 0x3021 }, { 6744, 0xb011 }, + { 6749, 0x0302 }, { 6752, 0x2901 }, { 6756, 0x3130 }, { 6761, 0x02b0 }, + { 6765, 0x0000 }, { 6765, 0x3000 }, { 6767, 0xb819 }, { 6774, 0x1b42 }, + /* 0xc300 */ + { 6780, 0x3301 }, { 6785, 0x1138 }, { 6790, 0x0330 }, { 6794, 0x0000 }, + { 6794, 0x0020 }, { 6795, 0x0000 }, { 6795, 0x1300 }, { 6798, 0x3305 }, + { 6804, 0x1110 }, { 6807, 0x0000 }, { 6807, 0x0000 }, { 6807, 0x0000 }, + { 6807, 0x0001 }, { 6808, 0x9300 }, { 6812, 0x2305 }, { 6817, 0x0130 }, + /* 0xc400 */ + { 6820, 0x0100 }, { 6821, 0x0001 }, { 6822, 0x1010 }, { 6824, 0x3011 }, + { 6828, 0x0100 }, { 6829, 0x0000 }, { 6829, 0x1130 }, { 6833, 0x0230 }, + { 6836, 0x0001 }, { 6837, 0x1010 }, { 6839, 0x0000 }, { 6839, 0x1100 }, + { 6841, 0x0000 }, { 6841, 0x0000 }, { 6841, 0x0200 }, { 6842, 0x8513 }, + /* 0xc500 */ + { 6848, 0x1003 }, { 6851, 0x1011 }, { 6854, 0x1300 }, { 6857, 0x2b01 }, + { 6862, 0x7730 }, { 6870, 0x63b8 }, { 6878, 0x0113 }, { 6882, 0x303b }, + { 6889, 0xb091 }, { 6895, 0x11a2 }, { 6900, 0x0201 }, { 6902, 0x7b30 }, + { 6910, 0x57f0 }, { 6919, 0x0113 }, { 6923, 0x702b }, { 6930, 0xf0d1 }, + /* 0xc600 */ + { 6938, 0x11e3 }, { 6945, 0x1b01 }, { 6950, 0x7130 }, { 6956, 0x0ab9 }, + { 6963, 0x0113 }, { 6967, 0x303b }, { 6974, 0x9001 }, { 6977, 0x1302 }, + { 6981, 0x2b01 }, { 6986, 0x1130 }, { 6990, 0x02b0 }, { 6994, 0x0713 }, + { 7000, 0x302b }, { 7006, 0x3011 }, { 7010, 0x1303 }, { 7015, 0x2301 }, + /* 0xc700 */ + { 7019, 0x1130 }, { 7023, 0x02b0 }, { 7027, 0x0113 }, { 7031, 0x30ab }, + { 7038, 0xb411 }, { 7044, 0x11fe }, { 7053, 0x0901 }, { 7056, 0x7130 }, + { 7062, 0x47b8 }, { 7070, 0x05d3 }, { 7077, 0x307b }, { 7085, 0xb011 }, + { 7090, 0x5303 }, { 7096, 0x2101 }, { 7099, 0x1110 }, { 7102, 0x0000 }, + /* 0xc800 */ + { 7102, 0x0513 }, { 7107, 0x306b }, { 7114, 0xb011 }, { 7119, 0x1102 }, + { 7122, 0x3301 }, { 7127, 0x0010 }, { 7128, 0x0000 }, { 7128, 0x0513 }, + { 7133, 0x38eb }, { 7142, 0xa010 }, { 7145, 0x0102 }, { 7147, 0x3000 }, + { 7149, 0x1110 }, { 7152, 0x02b0 }, { 7156, 0x0013 }, { 7159, 0x3020 }, + /* 0xc900 */ + { 7162, 0xb071 }, { 7169, 0x0102 }, { 7171, 0x1000 }, { 7172, 0x0010 }, + { 7173, 0x0000 }, { 7173, 0x0113 }, { 7177, 0x100b }, { 7181, 0x1011 }, + { 7184, 0x1300 }, { 7187, 0x2b01 }, { 7192, 0x0000 }, { 7192, 0x0000 }, + { 7192, 0x0593 }, { 7198, 0x366b }, { 7207, 0xb095 }, { 7214, 0x1303 }, + /* 0xca00 */ + { 7219, 0x3b01 }, { 7225, 0x0110 }, { 7227, 0x0200 }, { 7228, 0x0000 }, + { 7228, 0x3000 }, { 7230, 0xb011 }, { 7235, 0x0103 }, { 7238, 0x2000 }, + { 7239, 0x0010 }, { 7240, 0x0100 }, { 7241, 0x0000 }, { 7241, 0x3000 }, + { 7243, 0xb011 }, { 7248, 0x030a }, { 7252, 0x1001 }, { 7254, 0x0010 }, + /* 0xcb00 */ + { 7255, 0x0100 }, { 7256, 0x0111 }, { 7259, 0x0003 }, { 7261, 0x0000 }, + { 7261, 0x1302 }, { 7265, 0x2301 }, { 7269, 0x0010 }, { 7270, 0x0300 }, + { 7272, 0x0000 }, { 7272, 0x1000 }, { 7273, 0x0000 }, { 7273, 0x0100 }, + { 7274, 0x0000 }, { 7274, 0x0010 }, { 7275, 0x0290 }, { 7278, 0x0000 }, + /* 0xcc00 */ + { 7278, 0x3000 }, { 7280, 0x3011 }, { 7284, 0x5386 }, { 7291, 0x7b01 }, + { 7298, 0x1130 }, { 7302, 0x03b0 }, { 7307, 0x0151 }, { 7311, 0x0021 }, + { 7313, 0x0000 }, { 7313, 0x1300 }, { 7316, 0x3b01 }, { 7322, 0x1130 }, + { 7326, 0x02b0 }, { 7330, 0x0011 }, { 7332, 0x1010 }, { 7334, 0x0001 }, + /* 0xcd00 */ + { 7335, 0x1302 }, { 7339, 0x2b01 }, { 7344, 0x1110 }, { 7347, 0x0200 }, + { 7348, 0x0000 }, { 7348, 0x1000 }, { 7349, 0xb011 }, { 7354, 0x0102 }, + { 7356, 0x0100 }, { 7357, 0x1130 }, { 7361, 0x02b0 }, { 7365, 0x0001 }, + { 7366, 0x1010 }, { 7368, 0x0001 }, { 7369, 0x1100 }, { 7371, 0x2b01 }, + /* 0xce00 */ + { 7376, 0x1110 }, { 7379, 0x0210 }, { 7381, 0x0113 }, { 7385, 0x002b }, + { 7389, 0x0000 }, { 7389, 0x9300 }, { 7393, 0x2b03 }, { 7399, 0x1130 }, + { 7403, 0x02b0 }, { 7407, 0x0113 }, { 7411, 0x303b }, { 7418, 0x0000 }, + { 7418, 0x0002 }, { 7419, 0x0000 }, { 7419, 0x1930 }, { 7424, 0x03b0 }, + /* 0xcf00 */ + { 7429, 0x0113 }, { 7433, 0x102b }, { 7438, 0xb011 }, { 7443, 0x0103 }, + { 7446, 0x0000 }, { 7446, 0x1130 }, { 7450, 0x02b0 }, { 7454, 0x0113 }, + { 7458, 0x1021 }, { 7461, 0x0000 }, { 7461, 0x0102 }, { 7463, 0x0001 }, + { 7464, 0x0010 }, { 7465, 0x0000 }, { 7465, 0x0113 }, { 7469, 0x102b }, + /* 0xd000 */ + { 7474, 0x0011 }, { 7476, 0x0102 }, { 7478, 0x2000 }, { 7479, 0x1130 }, + { 7483, 0x02b0 }, { 7487, 0x0111 }, { 7490, 0x3001 }, { 7493, 0x3011 }, + { 7497, 0x0002 }, { 7498, 0x0000 }, { 7498, 0x1130 }, { 7502, 0x02b0 }, + { 7506, 0x0313 }, { 7511, 0x303b }, { 7518, 0xb011 }, { 7523, 0x0103 }, + /* 0xd100 */ + { 7526, 0x2000 }, { 7527, 0x0000 }, { 7527, 0x0000 }, { 7527, 0x0513 }, + { 7532, 0x303b }, { 7539, 0xb011 }, { 7544, 0x1102 }, { 7547, 0x1000 }, + { 7548, 0x0110 }, { 7550, 0x0000 }, { 7550, 0x0113 }, { 7554, 0x142b }, + { 7560, 0x0001 }, { 7561, 0x0100 }, { 7562, 0x0000 }, { 7562, 0x0110 }, + /* 0xd200 */ + { 7564, 0x0280 }, { 7566, 0x0001 }, { 7567, 0x3000 }, { 7569, 0xb011 }, + { 7574, 0x0102 }, { 7576, 0x1000 }, { 7577, 0x0010 }, { 7578, 0x0000 }, + { 7578, 0x0113 }, { 7582, 0x1023 }, { 7586, 0x1011 }, { 7589, 0x9302 }, + { 7594, 0x0b05 }, { 7599, 0x1110 }, { 7602, 0x0030 }, { 7604, 0x0113 }, + /* 0xd300 */ + { 7608, 0x702b }, { 7615, 0xb051 }, { 7621, 0x1323 }, { 7627, 0x3b01 }, + { 7633, 0x0030 }, { 7635, 0x0000 }, { 7635, 0x0000 }, { 7635, 0x3000 }, + { 7637, 0xb011 }, { 7642, 0x1303 }, { 7647, 0x2b01 }, { 7652, 0x1110 }, + { 7655, 0x0330 }, { 7659, 0x0101 }, { 7661, 0x300a }, { 7665, 0xb011 }, + /* 0xd400 */ + { 7670, 0x0102 }, { 7672, 0x2000 }, { 7673, 0x0000 }, { 7673, 0x0000 }, + { 7673, 0x0011 }, { 7675, 0x1000 }, { 7676, 0xa011 }, { 7680, 0x9300 }, + { 7684, 0x2b05 }, { 7690, 0x0010 }, { 7691, 0x0200 }, { 7692, 0x0000 }, + { 7692, 0x1000 }, { 7693, 0x9011 }, { 7697, 0x1100 }, { 7699, 0x2901 }, + /* 0xd500 */ + { 7703, 0x1110 }, { 7706, 0x00b0 }, { 7709, 0x0000 }, { 7709, 0x3000 }, + { 7711, 0xb011 }, { 7716, 0x1302 }, { 7720, 0x2b21 }, { 7726, 0x1130 }, + { 7730, 0x03b0 }, { 7735, 0x0001 }, { 7736, 0x0020 }, { 7737, 0x0000 }, + { 7737, 0x1300 }, { 7740, 0x2b05 }, { 7746, 0x1130 }, { 7750, 0x02b0 }, + /* 0xd600 */ + { 7754, 0x0113 }, { 7758, 0x103b }, { 7764, 0x2011 }, { 7767, 0x1300 }, + { 7770, 0x2b21 }, { 7776, 0x1132 }, { 7781, 0x0280 }, { 7783, 0x0013 }, + { 7786, 0x3028 }, { 7790, 0xa011 }, { 7794, 0x1102 }, { 7797, 0x0a01 }, + { 7800, 0x1130 }, { 7804, 0x0292 }, { 7808, 0x0111 }, { 7811, 0x3021 }, + /* 0xd700 */ + { 7815, 0x0011 }, { 7817, 0x1302 }, { 7821, 0x2b01 }, { 7826, 0x1130 }, + { 7830, 0x0290 }, { 7833, 0x03d3 }, { 7840, 0x122b }, { 7846, 0x3011 }, + { 7850, 0x1302 }, { 7854, 0x2b01 }, +}; +static const Summary16 ksc5601_uni2indx_pagef9[17] = { + /* 0xf900 */ + { 7859, 0xffff }, { 7875, 0xffff }, { 7891, 0xffff }, { 7907, 0xffff }, + { 7923, 0xffff }, { 7939, 0xffff }, { 7955, 0xffff }, { 7971, 0xffff }, + { 7987, 0xffff }, { 8003, 0xffff }, { 8019, 0xffff }, { 8035, 0xffff }, + { 8051, 0xffff }, { 8067, 0xffff }, { 8083, 0xffff }, { 8099, 0xffff }, + /* 0xfa00 */ + { 8115, 0x0fff }, +}; +static const Summary16 ksc5601_uni2indx_pageff[15] = { + /* 0xff00 */ + { 8127, 0xfffe }, { 8142, 0xffff }, { 8158, 0xffff }, { 8174, 0xffff }, + { 8190, 0xffff }, { 8206, 0x7fff }, { 8221, 0x0000 }, { 8221, 0x0000 }, + { 8221, 0x0000 }, { 8221, 0x0000 }, { 8221, 0x0000 }, { 8221, 0x0000 }, + { 8221, 0x0000 }, { 8221, 0x0000 }, { 8221, 0x006f }, +}; + +static int +ksc5601_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + const Summary16 *summary = NULL; + if (wc >= 0x0000 && wc < 0x0460) + summary = &ksc5601_uni2indx_page00[(wc>>4)]; + else if (wc >= 0x2000 && wc < 0x2670) + summary = &ksc5601_uni2indx_page20[(wc>>4)-0x200]; + else if (wc >= 0x3000 && wc < 0x33e0) + summary = &ksc5601_uni2indx_page30[(wc>>4)-0x300]; + else if (wc >= 0x4e00 && wc < 0x9fa0) + summary = &ksc5601_uni2indx_page4e[(wc>>4)-0x4e0]; + else if (wc >= 0xac00 && wc < 0xd7a0) + summary = &ksc5601_uni2indx_pageac[(wc>>4)-0xac0]; + else if (wc >= 0xf900 && wc < 0xfa10) + summary = &ksc5601_uni2indx_pagef9[(wc>>4)-0xf90]; + else if (wc >= 0xff00 && wc < 0xfff0) + summary = &ksc5601_uni2indx_pageff[(wc>>4)-0xff0]; + if (summary) { + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + c = ksc5601_2charset[summary->indx + used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/libcharset.h b/jni/parted/libiconv/lib/libcharset.h new file mode 100755 index 0000000..fcf2274 --- /dev/null +++ b/jni/parted/libiconv/lib/libcharset.h @@ -0,0 +1,45 @@ +/* Copyright (C) 2003 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + The GNU CHARSET Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU CHARSET Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with the GNU CHARSET Library; see the file COPYING.LIB. If not, + see . */ + +#ifndef _LIBCHARSET_H +#define _LIBCHARSET_H + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Support for relocatable packages. */ + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +extern void libcharset_set_relocation_prefix (const char *orig_prefix, + const char *curr_prefix); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LIBCHARSET_H */ diff --git a/jni/parted/libiconv/lib/localcharset.h b/jni/parted/libiconv/lib/localcharset.h new file mode 100755 index 0000000..58d3e6a --- /dev/null +++ b/jni/parted/libiconv/lib/localcharset.h @@ -0,0 +1,145 @@ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2, 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . */ + +#ifndef _LOCALCHARSET_H +#define _LOCALCHARSET_H + +#if 1 && BUILDING_LIBCHARSET +#define LIBCHARSET_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_LIBCHARSET +#define LIBCHARSET_DLL_EXPORTED __declspec(dllexport) +#else +#define LIBCHARSET_DLL_EXPORTED +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. + If the canonical name cannot be determined, the result is a non-canonical + name. */ +extern LIBCHARSET_DLL_EXPORTED const char * locale_charset (void); + +/* About GNU canonical names for character encodings: + + Every canonical name must be supported by GNU libiconv. Support by GNU libc + is also desirable. + + The name is case insensitive. Usually an upper case MIME charset name is + preferred. + + The current list of these GNU canonical names is: + + name MIME? used by which systems + (darwin = Mac OS X, windows = native Windows) + + ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin + ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-3 Y glibc solaris cygwin + ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin + ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-6 Y glibc aix hpux solaris cygwin + ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos + ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos + ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-14 glibc cygwin + ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin + KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin + KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin + KOI8-T glibc + CP437 dos + CP775 dos + CP850 aix osf dos + CP852 dos + CP855 dos + CP856 aix + CP857 dos + CP861 dos + CP862 dos + CP864 dos + CP865 dos + CP866 freebsd netbsd openbsd darwin dos + CP869 dos + CP874 windows dos + CP922 aix + CP932 aix cygwin windows dos + CP943 aix zos + CP949 osf darwin windows dos + CP950 windows dos + CP1046 aix + CP1124 aix + CP1125 dos + CP1129 aix + CP1131 freebsd darwin + CP1250 windows + CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows + CP1252 aix windows + CP1253 windows + CP1254 windows + CP1255 glibc windows + CP1256 windows + CP1257 windows + GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos + EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin + EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos + EUC-TW glibc aix hpux irix osf solaris netbsd + BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos + BIG5-HKSCS glibc hpux solaris netbsd darwin + GBK glibc aix osf solaris freebsd darwin cygwin windows dos + GB18030 glibc hpux solaris freebsd netbsd darwin + SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin + JOHAB glibc solaris windows + TIS-620 glibc aix hpux osf solaris cygwin zos + VISCII Y glibc + TCVN5712-1 glibc + ARMSCII-8 glibc freebsd netbsd darwin + GEORGIAN-PS glibc cygwin + PT154 glibc netbsd cygwin + HP-ROMAN8 hpux + HP-ARABIC8 hpux + HP-GREEK8 hpux + HP-HEBREW8 hpux + HP-TURKISH8 hpux + HP-KANA8 hpux + DEC-KANJI osf + DEC-HANYU osf + UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos + + Note: Names which are not marked as being a MIME name should not be used in + Internet protocols for information interchange (mail, news, etc.). + + Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications + must understand both names and treat them as equivalent. + */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/jni/parted/libiconv/lib/loop_unicode.h b/jni/parted/libiconv/lib/loop_unicode.h new file mode 100755 index 0000000..973e8b7 --- /dev/null +++ b/jni/parted/libiconv/lib/loop_unicode.h @@ -0,0 +1,526 @@ +/* + * Copyright (C) 1999-2003, 2005-2006, 2008 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* This file defines the conversion loop via Unicode as a pivot encoding. */ + +/* Attempt to transliterate wc. Return code as in xxx_wctomb. */ +static int unicode_transliterate (conv_t cd, ucs4_t wc, + unsigned char* outptr, size_t outleft) +{ + if (cd->oflags & HAVE_HANGUL_JAMO) { + /* Decompose Hangul into Jamo. Use double-width Jamo (contained + in all Korean encodings and ISO-2022-JP-2), not half-width Jamo + (contained in Unicode only). */ + ucs4_t buf[3]; + int ret = johab_hangul_decompose(cd,buf,wc); + if (ret != RET_ILUNI) { + /* we know 1 <= ret <= 3 */ + state_t backup_state = cd->ostate; + unsigned char* backup_outptr = outptr; + size_t backup_outleft = outleft; + int i, sub_outcount; + for (i = 0; i < ret; i++) { + if (outleft == 0) { + sub_outcount = RET_TOOSMALL; + goto johab_hangul_failed; + } + sub_outcount = cd->ofuncs.xxx_wctomb(cd,outptr,buf[i],outleft); + if (sub_outcount <= RET_ILUNI) + goto johab_hangul_failed; + if (!(sub_outcount <= outleft)) abort(); + outptr += sub_outcount; outleft -= sub_outcount; + } + return outptr-backup_outptr; + johab_hangul_failed: + cd->ostate = backup_state; + outptr = backup_outptr; + outleft = backup_outleft; + if (sub_outcount != RET_ILUNI) + return RET_TOOSMALL; + } + } + { + /* Try to use a variant, but postfix it with + U+303E IDEOGRAPHIC VARIATION INDICATOR + (cf. Ken Lunde's "CJKV information processing", p. 188). */ + int indx = -1; + if (wc == 0x3006) + indx = 0; + else if (wc == 0x30f6) + indx = 1; + else if (wc >= 0x4e00 && wc < 0xa000) + indx = cjk_variants_indx[wc-0x4e00]; + if (indx >= 0) { + for (;; indx++) { + ucs4_t buf[2]; + unsigned short variant = cjk_variants[indx]; + unsigned short last = variant & 0x8000; + variant &= 0x7fff; + variant += 0x3000; + buf[0] = variant; buf[1] = 0x303e; + { + state_t backup_state = cd->ostate; + unsigned char* backup_outptr = outptr; + size_t backup_outleft = outleft; + int i, sub_outcount; + for (i = 0; i < 2; i++) { + if (outleft == 0) { + sub_outcount = RET_TOOSMALL; + goto variant_failed; + } + sub_outcount = cd->ofuncs.xxx_wctomb(cd,outptr,buf[i],outleft); + if (sub_outcount <= RET_ILUNI) + goto variant_failed; + if (!(sub_outcount <= outleft)) abort(); + outptr += sub_outcount; outleft -= sub_outcount; + } + return outptr-backup_outptr; + variant_failed: + cd->ostate = backup_state; + outptr = backup_outptr; + outleft = backup_outleft; + if (sub_outcount != RET_ILUNI) + return RET_TOOSMALL; + } + if (last) + break; + } + } + } + if (wc >= 0x2018 && wc <= 0x201a) { + /* Special case for quotation marks 0x2018, 0x2019, 0x201a */ + ucs4_t substitute = + (cd->oflags & HAVE_QUOTATION_MARKS + ? (wc == 0x201a ? 0x2018 : wc) + : (cd->oflags & HAVE_ACCENTS + ? (wc==0x2019 ? 0x00b4 : 0x0060) /* use accents */ + : 0x0027 /* use apostrophe */ + ) ); + int outcount = cd->ofuncs.xxx_wctomb(cd,outptr,substitute,outleft); + if (outcount != RET_ILUNI) + return outcount; + } + { + /* Use the transliteration table. */ + int indx = translit_index(wc); + if (indx >= 0) { + const unsigned int * cp = &translit_data[indx]; + unsigned int num = *cp++; + state_t backup_state = cd->ostate; + unsigned char* backup_outptr = outptr; + size_t backup_outleft = outleft; + unsigned int i; + int sub_outcount; + for (i = 0; i < num; i++) { + if (outleft == 0) { + sub_outcount = RET_TOOSMALL; + goto translit_failed; + } + sub_outcount = cd->ofuncs.xxx_wctomb(cd,outptr,cp[i],outleft); + if (sub_outcount == RET_ILUNI) + /* Recursive transliteration. */ + sub_outcount = unicode_transliterate(cd,cp[i],outptr,outleft); + if (sub_outcount <= RET_ILUNI) + goto translit_failed; + if (!(sub_outcount <= outleft)) abort(); + outptr += sub_outcount; outleft -= sub_outcount; + } + return outptr-backup_outptr; + translit_failed: + cd->ostate = backup_state; + outptr = backup_outptr; + outleft = backup_outleft; + if (sub_outcount != RET_ILUNI) + return RET_TOOSMALL; + } + } + return RET_ILUNI; +} + +#ifndef LIBICONV_PLUG + +struct uc_to_mb_fallback_locals { + unsigned char* l_outbuf; + size_t l_outbytesleft; + int l_errno; +}; + +static void uc_to_mb_write_replacement (const char *buf, size_t buflen, + void* callback_arg) +{ + struct uc_to_mb_fallback_locals * plocals = + (struct uc_to_mb_fallback_locals *) callback_arg; + /* Do nothing if already encountered an error in a previous call. */ + if (plocals->l_errno == 0) { + /* Attempt to copy the passed buffer to the output buffer. */ + if (plocals->l_outbytesleft < buflen) + plocals->l_errno = E2BIG; + else { + memcpy(plocals->l_outbuf, buf, buflen); + plocals->l_outbuf += buflen; + plocals->l_outbytesleft -= buflen; + } + } +} + +struct mb_to_uc_fallback_locals { + conv_t l_cd; + unsigned char* l_outbuf; + size_t l_outbytesleft; + int l_errno; +}; + +static void mb_to_uc_write_replacement (const unsigned int *buf, size_t buflen, + void* callback_arg) +{ + struct mb_to_uc_fallback_locals * plocals = + (struct mb_to_uc_fallback_locals *) callback_arg; + /* Do nothing if already encountered an error in a previous call. */ + if (plocals->l_errno == 0) { + /* Attempt to convert the passed buffer to the target encoding. */ + conv_t cd = plocals->l_cd; + unsigned char* outptr = plocals->l_outbuf; + size_t outleft = plocals->l_outbytesleft; + for (; buflen > 0; buf++, buflen--) { + ucs4_t wc = *buf; + int outcount; + if (outleft == 0) { + plocals->l_errno = E2BIG; + break; + } + outcount = cd->ofuncs.xxx_wctomb(cd,outptr,wc,outleft); + if (outcount != RET_ILUNI) + goto outcount_ok; + /* Handle Unicode tag characters (range U+E0000..U+E007F). */ + if ((wc >> 7) == (0xe0000 >> 7)) + goto outcount_zero; + /* Try transliteration. */ + if (cd->transliterate) { + outcount = unicode_transliterate(cd,wc,outptr,outleft); + if (outcount != RET_ILUNI) + goto outcount_ok; + } + if (cd->discard_ilseq) { + outcount = 0; + goto outcount_ok; + } + #ifndef LIBICONV_PLUG + else if (cd->fallbacks.uc_to_mb_fallback != NULL) { + struct uc_to_mb_fallback_locals locals; + locals.l_outbuf = outptr; + locals.l_outbytesleft = outleft; + locals.l_errno = 0; + cd->fallbacks.uc_to_mb_fallback(wc, + uc_to_mb_write_replacement, + &locals, + cd->fallbacks.data); + if (locals.l_errno != 0) { + plocals->l_errno = locals.l_errno; + break; + } + outptr = locals.l_outbuf; + outleft = locals.l_outbytesleft; + outcount = 0; + goto outcount_ok; + } + #endif + outcount = cd->ofuncs.xxx_wctomb(cd,outptr,0xFFFD,outleft); + if (outcount != RET_ILUNI) + goto outcount_ok; + plocals->l_errno = EILSEQ; + break; + outcount_ok: + if (outcount < 0) { + plocals->l_errno = E2BIG; + break; + } + #ifndef LIBICONV_PLUG + if (cd->hooks.uc_hook) + (*cd->hooks.uc_hook)(wc, cd->hooks.data); + #endif + if (!(outcount <= outleft)) abort(); + outptr += outcount; outleft -= outcount; + outcount_zero: ; + } + plocals->l_outbuf = outptr; + plocals->l_outbytesleft = outleft; + } +} + +#endif /* !LIBICONV_PLUG */ + +static size_t unicode_loop_convert (iconv_t icd, + const char* * inbuf, size_t *inbytesleft, + char* * outbuf, size_t *outbytesleft) +{ + conv_t cd = (conv_t) icd; + size_t result = 0; + const unsigned char* inptr = (const unsigned char*) *inbuf; + size_t inleft = *inbytesleft; + unsigned char* outptr = (unsigned char*) *outbuf; + size_t outleft = *outbytesleft; + while (inleft > 0) { + state_t last_istate = cd->istate; + ucs4_t wc; + int incount; + int outcount; + incount = cd->ifuncs.xxx_mbtowc(cd,&wc,inptr,inleft); + if (incount < 0) { + if ((unsigned int)(-1-incount) % 2 == (unsigned int)(-1-RET_ILSEQ) % 2) { + /* Case 1: invalid input, possibly after a shift sequence */ + incount = DECODE_SHIFT_ILSEQ(incount); + if (cd->discard_ilseq) { + switch (cd->iindex) { + case ei_ucs4: case ei_ucs4be: case ei_ucs4le: + case ei_utf32: case ei_utf32be: case ei_utf32le: + case ei_ucs4internal: case ei_ucs4swapped: + incount += 4; break; + case ei_ucs2: case ei_ucs2be: case ei_ucs2le: + case ei_utf16: case ei_utf16be: case ei_utf16le: + case ei_ucs2internal: case ei_ucs2swapped: + incount += 2; break; + default: + incount += 1; break; + } + goto outcount_zero; + } + #ifndef LIBICONV_PLUG + else if (cd->fallbacks.mb_to_uc_fallback != NULL) { + unsigned int incount2; + struct mb_to_uc_fallback_locals locals; + switch (cd->iindex) { + case ei_ucs4: case ei_ucs4be: case ei_ucs4le: + case ei_utf32: case ei_utf32be: case ei_utf32le: + case ei_ucs4internal: case ei_ucs4swapped: + incount2 = 4; break; + case ei_ucs2: case ei_ucs2be: case ei_ucs2le: + case ei_utf16: case ei_utf16be: case ei_utf16le: + case ei_ucs2internal: case ei_ucs2swapped: + incount2 = 2; break; + default: + incount2 = 1; break; + } + locals.l_cd = cd; + locals.l_outbuf = outptr; + locals.l_outbytesleft = outleft; + locals.l_errno = 0; + cd->fallbacks.mb_to_uc_fallback((const char*)inptr+incount, incount2, + mb_to_uc_write_replacement, + &locals, + cd->fallbacks.data); + if (locals.l_errno != 0) { + inptr += incount; inleft -= incount; + errno = locals.l_errno; + result = -1; + break; + } + incount += incount2; + outptr = locals.l_outbuf; + outleft = locals.l_outbytesleft; + result += 1; + goto outcount_zero; + } + #endif + inptr += incount; inleft -= incount; + errno = EILSEQ; + result = -1; + break; + } + if (incount == RET_TOOFEW(0)) { + /* Case 2: not enough bytes available to detect anything */ + errno = EINVAL; + result = -1; + break; + } + /* Case 3: k bytes read, but only a shift sequence */ + incount = DECODE_TOOFEW(incount); + } else { + /* Case 4: k bytes read, making up a wide character */ + if (outleft == 0) { + cd->istate = last_istate; + errno = E2BIG; + result = -1; + break; + } + outcount = cd->ofuncs.xxx_wctomb(cd,outptr,wc,outleft); + if (outcount != RET_ILUNI) + goto outcount_ok; + /* Handle Unicode tag characters (range U+E0000..U+E007F). */ + if ((wc >> 7) == (0xe0000 >> 7)) + goto outcount_zero; + /* Try transliteration. */ + result++; + if (cd->transliterate) { + outcount = unicode_transliterate(cd,wc,outptr,outleft); + if (outcount != RET_ILUNI) + goto outcount_ok; + } + if (cd->discard_ilseq) { + outcount = 0; + goto outcount_ok; + } + #ifndef LIBICONV_PLUG + else if (cd->fallbacks.uc_to_mb_fallback != NULL) { + struct uc_to_mb_fallback_locals locals; + locals.l_outbuf = outptr; + locals.l_outbytesleft = outleft; + locals.l_errno = 0; + cd->fallbacks.uc_to_mb_fallback(wc, + uc_to_mb_write_replacement, + &locals, + cd->fallbacks.data); + if (locals.l_errno != 0) { + cd->istate = last_istate; + errno = locals.l_errno; + return -1; + } + outptr = locals.l_outbuf; + outleft = locals.l_outbytesleft; + outcount = 0; + goto outcount_ok; + } + #endif + outcount = cd->ofuncs.xxx_wctomb(cd,outptr,0xFFFD,outleft); + if (outcount != RET_ILUNI) + goto outcount_ok; + cd->istate = last_istate; + errno = EILSEQ; + result = -1; + break; + outcount_ok: + if (outcount < 0) { + cd->istate = last_istate; + errno = E2BIG; + result = -1; + break; + } + #ifndef LIBICONV_PLUG + if (cd->hooks.uc_hook) + (*cd->hooks.uc_hook)(wc, cd->hooks.data); + #endif + if (!(outcount <= outleft)) abort(); + outptr += outcount; outleft -= outcount; + } + outcount_zero: + if (!(incount <= inleft)) abort(); + inptr += incount; inleft -= incount; + } + *inbuf = (const char*) inptr; + *inbytesleft = inleft; + *outbuf = (char*) outptr; + *outbytesleft = outleft; + return result; +} + +static size_t unicode_loop_reset (iconv_t icd, + char* * outbuf, size_t *outbytesleft) +{ + conv_t cd = (conv_t) icd; + if (outbuf == NULL || *outbuf == NULL) { + /* Reset the states. */ + memset(&cd->istate,'\0',sizeof(state_t)); + memset(&cd->ostate,'\0',sizeof(state_t)); + return 0; + } else { + size_t result = 0; + if (cd->ifuncs.xxx_flushwc) { + state_t last_istate = cd->istate; + ucs4_t wc; + if (cd->ifuncs.xxx_flushwc(cd, &wc)) { + unsigned char* outptr = (unsigned char*) *outbuf; + size_t outleft = *outbytesleft; + int outcount = cd->ofuncs.xxx_wctomb(cd,outptr,wc,outleft); + if (outcount != RET_ILUNI) + goto outcount_ok; + /* Handle Unicode tag characters (range U+E0000..U+E007F). */ + if ((wc >> 7) == (0xe0000 >> 7)) + goto outcount_zero; + /* Try transliteration. */ + result++; + if (cd->transliterate) { + outcount = unicode_transliterate(cd,wc,outptr,outleft); + if (outcount != RET_ILUNI) + goto outcount_ok; + } + if (cd->discard_ilseq) { + outcount = 0; + goto outcount_ok; + } + #ifndef LIBICONV_PLUG + else if (cd->fallbacks.uc_to_mb_fallback != NULL) { + struct uc_to_mb_fallback_locals locals; + locals.l_outbuf = outptr; + locals.l_outbytesleft = outleft; + locals.l_errno = 0; + cd->fallbacks.uc_to_mb_fallback(wc, + uc_to_mb_write_replacement, + &locals, + cd->fallbacks.data); + if (locals.l_errno != 0) { + cd->istate = last_istate; + errno = locals.l_errno; + return -1; + } + outptr = locals.l_outbuf; + outleft = locals.l_outbytesleft; + outcount = 0; + goto outcount_ok; + } + #endif + outcount = cd->ofuncs.xxx_wctomb(cd,outptr,0xFFFD,outleft); + if (outcount != RET_ILUNI) + goto outcount_ok; + cd->istate = last_istate; + errno = EILSEQ; + return -1; + outcount_ok: + if (outcount < 0) { + cd->istate = last_istate; + errno = E2BIG; + return -1; + } + #ifndef LIBICONV_PLUG + if (cd->hooks.uc_hook) + (*cd->hooks.uc_hook)(wc, cd->hooks.data); + #endif + if (!(outcount <= outleft)) abort(); + outptr += outcount; + outleft -= outcount; + outcount_zero: + *outbuf = (char*) outptr; + *outbytesleft = outleft; + } + } + if (cd->ofuncs.xxx_reset) { + unsigned char* outptr = (unsigned char*) *outbuf; + size_t outleft = *outbytesleft; + int outcount = cd->ofuncs.xxx_reset(cd,outptr,outleft); + if (outcount < 0) { + errno = E2BIG; + return -1; + } + if (!(outcount <= outleft)) abort(); + *outbuf = (char*) (outptr + outcount); + *outbytesleft = outleft - outcount; + } + memset(&cd->istate,'\0',sizeof(state_t)); + memset(&cd->ostate,'\0',sizeof(state_t)); + return result; + } +} diff --git a/jni/parted/libiconv/lib/loop_wchar.h b/jni/parted/libiconv/lib/loop_wchar.h new file mode 100755 index 0000000..a90c729 --- /dev/null +++ b/jni/parted/libiconv/lib/loop_wchar.h @@ -0,0 +1,473 @@ +/* + * Copyright (C) 2000-2002, 2005-2006, 2008-2009, 2011 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* This file defines three conversion loops: + - from wchar_t to anything else, + - from anything else to wchar_t, + - from wchar_t to wchar_t. + */ + +#if HAVE_WCRTOMB || HAVE_MBRTOWC +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . + In some builds of uClibc, is nonexistent and wchar_t is defined + by . */ +# include +# include +# include +# include +# define BUF_SIZE 64 /* assume MB_LEN_MAX <= 64 */ + /* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ +// extern size_t mbrtowc (); +# ifdef mbstate_t +# define mbrtowc(pwc, s, n, ps) (mbrtowc)(pwc, s, n, 0) +# define mbsinit(ps) 1 +# endif +# ifndef mbsinit +# if !HAVE_MBSINIT +# define mbsinit(ps) 1 +# endif +# endif +#endif + +/* + * The first two conversion loops have an extended conversion descriptor. + */ +struct wchar_conv_struct { + struct conv_struct parent; +#if HAVE_WCRTOMB || HAVE_MBRTOWC + mbstate_t state; +#endif +}; + + +#if HAVE_WCRTOMB + +/* From wchar_t to anything else. */ + +#ifndef LIBICONV_PLUG + +#if 0 + +struct wc_to_mb_fallback_locals { + struct wchar_conv_struct * l_wcd; + char* l_outbuf; + size_t l_outbytesleft; + int l_errno; +}; + +/* A callback that writes a string given in the locale encoding. */ +static void wc_to_mb_write_replacement (const char *buf, size_t buflen, + void* callback_arg) +{ + struct wc_to_mb_fallback_locals * plocals = + (struct wc_to_mb_fallback_locals *) callback_arg; + /* Do nothing if already encountered an error in a previous call. */ + if (plocals->l_errno == 0) { + /* Attempt to convert the passed buffer to the target encoding. + Here we don't support characters split across multiple calls. */ + const char* bufptr = buf; + size_t bufleft = buflen; + size_t res = unicode_loop_convert(&plocals->l_wcd->parent, + &bufptr,&bufleft, + &plocals->l_outbuf,&plocals->l_outbytesleft); + if (res == (size_t)(-1)) { + if (errno == EILSEQ || errno == EINVAL) + /* Invalid buf contents. */ + plocals->l_errno = EILSEQ; + else if (errno == E2BIG) + /* Output buffer too small. */ + plocals->l_errno = E2BIG; + else + abort(); + } else { + /* Successful conversion. */ + if (bufleft > 0) + abort(); + } + } +} + +#else + +struct wc_to_mb_fallback_locals { + char* l_outbuf; + size_t l_outbytesleft; + int l_errno; +}; + +/* A callback that writes a string given in the target encoding. */ +static void wc_to_mb_write_replacement (const char *buf, size_t buflen, + void* callback_arg) +{ + struct wc_to_mb_fallback_locals * plocals = + (struct wc_to_mb_fallback_locals *) callback_arg; + /* Do nothing if already encountered an error in a previous call. */ + if (plocals->l_errno == 0) { + /* Attempt to copy the passed buffer to the output buffer. */ + if (plocals->l_outbytesleft < buflen) + plocals->l_errno = E2BIG; + else { + memcpy(plocals->l_outbuf, buf, buflen); + plocals->l_outbuf += buflen; + plocals->l_outbytesleft -= buflen; + } + } +} + +#endif + +#endif /* !LIBICONV_PLUG */ + +static size_t wchar_from_loop_convert (iconv_t icd, + const char* * inbuf, size_t *inbytesleft, + char* * outbuf, size_t *outbytesleft) +{ + struct wchar_conv_struct * wcd = (struct wchar_conv_struct *) icd; + size_t result = 0; + while (*inbytesleft >= sizeof(wchar_t)) { + const wchar_t * inptr = (const wchar_t *) *inbuf; + size_t inleft = *inbytesleft; + char buf[BUF_SIZE]; + mbstate_t state = wcd->state; + size_t bufcount = 0; + while (inleft >= sizeof(wchar_t)) { + /* Convert one wchar_t to multibyte representation. */ + size_t count = wcrtomb(buf+bufcount,*inptr,&state); + if (count == (size_t)(-1)) { + /* Invalid input. */ + if (wcd->parent.discard_ilseq) { + count = 0; + } + #ifndef LIBICONV_PLUG + else if (wcd->parent.fallbacks.wc_to_mb_fallback != NULL) { + /* Drop the contents of buf[] accumulated so far, and instead + pass all queued wide characters to the fallback handler. */ + struct wc_to_mb_fallback_locals locals; + const wchar_t * fallback_inptr; + #if 0 + locals.l_wcd = wcd; + #endif + locals.l_outbuf = *outbuf; + locals.l_outbytesleft = *outbytesleft; + locals.l_errno = 0; + for (fallback_inptr = (const wchar_t *) *inbuf; + fallback_inptr <= inptr; + fallback_inptr++) + wcd->parent.fallbacks.wc_to_mb_fallback(*fallback_inptr, + wc_to_mb_write_replacement, + &locals, + wcd->parent.fallbacks.data); + if (locals.l_errno != 0) { + errno = locals.l_errno; + return -1; + } + wcd->state = state; + *inbuf = (const char *) (inptr + 1); + *inbytesleft = inleft - sizeof(wchar_t); + *outbuf = locals.l_outbuf; + *outbytesleft = locals.l_outbytesleft; + result += 1; + break; + } + #endif + else { + errno = EILSEQ; + return -1; + } + } + inptr++; + inleft -= sizeof(wchar_t); + bufcount += count; + if (count == 0) { + /* Continue, append next wchar_t. */ + } else { + /* Attempt to convert the accumulated multibyte representations + to the target encoding. */ + const char* bufptr = buf; + size_t bufleft = bufcount; + char* outptr = *outbuf; + size_t outleft = *outbytesleft; + size_t res = unicode_loop_convert(&wcd->parent, + &bufptr,&bufleft, + &outptr,&outleft); + if (res == (size_t)(-1)) { + if (errno == EILSEQ) + /* Invalid input. */ + return -1; + else if (errno == E2BIG) + /* Output buffer too small. */ + return -1; + else if (errno == EINVAL) { + /* Continue, append next wchar_t, but avoid buffer overrun. */ + if (bufcount + MB_CUR_MAX > BUF_SIZE) + abort(); + } else + abort(); + } else { + /* Successful conversion. */ + wcd->state = state; + *inbuf = (const char *) inptr; + *inbytesleft = inleft; + *outbuf = outptr; + *outbytesleft = outleft; + result += res; + break; + } + } + } + } + return result; +} + +static size_t wchar_from_loop_reset (iconv_t icd, + char* * outbuf, size_t *outbytesleft) +{ + struct wchar_conv_struct * wcd = (struct wchar_conv_struct *) icd; + if (outbuf == NULL || *outbuf == NULL) { + /* Reset the states. */ + memset(&wcd->state,'\0',sizeof(mbstate_t)); + return unicode_loop_reset(&wcd->parent,NULL,NULL); + } else { + if (!mbsinit(&wcd->state)) { + mbstate_t state = wcd->state; + char buf[BUF_SIZE]; + size_t bufcount = wcrtomb(buf,(wchar_t)0,&state); + if (bufcount == (size_t)(-1) || bufcount == 0 || buf[bufcount-1] != '\0') + abort(); + else { + const char* bufptr = buf; + size_t bufleft = bufcount-1; + char* outptr = *outbuf; + size_t outleft = *outbytesleft; + size_t res = unicode_loop_convert(&wcd->parent, + &bufptr,&bufleft, + &outptr,&outleft); + if (res == (size_t)(-1)) { + if (errno == E2BIG) + return -1; + else + abort(); + } else { + res = unicode_loop_reset(&wcd->parent,&outptr,&outleft); + if (res == (size_t)(-1)) + return res; + else { + /* Successful. */ + wcd->state = state; + *outbuf = outptr; + *outbytesleft = outleft; + return 0; + } + } + } + } else + return unicode_loop_reset(&wcd->parent,outbuf,outbytesleft); + } +} + +#endif + + +#if HAVE_MBRTOWC + +/* From anything else to wchar_t. */ + +#ifndef LIBICONV_PLUG + +struct mb_to_wc_fallback_locals { + char* l_outbuf; + size_t l_outbytesleft; + int l_errno; +}; + +static void mb_to_wc_write_replacement (const wchar_t *buf, size_t buflen, + void* callback_arg) +{ + struct mb_to_wc_fallback_locals * plocals = + (struct mb_to_wc_fallback_locals *) callback_arg; + /* Do nothing if already encountered an error in a previous call. */ + if (plocals->l_errno == 0) { + /* Attempt to copy the passed buffer to the output buffer. */ + if (plocals->l_outbytesleft < sizeof(wchar_t)*buflen) + plocals->l_errno = E2BIG; + else { + for (; buflen > 0; buf++, buflen--) { + *(wchar_t*) plocals->l_outbuf = *buf; + plocals->l_outbuf += sizeof(wchar_t); + plocals->l_outbytesleft -= sizeof(wchar_t); + } + } + } +} + +#endif /* !LIBICONV_PLUG */ + +static size_t wchar_to_loop_convert (iconv_t icd, + const char* * inbuf, size_t *inbytesleft, + char* * outbuf, size_t *outbytesleft) +{ + struct wchar_conv_struct * wcd = (struct wchar_conv_struct *) icd; + size_t result = 0; + while (*inbytesleft > 0) { + size_t incount; + for (incount = 1; ; ) { + /* Here incount <= *inbytesleft. */ + char buf[BUF_SIZE]; + const char* inptr = *inbuf; + size_t inleft = incount; + char* bufptr = buf; + size_t bufleft = BUF_SIZE; + size_t res = unicode_loop_convert(&wcd->parent, + &inptr,&inleft, + &bufptr,&bufleft); + if (res == (size_t)(-1)) { + if (errno == EILSEQ) + /* Invalid input. */ + return -1; + else if (errno == EINVAL) { + /* Incomplete input. Next try with one more input byte. */ + } else + /* E2BIG shouldn't occur. */ + abort(); + } else { + /* Successful conversion. */ + size_t bufcount = bufptr-buf; /* = BUF_SIZE-bufleft */ + mbstate_t state = wcd->state; + wchar_t wc; + res = mbrtowc(&wc,buf,bufcount,&state); + if (res == (size_t)(-2)) { + /* Next try with one more input byte. */ + } else { + if (res == (size_t)(-1)) { + /* Invalid input. */ + if (wcd->parent.discard_ilseq) { + } + #ifndef LIBICONV_PLUG + else if (wcd->parent.fallbacks.mb_to_wc_fallback != NULL) { + /* Drop the contents of buf[] accumulated so far, and instead + pass all queued chars to the fallback handler. */ + struct mb_to_wc_fallback_locals locals; + locals.l_outbuf = *outbuf; + locals.l_outbytesleft = *outbytesleft; + locals.l_errno = 0; + wcd->parent.fallbacks.mb_to_wc_fallback(*inbuf, incount, + mb_to_wc_write_replacement, + &locals, + wcd->parent.fallbacks.data); + if (locals.l_errno != 0) { + errno = locals.l_errno; + return -1; + } + /* Restoring the state is not needed because it is the initial + state anyway: For all known locale encodings, the multibyte + to wchar_t conversion doesn't have shift state, and we have + excluded partial accumulated characters. */ + /* wcd->state = state; */ + *inbuf += incount; + *inbytesleft -= incount; + *outbuf = locals.l_outbuf; + *outbytesleft = locals.l_outbytesleft; + result += 1; + break; + } + #endif + else + return -1; + } else { + if (*outbytesleft < sizeof(wchar_t)) { + errno = E2BIG; + return -1; + } + *(wchar_t*) *outbuf = wc; + /* Restoring the state is not needed because it is the initial + state anyway: For all known locale encodings, the multibyte + to wchar_t conversion doesn't have shift state, and we have + excluded partial accumulated characters. */ + /* wcd->state = state; */ + *outbuf += sizeof(wchar_t); + *outbytesleft -= sizeof(wchar_t); + } + *inbuf += incount; + *inbytesleft -= incount; + result += res; + break; + } + } + incount++; + if (incount > *inbytesleft) { + /* Incomplete input. */ + errno = EINVAL; + return -1; + } + } + } + return result; +} + +static size_t wchar_to_loop_reset (iconv_t icd, + char* * outbuf, size_t *outbytesleft) +{ + struct wchar_conv_struct * wcd = (struct wchar_conv_struct *) icd; + size_t res = unicode_loop_reset(&wcd->parent,outbuf,outbytesleft); + if (res == (size_t)(-1)) + return res; + memset(&wcd->state,0,sizeof(mbstate_t)); + return 0; +} + +#endif + + +/* From wchar_t to wchar_t. */ + +static size_t wchar_id_loop_convert (iconv_t icd, + const char* * inbuf, size_t *inbytesleft, + char* * outbuf, size_t *outbytesleft) +{ + struct conv_struct * cd = (struct conv_struct *) icd; + const wchar_t* inptr = (const wchar_t*) *inbuf; + size_t inleft = *inbytesleft / sizeof(wchar_t); + wchar_t* outptr = (wchar_t*) *outbuf; + size_t outleft = *outbytesleft / sizeof(wchar_t); + size_t count = (inleft <= outleft ? inleft : outleft); + if (count > 0) { + *inbytesleft -= count * sizeof(wchar_t); + *outbytesleft -= count * sizeof(wchar_t); + do { + wchar_t wc = *inptr++; + *outptr++ = wc; + #ifndef LIBICONV_PLUG + if (cd->hooks.wc_hook) + (*cd->hooks.wc_hook)(wc, cd->hooks.data); + #endif + } while (--count > 0); + *inbuf = (const char*) inptr; + *outbuf = (char*) outptr; + } + return 0; +} + +static size_t wchar_id_loop_reset (iconv_t icd, + char* * outbuf, size_t *outbytesleft) +{ + return 0; +} diff --git a/jni/parted/libiconv/lib/loops.h b/jni/parted/libiconv/lib/loops.h new file mode 100755 index 0000000..8125c36 --- /dev/null +++ b/jni/parted/libiconv/lib/loops.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2000 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* This file defines all the loops. */ + +#include "loop_unicode.h" +#include "loop_wchar.h" + diff --git a/jni/parted/libiconv/lib/mac_arabic.h b/jni/parted/libiconv/lib/mac_arabic.h new file mode 100755 index 0000000..43ea38b --- /dev/null +++ b/jni/parted/libiconv/lib/mac_arabic.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacArabic + */ + +static const unsigned short mac_arabic_2uni[128] = { + /* 0x80 */ + 0x00c4, 0x00a0, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x06ba, 0x00ab, 0x00e7, 0x00e9, 0x00e8, + /* 0x90 */ + 0x00ea, 0x00eb, 0x00ed, 0x2026, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00bb, 0x00f4, 0x00f6, 0x00f7, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + /* 0xa0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x066a, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x060c, 0xfffd, 0xfffd, 0xfffd, + /* 0xb0 */ + 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, + 0x0668, 0x0669, 0xfffd, 0x061b, 0xfffd, 0xfffd, 0xfffd, 0x061f, + /* 0xc0 */ + 0x066d, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, + /* 0xd0 */ + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, + 0x0638, 0x0639, 0x063a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xe0 */ + 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, + 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, + /* 0xf0 */ + 0x0650, 0x0651, 0x0652, 0x067e, 0x0679, 0x0686, 0x06d5, 0x06a4, + 0x06af, 0x0688, 0x0691, 0xfffd, 0xfffd, 0xfffd, 0x0698, 0x06d2, +}; + +static int +mac_arabic_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = mac_arabic_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mac_arabic_page00[96] = { + 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x82, /* 0xc0-0xc7 */ + 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x88, 0x87, 0x89, 0x00, 0x8a, 0x00, 0x00, 0x8d, /* 0xe0-0xe7 */ + 0x8f, 0x8e, 0x90, 0x91, 0x00, 0x92, 0x94, 0x95, /* 0xe8-0xef */ + 0x00, 0x96, 0x00, 0x97, 0x99, 0x00, 0x9a, 0x9b, /* 0xf0-0xf7 */ + 0x00, 0x9d, 0x9c, 0x9e, 0x9f, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char mac_arabic_page06[208] = { + 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x60-0x67 */ + 0xb8, 0xb9, 0xa5, 0x00, 0x00, 0xc0, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x00, /* 0x80-0x87 */ + 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0xff, 0x00, 0x00, 0xf6, 0x00, 0x00, /* 0xd0-0xd7 */ +}; + +static int +mac_arabic_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = mac_arabic_page00[wc-0x00a0]; + else if (wc >= 0x0608 && wc < 0x06d8) + c = mac_arabic_page06[wc-0x0608]; + else if (wc == 0x2026) + c = 0x93; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_centraleurope.h b/jni/parted/libiconv/lib/mac_centraleurope.h new file mode 100755 index 0000000..f38cf87 --- /dev/null +++ b/jni/parted/libiconv/lib/mac_centraleurope.h @@ -0,0 +1,138 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacCentralEurope + */ + +static const unsigned short mac_centraleurope_2uni[128] = { + /* 0x80 */ + 0x00c4, 0x0100, 0x0101, 0x00c9, 0x0104, 0x00d6, 0x00dc, 0x00e1, + 0x0105, 0x010c, 0x00e4, 0x010d, 0x0106, 0x0107, 0x00e9, 0x0179, + /* 0x90 */ + 0x017a, 0x010e, 0x00ed, 0x010f, 0x0112, 0x0113, 0x0116, 0x00f3, + 0x0117, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x011a, 0x011b, 0x00fc, + /* 0xa0 */ + 0x2020, 0x00b0, 0x0118, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x0119, 0x00a8, 0x2260, 0x0123, 0x012e, + /* 0xb0 */ + 0x012f, 0x012a, 0x2264, 0x2265, 0x012b, 0x0136, 0x2202, 0x2211, + 0x0142, 0x013b, 0x013c, 0x013d, 0x013e, 0x0139, 0x013a, 0x0145, + /* 0xc0 */ + 0x0146, 0x0143, 0x00ac, 0x221a, 0x0144, 0x0147, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x0148, 0x0150, 0x00d5, 0x0151, 0x014c, + /* 0xd0 */ + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x014d, 0x0154, 0x0155, 0x0158, 0x2039, 0x203a, 0x0159, 0x0156, + /* 0xe0 */ + 0x0157, 0x0160, 0x201a, 0x201e, 0x0161, 0x015a, 0x015b, 0x00c1, + 0x0164, 0x0165, 0x00cd, 0x017d, 0x017e, 0x016a, 0x00d3, 0x00d4, + /* 0xf0 */ + 0x016b, 0x016e, 0x00da, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, + 0x00dd, 0x00fd, 0x0137, 0x017b, 0x0141, 0x017c, 0x0122, 0x02c7, +}; + +static int +mac_centraleurope_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) mac_centraleurope_2uni[c-0x80]; + return 1; +} + +static const unsigned char mac_centraleurope_page00[224] = { + 0xca, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa4, /* 0xa0-0xa7 */ + 0xac, 0xa9, 0x00, 0xc7, 0xc2, 0x00, 0xa8, 0x00, /* 0xa8-0xaf */ + 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0xe7, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x83, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xee, 0xef, 0xcd, 0x85, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xf2, 0x00, 0x86, 0xf8, 0x00, 0xa7, /* 0xd8-0xdf */ + 0x00, 0x87, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x8e, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x97, 0x99, 0x9b, 0x9a, 0xd6, /* 0xf0-0xf7 */ + 0x00, 0x00, 0x9c, 0x00, 0x9f, 0xf9, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x81, 0x82, 0x00, 0x00, 0x84, 0x88, 0x8c, 0x8d, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x8b, 0x91, 0x93, /* 0x08-0x0f */ + 0x00, 0x00, 0x94, 0x95, 0x00, 0x00, 0x96, 0x98, /* 0x10-0x17 */ + 0xa2, 0xab, 0x9d, 0x9e, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xfe, 0xae, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0xb1, 0xb4, 0x00, 0x00, 0xaf, 0xb0, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xfa, /* 0x30-0x37 */ + 0x00, 0xbd, 0xbe, 0xb9, 0xba, 0xbb, 0xbc, 0x00, /* 0x38-0x3f */ + 0x00, 0xfc, 0xb8, 0xc1, 0xc4, 0xbf, 0xc0, 0xc5, /* 0x40-0x47 */ + 0xcb, 0x00, 0x00, 0x00, 0xcf, 0xd8, 0x00, 0x00, /* 0x48-0x4f */ + 0xcc, 0xce, 0x00, 0x00, 0xd9, 0xda, 0xdf, 0xe0, /* 0x50-0x57 */ + 0xdb, 0xde, 0xe5, 0xe6, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xe1, 0xe4, 0x00, 0x00, 0xe8, 0xe9, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0xed, 0xf0, 0x00, 0x00, 0xf1, 0xf3, /* 0x68-0x6f */ + 0xf4, 0xf5, 0xf6, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x8f, 0x90, 0xfb, 0xfd, 0xeb, 0xec, 0x00, /* 0x78-0x7f */ +}; +static const unsigned char mac_centraleurope_page20[48] = { + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0xe2, 0x00, 0xd2, 0xd3, 0xe3, 0x00, /* 0x18-0x1f */ + 0xa0, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0xdc, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; +static const unsigned char mac_centraleurope_page22[32] = { + 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xc6, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; +static const unsigned char mac_centraleurope_page22_1[8] = { + 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static int +mac_centraleurope_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0180) + c = mac_centraleurope_page00[wc-0x00a0]; + else if (wc == 0x02c7) + c = 0xff; + else if (wc >= 0x2010 && wc < 0x2040) + c = mac_centraleurope_page20[wc-0x2010]; + else if (wc == 0x2122) + c = 0xaa; + else if (wc >= 0x2200 && wc < 0x2220) + c = mac_centraleurope_page22[wc-0x2200]; + else if (wc >= 0x2260 && wc < 0x2268) + c = mac_centraleurope_page22_1[wc-0x2260]; + else if (wc == 0x25ca) + c = 0xd7; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_croatian.h b/jni/parted/libiconv/lib/mac_croatian.h new file mode 100755 index 0000000..2b023e2 --- /dev/null +++ b/jni/parted/libiconv/lib/mac_croatian.h @@ -0,0 +1,164 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacCroatian + */ + +static const unsigned short mac_croatian_2uni[128] = { + /* 0x80 */ + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + /* 0x90 */ + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + /* 0xa0 */ + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x0160, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x017d, 0x00d8, + /* 0xb0 */ + 0x221e, 0x00b1, 0x2264, 0x2265, 0x2206, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x0161, 0x222b, 0x00aa, 0x00ba, 0x2126, 0x017e, 0x00f8, + /* 0xc0 */ + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x0106, 0x00ab, + 0x010c, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + /* 0xd0 */ + 0x0110, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0xfffd, 0x00a9, 0x2044, 0x00a4, 0x2039, 0x203a, 0x00c6, 0x00bb, + /* 0xe0 */ + 0x2013, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x0107, 0x00c1, + 0x010d, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + /* 0xf0 */ + 0x0111, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x03c0, 0x00cb, 0x02da, 0x00b8, 0x00ca, 0x00e6, 0x02c7, +}; + +static int +mac_croatian_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = mac_croatian_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mac_croatian_page00[248] = { + 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0x00, 0x00, 0xa4, /* 0xa0-0xa7 */ + 0xac, 0xd9, 0xbb, 0xc7, 0xc2, 0x00, 0xa8, 0xf8, /* 0xa8-0xaf */ + 0xa1, 0xb1, 0x00, 0x00, 0xab, 0xb5, 0xa6, 0xe1, /* 0xb0-0xb7 */ + 0xfc, 0x00, 0xbc, 0xdf, 0x00, 0x00, 0x00, 0xc0, /* 0xb8-0xbf */ + 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xde, 0x82, /* 0xc0-0xc7 */ + 0xe9, 0x83, 0xfd, 0xfa, 0xed, 0xea, 0xeb, 0xec, /* 0xc8-0xcf */ + 0x00, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x00, /* 0xd0-0xd7 */ + 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0x00, 0x00, 0xa7, /* 0xd8-0xdf */ + 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xfe, 0x8d, /* 0xe0-0xe7 */ + 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0xe8-0xef */ + 0x00, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, /* 0xf0-0xf7 */ + 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0x00, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xe6, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0xce, 0xcf, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xa9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xbe, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char mac_croatian_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xfb, 0x00, 0xf7, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char mac_croatian_page20[56] = { + 0x00, 0x00, 0x00, 0xe0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0xe2, 0x00, 0xd2, 0xd3, 0xe3, 0x00, /* 0x18-0x1f */ + 0xa0, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0xdc, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x40-0x47 */ +}; +static const unsigned char mac_croatian_page21[8] = { + 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0xbd, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_croatian_page22[104] = { + 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xb4, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, /* 0x08-0x0f */ + 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xb0, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static int +mac_croatian_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0198) + c = mac_croatian_page00[wc-0x00a0]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = mac_croatian_page02[wc-0x02c0]; + else if (wc == 0x03c0) + c = 0xf9; + else if (wc >= 0x2010 && wc < 0x2048) + c = mac_croatian_page20[wc-0x2010]; + else if (wc >= 0x2120 && wc < 0x2128) + c = mac_croatian_page21[wc-0x2120]; + else if (wc >= 0x2200 && wc < 0x2268) + c = mac_croatian_page22[wc-0x2200]; + else if (wc == 0x25ca) + c = 0xd7; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_cyrillic.h b/jni/parted/libiconv/lib/mac_cyrillic.h new file mode 100755 index 0000000..41111b0 --- /dev/null +++ b/jni/parted/libiconv/lib/mac_cyrillic.h @@ -0,0 +1,135 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacCyrillic + */ + +static const unsigned short mac_cyrillic_2uni[128] = { + /* 0x80 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + /* 0x90 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xa0 */ + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x0406, + 0x00ae, 0x00a9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, + /* 0xb0 */ + 0x221e, 0x00b1, 0x2264, 0x2265, 0x0456, 0x00b5, 0x2202, 0x0408, + 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040a, 0x045a, + /* 0xc0 */ + 0x0458, 0x0405, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x040b, 0x045b, 0x040c, 0x045c, 0x0455, + /* 0xd0 */ + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x201e, + 0x040e, 0x045e, 0x040f, 0x045f, 0x2116, 0x0401, 0x0451, 0x044f, + /* 0xe0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xf0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x00a4, +}; + +static int +mac_cyrillic_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c >= 0x80) + *pwc = (ucs4_t) mac_cyrillic_2uni[c-0x80]; + else + *pwc = (ucs4_t) c; + return 1; +} + +static const unsigned char mac_cyrillic_page00[32] = { + 0xca, 0x00, 0xa2, 0xa3, 0xff, 0x00, 0x00, 0xa4, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0xc7, 0xc2, 0x00, 0xa8, 0x00, /* 0xa8-0xaf */ + 0xa1, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xa6, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char mac_cyrillic_page04[96] = { + 0x00, 0xdd, 0xab, 0xae, 0xb8, 0xc1, 0xa7, 0xba, /* 0x00-0x07 */ + 0xb7, 0xbc, 0xbe, 0xcb, 0xcd, 0x00, 0xd8, 0xda, /* 0x08-0x0f */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x10-0x17 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x18-0x1f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x20-0x27 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x28-0x2f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0x48-0x4f */ + 0x00, 0xde, 0xac, 0xaf, 0xb9, 0xcf, 0xb4, 0xbb, /* 0x50-0x57 */ + 0xc0, 0xbd, 0xbf, 0xcc, 0xce, 0x00, 0xd9, 0xdb, /* 0x58-0x5f */ +}; +static const unsigned char mac_cyrillic_page20[24] = { + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0x00, 0x00, 0xd2, 0xd3, 0xd7, 0x00, /* 0x18-0x1f */ + 0xa0, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_cyrillic_page21[24] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_cyrillic_page22[104] = { + 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xc6, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xb0, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static int +mac_cyrillic_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = mac_cyrillic_page00[wc-0x00a0]; + else if (wc == 0x00f7) + c = 0xd6; + else if (wc == 0x0192) + c = 0xc4; + else if (wc >= 0x0400 && wc < 0x0460) + c = mac_cyrillic_page04[wc-0x0400]; + else if (wc >= 0x2010 && wc < 0x2028) + c = mac_cyrillic_page20[wc-0x2010]; + else if (wc >= 0x2110 && wc < 0x2128) + c = mac_cyrillic_page21[wc-0x2110]; + else if (wc >= 0x2200 && wc < 0x2268) + c = mac_cyrillic_page22[wc-0x2200]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_greek.h b/jni/parted/libiconv/lib/mac_greek.h new file mode 100755 index 0000000..98e9206 --- /dev/null +++ b/jni/parted/libiconv/lib/mac_greek.h @@ -0,0 +1,134 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacGreek + */ + +static const unsigned short mac_greek_2uni[128] = { + /* 0x80 */ + 0x00c4, 0x00b9, 0x00b2, 0x00c9, 0x00b3, 0x00d6, 0x00dc, 0x0385, + 0x00e0, 0x00e2, 0x00e4, 0x0384, 0x00a8, 0x00e7, 0x00e9, 0x00e8, + /* 0x90 */ + 0x00ea, 0x00eb, 0x00a3, 0x2122, 0x00ee, 0x00ef, 0x2022, 0x00bd, + 0x2030, 0x00f4, 0x00f6, 0x00a6, 0x00ad, 0x00f9, 0x00fb, 0x00fc, + /* 0xa0 */ + 0x2020, 0x0393, 0x0394, 0x0398, 0x039b, 0x039e, 0x03a0, 0x00df, + 0x00ae, 0x00a9, 0x03a3, 0x03aa, 0x00a7, 0x2260, 0x00b0, 0x0387, + /* 0xb0 */ + 0x0391, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x0392, 0x0395, 0x0396, + 0x0397, 0x0399, 0x039a, 0x039c, 0x03a6, 0x03ab, 0x03a8, 0x03a9, + /* 0xc0 */ + 0x03ac, 0x039d, 0x00ac, 0x039f, 0x03a1, 0x2248, 0x03a4, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x03a5, 0x03a7, 0x0386, 0x0388, 0x0153, + /* 0xd0 */ + 0x2013, 0x2015, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x0389, + 0x038a, 0x038c, 0x038e, 0x03ad, 0x03ae, 0x03af, 0x03cc, 0x038f, + /* 0xe0 */ + 0x03cd, 0x03b1, 0x03b2, 0x03c8, 0x03b4, 0x03b5, 0x03c6, 0x03b3, + 0x03b7, 0x03b9, 0x03be, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03bf, + /* 0xf0 */ + 0x03c0, 0x03ce, 0x03c1, 0x03c3, 0x03c4, 0x03b8, 0x03c9, 0x03c2, + 0x03c7, 0x03c5, 0x03b6, 0x03ca, 0x03cb, 0x0390, 0x03b0, 0xfffd, +}; + +static int +mac_greek_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = mac_greek_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mac_greek_page00[96] = { + 0xca, 0x00, 0x00, 0x92, 0x00, 0xb4, 0x9b, 0xac, /* 0xa0-0xa7 */ + 0x8c, 0xa9, 0x00, 0xc7, 0xc2, 0x9c, 0xa8, 0x00, /* 0xa8-0xaf */ + 0xae, 0xb1, 0x82, 0x84, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x81, 0x00, 0xc8, 0x00, 0x97, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0xa7, /* 0xd8-0xdf */ + 0x88, 0x00, 0x89, 0x00, 0x8a, 0x00, 0x00, 0x8d, /* 0xe0-0xe7 */ + 0x8f, 0x8e, 0x90, 0x91, 0x00, 0x00, 0x94, 0x95, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x9a, 0xd6, /* 0xf0-0xf7 */ + 0x00, 0x9d, 0x00, 0x9e, 0x9f, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char mac_greek_page03[80] = { + 0x00, 0x00, 0x00, 0x00, 0x8b, 0x87, 0xcd, 0xaf, /* 0x80-0x87 */ + 0xce, 0xd7, 0xd8, 0x00, 0xd9, 0x00, 0xda, 0xdf, /* 0x88-0x8f */ + 0xfd, 0xb0, 0xb5, 0xa1, 0xa2, 0xb6, 0xb7, 0xb8, /* 0x90-0x97 */ + 0xa3, 0xb9, 0xba, 0xa4, 0xbb, 0xc1, 0xa5, 0xc3, /* 0x98-0x9f */ + 0xa6, 0xc4, 0x00, 0xaa, 0xc6, 0xcb, 0xbc, 0xcc, /* 0xa0-0xa7 */ + 0xbe, 0xbf, 0xab, 0xbd, 0xc0, 0xdb, 0xdc, 0xdd, /* 0xa8-0xaf */ + 0xfe, 0xe1, 0xe2, 0xe7, 0xe4, 0xe5, 0xfa, 0xe8, /* 0xb0-0xb7 */ + 0xf5, 0xe9, 0xeb, 0xec, 0xed, 0xee, 0xea, 0xef, /* 0xb8-0xbf */ + 0xf0, 0xf2, 0xf7, 0xf3, 0xf4, 0xf9, 0xe6, 0xf8, /* 0xc0-0xc7 */ + 0xe3, 0xf6, 0xfb, 0xfc, 0xde, 0xe0, 0xf1, 0x00, /* 0xc8-0xcf */ +}; +static const unsigned char mac_greek_page20[40] = { + 0x00, 0x00, 0x00, 0xd0, 0x00, 0xd1, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0x00, 0x00, 0xd2, 0xd3, 0x00, 0x00, /* 0x18-0x1f */ + 0xa0, 0x00, 0x96, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ +}; +static const unsigned char mac_greek_page22[32] = { + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static int +mac_greek_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = mac_greek_page00[wc-0x00a0]; + else if (wc == 0x0153) + c = 0xcf; + else if (wc >= 0x0380 && wc < 0x03d0) + c = mac_greek_page03[wc-0x0380]; + else if (wc >= 0x2010 && wc < 0x2038) + c = mac_greek_page20[wc-0x2010]; + else if (wc == 0x2122) + c = 0x93; + else if (wc >= 0x2248 && wc < 0x2268) + c = mac_greek_page22[wc-0x2248]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_hebrew.h b/jni/parted/libiconv/lib/mac_hebrew.h new file mode 100755 index 0000000..d66bd9c --- /dev/null +++ b/jni/parted/libiconv/lib/mac_hebrew.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacHebrew + */ + +static const unsigned short mac_hebrew_2uni[128] = { + /* 0x80 */ + 0x00c4, 0xfb1f, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + /* 0x90 */ + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + /* 0xa0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x20aa, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xb0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, + /* 0xc0 */ + 0xfffd, 0x201e, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x05bc, 0xfb4b, + 0xfb35, 0x2026, 0x00a0, 0x05b8, 0x05b7, 0x05b5, 0x05b6, 0x05b4, + /* 0xd0 */ + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0xfb2a, 0xfb2b, + 0x05bf, 0x05b0, 0x05b2, 0x05b1, 0x05bb, 0x05b9, 0xfffd, 0x05b3, + /* 0xe0 */ + 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + /* 0xf0 */ + 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, +}; + +static int +mac_hebrew_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else if (c >= 0x80) { + unsigned short wc = mac_hebrew_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mac_hebrew_page00[96] = { + 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x82, /* 0xc0-0xc7 */ + 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0x00, 0x8d, /* 0xe0-0xe7 */ + 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0xe8-0xef */ + 0x00, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0x00, /* 0xf0-0xf7 */ + 0x00, 0x9d, 0x9c, 0x9e, 0x9f, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char mac_hebrew_page05[64] = { + 0xd9, 0xdb, 0xda, 0xdf, 0xcf, 0xcd, 0xce, 0xcc, /* 0xb0-0xb7 */ + 0xcb, 0xdd, 0x00, 0xdc, 0xc6, 0x00, 0x00, 0xd8, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */ + 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; +static const unsigned char mac_hebrew_page20[24] = { + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0x00, 0x00, 0xd2, 0xd3, 0xc1, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_hebrew_pagefb[56] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0xd6, 0xd7, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ +}; + +static int +mac_hebrew_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = mac_hebrew_page00[wc-0x00a0]; + else if (wc >= 0x05b0 && wc < 0x05f0) + c = mac_hebrew_page05[wc-0x05b0]; + else if (wc >= 0x2010 && wc < 0x2028) + c = mac_hebrew_page20[wc-0x2010]; + else if (wc == 0x20aa) + c = 0xa6; + else if (wc >= 0xfb18 && wc < 0xfb50) + c = mac_hebrew_pagefb[wc-0xfb18]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_iceland.h b/jni/parted/libiconv/lib/mac_iceland.h new file mode 100755 index 0000000..9a45bbf --- /dev/null +++ b/jni/parted/libiconv/lib/mac_iceland.h @@ -0,0 +1,161 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacIceland + */ + +static const unsigned short mac_iceland_2uni[128] = { + /* 0x80 */ + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + /* 0x90 */ + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + /* 0xa0 */ + 0x00dd, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + /* 0xb0 */ + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x2126, 0x00e6, 0x00f8, + /* 0xc0 */ + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + /* 0xd0 */ + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x00a4, 0x00d0, 0x00f0, 0x00de, 0x00fe, + /* 0xe0 */ + 0x00fd, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + /* 0xf0 */ + 0xfffd, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7, +}; + +static int +mac_iceland_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = mac_iceland_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mac_iceland_page00[96] = { + 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0xb4, 0x00, 0xa4, /* 0xa0-0xa7 */ + 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0x00, 0xa8, 0xf8, /* 0xa8-0xaf */ + 0xa1, 0xb1, 0x00, 0x00, 0xab, 0xb5, 0xa6, 0xe1, /* 0xb0-0xb7 */ + 0xfc, 0x00, 0xbc, 0xc8, 0x00, 0x00, 0x00, 0xc0, /* 0xb8-0xbf */ + 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, /* 0xc0-0xc7 */ + 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, /* 0xc8-0xcf */ + 0xdc, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x00, /* 0xd0-0xd7 */ + 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0xa0, 0xde, 0xa7, /* 0xd8-0xdf */ + 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, /* 0xe0-0xe7 */ + 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0xe8-0xef */ + 0xdd, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, /* 0xf0-0xf7 */ + 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xe0, 0xdf, 0xd8, /* 0xf8-0xff */ +}; +static const unsigned char mac_iceland_page01[104] = { + 0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0xce, 0xcf, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char mac_iceland_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char mac_iceland_page20[56] = { + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0xe2, 0x00, 0xd2, 0xd3, 0xe3, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x40-0x47 */ +}; +static const unsigned char mac_iceland_page21[8] = { + 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0xbd, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_iceland_page22[104] = { + 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xc6, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, /* 0x08-0x0f */ + 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xb0, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static int +mac_iceland_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = mac_iceland_page00[wc-0x00a0]; + else if (wc >= 0x0130 && wc < 0x0198) + c = mac_iceland_page01[wc-0x0130]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = mac_iceland_page02[wc-0x02c0]; + else if (wc == 0x03c0) + c = 0xb9; + else if (wc >= 0x2010 && wc < 0x2048) + c = mac_iceland_page20[wc-0x2010]; + else if (wc >= 0x2120 && wc < 0x2128) + c = mac_iceland_page21[wc-0x2120]; + else if (wc >= 0x2200 && wc < 0x2268) + c = mac_iceland_page22[wc-0x2200]; + else if (wc == 0x25ca) + c = 0xd7; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_roman.h b/jni/parted/libiconv/lib/mac_roman.h new file mode 100755 index 0000000..cb126bc --- /dev/null +++ b/jni/parted/libiconv/lib/mac_roman.h @@ -0,0 +1,166 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacRoman + */ + +static const unsigned short mac_roman_2uni[128] = { + /* 0x80 */ + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + /* 0x90 */ + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + /* 0xa0 */ + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + /* 0xb0 */ + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x2126, 0x00e6, 0x00f8, + /* 0xc0 */ + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + /* 0xd0 */ + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x00a4, 0x2039, 0x203a, 0xfb01, 0xfb02, + /* 0xe0 */ + 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + /* 0xf0 */ + 0xfffd, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7, +}; + +static int +mac_roman_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = mac_roman_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mac_roman_page00[96] = { + 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0xb4, 0x00, 0xa4, /* 0xa0-0xa7 */ + 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0x00, 0xa8, 0xf8, /* 0xa8-0xaf */ + 0xa1, 0xb1, 0x00, 0x00, 0xab, 0xb5, 0xa6, 0xe1, /* 0xb0-0xb7 */ + 0xfc, 0x00, 0xbc, 0xc8, 0x00, 0x00, 0x00, 0xc0, /* 0xb8-0xbf */ + 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, /* 0xc0-0xc7 */ + 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, /* 0xc8-0xcf */ + 0x00, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x00, /* 0xd0-0xd7 */ + 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0x00, 0x00, 0xa7, /* 0xd8-0xdf */ + 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, /* 0xe0-0xe7 */ + 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0xe8-0xef */ + 0x00, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, /* 0xf0-0xf7 */ + 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0x00, 0x00, 0xd8, /* 0xf8-0xff */ +}; +static const unsigned char mac_roman_page01[104] = { + 0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0xce, 0xcf, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char mac_roman_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char mac_roman_page20[56] = { + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0xe2, 0x00, 0xd2, 0xd3, 0xe3, 0x00, /* 0x18-0x1f */ + 0xa0, 0xe0, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0xdc, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x40-0x47 */ +}; +static const unsigned char mac_roman_page21[8] = { + 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0xbd, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_roman_page22[104] = { + 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xc6, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, /* 0x08-0x0f */ + 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xb0, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */ +}; +static const unsigned char mac_roman_pagefb[8] = { + 0x00, 0xde, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ +}; + +static int +mac_roman_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = mac_roman_page00[wc-0x00a0]; + else if (wc >= 0x0130 && wc < 0x0198) + c = mac_roman_page01[wc-0x0130]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = mac_roman_page02[wc-0x02c0]; + else if (wc == 0x03c0) + c = 0xb9; + else if (wc >= 0x2010 && wc < 0x2048) + c = mac_roman_page20[wc-0x2010]; + else if (wc >= 0x2120 && wc < 0x2128) + c = mac_roman_page21[wc-0x2120]; + else if (wc >= 0x2200 && wc < 0x2268) + c = mac_roman_page22[wc-0x2200]; + else if (wc == 0x25ca) + c = 0xd7; + else if (wc >= 0xfb00 && wc < 0xfb08) + c = mac_roman_pagefb[wc-0xfb00]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_romania.h b/jni/parted/libiconv/lib/mac_romania.h new file mode 100755 index 0000000..ac03b1d --- /dev/null +++ b/jni/parted/libiconv/lib/mac_romania.h @@ -0,0 +1,164 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacRomania + */ + +static const unsigned short mac_romania_2uni[128] = { + /* 0x80 */ + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + /* 0x90 */ + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + /* 0xa0 */ + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x0102, 0x015e, + /* 0xb0 */ + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x2126, 0x0103, 0x015f, + /* 0xc0 */ + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + /* 0xd0 */ + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x00a4, 0x2039, 0x203a, 0x0162, 0x0163, + /* 0xe0 */ + 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + /* 0xf0 */ + 0xfffd, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7, +}; + +static int +mac_romania_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = mac_romania_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mac_romania_page00[248] = { + 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0xb4, 0x00, 0xa4, /* 0xa0-0xa7 */ + 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0x00, 0xa8, 0xf8, /* 0xa8-0xaf */ + 0xa1, 0xb1, 0x00, 0x00, 0xab, 0xb5, 0xa6, 0xe1, /* 0xb0-0xb7 */ + 0xfc, 0x00, 0xbc, 0xc8, 0x00, 0x00, 0x00, 0xc0, /* 0xb8-0xbf */ + 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0x00, 0x82, /* 0xc0-0xc7 */ + 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, /* 0xc8-0xcf */ + 0x00, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x00, /* 0xd0-0xd7 */ + 0x00, 0xf4, 0xf2, 0xf3, 0x86, 0x00, 0x00, 0xa7, /* 0xd8-0xdf */ + 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0x00, 0x8d, /* 0xe0-0xe7 */ + 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0xe8-0xef */ + 0x00, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, /* 0xf0-0xf7 */ + 0x00, 0x9d, 0x9c, 0x9e, 0x9f, 0x00, 0x00, 0xd8, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0xae, 0xbe, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0xce, 0xcf, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0xbf, /* 0x58-0x5f */ + 0x00, 0x00, 0xde, 0xdf, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char mac_romania_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char mac_romania_page20[56] = { + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0xe2, 0x00, 0xd2, 0xd3, 0xe3, 0x00, /* 0x18-0x1f */ + 0xa0, 0xe0, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0xdc, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x40-0x47 */ +}; +static const unsigned char mac_romania_page21[8] = { + 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0xbd, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_romania_page22[104] = { + 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xc6, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, /* 0x08-0x0f */ + 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xb0, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static int +mac_romania_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0198) + c = mac_romania_page00[wc-0x00a0]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = mac_romania_page02[wc-0x02c0]; + else if (wc == 0x03c0) + c = 0xb9; + else if (wc >= 0x2010 && wc < 0x2048) + c = mac_romania_page20[wc-0x2010]; + else if (wc >= 0x2120 && wc < 0x2128) + c = mac_romania_page21[wc-0x2120]; + else if (wc >= 0x2200 && wc < 0x2268) + c = mac_romania_page22[wc-0x2200]; + else if (wc == 0x25ca) + c = 0xd7; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_thai.h b/jni/parted/libiconv/lib/mac_thai.h new file mode 100755 index 0000000..804cc3c --- /dev/null +++ b/jni/parted/libiconv/lib/mac_thai.h @@ -0,0 +1,127 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacThai + */ + +static const unsigned short mac_thai_2uni[128] = { + /* 0x80 */ + 0x00ab, 0x00bb, 0x2026, 0xf88c, 0xf88f, 0xf892, 0xf895, 0xf898, + 0xf88b, 0xf88e, 0xf891, 0xf894, 0xf897, 0x201c, 0x201d, 0xf899, + /* 0x90 */ + 0xfffd, 0x2022, 0xf884, 0xf889, 0xf885, 0xf886, 0xf887, 0xf888, + 0xf88a, 0xf88d, 0xf890, 0xf893, 0xf896, 0x2018, 0x2019, 0xfffd, + /* 0xa0 */ + 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, + 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, + /* 0xb0 */ + 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, + 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, + /* 0xc0 */ + 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, + 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, + /* 0xd0 */ + 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, + 0x0e38, 0x0e39, 0x0e3a, 0xfeff, 0x200b, 0x2013, 0x2014, 0x0e3f, + /* 0xe0 */ + 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, + 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x2122, 0x0e4f, + /* 0xf0 */ + 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, + 0x0e58, 0x0e59, 0x00ae, 0x00a9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, +}; + +static int +mac_thai_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = mac_thai_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mac_thai_page00[32] = { + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xfb, 0x00, 0x80, 0x00, 0x00, 0xfa, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char mac_thai_page0e[96] = { + 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x00, 0xef, /* 0x48-0x4f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ + 0xf8, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ +}; +static const unsigned char mac_thai_page20[32] = { + 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0xdd, 0xde, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x9d, 0x9e, 0x00, 0x00, 0x8d, 0x8e, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x82, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_thai_pagef8[32] = { + 0x00, 0x00, 0x00, 0x00, 0x92, 0x94, 0x95, 0x96, /* 0x80-0x87 */ + 0x97, 0x93, 0x98, 0x88, 0x83, 0x99, 0x89, 0x84, /* 0x88-0x8f */ + 0x9a, 0x8a, 0x85, 0x9b, 0x8b, 0x86, 0x9c, 0x8c, /* 0x90-0x97 */ + 0x87, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ +}; + +static int +mac_thai_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = mac_thai_page00[wc-0x00a0]; + else if (wc >= 0x0e00 && wc < 0x0e60) + c = mac_thai_page0e[wc-0x0e00]; + else if (wc >= 0x2008 && wc < 0x2028) + c = mac_thai_page20[wc-0x2008]; + else if (wc == 0x2122) + c = 0xee; + else if (wc >= 0xf880 && wc < 0xf8a0) + c = mac_thai_pagef8[wc-0xf880]; + else if (wc == 0xfeff) + c = 0xdb; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_turkish.h b/jni/parted/libiconv/lib/mac_turkish.h new file mode 100755 index 0000000..b61ed59 --- /dev/null +++ b/jni/parted/libiconv/lib/mac_turkish.h @@ -0,0 +1,162 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacTurkish + */ + +static const unsigned short mac_turkish_2uni[128] = { + /* 0x80 */ + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + /* 0x90 */ + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + /* 0xa0 */ + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + /* 0xb0 */ + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x2126, 0x00e6, 0x00f8, + /* 0xc0 */ + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + /* 0xd0 */ + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x011e, 0x011f, 0x0130, 0x0131, 0x015e, 0x015f, + /* 0xe0 */ + 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + /* 0xf0 */ + 0xfffd, 0x00d2, 0x00da, 0x00db, 0x00d9, 0xfffd, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7, +}; + +static int +mac_turkish_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = mac_turkish_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mac_turkish_page00[96] = { + 0xca, 0xc1, 0xa2, 0xa3, 0x00, 0xb4, 0x00, 0xa4, /* 0xa0-0xa7 */ + 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0x00, 0xa8, 0xf8, /* 0xa8-0xaf */ + 0xa1, 0xb1, 0x00, 0x00, 0xab, 0xb5, 0xa6, 0xe1, /* 0xb0-0xb7 */ + 0xfc, 0x00, 0xbc, 0xc8, 0x00, 0x00, 0x00, 0xc0, /* 0xb8-0xbf */ + 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, /* 0xc0-0xc7 */ + 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, /* 0xc8-0xcf */ + 0x00, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x00, /* 0xd0-0xd7 */ + 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0x00, 0x00, 0xa7, /* 0xd8-0xdf */ + 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, /* 0xe0-0xe7 */ + 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0xe8-0xef */ + 0x00, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, /* 0xf0-0xf7 */ + 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0x00, 0x00, 0xd8, /* 0xf8-0xff */ +}; +static const unsigned char mac_turkish_page01[128] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xdb, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xdc, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0xce, 0xcf, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xdf, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char mac_turkish_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char mac_turkish_page20[40] = { + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0xe2, 0x00, 0xd2, 0xd3, 0xe3, 0x00, /* 0x18-0x1f */ + 0xa0, 0xe0, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ +}; +static const unsigned char mac_turkish_page21[8] = { + 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0xbd, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_turkish_page22[104] = { + 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xc6, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, /* 0x08-0x0f */ + 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xb0, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static int +mac_turkish_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = mac_turkish_page00[wc-0x00a0]; + else if (wc >= 0x0118 && wc < 0x0198) + c = mac_turkish_page01[wc-0x0118]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = mac_turkish_page02[wc-0x02c0]; + else if (wc == 0x03c0) + c = 0xb9; + else if (wc >= 0x2010 && wc < 0x2038) + c = mac_turkish_page20[wc-0x2010]; + else if (wc >= 0x2120 && wc < 0x2128) + c = mac_turkish_page21[wc-0x2120]; + else if (wc >= 0x2200 && wc < 0x2268) + c = mac_turkish_page22[wc-0x2200]; + else if (wc == 0x25ca) + c = 0xd7; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mac_ukraine.h b/jni/parted/libiconv/lib/mac_ukraine.h new file mode 100755 index 0000000..b83444a --- /dev/null +++ b/jni/parted/libiconv/lib/mac_ukraine.h @@ -0,0 +1,142 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MacUkraine + */ + +static const unsigned short mac_ukraine_2uni[128] = { + /* 0x80 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + /* 0x90 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xa0 */ + 0x2020, 0x00b0, 0x0490, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x0406, + 0x00ae, 0x00a9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, + /* 0xb0 */ + 0x221e, 0x00b1, 0x2264, 0x2265, 0x0456, 0x00b5, 0x0491, 0x0408, + 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040a, 0x045a, + /* 0xc0 */ + 0x0458, 0x0405, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x040b, 0x045b, 0x040c, 0x045c, 0x0455, + /* 0xd0 */ + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x201e, + 0x040e, 0x045e, 0x040f, 0x045f, 0x2116, 0x0401, 0x0451, 0x044f, + /* 0xe0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xf0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x00a4, +}; + +static int +mac_ukraine_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c >= 0x80) + *pwc = (ucs4_t) mac_ukraine_2uni[c-0x80]; + else + *pwc = (ucs4_t) c; + return 1; +} + +static const unsigned char mac_ukraine_page00[32] = { + 0xca, 0x00, 0x00, 0xa3, 0xff, 0x00, 0x00, 0xa4, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0xc7, 0xc2, 0x00, 0xa8, 0x00, /* 0xa8-0xaf */ + 0xa1, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xa6, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char mac_ukraine_page04[152] = { + 0x00, 0xdd, 0xab, 0xae, 0xb8, 0xc1, 0xa7, 0xba, /* 0x00-0x07 */ + 0xb7, 0xbc, 0xbe, 0xcb, 0xcd, 0x00, 0xd8, 0xda, /* 0x08-0x0f */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x10-0x17 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x18-0x1f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x20-0x27 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x28-0x2f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0x48-0x4f */ + 0x00, 0xde, 0xac, 0xaf, 0xb9, 0xcf, 0xb4, 0xbb, /* 0x50-0x57 */ + 0xc0, 0xbd, 0xbf, 0xcc, 0xce, 0x00, 0xd9, 0xdb, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xa2, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char mac_ukraine_page20[24] = { + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd4, 0xd5, 0x00, 0x00, 0xd2, 0xd3, 0xd7, 0x00, /* 0x18-0x1f */ + 0xa0, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_ukraine_page21[24] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char mac_ukraine_page22[104] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xb0, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static int +mac_ukraine_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = mac_ukraine_page00[wc-0x00a0]; + else if (wc == 0x00f7) + c = 0xd6; + else if (wc == 0x0192) + c = 0xc4; + else if (wc >= 0x0400 && wc < 0x0498) + c = mac_ukraine_page04[wc-0x0400]; + else if (wc >= 0x2010 && wc < 0x2028) + c = mac_ukraine_page20[wc-0x2010]; + else if (wc >= 0x2110 && wc < 0x2128) + c = mac_ukraine_page21[wc-0x2110]; + else if (wc >= 0x2200 && wc < 0x2268) + c = mac_ukraine_page22[wc-0x2200]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/mulelao.h b/jni/parted/libiconv/lib/mulelao.h new file mode 100755 index 0000000..8b92855 --- /dev/null +++ b/jni/parted/libiconv/lib/mulelao.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * MULELAO-1 + */ + +static const unsigned short mulelao_2uni[96] = { + /* 0xa0 */ + 0x00a0, 0x0e81, 0x0e82, 0xfffd, 0x0e84, 0xfffd, 0xfffd, 0x0e87, + 0x0e88, 0xfffd, 0x0e8a, 0xfffd, 0xfffd, 0x0e8d, 0xfffd, 0xfffd, + /* 0xb0 */ + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e94, 0x0e95, 0x0e96, 0x0e97, + 0xfffd, 0x0e99, 0x0e9a, 0x0e9b, 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f, + /* 0xc0 */ + 0xfffd, 0x0ea1, 0x0ea2, 0x0ea3, 0xfffd, 0x0ea5, 0xfffd, 0x0ea7, + 0xfffd, 0xfffd, 0x0eaa, 0x0eab, 0xfffd, 0x0ead, 0x0eae, 0x0eaf, + /* 0xd0 */ + 0x0eb0, 0x0eb1, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, + 0x0eb8, 0x0eb9, 0xfffd, 0x0ebb, 0x0ebc, 0x0ebd, 0xfffd, 0xfffd, + /* 0xe0 */ + 0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0xfffd, 0x0ec6, 0xfffd, + 0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, 0x0ecd, 0xfffd, 0xfffd, + /* 0xf0 */ + 0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7, + 0x0ed8, 0x0ed9, 0xfffd, 0xfffd, 0x0edc, 0x0edd, 0xfffd, 0xfffd, +}; + +static int +mulelao_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0xa0) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = mulelao_2uni[c-0xa0]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char mulelao_page0e[96] = { + 0x00, 0xa1, 0xa2, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0x80-0x87 */ + 0xa8, 0x00, 0xaa, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x90-0x97 */ + 0x00, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x98-0x9f */ + 0x00, 0xc1, 0xc2, 0xc3, 0x00, 0xc5, 0x00, 0xc7, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xca, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xa8-0xaf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xb0-0xb7 */ + 0xd8, 0xd9, 0x00, 0xdb, 0xdc, 0xdd, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0x00, 0xe6, 0x00, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x00, 0x00, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0x00, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static int +mulelao_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x00a0) { + *r = wc; + return 1; + } + else if (wc == 0x00a0) + c = 0xa0; + else if (wc >= 0x0e80 && wc < 0x0ee0) + c = mulelao_page0e[wc-0x0e80]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/nextstep.h b/jni/parted/libiconv/lib/nextstep.h new file mode 100755 index 0000000..481e621 --- /dev/null +++ b/jni/parted/libiconv/lib/nextstep.h @@ -0,0 +1,140 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * NEXTSTEP + */ + +static const unsigned short nextstep_2uni[128] = { + /* 0x80 */ + 0x00a0, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0x90 */ + 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d9, + 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00b5, 0x00d7, 0x00f7, + /* 0xa0 */ + 0x00a9, 0x00a1, 0x00a2, 0x00a3, 0x2044, 0x00a5, 0x0192, 0x00a7, + 0x00a4, 0x2019, 0x201c, 0x00ab, 0x2039, 0x203a, 0xfb01, 0xfb02, + /* 0xb0 */ + 0x00ae, 0x2013, 0x2020, 0x2021, 0x00b7, 0x00a6, 0x00b6, 0x2022, + 0x201a, 0x201e, 0x201d, 0x00bb, 0x2026, 0x2030, 0x00ac, 0x00bf, + /* 0xc0 */ + 0x00b9, 0x02cb, 0x00b4, 0x02c6, 0x02dc, 0x00af, 0x02d8, 0x02d9, + 0x00a8, 0x00b2, 0x02da, 0x00b8, 0x00b3, 0x02dd, 0x02db, 0x02c7, + /* 0xd0 */ + 0x2014, 0x00b1, 0x00bc, 0x00bd, 0x00be, 0x00e0, 0x00e1, 0x00e2, + 0x00e3, 0x00e4, 0x00e5, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, + /* 0xe0 */ + 0x00ec, 0x00c6, 0x00ed, 0x00aa, 0x00ee, 0x00ef, 0x00f0, 0x00f1, + 0x0141, 0x00d8, 0x0152, 0x00ba, 0x00f2, 0x00f3, 0x00f4, 0x00f5, + /* 0xf0 */ + 0x00f6, 0x00e6, 0x00f9, 0x00fa, 0x00fb, 0x0131, 0x00fc, 0x00fd, + 0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x00ff, 0xfffd, 0xfffd, +}; + +static int +nextstep_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = nextstep_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char nextstep_page00[96] = { + 0x80, 0xa1, 0xa2, 0xa3, 0xa8, 0xa5, 0xb5, 0xa7, /* 0xa0-0xa7 */ + 0xc8, 0xa0, 0xe3, 0xab, 0xbe, 0x00, 0xb0, 0xc5, /* 0xa8-0xaf */ + 0x00, 0xd1, 0xc9, 0xcc, 0xc2, 0x9d, 0xb6, 0xb4, /* 0xb0-0xb7 */ + 0xcb, 0xc0, 0xeb, 0xbb, 0xd2, 0xd3, 0xd4, 0xbf, /* 0xb8-0xbf */ + 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0xe1, 0x87, /* 0xc0-0xc7 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0xc8-0xcf */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x9e, /* 0xd0-0xd7 */ + 0xe9, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0xfb, /* 0xd8-0xdf */ + 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xf1, 0xdb, /* 0xe0-0xe7 */ + 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe4, 0xe5, /* 0xe8-0xef */ + 0xe6, 0xe7, 0xec, 0xed, 0xee, 0xef, 0xf0, 0x9f, /* 0xf0-0xf7 */ + 0xf9, 0xf2, 0xf3, 0xf4, 0xf6, 0xf7, 0xfc, 0xfd, /* 0xf8-0xff */ +}; +static const unsigned char nextstep_page01[104] = { + 0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0xe8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0xea, 0xfa, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; +static const unsigned char nextstep_page02[32] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xcf, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xc6, 0xc7, 0xca, 0xce, 0xc4, 0xcd, 0x00, 0x00, /* 0xd8-0xdf */ +}; +static const unsigned char nextstep_page20[56] = { + 0x00, 0x00, 0x00, 0xb1, 0xd0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xa9, 0xb8, 0x00, 0xaa, 0xba, 0xb9, 0x00, /* 0x18-0x1f */ + 0xb2, 0xb3, 0xb7, 0x00, 0x00, 0x00, 0xbc, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0xac, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0x40-0x47 */ +}; +static const unsigned char nextstep_pagefb[8] = { + 0x00, 0xae, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ +}; + +static int +nextstep_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x0100) + c = nextstep_page00[wc-0x00a0]; + else if (wc >= 0x0130 && wc < 0x0198) + c = nextstep_page01[wc-0x0130]; + else if (wc >= 0x02c0 && wc < 0x02e0) + c = nextstep_page02[wc-0x02c0]; + else if (wc >= 0x2010 && wc < 0x2048) + c = nextstep_page20[wc-0x2010]; + else if (wc >= 0xfb00 && wc < 0xfb08) + c = nextstep_pagefb[wc-0xfb00]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/pt154.h b/jni/parted/libiconv/lib/pt154.h new file mode 100755 index 0000000..9e9cec8 --- /dev/null +++ b/jni/parted/libiconv/lib/pt154.h @@ -0,0 +1,117 @@ +/* + * Copyright (C) 1999-2005, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * PT154 + */ + +static const unsigned short pt154_2uni[64] = { + /* 0x80 */ + 0x0496, 0x0492, 0x04ee, 0x0493, 0x201e, 0x2026, 0x04b6, 0x04ae, + 0x04b2, 0x04af, 0x04a0, 0x04e2, 0x04a2, 0x049a, 0x04ba, 0x04b8, + /* 0x90 */ + 0x0497, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x04b3, 0x04b7, 0x04a1, 0x04e3, 0x04a3, 0x049b, 0x04bb, 0x04b9, + /* 0xa0 */ + 0x00a0, 0x040e, 0x045e, 0x0408, 0x04e8, 0x0498, 0x04b0, 0x00a7, + 0x0401, 0x00a9, 0x04d8, 0x00ab, 0x00ac, 0x04ef, 0x00ae, 0x049c, + /* 0xb0 */ + 0x00b0, 0x04b1, 0x0406, 0x0456, 0x0499, 0x04e9, 0x00b6, 0x00b7, + 0x0451, 0x2116, 0x04d9, 0x00bb, 0x0458, 0x04aa, 0x04ab, 0x049d, +}; + +static int +pt154_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) + *pwc = (ucs4_t) c; + else if (c >= 0xc0) + *pwc = (ucs4_t) c + 0x0350; + else + *pwc = (ucs4_t) pt154_2uni[c-0x80]; + return 1; +} + +static const unsigned char pt154_page00[32] = { + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0xab, 0xac, 0x00, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char pt154_page04[240] = { + 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x00, /* 0x00-0x07 */ + 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, /* 0x08-0x0f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */ + 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xb3, 0x00, /* 0x50-0x57 */ + 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x81, 0x83, 0x00, 0x00, 0x80, 0x90, /* 0x90-0x97 */ + 0xa5, 0xb4, 0x8d, 0x9d, 0xaf, 0xbf, 0x00, 0x00, /* 0x98-0x9f */ + 0x8a, 0x9a, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xbd, 0xbe, 0x00, 0x00, 0x87, 0x89, /* 0xa8-0xaf */ + 0xa6, 0xb1, 0x88, 0x98, 0x00, 0x00, 0x86, 0x99, /* 0xb0-0xb7 */ + 0x8f, 0x9f, 0x8e, 0x9e, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xaa, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xa4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x82, 0xad, /* 0xe8-0xef */ +}; +static const unsigned char pt154_page20[24] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x00, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ +}; + +static int +pt154_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = pt154_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x04f0) + c = pt154_page04[wc-0x0400]; + else if (wc >= 0x2010 && wc < 0x2028) + c = pt154_page20[wc-0x2010]; + else if (wc == 0x2116) + c = 0xb9; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/relocatable.c b/jni/parted/libiconv/lib/relocatable.c new file mode 100755 index 0000000..b65a3be --- /dev/null +++ b/jni/parted/libiconv/lib/relocatable.c @@ -0,0 +1,588 @@ +/* Provide relocatable packages. + Copyright (C) 2003-2006, 2008-2018 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2, 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . */ + + +/* Tell glibc's to provide a prototype for getline(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#define _GL_USE_STDLIB_ALLOC 1 +#include + +/* Specification. */ +#include "relocatable.h" + +#if ENABLE_RELOCATABLE + +#include +#include +#include +#include + +#ifdef NO_XMALLOC +# define xmalloc malloc +#else +# include "xalloc.h" +#endif + +#if defined _WIN32 && !defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +#endif + +#ifdef __EMX__ +# define INCL_DOS +# include + +# define strcmp stricmp +# define strncmp strnicmp +#endif + +#if DEPENDS_ON_LIBCHARSET +# include +#endif +#if DEPENDS_ON_LIBICONV && HAVE_ICONV +# include +#endif +#if DEPENDS_ON_LIBINTL && ENABLE_NLS +# include +#endif + +/* Faked cheap 'bool'. */ +#undef bool +#undef false +#undef true +#define bool int +#define false 0 +#define true 1 + +/* Pathname support. + ISSLASH(C) tests whether C is a directory separator character. + IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. + */ +#if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ + /* Native Windows, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +# define HAS_DEVICE(P) \ + ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ + && (P)[1] == ':') +# define IS_PATH_WITH_DIR(P) \ + (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) +# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) +# define FILE_SYSTEM_PREFIX_LEN(P) 0 +#endif + +/* Whether to enable the more costly support for relocatable libraries. + It allows libraries to be have been installed with a different original + prefix than the program. But it is quite costly, especially on Cygwin + platforms, see below. Therefore we enable it by default only on native + Windows platforms. */ +#ifndef ENABLE_COSTLY_RELOCATABLE +# if defined _WIN32 && !defined __CYGWIN__ +# define ENABLE_COSTLY_RELOCATABLE 1 +# else +# define ENABLE_COSTLY_RELOCATABLE 0 +# endif +#endif + +/* Original installation prefix. */ +static char *orig_prefix; +static size_t orig_prefix_len; +/* Current installation prefix. */ +static char *curr_prefix; +static size_t curr_prefix_len; +/* These prefixes do not end in a slash. Anything that will be concatenated + to them must start with a slash. */ + +/* Sets the original and the current installation prefix of this module. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +static void +set_this_relocation_prefix (const char *orig_prefix_arg, + const char *curr_prefix_arg) +{ + if (orig_prefix_arg != NULL && curr_prefix_arg != NULL + /* Optimization: if orig_prefix and curr_prefix are equal, the + relocation is a nop. */ + && strcmp (orig_prefix_arg, curr_prefix_arg) != 0) + { + /* Duplicate the argument strings. */ + char *memory; + + orig_prefix_len = strlen (orig_prefix_arg); + curr_prefix_len = strlen (curr_prefix_arg); + memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1); +#ifdef NO_XMALLOC + if (memory != NULL) +#endif + { + memcpy (memory, orig_prefix_arg, orig_prefix_len + 1); + orig_prefix = memory; + memory += orig_prefix_len + 1; + memcpy (memory, curr_prefix_arg, curr_prefix_len + 1); + curr_prefix = memory; + return; + } + } + orig_prefix = NULL; + curr_prefix = NULL; + /* Don't worry about wasted memory here - this function is usually only + called once. */ +} + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +void +set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) +{ + set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg); + + /* Now notify all dependent libraries. */ +#if DEPENDS_ON_LIBCHARSET + libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); +#endif +#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109 + libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); +#endif +#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix + libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); +#endif +} + +#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE) + +/* Convenience function: + Computes the current installation prefix, based on the original + installation prefix, the original installation directory of a particular + file, and the current pathname of this file. + Returns it, freshly allocated. Returns NULL upon failure. */ +#ifdef IN_LIBRARY +#define compute_curr_prefix local_compute_curr_prefix +static +#endif +char * +compute_curr_prefix (const char *orig_installprefix, + const char *orig_installdir, + const char *curr_pathname) +{ + char *curr_installdir; + const char *rel_installdir; + + if (curr_pathname == NULL) + return NULL; + + /* Determine the relative installation directory, relative to the prefix. + This is simply the difference between orig_installprefix and + orig_installdir. */ + if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix)) + != 0) + /* Shouldn't happen - nothing should be installed outside $(prefix). */ + return NULL; + rel_installdir = orig_installdir + strlen (orig_installprefix); + + /* Determine the current installation directory. */ + { + const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname); + const char *p = curr_pathname + strlen (curr_pathname); + char *q; + + while (p > p_base) + { + p--; + if (ISSLASH (*p)) + break; + } + + q = (char *) xmalloc (p - curr_pathname + 1); +#ifdef NO_XMALLOC + if (q == NULL) + return NULL; +#endif + memcpy (q, curr_pathname, p - curr_pathname); + q[p - curr_pathname] = '\0'; + curr_installdir = q; + } + + /* Compute the current installation prefix by removing the trailing + rel_installdir from it. */ + { + const char *rp = rel_installdir + strlen (rel_installdir); + const char *cp = curr_installdir + strlen (curr_installdir); + const char *cp_base = + curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir); + + while (rp > rel_installdir && cp > cp_base) + { + bool same = false; + const char *rpi = rp; + const char *cpi = cp; + + while (rpi > rel_installdir && cpi > cp_base) + { + rpi--; + cpi--; + if (ISSLASH (*rpi) || ISSLASH (*cpi)) + { + if (ISSLASH (*rpi) && ISSLASH (*cpi)) + same = true; + break; + } + /* Do case-insensitive comparison if the file system is always or + often case-insensitive. It's better to accept the comparison + if the difference is only in case, rather than to fail. */ +#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Native Windows, Cygwin, OS/2, DOS - case insignificant file system */ + if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi) + != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi)) + break; +#else + if (*rpi != *cpi) + break; +#endif + } + if (!same) + break; + /* The last pathname component was the same. opi and cpi now point + to the slash before it. */ + rp = rpi; + cp = cpi; + } + + if (rp > rel_installdir) + { + /* Unexpected: The curr_installdir does not end with rel_installdir. */ + free (curr_installdir); + return NULL; + } + + { + size_t curr_prefix_len = cp - curr_installdir; + char *curr_prefix; + + curr_prefix = (char *) xmalloc (curr_prefix_len + 1); +#ifdef NO_XMALLOC + if (curr_prefix == NULL) + { + free (curr_installdir); + return NULL; + } +#endif + memcpy (curr_prefix, curr_installdir, curr_prefix_len); + curr_prefix[curr_prefix_len] = '\0'; + + free (curr_installdir); + + return curr_prefix; + } + } +} + +#endif /* !IN_LIBRARY || PIC */ + +#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE + +/* Full pathname of shared library, or NULL. */ +static char *shared_library_fullname; + +#if defined _WIN32 && !defined __CYGWIN__ +/* Native Windows only. + On Cygwin, it is better to use the Cygwin provided /proc interface, than + to use native Windows API and cygwin_conv_to_posix_path, because it + supports longer file names + (see ). */ + +/* Determine the full pathname of the shared library when it is loaded. */ + +BOOL WINAPI +DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) +{ + (void) reserved; + + if (event == DLL_PROCESS_ATTACH) + { + /* The DLL is being loaded into an application's address range. */ + static char location[MAX_PATH]; + + if (!GetModuleFileName (module_handle, location, sizeof (location))) + /* Shouldn't happen. */ + return FALSE; + + if (!IS_PATH_WITH_DIR (location)) + /* Shouldn't happen. */ + return FALSE; + + shared_library_fullname = strdup (location); + } + + return TRUE; +} + +#elif defined __EMX__ + +extern int _CRT_init (void); +extern void _CRT_term (void); +extern void __ctordtorInit (void); +extern void __ctordtorTerm (void); + +unsigned long _System +_DLL_InitTerm (unsigned long hModule, unsigned long ulFlag) +{ + static char location[CCHMAXPATH]; + + switch (ulFlag) + { + case 0: + if (_CRT_init () == -1) + return 0; + + __ctordtorInit(); + + /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html + for specification of DosQueryModuleName(). */ + if (DosQueryModuleName (hModule, sizeof (location), location)) + return 0; + + _fnslashify (location); + shared_library_fullname = strdup (location); + break; + + case 1: + __ctordtorTerm(); + + _CRT_term (); + break; + } + + return 1; +} + +#else /* Unix */ + +static void +find_shared_library_fullname () +{ +#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__ + /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline() + function. + Cygwin >= 1.5 has /proc/self/maps and the getline() function too. + But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on + Cygwin 1.7. */ + FILE *fp; + + /* Open the current process' maps file. It describes one VMA per line. */ + fp = fopen ("/proc/self/maps", "r"); + if (fp) + { + unsigned long address = (unsigned long) &find_shared_library_fullname; + for (;;) + { + unsigned long start, end; + int c; + + if (fscanf (fp, "%lx-%lx", &start, &end) != 2) + break; + if (address >= start && address <= end - 1) + { + /* Found it. Now see if this line contains a filename. */ + while (c = getc (fp), c != EOF && c != '\n' && c != '/') + continue; + if (c == '/') + { + size_t size; + int len; + + ungetc (c, fp); + shared_library_fullname = NULL; size = 0; + len = getline (&shared_library_fullname, &size, fp); + if (len >= 0) + { + /* Success: filled shared_library_fullname. */ + if (len > 0 && shared_library_fullname[len - 1] == '\n') + shared_library_fullname[len - 1] = '\0'; + } + } + break; + } + while (c = getc (fp), c != EOF && c != '\n') + continue; + } + fclose (fp); + } +#endif +} + +#endif /* Native Windows / EMX / Unix */ + +/* Return the full pathname of the current shared library. + Return NULL if unknown. + Guaranteed to work only on Linux, EMX, Cygwin, and native Windows. */ +static char * +get_shared_library_fullname () +{ +#if !(defined _WIN32 && !defined __CYGWIN__) && !defined __EMX__ + static bool tried_find_shared_library_fullname; + if (!tried_find_shared_library_fullname) + { + find_shared_library_fullname (); + tried_find_shared_library_fullname = true; + } +#endif + return shared_library_fullname; +} + +#endif /* PIC */ + +/* Returns the pathname, relocated according to the current installation + directory. + The returned string is either PATHNAME unmodified or a freshly allocated + string that you can free with free() after casting it to 'char *'. */ +const char * +relocate (const char *pathname) +{ +#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE + static int initialized; + + /* Initialization code for a shared library. */ + if (!initialized) + { + /* At this point, orig_prefix and curr_prefix likely have already been + set through the main program's set_program_name_and_installdir + function. This is sufficient in the case that the library has + initially been installed in the same orig_prefix. But we can do + better, to also cover the cases that 1. it has been installed + in a different prefix before being moved to orig_prefix and (later) + to curr_prefix, 2. unlike the program, it has not moved away from + orig_prefix. */ + const char *orig_installprefix = INSTALLPREFIX; + const char *orig_installdir = INSTALLDIR; + char *curr_prefix_better; + + curr_prefix_better = + compute_curr_prefix (orig_installprefix, orig_installdir, + get_shared_library_fullname ()); + + set_relocation_prefix (orig_installprefix, + curr_prefix_better != NULL + ? curr_prefix_better + : curr_prefix); + + if (curr_prefix_better != NULL) + free (curr_prefix_better); + + initialized = 1; + } +#endif + + /* Note: It is not necessary to perform case insensitive comparison here, + even for DOS-like file systems, because the pathname argument was + typically created from the same Makefile variable as orig_prefix came + from. */ + if (orig_prefix != NULL && curr_prefix != NULL + && strncmp (pathname, orig_prefix, orig_prefix_len) == 0) + { + if (pathname[orig_prefix_len] == '\0') + { + /* pathname equals orig_prefix. */ + char *result = (char *) xmalloc (strlen (curr_prefix) + 1); + +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + strcpy (result, curr_prefix); + return result; + } + } + else if (ISSLASH (pathname[orig_prefix_len])) + { + /* pathname starts with orig_prefix. */ + const char *pathname_tail = &pathname[orig_prefix_len]; + char *result = + (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1); + +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + memcpy (result, curr_prefix, curr_prefix_len); + strcpy (result + curr_prefix_len, pathname_tail); + return result; + } + } + } + +#ifdef __EMX__ +# ifdef __KLIBC__ +# undef strncmp + + if (strncmp (pathname, "/@unixroot", 10) == 0 + && (pathname[10] == '\0' || ISSLASH (pathname[10]))) + { + /* kLIBC itself processes /@unixroot prefix */ + return pathname; + } + else +# endif + if (ISSLASH (pathname[0])) + { + const char *unixroot = getenv ("UNIXROOT"); + + if (unixroot && HAS_DEVICE (unixroot) && unixroot[2] == '\0') + { + char *result = (char *) xmalloc (2 + strlen (pathname) + 1); +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + memcpy (result, unixroot, 2); + strcpy (result + 2, pathname); + return result; + } + } + } +#endif + + /* Nothing to relocate. */ + return pathname; +} + +/* Returns the pathname, relocated according to the current installation + directory. + This function sets *ALLOCATEDP to the allocated memory, or to NULL if + no memory allocation occurs. So that, after you're done with the return + value, to reclaim allocated memory, you can do: free (*ALLOCATEDP). */ +const char * +relocate2 (const char *pathname, char **allocatedp) +{ + const char *result = relocate (pathname); + *allocatedp = (result != pathname ? (char *) result : NULL); + return result; +} + +#endif diff --git a/jni/parted/libiconv/lib/relocatable.h b/jni/parted/libiconv/lib/relocatable.h new file mode 100755 index 0000000..57520b8 --- /dev/null +++ b/jni/parted/libiconv/lib/relocatable.h @@ -0,0 +1,101 @@ +/* Provide relocatable packages. + Copyright (C) 2003, 2005, 2008-2017 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2, 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . */ + +#ifndef _RELOCATABLE_H +#define _RELOCATABLE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* This can be enabled through the configure --enable-relocatable option. */ +#if ENABLE_RELOCATABLE + +/* When building a DLL, we must export some functions. Note that because + this is a private .h file, we don't need to use __declspec(dllimport) + in any case. */ +#if HAVE_VISIBILITY && BUILDING_DLL +# define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_DLL +# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport) +#else +# define RELOCATABLE_DLL_EXPORTED +#endif + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +extern RELOCATABLE_DLL_EXPORTED void + set_relocation_prefix (const char *orig_prefix, + const char *curr_prefix); + +/* Returns the pathname, relocated according to the current installation + directory. + The returned string is either PATHNAME unmodified or a freshly allocated + string that you can free with free() after casting it to 'char *'. */ +extern const char * relocate (const char *pathname); + +/* Returns the pathname, relocated according to the current installation + directory. + This function sets *ALLOCATEDP to the allocated memory, or to NULL if + no memory allocation occurs. So that, after you're done with the return + value, to reclaim allocated memory, you can do: free (*ALLOCATEDP). */ +extern const char * relocate2 (const char *pathname, char **allocatedp); + +/* Memory management: relocate() potentially allocates memory, because it has + to construct a fresh pathname. If this is a problem because your program + calls relocate() frequently or because you want to fix all potential memory + leaks anyway, you have three options: + 1) Use this idiom: + const char *pathname = ...; + const char *rel_pathname = relocate (pathname); + ... + if (rel_pathname != pathname) + free ((char *) rel_pathname); + 2) Use this idiom: + char *allocated; + const char *rel_pathname = relocate2 (..., &allocated); + ... + free (allocated); + 3) Think about caching the result. */ + +/* Convenience function: + Computes the current installation prefix, based on the original + installation prefix, the original installation directory of a particular + file, and the current pathname of this file. + Returns it, freshly allocated. Returns NULL upon failure. */ +extern char * compute_curr_prefix (const char *orig_installprefix, + const char *orig_installdir, + const char *curr_pathname); + +#else + +/* By default, we use the hardwired pathnames. */ +#define relocate(pathname) (pathname) +#define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname)) + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _RELOCATABLE_H */ diff --git a/jni/parted/libiconv/lib/riscos1.h b/jni/parted/libiconv/lib/riscos1.h new file mode 100755 index 0000000..0613d89 --- /dev/null +++ b/jni/parted/libiconv/lib/riscos1.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * RISCOS-LATIN1 + */ + +static const unsigned short riscos1_2uni[32] = { + /* 0x80 */ + 0x221a, 0x0174, 0x0175, 0x0083, 0x2573, 0x0176, 0x0177, 0x0087, + 0x21e6, 0x21e8, 0x21e9, 0x21e7, 0x2026, 0x2122, 0x2030, 0x2022, + /* 0x90 */ + 0x2018, 0x2019, 0x2039, 0x203a, 0x201c, 0x201d, 0x201e, 0x2013, + 0x2014, 0x2212, 0x0152, 0x0153, 0x2020, 0x2021, 0xfb01, 0xfb02, +}; + +static int +riscos1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c >= 0x80 && c < 0xa0) + *pwc = (ucs4_t) riscos1_2uni[c-0x80]; + else + *pwc = (ucs4_t) c; + return 1; +} + +static const unsigned char riscos1_page01[40] = { + 0x00, 0x00, 0x9a, 0x9b, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0x82, 0x85, 0x86, /* 0x70-0x77 */ +}; +static const unsigned char riscos1_page20[48] = { + 0x00, 0x00, 0x00, 0x97, 0x98, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x90, 0x91, 0x00, 0x00, 0x94, 0x95, 0x96, 0x00, /* 0x18-0x1f */ + 0x9c, 0x9d, 0x8f, 0x00, 0x00, 0x00, 0x8c, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x92, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; +static const unsigned char riscos1_page21[16] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8b, /* 0xe0-0xe7 */ + 0x89, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; +static const unsigned char riscos1_page22[16] = { + 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; + +static int +riscos1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080 || wc == 0x0083 || wc == 0x0087 || (wc >= 0x00a0 && wc < 0x0100)) { + *r = wc; + return 1; + } + else if (wc >= 0x0150 && wc < 0x0178) + c = riscos1_page01[wc-0x0150]; + else if (wc >= 0x2010 && wc < 0x2040) + c = riscos1_page20[wc-0x2010]; + else if (wc == 0x2122) + c = 0x8d; + else if (wc >= 0x21e0 && wc < 0x21f0) + c = riscos1_page21[wc-0x21e0]; + else if (wc >= 0x2210 && wc < 0x2220) + c = riscos1_page22[wc-0x2210]; + else if (wc == 0x2573) + c = 0x84; + else if (wc >= 0xfb01 && wc < 0xfb03) + c = wc-0xfa63; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/rk1048.h b/jni/parted/libiconv/lib/rk1048.h new file mode 100755 index 0000000..4ffb890 --- /dev/null +++ b/jni/parted/libiconv/lib/rk1048.h @@ -0,0 +1,144 @@ +/* + * Copyright (C) 1999-2007, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * RK1048 + */ + +static const unsigned short rk1048_2uni[128] = { + /* 0x80 */ + 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, + 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x049a, 0x04ba, 0x040f, + /* 0x90 */ + 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x049b, 0x04bb, 0x045f, + /* 0xa0 */ + 0x00a0, 0x04b0, 0x04b1, 0x04d8, 0x00a4, 0x04e8, 0x00a6, 0x00a7, + 0x0401, 0x00a9, 0x0492, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x04ae, + /* 0xb0 */ + 0x00b0, 0x00b1, 0x0406, 0x0456, 0x04e9, 0x00b5, 0x00b6, 0x00b7, + 0x0451, 0x2116, 0x0493, 0x00bb, 0x04d9, 0x04a2, 0x04a3, 0x04af, + /* 0xc0 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + /* 0xd0 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xe0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xf0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, +}; + +static int +rk1048_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else { + unsigned short wc = rk1048_2uni[c-0x80]; + if (wc != 0xfffd) { + *pwc = (ucs4_t) wc; + return 1; + } + } + return RET_ILSEQ; +} + +static const unsigned char rk1048_page00[32] = { + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; +static const unsigned char rk1048_page04[240] = { + 0x00, 0xa8, 0x80, 0x81, 0x00, 0x00, 0xb2, 0x00, /* 0x00-0x07 */ + 0x00, 0x8a, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x8f, /* 0x08-0x0f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */ + 0x00, 0xb8, 0x90, 0x83, 0x00, 0x00, 0xb3, 0x00, /* 0x50-0x57 */ + 0x00, 0x9a, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0xaa, 0xba, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x8d, 0x9d, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0xbd, 0xbe, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0xbf, /* 0xa8-0xaf */ + 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x8e, 0x9e, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xa3, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; +static const unsigned char rk1048_page20[48] = { + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; +static const unsigned char rk1048_page21[24] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static int +rk1048_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x00c0) + c = rk1048_page00[wc-0x00a0]; + else if (wc >= 0x0400 && wc < 0x04f0) + c = rk1048_page04[wc-0x0400]; + else if (wc >= 0x2010 && wc < 0x2040) + c = rk1048_page20[wc-0x2010]; + else if (wc == 0x20ac) + c = 0x88; + else if (wc >= 0x2110 && wc < 0x2128) + c = rk1048_page21[wc-0x2110]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/shift_jisx0213.h b/jni/parted/libiconv/lib/shift_jisx0213.h new file mode 100755 index 0000000..f67dbfc --- /dev/null +++ b/jni/parted/libiconv/lib/shift_jisx0213.h @@ -0,0 +1,309 @@ +/* + * Copyright (C) 1999-2002 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * SHIFT_JISX0213 + */ + +/* The structure of Shift_JISX0213 is as follows: + + 0x00..0x7F: ISO646-JP, an ASCII variant + + 0x{A1..DF}: JISX0201 Katakana. + + 0x{81..9F,E0..EF}{40..7E,80..FC}: JISX0213 plane 1. + + 0x{F0..FC}{40..7E,80..FC}: JISX0213 plane 2, with irregular row mapping. + + Note that some JISX0213 characters are not contained in Unicode 3.2 + and are therefore best represented as sequences of Unicode characters. +*/ + +#include "jisx0213.h" +#include "flushwc.h" + +static int +shift_jisx0213_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + ucs4_t last_wc = conv->istate; + if (last_wc) { + /* Output the buffered character. */ + conv->istate = 0; + *pwc = last_wc; + return 0; /* Don't advance the input pointer. */ + } else { + unsigned char c = *s; + if (c < 0x80) { + /* Plain ISO646-JP character. */ + if (c == 0x5c) + *pwc = (ucs4_t) 0x00a5; + else if (c == 0x7e) + *pwc = (ucs4_t) 0x203e; + else + *pwc = (ucs4_t) c; + return 1; + } else if (c >= 0xa1 && c <= 0xdf) { + *pwc = c + 0xfec0; + return 1; + } else { + if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xfc)) { + /* Two byte character. */ + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x40 && c2 <= 0x7e) || (c2 >= 0x80 && c2 <= 0xfc)) { + unsigned int c1; + ucs4_t wc; + /* Convert to row and column. */ + if (c < 0xe0) + c -= 0x81; + else + c -= 0xc1; + if (c2 < 0x80) + c2 -= 0x40; + else + c2 -= 0x41; + /* Now 0 <= c <= 0x3b, 0 <= c2 <= 0xbb. */ + c1 = 2 * c; + if (c2 >= 0x5e) + c2 -= 0x5e, c1++; + c2 += 0x21; + if (c1 >= 0x5e) { + /* Handling of JISX 0213 plane 2 rows. */ + if (c1 >= 0x67) + c1 += 230; + else if (c1 >= 0x63 || c1 == 0x5f) + c1 += 168; + else + c1 += 162; + } + wc = jisx0213_to_ucs4(0x121+c1,c2); + if (wc) { + if (wc < 0x80) { + /* It's a combining character. */ + ucs4_t wc1 = jisx0213_to_ucs_combining[wc - 1][0]; + ucs4_t wc2 = jisx0213_to_ucs_combining[wc - 1][1]; + /* We cannot output two Unicode characters at once. So, + output the first character and buffer the second one. */ + *pwc = wc1; + conv->istate = wc2; + } else + *pwc = wc; + return 2; + } + } + } else + return RET_TOOFEW(0); + } + return RET_ILSEQ; + } + } +} + +#define shift_jisx0213_flushwc normal_flushwc + +/* Composition tables for each of the relevant combining characters. */ +static const struct { unsigned short base; unsigned short composed; } shift_jisx0213_comp_table_data[] = { +#define shift_jisx0213_comp_table02e5_idx 0 +#define shift_jisx0213_comp_table02e5_len 1 + { 0x8684, 0x8685 }, /* 0x12B65 = 0x12B64 U+02E5 */ +#define shift_jisx0213_comp_table02e9_idx (shift_jisx0213_comp_table02e5_idx+shift_jisx0213_comp_table02e5_len) +#define shift_jisx0213_comp_table02e9_len 1 + { 0x8680, 0x8686 }, /* 0x12B66 = 0x12B60 U+02E9 */ +#define shift_jisx0213_comp_table0300_idx (shift_jisx0213_comp_table02e9_idx+shift_jisx0213_comp_table02e9_len) +#define shift_jisx0213_comp_table0300_len 5 + { 0x857b, 0x8663 }, /* 0x12B44 = 0x1295C U+0300 */ + { 0x8657, 0x8667 }, /* 0x12B48 = 0x12B38 U+0300 */ + { 0x8656, 0x8669 }, /* 0x12B4A = 0x12B37 U+0300 */ + { 0x864f, 0x866b }, /* 0x12B4C = 0x12B30 U+0300 */ + { 0x8662, 0x866d }, /* 0x12B4E = 0x12B43 U+0300 */ +#define shift_jisx0213_comp_table0301_idx (shift_jisx0213_comp_table0300_idx+shift_jisx0213_comp_table0300_len) +#define shift_jisx0213_comp_table0301_len 4 + { 0x8657, 0x8668 }, /* 0x12B49 = 0x12B38 U+0301 */ + { 0x8656, 0x866a }, /* 0x12B4B = 0x12B37 U+0301 */ + { 0x864f, 0x866c }, /* 0x12B4D = 0x12B30 U+0301 */ + { 0x8662, 0x866e }, /* 0x12B4F = 0x12B43 U+0301 */ +#define shift_jisx0213_comp_table309a_idx (shift_jisx0213_comp_table0301_idx+shift_jisx0213_comp_table0301_len) +#define shift_jisx0213_comp_table309a_len 14 + { 0x82a9, 0x82f5 }, /* 0x12477 = 0x1242B U+309A */ + { 0x82ab, 0x82f6 }, /* 0x12478 = 0x1242D U+309A */ + { 0x82ad, 0x82f7 }, /* 0x12479 = 0x1242F U+309A */ + { 0x82af, 0x82f8 }, /* 0x1247A = 0x12431 U+309A */ + { 0x82b1, 0x82f9 }, /* 0x1247B = 0x12433 U+309A */ + { 0x834a, 0x8397 }, /* 0x12577 = 0x1252B U+309A */ + { 0x834c, 0x8398 }, /* 0x12578 = 0x1252D U+309A */ + { 0x834e, 0x8399 }, /* 0x12579 = 0x1252F U+309A */ + { 0x8350, 0x839a }, /* 0x1257A = 0x12531 U+309A */ + { 0x8352, 0x839b }, /* 0x1257B = 0x12533 U+309A */ + { 0x835a, 0x839c }, /* 0x1257C = 0x1253B U+309A */ + { 0x8363, 0x839d }, /* 0x1257D = 0x12544 U+309A */ + { 0x8367, 0x839e }, /* 0x1257E = 0x12548 U+309A */ + { 0x83f3, 0x83f6 }, /* 0x12678 = 0x12675 U+309A */ +}; + +static int +shift_jisx0213_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + int count = 0; + unsigned short lasttwo = conv->ostate; + + if (lasttwo) { + /* Attempt to combine the last character with this one. */ + unsigned int idx; + unsigned int len; + + if (wc == 0x02e5) + idx = shift_jisx0213_comp_table02e5_idx, + len = shift_jisx0213_comp_table02e5_len; + else if (wc == 0x02e9) + idx = shift_jisx0213_comp_table02e9_idx, + len = shift_jisx0213_comp_table02e9_len; + else if (wc == 0x0300) + idx = shift_jisx0213_comp_table0300_idx, + len = shift_jisx0213_comp_table0300_len; + else if (wc == 0x0301) + idx = shift_jisx0213_comp_table0301_idx, + len = shift_jisx0213_comp_table0301_len; + else if (wc == 0x309a) + idx = shift_jisx0213_comp_table309a_idx, + len = shift_jisx0213_comp_table309a_len; + else + goto not_combining; + + do + if (shift_jisx0213_comp_table_data[idx].base == lasttwo) + break; + while (++idx, --len > 0); + + if (len > 0) { + /* Output the combined character. */ + if (n >= 2) { + lasttwo = shift_jisx0213_comp_table_data[idx].composed; + r[0] = (lasttwo >> 8) & 0xff; + r[1] = lasttwo & 0xff; + conv->ostate = 0; + return 2; + } else + return RET_TOOSMALL; + } + + not_combining: + /* Output the buffered character. */ + if (n < 2) + return RET_TOOSMALL; + r[0] = (lasttwo >> 8) & 0xff; + r[1] = lasttwo & 0xff; + r += 2; + count = 2; + } + + if (wc < 0x80 && wc != 0x5c && wc != 0x7e) { + /* Plain ISO646-JP character. */ + if (n > count) { + r[0] = (unsigned char) wc; + conv->ostate = 0; + return count+1; + } else + return RET_TOOSMALL; + } else if (wc == 0x00a5) { + if (n > count) { + r[0] = 0x5c; + conv->ostate = 0; + return count+1; + } else + return RET_TOOSMALL; + } else if (wc == 0x203e) { + if (n > count) { + r[0] = 0x7e; + conv->ostate = 0; + return count+1; + } else + return RET_TOOSMALL; + } else if (wc >= 0xff61 && wc <= 0xff9f) { + /* Half-width katakana. */ + if (n > count) { + r[0] = wc - 0xfec0; + conv->ostate = 0; + return count+1; + } else + return RET_TOOSMALL; + } else { + unsigned int s1, s2; + unsigned short jch = ucs4_to_jisx0213(wc); + if (jch != 0) { + /* Convert it to shifted representation. */ + s1 = jch >> 8; + s2 = jch & 0x7f; + s1 -= 0x21; + s2 -= 0x21; + if (s1 >= 0x5e) { + /* Handling of JISX 0213 plane 2 rows. */ + if (s1 >= 0xcd) /* rows 0x26E..0x27E */ + s1 -= 102; + else if (s1 >= 0x8b || s1 == 0x87) /* rows 0x228, 0x22C..0x22F */ + s1 -= 40; + else /* rows 0x221, 0x223..0x225 */ + s1 -= 34; + /* Now 0x5e <= s1 <= 0x77. */ + } + if (s1 & 1) + s2 += 0x5e; + s1 = s1 >> 1; + if (s1 < 0x1f) + s1 += 0x81; + else + s1 += 0xc1; + if (s2 < 0x3f) + s2 += 0x40; + else + s2 += 0x41; + if (jch & 0x0080) { + /* A possible match in comp_table_data. We have to buffer it. */ + /* We know it's a JISX 0213 plane 1 character. */ + if (jch & 0x8000) abort(); + conv->ostate = (s1 << 8) | s2; + return count+0; + } + /* Output the shifted representation. */ + if (n >= count+2) { + r[0] = s1; + r[1] = s2; + conv->ostate = 0; + return count+2; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; + } +} + +static int +shift_jisx0213_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t lasttwo = conv->ostate; + + if (lasttwo) { + if (n < 2) + return RET_TOOSMALL; + r[0] = (lasttwo >> 8) & 0xff; + r[1] = lasttwo & 0xff; + /* conv->ostate = 0; will be done by the caller */ + return 2; + } else + return 0; +} diff --git a/jni/parted/libiconv/lib/sjis.h b/jni/parted/libiconv/lib/sjis.h new file mode 100755 index 0000000..0dba78c --- /dev/null +++ b/jni/parted/libiconv/lib/sjis.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * SHIFT_JIS + */ + +/* + Conversion between SJIS codes (s1,s2) and JISX0208 codes (c1,c2): + Example. (s1,s2) = 0x8140, (c1,c2) = 0x2121. + 0x81 <= s1 <= 0x9F || 0xE0 <= s1 <= 0xEA, + 0x40 <= s2 <= 0x7E || 0x80 <= s2 <= 0xFC, + 0x21 <= c1 <= 0x74, 0x21 <= c2 <= 0x7E. + Invariant: + 94*2*(s1 < 0xE0 ? s1-0x81 : s1-0xC1) + (s2 < 0x80 ? s2-0x40 : s2-0x41) + = 94*(c1-0x21)+(c2-0x21) + Conversion (s1,s2) -> (c1,c2): + t1 := (s1 < 0xE0 ? s1-0x81 : s1-0xC1) + t2 := (s2 < 0x80 ? s2-0x40 : s2-0x41) + c1 := 2*t1 + (t2 < 0x5E ? 0 : 1) + 0x21 + c2 := (t2 < 0x5E ? t2 : t2-0x5E) + 0x21 + Conversion (c1,c2) -> (s1,s2): + t1 := (c1 - 0x21) >> 1 + t2 := ((c1 - 0x21) & 1) * 0x5E + (c2 - 0x21) + s1 := (t1 < 0x1F ? t1+0x81 : t1+0xC1) + s2 := (t2 < 0x3F ? t2+0x40 : t2+0x41) + */ + +static int +sjis_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80 || (c >= 0xa1 && c <= 0xdf)) + return jisx0201_mbtowc(conv,pwc,s,n); + else { + unsigned char s1, s2; + s1 = c; + if ((s1 >= 0x81 && s1 <= 0x9f) || (s1 >= 0xe0 && s1 <= 0xea)) { + if (n < 2) + return RET_TOOFEW(0); + s2 = s[1]; + if ((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0x80 && s2 <= 0xfc)) { + unsigned char t1 = (s1 < 0xe0 ? s1-0x81 : s1-0xc1); + unsigned char t2 = (s2 < 0x80 ? s2-0x40 : s2-0x41); + unsigned char buf[2]; + buf[0] = 2*t1 + (t2 < 0x5e ? 0 : 1) + 0x21; + buf[1] = (t2 < 0x5e ? t2 : t2-0x5e) + 0x21; + return jisx0208_mbtowc(conv,pwc,buf,2); + } + } else if (s1 >= 0xf0 && s1 <= 0xf9) { + /* User-defined range. See + * Ken Lunde's "CJKV Information Processing", table 4-66, p. 206. */ + if (n < 2) + return RET_TOOFEW(0); + s2 = s[1]; + if ((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0x80 && s2 <= 0xfc)) { + *pwc = 0xe000 + 188*(s1 - 0xf0) + (s2 < 0x80 ? s2-0x40 : s2-0x41); + return 2; + } + } + return RET_ILSEQ; + } +} + +static int +sjis_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char buf[2]; + int ret; + + /* Try JIS X 0201-1976. */ + ret = jisx0201_wctomb(conv,buf,wc,1); + if (ret != RET_ILUNI) { + unsigned char c; + if (ret != 1) abort(); + c = buf[0]; + if (c < 0x80 || (c >= 0xa1 && c <= 0xdf)) { + r[0] = c; + return 1; + } + } + + /* Try JIS X 0208-1990. */ + ret = jisx0208_wctomb(conv,buf,wc,2); + if (ret != RET_ILUNI) { + unsigned char c1, c2; + if (ret != 2) abort(); + if (n < 2) + return RET_TOOSMALL; + c1 = buf[0]; + c2 = buf[1]; + if ((c1 >= 0x21 && c1 <= 0x74) && (c2 >= 0x21 && c2 <= 0x7e)) { + unsigned char t1 = (c1 - 0x21) >> 1; + unsigned char t2 = (((c1 - 0x21) & 1) ? 0x5e : 0) + (c2 - 0x21); + r[0] = (t1 < 0x1f ? t1+0x81 : t1+0xc1); + r[1] = (t2 < 0x3f ? t2+0x40 : t2+0x41); + return 2; + } + } + + /* User-defined range. See + * Ken Lunde's "CJKV Information Processing", table 4-66, p. 206. */ + if (wc >= 0xe000 && wc < 0xe758) { + unsigned char c1, c2; + if (n < 2) + return RET_TOOSMALL; + c1 = (unsigned int) (wc - 0xe000) / 188; + c2 = (unsigned int) (wc - 0xe000) % 188; + r[0] = c1+0xf0; + r[1] = (c2 < 0x3f ? c2+0x40 : c2+0x41); + return 2; + } + + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/stamp-h2 b/jni/parted/libiconv/lib/stamp-h2 new file mode 100755 index 0000000..8ce1fe9 --- /dev/null +++ b/jni/parted/libiconv/lib/stamp-h2 @@ -0,0 +1 @@ +timestamp for lib/config.h diff --git a/jni/parted/libiconv/lib/tcvn.h b/jni/parted/libiconv/lib/tcvn.h new file mode 100755 index 0000000..dd981c4 --- /dev/null +++ b/jni/parted/libiconv/lib/tcvn.h @@ -0,0 +1,290 @@ +/* + * Copyright (C) 1999-2002, 2004, 2016, 2019 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * TCVN-5712 + */ + +#include "flushwc.h" +#include "vietcomb.h" + +static const unsigned char tcvn_comb_table[] = { + 0xb0, 0xb3, 0xb2, 0xb1, 0xb4, +}; + +/* The possible bases in viet_comp_table_data: + 0x0041..0x0045, 0x0047..0x0049, 0x004B..0x0050, 0x0052..0x0057, + 0x0059..0x005A, 0x0061..0x0065, 0x0067..0x0069, 0x006B..0x0070, + 0x0072..0x0077, 0x0079..0x007A, 0x00A5, 0x00C2, 0x00CA, 0x00D3..0x00D6, + 0x00DA, 0x00E2, 0x00EA, 0x00F3..0x00F6, 0x00FA, 0x0102..0x0103, + 0x0168..0x0169, 0x01A0..0x01A1, 0x01AF..0x01B0. */ +static const unsigned int tcvn_comp_bases[] = { + 0x06fdfbbe, 0x06fdfbbe, 0x00000000, 0x00000020, 0x04780404, 0x04780404, + 0x0000000c, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0x00018003 +}; + +static const unsigned short tcvn_2uni_1[24] = { + /* 0x00 */ + 0x0000, 0x00da, 0x1ee4, 0x0003, 0x1eea, 0x1eec, 0x1eee, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x1ee8, 0x1ef0, 0x1ef2, 0x1ef6, 0x1ef8, 0x00dd, 0x1ef4, +}; +static const unsigned short tcvn_2uni_2[128] = { + /* 0x80 */ + 0x00c0, 0x1ea2, 0x00c3, 0x00c1, 0x1ea0, 0x1eb6, 0x1eac, 0x00c8, + 0x1eba, 0x1ebc, 0x00c9, 0x1eb8, 0x1ec6, 0x00cc, 0x1ec8, 0x0128, + /* 0x90 */ + 0x00cd, 0x1eca, 0x00d2, 0x1ece, 0x00d5, 0x00d3, 0x1ecc, 0x1ed8, + 0x1edc, 0x1ede, 0x1ee0, 0x1eda, 0x1ee2, 0x00d9, 0x1ee6, 0x0168, + /* 0xa0 */ + 0x00a0, 0x0102, 0x00c2, 0x00ca, 0x00d4, 0x01a0, 0x01af, 0x0110, + 0x0103, 0x00e2, 0x00ea, 0x00f4, 0x01a1, 0x01b0, 0x0111, 0x1eb0, + /* 0xb0 */ + 0x0300, 0x0309, 0x0303, 0x0301, 0x0323, 0x00e0, 0x1ea3, 0x00e3, + 0x00e1, 0x1ea1, 0x1eb2, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eaf, 0x1eb4, + /* 0xc0 */ + 0x1eae, 0x1ea6, 0x1ea8, 0x1eaa, 0x1ea4, 0x1ec0, 0x1eb7, 0x1ea7, + 0x1ea9, 0x1eab, 0x1ea5, 0x1ead, 0x00e8, 0x1ec2, 0x1ebb, 0x1ebd, + /* 0xd0 */ + 0x00e9, 0x1eb9, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ebf, 0x1ec7, 0x00ec, + 0x1ec9, 0x1ec4, 0x1ebe, 0x1ed2, 0x0129, 0x00ed, 0x1ecb, 0x00f2, + /* 0xe0 */ + 0x1ed4, 0x1ecf, 0x00f5, 0x00f3, 0x1ecd, 0x1ed3, 0x1ed5, 0x1ed7, + 0x1ed1, 0x1ed9, 0x1edd, 0x1edf, 0x1ee1, 0x1edb, 0x1ee3, 0x00f9, + /* 0xf0 */ + 0x1ed6, 0x1ee7, 0x0169, 0x00fa, 0x1ee5, 0x1eeb, 0x1eed, 0x1eef, + 0x1ee9, 0x1ef1, 0x1ef3, 0x1ef7, 0x1ef9, 0x00fd, 0x1ef5, 0x1ed0, +}; + +/* In the TCVN to Unicode direction, the state contains a buffered + character, or 0 if none. */ + +static int +tcvn_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + unsigned short wc; + unsigned short last_wc; + if (c < 0x18) + wc = tcvn_2uni_1[c]; + else if (c < 0x80) + wc = c; + else + wc = tcvn_2uni_2[c-0x80]; + last_wc = conv->istate; + if (last_wc) { + if (wc >= 0x0300 && wc < 0x0340) { + /* See whether last_wc and wc can be combined. */ + unsigned int k; + unsigned int i1, i2; + switch (wc) { + case 0x0300: k = 0; break; + case 0x0301: k = 1; break; + case 0x0303: k = 2; break; + case 0x0309: k = 3; break; + case 0x0323: k = 4; break; + default: abort(); + } + i1 = viet_comp_table[k].idx; + i2 = i1 + viet_comp_table[k].len-1; + if (last_wc >= viet_comp_table_data[i1].base + && last_wc <= viet_comp_table_data[i2].base) { + unsigned int i; + for (;;) { + i = (i1+i2)>>1; + if (last_wc == viet_comp_table_data[i].base) + break; + if (last_wc < viet_comp_table_data[i].base) { + if (i1 == i) + goto not_combining; + i2 = i; + } else { + if (i1 != i) + i1 = i; + else { + i = i2; + if (last_wc == viet_comp_table_data[i].base) + break; + goto not_combining; + } + } + } + last_wc = viet_comp_table_data[i].composed; + /* Output the combined character. */ + conv->istate = 0; + *pwc = (ucs4_t) last_wc; + return 1; + } + } + not_combining: + /* Output the buffered character. */ + conv->istate = 0; + *pwc = (ucs4_t) last_wc; + return 0; /* Don't advance the input pointer. */ + } + if (wc >= 0x0041 && wc <= 0x01b0 + && ((tcvn_comp_bases[(wc - 0x0040) >> 5] >> (wc & 0x1f)) & 1)) { + /* wc is a possible match in viet_comp_table_data. Buffer it. */ + conv->istate = wc; + return RET_TOOFEW(1); + } else { + /* Output wc immediately. */ + *pwc = (ucs4_t) wc; + return 1; + } +} + +#define tcvn_flushwc normal_flushwc + +static const unsigned char tcvn_page00[96+184] = { + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x80, 0x83, 0xa2, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x87, 0x8a, 0xa3, 0x00, 0x8d, 0x90, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x92, 0x95, 0xa4, 0x94, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x9d, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, /* 0xd8-0xdf */ + 0xb5, 0xb8, 0xa9, 0xb7, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xcc, 0xd0, 0xaa, 0x00, 0xd7, 0xdd, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0xdf, 0xe3, 0xab, 0xe2, 0x00, 0x00, /* 0xf0-0xf7 */ + 0x00, 0xef, 0xf3, 0x00, 0x00, 0xfd, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0xa1, 0xa8, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xa7, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x8f, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x9f, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa5, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, /* 0xa8-0xaf */ + 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ +}; +static const unsigned char tcvn_page03[40] = { + 0xb0, 0xb3, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; +static const unsigned char tcvn_page1e[96] = { + 0x84, 0xb9, 0x81, 0xb6, 0xc4, 0xca, 0xc1, 0xc7, /* 0xa0-0xa7 */ + 0xc2, 0xc8, 0xc3, 0xc9, 0x86, 0xcb, 0xc0, 0xbe, /* 0xa8-0xaf */ + 0xaf, 0xbb, 0xba, 0xbc, 0xbf, 0xbd, 0x85, 0xc6, /* 0xb0-0xb7 */ + 0x8b, 0xd1, 0x88, 0xce, 0x89, 0xcf, 0xda, 0xd5, /* 0xb8-0xbf */ + 0xc5, 0xd2, 0xcd, 0xd3, 0xd9, 0xd4, 0x8c, 0xd6, /* 0xc0-0xc7 */ + 0x8e, 0xd8, 0x91, 0xde, 0x96, 0xe4, 0x93, 0xe1, /* 0xc8-0xcf */ + 0xff, 0xe8, 0xdb, 0xe5, 0xe0, 0xe6, 0xf0, 0xe7, /* 0xd0-0xd7 */ + 0x97, 0xe9, 0x9b, 0xed, 0x98, 0xea, 0x99, 0xeb, /* 0xd8-0xdf */ + 0x9a, 0xec, 0x9c, 0xee, 0x02, 0xf4, 0x9e, 0xf1, /* 0xe0-0xe7 */ + 0x11, 0xf8, 0x04, 0xf5, 0x05, 0xf6, 0x06, 0xf7, /* 0xe8-0xef */ + 0x12, 0xf9, 0x13, 0xfa, 0x17, 0xfe, 0x14, 0xfb, /* 0xf0-0xf7 */ + 0x15, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static int +tcvn_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080 && (wc >= 0x0020 || (0x00fe0076U & (1U << wc)) == 0)) { + *r = wc; + return 1; + } + else if (wc >= 0x00a0 && wc < 0x01b8) + c = tcvn_page00[wc-0x00a0]; + else if (wc >= 0x0300 && wc < 0x0328) + c = tcvn_page03[wc-0x0300]; + else if (wc >= 0x0340 && wc < 0x0342) /* deprecated Vietnamese tone marks */ + c = tcvn_page03[wc-0x0340]; + else if (wc >= 0x1ea0 && wc < 0x1f00) + c = tcvn_page1e[wc-0x1ea0]; + if (c != 0) { + *r = c; + return 1; + } + /* Try compatibility or canonical decomposition. */ + { + /* Binary search through viet_decomp_table. */ + unsigned int i1 = 0; + unsigned int i2 = sizeof(viet_decomp_table)/sizeof(viet_decomp_table[0])-1; + if (wc >= viet_decomp_table[i1].composed + && wc <= viet_decomp_table[i2].composed) { + unsigned int i; + for (;;) { + /* Here i2 - i1 > 0. */ + i = (i1+i2)>>1; + if (wc == viet_decomp_table[i].composed) + break; + if (wc < viet_decomp_table[i].composed) { + if (i1 == i) + return RET_ILUNI; + /* Here i1 < i < i2. */ + i2 = i; + } else { + /* Here i1 <= i < i2. */ + if (i1 != i) + i1 = i; + else { + /* Here i2 - i1 = 1. */ + i = i2; + if (wc == viet_decomp_table[i].composed) + break; + else + return RET_ILUNI; + } + } + } + /* Found a compatibility or canonical decomposition. */ + wc = viet_decomp_table[i].base; + /* wc is one of 0x0020, 0x0041..0x005a, 0x0061..0x007a, 0x00a5, 0x00a8, + 0x00c2, 0x00c5..0x00c7, 0x00ca, 0x00cf, 0x00d3, 0x00d4, 0x00d6, + 0x00d8, 0x00da, 0x00dc, 0x00e2, 0x00e5..0x00e7, 0x00ea, 0x00ef, + 0x00f3, 0x00f4, 0x00f6, 0x00f8, 0x00fc, 0x0102, 0x0103, 0x01a0, + 0x01a1, 0x01af, 0x01b0. */ + if (wc < 0x0080) + c = wc; + else { + c = tcvn_page00[wc-0x00a0]; + if (c == 0) + return RET_ILUNI; + } + if (n < 2) + return RET_TOOSMALL; + r[0] = c; + r[1] = tcvn_comb_table[viet_decomp_table[i].comb1]; + return 2; + } + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/tds565.h b/jni/parted/libiconv/lib/tds565.h new file mode 100755 index 0000000..acb59a9 --- /dev/null +++ b/jni/parted/libiconv/lib/tds565.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * TDS565 + */ + +static const unsigned short tds565_2uni[64] = { + /* 0x40 */ + 0x0040, 0x0041, 0x0042, 0x00c7, 0x0044, 0x0045, 0x00c4, 0x0046, + 0x0047, 0x0048, 0x0049, 0x004a, 0x017d, 0x004b, 0x004c, 0x004d, + /* 0x50 */ + 0x004e, 0x0147, 0x004f, 0x00d6, 0x0050, 0x0052, 0x0053, 0x015e, + 0x0054, 0x0055, 0x00dc, 0x0057, 0x0059, 0x00dd, 0x005a, 0x005f, + /* 0x60 */ + 0x2116, 0x0061, 0x0062, 0x00e7, 0x0064, 0x0065, 0x00e4, 0x0066, + 0x0067, 0x0068, 0x0069, 0x006a, 0x017e, 0x006b, 0x006c, 0x006d, + /* 0x70 */ + 0x006e, 0x0148, 0x006f, 0x00f6, 0x0070, 0x0072, 0x0073, 0x015f, + 0x0074, 0x0075, 0x00fc, 0x0077, 0x0079, 0x00fd, 0x007a, 0x007f, +}; + +static int +tds565_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x40) { + *pwc = (ucs4_t) c; + return 1; + } + else if (c < 0x80) { + *pwc = (ucs4_t) tds565_2uni[c-0x40]; + return 1; + } + return RET_ILSEQ; +} + +static const unsigned char tds565_page00[64] = { + 0x40, 0x41, 0x42, 0x00, 0x44, 0x45, 0x47, 0x48, /* 0x40-0x47 */ + 0x49, 0x4a, 0x4b, 0x4d, 0x4e, 0x4f, 0x50, 0x52, /* 0x48-0x4f */ + 0x54, 0x00, 0x55, 0x56, 0x58, 0x59, 0x00, 0x5b, /* 0x50-0x57 */ + 0x00, 0x5c, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x5f, /* 0x58-0x5f */ + 0x00, 0x61, 0x62, 0x00, 0x64, 0x65, 0x67, 0x68, /* 0x60-0x67 */ + 0x69, 0x6a, 0x6b, 0x6d, 0x6e, 0x6f, 0x70, 0x72, /* 0x68-0x6f */ + 0x74, 0x00, 0x75, 0x76, 0x78, 0x79, 0x00, 0x7b, /* 0x70-0x77 */ + 0x00, 0x7c, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x7f, /* 0x78-0x7f */ +}; +static const unsigned char tds565_page00_1[64] = { + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x43, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x5a, 0x5d, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x63, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, /* 0xf0-0xf7 */ + 0x00, 0x00, 0x00, 0x00, 0x7a, 0x7d, 0x00, 0x00, /* 0xf8-0xff */ +}; +static const unsigned char tds565_page01[64] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, /* 0x40-0x47 */ + 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x77, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x6c, 0x00, /* 0x78-0x7f */ +}; + +static int +tds565_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0040) { + *r = wc; + return 1; + } + else if (wc >= 0x0040 && wc < 0x0080) + c = tds565_page00[wc-0x0040]; + else if (wc >= 0x00c0 && wc < 0x0100) + c = tds565_page00_1[wc-0x00c0]; + else if (wc >= 0x0140 && wc < 0x0180) + c = tds565_page01[wc-0x0140]; + else if (wc == 0x2116) + c = 0x60; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/tis620.h b/jni/parted/libiconv/lib/tis620.h new file mode 100755 index 0000000..b22fa1c --- /dev/null +++ b/jni/parted/libiconv/lib/tis620.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * TIS620.2533-1 + */ + +static int +tis620_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x80) { + *pwc = (ucs4_t) c; + return 1; + } + else if (c >= 0xa1 && c <= 0xfb && !(c >= 0xdb && c <= 0xde)) { + *pwc = (ucs4_t) (c + 0x0d60); + return 1; + } + return RET_ILSEQ; +} + +static int +tis620_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x0080) { + *r = wc; + return 1; + } + else if (wc >= 0x0e01 && wc <= 0x0e5b && !(wc >= 0x0e3b && wc <= 0x0e3e)) { + *r = wc-0x0d60; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/translit.def b/jni/parted/libiconv/lib/translit.def new file mode 100755 index 0000000..15a9412 --- /dev/null +++ b/jni/parted/libiconv/lib/translit.def @@ -0,0 +1,3917 @@ +# Copyright (C) 1999-2003 Free Software Foundation, Inc. +# This file is part of the GNU LIBICONV Library. +# +# The GNU LIBICONV Library is free software; you can redistribute it +# and/or modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either version 2.1 +# of the License, or (at your option) any later version. +# +# The GNU LIBICONV Library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU LIBICONV Library; see the file COPYING.LIB. +# If not, see . +# +# +# Definition of transliteration from Unicode to poorer character sets. +# +# This covers all of Markus Kuhn's TARGET1. +# +# The second column gives the transliteration. It is enclosed between tabs! +# +00A0 # NO-BREAK SPACE +00A1 ! # INVERTED EXCLAMATION MARK +00A2 c # CENT SIGN +00A3 lb # POUND SIGN +00A4 # CURRENCY SIGN +00A5 yen # YEN SIGN +00A6 | # BROKEN BAR +00A7 SS # SECTION SIGN +00A8 " # DIAERESIS +00A9 (c) # COPYRIGHT SIGN +00AA a # FEMININE ORDINAL INDICATOR +00AB << # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC not # NOT SIGN +00AD - # SOFT HYPHEN +00AE (R) # REGISTERED SIGN +00AF # MACRON +00B0 ^0 # DEGREE SIGN +00B1 +/- # PLUS-MINUS SIGN +00B2 ^2 # SUPERSCRIPT TWO +00B3 ^3 # SUPERSCRIPT THREE +00B4 ' # ACUTE ACCENT +00B5 u # MICRO SIGN +00B6 P # PILCROW SIGN +00B7 . # MIDDLE DOT +00B8 , # CEDILLA +00B9 ^1 # SUPERSCRIPT ONE +00BA o # MASCULINE ORDINAL INDICATOR +00BB >> # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC 1⁄4 # VULGAR FRACTION ONE QUARTER +00BD 1⁄2 # VULGAR FRACTION ONE HALF +00BE 3⁄4 # VULGAR FRACTION THREE QUARTERS +00BF ? # INVERTED QUESTION MARK +00C0 `A # LATIN CAPITAL LETTER A WITH GRAVE +00C1 ´A # LATIN CAPITAL LETTER A WITH ACUTE +00C2 ^A # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3 ~A # LATIN CAPITAL LETTER A WITH TILDE +00C4 "A # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5 A # LATIN CAPITAL LETTER A WITH RING ABOVE +00C6 AE # LATIN CAPITAL LETTER AE +00C7 C # LATIN CAPITAL LETTER C WITH CEDILLA +00C8 `E # LATIN CAPITAL LETTER E WITH GRAVE +00C9 ´E # LATIN CAPITAL LETTER E WITH ACUTE +00CA ^E # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB "E # LATIN CAPITAL LETTER E WITH DIAERESIS +00CC `I # LATIN CAPITAL LETTER I WITH GRAVE +00CD ´I # LATIN CAPITAL LETTER I WITH ACUTE +00CE ^I # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF "I # LATIN CAPITAL LETTER I WITH DIAERESIS +00D0 D # LATIN CAPITAL LETTER ETH +00D1 ~N # LATIN CAPITAL LETTER N WITH TILDE +00D2 `O # LATIN CAPITAL LETTER O WITH GRAVE +00D3 ´O # LATIN CAPITAL LETTER O WITH ACUTE +00D4 ^O # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5 ~O # LATIN CAPITAL LETTER O WITH TILDE +00D6 "O # LATIN CAPITAL LETTER O WITH DIAERESIS +00D7 x # MULTIPLICATION SIGN +00D8 O # LATIN CAPITAL LETTER O WITH STROKE +00D9 `U # LATIN CAPITAL LETTER U WITH GRAVE +00DA ´U # LATIN CAPITAL LETTER U WITH ACUTE +00DB ^U # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC "U # LATIN CAPITAL LETTER U WITH DIAERESIS +00DD ´Y # LATIN CAPITAL LETTER Y WITH ACUTE +00DE Th # LATIN CAPITAL LETTER THORN +00DF ss # LATIN SMALL LETTER SHARP S +00E0 `a # LATIN SMALL LETTER A WITH GRAVE +00E1 ´a # LATIN SMALL LETTER A WITH ACUTE +00E2 ^a # LATIN SMALL LETTER A WITH CIRCUMFLEX +00E3 ~a # LATIN SMALL LETTER A WITH TILDE +00E4 "a # LATIN SMALL LETTER A WITH DIAERESIS +00E5 a # LATIN SMALL LETTER A WITH RING ABOVE +00E6 ae # LATIN SMALL LETTER AE +00E7 c # LATIN SMALL LETTER C WITH CEDILLA +00E8 `e # LATIN SMALL LETTER E WITH GRAVE +00E9 ´e # LATIN SMALL LETTER E WITH ACUTE +00EA ^e # LATIN SMALL LETTER E WITH CIRCUMFLEX +00EB "e # LATIN SMALL LETTER E WITH DIAERESIS +00EC `i # LATIN SMALL LETTER I WITH GRAVE +00ED ´i # LATIN SMALL LETTER I WITH ACUTE +00EE ^i # LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF "i # LATIN SMALL LETTER I WITH DIAERESIS +00F0 d # LATIN SMALL LETTER ETH +00F1 ~n # LATIN SMALL LETTER N WITH TILDE +00F2 `o # LATIN SMALL LETTER O WITH GRAVE +00F3 ´o # LATIN SMALL LETTER O WITH ACUTE +00F4 ^o # LATIN SMALL LETTER O WITH CIRCUMFLEX +00F5 ~o # LATIN SMALL LETTER O WITH TILDE +00F6 "o # LATIN SMALL LETTER O WITH DIAERESIS +00F7 : # DIVISION SIGN +00F8 o # LATIN SMALL LETTER O WITH STROKE +00F9 `u # LATIN SMALL LETTER U WITH GRAVE +00FA ´u # LATIN SMALL LETTER U WITH ACUTE +00FB ^u # LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC "u # LATIN SMALL LETTER U WITH DIAERESIS +00FD ´y # LATIN SMALL LETTER Y WITH ACUTE +00FE th # LATIN SMALL LETTER THORN +00FF "y # LATIN SMALL LETTER Y WITH DIAERESIS +0100 A # LATIN CAPITAL LETTER A WITH MACRON +0101 a # LATIN SMALL LETTER A WITH MACRON +0102 A # LATIN CAPITAL LETTER A WITH BREVE +0103 a # LATIN SMALL LETTER A WITH BREVE +0104 A # LATIN CAPITAL LETTER A WITH OGONEK +0105 a # LATIN SMALL LETTER A WITH OGONEK +0106 ´C # LATIN CAPITAL LETTER C WITH ACUTE +0107 ´c # LATIN SMALL LETTER C WITH ACUTE +0108 ^C # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +0109 ^c # LATIN SMALL LETTER C WITH CIRCUMFLEX +010A C # LATIN CAPITAL LETTER C WITH DOT ABOVE +010B c # LATIN SMALL LETTER C WITH DOT ABOVE +010C C # LATIN CAPITAL LETTER C WITH CARON +010D c # LATIN SMALL LETTER C WITH CARON +010E D # LATIN CAPITAL LETTER D WITH CARON +010F d # LATIN SMALL LETTER D WITH CARON +0110 D # LATIN CAPITAL LETTER D WITH STROKE +0111 d # LATIN SMALL LETTER D WITH STROKE +0112 E # LATIN CAPITAL LETTER E WITH MACRON +0113 e # LATIN SMALL LETTER E WITH MACRON +0114 E # LATIN CAPITAL LETTER E WITH BREVE +0115 e # LATIN SMALL LETTER E WITH BREVE +0116 E # LATIN CAPITAL LETTER E WITH DOT ABOVE +0117 e # LATIN SMALL LETTER E WITH DOT ABOVE +0118 E # LATIN CAPITAL LETTER E WITH OGONEK +0119 e # LATIN SMALL LETTER E WITH OGONEK +011A E # LATIN CAPITAL LETTER E WITH CARON +011B e # LATIN SMALL LETTER E WITH CARON +011C ^G # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011D ^g # LATIN SMALL LETTER G WITH CIRCUMFLEX +011E G # LATIN CAPITAL LETTER G WITH BREVE +011F g # LATIN SMALL LETTER G WITH BREVE +0120 G # LATIN CAPITAL LETTER G WITH DOT ABOVE +0121 g # LATIN SMALL LETTER G WITH DOT ABOVE +0122 G # LATIN CAPITAL LETTER G WITH CEDILLA +0123 g # LATIN SMALL LETTER G WITH CEDILLA +0124 ^H # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0125 ^h # LATIN SMALL LETTER H WITH CIRCUMFLEX +0126 H # LATIN CAPITAL LETTER H WITH STROKE +0127 h # LATIN SMALL LETTER H WITH STROKE +0128 ~I # LATIN CAPITAL LETTER I WITH TILDE +0129 ~i # LATIN SMALL LETTER I WITH TILDE +012A I # LATIN CAPITAL LETTER I WITH MACRON +012B i # LATIN SMALL LETTER I WITH MACRON +012C I # LATIN CAPITAL LETTER I WITH BREVE +012D i # LATIN SMALL LETTER I WITH BREVE +012E I # LATIN CAPITAL LETTER I WITH OGONEK +012F i # LATIN SMALL LETTER I WITH OGONEK +0130 I # LATIN CAPITAL LETTER I WITH DOT ABOVE +0131 i # LATIN SMALL LETTER DOTLESS I +0132 IJ # LATIN CAPITAL LIGATURE IJ +0133 ij # LATIN SMALL LIGATURE IJ +0134 ^J # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0135 ^j # LATIN SMALL LETTER J WITH CIRCUMFLEX +0136 K # LATIN CAPITAL LETTER K WITH CEDILLA +0137 k # LATIN SMALL LETTER K WITH CEDILLA +0138 # LATIN SMALL LETTER KRA +0139 L # LATIN CAPITAL LETTER L WITH ACUTE +013A l # LATIN SMALL LETTER L WITH ACUTE +013B L # LATIN CAPITAL LETTER L WITH CEDILLA +013C l # LATIN SMALL LETTER L WITH CEDILLA +013D L # LATIN CAPITAL LETTER L WITH CARON +013E l # LATIN SMALL LETTER L WITH CARON +013F L # LATIN CAPITAL LETTER L WITH MIDDLE DOT +0140 l # LATIN SMALL LETTER L WITH MIDDLE DOT +0141 L # LATIN CAPITAL LETTER L WITH STROKE +0142 l # LATIN SMALL LETTER L WITH STROKE +0143 ´N # LATIN CAPITAL LETTER N WITH ACUTE +0144 ´n # LATIN SMALL LETTER N WITH ACUTE +0145 N # LATIN CAPITAL LETTER N WITH CEDILLA +0146 n # LATIN SMALL LETTER N WITH CEDILLA +0147 N # LATIN CAPITAL LETTER N WITH CARON +0148 n # LATIN SMALL LETTER N WITH CARON +0149 'n # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A # LATIN CAPITAL LETTER ENG +014B # LATIN SMALL LETTER ENG +014C O # LATIN CAPITAL LETTER O WITH MACRON +014D o # LATIN SMALL LETTER O WITH MACRON +014E O # LATIN CAPITAL LETTER O WITH BREVE +014F o # LATIN SMALL LETTER O WITH BREVE +0150 "O # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0151 "o # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0152 OE # LATIN CAPITAL LIGATURE OE +0153 oe # LATIN SMALL LIGATURE OE +0154 ´R # LATIN CAPITAL LETTER R WITH ACUTE +0155 ´r # LATIN SMALL LETTER R WITH ACUTE +0156 R # LATIN CAPITAL LETTER R WITH CEDILLA +0157 r # LATIN SMALL LETTER R WITH CEDILLA +0158 R # LATIN CAPITAL LETTER R WITH CARON +0159 r # LATIN SMALL LETTER R WITH CARON +015A ´S # LATIN CAPITAL LETTER S WITH ACUTE +015B ´s # LATIN SMALL LETTER S WITH ACUTE +015C ^S # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015D ^s # LATIN SMALL LETTER S WITH CIRCUMFLEX +015E S # LATIN CAPITAL LETTER S WITH CEDILLA +015F s # LATIN SMALL LETTER S WITH CEDILLA +0160 S # LATIN CAPITAL LETTER S WITH CARON +0161 s # LATIN SMALL LETTER S WITH CARON +0162 T # LATIN CAPITAL LETTER T WITH CEDILLA +0163 t # LATIN SMALL LETTER T WITH CEDILLA +0164 T # LATIN CAPITAL LETTER T WITH CARON +0165 t # LATIN SMALL LETTER T WITH CARON +0166 T # LATIN CAPITAL LETTER T WITH STROKE +0167 t # LATIN SMALL LETTER T WITH STROKE +0168 ~U # LATIN CAPITAL LETTER U WITH TILDE +0169 ~u # LATIN SMALL LETTER U WITH TILDE +016A U # LATIN CAPITAL LETTER U WITH MACRON +016B u # LATIN SMALL LETTER U WITH MACRON +016C U # LATIN CAPITAL LETTER U WITH BREVE +016D u # LATIN SMALL LETTER U WITH BREVE +016E U # LATIN CAPITAL LETTER U WITH RING ABOVE +016F u # LATIN SMALL LETTER U WITH RING ABOVE +0170 "U # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0171 "u # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0172 U # LATIN CAPITAL LETTER U WITH OGONEK +0173 u # LATIN SMALL LETTER U WITH OGONEK +0174 ^W # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0175 ^w # LATIN SMALL LETTER W WITH CIRCUMFLEX +0176 ^Y # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0177 ^y # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0178 "Y # LATIN CAPITAL LETTER Y WITH DIAERESIS +0179 ´Z # LATIN CAPITAL LETTER Z WITH ACUTE +017A ´z # LATIN SMALL LETTER Z WITH ACUTE +017B Z # LATIN CAPITAL LETTER Z WITH DOT ABOVE +017C z # LATIN SMALL LETTER Z WITH DOT ABOVE +017D Z # LATIN CAPITAL LETTER Z WITH CARON +017E z # LATIN SMALL LETTER Z WITH CARON +017F s # LATIN SMALL LETTER LONG S +018F # LATIN CAPITAL LETTER SCHWA +0192 f # LATIN SMALL LETTER F WITH HOOK +01C4 DŽ # LATIN CAPITAL LETTER DZ WITH CARON +01C5 Dž # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C6 dž # LATIN SMALL LETTER DZ WITH CARON +01C7 LJ # LATIN CAPITAL LETTER LJ +01C8 Lj # LATIN CAPITAL LETTER L WITH SMALL LETTER J +01C9 lj # LATIN SMALL LETTER LJ +01CA NJ # LATIN CAPITAL LETTER NJ +01CB Nj # LATIN CAPITAL LETTER N WITH SMALL LETTER J +01CC nj # LATIN SMALL LETTER NJ +01F1 DZ # LATIN CAPITAL LETTER DZ +01F2 Dz # LATIN CAPITAL LETTER D WITH SMALL LETTER Z +01F3 dz # LATIN SMALL LETTER DZ +0218 S # LATIN CAPITAL LETTER S WITH COMMA BELOW +0219 s # LATIN SMALL LETTER S WITH COMMA BELOW +021A T # LATIN CAPITAL LETTER T WITH COMMA BELOW +021B t # LATIN SMALL LETTER T WITH COMMA BELOW +0259 # LATIN SMALL LETTER SCHWA +02B9 ′ # MODIFIER LETTER PRIME +02BA ″ # MODIFIER LETTER DOUBLE PRIME +02BB ‘ # MODIFIER LETTER TURNED COMMA +02BC ’ # MODIFIER LETTER APOSTROPHE +02BD ‛ # MODIFIER LETTER REVERSED COMMA +02C6 ^ # MODIFIER LETTER CIRCUMFLEX ACCENT +02C7 # CARON +02C8 ' # MODIFIER LETTER VERTICAL LINE +02C9 ¯ # MODIFIER LETTER MACRON +02CA ´ # MODIFIER LETTER ACUTE ACCENT +02CB ` # MODIFIER LETTER GRAVE ACCENT +02CD _ # MODIFIER LETTER LOW MACRON +02D8 # BREVE +02D9 # DOT ABOVE +02DA # RING ABOVE +02DB # OGONEK +02DC ~ # SMALL TILDE +02DD " # DOUBLE ACUTE ACCENT +0374 # GREEK NUMERAL SIGN +0375 # GREEK LOWER NUMERAL SIGN +037A # GREEK YPOGEGRAMMENI +037E # GREEK QUESTION MARK +0384 # GREEK TONOS +0385 # GREEK DIALYTIKA TONOS +0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS +0387 # GREEK ANO TELEIA +0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS +0389 # GREEK CAPITAL LETTER ETA WITH TONOS +038A # GREEK CAPITAL LETTER IOTA WITH TONOS +038C # GREEK CAPITAL LETTER OMICRON WITH TONOS +038E # GREEK CAPITAL LETTER UPSILON WITH TONOS +038F # GREEK CAPITAL LETTER OMEGA WITH TONOS +0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391 # GREEK CAPITAL LETTER ALPHA +0392 # GREEK CAPITAL LETTER BETA +0393 # GREEK CAPITAL LETTER GAMMA +0394 # GREEK CAPITAL LETTER DELTA +0395 # GREEK CAPITAL LETTER EPSILON +0396 # GREEK CAPITAL LETTER ZETA +0397 # GREEK CAPITAL LETTER ETA +0398 # GREEK CAPITAL LETTER THETA +0399 # GREEK CAPITAL LETTER IOTA +039A # GREEK CAPITAL LETTER KAPPA +039B # GREEK CAPITAL LETTER LAMDA +039C # GREEK CAPITAL LETTER MU +039D # GREEK CAPITAL LETTER NU +039E # GREEK CAPITAL LETTER XI +039F # GREEK CAPITAL LETTER OMICRON +03A0 # GREEK CAPITAL LETTER PI +03A1 # GREEK CAPITAL LETTER RHO +03A3 # GREEK CAPITAL LETTER SIGMA +03A4 # GREEK CAPITAL LETTER TAU +03A5 # GREEK CAPITAL LETTER UPSILON +03A6 # GREEK CAPITAL LETTER PHI +03A7 # GREEK CAPITAL LETTER CHI +03A8 # GREEK CAPITAL LETTER PSI +03A9 # GREEK CAPITAL LETTER OMEGA +03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03AC # GREEK SMALL LETTER ALPHA WITH TONOS +03AD # GREEK SMALL LETTER EPSILON WITH TONOS +03AE # GREEK SMALL LETTER ETA WITH TONOS +03AF # GREEK SMALL LETTER IOTA WITH TONOS +03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03B1 # GREEK SMALL LETTER ALPHA +03B2 # GREEK SMALL LETTER BETA +03B3 # GREEK SMALL LETTER GAMMA +03B4 # GREEK SMALL LETTER DELTA +03B5 # GREEK SMALL LETTER EPSILON +03B6 # GREEK SMALL LETTER ZETA +03B7 # GREEK SMALL LETTER ETA +03B8 # GREEK SMALL LETTER THETA +03B9 # GREEK SMALL LETTER IOTA +03BA # GREEK SMALL LETTER KAPPA +03BB # GREEK SMALL LETTER LAMDA +03BC # GREEK SMALL LETTER MU +03BD # GREEK SMALL LETTER NU +03BE # GREEK SMALL LETTER XI +03BF # GREEK SMALL LETTER OMICRON +03C0 # GREEK SMALL LETTER PI +03C1 # GREEK SMALL LETTER RHO +03C2 # GREEK SMALL LETTER FINAL SIGMA +03C3 # GREEK SMALL LETTER SIGMA +03C4 # GREEK SMALL LETTER TAU +03C5 # GREEK SMALL LETTER UPSILON +03C6 # GREEK SMALL LETTER PHI +03C7 # GREEK SMALL LETTER CHI +03C8 # GREEK SMALL LETTER PSI +03C9 # GREEK SMALL LETTER OMEGA +03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA +03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA +03CC # GREEK SMALL LETTER OMICRON WITH TONOS +03CD # GREEK SMALL LETTER UPSILON WITH TONOS +03CE # GREEK SMALL LETTER OMEGA WITH TONOS +03D0 β # GREEK BETA SYMBOL +03D1 θ # GREEK THETA SYMBOL +03D2 Υ # GREEK UPSILON WITH HOOK SYMBOL +03D5 φ # GREEK PHI SYMBOL +03D6 π # GREEK PI SYMBOL +03F0 κ # GREEK KAPPA SYMBOL +03F1 ρ # GREEK RHO SYMBOL +03F2 ς # GREEK LUNATE SIGMA SYMBOL +03F4 Θ # GREEK CAPITAL THETA SYMBOL +03F5 ε # GREEK LUNATE EPSILON SYMBOL +03F9 Σ # GREEK CAPITAL LUNATE SIGMA SYMBOL +0401 # CYRILLIC CAPITAL LETTER IO +0402 # CYRILLIC CAPITAL LETTER DJE +0403 # CYRILLIC CAPITAL LETTER GJE +0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405 # CYRILLIC CAPITAL LETTER DZE +0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407 # CYRILLIC CAPITAL LETTER YI +0408 # CYRILLIC CAPITAL LETTER JE +0409 # CYRILLIC CAPITAL LETTER LJE +040A # CYRILLIC CAPITAL LETTER NJE +040B # CYRILLIC CAPITAL LETTER TSHE +040C # CYRILLIC CAPITAL LETTER KJE +040E # CYRILLIC CAPITAL LETTER SHORT U +040F # CYRILLIC CAPITAL LETTER DZHE +0410 # CYRILLIC CAPITAL LETTER A +0411 # CYRILLIC CAPITAL LETTER BE +0412 # CYRILLIC CAPITAL LETTER VE +0413 # CYRILLIC CAPITAL LETTER GHE +0414 # CYRILLIC CAPITAL LETTER DE +0415 # CYRILLIC CAPITAL LETTER IE +0416 # CYRILLIC CAPITAL LETTER ZHE +0417 # CYRILLIC CAPITAL LETTER ZE +0418 # CYRILLIC CAPITAL LETTER I +0419 # CYRILLIC CAPITAL LETTER SHORT I +041A # CYRILLIC CAPITAL LETTER KA +041B # CYRILLIC CAPITAL LETTER EL +041C # CYRILLIC CAPITAL LETTER EM +041D # CYRILLIC CAPITAL LETTER EN +041E # CYRILLIC CAPITAL LETTER O +041F # CYRILLIC CAPITAL LETTER PE +0420 # CYRILLIC CAPITAL LETTER ER +0421 # CYRILLIC CAPITAL LETTER ES +0422 # CYRILLIC CAPITAL LETTER TE +0423 # CYRILLIC CAPITAL LETTER U +0424 # CYRILLIC CAPITAL LETTER EF +0425 # CYRILLIC CAPITAL LETTER HA +0426 # CYRILLIC CAPITAL LETTER TSE +0427 # CYRILLIC CAPITAL LETTER CHE +0428 # CYRILLIC CAPITAL LETTER SHA +0429 # CYRILLIC CAPITAL LETTER SHCHA +042A # CYRILLIC CAPITAL LETTER HARD SIGN +042B # CYRILLIC CAPITAL LETTER YERU +042C # CYRILLIC CAPITAL LETTER SOFT SIGN +042D # CYRILLIC CAPITAL LETTER E +042E # CYRILLIC CAPITAL LETTER YU +042F # CYRILLIC CAPITAL LETTER YA +0430 # CYRILLIC SMALL LETTER A +0431 # CYRILLIC SMALL LETTER BE +0432 # CYRILLIC SMALL LETTER VE +0433 # CYRILLIC SMALL LETTER GHE +0434 # CYRILLIC SMALL LETTER DE +0435 # CYRILLIC SMALL LETTER IE +0436 # CYRILLIC SMALL LETTER ZHE +0437 # CYRILLIC SMALL LETTER ZE +0438 # CYRILLIC SMALL LETTER I +0439 # CYRILLIC SMALL LETTER SHORT I +043A # CYRILLIC SMALL LETTER KA +043B # CYRILLIC SMALL LETTER EL +043C # CYRILLIC SMALL LETTER EM +043D # CYRILLIC SMALL LETTER EN +043E # CYRILLIC SMALL LETTER O +043F # CYRILLIC SMALL LETTER PE +0440 # CYRILLIC SMALL LETTER ER +0441 # CYRILLIC SMALL LETTER ES +0442 # CYRILLIC SMALL LETTER TE +0443 # CYRILLIC SMALL LETTER U +0444 # CYRILLIC SMALL LETTER EF +0445 # CYRILLIC SMALL LETTER HA +0446 # CYRILLIC SMALL LETTER TSE +0447 # CYRILLIC SMALL LETTER CHE +0448 # CYRILLIC SMALL LETTER SHA +0449 # CYRILLIC SMALL LETTER SHCHA +044A # CYRILLIC SMALL LETTER HARD SIGN +044B # CYRILLIC SMALL LETTER YERU +044C # CYRILLIC SMALL LETTER SOFT SIGN +044D # CYRILLIC SMALL LETTER E +044E # CYRILLIC SMALL LETTER YU +044F # CYRILLIC SMALL LETTER YA +0451 # CYRILLIC SMALL LETTER IO +0452 # CYRILLIC SMALL LETTER DJE +0453 # CYRILLIC SMALL LETTER GJE +0454 # CYRILLIC SMALL LETTER UKRAINIAN IE +0455 # CYRILLIC SMALL LETTER DZE +0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0457 # CYRILLIC SMALL LETTER YI +0458 # CYRILLIC SMALL LETTER JE +0459 # CYRILLIC SMALL LETTER LJE +045A # CYRILLIC SMALL LETTER NJE +045B # CYRILLIC SMALL LETTER TSHE +045C # CYRILLIC SMALL LETTER KJE +045E # CYRILLIC SMALL LETTER SHORT U +045F # CYRILLIC SMALL LETTER DZHE +0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN +0587 եւ # ARMENIAN SMALL LIGATURE ECH YIWN +05D0 # HEBREW LETTER ALEF +05D1 # HEBREW LETTER BET +05D2 # HEBREW LETTER GIMEL +05D3 # HEBREW LETTER DALET +05D4 # HEBREW LETTER HE +05D5 # HEBREW LETTER VAV +05D6 # HEBREW LETTER ZAYIN +05D7 # HEBREW LETTER HET +05D8 # HEBREW LETTER TET +05D9 # HEBREW LETTER YOD +05DA # HEBREW LETTER FINAL KAF +05DB # HEBREW LETTER KAF +05DC # HEBREW LETTER LAMED +05DD # HEBREW LETTER FINAL MEM +05DE # HEBREW LETTER MEM +05DF # HEBREW LETTER FINAL NUN +05E0 # HEBREW LETTER NUN +05E1 # HEBREW LETTER SAMEKH +05E2 # HEBREW LETTER AYIN +05E3 # HEBREW LETTER FINAL PE +05E4 # HEBREW LETTER PE +05E5 # HEBREW LETTER FINAL TSADI +05E6 # HEBREW LETTER TSADI +05E7 # HEBREW LETTER QOF +05E8 # HEBREW LETTER RESH +05E9 # HEBREW LETTER SHIN +05EA # HEBREW LETTER TAV +05F0 וו # HEBREW LIGATURE YIDDISH DOUBLE VAV +05F1 וי # HEBREW LIGATURE YIDDISH VAV YOD +05F2 יי # HEBREW LIGATURE YIDDISH DOUBLE YOD +0675 اٴ # ARABIC LETTER HIGH HAMZA ALEF +0676 وٴ # ARABIC LETTER HIGH HAMZA WAW +0677 ۇٴ # ARABIC LETTER U WITH HAMZA ABOVE +0678 يٴ # ARABIC LETTER HIGH HAMZA YEH +0E33 ํา # THAI CHARACTER SARA AM +0EB3 ໍາ # LAO VOWEL SIGN AM +0EDC ຫນ # LAO HO NO +0EDD ຫມ # LAO HO MO +0F77 ྲཱྀ # TIBETAN VOWEL SIGN VOCALIC RR +0F79 ླཱྀ # TIBETAN VOWEL SIGN VOCALIC LL +1E02 B # LATIN CAPITAL LETTER B WITH DOT ABOVE +1E03 b # LATIN SMALL LETTER B WITH DOT ABOVE +1E0A D # LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0B d # LATIN SMALL LETTER D WITH DOT ABOVE +1E1E F # LATIN CAPITAL LETTER F WITH DOT ABOVE +1E1F f # LATIN SMALL LETTER F WITH DOT ABOVE +1E40 M # LATIN CAPITAL LETTER M WITH DOT ABOVE +1E41 m # LATIN SMALL LETTER M WITH DOT ABOVE +1E56 P # LATIN CAPITAL LETTER P WITH DOT ABOVE +1E57 p # LATIN SMALL LETTER P WITH DOT ABOVE +1E60 S # LATIN CAPITAL LETTER S WITH DOT ABOVE +1E61 s # LATIN SMALL LETTER S WITH DOT ABOVE +1E6A T # LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6B t # LATIN SMALL LETTER T WITH DOT ABOVE +1E80 `W # LATIN CAPITAL LETTER W WITH GRAVE +1E81 `w # LATIN SMALL LETTER W WITH GRAVE +1E82 ´W # LATIN CAPITAL LETTER W WITH ACUTE +1E83 ´w # LATIN SMALL LETTER W WITH ACUTE +1E84 "W # LATIN CAPITAL LETTER W WITH DIAERESIS +1E85 "w # LATIN SMALL LETTER W WITH DIAERESIS +1E9A aʾ # LATIN SMALL LETTER A WITH RIGHT HALF RING +1EF2 `Y # LATIN CAPITAL LETTER Y WITH GRAVE +1EF3 `y # LATIN SMALL LETTER Y WITH GRAVE +2002 # EN SPACE +2003 # EM SPACE +2004 # THREE-PER-EM SPACE +2005 # FOUR-PER-EM SPACE +2006 # SIX-PER-EM SPACE +2008 # PUNCTUATION SPACE +2009 # THIN SPACE +200A # HAIR SPACE +2010 - # HYPHEN +2011 - # NON-BREAKING HYPHEN +2012 - # FIGURE DASH +2013 - # EN DASH +2014 - # EM DASH +2015 - # HORIZONTAL BAR +2016 # DOUBLE VERTICAL LINE +2017 # DOUBLE LOW LINE +2018 ' # LEFT SINGLE QUOTATION MARK +2019 ' # RIGHT SINGLE QUOTATION MARK +201A , # SINGLE LOW-9 QUOTATION MARK +201B ' # SINGLE HIGH-REVERSED-9 QUOTATION MARK +201C " # LEFT DOUBLE QUOTATION MARK +201D " # RIGHT DOUBLE QUOTATION MARK +201E " # DOUBLE LOW-9 QUOTATION MARK +201F " # DOUBLE HIGH-REVERSED-9 QUOTATION MARK +2020 + # DAGGER +2021 # DOUBLE DAGGER +2022 o # BULLET +2024 . # ONE DOT LEADER +2025 .. # TWO DOT LEADER +2026 ... # HORIZONTAL ELLIPSIS +2030 o/oo # PER MILLE SIGN +2032 ´ # PRIME +2033 ´´ # DOUBLE PRIME +2034 ´´´ # TRIPLE PRIME +2036 ‵‵ # REVERSED DOUBLE PRIME +2037 ‵‵‵ # REVERSED TRIPLE PRIME +2039 < # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A > # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +203C !! # DOUBLE EXCLAMATION MARK +203E # OVERLINE +2044 / # FRACTION SLASH +2047 ?? # DOUBLE QUESTION MARK +2048 ?! # QUESTION EXCLAMATION MARK +2049 !? # EXCLAMATION QUESTION MARK +2057 ´´´´ # QUADRUPLE PRIME +20A8 Rs # RUPEE SIGN +20AB Đồng # DONG SIGN +20AC EUR # EURO SIGN +2100 a/c # ACCOUNT OF +2101 a/s # ADDRESSED TO THE SUBJECT +2102 C # DOUBLE-STRUCK CAPITAL C +2103 °C # DEGREE CELSIUS +2105 c/o # CARE OF +2106 c/u # CADA UNA +2107 Ɛ # EULER CONSTANT +2109 °F # DEGREE FAHRENHEIT +210A g # SCRIPT SMALL G +210B H # SCRIPT CAPITAL H +210C H # BLACK-LETTER CAPITAL H +210D H # DOUBLE-STRUCK CAPITAL H +210E h # PLANCK CONSTANT +210F ħ # PLANCK CONSTANT OVER TWO PI +2110 I # SCRIPT CAPITAL I +2111 I # BLACK-LETTER CAPITAL I +2112 L # SCRIPT CAPITAL L +2113 l # SCRIPT SMALL L +2115 N # DOUBLE-STRUCK CAPITAL N +2116 No # NUMERO SIGN +2119 P # DOUBLE-STRUCK CAPITAL P +211A Q # DOUBLE-STRUCK CAPITAL Q +211B R # SCRIPT CAPITAL R +211C R # BLACK-LETTER CAPITAL R +211D R # DOUBLE-STRUCK CAPITAL R +2121 TEL # TELEPHONE SIGN +2122 TM # TRADE MARK SIGN +2124 Z # DOUBLE-STRUCK CAPITAL Z +2126 Ohm # OHM SIGN +2128 Z # BLACK-LETTER CAPITAL Z +212C B # SCRIPT CAPITAL B +212D C # BLACK-LETTER CAPITAL C +212E e # ESTIMATED SYMBOL +212F e # SCRIPT SMALL E +2130 E # SCRIPT CAPITAL E +2131 F # SCRIPT CAPITAL F +2133 M # SCRIPT CAPITAL M +2134 o # SCRIPT SMALL O +2135 א # ALEF SYMBOL +2136 ב # BET SYMBOL +2137 ג # GIMEL SYMBOL +2138 ד # DALET SYMBOL +2139 i # INFORMATION SOURCE +213B FAX # FACSIMILE SIGN +213D γ # DOUBLE-STRUCK SMALL GAMMA +213E Γ # DOUBLE-STRUCK CAPITAL GAMMA +213F Π # DOUBLE-STRUCK CAPITAL PI +2140 ∑ # DOUBLE-STRUCK N-ARY SUMMATION +2145 D # DOUBLE-STRUCK ITALIC CAPITAL D +2146 d # DOUBLE-STRUCK ITALIC SMALL D +2147 e # DOUBLE-STRUCK ITALIC SMALL E +2148 i # DOUBLE-STRUCK ITALIC SMALL I +2149 j # DOUBLE-STRUCK ITALIC SMALL J +2153 1⁄3 # VULGAR FRACTION ONE THIRD +2154 2⁄3 # VULGAR FRACTION TWO THIRDS +2155 1⁄5 # VULGAR FRACTION ONE FIFTH +2156 2⁄5 # VULGAR FRACTION TWO FIFTHS +2157 3⁄5 # VULGAR FRACTION THREE FIFTHS +2158 4⁄5 # VULGAR FRACTION FOUR FIFTHS +2159 1⁄6 # VULGAR FRACTION ONE SIXTH +215A 5⁄6 # VULGAR FRACTION FIVE SIXTHS +215B 1⁄8 # VULGAR FRACTION ONE EIGHTH +215C 3⁄8 # VULGAR FRACTION THREE EIGHTHS +215D 5⁄8 # VULGAR FRACTION FIVE EIGHTHS +215E 7⁄8 # VULGAR FRACTION SEVEN EIGHTHS +215F 1⁄ # FRACTION NUMERATOR ONE +2160 I # ROMAN NUMERAL ONE +2161 II # ROMAN NUMERAL TWO +2162 III # ROMAN NUMERAL THREE +2163 IV # ROMAN NUMERAL FOUR +2164 V # ROMAN NUMERAL FIVE +2165 VI # ROMAN NUMERAL SIX +2166 VII # ROMAN NUMERAL SEVEN +2167 VIII # ROMAN NUMERAL EIGHT +2168 IX # ROMAN NUMERAL NINE +2169 X # ROMAN NUMERAL TEN +216A XI # ROMAN NUMERAL ELEVEN +216B XII # ROMAN NUMERAL TWELVE +216C L # ROMAN NUMERAL FIFTY +216D C # ROMAN NUMERAL ONE HUNDRED +216E D # ROMAN NUMERAL FIVE HUNDRED +216F M # ROMAN NUMERAL ONE THOUSAND +2170 i # SMALL ROMAN NUMERAL ONE +2171 ii # SMALL ROMAN NUMERAL TWO +2172 iii # SMALL ROMAN NUMERAL THREE +2173 iv # SMALL ROMAN NUMERAL FOUR +2174 v # SMALL ROMAN NUMERAL FIVE +2175 vi # SMALL ROMAN NUMERAL SIX +2176 vii # SMALL ROMAN NUMERAL SEVEN +2177 viii # SMALL ROMAN NUMERAL EIGHT +2178 ix # SMALL ROMAN NUMERAL NINE +2179 x # SMALL ROMAN NUMERAL TEN +217A xi # SMALL ROMAN NUMERAL ELEVEN +217B xii # SMALL ROMAN NUMERAL TWELVE +217C l # SMALL ROMAN NUMERAL FIFTY +217D c # SMALL ROMAN NUMERAL ONE HUNDRED +217E d # SMALL ROMAN NUMERAL FIVE HUNDRED +217F m # SMALL ROMAN NUMERAL ONE THOUSAND +2190 <- # LEFTWARDS ARROW +2191 ^ # UPWARDS ARROW +2192 -> # RIGHTWARDS ARROW +2193 V # DOWNWARDS ARROW +2194 <-> # LEFT RIGHT ARROW +21D0 <= # LEFTWARDS DOUBLE ARROW +21D2 => # RIGHTWARDS DOUBLE ARROW +21D4 <=> # LEFT RIGHT DOUBLE ARROW +2212 - # MINUS SIGN +2215 / # DIVISION SLASH +2216 \ # SET MINUS +2217 * # ASTERISK OPERATOR +2219 • # BULLET OPERATOR +2223 | # DIVIDES +222C ∫∫ # DOUBLE INTEGRAL +222D ∫∫∫ # TRIPLE INTEGRAL +222F ∮∮ # SURFACE INTEGRAL +2230 ∮∮∮ # VOLUME INTEGRAL +2236 : # RATIO +223C ~ # TILDE OPERATOR +2260 /= # NOT EQUAL TO +2264 <= # LESS-THAN OR EQUAL TO +2265 >= # GREATER-THAN OR EQUAL TO +226A << # MUCH LESS-THAN +226B >> # MUCH GREATER-THAN +22C5 · # DOT OPERATOR +22D8 <<< # VERY MUCH LESS-THAN +22D9 >>> # VERY MUCH GREATER-THAN +22EF ··· # MIDLINE HORIZONTAL ELLIPSIS +2400 [NUL] # SYMBOL FOR NULL +2401 [SOH] # SYMBOL FOR START OF HEADING +2402 [STX] # SYMBOL FOR START OF TEXT +2403 [ETX] # SYMBOL FOR END OF TEXT +2404 [EOT] # SYMBOL FOR END OF TRANSMISSION +2405 [ENQ] # SYMBOL FOR ENQUIRY +2406 [ACK] # SYMBOL FOR ACKNOWLEDGE +2407 [BEL] # SYMBOL FOR BELL +2408 [BS] # SYMBOL FOR BACKSPACE +2409 [HT] # SYMBOL FOR HORIZONTAL TABULATION +240A [LF] # SYMBOL FOR LINE FEED +240B [VT] # SYMBOL FOR VERTICAL TABULATION +240C [FF] # SYMBOL FOR FORM FEED +240D [CR] # SYMBOL FOR CARRIAGE RETURN +240E [SO] # SYMBOL FOR SHIFT OUT +240F [SI] # SYMBOL FOR SHIFT IN +2410 [DLE] # SYMBOL FOR DATA LINK ESCAPE +2411 [DC1] # SYMBOL FOR DEVICE CONTROL ONE +2412 [DC2] # SYMBOL FOR DEVICE CONTROL TWO +2413 [DC3] # SYMBOL FOR DEVICE CONTROL THREE +2414 [DC4] # SYMBOL FOR DEVICE CONTROL FOUR +2415 [NAK] # SYMBOL FOR NEGATIVE ACKNOWLEDGE +2416 [SYN] # SYMBOL FOR SYNCHRONOUS IDLE +2417 [ETB] # SYMBOL FOR END OF TRANSMISSION BLOCK +2418 [CAN] # SYMBOL FOR CANCEL +2419 [EM] # SYMBOL FOR END OF MEDIUM +241A [SUB] # SYMBOL FOR SUBSTITUTE +241B [ESC] # SYMBOL FOR ESCAPE +241C [FS] # SYMBOL FOR FILE SEPARATOR +241D [GS] # SYMBOL FOR GROUP SEPARATOR +241E [RS] # SYMBOL FOR RECORD SEPARATOR +241F [US] # SYMBOL FOR UNIT SEPARATOR +2420 [SP] # SYMBOL FOR SPACE +2421 [DEL] # SYMBOL FOR DELETE +2424 [NL] # SYMBOL FOR NEWLINE +2460 (1) # CIRCLED DIGIT ONE +2461 (2) # CIRCLED DIGIT TWO +2462 (3) # CIRCLED DIGIT THREE +2463 (4) # CIRCLED DIGIT FOUR +2464 (5) # CIRCLED DIGIT FIVE +2465 (6) # CIRCLED DIGIT SIX +2466 (7) # CIRCLED DIGIT SEVEN +2467 (8) # CIRCLED DIGIT EIGHT +2468 (9) # CIRCLED DIGIT NINE +2469 (10) # CIRCLED NUMBER TEN +246A (11) # CIRCLED NUMBER ELEVEN +246B (12) # CIRCLED NUMBER TWELVE +246C (13) # CIRCLED NUMBER THIRTEEN +246D (14) # CIRCLED NUMBER FOURTEEN +246E (15) # CIRCLED NUMBER FIFTEEN +246F (16) # CIRCLED NUMBER SIXTEEN +2470 (17) # CIRCLED NUMBER SEVENTEEN +2471 (18) # CIRCLED NUMBER EIGHTEEN +2472 (19) # CIRCLED NUMBER NINETEEN +2473 (20) # CIRCLED NUMBER TWENTY +2474 (1) # PARENTHESIZED DIGIT ONE +2475 (2) # PARENTHESIZED DIGIT TWO +2476 (3) # PARENTHESIZED DIGIT THREE +2477 (4) # PARENTHESIZED DIGIT FOUR +2478 (5) # PARENTHESIZED DIGIT FIVE +2479 (6) # PARENTHESIZED DIGIT SIX +247A (7) # PARENTHESIZED DIGIT SEVEN +247B (8) # PARENTHESIZED DIGIT EIGHT +247C (9) # PARENTHESIZED DIGIT NINE +247D (10) # PARENTHESIZED NUMBER TEN +247E (11) # PARENTHESIZED NUMBER ELEVEN +247F (12) # PARENTHESIZED NUMBER TWELVE +2480 (13) # PARENTHESIZED NUMBER THIRTEEN +2481 (14) # PARENTHESIZED NUMBER FOURTEEN +2482 (15) # PARENTHESIZED NUMBER FIFTEEN +2483 (16) # PARENTHESIZED NUMBER SIXTEEN +2484 (17) # PARENTHESIZED NUMBER SEVENTEEN +2485 (18) # PARENTHESIZED NUMBER EIGHTEEN +2486 (19) # PARENTHESIZED NUMBER NINETEEN +2487 (20) # PARENTHESIZED NUMBER TWENTY +2488 1. # DIGIT ONE FULL STOP +2489 2. # DIGIT TWO FULL STOP +248A 3. # DIGIT THREE FULL STOP +248B 4. # DIGIT FOUR FULL STOP +248C 5. # DIGIT FIVE FULL STOP +248D 6. # DIGIT SIX FULL STOP +248E 7. # DIGIT SEVEN FULL STOP +248F 8. # DIGIT EIGHT FULL STOP +2490 9. # DIGIT NINE FULL STOP +2491 10. # NUMBER TEN FULL STOP +2492 11. # NUMBER ELEVEN FULL STOP +2493 12. # NUMBER TWELVE FULL STOP +2494 13. # NUMBER THIRTEEN FULL STOP +2495 14. # NUMBER FOURTEEN FULL STOP +2496 15. # NUMBER FIFTEEN FULL STOP +2497 16. # NUMBER SIXTEEN FULL STOP +2498 17. # NUMBER SEVENTEEN FULL STOP +2499 18. # NUMBER EIGHTEEN FULL STOP +249A 19. # NUMBER NINETEEN FULL STOP +249B 20. # NUMBER TWENTY FULL STOP +249C (a) # PARENTHESIZED LATIN SMALL LETTER A +249D (b) # PARENTHESIZED LATIN SMALL LETTER B +249E (c) # PARENTHESIZED LATIN SMALL LETTER C +249F (d) # PARENTHESIZED LATIN SMALL LETTER D +24A0 (e) # PARENTHESIZED LATIN SMALL LETTER E +24A1 (f) # PARENTHESIZED LATIN SMALL LETTER F +24A2 (g) # PARENTHESIZED LATIN SMALL LETTER G +24A3 (h) # PARENTHESIZED LATIN SMALL LETTER H +24A4 (i) # PARENTHESIZED LATIN SMALL LETTER I +24A5 (j) # PARENTHESIZED LATIN SMALL LETTER J +24A6 (k) # PARENTHESIZED LATIN SMALL LETTER K +24A7 (l) # PARENTHESIZED LATIN SMALL LETTER L +24A8 (m) # PARENTHESIZED LATIN SMALL LETTER M +24A9 (n) # PARENTHESIZED LATIN SMALL LETTER N +24AA (o) # PARENTHESIZED LATIN SMALL LETTER O +24AB (p) # PARENTHESIZED LATIN SMALL LETTER P +24AC (q) # PARENTHESIZED LATIN SMALL LETTER Q +24AD (r) # PARENTHESIZED LATIN SMALL LETTER R +24AE (s) # PARENTHESIZED LATIN SMALL LETTER S +24AF (t) # PARENTHESIZED LATIN SMALL LETTER T +24B0 (u) # PARENTHESIZED LATIN SMALL LETTER U +24B1 (v) # PARENTHESIZED LATIN SMALL LETTER V +24B2 (w) # PARENTHESIZED LATIN SMALL LETTER W +24B3 (x) # PARENTHESIZED LATIN SMALL LETTER X +24B4 (y) # PARENTHESIZED LATIN SMALL LETTER Y +24B5 (z) # PARENTHESIZED LATIN SMALL LETTER Z +24B6 (A) # CIRCLED LATIN CAPITAL LETTER A +24B7 (B) # CIRCLED LATIN CAPITAL LETTER B +24B8 (C) # CIRCLED LATIN CAPITAL LETTER C +24B9 (D) # CIRCLED LATIN CAPITAL LETTER D +24BA (E) # CIRCLED LATIN CAPITAL LETTER E +24BB (F) # CIRCLED LATIN CAPITAL LETTER F +24BC (G) # CIRCLED LATIN CAPITAL LETTER G +24BD (H) # CIRCLED LATIN CAPITAL LETTER H +24BE (I) # CIRCLED LATIN CAPITAL LETTER I +24BF (J) # CIRCLED LATIN CAPITAL LETTER J +24C0 (K) # CIRCLED LATIN CAPITAL LETTER K +24C1 (L) # CIRCLED LATIN CAPITAL LETTER L +24C2 (M) # CIRCLED LATIN CAPITAL LETTER M +24C3 (N) # CIRCLED LATIN CAPITAL LETTER N +24C4 (O) # CIRCLED LATIN CAPITAL LETTER O +24C5 (P) # CIRCLED LATIN CAPITAL LETTER P +24C6 (Q) # CIRCLED LATIN CAPITAL LETTER Q +24C7 (R) # CIRCLED LATIN CAPITAL LETTER R +24C8 (S) # CIRCLED LATIN CAPITAL LETTER S +24C9 (T) # CIRCLED LATIN CAPITAL LETTER T +24CA (U) # CIRCLED LATIN CAPITAL LETTER U +24CB (V) # CIRCLED LATIN CAPITAL LETTER V +24CC (W) # CIRCLED LATIN CAPITAL LETTER W +24CD (X) # CIRCLED LATIN CAPITAL LETTER X +24CE (Y) # CIRCLED LATIN CAPITAL LETTER Y +24CF (Z) # CIRCLED LATIN CAPITAL LETTER Z +24D0 (a) # CIRCLED LATIN SMALL LETTER A +24D1 (b) # CIRCLED LATIN SMALL LETTER B +24D2 (c) # CIRCLED LATIN SMALL LETTER C +24D3 (d) # CIRCLED LATIN SMALL LETTER D +24D4 (e) # CIRCLED LATIN SMALL LETTER E +24D5 (f) # CIRCLED LATIN SMALL LETTER F +24D6 (g) # CIRCLED LATIN SMALL LETTER G +24D7 (h) # CIRCLED LATIN SMALL LETTER H +24D8 (i) # CIRCLED LATIN SMALL LETTER I +24D9 (j) # CIRCLED LATIN SMALL LETTER J +24DA (k) # CIRCLED LATIN SMALL LETTER K +24DB (l) # CIRCLED LATIN SMALL LETTER L +24DC (m) # CIRCLED LATIN SMALL LETTER M +24DD (n) # CIRCLED LATIN SMALL LETTER N +24DE (o) # CIRCLED LATIN SMALL LETTER O +24DF (p) # CIRCLED LATIN SMALL LETTER P +24E0 (q) # CIRCLED LATIN SMALL LETTER Q +24E1 (r) # CIRCLED LATIN SMALL LETTER R +24E2 (s) # CIRCLED LATIN SMALL LETTER S +24E3 (t) # CIRCLED LATIN SMALL LETTER T +24E4 (u) # CIRCLED LATIN SMALL LETTER U +24E5 (v) # CIRCLED LATIN SMALL LETTER V +24E6 (w) # CIRCLED LATIN SMALL LETTER W +24E7 (x) # CIRCLED LATIN SMALL LETTER X +24E8 (y) # CIRCLED LATIN SMALL LETTER Y +24E9 (z) # CIRCLED LATIN SMALL LETTER Z +24EA (0) # CIRCLED DIGIT ZERO +2500 - # BOX DRAWINGS LIGHT HORIZONTAL +2502 | # BOX DRAWINGS LIGHT VERTICAL +250C + # BOX DRAWINGS LIGHT DOWN AND RIGHT +2510 + # BOX DRAWINGS LIGHT DOWN AND LEFT +2514 + # BOX DRAWINGS LIGHT UP AND RIGHT +2518 + # BOX DRAWINGS LIGHT UP AND LEFT +251C + # BOX DRAWINGS LIGHT VERTICAL AND RIGHT +2524 + # BOX DRAWINGS LIGHT VERTICAL AND LEFT +252C + # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +2534 + # BOX DRAWINGS LIGHT UP AND HORIZONTAL +253C + # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +2592 # MEDIUM SHADE +25AE # BLACK VERTICAL RECTANGLE +25C6 # BLACK DIAMOND +25E6 o # WHITE BULLET +266A # EIGHTH NOTE +2A0C ∫∫∫∫ # QUADRUPLE INTEGRAL OPERATOR +2A74 ::= # DOUBLE COLON EQUAL +2A75 == # TWO CONSECUTIVE EQUALS SIGNS +2A76 === # THREE CONSECUTIVE EQUALS SIGNS +2E9F 母 # CJK RADICAL MOTHER +2EF3 龟 # CJK RADICAL C-SIMPLIFIED TURTLE +2F00 一 # KANGXI RADICAL ONE +2F01 丨 # KANGXI RADICAL LINE +2F02 丶 # KANGXI RADICAL DOT +2F03 丿 # KANGXI RADICAL SLASH +2F04 乙 # KANGXI RADICAL SECOND +2F05 亅 # KANGXI RADICAL HOOK +2F06 二 # KANGXI RADICAL TWO +2F07 亠 # KANGXI RADICAL LID +2F08 人 # KANGXI RADICAL MAN +2F09 儿 # KANGXI RADICAL LEGS +2F0A 入 # KANGXI RADICAL ENTER +2F0B 八 # KANGXI RADICAL EIGHT +2F0C 冂 # KANGXI RADICAL DOWN BOX +2F0D 冖 # KANGXI RADICAL COVER +2F0E 冫 # KANGXI RADICAL ICE +2F0F 几 # KANGXI RADICAL TABLE +2F10 凵 # KANGXI RADICAL OPEN BOX +2F11 刀 # KANGXI RADICAL KNIFE +2F12 力 # KANGXI RADICAL POWER +2F13 勹 # KANGXI RADICAL WRAP +2F14 匕 # KANGXI RADICAL SPOON +2F15 匚 # KANGXI RADICAL RIGHT OPEN BOX +2F16 匸 # KANGXI RADICAL HIDING ENCLOSURE +2F17 十 # KANGXI RADICAL TEN +2F18 卜 # KANGXI RADICAL DIVINATION +2F19 卩 # KANGXI RADICAL SEAL +2F1A 厂 # KANGXI RADICAL CLIFF +2F1B 厶 # KANGXI RADICAL PRIVATE +2F1C 又 # KANGXI RADICAL AGAIN +2F1D 口 # KANGXI RADICAL MOUTH +2F1E 囗 # KANGXI RADICAL ENCLOSURE +2F1F 土 # KANGXI RADICAL EARTH +2F20 士 # KANGXI RADICAL SCHOLAR +2F21 夂 # KANGXI RADICAL GO +2F22 夊 # KANGXI RADICAL GO SLOWLY +2F23 夕 # KANGXI RADICAL EVENING +2F24 大 # KANGXI RADICAL BIG +2F25 女 # KANGXI RADICAL WOMAN +2F26 子 # KANGXI RADICAL CHILD +2F27 宀 # KANGXI RADICAL ROOF +2F28 寸 # KANGXI RADICAL INCH +2F29 小 # KANGXI RADICAL SMALL +2F2A 尢 # KANGXI RADICAL LAME +2F2B 尸 # KANGXI RADICAL CORPSE +2F2C 屮 # KANGXI RADICAL SPROUT +2F2D 山 # KANGXI RADICAL MOUNTAIN +2F2E 巛 # KANGXI RADICAL RIVER +2F2F 工 # KANGXI RADICAL WORK +2F30 己 # KANGXI RADICAL ONESELF +2F31 巾 # KANGXI RADICAL TURBAN +2F32 干 # KANGXI RADICAL DRY +2F33 幺 # KANGXI RADICAL SHORT THREAD +2F34 广 # KANGXI RADICAL DOTTED CLIFF +2F35 廴 # KANGXI RADICAL LONG STRIDE +2F36 廾 # KANGXI RADICAL TWO HANDS +2F37 弋 # KANGXI RADICAL SHOOT +2F38 弓 # KANGXI RADICAL BOW +2F39 彐 # KANGXI RADICAL SNOUT +2F3A 彡 # KANGXI RADICAL BRISTLE +2F3B 彳 # KANGXI RADICAL STEP +2F3C 心 # KANGXI RADICAL HEART +2F3D 戈 # KANGXI RADICAL HALBERD +2F3E 戶 # KANGXI RADICAL DOOR +2F3F 手 # KANGXI RADICAL HAND +2F40 支 # KANGXI RADICAL BRANCH +2F41 攴 # KANGXI RADICAL RAP +2F42 文 # KANGXI RADICAL SCRIPT +2F43 斗 # KANGXI RADICAL DIPPER +2F44 斤 # KANGXI RADICAL AXE +2F45 方 # KANGXI RADICAL SQUARE +2F46 无 # KANGXI RADICAL NOT +2F47 日 # KANGXI RADICAL SUN +2F48 曰 # KANGXI RADICAL SAY +2F49 月 # KANGXI RADICAL MOON +2F4A 木 # KANGXI RADICAL TREE +2F4B 欠 # KANGXI RADICAL LACK +2F4C 止 # KANGXI RADICAL STOP +2F4D 歹 # KANGXI RADICAL DEATH +2F4E 殳 # KANGXI RADICAL WEAPON +2F4F 毋 # KANGXI RADICAL DO NOT +2F50 比 # KANGXI RADICAL COMPARE +2F51 毛 # KANGXI RADICAL FUR +2F52 氏 # KANGXI RADICAL CLAN +2F53 气 # KANGXI RADICAL STEAM +2F54 水 # KANGXI RADICAL WATER +2F55 火 # KANGXI RADICAL FIRE +2F56 爪 # KANGXI RADICAL CLAW +2F57 父 # KANGXI RADICAL FATHER +2F58 爻 # KANGXI RADICAL DOUBLE X +2F59 爿 # KANGXI RADICAL HALF TREE TRUNK +2F5A 片 # KANGXI RADICAL SLICE +2F5B 牙 # KANGXI RADICAL FANG +2F5C 牛 # KANGXI RADICAL COW +2F5D 犬 # KANGXI RADICAL DOG +2F5E 玄 # KANGXI RADICAL PROFOUND +2F5F 玉 # KANGXI RADICAL JADE +2F60 瓜 # KANGXI RADICAL MELON +2F61 瓦 # KANGXI RADICAL TILE +2F62 甘 # KANGXI RADICAL SWEET +2F63 生 # KANGXI RADICAL LIFE +2F64 用 # KANGXI RADICAL USE +2F65 田 # KANGXI RADICAL FIELD +2F66 疋 # KANGXI RADICAL BOLT OF CLOTH +2F67 疒 # KANGXI RADICAL SICKNESS +2F68 癶 # KANGXI RADICAL DOTTED TENT +2F69 白 # KANGXI RADICAL WHITE +2F6A 皮 # KANGXI RADICAL SKIN +2F6B 皿 # KANGXI RADICAL DISH +2F6C 目 # KANGXI RADICAL EYE +2F6D 矛 # KANGXI RADICAL SPEAR +2F6E 矢 # KANGXI RADICAL ARROW +2F6F 石 # KANGXI RADICAL STONE +2F70 示 # KANGXI RADICAL SPIRIT +2F71 禸 # KANGXI RADICAL TRACK +2F72 禾 # KANGXI RADICAL GRAIN +2F73 穴 # KANGXI RADICAL CAVE +2F74 立 # KANGXI RADICAL STAND +2F75 竹 # KANGXI RADICAL BAMBOO +2F76 米 # KANGXI RADICAL RICE +2F77 糸 # KANGXI RADICAL SILK +2F78 缶 # KANGXI RADICAL JAR +2F79 网 # KANGXI RADICAL NET +2F7A 羊 # KANGXI RADICAL SHEEP +2F7B 羽 # KANGXI RADICAL FEATHER +2F7C 老 # KANGXI RADICAL OLD +2F7D 而 # KANGXI RADICAL AND +2F7E 耒 # KANGXI RADICAL PLOW +2F7F 耳 # KANGXI RADICAL EAR +2F80 聿 # KANGXI RADICAL BRUSH +2F81 肉 # KANGXI RADICAL MEAT +2F82 臣 # KANGXI RADICAL MINISTER +2F83 自 # KANGXI RADICAL SELF +2F84 至 # KANGXI RADICAL ARRIVE +2F85 臼 # KANGXI RADICAL MORTAR +2F86 舌 # KANGXI RADICAL TONGUE +2F87 舛 # KANGXI RADICAL OPPOSE +2F88 舟 # KANGXI RADICAL BOAT +2F89 艮 # KANGXI RADICAL STOPPING +2F8A 色 # KANGXI RADICAL COLOR +2F8B 艸 # KANGXI RADICAL GRASS +2F8C 虍 # KANGXI RADICAL TIGER +2F8D 虫 # KANGXI RADICAL INSECT +2F8E 血 # KANGXI RADICAL BLOOD +2F8F 行 # KANGXI RADICAL WALK ENCLOSURE +2F90 衣 # KANGXI RADICAL CLOTHES +2F91 襾 # KANGXI RADICAL WEST +2F92 見 # KANGXI RADICAL SEE +2F93 角 # KANGXI RADICAL HORN +2F94 言 # KANGXI RADICAL SPEECH +2F95 谷 # KANGXI RADICAL VALLEY +2F96 豆 # KANGXI RADICAL BEAN +2F97 豕 # KANGXI RADICAL PIG +2F98 豸 # KANGXI RADICAL BADGER +2F99 貝 # KANGXI RADICAL SHELL +2F9A 赤 # KANGXI RADICAL RED +2F9B 走 # KANGXI RADICAL RUN +2F9C 足 # KANGXI RADICAL FOOT +2F9D 身 # KANGXI RADICAL BODY +2F9E 車 # KANGXI RADICAL CART +2F9F 辛 # KANGXI RADICAL BITTER +2FA0 辰 # KANGXI RADICAL MORNING +2FA1 辵 # KANGXI RADICAL WALK +2FA2 邑 # KANGXI RADICAL CITY +2FA3 酉 # KANGXI RADICAL WINE +2FA4 釆 # KANGXI RADICAL DISTINGUISH +2FA5 里 # KANGXI RADICAL VILLAGE +2FA6 金 # KANGXI RADICAL GOLD +2FA7 長 # KANGXI RADICAL LONG +2FA8 門 # KANGXI RADICAL GATE +2FA9 阜 # KANGXI RADICAL MOUND +2FAA 隶 # KANGXI RADICAL SLAVE +2FAB 隹 # KANGXI RADICAL SHORT TAILED BIRD +2FAC 雨 # KANGXI RADICAL RAIN +2FAD 靑 # KANGXI RADICAL BLUE +2FAE 非 # KANGXI RADICAL WRONG +2FAF 面 # KANGXI RADICAL FACE +2FB0 革 # KANGXI RADICAL LEATHER +2FB1 韋 # KANGXI RADICAL TANNED LEATHER +2FB2 韭 # KANGXI RADICAL LEEK +2FB3 音 # KANGXI RADICAL SOUND +2FB4 頁 # KANGXI RADICAL LEAF +2FB5 風 # KANGXI RADICAL WIND +2FB6 飛 # KANGXI RADICAL FLY +2FB7 食 # KANGXI RADICAL EAT +2FB8 首 # KANGXI RADICAL HEAD +2FB9 香 # KANGXI RADICAL FRAGRANT +2FBA 馬 # KANGXI RADICAL HORSE +2FBB 骨 # KANGXI RADICAL BONE +2FBC 高 # KANGXI RADICAL TALL +2FBD 髟 # KANGXI RADICAL HAIR +2FBE 鬥 # KANGXI RADICAL FIGHT +2FBF 鬯 # KANGXI RADICAL SACRIFICIAL WINE +2FC0 鬲 # KANGXI RADICAL CAULDRON +2FC1 鬼 # KANGXI RADICAL GHOST +2FC2 魚 # KANGXI RADICAL FISH +2FC3 鳥 # KANGXI RADICAL BIRD +2FC4 鹵 # KANGXI RADICAL SALT +2FC5 鹿 # KANGXI RADICAL DEER +2FC6 麥 # KANGXI RADICAL WHEAT +2FC7 麻 # KANGXI RADICAL HEMP +2FC8 黃 # KANGXI RADICAL YELLOW +2FC9 黍 # KANGXI RADICAL MILLET +2FCA 黑 # KANGXI RADICAL BLACK +2FCB 黹 # KANGXI RADICAL EMBROIDERY +2FCC 黽 # KANGXI RADICAL FROG +2FCD 鼎 # KANGXI RADICAL TRIPOD +2FCE 鼓 # KANGXI RADICAL DRUM +2FCF 鼠 # KANGXI RADICAL RAT +2FD0 鼻 # KANGXI RADICAL NOSE +2FD1 齊 # KANGXI RADICAL EVEN +2FD2 齒 # KANGXI RADICAL TOOTH +2FD3 龍 # KANGXI RADICAL DRAGON +2FD4 龜 # KANGXI RADICAL TURTLE +2FD5 龠 # KANGXI RADICAL FLUTE +3000 # IDEOGRAPHIC SPACE +3036 〒 # CIRCLED POSTAL MARK +3038 十 # HANGZHOU NUMERAL TEN +3039 卄 # HANGZHOU NUMERAL TWENTY +303A 卅 # HANGZHOU NUMERAL THIRTY +3041 あ # HIRAGANA LETTER SMALL A +3043 い # HIRAGANA LETTER SMALL I +3045 う # HIRAGANA LETTER SMALL U +3047 え # HIRAGANA LETTER SMALL E +3049 お # HIRAGANA LETTER SMALL O +3063 つ # HIRAGANA LETTER SMALL TU +3083 や # HIRAGANA LETTER SMALL YA +3085 ゆ # HIRAGANA LETTER SMALL YU +3087 よ # HIRAGANA LETTER SMALL YO +308E わ # HIRAGANA LETTER SMALL WA +3095 か # HIRAGANA LETTER SMALL KA +3096 け # HIRAGANA LETTER SMALL KE +309B ゙ # KATAKANA-HIRAGANA VOICED SOUND MARK +309C ゚ # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +30A0 = # KATAKANA-HIRAGANA DOUBLE HYPHEN +30A1 ア # KATAKANA LETTER SMALL A +30A3 イ # KATAKANA LETTER SMALL I +30A5 ウ # KATAKANA LETTER SMALL U +30A7 エ # KATAKANA LETTER SMALL E +30A9 オ # KATAKANA LETTER SMALL O +30C3 ツ # KATAKANA LETTER SMALL TU +30E3 ヤ # KATAKANA LETTER SMALL YA +30E5 ユ # KATAKANA LETTER SMALL YU +30E7 ヨ # KATAKANA LETTER SMALL YO +30EE ワ # KATAKANA LETTER SMALL WA +30F5 カ # KATAKANA LETTER SMALL KA +30F6 ケ # KATAKANA LETTER SMALL KE +3131 ᄀ # HANGUL LETTER KIYEOK +3132 ᄁ # HANGUL LETTER SSANGKIYEOK +3133 ᆪ # HANGUL LETTER KIYEOK-SIOS +3134 ᄂ # HANGUL LETTER NIEUN +3135 ᆬ # HANGUL LETTER NIEUN-CIEUC +3136 ᆭ # HANGUL LETTER NIEUN-HIEUH +3137 ᄃ # HANGUL LETTER TIKEUT +3138 ᄄ # HANGUL LETTER SSANGTIKEUT +3139 ᄅ # HANGUL LETTER RIEUL +313A ᆰ # HANGUL LETTER RIEUL-KIYEOK +313B ᆱ # HANGUL LETTER RIEUL-MIEUM +313C ᆲ # HANGUL LETTER RIEUL-PIEUP +313D ᆳ # HANGUL LETTER RIEUL-SIOS +313E ᆴ # HANGUL LETTER RIEUL-THIEUTH +313F ᆵ # HANGUL LETTER RIEUL-PHIEUPH +3140 ᄚ # HANGUL LETTER RIEUL-HIEUH +3141 ᄆ # HANGUL LETTER MIEUM +3142 ᄇ # HANGUL LETTER PIEUP +3143 ᄈ # HANGUL LETTER SSANGPIEUP +3144 ᄡ # HANGUL LETTER PIEUP-SIOS +3145 ᄉ # HANGUL LETTER SIOS +3146 ᄊ # HANGUL LETTER SSANGSIOS +3147 ᄋ # HANGUL LETTER IEUNG +3148 ᄌ # HANGUL LETTER CIEUC +3149 ᄍ # HANGUL LETTER SSANGCIEUC +314A ᄎ # HANGUL LETTER CHIEUCH +314B ᄏ # HANGUL LETTER KHIEUKH +314C ᄐ # HANGUL LETTER THIEUTH +314D ᄑ # HANGUL LETTER PHIEUPH +314E ᄒ # HANGUL LETTER HIEUH +314F ᅡ # HANGUL LETTER A +3150 ᅢ # HANGUL LETTER AE +3151 ᅣ # HANGUL LETTER YA +3152 ᅤ # HANGUL LETTER YAE +3153 ᅥ # HANGUL LETTER EO +3154 ᅦ # HANGUL LETTER E +3155 ᅧ # HANGUL LETTER YEO +3156 ᅨ # HANGUL LETTER YE +3157 ᅩ # HANGUL LETTER O +3158 ᅪ # HANGUL LETTER WA +3159 ᅫ # HANGUL LETTER WAE +315A ᅬ # HANGUL LETTER OE +315B ᅭ # HANGUL LETTER YO +315C ᅮ # HANGUL LETTER U +315D ᅯ # HANGUL LETTER WEO +315E ᅰ # HANGUL LETTER WE +315F ᅱ # HANGUL LETTER WI +3160 ᅲ # HANGUL LETTER YU +3161 ᅳ # HANGUL LETTER EU +3162 ᅴ # HANGUL LETTER YI +3163 ᅵ # HANGUL LETTER I +3164 ᅠ # HANGUL FILLER +3165 ᄔ # HANGUL LETTER SSANGNIEUN +3166 ᄕ # HANGUL LETTER NIEUN-TIKEUT +3167 ᇇ # HANGUL LETTER NIEUN-SIOS +3168 ᇈ # HANGUL LETTER NIEUN-PANSIOS +3169 ᇌ # HANGUL LETTER RIEUL-KIYEOK-SIOS +316A ᇎ # HANGUL LETTER RIEUL-TIKEUT +316B ᇓ # HANGUL LETTER RIEUL-PIEUP-SIOS +316C ᇗ # HANGUL LETTER RIEUL-PANSIOS +316D ᇙ # HANGUL LETTER RIEUL-YEORINHIEUH +316E ᄜ # HANGUL LETTER MIEUM-PIEUP +316F ᇝ # HANGUL LETTER MIEUM-SIOS +3170 ᇟ # HANGUL LETTER MIEUM-PANSIOS +3171 ᄝ # HANGUL LETTER KAPYEOUNMIEUM +3172 ᄞ # HANGUL LETTER PIEUP-KIYEOK +3173 ᄠ # HANGUL LETTER PIEUP-TIKEUT +3174 ᄢ # HANGUL LETTER PIEUP-SIOS-KIYEOK +3175 ᄣ # HANGUL LETTER PIEUP-SIOS-TIKEUT +3176 ᄧ # HANGUL LETTER PIEUP-CIEUC +3177 ᄩ # HANGUL LETTER PIEUP-THIEUTH +3178 ᄫ # HANGUL LETTER KAPYEOUNPIEUP +3179 ᄬ # HANGUL LETTER KAPYEOUNSSANGPIEUP +317A ᄭ # HANGUL LETTER SIOS-KIYEOK +317B ᄮ # HANGUL LETTER SIOS-NIEUN +317C ᄯ # HANGUL LETTER SIOS-TIKEUT +317D ᄲ # HANGUL LETTER SIOS-PIEUP +317E ᄶ # HANGUL LETTER SIOS-CIEUC +317F ᅀ # HANGUL LETTER PANSIOS +3180 ᅇ # HANGUL LETTER SSANGIEUNG +3181 ᅌ # HANGUL LETTER YESIEUNG +3182 ᇱ # HANGUL LETTER YESIEUNG-SIOS +3183 ᇲ # HANGUL LETTER YESIEUNG-PANSIOS +3184 ᅗ # HANGUL LETTER KAPYEOUNPHIEUPH +3185 ᅘ # HANGUL LETTER SSANGHIEUH +3186 ᅙ # HANGUL LETTER YEORINHIEUH +3187 ᆄ # HANGUL LETTER YO-YA +3188 ᆅ # HANGUL LETTER YO-YAE +3189 ᆈ # HANGUL LETTER YO-I +318A ᆑ # HANGUL LETTER YU-YEO +318B ᆒ # HANGUL LETTER YU-YE +318C ᆔ # HANGUL LETTER YU-I +318D ᆞ # HANGUL LETTER ARAEA +318E ᆡ # HANGUL LETTER ARAEAE +31F0 ク # KATAKANA LETTER SMALL KU +31F1 シ # KATAKANA LETTER SMALL SI +31F2 ス # KATAKANA LETTER SMALL SU +31F3 ト # KATAKANA LETTER SMALL TO +31F4 ヌ # KATAKANA LETTER SMALL NU +31F5 ハ # KATAKANA LETTER SMALL HA +31F6 ヒ # KATAKANA LETTER SMALL HI +31F7 フ # KATAKANA LETTER SMALL HU +31F8 ヘ # KATAKANA LETTER SMALL HE +31F9 ホ # KATAKANA LETTER SMALL HO +31FA ム # KATAKANA LETTER SMALL MU +31FB ラ # KATAKANA LETTER SMALL RA +31FC リ # KATAKANA LETTER SMALL RI +31FD ル # KATAKANA LETTER SMALL RU +31FE レ # KATAKANA LETTER SMALL RE +31FF ロ # KATAKANA LETTER SMALL RO +3200 (ᄀ) # PARENTHESIZED HANGUL KIYEOK +3201 (ᄂ) # PARENTHESIZED HANGUL NIEUN +3202 (ᄃ) # PARENTHESIZED HANGUL TIKEUT +3203 (ᄅ) # PARENTHESIZED HANGUL RIEUL +3204 (ᄆ) # PARENTHESIZED HANGUL MIEUM +3205 (ᄇ) # PARENTHESIZED HANGUL PIEUP +3206 (ᄉ) # PARENTHESIZED HANGUL SIOS +3207 (ᄋ) # PARENTHESIZED HANGUL IEUNG +3208 (ᄌ) # PARENTHESIZED HANGUL CIEUC +3209 (ᄎ) # PARENTHESIZED HANGUL CHIEUCH +320A (ᄏ) # PARENTHESIZED HANGUL KHIEUKH +320B (ᄐ) # PARENTHESIZED HANGUL THIEUTH +320C (ᄑ) # PARENTHESIZED HANGUL PHIEUPH +320D (ᄒ) # PARENTHESIZED HANGUL HIEUH +320E (가) # PARENTHESIZED HANGUL KIYEOK A +320F (나) # PARENTHESIZED HANGUL NIEUN A +3210 (다) # PARENTHESIZED HANGUL TIKEUT A +3211 (라) # PARENTHESIZED HANGUL RIEUL A +3212 (마) # PARENTHESIZED HANGUL MIEUM A +3213 (바) # PARENTHESIZED HANGUL PIEUP A +3214 (사) # PARENTHESIZED HANGUL SIOS A +3215 (아) # PARENTHESIZED HANGUL IEUNG A +3216 (자) # PARENTHESIZED HANGUL CIEUC A +3217 (차) # PARENTHESIZED HANGUL CHIEUCH A +3218 (카) # PARENTHESIZED HANGUL KHIEUKH A +3219 (타) # PARENTHESIZED HANGUL THIEUTH A +321A (파) # PARENTHESIZED HANGUL PHIEUPH A +321B (하) # PARENTHESIZED HANGUL HIEUH A +321C (주) # PARENTHESIZED HANGUL CIEUC U +321D (오전) # PARENTHESIZED KOREAN CHARACTER OJEON +321E (오후) # PARENTHESIZED KOREAN CHARACTER O HU +3220 (一) # PARENTHESIZED IDEOGRAPH ONE +3221 (二) # PARENTHESIZED IDEOGRAPH TWO +3222 (三) # PARENTHESIZED IDEOGRAPH THREE +3223 (四) # PARENTHESIZED IDEOGRAPH FOUR +3224 (五) # PARENTHESIZED IDEOGRAPH FIVE +3225 (六) # PARENTHESIZED IDEOGRAPH SIX +3226 (七) # PARENTHESIZED IDEOGRAPH SEVEN +3227 (八) # PARENTHESIZED IDEOGRAPH EIGHT +3228 (九) # PARENTHESIZED IDEOGRAPH NINE +3229 (十) # PARENTHESIZED IDEOGRAPH TEN +322A (月) # PARENTHESIZED IDEOGRAPH MOON +322B (火) # PARENTHESIZED IDEOGRAPH FIRE +322C (水) # PARENTHESIZED IDEOGRAPH WATER +322D (木) # PARENTHESIZED IDEOGRAPH WOOD +322E (金) # PARENTHESIZED IDEOGRAPH METAL +322F (土) # PARENTHESIZED IDEOGRAPH EARTH +3230 (日) # PARENTHESIZED IDEOGRAPH SUN +3231 (株) # PARENTHESIZED IDEOGRAPH STOCK +3232 (有) # PARENTHESIZED IDEOGRAPH HAVE +3233 (社) # PARENTHESIZED IDEOGRAPH SOCIETY +3234 (名) # PARENTHESIZED IDEOGRAPH NAME +3235 (特) # PARENTHESIZED IDEOGRAPH SPECIAL +3236 (財) # PARENTHESIZED IDEOGRAPH FINANCIAL +3237 (祝) # PARENTHESIZED IDEOGRAPH CONGRATULATION +3238 (労) # PARENTHESIZED IDEOGRAPH LABOR +3239 (代) # PARENTHESIZED IDEOGRAPH REPRESENT +323A (呼) # PARENTHESIZED IDEOGRAPH CALL +323B (学) # PARENTHESIZED IDEOGRAPH STUDY +323C (監) # PARENTHESIZED IDEOGRAPH SUPERVISE +323D (企) # PARENTHESIZED IDEOGRAPH ENTERPRISE +323E (資) # PARENTHESIZED IDEOGRAPH RESOURCE +323F (協) # PARENTHESIZED IDEOGRAPH ALLIANCE +3240 (祭) # PARENTHESIZED IDEOGRAPH FESTIVAL +3241 (休) # PARENTHESIZED IDEOGRAPH REST +3242 (自) # PARENTHESIZED IDEOGRAPH SELF +3243 (至) # PARENTHESIZED IDEOGRAPH REACH +3250 PTE # PARTNERSHIP SIGN +3251 (21) # CIRCLED NUMBER TWENTY ONE +3252 (22) # CIRCLED NUMBER TWENTY TWO +3253 (23) # CIRCLED NUMBER TWENTY THREE +3254 (24) # CIRCLED NUMBER TWENTY FOUR +3255 (25) # CIRCLED NUMBER TWENTY FIVE +3256 (26) # CIRCLED NUMBER TWENTY SIX +3257 (27) # CIRCLED NUMBER TWENTY SEVEN +3258 (28) # CIRCLED NUMBER TWENTY EIGHT +3259 (29) # CIRCLED NUMBER TWENTY NINE +325A (30) # CIRCLED NUMBER THIRTY +325B (31) # CIRCLED NUMBER THIRTY ONE +325C (32) # CIRCLED NUMBER THIRTY TWO +325D (33) # CIRCLED NUMBER THIRTY THREE +325E (34) # CIRCLED NUMBER THIRTY FOUR +325F (35) # CIRCLED NUMBER THIRTY FIVE +3260 (ᄀ) # CIRCLED HANGUL KIYEOK +3261 (ᄂ) # CIRCLED HANGUL NIEUN +3262 (ᄃ) # CIRCLED HANGUL TIKEUT +3263 (ᄅ) # CIRCLED HANGUL RIEUL +3264 (ᄆ) # CIRCLED HANGUL MIEUM +3265 (ᄇ) # CIRCLED HANGUL PIEUP +3266 (ᄉ) # CIRCLED HANGUL SIOS +3267 (ᄋ) # CIRCLED HANGUL IEUNG +3268 (ᄌ) # CIRCLED HANGUL CIEUC +3269 (ᄎ) # CIRCLED HANGUL CHIEUCH +326A (ᄏ) # CIRCLED HANGUL KHIEUKH +326B (ᄐ) # CIRCLED HANGUL THIEUTH +326C (ᄑ) # CIRCLED HANGUL PHIEUPH +326D (ᄒ) # CIRCLED HANGUL HIEUH +326E (가) # CIRCLED HANGUL KIYEOK A +326F (나) # CIRCLED HANGUL NIEUN A +3270 (다) # CIRCLED HANGUL TIKEUT A +3271 (라) # CIRCLED HANGUL RIEUL A +3272 (마) # CIRCLED HANGUL MIEUM A +3273 (바) # CIRCLED HANGUL PIEUP A +3274 (사) # CIRCLED HANGUL SIOS A +3275 (아) # CIRCLED HANGUL IEUNG A +3276 (자) # CIRCLED HANGUL CIEUC A +3277 (차) # CIRCLED HANGUL CHIEUCH A +3278 (카) # CIRCLED HANGUL KHIEUKH A +3279 (타) # CIRCLED HANGUL THIEUTH A +327A (파) # CIRCLED HANGUL PHIEUPH A +327B (하) # CIRCLED HANGUL HIEUH A +327C (참고) # CIRCLED KOREAN CHARACTER CHAMKO +327D (주의) # CIRCLED KOREAN CHARACTER JUEUI +3280 (一) # CIRCLED IDEOGRAPH ONE +3281 (二) # CIRCLED IDEOGRAPH TWO +3282 (三) # CIRCLED IDEOGRAPH THREE +3283 (四) # CIRCLED IDEOGRAPH FOUR +3284 (五) # CIRCLED IDEOGRAPH FIVE +3285 (六) # CIRCLED IDEOGRAPH SIX +3286 (七) # CIRCLED IDEOGRAPH SEVEN +3287 (八) # CIRCLED IDEOGRAPH EIGHT +3288 (九) # CIRCLED IDEOGRAPH NINE +3289 (十) # CIRCLED IDEOGRAPH TEN +328A (月) # CIRCLED IDEOGRAPH MOON +328B (火) # CIRCLED IDEOGRAPH FIRE +328C (水) # CIRCLED IDEOGRAPH WATER +328D (木) # CIRCLED IDEOGRAPH WOOD +328E (金) # CIRCLED IDEOGRAPH METAL +328F (土) # CIRCLED IDEOGRAPH EARTH +3290 (日) # CIRCLED IDEOGRAPH SUN +3291 (株) # CIRCLED IDEOGRAPH STOCK +3292 (有) # CIRCLED IDEOGRAPH HAVE +3293 (社) # CIRCLED IDEOGRAPH SOCIETY +3294 (名) # CIRCLED IDEOGRAPH NAME +3295 (特) # CIRCLED IDEOGRAPH SPECIAL +3296 (財) # CIRCLED IDEOGRAPH FINANCIAL +3297 (祝) # CIRCLED IDEOGRAPH CONGRATULATION +3298 (労) # CIRCLED IDEOGRAPH LABOR +3299 (秘) # CIRCLED IDEOGRAPH SECRET +329A (男) # CIRCLED IDEOGRAPH MALE +329B (女) # CIRCLED IDEOGRAPH FEMALE +329C (適) # CIRCLED IDEOGRAPH SUITABLE +329D (優) # CIRCLED IDEOGRAPH EXCELLENT +329E (印) # CIRCLED IDEOGRAPH PRINT +329F (注) # CIRCLED IDEOGRAPH ATTENTION +32A0 (項) # CIRCLED IDEOGRAPH ITEM +32A1 (休) # CIRCLED IDEOGRAPH REST +32A2 (写) # CIRCLED IDEOGRAPH COPY +32A3 (正) # CIRCLED IDEOGRAPH CORRECT +32A4 (上) # CIRCLED IDEOGRAPH HIGH +32A5 (中) # CIRCLED IDEOGRAPH CENTRE +32A6 (下) # CIRCLED IDEOGRAPH LOW +32A7 (左) # CIRCLED IDEOGRAPH LEFT +32A8 (右) # CIRCLED IDEOGRAPH RIGHT +32A9 (医) # CIRCLED IDEOGRAPH MEDICINE +32AA (宗) # CIRCLED IDEOGRAPH RELIGION +32AB (学) # CIRCLED IDEOGRAPH STUDY +32AC (監) # CIRCLED IDEOGRAPH SUPERVISE +32AD (企) # CIRCLED IDEOGRAPH ENTERPRISE +32AE (資) # CIRCLED IDEOGRAPH RESOURCE +32AF (協) # CIRCLED IDEOGRAPH ALLIANCE +32B0 (夜) # CIRCLED IDEOGRAPH NIGHT +32B1 (36) # CIRCLED NUMBER THIRTY SIX +32B2 (37) # CIRCLED NUMBER THIRTY SEVEN +32B3 (38) # CIRCLED NUMBER THIRTY EIGHT +32B4 (39) # CIRCLED NUMBER THIRTY NINE +32B5 (40) # CIRCLED NUMBER FORTY +32B6 (41) # CIRCLED NUMBER FORTY ONE +32B7 (42) # CIRCLED NUMBER FORTY TWO +32B8 (43) # CIRCLED NUMBER FORTY THREE +32B9 (44) # CIRCLED NUMBER FORTY FOUR +32BA (45) # CIRCLED NUMBER FORTY FIVE +32BB (46) # CIRCLED NUMBER FORTY SIX +32BC (47) # CIRCLED NUMBER FORTY SEVEN +32BD (48) # CIRCLED NUMBER FORTY EIGHT +32BE (49) # CIRCLED NUMBER FORTY NINE +32BF (50) # CIRCLED NUMBER FIFTY +32C0 1月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY +32C1 2月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY +32C2 3月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH +32C3 4月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL +32C4 5月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY +32C5 6月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE +32C6 7月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY +32C7 8月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST +32C8 9月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER +32C9 10月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER +32CA 11月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER +32CB 12月 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER +32CC Hg # SQUARE HG +32CD erg # SQUARE ERG +32CE eV # SQUARE EV +32CF LTD # LIMITED LIABILITY SIGN +32D0 (ア) # CIRCLED KATAKANA A +32D1 (イ) # CIRCLED KATAKANA I +32D2 (ウ) # CIRCLED KATAKANA U +32D3 (エ) # CIRCLED KATAKANA E +32D4 (オ) # CIRCLED KATAKANA O +32D5 (カ) # CIRCLED KATAKANA KA +32D6 (キ) # CIRCLED KATAKANA KI +32D7 (ク) # CIRCLED KATAKANA KU +32D8 (ケ) # CIRCLED KATAKANA KE +32D9 (コ) # CIRCLED KATAKANA KO +32DA (サ) # CIRCLED KATAKANA SA +32DB (シ) # CIRCLED KATAKANA SI +32DC (ス) # CIRCLED KATAKANA SU +32DD (セ) # CIRCLED KATAKANA SE +32DE (ソ) # CIRCLED KATAKANA SO +32DF (タ) # CIRCLED KATAKANA TA +32E0 (チ) # CIRCLED KATAKANA TI +32E1 (ツ) # CIRCLED KATAKANA TU +32E2 (テ) # CIRCLED KATAKANA TE +32E3 (ト) # CIRCLED KATAKANA TO +32E4 (ナ) # CIRCLED KATAKANA NA +32E5 (ニ) # CIRCLED KATAKANA NI +32E6 (ヌ) # CIRCLED KATAKANA NU +32E7 (ネ) # CIRCLED KATAKANA NE +32E8 (ノ) # CIRCLED KATAKANA NO +32E9 (ハ) # CIRCLED KATAKANA HA +32EA (ヒ) # CIRCLED KATAKANA HI +32EB (フ) # CIRCLED KATAKANA HU +32EC (ヘ) # CIRCLED KATAKANA HE +32ED (ホ) # CIRCLED KATAKANA HO +32EE (マ) # CIRCLED KATAKANA MA +32EF (ミ) # CIRCLED KATAKANA MI +32F0 (ム) # CIRCLED KATAKANA MU +32F1 (メ) # CIRCLED KATAKANA ME +32F2 (モ) # CIRCLED KATAKANA MO +32F3 (ヤ) # CIRCLED KATAKANA YA +32F4 (ユ) # CIRCLED KATAKANA YU +32F5 (ヨ) # CIRCLED KATAKANA YO +32F6 (ラ) # CIRCLED KATAKANA RA +32F7 (リ) # CIRCLED KATAKANA RI +32F8 (ル) # CIRCLED KATAKANA RU +32F9 (レ) # CIRCLED KATAKANA RE +32FA (ロ) # CIRCLED KATAKANA RO +32FB (ワ) # CIRCLED KATAKANA WA +32FC (ヰ) # CIRCLED KATAKANA WI +32FD (ヱ) # CIRCLED KATAKANA WE +32FE (ヲ) # CIRCLED KATAKANA WO +3300 アパート # SQUARE APAATO +3301 アルファ # SQUARE ARUHUA +3302 アンペア # SQUARE ANPEA +3303 アール # SQUARE AARU +3304 イニング # SQUARE ININGU +3305 インチ # SQUARE INTI +3306 ウォン # SQUARE UON +3307 エスクード # SQUARE ESUKUUDO +3308 エーカー # SQUARE EEKAA +3309 オンス # SQUARE ONSU +330A オーム # SQUARE OOMU +330B カイリ # SQUARE KAIRI +330C カラット # SQUARE KARATTO +330D カロリー # SQUARE KARORII +330E ガロン # SQUARE GARON +330F ガンマ # SQUARE GANMA +3310 ギガ # SQUARE GIGA +3311 ギニー # SQUARE GINII +3312 キュリー # SQUARE KYURII +3313 ギルダー # SQUARE GIRUDAA +3314 キロ # SQUARE KIRO +3315 キログラム # SQUARE KIROGURAMU +3316 キロメートル # SQUARE KIROMEETORU +3317 キロワット # SQUARE KIROWATTO +3318 グラム # SQUARE GURAMU +3319 グラムトン # SQUARE GURAMUTON +331A クルゼイロ # SQUARE KURUZEIRO +331B クローネ # SQUARE KUROONE +331C ケース # SQUARE KEESU +331D コルナ # SQUARE KORUNA +331E コーポ # SQUARE KOOPO +331F サイクル # SQUARE SAIKURU +3320 サンチーム # SQUARE SANTIIMU +3321 シリング # SQUARE SIRINGU +3322 センチ # SQUARE SENTI +3323 セント # SQUARE SENTO +3324 ダース # SQUARE DAASU +3325 デシ # SQUARE DESI +3326 ドル # SQUARE DORU +3327 トン # SQUARE TON +3328 ナノ # SQUARE NANO +3329 ノット # SQUARE NOTTO +332A ハイツ # SQUARE HAITU +332B パーセント # SQUARE PAASENTO +332C パーツ # SQUARE PAATU +332D バーレル # SQUARE BAARERU +332E ピアストル # SQUARE PIASUTORU +332F ピクル # SQUARE PIKURU +3330 ピコ # SQUARE PIKO +3331 ビル # SQUARE BIRU +3332 ファラッド # SQUARE HUARADDO +3333 フィート # SQUARE HUIITO +3334 ブッシェル # SQUARE BUSSYERU +3335 フラン # SQUARE HURAN +3336 ヘクタール # SQUARE HEKUTAARU +3337 ペソ # SQUARE PESO +3338 ペニヒ # SQUARE PENIHI +3339 ヘルツ # SQUARE HERUTU +333A ペンス # SQUARE PENSU +333B ページ # SQUARE PEEZI +333C ベータ # SQUARE BEETA +333D ポイント # SQUARE POINTO +333E ボルト # SQUARE BORUTO +333F ホン # SQUARE HON +3340 ポンド # SQUARE PONDO +3341 ホール # SQUARE HOORU +3342 ホーン # SQUARE HOON +3343 マイクロ # SQUARE MAIKURO +3344 マイル # SQUARE MAIRU +3345 マッハ # SQUARE MAHHA +3346 マルク # SQUARE MARUKU +3347 マンション # SQUARE MANSYON +3348 ミクロン # SQUARE MIKURON +3349 ミリ # SQUARE MIRI +334A ミリバール # SQUARE MIRIBAARU +334B メガ # SQUARE MEGA +334C メガトン # SQUARE MEGATON +334D メートル # SQUARE MEETORU +334E ヤード # SQUARE YAADO +334F ヤール # SQUARE YAARU +3350 ユアン # SQUARE YUAN +3351 リットル # SQUARE RITTORU +3352 リラ # SQUARE RIRA +3353 ルピー # SQUARE RUPII +3354 ルーブル # SQUARE RUUBURU +3355 レム # SQUARE REMU +3356 レントゲン # SQUARE RENTOGEN +3357 ワット # SQUARE WATTO +3358 0点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO +3359 1点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE +335A 2点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO +335B 3点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE +335C 4点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR +335D 5点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE +335E 6点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX +335F 7点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN +3360 8点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT +3361 9点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE +3362 10点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN +3363 11点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN +3364 12点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE +3365 13点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN +3366 14点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN +3367 15点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN +3368 16点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN +3369 17点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN +336A 18点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN +336B 19点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN +336C 20点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY +336D 21点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE +336E 22点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO +336F 23点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE +3370 24点 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR +3371 hPa # SQUARE HPA +3372 da # SQUARE DA +3373 AU # SQUARE AU +3374 bar # SQUARE BAR +3375 oV # SQUARE OV +3376 pc # SQUARE PC +3377 dm # SQUARE DM +3378 dm^2 # SQUARE DM SQUARED +3379 dm^3 # SQUARE DM CUBED +337A IU # SQUARE IU +337B 平成 # SQUARE ERA NAME HEISEI +337C 昭和 # SQUARE ERA NAME SYOUWA +337D 大正 # SQUARE ERA NAME TAISYOU +337E 明治 # SQUARE ERA NAME MEIZI +337F 株式会社 # SQUARE CORPORATION +3380 pA # SQUARE PA AMPS +3381 nA # SQUARE NA +3382 μA # SQUARE MU A +3383 mA # SQUARE MA +3384 kA # SQUARE KA +3385 KB # SQUARE KB +3386 MB # SQUARE MB +3387 GB # SQUARE GB +3388 cal # SQUARE CAL +3389 kcal # SQUARE KCAL +338A pF # SQUARE PF +338B nF # SQUARE NF +338C μF # SQUARE MU F +338D μg # SQUARE MU G +338E mg # SQUARE MG +338F kg # SQUARE KG +3390 Hz # SQUARE HZ +3391 kHz # SQUARE KHZ +3392 MHz # SQUARE MHZ +3393 GHz # SQUARE GHZ +3394 THz # SQUARE THZ +3395 μl # SQUARE MU L +3396 ml # SQUARE ML +3397 dl # SQUARE DL +3398 kl # SQUARE KL +3399 fm # SQUARE FM +339A nm # SQUARE NM +339B μm # SQUARE MU M +339C mm # SQUARE MM +339D cm # SQUARE CM +339E km # SQUARE KM +339F mm^2 # SQUARE MM SQUARED +33A0 cm^2 # SQUARE CM SQUARED +33A1 m^2 # SQUARE M SQUARED +33A2 km^2 # SQUARE KM SQUARED +33A3 mm^3 # SQUARE MM CUBED +33A4 cm^3 # SQUARE CM CUBED +33A5 m^3 # SQUARE M CUBED +33A6 km^3 # SQUARE KM CUBED +33A7 m/s # SQUARE M OVER S +33A8 m/s^2 # SQUARE M OVER S SQUARED +33A9 Pa # SQUARE PA +33AA kPa # SQUARE KPA +33AB MPa # SQUARE MPA +33AC GPa # SQUARE GPA +33AD rad # SQUARE RAD +33AE rad/s # SQUARE RAD OVER S +33AF rad/s^2 # SQUARE RAD OVER S SQUARED +33B0 ps # SQUARE PS +33B1 ns # SQUARE NS +33B2 μs # SQUARE MU S +33B3 ms # SQUARE MS +33B4 pV # SQUARE PV +33B5 nV # SQUARE NV +33B6 μV # SQUARE MU V +33B7 mV # SQUARE MV +33B8 kV # SQUARE KV +33B9 MV # SQUARE MV MEGA +33BA pW # SQUARE PW +33BB nW # SQUARE NW +33BC μW # SQUARE MU W +33BD mW # SQUARE MW +33BE kW # SQUARE KW +33BF MW # SQUARE MW MEGA +33C0 kΩ # SQUARE K OHM +33C1 MΩ # SQUARE M OHM +33C2 a.m. # SQUARE AM +33C3 Bq # SQUARE BQ +33C4 cc # SQUARE CC +33C5 cd # SQUARE CD +33C6 C/kg # SQUARE C OVER KG +33C7 Co. # SQUARE CO +33C8 dB # SQUARE DB +33C9 Gy # SQUARE GY +33CA ha # SQUARE HA +33CB HP # SQUARE HP +33CC in # SQUARE IN +33CD KK # SQUARE KK +33CE KM # SQUARE KM CAPITAL +33CF kt # SQUARE KT +33D0 lm # SQUARE LM +33D1 ln # SQUARE LN +33D2 log # SQUARE LOG +33D3 lx # SQUARE LX +33D4 mb # SQUARE MB SMALL +33D5 mil # SQUARE MIL +33D6 mol # SQUARE MOL +33D7 PH # SQUARE PH +33D8 p.m. # SQUARE PM +33D9 PPM # SQUARE PPM +33DA PR # SQUARE PR +33DB sr # SQUARE SR +33DC Sv # SQUARE SV +33DD Wb # SQUARE WB +33DE V/m # SQUARE V OVER M +33DF A/m # SQUARE A OVER M +33FF gal # SQUARE GAL +33E0 1日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE +33E1 2日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO +33E2 3日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE +33E3 4日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR +33E4 5日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE +33E5 6日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX +33E6 7日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN +33E7 8日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT +33E8 9日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE +33E9 10日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN +33EA 11日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN +33EB 12日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE +33EC 13日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN +33ED 14日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN +33EE 15日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN +33EF 16日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN +33F0 17日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN +33F1 18日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN +33F2 19日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN +33F3 20日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY +33F4 21日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE +33F5 22日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO +33F6 23日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE +33F7 24日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR +33F8 25日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE +33F9 26日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX +33FA 27日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN +33FB 28日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT +33FC 29日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE +33FD 30日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY +33FE 31日 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE +F900 豈 # CJK COMPATIBILITY IDEOGRAPH-F900 +F901 更 # CJK COMPATIBILITY IDEOGRAPH-F901 +F902 車 # CJK COMPATIBILITY IDEOGRAPH-F902 +F903 賈 # CJK COMPATIBILITY IDEOGRAPH-F903 +F904 滑 # CJK COMPATIBILITY IDEOGRAPH-F904 +F905 串 # CJK COMPATIBILITY IDEOGRAPH-F905 +F906 句 # CJK COMPATIBILITY IDEOGRAPH-F906 +F907 龜 # CJK COMPATIBILITY IDEOGRAPH-F907 +F908 龜 # CJK COMPATIBILITY IDEOGRAPH-F908 +F909 契 # CJK COMPATIBILITY IDEOGRAPH-F909 +F90A 金 # CJK COMPATIBILITY IDEOGRAPH-F90A +F90B 喇 # CJK COMPATIBILITY IDEOGRAPH-F90B +F90C 奈 # CJK COMPATIBILITY IDEOGRAPH-F90C +F90D 懶 # CJK COMPATIBILITY IDEOGRAPH-F90D +F90E 癩 # CJK COMPATIBILITY IDEOGRAPH-F90E +F90F 羅 # CJK COMPATIBILITY IDEOGRAPH-F90F +F910 蘿 # CJK COMPATIBILITY IDEOGRAPH-F910 +F911 螺 # CJK COMPATIBILITY IDEOGRAPH-F911 +F912 裸 # CJK COMPATIBILITY IDEOGRAPH-F912 +F913 邏 # CJK COMPATIBILITY IDEOGRAPH-F913 +F914 樂 # CJK COMPATIBILITY IDEOGRAPH-F914 +F915 洛 # CJK COMPATIBILITY IDEOGRAPH-F915 +F916 烙 # CJK COMPATIBILITY IDEOGRAPH-F916 +F917 珞 # CJK COMPATIBILITY IDEOGRAPH-F917 +F918 落 # CJK COMPATIBILITY IDEOGRAPH-F918 +F919 酪 # CJK COMPATIBILITY IDEOGRAPH-F919 +F91A 駱 # CJK COMPATIBILITY IDEOGRAPH-F91A +F91B 亂 # CJK COMPATIBILITY IDEOGRAPH-F91B +F91C 卵 # CJK COMPATIBILITY IDEOGRAPH-F91C +F91D 欄 # CJK COMPATIBILITY IDEOGRAPH-F91D +F91E 爛 # CJK COMPATIBILITY IDEOGRAPH-F91E +F91F 蘭 # CJK COMPATIBILITY IDEOGRAPH-F91F +F920 鸞 # CJK COMPATIBILITY IDEOGRAPH-F920 +F921 嵐 # CJK COMPATIBILITY IDEOGRAPH-F921 +F922 濫 # CJK COMPATIBILITY IDEOGRAPH-F922 +F923 藍 # CJK COMPATIBILITY IDEOGRAPH-F923 +F924 襤 # CJK COMPATIBILITY IDEOGRAPH-F924 +F925 拉 # CJK COMPATIBILITY IDEOGRAPH-F925 +F926 臘 # CJK COMPATIBILITY IDEOGRAPH-F926 +F927 蠟 # CJK COMPATIBILITY IDEOGRAPH-F927 +F928 廊 # CJK COMPATIBILITY IDEOGRAPH-F928 +F929 朗 # CJK COMPATIBILITY IDEOGRAPH-F929 +F92A 浪 # CJK COMPATIBILITY IDEOGRAPH-F92A +F92B 狼 # CJK COMPATIBILITY IDEOGRAPH-F92B +F92C 郎 # CJK COMPATIBILITY IDEOGRAPH-F92C +F92D 來 # CJK COMPATIBILITY IDEOGRAPH-F92D +F92E 冷 # CJK COMPATIBILITY IDEOGRAPH-F92E +F92F 勞 # CJK COMPATIBILITY IDEOGRAPH-F92F +F930 擄 # CJK COMPATIBILITY IDEOGRAPH-F930 +F931 櫓 # CJK COMPATIBILITY IDEOGRAPH-F931 +F932 爐 # CJK COMPATIBILITY IDEOGRAPH-F932 +F933 盧 # CJK COMPATIBILITY IDEOGRAPH-F933 +F934 老 # CJK COMPATIBILITY IDEOGRAPH-F934 +F935 蘆 # CJK COMPATIBILITY IDEOGRAPH-F935 +F936 虜 # CJK COMPATIBILITY IDEOGRAPH-F936 +F937 路 # CJK COMPATIBILITY IDEOGRAPH-F937 +F938 露 # CJK COMPATIBILITY IDEOGRAPH-F938 +F939 魯 # CJK COMPATIBILITY IDEOGRAPH-F939 +F93A 鷺 # CJK COMPATIBILITY IDEOGRAPH-F93A +F93B 碌 # CJK COMPATIBILITY IDEOGRAPH-F93B +F93C 祿 # CJK COMPATIBILITY IDEOGRAPH-F93C +F93D 綠 # CJK COMPATIBILITY IDEOGRAPH-F93D +F93E 菉 # CJK COMPATIBILITY IDEOGRAPH-F93E +F93F 錄 # CJK COMPATIBILITY IDEOGRAPH-F93F +F940 鹿 # CJK COMPATIBILITY IDEOGRAPH-F940 +F941 論 # CJK COMPATIBILITY IDEOGRAPH-F941 +F942 壟 # CJK COMPATIBILITY IDEOGRAPH-F942 +F943 弄 # CJK COMPATIBILITY IDEOGRAPH-F943 +F944 籠 # CJK COMPATIBILITY IDEOGRAPH-F944 +F945 聾 # CJK COMPATIBILITY IDEOGRAPH-F945 +F946 牢 # CJK COMPATIBILITY IDEOGRAPH-F946 +F947 磊 # CJK COMPATIBILITY IDEOGRAPH-F947 +F948 賂 # CJK COMPATIBILITY IDEOGRAPH-F948 +F949 雷 # CJK COMPATIBILITY IDEOGRAPH-F949 +F94A 壘 # CJK COMPATIBILITY IDEOGRAPH-F94A +F94B 屢 # CJK COMPATIBILITY IDEOGRAPH-F94B +F94C 樓 # CJK COMPATIBILITY IDEOGRAPH-F94C +F94D 淚 # CJK COMPATIBILITY IDEOGRAPH-F94D +F94E 漏 # CJK COMPATIBILITY IDEOGRAPH-F94E +F94F 累 # CJK COMPATIBILITY IDEOGRAPH-F94F +F950 縷 # CJK COMPATIBILITY IDEOGRAPH-F950 +F951 陋 # CJK COMPATIBILITY IDEOGRAPH-F951 +F952 勒 # CJK COMPATIBILITY IDEOGRAPH-F952 +F953 肋 # CJK COMPATIBILITY IDEOGRAPH-F953 +F954 凜 # CJK COMPATIBILITY IDEOGRAPH-F954 +F955 凌 # CJK COMPATIBILITY IDEOGRAPH-F955 +F956 稜 # CJK COMPATIBILITY IDEOGRAPH-F956 +F957 綾 # CJK COMPATIBILITY IDEOGRAPH-F957 +F958 菱 # CJK COMPATIBILITY IDEOGRAPH-F958 +F959 陵 # CJK COMPATIBILITY IDEOGRAPH-F959 +F95A 讀 # CJK COMPATIBILITY IDEOGRAPH-F95A +F95B 拏 # CJK COMPATIBILITY IDEOGRAPH-F95B +F95C 樂 # CJK COMPATIBILITY IDEOGRAPH-F95C +F95D 諾 # CJK COMPATIBILITY IDEOGRAPH-F95D +F95E 丹 # CJK COMPATIBILITY IDEOGRAPH-F95E +F95F 寧 # CJK COMPATIBILITY IDEOGRAPH-F95F +F960 怒 # CJK COMPATIBILITY IDEOGRAPH-F960 +F961 率 # CJK COMPATIBILITY IDEOGRAPH-F961 +F962 異 # CJK COMPATIBILITY IDEOGRAPH-F962 +F963 北 # CJK COMPATIBILITY IDEOGRAPH-F963 +F964 磻 # CJK COMPATIBILITY IDEOGRAPH-F964 +F965 便 # CJK COMPATIBILITY IDEOGRAPH-F965 +F966 復 # CJK COMPATIBILITY IDEOGRAPH-F966 +F967 不 # CJK COMPATIBILITY IDEOGRAPH-F967 +F968 泌 # CJK COMPATIBILITY IDEOGRAPH-F968 +F969 數 # CJK COMPATIBILITY IDEOGRAPH-F969 +F96A 索 # CJK COMPATIBILITY IDEOGRAPH-F96A +F96B 參 # CJK COMPATIBILITY IDEOGRAPH-F96B +F96C 塞 # CJK COMPATIBILITY IDEOGRAPH-F96C +F96D 省 # CJK COMPATIBILITY IDEOGRAPH-F96D +F96E 葉 # CJK COMPATIBILITY IDEOGRAPH-F96E +F96F 說 # CJK COMPATIBILITY IDEOGRAPH-F96F +F970 殺 # CJK COMPATIBILITY IDEOGRAPH-F970 +F971 辰 # CJK COMPATIBILITY IDEOGRAPH-F971 +F972 沈 # CJK COMPATIBILITY IDEOGRAPH-F972 +F973 拾 # CJK COMPATIBILITY IDEOGRAPH-F973 +F974 若 # CJK COMPATIBILITY IDEOGRAPH-F974 +F975 掠 # CJK COMPATIBILITY IDEOGRAPH-F975 +F976 略 # CJK COMPATIBILITY IDEOGRAPH-F976 +F977 亮 # CJK COMPATIBILITY IDEOGRAPH-F977 +F978 兩 # CJK COMPATIBILITY IDEOGRAPH-F978 +F979 凉 # CJK COMPATIBILITY IDEOGRAPH-F979 +F97A 梁 # CJK COMPATIBILITY IDEOGRAPH-F97A +F97B 糧 # CJK COMPATIBILITY IDEOGRAPH-F97B +F97C 良 # CJK COMPATIBILITY IDEOGRAPH-F97C +F97D 諒 # CJK COMPATIBILITY IDEOGRAPH-F97D +F97E 量 # CJK COMPATIBILITY IDEOGRAPH-F97E +F97F 勵 # CJK COMPATIBILITY IDEOGRAPH-F97F +F980 呂 # CJK COMPATIBILITY IDEOGRAPH-F980 +F981 女 # CJK COMPATIBILITY IDEOGRAPH-F981 +F982 廬 # CJK COMPATIBILITY IDEOGRAPH-F982 +F983 旅 # CJK COMPATIBILITY IDEOGRAPH-F983 +F984 濾 # CJK COMPATIBILITY IDEOGRAPH-F984 +F985 礪 # CJK COMPATIBILITY IDEOGRAPH-F985 +F986 閭 # CJK COMPATIBILITY IDEOGRAPH-F986 +F987 驪 # CJK COMPATIBILITY IDEOGRAPH-F987 +F988 麗 # CJK COMPATIBILITY IDEOGRAPH-F988 +F989 黎 # CJK COMPATIBILITY IDEOGRAPH-F989 +F98A 力 # CJK COMPATIBILITY IDEOGRAPH-F98A +F98B 曆 # CJK COMPATIBILITY IDEOGRAPH-F98B +F98C 歷 # CJK COMPATIBILITY IDEOGRAPH-F98C +F98D 轢 # CJK COMPATIBILITY IDEOGRAPH-F98D +F98E 年 # CJK COMPATIBILITY IDEOGRAPH-F98E +F98F 憐 # CJK COMPATIBILITY IDEOGRAPH-F98F +F990 戀 # CJK COMPATIBILITY IDEOGRAPH-F990 +F991 撚 # CJK COMPATIBILITY IDEOGRAPH-F991 +F992 漣 # CJK COMPATIBILITY IDEOGRAPH-F992 +F993 煉 # CJK COMPATIBILITY IDEOGRAPH-F993 +F994 璉 # CJK COMPATIBILITY IDEOGRAPH-F994 +F995 秊 # CJK COMPATIBILITY IDEOGRAPH-F995 +F996 練 # CJK COMPATIBILITY IDEOGRAPH-F996 +F997 聯 # CJK COMPATIBILITY IDEOGRAPH-F997 +F998 輦 # CJK COMPATIBILITY IDEOGRAPH-F998 +F999 蓮 # CJK COMPATIBILITY IDEOGRAPH-F999 +F99A 連 # CJK COMPATIBILITY IDEOGRAPH-F99A +F99B 鍊 # CJK COMPATIBILITY IDEOGRAPH-F99B +F99C 列 # CJK COMPATIBILITY IDEOGRAPH-F99C +F99D 劣 # CJK COMPATIBILITY IDEOGRAPH-F99D +F99E 咽 # CJK COMPATIBILITY IDEOGRAPH-F99E +F99F 烈 # CJK COMPATIBILITY IDEOGRAPH-F99F +F9A0 裂 # CJK COMPATIBILITY IDEOGRAPH-F9A0 +F9A1 說 # CJK COMPATIBILITY IDEOGRAPH-F9A1 +F9A2 廉 # CJK COMPATIBILITY IDEOGRAPH-F9A2 +F9A3 念 # CJK COMPATIBILITY IDEOGRAPH-F9A3 +F9A4 捻 # CJK COMPATIBILITY IDEOGRAPH-F9A4 +F9A5 殮 # CJK COMPATIBILITY IDEOGRAPH-F9A5 +F9A6 簾 # CJK COMPATIBILITY IDEOGRAPH-F9A6 +F9A7 獵 # CJK COMPATIBILITY IDEOGRAPH-F9A7 +F9A8 令 # CJK COMPATIBILITY IDEOGRAPH-F9A8 +F9A9 囹 # CJK COMPATIBILITY IDEOGRAPH-F9A9 +F9AA 寧 # CJK COMPATIBILITY IDEOGRAPH-F9AA +F9AB 嶺 # CJK COMPATIBILITY IDEOGRAPH-F9AB +F9AC 怜 # CJK COMPATIBILITY IDEOGRAPH-F9AC +F9AD 玲 # CJK COMPATIBILITY IDEOGRAPH-F9AD +F9AE 瑩 # CJK COMPATIBILITY IDEOGRAPH-F9AE +F9AF 羚 # CJK COMPATIBILITY IDEOGRAPH-F9AF +F9B0 聆 # CJK COMPATIBILITY IDEOGRAPH-F9B0 +F9B1 鈴 # CJK COMPATIBILITY IDEOGRAPH-F9B1 +F9B2 零 # CJK COMPATIBILITY IDEOGRAPH-F9B2 +F9B3 靈 # CJK COMPATIBILITY IDEOGRAPH-F9B3 +F9B4 領 # CJK COMPATIBILITY IDEOGRAPH-F9B4 +F9B5 例 # CJK COMPATIBILITY IDEOGRAPH-F9B5 +F9B6 禮 # CJK COMPATIBILITY IDEOGRAPH-F9B6 +F9B7 醴 # CJK COMPATIBILITY IDEOGRAPH-F9B7 +F9B8 隸 # CJK COMPATIBILITY IDEOGRAPH-F9B8 +F9B9 惡 # CJK COMPATIBILITY IDEOGRAPH-F9B9 +F9BA 了 # CJK COMPATIBILITY IDEOGRAPH-F9BA +F9BB 僚 # CJK COMPATIBILITY IDEOGRAPH-F9BB +F9BC 寮 # CJK COMPATIBILITY IDEOGRAPH-F9BC +F9BD 尿 # CJK COMPATIBILITY IDEOGRAPH-F9BD +F9BE 料 # CJK COMPATIBILITY IDEOGRAPH-F9BE +F9BF 樂 # CJK COMPATIBILITY IDEOGRAPH-F9BF +F9C0 燎 # CJK COMPATIBILITY IDEOGRAPH-F9C0 +F9C1 療 # CJK COMPATIBILITY IDEOGRAPH-F9C1 +F9C2 蓼 # CJK COMPATIBILITY IDEOGRAPH-F9C2 +F9C3 遼 # CJK COMPATIBILITY IDEOGRAPH-F9C3 +F9C4 龍 # CJK COMPATIBILITY IDEOGRAPH-F9C4 +F9C5 暈 # CJK COMPATIBILITY IDEOGRAPH-F9C5 +F9C6 阮 # CJK COMPATIBILITY IDEOGRAPH-F9C6 +F9C7 劉 # CJK COMPATIBILITY IDEOGRAPH-F9C7 +F9C8 杻 # CJK COMPATIBILITY IDEOGRAPH-F9C8 +F9C9 柳 # CJK COMPATIBILITY IDEOGRAPH-F9C9 +F9CA 流 # CJK COMPATIBILITY IDEOGRAPH-F9CA +F9CB 溜 # CJK COMPATIBILITY IDEOGRAPH-F9CB +F9CC 琉 # CJK COMPATIBILITY IDEOGRAPH-F9CC +F9CD 留 # CJK COMPATIBILITY IDEOGRAPH-F9CD +F9CE 硫 # CJK COMPATIBILITY IDEOGRAPH-F9CE +F9CF 紐 # CJK COMPATIBILITY IDEOGRAPH-F9CF +F9D0 類 # CJK COMPATIBILITY IDEOGRAPH-F9D0 +F9D1 六 # CJK COMPATIBILITY IDEOGRAPH-F9D1 +F9D2 戮 # CJK COMPATIBILITY IDEOGRAPH-F9D2 +F9D3 陸 # CJK COMPATIBILITY IDEOGRAPH-F9D3 +F9D4 倫 # CJK COMPATIBILITY IDEOGRAPH-F9D4 +F9D5 崙 # CJK COMPATIBILITY IDEOGRAPH-F9D5 +F9D6 淪 # CJK COMPATIBILITY IDEOGRAPH-F9D6 +F9D7 輪 # CJK COMPATIBILITY IDEOGRAPH-F9D7 +F9D8 律 # CJK COMPATIBILITY IDEOGRAPH-F9D8 +F9D9 慄 # CJK COMPATIBILITY IDEOGRAPH-F9D9 +F9DA 栗 # CJK COMPATIBILITY IDEOGRAPH-F9DA +F9DB 率 # CJK COMPATIBILITY IDEOGRAPH-F9DB +F9DC 隆 # CJK COMPATIBILITY IDEOGRAPH-F9DC +F9DD 利 # CJK COMPATIBILITY IDEOGRAPH-F9DD +F9DE 吏 # CJK COMPATIBILITY IDEOGRAPH-F9DE +F9DF 履 # CJK COMPATIBILITY IDEOGRAPH-F9DF +F9E0 易 # CJK COMPATIBILITY IDEOGRAPH-F9E0 +F9E1 李 # CJK COMPATIBILITY IDEOGRAPH-F9E1 +F9E2 梨 # CJK COMPATIBILITY IDEOGRAPH-F9E2 +F9E3 泥 # CJK COMPATIBILITY IDEOGRAPH-F9E3 +F9E4 理 # CJK COMPATIBILITY IDEOGRAPH-F9E4 +F9E5 痢 # CJK COMPATIBILITY IDEOGRAPH-F9E5 +F9E6 罹 # CJK COMPATIBILITY IDEOGRAPH-F9E6 +F9E7 裏 # CJK COMPATIBILITY IDEOGRAPH-F9E7 +F9E8 裡 # CJK COMPATIBILITY IDEOGRAPH-F9E8 +F9E9 里 # CJK COMPATIBILITY IDEOGRAPH-F9E9 +F9EA 離 # CJK COMPATIBILITY IDEOGRAPH-F9EA +F9EB 匿 # CJK COMPATIBILITY IDEOGRAPH-F9EB +F9EC 溺 # CJK COMPATIBILITY IDEOGRAPH-F9EC +F9ED 吝 # CJK COMPATIBILITY IDEOGRAPH-F9ED +F9EE 燐 # CJK COMPATIBILITY IDEOGRAPH-F9EE +F9EF 璘 # CJK COMPATIBILITY IDEOGRAPH-F9EF +F9F0 藺 # CJK COMPATIBILITY IDEOGRAPH-F9F0 +F9F1 隣 # CJK COMPATIBILITY IDEOGRAPH-F9F1 +F9F2 鱗 # CJK COMPATIBILITY IDEOGRAPH-F9F2 +F9F3 麟 # CJK COMPATIBILITY IDEOGRAPH-F9F3 +F9F4 林 # CJK COMPATIBILITY IDEOGRAPH-F9F4 +F9F5 淋 # CJK COMPATIBILITY IDEOGRAPH-F9F5 +F9F6 臨 # CJK COMPATIBILITY IDEOGRAPH-F9F6 +F9F7 立 # CJK COMPATIBILITY IDEOGRAPH-F9F7 +F9F8 笠 # CJK COMPATIBILITY IDEOGRAPH-F9F8 +F9F9 粒 # CJK COMPATIBILITY IDEOGRAPH-F9F9 +F9FA 狀 # CJK COMPATIBILITY IDEOGRAPH-F9FA +F9FB 炙 # CJK COMPATIBILITY IDEOGRAPH-F9FB +F9FC 識 # CJK COMPATIBILITY IDEOGRAPH-F9FC +F9FD 什 # CJK COMPATIBILITY IDEOGRAPH-F9FD +F9FE 茶 # CJK COMPATIBILITY IDEOGRAPH-F9FE +F9FF 刺 # CJK COMPATIBILITY IDEOGRAPH-F9FF +FA00 切 # CJK COMPATIBILITY IDEOGRAPH-FA00 +FA01 度 # CJK COMPATIBILITY IDEOGRAPH-FA01 +FA02 拓 # CJK COMPATIBILITY IDEOGRAPH-FA02 +FA03 糖 # CJK COMPATIBILITY IDEOGRAPH-FA03 +FA04 宅 # CJK COMPATIBILITY IDEOGRAPH-FA04 +FA05 洞 # CJK COMPATIBILITY IDEOGRAPH-FA05 +FA06 暴 # CJK COMPATIBILITY IDEOGRAPH-FA06 +FA07 輻 # CJK COMPATIBILITY IDEOGRAPH-FA07 +FA08 行 # CJK COMPATIBILITY IDEOGRAPH-FA08 +FA09 降 # CJK COMPATIBILITY IDEOGRAPH-FA09 +FA0A 見 # CJK COMPATIBILITY IDEOGRAPH-FA0A +FA0B 廓 # CJK COMPATIBILITY IDEOGRAPH-FA0B +FA0C 兀 # CJK COMPATIBILITY IDEOGRAPH-FA0C +FA0D 嗀 # CJK COMPATIBILITY IDEOGRAPH-FA0D +FA10 塚 # CJK COMPATIBILITY IDEOGRAPH-FA10 +FA12 晴 # CJK COMPATIBILITY IDEOGRAPH-FA12 +FA15 凞 # CJK COMPATIBILITY IDEOGRAPH-FA15 +FA16 猪 # CJK COMPATIBILITY IDEOGRAPH-FA16 +FA17 益 # CJK COMPATIBILITY IDEOGRAPH-FA17 +FA18 礼 # CJK COMPATIBILITY IDEOGRAPH-FA18 +FA19 神 # CJK COMPATIBILITY IDEOGRAPH-FA19 +FA1A 祥 # CJK COMPATIBILITY IDEOGRAPH-FA1A +FA1B 福 # CJK COMPATIBILITY IDEOGRAPH-FA1B +FA1C 靖 # CJK COMPATIBILITY IDEOGRAPH-FA1C +FA1D 精 # CJK COMPATIBILITY IDEOGRAPH-FA1D +FA1E 羽 # CJK COMPATIBILITY IDEOGRAPH-FA1E +FA20 蘒 # CJK COMPATIBILITY IDEOGRAPH-FA20 +FA22 諸 # CJK COMPATIBILITY IDEOGRAPH-FA22 +FA25 逸 # CJK COMPATIBILITY IDEOGRAPH-FA25 +FA26 都 # CJK COMPATIBILITY IDEOGRAPH-FA26 +FA2A 飯 # CJK COMPATIBILITY IDEOGRAPH-FA2A +FA2B 飼 # CJK COMPATIBILITY IDEOGRAPH-FA2B +FA2C 館 # CJK COMPATIBILITY IDEOGRAPH-FA2C +FA2D 鶴 # CJK COMPATIBILITY IDEOGRAPH-FA2D +FA30 侮 # CJK COMPATIBILITY IDEOGRAPH-FA30 +FA31 僧 # CJK COMPATIBILITY IDEOGRAPH-FA31 +FA32 免 # CJK COMPATIBILITY IDEOGRAPH-FA32 +FA33 勉 # CJK COMPATIBILITY IDEOGRAPH-FA33 +FA34 勤 # CJK COMPATIBILITY IDEOGRAPH-FA34 +FA35 卑 # CJK COMPATIBILITY IDEOGRAPH-FA35 +FA36 喝 # CJK COMPATIBILITY IDEOGRAPH-FA36 +FA37 嘆 # CJK COMPATIBILITY IDEOGRAPH-FA37 +FA38 器 # CJK COMPATIBILITY IDEOGRAPH-FA38 +FA39 塀 # CJK COMPATIBILITY IDEOGRAPH-FA39 +FA3A 墨 # CJK COMPATIBILITY IDEOGRAPH-FA3A +FA3B 層 # CJK COMPATIBILITY IDEOGRAPH-FA3B +FA3C 屮 # CJK COMPATIBILITY IDEOGRAPH-FA3C +FA3D 悔 # CJK COMPATIBILITY IDEOGRAPH-FA3D +FA3E 慨 # CJK COMPATIBILITY IDEOGRAPH-FA3E +FA3F 憎 # CJK COMPATIBILITY IDEOGRAPH-FA3F +FA40 懲 # CJK COMPATIBILITY IDEOGRAPH-FA40 +FA41 敏 # CJK COMPATIBILITY IDEOGRAPH-FA41 +FA42 既 # CJK COMPATIBILITY IDEOGRAPH-FA42 +FA43 暑 # CJK COMPATIBILITY IDEOGRAPH-FA43 +FA44 梅 # CJK COMPATIBILITY IDEOGRAPH-FA44 +FA45 海 # CJK COMPATIBILITY IDEOGRAPH-FA45 +FA46 渚 # CJK COMPATIBILITY IDEOGRAPH-FA46 +FA47 漢 # CJK COMPATIBILITY IDEOGRAPH-FA47 +FA48 煮 # CJK COMPATIBILITY IDEOGRAPH-FA48 +FA49 爫 # CJK COMPATIBILITY IDEOGRAPH-FA49 +FA4A 琢 # CJK COMPATIBILITY IDEOGRAPH-FA4A +FA4B 碑 # CJK COMPATIBILITY IDEOGRAPH-FA4B +FA4C 社 # CJK COMPATIBILITY IDEOGRAPH-FA4C +FA4D 祉 # CJK COMPATIBILITY IDEOGRAPH-FA4D +FA4E 祈 # CJK COMPATIBILITY IDEOGRAPH-FA4E +FA4F 祐 # CJK COMPATIBILITY IDEOGRAPH-FA4F +FA50 祖 # CJK COMPATIBILITY IDEOGRAPH-FA50 +FA51 祝 # CJK COMPATIBILITY IDEOGRAPH-FA51 +FA52 禍 # CJK COMPATIBILITY IDEOGRAPH-FA52 +FA53 禎 # CJK COMPATIBILITY IDEOGRAPH-FA53 +FA54 穀 # CJK COMPATIBILITY IDEOGRAPH-FA54 +FA55 突 # CJK COMPATIBILITY IDEOGRAPH-FA55 +FA56 節 # CJK COMPATIBILITY IDEOGRAPH-FA56 +FA57 練 # CJK COMPATIBILITY IDEOGRAPH-FA57 +FA58 縉 # CJK COMPATIBILITY IDEOGRAPH-FA58 +FA59 繁 # CJK COMPATIBILITY IDEOGRAPH-FA59 +FA5A 署 # CJK COMPATIBILITY IDEOGRAPH-FA5A +FA5B 者 # CJK COMPATIBILITY IDEOGRAPH-FA5B +FA5C 臭 # CJK COMPATIBILITY IDEOGRAPH-FA5C +FA5D 艹 # CJK COMPATIBILITY IDEOGRAPH-FA5D +FA5E 艹 # CJK COMPATIBILITY IDEOGRAPH-FA5E +FA5F 著 # CJK COMPATIBILITY IDEOGRAPH-FA5F +FA60 褐 # CJK COMPATIBILITY IDEOGRAPH-FA60 +FA61 視 # CJK COMPATIBILITY IDEOGRAPH-FA61 +FA62 謁 # CJK COMPATIBILITY IDEOGRAPH-FA62 +FA63 謹 # CJK COMPATIBILITY IDEOGRAPH-FA63 +FA64 賓 # CJK COMPATIBILITY IDEOGRAPH-FA64 +FA65 贈 # CJK COMPATIBILITY IDEOGRAPH-FA65 +FA66 辶 # CJK COMPATIBILITY IDEOGRAPH-FA66 +FA67 逸 # CJK COMPATIBILITY IDEOGRAPH-FA67 +FA68 難 # CJK COMPATIBILITY IDEOGRAPH-FA68 +FA69 響 # CJK COMPATIBILITY IDEOGRAPH-FA69 +FA6A 頻 # CJK COMPATIBILITY IDEOGRAPH-FA6A +FB00 ff # LATIN SMALL LIGATURE FF +FB01 fi # LATIN SMALL LIGATURE FI +FB02 fl # LATIN SMALL LIGATURE FL +FB03 ffi # LATIN SMALL LIGATURE FFI +FB04 ffl # LATIN SMALL LIGATURE FFL +FB05 ſt # LATIN SMALL LIGATURE LONG S T +FB06 st # LATIN SMALL LIGATURE ST +FB13 մն # ARMENIAN SMALL LIGATURE MEN NOW +FB14 մե # ARMENIAN SMALL LIGATURE MEN ECH +FB15 մի # ARMENIAN SMALL LIGATURE MEN INI +FB16 վն # ARMENIAN SMALL LIGATURE VEW NOW +FB17 մխ # ARMENIAN SMALL LIGATURE MEN XEH +FB20 ע # HEBREW LETTER ALTERNATIVE AYIN +FB21 א # HEBREW LETTER WIDE ALEF +FB22 ד # HEBREW LETTER WIDE DALET +FB23 ה # HEBREW LETTER WIDE HE +FB24 כ # HEBREW LETTER WIDE KAF +FB25 ל # HEBREW LETTER WIDE LAMED +FB26 ם # HEBREW LETTER WIDE FINAL MEM +FB27 ר # HEBREW LETTER WIDE RESH +FB28 ת # HEBREW LETTER WIDE TAV +FB29 + # HEBREW LETTER ALTERNATIVE PLUS SIGN +FB4F אל # HEBREW LIGATURE ALEF LAMED +FE49 ‾ # DASHED OVERLINE +FE4A ‾ # CENTRELINE OVERLINE +FE4B ‾ # WAVY OVERLINE +FE4C ‾ # DOUBLE WAVY OVERLINE +FE4D _ # DASHED LOW LINE +FE4E _ # CENTRELINE LOW LINE +FE4F _ # WAVY LOW LINE +FE50 , # SMALL COMMA +FE51 、 # SMALL IDEOGRAPHIC COMMA +FE52 . # SMALL FULL STOP +FE54 ; # SMALL SEMICOLON +FE55 : # SMALL COLON +FE56 ? # SMALL QUESTION MARK +FE57 ! # SMALL EXCLAMATION MARK +FE58 — # SMALL EM DASH +FE59 ( # SMALL LEFT PARENTHESIS +FE5A ) # SMALL RIGHT PARENTHESIS +FE5B { # SMALL LEFT CURLY BRACKET +FE5C } # SMALL RIGHT CURLY BRACKET +FE5D 〔 # SMALL LEFT TORTOISE SHELL BRACKET +FE5E 〕 # SMALL RIGHT TORTOISE SHELL BRACKET +FE5F # # SMALL NUMBER SIGN +FE60 & # SMALL AMPERSAND +FE61 * # SMALL ASTERISK +FE62 + # SMALL PLUS SIGN +FE63 - # SMALL HYPHEN-MINUS +FE64 < # SMALL LESS-THAN SIGN +FE65 > # SMALL GREATER-THAN SIGN +FE66 = # SMALL EQUALS SIGN +FE68 \ # SMALL REVERSE SOLIDUS +FE69 $ # SMALL DOLLAR SIGN +FE6A % # SMALL PERCENT SIGN +FE6B @ # SMALL COMMERCIAL AT +FF01 ! # FULLWIDTH EXCLAMATION MARK +FF02 " # FULLWIDTH QUOTATION MARK +FF03 # # FULLWIDTH NUMBER SIGN +FF04 $ # FULLWIDTH DOLLAR SIGN +FF05 % # FULLWIDTH PERCENT SIGN +FF06 & # FULLWIDTH AMPERSAND +FF07 ' # FULLWIDTH APOSTROPHE +FF08 ( # FULLWIDTH LEFT PARENTHESIS +FF09 ) # FULLWIDTH RIGHT PARENTHESIS +FF0A * # FULLWIDTH ASTERISK +FF0B + # FULLWIDTH PLUS SIGN +FF0C , # FULLWIDTH COMMA +FF0D - # FULLWIDTH HYPHEN-MINUS +FF0E . # FULLWIDTH FULL STOP +FF0F / # FULLWIDTH SOLIDUS +FF10 0 # FULLWIDTH DIGIT ZERO +FF11 1 # FULLWIDTH DIGIT ONE +FF12 2 # FULLWIDTH DIGIT TWO +FF13 3 # FULLWIDTH DIGIT THREE +FF14 4 # FULLWIDTH DIGIT FOUR +FF15 5 # FULLWIDTH DIGIT FIVE +FF16 6 # FULLWIDTH DIGIT SIX +FF17 7 # FULLWIDTH DIGIT SEVEN +FF18 8 # FULLWIDTH DIGIT EIGHT +FF19 9 # FULLWIDTH DIGIT NINE +FF1A : # FULLWIDTH COLON +FF1B ; # FULLWIDTH SEMICOLON +FF1C < # FULLWIDTH LESS-THAN SIGN +FF1D = # FULLWIDTH EQUALS SIGN +FF1E > # FULLWIDTH GREATER-THAN SIGN +FF1F ? # FULLWIDTH QUESTION MARK +FF20 @ # FULLWIDTH COMMERCIAL AT +FF21 A # FULLWIDTH LATIN CAPITAL LETTER A +FF22 B # FULLWIDTH LATIN CAPITAL LETTER B +FF23 C # FULLWIDTH LATIN CAPITAL LETTER C +FF24 D # FULLWIDTH LATIN CAPITAL LETTER D +FF25 E # FULLWIDTH LATIN CAPITAL LETTER E +FF26 F # FULLWIDTH LATIN CAPITAL LETTER F +FF27 G # FULLWIDTH LATIN CAPITAL LETTER G +FF28 H # FULLWIDTH LATIN CAPITAL LETTER H +FF29 I # FULLWIDTH LATIN CAPITAL LETTER I +FF2A J # FULLWIDTH LATIN CAPITAL LETTER J +FF2B K # FULLWIDTH LATIN CAPITAL LETTER K +FF2C L # FULLWIDTH LATIN CAPITAL LETTER L +FF2D M # FULLWIDTH LATIN CAPITAL LETTER M +FF2E N # FULLWIDTH LATIN CAPITAL LETTER N +FF2F O # FULLWIDTH LATIN CAPITAL LETTER O +FF30 P # FULLWIDTH LATIN CAPITAL LETTER P +FF31 Q # FULLWIDTH LATIN CAPITAL LETTER Q +FF32 R # FULLWIDTH LATIN CAPITAL LETTER R +FF33 S # FULLWIDTH LATIN CAPITAL LETTER S +FF34 T # FULLWIDTH LATIN CAPITAL LETTER T +FF35 U # FULLWIDTH LATIN CAPITAL LETTER U +FF36 V # FULLWIDTH LATIN CAPITAL LETTER V +FF37 W # FULLWIDTH LATIN CAPITAL LETTER W +FF38 X # FULLWIDTH LATIN CAPITAL LETTER X +FF39 Y # FULLWIDTH LATIN CAPITAL LETTER Y +FF3A Z # FULLWIDTH LATIN CAPITAL LETTER Z +FF3B [ # FULLWIDTH LEFT SQUARE BRACKET +FF3C \ # FULLWIDTH REVERSE SOLIDUS +FF3D ] # FULLWIDTH RIGHT SQUARE BRACKET +FF3E ^ # FULLWIDTH CIRCUMFLEX ACCENT +FF3F _ # FULLWIDTH LOW LINE +FF40 ` # FULLWIDTH GRAVE ACCENT +FF41 a # FULLWIDTH LATIN SMALL LETTER A +FF42 b # FULLWIDTH LATIN SMALL LETTER B +FF43 c # FULLWIDTH LATIN SMALL LETTER C +FF44 d # FULLWIDTH LATIN SMALL LETTER D +FF45 e # FULLWIDTH LATIN SMALL LETTER E +FF46 f # FULLWIDTH LATIN SMALL LETTER F +FF47 g # FULLWIDTH LATIN SMALL LETTER G +FF48 h # FULLWIDTH LATIN SMALL LETTER H +FF49 i # FULLWIDTH LATIN SMALL LETTER I +FF4A j # FULLWIDTH LATIN SMALL LETTER J +FF4B k # FULLWIDTH LATIN SMALL LETTER K +FF4C l # FULLWIDTH LATIN SMALL LETTER L +FF4D m # FULLWIDTH LATIN SMALL LETTER M +FF4E n # FULLWIDTH LATIN SMALL LETTER N +FF4F o # FULLWIDTH LATIN SMALL LETTER O +FF50 p # FULLWIDTH LATIN SMALL LETTER P +FF51 q # FULLWIDTH LATIN SMALL LETTER Q +FF52 r # FULLWIDTH LATIN SMALL LETTER R +FF53 s # FULLWIDTH LATIN SMALL LETTER S +FF54 t # FULLWIDTH LATIN SMALL LETTER T +FF55 u # FULLWIDTH LATIN SMALL LETTER U +FF56 v # FULLWIDTH LATIN SMALL LETTER V +FF57 w # FULLWIDTH LATIN SMALL LETTER W +FF58 x # FULLWIDTH LATIN SMALL LETTER X +FF59 y # FULLWIDTH LATIN SMALL LETTER Y +FF5A z # FULLWIDTH LATIN SMALL LETTER Z +FF5B { # FULLWIDTH LEFT CURLY BRACKET +FF5C | # FULLWIDTH VERTICAL LINE +FF5D } # FULLWIDTH RIGHT CURLY BRACKET +FF5E ~ # FULLWIDTH TILDE +FF5F ⦅ # FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ⦆ # FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 。 # HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 「 # HALFWIDTH LEFT CORNER BRACKET +FF63 」 # HALFWIDTH RIGHT CORNER BRACKET +FF64 、 # HALFWIDTH IDEOGRAPHIC COMMA +FF65 ・ # HALFWIDTH KATAKANA MIDDLE DOT +FF66 ヲ # HALFWIDTH KATAKANA LETTER WO +FF67 ァ # HALFWIDTH KATAKANA LETTER SMALL A +FF68 ィ # HALFWIDTH KATAKANA LETTER SMALL I +FF69 ゥ # HALFWIDTH KATAKANA LETTER SMALL U +FF6A ェ # HALFWIDTH KATAKANA LETTER SMALL E +FF6B ォ # HALFWIDTH KATAKANA LETTER SMALL O +FF6C ャ # HALFWIDTH KATAKANA LETTER SMALL YA +FF6D ュ # HALFWIDTH KATAKANA LETTER SMALL YU +FF6E ョ # HALFWIDTH KATAKANA LETTER SMALL YO +FF6F ッ # HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ー # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71 ア # HALFWIDTH KATAKANA LETTER A +FF72 イ # HALFWIDTH KATAKANA LETTER I +FF73 ウ # HALFWIDTH KATAKANA LETTER U +FF74 エ # HALFWIDTH KATAKANA LETTER E +FF75 オ # HALFWIDTH KATAKANA LETTER O +FF76 カ # HALFWIDTH KATAKANA LETTER KA +FF77 キ # HALFWIDTH KATAKANA LETTER KI +FF78 ク # HALFWIDTH KATAKANA LETTER KU +FF79 ケ # HALFWIDTH KATAKANA LETTER KE +FF7A コ # HALFWIDTH KATAKANA LETTER KO +FF7B サ # HALFWIDTH KATAKANA LETTER SA +FF7C シ # HALFWIDTH KATAKANA LETTER SI +FF7D ス # HALFWIDTH KATAKANA LETTER SU +FF7E セ # HALFWIDTH KATAKANA LETTER SE +FF7F ソ # HALFWIDTH KATAKANA LETTER SO +FF80 タ # HALFWIDTH KATAKANA LETTER TA +FF81 チ # HALFWIDTH KATAKANA LETTER TI +FF82 ツ # HALFWIDTH KATAKANA LETTER TU +FF83 テ # HALFWIDTH KATAKANA LETTER TE +FF84 ト # HALFWIDTH KATAKANA LETTER TO +FF85 ナ # HALFWIDTH KATAKANA LETTER NA +FF86 ニ # HALFWIDTH KATAKANA LETTER NI +FF87 ヌ # HALFWIDTH KATAKANA LETTER NU +FF88 ネ # HALFWIDTH KATAKANA LETTER NE +FF89 ノ # HALFWIDTH KATAKANA LETTER NO +FF8A ハ # HALFWIDTH KATAKANA LETTER HA +FF8B ヒ # HALFWIDTH KATAKANA LETTER HI +FF8C フ # HALFWIDTH KATAKANA LETTER HU +FF8D ヘ # HALFWIDTH KATAKANA LETTER HE +FF8E ホ # HALFWIDTH KATAKANA LETTER HO +FF8F マ # HALFWIDTH KATAKANA LETTER MA +FF90 ミ # HALFWIDTH KATAKANA LETTER MI +FF91 ム # HALFWIDTH KATAKANA LETTER MU +FF92 メ # HALFWIDTH KATAKANA LETTER ME +FF93 モ # HALFWIDTH KATAKANA LETTER MO +FF94 ヤ # HALFWIDTH KATAKANA LETTER YA +FF95 ユ # HALFWIDTH KATAKANA LETTER YU +FF96 ヨ # HALFWIDTH KATAKANA LETTER YO +FF97 ラ # HALFWIDTH KATAKANA LETTER RA +FF98 リ # HALFWIDTH KATAKANA LETTER RI +FF99 ル # HALFWIDTH KATAKANA LETTER RU +FF9A レ # HALFWIDTH KATAKANA LETTER RE +FF9B ロ # HALFWIDTH KATAKANA LETTER RO +FF9C ワ # HALFWIDTH KATAKANA LETTER WA +FF9D ン # HALFWIDTH KATAKANA LETTER N +FF9E ゙ # HALFWIDTH KATAKANA VOICED SOUND MARK +FF9F ゚ # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0 ㅤ # HALFWIDTH HANGUL FILLER +FFA1 ㄱ # HALFWIDTH HANGUL LETTER KIYEOK +FFA2 ㄲ # HALFWIDTH HANGUL LETTER SSANGKIYEOK +FFA3 ㄳ # HALFWIDTH HANGUL LETTER KIYEOK-SIOS +FFA4 ㄴ # HALFWIDTH HANGUL LETTER NIEUN +FFA5 ㄵ # HALFWIDTH HANGUL LETTER NIEUN-CIEUC +FFA6 ㄶ # HALFWIDTH HANGUL LETTER NIEUN-HIEUH +FFA7 ㄷ # HALFWIDTH HANGUL LETTER TIKEUT +FFA8 ㄸ # HALFWIDTH HANGUL LETTER SSANGTIKEUT +FFA9 ㄹ # HALFWIDTH HANGUL LETTER RIEUL +FFAA ㄺ # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK +FFAB ㄻ # HALFWIDTH HANGUL LETTER RIEUL-MIEUM +FFAC ㄼ # HALFWIDTH HANGUL LETTER RIEUL-PIEUP +FFAD ㄽ # HALFWIDTH HANGUL LETTER RIEUL-SIOS +FFAE ㄾ # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH +FFAF ㄿ # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH +FFB0 ㅀ # HALFWIDTH HANGUL LETTER RIEUL-HIEUH +FFB1 ㅁ # HALFWIDTH HANGUL LETTER MIEUM +FFB2 ㅂ # HALFWIDTH HANGUL LETTER PIEUP +FFB3 ㅃ # HALFWIDTH HANGUL LETTER SSANGPIEUP +FFB4 ㅄ # HALFWIDTH HANGUL LETTER PIEUP-SIOS +FFB5 ㅅ # HALFWIDTH HANGUL LETTER SIOS +FFB6 ㅆ # HALFWIDTH HANGUL LETTER SSANGSIOS +FFB7 ㅇ # HALFWIDTH HANGUL LETTER IEUNG +FFB8 ㅈ # HALFWIDTH HANGUL LETTER CIEUC +FFB9 ㅉ # HALFWIDTH HANGUL LETTER SSANGCIEUC +FFBA ㅊ # HALFWIDTH HANGUL LETTER CHIEUCH +FFBB ㅋ # HALFWIDTH HANGUL LETTER KHIEUKH +FFBC ㅌ # HALFWIDTH HANGUL LETTER THIEUTH +FFBD ㅍ # HALFWIDTH HANGUL LETTER PHIEUPH +FFBE ㅎ # HALFWIDTH HANGUL LETTER HIEUH +FFC2 ㅏ # HALFWIDTH HANGUL LETTER A +FFC3 ㅐ # HALFWIDTH HANGUL LETTER AE +FFC4 ㅑ # HALFWIDTH HANGUL LETTER YA +FFC5 ㅒ # HALFWIDTH HANGUL LETTER YAE +FFC6 ㅓ # HALFWIDTH HANGUL LETTER EO +FFC7 ㅔ # HALFWIDTH HANGUL LETTER E +FFCA ㅕ # HALFWIDTH HANGUL LETTER YEO +FFCB ㅖ # HALFWIDTH HANGUL LETTER YE +FFCC ㅗ # HALFWIDTH HANGUL LETTER O +FFCD ㅘ # HALFWIDTH HANGUL LETTER WA +FFCE ㅙ # HALFWIDTH HANGUL LETTER WAE +FFCF ㅚ # HALFWIDTH HANGUL LETTER OE +FFD2 ㅛ # HALFWIDTH HANGUL LETTER YO +FFD3 ㅜ # HALFWIDTH HANGUL LETTER U +FFD4 ㅝ # HALFWIDTH HANGUL LETTER WEO +FFD5 ㅞ # HALFWIDTH HANGUL LETTER WE +FFD6 ㅟ # HALFWIDTH HANGUL LETTER WI +FFD7 ㅠ # HALFWIDTH HANGUL LETTER YU +FFDA ㅡ # HALFWIDTH HANGUL LETTER EU +FFDB ㅢ # HALFWIDTH HANGUL LETTER YI +FFDC ㅣ # HALFWIDTH HANGUL LETTER I +FFE0 ¢ # FULLWIDTH CENT SIGN +FFE1 £ # FULLWIDTH POUND SIGN +FFE2 ¬ # FULLWIDTH NOT SIGN +FFE3 ¯ # FULLWIDTH MACRON +FFE4 ¦ # FULLWIDTH BROKEN BAR +FFE5 ¥ # FULLWIDTH YEN SIGN +FFE6 ₩ # FULLWIDTH WON SIGN +FFE8 │ # HALFWIDTH FORMS LIGHT VERTICAL +FFE9 ← # HALFWIDTH LEFTWARDS ARROW +FFEA ↑ # HALFWIDTH UPWARDS ARROW +FFEB → # HALFWIDTH RIGHTWARDS ARROW +FFEC ↓ # HALFWIDTH DOWNWARDS ARROW +FFED ■ # HALFWIDTH BLACK SQUARE +FFEE ○ # HALFWIDTH WHITE CIRCLE +1D400 A # MATHEMATICAL BOLD CAPITAL A +1D401 B # MATHEMATICAL BOLD CAPITAL B +1D402 C # MATHEMATICAL BOLD CAPITAL C +1D403 D # MATHEMATICAL BOLD CAPITAL D +1D404 E # MATHEMATICAL BOLD CAPITAL E +1D405 F # MATHEMATICAL BOLD CAPITAL F +1D406 G # MATHEMATICAL BOLD CAPITAL G +1D407 H # MATHEMATICAL BOLD CAPITAL H +1D408 I # MATHEMATICAL BOLD CAPITAL I +1D409 J # MATHEMATICAL BOLD CAPITAL J +1D40A K # MATHEMATICAL BOLD CAPITAL K +1D40B L # MATHEMATICAL BOLD CAPITAL L +1D40C M # MATHEMATICAL BOLD CAPITAL M +1D40D N # MATHEMATICAL BOLD CAPITAL N +1D40E O # MATHEMATICAL BOLD CAPITAL O +1D40F P # MATHEMATICAL BOLD CAPITAL P +1D410 Q # MATHEMATICAL BOLD CAPITAL Q +1D411 R # MATHEMATICAL BOLD CAPITAL R +1D412 S # MATHEMATICAL BOLD CAPITAL S +1D413 T # MATHEMATICAL BOLD CAPITAL T +1D414 U # MATHEMATICAL BOLD CAPITAL U +1D415 V # MATHEMATICAL BOLD CAPITAL V +1D416 W # MATHEMATICAL BOLD CAPITAL W +1D417 X # MATHEMATICAL BOLD CAPITAL X +1D418 Y # MATHEMATICAL BOLD CAPITAL Y +1D419 Z # MATHEMATICAL BOLD CAPITAL Z +1D41A a # MATHEMATICAL BOLD SMALL A +1D41B b # MATHEMATICAL BOLD SMALL B +1D41C c # MATHEMATICAL BOLD SMALL C +1D41D d # MATHEMATICAL BOLD SMALL D +1D41E e # MATHEMATICAL BOLD SMALL E +1D41F f # MATHEMATICAL BOLD SMALL F +1D420 g # MATHEMATICAL BOLD SMALL G +1D421 h # MATHEMATICAL BOLD SMALL H +1D422 i # MATHEMATICAL BOLD SMALL I +1D423 j # MATHEMATICAL BOLD SMALL J +1D424 k # MATHEMATICAL BOLD SMALL K +1D425 l # MATHEMATICAL BOLD SMALL L +1D426 m # MATHEMATICAL BOLD SMALL M +1D427 n # MATHEMATICAL BOLD SMALL N +1D428 o # MATHEMATICAL BOLD SMALL O +1D429 p # MATHEMATICAL BOLD SMALL P +1D42A q # MATHEMATICAL BOLD SMALL Q +1D42B r # MATHEMATICAL BOLD SMALL R +1D42C s # MATHEMATICAL BOLD SMALL S +1D42D t # MATHEMATICAL BOLD SMALL T +1D42E u # MATHEMATICAL BOLD SMALL U +1D42F v # MATHEMATICAL BOLD SMALL V +1D430 w # MATHEMATICAL BOLD SMALL W +1D431 x # MATHEMATICAL BOLD SMALL X +1D432 y # MATHEMATICAL BOLD SMALL Y +1D433 z # MATHEMATICAL BOLD SMALL Z +1D434 A # MATHEMATICAL ITALIC CAPITAL A +1D435 B # MATHEMATICAL ITALIC CAPITAL B +1D436 C # MATHEMATICAL ITALIC CAPITAL C +1D437 D # MATHEMATICAL ITALIC CAPITAL D +1D438 E # MATHEMATICAL ITALIC CAPITAL E +1D439 F # MATHEMATICAL ITALIC CAPITAL F +1D43A G # MATHEMATICAL ITALIC CAPITAL G +1D43B H # MATHEMATICAL ITALIC CAPITAL H +1D43C I # MATHEMATICAL ITALIC CAPITAL I +1D43D J # MATHEMATICAL ITALIC CAPITAL J +1D43E K # MATHEMATICAL ITALIC CAPITAL K +1D43F L # MATHEMATICAL ITALIC CAPITAL L +1D440 M # MATHEMATICAL ITALIC CAPITAL M +1D441 N # MATHEMATICAL ITALIC CAPITAL N +1D442 O # MATHEMATICAL ITALIC CAPITAL O +1D443 P # MATHEMATICAL ITALIC CAPITAL P +1D444 Q # MATHEMATICAL ITALIC CAPITAL Q +1D445 R # MATHEMATICAL ITALIC CAPITAL R +1D446 S # MATHEMATICAL ITALIC CAPITAL S +1D447 T # MATHEMATICAL ITALIC CAPITAL T +1D448 U # MATHEMATICAL ITALIC CAPITAL U +1D449 V # MATHEMATICAL ITALIC CAPITAL V +1D44A W # MATHEMATICAL ITALIC CAPITAL W +1D44B X # MATHEMATICAL ITALIC CAPITAL X +1D44C Y # MATHEMATICAL ITALIC CAPITAL Y +1D44D Z # MATHEMATICAL ITALIC CAPITAL Z +1D44E a # MATHEMATICAL ITALIC SMALL A +1D44F b # MATHEMATICAL ITALIC SMALL B +1D450 c # MATHEMATICAL ITALIC SMALL C +1D451 d # MATHEMATICAL ITALIC SMALL D +1D452 e # MATHEMATICAL ITALIC SMALL E +1D453 f # MATHEMATICAL ITALIC SMALL F +1D454 g # MATHEMATICAL ITALIC SMALL G +1D456 i # MATHEMATICAL ITALIC SMALL I +1D457 j # MATHEMATICAL ITALIC SMALL J +1D458 k # MATHEMATICAL ITALIC SMALL K +1D459 l # MATHEMATICAL ITALIC SMALL L +1D45A m # MATHEMATICAL ITALIC SMALL M +1D45B n # MATHEMATICAL ITALIC SMALL N +1D45C o # MATHEMATICAL ITALIC SMALL O +1D45D p # MATHEMATICAL ITALIC SMALL P +1D45E q # MATHEMATICAL ITALIC SMALL Q +1D45F r # MATHEMATICAL ITALIC SMALL R +1D460 s # MATHEMATICAL ITALIC SMALL S +1D461 t # MATHEMATICAL ITALIC SMALL T +1D462 u # MATHEMATICAL ITALIC SMALL U +1D463 v # MATHEMATICAL ITALIC SMALL V +1D464 w # MATHEMATICAL ITALIC SMALL W +1D465 x # MATHEMATICAL ITALIC SMALL X +1D466 y # MATHEMATICAL ITALIC SMALL Y +1D467 z # MATHEMATICAL ITALIC SMALL Z +1D468 A # MATHEMATICAL BOLD ITALIC CAPITAL A +1D469 B # MATHEMATICAL BOLD ITALIC CAPITAL B +1D46A C # MATHEMATICAL BOLD ITALIC CAPITAL C +1D46B D # MATHEMATICAL BOLD ITALIC CAPITAL D +1D46C E # MATHEMATICAL BOLD ITALIC CAPITAL E +1D46D F # MATHEMATICAL BOLD ITALIC CAPITAL F +1D46E G # MATHEMATICAL BOLD ITALIC CAPITAL G +1D46F H # MATHEMATICAL BOLD ITALIC CAPITAL H +1D470 I # MATHEMATICAL BOLD ITALIC CAPITAL I +1D471 J # MATHEMATICAL BOLD ITALIC CAPITAL J +1D472 K # MATHEMATICAL BOLD ITALIC CAPITAL K +1D473 L # MATHEMATICAL BOLD ITALIC CAPITAL L +1D474 M # MATHEMATICAL BOLD ITALIC CAPITAL M +1D475 N # MATHEMATICAL BOLD ITALIC CAPITAL N +1D476 O # MATHEMATICAL BOLD ITALIC CAPITAL O +1D477 P # MATHEMATICAL BOLD ITALIC CAPITAL P +1D478 Q # MATHEMATICAL BOLD ITALIC CAPITAL Q +1D479 R # MATHEMATICAL BOLD ITALIC CAPITAL R +1D47A S # MATHEMATICAL BOLD ITALIC CAPITAL S +1D47B T # MATHEMATICAL BOLD ITALIC CAPITAL T +1D47C U # MATHEMATICAL BOLD ITALIC CAPITAL U +1D47D V # MATHEMATICAL BOLD ITALIC CAPITAL V +1D47E W # MATHEMATICAL BOLD ITALIC CAPITAL W +1D47F X # MATHEMATICAL BOLD ITALIC CAPITAL X +1D480 Y # MATHEMATICAL BOLD ITALIC CAPITAL Y +1D481 Z # MATHEMATICAL BOLD ITALIC CAPITAL Z +1D482 a # MATHEMATICAL BOLD ITALIC SMALL A +1D483 b # MATHEMATICAL BOLD ITALIC SMALL B +1D484 c # MATHEMATICAL BOLD ITALIC SMALL C +1D485 d # MATHEMATICAL BOLD ITALIC SMALL D +1D486 e # MATHEMATICAL BOLD ITALIC SMALL E +1D487 f # MATHEMATICAL BOLD ITALIC SMALL F +1D488 g # MATHEMATICAL BOLD ITALIC SMALL G +1D489 h # MATHEMATICAL BOLD ITALIC SMALL H +1D48A i # MATHEMATICAL BOLD ITALIC SMALL I +1D48B j # MATHEMATICAL BOLD ITALIC SMALL J +1D48C k # MATHEMATICAL BOLD ITALIC SMALL K +1D48D l # MATHEMATICAL BOLD ITALIC SMALL L +1D48E m # MATHEMATICAL BOLD ITALIC SMALL M +1D48F n # MATHEMATICAL BOLD ITALIC SMALL N +1D490 o # MATHEMATICAL BOLD ITALIC SMALL O +1D491 p # MATHEMATICAL BOLD ITALIC SMALL P +1D492 q # MATHEMATICAL BOLD ITALIC SMALL Q +1D493 r # MATHEMATICAL BOLD ITALIC SMALL R +1D494 s # MATHEMATICAL BOLD ITALIC SMALL S +1D495 t # MATHEMATICAL BOLD ITALIC SMALL T +1D496 u # MATHEMATICAL BOLD ITALIC SMALL U +1D497 v # MATHEMATICAL BOLD ITALIC SMALL V +1D498 w # MATHEMATICAL BOLD ITALIC SMALL W +1D499 x # MATHEMATICAL BOLD ITALIC SMALL X +1D49A y # MATHEMATICAL BOLD ITALIC SMALL Y +1D49B z # MATHEMATICAL BOLD ITALIC SMALL Z +1D49C A # MATHEMATICAL SCRIPT CAPITAL A +1D49E C # MATHEMATICAL SCRIPT CAPITAL C +1D49F D # MATHEMATICAL SCRIPT CAPITAL D +1D4A2 G # MATHEMATICAL SCRIPT CAPITAL G +1D4A5 J # MATHEMATICAL SCRIPT CAPITAL J +1D4A6 K # MATHEMATICAL SCRIPT CAPITAL K +1D4A9 N # MATHEMATICAL SCRIPT CAPITAL N +1D4AA O # MATHEMATICAL SCRIPT CAPITAL O +1D4AB P # MATHEMATICAL SCRIPT CAPITAL P +1D4AC Q # MATHEMATICAL SCRIPT CAPITAL Q +1D4AE S # MATHEMATICAL SCRIPT CAPITAL S +1D4AF T # MATHEMATICAL SCRIPT CAPITAL T +1D4B0 U # MATHEMATICAL SCRIPT CAPITAL U +1D4B1 V # MATHEMATICAL SCRIPT CAPITAL V +1D4B2 W # MATHEMATICAL SCRIPT CAPITAL W +1D4B3 X # MATHEMATICAL SCRIPT CAPITAL X +1D4B4 Y # MATHEMATICAL SCRIPT CAPITAL Y +1D4B5 Z # MATHEMATICAL SCRIPT CAPITAL Z +1D4B6 a # MATHEMATICAL SCRIPT SMALL A +1D4B7 b # MATHEMATICAL SCRIPT SMALL B +1D4B8 c # MATHEMATICAL SCRIPT SMALL C +1D4B9 d # MATHEMATICAL SCRIPT SMALL D +1D4BB f # MATHEMATICAL SCRIPT SMALL F +1D4BD h # MATHEMATICAL SCRIPT SMALL H +1D4BE i # MATHEMATICAL SCRIPT SMALL I +1D4BF j # MATHEMATICAL SCRIPT SMALL J +1D4C0 k # MATHEMATICAL SCRIPT SMALL K +1D4C1 l # MATHEMATICAL SCRIPT SMALL L +1D4C2 m # MATHEMATICAL SCRIPT SMALL M +1D4C3 n # MATHEMATICAL SCRIPT SMALL N +1D4C5 p # MATHEMATICAL SCRIPT SMALL P +1D4C6 q # MATHEMATICAL SCRIPT SMALL Q +1D4C7 r # MATHEMATICAL SCRIPT SMALL R +1D4C8 s # MATHEMATICAL SCRIPT SMALL S +1D4C9 t # MATHEMATICAL SCRIPT SMALL T +1D4CA u # MATHEMATICAL SCRIPT SMALL U +1D4CB v # MATHEMATICAL SCRIPT SMALL V +1D4CC w # MATHEMATICAL SCRIPT SMALL W +1D4CD x # MATHEMATICAL SCRIPT SMALL X +1D4CE y # MATHEMATICAL SCRIPT SMALL Y +1D4CF z # MATHEMATICAL SCRIPT SMALL Z +1D4D0 A # MATHEMATICAL BOLD SCRIPT CAPITAL A +1D4D1 B # MATHEMATICAL BOLD SCRIPT CAPITAL B +1D4D2 C # MATHEMATICAL BOLD SCRIPT CAPITAL C +1D4D3 D # MATHEMATICAL BOLD SCRIPT CAPITAL D +1D4D4 E # MATHEMATICAL BOLD SCRIPT CAPITAL E +1D4D5 F # MATHEMATICAL BOLD SCRIPT CAPITAL F +1D4D6 G # MATHEMATICAL BOLD SCRIPT CAPITAL G +1D4D7 H # MATHEMATICAL BOLD SCRIPT CAPITAL H +1D4D8 I # MATHEMATICAL BOLD SCRIPT CAPITAL I +1D4D9 J # MATHEMATICAL BOLD SCRIPT CAPITAL J +1D4DA K # MATHEMATICAL BOLD SCRIPT CAPITAL K +1D4DB L # MATHEMATICAL BOLD SCRIPT CAPITAL L +1D4DC M # MATHEMATICAL BOLD SCRIPT CAPITAL M +1D4DD N # MATHEMATICAL BOLD SCRIPT CAPITAL N +1D4DE O # MATHEMATICAL BOLD SCRIPT CAPITAL O +1D4DF P # MATHEMATICAL BOLD SCRIPT CAPITAL P +1D4E0 Q # MATHEMATICAL BOLD SCRIPT CAPITAL Q +1D4E1 R # MATHEMATICAL BOLD SCRIPT CAPITAL R +1D4E2 S # MATHEMATICAL BOLD SCRIPT CAPITAL S +1D4E3 T # MATHEMATICAL BOLD SCRIPT CAPITAL T +1D4E4 U # MATHEMATICAL BOLD SCRIPT CAPITAL U +1D4E5 V # MATHEMATICAL BOLD SCRIPT CAPITAL V +1D4E6 W # MATHEMATICAL BOLD SCRIPT CAPITAL W +1D4E7 X # MATHEMATICAL BOLD SCRIPT CAPITAL X +1D4E8 Y # MATHEMATICAL BOLD SCRIPT CAPITAL Y +1D4E9 Z # MATHEMATICAL BOLD SCRIPT CAPITAL Z +1D4EA a # MATHEMATICAL BOLD SCRIPT SMALL A +1D4EB b # MATHEMATICAL BOLD SCRIPT SMALL B +1D4EC c # MATHEMATICAL BOLD SCRIPT SMALL C +1D4ED d # MATHEMATICAL BOLD SCRIPT SMALL D +1D4EE e # MATHEMATICAL BOLD SCRIPT SMALL E +1D4EF f # MATHEMATICAL BOLD SCRIPT SMALL F +1D4F0 g # MATHEMATICAL BOLD SCRIPT SMALL G +1D4F1 h # MATHEMATICAL BOLD SCRIPT SMALL H +1D4F2 i # MATHEMATICAL BOLD SCRIPT SMALL I +1D4F3 j # MATHEMATICAL BOLD SCRIPT SMALL J +1D4F4 k # MATHEMATICAL BOLD SCRIPT SMALL K +1D4F5 l # MATHEMATICAL BOLD SCRIPT SMALL L +1D4F6 m # MATHEMATICAL BOLD SCRIPT SMALL M +1D4F7 n # MATHEMATICAL BOLD SCRIPT SMALL N +1D4F8 o # MATHEMATICAL BOLD SCRIPT SMALL O +1D4F9 p # MATHEMATICAL BOLD SCRIPT SMALL P +1D4FA q # MATHEMATICAL BOLD SCRIPT SMALL Q +1D4FB r # MATHEMATICAL BOLD SCRIPT SMALL R +1D4FC s # MATHEMATICAL BOLD SCRIPT SMALL S +1D4FD t # MATHEMATICAL BOLD SCRIPT SMALL T +1D4FE u # MATHEMATICAL BOLD SCRIPT SMALL U +1D4FF v # MATHEMATICAL BOLD SCRIPT SMALL V +1D500 w # MATHEMATICAL BOLD SCRIPT SMALL W +1D501 x # MATHEMATICAL BOLD SCRIPT SMALL X +1D502 y # MATHEMATICAL BOLD SCRIPT SMALL Y +1D503 z # MATHEMATICAL BOLD SCRIPT SMALL Z +1D504 A # MATHEMATICAL FRAKTUR CAPITAL A +1D505 B # MATHEMATICAL FRAKTUR CAPITAL B +1D507 D # MATHEMATICAL FRAKTUR CAPITAL D +1D508 E # MATHEMATICAL FRAKTUR CAPITAL E +1D509 F # MATHEMATICAL FRAKTUR CAPITAL F +1D50A G # MATHEMATICAL FRAKTUR CAPITAL G +1D50D J # MATHEMATICAL FRAKTUR CAPITAL J +1D50E K # MATHEMATICAL FRAKTUR CAPITAL K +1D50F L # MATHEMATICAL FRAKTUR CAPITAL L +1D510 M # MATHEMATICAL FRAKTUR CAPITAL M +1D511 N # MATHEMATICAL FRAKTUR CAPITAL N +1D512 O # MATHEMATICAL FRAKTUR CAPITAL O +1D513 P # MATHEMATICAL FRAKTUR CAPITAL P +1D514 Q # MATHEMATICAL FRAKTUR CAPITAL Q +1D516 S # MATHEMATICAL FRAKTUR CAPITAL S +1D517 T # MATHEMATICAL FRAKTUR CAPITAL T +1D518 U # MATHEMATICAL FRAKTUR CAPITAL U +1D519 V # MATHEMATICAL FRAKTUR CAPITAL V +1D51A W # MATHEMATICAL FRAKTUR CAPITAL W +1D51B X # MATHEMATICAL FRAKTUR CAPITAL X +1D51C Y # MATHEMATICAL FRAKTUR CAPITAL Y +1D51E a # MATHEMATICAL FRAKTUR SMALL A +1D51F b # MATHEMATICAL FRAKTUR SMALL B +1D520 c # MATHEMATICAL FRAKTUR SMALL C +1D521 d # MATHEMATICAL FRAKTUR SMALL D +1D522 e # MATHEMATICAL FRAKTUR SMALL E +1D523 f # MATHEMATICAL FRAKTUR SMALL F +1D524 g # MATHEMATICAL FRAKTUR SMALL G +1D525 h # MATHEMATICAL FRAKTUR SMALL H +1D526 i # MATHEMATICAL FRAKTUR SMALL I +1D527 j # MATHEMATICAL FRAKTUR SMALL J +1D528 k # MATHEMATICAL FRAKTUR SMALL K +1D529 l # MATHEMATICAL FRAKTUR SMALL L +1D52A m # MATHEMATICAL FRAKTUR SMALL M +1D52B n # MATHEMATICAL FRAKTUR SMALL N +1D52C o # MATHEMATICAL FRAKTUR SMALL O +1D52D p # MATHEMATICAL FRAKTUR SMALL P +1D52E q # MATHEMATICAL FRAKTUR SMALL Q +1D52F r # MATHEMATICAL FRAKTUR SMALL R +1D530 s # MATHEMATICAL FRAKTUR SMALL S +1D531 t # MATHEMATICAL FRAKTUR SMALL T +1D532 u # MATHEMATICAL FRAKTUR SMALL U +1D533 v # MATHEMATICAL FRAKTUR SMALL V +1D534 w # MATHEMATICAL FRAKTUR SMALL W +1D535 x # MATHEMATICAL FRAKTUR SMALL X +1D536 y # MATHEMATICAL FRAKTUR SMALL Y +1D537 z # MATHEMATICAL FRAKTUR SMALL Z +1D538 A # MATHEMATICAL DOUBLE-STRUCK CAPITAL A +1D539 B # MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B D # MATHEMATICAL DOUBLE-STRUCK CAPITAL D +1D53C E # MATHEMATICAL DOUBLE-STRUCK CAPITAL E +1D53D F # MATHEMATICAL DOUBLE-STRUCK CAPITAL F +1D53E G # MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540 I # MATHEMATICAL DOUBLE-STRUCK CAPITAL I +1D541 J # MATHEMATICAL DOUBLE-STRUCK CAPITAL J +1D542 K # MATHEMATICAL DOUBLE-STRUCK CAPITAL K +1D543 L # MATHEMATICAL DOUBLE-STRUCK CAPITAL L +1D544 M # MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 O # MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A S # MATHEMATICAL DOUBLE-STRUCK CAPITAL S +1D54B T # MATHEMATICAL DOUBLE-STRUCK CAPITAL T +1D54C U # MATHEMATICAL DOUBLE-STRUCK CAPITAL U +1D54D V # MATHEMATICAL DOUBLE-STRUCK CAPITAL V +1D54E W # MATHEMATICAL DOUBLE-STRUCK CAPITAL W +1D54F X # MATHEMATICAL DOUBLE-STRUCK CAPITAL X +1D550 Y # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552 a # MATHEMATICAL DOUBLE-STRUCK SMALL A +1D553 b # MATHEMATICAL DOUBLE-STRUCK SMALL B +1D554 c # MATHEMATICAL DOUBLE-STRUCK SMALL C +1D555 d # MATHEMATICAL DOUBLE-STRUCK SMALL D +1D556 e # MATHEMATICAL DOUBLE-STRUCK SMALL E +1D557 f # MATHEMATICAL DOUBLE-STRUCK SMALL F +1D558 g # MATHEMATICAL DOUBLE-STRUCK SMALL G +1D559 h # MATHEMATICAL DOUBLE-STRUCK SMALL H +1D55A i # MATHEMATICAL DOUBLE-STRUCK SMALL I +1D55B j # MATHEMATICAL DOUBLE-STRUCK SMALL J +1D55C k # MATHEMATICAL DOUBLE-STRUCK SMALL K +1D55D l # MATHEMATICAL DOUBLE-STRUCK SMALL L +1D55E m # MATHEMATICAL DOUBLE-STRUCK SMALL M +1D55F n # MATHEMATICAL DOUBLE-STRUCK SMALL N +1D560 o # MATHEMATICAL DOUBLE-STRUCK SMALL O +1D561 p # MATHEMATICAL DOUBLE-STRUCK SMALL P +1D562 q # MATHEMATICAL DOUBLE-STRUCK SMALL Q +1D563 r # MATHEMATICAL DOUBLE-STRUCK SMALL R +1D564 s # MATHEMATICAL DOUBLE-STRUCK SMALL S +1D565 t # MATHEMATICAL DOUBLE-STRUCK SMALL T +1D566 u # MATHEMATICAL DOUBLE-STRUCK SMALL U +1D567 v # MATHEMATICAL DOUBLE-STRUCK SMALL V +1D568 w # MATHEMATICAL DOUBLE-STRUCK SMALL W +1D569 x # MATHEMATICAL DOUBLE-STRUCK SMALL X +1D56A y # MATHEMATICAL DOUBLE-STRUCK SMALL Y +1D56B z # MATHEMATICAL DOUBLE-STRUCK SMALL Z +1D56C A # MATHEMATICAL BOLD FRAKTUR CAPITAL A +1D56D B # MATHEMATICAL BOLD FRAKTUR CAPITAL B +1D56E C # MATHEMATICAL BOLD FRAKTUR CAPITAL C +1D56F D # MATHEMATICAL BOLD FRAKTUR CAPITAL D +1D570 E # MATHEMATICAL BOLD FRAKTUR CAPITAL E +1D571 F # MATHEMATICAL BOLD FRAKTUR CAPITAL F +1D572 G # MATHEMATICAL BOLD FRAKTUR CAPITAL G +1D573 H # MATHEMATICAL BOLD FRAKTUR CAPITAL H +1D574 I # MATHEMATICAL BOLD FRAKTUR CAPITAL I +1D575 J # MATHEMATICAL BOLD FRAKTUR CAPITAL J +1D576 K # MATHEMATICAL BOLD FRAKTUR CAPITAL K +1D577 L # MATHEMATICAL BOLD FRAKTUR CAPITAL L +1D578 M # MATHEMATICAL BOLD FRAKTUR CAPITAL M +1D579 N # MATHEMATICAL BOLD FRAKTUR CAPITAL N +1D57A O # MATHEMATICAL BOLD FRAKTUR CAPITAL O +1D57B P # MATHEMATICAL BOLD FRAKTUR CAPITAL P +1D57C Q # MATHEMATICAL BOLD FRAKTUR CAPITAL Q +1D57D R # MATHEMATICAL BOLD FRAKTUR CAPITAL R +1D57E S # MATHEMATICAL BOLD FRAKTUR CAPITAL S +1D57F T # MATHEMATICAL BOLD FRAKTUR CAPITAL T +1D580 U # MATHEMATICAL BOLD FRAKTUR CAPITAL U +1D581 V # MATHEMATICAL BOLD FRAKTUR CAPITAL V +1D582 W # MATHEMATICAL BOLD FRAKTUR CAPITAL W +1D583 X # MATHEMATICAL BOLD FRAKTUR CAPITAL X +1D584 Y # MATHEMATICAL BOLD FRAKTUR CAPITAL Y +1D585 Z # MATHEMATICAL BOLD FRAKTUR CAPITAL Z +1D586 a # MATHEMATICAL BOLD FRAKTUR SMALL A +1D587 b # MATHEMATICAL BOLD FRAKTUR SMALL B +1D588 c # MATHEMATICAL BOLD FRAKTUR SMALL C +1D589 d # MATHEMATICAL BOLD FRAKTUR SMALL D +1D58A e # MATHEMATICAL BOLD FRAKTUR SMALL E +1D58B f # MATHEMATICAL BOLD FRAKTUR SMALL F +1D58C g # MATHEMATICAL BOLD FRAKTUR SMALL G +1D58D h # MATHEMATICAL BOLD FRAKTUR SMALL H +1D58E i # MATHEMATICAL BOLD FRAKTUR SMALL I +1D58F j # MATHEMATICAL BOLD FRAKTUR SMALL J +1D590 k # MATHEMATICAL BOLD FRAKTUR SMALL K +1D591 l # MATHEMATICAL BOLD FRAKTUR SMALL L +1D592 m # MATHEMATICAL BOLD FRAKTUR SMALL M +1D593 n # MATHEMATICAL BOLD FRAKTUR SMALL N +1D594 o # MATHEMATICAL BOLD FRAKTUR SMALL O +1D595 p # MATHEMATICAL BOLD FRAKTUR SMALL P +1D596 q # MATHEMATICAL BOLD FRAKTUR SMALL Q +1D597 r # MATHEMATICAL BOLD FRAKTUR SMALL R +1D598 s # MATHEMATICAL BOLD FRAKTUR SMALL S +1D599 t # MATHEMATICAL BOLD FRAKTUR SMALL T +1D59A u # MATHEMATICAL BOLD FRAKTUR SMALL U +1D59B v # MATHEMATICAL BOLD FRAKTUR SMALL V +1D59C w # MATHEMATICAL BOLD FRAKTUR SMALL W +1D59D x # MATHEMATICAL BOLD FRAKTUR SMALL X +1D59E y # MATHEMATICAL BOLD FRAKTUR SMALL Y +1D59F z # MATHEMATICAL BOLD FRAKTUR SMALL Z +1D5A0 A # MATHEMATICAL SANS-SERIF CAPITAL A +1D5A1 B # MATHEMATICAL SANS-SERIF CAPITAL B +1D5A2 C # MATHEMATICAL SANS-SERIF CAPITAL C +1D5A3 D # MATHEMATICAL SANS-SERIF CAPITAL D +1D5A4 E # MATHEMATICAL SANS-SERIF CAPITAL E +1D5A5 F # MATHEMATICAL SANS-SERIF CAPITAL F +1D5A6 G # MATHEMATICAL SANS-SERIF CAPITAL G +1D5A7 H # MATHEMATICAL SANS-SERIF CAPITAL H +1D5A8 I # MATHEMATICAL SANS-SERIF CAPITAL I +1D5A9 J # MATHEMATICAL SANS-SERIF CAPITAL J +1D5AA K # MATHEMATICAL SANS-SERIF CAPITAL K +1D5AB L # MATHEMATICAL SANS-SERIF CAPITAL L +1D5AC M # MATHEMATICAL SANS-SERIF CAPITAL M +1D5AD N # MATHEMATICAL SANS-SERIF CAPITAL N +1D5AE O # MATHEMATICAL SANS-SERIF CAPITAL O +1D5AF P # MATHEMATICAL SANS-SERIF CAPITAL P +1D5B0 Q # MATHEMATICAL SANS-SERIF CAPITAL Q +1D5B1 R # MATHEMATICAL SANS-SERIF CAPITAL R +1D5B2 S # MATHEMATICAL SANS-SERIF CAPITAL S +1D5B3 T # MATHEMATICAL SANS-SERIF CAPITAL T +1D5B4 U # MATHEMATICAL SANS-SERIF CAPITAL U +1D5B5 V # MATHEMATICAL SANS-SERIF CAPITAL V +1D5B6 W # MATHEMATICAL SANS-SERIF CAPITAL W +1D5B7 X # MATHEMATICAL SANS-SERIF CAPITAL X +1D5B8 Y # MATHEMATICAL SANS-SERIF CAPITAL Y +1D5B9 Z # MATHEMATICAL SANS-SERIF CAPITAL Z +1D5BA a # MATHEMATICAL SANS-SERIF SMALL A +1D5BB b # MATHEMATICAL SANS-SERIF SMALL B +1D5BC c # MATHEMATICAL SANS-SERIF SMALL C +1D5BD d # MATHEMATICAL SANS-SERIF SMALL D +1D5BE e # MATHEMATICAL SANS-SERIF SMALL E +1D5BF f # MATHEMATICAL SANS-SERIF SMALL F +1D5C0 g # MATHEMATICAL SANS-SERIF SMALL G +1D5C1 h # MATHEMATICAL SANS-SERIF SMALL H +1D5C2 i # MATHEMATICAL SANS-SERIF SMALL I +1D5C3 j # MATHEMATICAL SANS-SERIF SMALL J +1D5C4 k # MATHEMATICAL SANS-SERIF SMALL K +1D5C5 l # MATHEMATICAL SANS-SERIF SMALL L +1D5C6 m # MATHEMATICAL SANS-SERIF SMALL M +1D5C7 n # MATHEMATICAL SANS-SERIF SMALL N +1D5C8 o # MATHEMATICAL SANS-SERIF SMALL O +1D5C9 p # MATHEMATICAL SANS-SERIF SMALL P +1D5CA q # MATHEMATICAL SANS-SERIF SMALL Q +1D5CB r # MATHEMATICAL SANS-SERIF SMALL R +1D5CC s # MATHEMATICAL SANS-SERIF SMALL S +1D5CD t # MATHEMATICAL SANS-SERIF SMALL T +1D5CE u # MATHEMATICAL SANS-SERIF SMALL U +1D5CF v # MATHEMATICAL SANS-SERIF SMALL V +1D5D0 w # MATHEMATICAL SANS-SERIF SMALL W +1D5D1 x # MATHEMATICAL SANS-SERIF SMALL X +1D5D2 y # MATHEMATICAL SANS-SERIF SMALL Y +1D5D3 z # MATHEMATICAL SANS-SERIF SMALL Z +1D5D4 A # MATHEMATICAL SANS-SERIF BOLD CAPITAL A +1D5D5 B # MATHEMATICAL SANS-SERIF BOLD CAPITAL B +1D5D6 C # MATHEMATICAL SANS-SERIF BOLD CAPITAL C +1D5D7 D # MATHEMATICAL SANS-SERIF BOLD CAPITAL D +1D5D8 E # MATHEMATICAL SANS-SERIF BOLD CAPITAL E +1D5D9 F # MATHEMATICAL SANS-SERIF BOLD CAPITAL F +1D5DA G # MATHEMATICAL SANS-SERIF BOLD CAPITAL G +1D5DB H # MATHEMATICAL SANS-SERIF BOLD CAPITAL H +1D5DC I # MATHEMATICAL SANS-SERIF BOLD CAPITAL I +1D5DD J # MATHEMATICAL SANS-SERIF BOLD CAPITAL J +1D5DE K # MATHEMATICAL SANS-SERIF BOLD CAPITAL K +1D5DF L # MATHEMATICAL SANS-SERIF BOLD CAPITAL L +1D5E0 M # MATHEMATICAL SANS-SERIF BOLD CAPITAL M +1D5E1 N # MATHEMATICAL SANS-SERIF BOLD CAPITAL N +1D5E2 O # MATHEMATICAL SANS-SERIF BOLD CAPITAL O +1D5E3 P # MATHEMATICAL SANS-SERIF BOLD CAPITAL P +1D5E4 Q # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q +1D5E5 R # MATHEMATICAL SANS-SERIF BOLD CAPITAL R +1D5E6 S # MATHEMATICAL SANS-SERIF BOLD CAPITAL S +1D5E7 T # MATHEMATICAL SANS-SERIF BOLD CAPITAL T +1D5E8 U # MATHEMATICAL SANS-SERIF BOLD CAPITAL U +1D5E9 V # MATHEMATICAL SANS-SERIF BOLD CAPITAL V +1D5EA W # MATHEMATICAL SANS-SERIF BOLD CAPITAL W +1D5EB X # MATHEMATICAL SANS-SERIF BOLD CAPITAL X +1D5EC Y # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y +1D5ED Z # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z +1D5EE a # MATHEMATICAL SANS-SERIF BOLD SMALL A +1D5EF b # MATHEMATICAL SANS-SERIF BOLD SMALL B +1D5F0 c # MATHEMATICAL SANS-SERIF BOLD SMALL C +1D5F1 d # MATHEMATICAL SANS-SERIF BOLD SMALL D +1D5F2 e # MATHEMATICAL SANS-SERIF BOLD SMALL E +1D5F3 f # MATHEMATICAL SANS-SERIF BOLD SMALL F +1D5F4 g # MATHEMATICAL SANS-SERIF BOLD SMALL G +1D5F5 h # MATHEMATICAL SANS-SERIF BOLD SMALL H +1D5F6 i # MATHEMATICAL SANS-SERIF BOLD SMALL I +1D5F7 j # MATHEMATICAL SANS-SERIF BOLD SMALL J +1D5F8 k # MATHEMATICAL SANS-SERIF BOLD SMALL K +1D5F9 l # MATHEMATICAL SANS-SERIF BOLD SMALL L +1D5FA m # MATHEMATICAL SANS-SERIF BOLD SMALL M +1D5FB n # MATHEMATICAL SANS-SERIF BOLD SMALL N +1D5FC o # MATHEMATICAL SANS-SERIF BOLD SMALL O +1D5FD p # MATHEMATICAL SANS-SERIF BOLD SMALL P +1D5FE q # MATHEMATICAL SANS-SERIF BOLD SMALL Q +1D5FF r # MATHEMATICAL SANS-SERIF BOLD SMALL R +1D600 s # MATHEMATICAL SANS-SERIF BOLD SMALL S +1D601 t # MATHEMATICAL SANS-SERIF BOLD SMALL T +1D602 u # MATHEMATICAL SANS-SERIF BOLD SMALL U +1D603 v # MATHEMATICAL SANS-SERIF BOLD SMALL V +1D604 w # MATHEMATICAL SANS-SERIF BOLD SMALL W +1D605 x # MATHEMATICAL SANS-SERIF BOLD SMALL X +1D606 y # MATHEMATICAL SANS-SERIF BOLD SMALL Y +1D607 z # MATHEMATICAL SANS-SERIF BOLD SMALL Z +1D608 A # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A +1D609 B # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B +1D60A C # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C +1D60B D # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D +1D60C E # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E +1D60D F # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F +1D60E G # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G +1D60F H # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H +1D610 I # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I +1D611 J # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J +1D612 K # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K +1D613 L # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L +1D614 M # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M +1D615 N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N +1D616 O # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O +1D617 P # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P +1D618 Q # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q +1D619 R # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R +1D61A S # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S +1D61B T # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T +1D61C U # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U +1D61D V # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V +1D61E W # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W +1D61F X # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X +1D620 Y # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y +1D621 Z # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z +1D622 a # MATHEMATICAL SANS-SERIF ITALIC SMALL A +1D623 b # MATHEMATICAL SANS-SERIF ITALIC SMALL B +1D624 c # MATHEMATICAL SANS-SERIF ITALIC SMALL C +1D625 d # MATHEMATICAL SANS-SERIF ITALIC SMALL D +1D626 e # MATHEMATICAL SANS-SERIF ITALIC SMALL E +1D627 f # MATHEMATICAL SANS-SERIF ITALIC SMALL F +1D628 g # MATHEMATICAL SANS-SERIF ITALIC SMALL G +1D629 h # MATHEMATICAL SANS-SERIF ITALIC SMALL H +1D62A i # MATHEMATICAL SANS-SERIF ITALIC SMALL I +1D62B j # MATHEMATICAL SANS-SERIF ITALIC SMALL J +1D62C k # MATHEMATICAL SANS-SERIF ITALIC SMALL K +1D62D l # MATHEMATICAL SANS-SERIF ITALIC SMALL L +1D62E m # MATHEMATICAL SANS-SERIF ITALIC SMALL M +1D62F n # MATHEMATICAL SANS-SERIF ITALIC SMALL N +1D630 o # MATHEMATICAL SANS-SERIF ITALIC SMALL O +1D631 p # MATHEMATICAL SANS-SERIF ITALIC SMALL P +1D632 q # MATHEMATICAL SANS-SERIF ITALIC SMALL Q +1D633 r # MATHEMATICAL SANS-SERIF ITALIC SMALL R +1D634 s # MATHEMATICAL SANS-SERIF ITALIC SMALL S +1D635 t # MATHEMATICAL SANS-SERIF ITALIC SMALL T +1D636 u # MATHEMATICAL SANS-SERIF ITALIC SMALL U +1D637 v # MATHEMATICAL SANS-SERIF ITALIC SMALL V +1D638 w # MATHEMATICAL SANS-SERIF ITALIC SMALL W +1D639 x # MATHEMATICAL SANS-SERIF ITALIC SMALL X +1D63A y # MATHEMATICAL SANS-SERIF ITALIC SMALL Y +1D63B z # MATHEMATICAL SANS-SERIF ITALIC SMALL Z +1D63C A # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A +1D63D B # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B +1D63E C # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C +1D63F D # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D +1D640 E # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E +1D641 F # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F +1D642 G # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G +1D643 H # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H +1D644 I # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I +1D645 J # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J +1D646 K # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K +1D647 L # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L +1D648 M # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M +1D649 N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N +1D64A O # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O +1D64B P # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P +1D64C Q # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q +1D64D R # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R +1D64E S # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S +1D64F T # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T +1D650 U # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U +1D651 V # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V +1D652 W # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W +1D653 X # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X +1D654 Y # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y +1D655 Z # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z +1D656 a # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A +1D657 b # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B +1D658 c # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C +1D659 d # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D +1D65A e # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E +1D65B f # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F +1D65C g # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G +1D65D h # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H +1D65E i # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I +1D65F j # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J +1D660 k # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K +1D661 l # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L +1D662 m # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M +1D663 n # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N +1D664 o # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O +1D665 p # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P +1D666 q # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q +1D667 r # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R +1D668 s # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S +1D669 t # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T +1D66A u # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U +1D66B v # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V +1D66C w # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W +1D66D x # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X +1D66E y # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y +1D66F z # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z +1D670 A # MATHEMATICAL MONOSPACE CAPITAL A +1D671 B # MATHEMATICAL MONOSPACE CAPITAL B +1D672 C # MATHEMATICAL MONOSPACE CAPITAL C +1D673 D # MATHEMATICAL MONOSPACE CAPITAL D +1D674 E # MATHEMATICAL MONOSPACE CAPITAL E +1D675 F # MATHEMATICAL MONOSPACE CAPITAL F +1D676 G # MATHEMATICAL MONOSPACE CAPITAL G +1D677 H # MATHEMATICAL MONOSPACE CAPITAL H +1D678 I # MATHEMATICAL MONOSPACE CAPITAL I +1D679 J # MATHEMATICAL MONOSPACE CAPITAL J +1D67A K # MATHEMATICAL MONOSPACE CAPITAL K +1D67B L # MATHEMATICAL MONOSPACE CAPITAL L +1D67C M # MATHEMATICAL MONOSPACE CAPITAL M +1D67D N # MATHEMATICAL MONOSPACE CAPITAL N +1D67E O # MATHEMATICAL MONOSPACE CAPITAL O +1D67F P # MATHEMATICAL MONOSPACE CAPITAL P +1D680 Q # MATHEMATICAL MONOSPACE CAPITAL Q +1D681 R # MATHEMATICAL MONOSPACE CAPITAL R +1D682 S # MATHEMATICAL MONOSPACE CAPITAL S +1D683 T # MATHEMATICAL MONOSPACE CAPITAL T +1D684 U # MATHEMATICAL MONOSPACE CAPITAL U +1D685 V # MATHEMATICAL MONOSPACE CAPITAL V +1D686 W # MATHEMATICAL MONOSPACE CAPITAL W +1D687 X # MATHEMATICAL MONOSPACE CAPITAL X +1D688 Y # MATHEMATICAL MONOSPACE CAPITAL Y +1D689 Z # MATHEMATICAL MONOSPACE CAPITAL Z +1D68A a # MATHEMATICAL MONOSPACE SMALL A +1D68B b # MATHEMATICAL MONOSPACE SMALL B +1D68C c # MATHEMATICAL MONOSPACE SMALL C +1D68D d # MATHEMATICAL MONOSPACE SMALL D +1D68E e # MATHEMATICAL MONOSPACE SMALL E +1D68F f # MATHEMATICAL MONOSPACE SMALL F +1D690 g # MATHEMATICAL MONOSPACE SMALL G +1D691 h # MATHEMATICAL MONOSPACE SMALL H +1D692 i # MATHEMATICAL MONOSPACE SMALL I +1D693 j # MATHEMATICAL MONOSPACE SMALL J +1D694 k # MATHEMATICAL MONOSPACE SMALL K +1D695 l # MATHEMATICAL MONOSPACE SMALL L +1D696 m # MATHEMATICAL MONOSPACE SMALL M +1D697 n # MATHEMATICAL MONOSPACE SMALL N +1D698 o # MATHEMATICAL MONOSPACE SMALL O +1D699 p # MATHEMATICAL MONOSPACE SMALL P +1D69A q # MATHEMATICAL MONOSPACE SMALL Q +1D69B r # MATHEMATICAL MONOSPACE SMALL R +1D69C s # MATHEMATICAL MONOSPACE SMALL S +1D69D t # MATHEMATICAL MONOSPACE SMALL T +1D69E u # MATHEMATICAL MONOSPACE SMALL U +1D69F v # MATHEMATICAL MONOSPACE SMALL V +1D6A0 w # MATHEMATICAL MONOSPACE SMALL W +1D6A1 x # MATHEMATICAL MONOSPACE SMALL X +1D6A2 y # MATHEMATICAL MONOSPACE SMALL Y +1D6A3 z # MATHEMATICAL MONOSPACE SMALL Z +1D6A8 Α # MATHEMATICAL BOLD CAPITAL ALPHA +1D6A9 Β # MATHEMATICAL BOLD CAPITAL BETA +1D6AA Γ # MATHEMATICAL BOLD CAPITAL GAMMA +1D6AB Δ # MATHEMATICAL BOLD CAPITAL DELTA +1D6AC Ε # MATHEMATICAL BOLD CAPITAL EPSILON +1D6AD Ζ # MATHEMATICAL BOLD CAPITAL ZETA +1D6AE Η # MATHEMATICAL BOLD CAPITAL ETA +1D6AF Θ # MATHEMATICAL BOLD CAPITAL THETA +1D6B0 Ι # MATHEMATICAL BOLD CAPITAL IOTA +1D6B1 Κ # MATHEMATICAL BOLD CAPITAL KAPPA +1D6B2 Λ # MATHEMATICAL BOLD CAPITAL LAMDA +1D6B3 Μ # MATHEMATICAL BOLD CAPITAL MU +1D6B4 Ν # MATHEMATICAL BOLD CAPITAL NU +1D6B5 Ξ # MATHEMATICAL BOLD CAPITAL XI +1D6B6 Ο # MATHEMATICAL BOLD CAPITAL OMICRON +1D6B7 Π # MATHEMATICAL BOLD CAPITAL PI +1D6B8 Ρ # MATHEMATICAL BOLD CAPITAL RHO +1D6B9 ϴ # MATHEMATICAL BOLD CAPITAL THETA SYMBOL +1D6BA Σ # MATHEMATICAL BOLD CAPITAL SIGMA +1D6BB Τ # MATHEMATICAL BOLD CAPITAL TAU +1D6BC Υ # MATHEMATICAL BOLD CAPITAL UPSILON +1D6BD Φ # MATHEMATICAL BOLD CAPITAL PHI +1D6BE Χ # MATHEMATICAL BOLD CAPITAL CHI +1D6BF Ψ # MATHEMATICAL BOLD CAPITAL PSI +1D6C0 Ω # MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 ∇ # MATHEMATICAL BOLD NABLA +1D6C2 α # MATHEMATICAL BOLD SMALL ALPHA +1D6C3 β # MATHEMATICAL BOLD SMALL BETA +1D6C4 γ # MATHEMATICAL BOLD SMALL GAMMA +1D6C5 δ # MATHEMATICAL BOLD SMALL DELTA +1D6C6 ε # MATHEMATICAL BOLD SMALL EPSILON +1D6C7 ζ # MATHEMATICAL BOLD SMALL ZETA +1D6C8 η # MATHEMATICAL BOLD SMALL ETA +1D6C9 θ # MATHEMATICAL BOLD SMALL THETA +1D6CA ι # MATHEMATICAL BOLD SMALL IOTA +1D6CB κ # MATHEMATICAL BOLD SMALL KAPPA +1D6CC λ # MATHEMATICAL BOLD SMALL LAMDA +1D6CD μ # MATHEMATICAL BOLD SMALL MU +1D6CE ν # MATHEMATICAL BOLD SMALL NU +1D6CF ξ # MATHEMATICAL BOLD SMALL XI +1D6D0 ο # MATHEMATICAL BOLD SMALL OMICRON +1D6D1 π # MATHEMATICAL BOLD SMALL PI +1D6D2 ρ # MATHEMATICAL BOLD SMALL RHO +1D6D3 ς # MATHEMATICAL BOLD SMALL FINAL SIGMA +1D6D4 σ # MATHEMATICAL BOLD SMALL SIGMA +1D6D5 τ # MATHEMATICAL BOLD SMALL TAU +1D6D6 υ # MATHEMATICAL BOLD SMALL UPSILON +1D6D7 φ # MATHEMATICAL BOLD SMALL PHI +1D6D8 χ # MATHEMATICAL BOLD SMALL CHI +1D6D9 ψ # MATHEMATICAL BOLD SMALL PSI +1D6DA ω # MATHEMATICAL BOLD SMALL OMEGA +1D6DB ∂ # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC ϵ # MATHEMATICAL BOLD EPSILON SYMBOL +1D6DD ϑ # MATHEMATICAL BOLD THETA SYMBOL +1D6DE ϰ # MATHEMATICAL BOLD KAPPA SYMBOL +1D6DF ϕ # MATHEMATICAL BOLD PHI SYMBOL +1D6E0 ϱ # MATHEMATICAL BOLD RHO SYMBOL +1D6E1 ϖ # MATHEMATICAL BOLD PI SYMBOL +1D6E2 Α # MATHEMATICAL ITALIC CAPITAL ALPHA +1D6E3 Β # MATHEMATICAL ITALIC CAPITAL BETA +1D6E4 Γ # MATHEMATICAL ITALIC CAPITAL GAMMA +1D6E5 Δ # MATHEMATICAL ITALIC CAPITAL DELTA +1D6E6 Ε # MATHEMATICAL ITALIC CAPITAL EPSILON +1D6E7 Ζ # MATHEMATICAL ITALIC CAPITAL ZETA +1D6E8 Η # MATHEMATICAL ITALIC CAPITAL ETA +1D6E9 Θ # MATHEMATICAL ITALIC CAPITAL THETA +1D6EA Ι # MATHEMATICAL ITALIC CAPITAL IOTA +1D6EB Κ # MATHEMATICAL ITALIC CAPITAL KAPPA +1D6EC Λ # MATHEMATICAL ITALIC CAPITAL LAMDA +1D6ED Μ # MATHEMATICAL ITALIC CAPITAL MU +1D6EE Ν # MATHEMATICAL ITALIC CAPITAL NU +1D6EF Ξ # MATHEMATICAL ITALIC CAPITAL XI +1D6F0 Ο # MATHEMATICAL ITALIC CAPITAL OMICRON +1D6F1 Π # MATHEMATICAL ITALIC CAPITAL PI +1D6F2 Ρ # MATHEMATICAL ITALIC CAPITAL RHO +1D6F3 ϴ # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL +1D6F4 Σ # MATHEMATICAL ITALIC CAPITAL SIGMA +1D6F5 Τ # MATHEMATICAL ITALIC CAPITAL TAU +1D6F6 Υ # MATHEMATICAL ITALIC CAPITAL UPSILON +1D6F7 Φ # MATHEMATICAL ITALIC CAPITAL PHI +1D6F8 Χ # MATHEMATICAL ITALIC CAPITAL CHI +1D6F9 Ψ # MATHEMATICAL ITALIC CAPITAL PSI +1D6FA Ω # MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB ∇ # MATHEMATICAL ITALIC NABLA +1D6FC α # MATHEMATICAL ITALIC SMALL ALPHA +1D6FD β # MATHEMATICAL ITALIC SMALL BETA +1D6FE γ # MATHEMATICAL ITALIC SMALL GAMMA +1D6FF δ # MATHEMATICAL ITALIC SMALL DELTA +1D700 ε # MATHEMATICAL ITALIC SMALL EPSILON +1D701 ζ # MATHEMATICAL ITALIC SMALL ZETA +1D702 η # MATHEMATICAL ITALIC SMALL ETA +1D703 θ # MATHEMATICAL ITALIC SMALL THETA +1D704 ι # MATHEMATICAL ITALIC SMALL IOTA +1D705 κ # MATHEMATICAL ITALIC SMALL KAPPA +1D706 λ # MATHEMATICAL ITALIC SMALL LAMDA +1D707 μ # MATHEMATICAL ITALIC SMALL MU +1D708 ν # MATHEMATICAL ITALIC SMALL NU +1D709 ξ # MATHEMATICAL ITALIC SMALL XI +1D70A ο # MATHEMATICAL ITALIC SMALL OMICRON +1D70B π # MATHEMATICAL ITALIC SMALL PI +1D70C ρ # MATHEMATICAL ITALIC SMALL RHO +1D70D ς # MATHEMATICAL ITALIC SMALL FINAL SIGMA +1D70E σ # MATHEMATICAL ITALIC SMALL SIGMA +1D70F τ # MATHEMATICAL ITALIC SMALL TAU +1D710 υ # MATHEMATICAL ITALIC SMALL UPSILON +1D711 φ # MATHEMATICAL ITALIC SMALL PHI +1D712 χ # MATHEMATICAL ITALIC SMALL CHI +1D713 ψ # MATHEMATICAL ITALIC SMALL PSI +1D714 ω # MATHEMATICAL ITALIC SMALL OMEGA +1D715 ∂ # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716 ϵ # MATHEMATICAL ITALIC EPSILON SYMBOL +1D717 ϑ # MATHEMATICAL ITALIC THETA SYMBOL +1D718 ϰ # MATHEMATICAL ITALIC KAPPA SYMBOL +1D719 ϕ # MATHEMATICAL ITALIC PHI SYMBOL +1D71A ϱ # MATHEMATICAL ITALIC RHO SYMBOL +1D71B ϖ # MATHEMATICAL ITALIC PI SYMBOL +1D71C Α # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA +1D71D Β # MATHEMATICAL BOLD ITALIC CAPITAL BETA +1D71E Γ # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA +1D71F Δ # MATHEMATICAL BOLD ITALIC CAPITAL DELTA +1D720 Ε # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON +1D721 Ζ # MATHEMATICAL BOLD ITALIC CAPITAL ZETA +1D722 Η # MATHEMATICAL BOLD ITALIC CAPITAL ETA +1D723 Θ # MATHEMATICAL BOLD ITALIC CAPITAL THETA +1D724 Ι # MATHEMATICAL BOLD ITALIC CAPITAL IOTA +1D725 Κ # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA +1D726 Λ # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA +1D727 Μ # MATHEMATICAL BOLD ITALIC CAPITAL MU +1D728 Ν # MATHEMATICAL BOLD ITALIC CAPITAL NU +1D729 Ξ # MATHEMATICAL BOLD ITALIC CAPITAL XI +1D72A Ο # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON +1D72B Π # MATHEMATICAL BOLD ITALIC CAPITAL PI +1D72C Ρ # MATHEMATICAL BOLD ITALIC CAPITAL RHO +1D72D ϴ # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL +1D72E Σ # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA +1D72F Τ # MATHEMATICAL BOLD ITALIC CAPITAL TAU +1D730 Υ # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON +1D731 Φ # MATHEMATICAL BOLD ITALIC CAPITAL PHI +1D732 Χ # MATHEMATICAL BOLD ITALIC CAPITAL CHI +1D733 Ψ # MATHEMATICAL BOLD ITALIC CAPITAL PSI +1D734 Ω # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 ∇ # MATHEMATICAL BOLD ITALIC NABLA +1D736 α # MATHEMATICAL BOLD ITALIC SMALL ALPHA +1D737 β # MATHEMATICAL BOLD ITALIC SMALL BETA +1D738 γ # MATHEMATICAL BOLD ITALIC SMALL GAMMA +1D739 δ # MATHEMATICAL BOLD ITALIC SMALL DELTA +1D73A ε # MATHEMATICAL BOLD ITALIC SMALL EPSILON +1D73B ζ # MATHEMATICAL BOLD ITALIC SMALL ZETA +1D73C η # MATHEMATICAL BOLD ITALIC SMALL ETA +1D73D θ # MATHEMATICAL BOLD ITALIC SMALL THETA +1D73E ι # MATHEMATICAL BOLD ITALIC SMALL IOTA +1D73F κ # MATHEMATICAL BOLD ITALIC SMALL KAPPA +1D740 λ # MATHEMATICAL BOLD ITALIC SMALL LAMDA +1D741 μ # MATHEMATICAL BOLD ITALIC SMALL MU +1D742 ν # MATHEMATICAL BOLD ITALIC SMALL NU +1D743 ξ # MATHEMATICAL BOLD ITALIC SMALL XI +1D744 ο # MATHEMATICAL BOLD ITALIC SMALL OMICRON +1D745 π # MATHEMATICAL BOLD ITALIC SMALL PI +1D746 ρ # MATHEMATICAL BOLD ITALIC SMALL RHO +1D747 ς # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA +1D748 σ # MATHEMATICAL BOLD ITALIC SMALL SIGMA +1D749 τ # MATHEMATICAL BOLD ITALIC SMALL TAU +1D74A υ # MATHEMATICAL BOLD ITALIC SMALL UPSILON +1D74B φ # MATHEMATICAL BOLD ITALIC SMALL PHI +1D74C χ # MATHEMATICAL BOLD ITALIC SMALL CHI +1D74D ψ # MATHEMATICAL BOLD ITALIC SMALL PSI +1D74E ω # MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F ∂ # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750 ϵ # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL +1D751 ϑ # MATHEMATICAL BOLD ITALIC THETA SYMBOL +1D752 ϰ # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL +1D753 ϕ # MATHEMATICAL BOLD ITALIC PHI SYMBOL +1D754 ϱ # MATHEMATICAL BOLD ITALIC RHO SYMBOL +1D755 ϖ # MATHEMATICAL BOLD ITALIC PI SYMBOL +1D756 Α # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA +1D757 Β # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA +1D758 Γ # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA +1D759 Δ # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA +1D75A Ε # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON +1D75B Ζ # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA +1D75C Η # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA +1D75D Θ # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA +1D75E Ι # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA +1D75F Κ # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA +1D760 Λ # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA +1D761 Μ # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU +1D762 Ν # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU +1D763 Ξ # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI +1D764 Ο # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON +1D765 Π # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI +1D766 Ρ # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO +1D767 ϴ # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL +1D768 Σ # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA +1D769 Τ # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU +1D76A Υ # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON +1D76B Φ # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI +1D76C Χ # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI +1D76D Ψ # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI +1D76E Ω # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F ∇ # MATHEMATICAL SANS-SERIF BOLD NABLA +1D770 α # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA +1D771 β # MATHEMATICAL SANS-SERIF BOLD SMALL BETA +1D772 γ # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA +1D773 δ # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA +1D774 ε # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON +1D775 ζ # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA +1D776 η # MATHEMATICAL SANS-SERIF BOLD SMALL ETA +1D777 θ # MATHEMATICAL SANS-SERIF BOLD SMALL THETA +1D778 ι # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA +1D779 κ # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA +1D77A λ # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA +1D77B μ # MATHEMATICAL SANS-SERIF BOLD SMALL MU +1D77C ν # MATHEMATICAL SANS-SERIF BOLD SMALL NU +1D77D ξ # MATHEMATICAL SANS-SERIF BOLD SMALL XI +1D77E ο # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON +1D77F π # MATHEMATICAL SANS-SERIF BOLD SMALL PI +1D780 ρ # MATHEMATICAL SANS-SERIF BOLD SMALL RHO +1D781 ς # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA +1D782 σ # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA +1D783 τ # MATHEMATICAL SANS-SERIF BOLD SMALL TAU +1D784 υ # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON +1D785 φ # MATHEMATICAL SANS-SERIF BOLD SMALL PHI +1D786 χ # MATHEMATICAL SANS-SERIF BOLD SMALL CHI +1D787 ψ # MATHEMATICAL SANS-SERIF BOLD SMALL PSI +1D788 ω # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 ∂ # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A ϵ # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL +1D78B ϑ # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL +1D78C ϰ # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL +1D78D ϕ # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL +1D78E ϱ # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL +1D78F ϖ # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL +1D790 Α # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA +1D791 Β # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA +1D792 Γ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA +1D793 Δ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA +1D794 Ε # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON +1D795 Ζ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA +1D796 Η # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA +1D797 Θ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA +1D798 Ι # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA +1D799 Κ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA +1D79A Λ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA +1D79B Μ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU +1D79C Ν # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU +1D79D Ξ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI +1D79E Ο # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON +1D79F Π # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI +1D7A0 Ρ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO +1D7A1 ϴ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL +1D7A2 Σ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA +1D7A3 Τ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU +1D7A4 Υ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON +1D7A5 Φ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI +1D7A6 Χ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI +1D7A7 Ψ # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI +1D7A8 Ω # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 ∇ # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA α # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA +1D7AB β # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA +1D7AC γ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA +1D7AD δ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA +1D7AE ε # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON +1D7AF ζ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA +1D7B0 η # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA +1D7B1 θ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA +1D7B2 ι # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA +1D7B3 κ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA +1D7B4 λ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA +1D7B5 μ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU +1D7B6 ν # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU +1D7B7 ξ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI +1D7B8 ο # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON +1D7B9 π # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI +1D7BA ρ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO +1D7BB ς # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA +1D7BC σ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA +1D7BD τ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU +1D7BE υ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON +1D7BF φ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI +1D7C0 χ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI +1D7C1 ψ # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI +1D7C2 ω # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 ∂ # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4 ϵ # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL +1D7C5 ϑ # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL +1D7C6 ϰ # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL +1D7C7 ϕ # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL +1D7C8 ϱ # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL +1D7C9 ϖ # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL +1D7CE 0 # MATHEMATICAL BOLD DIGIT ZERO +1D7CF 1 # MATHEMATICAL BOLD DIGIT ONE +1D7D0 2 # MATHEMATICAL BOLD DIGIT TWO +1D7D1 3 # MATHEMATICAL BOLD DIGIT THREE +1D7D2 4 # MATHEMATICAL BOLD DIGIT FOUR +1D7D3 5 # MATHEMATICAL BOLD DIGIT FIVE +1D7D4 6 # MATHEMATICAL BOLD DIGIT SIX +1D7D5 7 # MATHEMATICAL BOLD DIGIT SEVEN +1D7D6 8 # MATHEMATICAL BOLD DIGIT EIGHT +1D7D7 9 # MATHEMATICAL BOLD DIGIT NINE +1D7D8 0 # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO +1D7D9 1 # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE +1D7DA 2 # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO +1D7DB 3 # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE +1D7DC 4 # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR +1D7DD 5 # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE +1D7DE 6 # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX +1D7DF 7 # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN +1D7E0 8 # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT +1D7E1 9 # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE +1D7E2 0 # MATHEMATICAL SANS-SERIF DIGIT ZERO +1D7E3 1 # MATHEMATICAL SANS-SERIF DIGIT ONE +1D7E4 2 # MATHEMATICAL SANS-SERIF DIGIT TWO +1D7E5 3 # MATHEMATICAL SANS-SERIF DIGIT THREE +1D7E6 4 # MATHEMATICAL SANS-SERIF DIGIT FOUR +1D7E7 5 # MATHEMATICAL SANS-SERIF DIGIT FIVE +1D7E8 6 # MATHEMATICAL SANS-SERIF DIGIT SIX +1D7E9 7 # MATHEMATICAL SANS-SERIF DIGIT SEVEN +1D7EA 8 # MATHEMATICAL SANS-SERIF DIGIT EIGHT +1D7EB 9 # MATHEMATICAL SANS-SERIF DIGIT NINE +1D7EC 0 # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO +1D7ED 1 # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE +1D7EE 2 # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO +1D7EF 3 # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE +1D7F0 4 # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR +1D7F1 5 # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE +1D7F2 6 # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX +1D7F3 7 # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN +1D7F4 8 # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT +1D7F5 9 # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE +1D7F6 0 # MATHEMATICAL MONOSPACE DIGIT ZERO +1D7F7 1 # MATHEMATICAL MONOSPACE DIGIT ONE +1D7F8 2 # MATHEMATICAL MONOSPACE DIGIT TWO +1D7F9 3 # MATHEMATICAL MONOSPACE DIGIT THREE +1D7FA 4 # MATHEMATICAL MONOSPACE DIGIT FOUR +1D7FB 5 # MATHEMATICAL MONOSPACE DIGIT FIVE +1D7FC 6 # MATHEMATICAL MONOSPACE DIGIT SIX +1D7FD 7 # MATHEMATICAL MONOSPACE DIGIT SEVEN +1D7FE 8 # MATHEMATICAL MONOSPACE DIGIT EIGHT +1D7FF 9 # MATHEMATICAL MONOSPACE DIGIT NINE +2F800 丽 # CJK COMPATIBILITY IDEOGRAPH-2F800 +2F801 丸 # CJK COMPATIBILITY IDEOGRAPH-2F801 +2F802 乁 # CJK COMPATIBILITY IDEOGRAPH-2F802 +2F803 𠄢 # CJK COMPATIBILITY IDEOGRAPH-2F803 +2F804 你 # CJK COMPATIBILITY IDEOGRAPH-2F804 +2F805 侮 # CJK COMPATIBILITY IDEOGRAPH-2F805 +2F806 侻 # CJK COMPATIBILITY IDEOGRAPH-2F806 +2F807 倂 # CJK COMPATIBILITY IDEOGRAPH-2F807 +2F808 偺 # CJK COMPATIBILITY IDEOGRAPH-2F808 +2F809 備 # CJK COMPATIBILITY IDEOGRAPH-2F809 +2F80A 僧 # CJK COMPATIBILITY IDEOGRAPH-2F80A +2F80B 像 # CJK COMPATIBILITY IDEOGRAPH-2F80B +2F80C 㒞 # CJK COMPATIBILITY IDEOGRAPH-2F80C +2F80D 𠘺 # CJK COMPATIBILITY IDEOGRAPH-2F80D +2F80E 免 # CJK COMPATIBILITY IDEOGRAPH-2F80E +2F80F 兔 # CJK COMPATIBILITY IDEOGRAPH-2F80F +2F810 兤 # CJK COMPATIBILITY IDEOGRAPH-2F810 +2F811 具 # CJK COMPATIBILITY IDEOGRAPH-2F811 +2F812 𠔜 # CJK COMPATIBILITY IDEOGRAPH-2F812 +2F813 㒹 # CJK COMPATIBILITY IDEOGRAPH-2F813 +2F814 內 # CJK COMPATIBILITY IDEOGRAPH-2F814 +2F815 再 # CJK COMPATIBILITY IDEOGRAPH-2F815 +2F816 𠕋 # CJK COMPATIBILITY IDEOGRAPH-2F816 +2F817 冗 # CJK COMPATIBILITY IDEOGRAPH-2F817 +2F818 冤 # CJK COMPATIBILITY IDEOGRAPH-2F818 +2F819 仌 # CJK COMPATIBILITY IDEOGRAPH-2F819 +2F81A 冬 # CJK COMPATIBILITY IDEOGRAPH-2F81A +2F81B 况 # CJK COMPATIBILITY IDEOGRAPH-2F81B +2F81C 𩇟 # CJK COMPATIBILITY IDEOGRAPH-2F81C +2F81D 凵 # CJK COMPATIBILITY IDEOGRAPH-2F81D +2F81E 刃 # CJK COMPATIBILITY IDEOGRAPH-2F81E +2F81F 㓟 # CJK COMPATIBILITY IDEOGRAPH-2F81F +2F820 刻 # CJK COMPATIBILITY IDEOGRAPH-2F820 +2F821 剆 # CJK COMPATIBILITY IDEOGRAPH-2F821 +2F822 割 # CJK COMPATIBILITY IDEOGRAPH-2F822 +2F823 剷 # CJK COMPATIBILITY IDEOGRAPH-2F823 +2F824 㔕 # CJK COMPATIBILITY IDEOGRAPH-2F824 +2F825 勇 # CJK COMPATIBILITY IDEOGRAPH-2F825 +2F826 勉 # CJK COMPATIBILITY IDEOGRAPH-2F826 +2F827 勤 # CJK COMPATIBILITY IDEOGRAPH-2F827 +2F828 勺 # CJK COMPATIBILITY IDEOGRAPH-2F828 +2F829 包 # CJK COMPATIBILITY IDEOGRAPH-2F829 +2F82A 匆 # CJK COMPATIBILITY IDEOGRAPH-2F82A +2F82B 北 # CJK COMPATIBILITY IDEOGRAPH-2F82B +2F82C 卉 # CJK COMPATIBILITY IDEOGRAPH-2F82C +2F82D 卑 # CJK COMPATIBILITY IDEOGRAPH-2F82D +2F82E 博 # CJK COMPATIBILITY IDEOGRAPH-2F82E +2F82F 即 # CJK COMPATIBILITY IDEOGRAPH-2F82F +2F830 卽 # CJK COMPATIBILITY IDEOGRAPH-2F830 +2F831 卿 # CJK COMPATIBILITY IDEOGRAPH-2F831 +2F832 卿 # CJK COMPATIBILITY IDEOGRAPH-2F832 +2F833 卿 # CJK COMPATIBILITY IDEOGRAPH-2F833 +2F834 𠨬 # CJK COMPATIBILITY IDEOGRAPH-2F834 +2F835 灰 # CJK COMPATIBILITY IDEOGRAPH-2F835 +2F836 及 # CJK COMPATIBILITY IDEOGRAPH-2F836 +2F837 叟 # CJK COMPATIBILITY IDEOGRAPH-2F837 +2F838 𠭣 # CJK COMPATIBILITY IDEOGRAPH-2F838 +2F839 叫 # CJK COMPATIBILITY IDEOGRAPH-2F839 +2F83A 叱 # CJK COMPATIBILITY IDEOGRAPH-2F83A +2F83B 吆 # CJK COMPATIBILITY IDEOGRAPH-2F83B +2F83C 咞 # CJK COMPATIBILITY IDEOGRAPH-2F83C +2F83D 吸 # CJK COMPATIBILITY IDEOGRAPH-2F83D +2F83E 呈 # CJK COMPATIBILITY IDEOGRAPH-2F83E +2F83F 周 # CJK COMPATIBILITY IDEOGRAPH-2F83F +2F840 咢 # CJK COMPATIBILITY IDEOGRAPH-2F840 +2F841 哶 # CJK COMPATIBILITY IDEOGRAPH-2F841 +2F842 唐 # CJK COMPATIBILITY IDEOGRAPH-2F842 +2F843 啓 # CJK COMPATIBILITY IDEOGRAPH-2F843 +2F844 啣 # CJK COMPATIBILITY IDEOGRAPH-2F844 +2F845 善 # CJK COMPATIBILITY IDEOGRAPH-2F845 +2F846 善 # CJK COMPATIBILITY IDEOGRAPH-2F846 +2F847 喙 # CJK COMPATIBILITY IDEOGRAPH-2F847 +2F848 喫 # CJK COMPATIBILITY IDEOGRAPH-2F848 +2F849 喳 # CJK COMPATIBILITY IDEOGRAPH-2F849 +2F84A 嗂 # CJK COMPATIBILITY IDEOGRAPH-2F84A +2F84B 圖 # CJK COMPATIBILITY IDEOGRAPH-2F84B +2F84C 嘆 # CJK COMPATIBILITY IDEOGRAPH-2F84C +2F84D 圗 # CJK COMPATIBILITY IDEOGRAPH-2F84D +2F84E 噑 # CJK COMPATIBILITY IDEOGRAPH-2F84E +2F84F 噴 # CJK COMPATIBILITY IDEOGRAPH-2F84F +2F850 切 # CJK COMPATIBILITY IDEOGRAPH-2F850 +2F851 壮 # CJK COMPATIBILITY IDEOGRAPH-2F851 +2F852 城 # CJK COMPATIBILITY IDEOGRAPH-2F852 +2F853 埴 # CJK COMPATIBILITY IDEOGRAPH-2F853 +2F854 堍 # CJK COMPATIBILITY IDEOGRAPH-2F854 +2F855 型 # CJK COMPATIBILITY IDEOGRAPH-2F855 +2F856 堲 # CJK COMPATIBILITY IDEOGRAPH-2F856 +2F857 報 # CJK COMPATIBILITY IDEOGRAPH-2F857 +2F858 墬 # CJK COMPATIBILITY IDEOGRAPH-2F858 +2F859 𡓤 # CJK COMPATIBILITY IDEOGRAPH-2F859 +2F85A 売 # CJK COMPATIBILITY IDEOGRAPH-2F85A +2F85B 壷 # CJK COMPATIBILITY IDEOGRAPH-2F85B +2F85C 夆 # CJK COMPATIBILITY IDEOGRAPH-2F85C +2F85D 多 # CJK COMPATIBILITY IDEOGRAPH-2F85D +2F85E 夢 # CJK COMPATIBILITY IDEOGRAPH-2F85E +2F85F 奢 # CJK COMPATIBILITY IDEOGRAPH-2F85F +2F860 𡚨 # CJK COMPATIBILITY IDEOGRAPH-2F860 +2F861 𡛪 # CJK COMPATIBILITY IDEOGRAPH-2F861 +2F862 姬 # CJK COMPATIBILITY IDEOGRAPH-2F862 +2F863 娛 # CJK COMPATIBILITY IDEOGRAPH-2F863 +2F864 娧 # CJK COMPATIBILITY IDEOGRAPH-2F864 +2F865 姘 # CJK COMPATIBILITY IDEOGRAPH-2F865 +2F866 婦 # CJK COMPATIBILITY IDEOGRAPH-2F866 +2F867 㛮 # CJK COMPATIBILITY IDEOGRAPH-2F867 +2F868 㛼 # CJK COMPATIBILITY IDEOGRAPH-2F868 +2F869 嬈 # CJK COMPATIBILITY IDEOGRAPH-2F869 +2F86A 嬾 # CJK COMPATIBILITY IDEOGRAPH-2F86A +2F86B 嬾 # CJK COMPATIBILITY IDEOGRAPH-2F86B +2F86C 𡧈 # CJK COMPATIBILITY IDEOGRAPH-2F86C +2F86D 寃 # CJK COMPATIBILITY IDEOGRAPH-2F86D +2F86E 寘 # CJK COMPATIBILITY IDEOGRAPH-2F86E +2F86F 寧 # CJK COMPATIBILITY IDEOGRAPH-2F86F +2F870 寳 # CJK COMPATIBILITY IDEOGRAPH-2F870 +2F871 𡬘 # CJK COMPATIBILITY IDEOGRAPH-2F871 +2F872 寿 # CJK COMPATIBILITY IDEOGRAPH-2F872 +2F873 将 # CJK COMPATIBILITY IDEOGRAPH-2F873 +2F874 当 # CJK COMPATIBILITY IDEOGRAPH-2F874 +2F875 尢 # CJK COMPATIBILITY IDEOGRAPH-2F875 +2F876 㞁 # CJK COMPATIBILITY IDEOGRAPH-2F876 +2F877 屠 # CJK COMPATIBILITY IDEOGRAPH-2F877 +2F878 屮 # CJK COMPATIBILITY IDEOGRAPH-2F878 +2F879 峀 # CJK COMPATIBILITY IDEOGRAPH-2F879 +2F87A 岍 # CJK COMPATIBILITY IDEOGRAPH-2F87A +2F87B 𡷤 # CJK COMPATIBILITY IDEOGRAPH-2F87B +2F87C 嵃 # CJK COMPATIBILITY IDEOGRAPH-2F87C +2F87D 𡷦 # CJK COMPATIBILITY IDEOGRAPH-2F87D +2F87E 嵮 # CJK COMPATIBILITY IDEOGRAPH-2F87E +2F87F 嵫 # CJK COMPATIBILITY IDEOGRAPH-2F87F +2F880 嵼 # CJK COMPATIBILITY IDEOGRAPH-2F880 +2F881 巡 # CJK COMPATIBILITY IDEOGRAPH-2F881 +2F882 巢 # CJK COMPATIBILITY IDEOGRAPH-2F882 +2F883 㠯 # CJK COMPATIBILITY IDEOGRAPH-2F883 +2F884 巽 # CJK COMPATIBILITY IDEOGRAPH-2F884 +2F885 帨 # CJK COMPATIBILITY IDEOGRAPH-2F885 +2F886 帽 # CJK COMPATIBILITY IDEOGRAPH-2F886 +2F887 幩 # CJK COMPATIBILITY IDEOGRAPH-2F887 +2F888 㡢 # CJK COMPATIBILITY IDEOGRAPH-2F888 +2F889 𢆃 # CJK COMPATIBILITY IDEOGRAPH-2F889 +2F88A 㡼 # CJK COMPATIBILITY IDEOGRAPH-2F88A +2F88B 庰 # CJK COMPATIBILITY IDEOGRAPH-2F88B +2F88C 庳 # CJK COMPATIBILITY IDEOGRAPH-2F88C +2F88D 庶 # CJK COMPATIBILITY IDEOGRAPH-2F88D +2F88E 廊 # CJK COMPATIBILITY IDEOGRAPH-2F88E +2F88F 𪎒 # CJK COMPATIBILITY IDEOGRAPH-2F88F +2F890 廾 # CJK COMPATIBILITY IDEOGRAPH-2F890 +2F891 𢌱 # CJK COMPATIBILITY IDEOGRAPH-2F891 +2F892 𢌱 # CJK COMPATIBILITY IDEOGRAPH-2F892 +2F893 舁 # CJK COMPATIBILITY IDEOGRAPH-2F893 +2F894 弢 # CJK COMPATIBILITY IDEOGRAPH-2F894 +2F895 弢 # CJK COMPATIBILITY IDEOGRAPH-2F895 +2F896 㣇 # CJK COMPATIBILITY IDEOGRAPH-2F896 +2F897 𣊸 # CJK COMPATIBILITY IDEOGRAPH-2F897 +2F898 𦇚 # CJK COMPATIBILITY IDEOGRAPH-2F898 +2F899 形 # CJK COMPATIBILITY IDEOGRAPH-2F899 +2F89A 彫 # CJK COMPATIBILITY IDEOGRAPH-2F89A +2F89B 㣣 # CJK COMPATIBILITY IDEOGRAPH-2F89B +2F89C 徚 # CJK COMPATIBILITY IDEOGRAPH-2F89C +2F89D 忍 # CJK COMPATIBILITY IDEOGRAPH-2F89D +2F89E 志 # CJK COMPATIBILITY IDEOGRAPH-2F89E +2F89F 忹 # CJK COMPATIBILITY IDEOGRAPH-2F89F +2F8A0 悁 # CJK COMPATIBILITY IDEOGRAPH-2F8A0 +2F8A1 㤺 # CJK COMPATIBILITY IDEOGRAPH-2F8A1 +2F8A2 㤜 # CJK COMPATIBILITY IDEOGRAPH-2F8A2 +2F8A3 悔 # CJK COMPATIBILITY IDEOGRAPH-2F8A3 +2F8A4 𢛔 # CJK COMPATIBILITY IDEOGRAPH-2F8A4 +2F8A5 惇 # CJK COMPATIBILITY IDEOGRAPH-2F8A5 +2F8A6 慈 # CJK COMPATIBILITY IDEOGRAPH-2F8A6 +2F8A7 慌 # CJK COMPATIBILITY IDEOGRAPH-2F8A7 +2F8A8 慎 # CJK COMPATIBILITY IDEOGRAPH-2F8A8 +2F8A9 慌 # CJK COMPATIBILITY IDEOGRAPH-2F8A9 +2F8AA 慺 # CJK COMPATIBILITY IDEOGRAPH-2F8AA +2F8AB 憎 # CJK COMPATIBILITY IDEOGRAPH-2F8AB +2F8AC 憲 # CJK COMPATIBILITY IDEOGRAPH-2F8AC +2F8AD 憤 # CJK COMPATIBILITY IDEOGRAPH-2F8AD +2F8AE 憯 # CJK COMPATIBILITY IDEOGRAPH-2F8AE +2F8AF 懞 # CJK COMPATIBILITY IDEOGRAPH-2F8AF +2F8B0 懲 # CJK COMPATIBILITY IDEOGRAPH-2F8B0 +2F8B1 懶 # CJK COMPATIBILITY IDEOGRAPH-2F8B1 +2F8B2 成 # CJK COMPATIBILITY IDEOGRAPH-2F8B2 +2F8B3 戛 # CJK COMPATIBILITY IDEOGRAPH-2F8B3 +2F8B4 扝 # CJK COMPATIBILITY IDEOGRAPH-2F8B4 +2F8B5 抱 # CJK COMPATIBILITY IDEOGRAPH-2F8B5 +2F8B6 拔 # CJK COMPATIBILITY IDEOGRAPH-2F8B6 +2F8B7 捐 # CJK COMPATIBILITY IDEOGRAPH-2F8B7 +2F8B8 𢬌 # CJK COMPATIBILITY IDEOGRAPH-2F8B8 +2F8B9 挽 # CJK COMPATIBILITY IDEOGRAPH-2F8B9 +2F8BA 拼 # CJK COMPATIBILITY IDEOGRAPH-2F8BA +2F8BB 捨 # CJK COMPATIBILITY IDEOGRAPH-2F8BB +2F8BC 掃 # CJK COMPATIBILITY IDEOGRAPH-2F8BC +2F8BD 揤 # CJK COMPATIBILITY IDEOGRAPH-2F8BD +2F8BE 𢯱 # CJK COMPATIBILITY IDEOGRAPH-2F8BE +2F8BF 搢 # CJK COMPATIBILITY IDEOGRAPH-2F8BF +2F8C0 揅 # CJK COMPATIBILITY IDEOGRAPH-2F8C0 +2F8C1 掩 # CJK COMPATIBILITY IDEOGRAPH-2F8C1 +2F8C2 㨮 # CJK COMPATIBILITY IDEOGRAPH-2F8C2 +2F8C3 摩 # CJK COMPATIBILITY IDEOGRAPH-2F8C3 +2F8C4 摾 # CJK COMPATIBILITY IDEOGRAPH-2F8C4 +2F8C5 撝 # CJK COMPATIBILITY IDEOGRAPH-2F8C5 +2F8C6 摷 # CJK COMPATIBILITY IDEOGRAPH-2F8C6 +2F8C7 㩬 # CJK COMPATIBILITY IDEOGRAPH-2F8C7 +2F8C8 敏 # CJK COMPATIBILITY IDEOGRAPH-2F8C8 +2F8C9 敬 # CJK COMPATIBILITY IDEOGRAPH-2F8C9 +2F8CA 𣀊 # CJK COMPATIBILITY IDEOGRAPH-2F8CA +2F8CB 旣 # CJK COMPATIBILITY IDEOGRAPH-2F8CB +2F8CC 書 # CJK COMPATIBILITY IDEOGRAPH-2F8CC +2F8CD 晉 # CJK COMPATIBILITY IDEOGRAPH-2F8CD +2F8CE 㬙 # CJK COMPATIBILITY IDEOGRAPH-2F8CE +2F8CF 暑 # CJK COMPATIBILITY IDEOGRAPH-2F8CF +2F8D0 㬈 # CJK COMPATIBILITY IDEOGRAPH-2F8D0 +2F8D1 㫤 # CJK COMPATIBILITY IDEOGRAPH-2F8D1 +2F8D2 冒 # CJK COMPATIBILITY IDEOGRAPH-2F8D2 +2F8D3 冕 # CJK COMPATIBILITY IDEOGRAPH-2F8D3 +2F8D4 最 # CJK COMPATIBILITY IDEOGRAPH-2F8D4 +2F8D5 暜 # CJK COMPATIBILITY IDEOGRAPH-2F8D5 +2F8D6 肭 # CJK COMPATIBILITY IDEOGRAPH-2F8D6 +2F8D7 䏙 # CJK COMPATIBILITY IDEOGRAPH-2F8D7 +2F8D8 朗 # CJK COMPATIBILITY IDEOGRAPH-2F8D8 +2F8D9 望 # CJK COMPATIBILITY IDEOGRAPH-2F8D9 +2F8DA 朡 # CJK COMPATIBILITY IDEOGRAPH-2F8DA +2F8DB 杞 # CJK COMPATIBILITY IDEOGRAPH-2F8DB +2F8DC 杓 # CJK COMPATIBILITY IDEOGRAPH-2F8DC +2F8DD 𣏃 # CJK COMPATIBILITY IDEOGRAPH-2F8DD +2F8DE 㭉 # CJK COMPATIBILITY IDEOGRAPH-2F8DE +2F8DF 柺 # CJK COMPATIBILITY IDEOGRAPH-2F8DF +2F8E0 枅 # CJK COMPATIBILITY IDEOGRAPH-2F8E0 +2F8E1 桒 # CJK COMPATIBILITY IDEOGRAPH-2F8E1 +2F8E2 梅 # CJK COMPATIBILITY IDEOGRAPH-2F8E2 +2F8E3 𣑭 # CJK COMPATIBILITY IDEOGRAPH-2F8E3 +2F8E4 梎 # CJK COMPATIBILITY IDEOGRAPH-2F8E4 +2F8E5 栟 # CJK COMPATIBILITY IDEOGRAPH-2F8E5 +2F8E6 椔 # CJK COMPATIBILITY IDEOGRAPH-2F8E6 +2F8E7 㮝 # CJK COMPATIBILITY IDEOGRAPH-2F8E7 +2F8E8 楂 # CJK COMPATIBILITY IDEOGRAPH-2F8E8 +2F8E9 榣 # CJK COMPATIBILITY IDEOGRAPH-2F8E9 +2F8EA 槪 # CJK COMPATIBILITY IDEOGRAPH-2F8EA +2F8EB 檨 # CJK COMPATIBILITY IDEOGRAPH-2F8EB +2F8EC 𣚣 # CJK COMPATIBILITY IDEOGRAPH-2F8EC +2F8ED 櫛 # CJK COMPATIBILITY IDEOGRAPH-2F8ED +2F8EE 㰘 # CJK COMPATIBILITY IDEOGRAPH-2F8EE +2F8EF 次 # CJK COMPATIBILITY IDEOGRAPH-2F8EF +2F8F0 𣢧 # CJK COMPATIBILITY IDEOGRAPH-2F8F0 +2F8F1 歔 # CJK COMPATIBILITY IDEOGRAPH-2F8F1 +2F8F2 㱎 # CJK COMPATIBILITY IDEOGRAPH-2F8F2 +2F8F3 歲 # CJK COMPATIBILITY IDEOGRAPH-2F8F3 +2F8F4 殟 # CJK COMPATIBILITY IDEOGRAPH-2F8F4 +2F8F5 殺 # CJK COMPATIBILITY IDEOGRAPH-2F8F5 +2F8F6 殻 # CJK COMPATIBILITY IDEOGRAPH-2F8F6 +2F8F7 𣪍 # CJK COMPATIBILITY IDEOGRAPH-2F8F7 +2F8F8 𡴋 # CJK COMPATIBILITY IDEOGRAPH-2F8F8 +2F8F9 𣫺 # CJK COMPATIBILITY IDEOGRAPH-2F8F9 +2F8FA 汎 # CJK COMPATIBILITY IDEOGRAPH-2F8FA +2F8FB 𣲼 # CJK COMPATIBILITY IDEOGRAPH-2F8FB +2F8FC 沿 # CJK COMPATIBILITY IDEOGRAPH-2F8FC +2F8FD 泍 # CJK COMPATIBILITY IDEOGRAPH-2F8FD +2F8FE 汧 # CJK COMPATIBILITY IDEOGRAPH-2F8FE +2F8FF 洖 # CJK COMPATIBILITY IDEOGRAPH-2F8FF +2F900 派 # CJK COMPATIBILITY IDEOGRAPH-2F900 +2F901 海 # CJK COMPATIBILITY IDEOGRAPH-2F901 +2F902 流 # CJK COMPATIBILITY IDEOGRAPH-2F902 +2F903 浩 # CJK COMPATIBILITY IDEOGRAPH-2F903 +2F904 浸 # CJK COMPATIBILITY IDEOGRAPH-2F904 +2F905 涅 # CJK COMPATIBILITY IDEOGRAPH-2F905 +2F906 𣴞 # CJK COMPATIBILITY IDEOGRAPH-2F906 +2F907 洴 # CJK COMPATIBILITY IDEOGRAPH-2F907 +2F908 港 # CJK COMPATIBILITY IDEOGRAPH-2F908 +2F909 湮 # CJK COMPATIBILITY IDEOGRAPH-2F909 +2F90A 㴳 # CJK COMPATIBILITY IDEOGRAPH-2F90A +2F90B 滋 # CJK COMPATIBILITY IDEOGRAPH-2F90B +2F90C 滇 # CJK COMPATIBILITY IDEOGRAPH-2F90C +2F90D 𣻑 # CJK COMPATIBILITY IDEOGRAPH-2F90D +2F90E 淹 # CJK COMPATIBILITY IDEOGRAPH-2F90E +2F90F 潮 # CJK COMPATIBILITY IDEOGRAPH-2F90F +2F910 𣽞 # CJK COMPATIBILITY IDEOGRAPH-2F910 +2F911 𣾎 # CJK COMPATIBILITY IDEOGRAPH-2F911 +2F912 濆 # CJK COMPATIBILITY IDEOGRAPH-2F912 +2F913 瀹 # CJK COMPATIBILITY IDEOGRAPH-2F913 +2F914 瀞 # CJK COMPATIBILITY IDEOGRAPH-2F914 +2F915 瀛 # CJK COMPATIBILITY IDEOGRAPH-2F915 +2F916 㶖 # CJK COMPATIBILITY IDEOGRAPH-2F916 +2F917 灊 # CJK COMPATIBILITY IDEOGRAPH-2F917 +2F918 災 # CJK COMPATIBILITY IDEOGRAPH-2F918 +2F919 灷 # CJK COMPATIBILITY IDEOGRAPH-2F919 +2F91A 炭 # CJK COMPATIBILITY IDEOGRAPH-2F91A +2F91B 𠔥 # CJK COMPATIBILITY IDEOGRAPH-2F91B +2F91C 煅 # CJK COMPATIBILITY IDEOGRAPH-2F91C +2F91D 𤉣 # CJK COMPATIBILITY IDEOGRAPH-2F91D +2F91E 熜 # CJK COMPATIBILITY IDEOGRAPH-2F91E +2F91F 𤎫 # CJK COMPATIBILITY IDEOGRAPH-2F91F +2F920 爨 # CJK COMPATIBILITY IDEOGRAPH-2F920 +2F921 爵 # CJK COMPATIBILITY IDEOGRAPH-2F921 +2F922 牐 # CJK COMPATIBILITY IDEOGRAPH-2F922 +2F923 𤘈 # CJK COMPATIBILITY IDEOGRAPH-2F923 +2F924 犀 # CJK COMPATIBILITY IDEOGRAPH-2F924 +2F925 犕 # CJK COMPATIBILITY IDEOGRAPH-2F925 +2F926 𤜵 # CJK COMPATIBILITY IDEOGRAPH-2F926 +2F927 𤠔 # CJK COMPATIBILITY IDEOGRAPH-2F927 +2F928 獺 # CJK COMPATIBILITY IDEOGRAPH-2F928 +2F929 王 # CJK COMPATIBILITY IDEOGRAPH-2F929 +2F92A 㺬 # CJK COMPATIBILITY IDEOGRAPH-2F92A +2F92B 玥 # CJK COMPATIBILITY IDEOGRAPH-2F92B +2F92C 㺸 # CJK COMPATIBILITY IDEOGRAPH-2F92C +2F92D 㺸 # CJK COMPATIBILITY IDEOGRAPH-2F92D +2F92E 瑇 # CJK COMPATIBILITY IDEOGRAPH-2F92E +2F92F 瑜 # CJK COMPATIBILITY IDEOGRAPH-2F92F +2F930 瑱 # CJK COMPATIBILITY IDEOGRAPH-2F930 +2F931 璅 # CJK COMPATIBILITY IDEOGRAPH-2F931 +2F932 瓊 # CJK COMPATIBILITY IDEOGRAPH-2F932 +2F933 㼛 # CJK COMPATIBILITY IDEOGRAPH-2F933 +2F934 甤 # CJK COMPATIBILITY IDEOGRAPH-2F934 +2F935 𤰶 # CJK COMPATIBILITY IDEOGRAPH-2F935 +2F936 甾 # CJK COMPATIBILITY IDEOGRAPH-2F936 +2F937 𤲒 # CJK COMPATIBILITY IDEOGRAPH-2F937 +2F938 異 # CJK COMPATIBILITY IDEOGRAPH-2F938 +2F939 𢆟 # CJK COMPATIBILITY IDEOGRAPH-2F939 +2F93A 瘐 # CJK COMPATIBILITY IDEOGRAPH-2F93A +2F93B 𤾡 # CJK COMPATIBILITY IDEOGRAPH-2F93B +2F93C 𤾸 # CJK COMPATIBILITY IDEOGRAPH-2F93C +2F93D 𥁄 # CJK COMPATIBILITY IDEOGRAPH-2F93D +2F93E 㿼 # CJK COMPATIBILITY IDEOGRAPH-2F93E +2F93F 䀈 # CJK COMPATIBILITY IDEOGRAPH-2F93F +2F940 直 # CJK COMPATIBILITY IDEOGRAPH-2F940 +2F941 𥃳 # CJK COMPATIBILITY IDEOGRAPH-2F941 +2F942 𥃲 # CJK COMPATIBILITY IDEOGRAPH-2F942 +2F943 𥄙 # CJK COMPATIBILITY IDEOGRAPH-2F943 +2F944 𥄳 # CJK COMPATIBILITY IDEOGRAPH-2F944 +2F945 眞 # CJK COMPATIBILITY IDEOGRAPH-2F945 +2F946 真 # CJK COMPATIBILITY IDEOGRAPH-2F946 +2F947 真 # CJK COMPATIBILITY IDEOGRAPH-2F947 +2F948 睊 # CJK COMPATIBILITY IDEOGRAPH-2F948 +2F949 䀹 # CJK COMPATIBILITY IDEOGRAPH-2F949 +2F94A 瞋 # CJK COMPATIBILITY IDEOGRAPH-2F94A +2F94B 䁆 # CJK COMPATIBILITY IDEOGRAPH-2F94B +2F94C 䂖 # CJK COMPATIBILITY IDEOGRAPH-2F94C +2F94D 𥐝 # CJK COMPATIBILITY IDEOGRAPH-2F94D +2F94E 硎 # CJK COMPATIBILITY IDEOGRAPH-2F94E +2F94F 碌 # CJK COMPATIBILITY IDEOGRAPH-2F94F +2F950 磌 # CJK COMPATIBILITY IDEOGRAPH-2F950 +2F951 䃣 # CJK COMPATIBILITY IDEOGRAPH-2F951 +2F952 𥘦 # CJK COMPATIBILITY IDEOGRAPH-2F952 +2F953 祖 # CJK COMPATIBILITY IDEOGRAPH-2F953 +2F954 𥚚 # CJK COMPATIBILITY IDEOGRAPH-2F954 +2F955 𥛅 # CJK COMPATIBILITY IDEOGRAPH-2F955 +2F956 福 # CJK COMPATIBILITY IDEOGRAPH-2F956 +2F957 秫 # CJK COMPATIBILITY IDEOGRAPH-2F957 +2F958 䄯 # CJK COMPATIBILITY IDEOGRAPH-2F958 +2F959 穀 # CJK COMPATIBILITY IDEOGRAPH-2F959 +2F95A 穊 # CJK COMPATIBILITY IDEOGRAPH-2F95A +2F95B 穏 # CJK COMPATIBILITY IDEOGRAPH-2F95B +2F95C 𥥼 # CJK COMPATIBILITY IDEOGRAPH-2F95C +2F95D 𥪧 # CJK COMPATIBILITY IDEOGRAPH-2F95D +2F95E 𥪧 # CJK COMPATIBILITY IDEOGRAPH-2F95E +2F95F 竮 # CJK COMPATIBILITY IDEOGRAPH-2F95F +2F960 䈂 # CJK COMPATIBILITY IDEOGRAPH-2F960 +2F961 𥮫 # CJK COMPATIBILITY IDEOGRAPH-2F961 +2F962 篆 # CJK COMPATIBILITY IDEOGRAPH-2F962 +2F963 築 # CJK COMPATIBILITY IDEOGRAPH-2F963 +2F964 䈧 # CJK COMPATIBILITY IDEOGRAPH-2F964 +2F965 𥲀 # CJK COMPATIBILITY IDEOGRAPH-2F965 +2F966 糒 # CJK COMPATIBILITY IDEOGRAPH-2F966 +2F967 䊠 # CJK COMPATIBILITY IDEOGRAPH-2F967 +2F968 糨 # CJK COMPATIBILITY IDEOGRAPH-2F968 +2F969 糣 # CJK COMPATIBILITY IDEOGRAPH-2F969 +2F96A 紀 # CJK COMPATIBILITY IDEOGRAPH-2F96A +2F96B 𥾆 # CJK COMPATIBILITY IDEOGRAPH-2F96B +2F96C 絣 # CJK COMPATIBILITY IDEOGRAPH-2F96C +2F96D 䌁 # CJK COMPATIBILITY IDEOGRAPH-2F96D +2F96E 緇 # CJK COMPATIBILITY IDEOGRAPH-2F96E +2F96F 縂 # CJK COMPATIBILITY IDEOGRAPH-2F96F +2F970 繅 # CJK COMPATIBILITY IDEOGRAPH-2F970 +2F971 䌴 # CJK COMPATIBILITY IDEOGRAPH-2F971 +2F972 𦈨 # CJK COMPATIBILITY IDEOGRAPH-2F972 +2F973 𦉇 # CJK COMPATIBILITY IDEOGRAPH-2F973 +2F974 䍙 # CJK COMPATIBILITY IDEOGRAPH-2F974 +2F975 𦋙 # CJK COMPATIBILITY IDEOGRAPH-2F975 +2F976 罺 # CJK COMPATIBILITY IDEOGRAPH-2F976 +2F977 𦌾 # CJK COMPATIBILITY IDEOGRAPH-2F977 +2F978 羕 # CJK COMPATIBILITY IDEOGRAPH-2F978 +2F979 翺 # CJK COMPATIBILITY IDEOGRAPH-2F979 +2F97A 者 # CJK COMPATIBILITY IDEOGRAPH-2F97A +2F97B 𦓚 # CJK COMPATIBILITY IDEOGRAPH-2F97B +2F97C 𦔣 # CJK COMPATIBILITY IDEOGRAPH-2F97C +2F97D 聠 # CJK COMPATIBILITY IDEOGRAPH-2F97D +2F97E 𦖨 # CJK COMPATIBILITY IDEOGRAPH-2F97E +2F97F 聰 # CJK COMPATIBILITY IDEOGRAPH-2F97F +2F980 𣍟 # CJK COMPATIBILITY IDEOGRAPH-2F980 +2F981 䏕 # CJK COMPATIBILITY IDEOGRAPH-2F981 +2F982 育 # CJK COMPATIBILITY IDEOGRAPH-2F982 +2F983 脃 # CJK COMPATIBILITY IDEOGRAPH-2F983 +2F984 䐋 # CJK COMPATIBILITY IDEOGRAPH-2F984 +2F985 脾 # CJK COMPATIBILITY IDEOGRAPH-2F985 +2F986 媵 # CJK COMPATIBILITY IDEOGRAPH-2F986 +2F987 𦞧 # CJK COMPATIBILITY IDEOGRAPH-2F987 +2F988 𦞵 # CJK COMPATIBILITY IDEOGRAPH-2F988 +2F989 𣎓 # CJK COMPATIBILITY IDEOGRAPH-2F989 +2F98A 𣎜 # CJK COMPATIBILITY IDEOGRAPH-2F98A +2F98B 舁 # CJK COMPATIBILITY IDEOGRAPH-2F98B +2F98C 舄 # CJK COMPATIBILITY IDEOGRAPH-2F98C +2F98D 辞 # CJK COMPATIBILITY IDEOGRAPH-2F98D +2F98E 䑫 # CJK COMPATIBILITY IDEOGRAPH-2F98E +2F98F 芑 # CJK COMPATIBILITY IDEOGRAPH-2F98F +2F990 芋 # CJK COMPATIBILITY IDEOGRAPH-2F990 +2F991 芝 # CJK COMPATIBILITY IDEOGRAPH-2F991 +2F992 劳 # CJK COMPATIBILITY IDEOGRAPH-2F992 +2F993 花 # CJK COMPATIBILITY IDEOGRAPH-2F993 +2F994 芳 # CJK COMPATIBILITY IDEOGRAPH-2F994 +2F995 芽 # CJK COMPATIBILITY IDEOGRAPH-2F995 +2F996 苦 # CJK COMPATIBILITY IDEOGRAPH-2F996 +2F997 𦬼 # CJK COMPATIBILITY IDEOGRAPH-2F997 +2F998 若 # CJK COMPATIBILITY IDEOGRAPH-2F998 +2F999 茝 # CJK COMPATIBILITY IDEOGRAPH-2F999 +2F99A 荣 # CJK COMPATIBILITY IDEOGRAPH-2F99A +2F99B 莭 # CJK COMPATIBILITY IDEOGRAPH-2F99B +2F99C 茣 # CJK COMPATIBILITY IDEOGRAPH-2F99C +2F99D 莽 # CJK COMPATIBILITY IDEOGRAPH-2F99D +2F99E 菧 # CJK COMPATIBILITY IDEOGRAPH-2F99E +2F99F 著 # CJK COMPATIBILITY IDEOGRAPH-2F99F +2F9A0 荓 # CJK COMPATIBILITY IDEOGRAPH-2F9A0 +2F9A1 菊 # CJK COMPATIBILITY IDEOGRAPH-2F9A1 +2F9A2 菌 # CJK COMPATIBILITY IDEOGRAPH-2F9A2 +2F9A3 菜 # CJK COMPATIBILITY IDEOGRAPH-2F9A3 +2F9A4 𦰶 # CJK COMPATIBILITY IDEOGRAPH-2F9A4 +2F9A5 𦵫 # CJK COMPATIBILITY IDEOGRAPH-2F9A5 +2F9A6 𦳕 # CJK COMPATIBILITY IDEOGRAPH-2F9A6 +2F9A7 䔫 # CJK COMPATIBILITY IDEOGRAPH-2F9A7 +2F9A8 蓱 # CJK COMPATIBILITY IDEOGRAPH-2F9A8 +2F9A9 蓳 # CJK COMPATIBILITY IDEOGRAPH-2F9A9 +2F9AA 蔖 # CJK COMPATIBILITY IDEOGRAPH-2F9AA +2F9AB 𧏊 # CJK COMPATIBILITY IDEOGRAPH-2F9AB +2F9AC 蕤 # CJK COMPATIBILITY IDEOGRAPH-2F9AC +2F9AD 𦼬 # CJK COMPATIBILITY IDEOGRAPH-2F9AD +2F9AE 䕝 # CJK COMPATIBILITY IDEOGRAPH-2F9AE +2F9AF 䕡 # CJK COMPATIBILITY IDEOGRAPH-2F9AF +2F9B0 𦾱 # CJK COMPATIBILITY IDEOGRAPH-2F9B0 +2F9B1 𧃒 # CJK COMPATIBILITY IDEOGRAPH-2F9B1 +2F9B2 䕫 # CJK COMPATIBILITY IDEOGRAPH-2F9B2 +2F9B3 虐 # CJK COMPATIBILITY IDEOGRAPH-2F9B3 +2F9B4 虜 # CJK COMPATIBILITY IDEOGRAPH-2F9B4 +2F9B5 虧 # CJK COMPATIBILITY IDEOGRAPH-2F9B5 +2F9B6 虩 # CJK COMPATIBILITY IDEOGRAPH-2F9B6 +2F9B7 蚩 # CJK COMPATIBILITY IDEOGRAPH-2F9B7 +2F9B8 蚈 # CJK COMPATIBILITY IDEOGRAPH-2F9B8 +2F9B9 蜎 # CJK COMPATIBILITY IDEOGRAPH-2F9B9 +2F9BA 蛢 # CJK COMPATIBILITY IDEOGRAPH-2F9BA +2F9BB 蝹 # CJK COMPATIBILITY IDEOGRAPH-2F9BB +2F9BC 蜨 # CJK COMPATIBILITY IDEOGRAPH-2F9BC +2F9BD 蝫 # CJK COMPATIBILITY IDEOGRAPH-2F9BD +2F9BE 螆 # CJK COMPATIBILITY IDEOGRAPH-2F9BE +2F9BF 䗗 # CJK COMPATIBILITY IDEOGRAPH-2F9BF +2F9C0 蟡 # CJK COMPATIBILITY IDEOGRAPH-2F9C0 +2F9C1 蠁 # CJK COMPATIBILITY IDEOGRAPH-2F9C1 +2F9C2 䗹 # CJK COMPATIBILITY IDEOGRAPH-2F9C2 +2F9C3 衠 # CJK COMPATIBILITY IDEOGRAPH-2F9C3 +2F9C4 衣 # CJK COMPATIBILITY IDEOGRAPH-2F9C4 +2F9C5 𧙧 # CJK COMPATIBILITY IDEOGRAPH-2F9C5 +2F9C6 裗 # CJK COMPATIBILITY IDEOGRAPH-2F9C6 +2F9C7 裞 # CJK COMPATIBILITY IDEOGRAPH-2F9C7 +2F9C8 䘵 # CJK COMPATIBILITY IDEOGRAPH-2F9C8 +2F9C9 裺 # CJK COMPATIBILITY IDEOGRAPH-2F9C9 +2F9CA 㒻 # CJK COMPATIBILITY IDEOGRAPH-2F9CA +2F9CB 𧢮 # CJK COMPATIBILITY IDEOGRAPH-2F9CB +2F9CC 𧥦 # CJK COMPATIBILITY IDEOGRAPH-2F9CC +2F9CD 䚾 # CJK COMPATIBILITY IDEOGRAPH-2F9CD +2F9CE 䛇 # CJK COMPATIBILITY IDEOGRAPH-2F9CE +2F9CF 誠 # CJK COMPATIBILITY IDEOGRAPH-2F9CF +2F9D0 諭 # CJK COMPATIBILITY IDEOGRAPH-2F9D0 +2F9D1 變 # CJK COMPATIBILITY IDEOGRAPH-2F9D1 +2F9D2 豕 # CJK COMPATIBILITY IDEOGRAPH-2F9D2 +2F9D3 𧲨 # CJK COMPATIBILITY IDEOGRAPH-2F9D3 +2F9D4 貫 # CJK COMPATIBILITY IDEOGRAPH-2F9D4 +2F9D5 賁 # CJK COMPATIBILITY IDEOGRAPH-2F9D5 +2F9D6 贛 # CJK COMPATIBILITY IDEOGRAPH-2F9D6 +2F9D7 起 # CJK COMPATIBILITY IDEOGRAPH-2F9D7 +2F9D8 𧼯 # CJK COMPATIBILITY IDEOGRAPH-2F9D8 +2F9D9 𠠄 # CJK COMPATIBILITY IDEOGRAPH-2F9D9 +2F9DA 跋 # CJK COMPATIBILITY IDEOGRAPH-2F9DA +2F9DB 趼 # CJK COMPATIBILITY IDEOGRAPH-2F9DB +2F9DC 跰 # CJK COMPATIBILITY IDEOGRAPH-2F9DC +2F9DD 𠣞 # CJK COMPATIBILITY IDEOGRAPH-2F9DD +2F9DE 軔 # CJK COMPATIBILITY IDEOGRAPH-2F9DE +2F9DF 輸 # CJK COMPATIBILITY IDEOGRAPH-2F9DF +2F9E0 𨗒 # CJK COMPATIBILITY IDEOGRAPH-2F9E0 +2F9E1 𨗭 # CJK COMPATIBILITY IDEOGRAPH-2F9E1 +2F9E2 邔 # CJK COMPATIBILITY IDEOGRAPH-2F9E2 +2F9E3 郱 # CJK COMPATIBILITY IDEOGRAPH-2F9E3 +2F9E4 鄑 # CJK COMPATIBILITY IDEOGRAPH-2F9E4 +2F9E5 𨜮 # CJK COMPATIBILITY IDEOGRAPH-2F9E5 +2F9E6 鄛 # CJK COMPATIBILITY IDEOGRAPH-2F9E6 +2F9E7 鈸 # CJK COMPATIBILITY IDEOGRAPH-2F9E7 +2F9E8 鋗 # CJK COMPATIBILITY IDEOGRAPH-2F9E8 +2F9E9 鋘 # CJK COMPATIBILITY IDEOGRAPH-2F9E9 +2F9EA 鉼 # CJK COMPATIBILITY IDEOGRAPH-2F9EA +2F9EB 鏹 # CJK COMPATIBILITY IDEOGRAPH-2F9EB +2F9EC 鐕 # CJK COMPATIBILITY IDEOGRAPH-2F9EC +2F9ED 𨯺 # CJK COMPATIBILITY IDEOGRAPH-2F9ED +2F9EE 開 # CJK COMPATIBILITY IDEOGRAPH-2F9EE +2F9EF 䦕 # CJK COMPATIBILITY IDEOGRAPH-2F9EF +2F9F0 閷 # CJK COMPATIBILITY IDEOGRAPH-2F9F0 +2F9F1 𨵷 # CJK COMPATIBILITY IDEOGRAPH-2F9F1 +2F9F2 䧦 # CJK COMPATIBILITY IDEOGRAPH-2F9F2 +2F9F3 雃 # CJK COMPATIBILITY IDEOGRAPH-2F9F3 +2F9F4 嶲 # CJK COMPATIBILITY IDEOGRAPH-2F9F4 +2F9F5 霣 # CJK COMPATIBILITY IDEOGRAPH-2F9F5 +2F9F6 𩅅 # CJK COMPATIBILITY IDEOGRAPH-2F9F6 +2F9F7 𩈚 # CJK COMPATIBILITY IDEOGRAPH-2F9F7 +2F9F8 䩮 # CJK COMPATIBILITY IDEOGRAPH-2F9F8 +2F9F9 䩶 # CJK COMPATIBILITY IDEOGRAPH-2F9F9 +2F9FA 韠 # CJK COMPATIBILITY IDEOGRAPH-2F9FA +2F9FB 𩐊 # CJK COMPATIBILITY IDEOGRAPH-2F9FB +2F9FC 䪲 # CJK COMPATIBILITY IDEOGRAPH-2F9FC +2F9FD 𩒖 # CJK COMPATIBILITY IDEOGRAPH-2F9FD +2F9FE 頋 # CJK COMPATIBILITY IDEOGRAPH-2F9FE +2F9FF 頋 # CJK COMPATIBILITY IDEOGRAPH-2F9FF +2FA00 頩 # CJK COMPATIBILITY IDEOGRAPH-2FA00 +2FA01 𩖶 # CJK COMPATIBILITY IDEOGRAPH-2FA01 +2FA02 飢 # CJK COMPATIBILITY IDEOGRAPH-2FA02 +2FA03 䬳 # CJK COMPATIBILITY IDEOGRAPH-2FA03 +2FA04 餩 # CJK COMPATIBILITY IDEOGRAPH-2FA04 +2FA05 馧 # CJK COMPATIBILITY IDEOGRAPH-2FA05 +2FA06 駂 # CJK COMPATIBILITY IDEOGRAPH-2FA06 +2FA07 駾 # CJK COMPATIBILITY IDEOGRAPH-2FA07 +2FA08 䯎 # CJK COMPATIBILITY IDEOGRAPH-2FA08 +2FA09 𩬰 # CJK COMPATIBILITY IDEOGRAPH-2FA09 +2FA0A 鬒 # CJK COMPATIBILITY IDEOGRAPH-2FA0A +2FA0B 鱀 # CJK COMPATIBILITY IDEOGRAPH-2FA0B +2FA0C 鳽 # CJK COMPATIBILITY IDEOGRAPH-2FA0C +2FA0D 䳎 # CJK COMPATIBILITY IDEOGRAPH-2FA0D +2FA0E 䳭 # CJK COMPATIBILITY IDEOGRAPH-2FA0E +2FA0F 鵧 # CJK COMPATIBILITY IDEOGRAPH-2FA0F +2FA10 𪃎 # CJK COMPATIBILITY IDEOGRAPH-2FA10 +2FA11 䳸 # CJK COMPATIBILITY IDEOGRAPH-2FA11 +2FA12 𪄅 # CJK COMPATIBILITY IDEOGRAPH-2FA12 +2FA13 𪈎 # CJK COMPATIBILITY IDEOGRAPH-2FA13 +2FA14 𪊑 # CJK COMPATIBILITY IDEOGRAPH-2FA14 +2FA15 麻 # CJK COMPATIBILITY IDEOGRAPH-2FA15 +2FA16 䵖 # CJK COMPATIBILITY IDEOGRAPH-2FA16 +2FA17 黹 # CJK COMPATIBILITY IDEOGRAPH-2FA17 +2FA18 黾 # CJK COMPATIBILITY IDEOGRAPH-2FA18 +2FA19 鼅 # CJK COMPATIBILITY IDEOGRAPH-2FA19 +2FA1A 鼏 # CJK COMPATIBILITY IDEOGRAPH-2FA1A +2FA1B 鼖 # CJK COMPATIBILITY IDEOGRAPH-2FA1B +2FA1C 鼻 # CJK COMPATIBILITY IDEOGRAPH-2FA1C +2FA1D 𪘀 # CJK COMPATIBILITY IDEOGRAPH-2FA1D diff --git a/jni/parted/libiconv/lib/translit.h b/jni/parted/libiconv/lib/translit.h new file mode 100755 index 0000000..a60863a --- /dev/null +++ b/jni/parted/libiconv/lib/translit.h @@ -0,0 +1,4410 @@ +/* + * Copyright (C) 1999-2003 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * Transliteration table + */ + +static const unsigned int translit_data[9116] = { + 1, ' ', + 1, '!', + 1, 'c', + 2, 'l', 'b', + 3, 'y', 'e', 'n', + 1, '|', + 2, 'S', 'S', + 1, '"', + 3, '(', 'c', ')', + 1, 'a', + 2, '<', '<', + 3, 'n', 'o', 't', + 1, '-', + 3, '(', 'R', ')', + 2, '^', '0', + 3, '+', '/', '-', + 2, '^', '2', + 2, '^', '3', + 1,'\'', + 1, 'u', + 1, 'P', + 1, '.', + 1, ',', + 2, '^', '1', + 1, 'o', + 2, '>', '>', + 5, ' ', '1',0x2044, '4', ' ', + 5, ' ', '1',0x2044, '2', ' ', + 5, ' ', '3',0x2044, '4', ' ', + 1, '?', + 2, '`', 'A', + 2,0xB4, 'A', + 2, '^', 'A', + 2, '~', 'A', + 2, '"', 'A', + 1, 'A', + 2, 'A', 'E', + 1, 'C', + 2, '`', 'E', + 2,0xB4, 'E', + 2, '^', 'E', + 2, '"', 'E', + 2, '`', 'I', + 2,0xB4, 'I', + 2, '^', 'I', + 2, '"', 'I', + 1, 'D', + 2, '~', 'N', + 2, '`', 'O', + 2,0xB4, 'O', + 2, '^', 'O', + 2, '~', 'O', + 2, '"', 'O', + 1, 'x', + 1, 'O', + 2, '`', 'U', + 2,0xB4, 'U', + 2, '^', 'U', + 2, '"', 'U', + 2,0xB4, 'Y', + 2, 'T', 'h', + 2, 's', 's', + 2, '`', 'a', + 2,0xB4, 'a', + 2, '^', 'a', + 2, '~', 'a', + 2, '"', 'a', + 1, 'a', + 2, 'a', 'e', + 1, 'c', + 2, '`', 'e', + 2,0xB4, 'e', + 2, '^', 'e', + 2, '"', 'e', + 2, '`', 'i', + 2,0xB4, 'i', + 2, '^', 'i', + 2, '"', 'i', + 1, 'd', + 2, '~', 'n', + 2, '`', 'o', + 2,0xB4, 'o', + 2, '^', 'o', + 2, '~', 'o', + 2, '"', 'o', + 1, ':', + 1, 'o', + 2, '`', 'u', + 2,0xB4, 'u', + 2, '^', 'u', + 2, '"', 'u', + 2,0xB4, 'y', + 2, 't', 'h', + 2, '"', 'y', + 1, 'A', + 1, 'a', + 1, 'A', + 1, 'a', + 1, 'A', + 1, 'a', + 2,0xB4, 'C', + 2,0xB4, 'c', + 2, '^', 'C', + 2, '^', 'c', + 1, 'C', + 1, 'c', + 1, 'C', + 1, 'c', + 1, 'D', + 1, 'd', + 1, 'D', + 1, 'd', + 1, 'E', + 1, 'e', + 1, 'E', + 1, 'e', + 1, 'E', + 1, 'e', + 1, 'E', + 1, 'e', + 1, 'E', + 1, 'e', + 2, '^', 'G', + 2, '^', 'g', + 1, 'G', + 1, 'g', + 1, 'G', + 1, 'g', + 1, 'G', + 1, 'g', + 2, '^', 'H', + 2, '^', 'h', + 1, 'H', + 1, 'h', + 2, '~', 'I', + 2, '~', 'i', + 1, 'I', + 1, 'i', + 1, 'I', + 1, 'i', + 1, 'I', + 1, 'i', + 1, 'I', + 1, 'i', + 2, 'I', 'J', + 2, 'i', 'j', + 2, '^', 'J', + 2, '^', 'j', + 1, 'K', + 1, 'k', + 1, 'L', + 1, 'l', + 1, 'L', + 1, 'l', + 1, 'L', + 1, 'l', + 1, 'L', + 1, 'l', + 1, 'L', + 1, 'l', + 2,0xB4, 'N', + 2,0xB4, 'n', + 1, 'N', + 1, 'n', + 1, 'N', + 1, 'n', + 2,'\'', 'n', + 1, 'O', + 1, 'o', + 1, 'O', + 1, 'o', + 2, '"', 'O', + 2, '"', 'o', + 2, 'O', 'E', + 2, 'o', 'e', + 2,0xB4, 'R', + 2,0xB4, 'r', + 1, 'R', + 1, 'r', + 1, 'R', + 1, 'r', + 2,0xB4, 'S', + 2,0xB4, 's', + 2, '^', 'S', + 2, '^', 's', + 1, 'S', + 1, 's', + 1, 'S', + 1, 's', + 1, 'T', + 1, 't', + 1, 'T', + 1, 't', + 1, 'T', + 1, 't', + 2, '~', 'U', + 2, '~', 'u', + 1, 'U', + 1, 'u', + 1, 'U', + 1, 'u', + 1, 'U', + 1, 'u', + 2, '"', 'U', + 2, '"', 'u', + 1, 'U', + 1, 'u', + 2, '^', 'W', + 2, '^', 'w', + 2, '^', 'Y', + 2, '^', 'y', + 2, '"', 'Y', + 2,0xB4, 'Z', + 2,0xB4, 'z', + 1, 'Z', + 1, 'z', + 1, 'Z', + 1, 'z', + 1, 's', + 1, 'f', + 2, 'D',0x017D, + 2, 'D',0x017E, + 2, 'd',0x017E, + 2, 'L', 'J', + 2, 'L', 'j', + 2, 'l', 'j', + 2, 'N', 'J', + 2, 'N', 'j', + 2, 'n', 'j', + 2, 'D', 'Z', + 2, 'D', 'z', + 2, 'd', 'z', + 1, 'S', + 1, 's', + 1, 'T', + 1, 't', + 1,0x2032, + 1,0x2033, + 1,0x2018, + 1,0x2019, + 1,0x201B, + 1, '^', + 1,'\'', + 1,0xAF, + 1,0xB4, + 1, '`', + 1, '_', + 1, '~', + 1, '"', + 1,0x03B2, + 1,0x03B8, + 1,0x03A5, + 1,0x03C6, + 1,0x03C0, + 1,0x03BA, + 1,0x03C1, + 1,0x03C2, + 1,0x0398, + 1,0x03B5, + 1,0x03A3, + 2,0x0565,0x0582, + 2,0x05D5,0x05D5, + 2,0x05D5,0x05D9, + 2,0x05D9,0x05D9, + 2,0x0627,0x0674, + 2,0x0648,0x0674, + 2,0x06C7,0x0674, + 2,0x064A,0x0674, + 2,0x0E4D,0x0E32, + 2,0x0ECD,0x0EB2, + 2,0x0EAB,0x0E99, + 2,0x0EAB,0x0EA1, + 2,0x0FB2,0x0F81, + 2,0x0FB3,0x0F81, + 1, 'B', + 1, 'b', + 1, 'D', + 1, 'd', + 1, 'F', + 1, 'f', + 1, 'M', + 1, 'm', + 1, 'P', + 1, 'p', + 1, 'S', + 1, 's', + 1, 'T', + 1, 't', + 2, '`', 'W', + 2, '`', 'w', + 2,0xB4, 'W', + 2,0xB4, 'w', + 2, '"', 'W', + 2, '"', 'w', + 2, 'a',0x02BE, + 2, '`', 'Y', + 2, '`', 'y', + 1, ' ', + 1, ' ', + 1, ' ', + 1, ' ', + 1, ' ', + 1, ' ', + 1, ' ', + 1, ' ', + 1, '-', + 1, '-', + 1, '-', + 1, '-', + 1, '-', + 1, '-', + 1,'\'', + 1,'\'', + 1, ',', + 1,'\'', + 1, '"', + 1, '"', + 1, '"', + 1, '"', + 1, '+', + 1, 'o', + 1, '.', + 2, '.', '.', + 3, '.', '.', '.', + 4, 'o', '/', 'o', 'o', + 1,0xB4, + 2,0xB4,0xB4, + 3,0xB4,0xB4,0xB4, + 2,0x2035,0x2035, + 3,0x2035,0x2035,0x2035, + 1, '<', + 1, '>', + 2, '!', '!', + 1, '/', + 2, '?', '?', + 2, '?', '!', + 2, '!', '?', + 4,0xB4,0xB4,0xB4,0xB4, + 2, 'R', 's', + 4,0x0110,0x1ED3, 'n', 'g', + 3, 'E', 'U', 'R', + 3, 'a', '/', 'c', + 3, 'a', '/', 's', + 1, 'C', + 2,0xB0, 'C', + 3, 'c', '/', 'o', + 3, 'c', '/', 'u', + 1,0x0190, + 2,0xB0, 'F', + 1, 'g', + 1, 'H', + 1, 'H', + 1, 'H', + 1, 'h', + 1,0x0127, + 1, 'I', + 1, 'I', + 1, 'L', + 1, 'l', + 1, 'N', + 2, 'N', 'o', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'R', + 1, 'R', + 3, 'T', 'E', 'L', + 2, 'T', 'M', + 1, 'Z', + 3, 'O', 'h', 'm', + 1, 'Z', + 1, 'B', + 1, 'C', + 1, 'e', + 1, 'e', + 1, 'E', + 1, 'F', + 1, 'M', + 1, 'o', + 1,0x05D0, + 1,0x05D1, + 1,0x05D2, + 1,0x05D3, + 1, 'i', + 3, 'F', 'A', 'X', + 1,0x03B3, + 1,0x0393, + 1,0x03A0, + 1,0x2211, + 1, 'D', + 1, 'd', + 1, 'e', + 1, 'i', + 1, 'j', + 5, ' ', '1',0x2044, '3', ' ', + 5, ' ', '2',0x2044, '3', ' ', + 5, ' ', '1',0x2044, '5', ' ', + 5, ' ', '2',0x2044, '5', ' ', + 5, ' ', '3',0x2044, '5', ' ', + 5, ' ', '4',0x2044, '5', ' ', + 5, ' ', '1',0x2044, '6', ' ', + 5, ' ', '5',0x2044, '6', ' ', + 5, ' ', '1',0x2044, '8', ' ', + 5, ' ', '3',0x2044, '8', ' ', + 5, ' ', '5',0x2044, '8', ' ', + 5, ' ', '7',0x2044, '8', ' ', + 3, ' ', '1',0x2044, + 1, 'I', + 2, 'I', 'I', + 3, 'I', 'I', 'I', + 2, 'I', 'V', + 1, 'V', + 2, 'V', 'I', + 3, 'V', 'I', 'I', + 4, 'V', 'I', 'I', 'I', + 2, 'I', 'X', + 1, 'X', + 2, 'X', 'I', + 3, 'X', 'I', 'I', + 1, 'L', + 1, 'C', + 1, 'D', + 1, 'M', + 1, 'i', + 2, 'i', 'i', + 3, 'i', 'i', 'i', + 2, 'i', 'v', + 1, 'v', + 2, 'v', 'i', + 3, 'v', 'i', 'i', + 4, 'v', 'i', 'i', 'i', + 2, 'i', 'x', + 1, 'x', + 2, 'x', 'i', + 3, 'x', 'i', 'i', + 1, 'l', + 1, 'c', + 1, 'd', + 1, 'm', + 2, '<', '-', + 1, '^', + 2, '-', '>', + 1, 'V', + 3, '<', '-', '>', + 2, '<', '=', + 2, '=', '>', + 3, '<', '=', '>', + 1, '-', + 1, '/', + 1,'\\', + 1, '*', + 1,0x2022, + 1, '|', + 2,0x222B,0x222B, + 3,0x222B,0x222B,0x222B, + 2,0x222E,0x222E, + 3,0x222E,0x222E,0x222E, + 1, ':', + 1, '~', + 2, '/', '=', + 2, '<', '=', + 2, '>', '=', + 2, '<', '<', + 2, '>', '>', + 1,0xB7, + 3, '<', '<', '<', + 3, '>', '>', '>', + 3,0xB7,0xB7,0xB7, + 5, '[', 'N', 'U', 'L', ']', + 5, '[', 'S', 'O', 'H', ']', + 5, '[', 'S', 'T', 'X', ']', + 5, '[', 'E', 'T', 'X', ']', + 5, '[', 'E', 'O', 'T', ']', + 5, '[', 'E', 'N', 'Q', ']', + 5, '[', 'A', 'C', 'K', ']', + 5, '[', 'B', 'E', 'L', ']', + 4, '[', 'B', 'S', ']', + 4, '[', 'H', 'T', ']', + 4, '[', 'L', 'F', ']', + 4, '[', 'V', 'T', ']', + 4, '[', 'F', 'F', ']', + 4, '[', 'C', 'R', ']', + 4, '[', 'S', 'O', ']', + 4, '[', 'S', 'I', ']', + 5, '[', 'D', 'L', 'E', ']', + 5, '[', 'D', 'C', '1', ']', + 5, '[', 'D', 'C', '2', ']', + 5, '[', 'D', 'C', '3', ']', + 5, '[', 'D', 'C', '4', ']', + 5, '[', 'N', 'A', 'K', ']', + 5, '[', 'S', 'Y', 'N', ']', + 5, '[', 'E', 'T', 'B', ']', + 5, '[', 'C', 'A', 'N', ']', + 4, '[', 'E', 'M', ']', + 5, '[', 'S', 'U', 'B', ']', + 5, '[', 'E', 'S', 'C', ']', + 4, '[', 'F', 'S', ']', + 4, '[', 'G', 'S', ']', + 4, '[', 'R', 'S', ']', + 4, '[', 'U', 'S', ']', + 4, '[', 'S', 'P', ']', + 5, '[', 'D', 'E', 'L', ']', + 4, '[', 'N', 'L', ']', + 3, '(', '1', ')', + 3, '(', '2', ')', + 3, '(', '3', ')', + 3, '(', '4', ')', + 3, '(', '5', ')', + 3, '(', '6', ')', + 3, '(', '7', ')', + 3, '(', '8', ')', + 3, '(', '9', ')', + 4, '(', '1', '0', ')', + 4, '(', '1', '1', ')', + 4, '(', '1', '2', ')', + 4, '(', '1', '3', ')', + 4, '(', '1', '4', ')', + 4, '(', '1', '5', ')', + 4, '(', '1', '6', ')', + 4, '(', '1', '7', ')', + 4, '(', '1', '8', ')', + 4, '(', '1', '9', ')', + 4, '(', '2', '0', ')', + 3, '(', '1', ')', + 3, '(', '2', ')', + 3, '(', '3', ')', + 3, '(', '4', ')', + 3, '(', '5', ')', + 3, '(', '6', ')', + 3, '(', '7', ')', + 3, '(', '8', ')', + 3, '(', '9', ')', + 4, '(', '1', '0', ')', + 4, '(', '1', '1', ')', + 4, '(', '1', '2', ')', + 4, '(', '1', '3', ')', + 4, '(', '1', '4', ')', + 4, '(', '1', '5', ')', + 4, '(', '1', '6', ')', + 4, '(', '1', '7', ')', + 4, '(', '1', '8', ')', + 4, '(', '1', '9', ')', + 4, '(', '2', '0', ')', + 2, '1', '.', + 2, '2', '.', + 2, '3', '.', + 2, '4', '.', + 2, '5', '.', + 2, '6', '.', + 2, '7', '.', + 2, '8', '.', + 2, '9', '.', + 3, '1', '0', '.', + 3, '1', '1', '.', + 3, '1', '2', '.', + 3, '1', '3', '.', + 3, '1', '4', '.', + 3, '1', '5', '.', + 3, '1', '6', '.', + 3, '1', '7', '.', + 3, '1', '8', '.', + 3, '1', '9', '.', + 3, '2', '0', '.', + 3, '(', 'a', ')', + 3, '(', 'b', ')', + 3, '(', 'c', ')', + 3, '(', 'd', ')', + 3, '(', 'e', ')', + 3, '(', 'f', ')', + 3, '(', 'g', ')', + 3, '(', 'h', ')', + 3, '(', 'i', ')', + 3, '(', 'j', ')', + 3, '(', 'k', ')', + 3, '(', 'l', ')', + 3, '(', 'm', ')', + 3, '(', 'n', ')', + 3, '(', 'o', ')', + 3, '(', 'p', ')', + 3, '(', 'q', ')', + 3, '(', 'r', ')', + 3, '(', 's', ')', + 3, '(', 't', ')', + 3, '(', 'u', ')', + 3, '(', 'v', ')', + 3, '(', 'w', ')', + 3, '(', 'x', ')', + 3, '(', 'y', ')', + 3, '(', 'z', ')', + 3, '(', 'A', ')', + 3, '(', 'B', ')', + 3, '(', 'C', ')', + 3, '(', 'D', ')', + 3, '(', 'E', ')', + 3, '(', 'F', ')', + 3, '(', 'G', ')', + 3, '(', 'H', ')', + 3, '(', 'I', ')', + 3, '(', 'J', ')', + 3, '(', 'K', ')', + 3, '(', 'L', ')', + 3, '(', 'M', ')', + 3, '(', 'N', ')', + 3, '(', 'O', ')', + 3, '(', 'P', ')', + 3, '(', 'Q', ')', + 3, '(', 'R', ')', + 3, '(', 'S', ')', + 3, '(', 'T', ')', + 3, '(', 'U', ')', + 3, '(', 'V', ')', + 3, '(', 'W', ')', + 3, '(', 'X', ')', + 3, '(', 'Y', ')', + 3, '(', 'Z', ')', + 3, '(', 'a', ')', + 3, '(', 'b', ')', + 3, '(', 'c', ')', + 3, '(', 'd', ')', + 3, '(', 'e', ')', + 3, '(', 'f', ')', + 3, '(', 'g', ')', + 3, '(', 'h', ')', + 3, '(', 'i', ')', + 3, '(', 'j', ')', + 3, '(', 'k', ')', + 3, '(', 'l', ')', + 3, '(', 'm', ')', + 3, '(', 'n', ')', + 3, '(', 'o', ')', + 3, '(', 'p', ')', + 3, '(', 'q', ')', + 3, '(', 'r', ')', + 3, '(', 's', ')', + 3, '(', 't', ')', + 3, '(', 'u', ')', + 3, '(', 'v', ')', + 3, '(', 'w', ')', + 3, '(', 'x', ')', + 3, '(', 'y', ')', + 3, '(', 'z', ')', + 3, '(', '0', ')', + 1, '-', + 1, '|', + 1, '+', + 1, '+', + 1, '+', + 1, '+', + 1, '+', + 1, '+', + 1, '+', + 1, '+', + 1, '+', + 1, 'o', + 4,0x222B,0x222B,0x222B,0x222B, + 3, ':', ':', '=', + 2, '=', '=', + 3, '=', '=', '=', + 1,0x6BCD, + 1,0x9F9F, + 1,0x4E00, + 1,0x4E28, + 1,0x4E36, + 1,0x4E3F, + 1,0x4E59, + 1,0x4E85, + 1,0x4E8C, + 1,0x4EA0, + 1,0x4EBA, + 1,0x513F, + 1,0x5165, + 1,0x516B, + 1,0x5182, + 1,0x5196, + 1,0x51AB, + 1,0x51E0, + 1,0x51F5, + 1,0x5200, + 1,0x529B, + 1,0x52F9, + 1,0x5315, + 1,0x531A, + 1,0x5338, + 1,0x5341, + 1,0x535C, + 1,0x5369, + 1,0x5382, + 1,0x53B6, + 1,0x53C8, + 1,0x53E3, + 1,0x56D7, + 1,0x571F, + 1,0x58EB, + 1,0x5902, + 1,0x590A, + 1,0x5915, + 1,0x5927, + 1,0x5973, + 1,0x5B50, + 1,0x5B80, + 1,0x5BF8, + 1,0x5C0F, + 1,0x5C22, + 1,0x5C38, + 1,0x5C6E, + 1,0x5C71, + 1,0x5DDB, + 1,0x5DE5, + 1,0x5DF1, + 1,0x5DFE, + 1,0x5E72, + 1,0x5E7A, + 1,0x5E7F, + 1,0x5EF4, + 1,0x5EFE, + 1,0x5F0B, + 1,0x5F13, + 1,0x5F50, + 1,0x5F61, + 1,0x5F73, + 1,0x5FC3, + 1,0x6208, + 1,0x6236, + 1,0x624B, + 1,0x652F, + 1,0x6534, + 1,0x6587, + 1,0x6597, + 1,0x65A4, + 1,0x65B9, + 1,0x65E0, + 1,0x65E5, + 1,0x66F0, + 1,0x6708, + 1,0x6728, + 1,0x6B20, + 1,0x6B62, + 1,0x6B79, + 1,0x6BB3, + 1,0x6BCB, + 1,0x6BD4, + 1,0x6BDB, + 1,0x6C0F, + 1,0x6C14, + 1,0x6C34, + 1,0x706B, + 1,0x722A, + 1,0x7236, + 1,0x723B, + 1,0x723F, + 1,0x7247, + 1,0x7259, + 1,0x725B, + 1,0x72AC, + 1,0x7384, + 1,0x7389, + 1,0x74DC, + 1,0x74E6, + 1,0x7518, + 1,0x751F, + 1,0x7528, + 1,0x7530, + 1,0x758B, + 1,0x7592, + 1,0x7676, + 1,0x767D, + 1,0x76AE, + 1,0x76BF, + 1,0x76EE, + 1,0x77DB, + 1,0x77E2, + 1,0x77F3, + 1,0x793A, + 1,0x79B8, + 1,0x79BE, + 1,0x7A74, + 1,0x7ACB, + 1,0x7AF9, + 1,0x7C73, + 1,0x7CF8, + 1,0x7F36, + 1,0x7F51, + 1,0x7F8A, + 1,0x7FBD, + 1,0x8001, + 1,0x800C, + 1,0x8012, + 1,0x8033, + 1,0x807F, + 1,0x8089, + 1,0x81E3, + 1,0x81EA, + 1,0x81F3, + 1,0x81FC, + 1,0x820C, + 1,0x821B, + 1,0x821F, + 1,0x826E, + 1,0x8272, + 1,0x8278, + 1,0x864D, + 1,0x866B, + 1,0x8840, + 1,0x884C, + 1,0x8863, + 1,0x897E, + 1,0x898B, + 1,0x89D2, + 1,0x8A00, + 1,0x8C37, + 1,0x8C46, + 1,0x8C55, + 1,0x8C78, + 1,0x8C9D, + 1,0x8D64, + 1,0x8D70, + 1,0x8DB3, + 1,0x8EAB, + 1,0x8ECA, + 1,0x8F9B, + 1,0x8FB0, + 1,0x8FB5, + 1,0x9091, + 1,0x9149, + 1,0x91C6, + 1,0x91CC, + 1,0x91D1, + 1,0x9577, + 1,0x9580, + 1,0x961C, + 1,0x96B6, + 1,0x96B9, + 1,0x96E8, + 1,0x9751, + 1,0x975E, + 1,0x9762, + 1,0x9769, + 1,0x97CB, + 1,0x97ED, + 1,0x97F3, + 1,0x9801, + 1,0x98A8, + 1,0x98DB, + 1,0x98DF, + 1,0x9996, + 1,0x9999, + 1,0x99AC, + 1,0x9AA8, + 1,0x9AD8, + 1,0x9ADF, + 1,0x9B25, + 1,0x9B2F, + 1,0x9B32, + 1,0x9B3C, + 1,0x9B5A, + 1,0x9CE5, + 1,0x9E75, + 1,0x9E7F, + 1,0x9EA5, + 1,0x9EBB, + 1,0x9EC3, + 1,0x9ECD, + 1,0x9ED1, + 1,0x9EF9, + 1,0x9EFD, + 1,0x9F0E, + 1,0x9F13, + 1,0x9F20, + 1,0x9F3B, + 1,0x9F4A, + 1,0x9F52, + 1,0x9F8D, + 1,0x9F9C, + 1,0x9FA0, + 1, ' ', + 1,0x3012, + 1,0x5341, + 1,0x5344, + 1,0x5345, + 1,0x3042, + 1,0x3044, + 1,0x3046, + 1,0x3048, + 1,0x304A, + 1,0x3064, + 1,0x3084, + 1,0x3086, + 1,0x3088, + 1,0x308F, + 1,0x304B, + 1,0x3051, + 2, ' ',0x3099, + 2, ' ',0x309A, + 1, '=', + 1,0x30A2, + 1,0x30A4, + 1,0x30A6, + 1,0x30A8, + 1,0x30AA, + 1,0x30C4, + 1,0x30E4, + 1,0x30E6, + 1,0x30E8, + 1,0x30EF, + 1,0x30AB, + 1,0x30B1, + 1,0x1100, + 1,0x1101, + 1,0x11AA, + 1,0x1102, + 1,0x11AC, + 1,0x11AD, + 1,0x1103, + 1,0x1104, + 1,0x1105, + 1,0x11B0, + 1,0x11B1, + 1,0x11B2, + 1,0x11B3, + 1,0x11B4, + 1,0x11B5, + 1,0x111A, + 1,0x1106, + 1,0x1107, + 1,0x1108, + 1,0x1121, + 1,0x1109, + 1,0x110A, + 1,0x110B, + 1,0x110C, + 1,0x110D, + 1,0x110E, + 1,0x110F, + 1,0x1110, + 1,0x1111, + 1,0x1112, + 1,0x1161, + 1,0x1162, + 1,0x1163, + 1,0x1164, + 1,0x1165, + 1,0x1166, + 1,0x1167, + 1,0x1168, + 1,0x1169, + 1,0x116A, + 1,0x116B, + 1,0x116C, + 1,0x116D, + 1,0x116E, + 1,0x116F, + 1,0x1170, + 1,0x1171, + 1,0x1172, + 1,0x1173, + 1,0x1174, + 1,0x1175, + 1,0x1160, + 1,0x1114, + 1,0x1115, + 1,0x11C7, + 1,0x11C8, + 1,0x11CC, + 1,0x11CE, + 1,0x11D3, + 1,0x11D7, + 1,0x11D9, + 1,0x111C, + 1,0x11DD, + 1,0x11DF, + 1,0x111D, + 1,0x111E, + 1,0x1120, + 1,0x1122, + 1,0x1123, + 1,0x1127, + 1,0x1129, + 1,0x112B, + 1,0x112C, + 1,0x112D, + 1,0x112E, + 1,0x112F, + 1,0x1132, + 1,0x1136, + 1,0x1140, + 1,0x1147, + 1,0x114C, + 1,0x11F1, + 1,0x11F2, + 1,0x1157, + 1,0x1158, + 1,0x1159, + 1,0x1184, + 1,0x1185, + 1,0x1188, + 1,0x1191, + 1,0x1192, + 1,0x1194, + 1,0x119E, + 1,0x11A1, + 1,0x30AF, + 1,0x30B7, + 1,0x30B9, + 1,0x30C8, + 1,0x30CC, + 1,0x30CF, + 1,0x30D2, + 1,0x30D5, + 1,0x30D8, + 1,0x30DB, + 1,0x30E0, + 1,0x30E9, + 1,0x30EA, + 1,0x30EB, + 1,0x30EC, + 1,0x30ED, + 3, '(',0x1100, ')', + 3, '(',0x1102, ')', + 3, '(',0x1103, ')', + 3, '(',0x1105, ')', + 3, '(',0x1106, ')', + 3, '(',0x1107, ')', + 3, '(',0x1109, ')', + 3, '(',0x110B, ')', + 3, '(',0x110C, ')', + 3, '(',0x110E, ')', + 3, '(',0x110F, ')', + 3, '(',0x1110, ')', + 3, '(',0x1111, ')', + 3, '(',0x1112, ')', + 4, '(',0x1100,0x1161, ')', + 4, '(',0x1102,0x1161, ')', + 4, '(',0x1103,0x1161, ')', + 4, '(',0x1105,0x1161, ')', + 4, '(',0x1106,0x1161, ')', + 4, '(',0x1107,0x1161, ')', + 4, '(',0x1109,0x1161, ')', + 4, '(',0x110B,0x1161, ')', + 4, '(',0x110C,0x1161, ')', + 4, '(',0x110E,0x1161, ')', + 4, '(',0x110F,0x1161, ')', + 4, '(',0x1110,0x1161, ')', + 4, '(',0x1111,0x1161, ')', + 4, '(',0x1112,0x1161, ')', + 4, '(',0x110C,0x116E, ')', + 7, '(',0x110B,0x1169,0x110C,0x1165,0x11AB, ')', + 6, '(',0x110B,0x1169,0x1112,0x116E, ')', + 3, '(',0x4E00, ')', + 3, '(',0x4E8C, ')', + 3, '(',0x4E09, ')', + 3, '(',0x56DB, ')', + 3, '(',0x4E94, ')', + 3, '(',0x516D, ')', + 3, '(',0x4E03, ')', + 3, '(',0x516B, ')', + 3, '(',0x4E5D, ')', + 3, '(',0x5341, ')', + 3, '(',0x6708, ')', + 3, '(',0x706B, ')', + 3, '(',0x6C34, ')', + 3, '(',0x6728, ')', + 3, '(',0x91D1, ')', + 3, '(',0x571F, ')', + 3, '(',0x65E5, ')', + 3, '(',0x682A, ')', + 3, '(',0x6709, ')', + 3, '(',0x793E, ')', + 3, '(',0x540D, ')', + 3, '(',0x7279, ')', + 3, '(',0x8CA1, ')', + 3, '(',0x795D, ')', + 3, '(',0x52B4, ')', + 3, '(',0x4EE3, ')', + 3, '(',0x547C, ')', + 3, '(',0x5B66, ')', + 3, '(',0x76E3, ')', + 3, '(',0x4F01, ')', + 3, '(',0x8CC7, ')', + 3, '(',0x5354, ')', + 3, '(',0x796D, ')', + 3, '(',0x4F11, ')', + 3, '(',0x81EA, ')', + 3, '(',0x81F3, ')', + 3, 'P', 'T', 'E', + 4, '(', '2', '1', ')', + 4, '(', '2', '2', ')', + 4, '(', '2', '3', ')', + 4, '(', '2', '4', ')', + 4, '(', '2', '5', ')', + 4, '(', '2', '6', ')', + 4, '(', '2', '7', ')', + 4, '(', '2', '8', ')', + 4, '(', '2', '9', ')', + 4, '(', '3', '0', ')', + 4, '(', '3', '1', ')', + 4, '(', '3', '2', ')', + 4, '(', '3', '3', ')', + 4, '(', '3', '4', ')', + 4, '(', '3', '5', ')', + 3, '(',0x1100, ')', + 3, '(',0x1102, ')', + 3, '(',0x1103, ')', + 3, '(',0x1105, ')', + 3, '(',0x1106, ')', + 3, '(',0x1107, ')', + 3, '(',0x1109, ')', + 3, '(',0x110B, ')', + 3, '(',0x110C, ')', + 3, '(',0x110E, ')', + 3, '(',0x110F, ')', + 3, '(',0x1110, ')', + 3, '(',0x1111, ')', + 3, '(',0x1112, ')', + 4, '(',0x1100,0x1161, ')', + 4, '(',0x1102,0x1161, ')', + 4, '(',0x1103,0x1161, ')', + 4, '(',0x1105,0x1161, ')', + 4, '(',0x1106,0x1161, ')', + 4, '(',0x1107,0x1161, ')', + 4, '(',0x1109,0x1161, ')', + 4, '(',0x110B,0x1161, ')', + 4, '(',0x110C,0x1161, ')', + 4, '(',0x110E,0x1161, ')', + 4, '(',0x110F,0x1161, ')', + 4, '(',0x1110,0x1161, ')', + 4, '(',0x1111,0x1161, ')', + 4, '(',0x1112,0x1161, ')', + 7, '(',0x110E,0x1161,0x11B7,0x1100,0x1169, ')', + 6, '(',0x110C,0x116E,0x110B,0x1174, ')', + 3, '(',0x4E00, ')', + 3, '(',0x4E8C, ')', + 3, '(',0x4E09, ')', + 3, '(',0x56DB, ')', + 3, '(',0x4E94, ')', + 3, '(',0x516D, ')', + 3, '(',0x4E03, ')', + 3, '(',0x516B, ')', + 3, '(',0x4E5D, ')', + 3, '(',0x5341, ')', + 3, '(',0x6708, ')', + 3, '(',0x706B, ')', + 3, '(',0x6C34, ')', + 3, '(',0x6728, ')', + 3, '(',0x91D1, ')', + 3, '(',0x571F, ')', + 3, '(',0x65E5, ')', + 3, '(',0x682A, ')', + 3, '(',0x6709, ')', + 3, '(',0x793E, ')', + 3, '(',0x540D, ')', + 3, '(',0x7279, ')', + 3, '(',0x8CA1, ')', + 3, '(',0x795D, ')', + 3, '(',0x52B4, ')', + 3, '(',0x79D8, ')', + 3, '(',0x7537, ')', + 3, '(',0x5973, ')', + 3, '(',0x9069, ')', + 3, '(',0x512A, ')', + 3, '(',0x5370, ')', + 3, '(',0x6CE8, ')', + 3, '(',0x9805, ')', + 3, '(',0x4F11, ')', + 3, '(',0x5199, ')', + 3, '(',0x6B63, ')', + 3, '(',0x4E0A, ')', + 3, '(',0x4E2D, ')', + 3, '(',0x4E0B, ')', + 3, '(',0x5DE6, ')', + 3, '(',0x53F3, ')', + 3, '(',0x533B, ')', + 3, '(',0x5B97, ')', + 3, '(',0x5B66, ')', + 3, '(',0x76E3, ')', + 3, '(',0x4F01, ')', + 3, '(',0x8CC7, ')', + 3, '(',0x5354, ')', + 3, '(',0x591C, ')', + 4, '(', '3', '6', ')', + 4, '(', '3', '7', ')', + 4, '(', '3', '8', ')', + 4, '(', '3', '9', ')', + 4, '(', '4', '0', ')', + 4, '(', '4', '1', ')', + 4, '(', '4', '2', ')', + 4, '(', '4', '3', ')', + 4, '(', '4', '4', ')', + 4, '(', '4', '5', ')', + 4, '(', '4', '6', ')', + 4, '(', '4', '7', ')', + 4, '(', '4', '8', ')', + 4, '(', '4', '9', ')', + 4, '(', '5', '0', ')', + 2, '1',0x6708, + 2, '2',0x6708, + 2, '3',0x6708, + 2, '4',0x6708, + 2, '5',0x6708, + 2, '6',0x6708, + 2, '7',0x6708, + 2, '8',0x6708, + 2, '9',0x6708, + 3, '1', '0',0x6708, + 3, '1', '1',0x6708, + 3, '1', '2',0x6708, + 2, 'H', 'g', + 3, 'e', 'r', 'g', + 2, 'e', 'V', + 3, 'L', 'T', 'D', + 3, '(',0x30A2, ')', + 3, '(',0x30A4, ')', + 3, '(',0x30A6, ')', + 3, '(',0x30A8, ')', + 3, '(',0x30AA, ')', + 3, '(',0x30AB, ')', + 3, '(',0x30AD, ')', + 3, '(',0x30AF, ')', + 3, '(',0x30B1, ')', + 3, '(',0x30B3, ')', + 3, '(',0x30B5, ')', + 3, '(',0x30B7, ')', + 3, '(',0x30B9, ')', + 3, '(',0x30BB, ')', + 3, '(',0x30BD, ')', + 3, '(',0x30BF, ')', + 3, '(',0x30C1, ')', + 3, '(',0x30C4, ')', + 3, '(',0x30C6, ')', + 3, '(',0x30C8, ')', + 3, '(',0x30CA, ')', + 3, '(',0x30CB, ')', + 3, '(',0x30CC, ')', + 3, '(',0x30CD, ')', + 3, '(',0x30CE, ')', + 3, '(',0x30CF, ')', + 3, '(',0x30D2, ')', + 3, '(',0x30D5, ')', + 3, '(',0x30D8, ')', + 3, '(',0x30DB, ')', + 3, '(',0x30DE, ')', + 3, '(',0x30DF, ')', + 3, '(',0x30E0, ')', + 3, '(',0x30E1, ')', + 3, '(',0x30E2, ')', + 3, '(',0x30E4, ')', + 3, '(',0x30E6, ')', + 3, '(',0x30E8, ')', + 3, '(',0x30E9, ')', + 3, '(',0x30EA, ')', + 3, '(',0x30EB, ')', + 3, '(',0x30EC, ')', + 3, '(',0x30ED, ')', + 3, '(',0x30EF, ')', + 3, '(',0x30F0, ')', + 3, '(',0x30F1, ')', + 3, '(',0x30F2, ')', + 4,0x30A2,0x30D1,0x30FC,0x30C8, + 4,0x30A2,0x30EB,0x30D5,0x30A1, + 4,0x30A2,0x30F3,0x30DA,0x30A2, + 3,0x30A2,0x30FC,0x30EB, + 4,0x30A4,0x30CB,0x30F3,0x30B0, + 3,0x30A4,0x30F3,0x30C1, + 3,0x30A6,0x30A9,0x30F3, + 5,0x30A8,0x30B9,0x30AF,0x30FC,0x30C9, + 4,0x30A8,0x30FC,0x30AB,0x30FC, + 3,0x30AA,0x30F3,0x30B9, + 3,0x30AA,0x30FC,0x30E0, + 3,0x30AB,0x30A4,0x30EA, + 4,0x30AB,0x30E9,0x30C3,0x30C8, + 4,0x30AB,0x30ED,0x30EA,0x30FC, + 3,0x30AC,0x30ED,0x30F3, + 3,0x30AC,0x30F3,0x30DE, + 2,0x30AE,0x30AC, + 3,0x30AE,0x30CB,0x30FC, + 4,0x30AD,0x30E5,0x30EA,0x30FC, + 4,0x30AE,0x30EB,0x30C0,0x30FC, + 2,0x30AD,0x30ED, + 5,0x30AD,0x30ED,0x30B0,0x30E9,0x30E0, + 6,0x30AD,0x30ED,0x30E1,0x30FC,0x30C8,0x30EB, + 5,0x30AD,0x30ED,0x30EF,0x30C3,0x30C8, + 3,0x30B0,0x30E9,0x30E0, + 5,0x30B0,0x30E9,0x30E0,0x30C8,0x30F3, + 5,0x30AF,0x30EB,0x30BC,0x30A4,0x30ED, + 4,0x30AF,0x30ED,0x30FC,0x30CD, + 3,0x30B1,0x30FC,0x30B9, + 3,0x30B3,0x30EB,0x30CA, + 3,0x30B3,0x30FC,0x30DD, + 4,0x30B5,0x30A4,0x30AF,0x30EB, + 5,0x30B5,0x30F3,0x30C1,0x30FC,0x30E0, + 4,0x30B7,0x30EA,0x30F3,0x30B0, + 3,0x30BB,0x30F3,0x30C1, + 3,0x30BB,0x30F3,0x30C8, + 3,0x30C0,0x30FC,0x30B9, + 2,0x30C7,0x30B7, + 2,0x30C9,0x30EB, + 2,0x30C8,0x30F3, + 2,0x30CA,0x30CE, + 3,0x30CE,0x30C3,0x30C8, + 3,0x30CF,0x30A4,0x30C4, + 5,0x30D1,0x30FC,0x30BB,0x30F3,0x30C8, + 3,0x30D1,0x30FC,0x30C4, + 4,0x30D0,0x30FC,0x30EC,0x30EB, + 5,0x30D4,0x30A2,0x30B9,0x30C8,0x30EB, + 3,0x30D4,0x30AF,0x30EB, + 2,0x30D4,0x30B3, + 2,0x30D3,0x30EB, + 5,0x30D5,0x30A1,0x30E9,0x30C3,0x30C9, + 4,0x30D5,0x30A3,0x30FC,0x30C8, + 5,0x30D6,0x30C3,0x30B7,0x30A7,0x30EB, + 3,0x30D5,0x30E9,0x30F3, + 5,0x30D8,0x30AF,0x30BF,0x30FC,0x30EB, + 2,0x30DA,0x30BD, + 3,0x30DA,0x30CB,0x30D2, + 3,0x30D8,0x30EB,0x30C4, + 3,0x30DA,0x30F3,0x30B9, + 3,0x30DA,0x30FC,0x30B8, + 3,0x30D9,0x30FC,0x30BF, + 4,0x30DD,0x30A4,0x30F3,0x30C8, + 3,0x30DC,0x30EB,0x30C8, + 2,0x30DB,0x30F3, + 3,0x30DD,0x30F3,0x30C9, + 3,0x30DB,0x30FC,0x30EB, + 3,0x30DB,0x30FC,0x30F3, + 4,0x30DE,0x30A4,0x30AF,0x30ED, + 3,0x30DE,0x30A4,0x30EB, + 3,0x30DE,0x30C3,0x30CF, + 3,0x30DE,0x30EB,0x30AF, + 5,0x30DE,0x30F3,0x30B7,0x30E7,0x30F3, + 4,0x30DF,0x30AF,0x30ED,0x30F3, + 2,0x30DF,0x30EA, + 5,0x30DF,0x30EA,0x30D0,0x30FC,0x30EB, + 2,0x30E1,0x30AC, + 4,0x30E1,0x30AC,0x30C8,0x30F3, + 4,0x30E1,0x30FC,0x30C8,0x30EB, + 3,0x30E4,0x30FC,0x30C9, + 3,0x30E4,0x30FC,0x30EB, + 3,0x30E6,0x30A2,0x30F3, + 4,0x30EA,0x30C3,0x30C8,0x30EB, + 2,0x30EA,0x30E9, + 3,0x30EB,0x30D4,0x30FC, + 4,0x30EB,0x30FC,0x30D6,0x30EB, + 2,0x30EC,0x30E0, + 5,0x30EC,0x30F3,0x30C8,0x30B2,0x30F3, + 3,0x30EF,0x30C3,0x30C8, + 2, '0',0x70B9, + 2, '1',0x70B9, + 2, '2',0x70B9, + 2, '3',0x70B9, + 2, '4',0x70B9, + 2, '5',0x70B9, + 2, '6',0x70B9, + 2, '7',0x70B9, + 2, '8',0x70B9, + 2, '9',0x70B9, + 3, '1', '0',0x70B9, + 3, '1', '1',0x70B9, + 3, '1', '2',0x70B9, + 3, '1', '3',0x70B9, + 3, '1', '4',0x70B9, + 3, '1', '5',0x70B9, + 3, '1', '6',0x70B9, + 3, '1', '7',0x70B9, + 3, '1', '8',0x70B9, + 3, '1', '9',0x70B9, + 3, '2', '0',0x70B9, + 3, '2', '1',0x70B9, + 3, '2', '2',0x70B9, + 3, '2', '3',0x70B9, + 3, '2', '4',0x70B9, + 3, 'h', 'P', 'a', + 2, 'd', 'a', + 2, 'A', 'U', + 3, 'b', 'a', 'r', + 2, 'o', 'V', + 2, 'p', 'c', + 2, 'd', 'm', + 4, 'd', 'm', '^', '2', + 4, 'd', 'm', '^', '3', + 2, 'I', 'U', + 2,0x5E73,0x6210, + 2,0x662D,0x548C, + 2,0x5927,0x6B63, + 2,0x660E,0x6CBB, + 4,0x682A,0x5F0F,0x4F1A,0x793E, + 2, 'p', 'A', + 2, 'n', 'A', + 2,0x03BC, 'A', + 2, 'm', 'A', + 2, 'k', 'A', + 2, 'K', 'B', + 2, 'M', 'B', + 2, 'G', 'B', + 3, 'c', 'a', 'l', + 4, 'k', 'c', 'a', 'l', + 2, 'p', 'F', + 2, 'n', 'F', + 2,0x03BC, 'F', + 2,0x03BC, 'g', + 2, 'm', 'g', + 2, 'k', 'g', + 2, 'H', 'z', + 3, 'k', 'H', 'z', + 3, 'M', 'H', 'z', + 3, 'G', 'H', 'z', + 3, 'T', 'H', 'z', + 2,0x03BC, 'l', + 2, 'm', 'l', + 2, 'd', 'l', + 2, 'k', 'l', + 2, 'f', 'm', + 2, 'n', 'm', + 2,0x03BC, 'm', + 2, 'm', 'm', + 2, 'c', 'm', + 2, 'k', 'm', + 4, 'm', 'm', '^', '2', + 4, 'c', 'm', '^', '2', + 3, 'm', '^', '2', + 4, 'k', 'm', '^', '2', + 4, 'm', 'm', '^', '3', + 4, 'c', 'm', '^', '3', + 3, 'm', '^', '3', + 4, 'k', 'm', '^', '3', + 3, 'm', '/', 's', + 5, 'm', '/', 's', '^', '2', + 2, 'P', 'a', + 3, 'k', 'P', 'a', + 3, 'M', 'P', 'a', + 3, 'G', 'P', 'a', + 3, 'r', 'a', 'd', + 5, 'r', 'a', 'd', '/', 's', + 7, 'r', 'a', 'd', '/', 's', '^', '2', + 2, 'p', 's', + 2, 'n', 's', + 2,0x03BC, 's', + 2, 'm', 's', + 2, 'p', 'V', + 2, 'n', 'V', + 2,0x03BC, 'V', + 2, 'm', 'V', + 2, 'k', 'V', + 2, 'M', 'V', + 2, 'p', 'W', + 2, 'n', 'W', + 2,0x03BC, 'W', + 2, 'm', 'W', + 2, 'k', 'W', + 2, 'M', 'W', + 2, 'k',0x03A9, + 2, 'M',0x03A9, + 4, 'a', '.', 'm', '.', + 2, 'B', 'q', + 2, 'c', 'c', + 2, 'c', 'd', + 4, 'C', '/', 'k', 'g', + 3, 'C', 'o', '.', + 2, 'd', 'B', + 2, 'G', 'y', + 2, 'h', 'a', + 2, 'H', 'P', + 2, 'i', 'n', + 2, 'K', 'K', + 2, 'K', 'M', + 2, 'k', 't', + 2, 'l', 'm', + 2, 'l', 'n', + 3, 'l', 'o', 'g', + 2, 'l', 'x', + 2, 'm', 'b', + 3, 'm', 'i', 'l', + 3, 'm', 'o', 'l', + 2, 'P', 'H', + 4, 'p', '.', 'm', '.', + 3, 'P', 'P', 'M', + 2, 'P', 'R', + 2, 's', 'r', + 2, 'S', 'v', + 2, 'W', 'b', + 3, 'V', '/', 'm', + 3, 'A', '/', 'm', + 3, 'g', 'a', 'l', + 2, '1',0x65E5, + 2, '2',0x65E5, + 2, '3',0x65E5, + 2, '4',0x65E5, + 2, '5',0x65E5, + 2, '6',0x65E5, + 2, '7',0x65E5, + 2, '8',0x65E5, + 2, '9',0x65E5, + 3, '1', '0',0x65E5, + 3, '1', '1',0x65E5, + 3, '1', '2',0x65E5, + 3, '1', '3',0x65E5, + 3, '1', '4',0x65E5, + 3, '1', '5',0x65E5, + 3, '1', '6',0x65E5, + 3, '1', '7',0x65E5, + 3, '1', '8',0x65E5, + 3, '1', '9',0x65E5, + 3, '2', '0',0x65E5, + 3, '2', '1',0x65E5, + 3, '2', '2',0x65E5, + 3, '2', '3',0x65E5, + 3, '2', '4',0x65E5, + 3, '2', '5',0x65E5, + 3, '2', '6',0x65E5, + 3, '2', '7',0x65E5, + 3, '2', '8',0x65E5, + 3, '2', '9',0x65E5, + 3, '3', '0',0x65E5, + 3, '3', '1',0x65E5, + 1,0x8C48, + 1,0x66F4, + 1,0x8ECA, + 1,0x8CC8, + 1,0x6ED1, + 1,0x4E32, + 1,0x53E5, + 1,0x9F9C, + 1,0x9F9C, + 1,0x5951, + 1,0x91D1, + 1,0x5587, + 1,0x5948, + 1,0x61F6, + 1,0x7669, + 1,0x7F85, + 1,0x863F, + 1,0x87BA, + 1,0x88F8, + 1,0x908F, + 1,0x6A02, + 1,0x6D1B, + 1,0x70D9, + 1,0x73DE, + 1,0x843D, + 1,0x916A, + 1,0x99F1, + 1,0x4E82, + 1,0x5375, + 1,0x6B04, + 1,0x721B, + 1,0x862D, + 1,0x9E1E, + 1,0x5D50, + 1,0x6FEB, + 1,0x85CD, + 1,0x8964, + 1,0x62C9, + 1,0x81D8, + 1,0x881F, + 1,0x5ECA, + 1,0x6717, + 1,0x6D6A, + 1,0x72FC, + 1,0x90CE, + 1,0x4F86, + 1,0x51B7, + 1,0x52DE, + 1,0x64C4, + 1,0x6AD3, + 1,0x7210, + 1,0x76E7, + 1,0x8001, + 1,0x8606, + 1,0x865C, + 1,0x8DEF, + 1,0x9732, + 1,0x9B6F, + 1,0x9DFA, + 1,0x788C, + 1,0x797F, + 1,0x7DA0, + 1,0x83C9, + 1,0x9304, + 1,0x9E7F, + 1,0x8AD6, + 1,0x58DF, + 1,0x5F04, + 1,0x7C60, + 1,0x807E, + 1,0x7262, + 1,0x78CA, + 1,0x8CC2, + 1,0x96F7, + 1,0x58D8, + 1,0x5C62, + 1,0x6A13, + 1,0x6DDA, + 1,0x6F0F, + 1,0x7D2F, + 1,0x7E37, + 1,0x964B, + 1,0x52D2, + 1,0x808B, + 1,0x51DC, + 1,0x51CC, + 1,0x7A1C, + 1,0x7DBE, + 1,0x83F1, + 1,0x9675, + 1,0x8B80, + 1,0x62CF, + 1,0x6A02, + 1,0x8AFE, + 1,0x4E39, + 1,0x5BE7, + 1,0x6012, + 1,0x7387, + 1,0x7570, + 1,0x5317, + 1,0x78FB, + 1,0x4FBF, + 1,0x5FA9, + 1,0x4E0D, + 1,0x6CCC, + 1,0x6578, + 1,0x7D22, + 1,0x53C3, + 1,0x585E, + 1,0x7701, + 1,0x8449, + 1,0x8AAA, + 1,0x6BBA, + 1,0x8FB0, + 1,0x6C88, + 1,0x62FE, + 1,0x82E5, + 1,0x63A0, + 1,0x7565, + 1,0x4EAE, + 1,0x5169, + 1,0x51C9, + 1,0x6881, + 1,0x7CE7, + 1,0x826F, + 1,0x8AD2, + 1,0x91CF, + 1,0x52F5, + 1,0x5442, + 1,0x5973, + 1,0x5EEC, + 1,0x65C5, + 1,0x6FFE, + 1,0x792A, + 1,0x95AD, + 1,0x9A6A, + 1,0x9E97, + 1,0x9ECE, + 1,0x529B, + 1,0x66C6, + 1,0x6B77, + 1,0x8F62, + 1,0x5E74, + 1,0x6190, + 1,0x6200, + 1,0x649A, + 1,0x6F23, + 1,0x7149, + 1,0x7489, + 1,0x79CA, + 1,0x7DF4, + 1,0x806F, + 1,0x8F26, + 1,0x84EE, + 1,0x9023, + 1,0x934A, + 1,0x5217, + 1,0x52A3, + 1,0x54BD, + 1,0x70C8, + 1,0x88C2, + 1,0x8AAA, + 1,0x5EC9, + 1,0x5FF5, + 1,0x637B, + 1,0x6BAE, + 1,0x7C3E, + 1,0x7375, + 1,0x4EE4, + 1,0x56F9, + 1,0x5BE7, + 1,0x5DBA, + 1,0x601C, + 1,0x73B2, + 1,0x7469, + 1,0x7F9A, + 1,0x8046, + 1,0x9234, + 1,0x96F6, + 1,0x9748, + 1,0x9818, + 1,0x4F8B, + 1,0x79AE, + 1,0x91B4, + 1,0x96B8, + 1,0x60E1, + 1,0x4E86, + 1,0x50DA, + 1,0x5BEE, + 1,0x5C3F, + 1,0x6599, + 1,0x6A02, + 1,0x71CE, + 1,0x7642, + 1,0x84FC, + 1,0x907C, + 1,0x9F8D, + 1,0x6688, + 1,0x962E, + 1,0x5289, + 1,0x677B, + 1,0x67F3, + 1,0x6D41, + 1,0x6E9C, + 1,0x7409, + 1,0x7559, + 1,0x786B, + 1,0x7D10, + 1,0x985E, + 1,0x516D, + 1,0x622E, + 1,0x9678, + 1,0x502B, + 1,0x5D19, + 1,0x6DEA, + 1,0x8F2A, + 1,0x5F8B, + 1,0x6144, + 1,0x6817, + 1,0x7387, + 1,0x9686, + 1,0x5229, + 1,0x540F, + 1,0x5C65, + 1,0x6613, + 1,0x674E, + 1,0x68A8, + 1,0x6CE5, + 1,0x7406, + 1,0x75E2, + 1,0x7F79, + 1,0x88CF, + 1,0x88E1, + 1,0x91CC, + 1,0x96E2, + 1,0x533F, + 1,0x6EBA, + 1,0x541D, + 1,0x71D0, + 1,0x7498, + 1,0x85FA, + 1,0x96A3, + 1,0x9C57, + 1,0x9E9F, + 1,0x6797, + 1,0x6DCB, + 1,0x81E8, + 1,0x7ACB, + 1,0x7B20, + 1,0x7C92, + 1,0x72C0, + 1,0x7099, + 1,0x8B58, + 1,0x4EC0, + 1,0x8336, + 1,0x523A, + 1,0x5207, + 1,0x5EA6, + 1,0x62D3, + 1,0x7CD6, + 1,0x5B85, + 1,0x6D1E, + 1,0x66B4, + 1,0x8F3B, + 1,0x884C, + 1,0x964D, + 1,0x898B, + 1,0x5ED3, + 1,0x5140, + 1,0x55C0, + 1,0x585A, + 1,0x6674, + 1,0x51DE, + 1,0x732A, + 1,0x76CA, + 1,0x793C, + 1,0x795E, + 1,0x7965, + 1,0x798F, + 1,0x9756, + 1,0x7CBE, + 1,0x7FBD, + 1,0x8612, + 1,0x8AF8, + 1,0x9038, + 1,0x90FD, + 1,0x98EF, + 1,0x98FC, + 1,0x9928, + 1,0x9DB4, + 1,0x4FAE, + 1,0x50E7, + 1,0x514D, + 1,0x52C9, + 1,0x52E4, + 1,0x5351, + 1,0x559D, + 1,0x5606, + 1,0x5668, + 1,0x5840, + 1,0x58A8, + 1,0x5C64, + 1,0x5C6E, + 1,0x6094, + 1,0x6168, + 1,0x618E, + 1,0x61F2, + 1,0x654F, + 1,0x65E2, + 1,0x6691, + 1,0x6885, + 1,0x6D77, + 1,0x6E1A, + 1,0x6F22, + 1,0x716E, + 1,0x722B, + 1,0x7422, + 1,0x7891, + 1,0x793E, + 1,0x7949, + 1,0x7948, + 1,0x7950, + 1,0x7956, + 1,0x795D, + 1,0x798D, + 1,0x798E, + 1,0x7A40, + 1,0x7A81, + 1,0x7BC0, + 1,0x7DF4, + 1,0x7E09, + 1,0x7E41, + 1,0x7F72, + 1,0x8005, + 1,0x81ED, + 1,0x8279, + 1,0x8279, + 1,0x8457, + 1,0x8910, + 1,0x8996, + 1,0x8B01, + 1,0x8B39, + 1,0x8CD3, + 1,0x8D08, + 1,0x8FB6, + 1,0x9038, + 1,0x96E3, + 1,0x97FF, + 1,0x983B, + 2, 'f', 'f', + 2, 'f', 'i', + 2, 'f', 'l', + 3, 'f', 'f', 'i', + 3, 'f', 'f', 'l', + 2,0x017F, 't', + 2, 's', 't', + 2,0x0574,0x0576, + 2,0x0574,0x0565, + 2,0x0574,0x056B, + 2,0x057E,0x0576, + 2,0x0574,0x056D, + 1,0x05E2, + 1,0x05D0, + 1,0x05D3, + 1,0x05D4, + 1,0x05DB, + 1,0x05DC, + 1,0x05DD, + 1,0x05E8, + 1,0x05EA, + 1, '+', + 2,0x05D0,0x05DC, + 1,0x203E, + 1,0x203E, + 1,0x203E, + 1,0x203E, + 1, '_', + 1, '_', + 1, '_', + 1, ',', + 1,0x3001, + 1, '.', + 1, ';', + 1, ':', + 1, '?', + 1, '!', + 1,0x2014, + 1, '(', + 1, ')', + 1, '{', + 1, '}', + 1,0x3014, + 1,0x3015, + 1, '#', + 1, '&', + 1, '*', + 1, '+', + 1, '-', + 1, '<', + 1, '>', + 1, '=', + 1,'\\', + 1, '$', + 1, '%', + 1, '@', + 1, '!', + 1, '"', + 1, '#', + 1, '$', + 1, '%', + 1, '&', + 1,'\'', + 1, '(', + 1, ')', + 1, '*', + 1, '+', + 1, ',', + 1, '-', + 1, '.', + 1, '/', + 1, '0', + 1, '1', + 1, '2', + 1, '3', + 1, '4', + 1, '5', + 1, '6', + 1, '7', + 1, '8', + 1, '9', + 1, ':', + 1, ';', + 1, '<', + 1, '=', + 1, '>', + 1, '?', + 1, '@', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, '[', + 1,'\\', + 1, ']', + 1, '^', + 1, '_', + 1, '`', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, '{', + 1, '|', + 1, '}', + 1, '~', + 1,0x2985, + 1,0x2986, + 1,0x3002, + 1,0x300C, + 1,0x300D, + 1,0x3001, + 1,0x30FB, + 1,0x30F2, + 1,0x30A1, + 1,0x30A3, + 1,0x30A5, + 1,0x30A7, + 1,0x30A9, + 1,0x30E3, + 1,0x30E5, + 1,0x30E7, + 1,0x30C3, + 1,0x30FC, + 1,0x30A2, + 1,0x30A4, + 1,0x30A6, + 1,0x30A8, + 1,0x30AA, + 1,0x30AB, + 1,0x30AD, + 1,0x30AF, + 1,0x30B1, + 1,0x30B3, + 1,0x30B5, + 1,0x30B7, + 1,0x30B9, + 1,0x30BB, + 1,0x30BD, + 1,0x30BF, + 1,0x30C1, + 1,0x30C4, + 1,0x30C6, + 1,0x30C8, + 1,0x30CA, + 1,0x30CB, + 1,0x30CC, + 1,0x30CD, + 1,0x30CE, + 1,0x30CF, + 1,0x30D2, + 1,0x30D5, + 1,0x30D8, + 1,0x30DB, + 1,0x30DE, + 1,0x30DF, + 1,0x30E0, + 1,0x30E1, + 1,0x30E2, + 1,0x30E4, + 1,0x30E6, + 1,0x30E8, + 1,0x30E9, + 1,0x30EA, + 1,0x30EB, + 1,0x30EC, + 1,0x30ED, + 1,0x30EF, + 1,0x30F3, + 1,0x3099, + 1,0x309A, + 1,0x3164, + 1,0x3131, + 1,0x3132, + 1,0x3133, + 1,0x3134, + 1,0x3135, + 1,0x3136, + 1,0x3137, + 1,0x3138, + 1,0x3139, + 1,0x313A, + 1,0x313B, + 1,0x313C, + 1,0x313D, + 1,0x313E, + 1,0x313F, + 1,0x3140, + 1,0x3141, + 1,0x3142, + 1,0x3143, + 1,0x3144, + 1,0x3145, + 1,0x3146, + 1,0x3147, + 1,0x3148, + 1,0x3149, + 1,0x314A, + 1,0x314B, + 1,0x314C, + 1,0x314D, + 1,0x314E, + 1,0x314F, + 1,0x3150, + 1,0x3151, + 1,0x3152, + 1,0x3153, + 1,0x3154, + 1,0x3155, + 1,0x3156, + 1,0x3157, + 1,0x3158, + 1,0x3159, + 1,0x315A, + 1,0x315B, + 1,0x315C, + 1,0x315D, + 1,0x315E, + 1,0x315F, + 1,0x3160, + 1,0x3161, + 1,0x3162, + 1,0x3163, + 1,0xA2, + 1,0xA3, + 1,0xAC, + 1,0xAF, + 1,0xA6, + 1,0xA5, + 1,0x20A9, + 1,0x2502, + 1,0x2190, + 1,0x2191, + 1,0x2192, + 1,0x2193, + 1,0x25A0, + 1,0x25CB, + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'C', + 1, 'D', + 1, 'G', + 1, 'J', + 1, 'K', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'f', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'O', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1, 'A', + 1, 'B', + 1, 'C', + 1, 'D', + 1, 'E', + 1, 'F', + 1, 'G', + 1, 'H', + 1, 'I', + 1, 'J', + 1, 'K', + 1, 'L', + 1, 'M', + 1, 'N', + 1, 'O', + 1, 'P', + 1, 'Q', + 1, 'R', + 1, 'S', + 1, 'T', + 1, 'U', + 1, 'V', + 1, 'W', + 1, 'X', + 1, 'Y', + 1, 'Z', + 1, 'a', + 1, 'b', + 1, 'c', + 1, 'd', + 1, 'e', + 1, 'f', + 1, 'g', + 1, 'h', + 1, 'i', + 1, 'j', + 1, 'k', + 1, 'l', + 1, 'm', + 1, 'n', + 1, 'o', + 1, 'p', + 1, 'q', + 1, 'r', + 1, 's', + 1, 't', + 1, 'u', + 1, 'v', + 1, 'w', + 1, 'x', + 1, 'y', + 1, 'z', + 1,0x0391, + 1,0x0392, + 1,0x0393, + 1,0x0394, + 1,0x0395, + 1,0x0396, + 1,0x0397, + 1,0x0398, + 1,0x0399, + 1,0x039A, + 1,0x039B, + 1,0x039C, + 1,0x039D, + 1,0x039E, + 1,0x039F, + 1,0x03A0, + 1,0x03A1, + 1,0x03F4, + 1,0x03A3, + 1,0x03A4, + 1,0x03A5, + 1,0x03A6, + 1,0x03A7, + 1,0x03A8, + 1,0x03A9, + 1,0x2207, + 1,0x03B1, + 1,0x03B2, + 1,0x03B3, + 1,0x03B4, + 1,0x03B5, + 1,0x03B6, + 1,0x03B7, + 1,0x03B8, + 1,0x03B9, + 1,0x03BA, + 1,0x03BB, + 1,0x03BC, + 1,0x03BD, + 1,0x03BE, + 1,0x03BF, + 1,0x03C0, + 1,0x03C1, + 1,0x03C2, + 1,0x03C3, + 1,0x03C4, + 1,0x03C5, + 1,0x03C6, + 1,0x03C7, + 1,0x03C8, + 1,0x03C9, + 1,0x2202, + 1,0x03F5, + 1,0x03D1, + 1,0x03F0, + 1,0x03D5, + 1,0x03F1, + 1,0x03D6, + 1,0x0391, + 1,0x0392, + 1,0x0393, + 1,0x0394, + 1,0x0395, + 1,0x0396, + 1,0x0397, + 1,0x0398, + 1,0x0399, + 1,0x039A, + 1,0x039B, + 1,0x039C, + 1,0x039D, + 1,0x039E, + 1,0x039F, + 1,0x03A0, + 1,0x03A1, + 1,0x03F4, + 1,0x03A3, + 1,0x03A4, + 1,0x03A5, + 1,0x03A6, + 1,0x03A7, + 1,0x03A8, + 1,0x03A9, + 1,0x2207, + 1,0x03B1, + 1,0x03B2, + 1,0x03B3, + 1,0x03B4, + 1,0x03B5, + 1,0x03B6, + 1,0x03B7, + 1,0x03B8, + 1,0x03B9, + 1,0x03BA, + 1,0x03BB, + 1,0x03BC, + 1,0x03BD, + 1,0x03BE, + 1,0x03BF, + 1,0x03C0, + 1,0x03C1, + 1,0x03C2, + 1,0x03C3, + 1,0x03C4, + 1,0x03C5, + 1,0x03C6, + 1,0x03C7, + 1,0x03C8, + 1,0x03C9, + 1,0x2202, + 1,0x03F5, + 1,0x03D1, + 1,0x03F0, + 1,0x03D5, + 1,0x03F1, + 1,0x03D6, + 1,0x0391, + 1,0x0392, + 1,0x0393, + 1,0x0394, + 1,0x0395, + 1,0x0396, + 1,0x0397, + 1,0x0398, + 1,0x0399, + 1,0x039A, + 1,0x039B, + 1,0x039C, + 1,0x039D, + 1,0x039E, + 1,0x039F, + 1,0x03A0, + 1,0x03A1, + 1,0x03F4, + 1,0x03A3, + 1,0x03A4, + 1,0x03A5, + 1,0x03A6, + 1,0x03A7, + 1,0x03A8, + 1,0x03A9, + 1,0x2207, + 1,0x03B1, + 1,0x03B2, + 1,0x03B3, + 1,0x03B4, + 1,0x03B5, + 1,0x03B6, + 1,0x03B7, + 1,0x03B8, + 1,0x03B9, + 1,0x03BA, + 1,0x03BB, + 1,0x03BC, + 1,0x03BD, + 1,0x03BE, + 1,0x03BF, + 1,0x03C0, + 1,0x03C1, + 1,0x03C2, + 1,0x03C3, + 1,0x03C4, + 1,0x03C5, + 1,0x03C6, + 1,0x03C7, + 1,0x03C8, + 1,0x03C9, + 1,0x2202, + 1,0x03F5, + 1,0x03D1, + 1,0x03F0, + 1,0x03D5, + 1,0x03F1, + 1,0x03D6, + 1,0x0391, + 1,0x0392, + 1,0x0393, + 1,0x0394, + 1,0x0395, + 1,0x0396, + 1,0x0397, + 1,0x0398, + 1,0x0399, + 1,0x039A, + 1,0x039B, + 1,0x039C, + 1,0x039D, + 1,0x039E, + 1,0x039F, + 1,0x03A0, + 1,0x03A1, + 1,0x03F4, + 1,0x03A3, + 1,0x03A4, + 1,0x03A5, + 1,0x03A6, + 1,0x03A7, + 1,0x03A8, + 1,0x03A9, + 1,0x2207, + 1,0x03B1, + 1,0x03B2, + 1,0x03B3, + 1,0x03B4, + 1,0x03B5, + 1,0x03B6, + 1,0x03B7, + 1,0x03B8, + 1,0x03B9, + 1,0x03BA, + 1,0x03BB, + 1,0x03BC, + 1,0x03BD, + 1,0x03BE, + 1,0x03BF, + 1,0x03C0, + 1,0x03C1, + 1,0x03C2, + 1,0x03C3, + 1,0x03C4, + 1,0x03C5, + 1,0x03C6, + 1,0x03C7, + 1,0x03C8, + 1,0x03C9, + 1,0x2202, + 1,0x03F5, + 1,0x03D1, + 1,0x03F0, + 1,0x03D5, + 1,0x03F1, + 1,0x03D6, + 1,0x0391, + 1,0x0392, + 1,0x0393, + 1,0x0394, + 1,0x0395, + 1,0x0396, + 1,0x0397, + 1,0x0398, + 1,0x0399, + 1,0x039A, + 1,0x039B, + 1,0x039C, + 1,0x039D, + 1,0x039E, + 1,0x039F, + 1,0x03A0, + 1,0x03A1, + 1,0x03F4, + 1,0x03A3, + 1,0x03A4, + 1,0x03A5, + 1,0x03A6, + 1,0x03A7, + 1,0x03A8, + 1,0x03A9, + 1,0x2207, + 1,0x03B1, + 1,0x03B2, + 1,0x03B3, + 1,0x03B4, + 1,0x03B5, + 1,0x03B6, + 1,0x03B7, + 1,0x03B8, + 1,0x03B9, + 1,0x03BA, + 1,0x03BB, + 1,0x03BC, + 1,0x03BD, + 1,0x03BE, + 1,0x03BF, + 1,0x03C0, + 1,0x03C1, + 1,0x03C2, + 1,0x03C3, + 1,0x03C4, + 1,0x03C5, + 1,0x03C6, + 1,0x03C7, + 1,0x03C8, + 1,0x03C9, + 1,0x2202, + 1,0x03F5, + 1,0x03D1, + 1,0x03F0, + 1,0x03D5, + 1,0x03F1, + 1,0x03D6, + 1, '0', + 1, '1', + 1, '2', + 1, '3', + 1, '4', + 1, '5', + 1, '6', + 1, '7', + 1, '8', + 1, '9', + 1, '0', + 1, '1', + 1, '2', + 1, '3', + 1, '4', + 1, '5', + 1, '6', + 1, '7', + 1, '8', + 1, '9', + 1, '0', + 1, '1', + 1, '2', + 1, '3', + 1, '4', + 1, '5', + 1, '6', + 1, '7', + 1, '8', + 1, '9', + 1, '0', + 1, '1', + 1, '2', + 1, '3', + 1, '4', + 1, '5', + 1, '6', + 1, '7', + 1, '8', + 1, '9', + 1, '0', + 1, '1', + 1, '2', + 1, '3', + 1, '4', + 1, '5', + 1, '6', + 1, '7', + 1, '8', + 1, '9', + 1,0x4E3D, + 1,0x4E38, + 1,0x4E41, + 1,0x20122, + 1,0x4F60, + 1,0x4FAE, + 1,0x4FBB, + 1,0x5002, + 1,0x507A, + 1,0x5099, + 1,0x50E7, + 1,0x50CF, + 1,0x349E, + 1,0x2063A, + 1,0x514D, + 1,0x5154, + 1,0x5164, + 1,0x5177, + 1,0x2051C, + 1,0x34B9, + 1,0x5167, + 1,0x518D, + 1,0x2054B, + 1,0x5197, + 1,0x51A4, + 1,0x4ECC, + 1,0x51AC, + 1,0x51B5, + 1,0x291DF, + 1,0x51F5, + 1,0x5203, + 1,0x34DF, + 1,0x523B, + 1,0x5246, + 1,0x5272, + 1,0x5277, + 1,0x3515, + 1,0x52C7, + 1,0x52C9, + 1,0x52E4, + 1,0x52FA, + 1,0x5305, + 1,0x5306, + 1,0x5317, + 1,0x5349, + 1,0x5351, + 1,0x535A, + 1,0x5373, + 1,0x537D, + 1,0x537F, + 1,0x537F, + 1,0x537F, + 1,0x20A2C, + 1,0x7070, + 1,0x53CA, + 1,0x53DF, + 1,0x20B63, + 1,0x53EB, + 1,0x53F1, + 1,0x5406, + 1,0x549E, + 1,0x5438, + 1,0x5448, + 1,0x5468, + 1,0x54A2, + 1,0x54F6, + 1,0x5510, + 1,0x5553, + 1,0x5563, + 1,0x5584, + 1,0x5584, + 1,0x5599, + 1,0x55AB, + 1,0x55B3, + 1,0x55C2, + 1,0x5716, + 1,0x5606, + 1,0x5717, + 1,0x5651, + 1,0x5674, + 1,0x5207, + 1,0x58EE, + 1,0x57CE, + 1,0x57F4, + 1,0x580D, + 1,0x578B, + 1,0x5832, + 1,0x5831, + 1,0x58AC, + 1,0x214E4, + 1,0x58F2, + 1,0x58F7, + 1,0x5906, + 1,0x591A, + 1,0x5922, + 1,0x5962, + 1,0x216A8, + 1,0x216EA, + 1,0x59EC, + 1,0x5A1B, + 1,0x5A27, + 1,0x59D8, + 1,0x5A66, + 1,0x36EE, + 1,0x36FC, + 1,0x5B08, + 1,0x5B3E, + 1,0x5B3E, + 1,0x219C8, + 1,0x5BC3, + 1,0x5BD8, + 1,0x5BE7, + 1,0x5BF3, + 1,0x21B18, + 1,0x5BFF, + 1,0x5C06, + 1,0x5F53, + 1,0x5C22, + 1,0x3781, + 1,0x5C60, + 1,0x5C6E, + 1,0x5CC0, + 1,0x5C8D, + 1,0x21DE4, + 1,0x5D43, + 1,0x21DE6, + 1,0x5D6E, + 1,0x5D6B, + 1,0x5D7C, + 1,0x5DE1, + 1,0x5DE2, + 1,0x382F, + 1,0x5DFD, + 1,0x5E28, + 1,0x5E3D, + 1,0x5E69, + 1,0x3862, + 1,0x22183, + 1,0x387C, + 1,0x5EB0, + 1,0x5EB3, + 1,0x5EB6, + 1,0x5ECA, + 1,0x2A392, + 1,0x5EFE, + 1,0x22331, + 1,0x22331, + 1,0x8201, + 1,0x5F22, + 1,0x5F22, + 1,0x38C7, + 1,0x232B8, + 1,0x261DA, + 1,0x5F62, + 1,0x5F6B, + 1,0x38E3, + 1,0x5F9A, + 1,0x5FCD, + 1,0x5FD7, + 1,0x5FF9, + 1,0x6081, + 1,0x393A, + 1,0x391C, + 1,0x6094, + 1,0x226D4, + 1,0x60C7, + 1,0x6148, + 1,0x614C, + 1,0x614E, + 1,0x614C, + 1,0x617A, + 1,0x618E, + 1,0x61B2, + 1,0x61A4, + 1,0x61AF, + 1,0x61DE, + 1,0x61F2, + 1,0x61F6, + 1,0x6210, + 1,0x621B, + 1,0x625D, + 1,0x62B1, + 1,0x62D4, + 1,0x6350, + 1,0x22B0C, + 1,0x633D, + 1,0x62FC, + 1,0x6368, + 1,0x6383, + 1,0x63E4, + 1,0x22BF1, + 1,0x6422, + 1,0x63C5, + 1,0x63A9, + 1,0x3A2E, + 1,0x6469, + 1,0x647E, + 1,0x649D, + 1,0x6477, + 1,0x3A6C, + 1,0x654F, + 1,0x656C, + 1,0x2300A, + 1,0x65E3, + 1,0x66F8, + 1,0x6649, + 1,0x3B19, + 1,0x6691, + 1,0x3B08, + 1,0x3AE4, + 1,0x5192, + 1,0x5195, + 1,0x6700, + 1,0x669C, + 1,0x80AD, + 1,0x43D9, + 1,0x6717, + 1,0x671B, + 1,0x6721, + 1,0x675E, + 1,0x6753, + 1,0x233C3, + 1,0x3B49, + 1,0x67FA, + 1,0x6785, + 1,0x6852, + 1,0x6885, + 1,0x2346D, + 1,0x688E, + 1,0x681F, + 1,0x6914, + 1,0x3B9D, + 1,0x6942, + 1,0x69A3, + 1,0x69EA, + 1,0x6AA8, + 1,0x236A3, + 1,0x6ADB, + 1,0x3C18, + 1,0x6B21, + 1,0x238A7, + 1,0x6B54, + 1,0x3C4E, + 1,0x6B72, + 1,0x6B9F, + 1,0x6BBA, + 1,0x6BBB, + 1,0x23A8D, + 1,0x21D0B, + 1,0x23AFA, + 1,0x6C4E, + 1,0x23CBC, + 1,0x6CBF, + 1,0x6CCD, + 1,0x6C67, + 1,0x6D16, + 1,0x6D3E, + 1,0x6D77, + 1,0x6D41, + 1,0x6D69, + 1,0x6D78, + 1,0x6D85, + 1,0x23D1E, + 1,0x6D34, + 1,0x6E2F, + 1,0x6E6E, + 1,0x3D33, + 1,0x6ECB, + 1,0x6EC7, + 1,0x23ED1, + 1,0x6DF9, + 1,0x6F6E, + 1,0x23F5E, + 1,0x23F8E, + 1,0x6FC6, + 1,0x7039, + 1,0x701E, + 1,0x701B, + 1,0x3D96, + 1,0x704A, + 1,0x707D, + 1,0x7077, + 1,0x70AD, + 1,0x20525, + 1,0x7145, + 1,0x24263, + 1,0x719C, + 1,0x243AB, + 1,0x7228, + 1,0x7235, + 1,0x7250, + 1,0x24608, + 1,0x7280, + 1,0x7295, + 1,0x24735, + 1,0x24814, + 1,0x737A, + 1,0x738B, + 1,0x3EAC, + 1,0x73A5, + 1,0x3EB8, + 1,0x3EB8, + 1,0x7447, + 1,0x745C, + 1,0x7471, + 1,0x7485, + 1,0x74CA, + 1,0x3F1B, + 1,0x7524, + 1,0x24C36, + 1,0x753E, + 1,0x24C92, + 1,0x7570, + 1,0x2219F, + 1,0x7610, + 1,0x24FA1, + 1,0x24FB8, + 1,0x25044, + 1,0x3FFC, + 1,0x4008, + 1,0x76F4, + 1,0x250F3, + 1,0x250F2, + 1,0x25119, + 1,0x25133, + 1,0x771E, + 1,0x771F, + 1,0x771F, + 1,0x774A, + 1,0x4039, + 1,0x778B, + 1,0x4046, + 1,0x4096, + 1,0x2541D, + 1,0x784E, + 1,0x788C, + 1,0x78CC, + 1,0x40E3, + 1,0x25626, + 1,0x7956, + 1,0x2569A, + 1,0x256C5, + 1,0x798F, + 1,0x79EB, + 1,0x412F, + 1,0x7A40, + 1,0x7A4A, + 1,0x7A4F, + 1,0x2597C, + 1,0x25AA7, + 1,0x25AA7, + 1,0x7AEE, + 1,0x4202, + 1,0x25BAB, + 1,0x7BC6, + 1,0x7BC9, + 1,0x4227, + 1,0x25C80, + 1,0x7CD2, + 1,0x42A0, + 1,0x7CE8, + 1,0x7CE3, + 1,0x7D00, + 1,0x25F86, + 1,0x7D63, + 1,0x4301, + 1,0x7DC7, + 1,0x7E02, + 1,0x7E45, + 1,0x4334, + 1,0x26228, + 1,0x26247, + 1,0x4359, + 1,0x262D9, + 1,0x7F7A, + 1,0x2633E, + 1,0x7F95, + 1,0x7FFA, + 1,0x8005, + 1,0x264DA, + 1,0x26523, + 1,0x8060, + 1,0x265A8, + 1,0x8070, + 1,0x2335F, + 1,0x43D5, + 1,0x80B2, + 1,0x8103, + 1,0x440B, + 1,0x813E, + 1,0x5AB5, + 1,0x267A7, + 1,0x267B5, + 1,0x23393, + 1,0x2339C, + 1,0x8201, + 1,0x8204, + 1,0x8F9E, + 1,0x446B, + 1,0x8291, + 1,0x828B, + 1,0x829D, + 1,0x52B3, + 1,0x82B1, + 1,0x82B3, + 1,0x82BD, + 1,0x82E6, + 1,0x26B3C, + 1,0x82E5, + 1,0x831D, + 1,0x8363, + 1,0x83AD, + 1,0x8323, + 1,0x83BD, + 1,0x83E7, + 1,0x8457, + 1,0x8353, + 1,0x83CA, + 1,0x83CC, + 1,0x83DC, + 1,0x26C36, + 1,0x26D6B, + 1,0x26CD5, + 1,0x452B, + 1,0x84F1, + 1,0x84F3, + 1,0x8516, + 1,0x273CA, + 1,0x8564, + 1,0x26F2C, + 1,0x455D, + 1,0x4561, + 1,0x26FB1, + 1,0x270D2, + 1,0x456B, + 1,0x8650, + 1,0x865C, + 1,0x8667, + 1,0x8669, + 1,0x86A9, + 1,0x8688, + 1,0x870E, + 1,0x86E2, + 1,0x8779, + 1,0x8728, + 1,0x876B, + 1,0x8786, + 1,0x45D7, + 1,0x87E1, + 1,0x8801, + 1,0x45F9, + 1,0x8860, + 1,0x8863, + 1,0x27667, + 1,0x88D7, + 1,0x88DE, + 1,0x4635, + 1,0x88FA, + 1,0x34BB, + 1,0x278AE, + 1,0x27966, + 1,0x46BE, + 1,0x46C7, + 1,0x8AA0, + 1,0x8AED, + 1,0x8B8A, + 1,0x8C55, + 1,0x27CA8, + 1,0x8CAB, + 1,0x8CC1, + 1,0x8D1B, + 1,0x8D77, + 1,0x27F2F, + 1,0x20804, + 1,0x8DCB, + 1,0x8DBC, + 1,0x8DF0, + 1,0x208DE, + 1,0x8ED4, + 1,0x8F38, + 1,0x285D2, + 1,0x285ED, + 1,0x9094, + 1,0x90F1, + 1,0x9111, + 1,0x2872E, + 1,0x911B, + 1,0x9238, + 1,0x92D7, + 1,0x92D8, + 1,0x927C, + 1,0x93F9, + 1,0x9415, + 1,0x28BFA, + 1,0x958B, + 1,0x4995, + 1,0x95B7, + 1,0x28D77, + 1,0x49E6, + 1,0x96C3, + 1,0x5DB2, + 1,0x9723, + 1,0x29145, + 1,0x2921A, + 1,0x4A6E, + 1,0x4A76, + 1,0x97E0, + 1,0x2940A, + 1,0x4AB2, + 1,0x29496, + 1,0x980B, + 1,0x980B, + 1,0x9829, + 1,0x295B6, + 1,0x98E2, + 1,0x4B33, + 1,0x9929, + 1,0x99A7, + 1,0x99C2, + 1,0x99FE, + 1,0x4BCE, + 1,0x29B30, + 1,0x9B12, + 1,0x9C40, + 1,0x9CFD, + 1,0x4CCE, + 1,0x4CED, + 1,0x9D67, + 1,0x2A0CE, + 1,0x4CF8, + 1,0x2A105, + 1,0x2A20E, + 1,0x2A291, + 1,0x9EBB, + 1,0x4D56, + 1,0x9EF9, + 1,0x9EFE, + 1,0x9F05, + 1,0x9F0F, + 1,0x9F16, + 1,0x9F3B, + 1,0x2A600, +}; + +static const short translit_page00[344] = { + 0, 2, 4, 6, -1, 9, 13, 15, /* 0xa0-0xa7 */ + 18, 20, 24, 26, 29, 33, 35, -1, /* 0xa8-0xaf */ + 39, 42, 46, 49, 52, 54, 56, 58, /* 0xb0-0xb7 */ + 60, 62, 65, 67, 70, 76, 82, 88, /* 0xb8-0xbf */ + 90, 93, 96, 99, 102, 105, 107, 110, /* 0xc0-0xc7 */ + 112, 115, 118, 121, 124, 127, 130, 133, /* 0xc8-0xcf */ + 136, 138, 141, 144, 147, 150, 153, 156, /* 0xd0-0xd7 */ + 158, 160, 163, 166, 169, 172, 175, 178, /* 0xd8-0xdf */ + 181, 184, 187, 190, 193, 196, 198, 201, /* 0xe0-0xe7 */ + 203, 206, 209, 212, 215, 218, 221, 224, /* 0xe8-0xef */ + 227, 229, 232, 235, 238, 241, 244, 247, /* 0xf0-0xf7 */ + 249, 251, 254, 257, 260, 263, 266, 269, /* 0xf8-0xff */ + /* 0x0100 */ + 272, 274, 276, 278, 280, 282, 284, 287, /* 0x00-0x07 */ + 290, 293, 296, 298, 300, 302, 304, 306, /* 0x08-0x0f */ + 308, 310, 312, 314, 316, 318, 320, 322, /* 0x10-0x17 */ + 324, 326, 328, 330, 332, 335, 338, 340, /* 0x18-0x1f */ + 342, 344, 346, 348, 350, 353, 356, 358, /* 0x20-0x27 */ + 360, 363, 366, 368, 370, 372, 374, 376, /* 0x28-0x2f */ + 378, 380, 382, 385, 388, 391, 394, 396, /* 0x30-0x37 */ + -1, 398, 400, 402, 404, 406, 408, 410, /* 0x38-0x3f */ + 412, 414, 416, 418, 421, 424, 426, 428, /* 0x40-0x47 */ + 430, 432, -1, -1, 435, 437, 439, 441, /* 0x48-0x4f */ + 443, 446, 449, 452, 455, 458, 461, 463, /* 0x50-0x57 */ + 465, 467, 469, 472, 475, 478, 481, 483, /* 0x58-0x5f */ + 485, 487, 489, 491, 493, 495, 497, 499, /* 0x60-0x67 */ + 501, 504, 507, 509, 511, 513, 515, 517, /* 0x68-0x6f */ + 519, 522, 525, 527, 529, 532, 535, 538, /* 0x70-0x77 */ + 541, 544, 547, 550, 552, 554, 556, 558, /* 0x78-0x7f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x80-0x87 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x88-0x8f */ + -1, -1, 560, -1, -1, -1, -1, -1, /* 0x90-0x97 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x98-0x9f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xa0-0xa7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xa8-0xaf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb0-0xb7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb8-0xbf */ + -1, -1, -1, -1, 562, 565, 568, 571, /* 0xc0-0xc7 */ + 574, 577, 580, 583, 586, -1, -1, -1, /* 0xc8-0xcf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd0-0xd7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd8-0xdf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe0-0xe7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe8-0xef */ + -1, 589, 592, 595, -1, -1, -1, -1, /* 0xf0-0xf7 */ +}; +static const short translit_page02[8] = { + 598, 600, 602, 604, -1, -1, -1, -1, /* 0x18-0x1f */ +}; +static const short translit_page02_1[40] = { + -1, 606, 608, 610, 612, 614, -1, -1, /* 0xb8-0xbf */ + -1, -1, -1, -1, -1, -1, 616, -1, /* 0xc0-0xc7 */ + 618, 620, 622, 624, -1, 626, -1, -1, /* 0xc8-0xcf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd0-0xd7 */ + -1, -1, -1, -1, 628, 630, -1, -1, /* 0xd8-0xdf */ +}; +static const short translit_page03[48] = { + 632, 634, 636, -1, -1, 638, 640, -1, /* 0xd0-0xd7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd8-0xdf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe0-0xe7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe8-0xef */ + 642, 644, 646, -1, 648, 650, -1, -1, /* 0xf0-0xf7 */ + -1, 652, -1, -1, -1, -1, -1, -1, /* 0xf8-0xff */ +}; +static const short translit_page05[8] = { + 657, 660, 663, -1, -1, -1, -1, -1, /* 0xf0-0xf7 */ +}; +static const short translit_page06[16] = { + -1, -1, -1, -1, -1, 666, 669, 672, /* 0x70-0x77 */ + 675, -1, -1, -1, -1, -1, -1, -1, /* 0x78-0x7f */ +}; +static const short translit_page0e[48] = { + -1, -1, -1, 681, -1, -1, -1, -1, /* 0xb0-0xb7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb8-0xbf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc0-0xc7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc8-0xcf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd0-0xd7 */ + -1, -1, -1, -1, 684, 687, -1, -1, /* 0xd8-0xdf */ +}; +static const short translit_page0f[16] = { + -1, -1, -1, -1, -1, -1, -1, 690, /* 0x70-0x77 */ + -1, 693, -1, -1, -1, -1, -1, -1, /* 0x78-0x7f */ +}; +static const short translit_page1e[160] = { + -1, -1, 696, 698, -1, -1, -1, -1, /* 0x00-0x07 */ + -1, -1, 700, 702, -1, -1, -1, -1, /* 0x08-0x0f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x10-0x17 */ + -1, -1, -1, -1, -1, -1, 704, 706, /* 0x18-0x1f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x20-0x27 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x28-0x2f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x30-0x37 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x38-0x3f */ + 708, 710, -1, -1, -1, -1, -1, -1, /* 0x40-0x47 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x48-0x4f */ + -1, -1, -1, -1, -1, -1, 712, 714, /* 0x50-0x57 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x58-0x5f */ + 716, 718, -1, -1, -1, -1, -1, -1, /* 0x60-0x67 */ + -1, -1, 720, 722, -1, -1, -1, -1, /* 0x68-0x6f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x70-0x77 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x78-0x7f */ + 724, 727, 730, 733, 736, 739, -1, -1, /* 0x80-0x87 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x88-0x8f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x90-0x97 */ + -1, -1, 742, -1, -1, -1, -1, -1, /* 0x98-0x9f */ +}; +static const short translit_page1e_1[8] = { + -1, -1, 745, 748, -1, -1, -1, -1, /* 0xf0-0xf7 */ +}; +static const short translit_page20[88] = { + -1, -1, 751, 753, 755, 757, 759, -1, /* 0x00-0x07 */ + 761, 763, 765, -1, -1, -1, -1, -1, /* 0x08-0x0f */ + 767, 769, 771, 773, 775, 777, -1, -1, /* 0x10-0x17 */ + 779, 781, 783, 785, 787, 789, 791, 793, /* 0x18-0x1f */ + 795, -1, 797, -1, 799, 801, 804, -1, /* 0x20-0x27 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x28-0x2f */ + 808, -1, 813, 815, 818, -1, 822, 825, /* 0x30-0x37 */ + -1, 829, 831, -1, 833, -1, -1, -1, /* 0x38-0x3f */ + -1, -1, -1, -1, 836, -1, -1, 838, /* 0x40-0x47 */ + 841, 844, -1, -1, -1, -1, -1, -1, /* 0x48-0x4f */ + -1, -1, -1, -1, -1, -1, -1, 847, /* 0x50-0x57 */ +}; +static const short translit_page20_1[8] = { + 852, -1, -1, 855, 860, -1, -1, -1, /* 0xa8-0xaf */ +}; +static const short translit_page21[216] = { + 864, 868, 872, 874, -1, 877, 881, 885, /* 0x00-0x07 */ + -1, 887, 890, 892, 894, 896, 898, 900, /* 0x08-0x0f */ + 902, 904, 906, 908, -1, 910, 912, -1, /* 0x10-0x17 */ + -1, 915, 917, 919, 921, 923, -1, -1, /* 0x18-0x1f */ + -1, 925, 929, -1, 932, -1, 934, -1, /* 0x20-0x27 */ + 938, -1, -1, -1, 940, 942, 944, 946, /* 0x28-0x2f */ + 948, 950, -1, 952, 954, 956, 958, 960, /* 0x30-0x37 */ + 962, 964, -1, 966, -1, 970, 972, 974, /* 0x38-0x3f */ + 976, -1, -1, -1, -1, 978, 980, 982, /* 0x40-0x47 */ + 984, 986, -1, -1, -1, -1, -1, -1, /* 0x48-0x4f */ + -1, -1, -1, 988, 994, 1000, 1006, 1012, /* 0x50-0x57 */ + 1018, 1024, 1030, 1036, 1042, 1048, 1054, 1060, /* 0x58-0x5f */ + 1064, 1066, 1069, 1073, 1076, 1078, 1081, 1085, /* 0x60-0x67 */ + 1090, 1093, 1095, 1098, 1102, 1104, 1106, 1108, /* 0x68-0x6f */ + 1110, 1112, 1115, 1119, 1122, 1124, 1127, 1131, /* 0x70-0x77 */ + 1136, 1139, 1141, 1144, 1148, 1150, 1152, 1154, /* 0x78-0x7f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x80-0x87 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x88-0x8f */ + 1156, 1159, 1161, 1164, 1166, -1, -1, -1, /* 0x90-0x97 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x98-0x9f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xa0-0xa7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xa8-0xaf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb0-0xb7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb8-0xbf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc0-0xc7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc8-0xcf */ + 1170, -1, 1173, -1, 1176, -1, -1, -1, /* 0xd0-0xd7 */ +}; +static const short translit_page22[96] = { + -1, -1, 1180, -1, -1, 1182, 1184, 1186, /* 0x10-0x17 */ + -1, 1188, -1, -1, -1, -1, -1, -1, /* 0x18-0x1f */ + -1, -1, -1, 1190, -1, -1, -1, -1, /* 0x20-0x27 */ + -1, -1, -1, -1, 1192, 1195, -1, 1199, /* 0x28-0x2f */ + 1202, -1, -1, -1, -1, -1, 1206, -1, /* 0x30-0x37 */ + -1, -1, -1, -1, 1208, -1, -1, -1, /* 0x38-0x3f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x40-0x47 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x48-0x4f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x50-0x57 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x58-0x5f */ + 1210, -1, -1, -1, 1213, 1216, -1, -1, /* 0x60-0x67 */ + -1, -1, 1219, 1222, -1, -1, -1, -1, /* 0x68-0x6f */ +}; +static const short translit_page22_1[48] = { + -1, -1, -1, -1, -1, 1225, -1, -1, /* 0xc0-0xc7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc8-0xcf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd0-0xd7 */ + 1227, 1231, -1, -1, -1, -1, -1, -1, /* 0xd8-0xdf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe0-0xe7 */ + -1, -1, -1, -1, -1, -1, -1, 1235, /* 0xe8-0xef */ +}; +static const short translit_page24[240] = { + 1239, 1245, 1251, 1257, 1263, 1269, 1275, 1281, /* 0x00-0x07 */ + 1287, 1292, 1297, 1302, 1307, 1312, 1317, 1322, /* 0x08-0x0f */ + 1327, 1333, 1339, 1345, 1351, 1357, 1363, 1369, /* 0x10-0x17 */ + 1375, 1381, 1386, 1392, 1398, 1403, 1408, 1413, /* 0x18-0x1f */ + 1418, 1423, -1, -1, 1429, -1, -1, -1, /* 0x20-0x27 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x28-0x2f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x30-0x37 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x38-0x3f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x40-0x47 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x48-0x4f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x50-0x57 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x58-0x5f */ + 1434, 1438, 1442, 1446, 1450, 1454, 1458, 1462, /* 0x60-0x67 */ + 1466, 1470, 1475, 1480, 1485, 1490, 1495, 1500, /* 0x68-0x6f */ + 1505, 1510, 1515, 1520, 1525, 1529, 1533, 1537, /* 0x70-0x77 */ + 1541, 1545, 1549, 1553, 1557, 1561, 1566, 1571, /* 0x78-0x7f */ + 1576, 1581, 1586, 1591, 1596, 1601, 1606, 1611, /* 0x80-0x87 */ + 1616, 1619, 1622, 1625, 1628, 1631, 1634, 1637, /* 0x88-0x8f */ + 1640, 1643, 1647, 1651, 1655, 1659, 1663, 1667, /* 0x90-0x97 */ + 1671, 1675, 1679, 1683, 1687, 1691, 1695, 1699, /* 0x98-0x9f */ + 1703, 1707, 1711, 1715, 1719, 1723, 1727, 1731, /* 0xa0-0xa7 */ + 1735, 1739, 1743, 1747, 1751, 1755, 1759, 1763, /* 0xa8-0xaf */ + 1767, 1771, 1775, 1779, 1783, 1787, 1791, 1795, /* 0xb0-0xb7 */ + 1799, 1803, 1807, 1811, 1815, 1819, 1823, 1827, /* 0xb8-0xbf */ + 1831, 1835, 1839, 1843, 1847, 1851, 1855, 1859, /* 0xc0-0xc7 */ + 1863, 1867, 1871, 1875, 1879, 1883, 1887, 1891, /* 0xc8-0xcf */ + 1895, 1899, 1903, 1907, 1911, 1915, 1919, 1923, /* 0xd0-0xd7 */ + 1927, 1931, 1935, 1939, 1943, 1947, 1951, 1955, /* 0xd8-0xdf */ + 1959, 1963, 1967, 1971, 1975, 1979, 1983, 1987, /* 0xe0-0xe7 */ + 1991, 1995, 1999, -1, -1, -1, -1, -1, /* 0xe8-0xef */ +}; +static const short translit_page25[64] = { + 2003, -1, 2005, -1, -1, -1, -1, -1, /* 0x00-0x07 */ + -1, -1, -1, -1, 2007, -1, -1, -1, /* 0x08-0x0f */ + 2009, -1, -1, -1, 2011, -1, -1, -1, /* 0x10-0x17 */ + 2013, -1, -1, -1, 2015, -1, -1, -1, /* 0x18-0x1f */ + -1, -1, -1, -1, 2017, -1, -1, -1, /* 0x20-0x27 */ + -1, -1, -1, -1, 2019, -1, -1, -1, /* 0x28-0x2f */ + -1, -1, -1, -1, 2021, -1, -1, -1, /* 0x30-0x37 */ + -1, -1, -1, -1, 2023, -1, -1, -1, /* 0x38-0x3f */ +}; +static const short translit_page2a[8] = { + -1, -1, -1, -1, 2032, 2036, 2039, -1, /* 0x70-0x77 */ +}; +static const short translit_page2f[216] = { + 2047, 2049, 2051, 2053, 2055, 2057, 2059, 2061, /* 0x00-0x07 */ + 2063, 2065, 2067, 2069, 2071, 2073, 2075, 2077, /* 0x08-0x0f */ + 2079, 2081, 2083, 2085, 2087, 2089, 2091, 2093, /* 0x10-0x17 */ + 2095, 2097, 2099, 2101, 2103, 2105, 2107, 2109, /* 0x18-0x1f */ + 2111, 2113, 2115, 2117, 2119, 2121, 2123, 2125, /* 0x20-0x27 */ + 2127, 2129, 2131, 2133, 2135, 2137, 2139, 2141, /* 0x28-0x2f */ + 2143, 2145, 2147, 2149, 2151, 2153, 2155, 2157, /* 0x30-0x37 */ + 2159, 2161, 2163, 2165, 2167, 2169, 2171, 2173, /* 0x38-0x3f */ + 2175, 2177, 2179, 2181, 2183, 2185, 2187, 2189, /* 0x40-0x47 */ + 2191, 2193, 2195, 2197, 2199, 2201, 2203, 2205, /* 0x48-0x4f */ + 2207, 2209, 2211, 2213, 2215, 2217, 2219, 2221, /* 0x50-0x57 */ + 2223, 2225, 2227, 2229, 2231, 2233, 2235, 2237, /* 0x58-0x5f */ + 2239, 2241, 2243, 2245, 2247, 2249, 2251, 2253, /* 0x60-0x67 */ + 2255, 2257, 2259, 2261, 2263, 2265, 2267, 2269, /* 0x68-0x6f */ + 2271, 2273, 2275, 2277, 2279, 2281, 2283, 2285, /* 0x70-0x77 */ + 2287, 2289, 2291, 2293, 2295, 2297, 2299, 2301, /* 0x78-0x7f */ + 2303, 2305, 2307, 2309, 2311, 2313, 2315, 2317, /* 0x80-0x87 */ + 2319, 2321, 2323, 2325, 2327, 2329, 2331, 2333, /* 0x88-0x8f */ + 2335, 2337, 2339, 2341, 2343, 2345, 2347, 2349, /* 0x90-0x97 */ + 2351, 2353, 2355, 2357, 2359, 2361, 2363, 2365, /* 0x98-0x9f */ + 2367, 2369, 2371, 2373, 2375, 2377, 2379, 2381, /* 0xa0-0xa7 */ + 2383, 2385, 2387, 2389, 2391, 2393, 2395, 2397, /* 0xa8-0xaf */ + 2399, 2401, 2403, 2405, 2407, 2409, 2411, 2413, /* 0xb0-0xb7 */ + 2415, 2417, 2419, 2421, 2423, 2425, 2427, 2429, /* 0xb8-0xbf */ + 2431, 2433, 2435, 2437, 2439, 2441, 2443, 2445, /* 0xc0-0xc7 */ + 2447, 2449, 2451, 2453, 2455, 2457, 2459, 2461, /* 0xc8-0xcf */ + 2463, 2465, 2467, 2469, 2471, 2473, -1, -1, /* 0xd0-0xd7 */ +}; +static const short translit_page30[248] = { + 2475, -1, -1, -1, -1, -1, -1, -1, /* 0x00-0x07 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x08-0x0f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x10-0x17 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18-0x1f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x20-0x27 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x28-0x2f */ + -1, -1, -1, -1, -1, -1, 2477, -1, /* 0x30-0x37 */ + 2479, 2481, 2483, -1, -1, -1, -1, -1, /* 0x38-0x3f */ + -1, 2485, -1, 2487, -1, 2489, -1, 2491, /* 0x40-0x47 */ + -1, 2493, -1, -1, -1, -1, -1, -1, /* 0x48-0x4f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x50-0x57 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x58-0x5f */ + -1, -1, -1, 2495, -1, -1, -1, -1, /* 0x60-0x67 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x68-0x6f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x70-0x77 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x78-0x7f */ + -1, -1, -1, 2497, -1, 2499, -1, 2501, /* 0x80-0x87 */ + -1, -1, -1, -1, -1, -1, 2503, -1, /* 0x88-0x8f */ + -1, -1, -1, -1, -1, 2505, 2507, -1, /* 0x90-0x97 */ + -1, -1, -1, 2509, 2512, -1, -1, -1, /* 0x98-0x9f */ + 2515, 2517, -1, 2519, -1, 2521, -1, 2523, /* 0xa0-0xa7 */ + -1, 2525, -1, -1, -1, -1, -1, -1, /* 0xa8-0xaf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb0-0xb7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb8-0xbf */ + -1, -1, -1, 2527, -1, -1, -1, -1, /* 0xc0-0xc7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc8-0xcf */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd0-0xd7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd8-0xdf */ + -1, -1, -1, 2529, -1, 2531, -1, 2533, /* 0xe0-0xe7 */ + -1, -1, -1, -1, -1, -1, 2535, -1, /* 0xe8-0xef */ + -1, -1, -1, -1, -1, 2537, 2539, -1, /* 0xf0-0xf7 */ +}; +static const short translit_page31[96] = { + -1, 2541, 2543, 2545, 2547, 2549, 2551, 2553, /* 0x30-0x37 */ + 2555, 2557, 2559, 2561, 2563, 2565, 2567, 2569, /* 0x38-0x3f */ + 2571, 2573, 2575, 2577, 2579, 2581, 2583, 2585, /* 0x40-0x47 */ + 2587, 2589, 2591, 2593, 2595, 2597, 2599, 2601, /* 0x48-0x4f */ + 2603, 2605, 2607, 2609, 2611, 2613, 2615, 2617, /* 0x50-0x57 */ + 2619, 2621, 2623, 2625, 2627, 2629, 2631, 2633, /* 0x58-0x5f */ + 2635, 2637, 2639, 2641, 2643, 2645, 2647, 2649, /* 0x60-0x67 */ + 2651, 2653, 2655, 2657, 2659, 2661, 2663, 2665, /* 0x68-0x6f */ + 2667, 2669, 2671, 2673, 2675, 2677, 2679, 2681, /* 0x70-0x77 */ + 2683, 2685, 2687, 2689, 2691, 2693, 2695, 2697, /* 0x78-0x7f */ + 2699, 2701, 2703, 2705, 2707, 2709, 2711, 2713, /* 0x80-0x87 */ + 2715, 2717, 2719, 2721, 2723, 2725, 2727, -1, /* 0x88-0x8f */ +}; +static const short translit_page31_1[528] = { + 2729, 2731, 2733, 2735, 2737, 2739, 2741, 2743, /* 0xf0-0xf7 */ + 2745, 2747, 2749, 2751, 2753, 2755, 2757, 2759, /* 0xf8-0xff */ + /* 0x3200 */ + 2761, 2765, 2769, 2773, 2777, 2781, 2785, 2789, /* 0x00-0x07 */ + 2793, 2797, 2801, 2805, 2809, 2813, 2817, 2822, /* 0x08-0x0f */ + 2827, 2832, 2837, 2842, 2847, 2852, 2857, 2862, /* 0x10-0x17 */ + 2867, 2872, 2877, 2882, 2887, 2892, 2900, -1, /* 0x18-0x1f */ + 2907, 2911, 2915, 2919, 2923, 2927, 2931, 2935, /* 0x20-0x27 */ + 2939, 2943, 2947, 2951, 2955, 2959, 2963, 2967, /* 0x28-0x2f */ + 2971, 2975, 2979, 2983, 2987, 2991, 2995, 2999, /* 0x30-0x37 */ + 3003, 3007, 3011, 3015, 3019, 3023, 3027, 3031, /* 0x38-0x3f */ + 3035, 3039, 3043, 3047, -1, -1, -1, -1, /* 0x40-0x47 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x48-0x4f */ + 3051, 3055, 3060, 3065, 3070, 3075, 3080, 3085, /* 0x50-0x57 */ + 3090, 3095, 3100, 3105, 3110, 3115, 3120, 3125, /* 0x58-0x5f */ + 3130, 3134, 3138, 3142, 3146, 3150, 3154, 3158, /* 0x60-0x67 */ + 3162, 3166, 3170, 3174, 3178, 3182, 3186, 3191, /* 0x68-0x6f */ + 3196, 3201, 3206, 3211, 3216, 3221, 3226, 3231, /* 0x70-0x77 */ + 3236, 3241, 3246, 3251, 3256, 3264, -1, -1, /* 0x78-0x7f */ + 3271, 3275, 3279, 3283, 3287, 3291, 3295, 3299, /* 0x80-0x87 */ + 3303, 3307, 3311, 3315, 3319, 3323, 3327, 3331, /* 0x88-0x8f */ + 3335, 3339, 3343, 3347, 3351, 3355, 3359, 3363, /* 0x90-0x97 */ + 3367, 3371, 3375, 3379, 3383, 3387, 3391, 3395, /* 0x98-0x9f */ + 3399, 3403, 3407, 3411, 3415, 3419, 3423, 3427, /* 0xa0-0xa7 */ + 3431, 3435, 3439, 3443, 3447, 3451, 3455, 3459, /* 0xa8-0xaf */ + 3463, 3467, 3472, 3477, 3482, 3487, 3492, 3497, /* 0xb0-0xb7 */ + 3502, 3507, 3512, 3517, 3522, 3527, 3532, 3537, /* 0xb8-0xbf */ + 3542, 3545, 3548, 3551, 3554, 3557, 3560, 3563, /* 0xc0-0xc7 */ + 3566, 3569, 3573, 3577, 3581, 3584, 3588, 3591, /* 0xc8-0xcf */ + 3595, 3599, 3603, 3607, 3611, 3615, 3619, 3623, /* 0xd0-0xd7 */ + 3627, 3631, 3635, 3639, 3643, 3647, 3651, 3655, /* 0xd8-0xdf */ + 3659, 3663, 3667, 3671, 3675, 3679, 3683, 3687, /* 0xe0-0xe7 */ + 3691, 3695, 3699, 3703, 3707, 3711, 3715, 3719, /* 0xe8-0xef */ + 3723, 3727, 3731, 3735, 3739, 3743, 3747, 3751, /* 0xf0-0xf7 */ + 3755, 3759, 3763, 3767, 3771, 3775, 3779, -1, /* 0xf8-0xff */ + /* 0x3300 */ + 3783, 3788, 3793, 3798, 3802, 3807, 3811, 3815, /* 0x00-0x07 */ + 3821, 3826, 3830, 3834, 3838, 3843, 3848, 3852, /* 0x08-0x0f */ + 3856, 3859, 3863, 3868, 3873, 3876, 3882, 3889, /* 0x10-0x17 */ + 3895, 3899, 3905, 3911, 3916, 3920, 3924, 3928, /* 0x18-0x1f */ + 3933, 3939, 3944, 3948, 3952, 3956, 3959, 3962, /* 0x20-0x27 */ + 3965, 3968, 3972, 3976, 3982, 3986, 3991, 3997, /* 0x28-0x2f */ + 4001, 4004, 4007, 4013, 4018, 4024, 4028, 4034, /* 0x30-0x37 */ + 4037, 4041, 4045, 4049, 4053, 4057, 4062, 4066, /* 0x38-0x3f */ + 4069, 4073, 4077, 4081, 4086, 4090, 4094, 4098, /* 0x40-0x47 */ + 4104, 4109, 4112, 4118, 4121, 4126, 4131, 4135, /* 0x48-0x4f */ + 4139, 4143, 4148, 4151, 4155, 4160, 4163, 4169, /* 0x50-0x57 */ + 4173, 4176, 4179, 4182, 4185, 4188, 4191, 4194, /* 0x58-0x5f */ + 4197, 4200, 4203, 4207, 4211, 4215, 4219, 4223, /* 0x60-0x67 */ + 4227, 4231, 4235, 4239, 4243, 4247, 4251, 4255, /* 0x68-0x6f */ + 4259, 4263, 4267, 4270, 4273, 4277, 4280, 4283, /* 0x70-0x77 */ + 4286, 4291, 4296, 4299, 4302, 4305, 4308, 4311, /* 0x78-0x7f */ + 4316, 4319, 4322, 4325, 4328, 4331, 4334, 4337, /* 0x80-0x87 */ + 4340, 4344, 4349, 4352, 4355, 4358, 4361, 4364, /* 0x88-0x8f */ + 4367, 4370, 4374, 4378, 4382, 4386, 4389, 4392, /* 0x90-0x97 */ + 4395, 4398, 4401, 4404, 4407, 4410, 4413, 4416, /* 0x98-0x9f */ + 4421, 4426, 4430, 4435, 4440, 4445, 4449, 4454, /* 0xa0-0xa7 */ + 4458, 4464, 4467, 4471, 4475, 4479, 4483, 4489, /* 0xa8-0xaf */ + 4497, 4500, 4503, 4506, 4509, 4512, 4515, 4518, /* 0xb0-0xb7 */ + 4521, 4524, 4527, 4530, 4533, 4536, 4539, 4542, /* 0xb8-0xbf */ + 4545, 4548, 4551, 4556, 4559, 4562, 4565, 4570, /* 0xc0-0xc7 */ + 4574, 4577, 4580, 4583, 4586, 4589, 4592, 4595, /* 0xc8-0xcf */ + 4598, 4601, 4604, 4608, 4611, 4614, 4618, 4622, /* 0xd0-0xd7 */ + 4625, 4630, 4634, 4637, 4640, 4643, 4646, 4650, /* 0xd8-0xdf */ + 4658, 4661, 4664, 4667, 4670, 4673, 4676, 4679, /* 0xe0-0xe7 */ + 4682, 4685, 4689, 4693, 4697, 4701, 4705, 4709, /* 0xe8-0xef */ + 4713, 4717, 4721, 4725, 4729, 4733, 4737, 4741, /* 0xf0-0xf7 */ + 4745, 4749, 4753, 4757, 4761, 4765, 4769, 4654, /* 0xf8-0xff */ +}; +static const short translit_pagef9[368] = { + 4773, 4775, 4777, 4779, 4781, 4783, 4785, 4787, /* 0x00-0x07 */ + 4789, 4791, 4793, 4795, 4797, 4799, 4801, 4803, /* 0x08-0x0f */ + 4805, 4807, 4809, 4811, 4813, 4815, 4817, 4819, /* 0x10-0x17 */ + 4821, 4823, 4825, 4827, 4829, 4831, 4833, 4835, /* 0x18-0x1f */ + 4837, 4839, 4841, 4843, 4845, 4847, 4849, 4851, /* 0x20-0x27 */ + 4853, 4855, 4857, 4859, 4861, 4863, 4865, 4867, /* 0x28-0x2f */ + 4869, 4871, 4873, 4875, 4877, 4879, 4881, 4883, /* 0x30-0x37 */ + 4885, 4887, 4889, 4891, 4893, 4895, 4897, 4899, /* 0x38-0x3f */ + 4901, 4903, 4905, 4907, 4909, 4911, 4913, 4915, /* 0x40-0x47 */ + 4917, 4919, 4921, 4923, 4925, 4927, 4929, 4931, /* 0x48-0x4f */ + 4933, 4935, 4937, 4939, 4941, 4943, 4945, 4947, /* 0x50-0x57 */ + 4949, 4951, 4953, 4955, 4957, 4959, 4961, 4963, /* 0x58-0x5f */ + 4965, 4967, 4969, 4971, 4973, 4975, 4977, 4979, /* 0x60-0x67 */ + 4981, 4983, 4985, 4987, 4989, 4991, 4993, 4995, /* 0x68-0x6f */ + 4997, 4999, 5001, 5003, 5005, 5007, 5009, 5011, /* 0x70-0x77 */ + 5013, 5015, 5017, 5019, 5021, 5023, 5025, 5027, /* 0x78-0x7f */ + 5029, 5031, 5033, 5035, 5037, 5039, 5041, 5043, /* 0x80-0x87 */ + 5045, 5047, 5049, 5051, 5053, 5055, 5057, 5059, /* 0x88-0x8f */ + 5061, 5063, 5065, 5067, 5069, 5071, 5073, 5075, /* 0x90-0x97 */ + 5077, 5079, 5081, 5083, 5085, 5087, 5089, 5091, /* 0x98-0x9f */ + 5093, 5095, 5097, 5099, 5101, 5103, 5105, 5107, /* 0xa0-0xa7 */ + 5109, 5111, 5113, 5115, 5117, 5119, 5121, 5123, /* 0xa8-0xaf */ + 5125, 5127, 5129, 5131, 5133, 5135, 5137, 5139, /* 0xb0-0xb7 */ + 5141, 5143, 5145, 5147, 5149, 5151, 5153, 5155, /* 0xb8-0xbf */ + 5157, 5159, 5161, 5163, 5165, 5167, 5169, 5171, /* 0xc0-0xc7 */ + 5173, 5175, 5177, 5179, 5181, 5183, 5185, 5187, /* 0xc8-0xcf */ + 5189, 5191, 5193, 5195, 5197, 5199, 5201, 5203, /* 0xd0-0xd7 */ + 5205, 5207, 5209, 5211, 5213, 5215, 5217, 5219, /* 0xd8-0xdf */ + 5221, 5223, 5225, 5227, 5229, 5231, 5233, 5235, /* 0xe0-0xe7 */ + 5237, 5239, 5241, 5243, 5245, 5247, 5249, 5251, /* 0xe8-0xef */ + 5253, 5255, 5257, 5259, 5261, 5263, 5265, 5267, /* 0xf0-0xf7 */ + 5269, 5271, 5273, 5275, 5277, 5279, 5281, 5283, /* 0xf8-0xff */ + /* 0xfa00 */ + 5285, 5287, 5289, 5291, 5293, 5295, 5297, 5299, /* 0x00-0x07 */ + 5301, 5303, 5305, 5307, 5309, 5311, -1, -1, /* 0x08-0x0f */ + 5313, -1, 5315, -1, -1, 5317, 5319, 5321, /* 0x10-0x17 */ + 5323, 5325, 5327, 5329, 5331, 5333, 5335, -1, /* 0x18-0x1f */ + 5337, -1, 5339, -1, -1, 5341, 5343, -1, /* 0x20-0x27 */ + -1, -1, 5345, 5347, 5349, 5351, -1, -1, /* 0x28-0x2f */ + 5353, 5355, 5357, 5359, 5361, 5363, 5365, 5367, /* 0x30-0x37 */ + 5369, 5371, 5373, 5375, 5377, 5379, 5381, 5383, /* 0x38-0x3f */ + 5385, 5387, 5389, 5391, 5393, 5395, 5397, 5399, /* 0x40-0x47 */ + 5401, 5403, 5405, 5407, 5409, 5411, 5413, 5415, /* 0x48-0x4f */ + 5417, 5419, 5421, 5423, 5425, 5427, 5429, 5431, /* 0x50-0x57 */ + 5433, 5435, 5437, 5439, 5441, 5443, 5445, 5447, /* 0x58-0x5f */ + 5449, 5451, 5453, 5455, 5457, 5459, 5461, 5463, /* 0x60-0x67 */ + 5465, 5467, 5469, -1, -1, -1, -1, -1, /* 0x68-0x6f */ +}; +static const short translit_pagefb[80] = { + 5471, 5474, 5477, 5480, 5484, 5488, 5491, -1, /* 0x00-0x07 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x08-0x0f */ + -1, -1, -1, 5494, 5497, 5500, 5503, 5506, /* 0x10-0x17 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18-0x1f */ + 5509, 5511, 5513, 5515, 5517, 5519, 5521, 5523, /* 0x20-0x27 */ + 5525, 5527, -1, -1, -1, -1, -1, -1, /* 0x28-0x2f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x30-0x37 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x38-0x3f */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x40-0x47 */ + -1, -1, -1, -1, -1, -1, -1, 5529, /* 0x48-0x4f */ +}; +static const short translit_pagefe[40] = { + -1, 5532, 5534, 5536, 5538, 5540, 5542, 5544, /* 0x48-0x4f */ + 5546, 5548, 5550, -1, 5552, 5554, 5556, 5558, /* 0x50-0x57 */ + 5560, 5562, 5564, 5566, 5568, 5570, 5572, 5574, /* 0x58-0x5f */ + 5576, 5578, 5580, 5582, 5584, 5586, 5588, -1, /* 0x60-0x67 */ + 5590, 5592, 5594, 5596, -1, -1, -1, -1, /* 0x68-0x6f */ +}; +static const short translit_pageff[240] = { + -1, 5598, 5600, 5602, 5604, 5606, 5608, 5610, /* 0x00-0x07 */ + 5612, 5614, 5616, 5618, 5620, 5622, 5624, 5626, /* 0x08-0x0f */ + 5628, 5630, 5632, 5634, 5636, 5638, 5640, 5642, /* 0x10-0x17 */ + 5644, 5646, 5648, 5650, 5652, 5654, 5656, 5658, /* 0x18-0x1f */ + 5660, 5662, 5664, 5666, 5668, 5670, 5672, 5674, /* 0x20-0x27 */ + 5676, 5678, 5680, 5682, 5684, 5686, 5688, 5690, /* 0x28-0x2f */ + 5692, 5694, 5696, 5698, 5700, 5702, 5704, 5706, /* 0x30-0x37 */ + 5708, 5710, 5712, 5714, 5716, 5718, 5720, 5722, /* 0x38-0x3f */ + 5724, 5726, 5728, 5730, 5732, 5734, 5736, 5738, /* 0x40-0x47 */ + 5740, 5742, 5744, 5746, 5748, 5750, 5752, 5754, /* 0x48-0x4f */ + 5756, 5758, 5760, 5762, 5764, 5766, 5768, 5770, /* 0x50-0x57 */ + 5772, 5774, 5776, 5778, 5780, 5782, 5784, 5786, /* 0x58-0x5f */ + 5788, 5790, 5792, 5794, 5796, 5798, 5800, 5802, /* 0x60-0x67 */ + 5804, 5806, 5808, 5810, 5812, 5814, 5816, 5818, /* 0x68-0x6f */ + 5820, 5822, 5824, 5826, 5828, 5830, 5832, 5834, /* 0x70-0x77 */ + 5836, 5838, 5840, 5842, 5844, 5846, 5848, 5850, /* 0x78-0x7f */ + 5852, 5854, 5856, 5858, 5860, 5862, 5864, 5866, /* 0x80-0x87 */ + 5868, 5870, 5872, 5874, 5876, 5878, 5880, 5882, /* 0x88-0x8f */ + 5884, 5886, 5888, 5890, 5892, 5894, 5896, 5898, /* 0x90-0x97 */ + 5900, 5902, 5904, 5906, 5908, 5910, 5912, 5914, /* 0x98-0x9f */ + 5916, 5918, 5920, 5922, 5924, 5926, 5928, 5930, /* 0xa0-0xa7 */ + 5932, 5934, 5936, 5938, 5940, 5942, 5944, 5946, /* 0xa8-0xaf */ + 5948, 5950, 5952, 5954, 5956, 5958, 5960, 5962, /* 0xb0-0xb7 */ + 5964, 5966, 5968, 5970, 5972, 5974, 5976, -1, /* 0xb8-0xbf */ + -1, -1, 5978, 5980, 5982, 5984, 5986, 5988, /* 0xc0-0xc7 */ + -1, -1, 5990, 5992, 5994, 5996, 5998, 6000, /* 0xc8-0xcf */ + -1, -1, 6002, 6004, 6006, 6008, 6010, 6012, /* 0xd0-0xd7 */ + -1, -1, 6014, 6016, 6018, -1, -1, -1, /* 0xd8-0xdf */ + 6020, 6022, 6024, 6026, 6028, 6030, 6032, -1, /* 0xe0-0xe7 */ + 6034, 6036, 6038, 6040, 6042, 6044, 6046, -1, /* 0xe8-0xef */ +}; +static const short translit_page1d4[1024] = { + 6048, 6050, 6052, 6054, 6056, 6058, 6060, 6062, /* 0x00-0x07 */ + 6064, 6066, 6068, 6070, 6072, 6074, 6076, 6078, /* 0x08-0x0f */ + 6080, 6082, 6084, 6086, 6088, 6090, 6092, 6094, /* 0x10-0x17 */ + 6096, 6098, 6100, 6102, 6104, 6106, 6108, 6110, /* 0x18-0x1f */ + 6112, 6114, 6116, 6118, 6120, 6122, 6124, 6126, /* 0x20-0x27 */ + 6128, 6130, 6132, 6134, 6136, 6138, 6140, 6142, /* 0x28-0x2f */ + 6144, 6146, 6148, 6150, 6152, 6154, 6156, 6158, /* 0x30-0x37 */ + 6160, 6162, 6164, 6166, 6168, 6170, 6172, 6174, /* 0x38-0x3f */ + 6176, 6178, 6180, 6182, 6184, 6186, 6188, 6190, /* 0x40-0x47 */ + 6192, 6194, 6196, 6198, 6200, 6202, 6204, 6206, /* 0x48-0x4f */ + 6208, 6210, 6212, 6214, 6216, -1, 6218, 6220, /* 0x50-0x57 */ + 6222, 6224, 6226, 6228, 6230, 6232, 6234, 6236, /* 0x58-0x5f */ + 6238, 6240, 6242, 6244, 6246, 6248, 6250, 6252, /* 0x60-0x67 */ + 6254, 6256, 6258, 6260, 6262, 6264, 6266, 6268, /* 0x68-0x6f */ + 6270, 6272, 6274, 6276, 6278, 6280, 6282, 6284, /* 0x70-0x77 */ + 6286, 6288, 6290, 6292, 6294, 6296, 6298, 6300, /* 0x78-0x7f */ + 6302, 6304, 6306, 6308, 6310, 6312, 6314, 6316, /* 0x80-0x87 */ + 6318, 6320, 6322, 6324, 6326, 6328, 6330, 6332, /* 0x88-0x8f */ + 6334, 6336, 6338, 6340, 6342, 6344, 6346, 6348, /* 0x90-0x97 */ + 6350, 6352, 6354, 6356, 6358, -1, 6360, 6362, /* 0x98-0x9f */ + -1, -1, 6364, -1, -1, 6366, 6368, -1, /* 0xa0-0xa7 */ + -1, 6370, 6372, 6374, 6376, -1, 6378, 6380, /* 0xa8-0xaf */ + 6382, 6384, 6386, 6388, 6390, 6392, 6394, 6396, /* 0xb0-0xb7 */ + 6398, 6400, -1, 6402, -1, 6404, 6406, 6408, /* 0xb8-0xbf */ + 6410, 6412, 6414, 6416, -1, 6418, 6420, 6422, /* 0xc0-0xc7 */ + 6424, 6426, 6428, 6430, 6432, 6434, 6436, 6438, /* 0xc8-0xcf */ + 6440, 6442, 6444, 6446, 6448, 6450, 6452, 6454, /* 0xd0-0xd7 */ + 6456, 6458, 6460, 6462, 6464, 6466, 6468, 6470, /* 0xd8-0xdf */ + 6472, 6474, 6476, 6478, 6480, 6482, 6484, 6486, /* 0xe0-0xe7 */ + 6488, 6490, 6492, 6494, 6496, 6498, 6500, 6502, /* 0xe8-0xef */ + 6504, 6506, 6508, 6510, 6512, 6514, 6516, 6518, /* 0xf0-0xf7 */ + 6520, 6522, 6524, 6526, 6528, 6530, 6532, 6534, /* 0xf8-0xff */ + /* 0x1d500 */ + 6536, 6538, 6540, 6542, 6544, 6546, -1, 6548, /* 0x00-0x07 */ + 6550, 6552, 6554, -1, -1, 6556, 6558, 6560, /* 0x08-0x0f */ + 6562, 6564, 6566, 6568, 6570, -1, 6572, 6574, /* 0x10-0x17 */ + 6576, 6578, 6580, 6582, 6584, -1, 6586, 6588, /* 0x18-0x1f */ + 6590, 6592, 6594, 6596, 6598, 6600, 6602, 6604, /* 0x20-0x27 */ + 6606, 6608, 6610, 6612, 6614, 6616, 6618, 6620, /* 0x28-0x2f */ + 6622, 6624, 6626, 6628, 6630, 6632, 6634, 6636, /* 0x30-0x37 */ + 6638, 6640, -1, 6642, 6644, 6646, 6648, -1, /* 0x38-0x3f */ + 6650, 6652, 6654, 6656, 6658, -1, 6660, -1, /* 0x40-0x47 */ + -1, -1, 6662, 6664, 6666, 6668, 6670, 6672, /* 0x48-0x4f */ + 6674, -1, 6676, 6678, 6680, 6682, 6684, 6686, /* 0x50-0x57 */ + 6688, 6690, 6692, 6694, 6696, 6698, 6700, 6702, /* 0x58-0x5f */ + 6704, 6706, 6708, 6710, 6712, 6714, 6716, 6718, /* 0x60-0x67 */ + 6720, 6722, 6724, 6726, 6728, 6730, 6732, 6734, /* 0x68-0x6f */ + 6736, 6738, 6740, 6742, 6744, 6746, 6748, 6750, /* 0x70-0x77 */ + 6752, 6754, 6756, 6758, 6760, 6762, 6764, 6766, /* 0x78-0x7f */ + 6768, 6770, 6772, 6774, 6776, 6778, 6780, 6782, /* 0x80-0x87 */ + 6784, 6786, 6788, 6790, 6792, 6794, 6796, 6798, /* 0x88-0x8f */ + 6800, 6802, 6804, 6806, 6808, 6810, 6812, 6814, /* 0x90-0x97 */ + 6816, 6818, 6820, 6822, 6824, 6826, 6828, 6830, /* 0x98-0x9f */ + 6832, 6834, 6836, 6838, 6840, 6842, 6844, 6846, /* 0xa0-0xa7 */ + 6848, 6850, 6852, 6854, 6856, 6858, 6860, 6862, /* 0xa8-0xaf */ + 6864, 6866, 6868, 6870, 6872, 6874, 6876, 6878, /* 0xb0-0xb7 */ + 6880, 6882, 6884, 6886, 6888, 6890, 6892, 6894, /* 0xb8-0xbf */ + 6896, 6898, 6900, 6902, 6904, 6906, 6908, 6910, /* 0xc0-0xc7 */ + 6912, 6914, 6916, 6918, 6920, 6922, 6924, 6926, /* 0xc8-0xcf */ + 6928, 6930, 6932, 6934, 6936, 6938, 6940, 6942, /* 0xd0-0xd7 */ + 6944, 6946, 6948, 6950, 6952, 6954, 6956, 6958, /* 0xd8-0xdf */ + 6960, 6962, 6964, 6966, 6968, 6970, 6972, 6974, /* 0xe0-0xe7 */ + 6976, 6978, 6980, 6982, 6984, 6986, 6988, 6990, /* 0xe8-0xef */ + 6992, 6994, 6996, 6998, 7000, 7002, 7004, 7006, /* 0xf0-0xf7 */ + 7008, 7010, 7012, 7014, 7016, 7018, 7020, 7022, /* 0xf8-0xff */ + /* 0x1d600 */ + 7024, 7026, 7028, 7030, 7032, 7034, 7036, 7038, /* 0x00-0x07 */ + 7040, 7042, 7044, 7046, 7048, 7050, 7052, 7054, /* 0x08-0x0f */ + 7056, 7058, 7060, 7062, 7064, 7066, 7068, 7070, /* 0x10-0x17 */ + 7072, 7074, 7076, 7078, 7080, 7082, 7084, 7086, /* 0x18-0x1f */ + 7088, 7090, 7092, 7094, 7096, 7098, 7100, 7102, /* 0x20-0x27 */ + 7104, 7106, 7108, 7110, 7112, 7114, 7116, 7118, /* 0x28-0x2f */ + 7120, 7122, 7124, 7126, 7128, 7130, 7132, 7134, /* 0x30-0x37 */ + 7136, 7138, 7140, 7142, 7144, 7146, 7148, 7150, /* 0x38-0x3f */ + 7152, 7154, 7156, 7158, 7160, 7162, 7164, 7166, /* 0x40-0x47 */ + 7168, 7170, 7172, 7174, 7176, 7178, 7180, 7182, /* 0x48-0x4f */ + 7184, 7186, 7188, 7190, 7192, 7194, 7196, 7198, /* 0x50-0x57 */ + 7200, 7202, 7204, 7206, 7208, 7210, 7212, 7214, /* 0x58-0x5f */ + 7216, 7218, 7220, 7222, 7224, 7226, 7228, 7230, /* 0x60-0x67 */ + 7232, 7234, 7236, 7238, 7240, 7242, 7244, 7246, /* 0x68-0x6f */ + 7248, 7250, 7252, 7254, 7256, 7258, 7260, 7262, /* 0x70-0x77 */ + 7264, 7266, 7268, 7270, 7272, 7274, 7276, 7278, /* 0x78-0x7f */ + 7280, 7282, 7284, 7286, 7288, 7290, 7292, 7294, /* 0x80-0x87 */ + 7296, 7298, 7300, 7302, 7304, 7306, 7308, 7310, /* 0x88-0x8f */ + 7312, 7314, 7316, 7318, 7320, 7322, 7324, 7326, /* 0x90-0x97 */ + 7328, 7330, 7332, 7334, 7336, 7338, 7340, 7342, /* 0x98-0x9f */ + 7344, 7346, 7348, 7350, -1, -1, -1, -1, /* 0xa0-0xa7 */ + 7352, 7354, 7356, 7358, 7360, 7362, 7364, 7366, /* 0xa8-0xaf */ + 7368, 7370, 7372, 7374, 7376, 7378, 7380, 7382, /* 0xb0-0xb7 */ + 7384, 7386, 7388, 7390, 7392, 7394, 7396, 7398, /* 0xb8-0xbf */ + 7400, 7402, 7404, 7406, 7408, 7410, 7412, 7414, /* 0xc0-0xc7 */ + 7416, 7418, 7420, 7422, 7424, 7426, 7428, 7430, /* 0xc8-0xcf */ + 7432, 7434, 7436, 7438, 7440, 7442, 7444, 7446, /* 0xd0-0xd7 */ + 7448, 7450, 7452, 7454, 7456, 7458, 7460, 7462, /* 0xd8-0xdf */ + 7464, 7466, 7468, 7470, 7472, 7474, 7476, 7478, /* 0xe0-0xe7 */ + 7480, 7482, 7484, 7486, 7488, 7490, 7492, 7494, /* 0xe8-0xef */ + 7496, 7498, 7500, 7502, 7504, 7506, 7508, 7510, /* 0xf0-0xf7 */ + 7512, 7514, 7516, 7518, 7520, 7522, 7524, 7526, /* 0xf8-0xff */ + /* 0x1d700 */ + 7528, 7530, 7532, 7534, 7536, 7538, 7540, 7542, /* 0x00-0x07 */ + 7544, 7546, 7548, 7550, 7552, 7554, 7556, 7558, /* 0x08-0x0f */ + 7560, 7562, 7564, 7566, 7568, 7570, 7572, 7574, /* 0x10-0x17 */ + 7576, 7578, 7580, 7582, 7584, 7586, 7588, 7590, /* 0x18-0x1f */ + 7592, 7594, 7596, 7598, 7600, 7602, 7604, 7606, /* 0x20-0x27 */ + 7608, 7610, 7612, 7614, 7616, 7618, 7620, 7622, /* 0x28-0x2f */ + 7624, 7626, 7628, 7630, 7632, 7634, 7636, 7638, /* 0x30-0x37 */ + 7640, 7642, 7644, 7646, 7648, 7650, 7652, 7654, /* 0x38-0x3f */ + 7656, 7658, 7660, 7662, 7664, 7666, 7668, 7670, /* 0x40-0x47 */ + 7672, 7674, 7676, 7678, 7680, 7682, 7684, 7686, /* 0x48-0x4f */ + 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, /* 0x50-0x57 */ + 7704, 7706, 7708, 7710, 7712, 7714, 7716, 7718, /* 0x58-0x5f */ + 7720, 7722, 7724, 7726, 7728, 7730, 7732, 7734, /* 0x60-0x67 */ + 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, /* 0x68-0x6f */ + 7752, 7754, 7756, 7758, 7760, 7762, 7764, 7766, /* 0x70-0x77 */ + 7768, 7770, 7772, 7774, 7776, 7778, 7780, 7782, /* 0x78-0x7f */ + 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, /* 0x80-0x87 */ + 7800, 7802, 7804, 7806, 7808, 7810, 7812, 7814, /* 0x88-0x8f */ + 7816, 7818, 7820, 7822, 7824, 7826, 7828, 7830, /* 0x90-0x97 */ + 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, /* 0x98-0x9f */ + 7848, 7850, 7852, 7854, 7856, 7858, 7860, 7862, /* 0xa0-0xa7 */ + 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878, /* 0xa8-0xaf */ + 7880, 7882, 7884, 7886, 7888, 7890, 7892, 7894, /* 0xb0-0xb7 */ + 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, /* 0xb8-0xbf */ + 7912, 7914, 7916, 7918, 7920, 7922, 7924, 7926, /* 0xc0-0xc7 */ + 7928, 7930, -1, -1, -1, -1, 7932, 7934, /* 0xc8-0xcf */ + 7936, 7938, 7940, 7942, 7944, 7946, 7948, 7950, /* 0xd0-0xd7 */ + 7952, 7954, 7956, 7958, 7960, 7962, 7964, 7966, /* 0xd8-0xdf */ + 7968, 7970, 7972, 7974, 7976, 7978, 7980, 7982, /* 0xe0-0xe7 */ + 7984, 7986, 7988, 7990, 7992, 7994, 7996, 7998, /* 0xe8-0xef */ + 8000, 8002, 8004, 8006, 8008, 8010, 8012, 8014, /* 0xf0-0xf7 */ + 8016, 8018, 8020, 8022, 8024, 8026, 8028, 8030, /* 0xf8-0xff */ +}; +static const short translit_page2f8[544] = { + 8032, 8034, 8036, 8038, 8040, 8042, 8044, 8046, /* 0x00-0x07 */ + 8048, 8050, 8052, 8054, 8056, 8058, 8060, 8062, /* 0x08-0x0f */ + 8064, 8066, 8068, 8070, 8072, 8074, 8076, 8078, /* 0x10-0x17 */ + 8080, 8082, 8084, 8086, 8088, 8090, 8092, 8094, /* 0x18-0x1f */ + 8096, 8098, 8100, 8102, 8104, 8106, 8108, 8110, /* 0x20-0x27 */ + 8112, 8114, 8116, 8118, 8120, 8122, 8124, 8126, /* 0x28-0x2f */ + 8128, 8130, 8132, 8134, 8136, 8138, 8140, 8142, /* 0x30-0x37 */ + 8144, 8146, 8148, 8150, 8152, 8154, 8156, 8158, /* 0x38-0x3f */ + 8160, 8162, 8164, 8166, 8168, 8170, 8172, 8174, /* 0x40-0x47 */ + 8176, 8178, 8180, 8182, 8184, 8186, 8188, 8190, /* 0x48-0x4f */ + 8192, 8194, 8196, 8198, 8200, 8202, 8204, 8206, /* 0x50-0x57 */ + 8208, 8210, 8212, 8214, 8216, 8218, 8220, 8222, /* 0x58-0x5f */ + 8224, 8226, 8228, 8230, 8232, 8234, 8236, 8238, /* 0x60-0x67 */ + 8240, 8242, 8244, 8246, 8248, 8250, 8252, 8254, /* 0x68-0x6f */ + 8256, 8258, 8260, 8262, 8264, 8266, 8268, 8270, /* 0x70-0x77 */ + 8272, 8274, 8276, 8278, 8280, 8282, 8284, 8286, /* 0x78-0x7f */ + 8288, 8290, 8292, 8294, 8296, 8298, 8300, 8302, /* 0x80-0x87 */ + 8304, 8306, 8308, 8310, 8312, 8314, 8316, 8318, /* 0x88-0x8f */ + 8320, 8322, 8324, 8326, 8328, 8330, 8332, 8334, /* 0x90-0x97 */ + 8336, 8338, 8340, 8342, 8344, 8346, 8348, 8350, /* 0x98-0x9f */ + 8352, 8354, 8356, 8358, 8360, 8362, 8364, 8366, /* 0xa0-0xa7 */ + 8368, 8370, 8372, 8374, 8376, 8378, 8380, 8382, /* 0xa8-0xaf */ + 8384, 8386, 8388, 8390, 8392, 8394, 8396, 8398, /* 0xb0-0xb7 */ + 8400, 8402, 8404, 8406, 8408, 8410, 8412, 8414, /* 0xb8-0xbf */ + 8416, 8418, 8420, 8422, 8424, 8426, 8428, 8430, /* 0xc0-0xc7 */ + 8432, 8434, 8436, 8438, 8440, 8442, 8444, 8446, /* 0xc8-0xcf */ + 8448, 8450, 8452, 8454, 8456, 8458, 8460, 8462, /* 0xd0-0xd7 */ + 8464, 8466, 8468, 8470, 8472, 8474, 8476, 8478, /* 0xd8-0xdf */ + 8480, 8482, 8484, 8486, 8488, 8490, 8492, 8494, /* 0xe0-0xe7 */ + 8496, 8498, 8500, 8502, 8504, 8506, 8508, 8510, /* 0xe8-0xef */ + 8512, 8514, 8516, 8518, 8520, 8522, 8524, 8526, /* 0xf0-0xf7 */ + 8528, 8530, 8532, 8534, 8536, 8538, 8540, 8542, /* 0xf8-0xff */ + /* 0x2f900 */ + 8544, 8546, 8548, 8550, 8552, 8554, 8556, 8558, /* 0x00-0x07 */ + 8560, 8562, 8564, 8566, 8568, 8570, 8572, 8574, /* 0x08-0x0f */ + 8576, 8578, 8580, 8582, 8584, 8586, 8588, 8590, /* 0x10-0x17 */ + 8592, 8594, 8596, 8598, 8600, 8602, 8604, 8606, /* 0x18-0x1f */ + 8608, 8610, 8612, 8614, 8616, 8618, 8620, 8622, /* 0x20-0x27 */ + 8624, 8626, 8628, 8630, 8632, 8634, 8636, 8638, /* 0x28-0x2f */ + 8640, 8642, 8644, 8646, 8648, 8650, 8652, 8654, /* 0x30-0x37 */ + 8656, 8658, 8660, 8662, 8664, 8666, 8668, 8670, /* 0x38-0x3f */ + 8672, 8674, 8676, 8678, 8680, 8682, 8684, 8686, /* 0x40-0x47 */ + 8688, 8690, 8692, 8694, 8696, 8698, 8700, 8702, /* 0x48-0x4f */ + 8704, 8706, 8708, 8710, 8712, 8714, 8716, 8718, /* 0x50-0x57 */ + 8720, 8722, 8724, 8726, 8728, 8730, 8732, 8734, /* 0x58-0x5f */ + 8736, 8738, 8740, 8742, 8744, 8746, 8748, 8750, /* 0x60-0x67 */ + 8752, 8754, 8756, 8758, 8760, 8762, 8764, 8766, /* 0x68-0x6f */ + 8768, 8770, 8772, 8774, 8776, 8778, 8780, 8782, /* 0x70-0x77 */ + 8784, 8786, 8788, 8790, 8792, 8794, 8796, 8798, /* 0x78-0x7f */ + 8800, 8802, 8804, 8806, 8808, 8810, 8812, 8814, /* 0x80-0x87 */ + 8816, 8818, 8820, 8822, 8824, 8826, 8828, 8830, /* 0x88-0x8f */ + 8832, 8834, 8836, 8838, 8840, 8842, 8844, 8846, /* 0x90-0x97 */ + 8848, 8850, 8852, 8854, 8856, 8858, 8860, 8862, /* 0x98-0x9f */ + 8864, 8866, 8868, 8870, 8872, 8874, 8876, 8878, /* 0xa0-0xa7 */ + 8880, 8882, 8884, 8886, 8888, 8890, 8892, 8894, /* 0xa8-0xaf */ + 8896, 8898, 8900, 8902, 8904, 8906, 8908, 8910, /* 0xb0-0xb7 */ + 8912, 8914, 8916, 8918, 8920, 8922, 8924, 8926, /* 0xb8-0xbf */ + 8928, 8930, 8932, 8934, 8936, 8938, 8940, 8942, /* 0xc0-0xc7 */ + 8944, 8946, 8948, 8950, 8952, 8954, 8956, 8958, /* 0xc8-0xcf */ + 8960, 8962, 8964, 8966, 8968, 8970, 8972, 8974, /* 0xd0-0xd7 */ + 8976, 8978, 8980, 8982, 8984, 8986, 8988, 8990, /* 0xd8-0xdf */ + 8992, 8994, 8996, 8998, 9000, 9002, 9004, 9006, /* 0xe0-0xe7 */ + 9008, 9010, 9012, 9014, 9016, 9018, 9020, 9022, /* 0xe8-0xef */ + 9024, 9026, 9028, 9030, 9032, 9034, 9036, 9038, /* 0xf0-0xf7 */ + 9040, 9042, 9044, 9046, 9048, 9050, 9052, 9054, /* 0xf8-0xff */ + /* 0x2fa00 */ + 9056, 9058, 9060, 9062, 9064, 9066, 9068, 9070, /* 0x00-0x07 */ + 9072, 9074, 9076, 9078, 9080, 9082, 9084, 9086, /* 0x08-0x0f */ + 9088, 9090, 9092, 9094, 9096, 9098, 9100, 9102, /* 0x10-0x17 */ + 9104, 9106, 9108, 9110, 9112, 9114, -1, -1, /* 0x18-0x1f */ +}; + +#define translit_index(wc) \ + (wc >= 0x00a0 && wc < 0x01f8 ? translit_page00[wc-0x00a0] : \ + wc >= 0x0218 && wc < 0x0220 ? translit_page02[wc-0x0218] : \ + wc >= 0x02b8 && wc < 0x02e0 ? translit_page02_1[wc-0x02b8] : \ + wc >= 0x03d0 && wc < 0x0400 ? translit_page03[wc-0x03d0] : \ + wc == 0x0587 ? 654 : \ + wc >= 0x05f0 && wc < 0x05f8 ? translit_page05[wc-0x05f0] : \ + wc >= 0x0670 && wc < 0x0680 ? translit_page06[wc-0x0670] : \ + wc == 0x0e33 ? 678 : \ + wc >= 0x0eb0 && wc < 0x0ee0 ? translit_page0e[wc-0x0eb0] : \ + wc >= 0x0f70 && wc < 0x0f80 ? translit_page0f[wc-0x0f70] : \ + wc >= 0x1e00 && wc < 0x1ea0 ? translit_page1e[wc-0x1e00] : \ + wc >= 0x1ef0 && wc < 0x1ef8 ? translit_page1e_1[wc-0x1ef0] : \ + wc >= 0x2000 && wc < 0x2058 ? translit_page20[wc-0x2000] : \ + wc >= 0x20a8 && wc < 0x20b0 ? translit_page20_1[wc-0x20a8] : \ + wc >= 0x2100 && wc < 0x21d8 ? translit_page21[wc-0x2100] : \ + wc >= 0x2210 && wc < 0x2270 ? translit_page22[wc-0x2210] : \ + wc >= 0x22c0 && wc < 0x22f0 ? translit_page22_1[wc-0x22c0] : \ + wc >= 0x2400 && wc < 0x24f0 ? translit_page24[wc-0x2400] : \ + wc >= 0x2500 && wc < 0x2540 ? translit_page25[wc-0x2500] : \ + wc == 0x25e6 ? 2025 : \ + wc == 0x2a0c ? 2027 : \ + wc >= 0x2a70 && wc < 0x2a78 ? translit_page2a[wc-0x2a70] : \ + wc == 0x2e9f ? 2043 : \ + wc == 0x2ef3 ? 2045 : \ + wc >= 0x2f00 && wc < 0x2fd8 ? translit_page2f[wc-0x2f00] : \ + wc >= 0x3000 && wc < 0x30f8 ? translit_page30[wc-0x3000] : \ + wc >= 0x3130 && wc < 0x3190 ? translit_page31[wc-0x3130] : \ + wc >= 0x31f0 && wc < 0x3400 ? translit_page31_1[wc-0x31f0] : \ + wc >= 0xf900 && wc < 0xfa70 ? translit_pagef9[wc-0xf900] : \ + wc >= 0xfb00 && wc < 0xfb50 ? translit_pagefb[wc-0xfb00] : \ + wc >= 0xfe48 && wc < 0xfe70 ? translit_pagefe[wc-0xfe48] : \ + wc >= 0xff00 && wc < 0xfff0 ? translit_pageff[wc-0xff00] : \ + wc >= 0x1d400 && wc < 0x1d800 ? translit_page1d4[wc-0x1d400] : \ + wc >= 0x2f800 && wc < 0x2fa20 ? translit_page2f8[wc-0x2f800] : \ + -1) diff --git a/jni/parted/libiconv/lib/ucs2.h b/jni/parted/libiconv/lib/ucs2.h new file mode 100755 index 0000000..68769b1 --- /dev/null +++ b/jni/parted/libiconv/lib/ucs2.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 1999-2001, 2008, 2011, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-2 + */ + +/* Here we accept FFFE/FEFF marks as endianness indicators everywhere + in the stream, not just at the beginning. The default is big-endian. */ +/* The state is 0 if big-endian, 1 if little-endian. */ +static int +ucs2_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + int count = 0; + for (; n >= 2 && count <= RET_COUNT_MAX && count <= INT_MAX-2;) { + ucs4_t wc = (state ? s[0] + (s[1] << 8) : (s[0] << 8) + s[1]); + if (wc == 0xfeff) { + } else if (wc == 0xfffe) { + state ^= 1; + } else if (wc >= 0xd800 && wc < 0xe000) { + conv->istate = state; + return RET_SHIFT_ILSEQ(count); + } else { + *pwc = wc; + conv->istate = state; + return count+2; + } + s += 2; n -= 2; count += 2; + } + conv->istate = state; + return RET_TOOFEW(count); +} + +/* But we output UCS-2 in big-endian order, without byte-order mark. */ +/* RFC 2152 says: + "ISO/IEC 10646-1:1993(E) specifies that when characters the UCS-2 form are + serialized as octets, that the most significant octet appear first." */ +static int +ucs2_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x10000 && wc != 0xfffe && !(wc >= 0xd800 && wc < 0xe000)) { + if (n >= 2) { + r[0] = (unsigned char) (wc >> 8); + r[1] = (unsigned char) wc; + return 2; + } else + return RET_TOOSMALL; + } else + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ucs2be.h b/jni/parted/libiconv/lib/ucs2be.h new file mode 100755 index 0000000..f11062f --- /dev/null +++ b/jni/parted/libiconv/lib/ucs2be.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-2BE = UCS-2 big endian + */ + +static int +ucs2be_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + if (n >= 2) { + if (s[0] >= 0xd8 && s[0] < 0xe0) { + return RET_ILSEQ; + } else { + *pwc = (s[0] << 8) + s[1]; + return 2; + } + } + return RET_TOOFEW(0); +} + +static int +ucs2be_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x10000 && !(wc >= 0xd800 && wc < 0xe000)) { + if (n >= 2) { + r[0] = (unsigned char) (wc >> 8); + r[1] = (unsigned char) wc; + return 2; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ucs2internal.h b/jni/parted/libiconv/lib/ucs2internal.h new file mode 100755 index 0000000..ffb565f --- /dev/null +++ b/jni/parted/libiconv/lib/ucs2internal.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-2-INTERNAL = UCS-2 with machine dependent endianness and alignment + */ + +static int +ucs2internal_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + if (n >= 2) { + unsigned short x = *(const unsigned short *)s; + if (x >= 0xd800 && x < 0xe000) { + return RET_ILSEQ; + } else { + *pwc = x; + return 2; + } + } + return RET_TOOFEW(0); +} + +static int +ucs2internal_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x10000 && !(wc >= 0xd800 && wc < 0xe000)) { + if (n >= 2) { + *(unsigned short *)r = wc; + return 2; + } else + return RET_TOOSMALL; + } else + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ucs2le.h b/jni/parted/libiconv/lib/ucs2le.h new file mode 100755 index 0000000..51e9e42 --- /dev/null +++ b/jni/parted/libiconv/lib/ucs2le.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-2LE = UCS-2 little endian + */ + +static int +ucs2le_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + if (n >= 2) { + if (s[1] >= 0xd8 && s[1] < 0xe0) { + return RET_ILSEQ; + } else { + *pwc = s[0] + (s[1] << 8); + return 2; + } + } + return RET_TOOFEW(0); +} + +static int +ucs2le_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x10000 && !(wc >= 0xd800 && wc < 0xe000)) { + if (n >= 2) { + r[0] = (unsigned char) wc; + r[1] = (unsigned char) (wc >> 8); + return 2; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ucs2swapped.h b/jni/parted/libiconv/lib/ucs2swapped.h new file mode 100755 index 0000000..ace7e2c --- /dev/null +++ b/jni/parted/libiconv/lib/ucs2swapped.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-2-SWAPPED = UCS-2-INTERNAL with inverted endianness + */ + +static int +ucs2swapped_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + /* This function assumes that 'unsigned short' has exactly 16 bits. */ + if (sizeof(unsigned short) != 2) abort(); + + if (n >= 2) { + unsigned short x = *(const unsigned short *)s; + x = (x >> 8) | (x << 8); + if (x >= 0xd800 && x < 0xe000) { + return RET_ILSEQ; + } else { + *pwc = x; + return 2; + } + } + return RET_TOOFEW(0); +} + +static int +ucs2swapped_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + /* This function assumes that 'unsigned short' has exactly 16 bits. */ + if (sizeof(unsigned short) != 2) abort(); + + if (wc < 0x10000 && !(wc >= 0xd800 && wc < 0xe000)) { + if (n >= 2) { + unsigned short x = wc; + x = (x >> 8) | (x << 8); + *(unsigned short *)r = x; + return 2; + } else + return RET_TOOSMALL; + } else + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ucs4.h b/jni/parted/libiconv/lib/ucs4.h new file mode 100755 index 0000000..e7a0c37 --- /dev/null +++ b/jni/parted/libiconv/lib/ucs4.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 1999-2001, 2008, 2011, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-4 + */ + +/* Here we accept FFFE0000/0000FEFF marks as endianness indicators everywhere + in the stream, not just at the beginning. The default is big-endian. */ +/* The state is 0 if big-endian, 1 if little-endian. */ +static int +ucs4_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + int count = 0; + for (; n >= 4 && count <= RET_COUNT_MAX && count <= INT_MAX-4;) { + ucs4_t wc = (state + ? s[0] + (s[1] << 8) + (s[2] << 16) + (s[3] << 24) + : (s[0] << 24) + (s[1] << 16) + (s[2] << 8) + s[3]); + if (wc == 0x0000feff) { + } else if (wc == 0xfffe0000u) { + state ^= 1; + } else if (wc <= 0x7fffffff) { + *pwc = wc; + conv->istate = state; + return count+4; + } else { + conv->istate = state; + return RET_SHIFT_ILSEQ(count); + } + s += 4; n -= 4; count += 4; + } + conv->istate = state; + return RET_TOOFEW(count); +} + +/* But we output UCS-4 in big-endian order, without byte-order mark. */ +static int +ucs4_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc <= 0x7fffffff) { + if (n >= 4) { + r[0] = (unsigned char) (wc >> 24); + r[1] = (unsigned char) (wc >> 16); + r[2] = (unsigned char) (wc >> 8); + r[3] = (unsigned char) wc; + return 4; + } else + return RET_TOOSMALL; + } else + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/ucs4be.h b/jni/parted/libiconv/lib/ucs4be.h new file mode 100755 index 0000000..2bbd8cf --- /dev/null +++ b/jni/parted/libiconv/lib/ucs4be.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 1999-2000, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-4BE = UCS-4 big endian + */ + +static int +ucs4be_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + if (n >= 4) { + *pwc = (s[0] << 24) + (s[1] << 16) + (s[2] << 8) + s[3]; + return 4; + } + return RET_TOOFEW(0); +} + +static int +ucs4be_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 4) { + r[0] = (unsigned char) (wc >> 24); + r[1] = (unsigned char) (wc >> 16); + r[2] = (unsigned char) (wc >> 8); + r[3] = (unsigned char) wc; + return 4; + } else + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/ucs4internal.h b/jni/parted/libiconv/lib/ucs4internal.h new file mode 100755 index 0000000..c5bf3e2 --- /dev/null +++ b/jni/parted/libiconv/lib/ucs4internal.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 1999-2000, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-4-INTERNAL = UCS-4 with machine dependent endianness and alignment + */ + +static int +ucs4internal_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + if (n >= 4) { + *pwc = *(const unsigned int *)s; + return 4; + } + return RET_TOOFEW(0); +} + +static int +ucs4internal_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 4) { + *(unsigned int *)r = wc; + return 4; + } else + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/ucs4le.h b/jni/parted/libiconv/lib/ucs4le.h new file mode 100755 index 0000000..e1627c9 --- /dev/null +++ b/jni/parted/libiconv/lib/ucs4le.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 1999-2000, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-4LE = UCS-4 little endian + */ + +static int +ucs4le_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + if (n >= 4) { + *pwc = s[0] + (s[1] << 8) + (s[2] << 16) + (s[3] << 24); + return 4; + } + return RET_TOOFEW(0); +} + +static int +ucs4le_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 4) { + r[0] = (unsigned char) wc; + r[1] = (unsigned char) (wc >> 8); + r[2] = (unsigned char) (wc >> 16); + r[3] = (unsigned char) (wc >> 24); + return 4; + } else + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/ucs4swapped.h b/jni/parted/libiconv/lib/ucs4swapped.h new file mode 100755 index 0000000..8ce7c5b --- /dev/null +++ b/jni/parted/libiconv/lib/ucs4swapped.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 1999-2000, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UCS-4-SWAPPED = UCS-4-INTERNAL with inverted endianness + */ + +static int +ucs4swapped_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + /* This function assumes that 'unsigned int' has exactly 32 bits. */ + if (sizeof(unsigned int) != 4) abort(); + + if (n >= 4) { + unsigned int x = *(const unsigned int *)s; + x = (x >> 24) | ((x >> 8) & 0xff00) | ((x & 0xff00) << 8) | (x << 24); + *pwc = x; + return 4; + } + return RET_TOOFEW(0); +} + +static int +ucs4swapped_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + /* This function assumes that 'unsigned int' has exactly 32 bits. */ + if (sizeof(unsigned int) != 4) abort(); + + if (n >= 4) { + unsigned int x = wc; + x = (x >> 24) | ((x >> 8) & 0xff00) | ((x & 0xff00) << 8) | (x << 24); + *(unsigned int *)r = x; + return 4; + } else + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/uhc_1.h b/jni/parted/libiconv/lib/uhc_1.h new file mode 100755 index 0000000..1a46477 --- /dev/null +++ b/jni/parted/libiconv/lib/uhc_1.h @@ -0,0 +1,1724 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * Unified Hangul Code part 1 + */ + +static const unsigned short uhc_1_2uni_main_page81[64] = { + 0xac02, 0xac8d, 0xad14, 0xad91, 0xadfa, 0xae7a, 0xaee6, 0xaf57, + 0xafbf, 0xb030, 0xb0a5, 0xb122, 0xb19e, 0xb207, 0xb26f, 0xb2f0, + 0xb366, 0xb3e1, 0xb445, 0xb4ad, 0xb51e, 0xb590, 0xb600, 0xb661, + 0xb6c3, 0xb723, 0xb79f, 0xb811, 0xb885, 0xb8f1, 0xb95a, 0xb9d4, + 0xba47, 0xbac2, 0xbb28, 0xbb9a, 0xbc03, 0xbc80, 0xbcfe, 0xbd67, + 0xbdd2, 0xbe3d, 0xbeb8, 0xbf23, 0xbf83, 0xbfe6, 0xc040, 0xc0a7, + 0xc132, 0xc1b1, 0xc224, 0xc297, 0xc310, 0xc37a, 0xc3db, 0xc446, + 0xc4aa, 0xc50f, 0xc596, 0xc626, 0xc6a8, 0xc726, 0xc7b8, 0xc832, +}; +static const unsigned char uhc_1_2uni_page81[5696] = { + /* 0x81 */ + 0x00, 0x01, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, + 0x0d, 0x16, 0x1c, 0x1d, 0x1f, 0x20, 0x21, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2c, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x38, 0x39, 0x3b, + 0x3c, 0x3d, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, + 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4c, 0x4d, 0x4e, + 0x4f, 0x50, 0x51, 0x53, 0x54, 0x55, 0x57, 0x58, + 0x59, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x6b, 0x6c, 0x6d, 0x70, 0x71, 0x73, 0x74, + 0x77, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x80, 0x85, + 0x86, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x11, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1e, 0x20, 0x21, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2d, + 0x31, 0x32, 0x33, 0x35, 0x36, 0x38, 0x39, 0x3a, + 0x3c, 0x3d, 0x3e, 0x40, 0x41, 0x42, 0x43, 0x44, + 0x45, 0x46, 0x47, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, + 0x4f, 0x50, 0x51, 0x52, 0x55, 0x56, 0x58, 0x59, + 0x5c, 0x5e, 0x60, 0x61, 0x65, 0x67, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x71, 0x72, 0x74, 0x75, 0x76, + 0x78, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x81, 0x83, + 0x85, 0x86, + /* 0x82 */ + 0x00, 0x01, 0x02, 0x03, 0x05, 0x06, 0x07, 0x09, + 0x0a, 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x16, 0x17, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x22, 0x23, 0x25, 0x26, 0x27, 0x29, + 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x32, 0x34, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3d, 0x3e, + 0x3f, 0x41, 0x42, 0x43, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x4b, 0x4c, 0x4e, 0x50, 0x51, 0x52, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x5a, 0x5b, 0x5d, + 0x5e, 0x63, 0x64, 0x65, 0x66, 0x6a, 0x6c, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x76, 0x77, 0x79, 0x7a, + 0x7b, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x22, 0x23, 0x24, 0x25, 0x27, 0x28, 0x29, 0x2a, + 0x2b, 0x2c, 0x2d, 0x2e, 0x31, 0x32, 0x34, 0x35, + 0x36, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, + 0x41, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x4c, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x54, + 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, + 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, + 0x65, 0x66, + /* 0x83 */ + 0x00, 0x01, 0x03, 0x04, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x10, 0x12, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x38, 0x39, 0x3b, + 0x3c, 0x3f, 0x41, 0x42, 0x43, 0x44, 0x45, 0x48, + 0x4a, 0x4d, 0x4e, 0x4f, 0x51, 0x55, 0x57, 0x58, + 0x59, 0x5b, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x64, + 0x68, 0x69, 0x6a, 0x6c, 0x6d, 0x70, 0x71, 0x73, + 0x74, 0x75, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, + 0x7d, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, + 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, + 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, + 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, + 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x45, 0x47, 0x48, + 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, + 0x54, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x60, + 0x61, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x6b, + /* 0x84 */ + 0x00, 0x01, 0x03, 0x04, 0x06, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x13, 0x14, + 0x15, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x23, 0x24, 0x25, 0x26, 0x28, + 0x29, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, + 0x42, 0x43, 0x44, 0x45, 0x48, 0x49, 0x4b, 0x4d, + 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x58, + 0x5a, 0x5e, 0x5f, 0x60, 0x61, 0x64, 0x65, 0x66, + 0x67, 0x68, 0x69, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x00, 0x01, 0x02, 0x03, 0x04, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, + 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x2a, 0x2b, 0x2c, + 0x2e, 0x2f, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x3b, 0x3c, 0x3d, 0x3f, 0x40, 0x41, + 0x42, 0x43, 0x44, 0x46, 0x47, 0x48, 0x49, 0x4a, + 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, + 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x63, 0x64, + 0x66, 0x67, + /* 0x85 */ + 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x0b, + 0x0d, 0x10, 0x11, 0x12, 0x13, 0x14, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x33, 0x34, + 0x36, 0x37, 0x38, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, + 0x3f, 0x40, 0x43, 0x44, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x4b, 0x4c, 0x4e, 0x4f, 0x50, 0x52, 0x53, + 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, + 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, + 0x67, 0x68, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x16, 0x17, 0x19, + 0x1b, 0x1d, 0x1f, 0x20, 0x21, 0x22, 0x26, 0x28, + 0x2a, 0x2b, 0x2c, 0x2e, 0x2f, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, + 0x4b, 0x4e, 0x4f, 0x51, 0x52, 0x53, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5e, 0x60, 0x62, + 0x63, 0x64, 0x65, 0x66, 0x67, 0x6b, 0x6d, 0x6e, + 0x73, 0x74, + /* 0x86 */ + 0x00, 0x01, 0x02, 0x05, 0x0b, 0x0d, 0x11, 0x12, + 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b, 0x1c, + 0x1d, 0x1e, 0x21, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x2d, 0x2e, 0x30, 0x31, 0x32, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3c, 0x3d, 0x3e, + 0x3f, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6a, 0x6c, + 0x6f, 0x70, 0x71, 0x72, 0x75, 0x79, 0x7a, 0x7b, + 0x7c, 0x00, 0x04, 0x05, 0x07, 0x08, 0x09, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x14, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x20, 0x21, 0x23, + 0x24, 0x25, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x30, 0x31, 0x34, 0x35, 0x37, 0x38, 0x39, + 0x3b, 0x3c, 0x3d, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x58, 0x59, 0x5b, 0x5c, 0x5d, 0x5f, + 0x61, 0x62, 0x63, 0x64, 0x65, 0x68, 0x6a, 0x6c, + 0x6d, 0x6e, 0x6f, 0x73, 0x74, 0x75, 0x77, 0x78, + 0x79, 0x7b, + /* 0x87 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2f, 0x30, 0x31, + 0x33, 0x34, 0x35, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x40, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x48, 0x49, 0x4c, 0x4d, 0x4f, 0x50, 0x51, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, + 0x5c, 0x5e, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x68, 0x00, 0x02, 0x03, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0f, 0x11, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, + 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x63, 0x64, 0x65, + 0x66, 0x67, + /* 0x88 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x23, 0x24, 0x26, 0x27, 0x28, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x33, 0x35, 0x38, + 0x39, 0x3a, 0x3c, 0x3e, 0x3f, 0x40, 0x42, 0x43, + 0x44, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, + 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, + 0x55, 0x56, 0x57, 0x58, 0x5b, 0x5c, 0x5e, 0x5f, + 0x60, 0x62, 0x64, 0x65, 0x66, 0x67, 0x68, 0x6b, + 0x6d, 0x6f, 0x70, 0x71, 0x72, 0x74, 0x78, 0x7a, + 0x7b, 0x00, 0x01, 0x02, 0x06, 0x0c, 0x0d, 0x0e, + 0x12, 0x13, 0x15, 0x16, 0x17, 0x19, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x1f, 0x22, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2d, 0x2e, 0x2f, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, + 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x67, 0x69, 0x6a, 0x6d, 0x70, 0x71, + 0x72, 0x73, + /* 0x89 */ + 0x00, 0x02, 0x04, 0x06, 0x07, 0x09, 0x0c, 0x0d, + 0x0f, 0x10, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1c, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2d, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, + 0x43, 0x44, 0x45, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x60, 0x61, 0x63, 0x64, 0x67, 0x69, + 0x6b, 0x6c, 0x6d, 0x70, 0x72, 0x74, 0x76, 0x78, + 0x79, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x38, 0x39, 0x3a, 0x3c, + 0x3d, 0x3e, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, + 0x51, 0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, + /* 0x8a */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0d, 0x0e, 0x10, 0x11, 0x12, + 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1d, + 0x1f, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, + 0x42, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, + 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x60, 0x61, 0x62, 0x64, 0x65, + 0x66, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x09, 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1c, + 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x24, 0x25, + 0x26, 0x27, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, + 0x31, 0x32, 0x34, 0x35, 0x38, 0x3a, 0x3b, 0x3c, + 0x3d, 0x3e, 0x41, 0x43, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x69, 0x6a, 0x6c, + 0x6d, 0x70, + /* 0x8b */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x14, 0x15, 0x17, 0x18, + 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x24, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x30, 0x31, + 0x33, 0x34, 0x35, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x40, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, + 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, + 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, + 0x71, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x12, 0x13, 0x15, 0x16, 0x17, 0x19, 0x1c, + 0x1d, 0x1e, 0x1f, 0x22, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x2e, 0x2f, 0x31, 0x32, 0x33, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x49, 0x4a, 0x4b, 0x4c, + 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, + 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5d, + 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, + 0x6e, 0x6f, + /* 0x8c */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x12, 0x13, 0x15, 0x16, 0x17, 0x19, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, + 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x3d, 0x3e, 0x40, 0x41, 0x42, 0x44, + 0x45, 0x46, 0x47, 0x48, 0x49, 0x4c, 0x4d, 0x4e, + 0x4f, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, + /* 0x8d */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2e, 0x2f, 0x30, 0x32, + 0x33, 0x34, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3f, 0x40, 0x41, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, + 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, + 0x5f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x07, 0x08, + 0x0a, 0x0b, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, + 0x14, 0x17, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x22, 0x23, 0x24, 0x26, 0x27, 0x28, + 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3e, 0x3f, 0x40, 0x42, 0x43, 0x44, 0x46, + 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4f, 0x51, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x5b, 0x5c, + 0x5e, 0x5f, 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, + 0x67, 0x68, 0x6b, 0x70, 0x71, 0x72, 0x77, 0x78, + 0x7a, 0x7b, + /* 0x8e */ + 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x0b, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x17, + 0x18, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x29, + 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, + 0x4b, 0x4c, 0x4f, 0x50, 0x52, 0x53, 0x54, 0x56, + 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5f, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x6b, 0x6c, 0x6e, 0x6f, + 0x70, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x09, 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x22, 0x25, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x2e, 0x30, 0x31, 0x32, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x41, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4d, 0x4e, 0x50, 0x51, 0x52, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5d, + 0x5f, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x68, + 0x69, 0x6a, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, + 0x72, 0x73, + /* 0x8f */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x2c, 0x2d, 0x2e, 0x30, 0x31, 0x32, 0x34, + 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3d, 0x3f, + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x48, 0x49, + 0x4a, 0x4c, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x59, 0x5b, 0x5d, 0x5e, + 0x5f, 0x60, 0x61, 0x62, 0x65, 0x66, 0x68, 0x69, + 0x6a, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x09, 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x28, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x2e, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4d, 0x4e, 0x50, + 0x51, 0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5c, 0x5d, 0x5f, 0x61, 0x62, 0x63, 0x64, + 0x65, 0x66, + /* 0x90 */ + 0x00, 0x01, 0x03, 0x04, 0x05, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x10, 0x12, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1c, 0x1d, 0x1f, 0x20, + 0x21, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2c, 0x2e, 0x31, 0x32, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, + 0x51, 0x54, 0x55, 0x57, 0x58, 0x59, 0x5b, 0x5c, + 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x64, 0x66, 0x68, + 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x70, 0x71, 0x73, + 0x79, 0x00, 0x01, 0x02, 0x03, 0x06, 0x08, 0x0b, + 0x0c, 0x0e, 0x12, 0x13, 0x15, 0x16, 0x17, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x22, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2e, 0x2f, 0x30, 0x31, + 0x32, 0x33, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x66, 0x67, 0x69, 0x6a, 0x6b, 0x6d, 0x6f, 0x70, + 0x71, 0x72, + /* 0x91 */ + 0x00, 0x03, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0f, + 0x10, 0x12, 0x13, 0x14, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1f, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x2b, 0x2c, 0x2e, 0x2f, 0x30, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x3b, 0x3f, 0x41, 0x42, 0x43, 0x44, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x63, 0x66, 0x67, 0x68, 0x6a, 0x6c, 0x6d, + 0x6e, 0x6f, 0x70, 0x73, 0x75, 0x77, 0x78, 0x79, + 0x7a, 0x00, 0x01, 0x03, 0x04, 0x05, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x18, 0x19, 0x1a, + 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, + 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, + 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3b, + 0x3c, 0x3d, 0x3f, 0x40, 0x41, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4c, 0x4e, 0x50, + 0x51, 0x52, 0x53, 0x54, 0x55, 0x57, 0x58, 0x59, + 0x5b, 0x5c, 0x5d, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, + /* 0x92 */ + 0x00, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0f, 0x11, 0x12, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1e, 0x20, 0x22, 0x23, 0x24, 0x26, + 0x29, 0x2a, 0x2b, 0x2d, 0x2e, 0x2f, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x3a, 0x3c, + 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, 0x61, 0x62, 0x63, 0x65, 0x66, 0x67, + 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, + 0x71, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, + 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2d, + 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x37, + 0x38, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, + 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x60, 0x61, 0x63, + 0x64, 0x67, + /* 0x93 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x07, 0x0b, 0x0d, + 0x0f, 0x10, 0x16, 0x17, 0x1d, 0x1e, 0x1f, 0x20, + 0x23, 0x25, 0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2f, + 0x30, 0x32, 0x33, 0x34, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x3b, 0x3c, 0x3f, 0x43, 0x44, 0x45, 0x47, + 0x48, 0x4b, 0x4c, 0x4e, 0x4f, 0x50, 0x51, 0x52, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, + 0x7c, 0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x09, + 0x0a, 0x0d, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x16, + 0x18, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x22, 0x23, + 0x25, 0x26, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, + 0x2f, 0x32, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3e, 0x3f, 0x41, 0x42, 0x43, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4e, 0x52, 0x53, + 0x54, 0x56, 0x57, 0x59, 0x5a, 0x5b, 0x5d, 0x5e, + 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, + 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, + 0x6f, 0x70, 0x71, 0x72, 0x73, 0x77, 0x79, 0x7a, + 0x7b, 0x7d, + /* 0x94 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x0a, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, + 0x15, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4c, 0x4d, 0x4f, 0x50, 0x51, 0x53, 0x54, + 0x55, 0x56, 0x57, 0x58, 0x59, 0x5c, 0x5d, 0x5e, + 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x67, + 0x68, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x1b, 0x1c, 0x1e, 0x1f, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x2b, 0x2d, 0x2f, 0x30, 0x31, 0x34, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3e, + 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, + 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, + /* 0x95 */ + 0x00, 0x01, 0x04, 0x05, 0x07, 0x08, 0x09, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, + 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b, 0x1c, + 0x1d, 0x1f, 0x20, 0x21, 0x23, 0x24, 0x25, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2f, 0x30, + 0x32, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3c, + 0x3d, 0x3f, 0x40, 0x41, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x48, 0x49, 0x4c, 0x4e, 0x4f, 0x50, 0x51, + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x09, 0x0a, 0x0c, 0x0d, 0x0e, 0x10, 0x12, 0x13, + 0x14, 0x15, 0x16, 0x19, 0x1b, 0x1f, 0x20, 0x21, + 0x22, 0x25, 0x26, 0x28, 0x29, 0x2a, 0x2c, 0x2e, + 0x2f, 0x30, 0x31, 0x32, 0x35, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x41, 0x42, 0x44, 0x45, 0x46, 0x48, + 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x51, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, + 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, + /* 0x96 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x1a, 0x1b, 0x1d, 0x1e, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x29, 0x2a, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, + 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, + 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x52, 0x53, 0x54, + 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, + 0x5d, 0x5e, 0x5f, 0x62, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1f, 0x20, + 0x22, 0x23, 0x24, 0x26, 0x27, 0x28, 0x29, 0x2a, + 0x2b, 0x2c, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, + /* 0x97 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2e, 0x2f, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4b, 0x4c, + 0x4e, 0x4f, 0x50, 0x52, 0x53, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x5a, 0x5b, 0x5d, 0x5f, 0x60, 0x61, + 0x62, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, + 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, + 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, + 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x57, + 0x58, 0x59, + /* 0x98 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x19, + 0x1a, 0x1b, 0x1d, 0x1e, 0x1f, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x52, 0x53, 0x55, 0x56, 0x57, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x62, 0x64, + 0x66, 0x00, 0x01, 0x02, 0x03, 0x04, 0x07, 0x0a, + 0x0b, 0x10, 0x11, 0x12, 0x13, 0x14, 0x17, 0x1b, + 0x1c, 0x1d, 0x1f, 0x20, 0x23, 0x24, 0x26, 0x27, + 0x28, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x33, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3f, + 0x40, 0x42, 0x43, 0x44, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x4b, 0x4c, 0x4f, 0x51, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x5a, 0x5b, 0x5c, 0x5e, 0x5f, + 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x6a, 0x6b, 0x6c, 0x6d, 0x6f, 0x70, 0x71, 0x72, + 0x73, 0x74, 0x7a, 0x7b, 0x7e, 0x81, 0x82, 0x83, + 0x84, 0x87, + /* 0x99 */ + 0x00, 0x01, 0x02, 0x03, 0x05, 0x08, 0x09, 0x0b, + 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, + 0x15, 0x18, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x24, 0x25, 0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x34, 0x38, 0x39, 0x3a, + 0x3b, 0x3c, 0x3d, 0x3f, 0x40, 0x41, 0x43, 0x44, + 0x45, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5d, 0x5f, 0x60, 0x61, 0x63, + 0x65, 0x66, 0x67, 0x68, 0x69, 0x6c, 0x6e, 0x70, + 0x71, 0x72, 0x74, 0x75, 0x78, 0x79, 0x7b, 0x7c, + 0x7d, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x14, 0x15, 0x16, 0x18, 0x19, + 0x1a, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, + 0x24, 0x25, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x30, 0x31, 0x32, 0x34, 0x35, 0x36, 0x38, + 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x41, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4d, + 0x4e, 0x50, 0x51, 0x52, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5d, 0x5f, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x69, 0x6a, 0x6c, 0x6d, 0x70, + 0x71, 0x72, + /* 0x9a */ + 0x00, 0x01, 0x02, 0x03, 0x06, 0x08, 0x0a, 0x0c, + 0x0f, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2e, 0x2f, 0x31, 0x32, 0x33, + 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3d, + 0x3e, 0x3f, 0x40, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x4a, 0x4b, 0x4d, 0x4e, 0x4f, 0x51, 0x52, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x5a, 0x5c, 0x5e, + 0x5f, 0x60, 0x61, 0x62, 0x63, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x6b, 0x6d, 0x6e, 0x6f, 0x70, 0x71, + 0x72, 0x00, 0x02, 0x03, 0x05, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0f, 0x10, 0x12, 0x13, 0x14, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1f, 0x21, + 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, + 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, + 0x43, 0x44, 0x47, 0x48, 0x4a, 0x4b, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x57, 0x59, 0x5b, 0x5c, + 0x5d, 0x5e, 0x60, 0x63, 0x66, 0x67, 0x68, 0x6a, + 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x73, 0x74, + 0x77, 0x78, + /* 0x9b */ + 0x00, 0x01, 0x02, 0x06, 0x07, 0x09, 0x0a, 0x0b, + 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x16, + 0x17, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, + 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x5a, 0x5b, + 0x5d, 0x5e, 0x5f, 0x61, 0x63, 0x64, 0x65, 0x66, + 0x67, 0x00, 0x01, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x13, + 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, + 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, + 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, + 0x5d, 0x60, + /* 0x9c */ + 0x00, 0x02, 0x03, 0x06, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x21, + 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x2b, 0x2c, 0x2e, 0x2f, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4c, + 0x4d, 0x4e, 0x4f, 0x50, 0x52, 0x53, 0x54, 0x56, + 0x57, 0x58, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x00, 0x01, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x20, 0x21, + 0x23, 0x24, 0x25, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x30, 0x31, 0x32, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4f, 0x50, + 0x51, 0x52, 0x53, 0x54, 0x55, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, + /* 0x9d */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, + 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x40, 0x41, 0x42, + 0x43, 0x44, 0x45, 0x48, 0x49, 0x4b, 0x4c, 0x4d, + 0x4f, 0x51, 0x52, 0x53, 0x54, 0x58, 0x59, 0x5a, + 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x63, + 0x64, 0x00, 0x02, 0x03, 0x04, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x1b, + 0x1c, 0x1e, 0x1f, 0x20, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x2b, 0x2d, 0x2f, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x37, 0x38, 0x3c, 0x40, 0x41, + 0x42, 0x43, 0x47, 0x4b, 0x4c, 0x4d, 0x50, 0x53, + 0x54, 0x56, 0x57, 0x58, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, 0x60, 0x63, 0x67, 0x68, 0x69, 0x6a, + 0x6b, 0x6c, 0x6f, 0x70, 0x72, 0x73, 0x74, 0x76, + 0x77, 0x79, 0x7a, 0x7b, 0x7c, 0x7f, 0x81, 0x83, + 0x84, 0x85, + /* 0x9e */ + 0x00, 0x03, 0x04, 0x05, 0x07, 0x08, 0x09, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x14, + 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, + 0x1d, 0x20, 0x21, 0x24, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x35, 0x37, 0x39, 0x3c, 0x3d, 0x3f, 0x40, + 0x41, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4c, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x59, 0x5b, 0x5c, 0x5d, 0x5f, 0x62, 0x63, 0x64, + 0x65, 0x6c, 0x6d, 0x6e, 0x73, 0x74, 0x75, 0x77, + 0x78, 0x79, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, + 0x81, 0x84, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, + 0x8d, 0x00, 0x01, 0x03, 0x04, 0x05, 0x09, 0x0b, + 0x0c, 0x10, 0x12, 0x14, 0x16, 0x17, 0x18, 0x19, + 0x1c, 0x1d, 0x1f, 0x20, 0x21, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2c, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x38, 0x39, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x47, 0x48, 0x4a, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, + 0x51, 0x54, 0x55, 0x57, 0x58, 0x59, 0x5b, 0x5c, + 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x64, 0x66, 0x68, + 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x70, 0x71, 0x73, + 0x74, 0x75, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, + 0x7d, 0x80, + /* 0x9f */ + 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x0a, + 0x0b, 0x0d, 0x0e, 0x0f, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x1a, 0x1c, 0x1e, 0x1f, 0x20, 0x21, 0x22, + 0x23, 0x26, 0x27, 0x29, 0x2a, 0x2b, 0x2d, 0x2e, + 0x2f, 0x30, 0x31, 0x32, 0x33, 0x36, 0x37, 0x3a, + 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x42, 0x43, 0x45, + 0x46, 0x47, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, + 0x4f, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5e, 0x5f, 0x61, 0x62, 0x63, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6e, 0x70, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x7a, 0x7b, + 0x7d, 0x00, 0x01, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0c, 0x0e, 0x10, 0x12, 0x13, 0x14, + 0x15, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x25, 0x28, 0x2a, 0x33, 0x34, + 0x35, 0x37, 0x38, 0x39, 0x3b, 0x3c, 0x3d, 0x3e, + 0x3f, 0x40, 0x41, 0x43, 0x44, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x50, 0x51, 0x53, + 0x54, 0x55, 0x59, 0x5a, 0x5b, 0x5c, 0x60, 0x65, + 0x66, 0x67, 0x69, 0x6c, 0x6d, 0x6f, 0x73, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7c, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x88, 0x89, 0x8b, 0x8c, 0x8d, 0x8f, + 0x90, 0x91, + /* 0xa0 */ + 0x00, 0x01, 0x02, 0x03, 0x06, 0x0a, 0x0b, 0x0c, + 0x0d, 0x0e, 0x0f, 0x12, 0x13, 0x15, 0x17, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x21, 0x22, + 0x23, 0x24, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x2d, 0x2e, 0x2f, 0x31, 0x32, 0x33, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, + 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x4a, 0x4b, 0x4d, 0x4e, 0x4f, 0x51, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x5a, 0x5c, 0x5f, 0x60, + 0x61, 0x62, 0x63, 0x66, 0x67, 0x69, 0x6a, 0x6b, + 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x76, + 0x78, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07, + 0x08, 0x09, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x18, 0x19, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, + 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x40, + 0x41, 0x43, 0x44, 0x45, 0x47, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x50, 0x52, 0x56, 0x57, 0x58, 0x5c, + 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6c, 0x6e, 0x70, + 0x71, 0x72, +}; + +static int +uhc_1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0x81 && c1 <= 0xa0)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x41 && c2 < 0x5b) || (c2 >= 0x61 && c2 < 0x7b) || (c2 >= 0x81 && c2 < 0xff)) { + unsigned int row = c1 - 0x81; + unsigned int col = c2 - (c2 >= 0x81 ? 0x4d : c2 >= 0x61 ? 0x47 : 0x41); + unsigned int i = 178 * row + col; + if (i < 5696) { + *pwc = (ucs4_t) (uhc_1_2uni_main_page81[2*row+(col>=89?1:0)] + uhc_1_2uni_page81[i]); + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short uhc_1_2charset_main[45] = { + 0x8141, 0x81cd, 0x829b, 0x8363, 0x83e9, 0x84b7, 0x8585, 0x8647, + 0x86d3, 0x87a1, 0x8869, 0x88ef, 0x89bd, 0x8a8b, 0x8b4d, 0x8bd9, + 0x8ca7, 0x8d6f, 0x8df5, 0x8ec3, 0x8f91, 0x9053, 0x90df, 0x91ad, + 0x9275, 0x92fb, 0x93c9, 0x9497, 0x9559, 0x95e5, 0x96b3, 0x9781, + 0x9843, 0x98cf, 0x999d, 0x9a65, 0x9aeb, 0x9bb9, 0x9c87, 0x9d49, + 0x9dd5, 0x9ea3, 0x9f6b, 0x9ff1, 0xa0bf, +}; +static const unsigned char uhc_1_2charset[5696] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, + 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, + 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x8b, 0x8c, 0x8d, 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, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 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, 0xc6, 0xc7, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, + 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, + 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 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, 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, 0xca, 0xcb, 0xcc, 0xcd, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, + 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x6e, 0x6f, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, + 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 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, + 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 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, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, + 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, + 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x6b, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 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, 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, 0xc4, 0xc5, + 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0xb6, 0xb7, 0xb8, 0xb9, + 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, + 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x68, 0x69, + 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, + 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, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 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, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, + 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, + 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x7e, 0x7f, 0x80, 0x81, + 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, + 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 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, + 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, + 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0xb0, 0xb1, + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, + 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, + 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x7b, 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, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 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, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, + 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, + 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, + 0x00, 0x01, 0x02, 0x03, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x78, 0x79, + 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, + 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, + 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, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, + 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, + 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, + 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, + 0x00, 0x01, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, + 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 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, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0xc0, 0xc1, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, + 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, + 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x8b, 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, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 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, 0xc4, 0xc5, 0xc6, 0xc7, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, + 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, + 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 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, + 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, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, + 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, + 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, + 0x82, 0x83, 0x84, 0x85, 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, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 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, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, + 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, + 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x50, 0x51, + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, +}; + +static const Summary16 uhc_1_uni2indx_pageac[459] = { + /* 0xac00 */ + { 0, 0xf86c }, { 9, 0xc100 }, { 12, 0x4fee }, { 23, 0xecfc }, + { 34, 0xd7fe }, { 47, 0xeeef }, { 60, 0xffff }, { 76, 0xfa6c }, + { 86, 0xe184 }, { 92, 0x4fee }, { 103, 0x68fc }, { 112, 0xc4fe }, + { 122, 0xeeed }, { 134, 0xff5f }, { 148, 0x6a6c }, { 156, 0xcf94 }, + /* 0xad00 */ + { 165, 0x4fae }, { 175, 0xeefd }, { 188, 0xcdfe }, { 200, 0xeecf }, + { 212, 0xfd4f }, { 224, 0xfeee }, { 237, 0xcff5 }, { 249, 0x4786 }, + { 256, 0xecf9 }, { 267, 0xcffe }, { 280, 0xffef }, { 295, 0xff7f }, + { 310, 0xfeec }, { 322, 0xeff4 }, { 334, 0xffee }, { 348, 0x6cff }, + /* 0xae00 */ + { 360, 0xd4fc }, { 370, 0xffef }, { 385, 0xffff }, { 401, 0xfa6c }, + { 411, 0x8b94 }, { 418, 0x4fae }, { 428, 0xecdc }, { 438, 0xc4fe }, + { 448, 0xefcf }, { 461, 0xffff }, { 477, 0xffff }, { 493, 0x8fff }, + { 506, 0x4fee }, { 517, 0xecfc }, { 528, 0xd6ff }, { 541, 0xeeef }, + /* 0xaf00 */ + { 554, 0xde7f }, { 567, 0xfffe }, { 582, 0xcfff }, { 596, 0x4fea }, + { 606, 0xfcf1 }, { 617, 0xcffe }, { 630, 0xffcf }, { 644, 0xfdff }, + { 659, 0xfeee }, { 672, 0xefdc }, { 684, 0xffff }, { 700, 0xecff }, + { 713, 0x947e }, { 722, 0xefef }, { 736, 0xfcff }, { 750, 0xfeec }, + /* 0xb000 */ + { 762, 0xefec }, { 774, 0xcfee }, { 786, 0xfeff }, { 801, 0xffff }, + { 817, 0xaacf }, { 827, 0xdd47 }, { 837, 0xffff }, { 853, 0xcfff }, + { 867, 0x4fee }, { 878, 0x68fd }, { 888, 0x04f8 }, { 894, 0xeec5 }, + { 904, 0xfc4f }, { 915, 0xfeec }, { 927, 0xffde }, { 941, 0xffff }, + /* 0xb100 */ + { 957, 0xe4ff }, { 969, 0xc4f2 }, { 977, 0xeec7 }, { 988, 0xfc4f }, + { 999, 0xfeec }, { 1011, 0xeecc }, { 1021, 0xfffe }, { 1036, 0xecff }, + { 1049, 0xd4fa }, { 1059, 0xeee3 }, { 1070, 0xfeff }, { 1085, 0xffff }, + { 1101, 0xefff }, { 1116, 0x4fee }, { 1127, 0xecff }, { 1140, 0xd5fe }, + /* 0xb200 */ + { 1152, 0xe6cf }, { 1163, 0xfd4f }, { 1175, 0xfffe }, { 1190, 0xefef }, + { 1204, 0xffff }, { 1220, 0xeeff }, { 1234, 0xfcfe }, { 1247, 0xefcf }, + { 1260, 0xfdcf }, { 1273, 0xf8ec }, { 1283, 0xeb94 }, { 1292, 0xffee }, + { 1306, 0xecff }, { 1319, 0xd4fa }, { 1329, 0x068b }, { 1335, 0x7047 }, + /* 0xb300 */ + { 1342, 0xfeec }, { 1354, 0xefc4 }, { 1364, 0xffff }, { 1380, 0xffff }, + { 1396, 0xffff }, { 1412, 0x268f }, { 1420, 0xb54f }, { 1430, 0xfeec }, + { 1442, 0xefc4 }, { 1452, 0xffee }, { 1466, 0xeefc }, { 1478, 0xffff }, + { 1494, 0xa6cf }, { 1504, 0xd54e }, { 1513, 0xfeee }, { 1526, 0xefff }, + /* 0xb400 */ + { 1541, 0xffff }, { 1557, 0xeefe }, { 1570, 0xf4fe }, { 1582, 0xffef }, + { 1597, 0xffff }, { 1613, 0xfeec }, { 1625, 0xefd4 }, { 1636, 0xffff }, + { 1652, 0xfefe }, { 1666, 0xdfff }, { 1681, 0xeeef }, { 1694, 0xfd5f }, + { 1707, 0xfeee }, { 1720, 0xcfde }, { 1732, 0x4fa6 }, { 1741, 0xfefd }, + /* 0xb500 */ + { 1755, 0xffff }, { 1771, 0xe6cf }, { 1782, 0xf84f }, { 1792, 0xfeec }, + { 1804, 0xc7c4 }, { 1812, 0x4fee }, { 1823, 0xfffc }, { 1837, 0xffff }, + { 1853, 0xffff }, { 1869, 0xffff }, { 1885, 0xf2ec }, { 1895, 0xc7c4 }, + { 1903, 0x4fee }, { 1914, 0xfefc }, { 1927, 0xefff }, { 1942, 0xffff }, + /* 0xb600 */ + { 1958, 0xffff }, { 1974, 0xfeec }, { 1986, 0xefdf }, { 2000, 0xffef }, + { 2015, 0xfeff }, { 2030, 0xffff }, { 2046, 0xfeef }, { 2060, 0xffff }, + { 2076, 0xffff }, { 2092, 0xcfff }, { 2106, 0xe7ee }, { 2118, 0xfffd }, + { 2133, 0xffff }, { 2149, 0xffef }, { 2164, 0xffff }, { 2180, 0xfeee }, + /* 0xb700 */ + { 2193, 0xffdc }, { 2206, 0xffff }, { 2222, 0x6cff }, { 2234, 0xf4fe }, + { 2246, 0xeeef }, { 2259, 0xffcf }, { 2273, 0xfeee }, { 2286, 0xcfd4 }, + { 2296, 0x4fee }, { 2307, 0xec38 }, { 2315, 0xc4fe }, { 2325, 0xfecf }, + { 2338, 0xfd7f }, { 2352, 0xffff }, { 2368, 0xcfff }, { 2382, 0x4fee }, + /* 0xb800 */ + { 2393, 0xec7c }, { 2403, 0xd4fe }, { 2414, 0xeecf }, { 2426, 0xfc4f }, + { 2437, 0xffee }, { 2451, 0xcff5 }, { 2463, 0x4fee }, { 2474, 0xeefd }, + { 2487, 0xdfff }, { 2502, 0xffff }, { 2518, 0xfeff }, { 2533, 0xfeee }, + { 2546, 0xefd4 }, { 2557, 0x5fee }, { 2569, 0xecfd }, { 2581, 0xd4fe }, + /* 0xb900 */ + { 2592, 0xffef }, { 2607, 0xfeff }, { 2622, 0xfffe }, { 2637, 0xcfff }, + { 2651, 0x6fee }, { 2663, 0xecfd }, { 2675, 0xd4fe }, { 2686, 0xeecf }, + { 2698, 0x994f }, { 2707, 0xffff }, { 2723, 0xcfff }, { 2737, 0x4fee }, + { 2748, 0x2cfd }, { 2758, 0x94f8 }, { 2766, 0xeec5 }, { 2776, 0xf84f }, + /* 0xba00 */ + { 2786, 0xfefc }, { 2799, 0xffdf }, { 2814, 0xffff }, { 2830, 0xecff }, + { 2843, 0x94fa }, { 2852, 0xeec7 }, { 2863, 0xfc4f }, { 2874, 0xfeec }, + { 2886, 0xef47 }, { 2897, 0xffff }, { 2913, 0xe4ff }, { 2925, 0xd4fa }, + { 2935, 0xfeef }, { 2949, 0xfcff }, { 2963, 0xffff }, { 2979, 0xefff }, + /* 0xbb00 */ + { 2994, 0x5fee }, { 3006, 0xeefd }, { 3019, 0xf5fe }, { 3032, 0x868f }, + { 3040, 0x5d4f }, { 3050, 0xfeee }, { 3063, 0xeff5 }, { 3076, 0xffff }, + { 3092, 0xeeff }, { 3106, 0xfffe }, { 3121, 0xeeef }, { 3134, 0xff6f }, + { 3148, 0xfeee }, { 3161, 0xfff6 }, { 3175, 0xffff }, { 3191, 0x6cff }, + /* 0xbc00 */ + { 3203, 0x44fa }, { 3211, 0x060d }, { 3216, 0xdd4f }, { 3227, 0xfeec }, + { 3239, 0xcdc4 }, { 3247, 0xdffe }, { 3261, 0xffff }, { 3277, 0xffff }, + { 3293, 0xa6cf }, { 3303, 0xf94f }, { 3314, 0xfe6c }, { 3325, 0xcfc4 }, + { 3334, 0x5fee }, { 3346, 0xeedc }, { 3357, 0xffff }, { 3373, 0xee8f }, + /* 0xbd00 */ + { 3384, 0xfd4f }, { 3396, 0xffee }, { 3410, 0xefef }, { 3424, 0xffff }, + { 3440, 0xecfe }, { 3452, 0xfcfe }, { 3465, 0xfeef }, { 3479, 0xffff }, + { 3495, 0xf86c }, { 3504, 0xe9d4 }, { 3513, 0xffef }, { 3528, 0xfefe }, + { 3542, 0xffff }, { 3558, 0xeecf }, { 3570, 0xfdff }, { 3585, 0xfeee }, + /* 0xbe00 */ + { 3598, 0xcfd6 }, { 3609, 0x4fee }, { 3620, 0xffff }, { 3636, 0xffff }, + { 3652, 0xaecf }, { 3663, 0xf14f }, { 3673, 0xfaec }, { 3684, 0xc7c4 }, + { 3692, 0x4fee }, { 3703, 0xfcfc }, { 3715, 0xfeff }, { 3730, 0xffff }, + { 3746, 0xffff }, { 3762, 0xfe6c }, { 3773, 0xefc6 }, { 3784, 0xffff }, + /* 0xbf00 */ + { 3800, 0xfcfd }, { 3813, 0xc4ff }, { 3824, 0xffff }, { 3840, 0xffff }, + { 3856, 0xfeec }, { 3868, 0xffdc }, { 3881, 0xffff }, { 3897, 0xffff }, + { 3913, 0xffff }, { 3929, 0xffef }, { 3944, 0xffff }, { 3960, 0xfffe }, + { 3975, 0xcfdf }, { 3988, 0x6fee }, { 4000, 0xfffd }, { 4015, 0xffff }, + /* 0xc000 */ + { 4031, 0xffff }, { 4047, 0xffff }, { 4063, 0xffff }, { 4079, 0xefff }, + { 4094, 0xffff }, { 4110, 0xeefd }, { 4123, 0xfcfe }, { 4136, 0xffff }, + { 4152, 0xffff }, { 4168, 0xfeec }, { 4180, 0x4fd4 }, { 4189, 0x4f86 }, + { 4197, 0xecdc }, { 4207, 0xc4fe }, { 4217, 0xeecf }, { 4229, 0xfd4f }, + /* 0xc100 */ + { 4241, 0xfeee }, { 4254, 0x0fde }, { 4264, 0x4f26 }, { 4272, 0xecbc }, + { 4282, 0xc4fe }, { 4292, 0xeecf }, { 4304, 0xfc4f }, { 4315, 0xfeee }, + { 4328, 0x8fdf }, { 4340, 0x4fae }, { 4350, 0xecdd }, { 4361, 0xdffe }, + { 4375, 0xeeef }, { 4388, 0xfe6f }, { 4401, 0xfeee }, { 4414, 0xcff4 }, + /* 0xc200 */ + { 4425, 0x4fee }, { 4436, 0x6cfd }, { 4447, 0x54fe }, { 4457, 0xffe9 }, + { 4470, 0xfeff }, { 4485, 0xfeec }, { 4497, 0xcfde }, { 4509, 0x4fee }, + { 4520, 0xfcfd }, { 4533, 0xd6fe }, { 4545, 0xcecf }, { 4556, 0xfd4f }, + { 4568, 0xffff }, { 4584, 0xcfff }, { 4598, 0x47e6 }, { 4607, 0xe4bd }, + /* 0xc300 */ + { 4617, 0xccfe }, { 4628, 0xeec7 }, { 4639, 0xfccf }, { 4651, 0xffff }, + { 4667, 0xffdf }, { 4682, 0xffff }, { 4698, 0xecff }, { 4711, 0xccfa }, + { 4721, 0xeeef }, { 4734, 0xffff }, { 4750, 0xffff }, { 4766, 0xffff }, + { 4782, 0xfffe }, { 4797, 0x6cff }, { 4809, 0xdcfa }, { 4820, 0xfecf }, + /* 0xc400 */ + { 4833, 0xfeff }, { 4848, 0xfffe }, { 4863, 0xefef }, { 4877, 0xcfee }, + { 4889, 0xfeff }, { 4904, 0xffff }, { 4920, 0xeecf }, { 4932, 0xfdcf }, + { 4945, 0xfffe }, { 4960, 0xefef }, { 4974, 0xffff }, { 4990, 0xeeff }, + { 5004, 0xffff }, { 5020, 0xffff }, { 5036, 0xfdff }, { 5051, 0x7aec }, + /* 0xc500 */ + { 5061, 0xeffc }, { 5074, 0xefee }, { 5087, 0xecff }, { 5100, 0xd4fe }, + { 5111, 0x88cf }, { 5119, 0x9c47 }, { 5127, 0xfeec }, { 5139, 0xcfc4 }, + { 5148, 0x4f6e }, { 5158, 0xee5d }, { 5169, 0xfdfe }, { 5183, 0x84cf }, + { 5191, 0xa80f }, { 5198, 0xfeec }, { 5210, 0x8fd4 }, { 5219, 0x0f2e }, + /* 0xc600 */ + { 5227, 0xee1c }, { 5236, 0xe4fe }, { 5247, 0x8ecf }, { 5257, 0xf546 }, + { 5266, 0xfeec }, { 5278, 0xcfc4 }, { 5287, 0x6ffe }, { 5300, 0xecfd }, + { 5312, 0xd4fe }, { 5323, 0xeecf }, { 5335, 0xfd4f }, { 5347, 0xf8ec }, + { 5357, 0xcfd4 }, { 5367, 0xcfee }, { 5379, 0xecfc }, { 5390, 0xdcfe }, + /* 0xc700 */ + { 5402, 0xeecf }, { 5414, 0xfd4f }, { 5426, 0xfeec }, { 5438, 0xcf54 }, + { 5447, 0x4bee }, { 5457, 0xee01 }, { 5464, 0xf6fe }, { 5477, 0x8ecf }, + { 5487, 0xb847 }, { 5495, 0xfa2c }, { 5504, 0xcf84 }, { 5512, 0x4fee }, + { 5523, 0xacfc }, { 5533, 0xdefe }, { 5546, 0xeeef }, { 5559, 0xffff }, + /* 0xc800 */ + { 5575, 0xfaec }, { 5586, 0xcf94 }, { 5595, 0x4fee }, { 5606, 0xeefd }, + { 5619, 0xccfe }, { 5630, 0xffef }, { 5645, 0xffff }, { 5661, 0xfaec }, + { 5672, 0xc714 }, { 5679, 0x5fef }, { 5692, 0x001d }, +}; + +static int +uhc_1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + if (wc >= 0xac00 && wc < 0xc8b0) { + const Summary16 *summary = &uhc_1_uni2indx_pageac[(wc>>4)-0xac0]; + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + used += summary->indx; + c = uhc_1_2charset_main[used>>7] + uhc_1_2charset[used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/uhc_2.h b/jni/parted/libiconv/lib/uhc_2.h new file mode 100755 index 0000000..3dd03e6 --- /dev/null +++ b/jni/parted/libiconv/lib/uhc_2.h @@ -0,0 +1,1021 @@ +/* + * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * Unified Hangul Code part 2 + */ + +static const unsigned short uhc_2_2uni_main_pagea1[76] = { + 0xc8a5, 0xc8d8, 0xc910, 0xc93e, 0xc971, 0xc9a5, 0xc9de, 0xca1c, + 0xca47, 0xca7b, 0xcaa8, 0xcadd, 0xcb0b, 0xcb3a, 0xcb6d, 0xcb99, + 0xcbc5, 0xcbf3, 0xcc25, 0xcc67, 0xcc94, 0xcccf, 0xccfe, 0xcd34, + 0xcd61, 0xcd92, 0xcdc6, 0xcdf5, 0xce2c, 0xce5d, 0xce9a, 0xcecc, + 0xcf02, 0xcf3b, 0xcf6d, 0xcf9e, 0xcfcc, 0xcfff, 0xd02e, 0xd064, + 0xd095, 0xd0cc, 0xd105, 0xd132, 0xd16e, 0xd19b, 0xd1d0, 0xd1fd, + 0xd22a, 0xd25e, 0xd28d, 0xd2c5, 0xd2fb, 0xd33e, 0xd36a, 0xd3a1, + 0xd3d7, 0xd40d, 0xd438, 0xd467, 0xd49e, 0xd4c9, 0xd4fe, 0xd52e, + 0xd564, 0xd59d, 0xd5ca, 0xd606, 0xd63d, 0xd677, 0xd6ab, 0xd6e2, + 0xd715, 0xd74e, 0xd78d, 0xfffd, +}; +static const unsigned char uhc_2_2uni_pagea1[3126] = { + /* 0xa1 */ + 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x19, 0x1a, + 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21, 0x22, 0x24, + 0x25, 0x26, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x31, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x0a, 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x21, 0x22, + 0x23, 0x26, 0x27, 0x29, 0x2a, 0x2b, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x36, + /* 0xa2 */ + 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, + 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x14, 0x15, 0x17, 0x18, + 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x24, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x2f, 0x30, 0x31, + /* 0xa3 */ + 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x19, 0x1a, 0x1c, + 0x1d, 0x1e, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x29, 0x2b, 0x2d, 0x2e, 0x2f, 0x30, 0x31, + 0x32, 0x33, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1d, 0x1e, 0x20, + 0x21, 0x24, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2d, + 0x2f, 0x32, 0x33, 0x36, + /* 0xa4 */ + 0x00, 0x01, 0x03, 0x05, 0x07, 0x08, 0x0a, 0x0b, + 0x0c, 0x0d, 0x10, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1c, 0x1d, 0x1f, 0x20, 0x21, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x29, 0x2c, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x37, 0x38, 0x39, 0x3b, + 0x3c, 0x3d, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, + /* 0xa5 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x07, 0x08, 0x0a, + 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, + 0x14, 0x17, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, + 0x32, 0x33, 0x00, 0x01, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, + /* 0xa6 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x16, 0x17, 0x19, 0x1a, + 0x1b, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x26, 0x28, 0x2a, 0x2c, 0x2d, 0x2e, 0x2f, 0x32, + 0x33, 0x34, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2c, 0x2d, + /* 0xa7 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, 0x07, 0x08, + 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, + 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x2e, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x10, + 0x11, 0x13, 0x14, 0x15, 0x17, 0x18, 0x19, 0x1a, + 0x1b, 0x1c, 0x1d, 0x20, 0x21, 0x22, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2d, 0x2e, + 0x2f, 0x30, 0x31, 0x32, + /* 0xa8 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x2b, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, + /* 0xa9 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21, + 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, + 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x2b, + 0x2c, 0x2d, 0x30, 0x31, + /* 0xaa */ + 0x00, 0x01, 0x05, 0x06, 0x08, 0x0a, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x15, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x21, 0x22, 0x24, 0x25, 0x26, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x31, + 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3c, 0x3d, + 0x3e, 0x40, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, + /* 0xab */ + 0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x09, 0x0a, + 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, + 0x16, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x22, + 0x23, 0x25, 0x26, 0x27, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x2e, 0x2f, 0x32, 0x34, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x00, 0x02, 0x03, 0x04, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x22, + 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, + 0x2b, 0x2c, 0x2d, 0x2e, + /* 0xac */ + 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x13, 0x14, + 0x15, 0x16, 0x17, 0x18, 0x19, 0x1c, 0x1e, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x27, 0x28, 0x29, + 0x2b, 0x2c, 0x2d, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x29, 0x2a, 0x2b, + /* 0xad */ + 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0d, 0x0f, 0x11, 0x12, 0x13, 0x14, + 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, + 0x2f, 0x30, 0x00, 0x01, 0x04, 0x05, 0x07, 0x08, + 0x09, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x14, 0x16, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, + 0x2f, 0x30, 0x31, 0x33, + /* 0xae */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07, 0x08, + 0x09, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x23, 0x24, 0x25, 0x27, 0x28, 0x29, 0x2b, 0x2c, + 0x2d, 0x2e, 0x00, 0x01, 0x02, 0x05, 0x07, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x10, 0x11, 0x12, + 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b, 0x1c, + 0x1d, 0x1e, 0x20, 0x21, 0x22, 0x23, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x2d, 0x2e, 0x30, 0x31, + 0x32, 0x34, 0x35, 0x36, + /* 0xaf */ + 0x00, 0x01, 0x02, 0x03, 0x06, 0x08, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, + 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x2e, 0x2f, 0x00, 0x01, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0d, 0x0f, 0x11, 0x12, 0x13, 0x14, + 0x15, 0x16, 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x29, 0x2b, + 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x35, 0x36, + 0x38, 0x39, 0x3a, 0x3c, + /* 0xb0 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x0c, + 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x1a, 0x1b, 0x1d, 0x1e, 0x21, 0x22, + 0x23, 0x24, 0x25, 0x26, 0x27, 0x2a, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, + /* 0xb1 */ + 0x00, 0x01, 0x03, 0x04, 0x05, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x10, 0x12, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1f, + 0x20, 0x21, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2c, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x37, 0x38, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, + 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x2b, + 0x2d, 0x2f, 0x30, 0x31, + /* 0xb2 */ + 0x00, 0x01, 0x02, 0x05, 0x06, 0x08, 0x09, 0x0a, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x14, + 0x15, 0x16, 0x17, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, + 0x2f, 0x30, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x27, 0x28, 0x29, + 0x2a, 0x2b, 0x2c, 0x2d, + /* 0xb3 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x16, 0x17, 0x19, 0x1a, + 0x1b, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x26, 0x28, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x31, 0x32, 0x00, 0x02, 0x03, 0x04, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x2b, 0x2c, 0x2d, + /* 0xb4 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, + 0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x12, 0x13, + 0x14, 0x15, 0x18, 0x1a, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x23, 0x24, 0x25, 0x27, 0x28, 0x29, + 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x33, + 0x34, 0x35, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x0a, 0x0b, 0x0d, 0x0e, 0x0f, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1a, 0x1b, + 0x1c, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x2e, 0x2f, 0x30, + /* 0xb5 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x11, + 0x12, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x21, 0x23, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2d, 0x2e, 0x30, 0x31, 0x32, + 0x35, 0x36, 0x00, 0x01, 0x02, 0x03, 0x06, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x12, 0x13, 0x15, + 0x16, 0x17, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x22, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, + 0x35, 0x36, 0x37, 0x38, + /* 0xb6 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x00, 0x01, 0x03, 0x04, 0x05, 0x07, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x10, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1c, 0x1d, 0x1f, 0x20, + 0x21, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2c, 0x2e, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x37, 0x38, 0x39, 0x3b, + /* 0xb7 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x17, 0x18, 0x19, + 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, + 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, + 0x2b, 0x2c, 0x00, 0x01, 0x02, 0x03, 0x04, 0x07, + 0x08, 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x17, 0x19, 0x1b, 0x1c, 0x1d, + 0x1e, 0x20, 0x22, 0x23, 0x24, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x34, + /* 0xb8 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x25, 0x26, 0x27, 0x29, 0x2a, + 0x2b, 0x2c, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0b, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, + /* 0xb9 */ + 0x00, 0x01, 0x04, 0x05, 0x07, 0x08, 0x09, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x14, 0x16, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x33, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x24, 0x25, 0x27, 0x28, 0x29, + 0x2b, 0x2c, 0x2d, 0x2e, + /* 0xba */ + 0x00, 0x01, 0x02, 0x05, 0x06, 0x07, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, + 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x20, 0x21, 0x22, 0x23, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2d, 0x2e, 0x30, 0x31, 0x34, + 0x36, 0x37, 0x00, 0x01, 0x02, 0x05, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x10, 0x11, + 0x12, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2d, 0x2e, 0x30, + 0x31, 0x32, 0x34, 0x35, + /* 0xbb */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x07, 0x09, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x14, 0x16, 0x17, + 0x18, 0x1a, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x23, + 0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2f, 0x30, 0x32, + 0x33, 0x34, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, + /* 0xbc */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x14, 0x15, 0x17, 0x18, 0x19, 0x1b, + 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x24, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x30, 0x31, 0x33, + 0x34, 0x35, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x09, 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1c, + 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x25, 0x26, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, + /* 0xbd */ + 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x17, 0x18, 0x1a, 0x1b, 0x1c, 0x1e, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x27, 0x29, + 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x32, 0x33, + 0x34, 0x35, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, + /* 0xbe */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x09, 0x0a, 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x22, 0x23, 0x25, 0x26, 0x27, 0x29, 0x2a, 0x2b, + 0x2d, 0x2e, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x07, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x13, 0x14, 0x16, 0x17, 0x1a, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x23, 0x25, 0x27, 0x28, 0x29, + 0x2a, 0x2b, 0x2c, 0x2e, 0x2f, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, + /* 0xbf */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, + 0x08, 0x09, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x14, 0x15, 0x17, 0x18, 0x19, 0x1a, + 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21, 0x22, 0x24, + 0x25, 0x26, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x30, 0x31, 0x33, + /* 0xc0 */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07, 0x08, + 0x09, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x15, 0x18, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x10, 0x11, 0x13, 0x14, 0x15, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x20, 0x22, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2c, 0x2d, 0x2f, 0x30, + 0x31, 0x33, 0x34, 0x35, + /* 0xc1 */ + 0x00, 0x02, 0x03, 0x06, 0x08, 0x0a, 0x0b, 0x0c, + 0x0d, 0x0e, 0x0f, 0x12, 0x13, 0x15, 0x16, 0x17, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x22, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2d, 0x2e, + 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, + /* 0xc2 */ + 0x00, 0x01, 0x03, 0x04, 0x05, 0x07, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x10, 0x12, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1c, 0x1d, 0x1f, 0x20, 0x21, + 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2c, + 0x2e, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x38, + 0x39, 0x3b, 0x00, 0x01, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0c, 0x10, 0x11, 0x12, 0x13, + 0x14, 0x15, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, + 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x34, 0x35, + /* 0xc3 */ + 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x09, + 0x0a, 0x0d, 0x0f, 0x11, 0x12, 0x13, 0x15, 0x16, + 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x20, 0x21, 0x22, + 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, + 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x35, 0x36, + 0x38, 0x39, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0d, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x17, 0x18, 0x1a, + 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x27, 0x29, 0x2b, 0x2c, 0x2d, 0x2e, + 0x2f, 0x30, 0x32, 0x33, + /* 0xc4 */ + 0x00, 0x02, 0x03, 0x04, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0f, 0x11, 0x12, 0x13, + 0x14, 0x15, 0x16, 0x17, 0x18, 0x1b, 0x1c, 0x1e, + 0x1f, 0x20, 0x22, 0x23, 0x24, 0x25, 0x27, 0x28, + 0x2a, 0x2b, 0x2d, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x36, 0x00, 0x01, 0x03, 0x04, 0x05, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, + 0x11, 0x12, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1c, 0x1d, 0x1f, 0x20, 0x21, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x30, 0x31, 0x32, + /* 0xc5 */ + 0x00, 0x01, 0x02, 0x05, 0x06, 0x08, 0x09, 0x0a, + 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x15, + 0x17, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x21, + 0x22, 0x24, 0x25, 0x26, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x2e, 0x30, 0x31, 0x33, 0x35, 0x36, + 0x37, 0x38, 0x00, 0x01, 0x04, 0x05, 0x07, 0x0c, + 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x14, 0x16, 0x18, + 0x19, 0x1a, 0x1c, 0x1d, 0x1f, 0x20, 0x21, 0x23, + 0x24, 0x25, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x30, 0x31, 0x32, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3c, 0x3d, + /* 0xc6 */ + 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0d, 0x0f, 0x11, 0x12, 0x13, 0x14, + 0x15, 0x16, +}; + +static int +uhc_2_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c1 = s[0]; + if ((c1 >= 0xa1 && c1 <= 0xc6)) { + if (n >= 2) { + unsigned char c2 = s[1]; + if ((c2 >= 0x41 && c2 < 0x5b) || (c2 >= 0x61 && c2 < 0x7b) || (c2 >= 0x81 && c2 < 0xa1)) { + unsigned int row = c1 - 0xa1; + unsigned int col = c2 - (c2 >= 0x81 ? 0x4d : c2 >= 0x61 ? 0x47 : 0x41); + unsigned int i = 84 * row + col; + if (i < 3126) { + *pwc = (ucs4_t) (uhc_2_2uni_main_pagea1[2*row+(col>=42?1:0)] + uhc_2_2uni_pagea1[i]); + return 2; + } + } + return RET_ILSEQ; + } + return RET_TOOFEW(0); + } + return RET_ILSEQ; +} + +static const unsigned short uhc_2_2charset_main[49] = { + 0xa141, 0xa18d, 0xa273, 0xa359, 0xa445, 0xa491, 0xa577, 0xa663, + 0xa749, 0xa795, 0xa881, 0xa967, 0xaa4d, 0xaa99, 0xab85, 0xac6b, + 0xad51, 0xad9d, 0xae89, 0xaf6f, 0xb055, 0xb141, 0xb18d, 0xb273, + 0xb359, 0xb445, 0xb491, 0xb577, 0xb663, 0xb749, 0xb795, 0xb881, + 0xb967, 0xba4d, 0xba99, 0xbb85, 0xbc6b, 0xbd51, 0xbd9d, 0xbe89, + 0xbf6f, 0xc055, 0xc141, 0xc18d, 0xc273, 0xc359, 0xc445, 0xc491, + 0xc577, +}; +static const unsigned char uhc_2_2charset[3126] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 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, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0xe8, 0xe9, 0xea, 0xeb, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 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, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 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, 0xea, 0xeb, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 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, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 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, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 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, 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, 0xe8, 0xe9, 0xea, 0xeb, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 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, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 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, 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, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 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, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 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, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0xe8, 0xe9, 0xea, 0xeb, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 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, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 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, 0xea, 0xeb, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 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, 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, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 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, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 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, 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, 0xe8, 0xe9, 0xea, 0xeb, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 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, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 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, 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, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 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, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 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, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0xe8, 0xe9, 0xea, 0xeb, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 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, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, + 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0x00, 0x01, 0x02, 0x03, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, + 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0xca, 0xcb, 0xcc, 0xcd, + 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, +}; + +static const Summary16 uhc_2_uni2indx_pagec8[251] = { + /* 0xc800 */ + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, + { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0xfee0 }, { 10, 0xcfff }, + { 24, 0xeeef }, { 37, 0xfd4f }, { 49, 0xffec }, { 62, 0xcfdf }, + /* 0xc900 */ + { 75, 0x4f8e }, { 84, 0xfefd }, { 98, 0xefff }, { 113, 0xffef }, + { 128, 0xffff }, { 144, 0xfeec }, { 156, 0xeff4 }, { 168, 0xefee }, + { 181, 0xecff }, { 194, 0xd4fe }, { 205, 0xffff }, { 221, 0xffff }, + { 237, 0xfa6c }, { 247, 0xc994 }, { 254, 0x4f6a }, { 263, 0xecfc }, + /* 0xca00 */ + { 274, 0xc4fe }, { 284, 0xfeef }, { 298, 0xfdff }, { 313, 0xffff }, + { 329, 0xcfff }, { 343, 0x4fee }, { 354, 0xfefc }, { 367, 0xdfff }, + { 382, 0xffef }, { 397, 0xfeff }, { 412, 0xffff }, { 428, 0xcfff }, + { 442, 0x4fee }, { 453, 0xfcf5 }, { 465, 0xeffe }, { 479, 0xffef }, + /* 0xcb00 */ + { 494, 0xfeff }, { 509, 0xfeee }, { 522, 0xfffc }, { 536, 0xffff }, + { 552, 0xecfd }, { 564, 0xdcfe }, { 576, 0xffef }, { 591, 0xfcff }, + { 605, 0xffff }, { 621, 0xefff }, { 636, 0xffff }, { 652, 0xfeff }, + { 667, 0xffff }, { 683, 0xffef }, { 698, 0xfd6f }, { 711, 0xffff }, + /* 0xcc00 */ + { 727, 0xcfff }, { 741, 0xcfee }, { 753, 0xac79 }, { 762, 0x84fe }, + { 771, 0xeecf }, { 783, 0xfc4f }, { 794, 0xfeae }, { 806, 0xffde }, + { 820, 0xffff }, { 836, 0xecff }, { 849, 0xc4fe }, { 859, 0xeecf }, + { 871, 0xfd4f }, { 883, 0xffee }, { 897, 0xefef }, { 911, 0xfffe }, + /* 0xcd00 */ + { 926, 0xecfd }, { 938, 0xd4fe }, { 949, 0xeeef }, { 962, 0xfdff }, + { 977, 0xffff }, { 993, 0xefff }, { 1008, 0x4fee }, { 1019, 0xfefd }, + { 1033, 0xfeff }, { 1048, 0xeecf }, { 1060, 0xfd4f }, { 1072, 0xfffe }, + { 1087, 0xefef }, { 1101, 0xfffe }, { 1116, 0xeeff }, { 1130, 0xd4fe }, + /* 0xce00 */ + { 1141, 0xeeef }, { 1154, 0xfdef }, { 1168, 0xfeec }, { 1180, 0xffd4 }, + { 1192, 0xffff }, { 1208, 0x6cff }, { 1220, 0xd4fc }, { 1230, 0xeecf }, + { 1242, 0xfd4f }, { 1254, 0xfeec }, { 1266, 0xcfc4 }, { 1275, 0xffff }, + { 1291, 0xfffd }, { 1306, 0xffff }, { 1322, 0xe6cf }, { 1333, 0xfc4f }, + /* 0xcf00 */ + { 1344, 0xfeec }, { 1356, 0xefd4 }, { 1367, 0x4fee }, { 1378, 0xfefc }, + { 1391, 0xffff }, { 1407, 0xeecf }, { 1419, 0xfd4f }, { 1431, 0xfeec }, + { 1443, 0xefde }, { 1456, 0xffff }, { 1472, 0xfefd }, { 1486, 0xfffe }, + { 1501, 0xffef }, { 1516, 0xffff }, { 1532, 0xfeec }, { 1544, 0xefd4 }, + /* 0xd000 */ + { 1555, 0xffee }, { 1569, 0xfefd }, { 1583, 0xdfff }, { 1598, 0xeecf }, + { 1610, 0xfd4f }, { 1622, 0xfeee }, { 1635, 0xcffe }, { 1648, 0xcfee }, + { 1660, 0xfffd }, { 1675, 0xffff }, { 1691, 0xeecf }, { 1703, 0xfd4f }, + { 1715, 0xfcec }, { 1726, 0xcfc4 }, { 1735, 0x4fee }, { 1746, 0xfefc }, + /* 0xd100 */ + { 1759, 0xdfff }, { 1774, 0xffff }, { 1790, 0xffff }, { 1806, 0xfaec }, + { 1817, 0xcfc4 }, { 1826, 0x4fee }, { 1837, 0xeefd }, { 1850, 0xefff }, + { 1865, 0xfeef }, { 1879, 0xffff }, { 1895, 0xfeec }, { 1907, 0xebd4 }, + { 1917, 0xfffe }, { 1932, 0xfeff }, { 1947, 0xffff }, { 1963, 0xfeef }, + /* 0xd200 */ + { 1977, 0xfd7f }, { 1991, 0xfffe }, { 2006, 0xcfff }, { 2020, 0x4fee }, + { 2031, 0xfefd }, { 2045, 0xefff }, { 2060, 0xffef }, { 2075, 0xffff }, + { 2091, 0xfeec }, { 2103, 0xefdc }, { 2115, 0xefee }, { 2128, 0x6cfd }, + { 2139, 0xf4fa }, { 2150, 0xeeef }, { 2163, 0xffcf }, { 2177, 0xfeec }, + /* 0xd300 */ + { 2189, 0x8fd4 }, { 2198, 0x4fae }, { 2208, 0xecdc }, { 2218, 0xc4fe }, + { 2228, 0xffcf }, { 2242, 0xffff }, { 2258, 0xffff }, { 2274, 0xcfff }, + { 2288, 0x4fee }, { 2299, 0xecfc }, { 2310, 0xd4fe }, { 2321, 0xeeef }, + { 2334, 0xfccf }, { 2346, 0xfefe }, { 2360, 0xcff5 }, { 2372, 0x4fee }, + /* 0xd400 */ + { 2383, 0xfefd }, { 2397, 0xdfff }, { 2412, 0xffff }, { 2428, 0xffff }, + { 2444, 0xffee }, { 2458, 0xefff }, { 2473, 0x5fee }, { 2485, 0x6cff }, + { 2497, 0xd4fa }, { 2507, 0xffef }, { 2522, 0xfdff }, { 2537, 0xffff }, + { 2553, 0xefff }, { 2568, 0x6fee }, { 2580, 0xeeff }, { 2594, 0xd6fe }, + /* 0xd500 */ + { 2606, 0xeeef }, { 2619, 0xff4f }, { 2632, 0xffff }, { 2648, 0xcfff }, + { 2662, 0x4fee }, { 2673, 0xecfd }, { 2685, 0xd4de }, { 2695, 0xeecf }, + { 2707, 0xfc4f }, { 2718, 0xfffe }, { 2733, 0xffdf }, { 2748, 0xffff }, + { 2764, 0xecff }, { 2777, 0xd4fa }, { 2787, 0xeecf }, { 2799, 0xfd4f }, + /* 0xd600 */ + { 2811, 0xfeec }, { 2823, 0xefc4 }, { 2833, 0xdfee }, { 2846, 0xecff }, + { 2859, 0xd4de }, { 2869, 0xeecd }, { 2880, 0xfd7f }, { 2894, 0xffec }, + { 2907, 0xcfd7 }, { 2919, 0x5fee }, { 2931, 0xeefd }, { 2944, 0xf5fe }, + { 2957, 0xeecf }, { 2969, 0xfd6d }, { 2981, 0xfeee }, { 2994, 0xcfde }, + /* 0xd700 */ + { 3006, 0xffee }, { 3020, 0xecfd }, { 3032, 0xd4fe }, { 3043, 0xeecf }, + { 3055, 0xfd6f }, { 3068, 0xfc2c }, { 3077, 0xedd4 }, { 3087, 0xcfee }, + { 3099, 0xecfd }, { 3111, 0xd4fe }, { 3122, 0x000f }, +}; + +static int +uhc_2_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (n >= 2) { + if (wc >= 0xc800 && wc < 0xd7b0) { + const Summary16 *summary = &uhc_2_uni2indx_pagec8[(wc>>4)-0xc80]; + unsigned short used = summary->used; + unsigned int i = wc & 0x0f; + if (used & ((unsigned short) 1 << i)) { + unsigned short c; + /* Keep in 'used' only the bits 0..i-1. */ + used &= ((unsigned short) 1 << i) - 1; + /* Add 'summary->indx' and the number of bits set in 'used'. */ + used = (used & 0x5555) + ((used & 0xaaaa) >> 1); + used = (used & 0x3333) + ((used & 0xcccc) >> 2); + used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); + used = (used & 0x00ff) + (used >> 8); + used += summary->indx; + c = uhc_2_2charset_main[used>>6] + uhc_2_2charset[used]; + r[0] = (c >> 8); r[1] = (c & 0xff); + return 2; + } + } + return RET_ILUNI; + } + return RET_TOOSMALL; +} diff --git a/jni/parted/libiconv/lib/utf16.h b/jni/parted/libiconv/lib/utf16.h new file mode 100755 index 0000000..463c7ab --- /dev/null +++ b/jni/parted/libiconv/lib/utf16.h @@ -0,0 +1,112 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UTF-16 + */ + +/* Specification: RFC 2781 */ + +/* Here we accept FFFE/FEFF marks as endianness indicators everywhere + in the stream, not just at the beginning. (This is contrary to what + RFC 2781 section 3.2 specifies, but it allows concatenation of byte + sequences to work flawlessly, while disagreeing with the RFC behaviour + only for strings containing U+FEFF characters, which is quite rare.) + The default is big-endian. */ +/* The state is 0 if big-endian, 1 if little-endian. */ +static int +utf16_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + int count = 0; + for (; n >= 2 && count <= RET_COUNT_MAX && count <= INT_MAX-2;) { + ucs4_t wc = (state ? s[0] + (s[1] << 8) : (s[0] << 8) + s[1]); + if (wc == 0xfeff) { + } else if (wc == 0xfffe) { + state ^= 1; + } else if (wc >= 0xd800 && wc < 0xdc00) { + if (n >= 4) { + ucs4_t wc2 = (state ? s[2] + (s[3] << 8) : (s[2] << 8) + s[3]); + if (!(wc2 >= 0xdc00 && wc2 < 0xe000)) + goto ilseq; + *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00); + conv->istate = state; + return count+4; + } else + break; + } else if (wc >= 0xdc00 && wc < 0xe000) { + goto ilseq; + } else { + *pwc = wc; + conv->istate = state; + return count+2; + } + s += 2; n -= 2; count += 2; + } + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +/* We output UTF-16 in big-endian order, with byte-order mark. + See RFC 2781 section 3.3 for a rationale: Some document formats + mandate a BOM; the file concatenation issue is not so severe as + long as the above utf16_mbtowc function is used. */ +/* The state is 0 at the beginning, 1 after the BOM has been written. */ +static int +utf16_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc != 0xfffe && !(wc >= 0xd800 && wc < 0xe000)) { + int count = 0; + if (!conv->ostate) { + if (n >= 2) { + r[0] = 0xFE; + r[1] = 0xFF; + r += 2; n -= 2; count += 2; + } else + return RET_TOOSMALL; + } + if (wc < 0x10000) { + if (n >= 2) { + r[0] = (unsigned char) (wc >> 8); + r[1] = (unsigned char) wc; + conv->ostate = 1; + return count+2; + } else + return RET_TOOSMALL; + } + else if (wc < 0x110000) { + if (n >= 4) { + ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10); + ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff); + r[0] = (unsigned char) (wc1 >> 8); + r[1] = (unsigned char) wc1; + r[2] = (unsigned char) (wc2 >> 8); + r[3] = (unsigned char) wc2; + conv->ostate = 1; + return count+4; + } else + return RET_TOOSMALL; + } + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/utf16be.h b/jni/parted/libiconv/lib/utf16be.h new file mode 100755 index 0000000..2cfab52 --- /dev/null +++ b/jni/parted/libiconv/lib/utf16be.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UTF-16BE + */ + +/* Specification: RFC 2781 */ + +static int +utf16be_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + int count = 0; + if (n >= 2) { + ucs4_t wc = (s[0] << 8) + s[1]; + if (wc >= 0xd800 && wc < 0xdc00) { + if (n >= 4) { + ucs4_t wc2 = (s[2] << 8) + s[3]; + if (!(wc2 >= 0xdc00 && wc2 < 0xe000)) + goto ilseq; + *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00); + return count+4; + } + } else if (wc >= 0xdc00 && wc < 0xe000) { + goto ilseq; + } else { + *pwc = wc; + return count+2; + } + } + return RET_TOOFEW(count); + +ilseq: + return RET_SHIFT_ILSEQ(count); +} + +static int +utf16be_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (!(wc >= 0xd800 && wc < 0xe000)) { + if (wc < 0x10000) { + if (n >= 2) { + r[0] = (unsigned char) (wc >> 8); + r[1] = (unsigned char) wc; + return 2; + } else + return RET_TOOSMALL; + } + else if (wc < 0x110000) { + if (n >= 4) { + ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10); + ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff); + r[0] = (unsigned char) (wc1 >> 8); + r[1] = (unsigned char) wc1; + r[2] = (unsigned char) (wc2 >> 8); + r[3] = (unsigned char) wc2; + return 4; + } else + return RET_TOOSMALL; + } + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/utf16le.h b/jni/parted/libiconv/lib/utf16le.h new file mode 100755 index 0000000..97e94bc --- /dev/null +++ b/jni/parted/libiconv/lib/utf16le.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UTF-16LE + */ + +/* Specification: RFC 2781 */ + +static int +utf16le_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + int count = 0; + if (n >= 2) { + ucs4_t wc = s[0] + (s[1] << 8); + if (wc >= 0xd800 && wc < 0xdc00) { + if (n >= 4) { + ucs4_t wc2 = s[2] + (s[3] << 8); + if (!(wc2 >= 0xdc00 && wc2 < 0xe000)) + goto ilseq; + *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00); + return count+4; + } + } else if (wc >= 0xdc00 && wc < 0xe000) { + goto ilseq; + } else { + *pwc = wc; + return count+2; + } + } + return RET_TOOFEW(count); + +ilseq: + return RET_SHIFT_ILSEQ(count); +} + +static int +utf16le_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (!(wc >= 0xd800 && wc < 0xe000)) { + if (wc < 0x10000) { + if (n >= 2) { + r[0] = (unsigned char) wc; + r[1] = (unsigned char) (wc >> 8); + return 2; + } else + return RET_TOOSMALL; + } + else if (wc < 0x110000) { + if (n >= 4) { + ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10); + ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff); + r[0] = (unsigned char) wc1; + r[1] = (unsigned char) (wc1 >> 8); + r[2] = (unsigned char) wc2; + r[3] = (unsigned char) (wc2 >> 8); + return 4; + } else + return RET_TOOSMALL; + } + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/utf32.h b/jni/parted/libiconv/lib/utf32.h new file mode 100755 index 0000000..9ed5454 --- /dev/null +++ b/jni/parted/libiconv/lib/utf32.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 1999-2001, 2008, 2011, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UTF-32 + */ + +/* Specification: Unicode 3.1 Standard Annex #19 */ + +/* Here we accept FFFE0000/0000FEFF marks as endianness indicators + everywhere in the stream, not just at the beginning. (This is contrary + to what #19 D36c specifies, but it allows concatenation of byte + sequences to work flawlessly, while disagreeing with #19 behaviour + only for strings containing U+FEFF characters, which is quite rare.) + The default is big-endian. */ +/* The state is 0 if big-endian, 1 if little-endian. */ +static int +utf32_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + int count = 0; + for (; n >= 4 && count <= RET_COUNT_MAX && count <= INT_MAX-4;) { + ucs4_t wc = (state + ? s[0] + (s[1] << 8) + (s[2] << 16) + (s[3] << 24) + : (s[0] << 24) + (s[1] << 16) + (s[2] << 8) + s[3]); + if (wc == 0x0000feff) { + } else if (wc == 0xfffe0000u) { + state ^= 1; + } else { + if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { + *pwc = wc; + conv->istate = state; + return count+4; + } else { + conv->istate = state; + return RET_SHIFT_ILSEQ(count); + } + } + s += 4; n -= 4; count += 4; + } + conv->istate = state; + return RET_TOOFEW(count); +} + +/* We output UTF-32 in big-endian order, with byte-order mark. */ +/* The state is 0 at the beginning, 1 after the BOM has been written. */ +static int +utf32_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { + int count = 0; + if (!conv->ostate) { + if (n >= 4) { + r[0] = 0x00; + r[1] = 0x00; + r[2] = 0xFE; + r[3] = 0xFF; + r += 4; n -= 4; count += 4; + } else + return RET_TOOSMALL; + } + if (wc < 0x110000) { + if (n >= 4) { + r[0] = 0; + r[1] = (unsigned char) (wc >> 16); + r[2] = (unsigned char) (wc >> 8); + r[3] = (unsigned char) wc; + conv->ostate = 1; + return count+4; + } else + return RET_TOOSMALL; + } + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/utf32be.h b/jni/parted/libiconv/lib/utf32be.h new file mode 100755 index 0000000..1d33772 --- /dev/null +++ b/jni/parted/libiconv/lib/utf32be.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UTF-32BE + */ + +/* Specification: Unicode 3.1 Standard Annex #19 */ + +static int +utf32be_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + if (n >= 4) { + ucs4_t wc = (s[0] << 24) + (s[1] << 16) + (s[2] << 8) + s[3]; + if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { + *pwc = wc; + return 4; + } else + return RET_ILSEQ; + } + return RET_TOOFEW(0); +} + +static int +utf32be_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { + if (n >= 4) { + r[0] = 0; + r[1] = (unsigned char) (wc >> 16); + r[2] = (unsigned char) (wc >> 8); + r[3] = (unsigned char) wc; + return 4; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/utf32le.h b/jni/parted/libiconv/lib/utf32le.h new file mode 100755 index 0000000..41cf550 --- /dev/null +++ b/jni/parted/libiconv/lib/utf32le.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UTF-32LE + */ + +/* Specification: Unicode 3.1 Standard Annex #19 */ + +static int +utf32le_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + if (n >= 4) { + ucs4_t wc = s[0] + (s[1] << 8) + (s[2] << 16) + (s[3] << 24); + if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { + *pwc = wc; + return 4; + } else + return RET_ILSEQ; + } + return RET_TOOFEW(0); +} + +static int +utf32le_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { + if (n >= 4) { + r[0] = (unsigned char) wc; + r[1] = (unsigned char) (wc >> 8); + r[2] = (unsigned char) (wc >> 16); + r[3] = 0; + return 4; + } else + return RET_TOOSMALL; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/lib/utf7.h b/jni/parted/libiconv/lib/utf7.h new file mode 100755 index 0000000..6f237ed --- /dev/null +++ b/jni/parted/libiconv/lib/utf7.h @@ -0,0 +1,354 @@ +/* + * Copyright (C) 1999-2001, 2008, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UTF-7 + */ + +/* Specification: RFC 2152 (and old RFC 1641, RFC 1642) */ +/* The original Base64 encoding is defined in RFC 2045. */ + +/* Set of direct characters: + * A-Z a-z 0-9 ' ( ) , - . / : ? space tab lf cr + */ +static const unsigned char direct_tab[128/8] = { + 0x00, 0x26, 0x00, 0x00, 0x81, 0xf3, 0xff, 0x87, + 0xfe, 0xff, 0xff, 0x07, 0xfe, 0xff, 0xff, 0x07, +}; +#define isdirect(ch) ((ch) < 128 && ((direct_tab[(ch)>>3] >> (ch & 7)) & 1)) + +/* Set of direct and optional direct characters: + * A-Z a-z 0-9 ' ( ) , - . / : ? space tab lf cr + * ! " # $ % & * ; < = > @ [ ] ^ _ ` { | } + */ +static const unsigned char xdirect_tab[128/8] = { + 0x00, 0x26, 0x00, 0x00, 0xff, 0xf7, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x3f, +}; +#define isxdirect(ch) ((ch) < 128 && ((xdirect_tab[(ch)>>3] >> (ch & 7)) & 1)) + +/* Set of base64 characters, extended: + * A-Z a-z 0-9 + / - + */ +static const unsigned char xbase64_tab[128/8] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0xff, 0x03, + 0xfe, 0xff, 0xff, 0x07, 0xfe, 0xff, 0xff, 0x07, +}; +#define isxbase64(ch) ((ch) < 128 && ((xbase64_tab[(ch)>>3] >> (ch & 7)) & 1)) + +/* + * The state is structured as follows: + * bit 1..0: shift + * bit 7..2: data + * Precise meaning: + * shift data + * 0 0 not inside base64 encoding + * 1 0 inside base64, no pending bits + * 2 XXXX00 inside base64, 4 bits remain from 2nd byte + * 3 XX0000 inside base64, 2 bits remain from 3rd byte + */ + +static int +utf7_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + state_t state = conv->istate; + int count = 0; /* number of input bytes already read */ + if (state & 3) + goto active; + else + goto inactive; + +inactive: + { + /* Here (state & 3) == 0 */ + if (n < count+1) + goto none; + { + unsigned char c = *s; + if (isxdirect(c)) { + *pwc = (ucs4_t) c; + conv->istate = state; + return count+1; + } + if (c == '+') { + if (n < count+2) + goto none; + if (s[1] == '-') { + *pwc = (ucs4_t) '+'; + conv->istate = state; + return count+2; + } + s++; count++; + state = 1; + goto active; + } + goto ilseq; + } + } + +active: + { + /* base64 encoding active */ + unsigned int wc = 0; + state_t base64state = state; + unsigned int kmax = 2; /* number of payload bytes to read */ + unsigned int k = 0; /* number of payload bytes already read */ + unsigned int base64count = 0; /* number of base64 bytes already read */ + for (;;) { + unsigned char c = *s; + unsigned int i; + if (c >= 'A' && c <= 'Z') + i = c-'A'; + else if (c >= 'a' && c <= 'z') + i = c-'a'+26; + else if (c >= '0' && c <= '9') + i = c-'0'+52; + else if (c == '+') + i = 62; + else if (c == '/') + i = 63; + else { + /* c terminates base64 encoding */ + if (base64state & -4) + goto ilseq; /* data must be 0, otherwise illegal */ + if (base64count) + goto ilseq; /* partial UTF-16 characters are invalid */ + if (c == '-') { + s++; count++; + } + state = 0; + goto inactive; + } + s++; base64count++; + /* read 6 bits: 0 <= i < 64 */ + switch (base64state & 3) { + case 1: /* inside base64, no pending bits */ + base64state = (i << 2) | 0; break; + case 0: /* inside base64, 6 bits remain from 1st byte */ + wc = (wc << 8) | (base64state & -4) | (i >> 4); k++; + base64state = ((i & 15) << 4) | 2; break; + case 2: /* inside base64, 4 bits remain from 2nd byte */ + wc = (wc << 8) | (base64state & -4) | (i >> 2); k++; + base64state = ((i & 3) << 6) | 3; break; + case 3: /* inside base64, 2 bits remain from 3rd byte */ + wc = (wc << 8) | (base64state & -4) | i; k++; + base64state = 1; break; + } + if (k == kmax) { + /* UTF-16: When we see a High Surrogate, we must also decode + the following Low Surrogate. */ + if (kmax == 2 && (wc >= 0xd800 && wc < 0xdc00)) + kmax = 4; + else + break; + } + if (n < count+base64count+1) + goto none; + } + /* Here k = kmax > 0, hence base64count > 0. */ + if ((base64state & 3) == 0) abort(); + if (kmax == 4) { + ucs4_t wc1 = wc >> 16; + ucs4_t wc2 = wc & 0xffff; + if (!(wc1 >= 0xd800 && wc1 < 0xdc00)) abort(); + if (!(wc2 >= 0xdc00 && wc2 < 0xe000)) goto ilseq; + *pwc = 0x10000 + ((wc1 - 0xd800) << 10) + (wc2 - 0xdc00); + } else { + *pwc = wc; + } + conv->istate = base64state; + return count+base64count; + } + +none: + conv->istate = state; + return RET_TOOFEW(count); + +ilseq: + conv->istate = state; + return RET_SHIFT_ILSEQ(count); +} + +/* + * The state is structured as follows: + * bit 1..0: shift + * bit 7..2: data + * Precise meaning: + * shift data + * 0 0 not inside base64 encoding + * 1 0 inside base64, no pending bits + * 2 XX00 inside base64, 2 bits known for 2nd byte + * 3 XXXX inside base64, 4 bits known for 3rd byte + */ + +/* Define this to 1 if you want the so-called "optional direct" characters + ! " # $ % & * ; < = > @ [ ] ^ _ ` { | } + to be encoded. Define to 0 if you want them to be passed straight through, + like the so-called "direct" characters. + We set this to 1 because it's safer. + */ +#define UTF7_ENCODE_OPTIONAL_CHARS 1 + +static int +utf7_wctomb (conv_t conv, unsigned char *r, ucs4_t iwc, size_t n) +{ + state_t state = conv->ostate; + unsigned int wc = iwc; + int count = 0; + if (state & 3) + goto active; + +/*inactive:*/ + { + if (UTF7_ENCODE_OPTIONAL_CHARS ? isdirect(wc) : isxdirect(wc)) { + r[0] = (unsigned char) wc; + /*conv->ostate = state;*/ + return 1; + } else { + *r++ = '+'; + if (wc == '+') { + if (n < 2) + return RET_TOOSMALL; + *r = '-'; + /*conv->ostate = state;*/ + return 2; + } + count = 1; + state = 1; + goto active; + } + } + +active: + { + /* base64 encoding active */ + if (UTF7_ENCODE_OPTIONAL_CHARS ? isdirect(wc) : isxdirect(wc)) { + /* deactivate base64 encoding */ + count += ((state & 3) >= 2 ? 1 : 0) + (isxbase64(wc) ? 1 : 0) + 1; + if (n < count) + return RET_TOOSMALL; + if ((state & 3) >= 2) { + unsigned int i = state & -4; + unsigned char c; + if (i < 26) + c = i+'A'; + else if (i < 52) + c = i-26+'a'; + else if (i < 62) + c = i-52+'0'; + else if (i == 62) + c = '+'; + else if (i == 63) + c = '/'; + else + abort(); + *r++ = c; + } + if (isxbase64(wc)) + *r++ = '-'; + state = 0; + *r++ = (unsigned char) wc; + conv->ostate = state; + return count; + } else { + unsigned int k; /* number of payload bytes to write */ + if (wc < 0x10000) { + k = 2; + count += ((state & 3) >= 2 ? 3 : 2); + } else if (wc < 0x110000) { + unsigned int wc1 = 0xd800 + ((wc - 0x10000) >> 10); + unsigned int wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff); + wc = (wc1 << 16) | wc2; + k = 4; + count += ((state & 3) >= 3 ? 6 : 5); + } else + return RET_ILUNI; + if (n < count) + return RET_TOOSMALL; + for (;;) { + unsigned int i; + unsigned char c; + switch (state & 3) { + case 0: /* inside base64, 6 bits known for 4th byte */ + c = (state & -4) >> 2; state = 1; break; + case 1: /* inside base64, no pending bits */ + i = (wc >> (8 * --k)) & 0xff; + c = i >> 2; state = ((i & 3) << 4) | 2; break; + case 2: /* inside base64, 2 bits known for 2nd byte */ + i = (wc >> (8 * --k)) & 0xff; + c = (state & -4) | (i >> 4); state = ((i & 15) << 2) | 3; break; + case 3: /* inside base64, 4 bits known for 3rd byte */ + i = (wc >> (8 * --k)) & 0xff; + c = (state & -4) | (i >> 6); state = ((i & 63) << 2) | 0; break; + default: abort(); /* stupid gcc */ + } + if (c < 26) + c = c+'A'; + else if (c < 52) + c = c-26+'a'; + else if (c < 62) + c = c-52+'0'; + else if (c == 62) + c = '+'; + else if (c == 63) + c = '/'; + else + abort(); + *r++ = c; + if ((state & 3) && (k == 0)) + break; + } + conv->ostate = state; + return count; + } + } +} + +static int +utf7_reset (conv_t conv, unsigned char *r, size_t n) +{ + state_t state = conv->ostate; + if (state & 3) { + /* deactivate base64 encoding */ + unsigned int count = ((state & 3) >= 2 ? 1 : 0) + 1; + if (n < count) + return RET_TOOSMALL; + if ((state & 3) >= 2) { + unsigned int i = state & -4; + unsigned char c; + if (i < 26) + c = i+'A'; + else if (i < 52) + c = i-26+'a'; + else if (i < 62) + c = i-52+'0'; + else if (i == 62) + c = '+'; + else if (i == 63) + c = '/'; + else + abort(); + *r++ = c; + } + *r++ = '-'; + /* conv->ostate = 0; will be done by the caller */ + return count; + } else + return 0; +} diff --git a/jni/parted/libiconv/lib/utf8.h b/jni/parted/libiconv/lib/utf8.h new file mode 100755 index 0000000..43727ea --- /dev/null +++ b/jni/parted/libiconv/lib/utf8.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 1999-2001, 2004, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * UTF-8 + */ + +/* Specification: RFC 3629 */ + +static int +utf8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = s[0]; + + if (c < 0x80) { + *pwc = c; + return 1; + } else if (c < 0xc2) { + return RET_ILSEQ; + } else if (c < 0xe0) { + if (n < 2) + return RET_TOOFEW(0); + if (!((s[1] ^ 0x80) < 0x40)) + return RET_ILSEQ; + *pwc = ((ucs4_t) (c & 0x1f) << 6) + | (ucs4_t) (s[1] ^ 0x80); + return 2; + } else if (c < 0xf0) { + if (n < 3) + return RET_TOOFEW(0); + if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0))) + return RET_ILSEQ; + *pwc = ((ucs4_t) (c & 0x0f) << 12) + | ((ucs4_t) (s[1] ^ 0x80) << 6) + | (ucs4_t) (s[2] ^ 0x80); + return 3; + } else if (c < 0xf8 && sizeof(ucs4_t)*8 >= 32) { + if (n < 4) + return RET_TOOFEW(0); + if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)))) + return RET_ILSEQ; + *pwc = ((ucs4_t) (c & 0x07) << 18) + | ((ucs4_t) (s[1] ^ 0x80) << 12) + | ((ucs4_t) (s[2] ^ 0x80) << 6) + | (ucs4_t) (s[3] ^ 0x80); + return 4; + } else + return RET_ILSEQ; +} + +static int +utf8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) /* n == 0 is acceptable */ +{ + int count; + if (wc < 0x80) + count = 1; + else if (wc < 0x800) + count = 2; + else if (wc < 0x10000) { + if (wc < 0xd800 || wc >= 0xe000) + count = 3; + else + return RET_ILUNI; + } else if (wc < 0x110000) + count = 4; + else + return RET_ILUNI; + if (n < count) + return RET_TOOSMALL; + switch (count) { /* note: code falls through cases! */ + case 4: r[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000; + case 3: r[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800; + case 2: r[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0; + case 1: r[0] = wc; + } + return count; +} diff --git a/jni/parted/libiconv/lib/vietcomb.h b/jni/parted/libiconv/lib/vietcomb.h new file mode 100755 index 0000000..ed06d9d --- /dev/null +++ b/jni/parted/libiconv/lib/vietcomb.h @@ -0,0 +1,465 @@ +/* + * Copyright (C) 2001, 2004, 2011 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* Combining characters used in Vietnamese encodings CP1258, TCVN. */ + +#ifndef _VIETCOMB_H +#define _VIETCOMB_H + +/* Relevant combining characters: + 0x0300, 0x0301, 0x0303, 0x0309, 0x0323. */ + +/* Composition tables for each of the relevant combining characters. */ +static const struct { unsigned short base; unsigned short composed; } viet_comp_table_data[] = { +#define viet_comp_table0300_idx 0 +#define viet_comp_table0300_len 31 + { 0x0041, 0x00C0 }, + { 0x0045, 0x00C8 }, + { 0x0049, 0x00CC }, + { 0x004E, 0x01F8 }, + { 0x004F, 0x00D2 }, + { 0x0055, 0x00D9 }, + { 0x0057, 0x1E80 }, + { 0x0059, 0x1EF2 }, + { 0x0061, 0x00E0 }, + { 0x0065, 0x00E8 }, + { 0x0069, 0x00EC }, + { 0x006E, 0x01F9 }, + { 0x006F, 0x00F2 }, + { 0x0075, 0x00F9 }, + { 0x0077, 0x1E81 }, + { 0x0079, 0x1EF3 }, + { 0x00A8, 0x1FED }, + { 0x00C2, 0x1EA6 }, + { 0x00CA, 0x1EC0 }, + { 0x00D4, 0x1ED2 }, + { 0x00DC, 0x01DB }, + { 0x00E2, 0x1EA7 }, + { 0x00EA, 0x1EC1 }, + { 0x00F4, 0x1ED3 }, + { 0x00FC, 0x01DC }, + { 0x0102, 0x1EB0 }, + { 0x0103, 0x1EB1 }, +/*{ 0x0112, 0x1E14 },*/ +/*{ 0x0113, 0x1E15 },*/ +/*{ 0x014C, 0x1E50 },*/ +/*{ 0x014D, 0x1E51 },*/ + { 0x01A0, 0x1EDC }, + { 0x01A1, 0x1EDD }, + { 0x01AF, 0x1EEA }, + { 0x01B0, 0x1EEB }, +#define viet_comp_table0301_idx (viet_comp_table0300_idx+viet_comp_table0300_len) +#define viet_comp_table0301_len 63 + { 0x0041, 0x00C1 }, + { 0x0043, 0x0106 }, + { 0x0045, 0x00C9 }, + { 0x0047, 0x01F4 }, + { 0x0049, 0x00CD }, + { 0x004B, 0x1E30 }, + { 0x004C, 0x0139 }, + { 0x004D, 0x1E3E }, + { 0x004E, 0x0143 }, + { 0x004F, 0x00D3 }, + { 0x0050, 0x1E54 }, + { 0x0052, 0x0154 }, + { 0x0053, 0x015A }, + { 0x0055, 0x00DA }, + { 0x0057, 0x1E82 }, + { 0x0059, 0x00DD }, + { 0x005A, 0x0179 }, + { 0x0061, 0x00E1 }, + { 0x0063, 0x0107 }, + { 0x0065, 0x00E9 }, + { 0x0067, 0x01F5 }, + { 0x0069, 0x00ED }, + { 0x006B, 0x1E31 }, + { 0x006C, 0x013A }, + { 0x006D, 0x1E3F }, + { 0x006E, 0x0144 }, + { 0x006F, 0x00F3 }, + { 0x0070, 0x1E55 }, + { 0x0072, 0x0155 }, + { 0x0073, 0x015B }, + { 0x0075, 0x00FA }, + { 0x0077, 0x1E83 }, + { 0x0079, 0x00FD }, + { 0x007A, 0x017A }, + { 0x00A8, 0x0385 }, /* prefer U+0385 over U+1FEE */ + { 0x00C2, 0x1EA4 }, + { 0x00C5, 0x01FA }, + { 0x00C6, 0x01FC }, + { 0x00C7, 0x1E08 }, + { 0x00CA, 0x1EBE }, + { 0x00CF, 0x1E2E }, + { 0x00D4, 0x1ED0 }, + { 0x00D5, 0x1E4C }, + { 0x00D8, 0x01FE }, + { 0x00DC, 0x01D7 }, + { 0x00E2, 0x1EA5 }, + { 0x00E5, 0x01FB }, + { 0x00E6, 0x01FD }, + { 0x00E7, 0x1E09 }, + { 0x00EA, 0x1EBF }, + { 0x00EF, 0x1E2F }, + { 0x00F4, 0x1ED1 }, + { 0x00F5, 0x1E4D }, + { 0x00F8, 0x01FF }, + { 0x00FC, 0x01D8 }, + { 0x0102, 0x1EAE }, + { 0x0103, 0x1EAF }, +/*{ 0x0112, 0x1E16 },*/ +/*{ 0x0113, 0x1E17 },*/ +/*{ 0x014C, 0x1E52 },*/ +/*{ 0x014D, 0x1E53 },*/ + { 0x0168, 0x1E78 }, + { 0x0169, 0x1E79 }, + { 0x01A0, 0x1EDA }, + { 0x01A1, 0x1EDB }, + { 0x01AF, 0x1EE8 }, + { 0x01B0, 0x1EE9 }, +#define viet_comp_table0303_idx (viet_comp_table0301_idx+viet_comp_table0301_len) +#define viet_comp_table0303_len 34 + { 0x0041, 0x00C3 }, + { 0x0045, 0x1EBC }, + { 0x0049, 0x0128 }, + { 0x004E, 0x00D1 }, + { 0x004F, 0x00D5 }, + { 0x0055, 0x0168 }, + { 0x0056, 0x1E7C }, + { 0x0059, 0x1EF8 }, + { 0x0061, 0x00E3 }, + { 0x0065, 0x1EBD }, + { 0x0069, 0x0129 }, + { 0x006E, 0x00F1 }, + { 0x006F, 0x00F5 }, + { 0x0075, 0x0169 }, + { 0x0076, 0x1E7D }, + { 0x0079, 0x1EF9 }, + { 0x00C2, 0x1EAA }, + { 0x00CA, 0x1EC4 }, + { 0x00D3, 0x1E4C }, + { 0x00D4, 0x1ED6 }, + { 0x00D6, 0x1E4E }, + { 0x00DA, 0x1E78 }, + { 0x00E2, 0x1EAB }, + { 0x00EA, 0x1EC5 }, + { 0x00F3, 0x1E4D }, + { 0x00F4, 0x1ED7 }, + { 0x00F6, 0x1E4F }, + { 0x00FA, 0x1E79 }, + { 0x0102, 0x1EB4 }, + { 0x0103, 0x1EB5 }, + { 0x01A0, 0x1EE0 }, + { 0x01A1, 0x1EE1 }, + { 0x01AF, 0x1EEE }, + { 0x01B0, 0x1EEF }, +#define viet_comp_table0309_idx (viet_comp_table0303_idx+viet_comp_table0303_len) +#define viet_comp_table0309_len 24 + { 0x0041, 0x1EA2 }, + { 0x0045, 0x1EBA }, + { 0x0049, 0x1EC8 }, + { 0x004F, 0x1ECE }, + { 0x0055, 0x1EE6 }, + { 0x0059, 0x1EF6 }, + { 0x0061, 0x1EA3 }, + { 0x0065, 0x1EBB }, + { 0x0069, 0x1EC9 }, + { 0x006F, 0x1ECF }, + { 0x0075, 0x1EE7 }, + { 0x0079, 0x1EF7 }, + { 0x00C2, 0x1EA8 }, + { 0x00CA, 0x1EC2 }, + { 0x00D4, 0x1ED4 }, + { 0x00E2, 0x1EA9 }, + { 0x00EA, 0x1EC3 }, + { 0x00F4, 0x1ED5 }, + { 0x0102, 0x1EB2 }, + { 0x0103, 0x1EB3 }, + { 0x01A0, 0x1EDE }, + { 0x01A1, 0x1EDF }, + { 0x01AF, 0x1EEC }, + { 0x01B0, 0x1EED }, +#define viet_comp_table0323_idx (viet_comp_table0309_idx+viet_comp_table0309_len) +#define viet_comp_table0323_len 50 + { 0x0041, 0x1EA0 }, + { 0x0042, 0x1E04 }, + { 0x0044, 0x1E0C }, + { 0x0045, 0x1EB8 }, + { 0x0048, 0x1E24 }, + { 0x0049, 0x1ECA }, + { 0x004B, 0x1E32 }, + { 0x004C, 0x1E36 }, + { 0x004D, 0x1E42 }, + { 0x004E, 0x1E46 }, + { 0x004F, 0x1ECC }, + { 0x0052, 0x1E5A }, + { 0x0053, 0x1E62 }, + { 0x0054, 0x1E6C }, + { 0x0055, 0x1EE4 }, + { 0x0056, 0x1E7E }, + { 0x0057, 0x1E88 }, + { 0x0059, 0x1EF4 }, + { 0x005A, 0x1E92 }, + { 0x0061, 0x1EA1 }, + { 0x0062, 0x1E05 }, + { 0x0064, 0x1E0D }, + { 0x0065, 0x1EB9 }, + { 0x0068, 0x1E25 }, + { 0x0069, 0x1ECB }, + { 0x006B, 0x1E33 }, + { 0x006C, 0x1E37 }, + { 0x006D, 0x1E43 }, + { 0x006E, 0x1E47 }, + { 0x006F, 0x1ECD }, + { 0x0072, 0x1E5B }, + { 0x0073, 0x1E63 }, + { 0x0074, 0x1E6D }, + { 0x0075, 0x1EE5 }, + { 0x0076, 0x1E7F }, + { 0x0077, 0x1E89 }, + { 0x0079, 0x1EF5 }, + { 0x007A, 0x1E93 }, + { 0x00C2, 0x1EAC }, + { 0x00CA, 0x1EC6 }, + { 0x00D4, 0x1ED8 }, + { 0x00E2, 0x1EAD }, + { 0x00EA, 0x1EC7 }, + { 0x00F4, 0x1ED9 }, + { 0x0102, 0x1EB6 }, + { 0x0103, 0x1EB7 }, + { 0x01A0, 0x1EE2 }, + { 0x01A1, 0x1EE3 }, + { 0x01AF, 0x1EF0 }, + { 0x01B0, 0x1EF1 }, +}; +static const struct { unsigned int len; unsigned int idx; } viet_comp_table[] = { + { viet_comp_table0300_len, viet_comp_table0300_idx }, + { viet_comp_table0301_len, viet_comp_table0301_idx }, + { viet_comp_table0303_len, viet_comp_table0303_idx }, + { viet_comp_table0309_len, viet_comp_table0309_idx }, + { viet_comp_table0323_len, viet_comp_table0323_idx }, +}; + +/* Decomposition table for the relevant Unicode characters. */ +struct viet_decomp { unsigned short composed; unsigned int base : 12; int comb1 : 4; }; +static const struct viet_decomp viet_decomp_table[] = { + { 0x00B4, 0x0020, 1 }, /* compatibility decomposition - for TCVN only */ + { 0x00C0, 0x0041, 0 }, + { 0x00C1, 0x0041, 1 }, + { 0x00C3, 0x0041, 2 }, + { 0x00C8, 0x0045, 0 }, + { 0x00C9, 0x0045, 1 }, + { 0x00CC, 0x0049, 0 }, + { 0x00CD, 0x0049, 1 }, + { 0x00D1, 0x004E, 2 }, + { 0x00D2, 0x004F, 0 }, + { 0x00D3, 0x004F, 1 }, + { 0x00D5, 0x004F, 2 }, + { 0x00D9, 0x0055, 0 }, + { 0x00DA, 0x0055, 1 }, + { 0x00DD, 0x0059, 1 }, + { 0x00E0, 0x0061, 0 }, + { 0x00E1, 0x0061, 1 }, + { 0x00E3, 0x0061, 2 }, + { 0x00E8, 0x0065, 0 }, + { 0x00E9, 0x0065, 1 }, + { 0x00EC, 0x0069, 0 }, + { 0x00ED, 0x0069, 1 }, + { 0x00F1, 0x006E, 2 }, + { 0x00F2, 0x006F, 0 }, + { 0x00F3, 0x006F, 1 }, + { 0x00F5, 0x006F, 2 }, + { 0x00F9, 0x0075, 0 }, + { 0x00FA, 0x0075, 1 }, + { 0x00FD, 0x0079, 1 }, + { 0x0106, 0x0043, 1 }, + { 0x0107, 0x0063, 1 }, + { 0x0128, 0x0049, 2 }, + { 0x0129, 0x0069, 2 }, + { 0x0139, 0x004C, 1 }, + { 0x013A, 0x006C, 1 }, + { 0x0143, 0x004E, 1 }, + { 0x0144, 0x006E, 1 }, + { 0x0154, 0x0052, 1 }, + { 0x0155, 0x0072, 1 }, + { 0x015A, 0x0053, 1 }, + { 0x015B, 0x0073, 1 }, + { 0x0168, 0x0055, 2 }, + { 0x0169, 0x0075, 2 }, + { 0x0179, 0x005A, 1 }, + { 0x017A, 0x007A, 1 }, + { 0x01D7, 0x00DC, 1 }, + { 0x01D8, 0x00FC, 1 }, + { 0x01DB, 0x00DC, 0 }, + { 0x01DC, 0x00FC, 0 }, + { 0x01F4, 0x0047, 1 }, + { 0x01F5, 0x0067, 1 }, + { 0x01F8, 0x004E, 0 }, + { 0x01F9, 0x006E, 0 }, + { 0x01FA, 0x00C5, 1 }, + { 0x01FB, 0x00E5, 1 }, + { 0x01FC, 0x00C6, 1 }, + { 0x01FD, 0x00E6, 1 }, + { 0x01FE, 0x00D8, 1 }, + { 0x01FF, 0x00F8, 1 }, + { 0x02DC, 0x0020, 2 }, /* compatibility decomposition - for TCVN only */ + { 0x0385, 0x00A8, 1 }, + { 0x1E04, 0x0042, 4 }, + { 0x1E05, 0x0062, 4 }, + { 0x1E08, 0x00C7, 1 }, + { 0x1E09, 0x00E7, 1 }, + { 0x1E0C, 0x0044, 4 }, + { 0x1E0D, 0x0064, 4 }, + { 0x1E24, 0x0048, 4 }, + { 0x1E25, 0x0068, 4 }, + { 0x1E2E, 0x00CF, 1 }, + { 0x1E2F, 0x00EF, 1 }, + { 0x1E30, 0x004B, 1 }, + { 0x1E31, 0x006B, 1 }, + { 0x1E32, 0x004B, 4 }, + { 0x1E33, 0x006B, 4 }, + { 0x1E36, 0x004C, 4 }, + { 0x1E37, 0x006C, 4 }, + { 0x1E3E, 0x004D, 1 }, + { 0x1E3F, 0x006D, 1 }, + { 0x1E42, 0x004D, 4 }, + { 0x1E43, 0x006D, 4 }, + { 0x1E46, 0x004E, 4 }, + { 0x1E47, 0x006E, 4 }, + { 0x1E4C, 0x00D3, 2 }, /*{ 0x1E4C, 0x00D5, 1 },*/ /*{ 0x1E4C, 0x004F, 1, 2 },*/ + { 0x1E4D, 0x00F3, 2 }, /*{ 0x1E4D, 0x00F5, 1 },*/ /*{ 0x1E4D, 0x006F, 1, 2 },*/ + { 0x1E4E, 0x00D6, 2 }, + { 0x1E4F, 0x00F6, 2 }, + { 0x1E54, 0x0050, 1 }, + { 0x1E55, 0x0070, 1 }, + { 0x1E5A, 0x0052, 4 }, + { 0x1E5B, 0x0072, 4 }, + { 0x1E62, 0x0053, 4 }, + { 0x1E63, 0x0073, 4 }, + { 0x1E6C, 0x0054, 4 }, + { 0x1E6D, 0x0074, 4 }, + { 0x1E78, 0x00DA, 2 }, /*{ 0x1E78, 0x0168, 1 },*/ /*{ 0x1E78, 0x0055, 1, 2 },*/ + { 0x1E79, 0x00FA, 2 }, /*{ 0x1E79, 0x0169, 1 },*/ /*{ 0x1E79, 0x0075, 1, 2 },*/ + { 0x1E7C, 0x0056, 2 }, + { 0x1E7D, 0x0076, 2 }, + { 0x1E7E, 0x0056, 4 }, + { 0x1E7F, 0x0076, 4 }, + { 0x1E80, 0x0057, 0 }, + { 0x1E81, 0x0077, 0 }, + { 0x1E82, 0x0057, 1 }, + { 0x1E83, 0x0077, 1 }, + { 0x1E88, 0x0057, 4 }, + { 0x1E89, 0x0077, 4 }, + { 0x1E92, 0x005A, 4 }, + { 0x1E93, 0x007A, 4 }, + { 0x1EA0, 0x0041, 4 }, + { 0x1EA1, 0x0061, 4 }, + { 0x1EA2, 0x0041, 3 }, + { 0x1EA3, 0x0061, 3 }, + { 0x1EA4, 0x00C2, 1 }, + { 0x1EA5, 0x00E2, 1 }, + { 0x1EA6, 0x00C2, 0 }, + { 0x1EA7, 0x00E2, 0 }, + { 0x1EA8, 0x00C2, 3 }, + { 0x1EA9, 0x00E2, 3 }, + { 0x1EAA, 0x00C2, 2 }, + { 0x1EAB, 0x00E2, 2 }, + { 0x1EAC, 0x00C2, 4 }, + { 0x1EAD, 0x00E2, 4 }, + { 0x1EAE, 0x0102, 1 }, + { 0x1EAF, 0x0103, 1 }, + { 0x1EB0, 0x0102, 0 }, + { 0x1EB1, 0x0103, 0 }, + { 0x1EB2, 0x0102, 3 }, + { 0x1EB3, 0x0103, 3 }, + { 0x1EB4, 0x0102, 2 }, + { 0x1EB5, 0x0103, 2 }, + { 0x1EB6, 0x0102, 4 }, + { 0x1EB7, 0x0103, 4 }, + { 0x1EB8, 0x0045, 4 }, + { 0x1EB9, 0x0065, 4 }, + { 0x1EBA, 0x0045, 3 }, + { 0x1EBB, 0x0065, 3 }, + { 0x1EBC, 0x0045, 2 }, + { 0x1EBD, 0x0065, 2 }, + { 0x1EBE, 0x00CA, 1 }, + { 0x1EBF, 0x00EA, 1 }, + { 0x1EC0, 0x00CA, 0 }, + { 0x1EC1, 0x00EA, 0 }, + { 0x1EC2, 0x00CA, 3 }, + { 0x1EC3, 0x00EA, 3 }, + { 0x1EC4, 0x00CA, 2 }, + { 0x1EC5, 0x00EA, 2 }, + { 0x1EC6, 0x00CA, 4 }, + { 0x1EC7, 0x00EA, 4 }, + { 0x1EC8, 0x0049, 3 }, + { 0x1EC9, 0x0069, 3 }, + { 0x1ECA, 0x0049, 4 }, + { 0x1ECB, 0x0069, 4 }, + { 0x1ECC, 0x004F, 4 }, + { 0x1ECD, 0x006F, 4 }, + { 0x1ECE, 0x004F, 3 }, + { 0x1ECF, 0x006F, 3 }, + { 0x1ED0, 0x00D4, 1 }, + { 0x1ED1, 0x00F4, 1 }, + { 0x1ED2, 0x00D4, 0 }, + { 0x1ED3, 0x00F4, 0 }, + { 0x1ED4, 0x00D4, 3 }, + { 0x1ED5, 0x00F4, 3 }, + { 0x1ED6, 0x00D4, 2 }, + { 0x1ED7, 0x00F4, 2 }, + { 0x1ED8, 0x00D4, 4 }, + { 0x1ED9, 0x00F4, 4 }, + { 0x1EDA, 0x01A0, 1 }, + { 0x1EDB, 0x01A1, 1 }, + { 0x1EDC, 0x01A0, 0 }, + { 0x1EDD, 0x01A1, 0 }, + { 0x1EDE, 0x01A0, 3 }, + { 0x1EDF, 0x01A1, 3 }, + { 0x1EE0, 0x01A0, 2 }, + { 0x1EE1, 0x01A1, 2 }, + { 0x1EE2, 0x01A0, 4 }, + { 0x1EE3, 0x01A1, 4 }, + { 0x1EE4, 0x0055, 4 }, + { 0x1EE5, 0x0075, 4 }, + { 0x1EE6, 0x0055, 3 }, + { 0x1EE7, 0x0075, 3 }, + { 0x1EE8, 0x01AF, 1 }, + { 0x1EE9, 0x01B0, 1 }, + { 0x1EEA, 0x01AF, 0 }, + { 0x1EEB, 0x01B0, 0 }, + { 0x1EEC, 0x01AF, 3 }, + { 0x1EED, 0x01B0, 3 }, + { 0x1EEE, 0x01AF, 2 }, + { 0x1EEF, 0x01B0, 2 }, + { 0x1EF0, 0x01AF, 4 }, + { 0x1EF1, 0x01B0, 4 }, + { 0x1EF2, 0x0059, 0 }, + { 0x1EF3, 0x0079, 0 }, + { 0x1EF4, 0x0059, 4 }, + { 0x1EF5, 0x0079, 4 }, + { 0x1EF6, 0x0059, 3 }, + { 0x1EF7, 0x0079, 3 }, + { 0x1EF8, 0x0059, 2 }, + { 0x1EF9, 0x0079, 2 }, + { 0x1FED, 0x00A8, 0 }, + { 0x1FEE, 0x00A8, 1 }, /* U+1FEE => U+0385 => U+00A8 U+0301 */ +}; + +#endif /* _VIETCOMB_H */ diff --git a/jni/parted/libiconv/lib/viscii.h b/jni/parted/libiconv/lib/viscii.h new file mode 100755 index 0000000..e0802f8 --- /dev/null +++ b/jni/parted/libiconv/lib/viscii.h @@ -0,0 +1,140 @@ +/* + * Copyright (C) 1999-2001, 2016, 2019 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +/* + * VISCII1.1-1 + */ + +/* Specification: RFC 1456 */ + +static const unsigned short viscii_2uni_1[32] = { + /* 0x00 */ + 0x0000, 0x0001, 0x1eb2, 0x0003, 0x0004, 0x1eb4, 0x1eaa, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x1ef6, 0x0015, 0x0016, 0x0017, + 0x0018, 0x1ef8, 0x001a, 0x001b, 0x001c, 0x001d, 0x1ef4, 0x001f, +}; +static const unsigned short viscii_2uni_2[128] = { + /* 0x80 */ + 0x1ea0, 0x1eae, 0x1eb0, 0x1eb6, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eac, + 0x1ebc, 0x1eb8, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ed0, + /* 0x90 */ + 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1ee2, 0x1eda, 0x1edc, 0x1ede, + 0x1eca, 0x1ece, 0x1ecc, 0x1ec8, 0x1ee6, 0x0168, 0x1ee4, 0x1ef2, + /* 0xa0 */ + 0x00d5, 0x1eaf, 0x1eb1, 0x1eb7, 0x1ea5, 0x1ea7, 0x1ea9, 0x1ead, + 0x1ebd, 0x1eb9, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, 0x1ed1, + /* 0xb0 */ + 0x1ed3, 0x1ed5, 0x1ed7, 0x1ee0, 0x01a0, 0x1ed9, 0x1edd, 0x1edf, + 0x1ecb, 0x1ef0, 0x1ee8, 0x1eea, 0x1eec, 0x01a1, 0x1edb, 0x01af, + /* 0xc0 */ + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x1ea2, 0x0102, 0x1eb3, 0x1eb5, + 0x00c8, 0x00c9, 0x00ca, 0x1eba, 0x00cc, 0x00cd, 0x0128, 0x1ef3, + /* 0xd0 */ + 0x0110, 0x1ee9, 0x00d2, 0x00d3, 0x00d4, 0x1ea1, 0x1ef7, 0x1eeb, + 0x1eed, 0x00d9, 0x00da, 0x1ef9, 0x1ef5, 0x00dd, 0x1ee1, 0x01b0, + /* 0xe0 */ + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x1ea3, 0x0103, 0x1eef, 0x1eab, + 0x00e8, 0x00e9, 0x00ea, 0x1ebb, 0x00ec, 0x00ed, 0x0129, 0x1ec9, + /* 0xf0 */ + 0x0111, 0x1ef1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x1ecf, 0x1ecd, + 0x1ee5, 0x00f9, 0x00fa, 0x0169, 0x1ee7, 0x00fd, 0x1ee3, 0x1eee, +}; + +static int +viscii_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n) +{ + unsigned char c = *s; + if (c < 0x20) + *pwc = (ucs4_t) viscii_2uni_1[c]; + else if (c < 0x80) + *pwc = (ucs4_t) c; + else + *pwc = (ucs4_t) viscii_2uni_2[c-0x80]; + return 1; +} + +static const unsigned char viscii_page00[64+184] = { + 0xc0, 0xc1, 0xc2, 0xc3, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0x00, 0xcc, 0xcd, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0xd2, 0xd3, 0xd4, 0xa0, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0xd9, 0xda, 0x00, 0x00, 0xdd, 0x00, 0x00, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0x00, 0xec, 0xed, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0xf2, 0xf3, 0xf4, 0xf5, 0x00, 0x00, /* 0xf0-0xf7 */ + 0x00, 0xf9, 0xfa, 0x00, 0x00, 0xfd, 0x00, 0x00, /* 0xf8-0xff */ + /* 0x0100 */ + 0x00, 0x00, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0xce, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x9d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xb4, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xa8-0xaf */ + 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ +}; +static const unsigned char viscii_page1e[96] = { + 0x80, 0xd5, 0xc4, 0xe4, 0x84, 0xa4, 0x85, 0xa5, /* 0xa0-0xa7 */ + 0x86, 0xa6, 0x06, 0xe7, 0x87, 0xa7, 0x81, 0xa1, /* 0xa8-0xaf */ + 0x82, 0xa2, 0x02, 0xc6, 0x05, 0xc7, 0x83, 0xa3, /* 0xb0-0xb7 */ + 0x89, 0xa9, 0xcb, 0xeb, 0x88, 0xa8, 0x8a, 0xaa, /* 0xb8-0xbf */ + 0x8b, 0xab, 0x8c, 0xac, 0x8d, 0xad, 0x8e, 0xae, /* 0xc0-0xc7 */ + 0x9b, 0xef, 0x98, 0xb8, 0x9a, 0xf7, 0x99, 0xf6, /* 0xc8-0xcf */ + 0x8f, 0xaf, 0x90, 0xb0, 0x91, 0xb1, 0x92, 0xb2, /* 0xd0-0xd7 */ + 0x93, 0xb5, 0x95, 0xbe, 0x96, 0xb6, 0x97, 0xb7, /* 0xd8-0xdf */ + 0xb3, 0xde, 0x94, 0xfe, 0x9e, 0xf8, 0x9c, 0xfc, /* 0xe0-0xe7 */ + 0xba, 0xd1, 0xbb, 0xd7, 0xbc, 0xd8, 0xff, 0xe6, /* 0xe8-0xef */ + 0xb9, 0xf1, 0x9f, 0xcf, 0x1e, 0xdc, 0x14, 0xd6, /* 0xf0-0xf7 */ + 0x19, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static int +viscii_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n) +{ + unsigned char c = 0; + if (wc < 0x0080 && (wc >= 0x0020 || (0x42100064U & (1U << wc)) == 0)) { + *r = wc; + return 1; + } + else if (wc >= 0x00c0 && wc < 0x01b8) + c = viscii_page00[wc-0x00c0]; + else if (wc >= 0x1ea0 && wc < 0x1f00) + c = viscii_page1e[wc-0x1ea0]; + if (c != 0) { + *r = c; + return 1; + } + return RET_ILUNI; +} diff --git a/jni/parted/libiconv/srclib/_Noreturn.h b/jni/parted/libiconv/srclib/_Noreturn.h new file mode 100755 index 0000000..e914627 --- /dev/null +++ b/jni/parted/libiconv/srclib/_Noreturn.h @@ -0,0 +1,45 @@ +/* A C macro for declaring that a function does not return. + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || (!defined __STRICT_ANSI__ \ + && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))))) + /* _Noreturn works as-is. */ +# elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ + || 0x5110 <= __SUNPRO_C) +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif diff --git a/jni/parted/libiconv/srclib/alloca.h b/jni/parted/libiconv/srclib/alloca.h new file mode 100755 index 0000000..a63ab16 --- /dev/null +++ b/jni/parted/libiconv/srclib/alloca.h @@ -0,0 +1,69 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Memory allocation on the stack. + Copyright (C) 1995, 1999, 2001-2007 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* When this file is included, it may be preceded only by preprocessor + declarations. Thanks to AIX. Therefore we include it right after + "config.h", not later. */ + +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H + means there is a real alloca function. */ +#ifndef _GL_ALLOCA_H +#define _GL_ALLOCA_H + +/* alloca(N) returns a pointer (void* or char*) to N bytes of memory + allocated on the stack, and which will last until the function returns. + Use of alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns, + - for huge N (say, N >= 65536) - you never know how large (or small) + the stack is, and when the stack cannot fulfill the memory allocation + request, the program just crashes. + */ + +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifdef __hpux /* This section must match that of bison generated files. */ +# ifdef __cplusplus +extern "C" void *alloca (unsigned int); +# else /* not __cplusplus */ +extern void *alloca (); +# endif /* not __cplusplus */ +# else /* not __hpux */ +# ifndef alloca +extern char *alloca (); +# endif +# endif /* __hpux */ +# endif +# endif +# endif +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/jni/parted/libiconv/srclib/allocator.h b/jni/parted/libiconv/srclib/allocator.h new file mode 100755 index 0000000..3e698ce --- /dev/null +++ b/jni/parted/libiconv/srclib/allocator.h @@ -0,0 +1,58 @@ +/* Memory allocators such as malloc+free. + + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef _GL_ALLOCATOR_H +#define _GL_ALLOCATOR_H + +#include + +/* An object describing a memory allocator family. */ + +struct allocator +{ + /* Do not use GCC attributes such as __attribute__ ((malloc)) with + the function types pointed at by these members, because these + attributes do not work with pointers to functions. See + . */ + + /* Call ALLOCATE to allocate memory, like 'malloc'. On failure ALLOCATE + should return NULL, though not necessarily set errno. When given + a zero size it may return NULL even if successful. */ + void *(*allocate) (size_t); + + /* If nonnull, call REALLOCATE to reallocate memory, like 'realloc'. + On failure REALLOCATE should return NULL, though not necessarily set + errno. When given a zero size it may return NULL even if + successful. */ + void *(*reallocate) (void *, size_t); + + /* Call FREE to free memory, like 'free'. */ + void (*free) (void *); + + /* If nonnull, call DIE (SIZE) if MALLOC (SIZE) or REALLOC (..., + SIZE) fails. DIE should not return. SIZE should equal SIZE_MAX + if size_t overflow was detected while calculating sizes to be + passed to MALLOC or REALLOC. */ + void (*die) (size_t); +}; + +/* An allocator using the stdlib functions and a null DIE function. */ +extern struct allocator const stdlib_allocator; + +#endif /* _GL_ALLOCATOR_H */ diff --git a/jni/parted/libiconv/srclib/areadlink.h b/jni/parted/libiconv/srclib/areadlink.h new file mode 100755 index 0000000..1518d74 --- /dev/null +++ b/jni/parted/libiconv/srclib/areadlink.h @@ -0,0 +1,37 @@ +/* Read symbolic links without size limitation. + + Copyright (C) 2001, 2003-2004, 2007, 2009-2022 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering */ + +#include + +extern char *areadlink (char const *filename) + _GL_ATTRIBUTE_DEALLOC_FREE; +extern char *areadlink_with_size (char const *filename, size_t size_hint) + _GL_ATTRIBUTE_DEALLOC_FREE; + +#if GNULIB_AREADLINKAT +extern char *areadlinkat (int fd, char const *filename) + _GL_ATTRIBUTE_DEALLOC_FREE; +#endif + +#if GNULIB_AREADLINKAT_WITH_SIZE +extern char *areadlinkat_with_size (int fd, char const *filename, + size_t size_hint) + _GL_ATTRIBUTE_DEALLOC_FREE; +#endif diff --git a/jni/parted/libiconv/srclib/arg-nonnull.h b/jni/parted/libiconv/srclib/arg-nonnull.h new file mode 100755 index 0000000..e4513ef --- /dev/null +++ b/jni/parted/libiconv/srclib/arg-nonnull.h @@ -0,0 +1,26 @@ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif diff --git a/jni/parted/libiconv/srclib/basename-lgpl.h b/jni/parted/libiconv/srclib/basename-lgpl.h new file mode 100755 index 0000000..5569f21 --- /dev/null +++ b/jni/parted/libiconv/srclib/basename-lgpl.h @@ -0,0 +1,78 @@ +/* Extract the last component (base name) of a file name. + + Copyright (C) 1998, 2001, 2003-2006, 2009-2022 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _BASENAME_LGPL_H +#define _BASENAME_LGPL_H + +#include + +#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT +# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return the address of the last file name component of FILENAME. + If FILENAME has some trailing slash(es), they are considered to be + part of the last component. + If FILENAME has no relative file name components because it is a file + system root, return the empty string. + Examples: + FILENAME RESULT + "foo.c" "foo.c" + "foo/bar.c" "bar.c" + "/foo/bar.c" "bar.c" + "foo/bar/" "bar/" + "foo/bar//" "bar//" + "/" "" + "//" "" + "" "" + The return value is a tail of the given FILENAME; do NOT free() it! */ + +/* This function was traditionally called 'basename', but we avoid this + function name because + * Various platforms have different functions in their libc. + In particular, the glibc basename(), defined in , does + not consider trailing slashes to be part of the component: + FILENAME RESULT + "foo/bar/" "" + "foo/bar//" "" + * The 'basename' command eliminates trailing slashes and for a root + produces a non-empty result: + FILENAME RESULT + "foo/bar/" "bar" + "foo/bar//" "bar" + "/" "/" + "//" "/" + */ +extern char *last_component (char const *filename) _GL_ATTRIBUTE_PURE; + +/* Return the length of the basename FILENAME. + Typically FILENAME is the value returned by base_name or last_component. + Act like strlen (FILENAME), except omit all trailing slashes. */ +extern size_t base_len (char const *filename) _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _BASENAME_LGPL_H */ diff --git a/jni/parted/libiconv/srclib/binary-io.h b/jni/parted/libiconv/srclib/binary-io.h new file mode 100755 index 0000000..5b7661e --- /dev/null +++ b/jni/parted/libiconv/srclib/binary-io.h @@ -0,0 +1,77 @@ +/* Binary mode I/O. + Copyright (C) 2001, 2003, 2005, 2008-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _BINARY_H +#define _BINARY_H + +/* For systems that distinguish between text and binary I/O. + O_BINARY is guaranteed by the gnulib . */ +#include + +/* The MSVC7 doesn't like to be included after '#define fileno ...', + so we include it here first. */ +#include + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef BINARY_IO_INLINE +# define BINARY_IO_INLINE _GL_INLINE +#endif + +#if O_BINARY +# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ +# include /* declares setmode() */ +# define __gl_setmode setmode +# else +# define __gl_setmode _setmode +# undef fileno +# define fileno _fileno +# endif +#else + /* On reasonable systems, binary I/O is the only choice. */ + /* Use a function rather than a macro, to avoid gcc warnings + "warning: statement with no effect". */ +BINARY_IO_INLINE int +__gl_setmode (_GL_UNUSED int fd, _GL_UNUSED int mode) +{ + return O_BINARY; +} +#endif + +/* Set FD's mode to MODE, which should be either O_TEXT or O_BINARY. + Return the old mode if successful, -1 (setting errno) on failure. + Ordinarily this function would be called 'setmode', since that is + its old name on MS-Windows, but it is called 'set_binary_mode' here + to avoid colliding with a BSD function of another name. */ + +#if defined __DJGPP__ || defined __EMX__ +extern int set_binary_mode (int fd, int mode); +#else +BINARY_IO_INLINE int +set_binary_mode (int fd, int mode) +{ + return __gl_setmode (fd, mode); +} +#endif + +/* This macro is obsolescent. */ +#define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY)) + +_GL_INLINE_HEADER_END + +#endif /* _BINARY_H */ diff --git a/jni/parted/libiconv/srclib/c++defs.h b/jni/parted/libiconv/srclib/c++defs.h new file mode 100755 index 0000000..ad18155 --- /dev/null +++ b/jni/parted/libiconv/srclib/c++defs.h @@ -0,0 +1,331 @@ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ diff --git a/jni/parted/libiconv/srclib/c-ctype.c b/jni/parted/libiconv/srclib/c-ctype.c new file mode 100755 index 0000000..a247514 --- /dev/null +++ b/jni/parted/libiconv/srclib/c-ctype.c @@ -0,0 +1,21 @@ +/* Character handling in C locale. + + Copyright (C) 2003-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#define C_CTYPE_INLINE _GL_EXTERN_INLINE +#include "c-ctype.h" diff --git a/jni/parted/libiconv/srclib/c-ctype.h b/jni/parted/libiconv/srclib/c-ctype.h new file mode 100755 index 0000000..1a4f603 --- /dev/null +++ b/jni/parted/libiconv/srclib/c-ctype.h @@ -0,0 +1,366 @@ +/* Character handling in C locale. + + These functions work like the corresponding functions in , + except that they have the C (POSIX) locale hardwired, whereas the + functions' behaviour depends on the current locale set via + setlocale. + + Copyright (C) 2000-2003, 2006, 2008-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef C_CTYPE_H +#define C_CTYPE_H + +#include + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef C_CTYPE_INLINE +# define C_CTYPE_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII + character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it + is ISO-8859-1), the functions in this file recognize only the ASCII + characters. */ + + +#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) +/* The character set is ASCII or one of its variants or extensions, not EBCDIC. + Testing the value of '\n' and '\r' is not relevant. */ +# define C_CTYPE_ASCII 1 +#elif ! (' ' == '\x40' && '0' == '\xf0' \ + && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ + && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') +# error "Only ASCII and EBCDIC are supported" +#endif + +#if 'A' < 0 +# error "EBCDIC and char is signed -- not supported" +#endif + +/* Cases for control characters. */ + +#define _C_CTYPE_CNTRL \ + case '\a': case '\b': case '\f': case '\n': \ + case '\r': case '\t': case '\v': \ + _C_CTYPE_OTHER_CNTRL + +/* ASCII control characters other than those with \-letter escapes. */ + +#if C_CTYPE_ASCII +# define _C_CTYPE_OTHER_CNTRL \ + case '\x00': case '\x01': case '\x02': case '\x03': \ + case '\x04': case '\x05': case '\x06': case '\x0e': \ + case '\x0f': case '\x10': case '\x11': case '\x12': \ + case '\x13': case '\x14': case '\x15': case '\x16': \ + case '\x17': case '\x18': case '\x19': case '\x1a': \ + case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ + case '\x1f': case '\x7f' +#else + /* Use EBCDIC code page 1047's assignments for ASCII control chars; + assume all EBCDIC code pages agree about these assignments. */ +# define _C_CTYPE_OTHER_CNTRL \ + case '\x00': case '\x01': case '\x02': case '\x03': \ + case '\x07': case '\x0e': case '\x0f': case '\x10': \ + case '\x11': case '\x12': case '\x13': case '\x18': \ + case '\x19': case '\x1c': case '\x1d': case '\x1e': \ + case '\x1f': case '\x26': case '\x27': case '\x2d': \ + case '\x2e': case '\x32': case '\x37': case '\x3c': \ + case '\x3d': case '\x3f' +#endif + +/* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ + +#define _C_CTYPE_LOWER_A_THRU_F_N(N) \ + case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ + case 'e' + (N): case 'f' + (N) +#define _C_CTYPE_LOWER_N(N) \ + _C_CTYPE_LOWER_A_THRU_F_N(N): \ + case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ + case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ + case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ + case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ + case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) + +/* Cases for hex letters, digits, lower, punct, and upper. */ + +#define _C_CTYPE_A_THRU_F \ + _C_CTYPE_LOWER_A_THRU_F_N (0): \ + _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') +#define _C_CTYPE_DIGIT \ + case '0': case '1': case '2': case '3': \ + case '4': case '5': case '6': case '7': \ + case '8': case '9' +#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) +#define _C_CTYPE_PUNCT \ + case '!': case '"': case '#': case '$': \ + case '%': case '&': case '\'': case '(': \ + case ')': case '*': case '+': case ',': \ + case '-': case '.': case '/': case ':': \ + case ';': case '<': case '=': case '>': \ + case '?': case '@': case '[': case '\\': \ + case ']': case '^': case '_': case '`': \ + case '{': case '|': case '}': case '~' +#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') + + +/* Function definitions. */ + +/* Unlike the functions in , which require an argument in the range + of the 'unsigned char' type, the functions here operate on values that are + in the 'unsigned char' range or in the 'char' range. In other words, + when you have a 'char' value, you need to cast it before using it as + argument to a function: + + const char *s = ...; + if (isalpha ((unsigned char) *s)) ... + + but you don't need to cast it for the functions defined in this file: + + const char *s = ...; + if (c_isalpha (*s)) ... + */ + +C_CTYPE_INLINE bool +c_isalnum (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isalpha (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +/* The function isascii is not locale dependent. + Its use in EBCDIC is questionable. */ +C_CTYPE_INLINE bool +c_isascii (int c) +{ + switch (c) + { + case ' ': + _C_CTYPE_CNTRL: + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isblank (int c) +{ + return c == ' ' || c == '\t'; +} + +C_CTYPE_INLINE bool +c_iscntrl (int c) +{ + switch (c) + { + _C_CTYPE_CNTRL: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isdigit (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isgraph (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_islower (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isprint (int c) +{ + switch (c) + { + case ' ': + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_ispunct (int c) +{ + switch (c) + { + _C_CTYPE_PUNCT: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isspace (int c) +{ + switch (c) + { + case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isupper (int c) +{ + switch (c) + { + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isxdigit (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_A_THRU_F: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE int +c_tolower (int c) +{ + switch (c) + { + _C_CTYPE_UPPER: + return c - 'A' + 'a'; + default: + return c; + } +} + +C_CTYPE_INLINE int +c_toupper (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + return c - 'a' + 'A'; + default: + return c; + } +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* C_CTYPE_H */ diff --git a/jni/parted/libiconv/srclib/careadlinkat.h b/jni/parted/libiconv/srclib/careadlinkat.h new file mode 100755 index 0000000..2b559b2 --- /dev/null +++ b/jni/parted/libiconv/srclib/careadlinkat.h @@ -0,0 +1,67 @@ +/* Read symbolic links into a buffer without size limitation, relative to fd. + + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef _GL_CAREADLINKAT_H +#define _GL_CAREADLINKAT_H + +#include +#include + +struct allocator; + +/* Assuming the current directory is FD, get the symbolic link value + of FILENAME as a null-terminated string and put it into a buffer. + If FD is AT_FDCWD, FILENAME is interpreted relative to the current + working directory, as in openat. + + If the link is small enough to fit into BUFFER put it there. + BUFFER's size is BUFFER_SIZE, and BUFFER can be null + if BUFFER_SIZE is zero. + + If the link is not small, put it into a dynamically allocated + buffer managed by ALLOC. It is the caller's responsibility to free + the returned value if it is nonnull and is not BUFFER. + + The PREADLINKAT function specifies how to read links. It operates + like POSIX readlinkat() + + but can assume that its first argument is the same as FD. + + If successful, return the buffer address; otherwise return NULL and + set errno. */ + +char *careadlinkat (int fd, char const *filename, + char *restrict buffer, size_t buffer_size, + struct allocator const *alloc, + ssize_t (*preadlinkat) (int, char const *, + char *, size_t)); + +/* Suitable value for careadlinkat's FD argument. */ +#if HAVE_READLINKAT +/* AT_FDCWD is declared in . */ +#else +/* Define AT_FDCWD independently, so that the careadlinkat module does + not depend on the fcntl-h module. We might as well use the same value + as fcntl-h. */ +# ifndef AT_FDCWD +# define AT_FDCWD (-3041965) +# endif +#endif + +#endif /* _GL_CAREADLINKAT_H */ diff --git a/jni/parted/libiconv/srclib/cdefs.h b/jni/parted/libiconv/srclib/cdefs.h new file mode 100755 index 0000000..7b8ed5b --- /dev/null +++ b/jni/parted/libiconv/srclib/cdefs.h @@ -0,0 +1,707 @@ +/* Copyright (C) 1992-2022 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_CDEFS_H +#define _SYS_CDEFS_H 1 + +/* We are almost always included from features.h. */ +#ifndef _FEATURES_H +# include +#endif + +/* The GNU libc does not support any K&R compilers or the traditional mode + of ISO C compilers anymore. Check for some of the combinations not + supported anymore. */ +#if defined __GNUC__ && !defined __STDC__ +# error "You need a ISO C conforming compiler to use the glibc headers" +#endif + +/* Some user header file might have defined this before. */ +#undef __P +#undef __PMT + +/* Compilers that lack __has_attribute may object to + #if defined __has_attribute && __has_attribute (...) + even though they do not need to evaluate the right-hand side of the &&. + Similarly for __has_builtin, etc. */ +#if (defined __has_attribute \ + && (!defined __clang_minor__ \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))) +# define __glibc_has_attribute(attr) __has_attribute (attr) +#else +# define __glibc_has_attribute(attr) 0 +#endif +#ifdef __has_builtin +# define __glibc_has_builtin(name) __has_builtin (name) +#else +# define __glibc_has_builtin(name) 0 +#endif +#ifdef __has_extension +# define __glibc_has_extension(ext) __has_extension (ext) +#else +# define __glibc_has_extension(ext) 0 +#endif + +#if defined __GNUC__ || defined __clang__ + +/* All functions, except those with callbacks or those that + synchronize memory, are leaf functions. */ +# if __GNUC_PREREQ (4, 6) && !defined _LIBC +# define __LEAF , __leaf__ +# define __LEAF_ATTR __attribute__ ((__leaf__)) +# else +# define __LEAF +# define __LEAF_ATTR +# endif + +/* GCC can always grok prototypes. For C++ programs we add throw() + to help it optimize the function calls. But this only works with + gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions + as non-throwing using a function attribute since programs can use + the -fexceptions options for C code as well. */ +# if !defined __cplusplus \ + && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__)) +# define __THROW __attribute__ ((__nothrow__ __LEAF)) +# define __THROWNL __attribute__ ((__nothrow__)) +# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct +# define __NTHNL(fct) __attribute__ ((__nothrow__)) fct +# else +# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4) +# if __cplusplus >= 201103L +# define __THROW noexcept (true) +# else +# define __THROW throw () +# endif +# define __THROWNL __THROW +# define __NTH(fct) __LEAF_ATTR fct __THROW +# define __NTHNL(fct) fct __THROW +# else +# define __THROW +# define __THROWNL +# define __NTH(fct) fct +# define __NTHNL(fct) fct +# endif +# endif + +#else /* Not GCC or clang. */ + +# if (defined __cplusplus \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) +# define __inline inline +# else +# define __inline /* No inline functions. */ +# endif + +# define __THROW +# define __THROWNL +# define __NTH(fct) fct + +#endif /* GCC || clang. */ + +/* These two macros are not used in glibc anymore. They are kept here + only because some other projects expect the macros to be defined. */ +#define __P(args) args +#define __PMT(args) args + +/* For these things, GCC behaves the ANSI way normally, + and the non-ANSI way under -traditional. */ + +#define __CONCAT(x,y) x ## y +#define __STRING(x) #x + +/* This is not a typedef so `const __ptr_t' does the right thing. */ +#define __ptr_t void * + + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + + +/* Fortify support. */ +#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) +#define __bos0(ptr) __builtin_object_size (ptr, 0) + +/* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */ +#if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \ + || __GNUC_PREREQ (12, 0)) +# define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0) +# define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1) +#else +# define __glibc_objsize0(__o) __bos0 (__o) +# define __glibc_objsize(__o) __bos (__o) +#endif + +/* Compile time conditions to choose between the regular, _chk and _chk_warn + variants. These conditions should get evaluated to constant and optimized + away. */ + +#define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s)) +#define __glibc_unsigned_or_positive(__l) \ + ((__typeof (__l)) 0 < (__typeof (__l)) -1 \ + || (__builtin_constant_p (__l) && (__l) > 0)) + +/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ + condition can be folded to a constant and if it is true, or unknown (-1) */ +#define __glibc_safe_or_unknown_len(__l, __s, __osz) \ + ((__osz) == (__SIZE_TYPE__) -1 \ + || (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + (__s), (__osz))) \ + && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz)))) + +/* Conversely, we know at compile time that the length is unsafe if the + __L * __S <= __OBJSZ condition can be folded to a constant and if it is + false. */ +#define __glibc_unsafe_len(__l, __s, __osz) \ + (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + __s, __osz)) \ + && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) + +/* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be + declared. */ + +#define __glibc_fortify(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \ + : __ ## f ## _chk (__VA_ARGS__, __osz))) \ + +/* Fortify function f, where object size argument passed to f is the number of + elements and not total size. */ + +#define __glibc_fortify_n(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \ + : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \ + +#if __GNUC_PREREQ (4,3) +# define __warnattr(msg) __attribute__((__warning__ (msg))) +# define __errordecl(name, msg) \ + extern void name (void) __attribute__((__error__ (msg))) +#else +# define __warnattr(msg) +# define __errordecl(name, msg) extern void name (void) +#endif + +/* Support for flexible arrays. + Headers that should use flexible arrays only if they're "real" + (e.g. only if they won't affect sizeof()) should test + #if __glibc_c99_flexarr_available. */ +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif __GNUC_PREREQ (2,97) || defined __clang__ +/* GCC 2.97 and clang support C99 flexible array members as an extension, + even when in C89 mode or compiling C++ (any version). */ +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif defined __GNUC__ +/* Pre-2.97 GCC did not support C99 flexible arrays but did have + an equivalent extension with slightly different notation. */ +# define __flexarr [0] +# define __glibc_c99_flexarr_available 1 +#else +/* Some other non-C99 compiler. Approximate with [1]. */ +# define __flexarr [1] +# define __glibc_c99_flexarr_available 0 +#endif + + +/* __asm__ ("xyz") is used throughout the headers to rename functions + at the assembly language level. This is wrapped by the __REDIRECT + macro, in order to support compilers that can do this some other + way. When compilers don't support asm-names at all, we have to do + preprocessor tricks instead (which don't have exactly the right + semantics, but it's the best we can do). + + Example: + int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ + +#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4) + +# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) +# ifdef __cplusplus +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __THROW __asm__ (__ASMNAME (#alias)) +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __THROWNL __asm__ (__ASMNAME (#alias)) +# else +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROW +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROWNL +# endif +# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) +# define __ASMNAME2(prefix, cname) __STRING (prefix) cname + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __REDIRECT(name, proto, alias) name proto; \ + _Pragma("let " #name " = " #alias) +*/ +#endif + +/* GCC and clang have various useful declarations that can be made with + the '__attribute__' syntax. All of the ways we use this do fine if + they are omitted for compilers that don't understand it. */ +#if !(defined __GNUC__ || defined __clang__) +# define __attribute__(xyz) /* Ignore */ +#endif + +/* At some point during the gcc 2.96 development the `malloc' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__) +# define __attribute_malloc__ __attribute__ ((__malloc__)) +#else +# define __attribute_malloc__ /* Ignore */ +#endif + +/* Tell the compiler which arguments to an allocation function + indicate the size of the allocation. */ +#if __GNUC_PREREQ (4, 3) +# define __attribute_alloc_size__(params) \ + __attribute__ ((__alloc_size__ params)) +#else +# define __attribute_alloc_size__(params) /* Ignore. */ +#endif + +/* Tell the compiler which argument to an allocation function + indicates the alignment of the allocation. */ +#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__) +# define __attribute_alloc_align__(param) \ + __attribute__ ((__alloc_align__ param)) +#else +# define __attribute_alloc_align__(param) /* Ignore. */ +#endif + +/* At some point during the gcc 2.96 development the `pure' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__) +# define __attribute_pure__ __attribute__ ((__pure__)) +#else +# define __attribute_pure__ /* Ignore */ +#endif + +/* This declaration tells the compiler that the value is constant. */ +#if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__) +# define __attribute_const__ __attribute__ ((__const__)) +#else +# define __attribute_const__ /* Ignore */ +#endif + +#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__) +# define __attribute_maybe_unused__ __attribute__ ((__unused__)) +#else +# define __attribute_maybe_unused__ /* Ignore */ +#endif + +/* At some point during the gcc 3.1 development the `used' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__) +# define __attribute_used__ __attribute__ ((__used__)) +# define __attribute_noinline__ __attribute__ ((__noinline__)) +#else +# define __attribute_used__ __attribute__ ((__unused__)) +# define __attribute_noinline__ /* Ignore */ +#endif + +/* Since version 3.2, gcc allows marking deprecated functions. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__) +# define __attribute_deprecated__ __attribute__ ((__deprecated__)) +#else +# define __attribute_deprecated__ /* Ignore */ +#endif + +/* Since version 4.5, gcc also allows one to specify the message printed + when a deprecated function is used. clang claims to be gcc 4.2, but + may also support this feature. */ +#if __GNUC_PREREQ (4,5) \ + || __glibc_has_extension (__attribute_deprecated_with_message__) +# define __attribute_deprecated_msg__(msg) \ + __attribute__ ((__deprecated__ (msg))) +#else +# define __attribute_deprecated_msg__(msg) __attribute_deprecated__ +#endif + +/* At some point during the gcc 2.8 development the `format_arg' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. + If several `format_arg' attributes are given for the same function, in + gcc-3.0 and older, all but the last one are ignored. In newer gccs, + all designated arguments are considered. */ +#if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__) +# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) +#else +# define __attribute_format_arg__(x) /* Ignore */ +#endif + +/* At some point during the gcc 2.97 development the `strfmon' format + attribute for functions was introduced. We don't want to use it + unconditionally (although this would be possible) since it + generates warnings. */ +#if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__) +# define __attribute_format_strfmon__(a,b) \ + __attribute__ ((__format__ (__strfmon__, a, b))) +#else +# define __attribute_format_strfmon__(a,b) /* Ignore */ +#endif + +/* The nonnull function attribute marks pointer parameters that + must not be NULL. This has the name __nonnull in glibc, + and __attribute_nonnull__ in files shared with Gnulib to avoid + collision with a different __nonnull in DragonFlyBSD 5.9. */ +#ifndef __attribute_nonnull__ +# if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__) +# define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params)) +# else +# define __attribute_nonnull__(params) +# endif +#endif +#ifndef __nonnull +# define __nonnull(params) __attribute_nonnull__ (params) +#endif + +/* The returns_nonnull function attribute marks the return type of the function + as always being non-null. */ +#ifndef __returns_nonnull +# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__) +# define __returns_nonnull __attribute__ ((__returns_nonnull__)) +# else +# define __returns_nonnull +# endif +#endif + +/* If fortification mode, we warn about unused results of certain + function calls which can lead to problems. */ +#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__) +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 +# define __wur __attribute_warn_unused_result__ +# endif +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif +#ifndef __wur +# define __wur /* Ignore */ +#endif + +/* Forces a function to be always inlined. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__) +/* The Linux kernel defines __always_inline in stddef.h (283d7573), and + it conflicts with this definition. Therefore undefine it first to + allow either header to be included first. */ +# undef __always_inline +# define __always_inline __inline __attribute__ ((__always_inline__)) +#else +# undef __always_inline +# define __always_inline __inline +#endif + +/* Associate error messages with the source location of the call site rather + than with the source location inside the function. */ +#if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__) +# define __attribute_artificial__ __attribute__ ((__artificial__)) +#else +# define __attribute_artificial__ /* Ignore */ +#endif + +/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ + or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions + older than 4.3 may define these macros and still not guarantee GNU inlining + semantics. + + clang++ identifies itself as gcc-4.2, but has support for GNU inlining + semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and + __GNUC_GNU_INLINE__ macro definitions. */ +#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ + || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ + || defined __GNUC_GNU_INLINE__))) +# if defined __GNUC_STDC_INLINE__ || defined __cplusplus +# define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) +# define __extern_always_inline \ + extern __always_inline __attribute__ ((__gnu_inline__)) +# else +# define __extern_inline extern __inline +# define __extern_always_inline extern __always_inline +# endif +#endif + +#ifdef __extern_always_inline +# define __fortify_function __extern_always_inline __attribute_artificial__ +#endif + +/* GCC 4.3 and above allow passing all anonymous arguments of an + __extern_always_inline function to some other vararg function. */ +#if __GNUC_PREREQ (4,3) +# define __va_arg_pack() __builtin_va_arg_pack () +# define __va_arg_pack_len() __builtin_va_arg_pack_len () +#endif + +/* It is possible to compile containing GCC extensions even if GCC is + run in pedantic mode if the uses are carefully marked using the + `__extension__' keyword. But this is not generally available before + version 2.8. */ +#if !(__GNUC_PREREQ (2,8) || defined __clang__) +# define __extension__ /* Ignore */ +#endif + +/* __restrict is known in EGCS 1.2 and above, and in clang. + It works also in C++ mode (outside of arrays), but only when spelled + as '__restrict', not 'restrict'. */ +#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3) +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict restrict +# else +# define __restrict /* Ignore */ +# endif +#endif + +/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is + array_name[restrict] + GCC 3.1 and clang support this. + This syntax is not usable in C++ mode. */ +#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus +# define __restrict_arr __restrict +#else +# ifdef __GNUC__ +# define __restrict_arr /* Not supported in old GCC. */ +# else +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict_arr restrict +# else +/* Some other non-C99 compiler. */ +# define __restrict_arr /* Not supported. */ +# endif +# endif +#endif + +#if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect) +# define __glibc_unlikely(cond) __builtin_expect ((cond), 0) +# define __glibc_likely(cond) __builtin_expect ((cond), 1) +#else +# define __glibc_unlikely(cond) (cond) +# define __glibc_likely(cond) (cond) +#endif + +#if (!defined _Noreturn \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && !(__GNUC_PREREQ (4,7) \ + || (3 < __clang_major__ + (5 <= __clang_minor__)))) +# if __GNUC_PREREQ (2,8) +# define _Noreturn __attribute__ ((__noreturn__)) +# else +# define _Noreturn +# endif +#endif + +#if __GNUC_PREREQ (8, 0) +/* Describes a char array whose address can safely be passed as the first + argument to strncpy and strncat, as the char array is not necessarily + a NUL-terminated string. */ +# define __attribute_nonstring__ __attribute__ ((__nonstring__)) +#else +# define __attribute_nonstring__ +#endif + +/* Undefine (also defined in libc-symbols.h). */ +#undef __attribute_copy__ +#if __GNUC_PREREQ (9, 0) +/* Copies attributes from the declaration or type referenced by + the argument. */ +# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) +#else +# define __attribute_copy__(arg) +#endif + +#if (!defined _Static_assert && !defined __cplusplus \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \ + || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ + extern int (*__Static_assert_function (void)) \ + [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + +/* Gnulib avoids including these, as they don't work on non-glibc or + older glibc platforms. */ +#ifndef __GNULIB_CDEFS +# include +# include +#endif + +#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# ifdef __REDIRECT + +/* Alias name defined automatically. */ +# define __LDBL_REDIR(name, proto) ... unused__ldbl_redir +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined automatically, with leading underscores. */ +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name \ + __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined manually. */ +# define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); + +# define __LDBL_REDIR1_NTH(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) + +/* Unused. */ +# define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl +# define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth + +# else +_Static_assert (0, "IEEE 128-bits long double requires redirection on this platform"); +# endif +#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH +# define __LDBL_COMPAT 1 +# ifdef __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) +# define __LDBL_REDIR(name, proto) \ + __LDBL_REDIR1 (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) +# define __LDBL_REDIR_NTH(name, proto) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name)); +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); +# define __REDIRECT_LDBL(name, proto, alias) \ + __LDBL_REDIR1 (name, proto, __nldbl_##alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) +# endif +#endif +#if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \ + || !defined __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) name proto +# define __LDBL_REDIR(name, proto) name proto +# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW +# define __LDBL_REDIR_NTH(name, proto) name proto __THROW +# define __LDBL_REDIR2_DECL(name) +# define __LDBL_REDIR_DECL(name) +# ifdef __REDIRECT +# define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# endif +#endif + +/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is + intended for use in preprocessor macros. + + Note: MESSAGE must be a _single_ string; concatenation of string + literals is not supported. */ +#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) +# define __glibc_macro_warning1(message) _Pragma (#message) +# define __glibc_macro_warning(message) \ + __glibc_macro_warning1 (GCC warning message) +#else +# define __glibc_macro_warning(msg) +#endif + +/* Generic selection (ISO C11) is a C-only feature, available in GCC + since version 4.9. Previous versions do not provide generic + selection, even though they might set __STDC_VERSION__ to 201112L, + when in -std=c11 mode. Thus, we must check for !defined __GNUC__ + when testing __STDC_VERSION__ for generic selection support. + On the other hand, Clang also defines __GNUC__, so a clang-specific + check is required to enable the use of generic selection. */ +#if !defined __cplusplus \ + && (__GNUC_PREREQ (4, 9) \ + || __glibc_has_extension (c_generic_selections) \ + || (!defined __GNUC__ && defined __STDC_VERSION__ \ + && __STDC_VERSION__ >= 201112L)) +# define __HAVE_GENERIC_SELECTION 1 +#else +# define __HAVE_GENERIC_SELECTION 0 +#endif + +#if __GNUC_PREREQ (10, 0) +/* Designates a 1-based positional argument ref-index of pointer type + that can be used to access size-index elements of the pointed-to + array according to access mode, or at least one element when + size-index is not provided: + access (access-mode, [, ]) */ +# define __attr_access(x) __attribute__ ((__access__ x)) +/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may + use the access attribute to get object sizes from function definition + arguments, so we can't use them on functions we fortify. Drop the object + size hints for such functions. */ +# if __USE_FORTIFY_LEVEL == 3 +# define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o))) +# else +# define __fortified_attr_access(a, o, s) __attr_access ((a, o, s)) +# endif +# if __GNUC_PREREQ (11, 0) +# define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) +# else +# define __attr_access_none(argno) +# endif +#else +# define __fortified_attr_access(a, o, s) +# define __attr_access(x) +# define __attr_access_none(argno) +#endif + +#if __GNUC_PREREQ (11, 0) +/* Designates dealloc as a function to call to deallocate objects + allocated by the declared function. */ +# define __attr_dealloc(dealloc, argno) \ + __attribute__ ((__malloc__ (dealloc, argno))) +# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1) +#else +# define __attr_dealloc(dealloc, argno) +# define __attr_dealloc_free +#endif + +/* Specify that a function such as setjmp or vfork may return + twice. */ +#if __GNUC_PREREQ (4, 1) +# define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) +#else +# define __attribute_returns_twice__ /* Ignore. */ +#endif + +#endif /* sys/cdefs.h */ diff --git a/jni/parted/libiconv/srclib/cloexec.h b/jni/parted/libiconv/srclib/cloexec.h new file mode 100755 index 0000000..7a22d77 --- /dev/null +++ b/jni/parted/libiconv/srclib/cloexec.h @@ -0,0 +1,36 @@ +/* cloexec.c - set or clear the close-on-exec descriptor flag + + Copyright (C) 2004, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, + or clear the flag if VALUE is false. + Return 0 on success, or -1 on error with 'errno' set. + + Note that on MingW, this function does NOT protect DESC from being + inherited into spawned children. Instead, either use dup_cloexec + followed by closing the original DESC, or use interfaces such as + open or pipe2 that accept flags like O_CLOEXEC to create DESC + non-inheritable in the first place. */ + +int set_cloexec_flag (int desc, bool value); + +/* Duplicates a file handle FD, while marking the copy to be closed + prior to exec or spawn. Returns -1 and sets errno if FD could not + be duplicated. */ + +int dup_cloexec (int fd); diff --git a/jni/parted/libiconv/srclib/close.c b/jni/parted/libiconv/srclib/close.c new file mode 100755 index 0000000..44990ba --- /dev/null +++ b/jni/parted/libiconv/srclib/close.c @@ -0,0 +1,75 @@ +/* close replacement. + Copyright (C) 2008-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +#include "fd-hook.h" +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif + +#undef close + +#if defined _WIN32 && !defined __CYGWIN__ +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +close_nothrow (int fd) +{ + int result; + + TRY_MSVC_INVAL + { + result = _close (fd); + } + CATCH_MSVC_INVAL + { + result = -1; + errno = EBADF; + } + DONE_MSVC_INVAL; + + return result; +} +# else +# define close_nothrow _close +# endif +#else +# define close_nothrow close +#endif + +/* Override close() to call into other gnulib modules. */ + +int +rpl_close (int fd) +{ +#if WINDOWS_SOCKETS + int retval = execute_all_close_hooks (close_nothrow, fd); +#else + int retval = close_nothrow (fd); +#endif + +#if REPLACE_FCHDIR + if (retval >= 0) + _gl_unregister_fd (fd); +#endif + + return retval; +} diff --git a/jni/parted/libiconv/srclib/dup2.c b/jni/parted/libiconv/srclib/dup2.c new file mode 100755 index 0000000..1c766ab --- /dev/null +++ b/jni/parted/libiconv/srclib/dup2.c @@ -0,0 +1,189 @@ +/* Duplicate an open file descriptor to a specified file descriptor. + + Copyright (C) 1999, 2004-2007, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* written by Paul Eggert */ + +#include + +/* Specification. */ +#include + +#include +#include + +#undef dup2 + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +# endif + +/* Get _get_osfhandle. */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +dup2_nothrow (int fd, int desired_fd) +{ + int result; + + TRY_MSVC_INVAL + { + result = _dup2 (fd, desired_fd); + } + CATCH_MSVC_INVAL + { + errno = EBADF; + result = -1; + } + DONE_MSVC_INVAL; + + return result; +} +# else +# define dup2_nothrow _dup2 +# endif + +static int +ms_windows_dup2 (int fd, int desired_fd) +{ + int result; + + /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open, + dup2 (fd, fd) returns 0, but all further attempts to use fd in + future dup2 calls will hang. */ + if (fd == desired_fd) + { + if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + return fd; + } + + /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: + https://bugs.winehq.org/show_bug.cgi?id=21289 */ + if (desired_fd < 0) + { + errno = EBADF; + return -1; + } + + result = dup2_nothrow (fd, desired_fd); + + if (result == 0) + result = desired_fd; + + return result; +} + +# define dup2 ms_windows_dup2 + +#elif defined __KLIBC__ + +# include + +static int +klibc_dup2dirfd (int fd, int desired_fd) +{ + int tempfd; + int dupfd; + + tempfd = open ("NUL", O_RDONLY); + if (tempfd == -1) + return -1; + + if (tempfd == desired_fd) + { + close (tempfd); + + char path[_MAX_PATH]; + if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) + return -1; + + return open(path, O_RDONLY); + } + + dupfd = klibc_dup2dirfd (fd, desired_fd); + + close (tempfd); + + return dupfd; +} + +static int +klibc_dup2 (int fd, int desired_fd) +{ + int dupfd; + struct stat sbuf; + + dupfd = dup2 (fd, desired_fd); + if (dupfd == -1 && errno == ENOTSUP \ + && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) + { + close (desired_fd); + + return klibc_dup2dirfd (fd, desired_fd); + } + + return dupfd; +} + +# define dup2 klibc_dup2 +#endif + +int +rpl_dup2 (int fd, int desired_fd) +{ + int result; + +#ifdef F_GETFL + /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF. + On Cygwin 1.5.x, dup2 (1, 1) returns 0. + On Cygwin 1.7.17, dup2 (1, -1) dumps core. + On Cygwin 1.7.25, dup2 (1, 256) can dump core. + On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ +# if HAVE_SETDTABLESIZE + setdtablesize (desired_fd + 1); +# endif + if (desired_fd < 0) + fd = desired_fd; + if (fd == desired_fd) + return fcntl (fd, F_GETFL) == -1 ? -1 : fd; +#endif + + result = dup2 (fd, desired_fd); + + /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */ + if (result == -1 && errno == EMFILE) + errno = EBADF; +#if REPLACE_FCHDIR + if (fd != desired_fd && result != -1) + result = _gl_register_dup (fd, result); +#endif + return result; +} diff --git a/jni/parted/libiconv/srclib/eloop-threshold.h b/jni/parted/libiconv/srclib/eloop-threshold.h new file mode 100755 index 0000000..8b31457 --- /dev/null +++ b/jni/parted/libiconv/srclib/eloop-threshold.h @@ -0,0 +1,83 @@ +/* Threshold at which to diagnose ELOOP. Generic version. + Copyright (C) 2012-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ELOOP_THRESHOLD_H +#define _ELOOP_THRESHOLD_H 1 + +#include +#ifdef _LIBC +# include +# define _GL_ATTRIBUTE_CONST __attribute__ ((const)) +#else +# include +# include "minmax.h" +# define __sysconf sysconf +# if (!defined SYMLOOP_MAX \ + && ! (defined _SC_SYMLOOP_MAX && defined _POSIX_SYMLOOP_MAX)) +# define SYMLOOP_MAX 8 +# endif +#endif + +/* POSIX specifies SYMLOOP_MAX as the "Maximum number of symbolic + links that can be reliably traversed in the resolution of a + pathname in the absence of a loop." This makes it a minimum that + we should certainly accept. But it leaves open the possibility + that more might sometimes work--just not "reliably". + + For example, Linux implements a complex policy whereby there is a + small limit on the number of direct symlink traversals (a symlink + to a symlink to a symlink), but larger limit on the total number of + symlink traversals overall. Hence the SYMLOOP_MAX number should be + the small one, but the limit library functions enforce on users + should be the larger one. + + So, we use the larger of the reported SYMLOOP_MAX (if any) and our + own constant MIN_ELOOP_THRESHOLD, below. This constant should be + large enough that it never rules out a file name and directory tree + that the underlying system (i.e. calls to 'open' et al) would + resolve successfully. It should be small enough that actual loops + are detected without a huge number of iterations. */ + +#ifndef MIN_ELOOP_THRESHOLD +# define MIN_ELOOP_THRESHOLD 40 +#endif + +/* Return the maximum number of symlink traversals to permit + before diagnosing ELOOP. */ +static inline unsigned int _GL_ATTRIBUTE_CONST +__eloop_threshold (void) +{ +#ifdef SYMLOOP_MAX + const int symloop_max = SYMLOOP_MAX; +#else + /* The function is marked 'const' even though we use memory and + call a function, because sysconf is required to return the + same value in every call and so it must always be safe to + call __eloop_threshold exactly once and reuse the value. */ + static long int sysconf_symloop_max; + if (sysconf_symloop_max == 0) + sysconf_symloop_max = __sysconf (_SC_SYMLOOP_MAX); + const unsigned int symloop_max = (sysconf_symloop_max <= 0 + ? _POSIX_SYMLOOP_MAX + : sysconf_symloop_max); +#endif + + return MAX (symloop_max, MIN_ELOOP_THRESHOLD); +} + +#endif /* eloop-threshold.h */ diff --git a/jni/parted/libiconv/srclib/error.c b/jni/parted/libiconv/srclib/error.c new file mode 100755 index 0000000..272d45e --- /dev/null +++ b/jni/parted/libiconv/srclib/error.c @@ -0,0 +1,411 @@ +/* Error handler for noninteractive utilities + Copyright (C) 1990-1998, 2000-2007, 2009-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by David MacKenzie . */ + +#if !_LIBC +# include +#endif + +#include "error.h" + +#include +#include +#include +#include + +#if !_LIBC && ENABLE_NLS +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#ifdef _LIBC +# include +# include +# include +# include +# define mbsrtowcs __mbsrtowcs +# define USE_UNLOCKED_IO 0 +# define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b) +# define _GL_ARG_NONNULL(a) +#else +# include "getprogname.h" +#endif + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#ifndef _ +# define _(String) String +#endif + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called. */ +unsigned int error_message_count; + +#ifdef _LIBC +/* In the GNU C library, there is a predefined variable for this. */ + +# define program_name program_invocation_name +# include +# include +# include + +/* In GNU libc we want do not want to use the common name 'error' directly. + Instead make it a weak alias. */ +extern void __error (int status, int errnum, const char *message, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); +extern void __error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, + ...) + __attribute__ ((__format__ (__printf__, 5, 6))); +# define error __error +# define error_at_line __error_at_line + +# include +# define fflush(s) _IO_fflush (s) +# undef putc +# define putc(c, fp) _IO_putc (c, fp) + +# include + +#else /* not _LIBC */ + +# include +# include + +# if defined _WIN32 && ! defined __CYGWIN__ +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include +/* Get _get_osfhandle. */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif +# endif + +/* The gnulib override of fcntl is not needed in this file. */ +# undef fcntl + +# if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) +# ifndef HAVE_DECL_STRERROR_R +"this configure-time declaration test was not run" +# endif +# if STRERROR_R_CHAR_P +char *strerror_r (int errnum, char *buf, size_t buflen); +# else +int strerror_r (int errnum, char *buf, size_t buflen); +# endif +# endif + +# define program_name getprogname () + +# if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r +# define __strerror_r strerror_r +# endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ +#endif /* not _LIBC */ + +#if !_LIBC +/* Return non-zero if FD is open. */ +static int +is_open (int fd) +{ +# if defined _WIN32 && ! defined __CYGWIN__ + /* On native Windows: The initial state of unassigned standard file + descriptors is that they are open but point to an INVALID_HANDLE_VALUE. + There is no fcntl, and the gnulib replacement fcntl does not support + F_GETFL. */ + return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; +# else +# ifndef F_GETFL +# error Please port fcntl to your platform +# endif + return 0 <= fcntl (fd, F_GETFL); +# endif +} +#endif + +static void +flush_stdout (void) +{ +#if !_LIBC + int stdout_fd; + +# if GNULIB_FREOPEN_SAFER + /* Use of gnulib's freopen-safer module normally ensures that + fileno (stdout) == 1 + whenever stdout is open. */ + stdout_fd = STDOUT_FILENO; +# else + /* POSIX states that fileno (stdout) after fclose is unspecified. But in + practice it is not a problem, because stdout is statically allocated and + the fd of a FILE stream is stored as a field in its allocated memory. */ + stdout_fd = fileno (stdout); +# endif + /* POSIX states that fflush (stdout) after fclose is unspecified; it + is safe in glibc, but not on all other platforms. fflush (NULL) + is always defined, but too draconian. */ + if (0 <= stdout_fd && is_open (stdout_fd)) +#endif + fflush (stdout); +} + +static void +print_errno_message (int errnum) +{ + char const *s; + +#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R + char errbuf[1024]; +# if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) + s = __strerror_r (errnum, errbuf, sizeof errbuf); +# else + if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) + s = errbuf; + else + s = 0; +# endif +#else + s = strerror (errnum); +#endif + +#if !_LIBC + if (! s) + s = _("Unknown system error"); +#endif + +#if _LIBC + __fxprintf (NULL, ": %s", s); +#else + fprintf (stderr, ": %s", s); +#endif +} + +static void _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3)) +error_tail (int status, int errnum, const char *message, va_list args) +{ +#if _LIBC + if (_IO_fwide (stderr, 0) > 0) + { + size_t len = strlen (message) + 1; + wchar_t *wmessage = NULL; + mbstate_t st; + size_t res; + const char *tmp; + bool use_malloc = false; + + while (1) + { + if (__libc_use_alloca (len * sizeof (wchar_t))) + wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); + else + { + if (!use_malloc) + wmessage = NULL; + + wchar_t *p = (wchar_t *) realloc (wmessage, + len * sizeof (wchar_t)); + if (p == NULL) + { + free (wmessage); + fputws_unlocked (L"out of memory\n", stderr); + return; + } + wmessage = p; + use_malloc = true; + } + + memset (&st, '\0', sizeof (st)); + tmp = message; + + res = mbsrtowcs (wmessage, &tmp, len, &st); + if (res != len) + break; + + if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) + { + /* This really should not happen if everything is fine. */ + res = (size_t) -1; + break; + } + + len *= 2; + } + + if (res == (size_t) -1) + { + /* The string cannot be converted. */ + if (use_malloc) + { + free (wmessage); + use_malloc = false; + } + wmessage = (wchar_t *) L"???"; + } + + __vfwprintf (stderr, wmessage, args); + + if (use_malloc) + free (wmessage); + } + else +#endif + vfprintf (stderr, message, args); + + ++error_message_count; + if (errnum) + print_errno_message (errnum); +#if _LIBC + __fxprintf (NULL, "\n"); +#else + putc ('\n', stderr); +#endif + fflush (stderr); + if (status) + exit (status); +} + + +/* Print the program name and error message MESSAGE, which is a printf-style + format string with optional args. + If ERRNUM is nonzero, print its corresponding system error message. + Exit with status STATUS if it is nonzero. */ +void +error (int status, int errnum, const char *message, ...) +{ + va_list args; + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + flush_stdout (); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s: ", program_name); +#else + fprintf (stderr, "%s: ", program_name); +#endif + } + + va_start (args, message); + error_tail (status, errnum, message, args); + va_end (args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +int error_one_per_line; + +void +error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, ...) +{ + va_list args; + + if (error_one_per_line) + { + static const char *old_file_name; + static unsigned int old_line_number; + + if (old_line_number == line_number + && (file_name == old_file_name + || (old_file_name != NULL + && file_name != NULL + && strcmp (old_file_name, file_name) == 0))) + + /* Simply return and print nothing. */ + return; + + old_file_name = file_name; + old_line_number = line_number; + } + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + flush_stdout (); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s:", program_name); +#else + fprintf (stderr, "%s:", program_name); +#endif + } + +#if _LIBC + __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", + file_name, line_number); +#else + fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", + file_name, line_number); +#endif + + va_start (args, message); + error_tail (status, errnum, message, args); + va_end (args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +#ifdef _LIBC +/* Make the weak alias. */ +# undef error +# undef error_at_line +weak_alias (__error, error) +weak_alias (__error_at_line, error_at_line) +#endif diff --git a/jni/parted/libiconv/srclib/error.h b/jni/parted/libiconv/srclib/error.h new file mode 100755 index 0000000..8813713 --- /dev/null +++ b/jni/parted/libiconv/srclib/error.h @@ -0,0 +1,66 @@ +/* Declaration for error-reporting function + Copyright (C) 1995-1997, 2003, 2006, 2008-2022 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _ERROR_H +#define _ERROR_H 1 + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* 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)'. */ + +extern void error (int __status, int __errnum, const char *__format, ...) +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 3, 4)) +#endif + ; + +extern void error_at_line (int __status, int __errnum, const char *__fname, + unsigned int __lineno, const char *__format, ...) +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 5, 6)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 5, 6)) +#endif + ; + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +extern DLL_VARIABLE void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called. */ +extern DLL_VARIABLE unsigned int error_message_count; + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +extern DLL_VARIABLE int error_one_per_line; + +#ifdef __cplusplus +} +#endif + +#endif /* error.h */ diff --git a/jni/parted/libiconv/srclib/fcntl.h b/jni/parted/libiconv/srclib/fcntl.h new file mode 100755 index 0000000..949feeb --- /dev/null +++ b/jni/parted/libiconv/srclib/fcntl.h @@ -0,0 +1,952 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Like , but with non-working flags defined to 0. + + Copyright (C) 2006-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* written by Paul Eggert */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_system_fcntl_h +/* Special invocation convention. */ + +/* Needed before . + May also define off_t to a 64-bit type on native Windows. */ +#include +/* On some systems other than glibc, is a prerequisite of + . On glibc systems, we would like to avoid namespace pollution. + But on glibc systems, includes inside an + extern "C" { ... } block, which leads to errors in C++ mode with the + overridden from gnulib. These errors are known to be gone + with g++ version >= 4.3. */ +#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) +# include +#endif +#include_next + +/* Native Windows platforms declare open(), creat() in . */ +#if (0 || 1 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include +#endif + +#else +/* Normal invocation convention. */ + +#ifndef _GL_FCNTL_H + +/* Needed before . + May also define off_t to a 64-bit type on native Windows. */ +#include +/* On some systems other than glibc, is a prerequisite of + . On glibc systems, we would like to avoid namespace pollution. + But on glibc systems, includes inside an + extern "C" { ... } block, which leads to errors in C++ mode with the + overridden from gnulib. These errors are known to be gone + with g++ version >= 4.3. */ +#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) +# include +#endif +/* The include_next requires a split double-inclusion guard. */ +#include_next + +/* Native Windows platforms declare open(), creat() in . */ +#if (0 || 1 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include +#endif + +#ifndef _GL_FCNTL_H +#define _GL_FCNTL_H + +#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ +# include +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Declare overridden functions. */ + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef creat +# define creat rpl_creat +# endif +_GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef creat +# define creat _creat +# endif +_GL_CXXALIAS_MDA (creat, int, (const char *filename, mode_t mode)); +# else +_GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); +# endif +_GL_CXXALIASWARN (creat); +#elif defined GNULIB_POSIXCHECK +# undef creat +/* Assume creat is always declared. */ +_GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - " + "use gnulib module creat for portability"); +#elif 1 +/* On native Windows, map 'creat' to '_creat', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::creat always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef creat +# define creat _creat +# endif +/* Need to cast, because in mingw the last argument is 'int mode'. */ +_GL_CXXALIAS_MDA_CAST (creat, int, (const char *filename, mode_t mode)); +# else +_GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); +# endif +_GL_CXXALIASWARN (creat); +#endif + +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fcntl +# define fcntl rpl_fcntl +# endif +_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); +_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); +# if !GNULIB_defined_rpl_fcntl +# define GNULIB_defined_rpl_fcntl 1 +# endif +# else +# if !1 +_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); +# if !GNULIB_defined_fcntl +# define GNULIB_defined_fcntl 1 +# endif +# endif +_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); +# endif +_GL_CXXALIASWARN (fcntl); +#elif defined GNULIB_POSIXCHECK +# undef fcntl +# if HAVE_RAW_DECL_FCNTL +_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " + "use gnulib module fcntl for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef open +# define open rpl_open +# endif +_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef open +# define open _open +# endif +_GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); +# else +_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); +# endif +/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a + default argument. _GL_CXXALIASWARN does not work in this case. */ +# if !defined __hpux +_GL_CXXALIASWARN (open); +# endif +#elif defined GNULIB_POSIXCHECK +# undef open +/* Assume open is always declared. */ +_GL_WARN_ON_USE (open, "open is not always POSIX compliant - " + "use gnulib module open for portability"); +#elif 1 +/* On native Windows, map 'open' to '_open', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::open always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef open +# define open _open +# endif +_GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); +# else +_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); +# endif +# if !defined __hpux +_GL_CXXALIASWARN (open); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef openat +# define openat rpl_openat +# endif +_GL_FUNCDECL_RPL (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...)); +# endif +_GL_CXXALIASWARN (openat); +#elif defined GNULIB_POSIXCHECK +# undef openat +# if HAVE_RAW_DECL_OPENAT +_GL_WARN_ON_USE (openat, "openat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +/* Fix up the FD_* macros, only known to be missing on mingw. */ + +#ifndef FD_CLOEXEC +# define FD_CLOEXEC 1 +#endif + +/* Fix up the supported F_* macros. Intentionally leave other F_* + macros undefined. Only known to be missing on mingw. */ + +#ifndef F_DUPFD_CLOEXEC +# define F_DUPFD_CLOEXEC 0x40000000 +/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ +# define GNULIB_defined_F_DUPFD_CLOEXEC 1 +#else +# define GNULIB_defined_F_DUPFD_CLOEXEC 0 +#endif + +#ifndef F_DUPFD +# define F_DUPFD 1 +#endif + +#ifndef F_GETFD +# define F_GETFD 2 +#endif + +/* Fix up the O_* macros. */ + +/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT + to values outside 'int' range, so omit these misdefinitions. + But avoid namespace pollution on non-AIX systems. */ +#ifdef _AIX +# include +# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) +# undef O_CLOEXEC +# endif +# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) +# undef O_NOFOLLOW +# endif +# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) +# undef O_TTY_INIT +# endif +#endif + +#if !defined O_DIRECT && defined O_DIRECTIO +/* Tru64 spells it 'O_DIRECTIO'. */ +# define O_DIRECT O_DIRECTIO +#endif + +#if !defined O_CLOEXEC && defined O_NOINHERIT +/* Mingw spells it 'O_NOINHERIT'. */ +# define O_CLOEXEC O_NOINHERIT +#endif + +#ifndef O_CLOEXEC +# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ +# define GNULIB_defined_O_CLOEXEC 1 +#else +# define GNULIB_defined_O_CLOEXEC 0 +#endif + +#ifndef O_DIRECT +# define O_DIRECT 0 +#endif + +#ifndef O_DIRECTORY +# define O_DIRECTORY 0 +#endif + +#ifndef O_DSYNC +# define O_DSYNC 0 +#endif + +#ifndef O_EXEC +# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ +#endif + +#ifndef O_IGNORE_CTTY +# define O_IGNORE_CTTY 0 +#endif + +#ifndef O_NDELAY +# define O_NDELAY 0 +#endif + +#ifndef O_NOATIME +# define O_NOATIME 0 +#endif + +#ifndef O_NONBLOCK +# define O_NONBLOCK O_NDELAY +#endif + +/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero + value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY + or to 0 as fallback. */ +#if 0 +# if O_NONBLOCK +# define GNULIB_defined_O_NONBLOCK 0 +# else +# define GNULIB_defined_O_NONBLOCK 1 +# undef O_NONBLOCK +# define O_NONBLOCK 0x40000000 +# endif +#endif + +#ifndef O_NOCTTY +# define O_NOCTTY 0 +#endif + +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +#ifndef O_NOLINK +# define O_NOLINK 0 +#endif + +#ifndef O_NOLINKS +# define O_NOLINKS 0 +#endif + +#ifndef O_NOTRANS +# define O_NOTRANS 0 +#endif + +#ifndef O_RSYNC +# define O_RSYNC 0 +#endif + +#ifndef O_SEARCH +# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ +#endif + +#ifndef O_SYNC +# define O_SYNC 0 +#endif + +#ifndef O_TTY_INIT +# define O_TTY_INIT 0 +#endif + +#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +# undef O_ACCMODE +# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +#endif + +/* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in fcntl.h */ +#if !defined O_BINARY && defined _O_BINARY + /* For MSC-compatible compilers. */ +# define O_BINARY _O_BINARY +# define O_TEXT _O_TEXT +#endif + +#if defined __BEOS__ || defined __HAIKU__ + /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ +# undef O_BINARY +# undef O_TEXT +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +# define O_TEXT 0 +#endif + +/* Fix up the AT_* macros. */ + +/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its + value exceeds INT_MAX, so its use as an int doesn't conform to the + C standard, and GCC and Sun C complain in some cases. If the bug + is present, undef AT_FDCWD here, so it can be redefined below. */ +#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 +# undef AT_FDCWD +#endif + +/* Use the same bit pattern as Solaris 9, but with the proper + signedness. The bit pattern is important, in case this actually is + Solaris with the above workaround. */ +#ifndef AT_FDCWD +# define AT_FDCWD (-3041965) +#endif + +/* Use the same values as Solaris 9. This shouldn't matter, but + there's no real reason to differ. */ +#ifndef AT_SYMLINK_NOFOLLOW +# define AT_SYMLINK_NOFOLLOW 4096 +#endif + +#ifndef AT_REMOVEDIR +# define AT_REMOVEDIR 1 +#endif + +/* Solaris 9 lacks these two, so just pick unique values. */ +#ifndef AT_SYMLINK_FOLLOW +# define AT_SYMLINK_FOLLOW 2 +#endif + +#ifndef AT_EACCESS +# define AT_EACCESS 4 +#endif + +/* Ignore this flag if not supported. */ +#ifndef AT_NO_AUTOMOUNT +# define AT_NO_AUTOMOUNT 0 +#endif + +#endif /* _GL_FCNTL_H */ +#endif /* _GL_FCNTL_H */ +#endif diff --git a/jni/parted/libiconv/srclib/fd-hook.h b/jni/parted/libiconv/srclib/fd-hook.h new file mode 100755 index 0000000..d6c4964 --- /dev/null +++ b/jni/parted/libiconv/srclib/fd-hook.h @@ -0,0 +1,119 @@ +/* Hook for making file descriptor functions close(), ioctl() extensible. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +#ifndef FD_HOOK_H +#define FD_HOOK_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Currently, this entire code is only needed for the handling of sockets + on native Windows platforms. */ +#if WINDOWS_SOCKETS + + +/* Type of function that closes FD. */ +typedef int (*gl_close_fn) (int fd); + +/* Type of function that applies a control request to FD. */ +typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); + +/* An element of the list of file descriptor hooks. + In CLOS (Common Lisp Object System) speak, it consists of an "around" + method for the close() function and an "around" method for the ioctl() + function. + The fields of this structure are considered private. */ +struct fd_hook +{ + /* Doubly linked list. */ + struct fd_hook *private_next; + struct fd_hook *private_prev; + /* Function that treats the types of FD that it knows about and calls + execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ + int (*private_close_fn) (const struct fd_hook *remaining_list, + gl_close_fn primary, + int fd); + /* Function that treats the types of FD that it knows about and calls + execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a + fallback. */ + int (*private_ioctl_fn) (const struct fd_hook *remaining_list, + gl_ioctl_fn primary, + int fd, int request, void *arg); +}; + +/* This type of function closes FD, applying special knowledge for the FD + types it knows about, and calls + execute_close_hooks (REMAINING_LIST, PRIMARY, FD) + for the other FD types. + In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, + and PRIMARY is the "primary" method for close(). */ +typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, + gl_close_fn primary, + int fd); + +/* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. + Return 0 or -1, like close() would do. */ +extern int execute_close_hooks (const struct fd_hook *remaining_list, + gl_close_fn primary, + int fd); + +/* Execute all close hooks, with PRIMARY as "primary" method. + Return 0 or -1, like close() would do. */ +extern int execute_all_close_hooks (gl_close_fn primary, int fd); + +/* This type of function applies a control request to FD, applying special + knowledge for the FD types it knows about, and calls + execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) + for the other FD types. + In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, + and PRIMARY is the "primary" method for ioctl(). */ +typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, + gl_ioctl_fn primary, + int fd, int request, void *arg); + +/* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. + Return 0 or -1, like ioctl() would do. */ +extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, + gl_ioctl_fn primary, + int fd, int request, void *arg); + +/* Execute all ioctl hooks, with PRIMARY as "primary" method. + Return 0 or -1, like ioctl() would do. */ +extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, + int fd, int request, void *arg); + +/* Add a function pair to the list of file descriptor hooks. + CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. + The LINK variable points to a piece of memory which is guaranteed to be + accessible until the corresponding call to unregister_fd_hook. */ +extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, + struct fd_hook *link); + +/* Removes a hook from the list of file descriptor hooks. */ +extern void unregister_fd_hook (struct fd_hook *link); + + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* FD_HOOK_H */ diff --git a/jni/parted/libiconv/srclib/filename.h b/jni/parted/libiconv/srclib/filename.h new file mode 100755 index 0000000..ab77ca2 --- /dev/null +++ b/jni/parted/libiconv/srclib/filename.h @@ -0,0 +1,112 @@ +/* Basic filename support macros. + Copyright (C) 2001-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* From Paul Eggert and Jim Meyering. */ + +#ifndef _FILENAME_H +#define _FILENAME_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Filename support. + ISSLASH(C) tests whether C is a directory separator + character. + HAS_DEVICE(Filename) tests whether Filename contains a device + specification. + FILE_SYSTEM_PREFIX_LEN(Filename) length of the device specification + at the beginning of Filename, + index of the part consisting of + alternating components and slashes. + FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + 1 when a non-empty device specification + can be followed by an empty or relative + part, + 0 when a non-empty device specification + must be followed by a slash, + 0 when device specification don't exist. + IS_ABSOLUTE_FILE_NAME(Filename) + tests whether Filename is independent of + any notion of "current directory". + IS_RELATIVE_FILE_NAME(Filename) + tests whether Filename may be concatenated + to a directory filename. + Note: On native Windows, OS/2, DOS, "c:" is neither an absolute nor a + relative file name! + IS_FILE_NAME_WITH_DIR(Filename) tests whether Filename contains a device + or directory specification. + */ +#if defined _WIN32 || defined __CYGWIN__ \ + || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__ + /* Native Windows, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') + /* Internal macro: Tests whether a character is a drive letter. */ +# define _IS_DRIVE_LETTER(C) \ + (((C) >= 'A' && (C) <= 'Z') || ((C) >= 'a' && (C) <= 'z')) + /* Help the compiler optimizing it. This assumes ASCII. */ +# undef _IS_DRIVE_LETTER +# define _IS_DRIVE_LETTER(C) \ + (((unsigned int) (C) | ('a' - 'A')) - 'a' <= 'z' - 'a') +# define HAS_DEVICE(Filename) \ + (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':') +# define FILE_SYSTEM_PREFIX_LEN(Filename) (HAS_DEVICE (Filename) ? 2 : 0) +# ifdef __CYGWIN__ +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +# else + /* On native Windows, OS/2, DOS, the system has the notion of a + "current directory" on each drive. */ +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 +# endif +# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define IS_ABSOLUTE_FILE_NAME(Filename) \ + ISSLASH ((Filename)[FILE_SYSTEM_PREFIX_LEN (Filename)]) +# else +# define IS_ABSOLUTE_FILE_NAME(Filename) \ + (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename)) +# endif +# define IS_RELATIVE_FILE_NAME(Filename) \ + (! (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename))) +# define IS_FILE_NAME_WITH_DIR(Filename) \ + (strchr ((Filename), '/') != NULL || strchr ((Filename), '\\') != NULL \ + || HAS_DEVICE (Filename)) +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +# define HAS_DEVICE(Filename) ((void) (Filename), 0) +# define FILE_SYSTEM_PREFIX_LEN(Filename) ((void) (Filename), 0) +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +# define IS_ABSOLUTE_FILE_NAME(Filename) ISSLASH ((Filename)[0]) +# define IS_RELATIVE_FILE_NAME(Filename) (! ISSLASH ((Filename)[0])) +# define IS_FILE_NAME_WITH_DIR(Filename) (strchr ((Filename), '/') != NULL) +#endif + +/* Deprecated macros. For backward compatibility with old users of the + 'filename' module. */ +#define IS_ABSOLUTE_PATH IS_ABSOLUTE_FILE_NAME +#define IS_PATH_WITH_DIR IS_FILE_NAME_WITH_DIR + + +#ifdef __cplusplus +} +#endif + +#endif /* _FILENAME_H */ diff --git a/jni/parted/libiconv/srclib/fstat.c b/jni/parted/libiconv/srclib/fstat.c new file mode 100755 index 0000000..3928c86 --- /dev/null +++ b/jni/parted/libiconv/srclib/fstat.c @@ -0,0 +1,94 @@ +/* fstat() replacement. + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* If the user's config.h happens to include , let it include only + the system's here, so that orig_fstat doesn't recurse to + rpl_fstat. */ +#define __need_system_sys_stat_h +#include + +/* Get the original definition of fstat. It might be defined as a macro. */ +#include +#include +#undef __need_system_sys_stat_h + +#if defined _WIN32 && ! defined __CYGWIN__ +# define WINDOWS_NATIVE +#endif + +#if !defined WINDOWS_NATIVE + +static int +orig_fstat (int fd, struct stat *buf) +{ + return fstat (fd, buf); +} + +#endif + +/* Specification. */ +#ifdef __osf__ +/* Write "sys/stat.h" here, not , otherwise OSF/1 5.1 DTK cc + eliminates this include because of the preliminary #include + above. */ +# include "sys/stat.h" +#else +# include +#endif + +#include "stat-time.h" + +#include +#include +#ifdef WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif +# include "stat-w32.h" +#endif + +int +rpl_fstat (int fd, struct stat *buf) +{ +#if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY + /* Handle the case when rpl_open() used a dummy file descriptor to work + around an open() that can't normally visit directories. */ + const char *name = _gl_directory_name (fd); + if (name != NULL) + return stat (name, buf); +#endif + +#ifdef WINDOWS_NATIVE + /* Fill the fields ourselves, because the original fstat function returns + values for st_atime, st_mtime, st_ctime that depend on the current time + zone. See + */ + HANDLE h = (HANDLE) _get_osfhandle (fd); + + if (h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + return _gl_fstat_by_handle (h, NULL, buf); +#else + return stat_time_normalize (orig_fstat (fd, buf), buf); +#endif +} diff --git a/jni/parted/libiconv/srclib/getprogname.h b/jni/parted/libiconv/srclib/getprogname.h new file mode 100755 index 0000000..9a35e58 --- /dev/null +++ b/jni/parted/libiconv/srclib/getprogname.h @@ -0,0 +1,40 @@ +/* Program name management. + Copyright (C) 2016-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_GETPROGNAME_H +#define _GL_GETPROGNAME_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return the base name of the executing program. + On native Windows this will usually end in ".exe" or ".EXE". */ +#ifndef HAVE_GETPROGNAME +extern char const *getprogname (void) +# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME + _GL_ATTRIBUTE_PURE +# endif + ; +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/jni/parted/libiconv/srclib/gettext.h b/jni/parted/libiconv/srclib/gettext.h new file mode 100755 index 0000000..b3577a0 --- /dev/null +++ b/jni/parted/libiconv/srclib/gettext.h @@ -0,0 +1,300 @@ +/* Convenience header for conditional use of GNU . + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2022 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option + or through "#define ENABLE NLS 0" before including this file. */ +#if defined ENABLE_NLS && ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include + +/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by + the gettext() and ngettext() macros. This is an alternative to calling + textdomain(), and is useful for libraries. */ +# ifdef DEFAULT_TEXT_DOMAIN +# undef gettext +# define gettext(Msgid) \ + dgettext (DEFAULT_TEXT_DOMAIN, Msgid) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) +# endif + +#else + +/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which + chokes if dcgettext is defined as a macro. So include it now, to make + later inclusions of a NOP. We don't include + as well because people using "gettext.h" will not include , + and also including would fail on SunOS 4, whereas + is OK. */ +#if defined(__sun) +# include +#endif + +/* Many header files from the libstdc++ coming with g++ 3.3 or newer include + , which chokes if dcgettext is defined as a macro. So include + it now, to make later inclusions of a NOP. */ +#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) +# include +# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H +# include +# endif +#endif + +/* Disabled NLS. + The casts to 'const char *' serve the purpose of producing warnings + for invalid uses of the value returned from these functions. + On pre-ANSI systems without 'const', the config.h file is supposed to + contain "#define const". */ +# undef gettext +# define gettext(Msgid) ((const char *) (Msgid)) +# undef dgettext +# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) +# undef dcgettext +# define dcgettext(Domainname, Msgid, Category) \ + ((void) (Category), dgettext (Domainname, Msgid)) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 \ + ? ((void) (Msgid2), (const char *) (Msgid1)) \ + : ((void) (Msgid1), (const char *) (Msgid2))) +# undef dngettext +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) +# undef dcngettext +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) +# undef textdomain +# define textdomain(Domainname) ((const char *) (Domainname)) +# undef bindtextdomain +# define bindtextdomain(Domainname, Dirname) \ + ((void) (Domainname), (const char *) (Dirname)) +# undef bind_textdomain_codeset +# define bind_textdomain_codeset(Domainname, Codeset) \ + ((void) (Domainname), (const char *) (Codeset)) + +#endif + +/* Prefer gnulib's setlocale override over libintl's setlocale override. */ +#ifdef GNULIB_defined_setlocale +# undef setlocale +# define setlocale rpl_setlocale +#endif + +/* A pseudo function call that serves as a marker for the automated + extraction of messages, but does not call gettext(). The run-time + translation is done at a different place in the code. + The argument, String, should be a literal string. Concatenated strings + and other string expressions won't work. + The macro's expansion is not parenthesized, so that it is suitable as + initializer for static 'char[]' or 'const char[]' variables. */ +#define gettext_noop(String) String + +/* The separator between msgctxt and msgid in a .mo file. */ +#define GETTEXT_CONTEXT_GLUE "\004" + +/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a + MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be + short and rarely need to change. + The letter 'p' stands for 'particular' or 'special'. */ +#ifdef DEFAULT_TEXT_DOMAIN +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#else +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#endif +#define dpgettext(Domainname, Msgctxt, Msgid) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) +#ifdef DEFAULT_TEXT_DOMAIN +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#else +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#endif +#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) + +#if defined __GNUC__ || defined __clang__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +pgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + int category) +{ + const char *translation = dcgettext (domain, msg_ctxt_id, category); + if (translation == msg_ctxt_id) + return msgid; + else + return translation; +} + +#if defined __GNUC__ || defined __clang__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +npgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + const char *translation = + dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + if (translation == msg_ctxt_id || translation == msgid_plural) + return (n == 1 ? msgid : msgid_plural); + else + return translation; +} + +/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID + can be arbitrary expressions. But for string literals these macros are + less efficient than those above. */ + +#include + +/* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported. + This relates to the -Wvla and -Wvla-larger-than warnings, enabled in + the default GCC many warnings set. This allows programs to disable use + of VLAs, which may be unintended, or may be awkward to support portably, + or may have security implications due to non-deterministic stack usage. */ + +#if (!defined GNULIB_NO_VLA \ + && defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ + && !defined __STDC_NO_VLA__) +# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 +#else +# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 +#endif + +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS +#include +#endif + +#define pgettext_expr(Msgctxt, Msgid) \ + dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) +#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ + dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) + +#if defined __GNUC__ || defined __clang__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + int found_translation; + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcgettext (domain, msg_ctxt_id, category); + found_translation = (translation != msg_ctxt_id); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (found_translation) + return translation; + } + return msgid; +} + +#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) + +#if defined __GNUC__ || defined __clang__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcnpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + int found_translation; + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (found_translation) + return translation; + } + return (n == 1 ? msgid : msgid_plural); +} + +#endif /* _LIBGETTEXT_H */ diff --git a/jni/parted/libiconv/srclib/idx.h b/jni/parted/libiconv/srclib/idx.h new file mode 100755 index 0000000..c3669dd --- /dev/null +++ b/jni/parted/libiconv/srclib/idx.h @@ -0,0 +1,134 @@ +/* A type for indices and sizes. + Copyright (C) 2020-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _IDX_H +#define _IDX_H + +/* Get ptrdiff_t. */ +#include + +/* Get PTRDIFF_MAX. */ +#include + +/* The type 'idx_t' holds an (array) index or an (object) size. + Its implementation promotes to a signed integer type, + which can hold the values + 0..2^63-1 (on 64-bit platforms) or + 0..2^31-1 (on 32-bit platforms). + + Why a signed integer type? + + * Security: Signed types can be checked for overflow via + '-fsanitize=undefined', but unsigned types cannot. + + * Comparisons without surprises: ISO C99 § 6.3.1.8 specifies a few + surprising results for comparisons, such as + + (int) -3 < (unsigned long) 7 => false + (int) -3 < (unsigned int) 7 => false + and on 32-bit machines: + (long) -3 < (unsigned int) 7 => false + + This is surprising because the natural comparison order is by + value in the realm of infinite-precision signed integers (ℤ). + + The best way to get rid of such surprises is to use signed types + for numerical integer values, and use unsigned types only for + bit masks and enums. + + Why not use 'size_t' directly? + + * Because 'size_t' is an unsigned type, and a signed type is better. + See above. + + Why not use 'ssize_t'? + + * 'ptrdiff_t' is more portable; it is standardized by ISO C + whereas 'ssize_t' is standardized only by POSIX. + + * 'ssize_t' is not required to be as wide as 'size_t', and some + now-obsolete POSIX platforms had 'size_t' wider than 'ssize_t'. + + * Conversely, some now-obsolete platforms had 'ptrdiff_t' wider + than 'size_t', which can be a win and conforms to POSIX. + + Won't this cause a problem with objects larger than PTRDIFF_MAX? + + * Typical modern or large platforms do not allocate such objects, + so this is not much of a problem in practice; for example, you + can safely write 'idx_t len = strlen (s);'. To port to older + small platforms where allocations larger than PTRDIFF_MAX could + in theory be a problem, you can use Gnulib's ialloc module, or + functions like ximalloc in Gnulib's xalloc module. + + Why not use 'ptrdiff_t' directly? + + * Maintainability: When reading and modifying code, it helps to know that + a certain variable cannot have negative values. For example, when you + have a loop + + int n = ...; + for (int i = 0; i < n; i++) ... + + or + + ptrdiff_t n = ...; + for (ptrdiff_t i = 0; i < n; i++) ... + + you have to ask yourself "what if n < 0?". Whereas in + + idx_t n = ...; + for (idx_t i = 0; i < n; i++) ... + + you know that this case cannot happen. + + Similarly, when a programmer writes + + idx_t = ptr2 - ptr1; + + there is an implied assertion that ptr1 and ptr2 point into the same + object and that ptr1 <= ptr2. + + * Being future-proof: In the future, range types (integers which are + constrained to a certain range of values) may be added to C compilers + or to the C standard. Several programming languages (Ada, Haskell, + Common Lisp, Pascal) already have range types. Such range types may + help producing good code and good warnings. The type 'idx_t' could + then be typedef'ed to a range type that is signed after promotion. */ + +/* In the future, idx_t could be typedef'ed to a signed range type. + The clang "extended integer types", supported in Clang 11 or newer + , + are a special case of range types. However, these types don't support binary + operators with plain integer types (e.g. expressions such as x > 1). + Therefore, they don't behave like signed types (and not like unsigned types + either). So, we cannot use them here. */ + +/* Use the signed type 'ptrdiff_t'. */ +/* Note: ISO C does not mandate that 'size_t' and 'ptrdiff_t' have the same + size, but it is so on all platforms we have seen since 1990. */ +typedef ptrdiff_t idx_t; + +/* IDX_MAX is the maximum value of an idx_t. */ +#define IDX_MAX PTRDIFF_MAX + +/* So far no need has been found for an IDX_WIDTH macro. + Perhaps there should be another macro IDX_VALUE_BITS that does not + count the sign bit and is therefore one less than PTRDIFF_WIDTH. */ + +#endif /* _IDX_H */ diff --git a/jni/parted/libiconv/srclib/intprops.h b/jni/parted/libiconv/srclib/intprops.h new file mode 100755 index 0000000..d4a917f --- /dev/null +++ b/jni/parted/libiconv/srclib/intprops.h @@ -0,0 +1,642 @@ +/* intprops.h -- properties of integer types + + Copyright (C) 2001-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +#ifndef _GL_INTPROPS_H +#define _GL_INTPROPS_H + +#include + +/* Return a value with the common real type of E and V and the value of V. + Do not evaluate E. */ +#define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) + +/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see + . */ +#define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if the arithmetic type T is an integer type. bool counts as + an integer. */ +#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) + +/* True if the real type T is signed. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* Return 1 if the real expression E, after promotion, has a + signed or floating type. Do not evaluate E. */ +#define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) + + +/* Minimum and maximum values for integer types and expressions. */ + +/* The width in bits of the integer type or expression T. + Do not evaluate T. T must not be a bit-field expression. + Padding bits are not supported; this is checked at compile-time below. */ +#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) + +/* The maximum and minimum values for the integer type T. */ +#define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) +#define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) + +/* The maximum and minimum values for the type of the expression E, + after integer promotion. E is not evaluated. */ +#define _GL_INT_MINIMUM(e) \ + (EXPR_SIGNED (e) \ + ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_CONVERT (e, 0)) +#define _GL_INT_MAXIMUM(e) \ + (EXPR_SIGNED (e) \ + ? _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_NEGATE_CONVERT (e, 1)) +#define _GL_SIGNED_INT_MAXIMUM(e) \ + (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1) + +/* Work around OpenVMS incompatibility with C99. */ +#if !defined LLONG_MAX && defined __INT64_MAX +# define LLONG_MAX __INT64_MAX +# define LLONG_MIN __INT64_MIN +#endif + +/* This include file assumes that signed types are two's complement without + padding bits; the above macros have undefined behavior otherwise. + If this is a problem for you, please let us know how to fix it for your host. + This assumption is tested by the intprops-tests module. */ + +/* Does the __typeof__ keyword work? This could be done by + 'configure', but for now it's easier to do it by hand. */ +#if (2 <= __GNUC__ \ + || (4 <= __clang_major__) \ + || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ + || (0x5110 <= __SUNPRO_C && !__STDC__)) +# define _GL_HAVE___TYPEOF__ 1 +#else +# define _GL_HAVE___TYPEOF__ 0 +#endif + +/* Return 1 if the integer type or expression T might be signed. Return 0 + if it is definitely unsigned. T must not be a bit-field expression. + This macro does not evaluate its argument, and expands to an + integer constant expression. */ +#if _GL_HAVE___TYPEOF__ +# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) +#else +# define _GL_SIGNED_TYPE_OR_EXPR(t) 1 +#endif + +/* Bound on length of the string representing an unsigned integer + value representable in B bits. log10 (2.0) < 146/485. The + smallest value of B where this bound is not tight is 2621. */ +#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) + +/* Bound on length of the string representing an integer type or expression T. + T must not be a bit-field expression. + + Subtract 1 for the sign bit if T is signed, and then add 1 more for + a minus sign if needed. + + Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is + unsigned, this macro may overestimate the true bound by one byte when + applied to unsigned types of size 2, 4, 16, ... bytes. */ +#define INT_STRLEN_BOUND(t) \ + (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + + _GL_SIGNED_TYPE_OR_EXPR (t)) + +/* Bound on buffer size needed to represent an integer type or expression T, + including the terminating null. T must not be a bit-field expression. */ +#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) + + +/* Range overflow checks. + + The INT__RANGE_OVERFLOW macros return 1 if the corresponding C + operators might not yield numerically correct answers due to + arithmetic overflow. They do not rely on undefined or + implementation-defined behavior. Their implementations are simple + and straightforward, but they are harder to use and may be less + efficient than the INT__WRAPV, INT__OK, and + INT__OVERFLOW macros described below. + + Example usage: + + long int i = ...; + long int j = ...; + if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) + printf ("multiply would overflow"); + else + printf ("product is %ld", i * j); + + Restrictions on *_RANGE_OVERFLOW macros: + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, + so the arguments should not have side effects. The arithmetic + arguments (including the MIN and MAX arguments) must be of the same + integer type after the usual arithmetic conversions, and the type + must have minimum value MIN and maximum MAX. Unsigned types should + use a zero MIN of the proper type. + + Because all arguments are subject to integer promotions, these + macros typically do not work on types narrower than 'int'. + + These macros are tuned for constant MIN and MAX. For commutative + operations such as A + B, they are also tuned for constant B. */ + +/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (a) < (min) - (b) \ + : (max) - (b) < (a)) + +/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (max) + (b) < (a) \ + : (a) < (min) + (b)) + +/* Return 1 if - A would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ + ((min) < 0 \ + ? (a) < - (max) \ + : 0 < (a)) + +/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Avoid && and || as they tickle + bugs in Sun C 5.11 2010/08/13 and other compilers; see + . */ +#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? ((a) < 0 \ + ? (a) < (max) / (b) \ + : (b) == -1 \ + ? 0 \ + : (min) / (b) < (a)) \ + : (b) == 0 \ + ? 0 \ + : ((a) < 0 \ + ? (a) < (min) / (b) \ + : (max) / (b) < (a))) + +/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. */ +#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ + ((min) < 0 && (b) == -1 && (a) < - (max)) + +/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. + Mathematically, % should never overflow, but on x86-like hosts + INT_MIN % -1 traps, and the C standard permits this, so treat this + as an overflow too. */ +#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ + INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) + +/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Here, MIN and MAX are for A only, and B need + not be of the same type as the other arguments. The C standard says that + behavior is undefined for shifts unless 0 <= B < wordwidth, and that when + A is negative then A << B has undefined behavior and A >> B has + implementation-defined behavior, but do not check these other + restrictions. */ +#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ + ((a) < 0 \ + ? (a) < (min) >> (b) \ + : (max) >> (b) < (a)) + +/* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow + (A, B, P) work when P is non-null. */ +#ifdef __EDG__ +/* EDG-based compilers like nvc 22.1 cannot add 64-bit signed to unsigned + . */ +# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow) +/* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x, + see . */ +#elif 7 <= __GNUC__ +# define _GL_HAS_BUILTIN_ADD_OVERFLOW 1 +#else +# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 +#endif + +/* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */ +#if defined __clang_major__ && __clang_major__ < 14 +/* Work around Clang bug . */ +# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 +#else +# define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW +#endif + +/* True if __builtin_add_overflow_p (A, B, C) works, and similarly for + __builtin_sub_overflow_p and __builtin_mul_overflow_p. */ +#ifdef __EDG__ +/* In EDG-based compilers like ICC 2021.3 and earlier, + __builtin_add_overflow_p etc. are not treated as integral constant + expressions even when all arguments are. */ +# define _GL_HAS_BUILTIN_OVERFLOW_P 0 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_OVERFLOW_P __has_builtin (__builtin_mul_overflow_p) +#else +# define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) +#endif + +/* The _GL*_OVERFLOW macros have the same restrictions as the + *_RANGE_OVERFLOW macros, except that they do not assume that operands + (e.g., A and B) have the same type as MIN and MAX. Instead, they assume + that the result (e.g., A + B) has that type. */ +#if _GL_HAS_BUILTIN_OVERFLOW_P +# define _GL_ADD_OVERFLOW(a, b, min, max) \ + __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) +# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) +# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) +#else +# define _GL_ADD_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? (b) <= (a) + (b) \ + : (b) < 0 ? (a) <= (a) + (b) \ + : (a) + (b) < (b)) +# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? 1 \ + : (b) < 0 ? (a) - (b) <= (a) \ + : (a) < (b)) +# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ + || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) +#endif +#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (b) <= (a) + (b) - 1 \ + : (b) < 0 && (a) + (b) <= (a)) +#define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ + : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) + +/* Return a nonzero value if A is a mathematical multiple of B, where + A is unsigned, B is negative, and MAX is the maximum value of A's + type. A's type must be the same as (A % B)'s type. Normally (A % + -B == 0) suffices, but things get tricky if -B would overflow. */ +#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ + (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ + ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ + ? (a) \ + : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ + : (a) % - (b)) \ + == 0) + +/* Check for integer overflow, and report low order bits of answer. + + The INT__OVERFLOW macros return 1 if the corresponding C operators + might not yield numerically correct answers due to arithmetic overflow. + The INT__WRAPV macros compute the low-order bits of the sum, + difference, and product of two C integers, and return 1 if these + low-order bits are not numerically correct. + These macros work correctly on all known practical hosts, and do not rely + on undefined behavior due to signed arithmetic overflow. + + Example usage, assuming A and B are long int: + + if (INT_MULTIPLY_OVERFLOW (a, b)) + printf ("result would overflow\n"); + else + printf ("result is %ld (no overflow)\n", a * b); + + Example usage with WRAPV flavor: + + long int result; + bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); + printf ("result is %ld (%s)\n", result, + overflow ? "after overflow" : "no overflow"); + + Restrictions on these macros: + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, so the + arguments should not have side effects. + + The WRAPV macros are not constant expressions. They support only + +, binary -, and *. + + Because the WRAPV macros convert the result, they report overflow + in different circumstances than the OVERFLOW macros do. For + example, in the typical case with 16-bit 'short' and 32-bit 'int', + if A, B and R are all of type 'short' then INT_ADD_OVERFLOW (A, B) + returns false because the addition cannot overflow after A and B + are converted to 'int', whereas INT_ADD_WRAPV (A, B, &R) returns + true or false depending on whether the sum fits into 'short'. + + These macros are tuned for their last input argument being a constant. + + Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, + A % B, and A << B would overflow, respectively. */ + +#define INT_ADD_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) +#define INT_SUBTRACT_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) +#if _GL_HAS_BUILTIN_OVERFLOW_P +# define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) +#else +# define INT_NEGATE_OVERFLOW(a) \ + INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) +#endif +#define INT_MULTIPLY_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) +#define INT_DIVIDE_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) +#define INT_REMAINDER_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) +#define INT_LEFT_SHIFT_OVERFLOW(a, b) \ + INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ + _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) + +/* Return 1 if the expression A B would overflow, + where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, + assuming MIN and MAX are the minimum and maximum for the result type. + Arguments should be free of side effects. */ +#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ + op_result_overflow (a, b, \ + _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ + _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) + +/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. + Return 1 if the result overflows. See above for restrictions. */ +#if _GL_HAS_BUILTIN_ADD_OVERFLOW +# define INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r) +# define INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r) +#else +# define INT_ADD_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW) +# define INT_SUBTRACT_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW) +#endif +#if _GL_HAS_BUILTIN_MUL_OVERFLOW +# if ((9 < __GNUC__ + (3 <= __GNUC_MINOR__) \ + || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) \ + && !defined __EDG__) +# define INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r) +# else + /* Work around GCC bug 91450. */ +# define INT_MULTIPLY_WRAPV(a, b, r) \ + ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \ + && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \ + ? ((void) __builtin_mul_overflow (a, b, r), 1) \ + : __builtin_mul_overflow (a, b, r)) +# endif +#else +# define INT_MULTIPLY_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW) +#endif + +/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 + https://llvm.org/bugs/show_bug.cgi?id=25390 + For now, assume all versions of GCC-like compilers generate bogus + warnings for _Generic. This matters only for compilers that + lack relevant builtins. */ +#if __GNUC__ || defined __clang__ +# define _GL__GENERIC_BOGUS 1 +#else +# define _GL__GENERIC_BOGUS 0 +#endif + +/* Store the low-order bits of A B into *R, where OP specifies + the operation and OVERFLOW the overflow predicate. Return 1 if the + result overflows. See above for restrictions. */ +#if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS +# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ + (_Generic \ + (*(r), \ + signed char: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + signed char, SCHAR_MIN, SCHAR_MAX), \ + unsigned char: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned char, 0, UCHAR_MAX), \ + short int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + short int, SHRT_MIN, SHRT_MAX), \ + unsigned short int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned short int, 0, USHRT_MAX), \ + int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + int, INT_MIN, INT_MAX), \ + unsigned int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned int, 0, UINT_MAX), \ + long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX), \ + unsigned long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + unsigned long int, 0, ULONG_MAX), \ + long long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + long long int, LLONG_MIN, LLONG_MAX), \ + unsigned long long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + unsigned long long int, 0, ULLONG_MAX))) +#else +/* Store the low-order bits of A B into *R, where OP specifies + the operation and OVERFLOW the overflow predicate. If *R is + signed, its type is ST with bounds SMIN..SMAX; otherwise its type + is UT with bounds U..UMAX. ST and UT are narrower than int. + Return 1 if the result overflows. See above for restrictions. */ +# if _GL_HAVE___TYPEOF__ +# define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ + (TYPE_SIGNED (__typeof__ (*(r))) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax)) +# else +# define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ + (overflow (a, b, smin, smax) \ + ? (overflow (a, b, 0, umax) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \ + : (overflow (a, b, 0, umax) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0))) +# endif + +# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ + (sizeof *(r) == sizeof (signed char) \ + ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ + signed char, SCHAR_MIN, SCHAR_MAX, \ + unsigned char, UCHAR_MAX) \ + : sizeof *(r) == sizeof (short int) \ + ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ + short int, SHRT_MIN, SHRT_MAX, \ + unsigned short int, USHRT_MAX) \ + : sizeof *(r) == sizeof (int) \ + ? (EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + int, INT_MIN, INT_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned int, 0, UINT_MAX)) \ + : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) +# ifdef LLONG_MAX +# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ + (sizeof *(r) == sizeof (long int) \ + ? (EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + unsigned long int, 0, ULONG_MAX)) \ + : (EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + long long int, LLONG_MIN, LLONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + unsigned long long int, 0, ULLONG_MAX))) +# else +# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ + (EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + unsigned long int, 0, ULONG_MAX)) +# endif +#endif + +/* Store the low-order bits of A B into *R, where the operation + is given by OP. Use the unsigned type UT for calculation to avoid + overflow problems. *R's type is T, with extrema TMIN and TMAX. + T must be a signed integer type. Return 1 if the result overflows. */ +#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ + (overflow (a, b, tmin, tmax) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) + +/* Return the low-order bits of A B, where the operation is given + by OP. Use the unsigned type UT for calculation to avoid undefined + behavior on signed integer overflow, and convert the result to type T. + UT is at least as wide as T and is no narrower than unsigned int, + T is two's complement, and there is no padding or trap representations. + Assume that converting UT to T yields the low-order bits, as is + done in all known two's-complement C compilers. E.g., see: + https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html + + According to the C standard, converting UT to T yields an + implementation-defined result or signal for values outside T's + range. However, code that works around this theoretical problem + runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: + https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html + As the compiler bug is real, don't try to work around the + theoretical problem. */ + +#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ + ((t) ((ut) (a) op (ut) (b))) + +/* Return true if the numeric values A + B, A - B, A * B fall outside + the range TMIN..TMAX. Arguments should be integer expressions + without side effects. TMIN should be signed and nonpositive. + TMAX should be positive, and should be signed unless TMIN is zero. */ +#define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \ + ((b) < 0 \ + ? (((tmin) \ + ? ((EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \ + && (a) < (tmin) - (b)) \ + : (a) <= -1 - (b)) \ + || ((EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \ + : (a) < 0 \ + ? (((tmin) \ + ? ((EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \ + && (b) < (tmin) - (a)) \ + : (b) <= -1 - (a)) \ + || ((EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \ + && (tmax) < (a) + (b))) \ + : (tmax) < (b) || (tmax) - (b) < (a)) +#define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \ + (((a) < 0) == ((b) < 0) \ + ? ((a) < (b) \ + ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \ + : (tmax) < (a) - (b)) \ + : (a) < 0 \ + ? ((!EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \ + || (a) - (tmin) < (b)) \ + : ((! (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ + && EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \ + && (tmax) <= -1 - (b)) \ + || (tmax) + (b) < (a))) +#define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \ + ((b) < 0 \ + ? ((a) < 0 \ + ? (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ + ? (a) < (tmax) / (b) \ + : ((INT_NEGATE_OVERFLOW (b) \ + ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (+ (b)) - 1) \ + : (tmax) / -(b)) \ + <= -1 - (a))) \ + : INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \ + ? (EXPR_SIGNED (a) \ + ? 0 < (a) + (tmin) \ + : 0 < (a) && -1 - (tmin) < (a) - 1) \ + : (tmin) / (b) < (a)) \ + : (b) == 0 \ + ? 0 \ + : ((a) < 0 \ + ? (INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \ + ? (EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \ + : (tmin) / (a) < (b)) \ + : (tmax) / (b) < (a))) + +/* The following macros compute A + B, A - B, and A * B, respectively. + If no overflow occurs, they set *R to the result and return 1; + otherwise, they return 0 and may modify *R. + + Example usage: + + long int result; + if (INT_ADD_OK (a, b, &result)) + printf ("result is %ld\n", result); + else + printf ("overflow\n"); + + A, B, and *R should be integers; they need not be the same type, + and they need not be all signed or all unsigned. + + These macros work correctly on all known practical hosts, and do not rely + on undefined behavior due to signed arithmetic overflow. + + These macros are not constant expressions. + + These macros may evaluate their arguments zero or multiple times, so the + arguments should not have side effects. + + These macros are tuned for B being a constant. */ + +#define INT_ADD_OK(a, b, r) ! INT_ADD_WRAPV (a, b, r) +#define INT_SUBTRACT_OK(a, b, r) ! INT_SUBTRACT_WRAPV (a, b, r) +#define INT_MULTIPLY_OK(a, b, r) ! INT_MULTIPLY_WRAPV (a, b, r) + +#endif /* _GL_INTPROPS_H */ diff --git a/jni/parted/libiconv/srclib/inttypes.h b/jni/parted/libiconv/srclib/inttypes.h new file mode 100755 index 0000000..445a599 --- /dev/null +++ b/jni/parted/libiconv/srclib/inttypes.h @@ -0,0 +1,1509 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 2006-2022 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Derek Price. + This file is part of gnulib. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* + * ISO C 99 for platforms that lack it. + * + */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* Include the original if it exists, and if this file + has not been included yet or if this file includes gnulib stdint.h + which in turn includes this file. + The include_next requires a split double-inclusion guard. */ +#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H +# if 1 + + /* Some pre-C++11 implementations need this. */ +# if defined __cplusplus && ! defined __STDC_FORMAT_MACROS +# define __STDC_FORMAT_MACROS 1 +# endif + +# include_next + +# define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H +# endif +#endif + +#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H +#define INTTYPES_H + +/* Include or the gnulib replacement. + But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include +#endif +/* Get CHAR_BIT, INT_MAX, LONG_MAX, etc. */ +#include +/* On mingw, __USE_MINGW_ANSI_STDIO only works if is also included */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include +#endif + +#if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1) +# error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to ." +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* 7.8.1 Macros for format specifiers */ + +#if defined _TNS_R_TARGET + /* Tandem NonStop R series and compatible platforms released before + July 2005 support %Ld but not %lld. */ +# define _LONG_LONG_FORMAT_PREFIX "L" +#else +# define _LONG_LONG_FORMAT_PREFIX "ll" +#endif + +#if !defined PRId8 +# ifdef INT8_MAX +# define PRId8 "d" +# endif +#endif +#if !defined PRIi8 +# ifdef INT8_MAX +# define PRIi8 "i" +# endif +#endif +#if !defined PRIo8 +# ifdef UINT8_MAX +# define PRIo8 "o" +# endif +#endif +#if !defined PRIu8 +# ifdef UINT8_MAX +# define PRIu8 "u" +# endif +#endif +#if !defined PRIx8 +# ifdef UINT8_MAX +# define PRIx8 "x" +# endif +#endif +#if !defined PRIX8 +# ifdef UINT8_MAX +# define PRIX8 "X" +# endif +#endif +#if !defined PRId16 +# ifdef INT16_MAX +# define PRId16 "d" +# endif +#endif +#if !defined PRIi16 +# ifdef INT16_MAX +# define PRIi16 "i" +# endif +#endif +#if !defined PRIo16 +# ifdef UINT16_MAX +# define PRIo16 "o" +# endif +#endif +#if !defined PRIu16 +# ifdef UINT16_MAX +# define PRIu16 "u" +# endif +#endif +#if !defined PRIx16 +# ifdef UINT16_MAX +# define PRIx16 "x" +# endif +#endif +#if !defined PRIX16 +# ifdef UINT16_MAX +# define PRIX16 "X" +# endif +#endif +#if !defined PRId32 +# ifdef INT32_MAX +# define PRId32 "d" +# endif +#endif +#if !defined PRIi32 +# ifdef INT32_MAX +# define PRIi32 "i" +# endif +#endif +#if !defined PRIo32 +# ifdef UINT32_MAX +# define PRIo32 "o" +# endif +#endif +#if !defined PRIu32 +# ifdef UINT32_MAX +# define PRIu32 "u" +# endif +#endif +#if !defined PRIx32 +# ifdef UINT32_MAX +# define PRIx32 "x" +# endif +#endif +#if !defined PRIX32 +# ifdef UINT32_MAX +# define PRIX32 "X" +# endif +#endif +#ifdef INT64_MAX +# if (0 ? defined _LP64 : defined _LP64) +# define _PRI64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _PRI64_PREFIX "I64" +# elif LONG_MAX >> 30 == 1 +# define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined PRId64 +# define PRId64 _PRI64_PREFIX "d" +# endif +# if !defined PRIi64 +# define PRIi64 _PRI64_PREFIX "i" +# endif +#endif +#ifdef UINT64_MAX +# if (0 ? defined _LP64 : defined _LP64) +# define _PRIu64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _PRIu64_PREFIX "I64" +# elif ULONG_MAX >> 31 == 1 +# define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined PRIo64 +# define PRIo64 _PRIu64_PREFIX "o" +# endif +# if !defined PRIu64 +# define PRIu64 _PRIu64_PREFIX "u" +# endif +# if !defined PRIx64 +# define PRIx64 _PRIu64_PREFIX "x" +# endif +# if !defined PRIX64 +# define PRIX64 _PRIu64_PREFIX "X" +# endif +#endif + +#if !defined PRIdLEAST8 +# define PRIdLEAST8 "d" +#endif +#if !defined PRIiLEAST8 +# define PRIiLEAST8 "i" +#endif +#if !defined PRIoLEAST8 +# define PRIoLEAST8 "o" +#endif +#if !defined PRIuLEAST8 +# define PRIuLEAST8 "u" +#endif +#if !defined PRIxLEAST8 +# define PRIxLEAST8 "x" +#endif +#if !defined PRIXLEAST8 +# define PRIXLEAST8 "X" +#endif +#if !defined PRIdLEAST16 +# define PRIdLEAST16 "d" +#endif +#if !defined PRIiLEAST16 +# define PRIiLEAST16 "i" +#endif +#if !defined PRIoLEAST16 +# define PRIoLEAST16 "o" +#endif +#if !defined PRIuLEAST16 +# define PRIuLEAST16 "u" +#endif +#if !defined PRIxLEAST16 +# define PRIxLEAST16 "x" +#endif +#if !defined PRIXLEAST16 +# define PRIXLEAST16 "X" +#endif +#if !defined PRIdLEAST32 +# define PRIdLEAST32 "d" +#endif +#if !defined PRIiLEAST32 +# define PRIiLEAST32 "i" +#endif +#if !defined PRIoLEAST32 +# define PRIoLEAST32 "o" +#endif +#if !defined PRIuLEAST32 +# define PRIuLEAST32 "u" +#endif +#if !defined PRIxLEAST32 +# define PRIxLEAST32 "x" +#endif +#if !defined PRIXLEAST32 +# define PRIXLEAST32 "X" +#endif +#ifdef INT64_MAX +# if !defined PRIdLEAST64 +# define PRIdLEAST64 PRId64 +# endif +# if !defined PRIiLEAST64 +# define PRIiLEAST64 PRIi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined PRIoLEAST64 +# define PRIoLEAST64 PRIo64 +# endif +# if !defined PRIuLEAST64 +# define PRIuLEAST64 PRIu64 +# endif +# if !defined PRIxLEAST64 +# define PRIxLEAST64 PRIx64 +# endif +# if !defined PRIXLEAST64 +# define PRIXLEAST64 PRIX64 +# endif +#endif + +#if !defined PRIdFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define PRIdFAST8 PRId64 +# else +# define PRIdFAST8 "d" +# endif +#endif +#if !defined PRIiFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define PRIiFAST8 PRIi64 +# else +# define PRIiFAST8 "i" +# endif +#endif +#if !defined PRIoFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIoFAST8 PRIo64 +# else +# define PRIoFAST8 "o" +# endif +#endif +#if !defined PRIuFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIuFAST8 PRIu64 +# else +# define PRIuFAST8 "u" +# endif +#endif +#if !defined PRIxFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIxFAST8 PRIx64 +# else +# define PRIxFAST8 "x" +# endif +#endif +#if !defined PRIXFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIXFAST8 PRIX64 +# else +# define PRIXFAST8 "X" +# endif +#endif +#if !defined PRIdFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define PRIdFAST16 PRId64 +# else +# define PRIdFAST16 "d" +# endif +#endif +#if !defined PRIiFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define PRIiFAST16 PRIi64 +# else +# define PRIiFAST16 "i" +# endif +#endif +#if !defined PRIoFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIoFAST16 PRIo64 +# else +# define PRIoFAST16 "o" +# endif +#endif +#if !defined PRIuFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIuFAST16 PRIu64 +# else +# define PRIuFAST16 "u" +# endif +#endif +#if !defined PRIxFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIxFAST16 PRIx64 +# else +# define PRIxFAST16 "x" +# endif +#endif +#if !defined PRIXFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIXFAST16 PRIX64 +# else +# define PRIXFAST16 "X" +# endif +#endif +#if !defined PRIdFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define PRIdFAST32 PRId64 +# else +# define PRIdFAST32 "d" +# endif +#endif +#if !defined PRIiFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define PRIiFAST32 PRIi64 +# else +# define PRIiFAST32 "i" +# endif +#endif +#if !defined PRIoFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIoFAST32 PRIo64 +# else +# define PRIoFAST32 "o" +# endif +#endif +#if !defined PRIuFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIuFAST32 PRIu64 +# else +# define PRIuFAST32 "u" +# endif +#endif +#if !defined PRIxFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIxFAST32 PRIx64 +# else +# define PRIxFAST32 "x" +# endif +#endif +#if !defined PRIXFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIXFAST32 PRIX64 +# else +# define PRIXFAST32 "X" +# endif +#endif +#ifdef INT64_MAX +# if !defined PRIdFAST64 +# define PRIdFAST64 PRId64 +# endif +# if !defined PRIiFAST64 +# define PRIiFAST64 PRIi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined PRIoFAST64 +# define PRIoFAST64 PRIo64 +# endif +# if !defined PRIuFAST64 +# define PRIuFAST64 PRIu64 +# endif +# if !defined PRIxFAST64 +# define PRIxFAST64 PRIx64 +# endif +# if !defined PRIXFAST64 +# define PRIXFAST64 PRIX64 +# endif +#endif + +#if !defined PRIdMAX +# if 1 +# define PRIdMAX PRId64 +# else +# define PRIdMAX "ld" +# endif +#endif +#if !defined PRIiMAX +# if 1 +# define PRIiMAX PRIi64 +# else +# define PRIiMAX "li" +# endif +#endif +#if !defined PRIoMAX +# if 1 +# define PRIoMAX PRIo64 +# else +# define PRIoMAX "lo" +# endif +#endif +#if !defined PRIuMAX +# if 1 +# define PRIuMAX PRIu64 +# else +# define PRIuMAX "lu" +# endif +#endif +#if !defined PRIxMAX +# if 1 +# define PRIxMAX PRIx64 +# else +# define PRIxMAX "lx" +# endif +#endif +#if !defined PRIXMAX +# if 1 +# define PRIXMAX PRIX64 +# else +# define PRIXMAX "lX" +# endif +#endif + +#if !defined PRIdPTR +# ifdef INTPTR_MAX +# define PRIdPTR __PRIPTR_PREFIX "d" +# endif +#endif +#if !defined PRIiPTR +# ifdef INTPTR_MAX +# define PRIiPTR __PRIPTR_PREFIX "i" +# endif +#endif +#if !defined PRIoPTR +# ifdef UINTPTR_MAX +# define PRIoPTR __PRIPTR_PREFIX "o" +# endif +#endif +#if !defined PRIuPTR +# ifdef UINTPTR_MAX +# define PRIuPTR __PRIPTR_PREFIX "u" +# endif +#endif +#if !defined PRIxPTR +# ifdef UINTPTR_MAX +# define PRIxPTR __PRIPTR_PREFIX "x" +# endif +#endif +#if !defined PRIXPTR +# ifdef UINTPTR_MAX +# define PRIXPTR __PRIPTR_PREFIX "X" +# endif +#endif + +#if !defined SCNd8 +# ifdef INT8_MAX +# define SCNd8 "hhd" +# endif +#endif +#if !defined SCNi8 +# ifdef INT8_MAX +# define SCNi8 "hhi" +# endif +#endif +#if !defined SCNo8 +# ifdef UINT8_MAX +# define SCNo8 "hho" +# endif +#endif +#if !defined SCNu8 +# ifdef UINT8_MAX +# define SCNu8 "hhu" +# endif +#endif +#if !defined SCNx8 +# ifdef UINT8_MAX +# define SCNx8 "hhx" +# endif +#endif +#if !defined SCNd16 +# ifdef INT16_MAX +# define SCNd16 "hd" +# endif +#endif +#if !defined SCNi16 +# ifdef INT16_MAX +# define SCNi16 "hi" +# endif +#endif +#if !defined SCNo16 +# ifdef UINT16_MAX +# define SCNo16 "ho" +# endif +#endif +#if !defined SCNu16 +# ifdef UINT16_MAX +# define SCNu16 "hu" +# endif +#endif +#if !defined SCNx16 +# ifdef UINT16_MAX +# define SCNx16 "hx" +# endif +#endif +#if !defined SCNd32 +# ifdef INT32_MAX +# define SCNd32 "d" +# endif +#endif +#if !defined SCNi32 +# ifdef INT32_MAX +# define SCNi32 "i" +# endif +#endif +#if !defined SCNo32 +# ifdef UINT32_MAX +# define SCNo32 "o" +# endif +#endif +#if !defined SCNu32 +# ifdef UINT32_MAX +# define SCNu32 "u" +# endif +#endif +#if !defined SCNx32 +# ifdef UINT32_MAX +# define SCNx32 "x" +# endif +#endif +#ifdef INT64_MAX +# if (0 ? defined _LP64 : defined _LP64) +# define _SCN64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _SCN64_PREFIX "I64" +# elif LONG_MAX >> 30 == 1 +# define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined SCNd64 +# define SCNd64 _SCN64_PREFIX "d" +# endif +# if !defined SCNi64 +# define SCNi64 _SCN64_PREFIX "i" +# endif +#endif +#ifdef UINT64_MAX +# if (0 ? defined _LP64 : defined _LP64) +# define _SCNu64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _SCNu64_PREFIX "I64" +# elif ULONG_MAX >> 31 == 1 +# define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined SCNo64 +# define SCNo64 _SCNu64_PREFIX "o" +# endif +# if !defined SCNu64 +# define SCNu64 _SCNu64_PREFIX "u" +# endif +# if !defined SCNx64 +# define SCNx64 _SCNu64_PREFIX "x" +# endif +#endif + +#if !defined SCNdLEAST8 +# define SCNdLEAST8 "hhd" +#endif +#if !defined SCNiLEAST8 +# define SCNiLEAST8 "hhi" +#endif +#if !defined SCNoLEAST8 +# define SCNoLEAST8 "hho" +#endif +#if !defined SCNuLEAST8 +# define SCNuLEAST8 "hhu" +#endif +#if !defined SCNxLEAST8 +# define SCNxLEAST8 "hhx" +#endif +#if !defined SCNdLEAST16 +# define SCNdLEAST16 "hd" +#endif +#if !defined SCNiLEAST16 +# define SCNiLEAST16 "hi" +#endif +#if !defined SCNoLEAST16 +# define SCNoLEAST16 "ho" +#endif +#if !defined SCNuLEAST16 +# define SCNuLEAST16 "hu" +#endif +#if !defined SCNxLEAST16 +# define SCNxLEAST16 "hx" +#endif +#if !defined SCNdLEAST32 +# define SCNdLEAST32 "d" +#endif +#if !defined SCNiLEAST32 +# define SCNiLEAST32 "i" +#endif +#if !defined SCNoLEAST32 +# define SCNoLEAST32 "o" +#endif +#if !defined SCNuLEAST32 +# define SCNuLEAST32 "u" +#endif +#if !defined SCNxLEAST32 +# define SCNxLEAST32 "x" +#endif +#ifdef INT64_MAX +# if !defined SCNdLEAST64 +# define SCNdLEAST64 SCNd64 +# endif +# if !defined SCNiLEAST64 +# define SCNiLEAST64 SCNi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined SCNoLEAST64 +# define SCNoLEAST64 SCNo64 +# endif +# if !defined SCNuLEAST64 +# define SCNuLEAST64 SCNu64 +# endif +# if !defined SCNxLEAST64 +# define SCNxLEAST64 SCNx64 +# endif +#endif + +#if !defined SCNdFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define SCNdFAST8 SCNd64 +# elif INT_FAST8_MAX == 0x7fff +# define SCNdFAST8 "hd" +# elif INT_FAST8_MAX == 0x7f +# define SCNdFAST8 "hhd" +# else +# define SCNdFAST8 "d" +# endif +#endif +#if !defined SCNiFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define SCNiFAST8 SCNi64 +# elif INT_FAST8_MAX == 0x7fff +# define SCNiFAST8 "hi" +# elif INT_FAST8_MAX == 0x7f +# define SCNiFAST8 "hhi" +# else +# define SCNiFAST8 "i" +# endif +#endif +#if !defined SCNoFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNoFAST8 SCNo64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNoFAST8 "ho" +# elif UINT_FAST8_MAX == 0xff +# define SCNoFAST8 "hho" +# else +# define SCNoFAST8 "o" +# endif +#endif +#if !defined SCNuFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNuFAST8 SCNu64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNuFAST8 "hu" +# elif UINT_FAST8_MAX == 0xff +# define SCNuFAST8 "hhu" +# else +# define SCNuFAST8 "u" +# endif +#endif +#if !defined SCNxFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNxFAST8 SCNx64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNxFAST8 "hx" +# elif UINT_FAST8_MAX == 0xff +# define SCNxFAST8 "hhx" +# else +# define SCNxFAST8 "x" +# endif +#endif +#if !defined SCNdFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define SCNdFAST16 SCNd64 +# elif INT_FAST16_MAX == 0x7fff +# define SCNdFAST16 "hd" +# else +# define SCNdFAST16 "d" +# endif +#endif +#if !defined SCNiFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define SCNiFAST16 SCNi64 +# elif INT_FAST16_MAX == 0x7fff +# define SCNiFAST16 "hi" +# else +# define SCNiFAST16 "i" +# endif +#endif +#if !defined SCNoFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNoFAST16 SCNo64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNoFAST16 "ho" +# else +# define SCNoFAST16 "o" +# endif +#endif +#if !defined SCNuFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNuFAST16 SCNu64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNuFAST16 "hu" +# else +# define SCNuFAST16 "u" +# endif +#endif +#if !defined SCNxFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNxFAST16 SCNx64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNxFAST16 "hx" +# else +# define SCNxFAST16 "x" +# endif +#endif +#if !defined SCNdFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define SCNdFAST32 SCNd64 +# else +# define SCNdFAST32 "d" +# endif +#endif +#if !defined SCNiFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define SCNiFAST32 SCNi64 +# else +# define SCNiFAST32 "i" +# endif +#endif +#if !defined SCNoFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNoFAST32 SCNo64 +# else +# define SCNoFAST32 "o" +# endif +#endif +#if !defined SCNuFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNuFAST32 SCNu64 +# else +# define SCNuFAST32 "u" +# endif +#endif +#if !defined SCNxFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNxFAST32 SCNx64 +# else +# define SCNxFAST32 "x" +# endif +#endif +#ifdef INT64_MAX +# if !defined SCNdFAST64 +# define SCNdFAST64 SCNd64 +# endif +# if !defined SCNiFAST64 +# define SCNiFAST64 SCNi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined SCNoFAST64 +# define SCNoFAST64 SCNo64 +# endif +# if !defined SCNuFAST64 +# define SCNuFAST64 SCNu64 +# endif +# if !defined SCNxFAST64 +# define SCNxFAST64 SCNx64 +# endif +#endif + +#if !defined SCNdMAX +# if 1 +# define SCNdMAX SCNd64 +# else +# define SCNdMAX "ld" +# endif +#endif +#if !defined SCNiMAX +# if 1 +# define SCNiMAX SCNi64 +# else +# define SCNiMAX "li" +# endif +#endif +#if !defined SCNoMAX +# if 1 +# define SCNoMAX SCNo64 +# else +# define SCNoMAX "lo" +# endif +#endif +#if !defined SCNuMAX +# if 1 +# define SCNuMAX SCNu64 +# else +# define SCNuMAX "lu" +# endif +#endif +#if !defined SCNxMAX +# if 1 +# define SCNxMAX SCNx64 +# else +# define SCNxMAX "lx" +# endif +#endif + +#if !defined SCNdPTR +# ifdef INTPTR_MAX +# define SCNdPTR __PRIPTR_PREFIX "d" +# endif +#endif +#if !defined SCNiPTR +# ifdef INTPTR_MAX +# define SCNiPTR __PRIPTR_PREFIX "i" +# endif +#endif +#if !defined SCNoPTR +# ifdef UINTPTR_MAX +# define SCNoPTR __PRIPTR_PREFIX "o" +# endif +#endif +#if !defined SCNuPTR +# ifdef UINTPTR_MAX +# define SCNuPTR __PRIPTR_PREFIX "u" +# endif +#endif +#if !defined SCNxPTR +# ifdef UINTPTR_MAX +# define SCNxPTR __PRIPTR_PREFIX "x" +# endif +#endif + +/* 7.8.2 Functions for greatest-width integer types */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if 0 +# if !1 +extern intmax_t imaxabs (intmax_t); +# endif +#elif defined GNULIB_POSIXCHECK +# undef imaxabs +# if HAVE_RAW_DECL_IMAXABS +_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " + "use gnulib module imaxabs for portability"); +# endif +#endif + +#if 0 +# if !1 +# if !GNULIB_defined_imaxdiv_t +typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; +# define GNULIB_defined_imaxdiv_t 1 +# endif +# endif +# if !1 +extern imaxdiv_t imaxdiv (intmax_t, intmax_t); +# endif +#elif defined GNULIB_POSIXCHECK +# undef imaxdiv +# if HAVE_RAW_DECL_IMAXDIV +_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " + "use gnulib module imaxdiv for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtoimax +# define strtoimax rpl_strtoimax +# endif +_GL_FUNCDECL_RPL (strtoimax, intmax_t, + (const char *restrict, char **restrict, int) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoimax, intmax_t, + (const char *restrict, char **restrict, int)); +# else +# if !1 +# undef strtoimax +_GL_FUNCDECL_SYS (strtoimax, intmax_t, + (const char *restrict, char **restrict, int) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoimax, intmax_t, + (const char *restrict, char **restrict, int)); +# endif +_GL_CXXALIASWARN (strtoimax); +#elif defined GNULIB_POSIXCHECK +# undef strtoimax +# if HAVE_RAW_DECL_STRTOIMAX +_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " + "use gnulib module strtoimax for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtoumax +# define strtoumax rpl_strtoumax +# endif +_GL_FUNCDECL_RPL (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int)); +# else +# if !1 +# undef strtoumax +_GL_FUNCDECL_SYS (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int)); +# endif +_GL_CXXALIASWARN (strtoumax); +#elif defined GNULIB_POSIXCHECK +# undef strtoumax +# if HAVE_RAW_DECL_STRTOUMAX +_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " + "use gnulib module strtoumax for portability"); +# endif +#endif + +/* Don't bother defining or declaring wcstoimax and wcstoumax, since + wide-character functions like this are hardly ever useful. */ + +#ifdef __cplusplus +} +#endif + +#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ diff --git a/jni/parted/libiconv/srclib/libc-config.h b/jni/parted/libiconv/srclib/libc-config.h new file mode 100755 index 0000000..a56665b --- /dev/null +++ b/jni/parted/libiconv/srclib/libc-config.h @@ -0,0 +1,202 @@ +/* System definitions for code taken from the GNU C Library + + Copyright 2017-2022 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, see + . */ + +/* Written by Paul Eggert. */ + +/* This is intended to be a good-enough substitute for glibc system + macros like those defined in , so that Gnulib code + shared with glibc can do this as the first #include: + + #ifndef _LIBC + # include + #endif + + When compiled as part of glibc this is a no-op; when compiled as + part of Gnulib this includes Gnulib's and defines macros + that glibc library code would normally assume. + + Note: This header file MUST NOT be included by public header files + of Gnulib. */ + +#include + +/* On glibc this includes and and #defines + _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 and + DragonFlyBSD 5.9 it includes which defines __nonnull. + Elsewhere it is harmless. */ +#include + +/* From glibc . */ +#ifndef __set_errno +# define __set_errno(val) (errno = (val)) +#endif + +/* From glibc . */ + +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#ifndef __glibc_clang_prereq +# if defined __clang_major__ && defined __clang_minor__ +# ifdef __apple_build_version__ +/* Apple for some reason renumbers __clang_major__ and __clang_minor__. + Gnulib code uses only __glibc_clang_prereq (3, 5); map it to + 6000000 <= __apple_build_version__. Support for other calls to + __glibc_clang_prereq can be added here as needed. */ +# define __glibc_clang_prereq(maj, min) \ + ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0) +# else +# define __glibc_clang_prereq(maj, min) \ + ((maj) < __clang_major__ + ((min) <= __clang_minor__)) +# endif +# else +# define __glibc_clang_prereq(maj, min) 0 +# endif +#endif + +#ifndef __attribute_nonnull__ +/* either does not exist, or is too old for Gnulib. + Prepare to include , which is Gnulib's version of a + more-recent glibc . */ + +/* Define _FEATURES_H so that does not include . */ +# ifndef _FEATURES_H +# define _FEATURES_H 1 +# endif +/* Define __GNULIB_CDEFS so that does not attempt to include + nonexistent files. */ +# define __GNULIB_CDEFS +/* Undef the macros unconditionally defined by our copy of glibc + , so that they do not clash with any system-defined + versions. */ +# undef _SYS_CDEFS_H +# undef __ASMNAME +# undef __ASMNAME2 +# undef __BEGIN_DECLS +# undef __CONCAT +# undef __END_DECLS +# undef __HAVE_GENERIC_SELECTION +# undef __LDBL_COMPAT +# undef __LDBL_REDIR +# undef __LDBL_REDIR1 +# undef __LDBL_REDIR1_DECL +# undef __LDBL_REDIR1_NTH +# undef __LDBL_REDIR2_DECL +# undef __LDBL_REDIR_DECL +# undef __LDBL_REDIR_NTH +# undef __LEAF +# undef __LEAF_ATTR +# undef __NTH +# undef __NTHNL +# undef __REDIRECT +# undef __REDIRECT_LDBL +# undef __REDIRECT_NTH +# undef __REDIRECT_NTHNL +# undef __REDIRECT_NTH_LDBL +# undef __STRING +# undef __THROW +# undef __THROWNL +# undef __attr_access +# undef __attr_access_none +# undef __attr_dealloc +# undef __attr_dealloc_free +# undef __attribute__ +# undef __attribute_alloc_align__ +# undef __attribute_alloc_size__ +# undef __attribute_artificial__ +# undef __attribute_const__ +# undef __attribute_deprecated__ +# undef __attribute_deprecated_msg__ +# undef __attribute_format_arg__ +# undef __attribute_format_strfmon__ +# undef __attribute_malloc__ +# undef __attribute_maybe_unused__ +# undef __attribute_noinline__ +# undef __attribute_nonstring__ +# undef __attribute_pure__ +# undef __attribute_returns_twice__ +# undef __attribute_used__ +# undef __attribute_warn_unused_result__ +# undef __bos +# undef __bos0 +# undef __errordecl +# undef __extension__ +# undef __extern_always_inline +# undef __extern_inline +# undef __flexarr +# undef __fortified_attr_access +# undef __fortify_function +# undef __glibc_c99_flexarr_available +# undef __glibc_fortify +# undef __glibc_fortify_n +# undef __glibc_has_attribute +# undef __glibc_has_builtin +# undef __glibc_has_extension +# undef __glibc_likely +# undef __glibc_macro_warning +# undef __glibc_macro_warning1 +# undef __glibc_objsize +# undef __glibc_objsize0 +# undef __glibc_safe_len_cond +# undef __glibc_safe_or_unknown_len +# undef __glibc_unlikely +# undef __glibc_unsafe_len +# undef __glibc_unsigned_or_positive +# undef __inline +# undef __ptr_t +# undef __restrict +# undef __restrict_arr +# undef __va_arg_pack +# undef __va_arg_pack_len +# undef __warnattr +# undef __wur + +/* Include our copy of glibc . */ +# include + +/* __inline is too pessimistic for non-GCC. */ +# undef __inline +# ifndef HAVE___INLINE +# if 199901 <= __STDC_VERSION__ || defined inline +# define __inline inline +# else +# define __inline +# endif +# endif + +#endif /* defined __glibc_likely */ + + +/* A substitute for glibc , good enough for Gnulib. */ +#define attribute_hidden +#define libc_hidden_proto(name) +#define libc_hidden_def(name) +#define libc_hidden_weak(name) +#define libc_hidden_ver(local, name) +#define strong_alias(name, aliasname) +#define weak_alias(name, aliasname) + +/* A substitute for glibc , good enough for Gnulib. */ +#define SHLIB_COMPAT(lib, introduced, obsoleted) 0 +#define compat_symbol(lib, local, symbol, version) extern int dummy +#define versioned_symbol(lib, local, symbol, version) extern int dummy diff --git a/jni/parted/libiconv/srclib/limits.h b/jni/parted/libiconv/srclib/limits.h new file mode 100755 index 0000000..4f37f3c --- /dev/null +++ b/jni/parted/libiconv/srclib/limits.h @@ -0,0 +1,132 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright 2016-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined _GL_ALREADY_INCLUDING_LIMITS_H +/* Special invocation convention: + On Haiku/x86_64, we have a sequence of nested includes + -> -> . + In this situation, LONG_MAX and INT_MAX are not yet defined, + therefore we should not attempt to define LONG_BIT. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_LIMITS_H + +# define _GL_ALREADY_INCLUDING_LIMITS_H + +/* The include_next requires a split double-inclusion guard. */ +# include_next + +# undef _GL_ALREADY_INCLUDING_LIMITS_H + +#ifndef _GL_LIMITS_H +#define _GL_LIMITS_H + +#ifndef LLONG_MIN +# if defined LONG_LONG_MIN /* HP-UX 11.31 */ +# define LLONG_MIN LONG_LONG_MIN +# elif defined LONGLONG_MIN /* IRIX 6.5 */ +# define LLONG_MIN LONGLONG_MIN +# elif defined __GNUC__ +# define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) +# endif +#endif +#ifndef LLONG_MAX +# if defined LONG_LONG_MAX /* HP-UX 11.31 */ +# define LLONG_MAX LONG_LONG_MAX +# elif defined LONGLONG_MAX /* IRIX 6.5 */ +# define LLONG_MAX LONGLONG_MAX +# elif defined __GNUC__ +# define LLONG_MAX __LONG_LONG_MAX__ +# endif +#endif +#ifndef ULLONG_MAX +# if defined ULONG_LONG_MAX /* HP-UX 11.31 */ +# define ULLONG_MAX ULONG_LONG_MAX +# elif defined ULONGLONG_MAX /* IRIX 6.5 */ +# define ULLONG_MAX ULONGLONG_MAX +# elif defined __GNUC__ +# define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) +# endif +#endif + +/* The number of usable bits in an unsigned or signed integer type + with minimum value MIN and maximum value MAX, as an int expression + suitable in #if. Cover all known practical hosts. This + implementation exploits the fact that MAX is 1 less than a power of + 2, and merely counts the number of 1 bits in MAX; "COBn" means + "count the number of 1 bits in the low-order n bits"). */ +#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) +#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) +#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) +#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) +#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) +#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) +#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) + +#ifndef WORD_BIT +/* Assume 'int' is 32 bits wide. */ +# define WORD_BIT 32 +#endif +#ifndef LONG_BIT +/* Assume 'long' is 32 or 64 bits wide. */ +# if LONG_MAX == INT_MAX +# define LONG_BIT 32 +# else +# define LONG_BIT 64 +# endif +#endif + +/* Macros specified by C2x and by ISO/IEC TS 18661-1:2014. */ + +#if (! defined ULLONG_WIDTH \ + && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__ \ + || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))) +# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) +# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) +# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) +# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) +# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) +# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) +# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) +# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) +# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) +# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) +# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) +#endif + +/* Macros specified by C2x. */ + +#if (! defined BOOL_WIDTH \ + && (defined _GNU_SOURCE \ + || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))) +# define BOOL_MAX 1 +# define BOOL_WIDTH 1 +#endif + +#endif /* _GL_LIMITS_H */ +#endif /* _GL_LIMITS_H */ +#endif diff --git a/jni/parted/libiconv/srclib/localcharset.h b/jni/parted/libiconv/srclib/localcharset.h new file mode 100755 index 0000000..62efbf3 --- /dev/null +++ b/jni/parted/libiconv/srclib/localcharset.h @@ -0,0 +1,137 @@ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003, 2009-2022 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _LOCALCHARSET_H +#define _LOCALCHARSET_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. + If the canonical name cannot be determined, the result is a non-canonical + name. */ +extern const char * locale_charset (void); + +/* About GNU canonical names for character encodings: + + Every canonical name must be supported by GNU libiconv. Support by GNU libc + is also desirable. + + The name is case insensitive. Usually an upper case MIME charset name is + preferred. + + The current list of these GNU canonical names is: + + name MIME? used by which systems + (darwin = Mac OS X, windows = native Windows) + + ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin + ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-3 Y glibc solaris cygwin + ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin + ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-6 Y glibc aix hpux solaris cygwin + ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos + ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos + ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-14 glibc cygwin + ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin + KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin + KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin + KOI8-T glibc + CP437 dos + CP775 dos + CP850 aix osf dos + CP852 dos + CP855 dos + CP856 aix + CP857 dos + CP861 dos + CP862 dos + CP864 dos + CP865 dos + CP866 freebsd netbsd openbsd darwin dos + CP869 dos + CP874 windows dos + CP922 aix + CP932 aix cygwin windows dos + CP943 aix zos + CP949 osf darwin windows dos + CP950 windows dos + CP1046 aix + CP1124 aix + CP1125 dos + CP1129 aix + CP1131 freebsd darwin + CP1250 windows + CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows + CP1252 aix windows + CP1253 windows + CP1254 windows + CP1255 glibc windows + CP1256 windows + CP1257 windows + GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos + EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin + EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos + EUC-TW glibc aix hpux irix osf solaris netbsd + BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos + BIG5-HKSCS glibc hpux solaris netbsd darwin + GBK glibc aix osf solaris freebsd darwin cygwin windows dos + GB18030 glibc hpux solaris freebsd netbsd darwin + SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin + JOHAB glibc solaris windows + TIS-620 glibc aix hpux osf solaris cygwin zos + VISCII Y glibc + TCVN5712-1 glibc + ARMSCII-8 glibc freebsd netbsd darwin + GEORGIAN-PS glibc cygwin + PT154 glibc netbsd cygwin + HP-ROMAN8 hpux + HP-ARABIC8 hpux + HP-GREEK8 hpux + HP-HEBREW8 hpux + HP-TURKISH8 hpux + HP-KANA8 hpux + DEC-KANJI osf + DEC-HANYU osf + UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos + + Note: Names which are not marked as being a MIME name should not be used in + Internet protocols for information interchange (mail, news, etc.). + + Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications + must understand both names and treat them as equivalent. + */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/jni/parted/libiconv/srclib/malloc.c b/jni/parted/libiconv/srclib/malloc.c new file mode 100755 index 0000000..f334dd6 --- /dev/null +++ b/jni/parted/libiconv/srclib/malloc.c @@ -0,0 +1,51 @@ +/* malloc() function that is glibc compatible. + + Copyright (C) 1997-1998, 2006-2007, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* written by Jim Meyering and Bruno Haible */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include + +#include + +#include + +#include "xalloc-oversized.h" + +/* Allocate an N-byte block of memory from the heap, even if N is 0. */ + +void * +rpl_malloc (size_t n) +{ + if (n == 0) + n = 1; + + if (xalloc_oversized (n, 1)) + { + errno = ENOMEM; + return NULL; + } + + void *result = malloc (n); + +#if !HAVE_MALLOC_POSIX + if (result == NULL) + errno = ENOMEM; +#endif + + return result; +} diff --git a/jni/parted/libiconv/srclib/malloc/.dirstamp b/jni/parted/libiconv/srclib/malloc/.dirstamp new file mode 100755 index 0000000..e69de29 diff --git a/jni/parted/libiconv/srclib/malloc/scratch_buffer.h b/jni/parted/libiconv/srclib/malloc/scratch_buffer.h new file mode 100755 index 0000000..e4c5c8a --- /dev/null +++ b/jni/parted/libiconv/srclib/malloc/scratch_buffer.h @@ -0,0 +1,151 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SCRATCH_BUFFER_H +#define _SCRATCH_BUFFER_H + +/* Scratch buffers with a default stack allocation and fallback to + heap allocation. It is expected that this function is used in this + way: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + return -1; + + scratch_buffer_free (&tmpbuf); + return 0; + + The allocation functions (scratch_buffer_grow, + scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make + sure that the heap allocation, if any, is freed, so that the code + above does not have a memory leak. The buffer still remains in a + state that can be deallocated using scratch_buffer_free, so a loop + like this is valid as well: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + break; + + scratch_buffer_free (&tmpbuf); + + scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed + to grow the buffer by at least 512 bytes. This means that when + using the scratch buffer as a backing store for a non-character + array whose element size, in bytes, is 512 or smaller, the scratch + buffer only has to grow once to make room for at least one more + element. +*/ + +#include +#include +#include + +/* Scratch buffer. Must be initialized with scratch_buffer_init + before its use. */ +struct scratch_buffer { + void *data; /* Pointer to the beginning of the scratch area. */ + size_t length; /* Allocated space at the data pointer, in bytes. */ + union { max_align_t __align; char __c[1024]; } __space; +}; + +/* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space + and BUFFER->length reflects the available space. */ +static inline void +scratch_buffer_init (struct scratch_buffer *buffer) +{ + buffer->data = buffer->__space.__c; + buffer->length = sizeof (buffer->__space); +} + +/* Deallocates *BUFFER (if it was heap-allocated). */ +static inline void +scratch_buffer_free (struct scratch_buffer *buffer) +{ + if (buffer->data != buffer->__space.__c) + free (buffer->data); +} + +/* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT + preserved. Return true on success, false on allocation failure (in + which case the old buffer is freed). On success, the new buffer is + larger than the previous size. On failure, *BUFFER is deallocated, + but remains in a free-able state, and errno is set. */ +bool __libc_scratch_buffer_grow (struct scratch_buffer *buffer); +libc_hidden_proto (__libc_scratch_buffer_grow) + +/* Alias for __libc_scratch_buffer_grow. */ +static __always_inline bool +scratch_buffer_grow (struct scratch_buffer *buffer) +{ + return __glibc_likely (__libc_scratch_buffer_grow (buffer)); +} + +/* Like __libc_scratch_buffer_grow, but preserve the old buffer + contents on success, as a prefix of the new buffer. */ +bool __libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer); +libc_hidden_proto (__libc_scratch_buffer_grow_preserve) + +/* Alias for __libc_scratch_buffer_grow_preserve. */ +static __always_inline bool +scratch_buffer_grow_preserve (struct scratch_buffer *buffer) +{ + return __glibc_likely (__libc_scratch_buffer_grow_preserve (buffer)); +} + +/* Grow *BUFFER so that it can store at least NELEM elements of SIZE + bytes. The buffer contents are NOT preserved. Both NELEM and SIZE + can be zero. Return true on success, false on allocation failure + (in which case the old buffer is freed, but *BUFFER remains in a + free-able state, and errno is set). It is unspecified whether this + function can reduce the array size. */ +bool __libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size); +libc_hidden_proto (__libc_scratch_buffer_set_array_size) + +/* Alias for __libc_scratch_set_array_size. */ +static __always_inline bool +scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size) +{ + return __glibc_likely (__libc_scratch_buffer_set_array_size + (buffer, nelem, size)); +} + +/* Return a copy of *BUFFER's first SIZE bytes as a heap-allocated block, + deallocating *BUFFER if it was heap-allocated. SIZE must be at + most *BUFFER's size. Return NULL (setting errno) on memory + exhaustion. */ +void *__libc_scratch_buffer_dupfree (struct scratch_buffer *buffer, + size_t size); +libc_hidden_proto (__libc_scratch_buffer_dupfree) + +/* Alias for __libc_scratch_dupfree. */ +static __always_inline void * +scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size) +{ + void *r = __libc_scratch_buffer_dupfree (buffer, size); + return __glibc_likely (r != NULL) ? r : NULL; +} + +#endif /* _SCRATCH_BUFFER_H */ diff --git a/jni/parted/libiconv/srclib/malloc/scratch_buffer_dupfree.c b/jni/parted/libiconv/srclib/malloc/scratch_buffer_dupfree.c new file mode 100755 index 0000000..eb3b95c --- /dev/null +++ b/jni/parted/libiconv/srclib/malloc/scratch_buffer_dupfree.c @@ -0,0 +1,41 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2020-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _LIBC +# include +#endif + +#include +#include + +void * +__libc_scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size) +{ + void *data = buffer->data; + if (data == buffer->__space.__c) + { + void *copy = malloc (size); + return copy != NULL ? memcpy (copy, data, size) : NULL; + } + else + { + void *copy = realloc (data, size); + return copy != NULL ? copy : data; + } +} +libc_hidden_def (__libc_scratch_buffer_dupfree) diff --git a/jni/parted/libiconv/srclib/malloc/scratch_buffer_grow.c b/jni/parted/libiconv/srclib/malloc/scratch_buffer_grow.c new file mode 100755 index 0000000..9a5e4db --- /dev/null +++ b/jni/parted/libiconv/srclib/malloc/scratch_buffer_grow.c @@ -0,0 +1,56 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _LIBC +# include +#endif + +#include +#include + +bool +__libc_scratch_buffer_grow (struct scratch_buffer *buffer) +{ + void *new_ptr; + size_t new_length = buffer->length * 2; + + /* Discard old buffer. */ + scratch_buffer_free (buffer); + + /* Check for overflow. */ + if (__glibc_likely (new_length >= buffer->length)) + new_ptr = malloc (new_length); + else + { + __set_errno (ENOMEM); + new_ptr = NULL; + } + + if (__glibc_unlikely (new_ptr == NULL)) + { + /* Buffer must remain valid to free. */ + scratch_buffer_init (buffer); + return false; + } + + /* Install new heap-based buffer. */ + buffer->data = new_ptr; + buffer->length = new_length; + return true; +} +libc_hidden_def (__libc_scratch_buffer_grow) diff --git a/jni/parted/libiconv/srclib/malloc/scratch_buffer_grow_preserve.c b/jni/parted/libiconv/srclib/malloc/scratch_buffer_grow_preserve.c new file mode 100755 index 0000000..3fe5a07 --- /dev/null +++ b/jni/parted/libiconv/srclib/malloc/scratch_buffer_grow_preserve.c @@ -0,0 +1,67 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _LIBC +# include +#endif + +#include +#include +#include + +bool +__libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer) +{ + size_t new_length = 2 * buffer->length; + void *new_ptr; + + if (buffer->data == buffer->__space.__c) + { + /* Move buffer to the heap. No overflow is possible because + buffer->length describes a small buffer on the stack. */ + new_ptr = malloc (new_length); + if (new_ptr == NULL) + return false; + memcpy (new_ptr, buffer->__space.__c, buffer->length); + } + else + { + /* Buffer was already on the heap. Check for overflow. */ + if (__glibc_likely (new_length >= buffer->length)) + new_ptr = realloc (buffer->data, new_length); + else + { + __set_errno (ENOMEM); + new_ptr = NULL; + } + + if (__glibc_unlikely (new_ptr == NULL)) + { + /* Deallocate, but buffer must remain valid to free. */ + free (buffer->data); + scratch_buffer_init (buffer); + return false; + } + } + + /* Install new heap-based buffer. */ + buffer->data = new_ptr; + buffer->length = new_length; + return true; +} +libc_hidden_def (__libc_scratch_buffer_grow_preserve) diff --git a/jni/parted/libiconv/srclib/malloc/scratch_buffer_set_array_size.c b/jni/parted/libiconv/srclib/malloc/scratch_buffer_set_array_size.c new file mode 100755 index 0000000..89c37a9 --- /dev/null +++ b/jni/parted/libiconv/srclib/malloc/scratch_buffer_set_array_size.c @@ -0,0 +1,64 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _LIBC +# include +#endif + +#include +#include +#include + +bool +__libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size) +{ + size_t new_length = nelem * size; + + /* Avoid overflow check if both values are small. */ + if ((nelem | size) >> (sizeof (size_t) * CHAR_BIT / 2) != 0 + && nelem != 0 && size != new_length / nelem) + { + /* Overflow. Discard the old buffer, but it must remain valid + to free. */ + scratch_buffer_free (buffer); + scratch_buffer_init (buffer); + __set_errno (ENOMEM); + return false; + } + + if (new_length <= buffer->length) + return true; + + /* Discard old buffer. */ + scratch_buffer_free (buffer); + + char *new_ptr = malloc (new_length); + if (new_ptr == NULL) + { + /* Buffer must remain valid to free. */ + scratch_buffer_init (buffer); + return false; + } + + /* Install new heap-based buffer. */ + buffer->data = new_ptr; + buffer->length = new_length; + return true; +} +libc_hidden_def (__libc_scratch_buffer_set_array_size) diff --git a/jni/parted/libiconv/srclib/malloca.h b/jni/parted/libiconv/srclib/malloca.h new file mode 100755 index 0000000..7ec235f --- /dev/null +++ b/jni/parted/libiconv/srclib/malloca.h @@ -0,0 +1,126 @@ +/* Safe automatic memory allocation. + Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _MALLOCA_H +#define _MALLOCA_H + +#include +#include +#include +#include + +#include "xalloc-oversized.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call + alloca(N); otherwise it returns NULL. It either returns N bytes of + memory allocated on the stack, that lasts until the function returns, + or NULL. + Use of safe_alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns. +*/ +#if HAVE_ALLOCA +/* The OS usually guarantees only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + allocate anything larger than 4096 bytes. Also care for the possibility + of a few compiler-allocated temporary stack slots. + This must be a macro, not a function. */ +# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) +#else +# define safe_alloca(N) ((void) (N), NULL) +#endif + +/* Free a block of memory allocated through malloca(). */ +#if HAVE_ALLOCA +extern void freea (void *p); +#else +# define freea free +#endif + +/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of + memory allocated on the stack, that must be freed using freea() before + the function returns. Upon failure, it returns NULL. */ +#if HAVE_ALLOCA +# define malloca(N) \ + ((N) < 4032 - (2 * sa_alignment_max - 1) \ + ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + + (2 * sa_alignment_max - 1)) \ + & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ + : mmalloca (N)) +#else +# define malloca(N) \ + mmalloca (N) +#endif +extern void *mmalloca (size_t n) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1) + _GL_ATTRIBUTE_ALLOC_SIZE ((1)); + +/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). + It allocates an array of N objects, each with S bytes of memory, + on the stack. N and S should be nonnegative and free of side effects. + The array must be freed using freea() before the function returns. */ +#define nmalloca(n, s) \ + (xalloc_oversized (n, s) ? NULL : malloca ((n) * (size_t) (s))) + + +#ifdef __cplusplus +} +#endif + + +/* ------------------- Auxiliary, non-public definitions ------------------- */ + +/* Determine the alignment of a type at compile time. */ +#if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ +# define sa_alignof __alignof__ +#elif defined __cplusplus + template struct sa_alignof_helper { char __slot1; type __slot2; }; +# define sa_alignof(type) offsetof (sa_alignof_helper, __slot2) +#elif defined __hpux + /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#elif defined _AIX + /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#else +# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) +#endif + +enum +{ +/* The desired alignment of memory allocations is the maximum alignment + among all elementary types. */ + sa_alignment_long = sa_alignof (long), + sa_alignment_double = sa_alignof (double), + sa_alignment_longlong = sa_alignof (long long), + sa_alignment_longdouble = sa_alignof (long double), + sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) + | (sa_alignment_longlong - 1) + | (sa_alignment_longdouble - 1) + ) + 1 +}; + +#endif /* _MALLOCA_H */ diff --git a/jni/parted/libiconv/srclib/mempcpy.c b/jni/parted/libiconv/srclib/mempcpy.c new file mode 100755 index 0000000..9aae418 --- /dev/null +++ b/jni/parted/libiconv/srclib/mempcpy.c @@ -0,0 +1,33 @@ +/* Copy memory area and return pointer after last written byte. + Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* A function definition is only needed if HAVE_MEMPCPY is not defined. */ +#if !HAVE_MEMPCPY + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +void * +mempcpy (void *dest, const void *src, size_t n) +{ + return (char *) memcpy (dest, src, n) + n; +} + +#endif diff --git a/jni/parted/libiconv/srclib/minmax.h b/jni/parted/libiconv/srclib/minmax.h new file mode 100755 index 0000000..b4b1345 --- /dev/null +++ b/jni/parted/libiconv/srclib/minmax.h @@ -0,0 +1,60 @@ +/* MIN, MAX macros. + Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2022 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _MINMAX_H +#define _MINMAX_H + +/* Note: MIN, MAX are also defined in on some systems + (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about + MIN, MAX macro redefinitions on some systems; the workaround is to + #include this file as the last one among the #include list. */ + +/* Before we define the following symbols we get the file + since otherwise we get redefinitions on some systems if is + included after this file. Likewise for . + If more than one of these system headers define MIN and MAX, pick just + one of the headers (because the definitions most likely are the same). */ +#if HAVE_MINMAX_IN_LIMITS_H +# include +#elif HAVE_MINMAX_IN_SYS_PARAM_H +# include +#endif + +/* Note: MIN and MAX should be used with two arguments of the + same type. They might not return the minimum and maximum of their two + arguments, if the arguments have different types or have unusual + floating-point values. For example, on a typical host with 32-bit 'int', + 64-bit 'long long', and 64-bit IEEE 754 'double' types: + + MAX (-1, 2147483648) returns 4294967295. + MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. + MAX (NaN, 0.0) returns 0.0. + MAX (+0.0, -0.0) returns -0.0. + + and in each case the answer is in some sense bogus. */ + +/* MAX(a,b) returns the maximum of A and B. */ +#ifndef MAX +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + +/* MIN(a,b) returns the minimum of A and B. */ +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#endif /* _MINMAX_H */ diff --git a/jni/parted/libiconv/srclib/msvc-inval.c b/jni/parted/libiconv/srclib/msvc-inval.c new file mode 100755 index 0000000..d6651ca --- /dev/null +++ b/jni/parted/libiconv/srclib/msvc-inval.c @@ -0,0 +1,129 @@ +/* Invalid parameter handler for MSVC runtime libraries. + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "msvc-inval.h" + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ + && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) + +/* Get _invalid_parameter_handler type and _set_invalid_parameter_handler + declaration. */ +# include + +# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING + +static void __cdecl +gl_msvc_invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t dummy) +{ +} + +# else + +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include + +# if defined _MSC_VER + +static void __cdecl +gl_msvc_invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t dummy) +{ + RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); +} + +# else + +/* An index to thread-local storage. */ +static DWORD tls_index; +static int tls_initialized /* = 0 */; + +/* Used as a fallback only. */ +static struct gl_msvc_inval_per_thread not_per_thread; + +struct gl_msvc_inval_per_thread * +gl_msvc_inval_current (void) +{ + if (!tls_initialized) + { + tls_index = TlsAlloc (); + tls_initialized = 1; + } + if (tls_index == TLS_OUT_OF_INDEXES) + /* TlsAlloc had failed. */ + return ¬_per_thread; + else + { + struct gl_msvc_inval_per_thread *pointer = + (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); + if (pointer == NULL) + { + /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ + pointer = + (struct gl_msvc_inval_per_thread *) + malloc (sizeof (struct gl_msvc_inval_per_thread)); + if (pointer == NULL) + /* Could not allocate memory. Use the global storage. */ + pointer = ¬_per_thread; + TlsSetValue (tls_index, pointer); + } + return pointer; + } +} + +static void __cdecl +gl_msvc_invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t dummy) +{ + struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); + if (current->restart_valid) + longjmp (current->restart, 1); + else + /* An invalid parameter notification from outside the gnulib code. + Give the caller a chance to intervene. */ + RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); +} + +# endif + +# endif + +static int gl_msvc_inval_initialized /* = 0 */; + +void +gl_msvc_inval_ensure_handler (void) +{ + if (gl_msvc_inval_initialized == 0) + { + _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); + gl_msvc_inval_initialized = 1; + } +} + +#endif diff --git a/jni/parted/libiconv/srclib/msvc-inval.h b/jni/parted/libiconv/srclib/msvc-inval.h new file mode 100755 index 0000000..1230b89 --- /dev/null +++ b/jni/parted/libiconv/srclib/msvc-inval.h @@ -0,0 +1,222 @@ +/* Invalid parameter handler for MSVC runtime libraries. + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _MSVC_INVAL_H +#define _MSVC_INVAL_H + +/* With MSVC runtime libraries with the "invalid parameter handler" concept, + functions like fprintf(), dup2(), or close() crash when the caller passes + an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) + instead. + This file defines macros that turn such an invalid parameter notification + into a non-local exit. An error code can then be produced at the target + of this exit. You can thus write code like + + TRY_MSVC_INVAL + { + + } + CATCH_MSVC_INVAL + { + + } + DONE_MSVC_INVAL; + + This entire block expands to a single statement. + + The handling of invalid parameters can be done in three ways: + + * The default way, which is reasonable for programs (not libraries): + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) + + * The way for libraries that make "hairy" calls (like close(-1), or + fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) + + * The way for libraries that make no "hairy" calls: + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) + */ + +#define DEFAULT_HANDLING 0 +#define HAIRY_LIBRARY_HANDLING 1 +#define SANE_LIBRARY_HANDLING 2 + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ + && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) +/* A native Windows platform with the "invalid parameter handler" concept, + and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ + +# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING +/* Default handling. */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* Ensure that the invalid parameter handler in installed that just returns. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + gl_msvc_inval_ensure_handler (); \ + if (1) +# define CATCH_MSVC_INVAL \ + else +# define DONE_MSVC_INVAL \ + } \ + while (0) + +# else +/* Handling for hairy libraries. */ + +# include + +/* Gnulib can define its own status codes, as described in the page + "Raising Software Exceptions" on microsoft.com + . + Our status codes are composed of + - 0xE0000000, mandatory for all user-defined status codes, + - 0x474E550, a API identifier ("GNU"), + - 0, 1, 2, ..., used to distinguish different status codes from the + same API. */ +# define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) + +# if defined _MSC_VER +/* A compiler that supports __try/__except, as described in the page + "try-except statement" on microsoft.com + . + With __try/__except, we can use the multithread-safe exception handling. */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* Ensure that the invalid parameter handler in installed that raises a + software exception with code STATUS_GNULIB_INVALID_PARAMETER. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + gl_msvc_inval_ensure_handler (); \ + __try +# define CATCH_MSVC_INVAL \ + __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ + ? EXCEPTION_EXECUTE_HANDLER \ + : EXCEPTION_CONTINUE_SEARCH) +# define DONE_MSVC_INVAL \ + } \ + while (0) + +# else +/* Any compiler. + We can only use setjmp/longjmp. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +struct gl_msvc_inval_per_thread +{ + /* The restart that will resume execution at the code between + CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between + TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ + jmp_buf restart; + + /* Tells whether the contents of restart is valid. */ + int restart_valid; +}; + +/* Ensure that the invalid parameter handler in installed that passes + control to the gl_msvc_inval_restart if it is valid, or raises a + software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +/* Return a pointer to the per-thread data for the current thread. */ +extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + struct gl_msvc_inval_per_thread *msvc_inval_current; \ + gl_msvc_inval_ensure_handler (); \ + msvc_inval_current = gl_msvc_inval_current (); \ + /* First, initialize gl_msvc_inval_restart. */ \ + if (setjmp (msvc_inval_current->restart) == 0) \ + { \ + /* Then, mark it as valid. */ \ + msvc_inval_current->restart_valid = 1; +# define CATCH_MSVC_INVAL \ + /* Execution completed. \ + Mark gl_msvc_inval_restart as invalid. */ \ + msvc_inval_current->restart_valid = 0; \ + } \ + else \ + { \ + /* Execution triggered an invalid parameter notification. \ + Mark gl_msvc_inval_restart as invalid. */ \ + msvc_inval_current->restart_valid = 0; +# define DONE_MSVC_INVAL \ + } \ + } \ + while (0) + +# endif + +# endif + +#else +/* A platform that does not need to the invalid parameter handler, + or when SANE_LIBRARY_HANDLING is desired. */ + +/* The braces here avoid GCC warnings like + "warning: suggest explicit braces to avoid ambiguous 'else'". */ +# define TRY_MSVC_INVAL \ + do \ + { \ + if (1) +# define CATCH_MSVC_INVAL \ + else +# define DONE_MSVC_INVAL \ + } \ + while (0) + +#endif + +#endif /* _MSVC_INVAL_H */ diff --git a/jni/parted/libiconv/srclib/msvc-nothrow.c b/jni/parted/libiconv/srclib/msvc-nothrow.c new file mode 100755 index 0000000..aa06964 --- /dev/null +++ b/jni/parted/libiconv/srclib/msvc-nothrow.c @@ -0,0 +1,51 @@ +/* Wrappers that don't throw invalid parameter notifications + with MSVC runtime libraries. + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "msvc-nothrow.h" + +/* Get declarations of the native Windows API functions. */ +#define WIN32_LEAN_AND_MEAN +#include + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif + +#undef _get_osfhandle + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +intptr_t +_gl_nothrow_get_osfhandle (int fd) +{ + intptr_t result; + + TRY_MSVC_INVAL + { + result = _get_osfhandle (fd); + } + CATCH_MSVC_INVAL + { + result = (intptr_t) INVALID_HANDLE_VALUE; + } + DONE_MSVC_INVAL; + + return result; +} +#endif diff --git a/jni/parted/libiconv/srclib/msvc-nothrow.h b/jni/parted/libiconv/srclib/msvc-nothrow.h new file mode 100755 index 0000000..5345155 --- /dev/null +++ b/jni/parted/libiconv/srclib/msvc-nothrow.h @@ -0,0 +1,43 @@ +/* Wrappers that don't throw invalid parameter notifications + with MSVC runtime libraries. + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _MSVC_NOTHROW_H +#define _MSVC_NOTHROW_H + +/* With MSVC runtime libraries with the "invalid parameter handler" concept, + functions like fprintf(), dup2(), or close() crash when the caller passes + an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) + instead. + This file defines wrappers that turn such an invalid parameter notification + into an error code. */ + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Get original declaration of _get_osfhandle. */ +# include + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER + +/* Override _get_osfhandle. */ +extern intptr_t _gl_nothrow_get_osfhandle (int fd); +# define _get_osfhandle _gl_nothrow_get_osfhandle + +# endif + +#endif + +#endif /* _MSVC_NOTHROW_H */ diff --git a/jni/parted/libiconv/srclib/open.c b/jni/parted/libiconv/srclib/open.c new file mode 100755 index 0000000..170bff1 --- /dev/null +++ b/jni/parted/libiconv/srclib/open.c @@ -0,0 +1,209 @@ +/* Open a descriptor to a file. + Copyright (C) 2007-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +/* If the user's config.h happens to include , let it include only + the system's here, so that orig_open doesn't recurse to + rpl_open. */ +#define __need_system_fcntl_h +#include + +/* Get the original definition of open. It might be defined as a macro. */ +#include +#include +#undef __need_system_fcntl_h + +static int +orig_open (const char *filename, int flags, mode_t mode) +{ +#if defined _WIN32 && !defined __CYGWIN__ + return _open (filename, flags, mode); +#else + return open (filename, flags, mode); +#endif +} + +/* Specification. */ +/* Write "fcntl.h" here, not , otherwise OSF/1 5.1 DTK cc eliminates + this include because of the preliminary #include above. */ +#include "fcntl.h" + +#include "cloexec.h" + +#include +#include +#include +#include +#include +#include + +#ifndef REPLACE_OPEN_DIRECTORY +# define REPLACE_OPEN_DIRECTORY 0 +#endif + +int +open (const char *filename, int flags, ...) +{ + /* 0 = unknown, 1 = yes, -1 = no. */ +#if GNULIB_defined_O_CLOEXEC + int have_cloexec = -1; +#else + static int have_cloexec; +#endif + + mode_t mode; + int fd; + + mode = 0; + if (flags & O_CREAT) + { + va_list arg; + va_start (arg, flags); + + /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 + creates crashing code when 'mode_t' is smaller than 'int'. */ + mode = va_arg (arg, PROMOTED_MODE_T); + + va_end (arg); + } + +#if GNULIB_defined_O_NONBLOCK + /* The only known platform that lacks O_NONBLOCK is mingw, but it + also lacks named pipes and Unix sockets, which are the only two + file types that require non-blocking handling in open(). + Therefore, it is safe to ignore O_NONBLOCK here. It is handy + that mingw also lacks openat(), so that is also covered here. */ + flags &= ~O_NONBLOCK; +#endif + +#if defined _WIN32 && ! defined __CYGWIN__ + if (strcmp (filename, "/dev/null") == 0) + filename = "NUL"; +#endif + +#if OPEN_TRAILING_SLASH_BUG + /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename + ends in a slash, as POSIX says such a filename must name a directory + : + "A pathname that contains at least one non- character and that + ends with one or more trailing characters shall not be resolved + successfully unless the last pathname component before the trailing + characters names an existing directory" + If the named file already exists as a directory, then + - if O_CREAT is specified, open() must fail because of the semantics + of O_CREAT, + - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX + + says that it fails with errno = EISDIR in this case. + If the named file does not exist or does not name a directory, then + - if O_CREAT is specified, open() must fail since open() cannot create + directories, + - if O_WRONLY or O_RDWR is specified, open() must fail because the + file does not contain a '.' directory. */ + if ((flags & O_CREAT) + || (flags & O_ACCMODE) == O_RDWR + || (flags & O_ACCMODE) == O_WRONLY) + { + size_t len = strlen (filename); + if (len > 0 && filename[len - 1] == '/') + { + errno = EISDIR; + return -1; + } + } +#endif + + fd = orig_open (filename, + flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); + + if (flags & O_CLOEXEC) + { + if (! have_cloexec) + { + if (0 <= fd) + have_cloexec = 1; + else if (errno == EINVAL) + { + fd = orig_open (filename, flags & ~O_CLOEXEC, mode); + have_cloexec = -1; + } + } + if (have_cloexec < 0 && 0 <= fd) + set_cloexec_flag (fd, true); + } + + +#if REPLACE_FCHDIR + /* Implementing fchdir and fdopendir requires the ability to open a + directory file descriptor. If open doesn't support that (as on + mingw), we use a dummy file that behaves the same as directories + on Linux (ie. always reports EOF on attempts to read()), and + override fstat() in fchdir.c to hide the fact that we have a + dummy. */ + if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES + && ((flags & O_ACCMODE) == O_RDONLY + || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH))) + { + struct stat statbuf; + if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)) + { + /* Maximum recursion depth of 1. */ + fd = open ("/dev/null", flags, mode); + if (0 <= fd) + fd = _gl_register_fd (fd, filename); + } + else + errno = EACCES; + } +#endif + +#if OPEN_TRAILING_SLASH_BUG + /* If the filename ends in a slash and fd does not refer to a directory, + then fail. + Rationale: POSIX says such a filename must name a directory + : + "A pathname that contains at least one non- character and that + ends with one or more trailing characters shall not be resolved + successfully unless the last pathname component before the trailing + characters names an existing directory" + If the named file without the slash is not a directory, open() must fail + with ENOTDIR. */ + if (fd >= 0) + { + /* We know len is positive, since open did not fail with ENOENT. */ + size_t len = strlen (filename); + if (filename[len - 1] == '/') + { + struct stat statbuf; + + if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) + { + close (fd); + errno = ENOTDIR; + return -1; + } + } + } +#endif + +#if REPLACE_FCHDIR + if (!REPLACE_OPEN_DIRECTORY && 0 <= fd) + fd = _gl_register_fd (fd, filename); +#endif + + return fd; +} diff --git a/jni/parted/libiconv/srclib/pathmax.h b/jni/parted/libiconv/srclib/pathmax.h new file mode 100755 index 0000000..19b93d7 --- /dev/null +++ b/jni/parted/libiconv/srclib/pathmax.h @@ -0,0 +1,83 @@ +/* Define PATH_MAX somehow. Requires sys/types.h. + Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2022 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _PATHMAX_H +# define _PATHMAX_H + +/* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, + including the terminating NUL byte. + + PATH_MAX is not defined on systems which have no limit on filename length, + such as GNU/Hurd. + + This file does *not* define PATH_MAX always. Programs that use this file + can handle the GNU/Hurd case in several ways: + - Either with a package-wide handling, or with a per-file handling, + - Either through a + #ifdef PATH_MAX + or through a fallback like + #ifndef PATH_MAX + # define PATH_MAX 8192 + #endif + or through a fallback like + #ifndef PATH_MAX + # define PATH_MAX pathconf ("/", _PC_PATH_MAX) + #endif + */ + +# include + +# include + +# ifndef _POSIX_PATH_MAX +# define _POSIX_PATH_MAX 256 +# endif + +/* Don't include sys/param.h if it already has been. */ +# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN +# include +# endif + +# if !defined PATH_MAX && defined MAXPATHLEN +# define PATH_MAX MAXPATHLEN +# endif + +# ifdef __hpux +/* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, + *not* including the terminating NUL byte, and is set to 1023. + Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is + not defined at all any more. */ +# undef PATH_MAX +# define PATH_MAX 1024 +# endif + +# if defined _WIN32 && ! defined __CYGWIN__ +/* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, + section "Maximum Path Length Limitation", + + explains that the maximum size of a filename, including the terminating + NUL byte, is 260 = 3 + 256 + 1. + This is the same value as + - FILENAME_MAX in , + - _MAX_PATH in , + - MAX_PATH in . + Undefine the original value, because mingw's gets it wrong. */ +# undef PATH_MAX +# define PATH_MAX 260 +# endif + +#endif /* _PATHMAX_H */ diff --git a/jni/parted/libiconv/srclib/progname.h b/jni/parted/libiconv/srclib/progname.h new file mode 100755 index 0000000..1556a1d --- /dev/null +++ b/jni/parted/libiconv/srclib/progname.h @@ -0,0 +1,62 @@ +/* Program name management. + Copyright (C) 2001-2004, 2006, 2009-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _PROGNAME_H +#define _PROGNAME_H + +/* Programs using this file should do the following in main(): + set_program_name (argv[0]); + */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* String containing name the program is called with. */ +extern DLL_VARIABLE const char *program_name; + +/* Set program_name, based on argv[0]. + argv0 must be a string allocated with indefinite extent, and must not be + modified after this call. */ +extern void set_program_name (const char *argv0); + +#if ENABLE_RELOCATABLE + +/* Set program_name, based on argv[0], and original installation prefix and + directory, for relocatability. */ +extern void set_program_name_and_installdir (const char *argv0, + const char *orig_installprefix, + const char *orig_installdir); +#undef set_program_name +#define set_program_name(ARG0) \ + set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) + +/* Return the full pathname of the current executable, based on the earlier + call to set_program_name_and_installdir. Return NULL if unknown. */ +extern char *get_full_program_name (void); + +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _PROGNAME_H */ diff --git a/jni/parted/libiconv/srclib/progreloc.c b/jni/parted/libiconv/srclib/progreloc.c new file mode 100755 index 0000000..8bb2576 --- /dev/null +++ b/jni/parted/libiconv/srclib/progreloc.c @@ -0,0 +1,511 @@ +/* Provide relocatable programs. + Copyright (C) 2003-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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 3 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, see . */ + + +#define _GL_USE_STDLIB_ALLOC 1 +#include + +/* Specification. */ +#include "progname.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +/* Get declaration of _NSGetExecutablePath on Mac OS X 10.2 or newer. */ +#if HAVE_MACH_O_DYLD_H +# include +#endif + +#if defined _WIN32 && !defined __CYGWIN__ +# define WINDOWS_NATIVE +#endif + +#ifdef WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include +#endif + +#ifdef __EMX__ +# define INCL_DOS +# include +#endif + +#include "relocatable.h" + +#ifdef NO_XMALLOC +# include "areadlink.h" +# define xreadlink areadlink +#else +# include "xreadlink.h" +#endif + +#ifdef NO_XMALLOC +# define xmalloc malloc +# define xstrdup strdup +#else +# include "xalloc.h" +#endif + +#ifndef O_EXEC +# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ +#endif + +#if defined IN_RELOCWRAPPER && (!defined O_CLOEXEC || GNULIB_defined_O_CLOEXEC) +# undef O_CLOEXEC +# define O_CLOEXEC 0 +#endif + +/* Declare canonicalize_file_name. + The included above may be the system's one, not the gnulib + one. */ +extern char * canonicalize_file_name (const char *name); + +#if defined WINDOWS_NATIVE +/* Don't assume that UNICODE is not defined. */ +# undef GetModuleFileName +# define GetModuleFileName GetModuleFileNameA +#endif + +/* Pathname support. + ISSLASH(C) tests whether C is a directory separator character. + IS_FILE_NAME_WITH_DIR(P) tests whether P contains a directory specification. + */ +#if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ + /* Native Windows, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +# define HAS_DEVICE(P) \ + ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ + && (P)[1] == ':') +# define IS_FILE_NAME_WITH_DIR(P) \ + (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) +# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +# define IS_FILE_NAME_WITH_DIR(P) (strchr (P, '/') != NULL) +# define FILE_SYSTEM_PREFIX_LEN(P) 0 +#endif + +/* Use the system functions, not the gnulib overrides in this file. */ +#undef sprintf + +#undef set_program_name + + +#if ENABLE_RELOCATABLE + +#ifdef __sun + +/* Helper function, from gnulib module 'safe-read'. */ +static size_t +safe_read (int fd, void *buf, size_t count) +{ + for (;;) + { + ssize_t result = read (fd, buf, count); + + if (0 <= result || errno != EINTR) + return result; + } +} + +/* Helper function, from gnulib module 'full-read'. */ +static size_t +full_read (int fd, void *buf, size_t count) +{ + size_t total = 0; + const char *ptr = (const char *) buf; + + while (count > 0) + { + size_t n = safe_read (fd, ptr, count); + if (n == (size_t) -1) + break; + if (n == 0) + { + errno = 0; + break; + } + total += n; + ptr += n; + count -= n; + } + + return total; +} + +#endif + +#if defined __linux__ || defined __CYGWIN__ +/* File descriptor of the executable. + (Only used to verify that we find the correct executable.) */ +static int executable_fd = -1; +#endif + +/* Define this function only when it's needed. */ +#if !(defined WINDOWS_NATIVE || defined __EMX__) + +/* Tests whether a given filename may belong to the executable. */ +static bool +maybe_executable (const char *filename) +{ + /* The native Windows API lacks the access() function. */ +# if !defined WINDOWS_NATIVE + if (access (filename, X_OK) < 0) + return false; +# endif + +# if defined __linux__ || defined __CYGWIN__ + if (executable_fd >= 0) + { + /* If we already have an executable_fd, check that filename points to + the same inode. */ + struct stat statexe; + struct stat statfile; + + if (fstat (executable_fd, &statexe) >= 0) + return (stat (filename, &statfile) >= 0 + && statfile.st_dev + && statfile.st_dev == statexe.st_dev + && statfile.st_ino == statexe.st_ino); + } +# endif + + /* Check that the filename does not point to a directory. */ + { + struct stat statfile; + + return (stat (filename, &statfile) >= 0 + && ! S_ISDIR (statfile.st_mode)); + } +} + +#endif + +/* Determine the full pathname of the current executable, freshly allocated. + Return NULL if unknown. + Guaranteed to work on Linux and native Windows. Likely to work on the + other Unixes (maybe except BeOS), under most conditions. */ +static char * +find_executable (const char *argv0) +{ +#if defined WINDOWS_NATIVE + /* Native Windows only. + On Cygwin, it is better to use the Cygwin provided /proc interface, than + to use native Windows API and cygwin_conv_to_posix_path, because it + supports longer file names + (see ). */ + char location[MAX_PATH]; + int length = GetModuleFileName (NULL, location, sizeof (location)); + if (length < 0) + return NULL; + if (!IS_FILE_NAME_WITH_DIR (location)) + /* Shouldn't happen. */ + return NULL; + return xstrdup (location); +#elif defined __EMX__ + PPIB ppib; + char location[CCHMAXPATH]; + + /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/619_L2H_DosGetInfoBlocksSynt.html + for specification of DosGetInfoBlocks(). */ + if (DosGetInfoBlocks (NULL, &ppib)) + return NULL; + + /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html + for specification of DosQueryModuleName(). */ + if (DosQueryModuleName (ppib->pib_hmte, sizeof (location), location)) + return NULL; + + _fnslashify (location); + + return xstrdup (location); +#else /* Unix */ +# if defined __linux__ + /* The executable is accessible as /proc//exe. In newer Linux + versions, also as /proc/self/exe. Linux >= 2.1 provides a symlink + to the true pathname; older Linux versions give only device and ino, + enclosed in brackets, which we cannot use here. */ + { + char *link; + + link = xreadlink ("/proc/self/exe"); + if (link != NULL && link[0] != '[') + return link; + if (executable_fd < 0) + executable_fd = open ("/proc/self/exe", O_EXEC | O_CLOEXEC, 0); + + { + char buf[6+10+5]; + sprintf (buf, "/proc/%d/exe", getpid ()); + link = xreadlink (buf); + if (link != NULL && link[0] != '[') + return link; + if (executable_fd < 0) + executable_fd = open (buf, O_EXEC | O_CLOEXEC, 0); + } + } +# endif +# if defined __ANDROID__ || defined __FreeBSD_kernel__ + /* On Android and GNU/kFreeBSD, the executable is accessible as + /proc//exe and /proc/self/exe. */ + { + char *link; + + link = xreadlink ("/proc/self/exe"); + if (link != NULL) + return link; + } +# endif +# if defined __FreeBSD__ || defined __DragonFly__ + /* In FreeBSD >= 5.0, the executable is accessible as /proc//file and + /proc/curproc/file. */ + { + char *link; + + link = xreadlink ("/proc/curproc/file"); + if (link != NULL) + { + if (strcmp (link, "unknown") != 0) + return link; + free (link); + } + } +# endif +# if defined __NetBSD__ + /* In NetBSD >= 4.0, the executable is accessible as /proc//exe and + /proc/curproc/exe. */ + { + char *link; + + link = xreadlink ("/proc/curproc/exe"); + if (link != NULL) + return link; + } +# endif +# if defined __sun + /* On Solaris >= 11.4, /proc//execname and /proc/self/execname contains + the name of the executable, either as an absolute file name or relative to + the current directory. */ + { + char namebuf[4096]; + int fd = open ("/proc/self/execname", O_RDONLY | O_CLOEXEC, 0); + if (fd >= 0) + { + size_t len = full_read (fd, namebuf, sizeof (namebuf)); + close (fd); + if (len > 0 && len < sizeof (namebuf)) + { + namebuf[len] = '\0'; + return canonicalize_file_name (namebuf); + } + } + } +# endif +# if defined __CYGWIN__ + /* The executable is accessible as /proc//exe, at least in + Cygwin >= 1.5. */ + { + char *link; + + link = xreadlink ("/proc/self/exe"); + if (link != NULL) + return link; + if (executable_fd < 0) + executable_fd = open ("/proc/self/exe", O_EXEC | O_CLOEXEC, 0); + } +# endif +# if HAVE_MACH_O_DYLD_H && HAVE__NSGETEXECUTABLEPATH + /* On Mac OS X 10.2 or newer, the function + int _NSGetExecutablePath (char *buf, uint32_t *bufsize); + can be used to retrieve the executable's full path. */ + char location[4096]; + unsigned int length = sizeof (location); + if (_NSGetExecutablePath (location, &length) == 0 + && location[0] == '/') + return canonicalize_file_name (location); +# endif + /* Guess the executable's full path. We assume the executable has been + called via execlp() or execvp() with properly set up argv[0]. The + login(1) convention to add a '-' prefix to argv[0] is not supported. */ + { + bool has_slash = false; + { + const char *p; + for (p = argv0; *p; p++) + if (*p == '/') + { + has_slash = true; + break; + } + } + if (!has_slash) + { + /* exec searches paths without slashes in the directory list given + by $PATH. */ + const char *path = getenv ("PATH"); + + if (path != NULL) + { + const char *p; + const char *p_next; + + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + char *concat_name; + + for (q = p; *q; q++) + if (*q == ':') + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + + /* We have a path item at p, of length p_len. + Now concatenate the path item and argv0. */ + concat_name = (char *) xmalloc (p_len + strlen (argv0) + 2); +# ifdef NO_XMALLOC + if (concat_name == NULL) + return NULL; +# endif + if (p_len == 0) + /* An empty PATH element designates the current directory. */ + strcpy (concat_name, argv0); + else + { + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, argv0); + } + if (maybe_executable (concat_name)) + return canonicalize_file_name (concat_name); + free (concat_name); + } + } + /* Not found in the PATH, assume the current directory. */ + } + /* exec treats paths containing slashes as relative to the current + directory. */ + if (maybe_executable (argv0)) + return canonicalize_file_name (argv0); + } + /* No way to find the executable. */ + return NULL; +#endif +} + +/* Full pathname of executable, or NULL. */ +static char *executable_fullname; + +static void +prepare_relocate (const char *orig_installprefix, const char *orig_installdir, + const char *argv0) +{ + char *curr_prefix; + + /* Determine the full pathname of the current executable. */ + executable_fullname = find_executable (argv0); + + /* Determine the current installation prefix from it. */ + curr_prefix = compute_curr_prefix (orig_installprefix, orig_installdir, + executable_fullname); + if (curr_prefix != NULL) + { + /* Now pass this prefix to all copies of the relocate.c source file. */ + set_relocation_prefix (orig_installprefix, curr_prefix); + + free (curr_prefix); + } +} + +/* Set program_name, based on argv[0], and original installation prefix and + directory, for relocatability. */ +void +set_program_name_and_installdir (const char *argv0, + const char *orig_installprefix, + const char *orig_installdir) +{ + const char *argv0_stripped = argv0; + + /* Relocatable programs are renamed to .bin by install-reloc. Or, more + generally, their suffix is changed from $exeext to .bin$exeext. + Remove the ".bin" here. */ + { + size_t argv0_len = strlen (argv0); + const size_t exeext_len = sizeof (EXEEXT) - sizeof (""); + if (argv0_len > 4 + exeext_len) + if (memcmp (argv0 + argv0_len - exeext_len - 4, ".bin", 4) == 0) + { + if (sizeof (EXEEXT) > sizeof ("")) + { + /* Compare using an inlined copy of c_strncasecmp(), because + the filenames may have undergone a case conversion since + they were packaged. In other words, EXEEXT may be ".exe" + on one system and ".EXE" on another. */ + static const char exeext[] = EXEEXT; + const char *s1 = argv0 + argv0_len - exeext_len; + const char *s2 = exeext; + for (; *s1 != '\0'; s1++, s2++) + { + unsigned char c1 = *s1; + unsigned char c2 = *s2; + if ((c1 >= 'A' && c1 <= 'Z' ? c1 - 'A' + 'a' : c1) + != (c2 >= 'A' && c2 <= 'Z' ? c2 - 'A' + 'a' : c2)) + goto done_stripping; + } + } + /* Remove ".bin" before EXEEXT or its equivalent. */ + { + char *shorter = (char *) xmalloc (argv0_len - 4 + 1); +#ifdef NO_XMALLOC + if (shorter != NULL) +#endif + { + memcpy (shorter, argv0, argv0_len - exeext_len - 4); + if (sizeof (EXEEXT) > sizeof ("")) + memcpy (shorter + argv0_len - exeext_len - 4, + argv0 + argv0_len - exeext_len - 4, + exeext_len); + shorter[argv0_len - 4] = '\0'; + argv0_stripped = shorter; + } + } + done_stripping: ; + } + } + + set_program_name (argv0_stripped); + + prepare_relocate (orig_installprefix, orig_installdir, argv0); +} + +/* Return the full pathname of the current executable, based on the earlier + call to set_program_name_and_installdir. Return NULL if unknown. */ +char * +get_full_program_name (void) +{ + return executable_fullname; +} + +#endif diff --git a/jni/parted/libiconv/srclib/raise.c b/jni/parted/libiconv/srclib/raise.c new file mode 100755 index 0000000..385ddd3 --- /dev/null +++ b/jni/parted/libiconv/srclib/raise.c @@ -0,0 +1,83 @@ +/* Provide a non-threads replacement for the POSIX raise function. + + Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* written by Jim Meyering and Bruno Haible */ + +#include + +/* Specification. */ +#include + +#if HAVE_RAISE +/* Native Windows platform. */ + +# include + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +# endif + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +/* Forward declaration. */ +static int raise_nothrow (int sig); +# else +# define raise_nothrow raise +# endif + +#else +/* An old Unix platform. */ + +# include + +#endif + +int +raise (int sig) +#undef raise +{ +#if GNULIB_defined_signal_blocking && GNULIB_defined_SIGPIPE + if (sig == SIGPIPE) + return _gl_raise_SIGPIPE (); +#endif + +#if HAVE_RAISE + return raise_nothrow (sig); +#else + return kill (getpid (), sig); +#endif +} + +#if HAVE_RAISE && HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +raise_nothrow (int sig) +{ + int result; + + TRY_MSVC_INVAL + { + result = raise (sig); + } + CATCH_MSVC_INVAL + { + result = -1; + errno = EINVAL; + } + DONE_MSVC_INVAL; + + return result; +} +#endif diff --git a/jni/parted/libiconv/srclib/read.c b/jni/parted/libiconv/srclib/read.c new file mode 100755 index 0000000..1bb7d90 --- /dev/null +++ b/jni/parted/libiconv/srclib/read.c @@ -0,0 +1,95 @@ +/* POSIX compatible read() function. + Copyright (C) 2008-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if defined _WIN32 && ! defined __CYGWIN__ + +# include +# include + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +# endif +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif + +/* Don't assume that UNICODE is not defined. */ +# undef GetNamedPipeHandleState +# define GetNamedPipeHandleState GetNamedPipeHandleStateA + +# undef read + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static ssize_t +read_nothrow (int fd, void *buf, size_t count) +{ + ssize_t result; + + TRY_MSVC_INVAL + { + result = _read (fd, buf, count); + } + CATCH_MSVC_INVAL + { + result = -1; + errno = EBADF; + } + DONE_MSVC_INVAL; + + return result; +} +# else +# define read_nothrow _read +# endif + +ssize_t +rpl_read (int fd, void *buf, size_t count) +{ + ssize_t ret = read_nothrow (fd, buf, count); + +# if GNULIB_NONBLOCKING + if (ret < 0 + && GetLastError () == ERROR_NO_DATA) + { + HANDLE h = (HANDLE) _get_osfhandle (fd); + if (GetFileType (h) == FILE_TYPE_PIPE) + { + /* h is a pipe or socket. */ + DWORD state; + if (GetNamedPipeHandleState (h, &state, NULL, NULL, NULL, NULL, 0) + && (state & PIPE_NOWAIT) != 0) + /* h is a pipe in non-blocking mode. + Change errno from EINVAL to EAGAIN. */ + errno = EAGAIN; + } + } +# endif + + return ret; +} + +#endif diff --git a/jni/parted/libiconv/srclib/readlink.c b/jni/parted/libiconv/srclib/readlink.c new file mode 100755 index 0000000..ed03cc8 --- /dev/null +++ b/jni/parted/libiconv/srclib/readlink.c @@ -0,0 +1,104 @@ +/* Read the contents of a symbolic link. + Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include + +#if !HAVE_READLINK + +/* readlink() substitute for systems that don't have a readlink() function, + such as DJGPP 2.03 and mingw32. */ + +ssize_t +readlink (char const *file, _GL_UNUSED char *buf, + _GL_UNUSED size_t bufsize) +{ + struct stat statbuf; + + /* In general we should use lstat() here, not stat(). But on platforms + without symbolic links, lstat() - if it exists - would be equivalent to + stat(), therefore we can use stat(). This saves us a configure check. */ + if (stat (file, &statbuf) >= 0) + errno = EINVAL; + return -1; +} + +#else /* HAVE_READLINK */ + +# undef readlink + +/* readlink() wrapper that uses correct types, for systems like cygwin + 1.5.x where readlink returns int, and which rejects trailing slash, + for Solaris 9. */ + +ssize_t +rpl_readlink (char const *file, char *buf, size_t bufsize) +{ +# if READLINK_TRAILING_SLASH_BUG + size_t file_len = strlen (file); + if (file_len && file[file_len - 1] == '/') + { + /* Even if FILE without the slash is a symlink to a directory, + both lstat() and stat() must resolve the trailing slash to + the directory rather than the symlink. We can therefore + safely use stat() to distinguish between EINVAL and + ENOTDIR/ENOENT, avoiding extra overhead of rpl_lstat(). */ + struct stat st; + if (stat (file, &st) == 0 || errno == EOVERFLOW) + errno = EINVAL; + return -1; + } +# endif /* READLINK_TRAILING_SLASH_BUG */ + + ssize_t r = readlink (file, buf, bufsize); + +# if READLINK_TRUNCATE_BUG + if (r < 0 && errno == ERANGE) + { + /* Try again with a bigger buffer. This is just for test cases; + real code invariably discards short reads. */ + char stackbuf[4032]; + r = readlink (file, stackbuf, sizeof stackbuf); + if (r < 0) + { + if (errno == ERANGE) + { + /* Clear the buffer, which is good enough for real code. + Thankfully, no test cases try short reads of enormous + symlinks and what would be the point anyway? */ + r = bufsize; + memset (buf, 0, r); + } + } + else + { + if (bufsize < r) + r = bufsize; + memcpy (buf, stackbuf, r); + } + } +# endif + + return r; +} + +#endif /* HAVE_READLINK */ diff --git a/jni/parted/libiconv/srclib/realloc.c b/jni/parted/libiconv/srclib/realloc.c new file mode 100755 index 0000000..c878381 --- /dev/null +++ b/jni/parted/libiconv/srclib/realloc.c @@ -0,0 +1,63 @@ +/* realloc() function that is glibc compatible. + + Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2022 Free Software + Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* written by Jim Meyering and Bruno Haible */ + +#include + +#include + +#include + +#include "xalloc-oversized.h" + +/* Call the system's realloc below. This file does not define + _GL_USE_STDLIB_ALLOC because it needs Gnulib's malloc if present. */ +#undef realloc + +/* Change the size of an allocated block of memory P to N bytes, + with error checking. If P is NULL, use malloc. Otherwise if N is zero, + free P and return NULL. */ + +void * +rpl_realloc (void *p, size_t n) +{ + if (p == NULL) + return malloc (n); + + if (n == 0) + { + free (p); + return NULL; + } + + if (xalloc_oversized (n, 1)) + { + errno = ENOMEM; + return NULL; + } + + void *result = realloc (p, n); + +#if !HAVE_MALLOC_POSIX + if (result == NULL) + errno = ENOMEM; +#endif + + return result; +} diff --git a/jni/parted/libiconv/srclib/relocatable.c b/jni/parted/libiconv/srclib/relocatable.c new file mode 100755 index 0000000..1ca8ec0 --- /dev/null +++ b/jni/parted/libiconv/srclib/relocatable.c @@ -0,0 +1,603 @@ +/* Provide relocatable packages. + Copyright (C) 2003-2006, 2008-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +/* Tell glibc's to provide a prototype for getline(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#define _GL_USE_STDLIB_ALLOC 1 +#include + +/* Specification. */ +#include "relocatable.h" + +#if ENABLE_RELOCATABLE + +#include +#include +#include +#include + +#ifdef NO_XMALLOC +# define xmalloc malloc +#else +# include "xalloc.h" +#endif + +#if defined _WIN32 && !defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +#endif + +#ifdef __EMX__ +# define INCL_DOS +# include + +# define strcmp stricmp +# define strncmp strnicmp +#endif + +#if DEPENDS_ON_LIBCHARSET +# include +#endif +#if DEPENDS_ON_LIBICONV && HAVE_ICONV +# include +#endif +#if DEPENDS_ON_LIBINTL && ENABLE_NLS +# include +#endif + +#if defined _WIN32 && !defined __CYGWIN__ +/* Don't assume that UNICODE is not defined. */ +# undef GetModuleFileName +# define GetModuleFileName GetModuleFileNameA +#endif + +/* Faked cheap 'bool'. */ +#undef bool +#undef false +#undef true +#define bool int +#define false 0 +#define true 1 + +/* Pathname support. + ISSLASH(C) tests whether C is a directory separator character. + IS_FILE_NAME_WITH_DIR(P) tests whether P contains a directory specification. + */ +#if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ + /* Native Windows, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +# define HAS_DEVICE(P) \ + ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ + && (P)[1] == ':') +# define IS_FILE_NAME_WITH_DIR(P) \ + (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) +# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +# define IS_FILE_NAME_WITH_DIR(P) (strchr (P, '/') != NULL) +# define FILE_SYSTEM_PREFIX_LEN(P) 0 +#endif + +/* Whether to enable the more costly support for relocatable libraries. + It allows libraries to be have been installed with a different original + prefix than the program. But it is quite costly, especially on Cygwin + platforms, see below. Therefore we enable it by default only on native + Windows platforms. */ +#ifndef ENABLE_COSTLY_RELOCATABLE +# if defined _WIN32 && !defined __CYGWIN__ +# define ENABLE_COSTLY_RELOCATABLE 1 +# else +# define ENABLE_COSTLY_RELOCATABLE 0 +# endif +#endif + +/* Original installation prefix. */ +static char *orig_prefix; +static size_t orig_prefix_len; +/* Current installation prefix. */ +static char *curr_prefix; +static size_t curr_prefix_len; +/* These prefixes do not end in a slash. Anything that will be concatenated + to them must start with a slash. */ + +/* Sets the original and the current installation prefix of this module. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +static void +set_this_relocation_prefix (const char *orig_prefix_arg, + const char *curr_prefix_arg) +{ + if (orig_prefix_arg != NULL && curr_prefix_arg != NULL + /* Optimization: if orig_prefix and curr_prefix are equal, the + relocation is a nop. */ + && strcmp (orig_prefix_arg, curr_prefix_arg) != 0) + { + /* Duplicate the argument strings. */ + char *memory; + + orig_prefix_len = strlen (orig_prefix_arg); + curr_prefix_len = strlen (curr_prefix_arg); + memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1); +#ifdef NO_XMALLOC + if (memory != NULL) +#endif + { + memcpy (memory, orig_prefix_arg, orig_prefix_len + 1); + orig_prefix = memory; + memory += orig_prefix_len + 1; + memcpy (memory, curr_prefix_arg, curr_prefix_len + 1); + curr_prefix = memory; + return; + } + } + orig_prefix = NULL; + curr_prefix = NULL; + /* Don't worry about wasted memory here - this function is usually only + called once. */ +} + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +void +set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) +{ + set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg); + + /* Now notify all dependent libraries. */ +#if DEPENDS_ON_LIBCHARSET + libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); +#endif +#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109 + libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); +#endif +#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix + libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); +#endif +} + +#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE) + +/* Convenience function: + Computes the current installation prefix, based on the original + installation prefix, the original installation directory of a particular + file, and the current pathname of this file. + Returns it, freshly allocated. Returns NULL upon failure. */ +#ifdef IN_LIBRARY +#define compute_curr_prefix local_compute_curr_prefix +static +#endif +char * +compute_curr_prefix (const char *orig_installprefix, + const char *orig_installdir, + const char *curr_pathname) +{ + char *curr_installdir; + const char *rel_installdir; + + if (curr_pathname == NULL) + return NULL; + + /* Determine the relative installation directory, relative to the prefix. + This is simply the difference between orig_installprefix and + orig_installdir. */ + if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix)) + != 0) + /* Shouldn't happen - nothing should be installed outside $(prefix). */ + return NULL; + rel_installdir = orig_installdir + strlen (orig_installprefix); + + /* Determine the current installation directory. */ + { + const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname); + const char *p = curr_pathname + strlen (curr_pathname); + char *q; + + while (p > p_base) + { + p--; + if (ISSLASH (*p)) + break; + } + + q = (char *) xmalloc (p - curr_pathname + 1); +#ifdef NO_XMALLOC + if (q == NULL) + return NULL; +#endif + memcpy (q, curr_pathname, p - curr_pathname); + q[p - curr_pathname] = '\0'; + curr_installdir = q; + } + + /* Compute the current installation prefix by removing the trailing + rel_installdir from it. */ + { + const char *rp = rel_installdir + strlen (rel_installdir); + const char *cp = curr_installdir + strlen (curr_installdir); + const char *cp_base = + curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir); + + while (rp > rel_installdir && cp > cp_base) + { + bool same = false; + const char *rpi = rp; + const char *cpi = cp; + + while (rpi > rel_installdir && cpi > cp_base) + { + rpi--; + cpi--; + if (ISSLASH (*rpi) || ISSLASH (*cpi)) + { + if (ISSLASH (*rpi) && ISSLASH (*cpi)) + same = true; + break; + } + /* Do case-insensitive comparison if the file system is always or + often case-insensitive. It's better to accept the comparison + if the difference is only in case, rather than to fail. */ +#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Native Windows, Cygwin, OS/2, DOS - case insignificant file system */ + if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi) + != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi)) + break; +#else + if (*rpi != *cpi) + break; +#endif + } + if (!same) + break; + /* The last pathname component was the same. rpi and cpi now point + to the slash before it. */ + rp = rpi; + cp = cpi; + } + + if (rp > rel_installdir) + { + /* Unexpected: The curr_installdir does not end with rel_installdir. */ + free (curr_installdir); + return NULL; + } + + { + size_t computed_curr_prefix_len = cp - curr_installdir; + char *computed_curr_prefix; + + computed_curr_prefix = (char *) xmalloc (computed_curr_prefix_len + 1); +#ifdef NO_XMALLOC + if (computed_curr_prefix == NULL) + { + free (curr_installdir); + return NULL; + } +#endif + memcpy (computed_curr_prefix, curr_installdir, computed_curr_prefix_len); + computed_curr_prefix[computed_curr_prefix_len] = '\0'; + + free (curr_installdir); + + return computed_curr_prefix; + } + } +} + +#endif /* !IN_LIBRARY || PIC */ + +#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE + +/* Full pathname of shared library, or NULL. */ +static char *shared_library_fullname; + +#if defined _WIN32 && !defined __CYGWIN__ +/* Native Windows only. + On Cygwin, it is better to use the Cygwin provided /proc interface, than + to use native Windows API and cygwin_conv_to_posix_path, because it + supports longer file names + (see ). */ + +/* Determine the full pathname of the shared library when it is loaded. + + Documentation: + */ + +BOOL WINAPI +DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) +{ + (void) reserved; + + if (event == DLL_PROCESS_ATTACH) + { + /* The DLL is being loaded into an application's address range. */ + static char location[MAX_PATH]; + + if (!GetModuleFileName (module_handle, location, sizeof (location))) + /* Shouldn't happen. */ + return FALSE; + + if (!IS_FILE_NAME_WITH_DIR (location)) + /* Shouldn't happen. */ + return FALSE; + + /* Avoid a memory leak when the same DLL get attached, detached, + attached, detached, and so on. This happens e.g. when a spell + checker DLL is used repeatedly by a mail program. */ + if (!(shared_library_fullname != NULL + && strcmp (shared_library_fullname, location) == 0)) + /* Remember the full pathname of the shared library. */ + shared_library_fullname = strdup (location); + } + + return TRUE; +} + +#elif defined __EMX__ + +extern int _CRT_init (void); +extern void _CRT_term (void); +extern void __ctordtorInit (void); +extern void __ctordtorTerm (void); + +unsigned long _System +_DLL_InitTerm (unsigned long hModule, unsigned long ulFlag) +{ + static char location[CCHMAXPATH]; + + switch (ulFlag) + { + case 0: + if (_CRT_init () == -1) + return 0; + + __ctordtorInit(); + + /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html + for specification of DosQueryModuleName(). */ + if (DosQueryModuleName (hModule, sizeof (location), location)) + return 0; + + _fnslashify (location); + shared_library_fullname = strdup (location); + break; + + case 1: + __ctordtorTerm(); + + _CRT_term (); + break; + } + + return 1; +} + +#else /* Unix */ + +static void +find_shared_library_fullname () +{ +#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__ + /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline() + function. + Cygwin >= 1.5 has /proc/self/maps and the getline() function too. + But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on + Cygwin 1.7. */ + FILE *fp; + + /* Open the current process' maps file. It describes one VMA per line. */ + fp = fopen ("/proc/self/maps", "r"); + if (fp) + { + unsigned long address = (unsigned long) &find_shared_library_fullname; + for (;;) + { + unsigned long start, end; + int c; + + if (fscanf (fp, "%lx-%lx", &start, &end) != 2) + break; + if (address >= start && address <= end - 1) + { + /* Found it. Now see if this line contains a filename. */ + while (c = getc (fp), c != EOF && c != '\n' && c != '/') + continue; + if (c == '/') + { + size_t size; + int len; + + ungetc (c, fp); + shared_library_fullname = NULL; size = 0; + len = getline (&shared_library_fullname, &size, fp); + if (len >= 0) + { + /* Success: filled shared_library_fullname. */ + if (len > 0 && shared_library_fullname[len - 1] == '\n') + shared_library_fullname[len - 1] = '\0'; + } + } + break; + } + while (c = getc (fp), c != EOF && c != '\n') + continue; + } + fclose (fp); + } +#endif +} + +#endif /* Native Windows / EMX / Unix */ + +/* Return the full pathname of the current shared library. + Return NULL if unknown. + Guaranteed to work only on Linux, EMX, Cygwin, and native Windows. */ +static char * +get_shared_library_fullname () +{ +#if !(defined _WIN32 && !defined __CYGWIN__) && !defined __EMX__ + static bool tried_find_shared_library_fullname; + if (!tried_find_shared_library_fullname) + { + find_shared_library_fullname (); + tried_find_shared_library_fullname = true; + } +#endif + return shared_library_fullname; +} + +#endif /* PIC */ + +/* Returns the pathname, relocated according to the current installation + directory. + The returned string is either PATHNAME unmodified or a freshly allocated + string that you can free with free() after casting it to 'char *'. */ +const char * +relocate (const char *pathname) +{ +#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE + static int initialized; + + /* Initialization code for a shared library. */ + if (!initialized) + { + /* At this point, orig_prefix and curr_prefix likely have already been + set through the main program's set_program_name_and_installdir + function. This is sufficient in the case that the library has + initially been installed in the same orig_prefix. But we can do + better, to also cover the cases that 1. it has been installed + in a different prefix before being moved to orig_prefix and (later) + to curr_prefix, 2. unlike the program, it has not moved away from + orig_prefix. */ + const char *orig_installprefix = INSTALLPREFIX; + const char *orig_installdir = INSTALLDIR; + char *curr_prefix_better; + + curr_prefix_better = + compute_curr_prefix (orig_installprefix, orig_installdir, + get_shared_library_fullname ()); + + set_relocation_prefix (orig_installprefix, + curr_prefix_better != NULL + ? curr_prefix_better + : curr_prefix); + + if (curr_prefix_better != NULL) + free (curr_prefix_better); + + initialized = 1; + } +#endif + + /* Note: It is not necessary to perform case insensitive comparison here, + even for DOS-like file systems, because the pathname argument was + typically created from the same Makefile variable as orig_prefix came + from. */ + if (orig_prefix != NULL && curr_prefix != NULL + && strncmp (pathname, orig_prefix, orig_prefix_len) == 0) + { + if (pathname[orig_prefix_len] == '\0') + { + /* pathname equals orig_prefix. */ + char *result = (char *) xmalloc (strlen (curr_prefix) + 1); + +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + strcpy (result, curr_prefix); + return result; + } + } + else if (ISSLASH (pathname[orig_prefix_len])) + { + /* pathname starts with orig_prefix. */ + const char *pathname_tail = &pathname[orig_prefix_len]; + char *result = + (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1); + +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + memcpy (result, curr_prefix, curr_prefix_len); + strcpy (result + curr_prefix_len, pathname_tail); + return result; + } + } + } + +#ifdef __EMX__ +# ifdef __KLIBC__ +# undef strncmp + + if (strncmp (pathname, "/@unixroot", 10) == 0 + && (pathname[10] == '\0' || ISSLASH (pathname[10]))) + { + /* kLIBC itself processes /@unixroot prefix */ + return pathname; + } + else +# endif + if (ISSLASH (pathname[0])) + { + const char *unixroot = getenv ("UNIXROOT"); + + if (unixroot && HAS_DEVICE (unixroot) && unixroot[2] == '\0') + { + char *result = (char *) xmalloc (2 + strlen (pathname) + 1); +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + memcpy (result, unixroot, 2); + strcpy (result + 2, pathname); + return result; + } + } + } +#endif + + /* Nothing to relocate. */ + return pathname; +} + +/* Returns the pathname, relocated according to the current installation + directory. + This function sets *ALLOCATEDP to the allocated memory, or to NULL if + no memory allocation occurs. So that, after you're done with the return + value, to reclaim allocated memory, you can do: free (*ALLOCATEDP). */ +const char * +relocate2 (const char *pathname, char **allocatedp) +{ + const char *result = relocate (pathname); + *allocatedp = (result != pathname ? (char *) result : NULL); + return result; +} + +#endif diff --git a/jni/parted/libiconv/srclib/relocatable.h b/jni/parted/libiconv/srclib/relocatable.h new file mode 100755 index 0000000..49452fe --- /dev/null +++ b/jni/parted/libiconv/srclib/relocatable.h @@ -0,0 +1,104 @@ +/* Provide relocatable packages. + Copyright (C) 2003, 2005, 2008-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _RELOCATABLE_H +#define _RELOCATABLE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* This can be enabled through the configure --enable-relocatable option. */ +#if ENABLE_RELOCATABLE + +/* When building a DLL, we must export some functions. Note that because + this is a private .h file, we don't need to use __declspec(dllimport) + in any case. */ +#if HAVE_VISIBILITY && BUILDING_DLL +# define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_DLL +# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport) +#else +# define RELOCATABLE_DLL_EXPORTED +#endif + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +extern RELOCATABLE_DLL_EXPORTED void + set_relocation_prefix (const char *orig_prefix, + const char *curr_prefix); + +/* Returns the pathname, relocated according to the current installation + directory. + The returned string is either PATHNAME unmodified or a freshly allocated + string that you can free with free() after casting it to 'char *'. */ +extern const char * relocate (const char *pathname); + +/* Returns the pathname, relocated according to the current installation + directory. + This function sets *ALLOCATEDP to the allocated memory, or to NULL if + no memory allocation occurs. So that, after you're done with the return + value, to reclaim allocated memory, you can do: free (*ALLOCATEDP). */ +extern const char * relocate2 (const char *pathname, char **allocatedp); + +/* Memory management: relocate() potentially allocates memory, because it has + to construct a fresh pathname. If this is a problem because your program + calls relocate() frequently or because you want to fix all potential memory + leaks anyway, you have three options: + 1) Use this idiom: + const char *pathname = ...; + const char *rel_pathname = relocate (pathname); + ... + if (rel_pathname != pathname) + free ((char *) rel_pathname); + 2) Use this idiom: + char *allocated; + const char *rel_pathname = relocate2 (..., &allocated); + ... + free (allocated); + 3) Think about caching the result. */ + +/* Convenience function: + Computes the current installation prefix, based on the original + installation prefix, the original installation directory of a particular + file, and the current pathname of this file. + Returns it, freshly allocated. Returns NULL upon failure. */ +extern char * compute_curr_prefix (const char *orig_installprefix, + const char *orig_installdir, + const char *curr_pathname) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#else + +/* By default, we use the hardwired pathnames. */ +#define relocate(pathname) (pathname) +#define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname)) + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _RELOCATABLE_H */ diff --git a/jni/parted/libiconv/srclib/relocwrapper.c b/jni/parted/libiconv/srclib/relocwrapper.c new file mode 100755 index 0000000..ff0ad41 --- /dev/null +++ b/jni/parted/libiconv/srclib/relocwrapper.c @@ -0,0 +1,224 @@ +/* Relocating wrapper program. + Copyright (C) 2003, 2005-2007, 2009-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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 3 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, see . */ + +/* Dependencies: + relocwrapper + -> progname + -> progreloc + -> stat + -> filename + -> pathmax + -> verify + -> areadlink + -> careadlinkat + -> allocator + -> readlink + -> stat + -> canonicalize-lgpl + -> libc-config + -> errno + -> fcntl-h + -> stdbool + -> sys_stat + -> unistd + -> eloop-threshold + -> filename + -> idx + -> intprops + -> scratch_buffer + -> malloc-posix + -> realloc-posix + -> free-posix + -> pathmax + -> mempcpy + -> rawmemchr + -> readlink + -> stat + -> double-slash-root + -> relocatable + -> setenv + -> malloca + -> fprintf-posix [ignore, cut dependency tree here] + -> strerror [ignore, cut dependency tree here] + -> c-ctype + + Macros that need to be set while compiling this file: + - ENABLE_RELOCATABLE 1 + - INSTALLPREFIX the base installation directory + - INSTALLDIR the directory into which this program is installed + - LIBPATHVAR the platform dependent runtime library path variable + - LIBDIRS a comma-terminated list of strings representing the list of + directories that contain the libraries at installation time + + We don't want to internationalize this wrapper because then it would + depend on libintl and therefore need relocation itself. So use only + libc functions, no gettext(), no error(), no xmalloc(), no xsetenv(). + */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include + +#include +#include +#include +#include +#include + +#include "progname.h" +#include "relocatable.h" +#include "c-ctype.h" +#include "verify.h" + +/* Use the system functions, not the gnulib overrides in this file. */ +#undef fprintf +#undef strerror + +/* Return a copy of the filename, with an extra ".bin" at the end. + More generally, it replaces "${EXEEXT}" at the end with ".bin${EXEEXT}". */ +static char * +add_dotbin (const char *filename) +{ + size_t filename_len = strlen (filename); + char *result = (char *) malloc (filename_len + 4 + 1); + + if (result != NULL) + { + if (sizeof (EXEEXT) > sizeof ("")) + { + /* EXEEXT handling. */ + const size_t exeext_len = sizeof (EXEEXT) - sizeof (""); + static const char exeext[] = EXEEXT; + if (filename_len > exeext_len) + { + /* Compare using an inlined copy of c_strncasecmp(), because + the filenames may have undergone a case conversion since + they were packaged. In other words, EXEEXT may be ".exe" + on one system and ".EXE" on another. */ + const char *s1 = filename + filename_len - exeext_len; + const char *s2 = exeext; + for (; *s1 != '\0'; s1++, s2++) + { + unsigned char c1 = *s1; + unsigned char c2 = *s2; + if (c_tolower (c1) != c_tolower (c2)) + goto simple_append; + } + /* Insert ".bin" before EXEEXT or its equivalent. */ + memcpy (result, filename, filename_len - exeext_len); + memcpy (result + filename_len - exeext_len, ".bin", 4); + memcpy (result + filename_len - exeext_len + 4, + filename + filename_len - exeext_len, + exeext_len + 1); + return result; + } + } + simple_append: + /* Simply append ".bin". */ + memcpy (result, filename, filename_len); + memcpy (result + filename_len, ".bin", 4 + 1); + return result; + } + else + { + fprintf (stderr, "%s: %s\n", program_name, "memory exhausted"); + exit (1); + } +} + +/* List of directories that contain the libraries. */ +static const char *libdirs[] = { LIBDIRS NULL }; +/* Verify that at least one directory is given. */ +verify (sizeof (libdirs) / sizeof (libdirs[0]) > 1); + +/* Relocate the list of directories that contain the libraries. */ +static void +relocate_libdirs () +{ + size_t i; + + for (i = 0; i < sizeof (libdirs) / sizeof (libdirs[0]) - 1; i++) + libdirs[i] = relocate (libdirs[i]); +} + +/* Activate the list of directories in the LIBPATHVAR. */ +static void +activate_libdirs () +{ + const char *old_value; + size_t total; + size_t i; + char *value; + char *p; + + old_value = getenv (LIBPATHVAR); + if (old_value == NULL) + old_value = ""; + + total = 0; + for (i = 0; i < sizeof (libdirs) / sizeof (libdirs[0]) - 1; i++) + total += strlen (libdirs[i]) + 1; + total += strlen (old_value) + 1; + + value = (char *) malloc (total); + if (value == NULL) + { + fprintf (stderr, "%s: %s\n", program_name, "memory exhausted"); + exit (1); + } + p = value; + for (i = 0; i < sizeof (libdirs) / sizeof (libdirs[0]) - 1; i++) + { + size_t len = strlen (libdirs[i]); + memcpy (p, libdirs[i], len); + p += len; + *p++ = ':'; + } + if (old_value[0] != '\0') + strcpy (p, old_value); + else + p[-1] = '\0'; + + if (setenv (LIBPATHVAR, value, 1) < 0) + { + fprintf (stderr, "%s: %s\n", program_name, "memory exhausted"); + exit (1); + } +} + +int +main (int argc, char *argv[]) +{ + char *full_program_name; + + /* Set the program name and perform preparations for + get_full_program_name() and relocate(). */ + set_program_name_and_installdir (argv[0], INSTALLPREFIX, INSTALLDIR); + + /* Get the full program path. (Important if accessed through a symlink.) */ + full_program_name = get_full_program_name (); + if (full_program_name == NULL) + full_program_name = argv[0]; + + /* Invoke the real program, with suffix ".bin". */ + argv[0] = add_dotbin (full_program_name); + relocate_libdirs (); + activate_libdirs (); + execv (argv[0], argv); + fprintf (stderr, "%s: could not execute %s: %s\n", + program_name, argv[0], strerror (errno)); + exit (127); +} diff --git a/jni/parted/libiconv/srclib/safe-read.h b/jni/parted/libiconv/srclib/safe-read.h new file mode 100755 index 0000000..a39bb98 --- /dev/null +++ b/jni/parted/libiconv/srclib/safe-read.h @@ -0,0 +1,47 @@ +/* An interface to read() that retries after interrupts. + Copyright (C) 2002, 2006, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Some system calls may be interrupted and fail with errno = EINTR in the + following situations: + - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user + types Ctrl-Z) on some platforms: Mac OS X. + - The process receives a signal for which a signal handler was installed + with sigaction() with an sa_flags field that does not contain + SA_RESTART. + - The process receives a signal for which a signal handler was installed + with signal() and for which no call to siginterrupt(sig,0) was done, + on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris. + + This module provides a wrapper around read() that handles EINTR. */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define SAFE_READ_ERROR ((size_t) -1) + +/* Read up to COUNT bytes at BUF from descriptor FD, retrying if interrupted. + Return the actual number of bytes read, zero for EOF, or SAFE_READ_ERROR + upon error. */ +extern size_t safe_read (int fd, void *buf, size_t count); + + +#ifdef __cplusplus +} +#endif diff --git a/jni/parted/libiconv/srclib/scratch_buffer.h b/jni/parted/libiconv/srclib/scratch_buffer.h new file mode 100755 index 0000000..f4fe5e8 --- /dev/null +++ b/jni/parted/libiconv/srclib/scratch_buffer.h @@ -0,0 +1,127 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2017-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, 2017. */ + +#ifndef _GL_SCRATCH_BUFFER_H +#define _GL_SCRATCH_BUFFER_H + +/* Scratch buffers with a default stack allocation and fallback to + heap allocation. It is expected that this function is used in this + way: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + return -1; + + scratch_buffer_free (&tmpbuf); + return 0; + + The allocation functions (scratch_buffer_grow, + scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make + sure that the heap allocation, if any, is freed, so that the code + above does not have a memory leak. The buffer still remains in a + state that can be deallocated using scratch_buffer_free, so a loop + like this is valid as well: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + break; + + scratch_buffer_free (&tmpbuf); + + scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed + to grow the buffer by at least 512 bytes. This means that when + using the scratch buffer as a backing store for a non-character + array whose element size, in bytes, is 512 or smaller, the scratch + buffer only has to grow once to make room for at least one more + element. +*/ + +/* Scratch buffer. Must be initialized with scratch_buffer_init + before its use. */ +struct scratch_buffer; + +/* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space + and BUFFER->length reflects the available space. */ +#if 0 +extern void scratch_buffer_init (struct scratch_buffer *buffer); +#endif + +/* Deallocates *BUFFER (if it was heap-allocated). */ +#if 0 +extern void scratch_buffer_free (struct scratch_buffer *buffer); +#endif + +/* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT + preserved. Return true on success, false on allocation failure (in + which case the old buffer is freed). On success, the new buffer is + larger than the previous size. On failure, *BUFFER is deallocated, + but remains in a free-able state, and errno is set. */ +#if 0 +extern bool scratch_buffer_grow (struct scratch_buffer *buffer); +#endif + +/* Like scratch_buffer_grow, but preserve the old buffer + contents on success, as a prefix of the new buffer. */ +#if 0 +extern bool scratch_buffer_grow_preserve (struct scratch_buffer *buffer); +#endif + +/* Grow *BUFFER so that it can store at least NELEM elements of SIZE + bytes. The buffer contents are NOT preserved. Both NELEM and SIZE + can be zero. Return true on success, false on allocation failure + (in which case the old buffer is freed, but *BUFFER remains in a + free-able state, and errno is set). It is unspecified whether this + function can reduce the array size. */ +#if 0 +extern bool scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size); +#endif + +/* Return a copy of *BUFFER's first SIZE bytes as a heap-allocated block, + deallocating *BUFFER if it was heap-allocated. SIZE must be at + most *BUFFER's size. Return NULL (setting errno) on memory + exhaustion. */ +#if 0 +extern void *scratch_buffer_dupfree (struct scratch_buffer *buffer, + size_t size); +#endif + + +/* The implementation is imported from glibc. */ + +/* Avoid possible conflicts with symbols exported by the GNU libc. */ +#define __libc_scratch_buffer_dupfree gl_scratch_buffer_dupfree +#define __libc_scratch_buffer_grow gl_scratch_buffer_grow +#define __libc_scratch_buffer_grow_preserve gl_scratch_buffer_grow_preserve +#define __libc_scratch_buffer_set_array_size gl_scratch_buffer_set_array_size + +#ifndef _GL_LIKELY +/* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ +# define _GL_LIKELY(cond) __builtin_expect ((cond), 1) +# define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) +#endif + +#include + +#endif /* _GL_SCRATCH_BUFFER_H */ diff --git a/jni/parted/libiconv/srclib/setenv.c b/jni/parted/libiconv/srclib/setenv.c new file mode 100755 index 0000000..ebfd4e5 --- /dev/null +++ b/jni/parted/libiconv/srclib/setenv.c @@ -0,0 +1,390 @@ +/* Copyright (C) 1992, 1995-2003, 2005-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if !_LIBC +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the name == NULL test below. */ +# define _GL_ARG_NONNULL(params) + +# define _GL_USE_STDLIB_ALLOC 1 +# include +#endif + +#include + +/* Specification. */ +#include + +#include +#ifndef __set_errno +# define __set_errno(ev) ((errno) = (ev)) +#endif + +#include +#if _LIBC || HAVE_UNISTD_H +# include +#endif + +#if !_LIBC +# include "malloca.h" +#endif + +#if _LIBC || !HAVE_SETENV + +#if !_LIBC +# define __environ environ +#endif + +#if _LIBC +/* This lock protects against simultaneous modifications of 'environ'. */ +# include +__libc_lock_define_initialized (static, envlock) +# define LOCK __libc_lock_lock (envlock) +# define UNLOCK __libc_lock_unlock (envlock) +#else +# define LOCK +# define UNLOCK +#endif + +/* In the GNU C library we must keep the namespace clean. */ +#ifdef _LIBC +# define setenv __setenv +# define clearenv __clearenv +# define tfind __tfind +# define tsearch __tsearch +#endif + +/* In the GNU C library implementation we try to be more clever and + allow arbitrarily many changes of the environment given that the used + values are from a small set. Outside glibc this will eat up all + memory after a while. */ +#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ + && (defined __GNUC__ || defined __clang__)) +# define USE_TSEARCH 1 +# include +typedef int (*compar_fn_t) (const void *, const void *); + +/* This is a pointer to the root of the search tree with the known + values. */ +static void *known_values; + +# define KNOWN_VALUE(Str) \ + ({ \ + void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ + value != NULL ? *(char **) value : NULL; \ + }) +# define STORE_VALUE(Str) \ + tsearch (Str, &known_values, (compar_fn_t) strcmp) + +#else +# undef USE_TSEARCH + +# define KNOWN_VALUE(Str) NULL +# define STORE_VALUE(Str) do { } while (0) + +#endif + + +/* If this variable is not a null pointer we allocated the current + environment. */ +static char **last_environ; + + +/* This function is used by 'setenv' and 'putenv'. The difference between + the two functions is that for the former must create a new string which + is then placed in the environment, while the argument of 'putenv' + must be used directly. This is all complicated by the fact that we try + to reuse values once generated for a 'setenv' call since we can never + free the strings. */ +int +__add_to_environ (const char *name, const char *value, const char *combined, + int replace) +{ + char **ep; + size_t size; + const size_t namelen = strlen (name); + const size_t vallen = value != NULL ? strlen (value) + 1 : 0; + + LOCK; + + /* We have to get the pointer now that we have the lock and not earlier + since another thread might have created a new environment. */ + ep = __environ; + + size = 0; + if (ep != NULL) + { + for (; *ep != NULL; ++ep) + if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') + break; + else + ++size; + } + + if (ep == NULL || *ep == NULL) + { + char **new_environ; +#ifdef USE_TSEARCH + char *new_value; +#endif + + /* We allocated this space; we can extend it. */ + new_environ = + (char **) (last_environ == NULL + ? malloc ((size + 2) * sizeof (char *)) + : realloc (last_environ, (size + 2) * sizeof (char *))); + if (new_environ == NULL) + { + /* It's easier to set errno to ENOMEM than to rely on the + 'malloc-posix' and 'realloc-posix' gnulib modules. */ + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + + /* If the whole entry is given add it. */ + if (combined != NULL) + /* We must not add the string to the search tree since it belongs + to the user. */ + new_environ[size] = (char *) combined; + else + { + /* See whether the value is already known. */ +#ifdef USE_TSEARCH +# ifdef _LIBC + new_value = (char *) alloca (namelen + 1 + vallen); + __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), + value, vallen); +# else + new_value = (char *) malloca (namelen + 1 + vallen); + if (new_value == NULL) + { + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + memcpy (new_value, name, namelen); + new_value[namelen] = '='; + memcpy (&new_value[namelen + 1], value, vallen); +# endif + + new_environ[size] = KNOWN_VALUE (new_value); + if (new_environ[size] == NULL) +#endif + { + new_environ[size] = (char *) malloc (namelen + 1 + vallen); + if (new_environ[size] == NULL) + { +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + +#ifdef USE_TSEARCH + memcpy (new_environ[size], new_value, namelen + 1 + vallen); +#else + memcpy (new_environ[size], name, namelen); + new_environ[size][namelen] = '='; + memcpy (&new_environ[size][namelen + 1], value, vallen); +#endif + /* And save the value now. We cannot do this when we remove + the string since then we cannot decide whether it is a + user string or not. */ + STORE_VALUE (new_environ[size]); + } +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + } + + if (__environ != last_environ) + memcpy ((char *) new_environ, (char *) __environ, + size * sizeof (char *)); + + new_environ[size + 1] = NULL; + + last_environ = __environ = new_environ; + } + else if (replace) + { + char *np; + + /* Use the user string if given. */ + if (combined != NULL) + np = (char *) combined; + else + { +#ifdef USE_TSEARCH + char *new_value; +# ifdef _LIBC + new_value = alloca (namelen + 1 + vallen); + __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), + value, vallen); +# else + new_value = malloca (namelen + 1 + vallen); + if (new_value == NULL) + { + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + memcpy (new_value, name, namelen); + new_value[namelen] = '='; + memcpy (&new_value[namelen + 1], value, vallen); +# endif + + np = KNOWN_VALUE (new_value); + if (np == NULL) +#endif + { + np = (char *) malloc (namelen + 1 + vallen); + if (np == NULL) + { +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + +#ifdef USE_TSEARCH + memcpy (np, new_value, namelen + 1 + vallen); +#else + memcpy (np, name, namelen); + np[namelen] = '='; + memcpy (&np[namelen + 1], value, vallen); +#endif + /* And remember the value. */ + STORE_VALUE (np); + } +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + } + + *ep = np; + } + + UNLOCK; + + return 0; +} + +int +setenv (const char *name, const char *value, int replace) +{ + if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) + { + __set_errno (EINVAL); + return -1; + } + + return __add_to_environ (name, value, NULL, replace); +} + +/* The 'clearenv' was planned to be added to POSIX.1 but probably + never made it. Nevertheless the POSIX.9 standard (POSIX bindings + for Fortran 77) requires this function. */ +int +clearenv (void) +{ + LOCK; + + if (__environ == last_environ && __environ != NULL) + { + /* We allocated this environment so we can free it. */ + free (__environ); + last_environ = NULL; + } + + /* Clear the environment pointer removes the whole environment. */ + __environ = NULL; + + UNLOCK; + + return 0; +} + +#ifdef _LIBC +static void +free_mem (void) +{ + /* Remove all traces. */ + clearenv (); + + /* Now remove the search tree. */ + __tdestroy (known_values, free); + known_values = NULL; +} +text_set_element (__libc_subfreeres, free_mem); + + +# undef setenv +# undef clearenv +weak_alias (__setenv, setenv) +weak_alias (__clearenv, clearenv) +#endif + +#endif /* _LIBC || !HAVE_SETENV */ + +/* The rest of this file is called into use when replacing an existing + but buggy setenv. Known bugs include failure to diagnose invalid + name, and consuming a leading '=' from value. */ +#if HAVE_SETENV + +# undef setenv +# if !HAVE_DECL_SETENV +extern int setenv (const char *, const char *, int); +# endif +# define STREQ(a, b) (strcmp (a, b) == 0) + +int +rpl_setenv (const char *name, const char *value, int replace) +{ + int result; + if (!name || !*name || strchr (name, '=')) + { + errno = EINVAL; + return -1; + } + /* Call the real setenv even if replace is 0, in case implementation + has underlying data to update, such as when environ changes. */ + result = setenv (name, value, replace); + if (result == 0 && replace && *value == '=') + { + char *tmp = getenv (name); + if (!STREQ (tmp, value)) + { + int saved_errno; + size_t len = strlen (value); + tmp = malloca (len + 2); + /* Since leading '=' is eaten, double it up. */ + *tmp = '='; + memcpy (tmp + 1, value, len + 1); + result = setenv (name, tmp, replace); + saved_errno = errno; + freea (tmp); + errno = saved_errno; + } + } + return result; +} + +#endif /* HAVE_SETENV */ diff --git a/jni/parted/libiconv/srclib/signal.h b/jni/parted/libiconv/srclib/signal.h new file mode 100755 index 0000000..e5db18d --- /dev/null +++ b/jni/parted/libiconv/srclib/signal.h @@ -0,0 +1,994 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 2006-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) +/* Special invocation convention: + - Inside glibc header files. + - On glibc systems we have a sequence of nested includes + -> -> . + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. + - On glibc systems with GCC 4.3 we have a sequence of nested includes + -> -> -> . + In this situation, some of the functions are not yet declared, therefore + we cannot provide the C++ aliases. */ + +# include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SIGNAL_H + +#define _GL_ALREADY_INCLUDING_SIGNAL_H + +/* Define pid_t, uid_t. + Also, mingw defines sigset_t not in , but in . + On Solaris 10, includes , which eventually includes + us; so include now, before the second inclusion guard. */ +#include + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#undef _GL_ALREADY_INCLUDING_SIGNAL_H + +#ifndef _GL_SIGNAL_H +#define _GL_SIGNAL_H + +/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android, + OS/2 kLIBC declare pthread_sigmask in , not in . + But avoid namespace pollution on glibc systems.*/ +#if (0 || defined GNULIB_POSIXCHECK) \ + && ((defined __APPLE__ && defined __MACH__) \ + || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \ + || defined __sun || defined __ANDROID__ || defined __KLIBC__) \ + && ! defined __GLIBC__ +# include +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* On AIX, sig_atomic_t already includes volatile. C99 requires that + 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. + Hence, redefine this to a non-volatile type as needed. */ +#if ! 1 +# if !GNULIB_defined_sig_atomic_t +typedef int rpl_sig_atomic_t; +# undef sig_atomic_t +# define sig_atomic_t rpl_sig_atomic_t +# define GNULIB_defined_sig_atomic_t 1 +# endif +#endif + +/* A set or mask of signals. */ +#if !1 +# if !GNULIB_defined_sigset_t +typedef unsigned int sigset_t; +# define GNULIB_defined_sigset_t 1 +# endif +#endif + +/* Define sighandler_t, the type of signal handlers. A GNU extension. */ +#if !1 +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_sighandler_t +typedef void (*sighandler_t) (int); +# define GNULIB_defined_sighandler_t 1 +# endif +# ifdef __cplusplus +} +# endif +#endif + + +#if 1 +# ifndef SIGPIPE +/* Define SIGPIPE to a value that does not overlap with other signals. */ +# define SIGPIPE 13 +# define GNULIB_defined_SIGPIPE 1 +/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', + 'write', 'stdio'. */ +# endif +#endif + + +/* Maximum signal number + 1. */ +#ifndef NSIG +# if defined __TANDEM +# define NSIG 32 +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_sigmask +# define pthread_sigmask rpl_pthread_sigmask +# endif +_GL_FUNCDECL_RPL (pthread_sigmask, int, + (int how, + const sigset_t *restrict new_mask, + sigset_t *restrict old_mask)); +_GL_CXXALIAS_RPL (pthread_sigmask, int, + (int how, + const sigset_t *restrict new_mask, + sigset_t *restrict old_mask)); +# else +# if !(1 || defined pthread_sigmask) +_GL_FUNCDECL_SYS (pthread_sigmask, int, + (int how, + const sigset_t *restrict new_mask, + sigset_t *restrict old_mask)); +# endif +_GL_CXXALIAS_SYS (pthread_sigmask, int, + (int how, + const sigset_t *restrict new_mask, + sigset_t *restrict old_mask)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (pthread_sigmask); +# endif +#elif defined GNULIB_POSIXCHECK +# undef pthread_sigmask +# if HAVE_RAW_DECL_PTHREAD_SIGMASK +_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " + "use gnulib module pthread_sigmask for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef raise +# define raise rpl_raise +# endif +_GL_FUNCDECL_RPL (raise, int, (int sig)); +_GL_CXXALIAS_RPL (raise, int, (int sig)); +# else +# if !1 +_GL_FUNCDECL_SYS (raise, int, (int sig)); +# endif +_GL_CXXALIAS_SYS (raise, int, (int sig)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (raise); +# endif +#elif defined GNULIB_POSIXCHECK +# undef raise +/* Assume raise is always declared. */ +_GL_WARN_ON_USE (raise, "raise can crash on native Windows - " + "use gnulib module raise for portability"); +#endif + + +#if 1 +# if !1 + +# ifndef GNULIB_defined_signal_blocking +# define GNULIB_defined_signal_blocking 1 +# endif + +/* Maximum signal number + 1. */ +# ifndef NSIG +# define NSIG 32 +# endif + +/* This code supports only 32 signals. */ +# if !GNULIB_defined_verify_NSIG_constraint +typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; +# define GNULIB_defined_verify_NSIG_constraint 1 +# endif + +# endif + +/* When also using extern inline, suppress the use of static inline in + standard headers of problematic Apple configurations, as Libc at + least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., + . + Perhaps Apple will fix this some day. */ +#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ + && (defined __i386__ || defined __x86_64__)) +# undef sigaddset +# undef sigdelset +# undef sigemptyset +# undef sigfillset +# undef sigismember +#endif + +/* Test whether a given signal is contained in a signal set. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigismember +# endif +# else +_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); +_GL_CXXALIASWARN (sigismember); + +/* Initialize a signal set to the empty set. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigemptyset +# endif +# else +_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); +_GL_CXXALIASWARN (sigemptyset); + +/* Add a signal to a signal set. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigaddset +# endif +# else +_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); +_GL_CXXALIASWARN (sigaddset); + +/* Remove a signal from a signal set. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigdelset +# endif +# else +_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); +_GL_CXXALIASWARN (sigdelset); + +/* Fill a signal set with all possible signals. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigfillset +# endif +# else +_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); +_GL_CXXALIASWARN (sigfillset); + +/* Return the set of those blocked signals that are pending. */ +# if !1 +_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); +_GL_CXXALIASWARN (sigpending); + +/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. + Then, if SET is not NULL, affect the current set of blocked signals by + combining it with *SET as indicated in OPERATION. + In this implementation, you are not allowed to change a signal handler + while the signal is blocked. */ +# if !1 +# define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ +# define SIG_SETMASK 1 /* blocked_set = *set; */ +# define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ +_GL_FUNCDECL_SYS (sigprocmask, int, + (int operation, + const sigset_t *restrict set, + sigset_t *restrict old_set)); +# endif +_GL_CXXALIAS_SYS (sigprocmask, int, + (int operation, + const sigset_t *restrict set, + sigset_t *restrict old_set)); +_GL_CXXALIASWARN (sigprocmask); + +/* Install the handler FUNC for signal SIG, and return the previous + handler. */ +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_function_taking_int_returning_void_t +typedef void (*_gl_function_taking_int_returning_void_t) (int); +# define GNULIB_defined_function_taking_int_returning_void_t 1 +# endif +# ifdef __cplusplus +} +# endif +# if !1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define signal rpl_signal +# endif +_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +# else +/* On OpenBSD, the declaration of 'signal' may not be present at this point, + because it occurs in , not directly. */ +# if defined __OpenBSD__ +_GL_FUNCDECL_SYS (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +# endif +_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (signal); +# endif + +# if !1 && GNULIB_defined_SIGPIPE +/* Raise signal SIGPIPE. */ +_GL_EXTERN_C int _gl_raise_SIGPIPE (void); +# endif + +#elif defined GNULIB_POSIXCHECK +# undef sigaddset +# if HAVE_RAW_DECL_SIGADDSET +_GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigdelset +# if HAVE_RAW_DECL_SIGDELSET +_GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigemptyset +# if HAVE_RAW_DECL_SIGEMPTYSET +_GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigfillset +# if HAVE_RAW_DECL_SIGFILLSET +_GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigismember +# if HAVE_RAW_DECL_SIGISMEMBER +_GL_WARN_ON_USE (sigismember, "sigismember is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigpending +# if HAVE_RAW_DECL_SIGPENDING +_GL_WARN_ON_USE (sigpending, "sigpending is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigprocmask +# if HAVE_RAW_DECL_SIGPROCMASK +_GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +#endif /* 1 */ + + +#if 0 +# if !1 + +# if !1 + +# if !GNULIB_defined_siginfo_types + +/* Present to allow compilation, but unsupported by gnulib. */ +union sigval +{ + int sival_int; + void *sival_ptr; +}; + +/* Present to allow compilation, but unsupported by gnulib. */ +struct siginfo_t +{ + int si_signo; + int si_code; + int si_errno; + pid_t si_pid; + uid_t si_uid; + void *si_addr; + int si_status; + long si_band; + union sigval si_value; +}; +typedef struct siginfo_t siginfo_t; + +# define GNULIB_defined_siginfo_types 1 +# endif + +# endif /* !1 */ + +/* We assume that platforms which lack the sigaction() function also lack + the 'struct sigaction' type, and vice versa. */ + +# if !GNULIB_defined_struct_sigaction + +struct sigaction +{ + union + { + void (*_sa_handler) (int); + /* Present to allow compilation, but unsupported by gnulib. POSIX + says that implementations may, but not must, make sa_sigaction + overlap with sa_handler, but we know of no implementation where + they do not overlap. */ + void (*_sa_sigaction) (int, siginfo_t *, void *); + } _sa_func; + sigset_t sa_mask; + /* Not all POSIX flags are supported. */ + int sa_flags; +}; +# define sa_handler _sa_func._sa_handler +# define sa_sigaction _sa_func._sa_sigaction +/* Unsupported flags are not present. */ +# define SA_RESETHAND 1 +# define SA_NODEFER 2 +# define SA_RESTART 4 + +# define GNULIB_defined_struct_sigaction 1 +# endif + +_GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, + struct sigaction *restrict)); + +# elif !1 + +# define sa_sigaction sa_handler + +# endif /* !1, !1 */ + +_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, + struct sigaction *restrict)); +_GL_CXXALIASWARN (sigaction); + +#elif defined GNULIB_POSIXCHECK +# undef sigaction +# if HAVE_RAW_DECL_SIGACTION +_GL_WARN_ON_USE (sigaction, "sigaction is unportable - " + "use the gnulib module sigaction for portability"); +# endif +#endif + +/* Some systems don't have SA_NODEFER. */ +#ifndef SA_NODEFER +# define SA_NODEFER 0 +#endif + + +#endif /* _GL_SIGNAL_H */ +#endif /* _GL_SIGNAL_H */ +#endif diff --git a/jni/parted/libiconv/srclib/sigprocmask.c b/jni/parted/libiconv/srclib/sigprocmask.c new file mode 100755 index 0000000..a805da6 --- /dev/null +++ b/jni/parted/libiconv/srclib/sigprocmask.c @@ -0,0 +1,349 @@ +/* POSIX compatible signal blocking. + Copyright (C) 2006-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif + +/* We assume that a platform without POSIX signal blocking functions + also does not have the POSIX sigaction() function, only the + signal() function. We also assume signal() has SysV semantics, + where any handler is uninstalled prior to being invoked. This is + true for native Windows platforms. */ + +/* We use raw signal(), but also provide a wrapper rpl_signal() so + that applications can query or change a blocked signal. */ +#undef signal + +/* Provide invalid signal numbers as fallbacks if the uncatchable + signals are not defined. */ +#ifndef SIGKILL +# define SIGKILL (-1) +#endif +#ifndef SIGSTOP +# define SIGSTOP (-1) +#endif + +/* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias + for the signal SIGABRT. Only one signal handler is stored for both + SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ +#if defined _WIN32 && ! defined __CYGWIN__ +# undef SIGABRT_COMPAT +# define SIGABRT_COMPAT 6 +#endif +#ifdef SIGABRT_COMPAT +# define SIGABRT_COMPAT_MASK (1U << SIGABRT_COMPAT) +#else +# define SIGABRT_COMPAT_MASK 0 +#endif + +typedef void (*handler_t) (int); + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static handler_t +signal_nothrow (int sig, handler_t handler) +{ + handler_t result; + + TRY_MSVC_INVAL + { + result = signal (sig, handler); + } + CATCH_MSVC_INVAL + { + result = SIG_ERR; + errno = EINVAL; + } + DONE_MSVC_INVAL; + + return result; +} +# define signal signal_nothrow +#endif + +/* Handling of gnulib defined signals. */ + +#if GNULIB_defined_SIGPIPE +static handler_t SIGPIPE_handler = SIG_DFL; +#endif + +#if GNULIB_defined_SIGPIPE +static handler_t +ext_signal (int sig, handler_t handler) +{ + switch (sig) + { + case SIGPIPE: + { + handler_t old_handler = SIGPIPE_handler; + SIGPIPE_handler = handler; + return old_handler; + } + default: /* System defined signal */ + return signal (sig, handler); + } +} +# undef signal +# define signal ext_signal +#endif + +int +sigismember (const sigset_t *set, int sig) +{ + if (sig >= 0 && sig < NSIG) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + return (*set >> sig) & 1; + } + else + return 0; +} + +int +sigemptyset (sigset_t *set) +{ + *set = 0; + return 0; +} + +int +sigaddset (sigset_t *set, int sig) +{ + if (sig >= 0 && sig < NSIG) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + *set |= 1U << sig; + return 0; + } + else + { + errno = EINVAL; + return -1; + } +} + +int +sigdelset (sigset_t *set, int sig) +{ + if (sig >= 0 && sig < NSIG) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + *set &= ~(1U << sig); + return 0; + } + else + { + errno = EINVAL; + return -1; + } +} + + +int +sigfillset (sigset_t *set) +{ + *set = ((2U << (NSIG - 1)) - 1) & ~ SIGABRT_COMPAT_MASK; + return 0; +} + +/* Set of currently blocked signals. */ +static volatile sigset_t blocked_set /* = 0 */; + +/* Set of currently blocked and pending signals. */ +static volatile sig_atomic_t pending_array[NSIG] /* = { 0 } */; + +/* Signal handler that is installed for blocked signals. */ +static void +blocked_handler (int sig) +{ + /* Reinstall the handler, in case the signal occurs multiple times + while blocked. There is an inherent race where an asynchronous + signal in between when the kernel uninstalled the handler and + when we reinstall it will trigger the default handler; oh + well. */ + signal (sig, blocked_handler); + if (sig >= 0 && sig < NSIG) + pending_array[sig] = 1; +} + +int +sigpending (sigset_t *set) +{ + sigset_t pending = 0; + int sig; + + for (sig = 0; sig < NSIG; sig++) + if (pending_array[sig]) + pending |= 1U << sig; + *set = pending; + return 0; +} + +/* The previous signal handlers. + Only the array elements corresponding to blocked signals are relevant. */ +static volatile handler_t old_handlers[NSIG]; + +int +sigprocmask (int operation, const sigset_t *set, sigset_t *old_set) +{ + if (old_set != NULL) + *old_set = blocked_set; + + if (set != NULL) + { + sigset_t new_blocked_set; + sigset_t to_unblock; + sigset_t to_block; + + switch (operation) + { + case SIG_BLOCK: + new_blocked_set = blocked_set | *set; + break; + case SIG_SETMASK: + new_blocked_set = *set; + break; + case SIG_UNBLOCK: + new_blocked_set = blocked_set & ~*set; + break; + default: + errno = EINVAL; + return -1; + } + to_unblock = blocked_set & ~new_blocked_set; + to_block = new_blocked_set & ~blocked_set; + + if (to_block != 0) + { + int sig; + + for (sig = 0; sig < NSIG; sig++) + if ((to_block >> sig) & 1) + { + pending_array[sig] = 0; + if ((old_handlers[sig] = signal (sig, blocked_handler)) != SIG_ERR) + blocked_set |= 1U << sig; + } + } + + if (to_unblock != 0) + { + sig_atomic_t received[NSIG]; + int sig; + + for (sig = 0; sig < NSIG; sig++) + if ((to_unblock >> sig) & 1) + { + if (signal (sig, old_handlers[sig]) != blocked_handler) + /* The application changed a signal handler while the signal + was blocked, bypassing our rpl_signal replacement. + We don't support this. */ + abort (); + received[sig] = pending_array[sig]; + blocked_set &= ~(1U << sig); + pending_array[sig] = 0; + } + else + received[sig] = 0; + + for (sig = 0; sig < NSIG; sig++) + if (received[sig]) + raise (sig); + } + } + return 0; +} + +/* Install the handler FUNC for signal SIG, and return the previous + handler. */ +handler_t +rpl_signal (int sig, handler_t handler) +{ + /* We must provide a wrapper, so that a user can query what handler + they installed even if that signal is currently blocked. */ + if (sig >= 0 && sig < NSIG && sig != SIGKILL && sig != SIGSTOP + && handler != SIG_ERR) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + if (blocked_set & (1U << sig)) + { + /* POSIX states that sigprocmask and signal are both + async-signal-safe. This is not true of our + implementation - there is a slight data race where an + asynchronous interrupt on signal A can occur after we + install blocked_handler but before we have updated + old_handlers for signal B, such that handler A can see + stale information if it calls signal(B). Oh well - + signal handlers really shouldn't try to manipulate the + installed handlers of unrelated signals. */ + handler_t result = old_handlers[sig]; + old_handlers[sig] = handler; + return result; + } + else + return signal (sig, handler); + } + else + { + errno = EINVAL; + return SIG_ERR; + } +} + +#if GNULIB_defined_SIGPIPE +/* Raise the signal SIGPIPE. */ +int +_gl_raise_SIGPIPE (void) +{ + if (blocked_set & (1U << SIGPIPE)) + pending_array[SIGPIPE] = 1; + else + { + handler_t handler = SIGPIPE_handler; + if (handler == SIG_DFL) + exit (128 + SIGPIPE); + else if (handler != SIG_IGN) + (*handler) (SIGPIPE); + } + return 0; +} +#endif diff --git a/jni/parted/libiconv/srclib/stat-time.h b/jni/parted/libiconv/srclib/stat-time.h new file mode 100755 index 0000000..6b0088e --- /dev/null +++ b/jni/parted/libiconv/srclib/stat-time.h @@ -0,0 +1,252 @@ +/* stat-related time functions. + + Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef STAT_TIME_H +#define STAT_TIME_H 1 + +#include "intprops.h" + +#include +#include +#include +#include + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_STAT_TIME_INLINE +# define _GL_STAT_TIME_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type + struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, + ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, + if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim + for access, status change, data modification, or birth (creation) + time respectively. + + These macros are private to stat-time.h. */ +#if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC +# if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC +# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) +# else +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) +# endif +#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC +# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) +#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) +#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) +#endif + +/* Return the nanosecond component of *ST's access time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_atime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_atim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_atim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's status change time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_ctime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_ctim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_ctim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's data modification time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_mtime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_mtim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_mtim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's birth time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_birthtime_ns (_GL_UNUSED struct stat const *st) +{ +# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC + return STAT_TIMESPEC (st, st_birthtim).tv_nsec; +# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + return STAT_TIMESPEC_NS (st, st_birthtim); +# else + return 0; +# endif +} + +/* Return *ST's access time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_atime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_atim); +#else + struct timespec t; + t.tv_sec = st->st_atime; + t.tv_nsec = get_stat_atime_ns (st); + return t; +#endif +} + +/* Return *ST's status change time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_ctime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_ctim); +#else + struct timespec t; + t.tv_sec = st->st_ctime; + t.tv_nsec = get_stat_ctime_ns (st); + return t; +#endif +} + +/* Return *ST's data modification time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_mtime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_mtim); +#else + struct timespec t; + t.tv_sec = st->st_mtime; + t.tv_nsec = get_stat_mtime_ns (st); + return t; +#endif +} + +/* Return *ST's birth time, if available; otherwise return a value + with tv_sec and tv_nsec both equal to -1. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_birthtime (_GL_UNUSED struct stat const *st) +{ + struct timespec t; + +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) + t = STAT_TIMESPEC (st, st_birthtim); +#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + t.tv_sec = st->st_birthtime; + t.tv_nsec = st->st_birthtimensec; +#elif defined _WIN32 && ! defined __CYGWIN__ + /* Native Windows platforms (but not Cygwin) put the "file creation + time" in st_ctime (!). See + . */ +# if _GL_WINDOWS_STAT_TIMESPEC + t = st->st_ctim; +# else + t.tv_sec = st->st_ctime; + t.tv_nsec = 0; +# endif +#else + /* Birth time is not supported. */ + t.tv_sec = -1; + t.tv_nsec = -1; +#endif + +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) + /* FreeBSD and NetBSD sometimes signal the absence of knowledge by + using zero. Attempt to work around this problem. Alas, this can + report failure even for valid timestamps. Also, NetBSD + sometimes returns junk in the birth time fields; work around this + bug if it is detected. */ + if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) + { + t.tv_sec = -1; + t.tv_nsec = -1; + } +#endif + + return t; +} + +/* If a stat-like function returned RESULT, normalize the timestamps + in *ST, in case this platform suffers from the Solaris 11 bug where + tv_nsec might be negative. Return the adjusted RESULT, setting + errno to EOVERFLOW if normalization overflowed. This function + is intended to be private to this .h file. */ +_GL_STAT_TIME_INLINE int +stat_time_normalize (int result, _GL_UNUSED struct stat *st) +{ +#if defined __sun && defined STAT_TIMESPEC + if (result == 0) + { + long int timespec_hz = 1000000000; + short int const ts_off[] = { offsetof (struct stat, st_atim), + offsetof (struct stat, st_mtim), + offsetof (struct stat, st_ctim) }; + int i; + for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) + { + struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]); + long int q = ts->tv_nsec / timespec_hz; + long int r = ts->tv_nsec % timespec_hz; + if (r < 0) + { + r += timespec_hz; + q--; + } + ts->tv_nsec = r; + /* Overflow is possible, as Solaris 11 stat can yield + tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. + INT_ADD_WRAPV is OK, since time_t is signed on Solaris. */ + if (INT_ADD_WRAPV (q, ts->tv_sec, &ts->tv_sec)) + { + errno = EOVERFLOW; + return -1; + } + } + } +#endif + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/jni/parted/libiconv/srclib/stat-w32.c b/jni/parted/libiconv/srclib/stat-w32.c new file mode 100755 index 0000000..c1a2923 --- /dev/null +++ b/jni/parted/libiconv/srclib/stat-w32.c @@ -0,0 +1,461 @@ +/* Core of implementation of fstat and stat for native Windows. + Copyright (C) 2017-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible. */ + +#include + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Attempt to make define FILE_ID_INFO. + But ensure that the redefinition of _WIN32_WINNT does not make us assume + Windows Vista or newer when building for an older version of Windows. */ +#if HAVE_SDKDDKVER_H +# include +# if _WIN32_WINNT >= _WIN32_WINNT_VISTA +# define WIN32_ASSUME_VISTA 1 +# else +# define WIN32_ASSUME_VISTA 0 +# endif +# if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8) +# undef _WIN32_WINNT +# define _WIN32_WINNT _WIN32_WINNT_WIN8 +# endif +#else +# define WIN32_ASSUME_VISTA (_WIN32_WINNT >= _WIN32_WINNT_VISTA) +#endif + +#include +#include +#include +#include +#include +#include +#include + +/* Specification. */ +#include "stat-w32.h" + +#include "pathmax.h" +#include "verify.h" + +/* Don't assume that UNICODE is not defined. */ +#undef LoadLibrary +#define LoadLibrary LoadLibraryA +#undef GetFinalPathNameByHandle +#define GetFinalPathNameByHandle GetFinalPathNameByHandleA + +/* Older mingw headers do not define VOLUME_NAME_NONE. */ +#ifndef VOLUME_NAME_NONE +# define VOLUME_NAME_NONE 4 +#endif + +#if !WIN32_ASSUME_VISTA + +/* Avoid warnings from gcc -Wcast-function-type. */ +# define GetProcAddress \ + (void *) GetProcAddress + +# if _GL_WINDOWS_STAT_INODES == 2 +/* GetFileInformationByHandleEx was introduced only in Windows Vista. */ +typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile, + FILE_INFO_BY_HANDLE_CLASS fiClass, + LPVOID lpBuffer, + DWORD dwBufferSize); +static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL; +# endif +/* GetFinalPathNameByHandle was introduced only in Windows Vista. */ +typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile, + LPSTR lpFilePath, + DWORD lenFilePath, + DWORD dwFlags); +static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL; +static BOOL initialized = FALSE; + +static void +initialize (void) +{ + HMODULE kernel32 = LoadLibrary ("kernel32.dll"); + if (kernel32 != NULL) + { +# if _GL_WINDOWS_STAT_INODES == 2 + GetFileInformationByHandleExFunc = + (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx"); +# endif + GetFinalPathNameByHandleFunc = + (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA"); + } + initialized = TRUE; +} + +#else + +# define GetFileInformationByHandleExFunc GetFileInformationByHandleEx +# define GetFinalPathNameByHandleFunc GetFinalPathNameByHandle + +#endif + +/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ +#if _GL_WINDOWS_STAT_TIMESPEC +struct timespec +_gl_convert_FILETIME_to_timespec (const FILETIME *ft) +{ + struct timespec result; + /* FILETIME: */ + unsigned long long since_1601 = + ((unsigned long long) ft->dwHighDateTime << 32) + | (unsigned long long) ft->dwLowDateTime; + if (since_1601 == 0) + { + result.tv_sec = 0; + result.tv_nsec = 0; + } + else + { + /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 + leap years, in total 134774 days. */ + unsigned long long since_1970 = + since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; + result.tv_sec = since_1970 / (unsigned long long) 10000000; + result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100; + } + return result; +} +#else +time_t +_gl_convert_FILETIME_to_POSIX (const FILETIME *ft) +{ + /* FILETIME: */ + unsigned long long since_1601 = + ((unsigned long long) ft->dwHighDateTime << 32) + | (unsigned long long) ft->dwLowDateTime; + if (since_1601 == 0) + return 0; + else + { + /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 + leap years, in total 134774 days. */ + unsigned long long since_1970 = + since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; + return since_1970 / (unsigned long long) 10000000; + } +} +#endif + +/* Fill *BUF with information about the file designated by H. + PATH is the file name, if known, otherwise NULL. + Return 0 if successful, or -1 with errno set upon failure. */ +int +_gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf) +{ + /* GetFileType + */ + DWORD type = GetFileType (h); + if (type == FILE_TYPE_DISK) + { +#if !WIN32_ASSUME_VISTA + if (!initialized) + initialize (); +#endif + + /* st_mode can be determined through + GetFileAttributesEx + + + or through + GetFileInformationByHandle + + + or through + GetFileInformationByHandleEx with argument FileBasicInfo + + + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + BY_HANDLE_FILE_INFORMATION info; + if (! GetFileInformationByHandle (h, &info)) + goto failed; + + /* Test for error conditions before starting to fill *buf. */ + if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) + { + errno = EOVERFLOW; + return -1; + } + +#if _GL_WINDOWS_STAT_INODES + /* st_ino can be determined through + GetFileInformationByHandle + + + as 64 bits, or through + GetFileInformationByHandleEx with argument FileIdInfo + + + as 128 bits. + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */ + /* Experiments show that GetFileInformationByHandleEx does not provide + much more information than GetFileInformationByHandle: + * The dwVolumeSerialNumber from GetFileInformationByHandle is equal + to the low 32 bits of the 64-bit VolumeSerialNumber from + GetFileInformationByHandleEx, and is apparently sufficient for + identifying the device. + * The nFileIndex from GetFileInformationByHandle is equal to the low + 64 bits of the 128-bit FileId from GetFileInformationByHandleEx, + and the high 64 bits of this 128-bit FileId are zero. + * On a FAT file system, GetFileInformationByHandleEx fails with error + ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle + succeeds. + * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with + error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle + succeeds. */ +# if _GL_WINDOWS_STAT_INODES == 2 + if (GetFileInformationByHandleExFunc != NULL) + { + FILE_ID_INFO id; + if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id))) + { + buf->st_dev = id.VolumeSerialNumber; + verify (sizeof (ino_t) == sizeof (id.FileId)); + memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t)); + goto ino_done; + } + else + { + switch (GetLastError ()) + { + case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */ + case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */ + goto fallback; + default: + goto failed; + } + } + } + fallback: ; + /* Fallback for older Windows versions. */ + buf->st_dev = info.dwVolumeSerialNumber; + buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; + buf->st_ino._gl_ino[1] = 0; + ino_done: ; +# else /* _GL_WINDOWS_STAT_INODES == 1 */ + buf->st_dev = info.dwVolumeSerialNumber; + buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; +# endif +#else + /* st_ino is not wide enough for identifying a file on a device. + Without st_ino, st_dev is pointless. */ + buf->st_dev = 0; + buf->st_ino = 0; +#endif + + /* st_mode. */ + unsigned int mode = + /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ + ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) + | S_IREAD_UGO + | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); + if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + /* Determine whether the file is executable by looking at the file + name suffix. + If the file name is already known, use it. Otherwise, for + non-empty files, it can be determined through + GetFinalPathNameByHandle + + or through + GetFileInformationByHandleEx with argument FileNameInfo + + + Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) + { + char fpath[PATH_MAX]; + if (path != NULL + || (GetFinalPathNameByHandleFunc != NULL + && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE) + < sizeof (fpath) + && (path = fpath, 1))) + { + const char *last_dot = NULL; + const char *p; + for (p = path; *p != '\0'; p++) + if (*p == '.') + last_dot = p; + if (last_dot != NULL) + { + const char *suffix = last_dot + 1; + if (_stricmp (suffix, "exe") == 0 + || _stricmp (suffix, "bat") == 0 + || _stricmp (suffix, "cmd") == 0 + || _stricmp (suffix, "com") == 0) + mode |= S_IEXEC_UGO; + } + } + else + /* Cannot determine file name. Pretend that it is executable. */ + mode |= S_IEXEC_UGO; + } + } + buf->st_mode = mode; + + /* st_nlink can be determined through + GetFileInformationByHandle + + + or through + GetFileInformationByHandleEx with argument FileStandardInfo + + + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks); + + /* There's no easy way to map the Windows SID concept to an integer. */ + buf->st_uid = 0; + buf->st_gid = 0; + + /* st_rdev is irrelevant for normal files and directories. */ + buf->st_rdev = 0; + + /* st_size can be determined through + GetFileSizeEx + + or through + GetFileAttributesEx + + + or through + GetFileInformationByHandle + + + or through + GetFileInformationByHandleEx with argument FileStandardInfo + + + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + if (sizeof (buf->st_size) <= 4) + /* Range check already done above. */ + buf->st_size = info.nFileSizeLow; + else + buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; + + /* st_atime, st_mtime, st_ctime can be determined through + GetFileTime + + or through + GetFileAttributesEx + + + or through + GetFileInformationByHandle + + + or through + GetFileInformationByHandleEx with argument FileBasicInfo + + + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ +#if _GL_WINDOWS_STAT_TIMESPEC + buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); + buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); + buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); +#else + buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); + buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); + buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); +#endif + + return 0; + } + else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE) + { + buf->st_dev = 0; +#if _GL_WINDOWS_STAT_INODES == 2 + buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; +#else + buf->st_ino = 0; +#endif + buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR); + buf->st_nlink = 1; + buf->st_uid = 0; + buf->st_gid = 0; + buf->st_rdev = 0; + if (type == FILE_TYPE_PIPE) + { + /* PeekNamedPipe + */ + DWORD bytes_available; + if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL)) + buf->st_size = bytes_available; + else + buf->st_size = 0; + } + else + buf->st_size = 0; +#if _GL_WINDOWS_STAT_TIMESPEC + buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0; + buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0; + buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0; +#else + buf->st_atime = 0; + buf->st_mtime = 0; + buf->st_ctime = 0; +#endif + return 0; + } + else + { + errno = ENOENT; + return -1; + } + + failed: + { + DWORD error = GetLastError (); + #if 0 + fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error); + #endif + switch (error) + { + case ERROR_ACCESS_DENIED: + case ERROR_SHARING_VIOLATION: + errno = EACCES; + break; + + case ERROR_OUTOFMEMORY: + errno = ENOMEM; + break; + + case ERROR_WRITE_FAULT: + case ERROR_READ_FAULT: + case ERROR_GEN_FAILURE: + errno = EIO; + break; + + default: + errno = EINVAL; + break; + } + return -1; + } +} + +#else + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; + +#endif diff --git a/jni/parted/libiconv/srclib/stat-w32.h b/jni/parted/libiconv/srclib/stat-w32.h new file mode 100755 index 0000000..0f79d61 --- /dev/null +++ b/jni/parted/libiconv/srclib/stat-w32.h @@ -0,0 +1,37 @@ +/* Core of implementation of fstat and stat for native Windows. + Copyright (C) 2017-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _STAT_W32_H +#define _STAT_W32_H 1 + +/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ +#if _GL_WINDOWS_STAT_TIMESPEC +extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft); +#else +extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft); +#endif + +/* Fill *BUF with information about the file designated by H. + PATH is the file name, if known, otherwise NULL. + Return 0 if successful, or -1 with errno set upon failure. */ +extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf); + +/* Bitmasks for st_mode. */ +#define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6)) +#define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6)) +#define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)) + +#endif /* _STAT_W32_H */ diff --git a/jni/parted/libiconv/srclib/stat.c b/jni/parted/libiconv/srclib/stat.c new file mode 100755 index 0000000..574489a --- /dev/null +++ b/jni/parted/libiconv/srclib/stat.c @@ -0,0 +1,440 @@ +/* Work around platform bugs in stat. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake and Bruno Haible. */ + +/* If the user's config.h happens to include , let it include only + the system's here, so that orig_stat doesn't recurse to + rpl_stat. */ +#define __need_system_sys_stat_h +#include + +/* Get the original definition of stat. It might be defined as a macro. */ +#include +#include +#undef __need_system_sys_stat_h + +#if defined _WIN32 && ! defined __CYGWIN__ +# define WINDOWS_NATIVE +#endif + +#if !defined WINDOWS_NATIVE + +static int +orig_stat (const char *filename, struct stat *buf) +{ + return stat (filename, buf); +} + +#endif + +/* Specification. */ +#ifdef __osf__ +/* Write "sys/stat.h" here, not , otherwise OSF/1 5.1 DTK cc + eliminates this include because of the preliminary #include + above. */ +# include "sys/stat.h" +#else +# include +#endif + +#include "stat-time.h" + +#include +#include +#include +#include +#include "filename.h" +#include "malloca.h" +#include "verify.h" + +#ifdef WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include +# include "stat-w32.h" +/* Don't assume that UNICODE is not defined. */ +# undef WIN32_FIND_DATA +# define WIN32_FIND_DATA WIN32_FIND_DATAA +# undef CreateFile +# define CreateFile CreateFileA +# undef FindFirstFile +# define FindFirstFile FindFirstFileA +#endif + +#ifdef WINDOWS_NATIVE +/* Return TRUE if the given file name denotes an UNC root. */ +static BOOL +is_unc_root (const char *rname) +{ + /* Test whether it has the syntax '\\server\share'. */ + if (ISSLASH (rname[0]) && ISSLASH (rname[1])) + { + /* It starts with two slashes. Find the next slash. */ + const char *p = rname + 2; + const char *q = p; + while (*q != '\0' && !ISSLASH (*q)) + q++; + if (q > p && *q != '\0') + { + /* Found the next slash at q. */ + q++; + const char *r = q; + while (*r != '\0' && !ISSLASH (*r)) + r++; + if (r > q && *r == '\0') + return TRUE; + } + } + return FALSE; +} +#endif + +/* Store information about NAME into ST. Work around bugs with + trailing slashes. Mingw has other bugs (such as st_ino always + being 0 on success) which this wrapper does not work around. But + at least this implementation provides the ability to emulate fchdir + correctly. */ + +int +rpl_stat (char const *name, struct stat *buf) +{ +#ifdef WINDOWS_NATIVE + /* Fill the fields ourselves, because the original stat function returns + values for st_atime, st_mtime, st_ctime that depend on the current time + zone. See + */ + /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work + around length limitations + ? */ + + /* POSIX + specifies: "More than two leading characters shall be treated as + a single character." */ + if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) + { + name += 2; + while (ISSLASH (name[1])) + name++; + } + + size_t len = strlen (name); + size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); + + /* Remove trailing slashes (except the very first one, at position + drive_prefix_len), but remember their presence. */ + size_t rlen; + bool check_dir = false; + + rlen = len; + while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) + { + check_dir = true; + if (rlen == drive_prefix_len + 1) + break; + rlen--; + } + + /* Handle '' and 'C:'. */ + if (!check_dir && rlen == drive_prefix_len) + { + errno = ENOENT; + return -1; + } + + /* Handle '\\'. */ + if (rlen == 1 && ISSLASH (name[0]) && len >= 2) + { + errno = ENOENT; + return -1; + } + + const char *rname; + char *malloca_rname; + if (rlen == len) + { + rname = name; + malloca_rname = NULL; + } + else + { + malloca_rname = malloca (rlen + 1); + if (malloca_rname == NULL) + { + errno = ENOMEM; + return -1; + } + memcpy (malloca_rname, name, rlen); + malloca_rname[rlen] = '\0'; + rname = malloca_rname; + } + + /* There are two ways to get at the requested information: + - by scanning the parent directory and examining the relevant + directory entry, + - by opening the file directly. + The first approach fails for root directories (e.g. 'C:\') and + UNC root directories (e.g. '\\server\share'). + The second approach fails for some system files (e.g. 'C:\pagefile.sys' + and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION. + The second approach gives more information (in particular, correct + st_dev, st_ino, st_nlink fields). + So we use the second approach and, as a fallback except for root and + UNC root directories, also the first approach. */ + { + int ret; + + { + /* Approach based on the file. */ + + /* Open a handle to the file. + CreateFile + + */ + HANDLE h = + CreateFile (rname, + FILE_READ_ATTRIBUTES, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only + in case as different) makes sense only when applied to *all* + filesystem operations. */ + FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, + NULL); + if (h != INVALID_HANDLE_VALUE) + { + ret = _gl_fstat_by_handle (h, rname, buf); + CloseHandle (h); + goto done; + } + } + + /* Test for root and UNC root directories. */ + if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len])) + || is_unc_root (rname)) + goto failed; + + /* Fallback. */ + { + /* Approach based on the directory entry. */ + + if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL) + { + /* Other Windows API functions would fail with error + ERROR_INVALID_NAME. */ + if (malloca_rname != NULL) + freea (malloca_rname); + errno = ENOENT; + return -1; + } + + /* Get the details about the directory entry. This can be done through + FindFirstFile + + + or through + FindFirstFileEx with argument FindExInfoBasic + + + */ + WIN32_FIND_DATA info; + HANDLE h = FindFirstFile (rname, &info); + if (h == INVALID_HANDLE_VALUE) + goto failed; + + /* Test for error conditions before starting to fill *buf. */ + if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) + { + FindClose (h); + if (malloca_rname != NULL) + freea (malloca_rname); + errno = EOVERFLOW; + return -1; + } + +# if _GL_WINDOWS_STAT_INODES + buf->st_dev = 0; +# if _GL_WINDOWS_STAT_INODES == 2 + buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; +# else /* _GL_WINDOWS_STAT_INODES == 1 */ + buf->st_ino = 0; +# endif +# else + /* st_ino is not wide enough for identifying a file on a device. + Without st_ino, st_dev is pointless. */ + buf->st_dev = 0; + buf->st_ino = 0; +# endif + + /* st_mode. */ + unsigned int mode = + /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ + ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) + | S_IREAD_UGO + | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); + if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + /* Determine whether the file is executable by looking at the file + name suffix. */ + if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) + { + const char *last_dot = NULL; + const char *p; + for (p = info.cFileName; *p != '\0'; p++) + if (*p == '.') + last_dot = p; + if (last_dot != NULL) + { + const char *suffix = last_dot + 1; + if (_stricmp (suffix, "exe") == 0 + || _stricmp (suffix, "bat") == 0 + || _stricmp (suffix, "cmd") == 0 + || _stricmp (suffix, "com") == 0) + mode |= S_IEXEC_UGO; + } + } + } + buf->st_mode = mode; + + /* st_nlink. Ignore hard links here. */ + buf->st_nlink = 1; + + /* There's no easy way to map the Windows SID concept to an integer. */ + buf->st_uid = 0; + buf->st_gid = 0; + + /* st_rdev is irrelevant for normal files and directories. */ + buf->st_rdev = 0; + + /* st_size. */ + if (sizeof (buf->st_size) <= 4) + /* Range check already done above. */ + buf->st_size = info.nFileSizeLow; + else + buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; + + /* st_atime, st_mtime, st_ctime. */ +# if _GL_WINDOWS_STAT_TIMESPEC + buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); + buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); + buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); +# else + buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); + buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); + buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); +# endif + + FindClose (h); + + ret = 0; + } + + done: + if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode)) + { + errno = ENOTDIR; + ret = -1; + } + if (malloca_rname != NULL) + { + int saved_errno = errno; + freea (malloca_rname); + errno = saved_errno; + } + return ret; + } + + failed: + { + DWORD error = GetLastError (); + #if 0 + fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error); + #endif + + if (malloca_rname != NULL) + freea (malloca_rname); + + switch (error) + { + /* Some of these errors probably cannot happen with the specific flags + that we pass to CreateFile. But who knows... */ + case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ + case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ + case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ + case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ + case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ + case ERROR_DIRECTORY: + errno = ENOENT; + break; + + case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ + case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */ + /* XXX map to EACCES or EPERM? */ + errno = EACCES; + break; + + case ERROR_OUTOFMEMORY: + errno = ENOMEM; + break; + + case ERROR_WRITE_PROTECT: + errno = EROFS; + break; + + case ERROR_WRITE_FAULT: + case ERROR_READ_FAULT: + case ERROR_GEN_FAILURE: + errno = EIO; + break; + + case ERROR_BUFFER_OVERFLOW: + case ERROR_FILENAME_EXCED_RANGE: + errno = ENAMETOOLONG; + break; + + case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ + errno = EPERM; + break; + + default: + errno = EINVAL; + break; + } + + return -1; + } +#else + int result = orig_stat (name, buf); + if (result == 0) + { +# if REPLACE_FUNC_STAT_FILE + /* Solaris 9 mistakenly succeeds when given a non-directory with a + trailing slash. */ + if (!S_ISDIR (buf->st_mode)) + { + size_t len = strlen (name); + if (ISSLASH (name[len - 1])) + { + errno = ENOTDIR; + return -1; + } + } +# endif /* REPLACE_FUNC_STAT_FILE */ + result = stat_time_normalize (result, buf); + } + return result; +#endif +} diff --git a/jni/parted/libiconv/srclib/stdint.h b/jni/parted/libiconv/srclib/stdint.h new file mode 100755 index 0000000..1d0d28f --- /dev/null +++ b/jni/parted/libiconv/srclib/stdint.h @@ -0,0 +1,741 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 2001-2002, 2004-2022 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. + This file is part of gnulib. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* + * ISO C 99 for platforms that lack it. + * + */ + +#ifndef _GL_STDINT_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* When including a system file that in turn includes , + use the system , not our substitute. This avoids + problems with (for example) VMS, whose includes + . */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* On Android (Bionic libc), includes this file before + having defined 'time_t'. Therefore in this case avoid including + other system header files; just include the system's . + Ideally we should test __BIONIC__ here, but it is only defined after + has been included; hence test __ANDROID__ instead. */ +#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H +# include_next +#else + +/* Get those types that are already defined in other system include + files, so that we can "#define int8_t signed char" below without + worrying about a later system include file containing a "typedef + signed char int8_t;" that will get messed up by our macro. Our + macros should all be consistent with the system versions, except + for the "fast" types and macros, which we recommend against using + in public interfaces due to compiler differences. */ + +#if 1 +# if defined __sgi && ! defined __c99 + /* Bypass IRIX's if in C89 mode, since it merely annoys users + with "This header file is to be used only for c99 mode compilations" + diagnostics. */ +# define __STDINT_H__ +# endif + + /* Some pre-C++11 implementations need this. */ +# ifdef __cplusplus +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS 1 +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +# endif +# endif + + /* Other systems may have an incomplete or buggy . + Include it before , since any "#include " + in would reinclude us, skipping our contents because + _GL_STDINT_H is defined. + The include_next requires a split double-inclusion guard. */ +# include_next +#endif + +#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _GL_STDINT_H + +/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, + LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ +#include + +/* Override WINT_MIN and WINT_MAX if gnulib's or overrides + wint_t. */ +#if 0 +# undef WINT_MIN +# undef WINT_MAX +# define WINT_MIN 0x0U +# define WINT_MAX 0xffffffffU +#endif + +#if ! 0 + +/* defines some of the stdint.h types as well, on glibc, + IRIX 6.5, and OpenBSD 3.8 (via ). + AIX 5.2 isn't needed and causes troubles. + Mac OS X 10.4.6 includes (which is us), but + relies on the system definitions, so include + after . */ +# if 1 && ! defined _AIX +# include +# endif + +# if 1 + /* In OpenBSD 3.8, includes , which defines + int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. + also defines intptr_t and uintptr_t. */ +# include +# elif 0 + /* Solaris 7 has the types except the *_fast*_t types, and + the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ +# include +# endif + +# if 0 && ! defined __BIT_TYPES_DEFINED__ + /* Linux libc4 >= 4.6.7 and libc5 have a that defines + int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is + included by . */ +# include +# endif + +# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Minimum and maximum values for an integer type under the usual assumption. + Return an unspecified value if BITS == 0, adding a check to pacify + picky compilers. */ + +/* These are separate macros, because if you try to merge these macros into + a single one, HP-UX cc rejects the resulting expression in constant + expressions. */ +# define _STDINT_UNSIGNED_MIN(bits, zero) \ + (zero) +# define _STDINT_SIGNED_MIN(bits, zero) \ + (~ _STDINT_MAX (1, bits, zero)) + +# define _STDINT_MAX(signed, bits, zero) \ + (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) + +#if !GNULIB_defined_stdint_types + +/* 7.18.1.1. Exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +# undef int8_t +# undef uint8_t +typedef signed char gl_int8_t; +typedef unsigned char gl_uint8_t; +# define int8_t gl_int8_t +# define uint8_t gl_uint8_t + +# undef int16_t +# undef uint16_t +typedef short int gl_int16_t; +typedef unsigned short int gl_uint16_t; +# define int16_t gl_int16_t +# define uint16_t gl_uint16_t + +# undef int32_t +# undef uint32_t +typedef int gl_int32_t; +typedef unsigned int gl_uint32_t; +# define int32_t gl_int32_t +# define uint32_t gl_uint32_t + +/* If the system defines INT64_MAX, assume int64_t works. That way, + if the underlying platform defines int64_t to be a 64-bit long long + int, the code below won't mistakenly define it to be a 64-bit long + int, which would mess up C++ name mangling. We must use #ifdef + rather than #if, to avoid an error with HP-UX 10.20 cc. */ + +# ifdef INT64_MAX +# define GL_INT64_T +# else +/* Do not undefine int64_t if gnulib is not being used with 64-bit + types, since otherwise it breaks platforms like Tandem/NSK. */ +# if LONG_MAX >> 31 >> 31 == 1 +# undef int64_t +typedef long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif defined _MSC_VER +# undef int64_t +typedef __int64 gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# else +# undef int64_t +typedef long long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# endif +# endif + +# ifdef UINT64_MAX +# define GL_UINT64_T +# else +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# undef uint64_t +typedef unsigned long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif defined _MSC_VER +# undef uint64_t +typedef unsigned __int64 gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# else +# undef uint64_t +typedef unsigned long long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# endif +# endif + +/* Avoid collision with Solaris 2.5.1 etc. */ +# define _UINT8_T +# define _UINT32_T +# define _UINT64_T + + +/* 7.18.1.2. Minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +# undef int_least8_t +# undef uint_least8_t +# undef int_least16_t +# undef uint_least16_t +# undef int_least32_t +# undef uint_least32_t +# undef int_least64_t +# undef uint_least64_t +# define int_least8_t int8_t +# define uint_least8_t uint8_t +# define int_least16_t int16_t +# define uint_least16_t uint16_t +# define int_least32_t int32_t +# define uint_least32_t uint32_t +# ifdef GL_INT64_T +# define int_least64_t int64_t +# endif +# ifdef GL_UINT64_T +# define uint_least64_t uint64_t +# endif + +/* 7.18.1.3. Fastest minimum-width integer types */ + +/* Note: Other substitutes may define these types differently. + It is not recommended to use these types in public header files. */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. The following code normally + uses types consistent with glibc, as that lessens the chance of + incompatibility with older GNU hosts. */ + +# undef int_fast8_t +# undef uint_fast8_t +# undef int_fast16_t +# undef uint_fast16_t +# undef int_fast32_t +# undef uint_fast32_t +# undef int_fast64_t +# undef uint_fast64_t +typedef signed char gl_int_fast8_t; +typedef unsigned char gl_uint_fast8_t; + +# ifdef __sun +/* Define types compatible with SunOS 5.10, so that code compiled under + earlier SunOS versions works with code compiled under SunOS 5.10. */ +typedef int gl_int_fast32_t; +typedef unsigned int gl_uint_fast32_t; +# else +typedef long int gl_int_fast32_t; +typedef unsigned long int gl_uint_fast32_t; +# endif +typedef gl_int_fast32_t gl_int_fast16_t; +typedef gl_uint_fast32_t gl_uint_fast16_t; + +# define int_fast8_t gl_int_fast8_t +# define uint_fast8_t gl_uint_fast8_t +# define int_fast16_t gl_int_fast16_t +# define uint_fast16_t gl_uint_fast16_t +# define int_fast32_t gl_int_fast32_t +# define uint_fast32_t gl_uint_fast32_t +# ifdef GL_INT64_T +# define int_fast64_t int64_t +# endif +# ifdef GL_UINT64_T +# define uint_fast64_t uint64_t +# endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ + +/* kLIBC's defines _INTPTR_T_DECLARED and needs its own + definitions of intptr_t and uintptr_t (which use int and unsigned) + to avoid clashes with declarations of system functions like sbrk. + Similarly, MinGW WSL-5.4.1 needs its own intptr_t and + uintptr_t to avoid conflicting declarations of system functions like + _findclose in . */ +# if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \ + || defined __MINGW32__) +# undef intptr_t +# undef uintptr_t +# ifdef _WIN64 +typedef long long int gl_intptr_t; +typedef unsigned long long int gl_uintptr_t; +# else +typedef long int gl_intptr_t; +typedef unsigned long int gl_uintptr_t; +# endif +# define intptr_t gl_intptr_t +# define uintptr_t gl_uintptr_t +# endif + +/* 7.18.1.5. Greatest-width integer types */ + +/* Note: These types are compiler dependent. It may be unwise to use them in + public header files. */ + +/* If the system defines INTMAX_MAX, assume that intmax_t works, and + similarly for UINTMAX_MAX and uintmax_t. This avoids problems with + assuming one type where another is used by the system. */ + +# ifndef INTMAX_MAX +# undef INTMAX_C +# undef intmax_t +# if LONG_MAX >> 30 == 1 +typedef long long int gl_intmax_t; +# define intmax_t gl_intmax_t +# elif defined GL_INT64_T +# define intmax_t int64_t +# else +typedef long int gl_intmax_t; +# define intmax_t gl_intmax_t +# endif +# endif + +# ifndef UINTMAX_MAX +# undef UINTMAX_C +# undef uintmax_t +# if ULONG_MAX >> 31 == 1 +typedef unsigned long long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# elif defined GL_UINT64_T +# define uintmax_t uint64_t +# else +typedef unsigned long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# endif +# endif + +/* Verify that intmax_t and uintmax_t have the same size. Too much code + breaks if this is not the case. If this check fails, the reason is likely + to be found in the autoconf macros. */ +typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) + ? 1 : -1]; + +# define GNULIB_defined_stdint_types 1 +# endif /* !GNULIB_defined_stdint_types */ + +/* 7.18.2. Limits of specified-width integer types */ + +/* 7.18.2.1. Limits of exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +# undef INT8_MIN +# undef INT8_MAX +# undef UINT8_MAX +# define INT8_MIN (~ INT8_MAX) +# define INT8_MAX 127 +# define UINT8_MAX 255 + +# undef INT16_MIN +# undef INT16_MAX +# undef UINT16_MAX +# define INT16_MIN (~ INT16_MAX) +# define INT16_MAX 32767 +# define UINT16_MAX 65535 + +# undef INT32_MIN +# undef INT32_MAX +# undef UINT32_MAX +# define INT32_MIN (~ INT32_MAX) +# define INT32_MAX 2147483647 +# define UINT32_MAX 4294967295U + +# if defined GL_INT64_T && ! defined INT64_MAX +/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 + evaluates the latter incorrectly in preprocessor expressions. */ +# define INT64_MIN (- INTMAX_C (1) << 63) +# define INT64_MAX INTMAX_C (9223372036854775807) +# endif + +# if defined GL_UINT64_T && ! defined UINT64_MAX +# define UINT64_MAX UINTMAX_C (18446744073709551615) +# endif + +/* 7.18.2.2. Limits of minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +# undef INT_LEAST8_MIN +# undef INT_LEAST8_MAX +# undef UINT_LEAST8_MAX +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST8_MAX INT8_MAX +# define UINT_LEAST8_MAX UINT8_MAX + +# undef INT_LEAST16_MIN +# undef INT_LEAST16_MAX +# undef UINT_LEAST16_MAX +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST16_MAX INT16_MAX +# define UINT_LEAST16_MAX UINT16_MAX + +# undef INT_LEAST32_MIN +# undef INT_LEAST32_MAX +# undef UINT_LEAST32_MAX +# define INT_LEAST32_MIN INT32_MIN +# define INT_LEAST32_MAX INT32_MAX +# define UINT_LEAST32_MAX UINT32_MAX + +# undef INT_LEAST64_MIN +# undef INT_LEAST64_MAX +# ifdef GL_INT64_T +# define INT_LEAST64_MIN INT64_MIN +# define INT_LEAST64_MAX INT64_MAX +# endif + +# undef UINT_LEAST64_MAX +# ifdef GL_UINT64_T +# define UINT_LEAST64_MAX UINT64_MAX +# endif + +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. */ + +# undef INT_FAST8_MIN +# undef INT_FAST8_MAX +# undef UINT_FAST8_MAX +# define INT_FAST8_MIN SCHAR_MIN +# define INT_FAST8_MAX SCHAR_MAX +# define UINT_FAST8_MAX UCHAR_MAX + +# undef INT_FAST16_MIN +# undef INT_FAST16_MAX +# undef UINT_FAST16_MAX +# define INT_FAST16_MIN INT_FAST32_MIN +# define INT_FAST16_MAX INT_FAST32_MAX +# define UINT_FAST16_MAX UINT_FAST32_MAX + +# undef INT_FAST32_MIN +# undef INT_FAST32_MAX +# undef UINT_FAST32_MAX +# ifdef __sun +# define INT_FAST32_MIN INT_MIN +# define INT_FAST32_MAX INT_MAX +# define UINT_FAST32_MAX UINT_MAX +# else +# define INT_FAST32_MIN LONG_MIN +# define INT_FAST32_MAX LONG_MAX +# define UINT_FAST32_MAX ULONG_MAX +# endif + +# undef INT_FAST64_MIN +# undef INT_FAST64_MAX +# ifdef GL_INT64_T +# define INT_FAST64_MIN INT64_MIN +# define INT_FAST64_MAX INT64_MAX +# endif + +# undef UINT_FAST64_MAX +# ifdef GL_UINT64_T +# define UINT_FAST64_MAX UINT64_MAX +# endif + +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +# undef INTPTR_MIN +# undef INTPTR_MAX +# undef UINTPTR_MAX +# ifdef _WIN64 +# define INTPTR_MIN LLONG_MIN +# define INTPTR_MAX LLONG_MAX +# define UINTPTR_MAX ULLONG_MAX +# else +# define INTPTR_MIN LONG_MIN +# define INTPTR_MAX LONG_MAX +# define UINTPTR_MAX ULONG_MAX +# endif + +/* 7.18.2.5. Limits of greatest-width integer types */ + +# ifndef INTMAX_MAX +# undef INTMAX_MIN +# ifdef INT64_MAX +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +# else +# define INTMAX_MIN INT32_MIN +# define INTMAX_MAX INT32_MAX +# endif +# endif + +# ifndef UINTMAX_MAX +# ifdef UINT64_MAX +# define UINTMAX_MAX UINT64_MAX +# else +# define UINTMAX_MAX UINT32_MAX +# endif +# endif + +/* 7.18.3. Limits of other integer types */ + +/* ptrdiff_t limits */ +# undef PTRDIFF_MIN +# undef PTRDIFF_MAX +# if 0 +# ifdef _LP64 +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) +# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) +# else +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) +# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) +# endif +# else +# define PTRDIFF_MIN \ + _STDINT_SIGNED_MIN (64, 0l) +# define PTRDIFF_MAX \ + _STDINT_MAX (1, 64, 0l) +# endif + +/* sig_atomic_t limits */ +# undef SIG_ATOMIC_MIN +# undef SIG_ATOMIC_MAX +# if 1 +# define SIG_ATOMIC_MIN \ + _STDINT_SIGNED_MIN (32, 0) +# else +# define SIG_ATOMIC_MIN \ + _STDINT_UNSIGNED_MIN (32, 0) +# endif +# define SIG_ATOMIC_MAX \ + _STDINT_MAX (1, 32, \ + 0) + + +/* size_t limit */ +# undef SIZE_MAX +# if 0 +# ifdef _LP64 +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# else +# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) +# endif +# else +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# endif + +/* wchar_t limits */ +/* Get WCHAR_MIN, WCHAR_MAX. + This include is not on the top, above, because on OSF/1 4.0 we have a + sequence of nested includes + -> -> -> , and the latter includes + and assumes its types are already defined. */ +# if 1 && ! (defined WCHAR_MIN && defined WCHAR_MAX) +# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# include +# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# endif +# undef WCHAR_MIN +# undef WCHAR_MAX +# if 0 +# define WCHAR_MIN \ + _STDINT_SIGNED_MIN (32, 0u) +# else +# define WCHAR_MIN \ + _STDINT_UNSIGNED_MIN (32, 0u) +# endif +# define WCHAR_MAX \ + _STDINT_MAX (0, 32, 0u) + +/* wint_t limits */ +/* If gnulib's or overrides wint_t, u is not + accurate, therefore use the definitions from above. */ +# if !0 +# undef WINT_MIN +# undef WINT_MAX +# if 0 +# define WINT_MIN \ + _STDINT_SIGNED_MIN (32, 0u) +# else +# define WINT_MIN \ + _STDINT_UNSIGNED_MIN (32, 0u) +# endif +# define WINT_MAX \ + _STDINT_MAX (0, 32, 0u) +# endif + +/* 7.18.4. Macros for integer constants */ + +/* 7.18.4.1. Macros for minimum-width integer constants */ +/* According to ISO C 99 Technical Corrigendum 1 */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ + +# undef INT8_C +# undef UINT8_C +# define INT8_C(x) x +# define UINT8_C(x) x + +# undef INT16_C +# undef UINT16_C +# define INT16_C(x) x +# define UINT16_C(x) x + +# undef INT32_C +# undef UINT32_C +# define INT32_C(x) x +# define UINT32_C(x) x ## U + +# undef INT64_C +# undef UINT64_C +# if LONG_MAX >> 31 >> 31 == 1 +# define INT64_C(x) x##L +# elif defined _MSC_VER +# define INT64_C(x) x##i64 +# else +# define INT64_C(x) x##LL +# endif +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# define UINT64_C(x) x##UL +# elif defined _MSC_VER +# define UINT64_C(x) x##ui64 +# else +# define UINT64_C(x) x##ULL +# endif + +/* 7.18.4.2. Macros for greatest-width integer constants */ + +# ifndef INTMAX_C +# if LONG_MAX >> 30 == 1 +# define INTMAX_C(x) x##LL +# elif defined GL_INT64_T +# define INTMAX_C(x) INT64_C(x) +# else +# define INTMAX_C(x) x##L +# endif +# endif + +# ifndef UINTMAX_C +# if ULONG_MAX >> 31 == 1 +# define UINTMAX_C(x) x##ULL +# elif defined GL_UINT64_T +# define UINTMAX_C(x) UINT64_C(x) +# else +# define UINTMAX_C(x) x##UL +# endif +# endif + +#endif /* !0 */ + +/* Macros specified by ISO/IEC TS 18661-1:2014. */ + +#if (!defined UINTMAX_WIDTH \ + && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) +# ifdef INT8_MAX +# define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) +# endif +# ifdef UINT8_MAX +# define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) +# endif +# ifdef INT16_MAX +# define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) +# endif +# ifdef UINT16_MAX +# define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) +# endif +# ifdef INT32_MAX +# define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) +# endif +# ifdef UINT32_MAX +# define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) +# endif +# ifdef INT64_MAX +# define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) +# endif +# ifdef UINT64_MAX +# define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) +# endif +# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) +# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) +# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) +# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) +# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) +# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) +# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) +# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) +# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) +# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) +# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) +# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) +# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) +# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) +# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) +# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) +# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) +# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) +# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) +# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) +# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) +# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) +# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) +# ifdef WINT_MAX +# define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) +# endif +# ifdef SIG_ATOMIC_MAX +# define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) +# endif +#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ + +#endif /* _GL_STDINT_H */ +#endif /* !(defined __ANDROID__ && ...) */ +#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/jni/parted/libiconv/srclib/stdio-read.c b/jni/parted/libiconv/srclib/stdio-read.c new file mode 100755 index 0000000..85efa0d --- /dev/null +++ b/jni/parted/libiconv/srclib/stdio-read.c @@ -0,0 +1,168 @@ +/* POSIX compatible FILE stream read function. + Copyright (C) 2008-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Replace these functions only if module 'nonblocking' is requested. */ +#if GNULIB_NONBLOCKING + +/* On native Windows platforms, when read() is called on a non-blocking pipe + with an empty buffer, ReadFile() fails with error GetLastError() = + ERROR_NO_DATA, and read() in consequence fails with error EINVAL. This + read() function is at the basis of the function which fills the buffer of + a FILE stream. */ + +# if defined _WIN32 && ! defined __CYGWIN__ + +# include +# include + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif + +/* Don't assume that UNICODE is not defined. */ +# undef GetNamedPipeHandleState +# define GetNamedPipeHandleState GetNamedPipeHandleStateA + +# define CALL_WITH_ERRNO_FIX(RETTYPE, EXPRESSION, FAILED) \ + if (ferror (stream)) \ + return (EXPRESSION); \ + else \ + { \ + RETTYPE ret; \ + SetLastError (0); \ + ret = (EXPRESSION); \ + if (FAILED) \ + { \ + if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ + { \ + int fd = fileno (stream); \ + if (fd >= 0) \ + { \ + HANDLE h = (HANDLE) _get_osfhandle (fd); \ + if (GetFileType (h) == FILE_TYPE_PIPE) \ + { \ + /* h is a pipe or socket. */ \ + DWORD state; \ + if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ + NULL, NULL, 0) \ + && (state & PIPE_NOWAIT) != 0) \ + /* h is a pipe in non-blocking mode. \ + Change errno from EINVAL to EAGAIN. */ \ + errno = EAGAIN; \ + } \ + } \ + } \ + } \ + return ret; \ + } + +/* Enable this function definition only if gnulib's has prepared it. + Otherwise we get a function definition conflict with mingw64's . */ +# if GNULIB_SCANF +int +scanf (const char *format, ...) +{ + int retval; + va_list args; + + va_start (args, format); + retval = vfscanf (stdin, format, args); + va_end (args); + + return retval; +} +# endif + +/* Enable this function definition only if gnulib's has prepared it. + Otherwise we get a function definition conflict with mingw64's . */ +# if GNULIB_FSCANF +int +fscanf (FILE *stream, const char *format, ...) +{ + int retval; + va_list args; + + va_start (args, format); + retval = vfscanf (stream, format, args); + va_end (args); + + return retval; +} +# endif + +/* Enable this function definition only if gnulib's has prepared it. + Otherwise we get a function definition conflict with mingw64's . */ +# if GNULIB_VSCANF +int +vscanf (const char *format, va_list args) +{ + return vfscanf (stdin, format, args); +} +# endif + +/* Enable this function definition only if gnulib's has prepared it. + Otherwise we get a function definition conflict with mingw64's . */ +# if GNULIB_VFSCANF +int +vfscanf (FILE *stream, const char *format, va_list args) +#undef vfscanf +{ + CALL_WITH_ERRNO_FIX (int, vfscanf (stream, format, args), ret == EOF) +} +# endif + +int +getchar (void) +{ + return fgetc (stdin); +} + +int +fgetc (FILE *stream) +#undef fgetc +{ + CALL_WITH_ERRNO_FIX (int, fgetc (stream), ret == EOF) +} + +char * +fgets (char *s, int n, FILE *stream) +#undef fgets +{ + CALL_WITH_ERRNO_FIX (char *, fgets (s, n, stream), ret == NULL) +} + +/* We intentionally don't bother to fix gets. */ + +size_t +fread (void *ptr, size_t s, size_t n, FILE *stream) +#undef fread +{ + CALL_WITH_ERRNO_FIX (size_t, fread (ptr, s, n, stream), ret < n) +} + +# endif +#endif diff --git a/jni/parted/libiconv/srclib/stdio-write.c b/jni/parted/libiconv/srclib/stdio-write.c new file mode 100755 index 0000000..82facf5 --- /dev/null +++ b/jni/parted/libiconv/srclib/stdio-write.c @@ -0,0 +1,206 @@ +/* POSIX compatible FILE stream write function. + Copyright (C) 2008-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Replace these functions only if module 'nonblocking' or module 'sigpipe' is + requested. */ +#if GNULIB_NONBLOCKING || GNULIB_SIGPIPE + +/* On native Windows platforms, SIGPIPE does not exist. When write() is + called on a pipe with no readers, WriteFile() fails with error + GetLastError() = ERROR_NO_DATA, and write() in consequence fails with + error EINVAL. This write() function is at the basis of the function + which flushes the buffer of a FILE stream. */ + +# if defined _WIN32 && ! defined __CYGWIN__ + +# include +# include +# include + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif + +/* Don't assume that UNICODE is not defined. */ +# undef GetNamedPipeHandleState +# define GetNamedPipeHandleState GetNamedPipeHandleStateA + +# if GNULIB_NONBLOCKING +# define CLEAR_ERRNO \ + errno = 0; +# define HANDLE_ENOSPC \ + if (errno == ENOSPC && ferror (stream)) \ + { \ + int fd = fileno (stream); \ + if (fd >= 0) \ + { \ + HANDLE h = (HANDLE) _get_osfhandle (fd); \ + if (GetFileType (h) == FILE_TYPE_PIPE) \ + { \ + /* h is a pipe or socket. */ \ + DWORD state; \ + if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ + NULL, NULL, 0) \ + && (state & PIPE_NOWAIT) != 0) \ + /* h is a pipe in non-blocking mode. \ + Change errno from ENOSPC to EAGAIN. */ \ + errno = EAGAIN; \ + } \ + } \ + } \ + else +# else +# define CLEAR_ERRNO +# define HANDLE_ENOSPC +# endif + +# if GNULIB_SIGPIPE +# define CLEAR_LastError \ + SetLastError (0); +# define HANDLE_ERROR_NO_DATA \ + if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ + { \ + int fd = fileno (stream); \ + if (fd >= 0 \ + && GetFileType ((HANDLE) _get_osfhandle (fd)) \ + == FILE_TYPE_PIPE) \ + { \ + /* Try to raise signal SIGPIPE. */ \ + raise (SIGPIPE); \ + /* If it is currently blocked or ignored, change errno from \ + EINVAL to EPIPE. */ \ + errno = EPIPE; \ + } \ + } \ + else +# else +# define CLEAR_LastError +# define HANDLE_ERROR_NO_DATA +# endif + +# define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \ + if (ferror (stream)) \ + return (EXPRESSION); \ + else \ + { \ + RETTYPE ret; \ + CLEAR_ERRNO \ + CLEAR_LastError \ + ret = (EXPRESSION); \ + if (FAILED) \ + { \ + HANDLE_ENOSPC \ + HANDLE_ERROR_NO_DATA \ + ; \ + } \ + return ret; \ + } + +# if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */ +int +printf (const char *format, ...) +{ + int retval; + va_list args; + + va_start (args, format); + retval = vfprintf (stdout, format, args); + va_end (args); + + return retval; +} +# endif + +# if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */ +int +fprintf (FILE *stream, const char *format, ...) +{ + int retval; + va_list args; + + va_start (args, format); + retval = vfprintf (stream, format, args); + va_end (args); + + return retval; +} +# endif + +# if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */ +int +vprintf (const char *format, va_list args) +{ + return vfprintf (stdout, format, args); +} +# endif + +# if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */ +int +vfprintf (FILE *stream, const char *format, va_list args) +#undef vfprintf +{ + CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF) +} +# endif + +int +putchar (int c) +{ + return fputc (c, stdout); +} + +int +fputc (int c, FILE *stream) +#undef fputc +{ + CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF) +} + +int +fputs (const char *string, FILE *stream) +#undef fputs +{ + CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF) +} + +int +puts (const char *string) +#undef puts +{ + FILE *stream = stdout; + CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF) +} + +size_t +fwrite (const void *ptr, size_t s, size_t n, FILE *stream) +#undef fwrite +{ + CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n) +} + +# endif +#endif diff --git a/jni/parted/libiconv/srclib/stdio.h b/jni/parted/libiconv/srclib/stdio.h new file mode 100755 index 0000000..3abb475 --- /dev/null +++ b/jni/parted/libiconv/srclib/stdio.h @@ -0,0 +1,2218 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H +/* Special invocation convention: + - Inside glibc header files. + - On OSF/1 5.1 we have a sequence of nested includes + -> -> -> -> + -> -> -> . + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDIO_H + +#define _GL_ALREADY_INCLUDING_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#undef _GL_ALREADY_INCLUDING_STDIO_H + +#ifndef _GL_STDIO_H +#define _GL_STDIO_H + +/* Get va_list. Needed on many systems, including glibc 2.8. */ +#include + +#include + +/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 + and eglibc 2.11.2. + May also define off_t to a 64-bit type on native Windows. */ +#include + +/* Solaris 10 and NetBSD 7.0 declare renameat in , not in . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ + && ! defined __GLIBC__ +# include +#endif + +/* Android 4.3 declares renameat in , not in . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ + && ! defined __GLIBC__ +# include +#endif + +/* MSVC declares 'perror' in , not in . We must include + it before we #define perror rpl_perror. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include +#endif + +/* MSVC declares 'remove' in , not in . We must include + it before we #define remove rpl_remove. */ +/* MSVC declares 'rename' in , not in . We must include + it before we #define rename rpl_rename. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || 0 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include +#endif + + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#ifndef _GL_ATTRIBUTE_FORMAT +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || defined __clang__ +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +# else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +# endif +#endif + +/* An __attribute__ __format__ specifier for a function that takes a format + string and arguments, where the format string directives are the ones + standardized by ISO C99 and POSIX. + _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD */ +/* __gnu_printf__ is supported in GCC >= 4.4. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __gnu_printf__ +#else +# define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __printf__ +#endif + +/* An __attribute__ __format__ specifier for a function that takes a format + string and arguments, where the format string directives are the ones of the + system printf(), rather than the ones standardized by ISO C99 and POSIX. + _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM */ +/* On mingw, Gnulib sets __USE_MINGW_ANSI_STDIO in order to get closer to + the standards. The macro GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU indicates + whether this change is effective. On older mingw, it is not. */ +#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU +# define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD +#else +# define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM __printf__ +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, formatstring_parameter, first_argument)) + +/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD, + except that it indicates to GCC that the supported format string directives + are the ones of the system printf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, formatstring_parameter, first_argument)) + +/* _GL_ATTRIBUTE_FORMAT_SCANF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, + except that it indicates to GCC that the supported format string directives + are the ones of the system scanf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Macros for stringification. */ +#define _GL_STDIO_STRINGIZE(token) #token +#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) + +/* When also using extern inline, suppress the use of static inline in + standard headers of problematic Apple configurations, as Libc at + least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., + . + Perhaps Apple will fix this some day. */ +#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ + && defined __GNUC__ && defined __STDC__) +# undef putc_unlocked +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dprintf rpl_dprintf +# endif +_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *restrict format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...)); +# endif +_GL_CXXALIASWARN (dprintf); +#elif defined GNULIB_POSIXCHECK +# undef dprintf +# if HAVE_RAW_DECL_DPRINTF +_GL_WARN_ON_USE (dprintf, "dprintf is unportable - " + "use gnulib module dprintf for portability"); +# endif +#endif + +#if 0 +/* Close STREAM and its underlying file descriptor. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fclose rpl_fclose +# endif +_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fclose); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fclose +/* Assume fclose is always declared. */ +_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " + "use gnulib module fclose for portable POSIX compliance"); +#endif + +#if 1 +/* On native Windows, map 'fcloseall' to '_fcloseall', so that -loldnames is + not required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::fcloseall on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fcloseall +# define fcloseall _fcloseall +# endif +_GL_CXXALIAS_MDA (fcloseall, int, (void)); +# else +# if 0 +# if defined __FreeBSD__ || defined __DragonFly__ +_GL_CXXALIAS_SYS (fcloseall, void, (void)); +# else +_GL_CXXALIAS_SYS (fcloseall, int, (void)); +# endif +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 0 +_GL_CXXALIASWARN (fcloseall); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen rpl_fdopen +# endif +_GL_FUNCDECL_RPL (fdopen, FILE *, + (int fd, const char *mode) + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen _fdopen +# endif +_GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); +# else +# if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (fdopen, FILE *, + (int fd, const char *mode) + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +# endif +_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); +# endif +_GL_CXXALIASWARN (fdopen); +#else +# if 0 && __GNUC__ >= 11 && !defined fdopen +/* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (fdopen, FILE *, + (int fd, const char *mode) + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +# endif +# if defined GNULIB_POSIXCHECK +# undef fdopen +/* Assume fdopen is always declared. */ +_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fdopen for portability"); +# elif 1 +/* On native Windows, map 'fdopen' to '_fdopen', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::fdopen always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen _fdopen +# endif +_GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); +# else +_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); +# endif +_GL_CXXALIASWARN (fdopen); +# endif +#endif + +#if 0 +/* Flush all pending data on STREAM according to POSIX rules. Both + output and seekable input streams are supported. + Note! LOSS OF DATA can occur if fflush is applied on an input stream + that is _not_seekable_ or on an update stream that is _not_seekable_ + and in which the most recent operation was input. Seekability can + be tested with lseek(fileno(fp),0,SEEK_CUR). */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fflush rpl_fflush +# endif +_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); +_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); +# else +_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fflush); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fflush +/* Assume fflush is always declared. */ +_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " + "use gnulib module fflush for portable POSIX compliance"); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgetc +# define fgetc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fgetc); +# endif +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgets +# define fgets rpl_fgets +# endif +_GL_FUNCDECL_RPL (fgets, char *, + (char *restrict s, int n, FILE *restrict stream) + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (fgets, char *, + (char *restrict s, int n, FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fgets, char *, + (char *restrict s, int n, FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fgets); +# endif +#endif + +#if 1 +/* On native Windows, map 'fileno' to '_fileno', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::fileno always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fileno +# define fileno _fileno +# endif +_GL_CXXALIAS_MDA (fileno, int, (FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fileno, int, (FILE *restrict stream)); +# endif +_GL_CXXALIASWARN (fileno); +#endif + +#if 0 +# if (0 && 0) \ + || (0 && 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fopen +# define fopen rpl_fopen +# endif +_GL_FUNCDECL_RPL (fopen, FILE *, + (const char *restrict filename, const char *restrict mode) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +_GL_CXXALIAS_RPL (fopen, FILE *, + (const char *restrict filename, const char *restrict mode)); +# else +# if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (fopen, FILE *, + (const char *restrict filename, const char *restrict mode) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +# endif +_GL_CXXALIAS_SYS (fopen, FILE *, + (const char *restrict filename, const char *restrict mode)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fopen); +# endif +#else +# if 0 && __GNUC__ >= 11 && !defined fopen +/* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (fopen, FILE *, + (const char *restrict filename, const char *restrict mode) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +# endif +# if defined GNULIB_POSIXCHECK +# undef fopen +/* Assume fopen is always declared. */ +_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fopen for portability"); +# endif +#endif + +#if 0 || 1 +# if (0 && 0) \ + || (1 && 0 && (0 || 1)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fprintf rpl_fprintf +# endif +# define GNULIB_overrides_fprintf 1 +# if 0 || 0 +_GL_FUNCDECL_RPL (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...)); +# else +_GL_CXXALIAS_SYS (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fprintf); +# endif +#endif +#if !0 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_fprintf +# undef fprintf +# endif +/* Assume fprintf is always declared. */ +_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " + "use gnulib module fprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +/* Discard all pending buffered I/O data on STREAM. + STREAM must not be wide-character oriented. + When discarding pending output, the file position is set back to where it + was before the write calls. When discarding pending input, the file + position is advanced to match the end of the previously read input. + Return 0 if successful. Upon error, return -1 and set errno. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fpurge rpl_fpurge +# endif +_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); +# else +# if !1 +_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); +# endif +_GL_CXXALIASWARN (fpurge); +#elif defined GNULIB_POSIXCHECK +# undef fpurge +# if HAVE_RAW_DECL_FPURGE +_GL_WARN_ON_USE (fpurge, "fpurge is not always present - " + "use gnulib module fpurge for portability"); +# endif +#endif + +#if 1 +# if 0 && (0 || 1) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputc +# define fputc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fputc); +# endif +#endif + +#if 1 +# if 0 && (0 || 1) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputs +# define fputs rpl_fputs +# endif +_GL_FUNCDECL_RPL (fputs, int, + (const char *restrict string, FILE *restrict stream) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fputs, int, + (const char *restrict string, FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fputs, int, + (const char *restrict string, FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fputs); +# endif +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fread +# define fread rpl_fread +# endif +_GL_FUNCDECL_RPL (fread, size_t, + (void *restrict ptr, size_t s, size_t n, + FILE *restrict stream) + _GL_ARG_NONNULL ((4))); +_GL_CXXALIAS_RPL (fread, size_t, + (void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fread, size_t, + (void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fread); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freopen +# define freopen rpl_freopen +# endif +_GL_FUNCDECL_RPL (freopen, FILE *, + (const char *restrict filename, const char *restrict mode, + FILE *restrict stream) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (freopen, FILE *, + (const char *restrict filename, const char *restrict mode, + FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (freopen, FILE *, + (const char *restrict filename, const char *restrict mode, + FILE *restrict stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (freopen); +# endif +#elif defined GNULIB_POSIXCHECK +# undef freopen +/* Assume freopen is always declared. */ +_GL_WARN_ON_USE (freopen, + "freopen on native Windows platforms is not POSIX compliant - " + "use gnulib module freopen for portability"); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fscanf +# define fscanf rpl_fscanf +# endif +_GL_FUNCDECL_RPL (fscanf, int, + (FILE *restrict stream, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fscanf, int, + (FILE *restrict stream, const char *restrict format, ...)); +# else +_GL_CXXALIAS_SYS (fscanf, int, + (FILE *restrict stream, const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fscanf); +# endif +#endif + + +/* Set up the following warnings, based on which modules are in use. + GNU Coding Standards discourage the use of fseek, since it imposes + an arbitrary limitation on some 32-bit hosts. Remember that the + fseek module depends on the fseeko module, so we only have three + cases to consider: + + 1. The developer is not using either module. Issue a warning under + GNULIB_POSIXCHECK for both functions, to remind them that both + functions have bugs on some systems. _GL_NO_LARGE_FILES has no + impact on this warning. + + 2. The developer is using both modules. They may be unaware of the + arbitrary limitations of fseek, so issue a warning under + GNULIB_POSIXCHECK. On the other hand, they may be using both + modules intentionally, so the developer can define + _GL_NO_LARGE_FILES in the compilation units where the use of fseek + is safe, to silence the warning. + + 3. The developer is using the fseeko module, but not fseek. Gnulib + guarantees that fseek will still work around platform bugs in that + case, but we presume that the developer is aware of the pitfalls of + fseek and was trying to avoid it, so issue a warning even when + GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be + defined to silence the warning in particular compilation units. + In C++ compilations with GNULIB_NAMESPACE, in order to avoid that + fseek gets defined as a macro, it is recommended that the developer + uses the fseek module, even if he is not calling the fseek function. + + Most gnulib clients that perform stream operations should fall into + category 3. */ + +#if 0 +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 2, above. */ +# undef fseek +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseek +# define fseek rpl_fseek +# endif +_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); +# else +_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fseek); +# endif +#endif + +#if 0 +# if !0 && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 3, above. */ +# undef fseek +# endif +# if 0 +/* Provide an fseeko function that is aware of a preceding fflush(), and which + detects pipes. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseeko +# define fseeko rpl_fseeko +# endif +_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (fseeko); +#elif defined GNULIB_POSIXCHECK +# define _GL_FSEEK_WARN /* Category 1, above. */ +# undef fseek +# undef fseeko +# if HAVE_RAW_DECL_FSEEKO +_GL_WARN_ON_USE (fseeko, "fseeko is unportable - " + "use gnulib module fseeko for portability"); +# endif +#endif + +#ifdef _GL_FSEEK_WARN +# undef _GL_FSEEK_WARN +/* Here, either fseek is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_fseek (declared above). */ +_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use fseeko function for handling of large files"); +#endif + + +/* ftell, ftello. See the comments on fseek/fseeko. */ + +#if 0 +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 2, above. */ +# undef ftell +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftell +# define ftell rpl_ftell +# endif +_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); +# else +_GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (ftell); +# endif +#endif + +#if 0 +# if !0 && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 3, above. */ +# undef ftell +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftello +# define ftello rpl_ftello +# endif +_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftello); +#elif defined GNULIB_POSIXCHECK +# define _GL_FTELL_WARN /* Category 1, above. */ +# undef ftell +# undef ftello +# if HAVE_RAW_DECL_FTELLO +_GL_WARN_ON_USE (ftello, "ftello is unportable - " + "use gnulib module ftello for portability"); +# endif +#endif + +#ifdef _GL_FTELL_WARN +# undef _GL_FTELL_WARN +/* Here, either ftell is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_ftell (declared above). */ +_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use ftello function for handling of large files"); +#endif + + +#if 1 +# if 0 && (0 || 1) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fwrite +# define fwrite rpl_fwrite +# endif +_GL_FUNCDECL_RPL (fwrite, size_t, + (const void *restrict ptr, size_t s, size_t n, + FILE *restrict stream) + _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (fwrite, size_t, + (const void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fwrite, size_t, + (const void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); + +/* Work around bug 11959 when fortifying glibc 2.4 through 2.15 + , + which sometimes causes an unwanted diagnostic for fwrite calls. + This affects only function declaration attributes under certain + versions of gcc and clang, and is not needed for C++. */ +# if (0 < __USE_FORTIFY_LEVEL \ + && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ + && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ + && !defined __cplusplus) +# undef fwrite +# undef fwrite_unlocked +extern size_t __REDIRECT (rpl_fwrite, + (const void *__restrict, size_t, size_t, + FILE *__restrict), + fwrite); +extern size_t __REDIRECT (rpl_fwrite_unlocked, + (const void *__restrict, size_t, size_t, + FILE *__restrict), + fwrite_unlocked); +# define fwrite rpl_fwrite +# define fwrite_unlocked rpl_fwrite_unlocked +# endif +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fwrite); +# endif +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getc +# define getc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (getc, int, (FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getc); +# endif +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getchar +# define getchar rpl_getchar +# endif +_GL_FUNCDECL_RPL (getchar, int, (void)); +_GL_CXXALIAS_RPL (getchar, int, (void)); +# else +_GL_CXXALIAS_SYS (getchar, int, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (getchar); +# endif +#endif + +#if 0 +/* Read input, up to (and including) the next occurrence of DELIMITER, from + STREAM, store it in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdelim +# define getdelim rpl_getdelim +# endif +_GL_FUNCDECL_RPL (getdelim, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream) + _GL_ARG_NONNULL ((1, 2, 4))); +_GL_CXXALIAS_RPL (getdelim, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream)); +# else +# if !1 +_GL_FUNCDECL_SYS (getdelim, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream) + _GL_ARG_NONNULL ((1, 2, 4))); +# endif +_GL_CXXALIAS_SYS (getdelim, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream)); +# endif +_GL_CXXALIASWARN (getdelim); +#elif defined GNULIB_POSIXCHECK +# undef getdelim +# if HAVE_RAW_DECL_GETDELIM +_GL_WARN_ON_USE (getdelim, "getdelim is unportable - " + "use gnulib module getdelim for portability"); +# endif +#endif + +#if 0 +/* Read a line, up to (and including) the next newline, from STREAM, store it + in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getline +# define getline rpl_getline +# endif +_GL_FUNCDECL_RPL (getline, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream) + _GL_ARG_NONNULL ((1, 2, 3))); +_GL_CXXALIAS_RPL (getline, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream)); +# else +# if !1 +_GL_FUNCDECL_SYS (getline, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getline, ssize_t, + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream)); +# endif +# if 1 +_GL_CXXALIASWARN (getline); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getline +# if HAVE_RAW_DECL_GETLINE +_GL_WARN_ON_USE (getline, "getline is unportable - " + "use gnulib module getline for portability"); +# endif +#endif + +/* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning; besides, C11 + removed it. */ +#undef gets +#if HAVE_RAW_DECL_GETS && !defined __cplusplus +_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); +#endif + +#if 1 +/* On native Windows, map 'getw' to '_getw', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::getw always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getw +# define getw _getw +# endif +_GL_CXXALIAS_MDA (getw, int, (FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (getw, int, (FILE *restrict stream)); +# endif +_GL_CXXALIASWARN (getw); +#endif + +#if 0 || 0 +struct obstack; +/* Grow an obstack with formatted output. Return the number of + bytes added to OBS. No trailing nul byte is added, and the + object should be closed with obstack_finish before use. Upon + memory allocation error, call obstack_alloc_failed_handler. Upon + other error, return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_printf rpl_obstack_printf +# endif +_GL_FUNCDECL_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# endif +_GL_CXXALIASWARN (obstack_printf); +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_vprintf rpl_obstack_vprintf +# endif +_GL_FUNCDECL_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (obstack_vprintf); +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); +_GL_CXXALIASWARN (pclose); +#elif defined GNULIB_POSIXCHECK +# undef pclose +# if HAVE_RAW_DECL_PCLOSE +_GL_WARN_ON_USE (pclose, "pclose is unportable - " + "use gnulib module pclose for more portability"); +# endif +#endif + +#if 0 +/* Print a message to standard error, describing the value of ERRNO, + (if STRING is not NULL and not empty) prefixed with STRING and ": ", + and terminated with a newline. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define perror rpl_perror +# endif +_GL_FUNCDECL_RPL (perror, void, (const char *string)); +_GL_CXXALIAS_RPL (perror, void, (const char *string)); +# else +_GL_CXXALIAS_SYS (perror, void, (const char *string)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (perror); +# endif +#elif defined GNULIB_POSIXCHECK +# undef perror +/* Assume perror is always declared. */ +_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " + "use gnulib module perror for portability"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef popen +# define popen rpl_popen +# endif +_GL_FUNCDECL_RPL (popen, FILE *, + (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); +_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); +# else +# if !1 || __GNUC__ >= 11 +_GL_FUNCDECL_SYS (popen, FILE *, + (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); +# endif +_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); +# endif +_GL_CXXALIASWARN (popen); +#else +# if 0 && __GNUC__ >= 11 && !defined popen +/* For -Wmismatched-dealloc: Associate popen with pclose or rpl_pclose. */ +_GL_FUNCDECL_SYS (popen, FILE *, + (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); +# endif +# if defined GNULIB_POSIXCHECK +# undef popen +# if HAVE_RAW_DECL_POPEN +_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " + "use gnulib module popen or pipe for more portability"); +# endif +# endif +#endif + +#if 0 || 1 +# if (0 && 0) \ + || (1 && 0 && (0 || 1)) +# if defined __GNUC__ || defined __clang__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +# endif +# if 0 || 0 +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *restrict format, ...) + __asm__ ("" + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *restrict format, ...) + __asm__ ("" + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define printf rpl_printf +# endif +_GL_FUNCDECL_RPL (printf, int, + (const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (printf, int, (const char *restrict format, ...)); +# endif +# define GNULIB_overrides_printf 1 +# else +_GL_CXXALIAS_SYS (printf, int, (const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (printf); +# endif +#endif +#if !0 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_printf +# undef printf +# endif +/* Assume printf is always declared. */ +_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " + "use gnulib module printf-posix for portable " + "POSIX compliance"); +#endif + +#if 1 +# if 0 && (0 || 1) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putc +# define putc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (putc); +# endif +#endif + +#if 1 +# if 0 && (0 || 1) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putchar +# define putchar rpl_putchar +# endif +_GL_FUNCDECL_RPL (putchar, int, (int c)); +_GL_CXXALIAS_RPL (putchar, int, (int c)); +# else +_GL_CXXALIAS_SYS (putchar, int, (int c)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (putchar); +# endif +#endif + +#if 1 +# if 0 && (0 || 1) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef puts +# define puts rpl_puts +# endif +_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (puts, int, (const char *string)); +# else +_GL_CXXALIAS_SYS (puts, int, (const char *string)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (puts); +# endif +#endif + +#if 1 +/* On native Windows, map 'putw' to '_putw', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::putw always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putw +# define putw _putw +# endif +_GL_CXXALIAS_MDA (putw, int, (int w, FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (putw, int, (int w, FILE *restrict stream)); +# endif +_GL_CXXALIASWARN (putw); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remove +# define remove rpl_remove +# endif +_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (remove, int, (const char *name)); +# else +_GL_CXXALIAS_SYS (remove, int, (const char *name)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (remove); +# endif +#elif defined GNULIB_POSIXCHECK +# undef remove +/* Assume remove is always declared. */ +_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " + "use gnulib module remove for more portability"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rename +# define rename rpl_rename +# endif +_GL_FUNCDECL_RPL (rename, int, + (const char *old_filename, const char *new_filename) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (rename, int, + (const char *old_filename, const char *new_filename)); +# else +_GL_CXXALIAS_SYS (rename, int, + (const char *old_filename, const char *new_filename)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (rename); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rename +/* Assume rename is always declared. */ +_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " + "use gnulib module rename for more portability"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef renameat +# define renameat rpl_renameat +# endif +_GL_FUNCDECL_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# else +# if !1 +_GL_FUNCDECL_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# endif +_GL_CXXALIASWARN (renameat); +#elif defined GNULIB_POSIXCHECK +# undef renameat +# if HAVE_RAW_DECL_RENAMEAT +_GL_WARN_ON_USE (renameat, "renameat is not portable - " + "use gnulib module renameat for portability"); +# endif +#endif + +#if 1 +# if 0 && 0 +# if defined __GNUC__ || defined __clang__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +/* Don't break __attribute__((format(scanf,M,N))). */ +# define scanf __scanf__ +# endif +_GL_FUNCDECL_RPL_1 (__scanf__, int, + (const char *restrict format, ...) + __asm__ ("" + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *restrict format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +# define scanf rpl_scanf +# endif +_GL_FUNCDECL_RPL (scanf, int, (const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (scanf, int, (const char *restrict format, ...)); +# endif +# else +_GL_CXXALIAS_SYS (scanf, int, (const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (scanf); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define snprintf rpl_snprintf +# endif +# define GNULIB_overrides_snprintf 1 +_GL_FUNCDECL_RPL (snprintf, int, + (char *restrict str, size_t size, + const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (snprintf, int, + (char *restrict str, size_t size, + const char *restrict format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (snprintf, int, + (char *restrict str, size_t size, + const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (snprintf, int, + (char *restrict str, size_t size, + const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (snprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef snprintf +# if HAVE_RAW_DECL_SNPRINTF +_GL_WARN_ON_USE (snprintf, "snprintf is unportable - " + "use gnulib module snprintf for portability"); +# endif +#endif + +/* Some people would argue that all sprintf uses should be warned about + (for example, OpenBSD issues a link warning for it), + since it can cause security holes due to buffer overruns. + However, we believe that sprintf can be used safely, and is more + efficient than snprintf in those safe cases; and as proof of our + belief, we use sprintf in several gnulib modules. So this header + intentionally avoids adding a warning to sprintf except when + GNULIB_POSIXCHECK is defined. */ + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define sprintf rpl_sprintf +# endif +# define GNULIB_overrides_sprintf 1 +_GL_FUNCDECL_RPL (sprintf, int, + (char *restrict str, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (sprintf, int, + (char *restrict str, const char *restrict format, ...)); +# else +_GL_CXXALIAS_SYS (sprintf, int, + (char *restrict str, const char *restrict format, ...)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (sprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef sprintf +/* Assume sprintf is always declared. */ +_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " + "use gnulib module sprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 1 +/* On native Windows, map 'tempnam' to '_tempnam', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::tempnam always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tempnam +# define tempnam _tempnam +# endif +_GL_CXXALIAS_MDA (tempnam, char *, (const char *dir, const char *prefix)); +# else +_GL_CXXALIAS_SYS (tempnam, char *, (const char *dir, const char *prefix)); +# endif +_GL_CXXALIASWARN (tempnam); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define tmpfile rpl_tmpfile +# endif +_GL_FUNCDECL_RPL (tmpfile, FILE *, (void) + _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +_GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); +# else +# if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (tmpfile, FILE *, (void) + _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +# endif +_GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (tmpfile); +# endif +#else +# if 0 && __GNUC__ >= 11 && !defined tmpfile +/* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ +_GL_FUNCDECL_SYS (tmpfile, FILE *, (void) + _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +# endif +# if defined GNULIB_POSIXCHECK +# undef tmpfile +# if HAVE_RAW_DECL_TMPFILE +_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " + "use gnulib module tmpfile for portability"); +# endif +# endif +#endif + +#if 0 +/* Write formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, store the address of the string in + *RESULT and return the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define asprintf rpl_asprintf +# endif +# define GNULIB_overrides_asprintf +_GL_FUNCDECL_RPL (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (asprintf, int, + (char **result, const char *format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (asprintf, int, + (char **result, const char *format, ...)); +# endif +_GL_CXXALIASWARN (asprintf); +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vasprintf rpl_vasprintf +# endif +# define GNULIB_overrides_vasprintf 1 +_GL_FUNCDECL_RPL (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vasprintf, int, + (char **result, const char *format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (vasprintf, int, + (char **result, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vasprintf); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vdprintf rpl_vdprintf +# endif +_GL_FUNCDECL_RPL (vdprintf, int, + (int fd, const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (vdprintf, int, + (int fd, const char *restrict format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (vdprintf, int, + (int fd, const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((2))); +# endif +/* Need to cast, because on Solaris, the third parameter will likely be + __va_list args. */ +_GL_CXXALIAS_SYS_CAST (vdprintf, int, + (int fd, const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vdprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vdprintf +# if HAVE_RAW_DECL_VDPRINTF +_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " + "use gnulib module vdprintf for portability"); +# endif +#endif + +#if 0 || 1 +# if (0 && 0) \ + || (1 && 0 && (0 || 1)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vfprintf rpl_vfprintf +# endif +# define GNULIB_overrides_vfprintf 1 +# if 0 +_GL_FUNCDECL_RPL (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vfprintf); +# endif +#endif +#if !0 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vfprintf +# undef vfprintf +# endif +/* Assume vfprintf is always declared. */ +_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " + "use gnulib module vfprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vfscanf +# define vfscanf rpl_vfscanf +# endif +_GL_FUNCDECL_RPL (vfscanf, int, + (FILE *restrict stream, + const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vfscanf, int, + (FILE *restrict stream, + const char *restrict format, va_list args)); +# else +_GL_CXXALIAS_SYS (vfscanf, int, + (FILE *restrict stream, + const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vfscanf); +# endif +#endif + +#if 0 || 1 +# if (0 && 0) \ + || (1 && 0 && (0 || 1)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vprintf rpl_vprintf +# endif +# define GNULIB_overrides_vprintf 1 +# if 0 || 0 +_GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 0) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL (vprintf, int, (const char *restrict format, va_list args)); +# else +/* Need to cast, because on Solaris, the second parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vprintf, int, + (const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vprintf); +# endif +#endif +#if !0 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vprintf +# undef vprintf +# endif +/* Assume vprintf is always declared. */ +_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " + "use gnulib module vprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vscanf +# define vscanf rpl_vscanf +# endif +_GL_FUNCDECL_RPL (vscanf, int, (const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (vscanf, int, (const char *restrict format, va_list args)); +# else +_GL_CXXALIAS_SYS (vscanf, int, (const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vscanf); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsnprintf rpl_vsnprintf +# endif +# define GNULIB_overrides_vsnprintf 1 +_GL_FUNCDECL_RPL (vsnprintf, int, + (char *restrict str, size_t size, + const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (vsnprintf, int, + (char *restrict str, size_t size, + const char *restrict format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (vsnprintf, int, + (char *restrict str, size_t size, + const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (vsnprintf, int, + (char *restrict str, size_t size, + const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vsnprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vsnprintf +# if HAVE_RAW_DECL_VSNPRINTF +_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " + "use gnulib module vsnprintf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsprintf rpl_vsprintf +# endif +# define GNULIB_overrides_vsprintf 1 +_GL_FUNCDECL_RPL (vsprintf, int, + (char *restrict str, + const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vsprintf, int, + (char *restrict str, + const char *restrict format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vsprintf, int, + (char *restrict str, + const char *restrict format, va_list args)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (vsprintf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vsprintf +/* Assume vsprintf is always declared. */ +_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " + "use gnulib module vsprintf-posix for portable " + "POSIX compliance"); +#endif + +#endif /* _GL_STDIO_H */ +#endif /* _GL_STDIO_H */ +#endif diff --git a/jni/parted/libiconv/srclib/stdlib.h b/jni/parted/libiconv/srclib/stdlib.h new file mode 100755 index 0000000..4681d3a --- /dev/null +++ b/jni/parted/libiconv/srclib/stdlib.h @@ -0,0 +1,2111 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 1995, 2001-2004, 2006-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_system_stdlib_h || defined __need_malloc_and_calloc +/* Special invocation conventions inside some gnulib header files, + and inside some glibc header files, respectively. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_STDLIB_H +#define _GL_STDLIB_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include + +/* MirBSD 10 defines WEXITSTATUS in , not in . */ +#if 0 && !defined WEXITSTATUS +# include +#endif + +/* Solaris declares getloadavg() in . */ +#if (0 || defined GNULIB_POSIXCHECK) && 0 +/* OpenIndiana has a bug: must be included before + . */ +# include +# include +#endif + +/* Native Windows platforms declare _mktemp() in . */ +#if defined _WIN32 && !defined __CYGWIN__ +# include +#endif + +#if 0 + +/* OSF/1 5.1 declares 'struct random_data' in , which is included + from if _REENTRANT is defined. Include it whenever we need + 'struct random_data'. */ +# if 1 +# include +# endif + +# if !1 || 0 || !1 +# include +# endif + +# if !1 +/* Define 'struct random_data'. + But allow multiple gnulib generated replacements to coexist. */ +# if !GNULIB_defined_struct_random_data +struct random_data +{ + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ +}; +# define GNULIB_defined_struct_random_data 1 +# endif +# endif +#endif + +#if (0 || 0 || 0 || 0 || 0 || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) +/* On Mac OS X 10.3, only declares mkstemp. */ +/* On Mac OS X 10.5, only declares mkstemps. */ +/* On Mac OS X 10.13, only declares mkostemp and mkostemps. */ +/* On Cygwin 1.7.1, only declares getsubopt. */ +/* But avoid namespace pollution on glibc systems and native Windows. */ +# include +#endif + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that + can be freed via 'free'; it can be used only after declaring 'free'. */ +/* Applies to: functions. Cannot be used on inline functions. */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif +#endif + +/* The definition of _Noreturn is copied here. */ +/* A C macro for declaring that a function does not return. + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || (!defined __STRICT_ANSI__ \ + && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))))) + /* _Noreturn works as-is. */ +# elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ + || 0x5110 <= __SUNPRO_C) +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere + with proper operation of xargs. */ +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#elif EXIT_FAILURE != 1 +# undef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +#if 0 +/* Terminate the current process with the given return code, without running + the 'atexit' handlers. */ +# if !1 +_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); +# endif +_GL_CXXALIAS_SYS (_Exit, void, (int status)); +_GL_CXXALIASWARN (_Exit); +#elif defined GNULIB_POSIXCHECK +# undef _Exit +# if HAVE_RAW_DECL__EXIT +_GL_WARN_ON_USE (_Exit, "_Exit is unportable - " + "use gnulib module _Exit for portability"); +# endif +#endif + + +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef free +# define free rpl_free +# endif +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_FUNCDECL_RPL (free, void, (void *ptr) throw ()); +# else +_GL_FUNCDECL_RPL (free, void, (void *ptr)); +# endif +_GL_CXXALIAS_RPL (free, void, (void *ptr)); +# else +_GL_CXXALIAS_SYS (free, void, (void *ptr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (free); +# endif +#elif defined GNULIB_POSIXCHECK +# undef free +/* Assume free is always declared. */ +_GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - " + "use gnulib module free for portability"); +#endif + + +/* Allocate memory with indefinite extent and specified alignment. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef aligned_alloc +# define aligned_alloc rpl_aligned_alloc +# endif +_GL_FUNCDECL_RPL (aligned_alloc, void *, + (size_t alignment, size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t alignment, size_t size)); +# else +# if 1 +# if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ +_GL_FUNCDECL_SYS (aligned_alloc, void *, + (size_t alignment, size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +_GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size)); +# endif +# endif +# if 1 +_GL_CXXALIASWARN (aligned_alloc); +# endif +#else +# if 1 && __GNUC__ >= 11 && !defined aligned_alloc +/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ +_GL_FUNCDECL_SYS (aligned_alloc, void *, + (size_t alignment, size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +# undef aligned_alloc +# if HAVE_RAW_DECL_ALIGNED_ALLOC +_GL_WARN_ON_USE (aligned_alloc, "aligned_alloc is not portable - " + "use gnulib module aligned_alloc for portability"); +# endif +# endif +#endif + +#if 0 +/* Parse a signed decimal integer. + Returns the value of the integer. Errors are not detected. */ +# if !1 +_GL_FUNCDECL_SYS (atoll, long long, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (atoll, long long, (const char *string)); +_GL_CXXALIASWARN (atoll); +#elif defined GNULIB_POSIXCHECK +# undef atoll +# if HAVE_RAW_DECL_ATOLL +_GL_WARN_ON_USE (atoll, "atoll is unportable - " + "use gnulib module atoll for portability"); +# endif +#endif + +#if 0 +# if (0 && 0) \ + || (0 && 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef calloc +# define calloc rpl_calloc +# endif +_GL_FUNCDECL_RPL (calloc, void *, + (size_t nmemb, size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); +# else +# if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ +_GL_FUNCDECL_SYS (calloc, void *, + (size_t nmemb, size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (calloc); +# endif +#else +# if 1 && __GNUC__ >= 11 && !defined calloc +/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ +_GL_FUNCDECL_SYS (calloc, void *, + (size_t nmemb, size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +# undef calloc +/* Assume calloc is always declared. */ +_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " + "use gnulib module calloc-posix for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define canonicalize_file_name rpl_canonicalize_file_name +# endif +_GL_FUNCDECL_RPL (canonicalize_file_name, char *, + (const char *name) + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); +# else +# if !0 || __GNUC__ >= 11 +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, + (const char *name) + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); +# endif +# ifndef GNULIB_defined_canonicalize_file_name +# define GNULIB_defined_canonicalize_file_name \ + (!0 || 0) +# endif +_GL_CXXALIASWARN (canonicalize_file_name); +#else +# if 1 && __GNUC__ >= 11 && !defined canonicalize_file_name +/* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or + rpl_free. */ +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, + (const char *name) + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +# undef canonicalize_file_name +# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME +_GL_WARN_ON_USE (canonicalize_file_name, + "canonicalize_file_name is unportable - " + "use gnulib module canonicalize-lgpl for portability"); +# endif +# endif +#endif + +#if 1 +/* On native Windows, map 'ecvt' to '_ecvt', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::ecvt on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ecvt +# define ecvt _ecvt +# endif +_GL_CXXALIAS_MDA (ecvt, char *, + (double number, int ndigits, int *decptp, int *signp)); +# else +# if 0 +_GL_CXXALIAS_SYS (ecvt, char *, + (double number, int ndigits, int *decptp, int *signp)); +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 0 +_GL_CXXALIASWARN (ecvt); +# endif +#endif + +#if 1 +/* On native Windows, map 'fcvt' to '_fcvt', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::fcvt on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fcvt +# define fcvt _fcvt +# endif +_GL_CXXALIAS_MDA (fcvt, char *, + (double number, int ndigits, int *decptp, int *signp)); +# else +# if 0 +_GL_CXXALIAS_SYS (fcvt, char *, + (double number, int ndigits, int *decptp, int *signp)); +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 0 +_GL_CXXALIASWARN (fcvt); +# endif +#endif + +#if 1 +/* On native Windows, map 'gcvt' to '_gcvt', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::gcvt on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gcvt +# define gcvt _gcvt +# endif +_GL_CXXALIAS_MDA (gcvt, char *, (double number, int ndigits, char *buf)); +# else +# if 0 +_GL_CXXALIAS_SYS (gcvt, char *, (double number, int ndigits, char *buf)); +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 0 +_GL_CXXALIASWARN (gcvt); +# endif +#endif + +#if 0 +/* Store max(NELEM,3) load average numbers in LOADAVG[]. + The three numbers are the load average of the last 1 minute, the last 5 + minutes, and the last 15 minutes, respectively. + LOADAVG is an array of NELEM numbers. */ +# if !1 +_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); +_GL_CXXALIASWARN (getloadavg); +#elif defined GNULIB_POSIXCHECK +# undef getloadavg +# if HAVE_RAW_DECL_GETLOADAVG +_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " + "use gnulib module getloadavg for portability"); +# endif +#endif + +#if 0 +/* Assuming *OPTIONP is a comma separated list of elements of the form + "token" or "token=value", getsubopt parses the first of these elements. + If the first element refers to a "token" that is member of the given + NULL-terminated array of tokens: + - It replaces the comma with a NUL byte, updates *OPTIONP to point past + the first option and the comma, sets *VALUEP to the value of the + element (or NULL if it doesn't contain an "=" sign), + - It returns the index of the "token" in the given array of tokens. + Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. + For more details see the POSIX specification. + https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */ +# if !1 +_GL_FUNCDECL_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep)); +_GL_CXXALIASWARN (getsubopt); +#elif defined GNULIB_POSIXCHECK +# undef getsubopt +# if HAVE_RAW_DECL_GETSUBOPT +_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " + "use gnulib module getsubopt for portability"); +# endif +#endif + +#if 0 +/* Change the ownership and access permission of the slave side of the + pseudo-terminal whose master side is specified by FD. */ +# if !1 +_GL_FUNCDECL_SYS (grantpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (grantpt, int, (int fd)); +_GL_CXXALIASWARN (grantpt); +#elif defined GNULIB_POSIXCHECK +# undef grantpt +# if HAVE_RAW_DECL_GRANTPT +_GL_WARN_ON_USE (grantpt, "grantpt is not portable - " + "use gnulib module grantpt for portability"); +# endif +#endif + +/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not + rely on GNU or POSIX semantics for malloc and realloc (for example, + by never specifying a zero size), so it does not need malloc or + realloc to be redefined. */ +#if 1 +# if (1 && 0) \ + || (0 && 0) +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef malloc +# define malloc rpl_malloc +# endif +_GL_FUNCDECL_RPL (malloc, void *, + (size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (malloc, void *, (size_t size)); +# else +# if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ +_GL_FUNCDECL_SYS (malloc, void *, + (size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +_GL_CXXALIAS_SYS (malloc, void *, (size_t size)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (malloc); +# endif +#else +# if 1 && __GNUC__ >= 11 && !defined malloc +/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ +_GL_FUNCDECL_SYS (malloc, void *, + (size_t size) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef malloc +/* Assume malloc is always declared. */ +_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " + "use gnulib module malloc-posix for portability"); +# endif +#endif + +/* Convert a multibyte character to a wide character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbtowc +# define mbtowc rpl_mbtowc +# endif +_GL_FUNCDECL_RPL (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); +_GL_CXXALIAS_RPL (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); +# endif +_GL_CXXALIAS_SYS (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbtowc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbtowc +# if HAVE_RAW_DECL_MBTOWC +_GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - " + "use gnulib module mbtowc for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +# if !1 +_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); +_GL_CXXALIASWARN (mkdtemp); +#elif defined GNULIB_POSIXCHECK +# undef mkdtemp +# if HAVE_RAW_DECL_MKDTEMP +_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " + "use gnulib module mkdtemp for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !1 +_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemp); +#elif defined GNULIB_POSIXCHECK +# undef mkostemp +# if HAVE_RAW_DECL_MKOSTEMP +_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " + "use gnulib module mkostemp for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE before a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !1 +_GL_FUNCDECL_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemps); +#elif defined GNULIB_POSIXCHECK +# undef mkostemps +# if HAVE_RAW_DECL_MKOSTEMPS +_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " + "use gnulib module mkostemps for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mkstemp rpl_mkstemp +# endif +_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); +# endif +_GL_CXXALIASWARN (mkstemp); +#elif defined GNULIB_POSIXCHECK +# undef mkstemp +# if HAVE_RAW_DECL_MKSTEMP +_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " + "use gnulib module mkstemp for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE prior to a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !1 +_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); +_GL_CXXALIASWARN (mkstemps); +#elif defined GNULIB_POSIXCHECK +# undef mkstemps +# if HAVE_RAW_DECL_MKSTEMPS +_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " + "use gnulib module mkstemps for portability"); +# endif +#endif + +#if 1 +/* On native Windows, map 'mktemp' to '_mktemp', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::mktemp always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mktemp +# define mktemp _mktemp +# endif +_GL_CXXALIAS_MDA (mktemp, char *, (char * /*template*/)); +# else +_GL_CXXALIAS_SYS (mktemp, char *, (char * /*template*/)); +# endif +_GL_CXXALIASWARN (mktemp); +#endif + +/* Allocate memory with indefinite extent and specified alignment. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef posix_memalign +# define posix_memalign rpl_posix_memalign +# endif +_GL_FUNCDECL_RPL (posix_memalign, int, + (void **memptr, size_t alignment, size_t size) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_memalign, int, + (void **memptr, size_t alignment, size_t size)); +# else +# if 1 +_GL_CXXALIAS_SYS (posix_memalign, int, + (void **memptr, size_t alignment, size_t size)); +# endif +# endif +# if 1 +_GL_CXXALIASWARN (posix_memalign); +# endif +#elif defined GNULIB_POSIXCHECK +# undef posix_memalign +# if HAVE_RAW_DECL_POSIX_MEMALIGN +_GL_WARN_ON_USE (posix_memalign, "posix_memalign is not portable - " + "use gnulib module posix_memalign for portability"); +# endif +#endif + +#if 0 +/* Return an FD open to the master side of a pseudo-terminal. Flags should + include O_RDWR, and may also include O_NOCTTY. */ +# if !1 +_GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); +# endif +_GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); +_GL_CXXALIASWARN (posix_openpt); +#elif defined GNULIB_POSIXCHECK +# undef posix_openpt +# if HAVE_RAW_DECL_POSIX_OPENPT +_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " + "use gnulib module posix_openpt for portability"); +# endif +#endif + +#if 0 +/* Return the pathname of the pseudo-terminal slave associated with + the master FD is open on, or NULL on errors. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname +# define ptsname rpl_ptsname +# endif +_GL_FUNCDECL_RPL (ptsname, char *, (int fd)); +_GL_CXXALIAS_RPL (ptsname, char *, (int fd)); +# else +# if !1 +_GL_FUNCDECL_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIASWARN (ptsname); +#elif defined GNULIB_POSIXCHECK +# undef ptsname +# if HAVE_RAW_DECL_PTSNAME +_GL_WARN_ON_USE (ptsname, "ptsname is not portable - " + "use gnulib module ptsname for portability"); +# endif +#endif + +#if 0 +/* Set the pathname of the pseudo-terminal slave associated with + the master FD is open on and return 0, or set errno and return + non-zero on errors. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname_r +# define ptsname_r rpl_ptsname_r +# endif +_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +# ifndef GNULIB_defined_ptsname_r +# define GNULIB_defined_ptsname_r (!1 || 0) +# endif +_GL_CXXALIASWARN (ptsname_r); +#elif defined GNULIB_POSIXCHECK +# undef ptsname_r +# if HAVE_RAW_DECL_PTSNAME_R +_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " + "use gnulib module ptsname_r for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv rpl_putenv +# endif +_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (putenv, int, (char *string)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv _putenv +# endif +_GL_CXXALIAS_MDA (putenv, int, (char *string)); +# else +_GL_CXXALIAS_SYS (putenv, int, (char *string)); +# endif +_GL_CXXALIASWARN (putenv); +#elif 1 +/* On native Windows, map 'putenv' to '_putenv', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::putenv always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv _putenv +# endif +/* Need to cast, because on mingw, the parameter is either + 'const char *string' or 'char *string'. */ +_GL_CXXALIAS_MDA_CAST (putenv, int, (char *string)); +# else +_GL_CXXALIAS_SYS (putenv, int, (char *string)); +# endif +_GL_CXXALIASWARN (putenv); +#endif + +#if 0 +/* Sort an array of NMEMB elements, starting at address BASE, each element + occupying SIZE bytes, in ascending order according to the comparison + function COMPARE. */ +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_qsort_r_fn_types +typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *); +# define GNULIB_defined_qsort_r_fn_types 1 +# endif +# ifdef __cplusplus +} +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef qsort_r +# define qsort_r rpl_qsort_r +# endif +_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, + _gl_qsort_r_compar_fn compare, + void *arg) _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, + _gl_qsort_r_compar_fn compare, + void *arg)); +# else +# if !1 +_GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, + _gl_qsort_r_compar_fn compare, + void *arg) _GL_ARG_NONNULL ((1, 4))); +# endif +_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, + _gl_qsort_r_compar_fn compare, + void *arg)); +# endif +_GL_CXXALIASWARN (qsort_r); +#elif defined GNULIB_POSIXCHECK +# undef qsort_r +# if HAVE_RAW_DECL_QSORT_R +_GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " + "use gnulib module qsort_r for portability"); +# endif +#endif + + +#if 0 +# if !1 +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef random +# define random rpl_random +# endif +_GL_FUNCDECL_RPL (random, long, (void)); +_GL_CXXALIAS_RPL (random, long, (void)); +# else +# if !1 +_GL_FUNCDECL_SYS (random, long, (void)); +# endif +/* Need to cast, because on Haiku, the return type is + int. */ +_GL_CXXALIAS_SYS_CAST (random, long, (void)); +# endif +_GL_CXXALIASWARN (random); +#elif defined GNULIB_POSIXCHECK +# undef random +# if HAVE_RAW_DECL_RANDOM +_GL_WARN_ON_USE (random, "random is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef srandom +# define srandom rpl_srandom +# endif +_GL_FUNCDECL_RPL (srandom, void, (unsigned int seed)); +_GL_CXXALIAS_RPL (srandom, void, (unsigned int seed)); +# else +# if !1 +_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); +# endif +/* Need to cast, because on FreeBSD, the first parameter is + unsigned long seed. */ +_GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed)); +# endif +_GL_CXXALIASWARN (srandom); +#elif defined GNULIB_POSIXCHECK +# undef srandom +# if HAVE_RAW_DECL_SRANDOM +_GL_WARN_ON_USE (srandom, "srandom is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef initstate +# define initstate rpl_initstate +# endif +_GL_FUNCDECL_RPL (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); +# else +# if !1 || !1 +_GL_FUNCDECL_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size) + _GL_ARG_NONNULL ((2))); +# endif +/* Need to cast, because on FreeBSD, the first parameter is + unsigned long seed. */ +_GL_CXXALIAS_SYS_CAST (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); +# endif +_GL_CXXALIASWARN (initstate); +#elif defined GNULIB_POSIXCHECK +# undef initstate +# if HAVE_RAW_DECL_INITSTATE +_GL_WARN_ON_USE (initstate, "initstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setstate +# define setstate rpl_setstate +# endif +_GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setstate, char *, (char *arg_state)); +# else +# if !1 || !1 +_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter + is const char *arg_state. */ +_GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state)); +# endif +_GL_CXXALIASWARN (setstate); +#elif defined GNULIB_POSIXCHECK +# undef setstate +# if HAVE_RAW_DECL_SETSTATE +_GL_WARN_ON_USE (setstate, "setstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef random_r +# define random_r rpl_random_r +# endif +_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); +# else +# if !1 +_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); +# endif +_GL_CXXALIASWARN (random_r); +#elif defined GNULIB_POSIXCHECK +# undef random_r +# if HAVE_RAW_DECL_RANDOM_R +_GL_WARN_ON_USE (random_r, "random_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef srandom_r +# define srandom_r rpl_srandom_r +# endif +_GL_FUNCDECL_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# else +# if !1 +_GL_FUNCDECL_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (srandom_r); +#elif defined GNULIB_POSIXCHECK +# undef srandom_r +# if HAVE_RAW_DECL_SRANDOM_R +_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef initstate_r +# define initstate_r rpl_initstate_r +# endif +_GL_FUNCDECL_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# else +# if !1 +_GL_FUNCDECL_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +# endif +/* Need to cast, because on Haiku, the third parameter is + unsigned long buf_size. */ +_GL_CXXALIAS_SYS_CAST (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (initstate_r); +#elif defined GNULIB_POSIXCHECK +# undef initstate_r +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setstate_r +# define setstate_r rpl_setstate_r +# endif +_GL_FUNCDECL_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# else +# if !1 +_GL_FUNCDECL_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +# endif +/* Need to cast, because on Haiku, the first parameter is + void *arg_state. */ +_GL_CXXALIAS_SYS_CAST (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (setstate_r); +#elif defined GNULIB_POSIXCHECK +# undef setstate_r +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + + +#if 1 +# if (1 && 0) \ + || (0 && 0) +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef realloc +# define realloc rpl_realloc +# endif +_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size) + _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); +# else +# if __GNUC__ >= 11 +/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ +_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) + _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (realloc); +# endif +#else +# if 1 && __GNUC__ >= 11 && !defined realloc +/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ +_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) + _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef realloc +/* Assume realloc is always declared. */ +_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " + "use gnulib module realloc-posix for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef reallocarray +# define reallocarray rpl_reallocarray +# endif +_GL_FUNCDECL_RPL (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +_GL_CXXALIAS_RPL (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +# endif +_GL_CXXALIAS_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +# endif +_GL_CXXALIASWARN (reallocarray); +#elif defined GNULIB_POSIXCHECK +# undef reallocarray +# if HAVE_RAW_DECL_REALLOCARRAY +_GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " + "use gnulib module reallocarray for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define realpath rpl_realpath +# endif +_GL_FUNCDECL_RPL (realpath, char *, + (const char *restrict name, char *restrict resolved) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (realpath, char *, + (const char *restrict name, char *restrict resolved)); +# else +# if !1 +_GL_FUNCDECL_SYS (realpath, char *, + (const char *restrict name, char *restrict resolved) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (realpath, char *, + (const char *restrict name, char *restrict resolved)); +# endif +_GL_CXXALIASWARN (realpath); +#elif defined GNULIB_POSIXCHECK +# undef realpath +# if HAVE_RAW_DECL_REALPATH +_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " + "canonicalize or canonicalize-lgpl for portability"); +# endif +#endif + +#if 0 +/* Test a user response to a question. + Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ +# if !1 +_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); +_GL_CXXALIASWARN (rpmatch); +#elif defined GNULIB_POSIXCHECK +# undef rpmatch +# if HAVE_RAW_DECL_RPMATCH +_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " + "use gnulib module rpmatch for portability"); +# endif +#endif + +#if 0 +/* Look up NAME in the environment, returning 0 in insecure situations. */ +# if !1 +_GL_FUNCDECL_SYS (secure_getenv, char *, + (char const *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); +_GL_CXXALIASWARN (secure_getenv); +#elif defined GNULIB_POSIXCHECK +# undef secure_getenv +# if HAVE_RAW_DECL_SECURE_GETENV +_GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " + "use gnulib module secure_getenv for portability"); +# endif +#endif + +#if 0 +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setenv +# define setenv rpl_setenv +# endif +_GL_FUNCDECL_RPL (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setenv, int, + (const char *name, const char *value, int replace)); +# else +# if !1 +_GL_FUNCDECL_SYS (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setenv, int, + (const char *name, const char *value, int replace)); +# endif +# if !(0 && !1) +_GL_CXXALIASWARN (setenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef setenv +# if HAVE_RAW_DECL_SETENV +_GL_WARN_ON_USE (setenv, "setenv is unportable - " + "use gnulib module setenv for portability"); +# endif +#endif + +#if 0 + /* Parse a double from STRING, updating ENDP if appropriate. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtod rpl_strtod +# endif +# define GNULIB_defined_strtod_function 1 +_GL_FUNCDECL_RPL (strtod, double, + (const char *restrict str, char **restrict endp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtod, double, + (const char *restrict str, char **restrict endp)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtod, double, + (const char *restrict str, char **restrict endp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtod, double, + (const char *restrict str, char **restrict endp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strtod); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtod +# if HAVE_RAW_DECL_STRTOD +_GL_WARN_ON_USE (strtod, "strtod is unportable - " + "use gnulib module strtod for portability"); +# endif +#endif + +#if 0 + /* Parse a 'long double' from STRING, updating ENDP if appropriate. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtold rpl_strtold +# endif +# define GNULIB_defined_strtold_function 1 +_GL_FUNCDECL_RPL (strtold, long double, + (const char *restrict str, char **restrict endp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtold, long double, + (const char *restrict str, char **restrict endp)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtold, long double, + (const char *restrict str, char **restrict endp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtold, long double, + (const char *restrict str, char **restrict endp)); +# endif +_GL_CXXALIASWARN (strtold); +#elif defined GNULIB_POSIXCHECK +# undef strtold +# if HAVE_RAW_DECL_STRTOLD +_GL_WARN_ON_USE (strtold, "strtold is unportable - " + "use gnulib module strtold for portability"); +# endif +#endif + +#if 0 +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LONG_MAX or LONG_MIN, and errno is set + to ERANGE. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtol rpl_strtol +# endif +# define GNULIB_defined_strtol_function 1 +_GL_FUNCDECL_RPL (strtol, long, + (const char *restrict string, char **restrict endptr, + int base) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtol, long, + (const char *restrict string, char **restrict endptr, + int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtol, long, + (const char *restrict string, char **restrict endptr, + int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtol, long, + (const char *restrict string, char **restrict endptr, + int base)); +# endif +_GL_CXXALIASWARN (strtol); +#elif defined GNULIB_POSIXCHECK +# undef strtol +# if HAVE_RAW_DECL_STRTOL +_GL_WARN_ON_USE (strtol, "strtol is unportable - " + "use gnulib module strtol for portability"); +# endif +#endif + +#if 0 +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set + to ERANGE. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtoll rpl_strtoll +# endif +# define GNULIB_defined_strtoll_function 1 +_GL_FUNCDECL_RPL (strtoll, long long, + (const char *restrict string, char **restrict endptr, + int base) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoll, long long, + (const char *restrict string, char **restrict endptr, + int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtoll, long long, + (const char *restrict string, char **restrict endptr, + int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoll, long long, + (const char *restrict string, char **restrict endptr, + int base)); +# endif +_GL_CXXALIASWARN (strtoll); +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# if HAVE_RAW_DECL_STRTOLL +_GL_WARN_ON_USE (strtoll, "strtoll is unportable - " + "use gnulib module strtoll for portability"); +# endif +#endif + +#if 0 +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULONG_MAX, and errno is set to ERANGE. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtoul rpl_strtoul +# endif +# define GNULIB_defined_strtoul_function 1 +_GL_FUNCDECL_RPL (strtoul, unsigned long, + (const char *restrict string, char **restrict endptr, + int base) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoul, unsigned long, + (const char *restrict string, char **restrict endptr, + int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtoul, unsigned long, + (const char *restrict string, char **restrict endptr, + int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoul, unsigned long, + (const char *restrict string, char **restrict endptr, + int base)); +# endif +_GL_CXXALIASWARN (strtoul); +#elif defined GNULIB_POSIXCHECK +# undef strtoul +# if HAVE_RAW_DECL_STRTOUL +_GL_WARN_ON_USE (strtoul, "strtoul is unportable - " + "use gnulib module strtoul for portability"); +# endif +#endif + +#if 0 +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULLONG_MAX, and errno is set to + ERANGE. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtoull rpl_strtoull +# endif +# define GNULIB_defined_strtoull_function 1 +_GL_FUNCDECL_RPL (strtoull, unsigned long long, + (const char *restrict string, char **restrict endptr, + int base) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoull, unsigned long long, + (const char *restrict string, char **restrict endptr, + int base)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtoull, unsigned long long, + (const char *restrict string, char **restrict endptr, + int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoull, unsigned long long, + (const char *restrict string, char **restrict endptr, + int base)); +# endif +_GL_CXXALIASWARN (strtoull); +#elif defined GNULIB_POSIXCHECK +# undef strtoull +# if HAVE_RAW_DECL_STRTOULL +_GL_WARN_ON_USE (strtoull, "strtoull is unportable - " + "use gnulib module strtoull for portability"); +# endif +#endif + +#if 0 +/* Unlock the slave side of the pseudo-terminal whose master side is specified + by FD, so that it can be opened. */ +# if !1 +_GL_FUNCDECL_SYS (unlockpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (unlockpt, int, (int fd)); +_GL_CXXALIASWARN (unlockpt); +#elif defined GNULIB_POSIXCHECK +# undef unlockpt +# if HAVE_RAW_DECL_UNLOCKPT +_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " + "use gnulib module unlockpt for portability"); +# endif +#endif + +#if 0 +/* Remove the variable NAME from the environment. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unsetenv +# define unsetenv rpl_unsetenv +# endif +_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); +# else +# if !1 +_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); +# endif +# if !(0 && !1) +_GL_CXXALIASWARN (unsetenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef unsetenv +# if HAVE_RAW_DECL_UNSETENV +_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " + "use gnulib module unsetenv for portability"); +# endif +#endif + +/* Convert a wide character to a multibyte character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctomb +# define wctomb rpl_wctomb +# endif +_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); +_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); +# else +_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wctomb); +# endif +#endif + + +#endif /* _GL_STDLIB_H */ +#endif /* _GL_STDLIB_H */ +#endif diff --git a/jni/parted/libiconv/srclib/streq.h b/jni/parted/libiconv/srclib/streq.h new file mode 100755 index 0000000..49f73c1 --- /dev/null +++ b/jni/parted/libiconv/srclib/streq.h @@ -0,0 +1,176 @@ +/* Optimized string comparison. + Copyright (C) 2001-2002, 2007, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#ifndef _GL_STREQ_H +#define _GL_STREQ_H + +#include + +/* STREQ_OPT allows to optimize string comparison with a small literal string. + STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + is semantically equivalent to + strcmp (s, "EUC-KR") == 0 + just faster. */ + +/* Help GCC to generate good code for string comparisons with + immediate strings. */ +#if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__ + +static inline int +streq9 (const char *s1, const char *s2) +{ + return strcmp (s1 + 9, s2 + 9) == 0; +} + +static inline int +streq8 (const char *s1, const char *s2, char s28) +{ + if (s1[8] == s28) + { + if (s28 == 0) + return 1; + else + return streq9 (s1, s2); + } + else + return 0; +} + +static inline int +streq7 (const char *s1, const char *s2, char s27, char s28) +{ + if (s1[7] == s27) + { + if (s27 == 0) + return 1; + else + return streq8 (s1, s2, s28); + } + else + return 0; +} + +static inline int +streq6 (const char *s1, const char *s2, char s26, char s27, char s28) +{ + if (s1[6] == s26) + { + if (s26 == 0) + return 1; + else + return streq7 (s1, s2, s27, s28); + } + else + return 0; +} + +static inline int +streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) +{ + if (s1[5] == s25) + { + if (s25 == 0) + return 1; + else + return streq6 (s1, s2, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[4] == s24) + { + if (s24 == 0) + return 1; + else + return streq5 (s1, s2, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[3] == s23) + { + if (s23 == 0) + return 1; + else + return streq4 (s1, s2, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[2] == s22) + { + if (s22 == 0) + return 1; + else + return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[1] == s21) + { + if (s21 == 0) + return 1; + else + return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[0] == s20) + { + if (s20 == 0) + return 1; + else + return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) + +#else + +#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (strcmp (s1, s2) == 0) + +#endif + +#endif /* _GL_STREQ_H */ diff --git a/jni/parted/libiconv/srclib/strerror-override.c b/jni/parted/libiconv/srclib/strerror-override.c new file mode 100755 index 0000000..6be1afd --- /dev/null +++ b/jni/parted/libiconv/srclib/strerror-override.c @@ -0,0 +1,306 @@ +/* strerror-override.c --- POSIX compatible system error routine + + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2010. */ + +#include + +#include "strerror-override.h" + +#include + +#if GNULIB_defined_EWINSOCK /* native Windows platforms */ +# if HAVE_WINSOCK2_H +# include +# endif +#endif + +#if !GNULIB_defined_strerror_override_macro + +/* If ERRNUM maps to an errno value defined by gnulib, return a string + describing the error. Otherwise return NULL. */ +const char * +strerror_override (int errnum) +{ + /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ + switch (errnum) + { +# if REPLACE_STRERROR_0 + case 0: + return "Success"; +# endif + +# if GNULIB_defined_ESOCK /* native Windows platforms with older */ + case EINPROGRESS: + return "Operation now in progress"; + case EALREADY: + return "Operation already in progress"; + case ENOTSOCK: + return "Socket operation on non-socket"; + case EDESTADDRREQ: + return "Destination address required"; + case EMSGSIZE: + return "Message too long"; + case EPROTOTYPE: + return "Protocol wrong type for socket"; + case ENOPROTOOPT: + return "Protocol not available"; + case EPROTONOSUPPORT: + return "Protocol not supported"; + case EOPNOTSUPP: + return "Operation not supported"; + case EAFNOSUPPORT: + return "Address family not supported by protocol"; + case EADDRINUSE: + return "Address already in use"; + case EADDRNOTAVAIL: + return "Cannot assign requested address"; + case ENETDOWN: + return "Network is down"; + case ENETUNREACH: + return "Network is unreachable"; + case ECONNRESET: + return "Connection reset by peer"; + case ENOBUFS: + return "No buffer space available"; + case EISCONN: + return "Transport endpoint is already connected"; + case ENOTCONN: + return "Transport endpoint is not connected"; + case ETIMEDOUT: + return "Connection timed out"; + case ECONNREFUSED: + return "Connection refused"; + case ELOOP: + return "Too many levels of symbolic links"; + case EHOSTUNREACH: + return "No route to host"; + case EWOULDBLOCK: + return "Operation would block"; +# endif +# if GNULIB_defined_ESTREAMS /* native Windows platforms with older */ + case ETXTBSY: + return "Text file busy"; + case ENODATA: + return "No data available"; + case ENOSR: + return "Out of streams resources"; + case ENOSTR: + return "Device not a stream"; + case ETIME: + return "Timer expired"; + case EOTHER: + return "Other error"; +# endif +# if GNULIB_defined_EWINSOCK /* native Windows platforms */ + case ESOCKTNOSUPPORT: + return "Socket type not supported"; + case EPFNOSUPPORT: + return "Protocol family not supported"; + case ESHUTDOWN: + return "Cannot send after transport endpoint shutdown"; + case ETOOMANYREFS: + return "Too many references: cannot splice"; + case EHOSTDOWN: + return "Host is down"; + case EPROCLIM: + return "Too many processes"; + case EUSERS: + return "Too many users"; + case EDQUOT: + return "Disk quota exceeded"; + case ESTALE: + return "Stale NFS file handle"; + case EREMOTE: + return "Object is remote"; +# if HAVE_WINSOCK2_H + /* WSA_INVALID_HANDLE maps to EBADF */ + /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ + /* WSA_INVALID_PARAMETER maps to EINVAL */ + case WSA_OPERATION_ABORTED: + return "Overlapped operation aborted"; + case WSA_IO_INCOMPLETE: + return "Overlapped I/O event object not in signaled state"; + case WSA_IO_PENDING: + return "Overlapped operations will complete later"; + /* WSAEINTR maps to EINTR */ + /* WSAEBADF maps to EBADF */ + /* WSAEACCES maps to EACCES */ + /* WSAEFAULT maps to EFAULT */ + /* WSAEINVAL maps to EINVAL */ + /* WSAEMFILE maps to EMFILE */ + /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ + /* WSAEINPROGRESS maps to EINPROGRESS */ + /* WSAEALREADY maps to EALREADY */ + /* WSAENOTSOCK maps to ENOTSOCK */ + /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ + /* WSAEMSGSIZE maps to EMSGSIZE */ + /* WSAEPROTOTYPE maps to EPROTOTYPE */ + /* WSAENOPROTOOPT maps to ENOPROTOOPT */ + /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ + /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ + /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ + /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ + /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ + /* WSAEADDRINUSE maps to EADDRINUSE */ + /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ + /* WSAENETDOWN maps to ENETDOWN */ + /* WSAENETUNREACH maps to ENETUNREACH */ + /* WSAENETRESET maps to ENETRESET */ + /* WSAECONNABORTED maps to ECONNABORTED */ + /* WSAECONNRESET maps to ECONNRESET */ + /* WSAENOBUFS maps to ENOBUFS */ + /* WSAEISCONN maps to EISCONN */ + /* WSAENOTCONN maps to ENOTCONN */ + /* WSAESHUTDOWN is ESHUTDOWN */ + /* WSAETOOMANYREFS is ETOOMANYREFS */ + /* WSAETIMEDOUT maps to ETIMEDOUT */ + /* WSAECONNREFUSED maps to ECONNREFUSED */ + /* WSAELOOP maps to ELOOP */ + /* WSAENAMETOOLONG maps to ENAMETOOLONG */ + /* WSAEHOSTDOWN is EHOSTDOWN */ + /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ + /* WSAENOTEMPTY maps to ENOTEMPTY */ + /* WSAEPROCLIM is EPROCLIM */ + /* WSAEUSERS is EUSERS */ + /* WSAEDQUOT is EDQUOT */ + /* WSAESTALE is ESTALE */ + /* WSAEREMOTE is EREMOTE */ + case WSASYSNOTREADY: + return "Network subsystem is unavailable"; + case WSAVERNOTSUPPORTED: + return "Winsock.dll version out of range"; + case WSANOTINITIALISED: + return "Successful WSAStartup not yet performed"; + case WSAEDISCON: + return "Graceful shutdown in progress"; + case WSAENOMORE: case WSA_E_NO_MORE: + return "No more results"; + case WSAECANCELLED: case WSA_E_CANCELLED: + return "Call was canceled"; + case WSAEINVALIDPROCTABLE: + return "Procedure call table is invalid"; + case WSAEINVALIDPROVIDER: + return "Service provider is invalid"; + case WSAEPROVIDERFAILEDINIT: + return "Service provider failed to initialize"; + case WSASYSCALLFAILURE: + return "System call failure"; + case WSASERVICE_NOT_FOUND: + return "Service not found"; + case WSATYPE_NOT_FOUND: + return "Class type not found"; + case WSAEREFUSED: + return "Database query was refused"; + case WSAHOST_NOT_FOUND: + return "Host not found"; + case WSATRY_AGAIN: + return "Nonauthoritative host not found"; + case WSANO_RECOVERY: + return "Nonrecoverable error"; + case WSANO_DATA: + return "Valid name, no data record of requested type"; + /* WSA_QOS_* omitted */ +# endif +# endif + +# if GNULIB_defined_ENOMSG + case ENOMSG: + return "No message of desired type"; +# endif + +# if GNULIB_defined_EIDRM + case EIDRM: + return "Identifier removed"; +# endif + +# if GNULIB_defined_ENOLINK + case ENOLINK: + return "Link has been severed"; +# endif + +# if GNULIB_defined_EPROTO + case EPROTO: + return "Protocol error"; +# endif + +# if GNULIB_defined_EMULTIHOP + case EMULTIHOP: + return "Multihop attempted"; +# endif + +# if GNULIB_defined_EBADMSG + case EBADMSG: + return "Bad message"; +# endif + +# if GNULIB_defined_EOVERFLOW + case EOVERFLOW: + return "Value too large for defined data type"; +# endif + +# if GNULIB_defined_ENOTSUP + case ENOTSUP: + return "Not supported"; +# endif + +# if GNULIB_defined_ENETRESET + case ENETRESET: + return "Network dropped connection on reset"; +# endif + +# if GNULIB_defined_ECONNABORTED + case ECONNABORTED: + return "Software caused connection abort"; +# endif + +# if GNULIB_defined_ESTALE + case ESTALE: + return "Stale NFS file handle"; +# endif + +# if GNULIB_defined_EDQUOT + case EDQUOT: + return "Disk quota exceeded"; +# endif + +# if GNULIB_defined_ECANCELED + case ECANCELED: + return "Operation canceled"; +# endif + +# if GNULIB_defined_EOWNERDEAD + case EOWNERDEAD: + return "Owner died"; +# endif + +# if GNULIB_defined_ENOTRECOVERABLE + case ENOTRECOVERABLE: + return "State not recoverable"; +# endif + +# if GNULIB_defined_EILSEQ + case EILSEQ: + return "Invalid or incomplete multibyte or wide character"; +# endif + + default: + return NULL; + } +} + +#endif diff --git a/jni/parted/libiconv/srclib/strerror-override.h b/jni/parted/libiconv/srclib/strerror-override.h new file mode 100755 index 0000000..d010d27 --- /dev/null +++ b/jni/parted/libiconv/srclib/strerror-override.h @@ -0,0 +1,57 @@ +/* strerror-override.h --- POSIX compatible system error routine + + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_STRERROR_OVERRIDE_H +# define _GL_STRERROR_OVERRIDE_H + +# include +# include + +/* Reasonable buffer size that should never trigger ERANGE; if this + proves too small, we intentionally abort(), to remind us to fix + this value. */ +# define STACKBUF_LEN 256 + +/* If ERRNUM maps to an errno value defined by gnulib, return a string + describing the error. Otherwise return NULL. */ +# if REPLACE_STRERROR_0 \ + || GNULIB_defined_ESOCK \ + || GNULIB_defined_ESTREAMS \ + || GNULIB_defined_EWINSOCK \ + || GNULIB_defined_ENOMSG \ + || GNULIB_defined_EIDRM \ + || GNULIB_defined_ENOLINK \ + || GNULIB_defined_EPROTO \ + || GNULIB_defined_EMULTIHOP \ + || GNULIB_defined_EBADMSG \ + || GNULIB_defined_EOVERFLOW \ + || GNULIB_defined_ENOTSUP \ + || GNULIB_defined_ENETRESET \ + || GNULIB_defined_ECONNABORTED \ + || GNULIB_defined_ESTALE \ + || GNULIB_defined_EDQUOT \ + || GNULIB_defined_ECANCELED \ + || GNULIB_defined_EOWNERDEAD \ + || GNULIB_defined_ENOTRECOVERABLE \ + || GNULIB_defined_EILSEQ +extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; +# else +# define strerror_override(ignored) NULL +# define GNULIB_defined_strerror_override_macro 1 +# endif + +#endif /* _GL_STRERROR_OVERRIDE_H */ diff --git a/jni/parted/libiconv/srclib/strerror.c b/jni/parted/libiconv/srclib/strerror.c new file mode 100755 index 0000000..67c5216 --- /dev/null +++ b/jni/parted/libiconv/srclib/strerror.c @@ -0,0 +1,71 @@ +/* strerror.c --- POSIX compatible system error routine + + Copyright (C) 2007-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include +#include + +#include "intprops.h" +#include "strerror-override.h" +#include "verify.h" + +/* Use the system functions, not the gnulib overrides in this file. */ +#undef sprintf + +char * +strerror (int n) +#undef strerror +{ + static char buf[STACKBUF_LEN]; + size_t len; + + /* Cast away const, due to the historical signature of strerror; + callers should not be modifying the string. */ + const char *msg = strerror_override (n); + if (msg) + return (char *) msg; + + msg = strerror (n); + + /* Our strerror_r implementation might use the system's strerror + buffer, so all other clients of strerror have to see the error + copied into a buffer that we manage. This is not thread-safe, + even if the system strerror is, but portable programs shouldn't + be using strerror if they care about thread-safety. */ + if (!msg || !*msg) + { + static char const fmt[] = "Unknown error %d"; + verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); + sprintf (buf, fmt, n); + errno = EINVAL; + return buf; + } + + /* Fix STACKBUF_LEN if this ever aborts. */ + len = strlen (msg); + if (sizeof buf <= len) + abort (); + + memcpy (buf, msg, len + 1); + return buf; +} diff --git a/jni/parted/libiconv/srclib/string.h b/jni/parted/libiconv/srclib/string.h new file mode 100755 index 0000000..fb48b8d --- /dev/null +++ b/jni/parted/libiconv/srclib/string.h @@ -0,0 +1,1803 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined _GL_ALREADY_INCLUDING_STRING_H +/* Special invocation convention: + - On OS X/NetBSD we have a sequence of nested includes + -> -> "string.h" + In this situation system _chk variants due to -D_FORTIFY_SOURCE + might be used after any replacements defined here. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STRING_H + +#define _GL_ALREADY_INCLUDING_STRING_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#undef _GL_ALREADY_INCLUDING_STRING_H + +#ifndef _GL_STRING_H +#define _GL_STRING_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include + +/* MirBSD defines mbslen as a macro. */ +#if 0 && defined __MirBSD__ +# include +#endif + +/* NetBSD 5.0 declares strsignal in , not in . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ + && ! defined __GLIBC__ +# include +#endif + +/* AIX 7.2 declares ffsl and ffsll in , not in . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if ((0 || 0 || defined GNULIB_POSIXCHECK) \ + && defined _AIX) \ + && ! defined __GLIBC__ +# include +#endif + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that + can be freed via 'free'; it can be used only after declaring 'free'. */ +/* Applies to: functions. Cannot be used on inline functions. */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though may not have + been included yet. */ +#if 1 +# if (1 && !defined free \ + && !(defined __cplusplus && defined GNULIB_NAMESPACE)) +/* We can't do '#define free rpl_free' here. */ +_GL_EXTERN_C void rpl_free (void *); +# undef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) +# else +# if defined _MSC_VER && !defined free +_GL_EXTERN_C +# if defined _DLL + __declspec (dllimport) +# endif + void __cdecl free (void *); +# else +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void free (void *) throw (); +# else +_GL_EXTERN_C void free (void *); +# endif +# endif +# endif +#else +# if defined _MSC_VER && !defined free +_GL_EXTERN_C +# if defined _DLL + __declspec (dllimport) +# endif + void __cdecl free (void *); +# else +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void free (void *) throw (); +# else +_GL_EXTERN_C void free (void *); +# endif +# endif +#endif + +/* Clear a block of memory. The compiler will not delete a call to + this function, even if the block is dead after the call. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (explicit_bzero, void, + (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); +_GL_CXXALIASWARN (explicit_bzero); +#elif defined GNULIB_POSIXCHECK +# undef explicit_bzero +# if HAVE_RAW_DECL_EXPLICIT_BZERO +_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " + "use gnulib module explicit_bzero for portability"); +# endif +#endif + +/* Find the index of the least-significant set bit. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (ffsl, int, (long int i)); +# endif +_GL_CXXALIAS_SYS (ffsl, int, (long int i)); +_GL_CXXALIASWARN (ffsl); +#elif defined GNULIB_POSIXCHECK +# undef ffsl +# if HAVE_RAW_DECL_FFSL +_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); +# endif +#endif + + +/* Find the index of the least-significant set bit. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define ffsll rpl_ffsll +# endif +_GL_FUNCDECL_RPL (ffsll, int, (long long int i)); +_GL_CXXALIAS_RPL (ffsll, int, (long long int i)); +# else +# if !1 +_GL_FUNCDECL_SYS (ffsll, int, (long long int i)); +# endif +_GL_CXXALIAS_SYS (ffsll, int, (long long int i)); +# endif +_GL_CXXALIASWARN (ffsll); +#elif defined GNULIB_POSIXCHECK +# undef ffsll +# if HAVE_RAW_DECL_FFSLL +_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); +# endif +#endif + + +#if 1 +/* On native Windows, map 'memccpy' to '_memccpy', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::memccpy always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef memccpy +# define memccpy _memccpy +# endif +_GL_CXXALIAS_MDA (memccpy, void *, + (void *dest, const void *src, int c, size_t n)); +# else +_GL_CXXALIAS_SYS (memccpy, void *, + (void *dest, const void *src, int c, size_t n)); +# endif +_GL_CXXALIASWARN (memccpy); +#endif + + +/* Return the first instance of C within N bytes of S, or NULL. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef memchr +# define memchr rpl_memchr +# endif +_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); +# else + /* On some systems, this function is defined as an overloaded function: + extern "C" { const void * std::memchr (const void *, int, size_t); } + extern "C++" { void * std::memchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memchr, + void *, (void const *__s, int __c, size_t __n), + void const *, (void const *__s, int __c, size_t __n)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n) throw ()); +_GL_CXXALIASWARN1 (memchr, void const *, + (void const *__s, int __c, size_t __n) throw ()); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (memchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memchr +/* Assume memchr is always declared. */ +_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " + "use gnulib module memchr for portability" ); +#endif + +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memmem rpl_memmem +# endif +_GL_FUNCDECL_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# endif +_GL_CXXALIASWARN (memmem); +#elif defined GNULIB_POSIXCHECK +# undef memmem +# if HAVE_RAW_DECL_MEMMEM +_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " + "use gnulib module memmem-simple for portability, " + "and module memmem for speed" ); +# endif +#endif + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +#if 1 +# if ! 1 +_GL_FUNCDECL_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n)); +_GL_CXXALIASWARN (mempcpy); +#elif defined GNULIB_POSIXCHECK +# undef mempcpy +# if HAVE_RAW_DECL_MEMPCPY +_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " + "use gnulib module mempcpy for portability"); +# endif +#endif + +/* Search backwards through a block for a byte (specified as an int). */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::memrchr (const void *, int, size_t); } + extern "C++" { void * std::memrchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memrchr, + void *, (void const *, int, size_t), + void const *, (void const *, int, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t) throw ()); +_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t) throw ()); +# else +_GL_CXXALIASWARN (memrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memrchr +# if HAVE_RAW_DECL_MEMRCHR +_GL_WARN_ON_USE (memrchr, "memrchr is unportable - " + "use gnulib module memrchr for portability"); +# endif +#endif + +/* Find the first occurrence of C in S. More efficient than + memchr(S,C,N), at the expense of undefined behavior if C does not + occur within N bytes. */ +#if 1 +# if ! 0 +_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::rawmemchr (const void *, int); } + extern "C++" { void * std::rawmemchr (void *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (rawmemchr, + void *, (void const *__s, int __c_in), + void const *, (void const *__s, int __c_in)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in) throw ()); +_GL_CXXALIASWARN1 (rawmemchr, void const *, + (void const *__s, int __c_in) throw ()); +# else +_GL_CXXALIASWARN (rawmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rawmemchr +# if HAVE_RAW_DECL_RAWMEMCHR +_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " + "use gnulib module rawmemchr for portability"); +# endif +#endif + +/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src)); +_GL_CXXALIASWARN (stpcpy); +#elif defined GNULIB_POSIXCHECK +# undef stpcpy +# if HAVE_RAW_DECL_STPCPY +_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " + "use gnulib module stpcpy for portability"); +# endif +#endif + +/* Copy no more than N bytes of SRC to DST, returning a pointer past the + last non-NUL byte written into DST. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef stpncpy +# define stpncpy rpl_stpncpy +# endif +_GL_FUNCDECL_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# endif +_GL_CXXALIASWARN (stpncpy); +#elif defined GNULIB_POSIXCHECK +# undef stpncpy +# if HAVE_RAW_DECL_STPNCPY +_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " + "use gnulib module stpncpy for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strchr +/* Assume strchr is always declared. */ +_GL_WARN_ON_USE_CXX (strchr, + const char *, char *, (const char *, int), + "strchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbschr if you care about internationalization"); +#endif + +/* Find the first occurrence of C in S or the final NUL byte. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strchrnul rpl_strchrnul +# endif +_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strchrnul, char *, + (const char *str, int ch)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * std::strchrnul (const char *, int); } + extern "C++" { char * std::strchrnul (char *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (strchrnul, + char *, (char const *__s, int __c_in), + char const *, (char const *__s, int __c_in)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in) throw ()); +_GL_CXXALIASWARN1 (strchrnul, char const *, + (char const *__s, int __c_in) throw ()); +# else +_GL_CXXALIASWARN (strchrnul); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strchrnul +# if HAVE_RAW_DECL_STRCHRNUL +_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " + "use gnulib module strchrnul for portability"); +# endif +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup rpl_strdup +# endif +_GL_FUNCDECL_RPL (strdup, char *, + (char const *__s) + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup _strdup +# endif +_GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); +# else +# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup + /* strdup exists as a function and as a macro. Get rid of the macro. */ +# undef strdup +# endif +# if (!1 || __GNUC__ >= 11) && !defined strdup +_GL_FUNCDECL_SYS (strdup, char *, + (char const *__s) + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); +# endif +_GL_CXXALIASWARN (strdup); +#else +# if __GNUC__ >= 11 && !defined strdup +/* For -Wmismatched-dealloc: Associate strdup with free or rpl_free. */ +_GL_FUNCDECL_SYS (strdup, char *, + (char const *__s) + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +# undef strdup +# if HAVE_RAW_DECL_STRDUP +_GL_WARN_ON_USE (strdup, "strdup is unportable - " + "use gnulib module strdup for portability"); +# endif +# elif 1 +/* On native Windows, map 'creat' to '_creat', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::strdup always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup _strdup +# endif +_GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); +# else +# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup +# undef strdup +# endif +_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); +# endif +_GL_CXXALIASWARN (strdup); +# endif +#endif + +/* Append no more than N characters from SRC onto DEST. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strncat +# define strncat rpl_strncat +# endif +_GL_FUNCDECL_RPL (strncat, char *, + (char *restrict dest, const char *restrict src, size_t n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strncat, char *, + (char *restrict dest, const char *restrict src, size_t n)); +# else +_GL_CXXALIAS_SYS (strncat, char *, + (char *restrict dest, const char *restrict src, size_t n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strncat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strncat +# if HAVE_RAW_DECL_STRNCAT +_GL_WARN_ON_USE (strncat, "strncat is unportable - " + "use gnulib module strncat for portability"); +# endif +#endif + +/* Return a newly allocated copy of at most N bytes of STRING. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strndup +# define strndup rpl_strndup +# endif +_GL_FUNCDECL_RPL (strndup, char *, + (char const *__s, size_t __n) + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); +# else +# if !1 || (__GNUC__ >= 11 && !defined strndup) +_GL_FUNCDECL_SYS (strndup, char *, + (char const *__s, size_t __n) + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); +# endif +_GL_CXXALIASWARN (strndup); +#else +# if __GNUC__ >= 11 && !defined strndup +/* For -Wmismatched-dealloc: Associate strndup with free or rpl_free. */ +_GL_FUNCDECL_SYS (strndup, char *, + (char const *__s, size_t __n) + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +# undef strndup +# if HAVE_RAW_DECL_STRNDUP +_GL_WARN_ON_USE (strndup, "strndup is unportable - " + "use gnulib module strndup for portability"); +# endif +# endif +#endif + +/* Find the length (number of bytes) of STRING, but scan at most + MAXLEN bytes. If no '\0' terminator is found in that many bytes, + return MAXLEN. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strnlen +# define strnlen rpl_strnlen +# endif +_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); +# endif +_GL_CXXALIASWARN (strnlen); +#elif defined GNULIB_POSIXCHECK +# undef strnlen +# if HAVE_RAW_DECL_STRNLEN +_GL_WARN_ON_USE (strnlen, "strnlen is unportable - " + "use gnulib module strnlen for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strcspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strcspn +/* Assume strcspn is always declared. */ +_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbscspn if you care about internationalization"); +#endif + +/* Find the first occurrence in S of any character in ACCEPT. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const char * strpbrk (const char *, const char *); } + extern "C++" { char * strpbrk (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strpbrk, + char *, (char const *__s, char const *__accept), + const char *, (char const *__s, char const *__accept)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept) throw ()); +_GL_CXXALIASWARN1 (strpbrk, char const *, + (char const *__s, char const *__accept) throw ()); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (strpbrk); +# endif +# if defined GNULIB_POSIXCHECK +/* strpbrk() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strpbrk +_GL_WARN_ON_USE_CXX (strpbrk, + const char *, char *, (const char *, const char *), + "strpbrk cannot work correctly on character strings " + "in multibyte locales - " + "use mbspbrk if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strpbrk +# if HAVE_RAW_DECL_STRPBRK +_GL_WARN_ON_USE_CXX (strpbrk, + const char *, char *, (const char *, const char *), + "strpbrk is unportable - " + "use gnulib module strpbrk for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it cannot work with multibyte strings. */ +# undef strspn +/* Assume strspn is always declared. */ +_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbsspn if you care about internationalization"); +#endif + +#if defined GNULIB_POSIXCHECK +/* strrchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strrchr +/* Assume strrchr is always declared. */ +_GL_WARN_ON_USE_CXX (strrchr, + const char *, char *, (const char *, int), + "strrchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbsrchr if you care about internationalization"); +#endif + +/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP + to point to the next char after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of strtok() that is multithread-safe and supports + empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strtok_r(). */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim)); +_GL_CXXALIASWARN (strsep); +# if defined GNULIB_POSIXCHECK +# undef strsep +_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " + "in multibyte locales - " + "use mbssep if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsep +# if HAVE_RAW_DECL_STRSEP +_GL_WARN_ON_USE (strsep, "strsep is unportable - " + "use gnulib module strsep for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strstr rpl_strstr +# endif +_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); +# else + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strstr (const char *, const char *); } + extern "C++" { char * strstr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strstr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (strstr, char *, + (char *haystack, const char *needle) throw ()); +_GL_CXXALIASWARN1 (strstr, const char *, + (const char *haystack, const char *needle) throw ()); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (strstr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strstr() does not work with multibyte strings if the locale encoding is + different from UTF-8: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strstr +/* Assume strstr is always declared. */ +_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " + "work correctly on character strings in most " + "multibyte locales - " + "use mbsstr if you care about internationalization, " + "or use strstr if you care about speed"); +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strcasestr rpl_strcasestr +# endif +_GL_FUNCDECL_RPL (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strcasestr, char *, + (const char *haystack, const char *needle)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strcasestr (const char *, const char *); } + extern "C++" { char * strcasestr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strcasestr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ + || defined __clang__) +_GL_CXXALIASWARN1 (strcasestr, char *, + (char *haystack, const char *needle) throw ()); +_GL_CXXALIASWARN1 (strcasestr, const char *, + (const char *haystack, const char *needle) throw ()); +# else +_GL_CXXALIASWARN (strcasestr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strcasestr() does not work with multibyte strings: + It is a glibc extension, and glibc implements it only for unibyte + locales. */ +# undef strcasestr +# if HAVE_RAW_DECL_STRCASESTR +_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " + "strings in multibyte locales - " + "use mbscasestr if you care about " + "internationalization, or use c-strcasestr if you want " + "a locale independent function"); +# endif +#endif + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = strtok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + This is a variant of strtok() that is multithread-safe. + + For the POSIX documentation for this function, see: + https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strsep(). */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtok_r +# define strtok_r rpl_strtok_r +# endif +_GL_FUNCDECL_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# else +# if 0 || defined GNULIB_POSIXCHECK +# undef strtok_r +# endif +# if ! 1 +_GL_FUNCDECL_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# endif +_GL_CXXALIASWARN (strtok_r); +# if defined GNULIB_POSIXCHECK +_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " + "strings in multibyte locales - " + "use mbstok_r if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtok_r +# if HAVE_RAW_DECL_STRTOK_R +_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " + "use gnulib module strtok_r for portability"); +# endif +#endif + + +/* The following functions are not specified by POSIX. They are gnulib + extensions. */ + +#if 0 +/* Return the number of multibyte characters in the character string STRING. + This considers multibyte characters, unlike strlen, which counts bytes. */ +# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ +# undef mbslen +# endif +# if 0 /* AIX, OSF/1, MirBSD define mbslen already in libc. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbslen rpl_mbslen +# endif +_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); +# else +_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); +# endif +_GL_CXXALIASWARN (mbslen); +#endif + +#if 0 +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1)); +#endif + +#if 0 +/* Locate the first single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbschr); +#endif + +#if 0 +/* Locate the last single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strrchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux || defined __INTERIX +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbsrchr rpl_mbsrchr /* avoid collision with system function */ +# endif +_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbsrchr); +#endif + +#if 0 +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. + Unlike strstr(), this function works correctly in multibyte locales with + encodings different from UTF-8. */ +_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Compare the character strings S1 and S2, ignoring case, returning less than, + equal to or greater than zero if S1 is lexicographically less than, equal to + or greater than S2. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! + Unlike strcasecmp(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Compare the initial segment of the character string S1 consisting of at most + N characters with the initial segment of the character string S2 consisting + of at most N characters, ignoring case, returning less than, equal to or + greater than zero if the initial segment of S1 is lexicographically less + than, equal to or greater than the initial segment of S2. + Note: This function may, in multibyte locales, return 0 for initial segments + of different lengths! + Unlike strncasecmp(), this function works correctly in multibyte locales. + But beware that N is not a byte count but a character count! */ +_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Compare the initial segment of the character string STRING consisting of + at most mbslen (PREFIX) characters with the character string PREFIX, + ignoring case. If the two match, return a pointer to the first byte + after this prefix in STRING. Otherwise, return NULL. + Note: This function may, in multibyte locales, return non-NULL if STRING + is of smaller length than PREFIX! + Unlike strncasecmp(), this function works correctly in multibyte + locales. */ +_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK, using case-insensitive comparison. + Note: This function may, in multibyte locales, return success even if + strlen (haystack) < strlen (needle) ! + Unlike strcasestr(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strcspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the pointer to it, or NULL if none + exists. + Unlike strpbrk(), this function works correctly in multibyte locales. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); +# else +_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); +# endif +_GL_CXXALIASWARN (mbspbrk); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + not in the character string REJECT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +_GL_EXTERN_C char * mbssep (char **stringp, const char *delim) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Parse the character string STRING into tokens separated by characters in + the character string DELIM. + If STRING is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = mbstok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ +_GL_EXTERN_C char * mbstok_r (char *restrict string, const char *delim, + char **save_ptr) + _GL_ARG_NONNULL ((2, 3)); +#endif + +/* Map any int, typically from errno, into an error message. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror +# define strerror rpl_strerror +# endif +_GL_FUNCDECL_RPL (strerror, char *, (int)); +_GL_CXXALIAS_RPL (strerror, char *, (int)); +# else +_GL_CXXALIAS_SYS (strerror, char *, (int)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strerror); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror +/* Assume strerror is always declared. */ +_GL_WARN_ON_USE (strerror, "strerror is unportable - " + "use gnulib module strerror to guarantee non-NULL result"); +#endif + +/* Map any int, typically from errno, into an error message. Multithread-safe. + Uses the POSIX declaration, not the glibc declaration. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror_r +# define strerror_r rpl_strerror_r +# endif +_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# else +# if !1 +_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# endif +# if 1 +_GL_CXXALIASWARN (strerror_r); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror_r +# if HAVE_RAW_DECL_STRERROR_R +_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " + "use gnulib module strerror_r-posix for portability"); +# endif +#endif + +/* Return the name of the system error code ERRNUM. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerrorname_np +# define strerrorname_np rpl_strerrorname_np +# endif +_GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum)); +_GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum)); +# else +# if !1 +_GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum)); +# endif +_GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum)); +# endif +_GL_CXXALIASWARN (strerrorname_np); +#elif defined GNULIB_POSIXCHECK +# undef strerrorname_np +# if HAVE_RAW_DECL_STRERRORNAME_NP +_GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - " + "use gnulib module strerrorname_np for portability"); +# endif +#endif + +/* Return an abbreviation string for the signal number SIG. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (sigabbrev_np, const char *, (int sig)); +# endif +_GL_CXXALIAS_SYS (sigabbrev_np, const char *, (int sig)); +_GL_CXXALIASWARN (sigabbrev_np); +#elif defined GNULIB_POSIXCHECK +# undef sigabbrev_np +# if HAVE_RAW_DECL_SIGABBREV_NP +_GL_WARN_ON_USE (sigabbrev_np, "sigabbrev_np is unportable - " + "use gnulib module sigabbrev_np for portability"); +# endif +#endif + +/* Return an English description string for the signal number SIG. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (sigdescr_np, const char *, (int sig)); +# endif +_GL_CXXALIAS_SYS (sigdescr_np, const char *, (int sig)); +_GL_CXXALIASWARN (sigdescr_np); +#elif defined GNULIB_POSIXCHECK +# undef sigdescr_np +# if HAVE_RAW_DECL_SIGDESCR_NP +_GL_WARN_ON_USE (sigdescr_np, "sigdescr_np is unportable - " + "use gnulib module sigdescr_np for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strsignal rpl_strsignal +# endif +_GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); +_GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is + 'const char *'. */ +_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); +# endif +_GL_CXXALIASWARN (strsignal); +#elif defined GNULIB_POSIXCHECK +# undef strsignal +# if HAVE_RAW_DECL_STRSIGNAL +_GL_WARN_ON_USE (strsignal, "strsignal is unportable - " + "use gnulib module strsignal for portability"); +# endif +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); +_GL_CXXALIASWARN (strverscmp); +#elif defined GNULIB_POSIXCHECK +# undef strverscmp +# if HAVE_RAW_DECL_STRVERSCMP +_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " + "use gnulib module strverscmp for portability"); +# endif +#endif + + +#endif /* _GL_STRING_H */ +#endif /* _GL_STRING_H */ +#endif diff --git a/jni/parted/libiconv/srclib/sys-limits.h b/jni/parted/libiconv/srclib/sys-limits.h new file mode 100755 index 0000000..d154f0b --- /dev/null +++ b/jni/parted/libiconv/srclib/sys-limits.h @@ -0,0 +1,42 @@ +/* System call limits + + Copyright 2018-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_SYS_LIMITS_H +#define _GL_SYS_LIMITS_H + +#include + +/* Maximum number of bytes to read or write in a single system call. + This can be useful for system calls like sendfile on GNU/Linux, + which do not handle more than MAX_RW_COUNT bytes correctly. + The Linux kernel MAX_RW_COUNT is at least INT_MAX >> 20 << 20, + where the 20 comes from the Hexagon port with 1 MiB pages; use that + as an approximation, as the exact value may not be available to us. + + Using this also works around a serious Linux bug before 2.6.16; see + . + + Using this also works around a Tru64 5.1 bug, where attempting + to read INT_MAX bytes fails with errno == EINVAL. See + . + + Using this is likely to work around similar bugs in other operating + systems. */ + +enum { SYS_BUFSIZE_MAX = INT_MAX >> 20 << 20 }; + +#endif diff --git a/jni/parted/libiconv/srclib/sys/stat.h b/jni/parted/libiconv/srclib/sys/stat.h new file mode 100755 index 0000000..aa566a5 --- /dev/null +++ b/jni/parted/libiconv/srclib/sys/stat.h @@ -0,0 +1,1435 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/stat.h header file. + Copyright (C) 2005-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ + +/* This file is supposed to be used on platforms where is + incomplete. It is intended to provide definitions and prototypes + needed by an application. Start with what the system provides. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_system_sys_stat_h +/* Special invocation convention. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SYS_STAT_H + +/* Get nlink_t. + May also define off_t to a 64-bit type on native Windows. */ +#include + +/* Get struct timespec. */ +#include + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_SYS_STAT_H +#define _GL_SYS_STAT_H + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Before doing "#define mknod rpl_mknod" below, we need to include all + headers that may declare mknod(). OS/2 kLIBC declares mknod() in + , not in . */ +#ifdef __KLIBC__ +# include +#endif + +/* Before doing "#define mkdir rpl_mkdir" below, we need to include all + headers that may declare mkdir(). Native Windows platforms declare mkdir + in and/or , not in . */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include /* mingw32, mingw64 */ +# include /* mingw64, MSVC 9 */ +#endif + +/* Native Windows platforms declare umask() in . */ +#if 0 && (defined _WIN32 && ! defined __CYGWIN__) +# include +#endif + +/* Large File Support on native Windows. */ +#if 0 +# define stat _stati64 +#endif + +/* Optionally, override 'struct stat' on native Windows. */ +#if 0 + +# undef stat +# if 1 +# define stat rpl_stat +# else + /* Provoke a clear link error if stat() is used as a function and + module 'stat' is not in use. */ +# define stat stat_used_without_requesting_gnulib_module_stat +# endif + +# if !GNULIB_defined_struct_stat +struct stat +{ + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; +# if 0 + uid_t st_uid; +# else /* uid_t is not defined by default on native Windows. */ + short st_uid; +# endif +# if 0 + gid_t st_gid; +# else /* gid_t is not defined by default on native Windows. */ + short st_gid; +# endif + dev_t st_rdev; + off_t st_size; +# if 0 + blksize_t st_blksize; + blkcnt_t st_blocks; +# endif + +# if 0 + struct timespec st_atim; + struct timespec st_mtim; + struct timespec st_ctim; +# else + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +# endif +}; +# if 0 +# define st_atime st_atim.tv_sec +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec + /* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_TIMESPEC 1 +# endif +# define GNULIB_defined_struct_stat 1 +# endif + +/* Other possible values of st_mode. */ +# if 0 +# define _S_IFBLK 0x6000 +# endif +# if 0 +# define _S_IFLNK 0xA000 +# endif +# if 0 +# define _S_IFSOCK 0xC000 +# endif + +#endif + +#ifndef S_IFIFO +# ifdef _S_IFIFO +# define S_IFIFO _S_IFIFO +# endif +#endif + +#ifndef S_IFMT +# define S_IFMT 0170000 +#endif + +#if STAT_MACROS_BROKEN +# undef S_ISBLK +# undef S_ISCHR +# undef S_ISDIR +# undef S_ISFIFO +# undef S_ISLNK +# undef S_ISNAM +# undef S_ISMPB +# undef S_ISMPC +# undef S_ISNWK +# undef S_ISREG +# undef S_ISSOCK +#endif + +#ifndef S_ISBLK +# ifdef S_IFBLK +# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +# else +# define S_ISBLK(m) 0 +# endif +#endif + +#ifndef S_ISCHR +# ifdef S_IFCHR +# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +# else +# define S_ISCHR(m) 0 +# endif +#endif + +#ifndef S_ISDIR +# ifdef S_IFDIR +# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +# else +# define S_ISDIR(m) 0 +# endif +#endif + +#ifndef S_ISDOOR /* Solaris 2.5 and up */ +# define S_ISDOOR(m) 0 +#endif + +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(m) 0 +# endif +#endif + +#ifndef S_ISLNK +# ifdef S_IFLNK +# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +# else +# define S_ISLNK(m) 0 +# endif +#endif + +#ifndef S_ISMPB /* V7 */ +# ifdef S_IFMPB +# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) +# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) +# else +# define S_ISMPB(m) 0 +# define S_ISMPC(m) 0 +# endif +#endif + +#ifndef S_ISMPX /* AIX */ +# define S_ISMPX(m) 0 +#endif + +#ifndef S_ISNAM /* Xenix */ +# ifdef S_IFNAM +# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) +# else +# define S_ISNAM(m) 0 +# endif +#endif + +#ifndef S_ISNWK /* HP/UX */ +# ifdef S_IFNWK +# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) +# else +# define S_ISNWK(m) 0 +# endif +#endif + +#ifndef S_ISPORT /* Solaris 10 and up */ +# define S_ISPORT(m) 0 +#endif + +#ifndef S_ISREG +# ifdef S_IFREG +# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +# else +# define S_ISREG(m) 0 +# endif +#endif + +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(m) 0 +# endif +#endif + + +#ifndef S_TYPEISMQ +# define S_TYPEISMQ(p) 0 +#endif + +#ifndef S_TYPEISTMO +# define S_TYPEISTMO(p) 0 +#endif + + +#ifndef S_TYPEISSEM +# ifdef S_INSEM +# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) +# else +# define S_TYPEISSEM(p) 0 +# endif +#endif + +#ifndef S_TYPEISSHM +# ifdef S_INSHD +# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) +# else +# define S_TYPEISSHM(p) 0 +# endif +#endif + +/* high performance ("contiguous data") */ +#ifndef S_ISCTG +# define S_ISCTG(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with data */ +#ifndef S_ISOFD +# define S_ISOFD(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with no data */ +#ifndef S_ISOFL +# define S_ISOFL(p) 0 +#endif + +/* 4.4BSD whiteout */ +#ifndef S_ISWHT +# define S_ISWHT(m) 0 +#endif + +/* If any of the following are undefined, + define them to their de facto standard values. */ +#if !S_ISUID +# define S_ISUID 04000 +#endif +#if !S_ISGID +# define S_ISGID 02000 +#endif + +/* S_ISVTX is a common extension to POSIX. */ +#ifndef S_ISVTX +# define S_ISVTX 01000 +#endif + +#if !S_IRUSR && S_IREAD +# define S_IRUSR S_IREAD +#endif +#if !S_IRUSR +# define S_IRUSR 00400 +#endif +#if !S_IRGRP +# define S_IRGRP (S_IRUSR >> 3) +#endif +#if !S_IROTH +# define S_IROTH (S_IRUSR >> 6) +#endif + +#if !S_IWUSR && S_IWRITE +# define S_IWUSR S_IWRITE +#endif +#if !S_IWUSR +# define S_IWUSR 00200 +#endif +#if !S_IWGRP +# define S_IWGRP (S_IWUSR >> 3) +#endif +#if !S_IWOTH +# define S_IWOTH (S_IWUSR >> 6) +#endif + +#if !S_IXUSR && S_IEXEC +# define S_IXUSR S_IEXEC +#endif +#if !S_IXUSR +# define S_IXUSR 00100 +#endif +#if !S_IXGRP +# define S_IXGRP (S_IXUSR >> 3) +#endif +#if !S_IXOTH +# define S_IXOTH (S_IXUSR >> 6) +#endif + +#if !S_IRWXU +# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) +#endif +#if !S_IRWXG +# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) +#endif +#if !S_IRWXO +# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) +#endif + +/* Although S_IXUGO and S_IRWXUGO are not specified by POSIX and are + not implemented in GNU/Linux, some Gnulib-using apps use the macros. */ +#if !S_IXUGO +# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) +#endif +#ifndef S_IRWXUGO +# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) +#endif + +/* Macros for futimens and utimensat. */ +#ifndef UTIME_NOW +# define UTIME_NOW (-1) +# define UTIME_OMIT (-2) +#endif + + +#if 1 +/* On native Windows, map 'chmod' to '_chmod', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::chmod always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chmod +# define chmod _chmod +# endif +/* Need to cast, because in mingw the last argument is 'int mode'. */ +_GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode)); +# else +_GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode)); +# endif +_GL_CXXALIASWARN (chmod); +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchmodat +# define fchmodat rpl_fchmodat +# endif +_GL_FUNCDECL_RPL (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag)); +# endif +_GL_CXXALIASWARN (fchmodat); +#elif defined GNULIB_POSIXCHECK +# undef fchmodat +# if HAVE_RAW_DECL_FCHMODAT +_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fstat +# define fstat rpl_fstat +# endif +_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); +# else +_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (fstat); +# endif +#elif 0 +# undef fstat +# define fstat fstat_used_without_requesting_gnulib_module_fstat +#elif 0 +/* Above, we define stat to _stati64. */ +# define fstat _fstati64 +#elif defined GNULIB_POSIXCHECK +# undef fstat +# if HAVE_RAW_DECL_FSTAT +_GL_WARN_ON_USE (fstat, "fstat has portability problems - " + "use gnulib module fstat for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fstatat +# define fstatat rpl_fstatat +# endif +_GL_FUNCDECL_RPL (fstatat, int, + (int fd, char const *restrict name, struct stat *restrict st, + int flags) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (fstatat, int, + (int fd, char const *restrict name, struct stat *restrict st, + int flags)); +# else +# if !1 +_GL_FUNCDECL_SYS (fstatat, int, + (int fd, char const *restrict name, struct stat *restrict st, + int flags) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (fstatat, int, + (int fd, char const *restrict name, struct stat *restrict st, + int flags)); +# endif +_GL_CXXALIASWARN (fstatat); +#elif 0 +# undef fstatat +# define fstatat fstatat_used_without_requesting_gnulib_module_fstatat +#elif defined GNULIB_POSIXCHECK +# undef fstatat +# if HAVE_RAW_DECL_FSTATAT +_GL_WARN_ON_USE (fstatat, "fstatat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 0 +/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens + implementation relies on futimesat, which on Solaris 10 makes an invocation + to futimens that is meant to invoke the libc's futimens(), not gnulib's + futimens(). */ +# if 0 || (!1 && defined __sun) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef futimens +# define futimens rpl_futimens +# endif +_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); +_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); +# else +# if !1 +_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); +# endif +_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); +# endif +# if 1 +_GL_CXXALIASWARN (futimens); +# endif +#elif defined GNULIB_POSIXCHECK +# undef futimens +# if HAVE_RAW_DECL_FUTIMENS +_GL_WARN_ON_USE (futimens, "futimens is not portable - " + "use gnulib module futimens for portability"); +# endif +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (getumask, mode_t, (void)); +# endif +_GL_CXXALIAS_SYS (getumask, mode_t, (void)); +# if 1 +_GL_CXXALIASWARN (getumask); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getumask +# if HAVE_RAW_DECL_GETUMASK +_GL_WARN_ON_USE (getumask, "getumask is not portable - " + "use gnulib module getumask for portability"); +# endif +#endif + + +#if 0 +/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME + denotes a symbolic link. */ +# if !1 || defined __hpux +_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); +_GL_CXXALIASWARN (lchmod); +#elif defined GNULIB_POSIXCHECK +# undef lchmod +# if HAVE_RAW_DECL_LCHMOD +_GL_WARN_ON_USE (lchmod, "lchmod is unportable - " + "use gnulib module lchmod for portability"); +# endif +#endif + + +#if 0 +# if ! 1 +/* mingw does not support symlinks, therefore it does not have lstat. But + without links, stat does just fine. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lstat stat +# endif +_GL_CXXALIAS_RPL_1 (lstat, stat, int, + (const char *restrict name, struct stat *restrict buf)); +# elif 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lstat +# define lstat rpl_lstat +# endif +_GL_FUNCDECL_RPL (lstat, int, + (const char *restrict name, struct stat *restrict buf) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (lstat, int, + (const char *restrict name, struct stat *restrict buf)); +# else +_GL_CXXALIAS_SYS (lstat, int, + (const char *restrict name, struct stat *restrict buf)); +# endif +# if 1 +_GL_CXXALIASWARN (lstat); +# endif +#elif 0 +# undef lstat +# define lstat lstat_used_without_requesting_gnulib_module_lstat +#elif defined GNULIB_POSIXCHECK +# undef lstat +# if HAVE_RAW_DECL_LSTAT +_GL_WARN_ON_USE (lstat, "lstat is unportable - " + "use gnulib module lstat for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkdir +# define mkdir rpl_mkdir +# endif +_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +# elif defined _WIN32 && !defined __CYGWIN__ +/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. + Additionally, it declares _mkdir (and depending on compile flags, an + alias mkdir), only in the nonstandard includes and , + which are included above. */ +# if !GNULIB_defined_rpl_mkdir +static int +rpl_mkdir (char const *name, mode_t mode) +{ + return _mkdir (name); +} +# define GNULIB_defined_rpl_mkdir 1 +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkdir +# define mkdir rpl_mkdir +# endif +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +# else +_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); +# endif +_GL_CXXALIASWARN (mkdir); +#elif defined GNULIB_POSIXCHECK +# undef mkdir +# if HAVE_RAW_DECL_MKDIR +_GL_WARN_ON_USE (mkdir, "mkdir does not always support two parameters - " + "use gnulib module mkdir for portability"); +# endif +#elif 1 +/* On native Windows, map 'mkdir' to '_mkdir', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::mkdir always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !GNULIB_defined_rpl_mkdir +static int +rpl_mkdir (char const *name, mode_t mode) +{ + return _mkdir (name); +} +# define GNULIB_defined_rpl_mkdir 1 +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkdir +# define mkdir rpl_mkdir +# endif +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +# else +_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); +# endif +_GL_CXXALIASWARN (mkdir); +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); +_GL_CXXALIASWARN (mkdirat); +#elif defined GNULIB_POSIXCHECK +# undef mkdirat +# if HAVE_RAW_DECL_MKDIRAT +_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkfifo +# define mkfifo rpl_mkfifo +# endif +_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); +# else +# if !1 +_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); +# endif +_GL_CXXALIASWARN (mkfifo); +#elif defined GNULIB_POSIXCHECK +# undef mkfifo +# if HAVE_RAW_DECL_MKFIFO +_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " + "use gnulib module mkfifo for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkfifoat +# define mkfifoat rpl_mkfifoat +# endif +_GL_FUNCDECL_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode)); +# else +# if !1 +_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); +# endif +_GL_CXXALIASWARN (mkfifoat); +#elif defined GNULIB_POSIXCHECK +# undef mkfifoat +# if HAVE_RAW_DECL_MKFIFOAT +_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " + "use gnulib module mkfifoat for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mknod +# define mknod rpl_mknod +# endif +_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); +# else +# if !1 +_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ +_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); +# endif +_GL_CXXALIASWARN (mknod); +#elif defined GNULIB_POSIXCHECK +# undef mknod +# if HAVE_RAW_DECL_MKNOD +_GL_WARN_ON_USE (mknod, "mknod is not portable - " + "use gnulib module mknod for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mknodat +# define mknodat rpl_mknodat +# endif +_GL_FUNCDECL_RPL (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev)); +# else +# if !1 +_GL_FUNCDECL_SYS (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev)); +# endif +_GL_CXXALIASWARN (mknodat); +#elif defined GNULIB_POSIXCHECK +# undef mknodat +# if HAVE_RAW_DECL_MKNODAT +_GL_WARN_ON_USE (mknodat, "mknodat is not portable - " + "use gnulib module mkfifoat for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !0 + /* We can't use the object-like #define stat rpl_stat, because of + struct stat. This means that rpl_stat will not be used if the user + does (stat)(a,b). Oh well. */ +# if defined _AIX && defined stat && defined _LARGE_FILES + /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, + so we have to replace stat64() instead of stat(). */ +# undef stat64 +# define stat64(name, st) rpl_stat (name, st) +# elif 0 + /* Above, we define stat to _stati64. */ +# if defined __MINGW32__ && defined _stati64 +# ifndef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined _stati64 +# ifdef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# else +# undef _stati64 +# define _stati64(name, st) rpl_stat (name, st) +# endif +# elif defined __MINGW32__ && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32. */ +# undef _stat32 +# define _stat32(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64i32. */ +# undef _stat64i32 +# define _stat64i32(name, st) rpl_stat (name, st) +# endif +# else /* !(_AIX || __MINGW32__ || _MSC_VER) */ +# undef stat +# define stat(name, st) rpl_stat (name, st) +# endif /* !_LARGE_FILES */ +# endif /* !0 */ +_GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf) + _GL_ARG_NONNULL ((1, 2)); +# endif +#elif 0 +/* see above: + #define stat stat_used_without_requesting_gnulib_module_stat + */ +#elif defined GNULIB_POSIXCHECK +# undef stat +# if HAVE_RAW_DECL_STAT +_GL_WARN_ON_USE (stat, "stat is unportable - " + "use gnulib module stat for portability"); +# endif +#endif + + +#if 1 +/* On native Windows, map 'umask' to '_umask', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::umask always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef umask +# define umask _umask +# endif +/* Need to cast, because in mingw the last argument is 'int mode'. */ +_GL_CXXALIAS_MDA_CAST (umask, mode_t, (mode_t mask)); +# else +_GL_CXXALIAS_SYS (umask, mode_t, (mode_t mask)); +# endif +_GL_CXXALIASWARN (umask); +#endif + + +#if 0 +/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat + implementation relies on futimesat, which on Solaris 10 makes an invocation + to utimensat that is meant to invoke the libc's utimensat(), not gnulib's + utimensat(). */ +# if 0 || (!1 && defined __sun) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef utimensat +# define utimensat rpl_utimensat +# endif +_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag)); +# endif +# if 1 +_GL_CXXALIASWARN (utimensat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef utimensat +# if HAVE_RAW_DECL_UTIMENSAT +_GL_WARN_ON_USE (utimensat, "utimensat is not portable - " + "use gnulib module utimensat for portability"); +# endif +#endif + + +#endif /* _GL_SYS_STAT_H */ +#endif /* _GL_SYS_STAT_H */ +#endif diff --git a/jni/parted/libiconv/srclib/sys/types.h b/jni/parted/libiconv/srclib/sys/types.h new file mode 100755 index 0000000..d720b9d --- /dev/null +++ b/jni/parted/libiconv/srclib/sys/types.h @@ -0,0 +1,107 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/types.h. + + Copyright (C) 2011-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined _WIN32 && !defined __CYGWIN__ \ + && (defined __need_off_t || defined __need___off64_t \ + || defined __need_ssize_t || defined __need_time_t) + +/* Special invocation convention inside mingw header files. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SYS_TYPES_H + +/* The include_next requires a split double-inclusion guard. */ +# define _GL_INCLUDING_SYS_TYPES_H +#include_next +# undef _GL_INCLUDING_SYS_TYPES_H + +#ifndef _GL_SYS_TYPES_H +#define _GL_SYS_TYPES_H + +/* Override off_t if Large File Support is requested on native Windows. */ +#if 0 +/* Same as int64_t in . */ +# if defined _MSC_VER +# define off_t __int64 +# else +# define off_t long long int +# endif +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_64_BIT_OFF_T 1 +#endif + +/* Override dev_t and ino_t if distinguishable inodes support is requested + on native Windows. */ +#if 0 + +# if 0 == 2 +/* Experimental, not useful in Windows 10. */ + +/* Define dev_t to a 64-bit type. */ +# if !defined GNULIB_defined_dev_t +typedef unsigned long long int rpl_dev_t; +# undef dev_t +# define dev_t rpl_dev_t +# define GNULIB_defined_dev_t 1 +# endif + +/* Define ino_t to a 128-bit type. */ +# if !defined GNULIB_defined_ino_t +/* MSVC does not have a 128-bit integer type. + GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ +typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# else /* 0 == 1 */ + +/* Define ino_t to a 64-bit type. */ +# if !defined GNULIB_defined_ino_t +typedef unsigned long long int rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# endif + +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_INODES 0 + +#endif + +/* MSVC 9 defines size_t in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ +# include +#endif + +#endif /* _GL_SYS_TYPES_H */ +#endif /* _GL_SYS_TYPES_H */ +#endif /* __need_XXX */ diff --git a/jni/parted/libiconv/srclib/time.h b/jni/parted/libiconv/srclib/time.h new file mode 100755 index 0000000..0aaffb5 --- /dev/null +++ b/jni/parted/libiconv/srclib/time.h @@ -0,0 +1,959 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A more-standard . + + Copyright (C) 2007-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* Don't get in the way of glibc when it includes time.h merely to + declare a few standard symbols, rather than to declare all the + symbols. (However, skip this for MinGW as it treats __need_time_t + incompatibly.) Also, Solaris 8 eventually includes itself + recursively; if that is happening, just include the system + without adding our own declarations. */ +#if (((defined __need_time_t || defined __need_clock_t \ + || defined __need_timespec) \ + && !defined __MINGW32__) \ + || defined _GL_TIME_H) + +# include_next + +#else + +# define _GL_TIME_H + +/* mingw's provides the functions asctime_r, ctime_r, gmtime_r, + localtime_r only if or has been included before. */ +# if defined __MINGW32__ +# include +# endif + +# include_next + +/* NetBSD 5.0 mis-defines NULL. */ +# include + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Some systems don't define struct timespec (e.g., AIX 4.1). + Or they define it with the wrong member names or define it in + (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, + but the pthreads-win32 library defines it in . */ +# if ! 1 +# if 0 +# include +# elif 0 +# include +# elif 0 +# include +# else + +# ifdef __cplusplus +extern "C" { +# endif + +# if !GNULIB_defined_struct_timespec +# undef timespec +# define timespec rpl_timespec +struct timespec +{ + time_t tv_sec; + long int tv_nsec; +}; +# define GNULIB_defined_struct_timespec 1 +# endif + +# ifdef __cplusplus +} +# endif + +# endif +# endif + +# if !GNULIB_defined_struct_time_t_must_be_integral +/* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html + requires time_t to be an integer type, even though C99 permits floating + point. We don't know of any implementation that uses floating + point, and it is much easier to write code that doesn't have to + worry about that corner case, so we force the issue. */ +struct __time_t_must_be_integral { + unsigned int __floating_time_t_unsupported : (time_t) 1; +}; +# define GNULIB_defined_struct_time_t_must_be_integral 1 +# endif + +/* Define TIME_UTC, a positive integer constant used for timespec_get(). */ +# if ! 1 +# if !GNULIB_defined_TIME_UTC +# define TIME_UTC 1 +# define GNULIB_defined_TIME_UTC 1 +# endif +# endif + +/* Set *TS to the current time, and return BASE. + Upon failure, return 0. */ +# if 0 +# if ! 1 +_GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); +_GL_CXXALIASWARN (timespec_get); +# endif + +/* Set *TS to the current time resolution, and return BASE. + Upon failure, return 0. */ +# if 0 +# if ! 1 +_GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); +_GL_CXXALIASWARN (timespec_getres); +# endif + +/* Sleep for at least RQTP seconds unless interrupted, If interrupted, + return -1 and store the remaining time into RMTP. See + . */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define nanosleep rpl_nanosleep +# endif +_GL_FUNCDECL_RPL (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp)); +# endif +_GL_CXXALIASWARN (nanosleep); +# endif + +/* Initialize time conversion information. */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tzset +# define tzset rpl_tzset +# endif +_GL_FUNCDECL_RPL (tzset, void, (void)); +_GL_CXXALIAS_RPL (tzset, void, (void)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tzset +# define tzset _tzset +# endif +_GL_CXXALIAS_MDA (tzset, void, (void)); +# else +_GL_CXXALIAS_SYS (tzset, void, (void)); +# endif +_GL_CXXALIASWARN (tzset); +# elif 1 +/* On native Windows, map 'tzset' to '_tzset', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::tzset always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tzset +# define tzset _tzset +# endif +_GL_CXXALIAS_MDA (tzset, void, (void)); +# else +_GL_CXXALIAS_SYS (tzset, void, (void)); +# endif +_GL_CXXALIASWARN (tzset); +# endif + +/* Return the 'time_t' representation of TP and normalize TP. */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mktime rpl_mktime +# endif +_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); +# else +_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mktime); +# endif +# endif + +/* Convert TIMER to RESULT, assuming local time and UTC respectively. See + and + . */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localtime_r +# define localtime_r rpl_localtime_r +# endif +_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# endif +# if 1 +_GL_CXXALIASWARN (localtime_r); +# endif +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gmtime_r +# define gmtime_r rpl_gmtime_r +# endif +_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# endif +# if 1 +_GL_CXXALIASWARN (gmtime_r); +# endif +# endif + +/* Convert TIMER to RESULT, assuming local time and UTC respectively. See + and + . */ +# if 0 || 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localtime +# define localtime rpl_localtime +# endif +_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); +# else +_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (localtime); +# endif +# endif + +# if 0 || 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gmtime +# define gmtime rpl_gmtime +# endif +_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); +# else +_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); +# endif +_GL_CXXALIASWARN (gmtime); +# endif + +/* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store + the resulting broken-down time into TM. See + . */ +# if 0 +# if ! 1 +_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, + char const *restrict __format, + struct tm *restrict __tm) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, + char const *restrict __format, + struct tm *restrict __tm)); +_GL_CXXALIASWARN (strptime); +# endif + +/* Convert *TP to a date and time string. See + . */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define ctime rpl_ctime +# endif +_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); +# else +_GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (ctime); +# endif +# endif + +/* Convert *TP to a date and time string. See + . */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strftime rpl_strftime +# endif +_GL_FUNCDECL_RPL (strftime, size_t, + (char *restrict __buf, size_t __bufsize, + const char *restrict __fmt, const struct tm *restrict __tp) + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (strftime, size_t, + (char *restrict __buf, size_t __bufsize, + const char *restrict __fmt, const struct tm *restrict __tp)); +# else +_GL_CXXALIAS_SYS (strftime, size_t, + (char *restrict __buf, size_t __bufsize, + const char *restrict __fmt, const struct tm *restrict __tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strftime); +# endif +# endif + +# if defined _GNU_SOURCE && 0 && ! 0 +/* Functions that use a first-class time zone data type, instead of + relying on an implicit global time zone. + Inspired by NetBSD. */ + +/* Represents a time zone. + (timezone_t) NULL stands for UTC. */ +typedef struct tm_zone *timezone_t; + +/* tzalloc (name) + Returns a time zone object for the given time zone NAME. This object + represents the time zone that other functions would use it the TZ + environment variable was set to NAME. + If NAME is NULL, the result represents the time zone that other functions + would use it the TZ environment variable was unset. + May return NULL if NAME is invalid (this is platform dependent) or + upon memory allocation failure. */ +_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); +_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); + +/* tzfree (tz) + Frees a time zone object. + The argument must have been returned by tzalloc(). */ +_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); +_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); + +/* localtime_rz (tz, &t, &result) + Converts an absolute time T to a broken-down time RESULT, assuming the + time zone TZ. + This function is like 'localtime_r', but relies on the argument TZ instead + of an implicit global time zone. */ +_GL_FUNCDECL_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result)); + +/* mktime_z (tz, &tm) + Normalizes the broken-down time TM and converts it to an absolute time, + assuming the time zone TZ. Returns the absolute time. + This function is like 'mktime', but relies on the argument TZ instead + of an implicit global time zone. */ +_GL_FUNCDECL_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __tm) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __tm)); + +/* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z' + in the 'tm_zone' member of 'struct tm') are valid as long as + - the 'struct tm' argument is not destroyed or overwritten, + and + - the 'timezone_t' argument is not freed through tzfree(). */ + +# endif + +/* Convert TM to a time_t value, assuming UTC. */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef timegm +# define timegm rpl_timegm +# endif +_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); +# endif +_GL_CXXALIASWARN (timegm); +# endif + +/* Encourage applications to avoid unsafe functions that can overrun + buffers when given outlandish struct tm values. Portable + applications should use strftime (or even sprintf) instead. */ +# if defined GNULIB_POSIXCHECK +# undef asctime +_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# if defined GNULIB_POSIXCHECK +# undef asctime_r +_GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# if defined GNULIB_POSIXCHECK +# undef ctime +_GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# if defined GNULIB_POSIXCHECK +# undef ctime_r +_GL_WARN_ON_USE (ctime_r, "ctime_r can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif + +#endif diff --git a/jni/parted/libiconv/srclib/unictype/bitmap.h b/jni/parted/libiconv/srclib/unictype/bitmap.h new file mode 100755 index 0000000..5bd4636 --- /dev/null +++ b/jni/parted/libiconv/srclib/unictype/bitmap.h @@ -0,0 +1,48 @@ +/* Three-level bitmap lookup. + Copyright (C) 2000-2002, 2005-2007, 2009-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2000-2002. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +static inline int bitmap_lookup (const void *table, ucs4_t uc); + +/* These values are currently hardcoded into gen-uni-tables.c, function + output_predicate(). */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 + +static inline int +bitmap_lookup (const void *table, ucs4_t uc) +{ + unsigned int index1 = uc >> header_0; + if (index1 < ((const int *) table)[0]) + { + int lookup1 = ((const int *) table)[1 + index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> header_2) & header_3; + int lookup2 = ((const short *) table)[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc >> 5) & header_4; + unsigned int lookup3 = ((const unsigned int *) table)[lookup2 + index3]; + + return (lookup3 >> (uc & 0x1f)) & 1; + } + } + } + return 0; +} diff --git a/jni/parted/libiconv/srclib/unistd.h b/jni/parted/libiconv/srclib/unistd.h new file mode 100755 index 0000000..e59efd8 --- /dev/null +++ b/jni/parted/libiconv/srclib/unistd.h @@ -0,0 +1,2834 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around . + Copyright (C) 2003-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_UNISTD_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if 1 && defined _GL_INCLUDING_UNISTD_H +/* Special invocation convention: + - On Mac OS X 10.3.9 we have a sequence of nested includes + -> -> -> + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#include_next + +#else +/* Normal invocation convention. */ + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# define _GL_INCLUDING_UNISTD_H +# include_next +# undef _GL_INCLUDING_UNISTD_H +#endif + +/* Get all possible declarations of gethostname(). */ +#if 0 && 0 \ + && !defined _GL_INCLUDING_WINSOCK2_H +# define _GL_INCLUDING_WINSOCK2_H +# include +# undef _GL_INCLUDING_WINSOCK2_H +#endif + +#if !defined _GL_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H +#define _GL_UNISTD_H + +/* NetBSD 5.0 mis-defines NULL. Also get size_t. */ +/* But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include +#endif + +/* mingw doesn't define the SEEK_* or *_FILENO macros in . */ +/* MSVC declares 'unlink' in , not in . We must include + it before we #define unlink rpl_unlink. */ +/* Cygwin 1.7.1 declares symlinkat in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ + || ((0 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__)) \ + || ((0 || defined GNULIB_POSIXCHECK) \ + && defined __CYGWIN__)) \ + && ! defined __GLIBC__ +# include +#endif + +/* Cygwin 1.7.1 and Android 4.3 declare unlinkat in , not in + . */ +/* But avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) \ + && (defined __CYGWIN__ || defined __ANDROID__) \ + && ! defined __GLIBC__ +# include +#endif + +/* mingw fails to declare _exit in . */ +/* mingw, MSVC, BeOS, Haiku declare environ in , not in + . */ +/* Solaris declares getcwd not only in but also in . */ +/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system is + included here. */ +/* But avoid namespace pollution on glibc systems. */ +#if !defined __GLIBC__ && !defined __osf__ +# define __need_system_stdlib_h +# include +# undef __need_system_stdlib_h +#endif + +/* Native Windows platforms declare _chdir, _getcwd, _rmdir in + and/or , not in . + They also declare _access(), _chmod(), _close(), _dup(), _dup2(), _isatty(), + _lseek(), _read(), _unlink(), _write() in . */ +#if defined _WIN32 && !defined __CYGWIN__ +# include +# include +#endif + +/* Native Windows platforms declare _execl*, _execv* in . */ +#if defined _WIN32 && !defined __CYGWIN__ +# include +#endif + +/* AIX and OSF/1 5.1 declare getdomainname in , not in . + NonStop Kernel declares gethostname in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if ((0 && (defined _AIX || defined __osf__)) \ + || (0 && defined __TANDEM)) \ + && !defined __GLIBC__ +# include +#endif + +/* Mac OS X 10.13, Solaris 11.4, and Android 9.0 declare getentropy in + , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) \ + && ((defined __APPLE__ && defined __MACH__) || defined __sun \ + || defined __ANDROID__) \ + && 0 \ + && !defined __GLIBC__ +# include +#endif + +/* Android 4.3 declares fchownat in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ + && !defined __GLIBC__ +# include +#endif + +/* MSVC defines off_t in . + May also define off_t to a 64-bit type on native Windows. */ +/* Get off_t, ssize_t, mode_t. */ +#include + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Get getopt(), optarg, optind, opterr, optopt. */ +#if 0 && 00 && !defined _GL_SYSTEM_GETOPT +# include +# include +#endif + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_UNISTD_INLINE +# define _GL_UNISTD_INLINE _GL_INLINE +#endif + +/* Hide some function declarations from . */ + +#if 0 && 0 +# if !defined _GL_SYS_SOCKET_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# else + _GL_WARN_ON_USE (socket, + "socket() used without including "); + _GL_WARN_ON_USE (connect, + "connect() used without including "); + _GL_WARN_ON_USE (accept, + "accept() used without including "); + _GL_WARN_ON_USE (bind, + "bind() used without including "); + _GL_WARN_ON_USE (getpeername, + "getpeername() used without including "); + _GL_WARN_ON_USE (getsockname, + "getsockname() used without including "); + _GL_WARN_ON_USE (getsockopt, + "getsockopt() used without including "); + _GL_WARN_ON_USE (listen, + "listen() used without including "); + _GL_WARN_ON_USE (recv, + "recv() used without including "); + _GL_WARN_ON_USE (send, + "send() used without including "); + _GL_WARN_ON_USE (recvfrom, + "recvfrom() used without including "); + _GL_WARN_ON_USE (sendto, + "sendto() used without including "); + _GL_WARN_ON_USE (setsockopt, + "setsockopt() used without including "); + _GL_WARN_ON_USE (shutdown, + "shutdown() used without including "); +# endif +# endif +# if !defined _GL_SYS_SELECT_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef select +# define select select_used_without_including_sys_select_h +# else + _GL_WARN_ON_USE (select, + "select() used without including "); +# endif +# endif +#endif + + +/* OS/2 EMX lacks these macros. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Ensure *_OK macros exist. */ +#ifndef F_OK +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 +#endif + + +/* Declare overridden functions. */ + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef access +# define access rpl_access +# endif +_GL_FUNCDECL_RPL (access, int, (const char *file, int mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (access, int, (const char *file, int mode)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef access +# define access _access +# endif +_GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); +# else +_GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); +# endif +_GL_CXXALIASWARN (access); +#elif defined GNULIB_POSIXCHECK +# undef access +# if HAVE_RAW_DECL_ACCESS +/* The access() function is a security risk. */ +_GL_WARN_ON_USE (access, "access does not always support X_OK - " + "use gnulib module access for portability; " + "also, this function is a security risk - " + "use the gnulib module faccessat instead"); +# endif +#elif 1 +/* On native Windows, map 'access' to '_access', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::access always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef access +# define access _access +# endif +_GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); +# else +_GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); +# endif +_GL_CXXALIASWARN (access); +#endif + + +#if 0 +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chdir +# define chdir _chdir +# endif +_GL_CXXALIAS_MDA (chdir, int, (const char *file)); +# else +_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIASWARN (chdir); +#elif defined GNULIB_POSIXCHECK +# undef chdir +# if HAVE_RAW_DECL_CHDIR +_GL_WARN_ON_USE (chown, "chdir is not always in - " + "use gnulib module chdir for portability"); +# endif +#elif 1 +/* On native Windows, map 'chdir' to '_chdir', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::chdir always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chdir +# define chdir _chdir +# endif +_GL_CXXALIAS_MDA (chdir, int, (const char *file)); +# else +_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIASWARN (chdir); +#endif + + +#if 0 +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup2 rpl_dup2 +# endif +_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); +_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef dup2 +# define dup2 _dup2 +# endif +_GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); +# else +_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIASWARN (dup2); +#elif defined GNULIB_POSIXCHECK +# undef dup2 +# if HAVE_RAW_DECL_DUP2 +_GL_WARN_ON_USE (dup2, "dup2 is unportable - " + "use gnulib module dup2 for portability"); +# endif +#elif 1 +/* On native Windows, map 'dup2' to '_dup2', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::dup2 always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef dup2 +# define dup2 _dup2 +# endif +_GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); +# else +_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIASWARN (dup2); +#endif + + +#if 0 +/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the + specified flags. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Close NEWFD first if it is open. + Return newfd if successful, otherwise -1 and errno set. + See the Linux man page at + . */ +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup3 rpl_dup3 +# endif +_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); +# else +_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); +# endif +_GL_CXXALIASWARN (dup3); +#elif defined GNULIB_POSIXCHECK +# undef dup3 +# if HAVE_RAW_DECL_DUP3 +_GL_WARN_ON_USE (dup3, "dup3 is unportable - " + "use gnulib module dup3 for portability"); +# endif +#endif + + +#if 1 +# if defined __CYGWIN__ && !defined __i386__ +/* The 'environ' variable is defined in a DLL. Therefore its declaration needs + the '__declspec(dllimport)' attribute, but the system's lacks it. + This leads to a link error on 64-bit Cygwin when the option + -Wl,--disable-auto-import is in use. */ +_GL_EXTERN_C __declspec(dllimport) char **environ; +# endif +# if !1 +/* Set of environment variables and values. An array of strings of the form + "VARIABLE=VALUE", terminated with a NULL. */ +# if defined __APPLE__ && defined __MACH__ +# include +# if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR +# define _GL_USE_CRT_EXTERNS +# endif +# endif +# ifdef _GL_USE_CRT_EXTERNS +# include +# define environ (*_NSGetEnviron ()) +# else +# ifdef __cplusplus +extern "C" { +# endif +extern char **environ; +# ifdef __cplusplus +} +# endif +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if HAVE_RAW_DECL_ENVIRON +_GL_UNISTD_INLINE char *** +_GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " + "use gnulib module environ for portability") +rpl_environ (void) +{ + return &environ; +} +# undef environ +# define environ (*rpl_environ ()) +# endif +#endif + + +#if 0 +/* Like access(), except that it uses the effective user id and group id of + the current process. */ +# if !1 +_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); +_GL_CXXALIASWARN (euidaccess); +# if defined GNULIB_POSIXCHECK +/* Like access(), this function is a security risk. */ +_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " + "use the gnulib module faccessat instead"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef euidaccess +# if HAVE_RAW_DECL_EUIDACCESS +_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " + "use gnulib module euidaccess for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execl +# define execl rpl_execl +# endif +_GL_FUNCDECL_RPL (execl, int, (const char *program, const char *arg, ...) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (execl, int, (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execl); +#elif defined GNULIB_POSIXCHECK +# undef execl +# if HAVE_RAW_DECL_EXECL +_GL_WARN_ON_USE (execl, "execl behaves very differently on mingw - " + "use gnulib module execl for portability"); +# endif +#elif 1 +/* On native Windows, map 'execl' to '_execl', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execl always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execl +# define execl _execl +# endif +_GL_CXXALIAS_MDA (execl, intptr_t, (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execl); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execle +# define execle rpl_execle +# endif +_GL_FUNCDECL_RPL (execle, int, (const char *program, const char *arg, ...) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (execle, int, (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execle); +#elif defined GNULIB_POSIXCHECK +# undef execle +# if HAVE_RAW_DECL_EXECLE +_GL_WARN_ON_USE (execle, "execle behaves very differently on mingw - " + "use gnulib module execle for portability"); +# endif +#elif 1 +/* On native Windows, map 'execle' to '_execle', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execle always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execle +# define execle _execle +# endif +_GL_CXXALIAS_MDA (execle, intptr_t, + (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execle); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execlp +# define execlp rpl_execlp +# endif +_GL_FUNCDECL_RPL (execlp, int, (const char *program, const char *arg, ...) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (execlp, int, (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execlp); +#elif defined GNULIB_POSIXCHECK +# undef execlp +# if HAVE_RAW_DECL_EXECLP +_GL_WARN_ON_USE (execlp, "execlp behaves very differently on mingw - " + "use gnulib module execlp for portability"); +# endif +#elif 1 +/* On native Windows, map 'execlp' to '_execlp', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execlp always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execlp +# define execlp _execlp +# endif +_GL_CXXALIAS_MDA (execlp, intptr_t, + (const char *program, const char *arg, ...)); +# else +_GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); +# endif +_GL_CXXALIASWARN (execlp); +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execv +# define execv rpl_execv +# endif +_GL_FUNCDECL_RPL (execv, int, (const char *program, char * const *argv) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (execv, int, (const char *program, char * const *argv)); +# else +_GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); +# endif +_GL_CXXALIASWARN (execv); +#elif defined GNULIB_POSIXCHECK +# undef execv +# if HAVE_RAW_DECL_EXECV +_GL_WARN_ON_USE (execv, "execv behaves very differently on mingw - " + "use gnulib module execv for portability"); +# endif +#elif 1 +/* On native Windows, map 'execv' to '_execv', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execv always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execv +# define execv _execv +# endif +_GL_CXXALIAS_MDA_CAST (execv, intptr_t, + (const char *program, char * const *argv)); +# else +_GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); +# endif +_GL_CXXALIASWARN (execv); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execve +# define execve rpl_execve +# endif +_GL_FUNCDECL_RPL (execve, int, + (const char *program, char * const *argv, char * const *env) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (execve, int, + (const char *program, char * const *argv, char * const *env)); +# else +_GL_CXXALIAS_SYS (execve, int, + (const char *program, char * const *argv, char * const *env)); +# endif +_GL_CXXALIASWARN (execve); +#elif defined GNULIB_POSIXCHECK +# undef execve +# if HAVE_RAW_DECL_EXECVE +_GL_WARN_ON_USE (execve, "execve behaves very differently on mingw - " + "use gnulib module execve for portability"); +# endif +#elif 1 +/* On native Windows, map 'execve' to '_execve', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execve always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execve +# define execve _execve +# endif +_GL_CXXALIAS_MDA_CAST (execve, intptr_t, + (const char *program, char * const *argv, + char * const *env)); +# else +_GL_CXXALIAS_SYS (execve, int, + (const char *program, char * const *argv, char * const *env)); +# endif +_GL_CXXALIASWARN (execve); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execvp +# define execvp rpl_execvp +# endif +_GL_FUNCDECL_RPL (execvp, int, (const char *program, char * const *argv) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (execvp, int, (const char *program, char * const *argv)); +# else +_GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); +# endif +_GL_CXXALIASWARN (execvp); +#elif defined GNULIB_POSIXCHECK +# undef execvp +# if HAVE_RAW_DECL_EXECVP +_GL_WARN_ON_USE (execvp, "execvp behaves very differently on mingw - " + "use gnulib module execvp for portability"); +# endif +#elif 1 +/* On native Windows, map 'execvp' to '_execvp', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execvp always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execvp +# define execvp _execvp +# endif +_GL_CXXALIAS_MDA_CAST (execvp, intptr_t, + (const char *program, char * const *argv)); +# else +_GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); +# endif +_GL_CXXALIASWARN (execvp); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execvpe +# define execvpe rpl_execvpe +# endif +_GL_FUNCDECL_RPL (execvpe, int, + (const char *program, char * const *argv, char * const *env) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (execvpe, int, + (const char *program, char * const *argv, char * const *env)); +# else +# if !1 +_GL_FUNCDECL_SYS (execvpe, int, + (const char *program, char * const *argv, char * const *env) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (execvpe, int, + (const char *program, char * const *argv, char * const *env)); +# endif +_GL_CXXALIASWARN (execvpe); +#elif defined GNULIB_POSIXCHECK +# undef execvpe +# if HAVE_RAW_DECL_EXECVPE +_GL_WARN_ON_USE (execvpe, "execvpe behaves very differently on mingw - " + "use gnulib module execvpe for portability"); +# endif +#elif 1 +/* On native Windows, map 'execvpe' to '_execvpe', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::execvpe on all platforms that have + it. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef execvpe +# define execvpe _execvpe +# endif +_GL_CXXALIAS_MDA_CAST (execvpe, intptr_t, + (const char *program, char * const *argv, + char * const *env)); +# elif 1 +# if !1 +_GL_FUNCDECL_SYS (execvpe, int, + (const char *program, char * const *argv, char * const *env) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (execvpe, int, + (const char *program, char * const *argv, char * const *env)); +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 1 +_GL_CXXALIASWARN (execvpe); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef faccessat +# define faccessat rpl_faccessat +# endif +_GL_FUNCDECL_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag)); +# endif +_GL_CXXALIASWARN (faccessat); +#elif defined GNULIB_POSIXCHECK +# undef faccessat +# if HAVE_RAW_DECL_FACCESSAT +_GL_WARN_ON_USE (faccessat, "faccessat is not portable - " + "use gnulib module faccessat for portability"); +# endif +#endif + + +#if 0 +/* Change the process' current working directory to the directory on which + the given file descriptor is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if ! 1 +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); + +/* Gnulib internal hooks needed to maintain the fchdir metadata. */ +_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) + _GL_ARG_NONNULL ((2)); +_GL_EXTERN_C void _gl_unregister_fd (int fd); +_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); +_GL_EXTERN_C const char *_gl_directory_name (int fd); + +# else +# if !1 +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); +# endif +# endif +_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); +_GL_CXXALIASWARN (fchdir); +#elif defined GNULIB_POSIXCHECK +# undef fchdir +# if HAVE_RAW_DECL_FCHDIR +_GL_WARN_ON_USE (fchdir, "fchdir is unportable - " + "use gnulib module fchdir for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchownat +# define fchownat rpl_fchownat +# endif +_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# endif +_GL_CXXALIASWARN (fchownat); +#elif defined GNULIB_POSIXCHECK +# undef fchownat +# if HAVE_RAW_DECL_FCHOWNAT +_GL_WARN_ON_USE (fchownat, "fchownat is not portable - " + "use gnulib module fchownat for portability"); +# endif +#endif + + +#if 0 +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + . */ +# if !1 || !1 +_GL_FUNCDECL_SYS (fdatasync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fdatasync, int, (int fd)); +_GL_CXXALIASWARN (fdatasync); +#elif defined GNULIB_POSIXCHECK +# undef fdatasync +# if HAVE_RAW_DECL_FDATASYNC +_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " + "use gnulib module fdatasync for portability"); +# endif +#endif + + +#if 0 +/* Synchronize changes, including metadata, to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + . */ +# if !1 +_GL_FUNCDECL_SYS (fsync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fsync, int, (int fd)); +_GL_CXXALIASWARN (fsync); +#elif defined GNULIB_POSIXCHECK +# undef fsync +# if HAVE_RAW_DECL_FSYNC +_GL_WARN_ON_USE (fsync, "fsync is unportable - " + "use gnulib module fsync for portability"); +# endif +#endif + + +#if 0 +/* Change the size of the file to which FD is opened to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftruncate +# define ftruncate rpl_ftruncate +# endif +_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); +_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); +# else +# if !1 +_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIASWARN (ftruncate); +#elif defined GNULIB_POSIXCHECK +# undef ftruncate +# if HAVE_RAW_DECL_FTRUNCATE +_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " + "use gnulib module ftruncate for portability"); +# endif +#endif + + +#if 0 +/* Get the name of the current working directory, and put it in SIZE bytes + of BUF. + Return BUF if successful, or NULL if the directory couldn't be determined + or SIZE was too small. + See the POSIX:2008 specification + . + Additionally, the gnulib module 'getcwd' guarantees the following GNU + extension: If BUF is NULL, an array is allocated with 'malloc'; the array + is SIZE bytes long, unless SIZE == 0, in which case it is as big as + necessary. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getcwd rpl_getcwd +# endif +_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); +_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getcwd +# define getcwd _getcwd +# endif +_GL_CXXALIAS_MDA (getcwd, char *, (char *buf, size_t size)); +# else +/* Need to cast, because on mingw, the second parameter is + int size. */ +_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); +# endif +_GL_CXXALIASWARN (getcwd); +#elif defined GNULIB_POSIXCHECK +# undef getcwd +# if HAVE_RAW_DECL_GETCWD +_GL_WARN_ON_USE (getcwd, "getcwd is unportable - " + "use gnulib module getcwd for portability"); +# endif +#elif 1 +/* On native Windows, map 'getcwd' to '_getcwd', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::getcwd always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getcwd +# define getcwd _getcwd +# endif +/* Need to cast, because on mingw, the second parameter is either + 'int size' or 'size_t size'. */ +_GL_CXXALIAS_MDA_CAST (getcwd, char *, (char *buf, size_t size)); +# else +_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); +# endif +_GL_CXXALIASWARN (getcwd); +#endif + + +#if 0 +/* Return the NIS domain name of the machine. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + + Put up to LEN bytes of the NIS domain name into NAME. + Null terminate it if the name is shorter than LEN. + If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdomainname +# define getdomainname rpl_getdomainname +# endif +_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (getdomainname); +#elif defined GNULIB_POSIXCHECK +# undef getdomainname +# if HAVE_RAW_DECL_GETDOMAINNAME +_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " + "use gnulib module getdomainname for portability"); +# endif +#endif + + +#if 1 +/* Return the maximum number of file descriptors in the current process. + In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdtablesize +# define getdtablesize rpl_getdtablesize +# endif +_GL_FUNCDECL_RPL (getdtablesize, int, (void)); +_GL_CXXALIAS_RPL (getdtablesize, int, (void)); +# else +# if !0 +_GL_FUNCDECL_SYS (getdtablesize, int, (void)); +# endif +/* Need to cast, because on AIX, the parameter list is + (...). */ +_GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void)); +# endif +_GL_CXXALIASWARN (getdtablesize); +#elif defined GNULIB_POSIXCHECK +# undef getdtablesize +# if HAVE_RAW_DECL_GETDTABLESIZE +_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " + "use gnulib module getdtablesize for portability"); +# endif +#endif + + +#if 0 +/* Fill a buffer with random bytes. */ +# if !1 +_GL_FUNCDECL_SYS (getentropy, int, (void *buffer, size_t length)); +# endif +_GL_CXXALIAS_SYS (getentropy, int, (void *buffer, size_t length)); +_GL_CXXALIASWARN (getentropy); +#elif defined GNULIB_POSIXCHECK +# undef getentropy +# if HAVE_RAW_DECL_GETENTROPY +_GL_WARN_ON_USE (getentropy, "getentropy is unportable - " + "use gnulib module getentropy for portability"); +# endif +#endif + + +#if 0 +/* Return the supplemental groups that the current process belongs to. + It is unspecified whether the effective group id is in the list. + If N is 0, return the group count; otherwise, N describes how many + entries are available in GROUPS. Return -1 and set errno if N is + not 0 and not large enough. Fails with ENOSYS on some systems. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getgroups +# define getgroups rpl_getgroups +# endif +_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); +_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); +# else +# if !1 +_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIASWARN (getgroups); +#elif defined GNULIB_POSIXCHECK +# undef getgroups +# if HAVE_RAW_DECL_GETGROUPS +_GL_WARN_ON_USE (getgroups, "getgroups is unportable - " + "use gnulib module getgroups for portability"); +# endif +#endif + + +#if 0 +/* Return the standard host name of the machine. + WARNING! The host name may or may not be fully qualified. + + Put up to LEN bytes of the host name into NAME. + Null terminate it if the name is shorter than LEN. + If the host name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gethostname +# define gethostname rpl_gethostname +# endif +_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second + parameter is + int len. */ +_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (gethostname); +#elif 0 +# undef gethostname +# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname +#elif defined GNULIB_POSIXCHECK +# undef gethostname +# if HAVE_RAW_DECL_GETHOSTNAME +_GL_WARN_ON_USE (gethostname, "gethostname is unportable - " + "use gnulib module gethostname for portability"); +# endif +#endif + + +#if 0 +/* Returns the user's login name, or NULL if it cannot be found. Upon error, + returns NULL with errno set. + + See . + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if !1 +_GL_FUNCDECL_SYS (getlogin, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getlogin, char *, (void)); +_GL_CXXALIASWARN (getlogin); +#elif defined GNULIB_POSIXCHECK +# undef getlogin +# if HAVE_RAW_DECL_GETLOGIN +_GL_WARN_ON_USE (getlogin, "getlogin is unportable - " + "use gnulib module getlogin for portability"); +# endif +#endif + + +#if 0 +/* Copies the user's login name to NAME. + The array pointed to by NAME has room for SIZE bytes. + + Returns 0 if successful. Upon error, an error number is returned, or -1 in + the case that the login name cannot be found but no specific error is + provided (this case is hopefully rare but is left open by the POSIX spec). + + See . + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getlogin_r rpl_getlogin_r +# endif +_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); +# else +# if !1 +_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 systems, the second argument is + int size. */ +_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); +# endif +_GL_CXXALIASWARN (getlogin_r); +#elif defined GNULIB_POSIXCHECK +# undef getlogin_r +# if HAVE_RAW_DECL_GETLOGIN_R +_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " + "use gnulib module getlogin_r for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize rpl_getpagesize +# endif +_GL_FUNCDECL_RPL (getpagesize, int, (void)); +_GL_CXXALIAS_RPL (getpagesize, int, (void)); +# else +/* On HP-UX, getpagesize exists, but it is not declared in even if + the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ +# if defined __hpux +_GL_FUNCDECL_SYS (getpagesize, int, (void)); +# endif +# if !1 +# if !defined getpagesize +/* This is for POSIX systems. */ +# if !defined _gl_getpagesize && defined _SC_PAGESIZE +# if ! (defined __VMS && __VMS_VER < 70000000) +# define _gl_getpagesize() sysconf (_SC_PAGESIZE) +# endif +# endif +/* This is for older VMS. */ +# if !defined _gl_getpagesize && defined __VMS +# ifdef __ALPHA +# define _gl_getpagesize() 8192 +# else +# define _gl_getpagesize() 512 +# endif +# endif +/* This is for BeOS. */ +# if !defined _gl_getpagesize && 0 +# include +# if defined B_PAGE_SIZE +# define _gl_getpagesize() B_PAGE_SIZE +# endif +# endif +/* This is for AmigaOS4.0. */ +# if !defined _gl_getpagesize && defined __amigaos4__ +# define _gl_getpagesize() 2048 +# endif +/* This is for older Unix systems. */ +# if !defined _gl_getpagesize && 0 +# include +# ifdef EXEC_PAGESIZE +# define _gl_getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# define _gl_getpagesize() (NBPG * CLSIZE) +# else +# ifdef NBPC +# define _gl_getpagesize() NBPC +# endif +# endif +# endif +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize() _gl_getpagesize () +# else +# if !GNULIB_defined_getpagesize_function +_GL_UNISTD_INLINE int +getpagesize () +{ + return _gl_getpagesize (); +} +# define GNULIB_defined_getpagesize_function 1 +# endif +# endif +# endif +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ +_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); +# endif +# if 1 +_GL_CXXALIASWARN (getpagesize); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getpagesize +# if HAVE_RAW_DECL_GETPAGESIZE +_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " + "use gnulib module getpagesize for portability"); +# endif +#endif + + +#if 0 +/* Function getpass() from module 'getpass': + Read a password from /dev/tty or stdin. + Function getpass() from module 'getpass-gnu': + Read a password of arbitrary length from /dev/tty or stdin. */ +# if (0 && 0) \ + || (0 && 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getpass +# define getpass rpl_getpass +# endif +_GL_FUNCDECL_RPL (getpass, char *, (const char *prompt) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); +# else +# if !1 +_GL_FUNCDECL_SYS (getpass, char *, (const char *prompt) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); +# endif +_GL_CXXALIASWARN (getpass); +#elif defined GNULIB_POSIXCHECK +# undef getpass +# if HAVE_RAW_DECL_GETPASS +_GL_WARN_ON_USE (getpass, "getpass is unportable - " + "use gnulib module getpass or getpass-gnu for portability"); +# endif +#endif + + +#if 1 +/* On native Windows, map 'getpid' to '_getpid', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::getpid always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getpid +# define getpid _getpid +# endif +_GL_CXXALIAS_MDA (getpid, int, (void)); +# else +_GL_CXXALIAS_SYS (getpid, pid_t, (void)); +# endif +_GL_CXXALIASWARN (getpid); +#endif + + +#if 0 +/* Return the next valid login shell on the system, or NULL when the end of + the list has been reached. */ +# if !1 +_GL_FUNCDECL_SYS (getusershell, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getusershell, char *, (void)); +_GL_CXXALIASWARN (getusershell); +#elif defined GNULIB_POSIXCHECK +# undef getusershell +# if HAVE_RAW_DECL_GETUSERSHELL +_GL_WARN_ON_USE (getusershell, "getusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if 0 +/* Rewind to pointer that is advanced at each getusershell() call. */ +# if !1 +_GL_FUNCDECL_SYS (setusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (setusershell, void, (void)); +_GL_CXXALIASWARN (setusershell); +#elif defined GNULIB_POSIXCHECK +# undef setusershell +# if HAVE_RAW_DECL_SETUSERSHELL +_GL_WARN_ON_USE (setusershell, "setusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if 0 +/* Free the pointer that is advanced at each getusershell() call and + associated resources. */ +# if !1 +_GL_FUNCDECL_SYS (endusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (endusershell, void, (void)); +_GL_CXXALIASWARN (endusershell); +#elif defined GNULIB_POSIXCHECK +# undef endusershell +# if HAVE_RAW_DECL_ENDUSERSHELL +_GL_WARN_ON_USE (endusershell, "endusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + + +#if 0 +/* Determine whether group id is in calling user's group list. */ +# if !1 +_GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); +# endif +_GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); +_GL_CXXALIASWARN (group_member); +#elif defined GNULIB_POSIXCHECK +# undef group_member +# if HAVE_RAW_DECL_GROUP_MEMBER +_GL_WARN_ON_USE (group_member, "group_member is unportable - " + "use gnulib module group-member for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty rpl_isatty +# endif +# define GNULIB_defined_isatty 1 +_GL_FUNCDECL_RPL (isatty, int, (int fd)); +_GL_CXXALIAS_RPL (isatty, int, (int fd)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty _isatty +# endif +_GL_CXXALIAS_MDA (isatty, int, (int fd)); +# else +_GL_CXXALIAS_SYS (isatty, int, (int fd)); +# endif +_GL_CXXALIASWARN (isatty); +#elif defined GNULIB_POSIXCHECK +# undef isatty +# if HAVE_RAW_DECL_ISATTY +_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " + "use gnulib module isatty for portability"); +# endif +#elif 1 +/* On native Windows, map 'isatty' to '_isatty', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::isatty always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty _isatty +# endif +_GL_CXXALIAS_MDA (isatty, int, (int fd)); +# else +_GL_CXXALIAS_SYS (isatty, int, (int fd)); +# endif +_GL_CXXALIASWARN (isatty); +#endif + + +#if 0 +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Do not follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lchown +# define lchown rpl_lchown +# endif +_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); +# else +# if !1 +_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); +# endif +_GL_CXXALIASWARN (lchown); +#elif defined GNULIB_POSIXCHECK +# undef lchown +# if HAVE_RAW_DECL_LCHOWN +_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " + "use gnulib module lchown for portability"); +# endif +#endif + + +#if 0 +/* Create a new hard link for an existing file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define link rpl_link +# endif +_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); +# else +# if !1 +_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); +# endif +_GL_CXXALIASWARN (link); +#elif defined GNULIB_POSIXCHECK +# undef link +# if HAVE_RAW_DECL_LINK +_GL_WARN_ON_USE (link, "link is unportable - " + "use gnulib module link for portability"); +# endif +#endif + + +#if 0 +/* Create a new hard link for an existing file, relative to two + directories. FLAG controls whether symlinks are followed. + Return 0 if successful, otherwise -1 and errno set. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef linkat +# define linkat rpl_linkat +# endif +_GL_FUNCDECL_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# endif +_GL_CXXALIASWARN (linkat); +#elif defined GNULIB_POSIXCHECK +# undef linkat +# if HAVE_RAW_DECL_LINKAT +_GL_WARN_ON_USE (linkat, "linkat is unportable - " + "use gnulib module linkat for portability"); +# endif +#endif + + +#if 0 +/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. + Return the new offset if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lseek rpl_lseek +# endif +_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lseek +# define lseek _lseek +# endif +_GL_CXXALIAS_MDA (lseek, off_t, (int fd, off_t offset, int whence)); +# else +_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (lseek); +#elif defined GNULIB_POSIXCHECK +# undef lseek +# if HAVE_RAW_DECL_LSEEK +_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " + "systems - use gnulib module lseek for portability"); +# endif +#elif 1 +/* On native Windows, map 'lseek' to '_lseek', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::lseek always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lseek +# define lseek _lseek +# endif +_GL_CXXALIAS_MDA (lseek, long, (int fd, long offset, int whence)); +# else +_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (lseek); +#endif + + +#if 0 +/* Create a pipe, defaulting to O_BINARY mode. + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. */ +# if !1 +_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pipe, int, (int fd[2])); +_GL_CXXALIASWARN (pipe); +#elif defined GNULIB_POSIXCHECK +# undef pipe +# if HAVE_RAW_DECL_PIPE +_GL_WARN_ON_USE (pipe, "pipe is unportable - " + "use gnulib module pipe-posix for portability"); +# endif +#endif + + +#if 0 +/* Create a pipe, applying the given flags when opening the read-end of the + pipe and the write-end of the pipe. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. + See also the Linux man page at + . */ +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define pipe2 rpl_pipe2 +# endif +_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); +# else +_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); +# endif +_GL_CXXALIASWARN (pipe2); +#elif defined GNULIB_POSIXCHECK +# undef pipe2 +# if HAVE_RAW_DECL_PIPE2 +_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " + "use gnulib module pipe2 for portability"); +# endif +#endif + + +#if 0 +/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. + Return the number of bytes placed into BUF if successful, otherwise + set errno and return -1. 0 indicates EOF. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pread +# define pread rpl_pread +# endif +_GL_FUNCDECL_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# else +# if !1 +_GL_FUNCDECL_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pread); +#elif defined GNULIB_POSIXCHECK +# undef pread +# if HAVE_RAW_DECL_PREAD +_GL_WARN_ON_USE (pread, "pread is unportable - " + "use gnulib module pread for portability"); +# endif +#endif + + +#if 0 +/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. + Return the number of bytes written if successful, otherwise + set errno and return -1. 0 indicates nothing written. See the + POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pwrite +# define pwrite rpl_pwrite +# endif +_GL_FUNCDECL_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# else +# if !1 +_GL_FUNCDECL_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pwrite); +#elif defined GNULIB_POSIXCHECK +# undef pwrite +# if HAVE_RAW_DECL_PWRITE +_GL_WARN_ON_USE (pwrite, "pwrite is unportable - " + "use gnulib module pwrite for portability"); +# endif +#endif + + +#if 1 +/* Read up to COUNT bytes from file descriptor FD into the buffer starting + at BUF. See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read rpl_read +# endif +_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read _read +# endif +_GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, size_t count)); +# else +_GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (read); +#elif 1 +/* On native Windows, map 'read' to '_read', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::read always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read _read +# endif +# ifdef __MINGW32__ +_GL_CXXALIAS_MDA (read, int, (int fd, void *buf, unsigned int count)); +# else +_GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, unsigned int count)); +# endif +# else +_GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (read); +#endif + + +#if 1 +/* Read the contents of the symbolic link FILE and place the first BUFSIZE + bytes of it into BUF. Return the number of bytes placed into BUF if + successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlink rpl_readlink +# endif +_GL_FUNCDECL_RPL (readlink, ssize_t, + (const char *restrict file, + char *restrict buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (readlink, ssize_t, + (const char *restrict file, + char *restrict buf, size_t bufsize)); +# else +# if !1 +_GL_FUNCDECL_SYS (readlink, ssize_t, + (const char *restrict file, + char *restrict buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (readlink, ssize_t, + (const char *restrict file, + char *restrict buf, size_t bufsize)); +# endif +_GL_CXXALIASWARN (readlink); +#elif defined GNULIB_POSIXCHECK +# undef readlink +# if HAVE_RAW_DECL_READLINK +_GL_WARN_ON_USE (readlink, "readlink is unportable - " + "use gnulib module readlink for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlinkat rpl_readlinkat +# endif +_GL_FUNCDECL_RPL (readlinkat, ssize_t, + (int fd, char const *restrict file, + char *restrict buf, size_t len) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (readlinkat, ssize_t, + (int fd, char const *restrict file, + char *restrict buf, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (readlinkat, ssize_t, + (int fd, char const *restrict file, + char *restrict buf, size_t len) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (readlinkat, ssize_t, + (int fd, char const *restrict file, + char *restrict buf, size_t len)); +# endif +_GL_CXXALIASWARN (readlinkat); +#elif defined GNULIB_POSIXCHECK +# undef readlinkat +# if HAVE_RAW_DECL_READLINKAT +_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " + "use gnulib module readlinkat for portability"); +# endif +#endif + + +#if 0 +/* Remove the directory DIR. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define rmdir rpl_rmdir +# endif +_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (rmdir, int, (char const *name)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rmdir +# define rmdir _rmdir +# endif +_GL_CXXALIAS_MDA (rmdir, int, (char const *name)); +# else +_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); +# endif +_GL_CXXALIASWARN (rmdir); +#elif defined GNULIB_POSIXCHECK +# undef rmdir +# if HAVE_RAW_DECL_RMDIR +_GL_WARN_ON_USE (rmdir, "rmdir is unportable - " + "use gnulib module rmdir for portability"); +# endif +#elif 1 +/* On native Windows, map 'rmdir' to '_rmdir', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::rmdir always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rmdir +# define rmdir _rmdir +# endif +_GL_CXXALIAS_MDA (rmdir, int, (char const *name)); +# else +_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); +# endif +_GL_CXXALIASWARN (rmdir); +#endif + + +#if 0 +/* Set the host name of the machine. + The host name may or may not be fully qualified. + + Put LEN bytes of NAME into the host name. + Return 0 if successful, otherwise, set errno and return -1. + + Platforms with no ability to set the hostname return -1 and set + errno = ENOSYS. */ +# if !1 || !1 +_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 + and FreeBSD 6.4 the second parameter is int. On Solaris 11 + 2011-10, the first parameter is not const. */ +_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); +_GL_CXXALIASWARN (sethostname); +#elif defined GNULIB_POSIXCHECK +# undef sethostname +# if HAVE_RAW_DECL_SETHOSTNAME +_GL_WARN_ON_USE (sethostname, "sethostname is unportable - " + "use gnulib module sethostname for portability"); +# endif +#endif + + +#if 0 +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sleep +# define sleep rpl_sleep +# endif +_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); +_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); +# else +# if !1 +_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIASWARN (sleep); +#elif defined GNULIB_POSIXCHECK +# undef sleep +# if HAVE_RAW_DECL_SLEEP +_GL_WARN_ON_USE (sleep, "sleep is unportable - " + "use gnulib module sleep for portability"); +# endif +#endif + + +#if 1 +/* On native Windows, map 'swab' to '_swab', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::swab always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef swab +# define swab _swab +# endif +/* Need to cast, because in old mingw the arguments are + (const char *from, char *to, size_t n). */ +_GL_CXXALIAS_MDA_CAST (swab, void, (char *from, char *to, int n)); +# else +# if defined __hpux /* HP-UX */ +_GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, int n)); +# elif defined __sun && !defined _XPG4 /* Solaris */ +_GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, ssize_t n)); +# else +_GL_CXXALIAS_SYS (swab, void, (const void *from, void *to, ssize_t n)); +# endif +# endif +_GL_CXXALIASWARN (swab); +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlink +# define symlink rpl_symlink +# endif +_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); +# else +# if !1 +_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); +# endif +_GL_CXXALIASWARN (symlink); +#elif defined GNULIB_POSIXCHECK +# undef symlink +# if HAVE_RAW_DECL_SYMLINK +_GL_WARN_ON_USE (symlink, "symlink is not portable - " + "use gnulib module symlink for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlinkat +# define symlinkat rpl_symlinkat +# endif +_GL_FUNCDECL_RPL (symlinkat, int, + (char const *contents, int fd, char const *file) + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (symlinkat, int, + (char const *contents, int fd, char const *file)); +# else +# if !1 +_GL_FUNCDECL_SYS (symlinkat, int, + (char const *contents, int fd, char const *file) + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (symlinkat, int, + (char const *contents, int fd, char const *file)); +# endif +_GL_CXXALIASWARN (symlinkat); +#elif defined GNULIB_POSIXCHECK +# undef symlinkat +# if HAVE_RAW_DECL_SYMLINKAT +_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " + "use gnulib module symlinkat for portability"); +# endif +#endif + + +#if 0 +/* Change the size of the file designated by FILENAME to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef truncate +# define truncate rpl_truncate +# endif +_GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); +# else +# if !1 +_GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); +# endif +_GL_CXXALIASWARN (truncate); +#elif defined GNULIB_POSIXCHECK +# undef truncate +# if HAVE_RAW_DECL_TRUNCATE +_GL_WARN_ON_USE (truncate, "truncate is unportable - " + "use gnulib module truncate for portability"); +# endif +#endif + + +#if 0 +/* Store at most BUFLEN characters of the pathname of the terminal FD is + open on in BUF. Return 0 on success, otherwise an error number. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ttyname_r +# define ttyname_r rpl_ttyname_r +# endif +_GL_FUNCDECL_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# else +# if !1 +_GL_FUNCDECL_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# endif +_GL_CXXALIASWARN (ttyname_r); +#elif defined GNULIB_POSIXCHECK +# undef ttyname_r +# if HAVE_RAW_DECL_TTYNAME_R +_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " + "use gnulib module ttyname_r for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink rpl_unlink +# endif +_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unlink, int, (char const *file)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink _unlink +# endif +_GL_CXXALIAS_MDA (unlink, int, (char const *file)); +# else +_GL_CXXALIAS_SYS (unlink, int, (char const *file)); +# endif +_GL_CXXALIASWARN (unlink); +#elif defined GNULIB_POSIXCHECK +# undef unlink +# if HAVE_RAW_DECL_UNLINK +_GL_WARN_ON_USE (unlink, "unlink is not portable - " + "use gnulib module unlink for portability"); +# endif +#elif 1 +/* On native Windows, map 'unlink' to '_unlink', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::unlink always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink _unlink +# endif +_GL_CXXALIAS_MDA (unlink, int, (char const *file)); +# else +_GL_CXXALIAS_SYS (unlink, int, (char const *file)); +# endif +_GL_CXXALIASWARN (unlink); +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlinkat +# define unlinkat rpl_unlinkat +# endif +_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); +# endif +_GL_CXXALIASWARN (unlinkat); +#elif defined GNULIB_POSIXCHECK +# undef unlinkat +# if HAVE_RAW_DECL_UNLINKAT +_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " + "use gnulib module unlinkat for portability"); +# endif +#endif + + +#if 0 +/* Pause the execution of the current thread for N microseconds. + Returns 0 on completion, or -1 on range error. + See the POSIX:2001 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef usleep +# define usleep rpl_usleep +# endif +_GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); +_GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); +# endif +/* Need to cast, because on Haiku, the first parameter is + unsigned int n. */ +_GL_CXXALIAS_SYS_CAST (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIASWARN (usleep); +#elif defined GNULIB_POSIXCHECK +# undef usleep +# if HAVE_RAW_DECL_USLEEP +_GL_WARN_ON_USE (usleep, "usleep is unportable - " + "use gnulib module usleep for portability"); +# endif +#endif + + +#if 0 +/* Write up to COUNT bytes starting at BUF to file descriptor FD. + See the POSIX:2008 specification + . */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write rpl_write +# endif +_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); +# elif defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write _write +# endif +_GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, size_t count)); +# else +_GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (write); +#elif 1 +/* On native Windows, map 'write' to '_write', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::write always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write _write +# endif +# ifdef __MINGW32__ +_GL_CXXALIAS_MDA (write, int, (int fd, const void *buf, unsigned int count)); +# else +_GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, unsigned int count)); +# endif +# else +_GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (write); +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_UNISTD_H */ +#endif /* _GL_INCLUDING_UNISTD_H */ +#endif /* _GL_UNISTD_H */ diff --git a/jni/parted/libiconv/srclib/unitypes.h b/jni/parted/libiconv/srclib/unitypes.h new file mode 100755 index 0000000..6eaab1c --- /dev/null +++ b/jni/parted/libiconv/srclib/unitypes.h @@ -0,0 +1,62 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Elementary types and macros for the GNU UniString library. + Copyright (C) 2002, 2005-2006, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNITYPES_H +#define _UNITYPES_H + +/* Get uint8_t, uint16_t, uint32_t. */ +#include + +/* Type representing a Unicode character. */ +typedef uint32_t ucs4_t; + +/* Attribute of a function whose result depends only on the arguments + (not pointers!) and which has no side effects. */ +#ifndef _UC_ATTRIBUTE_CONST +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) || defined __clang__ +# define _UC_ATTRIBUTE_CONST __attribute__ ((__const__)) +# else +# define _UC_ATTRIBUTE_CONST +# endif +#endif + +/* Attribute of a function whose result depends only on the arguments + (possibly pointers) and global memory, and which has no side effects. */ +#ifndef _UC_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _UC_ATTRIBUTE_PURE +# endif +#endif + +/* Qualifier in a function declaration, that asserts that the caller must + pass a pointer to a different object in the specified pointer argument + than in the other pointer arguments. */ +#ifndef _UC_RESTRICT +# if defined __restrict \ + || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ + || __clang_major__ >= 3 +# define _UC_RESTRICT __restrict +# elif 199901L <= __STDC_VERSION__ || defined restrict +# define _UC_RESTRICT restrict +# else +# define _UC_RESTRICT +# endif +#endif + +#endif /* _UNITYPES_H */ diff --git a/jni/parted/libiconv/srclib/uniwidth.h b/jni/parted/libiconv/srclib/uniwidth.h new file mode 100755 index 0000000..b3b35a7 --- /dev/null +++ b/jni/parted/libiconv/srclib/uniwidth.h @@ -0,0 +1,73 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Display width functions. + Copyright (C) 2001-2002, 2005, 2007, 2009-2022 Free Software Foundation, + Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNIWIDTH_H +#define _UNIWIDTH_H + +#include "unitypes.h" + +/* Get size_t. */ +#include + +/* Get locale_charset() declaration. */ +#include "localcharset.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Display width. */ + +/* These functions are locale dependent. The encoding argument identifies + the encoding (e.g. "ISO-8859-2" for Polish). */ + +/* Determine number of column positions required for UC. */ +extern int + uc_width (ucs4_t uc, const char *encoding) + _UC_ATTRIBUTE_PURE; + +/* Determine number of column positions required for first N units + (or fewer if S ends before this) in S. */ +extern int + u8_width (const uint8_t *s, size_t n, const char *encoding) + _UC_ATTRIBUTE_PURE; +extern int + u16_width (const uint16_t *s, size_t n, const char *encoding) + _UC_ATTRIBUTE_PURE; +extern int + u32_width (const uint32_t *s, size_t n, const char *encoding) + _UC_ATTRIBUTE_PURE; + +/* Determine number of column positions required for S. */ +extern int + u8_strwidth (const uint8_t *s, const char *encoding) + _UC_ATTRIBUTE_PURE; +extern int + u16_strwidth (const uint16_t *s, const char *encoding) + _UC_ATTRIBUTE_PURE; +extern int + u32_strwidth (const uint32_t *s, const char *encoding) + _UC_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + +#endif /* _UNIWIDTH_H */ diff --git a/jni/parted/libiconv/srclib/uniwidth/.dirstamp b/jni/parted/libiconv/srclib/uniwidth/.dirstamp new file mode 100755 index 0000000..e69de29 diff --git a/jni/parted/libiconv/srclib/uniwidth/cjk.h b/jni/parted/libiconv/srclib/uniwidth/cjk.h new file mode 100755 index 0000000..b791ba9 --- /dev/null +++ b/jni/parted/libiconv/srclib/uniwidth/cjk.h @@ -0,0 +1,37 @@ +/* Test for CJK encoding. + Copyright (C) 2001-2002, 2005-2007, 2009-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include "streq.h" + +static int +is_cjk_encoding (const char *encoding) +{ + if (0 + /* Legacy Japanese encodings */ + || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0) + /* Legacy Chinese encodings */ + || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0) + || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0) + || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0) + /* Legacy Korean encodings */ + || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0) + || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0)) + return 1; + return 0; +} diff --git a/jni/parted/libiconv/srclib/uniwidth/width.c b/jni/parted/libiconv/srclib/uniwidth/width.c new file mode 100755 index 0000000..1c945a8 --- /dev/null +++ b/jni/parted/libiconv/srclib/uniwidth/width.c @@ -0,0 +1,95 @@ +/* Determine display width of Unicode character. + Copyright (C) 2001-2002, 2006-2022 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwidth.h" + +#include "cjk.h" + +/* The non-spacing attribute table consists of: + * Non-spacing characters; generated from PropList.txt or + "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt" + * Format control characters; generated from + "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" + * Zero width characters; generated from + "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt" + * Hangul Jamo characters that have conjoining behaviour: + - jungseong = syllable-middle vowels + - jongseong = syllable-final consonants + Rationale: + 1) These characters act like combining characters. They have no + equivalent in legacy character sets. Therefore the EastAsianWidth.txt + file does not really matter for them; UAX #11 East Asian Width + makes it clear that it focus + is on compatibility with traditional Japanese layout. + By contrast, the same glyphs without conjoining behaviour are available + in the U+3130..U+318F block, and these characters are mapped to legacy + character sets, and traditional Japanese layout matters for them. + 2) glibc does the same thing, see + + + */ +#include "uniwidth/width0.h" + +#include "uniwidth/width2.h" +#include "unictype/bitmap.h" + +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + + +/* Determine number of column positions required for UC. */ +int +uc_width (ucs4_t uc, const char *encoding) +{ + /* Test for non-spacing or control character. */ + if ((uc >> 9) < SIZEOF (nonspacing_table_ind)) + { + int ind = nonspacing_table_ind[uc >> 9]; + if (ind >= 0) + if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1) + { + if (uc > 0 && uc < 0xa0) + return -1; + else + return 0; + } + } + else if ((uc >> 9) == (0xe0000 >> 9)) + { + if (uc >= 0xe0100) + { + if (uc <= 0xe01ef) + return 0; + } + else + { + if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001) + return 0; + } + } + /* Test for double-width character. */ + if (bitmap_lookup (&u_width2, uc)) + return 2; + /* In ancient CJK encodings, Cyrillic and most other characters are + double-width as well. */ + if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9 + && is_cjk_encoding (encoding)) + return 2; + return 1; +} diff --git a/jni/parted/libiconv/srclib/uniwidth/width0.h b/jni/parted/libiconv/srclib/uniwidth/width0.h new file mode 100755 index 0000000..eda0a1d --- /dev/null +++ b/jni/parted/libiconv/srclib/uniwidth/width0.h @@ -0,0 +1,485 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Table of non-spacing or control characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 14.0.0. */ + +/* Copyright (C) 2000-2022 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +static const unsigned char nonspacing_table_data[47*64] = { + /* 0x0000-0x01ff */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */ + /* 0x0200-0x03ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */ + /* 0x0400-0x05ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */ + 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */ + 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */ + 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */ + /* 0x0600-0x07ff */ + 0x3f, 0x00, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ + 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */ + 0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ + 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x20, /* 0x07c0-0x07ff */ + /* 0x0800-0x09ff */ + 0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */ + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */ + 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ + 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08c0-0x08ff */ + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */ + 0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x40, /* 0x09c0-0x09ff */ + /* 0x0a00-0x0bff */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */ + 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */ + 0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xfc, /* 0x0ac0-0x0aff */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */ + 0x1e, 0x20, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */ + 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */ + /* 0x0c00-0x0dff */ + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, /* 0x0c00-0x0c3f */ + 0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */ + 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, /* 0x0d00-0x0d3f */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */ + 0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */ + /* 0x0e00-0x0fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */ + 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1f, /* 0x0e80-0x0ebf */ + 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */ + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */ + 0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */ + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */ + /* 0x1000-0x11ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */ + 0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */ + 0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x1140-0x117f */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x1180-0x11bf */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x11c0-0x11ff */ + /* 0x1200-0x13ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */ + 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */ + /* 0x1600-0x17ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */ + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1700-0x173f */ + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */ + 0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */ + /* 0x1800-0x19ff */ + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */ + 0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */ + /* 0x1a00-0x1bff */ + 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */ + 0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x1a80-0x1abf */ + 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */ + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */ + 0x03, 0x00, 0x00, 0x00, 0x3c, 0x3b, 0x00, 0x00, /* 0x1b80-0x1bbf */ + 0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */ + /* 0x1c00-0x1dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */ + 0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x10, 0x03, /* 0x1cc0-0x1cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x1dc0-0x1dff */ + /* 0x2000-0x21ff */ + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */ + 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x00, 0x00, /* 0x2040-0x207f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */ + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */ + /* 0x2c00-0x2dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */ + /* 0x3000-0x31ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x3000-0x303f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */ + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */ + /* 0xa600-0xa7ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf7, 0x3f, /* 0xa640-0xa67f */ + 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */ + /* 0xa800-0xa9ff */ + 0x44, 0x08, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, /* 0xa800-0xa83f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */ + 0x30, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x80, /* 0xa8c0-0xa8ff */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */ + 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */ + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x33, /* 0xa980-0xa9bf */ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */ + /* 0xaa00-0xabff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */ + 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0xaa40-0xaa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, /* 0xaac0-0xaaff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */ + /* 0xd600-0xd7ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd600-0xd63f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd640-0xd67f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd680-0xd6bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd6c0-0xd6ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd700-0xd73f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd740-0xd77f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0xd780-0xd7bf */ + 0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, /* 0xd7c0-0xd7ff */ + /* 0xfa00-0xfbff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */ + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */ + /* 0xfe00-0xffff */ + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, /* 0xfe00-0xfe3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */ + /* 0x10000-0x101ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */ + /* 0x10200-0x103ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10200-0x1023f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10240-0x1027f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10280-0x102bf */ + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, /* 0x102c0-0x102ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10300-0x1033f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x10340-0x1037f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10380-0x103bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x103c0-0x103ff */ + /* 0x10a00-0x10bff */ + 0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */ + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */ + /* 0x10c00-0x10dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c00-0x10c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c40-0x10c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c80-0x10cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10cc0-0x10cff */ + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, /* 0x10d00-0x10d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10d40-0x10d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10d80-0x10dbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10dc0-0x10dff */ + /* 0x10e00-0x10fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10e00-0x10e3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10e40-0x10e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, /* 0x10e80-0x10ebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ec0-0x10eff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10f00-0x10f3f */ + 0xc0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10f40-0x10f7f */ + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10f80-0x10fbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10fc0-0x10fff */ + /* 0x11000-0x111ff */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */ + 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80, /* 0x11040-0x1107f */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */ + 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */ + 0x07, 0x00, 0x00, 0x00, 0x80, 0xef, 0x1f, 0x00, /* 0x11100-0x1113f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0x11140-0x1117f */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, /* 0x11180-0x111bf */ + 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */ + /* 0x11200-0x113ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xd3, 0x40, /* 0x11200-0x1123f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11240-0x1127f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11280-0x112bf */ + 0x00, 0x00, 0x00, 0x80, 0xf8, 0x07, 0x00, 0x00, /* 0x112c0-0x112ff */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, /* 0x11300-0x1133f */ + 0x01, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x1f, 0x00, /* 0x11340-0x1137f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11380-0x113bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x113c0-0x113ff */ + /* 0x11400-0x115ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11400-0x1143f */ + 0x5c, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0x11440-0x1147f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, /* 0x11480-0x114bf */ + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x114c0-0x114ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11500-0x1153f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11540-0x1157f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xb0, /* 0x11580-0x115bf */ + 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, /* 0x115c0-0x115ff */ + /* 0x11600-0x117ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xa7, /* 0x11600-0x1163f */ + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11640-0x1167f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbf, 0x00, /* 0x11680-0x116bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x116c0-0x116ff */ + 0x00, 0x00, 0x00, 0xe0, 0xbc, 0x0f, 0x00, 0x00, /* 0x11700-0x1173f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11740-0x1177f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11780-0x117bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x117c0-0x117ff */ + /* 0x11800-0x119ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x06, /* 0x11800-0x1183f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11840-0x1187f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11880-0x118bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118c0-0x118ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, /* 0x11900-0x1193f */ + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11940-0x1197f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11980-0x119bf */ + 0x00, 0x00, 0xf0, 0x0c, 0x01, 0x00, 0x00, 0x00, /* 0x119c0-0x119ff */ + /* 0x11a00-0x11bff */ + 0x7e, 0x06, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x79, /* 0x11a00-0x11a3f */ + 0x80, 0x00, 0x7e, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x11a40-0x11a7f */ + 0x00, 0xfc, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0x11a80-0x11abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11ac0-0x11aff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11b00-0x11b3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11b40-0x11b7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11b80-0x11bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11bc0-0x11bff */ + /* 0x11c00-0x11dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, /* 0x11c00-0x11c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c40-0x11c7f */ + 0x00, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0x6d, 0x00, /* 0x11c80-0x11cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11cc0-0x11cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xb4, /* 0x11d00-0x11d3f */ + 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d40-0x11d7f */ + 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d80-0x11dbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11dc0-0x11dff */ + /* 0x11e00-0x11fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11e00-0x11e3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11e40-0x11e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11e80-0x11ebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, /* 0x11ec0-0x11eff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11f00-0x11f3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11f40-0x11f7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11f80-0x11fbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11fc0-0x11fff */ + /* 0x13400-0x135ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, /* 0x13400-0x1343f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13440-0x1347f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13480-0x134bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x134c0-0x134ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13500-0x1353f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13540-0x1357f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13580-0x135bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x135c0-0x135ff */ + /* 0x16a00-0x16bff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a00-0x16a3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a40-0x16a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a80-0x16abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, /* 0x16ac0-0x16aff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x16b00-0x16b3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b40-0x16b7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b80-0x16bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16bc0-0x16bff */ + /* 0x16e00-0x16fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e00-0x16e3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e40-0x16e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e80-0x16ebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16ec0-0x16eff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f00-0x16f3f */ + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f40-0x16f7f */ + 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f80-0x16fbf */ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, /* 0x16fc0-0x16fff */ + /* 0x1bc00-0x1bdff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc00-0x1bc3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc40-0x1bc7f */ + 0x00, 0x00, 0x00, 0x60, 0x0f, 0x00, 0x00, 0x00, /* 0x1bc80-0x1bcbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bcc0-0x1bcff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd00-0x1bd3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd40-0x1bd7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd80-0x1bdbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bdc0-0x1bdff */ + /* 0x1ce00-0x1cfff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ce00-0x1ce3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ce40-0x1ce7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ce80-0x1cebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cec0-0x1ceff */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, /* 0x1cf00-0x1cf3f */ + 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cf40-0x1cf7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cf80-0x1cfbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cfc0-0x1cfff */ + /* 0x1d000-0x1d1ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */ + 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */ + /* 0x1d200-0x1d3ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */ + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d3c0-0x1d3ff */ + /* 0x1da00-0x1dbff */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, /* 0x1da00-0x1da3f */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x20, 0x00, /* 0x1da40-0x1da7f */ + 0x10, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x00, 0x00, /* 0x1da80-0x1dabf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dac0-0x1daff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db00-0x1db3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db40-0x1db7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db80-0x1dbbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dbc0-0x1dbff */ + /* 0x1e000-0x1e1ff */ + 0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, 0x00, 0x00, /* 0x1e000-0x1e03f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e040-0x1e07f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e080-0x1e0bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0c0-0x1e0ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x1e100-0x1e13f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e140-0x1e17f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e180-0x1e1bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e1c0-0x1e1ff */ + /* 0x1e200-0x1e3ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e200-0x1e23f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e240-0x1e27f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, /* 0x1e280-0x1e2bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, /* 0x1e2c0-0x1e2ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e300-0x1e33f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e340-0x1e37f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e380-0x1e3bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e3c0-0x1e3ff */ + /* 0x1e800-0x1e9ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e800-0x1e83f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e840-0x1e87f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e880-0x1e8bf */ + 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8c0-0x1e8ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e900-0x1e93f */ + 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e940-0x1e97f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e980-0x1e9bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x1e9c0-0x1e9ff */ +}; +static const signed char nonspacing_table_ind[248] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* 0x0000-0x0fff */ + 8, 9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */ + 14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */ + 16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */ + -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */ + -1, -1, -1, 20, -1, -1, -1, -1, /* 0xd000-0xdfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */ + -1, -1, -1, -1, -1, 21, -1, 22, /* 0xf000-0xffff */ + 23, 24, -1, -1, -1, 25, 26, 27, /* 0x10000-0x10fff */ + 28, 29, 30, 31, 32, 33, 34, 35, /* 0x11000-0x11fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */ + -1, -1, 36, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */ + -1, -1, -1, -1, -1, 37, -1, 38, /* 0x16000-0x16fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */ + -1, -1, -1, -1, -1, -1, 39, -1, /* 0x1b000-0x1bfff */ + -1, -1, -1, -1, -1, -1, -1, 40, /* 0x1c000-0x1cfff */ + 41, 42, -1, -1, -1, 43, -1, -1, /* 0x1d000-0x1dfff */ + 44, 45, -1, -1, 46, -1, -1, -1 /* 0x1e000-0x1efff */ +}; diff --git a/jni/parted/libiconv/srclib/uniwidth/width2.h b/jni/parted/libiconv/srclib/uniwidth/width2.h new file mode 100755 index 0000000..25364d3 --- /dev/null +++ b/jni/parted/libiconv/srclib/uniwidth/width2.h @@ -0,0 +1,549 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Width 2 property of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 14.0.0. */ + +/* Copyright (C) 2000-2022 Free Software Foundation, Inc. + + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 + Lesser General Public License and the GNU General Public License + for more details. + + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ + +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[4]; + short level2[3 << 7]; + unsigned int level3[28 << 4]; + } +u_width2 = +{ + { 4 }, + { + 5 * sizeof (int) / sizeof (short) + 0, + 5 * sizeof (int) / sizeof (short) + 128, + 5 * sizeof (int) / sizeof (short) + 256, + 5 * sizeof (int) / sizeof (short) + 256 + }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 16, + 5 + 384 * sizeof (short) / sizeof (int) + 32, + 5 + 384 * sizeof (short) / sizeof (int) + 48, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 64, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 80, + 5 + 384 * sizeof (short) / sizeof (int) + 96, + 5 + 384 * sizeof (short) / sizeof (int) + 112, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 144, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 160, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 176, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 208, + 5 + 384 * sizeof (short) / sizeof (int) + 224, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 256, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 272, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 304, + 5 + 384 * sizeof (short) / sizeof (int) + 320, + 5 + 384 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 352, + 5 + 384 * sizeof (short) / sizeof (int) + 368, + 5 + 384 * sizeof (short) / sizeof (int) + 384, + 5 + 384 * sizeof (short) / sizeof (int) + 400, + 5 + 384 * sizeof (short) / sizeof (int) + 416, + 5 + 384 * sizeof (short) / sizeof (int) + 432, + -1, + -1, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128, + 5 + 384 * sizeof (short) / sizeof (int) + 128 + }, + { + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x0C000000U, 0x00000600U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00091E00U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, + 0x00300000U, 0x00000000U, 0x000FFF00U, 0x80000000U, + 0x00080000U, 0x60000C02U, 0x00104030U, 0x242C0400U, + 0x00000C20U, 0x00000100U, 0x00B85000U, 0x00000000U, + 0x00E00000U, 0x80010000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x18000000U, 0x00000000U, 0x00210000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFF0000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x0000FFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000001U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x0000007FU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x0003000FU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, + 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x6FEF0000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0x00000007U, 0x00070000U, 0xFFFF00F0U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x07FE4000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFBFE001U, 0xFFFFFFFFU, 0xDFFFFFFFU, + 0x000FFFFFU, 0xFFFFFFFFU, 0x000F87FFU, 0xFF11FFFFU, + 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFDU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FFFFFFFU, + 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF7800U, 0x040000FFU, + 0x00600000U, 0x00000010U, 0x00000000U, 0xF8000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE0E7103FU, 0x1FF01800U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00010FFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0xFFFFF000U, 0xF7FFFFFFU, 0xFFFFFFBFU, 0xFFFFFFFFU, + 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x1F1F0000U, + 0xFFFF007FU, 0x07FF1FFFU, 0x03FF003FU, 0x007F00FFU, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U + } +}; diff --git a/jni/parted/libiconv/srclib/unlocked-io.h b/jni/parted/libiconv/srclib/unlocked-io.h new file mode 100755 index 0000000..7461d74 --- /dev/null +++ b/jni/parted/libiconv/srclib/unlocked-io.h @@ -0,0 +1,136 @@ +/* Prefer faster, non-thread-safe stdio functions if available. + + Copyright (C) 2001-2004, 2009-2022 Free Software Foundation, Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering. */ + +#ifndef UNLOCKED_IO_H +# define UNLOCKED_IO_H 1 + +/* These are wrappers for functions/macros from the GNU C library, and + from other C libraries supporting POSIX's optional thread-safe functions. + + The standard I/O functions are thread-safe. These *_unlocked ones are + more efficient but not thread-safe. That they're not thread-safe is + fine since all of the applications in this package are single threaded. + + Also, some code that is shared with the GNU C library may invoke + the *_unlocked functions directly. On hosts that lack those + functions, invoke the non-thread-safe versions instead. */ + +# include + +# if HAVE_DECL_CLEARERR_UNLOCKED || defined clearerr_unlocked +# undef clearerr +# define clearerr(x) clearerr_unlocked (x) +# else +# define clearerr_unlocked(x) clearerr (x) +# endif + +# if HAVE_DECL_FEOF_UNLOCKED || defined feof_unlocked +# undef feof +# define feof(x) feof_unlocked (x) +# else +# define feof_unlocked(x) feof (x) +# endif + +# if HAVE_DECL_FERROR_UNLOCKED || defined ferror_unlocked +# undef ferror +# define ferror(x) ferror_unlocked (x) +# else +# define ferror_unlocked(x) ferror (x) +# endif + +# if HAVE_DECL_FFLUSH_UNLOCKED || defined fflush_unlocked +# undef fflush +# define fflush(x) fflush_unlocked (x) +# else +# define fflush_unlocked(x) fflush (x) +# endif + +# if HAVE_DECL_FGETS_UNLOCKED || defined fgets_unlocked +# undef fgets +# define fgets(x,y,z) fgets_unlocked (x,y,z) +# else +# define fgets_unlocked(x,y,z) fgets (x,y,z) +# endif + +# if HAVE_DECL_FPUTC_UNLOCKED || defined fputc_unlocked +# undef fputc +# define fputc(x,y) fputc_unlocked (x,y) +# else +# define fputc_unlocked(x,y) fputc (x,y) +# endif + +# if HAVE_DECL_FPUTS_UNLOCKED || defined fputs_unlocked +# undef fputs +# define fputs(x,y) fputs_unlocked (x,y) +# else +# define fputs_unlocked(x,y) fputs (x,y) +# endif + +# if HAVE_DECL_FREAD_UNLOCKED || defined fread_unlocked +# undef fread +# define fread(w,x,y,z) fread_unlocked (w,x,y,z) +# else +# define fread_unlocked(w,x,y,z) fread (w,x,y,z) +# endif + +# if HAVE_DECL_FWRITE_UNLOCKED || defined fwrite_unlocked +# undef fwrite +# define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z) +# else +# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) +# endif + +# if HAVE_DECL_GETC_UNLOCKED || defined get_unlocked +# undef getc +# define getc(x) getc_unlocked (x) +# else +# define getc_unlocked(x) getc (x) +# endif + +# if HAVE_DECL_GETCHAR_UNLOCKED || defined getchar_unlocked +# undef getchar +# define getchar() getchar_unlocked () +# else +# define getchar_unlocked() getchar () +# endif + +# if HAVE_DECL_PUTC_UNLOCKED || defined putc_unlocked +# undef putc +# define putc(x,y) putc_unlocked (x,y) +# else +# define putc_unlocked(x,y) putc (x,y) +# endif + +# if HAVE_DECL_PUTCHAR_UNLOCKED || defined putchar_unlocked +# undef putchar +# define putchar(x) putchar_unlocked (x) +# else +# define putchar_unlocked(x) putchar (x) +# endif + +# undef flockfile +# define flockfile(x) ((void) 0) + +# undef ftrylockfile +# define ftrylockfile(x) 0 + +# undef funlockfile +# define funlockfile(x) ((void) 0) + +#endif /* UNLOCKED_IO_H */ diff --git a/jni/parted/libiconv/srclib/verify.h b/jni/parted/libiconv/srclib/verify.h new file mode 100755 index 0000000..c5c63ae --- /dev/null +++ b/jni/parted/libiconv/srclib/verify.h @@ -0,0 +1,318 @@ +/* Compile-time assert-like macros. + + Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef _GL_VERIFY_H +#define _GL_VERIFY_H + + +/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC) + works as per C11. This is supported by GCC 4.6.0+ and by clang 4+. + + Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as + per C2x. This is supported by GCC 9.1+. + + Support compilers claiming conformance to the relevant standard, + and also support GCC when not pedantic. If we were willing to slow + 'configure' down we could also use it with other compilers, but + since this affects only the quality of diagnostics, why bother? */ +#ifndef __cplusplus +# if (201112L <= __STDC_VERSION__ \ + || (!defined __STRICT_ANSI__ \ + && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 5 <= __clang_major__))) +# define _GL_HAVE__STATIC_ASSERT 1 +# endif +# if (202000L <= __STDC_VERSION__ \ + || (!defined __STRICT_ANSI__ && 9 <= __GNUC__)) +# define _GL_HAVE__STATIC_ASSERT1 1 +# endif +#endif + +/* FreeBSD 9.1 , included by and lots of other + system headers, defines a conflicting _Static_assert that is no + better than ours; override it. */ +#ifndef _GL_HAVE__STATIC_ASSERT +# include +# undef _Static_assert +#endif + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + If _Static_assert works, verify (R) uses it directly. Similarly, + _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct + that is an operand of sizeof. + + The code below uses several ideas for C++ compilers, and for C + compilers that do not support _Static_assert: + + * The first step is ((R) ? 1 : -1). Given an expression R, of + integral or boolean or floating-point type, this yields an + expression of integral type, whose value is later verified to be + constant and nonnegative. + + * Next this expression W is wrapped in a type + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: W; + }. + If W is negative, this yields a compile-time error. No compiler can + deal with a bit-field of negative size. + + One might think that an array size check would have the same + effect, that is, that the type struct { unsigned int dummy[W]; } + would work as well. However, inside a function, some compilers + (such as C++ compilers and GNU C) allow local parameters and + variables inside array size expressions. With these compilers, + an array size check would not properly diagnose this misuse of + the verify macro: + + void function (int n) { verify (n < 0); } + + * For the verify macro, the struct _gl_verify_type will need to + somehow be embedded into a declaration. To be portable, this + declaration must declare an object, a constant, a function, or a + typedef name. If the declared entity uses the type directly, + such as in + + struct dummy {...}; + typedef struct {...} dummy; + extern struct {...} *dummy; + extern void dummy (struct {...} *); + extern struct {...} *dummy (void); + + two uses of the verify macro would yield colliding declarations + if the entity names are not disambiguated. A workaround is to + attach the current line number to the entity name: + + #define _GL_CONCAT0(x, y) x##y + #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) + extern struct {...} * _GL_CONCAT (dummy, __LINE__); + + But this has the problem that two invocations of verify from + within the same macro would collide, since the __LINE__ value + would be the same for both invocations. (The GCC __COUNTER__ + macro solves this problem, but is not portable.) + + A solution is to use the sizeof operator. It yields a number, + getting rid of the identity of the type. Declarations like + + extern int dummy [sizeof (struct {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + + can be repeated. + + * Should the implementation use a named struct or an unnamed struct? + Which of the following alternatives can be used? + + extern int dummy [sizeof (struct {...})]; + extern int dummy [sizeof (struct _gl_verify_type {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern void dummy (int [sizeof (struct _gl_verify_type {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; + + In the second and sixth case, the struct type is exported to the + outer scope; two such declarations therefore collide. GCC warns + about the first, third, and fourth cases. So the only remaining + possibility is the fifth case: + + extern int (*dummy (void)) [sizeof (struct {...})]; + + * GCC warns about duplicate declarations of the dummy function if + -Wredundant-decls is used. GCC 4.3 and later have a builtin + __COUNTER__ macro that can let us generate unique identifiers for + each dummy function, to suppress this warning. + + * This implementation exploits the fact that older versions of GCC, + which do not support _Static_assert, also do not warn about the + last declaration mentioned above. + + * GCC warns if -Wnested-externs is enabled and 'verify' is used + within a function body; but inside a function, you can always + arrange to use verify_expr instead. + + * In C++, any struct definition inside sizeof is invalid. + Use a template type to work around the problem. */ + +/* Concatenate two preprocessor tokens. */ +#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) +#define _GL_CONCAT0(x, y) x##y + +/* _GL_COUNTER is an integer, preferably one that changes each time we + use it. Use __COUNTER__ if it works, falling back on __LINE__ + otherwise. __LINE__ isn't perfect, but it's better than a + constant. */ +#if defined __COUNTER__ && __COUNTER__ != __COUNTER__ +# define _GL_COUNTER __COUNTER__ +#else +# define _GL_COUNTER __LINE__ +#endif + +/* Generate a symbol with the given prefix, making it unique if + possible. */ +#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) + +/* Verify requirement R at compile-time, as an integer constant expression + that returns 1. If R is false, fail at compile-time, preferably + with a diagnostic that includes the string-literal DIAGNOSTIC. */ + +#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ + (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) + +#ifdef __cplusplus +# if !GNULIB_defined_struct__gl_verify_type +template + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: w; + }; +# define GNULIB_defined_struct__gl_verify_type 1 +# endif +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + _gl_verify_type<(R) ? 1 : -1> +#elif defined _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { \ + _Static_assert (R, DIAGNOSTIC); \ + int _gl_dummy; \ + } +#else +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } +#endif + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. If R is false, fail at compile-time. + + This macro requires three or more arguments but uses at most the first + two, so that the _Static_assert macro optionally defined below supports + both the C11 two-argument syntax and the C2x one-argument syntax. + + Unfortunately, unlike C11, this implementation must appear as an + ordinary declaration, and cannot appear inside struct { ... }. */ + +#if 200410 <= __cpp_static_assert +# define _GL_VERIFY(R, DIAGNOSTIC, ...) static_assert (R, DIAGNOSTIC) +#elif defined _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC) +#else +# define _GL_VERIFY(R, DIAGNOSTIC, ...) \ + extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ + [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] +# if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) +# pragma GCC diagnostic ignored "-Wnested-externs" +# endif +#endif + +/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ +#ifdef _GL_STATIC_ASSERT_H +# if !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert +# define _Static_assert(...) \ + _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) +# endif +# if __cpp_static_assert < 201411 && !defined static_assert +# define static_assert _Static_assert /* C11 requires this #define. */ +# endif +#endif + +/* @assert.h omit start@ */ + +#if 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) +# define _GL_HAS_BUILTIN_TRAP 1 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap) +#else +# define _GL_HAS_BUILTIN_TRAP 0 +#endif + +#if 4 < __GNUC__ + (5 <= __GNUC_MINOR__) +# define _GL_HAS_BUILTIN_UNREACHABLE 1 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) +#else +# define _GL_HAS_BUILTIN_UNREACHABLE 0 +#endif + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + There are two macros, since no single macro can be used in all + contexts in C. verify_expr (R, E) is for scalar contexts, including + integer constant expression contexts. verify (R) is for declaration + contexts, e.g., the top level. */ + +/* Verify requirement R at compile-time. Return the value of the + expression E. */ + +#define verify_expr(R, E) \ + (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. verify (R) acts like static_assert (R) except that + it is portable to C11/C++14 and earlier, it can issue better + diagnostics, and its name is shorter and may be more convenient. */ + +#ifdef __PGI +/* PGI barfs if R is long. */ +# define verify(R) _GL_VERIFY (R, "verify (...)", -) +#else +# define verify(R) _GL_VERIFY (R, "verify (" #R ")", -) +#endif + +/* Assume that R always holds. Behavior is undefined if R is false, + fails to evaluate, or has side effects. + + 'assume (R)' is a directive from the programmer telling the + compiler that R is true so the compiler needn't generate code to + test R. This is why 'assume' is in verify.h: it's related to + static checking (in this case, static checking done by the + programmer), not dynamic checking. + + 'assume (R)' can affect compilation of all the code, not just code + that happens to be executed after the assume (R) is "executed". + For example, if the code mistakenly does 'assert (R); assume (R);' + the compiler is entitled to optimize away the 'assert (R)'. + + Although assuming R can help a compiler generate better code or + diagnostics, performance can suffer if R uses hard-to-optimize + features such as function calls not inlined by the compiler. + + Avoid Clang's __builtin_assume, as it breaks GNU Emacs master + as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see + . It's not known whether this breakage + is a Clang bug or an Emacs bug; play it safe for now. */ + +#if _GL_HAS_BUILTIN_UNREACHABLE +# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) +#elif 1200 <= _MSC_VER +# define assume(R) __assume (R) +#elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP + /* Doing it this way helps various packages when configured with + --enable-gcc-warnings, which compiles with -Dlint. It's nicer + when 'assume' silences warnings even with older GCCs. */ +# define assume(R) ((R) ? (void) 0 : __builtin_trap ()) +#else + /* Some tools grok NOTREACHED, e.g., Oracle Studio 12.6. */ +# define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0) +#endif + +/* @assert.h omit end@ */ + +#endif diff --git a/jni/parted/libiconv/srclib/warn-on-use.h b/jni/parted/libiconv/srclib/warn-on-use.h new file mode 100755 index 0000000..94f5b92 --- /dev/null +++ b/jni/parted/libiconv/srclib/warn-on-use.h @@ -0,0 +1,149 @@ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif diff --git a/jni/parted/libiconv/srclib/wchar.h b/jni/parted/libiconv/srclib/wchar.h new file mode 100755 index 0000000..a8321a4 --- /dev/null +++ b/jni/parted/libiconv/srclib/wchar.h @@ -0,0 +1,1845 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute for ISO C99 , for platforms that have issues. + + Copyright (C) 2007-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake. */ + +/* + * ISO C 99 for platforms that have issues. + * + * + * For now, this just ensures proper prerequisite inclusion order and + * the declaration of wcwidth(). + */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if (((defined __need_mbstate_t || defined __need_wint_t) \ + && !defined __MINGW32__) \ + || (defined __hpux \ + && ((defined _INTTYPES_INCLUDED \ + && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H) \ + || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ + || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ + || defined _GL_ALREADY_INCLUDING_WCHAR_H) +/* Special invocation convention: + - Inside glibc and uClibc header files, but not MinGW. + - On HP-UX 11.00 we have a sequence of nested includes + -> -> , and the latter includes , + once indirectly -> -> -> + and once directly. In both situations 'wint_t' is not yet defined, + therefore we cannot provide the function overrides; instead include only + the system's . + - With MinGW 3.22, when includes , only some part of + is actually processed, and that doesn't include 'mbstate_t'. + - On IRIX 6.5, similarly, we have an include -> , and + the latter includes . But here, we have no way to detect whether + is completely included or is still being included. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_WCHAR_H + +#define _GL_ALREADY_INCLUDING_WCHAR_H + +#if 1 +# include /* for __GLIBC__ */ +#endif + +/* In some builds of uClibc, is nonexistent and wchar_t is defined + by . + But avoid namespace pollution on glibc systems. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include +#endif + +/* Include the original if it exists. + Some builds of uClibc lack it. */ +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next +#endif + +#undef _GL_ALREADY_INCLUDING_WCHAR_H + +#ifndef _GL_WCHAR_H +#define _GL_WCHAR_H + +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers + that can be freed by passing them as the Ith argument to the + function F. */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 +# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +# define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that + can be freed via 'free'; it can be used only after declaring 'free'. */ +/* Applies to: functions. Cannot be used on inline functions. */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA (func, rettype, parameters); + is to be used when func is a Microsoft deprecated alias, on native Windows. + It declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to _func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_MDA (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__diagnose_if__ (1, message, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") + is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __clang_major__ >= 4 +/* Another compiler attribute is available in clang. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_clang function parameters_and_attributes \ + __attribute__ ((__diagnose_if__ (1, msg, "warning"))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +extern rettype_gcc function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Define wint_t and WEOF. (Also done in wctype.in.h.) */ +#if !1 && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* mingw and MSVC define wint_t as 'unsigned short' in or + . This is too small: ISO C 99 section 7.24.1.(2) says that + wint_t must be "unchanged by default argument promotions". Override it. */ +# if 0 +# if !GNULIB_defined_wint_t +# if 0 +# include +# else +# include +# endif +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +/* Override mbstate_t if it is too small. + On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for + implementing mbrtowc for encodings like UTF-8. + On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is + large enough and overriding it would cause problems in C++ mode. */ +#if !(((defined _WIN32 && !defined __CYGWIN__) || 1) && 1) || 0 +# if !GNULIB_defined_mbstate_t +# if !(defined _AIX || defined _MSC_VER) +typedef int rpl_mbstate_t; +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# endif +# define GNULIB_defined_mbstate_t 1 +# endif +#endif + +/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though may not have + been included yet. */ +#if 1 +# if (1 && !defined free \ + && !(defined __cplusplus && defined GNULIB_NAMESPACE)) +/* We can't do '#define free rpl_free' here. */ +_GL_EXTERN_C void rpl_free (void *); +# undef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) +# else +# if defined _MSC_VER && !defined free +_GL_EXTERN_C +# if defined _DLL + __declspec (dllimport) +# endif + void __cdecl free (void *); +# else +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void free (void *) throw (); +# else +_GL_EXTERN_C void free (void *); +# endif +# endif +# endif +#else +# if defined _MSC_VER && !defined free +_GL_EXTERN_C +# if defined _DLL + __declspec (dllimport) +# endif + void __cdecl free (void *); +# else +# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) +_GL_EXTERN_C void free (void *) throw (); +# else +_GL_EXTERN_C void free (void *); +# endif +# endif +#endif + +/* Convert a single-byte character to a wide character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef btowc +# define btowc rpl_btowc +# endif +_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (btowc, wint_t, (int c)); +# else +# if !1 +_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); +# endif +/* Need to cast, because on mingw, the return type is 'unsigned short'. */ +_GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (btowc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef btowc +# if HAVE_RAW_DECL_BTOWC +_GL_WARN_ON_USE (btowc, "btowc is unportable - " + "use gnulib module btowc for portability"); +# endif +#endif + + +/* Convert a wide character to a single-byte character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctob +# define wctob rpl_wctob +# endif +_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); +# else +# if !defined wctob && !1 +/* wctob is provided by gnulib, or wctob exists but is not declared. */ +_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wctob); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wctob +# if HAVE_RAW_DECL_WCTOB +_GL_WARN_ON_USE (wctob, "wctob is unportable - " + "use gnulib module wctob for portability"); +# endif +#endif + + +/* Test whether *PS is in the initial state. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsinit +# define mbsinit rpl_mbsinit +# endif +_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbsinit); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsinit +# if HAVE_RAW_DECL_MBSINIT +_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " + "use gnulib module mbsinit for portability"); +# endif +#endif + + +/* Convert a multibyte character to a wide character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrtowc +# define mbrtowc rpl_mbrtowc +# endif +_GL_FUNCDECL_RPL (mbrtowc, size_t, + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); +_GL_CXXALIAS_RPL (mbrtowc, size_t, + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbrtowc, size_t, + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); +# endif +_GL_CXXALIAS_SYS (mbrtowc, size_t, + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbrtowc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrtowc +# if HAVE_RAW_DECL_MBRTOWC +_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " + "use gnulib module mbrtowc for portability"); +# endif +#endif + + +/* Recognize a multibyte character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrlen +# define mbrlen rpl_mbrlen +# endif +_GL_FUNCDECL_RPL (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); +_GL_CXXALIAS_RPL (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); +# endif +_GL_CXXALIAS_SYS (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbrlen); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrlen +# if HAVE_RAW_DECL_MBRLEN +_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " + "use gnulib module mbrlen for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsrtowcs +# define mbsrtowcs rpl_mbsrtowcs +# endif +_GL_FUNCDECL_RPL (mbsrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbsrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (mbsrtowcs); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsrtowcs +# if HAVE_RAW_DECL_MBSRTOWCS +_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " + "use gnulib module mbsrtowcs for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsnrtowcs +# define mbsnrtowcs rpl_mbsnrtowcs +# endif +_GL_FUNCDECL_RPL (mbsnrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsnrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbsnrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsnrtowcs, size_t, + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps)); +# endif +_GL_CXXALIASWARN (mbsnrtowcs); +#elif defined GNULIB_POSIXCHECK +# undef mbsnrtowcs +# if HAVE_RAW_DECL_MBSNRTOWCS +_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " + "use gnulib module mbsnrtowcs for portability"); +# endif +#endif + + +/* Convert a wide character to a multibyte character. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcrtomb +# define wcrtomb rpl_wcrtomb +# endif +_GL_FUNCDECL_RPL (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); +_GL_CXXALIAS_RPL (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); +# endif +_GL_CXXALIAS_SYS (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcrtomb); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcrtomb +# if HAVE_RAW_DECL_WCRTOMB +_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " + "use gnulib module wcrtomb for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsrtombs +# define wcsrtombs rpl_wcsrtombs +# endif +_GL_FUNCDECL_RPL (wcsrtombs, size_t, + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsrtombs, size_t, + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcsrtombs, size_t, + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsrtombs, size_t, + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsrtombs); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrtombs +# if HAVE_RAW_DECL_WCSRTOMBS +_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " + "use gnulib module wcsrtombs for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsnrtombs +# define wcsnrtombs rpl_wcsnrtombs +# endif +_GL_FUNCDECL_RPL (wcsnrtombs, size_t, + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsnrtombs, size_t, + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps)); +# else +# if !1 || (defined __cplusplus && defined __sun) +_GL_FUNCDECL_SYS (wcsnrtombs, size_t, + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsnrtombs, size_t, + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsnrtombs); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsnrtombs +# if HAVE_RAW_DECL_WCSNRTOMBS +_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " + "use gnulib module wcsnrtombs for portability"); +# endif +#endif + + +/* Return the number of screen columns needed for WC. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcwidth +# define wcwidth rpl_wcwidth +# endif +_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); +# else +# if !1 +/* wcwidth exists but is not declared. */ +_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcwidth); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcwidth +# if HAVE_RAW_DECL_WCWIDTH +_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " + "use gnulib module wcwidth for portability"); +# endif +#endif + + +/* Search N wide characters of S for C. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); + wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wmemchr, + wchar_t *, (const wchar_t *, wchar_t, size_t), + const wchar_t *, (const wchar_t *, wchar_t, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN1 (wmemchr, const wchar_t *, + (const wchar_t *s, wchar_t c, size_t n)); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemchr +# if HAVE_RAW_DECL_WMEMCHR +_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " + "use gnulib module wmemchr for portability"); +# endif +#endif + + +/* Compare N wide characters of S1 and S2. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmemcmp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemcmp +# if HAVE_RAW_DECL_WMEMCMP +_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " + "use gnulib module wmemcmp for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmemcpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemcpy +# if HAVE_RAW_DECL_WMEMCPY +_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " + "use gnulib module wmemcpy for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for + overlapping memory areas. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmemmove); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemmove +# if HAVE_RAW_DECL_WMEMMOVE +_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " + "use gnulib module wmemmove for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST. + Return pointer to wide characters after the last written wide character. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmempcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmempcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmempcpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmempcpy +# if HAVE_RAW_DECL_WMEMPCPY +_GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - " + "use gnulib module wmempcpy for portability"); +# endif +#endif + + +/* Set N wide characters of S to C. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmemset); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemset +# if HAVE_RAW_DECL_WMEMSET +_GL_WARN_ON_USE (wmemset, "wmemset is unportable - " + "use gnulib module wmemset for portability"); +# endif +#endif + + +/* Return the number of wide characters in S. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcslen); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcslen +# if HAVE_RAW_DECL_WCSLEN +_GL_WARN_ON_USE (wcslen, "wcslen is unportable - " + "use gnulib module wcslen for portability"); +# endif +#endif + + +/* Return the number of wide characters in S, but at most MAXLEN. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); +_GL_CXXALIASWARN (wcsnlen); +#elif defined GNULIB_POSIXCHECK +# undef wcsnlen +# if HAVE_RAW_DECL_WCSNLEN +_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " + "use gnulib module wcsnlen for portability"); +# endif +#endif + + +/* Copy SRC to DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +# endif +_GL_CXXALIAS_SYS (wcscpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscpy +# if HAVE_RAW_DECL_WCSCPY +_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " + "use gnulib module wcscpy for portability"); +# endif +#endif + + +/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +# endif +_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +_GL_CXXALIASWARN (wcpcpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpcpy +# if HAVE_RAW_DECL_WCPCPY +_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " + "use gnulib module wcpcpy for portability"); +# endif +#endif + + +/* Copy no more than N wide characters of SRC to DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsncpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsncpy +# if HAVE_RAW_DECL_WCSNCPY +_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " + "use gnulib module wcsncpy for portability"); +# endif +#endif + + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcpncpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcpncpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +_GL_CXXALIASWARN (wcpncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpncpy +# if HAVE_RAW_DECL_WCPNCPY +_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " + "use gnulib module wcpncpy for portability"); +# endif +#endif + + +/* Append SRC onto DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +# endif +_GL_CXXALIAS_SYS (wcscat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscat +# if HAVE_RAW_DECL_WCSCAT +_GL_WARN_ON_USE (wcscat, "wcscat is unportable - " + "use gnulib module wcscat for portability"); +# endif +#endif + + +/* Append no more than N wide characters of SRC onto DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src, + size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src, + size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsncat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsncat +# if HAVE_RAW_DECL_WCSNCAT +_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " + "use gnulib module wcsncat for portability"); +# endif +#endif + + +/* Compare S1 and S2. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscmp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscmp +# if HAVE_RAW_DECL_WCSCMP +_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " + "use gnulib module wcscmp for portability"); +# endif +#endif + + +/* Compare no more than N wide characters of S1 and S2. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsncmp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsncmp +# if HAVE_RAW_DECL_WCSNCMP +_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " + "use gnulib module wcsncmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, ignoring case. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscasecmp +# if HAVE_RAW_DECL_WCSCASECMP +_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " + "use gnulib module wcscasecmp for portability"); +# endif +#endif + + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncasecmp +# if HAVE_RAW_DECL_WCSNCASECMP +_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " + "use gnulib module wcsncasecmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE + category of the current locale. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +# endif +_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscoll); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscoll +# if HAVE_RAW_DECL_WCSCOLL +_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " + "use gnulib module wcscoll for portability"); +# endif +#endif + + +/* Transform S2 into array pointed to by S1 such that if wcscmp is applied + to two transformed strings the result is the as applying 'wcscoll' to the + original strings. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsxfrm, size_t, + (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsxfrm, size_t, + (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsxfrm); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsxfrm +# if HAVE_RAW_DECL_WCSXFRM +_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " + "use gnulib module wcsxfrm for portability"); +# endif +#endif + + +/* Duplicate S, returning an identical malloc'd string. */ +#if 0 +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsdup +# define wcsdup _wcsdup +# endif +_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); +# else +# if !1 || __GNUC__ >= 11 +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, + (const wchar_t *s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +# endif +_GL_CXXALIASWARN (wcsdup); +#else +# if __GNUC__ >= 11 && !defined wcsdup +/* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free. */ +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, + (const wchar_t *s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +# undef wcsdup +# if HAVE_RAW_DECL_WCSDUP +_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " + "use gnulib module wcsdup for portability"); +# endif +# elif 1 +/* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not + required. In C++ with GNULIB_NAMESPACE, avoid differences between + platforms by defining GNULIB_NAMESPACE::wcsdup always. */ +# if defined _WIN32 && !defined __CYGWIN__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsdup +# define wcsdup _wcsdup +# endif +_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); +# else +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, + (const wchar_t *s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# if 1 +_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +# endif +# endif +# if (defined _WIN32 && !defined __CYGWIN__) || 1 +_GL_CXXALIASWARN (wcsdup); +# endif +# endif +#endif + + +/* Find the first occurrence of WC in WCS. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcschr (const wchar_t *, wchar_t); + wchar_t * std::wcschr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcschr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcschr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcschr +# if HAVE_RAW_DECL_WCSCHR +_GL_WARN_ON_USE (wcschr, "wcschr is unportable - " + "use gnulib module wcschr for portability"); +# endif +#endif + + +/* Find the last occurrence of WC in WCS. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); + wchar_t * std::wcsrchr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsrchr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrchr +# if HAVE_RAW_DECL_WCSRCHR +_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " + "use gnulib module wcsrchr for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters not in REJECT. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcscspn); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcscspn +# if HAVE_RAW_DECL_WCSCSPN +_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " + "use gnulib module wcscspn for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters in ACCEPT. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsspn); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsspn +# if HAVE_RAW_DECL_WCSSPN +_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " + "use gnulib module wcsspn for portability"); +# endif +#endif + + +/* Find the first occurrence in WCS of any character in ACCEPT. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcspbrk, wchar_t *, + (const wchar_t *wcs, const wchar_t *accept) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); + wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcspbrk, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcspbrk, wchar_t *, + (wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, + (const wchar_t *wcs, const wchar_t *accept)); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcspbrk); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcspbrk +# if HAVE_RAW_DECL_WCSPBRK +_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " + "use gnulib module wcspbrk for portability"); +# endif +#endif + + +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsstr, wchar_t *, + (const wchar_t *restrict haystack, + const wchar_t *restrict needle) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); + wchar_t * std::wcsstr (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsstr, + wchar_t *, + (const wchar_t *restrict, const wchar_t *restrict), + const wchar_t *, + (const wchar_t *restrict, const wchar_t *restrict)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsstr, wchar_t *, + (wchar_t *restrict haystack, + const wchar_t *restrict needle)); +_GL_CXXALIASWARN1 (wcsstr, const wchar_t *, + (const wchar_t *restrict haystack, + const wchar_t *restrict needle)); +# elif __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsstr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsstr +# if HAVE_RAW_DECL_WCSSTR +_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " + "use gnulib module wcsstr for portability"); +# endif +#endif + + +/* Divide WCS into tokens separated by characters in DELIM. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcstok +# define wcstok rpl_wcstok +# endif +_GL_FUNCDECL_RPL (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +_GL_CXXALIAS_RPL (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +# endif +_GL_CXXALIAS_SYS (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcstok); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcstok +# if HAVE_RAW_DECL_WCSTOK +_GL_WARN_ON_USE (wcstok, "wcstok is unportable - " + "use gnulib module wcstok for portability"); +# endif +#endif + + +/* Determine number of column positions required for first N wide + characters (or fewer if S ends before this) in S. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcswidth +# define wcswidth rpl_wcswidth +# endif +_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) + _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcswidth); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcswidth +# if HAVE_RAW_DECL_WCSWIDTH +_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " + "use gnulib module wcswidth for portability"); +# endif +#endif + + +/* Convert *TP to a date and time wide string. See + . */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsftime +# define wcsftime rpl_wcsftime +# endif +_GL_FUNCDECL_RPL (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp) + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp) + _GL_ARG_NONNULL ((1, 3, 4))); +# endif +_GL_CXXALIAS_SYS (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsftime); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsftime +# if HAVE_RAW_DECL_WCSFTIME +_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " + "use gnulib module wcsftime for portability"); +# endif +#endif + + +#endif /* _GL_WCHAR_H */ +#endif /* _GL_WCHAR_H */ +#endif diff --git a/jni/parted/libiconv/srclib/xalloc-oversized.h b/jni/parted/libiconv/srclib/xalloc-oversized.h new file mode 100755 index 0000000..aefa6fd --- /dev/null +++ b/jni/parted/libiconv/srclib/xalloc-oversized.h @@ -0,0 +1,65 @@ +/* xalloc-oversized.h -- memory allocation size checking + + Copyright (C) 1990-2000, 2003-2004, 2006-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef XALLOC_OVERSIZED_H_ +#define XALLOC_OVERSIZED_H_ + +#include +#include + +/* True if N * S does not fit into both ptrdiff_t and size_t. + N and S should be nonnegative and free of side effects. + This expands to a constant expression if N and S are both constants. + By gnulib convention, SIZE_MAX represents overflow in size_t + calculations, so the conservative size_t-based dividend to use here + is SIZE_MAX - 1. */ +#define __xalloc_oversized(n, s) \ + ((s) != 0 \ + && ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) \ + < (n))) + +/* Return 1 if and only if an array of N objects, each of size S, + cannot exist reliably because its total size in bytes would exceed + MIN (PTRDIFF_MAX, SIZE_MAX - 1). + + N and S should be nonnegative and free of side effects. + + Warning: (xalloc_oversized (N, S) ? NULL : malloc (N * S)) can + misbehave if N and S are both narrower than ptrdiff_t and size_t, + and can be rewritten as (xalloc_oversized (N, S) ? NULL + : malloc (N * (size_t) S)). + + This is a macro, not a function, so that it works even if an + argument exceeds MAX (PTRDIFF_MAX, SIZE_MAX). */ +#if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX +# define xalloc_oversized(n, s) \ + __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1) +#elif (5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ \ + && PTRDIFF_MAX < SIZE_MAX) +# define xalloc_oversized(n, s) \ + (__builtin_constant_p (n) && __builtin_constant_p (s) \ + ? __xalloc_oversized (n, s) \ + : ({ ptrdiff_t __xalloc_count; \ + __builtin_mul_overflow (n, s, &__xalloc_count); })) + +/* Other compilers use integer division; this may be slower but is + more portable. */ +#else +# define xalloc_oversized(n, s) __xalloc_oversized (n, s) +#endif + +#endif /* !XALLOC_OVERSIZED_H_ */ diff --git a/jni/parted/libiconv/srclib/xalloc.h b/jni/parted/libiconv/srclib/xalloc.h new file mode 100755 index 0000000..c4ba23c --- /dev/null +++ b/jni/parted/libiconv/srclib/xalloc.h @@ -0,0 +1,158 @@ +/* malloc with out of memory checking. + Copyright (C) 2001-2004, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + 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 3 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, see . */ + +#ifndef _XALLOC_H +#define _XALLOC_H + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Defined in xmalloc.c. */ + +/* Allocate SIZE bytes of memory dynamically, with error checking. */ +extern void *xmalloc (size_t size); + +/* Allocate memory for NMEMB elements of SIZE bytes, with error checking. + SIZE must be > 0. */ +extern void *xnmalloc (size_t nmemb, size_t size); + +/* Allocate SIZE bytes of memory dynamically, with error checking, + and zero it. */ +extern void *xzalloc (size_t size); + +/* Allocate memory for NMEMB elements of SIZE bytes, with error checking, + and zero it. */ +extern void *xcalloc (size_t nmemb, size_t size); + +/* Change the size of an allocated block of memory PTR to SIZE bytes, + with error checking. If PTR is NULL, run xmalloc. */ +extern void *xrealloc (void *ptr, size_t size); +#ifdef __cplusplus +} +template + inline T * xrealloc (T * ptr, size_t size) + { + return (T *) xrealloc ((void *) ptr, size); + } +extern "C" { +#endif + +/* This function is always triggered when memory is exhausted. It is + in charge of honoring the three previous items. This is the + function to call when one wants the program to die because of a + memory allocation failure. */ +extern void xalloc_die (void) +#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5)) && !__STRICT_ANSI__ + __attribute__ ((__noreturn__)) +#endif + ; + +/* In the following macros, T must be an elementary or structure/union or + typedef'ed type, or a pointer to such a type. To apply one of the + following macros to a function pointer or array type, you need to typedef + it first and use the typedef name. */ + +/* Allocate an object of type T dynamically, with error checking. */ +/* extern T *XMALLOC (typename T); */ +#define XMALLOC(T) \ + ((T *) xmalloc (sizeof (T))) + +/* Allocate memory for NMEMB elements of type T, with error checking. */ +/* extern T *XNMALLOC (size_t nmemb, typename T); */ +#if HAVE_INLINE +/* xnmalloc performs a division and multiplication by sizeof (T). Arrange to + perform the division at compile-time and the multiplication with a factor + known at compile-time. */ +# define XNMALLOC(N,T) \ + ((T *) (sizeof (T) == 1 \ + ? xmalloc (N) \ + : xnboundedmalloc(N, (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / sizeof (T), sizeof (T)))) +static inline void * +xnboundedmalloc (size_t n, size_t bound, size_t s) +{ + if (n > bound) + xalloc_die (); + return xmalloc (n * s); +} +#else +# define XNMALLOC(N,T) \ + ((T *) (sizeof (T) == 1 ? xmalloc (N) : xnmalloc (N, sizeof (T)))) +#endif + +/* Allocate an object of type T dynamically, with error checking, + and zero it. */ +/* extern T *XZALLOC (typename T); */ +#define XZALLOC(T) \ + ((T *) xzalloc (sizeof (T))) + +/* Allocate memory for NMEMB elements of type T, with error checking, + and zero it. */ +/* extern T *XCALLOC (size_t nmemb, typename T); */ +#define XCALLOC(N,T) \ + ((T *) xcalloc (N, sizeof (T))) + +/* Return a pointer to a new buffer of N bytes. This is like xmalloc, + except it returns char *. */ +#define xcharalloc(N) \ + XNMALLOC (N, char) + + +/* Defined in xstrdup.c. */ + +/* Return a newly allocated copy of the N bytes of memory starting at P. */ +extern void *xmemdup (const void *p, size_t n); +#ifdef __cplusplus +} +template + inline T * xmemdup (const T * p, size_t n) + { + return (T *) xmemdup ((const void *) p, n); + } +extern "C" { +#endif + +/* Return a newly allocated copy of STRING. */ +extern char *xstrdup (const char *string); + + +/* Return 1 if an array of N objects, each of size S, cannot exist due + to size arithmetic overflow. S must be positive and N must be + nonnegative. This is a macro, not an inline function, so that it + works correctly even when SIZE_MAX < N. + + By gnulib convention, SIZE_MAX represents overflow in size + calculations, so the conservative dividend to use here is + SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value. + However, malloc (SIZE_MAX) fails on all known hosts where + sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for + exactly-SIZE_MAX allocations on such hosts; this avoids a test and + branch when S is known to be 1. */ +# define xalloc_oversized(n, s) \ + ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) + + +#ifdef __cplusplus +} +#endif + + +#endif /* _XALLOC_H */ diff --git a/jni/parted/libiconv/srclib/xreadlink.h b/jni/parted/libiconv/srclib/xreadlink.h new file mode 100755 index 0000000..f68502f --- /dev/null +++ b/jni/parted/libiconv/srclib/xreadlink.h @@ -0,0 +1,29 @@ +/* Reading symbolic links without size limitation. + + Copyright (C) 2001, 2003-2004, 2007, 2009-2022 Free Software Foundation, + Inc. + + 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 3 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, see . */ + +/* Written by Jim Meyering */ + +#include + +extern char *xreadlink (char const *filename) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; + +#if GNULIB_XREADLINKAT +extern char *xreadlinkat (int fd, char const *filename) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; +#endif diff --git a/jni/parted/libparted/Android.mk b/jni/parted/libparted/Android.mk new file mode 100755 index 0000000..e00cd47 --- /dev/null +++ b/jni/parted/libparted/Android.mk @@ -0,0 +1,115 @@ +# By YZBruh + +# Copyright 2024 Partition Manager +# +# 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. + +######## +# 3.0.2 +######## + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libparted +LOCAL_SRC_FILES := \ + $(LOCAL_PATH)/architecture.c \ + $(LOCAL_PATH)/debug.c \ + $(LOCAL_PATH)/device.c \ + $(LOCAL_PATH)/disk.c \ + $(LOCAL_PATH)/exception.c \ + $(LOCAL_PATH)/filesys.c \ + $(LOCAL_PATH)/libparted.c \ + $(LOCAL_PATH)/timer.c \ + $(LOCAL_PATH)/unit.c \ + $(LOCAL_PATH)/arch/linux.c \ + $(LOCAL_PATH)/cs/constraint.c \ + $(LOCAL_PATH)/cs/geom.c \ + $(LOCAL_PATH)/cs/natmath.c \ + $(LOCAL_PATH)/fs/amiga/a-interface.c \ + $(LOCAL_PATH)/fs/amiga/affs.c \ + $(LOCAL_PATH)/fs/amiga/amiga.c \ + $(LOCAL_PATH)/fs/amiga/apfs.c \ + $(LOCAL_PATH)/fs/amiga/asfs.c \ + $(LOCAL_PATH)/fs/btrfs/btrfs.c \ + $(LOCAL_PATH)/fs/ext2/interface.c \ + $(LOCAL_PATH)/fs/f2fs/f2fs.c \ + $(LOCAL_PATH)/fs/fat/bootsector.c \ + $(LOCAL_PATH)/fs/fat/fat.c \ + $(LOCAL_PATH)/fs/hfs/hfs.c \ + $(LOCAL_PATH)/fs/hfs/probe.c \ + $(LOCAL_PATH)/fs/jfs/jfs.c \ + $(LOCAL_PATH)/fs/linux_swap/linux_swap.c \ + $(LOCAL_PATH)/fs/nilfs2/nilfs2.c \ + $(LOCAL_PATH)/fs/ntfs/ntfs.c \ + $(LOCAL_PATH)/fs/r/filesys.c \ + $(LOCAL_PATH)/fs/r/fat/bootsector.c \ + $(LOCAL_PATH)/fs/r/fat/calc.c \ + $(LOCAL_PATH)/fs/r/fat/clstdup.c \ + $(LOCAL_PATH)/fs/r/fat/context.c \ + $(LOCAL_PATH)/fs/r/fat/count.c \ + $(LOCAL_PATH)/fs/r/fat/fat.c \ + $(LOCAL_PATH)/fs/r/fat/fatio.c \ + $(LOCAL_PATH)/fs/r/fat/resize.c \ + $(LOCAL_PATH)/fs/r/fat/table.c \ + $(LOCAL_PATH)/fs/r/fat/traverse.c \ + $(LOCAL_PATH)/fs/r/hfs/advfs.c \ + $(LOCAL_PATH)/fs/r/hfs/advfs_plus.c \ + $(LOCAL_PATH)/fs/r/hfs/cache.c \ + $(LOCAL_PATH)/fs/r/hfs/file.c \ + $(LOCAL_PATH)/fs/r/hfs/file_plus.c \ + $(LOCAL_PATH)/fs/r/hfs/hfs.c \ + $(LOCAL_PATH)/fs/r/hfs/journal.c \ + $(LOCAL_PATH)/fs/r/hfs/probe.c \ + $(LOCAL_PATH)/fs/r/hfs/reloc.c \ + $(LOCAL_PATH)/fs/r/hfs/reloc_plus.c \ + $(LOCAL_PATH)/fs/reiserfs/reiserfs.c \ + $(LOCAL_PATH)/fs/udf/udf.c \ + $(LOCAL_PATH)/fs/ufs/ufs.c \ + $(LOCAL_PATH)/fs/xfs/xfs.c \ + $(LOCAL_PATH)/labels/aix.c \ + $(LOCAL_PATH)/labels/atari.c \ + $(LOCAL_PATH)/labels/bsd.c \ + $(LOCAL_PATH)/labels/dos.c \ + $(LOCAL_PATH)/labels/dvh.c \ + $(LOCAL_PATH)/labels/efi_crc32.c \ + $(LOCAL_PATH)/labels/fdasd.c \ + $(LOCAL_PATH)/labels/gpt.c \ + $(LOCAL_PATH)/labels/loop.c \ + $(LOCAL_PATH)/labels/mac.c \ + $(LOCAL_PATH)/labels/pt-tools.c \ + $(LOCAL_PATH)/labels/rdb.c \ + $(LOCAL_PATH)/labels/sun.c \ + $(LOCAL_PATH)/labels/vtoc.c +LOCAL_C_INCLUDES := \ + $(LOCAL_PATH)/../../include \ + $(LOCAL_PATH)/../../include/libgnulib \ + $(LOCAL_PATH)/parted \ + $(LOCAL_PATH)/libparted \ + $(LOCAL_PATH)/libparted/labels \ + $(LOCAL_PATH)/lib +LOCAL_CFLAGS := \ + -Wall \ + -Wextra \ + -fPIC \ + -Wno-pointer-sign \ + -Wno-sign-compare \ + -Wno-gnu-designator \ + -Wno-unused-variable \ + -Wno-unused-parameter \ + -Wno-unused-command-line-argument \ + -Wno-missing-field-initializers \ + -Wno-single-bit-bitfield-constant-conversion + +include $(BUILD_STATIC_LIBRARY) \ No newline at end of file diff --git a/jni/parted/libparted/ChangeLog.0 b/jni/parted/libparted/ChangeLog.0 new file mode 100755 index 0000000..16c11c3 --- /dev/null +++ b/jni/parted/libparted/ChangeLog.0 @@ -0,0 +1,255 @@ +2006-11-11 Otavio Salvador + + * libparted/debug.c (ped_assert): Print backtrace stack when + throwing an exception. + + * libparted/Makefile.am: Add -rdynamic on LDFLAGS. + +2006-11-10 Otavio Salvador + + * libparted/filesys.c (ped_file_system_type_unregister): Handle + instances where fs_types == NULL and the given fs_type is not in + the list of registered file-system types. Some code clean-up. + Patch sent by Debarshi 'Rishi' Ray . + + * libparted/disk.c (ped_register_disk_type, ped_unregister_disk_type): + Clean-up. Patch sent by Debarshi 'Rishi' Ray . + +2006-11-08 Otavio Salvador + + * libparted/fs/hfs/probe.c: Fix a segmentation fault when running + without debug. + +2006-11-05 David Cantrell + * arch/linux.c: Define PROC_DEVICES_BUFSIZ for reading /proc/devices, + set to 16384. + +2006-11-02 David Cantrell + * labels/mac.c (_rawpart_is_boot): Check for Apple_Boot type. + * labels/mac.c (_rawpart_analyse): Don't check the data_region_length + against the part->geom.length for boot partitions. + +2006-10-31 David Cantrell + * device.c (canonicalize_file_name): calloc should use sizeof(char) + instead of 1 (from Debarshi Ray). + * arch/linux.c (readFD): Use a 1KB buffer to read /proc/devices + rather than a 16KB buffer. Init filesize to zero at declaration. + Combine error and EOF check for read() loop. Memory cleanups at + function exit. Use malloc() instead of calloc() (from Debarshi + Ray). + * arch/linux.c (_is_dm_major): Test expression and loop cleanups + (from Debarshi Ray). + +2006-10-26 David Cantrell + * arch/linux.c: Go to error_free_arch_specific rather than + error_free_dev for init_generic() failure on PED_DEVICE_UBD. + +2006-10-11 David Cantrell + * arch/linux.c: Conditionalize device-mapper stuff correctly so if the + user disables it, libparted still compiles. + +2006-10-11 David Cantrell + * Makefile.am: Add @DM_LIBS@ to libparted_la_LIBADD. + * arch/linux.c (readFD): Add read function used by _is_dm_major(). + * arch/linux.c (_is_dm_major): Add test function to determine if a + given device number is a device-mapper major number. + * arch/linux.c (_device_stat): Set dev->type to PED_DEVICE_DM if the + device is a major device-mapper node. Call init_generic() for the + PED_DEVICE_DM devices. + * arch/linux.c: Added _dm_remove_map(), _dm_remove_map_name(), + _dm_is_part(), _dm_remove_parts(), _dm_add_partition(), and + _dm_reread_part_table() to support device-mapper devices. + * arch/linux.c (linux_disk_commit): If the device type is PED_DEVICE_DM, + return result of _dm_reread_part_table on the disk. + +2006-10-09 David Cantrell + * disk.c (ped_unregister_disk_type): Handle instances where disk_types + == NULL and the given type is not in the list of registered disk types + (from Debarshi Ray). + + * cs/geom.c (ped_geometry_read): Do not throw PED_EXCEPTION_ERROR here + if accessing sectors outside of partition boundary. Returning false + causes ped_geometry_check() to shift correctly anyway. This occurs + on current Mac disklabels, among other systems. + +2006-10-06 David Cantrell + * arch/linux.c: Change __GNU_SOURCE define to _GNU_SOURCE (only one + underscore at the beginning). Fixes problem with certain systems + not getting posix_memalign() defined during compilation. + +2006-09-15 David Cantrell + * labels/Makefile.am: Removed fdasd.h and vtoc.h references. + +2006-09-14 Olaf Hering + * labels/mac.c (mac_partition_new): memset() inits everything to + zero, no need to do it manually. + + * labels/mac.c (mac_partition_set_flag): Prevent LVM and RAID partition + types from corrupting the partition table. + + * arch/linux.c (_blkpg_add_partition): Set linux_part.length based on + whether or not this partition is PED_PARTITION_EXTENDED or not. + + * arch/linux.c (_disk_sync_part_table): Remove the check and continue + for PED_PARTITION_EXTENDED types. + +2006-09-01 Darren Lavender + * labels/gpt.c (gpt_read, _parse_header): added support for + LUN/device resize detection and optional GPT header correction. + + * labels/gpt.c (_generate_header, gpt_write): fixed off-by-one + error in GPT header that allowed for overlap between LBAs of + LastUsableLBA and PartitionEntryLBA in backup-GPT. + +2006-09-01 David Cantrell + * fs/fat/fat.c (fat_probe): prevent SIGFPE when FAT sector size is 0. + + * arch/linux.c: define VIODASD_MAJOR. + * arch/linux.c (_device_probe_type): check for PED_DEVICE_VIODASD. + * arch/linux.c (linux_new): init PED_DEVICE_VIODASD. + * arch/linux.c (_flush_cache, linux_open): open in O_DIRECT mode on + non-zSeries. + * arch/linux.c (linux_read, linux_write): modify reading and writing + to work correctly in O_DIRECT mode. + + * exception.c: add ped_exception_get_handler(). + + * libparted.c (init_disk_types): call ped_disk_aix_init(). + * libparted.c (done_disk_types): call ped_disk_aix_done(). + + * labels/dos.c (msdos_probe): if AIX physical volume detected, fail. + + * labels/aix.c: add AIX disk label code from Matt Wilson. + * labels/aix.c: fix prototypes for aix_probe() and aix_alloc() so they + can be used in PedDiskOps. + + * labels/vtoc.c (vtoc_error): make error buffer large enough for errors. + + * labels/dasd.c: fix prototypes for dasd_probe() and dasd_alloc() so + they can be used in PedDiskOps. + * labels/dasd.c (dasd_probe): fix typos: dasd_initialize_anchor() -> + fdasd_initialize_anchor(), dasd_cleanup() -> fdasd_cleanup(). + * labels/dasd.c (dasd_read): fix typo: DEBUG -> PDEBUG. + +2006-08-31 David Cantrell + * arch/linux.c: add DASD_MAJOR. + * arch/linux.c (_device_stat): check for DASD devices. + * arch/linux.c (init_dasd): add init_dasd() to gather device info + for DASD devices. + * arch/linux.c (init_generic): add dev->path to the error message so + users know what device had the failure. + + * labels/Makefile.am: add dasd.c, fdasd.c, fdasd.h, vtoc.c, and vtoc.h + + * labels/dasd.c: add DASD label code. + + * labels/fdasd.c: add fdasd code (used by dasd.c). + + * labels/vtoc.c: add VTOC code (wonderful EBCDIC util code). + + * libparted.c (init_disk_types): if on zSeries, call + ped_disk_dasd_init(). + + * libparted.c (done_disk_types): if on zSeries, call + ped_disk_dasd_done(). + +2006-08-30 David Cantrell + * arch/linux.c: add SX8_MAJOR1 and SX8_MAJOR2. + * arch/linux.c (_is_sx8_major): determine if given major number falls + in the range of Promise SX8 devices. + * arch/linux.c (_device_stat): check for SX8 devices. + +2006-05-25 Leslie P. Polzer + * fs/hfs/hfs.c (hfs_resize, hfsplus_resize): make hgee/hgms assertion + only when debugging is turned on. + + * fs/ext2/ext2.c (ext2_open): removed call to ext2_determine_itoffset; + also moving it from this file to ext2_resize.c. + * fs/ext2/ext2_resize.c (ext2_resize): added call to + ext2_determine_itoffset and show a warning if not successful. + + * labels/mac.c (strncasestr): search the whole type string for + 'driver', not just the strlen of 'driver'. This fixes the detection of + driver partitions on mac disklabels. + + * labels/mac.c (mac_partition_get_flag): added 'set 2 raid on/off' + capability for mac labels. + + * labels/mac.c (struct MacRawDisk, struct MacPartitionData): fixed + data types of some fields (do not need to be 64 bit wide) and updated + meaning of reserved spaces. + + * labels/mac.c (struct MacRawDisk, struct MacDeviceDriver, struct + MacDiskData, mac_alloc, _rawpart_has_driver, _rawpart_analyse, + mac_read, _pad_raw_part, _generate_raw_part, write_block_zero, + mac_write, mac_partition_new): fixes removal of driver partition; + this would previously crash MacOS 9. + +2006-05-15 Leslie P. Polzer + * fs/ext2/ext2_block_relocator.c (ext2_block_relocator_mark): + turned exception into warning and let it provide additional info. + +2006-04-15 Leslie P. Polzer + * labels/gpt.c (_parse_header): corrected endianness issue (one + conversion too much) + +2006-04-06 Jonathan duSaint + * unit.c (ped_unit_get_size, parse_unit_suffix): added support for + binary units. + +2006-04-06 Leslie P. Polzer + * arch/linux.c (_device_set_sector_size): handle sector size for + ioctl and printf correctly as "long long". + + * labels/dvh.c (dvh_probe), labels/bsd.c (bsd_probe), labels/mac.c + (mac_probe), labels/pc98.c (pc98_probe), labels/sun.c (sun_probe), + labels/dos.c (dos_probe), labels/loop.c (loop_probe): immediately + return negative probe when the device's logical sector size is not + equal to 512. + +2006-03-30 Leslie P. Polzer + * fs/reiserfs/reiserfs.c: added missing block size initializer. + +2006-03-27 Leslie P. Polzer + * arch/linux.c (linux_probe_all): probe standard devices before + /sys/block and /proc/partitions. + + * labels/gpt.c: added Apple GUID support. + +2006-03-08 Leslie P. Polzer + * blkpg.h: moved to arch/. + +2006-03-03 Leslie P. Polzer + * labels/Makefile.am (liblabels_la_SOURCES): added "dvh.h". + + * Makefile.am (libparted_la_SOURCES): fixed @OS@.c location. + + * arch/linux.c (_probe_standard_devices): probe IDE devices before + SCSI. + +2006-02-25 Leslie P. Polzer + * labels/gpt.c (_read_header, gpt_read): fixed memory leaks. + +2006-02-23 Leslie P. Polzer + * labels/gpt.c (pth_free): fixed illegal memory deallocation by + freeing reserved space before parent. + + * labels/gpt.c (pth_crc32): calculate crc32 from static size. + + * labels/gpt.c (pth_free): free reserved field before freeing parent + data structure. + + * labels/gpt.c (pth_crc32): calculate crc32 from static size. + +2006-02-20 Leslie P. Polzer + * device.c: added ped_device_get_constraint. + + +----------------------------------------------------------------------------- + +This file is part of GNU Parted +Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +Free Software Foundation Inc. + +This file may be modified and/or distributed without restriction. This is +not an invitation to misrepresent the history of GNU Parted. diff --git a/jni/parted/libparted/arch/linux.c b/jni/parted/libparted/arch/linux.c new file mode 100755 index 0000000..ccbba86 --- /dev/null +++ b/jni/parted/libparted/arch/linux.c @@ -0,0 +1,3413 @@ +/* libparted - a library for manipulating disk partitions + Copyright (C) 1999-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +#define PROC_DEVICES_BUFSIZ 16384 + +#include +#include +#include +#include +#include +#if defined __s390__ || defined __s390x__ +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* for uname() */ +#include +#include +#include +#ifdef ENABLE_DEVICE_MAPPER +#include +#endif + +#include "../architecture.h" +#include "dirname.h" +#include "xstrtol.h" +#include "xalloc.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +#define STRPREFIX(a, b) (strncmp (a, b, strlen (b)) == 0) + +#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) + +#ifndef __NR__llseek +#define __NR__llseek 140 +#endif + +#ifndef SCSI_IOCTL_SEND_COMMAND +#define SCSI_IOCTL_SEND_COMMAND 1 +#endif + +/* from */ +#define HDIO_GETGEO 0x0301 /* get device geometry */ +#define HDIO_GET_IDENTITY 0x030d /* get IDE identification info */ + +#define RD_MODE (O_RDONLY) +#define WR_MODE (O_WRONLY) +#define RW_MODE (O_RDWR) + +struct hd_geometry { + unsigned char heads; + unsigned char sectors; + unsigned short cylinders; + unsigned long start; +}; + +struct ata7_sectinfo { + int valid1:1; + int valid2:1; + int rsv:26; + int multiplier:4; +}; + +/* structure returned by HDIO_GET_IDENTITY, as per ANSI ATA2 rev.2f spec */ +struct hd_driveid { + unsigned short config; /* lots of obsolete bit flags */ + unsigned short cyls; /* "physical" cyls */ + unsigned short reserved2; /* reserved (word 2) */ + unsigned short heads; /* "physical" heads */ + unsigned short track_bytes; /* unformatted bytes per track */ + unsigned short sector_bytes; /* unformatted bytes per sector */ + unsigned short sectors; /* "physical" sectors per track */ + unsigned short vendor0; /* vendor unique */ + unsigned short vendor1; /* vendor unique */ + unsigned short vendor2; /* vendor unique */ + unsigned char serial_no[20]; /* 0 = not_specified */ + unsigned short buf_type; + unsigned short buf_size; /* 512 byte increments; + 0 = not_specified */ + unsigned short ecc_bytes; /* for r/w long cmds; + 0 = not_specified */ + unsigned char fw_rev[8]; /* 0 = not_specified */ + char model[40]; /* 0 = not_specified */ + unsigned char max_multsect; /* 0=not_implemented */ + unsigned char vendor3; /* vendor unique */ + unsigned short dword_io; /* 0=not_implemented; 1=implemented */ + unsigned char vendor4; /* vendor unique */ + unsigned char capability; /* bits 0:DMA 1:LBA 2:IORDYsw + 3:IORDYsup*/ + unsigned short reserved50; /* reserved (word 50) */ + unsigned char vendor5; /* vendor unique */ + unsigned char tPIO; /* 0=slow, 1=medium, 2=fast */ + unsigned char vendor6; /* vendor unique */ + unsigned char tDMA; /* 0=slow, 1=medium, 2=fast */ + unsigned short field_valid; /* bits 0:cur_ok 1:eide_ok */ + unsigned short cur_cyls; /* logical cylinders */ + unsigned short cur_heads; /* logical heads */ + unsigned short cur_sectors; /* logical sectors per track */ + unsigned short cur_capacity0; /* logical total sectors on drive */ + unsigned short cur_capacity1; /* (2 words, misaligned int) */ + unsigned char multsect; /* current multiple sector count */ + unsigned char multsect_valid; /* when (bit0==1) multsect is ok */ + unsigned int lba_capacity; /* total number of sectors */ + unsigned short dma_1word; /* single-word dma info */ + unsigned short dma_mword; /* multiple-word dma info */ + unsigned short eide_pio_modes; /* bits 0:mode3 1:mode4 */ + unsigned short eide_dma_min; /* min mword dma cycle time (ns) */ + unsigned short eide_dma_time; /* recommended mword dma cycle + time (ns) */ + unsigned short eide_pio; /* min cycle time (ns), no IORDY */ + unsigned short eide_pio_iordy; /* min cycle time (ns), with IORDY */ + unsigned short words69_70[2]; /* reserved words 69-70 */ + /* HDIO_GET_IDENTITY currently returns only words 0 through 70 */ + unsigned short words71_74[4]; /* reserved words 71-74 */ + unsigned short queue_depth; /* */ + unsigned short words76_79[4]; /* reserved words 76-79 */ + unsigned short major_rev_num; /* */ + unsigned short minor_rev_num; /* */ + unsigned short command_set_1; /* bits 0:Smart 1:Security 2:Removable + 3:PM */ + unsigned short command_set_2; /* bits 14:Smart Enabled 13:0 zero */ + unsigned short cfsse; /* command set-feature supported + extensions */ + unsigned short cfs_enable_1; /* command set-feature enabled */ + unsigned short cfs_enable_2; /* command set-feature enabled */ + unsigned short csf_default; /* command set-feature default */ + unsigned short dma_ultra; /* */ + unsigned short word89; /* reserved (word 89) */ + unsigned short word90; /* reserved (word 90) */ + unsigned short CurAPMvalues; /* current APM values */ + unsigned short word92; /* reserved (word 92) */ + unsigned short hw_config; /* hardware config */ + unsigned short words94_105[12];/* reserved words 94-105 */ + struct ata7_sectinfo ata7_sectinfo; /* ATAPI/ATA7 physical and logical + sector size */ + unsigned short words107_116[10];/* reserved words 107-116 */ + unsigned int logical_sectsize;/* ATAPI/ATA7 logical sector size */ + unsigned short words119_125[7];/* reserved words 119-125 */ + unsigned short last_lun; /* reserved (word 126) */ + unsigned short word127; /* reserved (word 127) */ + unsigned short dlf; /* device lock function + * 15:9 reserved + * 8 security level 1:max 0:high + * 7:6 reserved + * 5 enhanced erase + * 4 expire + * 3 frozen + * 2 locked + * 1 en/disabled + * 0 capability + */ + unsigned short csfo; /* current set features options + * 15:4 reserved + * 3 auto reassign + * 2 reverting + * 1 read-look-ahead + * 0 write cache + */ + unsigned short words130_155[26];/* reserved vendor words 130-155 */ + unsigned short word156; + unsigned short words157_159[3]; /* reserved vendor words 157-159 */ + unsigned short words160_255[95];/* reserved words 160-255 */ +}; + +/* from */ +#define BLKRRPART _IO(0x12,95) /* re-read partition table */ +#define BLKGETSIZE _IO(0x12,96) /* return device size */ +#define BLKFLSBUF _IO(0x12,97) /* flush buffer cache */ +#define BLKSSZGET _IO(0x12,104) /* get block device sector size */ +#define BLKGETLASTSECT _IO(0x12,108) /* get last sector of block device */ +#define BLKSETLASTSECT _IO(0x12,109) /* set last sector of block device */ + +/* return device size in bytes (u64 *arg) */ +#define BLKGETSIZE64 _IOR(0x12,114,size_t) + +struct blkdev_ioctl_param { + unsigned int block; + size_t content_length; + char * block_contents; +}; + +/* from */ +#define IDE0_MAJOR 3 +#define IDE1_MAJOR 22 +#define IDE2_MAJOR 33 +#define IDE3_MAJOR 34 +#define IDE4_MAJOR 56 +#define IDE5_MAJOR 57 +#define SCSI_CDROM_MAJOR 11 +#define SCSI_DISK0_MAJOR 8 +#define SCSI_DISK1_MAJOR 65 +#define SCSI_DISK2_MAJOR 66 +#define SCSI_DISK3_MAJOR 67 +#define SCSI_DISK4_MAJOR 68 +#define SCSI_DISK5_MAJOR 69 +#define SCSI_DISK6_MAJOR 70 +#define SCSI_DISK7_MAJOR 71 +#define SCSI_DISK8_MAJOR 128 +#define SCSI_DISK9_MAJOR 129 +#define SCSI_DISK10_MAJOR 130 +#define SCSI_DISK11_MAJOR 131 +#define SCSI_DISK12_MAJOR 132 +#define SCSI_DISK13_MAJOR 133 +#define SCSI_DISK14_MAJOR 134 +#define SCSI_DISK15_MAJOR 135 +#define COMPAQ_SMART2_MAJOR 72 +#define COMPAQ_SMART2_MAJOR1 73 +#define COMPAQ_SMART2_MAJOR2 74 +#define COMPAQ_SMART2_MAJOR3 75 +#define COMPAQ_SMART2_MAJOR4 76 +#define COMPAQ_SMART2_MAJOR5 77 +#define COMPAQ_SMART2_MAJOR6 78 +#define COMPAQ_SMART2_MAJOR7 79 +#define COMPAQ_SMART_MAJOR 104 +#define COMPAQ_SMART_MAJOR1 105 +#define COMPAQ_SMART_MAJOR2 106 +#define COMPAQ_SMART_MAJOR3 107 +#define COMPAQ_SMART_MAJOR4 108 +#define COMPAQ_SMART_MAJOR5 109 +#define COMPAQ_SMART_MAJOR6 110 +#define COMPAQ_SMART_MAJOR7 111 +#define DAC960_MAJOR 48 +#define ATARAID_MAJOR 114 +#define I2O_MAJOR1 80 +#define I2O_MAJOR2 81 +#define I2O_MAJOR3 82 +#define I2O_MAJOR4 83 +#define I2O_MAJOR5 84 +#define I2O_MAJOR6 85 +#define I2O_MAJOR7 86 +#define I2O_MAJOR8 87 +#define UBD_MAJOR 98 +#define DASD_MAJOR 94 +#define VIODASD_MAJOR 112 +#define AOE_MAJOR 152 +#define SX8_MAJOR1 160 +#define SX8_MAJOR2 161 +#define XVD_MAJOR 202 +#define SDMMC_MAJOR 179 +#define LOOP_MAJOR 7 +#define MD_MAJOR 9 +#define BLKEXT_MAJOR 259 +#define RAM_MAJOR 1 + +#define SCSI_BLK_MAJOR(M) ( \ + (M) == SCSI_DISK0_MAJOR \ + || (M) == SCSI_CDROM_MAJOR \ + || ((M) >= SCSI_DISK1_MAJOR && (M) <= SCSI_DISK7_MAJOR) \ + || ((M) >= SCSI_DISK8_MAJOR && (M) <= SCSI_DISK15_MAJOR)) + +/* Maximum number of partitions supported by linux. */ +#define MAX_NUM_PARTS 64 + +static char* _device_get_part_path (PedDevice const *dev, int num); +static int _partition_is_mounted_by_path (const char* path); +static unsigned int _device_get_partition_range(PedDevice const* dev); +static int _device_open (PedDevice* dev, int flags); +static int _device_open_ro (PedDevice* dev); +static int _device_close (PedDevice* dev); + +static int +_read_fd (int fd, char **buf) +{ + char* p; + size_t size = PROC_DEVICES_BUFSIZ; + int s, filesize = 0; + + *buf = malloc (size * sizeof (char)); + if (*buf == 0) { + return -1; + } + + do { + p = &(*buf) [filesize]; + s = read (fd, p, PROC_DEVICES_BUFSIZ); + /* exit if there is an error or EOF is reached */ + if (s <= 0) + break; + filesize += s; + size += s; + char *new_buf = realloc (*buf, size); + if (new_buf == NULL) { + int saved_errno = errno; + free (*buf); + errno = saved_errno; + return -1; + } + *buf = new_buf; + } while (1); + + if (filesize == 0 && s < 0) { + free (*buf); + *buf = NULL; + return -1; + } else { + char *new_buf = realloc (*buf, filesize + 1); + if (new_buf == NULL) { + int saved_errno = errno; + free (*buf); + errno = saved_errno; + return -1; + } + *buf = new_buf; + (*buf)[filesize] = '\0'; + } + + return filesize; +} + +static int +_major_type_in_devices (int major, const char* type) +{ + int fd; + char* buf = NULL; + char* line; + char* end; + int bd = 0; + char c; + + fd = open ("/proc/devices", O_RDONLY); + if (fd < 0) + return 0; + + if (_read_fd(fd, &buf) < 0) { + close(fd); + return 0; + } + + line = buf; + end = strchr(line, '\n'); + while (end) { + char *name; + int maj; + + c = *end; + *end = '\0'; + + if (!bd) { + if (!strncmp(line, "Block devices:", 14)) + bd = 1; + goto next; + } + + name = strrchr(line, ' '); + if (!name || strcmp(name+1, type)) + goto next; + + maj = strtol(line, &name, 10); + if (maj == major) { + free(buf); + close(fd); + return 1; + } + +next: + *end = c; + line = end+1; + end = strchr(line, '\n'); + } + free(buf); + close(fd); + return 0; +} + +static int +_is_ide_major (int major) +{ + switch (major) { + case IDE0_MAJOR: + case IDE1_MAJOR: + case IDE2_MAJOR: + case IDE3_MAJOR: + case IDE4_MAJOR: + case IDE5_MAJOR: + return 1; + + default: + return 0; + } +} + +static int +_is_cpqarray_major (int major) +{ + return ((COMPAQ_SMART2_MAJOR <= major && major <= COMPAQ_SMART2_MAJOR7) + || (COMPAQ_SMART_MAJOR <= major && major <= COMPAQ_SMART_MAJOR7)); +} + +static int +_is_i2o_major (int major) +{ + return (I2O_MAJOR1 <= major && major <= I2O_MAJOR8); +} + +static int +_is_sx8_major (int major) +{ + return (SX8_MAJOR1 <= major && major <= SX8_MAJOR2); +} + +static int +_is_virtblk_major (int major) +{ + return _major_type_in_devices (major, "virtblk"); +} + +static int +_is_blkext_major (int major) +{ + return _major_type_in_devices (major, "blkext"); +} + +#ifdef ENABLE_DEVICE_MAPPER +static int +_dm_task_run_wait (struct dm_task *task, uint32_t cookie) +{ + int rc = 0; + + rc = dm_task_run (task); + dm_udev_wait (cookie); + + return rc; +} + +static int +_is_dm_major (int major) +{ + return _major_type_in_devices (major, "device-mapper"); +} + +static int +_dm_maptype (PedDevice *dev) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + struct dm_task *dmt; + uint64_t start, length; + char *target_type = NULL; + char *params; + int r = -1; + const char* dev_dir = getenv ("DM_DEV_DIR"); + + if (dev_dir && *dev_dir && !dm_set_dev_dir(dev_dir)) + return r; + + if (!(dmt = dm_task_create(DM_DEVICE_TABLE))) + return r; + + if (!dm_task_set_major_minor(dmt, arch_specific->major, + arch_specific->minor, 0)) + goto bad; + + dm_task_no_open_count(dmt); + + if (!dm_task_run(dmt)) + goto bad; + + dm_get_next_target(dmt, NULL, &start, &length, &target_type, ¶ms); + + arch_specific->dmtype = strdup(target_type ? target_type : "NO-TARGET"); + if (arch_specific->dmtype == NULL) + goto bad; + r = 0; +bad: + dm_task_destroy(dmt); + return r; +} + +/* Return nonzero if device-mapper device, DEVPATH, is part of a dmraid + array. Use the heuristic of checking for the string "DMRAID-" at the + start of its UUID. */ +static int +_is_dmraid_device (const char *devpath) +{ + int rc = 0; + + char const *dm_name = strrchr (devpath, '/'); + char const *dm_basename = dm_name && *(++dm_name) ? dm_name : devpath; + struct dm_task *task = dm_task_create (DM_DEVICE_DEPS); + if (!task) + return 0; + + dm_task_set_name (task, dm_basename); + if (!dm_task_run (task)) + goto err; + + const char *dmraid_uuid = dm_task_get_uuid (task); + if (STRPREFIX (dmraid_uuid, "DMRAID-")) + rc = 1; + +err: + dm_task_destroy (task); + return rc; +} + +/* We consider a dm device that is a linear mapping with a * + * single target that also is a dm device to be a partition */ + +static int +_dm_is_part (const char *path) +{ + int rc = 0; + struct dm_task *task = dm_task_create (DM_DEVICE_DEPS); + if (!task) + return 0; + + dm_task_set_name(task, path); + if (!dm_task_run(task)) + goto err; + + struct dm_info *info = alloca (sizeof *info); + memset(info, '\0', sizeof *info); + dm_task_get_info (task, info); + if (!info->exists) + goto err; + + struct dm_deps *deps = dm_task_get_deps (task); + if (!deps) + goto err; + + if (deps->count != 1) + goto err; + if (!_is_dm_major (major (deps->device[0]))) + goto err; + dm_task_destroy (task); + if (!(task = dm_task_create (DM_DEVICE_TABLE))) + return 0; + dm_task_set_name (task, path); + if (!dm_task_run (task)) + goto err; + + char *target_type = NULL; + char *params = NULL; + uint64_t start, length; + + dm_get_next_target (task, NULL, &start, &length, &target_type, ¶ms); + if (strcmp (target_type, "linear")) + goto err; + rc = 1; + +err: + dm_task_destroy(task); + return rc; +} + +static int +_probe_dm_devices () +{ + DIR* mapper_dir; + struct dirent* dent; + char buf [512]; /* readdir(3) claims d_name[256] */ + struct stat st; + + mapper_dir = opendir ("/dev/mapper"); + if (!mapper_dir) + return 0; + + /* Search the /dev/mapper directory for devices w/ the same major + * number that was returned from _probe_lvm_major(). + */ + while ((dent = readdir (mapper_dir))) { + if (strcmp (dent->d_name, ".") == 0 || + strcmp (dent->d_name, "..") == 0) + continue; + + snprintf (buf, sizeof (buf), "/dev/mapper/%s", dent->d_name); + + if (stat (buf, &st) != 0) + continue; + + if (_is_dm_major(major(st.st_rdev)) && _is_dmraid_device (buf) + && !_dm_is_part(buf)) + _ped_device_probe (buf); + } + closedir (mapper_dir); + + return 1; +} +#endif + +static int +_device_stat (PedDevice* dev, struct stat * dev_stat) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + + while (1) { + if (!stat (dev->path, dev_stat)) { + return 1; + } else { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_RETRY_CANCEL, + _("Could not stat device %s - %s."), + dev->path, + strerror (errno)) + != PED_EXCEPTION_RETRY) + return 0; + } + } +} + +static int +_device_probe_type (PedDevice* dev) +{ + struct stat dev_stat; + int dev_major; + int dev_minor; + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + + if (!_device_stat (dev, &dev_stat)) + return 0; + + if (!S_ISBLK(dev_stat.st_mode)) { + dev->type = PED_DEVICE_FILE; + return 1; + } + + arch_specific->major = dev_major = major (dev_stat.st_rdev); + arch_specific->minor = dev_minor = minor (dev_stat.st_rdev); + + if (SCSI_BLK_MAJOR (dev_major) && (dev_minor % 0x10 == 0)) { + dev->type = PED_DEVICE_SCSI; + } else if (_is_ide_major (dev_major) && (dev_minor % 0x40 == 0)) { + dev->type = PED_DEVICE_IDE; + } else if (dev_major == DAC960_MAJOR && (dev_minor % 0x8 == 0)) { + dev->type = PED_DEVICE_DAC960; + } else if (dev_major == ATARAID_MAJOR && (dev_minor % 0x10 == 0)) { + dev->type = PED_DEVICE_ATARAID; + } else if (dev_major == AOE_MAJOR && (dev_minor % 0x10 == 0)) { + dev->type = PED_DEVICE_AOE; + } else if (dev_major == DASD_MAJOR && (dev_minor % 0x4 == 0)) { + dev->type = PED_DEVICE_DASD; + } else if (dev_major == VIODASD_MAJOR && (dev_minor % 0x8 == 0)) { + dev->type = PED_DEVICE_VIODASD; + } else if (_is_sx8_major(dev_major) && (dev_minor % 0x20 == 0)) { + dev->type = PED_DEVICE_SX8; + } else if (_is_i2o_major (dev_major) && (dev_minor % 0x10 == 0)) { + dev->type = PED_DEVICE_I2O; + } else if (_is_cpqarray_major (dev_major) && (dev_minor % 0x10 == 0)) { + dev->type = PED_DEVICE_CPQARRAY; + } else if (dev_major == UBD_MAJOR && (dev_minor % 0x10 == 0)) { + dev->type = PED_DEVICE_UBD; +#ifdef ENABLE_DEVICE_MAPPER + } else if (_is_dm_major(dev_major)) { + dev->type = PED_DEVICE_DM; + if (_dm_maptype(dev)) { + ped_exception_throw ( + PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("Unable to determine the dm type of %s."), + dev->path); + } +#endif + } else if (dev_major == XVD_MAJOR && (dev_minor % 0x10 == 0)) { + dev->type = PED_DEVICE_XVD; + } else if (dev_major == SDMMC_MAJOR && (dev_minor % 0x08 == 0)) { + dev->type = PED_DEVICE_SDMMC; + } else if (_is_virtblk_major(dev_major)) { + dev->type = PED_DEVICE_VIRTBLK; + } else if (dev_major == LOOP_MAJOR) { + dev->type = PED_DEVICE_LOOP; + } else if (dev_major == MD_MAJOR) { + dev->type = PED_DEVICE_MD; + } else if (_is_blkext_major(dev_major) && dev->path && strstr(dev->path, "nvme")) { + dev->type = PED_DEVICE_NVME; + } else if (dev_major == RAM_MAJOR) { + dev->type = PED_DEVICE_RAM; + } else if (_is_blkext_major(dev_major) && dev->path && strstr(dev->path, "pmem")) { + dev->type = PED_DEVICE_PMEM; + } else { + dev->type = PED_DEVICE_UNKNOWN; + } + + return 1; +} + +static int +_get_linux_version () +{ + static int kver = -1; + + struct utsname uts; + unsigned int major = 0; + unsigned int minor = 0; + unsigned int teeny = 0; + + if (kver != -1) + return kver; + + if (uname (&uts)) + return kver = 0; + int n = sscanf (uts.release, "%u.%u.%u", &major, &minor, &teeny); + assert (n == 2 || n == 3); + return kver = KERNEL_VERSION (major, minor, teeny); +} + +#if USE_BLKID +static void +get_blkid_topology (LinuxSpecific *arch_specific) +{ + arch_specific->probe = blkid_new_probe (); + if (!arch_specific->probe) + return; + + if (blkid_probe_set_device(arch_specific->probe, + arch_specific->fd, 0, 0)) + return; + + arch_specific->topology = + blkid_probe_get_topology(arch_specific->probe); +} +#endif + +static void +_device_set_sector_size (PedDevice* dev) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + int sector_size; + + dev->sector_size = PED_SECTOR_SIZE_DEFAULT; + dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT; + + PED_ASSERT (dev->open_count); + + if (_get_linux_version() < KERNEL_VERSION (2,3,0)) { + dev->sector_size = PED_SECTOR_SIZE_DEFAULT; + return; + } + + if (ioctl (arch_specific->fd, BLKSSZGET, §or_size)) { + ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_OK, + _("Could not determine sector size for %s: %s.\n" + "Using the default sector size (%lld)."), + dev->path, strerror (errno), PED_SECTOR_SIZE_DEFAULT); + } else { + dev->sector_size = (long long)sector_size; + dev->phys_sector_size = dev->sector_size; + } + +#if USE_BLKID + get_blkid_topology(arch_specific); + if (!arch_specific->topology) { + dev->phys_sector_size = 0; + } else { + dev->phys_sector_size = + blkid_topology_get_physical_sector_size( + arch_specific->topology); + } + if (dev->phys_sector_size == 0) { + ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_OK, + _("Could not determine physical sector size for %s.\n" + "Using the logical sector size (%lld)."), + dev->path, dev->sector_size); + dev->phys_sector_size = dev->sector_size; + } +#endif + +#if defined __s390__ || defined __s390x__ + /* The real_sector_size is currently needed for DASD layouts, + * so we set it unconditionally. In the long run it should + * be considered to use the dev->phys_sector_size in label/dasd.c. + */ + arch_specific->real_sector_size = dev->sector_size; + /* Return PED_SECTOR_SIZE_DEFAULT for DASDs. */ + if (dev->type == PED_DEVICE_DASD) { + dev->sector_size = PED_SECTOR_SIZE_DEFAULT; + } +#endif +} + +static int +_kernel_has_blkgetsize64(void) +{ + int version = _get_linux_version(); + + if (version >= KERNEL_VERSION (2,5,4)) return 1; + if (version < KERNEL_VERSION (2,5,0) && + version >= KERNEL_VERSION (2,4,18)) return 1; + return 0; +} + +/* TODO: do a binary search if BLKGETSIZE doesn't work?! */ +static PedSector +_device_get_length (PedDevice* dev) +{ + unsigned long size; + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + uint64_t bytes=0; + const char* test_str; + PedSector test_size; + + + PED_ASSERT (dev->open_count > 0); + PED_ASSERT (dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0); + + test_str = getenv ("PARTED_TEST_DEVICE_LENGTH"); + if (test_str + && xstrtoll (test_str, NULL, 10, &test_size, NULL) == LONGINT_OK) + return test_size; + + if (_kernel_has_blkgetsize64()) { + if (ioctl(arch_specific->fd, BLKGETSIZE64, &bytes) == 0) { + return bytes / dev->sector_size; + } + } + + if (ioctl (arch_specific->fd, BLKGETSIZE, &size)) { + ped_exception_throw ( + PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("Unable to determine the size of %s (%s)."), + dev->path, + strerror (errno)); + return 0; + } + + return size; +} + +static int +_device_probe_geometry (PedDevice* dev) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + struct stat dev_stat; + struct hd_geometry geometry; + int geometry_is_valid = 0; + int sector_size = 0; + + if (!_device_stat (dev, &dev_stat)) + return 0; + PED_ASSERT (S_ISBLK (dev_stat.st_mode)); + + _device_set_sector_size (dev); + + dev->length = _device_get_length (dev); + if (!dev->length) + return 0; + + /* initialize the bios_geom values to something */ + dev->bios_geom.sectors = 0; + dev->bios_geom.heads = 0; + dev->bios_geom.cylinders = 0; + + geometry_is_valid = !ioctl (arch_specific->fd, HDIO_GETGEO, &geometry) + && geometry.sectors && geometry.heads; + +#if defined __s390__ || defined __s390x__ + if (geometry_is_valid) { +#else + if (!ioctl (arch_specific->fd, BLKSSZGET, §or_size)) { + /* get the sector count first */ + dev->bios_geom.sectors = 1 + (sector_size / PED_SECTOR_SIZE_DEFAULT); + dev->bios_geom.heads = 255; + } else if (geometry_is_valid) { + /* if BLKSSZGET failed, use deprecated HDIO_GETGEO result */ +#endif + dev->bios_geom.sectors = geometry.sectors; + dev->bios_geom.heads = geometry.heads; + } else { + ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_OK, + _("Could not determine sector size for %s: %s.\n" + "Using the default sector size (%lld)."), + dev->path, strerror (errno), PED_SECTOR_SIZE_DEFAULT); + dev->bios_geom.sectors = 2; + dev->bios_geom.heads = 255; + } + + dev->bios_geom.cylinders + = dev->length / (dev->bios_geom.heads + * dev->bios_geom.sectors); + dev->hw_geom = dev->bios_geom; + return 1; +} + +static char* +strip_name(char* str) +{ + int i; + int end = 0; + + for (i = 0; str[i] != 0; i++) { + if (!isspace (str[i]) + || (isspace (str[i]) && !isspace (str[i+1]) && str[i+1])) { + str [end] = str[i]; + end++; + } + } + str[end] = 0; + return strdup (str); +} + +static int +init_ide (PedDevice* dev) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + struct stat dev_stat; + struct hd_driveid hdi; + PedExceptionOption ex_status; + char hdi_buf[41]; + int sector_multiplier = 0; + int r; + + if (!_device_stat (dev, &dev_stat)) + goto error; + + if (!_device_open_ro (dev)) + goto error; + + r = ioctl (arch_specific->fd, HDIO_GET_IDENTITY, &hdi); + if (r && errno == EINVAL) { + /* silently ignore unsupported ioctl */ + dev->model = strdup(_("Generic IDE")); + } else if (r) { + ex_status = ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("Could not get identity of device %s - %s"), + dev->path, strerror (errno)); + switch (ex_status) { + case PED_EXCEPTION_CANCEL: + goto error_close_dev; + + case PED_EXCEPTION_UNHANDLED: + ped_exception_catch (); + /* FALLTHROUGH */ + case PED_EXCEPTION_IGNORE: + dev->model = strdup(_("Generic IDE")); + break; + default: + PED_ASSERT (0); + break; + } + } else { + /* hdi.model is not guaranteed to be NULL terminated */ + memcpy (hdi_buf, hdi.model, 40); + hdi_buf[40] = '\0'; + dev->model = strip_name (hdi_buf); + + if (!hdi.ata7_sectinfo.valid1 && hdi.ata7_sectinfo.valid2) + sector_multiplier = hdi.ata7_sectinfo.multiplier; + else + sector_multiplier = 1; + + if (sector_multiplier != 1) { + ex_status = ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("Device %s has multiple (%d) logical sectors " + "per physical sector.\n" + "GNU Parted supports this EXPERIMENTALLY for " + "some special disk label/file system " + "combinations, e.g. GPT and ext2/3.\n" + "Please consult the web site for up-to-date " + "information."), + dev->path, sector_multiplier); + + switch (ex_status) { + case PED_EXCEPTION_CANCEL: + goto error_close_dev; + + case PED_EXCEPTION_UNHANDLED: + ped_exception_catch (); + /* FALLTHROUGH */ + case PED_EXCEPTION_IGNORE: + break; + default: + PED_ASSERT (0); + break; + } + } + + /* XXX sector_size has not been set yet! */ + /* dev->phys_sector_size = dev->sector_size + * sector_multiplier;*/ + dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT; + } + + if (!_device_probe_geometry (dev)) + goto error_close_dev; + + _device_close (dev); + return 1; + +error_close_dev: + _device_close (dev); +error: + return 0; +} + +/* This function reads the /sys entry named "file" for device "dev". */ +static char * +read_device_sysfs_file (PedDevice *dev, const char *file) +{ + FILE *f; + char name_buf[128]; + char buf[256]; + + snprintf (name_buf, 127, "/sys/block/%s/device/%s", + last_component (dev->path), file); + + if ((f = fopen (name_buf, "r")) == NULL) + return NULL; + + if (fgets (buf, 255, f) == NULL) { + fclose (f); + return NULL; + } + + fclose (f); + return strip_name (buf); +} + +/* This function sends a query to a SCSI device for vendor and product + * information. It uses the deprecated SCSI_IOCTL_SEND_COMMAND to + * issue this query. + */ +static int +scsi_query_product_info (PedDevice* dev, char **vendor, char **product) +{ + /* The following are defined by the SCSI-2 specification. */ + typedef struct _scsi_inquiry_cmd + { + uint8_t op; + uint8_t lun; /* bits 5-7 denote the LUN */ + uint8_t page_code; + uint8_t reserved; + uint8_t alloc_length; + uint8_t control; + } __attribute__((packed)) scsi_inquiry_cmd_t; + + typedef struct _scsi_inquiry_data + { + uint8_t peripheral_info; + uint8_t device_info; + uint8_t version_info; + uint8_t _field1; + uint8_t additional_length; + uint8_t _reserved1; + uint8_t _reserved2; + uint8_t _field2; + uint8_t vendor_id[8]; + uint8_t product_id[16]; + uint8_t product_revision[4]; + uint8_t vendor_specific[20]; + uint8_t _reserved3[40]; + } __attribute__((packed)) scsi_inquiry_data_t; + + struct scsi_arg + { + unsigned int inlen; + unsigned int outlen; + + union arg_data + { + scsi_inquiry_data_t out; + scsi_inquiry_cmd_t in; + } data; + } arg; + + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + char buf[32]; + + *vendor = NULL; + *product = NULL; + + memset (&arg, 0x00, sizeof(struct scsi_arg)); + arg.inlen = 0; + arg.outlen = sizeof(scsi_inquiry_data_t); + arg.data.in.op = INQUIRY; + arg.data.in.lun = dev->host << 5; + arg.data.in.alloc_length = sizeof(scsi_inquiry_data_t); + arg.data.in.page_code = 0; + arg.data.in.reserved = 0; + arg.data.in.control = 0; + + if (ioctl (arch_specific->fd, SCSI_IOCTL_SEND_COMMAND, &arg) < 0) + return 0; + + memcpy (buf, arg.data.out.vendor_id, 8); + buf[8] = '\0'; + *vendor = strip_name (buf); + + memcpy (buf, arg.data.out.product_id, 16); + buf[16] = '\0'; + *product = strip_name (buf); + + return 1; +} + +/* This function provides the vendor and product name for a SCSI device. + * It supports both the modern /sys interface and direct queries + * via the deprecated ioctl, SCSI_IOCTL_SEND_COMMAND. + */ +static int +scsi_get_product_info (PedDevice* dev, char **vendor, char **product) +{ + *vendor = read_device_sysfs_file (dev, "vendor"); + *product = read_device_sysfs_file (dev, "model"); + if (*vendor && *product) + return 1; + + return scsi_query_product_info (dev, vendor, product); +} + +static int +init_scsi (PedDevice* dev) +{ + struct scsi_idlun + { + uint32_t dev_id; + uint32_t host_unique_id; + } idlun; + + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + char* vendor; + char* product; + + if (!_device_open_ro (dev)) + goto error; + + if (ioctl (arch_specific->fd, SCSI_IOCTL_GET_IDLUN, &idlun) < 0) { + dev->host = 0; + dev->did = 0; + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_IGNORE_CANCEL, + _("Error initialising SCSI device %s - %s"), + dev->path, strerror (errno)) + != PED_EXCEPTION_IGNORE) + goto error_close_dev; + if (!_device_probe_geometry (dev)) + goto error_close_dev; + _device_close (dev); + return 1; + } + + dev->host = idlun.host_unique_id; + dev->did = idlun.dev_id; + + dev->model = (char*) ped_malloc (8 + 16 + 2); + if (!dev->model) + goto error_close_dev; + + if (scsi_get_product_info (dev, &vendor, &product)) { + sprintf (dev->model, "%.8s %.16s", vendor, product); + free (vendor); + free (product); + } else { + strcpy (dev->model, "Generic SCSI"); + } + + if (!_device_probe_geometry (dev)) + goto error_close_dev; + + _device_close (dev); + return 1; + +error_close_dev: + _device_close (dev); +error: + return 0; +} + +static int +init_file (PedDevice* dev) +{ + struct stat dev_stat; + + if (!_device_stat (dev, &dev_stat)) + goto error; + if (!_device_open_ro (dev)) + goto error; + + dev->sector_size = PED_SECTOR_SIZE_DEFAULT; + char *p = getenv ("PARTED_SECTOR_SIZE"); + if (p) { + int s = atoi (p); + if (0 < s && s % 512 == 0) + dev->sector_size = s; + } + dev->phys_sector_size = dev->sector_size; + + if (S_ISBLK(dev_stat.st_mode)) + dev->length = _device_get_length (dev); + else + dev->length = dev_stat.st_size / dev->sector_size; + if (dev->length <= 0) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The device %s is so small that it cannot possibly " + "store a file system or partition table. Perhaps " + "you selected the wrong device?"), + dev->path); + goto error_close_dev; + } + + _device_close (dev); + + dev->bios_geom.cylinders = dev->length / 4 / 32; + dev->bios_geom.heads = 4; + dev->bios_geom.sectors = 32; + dev->hw_geom = dev->bios_geom; + dev->model = strdup (""); + + return 1; + +error_close_dev: + _device_close (dev); +error: + return 0; +} + +#if defined __s390__ || defined __s390x__ +static int +init_dasd (PedDevice* dev, const char* model_name) +{ + struct stat dev_stat; + struct hd_geometry geo; + dasd_information_t dasd_info; + + if (!_device_stat (dev, &dev_stat)) + goto error; + + if (!_device_open_ro (dev)) + goto error; + + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + + PED_ASSERT (S_ISBLK (dev_stat.st_mode)); + + _device_set_sector_size (dev); + if (!dev->sector_size) + goto error_close_dev; + + dev->length = _device_get_length (dev); + if (!dev->length) + goto error_close_dev; + + if (!ioctl (arch_specific->fd, HDIO_GETGEO, &geo)) { + dev->hw_geom.sectors = geo.sectors; + dev->hw_geom.heads = geo.heads; + dev->hw_geom.cylinders = dev->length + / (dev->hw_geom.heads * dev->hw_geom.sectors) + / (dev->sector_size / PED_SECTOR_SIZE_DEFAULT); + dev->bios_geom = dev->hw_geom; + } else { + dev->bios_geom.sectors = 12; + dev->bios_geom.heads = 15; + dev->bios_geom.cylinders = dev->length + / (dev->hw_geom.heads * dev->hw_geom.sectors) + / (dev->sector_size / PED_SECTOR_SIZE_DEFAULT); + dev->hw_geom = dev->bios_geom; + } + + if (!ioctl(arch_specific->fd, BIODASDINFO, &dasd_info)) { + arch_specific->devno = dasd_info.devno; + } else { + arch_specific->devno = arch_specific->major * 256 + + arch_specific->minor; + } + + dev->model = strdup (model_name); + + _device_close (dev); + return 1; + +error_close_dev: + _device_close (dev); +error: + return 0; +} +#endif + +static int +init_generic (PedDevice* dev, const char* model_name) +{ + struct stat dev_stat; + PedExceptionOption ex_status; + + if (!_device_stat (dev, &dev_stat)) + goto error; + + if (!_device_open_ro (dev)) + goto error; + + ped_exception_fetch_all (); + if (_device_probe_geometry (dev)) { + ped_exception_leave_all (); + } else { + if (!_device_get_length (dev)) { + ped_exception_catch (); + ped_exception_leave_all (); + goto error_close_dev; + } + + /* hack to allow use of files, for testing */ + ped_exception_catch (); + ped_exception_leave_all (); + + ex_status = ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("Unable to determine geometry of " + "file/device %s. You should not use Parted " + "unless you REALLY know what you're doing!"), + dev->path); + switch (ex_status) { + case PED_EXCEPTION_CANCEL: + goto error_close_dev; + + case PED_EXCEPTION_UNHANDLED: + ped_exception_catch (); + /* FALLTHROUGH */ + case PED_EXCEPTION_IGNORE: + break; + default: + PED_ASSERT (0); + break; + } + + /* what should we stick in here? */ + dev->length = dev_stat.st_size / PED_SECTOR_SIZE_DEFAULT; + dev->bios_geom.cylinders = dev->length / 4 / 32; + dev->bios_geom.heads = 4; + dev->bios_geom.sectors = 32; + dev->sector_size = PED_SECTOR_SIZE_DEFAULT; + dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT; + } + + dev->model = strdup (model_name); + + _device_close (dev); + return 1; + +error_close_dev: + _device_close (dev); +error: + return 0; +} + +static int +sdmmc_get_product_info (PedDevice* dev, char **type, char **name) +{ + *type = read_device_sysfs_file (dev, "type"); + *name = read_device_sysfs_file (dev, "name"); + if (*type && *name) + return 1; + + return 0; +} + +static int +init_sdmmc (PedDevice* dev) +{ + char id[128]; + char *type = NULL; + char *name = NULL; + + if (sdmmc_get_product_info (dev, &type, &name)) { + snprintf (id, sizeof(id) - 1, "%s %s", type, name); + } else { + snprintf (id, sizeof(id) - 1, "%s", + _("Generic SD/MMC Storage Card")); + } + free (type); + free (name); + return init_generic(dev, id); +} + +static int +init_nvme (PedDevice* dev) +{ + int ret; + char *model = read_device_sysfs_file (dev, "model"); + + if (!model) + ret = init_generic (dev, _("NVMe Device")); + else { + ret = init_generic (dev, model); + free (model); + } + + return ret; +} + +static PedDevice* +linux_new (const char* path) +{ + PedDevice* dev; + LinuxSpecific* arch_specific; + + PED_ASSERT (path != NULL); + + dev = (PedDevice*) ped_malloc (sizeof (PedDevice)); + if (!dev) + goto error; + + dev->path = strdup (path); + if (!dev->path) + goto error_free_dev; + + dev->arch_specific + = (LinuxSpecific*) ped_malloc (sizeof (LinuxSpecific)); + if (!dev->arch_specific) + goto error_free_path; + arch_specific = LINUX_SPECIFIC (dev); + arch_specific->dmtype = NULL; +#if USE_BLKID + arch_specific->probe = NULL; + arch_specific->topology = NULL; +#endif + + dev->open_count = 0; + dev->read_only = 0; + dev->external_mode = 0; + dev->dirty = 0; + dev->boot_dirty = 0; + +#ifdef ENABLE_DEVICE_MAPPER + dm_udev_set_sync_support(1); +#endif + + if (!_device_probe_type (dev)) + goto error_free_arch_specific; + + switch (dev->type) { + case PED_DEVICE_IDE: + if (!init_ide (dev)) + goto error_free_arch_specific; + break; + + case PED_DEVICE_SCSI: + if (!init_scsi (dev)) + goto error_free_arch_specific; + break; + + case PED_DEVICE_DAC960: + if (!init_generic (dev, _("DAC960 RAID controller"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_SX8: + if (!init_generic (dev, _("Promise SX8 SATA Device"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_AOE: + if (!init_generic (dev, _("ATA over Ethernet Device"))) + goto error_free_arch_specific; + break; + +#if defined __s390__ || defined __s390x__ + case PED_DEVICE_DASD: + if (!init_dasd (dev, _("IBM S390 DASD drive"))) + goto error_free_arch_specific; + break; +#endif + + case PED_DEVICE_VIODASD: + if (!init_generic (dev, _("IBM iSeries Virtual DASD"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_CPQARRAY: + if (!init_generic (dev, _("Compaq Smart Array"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_NVME: + if (!init_nvme (dev)) + goto error_free_arch_specific; + break; + + case PED_DEVICE_PMEM: + if (!init_generic (dev, _("NVDIMM Device"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_ATARAID: + if (!init_generic (dev, _("ATARAID Controller"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_I2O: + if (!init_generic (dev, _("I2O Controller"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_UBD: + if (!init_generic (dev, _("User-Mode Linux UBD"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_FILE: + if (!init_file (dev)) + goto error_free_arch_specific; + break; + + case PED_DEVICE_LOOP: + if (!init_generic (dev, _("Loopback device"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_DM: + { + char* type; + if (arch_specific->dmtype == NULL + || asprintf(&type, _("Linux device-mapper (%s)"), + arch_specific->dmtype) == -1) + goto error_free_arch_specific; + bool ok = init_generic (dev, type); + free (type); + if (!ok) + goto error_free_arch_specific; + break; + } + + case PED_DEVICE_XVD: + if (!init_generic (dev, _("Xen Virtual Block Device"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_UNKNOWN: + if (!init_generic (dev, _("Unknown"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_SDMMC: + if (!init_sdmmc (dev)) + goto error_free_arch_specific; + break; + case PED_DEVICE_VIRTBLK: + if (!init_generic(dev, _("Virtio Block Device"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_MD: + if (!init_generic(dev, _("Linux Software RAID Array"))) + goto error_free_arch_specific; + break; + + case PED_DEVICE_RAM: + if (!init_generic (dev, _("RAM Drive"))) + goto error_free_arch_specific; + break; + + default: + ped_exception_throw (PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("ped_device_new() Unsupported device type")); + goto error_free_arch_specific; + } + return dev; + +error_free_arch_specific: + free (dev->arch_specific); +error_free_path: + free (dev->path); +error_free_dev: + free (dev); +error: + return NULL; +} + +static void +linux_destroy (PedDevice* dev) +{ + LinuxSpecific *arch_specific = LINUX_SPECIFIC(dev); + void *p = arch_specific->dmtype; + +#if USE_BLKID + if (arch_specific->probe) + blkid_free_probe(arch_specific->probe); +#endif + free (p); + free (dev->arch_specific); + free (dev->path); + free (dev->model); + free (dev); +} + +static int +linux_is_busy (PedDevice* dev) +{ + int i; + char* part_name; + + if (_partition_is_mounted_by_path (dev->path)) + return 1; + + for (i = 0; i < 32; i++) { + int status; + + part_name = _device_get_part_path (dev, i); + if (!part_name) + return 1; + status = _partition_is_mounted_by_path (part_name); + free (part_name); + + if (status) + return 1; + } + + return 0; +} + +/* we need to flush the master device, and all the partition devices, + * because there is no coherency between the caches. + * We should only flush unmounted partition devices, because: + * - there is never a need to flush them (we're not doing IO there) + * - flushing a device that is mounted causes unnecessary IO, and can + * even screw journaling & friends up. Even cause oopsen! + */ +static void +_flush_cache (PedDevice* dev) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + int i; + int lpn = _device_get_partition_range(dev); + + if (dev->read_only || dev->type == PED_DEVICE_RAM) + return; + dev->dirty = 0; + + ioctl (arch_specific->fd, BLKFLSBUF); + + for (i = 1; i < lpn; i++) { + char* name; + int fd; + + name = _device_get_part_path (dev, i); + if (!name) + break; + if (!_partition_is_mounted_by_path (name)) { + fd = open (name, WR_MODE, 0); + if (fd > -1) { + ioctl (fd, BLKFLSBUF); +retry: + if (fsync (fd) < 0 || close (fd) < 0) + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_RETRY + + PED_EXCEPTION_IGNORE, + _("Error fsyncing/closing %s: %s"), + name, strerror (errno)) + == PED_EXCEPTION_RETRY) + goto retry; + } + } + free (name); + } +} + +static int +_device_open_ro (PedDevice* dev) +{ + int rc = _device_open (dev, RD_MODE); + if (rc) + dev->open_count++; + return rc; +} + +static int +linux_open (PedDevice* dev) +{ + return _device_open (dev, RW_MODE); +} + +static int +_device_open (PedDevice* dev, int flags) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + +retry: + arch_specific->fd = open (dev->path, flags); + + if (arch_specific->fd == -1) { + char* rw_error_msg = strerror (errno); + + arch_specific->fd = open (dev->path, RD_MODE); + + if (arch_specific->fd == -1) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_RETRY_CANCEL, + _("Error opening %s: %s"), + dev->path, strerror (errno)) + != PED_EXCEPTION_RETRY) { + return 0; + } else { + goto retry; + } + } else { + ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_OK, + _("Unable to open %s read-write (%s). %s has " + "been opened read-only."), + dev->path, rw_error_msg, dev->path); + dev->read_only = 1; + } + } else { + dev->read_only = 0; + } + + _flush_cache (dev); + + return 1; +} + +static int +linux_refresh_open (PedDevice* dev) +{ + return 1; +} + +static int +linux_close (PedDevice* dev) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + + if (dev->dirty) + _flush_cache (dev); +retry: + if (fsync (arch_specific->fd) < 0 || close (arch_specific->fd) < 0) + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_RETRY + PED_EXCEPTION_IGNORE, + _("Error fsyncing/closing %s: %s"), + dev->path, strerror (errno)) + == PED_EXCEPTION_RETRY) + goto retry; + return 1; +} + +static int +linux_refresh_close (PedDevice* dev) +{ + if (dev->dirty) + _flush_cache (dev); + return 1; +} + +static int +_device_close (PedDevice* dev) +{ + int rc = linux_close (dev); + if (dev->open_count > 0) + dev->open_count--; + return rc; +} + +#if SIZEOF_OFF_T < 8 + +static _syscall5(int,_llseek, + unsigned int, fd, + unsigned long, offset_high, + unsigned long, offset_low, + loff_t*, result, + unsigned int, origin) + +loff_t +llseek (unsigned int fd, loff_t offset, unsigned int whence) +{ + loff_t result; + int retval; + + retval = _llseek(fd, + ((unsigned long long)offset) >> 32, + ((unsigned long long)offset) & 0xffffffff, + &result, + whence); + return (retval==-1 ? (loff_t) retval : result); +} + +#endif /* SIZEOF_OFF_T < 8 */ + +static int +_device_seek (const PedDevice* dev, PedSector sector) +{ + LinuxSpecific* arch_specific; + + PED_ASSERT (dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0); + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + + arch_specific = LINUX_SPECIFIC (dev); + +#if SIZEOF_OFF_T < 8 + if (sizeof (off_t) < 8) { + loff_t pos = (loff_t)(sector * dev->sector_size); + return llseek (arch_specific->fd, pos, SEEK_SET) == pos; + } else +#endif + { + off_t pos = sector * dev->sector_size; + return lseek (arch_specific->fd, pos, SEEK_SET) == pos; + } +} + +static int +_read_lastoddsector (const PedDevice* dev, void* buffer) +{ + LinuxSpecific* arch_specific; + struct blkdev_ioctl_param ioctl_param; + + PED_ASSERT(dev != NULL); + PED_ASSERT(buffer != NULL); + + arch_specific = LINUX_SPECIFIC (dev); + +retry: + ioctl_param.block = 0; /* read the last sector */ + ioctl_param.content_length = dev->sector_size; + ioctl_param.block_contents = buffer; + + if (ioctl(arch_specific->fd, BLKGETLASTSECT, &ioctl_param) == -1) { + PedExceptionOption opt; + opt = ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_RETRY_IGNORE_CANCEL, + _("%s during read on %s"), + strerror (errno), dev->path); + + if (opt == PED_EXCEPTION_CANCEL) + return 0; + if (opt == PED_EXCEPTION_RETRY) + goto retry; + } + + return 1; +} + +static int +linux_read (const PedDevice* dev, void* buffer, PedSector start, + PedSector count) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + PedExceptionOption ex_status; + void* diobuf = NULL; + + PED_ASSERT (dev != NULL); + PED_ASSERT (dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0); + + if (_get_linux_version() < KERNEL_VERSION (2,6,0)) { + /* Kludge. This is necessary to read/write the last + block of an odd-sized disk, until Linux 2.5.x kernel fixes. + */ + if (dev->type != PED_DEVICE_FILE && (dev->length & 1) + && start + count - 1 == dev->length - 1) + return ped_device_read (dev, buffer, start, count - 1) + && _read_lastoddsector ( + dev, (char *) buffer + (count-1) * 512); + } + while (1) { + if (_device_seek (dev, start)) + break; + + ex_status = ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_RETRY_IGNORE_CANCEL, + _("%s during seek for read on %s"), + strerror (errno), dev->path); + + switch (ex_status) { + case PED_EXCEPTION_IGNORE: + return 1; + + case PED_EXCEPTION_RETRY: + break; + + case PED_EXCEPTION_UNHANDLED: + ped_exception_catch (); + /* FALLTHROUGH */ + case PED_EXCEPTION_CANCEL: + return 0; + default: + PED_ASSERT (0); + break; + } + } + + size_t read_length = count * dev->sector_size; + if (posix_memalign (&diobuf, dev->sector_size, read_length) != 0) + return 0; + + while (1) { + ssize_t status = read (arch_specific->fd, diobuf, read_length); + if (status > 0) + memcpy(buffer, diobuf, status); + if (status == (ssize_t) read_length) + break; + if (status > 0) { + read_length -= status; + buffer = (char *) buffer + status; + continue; + } + + ex_status = ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_RETRY_IGNORE_CANCEL, + (status == 0 + ? _("%0.0send of file while reading %s") + : _("%s during read on %s")), + strerror (errno), + dev->path); + + switch (ex_status) { + case PED_EXCEPTION_IGNORE: + free(diobuf); + return 1; + + case PED_EXCEPTION_RETRY: + break; + + case PED_EXCEPTION_UNHANDLED: + ped_exception_catch (); + /* FALLTHROUGH */ + case PED_EXCEPTION_CANCEL: + free(diobuf); + return 0; + default: + PED_ASSERT (0); + break; + } + } + + free (diobuf); + + return 1; +} + +static int +_write_lastoddsector (PedDevice* dev, const void* buffer) +{ + LinuxSpecific* arch_specific; + struct blkdev_ioctl_param ioctl_param; + + PED_ASSERT(dev != NULL); + PED_ASSERT(buffer != NULL); + + arch_specific = LINUX_SPECIFIC (dev); + +retry: + ioctl_param.block = 0; /* write the last sector */ + ioctl_param.content_length = dev->sector_size; + ioctl_param.block_contents = (void*) buffer; + + if (ioctl(arch_specific->fd, BLKSETLASTSECT, &ioctl_param) == -1) { + PedExceptionOption opt; + opt = ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_RETRY_IGNORE_CANCEL, + _("%s during write on %s"), + strerror (errno), dev->path); + + if (opt == PED_EXCEPTION_CANCEL) + return 0; + if (opt == PED_EXCEPTION_RETRY) + goto retry; + } + + return 1; +} + +static int +linux_write (PedDevice* dev, const void* buffer, PedSector start, + PedSector count) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + PedExceptionOption ex_status; + void* diobuf; + void* diobuf_start; + + PED_ASSERT(dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0); + + if (dev->read_only) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Can't write to %s, because it is opened read-only."), + dev->path) + != PED_EXCEPTION_IGNORE) + return 0; + else + return 1; + } + + if (_get_linux_version() < KERNEL_VERSION (2,6,0)) { + /* Kludge. This is necessary to read/write the last + block of an odd-sized disk, until Linux 2.5.x kernel fixes. + */ + if (dev->type != PED_DEVICE_FILE && (dev->length & 1) + && start + count - 1 == dev->length - 1) + return ped_device_write (dev, buffer, start, count - 1) + && _write_lastoddsector ( + dev, ((char*) buffer + + (count-1) * dev->sector_size)); + } + while (1) { + if (_device_seek (dev, start)) + break; + + ex_status = ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_RETRY_IGNORE_CANCEL, + _("%s during seek for write on %s"), + strerror (errno), dev->path); + + switch (ex_status) { + case PED_EXCEPTION_IGNORE: + return 1; + + case PED_EXCEPTION_RETRY: + break; + + case PED_EXCEPTION_UNHANDLED: + ped_exception_catch (); + /* FALLTHROUGH */ + case PED_EXCEPTION_CANCEL: + return 0; + default: + PED_ASSERT (0); + break; + } + } + +#ifdef READ_ONLY + printf ("ped_device_write (\"%s\", %p, %d, %d)\n", + dev->path, buffer, (int) start, (int) count); +#else + size_t write_length = count * dev->sector_size; + dev->dirty = 1; + if (posix_memalign(&diobuf, dev->sector_size, write_length) != 0) + return 0; + memcpy(diobuf, buffer, write_length); + diobuf_start = diobuf; + while (1) { + ssize_t status = write (arch_specific->fd, diobuf, write_length); + if (status == write_length) break; + if (status > 0) { + write_length -= status; + diobuf = (char *) diobuf + status; + continue; + } + + ex_status = ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_RETRY_IGNORE_CANCEL, + _("%s during write on %s"), + strerror (errno), dev->path); + + switch (ex_status) { + case PED_EXCEPTION_IGNORE: + free(diobuf_start); + return 1; + + case PED_EXCEPTION_RETRY: + break; + + case PED_EXCEPTION_UNHANDLED: + ped_exception_catch (); + /* FALLTHROUGH */ + case PED_EXCEPTION_CANCEL: + free(diobuf_start); + return 0; + default: + PED_ASSERT (0); + break; + } + } + free(diobuf_start); +#endif /* !READ_ONLY */ + return 1; +} + +/* returns the number of sectors that are ok. + */ +static PedSector +linux_check (PedDevice* dev, void* buffer, PedSector start, PedSector count) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + PedSector done = 0; + int status; + void* diobuf; + + PED_ASSERT(dev != NULL); + + if (!_device_seek (dev, start)) + return 0; + + if (posix_memalign(&diobuf, PED_SECTOR_SIZE_DEFAULT, + count * PED_SECTOR_SIZE_DEFAULT) != 0) + return 0; + + for (done = 0; done < count; done += status / dev->sector_size) { + status = read (arch_specific->fd, diobuf, + (size_t) ((count-done) * dev->sector_size)); + if (status > 0) + memcpy(buffer, diobuf, status); + if (status < 0) + break; + } + free(diobuf); + + return done; +} + +static int +_do_fsync (PedDevice* dev) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + int status; + PedExceptionOption ex_status; + + while (1) { + status = fsync (arch_specific->fd); + if (status >= 0) break; + + ex_status = ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_RETRY_IGNORE_CANCEL, + _("%s during write on %s"), + strerror (errno), dev->path); + + switch (ex_status) { + case PED_EXCEPTION_IGNORE: + return 1; + + case PED_EXCEPTION_RETRY: + break; + + case PED_EXCEPTION_UNHANDLED: + ped_exception_catch (); + /* FALLTHROUGH */ + case PED_EXCEPTION_CANCEL: + return 0; + default: + PED_ASSERT (0); + break; + } + } + return 1; +} + +static int +linux_sync (PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + + if (dev->read_only) + return 1; + if (!_do_fsync (dev)) + return 0; + _flush_cache (dev); + return 1; +} + +static int +linux_sync_fast (PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + + if (dev->read_only) + return 1; + if (!_do_fsync (dev)) + return 0; + /* no cache flush... */ + return 1; +} + +static inline int +_compare_digit_state (char ch, int need_digit) +{ + return !!isdigit (ch) == need_digit; +} + +/* matches the regexp "[^0-9]+[0-9]+[^0-9]+[0-9]+$". + * Motivation: accept devices looking like /dev/rd/c0d0, but + * not looking like /dev/hda1 and /dev/rd/c0d0p1 + */ +static int _GL_ATTRIBUTE_PURE +_match_rd_device (const char* name) +{ + const char* pos; + int state; + + /* exclude directory names from test */ + pos = strrchr(name, '/') ?: name; + + /* states: + * 0 non-digits + * 1 digits + * 2 non-digits + * 3 digits + */ + for (state = 0; state < 4; state++) { + int want_digits = (state % 2 == 1); + do { + if (!*pos) + return 0; + if (!_compare_digit_state (*pos, want_digits)) + return 0; + pos++; + } while (_compare_digit_state (*pos, want_digits)); + } + + return *pos == 0; +} + +static int +_probe_proc_partitions () +{ + FILE* proc_part_file; + int major, minor, size; + char buf [512]; + char part_name [256]; + char dev_name [256]; + int ok = 0; + + proc_part_file = fopen ("/proc/partitions", "r"); + if (!proc_part_file) + return 0; + + if (fgets (buf, 256, proc_part_file) == NULL) + goto done; + + if (fgets (buf, 256, proc_part_file) == NULL) + goto done; + + while (fgets (buf, 512, proc_part_file) + && sscanf (buf, "%d %d %d %255s", &major, &minor, &size, + part_name) == 4) { + /* Heuristic for telling partitions and devices apart + * Probably needs to be improved + */ + if (!_match_rd_device (part_name) + && isdigit (part_name [strlen (part_name) - 1])) + continue; + + strcpy (dev_name, "/dev/"); + strcat (dev_name, part_name); + _ped_device_probe (dev_name); + } + + ok = 1; + done: + fclose (proc_part_file); + return ok; +} + +struct _entry { + const char *name; + size_t len; +}; + +static int _GL_ATTRIBUTE_PURE +_skip_entry (const char *name) +{ + struct _entry *i; + static struct _entry entries[] = { + { ".", sizeof (".") - 1 }, + { "..", sizeof ("..") - 1 }, + { "dm-", sizeof ("dm-") - 1 }, + { "loop", sizeof ("loop") - 1 }, + { "ram", sizeof ("ram") - 1 }, + { "fd", sizeof ("fd") - 1 }, + { 0, 0 }, + }; + + for (i = entries; i->name != 0; i++) { + if (strncmp (name, i->name, i->len) == 0) + return 1; + } + + return 0; +} + +static int +_probe_sys_block () +{ + DIR *blockdir; + struct dirent *dirent; + char dev_name [256]; + char *ptr; + + if (!(blockdir = opendir ("/sys/block"))) + return 0; + while ((dirent = readdir (blockdir))) { + if (_skip_entry (dirent->d_name)) + continue; + + if (strlen (dirent->d_name) > sizeof (dev_name) - 6) + continue; /* device name too long! */ + + strcpy (dev_name, "/dev/"); + strcat (dev_name, dirent->d_name); + /* in /sys/block, '/'s are replaced with '!' */ + for (ptr = dev_name; *ptr != '\0'; ptr++) { + if (*ptr == '!') + *ptr = '/'; + } + _ped_device_probe (dev_name); + } + + closedir (blockdir); + return 1; +} + +static int +_probe_standard_devices () +{ + _ped_device_probe ("/dev/hda"); + _ped_device_probe ("/dev/hdb"); + _ped_device_probe ("/dev/hdc"); + _ped_device_probe ("/dev/hdd"); + _ped_device_probe ("/dev/hde"); + _ped_device_probe ("/dev/hdf"); + _ped_device_probe ("/dev/hdg"); + _ped_device_probe ("/dev/hdh"); + + _ped_device_probe ("/dev/sda"); + _ped_device_probe ("/dev/sdb"); + _ped_device_probe ("/dev/sdc"); + _ped_device_probe ("/dev/sdd"); + _ped_device_probe ("/dev/sde"); + _ped_device_probe ("/dev/sdf"); + + return 1; +} + +static void +linux_probe_all () +{ + /* we should probe the standard devs too, even with /proc/partitions, + * because /proc/partitions might return devfs stuff, and we might not + * have devfs available + */ + _probe_standard_devices (); + +#ifdef ENABLE_DEVICE_MAPPER + /* device-mapper devices aren't listed in /proc/partitions; or, if + * they are, they're listed as dm-X. So, instead of relying on that, + * we do our own checks. + */ + _probe_dm_devices (); +#endif + + /* /sys/block is more reliable and consistent; fall back to using + * /proc/partitions if the former is unavailable, however. + */ + if (!_probe_sys_block ()) + _probe_proc_partitions (); +} + +static char * _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)) +zasprintf (const char *format, ...) +{ + va_list args; + char *resultp; + va_start (args, format); + int r = vasprintf (&resultp, format, args); + va_end (args); + return r < 0 ? NULL : resultp; +} + +#ifdef ENABLE_DEVICE_MAPPER +static char * +dm_canonical_path (PedDevice const *dev) +{ + LinuxSpecific const *arch_specific = LINUX_SPECIFIC (dev); + + /* Get map name from devicemapper */ + struct dm_task *task = dm_task_create (DM_DEVICE_INFO); + if (!task) + goto err; + if (!dm_task_set_major_minor (task, arch_specific->major, + arch_specific->minor, 0)) + goto err; + if (!dm_task_run(task)) + goto err; + char *dev_name = zasprintf ("/dev/mapper/%s", dm_task_get_name (task)); + if (dev_name == NULL) + goto err; + dm_task_destroy (task); + return dev_name; +err: + return NULL; +} +#endif + +static char* +_device_get_part_path (PedDevice const *dev, int num) +{ + char *devpath; + size_t path_len; + char *result; +#ifdef ENABLE_DEVICE_MAPPER + devpath = (dev->type == PED_DEVICE_DM + ? dm_canonical_path (dev) : dev->path); +#else + devpath = dev->path; +#endif + if (!devpath) + return NULL; + + path_len = strlen (devpath); + /* Check for devfs-style /disc => /partN transformation + unconditionally; the system might be using udev with devfs rules, + and if not the test is harmless. */ + if (5 < path_len && !strcmp (devpath + path_len - 5, "/disc")) { + /* replace /disc with /part%d */ + result = zasprintf ("%.*s/part%d", + (int) (path_len - 5), devpath, num); + } else { + char const *p = (dev->type == PED_DEVICE_DAC960 + || dev->type == PED_DEVICE_CPQARRAY + || dev->type == PED_DEVICE_ATARAID + || isdigit (devpath[path_len - 1]) + ? "p" : ""); + result = zasprintf ("%s%s%d", devpath, p, num); + } +#ifdef ENABLE_DEVICE_MAPPER + if (dev->type == PED_DEVICE_DM) + free (devpath); +#endif + return result; +} + +static char* +linux_partition_get_path (const PedPartition* part) +{ + /* loop label means use the whole disk */ + if (strcmp (part->disk->type->name, "loop") == 0) + return xstrdup (part->disk->dev->path); + return _device_get_part_path (part->disk->dev, part->num); +} + +static int +_mount_table_search (const char* file_name, dev_t dev) +{ + struct stat part_stat; + char line[512]; + char part_name[512]; + FILE* file; + + file = fopen (file_name, "r"); + if (!file) + return 0; + while (fgets (line, 512, file)) { + if (sscanf (line, "%s", part_name) == 1 + && stat (part_name, &part_stat) == 0) { + if (part_stat.st_rdev == dev) { + fclose (file); + return 1; + } + } + } + fclose (file); + return 0; +} + +static int +_partition_is_mounted_by_dev (dev_t dev) +{ + return _mount_table_search( "/proc/mounts", dev) + || _mount_table_search( "/proc/swaps", dev) + || _mount_table_search( "/etc/mtab", dev); +} + +static int +_partition_is_mounted_by_path (const char *path) +{ + struct stat part_stat; + if (stat (path, &part_stat) != 0) + return 0; + if (!S_ISBLK(part_stat.st_mode)) + return 0; + return _partition_is_mounted_by_dev (part_stat.st_rdev); +} + +/* If partition PART is mounted, or if we encounter an out-of-memory error + while trying to determine its status, return 1. Otherwise, return 0. */ +static int +_partition_is_mounted (const PedPartition *part) +{ + if (!ped_partition_is_active (part)) + return 0; + char *part_name = _device_get_part_path (part->disk->dev, part->num); + if (!part_name) + return 1; + int status = _partition_is_mounted_by_path (part_name); + free (part_name); + return !!status; +} + +static int +linux_partition_is_busy (const PedPartition* part) +{ + PedPartition* walk; + + PED_ASSERT (part != NULL); + + if (strcmp (part->disk->type->name, "loop") == 0) + return linux_is_busy (part->disk->dev); + if (_partition_is_mounted (part)) + return 1; + if (part->type == PED_PARTITION_EXTENDED) { + for (walk = part->part_list; walk; walk = walk->next) { + if (linux_partition_is_busy (walk)) + return 1; + } + } + return 0; +} + +static int +_blkpg_part_command (PedDevice* dev, struct blkpg_partition* part, int op) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); + struct blkpg_ioctl_arg ioctl_arg; + + ioctl_arg.op = op; + ioctl_arg.flags = 0; + ioctl_arg.datalen = sizeof (struct blkpg_partition); + ioctl_arg.data = (void*) part; + + return ioctl (arch_specific->fd, BLKPG, &ioctl_arg) == 0; +} + +static int +_blkpg_add_partition (PedDisk* disk, const PedPartition *part) +{ + struct blkpg_partition linux_part; + const char* vol_name; + char* dev_name; + + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0); + + if (ped_disk_type_check_feature (disk->type, + PED_DISK_TYPE_PARTITION_NAME)) + vol_name = ped_partition_get_name (part); + else + vol_name = NULL; + + dev_name = _device_get_part_path (disk->dev, part->num); + if (!dev_name) + return 0; + + memset (&linux_part, 0, sizeof (linux_part)); + linux_part.start = part->geom.start * disk->dev->sector_size; + /* see fs/partitions/msdos.c:msdos_partition(): "leave room for LILO" */ + if (part->type & PED_PARTITION_EXTENDED) { + linux_part.length = 1; + if (disk->dev->sector_size == 512) { + if (linux_part.length == 1) + linux_part.length = 2; + PedPartition *walk; + /* if the second sector is claimed by a logical partition, + then there's just no room for lilo, so don't try to use it */ + for (walk = part->part_list; walk; walk = walk->next) { + if (walk->geom.start == part->geom.start+1) + linux_part.length = 1; + } + } + linux_part.length *= disk->dev->sector_size; + } + else { + linux_part.length = part->geom.length * disk->dev->sector_size; + } + linux_part.pno = part->num; + strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH-1); + linux_part.devname[BLKPG_DEVNAMELTH-1] = '\0'; + if (vol_name) { + strncpy (linux_part.volname, vol_name, BLKPG_VOLNAMELTH-1); + linux_part.volname[BLKPG_VOLNAMELTH-1] = '\0'; + } + + free (dev_name); + + if (!_blkpg_part_command (disk->dev, &linux_part, + BLKPG_ADD_PARTITION)) { + return 0; + } + + return 1; +} + +static int +_blkpg_remove_partition (PedDisk* disk, int n) +{ + struct blkpg_partition linux_part; + + memset (&linux_part, 0, sizeof (linux_part)); + linux_part.pno = n; + return _blkpg_part_command (disk->dev, &linux_part, + BLKPG_DEL_PARTITION); +} + +#ifdef BLKPG_RESIZE_PARTITION +static int _blkpg_resize_partition (PedDisk* disk, const PedPartition *part) +{ + struct blkpg_partition linux_part; + char* dev_name; + + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0); + + dev_name = _device_get_part_path (disk->dev, part->num); + if (!dev_name) + return 0; + memset (&linux_part, 0, sizeof (linux_part)); + linux_part.start = part->geom.start * disk->dev->sector_size; + /* see fs/partitions/msdos.c:msdos_partition(): "leave room for LILO" */ + if (part->type & PED_PARTITION_EXTENDED) { + if (disk->dev->sector_size == 512) { + linux_part.length = 2; + PedPartition *walk; + /* if the second sector is claimed by a logical partition, + then there's just no room for lilo, so don't try to use it */ + for (walk = part->part_list; walk; walk = walk->next) { + if (walk->geom.start == part->geom.start+1) + linux_part.length = 1; + } + } else { + linux_part.length = 1; + } + linux_part.length *= disk->dev->sector_size; + } + else + linux_part.length = part->geom.length * disk->dev->sector_size; + linux_part.pno = part->num; + strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH-1); + linux_part.devname[BLKPG_DEVNAMELTH-1] = '\0'; + + free (dev_name); + + if (!_blkpg_part_command (disk->dev, &linux_part, + BLKPG_RESIZE_PARTITION)) { + return ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Error informing the kernel about modifications to " + "partition %s -- %s. This means Linux won't know " + "about any changes you made to %s until you reboot " + "-- so you shouldn't mount it or use it in any way " + "before rebooting."), + linux_part.devname, + strerror (errno), + linux_part.devname) + == PED_EXCEPTION_IGNORE; + } + + return 1; +} +#endif + +/* Read the integer from /sys/block/DEV_BASE/ENTRY and set *VAL + to that value, where DEV_BASE is the last component of DEV->path. + Upon success, return true. Otherwise, return false. */ +static bool +_sysfs_int_entry_from_dev(PedDevice const* dev, const char *entry, int *val) +{ + char path[128]; + int r = snprintf(path, sizeof(path), "/sys/block/%s/%s", + last_component(dev->path), entry); + if (r < 0 || r >= sizeof(path)) + return false; + + FILE *fp = fopen(path, "r"); + if (!fp) + return false; + + bool ok = fscanf(fp, "%d", val) == 1; + fclose(fp); + + return ok; +} + +/* Read the unsigned long long from /sys/block/DEV_BASE/PART_BASE/ENTRY + and set *VAL to that value, where DEV_BASE is the last component of path to + block device corresponding to PART and PART_BASE is the sysfs name of PART. + Upon success, return true. Otherwise, return false. */ +static bool +_sysfs_ull_entry_from_part(PedPartition const* part, const char *entry, + unsigned long long *val) +{ + char path[128]; + char *part_name = _device_get_part_path (part->disk->dev, part->num); + if (!part_name) + return false; + + int r = snprintf(path, sizeof(path), "/sys/block/%s/%s/%s", + last_component(part->disk->dev->path), + last_component(part_name), entry); + free(part_name); + if (r < 0 || r >= sizeof(path)) + return false; + + FILE *fp = fopen(path, "r"); + if (!fp) + return false; + + bool ok = fscanf(fp, "%llu", val) == 1; + fclose(fp); + + return ok; +} + + +/* Get the starting sector and length of a partition PART within a block device + Use blkpg if available, then check sysfs and then use HDIO_GETGEO and + BLKGETSIZE64 ioctls as fallback. Upon success, return true. Otherwise, + return false. */ +static bool +_kernel_get_partition_start_and_length(PedPartition const *part, + unsigned long long *start, + unsigned long long *length) +{ + PED_ASSERT(part); + PED_ASSERT(start); + PED_ASSERT(length); + + char *dev_name = _device_get_part_path (part->disk->dev, part->num); + if (!dev_name) + return false; + + int ok = _sysfs_ull_entry_from_part (part, "start", start); + if (!ok) { + struct hd_geometry geom; + int dev_fd = open (dev_name, O_RDONLY); + if (dev_fd != -1 && ioctl (dev_fd, HDIO_GETGEO, &geom)) { + *start = geom.start; + close (dev_fd); + ok = true; + } else { + if (dev_fd != -1) + close(dev_fd); + free (dev_name); + return false; + } + } + *start = (*start * 512) / part->disk->dev->sector_size; + ok = _sysfs_ull_entry_from_part (part, "size", length); + + int fd; + if (!ok) { + fd = open (dev_name, O_RDONLY); + if (fd != -1 && ioctl (fd, BLKGETSIZE64, length)) + ok = true; + } else { + fd = -1; + *length *= 512; + } + *length /= part->disk->dev->sector_size; + if (fd != -1) + close (fd); + + if (!ok) + ped_exception_throw ( + PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("Unable to determine the start and length of %s."), + dev_name); + free (dev_name); + return ok; +} + + +/* + * The number of partitions that a device can have depends on the kernel. + * If we don't find this value in /sys/block/DEV/ext_range, we will use our own + * value. + */ +static unsigned int +_device_get_partition_range(PedDevice const* dev) +{ + int range; + if (dev->type == PED_DEVICE_DM) + return MAX_NUM_PARTS; + bool ok = _sysfs_int_entry_from_dev(dev, "ext_range", &range); + + if (!ok) + return MAX_NUM_PARTS; + /* both 0 and 1 mean no partitions */ + return range > 1 ? range : 0; +} + +#ifdef ENABLE_DEVICE_MAPPER +static int +_dm_remove_partition(PedDisk* disk, int partno) +{ + int rc = 0; + uint32_t cookie = 0; + char *part_name = _device_get_part_path (disk->dev, partno); + + int fd = open (part_name, O_RDONLY | O_EXCL); + if (fd == -1) { + if (errno == ENOENT) + errno = ENXIO; /* nothing to remove, device already doesn't exist */ + goto err; + } + close (fd); + struct dm_task *task = dm_task_create(DM_DEVICE_REMOVE); + if (!task) + goto err; + dm_task_set_name (task, part_name); + dm_task_retry_remove(task); + if (!dm_task_set_cookie (task, &cookie, 0)) + goto err; + rc = _dm_task_run_wait (task, cookie); + dm_task_update_nodes(); + dm_task_destroy(task); +err: + free (part_name); + return rc; +} + +static bool +_dm_get_partition_start_and_length(PedPartition const *part, + unsigned long long *start, + unsigned long long *length) +{ + struct dm_task* task = NULL; + int rc = 0; + + if (!(task = dm_task_create(DM_DEVICE_TABLE))) + return 0; + char *path = _device_get_part_path (part->disk->dev, part->num); + PED_ASSERT(path); + /* libdevmapper likes to complain on stderr instead of quietly + returning ENOENT or ENXIO, so try to stat first */ + struct stat st; + if (stat(path, &st)) + goto err; + dm_task_set_name(task, path); + if (!dm_task_run(task)) + goto err; + + int major, minor; + char *params; + char *target_type; + dm_get_next_target(task, NULL, (uint64_t *)start, (uint64_t *)length, &target_type, ¶ms); + if (sscanf (params, "%d:%d %Lu", &major, &minor, start) != 3) + goto err; + rc = 1; + + /* device-mapper uses 512b units, make sure we return length and start in terms of the device's + * sector size. + */ + *start /= (part->disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT); + *length /= (part->disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT); +err: + free (path); + dm_task_destroy(task); + return rc; +} + + +static int +_dm_add_partition (PedDisk* disk, const PedPartition* part) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (disk->dev); + char* params = NULL; + char* vol_name = NULL; + const char* dev_name = NULL; + char* vol_uuid = NULL; + const char* dev_uuid = NULL; + uint32_t cookie = 0; + + /* Get map name from devicemapper */ + struct dm_task *task = dm_task_create (DM_DEVICE_INFO); + if (!task) + goto err; + + if (!dm_task_set_major_minor (task, arch_specific->major, + arch_specific->minor, 0)) + goto err; + + if (!dm_task_run(task)) + goto err; + + dev_name = dm_task_get_name (task); + size_t name_len = strlen (dev_name); + vol_name = zasprintf ("%s%s%d", + dev_name, + isdigit (dev_name[name_len - 1]) ? "p" : "", + part->num); + if (vol_name == NULL) + goto err; + + dev_uuid = dm_task_get_uuid (task); + if (dev_uuid && (strlen(dev_uuid) > 0) + && !(vol_uuid = zasprintf ("part%d-%s", part->num, dev_uuid))) + goto err; + + /* Caution: dm_task_destroy frees dev_name. */ + dm_task_destroy (task); + task = NULL; + /* device-mapper uses 512b units, not the device's sector size */ + if ( ! (params = zasprintf ("%d:%d %lld", arch_specific->major, + arch_specific->minor, + part->geom.start * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT)))) + goto err; + + task = dm_task_create (DM_DEVICE_CREATE); + if (!task) + goto err; + + dm_task_set_name (task, vol_name); + if (vol_uuid) + dm_task_set_uuid (task, vol_uuid); + /* device-mapper uses 512b units, not the device's sector size */ + dm_task_add_target (task, 0, part->geom.length * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT), + "linear", params); + if (!dm_task_set_cookie (task, &cookie, 0)) + goto err; + if (_dm_task_run_wait (task, cookie)) { + dm_task_update_nodes (); + dm_task_destroy (task); + free (params); + free (vol_uuid); + free (vol_name); + return 1; + } else { + _dm_remove_partition (disk, part->num); + } +err: + dm_task_update_nodes(); + if (task) + dm_task_destroy (task); + free (params); + free (vol_uuid); + free (vol_name); + return 0; +} + +static int +_dm_resize_partition (PedDisk* disk, const PedPartition* part) +{ + LinuxSpecific* arch_specific = LINUX_SPECIFIC (disk->dev); + char* params = NULL; + char* vol_name = NULL; + const char* dev_name = NULL; + uint32_t cookie = 0; + int rc = 0; + + /* Get map name from devicemapper */ + struct dm_task *task = dm_task_create (DM_DEVICE_INFO); + if (!task) + goto err; + + if (!dm_task_set_major_minor (task, arch_specific->major, + arch_specific->minor, 0)) + goto err; + + if (!dm_task_run(task)) + goto err; + + dev_name = dm_task_get_name (task); + size_t name_len = strlen (dev_name); + vol_name = zasprintf ("%s%s%d", + dev_name, + isdigit (dev_name[name_len - 1]) ? "p" : "", + part->num); + if (vol_name == NULL) + goto err; + + /* Caution: dm_task_destroy frees dev_name. */ + dm_task_destroy (task); + task = NULL; + + /* device-mapper uses 512b units, not the device's sector size */ + if ( ! (params = zasprintf ("%d:%d %lld", arch_specific->major, + arch_specific->minor, + part->geom.start * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT)))) + goto err; + + task = dm_task_create (DM_DEVICE_RELOAD); + if (!task) + goto err; + + dm_task_set_name (task, vol_name); + /* device-mapper uses 512b units, not the device's sector size */ + dm_task_add_target (task, 0, part->geom.length * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT), + "linear", params); + /* NOTE: DM_DEVICE_RELOAD doesn't generate udev events, so no cookie is needed (it will freeze). + * DM_DEVICE_RESUME does, so get a cookie and synchronize with udev. + */ + if (dm_task_run (task)) { + dm_task_destroy (task); + task = dm_task_create (DM_DEVICE_RESUME); + if (!task) + goto err; + dm_task_set_name (task, vol_name); + if (!dm_task_set_cookie (task, &cookie, 0)) + goto err; + if (_dm_task_run_wait (task, cookie)) { + rc = 1; + } + } +err: + dm_task_update_nodes(); + if (task) + dm_task_destroy (task); + free (params); + free (vol_name); + return rc; +} + +#endif + +/* + * Sync the partition table in two step process: + * 1. Remove all of the partitions from the kernel's tables, but do not attempt + * removal of any partition for which the corresponding ioctl call fails. + * 2. Add all the partitions that we hold in disk, throwing a warning + * if we cannot because step 1 failed to remove it and it is not being + * added back with the same start and length. + * + * To achieve this two step process we must calculate the minimum number of + * maximum possible partitions between what linux supports and what the label + * type supports. EX: + * + * number=MIN(max_parts_supported_in_linux,max_parts_supported_in_msdos_tables) + */ +static int +_disk_sync_part_table (PedDisk* disk) +{ + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->dev != NULL); + int lpn, lpn2; + unsigned int part_range = _device_get_partition_range(disk->dev); + int (*add_partition)(PedDisk* disk, const PedPartition *part); + int (*resize_partition)(PedDisk* disk, const PedPartition *part); + int (*remove_partition)(PedDisk* disk, int partno); + bool (*get_partition_start_and_length)(PedPartition const *part, + unsigned long long *start, + unsigned long long *length); + + +#ifdef ENABLE_DEVICE_MAPPER + if (disk->dev->type == PED_DEVICE_DM) { + add_partition = _dm_add_partition; + remove_partition = _dm_remove_partition; + resize_partition = _dm_resize_partition; + get_partition_start_and_length = _dm_get_partition_start_and_length; + } else +#endif + { + add_partition = _blkpg_add_partition; + remove_partition = _blkpg_remove_partition; +#ifdef BLKPG_RESIZE_PARTITION + resize_partition = _blkpg_resize_partition; +#else + resize_partition = NULL; +#endif + get_partition_start_and_length = _kernel_get_partition_start_and_length; + } + + /* lpn = largest partition number. + * for remove pass, use greater of device or label limit */ + if (ped_disk_get_max_supported_partition_count(disk, &lpn)) + lpn = PED_MAX(lpn, part_range); + else + lpn = part_range; + /* for add pass, use lesser of device or label limit */ + if (ped_disk_get_max_supported_partition_count(disk, &lpn2)) + lpn2 = PED_MIN(lpn2, part_range); + else + lpn2 = part_range; + /* Its not possible to support largest_partnum < 0. + * largest_partnum == 0 would mean does not support partitions. + * */ + if (lpn < 1) + return 0; + int ret = 0; + int *ok = calloc (lpn, sizeof *ok); + if (!ok) + return 0; + int *errnums = ped_malloc(sizeof(int) * lpn); + if (!errnums) + goto cleanup; + + int i; + /* remove old partitions first */ + for (i = 1; i <= lpn; i++) { + PedPartition *part = ped_disk_get_partition (disk, i); + if (part) { + unsigned long long length; + unsigned long long start; + /* get start and length of existing partition */ + if (get_partition_start_and_length(part, + &start, &length) + && start == part->geom.start + && (length == part->geom.length + || (resize_partition && part->num < lpn2))) + { + /* partition is unchanged, or will be resized so nothing to do */ + ok[i - 1] = 1; + continue; + } + } + /* Attempt to remove the partition, retrying for + up to max_sleep_seconds upon any failure due to EBUSY. */ + unsigned int sleep_microseconds = 10000; + unsigned int max_sleep_seconds = 1; + unsigned int n_sleep = (max_sleep_seconds + * 1000000 / sleep_microseconds); + do { + ok[i - 1] = remove_partition (disk, i); + errnums[i - 1] = errno; + if (ok[i - 1] || errnums[i - 1] != EBUSY) + break; + usleep (sleep_microseconds); + } while (n_sleep--); + if (!ok[i - 1] && errnums[i - 1] == ENXIO) + ok[i - 1] = 1; /* it already doesn't exist */ + } + lpn = lpn2; + /* don't actually add partitions for loop */ + if (strcmp (disk->type->name, "loop") == 0) + lpn = 0; + for (i = 1; i <= lpn; i++) { + PedPartition *part = ped_disk_get_partition (disk, i); + if (!part) + continue; + unsigned long long length; + unsigned long long start; + /* get start and length of existing partition */ + if (get_partition_start_and_length(part, + &start, &length) + && start == part->geom.start) + { + if (length == part->geom.length) { + ok[i - 1] = 1; + /* partition is unchanged, so nothing to do */ + continue; + } + if (resize_partition + && start == part->geom.start) + { + /* try to resize */ + if (resize_partition (disk, part)) { + ok[i - 1] = 1; + continue; + } + } + } + /* add the (possibly modified or new) partition */ + if (!add_partition (disk, part)) { + ok[i - 1] = 0; + errnums[i - 1] = errno; + } + } + + char *bad_part_list = NULL; + /* now warn about any errors */ + for (i = 1; i <= lpn; i++) { + if (ok[i - 1] || errnums[i - 1] == ENXIO) + continue; + if (bad_part_list == NULL) { + bad_part_list = malloc (lpn * 5); + if (!bad_part_list) + goto cleanup; + bad_part_list[0] = 0; + } + sprintf (bad_part_list + strlen (bad_part_list), "%d, ", i); + } + if (bad_part_list == NULL) + ret = 1; + else { + bad_part_list[strlen (bad_part_list) - 2] = 0; + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Partition(s) %s on %s have been written, but we have " + "been unable to inform the kernel of the change, " + "probably because it/they are in use. As a result, " + "the old partition(s) will remain in use. You " + "should reboot now before making further changes."), + bad_part_list, disk->dev->path) == PED_EXCEPTION_IGNORE) + ret = 1; + free (bad_part_list); + } + cleanup: + free (errnums); + free (ok); + return ret; +} + +static int +_have_blkpg () +{ + static int have_blkpg = -1; + int kver; + + if (have_blkpg != -1) + return have_blkpg; + + kver = _get_linux_version(); + return have_blkpg = kver >= KERNEL_VERSION (2,4,0) ? 1 : 0; +} + +/* Return nonzero upon success, 0 if something fails. */ +static int +linux_disk_commit (PedDisk* disk) +{ + if (disk->dev->type != PED_DEVICE_FILE) { + + /* We now require BLKPG support. If this assertion fails, + please write to the mailing list describing your system. + Assuming it's never triggered, ... + FIXME: remove this assertion in 2012. */ + assert (_have_blkpg ()); + + if (!_disk_sync_part_table (disk)) + return 0; + } + + return 1; +} + +#if USE_BLKID +static PedAlignment* +linux_get_minimum_alignment(const PedDevice *dev) +{ + blkid_topology tp = LINUX_SPECIFIC(dev)->topology; + if (!tp) + return NULL; + + if (blkid_topology_get_minimum_io_size(tp) == 0) + return ped_alignment_new( + blkid_topology_get_alignment_offset(tp) / + dev->sector_size, + dev->phys_sector_size / dev->sector_size); + + return ped_alignment_new( + blkid_topology_get_alignment_offset(tp) / dev->sector_size, + blkid_topology_get_minimum_io_size(tp) / dev->sector_size); +} + +static PedAlignment* +linux_get_optimum_alignment(const PedDevice *dev) +{ + blkid_topology tp = LINUX_SPECIFIC(dev)->topology; + if (!tp) + return NULL; + + /* When PED_DEFAULT_ALIGNMENT is divisible by the *_io_size or + there are no *_io_size values, use the PED_DEFAULT_ALIGNMENT + If one or the other will not divide evenly, fall through to + previous logic. */ + unsigned long optimal_io = blkid_topology_get_optimal_io_size(tp); + unsigned long minimum_io = blkid_topology_get_minimum_io_size(tp); + if ( + (!optimal_io && !minimum_io) + || (optimal_io && PED_DEFAULT_ALIGNMENT % optimal_io == 0 + && minimum_io && PED_DEFAULT_ALIGNMENT % minimum_io == 0) + || (!minimum_io && optimal_io + && PED_DEFAULT_ALIGNMENT % optimal_io == 0) + || (!optimal_io && minimum_io + && PED_DEFAULT_ALIGNMENT % minimum_io == 0) + ) + return ped_alignment_new( + blkid_topology_get_alignment_offset(tp) / dev->sector_size, + PED_DEFAULT_ALIGNMENT / dev->sector_size); + + /* If optimal_io_size is 0 and we don't meet the other criteria + for using the device.c default, return the minimum alignment. */ + if (blkid_topology_get_optimal_io_size(tp) == 0) + return linux_get_minimum_alignment(dev); + + return ped_alignment_new( + blkid_topology_get_alignment_offset(tp) / dev->sector_size, + blkid_topology_get_optimal_io_size(tp) / dev->sector_size); +} +#endif + +#if defined __s390__ || defined __s390x__ +/** + * Check whether this device could be a DASD + * + * The device probing yields PED_DEVICE_DASD for native DASD transport + * If the block device uses a different transport (e.g. virtio) + * a simplified heuristic (assuming a model 3390 with 4K sectors) + * is applied (only) on s390x systems for this check. + * + * \return 1 if the geometry indicates this could be a DASD + * and 0 otherwise + */ +static int +_ped_device_like_dasd(const PedDevice *dev) +{ + return (dev->type == PED_DEVICE_DASD) + || (dev->hw_geom.heads == 15 + && dev->hw_geom.sectors == 12 + && (dev->hw_geom.cylinders + * dev->hw_geom.heads + * dev->hw_geom.sectors + * dev->phys_sector_size + == dev->length * dev->sector_size)); +} + + + +static PedAlignment* +s390_get_minimum_alignment(const PedDevice *dev) +{ +#if USE_BLKID + return linux_get_minimum_alignment(dev); +#else + return ped_alignment_new(0, + dev->phys_sector_size + / dev->sector_size); +#endif +} + +static PedAlignment* +s390_get_optimum_alignment(const PedDevice *dev) +{ + /* DASD needs to use minimum alignment */ + if (_ped_device_like_dasd(dev)) + return s390_get_minimum_alignment(dev); +#if USE_BLKID + return linux_get_optimum_alignment(dev); +#else + return NULL; +#endif +} +#endif + +static PedDeviceArchOps linux_dev_ops = { + _new: linux_new, + destroy: linux_destroy, + is_busy: linux_is_busy, + open: linux_open, + refresh_open: linux_refresh_open, + close: linux_close, + refresh_close: linux_refresh_close, + read: linux_read, + write: linux_write, + check: linux_check, + sync: linux_sync, + sync_fast: linux_sync_fast, + probe_all: linux_probe_all, +#if defined __s390__ || defined __s390x__ + get_minimum_alignment: s390_get_minimum_alignment, + get_optimum_alignment: s390_get_optimum_alignment, +#elif USE_BLKID + get_minimum_alignment: linux_get_minimum_alignment, + get_optimum_alignment: linux_get_optimum_alignment, +#endif +}; + +PedDiskArchOps linux_disk_ops = { + partition_get_path: linux_partition_get_path, + partition_is_busy: linux_partition_is_busy, + disk_commit: linux_disk_commit +}; + +PedArchitecture ped_linux_arch = { + dev_ops: &linux_dev_ops, + disk_ops: &linux_disk_ops +}; diff --git a/jni/parted/libparted/arch/linux.h b/jni/parted/libparted/arch/linux.h new file mode 100755 index 0000000..3d4e5fa --- /dev/null +++ b/jni/parted/libparted/arch/linux.h @@ -0,0 +1,44 @@ +/* libparted - a library for manipulating disk partitions + Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef PED_ARCH_LINUX_H_INCLUDED +#define PED_ARCH_LINUX_H_INCLUDED + +#if HAVE_BLKID_BLKID_H +# include +#endif + +#define LINUX_SPECIFIC(dev) ((LinuxSpecific*) (dev)->arch_specific) + +typedef struct _LinuxSpecific LinuxSpecific; + +struct _LinuxSpecific { + int fd; + int major; + int minor; + char* dmtype; /**< device map target type */ +#if defined __s390__ || defined __s390x__ + unsigned int real_sector_size; + unsigned int devno; +#endif +#if USE_BLKID + blkid_probe probe; + blkid_topology topology; +#endif +}; + +#endif /* PED_ARCH_LINUX_H_INCLUDED */ diff --git a/jni/parted/libparted/architecture.c b/jni/parted/libparted/architecture.c new file mode 100755 index 0000000..4020f98 --- /dev/null +++ b/jni/parted/libparted/architecture.c @@ -0,0 +1,43 @@ + /* + libparted - a library for manipulating disk partitions + Copyright (C) 2007, 2009-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include "architecture.h" + +const PedArchitecture* ped_architecture; + +void +ped_set_architecture () +{ + /* Set just once */ + if (ped_architecture) + return; + +#ifdef linux + extern PedArchitecture ped_linux_arch; + const PedArchitecture* arch = &ped_linux_arch; +#elif defined(__BEOS__) + extern PedArchitecture ped_beos_arch; + const PedArchitecture* arch = &ped_beos_arch; +#else + extern PedArchitecture ped_gnu_arch; + const PedArchitecture* arch = &ped_gnu_arch; +#endif + + ped_architecture = arch; +} diff --git a/jni/parted/libparted/architecture.h b/jni/parted/libparted/architecture.h new file mode 100755 index 0000000..f058f74 --- /dev/null +++ b/jni/parted/libparted/architecture.h @@ -0,0 +1,38 @@ + /* + libparted - a library for manipulating disk partitions + Copyright (C) 2007, 2009-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +/* + * WARNING: This shouldn't be exported to the API + */ + +#ifndef _LIBPARTED_ARCH_H_INCLUDED +#define _LIBPARTED_ARCH_H_INCLUDED + +#include + +struct _PedArchitecture { + PedDiskArchOps* disk_ops; + PedDeviceArchOps* dev_ops; +}; +typedef struct _PedArchitecture PedArchitecture; + +extern const PedArchitecture* ped_architecture; + +extern void ped_set_architecture (); + +#endif /* _LIBPARTED_ARCH_H_INCLUDED */ diff --git a/jni/parted/libparted/cs/constraint.c b/jni/parted/libparted/cs/constraint.c new file mode 100755 index 0000000..146c318 --- /dev/null +++ b/jni/parted/libparted/cs/constraint.c @@ -0,0 +1,538 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000-2001, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/** + * \addtogroup PedConstraint + * + * \brief Constraint solver interface. + * + * Constraints are used to communicate restrictions on operations Constraints + * are restrictions on the location and alignment of the start and end of a + * partition, and the minimum and maximum size. + * + * Constraints are closed under intersection (for the proof see the source + * code). For background information see the Chinese Remainder Theorem. + * + * This interface consists of construction constraints, finding the intersection + * of constraints, and finding solutions to constraints. + * + * The constraint solver allows you to specify constraints on where a partition + * or file system (or any PedGeometry) may be placed/resized/etc. For example, + * you might want to make sure that a file system is at least 10 Gb, or that it + * starts at the beginning of new cylinder. + * + * The constraint solver in this file unifies solver in geom.c (which allows you + * to specify constraints on ranges) and natmath.c (which allows you to specify + * alignment constraints). + * + * @{ + */ + +#include +#include +#include +#include + +/** + * Initializes a pre-allocated piece of memory to contain a constraint + * with the supplied default values. + * + * \return \c 0 on failure. + */ +int +ped_constraint_init ( + PedConstraint* constraint, + const PedAlignment* start_align, + const PedAlignment* end_align, + const PedGeometry* start_range, + const PedGeometry* end_range, + PedSector min_size, + PedSector max_size) +{ + PED_ASSERT (constraint != NULL); + PED_ASSERT (start_range != NULL); + PED_ASSERT (end_range != NULL); + PED_ASSERT (min_size > 0); + PED_ASSERT (max_size > 0); + + constraint->start_align = ped_alignment_duplicate (start_align); + constraint->end_align = ped_alignment_duplicate (end_align); + constraint->start_range = ped_geometry_duplicate (start_range); + constraint->end_range = ped_geometry_duplicate (end_range); + constraint->min_size = min_size; + constraint->max_size = max_size; + + return 1; +} + +/** + * Convenience wrapper for ped_constraint_init(). + * + * Allocates a new piece of memory and initializes the constraint. + * + * \return \c NULL on failure. + */ +PedConstraint* +ped_constraint_new ( + const PedAlignment* start_align, + const PedAlignment* end_align, + const PedGeometry* start_range, + const PedGeometry* end_range, + PedSector min_size, + PedSector max_size) +{ + PedConstraint* constraint; + + constraint = (PedConstraint*) ped_malloc (sizeof (PedConstraint)); + if (!constraint) + goto error; + if (!ped_constraint_init (constraint, start_align, end_align, + start_range, end_range, min_size, max_size)) + goto error_free_constraint; + return constraint; + +error_free_constraint: + free (constraint); +error: + return NULL; +} + +/** + * Return a constraint that requires a region to be entirely contained inside + * \p max, and to entirely contain \p min. + * + * \return \c NULL on failure. + */ +PedConstraint* +ped_constraint_new_from_min_max ( + const PedGeometry* min, + const PedGeometry* max) +{ + PedGeometry start_range; + PedGeometry end_range; + + PED_ASSERT (min != NULL); + PED_ASSERT (max != NULL); + PED_ASSERT (ped_geometry_test_inside (max, min)); + + ped_geometry_init (&start_range, min->dev, max->start, + min->start - max->start + 1); + ped_geometry_init (&end_range, min->dev, min->end, + max->end - min->end + 1); + + return ped_constraint_new ( + ped_alignment_any, ped_alignment_any, + &start_range, &end_range, + min->length, max->length); +} + +/** + * Return a constraint that requires a region to entirely contain \p min. + * + * \return \c NULL on failure. + */ +PedConstraint* +ped_constraint_new_from_min (const PedGeometry* min) +{ + PedGeometry full_dev; + + PED_ASSERT (min != NULL); + + ped_geometry_init (&full_dev, min->dev, 0, min->dev->length); + return ped_constraint_new_from_min_max (min, &full_dev); +} + +/** + * Return a constraint that requires a region to be entirely contained inside + * \p max. + * + * \return \c NULL on failure. + */ +PedConstraint* +ped_constraint_new_from_max (const PedGeometry* max) +{ + PED_ASSERT (max != NULL); + + return ped_constraint_new ( + ped_alignment_any, ped_alignment_any, + max, max, 1, max->length); +} + +/** + * Duplicate a constraint. + * + * \return \c NULL on failure. + */ +PedConstraint* +ped_constraint_duplicate (const PedConstraint* constraint) +{ + PED_ASSERT (constraint != NULL); + + return ped_constraint_new ( + constraint->start_align, + constraint->end_align, + constraint->start_range, + constraint->end_range, + constraint->min_size, + constraint->max_size); +} + +/** + * Return a constraint that requires a region to satisfy both \p a and \p b. + * + * Moreover, any region satisfying \p a and \p b will also satisfy the returned + * constraint. + * + * \return \c NULL if no solution could be found (note that \c NULL is a valid + * PedConstraint). + */ +PedConstraint* +ped_constraint_intersect (const PedConstraint* a, const PedConstraint* b) +{ + PedAlignment* start_align; + PedAlignment* end_align; + PedGeometry* start_range; + PedGeometry* end_range; + PedSector min_size; + PedSector max_size; + PedConstraint* constraint; + + if (!a || !b) + return NULL; + + start_align = ped_alignment_intersect (a->start_align, b->start_align); + if (!start_align) + goto empty; + end_align = ped_alignment_intersect (a->end_align, b->end_align); + if (!end_align) + goto empty_destroy_start_align; + start_range = ped_geometry_intersect (a->start_range, b->start_range); + if (!start_range) + goto empty_destroy_end_align; + end_range = ped_geometry_intersect (a->end_range, b->end_range); + if (!end_range) + goto empty_destroy_start_range; + min_size = PED_MAX (a->min_size, b->min_size); + max_size = PED_MIN (a->max_size, b->max_size); + + constraint = ped_constraint_new ( + start_align, end_align, start_range, end_range, + min_size, max_size); + if (!constraint) + goto empty_destroy_end_range; + + ped_alignment_destroy (start_align); + ped_alignment_destroy (end_align); + ped_geometry_destroy (start_range); + ped_geometry_destroy (end_range); + return constraint; + +empty_destroy_end_range: + ped_geometry_destroy (end_range); +empty_destroy_start_range: + ped_geometry_destroy (start_range); +empty_destroy_end_align: + ped_alignment_destroy (end_align); +empty_destroy_start_align: + ped_alignment_destroy (start_align); +empty: + return NULL; +} + +/** + * Release the memory allocated for a PedConstraint constructed with + * ped_constraint_init(). + */ +void +ped_constraint_done (PedConstraint* constraint) +{ + PED_ASSERT (constraint != NULL); + + ped_alignment_destroy (constraint->start_align); + ped_alignment_destroy (constraint->end_align); + ped_geometry_destroy (constraint->start_range); + ped_geometry_destroy (constraint->end_range); +} + +/** + * Release the memory allocated for a PedConstraint constructed with + * ped_constraint_new(). + */ +void +ped_constraint_destroy (PedConstraint* constraint) +{ + if (constraint) { + ped_constraint_done (constraint); + free (constraint); + } +} + +/* + * Return the region within which the start must lie + * in order to satisfy a constriant. It takes into account + * constraint->start_range, constraint->min_size and constraint->max_size. + * All sectors in this range that also satisfy alignment requirements have + * an end, such that the (start, end) satisfy the constraint. + */ +static PedGeometry* +_constraint_get_canonical_start_range (const PedConstraint* constraint) +{ + PedSector first_end_soln; + PedSector last_end_soln; + PedSector min_start; + PedSector max_start; + PedGeometry start_min_max_range; + + if (constraint->min_size > constraint->max_size) + return NULL; + + first_end_soln = ped_alignment_align_down ( + constraint->end_align, constraint->end_range, + constraint->end_range->start); + last_end_soln = ped_alignment_align_up ( + constraint->end_align, constraint->end_range, + constraint->end_range->end); + if (first_end_soln == -1 || last_end_soln == -1 + || first_end_soln > last_end_soln + || last_end_soln < constraint->min_size) + return NULL; + + min_start = first_end_soln - constraint->max_size + 1; + if (min_start < 0) + min_start = 0; + max_start = last_end_soln - constraint->min_size + 1; + if (max_start < 0) + return NULL; + + ped_geometry_init ( + &start_min_max_range, constraint->start_range->dev, + min_start, max_start - min_start + 1); + + return ped_geometry_intersect (&start_min_max_range, + constraint->start_range); +} + +/* + * Return the nearest start that will have at least one other end that + * together satisfy the constraint. + */ +static PedSector +_constraint_get_nearest_start_soln (const PedConstraint* constraint, + PedSector start) +{ + PedGeometry* start_range; + PedSector result; + + start_range = _constraint_get_canonical_start_range (constraint); + if (!start_range) + return -1; + result = ped_alignment_align_nearest ( + constraint->start_align, start_range, start); + ped_geometry_destroy (start_range); + return result; +} + +/* + * Given a constraint and a start ("half of the solution"), find the + * range of all possible ends, such that all (start, end) are solutions + * to constraint (subject to additional alignment requirements). + */ +static PedGeometry* +_constraint_get_end_range (const PedConstraint* constraint, PedSector start) +{ + PedDevice* dev = constraint->end_range->dev; + PedSector first_min_max_end; + PedSector last_min_max_end; + PedGeometry end_min_max_range; + + if (start + constraint->min_size - 1 > dev->length - 1) + return NULL; + + first_min_max_end = start + constraint->min_size - 1; + last_min_max_end = start + constraint->max_size - 1; + if (last_min_max_end > dev->length - 1) + last_min_max_end = dev->length - 1; + + ped_geometry_init (&end_min_max_range, dev, + first_min_max_end, + last_min_max_end - first_min_max_end + 1); + + return ped_geometry_intersect (&end_min_max_range, + constraint->end_range); +} + +/* + * Given "constraint" and "start", find the end that is nearest to + * "end", such that ("start", the end) together form a solution to + * "constraint". + */ +static PedSector +_constraint_get_nearest_end_soln (const PedConstraint* constraint, + PedSector start, PedSector end) +{ + PedGeometry* end_range; + PedSector result; + + end_range = _constraint_get_end_range (constraint, start); + if (!end_range) + return -1; + + result = ped_alignment_align_nearest (constraint->end_align, end_range, + end); + ped_geometry_destroy (end_range); + return result; +} + +/** + * Return the nearest region to \p geom that satisfy a \p constraint. + * + * Note that "nearest" is somewhat ambiguous. This function makes + * no guarantees about how this ambiguity is resovled. + * + * \return PedGeometry, or NULL when a \p constrain cannot be satisfied + */ +PedGeometry* +ped_constraint_solve_nearest ( + const PedConstraint* constraint, const PedGeometry* geom) +{ + PedSector start; + PedSector end; + PedGeometry* result; + + if (constraint == NULL) + return NULL; + + PED_ASSERT (geom != NULL); + PED_ASSERT (constraint->start_range->dev == geom->dev); + + start = _constraint_get_nearest_start_soln (constraint, geom->start); + if (start == -1) + return NULL; + end = _constraint_get_nearest_end_soln (constraint, start, geom->end); + if (end == -1) + return NULL; + + result = ped_geometry_new (geom->dev, start, end - start + 1); + if (!result) + return NULL; + PED_ASSERT (ped_constraint_is_solution (constraint, result)); + return result; +} + +/** + * Find the largest region that satisfies a constraint. + * + * There might be more than one solution. This function makes no + * guarantees about which solution it will choose in this case. + */ +PedGeometry* +ped_constraint_solve_max (const PedConstraint* constraint) +{ + PedDevice* dev; + PedGeometry full_dev; + + if (!constraint) + return NULL; + dev = constraint->start_range->dev; + ped_geometry_init (&full_dev, dev, 0, dev->length); + return ped_constraint_solve_nearest (constraint, &full_dev); +} + +/** + * Check whether \p geom satisfies the given constraint. + * + * \return \c 1 if it does. + **/ +int +ped_constraint_is_solution (const PedConstraint* constraint, + const PedGeometry* geom) +{ + PED_ASSERT (constraint != NULL); + PED_ASSERT (geom != NULL); + + if (!ped_alignment_is_aligned (constraint->start_align, NULL, + geom->start)) + return 0; + if (!ped_alignment_is_aligned (constraint->end_align, NULL, geom->end)) + return 0; + if (!ped_geometry_test_sector_inside (constraint->start_range, + geom->start)) + return 0; + if (!ped_geometry_test_sector_inside (constraint->end_range, geom->end)) + return 0; + if (geom->length < constraint->min_size) + return 0; + if (geom->length > constraint->max_size) + return 0; + return 1; +} + +/** + * Return a constraint that any region on the given device will satisfy. + */ +PedConstraint* +ped_constraint_any (const PedDevice* dev) +{ + PedGeometry full_dev; + + if (!ped_geometry_init (&full_dev, dev, 0, dev->length)) + return NULL; + + return ped_constraint_new ( + ped_alignment_any, + ped_alignment_any, + &full_dev, + &full_dev, + 1, + dev->length); +} + +/** + * Return a constraint that only the given region will satisfy. + */ +PedConstraint* +ped_constraint_exact (const PedGeometry* geom) +{ + PedAlignment start_align; + PedAlignment end_align; + PedGeometry start_sector; + PedGeometry end_sector; + int ok; + + /* With grain size of 0, it always succeeds. */ + ok = ped_alignment_init (&start_align, geom->start, 0); + assert (ok); + ok = ped_alignment_init (&end_align, geom->end, 0); + assert (ok); + + ok = ped_geometry_init (&start_sector, geom->dev, geom->start, 1); + if (!ok) + return NULL; + ok = ped_geometry_init (&end_sector, geom->dev, geom->end, 1); + if (!ok) + return NULL; + + return ped_constraint_new (&start_align, &end_align, + &start_sector, &end_sector, 1, + geom->dev->length); +} + +/** + * @} + */ diff --git a/jni/parted/libparted/cs/geom.c b/jni/parted/libparted/cs/geom.c new file mode 100755 index 0000000..99280ac --- /dev/null +++ b/jni/parted/libparted/cs/geom.c @@ -0,0 +1,487 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2000, 2005, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/** \file geom.c */ + + +/** + * \addtogroup PedGeometry + * + * \brief PedGeometry represents a continuous region on a device. All addressing + * through a PedGeometry object is in terms of the start of the continuous + * region. + * + * The following conditions are always true on a PedGeometry object manipulated + * with the GNU Parted API: + * + * - start + length - 1 == end + * - length > 0 + * - start >= 0 + * - end < dev->length + * + * @{ + */ + +#include + +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +/** + * Initialize the previously allocated PedGeometry \p geom. + */ +int +ped_geometry_init (PedGeometry* geom, const PedDevice* dev, + PedSector start, PedSector length) +{ + PED_ASSERT (geom != NULL); + PED_ASSERT (dev != NULL); + + geom->dev = (PedDevice*) dev; + return ped_geometry_set (geom, start, length); +} + +/** + * Create a new PedGeometry object on \p disk, starting at \p start with a + * size of \p length sectors. + * + * \return NULL on failure. + */ +PedGeometry* +ped_geometry_new (const PedDevice* dev, PedSector start, PedSector length) +{ + PedGeometry* geom; + + PED_ASSERT (dev != NULL); + + geom = (PedGeometry*) ped_malloc (sizeof (PedGeometry)); + if (!geom) + goto error; + if (!ped_geometry_init (geom, dev, start, length)) + goto error_free_geom; + return geom; + +error_free_geom: + free (geom); +error: + return NULL; +} + +/** + * Duplicate a PedGeometry object. + * + * This function constructs a PedGeometry object that is an identical but + * independent copy of \p geom. Both the input, \p geom, and the output + * should be destroyed with ped_geometry_destroy() when they are no + * longer needed. + * + * \return NULL on failure. + */ +PedGeometry* +ped_geometry_duplicate (const PedGeometry* geom) +{ + PED_ASSERT (geom != NULL); + return ped_geometry_new (geom->dev, geom->start, geom->length); +} + +/** + * Return a PedGeometry object that refers to the intersection of + * \p a and \p b. + * + * This function constructs a PedGeometry object that describes the + * region that is common to both a and b. If there is no such common + * region, it returns NULL. (This situation is not treated as an + * error by much of GNU Parted.) + */ +PedGeometry* +ped_geometry_intersect (const PedGeometry* a, const PedGeometry* b) +{ + PedSector start; + PedSector end; + + if (!a || !b || a->dev != b->dev) + return NULL; + + start = PED_MAX (a->start, b->start); + end = PED_MIN (a->end, b->end); + if (start > end) + return NULL; + + return ped_geometry_new (a->dev, start, end - start + 1); +} + +/** + * Destroy a PedGeometry object. + */ +void +ped_geometry_destroy (PedGeometry* geom) +{ + PED_ASSERT (geom != NULL); + + free (geom); +} + +/** + * Assign a new \p start, \p end (implicitly) and \p length to \p geom. + * + * \p geom->end is calculated from \p start and \p length. + */ +int +ped_geometry_set (PedGeometry* geom, PedSector start, PedSector length) +{ + PED_ASSERT (geom != NULL); + PED_ASSERT (geom->dev != NULL); + PED_ASSERT (start >= 0); + + if (length < 1) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Can't have the end before the start!" + " (start sector=%jd length=%jd)"), start, length); + return 0; + } + + geom->start = start; + geom->length = length; + geom->end = start + length - 1; + + return 1; +} + +/** + * Assign a new start to \p geom without changing \p geom->end. + * + * \p geom->length is updated accordingly. + */ +int +ped_geometry_set_start (PedGeometry* geom, PedSector start) +{ + return ped_geometry_set (geom, start, geom->end - start + 1); +} + +/** + * Assign a new end to \p geom without changing \p geom->start. + * + * \p geom->length is updated accordingly. + */ +int +ped_geometry_set_end (PedGeometry* geom, PedSector end) +{ + return ped_geometry_set (geom, geom->start, end - geom->start + 1); +} +/** + * Test if \p a overlaps with \p b. + * + * That is, they lie on the same physical device, and they share + * the same physical region at least partially. + * + * \return 1 if \p a and \p b overlap. + */ +int +ped_geometry_test_overlap (const PedGeometry* a, const PedGeometry* b) +{ + PED_ASSERT (a != NULL); + PED_ASSERT (b != NULL); + + if (a->dev != b->dev) + return 0; + + if (a->start < b->start) + return a->end >= b->start; + else + return b->end >= a->start; +} + +/** + * Tests if \p b lies completely within \p a. That is, they lie on the same + * physical device, and all of the \p b's region is contained inside + * \p a's. + * + * \return 1 if the region \p b describes is contained entirely inside \p a +*/ +int +ped_geometry_test_inside (const PedGeometry* a, const PedGeometry* b) +{ + PED_ASSERT (a != NULL); + PED_ASSERT (b != NULL); + + if (a->dev != b->dev) + return 0; + + return b->start >= a->start && b->end <= a->end; +} + +/** + * Tests if \a a and \p b refer to the same physical region. + * + * \return 1 if \p a and \p b describe the same regions + * + */ +int +ped_geometry_test_equal (const PedGeometry* a, const PedGeometry* b) +{ + PED_ASSERT (a != NULL); + PED_ASSERT (b != NULL); + + return a->dev == b->dev + && a->start == b->start + && a->end == b->end; +} + +/** + * Tests if \p sector is inside \p geom. + * + * \return 1 if sector lies within the \p region that \p geom describes + */ +int +ped_geometry_test_sector_inside (const PedGeometry* geom, PedSector sector) +{ + PED_ASSERT (geom != NULL); + + return sector >= geom->start && sector <= geom->end; +} + +/** + * Reads data from the region represented by \p geom. \p offset is the + * location from within the region, not from the start of the disk. + * \p count sectors are read into \p buffer. + * This is essentially equivalent to: + * \code + * ped_device_read (geom->disk->dev, buffer, geom->start + offset, count) + * \endcode + * + * \throws PED_EXCEPTION_ERROR when attempting to read sectors outside of + * partition + * + * \return 0 on failure + */ +int +ped_geometry_read (const PedGeometry* geom, void* buffer, PedSector offset, + PedSector count) +{ + PedSector real_start; + + PED_ASSERT (geom != NULL); + PED_ASSERT (buffer != NULL); + PED_ASSERT (offset >= 0); + PED_ASSERT (count >= 0); + + real_start = geom->start + offset; + + if (real_start + count - 1 > geom->end) + return 0; + + if (!ped_device_read (geom->dev, buffer, real_start, count)) + return 0; + return 1; +} + +/* Like ped_device_read, but read into malloc'd storage. */ +int +ped_geometry_read_alloc (const PedGeometry* geom, void** buffer, + PedSector offset, PedSector count) +{ + char *buf = ped_malloc (count * geom->dev->sector_size); + if (buf == NULL) + return 0; + int ok = ped_geometry_read (geom, buf, offset, count); + if (!ok) { + free (buf); + buf = NULL; + } + + *buffer = buf; + return ok; +} + +/** + * Flushes the cache on \p geom. + * + * This function flushes all write-behind caches that might be holding + * writes made by ped_geometry_write() to \p geom. It is slow, because + * it guarantees cache coherency among all relevant caches. + * + * \return 0 on failure + */ +int +ped_geometry_sync (PedGeometry* geom) +{ + PED_ASSERT (geom != NULL); + return ped_device_sync (geom->dev); +} + +/** + * Flushes the cache on \p geom. + * + * This function flushes all write-behind caches that might be holding writes + * made by ped_geometry_write() to \p geom. It does NOT ensure cache coherency + * with other caches that cache data in the region described by \p geom. + * If you need cache coherency, use ped_geometry_sync() instead. + * + * \return 0 on failure + */ +int +ped_geometry_sync_fast (PedGeometry* geom) +{ + PED_ASSERT (geom != NULL); + return ped_device_sync_fast (geom->dev); +} + +/** + * Writes data into the region represented by \p geom. \p offset is the + * location from within the region, not from the start of the disk. + * \p count sectors are written. + * + * \return 0 on failure + */ +int +ped_geometry_write (PedGeometry* geom, const void* buffer, PedSector offset, + PedSector count) +{ + int exception_status; + PedSector real_start; + + PED_ASSERT (geom != NULL); + PED_ASSERT (buffer != NULL); + PED_ASSERT (offset >= 0); + PED_ASSERT (count >= 0); + + real_start = geom->start + offset; + + if (real_start + count - 1 > geom->end) { + exception_status = ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Attempt to write sectors %ld-%ld outside of " + "partition on %s."), + (long) offset, (long) (offset + count - 1), + geom->dev->path); + return exception_status == PED_EXCEPTION_IGNORE; + } + + if (!ped_device_write (geom->dev, buffer, real_start, count)) + return 0; + return 1; +} + +/** + * Checks for physical disk errors. \todo use ped_device_check() + * + * Checks a region for physical defects on \p geom. \p buffer is used + * for temporary storage for ped_geometry_check(), and has an undefined + * value. \p buffer is \p buffer_size sectors long. + * The region checked starts at \p offset sectors inside the + * region represented by \p geom, and is \p count sectors long. + * \p granularity specificies how sectors should be grouped + * together. The first bad sector to be returned will always be in + * the form: + * offset + n * granularity + * + * \return the first bad sector, or 0 if there were no physical errors + */ +PedSector +ped_geometry_check (PedGeometry* geom, void* buffer, PedSector buffer_size, + PedSector offset, PedSector granularity, PedSector count, + PedTimer* timer) +{ + PedSector group; + PedSector i; + PedSector read_len; + + PED_ASSERT (geom != NULL); + PED_ASSERT (buffer != NULL); + + ped_timer_reset (timer); + ped_timer_set_state_name (timer, _("checking for bad blocks")); + +retry: + ped_exception_fetch_all(); + for (group = offset; group < offset + count; group += buffer_size) { + ped_timer_update (timer, 1.0 * (group - offset) / count); + read_len = PED_MIN (buffer_size, offset + count - group); + if (!ped_geometry_read (geom, buffer, group, read_len)) + goto found_error; + } + ped_exception_leave_all(); + ped_timer_update (timer, 1.0); + return 0; + +found_error: + ped_exception_catch(); + for (i = group; i + granularity < group + count; i += granularity) { + if (!ped_geometry_read (geom, buffer, i, granularity)) { + ped_exception_catch(); + ped_exception_leave_all(); + return i; + } + } + ped_exception_leave_all(); + goto retry; /* weird: failure on group read, but not individually */ +} + +/** + * This function takes a \p sector inside the region described by src, and + * returns that sector's address inside dst. This means that + * + * \code + * ped_geometry_read (dst, buf, ped_geometry_map(dst, src, sector), 1) + * \endcode + * + * does the same thing as + * + * \code + * ped_geometry_read (src, buf, sector, 1) + * \endcode + * + * Clearly, this will only work if \p src and \p dst overlap. + * + * \return -1 if \p sector is not within \p dst's space, + * or \p sector's address inside \p dst + * + */ +PedSector +ped_geometry_map (const PedGeometry* dst, const PedGeometry* src, + PedSector sector) +{ + PedSector result; + + PED_ASSERT (dst != NULL); + PED_ASSERT (src != NULL); + + if (!ped_geometry_test_sector_inside (src, sector)) + return -1; + if (dst->dev != src->dev) + return -1; + + result = src->start + sector - dst->start; + if (result < 0 || result > dst->length) + return -1; + + return result; +} + +/** @} */ diff --git a/jni/parted/libparted/cs/natmath.c b/jni/parted/libparted/cs/natmath.c new file mode 100755 index 0000000..ea53afc --- /dev/null +++ b/jni/parted/libparted/cs/natmath.c @@ -0,0 +1,481 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000, 2007-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +/** + * \file natmath.c + */ + +/** + * \addtogroup PedAlignment + * + * \brief Alignment constraint model. + * + * This part of libparted models alignment constraints. + * + * @{ + */ + +#include +#include +#include +#include +#include + +/* Arrrghhh! Why doesn't C have tuples? */ +typedef struct { + PedSector gcd; /* "converges" to the gcd */ + PedSector x; + PedSector y; +} EuclidTriple; + +static const PedAlignment _any = { + offset: 0, + grain_size: 1 +}; + +const PedAlignment* ped_alignment_any = &_any; +const PedAlignment* ped_alignment_none = NULL; + +/* This function returns "a mod b", the way C should have done it! + * Mathematicians prefer -3 mod 4 to be 3. Reason: division by N + * is all about adding or subtracting N, and we like our remainders + * to be between 0 and N - 1. + */ +static PedSector +abs_mod (PedSector a, PedSector b) +{ + if (a < 0) + return a % b + b; + else + return a % b; +} + +/* Rounds a number down to the closest number that is a multiple of + * grain_size. + */ +PedSector +ped_round_down_to (PedSector sector, PedSector grain_size) +{ + return sector - abs_mod (sector, grain_size); +} + +/* Rounds a number up to the closest number that is a multiple of + * grain_size. + */ +PedSector +ped_round_up_to (PedSector sector, PedSector grain_size) +{ + if (sector % grain_size) + return ped_round_down_to (sector, grain_size) + grain_size; + else + return sector; +} + +/* Rounds a number to the closest number that is a multiple of grain_size. */ +PedSector +ped_round_to_nearest (PedSector sector, PedSector grain_size) +{ + if (sector % grain_size > grain_size/2) + return ped_round_up_to (sector, grain_size); + else + return ped_round_down_to (sector, grain_size); +} + +/* This function returns the largest number that divides both a and b. + * It uses the ancient Euclidean algorithm. + */ +PedSector +ped_greatest_common_divisor (PedSector a, PedSector b) +{ + PED_ASSERT (a >= 0); + PED_ASSERT (b >= 0); + + /* Put the arguments in the "right" format. (Recursive calls made by + * this function are always in the right format.) + */ + if (b > a) + return ped_greatest_common_divisor (b, a); + + if (b) + return ped_greatest_common_divisor (b, a % b); + else + return a; +} + +/** + * Initialize a preallocated piece of memory for an alignment object + * (used by PedConstraint). + * + * The object will represent all sectors \e s for which the equation + * s = offset + X * grain_size holds. + */ +int +ped_alignment_init (PedAlignment* align, PedSector offset, PedSector grain_size) +{ + PED_ASSERT (align != NULL); + + if (grain_size < 0) + return 0; + + if (grain_size) + align->offset = abs_mod (offset, grain_size); + else + align->offset = offset; + align->grain_size = grain_size; + + return 1; +} + +/** + * Return an alignment object (used by PedConstraint), representing all + * PedSector's that are of the form offset + X * grain_size. + */ +PedAlignment* +ped_alignment_new (PedSector offset, PedSector grain_size) +{ + PedAlignment* align; + + align = (PedAlignment*) ped_malloc (sizeof (PedAlignment)); + if (!align) + goto error; + + if (!ped_alignment_init (align, offset, grain_size)) + goto error_free_align; + + return align; + +error_free_align: + free (align); +error: + return NULL; +} + +/** + * Free up memory associated with \p align. + */ +void +ped_alignment_destroy (PedAlignment* align) +{ + free (align); +} + +/** + * Return a duplicate of \p align. + */ +PedAlignment* +ped_alignment_duplicate (const PedAlignment* align) +{ + if (!align) + return NULL; + return ped_alignment_new (align->offset, align->grain_size); +} + +/* the extended Euclid algorithm. + * + * input: + * a and b, a > b + * + * output: + * gcd, x and y, such that: + * + * gcd = greatest common divisor of a and b + * gcd = x*a + y*b + */ +static EuclidTriple _GL_ATTRIBUTE_PURE +extended_euclid (int a, int b) +{ + EuclidTriple result; + EuclidTriple tmp; + + if (b == 0) { + result.gcd = a; + result.x = 1; + result.y = 0; + return result; + } + + tmp = extended_euclid (b, a % b); + result.gcd = tmp.gcd; + result.x = tmp.y; + result.y = tmp.x - (a/b) * tmp.y; + return result; +} + +/** + * This function computes a PedAlignment object that describes the + * intersection of two alignments. That is, a sector satisfies the + * new alignment object if and only if it satisfies both of the original + * ones. (See ped_alignment_is_aligned() for the meaning of "satisfies") + * + * Apart from the trivial cases (where one or both of the alignment objects + * constraints have no sectors that satisfy them), this is what we're trying to + * do: + * - two input constraints: \p a and \p b. + * - the new grain_size is going to be the lowest common multiple of + * \p a->grain_size and \p b->grain_size + * - hard part - solve the simultaneous equations, for offset, where offset, + * X and Y are variables. (Note: offset can be obtained from either X or Y, + * by substituing into either equation) + * + * \code + * offset = \p a->offset + X * \p a->grain_size (1) + * offset = \p b->offset + Y * \p b->grain_size (2) + * \endcode + * + * or, abbreviated: + * + * \code + * o = Ao + X*Ag (1) + * o = Bo + Y*Bg (2) + * + * => Ao + X*Ag = Bo + Y*Bg (1) = (2) + * X*Ag - Y*Bg = Bo - Ao (3) + * \endcode + * + * As it turns out, there only exists a solution if (Bo - Ao) is a multiple + * of the GCD of Ag and Bg. Reason: all linear combinations of Ag and Bg are + * multiples of the GCD. + * + * Proof: + * + * \code + * A * Ag + B * Bg + * = A * (\p a * gcd) + B * (\p b * gcd) + * = gcd * (A * \p a + B * \p b) + * \endcode + * + * gcd is a factor of the linear combination. QED + * + * Anyway, \p a * Ag + \p b * Bg = gcd can be solved (for \p a, \p b and gcd) + * with Euclid's extended algorithm. Then, we just multiply through by + * (Bo - Ao) / gcd to get (3). + * + * i.e. + * \code + * A * Ag + B * Bg = gcd + * A*(Bo-Ao)/gcd * Ag + B(Bo-Ao)/gcd * Bg = gcd * (Bo-Ao)/gcd + * X*Ag - Y*Bg = Bo - Ao (3) + * + * X = A*(Bo-Ao)/gcd + * Y = - B*(Bo-Ao)/gcd + * \endcode + * + * then: + * \code + * o = Ao + X*Ag (1) + * = Ao + A*(Bo-Ao)/gcd*Ag + * o = Bo + Y*Bg (2) + * = Bo - B*(Bo-Ao)/gcd*Ag + * \endcode + * + * Thanks go to Nathan Hurst (njh@hawthorn.csse.monash.edu.au) for figuring + * this algorithm out :-) + * + * \note Returned \c NULL is a valid PedAlignment object, and can be used + for ped_alignment_*() function. + * + * \return a PedAlignment on success, \c NULL on failure + */ +PedAlignment* +ped_alignment_intersect (const PedAlignment* a, const PedAlignment* b) +{ + PedSector new_grain_size; + PedSector new_offset; + PedSector delta_on_gcd; + EuclidTriple gcd_factors; + + + if (!a || !b) + return NULL; + + /*PED_DEBUG (0x10, "intersecting alignments (%d,%d) and (%d,%d)", + a->offset, a->grain_size, b->offset, b->grain_size); + */ + + if (a->grain_size < b->grain_size) { + const PedAlignment* tmp; + tmp = a; a = b; b = tmp; + } + + /* weird/trivial case: where the solution space for "a" or "b" is + * either empty or contains exactly one solution + */ + if (a->grain_size == 0 && b->grain_size == 0) { + if (a->offset == b->offset) + return ped_alignment_duplicate (a); + else + return NULL; + } + + /* general case */ + gcd_factors = extended_euclid (a->grain_size, b->grain_size); + + delta_on_gcd = (b->offset - a->offset) / gcd_factors.gcd; + new_offset = a->offset + gcd_factors.x * delta_on_gcd * a->grain_size; + new_grain_size = a->grain_size * b->grain_size / gcd_factors.gcd; + + /* inconsistency => no solution */ + if (new_offset + != b->offset - gcd_factors.y * delta_on_gcd * b->grain_size) + return NULL; + + return ped_alignment_new (new_offset, new_grain_size); +} + +/* This function returns the sector closest to "sector" that lies inside + * geom and satisfies the alignment constraint. + */ +static PedSector _GL_ATTRIBUTE_PURE +_closest_inside_geometry (const PedAlignment* align, const PedGeometry* geom, + PedSector sector) +{ + PED_ASSERT (align != NULL); + + if (!align->grain_size) { + if (ped_alignment_is_aligned (align, geom, sector) + && (!geom || ped_geometry_test_sector_inside (geom, + sector))) + return sector; + else + return -1; + } + + if (sector < geom->start) + sector += ped_round_up_to (geom->start - sector, + align->grain_size); + if (sector > geom->end) + sector -= ped_round_up_to (sector - geom->end, + align->grain_size); + + if (!ped_geometry_test_sector_inside (geom, sector)) + return -1; + return sector; +} + +/** + * This function returns the closest sector to \p sector that lies inside + * \p geom that satisfies the given alignment constraint \p align. It prefers + * sectors that are beyond \p sector (are not smaller than \p sector), + * but does not guarantee that this. + * + * \return a PedSector on success, \c -1 on failure + */ +PedSector +ped_alignment_align_up (const PedAlignment* align, const PedGeometry* geom, + PedSector sector) +{ + PedSector result; + + PED_ASSERT (align != NULL); + + if (!align->grain_size) + result = align->offset; + else + result = ped_round_up_to (sector - align->offset, + align->grain_size) + + align->offset; + + if (geom) + result = _closest_inside_geometry (align, geom, result); + return result; +} + +/** + * This function returns the closest sector to \p sector that lies inside + * \p geom that satisfies the given alignment constraint \p align. It prefers + * sectors that are before \p sector (are not larger than \p sector), + * but does not guarantee that this. + * + * \return a PedSector on success, \c -1 on failure + */ +PedSector +ped_alignment_align_down (const PedAlignment* align, const PedGeometry* geom, + PedSector sector) +{ + PedSector result; + + PED_ASSERT (align != NULL); + + if (!align->grain_size) + result = align->offset; + else + result = ped_round_down_to (sector - align->offset, + align->grain_size) + + align->offset; + + if (geom) + result = _closest_inside_geometry (align, geom, result); + return result; +} + +/* Returns either a or b, depending on which is closest to "sector". */ +static PedSector +closest (PedSector sector, PedSector a, PedSector b) +{ + if (a == -1) + return b; + if (b == -1) + return a; + + if (llabs (sector - a) < llabs (sector - b)) + return a; + else + return b; +} + +/** + * This function returns the sector that is closest to \p sector, + * satisfies the \p align constraint and lies inside \p geom. + * + * \return a PedSector on success, \c -1 on failure + */ +PedSector +ped_alignment_align_nearest (const PedAlignment* align, const PedGeometry* geom, + PedSector sector) +{ + PED_ASSERT (align != NULL); + + return closest (sector, ped_alignment_align_up (align, geom, sector), + ped_alignment_align_down (align, geom, sector)); +} + +/** + * This function returns 1 if \p sector satisfies the alignment + * constraint \p align and lies inside \p geom. + * + * \return \c 1 on success, \c 0 on failure + */ +int +ped_alignment_is_aligned (const PedAlignment* align, const PedGeometry* geom, + PedSector sector) +{ + if (!align) + return 0; + + if (geom && !ped_geometry_test_sector_inside (geom, sector)) + return 0; + + if (align->grain_size) + return (sector - align->offset) % align->grain_size == 0; + else + return sector == align->offset; +} + +/** + * @} + */ diff --git a/jni/parted/libparted/debug.c b/jni/parted/libparted/debug.c new file mode 100755 index 0000000..9a348bd --- /dev/null +++ b/jni/parted/libparted/debug.c @@ -0,0 +1,115 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000, 2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#ifdef DEBUG + +#if HAVE_BACKTRACE +#include +#endif + +static void default_handler ( const int level, const char* file, int line, + const char* function, const char* msg ); +static PedDebugHandler* debug_handler = &default_handler; + + +/** + * Default debug handler. + * Will print all information to stderr. + */ +static void default_handler ( const int level, const char* file, int line, + const char* function, const char* msg ) +{ + fprintf ( stderr, "[%d] %s:%d (%s): %s\n", + level, file, line, function, msg ); +} + +/** + * Send a debug message. + * Do not call this directly -- use PED_DEBUG() instead. + * + * level log level, 0 ~= "print definitely" + */ +void ped_debug ( const int level, const char* file, int line, + const char* function, const char* msg, ... ) +{ + va_list arg_list; + char* msg_concat = ped_malloc(8192); + + va_start ( arg_list, msg ); + vsnprintf ( msg_concat, 8192, msg, arg_list ); + va_end ( arg_list ); + + debug_handler ( level, file, line, function, msg_concat ); + + free ( msg_concat ); +} + +/* + * handler debug handler; NULL for default handler + */ +void ped_debug_set_handler ( PedDebugHandler* handler ) +{ + debug_handler = ( handler ? handler : default_handler ); +} + +/* + * Check an assertion. + * Do not call this directly -- use PED_ASSERT() instead. + */ +void ped_assert (const char* cond_text, + const char* file, int line, const char* function) +{ +#if HAVE_BACKTRACE + /* Print backtrace stack */ + void *stack[20]; + char **strings, **string; + int size = backtrace(stack, 20); + strings = backtrace_symbols(stack, size); + + if (strings) { + printf(_("Backtrace has %d calls on stack:\n"), size); + + for (string = strings; size > 0; size--, string++) + printf(" %d: %s\n", size, *string); + + free(strings); + } +#endif + + /* Throw the exception */ + ped_exception_throw ( + PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("Assertion (%s) at %s:%d in function %s() failed."), + cond_text, file, line, function); + abort (); +} + +#endif /* DEBUG */ diff --git a/jni/parted/libparted/device.c b/jni/parted/libparted/device.c new file mode 100755 index 0000000..36fecd2 --- /dev/null +++ b/jni/parted/libparted/device.c @@ -0,0 +1,562 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999 - 2001, 2005, 2007-2010 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +/** \file device.c */ + +/** + * \addtogroup PedDevice + * + * \brief Device access. + * + * When ped_device_probe_all() is called, libparted attempts to detect all + * devices. It constructs a list which can be accessed with + * ped_device_get_next(). + * + * If you want to use a device that isn't on the list, use + * ped_device_get(). Also, there may be OS-specific constructors, for creating + * devices from file descriptors, stores, etc. For example, + * ped_device_new_from_store(). + * + * @{ + */ + +#include + +#include +#include + +#include +#include +#include +#include + +#include "architecture.h" + +static PedDevice* devices; /* legal advice says: initialized to NULL, + under section 6.7.8 part 10 + of ISO/EIC 9899:1999 */ + +static void +_device_register (PedDevice* dev) +{ + PedDevice* walk; + for (walk = devices; walk && walk->next; walk = walk->next); + if (walk) + walk->next = dev; + else + devices = dev; + dev->next = NULL; +} + +static void +_device_unregister (PedDevice* dev) +{ + PedDevice* walk; + PedDevice* last = NULL; + + for (walk = devices; walk != NULL; last = walk, walk = walk->next) { + if (walk == dev) break; + } + + /* This function may be called twice for the same device if a + libparted user explictly removes the device from the cache using + ped_device_cache_remove(), we get called and it then becomes the + user's responsibility to free the PedDevice by calling + ped_device_destroy(). + ped_device_destroy() will then call us a second time, so if the + device is not found in the list do nothing. */ + if (walk == NULL) + return; + + if (last) + last->next = dev->next; + else + devices = dev->next; +} + +/** + * Returns the next device that was detected by ped_device_probe_all(), or + * calls to ped_device_get_next(). + * If dev is NULL, returns the first device. + * + * \return NULL if dev is the last device. + */ +PedDevice* +ped_device_get_next (const PedDevice* dev) +{ + if (dev) + return dev->next; + else + return devices; +} + +void +_ped_device_probe (const char* path) +{ + PedDevice* dev; + + PED_ASSERT (path != NULL); + + ped_exception_fetch_all (); + dev = ped_device_get (path); + if (!dev) + ped_exception_catch (); + ped_exception_leave_all (); +} + +/** + * Attempts to detect all devices. + */ +void +ped_device_probe_all () +{ + ped_architecture->dev_ops->probe_all (); +} + +/** + * Close/free all devices. + * Called by ped_done(), so you do not need to worry about it. + */ +void +ped_device_free_all () +{ + while (devices) + ped_device_destroy (devices); +} + +/** + * Gets the device "name", where name is usually the block device, e.g. + * /dev/sdb. If the device wasn't detected with ped_device_probe_all(), + * an attempt will be made to detect it again. If it is found, it will + * be added to the list. + */ +PedDevice* +ped_device_get (const char* path) +{ + PedDevice* walk; + char* normal_path = NULL; + + PED_ASSERT (path != NULL); + /* Don't canonicalize /dev/mapper or /dev/md/ paths, see + tests/symlink.c + */ + if (strncmp (path, "/dev/mapper/", 12) && + strncmp (path, "/dev/md/", 8)) + normal_path = canonicalize_file_name (path); + if (!normal_path) + /* Well, maybe it is just that the file does not exist. + * Try it anyway. */ + normal_path = strdup (path); + if (!normal_path) + return NULL; + + for (walk = devices; walk != NULL; walk = walk->next) { + if (!strcmp (walk->path, normal_path)) { + free (normal_path); + return walk; + } + } + + walk = ped_architecture->dev_ops->_new (normal_path); + free (normal_path); + if (!walk) + return NULL; + _device_register (walk); + return walk; +} + +/** + * Destroys a device and removes it from the device list, and frees + * all resources associated with the device (all resources allocated + * when the device was created). + */ +void +ped_device_destroy (PedDevice* dev) +{ + _device_unregister (dev); + + while (dev->open_count) { + if (!ped_device_close (dev)) + break; + } + + ped_architecture->dev_ops->destroy (dev); +} + +void +ped_device_cache_remove(PedDevice *dev) +{ + _device_unregister (dev); +} + +int +ped_device_is_busy (PedDevice* dev) +{ + return ped_architecture->dev_ops->is_busy (dev); +} + +/** + * Attempt to open a device to allow use of read, write and sync functions. + * + * The meaning of "open" is architecture-dependent. Apart from requesting + * access to the device from the operating system, it does things like flushing + * caches. + * \note May allocate resources. Any resources allocated here will + * be freed by a final ped_device_close(). (ped_device_open() may be + * called multiple times -- it's a ref-count-like mechanism) + * + * \return zero on failure + */ +int +ped_device_open (PedDevice* dev) +{ + int status; + + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + + if (dev->open_count) + status = ped_architecture->dev_ops->refresh_open (dev); + else + status = ped_architecture->dev_ops->open (dev); + if (status) + dev->open_count++; + return status; +} + +/** + * Close dev. + * If this is the final close, then resources allocated by + * ped_device_open() are freed. + * + * \return zero on failure + */ +int +ped_device_close (PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + PED_ASSERT (dev->open_count > 0); + + if (--dev->open_count) + return ped_architecture->dev_ops->refresh_close (dev); + else + return ped_architecture->dev_ops->close (dev); +} + +/** + * Begins external access mode. External access mode allows you to + * safely do IO on the device. If a PedDevice is open, then you should + * not do any IO on that device, e.g. by calling an external program + * like e2fsck, unless you put it in external access mode. You should + * not use any libparted commands that do IO to a device, e.g. + * ped_file_system_{open|resize|copy}, ped_disk_{read|write}), while + * a device is in external access mode. + * Also, you should not ped_device_close() a device, while it is + * in external access mode. + * Note: ped_device_begin_external_access_mode() does things like + * tell the kernel to flush its caches. + * + * Close a device while pretending it is still open. + * This is useful for temporarily suspending libparted access to the device + * in order for an external program to access it. + * (Running external programs while the device is open can cause cache + * coherency problems.) + * + * In particular, this function keeps track of dev->open_count, so that + * reference counting isn't screwed up. + * + * \return zero on failure. + */ +int +ped_device_begin_external_access (PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + + dev->external_mode = 1; + if (dev->open_count) + return ped_architecture->dev_ops->close (dev); + else + return 1; +} + +/** + * \brief Complementary function to ped_device_begin_external_access. + * + * \note does things like tell the kernel to flush the device's cache. + * + * \return zero on failure. + */ +int +ped_device_end_external_access (PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (dev->external_mode); + + dev->external_mode = 0; + if (dev->open_count) + return ped_architecture->dev_ops->open (dev); + else + return 1; +} + +/** + * \internal Read count sectors from dev into buffer, beginning with sector + * start. + * + * \return zero on failure. + */ +int +ped_device_read (const PedDevice* dev, void* buffer, PedSector start, + PedSector count) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (buffer != NULL); + PED_ASSERT (!dev->external_mode); + PED_ASSERT (dev->open_count > 0); + + return (ped_architecture->dev_ops->read) (dev, buffer, start, count); +} + +/** + * \internal Write count sectors from buffer to dev, starting at sector + * start. + * + * \return zero on failure. + * + * \sa PedDevice::sector_size + * \sa PedDevice::phys_sector_size + */ +int +ped_device_write (PedDevice* dev, const void* buffer, PedSector start, + PedSector count) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (buffer != NULL); + PED_ASSERT (!dev->external_mode); + PED_ASSERT (dev->open_count > 0); + + return (ped_architecture->dev_ops->write) (dev, buffer, start, count); +} + +PedSector +ped_device_check (PedDevice* dev, void* buffer, PedSector start, + PedSector count) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + PED_ASSERT (dev->open_count > 0); + + return (ped_architecture->dev_ops->check) (dev, buffer, start, count); +} + +/** + * \internal Flushes all write-behind caches that might be holding up + * writes. + * It is slow because it guarantees cache coherency among all relevant caches. + * + * \return zero on failure + */ +int +ped_device_sync (PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + PED_ASSERT (dev->open_count > 0); + + return ped_architecture->dev_ops->sync (dev); +} + +/** + * \internal Flushes all write-behind caches that might be holding writes. + * \warning Does NOT ensure cache coherency with other caches. + * If you need cache coherency, use ped_device_sync() instead. + * + * \return zero on failure + */ +int +ped_device_sync_fast (PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (!dev->external_mode); + PED_ASSERT (dev->open_count > 0); + + return ped_architecture->dev_ops->sync_fast (dev); +} + +/** + * Get a constraint that represents hardware requirements on geometry. + * This function will return a constraint representing the limits imposed + * by the size of the disk, it will *not* provide any alignment constraints. + * + * Alignment constraints may be desirable when using media that have a physical + * sector size that is a multiple of the logical sector size, as in this case + * proper partition alignment can benefit disk performance signigicantly. + * When you want a constraint with alignment info, use + * ped_device_get_minimal_aligned_constraint() or + * ped_device_get_optimal_aligned_constraint(). + * + * \return NULL on error, otherwise a pointer to a dynamically allocated + * constraint. + */ +PedConstraint* +ped_device_get_constraint (const PedDevice* dev) +{ + PedGeometry *s, *e; + PedConstraint* c = ped_constraint_new ( + ped_alignment_any, ped_alignment_any, + s = ped_geometry_new (dev, 0, dev->length), + e = ped_geometry_new (dev, 0, dev->length), + 1, dev->length); + + free (s); + free (e); + return c; +} + +static PedConstraint* +_ped_device_get_aligned_constraint(const PedDevice *dev, + PedAlignment* start_align) +{ + PedAlignment *end_align = NULL; + PedGeometry *whole_dev_geom = NULL; + PedConstraint *c = NULL; + + if (start_align) { + end_align = ped_alignment_new(start_align->offset - 1, + start_align->grain_size); + if (!end_align) + goto free_start_align; + } + + whole_dev_geom = ped_geometry_new (dev, 0, dev->length); + + if (start_align) + c = ped_constraint_new (start_align, end_align, + whole_dev_geom, whole_dev_geom, + 1, dev->length); + else + c = ped_constraint_new (ped_alignment_any, ped_alignment_any, + whole_dev_geom, whole_dev_geom, + 1, dev->length); + + free (whole_dev_geom); + free (end_align); +free_start_align: + free (start_align); + return c; +} + +/** + * Get a constraint that represents hardware requirements on geometry and + * alignment. + * + * This function will return a constraint representing the limits imposed + * by the size of the disk and the minimal alignment requirements for proper + * performance of the disk. + * + * \return NULL on error, otherwise a pointer to a dynamically allocated + * constraint. + */ +PedConstraint* +ped_device_get_minimal_aligned_constraint(const PedDevice *dev) +{ + return _ped_device_get_aligned_constraint(dev, + ped_device_get_minimum_alignment(dev)); +} + +/** + * Get a constraint that represents hardware requirements on geometry and + * alignment. + * + * This function will return a constraint representing the limits imposed + * by the size of the disk and the alignment requirements for optimal + * performance of the disk. + * + * \return NULL on error, otherwise a pointer to a dynamically allocated + * constraint. + */ +PedConstraint* +ped_device_get_optimal_aligned_constraint(const PedDevice *dev) +{ + return _ped_device_get_aligned_constraint(dev, + ped_device_get_optimum_alignment(dev)); +} + +/** + * Get an alignment that represents minimum hardware requirements on alignment. + * When for example using media that has a physical sector size that is a + * multiple of the logical sector size, it is desirable to have disk accesses + * (and thus partitions) properly aligned. Having partitions not aligned to + * the minimum hardware requirements may lead to a performance penalty. + * + * The returned alignment describes the alignment for the start sector of the + * partition, the end sector should be aligned too, to get the end sector + * alignment decrease the returned alignment's offset by 1. + * + * \return the minimum alignment of partition start sectors, or NULL if this + * information is not available. + */ +PedAlignment* +ped_device_get_minimum_alignment(const PedDevice *dev) +{ + PedAlignment *align = NULL; + + if (ped_architecture->dev_ops->get_minimum_alignment) + align = ped_architecture->dev_ops->get_minimum_alignment(dev); + + if (align == NULL) + align = ped_alignment_new(0, + dev->phys_sector_size / dev->sector_size); + + return align; +} + +/** + * Get an alignment that represents the hardware requirements for optimal + * performance. + * + * The returned alignment describes the alignment for the start sector of the + * partition, the end sector should be aligned too, to get the end sector + * alignment decrease the returned alignment's offset by 1. + * + * \return the optimal alignment of partition start sectors, or NULL if this + * information is not available. + */ +PedAlignment* +ped_device_get_optimum_alignment(const PedDevice *dev) +{ + PedAlignment *align = NULL; + + if (ped_architecture->dev_ops->get_optimum_alignment) + align = ped_architecture->dev_ops->get_optimum_alignment(dev); + + /* If the arch specific code could not give as an alignment + return a default value based on the type of device. */ + if (align == NULL) { + /* Align to a grain of 1MiB (like vista / win7) */ + align = ped_alignment_new(0, + (PED_DEFAULT_ALIGNMENT + / dev->sector_size)); + } + + return align; +} + +/** @} */ diff --git a/jni/parted/libparted/disk.c b/jni/parted/libparted/disk.c new file mode 100755 index 0000000..0db7b5c --- /dev/null +++ b/jni/parted/libparted/disk.c @@ -0,0 +1,2668 @@ + /* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2003, 2005, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/** \file disk.c */ + +/** + * \addtogroup PedDisk + * + * \brief Disk label access. + * + * Most programs will need to use ped_disk_new() or ped_disk_new_fresh() to get + * anything done. A PedDisk is always associated with a device and has a + * partition table. There are different types of partition tables (or disk + * labels). These are represented by the PedDiskType enumeration. + * + * @{ + */ + +#include + +#include +#include +#include +#include + +#include "architecture.h" +#include "labels/pt-tools.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +# define N_(String) (String) +#else +# define _(String) (String) +# define N_(String) (String) +#endif /* ENABLE_NLS */ + +/* UPDATE MODE functions */ +#ifdef DEBUG +static int _disk_check_sanity (PedDisk* disk); +#endif +static int _disk_push_update_mode (PedDisk* disk); +static int _disk_pop_update_mode (PedDisk* disk); +static int _disk_raw_insert_before (PedDisk* disk, PedPartition* loc, + PedPartition* part); +static int _disk_raw_insert_after (PedDisk* disk, PedPartition* loc, + PedPartition* part); +static int _disk_raw_remove (PedDisk* disk, PedPartition* part); +static int _disk_raw_add (PedDisk* disk, PedPartition* part); + +static PedDiskType* disk_types = NULL; + +void +ped_disk_type_register (PedDiskType* disk_type) +{ + PED_ASSERT (disk_type != NULL); + PED_ASSERT (disk_type->ops != NULL); + PED_ASSERT (disk_type->name != NULL); + + disk_type->next = disk_types; + disk_types = disk_type; +} + +void +ped_disk_type_unregister (PedDiskType* disk_type) +{ + PedDiskType* walk; + PedDiskType* last = NULL; + + PED_ASSERT (disk_types != NULL); + PED_ASSERT (disk_type != NULL); + + for (walk = disk_types; walk && walk != disk_type; + last = walk, walk = walk->next); + + PED_ASSERT (walk != NULL); + if (last) + ((struct _PedDiskType*) last)->next = disk_type->next; + else + disk_types = disk_type->next; +} + +/** + * Return the next disk type registers, after "type". If "type" is + * NULL, returns the first disk type. + * + * \return Next disk; NULL if "type" is the last registered disk type. + */ +PedDiskType* +ped_disk_type_get_next (PedDiskType const *type) +{ + if (type) + return type->next; + else + return disk_types; +} + +/** + * Return the disk type with a name of "name". + * + * \return Disk type; NULL if no match. + */ +PedDiskType* +ped_disk_type_get (const char* name) +{ + PedDiskType* walk = NULL; + + PED_ASSERT (name != NULL); + + for (walk = ped_disk_type_get_next (NULL); walk; + walk = ped_disk_type_get_next (walk)) + if (strcasecmp (walk->name, name) == 0) + break; + + return walk; +} + +/** + * Return the type of partition table detected on "dev". + * + * \return Type; NULL if none was detected. + */ +PedDiskType* +ped_disk_probe (PedDevice* dev) +{ + PedDiskType* walk = NULL; + + PED_ASSERT (dev != NULL); + + if (!ped_device_open (dev)) + return NULL; + + ped_exception_fetch_all (); + for (walk = ped_disk_type_get_next (NULL); walk; + walk = ped_disk_type_get_next (walk)) + { + if (getenv ("PARTED_DEBUG")) { + fprintf (stderr, "probe label: %s\n", + walk->name); + fflush (stderr); + } + if (walk->ops->probe (dev)) + break; + } + + if (ped_exception) + ped_exception_catch (); + ped_exception_leave_all (); + + ped_device_close (dev); + return walk; +} + +/** + * Read the partition table off a device (if one is found). + * + * \warning May modify \p dev->cylinders, \p dev->heads and \p dev->sectors + * if the partition table indicates that the existing values + * are incorrect. + * + * \return A new \link _PedDisk PedDisk \endlink object; + * NULL on failure (e.g. partition table not detected). + */ +PedDisk* +ped_disk_new (PedDevice* dev) +{ + PedDiskType* type; + PedDisk* disk; + + PED_ASSERT (dev != NULL); + + if (!ped_device_open (dev)) + goto error; + + type = ped_disk_probe (dev); + if (!type) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s: unrecognised disk label"), + dev->path); + goto error_close_dev; + } + disk = ped_disk_new_fresh (dev, type); + if (!disk) + goto error_close_dev; + if (!type->ops->read (disk)) + goto error_destroy_disk; + disk->needs_clobber = 0; + ped_device_close (dev); + return disk; + +error_destroy_disk: + ped_disk_destroy (disk); +error_close_dev: + ped_device_close (dev); +error: + return NULL; +} + +static int +_add_duplicate_part (PedDisk* disk, PedPartition* old_part) +{ + PedPartition* new_part; + int ret; + + new_part = disk->type->ops->partition_duplicate (old_part); + if (!new_part) + goto error; + new_part->disk = disk; + + if (!_disk_push_update_mode (disk)) + goto error_destroy_new_part; + ret = _disk_raw_add (disk, new_part); + if (!_disk_pop_update_mode (disk)) + goto error_destroy_new_part; + if (!ret) + goto error_destroy_new_part; +#ifdef DEBUG + if (!_disk_check_sanity (disk)) + goto error_destroy_new_part; +#endif + return 1; + +error_destroy_new_part: + ped_partition_destroy (new_part); +error: + return 0; +} + +/** + * Clone a \link _PedDisk PedDisk \endlink object. + * + * \return Deep copy of \p old_disk, NULL on failure. + */ +PedDisk* +ped_disk_duplicate (const PedDisk* old_disk) +{ + PedDisk* new_disk; + PedPartition* old_part; + + PED_ASSERT (old_disk != NULL); + PED_ASSERT (!old_disk->update_mode); + PED_ASSERT (old_disk->type->ops->duplicate != NULL); + PED_ASSERT (old_disk->type->ops->partition_duplicate != NULL); + + new_disk = old_disk->type->ops->duplicate (old_disk); + if (!new_disk) + goto error; + + if (!_disk_push_update_mode (new_disk)) + goto error_destroy_new_disk; + for (old_part = ped_disk_next_partition (old_disk, NULL); old_part; + old_part = ped_disk_next_partition (old_disk, old_part)) { + if (ped_partition_is_active (old_part)) { + if (!_add_duplicate_part (new_disk, old_part)){ + _disk_pop_update_mode (new_disk); + goto error_destroy_new_disk; + } + } + } + if (!_disk_pop_update_mode (new_disk)) + goto error_destroy_new_disk; + + new_disk->needs_clobber = old_disk->needs_clobber; + + return new_disk; + +error_destroy_new_disk: + ped_disk_destroy (new_disk); +error: + return NULL; +} + +/* Given a partition table type NAME, e.g., "gpt", return its PedDiskType + handle. If no known type has a name matching NAME, return NULL. */ +static PedDiskType const * _GL_ATTRIBUTE_PURE +find_disk_type (char const *name) +{ + PedDiskType const *t; + for (t = ped_disk_type_get_next (NULL); t; t = ped_disk_type_get_next (t)) + { + if (strcmp (t->name, name) == 0) + return t; + } + return NULL; +} + +/** + * Remove all identifying signatures of a partition table, + * + * \return 0 on error, 1 otherwise. + * + * \sa ped_disk_clobber() + */ +int +ped_disk_clobber (PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + + if (!ped_device_open (dev)) + goto error; + + PedDiskType const *gpt = find_disk_type ("gpt"); + PED_ASSERT (gpt != NULL); + + /* If there is a GPT table, don't clobber the protective MBR. */ + bool is_gpt = gpt->ops->probe (dev); + PedSector first_sector = (is_gpt ? 1 : 0); + + /* How many sectors to zero out at each end. + This must be large enough to zero out the magic bytes + starting at offset 8KiB on a DASD partition table. + Doing the same from the end of the disk is probably + overkill, but at least on GPT, we do need to zero out + the final sector. */ + const PedSector n_sectors = 9 * 1024 / dev->sector_size + 1; + + /* Clear the first few. */ + PedSector n = n_sectors; + if (dev->length < first_sector + n_sectors) + n = dev->length - first_sector; + if (!ptt_clear_sectors (dev, first_sector, n)) + goto error_close_dev; + + /* Clear the last few. */ + PedSector t = (dev->length - + (n_sectors < dev->length ? n_sectors : 1)); + + /* Don't clobber the pMBR if we have a pathologically small disk. */ + if (t < first_sector) + t = first_sector; + if (!ptt_clear_sectors (dev, t, dev->length - t)) + goto error_close_dev; + + ped_device_close (dev); + return 1; + +error_close_dev: + ped_device_close (dev); +error: + return 0; +} + +/** + * Create a new partition table on \p dev. + * + * This new partition table is only created in-memory, and nothing is written + * to disk until ped_disk_commit_to_dev() is called. + * + * \return The newly constructed \link _PedDisk PedDisk \endlink, + * NULL on failure. + */ +PedDisk* +ped_disk_new_fresh (PedDevice* dev, const PedDiskType* type) +{ + PedDisk* disk; + + PED_ASSERT (dev != NULL); + PED_ASSERT (type != NULL); + PED_ASSERT (type->ops->alloc != NULL); + PedCHSGeometry* bios_geom = &dev->bios_geom; + PED_ASSERT (bios_geom->sectors != 0); + PED_ASSERT (bios_geom->heads != 0); + + disk = type->ops->alloc (dev); + if (!disk) + goto error; + if (!_disk_pop_update_mode (disk)) + goto error_destroy_disk; + PED_ASSERT (disk->update_mode == 0); + + disk->needs_clobber = 1; + return disk; + +error_destroy_disk: + ped_disk_destroy (disk); +error: + return NULL; +} + +PedDisk* +_ped_disk_alloc (const PedDevice* dev, const PedDiskType* disk_type) +{ + PedDisk* disk; + + disk = (PedDisk*) ped_malloc (sizeof (PedDisk)); + if (!disk) + goto error; + + disk->dev = (PedDevice*)dev; + disk->type = disk_type; + disk->update_mode = 1; + disk->part_list = NULL; + disk->needs_clobber = 0; + return disk; + +error: + return NULL; +} + +void +_ped_disk_free (PedDisk* disk) +{ + _disk_push_update_mode (disk); + ped_disk_delete_all (disk); + free (disk); +} + +/** + * Close \p disk. + * + * What this function does depends on the PedDiskType of \p disk, + * but you can generally assume that outstanding writes are flushed + * (this mainly means that _ped_disk_free is called). + */ +void +ped_disk_destroy (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (!disk->update_mode); + + disk->type->ops->free (disk); +} + +/** + * Tell the operating system kernel about the partition table layout + * of \p disk. + * + * This is rather loosely defined: for example, on old versions of Linux, + * it simply calls the BLKRRPART ioctl, which tells the kernel to + * reread the partition table. On newer versions (2.4.x), it will + * use the new blkpg interface to tell Linux where each partition + * starts/ends, etc. In this case, Linux does not need to have support for + * a specific type of partition table. + * + * \return 0 on failure, 1 otherwise. + */ +int +ped_disk_commit_to_os (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + + if (!ped_device_open (disk->dev)) + goto error; + if (!ped_architecture->disk_ops->disk_commit (disk)) + goto error_close_dev; + ped_device_close (disk->dev); + return 1; + +error_close_dev: + ped_device_close (disk->dev); +error: + return 0; +} + +/** + * Write the changes made to the in-memory description + * of a partition table to the device. + * + * \return 0 on failure, 1 otherwise. + */ +int +ped_disk_commit_to_dev (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (!disk->update_mode); + + if (!disk->type->ops->write) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("This libparted doesn't have write support for " + "%s. Perhaps it was compiled read-only."), + disk->type->name); + goto error; + } + + if (!ped_device_open (disk->dev)) + goto error; + + if (disk->needs_clobber) { + if (!ped_disk_clobber (disk->dev)) + goto error_close_dev; + disk->needs_clobber = 0; + } + if (!disk->type->ops->write (disk)) + goto error_close_dev; + ped_device_close (disk->dev); + return 1; + +error_close_dev: + ped_device_close (disk->dev); +error: + return 0; +} + +/* + * This function writes the in-memory changes to a partition table to + * disk and informs the operating system of the changes. + * + * \note Equivalent to calling first ped_disk_commit_to_dev(), then + * ped_disk_commit_to_os(). + * + * \return 0 on failure, 1 otherwise. + */ +int +ped_disk_commit (PedDisk* disk) +{ + /* Open the device here, so that the underlying fd is not closed + between commit_to_dev and commit_to_os (closing causes unwanted + udev events to be sent under Linux). */ + if (!ped_device_open (disk->dev)) + goto error; + + if (!ped_disk_commit_to_dev (disk)) + goto error_close_dev; + + if (!ped_disk_commit_to_os (disk)) + goto error_close_dev; + + ped_device_close (disk->dev); + return 1; + +error_close_dev: + ped_device_close (disk->dev); +error: + return 0; +} + +/** + * \addtogroup PedPartition + * + * @{ + */ + +/** + * Check whether a partition is mounted or busy in some + * other way. + * + * \note An extended partition is busy if any logical partitions are mounted. + * + * \return \c 1 if busy. + */ +int +ped_partition_is_busy (const PedPartition* part) +{ + PED_ASSERT (part != NULL); + + return ped_architecture->disk_ops->partition_is_busy (part); +} + +/** + * Return a path that can be used to address the partition in the + * operating system. + */ +char* +ped_partition_get_path (const PedPartition* part) +{ + PED_ASSERT (part != NULL); + + return ped_architecture->disk_ops->partition_get_path (part); +} + +/** @} */ + +/** + * \addtogroup PedDisk + * + * @{ + */ + +/** + * Perform a sanity check on a partition table. + * + * \note The check performed is generic (i.e. it does not depends on the label + * type of the disk. + * + * \throws PED_EXCEPTION_WARNING if a partition type ID does not match the file + * system on it. + * + * \return 0 if the check fails, 1 otherwise. + */ +int +ped_disk_check (const PedDisk* disk) +{ + PedPartition* walk; + + PED_ASSERT (disk != NULL); + + for (walk = disk->part_list; walk; + walk = ped_disk_next_partition (disk, walk)) { + const PedFileSystemType* fs_type = walk->fs_type; + PedGeometry* geom; + PedSector length_error; + PedSector max_length_error; + + if (!ped_partition_is_active (walk) || !fs_type) + continue; + + geom = ped_file_system_probe_specific (fs_type, &walk->geom); + if (!geom) + continue; + + length_error = llabs (walk->geom.length - geom->length); + max_length_error = PED_MAX (4096, walk->geom.length / 100); + bool ok = (ped_geometry_test_inside (&walk->geom, geom) + && length_error <= max_length_error); + char *fs_size = ped_unit_format (disk->dev, geom->length); + ped_geometry_destroy (geom); + if (!ok) { + char* part_size = ped_unit_format (disk->dev, + walk->geom.length); + PedExceptionOption choice; + choice = ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("Partition %d is %s, but the file system is " + "%s."), + walk->num, part_size, fs_size); + + free (part_size); + + free (fs_size); + fs_size = NULL; + + if (choice != PED_EXCEPTION_IGNORE) + return 0; + } + free (fs_size); + } + + return 1; +} + +/** + * This function checks if a particular type of partition table supports + * a feature. + * + * \return 1 if \p disk_type supports \p feature, 0 otherwise. + */ +int +ped_disk_type_check_feature (const PedDiskType* disk_type, + PedDiskTypeFeature feature) +{ + return (disk_type->features & feature) != 0; +} + +/** + * Get the number of primary partitions. + */ +int +ped_disk_get_primary_partition_count (const PedDisk* disk) +{ + PedPartition* walk; + int count = 0; + + PED_ASSERT (disk != NULL); + + for (walk = disk->part_list; walk; + walk = ped_disk_next_partition (disk, walk)) { + if (ped_partition_is_active (walk) + && ! (walk->type & PED_PARTITION_LOGICAL)) + count++; + } + + return count; +} + +/** + * Get the highest available partition number on \p disk. + */ +int +ped_disk_get_last_partition_num (const PedDisk* disk) +{ + PedPartition* walk; + int highest = -1; + + PED_ASSERT (disk != NULL); + + for (walk = disk->part_list; walk; + walk = ped_disk_next_partition (disk, walk)) { + if (walk->num > highest) + highest = walk->num; + } + + return highest; +} + +/** + * Get the highest supported partition number on \p disk. + * + * \return 0 if call fails. 1 otherwise. + */ +bool +ped_disk_get_max_supported_partition_count(const PedDisk* disk, int* supported) +{ + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->type->ops->get_max_supported_partition_count != NULL); + + return disk->type->ops->get_max_supported_partition_count(disk, supported); +} + +/** + * Get the alignment needed for partition boundaries on this disk. + * The returned alignment describes the alignment for the start sector of the + * partition, for all disklabel types which require alignment, except Sun + * disklabels, the end sector must be aligned too. To get the end sector + * alignment decrease the PedAlignment offset by 1. + * + * \return NULL on error, otherwise a pointer to a dynamically allocated + * alignment. + */ +PedAlignment* +ped_disk_get_partition_alignment(const PedDisk *disk) +{ + /* disklabel handlers which don't need alignment don't define this */ + if (!disk->type->ops->get_partition_alignment) + return ped_alignment_duplicate(ped_alignment_any); + + return disk->type->ops->get_partition_alignment(disk); +} + +/** + * Get the maximum number of (primary) partitions the disk label supports. + * + * For example, MacIntosh partition maps can have different sizes, + * and accordingly support a different number of partitions. + */ +int +ped_disk_get_max_primary_partition_count (const PedDisk* disk) +{ + PED_ASSERT (disk->type != NULL); + PED_ASSERT (disk->type->ops->get_max_primary_partition_count != NULL); + + return disk->type->ops->get_max_primary_partition_count (disk); +} + +/** + * Set the state (\c 1 or \c 0) of a flag on a disk. + * + * \note It is an error to call this on an unavailable flag -- use + * ped_disk_is_flag_available() to determine which flags are available + * for a given disk label. + * + * \throws PED_EXCEPTION_ERROR if the requested flag is not available for this + * label. + */ +int +ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int state) +{ + int ret; + + PED_ASSERT (disk != NULL); + + PedDiskOps *ops = disk->type->ops; + + if (!_disk_push_update_mode(disk)) + return 0; + + if (!ped_disk_is_flag_available(disk, flag)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + "The flag '%s' is not available for %s disk labels.", + ped_disk_flag_get_name(flag), + disk->type->name); + _disk_pop_update_mode(disk); + return 0; + } + + ret = ops->disk_set_flag(disk, flag, state); + + if (!_disk_pop_update_mode (disk)) + return 0; + + return ret; +} + +/** + * Get the state (\c 1 or \c 0) of a flag on a disk. + */ +int +ped_disk_get_flag(const PedDisk *disk, PedDiskFlag flag) +{ + PED_ASSERT (disk != NULL); + + PedDiskOps *ops = disk->type->ops; + + if (!ped_disk_is_flag_available(disk, flag)) + return 0; + + return ops->disk_get_flag(disk, flag); +} + +/** + * Check whether a given flag is available on a disk. + * + * \return \c 1 if the flag is available. + */ +int +ped_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag) +{ + PED_ASSERT (disk != NULL); + + PedDiskOps *ops = disk->type->ops; + + if (!ops->disk_is_flag_available) + return 0; + + return ops->disk_is_flag_available(disk, flag); +} + +/** + * Returns a name for a \p flag, e.g. PED_DISK_CYLINDER_ALIGNMENT will return + * "cylinder_alignment". + * + * \note The returned string will be in English. However, + * translations are provided, so the caller can call + * dgettext("parted", RESULT) on the result. + */ +const char * +ped_disk_flag_get_name(PedDiskFlag flag) +{ + switch (flag) { + case PED_DISK_CYLINDER_ALIGNMENT: + return N_("cylinder_alignment"); + case PED_DISK_GPT_PMBR_BOOT: + return N_("pmbr_boot"); + default: + ped_exception_throw ( + PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("Unknown disk flag, %d."), + flag); + return NULL; + } +} + +/** + * Returns the flag associated with \p name. + * + * \p name can be the English + * string, or the translation for the native language. + */ +PedDiskFlag +ped_disk_flag_get_by_name(const char *name) +{ + PedDiskFlag flag; + + for (flag = ped_disk_flag_next(0); flag; + flag = ped_disk_flag_next(flag)) { + const char *flag_name = ped_disk_flag_get_name(flag); + if (strcasecmp(name, flag_name) == 0 + || strcasecmp(name, _(flag_name)) == 0) + return flag; + } + + return 0; +} + +/** + * Iterates through all disk flags. + * + * ped_disk_flag_next(0) returns the first flag + * + * \return the next flag, or 0 if there are no more flags + */ +PedDiskFlag +ped_disk_flag_next(PedDiskFlag flag) +{ + return (flag + 1) % (PED_DISK_LAST_FLAG + 1); +} + +static int +_assert_disk_uuid_feature (const PedDiskType* disk_type) +{ + if (!ped_disk_type_check_feature ( + disk_type, PED_DISK_TYPE_DISK_UUID)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + "%s disk labels do not support disk uuids.", + disk_type->name); + return 0; + } + return 1; +} + +/** + * Get the uuid of the disk \p disk. This will only work if the disk label + * supports it. + */ +uint8_t* +ped_disk_get_uuid (const PedDisk *disk) +{ + PED_ASSERT (disk != NULL); + + if (!_assert_disk_uuid_feature (disk->type)) + return NULL; + + PED_ASSERT (disk->type->ops->disk_get_uuid != NULL); + return disk->type->ops->disk_get_uuid (disk); +} + +/** + * \internal We turned a really nasty bureaucracy problem into an elegant maths + * problem :-) Basically, there are some constraints to a partition's + * geometry: + * + * (1) it must start and end on a "disk" block, determined by the disk label + * (not the hardware). (constraint represented by a PedAlignment) + * + * (2) if we're resizing a partition, we MIGHT need to keep each block aligned. + * Eg: if an ext2 file system has 4k blocks, then we can only move the start + * by a multiple of 4k. (constraint represented by a PedAlignment) + * + * (3) we need to keep the start and end within the device's physical + * boundaries. (constraint represented by a PedGeometry) + * + * Satisfying (1) and (2) simultaneously required a bit of fancy maths ;-) See + * ped_alignment_intersect() + * + * The application of these constraints is in disk_*.c's *_partition_align() + * function. + */ +static int +_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + const PedDiskType* disk_type; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->num != -1); + PED_ASSERT (part->disk != NULL); + disk_type = part->disk->type; + PED_ASSERT (disk_type != NULL); + PED_ASSERT (disk_type->ops->partition_align != NULL); + PED_ASSERT (part->disk->update_mode); + + if (part->disk->needs_clobber) + return 1; /* do not attempt to align partitions while reading them */ + return disk_type->ops->partition_align (part, constraint); +} + +static int +_partition_enumerate (PedPartition* part) +{ + const PedDiskType* disk_type; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + disk_type = part->disk->type; + PED_ASSERT (disk_type != NULL); + PED_ASSERT (disk_type->ops->partition_enumerate != NULL); + + return disk_type->ops->partition_enumerate (part); +} + +/** + * Gives all the (active) partitions a number. It should preserve the numbers + * and orders as much as possible. + */ +static int +ped_disk_enumerate_partitions (PedDisk* disk) +{ + PedPartition* walk; + int i; + int end; + + PED_ASSERT (disk != NULL); + +/* first "sort" already-numbered partitions. (e.g. if a logical partition + * is removed, then all logical partitions that were number higher MUST be + * renumbered) + */ + end = ped_disk_get_last_partition_num (disk); + for (i=1; i<=end; i++) { + walk = ped_disk_get_partition (disk, i); + if (walk) { + if (!_partition_enumerate (walk)) + return 0; + } + } + +/* now, number un-numbered partitions */ + for (walk = disk->part_list; walk; + walk = ped_disk_next_partition (disk, walk)) { + if (ped_partition_is_active (walk) && walk->num == -1) { + if (!_partition_enumerate (walk)) + return 0; + } + } + + return 1; +} + +static int +_disk_remove_metadata (PedDisk* disk) +{ + PedPartition* walk = NULL; + PedPartition* next; + + PED_ASSERT (disk != NULL); + + next = ped_disk_next_partition (disk, walk); + + while (next) { + walk = next; + while (1) { + next = ped_disk_next_partition (disk, next); + if (!next || next->type & PED_PARTITION_METADATA) + break; + } + if (walk->type & PED_PARTITION_METADATA) + ped_disk_delete_partition (disk, walk); + } + return 1; +} + +static int +_disk_alloc_metadata (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + + if (!disk->update_mode) + _disk_remove_metadata (disk); + + return disk->type->ops->alloc_metadata (disk); +} + +static int +_disk_remove_freespace (PedDisk* disk) +{ + PedPartition* walk; + PedPartition* next; + + walk = ped_disk_next_partition (disk, NULL); + for (; walk; walk = next) { + next = ped_disk_next_partition (disk, walk); + + if (walk->type & PED_PARTITION_FREESPACE) { + _disk_raw_remove (disk, walk); + ped_partition_destroy (walk); + } + } + + return 1; +} + +static int +_alloc_extended_freespace (PedDisk* disk) +{ + PedSector last_end; + PedPartition* walk; + PedPartition* last; + PedPartition* free_space; + PedPartition* extended_part; + + extended_part = ped_disk_extended_partition (disk); + if (!extended_part) + return 1; + + last_end = extended_part->geom.start; + last = NULL; + + for (walk = extended_part->part_list; walk; walk = walk->next) { + if (walk->geom.start > last_end + 1) { + free_space = ped_partition_new ( + disk, + PED_PARTITION_FREESPACE + | PED_PARTITION_LOGICAL, + NULL, + last_end + 1, walk->geom.start - 1); + _disk_raw_insert_before (disk, walk, free_space); + } + + last = walk; + last_end = last->geom.end; + } + + if (last_end < extended_part->geom.end) { + free_space = ped_partition_new ( + disk, + PED_PARTITION_FREESPACE | PED_PARTITION_LOGICAL, + NULL, + last_end + 1, extended_part->geom.end); + + if (last) + return _disk_raw_insert_after (disk, last, free_space); + else + extended_part->part_list = free_space; + } + + return 1; +} + +static int +_disk_alloc_freespace (PedDisk* disk) +{ + PedSector last_end; + PedPartition* walk; + PedPartition* last; + PedPartition* free_space; + + if (!_disk_remove_freespace (disk)) + return 0; + if (!_alloc_extended_freespace (disk)) + return 0; + + last = NULL; + last_end = -1; + + for (walk = disk->part_list; walk; walk = walk->next) { + if (walk->geom.start > last_end + 1) { + free_space = ped_partition_new (disk, + PED_PARTITION_FREESPACE, NULL, + last_end + 1, walk->geom.start - 1); + _disk_raw_insert_before (disk, walk, free_space); + } + + last = walk; + last_end = last->geom.end; + } + + if (last_end < disk->dev->length - 1) { + free_space = ped_partition_new (disk, + PED_PARTITION_FREESPACE, NULL, + last_end + 1, disk->dev->length - 1); + if (last) + return _disk_raw_insert_after (disk, last, free_space); + else + disk->part_list = free_space; + } + + return 1; +} + +/** + * Update mode: used when updating the internal representation of the partition + * table. In update mode, the metadata and freespace placeholder/virtual + * partitions are removed, making it much easier for various manipulation + * routines... + */ +static int +_disk_push_update_mode (PedDisk* disk) +{ + if (!disk->update_mode) { +#ifdef DEBUG + if (!_disk_check_sanity (disk)) + return 0; +#endif + + _disk_remove_freespace (disk); + disk->update_mode++; + _disk_remove_metadata (disk); + +#ifdef DEBUG + if (!_disk_check_sanity (disk)) + return 0; +#endif + } else { + disk->update_mode++; + } + return 1; +} + +static int +_disk_pop_update_mode (PedDisk* disk) +{ + PED_ASSERT (disk->update_mode); + + if (disk->update_mode == 1) { + /* re-allocate metadata BEFORE leaving update mode, to prevent infinite + * recursion (metadata allocation requires update mode) + */ +#ifdef DEBUG + if (!_disk_check_sanity (disk)) + return 0; +#endif + + _disk_alloc_metadata (disk); + disk->update_mode--; + _disk_alloc_freespace (disk); + +#ifdef DEBUG + if (!_disk_check_sanity (disk)) + return 0; +#endif + } else { + disk->update_mode--; + } + return 1; +} + +/** @} */ + +/** + * \addtogroup PedPartition + * + * \brief Partition access. + * + * @{ + */ + +PedPartition* +_ped_partition_alloc (const PedDisk* disk, PedPartitionType type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + PedPartition* part; + + PED_ASSERT (disk != NULL); + + part = (PedPartition*) ped_malloc (sizeof (PedPartition)); + if (!part) + goto error; + + part->prev = NULL; + part->next = NULL; + + part->disk = (PedDisk*) disk; + if (!ped_geometry_init (&part->geom, disk->dev, start, end - start + 1)) + goto error_free_part; + + part->num = -1; + part->type = type; + part->part_list = NULL; + part->fs_type = fs_type; + + return part; + +error_free_part: + free (part); +error: + return NULL; +} + +void +_ped_partition_free (PedPartition* part) +{ + free (part); +} + +int +_ped_partition_attempt_align (PedPartition* part, + const PedConstraint* external, + PedConstraint* internal) +{ + PedConstraint* intersection; + PedGeometry* solution; + + intersection = ped_constraint_intersect (external, internal); + ped_constraint_destroy (internal); + if (!intersection) + goto fail; + + solution = ped_constraint_solve_nearest (intersection, &part->geom); + if (!solution) + goto fail_free_intersection; + ped_geometry_set (&part->geom, solution->start, solution->length); + ped_geometry_destroy (solution); + ped_constraint_destroy (intersection); + return 1; + +fail_free_intersection: + ped_constraint_destroy (intersection); +fail: + return 0; +} + +/** + * Create a new \link _PedPartition PedPartition \endlink on \p disk. + * + * \param type One of \p PED_PARTITION_NORMAL, \p PED_PARTITION_EXTENDED, + * \p PED_PARTITION_LOGICAL. + * + * \note The constructed partition is not added to disk's + * partition table. Use ped_disk_add_partition() to do this. + * + * \return A new \link _PedPartition PedPartition \endlink object, + * NULL on failure. + * + * \throws PED_EXCEPTION_ERROR if \p type is \p EXTENDED or \p LOGICAL but the + * label does not support this concept. + */ +PedPartition* +ped_partition_new (const PedDisk* disk, PedPartitionType type, + const PedFileSystemType* fs_type, PedSector start, + PedSector end) +{ + int supports_extended; + PedPartition* part; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->type->ops->partition_new != NULL); + + supports_extended = ped_disk_type_check_feature (disk->type, + PED_DISK_TYPE_EXTENDED); + + if (!supports_extended + && (type == PED_PARTITION_EXTENDED + || type == PED_PARTITION_LOGICAL)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s disk labels do not support extended " + "partitions."), + disk->type->name); + goto error; + } + + part = disk->type->ops->partition_new (disk, type, fs_type, start, end); + if (!part) + goto error; + + if (fs_type || part->type == PED_PARTITION_EXTENDED) { + if (!ped_partition_set_system (part, fs_type)) + goto error_destroy_part; + } + return part; + +error_destroy_part: + ped_partition_destroy (part); +error: + return NULL; +} + +/** + * Destroy a \link _PedPartition PedPartition \endlink object. + * + * \note Should not be called on a partition that is in a partition table. + * Use ped_disk_delete_partition() instead. + */ +void +ped_partition_destroy (PedPartition* part) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk->type->ops->partition_new != NULL); + + part->disk->type->ops->partition_destroy (part); +} + + +/** + * Return whether or not the partition is "active". + * + * A partition is active if \p part->type is neither \p PED_PARTITION_METADATA + * nor \p PED_PARTITION_FREE. + */ +int +ped_partition_is_active (const PedPartition* part) +{ + PED_ASSERT (part != NULL); + + return !(part->type & PED_PARTITION_FREESPACE + || part->type & PED_PARTITION_METADATA); +} + +/** + * Set the state (\c 1 or \c 0) of a flag on a partition. + * + * Flags are disk label specific, although they have a global + * "namespace": the flag PED_PARTITION_BOOT, for example, roughly means + * "this" partition is bootable". But this means different things on different + * disk labels (and may not be defined on some disk labels). For example, + * on MS-DOS disk labels, there can only be one boot partition, and this + * refers to the partition that will be booted from on startup. On PC98 + * disk labels, the user can choose from any bootable partition on startup. + * + * \note It is an error to call this on an unavailable flag -- use + * ped_partition_is_flag_available() to determine which flags are available + * for a given disk label. + * + * \throws PED_EXCEPTION_ERROR if the requested flag is not available for this + * label. + */ +int +ped_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + PedDiskOps* ops; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (ped_partition_is_active (part)); + + ops = part->disk->type->ops; + PED_ASSERT (ops->partition_set_flag != NULL); + PED_ASSERT (ops->partition_is_flag_available != NULL); + + if (!ops->partition_is_flag_available (part, flag)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + "The flag '%s' is not available for %s disk labels.", + ped_partition_flag_get_name (flag), + part->disk->type->name); + return 0; + } + + return ops->partition_set_flag (part, flag, state); +} + +/** + * Get the state (\c 1 or \c 0) of a flag on a partition. + * + * See ped_partition_set_flag() for conditions that must hold. + * + * \todo Where's the check for flag availability? + */ +int +ped_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk->type->ops->partition_get_flag != NULL); + PED_ASSERT (ped_partition_is_active (part)); + + return part->disk->type->ops->partition_get_flag (part, flag); +} + +/** + * Check whether a given flag is available on a partition. + * + * \return \c 1 if the flag is available. + */ +int +ped_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk->type->ops->partition_is_flag_available != NULL); + PED_ASSERT (ped_partition_is_active (part)); + + return part->disk->type->ops->partition_is_flag_available (part, flag); +} + +/** + * Sets the system type on the partition to \p fs_type. + * + * \note The file system may be opened, to get more information about the + * file system, e.g. to determine if it's FAT16 or FAT32. + * + * \return \c 0 on failure. + */ +int +ped_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type) +{ + const PedDiskType* disk_type; + + PED_ASSERT (part != NULL); + PED_ASSERT (ped_partition_is_active (part)); + PED_ASSERT (part->disk != NULL); + disk_type = part->disk->type; + PED_ASSERT (disk_type != NULL); + PED_ASSERT (disk_type->ops != NULL); + PED_ASSERT (disk_type->ops->partition_set_system != NULL); + + return disk_type->ops->partition_set_system (part, fs_type); +} + +static int +_assert_partition_name_feature (const PedDiskType* disk_type) +{ + if (!ped_disk_type_check_feature ( + disk_type, PED_DISK_TYPE_PARTITION_NAME)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + "%s disk labels do not support partition names.", + disk_type->name); + return 0; + } + return 1; +} + +static int +_assert_partition_type_id_feature (const PedDiskType* disk_type) +{ + if (!ped_disk_type_check_feature ( + disk_type, PED_DISK_TYPE_PARTITION_TYPE_ID)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + "%s disk labels do not support partition type-ids.", + disk_type->name); + return 0; + } + return 1; +} + +static int +_assert_partition_type_uuid_feature (const PedDiskType* disk_type) +{ + if (!ped_disk_type_check_feature ( + disk_type, PED_DISK_TYPE_PARTITION_TYPE_UUID)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + "%s disk labels do not support partition type-uuids.", + disk_type->name); + return 0; + } + return 1; +} + +static int +_assert_partition_uuid_feature (const PedDiskType* disk_type) +{ + if (!ped_disk_type_check_feature ( + disk_type, PED_DISK_TYPE_PARTITION_UUID)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + "%s disk labels do not support partition uuids.", + disk_type->name); + return 0; + } + return 1; +} + +/** + * Sets the name of a partition. + * + * \note This will only work if the disk label supports it. + * You can use + * \code + * ped_disk_type_check_feature (part->disk->type, PED_DISK_TYPE_PARTITION_NAME); + * \endcode + * to check whether this feature is enabled for a label. + * + * \note \p name will not be modified by libparted. It can be freed + * by the caller immediately after ped_partition_set_name() is called. + * + * \return \c 1 on success, \c 0 otherwise. + */ +int +ped_partition_set_name (PedPartition* part, const char* name) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (ped_partition_is_active (part)); + PED_ASSERT (name != NULL); + + if (!_assert_partition_name_feature (part->disk->type)) + return 0; + + PED_ASSERT (part->disk->type->ops->partition_set_name != NULL); + part->disk->type->ops->partition_set_name (part, name); + return 1; +} + +/** + * Returns the name of a partition \p part. This will only work if the disk + * label supports it. + * + * \note The returned string should not be modified. It should + * not be referenced after the partition is destroyed. + */ +const char* +ped_partition_get_name (const PedPartition* part) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (ped_partition_is_active (part)); + + if (!_assert_partition_name_feature (part->disk->type)) + return NULL; + + PED_ASSERT (part->disk->type->ops->partition_get_name != NULL); + return part->disk->type->ops->partition_get_name (part); +} + +/** + * Set the type-id of the partition \p part. This will only work if the disk label + * supports it. + */ +int +ped_partition_set_type_id (PedPartition *part, uint8_t id) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (ped_partition_is_active (part)); + + if (!_assert_partition_type_id_feature (part->disk->type)) + return 0; + + PED_ASSERT (part->disk->type->ops->partition_set_type_id != NULL); + return part->disk->type->ops->partition_set_type_id (part, id); +} + +/** + * Get the type-id of the partition \p part. This will only work if the disk label + * supports it. + */ +uint8_t +ped_partition_get_type_id (const PedPartition *part) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (ped_partition_is_active (part)); + + if (!_assert_partition_type_id_feature (part->disk->type)) + return 0; + + PED_ASSERT (part->disk->type->ops->partition_get_type_id != NULL); + return part->disk->type->ops->partition_get_type_id (part); +} + +/** + * Set the type-uuid of the partition \p part. This will only work if the disk label + * supports it. + */ +int +ped_partition_set_type_uuid (PedPartition *part, const uint8_t* uuid) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (ped_partition_is_active (part)); + + if (!_assert_partition_type_uuid_feature (part->disk->type)) + return 0; + + PED_ASSERT (part->disk->type->ops->partition_set_type_uuid != NULL); + return part->disk->type->ops->partition_set_type_uuid (part, uuid); +} + +/** + * Get the type-uuid of the partition \p part. This will only work if the disk label + * supports it. + */ +uint8_t* +ped_partition_get_type_uuid (const PedPartition *part) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (ped_partition_is_active (part)); + + if (!_assert_partition_type_uuid_feature (part->disk->type)) + return NULL; + + PED_ASSERT (part->disk->type->ops->partition_get_type_uuid != NULL); + return part->disk->type->ops->partition_get_type_uuid (part); +} + +/** + * Get the uuid of the partition \p part. This will only work if the disk label + * supports it. + */ +uint8_t* +ped_partition_get_uuid (const PedPartition *part) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (ped_partition_is_active (part)); + + if (!_assert_partition_uuid_feature (part->disk->type)) + return NULL; + + PED_ASSERT (part->disk->type->ops->partition_get_uuid != NULL); + return part->disk->type->ops->partition_get_uuid (part); +} + +/** @} */ + +/** + * \addtogroup PedDisk + * + * @{ + */ + +PedPartition* +ped_disk_extended_partition (const PedDisk* disk) +{ + PedPartition* walk; + + PED_ASSERT (disk != NULL); + + for (walk = disk->part_list; walk; walk = walk->next) { + if (walk->type == PED_PARTITION_EXTENDED) + break; + } + return walk; +} + +/** + * Return the next partition after \p part on \p disk. If \p part is \c NULL, + * return the first partition. If \p part is the last partition, returns + * \c NULL. If \p part is an extended partition, returns the first logical + * partition. If this is called repeatedly passing the return value as \p part, + * a depth-first traversal is executed. + * + * \return The next partition, \c NULL if no more partitions left. + */ +PedPartition* +ped_disk_next_partition (const PedDisk* disk, const PedPartition* part) +{ + PED_ASSERT (disk != NULL); + + if (!part) + return disk->part_list; + if (part->type == PED_PARTITION_EXTENDED) + return part->part_list ? part->part_list : part->next; + if (part->next) + return part->next; + if (part->type & PED_PARTITION_LOGICAL) { + if (!ped_disk_extended_partition (disk)) + return NULL; + return ped_disk_extended_partition (disk)->next; + } + return NULL; +} + +/** @} */ + +#ifdef DEBUG +static int _GL_ATTRIBUTE_PURE +_disk_check_sanity (PedDisk* disk) +{ + PedPartition* walk; + + PED_ASSERT (disk != NULL); + + for (walk = disk->part_list; walk; walk = walk->next) { + PED_ASSERT (!(walk->type & PED_PARTITION_LOGICAL)); + PED_ASSERT (!walk->prev || walk->prev->next == walk); + } + + if (!ped_disk_extended_partition (disk)) + return 1; + + for (walk = ped_disk_extended_partition (disk)->part_list; walk; + walk = walk->next) { + PED_ASSERT (walk->type & PED_PARTITION_LOGICAL); + if (walk->prev) + PED_ASSERT (walk->prev->next == walk); + } + return 1; +} +#endif + +/** + * Returns the partition numbered \p num. + * + * \return \c NULL if the specified partition does not exist. + */ +PedPartition* +ped_disk_get_partition (const PedDisk* disk, int num) +{ + PedPartition* walk; + + PED_ASSERT (disk != NULL); + + for (walk = disk->part_list; walk; + walk = ped_disk_next_partition (disk, walk)) { + if (walk->num == num && !(walk->type & PED_PARTITION_FREESPACE)) + return walk; + } + + return NULL; +} + +/** + * Returns the partition that contains sect. If sect lies within a logical + * partition, then the logical partition is returned (not the extended + * partition). + */ +PedPartition* +ped_disk_get_partition_by_sector (const PedDisk* disk, PedSector sect) +{ + PedPartition* walk; + + PED_ASSERT (disk != NULL); + + for (walk = disk->part_list; walk; + walk = ped_disk_next_partition (disk, walk)) { + if (ped_geometry_test_sector_inside (&walk->geom, sect) + && walk->type != PED_PARTITION_EXTENDED) + return walk; + } + + /* should never get here, unless sect is outside of disk's useable + * part, or we're in "update mode", and the free space place-holders + * have been removed with _disk_remove_freespace() + */ + return NULL; +} + +/** + * Return the maximum representable length (in sectors) of a + * partition on disk \disk. + */ +PedSector +ped_disk_max_partition_length (const PedDisk* disk) +{ + return disk->type->ops->max_length (); +} + +/** + * Return the maximum representable start sector of a + * partition on disk \disk. + */ +PedSector +ped_disk_max_partition_start_sector (const PedDisk* disk) +{ + return disk->type->ops->max_start_sector (); +} + +/* I'm beginning to agree with Sedgewick :-/ */ +static int +_disk_raw_insert_before (PedDisk* disk, PedPartition* loc, PedPartition* part) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (loc != NULL); + PED_ASSERT (part != NULL); + + part->prev = loc->prev; + part->next = loc; + if (part->prev) { + part->prev->next = part; + } else { + if (loc->type & PED_PARTITION_LOGICAL) + ped_disk_extended_partition (disk)->part_list = part; + else + disk->part_list = part; + } + loc->prev = part; + + return 1; +} + +static int +_disk_raw_insert_after (PedDisk* disk, PedPartition* loc, PedPartition* part) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (loc != NULL); + PED_ASSERT (part != NULL); + + part->prev = loc; + part->next = loc->next; + if (loc->next) + loc->next->prev = part; + loc->next = part; + + return 1; +} + +static int +_disk_raw_remove (PedDisk* disk, PedPartition* part) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (part != NULL); + + if (part->prev) { + part->prev->next = part->next; + if (part->next) + part->next->prev = part->prev; + } else { + if (part->type & PED_PARTITION_LOGICAL) { + ped_disk_extended_partition (disk)->part_list + = part->next; + } else { + disk->part_list = part->next; + } + if (part->next) + part->next->prev = NULL; + } + + return 1; +} + +/* + *UPDATE MODE ONLY + */ +static int +_disk_raw_add (PedDisk* disk, PedPartition* part) +{ + PedPartition* walk; + PedPartition* last; + PedPartition* ext_part; + + PED_ASSERT (disk->update_mode); + + ext_part = ped_disk_extended_partition (disk); + + last = NULL; + walk = (part->type & PED_PARTITION_LOGICAL) ? + ext_part->part_list : disk->part_list; + + for (; walk; last = walk, walk = walk->next) { + if (walk->geom.start > part->geom.end) + break; + } + + if (walk) { + return _disk_raw_insert_before (disk, walk, part); + } else { + if (last) { + return _disk_raw_insert_after (disk, last, part); + } else { + if (part->type & PED_PARTITION_LOGICAL) + ext_part->part_list = part; + else + disk->part_list = part; + } + } + + return 1; +} + +static PedConstraint* +_partition_get_overlap_constraint (PedPartition* part, PedGeometry* geom) +{ + PedSector min_start; + PedSector max_end; + PedPartition* walk; + PedGeometry free_space; + + PED_ASSERT (part->disk->update_mode); + PED_ASSERT (part->geom.dev == geom->dev); + + if (part->type & PED_PARTITION_LOGICAL) { + PedPartition* ext_part; + + ext_part = ped_disk_extended_partition (part->disk); + PED_ASSERT (ext_part != NULL); + + min_start = ext_part->geom.start; + max_end = ext_part->geom.end; + walk = ext_part->part_list; + } else { + min_start = 0; + max_end = LLONG_MAX - 1; + walk = part->disk->part_list; + } + + while (walk != NULL + && (walk->geom.start < geom->start + || min_start >= walk->geom.start)) { + if (walk != part) + min_start = walk->geom.end + 1; + walk = walk->next; + } + + if (walk == part) + walk = walk->next; + + if (walk) + max_end = walk->geom.start - 1; + + if (min_start > max_end) + return NULL; + + ped_geometry_init (&free_space, part->disk->dev, + min_start, max_end - min_start + 1); + return ped_constraint_new_from_max (&free_space); +} + +static int +_partition_check_basic_sanity (PedDisk* disk, PedPartition* part) +{ + PedPartition* ext_part = ped_disk_extended_partition (disk); + + PED_ASSERT (part->disk == disk); + + PED_ASSERT (part->geom.start >= 0); + PED_ASSERT (part->geom.start <= part->geom.end); + + if (!ped_disk_type_check_feature (disk->type, PED_DISK_TYPE_EXTENDED) + && (part->type == PED_PARTITION_EXTENDED + || part->type == PED_PARTITION_LOGICAL)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s disk labels don't support logical or extended " + "partitions."), + disk->type->name); + return 0; + } + + if (ped_partition_is_active (part) + && ! (part->type & PED_PARTITION_LOGICAL)) { + if (ped_disk_get_primary_partition_count (disk) + 1 + > ped_disk_get_max_primary_partition_count (disk)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Too many primary partitions.")); + return 0; + } + } + + if ((part->type & PED_PARTITION_LOGICAL) && !ext_part) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Can't add a logical partition to %s, because " + "there is no extended partition."), + disk->dev->path); + return 0; + } + + return 1; +} + +static int +_check_extended_partition (PedDisk* disk, PedPartition* part) +{ + PedPartition* walk; + PedPartition* ext_part; + + PED_ASSERT (disk != NULL); + ext_part = ped_disk_extended_partition (disk); + if (!ext_part) ext_part = part; + PED_ASSERT (ext_part != NULL); + + if (part != ext_part) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Can't have more than one extended partition on %s."), + disk->dev->path); + return 0; + } + + for (walk = ext_part->part_list; walk; walk = walk->next) { + if (!ped_geometry_test_inside (&ext_part->geom, &walk->geom)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Can't have logical partitions outside of " + "the extended partition.")); + return 0; + } + } + return 1; +} + +static int +_check_partition (PedDisk* disk, PedPartition* part) +{ + PedPartition* ext_part = ped_disk_extended_partition (disk); + + PED_ASSERT (part->geom.start <= part->geom.end); + + if (part->type == PED_PARTITION_EXTENDED) { + if (!_check_extended_partition (disk, part)) + return 0; + } + + if (part->type & PED_PARTITION_LOGICAL + && !ped_geometry_test_inside (&ext_part->geom, &part->geom)) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Can't have a logical partition outside of the " + "extended partition on %s."), + disk->dev->path) != PED_EXCEPTION_IGNORE) + return 0; + } + + if (! (part->type & PED_PARTITION_LOGICAL) + && ext_part && ext_part != part + && ped_geometry_test_inside (&ext_part->geom, &part->geom)) { + if (ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_IGNORE_CANCEL, + _("Can't have a primary partition inside an extended " + "partition.")) != PED_EXCEPTION_IGNORE) + return 0; + } + + if (part->geom.end >= disk->dev->length) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Can't have a partition outside the disk!")) + != PED_EXCEPTION_IGNORE ) + return 0; + } + + if (!(part->type & PED_PARTITION_METADATA)) + if (!disk->type->ops->partition_check(part)) + return 0; + + return 1; +} + +/** + * Adds PedPartition \p part to PedDisk \p disk. + * + * \warning The partition's geometry may be changed, subject to \p constraint. + * You could set \p constraint to ped_constraint_exact(&part->geom), + * but many partition table schemes have special requirements on the start + * and end of partitions. Therefore, having an overly strict constraint + * will probably mean that this function will fail (in which + * case \p part will be left unmodified) + * \p part is assigned a number (\p part->num) in this process. + * + * \return \c 0 on failure. + */ +int +ped_disk_add_partition (PedDisk* disk, PedPartition* part, + const PedConstraint* constraint) +{ + PedConstraint* overlap_constraint = NULL; + PedConstraint* constraints = NULL; + + PED_ASSERT (disk != NULL); + PED_ASSERT (part != NULL); + + if (!_partition_check_basic_sanity (disk, part)) + return 0; + + if (!_disk_push_update_mode (disk)) + return 0; + + if (ped_partition_is_active (part)) { + overlap_constraint + = _partition_get_overlap_constraint (part, &part->geom); + constraints = ped_constraint_intersect (overlap_constraint, + constraint); + + if (!constraints && constraint) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Can't have overlapping partitions.")) != PED_EXCEPTION_IGNORE) + goto error; + } else constraint = constraints; + if (!_partition_enumerate (part)) + goto error; + if (!_partition_align (part, constraint)) + goto error; + } + /* FIXME: when _check_partition fails, we end up leaking PART + at least for DVH partition tables. Simply calling + ped_partition_destroy(part) here fixes it for DVH, but + causes trouble for other partition types. Similarly, + reordering these two checks, putting _check_partition after + _disk_raw_add induces an infinite loop. */ + if (!_check_partition (disk, part)) + goto error; + if (!_disk_raw_add (disk, part)) + goto error; + + ped_constraint_destroy (overlap_constraint); + ped_constraint_destroy (constraints); + if (!_disk_pop_update_mode (disk)) + return 0; +#ifdef DEBUG + if (!_disk_check_sanity (disk)) + return 0; +#endif + return 1; + +error: + ped_constraint_destroy (overlap_constraint); + ped_constraint_destroy (constraints); + _disk_pop_update_mode (disk); + return 0; +} + +/** + * Removes PedPartition \p part from PedDisk \p disk. + * + * If \p part is an extended partition, it must not contain any logical + * partitions. \p part is *NOT* destroyed. The caller must call + * ped_partition_destroy(), or use ped_disk_delete_partition() instead. + * + * \return \c 0 on error. + */ +int +ped_disk_remove_partition (PedDisk* disk, PedPartition* part) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (part != NULL); + + if (!_disk_push_update_mode (disk)) + return 0; + PED_ASSERT (part->part_list == NULL); + _disk_raw_remove (disk, part); + if (!_disk_pop_update_mode (disk)) + return 0; + ped_disk_enumerate_partitions (disk); + return 1; +} + +static int +ped_disk_delete_all_logical (PedDisk* disk); + +/** + * Removes \p part from \p disk, and destroys \p part. + * + * \return \c 0 on failure. + */ +int +ped_disk_delete_partition (PedDisk* disk, PedPartition* part) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (part != NULL); + + if (!_disk_push_update_mode (disk)) + return 0; + if (part->type == PED_PARTITION_EXTENDED) + ped_disk_delete_all_logical (disk); + ped_disk_remove_partition (disk, part); + ped_partition_destroy (part); + if (!_disk_pop_update_mode (disk)) + return 0; + + return 1; +} + +static int +ped_disk_delete_all_logical (PedDisk* disk) +{ + PedPartition* walk; + PedPartition* next; + PedPartition* ext_part; + + PED_ASSERT (disk != NULL); + ext_part = ped_disk_extended_partition (disk); + PED_ASSERT (ext_part != NULL); + + for (walk = ext_part->part_list; walk; walk = next) { + next = walk->next; + + if (!ped_disk_delete_partition (disk, walk)) + return 0; + } + return 1; +} + +/** + * Removes and destroys all partitions on \p disk. + * + * \return \c 0 on failure. + */ +int +ped_disk_delete_all (PedDisk* disk) +{ + PedPartition* walk; + PedPartition* next; + + PED_ASSERT (disk != NULL); + + if (!_disk_push_update_mode (disk)) + return 0; + + for (walk = disk->part_list; walk; walk = next) { + next = walk->next; + + if (!ped_disk_delete_partition (disk, walk)) { + _disk_pop_update_mode(disk); + return 0; + } + } + + if (!_disk_pop_update_mode (disk)) + return 0; + + return 1; +} + +/** + * Sets the geometry of \p part (i.e. change a partitions location). This can + * fail for many reasons, e.g. can't overlap with other partitions. If it + * does fail, \p part will remain unchanged. Returns \c 0 on failure. \p part's + * geometry may be set to something different from \p start and \p end subject + * to \p constraint. + * + * \warning The constraint warning from ped_disk_add_partition() applies. + * + * \note this function does not modify the contents of the partition. You need + * to call ped_file_system_resize() separately. + */ +int +ped_disk_set_partition_geom (PedDisk* disk, PedPartition* part, + const PedConstraint* constraint, + PedSector start, PedSector end) +{ + PedConstraint* overlap_constraint = NULL; + PedConstraint* constraints = NULL; + PedGeometry old_geom; + PedGeometry new_geom; + + PED_ASSERT (disk != NULL); + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk == disk); + + old_geom = part->geom; + if (!ped_geometry_init (&new_geom, part->geom.dev, start, end - start + 1)) + return 0; + + if (!_disk_push_update_mode (disk)) + return 0; + + overlap_constraint + = _partition_get_overlap_constraint (part, &new_geom); + constraints = ped_constraint_intersect (overlap_constraint, constraint); + if (!constraints && constraint) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Can't have overlapping partitions.")); + goto error_pop_update_mode; + } + + part->geom = new_geom; + if (!_partition_align (part, constraints)) + goto error_pop_update_mode; + if (!_check_partition (disk, part)) + goto error_pop_update_mode; + + /* remove and add, to ensure the ordering gets updated if necessary */ + _disk_raw_remove (disk, part); + _disk_raw_add (disk, part); + + if (!_disk_pop_update_mode (disk)) + goto error; + + ped_constraint_destroy (overlap_constraint); + ped_constraint_destroy (constraints); + return 1; + +error_pop_update_mode: + _disk_pop_update_mode (disk); +error: + ped_constraint_destroy (overlap_constraint); + ped_constraint_destroy (constraints); + part->geom = old_geom; + return 0; +} + +/** + * Grow PedPartition \p part geometry to the maximum possible subject to + * \p constraint. The new geometry will be a superset of the old geometry. + * + * \return 0 on failure + */ +int +ped_disk_maximize_partition (PedDisk* disk, PedPartition* part, + const PedConstraint* constraint) +{ + PedGeometry old_geom; + PedSector global_min_start; + PedSector global_max_end; + PedSector new_start; + PedSector new_end; + PedPartition* ext_part = ped_disk_extended_partition (disk); + PedConstraint* constraint_any; + + PED_ASSERT (disk != NULL); + PED_ASSERT (part != NULL); + + if (part->type & PED_PARTITION_LOGICAL) { + PED_ASSERT (ext_part != NULL); + global_min_start = ext_part->geom.start; + global_max_end = ext_part->geom.end; + } else { + global_min_start = 0; + global_max_end = disk->dev->length - 1; + } + + old_geom = part->geom; + + if (!_disk_push_update_mode (disk)) + return 0; + + if (part->prev) + new_start = part->prev->geom.end + 1; + else + new_start = global_min_start; + + if (part->next) + new_end = part->next->geom.start - 1; + else + new_end = global_max_end; + + if (!ped_disk_set_partition_geom (disk, part, constraint, new_start, + new_end)) + goto error; + + if (!_disk_pop_update_mode (disk)) + return 0; + return 1; + +error: + constraint_any = ped_constraint_any (disk->dev); + ped_disk_set_partition_geom (disk, part, constraint_any, + old_geom.start, old_geom.end); + ped_constraint_destroy (constraint_any); + _disk_pop_update_mode (disk); + return 0; +} + +/** + * Get the maximum geometry \p part can be grown to, subject to + * \p constraint. + * + * \return \c NULL on failure. + */ +PedGeometry* +ped_disk_get_max_partition_geometry (PedDisk* disk, PedPartition* part, + const PedConstraint* constraint) +{ + PedGeometry old_geom; + PedGeometry* max_geom; + PedConstraint* constraint_exact; + + PED_ASSERT(disk != NULL); + PED_ASSERT(part != NULL); + PED_ASSERT(ped_partition_is_active (part)); + + old_geom = part->geom; + if (!ped_disk_maximize_partition (disk, part, constraint)) + return NULL; + max_geom = ped_geometry_duplicate (&part->geom); + + constraint_exact = ped_constraint_exact (&old_geom); + ped_disk_set_partition_geom (disk, part, constraint_exact, + old_geom.start, old_geom.end); + ped_constraint_destroy (constraint_exact); + + /* this assertion should never fail, because the old + * geometry was valid + */ + PED_ASSERT (ped_geometry_test_equal (&part->geom, &old_geom)); + + return max_geom; +} + +/** + * Reduce the size of the extended partition to a minimum while still wrapping + * its logical partitions. If there are no logical partitions, remove the + * extended partition. + * + * \return 0 on failure. + */ +int +ped_disk_minimize_extended_partition (PedDisk* disk) +{ + PedPartition* first_logical; + PedPartition* last_logical; + PedPartition* walk; + PedPartition* ext_part; + PedConstraint* constraint; + int status; + + PED_ASSERT (disk != NULL); + + ext_part = ped_disk_extended_partition (disk); + if (!ext_part) + return 1; + + if (!_disk_push_update_mode (disk)) + return 0; + + first_logical = ext_part->part_list; + if (!first_logical) { + if (!_disk_pop_update_mode (disk)) + return 0; + return ped_disk_delete_partition (disk, ext_part); + } + + for (walk = first_logical; walk->next; walk = walk->next); + last_logical = walk; + + constraint = ped_constraint_any (disk->dev); + status = ped_disk_set_partition_geom (disk, ext_part, constraint, + first_logical->geom.start, + last_logical->geom.end); + ped_constraint_destroy (constraint); + + if (!_disk_pop_update_mode (disk)) + return 0; + return status; +} + +/** + * @} + */ + +/** + * \addtogroup PedPartition + * + * @{ + */ + +/** + * Returns a name that seems mildly appropriate for a partition type \p type. + * + * Eg, if you pass (PED_PARTITION_LOGICAL & PED_PARTITION_FREESPACE), it + * will return "free". This isn't to be taken too seriously - it's just + * useful for user interfaces, so you can show the user something ;-) + * + * \note The returned string will be in English. However, + * translations are provided, so the caller can call + * dgettext("parted", RESULT) on the result. + * + */ +const char* +ped_partition_type_get_name (PedPartitionType type) +{ + if (type & PED_PARTITION_METADATA) + return N_("metadata"); + else if (type & PED_PARTITION_FREESPACE) + return N_("free"); + else if (type & PED_PARTITION_EXTENDED) + return N_("extended"); + else if (type & PED_PARTITION_LOGICAL) + return N_("logical"); + else + return N_("primary"); +} + + +/** + * Returns a name for a \p flag, e.g. PED_PARTITION_BOOT will return "boot". + * + * \note The returned string will be in English. However, + * translations are provided, so the caller can call + * dgettext("parted", RESULT) on the result. + */ +const char* +ped_partition_flag_get_name (PedPartitionFlag flag) +{ + switch (flag) { + case PED_PARTITION_BOOT: + return N_("boot"); + case PED_PARTITION_BIOS_GRUB: + return N_("bios_grub"); + case PED_PARTITION_ROOT: + return N_("root"); + case PED_PARTITION_SWAP: + return N_("swap"); + case PED_PARTITION_HIDDEN: + return N_("hidden"); + case PED_PARTITION_RAID: + return N_("raid"); + case PED_PARTITION_LVM: + return N_("lvm"); + case PED_PARTITION_LBA: + return N_("lba"); + case PED_PARTITION_HPSERVICE: + return N_("hp-service"); + case PED_PARTITION_PALO: + return N_("palo"); + case PED_PARTITION_PREP: + return N_("prep"); + case PED_PARTITION_MSFT_RESERVED: + return N_("msftres"); + case PED_PARTITION_MSFT_DATA: + return N_("msftdata"); + case PED_PARTITION_APPLE_TV_RECOVERY: + return N_("atvrecv"); + case PED_PARTITION_DIAG: + return N_("diag"); + case PED_PARTITION_LEGACY_BOOT: + return N_("legacy_boot"); + case PED_PARTITION_IRST: + return N_("irst"); + case PED_PARTITION_ESP: + return N_("esp"); + case PED_PARTITION_CHROMEOS_KERNEL: + return N_("chromeos_kernel"); + case PED_PARTITION_BLS_BOOT: + return N_("bls_boot"); + case PED_PARTITION_LINUX_HOME: + return N_("linux-home"); + case PED_PARTITION_NO_AUTOMOUNT: + return N_("no_automount"); + + default: + ped_exception_throw ( + PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("Unknown partition flag, %d."), + flag); + return NULL; + } +} + +/** + * Iterates through all flags. + * + * ped_partition_flag_next(0) returns the first flag + * + * \return the next flag, or 0 if there are no more flags + */ +PedPartitionFlag +ped_partition_flag_next (PedPartitionFlag flag) +{ + return (flag + 1) % (PED_PARTITION_LAST_FLAG + 1); +} + +/** + * Returns the flag associated with \p name. + * + * \p name can be the English + * string, or the translation for the native language. + */ +PedPartitionFlag +ped_partition_flag_get_by_name (const char* name) +{ + PedPartitionFlag flag; + const char* flag_name; + + for (flag = ped_partition_flag_next (0); flag; + flag = ped_partition_flag_next (flag)) { + flag_name = ped_partition_flag_get_name (flag); + if (flag_name && (strcasecmp (name, flag_name) == 0 + || strcasecmp (name, _(flag_name)) == 0)) + return flag; + } + + return 0; +} + +static void +ped_partition_print (const PedPartition* part) +{ + PED_ASSERT (part != NULL); + + printf (" %-10s %02d (%d->%d)\n", + ped_partition_type_get_name (part->type), + part->num, + (int) part->geom.start, (int) part->geom.end); +} + +/** @} */ + +/** + * \addtogroup PedDisk + * + * @{ + */ + +/** + * Prints a summary of disk's partitions. Useful for debugging. + */ +void +ped_disk_print (const PedDisk* disk) +{ + PedPartition* part; + + PED_ASSERT (disk != NULL); + + for (part = disk->part_list; part; + part = ped_disk_next_partition (disk, part)) + ped_partition_print (part); +} + +/** @} */ diff --git a/jni/parted/libparted/exception.c b/jni/parted/libparted/exception.c new file mode 100755 index 0000000..1d95853 --- /dev/null +++ b/jni/parted/libparted/exception.c @@ -0,0 +1,313 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2000, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +/** \file exception.c */ + +/** + * \addtogroup PedException + * + * \brief Exception handling. + * + * There are a few types of exceptions: PED_EXCEPTION_INFORMATION, + * PED_EXCEPTION_WARNING, PED_EXCEPTION_ERROR, PED_EXCEPTION_FATAL, + * PED_EXCEPTION_BUG. + * + * They are "thrown" when one of the above events occur while executing + * a libparted function. For example, if ped_device_open() fails + * because the device doesn't exist, an exception will be thrown. + * Exceptions contain text describing what the event was. It will give + * at least one option for resolving the exception: PED_EXCEPTION_FIX, + * PED_EXCEPTION_YES, PED_EXCEPTION_NO, PED_EXCEPTION_OK, PED_EXCEPTION_RETRY, + * PED_EXCEPTION_IGNORE, PED_EXCEPTION_CANCEL. After an exception is thrown, + * there are two things that can happen: + * + * -# an exception handler is called, which selects how the exception should be + * resolved (usually by asking the user). Also note: an exception handler may + * choose to return PED_EXCEPTION_UNHANDLED. In this case, a default action + * will be taken by libparted (respectively the code that threw the + * exception). In general, a default action will be "safe". + * -# the exception is not handled, because the caller of the function wants to + * handle everything itself. In this case, PED_EXCEPTION_UNHANDLED is + * returned. + * + * @{ + */ + +#include + +#include +#include +#include + +#define N_(String) String +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include +#include +#include + +int ped_exception = 0; + +static PedExceptionOption default_handler (PedException* ex); + +static PedExceptionHandler* ex_handler = default_handler; +static PedException* ex = NULL; +static int ex_fetch_count = 0; + +static const char *const type_strings [] = { + N_("Information"), + N_("Warning"), + N_("Error"), + N_("Fatal"), + N_("Bug"), + N_("No Implementation") +}; + +static const char *const option_strings [] = { + N_("Fix"), + N_("Yes"), + N_("No"), + N_("OK"), + N_("Retry"), + N_("Ignore"), + N_("Cancel") +}; + +/** + * Return a string describing an exception type. + */ +char* +ped_exception_get_type_string (PedExceptionType ex_type) +{ + return (char *) type_strings [ex_type - 1]; +} + +/* FIXME: move this out to the prospective math.c */ +/* FIXME: this can probably be done more efficiently */ +static int _GL_ATTRIBUTE_PURE +ped_log2 (int n) +{ + int x; + + PED_ASSERT (n > 0); + + for (x=0; 1 << x <= n; x++); + + return x - 1; +} + +/** + * Return a string describing an exception option. + */ +char* +ped_exception_get_option_string (PedExceptionOption ex_opt) +{ + return (char *) option_strings [ped_log2 (ex_opt)]; +} + +static PedExceptionOption +default_handler (PedException* e) +{ + if (e->type == PED_EXCEPTION_BUG) + fprintf (stderr, + _("A bug has been detected in GNU Parted. " + "Refer to the web site of parted " + "http://www.gnu.org/software/parted/parted.html " + "for more information of what could be useful " + "for bug submitting! " + "Please email a bug report to " + "%s containing at least the " + "version (%s) and the following message: "), + PACKAGE_BUGREPORT, VERSION); + else + fprintf (stderr, "%s: ", + ped_exception_get_type_string (e->type)); + fprintf (stderr, "%s\n", e->message); + + switch (e->options) { + case PED_EXCEPTION_OK: + case PED_EXCEPTION_CANCEL: + case PED_EXCEPTION_IGNORE: + return e->options; + + default: + return PED_EXCEPTION_UNHANDLED; + } +} + +/** + * Set the exception handler. + * + * The exception handler should return ONE of the options set in ex->options, + * indicating the way the event should be resolved. + */ +void +ped_exception_set_handler (PedExceptionHandler* handler) +{ + if (handler) + ex_handler = handler; + else + ex_handler = default_handler; +} + +/** + * Get the current exception handler. + */ +PedExceptionHandler * +ped_exception_get_handler (void) +{ + if (ex_handler) + return ex_handler; + return default_handler; +} + +/** + * Assert that the current exception has been resolved. + */ +void +ped_exception_catch () +{ + if (ped_exception) { + ped_exception = 0; + free (ex->message); + free (ex); + ex = NULL; + } +} + +static PedExceptionOption +do_throw () +{ + PedExceptionOption ex_opt; + + ped_exception = 1; + + if (ex_fetch_count) { + return PED_EXCEPTION_UNHANDLED; + } else { + ex_opt = ex_handler (ex); + ped_exception_catch (); + return ex_opt; + } +} + +/** + * Throw an exception. + * + * You can also use this in a program using libparted. + * "message" is a printf-like format string, so you can do + * + * \code + * ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_RETRY_CANCEL, + * "Can't open %s", file_name); + * \endcode + * + * Returns the option selected to resolve the exception. If the exception was + * unhandled, PED_EXCEPTION_UNHANDLED is returned. + */ +PedExceptionOption +ped_exception_throw (PedExceptionType ex_type, + PedExceptionOption ex_opts, const char* message, ...) +{ + va_list arg_list; + int result; + static int size = 1000; + + if (ex) + ped_exception_catch (); + + ex = (PedException*) malloc (sizeof (PedException)); + if (!ex) + goto no_memory; + + ex->type = ex_type; + ex->options = ex_opts; + + while (message) { + ex->message = (char*) malloc (size * sizeof (char)); + if (!ex->message) + goto no_memory; + + va_start (arg_list, message); + result = vsnprintf (ex->message, size, message, arg_list); + va_end (arg_list); + + if (result > -1 && result < size) + break; + + size += 10; + free (ex->message); + } + + return do_throw (); + +no_memory: + fputs ("Out of memory in exception handler!\n", stderr); + + va_start (arg_list, message); + vfprintf (stderr, message, arg_list); + va_end (arg_list); + + return PED_EXCEPTION_UNHANDLED; +} + +/** + * Rethrow an unhandled exception. + * This means repeating the last ped_exception_throw() statement. + */ +PedExceptionOption +ped_exception_rethrow () +{ + return do_throw (); +} + +/** + * Indicates that exceptions should not go to the exception handler, but + * passed up to the calling function(s). All calls to + * ped_exception_throw() will return PED_EXCEPTION_UNHANDLED. + */ +void +ped_exception_fetch_all () +{ + ex_fetch_count++; +} + +/** + * Indicates that the calling function does not want to accept any + * responsibility for exceptions any more. + * + * \note a caller of that function may still want responsibility, so + * ped_exception_throw() may not invoke the exception handler. + * + * \warning every call to this function must have a preceding + * ped_exception_fetch_all(). + */ +void +ped_exception_leave_all () +{ + PED_ASSERT (ex_fetch_count > 0); + ex_fetch_count--; +} + +/** @} */ diff --git a/jni/parted/libparted/filesys.c b/jni/parted/libparted/filesys.c new file mode 100755 index 0000000..f67a4e8 --- /dev/null +++ b/jni/parted/libparted/filesys.c @@ -0,0 +1,295 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +/** \file filesys.c */ + +/** + * \addtogroup PedFileSystem + * + * \note File systems exist on a PedGeometry - NOT a PedPartition. + * + * @{ + */ + +#include + +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#define BUFFER_SIZE 4096 /* in sectors */ + +static PedFileSystemType* fs_types = NULL; +static PedFileSystemAlias* fs_aliases = NULL; + +void +ped_file_system_type_register (PedFileSystemType* fs_type) +{ + PED_ASSERT (fs_type != NULL); + PED_ASSERT (fs_type->ops != NULL); + PED_ASSERT (fs_type->name != NULL); + + fs_type->next = fs_types; + fs_types = fs_type; +} + +void +ped_file_system_type_unregister (PedFileSystemType* fs_type) +{ + PedFileSystemType* walk; + PedFileSystemType* last = NULL; + + PED_ASSERT (fs_types != NULL); + PED_ASSERT (fs_type != NULL); + + for (walk = fs_types; walk && walk != fs_type; + last = walk, walk = walk->next); + + PED_ASSERT (walk != NULL); + if (last) + ((struct _PedFileSystemType*) last)->next = fs_type->next; + else + fs_types = fs_type->next; +} + +void +ped_file_system_alias_register (PedFileSystemType* fs_type, const char* alias, + int deprecated) +{ + PedFileSystemAlias* fs_alias; + + PED_ASSERT (fs_type != NULL); + PED_ASSERT (alias != NULL); + + fs_alias = ped_malloc (sizeof *fs_alias); + if (!fs_alias) + return; + + fs_alias->next = fs_aliases; + fs_alias->fs_type = fs_type; + fs_alias->alias = alias; + fs_alias->deprecated = deprecated; + fs_aliases = fs_alias; +} + +void +ped_file_system_alias_unregister (PedFileSystemType* fs_type, + const char* alias) +{ + PedFileSystemAlias* walk; + PedFileSystemAlias* last = NULL; + + PED_ASSERT (fs_aliases != NULL); + PED_ASSERT (fs_type != NULL); + PED_ASSERT (alias != NULL); + + for (walk = fs_aliases; walk; last = walk, walk = walk->next) { + if (walk->fs_type == fs_type && !strcmp (walk->alias, alias)) + break; + } + + PED_ASSERT (walk != NULL); + if (last) + last->next = walk->next; + else + fs_aliases = walk->next; + free (walk); +} + +/** + * Get a PedFileSystemType by its @p name. + * + * @return @c NULL if none found. + */ +PedFileSystemType* +ped_file_system_type_get (const char* name) +{ + PedFileSystemType* walk; + PedFileSystemAlias* alias_walk; + + PED_ASSERT (name != NULL); + + for (walk = fs_types; walk != NULL; walk = walk->next) { + if (!strcasecmp (walk->name, name)) + break; + } + if (walk != NULL) + return walk; + + for (alias_walk = fs_aliases; alias_walk != NULL; + alias_walk = alias_walk->next) { + if (!strcasecmp (alias_walk->alias, name)) + break; + } + if (alias_walk != NULL) { + if (alias_walk->deprecated) + PED_DEBUG (0, "File system alias %s is deprecated", + name); + return alias_walk->fs_type; + } + + return NULL; +} + +/** + * Get the next PedFileSystemType after @p fs_type. + * + * @return @c NULL if @p fs_type is the last item in the list. + */ +PedFileSystemType* +ped_file_system_type_get_next (const PedFileSystemType* fs_type) +{ + if (fs_type) + return fs_type->next; + else + return fs_types; +} + +/** + * Get the next PedFileSystemAlias after @p fs_alias. + * + * @return @c NULL if @p fs_alias is the last item in the list. + */ +PedFileSystemAlias* +ped_file_system_alias_get_next (const PedFileSystemAlias* fs_alias) +{ + if (fs_alias) + return fs_alias->next; + else + return fs_aliases; +} + +/** + * Attempt to find a file system and return the region it occupies. + * + * @param fs_type The file system type to probe for. + * @param geom The region to be searched. + * + * @return @p NULL if @p fs_type file system wasn't detected + */ +PedGeometry* +ped_file_system_probe_specific ( + const PedFileSystemType* fs_type, PedGeometry* geom) +{ + PedGeometry* result; + + PED_ASSERT (fs_type != NULL); + PED_ASSERT (fs_type->ops->probe != NULL); + PED_ASSERT (geom != NULL); + + if (!ped_device_open (geom->dev)) + return 0; + result = fs_type->ops->probe (geom); + ped_device_close (geom->dev); + return result; +} + +static int +_geometry_error (const PedGeometry* a, const PedGeometry* b) +{ + PedSector start_delta = a->start - b->start; + PedSector end_delta = a->end - b->end; + + return llabs (start_delta) + llabs (end_delta); +} + +static PedFileSystemType* +_best_match (const PedGeometry* geom, PedFileSystemType* detected [], + const int detected_error [], int detected_count) +{ + int best_match = 0; + int i; + PedSector min_error; + + min_error = PED_MAX (4096, geom->length / 100); + + for (i = 1; i < detected_count; i++) { + if (detected_error [i] < detected_error [best_match]) + best_match = i; + } + + /* make sure the best match is significantly better than all the + * other matches + */ + for (i = 0; i < detected_count; i++) { + if (i == best_match) + continue; + + if (abs (detected_error [best_match] - detected_error [i]) + < min_error) + return NULL; + } + + return detected [best_match]; +} + + +/** + * Attempt to detect a file system in region \p geom. + * This function tries to be clever at dealing with ambiguous + * situations, such as when one file system was not completely erased before a + * new file system was created on top of it. + * + * \return a new PedFileSystem on success, \c NULL on failure + */ +PedFileSystemType* +ped_file_system_probe (PedGeometry* geom) +{ + PedFileSystemType* detected[32]; + int detected_error[32]; + int detected_count = 0; + PedFileSystemType* walk = NULL; + + PED_ASSERT (geom != NULL); + + if (!ped_device_open (geom->dev)) + return NULL; + + ped_exception_fetch_all (); + while ( (walk = ped_file_system_type_get_next (walk)) ) { + PedGeometry* probed; + + probed = ped_file_system_probe_specific (walk, geom); + if (probed) { + detected [detected_count] = walk; + detected_error [detected_count] + = _geometry_error (geom, probed); + detected_count++; + ped_geometry_destroy (probed); + } else { + ped_exception_catch (); + } + } + ped_exception_leave_all (); + + ped_device_close (geom->dev); + + if (!detected_count) + return NULL; + walk = _best_match (geom, detected, detected_error, detected_count); + if (walk) + return walk; + return NULL; +} diff --git a/jni/parted/libparted/fs/amiga/a-interface.c b/jni/parted/libparted/fs/amiga/a-interface.c new file mode 100755 index 0000000..0ae84dd --- /dev/null +++ b/jni/parted/libparted/fs/amiga/a-interface.c @@ -0,0 +1,88 @@ +/* + interface.c -- parted support amiga file systems + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + + +#include + +#include +#include +#include + +extern PedFileSystemType _affs0_type; +extern PedFileSystemType _affs1_type; +extern PedFileSystemType _affs2_type; +extern PedFileSystemType _affs3_type; +extern PedFileSystemType _affs4_type; +extern PedFileSystemType _affs5_type; +extern PedFileSystemType _affs6_type; +extern PedFileSystemType _affs7_type; +extern PedFileSystemType _amufs_type; +extern PedFileSystemType _amufs0_type; +extern PedFileSystemType _amufs1_type; +extern PedFileSystemType _amufs2_type; +extern PedFileSystemType _amufs3_type; +extern PedFileSystemType _amufs4_type; +extern PedFileSystemType _amufs5_type; +extern PedFileSystemType _asfs_type; +extern PedFileSystemType _apfs1_type; +extern PedFileSystemType _apfs2_type; + +void ped_file_system_amiga_init () +{ + ped_file_system_type_register (&_affs0_type); + ped_file_system_type_register (&_affs1_type); + ped_file_system_type_register (&_affs2_type); + ped_file_system_type_register (&_affs3_type); + ped_file_system_type_register (&_affs4_type); + ped_file_system_type_register (&_affs5_type); + ped_file_system_type_register (&_affs6_type); + ped_file_system_type_register (&_affs7_type); + ped_file_system_type_register (&_amufs_type); + ped_file_system_type_register (&_amufs0_type); + ped_file_system_type_register (&_amufs1_type); + ped_file_system_type_register (&_amufs2_type); + ped_file_system_type_register (&_amufs3_type); + ped_file_system_type_register (&_amufs4_type); + ped_file_system_type_register (&_amufs5_type); + ped_file_system_type_register (&_asfs_type); + ped_file_system_type_register (&_apfs1_type); + ped_file_system_type_register (&_apfs2_type); +} + +void ped_file_system_amiga_done () +{ + ped_file_system_type_unregister (&_affs0_type); + ped_file_system_type_unregister (&_affs1_type); + ped_file_system_type_unregister (&_affs2_type); + ped_file_system_type_unregister (&_affs3_type); + ped_file_system_type_unregister (&_affs4_type); + ped_file_system_type_unregister (&_affs5_type); + ped_file_system_type_unregister (&_affs6_type); + ped_file_system_type_unregister (&_affs7_type); + ped_file_system_type_unregister (&_amufs_type); + ped_file_system_type_unregister (&_amufs0_type); + ped_file_system_type_unregister (&_amufs1_type); + ped_file_system_type_unregister (&_amufs2_type); + ped_file_system_type_unregister (&_amufs3_type); + ped_file_system_type_unregister (&_amufs4_type); + ped_file_system_type_unregister (&_amufs5_type); + ped_file_system_type_unregister (&_asfs_type); + ped_file_system_type_unregister (&_apfs1_type); + ped_file_system_type_unregister (&_apfs2_type); +} diff --git a/jni/parted/libparted/fs/amiga/affs.c b/jni/parted/libparted/fs/amiga/affs.c new file mode 100755 index 0000000..750eab2 --- /dev/null +++ b/jni/parted/libparted/fs/amiga/affs.c @@ -0,0 +1,292 @@ +/* + affs.c -- parted support for affs file systems + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include + +#include "amiga.h" +#include "affs.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +static int +_affs_probe_root (uint32_t *block, int blocksize) { + int i; + uint32_t sum; + + if (PED_BE32_TO_CPU (block[0]) != 2) return 0; + if (PED_BE32_TO_CPU (block[128*blocksize-1]) != 1) return 0; + for (i = 0, sum = 0; i < 128*blocksize; i++) + sum += PED_BE32_TO_CPU (block[i]); + if (sum) return 0; + return 1; +} + +static PedGeometry* +_generic_affs_probe (PedGeometry* geom, uint32_t kind) +{ + uint32_t *block; + PedSector root, len, pos; + struct PartitionBlock * part; + int blocksize = 1, reserved = 2; + + PED_ASSERT (geom != NULL); + PED_ASSERT (geom->dev != NULL); + if (geom->dev->sector_size != 512) + return NULL; + /* Finds the blocksize and reserved values of the partition block */ + if (!(part = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Failed to allocate partition block\n"), __func__); + goto error_part; + } + if (amiga_find_part(geom, part) != NULL) { + reserved = PED_BE32_TO_CPU (part->de_Reserved); + reserved = reserved == 0 ? 1 : reserved; + blocksize = PED_BE32_TO_CPU (part->de_SizeBlock) + * PED_BE32_TO_CPU (part->de_SectorPerBlock) / 128; + } + free (part); + + /* Test boot block */ + if (!(block = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Failed to allocate block\n"), __func__); + goto error_block; + } + if (!ped_device_read (geom->dev, block, geom->start, blocksize)) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Couldn't read boot block %llu\n"), __func__, geom->start); + goto error; + } + if (PED_BE32_TO_CPU (block[0]) != kind) { + goto error; + } + + /* Find and test the root block */ + len = geom->length / blocksize - reserved; + pos = (len - 1) / 2; + root = geom->start + (pos + reserved) * blocksize; + + if (!ped_device_read (geom->dev, block, root, blocksize)) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Couldn't read root block %llu\n"), __func__, root); + goto error; + } + if (_affs_probe_root(block, blocksize) == 1) { + free (block); + return ped_geometry_duplicate (geom); + } + +error: + free (block); +error_block: +error_part: + return NULL; +} +static PedGeometry* +_affs0_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x444f5300); +} +static PedGeometry* +_affs1_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x444f5301); +} +static PedGeometry* +_affs2_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x444f5302); +} +static PedGeometry* +_affs3_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x444f5303); +} +static PedGeometry* +_affs4_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x444f5304); +} +static PedGeometry* +_affs5_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x444f5305); +} +static PedGeometry* +_affs6_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x444f5306); +} +static PedGeometry* +_affs7_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x444f5307); +} +static PedGeometry* +_amufs_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x6d754653); +} +static PedGeometry* +_amufs0_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x6d754600); +} +static PedGeometry* +_amufs1_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x6d754601); +} +static PedGeometry* +_amufs2_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x6d754602); +} +static PedGeometry* +_amufs3_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x6d754603); +} +static PedGeometry* +_amufs4_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x6d754604); +} +static PedGeometry* +_amufs5_probe (PedGeometry* geom) { + return _generic_affs_probe (geom, 0x6d754605); +} + +static PedFileSystemOps _affs0_ops = { + probe: _affs0_probe, +}; +static PedFileSystemOps _affs1_ops = { + probe: _affs1_probe, +}; +static PedFileSystemOps _affs2_ops = { + probe: _affs2_probe, +}; +static PedFileSystemOps _affs3_ops = { + probe: _affs3_probe, +}; +static PedFileSystemOps _affs4_ops = { + probe: _affs4_probe, +}; +static PedFileSystemOps _affs5_ops = { + probe: _affs5_probe, +}; +static PedFileSystemOps _affs6_ops = { + probe: _affs6_probe, +}; +static PedFileSystemOps _affs7_ops = { + probe: _affs7_probe, +}; +static PedFileSystemOps _amufs_ops = { + probe: _amufs_probe, +}; +static PedFileSystemOps _amufs0_ops = { + probe: _amufs0_probe, +}; +static PedFileSystemOps _amufs1_ops = { + probe: _amufs1_probe, +}; +static PedFileSystemOps _amufs2_ops = { + probe: _amufs2_probe, +}; +static PedFileSystemOps _amufs3_ops = { + probe: _amufs3_probe, +}; +static PedFileSystemOps _amufs4_ops = { + probe: _amufs4_probe, +}; +static PedFileSystemOps _amufs5_ops = { + probe: _amufs5_probe, +}; + +PedFileSystemType _affs0_type = { + next: NULL, + ops: &_affs0_ops, + name: "affs0", +}; +PedFileSystemType _affs1_type = { + next: NULL, + ops: &_affs1_ops, + name: "affs1", +}; +PedFileSystemType _affs2_type = { + next: NULL, + ops: &_affs2_ops, + name: "affs2", +}; +PedFileSystemType _affs3_type = { + next: NULL, + ops: &_affs3_ops, + name: "affs3", +}; +PedFileSystemType _affs4_type = { + next: NULL, + ops: &_affs4_ops, + name: "affs4", +}; +PedFileSystemType _affs5_type = { + next: NULL, + ops: &_affs5_ops, + name: "affs5", +}; +PedFileSystemType _affs6_type = { + next: NULL, + ops: &_affs6_ops, + name: "affs6", +}; +PedFileSystemType _affs7_type = { + next: NULL, + ops: &_affs7_ops, + name: "affs7", +}; +PedFileSystemType _amufs_type = { + next: NULL, + ops: &_amufs_ops, + name: "amufs", +}; +PedFileSystemType _amufs0_type = { + next: NULL, + ops: &_amufs0_ops, + name: "amufs0", +}; +PedFileSystemType _amufs1_type = { + next: NULL, + ops: &_amufs1_ops, + name: "amufs1", +}; +PedFileSystemType _amufs2_type = { + next: NULL, + ops: &_amufs2_ops, + name: "amufs2", +}; +PedFileSystemType _amufs3_type = { + next: NULL, + ops: &_amufs3_ops, + name: "amufs3", +}; +PedFileSystemType _amufs4_type = { + next: NULL, + ops: &_amufs4_ops, + name: "amufs4", +}; +PedFileSystemType _amufs5_type = { + next: NULL, + ops: &_amufs5_ops, + name: "amufs5", +}; diff --git a/jni/parted/libparted/fs/amiga/affs.h b/jni/parted/libparted/fs/amiga/affs.h new file mode 100755 index 0000000..d1650f2 --- /dev/null +++ b/jni/parted/libparted/fs/amiga/affs.h @@ -0,0 +1,19 @@ + +/* + affs.h -- parted suppoer for affs filesystems header files + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ diff --git a/jni/parted/libparted/fs/amiga/amiga.c b/jni/parted/libparted/fs/amiga/amiga.c new file mode 100755 index 0000000..1a909fc --- /dev/null +++ b/jni/parted/libparted/fs/amiga/amiga.c @@ -0,0 +1,351 @@ +/* + libparted/fs_amiga - amiga file system support. + Copyright (C) 2000-2001, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . + + Contributor: Sven Luther +*/ + +#include +#include +#include +#include + +#include "amiga.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#define IDNAME_RIGIDDISK (uint32_t)0x5244534B /* 'RDSK' */ +#define IDNAME_BADBLOCK (uint32_t)0x42414442 /* 'BADB' */ +#define IDNAME_PARTITION (uint32_t)0x50415254 /* 'PART' */ +#define IDNAME_FILESYSHEADER (uint32_t)0x46534844 /* 'FSHD' */ +#define IDNAME_LOADSEG (uint32_t)0x4C534547 /* 'LSEG' */ +#define IDNAME_BOOT (uint32_t)0x424f4f54 /* 'BOOT' */ +#define IDNAME_FREE (uint32_t)0xffffffff + +static const char * +_amiga_block_id (uint32_t id) { + switch (id) { + case IDNAME_RIGIDDISK : + return "RDSK"; + case IDNAME_BADBLOCK : + return "BADB"; + case IDNAME_PARTITION : + return "PART"; + case IDNAME_FILESYSHEADER : + return "FSHD"; + case IDNAME_LOADSEG : + return "LSEG"; + case IDNAME_BOOT : + return "BOOT"; + case IDNAME_FREE : + return ""; + default : + return ""; + } +} + +struct AmigaIds * +_amiga_add_id (uint32_t id, struct AmigaIds *ids) { + struct AmigaIds *newid; + + if ((newid=ped_malloc(sizeof (struct AmigaIds)))==NULL) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Failed to allocate id list element\n"), __func__); + return 0; + } + newid->ID = id; + newid->next = ids; + return newid; +} + +void +_amiga_free_ids (struct AmigaIds *ids) { + struct AmigaIds *current, *next; + + for (current = ids; current != NULL; current = next) { + next = current->next; + free (current); + } +} +int +_amiga_id_in_list (uint32_t id, struct AmigaIds *ids) { + struct AmigaIds *current; + + for (current = ids; current != NULL; current = current->next) { + if (id == current->ID) + return 1; + } + return 0; +} + +#define AMIGA_RDB_NOT_FOUND ((uint32_t)0xffffffff) + +struct AmigaBlock { + uint32_t amiga_ID; /* Identifier 32 bit word */ + uint32_t amiga_SummedLongss; /* Size of the structure for checksums */ + int32_t amiga_ChkSum; /* Checksum of the structure */ +}; +#define AMIGA(pos) ((struct AmigaBlock *)(pos)) + +struct RigidDiskBlock { + uint32_t rdb_ID; /* Identifier 32 bit word : 'RDSK' */ + uint32_t rdb_SummedLongs; /* Size of the structure for checksums */ + int32_t rdb_ChkSum; /* Checksum of the structure */ + uint32_t rdb_HostID; /* SCSI Target ID of host, not really used */ + uint32_t rdb_BlockBytes; /* Size of disk blocks */ + uint32_t rdb_Flags; /* RDB Flags */ + /* block list heads */ + uint32_t rdb_BadBlockList; /* Bad block list */ + uint32_t rdb_PartitionList; /* Partition list */ + uint32_t rdb_FileSysHeaderList; /* File system header list */ + uint32_t rdb_DriveInit; /* Drive specific init code */ + uint32_t rdb_BootBlockList; /* Amiga OS 4 Boot Blocks */ + uint32_t rdb_Reserved1[5]; /* Unused word, need to be set to $ffffffff */ + /* physical drive characteristics */ + uint32_t rdb_Cylinders; /* Number of the cylinders of the drive */ + uint32_t rdb_Sectors; /* Number of sectors of the drive */ + uint32_t rdb_Heads; /* Number of heads of the drive */ + uint32_t rdb_Interleave; /* Interleave */ + uint32_t rdb_Park; /* Head parking cylinder */ + uint32_t rdb_Reserved2[3]; /* Unused word, need to be set to $ffffffff */ + uint32_t rdb_WritePreComp; /* Starting cylinder of write precompensation */ + uint32_t rdb_ReducedWrite; /* Starting cylinder of reduced write current */ + uint32_t rdb_StepRate; /* Step rate of the drive */ + uint32_t rdb_Reserved3[5]; /* Unused word, need to be set to $ffffffff */ + /* logical drive characteristics */ + uint32_t rdb_RDBBlocksLo; /* low block of range reserved for hardblocks */ + uint32_t rdb_RDBBlocksHi; /* high block of range for these hardblocks */ + uint32_t rdb_LoCylinder; /* low cylinder of partitionable disk area */ + uint32_t rdb_HiCylinder; /* high cylinder of partitionable data area */ + uint32_t rdb_CylBlocks; /* number of blocks available per cylinder */ + uint32_t rdb_AutoParkSeconds; /* zero for no auto park */ + uint32_t rdb_HighRDSKBlock; /* highest block used by RDSK */ + /* (not including replacement bad blocks) */ + uint32_t rdb_Reserved4; + /* drive identification */ + char rdb_DiskVendor[8]; + char rdb_DiskProduct[16]; + char rdb_DiskRevision[4]; + char rdb_ControllerVendor[8]; + char rdb_ControllerProduct[16]; + char rdb_ControllerRevision[4]; + uint32_t rdb_Reserved5[10]; +}; + +#define AMIGA_MAX_PARTITIONS 128 +#define RDB_LOCATION_LIMIT 16 +#define RDSK(pos) ((struct RigidDiskBlock *)(pos)) + +static int +_amiga_checksum (struct AmigaBlock *blk) { + uint32_t *rdb = (uint32_t *) blk; + uint32_t sum; + int i, end; + + sum = PED_BE32_TO_CPU (rdb[0]); + end = PED_BE32_TO_CPU (rdb[1]); + + if (end > PED_SECTOR_SIZE_DEFAULT) end = PED_SECTOR_SIZE_DEFAULT; + + for (i = 1; i < end; i++) sum += PED_BE32_TO_CPU (rdb[i]); + + return sum; +} + +static void +_amiga_calculate_checksum (struct AmigaBlock *blk) { + + blk->amiga_ChkSum = PED_CPU_TO_BE32( + PED_BE32_TO_CPU(blk->amiga_ChkSum) - + _amiga_checksum((struct AmigaBlock *) blk)); + return; +} + + +static struct AmigaBlock * +_amiga_read_block (PedDevice *dev, struct AmigaBlock *blk, PedSector block, struct AmigaIds *ids) { + if (!ped_device_read (dev, blk, block, 1)) { + switch (ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s : Couldn't read block %llu\n"), __func__, block)) + { + case PED_EXCEPTION_CANCEL : + case PED_EXCEPTION_UNHANDLED : + default : + return NULL; + } + } + if (ids && !_amiga_id_in_list(PED_BE32_TO_CPU(blk->amiga_ID), ids)) + return NULL; + if (_amiga_checksum (blk) != 0) { + switch (ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE | PED_EXCEPTION_CANCEL, + _("%s : Bad checksum on block %llu of type %s\n"), + __func__, block, _amiga_block_id(PED_BE32_TO_CPU(blk->amiga_ID)))) + { + case PED_EXCEPTION_CANCEL : + return NULL; + case PED_EXCEPTION_FIX : + _amiga_calculate_checksum(AMIGA(blk)); + if (!ped_device_write (dev, blk, block, 1)) { + switch (ped_exception_throw(PED_EXCEPTION_FATAL, + PED_EXCEPTION_CANCEL, + _("%s : Couldn't write block %d\n"), __func__, block)) + { + case PED_EXCEPTION_CANCEL : + case PED_EXCEPTION_UNHANDLED : + default : + return NULL; + } + } + /* FALLTHROUGH */ + case PED_EXCEPTION_IGNORE : + case PED_EXCEPTION_UNHANDLED : + default : + return blk; + } + } + return blk; +} + +static uint32_t +_amiga_find_rdb (PedDevice *dev, struct RigidDiskBlock *rdb) { + int i; + struct AmigaIds *ids; + + ids = _amiga_add_id (IDNAME_RIGIDDISK, NULL); + + for (i = 0; irdb_ID) == IDNAME_RIGIDDISK) { + _amiga_free_ids (ids); + return i; + } + } + _amiga_free_ids (ids); + return AMIGA_RDB_NOT_FOUND; +} + +static int +_amiga_loop_check (uint32_t block, uint32_t * blocklist, uint32_t max) +{ + uint32_t i; + + for (i = 0; i < max; i++) + if (block == blocklist[i]) { + /* We are looping, let's stop. */ + return 1; + } + blocklist[max] = block; + return 0; +} + +/* We have already allocated a rdb, we are now reading it from the disk */ +struct PartitionBlock * +amiga_find_part (PedGeometry *geom, struct PartitionBlock *part) +{ + struct RigidDiskBlock *rdb; + uint32_t partblock; + uint32_t partlist[AMIGA_MAX_PARTITIONS]; + int i; + + PED_ASSERT(geom!= NULL); + PED_ASSERT(geom->dev!= NULL); + + if (!(rdb = ped_malloc (PED_SECTOR_SIZE_DEFAULT))) { + switch (ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s : Failed to allocate disk_specific rdb block\n"), __func__)) + { + case PED_EXCEPTION_CANCEL : + case PED_EXCEPTION_UNHANDLED : + default : + return NULL; + } + } + if (_amiga_find_rdb (geom->dev, rdb) == AMIGA_RDB_NOT_FOUND) { + switch (ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s : Didn't find rdb block, should never happen\n"), __func__)) + { + case PED_EXCEPTION_CANCEL : + case PED_EXCEPTION_UNHANDLED : + default : + free(rdb); + return NULL; + } + } + + /* We initialize the hardblock free list to detect loops */ + for (i = 0; i < AMIGA_MAX_PARTITIONS; i++) partlist[i] = IDNAME_FREE; + + for (i = 1, partblock = PED_BE32_TO_CPU(rdb->rdb_PartitionList); + i < AMIGA_MAX_PARTITIONS && partblock != IDNAME_FREE; + i++, partblock = PED_BE32_TO_CPU(part->pb_Next)) + { + PedSector start, end; + PedSector cylblocks; + + /* Let's look for loops in the partition table */ + if (_amiga_loop_check(partblock, partlist, i)) { + free (rdb); + return NULL; + } + /* Let's read a partition block to get its geometry*/ + if (!ped_device_read (geom->dev, part, (PedSector)partblock, 1)) { + switch (ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s : Failed to read partition block %llu\n"), + __func__, (PedSector)partblock)) + { + case PED_EXCEPTION_CANCEL : + case PED_EXCEPTION_UNHANDLED : + default : + free(rdb); + return NULL; + } + } + + /* Current block is not a Partition Block */ + if (part->pb_ID != IDNAME_PARTITION) { + free (rdb); + return NULL; + } + + /* Calculate the geometry of the partition */ + cylblocks = ((PedSector) PED_BE32_TO_CPU (part->de_Surfaces)) * + ((PedSector) PED_BE32_TO_CPU (part->de_BlocksPerTrack)); + start = ((PedSector) PED_BE32_TO_CPU (part->de_LowCyl)) * cylblocks; + end = ((((PedSector) PED_BE32_TO_CPU (part->de_HighCyl))+1) * (cylblocks))-1; + + /* And check if it is the one we are searching for */ + if (start == geom->start && end == geom->end) { + free (rdb); + return part; + } + } + + free (rdb); + return NULL; +} diff --git a/jni/parted/libparted/fs/amiga/amiga.h b/jni/parted/libparted/fs/amiga/amiga.h new file mode 100755 index 0000000..30f5b82 --- /dev/null +++ b/jni/parted/libparted/fs/amiga/amiga.h @@ -0,0 +1,70 @@ +/* + util.h -- amiga partition table headers. + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +struct PartitionBlock { + uint32_t pb_ID; /* Identifier 32 bit word : 'PART' */ + uint32_t pb_SummedLongs; /* Size of the structure for checksums */ + int32_t pb_ChkSum; /* Checksum of the structure */ + uint32_t pb_HostID; /* SCSI Target ID of host, not really used */ + uint32_t pb_Next; /* Block number of the next PartitionBlock */ + uint32_t pb_Flags; /* Part Flags (NOMOUNT and BOOTABLE) */ + uint32_t pb_Reserved1[2]; + uint32_t pb_DevFlags; /* Preferred flags for OpenDevice */ + uint8_t pb_DriveName[32]; /* Preferred DOS device name: BSTR form */ + uint32_t pb_Reserved2[15]; + uint32_t de_TableSize; /* Size of Environment vector */ + uint32_t de_SizeBlock; /* Size of the blocks in 32 bit words, usually 128 */ + uint32_t de_SecOrg; /* Not used; must be 0 */ + uint32_t de_Surfaces; /* Number of heads (surfaces) */ + uint32_t de_SectorPerBlock; /* Disk sectors per block, used with SizeBlock, usually 1 */ + uint32_t de_BlocksPerTrack; /* Blocks per track. drive specific */ + uint32_t de_Reserved; /* DOS reserved blocks at start of partition. */ + uint32_t de_PreAlloc; /* DOS reserved blocks at end of partition */ + uint32_t de_Interleave; /* Not used, usually 0 */ + uint32_t de_LowCyl; /* First cylinder of the partition */ + uint32_t de_HighCyl; /* Last cylinder of the partition */ + uint32_t de_NumBuffers; /* Initial # DOS of buffers. */ + uint32_t de_BufMemType; /* Type of mem to allocate for buffers */ + uint32_t de_MaxTransfer; /* Max number of bytes to transfer at a time */ + uint32_t de_Mask; /* Address Mask to block out certain memory */ + int32_t de_BootPri; /* Boot priority for autoboot */ + uint32_t de_DosType; /* Dostype of the file system */ + uint32_t de_Baud; /* Baud rate for serial handler */ + uint32_t de_Control; /* Control word for handler/filesystem */ + uint32_t de_BootBlocks; /* Number of blocks containing boot code */ + uint32_t pb_EReserved[12]; +}; + +#define PART(pos) ((struct PartitionBlock *)(pos)) + +#define PBFB_BOOTABLE 0 /* this partition is intended to be bootable */ +#define PBFF_BOOTABLE 1L /* (expected directories and files exist) */ +#define PBFB_NOMOUNT 1 /* do not mount this partition (e.g. manually */ +#define PBFF_NOMOUNT 2L /* mounted, but space reserved here) */ + +struct PartitionBlock * amiga_find_part (PedGeometry *geom, struct PartitionBlock *part); + +struct AmigaIds { + uint32_t ID; + struct AmigaIds *next; +}; + +struct AmigaIds * _amiga_add_id (uint32_t id, struct AmigaIds *ids); +void _amiga_free_ids (struct AmigaIds *ids); +int _amiga_id_in_list (uint32_t id, struct AmigaIds *ids) _GL_ATTRIBUTE_PURE; diff --git a/jni/parted/libparted/fs/amiga/apfs.c b/jni/parted/libparted/fs/amiga/apfs.c new file mode 100755 index 0000000..aeaa1f3 --- /dev/null +++ b/jni/parted/libparted/fs/amiga/apfs.c @@ -0,0 +1,128 @@ +/* + apfs.c -- parted support for apfs file systems + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include + +#include "amiga.h" +#include "apfs.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +static int +_apfs_probe_root (uint32_t *block, uint32_t blocksize, uint32_t kind) { + if (PED_BE32_TO_CPU (block[0]) != kind) return 0; + return 1; +} + +static PedGeometry* +_generic_apfs_probe (PedGeometry* geom, uint32_t kind) +{ + uint32_t *block; + PedSector root; + struct PartitionBlock * part; + uint32_t blocksize = 1, reserved = 2; + + PED_ASSERT (geom != NULL); + PED_ASSERT (geom->dev != NULL); + if (geom->dev->sector_size != 512) + return NULL; + + /* Finds the blocksize and reserved values of the partition block */ + if (!(part = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Failed to allocate partition block\n"), __func__); + goto error_part; + } + if (amiga_find_part(geom, part) != NULL) { + reserved = PED_BE32_TO_CPU (part->de_Reserved); + blocksize = PED_BE32_TO_CPU (part->de_SizeBlock) + * PED_BE32_TO_CPU (part->de_SectorPerBlock) / 128; + } + free (part); + + /* Test boot block */ + if (!(block = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Failed to allocate block\n"), __func__); + goto error_block; + } + if (!ped_device_read (geom->dev, block, geom->start, blocksize)) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Couldn't read boot block %llu\n"), __func__, geom->start); + goto error; + } + if (PED_BE32_TO_CPU (block[0]) != kind) { + goto error; + } + + /* Find and test the root block */ + root = geom->start+reserved*blocksize; + if (!ped_device_read (geom->dev, block, root, blocksize)) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Couldn't read root block %llu\n"), __func__, root); + goto error; + } + if (_apfs_probe_root(block, blocksize, kind) == 1) { + free(block); + return ped_geometry_duplicate (geom); + } + +error: + free (block); +error_block: +error_part: + return NULL; +} + +static PedGeometry* +_apfs1_probe (PedGeometry* geom) { + return _generic_apfs_probe (geom, 0x50463101); +} + +static PedGeometry* +_apfs2_probe (PedGeometry* geom) { + return _generic_apfs_probe (geom, 0x50463102); +} + +static PedFileSystemOps _apfs1_ops = { + probe: _apfs1_probe, +}; +static PedFileSystemOps _apfs2_ops = { + probe: _apfs2_probe, +}; + +PedFileSystemType _apfs1_type = { + next: NULL, + ops: &_apfs1_ops, + name: "apfs1", +}; +PedFileSystemType _apfs2_type = { + next: NULL, + ops: &_apfs2_ops, + name: "apfs2", +}; diff --git a/jni/parted/libparted/fs/amiga/apfs.h b/jni/parted/libparted/fs/amiga/apfs.h new file mode 100755 index 0000000..972941b --- /dev/null +++ b/jni/parted/libparted/fs/amiga/apfs.h @@ -0,0 +1,18 @@ +/* + apfs.h -- parted support for apfs file systems header files + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ diff --git a/jni/parted/libparted/fs/amiga/asfs.c b/jni/parted/libparted/fs/amiga/asfs.c new file mode 100755 index 0000000..c4c65e5 --- /dev/null +++ b/jni/parted/libparted/fs/amiga/asfs.c @@ -0,0 +1,130 @@ +/* + asfs.c -- parted asfs filesystem support + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include + +#include "amiga.h" +#include "asfs.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +static int +_asfs_probe_root (PedGeometry *geom, uint32_t *block, int blocksize, PedSector root) { + int i, sum; + PedSector start, end; + + if (PED_BE32_TO_CPU (block[0]) != 0x53465300) return 0; + for (i = 0, sum = 1; i < 128*blocksize; i++) sum += PED_BE32_TO_CPU (block[i]); + if (sum != 0) return 0; + if (PED_BE32_TO_CPU (block[2]) * blocksize + geom->start != root) { + return 0; + } + start = ((((PedSector) PED_BE32_TO_CPU (block[8])) << 32) + + (PedSector) PED_BE32_TO_CPU (block[9])) / 512; + end = (((((PedSector) PED_BE32_TO_CPU (block[10])) << 32) + + (PedSector) PED_BE32_TO_CPU (block[11])) / 512) - 1; + if (start != geom->start || end != geom->end) return 0; + return 1; +} + +static PedGeometry* +_asfs_probe (PedGeometry* geom) +{ + uint32_t *block; + struct PartitionBlock * part; + int blocksize = 1; + PedSector root; + int found = 0; + + PED_ASSERT (geom != NULL); + PED_ASSERT (geom->dev != NULL); + if (geom->dev->sector_size != 512) + return NULL; + + /* Finds the blocksize of the partition block */ + if (!(part = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Failed to allocate partition block\n"), __func__); + goto error_part; + } + if (amiga_find_part(geom, part) != NULL) { + blocksize = PED_BE32_TO_CPU (part->de_SizeBlock) + * PED_BE32_TO_CPU (part->de_SectorPerBlock) / 128; + } + free (part); + + /* Test boot block */ + if (!(block = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Failed to allocate block\n"), __func__); + goto error_block; + } + root = geom->start; + if (!ped_device_read (geom->dev, block, root, blocksize)) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Couldn't read root block %llu\n"), __func__, root); + goto error; + } + if (PED_BE32_TO_CPU (block[0]) != 0x53465300) { + goto error; + } + + /* Find and test the root blocks */ + if (_asfs_probe_root(geom, block, blocksize, root)) { + found++; + } + root = geom->end - blocksize - (geom->length % blocksize) + 1; + if (!ped_device_read (geom->dev, block, root, 1)) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Couldn't read root block %llu\n"), __func__, root); + goto error; + } + if (_asfs_probe_root(geom, block, blocksize, root)) { + found++; + } + if (found != 0) { + free (block); + return ped_geometry_duplicate (geom); + } + +error: + free (block); +error_block: +error_part: + return NULL; +} + +static PedFileSystemOps _asfs_ops = { + probe: _asfs_probe, +}; + +PedFileSystemType _asfs_type = { + next: NULL, + ops: &_asfs_ops, + name: "asfs", +}; diff --git a/jni/parted/libparted/fs/amiga/asfs.h b/jni/parted/libparted/fs/amiga/asfs.h new file mode 100755 index 0000000..2b70a94 --- /dev/null +++ b/jni/parted/libparted/fs/amiga/asfs.h @@ -0,0 +1,18 @@ +/* + asfs.h -- parted asfs filesystem support header files + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ diff --git a/jni/parted/libparted/fs/btrfs/btrfs.c b/jni/parted/libparted/fs/btrfs/btrfs.c new file mode 100755 index 0000000..6eded8b --- /dev/null +++ b/jni/parted/libparted/fs/btrfs/btrfs.c @@ -0,0 +1,77 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2013-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include + +/* Located 64k inside the partition (start of the first btrfs superblock) */ +#define BTRFS_MAGIC 0x4D5F53665248425FULL /* ascii _BHRfS_M, no null */ +#define BTRFS_CSUM_SIZE 32 +#define BTRFS_FSID_SIZE 16 + + +static PedGeometry* +btrfs_probe (PedGeometry* geom) +{ + union { + struct { + /* Just enough of the btrfs_super_block to get the magic */ + uint8_t csum[BTRFS_CSUM_SIZE]; + uint8_t fsid[BTRFS_FSID_SIZE]; + uint64_t bytenr; + uint64_t flags; + uint64_t magic; + } sb; + int8_t sector[8192]; + } buf; + PedSector offset = (64*1024)/geom->dev->sector_size; + + if (geom->length < offset+1) + return 0; + if (!ped_geometry_read (geom, &buf, offset, 1)) + return 0; + + if (PED_LE64_TO_CPU(buf.sb.magic) == BTRFS_MAGIC) { + return ped_geometry_new (geom->dev, geom->start, geom->length); + } + return NULL; +} + +static PedFileSystemOps btrfs_ops = { + probe: btrfs_probe, +}; + +static PedFileSystemType btrfs_type = { + next: NULL, + ops: &btrfs_ops, + name: "btrfs", +}; + +void +ped_file_system_btrfs_init () +{ + ped_file_system_type_register (&btrfs_type); +} + +void +ped_file_system_btrfs_done () +{ + ped_file_system_type_unregister (&btrfs_type); +} diff --git a/jni/parted/libparted/fs/ext2/ext2.h b/jni/parted/libparted/fs/ext2/ext2.h new file mode 100755 index 0000000..d23f63e --- /dev/null +++ b/jni/parted/libparted/fs/ext2/ext2.h @@ -0,0 +1,79 @@ +/* + ext2.h -- ext2 header + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef _EXT2_H +#define _EXT2_H + +#include +#include +#include + +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +typedef u_int32_t blk_t; + +#ifdef HAVE_LINUX_EXT2_FS_H__FAILS_TO_COMPILE +#include +#else +#include "ext2_fs.h" +#endif + +struct ext2_fs +{ + struct ext2_dev_handle *devhandle; + + struct ext2_super_block sb; + struct ext2_group_desc *gd; + struct ext2_buffer_cache *bc; + int metadirty; /* 0:all sb&gd copies clean + 1:all sb&gd copies dirty + 2:only first sb&gd copy clean */ + + int dynamic_version; + int sparse; /* sparse superblocks */ + int has_journal; /* journal */ + int has_internal_journal; + + int blocksize; + int logsize; + blk_t adminblocks; + blk_t gdblocks; + blk_t itoffset; + blk_t inodeblocks; + int numgroups; + int r_frac; /* reserved % of blocks */ + + unsigned char *relocator_pool; + unsigned char *relocator_pool_end; + + int opt_debug; + int opt_safe; + int opt_verbose; + + void *journal; +}; + +#endif diff --git a/jni/parted/libparted/fs/ext2/ext2_fs.h b/jni/parted/libparted/fs/ext2/ext2_fs.h new file mode 100755 index 0000000..1eca7ab --- /dev/null +++ b/jni/parted/libparted/fs/ext2/ext2_fs.h @@ -0,0 +1,329 @@ +/* + * linux/include/linux/ext2_fs.h + * + * Copyright (C) 1992, 1993, 1994, 1995 + * Remy Card (card@masi.ibp.fr) + * Laboratoire MASI - Institut Blaise Pascal + * Universite Pierre et Marie Curie (Paris VI) + * + * from + * + * linux/include/linux/minix_fs.h + * + * Copyright (C) 1991, 1992 Linus Torvalds + */ + +/* + * EXT2_*_*() convienience macros added by Andrew Clausen + * Copyright (C) 2000, 2009-2014, 2019-2023 Free Software Foundation, Inc. + */ + +#ifndef _EXT2_FS_H +#define _EXT2_FS_H + +#include +#include + +/* + * The second extended file system constants/structures + */ + +#define EXT2_SUPER_MAGIC_CONST 0xEF53 +#define EXT2_MIN_BLOCK_SIZE 1024 +#define EXT2_NDIR_BLOCKS 12 +#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS +#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1) +#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1) +#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1) +#define EXT2_VALID_FS 0x0001 +#define EXT2_ERROR_FS 0x0002 +#define EXT2_RESERVED_INODE_COUNT 11 + +/* + * Codes for operating systems + */ +#define EXT2_OS_LINUX 0 +#define EXT2_OS_HURD 1 +#define EXT2_OS_MASIX 2 +#define EXT2_OS_FREEBSD 3 +#define EXT2_OS_LITES 4 + +/* + * Feature set definitions + */ +#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 +#define EXT2_FEATURE_COMPAT_HAS_DIR_INDEX 0x0020 + +#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 +#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 +#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008 +#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010 +#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020 + +#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 +#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 +#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 +#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 +#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 + +/* + * Special inodes numbers + */ +#define EXT2_BAD_INO 1 /* Bad blocks inode */ +#define EXT2_ROOT_INO 2 /* Root inode */ +#define EXT2_ACL_IDX_INO 3 /* ACL inode */ +#define EXT2_ACL_DATA_INO 4 /* ACL inode */ +#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */ +#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */ + +/* + * Ext2 directory file types. Only the low 3 bits are used. The + * other bits are reserved for now. + */ +#define EXT2_FT_UNKNOWN 0 +#define EXT2_FT_REG_FILE 1 +#define EXT2_FT_DIR 2 +#define EXT2_FT_CHRDEV 3 +#define EXT2_FT_BLKDEV 4 +#define EXT2_FT_FIFO 5 +#define EXT2_FT_SOCK 6 +#define EXT2_FT_SYMLINK 7 + +/* + * Behaviour when detecting errors + */ +#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */ +#define EXT2_ERRORS_RO 2 /* Remount fs read-only */ +#define EXT2_ERRORS_PANIC 3 /* Panic */ +#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE + +struct ext2_dir_entry_2 +{ + uint32_t inode; + uint16_t rec_len; + uint8_t name_len; + uint8_t file_type; + char name[255]; +}; + +struct ext2_group_desc +{ + uint32_t bg_block_bitmap; + uint32_t bg_inode_bitmap; + uint32_t bg_inode_table; + uint16_t bg_free_blocks_count; + uint16_t bg_free_inodes_count; + uint16_t bg_used_dirs_count; + uint16_t bg_pad; + uint32_t bg_reserved[3]; +}; + +struct ext2_inode +{ + uint16_t i_mode; /* File mode */ + uint16_t i_uid; /* Owner Uid */ + uint32_t i_size; /* Size in bytes */ + uint32_t i_atime; /* Access time */ + uint32_t i_ctime; /* Creation time */ + uint32_t i_mtime; /* Modification time */ + uint32_t i_dtime; /* Deletion Time */ + uint16_t i_gid; /* Group Id */ + uint16_t i_links_count; /* Links count */ + uint32_t i_blocks; /* Blocks count */ + uint32_t i_flags; /* File flags */ + union { + struct { + uint32_t l_i_reserved1; + } linux1; + struct { + uint32_t h_i_translator; + } hurd1; + struct { + uint32_t m_i_reserved1; + } masix1; + } osd1; /* OS dependent 1 */ + uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */ + uint32_t i_generation; /* File version (for NFS) */ + uint32_t i_file_acl; /* File ACL */ + uint32_t i_dir_acl; /* Directory ACL */ + uint32_t i_faddr; /* Fragment address */ + union { + struct { + uint8_t l_i_frag; /* Fragment number */ + uint8_t l_i_fsize; /* Fragment size */ + uint16_t i_pad1; + uint32_t l_i_reserved2[2]; + } linux2; + struct { + uint8_t h_i_frag; /* Fragment number */ + uint8_t h_i_fsize; /* Fragment size */ + uint16_t h_i_mode_high; + uint16_t h_i_uid_high; + uint16_t h_i_gid_high; + uint32_t h_i_author; + } hurd2; + struct { + uint8_t m_i_frag; /* Fragment number */ + uint8_t m_i_fsize; /* Fragment size */ + uint16_t m_pad1; + uint32_t m_i_reserved2[2]; + } masix2; + } osd2; /* OS dependent 2 */ +}; + +#define i_size_high i_dir_acl + +struct __attribute__ ((packed)) ext2_super_block +{ + uint32_t s_inodes_count; /* Inodes count */ + uint32_t s_blocks_count; /* Blocks count */ + uint32_t s_r_blocks_count; /* Reserved blocks count */ + uint32_t s_free_blocks_count; /* Free blocks count */ + uint32_t s_free_inodes_count; /* Free inodes count */ + uint32_t s_first_data_block; /* First Data Block */ + uint32_t s_log_block_size; /* Block size */ + int32_t s_log_frag_size; /* Fragment size */ + uint32_t s_blocks_per_group; /* # Blocks per group */ + uint32_t s_frags_per_group; /* # Fragments per group */ + uint32_t s_inodes_per_group; /* # Inodes per group */ + uint32_t s_mtime; /* Mount time */ + uint32_t s_wtime; /* Write time */ + uint16_t s_mnt_count; /* Mount count */ + int16_t s_max_mnt_count; /* Maximal mount count */ + uint16_t s_magic; /* Magic signature */ + uint16_t s_state; /* File system state */ + uint16_t s_errors; /* Behaviour when detecting errors */ + uint16_t s_minor_rev_level; /* minor revision level */ + uint32_t s_lastcheck; /* time of last check */ + uint32_t s_checkinterval; /* max. time between checks */ + uint32_t s_creator_os; /* OS */ + uint32_t s_rev_level; /* Revision level */ + uint16_t s_def_resuid; /* Default uid for reserved blocks */ + uint16_t s_def_resgid; /* Default gid for reserved blocks */ + /* + * These fields are for EXT2_DYNAMIC_REV superblocks only. + * + * Note: the difference between the compatible feature set and + * the incompatible feature set is that if there is a bit set + * in the incompatible feature set that the kernel doesn't + * know about, it should refuse to mount the file system. + * + * e2fsck's requirements are more strict; if it doesn't know + * about a feature in either the compatible or incompatible + * feature set, it must abort and not try to meddle with + * things it doesn't understand... + */ + uint32_t s_first_ino; /* First non-reserved inode */ + uint16_t s_inode_size; /* size of inode structure */ + uint16_t s_block_group_nr; /* block group # of this superblock */ + uint32_t s_feature_compat; /* compatible feature set */ + uint32_t s_feature_incompat; /* incompatible feature set */ + uint32_t s_feature_ro_compat; /* readonly-compatible feature set */ + uint8_t s_uuid[16]; /* 128-bit uuid for volume */ + char s_volume_name[16]; /* volume name */ + char s_last_mounted[64]; /* directory where last mounted */ + uint32_t s_algorithm_usage_bitmap; /* For compression */ + /* + * Performance hints. Directory preallocation should only + * happen if the EXT2_COMPAT_PREALLOC flag is on. + */ + uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ + uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ + uint16_t s_padding1; + /* + * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set. + */ + uint8_t s_journal_uuid[16]; /* uuid of journal superblock */ + uint32_t s_journal_inum; /* inode number of journal file */ + uint32_t s_journal_dev; /* device number of journal file */ + uint32_t s_last_orphan; /* start of list of inodes to delete */ + + uint32_t s_reserved[197]; /* Padding to the end of the block */ +}; + +#define EXT2_DIRENT_INODE(dir_ent) (PED_LE32_TO_CPU((dir_ent).inode)) +#define EXT2_DIRENT_REC_LEN(dir_ent) (PED_LE16_TO_CPU((dir_ent).rec_len)) +#define EXT2_DIRENT_NAME_LEN(dir_ent) ((dir_ent).name_len) +#define EXT2_DIRENT_FILE_TYPE(dir_ent) ((dir_ent).file_type) + +#define EXT2_GROUP_BLOCK_BITMAP(gd) (PED_LE32_TO_CPU((gd).bg_block_bitmap)) +#define EXT2_GROUP_INODE_BITMAP(gd) (PED_LE32_TO_CPU((gd).bg_inode_bitmap)) +#define EXT2_GROUP_INODE_TABLE(gd) (PED_LE32_TO_CPU((gd).bg_inode_table)) +#define EXT2_GROUP_FREE_BLOCKS_COUNT(gd) \ + (PED_LE16_TO_CPU((gd).bg_free_blocks_count)) +#define EXT2_GROUP_FREE_INODES_COUNT(gd) \ + (PED_LE16_TO_CPU((gd).bg_free_inodes_count)) +#define EXT2_GROUP_USED_DIRS_COUNT(gd) \ + (PED_LE16_TO_CPU((gd).bg_used_dirs_count)) + +#define EXT2_INODE_MODE(inode) (PED_LE16_TO_CPU((inode).i_mode)) +#define EXT2_INODE_UID(inode) (PED_LE16_TO_CPU((inode).i_uid)) +#define EXT2_INODE_SIZE(inode) \ + ((uint64_t) PED_LE32_TO_CPU((inode).i_size) \ + + ((uint64_t) PED_LE32_TO_CPU((inode).i_size_high) << 32)) +#define EXT2_INODE_ATIME(inode) (PED_LE32_TO_CPU((inode).i_atime)) +#define EXT2_INODE_CTIME(inode) (PED_LE32_TO_CPU((inode).i_ctime)) +#define EXT2_INODE_MTIME(inode) (PED_LE32_TO_CPU((inode).i_mtime)) +#define EXT2_INODE_DTIME(inode) (PED_LE32_TO_CPU((inode).i_dtime)) +#define EXT2_INODE_GID(inode) (PED_LE16_TO_CPU((inode).i_gid)) +#define EXT2_INODE_LINKS_COUNT(inode) (PED_LE16_TO_CPU((inode).i_links_count)) +#define EXT2_INODE_BLOCKS(inode) (PED_LE32_TO_CPU((inode).i_blocks)) +#define EXT2_INODE_FLAGS(inode) (PED_LE32_TO_CPU((inode).i_flags)) +#define EXT2_INODE_TRANSLATOR(inode) (PED_LE32_TO_CPU((inode).osd1.hurd1.h_i_translator)) +#define EXT2_INODE_BLOCK(inode, blk) (PED_LE32_TO_CPU((inode).i_block[blk])) + +#define EXT2_SUPER_INODES_COUNT(sb) (PED_LE32_TO_CPU((sb).s_inodes_count)) +#define EXT2_SUPER_BLOCKS_COUNT(sb) (PED_LE32_TO_CPU((sb).s_blocks_count)) +#define EXT2_SUPER_R_BLOCKS_COUNT(sb) (PED_LE32_TO_CPU((sb).s_r_blocks_count)) +#define EXT2_SUPER_FREE_BLOCKS_COUNT(sb) \ + (PED_LE32_TO_CPU((sb).s_free_blocks_count)) +#define EXT2_SUPER_FREE_INODES_COUNT(sb) \ + (PED_LE32_TO_CPU((sb).s_free_inodes_count)) +#define EXT2_SUPER_FIRST_DATA_BLOCK(sb) \ + (PED_LE32_TO_CPU((sb).s_first_data_block)) +#define EXT2_SUPER_LOG_BLOCK_SIZE(sb) (PED_LE32_TO_CPU((sb).s_log_block_size)) +#define EXT2_SUPER_LOG_FRAG_SIZE(sb) \ + ((int32_t) PED_LE32_TO_CPU((sb).s_log_frag_size)) +#define EXT2_SUPER_BLOCKS_PER_GROUP(sb) \ + (PED_LE32_TO_CPU((sb).s_blocks_per_group)) +#define EXT2_SUPER_FRAGS_PER_GROUP(sb) \ + (PED_LE32_TO_CPU((sb).s_frags_per_group)) +#define EXT2_SUPER_INODES_PER_GROUP(sb) \ + (PED_LE32_TO_CPU((sb).s_inodes_per_group)) +#define EXT2_SUPER_MTIME(sb) (PED_LE32_TO_CPU((sb).s_mtime)) +#define EXT2_SUPER_WTIME(sb) (PED_LE32_TO_CPU((sb).s_wtime)) +#define EXT2_SUPER_MNT_COUNT(sb) (PED_LE16_TO_CPU((sb).s_mnt_count)) +#define EXT2_SUPER_MAX_MNT_COUNT(sb) \ + ((int16_t) PED_LE16_TO_CPU((sb).s_max_mnt_count)) +#define EXT2_SUPER_MAGIC(sb) (PED_LE16_TO_CPU((sb).s_magic)) +#define EXT2_SUPER_STATE(sb) (PED_LE16_TO_CPU((sb).s_state)) +#define EXT2_SUPER_ERRORS(sb) (PED_LE16_TO_CPU((sb).s_errors)) +#define EXT2_SUPER_MINOR_REV_LEVEL(sb) \ + (PED_LE16_TO_CPU((sb).s_minor_rev_level)) +#define EXT2_SUPER_LASTCHECK(sb) (PED_LE32_TO_CPU((sb).s_lastcheck)) +#define EXT2_SUPER_CHECKINTERVAL(sb) (PED_LE32_TO_CPU((sb).s_checkinterval)) +#define EXT2_SUPER_CREATOR_OS(sb) (PED_LE32_TO_CPU((sb).s_creator_os)) +#define EXT2_SUPER_REV_LEVEL(sb) (PED_LE32_TO_CPU((sb).s_rev_level)) +#define EXT2_SUPER_DEF_RESUID(sb) (PED_LE16_TO_CPU((sb).s_def_resuid)) +#define EXT2_SUPER_DEF_RESGID(sb) (PED_LE16_TO_CPU((sb).s_def_resgid)) + +#define EXT2_SUPER_FIRST_INO(sb) (PED_LE32_TO_CPU((sb).s_first_ino)) +#define EXT2_SUPER_INODE_SIZE(sb) (PED_LE16_TO_CPU((sb).s_inode_size)) +#define EXT2_SUPER_BLOCK_GROUP_NR(sb) (PED_LE16_TO_CPU((sb).s_block_group_nr)) +#define EXT2_SUPER_FEATURE_COMPAT(sb) (PED_LE32_TO_CPU((sb).s_feature_compat)) +#define EXT2_SUPER_FEATURE_INCOMPAT(sb) \ + (PED_LE32_TO_CPU((sb).s_feature_incompat)) +#define EXT2_SUPER_FEATURE_RO_COMPAT(sb) \ + (PED_LE32_TO_CPU((sb).s_feature_ro_compat)) +#define EXT2_SUPER_UUID(sb) ((sb).s_uuid) +#define EXT2_SUPER_VOLUME_NAME(sb) ((sb).s_volume_name) +#define EXT2_SUPER_LAST_MOUNTED(sb) ((sb).s_last_mounted) +#define EXT2_SUPER_ALGORITHM_USAGE_BITMAP(sb) \ + (PED_LE32_TO_CPU((sb).s_algorithm_usage_bitmap)) + +#define EXT2_SUPER_JOURNAL_UUID(sb) ((sb).s_journal_uuid) +#define EXT2_SUPER_JOURNAL_INUM(sb) (PED_LE32_TO_CPU((sb).s_journal_inum)) +#define EXT2_SUPER_JOURNAL_DEV(sb) (PED_LE32_TO_CPU((sb).s_journal_dev)) +#define EXT2_SUPER_LAST_ORPHAN(sb) (PED_LE32_TO_CPU((sb).s_last_orphan)) + +#endif diff --git a/jni/parted/libparted/fs/ext2/interface.c b/jni/parted/libparted/fs/ext2/interface.c new file mode 100755 index 0000000..7e0b197 --- /dev/null +++ b/jni/parted/libparted/fs/ext2/interface.c @@ -0,0 +1,163 @@ +/* + interface.c -- parted binding glue to libext2resize + Copyright (C) 1998-2000, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +/* VERSION: libext2resize 1.1.6 (by Lennert) + * merged 1.1.11 changes (by Andrew) + */ + +#include + +#include +#include "ext2.h" + +static PedFileSystemType _ext2_type; +static PedFileSystemType _ext3_type; + +struct ext2_dev_handle* ext2_make_dev_handle_from_parted_geometry(PedGeometry* geom); + +static PedGeometry* +_ext2_generic_probe (PedGeometry* geom, int expect_ext_ver) +{ + struct ext2_super_block *sb; + const int sectors = (4096 + geom->dev->sector_size - 1) / + geom->dev->sector_size; + uint8_t *buf = alloca (sectors * geom->dev->sector_size); + if (!ped_geometry_read(geom, buf, 0, sectors)) + return NULL; + sb = (struct ext2_super_block *)(buf+1024); + + if (EXT2_SUPER_MAGIC(*sb) == EXT2_SUPER_MAGIC_CONST) { + PedSector block_size = (EXT2_MIN_BLOCK_SIZE << (EXT2_SUPER_LOG_BLOCK_SIZE(*sb))) / geom->dev->sector_size; + PedSector block_count = EXT2_SUPER_BLOCKS_COUNT(*sb); + PedSector group_blocks = EXT2_SUPER_BLOCKS_PER_GROUP(*sb); + PedSector group_nr = EXT2_SUPER_BLOCK_GROUP_NR(*sb); + PedSector first_data_block = EXT2_SUPER_FIRST_DATA_BLOCK(*sb); + int version = EXT2_SUPER_REV_LEVEL(*sb); + int is_ext3 = 0; + int is_ext4 = 0; + + is_ext3 = (EXT2_SUPER_FEATURE_COMPAT (*sb) + & EXT3_FEATURE_COMPAT_HAS_JOURNAL) != 0; + if (is_ext3) { + is_ext4 = ((EXT2_SUPER_FEATURE_RO_COMPAT (*sb) + & EXT4_FEATURE_RO_COMPAT_HUGE_FILE) + || (EXT2_SUPER_FEATURE_RO_COMPAT (*sb) + & EXT4_FEATURE_RO_COMPAT_GDT_CSUM) + || (EXT2_SUPER_FEATURE_RO_COMPAT (*sb) + & EXT4_FEATURE_RO_COMPAT_DIR_NLINK) + || (EXT2_SUPER_FEATURE_INCOMPAT (*sb) + & EXT4_FEATURE_INCOMPAT_EXTENTS) + || (EXT2_SUPER_FEATURE_INCOMPAT (*sb) + & EXT4_FEATURE_INCOMPAT_64BIT) + || (EXT2_SUPER_FEATURE_INCOMPAT (*sb) + & EXT4_FEATURE_INCOMPAT_FLEX_BG)); + if (is_ext4) + is_ext3 = 0; + } + if (expect_ext_ver == 2 && (is_ext3 || is_ext4)) + return NULL; + if (expect_ext_ver == 3 && !is_ext3) + return NULL; + else if (expect_ext_ver == 4 && !is_ext4) + return NULL; + + if (version > 0 && group_nr > 0) { + PedSector start; + PedGeometry probe_geom; + + start = geom->start + - group_blocks * group_nr + - first_data_block; + + if (start < 0) + return NULL; + ped_geometry_init (&probe_geom, geom->dev, + start, block_count * block_size); + return _ext2_generic_probe (&probe_geom, + expect_ext_ver); + } else { + return ped_geometry_new (geom->dev, geom->start, + block_count * block_size); + } + } + + return NULL; +} + +static PedGeometry* +_ext2_probe (PedGeometry* geom) +{ + return _ext2_generic_probe (geom, 2); +} + +static PedGeometry* +_ext3_probe (PedGeometry* geom) +{ + return _ext2_generic_probe (geom, 3); +} + +static PedGeometry* +_ext4_probe (PedGeometry* geom) +{ + return _ext2_generic_probe (geom, 4); +} + +static PedFileSystemOps _ext2_ops = { + probe: _ext2_probe, +}; + +static PedFileSystemOps _ext3_ops = { + probe: _ext3_probe, +}; + +static PedFileSystemOps _ext4_ops = { + probe: _ext4_probe, +}; + +static PedFileSystemType _ext2_type = { + next: NULL, + ops: &_ext2_ops, + name: "ext2", +}; + +static PedFileSystemType _ext3_type = { + next: NULL, + ops: &_ext3_ops, + name: "ext3", +}; + +static PedFileSystemType _ext4_type = { + next: NULL, + ops: &_ext4_ops, + name: "ext4", +}; + +void ped_file_system_ext2_init () +{ + ped_file_system_type_register (&_ext2_type); + ped_file_system_type_register (&_ext3_type); + ped_file_system_type_register (&_ext4_type); +} + +void ped_file_system_ext2_done () +{ + ped_file_system_type_unregister (&_ext2_type); + ped_file_system_type_unregister (&_ext3_type); + ped_file_system_type_unregister (&_ext4_type); +} diff --git a/jni/parted/libparted/fs/f2fs/f2fs.c b/jni/parted/libparted/fs/f2fs/f2fs.c new file mode 100755 index 0000000..68ed092 --- /dev/null +++ b/jni/parted/libparted/fs/f2fs/f2fs.c @@ -0,0 +1,60 @@ +/* + libparted/fs/f2fs - Flash-Friendly File System + Copyright (C) 2020-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include + +#include "f2fs.h" + +static PedGeometry* +f2fs_probe (PedGeometry* geom) +{ + struct f2fs_super_block *sb = alloca(geom->dev->sector_size); + + if (!ped_geometry_read (geom, sb, F2FS_SB_OFFSET, 1)) + return NULL; + + if (PED_LE32_TO_CPU(sb->magic) == F2FS_MAGIC) + return ped_geometry_new (geom->dev, geom->start, geom->length); + + return NULL; +} + +static PedFileSystemOps f2fs_ops = { + probe: f2fs_probe, +}; + +static PedFileSystemType f2fs_type = { + next: NULL, + ops: &f2fs_ops, + name: "f2fs", +}; + +void +ped_file_system_f2fs_init () +{ + ped_file_system_type_register (&f2fs_type); +} + +void +ped_file_system_f2fs_done () +{ + ped_file_system_type_unregister (&f2fs_type); +} diff --git a/jni/parted/libparted/fs/f2fs/f2fs.h b/jni/parted/libparted/fs/f2fs/f2fs.h new file mode 100755 index 0000000..9341337 --- /dev/null +++ b/jni/parted/libparted/fs/f2fs/f2fs.h @@ -0,0 +1,57 @@ +/* + libparted/fs/f2fs - Flash-Friendly File System + Copyright (C) 2020-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ +#ifndef _F2FS_H +#define _F2FS_H + +#define F2FS_MAGIC 0xF2F52010 +#define F2FS_MAX_VOLUME_NAME 512 +#define F2FS_SB_OFFSET 0x02 + +struct f2fs_super_block { + uint32_t magic; /* Magic Number */ + uint16_t major_ver; /* Major Version */ + uint16_t minor_ver; /* Minor Version */ + uint32_t log_sectorsize; /* log2 sector size in bytes */ + uint32_t log_sectors_per_block; /* log2 # of sectors per block */ + uint32_t log_blocksize; /* log2 block size in bytes */ + uint32_t log_blocks_per_seg; /* log2 # of blocks per segment */ + uint32_t segs_per_sec; /* # of segments per section */ + uint32_t secs_per_zone; /* # of sections per zone */ + uint32_t checksum_offset; /* checksum offset inside super block */ + uint64_t block_count; /* total # of user blocks */ + uint32_t section_count; /* total # of sections */ + uint32_t segment_count; /* total # of segments */ + uint32_t segment_count_ckpt; /* # of segments for checkpoint */ + uint32_t segment_count_sit; /* # of segments for SIT */ + uint32_t segment_count_nat; /* # of segments for NAT */ + uint32_t segment_count_ssa; /* # of segments for SSA */ + uint32_t segment_count_main; /* # of segments for main area */ + uint32_t segment0_blkaddr; /* start block address of segment 0 */ + uint32_t cp_blkaddr; /* start block address of checkpoint */ + uint32_t sit_blkaddr; /* start block address of SIT */ + uint32_t nat_blkaddr; /* start block address of NAT */ + uint32_t ssa_blkaddr; /* start block address of SSA */ + uint32_t main_blkaddr; /* start block address of main area */ + uint32_t root_ino; /* root inode number */ + uint32_t node_ino; /* node inode number */ + uint32_t meta_ino; /* meta inode number */ + uint8_t uuid[16]; /* 128-bit uuid for volume */ + uint16_t volume_name[F2FS_MAX_VOLUME_NAME]; /* volume name */ +} __attribute__((packed)); + +#endif diff --git a/jni/parted/libparted/fs/fat/bootsector.c b/jni/parted/libparted/fs/fat/bootsector.c new file mode 100755 index 0000000..f02685b --- /dev/null +++ b/jni/parted/libparted/fs/fat/bootsector.c @@ -0,0 +1,271 @@ +/* + libparted + Copyright (C) 1998-2000, 2002, 2004, 2007, 2009-2014, 2019-2023 Free + Software Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include "fat.h" + +#include +#include +#include +#include +#include +#include +#include + +/* Reads in the boot sector (superblock), and does a minimum of sanity + * checking. The goals are: + * - to detect fat file systems, even if they are damaged [i.e. not + * return an error / throw an exception] + * - to fail detection if there's not enough information for + * fat_boot_sector_probe_type() to work (or possibly crash on a divide-by-zero) + */ +int +fat_boot_sector_read (FatBootSector** bsp, const PedGeometry *geom) +{ + PED_ASSERT (bsp != NULL); + PED_ASSERT (geom != NULL); + + if (!ped_geometry_read_alloc (geom, (void **)bsp, 0, 1)) + return 0; + FatBootSector *bs = *bsp; + + if (PED_LE16_TO_CPU (bs->boot_sign) != 0xAA55) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid signature for a FAT " + "file system.")); + return 0; + } + + if (!bs->sector_size + || PED_LE16_TO_CPU (bs->sector_size) % PED_SECTOR_SIZE_DEFAULT) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid sector size for a FAT " + "file system.")); + return 0; + } + + if (!bs->cluster_size) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid cluster size for a FAT " + "file system.")); + return 0; + } + + if (!bs->reserved) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid number of reserved " + "sectors for a FAT file system.")); + return 0; + } + + if (bs->fats < 1 || bs->fats > 4) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid number of FATs.")); + return 0; + } + + return 1; +} + +/* + Don't trust the FAT12, FAT16 or FAT32 label string. + */ +FatType _GL_ATTRIBUTE_PURE +fat_boot_sector_probe_type (const FatBootSector* bs, const PedGeometry* geom) +{ + PedSector logical_sector_size; + PedSector first_cluster_sector; + FatCluster cluster_count; + + if (!PED_LE16_TO_CPU (bs->dir_entries)) + return FAT_TYPE_FAT32; + + logical_sector_size = PED_LE16_TO_CPU (bs->sector_size) / 512; + + first_cluster_sector + = PED_LE16_TO_CPU (bs->reserved) * logical_sector_size + + 2 * PED_LE16_TO_CPU (bs->fat_length) * logical_sector_size + + PED_LE16_TO_CPU (bs->dir_entries) + / (512 / sizeof (FatDirEntry)); + cluster_count = (geom->length - first_cluster_sector) + / bs->cluster_size / logical_sector_size; + if (cluster_count > MAX_FAT12_CLUSTERS) + return FAT_TYPE_FAT16; + else + return FAT_TYPE_FAT12; +} + +static int +_fat_table_entry_size (FatType fat_type) +{ + switch (fat_type) { + case FAT_TYPE_FAT12: + return 2; /* FIXME: how? */ + + case FAT_TYPE_FAT16: + return 2; + + case FAT_TYPE_FAT32: + return 4; + } + + return 0; +} + +/* Analyses the boot sector, and sticks appropriate numbers in + fs->type_specific. + + Note: you need to subtract (2 * cluster_sectors) off cluster offset, + because the first cluster is number 2. (0 and 1 are not real clusters, + and referencing them is a bug) + */ +int +fat_boot_sector_analyse (FatBootSector* bs, PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + int fat_entry_size; + + PED_ASSERT (bs != NULL); + + fs_info->logical_sector_size = PED_LE16_TO_CPU (bs->sector_size) / 512; + + fs_info->sectors_per_track = PED_LE16_TO_CPU (bs->secs_track); + fs_info->heads = PED_LE16_TO_CPU (bs->heads); + if (fs_info->sectors_per_track < 1 || fs_info->sectors_per_track > 63 + || fs_info->heads < 1 || fs_info->heads > 255) { + PedCHSGeometry* bios_geom = &fs->geom->dev->bios_geom; + int cyl_count = 0; + + if (fs_info->heads > 0 && fs_info->sectors_per_track > 0) + cyl_count = fs->geom->dev->length / fs_info->heads + / fs_info->sectors_per_track; + + switch (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("The file system's CHS geometry is (%d, %d, %d), " + "which is invalid. The partition table's CHS " + "geometry is (%d, %d, %d)."), + cyl_count, fs_info->heads, fs_info->sectors_per_track, + bios_geom->cylinders, bios_geom->heads, + bios_geom->sectors)) { + + case PED_EXCEPTION_CANCEL: + return 0; + + case PED_EXCEPTION_IGNORE: + break; + + default: + break; + } + } + + if (bs->sectors) + fs_info->sector_count = PED_LE16_TO_CPU (bs->sectors) + * fs_info->logical_sector_size; + else + fs_info->sector_count = PED_LE32_TO_CPU (bs->sector_count) + * fs_info->logical_sector_size; + + fs_info->fat_table_count = bs->fats; + fs_info->root_dir_entry_count = PED_LE16_TO_CPU (bs->dir_entries); + fs_info->fat_offset = PED_LE16_TO_CPU (bs->reserved) + * fs_info->logical_sector_size; + fs_info->cluster_sectors = bs->cluster_size + * fs_info->logical_sector_size; + fs_info->cluster_size = fs_info->cluster_sectors * 512; + + if (fs_info->logical_sector_size == 0) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("FAT boot sector says logical sector size is 0. " + "This is weird. ")); + return 0; + } + if (fs_info->fat_table_count == 0) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("FAT boot sector says there are no FAT tables. This " + "is weird. ")); + return 0; + } + if (fs_info->cluster_sectors == 0) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("FAT boot sector says clusters are 0 sectors. This " + "is weird. ")); + return 0; + } + + fs_info->fat_type = fat_boot_sector_probe_type (bs, fs->geom); + if (fs_info->fat_type == FAT_TYPE_FAT12) { + ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("File system is FAT12, which is unsupported.")); + return 0; + } + if (fs_info->fat_type == FAT_TYPE_FAT16) { + fs_info->fat_sectors = PED_LE16_TO_CPU (bs->fat_length) + * fs_info->logical_sector_size; + fs_info->serial_number + = PED_LE32_TO_CPU (bs->u.fat16.serial_number); + fs_info->root_cluster = 0; + fs_info->root_dir_offset + = fs_info->fat_offset + + fs_info->fat_sectors * fs_info->fat_table_count; + fs_info->root_dir_sector_count + = fs_info->root_dir_entry_count * sizeof (FatDirEntry) + / (512 * fs_info->logical_sector_size); + fs_info->cluster_offset + = fs_info->root_dir_offset + + fs_info->root_dir_sector_count; + } + if (fs_info->fat_type == FAT_TYPE_FAT32) { + fs_info->fat_sectors = PED_LE32_TO_CPU (bs->u.fat32.fat_length) + * fs_info->logical_sector_size; + fs_info->serial_number + = PED_LE32_TO_CPU (bs->u.fat32.serial_number); + fs_info->info_sector_offset + = PED_LE16_TO_CPU (fs_info->boot_sector->u.fat32.info_sector) + * fs_info->logical_sector_size; + fs_info->boot_sector_backup_offset + = PED_LE16_TO_CPU (fs_info->boot_sector->u.fat32.backup_sector) + * fs_info->logical_sector_size; + fs_info->root_cluster + = PED_LE32_TO_CPU (bs->u.fat32.root_dir_cluster); + fs_info->root_dir_offset = 0; + fs_info->root_dir_sector_count = 0; + fs_info->cluster_offset + = fs_info->fat_offset + + fs_info->fat_sectors * fs_info->fat_table_count; + } + + fs_info->cluster_count + = (fs_info->sector_count - fs_info->cluster_offset) + / fs_info->cluster_sectors; + + fat_entry_size = _fat_table_entry_size (fs_info->fat_type); + if (fs_info->cluster_count + 2 + > fs_info->fat_sectors * 512 / fat_entry_size) + fs_info->cluster_count + = fs_info->fat_sectors * 512 / fat_entry_size - 2; + + fs_info->dir_entries_per_cluster + = fs_info->cluster_size / sizeof (FatDirEntry); + return 1; +} diff --git a/jni/parted/libparted/fs/fat/bootsector.h b/jni/parted/libparted/fs/fat/bootsector.h new file mode 100755 index 0000000..328ba2f --- /dev/null +++ b/jni/parted/libparted/fs/fat/bootsector.h @@ -0,0 +1,126 @@ +/* + libparted + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef PED_FAT_BOOTSECTOR_H +#define PED_FAT_BOOTSECTOR_H + +typedef struct _FatBootSector FatBootSector; +typedef struct _FatInfoSector FatInfoSector; + +#include "fat.h" + +#define FAT32_INFO_MAGIC1 0x41615252 +#define FAT32_INFO_MAGIC2 0x61417272 +#define FAT32_INFO_MAGIC3 0xaa55 + +/* stolen from mkdosfs, by Dave Hudson */ + +#define FAT_BOOT_MESSAGE \ +"This partition does not have an operating system loader installed on it.\n\r"\ +"Press a key to reboot..." + +#define FAT_BOOT_JUMP "\xeb\x58\x90" /* jmp +5a */ + +#define FAT_BOOT_CODE "\x0e" /* push cs */ \ + "\x1f" /* pop ds */ \ + "\xbe\x74\x7e" /* mov si, offset message */ \ + /* write_msg_loop: */ \ + "\xac" /* lodsb */ \ + "\x22\xc0" /* and al, al */ \ + "\x74\x06" /* jz done (+8) */ \ + "\xb4\x0e" /* mov ah, 0x0e */ \ + "\xcd\x10" /* int 0x10 */ \ + "\xeb\xf5" /* jmp write_msg_loop */ \ + /* done: */ \ + "\xb4\x00" /* mov ah, 0x00 */ \ + "\xcd\x16" /* int 0x16 */ \ + "\xb4\x00" /* mov ah, 0x00 */ \ + "\xcd\x19" /* int 0x19 */ \ + "\xeb\xfe" /* jmp +0 - in case int 0x19 */ \ + /* doesn't work */ \ + /* message: */ \ + FAT_BOOT_MESSAGE + +#define FAT_BOOT_CODE_LENGTH 128 + +struct __attribute__ ((packed)) _FatBootSector { + uint8_t boot_jump[3]; /* 00: Boot strap short or near jump */ + uint8_t system_id[8]; /* 03: system name */ + uint16_t sector_size; /* 0b: bytes per logical sector */ + uint8_t cluster_size; /* 0d: sectors/cluster */ + uint16_t reserved; /* 0e: reserved sectors */ + uint8_t fats; /* 10: number of FATs */ + uint16_t dir_entries; /* 11: number of root directory entries */ + uint16_t sectors; /* 13: if 0, total_sect supersedes */ + uint8_t media; /* 15: media code */ + uint16_t fat_length; /* 16: sectors/FAT for FAT12/16 */ + uint16_t secs_track; /* 18: sectors per track */ + uint16_t heads; /* 1a: number of heads */ + uint32_t hidden; /* 1c: hidden sectors (partition start) */ + uint32_t sector_count; /* 20: no. of sectors (if sectors == 0) */ + + union __attribute__ ((packed)) { + /* FAT16 fields */ + struct __attribute__ ((packed)) { + uint8_t drive_num; /* 24: */ + uint8_t empty_1; /* 25: */ + uint8_t ext_signature; /* 26: always 0x29 */ + uint32_t serial_number; /* 27: */ + uint8_t volume_name [11]; /* 2b: */ + uint8_t fat_name [8]; /* 36: */ + uint8_t boot_code[448]; /* 3f: Boot code (or message) */ + } fat16; + /* FAT32 fields */ + struct __attribute__ ((packed)) { + uint32_t fat_length; /* 24: size of FAT in sectors */ + uint16_t flags; /* 28: bit8: fat mirroring, low4: active fat */ + uint16_t version; /* 2a: minor * 256 + major */ + uint32_t root_dir_cluster; /* 2c: */ + uint16_t info_sector; /* 30: */ + uint16_t backup_sector; /* 32: */ + uint8_t empty_1 [12]; /* 34: */ + uint16_t drive_num; /* 40: */ + uint8_t ext_signature; /* 42: always 0x29 */ + uint32_t serial_number; /* 43: */ + uint8_t volume_name [11]; /* 47: */ + uint8_t fat_name [8]; /* 52: */ + uint8_t boot_code[420]; /* 5a: Boot code (or message) */ + } fat32; + } u; + + uint16_t boot_sign; /* 1fe: always 0xAA55 */ +}; + +struct __attribute__ ((packed)) _FatInfoSector { + uint32_t signature_1; /* should be 0x41615252 */ + uint8_t unused [480]; + uint32_t signature_2; /* should be 0x61417272 */ + uint32_t free_clusters; + uint32_t next_cluster; /* most recently allocated cluster */ + uint8_t unused2 [0xe]; + uint16_t signature_3; /* should be 0xaa55 */ +}; + +int fat_boot_sector_read (FatBootSector** bs, const PedGeometry* geom); +FatType fat_boot_sector_probe_type (const FatBootSector* bs, + const PedGeometry* geom); +int fat_boot_sector_analyse (FatBootSector* bs, PedFileSystem* fs); + + +#endif /* PED_FAT_BOOTSECTOR_H */ diff --git a/jni/parted/libparted/fs/fat/count.h b/jni/parted/libparted/fs/fat/count.h new file mode 100755 index 0000000..bb7d6af --- /dev/null +++ b/jni/parted/libparted/fs/fat/count.h @@ -0,0 +1,46 @@ +/* + libparted + Copyright (C) 1999-2000, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef COUNT_H_INCLUDED +#define COUNT_H_INCLUDED + +typedef enum _FatClusterFlag FatClusterFlag; +typedef struct _FatClusterInfo FatClusterInfo; + +enum _FatClusterFlag { + FAT_FLAG_FREE=0, + FAT_FLAG_FILE=1, + FAT_FLAG_DIRECTORY=2, + FAT_FLAG_BAD=3 +}; + +struct __attribute__ ((packed)) _FatClusterInfo { + unsigned int units_used:6; /* 1 unit = cluster_size / 64 */ + FatClusterFlag flag:2; +}; + +extern int fat_collect_cluster_info (PedFileSystem *fs); +extern FatClusterFlag fat_get_cluster_flag (PedFileSystem* fs, + FatCluster cluster); +extern PedSector fat_get_cluster_usage (PedFileSystem* fs, FatCluster cluster); +extern FatClusterFlag fat_get_fragment_flag (PedFileSystem* fs, + FatFragment frag); +extern int fat_is_fragment_active (PedFileSystem* fs, FatFragment frag); + +#endif /* COUNT_H_INCLUDED */ diff --git a/jni/parted/libparted/fs/fat/fat.c b/jni/parted/libparted/fs/fat/fat.c new file mode 100755 index 0000000..c04f178 --- /dev/null +++ b/jni/parted/libparted/fs/fat/fat.c @@ -0,0 +1,162 @@ +/* + libparted + Copyright (C) 1998-2001, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include +#include +#include + +#include "fat.h" + +PedFileSystem* +fat_alloc (const PedGeometry* geom) +{ + PedFileSystem* fs; + + fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem)); + if (!fs) + goto error; + + fs->type_specific = (FatSpecific*) ped_malloc (sizeof (FatSpecific)); + if (!fs->type_specific) + goto error_free_fs; + FatSpecific* fs_info = (FatSpecific*) fs->type_specific; + fs_info->boot_sector = NULL; + fs_info->info_sector = NULL; + fs->geom = ped_geometry_duplicate (geom); + if (!fs->geom) + goto error_free_type_specific; + + fs->checked = 0; + return fs; + +error_free_type_specific: + free (fs->type_specific); +error_free_fs: + free (fs); +error: + return NULL; +} + +void +fat_free (PedFileSystem* fs) +{ + FatSpecific* fs_info = (FatSpecific*) fs->type_specific; + free (fs_info->boot_sector); + ped_geometry_destroy (fs->geom); + free (fs->type_specific); + free (fs); +} + +PedGeometry* +fat_probe (PedGeometry* geom, FatType* fat_type) +{ + PedFileSystem* fs; + FatSpecific* fs_info; + PedGeometry* result; + + fs = fat_alloc (geom); + if (!fs) + goto error; + fs_info = (FatSpecific*) fs->type_specific; + + if (!fat_boot_sector_read (&fs_info->boot_sector, geom)) + goto error_free_fs; + if (!fat_boot_sector_analyse (fs_info->boot_sector, fs)) + goto error_free_fs; + + *fat_type = fs_info->fat_type; + result = ped_geometry_new (geom->dev, geom->start, + fs_info->sector_count); + + fat_free (fs); + return result; + +error_free_fs: + fat_free (fs); +error: + return NULL; +} + +PedGeometry* +fat_probe_fat16 (PedGeometry* geom) +{ + FatType fat_type; + PedGeometry* probed_geom = fat_probe (geom, &fat_type); + + if (probed_geom) { + if (fat_type == FAT_TYPE_FAT16) + return probed_geom; + ped_geometry_destroy (probed_geom); + } + return NULL; +} + +PedGeometry* +fat_probe_fat32 (PedGeometry* geom) +{ + FatType fat_type; + PedGeometry* probed_geom = fat_probe (geom, &fat_type); + + if (probed_geom) { + if (fat_type == FAT_TYPE_FAT32) + return probed_geom; + ped_geometry_destroy (probed_geom); + } + return NULL; +} + +static PedFileSystemOps fat16_ops = { + probe: fat_probe_fat16, +}; + +static PedFileSystemOps fat32_ops = { + probe: fat_probe_fat32, +}; + +PedFileSystemType fat16_type = { + next: NULL, + ops: &fat16_ops, + name: "fat16", +}; + +PedFileSystemType fat32_type = { + next: NULL, + ops: &fat32_ops, + name: "fat32", +}; + +void +ped_file_system_fat_init () +{ + if (sizeof (FatBootSector) != 512) { + ped_exception_throw (PED_EXCEPTION_BUG, PED_EXCEPTION_CANCEL, + _("GNU Parted was miscompiled: the FAT boot sector " + "should be 512 bytes. FAT support will be disabled.")); + } else { + ped_file_system_type_register (&fat16_type); + ped_file_system_type_register (&fat32_type); + } +} + +void +ped_file_system_fat_done () +{ + ped_file_system_type_unregister (&fat16_type); + ped_file_system_type_unregister (&fat32_type); +} diff --git a/jni/parted/libparted/fs/fat/fat.h b/jni/parted/libparted/fs/fat/fat.h new file mode 100755 index 0000000..f5302d9 --- /dev/null +++ b/jni/parted/libparted/fs/fat/fat.h @@ -0,0 +1,163 @@ +/* + libparted + Copyright (C) 1998-2001, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef FAT_H_INCLUDED +#define FAT_H_INCLUDED + +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include +#include +#include +#include + +#define BUFFER_SIZE 1024 /* buffer size in sectors (512 bytes) */ + +typedef uint32_t FatCluster; +typedef int32_t FatFragment; + +enum _FatType { + FAT_TYPE_FAT12, + FAT_TYPE_FAT16, + FAT_TYPE_FAT32 +}; +typedef enum _FatType FatType; + +typedef struct _FatSpecific FatSpecific; +typedef struct _FatDirEntry FatDirEntry; + +#include "bootsector.h" +#include "count.h" + +struct _FatTable { + void* table; + FatCluster size; + int raw_size; + + FatType fat_type; + FatCluster cluster_count; + FatCluster free_cluster_count; + FatCluster bad_cluster_count; + + FatCluster last_alloc; +}; +typedef struct _FatTable FatTable; + +struct __attribute__ ((packed)) _FatDirEntry { + char name[8]; + uint8_t extension[3]; + uint8_t attributes; + uint8_t is_upper_case_name; + uint8_t creation_time_low; /* milliseconds */ + uint16_t creation_time_high; + uint16_t creation_date; + uint16_t access_date; + uint16_t first_cluster_high; /* for FAT32 */ + uint16_t time; + uint16_t date; + uint16_t first_cluster; + uint32_t length; +}; + +struct _FatSpecific { + FatBootSector *boot_sector; /* structure of boot sector */ + FatInfoSector *info_sector; /* fat32-only information sector */ + + int logical_sector_size; /* illogical sector size :-) */ + PedSector sector_count; + + int sectors_per_track; /* BIOS CHS stuff (S) */ + int heads; /* BIOS CHS stuff (H) */ + + int cluster_size; + PedSector cluster_sectors; + FatCluster cluster_count; + int dir_entries_per_cluster; + + FatType fat_type; + int fat_table_count; + PedSector fat_sectors; + + uint32_t serial_number; + + PedSector info_sector_offset; /* FAT32 only */ + PedSector fat_offset; + PedSector root_dir_offset; /* non-FAT32 */ + PedSector cluster_offset; + PedSector boot_sector_backup_offset; + + FatCluster root_cluster; /* FAT32 only */ + int root_dir_entry_count; /* non-FAT32 */ + PedSector root_dir_sector_count; /* non-FAT32 */ + FatCluster total_dir_clusters; + + FatTable* fat; + FatClusterInfo* cluster_info; + + PedSector buffer_sectors; + char* buffer; + + int frag_size; + PedSector frag_sectors; + FatFragment frag_count; + FatFragment buffer_frags; + FatFragment cluster_frags; +}; + +#define FAT_SPECIFIC(fs) ((FatSpecific*) fs->type_specific) + +#define FAT_ROOT 0 + +#define DELETED_FLAG 0xe5 + +#define READONLY_ATTR 0x01 +#define HIDDEN_ATTR 0x02 +#define SYSTEM_ATTR 0x04 +#define VOLUME_LABEL_ATTR 0x08 +#define VFAT_ATTR 0x0f +#define DIRECTORY_ATTR 0x10 +#define ARCH_ATTR 0x20 + +#define MAX_FAT12_CLUSTERS 4086 +#define MAX_FAT16_CLUSTERS 65526 +#define MAX_FAT32_CLUSTERS 2000000 + +#define FAT_ROOT_DIR_ENTRY_COUNT 512 + +extern PedFileSystemType fat16_type; +extern PedFileSystemType fat32_type; + +extern void fat_print (const PedFileSystem* fs); + +extern PedFileSystem* fat_alloc (const PedGeometry* geom); +extern void fat_free (PedFileSystem* fs); +extern int fat_alloc_buffers (PedFileSystem* fs); + +extern int fat_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer); + +#endif /* FAT_H_INCLUDED */ diff --git a/jni/parted/libparted/fs/hfs/DOC b/jni/parted/libparted/fs/hfs/DOC new file mode 100755 index 0000000..9ee8b4d --- /dev/null +++ b/jni/parted/libparted/fs/hfs/DOC @@ -0,0 +1,92 @@ +WARNING : Both HFS and HFS+ implementations of Linux 2.4 are buggy, at +least when used before or after this implementation. Some workarounds +are used in this implementation, but there can still be incompatibilities. +Try Linux 2.6 if you want to play with HFS(+) resizing (though some bugs +might also be there in 2.6, there is of course no warranty) + +--- + + Technical doc about Apple HFS and HFS+ file systems is available at : + * For HFS, section "Data Organization on Volumes", + "Chapter 2 - File Manager" + of the book "Inside Macintosh: Files" + http://developer.apple.com/documentation/mac/Files/Files-99.html + * For HFS+, "Technical Note TN1150", "HFS Plus Volume Format" + http://developer.apple.com/technotes/tn/tn1150.html + + Some useful HFS precisions concerning alignement, bit ordering, and + order of fields for extent key comparaisons are only in the HFS+ TN + + These Apple Creator Codes are reserved for us : + Shnk traP GP16 GnuP PH+x Xpnd Resz GP17 GP18 GP19 GP20 + +--- + +* Cache design * + +Versions before HFS Patch 15 were very slow when data relocation was needed, +because every extent to relocate involved scanning the whole file system, +looking for a reference to its physical position on the volume (this was a +dummy algorithm, I know :) + +HFS Patch 16 introduced a cache that allows to efficiently retrieve the place +of the reference in the file system given the physical position of an extent. +The cache is designed for : - efficiency + - scaling + - simplicity + - avoiding memory allocation while resizing + +This cache involves quite big worst case memory consumption, but without it +the time needed to complete the operation in the worst case would be huge +anyway (maybe several years...) so this isn't really an issue. The cache size +is nearly proportional to the number of files you have, or if you have very few +files, to the size of your volume, so worst cases situations occure when you +fill a drive with millions of < 4 ko files :p For this very special usage you +will just need a very special amount of RAM (on typical systems about +(FS size) / 256 )... On a more "normal" volume it's about +(# of files) * 20 bytes. With very few files it's about (FS Size) / 1024 / 256. + +At the beginning of the resize process, the cache is filed by scanning the FS. +The position of each extent is cut into 2 parts : high order is used as +an index into a table of pointer to a linked list which contains : +- the next ptr (sizeof struct *) +- the extent start (4 bytes) +- the extent size (4 bytes) +- number of BTree block or 0 if in prim (4 bytes) +- offset of the extent start reference + from the block beginning (2 bytes) +- sectors by BTree block, or + 1 for VH/MDB (1 byte) +- FS special file / primary structure + where the extent reference is stored (1 byte) + (3 bits for the extent index, 5 for + the actual ref) + + 0 : dont exists --- reserved + 1 : mdb / vh : catalog --- + 2 : mdb / vh : extent --- + 3 : vh : attributes X+- + 4 : vh : allocation X+- + 5 : vh : startup X+- + 6 : catalog --- + 7 : attributes X+- + 8 : extent (nothing to update) --- + 9 : extent (update catalog) --- + 10 : extent (update extent !?!) --- should not exist + 11 : extent (update attributes) X+- + 12 : extent (update allocation) X+- + 13 : extent (update startup) X+- reserved + 14 : vh : journal info block X+J + 15 : jib: journal X+J + 16 - 31 : --- + +mdb : Master Directory Block +vh : Volume Header +X+ : HFSX or HFS+ only +J : Journaled only + +Large amount of memory is allocated at once (first enough memory to fit +every files if there isn't any fragmentation +6.25%, then this value / 4, +if this wasn't enough). On a typical FS, the first allocation should be enough. + +--- diff --git a/jni/parted/libparted/fs/hfs/HISTORY b/jni/parted/libparted/fs/hfs/HISTORY new file mode 100755 index 0000000..5e138a6 --- /dev/null +++ b/jni/parted/libparted/fs/hfs/HISTORY @@ -0,0 +1,115 @@ +## modifications dd-mm-yyyy +---------------------- PATCH FOR PARTED 1.6.5 ---------------------------- + 1 initial revision 07-04-2003 + 2 one pass resizing, removal of debug info 08-04-2003 + 3 safe abort if resize failed, code cleanups, timer, 10-04-2003 + source file split, won't resize if not unmounted, + only relocate data if needed, minimize disk operations + 4 memory leaks removal, code cleanups, resize hfs+ code, 17-04-2003 + more checks, minor hfs resize bugfix, probe code + returns real geometry + 5 hfs+ resize bugfixes : 19-04-2003 + * fragmented fs could be corrupted + * VH wasn't written on error during alloc map writing + * attributes file could be corrupted + 6 Use PedSector to be able to use 2To+ HD 23-04-2003 + Minor probe bugfix, Cleanups, HFS+ Timer tuning, + 7 80 columns indentation 23-04-2003 + 8 Bugfix free blocks calculation in wrapper + (makes Mac OS boot !) 28-04-2003 +---------------------- PATCH FOR PARTED 1.6.6 ---------------------------- + 9 Don't destroy the file being worked on in case of + interruption of Parted 28-10-2003 +---------------------- PATCH FOR PARTED 1.6.10 --------------------------- +10 Regression tests, URL correction, In effect_move_extent : + corrected memory leak & corrected a bug in precondition checks + Added error messages, Check ped_alloc results + Use macro for test / set / clear in the allocation bitmap + Light probe correction, Check return value of get_empty_end + Moved dynamic memory allocation out of effect_move_extent + Check HFS+ version, Set implementation creator code + Check journal absence, Corrected a bug in HFS+ block number + calculation 24-04-2004 +--------------------- PATCH FOR PARTED 1.6.11 ---------------------------- +11-Some pointer dereference moved after non nul assertion + -Error messages for HFS(+) file IO + -Memory leak correction in hfs(plus)_read_bad_blocks + -Mark out of volume blocks as used + (improve compatibility with broken HFS+ Linux + implementation) + WARNING : this fix is not 100% tn1150 compatible : + "The allocation file may be larger than the minimum + number of bits required for the given volume size. + Any unused bits in the bitmap must be set to _zero_." + Anyway neither is the Linux implementation, nor was my + previous implementations + Maybe I should ask Apple to change the specifications + -HISTORY, DOC and TODO files 29-04-2004 +12 Corrected a bug in hfsplus_volume_resize : size of alloc + bitmap could be miscalculated 29-04-2004 +--------------------- PATCH FOR PARTED 1.6.12 ---------------------------- +13-Finally partial rewrite of *_search_move_* + Easier to maintain and prepare for extent search and + relocation algorithm changes for better ones. + -"An extent has not been relocated!" message now only when + relocation requested + -Slightly better and simpler relocation algorithm + -Update of Makefile.in and Makefile.am in fs_hfs + -Sign correction for some 8bits HFS integers + -Added the option --enable-hfs-extract-fs in 'configure' + -Added every ped_geometry_sync where needed + -Bugfix : "A root node does not need to exist + (if the tree is empty)." + - now handled correctly in btree_search + -Bugfix : failure wasn't detected in some cases + during 2 pass relocation (*_search_move_*) + -Bugfix : The extent key comparaison was done in a wrong order + and a pad field was used during the comparaison + -Bugfix : in hfs_file_find_sector and hfsplus_file_find_sector + the absolute position of a file sector could be + miscalculated in case of fragmentation, resulting + in potential data corruption, or various errors + -Bugfix : The end of the HFS bitmap compatibility block was + miscalculated ( (1<<16)/8 instead of (1<<16) ) + in hfs_resize + 07-09-2004 +--------------------- PATCH FOR PARTED 1.6.14 ---------------------------- +14 Port of Patch 13 for Parted 1.6.14 (update timestamps) + 08-09-2004 +--------------------- PATCH FOR PARTED 1.6.15 ---------------------------- +15-hfsplus_open : added a warning message if the "attributes" + special file exists + -hfsplus_open : added a test to check if the "allocation" + special file has been correctly opened + -optimisation of hfs+ block access : don't recalculate + the address of each sector, and avoid checking the cache if + obviously not useful + ( hfsplus_file_read && hfsplus_file_write + && hfsplus_file_find_extent && hfs_file_find_sector) + -cut the "hfs.c" file in several parts + -Bugfix: in hfsplus_do_move_primary, hfs_effect_move_extent + was called instead of hfsplus_effect_move_extent !!! + This could not produce data corruption, because of a welcome + ASSERT in *_effect_move_extent that would detect the bug :) + -Bugfix: in hfs_effect_move_extent, do + PED_ASSERT(*ptr_to_fblock <= *ptr_fblock, return -1); + instead of + PED_ASSERT(*ptr_to_fblock < *ptr_fblock, return -1); + and added that assertion to hfsplus_effect_move_extent + -Bugfix: bugs introduced in rewrite of hfsplus_file_read + && hfsplus_file_write : last sector was incorrectly detected + as out of file. + -Cache the extent references (speed improvement ?) + 23-09-2004 +16-Bugfix: in hfsplus_do_move (reloc_plus.c), case CR_BTREE_EXT_ATTR + incorrectly updated the cached part of priv_data->catalog_file + instead of priv_data->attributes_file + -Bugfix: in hfs_read_bad_blocks && hfsplus_read_bad_blocks, + now generate an error if file_ID or type mismatch after the + first pass + Also check return value of ped_malloc + -Bugfix: in hfsplus_btree_search, check return value of ped_malloc + 29-09-2004 +---------------- INTEGRATION IN PARTED 1.6.22 (cvs) ---------------------- +Futur changes will be described in ../../ChangeLog + 02-02-2005 diff --git a/jni/parted/libparted/fs/hfs/TODO b/jni/parted/libparted/fs/hfs/TODO new file mode 100755 index 0000000..6e408e3 --- /dev/null +++ b/jni/parted/libparted/fs/hfs/TODO @@ -0,0 +1,27 @@ +--- TODO --- + + * Continue to write regressions tests and try on 2.6 kernel -- (high) + * Fix timer progression calculation, according to the new + caching code -- (high) + * write doc, website, ... -- (high) + * Check block allocation in linux 2.4 and remove + compatibility code if possible -- (high) + + * In hfs(plus)_btree_search , use a static variable to detect + illegal recursion and abort in that case. (find the right + number of recursion before reporting bug) -- easy -- (medium) + * Finish the HFS Extractor -- (medium) + (add mdb & vh extraction, and maybe journal) + + * Write code to allow enlarging and moving HFS[+x] -- (low) + * Use a bitmap to internaly store the bad blocks -- (low) + * Less bitmap saves ? -- (low) + * Continue to change the relocation algorithm + for a better one :) -- (low) + +--- NOT todo --- + + * debug HFS(+) Linux implementation (block allocation for HFS+, + hard and sym links for HFS+, filename length for HFS, ...) -- (dont) + /// Linux 2.6 contains HFS(+) implementations with less bugs + /// Linux 2.4 should not be used anymore to access HFS(+) diff --git a/jni/parted/libparted/fs/hfs/hfs.c b/jni/parted/libparted/fs/hfs/hfs.c new file mode 100755 index 0000000..3684646 --- /dev/null +++ b/jni/parted/libparted/fs/hfs/hfs.c @@ -0,0 +1,92 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000, 2003-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/* + Author : Guillaume Knispel + Report bug to +*/ + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" +#include "probe.h" + +uint8_t* hfs_block = NULL; +uint8_t* hfsp_block = NULL; +unsigned hfs_block_count; +unsigned hfsp_block_count; + +static PedFileSystemOps hfs_ops = { + probe: hfs_probe, +}; + +static PedFileSystemOps hfsplus_ops = { + probe: hfsplus_probe, +}; + +static PedFileSystemOps hfsx_ops = { + probe: hfsx_probe, +}; + + +static PedFileSystemType hfs_type = { + next: NULL, + ops: &hfs_ops, + name: "hfs", +}; + +static PedFileSystemType hfsplus_type = { + next: NULL, + ops: &hfsplus_ops, + name: "hfs+", +}; + +static PedFileSystemType hfsx_type = { + next: NULL, + ops: &hfsx_ops, + name: "hfsx", +}; + +void +ped_file_system_hfs_init () +{ + ped_file_system_type_register (&hfs_type); + ped_file_system_type_register (&hfsplus_type); + ped_file_system_type_register (&hfsx_type); +} + +void +ped_file_system_hfs_done () +{ + ped_file_system_type_unregister (&hfs_type); + ped_file_system_type_unregister (&hfsplus_type); + ped_file_system_type_unregister (&hfsx_type); +} diff --git a/jni/parted/libparted/fs/hfs/hfs.h b/jni/parted/libparted/fs/hfs/hfs.h new file mode 100755 index 0000000..5b9138c --- /dev/null +++ b/jni/parted/libparted/fs/hfs/hfs.h @@ -0,0 +1,648 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2003-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef _HFS_H +#define _HFS_H + +/* WARNING : bn is used 2 times in theses macro */ +/* so _never_ use side effect operators when using them */ +#define TST_BLOC_OCCUPATION(tab,bn) \ + (((tab)[(bn)/8]) & (1<<(7-((bn)&7)))) +#define SET_BLOC_OCCUPATION(tab,bn) \ + (((tab)[(bn)/8]) |= (1<<(7-((bn)&7)))) +#define CLR_BLOC_OCCUPATION(tab,bn) \ + (((tab)[(bn)/8]) &= ~(1<<(7-((bn)&7)))) + +/* Maximum number of blocks for the copy buffers */ +#define BLOCK_MAX_BUFF 256 +/* Maximum size of the copy buffers, in bytes */ +#define BYTES_MAX_BUFF 8388608 + +/* Apple Creator Codes follow */ +#define HFSP_IMPL_Shnk 0x53686e6b /* in use */ +#define HFSP_IMPL_Xpnd 0x58706e64 /* reserved */ +#define HFSP_IMPL_Resz 0x5265737a /* reserved */ +#define HFSP_IMPL_PHpx 0x50482b78 /* reserved */ +#define HFSP_IMPL_traP 0x74726150 /* reserved */ +#define HFSP_IMPL_GnuP 0x476e7550 /* reserved */ + +#define HFS_SIGNATURE 0x4244 /* 'BD' */ +#define HFSP_SIGNATURE 0x482B /* 'H+' */ +#define HFSX_SIGNATURE 0x4858 /* 'HX' */ + +#define HFSP_VERSION 4 +#define HFSX_VERSION 5 + +#define HFS_HARD_LOCK 7 +#define HFS_UNMOUNTED 8 +#define HFS_BAD_SPARED 9 +#define HFS_SOFT_LOCK 15 +#define HFSP_NO_CACHE 10 +#define HFSP_INCONSISTENT 11 +#define HFSP_REUSE_CNID 12 +#define HFSP_JOURNALED 13 + +#define HFS_IDX_NODE 0x00 +#define HFS_HDR_NODE 0x01 +#define HFS_MAP_NODE 0x02 +#define HFS_LEAF_NODE 0xFF + +#define HFS_FIRST_REC 0x0E +#define HFS_NSD_HD_REC 0x78 +#define HFS_MAP_REC 0xF8 + +#define HFS_DATA_FORK 0x00 +#define HFS_RES_FORK 0xFF + +#define HFS_CAT_DIR 0x01 +#define HFS_CAT_FILE 0x02 +#define HFS_CAT_DIR_TH 0x03 +#define HFS_CAT_FILE_TH 0x04 + +#define HFSP_ATTR_INLINE 0x10 +#define HFSP_ATTR_FORK 0x20 +#define HFSP_ATTR_EXTENTS 0x30 + +#define HFS_ROOT_PAR_ID 0x01 +#define HFS_ROOT_DIR_ID 0x02 +#define HFS_XTENT_ID 0x03 +#define HFS_CATALOG_ID 0x04 +#define HFS_BAD_BLOCK_ID 0x05 +#define HFSP_ALLOC_ID 0x06 +#define HFSP_STARTUP_ID 0x07 +#define HFSP_ATTRIB_ID 0x08 +#define HFSP_BOGUS_ID 0x0F +#define HFSP_FIRST_AV_ID 0x10 + +#define HFSJ_JOURN_IN_FS 0x00 +#define HFSJ_JOURN_OTHER_DEV 0x01 +#define HFSJ_JOURN_NEED_INIT 0x02 + +#define HFSJ_HEADER_MAGIC 0x4a4e4c78 +#define HFSJ_ENDIAN_MAGIC 0x12345678 + +#define HFSX_CASE_FOLDING 0xCF /* case insensitive HFSX */ +#define HFSX_BINARY_COMPARE 0xBC /* case sensitive HFSX */ + +#define HFS_EXT_NB 3 +#define HFSP_EXT_NB 8 + +/* Define the filenames used by the FS extractor */ +#ifdef HFS_EXTRACT_FS + +#define HFS_MDB_FILENAME "mdb.hfs" +#define HFS_CATALOG_FILENAME "catalog.hfs" +#define HFS_EXTENTS_FILENAME "extents.hfs" +#define HFS_BITMAP_FILENAME "bitmap.hfs" + +#define HFSP_VH_FILENAME "vh.hfsplus" +#define HFSP_CATALOG_FILENAME "catalog.hfsplus" +#define HFSP_EXTENTS_FILENAME "extents.hfsplus" +#define HFSP_BITMAP_FILENAME "bitmap.hfsplus" +#define HFSP_ATTRIB_FILENAME "attributes.hfsplus" +#define HFSP_STARTUP_FILENAME "startup.hfsplus" + +#endif /* HFS_EXTRACT_FS */ + + + +/* ----------------------------------- */ +/* -- HFS DATA STRUCTURES -- */ +/* ----------------------------------- */ + +/* Extent descriptor */ +struct __attribute__ ((packed)) _HfsExtDescriptor { + uint16_t start_block; + uint16_t block_count; +}; +typedef struct _HfsExtDescriptor HfsExtDescriptor; +typedef HfsExtDescriptor HfsExtDataRec[HFS_EXT_NB]; + +/* Volume header */ +struct __attribute__ ((packed)) _HfsMasterDirectoryBlock { + uint16_t signature; + uint32_t create_date; + uint32_t modify_date; + uint16_t volume_attributes; + uint16_t files_in_root; + uint16_t volume_bitmap_block; /* in sectors */ + uint16_t next_allocation; + uint16_t total_blocks; + uint32_t block_size; /* in bytes */ + uint32_t def_clump_size; /* in bytes */ + uint16_t start_block; /* in sectors */ + uint32_t next_free_node; + uint16_t free_blocks; + uint8_t name_length; + char name[27]; + uint32_t backup_date; + uint16_t backup_number; + uint32_t write_count; + uint32_t extents_clump; + uint32_t catalog_clump; + uint16_t dirs_in_root; + uint32_t file_count; + uint32_t dir_count; + uint32_t finder_info[8]; + union __attribute__ ((packed)) { + struct __attribute__ ((packed)) { + uint16_t volume_cache_size; /* in blocks */ + uint16_t bitmap_cache_size; /* in blocks */ + uint16_t common_cache_size; /* in blocks */ + } legacy; + struct __attribute__ ((packed)) { + uint16_t signature; + HfsExtDescriptor location; + } embedded; + } old_new; + uint32_t extents_file_size; /* in bytes, block size multiple */ + HfsExtDataRec extents_file_rec; + uint32_t catalog_file_size; /* in bytes, block size multiple */ + HfsExtDataRec catalog_file_rec; +}; +typedef struct _HfsMasterDirectoryBlock HfsMasterDirectoryBlock; + +/* B*-Tree Node Descriptor */ +struct __attribute__ ((packed)) _HfsNodeDescriptor { + uint32_t next; + uint32_t previous; + int8_t type; + uint8_t height; + uint16_t rec_nb; + uint16_t reserved; +}; +typedef struct _HfsNodeDescriptor HfsNodeDescriptor; + +/* Header record of a whole B*-Tree */ +struct __attribute__ ((packed)) _HfsHeaderRecord { + uint16_t depth; + uint32_t root_node; + uint32_t leaf_records; + uint32_t first_leaf_node; + uint32_t last_leaf_node; + uint16_t node_size; + uint16_t max_key_len; + uint32_t total_nodes; + uint32_t free_nodes; + int8_t reserved[76]; +}; +typedef struct _HfsHeaderRecord HfsHeaderRecord; + +/* Catalog key for B*-Tree lookup in the catalog file */ +struct __attribute__ ((packed)) _HfsCatalogKey { + uint8_t key_length; /* length of the key without key_length */ + uint8_t reserved; + uint32_t parent_ID; + uint8_t name_length; + char name[31]; /* in fact physicaly 1 upto 31 */ +}; +typedef struct _HfsCatalogKey HfsCatalogKey; + +/* Extents overflow key for B*-Tree lookup */ +struct __attribute__ ((packed)) _HfsExtentKey { + uint8_t key_length; /* length of the key without key_length */ + uint8_t type; /* data or ressource fork */ + uint32_t file_ID; + uint16_t start; +}; +typedef struct _HfsExtentKey HfsExtentKey; + +/* Catalog subdata case directory */ +struct __attribute__ ((packed)) _HfsDir { + uint16_t flags; + uint16_t valence; /* number of files in this directory */ + uint32_t dir_ID; + uint32_t create_date; + uint32_t modify_date; + uint32_t backup_date; + int8_t DInfo[16]; /* used by Finder, handle as reserved */ + int8_t DXInfo[16]; /* used by Finder, handle as reserved */ + uint32_t reserved[4]; +}; +typedef struct _HfsDir HfsDir; + +/* Catalog subdata case file */ +struct __attribute__ ((packed)) _HfsFile { + int8_t flags; + int8_t type; /* should be 0 */ + int8_t FInfo[16]; /* used by Finder, handle as reserved */ + uint32_t file_ID; + uint16_t data_start_block; + uint32_t data_sz_byte; + uint32_t data_sz_block; + uint16_t res_start_block; + uint32_t res_sz_byte; + uint32_t res_sz_block; + uint32_t create_date; + uint32_t modify_date; + uint32_t backup_date; + int8_t FXInfo[16]; /* used by Finder, handle as reserved */ + uint16_t clump_size; + HfsExtDataRec extents_data; + HfsExtDataRec extents_res; + uint32_t reserved; +}; +typedef struct _HfsFile HfsFile; + +/* Catalog subdata case directory thread */ +struct __attribute__ ((packed)) _HfsDirTh { + uint32_t reserved[2]; + uint32_t parent_ID; + int8_t name_length; + char name[31]; +}; +typedef struct _HfsDirTh HfsDirTh; + +/* Catalog subdata case file thread */ +typedef struct _HfsDirTh HfsFileTh; /* same as directory thread */ + +/* Catalog data */ +struct __attribute__ ((packed)) _HfsCatalog { + int8_t type; + int8_t reserved; + union { + HfsDir dir; + HfsFile file; + HfsDirTh dir_th; + HfsFileTh file_th; + } sel; +}; +typedef struct _HfsCatalog HfsCatalog; + + + +/* ------------------------------------ */ +/* -- HFS+ DATA STRUCTURES -- */ +/* ------------------------------------ */ + +/* documented since 2004 in tn1150 */ +struct __attribute__ ((packed)) _HfsPPerms { + uint32_t owner_ID; + uint32_t group_ID; + uint32_t permissions; + uint32_t special_devices; +}; +typedef struct _HfsPPerms HfsPPerms; + +/* HFS+ extent descriptor*/ +struct __attribute__ ((packed)) _HfsPExtDescriptor { + uint32_t start_block; + uint32_t block_count; +}; +typedef struct _HfsPExtDescriptor HfsPExtDescriptor; +typedef HfsPExtDescriptor HfsPExtDataRec[HFSP_EXT_NB]; + +/* HFS+ fork data structure */ +struct __attribute__ ((packed)) _HfsPForkData { + uint64_t logical_size; + uint32_t clump_size; + uint32_t total_blocks; + HfsPExtDataRec extents; +}; +typedef struct _HfsPForkData HfsPForkData; + +/* HFS+ catalog node ID */ +typedef uint32_t HfsPNodeID; + +/* HFS+ file names */ +typedef uint16_t unichar; +struct __attribute__ ((packed)) _HfsPUniStr255 { + uint16_t length; + unichar unicode[255]; /* 1 upto 255 */ +}; +typedef struct _HfsPUniStr255 HfsPUniStr255; + +/* HFS+ volume header */ +struct __attribute__ ((packed)) _HfsPVolumeHeader { + uint16_t signature; + uint16_t version; + uint32_t attributes; + uint32_t last_mounted_version; + uint32_t journal_info_block; + + uint32_t create_date; + uint32_t modify_date; + uint32_t backup_date; + uint32_t checked_date; + + uint32_t file_count; + uint32_t dir_count; + + uint32_t block_size; + uint32_t total_blocks; + uint32_t free_blocks; + + uint32_t next_allocation; + uint32_t res_clump_size; + uint32_t data_clump_size; + HfsPNodeID next_catalog_ID; + + uint32_t write_count; + uint64_t encodings_bitmap; + + uint8_t finder_info[32]; + + HfsPForkData allocation_file; + HfsPForkData extents_file; + HfsPForkData catalog_file; + HfsPForkData attributes_file; + HfsPForkData startup_file; +}; +typedef struct _HfsPVolumeHeader HfsPVolumeHeader; + +/* HFS+ B-Tree Node Descriptor. Same as HFS btree. */ +struct __attribute__ ((packed)) _HfsPNodeDescriptor { + uint32_t next; + uint32_t previous; + int8_t type; + uint8_t height; + uint16_t rec_nb; + uint16_t reserved; +}; +typedef struct _HfsPNodeDescriptor HfsPNodeDescriptor; + +/* Header record of a whole HFS+ B-Tree. */ +struct __attribute__ ((packed)) _HfsPHeaderRecord { + uint16_t depth; + uint32_t root_node; + uint32_t leaf_records; + uint32_t first_leaf_node; + uint32_t last_leaf_node; + uint16_t node_size; + uint16_t max_key_len; + uint32_t total_nodes; + uint32_t free_nodes; /* same as hfs btree until here */ + uint16_t reserved1; + + uint32_t clump_size; + uint8_t btree_type; /* must be 0 for HFS+ B-Tree */ + uint8_t key_compare_type; /* hfsx => 0xCF = case folding */ + /* 0xBC = binary compare */ + /* otherwise, reserved */ + uint32_t attributes; + uint32_t reserved3[16]; +}; +typedef struct _HfsPHeaderRecord HfsPHeaderRecord; + +/* Catalog key for B-Tree lookup in the HFS+ catalog file */ +struct __attribute__ ((packed)) _HfsPCatalogKey { + uint16_t key_length; + HfsPNodeID parent_ID; + HfsPUniStr255 node_name; +}; +typedef struct _HfsPCatalogKey HfsPCatalogKey; + +/* HFS+ catalog subdata case dir */ +struct __attribute__ ((packed)) _HfsPDir { + uint16_t flags; + uint32_t valence; + HfsPNodeID dir_ID; + uint32_t create_date; + uint32_t modify_date; + uint32_t attrib_mod_date; + uint32_t access_date; + uint32_t backup_date; + HfsPPerms permissions; + int8_t DInfo[16]; /* used by Finder, handle as reserved */ + int8_t DXInfo[16]; /* used by Finder, handle as reserved */ + uint32_t text_encoding; + uint32_t reserved; +}; +typedef struct _HfsPDir HfsPDir; + +/* HFS+ catalog subdata case file */ +struct __attribute__ ((packed)) _HfsPFile { + uint16_t flags; + uint32_t reserved1; + HfsPNodeID file_ID; + uint32_t create_date; + uint32_t modify_date; + uint32_t attrib_mod_date; + uint32_t access_date; + uint32_t backup_date; + HfsPPerms permissions; + int8_t FInfo[16]; /* used by Finder, handle as reserved */ + int8_t FXInfo[16]; /* used by Finder, handle as reserved */ + uint32_t text_encoding; + uint32_t reserved2; + + HfsPForkData data_fork; + HfsPForkData res_fork; +}; +typedef struct _HfsPFile HfsPFile; + +/* HFS+ catalog subdata case thread */ +struct __attribute__ ((packed)) _HfsPThread { + int16_t reserved; + HfsPNodeID parent_ID; + HfsPUniStr255 node_name; +}; +typedef struct _HfsPThread HfsPDirTh; +typedef struct _HfsPThread HfsPFileTh; + +/* HFS+ Catalog leaf data */ +struct __attribute__ ((packed)) _HfsPCatalog { + int16_t type; + union { + HfsPDir dir; + HfsPFile file; + HfsPDirTh dir_th; + HfsPFileTh file_th; + } sel; +}; +typedef struct _HfsPCatalog HfsPCatalog; + +/* HFS+ extents file key */ +struct __attribute__ ((packed)) _HfsPExtentKey { + uint16_t key_length; + uint8_t type; + uint8_t pad; + HfsPNodeID file_ID; + uint32_t start; +}; +typedef struct _HfsPExtentKey HfsPExtentKey; + +/* extent file data is HfsPExtDataRec */ + +/* Fork data attribute file */ +struct __attribute__ ((packed)) _HfsPForkDataAttr { + uint32_t record_type; + uint32_t reserved; + union __attribute__ ((packed)) { + HfsPForkData fork; + HfsPExtDataRec extents; + } fork_res; +}; +typedef struct _HfsPForkDataAttr HfsPForkDataAttr; + + +/* ----------- Journal data structures ----------- */ + +/* Info block : stored in a block # defined in the VH */ +struct __attribute__ ((packed)) _HfsJJournalInfoBlock { + uint32_t flags; + uint32_t device_signature[8]; + uint64_t offset; + uint64_t size; + uint32_t reserved[32]; +}; +typedef struct _HfsJJournalInfoBlock HfsJJournalInfoBlock; + +struct __attribute__ ((packed)) _HfsJJournalHeader { + uint32_t magic; + uint32_t endian; + uint64_t start; + uint64_t end; + uint64_t size; + uint32_t blhdr_size; + uint32_t checksum; + uint32_t jhdr_size; +}; +typedef struct _HfsJJournalHeader HfsJJournalHeader; + +struct __attribute__ ((packed)) _HfsJBlockInfo { + uint64_t bnum; /* sector number */ + uint32_t bsize; /* size in bytes */ + uint32_t next; +}; +typedef struct _HfsJBlockInfo HfsJBlockInfo; + +struct __attribute__ ((packed)) _HfsJBlockListHeader { + uint16_t max_blocks; /* reserved */ + uint16_t num_blocks; + uint32_t bytes_used; + uint32_t checksum; + uint32_t pad; + HfsJBlockInfo binfo[]; +}; +typedef struct _HfsJBlockListHeader HfsJBlockListHeader; + + + +/* ---------------------------------------- */ +/* -- INTERNAL DATA STRUCTURES -- */ +/* ---------------------------------------- */ + +/* Data of an opened HFS file */ +struct _HfsPrivateFile { + PedSector sect_nb; + PedFileSystem* fs; + uint32_t CNID; /* disk order (BE) */ + HfsExtDataRec first; /* disk order (BE) */ + HfsExtDataRec cache; /* disk order (BE) */ + uint16_t start_cache; /* CPU order */ +}; +typedef struct _HfsPrivateFile HfsPrivateFile; + +/* To store bad block list */ +struct _HfsPrivateLinkExtent { + HfsExtDescriptor extent; + struct _HfsPrivateLinkExtent* next; +}; +typedef struct _HfsPrivateLinkExtent HfsPrivateLinkExtent; + +/* HFS Filesystem specific data */ +struct _HfsPrivateFSData { + uint8_t alloc_map[(1<<16) / 8]; + HfsMasterDirectoryBlock* mdb; + HfsPrivateFile* extent_file; + HfsPrivateFile* catalog_file; + HfsPrivateLinkExtent* bad_blocks_xtent_list; + unsigned int bad_blocks_xtent_nb; + char bad_blocks_loaded; +}; +typedef struct _HfsPrivateFSData HfsPrivateFSData; + +/* Generic btree key */ +struct __attribute__ ((packed)) _HfsPrivateGenericKey { + uint8_t key_length; + uint8_t key_content[1]; /* we use 1 as a minimum size */ +}; +typedef struct _HfsPrivateGenericKey HfsPrivateGenericKey; + +/* ----- HFS+ ----- */ + +/* Data of an opened HFS file */ +struct _HfsPPrivateFile { + PedSector sect_nb; + PedFileSystem* fs; + HfsPNodeID CNID; /* disk order (BE) */ + HfsPExtDataRec first; /* disk order (BE) */ + HfsPExtDataRec cache; /* disk order (BE) */ + uint32_t start_cache; /* CPU order */ +}; +typedef struct _HfsPPrivateFile HfsPPrivateFile; + +struct _HfsPPrivateExtent { + PedSector start_sector; + PedSector sector_count; +}; +typedef struct _HfsPPrivateExtent HfsPPrivateExtent; + +/* To store bad block list */ +struct _HfsPPrivateLinkExtent { + HfsPExtDescriptor extent; + struct _HfsPPrivateLinkExtent* next; +}; +typedef struct _HfsPPrivateLinkExtent HfsPPrivateLinkExtent; + +/* HFS+ file system specific data */ +struct _HfsPPrivateFSData { + PedFileSystem* wrapper; /* NULL if hfs+ is not embedded */ + PedGeometry* plus_geom; /* Geometry of HFS+ _volume_ */ + uint8_t* alloc_map; + uint8_t* dirty_alloc_map; + HfsPVolumeHeader* vh; + HfsPPrivateFile* extents_file; + HfsPPrivateFile* catalog_file; + HfsPPrivateFile* attributes_file; + HfsPPrivateFile* allocation_file; + HfsPPrivateLinkExtent* bad_blocks_xtent_list; + uint32_t jib_start_block; + uint32_t jl_start_block; + unsigned int bad_blocks_xtent_nb; + char bad_blocks_loaded; + char free_geom; /* 1 = plus_geom must be freed */ +}; +typedef struct _HfsPPrivateFSData HfsPPrivateFSData; + +/* Generic + btree key */ +struct __attribute__ ((packed)) _HfsPPrivateGenericKey { + uint16_t key_length; + uint8_t key_content[1]; /* we use 1 as a minimum size */ +}; +typedef struct _HfsPPrivateGenericKey HfsPPrivateGenericKey; + +/* ---- common ---- */ + +/* node and lead record reference for a BTree search */ +struct _HfsCPrivateLeafRec { + unsigned int node_size; /* in sectors */ + unsigned int node_number; + unsigned int record_pos; + unsigned int record_number; +}; +typedef struct _HfsCPrivateLeafRec HfsCPrivateLeafRec; + +extern uint8_t* hfs_block; +extern uint8_t* hfsp_block; +extern unsigned hfs_block_count; +extern unsigned hfsp_block_count; + +#endif /* _HFS_H */ diff --git a/jni/parted/libparted/fs/hfs/probe.c b/jni/parted/libparted/fs/hfs/probe.c new file mode 100755 index 0000000..d02ca28 --- /dev/null +++ b/jni/parted/libparted/fs/hfs/probe.c @@ -0,0 +1,238 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" + +#include "probe.h" + +int +hfsc_can_use_geom (PedGeometry* geom) +{ + PedDevice* dev; + + dev = geom->dev; + PED_ASSERT (geom != NULL); + PED_ASSERT (dev != NULL); + + if (dev->sector_size != PED_SECTOR_SIZE_DEFAULT) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Parted can't use HFS file systems on disks " + "with a sector size not equal to %d bytes."), + (int)PED_SECTOR_SIZE_DEFAULT ); + return 0; + } + + return 1; +} + +/* Probe an HFS volume, detecting it even if +it is in fact a wrapper to an HFS+ volume */ +/* Used by hfsplus_probe and hfs_probe */ +PedGeometry* +hfs_and_wrapper_probe (PedGeometry* geom) +{ + HfsMasterDirectoryBlock *mdb; + PedGeometry* geom_ret; + PedSector search, max; + + PED_ASSERT (geom != NULL); + PED_ASSERT (hfsc_can_use_geom (geom)); + + const int sectors = ((3 * 512) + geom->dev->sector_size - 1) / + geom->dev->sector_size; + char * buf = alloca (sectors * geom->dev->sector_size); + + mdb = (HfsMasterDirectoryBlock *)(buf+1024); + + /* is 5 an intelligent value ? */ + if ((geom->length < 5) + || (!ped_geometry_read (geom, buf, 0, sectors)) + || (mdb->signature != PED_CPU_TO_BE16 (HFS_SIGNATURE)) ) + return NULL; + + search = ((PedSector) PED_BE16_TO_CPU (mdb->start_block) + + ((PedSector) PED_BE16_TO_CPU (mdb->total_blocks) + * (PED_BE32_TO_CPU (mdb->block_size) / geom->dev->sector_size))); + max = search + (PED_BE32_TO_CPU (mdb->block_size) / geom->dev->sector_size); + if ((search < 0) + || !(geom_ret = ped_geometry_new (geom->dev, geom->start, search + 2))) + return NULL; + + for (; search < max; search++) { + if (!ped_geometry_set (geom_ret, geom_ret->start, search + 2) + || !ped_geometry_read (geom_ret, buf, search, 1)) + break; + if (mdb->signature == PED_CPU_TO_BE16 (HFS_SIGNATURE)) + return geom_ret; + } + + ped_geometry_destroy (geom_ret); + return NULL; +} + +PedGeometry* +hfsplus_probe (PedGeometry* geom) +{ + PedGeometry* geom_ret; + uint8_t buf[PED_SECTOR_SIZE_DEFAULT]; + + PED_ASSERT (geom != NULL); + + if (!hfsc_can_use_geom (geom)) + return NULL; + + if ((geom_ret = hfs_and_wrapper_probe(geom))) { + /* HFS+ is embedded in an HFS volume ? */ + HfsMasterDirectoryBlock *mdb; + mdb = (HfsMasterDirectoryBlock *) buf; + + if (!ped_geometry_read (geom, buf, 2, 1) + || (mdb->old_new.embedded.signature + != PED_CPU_TO_BE16 (HFSP_SIGNATURE))) { + ped_geometry_destroy (geom_ret); + return NULL; + } else + return geom_ret; + } else { + /* This is a standalone HFS+ volume ? */ + PedSector search, max; + HfsPVolumeHeader *vh; + vh = (HfsPVolumeHeader *) buf; + + if ((geom->length < 5) + || !ped_geometry_read (geom, buf, 2, 1) + || (vh->signature != PED_CPU_TO_BE16 (HFSP_SIGNATURE))) + return NULL; + + /* Correct range is indeed [ blocks*sz-2;(blocs+1)*sz-2 ( */ + /* But previous versions of my implementation used to */ + /* assume range is [(blocks-1)*sz-1;(blocks*sz) ( */ + /* (blocks-1)*sz-1 has to be scanned last, because */ + /* it can belong to a regular file */ + max = ((PedSector) PED_BE32_TO_CPU (vh->total_blocks) + 1) + * ( PED_BE32_TO_CPU (vh->block_size) / PED_SECTOR_SIZE_DEFAULT ) + - 2; + search = max - 2 * ( PED_BE32_TO_CPU (vh->block_size) + / PED_SECTOR_SIZE_DEFAULT ) + 2; + if ((search < 0) + || !(geom_ret = ped_geometry_new (geom->dev, geom->start, + search + 2))) + return NULL; + + for (; search < max; search++) { + if (!ped_geometry_set (geom_ret, geom_ret->start, + search + 2) + || !ped_geometry_read (geom_ret, buf, search, 1)) + break; + if (vh->signature == PED_CPU_TO_BE16 (HFSP_SIGNATURE)) + return geom_ret; + } + search = ((PedSector) PED_BE32_TO_CPU (vh->total_blocks) - 1) + * ( PED_BE32_TO_CPU (vh->block_size) / PED_SECTOR_SIZE_DEFAULT ) + - 1; + if ((search < 0) + || !ped_geometry_set (geom_ret, geom_ret->start, + search + 2) + || !ped_geometry_read (geom_ret, buf, search, 1) + || vh->signature != PED_CPU_TO_BE16 (HFSP_SIGNATURE)) { + ped_geometry_destroy (geom_ret); + return NULL; + } else + return geom_ret; + } +} + +PedGeometry* +hfs_probe (PedGeometry* geom) +{ + PedGeometry* geom_base; + PedGeometry* geom_plus = NULL; + + PED_ASSERT (geom != NULL); + + if (!hfsc_can_use_geom (geom)) + return NULL; + + if ((geom_base = hfs_and_wrapper_probe(geom)) + && (!(geom_plus = hfsplus_probe(geom_base)))) + return geom_base; + else { + if (geom_base) ped_geometry_destroy (geom_base); + if (geom_plus) ped_geometry_destroy (geom_plus); + return NULL; + } +} + +PedGeometry* +hfsx_probe (PedGeometry* geom) +{ + PedGeometry* geom_ret; + uint8_t buf[PED_SECTOR_SIZE_DEFAULT]; + PedSector search, max; + HfsPVolumeHeader *vh = (HfsPVolumeHeader *) buf; + + PED_ASSERT (geom != NULL); + + if (!hfsc_can_use_geom (geom)) + return NULL; + + if ((geom->length < 5) + || !ped_geometry_read (geom, buf, 2, 1) + || (vh->signature != PED_CPU_TO_BE16 (HFSX_SIGNATURE))) + return NULL; + + /* unlike the hfs+ code, which should be kept compatible + with my old previous implementations, we only care here + about legal alternate VH positions, like TN1150 describes them */ + max = ((PedSector) PED_BE32_TO_CPU (vh->total_blocks) + 1) + * ( PED_BE32_TO_CPU (vh->block_size) / PED_SECTOR_SIZE_DEFAULT ) + - 2; + search = max - ( PED_BE32_TO_CPU (vh->block_size) / PED_SECTOR_SIZE_DEFAULT ); + if ((search < 0) + || !(geom_ret = ped_geometry_new (geom->dev, geom->start, + search + 2))) + return NULL; + for (; search < max; search++) { + if (!ped_geometry_set (geom_ret, geom_ret->start, + search + 2) + || !ped_geometry_read (geom_ret, buf, search, 1)) + break; + if (vh->signature == PED_CPU_TO_BE16 (HFSX_SIGNATURE)) + return geom_ret; + } + + ped_geometry_destroy (geom_ret); + return NULL; +} diff --git a/jni/parted/libparted/fs/hfs/probe.h b/jni/parted/libparted/fs/hfs/probe.h new file mode 100755 index 0000000..29ce880 --- /dev/null +++ b/jni/parted/libparted/fs/hfs/probe.h @@ -0,0 +1,44 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef _PROBE_H +#define _PROBE_H + +#include +#include +#include + +#include "hfs.h" + +int +hfsc_can_use_geom (PedGeometry* geom); + +PedGeometry* +hfs_and_wrapper_probe (PedGeometry* geom); + +PedGeometry* +hfsplus_probe (PedGeometry* geom); + +PedGeometry* +hfs_probe (PedGeometry* geom); + +PedGeometry* +hfsx_probe (PedGeometry* geom); + +#endif /* _PROBE_H */ diff --git a/jni/parted/libparted/fs/jfs/jfs.c b/jni/parted/libparted/fs/jfs/jfs.c new file mode 100755 index 0000000..f00bd9f --- /dev/null +++ b/jni/parted/libparted/fs/jfs/jfs.c @@ -0,0 +1,80 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2001, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include + +#define _JFS_UTILITY +#include "jfs_types.h" +#include "jfs_superblock.h" + +#define JFS_SUPER_OFFSET 32768 + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +static PedGeometry* +jfs_probe (PedGeometry* geom) +{ + struct superblock *sb = alloca (geom->dev->sector_size); + + if (geom->length * geom->dev->sector_size < JFS_SUPER_OFFSET) + return NULL; + if (!ped_geometry_read (geom, sb, JFS_SUPER_OFFSET / geom->dev->sector_size, 1)) + return NULL; + + if (strncmp (sb->s_magic, JFS_MAGIC, 4) == 0) { + PedSector block_size = PED_LE32_TO_CPU (sb->s_pbsize); + PedSector block_count = PED_LE64_TO_CPU (sb->s_size); + /* apparently jfs is retarded and always claims 512 byte + sectors, with the block count as a multiple of that */ + return ped_geometry_new (geom->dev, geom->start, + block_size * block_count / geom->dev->sector_size); + } else { + return NULL; + } +} + +static PedFileSystemOps jfs_ops = { + probe: jfs_probe, +}; + +static PedFileSystemType jfs_type = { + next: NULL, + ops: &jfs_ops, + name: "jfs", +}; + +void +ped_file_system_jfs_init () +{ + ped_file_system_type_register (&jfs_type); +} + +void +ped_file_system_jfs_done () +{ + ped_file_system_type_unregister (&jfs_type); +} diff --git a/jni/parted/libparted/fs/jfs/jfs_superblock.h b/jni/parted/libparted/fs/jfs/jfs_superblock.h new file mode 100755 index 0000000..ea13dfb --- /dev/null +++ b/jni/parted/libparted/fs/jfs/jfs_superblock.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) International Business Machines Corp., 2000 + * + * 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 3 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, see . + * + */ +#ifndef _H_JFS_SUPERBLOCK +#define _H_JFS_SUPERBLOCK +/* + * jfs_superblock.h + */ + +/* + * make the magic number something a human could read + */ +#define JFS_MAGIC "JFS1" /* Magic word: Version 1 */ + +#define JFS_VERSION 1 /* Version number: Version 1 */ + +#define LV_NAME_SIZE 11 /* MUST BE 11 for OS/2 boot sector */ + +/* + * aggregate superblock + * + * The name superblock is too close to super_block, so the name has been + * changed to jfs_superblock. The utilities are still using the old name. + */ +#ifdef _JFS_UTILITY +struct superblock +#else +struct jfs_superblock +#endif +{ + char s_magic[4]; /* 4: magic number */ + u32 s_version; /* 4: version number */ + + s64 s_size; /* 8: aggregate size in hardware/LVM blocks; + * VFS: number of blocks + */ + s32 s_bsize; /* 4: aggregate block size in bytes; + * VFS: fragment size + */ + s16 s_l2bsize; /* 2: log2 of s_bsize */ + s16 s_l2bfactor; /* 2: log2(s_bsize/hardware block size) */ + s32 s_pbsize; /* 4: hardware/LVM block size in bytes */ + s16 s_l2pbsize; /* 2: log2 of s_pbsize */ + s16 pad; /* 2: padding necessary for alignment */ + + u32 s_agsize; /* 4: allocation group size in aggr. blocks */ + + u32 s_flag; /* 4: aggregate attributes: + * see jfs_filsys.h + */ + u32 s_state; /* 4: mount/unmount/recovery state: + * see jfs_filsys.h + */ + s32 s_compress; /* 4: > 0 if data compression */ + + pxd_t s_ait2; /* 8: first extent of secondary + * aggregate inode table + */ + + pxd_t s_aim2; /* 8: first extent of secondary + * aggregate inode map + */ + u32 s_logdev; /* 4: device address of log */ + s32 s_logserial; /* 4: log serial number at aggregate mount */ + pxd_t s_logpxd; /* 8: inline log extent */ + + pxd_t s_fsckpxd; /* 8: inline fsck work space extent */ + + struct timestruc_t s_time; /* 8: time last updated */ + + s32 s_fsckloglen; /* 4: Number of file system blocks reserved for + * the fsck service log. + * N.B. These blocks are divided among the + * versions kept. This is not a per + * version size. + * N.B. These blocks are included in the + * length field of s_fsckpxd. + */ + s8 s_fscklog; /* 1: which fsck service log is most recent + * 0 => no service log data yet + * 1 => the first one + * 2 => the 2nd one + */ + char s_fpack[11]; /* 11: file system volume name + * N.B. This must be 11 bytes to + * conform with the OS/2 BootSector + * requirements + */ + + /* extendfs() parameter under s_state & FM_EXTENDFS */ + s64 s_xsize; /* 8: extendfs s_size */ + pxd_t s_xfsckpxd; /* 8: extendfs fsckpxd */ + pxd_t s_xlogpxd; /* 8: extendfs logpxd */ + /* - 128 byte boundary - */ + + /* + * DFS VFS support (preliminary) + */ + char s_attach; /* 1: VFS: flag: set when aggregate is attached + */ + u8 rsrvd4[7]; /* 7: reserved - set to 0 */ + + u64 totalUsable; /* 8: VFS: total of 1K blocks which are + * available to "normal" (non-root) users. + */ + u64 minFree; /* 8: VFS: # of 1K blocks held in reserve for + * exclusive use of root. This value can be 0, + * and if it is then totalUsable will be equal + * to # of blocks in aggregate. I believe this + * means that minFree + totalUsable = # blocks. + * In that case, we don't need to store both + * totalUsable and minFree since we can compute + * one from the other. I would guess minFree + * would be the one we should store, and + * totalUsable would be the one we should + * compute. (Just a guess...) + */ + + u64 realFree; /* 8: VFS: # of free 1K blocks can be used by + * "normal" users. It may be this is something + * we should compute when asked for instead of + * storing in the superblock. I don't know how + * often this information is needed. + */ + /* + * graffiti area + */ +}; + +#endif /*_H_JFS_SUPERBLOCK */ diff --git a/jni/parted/libparted/fs/jfs/jfs_types.h b/jni/parted/libparted/fs/jfs/jfs_types.h new file mode 100755 index 0000000..0366ebd --- /dev/null +++ b/jni/parted/libparted/fs/jfs/jfs_types.h @@ -0,0 +1,527 @@ +/* + * Copyright (c) International Business Machines Corp., 2000 + * + * 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 3 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, see . + */ + +#ifndef _H_JFS_TYPES +#define _H_JFS_TYPES + +/* + * jfs_types.h: + * + * basic type/utility definitions + * + * note: this header file must be the 1st include file + * of JFS include list in all JFS .c file. + */ + +#ifdef _JFS_UTILITY +/* this is defined in asm/byteorder.h for i386, but + * is NOT defined in asm/byteorder.h for ppc (non-kernel). + * Until that is changed, we'll define it here. */ +#define __BYTEORDER_HAS_U64__ + +#include +//#include +typedef unsigned short UniChar; +#else +#include +#include +#include + +#ifndef _ULS_UNICHAR_DEFINED +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,3,0)) +typedef wchar_t UniChar; +#else +typedef unsigned short UniChar; +#endif +#define _ULS_UNICHAR_DEFINED +#endif +#endif +/* #include "endian24.h" */ + +/* + * primitive types + */ +#ifdef _JFS_UTILITY +typedef int8_t s8; +typedef uint8_t u8; +typedef int16_t s16; +typedef uint16_t u16; +typedef int32_t s32; +typedef uint32_t u32; +typedef int64_t s64; +typedef uint64_t u64; + +#ifndef _UINT_TYPES + /* unicode includes also define these */ +typedef u16 uint16; +typedef u32 uint32; +#define _UINT_TYPES +#endif + +typedef s8 int8; +typedef u8 uint8; +typedef s16 int16; +typedef s32 int32; +typedef s64 int64; +typedef u64 uint64; + +#endif /* _JFS_UTILITY */ +/* + * Holdovers from OS/2. Try to get away from using these altogether. + */ +typedef unsigned long ULONG; +typedef unsigned short USHORT; +typedef unsigned char UCHAR; +typedef void *PVOID; +#define MAXPATHLEN 255 + + +/* + * Almost identical to Linux's timespec, but not quite + */ +struct timestruc_t { + u32 tv_sec; + u32 tv_nsec; +}; + +/* + * handy + */ +#undef MIN +#define MIN(a,b) (((a)<(b))?(a):(b)) +#undef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#undef ROUNDUP +#define ROUNDUP(x, y) ( ((x) + ((y) - 1)) & ~((y) - 1) ) + +#define LEFTMOSTONE 0x80000000 +#define HIGHORDER 0x80000000u /* high order bit on */ +#define ONES 0xffffffffu /* all bit on */ + +typedef int boolean_t; +#define TRUE 1 +#define FALSE 0 + +/* + * logical xd (lxd) + */ +typedef struct { + unsigned len:24; + unsigned off1:8; + u32 off2; +} lxd_t; + +/* lxd_t field construction */ +#define LXDlength(lxd, length32) ( (lxd)->len = length32 ) +#define LXDoffset(lxd, offset64)\ +{\ + (lxd)->off1 = ((s64)offset64) >> 32;\ + (lxd)->off2 = (offset64) & 0xffffffff;\ +} + +/* lxd_t field extraction */ +#define lengthLXD(lxd) ( (lxd)->len ) +#define offsetLXD(lxd)\ + ( ((s64)((lxd)->off1)) << 32 | (lxd)->off2 ) + +/* lxd list */ +typedef struct { + s16 maxnlxd; + s16 nlxd; + lxd_t *lxd; +} lxdlist_t; + +/* + * physical xd (pxd) + */ +typedef struct { + unsigned len:24; + unsigned addr1:8; + u32 addr2; +} pxd_t; + +/* xd_t field construction */ + +#define PXDlength(pxd, length32) ((pxd)->len = __cpu_to_le24(length32)) +#define PXDaddress(pxd, address64)\ +{\ + (pxd)->addr1 = ((s64)address64) >> 32;\ + (pxd)->addr2 = __cpu_to_le32((address64) & 0xffffffff);\ +} + +/* xd_t field extraction */ +#define lengthPXD(pxd) __le24_to_cpu((pxd)->len) +#define addressPXD(pxd)\ + ( ((s64)((pxd)->addr1)) << 32 | __le32_to_cpu((pxd)->addr2)) + +/* pxd list */ +typedef struct { + s16 maxnpxd; + s16 npxd; + pxd_t pxd[8]; +} pxdlist_t; + + +/* + * data extent descriptor (dxd) + */ +typedef struct { + unsigned flag:8; /* 1: flags */ + unsigned rsrvd:24; /* 3: */ + u32 size; /* 4: size in byte */ + unsigned len:24; /* 3: length in unit of fsblksize */ + unsigned addr1:8; /* 1: address in unit of fsblksize */ + u32 addr2; /* 4: address in unit of fsblksize */ +} dxd_t; /* - 16 - */ + +/* dxd_t flags */ +#define DXD_INDEX 0x80 /* B+-tree index */ +#define DXD_INLINE 0x40 /* in-line data extent */ +#define DXD_EXTENT 0x20 /* out-of-line single extent */ +#define DXD_FILE 0x10 /* out-of-line file (inode) */ +#define DXD_CORRUPT 0x08 /* Inconsistency detected */ + +/* dxd_t field construction + * Conveniently, the PXD macros work for DXD + */ +#define DXDlength PXDlength +#define DXDaddress PXDaddress +#define lengthDXD lengthPXD +#define addressDXD addressPXD + +/* + * directory entry argument + */ +typedef struct component_name { + int namlen; + UniChar *name; +} component_t; + + +/* + * DASD limit information - stored in directory inode + */ +typedef struct dasd { + u8 thresh; /* Alert Threshold (in percent) */ + u8 delta; /* Alert Threshold delta (in percent) */ + u8 rsrvd1; + u8 limit_hi; /* DASD limit (in logical blocks) */ + u32 limit_lo; /* DASD limit (in logical blocks) */ + u8 rsrvd2[3]; + u8 used_hi; /* DASD usage (in logical blocks) */ + u32 used_lo; /* DASD usage (in logical blocks) */ +} dasd_t; + +#define DASDLIMIT(dasdp) \ + (((u64)((dasdp)->limit_hi) << 32) + __le32_to_cpu((dasdp)->limit_lo)) +#define setDASDLIMIT(dasdp, limit)\ +{\ + (dasdp)->limit_hi = ((u64)limit) >> 32;\ + (dasdp)->limit_lo = __cpu_to_le32(limit);\ +} +#define DASDUSED(dasdp) \ + (((u64)((dasdp)->used_hi) << 32) + __le32_to_cpu((dasdp)->used_lo)) +#define setDASDUSED(dasdp, used)\ +{\ + (dasdp)->used_hi = ((u64)used) >> 32;\ + (dasdp)->used_lo = __cpu_to_le32(used);\ +} + +/* + * circular doubly-linked list (cdll) + * + * A circular doubly-linked list (cdll) is anchored by a pair of pointers, + * one to the head of the list and the other to the tail of the list. + * The elements are doubly linked so that an arbitrary element can be + * removed without a need to traverse the list. + * New elements can be added to the list before or after an existing element, + * at the head of the list, or at the tail of the list. + * A circle queue may be traversed in either direction. + * + * +----------+ +-------------------------------------+ + * | | | | + * +->+-----+ | +->+-----+ +->+-----+ +->+-----+ | + * | | h +-+ | | h +--+ | n +----+ | n +--+ + * | +-----+ | +-----+ | +-----+ | +-----+ + * | | t +-+ +-----+ t | | | p +--+ | | p +--+ + * | +-----+ | | | +-----+ | +-----+ | | +-----+ | + * +----------+ | +-----------------------+ | | + * | | | | + * | +-------------------------+ + * | | + * +----------------------------+ + */ +/* + * define header + * + * list header field definition in header element: + * + * type - type of list element struct embedding the link field + */ +#define CDLL_HEADER(type)\ +struct {\ + struct type *head;\ + struct type *tail;\ +} + +struct cdll_header { + struct cdll_header *head; + struct cdll_header *tail; +}; + +/* + * define link + * + * list link field definition in list element: + * + * type - type of parent list element struct embedding the link field + */ +#define CDLL_ENTRY(type)\ +struct {\ + struct type *next;\ + struct type *prev;\ +} + +struct cdll_entry { + struct cdll_entry *next; + struct cdll_entry *prev; +}; + +/* + * initialize header + * + * header - ptr to the header field in the header element + */ +#define CDLL_INIT(header) {\ + (header)->head = (void *)(header);\ + (header)->tail = (void *)(header);\ +} + +/* + * scan list + * + * header - ptr to the header field in the header element + * elm - ptr to the element to be inserted + * field - name of the link field in the list element + * + * struct header_container *container; + * struct header_type *header; + * struct element_type *elm; + * + * header = &container->header_field; + * for (elm = header->head; elm != (void *)header; elm = elm->field.next) + */ + +/* + * insert at head of list anchored at
+ * + * header - ptr to the header field in the header element + * elm - ptr to the list element to be inserted + * field - name of the link field in the list element + */ +#define CDLL_INSERT_HEAD(header, elm, field) {\ + (elm)->field.next = (header)->head;\ + (elm)->field.prev = (void *)(header);\ + if ((header)->tail == (void *)(header))\ + (header)->tail = (elm);\ + else\ + (header)->head->field.prev = (elm);\ + (header)->head = (elm);\ +} + +/* + * insert at tail of list anchored at
+ * + * header - ptr to the header field in the header element + * elm - ptr to the list element to be inserted + * field - name of the link field in the list element + */ +#define CDLL_INSERT_TAIL(header, elm, field) {\ + (elm)->field.next = (void *)(header);\ + (elm)->field.prev = (header)->tail;\ + if ((header)->head == (void *)(header))\ + (header)->head = (elm);\ + else\ + (header)->tail->field.next = (elm);\ + (header)->tail = (elm);\ +} + +/* + * insert after of list anchored at
+ * + * header - ptr to the header field in the header element + * listelm - ptr to the list element at insertion point + * elm - ptr to the list element to be inserted + * field - name of the link field in the list element + */ +#define CDLL_INSERT_AFTER(header, listelm, elm, field) {\ + (elm)->field.next = (listelm)->field.next;\ + (elm)->field.prev = (listelm);\ + if ((listelm)->field.next == (void *)(header))\ + (header)->tail = (elm);\ + else\ + (listelm)->field.next->field.prev = (elm);\ + (listelm)->field.next = (elm);\ +} + +/* + * insert before of list anchored at
+ * + * header - ptr to the header field in the header element + * listelm - ptr to list element at insertion point + * elm - ptr to the element to be inserted + * field - name of the link field in the list element + */ +#define CDLL_INSERT_BEFORE(header, listelm, elm, field) {\ + (elm)->field.next = (listelm);\ + (elm)->field.prev = (listelm)->field.prev;\ + if ((listelm)->field.prev == (void *)(header))\ + (header)->head = (elm);\ + else\ + (listelm)->field.prev->field.next = (elm);\ + (listelm)->field.prev = (elm);\ +} + +/* + * remove from list anchored at
+ * + * header - ptr to the header field in the header element + * elm - ptr to the list element to be removed + * field - name of the link field in the list element + */ +#define CDLL_REMOVE(header, elm, field) {\ + if ((elm)->field.next == (void *)(header))\ + (header)->tail = (elm)->field.prev;\ + else\ + (elm)->field.next->field.prev = (elm)->field.prev;\ + if ((elm)->field.prev == (void *)(header))\ + (header)->head = (elm)->field.next;\ + else\ + (elm)->field.prev->field.next = (elm)->field.next;\ +} + +#define CDLL_MOVE_TO_HEAD(header, elm, field) {\ + if ((elm)->field.prev != (void *)(header))\ + {\ + if ((elm)->field.next == (void *)(header))\ + (header)->tail = (elm)->field.prev;\ + else\ + (elm)->field.next->field.prev = (elm)->field.prev;\ + (elm)->field.prev->field.next = (elm)->field.next;\ + (elm)->field.next = (header)->head;\ + (elm)->field.prev = (void *)(header);\ + (header)->head->field.prev = (elm);\ + (header)->head = (elm);\ + }\ +} + +#define CDLL_MOVE_TO_TAIL(header, elm, field) {\ + if ((elm)->field.next != (void *)(header))\ + {\ + (elm)->field.next->field.prev = (elm)->field.prev;\ + if ((elm)->field.prev == (void *)(header))\ + (header)->head = (elm)->field.next;\ + else\ + (elm)->field.prev->field.next = (elm)->field.next;\ + (elm)->field.next = (void *)(header);\ + (elm)->field.prev = (header)->tail;\ + (header)->tail->field.next = (elm);\ + (header)->tail = (elm);\ + }\ +} + +/* + * orphan list element + */ +#define CDLL_SELF(elm, field)\ + (elm)->field.next = (elm)->field.prev = (elm); + + +/* + * single head doubly-linked list + * + * A list is headed by a single head pointer. + * The elements are doubly linked so that an arbitrary element can be + * removed without a need to traverse the list. + * New elements can be added to the list at the head of the list, or + * after an existing element (NO insert at tail). + * A list may only be traversed in the forward direction. + * (note: the list is NULL terminated in next field.) + * + * +-----+ +->+-----+ +->+-----+ +->+-----+ + * | NULL| | | h +--+ | n +----+ | NULL| + * +-----+ | +-----+ | +-----+ +-----+ + * | | | p +--+ | p +--+ + * | | +-----+ | +-----+ | + * +-----------------------+ | + * | | + * +-------------------------+ + */ +#define LIST_HEADER(type)\ +struct {\ + struct type *head;\ +} + +#define LIST_ENTRY(type)\ +struct {\ + struct type *next;\ + struct type **prev;\ +} + +#define LIST_INIT(header) { (header)->head = NULL; } + +/* + * scan list + * + * header - ptr to the header (field in header element) + * elm - ptr to the element to be inserted + * field - name of the link field in list element + * + * struct header_container *container; + * struct header_type *header; + * struct element_type *elm; + * + * header = &container->header_field; + * for (elm = header->head; elm; elm = elm->field.next) + */ + +#define LIST_INSERT_HEAD(header, elm, field) {\ + if (((elm)->field.next = (header)->head) != NULL)\ + (header)->head->field.prev = &(elm)->field.next;\ + (header)->head = (elm);\ + (elm)->field.prev = &(header)->head;\ +} + +#define LIST_INSERT_AFTER(listelm, elm, field) {\ + if (((elm)->field.next = (listelm)->field.next) != NULL)\ + (listelm)->field.next->field.prev = &(elm)->field.next;\ + (listelm)->field.next = (elm);\ + (elm)->field.prev = &(listelm)->field.next;\ +} + +#define LIST_REMOVE(elm, field) {\ + if ((elm)->field.next != NULL)\ + (elm)->field.next->field.prev = (elm)->field.prev;\ + *(elm)->field.prev = (elm)->field.next;\ +} + +#define LIST_SELF(elm, field) {\ + (elm)->field.next = NULL;\ + (elm)->field.prev = &(elm)->field.next;\ +} + +#endif /* !_H_JFS_TYPES */ diff --git a/jni/parted/libparted/fs/linux_swap/linux_swap.c b/jni/parted/libparted/fs/linux_swap/linux_swap.c new file mode 100755 index 0000000..60100b0 --- /dev/null +++ b/jni/parted/libparted/fs/linux_swap/linux_swap.c @@ -0,0 +1,396 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2000, 2002, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/* It's a bit silly calling a swap partition a file system. Oh well... */ + +#include + +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include +#include + +#define SWAP_SPECIFIC(fs) ((SwapSpecific*) (fs->type_specific)) +#define BUFFER_SIZE 128 + +#define LINUXSWAP_BLOCK_SIZES ((int[2]){512, 0}) + +typedef struct { + char page_map[1]; +} SwapOldHeader; + +/* ripped from mkswap */ +typedef struct { + char bootbits[1024]; /* Space for disklabel etc. */ + uint32_t version; + uint32_t last_page; + uint32_t nr_badpages; + unsigned char sws_uuid[16]; + unsigned char sws_volume[16]; + uint32_t padding[117]; + uint32_t badpages[1]; +} SwapNewHeader; + +typedef struct { + union { + SwapNewHeader new; + SwapOldHeader old; + }* header; + + void* buffer; + int buffer_size; + + PedSector page_sectors; + unsigned int page_count; + unsigned int version; + unsigned int max_bad_pages; +} SwapSpecific; + +static PedFileSystemType _swap_v0_type; +static PedFileSystemType _swap_v1_type; +static PedFileSystemType _swap_swsusp_type; + +static PedFileSystem* _swap_v0_open (PedGeometry* geom); +static PedFileSystem* _swap_v1_open (PedGeometry* geom); +static PedFileSystem* _swap_swsusp_open (PedGeometry* geom); +static int swap_close (PedFileSystem* fs); + +static PedGeometry* +_generic_swap_probe (PedGeometry* geom, int kind) +{ + PedFileSystem* fs; + SwapSpecific* fs_info; + PedGeometry* probed_geom; + PedSector length; + + switch (kind) { + /* Check for old style swap partitions. */ + case 0: + fs = _swap_v0_open(geom); + break; + /* Check for new style swap partitions. */ + case 1: + fs = _swap_v1_open(geom); + break; + /* Check for swap partitions containing swsusp data. */ + case -1: + fs = _swap_swsusp_open(geom); + break; + /* Not reached. */ + default: + goto error; + } + + if (!fs) + goto error; + fs_info = SWAP_SPECIFIC (fs); + + if (fs_info->version) + length = fs_info->page_sectors * fs_info->page_count; + else + length = geom->length; + + probed_geom = ped_geometry_new (geom->dev, geom->start, length); + if (!probed_geom) + goto error_close_fs; + swap_close (fs); + return probed_geom; + +error_close_fs: + swap_close (fs); +error: + return NULL; +} + + +static int +swap_init (PedFileSystem* fs) +{ + SwapSpecific* fs_info = SWAP_SPECIFIC (fs); + + fs_info->page_sectors = getpagesize () / fs->geom->dev->sector_size; + fs_info->page_count = fs->geom->length / fs_info->page_sectors; + fs_info->version = 1; + fs_info->max_bad_pages = (getpagesize() + - sizeof (SwapNewHeader)) / 4; + + return ped_geometry_read (fs->geom, fs_info->header, + 0, fs_info->page_sectors); +} + + +static PedFileSystem* +swap_alloc (PedGeometry* geom) +{ + PedFileSystem* fs; + SwapSpecific* fs_info; + + fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem)); + if (!fs) + goto error; + + fs->type_specific = (SwapSpecific*) ped_malloc (sizeof (SwapSpecific)); + if (!fs->type_specific) + goto error_free_fs; + + fs_info = SWAP_SPECIFIC (fs); + fs_info->header = ped_malloc (PED_MAX(getpagesize(), geom->dev->sector_size)); + if (!fs_info->header) + goto error_free_type_specific; + + fs_info = SWAP_SPECIFIC (fs); + fs_info->buffer_size = getpagesize() * BUFFER_SIZE; + fs_info->buffer = ped_malloc (fs_info->buffer_size); + if (!fs_info->buffer) + goto error_free_header; + + fs->geom = ped_geometry_duplicate (geom); + if (!fs->geom) + goto error_free_buffer; + fs->type = &_swap_v1_type; + return fs; + +error_free_buffer: + free (fs_info->buffer); +error_free_header: + free (fs_info->header); +error_free_type_specific: + free (fs->type_specific); +error_free_fs: + free (fs); +error: + return NULL; +} + +static void +swap_free (PedFileSystem* fs) +{ + SwapSpecific* fs_info = SWAP_SPECIFIC (fs); + + free (fs_info->buffer); + free (fs_info->header); + free (fs->type_specific); + + ped_geometry_destroy (fs->geom); + free (fs); +} + +static PedFileSystem* +_swap_v0_open (PedGeometry* geom) +{ + PedFileSystem* fs; + SwapSpecific* fs_info; + const char* sig; + + fs = swap_alloc (geom); + if (!fs) + goto error; + swap_init (fs); + + fs_info = SWAP_SPECIFIC (fs); + if (!ped_geometry_read (fs->geom, fs_info->header, 0, + fs_info->page_sectors)) + goto error_free_fs; + + sig = ((char*) fs_info->header) + getpagesize() - 10; + if (strncmp (sig, "SWAP-SPACE", 10) == 0) { + fs_info->version = 0; + fs_info->page_count + = PED_MIN (fs->geom->length / fs_info->page_sectors, + 8 * (getpagesize() - 10)); + } else { + char _sig [11]; + + memcpy (_sig, sig, 10); + _sig [10] = 0; + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Unrecognised old style linux swap signature '%10s'."), _sig); + goto error_free_fs; + } + + fs->checked = 1; + return fs; + +error_free_fs: + swap_free (fs); +error: + return NULL; +} + +static PedFileSystem* +_swap_v1_open (PedGeometry* geom) +{ + PedFileSystem* fs; + SwapSpecific* fs_info; + const char* sig; + + fs = swap_alloc (geom); + if (!fs) + goto error; + if (!swap_init(fs)) + goto error_free_fs; + + fs_info = SWAP_SPECIFIC (fs); + + sig = ((char*) fs_info->header) + getpagesize() - 10; + if (strncmp (sig, "SWAPSPACE2", 10) == 0) { + fs_info->version = 1; + fs_info->page_count = fs_info->header->new.last_page; + } else { + char _sig [11]; + + memcpy (_sig, sig, 10); + _sig [10] = 0; + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Unrecognised new style linux swap signature '%10s'."), _sig); + goto error_free_fs; + } + + fs->checked = 1; + return fs; + +error_free_fs: + swap_free (fs); +error: + return NULL; +} + +static PedFileSystem* +_swap_swsusp_open (PedGeometry* geom) +{ + PedFileSystem* fs; + SwapSpecific* fs_info; + const char* sig; + + fs = swap_alloc (geom); + if (!fs) + goto error; + fs->type = &_swap_swsusp_type; + swap_init (fs); + + fs_info = SWAP_SPECIFIC (fs); + if (!ped_geometry_read (fs->geom, fs_info->header, 0, + fs_info->page_sectors)) + goto error_free_fs; + + sig = ((char*) fs_info->header) + getpagesize() - 10; + if (strncmp (sig, "S1SUSPEND", 9) == 0) { + fs_info->version = -1; + } else { + char _sig [10]; + + memcpy (_sig, sig, 9); + _sig [9] = 0; + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Unrecognised swsusp linux swap signature '%9s'."), _sig); + goto error_free_fs; + } + + fs->checked = 1; + return fs; + +error_free_fs: + swap_free (fs); +error: + return NULL; +} + +static int +swap_close (PedFileSystem* fs) +{ + swap_free (fs); + return 1; +} + +static PedGeometry* +_swap_v0_probe (PedGeometry* geom) { + return _generic_swap_probe (geom, 0); +} + +static PedGeometry* +_swap_v1_probe (PedGeometry* geom) { + return _generic_swap_probe (geom, 1); +} + +static PedGeometry* +_swap_swsusp_probe (PedGeometry* geom) { + return _generic_swap_probe (geom, -1); +} + +static PedFileSystemOps _swap_v0_ops = { + probe: _swap_v0_probe, +}; + +static PedFileSystemOps _swap_v1_ops = { + probe: _swap_v1_probe, +}; + +static PedFileSystemOps _swap_swsusp_ops = { + probe: _swap_swsusp_probe, +}; + +static PedFileSystemType _swap_v0_type = { + next: NULL, + ops: &_swap_v0_ops, + name: "linux-swap(v0)", +}; + +static PedFileSystemType _swap_v1_type = { + next: NULL, + ops: &_swap_v1_ops, + name: "linux-swap(v1)", +}; + +static PedFileSystemType _swap_swsusp_type = { + next: NULL, + ops: &_swap_swsusp_ops, + name: "swsusp", +}; + +void +ped_file_system_linux_swap_init () +{ + ped_file_system_type_register (&_swap_v0_type); + ped_file_system_type_register (&_swap_v1_type); + ped_file_system_type_register (&_swap_swsusp_type); + + ped_file_system_alias_register (&_swap_v0_type, "linux-swap(old)", 1); + ped_file_system_alias_register (&_swap_v1_type, "linux-swap(new)", 1); + ped_file_system_alias_register (&_swap_v1_type, "linux-swap", 0); +} + +void +ped_file_system_linux_swap_done () +{ + ped_file_system_alias_unregister (&_swap_v0_type, "linux-swap(old)"); + ped_file_system_alias_unregister (&_swap_v1_type, "linux-swap(new)"); + ped_file_system_alias_unregister (&_swap_v1_type, "linux-swap"); + + ped_file_system_type_unregister (&_swap_v0_type); + ped_file_system_type_unregister (&_swap_v1_type); + ped_file_system_type_unregister (&_swap_swsusp_type); +} diff --git a/jni/parted/libparted/fs/nilfs2/nilfs2.c b/jni/parted/libparted/fs/nilfs2/nilfs2.c new file mode 100755 index 0000000..6204542 --- /dev/null +++ b/jni/parted/libparted/fs/nilfs2/nilfs2.c @@ -0,0 +1,155 @@ +/* + * nilfs2.c - New Implementation of Log filesystem + * + * Written by Jiro SEKIBA + * + * Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc. + * + * 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 3 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, see . + */ + +#include + +#include +#include +#include + +/* Magic value for nilfs2 superblock. */ +#define NILFS2_SUPER_MAGIC 0x3434 + +/* primariy superblock offset in 512bytes blocks. */ +#define NILFS_SB_OFFSET 2 + +/* secondary superblock offset in 512byte blocks. */ +#define NILFS_SB2_OFFSET(devsize) ((((devsize)>>3) - 1) << 3) + +struct __attribute__ ((packed)) nilfs2_super_block { + uint32_t s_rev_level; + uint16_t s_minor_rev_level; + uint16_t s_magic; + uint16_t s_bytes; + uint16_t s_flags; + uint32_t s_crc_seed; + uint32_t s_sum; + uint32_t s_log_block_size; + uint64_t s_nsegments; + uint64_t s_dev_size; + uint64_t s_first_data_block; + uint32_t s_blocks_per_segment; + uint32_t s_r_segments_percentage; + uint64_t s_last_cno; + uint64_t s_last_pseg; + uint64_t s_last_seq; + uint64_t s_free_blocks_count; + uint64_t s_ctime; + uint64_t s_mtime; + uint64_t s_wtime; + uint16_t s_mnt_count; + uint16_t s_max_mnt_count; + uint16_t s_state; + uint16_t s_errors; + uint64_t s_lastcheck; + uint32_t s_checkinterval; + uint32_t s_creator_os; + uint16_t s_def_resuid; + uint16_t s_def_resgid; + uint32_t s_first_ino; + uint16_t s_inode_size; + uint16_t s_dat_entry_size; + uint16_t s_checkpoint_size; + uint16_t s_segment_usage_size; + uint8_t s_uuid[16]; + char s_volume_name[80]; + uint32_t s_c_interval; + uint32_t s_c_block_max; + uint32_t s_reserved[192]; +}; + +static int +is_valid_nilfs_sb(struct nilfs2_super_block *sb) +{ + static unsigned char sum[4]; + const int sumoff = offsetof (struct nilfs2_super_block, s_sum); + size_t bytes; + uint32_t crc; + + if (PED_LE16_TO_CPU(sb->s_magic) != NILFS2_SUPER_MAGIC) + return 0; + + bytes = PED_LE16_TO_CPU(sb->s_bytes); + if (bytes > 1024 || bytes < sumoff - 4) + return 0; + + crc = __efi_crc32(sb, sumoff, PED_LE32_TO_CPU(sb->s_crc_seed)); + crc = __efi_crc32(sum, 4, crc); + crc = __efi_crc32((unsigned char *)sb + sumoff + 4, + bytes - sumoff - 4, crc); + + return crc == PED_LE32_TO_CPU(sb->s_sum); +} + +PedGeometry* +nilfs2_probe (PedGeometry* geom) +{ + struct nilfs2_super_block *sb = NULL; + struct nilfs2_super_block *sb2 = NULL; + PedSector length = geom->length * (geom->dev->sector_size / 512); + + PedSector sb2off = NILFS_SB2_OFFSET(length) / (geom->dev->sector_size / 512); + if (sb2off <= 2) + return NULL; + const int sectors = (4096 + geom->dev->sector_size - 1) / + geom->dev->sector_size; + uint8_t *buf = alloca (sectors * geom->dev->sector_size); + const int sectors2 = (1024 + geom->dev->sector_size -1 ) / + geom->dev->sector_size; + void *buff2 = alloca (sectors2 * geom->dev->sector_size); + + if (ped_geometry_read(geom, buf, 0, sectors)) + sb = (struct nilfs2_super_block*)(buf + 1024); + if (ped_geometry_read(geom, buff2, sb2off, sectors2)) + sb2 = (struct nilfs2_super_block*)buff2; + + if ((!sb || !is_valid_nilfs_sb(sb)) && + (!sb2 || !is_valid_nilfs_sb(sb2))) + return NULL; + + /* reserve 4k bytes for secondary superblock */ + length = sb2off + ((4096 + geom->dev->sector_size - 1) / + geom->dev->sector_size); + + return ped_geometry_new(geom->dev, geom->start, length); +} + +static PedFileSystemOps nilfs2_ops = { + probe: nilfs2_probe, +}; + +static PedFileSystemType nilfs2_type = { + next: NULL, + ops: &nilfs2_ops, + name: "nilfs2", +}; + +void +ped_file_system_nilfs2_init () +{ + ped_file_system_type_register (&nilfs2_type); +} + +void +ped_file_system_nilfs2_done () +{ + ped_file_system_type_unregister (&nilfs2_type); +} diff --git a/jni/parted/libparted/fs/ntfs/ntfs.c b/jni/parted/libparted/fs/ntfs/ntfs.c new file mode 100755 index 0000000..9829f39 --- /dev/null +++ b/jni/parted/libparted/fs/ntfs/ntfs.c @@ -0,0 +1,73 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include + +#define NTFS_SIGNATURE "NTFS" + +PedGeometry* +ntfs_probe (PedGeometry* geom) +{ + uint8_t *buf = alloca(geom->dev->sector_size); + PedGeometry *newg = NULL; + + if (!ped_geometry_read(geom, buf, 0, 1)) + return 0; + + if (strncmp (NTFS_SIGNATURE, ((char *)buf + 3), strlen (NTFS_SIGNATURE)) == 0) { + uint64_t length; + memcpy(&length, buf + 0x28, sizeof(uint64_t)); + newg = ped_geometry_new (geom->dev, geom->start, length); + } + return newg; +} + +static PedFileSystemOps ntfs_ops = { + probe: ntfs_probe, +}; + +static PedFileSystemType ntfs_type = { + next: NULL, + ops: &ntfs_ops, + name: "ntfs", +}; + +void +ped_file_system_ntfs_init () +{ + ped_file_system_type_register (&ntfs_type); +} + +void +ped_file_system_ntfs_done () +{ + ped_file_system_type_unregister (&ntfs_type); +} diff --git a/jni/parted/libparted/fs/r/fat/bootsector.c b/jni/parted/libparted/fs/r/fat/bootsector.c new file mode 100755 index 0000000..85ccc0f --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/bootsector.c @@ -0,0 +1,441 @@ +/* + libparted + Copyright (C) 1998-2000, 2002, 2004, 2007, 2009-2014, 2019-2023 Free + Software Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include "fat.h" + +#include +#include +#include +#include +#include +#include +#include + +/* Reads in the boot sector (superblock), and does a minimum of sanity + * checking. The goals are: + * - to detect fat file systems, even if they are damaged [i.e. not + * return an error / throw an exception] + * - to fail detection if there's not enough information for + * fat_boot_sector_probe_type() to work (or possibly crash on a divide-by-zero) + */ +int +fat_boot_sector_read (FatBootSector** bsp, const PedGeometry *geom) +{ + PED_ASSERT (bsp != NULL); + PED_ASSERT (geom != NULL); + + if (!ped_geometry_read_alloc (geom, (void **)bsp, 0, 1)) + return 0; + FatBootSector *bs = *bsp; + if (PED_LE16_TO_CPU (bs->boot_sign) != 0xAA55) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid signature for a FAT " + "file system.")); + return 0; + } + + if (!bs->sector_size + || PED_LE16_TO_CPU (bs->sector_size) % PED_SECTOR_SIZE_DEFAULT) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid sector size for a FAT " + "file system.")); + return 0; + } + + if (!bs->cluster_size) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid cluster size for a FAT " + "file system.")); + return 0; + } + + if (!bs->reserved) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid number of reserved " + "sectors for a FAT file system.")); + return 0; + } + + if (bs->fats < 1 || bs->fats > 4) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("File system has an invalid number of FATs.")); + return 0; + } + + return 1; +} + +/* + Don't trust the FAT12, FAT16 or FAT32 label string. + */ +FatType _GL_ATTRIBUTE_PURE +fat_boot_sector_probe_type (const FatBootSector* bs, const PedGeometry* geom) +{ + PedSector logical_sector_size; + PedSector first_cluster_sector; + FatCluster cluster_count; + + if (!PED_LE16_TO_CPU (bs->dir_entries)) + return FAT_TYPE_FAT32; + + logical_sector_size = PED_LE16_TO_CPU (bs->sector_size) / 512; + + first_cluster_sector + = PED_LE16_TO_CPU (bs->reserved) * logical_sector_size + + 2 * PED_LE16_TO_CPU (bs->fat_length) * logical_sector_size + + PED_LE16_TO_CPU (bs->dir_entries) + / (512 / sizeof (FatDirEntry)); + cluster_count = (geom->length - first_cluster_sector) + / bs->cluster_size / logical_sector_size; + if (cluster_count > MAX_FAT12_CLUSTERS) + return FAT_TYPE_FAT16; + else + return FAT_TYPE_FAT12; +} + +/* Analyses the boot sector, and sticks appropriate numbers in + fs->type_specific. + + Note: you need to subtract (2 * cluster_sectors) off cluster offset, + because the first cluster is number 2. (0 and 1 are not real clusters, + and referencing them is a bug) + */ +int +fat_boot_sector_analyse (FatBootSector* bs, PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + int fat_entry_size; + + PED_ASSERT (bs != NULL); + + fs_info->logical_sector_size = PED_LE16_TO_CPU (bs->sector_size) / 512; + + fs_info->sectors_per_track = PED_LE16_TO_CPU (bs->secs_track); + fs_info->heads = PED_LE16_TO_CPU (bs->heads); + if (fs_info->sectors_per_track < 1 || fs_info->sectors_per_track > 63 + || fs_info->heads < 1 || fs_info->heads > 255) { + PedCHSGeometry* bios_geom = &fs->geom->dev->bios_geom; + int cyl_count = 0; + + if (fs_info->heads > 0 && fs_info->sectors_per_track > 0) + cyl_count = fs->geom->dev->length / fs_info->heads + / fs_info->sectors_per_track; + + switch (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_FIX + PED_EXCEPTION_IGNORE + + PED_EXCEPTION_CANCEL, + _("The file system's CHS geometry is (%d, %d, %d), " + "which is invalid. The partition table's CHS " + "geometry is (%d, %d, %d). If you select Ignore, " + "the file system's CHS geometry will be left " + "unchanged. If you select Fix, the file system's " + "CHS geometry will be set to match the partition " + "table's CHS geometry."), + cyl_count, fs_info->heads, fs_info->sectors_per_track, + bios_geom->cylinders, bios_geom->heads, + bios_geom->sectors)) { + + case PED_EXCEPTION_FIX: + fs_info->sectors_per_track = bios_geom->sectors; + fs_info->heads = bios_geom->heads; + bs->secs_track + = PED_CPU_TO_LE16 (fs_info->sectors_per_track); + bs->heads = PED_CPU_TO_LE16 (fs_info->heads); + if (!fat_boot_sector_write (bs, fs)) + return 0; + break; + + case PED_EXCEPTION_CANCEL: + return 0; + + case PED_EXCEPTION_IGNORE: + break; + + default: + break; + } + } + + if (bs->sectors) + fs_info->sector_count = PED_LE16_TO_CPU (bs->sectors) + * fs_info->logical_sector_size; + else + fs_info->sector_count = PED_LE32_TO_CPU (bs->sector_count) + * fs_info->logical_sector_size; + + fs_info->fat_table_count = bs->fats; + fs_info->root_dir_entry_count = PED_LE16_TO_CPU (bs->dir_entries); + fs_info->fat_offset = PED_LE16_TO_CPU (bs->reserved) + * fs_info->logical_sector_size; + fs_info->cluster_sectors = bs->cluster_size + * fs_info->logical_sector_size; + fs_info->cluster_size = fs_info->cluster_sectors * 512; + + if (fs_info->logical_sector_size == 0) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("FAT boot sector says logical sector size is 0. " + "This is weird. ")); + return 0; + } + if (fs_info->fat_table_count == 0) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("FAT boot sector says there are no FAT tables. This " + "is weird. ")); + return 0; + } + if (fs_info->cluster_sectors == 0) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("FAT boot sector says clusters are 0 sectors. This " + "is weird. ")); + return 0; + } + + fs_info->fat_type = fat_boot_sector_probe_type (bs, fs->geom); + if (fs_info->fat_type == FAT_TYPE_FAT12) { + ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("File system is FAT12, which is unsupported.")); + return 0; + } + if (fs_info->fat_type == FAT_TYPE_FAT16) { + fs_info->fat_sectors = PED_LE16_TO_CPU (bs->fat_length) + * fs_info->logical_sector_size; + fs_info->serial_number + = PED_LE32_TO_CPU (bs->u.fat16.serial_number); + fs_info->root_cluster = 0; + fs_info->root_dir_offset + = fs_info->fat_offset + + fs_info->fat_sectors * fs_info->fat_table_count; + fs_info->root_dir_sector_count + = fs_info->root_dir_entry_count * sizeof (FatDirEntry) + / (512 * fs_info->logical_sector_size); + fs_info->cluster_offset + = fs_info->root_dir_offset + + fs_info->root_dir_sector_count; + } + if (fs_info->fat_type == FAT_TYPE_FAT32) { + fs_info->fat_sectors = PED_LE32_TO_CPU (bs->u.fat32.fat_length) + * fs_info->logical_sector_size; + fs_info->serial_number + = PED_LE32_TO_CPU (bs->u.fat32.serial_number); + fs_info->info_sector_offset + = PED_LE16_TO_CPU (fs_info->boot_sector->u.fat32.info_sector) + * fs_info->logical_sector_size; + fs_info->boot_sector_backup_offset + = PED_LE16_TO_CPU (fs_info->boot_sector->u.fat32.backup_sector) + * fs_info->logical_sector_size; + fs_info->root_cluster + = PED_LE32_TO_CPU (bs->u.fat32.root_dir_cluster); + fs_info->root_dir_offset = 0; + fs_info->root_dir_sector_count = 0; + fs_info->cluster_offset + = fs_info->fat_offset + + fs_info->fat_sectors * fs_info->fat_table_count; + } + + fs_info->cluster_count + = (fs_info->sector_count - fs_info->cluster_offset) + / fs_info->cluster_sectors; + + fat_entry_size = fat_table_entry_size (fs_info->fat_type); + if (fs_info->cluster_count + 2 + > fs_info->fat_sectors * 512 / fat_entry_size) + fs_info->cluster_count + = fs_info->fat_sectors * 512 / fat_entry_size - 2; + + fs_info->dir_entries_per_cluster + = fs_info->cluster_size / sizeof (FatDirEntry); + return 1; +} + +#ifndef DISCOVER_ONLY +int +fat_boot_sector_set_boot_code (FatBootSector** bsp, const PedFileSystem* fs) +{ + PED_ASSERT (bsp != NULL); + *bsp = ped_malloc (fs->geom->dev->sector_size); + FatBootSector *bs = *bsp; + PED_ASSERT (bs != NULL); + + memset (bs, 0, 512); + memcpy (bs->boot_jump, FAT_BOOT_JUMP, 3); + PED_ASSERT (sizeof(FAT_BOOT_CODE) < sizeof(bs->u.fat32.boot_code)); + strcpy (bs->u.fat32.boot_code, FAT_BOOT_CODE); + return 1; +} + +int +fat_boot_sector_generate (FatBootSector** bsp, const PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (bsp != NULL); + FatBootSector *bs = *bsp; + PED_ASSERT (bs != NULL); + + memcpy (bs->system_id, "MSWIN4.1", 8); + bs->sector_size = PED_CPU_TO_LE16 (fs_info->logical_sector_size * 512); + bs->cluster_size = fs_info->cluster_sectors + / fs_info->logical_sector_size; + bs->reserved = PED_CPU_TO_LE16 (fs_info->fat_offset + / fs_info->logical_sector_size); + bs->fats = fs_info->fat_table_count; + + bs->dir_entries = (fs_info->fat_type == FAT_TYPE_FAT16) + ? PED_CPU_TO_LE16 (fs_info->root_dir_entry_count) + : 0; + + if (fs_info->sector_count / fs_info->logical_sector_size > 0xffff + || fs_info->fat_type == FAT_TYPE_FAT32) { + bs->sectors = 0; + bs->sector_count = PED_CPU_TO_LE32 (fs_info->sector_count + / fs_info->logical_sector_size); + } else { + bs->sectors = PED_CPU_TO_LE16 (fs_info->sector_count + / fs_info->logical_sector_size); + bs->sector_count = 0; + } + + bs->media = 0xf8; + + bs->secs_track = PED_CPU_TO_LE16 (fs_info->sectors_per_track); + bs->heads = PED_CPU_TO_LE16 (fs_info->heads); + bs->hidden = PED_CPU_TO_LE32 (fs->geom->start); + + if (fs_info->fat_type == FAT_TYPE_FAT32) { + bs->fat_length = 0; + bs->u.fat32.fat_length = PED_CPU_TO_LE32 (fs_info->fat_sectors + / fs_info->logical_sector_size); + bs->u.fat32.flags = 0; /* FIXME: what the hell are these? */ + bs->u.fat32.version = 0; /* must be 0, for Win98 bootstrap */ + bs->u.fat32.root_dir_cluster + = PED_CPU_TO_LE32 (fs_info->root_cluster); + bs->u.fat32.info_sector + = PED_CPU_TO_LE16 (fs_info->info_sector_offset + / fs_info->logical_sector_size); + bs->u.fat32.backup_sector + = PED_CPU_TO_LE16 (fs_info->boot_sector_backup_offset + / fs_info->logical_sector_size); + + bs->u.fat32.drive_num = 0x80; /* _ALWAYS_ 0x80. silly DOS */ + + memset (bs->u.fat32.empty_1, 0, 12); + + bs->u.fat32.ext_signature = 0x29; + bs->u.fat32.serial_number + = PED_CPU_TO_LE32 (fs_info->serial_number); + memcpy (bs->u.fat32.volume_name, "NO NAME ", 11); + memcpy (bs->u.fat32.fat_name, "FAT32 ", 8); + } else { + bs->fat_length + = PED_CPU_TO_LE16 (fs_info->fat_sectors + / fs_info->logical_sector_size); + + bs->u.fat16.drive_num = 0x80; /* _ALWAYS_ 0x80. silly DOS */ + + bs->u.fat16.ext_signature = 0x29; + bs->u.fat16.serial_number + = PED_CPU_TO_LE32 (fs_info->serial_number); + memcpy (bs->u.fat16.volume_name, "NO NAME ", 11); + memcpy (bs->u.fat16.fat_name, "FAT16 ", 8); + } + + bs->boot_sign = PED_CPU_TO_LE16 (0xaa55); + + return 1; +} + +int +fat_boot_sector_write (const FatBootSector* bs, PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (bs != NULL); + + if (!ped_geometry_write (fs->geom, bs, 0, 1)) + return 0; + if (fs_info->fat_type == FAT_TYPE_FAT32) { + if (!ped_geometry_write (fs->geom, bs, + fs_info->boot_sector_backup_offset, 1)) + return 0; + } + return ped_geometry_sync (fs->geom); +} + +int +fat_info_sector_read (FatInfoSector** isp, const PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + int status; + + PED_ASSERT (isp != NULL); + + if (!ped_geometry_read_alloc (fs->geom, (void **)isp, fs_info->info_sector_offset, 1)) + return 0; + FatInfoSector *is = *isp; + if (PED_LE32_TO_CPU (is->signature_2) != FAT32_INFO_MAGIC2) { + status = ped_exception_throw (PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("The information sector has the wrong " + "signature (%x). Select cancel for now, " + "and send in a bug report. If you're " + "desperate, it's probably safe to ignore."), + PED_LE32_TO_CPU (is->signature_2)); + if (status == PED_EXCEPTION_CANCEL) return 0; + } + return 1; +} + +int +fat_info_sector_generate (FatInfoSector** isp, const PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (isp != NULL); + *isp = ped_malloc (fs->geom->dev->sector_size); + FatInfoSector *is = *isp; + + fat_table_count_stats (fs_info->fat); + + memset (is, 0, 512); + + is->signature_1 = PED_CPU_TO_LE32 (FAT32_INFO_MAGIC1); + is->signature_2 = PED_CPU_TO_LE32 (FAT32_INFO_MAGIC2); + is->free_clusters = PED_CPU_TO_LE32 (fs_info->fat->free_cluster_count); + is->next_cluster = PED_CPU_TO_LE32 (fs_info->fat->last_alloc); + is->signature_3 = PED_CPU_TO_LE16 (FAT32_INFO_MAGIC3); + + return 1; +} + +int +fat_info_sector_write (const FatInfoSector* is, PedFileSystem *fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (is != NULL); + + if (!ped_geometry_write (fs->geom, is, fs_info->info_sector_offset, 1)) + return 0; + return ped_geometry_sync (fs->geom); +} +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/fat/bootsector.h b/jni/parted/libparted/fs/r/fat/bootsector.h new file mode 100755 index 0000000..699d6cf --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/bootsector.h @@ -0,0 +1,130 @@ +/* + libparted + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef PED_FAT_BOOTSECTOR_H +#define PED_FAT_BOOTSECTOR_H + +typedef struct _FatBootSector FatBootSector; +typedef struct _FatInfoSector FatInfoSector; + +#include "fat.h" + +#define FAT32_INFO_MAGIC1 0x41615252 +#define FAT32_INFO_MAGIC2 0x61417272 +#define FAT32_INFO_MAGIC3 0xaa55 + +/* stolen from mkdosfs, by Dave Hudson */ + +#define FAT_BOOT_MESSAGE \ +"This partition does not have an operating system loader installed on it.\n\r"\ +"Press a key to reboot..." + +#define FAT_BOOT_JUMP "\xeb\x58\x90" /* jmp +5a */ + +#define FAT_BOOT_CODE "\x0e" /* push cs */ \ + "\x1f" /* pop ds */ \ + "\xbe\x74\x7e" /* mov si, offset message */ \ + /* write_msg_loop: */ \ + "\xac" /* lodsb */ \ + "\x22\xc0" /* and al, al */ \ + "\x74\x06" /* jz done (+8) */ \ + "\xb4\x0e" /* mov ah, 0x0e */ \ + "\xcd\x10" /* int 0x10 */ \ + "\xeb\xf5" /* jmp write_msg_loop */ \ + /* done: */ \ + "\xb4\x00" /* mov ah, 0x00 */ \ + "\xcd\x16" /* int 0x16 */ \ + "\xb4\x00" /* mov ah, 0x00 */ \ + "\xcd\x19" /* int 0x19 */ \ + "\xeb\xfe" /* jmp +0 - in case int 0x19 */ \ + /* doesn't work */ \ + /* message: */ \ + FAT_BOOT_MESSAGE + +struct __attribute__ ((packed)) _FatBootSector { + uint8_t boot_jump[3]; /* 00: Boot strap short or near jump */ + uint8_t system_id[8]; /* 03: system name */ + uint16_t sector_size; /* 0b: bytes per logical sector */ + uint8_t cluster_size; /* 0d: sectors/cluster */ + uint16_t reserved; /* 0e: reserved sectors */ + uint8_t fats; /* 10: number of FATs */ + uint16_t dir_entries; /* 11: number of root directory entries */ + uint16_t sectors; /* 13: if 0, total_sect supersedes */ + uint8_t media; /* 15: media code */ + uint16_t fat_length; /* 16: sectors/FAT for FAT12/16 */ + uint16_t secs_track; /* 18: sectors per track */ + uint16_t heads; /* 1a: number of heads */ + uint32_t hidden; /* 1c: hidden sectors (partition start) */ + uint32_t sector_count; /* 20: no. of sectors (if sectors == 0) */ + + union __attribute__ ((packed)) { + /* FAT16 fields */ + struct __attribute__ ((packed)) { + uint8_t drive_num; /* 24: */ + uint8_t empty_1; /* 25: */ + uint8_t ext_signature; /* 26: always 0x29 */ + uint32_t serial_number; /* 27: */ + uint8_t volume_name [11]; /* 2b: */ + uint8_t fat_name [8]; /* 36: */ + uint8_t boot_code[448]; /* 3f: Boot code (or message) */ + } fat16; + /* FAT32 fields */ + struct __attribute__ ((packed)) { + uint32_t fat_length; /* 24: size of FAT in sectors */ + uint16_t flags; /* 28: bit8: fat mirroring, low4: active fat */ + uint16_t version; /* 2a: minor * 256 + major */ + uint32_t root_dir_cluster; /* 2c: */ + uint16_t info_sector; /* 30: */ + uint16_t backup_sector; /* 32: */ + uint8_t empty_1 [12]; /* 34: */ + uint16_t drive_num; /* 40: */ + uint8_t ext_signature; /* 42: always 0x29 */ + uint32_t serial_number; /* 43: */ + uint8_t volume_name [11]; /* 47: */ + uint8_t fat_name [8]; /* 52: */ + uint8_t boot_code[420]; /* 5a: Boot code (or message) */ + } fat32; + } u; + + uint16_t boot_sign; /* 1fe: always 0xAA55 */ +}; + +struct __attribute__ ((packed)) _FatInfoSector { + uint32_t signature_1; /* should be 0x41615252 */ + uint8_t unused [480]; + uint32_t signature_2; /* should be 0x61417272 */ + uint32_t free_clusters; + uint32_t next_cluster; /* most recently allocated cluster */ + uint8_t unused2 [0xe]; + uint16_t signature_3; /* should be 0xaa55 */ +}; + +int fat_boot_sector_read (FatBootSector** bs, const PedGeometry* geom); +FatType fat_boot_sector_probe_type (const FatBootSector* bs, + const PedGeometry* geom); +int fat_boot_sector_analyse (FatBootSector* bs, PedFileSystem* fs); +int fat_boot_sector_set_boot_code (FatBootSector** bs, const PedFileSystem* fs); +int fat_boot_sector_generate (FatBootSector** bs, const PedFileSystem* fs); +int fat_boot_sector_write (const FatBootSector* bs, PedFileSystem* fs); + +int fat_info_sector_read (FatInfoSector** is, const PedFileSystem* fs); +int fat_info_sector_generate (FatInfoSector** is, const PedFileSystem* fs); +int fat_info_sector_write (const FatInfoSector* is, PedFileSystem* fs); + +#endif /* PED_FAT_BOOTSECTOR_H */ diff --git a/jni/parted/libparted/fs/r/fat/calc.c b/jni/parted/libparted/fs/r/fat/calc.c new file mode 100755 index 0000000..4ba1030 --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/calc.c @@ -0,0 +1,433 @@ +/* + libparted + Copyright (C) 1998-2000, 2002, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include "fat.h" + +#ifndef DISCOVER_ONLY + +/* returns the minimum size of clusters for a given file system type */ +PedSector _GL_ATTRIBUTE_CONST +fat_min_cluster_size (FatType fat_type) { + switch (fat_type) { + case FAT_TYPE_FAT12: return 1; + case FAT_TYPE_FAT16: return 1024/512; + case FAT_TYPE_FAT32: return 4096/512; + } + return 0; +} + +static PedSector _GL_ATTRIBUTE_CONST +_smallest_power2_over (PedSector ceiling) +{ + PedSector result = 1; + + while (result < ceiling) + result *= 2; + + return result; +} + +/* returns the minimum size of clusters for a given file system type */ +PedSector _GL_ATTRIBUTE_CONST +fat_recommend_min_cluster_size (FatType fat_type, PedSector size) { + switch (fat_type) { + case FAT_TYPE_FAT12: return 1; + case FAT_TYPE_FAT16: return fat_min_cluster_size(fat_type); + case FAT_TYPE_FAT32: + return PED_MAX(_smallest_power2_over(size + / MAX_FAT32_CLUSTERS), + fat_min_cluster_size (fat_type)); + } + return 0; +} + +/* returns the maxmimum size of clusters for a given file system type */ +PedSector _GL_ATTRIBUTE_CONST +fat_max_cluster_size (FatType fat_type) { + switch (fat_type) { + case FAT_TYPE_FAT12: return 1; /* dunno... who cares? */ + case FAT_TYPE_FAT16: return 65536/512; + case FAT_TYPE_FAT32: return 65536/512; + } + return 0; +} + +/* returns the minimum number of clusters for a given file system type */ +FatCluster _GL_ATTRIBUTE_CONST +fat_min_cluster_count (FatType fat_type) { + switch (fat_type) { + case FAT_TYPE_FAT12: + case FAT_TYPE_FAT16: + return fat_max_cluster_count (fat_type) / 2; + + case FAT_TYPE_FAT32: return 0xfff0; + } + return 0; +} + +/* returns the maximum number of clusters for a given file system type */ +FatCluster _GL_ATTRIBUTE_CONST +fat_max_cluster_count (FatType fat_type) { + switch (fat_type) { + case FAT_TYPE_FAT12: return 0xff0; + case FAT_TYPE_FAT16: return 0xfff0; + case FAT_TYPE_FAT32: return 0x0ffffff0; + } + return 0; +} + +/* what is this supposed to be? What drugs are M$ on? (Can I have some? :-) */ +PedSector _GL_ATTRIBUTE_CONST +fat_min_reserved_sector_count (FatType fat_type) +{ + return (fat_type == FAT_TYPE_FAT32) ? 32 : 1; +} + +int +fat_check_resize_geometry (const PedFileSystem* fs, + const PedGeometry* geom, + PedSector new_cluster_sectors, + FatCluster new_cluster_count) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedSector free_space; + PedSector min_free_space; + PedSector total_space; + PedSector new_total_space; + PedSector dir_space; + + PED_ASSERT (geom != NULL); + + dir_space = fs_info->total_dir_clusters * fs_info->cluster_sectors; + free_space = fs_info->fat->free_cluster_count + * fs_info->cluster_sectors; + total_space = fs_info->fat->cluster_count * fs_info->cluster_sectors; + new_total_space = new_cluster_count * new_cluster_sectors; + min_free_space = total_space - new_total_space + dir_space; + + PED_ASSERT (new_cluster_count + <= fat_max_cluster_count (FAT_TYPE_FAT32)); + + if (free_space < min_free_space) { + char* needed = ped_unit_format (geom->dev, min_free_space); + char* have = ped_unit_format (geom->dev, free_space); + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("You need %s of free disk space to shrink this " + "partition to this size. Currently, only %s is " + "free."), + needed, have); + free (needed); + free (have); + return 0; + } + + return 1; +} + + +/******************************************************************************/ + +/* DO NOT EDIT THIS ALGORITHM! + * As far as I can tell, this is the same algorithm used by Microsoft to + * calculate the size of the file allocaion tables, and the number of clusters. + * I have not verified this by dissassembling Microsoft code - I came to this + * conclusion by empirical analysis (i.e. trial and error - this was HORRIBLE). + * + * If you think this code makes no sense, then you are right. I will restrain + * the urge to inflict serious bodily harm on Microsoft people. + */ + +static int +entries_per_sector (FatType fat_type) +{ + switch (fat_type) { + case FAT_TYPE_FAT12: + return 512 * 3 / 2; + case FAT_TYPE_FAT16: + return 512 / 2; + case FAT_TYPE_FAT32: + return 512 / 4; + } + return 0; +} + +static int +calc_sizes (PedSector size, PedSector align, FatType fat_type, + PedSector root_dir_sectors, PedSector cluster_sectors, + FatCluster* out_cluster_count, PedSector* out_fat_size) +{ + PedSector data_fat_space; /* space available to clusters + FAT */ + PedSector fat_space; /* space taken by each FAT */ + PedSector cluster_space; /* space taken by clusters */ + FatCluster cluster_count; + int i; + + PED_ASSERT (out_cluster_count != NULL); + PED_ASSERT (out_fat_size != NULL); + + data_fat_space = size - fat_min_reserved_sector_count (fat_type) + - align; + if (fat_type == FAT_TYPE_FAT16) + data_fat_space -= root_dir_sectors; + + fat_space = 0; + for (i = 0; i < 2; i++) { + if (fat_type == FAT_TYPE_FAT32) + cluster_space = data_fat_space - fat_space; + else + cluster_space = data_fat_space - 2 * fat_space; + + cluster_count = cluster_space / cluster_sectors; + fat_space = ped_div_round_up (cluster_count + 2, + entries_per_sector (fat_type)); + } + + cluster_space = data_fat_space - 2 * fat_space; + cluster_count = cluster_space / cluster_sectors; + + /* looks like this should be part of the loop condition? + * Need to build the Big Table TM again to check + */ + if (fat_space < ped_div_round_up (cluster_count + 2, + entries_per_sector (fat_type))) { + fat_space = ped_div_round_up (cluster_count + 2, + entries_per_sector (fat_type)); + } + + if (cluster_count > fat_max_cluster_count (fat_type) + || cluster_count < fat_min_cluster_count (fat_type)) + return 0; + + *out_cluster_count = cluster_count; + *out_fat_size = fat_space; + + return 1; +} + +/****************************************************************************/ + +int +fat_calc_sizes (PedSector size, PedSector align, FatType fat_type, + PedSector root_dir_sectors, + PedSector* out_cluster_sectors, FatCluster* out_cluster_count, + PedSector* out_fat_size) +{ + PedSector cluster_sectors; + + PED_ASSERT (out_cluster_sectors != NULL); + PED_ASSERT (out_cluster_count != NULL); + PED_ASSERT (out_fat_size != NULL); + + for (cluster_sectors = fat_recommend_min_cluster_size (fat_type, size); + cluster_sectors <= fat_max_cluster_size (fat_type); + cluster_sectors *= 2) { + if (calc_sizes (size, align, fat_type, root_dir_sectors, + cluster_sectors, + out_cluster_count, out_fat_size)) { + *out_cluster_sectors = cluster_sectors; + return 1; + } + } + + for (cluster_sectors = fat_recommend_min_cluster_size (fat_type, size); + cluster_sectors >= fat_min_cluster_size (fat_type); + cluster_sectors /= 2) { + if (calc_sizes (size, align, fat_type, root_dir_sectors, + cluster_sectors, + out_cluster_count, out_fat_size)) { + *out_cluster_sectors = cluster_sectors; + return 1; + } + } + + /* only make the cluster size really small (<4k) if a bigger one is + * isn't possible. Windows never makes FS's like this, but it + * seems to work... (do more tests!) + */ + for (cluster_sectors = 4; cluster_sectors > 0; cluster_sectors /= 2) { + if (calc_sizes (size, align, fat_type, root_dir_sectors, + cluster_sectors, + out_cluster_count, out_fat_size)) { + *out_cluster_sectors = cluster_sectors; + return 1; + } + } + + return 0; +} + +/* Same as fat_calc_sizes, except it only attempts to match a particular + * cluster size. This is useful, because the FAT resizer can only shrink the + * cluster size. + */ +int +fat_calc_resize_sizes ( + const PedGeometry* geom, + PedSector align, + FatType fat_type, + PedSector root_dir_sectors, + PedSector cluster_sectors, + PedSector* out_cluster_sectors, + FatCluster* out_cluster_count, + PedSector* out_fat_size) +{ + PED_ASSERT (geom != NULL); + PED_ASSERT (out_cluster_sectors != NULL); + PED_ASSERT (out_cluster_count != NULL); + PED_ASSERT (out_fat_size != NULL); + +/* libparted can only reduce the cluster size at this point */ + for (*out_cluster_sectors = cluster_sectors; + *out_cluster_sectors >= fat_min_cluster_size (fat_type); + *out_cluster_sectors /= 2) { + if (calc_sizes (geom->length, align, fat_type, root_dir_sectors, + *out_cluster_sectors, + out_cluster_count, out_fat_size)) + return 1; + } + return 0; +} + +/* Calculates the number of sectors needed to be added to cluster_offset, + to make the cluster on the new file system match up with the ones + on the old file system. + However, some space is reserved by fat_calc_resize_sizes() and + friends, to allow room for this space. If too much of this space is left + over, everyone will complain, so we have to be greedy, and use it all up... + */ +PedSector _GL_ATTRIBUTE_PURE +fat_calc_align_sectors (const PedFileSystem* new_fs, + const PedFileSystem* old_fs) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (new_fs); + PedSector raw_old_meta_data_end; + PedSector new_meta_data_size; + PedSector min_new_meta_data_end; + PedSector new_data_size; + PedSector new_clusters_size; + PedSector align; + + new_meta_data_size + = fat_min_reserved_sector_count (new_fs_info->fat_type) + + new_fs_info->fat_sectors * 2; + + if (new_fs_info->fat_type == FAT_TYPE_FAT16) + new_meta_data_size += new_fs_info->root_dir_sector_count; + + raw_old_meta_data_end = old_fs->geom->start + + old_fs_info->cluster_offset; + + min_new_meta_data_end = new_fs->geom->start + new_meta_data_size; + + if (raw_old_meta_data_end > min_new_meta_data_end) + align = (raw_old_meta_data_end - min_new_meta_data_end) + % new_fs_info->cluster_sectors; + else + align = (new_fs_info->cluster_sectors + - ( (min_new_meta_data_end - raw_old_meta_data_end) + % new_fs_info->cluster_sectors )) + % new_fs_info->cluster_sectors; + + new_data_size = new_fs->geom->length - new_meta_data_size; + new_clusters_size = new_fs_info->cluster_count + * new_fs_info->cluster_sectors; + + while (new_clusters_size + align + new_fs_info->cluster_sectors + <= new_data_size) + align += new_fs_info->cluster_sectors; + + return align; +} + +int _GL_ATTRIBUTE_PURE +fat_is_sector_in_clusters (const PedFileSystem* fs, PedSector sector) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + return sector >= fs_info->cluster_offset + && sector < fs_info->cluster_offset + + fs_info->cluster_sectors * fs_info->cluster_count; +} + +FatFragment _GL_ATTRIBUTE_PURE +fat_cluster_to_frag (const PedFileSystem* fs, FatCluster cluster) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (cluster >= 2 && cluster < fs_info->cluster_count + 2); + + return (cluster - 2) * fs_info->cluster_frags; +} + +FatCluster _GL_ATTRIBUTE_PURE +fat_frag_to_cluster (const PedFileSystem* fs, FatFragment frag) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (frag >= 0 && frag < fs_info->frag_count); + + return frag / fs_info->cluster_frags + 2; +} + +PedSector _GL_ATTRIBUTE_PURE +fat_frag_to_sector (const PedFileSystem* fs, FatFragment frag) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (frag >= 0 && frag < fs_info->frag_count); + + return frag * fs_info->frag_sectors + fs_info->cluster_offset; +} + +FatFragment _GL_ATTRIBUTE_PURE +fat_sector_to_frag (const PedFileSystem* fs, PedSector sector) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (sector >= fs_info->cluster_offset); + + return (sector - fs_info->cluster_offset) / fs_info->frag_sectors; +} + +PedSector _GL_ATTRIBUTE_PURE +fat_cluster_to_sector (const PedFileSystem* fs, FatCluster cluster) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (cluster >= 2 && cluster < fs_info->cluster_count + 2); + + return (cluster - 2) * fs_info->cluster_sectors + + fs_info->cluster_offset; +} + +FatCluster _GL_ATTRIBUTE_PURE +fat_sector_to_cluster (const PedFileSystem* fs, PedSector sector) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (sector >= fs_info->cluster_offset); + + return (sector - fs_info->cluster_offset) / fs_info->cluster_sectors + + 2; +} +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/fat/calc.h b/jni/parted/libparted/fs/r/fat/calc.h new file mode 100755 index 0000000..d4884c1 --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/calc.h @@ -0,0 +1,77 @@ +/* + libparted + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef PED_FAT_CALC_H +#define PED_FAT_CALC_H + +extern PedSector fat_min_cluster_size (FatType fat_type); +extern PedSector fat_max_cluster_size (FatType fat_type); +extern FatCluster fat_min_cluster_count (FatType fat_type); +extern FatCluster fat_max_cluster_count (FatType fat_type); + +extern PedSector fat_min_reserved_sector_count (FatType fat_type); + +extern int fat_check_resize_geometry (const PedFileSystem* fs, + const PedGeometry* geom, + PedSector new_cluster_sectors, + FatCluster new_cluster_count); + +extern int fat_calc_sizes (PedSector size, + PedSector align, + FatType fat_type, + PedSector root_dir_sectors, + PedSector* out_cluster_sectors, + FatCluster* out_cluster_count, + PedSector* out_fat_size); + +extern int fat_calc_resize_sizes (const PedGeometry* geom, + PedSector align, + FatType fat_type, + PedSector root_dir_sectors, + PedSector cluster_sectors, + PedSector* out_cluster_sectors, + FatCluster* out_cluster_count, + PedSector* out_fat_size); + +extern PedSector +fat_calc_align_sectors (const PedFileSystem* new_fs, + const PedFileSystem* old_fs); + +extern int +fat_is_sector_in_clusters (const PedFileSystem* fs, PedSector sector); + +extern FatFragment +fat_cluster_to_frag (const PedFileSystem* fs, FatCluster cluster); + +extern FatCluster +fat_frag_to_cluster (const PedFileSystem* fs, FatFragment frag); + +extern PedSector +fat_frag_to_sector (const PedFileSystem* fs, FatFragment frag); + +extern FatFragment +fat_sector_to_frag (const PedFileSystem* fs, PedSector sector); + +extern PedSector +fat_cluster_to_sector (const PedFileSystem* fs, FatCluster cluster); + +extern FatCluster +fat_sector_to_cluster (const PedFileSystem* fs, PedSector sector); + +#endif /* PED_FAT_CALC_H */ diff --git a/jni/parted/libparted/fs/r/fat/clstdup.c b/jni/parted/libparted/fs/r/fat/clstdup.c new file mode 100755 index 0000000..6a3054f --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/clstdup.c @@ -0,0 +1,423 @@ +/* + libparted + Copyright (C) 1998-2001, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include + +#include "fat.h" + +#ifndef DISCOVER_ONLY + +static int +needs_duplicating (const FatOpContext* ctx, FatFragment frag) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatCluster cluster = fat_frag_to_cluster (ctx->old_fs, frag); + FatClusterFlag flag; + + PED_ASSERT (cluster >= 2 && cluster < old_fs_info->cluster_count + 2); + + flag = fat_get_fragment_flag (ctx->old_fs, frag); + switch (flag) { + case FAT_FLAG_FREE: + return 0; + + case FAT_FLAG_DIRECTORY: + return 1; + + case FAT_FLAG_FILE: + return fat_op_context_map_static_fragment (ctx, frag) == -1; + + case FAT_FLAG_BAD: + return 0; + } + + return 0; +} + +static int +search_next_fragment (FatOpContext* ctx) +{ + FatSpecific* fs_info = FAT_SPECIFIC (ctx->old_fs); + + for (; ctx->buffer_offset < fs_info->frag_count; ctx->buffer_offset++) { + if (needs_duplicating (ctx, ctx->buffer_offset)) + return 1; + } + return 0; /* all done! */ +} + +static int +read_marked_fragments (FatOpContext* ctx, FatFragment length) +{ + FatSpecific* fs_info = FAT_SPECIFIC (ctx->old_fs); + int status; + FatFragment i; + + ped_exception_fetch_all (); + status = fat_read_fragments (ctx->old_fs, fs_info->buffer, + ctx->buffer_offset, length); + ped_exception_leave_all (); + if (status) + return 1; + + ped_exception_catch (); + +/* something bad happened, so read fragments one by one. (The error may + have occurred on an unused fragment: who cares) */ + for (i = 0; i < length; i++) { + if (ctx->buffer_map [i]) { + if (!fat_read_fragment (ctx->old_fs, + fs_info->buffer + i * fs_info->frag_size, + ctx->buffer_offset + i)) + return 0; + } + } + + return 1; +} + +static int +fetch_fragments (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatFragment fetch_length = 0; + FatFragment frag; + + for (frag = 0; frag < ctx->buffer_frags; frag++) + ctx->buffer_map [frag] = -1; + + for (frag = 0; + frag < ctx->buffer_frags + && ctx->buffer_offset + frag < old_fs_info->frag_count; + frag++) { + if (needs_duplicating (ctx, ctx->buffer_offset + frag)) { + ctx->buffer_map [frag] = 1; + fetch_length = frag + 1; + } + } + + if (!read_marked_fragments (ctx, fetch_length)) + return 0; + + return 1; +} + +/***************************************************************************** + * here starts the write code. All assumes that ctx->buffer_map [first] and + * ctx->buffer_map [last] are occupied by fragments that need to be duplicated. + *****************************************************************************/ + +/* finds the first fragment that is not going to get overwritten (that needs to + get read in) */ +static FatFragment _GL_ATTRIBUTE_PURE +get_first_underlay (const FatOpContext* ctx, int first, int last) +{ + int old; + FatFragment new; + + PED_ASSERT (first <= last); + + new = ctx->buffer_map [first]; + for (old = first + 1; old <= last; old++) { + if (ctx->buffer_map [old] == -1) + continue; + new++; + if (ctx->buffer_map [old] != new) + return new; + } + return -1; +} + +/* finds the last fragment that is not going to get overwritten (that needs to + get read in) */ +static FatFragment _GL_ATTRIBUTE_PURE +get_last_underlay (const FatOpContext* ctx, int first, int last) +{ + int old; + FatFragment new; + + PED_ASSERT (first <= last); + + new = ctx->buffer_map [last]; + for (old = last - 1; old >= first; old--) { + if (ctx->buffer_map [old] == -1) + continue; + new--; + if (ctx->buffer_map [old] != new) + return new; + } + return -1; +} + +/* "underlay" refers to the "static" fragments, that remain unchanged. + * when writing large chunks at a time, we don't want to clobber these, + * so we read them in, and write them back again. MUCH quicker that way. + */ +static int +quick_group_write_read_underlay (FatOpContext* ctx, int first, int last) +{ + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + FatFragment first_underlay; + FatFragment last_underlay; + FatFragment underlay_length; + + PED_ASSERT (first <= last); + + first_underlay = get_first_underlay (ctx, first, last); + if (first_underlay == -1) + return 1; + last_underlay = get_last_underlay (ctx, first, last); + + PED_ASSERT (first_underlay <= last_underlay); + + underlay_length = last_underlay - first_underlay + 1; + if (!fat_read_fragments (ctx->new_fs, + new_fs_info->buffer + + (first_underlay - ctx->buffer_map [first]) + * new_fs_info->frag_size, + first_underlay, + underlay_length)) + return 0; + return 1; +} + +/* quick_group_write() makes no attempt to recover from errors - just + * does things fast. If there is an error, slow_group_write() is + * called. + * Note: we do syncing writes, to make sure there isn't any + * error writing out. It's rather difficult recovering from errors + * further on. + */ +static int +quick_group_write (FatOpContext* ctx, int first, int last) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + int active_length; + int i; + int offset; + + PED_ASSERT (first <= last); + + ped_exception_fetch_all (); + if (!quick_group_write_read_underlay (ctx, first, last)) + goto error; + + for (i = first; i <= last; i++) { + if (ctx->buffer_map [i] == -1) + continue; + + offset = ctx->buffer_map [i] - ctx->buffer_map [first]; + memcpy (new_fs_info->buffer + offset * new_fs_info->frag_size, + old_fs_info->buffer + i * new_fs_info->frag_size, + new_fs_info->frag_size); + } + + active_length = ctx->buffer_map [last] - ctx->buffer_map [first] + 1; + if (!fat_write_sync_fragments (ctx->new_fs, new_fs_info->buffer, + ctx->buffer_map [first], active_length)) + goto error; + + ped_exception_leave_all (); + return 1; + +error: + ped_exception_catch (); + ped_exception_leave_all (); + return 0; +} + +/* Writes fragments out, one at a time, avoiding errors on redundant writes + * on damaged parts of the disk we already know about. If there's an error + * on one of the required fragments, it gets marked as bad, and a replacement + * is found. + */ +static int +slow_group_write (FatOpContext* ctx, int first, int last) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + int i; + + PED_ASSERT (first <= last); + + for (i = first; i <= last; i++) { + if (ctx->buffer_map [i] == -1) + continue; + + while (!fat_write_sync_fragment (ctx->new_fs, + old_fs_info->buffer + i * old_fs_info->frag_size, + ctx->buffer_map [i])) { + fat_table_set_bad (new_fs_info->fat, + ctx->buffer_map [i]); + ctx->buffer_map [i] = fat_table_alloc_cluster + (new_fs_info->fat); + if (ctx->buffer_map [i] == 0) + return 0; + } + } + return 1; +} + +static int +update_remap (FatOpContext* ctx, int first, int last) +{ + int i; + + PED_ASSERT (first <= last); + + for (i = first; i <= last; i++) { + if (ctx->buffer_map [i] == -1) + continue; + ctx->remap [ctx->buffer_offset + i] = ctx->buffer_map [i]; + } + + return 1; +} + +static int +group_write (FatOpContext* ctx, int first, int last) +{ + PED_ASSERT (first <= last); + + if (!quick_group_write (ctx, first, last)) { + if (!slow_group_write (ctx, first, last)) + return 0; + } + if (!update_remap (ctx, first, last)) + return 0; + return 1; +} + +/* assumes fragment size and new_fs's cluster size are equal */ +static int +write_fragments (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + int group_start; + int group_end = -1; /* shut gcc up! */ + FatFragment mapped_length; + FatFragment i; + FatCluster new_cluster; + + PED_ASSERT (ctx->buffer_offset < old_fs_info->frag_count); + + group_start = -1; + for (i = 0; i < ctx->buffer_frags; i++) { + if (ctx->buffer_map [i] == -1) + continue; + + ctx->frags_duped++; + + new_cluster = fat_table_alloc_cluster (new_fs_info->fat); + if (!new_cluster) + return 0; + fat_table_set_eof (new_fs_info->fat, new_cluster); + ctx->buffer_map [i] = fat_cluster_to_frag (ctx->new_fs, + new_cluster); + + if (group_start == -1) + group_start = group_end = i; + + PED_ASSERT (ctx->buffer_map [i] + >= ctx->buffer_map [group_start]); + + mapped_length = ctx->buffer_map [i] + - ctx->buffer_map [group_start] + 1; + if (mapped_length <= ctx->buffer_frags) { + group_end = i; + } else { + /* ran out of room in the buffer, so write this group, + * and start a new one... + */ + if (!group_write (ctx, group_start, group_end)) + return 0; + group_start = group_end = i; + } + } + + PED_ASSERT (group_start != -1); + + if (!group_write (ctx, group_start, group_end)) + return 0; + return 1; +} + +/* default all fragments to unmoved + */ +static void +init_remap (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatFragment i; + + for (i = 0; i < old_fs_info->frag_count; i++) + ctx->remap[i] = fat_op_context_map_static_fragment (ctx, i); +} + +static FatFragment +count_frags_to_dup (FatOpContext* ctx) +{ + FatSpecific* fs_info = FAT_SPECIFIC (ctx->old_fs); + FatFragment i; + FatFragment total; + + total = 0; + + for (i = 0; i < fs_info->frag_count; i++) { + if (needs_duplicating (ctx, i)) + total++; + } + + return total; +} + +/* duplicates unreachable file clusters, and all directory clusters + */ +int +fat_duplicate_clusters (FatOpContext* ctx, PedTimer* timer) +{ + FatFragment total_frags_to_dup; + + init_remap (ctx); + total_frags_to_dup = count_frags_to_dup (ctx); + + ped_timer_reset (timer); + ped_timer_set_state_name (timer, "moving data"); + + ctx->buffer_offset = 0; + ctx->frags_duped = 0; + while (search_next_fragment (ctx)) { + ped_timer_update ( + timer, 1.0 * ctx->frags_duped / total_frags_to_dup); + + if (!fetch_fragments (ctx)) + return 0; + if (!write_fragments (ctx)) + return 0; + ctx->buffer_offset += ctx->buffer_frags; + } + + ped_timer_update (timer, 1.0); + return 1; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/fat/clstdup.h b/jni/parted/libparted/fs/r/fat/clstdup.h new file mode 100755 index 0000000..23e51b4 --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/clstdup.h @@ -0,0 +1,28 @@ +/* + libparted + Copyright (C) 1999, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef PED_FAT_CLSTDUP_H_INCLUDED +#define PED_FAT_CLSTDUP_H_INCLUDED + +#include "context.h" + +/* the big important one :-) */ +extern int fat_duplicate_clusters (FatOpContext* ctx, PedTimer* timer); + +#endif /* PED_FAT_CLSTDUP_H_INCLUDED */ diff --git a/jni/parted/libparted/fs/r/fat/context.c b/jni/parted/libparted/fs/r/fat/context.c new file mode 100755 index 0000000..c782323 --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/context.c @@ -0,0 +1,261 @@ +/* + libparted + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include + +#include "fat.h" + +#ifndef DISCOVER_ONLY + +/* Note: this deals with file system start and end sectors, even if the physical + * devices are different (eg for fat_copy()) Perhaps this is a hack, but it + * works ;-) + */ +static int +calc_deltas (FatOpContext* ctx) +{ + PedFileSystem* old_fs = ctx->old_fs; + PedFileSystem* new_fs = ctx->new_fs; + FatSpecific* old_fs_info = FAT_SPECIFIC (old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (new_fs); + PedSector old_cluster_ofs; + PedSector new_cluster_ofs; + PedSector sector_delta; + + old_cluster_ofs = old_fs->geom->start + old_fs_info->cluster_offset; + new_cluster_ofs = new_fs->geom->start + new_fs_info->cluster_offset; + + if (new_cluster_ofs > old_cluster_ofs) { + ctx->start_move_dir = FAT_DIR_FORWARD; + sector_delta = new_cluster_ofs - old_cluster_ofs; + } else { + ctx->start_move_dir = FAT_DIR_BACKWARD; + sector_delta = old_cluster_ofs - new_cluster_ofs; + } + + if (sector_delta % new_fs_info->cluster_sectors) { + ped_exception_throw ( + PED_EXCEPTION_BUG, PED_EXCEPTION_CANCEL, + _("Cluster start delta = %d, which is not a multiple " + "of the cluster size %d."), + (int) sector_delta, + (int) new_fs_info->cluster_sectors); + return 0; + } + + ctx->start_move_delta = sector_delta / ctx->frag_sectors; + +#ifdef PED_VERBOSE + printf ("Start move delta is: %d %s.\n", + (int) ctx->start_move_delta, + (ctx->start_move_dir == FAT_DIR_FORWARD)? + "forwards" : "backwards"); +#endif + + return 1; +} + +FatOpContext* +fat_op_context_new (PedFileSystem* new_fs, PedFileSystem* old_fs) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (new_fs); + FatOpContext* ctx; + + ctx = (FatOpContext*) ped_malloc (sizeof (FatOpContext)); + if (!ctx) + goto error; + + ctx->frag_sectors = PED_MIN (old_fs_info->cluster_sectors, + new_fs_info->cluster_sectors); + if (!fat_set_frag_sectors (new_fs, ctx->frag_sectors)) + goto error; + if (!fat_set_frag_sectors (old_fs, ctx->frag_sectors)) + goto error; + + ctx->buffer_frags = old_fs_info->buffer_sectors / ctx->frag_sectors; + ctx->buffer_map = (FatFragment*) ped_malloc (sizeof (FatFragment) + * ctx->buffer_frags); + if (!ctx->buffer_map) + goto error_free_ctx; + + ctx->remap = (FatFragment*) ped_malloc (sizeof (FatFragment) + * old_fs_info->frag_count); + if (!ctx->remap) + goto error_free_buffer_map; + + ctx->new_fs = new_fs; + ctx->old_fs = old_fs; + if (!calc_deltas (ctx)) + goto error_free_buffer_map; + + return ctx; + +error_free_buffer_map: + free (ctx->buffer_map); +error_free_ctx: + free (ctx); +error: + return NULL; +} + +void +fat_op_context_destroy (FatOpContext* ctx) +{ + free (ctx->buffer_map); + free (ctx->remap); + free (ctx); +} + +FatFragment _GL_ATTRIBUTE_PURE +fat_op_context_map_static_fragment (const FatOpContext* ctx, FatFragment frag) +{ + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + FatFragment result; + + if (ctx->new_fs->geom->dev != ctx->old_fs->geom->dev) + return -1; + + if (ctx->start_move_dir == FAT_DIR_FORWARD) { + if (frag < ctx->start_move_delta) + return -1; + result = frag - ctx->start_move_delta; + } else { + result = frag + ctx->start_move_delta; + } + + if (result >= new_fs_info->frag_count) + return -1; + + return result; +} + +FatCluster +fat_op_context_map_static_cluster (const FatOpContext* ctx, FatCluster clst) +{ + FatFragment mapped_frag; + + mapped_frag = fat_op_context_map_static_fragment (ctx, + fat_cluster_to_frag (ctx->old_fs, clst)); + if (mapped_frag != -1) + return fat_frag_to_cluster (ctx->new_fs, mapped_frag); + else + return 0; +} + +FatFragment _GL_ATTRIBUTE_PURE +fat_op_context_map_fragment (const FatOpContext* ctx, FatFragment frag) +{ + return ctx->remap [frag]; +} + +FatCluster +fat_op_context_map_cluster (const FatOpContext* ctx, FatCluster clst) +{ + FatFragment mapped_frag; + + mapped_frag = fat_op_context_map_fragment (ctx, + fat_cluster_to_frag (ctx->old_fs, clst)); + if (mapped_frag != -1) + return fat_frag_to_cluster (ctx->new_fs, mapped_frag); + else + return 0; +} + +/* This function sets the initial fat for the new resized file system. + This is in *NO WAY* a proper FAT table - all it does is: + a) mark bad clusters as bad. + b) mark used clusters (that is, clusters from the original FS that are + reachable from the resized one). Marks as EOF (i.e. used, end of + file chain). + c) mark original file system metadata as EOF (i.e. used), to prevent + it from being clobbered. This will leave the original file system + intact, until the partition table is modified, if the start of + the partition is moved. + + The FATs are rebuilt *properly* after cluster relocation. This here is + only to mark clusters as used, so when cluster relocation occurs, clusters + aren't relocated on top of ones marked in a, b or c. +*/ +int +fat_op_context_create_initial_fat (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + FatCluster clst; + FatCluster new_clst; + PedSector sect; + PedSector new_sect; + FatFragment frag; + FatFragment new_frag; + FatClusterFlag frag_flag; + + new_fs_info->fat = fat_table_new ( + new_fs_info->fat_type, + new_fs_info->fat_sectors * 512 + / fat_table_entry_size (new_fs_info->fat_type)); + if (!new_fs_info->fat) + return 0; + + if (!fat_table_set_cluster_count (new_fs_info->fat, + new_fs_info->cluster_count)) + return 0; + +/* mark bad and used clusters */ + for (frag = 0; frag < old_fs_info->frag_count; frag++) { + frag_flag = fat_get_fragment_flag (ctx->old_fs, frag); + if (frag_flag == FAT_FLAG_FREE) + continue; + + new_frag = fat_op_context_map_static_fragment (ctx, frag); + if (new_frag == -1) + continue; + + new_clst = fat_frag_to_cluster (ctx->new_fs, new_frag); + PED_ASSERT (new_clst != 0); + + if (frag_flag == FAT_FLAG_BAD) { + if (!fat_table_set_bad (new_fs_info->fat, new_clst)) + return 0; + } else { + if (!fat_table_set_eof (new_fs_info->fat, new_clst)) + return 0; + } + } + +/* mark metadata regions that map to clusters on the new FS */ + for (sect = 0; sect < old_fs_info->cluster_offset; sect++) { + new_sect = ped_geometry_map (ctx->new_fs->geom, + ctx->old_fs->geom, sect); + if (new_sect == -1 + || !fat_is_sector_in_clusters (ctx->new_fs, new_sect)) + continue; + + clst = fat_sector_to_cluster (ctx->new_fs, new_sect); + PED_ASSERT (clst != 0); + + if (!fat_table_set_eof (new_fs_info->fat, clst)) + return 0; + } + + return 1; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/fat/context.h b/jni/parted/libparted/fs/r/fat/context.h new file mode 100755 index 0000000..9a76a47 --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/context.h @@ -0,0 +1,70 @@ +/* + libparted + Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef PED_FAT_CONTEXT_H_INCLUDED +#define PED_FAT_CONTEXT_H_INCLUDED + +#include "count.h" + +enum _FatDirection { + FAT_DIR_FORWARD, + FAT_DIR_BACKWARD +}; +typedef enum _FatDirection FatDirection; + +struct _FatOpContext { + PedFileSystem* old_fs; + PedFileSystem* new_fs; + + PedSector frag_sectors; /* should equal old_fs and + new_fs's frag_sectors */ + + FatDirection start_move_dir; + FatFragment start_move_delta; + + FatFragment buffer_offset; + FatFragment buffer_frags; + FatFragment* buffer_map; + + FatFragment frags_duped; + + FatFragment* remap; + + FatCluster new_root_dir [32]; +}; +typedef struct _FatOpContext FatOpContext; + +extern FatOpContext* fat_op_context_new (PedFileSystem* new_fs, + PedFileSystem* old_fs); + +extern void fat_op_context_destroy (FatOpContext* ctx); + +extern FatFragment fat_op_context_map_static_fragment (const FatOpContext* ctx, + FatFragment frag); +extern FatCluster fat_op_context_map_static_cluster (const FatOpContext* ctx, + FatCluster clst); + +extern FatFragment fat_op_context_map_fragment (const FatOpContext* ctx, + FatFragment frag); +extern FatCluster fat_op_context_map_cluster (const FatOpContext* ctx, + FatCluster clst); + +extern int fat_op_context_create_initial_fat (FatOpContext* ctx); + +#endif /* PED_FAT_CONTEXT_H_INCLUDED */ diff --git a/jni/parted/libparted/fs/r/fat/count.c b/jni/parted/libparted/fs/r/fat/count.c new file mode 100755 index 0000000..e23404b --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/count.c @@ -0,0 +1,319 @@ +/* + libparted + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include "fat.h" +#include "traverse.h" + +#include +#include +#include + +#ifndef DISCOVER_ONLY + +/* + prints out the sequence of clusters for a given file chain, beginning + at start_cluster. +*/ +#ifdef PED_VERBOSE +static void +print_chain (PedFileSystem* fs, FatCluster start) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatCluster clst; + int this_row; + + this_row = 0; + for (clst = start; !fat_table_is_eof (fs_info->fat, clst); + clst = fat_table_get (fs_info->fat, clst)) { + printf (" %d", (int) clst); + if (++this_row == 7) { + putchar ('\n'); + this_row = 0; + } + } + putchar ('\n'); +} +#endif /* PED_VERBOSE */ + +static PedSector +remainder_round_up (PedSector a, PedSector b) +{ + PedSector result; + + result = a % b; + if (!result) + result = b; + return result; +} + +/* + traverse the FAT for a file/directory, marking each entry's flag + to "flag". +*/ +static int +flag_traverse_fat (PedFileSystem* fs, const char* chain_name, FatCluster start, + FatClusterFlag flag, PedSector size) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatCluster clst; + FatCluster prev_clst; + int last_cluster_usage; + FatCluster chain_length = 0; + + if (fat_table_is_eof (fs_info->fat, start)) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Bad directory entry for %s: first cluster is the " + "end of file marker."), + chain_name) + != PED_EXCEPTION_IGNORE) + return 0; + } + + for (prev_clst = clst = start; !fat_table_is_eof (fs_info->fat, clst); + prev_clst = clst, clst = fat_table_get (fs_info->fat, clst)) { + chain_length++; + if (!clst) { + ped_exception_throw (PED_EXCEPTION_FATAL, + PED_EXCEPTION_CANCEL, + _("Bad FAT: unterminated chain for %s. You " + "should run dosfsck or scandisk."), + chain_name); + return 0; + } + + if (clst >= fs_info->fat->cluster_count + 2) { + ped_exception_throw (PED_EXCEPTION_FATAL, + PED_EXCEPTION_CANCEL, + _("Bad FAT: cluster %d outside file system " + "in chain for %s. You should run dosfsck " + "or scandisk."), + (int) clst, chain_name); + return 0; + } + + if (fs_info->cluster_info [clst].flag != FAT_FLAG_FREE ) { + ped_exception_throw (PED_EXCEPTION_FATAL, + PED_EXCEPTION_CANCEL, + _("Bad FAT: cluster %d is cross-linked for " + "%s. You should run dosfsck or scandisk."), + (int) clst, chain_name); + return 0; + } + + if (flag == FAT_FLAG_DIRECTORY) + fs_info->total_dir_clusters++; + + fs_info->cluster_info [clst].flag = flag; + fs_info->cluster_info [clst].units_used = 0; /* 0 == 64 */ + } + + if (size + && chain_length + != ped_div_round_up (size, fs_info->cluster_sectors)) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("%s is %dk, but it has %d clusters (%dk)."), + chain_name, + (int) size / 2, + (int) chain_length, + (int) chain_length * fs_info->cluster_sectors / 2) + != PED_EXCEPTION_IGNORE) + return 0; + } + + last_cluster_usage + = ped_div_round_up (64 * remainder_round_up (size, + fs_info->cluster_sectors), + fs_info->cluster_sectors); + + fs_info->cluster_info [prev_clst].units_used = last_cluster_usage; + + return 1; +} + +/* + recursively traverses a directory, flagging all clusters in the process. + It frees the traverse_info structure before returning. +*/ +static int +flag_traverse_dir (FatTraverseInfo* trav_info) { + PedFileSystem* fs = trav_info->fs; + FatDirEntry* this_entry; + FatTraverseInfo* subdir_trav_info; + char file_name [4096]; + char* file_name_start; + FatCluster first_cluster; + PedSector size; + + PED_ASSERT (trav_info != NULL); + + strcpy (file_name, trav_info->dir_name); + file_name_start = file_name + strlen (file_name); + + while ( (this_entry = fat_traverse_next_dir_entry (trav_info)) ) { + if (fat_dir_entry_is_null_term (this_entry)) + break; + if (!fat_dir_entry_has_first_cluster (this_entry, fs)) + continue; + if (this_entry->name [0] == '.') + continue; /* skip . and .. entries */ + + fat_dir_entry_get_name (this_entry, file_name_start); + first_cluster = fat_dir_entry_get_first_cluster(this_entry, fs); + size = ped_div_round_up (fat_dir_entry_get_length (this_entry), + 512); + +#ifdef PED_VERBOSE + printf ("%s: ", file_name); + print_chain (fs, first_cluster); +#endif + + if (fat_dir_entry_is_directory (this_entry)) { + if (!flag_traverse_fat (fs, file_name, first_cluster, + FAT_FLAG_DIRECTORY, size)) + return 0; + + subdir_trav_info = fat_traverse_directory (trav_info, + this_entry); + if (!subdir_trav_info) + return 0; + if (!flag_traverse_dir (subdir_trav_info)) + return 0; + } else if (fat_dir_entry_is_file (this_entry)) { + if (!flag_traverse_fat (fs, file_name, first_cluster, + FAT_FLAG_FILE, size)) + return 0; + } + } + + fat_traverse_complete (trav_info); + return 1; +} + +static void +_mark_bad_clusters (PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatCluster cluster; + + for (cluster = 2; cluster < fs_info->cluster_count + 2; cluster++) { + if (fat_table_is_bad (fs_info->fat, cluster)) + fs_info->cluster_info [cluster].flag = FAT_FLAG_BAD; + } +} + +/* + fills in cluster_info. Each FAT entry (= cluster) is flagged as either + FAT_FLAG_FREE, FAT_FLAG_FILE or FAT_FLAG_DIRECTORY. + + Also, the fraction of each cluster (x/64) is recorded +*/ +int +fat_collect_cluster_info (PedFileSystem* fs) { + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatTraverseInfo* trav_info; + + /* set all clusters to unused as a default */ + memset (fs_info->cluster_info, 0, fs_info->fat->cluster_count + 2); + fs_info->total_dir_clusters = 0; + + if (fs_info->fat_type == FAT_TYPE_FAT32) { + trav_info = fat_traverse_begin (fs, fs_info->root_cluster, + "\\"); + if (!flag_traverse_dir (trav_info)) + return 0; + if (!flag_traverse_fat (fs, "\\", fs_info->root_cluster, + FAT_FLAG_DIRECTORY, 0)) + return 0; + } else { + trav_info = fat_traverse_begin (fs, FAT_ROOT, "\\"); + if (!flag_traverse_dir (trav_info)) + return 0; + } + + _mark_bad_clusters (fs); + return 1; +} + +FatClusterFlag _GL_ATTRIBUTE_PURE +fat_get_cluster_flag (PedFileSystem* fs, FatCluster cluster) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + return fs_info->cluster_info [cluster].flag; +} + +PedSector _GL_ATTRIBUTE_PURE +fat_get_cluster_usage (PedFileSystem* fs, FatCluster cluster) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + int fraction; + + if (fs_info->cluster_info [cluster].flag == FAT_FLAG_FREE) + return 0; + + fraction = fs_info->cluster_info [cluster].units_used; + if (fraction == 0) + fraction = 64; + + return fraction * fs_info->cluster_sectors / 64; +} + +FatClusterFlag +fat_get_fragment_flag (PedFileSystem* fs, FatFragment frag) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatCluster cluster = fat_frag_to_cluster (fs, frag); + FatFragment offset = frag % fs_info->cluster_frags; + FatFragment last_frag_used; + FatClusterFlag flag; + + PED_ASSERT (cluster >= 2 && cluster < fs_info->cluster_count + 2); + + flag = fat_get_cluster_flag (fs, cluster); + if (flag != FAT_FLAG_FILE && flag != FAT_FLAG_DIRECTORY) + return flag; + last_frag_used = (fat_get_cluster_usage (fs, cluster) - 1) + / fs_info->frag_sectors; + if (offset > last_frag_used) + return FAT_FLAG_FREE; + else + return flag; +} + +int +fat_is_fragment_active (PedFileSystem* fs, FatFragment frag) +{ + switch (fat_get_fragment_flag (fs, frag)) { + case FAT_FLAG_FREE: + case FAT_FLAG_BAD: + return 0; + + case FAT_FLAG_FILE: + case FAT_FLAG_DIRECTORY: + return 1; + } + return 0; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/fat/count.h b/jni/parted/libparted/fs/r/fat/count.h new file mode 100755 index 0000000..bb7d6af --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/count.h @@ -0,0 +1,46 @@ +/* + libparted + Copyright (C) 1999-2000, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef COUNT_H_INCLUDED +#define COUNT_H_INCLUDED + +typedef enum _FatClusterFlag FatClusterFlag; +typedef struct _FatClusterInfo FatClusterInfo; + +enum _FatClusterFlag { + FAT_FLAG_FREE=0, + FAT_FLAG_FILE=1, + FAT_FLAG_DIRECTORY=2, + FAT_FLAG_BAD=3 +}; + +struct __attribute__ ((packed)) _FatClusterInfo { + unsigned int units_used:6; /* 1 unit = cluster_size / 64 */ + FatClusterFlag flag:2; +}; + +extern int fat_collect_cluster_info (PedFileSystem *fs); +extern FatClusterFlag fat_get_cluster_flag (PedFileSystem* fs, + FatCluster cluster); +extern PedSector fat_get_cluster_usage (PedFileSystem* fs, FatCluster cluster); +extern FatClusterFlag fat_get_fragment_flag (PedFileSystem* fs, + FatFragment frag); +extern int fat_is_fragment_active (PedFileSystem* fs, FatFragment frag); + +#endif /* COUNT_H_INCLUDED */ diff --git a/jni/parted/libparted/fs/r/fat/fat.c b/jni/parted/libparted/fs/r/fat/fat.c new file mode 100755 index 0000000..6583b5b --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/fat.c @@ -0,0 +1,652 @@ +/* + libparted + Copyright (C) 1998-2001, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include +#include + +#include "fat.h" +#include "calc.h" +#include "../../../labels/misc.h" + +PedFileSystem* +fat_alloc (const PedGeometry* geom) +{ + PedFileSystem* fs; + + fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem)); + if (!fs) + goto error; + + fs->type_specific = (FatSpecific*) ped_malloc (sizeof (FatSpecific)); + if (!fs->type_specific) + goto error_free_fs; + FatSpecific* fs_info = (FatSpecific*) fs->type_specific; + fs_info->boot_sector = NULL; + fs_info->info_sector = NULL; + fs->geom = ped_geometry_duplicate (geom); + if (!fs->geom) + goto error_free_type_specific; + + fs->checked = 0; + return fs; + +error_free_type_specific: + free (fs->type_specific); +error_free_fs: + free (fs); +error: + return NULL; +} + +/* Requires the boot sector to be analysed */ +int +fat_alloc_buffers (PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + fs_info->buffer_sectors = BUFFER_SIZE; + fs_info->buffer = ped_malloc (fs_info->buffer_sectors * 512); + if (!fs_info->buffer) + goto error; + + fs_info->cluster_info = ped_malloc (fs_info->cluster_count + 2); + if (!fs_info->cluster_info) + goto error_free_buffer; + + return 1; + +error_free_buffer: + free (fs_info->buffer); +error: + return 0; +}; + +void +fat_free_buffers (PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + free (fs_info->cluster_info); + free (fs_info->buffer); +} + +void +fat_free (PedFileSystem* fs) +{ + FatSpecific* fs_info = (FatSpecific*) fs->type_specific; + free (fs_info->boot_sector); + ped_geometry_destroy (fs->geom); + free (fs->type_specific); + free (fs); +} + +int +fat_set_frag_sectors (PedFileSystem* fs, PedSector frag_sectors) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (fs_info->cluster_sectors % frag_sectors == 0 + && frag_sectors <= fs_info->cluster_sectors); + + fs_info->frag_size = frag_sectors * 512; + fs_info->frag_sectors = frag_sectors; + fs_info->buffer_frags = fs_info->buffer_sectors / frag_sectors; + fs_info->cluster_frags = fs_info->cluster_sectors / frag_sectors; + fs_info->frag_count = fs_info->cluster_count * fs_info->cluster_frags; + + return 1; +} + +#ifndef DISCOVER_ONLY +int +fat_clobber (PedGeometry* geom) +{ + FatBootSector *boot_sector; + int ok; + + if (!fat_boot_sector_read (&boot_sector, geom)) + return 1; + + boot_sector->system_id[0] = 0; + boot_sector->boot_sign = 0; + if (boot_sector->u.fat16.fat_name[0] == 'F') + boot_sector->u.fat16.fat_name[0] = 0; + if (boot_sector->u.fat32.fat_name[0] == 'F') + boot_sector->u.fat32.fat_name[0] = 0; + + ok = ped_geometry_write (geom, boot_sector, 0, 1); + free (boot_sector); + return ok; +} + +static int +_init_fats (PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatCluster table_size; + + table_size = fs_info->fat_sectors * 512 + / fat_table_entry_size (fs_info->fat_type); + fs_info->fat = fat_table_new (fs_info->fat_type, table_size); + if (!fs_info->fat) + goto error; + + if (!fat_table_read (fs_info->fat, fs, 0)) + goto error_free_fat; + + return 1; + +error_free_fat: + fat_table_destroy (fs_info->fat); +error: + return 0; +} + +PedFileSystem* +fat_open (PedGeometry* geom) +{ + PedFileSystem* fs; + FatSpecific* fs_info; + + fs = fat_alloc (geom); + if (!fs) + goto error; + fs_info = (FatSpecific*) fs->type_specific; + + if (!fat_boot_sector_read (&fs_info->boot_sector, geom)) + goto error_free_fs; + if (!fat_boot_sector_analyse (fs_info->boot_sector, fs)) + goto error_free_fs; + fs->type = (fs_info->fat_type == FAT_TYPE_FAT16) + ? &fat16_type + : &fat32_type; + if (fs_info->fat_type == FAT_TYPE_FAT32) { + if (!fat_info_sector_read (&fs_info->info_sector, fs)) + goto error_free_fs; + } + + if (!_init_fats (fs)) + goto error_free_fs; + if (!fat_alloc_buffers (fs)) + goto error_free_fat_table; + if (!fat_collect_cluster_info (fs)) + goto error_free_buffers; + + return fs; + +error_free_buffers: + fat_free_buffers (fs); +error_free_fat_table: + fat_table_destroy (fs_info->fat); +error_free_fs: + fat_free (fs); +error: + return NULL; +} + +static int +fat_root_dir_clear (PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + memset (fs_info->buffer, 0, 512 * fs_info->root_dir_sector_count); + return ped_geometry_write (fs->geom, fs_info->buffer, + fs_info->root_dir_offset, + fs_info->root_dir_sector_count); +} + +PedFileSystem* +fat_create (PedGeometry* geom, FatType fat_type, PedTimer* timer) +{ + PedFileSystem* fs; + FatSpecific* fs_info; + FatCluster table_size; + + fs = fat_alloc (geom); + if (!fs) + goto error; + fs_info = (FatSpecific*) fs->type_specific; + + fs_info->logical_sector_size = 1; + fs_info->sectors_per_track = geom->dev->bios_geom.sectors; + fs_info->heads = geom->dev->bios_geom.heads; + fs_info->sector_count = fs->geom->length; + fs_info->fat_table_count = 2; +/* some initial values, to be changed later */ + fs_info->root_dir_sector_count = FAT_ROOT_DIR_ENTRY_COUNT + / (512 / sizeof (FatDirEntry)); + fs_info->root_dir_entry_count = FAT_ROOT_DIR_ENTRY_COUNT; + + fs_info->fat_type = fat_type; + if (!fat_calc_sizes (fs->geom->length, 0, + fs_info->fat_type, + fs_info->root_dir_sector_count, + &fs_info->cluster_sectors, + &fs_info->cluster_count, + &fs_info->fat_sectors)) { + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Partition too big/small for a %s file system."), + (fat_type == FAT_TYPE_FAT16) + ? fat16_type.name + : fat32_type.name); + goto error_free_fs; + } + + fs_info->cluster_size = fs_info->cluster_sectors * 512; + + fs_info->fat_offset = fat_min_reserved_sector_count (fs_info->fat_type); + fs_info->dir_entries_per_cluster + = fs_info->cluster_size / sizeof (FatDirEntry); + + if (fs_info->fat_type == FAT_TYPE_FAT16) { + /* FAT16 */ + fs->type = &fat16_type; + + if (fs_info->cluster_count + > fat_max_cluster_count (fs_info->fat_type)) { + fs_info->cluster_count + = fat_max_cluster_count (fs_info->fat_type); + } + + fs_info->root_dir_sector_count + = FAT_ROOT_DIR_ENTRY_COUNT + / (512 / sizeof (FatDirEntry)); + fs_info->root_dir_entry_count = FAT_ROOT_DIR_ENTRY_COUNT; + fs_info->root_dir_offset + = fs_info->fat_offset + + fs_info->fat_sectors * fs_info->fat_table_count; + fs_info->cluster_offset + = fs_info->root_dir_offset + + fs_info->root_dir_sector_count; + } else { + /* FAT32 */ + fs->type = &fat32_type; + + fs_info->info_sector_offset = 1; + fs_info->boot_sector_backup_offset = 6; + + fs_info->root_dir_sector_count = 0; + fs_info->root_dir_entry_count = 0; + fs_info->root_dir_offset = 0; + + fs_info->cluster_offset + = fs_info->fat_offset + + fs_info->fat_sectors * fs_info->fat_table_count; + } + + table_size = fs_info->fat_sectors * 512 + / fat_table_entry_size (fs_info->fat_type); + fs_info->fat = fat_table_new (fs_info->fat_type, table_size); + if (!fs_info->fat) + goto error_free_fs; + fat_table_set_cluster_count (fs_info->fat, fs_info->cluster_count); + if (!fat_alloc_buffers (fs)) + goto error_free_fat_table; + + if (fs_info->fat_type == FAT_TYPE_FAT32) { + fs_info->root_cluster + = fat_table_alloc_cluster (fs_info->fat); + fat_table_set_eof (fs_info->fat, fs_info->root_cluster); + memset (fs_info->buffer, 0, fs_info->cluster_size); + if (!fat_write_cluster (fs, fs_info->buffer, + fs_info->root_cluster)) + goto error_free_buffers; + } + + fs_info->serial_number = generate_random_uint32 (); + + if (!fat_boot_sector_set_boot_code (&fs_info->boot_sector, fs)) + goto error_free_buffers; + if (!fat_boot_sector_generate (&fs_info->boot_sector, fs)) + goto error_free_buffers; + if (!fat_boot_sector_write (fs_info->boot_sector, fs)) + goto error_free_buffers; + if (fs_info->fat_type == FAT_TYPE_FAT32) { + if (!fat_info_sector_generate (&fs_info->info_sector, fs)) + goto error_free_buffers; + if (!fat_info_sector_write (fs_info->info_sector, fs)) + goto error_free_buffers; + } + + if (!fat_table_write_all (fs_info->fat, fs)) + goto error_free_buffers; + + if (fs_info->fat_type == FAT_TYPE_FAT16) { + if (!fat_root_dir_clear (fs)) + goto error_free_buffers; + } + + return fs; + +error_free_buffers: + fat_free_buffers (fs); +error_free_fat_table: + fat_table_destroy (fs_info->fat); +error_free_fs: + fat_free (fs); +error: + return NULL; +} + +PedFileSystem* +fat_create_fat16 (PedGeometry* geom, PedTimer* timer) +{ + return fat_create (geom, FAT_TYPE_FAT16, timer); +} + +PedFileSystem* +fat_create_fat32 (PedGeometry* geom, PedTimer* timer) +{ + return fat_create (geom, FAT_TYPE_FAT32, timer); +} + +int +fat_close (PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + fat_free_buffers (fs); + fat_table_destroy (fs_info->fat); + fat_free (fs); + return 1; +} + +/* Hack: just resize the file system outside of its boundaries! */ +PedFileSystem* +fat_copy (const PedFileSystem* fs, PedGeometry* geom, PedTimer* timer) +{ + PedFileSystem* new_fs; + + new_fs = ped_file_system_open (fs->geom); + if (!new_fs) + goto error; + if (!ped_file_system_resize (new_fs, geom, timer)) + goto error_close_new_fs; + return new_fs; + +error_close_new_fs: + ped_file_system_close (new_fs); +error: + return 0; +} + +static int +_compare_fats (PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatTable* table_copy; + FatCluster table_size; + int i; + + table_size = fs_info->fat_sectors * 512 + / fat_table_entry_size (fs_info->fat_type); + + table_copy = fat_table_new (fs_info->fat_type, table_size); + if (!table_copy) + goto error; + + for (i = 1; i < fs_info->fat_table_count; i++) { + if (!fat_table_read (table_copy, fs, i)) + goto error_free_table_copy; + if (!fat_table_compare (fs_info->fat, table_copy)) { + if (ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("The FATs don't match. If you don't know " + "what this means, then select cancel, run " + "scandisk on the file system, and then come " + "back.")) + != PED_EXCEPTION_IGNORE) + goto error_free_table_copy; + } + } + + fat_table_destroy (table_copy); + return 1; + +error_free_table_copy: + fat_table_destroy (table_copy); +error: + return 0; +} + +int +fat_check (PedFileSystem* fs, PedTimer* timer) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedSector cluster_sectors; + FatCluster cluster_count; + PedSector fat_sectors; + PedSector align_sectors; + FatCluster info_free_clusters; + + align_sectors = fs_info->fat_offset + - fat_min_reserved_sector_count (fs_info->fat_type); + + if (!fat_calc_sizes (fs->geom->length, + align_sectors, + fs_info->fat_type, + fs_info->root_dir_sector_count, + &cluster_sectors, + &cluster_count, + &fat_sectors)) { + if (ped_exception_throw (PED_EXCEPTION_BUG, + PED_EXCEPTION_IGNORE_CANCEL, + _("There are no possible configurations for this FAT " + "type.")) + != PED_EXCEPTION_IGNORE) + goto error; + } + + if (fs_info->fat_type == FAT_TYPE_FAT16) { + if (cluster_sectors != fs_info->cluster_sectors + || cluster_count != fs_info->cluster_count + || fat_sectors != fs_info->fat_sectors) { + if (ped_exception_throw (PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("File system doesn't have expected sizes for " + "Windows to like it. " + "Cluster size is %dk (%dk expected); " + "number of clusters is %d (%d expected); " + "size of FATs is %d sectors (%d expected)."), + (int) fs_info->cluster_sectors / 2, + (int) cluster_sectors / 2, + (int) fs_info->cluster_count, + (int) cluster_count, + (int) fs_info->fat_sectors, + (int) fat_sectors) + != PED_EXCEPTION_IGNORE) + goto error; + } + } + + if (fs_info->fat_type == FAT_TYPE_FAT32) { + info_free_clusters + = PED_LE32_TO_CPU (fs_info->info_sector->free_clusters); + if (info_free_clusters != (FatCluster) -1 + && info_free_clusters != fs_info->fat->free_cluster_count) { + if (ped_exception_throw (PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("File system is reporting the free space as " + "%d clusters, not %d clusters."), + info_free_clusters, + fs_info->fat->free_cluster_count) + != PED_EXCEPTION_IGNORE) + goto error; + } + } + + if (!_compare_fats (fs)) + goto error; + + fs->checked = 1; + return 1; /* existence of fs implies consistency ;-) */ + +error: + return 0; +} + +/* Calculates how much space there will be in clusters in: + * old_fs intersect the-new-fs + */ +static PedSector +_calc_resize_data_size ( + const PedFileSystem* old_fs, + PedSector new_cluster_sectors, + FatCluster new_cluster_count, + PedSector new_fat_size) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (old_fs); + PedSector fat_size_delta; + + fat_size_delta = old_fs_info->fat_sectors - new_fat_size; + return new_cluster_sectors * new_cluster_count - fat_size_delta * 2; +} + +static int +_test_resize_size (const PedFileSystem* fs, + PedSector length, PedSector min_data_size) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedGeometry geom; + PedSector _cluster_sectors; + FatCluster _cluster_count; + PedSector _fat_size; + + ped_geometry_init (&geom, fs->geom->dev, fs->geom->start, length); + + if (fat_calc_resize_sizes ( + &geom, + fs_info->cluster_sectors, + FAT_TYPE_FAT16, + fs_info->root_dir_sector_count, + fs_info->cluster_sectors, + &_cluster_sectors, + &_cluster_count, + &_fat_size) + && _calc_resize_data_size (fs, _cluster_sectors, _cluster_count, + _fat_size) + >= min_data_size) + return 1; + + if (fat_calc_resize_sizes ( + &geom, + fs_info->cluster_sectors, + FAT_TYPE_FAT32, + 0, + fs_info->cluster_sectors, + &_cluster_sectors, + &_cluster_count, + &_fat_size) + && _calc_resize_data_size (fs, _cluster_sectors, _cluster_count, + _fat_size) + >= min_data_size) + return 1; + + return 0; +} + +/* does a binary search (!) for the mininum size. Too hard to compute directly + * (see calc_sizes() for why!) + */ +static PedSector +_get_min_resize_size (const PedFileSystem* fs, PedSector min_data_size) +{ + PedSector min_length = 0; + PedSector max_length = fs->geom->length; + PedSector length; + + while (min_length < max_length - 1) { + length = (min_length + max_length) / 2; + if (_test_resize_size (fs, length, min_data_size)) + max_length = length; + else + min_length = length; + } + +/* adds a bit of leeway (64 sectors), for resolving extra issues, like root + * directory allocation, that aren't covered here. + */ + return max_length + 64; +} + +PedConstraint* +fat_get_copy_constraint (const PedFileSystem* fs, const PedDevice* dev) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedGeometry full_dev; + PedSector min_cluster_count; + FatCluster used_clusters; + PedSector min_data_size; + + if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1)) + return NULL; + + used_clusters = fs_info->fat->cluster_count + - fs_info->fat->free_cluster_count; + min_cluster_count = used_clusters + fs_info->total_dir_clusters; + min_data_size = min_cluster_count * fs_info->cluster_sectors; + + return ped_constraint_new (ped_alignment_any, ped_alignment_any, + &full_dev, &full_dev, + _get_min_resize_size (fs, min_data_size), + dev->length); +} + +PedConstraint* +fat_get_resize_constraint (const PedFileSystem* fs) +{ + return fat_get_copy_constraint (fs, fs->geom->dev); +} + +PedConstraint* +fat_get_create_constraint_fat16 (const PedDevice* dev) +{ + PedGeometry full_dev; + PedSector min_size; + PedSector max_size; + + if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1)) + return NULL; + + min_size = 65794; + max_size = 2097153; + + return ped_constraint_new ( + ped_alignment_any, ped_alignment_any, + &full_dev, &full_dev, + min_size, max_size); +} + +PedConstraint* +fat_get_create_constraint_fat32 (const PedDevice* dev) +{ + PedGeometry full_dev; + PedSector min_size; + + if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1)) + return NULL; + + min_size = 525224; + + return ped_constraint_new ( + ped_alignment_any, ped_alignment_any, + &full_dev, &full_dev, + min_size, dev->length); +} +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/fat/fat.h b/jni/parted/libparted/fs/r/fat/fat.h new file mode 100755 index 0000000..54f0669 --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/fat.h @@ -0,0 +1,159 @@ +/* + libparted + Copyright (C) 1998-2001, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef FAT_H_INCLUDED +#define FAT_H_INCLUDED + +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include +#include +#include +#include + +#define BUFFER_SIZE 1024 /* buffer size in sectors (512 bytes) */ + +typedef uint32_t FatCluster; +typedef int32_t FatFragment; + +enum _FatType { + FAT_TYPE_FAT12, + FAT_TYPE_FAT16, + FAT_TYPE_FAT32 +}; +typedef enum _FatType FatType; + +typedef struct _FatSpecific FatSpecific; +typedef struct _FatDirEntry FatDirEntry; + +/* FIXME: YUCKY */ +#include "table.h" +#include "bootsector.h" +#include "context.h" +#include "fatio.h" +#include "traverse.h" +#include "calc.h" +#include "count.h" +#include "clstdup.h" + +struct __attribute__ ((packed)) _FatDirEntry { + char name[8]; + uint8_t extension[3]; + uint8_t attributes; + uint8_t is_upper_case_name; + uint8_t creation_time_low; /* milliseconds */ + uint16_t creation_time_high; + uint16_t creation_date; + uint16_t access_date; + uint16_t first_cluster_high; /* for FAT32 */ + uint16_t time; + uint16_t date; + uint16_t first_cluster; + uint32_t length; +}; + +struct _FatSpecific { + FatBootSector *boot_sector; /* structure of boot sector */ + FatInfoSector *info_sector; /* fat32-only information sector */ + + int logical_sector_size; /* illogical sector size :-) */ + PedSector sector_count; + + int sectors_per_track; /* BIOS CHS stuff (S) */ + int heads; /* BIOS CHS stuff (H) */ + + int cluster_size; + PedSector cluster_sectors; + FatCluster cluster_count; + int dir_entries_per_cluster; + + FatType fat_type; + int fat_table_count; + PedSector fat_sectors; + + uint32_t serial_number; + + PedSector info_sector_offset; /* FAT32 only */ + PedSector fat_offset; + PedSector root_dir_offset; /* non-FAT32 */ + PedSector cluster_offset; + PedSector boot_sector_backup_offset; + + FatCluster root_cluster; /* FAT32 only */ + int root_dir_entry_count; /* non-FAT32 */ + PedSector root_dir_sector_count; /* non-FAT32 */ + FatCluster total_dir_clusters; + + FatTable* fat; + FatClusterInfo* cluster_info; + + PedSector buffer_sectors; + char* buffer; + + int frag_size; + PedSector frag_sectors; + FatFragment frag_count; + FatFragment buffer_frags; + FatFragment cluster_frags; +}; + +#define FAT_SPECIFIC(fs) ((FatSpecific*) fs->type_specific) + +#define FAT_ROOT 0 + +#define DELETED_FLAG 0xe5 + +#define READONLY_ATTR 0x01 +#define HIDDEN_ATTR 0x02 +#define SYSTEM_ATTR 0x04 +#define VOLUME_LABEL_ATTR 0x08 +#define VFAT_ATTR 0x0f +#define DIRECTORY_ATTR 0x10 +#define ARCH_ATTR 0x20 + +#define MAX_FAT12_CLUSTERS 4086 +#define MAX_FAT16_CLUSTERS 65526 +#define MAX_FAT32_CLUSTERS 2000000 + +#define FAT_ROOT_DIR_ENTRY_COUNT 512 + +extern PedFileSystemType fat16_type; +extern PedFileSystemType fat32_type; + +extern void fat_print (const PedFileSystem* fs); + +extern PedFileSystem* fat_alloc (const PedGeometry* geom); +extern void fat_free (PedFileSystem* fs); +extern int fat_alloc_buffers (PedFileSystem* fs); +extern void fat_free_buffers (PedFileSystem* fs); + +extern int fat_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer); + +extern int fat_set_frag_sectors (PedFileSystem* fs, PedSector frag_sectors); + +#endif /* FAT_H_INCLUDED */ diff --git a/jni/parted/libparted/fs/r/fat/fatio.c b/jni/parted/libparted/fs/r/fat/fatio.c new file mode 100755 index 0000000..3a947ff --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/fatio.c @@ -0,0 +1,150 @@ +/* + libparted + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include "fat.h" +#include "fatio.h" + +#include +#include +#include +#include +#include +#include +#include + +#ifndef DISCOVER_ONLY + +int +fat_read_fragments (PedFileSystem* fs, char* buf, FatFragment frag, + FatFragment count) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedSector sector = fat_frag_to_sector (fs, frag); + PedSector sector_count = count * fs_info->frag_sectors; + + PED_ASSERT (frag >= 0 && frag < fs_info->frag_count); + + return ped_geometry_read (fs->geom, buf, sector, sector_count); +} + +int +fat_read_fragment (PedFileSystem* fs, char* buf, FatFragment frag) +{ + return fat_read_fragments (fs, buf, frag, 1); +} + +int +fat_write_fragments (PedFileSystem* fs, char* buf, FatFragment frag, + FatFragment count) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedSector sector = fat_frag_to_sector (fs, frag); + PedSector sector_count = count * fs_info->frag_sectors; + + PED_ASSERT (frag >= 0 && frag < fs_info->frag_count); + + return ped_geometry_write (fs->geom, buf, sector, sector_count); +} + +int +fat_write_fragment (PedFileSystem* fs, char* buf, FatFragment frag) +{ + return fat_write_fragments (fs, buf, frag, 1); +} + +int +fat_write_sync_fragments (PedFileSystem* fs, char* buf, FatFragment frag, + FatFragment count) +{ + if (!fat_write_fragments (fs, buf, frag, count)) + return 0; + if (!ped_geometry_sync (fs->geom)) + return 0; + return 1; +} + +int +fat_write_sync_fragment (PedFileSystem* fs, char* buf, FatFragment frag) +{ + return fat_write_sync_fragments (fs, buf, frag, 1); +} + +int +fat_read_clusters (PedFileSystem* fs, char *buf, FatCluster cluster, + FatCluster count) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedSector sector = fat_cluster_to_sector (fs, cluster); + PedSector sector_count = count * fs_info->cluster_sectors; + + PED_ASSERT (cluster >= 2 + && cluster + count - 1 < fs_info->cluster_count + 2); + + return ped_geometry_read (fs->geom, buf, sector, sector_count); +} + +int +fat_read_cluster (PedFileSystem* fs, char *buf, FatCluster cluster) +{ + return fat_read_clusters (fs, buf, cluster, 1); +} + +int +fat_write_clusters (PedFileSystem* fs, char *buf, FatCluster cluster, + FatCluster count) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedSector sector = fat_cluster_to_sector (fs, cluster); + PedSector sector_count = count * fs_info->cluster_sectors; + + PED_ASSERT (cluster >= 2 + && cluster + count - 1 < fs_info->cluster_count + 2); + + return ped_geometry_write (fs->geom, buf, sector, sector_count); +} + +int +fat_write_cluster (PedFileSystem* fs, char *buf, FatCluster cluster) +{ + return fat_write_clusters (fs, buf, cluster, 1); +} + +int +fat_write_sync_clusters (PedFileSystem* fs, char *buf, FatCluster cluster, + FatCluster count) +{ + if (!fat_write_clusters (fs, buf, cluster, count)) + return 0; + if (!ped_geometry_sync (fs->geom)) + return 0; + return 1; +} + +int +fat_write_sync_cluster (PedFileSystem* fs, char *buf, FatCluster cluster) +{ + if (!fat_write_cluster (fs, buf, cluster)) + return 0; + if (!ped_geometry_sync (fs->geom)) + return 0; + return 1; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/fat/fatio.h b/jni/parted/libparted/fs/r/fat/fatio.h new file mode 100755 index 0000000..53ebed7 --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/fatio.h @@ -0,0 +1,49 @@ +/* + libparted + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef FATIO_H_INCLUDED +#define FATIO_H_INCLUDED + +#include "fat.h" + +extern int fat_read_fragments (PedFileSystem* fs, char* buf, FatFragment frag, + FatFragment count); +extern int fat_write_fragments (PedFileSystem* fs, char* buf, FatFragment frag, + FatFragment count); +extern int fat_write_sync_fragments (PedFileSystem* fs, char* buf, + FatFragment frag, FatFragment count); + +extern int fat_read_fragment (PedFileSystem* fs, char* buf, FatFragment frag); +extern int fat_write_fragment (PedFileSystem* fs, char* buf, FatFragment frag); +extern int fat_write_sync_fragment (PedFileSystem* fs, char* buf, + FatFragment frag); + +extern int fat_read_clusters (PedFileSystem* fs, char* buf, FatCluster cluster, + FatCluster count); +extern int fat_write_clusters (PedFileSystem* fs, char* buf, FatCluster cluster, + FatCluster count); +extern int fat_write_sync_clusters (PedFileSystem* fs, char* buf, + FatCluster cluster, FatCluster count); + +extern int fat_read_cluster (PedFileSystem* fs, char *buf, FatCluster cluster); +extern int fat_write_cluster (PedFileSystem* fs, char *buf, FatCluster cluster); +extern int fat_write_sync_cluster (PedFileSystem* fs, char *buf, + FatCluster cluster); + +#endif /* FATIO_H_INCLUDED */ diff --git a/jni/parted/libparted/fs/r/fat/resize.c b/jni/parted/libparted/fs/r/fat/resize.c new file mode 100755 index 0000000..78dede4 --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/resize.c @@ -0,0 +1,876 @@ +/* + libparted + Copyright (C) 1998-2000, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include +#include "fat.h" +#include "traverse.h" +#include "count.h" +#include "fatio.h" +#include "calc.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef DISCOVER_ONLY + +/* Recursively builds (i.e. makes consistent) the duplicated directory tree + * (leaving the original directory tree in tact) + */ +static int +fat_construct_directory (FatOpContext* ctx, FatTraverseInfo* trav_info) +{ + FatTraverseInfo* sub_dir_info; + FatDirEntry* dir_entry; + FatCluster old_first_cluster; + + while ( (dir_entry = fat_traverse_next_dir_entry (trav_info)) ) { + if (fat_dir_entry_is_null_term (dir_entry)) + break; + if (!fat_dir_entry_has_first_cluster (dir_entry, ctx->old_fs)) + continue; + + fat_traverse_mark_dirty (trav_info); + + old_first_cluster = fat_dir_entry_get_first_cluster (dir_entry, + ctx->old_fs); + fat_dir_entry_set_first_cluster (dir_entry, ctx->new_fs, + fat_op_context_map_cluster (ctx, old_first_cluster)); + + if (fat_dir_entry_is_directory (dir_entry) + && dir_entry->name [0] != '.') { + sub_dir_info + = fat_traverse_directory (trav_info, dir_entry); + if (!sub_dir_info) + return 0; + if (!fat_construct_directory (ctx, sub_dir_info)) + return 0; + } + } + /* remove "stale" entries at the end */ + while ((dir_entry = fat_traverse_next_dir_entry (trav_info))) { + memset (dir_entry, 0, sizeof (FatDirEntry)); + fat_traverse_mark_dirty (trav_info); + } + fat_traverse_complete (trav_info); + return 1; +} + +static int +duplicate_legacy_root_dir (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + + PED_ASSERT (old_fs_info->root_dir_sector_count + == new_fs_info->root_dir_sector_count); + + if (!ped_geometry_read (ctx->old_fs->geom, old_fs_info->buffer, + old_fs_info->root_dir_offset, + old_fs_info->root_dir_sector_count)) + return 0; + + if (!ped_geometry_write (ctx->new_fs->geom, old_fs_info->buffer, + new_fs_info->root_dir_offset, + new_fs_info->root_dir_sector_count)) + return 0; + + return 1; +} + +/* + Constructs the new directory tree for legacy (FAT16) file systems. +*/ +static int +fat_construct_legacy_root (FatOpContext* ctx) +{ + FatTraverseInfo* trav_info; + + if (!duplicate_legacy_root_dir (ctx)) + return 0; + trav_info = fat_traverse_begin (ctx->new_fs, FAT_ROOT, "\\"); + return fat_construct_directory (ctx, trav_info); +} + +/* + Constructs the new directory tree for new (FAT32) file systems. +*/ +static int +fat_construct_root (FatOpContext* ctx) +{ + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + FatTraverseInfo* trav_info; + + trav_info = fat_traverse_begin (ctx->new_fs, new_fs_info->root_cluster, + "\\"); + fat_construct_directory (ctx, trav_info); + return 1; +} + +/* Converts the root directory between FAT16 and FAT32. NOTE: this code + * can also do no conversion. I'm leaving fat_construct_directory(), because + * it's really pretty :-) It also leaves a higher chance of deleted file + * recovery, because it doesn't remove redundant entries. (We do this here, + * because brain-damaged FAT16 has an arbitary limit on root directory entries, + * so we save room) + */ +static int +fat_convert_directory (FatOpContext* ctx, FatTraverseInfo* old_trav, + FatTraverseInfo* new_trav) +{ + FatTraverseInfo* sub_old_dir_trav; + FatTraverseInfo* sub_new_dir_trav; + FatDirEntry* new_dir_entry; + FatDirEntry* old_dir_entry; + FatCluster old_first_cluster; + + while ( (old_dir_entry = fat_traverse_next_dir_entry (old_trav)) ) { + if (fat_dir_entry_is_null_term (old_dir_entry)) + break; + if (!fat_dir_entry_is_active (old_dir_entry)) + continue; + + new_dir_entry = fat_traverse_next_dir_entry (new_trav); + if (!new_dir_entry) { + return ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("There's not enough room in the root " + "directory for all of the files. Either " + "cancel, or ignore to lose the files.")) + == PED_EXCEPTION_IGNORE; + } + + *new_dir_entry = *old_dir_entry; + fat_traverse_mark_dirty (new_trav); + + if (!fat_dir_entry_has_first_cluster (old_dir_entry, + ctx->old_fs)) + continue; + + old_first_cluster = fat_dir_entry_get_first_cluster ( + old_dir_entry, ctx->old_fs); + fat_dir_entry_set_first_cluster (new_dir_entry, ctx->new_fs, + fat_op_context_map_cluster (ctx, old_first_cluster)); + + if (fat_dir_entry_is_directory (old_dir_entry) + && old_dir_entry->name [0] != '.') { + sub_old_dir_trav + = fat_traverse_directory (old_trav, old_dir_entry); + if (!sub_old_dir_trav) return 0; + sub_new_dir_trav + = fat_traverse_directory (new_trav, new_dir_entry); + if (!sub_new_dir_trav) { + fat_traverse_complete (sub_old_dir_trav); + return 0; + } + + if (!fat_convert_directory (ctx, sub_old_dir_trav, + sub_new_dir_trav)) + return 0; + } + } + + /* remove "stale" entries at the end, just in case there is some + * overlap + */ + while ((new_dir_entry = fat_traverse_next_dir_entry (new_trav))) { + memset (new_dir_entry, 0, sizeof (FatDirEntry)); + fat_traverse_mark_dirty (new_trav); + } + + fat_traverse_complete (old_trav); + fat_traverse_complete (new_trav); + return 1; +} + +static void +clear_cluster (PedFileSystem* fs, FatCluster cluster) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + memset (fs_info->buffer, 0, fs_info->cluster_size); + fat_write_cluster (fs, fs_info->buffer, cluster); +} + +/* This MUST be called BEFORE the fat_construct_new_fat(), because cluster + * allocation depend on the old FAT. The reason is, old clusters may + * still be needed during the resize, (particularly clusters in the directory + * tree) even if they will be discarded later. + */ +static int +alloc_root_dir (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + FatCluster i; + FatCluster cluster; + FatCluster cluster_count; + + PED_ASSERT (new_fs_info->fat_type == FAT_TYPE_FAT32); + + cluster_count = ped_div_round_up ( + PED_MAX (16, old_fs_info->root_dir_sector_count), + new_fs_info->cluster_sectors); + + for (i = 0; i < cluster_count; i++) { + cluster = fat_table_alloc_check_cluster (new_fs_info->fat, + ctx->new_fs); + if (!cluster) + return 0; + ctx->new_root_dir [i] = cluster; + clear_cluster (ctx->new_fs, cluster); + } + ctx->new_root_dir [i] = 0; + new_fs_info->root_cluster = ctx->new_root_dir [0]; + return 1; +} + +/* when converting FAT32 -> FAT16 + * fat_duplicate clusters() duplicated the root directory unnecessarily. + * Let's free it. + * + * This must be called AFTER fat_construct_new_fat(). (otherwise, our + * changes just get overwritten) + */ +static int +free_root_dir (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + FatCluster old_cluster; + FatFragment i; + + PED_ASSERT (old_fs_info->fat_type == FAT_TYPE_FAT32); + PED_ASSERT (new_fs_info->fat_type == FAT_TYPE_FAT16); + + for (old_cluster = old_fs_info->root_cluster; + !fat_table_is_eof (old_fs_info->fat, old_cluster); + old_cluster = fat_table_get (old_fs_info->fat, old_cluster)) { + FatFragment old_frag; + old_frag = fat_cluster_to_frag (ctx->old_fs, old_cluster); + for (i = 0; i < new_fs_info->cluster_frags; i++) { + FatFragment new_frag; + FatCluster new_clst; + new_frag = fat_op_context_map_fragment (ctx, + old_frag + i); + new_clst = fat_frag_to_cluster (ctx->old_fs, new_frag); + if (!fat_table_set_avail (new_fs_info->fat, new_clst)) + return 0; + } + } + + return 1; +} + +static int +fat_clear_root_dir (PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + int i; + + PED_ASSERT (fs_info->fat_type == FAT_TYPE_FAT16); + PED_ASSERT (fs_info->root_dir_sector_count); + + memset (fs_info->buffer, 0, 512); + + for (i = 0; i < fs_info->root_dir_sector_count; i++) { + if (!ped_geometry_write (fs->geom, fs_info->buffer, + fs_info->root_dir_offset + i, 1)) { + if (ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Error writing to the root directory.")) + == PED_EXCEPTION_CANCEL) + return 0; + } + } + return 1; +} + +static int +fat_construct_converted_tree (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + FatTraverseInfo* old_trav_info; + FatTraverseInfo* new_trav_info; + + if (new_fs_info->fat_type == FAT_TYPE_FAT32) { + new_trav_info = fat_traverse_begin (ctx->new_fs, + new_fs_info->root_cluster, "\\"); + if (!new_trav_info) return 0; + old_trav_info = fat_traverse_begin (ctx->old_fs, FAT_ROOT, + "\\"); + } else { + fat_clear_root_dir (ctx->new_fs); + new_trav_info = fat_traverse_begin (ctx->new_fs, FAT_ROOT, + "\\"); + if (!new_trav_info) return 0; + old_trav_info = fat_traverse_begin (ctx->old_fs, + old_fs_info->root_cluster, "\\"); + } + if (!old_trav_info) { + fat_traverse_complete (new_trav_info); + return 0; + } + if (!fat_convert_directory (ctx, old_trav_info, new_trav_info)) + return 0; + return 1; +} + +/* + Constructs the new directory tree to match the new file locations. +*/ +static int +fat_construct_dir_tree (FatOpContext* ctx) +{ + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + + if (new_fs_info->fat_type == old_fs_info->fat_type) { + switch (old_fs_info->fat_type) { + case FAT_TYPE_FAT12: + PED_ASSERT (0); + break; + + case FAT_TYPE_FAT16: + return fat_construct_legacy_root (ctx); + + case FAT_TYPE_FAT32: + return fat_construct_root (ctx); + } + } else { + return fat_construct_converted_tree (ctx); + } + + return 0; +} + +static FatFragment +_get_next_old_frag (FatOpContext* ctx, FatFragment frag) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatCluster cluster; + FatCluster next_cluster; + + if ((frag + 1) % old_fs_info->cluster_frags != 0) { + if (fat_is_fragment_active (ctx->old_fs, frag + 1)) + return frag + 1; + else + return -1; + } else { + cluster = fat_frag_to_cluster (ctx->old_fs, frag); + next_cluster = fat_table_get (old_fs_info->fat, cluster); + + if (fat_table_is_eof (old_fs_info->fat, next_cluster)) + return -1; + else + return fat_cluster_to_frag (ctx->old_fs, next_cluster); + } +} + +/* + Constructs the new fat for the resized file system. +*/ +static int +fat_construct_new_fat (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + FatFragment old_frag; + FatCluster new_cluster; + FatFragment new_frag; + FatFragment old_next_frag; + FatFragment new_next_frag; + FatCluster new_next_cluster; + FatClusterFlag flag; + int i; + + fat_table_clear (new_fs_info->fat); + if (!fat_table_set_cluster_count (new_fs_info->fat, + new_fs_info->cluster_count)) + return 0; + + for (old_frag = 0; old_frag < old_fs_info->frag_count; old_frag++) { + flag = fat_get_fragment_flag (ctx->old_fs, old_frag); + if (flag == FAT_FLAG_FREE) + continue; + if (flag == FAT_FLAG_BAD) { + new_frag = fat_op_context_map_static_fragment ( + ctx, old_frag); + if (new_frag == -1) + continue; + new_cluster = fat_frag_to_cluster (ctx->new_fs, + new_frag); + fat_table_set_bad (new_fs_info->fat, new_cluster); + continue; + } + + new_frag = fat_op_context_map_fragment (ctx, old_frag); + new_cluster = fat_frag_to_cluster (ctx->new_fs, new_frag); + + old_next_frag = _get_next_old_frag (ctx, old_frag); + if (old_next_frag == -1) { + fat_table_set_eof (new_fs_info->fat, new_cluster); + continue; + } + + new_next_frag = fat_op_context_map_fragment (ctx, + old_next_frag); + PED_ASSERT (new_next_frag != -1); + + new_next_cluster = fat_frag_to_cluster (ctx->new_fs, + new_next_frag); + PED_ASSERT (new_next_cluster != new_cluster); + + fat_table_set (new_fs_info->fat, new_cluster, new_next_cluster); + } + + if (old_fs_info->fat_type == FAT_TYPE_FAT32 + && new_fs_info->fat_type == FAT_TYPE_FAT32) { + new_fs_info->root_cluster + = fat_op_context_map_cluster (ctx, + old_fs_info->root_cluster); + } + + if (old_fs_info->fat_type == FAT_TYPE_FAT16 + && new_fs_info->fat_type == FAT_TYPE_FAT32) { + for (i=0; ctx->new_root_dir[i+1]; i++) { + fat_table_set (new_fs_info->fat, + ctx->new_root_dir[i], + ctx->new_root_dir[i+1]); + } + fat_table_set_eof (new_fs_info->fat, ctx->new_root_dir[i]); + } + + return 1; +} + +static int +ask_type (PedFileSystem* fs, int fat16_ok, int fat32_ok, FatType* out_fat_type) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedExceptionOption status; + const char* fat16_msg; + const char* fat32_msg; + + if (fs_info->fat_type == FAT_TYPE_FAT16) + fat16_msg = _("If you leave your file system as FAT16, " + "then you will have no problems."); + else + fat16_msg = _("If you convert to FAT16, and MS Windows " + "is installed on this partition, then " + "you must re-install the MS Windows boot " + "loader. If you want to do this, you " + "should consult the Parted manual (or " + "your distribution's manual)."); + + if (fs_info->fat_type == FAT_TYPE_FAT32) + fat32_msg = _("If you leave your file system as FAT32, " + "then you will not introduce any new " + "problems."); + else + fat32_msg = _("If you convert to FAT32, and MS Windows " + "is installed on this partition, then " + "you must re-install the MS Windows boot " + "loader. If you want to do this, you " + "should consult the Parted manual (or " + "your distribution's manual). Also, " + "converting to FAT32 will make the file " + "system unreadable by MS DOS, MS Windows " + "95a, and MS Windows NT."); + + if (fat16_ok && fat32_ok) { + status = ped_exception_throw ( + PED_EXCEPTION_INFORMATION, + PED_EXCEPTION_YES_NO_CANCEL, + _("%s %s %s"), + _("Would you like to use FAT32?"), + fat16_msg, + fat32_msg); + + switch (status) { + case PED_EXCEPTION_YES: + *out_fat_type = FAT_TYPE_FAT32; + return 1; + + case PED_EXCEPTION_NO: + *out_fat_type = FAT_TYPE_FAT16; + return 1; + + case PED_EXCEPTION_UNHANDLED: + *out_fat_type = fs_info->fat_type; + return 1; + + case PED_EXCEPTION_CANCEL: + return 0; + + default: + PED_ASSERT (0); + break; + } + } + + if (fat16_ok) { + if (fs_info->fat_type != FAT_TYPE_FAT16) { + status = ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_OK_CANCEL, + _("%s %s"), + _("The file system can only be resized to this " + "size by converting to FAT16."), + fat16_msg); + if (status == PED_EXCEPTION_CANCEL) + return 0; + } + *out_fat_type = FAT_TYPE_FAT16; + return 1; + } + + if (fat32_ok) { + if (fs_info->fat_type != FAT_TYPE_FAT32) { + status = ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_OK_CANCEL, + _("%s %s"), + _("The file system can only be resized to this " + "size by converting to FAT32."), + fat32_msg); + if (status == PED_EXCEPTION_CANCEL) + return 0; + } + *out_fat_type = FAT_TYPE_FAT32; + return 1; + } + + ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("GNU Parted cannot resize this partition to this size. " + "We're working on it!")); + + return 0; +} + +/* For resize operations: determine if the file system must be FAT16 or FAT32, + * or either. If the new file system must be FAT32, then query for + * confirmation. If either file system can be used, query for which one. + */ +static int +get_fat_type (PedFileSystem* fs, const PedGeometry* new_geom, + FatType* out_fat_type) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + PedSector fat16_cluster_sectors; + PedSector fat32_cluster_sectors; + FatCluster dummy_cluster_count; + PedSector dummy_fat_sectors; + int fat16_ok; + int fat32_ok; + + fat16_ok = fat_calc_resize_sizes ( + new_geom, + fs_info->cluster_sectors, + FAT_TYPE_FAT16, + fs_info->root_dir_sector_count, + fs_info->cluster_sectors, + &fat16_cluster_sectors, + &dummy_cluster_count, + &dummy_fat_sectors); + + fat32_ok = fat_calc_resize_sizes ( + new_geom, + fs_info->cluster_sectors, + FAT_TYPE_FAT32, + fs_info->root_dir_sector_count, + fs_info->cluster_sectors, + &fat32_cluster_sectors, + &dummy_cluster_count, + &dummy_fat_sectors); + + return ask_type (fs, fat16_ok, fat32_ok, out_fat_type); +} + +/* Creates the PedFileSystem struct for the new resized file system, and + sticks it in a FatOpContext. At the end of the process, the original + (ctx->old_fs) is destroyed, and replaced with the new one (ctx->new_fs). + */ +static FatOpContext* +create_resize_context (PedFileSystem* fs, const PedGeometry* new_geom) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatSpecific* new_fs_info; + PedFileSystem* new_fs; + PedSector new_cluster_sectors; + FatCluster new_cluster_count; + PedSector new_fat_sectors; + FatType new_fat_type; + PedSector root_dir_sector_count; + FatOpContext* context; + + /* hypothetical number of root dir sectors, if we end up using + * FAT16 + */ + if (fs_info->root_dir_sector_count) + root_dir_sector_count = fs_info->root_dir_sector_count; + else + root_dir_sector_count = FAT_ROOT_DIR_ENTRY_COUNT + * sizeof (FatDirEntry) / 512; + + if (!get_fat_type (fs, new_geom, &new_fat_type)) + return 0; + + fat_calc_resize_sizes (new_geom, fs_info->cluster_sectors, new_fat_type, + root_dir_sector_count, fs_info->cluster_sectors, + &new_cluster_sectors, &new_cluster_count, &new_fat_sectors); + + if (!fat_check_resize_geometry (fs, new_geom, new_cluster_sectors, + new_cluster_count)) + goto error; + + new_fs = fat_alloc (new_geom); + if (!new_fs) + goto error; + + new_fs_info = FAT_SPECIFIC (new_fs); + if (!new_fs_info) + goto error_free_new_fs; + +/* preserve boot code, etc. */ + new_fs_info->boot_sector = ped_malloc (new_geom->dev->sector_size); + memcpy (new_fs_info->boot_sector, fs_info->boot_sector, + new_geom->dev->sector_size); + new_fs_info->info_sector = NULL; + if (fs_info->fat_type == FAT_TYPE_FAT32) + { + PED_ASSERT (fs_info->info_sector != NULL); + new_fs_info->info_sector = + ped_malloc (new_geom->dev->sector_size); + memcpy (new_fs_info->info_sector, fs_info->info_sector, + new_geom->dev->sector_size); + } + + new_fs_info->logical_sector_size = fs_info->logical_sector_size; + new_fs_info->sector_count = new_geom->length; + + new_fs_info->sectors_per_track = fs_info->sectors_per_track; + new_fs_info->heads = fs_info->heads; + + new_fs_info->cluster_size = new_cluster_sectors * 512; + new_fs_info->cluster_sectors = new_cluster_sectors; + new_fs_info->cluster_count = new_cluster_count; + new_fs_info->dir_entries_per_cluster = fs_info->dir_entries_per_cluster; + + new_fs_info->fat_type = new_fat_type; + new_fs_info->fat_table_count = 2; + new_fs_info->fat_sectors = new_fat_sectors; + + /* what about copying? */ + new_fs_info->serial_number = fs_info->serial_number; + + if (new_fs_info->fat_type == FAT_TYPE_FAT32) { + new_fs_info->info_sector_offset = 1; + new_fs_info->boot_sector_backup_offset = 6; + + new_fs_info->root_dir_offset = 0; + new_fs_info->root_dir_entry_count = 0; + new_fs_info->root_dir_sector_count = 0; + + /* we add calc_align_sectors to push the cluster_offset + forward, to keep the clusters aligned between the new + and old file systems + */ + new_fs_info->fat_offset + = fat_min_reserved_sector_count (FAT_TYPE_FAT32) + + fat_calc_align_sectors (new_fs, fs); + + new_fs_info->cluster_offset + = new_fs_info->fat_offset + + 2 * new_fs_info->fat_sectors; + } else { + new_fs_info->root_dir_sector_count = root_dir_sector_count; + new_fs_info->root_dir_entry_count + = root_dir_sector_count * 512 / sizeof (FatDirEntry); + + new_fs_info->fat_offset + = fat_min_reserved_sector_count (FAT_TYPE_FAT16) + + fat_calc_align_sectors (new_fs, fs); + + new_fs_info->root_dir_offset = new_fs_info->fat_offset + + 2 * new_fs_info->fat_sectors; + + new_fs_info->cluster_offset = new_fs_info->root_dir_offset + + new_fs_info->root_dir_sector_count; + } + + new_fs_info->total_dir_clusters = fs_info->total_dir_clusters; + + context = fat_op_context_new (new_fs, fs); + if (!context) + goto error_free_new_fs_info; + + if (!fat_op_context_create_initial_fat (context)) + goto error_free_context; + + if (!fat_alloc_buffers (new_fs)) + goto error_free_fat; + + return context; + +error_free_fat: + fat_table_destroy (new_fs_info->fat); +error_free_context: + free (context); +error_free_new_fs_info: + free (new_fs_info); +error_free_new_fs: + free (new_fs); +error: + return NULL; +} + +static int +resize_context_assimilate (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + + fat_free_buffers (ctx->old_fs); + fat_table_destroy (old_fs_info->fat); + free (old_fs_info); + ped_geometry_destroy (ctx->old_fs->geom); + + ctx->old_fs->type_specific = ctx->new_fs->type_specific; + ctx->old_fs->geom = ctx->new_fs->geom; + ctx->old_fs->type = (new_fs_info->fat_type == FAT_TYPE_FAT16) + ? &fat16_type + : &fat32_type; + + free (ctx->new_fs); + + fat_op_context_destroy (ctx); + + return 1; +} + +static int +resize_context_abort (FatOpContext* ctx) +{ + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + + fat_free_buffers (ctx->new_fs); + fat_table_destroy (new_fs_info->fat); + free (new_fs_info); + ped_geometry_destroy (ctx->new_fs->geom); + free (ctx->new_fs); + + fat_op_context_destroy (ctx); + + return 1; +} + +/* copies the "hidden" sectors, between the boot sector and the FAT. Required, + * for the Windows 98 FAT32 boot loader + */ +int +_copy_hidden_sectors (FatOpContext* ctx) +{ + FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs); + FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs); + PedSector first = 1; + PedSector last; + PedSector count; + + /* nothing to copy for FAT16 */ + if (old_fs_info->fat_type == FAT_TYPE_FAT16 + || new_fs_info->fat_type == FAT_TYPE_FAT16) + return 1; + + last = PED_MIN (old_fs_info->fat_offset, new_fs_info->fat_offset) - 1; + count = last - first + 1; + + PED_ASSERT (count < BUFFER_SIZE); + + if (!ped_geometry_read (ctx->old_fs->geom, old_fs_info->buffer, + first, count)) + return 0; + if (!ped_geometry_write (ctx->new_fs->geom, old_fs_info->buffer, + first, count)) + return 0; + return 1; +} + +int +fat_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatSpecific* new_fs_info; + FatOpContext* ctx; + PedFileSystem* new_fs; + + ctx = create_resize_context (fs, geom); + if (!ctx) + goto error; + new_fs = ctx->new_fs; + new_fs_info = FAT_SPECIFIC (new_fs); + + if (!fat_duplicate_clusters (ctx, timer)) + goto error_abort_ctx; + if (fs_info->fat_type == FAT_TYPE_FAT16 + && new_fs_info->fat_type == FAT_TYPE_FAT32) { + if (!alloc_root_dir (ctx)) + goto error_abort_ctx; + } + if (!fat_construct_new_fat (ctx)) + goto error_abort_ctx; + if (fs_info->fat_type == FAT_TYPE_FAT32 + && new_fs_info->fat_type == FAT_TYPE_FAT16) { + if (!free_root_dir (ctx)) + goto error_abort_ctx; + } + if (!fat_construct_dir_tree (ctx)) + goto error_abort_ctx; + if (!fat_table_write_all (new_fs_info->fat, new_fs)) + goto error_abort_ctx; + + _copy_hidden_sectors (ctx); + fat_boot_sector_generate (&new_fs_info->boot_sector, new_fs); + fat_boot_sector_write (new_fs_info->boot_sector, new_fs); + if (new_fs_info->fat_type == FAT_TYPE_FAT32) { + fat_info_sector_generate (&new_fs_info->info_sector, new_fs); + fat_info_sector_write (new_fs_info->info_sector, new_fs); + } + + if (!resize_context_assimilate (ctx)) + goto error; + + return 1; + +error_abort_ctx: + resize_context_abort (ctx); +error: + return 0; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/fat/table.c b/jni/parted/libparted/fs/r/fat/table.c new file mode 100755 index 0000000..ec0907f --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/table.c @@ -0,0 +1,481 @@ +/* + libparted + Copyright (C) 1998-2000, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include +#include +#include "fat.h" + +#ifndef DISCOVER_ONLY + +FatTable* +fat_table_new (FatType fat_type, FatCluster size) +{ + FatTable* ft; + int entry_size = fat_table_entry_size (fat_type); + + ft = (FatTable*) ped_malloc (sizeof (FatTable)); + if (!ft) return NULL; + + ft->cluster_count = ft->free_cluster_count = size - 2; + +/* ensure there's some free room on the end, to finish off the sector */ + ft->size = ped_div_round_up (size * entry_size, 512) * 512 / entry_size; + ft->fat_type = fat_type; + ft->raw_size = ft->size * entry_size; + + ft->table = ped_malloc (ft->raw_size); + if (!ft->table) { + free (ft); + return NULL; + } + + fat_table_clear (ft); + return ft; +} + +void +fat_table_destroy (FatTable* ft) +{ + free (ft->table); + free (ft); +} + +FatTable* +fat_table_duplicate (const FatTable* ft) +{ + FatTable* dup_ft; + + dup_ft = fat_table_new (ft->fat_type, ft->size); + if (!dup_ft) return NULL; + + dup_ft->cluster_count = ft->cluster_count; + dup_ft->free_cluster_count = ft->free_cluster_count; + dup_ft->bad_cluster_count = ft->bad_cluster_count; + dup_ft->last_alloc = ft->last_alloc; + + memcpy (dup_ft->table, ft->table, ft->raw_size); + + return dup_ft; +} + +void +fat_table_clear (FatTable* ft) +{ + memset (ft->table, 0, ft->raw_size); + + fat_table_set (ft, 0, 0x0ffffff8); + fat_table_set (ft, 1, 0x0fffffff); + + ft->free_cluster_count = ft->cluster_count; + ft->bad_cluster_count = 0; + ft->last_alloc = 1; +} + +int +fat_table_set_cluster_count (FatTable* ft, FatCluster new_cluster_count) +{ + PED_ASSERT (new_cluster_count + 2 <= ft->size); + + ft->cluster_count = new_cluster_count; + return fat_table_count_stats (ft); +} + +int +fat_table_count_stats (FatTable* ft) +{ + FatCluster i; + + PED_ASSERT (ft->cluster_count + 2 <= ft->size); + + ft->free_cluster_count = 0; + ft->bad_cluster_count = 0; + + for (i=2; i < ft->cluster_count + 2; i++) { + if (fat_table_is_available (ft, i)) + ft->free_cluster_count++; + if (fat_table_is_bad (ft, i)) + ft->bad_cluster_count++; + } + return 1; +} + +int +fat_table_read (FatTable* ft, const PedFileSystem* fs, int table_num) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (ft->raw_size >= fs_info->fat_sectors * 512); + + memset (ft->table, 0, ft->raw_size); + + if (!ped_geometry_read (fs->geom, (void *) ft->table, + fs_info->fat_offset + + table_num * fs_info->fat_sectors, + fs_info->fat_sectors)) + return 0; + + if ( *((unsigned char*) ft->table) != fs_info->boot_sector->media) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("FAT %d media %x doesn't match the boot sector's " + "media %x. You should probably run scandisk."), + (int) table_num + 1, + (int) *((unsigned char*) ft->table), + (int) fs_info->boot_sector->media) + != PED_EXCEPTION_IGNORE) + return 0; + } + + ft->cluster_count = fs_info->cluster_count; + + fat_table_count_stats (ft); + + return 1; +} + +int +fat_table_write (const FatTable* ft, PedFileSystem* fs, int table_num) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + PED_ASSERT (ft->raw_size >= fs_info->fat_sectors * 512); + + if (!ped_geometry_write (fs->geom, (void *) ft->table, + fs_info->fat_offset + + table_num * fs_info->fat_sectors, + fs_info->fat_sectors)) + return 0; + if (!ped_geometry_sync (fs->geom)) + return 0; + + return 1; +} + +int +fat_table_write_all (const FatTable* ft, PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + int i; + + for (i = 0; i < fs_info->fat_table_count; i++) { + if (!fat_table_write (ft, fs, i)) + return 0; + } + + return 1; +} + +int +fat_table_compare (const FatTable* a, const FatTable* b) +{ + FatCluster i; + + if (a->cluster_count != b->cluster_count) + return 0; + + for (i = 0; i < a->cluster_count + 2; i++) { + if (fat_table_get (a, i) != fat_table_get (b, i)) + return 0; + } + + return 1; +} + +static int +_test_code_available (const FatTable* ft, FatCluster code) +{ + return code == 0; +} + +static int +_test_code_bad (const FatTable* ft, FatCluster code) +{ + switch (ft->fat_type) { + case FAT_TYPE_FAT12: + if (code == 0xff7) return 1; + break; + + case FAT_TYPE_FAT16: + if (code == 0xfff7) return 1; + break; + + case FAT_TYPE_FAT32: + if (code == 0x0ffffff7) return 1; + break; + } + return 0; +} + +static int +_test_code_eof (const FatTable* ft, FatCluster code) +{ + switch (ft->fat_type) { + case FAT_TYPE_FAT12: + if (code >= 0xff7) return 1; + break; + + case FAT_TYPE_FAT16: + if (code >= 0xfff7) return 1; + break; + + case FAT_TYPE_FAT32: + if (code >= 0x0ffffff7) return 1; + break; + } + return 0; +} + +void +_update_stats (FatTable* ft, FatCluster cluster, FatCluster value) +{ + if (_test_code_available (ft, value) + && !fat_table_is_available (ft, cluster)) { + ft->free_cluster_count++; + if (fat_table_is_bad (ft, cluster)) + ft->bad_cluster_count--; + } + + if (!_test_code_available (ft, value) + && fat_table_is_available (ft, cluster)) { + ft->free_cluster_count--; + if (_test_code_bad (ft, cluster)) + ft->bad_cluster_count--; + } +} + +int +fat_table_set (FatTable* ft, FatCluster cluster, FatCluster value) +{ + if (cluster >= ft->cluster_count + 2) { + ped_exception_throw (PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("fat_table_set: cluster %ld outside " + "file system"), + (long) cluster); + return 0; + } + + _update_stats (ft, cluster, value); + + switch (ft->fat_type) { + case FAT_TYPE_FAT12: + PED_ASSERT (0); + break; + + case FAT_TYPE_FAT16: + ((unsigned short *) ft->table) [cluster] + = PED_CPU_TO_LE16 (value); + break; + + case FAT_TYPE_FAT32: + ((unsigned int *) ft->table) [cluster] + = PED_CPU_TO_LE32 (value); + break; + } + return 1; +} + +FatCluster +fat_table_get (const FatTable* ft, FatCluster cluster) +{ + if (cluster >= ft->cluster_count + 2) { + ped_exception_throw (PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("fat_table_get: cluster %ld outside " + "file system"), + (long) cluster); + exit (EXIT_FAILURE); /* FIXME */ + } + + switch (ft->fat_type) { + case FAT_TYPE_FAT12: + PED_ASSERT (0); + break; + + case FAT_TYPE_FAT16: + return PED_LE16_TO_CPU + (((unsigned short *) ft->table) [cluster]); + + case FAT_TYPE_FAT32: + return PED_LE32_TO_CPU + (((unsigned int *) ft->table) [cluster]); + } + + return 0; +} + +FatCluster +fat_table_alloc_cluster (FatTable* ft) +{ + FatCluster i; + FatCluster cluster; + +/* hack: assumes the first two FAT entries are marked as used (which they + * always should be) + */ + for (i=1; i < ft->cluster_count + 1; i++) { + cluster = (i + ft->last_alloc) % ft->cluster_count; + if (fat_table_is_available (ft, cluster)) { + ft->last_alloc = cluster; + return cluster; + } + } + + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("fat_table_alloc_cluster: no free clusters")); + return 0; +} + +FatCluster +fat_table_alloc_check_cluster (FatTable* ft, PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatCluster result; + + while (1) { + result = fat_table_alloc_cluster (ft); + if (!result) + return 0; + if (fat_read_cluster (fs, fs_info->buffer, result)) + return result; + fat_table_set_bad (ft, result); + } +} + +/* + returns true if is marked as bad +*/ +int +fat_table_is_bad (const FatTable* ft, FatCluster cluster) +{ + return _test_code_bad (ft, fat_table_get (ft, cluster)); +} + +/* + returns true if represents an EOF marker +*/ +int _GL_ATTRIBUTE_PURE +fat_table_is_eof (const FatTable* ft, FatCluster cluster) +{ + return _test_code_eof (ft, cluster); +} + +/* + returns true if is available. +*/ +int +fat_table_is_available (const FatTable* ft, FatCluster cluster) +{ + return _test_code_available (ft, fat_table_get (ft, cluster)); +} + +/* + returns true if is empty. Note that this includes bad clusters. +*/ +int +fat_table_is_empty (const FatTable* ft, FatCluster cluster) +{ + return fat_table_is_available (ft, cluster) + || fat_table_is_bad (ft, cluster); +} + +/* + returns true if is being used for something constructive. +*/ +int +fat_table_is_active (const FatTable* ft, FatCluster cluster) +{ + return !fat_table_is_bad (ft, cluster) + && !fat_table_is_available (ft, cluster); +} + +/* + marks as the last cluster in the chain +*/ +int +fat_table_set_eof (FatTable* ft, FatCluster cluster) +{ + + switch (ft->fat_type) { + case FAT_TYPE_FAT12: + PED_ASSERT (0); + break; + + case FAT_TYPE_FAT16: + return fat_table_set (ft, cluster, 0xfff8); + + case FAT_TYPE_FAT32: + return fat_table_set (ft, cluster, 0x0fffffff); + } + + return 0; +} + +/* + Marks a clusters as unusable, due to physical disk damage. +*/ +int +fat_table_set_bad (FatTable* ft, FatCluster cluster) +{ + if (!fat_table_is_bad (ft, cluster)) + ft->bad_cluster_count++; + + switch (ft->fat_type) { + case FAT_TYPE_FAT12: + return fat_table_set (ft, cluster, 0xff7); + + case FAT_TYPE_FAT16: + return fat_table_set (ft, cluster, 0xfff7); + + case FAT_TYPE_FAT32: + return fat_table_set (ft, cluster, 0x0ffffff7); + } + + return 0; +} + +/* + marks as unused/free/available +*/ +int +fat_table_set_avail (FatTable* ft, FatCluster cluster) +{ + return fat_table_set (ft, cluster, 0); +} + +#endif /* !DISCOVER_ONLY */ + +int _GL_ATTRIBUTE_CONST +fat_table_entry_size (FatType fat_type) +{ + switch (fat_type) { + case FAT_TYPE_FAT12: + return 2; /* FIXME: how? */ + + case FAT_TYPE_FAT16: + return 2; + + case FAT_TYPE_FAT32: + return 4; + } + + return 0; +} diff --git a/jni/parted/libparted/fs/r/fat/table.h b/jni/parted/libparted/fs/r/fat/table.h new file mode 100755 index 0000000..a70241b --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/table.h @@ -0,0 +1,74 @@ +/* + libparted + Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef PED_FAT_TABLE_H_INCLUDED +#define PED_FAT_TABLE_H_INCLUDED + +typedef struct _FatTable FatTable; + +#include "fat.h" + +struct _FatTable { + void* table; + FatCluster size; + int raw_size; + + FatType fat_type; + FatCluster cluster_count; + FatCluster free_cluster_count; + FatCluster bad_cluster_count; + + FatCluster last_alloc; +}; + +extern FatTable* fat_table_new (FatType fat_type, FatCluster size); +extern FatTable* fat_table_duplicate (const FatTable* ft); +extern void fat_table_destroy (FatTable* ft); +extern void fat_table_clear (FatTable* ft); +extern int fat_table_set_cluster_count (FatTable* ft, + FatCluster new_cluster_count); + +extern int fat_table_read (FatTable* ft, const PedFileSystem* fs, + int table_num); +extern int fat_table_write (const FatTable* ft, PedFileSystem* fs, + int table_num); +extern int fat_table_write_all (const FatTable* ft, PedFileSystem* fs); +extern int fat_table_compare (const FatTable* a, const FatTable* b); +extern int fat_table_count_stats (FatTable* ft); + +extern FatCluster fat_table_get (const FatTable* ft, FatCluster cluster); +extern int fat_table_set (FatTable* ft, FatCluster cluster, FatCluster value); + +extern FatCluster fat_table_alloc_cluster (FatTable* ft); +extern FatCluster fat_table_alloc_check_cluster (FatTable* ft, + PedFileSystem* fs); + +extern int fat_table_is_bad (const FatTable* ft, FatCluster cluster); +extern int fat_table_is_eof (const FatTable* ft, FatCluster cluster); +extern int fat_table_is_empty (const FatTable* ft, FatCluster cluster); +extern int fat_table_is_available (const FatTable* ft, FatCluster cluster); +extern int fat_table_is_active (const FatTable* ft, FatCluster cluster); + +extern int fat_table_set_eof (FatTable* ft, FatCluster cluster); +extern int fat_table_set_avail (FatTable* ft, FatCluster cluster); +extern int fat_table_set_bad (FatTable* ft, FatCluster cluster); + +extern int fat_table_entry_size (FatType fat_type); + +#endif /* PED_FAT_TABLE_H_INCLUDED */ diff --git a/jni/parted/libparted/fs/r/fat/traverse.c b/jni/parted/libparted/fs/r/fat/traverse.c new file mode 100755 index 0000000..42eeff9 --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/traverse.c @@ -0,0 +1,368 @@ +/* + libparted + Copyright (C) 1998-2000, 2005, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include "fat.h" +#include "traverse.h" + +#include +#include +#include + +#ifndef DISCOVER_ONLY + +#define NO_CLUSTER -1 + +static char tmp_buffer [4096]; + +int _GL_ATTRIBUTE_PURE +fat_traverse_entries_per_buffer (FatTraverseInfo* trav_info) +{ + return trav_info->buffer_size / sizeof (FatDirEntry); +} + +/* returns 1 if there are no more directory entries in the directory being + * traversed, 0 otherwise. + */ +static int +is_last_buffer (FatTraverseInfo* trav_info) { + FatSpecific* fs_info = FAT_SPECIFIC (trav_info->fs); + + if (trav_info->is_legacy_root_dir) + return 1; + else + return fat_table_is_eof (fs_info->fat, trav_info->next_buffer); +} + +static int +write_root_dir (FatTraverseInfo* trav_info) +{ + FatSpecific* fs_info = FAT_SPECIFIC (trav_info->fs); + + if (!ped_geometry_write (trav_info->fs->geom, trav_info->dir_entries, + fs_info->root_dir_offset, + fs_info->root_dir_sector_count)) + return 0; + if (!ped_geometry_sync (trav_info->fs->geom)) + return 0; + trav_info->dirty = 0; + return 1; +} + +static int +write_dir_cluster (FatTraverseInfo* trav_info) +{ + if (!fat_write_sync_cluster (trav_info->fs, + (void*) trav_info->dir_entries, + trav_info->this_buffer)) + return 0; + trav_info->dirty = 0; + return 1; +} + +static int +write_dir_buffer (FatTraverseInfo* trav_info) +{ + if (trav_info->is_legacy_root_dir) + return write_root_dir (trav_info); + else + return write_dir_cluster (trav_info); +} + +static int +read_next_dir_buffer (FatTraverseInfo* trav_info) +{ + FatSpecific* fs_info = FAT_SPECIFIC (trav_info->fs); + + PED_ASSERT (!trav_info->is_legacy_root_dir); + + trav_info->this_buffer = trav_info->next_buffer; + + if (trav_info->this_buffer < 2 + || trav_info->this_buffer >= fs_info->cluster_count + 2) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + "Cluster %ld in directory %s is outside file system!", + (long) trav_info->this_buffer, + trav_info->dir_name); + return 0; + } + + trav_info->next_buffer + = fat_table_get (fs_info->fat, trav_info->this_buffer); + + return fat_read_cluster (trav_info->fs, (void *) trav_info->dir_entries, + trav_info->this_buffer); +} + +/* FIXME: put into fat_dir_entry_* operations */ +void +fat_traverse_mark_dirty (FatTraverseInfo* trav_info) +{ + trav_info->dirty = 1; +} + +FatTraverseInfo* +fat_traverse_begin (PedFileSystem* fs, FatCluster start_cluster, + const char* dir_name) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatTraverseInfo* trav_info; + + trav_info = (FatTraverseInfo*) ped_malloc (sizeof (FatTraverseInfo)); + if (!trav_info) + goto error; + + trav_info->dir_name = strdup (dir_name); + if (!trav_info->dir_name) + goto error_free_trav_info; + + trav_info->fs = fs; + trav_info->is_legacy_root_dir + = (fs_info->fat_type == FAT_TYPE_FAT16) && (start_cluster == 0); + trav_info->dirty = 0; + trav_info->eof = 0; + trav_info->current_entry = -1; + + if (trav_info->is_legacy_root_dir) { + trav_info->buffer_size = 512 * fs_info->root_dir_sector_count; + } else { + trav_info->next_buffer = start_cluster; + trav_info->buffer_size = fs_info->cluster_size; + } + + trav_info->dir_entries + = (FatDirEntry*) ped_malloc (trav_info->buffer_size); + if (!trav_info->dir_entries) + goto error_free_dir_name; + + if (trav_info->is_legacy_root_dir) { + if (!ped_geometry_read (fs->geom, trav_info->dir_entries, + fs_info->root_dir_offset, + fs_info->root_dir_sector_count)) + goto error_free_dir_entries; + } else { + if (!read_next_dir_buffer (trav_info)) + goto error_free_dir_entries; + } + + return trav_info; + +error_free_dir_entries: + free (trav_info->dir_entries); +error_free_dir_name: + free (trav_info->dir_name); +error_free_trav_info: + free (trav_info); +error: + return NULL; +} + +int +fat_traverse_complete (FatTraverseInfo* trav_info) +{ + if (trav_info->dirty) { + if (!write_dir_buffer (trav_info)) + return 0; + } + free (trav_info->dir_entries); + free (trav_info->dir_name); + free (trav_info); + return 1; +} + +FatTraverseInfo* +fat_traverse_directory (FatTraverseInfo *trav_info, FatDirEntry* parent) +{ + strcpy (tmp_buffer, trav_info->dir_name); + fat_dir_entry_get_name (parent, + tmp_buffer + strlen (trav_info->dir_name)); + strcat (tmp_buffer, "\\"); + + return fat_traverse_begin (trav_info->fs, + fat_dir_entry_get_first_cluster (parent, trav_info->fs), + tmp_buffer); +} + +FatDirEntry* +fat_traverse_next_dir_entry (FatTraverseInfo *trav_info) +{ + if (trav_info->eof) + return NULL; + + trav_info->current_entry++; + if (trav_info->current_entry + >= fat_traverse_entries_per_buffer (trav_info)) { + if (trav_info->dirty) { + if (!write_dir_buffer (trav_info)) + return NULL; + } + + trav_info->current_entry = 0; + if (is_last_buffer (trav_info)) { + trav_info->eof = 1; + return NULL; + } + if (!read_next_dir_buffer (trav_info)) + return NULL; + } + return trav_info->dir_entries + trav_info->current_entry; +} + +FatCluster _GL_ATTRIBUTE_PURE +fat_dir_entry_get_first_cluster (FatDirEntry* dir_entry, PedFileSystem *fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + switch (fs_info->fat_type) { + case FAT_TYPE_FAT12: + case FAT_TYPE_FAT16: + return PED_LE16_TO_CPU (dir_entry->first_cluster); + + case FAT_TYPE_FAT32: + return PED_LE16_TO_CPU (dir_entry->first_cluster_high) + * 65536L + + PED_LE16_TO_CPU (dir_entry->first_cluster); + } + + return 0; +} + +void +fat_dir_entry_set_first_cluster (FatDirEntry* dir_entry, PedFileSystem* fs, + FatCluster cluster) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + + switch (fs_info->fat_type) { + case FAT_TYPE_FAT12: + PED_ASSERT (0); + break; + + case FAT_TYPE_FAT16: + dir_entry->first_cluster = PED_CPU_TO_LE16 (cluster); + break; + + case FAT_TYPE_FAT32: + dir_entry->first_cluster + = PED_CPU_TO_LE16 (cluster & 0xffff); + dir_entry->first_cluster_high + = PED_CPU_TO_LE16 (cluster / 0x10000); + break; + } +} + +uint32_t _GL_ATTRIBUTE_PURE +fat_dir_entry_get_length (FatDirEntry* dir_entry) +{ + return PED_LE32_TO_CPU (dir_entry->length); +} + +int +fat_dir_entry_is_null_term (const FatDirEntry* dir_entry) +{ + FatDirEntry null_entry; + + memset (&null_entry, 0, sizeof (null_entry)); + return memcmp (&null_entry, dir_entry, sizeof (null_entry)) == 0; +} + +int _GL_ATTRIBUTE_PURE +fat_dir_entry_is_active (FatDirEntry* dir_entry) +{ + if ((unsigned char) dir_entry->name[0] == DELETED_FLAG) return 0; + if ((unsigned char) dir_entry->name[0] == 0) return 0; + if ((unsigned char) dir_entry->name[0] == 0xF6) return 0; + return 1; +} + +int _GL_ATTRIBUTE_PURE +fat_dir_entry_is_file (FatDirEntry* dir_entry) { + if (dir_entry->attributes == VFAT_ATTR) return 0; + if (dir_entry->attributes & VOLUME_LABEL_ATTR) return 0; + if (!fat_dir_entry_is_active (dir_entry)) return 0; + if ((dir_entry->attributes & DIRECTORY_ATTR) == DIRECTORY_ATTR) return 0; + return 1; +} + +int _GL_ATTRIBUTE_PURE +fat_dir_entry_is_system_file (FatDirEntry* dir_entry) +{ + if (!fat_dir_entry_is_file (dir_entry)) return 0; + return (dir_entry->attributes & SYSTEM_ATTR) + || (dir_entry->attributes & HIDDEN_ATTR); +} + +int _GL_ATTRIBUTE_PURE +fat_dir_entry_is_directory (FatDirEntry* dir_entry) +{ + if (dir_entry->attributes == VFAT_ATTR) return 0; + if (dir_entry->attributes & VOLUME_LABEL_ATTR) return 0; + if (!fat_dir_entry_is_active (dir_entry)) return 0; + return (dir_entry->attributes & DIRECTORY_ATTR) == DIRECTORY_ATTR; +} + +int +fat_dir_entry_has_first_cluster (FatDirEntry* dir_entry, PedFileSystem* fs) +{ + FatSpecific* fs_info = FAT_SPECIFIC (fs); + FatCluster first_cluster; + + if (!fat_dir_entry_is_file (dir_entry) + && !fat_dir_entry_is_directory (dir_entry)) + return 0; + + first_cluster = fat_dir_entry_get_first_cluster (dir_entry, fs); + if (first_cluster == 0 + || fat_table_is_eof (fs_info->fat, first_cluster)) + return 0; + + return 1; +} + +/* + decrypts silly DOS names to FILENAME.EXT +*/ +void +fat_dir_entry_get_name (const FatDirEntry *dir_entry, char *result) { + size_t i; + const char *src; + const char *ext; + + src = dir_entry->name; + + for (i=0; i < sizeof dir_entry->name; i++) { + if (src[i] == ' ' || src[i] == 0) break; + *result++ = src[i]; + } + + ext = (const char *) dir_entry->extension; + if (ext[0] != ' ' && ext[0] != 0) { + *result++ = '.'; + for (i=0; i < sizeof dir_entry->extension; i++) { + if (ext[i] == ' ' || ext[i] == 0) break; + *result++ = ext[i]; + } + } + + *result = 0; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/fat/traverse.h b/jni/parted/libparted/fs/r/fat/traverse.h new file mode 100755 index 0000000..02318ba --- /dev/null +++ b/jni/parted/libparted/fs/r/fat/traverse.h @@ -0,0 +1,75 @@ +/* + libparted + Copyright (C) 1998-2000, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef TRAVERSE_H_INCLUDED +#define TRAVERSE_H_INCLUDED + +#include "fatio.h" + +typedef struct _FatTraverseInfo FatTraverseInfo; + +struct _FatTraverseInfo { + PedFileSystem* fs; + char* dir_name; + + int is_legacy_root_dir; + int dirty; + int eof; + + FatDirEntry* dir_entries; + int current_entry; + FatCluster this_buffer, next_buffer; + int buffer_size; +}; + +extern int fat_traverse_entries_per_buffer (FatTraverseInfo* trav_info); + +/* starts traversal at an arbitary cluster. if start_cluster==0, then uses + root directory */ +extern FatTraverseInfo* fat_traverse_begin (PedFileSystem* fs, + FatCluster start_cluster, + const char* dir_name); + +extern int fat_traverse_complete (FatTraverseInfo* trav_info); + +extern FatTraverseInfo* fat_traverse_directory (FatTraverseInfo* trav_info, + FatDirEntry* parent); + +extern void fat_traverse_mark_dirty (FatTraverseInfo* trav_info); + +extern FatDirEntry* fat_traverse_next_dir_entry (FatTraverseInfo* trav_info); + +extern FatCluster fat_dir_entry_get_first_cluster (FatDirEntry* dir_entry, + PedFileSystem* fs); + +extern void fat_dir_entry_set_first_cluster (FatDirEntry* dir_entry, + PedFileSystem* fs, FatCluster cluster); + +extern uint32_t fat_dir_entry_get_length (FatDirEntry* dir_entry); + +extern int fat_dir_entry_is_null_term (const FatDirEntry* dir_entry); +extern int fat_dir_entry_is_file (FatDirEntry* dir_entry); +extern int fat_dir_entry_is_system_file (FatDirEntry* dir_entry); +extern int fat_dir_entry_is_directory (FatDirEntry* dir_entry); +extern void fat_dir_entry_get_name (const FatDirEntry* dir_entry, char* result); +extern int fat_dir_entry_is_active (FatDirEntry* dir_entry); +extern int fat_dir_entry_has_first_cluster (FatDirEntry* dir_entry, + PedFileSystem* fs); + +#endif /* TRAVERSE_H_INCLUDED */ diff --git a/jni/parted/libparted/fs/r/filesys.c b/jni/parted/libparted/fs/r/filesys.c new file mode 100755 index 0000000..856238c --- /dev/null +++ b/jni/parted/libparted/fs/r/filesys.c @@ -0,0 +1,320 @@ +/* libparted - a library for manipulating disk partitions + Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +/** \file filesys.c */ + +/** + * \addtogroup PedFileSystem + * + * \note File systems exist on a PedGeometry - NOT a PedPartition. + * + * @{ + */ + +#include + +#include +#include +#include "pt-tools.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#define STREQ(a, b) (strcmp (a, b) == 0) + +#ifndef MIN +# define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#endif + +typedef PedFileSystem * (*open_fn_t) (PedGeometry *); +extern PedFileSystem *hfsplus_open (PedGeometry *); +extern PedFileSystem *hfs_open (PedGeometry *); +extern PedFileSystem *fat_open (PedGeometry *); + +typedef int (*close_fn_t) (PedFileSystem *); +extern int hfsplus_close (PedFileSystem *); +extern int hfs_close (PedFileSystem *); +extern int fat_close (PedFileSystem *); + +typedef int (*resize_fn_t) (PedFileSystem *fs, PedGeometry *geom, + PedTimer *timer); +extern int hfsplus_resize (PedFileSystem *fs, PedGeometry *geom, + PedTimer *timer); +extern int hfs_resize (PedFileSystem *fs, PedGeometry *geom, + PedTimer *timer); +extern int fat_resize (PedFileSystem *fs, PedGeometry *geom, + PedTimer *timer); + +typedef PedConstraint * (*resize_constraint_fn_t) (PedFileSystem const *fs); +extern PedConstraint *hfsplus_get_resize_constraint (PedFileSystem const *fs); +extern PedConstraint *hfs_get_resize_constraint (PedFileSystem const *fs); +extern PedConstraint *fat_get_resize_constraint (PedFileSystem const *fs); + +static bool +is_hfs_plus (char const *fs_type_name) +{ + return STREQ (fs_type_name, "hfsx") || STREQ (fs_type_name, "hfs+"); +} + +static open_fn_t +open_fn (char const *fs_type_name) +{ + if (is_hfs_plus (fs_type_name)) + return hfsplus_open; + if (STREQ (fs_type_name, "hfs")) + return hfs_open; + if (strncmp (fs_type_name, "fat", 3) == 0) + return fat_open; + return NULL; +} + +static close_fn_t +close_fn (char const *fs_type_name) +{ + if (is_hfs_plus (fs_type_name)) + return hfsplus_close; + if (STREQ (fs_type_name, "hfs")) + return hfs_close; + if (strncmp (fs_type_name, "fat", 3) == 0) + return fat_close; + return NULL; +} + +static resize_fn_t +resize_fn (char const *fs_type_name) +{ + if (is_hfs_plus (fs_type_name)) + return hfsplus_resize; + if (STREQ (fs_type_name, "hfs")) + return hfs_resize; + if (strncmp (fs_type_name, "fat", 3) == 0) + return fat_resize; + return NULL; +} + +static resize_constraint_fn_t +resize_constraint_fn (char const *fs_type_name) +{ + if (is_hfs_plus (fs_type_name)) + return hfsplus_get_resize_constraint; + if (STREQ (fs_type_name, "hfs")) + return hfs_get_resize_constraint; + if (strncmp (fs_type_name, "fat", 3) == 0) + return fat_get_resize_constraint; + return NULL; +} + +/** + * This function opens the file system stored on \p geom, if it + * can find one. + * It is often called in the following manner: + * \code + * fs = ped_file_system_open (&part.geom) + * \endcode + * + * \throws PED_EXCEPTION_ERROR if file system could not be detected + * \throws PED_EXCEPTION_ERROR if the file system is bigger than its volume + * \throws PED_EXCEPTION_NO_FEATURE if opening of a file system stored on + * \p geom is not implemented + * + * \return a PedFileSystem on success, \c NULL on failure. + */ +PedFileSystem * +ped_file_system_open (PedGeometry* geom) +{ + PED_ASSERT (geom != NULL); + + if (!ped_device_open (geom->dev)) + goto error; + + PedFileSystemType *type = ped_file_system_probe (geom); + if (!type) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Could not detect file system.")); + goto error_close_dev; + } + + open_fn_t open_f = open_fn (type->name); + if (open_f == NULL) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("resizing %s file systems is not supported"), + type->name); + goto error_close_dev; + } + + PedGeometry *probed_geom = ped_file_system_probe_specific (type, geom); + if (!probed_geom) + goto error_close_dev; + if (!ped_geometry_test_inside (geom, probed_geom)) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("The file system is bigger than its volume!")) + != PED_EXCEPTION_IGNORE) + goto error_destroy_probed_geom; + } + + PedFileSystem *fs = (*open_f) (probed_geom); + if (!fs) + goto error_destroy_probed_geom; + ped_geometry_destroy (probed_geom); + fs->type = type; + return fs; + +error_destroy_probed_geom: + ped_geometry_destroy (probed_geom); +error_close_dev: + ped_device_close (geom->dev); +error: + return NULL; +} + +/** + * Close file system \p fs. + * + * \return \c 1 on success, \c 0 on failure + */ +int +ped_file_system_close (PedFileSystem* fs) +{ + PED_ASSERT (fs != NULL); + PedDevice *dev = fs->geom->dev; + close_fn_t fn = close_fn (fs->type->name); + + if (!fn || !(fn (fs))) + goto error_close_dev; + ped_device_close (dev); + return 1; + +error_close_dev: + ped_device_close (dev); + return 0; +} + +/** + * This function erases all file system signatures that indicate that a + * file system occupies a given region described by \p geom. + * After this operation ped_file_system_probe() won't detect any file system. + * + * \return \c 1 on success, \c 0 on failure + */ +static int +ped_file_system_clobber (PedGeometry* geom) +{ + PED_ASSERT (geom != NULL); + + if (!ped_device_open (geom->dev)) + return 0; + + /* Clear the first three and the last two sectors, albeit fewer + when GEOM is too small. */ + PedSector len = MIN (geom->length, geom->dev->length); + + int ok = (len <= 5 + ? ptt_geom_clear_sectors (geom, 0, len) + : (ptt_geom_clear_sectors (geom, 0, 3) + && ptt_geom_clear_sectors (geom, geom->dev->length - 2, 2))); + + ped_device_close (geom->dev); + return !!ok; +} + +/* This function erases all signatures that indicate the presence of + * a file system in a particular region, without erasing any data + * contained inside the "exclude" region. + */ +static int +ped_file_system_clobber_exclude (PedGeometry* geom, + const PedGeometry* exclude) +{ + PedGeometry* clobber_geom; + int status; + + if (ped_geometry_test_sector_inside (exclude, geom->start)) + return 1; + + clobber_geom = ped_geometry_duplicate (geom); + if (ped_geometry_test_overlap (clobber_geom, exclude)) + ped_geometry_set_end (clobber_geom, exclude->start - 1); + + status = ped_file_system_clobber (clobber_geom); + ped_geometry_destroy (clobber_geom); + return status; +} + +/** + * Resize \p fs to new geometry \p geom. + * + * \p geom should satisfy the ped_file_system_get_resize_constraint(). + * (This isn't asserted, so it's not a bug not to... just it's likely + * to fail ;) If \p timer is non-NULL, it is used as the progress meter. + * + * \throws PED_EXCEPTION_NO_FEATURE if resizing of file system \p fs + * is not implemented yet + * + * \return \c 0 on failure + */ +int +ped_file_system_resize (PedFileSystem *fs, PedGeometry *geom, PedTimer *timer) +{ + PED_ASSERT (fs != NULL); + PED_ASSERT (geom != NULL); + + resize_fn_t resize_f = resize_fn (fs->type->name); + if (resize_f == NULL) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("resizing %s file systems is not supported"), + fs->type->name); + return 0; + } + + if (!ped_file_system_clobber_exclude (geom, fs->geom)) + return 0; + + return resize_f (fs, geom, timer); +} + +/** + * Return a constraint that represents all of the possible ways the + * file system \p fs can be resized with ped_file_system_resize(). + * This takes into account the amount of used space on + * the filesystem \p fs and the capabilities of the resize algorithm. + * Hints: + * -# if constraint->start_align->grain_size == 0, or + * constraint->start_geom->length == 1, then the start cannot be moved + * -# constraint->min_size is the minimum size you can resize the partition + * to. You might want to tell the user this ;-). + * + * \return a PedConstraint on success, \c NULL on failure + */ +PedConstraint * +ped_file_system_get_resize_constraint (const PedFileSystem *fs) +{ + PED_ASSERT (fs != NULL); + + resize_constraint_fn_t resize_constraint_f = + resize_constraint_fn (fs->type->name); + if (resize_constraint_f == NULL) + return NULL; + + return resize_constraint_f (fs); +} diff --git a/jni/parted/libparted/fs/r/hfs/advfs.c b/jni/parted/libparted/fs/r/hfs/advfs.c new file mode 100755 index 0000000..cb66e9e --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/advfs.c @@ -0,0 +1,332 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef DISCOVER_ONLY + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" +#include "file.h" + +#include "advfs.h" + +/* - if a < b, 0 if a == b, + if a > b */ +/* Comparaison is done in the following order : */ +/* CNID, then fork type, then start block */ +/* Note that HFS implementation in linux has a bug */ +/* in this function */ +static int +hfs_extent_key_cmp(HfsPrivateGenericKey* a, HfsPrivateGenericKey* b) +{ + HfsExtentKey* key1 = (HfsExtentKey*) a; + HfsExtentKey* key2 = (HfsExtentKey*) b; + + /* do NOT use a substraction, because */ + /* 0xFFFFFFFF - 1 = 0xFFFFFFFE so this */ + /* would return -2, despite the fact */ + /* 0xFFFFFFFF > 1 !!! (this is the 2.4 bug) */ + if (key1->file_ID != key2->file_ID) + return PED_BE32_TO_CPU(key1->file_ID) < + PED_BE32_TO_CPU(key2->file_ID) ? + -1 : +1; + + if (key1->type != key2->type) + return (int)(key1->type - key2->type); + + if (key1->start == key2->start) + return 0; + /* the whole thing wont work with 16 bits ints */ + /* anyway */ + return (int)( PED_BE16_TO_CPU(key1->start) - + PED_BE16_TO_CPU(key2->start) ); +} + +/* do a B-Tree lookup */ +/* read the first record immediatly inferior or egal to the given key */ +/* return 0 on error */ +/* record_out _must_ be large enough to receive record_size bytes */ +/* WARNING : the compare function called only handle Extents BTree */ +/* so modify this function if you want to do lookup in */ +/* other BTrees has well */ +int +hfs_btree_search (HfsPrivateFile* b_tree_file, HfsPrivateGenericKey* key, + void *record_out, unsigned int record_size, + HfsCPrivateLeafRec* record_ref) +{ + uint8_t node[PED_SECTOR_SIZE_DEFAULT]; + HfsHeaderRecord* header; + HfsNodeDescriptor* desc = (HfsNodeDescriptor*) node; + HfsPrivateGenericKey* record_key = NULL; + unsigned int node_number, record_number; + int i; + uint16_t record_pos; + + /* Read the header node */ + if (!hfs_file_read_sector(b_tree_file, node, 0)) + return 0; + uint16_t offset; + memcpy(&offset, node+(PED_SECTOR_SIZE_DEFAULT-2), sizeof(uint16_t)); + header = (HfsHeaderRecord*) (node + PED_BE16_TO_CPU(offset)); + + /* Get the node number of the root */ + node_number = PED_BE32_TO_CPU(header->root_node); + if (!node_number) + return 0; + + /* Read the root node */ + if (!hfs_file_read_sector(b_tree_file, node, node_number)) + return 0; + + /* Follow the white rabbit */ + while (1) { + record_number = PED_BE16_TO_CPU (desc->rec_nb); + for (i = record_number; i; i--) { + uint16_t value; + memcpy(&value, node+(PED_SECTOR_SIZE_DEFAULT - (2*i)), sizeof(uint16_t)); + record_pos = PED_BE16_TO_CPU(value); + record_key = (HfsPrivateGenericKey*) (node + record_pos); + /* check for obvious error in FS */ + if ((record_pos< HFS_FIRST_REC) + || (record_pos>= PED_SECTOR_SIZE_DEFAULT + - 2 * (signed)(record_number+1))) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The file system contains errors.")); + return 0; + } + if (hfs_extent_key_cmp(record_key, key) <= 0) + break; + } + if (!i) return 0; + if (desc->type == HFS_IDX_NODE) { + unsigned int skip; + + skip = (1 + record_key->key_length + 1) & ~1; + uint32_t value; + memcpy(&value, node+record_pos+skip, sizeof(uint32_t)); + node_number = PED_BE32_TO_CPU(value); + if (!hfs_file_read_sector(b_tree_file, node, + node_number)) + return 0; + } else + break; + } + + /* copy the result if needed */ + if (record_size) + memcpy (record_out, record_key, record_size); + + /* send record reference if needed */ + if (record_ref) { + record_ref->node_size = 1; /* in sectors */ + record_ref->node_number = node_number; + record_ref->record_pos = record_pos; + record_ref->record_number = i; + } + + /* success */ + return 1; +} + +/* free the bad blocks linked list */ +void +hfs_free_bad_blocks_list(HfsPrivateLinkExtent* first) +{ + HfsPrivateLinkExtent* next; + + while (first) { + next = first->next; + free (first); + first = next; + } +} + +/* This function reads bad blocks extents in the extents file + and store it in f.s. specific data of fs */ +int +hfs_read_bad_blocks (const PedFileSystem *fs) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + + if (priv_data->bad_blocks_loaded) + return 1; + + { + uint8_t record[sizeof (HfsExtentKey) + + sizeof (HfsExtDataRec)]; + HfsExtentKey search; + HfsExtentKey* ret_key = (HfsExtentKey*) record; + HfsExtDescriptor* ret_cache = (HfsExtDescriptor*) + (record + sizeof (HfsExtentKey)); + unsigned int block, last_start, first_pass = 1; + + search.key_length = sizeof (HfsExtentKey) - 1; + search.type = HFS_DATA_FORK; + search.file_ID = PED_CPU_TO_BE32 (HFS_BAD_BLOCK_ID); + + last_start = -1; block = 0; + while (1) { + int i; + + search.start = PED_CPU_TO_BE16 (block); + if (!hfs_btree_search (priv_data->extent_file, + (HfsPrivateGenericKey*) &search, + record, sizeof (record), NULL) + || ret_key->file_ID != search.file_ID + || ret_key->type != search.type) { + if (first_pass) + break; + else + goto errbb; + } + if (PED_BE16_TO_CPU (ret_key->start) == last_start) + break; + + last_start = PED_BE16_TO_CPU (ret_key->start); + for (i = 0; i < HFS_EXT_NB; i++) { + if (ret_cache[i].block_count) { + HfsPrivateLinkExtent* new_xt = + (HfsPrivateLinkExtent*) ped_malloc ( + sizeof (HfsPrivateLinkExtent)); + if (!new_xt) + goto errbb; + new_xt->next = priv_data->bad_blocks_xtent_list; + memcpy(&(new_xt->extent), ret_cache+i, + sizeof (HfsExtDescriptor)); + priv_data->bad_blocks_xtent_list = new_xt; + priv_data->bad_blocks_xtent_nb++; + block += PED_BE16_TO_CPU ( + ret_cache[i].block_count); + } + } + first_pass = 0; + } + + priv_data->bad_blocks_loaded = 1; + return 1;} + +errbb: hfs_free_bad_blocks_list(priv_data->bad_blocks_xtent_list); + priv_data->bad_blocks_xtent_list=NULL; + priv_data->bad_blocks_xtent_nb=0; + return 0; +} + +/* This function check if fblock is a bad block */ +int _GL_ATTRIBUTE_PURE +hfs_is_bad_block (const PedFileSystem *fs, unsigned int fblock) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + HfsPrivateLinkExtent* walk; + + for (walk = priv_data->bad_blocks_xtent_list; walk; walk = walk->next) { + /* Won't compile without the strange cast ! gcc bug ? */ + /* or maybe C subtilties... */ + if ((fblock >= PED_BE16_TO_CPU (walk->extent.start_block)) && + (fblock < (unsigned int) (PED_BE16_TO_CPU ( + walk->extent.start_block) + + PED_BE16_TO_CPU ( + walk->extent.block_count)))) + return 1; + } + + return 0; +} + +/* This function returns the first sector of the last free block of an + HFS volume we can get after a hfs_pack_free_space_from_block call */ +/* On error this function returns 0 */ +PedSector +hfs_get_empty_end (const PedFileSystem *fs) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + HfsMasterDirectoryBlock* mdb = priv_data->mdb; + unsigned int block, last_bad, end_free_blocks; + + /* find the next block to the last bad block of the volume */ + if (!hfs_read_bad_blocks (fs)) + return 0; + + HfsPrivateLinkExtent* l; + last_bad = 0; + for (l = priv_data->bad_blocks_xtent_list; l; l = l->next) { + if ((unsigned int) PED_BE16_TO_CPU (l->extent.start_block) + + PED_BE16_TO_CPU (l->extent.block_count) > last_bad) + last_bad = PED_BE16_TO_CPU (l->extent.start_block) + + PED_BE16_TO_CPU (l->extent.block_count); + } + + /* Count the free blocks from last_bad to the end of the volume */ + end_free_blocks = 0; + for (block = last_bad; + block < PED_BE16_TO_CPU (mdb->total_blocks); + block++) { + if (!TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) + end_free_blocks++; + } + + /* Calculate the block that will by the first free at the + end of the volume */ + block = PED_BE16_TO_CPU (mdb->total_blocks) - end_free_blocks; + + return (PedSector) PED_BE16_TO_CPU (mdb->start_block) + + (PedSector) block * (PED_BE32_TO_CPU (mdb->block_size) + / PED_SECTOR_SIZE_DEFAULT); +} + +/* return the block which should be used to pack data to have at + least free fblock blocks at the end of the volume */ +unsigned int _GL_ATTRIBUTE_PURE +hfs_find_start_pack (const PedFileSystem *fs, unsigned int fblock) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + unsigned int block; + + for (block = PED_BE16_TO_CPU (priv_data->mdb->total_blocks) - 1; + block && fblock; + block--) { + if (!TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) + fblock--; + } + + while (block && !TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) + block--; + if (TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) + block++; + + return block; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/hfs/advfs.h b/jni/parted/libparted/fs/r/hfs/advfs.h new file mode 100755 index 0000000..094298e --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/advfs.h @@ -0,0 +1,49 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef _ADVFS_H +#define _ADVFS_H + +#include +#include +#include + +#include "hfs.h" + +int +hfs_btree_search (HfsPrivateFile* b_tree_file, HfsPrivateGenericKey* key, + void *record_out, unsigned int record_size, + HfsCPrivateLeafRec* record_ref); + +void +hfs_free_bad_blocks_list(HfsPrivateLinkExtent* first); + +int +hfs_read_bad_blocks (const PedFileSystem *fs); + +int +hfs_is_bad_block (const PedFileSystem *fs, unsigned int fblock); + +PedSector +hfs_get_empty_end (const PedFileSystem *fs); + +unsigned int +hfs_find_start_pack (const PedFileSystem *fs, unsigned int fblock); + +#endif /* _ADVFS_H */ diff --git a/jni/parted/libparted/fs/r/hfs/advfs_plus.c b/jni/parted/libparted/fs/r/hfs/advfs_plus.c new file mode 100755 index 0000000..6104460 --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/advfs_plus.c @@ -0,0 +1,385 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef DISCOVER_ONLY + +#include + +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" +#include "advfs.h" +#include "file_plus.h" + +#include "advfs_plus.h" + +/* - if a < b, 0 if a == b, + if a > b */ +/* Comparaison is done in the following order : */ +/* CNID, then fork type, then start block */ +static int +hfsplus_extent_key_cmp(HfsPPrivateGenericKey* a, HfsPPrivateGenericKey* b) +{ + HfsPExtentKey* key1 = (HfsPExtentKey*) a; + HfsPExtentKey* key2 = (HfsPExtentKey*) b; + + if (key1->file_ID != key2->file_ID) + return PED_BE32_TO_CPU(key1->file_ID) < + PED_BE32_TO_CPU(key2->file_ID) ? + -1 : +1; + + if (key1->type != key2->type) + return (int)(key1->type - key2->type); + + if (key1->start == key2->start) + return 0; + return PED_BE32_TO_CPU(key1->start) < + PED_BE32_TO_CPU(key2->start) ? + -1 : +1; +} + +/* do a B-Tree lookup */ +/* read the first record immediatly inferior or egal to the given key */ +/* return 0 on error */ +/* record_out _must_ be large enough to receive the whole record (key + data) */ +/* WARNING : the search function called only handle Extents BTree */ +/* so modify this function if you want to do lookup in */ +/* other BTrees has well */ +int +hfsplus_btree_search (HfsPPrivateFile* b_tree_file, HfsPPrivateGenericKey* key, + void *record_out, unsigned int record_size, + HfsCPrivateLeafRec* record_ref) +{ + uint8_t node_1[PED_SECTOR_SIZE_DEFAULT]; + uint8_t* node; + HfsPHeaderRecord* header; + HfsPPrivateGenericKey* record_key = NULL; + unsigned int node_number, record_number, size, bsize; + int i; + uint16_t record_pos; + + /* Read the header node */ + if (!hfsplus_file_read_sector(b_tree_file, node_1, 0)) + return 0; + header = (HfsPHeaderRecord*) (node_1 + HFS_FIRST_REC); + + /* Get the node number of the root */ + node_number = PED_BE32_TO_CPU (header->root_node); + if (!node_number) + return 0; + + /* Get the size of a node in sectors and allocate buffer */ + size = (bsize = PED_BE16_TO_CPU (header->node_size)) / PED_SECTOR_SIZE_DEFAULT; + node = ped_malloc (bsize); + if (!node) + return 0; + HfsPNodeDescriptor *desc = (HfsPNodeDescriptor*) node; + + /* Read the root node */ + if (!hfsplus_file_read (b_tree_file, node, + (PedSector) node_number * size, size)) + return 0; + + /* Follow the white rabbit */ + while (1) { + record_number = PED_BE16_TO_CPU (desc->rec_nb); + for (i = record_number; i; i--) { + uint16_t value; + memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t)); + record_pos = PED_BE16_TO_CPU(value); + record_key = (HfsPPrivateGenericKey*) (node + record_pos); + /* check for obvious error in FS */ + if ((record_pos < HFS_FIRST_REC) + || (record_pos >= (signed)bsize + - 2 * (signed)(record_number+1))) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The file system contains errors.")); + free (node); + return 0; + } + if (hfsplus_extent_key_cmp(record_key, key) <= 0) + break; + } + if (!i) { free (node); return 0; } + if (desc->type == HFS_IDX_NODE) { + unsigned int skip; + + skip = ( 2 + PED_BE16_TO_CPU (record_key->key_length) + + 1 ) & ~1; + uint32_t value; + memcpy(&value, node+record_pos+skip, sizeof(uint32_t)); + node_number = PED_BE32_TO_CPU(value); + if (!hfsplus_file_read(b_tree_file, node, + (PedSector) node_number * size, + size)) { + free (node); + return 0; + } + } else + break; + } + + /* copy the result if needed */ + if (record_size) + memcpy (record_out, record_key, record_size); + + /* send record reference if needed */ + if (record_ref) { + record_ref->node_size = size; /* in sectors */ + record_ref->node_number = node_number; + record_ref->record_pos = record_pos; + record_ref->record_number = i; + } + + /* success */ + free (node); + return 1; +} + +/* free the bad blocks linked list */ +void +hfsplus_free_bad_blocks_list(HfsPPrivateLinkExtent* first) +{ + HfsPPrivateLinkExtent* next; + + while (first) { + next = first->next; + free (first); + first = next; + } +} + +/* This function reads bad blocks extents in the extents file + and store it in f.s. specific data of fs */ +int +hfsplus_read_bad_blocks (const PedFileSystem *fs) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + + if (priv_data->bad_blocks_loaded) + return 1; + + { + uint8_t record[sizeof (HfsPExtentKey) + + sizeof (HfsPExtDataRec)]; + HfsPExtentKey search; + HfsPExtentKey* ret_key = (HfsPExtentKey*) record; + HfsPExtDescriptor* ret_cache = (HfsPExtDescriptor*) + (record + sizeof (HfsPExtentKey)); + int block, first_pass = 1; + unsigned int last_start; + + search.key_length = sizeof (HfsExtentKey) - 2; + search.type = HFS_DATA_FORK; + search.pad = 0; + search.file_ID = PED_CPU_TO_BE32 (HFS_BAD_BLOCK_ID); + + last_start = -1; block = 0; + while (1) { + int i; + + search.start = PED_CPU_TO_BE32 (block); + if (!hfsplus_btree_search (priv_data->extents_file, + (HfsPPrivateGenericKey*) &search, + record, sizeof (record), NULL) + || ret_key->file_ID != search.file_ID + || ret_key->type != search.type) { + if (first_pass) + break; + else + goto errbbp; + } + if (PED_BE32_TO_CPU (ret_key->start) == last_start) + break; + + last_start = PED_BE32_TO_CPU (ret_key->start); + for (i = 0; i < HFSP_EXT_NB; i++) { + if (ret_cache[i].block_count) { + HfsPPrivateLinkExtent* new_xt = + (HfsPPrivateLinkExtent*) ped_malloc ( + sizeof (HfsPPrivateLinkExtent)); + if (!new_xt) + goto errbbp; + new_xt->next = priv_data->bad_blocks_xtent_list; + memcpy (&(new_xt->extent), ret_cache+i, + sizeof (HfsPExtDescriptor)); + priv_data->bad_blocks_xtent_list = new_xt; + priv_data->bad_blocks_xtent_nb++; + block += PED_BE32_TO_CPU ( + ret_cache[i].block_count); + } + } + first_pass = 0; + } + + priv_data->bad_blocks_loaded = 1; + return 1;} + +errbbp: hfsplus_free_bad_blocks_list(priv_data->bad_blocks_xtent_list); + priv_data->bad_blocks_xtent_list=NULL; + priv_data->bad_blocks_xtent_nb=0; + return 0; +} + +/* This function check if fblock is a bad block */ +int _GL_ATTRIBUTE_PURE +hfsplus_is_bad_block (const PedFileSystem *fs, unsigned int fblock) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsPPrivateLinkExtent* walk; + + for (walk = priv_data->bad_blocks_xtent_list; walk; walk = walk->next) { + /* Won't compile without the strange cast ! gcc bug ? */ + /* or maybe C subtilties... */ + if ((fblock >= PED_BE32_TO_CPU (walk->extent.start_block)) && + (fblock < (unsigned int)(PED_BE32_TO_CPU ( + walk->extent.start_block) + + PED_BE32_TO_CPU (walk->extent.block_count)))) + return 1; + } + + return 0; +} + +/* This function returns the first sector of the last free block of + an HFS+ volume we can get after a hfsplus_pack_free_space_from_block call */ +PedSector +hfsplus_get_empty_end (const PedFileSystem *fs) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsPVolumeHeader* vh = priv_data->vh; + unsigned int block, last_bad, end_free_blocks; + + /* find the next block to the last bad block of the volume */ + if (!hfsplus_read_bad_blocks (fs)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Bad blocks could not be read.")); + return 0; + } + + HfsPPrivateLinkExtent* l; + last_bad = 0; + for (l = priv_data->bad_blocks_xtent_list; l; l = l->next) { + if ((unsigned int) PED_BE32_TO_CPU (l->extent.start_block) + + PED_BE32_TO_CPU (l->extent.block_count) > last_bad) + last_bad = PED_BE32_TO_CPU (l->extent.start_block) + + PED_BE32_TO_CPU (l->extent.block_count); + } + + /* Count the free blocks from last_bad to the end of the volume */ + end_free_blocks = 0; + for (block = last_bad; + block < PED_BE32_TO_CPU (vh->total_blocks); + block++) { + if (!TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) + end_free_blocks++; + } + + /* Calculate the block that will by the first free at + the end of the volume */ + block = PED_BE32_TO_CPU (vh->total_blocks) - end_free_blocks; + + return (PedSector) block * ( PED_BE32_TO_CPU (vh->block_size) + / PED_SECTOR_SIZE_DEFAULT ); +} + +/* On error, returns 0 */ +PedSector +hfsplus_get_min_size (const PedFileSystem *fs) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + PedSector min_size; + + /* don't need to add anything because every sector + can be part of allocation blocks in HFS+, and + the last block _must_ be reserved */ + min_size = hfsplus_get_empty_end(fs); + if (!min_size) return 0; + + if (priv_data->wrapper) { + HfsPrivateFSData* hfs_priv_data = (HfsPrivateFSData*) + priv_data->wrapper->type_specific; + unsigned int hfs_sect_block; + PedSector hgee; + hfs_sect_block = + PED_BE32_TO_CPU (hfs_priv_data->mdb->block_size) + / PED_SECTOR_SIZE_DEFAULT; + /* + * if hfs+ is embedded in an hfs wrapper then the new size is : + * the new size of the hfs+ volume rounded up to the size + * of hfs blocks + * + the minimum size of the hfs wrapper without any hfs+ + * modification + * - the current size of the hfs+ volume in the hfs wrapper + */ + hgee = hfs_get_empty_end(priv_data->wrapper); + if (!hgee) return 0; + min_size = ((min_size + hfs_sect_block - 1) / hfs_sect_block) + * hfs_sect_block + + hgee + 2 + - (PedSector) PED_BE16_TO_CPU ( hfs_priv_data->mdb + ->old_new.embedded + .location.block_count ) + * hfs_sect_block; + } + + return min_size; +} + +/* return the block which should be used to pack data to have + at least free fblock blocks at the end of the volume */ +unsigned int _GL_ATTRIBUTE_PURE +hfsplus_find_start_pack (const PedFileSystem *fs, unsigned int fblock) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + unsigned int block; + + for (block = PED_BE32_TO_CPU (priv_data->vh->total_blocks) - 1; + block && fblock; + block--) { + if (!TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) + fblock--; + } + + while (block && !TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) + block--; + if (TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) + block++; + + return block; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/hfs/advfs_plus.h b/jni/parted/libparted/fs/r/hfs/advfs_plus.h new file mode 100755 index 0000000..61972c2 --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/advfs_plus.h @@ -0,0 +1,52 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef _ADVFS_PLUS_H +#define _ADVFS_PLUS_H + +#include +#include +#include + +#include "hfs.h" + +int +hfsplus_btree_search (HfsPPrivateFile* b_tree_file, HfsPPrivateGenericKey* key, + void *record_out, unsigned int record_size, + HfsCPrivateLeafRec* record_ref); + +void +hfsplus_free_bad_blocks_list(HfsPPrivateLinkExtent* first); + +int +hfsplus_read_bad_blocks (const PedFileSystem *fs); + +int +hfsplus_is_bad_block (const PedFileSystem *fs, unsigned int fblock); + +PedSector +hfsplus_get_empty_end (const PedFileSystem *fs); + +PedSector +hfsplus_get_min_size (const PedFileSystem *fs); + +unsigned int +hfsplus_find_start_pack (const PedFileSystem *fs, unsigned int fblock); + +#endif /* _ADVFS_PLUS_H */ diff --git a/jni/parted/libparted/fs/r/hfs/cache.c b/jni/parted/libparted/fs/r/hfs/cache.c new file mode 100755 index 0000000..255f1fd --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/cache.c @@ -0,0 +1,239 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef DISCOVER_ONLY + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" + +#include "cache.h" + +static HfsCPrivateCacheTable* +hfsc_new_cachetable(unsigned int size) +{ + HfsCPrivateCacheTable* ret; + + ret = (HfsCPrivateCacheTable*) ped_malloc(sizeof(*ret)); + if (!ret) return NULL; + + ret->next_cache = NULL; + ret->table_size = size; + ret->table_first_free = 0; + + ret->table = ped_malloc(sizeof(*ret->table)*size); + if (!ret->table) { free(ret); return NULL; } + memset(ret->table, 0, sizeof(*ret->table)*size); + + return ret; +} + +HfsCPrivateCache* +hfsc_new_cache(unsigned int block_number, unsigned int file_number) +{ + unsigned int cachetable_size, i; + HfsCPrivateCache* ret; + + ret = (HfsCPrivateCache*) ped_malloc(sizeof(*ret)); + if (!ret) return NULL; + ret->block_number = block_number; + /* following code avoid integer overflow */ + ret->linked_ref_size = block_number > block_number + ((1<> CR_SHIFT ) + 1 : + ( block_number + ((1<> CR_SHIFT + ; + + ret->linked_ref = (HfsCPrivateExtent**) + ped_malloc( sizeof(*ret->linked_ref) + * ret->linked_ref_size ); + if (!ret->linked_ref) { free(ret); return NULL; } + + cachetable_size = file_number + file_number / CR_OVER_DIV + CR_ADD_CST; + if (cachetable_size < file_number) cachetable_size = (unsigned) -1; + ret->first_cachetable_size = cachetable_size; + ret->table_list = hfsc_new_cachetable(cachetable_size); + if (!ret->table_list) { + free(ret->linked_ref); + free(ret); + return NULL; + } + ret->last_table = ret->table_list; + + for (i = 0; i < ret->linked_ref_size; ++i) + ret->linked_ref[i] = NULL; + + ret->needed_alloc_size = 0; + + return ret; +} + +static void +hfsc_delete_cachetable(HfsCPrivateCacheTable* list) +{ + HfsCPrivateCacheTable* next; + + while (list) { + free (list->table); + next = list->next_cache; + free (list); + list = next; + } +} + +void +hfsc_delete_cache(HfsCPrivateCache* cache) +{ + hfsc_delete_cachetable(cache->table_list); + free(cache->linked_ref); + free(cache); +} + +HfsCPrivateExtent* +hfsc_cache_add_extent(HfsCPrivateCache* cache, uint32_t start, uint32_t length, + uint32_t block, uint16_t offset, uint8_t sbb, + uint8_t where, uint8_t ref_index) +{ + HfsCPrivateExtent* ext; + unsigned int idx = start >> CR_SHIFT; + + PED_ASSERT(idx < cache->linked_ref_size); + + for (ext = cache->linked_ref[idx]; + ext && start != ext->ext_start; + ext = ext->next); + + if (ext) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Trying to register an extent starting at block " + "0x%X, but another one already exists at this " + "position. You should check the file system!"), + start); + return NULL; + } + + if ( cache->last_table->table_first_free + == cache->last_table->table_size ) { + cache->last_table->next_cache = + hfsc_new_cachetable( ( cache->first_cachetable_size + / CR_NEW_ALLOC_DIV ) + + CR_ADD_CST ); + if (!cache->last_table->next_cache) + return NULL; + cache->last_table = cache->last_table->next_cache; + } + + ext = cache->last_table->table+(cache->last_table->table_first_free++); + + ext->ext_start = start; + ext->ext_length = length; + ext->ref_block = block; + ext->ref_offset = offset; + ext->sect_by_block = sbb; + ext->where = where; + ext->ref_index = ref_index; + + ext->next = cache->linked_ref[idx]; + cache->linked_ref[idx] = ext; + + cache->needed_alloc_size = cache->needed_alloc_size > + (unsigned) PED_SECTOR_SIZE_DEFAULT * sbb ? + cache->needed_alloc_size : + (unsigned) PED_SECTOR_SIZE_DEFAULT * sbb; + + return ext; +} + +HfsCPrivateExtent* _GL_ATTRIBUTE_PURE +hfsc_cache_search_extent(HfsCPrivateCache* cache, uint32_t start) +{ + HfsCPrivateExtent* ret; + unsigned int idx = start >> CR_SHIFT; + + PED_ASSERT(idx < cache->linked_ref_size); + + for (ret = cache->linked_ref[idx]; + ret && start != ret->ext_start; + ret = ret->next); + + return ret; +} + +/* Can't fail if extent begining at old_start exists */ +/* Returns 0 if no such extent, or on error */ +HfsCPrivateExtent* +hfsc_cache_move_extent(HfsCPrivateCache* cache, uint32_t old_start, + uint32_t new_start) +{ + HfsCPrivateExtent** ppext; + HfsCPrivateExtent* pext; + + unsigned int idx1 = old_start >> CR_SHIFT; + unsigned int idx2 = new_start >> CR_SHIFT; + + PED_ASSERT(idx1 < cache->linked_ref_size); + PED_ASSERT(idx2 < cache->linked_ref_size); + + for (pext = cache->linked_ref[idx2]; + pext && new_start != pext->ext_start; + pext = pext->next); + + if (pext) { + ped_exception_throw ( + PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("Trying to move an extent from block 0x%X to block " + "0x%X, but another one already exists at this " + "position. This should not happen!"), + old_start, new_start); + return NULL; + } + + for (ppext = &(cache->linked_ref[idx1]); + (*ppext) && old_start != (*ppext)->ext_start; + ppext = &((*ppext)->next)); + + if (!(*ppext)) return NULL; + + /* removing the extent from the cache */ + pext = *ppext; + (*ppext) = pext->next; + + /* change ext_start and insert the extent again */ + pext->ext_start = new_start; + pext->next = cache->linked_ref[idx2]; + cache->linked_ref[idx2] = pext; + + return pext; +} + +#endif /* DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/hfs/cache.h b/jni/parted/libparted/fs/r/hfs/cache.h new file mode 100755 index 0000000..d009fd9 --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/cache.h @@ -0,0 +1,118 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef _CACHE_H +#define _CACHE_H + +#include +#include +#include + +#include "hfs.h" + +/* CR => CACHE REF */ +#define CR_NULL 0 /* reserved */ +#define CR_PRIM_CAT 1 +#define CR_PRIM_EXT 2 +#define CR_PRIM_ATTR 3 +#define CR_PRIM_ALLOC 4 +#define CR_PRIM_START 5 +#define CR_BTREE_CAT 6 +#define CR_BTREE_ATTR 7 +#define CR_BTREE_EXT_0 8 +#define CR_BTREE_EXT_CAT 9 +#define CR_BTREE_EXT_EXT 10 /* should not happen ! */ +#define CR_BTREE_EXT_ATTR 11 +#define CR_BTREE_EXT_ALLOC 12 +#define CR_BTREE_EXT_START 13 /* unneeded in current code */ +#define CR_BTREE_CAT_JIB 14 /* journal info block */ +#define CR_BTREE_CAT_JL 15 /* journal */ +/* 16 -> 31 || high order bit */ /* reserved */ + +/* tuning */ +#define CR_SHIFT 8 /* number of bits to shift start_block by */ + /* to get the index of the linked list */ +#define CR_OVER_DIV 16 /* alloc a table for (1+1/CR_OVER_DIV) * + file_number + CR_ADD_CST */ +#define CR_ADD_CST 16 +#define CR_NEW_ALLOC_DIV 4 /* divide the size of the first alloc table + by this value to allocate next tables */ + +/* See DOC for an explaination of this structure */ +/* Access read only from outside cache.c */ +struct _HfsCPrivateExtent { + struct _HfsCPrivateExtent* next; + uint32_t ext_start; + uint32_t ext_length; + uint32_t ref_block; + uint16_t ref_offset; + uint8_t sect_by_block; + unsigned where : 5; + unsigned ref_index : 3; /* 0 -> 7 */ +}; +typedef struct _HfsCPrivateExtent HfsCPrivateExtent; + +/* Internaly used by cache.c for custom memory managment only */ +struct _HfsCPrivateCacheTable { + struct _HfsCPrivateCacheTable* next_cache; + HfsCPrivateExtent* table; + unsigned int table_size; + unsigned int table_first_free; + /* first_elemt ? */ +}; +typedef struct _HfsCPrivateCacheTable HfsCPrivateCacheTable; + +/* Internaly used by cache.c for custom memory managment + and cache handling only */ +struct _HfsCPrivateCache { + HfsCPrivateCacheTable* table_list; + HfsCPrivateCacheTable* last_table; + HfsCPrivateExtent** linked_ref; + unsigned int linked_ref_size; + unsigned int block_number; + unsigned int first_cachetable_size; + unsigned int needed_alloc_size; +}; +typedef struct _HfsCPrivateCache HfsCPrivateCache; + +HfsCPrivateCache* +hfsc_new_cache(unsigned int block_number, unsigned int file_number); + +void +hfsc_delete_cache(HfsCPrivateCache* cache); + +HfsCPrivateExtent* +hfsc_cache_add_extent(HfsCPrivateCache* cache, uint32_t start, uint32_t length, + uint32_t block, uint16_t offset, uint8_t sbb, + uint8_t where, uint8_t index); + +HfsCPrivateExtent* +hfsc_cache_search_extent(HfsCPrivateCache* cache, uint32_t start); + +HfsCPrivateExtent* +hfsc_cache_move_extent(HfsCPrivateCache* cache, uint32_t old_start, + uint32_t new_start); + +static __inline__ unsigned int +hfsc_cache_needed_buffer(HfsCPrivateCache* cache) +{ + return cache->needed_alloc_size; +} + +#endif /* _CACHE_H */ diff --git a/jni/parted/libparted/fs/r/hfs/file-16771e92.o.tmp b/jni/parted/libparted/fs/r/hfs/file-16771e92.o.tmp new file mode 100755 index 0000000..e69de29 diff --git a/jni/parted/libparted/fs/r/hfs/file.c b/jni/parted/libparted/fs/r/hfs/file.c new file mode 100755 index 0000000..6024d84 --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/file.c @@ -0,0 +1,229 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef DISCOVER_ONLY + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" +#include "advfs.h" + +#include "file.h" + +/* Open the data fork of a file with its first three extents and its CNID */ +HfsPrivateFile* +hfs_file_open (PedFileSystem *fs, uint32_t CNID, + HfsExtDataRec ext_desc, PedSector sect_nb) +{ + HfsPrivateFile* file; + + file = (HfsPrivateFile*) ped_malloc (sizeof (HfsPrivateFile)); + if (!file) return NULL; + + file->fs = fs; + file->sect_nb = sect_nb; + file->CNID = CNID; + memcpy(file->first, ext_desc, sizeof (HfsExtDataRec)); + file->start_cache = 0; + + return file; +} + +/* Close an HFS file */ +void +hfs_file_close (HfsPrivateFile* file) +{ + free (file); +} + +/* warning : only works on data forks */ +static int +hfs_get_extent_containing (HfsPrivateFile* file, unsigned int block, + HfsExtDataRec cache, uint16_t* ptr_start_cache) +{ + uint8_t record[sizeof (HfsExtentKey) + + sizeof (HfsExtDataRec)]; + HfsExtentKey search; + HfsExtentKey* ret_key = (HfsExtentKey*) record; + HfsExtDescriptor* ret_cache = (HfsExtDescriptor*) + (record + sizeof (HfsExtentKey)); + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + file->fs->type_specific; + + search.key_length = sizeof (HfsExtentKey) - 1; + search.type = HFS_DATA_FORK; + search.file_ID = file->CNID; + search.start = PED_CPU_TO_BE16 (block); + + if (!hfs_btree_search (priv_data->extent_file, + (HfsPrivateGenericKey*) &search, + record, sizeof (record), NULL)) + return 0; + + if (ret_key->file_ID != search.file_ID || ret_key->type != search.type) + return 0; + + memcpy (cache, ret_cache, sizeof(HfsExtDataRec)); + *ptr_start_cache = PED_BE16_TO_CPU (ret_key->start); + + return 1; +} + +/* find and return the nth sector of a file */ +/* return 0 on error */ +static PedSector +hfs_file_find_sector (HfsPrivateFile* file, PedSector sector) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + file->fs->type_specific; + unsigned int sect_by_block = PED_BE32_TO_CPU ( + priv_data->mdb->block_size) + / PED_SECTOR_SIZE_DEFAULT; + unsigned int i, s, vol_block; + unsigned int block = sector / sect_by_block; + unsigned int offset = sector % sect_by_block; + + /* in the three first extent */ + for (s = 0, i = 0; i < HFS_EXT_NB; i++) { + if ((block >= s) && ( block < s + PED_BE16_TO_CPU ( + file->first[i].block_count))) { + vol_block = (block - s) + PED_BE16_TO_CPU ( + file->first[i].start_block); + goto sector_found; + } + s += PED_BE16_TO_CPU (file->first[i].block_count); + } + + /* in the three cached extent */ + if (file->start_cache && block >= file->start_cache) + for (s = file->start_cache, i = 0; i < HFS_EXT_NB; i++) { + if ((block >= s) && (block < s + PED_BE16_TO_CPU ( + file->cache[i].block_count))) { + vol_block = (block - s) + PED_BE16_TO_CPU ( + file->cache[i].start_block); + goto sector_found; + } + s += PED_BE16_TO_CPU (file->cache[i].block_count); + } + + /* update cache */ + if (!hfs_get_extent_containing (file, block, file->cache, + &(file->start_cache))) { + ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_CANCEL, + _("Could not update the extent cache for HFS file with " + "CNID %X."), + PED_BE32_TO_CPU(file->CNID)); + return 0; + } + + /* in the three cached extent */ + PED_ASSERT(file->start_cache && block >= file->start_cache); + for (s = file->start_cache, i = 0; i < HFS_EXT_NB; i++) { + if ((block >= s) && (block < s + PED_BE16_TO_CPU ( + file->cache[i].block_count))) { + vol_block = (block - s) + PED_BE16_TO_CPU ( + file->cache[i].start_block); + goto sector_found; + } + s += PED_BE16_TO_CPU (file->cache[i].block_count); + } + + return 0; + + sector_found: + return (PedSector) PED_BE16_TO_CPU (priv_data->mdb->start_block) + + (PedSector) vol_block * sect_by_block + + offset; +} + +/* Read the nth sector of a file */ +/* return 0 on error */ +int +hfs_file_read_sector (HfsPrivateFile* file, void *buf, PedSector sector) +{ + PedSector abs_sector; + + if (sector >= file->sect_nb) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Trying to read HFS file with CNID %X behind EOF."), + PED_BE32_TO_CPU(file->CNID)); + return 0; + } + + abs_sector = hfs_file_find_sector (file, sector); + if (!abs_sector) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Could not find sector %lli of HFS file with " + "CNID %X."), + sector, PED_BE32_TO_CPU(file->CNID)); + return 0; + } + + return ped_geometry_read (file->fs->geom, buf, abs_sector, 1); +} + +/* Write the nth sector of a file */ +/* return 0 on error */ +int +hfs_file_write_sector (HfsPrivateFile* file, void *buf, PedSector sector) +{ + PedSector abs_sector; + + if (sector >= file->sect_nb) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Trying to write HFS file with CNID %X behind EOF."), + PED_BE32_TO_CPU(file->CNID)); + return 0; + } + + abs_sector = hfs_file_find_sector (file, sector); + if (!abs_sector) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Could not find sector %lli of HFS file with " + "CNID %X."), + sector, PED_BE32_TO_CPU(file->CNID)); + return 0; + } + + return ped_geometry_write (file->fs->geom, buf, abs_sector, 1); +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/hfs/file.h b/jni/parted/libparted/fs/r/hfs/file.h new file mode 100755 index 0000000..f8cb485 --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/file.h @@ -0,0 +1,42 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef _FILE_H +#define _FILE_H + +#include +#include +#include + +#include "hfs.h" + +HfsPrivateFile* +hfs_file_open (PedFileSystem *fs, uint32_t CNID, + HfsExtDataRec ext_desc, PedSector sect_nb); + +void +hfs_file_close (HfsPrivateFile* file); + +int +hfs_file_read_sector (HfsPrivateFile* file, void *buf, PedSector sector); + +int +hfs_file_write_sector (HfsPrivateFile* file, void *buf, PedSector sector); + +#endif /* _FILE_H */ diff --git a/jni/parted/libparted/fs/r/hfs/file_plus.c b/jni/parted/libparted/fs/r/hfs/file_plus.c new file mode 100755 index 0000000..aeff5ee --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/file_plus.c @@ -0,0 +1,274 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef DISCOVER_ONLY + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" +#include "advfs_plus.h" + +#include "file_plus.h" + +/* Open the data fork of a file with its first eight extents and its CNID */ +/* CNID and ext_desc must be in disc order, sect_nb in CPU order */ +/* return null on failure */ +HfsPPrivateFile* +hfsplus_file_open (PedFileSystem *fs, HfsPNodeID CNID, + HfsPExtDataRec ext_desc, PedSector sect_nb) +{ + HfsPPrivateFile* file; + + file = (HfsPPrivateFile*) ped_malloc (sizeof (HfsPPrivateFile)); + if (!file) return NULL; + + file->fs = fs; + file->sect_nb = sect_nb; + file->CNID = CNID; + memcpy(file->first, ext_desc, sizeof (HfsPExtDataRec)); + file->start_cache = 0; + + return file; +} + +/* Close an HFS+ file */ +void +hfsplus_file_close (HfsPPrivateFile* file) +{ + free (file); +} + +/* warning : only works on data forks */ +static int +hfsplus_get_extent_containing (HfsPPrivateFile* file, unsigned int block, + HfsPExtDataRec cache, uint32_t* ptr_start_cache) +{ + uint8_t record[sizeof (HfsPExtentKey) + + sizeof (HfsPExtDataRec)]; + HfsPExtentKey search; + HfsPExtentKey* ret_key = (HfsPExtentKey*) record; + HfsPExtDescriptor* ret_cache = (HfsPExtDescriptor*) + (record + sizeof (HfsPExtentKey)); + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + file->fs->type_specific; + + search.key_length = PED_CPU_TO_BE16 (sizeof (HfsPExtentKey) - 2); + search.type = HFS_DATA_FORK; + search.pad = 0; + search.file_ID = file->CNID; + search.start = PED_CPU_TO_BE32 (block); + + if (!hfsplus_btree_search (priv_data->extents_file, + (HfsPPrivateGenericKey*) &search, + record, sizeof (record), NULL)) + return 0; + + if (ret_key->file_ID != search.file_ID || ret_key->type != search.type) + return 0; + + memcpy (cache, ret_cache, sizeof(HfsPExtDataRec)); + *ptr_start_cache = PED_BE32_TO_CPU (ret_key->start); + + return 1; +} + +/* find a sub extent contained in the desired area */ +/* and with the same starting point */ +/* return 0 in sector_count on error, or the physical area */ +/* on the volume corresponding to the logical area in the file */ +static HfsPPrivateExtent +hfsplus_file_find_extent (HfsPPrivateFile* file, PedSector sector, + unsigned int nb) +{ + HfsPPrivateExtent ret = {0,0}; + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + file->fs->type_specific; + unsigned int sect_by_block = PED_BE32_TO_CPU ( + priv_data->vh->block_size) + / PED_SECTOR_SIZE_DEFAULT; + unsigned int i, s, vol_block, size; + PedSector sect_size; + unsigned int block = sector / sect_by_block; + unsigned int offset = sector % sect_by_block; + + /* in the 8 first extent */ + for (s = 0, i = 0; i < HFSP_EXT_NB; i++) { + if ((block >= s) && (block < s + PED_BE32_TO_CPU ( + file->first[i].block_count))) { + vol_block = (block - s) + + PED_BE32_TO_CPU (file->first[i] + .start_block); + size = PED_BE32_TO_CPU (file->first[i].block_count) + + s - block; + goto plus_sector_found; + } + s += PED_BE32_TO_CPU (file->first[i].block_count); + } + + /* in the 8 cached extent */ + if (file->start_cache && block >= file->start_cache) + for (s = file->start_cache, i = 0; i < HFSP_EXT_NB; i++) { + if ((block >= s) && (block < s + PED_BE32_TO_CPU ( + file->cache[i].block_count))) { + vol_block = (block - s) + + PED_BE32_TO_CPU (file->cache[i] + .start_block); + size = PED_BE32_TO_CPU (file->cache[i].block_count) + + s - block; + goto plus_sector_found; + } + s += PED_BE32_TO_CPU (file->cache[i].block_count); + } + + /* update cache */ + if (!hfsplus_get_extent_containing (file, block, file->cache, + &(file->start_cache))) { + ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_CANCEL, + _("Could not update the extent cache for HFS+ file " + "with CNID %X."), + PED_BE32_TO_CPU(file->CNID)); + return ret; /* ret == {0,0} */ + } + + /* ret == {0,0} */ + PED_ASSERT(file->start_cache && block >= file->start_cache); + + for (s = file->start_cache, i = 0; i < HFSP_EXT_NB; i++) { + if ((block >= s) && (block < s + PED_BE32_TO_CPU ( + file->cache[i].block_count))) { + vol_block = (block - s) + + PED_BE32_TO_CPU (file->cache[i] + .start_block); + size = PED_BE32_TO_CPU (file->cache[i].block_count) + + s - block; + goto plus_sector_found; + } + s += PED_BE32_TO_CPU (file->cache[i].block_count); + } + + return ret; + +plus_sector_found: + sect_size = (PedSector) size * sect_by_block - offset; + ret.start_sector = vol_block * sect_by_block + offset; + ret.sector_count = (sect_size < nb) ? sect_size : nb; + return ret; +} + +int +hfsplus_file_read(HfsPPrivateFile* file, void *buf, PedSector sector, + unsigned int nb) +{ + HfsPPrivateExtent phy_area; + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + file->fs->type_specific; + char *b = buf; + + if (sector+nb < sector /* detect overflow */ + || sector+nb > file->sect_nb) /* out of file */ { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Trying to read HFS+ file with CNID %X behind EOF."), + PED_BE32_TO_CPU(file->CNID)); + return 0; + } + + while (nb) { + phy_area = hfsplus_file_find_extent(file, sector, nb); + if (phy_area.sector_count == 0) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Could not find sector %lli of HFS+ file " + "with CNID %X."), + sector, PED_BE32_TO_CPU(file->CNID)); + return 0; + } + if (!ped_geometry_read(priv_data->plus_geom, b, + phy_area.start_sector, + phy_area.sector_count)) + return 0; + + nb -= phy_area.sector_count; /* < nb anyway ... */ + sector += phy_area.sector_count; + b += phy_area.sector_count * PED_SECTOR_SIZE_DEFAULT; + } + + return 1; +} + +int +hfsplus_file_write(HfsPPrivateFile* file, void *buf, PedSector sector, + unsigned int nb) +{ + HfsPPrivateExtent phy_area; + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + file->fs->type_specific; + char *b = buf; + + if (sector+nb < sector /* detect overflow */ + || sector+nb > file->sect_nb) /* out of file */ { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Trying to write HFS+ file with CNID %X behind EOF."), + PED_BE32_TO_CPU(file->CNID)); + return 0; + } + + while (nb) { + phy_area = hfsplus_file_find_extent(file, sector, nb); + if (phy_area.sector_count == 0) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Could not find sector %lli of HFS+ file " + "with CNID %X."), + sector, PED_BE32_TO_CPU(file->CNID)); + return 0; + } + if (!ped_geometry_write(priv_data->plus_geom, b, + phy_area.start_sector, + phy_area.sector_count)) + return 0; + + nb -= phy_area.sector_count; /* < nb anyway ... */ + sector += phy_area.sector_count; + b += phy_area.sector_count * PED_SECTOR_SIZE_DEFAULT; + } + + return 1; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/hfs/file_plus.h b/jni/parted/libparted/fs/r/hfs/file_plus.h new file mode 100755 index 0000000..cd54f3f --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/file_plus.h @@ -0,0 +1,61 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef _FILE_PLUS_H +#define _FILE_PLUS_H + +#include +#include +#include + +#include "hfs.h" + +HfsPPrivateFile* +hfsplus_file_open (PedFileSystem *fs, HfsPNodeID CNID, + HfsPExtDataRec ext_desc, PedSector sect_nb); + +void +hfsplus_file_close (HfsPPrivateFile* file); + +int +hfsplus_file_read(HfsPPrivateFile* file, void *buf, + PedSector sector, unsigned int nb); + +int +hfsplus_file_write(HfsPPrivateFile* file, void *buf, + PedSector sector, unsigned int nb); + +/* Read the nth sector of a file */ +/* return 0 on error */ +static __inline__ int +hfsplus_file_read_sector (HfsPPrivateFile* file, void *buf, PedSector sector) +{ + return hfsplus_file_read(file, buf, sector, 1); +} + +/* Write the nth sector of a file */ +/* return 0 on error */ +static __inline__ int +hfsplus_file_write_sector (HfsPPrivateFile* file, void *buf, PedSector sector) +{ + return hfsplus_file_write(file, buf, sector, 1); +} + + +#endif /* _FILE_PLUS_H */ diff --git a/jni/parted/libparted/fs/r/hfs/hfs.c b/jni/parted/libparted/fs/r/hfs/hfs.c new file mode 100755 index 0000000..8959b47 --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/hfs.c @@ -0,0 +1,1166 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000, 2003-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +/* + Author : Guillaume Knispel + Report bug to +*/ + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" +#include "probe.h" + +uint8_t* hfs_block = NULL; +uint8_t* hfsp_block = NULL; +unsigned hfs_block_count; +unsigned hfsp_block_count; + +#define HFS_BLOCK_SIZES ((int[2]){512, 0}) +#define HFSP_BLOCK_SIZES ((int[2]){512, 0}) +#define HFSX_BLOCK_SIZES ((int[2]){512, 0}) + +#ifndef DISCOVER_ONLY +#include "file.h" +#include "reloc.h" +#include "advfs.h" + +static PedFileSystemType hfs_type; +static PedFileSystemType hfsplus_type; + + +/* ----- HFS ----- */ + +PedFileSystem * +hfs_open (PedGeometry* geom) +{ + uint8_t buf[PED_SECTOR_SIZE_DEFAULT]; + PedFileSystem* fs; + HfsMasterDirectoryBlock* mdb; + HfsPrivateFSData* priv_data; + + if (!hfsc_can_use_geom (geom)) + return NULL; + + /* Read MDB */ + if (!ped_geometry_read (geom, buf, 2, 1)) + return NULL; + + /* Allocate memory */ + fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem)); + if (!fs) goto ho; + mdb = (HfsMasterDirectoryBlock*) + ped_malloc (sizeof (HfsMasterDirectoryBlock)); + if (!mdb) goto ho_fs; + priv_data = (HfsPrivateFSData*) + ped_malloc (sizeof (HfsPrivateFSData)); + if (!priv_data) goto ho_mdb; + + memcpy (mdb, buf, sizeof (HfsMasterDirectoryBlock)); + + /* init structures */ + priv_data->mdb = mdb; + priv_data->bad_blocks_loaded = 0; + priv_data->bad_blocks_xtent_nb = 0; + priv_data->bad_blocks_xtent_list = NULL; + priv_data->extent_file = + hfs_file_open (fs, PED_CPU_TO_BE32 (HFS_XTENT_ID), + mdb->extents_file_rec, + PED_CPU_TO_BE32 (mdb->extents_file_size) + / PED_SECTOR_SIZE_DEFAULT); + if (!priv_data->extent_file) goto ho_pd; + priv_data->catalog_file = + hfs_file_open (fs, PED_CPU_TO_BE32 (HFS_CATALOG_ID), + mdb->catalog_file_rec, + PED_CPU_TO_BE32 (mdb->catalog_file_size) + / PED_SECTOR_SIZE_DEFAULT); + if (!priv_data->catalog_file) goto ho_ce; + /* Read allocation blocks */ + if (!ped_geometry_read(geom, priv_data->alloc_map, + PED_BE16_TO_CPU (mdb->volume_bitmap_block), + ( PED_BE16_TO_CPU (mdb->total_blocks) + + PED_SECTOR_SIZE_DEFAULT * 8 - 1 ) + / (PED_SECTOR_SIZE_DEFAULT * 8) ) ) + goto ho_cf; + + fs->type = &hfs_type; + fs->geom = ped_geometry_duplicate (geom); + if (!fs->geom) goto ho_cf; + fs->type_specific = (void*) priv_data; + fs->checked = ( PED_BE16_TO_CPU (mdb->volume_attributes) + >> HFS_UNMOUNTED ) & 1; + + return fs; + +/*--- clean error handling ---*/ +ho_cf: hfs_file_close(priv_data->catalog_file); +ho_ce: hfs_file_close(priv_data->extent_file); +ho_pd: free(priv_data); +ho_mdb: free(mdb); +ho_fs: free(fs); +ho: return NULL; +} + +int +hfs_close (PedFileSystem *fs) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) fs->type_specific; + + hfs_file_close (priv_data->extent_file); + hfs_file_close (priv_data->catalog_file); + if (priv_data->bad_blocks_loaded) + hfs_free_bad_blocks_list (priv_data->bad_blocks_xtent_list); + free (priv_data->mdb); + free (priv_data); + ped_geometry_destroy (fs->geom); + free (fs); + + return 1; +} + +PedConstraint * +hfs_get_resize_constraint (const PedFileSystem *fs) +{ + PedDevice* dev = fs->geom->dev; + PedAlignment start_align; + PedGeometry start_sector; + PedGeometry full_dev; + PedSector min_size; + + if (!ped_alignment_init (&start_align, fs->geom->start, 0)) + return NULL; + if (!ped_geometry_init (&start_sector, dev, fs->geom->start, 1)) + return NULL; + if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1)) + return NULL; + /* 2 = last two sectors (alternate MDB and unused sector) */ + min_size = hfs_get_empty_end(fs) + 2; + if (min_size == 2) return NULL; + + return ped_constraint_new (&start_align, ped_alignment_any, + &start_sector, &full_dev, min_size, + fs->geom->length); +} + +int +hfs_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer) +{ + uint8_t buf[PED_SECTOR_SIZE_DEFAULT]; + unsigned int nblock, nfree; + unsigned int block, to_free; + HfsPrivateFSData* priv_data; + HfsMasterDirectoryBlock* mdb; + int resize = 1; + unsigned int hfs_sect_block; + PedSector hgee; + + /* check preconditions */ + PED_ASSERT (fs != NULL); + PED_ASSERT (fs->geom != NULL); + PED_ASSERT (geom != NULL); +#ifdef DEBUG + PED_ASSERT ((hgee = hfs_get_empty_end(fs)) != 0); +#else + if ((hgee = hfs_get_empty_end(fs)) == 0) + return 0; +#endif + + PED_ASSERT ((hgee = hfs_get_empty_end(fs)) != 0); + + if (ped_geometry_test_equal(fs->geom, geom)) + return 1; + + priv_data = (HfsPrivateFSData*) fs->type_specific; + mdb = priv_data->mdb; + hfs_sect_block = PED_BE32_TO_CPU (mdb->block_size) + / PED_SECTOR_SIZE_DEFAULT; + + if (fs->geom->start != geom->start + || geom->length > fs->geom->length + || geom->length < hgee + 2) { + ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Sorry, HFS cannot be resized that way yet.")); + return 0; + } + + /* Flush caches */ + if (!ped_geometry_sync(fs->geom)) + return 0; + + /* Clear the unmounted bit */ + mdb->volume_attributes &= PED_CPU_TO_BE16 (~( 1 << HFS_UNMOUNTED )); + if (!ped_geometry_read (fs->geom, buf, 2, 1)) + return 0; + memcpy (buf, mdb, sizeof (HfsMasterDirectoryBlock)); + if ( !ped_geometry_write (fs->geom, buf, 2, 1) + || !ped_geometry_sync (fs->geom)) + return 0; + + ped_timer_reset (timer); + ped_timer_set_state_name(timer, _("shrinking")); + ped_timer_update(timer, 0.0); + /* relocate data */ + to_free = ( fs->geom->length - geom->length + + hfs_sect_block - 1 ) + / hfs_sect_block ; + block = hfs_find_start_pack (fs, to_free); + if (!hfs_pack_free_space_from_block (fs, block, timer, to_free)) { + resize = 0; + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Data relocation has failed.")); + goto write_MDB; + } + + /* Calculate new block number and other MDB field */ + nblock = ( geom->length - (PED_BE16_TO_CPU (mdb->start_block) + 2) ) + / hfs_sect_block; + nfree = PED_BE16_TO_CPU (mdb->free_blocks) + - ( PED_BE16_TO_CPU (mdb->total_blocks) - nblock ); + + /* Check that all block after future end are really free */ + for (block = nblock; + block < PED_BE16_TO_CPU (mdb->total_blocks); + block++) { + if (TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) { + resize = 0; + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Data relocation left some data in the end " + "of the volume.")); + goto write_MDB; + } + } + + /* Mark out of volume blocks as used + (broken implementations compatibility) */ + for ( block = nblock; block < (1 << 16); ++block) + SET_BLOC_OCCUPATION(priv_data->alloc_map,block); + + /* save the allocation map + I do not write until start of allocation blocks + but only until pre-resize end of bitmap blocks + because the specifications do _not_ assert that everything + until allocation blocks is boot, mdb and alloc */ + ped_geometry_write(fs->geom, priv_data->alloc_map, + PED_BE16_TO_CPU (priv_data->mdb->volume_bitmap_block), + ( PED_BE16_TO_CPU (priv_data->mdb->total_blocks) + + PED_SECTOR_SIZE_DEFAULT * 8 - 1) + / (PED_SECTOR_SIZE_DEFAULT * 8)); + + /* Update geometry */ + if (resize) { + /* update in fs structure */ + if (PED_BE16_TO_CPU (mdb->next_allocation) >= nblock) + mdb->next_allocation = PED_CPU_TO_BE16 (0); + mdb->total_blocks = PED_CPU_TO_BE16 (nblock); + mdb->free_blocks = PED_CPU_TO_BE16 (nfree); + /* update parted structure */ + fs->geom->length = geom->length; + fs->geom->end = fs->geom->start + geom->length - 1; + } + + /* Set the unmounted bit */ + mdb->volume_attributes |= PED_CPU_TO_BE16 ( 1 << HFS_UNMOUNTED ); + + /* Effective write */ + write_MDB: + ped_timer_set_state_name(timer,_("writing HFS Master Directory Block")); + + if (!hfs_update_mdb(fs)) { + ped_geometry_sync(geom); + return 0; + } + + if (!ped_geometry_sync(geom)) + return 0; + + ped_timer_update(timer, 1.0); + + return (resize); +} + +/* ----- HFS+ ----- */ + +#include "file_plus.h" +#include "advfs_plus.h" +#include "reloc_plus.h" +#include "journal.h" + +int +hfsplus_close (PedFileSystem *fs) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + + if (priv_data->bad_blocks_loaded) + hfsplus_free_bad_blocks_list(priv_data->bad_blocks_xtent_list); + free(priv_data->alloc_map); + free(priv_data->dirty_alloc_map); + hfsplus_file_close (priv_data->allocation_file); + hfsplus_file_close (priv_data->attributes_file); + hfsplus_file_close (priv_data->catalog_file); + hfsplus_file_close (priv_data->extents_file); + if (priv_data->free_geom) ped_geometry_destroy (priv_data->plus_geom); + if (priv_data->wrapper) hfs_close(priv_data->wrapper); + ped_geometry_destroy (fs->geom); + free(priv_data->vh); + free(priv_data); + free(fs); + + return 1; +} + +PedFileSystem* +hfsplus_open (PedGeometry* geom) +{ + uint8_t buf[PED_SECTOR_SIZE_DEFAULT]; + PedFileSystem* fs; + HfsPVolumeHeader* vh; + HfsPPrivateFSData* priv_data; + PedGeometry* wrapper_geom; + unsigned int map_sectors; + + if (!hfsc_can_use_geom (geom)) + return NULL; + + fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem)); + if (!fs) goto hpo; + vh = (HfsPVolumeHeader*) ped_malloc (sizeof (HfsPVolumeHeader)); + if (!vh) goto hpo_fs; + priv_data = (HfsPPrivateFSData*)ped_malloc (sizeof (HfsPPrivateFSData)); + if (!priv_data) goto hpo_vh; + + fs->geom = ped_geometry_duplicate (geom); + if (!fs->geom) goto hpo_pd; + fs->type_specific = (void*) priv_data; + + if ((wrapper_geom = hfs_and_wrapper_probe (geom))) { + HfsPrivateFSData* hfs_priv_data; + PedSector abs_sect, length; + unsigned int bs; + + ped_geometry_destroy (wrapper_geom); + priv_data->wrapper = hfs_open(geom); + if (!priv_data->wrapper) goto hpo_gm; + hfs_priv_data = (HfsPrivateFSData*) + priv_data->wrapper->type_specific; + bs = PED_BE32_TO_CPU (hfs_priv_data->mdb->block_size) + / PED_SECTOR_SIZE_DEFAULT; + abs_sect = (PedSector) geom->start + + (PedSector) PED_BE16_TO_CPU ( + hfs_priv_data->mdb->start_block) + + (PedSector) PED_BE16_TO_CPU ( + hfs_priv_data->mdb->old_new + .embedded.location.start_block ) + * bs; + length = (PedSector) PED_BE16_TO_CPU ( + hfs_priv_data->mdb->old_new + .embedded.location.block_count) + * bs; + priv_data->plus_geom = ped_geometry_new (geom->dev, abs_sect, + length); + if (!priv_data->plus_geom) goto hpo_wr; + priv_data->free_geom = 1; + } else { + priv_data->wrapper = NULL; + priv_data->plus_geom = fs->geom; + priv_data->free_geom = 0; + } + + if (!ped_geometry_read (priv_data->plus_geom, buf, 2, 1)) goto hpo_pg; + memcpy (vh, buf, sizeof (HfsPVolumeHeader)); + priv_data->vh = vh; + + if (vh->signature != PED_CPU_TO_BE16(HFSP_SIGNATURE) + && vh->signature != PED_CPU_TO_BE16(HFSX_SIGNATURE)) { + ped_exception_throw ( + PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("No valid HFS[+X] signature has been found while " + "opening.")); + goto hpo_pg; + } + + if (vh->signature == PED_CPU_TO_BE16(HFSP_SIGNATURE) + && vh->version != PED_CPU_TO_BE16(HFSP_VERSION)) { + if (ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_IGNORE_CANCEL, + _("Version %d of HFS+ isn't supported."), + PED_BE16_TO_CPU(vh->version)) + != PED_EXCEPTION_IGNORE) + goto hpo_pg; + } + + if (vh->signature == PED_CPU_TO_BE16(HFSX_SIGNATURE) + && vh->version != PED_CPU_TO_BE16(HFSX_VERSION)) { + if (ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_IGNORE_CANCEL, + _("Version %d of HFSX isn't supported."), + PED_BE16_TO_CPU(vh->version)) + != PED_EXCEPTION_IGNORE) + goto hpo_pg; + } + + priv_data->jib_start_block = 0; + priv_data->jl_start_block = 0; + if (vh->attributes & PED_CPU_TO_BE32(1<bad_blocks_loaded = 0; + priv_data->bad_blocks_xtent_nb = 0; + priv_data->bad_blocks_xtent_list = NULL; + priv_data->extents_file = + hfsplus_file_open (fs, PED_CPU_TO_BE32 (HFS_XTENT_ID), + vh->extents_file.extents, + PED_BE64_TO_CPU ( + vh->extents_file.logical_size ) + / PED_SECTOR_SIZE_DEFAULT); + if (!priv_data->extents_file) goto hpo_pg; + priv_data->catalog_file = + hfsplus_file_open (fs, PED_CPU_TO_BE32 (HFS_CATALOG_ID), + vh->catalog_file.extents, + PED_BE64_TO_CPU ( + vh->catalog_file.logical_size ) + / PED_SECTOR_SIZE_DEFAULT); + if (!priv_data->catalog_file) goto hpo_ce; + priv_data->attributes_file = + hfsplus_file_open (fs, PED_CPU_TO_BE32 (HFSP_ATTRIB_ID), + vh->attributes_file.extents, + PED_BE64_TO_CPU ( + vh->attributes_file.logical_size) + / PED_SECTOR_SIZE_DEFAULT); + if (!priv_data->attributes_file) goto hpo_cc; + + map_sectors = ( PED_BE32_TO_CPU (vh->total_blocks) + + PED_SECTOR_SIZE_DEFAULT * 8 - 1 ) + / (PED_SECTOR_SIZE_DEFAULT * 8); + priv_data->dirty_alloc_map = (uint8_t*) + ped_malloc ((map_sectors + 7) / 8); + if (!priv_data->dirty_alloc_map) goto hpo_cl; + memset(priv_data->dirty_alloc_map, 0, (map_sectors + 7) / 8); + priv_data->alloc_map = (uint8_t*) + ped_malloc (map_sectors * PED_SECTOR_SIZE_DEFAULT); + if (!priv_data->alloc_map) goto hpo_dm; + + priv_data->allocation_file = + hfsplus_file_open (fs, PED_CPU_TO_BE32 (HFSP_ALLOC_ID), + vh->allocation_file.extents, + PED_BE64_TO_CPU ( + vh->allocation_file.logical_size) + / PED_SECTOR_SIZE_DEFAULT); + if (!priv_data->allocation_file) goto hpo_am; + if (!hfsplus_file_read (priv_data->allocation_file, + priv_data->alloc_map, 0, map_sectors)) { + hfsplus_close(fs); + return NULL; + } + + fs->type = &hfsplus_type; + fs->checked = ((PED_BE32_TO_CPU (vh->attributes) >> HFS_UNMOUNTED) & 1) + && !((PED_BE32_TO_CPU (vh->attributes) >> HFSP_INCONSISTENT) & 1); + + return fs; + +/*--- clean error handling ---*/ +hpo_am: free(priv_data->alloc_map); +hpo_dm: free(priv_data->dirty_alloc_map); +hpo_cl: hfsplus_file_close (priv_data->attributes_file); +hpo_cc: hfsplus_file_close (priv_data->catalog_file); +hpo_ce: hfsplus_file_close (priv_data->extents_file); +hpo_pg: if (priv_data->free_geom) ped_geometry_destroy (priv_data->plus_geom); +hpo_wr: if (priv_data->wrapper) hfs_close(priv_data->wrapper); +hpo_gm: ped_geometry_destroy (fs->geom); +hpo_pd: free(priv_data); +hpo_vh: free(vh); +hpo_fs: free(fs); +hpo: return NULL; +} + +PedConstraint * +hfsplus_get_resize_constraint (const PedFileSystem *fs) +{ + PedDevice* dev = fs->geom->dev; + PedAlignment start_align; + PedGeometry start_sector; + PedGeometry full_dev; + PedSector min_size; + + if (!ped_alignment_init (&start_align, fs->geom->start, 0)) + return NULL; + if (!ped_geometry_init (&start_sector, dev, fs->geom->start, 1)) + return NULL; + if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1)) + return NULL; + + min_size = hfsplus_get_min_size (fs); + if (!min_size) return NULL; + + return ped_constraint_new (&start_align, ped_alignment_any, + &start_sector, &full_dev, min_size, + fs->geom->length); +} + +static int +hfsplus_volume_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer) +{ + uint8_t buf[PED_SECTOR_SIZE_DEFAULT]; + unsigned int nblock, nfree, mblock; + unsigned int block, to_free, old_blocks; + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsPVolumeHeader* vh = priv_data->vh; + int resize = 1; + unsigned int hfsp_sect_block = + ( PED_BE32_TO_CPU (vh->block_size) + / PED_SECTOR_SIZE_DEFAULT ); + unsigned int map_sectors; + + old_blocks = PED_BE32_TO_CPU (vh->total_blocks); + + /* Flush caches */ + if (!ped_geometry_sync(priv_data->plus_geom)) + return 0; + + /* Clear the unmounted bit */ + /* and set the implementation code (Apple Creator Code) */ + vh->attributes &= PED_CPU_TO_BE32 (~( 1 << HFS_UNMOUNTED )); + vh->last_mounted_version = PED_CPU_TO_BE32(HFSP_IMPL_Shnk); + if (!ped_geometry_read (priv_data->plus_geom, buf, 2, 1)) + return 0; + memcpy (buf, vh, sizeof (HfsPVolumeHeader)); + if ( !ped_geometry_write (priv_data->plus_geom, buf, 2, 1) + || !ped_geometry_sync (priv_data->plus_geom)) + return 0; + + ped_timer_reset (timer); + ped_timer_set_state_name(timer, _("shrinking")); + ped_timer_update(timer, 0.0); + /* relocate data */ + to_free = ( priv_data->plus_geom->length + - geom->length + hfsp_sect_block + - 1 ) / hfsp_sect_block; + block = hfsplus_find_start_pack (fs, to_free); + if (!hfsplus_pack_free_space_from_block (fs, block, timer, to_free)) { + resize = 0; + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Data relocation has failed.")); + goto write_VH; + } + + /* Calculate new block number and other VH field */ + /* nblock must be rounded _down_ */ + nblock = geom->length / hfsp_sect_block; + nfree = PED_BE32_TO_CPU (vh->free_blocks) + - (old_blocks - nblock); + /* free block readjustement is only needed when incorrect nblock + was used by my previous implementation, so detect the case */ + if (priv_data->plus_geom->length < old_blocks + * ( PED_BE32_TO_CPU (vh->block_size) + / PED_SECTOR_SIZE_DEFAULT) ) { + if (priv_data->plus_geom->length % hfsp_sect_block == 1) + nfree++; + } + + /* Check that all block after future end are really free */ + mblock = ( priv_data->plus_geom->length - 2 ) + / hfsp_sect_block; + if (mblock > old_blocks - 1) + mblock = old_blocks - 1; + for ( block = nblock; + block < mblock; + block++ ) { + if (TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) { + resize = 0; + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Data relocation left some data at the end " + "of the volume.")); + goto write_VH; + } + } + + /* Mark out of volume blocks as used */ + map_sectors = ( ( old_blocks + PED_SECTOR_SIZE_DEFAULT * 8 - 1 ) + / (PED_SECTOR_SIZE_DEFAULT * 8) ) + * (PED_SECTOR_SIZE_DEFAULT * 8); + for ( block = nblock; block < map_sectors; ++block) + SET_BLOC_OCCUPATION(priv_data->alloc_map, block); + + /* Update geometry */ + if (resize) { + /* update in fs structure */ + if (PED_BE32_TO_CPU (vh->next_allocation) >= nblock) + vh->next_allocation = PED_CPU_TO_BE32 (0); + vh->total_blocks = PED_CPU_TO_BE32 (nblock); + vh->free_blocks = PED_CPU_TO_BE32 (nfree); + /* update parted structure */ + priv_data->plus_geom->length = geom->length; + priv_data->plus_geom->end = priv_data->plus_geom->start + + geom->length - 1; + } + + /* Effective write */ + write_VH: + /* lasts two sectors are allocated by the alternate VH + and a reserved sector, and last block is always reserved */ + block = (priv_data->plus_geom->length - 1) / hfsp_sect_block; + if (block < PED_BE32_TO_CPU (vh->total_blocks)) + SET_BLOC_OCCUPATION(priv_data->alloc_map, block); + block = (priv_data->plus_geom->length - 2) / hfsp_sect_block; + if (block < PED_BE32_TO_CPU (vh->total_blocks)) + SET_BLOC_OCCUPATION(priv_data->alloc_map, block); + SET_BLOC_OCCUPATION(priv_data->alloc_map, + PED_BE32_TO_CPU (vh->total_blocks) - 1); + + /* Write the _old_ area to set out of volume blocks as used */ + map_sectors = ( old_blocks + PED_SECTOR_SIZE_DEFAULT * 8 - 1 ) + / (PED_SECTOR_SIZE_DEFAULT * 8); + if (!hfsplus_file_write (priv_data->allocation_file, + priv_data->alloc_map, 0, map_sectors)) { + resize = 0; + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Error while writing the allocation file.")); + } else { + /* Write remaining part of allocation bitmap */ + /* This is necessary to handle pre patch-11 and third party */ + /* implementations */ + memset(buf, 0xFF, PED_SECTOR_SIZE_DEFAULT); + for (block = map_sectors; + block < priv_data->allocation_file->sect_nb; + ++block) { + if (!hfsplus_file_write_sector ( + priv_data->allocation_file, + buf, block)) { + ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE, + _("Error while writing the " + "compatibility part of the " + "allocation file.")); + break; + } + } + } + ped_geometry_sync (priv_data->plus_geom); + + if (resize) { + /* Set the unmounted bit and clear the inconsistent bit */ + vh->attributes |= PED_CPU_TO_BE32 ( 1 << HFS_UNMOUNTED ); + vh->attributes &= ~ PED_CPU_TO_BE32 ( 1 << HFSP_INCONSISTENT ); + } + + ped_timer_set_state_name(timer, _("writing HFS+ Volume Header")); + if (!hfsplus_update_vh(fs)) { + ped_geometry_sync(priv_data->plus_geom); + return 0; + } + + if (!ped_geometry_sync(priv_data->plus_geom)) + return 0; + + ped_timer_update(timer, 1.0); + + return (resize); +} + +/* Update the HFS wrapper mdb and bad blocks file to reflect + the new geometry of the embedded HFS+ volume */ +static int +hfsplus_wrapper_update (PedFileSystem* fs) +{ + uint8_t node[PED_SECTOR_SIZE_DEFAULT]; + HfsCPrivateLeafRec ref; + HfsExtentKey key; + HfsNodeDescriptor* node_desc = (HfsNodeDescriptor*) node; + HfsExtentKey* ret_key; + HfsExtDescriptor* ret_data; + unsigned int i; + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsPrivateFSData* hfs_priv_data = (HfsPrivateFSData*) + priv_data->wrapper->type_specific; + unsigned int hfs_sect_block = + PED_BE32_TO_CPU (hfs_priv_data->mdb->block_size) + / PED_SECTOR_SIZE_DEFAULT ; + PedSector hfsplus_sect = (PedSector) + PED_BE32_TO_CPU (priv_data->vh->total_blocks) + * ( PED_BE32_TO_CPU (priv_data->vh->block_size) + / PED_SECTOR_SIZE_DEFAULT ); + unsigned int hfs_blocks_embedded = + (hfsplus_sect + hfs_sect_block - 1) + / hfs_sect_block; + unsigned int hfs_blocks_embedded_old; + + /* update HFS wrapper MDB */ + hfs_blocks_embedded_old = PED_BE16_TO_CPU ( + hfs_priv_data->mdb->old_new + .embedded.location.block_count ); + hfs_priv_data->mdb->old_new.embedded.location.block_count = + PED_CPU_TO_BE16 (hfs_blocks_embedded); + /* maybe macOS will boot with this */ + /* update : yes it does \o/ :) */ + hfs_priv_data->mdb->free_blocks = + PED_CPU_TO_BE16 ( PED_BE16_TO_CPU (hfs_priv_data->mdb->free_blocks) + + hfs_blocks_embedded_old + - hfs_blocks_embedded ); + + if (!hfs_update_mdb(priv_data->wrapper)) + return 0; + + /* force reload bad block list */ + if (hfs_priv_data->bad_blocks_loaded) { + hfs_free_bad_blocks_list (hfs_priv_data->bad_blocks_xtent_list); + hfs_priv_data->bad_blocks_xtent_list = NULL; + hfs_priv_data->bad_blocks_xtent_nb = 0; + hfs_priv_data->bad_blocks_loaded = 0; + } + + /* clean HFS wrapper allocation map */ + for (i = PED_BE16_TO_CPU ( + hfs_priv_data->mdb->old_new.embedded + .location.start_block ) + + hfs_blocks_embedded; + i < PED_BE16_TO_CPU ( + hfs_priv_data->mdb->old_new.embedded + .location.start_block ) + + hfs_blocks_embedded_old; + i++ ) { + CLR_BLOC_OCCUPATION(hfs_priv_data->alloc_map, i); + } + /* and save it */ + if (!ped_geometry_write (fs->geom, hfs_priv_data->alloc_map, + PED_BE16_TO_CPU ( + hfs_priv_data->mdb->volume_bitmap_block ), + ( PED_BE16_TO_CPU ( + hfs_priv_data->mdb->total_blocks ) + + PED_SECTOR_SIZE_DEFAULT * 8 - 1 ) + / (PED_SECTOR_SIZE_DEFAULT * 8))) + return 0; + if (!ped_geometry_sync (fs->geom)) + return 0; + + /* search and update the bad blocks file */ + key.key_length = sizeof(key) - 1; + key.type = HFS_DATA_FORK; + key.file_ID = PED_CPU_TO_BE32 (HFS_BAD_BLOCK_ID); + key.start = 0; + if (!hfs_btree_search (hfs_priv_data->extent_file, + (HfsPrivateGenericKey*) &key, NULL, 0, &ref)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("An error occurred while looking for the mandatory " + "bad blocks file.")); + return 0; + } + if (!hfs_file_read_sector (hfs_priv_data->extent_file, node, + ref.node_number)) + return 0; + ret_key = (HfsExtentKey*) (node + ref.record_pos); + ret_data = (HfsExtDescriptor*) ( node + ref.record_pos + + sizeof (HfsExtentKey) ); + + while (ret_key->type == key.type && ret_key->file_ID == key.file_ID) { + for (i = 0; i < HFS_EXT_NB; i++) { + if ( ret_data[i].start_block + == hfs_priv_data->mdb->old_new + .embedded.location.start_block) { + ret_data[i].block_count = + hfs_priv_data->mdb->old_new + .embedded.location.block_count; + /* found ! : update */ + if (!hfs_file_write_sector ( + hfs_priv_data->extent_file, + node, ref.node_number) + || !ped_geometry_sync(fs->geom)) + return 0; + return 1; + } + } + + if (ref.record_number < PED_BE16_TO_CPU (node_desc->rec_nb)) { + ref.record_number++; + } else { + ref.node_number = PED_BE32_TO_CPU (node_desc->next); + if (!ref.node_number + || !hfs_file_read_sector(hfs_priv_data->extent_file, + node, ref.node_number)) + goto bb_not_found; + ref.record_number = 1; + } + + uint16_t value; + memcpy(&value, node+PED_SECTOR_SIZE_DEFAULT - (2*ref.record_number), sizeof(uint16_t)); + ref.record_pos = PED_BE16_TO_CPU(value); + ret_key = (HfsExtentKey*) (node + ref.record_pos); + ret_data = (HfsExtDescriptor*) (node + ref.record_pos + + sizeof (HfsExtentKey) ); + } + +bb_not_found: + /* not found : not a valid hfs+ wrapper : failure */ + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("It seems there is an error in the HFS wrapper: the bad " + "blocks file doesn't contain the embedded HFS+ volume.")); + return 0; +} + +int +hfsplus_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer) +{ + HfsPPrivateFSData* priv_data; + PedTimer* timer_plus; + PedGeometry* embedded_geom; + PedSector hgms; + + /* check preconditions */ + PED_ASSERT (fs != NULL); + PED_ASSERT (fs->geom != NULL); + PED_ASSERT (geom != NULL); + PED_ASSERT (fs->geom->dev == geom->dev); +#ifdef DEBUG + PED_ASSERT ((hgms = hfsplus_get_min_size (fs)) != 0); +#else + if ((hgms = hfsplus_get_min_size (fs)) == 0) + return 0; +#endif + + if (ped_geometry_test_equal(fs->geom, geom)) + return 1; + + priv_data = (HfsPPrivateFSData*) fs->type_specific; + + if (fs->geom->start != geom->start + || geom->length > fs->geom->length + || geom->length < hgms) { + ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Sorry, HFS+ cannot be resized that way yet.")); + return 0; + } + + if (priv_data->wrapper) { + PedSector red, hgee; + HfsPrivateFSData* hfs_priv_data = (HfsPrivateFSData*) + priv_data->wrapper->type_specific; + unsigned int hfs_sect_block = + PED_BE32_TO_CPU (hfs_priv_data->mdb->block_size) + / PED_SECTOR_SIZE_DEFAULT; + + /* There is a wrapper so we must calculate the new geometry + of the embedded HFS+ volume */ + red = ( (fs->geom->length - geom->length + hfs_sect_block - 1) + / hfs_sect_block ) * hfs_sect_block; + /* Can't we shrink the hfs+ volume by the desired size ? */ + hgee = hfsplus_get_empty_end (fs); + if (!hgee) return 0; + if (red > priv_data->plus_geom->length - hgee) { + /* No, shrink hfs+ by the greatest possible value */ + hgee = ((hgee + hfs_sect_block - 1) / hfs_sect_block) + * hfs_sect_block; + red = priv_data->plus_geom->length - hgee; + } + embedded_geom = ped_geometry_new (geom->dev, + priv_data->plus_geom->start, + priv_data->plus_geom->length + - red); + + /* There is a wrapper so the resize process is a two stages + process (embedded resizing then wrapper resizing) : + we create a sub timer */ + ped_timer_reset (timer); + ped_timer_set_state_name (timer, + _("shrinking embedded HFS+ volume")); + ped_timer_update(timer, 0.0); + timer_plus = ped_timer_new_nested (timer, 0.98); + } else { + /* No wrapper : the desired geometry is the desired + HFS+ volume geometry */ + embedded_geom = geom; + timer_plus = timer; + } + + /* Resize the HFS+ volume */ + if (!hfsplus_volume_resize (fs, embedded_geom, timer_plus)) { + if (timer_plus != timer) ped_timer_destroy_nested (timer_plus); + if (priv_data->wrapper) ped_geometry_destroy (embedded_geom); + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Resizing the HFS+ volume has failed.")); + return 0; + } + + if (priv_data->wrapper) { + ped_geometry_destroy (embedded_geom); + ped_timer_destroy_nested (timer_plus); + ped_timer_set_state_name(timer, _("shrinking HFS wrapper")); + timer_plus = ped_timer_new_nested (timer, 0.02); + /* There's a wrapper : second stage = resizing it */ + if (!hfsplus_wrapper_update (fs) + || !hfs_resize (priv_data->wrapper, geom, timer_plus)) { + ped_timer_destroy_nested (timer_plus); + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Updating the HFS wrapper has failed.")); + return 0; + } + ped_timer_destroy_nested (timer_plus); + } + ped_timer_update(timer, 1.0); + + return 1; +} + +#ifdef HFS_EXTRACT_FS +/* The following is for debugging purpose only, NOT for packaging */ + +#include + +uint8_t* extract_buffer = NULL; + +static int +hfs_extract_file(const char* filename, HfsPrivateFile* hfs_file) +{ + FILE* fout; + PedSector sect; + + fout = fopen(filename, "w"); + if (!fout) return 0; + + for (sect = 0; sect < hfs_file->sect_nb; ++sect) { + if (!hfs_file_read_sector(hfs_file, extract_buffer, sect)) + goto err_close; + if (!fwrite(extract_buffer, PED_SECTOR_SIZE_DEFAULT, 1, fout)) + goto err_close; + } + + return (fclose(fout) == 0 ? 1 : 0); + +err_close: + fclose(fout); + return 0; +} + +static int +hfs_extract_bitmap(const char* filename, PedFileSystem* fs) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + HfsMasterDirectoryBlock* mdb = priv_data->mdb; + unsigned int count; + FILE* fout; + PedSector sect; + + fout = fopen(filename, "w"); + if (!fout) return 0; + + for (sect = PED_BE16_TO_CPU(mdb->volume_bitmap_block); + sect < PED_BE16_TO_CPU(mdb->start_block); + sect += count) { + uint16_t st_block = PED_BE16_TO_CPU(mdb->start_block); + count = (st_block-sect) < BLOCK_MAX_BUFF ? + (st_block-sect) : BLOCK_MAX_BUFF; + if (!ped_geometry_read(fs->geom, extract_buffer, sect, count)) + goto err_close; + if (!fwrite (extract_buffer, count * PED_SECTOR_SIZE_DEFAULT, + 1, fout)) + goto err_close; + } + + return (fclose(fout) == 0 ? 1 : 0); + +err_close: + fclose(fout); + return 0; +} + +static int +hfs_extract_mdb (const char* filename, PedFileSystem* fs) +{ + FILE* fout; + + fout = fopen(filename, "w"); + if (!fout) return 0; + + if (!ped_geometry_read(fs->geom, extract_buffer, 2, 1)) + goto err_close; + if (!fwrite(extract_buffer, PED_SECTOR_SIZE_DEFAULT, 1, fout)) + goto err_close; + + return (fclose(fout) == 0 ? 1 : 0); + +err_close: + fclose(fout); + return 0; +} + +static int +hfs_extract (PedFileSystem* fs, PedTimer* timer) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + + ped_exception_throw ( + PED_EXCEPTION_INFORMATION, + PED_EXCEPTION_OK, + _("This is not a real %s check. This is going to extract " + "special low level files for debugging purposes."), + "HFS"); + + extract_buffer = ped_malloc(BLOCK_MAX_BUFF * PED_SECTOR_SIZE_DEFAULT); + if (!extract_buffer) return 0; + + hfs_extract_mdb(HFS_MDB_FILENAME, fs); + hfs_extract_file(HFS_CATALOG_FILENAME, priv_data->catalog_file); + hfs_extract_file(HFS_EXTENTS_FILENAME, priv_data->extent_file); + hfs_extract_bitmap(HFS_BITMAP_FILENAME, fs); + + free(extract_buffer); extract_buffer = NULL; + return 0; /* nothing has been fixed by us ! */ +} + +static int +hfsplus_extract_file(const char* filename, HfsPPrivateFile* hfsp_file) +{ + FILE* fout; + unsigned int cp_sect; + PedSector rem_sect; + + fout = fopen(filename, "w"); + if (!fout) return 0; + + for (rem_sect = hfsp_file->sect_nb; rem_sect; rem_sect -= cp_sect) { + cp_sect = rem_sect < BLOCK_MAX_BUFF ? rem_sect : BLOCK_MAX_BUFF; + if (!hfsplus_file_read(hfsp_file, extract_buffer, + hfsp_file->sect_nb - rem_sect, cp_sect)) + goto err_close; + if (!fwrite (extract_buffer, cp_sect * PED_SECTOR_SIZE_DEFAULT, + 1, fout)) + goto err_close; + } + + return (fclose(fout) == 0 ? 1 : 0); + +err_close: + fclose(fout); + return 0; +} + +static int +hfsplus_extract_vh (const char* filename, PedFileSystem* fs) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + FILE* fout; + PedGeometry* geom = priv_data->plus_geom; + + + fout = fopen(filename, "w"); + if (!fout) return 0; + + if (!ped_geometry_read(geom, extract_buffer, 2, 1)) + goto err_close; + if (!fwrite(extract_buffer, PED_SECTOR_SIZE_DEFAULT, 1, fout)) + goto err_close; + + return (fclose(fout) == 0 ? 1 : 0); + +err_close: + fclose(fout); + return 0; +} + +/* TODO : use the timer to report what is happening */ +/* TODO : use exceptions to report errors */ +static int +hfsplus_extract (PedFileSystem* fs, PedTimer* timer) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsPVolumeHeader* vh = priv_data->vh; + HfsPPrivateFile* startup_file; + + if (priv_data->wrapper) { + /* TODO : create nested timer */ + hfs_extract (priv_data->wrapper, timer); + } + + ped_exception_throw ( + PED_EXCEPTION_INFORMATION, + PED_EXCEPTION_OK, + _("This is not a real %s check. This is going to extract " + "special low level files for debugging purposes."), + "HFS+"); + + extract_buffer = ped_malloc(BLOCK_MAX_BUFF * PED_SECTOR_SIZE_DEFAULT); + if (!extract_buffer) return 0; + + hfsplus_extract_vh(HFSP_VH_FILENAME, fs); + hfsplus_extract_file(HFSP_CATALOG_FILENAME, priv_data->catalog_file); + hfsplus_extract_file(HFSP_EXTENTS_FILENAME, priv_data->extents_file); + hfsplus_extract_file(HFSP_ATTRIB_FILENAME, priv_data->attributes_file); + hfsplus_extract_file(HFSP_BITMAP_FILENAME, priv_data->allocation_file); + + startup_file = hfsplus_file_open(fs, PED_CPU_TO_BE32(HFSP_STARTUP_ID), + vh->startup_file.extents, + PED_BE64_TO_CPU ( + vh->startup_file.logical_size) + / PED_SECTOR_SIZE_DEFAULT); + if (startup_file) { + hfsplus_extract_file(HFSP_STARTUP_FILENAME, startup_file); + hfsplus_file_close(startup_file); startup_file = NULL; + } + + free(extract_buffer); extract_buffer = NULL; + return 0; /* nothing has been fixed by us ! */ +} +#endif /* HFS_EXTRACT_FS */ + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/hfs/hfs.h b/jni/parted/libparted/fs/r/hfs/hfs.h new file mode 100755 index 0000000..5b9138c --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/hfs.h @@ -0,0 +1,648 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2003-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef _HFS_H +#define _HFS_H + +/* WARNING : bn is used 2 times in theses macro */ +/* so _never_ use side effect operators when using them */ +#define TST_BLOC_OCCUPATION(tab,bn) \ + (((tab)[(bn)/8]) & (1<<(7-((bn)&7)))) +#define SET_BLOC_OCCUPATION(tab,bn) \ + (((tab)[(bn)/8]) |= (1<<(7-((bn)&7)))) +#define CLR_BLOC_OCCUPATION(tab,bn) \ + (((tab)[(bn)/8]) &= ~(1<<(7-((bn)&7)))) + +/* Maximum number of blocks for the copy buffers */ +#define BLOCK_MAX_BUFF 256 +/* Maximum size of the copy buffers, in bytes */ +#define BYTES_MAX_BUFF 8388608 + +/* Apple Creator Codes follow */ +#define HFSP_IMPL_Shnk 0x53686e6b /* in use */ +#define HFSP_IMPL_Xpnd 0x58706e64 /* reserved */ +#define HFSP_IMPL_Resz 0x5265737a /* reserved */ +#define HFSP_IMPL_PHpx 0x50482b78 /* reserved */ +#define HFSP_IMPL_traP 0x74726150 /* reserved */ +#define HFSP_IMPL_GnuP 0x476e7550 /* reserved */ + +#define HFS_SIGNATURE 0x4244 /* 'BD' */ +#define HFSP_SIGNATURE 0x482B /* 'H+' */ +#define HFSX_SIGNATURE 0x4858 /* 'HX' */ + +#define HFSP_VERSION 4 +#define HFSX_VERSION 5 + +#define HFS_HARD_LOCK 7 +#define HFS_UNMOUNTED 8 +#define HFS_BAD_SPARED 9 +#define HFS_SOFT_LOCK 15 +#define HFSP_NO_CACHE 10 +#define HFSP_INCONSISTENT 11 +#define HFSP_REUSE_CNID 12 +#define HFSP_JOURNALED 13 + +#define HFS_IDX_NODE 0x00 +#define HFS_HDR_NODE 0x01 +#define HFS_MAP_NODE 0x02 +#define HFS_LEAF_NODE 0xFF + +#define HFS_FIRST_REC 0x0E +#define HFS_NSD_HD_REC 0x78 +#define HFS_MAP_REC 0xF8 + +#define HFS_DATA_FORK 0x00 +#define HFS_RES_FORK 0xFF + +#define HFS_CAT_DIR 0x01 +#define HFS_CAT_FILE 0x02 +#define HFS_CAT_DIR_TH 0x03 +#define HFS_CAT_FILE_TH 0x04 + +#define HFSP_ATTR_INLINE 0x10 +#define HFSP_ATTR_FORK 0x20 +#define HFSP_ATTR_EXTENTS 0x30 + +#define HFS_ROOT_PAR_ID 0x01 +#define HFS_ROOT_DIR_ID 0x02 +#define HFS_XTENT_ID 0x03 +#define HFS_CATALOG_ID 0x04 +#define HFS_BAD_BLOCK_ID 0x05 +#define HFSP_ALLOC_ID 0x06 +#define HFSP_STARTUP_ID 0x07 +#define HFSP_ATTRIB_ID 0x08 +#define HFSP_BOGUS_ID 0x0F +#define HFSP_FIRST_AV_ID 0x10 + +#define HFSJ_JOURN_IN_FS 0x00 +#define HFSJ_JOURN_OTHER_DEV 0x01 +#define HFSJ_JOURN_NEED_INIT 0x02 + +#define HFSJ_HEADER_MAGIC 0x4a4e4c78 +#define HFSJ_ENDIAN_MAGIC 0x12345678 + +#define HFSX_CASE_FOLDING 0xCF /* case insensitive HFSX */ +#define HFSX_BINARY_COMPARE 0xBC /* case sensitive HFSX */ + +#define HFS_EXT_NB 3 +#define HFSP_EXT_NB 8 + +/* Define the filenames used by the FS extractor */ +#ifdef HFS_EXTRACT_FS + +#define HFS_MDB_FILENAME "mdb.hfs" +#define HFS_CATALOG_FILENAME "catalog.hfs" +#define HFS_EXTENTS_FILENAME "extents.hfs" +#define HFS_BITMAP_FILENAME "bitmap.hfs" + +#define HFSP_VH_FILENAME "vh.hfsplus" +#define HFSP_CATALOG_FILENAME "catalog.hfsplus" +#define HFSP_EXTENTS_FILENAME "extents.hfsplus" +#define HFSP_BITMAP_FILENAME "bitmap.hfsplus" +#define HFSP_ATTRIB_FILENAME "attributes.hfsplus" +#define HFSP_STARTUP_FILENAME "startup.hfsplus" + +#endif /* HFS_EXTRACT_FS */ + + + +/* ----------------------------------- */ +/* -- HFS DATA STRUCTURES -- */ +/* ----------------------------------- */ + +/* Extent descriptor */ +struct __attribute__ ((packed)) _HfsExtDescriptor { + uint16_t start_block; + uint16_t block_count; +}; +typedef struct _HfsExtDescriptor HfsExtDescriptor; +typedef HfsExtDescriptor HfsExtDataRec[HFS_EXT_NB]; + +/* Volume header */ +struct __attribute__ ((packed)) _HfsMasterDirectoryBlock { + uint16_t signature; + uint32_t create_date; + uint32_t modify_date; + uint16_t volume_attributes; + uint16_t files_in_root; + uint16_t volume_bitmap_block; /* in sectors */ + uint16_t next_allocation; + uint16_t total_blocks; + uint32_t block_size; /* in bytes */ + uint32_t def_clump_size; /* in bytes */ + uint16_t start_block; /* in sectors */ + uint32_t next_free_node; + uint16_t free_blocks; + uint8_t name_length; + char name[27]; + uint32_t backup_date; + uint16_t backup_number; + uint32_t write_count; + uint32_t extents_clump; + uint32_t catalog_clump; + uint16_t dirs_in_root; + uint32_t file_count; + uint32_t dir_count; + uint32_t finder_info[8]; + union __attribute__ ((packed)) { + struct __attribute__ ((packed)) { + uint16_t volume_cache_size; /* in blocks */ + uint16_t bitmap_cache_size; /* in blocks */ + uint16_t common_cache_size; /* in blocks */ + } legacy; + struct __attribute__ ((packed)) { + uint16_t signature; + HfsExtDescriptor location; + } embedded; + } old_new; + uint32_t extents_file_size; /* in bytes, block size multiple */ + HfsExtDataRec extents_file_rec; + uint32_t catalog_file_size; /* in bytes, block size multiple */ + HfsExtDataRec catalog_file_rec; +}; +typedef struct _HfsMasterDirectoryBlock HfsMasterDirectoryBlock; + +/* B*-Tree Node Descriptor */ +struct __attribute__ ((packed)) _HfsNodeDescriptor { + uint32_t next; + uint32_t previous; + int8_t type; + uint8_t height; + uint16_t rec_nb; + uint16_t reserved; +}; +typedef struct _HfsNodeDescriptor HfsNodeDescriptor; + +/* Header record of a whole B*-Tree */ +struct __attribute__ ((packed)) _HfsHeaderRecord { + uint16_t depth; + uint32_t root_node; + uint32_t leaf_records; + uint32_t first_leaf_node; + uint32_t last_leaf_node; + uint16_t node_size; + uint16_t max_key_len; + uint32_t total_nodes; + uint32_t free_nodes; + int8_t reserved[76]; +}; +typedef struct _HfsHeaderRecord HfsHeaderRecord; + +/* Catalog key for B*-Tree lookup in the catalog file */ +struct __attribute__ ((packed)) _HfsCatalogKey { + uint8_t key_length; /* length of the key without key_length */ + uint8_t reserved; + uint32_t parent_ID; + uint8_t name_length; + char name[31]; /* in fact physicaly 1 upto 31 */ +}; +typedef struct _HfsCatalogKey HfsCatalogKey; + +/* Extents overflow key for B*-Tree lookup */ +struct __attribute__ ((packed)) _HfsExtentKey { + uint8_t key_length; /* length of the key without key_length */ + uint8_t type; /* data or ressource fork */ + uint32_t file_ID; + uint16_t start; +}; +typedef struct _HfsExtentKey HfsExtentKey; + +/* Catalog subdata case directory */ +struct __attribute__ ((packed)) _HfsDir { + uint16_t flags; + uint16_t valence; /* number of files in this directory */ + uint32_t dir_ID; + uint32_t create_date; + uint32_t modify_date; + uint32_t backup_date; + int8_t DInfo[16]; /* used by Finder, handle as reserved */ + int8_t DXInfo[16]; /* used by Finder, handle as reserved */ + uint32_t reserved[4]; +}; +typedef struct _HfsDir HfsDir; + +/* Catalog subdata case file */ +struct __attribute__ ((packed)) _HfsFile { + int8_t flags; + int8_t type; /* should be 0 */ + int8_t FInfo[16]; /* used by Finder, handle as reserved */ + uint32_t file_ID; + uint16_t data_start_block; + uint32_t data_sz_byte; + uint32_t data_sz_block; + uint16_t res_start_block; + uint32_t res_sz_byte; + uint32_t res_sz_block; + uint32_t create_date; + uint32_t modify_date; + uint32_t backup_date; + int8_t FXInfo[16]; /* used by Finder, handle as reserved */ + uint16_t clump_size; + HfsExtDataRec extents_data; + HfsExtDataRec extents_res; + uint32_t reserved; +}; +typedef struct _HfsFile HfsFile; + +/* Catalog subdata case directory thread */ +struct __attribute__ ((packed)) _HfsDirTh { + uint32_t reserved[2]; + uint32_t parent_ID; + int8_t name_length; + char name[31]; +}; +typedef struct _HfsDirTh HfsDirTh; + +/* Catalog subdata case file thread */ +typedef struct _HfsDirTh HfsFileTh; /* same as directory thread */ + +/* Catalog data */ +struct __attribute__ ((packed)) _HfsCatalog { + int8_t type; + int8_t reserved; + union { + HfsDir dir; + HfsFile file; + HfsDirTh dir_th; + HfsFileTh file_th; + } sel; +}; +typedef struct _HfsCatalog HfsCatalog; + + + +/* ------------------------------------ */ +/* -- HFS+ DATA STRUCTURES -- */ +/* ------------------------------------ */ + +/* documented since 2004 in tn1150 */ +struct __attribute__ ((packed)) _HfsPPerms { + uint32_t owner_ID; + uint32_t group_ID; + uint32_t permissions; + uint32_t special_devices; +}; +typedef struct _HfsPPerms HfsPPerms; + +/* HFS+ extent descriptor*/ +struct __attribute__ ((packed)) _HfsPExtDescriptor { + uint32_t start_block; + uint32_t block_count; +}; +typedef struct _HfsPExtDescriptor HfsPExtDescriptor; +typedef HfsPExtDescriptor HfsPExtDataRec[HFSP_EXT_NB]; + +/* HFS+ fork data structure */ +struct __attribute__ ((packed)) _HfsPForkData { + uint64_t logical_size; + uint32_t clump_size; + uint32_t total_blocks; + HfsPExtDataRec extents; +}; +typedef struct _HfsPForkData HfsPForkData; + +/* HFS+ catalog node ID */ +typedef uint32_t HfsPNodeID; + +/* HFS+ file names */ +typedef uint16_t unichar; +struct __attribute__ ((packed)) _HfsPUniStr255 { + uint16_t length; + unichar unicode[255]; /* 1 upto 255 */ +}; +typedef struct _HfsPUniStr255 HfsPUniStr255; + +/* HFS+ volume header */ +struct __attribute__ ((packed)) _HfsPVolumeHeader { + uint16_t signature; + uint16_t version; + uint32_t attributes; + uint32_t last_mounted_version; + uint32_t journal_info_block; + + uint32_t create_date; + uint32_t modify_date; + uint32_t backup_date; + uint32_t checked_date; + + uint32_t file_count; + uint32_t dir_count; + + uint32_t block_size; + uint32_t total_blocks; + uint32_t free_blocks; + + uint32_t next_allocation; + uint32_t res_clump_size; + uint32_t data_clump_size; + HfsPNodeID next_catalog_ID; + + uint32_t write_count; + uint64_t encodings_bitmap; + + uint8_t finder_info[32]; + + HfsPForkData allocation_file; + HfsPForkData extents_file; + HfsPForkData catalog_file; + HfsPForkData attributes_file; + HfsPForkData startup_file; +}; +typedef struct _HfsPVolumeHeader HfsPVolumeHeader; + +/* HFS+ B-Tree Node Descriptor. Same as HFS btree. */ +struct __attribute__ ((packed)) _HfsPNodeDescriptor { + uint32_t next; + uint32_t previous; + int8_t type; + uint8_t height; + uint16_t rec_nb; + uint16_t reserved; +}; +typedef struct _HfsPNodeDescriptor HfsPNodeDescriptor; + +/* Header record of a whole HFS+ B-Tree. */ +struct __attribute__ ((packed)) _HfsPHeaderRecord { + uint16_t depth; + uint32_t root_node; + uint32_t leaf_records; + uint32_t first_leaf_node; + uint32_t last_leaf_node; + uint16_t node_size; + uint16_t max_key_len; + uint32_t total_nodes; + uint32_t free_nodes; /* same as hfs btree until here */ + uint16_t reserved1; + + uint32_t clump_size; + uint8_t btree_type; /* must be 0 for HFS+ B-Tree */ + uint8_t key_compare_type; /* hfsx => 0xCF = case folding */ + /* 0xBC = binary compare */ + /* otherwise, reserved */ + uint32_t attributes; + uint32_t reserved3[16]; +}; +typedef struct _HfsPHeaderRecord HfsPHeaderRecord; + +/* Catalog key for B-Tree lookup in the HFS+ catalog file */ +struct __attribute__ ((packed)) _HfsPCatalogKey { + uint16_t key_length; + HfsPNodeID parent_ID; + HfsPUniStr255 node_name; +}; +typedef struct _HfsPCatalogKey HfsPCatalogKey; + +/* HFS+ catalog subdata case dir */ +struct __attribute__ ((packed)) _HfsPDir { + uint16_t flags; + uint32_t valence; + HfsPNodeID dir_ID; + uint32_t create_date; + uint32_t modify_date; + uint32_t attrib_mod_date; + uint32_t access_date; + uint32_t backup_date; + HfsPPerms permissions; + int8_t DInfo[16]; /* used by Finder, handle as reserved */ + int8_t DXInfo[16]; /* used by Finder, handle as reserved */ + uint32_t text_encoding; + uint32_t reserved; +}; +typedef struct _HfsPDir HfsPDir; + +/* HFS+ catalog subdata case file */ +struct __attribute__ ((packed)) _HfsPFile { + uint16_t flags; + uint32_t reserved1; + HfsPNodeID file_ID; + uint32_t create_date; + uint32_t modify_date; + uint32_t attrib_mod_date; + uint32_t access_date; + uint32_t backup_date; + HfsPPerms permissions; + int8_t FInfo[16]; /* used by Finder, handle as reserved */ + int8_t FXInfo[16]; /* used by Finder, handle as reserved */ + uint32_t text_encoding; + uint32_t reserved2; + + HfsPForkData data_fork; + HfsPForkData res_fork; +}; +typedef struct _HfsPFile HfsPFile; + +/* HFS+ catalog subdata case thread */ +struct __attribute__ ((packed)) _HfsPThread { + int16_t reserved; + HfsPNodeID parent_ID; + HfsPUniStr255 node_name; +}; +typedef struct _HfsPThread HfsPDirTh; +typedef struct _HfsPThread HfsPFileTh; + +/* HFS+ Catalog leaf data */ +struct __attribute__ ((packed)) _HfsPCatalog { + int16_t type; + union { + HfsPDir dir; + HfsPFile file; + HfsPDirTh dir_th; + HfsPFileTh file_th; + } sel; +}; +typedef struct _HfsPCatalog HfsPCatalog; + +/* HFS+ extents file key */ +struct __attribute__ ((packed)) _HfsPExtentKey { + uint16_t key_length; + uint8_t type; + uint8_t pad; + HfsPNodeID file_ID; + uint32_t start; +}; +typedef struct _HfsPExtentKey HfsPExtentKey; + +/* extent file data is HfsPExtDataRec */ + +/* Fork data attribute file */ +struct __attribute__ ((packed)) _HfsPForkDataAttr { + uint32_t record_type; + uint32_t reserved; + union __attribute__ ((packed)) { + HfsPForkData fork; + HfsPExtDataRec extents; + } fork_res; +}; +typedef struct _HfsPForkDataAttr HfsPForkDataAttr; + + +/* ----------- Journal data structures ----------- */ + +/* Info block : stored in a block # defined in the VH */ +struct __attribute__ ((packed)) _HfsJJournalInfoBlock { + uint32_t flags; + uint32_t device_signature[8]; + uint64_t offset; + uint64_t size; + uint32_t reserved[32]; +}; +typedef struct _HfsJJournalInfoBlock HfsJJournalInfoBlock; + +struct __attribute__ ((packed)) _HfsJJournalHeader { + uint32_t magic; + uint32_t endian; + uint64_t start; + uint64_t end; + uint64_t size; + uint32_t blhdr_size; + uint32_t checksum; + uint32_t jhdr_size; +}; +typedef struct _HfsJJournalHeader HfsJJournalHeader; + +struct __attribute__ ((packed)) _HfsJBlockInfo { + uint64_t bnum; /* sector number */ + uint32_t bsize; /* size in bytes */ + uint32_t next; +}; +typedef struct _HfsJBlockInfo HfsJBlockInfo; + +struct __attribute__ ((packed)) _HfsJBlockListHeader { + uint16_t max_blocks; /* reserved */ + uint16_t num_blocks; + uint32_t bytes_used; + uint32_t checksum; + uint32_t pad; + HfsJBlockInfo binfo[]; +}; +typedef struct _HfsJBlockListHeader HfsJBlockListHeader; + + + +/* ---------------------------------------- */ +/* -- INTERNAL DATA STRUCTURES -- */ +/* ---------------------------------------- */ + +/* Data of an opened HFS file */ +struct _HfsPrivateFile { + PedSector sect_nb; + PedFileSystem* fs; + uint32_t CNID; /* disk order (BE) */ + HfsExtDataRec first; /* disk order (BE) */ + HfsExtDataRec cache; /* disk order (BE) */ + uint16_t start_cache; /* CPU order */ +}; +typedef struct _HfsPrivateFile HfsPrivateFile; + +/* To store bad block list */ +struct _HfsPrivateLinkExtent { + HfsExtDescriptor extent; + struct _HfsPrivateLinkExtent* next; +}; +typedef struct _HfsPrivateLinkExtent HfsPrivateLinkExtent; + +/* HFS Filesystem specific data */ +struct _HfsPrivateFSData { + uint8_t alloc_map[(1<<16) / 8]; + HfsMasterDirectoryBlock* mdb; + HfsPrivateFile* extent_file; + HfsPrivateFile* catalog_file; + HfsPrivateLinkExtent* bad_blocks_xtent_list; + unsigned int bad_blocks_xtent_nb; + char bad_blocks_loaded; +}; +typedef struct _HfsPrivateFSData HfsPrivateFSData; + +/* Generic btree key */ +struct __attribute__ ((packed)) _HfsPrivateGenericKey { + uint8_t key_length; + uint8_t key_content[1]; /* we use 1 as a minimum size */ +}; +typedef struct _HfsPrivateGenericKey HfsPrivateGenericKey; + +/* ----- HFS+ ----- */ + +/* Data of an opened HFS file */ +struct _HfsPPrivateFile { + PedSector sect_nb; + PedFileSystem* fs; + HfsPNodeID CNID; /* disk order (BE) */ + HfsPExtDataRec first; /* disk order (BE) */ + HfsPExtDataRec cache; /* disk order (BE) */ + uint32_t start_cache; /* CPU order */ +}; +typedef struct _HfsPPrivateFile HfsPPrivateFile; + +struct _HfsPPrivateExtent { + PedSector start_sector; + PedSector sector_count; +}; +typedef struct _HfsPPrivateExtent HfsPPrivateExtent; + +/* To store bad block list */ +struct _HfsPPrivateLinkExtent { + HfsPExtDescriptor extent; + struct _HfsPPrivateLinkExtent* next; +}; +typedef struct _HfsPPrivateLinkExtent HfsPPrivateLinkExtent; + +/* HFS+ file system specific data */ +struct _HfsPPrivateFSData { + PedFileSystem* wrapper; /* NULL if hfs+ is not embedded */ + PedGeometry* plus_geom; /* Geometry of HFS+ _volume_ */ + uint8_t* alloc_map; + uint8_t* dirty_alloc_map; + HfsPVolumeHeader* vh; + HfsPPrivateFile* extents_file; + HfsPPrivateFile* catalog_file; + HfsPPrivateFile* attributes_file; + HfsPPrivateFile* allocation_file; + HfsPPrivateLinkExtent* bad_blocks_xtent_list; + uint32_t jib_start_block; + uint32_t jl_start_block; + unsigned int bad_blocks_xtent_nb; + char bad_blocks_loaded; + char free_geom; /* 1 = plus_geom must be freed */ +}; +typedef struct _HfsPPrivateFSData HfsPPrivateFSData; + +/* Generic + btree key */ +struct __attribute__ ((packed)) _HfsPPrivateGenericKey { + uint16_t key_length; + uint8_t key_content[1]; /* we use 1 as a minimum size */ +}; +typedef struct _HfsPPrivateGenericKey HfsPPrivateGenericKey; + +/* ---- common ---- */ + +/* node and lead record reference for a BTree search */ +struct _HfsCPrivateLeafRec { + unsigned int node_size; /* in sectors */ + unsigned int node_number; + unsigned int record_pos; + unsigned int record_number; +}; +typedef struct _HfsCPrivateLeafRec HfsCPrivateLeafRec; + +extern uint8_t* hfs_block; +extern uint8_t* hfsp_block; +extern unsigned hfs_block_count; +extern unsigned hfsp_block_count; + +#endif /* _HFS_H */ diff --git a/jni/parted/libparted/fs/r/hfs/journal.c b/jni/parted/libparted/fs/r/hfs/journal.c new file mode 100755 index 0000000..7a2a8dc --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/journal.c @@ -0,0 +1,392 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef DISCOVER_ONLY + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" +#include "reloc_plus.h" + +#include "journal.h" + +static int hfsj_vh_replayed = 0; +static int is_le = 0; + +static uint32_t +hfsj_calc_checksum(uint8_t *ptr, int len) +{ + int i; + uint32_t cksum=0; + + for (i=0; i < len; i++, ptr++) { + cksum = (cksum << 8) ^ (cksum + *ptr); + } + + return (~cksum); +} + +int +hfsj_update_jib(PedFileSystem* fs, uint32_t block) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + + priv_data->vh->journal_info_block = PED_CPU_TO_BE32(block); + + if (!hfsplus_update_vh (fs)) + return 0; + + priv_data->jib_start_block = block; + return 1; +} + +int +hfsj_update_jl(PedFileSystem* fs, uint32_t block) +{ + uint8_t buf[PED_SECTOR_SIZE_DEFAULT]; + PedSector sector; + uint64_t offset; + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsJJournalInfoBlock* jib; + int binsect; + + binsect = HFS_32_TO_CPU(priv_data->vh->block_size, is_le) / PED_SECTOR_SIZE_DEFAULT; + sector = (PedSector) priv_data->jib_start_block * binsect; + if (!ped_geometry_read(priv_data->plus_geom, buf, sector, 1)) + return 0; + jib = (HfsJJournalInfoBlock*) buf; + + offset = (uint64_t)block * PED_SECTOR_SIZE_DEFAULT * binsect; + jib->offset = HFS_CPU_TO_64(offset, is_le); + + if (!ped_geometry_write(priv_data->plus_geom, buf, sector, 1) + || !ped_geometry_sync(priv_data->plus_geom)) + return 0; + + priv_data->jl_start_block = block; + return 1; +} + +/* Return the sector in the journal that is after the area read */ +/* or 0 on error */ +static PedSector +hfsj_journal_read(PedGeometry* geom, HfsJJournalHeader* jh, + PedSector journ_sect, PedSector journ_length, + PedSector read_sect, unsigned int nb_sect, + void* buf) +{ + int r; + + while (nb_sect--) { + r = ped_geometry_read(geom, buf, journ_sect + read_sect, 1); + if (!r) return 0; + + buf = ((uint8_t*)buf) + PED_SECTOR_SIZE_DEFAULT; + read_sect++; + if (read_sect == journ_length) + read_sect = 1; /* skip journal header + which is asserted to be + 1 sector long */ + } + + return read_sect; +} + +static int +hfsj_replay_transaction(PedFileSystem* fs, HfsJJournalHeader* jh, + PedSector jsector, PedSector jlength) +{ + PedSector start, sector; + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsJBlockListHeader* blhdr; + uint8_t* block; + unsigned int blhdr_nbsect; + int i, r; + uint32_t cksum, size; + + blhdr_nbsect = HFS_32_TO_CPU(jh->blhdr_size, is_le) / PED_SECTOR_SIZE_DEFAULT; + blhdr = (HfsJBlockListHeader*) + ped_malloc (blhdr_nbsect * PED_SECTOR_SIZE_DEFAULT); + if (!blhdr) return 0; + + start = HFS_64_TO_CPU(jh->start, is_le) / PED_SECTOR_SIZE_DEFAULT; + do { + start = hfsj_journal_read(priv_data->plus_geom, jh, jsector, + jlength, start, blhdr_nbsect, blhdr); + if (!start) goto err_replay; + + cksum = HFS_32_TO_CPU(blhdr->checksum, is_le); + blhdr->checksum = 0; + if (cksum!=hfsj_calc_checksum((uint8_t*)blhdr, sizeof(*blhdr))){ + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Bad block list header checksum.")); + goto err_replay; + } + blhdr->checksum = HFS_CPU_TO_32(cksum, is_le); + + for (i=1; i < HFS_16_TO_CPU(blhdr->num_blocks, is_le); ++i) { + size = HFS_32_TO_CPU(blhdr->binfo[i].bsize, is_le); + sector = HFS_64_TO_CPU(blhdr->binfo[i].bnum, is_le); + if (!size) continue; + if (size % PED_SECTOR_SIZE_DEFAULT) { + ped_exception_throw( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Invalid size of a transaction " + "block while replaying the journal " + "(%i bytes)."), + size); + goto err_replay; + } + block = (uint8_t*) ped_malloc(size); + if (!block) goto err_replay; + start = hfsj_journal_read(priv_data->plus_geom, jh, + jsector, jlength, start, + size / PED_SECTOR_SIZE_DEFAULT, + block); + if (!start) { + free (block); + goto err_replay; + } + /* the sector stored in the journal seems to be + relative to the begin of the block device which + contains the hfs+ journaled volume */ + if (sector != ~0LL) + r = ped_geometry_write (fs->geom, block, sector, + size / PED_SECTOR_SIZE_DEFAULT); + else + r = 1; + free (block); + /* check if wrapper mdb or vh with no wrapper has + changed */ + if ( (sector != ~0LL) + && (2 >= sector) + && (2 < sector + size / PED_SECTOR_SIZE_DEFAULT) ) + hfsj_vh_replayed = 1; + /* check if vh of embedded hfs+ has changed */ + if ( (sector != ~0LL) + && (priv_data->plus_geom != fs->geom) + && (sector + + fs->geom->start + - priv_data->plus_geom->start <= 2) + && (sector + + size / PED_SECTOR_SIZE_DEFAULT + + fs->geom->start + - priv_data->plus_geom->start > 2) ) + hfsj_vh_replayed = 1; + if (!r) goto err_replay; + } + } while (blhdr->binfo[0].next); + + jh->start = HFS_CPU_TO_64(start * PED_SECTOR_SIZE_DEFAULT, is_le); + + free (blhdr); + return (ped_geometry_sync (fs->geom)); + +err_replay: + free (blhdr); + return 0; +} + +/* 0 => Failure, don't continue to open ! */ +/* 1 => Success, the journal has been completly replayed, or don't need to */ +int +hfsj_replay_journal(PedFileSystem* fs) +{ + uint8_t buf[PED_SECTOR_SIZE_DEFAULT]; + PedSector sector, length; + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsJJournalInfoBlock* jib; + HfsJJournalHeader* jh; + int binsect; + uint32_t cksum; + + binsect = PED_BE32_TO_CPU(priv_data->vh->block_size) / PED_SECTOR_SIZE_DEFAULT; + priv_data->jib_start_block = + PED_BE32_TO_CPU(priv_data->vh->journal_info_block); + sector = (PedSector) priv_data->jib_start_block * binsect; + if (!ped_geometry_read(priv_data->plus_geom, buf, sector, 1)) + return 0; + jib = (HfsJJournalInfoBlock*) buf; + + if ( (jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_IN_FS)) + && !(jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_OTHER_DEV)) ) { + priv_data->jl_start_block = HFS_64_TO_CPU(jib->offset, is_le) + / ( PED_SECTOR_SIZE_DEFAULT * binsect ); + } + + if (jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_NEED_INIT)) + return 1; + + if ( !(jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_IN_FS)) + || (jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_OTHER_DEV)) ) { + ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Journal stored outside of the volume are " + "not supported. Try to deactivate the " + "journal and run Parted again.")); + return 0; + } + + if ( (PED_BE64_TO_CPU(jib->offset) % PED_SECTOR_SIZE_DEFAULT) + || (PED_BE64_TO_CPU(jib->size) % PED_SECTOR_SIZE_DEFAULT) ) { + ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Journal offset or size is not multiple of " + "the sector size.")); + return 0; + } + + sector = PED_BE64_TO_CPU(jib->offset) / PED_SECTOR_SIZE_DEFAULT; + length = PED_BE64_TO_CPU(jib->size) / PED_SECTOR_SIZE_DEFAULT; + + jib = NULL; + if (!ped_geometry_read(priv_data->plus_geom, buf, sector, 1)) + return 0; + jh = (HfsJJournalHeader*) buf; + + if (jh->endian == PED_LE32_TO_CPU(HFSJ_ENDIAN_MAGIC)) + is_le = 1; + + if ( (jh->magic != HFS_32_TO_CPU(HFSJ_HEADER_MAGIC, is_le)) + || (jh->endian != HFS_32_TO_CPU(HFSJ_ENDIAN_MAGIC, is_le)) ) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Incorrect magic values in the journal header.")); + return 0; + } + + if ( (HFS_64_TO_CPU(jh->size, is_le)%PED_SECTOR_SIZE_DEFAULT) + || (HFS_64_TO_CPU(jh->size, is_le)/PED_SECTOR_SIZE_DEFAULT + != (uint64_t)length) ) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Journal size mismatch between journal info block " + "and journal header.")); + return 0; + } + + if ( (HFS_64_TO_CPU(jh->start, is_le) % PED_SECTOR_SIZE_DEFAULT) + || (HFS_64_TO_CPU(jh->end, is_le) % PED_SECTOR_SIZE_DEFAULT) + || (HFS_32_TO_CPU(jh->blhdr_size, is_le) % PED_SECTOR_SIZE_DEFAULT) + || (HFS_32_TO_CPU(jh->jhdr_size, is_le) % PED_SECTOR_SIZE_DEFAULT) ) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Some header fields are not multiple of the sector " + "size.")); + return 0; + } + + if (HFS_32_TO_CPU(jh->jhdr_size, is_le) != PED_SECTOR_SIZE_DEFAULT) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The sector size stored in the journal is not 512 " + "bytes. Parted only supports 512 bytes length " + "sectors.")); + return 0; + } + + cksum = HFS_32_TO_CPU(jh->checksum, is_le); + jh->checksum = 0; + if (cksum != hfsj_calc_checksum((uint8_t*)jh, sizeof(*jh))) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Bad journal checksum.")); + return 0; + } + jh->checksum = HFS_CPU_TO_32(cksum, is_le); + + /* https://github.com/apple-opensource/hfs/blob/master/core/hfs_journal.c#L1167 + * indicates that this is: + * wrap the start ptr if it points to the very end of the journal + */ + if (jh->start == jh->size) + jh->start = HFS_CPU_TO_64(PED_SECTOR_SIZE_DEFAULT, is_le); + if (jh->end == jh->size) + jh->end = HFS_CPU_TO_64(PED_SECTOR_SIZE_DEFAULT, is_le); + + if (jh->start == jh->end) + return 1; + + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_FIX | PED_EXCEPTION_CANCEL, + _("The journal is not empty. Parted must replay the " + "transactions before opening the file system. This will " + "modify the file system.")) + != PED_EXCEPTION_FIX) + return 0; + + while (jh->start != jh->end) { + /* Replay one complete transaction */ + if (!hfsj_replay_transaction(fs, jh, sector, length)) + return 0; + + /* Recalculate cksum of the journal header */ + jh->checksum = 0; /* need to be 0 while calculating the cksum */ + cksum = hfsj_calc_checksum((uint8_t*)jh, sizeof(*jh)); + jh->checksum = HFS_CPU_TO_32(cksum, is_le); + + /* Update the Journal Header */ + if (!ped_geometry_write(priv_data->plus_geom, buf, sector, 1) + || !ped_geometry_sync(priv_data->plus_geom)) + return 0; + } + + if (hfsj_vh_replayed) { + /* probe could have reported incorrect info ! */ + /* is there a way to ask parted to quit ? */ + ped_exception_throw( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_OK, + _("The volume header or the master directory block has " + "changed while replaying the journal. You should " + "restart Parted.")); + return 0; + } + + return 1; +} + +#endif /* DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/hfs/journal.h b/jni/parted/libparted/fs/r/hfs/journal.h new file mode 100755 index 0000000..66eb2b1 --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/journal.h @@ -0,0 +1,45 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef _JOURNAL_H +#define _JOURNAL_H + +#include +#include +#include + +#include "hfs.h" + +int +hfsj_replay_journal(PedFileSystem* fs); + +int +hfsj_update_jib(PedFileSystem* fs, uint32_t block); + +int +hfsj_update_jl(PedFileSystem* fs, uint32_t block); + +#define HFS_16_TO_CPU(x, is_little_endian) ((is_little_endian) ? (uint16_t)PED_LE16_TO_CPU(x) : (uint16_t)PED_BE16_TO_CPU(x)) +#define HFS_32_TO_CPU(x, is_little_endian) ((is_little_endian) ? (uint32_t)PED_LE32_TO_CPU(x) : (uint32_t)PED_BE32_TO_CPU(x)) +#define HFS_64_TO_CPU(x, is_little_endian) ((is_little_endian) ? (uint64_t)PED_LE64_TO_CPU(x) : (uint64_t)PED_BE64_TO_CPU(x)) +#define HFS_CPU_TO_16(x, is_little_endian) ((is_little_endian) ? (uint16_t)PED_CPU_TO_LE16(x) : (uint16_t)PED_CPU_TO_BE16(x)) +#define HFS_CPU_TO_32(x, is_little_endian) ((is_little_endian) ? (uint32_t)PED_CPU_TO_LE32(x) : (uint32_t)PED_CPU_TO_BE32(x)) +#define HFS_CPU_TO_64(x, is_little_endian) ((is_little_endian) ? (uint64_t)PED_CPU_TO_LE64(x) : (uint64_t)PED_CPU_TO_BE64(x)) + +#endif /* _JOURNAL_H */ diff --git a/jni/parted/libparted/fs/r/hfs/probe.c b/jni/parted/libparted/fs/r/hfs/probe.c new file mode 100755 index 0000000..ee4ae31 --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/probe.c @@ -0,0 +1,99 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" + +#include "probe.h" + +int +hfsc_can_use_geom (PedGeometry* geom) +{ + PedDevice* dev; + + dev = geom->dev; + PED_ASSERT (geom != NULL); + PED_ASSERT (dev != NULL); + + if (dev->sector_size != PED_SECTOR_SIZE_DEFAULT) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Parted can't use HFS file systems on disks " + "with a sector size not equal to %d bytes."), + (int)PED_SECTOR_SIZE_DEFAULT ); + return 0; + } + + return 1; +} + +/* Probe an HFS volume, detecting it even if +it is in fact a wrapper to an HFS+ volume */ +/* Used by hfsplus_probe and hfs_probe */ +PedGeometry* +hfs_and_wrapper_probe (PedGeometry* geom) +{ + uint8_t buf[PED_SECTOR_SIZE_DEFAULT]; + HfsMasterDirectoryBlock *mdb; + PedGeometry* geom_ret; + PedSector search, max; + + PED_ASSERT (geom != NULL); + PED_ASSERT (hfsc_can_use_geom (geom)); + + mdb = (HfsMasterDirectoryBlock *) buf; + + /* is 5 an intelligent value ? */ + if ((geom->length < 5) + || (!ped_geometry_read (geom, buf, 2, 1)) + || (mdb->signature != PED_CPU_TO_BE16 (HFS_SIGNATURE)) ) + return NULL; + + search = ((PedSector) PED_BE16_TO_CPU (mdb->start_block) + + ((PedSector) PED_BE16_TO_CPU (mdb->total_blocks) + * (PED_BE32_TO_CPU (mdb->block_size) / PED_SECTOR_SIZE_DEFAULT ))); + max = search + (PED_BE32_TO_CPU (mdb->block_size) / PED_SECTOR_SIZE_DEFAULT); + if (!(geom_ret = ped_geometry_new (geom->dev, geom->start, search + 2))) + return NULL; + + for (; search < max; search++) { + if (!ped_geometry_set (geom_ret, geom_ret->start, search + 2) + || !ped_geometry_read (geom_ret, buf, search, 1)) + break; + if (mdb->signature == PED_CPU_TO_BE16 (HFS_SIGNATURE)) + return geom_ret; + } + + ped_geometry_destroy (geom_ret); + return NULL; +} diff --git a/jni/parted/libparted/fs/r/hfs/probe.h b/jni/parted/libparted/fs/r/hfs/probe.h new file mode 100755 index 0000000..21be916 --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/probe.h @@ -0,0 +1,35 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef _PROBE_H +#define _PROBE_H + +#include +#include +#include + +#include "hfs.h" + +int +hfsc_can_use_geom (PedGeometry* geom); + +PedGeometry* +hfs_and_wrapper_probe (PedGeometry* geom); + +#endif /* _PROBE_H */ diff --git a/jni/parted/libparted/fs/r/hfs/reloc.c b/jni/parted/libparted/fs/r/hfs/reloc.c new file mode 100755 index 0000000..05ec76a --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/reloc.c @@ -0,0 +1,676 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef DISCOVER_ONLY + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" +#include "file.h" +#include "advfs.h" +#include "cache.h" + +#include "reloc.h" + +/* This function moves data of size blocks starting + at block *ptr_fblock to block *ptr_to_fblock */ +/* return new start or -1 on failure */ +static int +hfs_effect_move_extent (PedFileSystem *fs, unsigned int *ptr_fblock, + unsigned int *ptr_to_fblock, unsigned int size) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + unsigned int i, ok = 0; + unsigned int next_to_fblock; + unsigned int start, stop; + + PED_ASSERT (hfs_block != NULL); + PED_ASSERT (*ptr_to_fblock <= *ptr_fblock); + /* quiet gcc */ + start = stop = 0; + +/* + Try to fit the extent AT or _BEFORE_ the wanted place, + or then in the gap between dest and source. + If failed try to fit the extent after source, for 2 pass relocation + The extent is always copied in a non overlapping way +*/ + + /* Backward search */ + /* 1 pass relocation AT or BEFORE *ptr_to_fblock */ + if (*ptr_to_fblock != *ptr_fblock) { + start = stop = *ptr_fblock < *ptr_to_fblock+size ? + *ptr_fblock : *ptr_to_fblock+size; + while (start && stop-start != size) { + --start; + if (TST_BLOC_OCCUPATION(priv_data->alloc_map,start)) + stop = start; + } + ok = (stop-start == size); + } + + /* Forward search */ + /* 1 pass relocation in the gap merged with 2 pass reloc after source */ + if (!ok && *ptr_to_fblock != *ptr_fblock) { + start = stop = *ptr_to_fblock+1; + while (stop < PED_BE16_TO_CPU(priv_data->mdb->total_blocks) + && stop-start != size) { + if (TST_BLOC_OCCUPATION(priv_data->alloc_map,stop)) + start = stop + 1; + ++stop; + } + ok = (stop-start == size); + } + + /* new non overlapping room has been found ? */ + if (ok) { + /* enough room */ + unsigned int j; + unsigned int start_block = + PED_BE16_TO_CPU (priv_data->mdb->start_block ); + unsigned int block_sz = + (PED_BE32_TO_CPU (priv_data->mdb->block_size) + / PED_SECTOR_SIZE_DEFAULT); + + if (stop > *ptr_to_fblock && stop <= *ptr_fblock) + /* Fit in the gap */ + next_to_fblock = stop; + else + /* Before or after the gap */ + next_to_fblock = *ptr_to_fblock; + + /* move blocks */ + for (i = 0; i < size; /*i+=j*/) { + PedSector abs_sector; + unsigned int ai; + + j = size - i; j = (j < hfs_block_count) ? + j : hfs_block_count ; + + abs_sector = start_block + + (PedSector) (*ptr_fblock + i) * block_sz; + if (!ped_geometry_read (fs->geom, hfs_block, abs_sector, + block_sz * j)) + return -1; + + abs_sector = start_block + + (PedSector) (start + i) * block_sz; + if (!ped_geometry_write (fs->geom,hfs_block,abs_sector, + block_sz * j)) + return -1; + + for (ai = i+j; i < ai; i++) { + /* free source block */ + CLR_BLOC_OCCUPATION(priv_data->alloc_map, + *ptr_fblock + i); + + /* set dest block */ + SET_BLOC_OCCUPATION(priv_data->alloc_map, + start + i); + } + } + if (!ped_geometry_sync_fast (fs->geom)) + return -1; + + *ptr_fblock += size; + *ptr_to_fblock = next_to_fblock; + } else { + if (*ptr_fblock != *ptr_to_fblock) + /* not enough room, but try to continue */ + ped_exception_throw (PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE, + _("An extent has not been relocated.")); + start = *ptr_fblock; + *ptr_fblock = *ptr_to_fblock = start + size; + } + + return start; +} + +/* Update MDB */ +/* Return 0 if an error occurred */ +/* Return 1 if everything ok */ +int +hfs_update_mdb (PedFileSystem *fs) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + uint8_t node[PED_SECTOR_SIZE_DEFAULT]; + + if (!ped_geometry_read (fs->geom, node, 2, 1)) + return 0; + memcpy (node, priv_data->mdb, sizeof (HfsMasterDirectoryBlock)); + if ( !ped_geometry_write (fs->geom, node, 2, 1) + || !ped_geometry_write (fs->geom, node, fs->geom->length - 2, 1) + || !ped_geometry_sync_fast (fs->geom)) + return 0; + return 1; +} + +/* Generic relocator */ +/* replace previous hfs_do_move_* */ +static int +hfs_do_move (PedFileSystem* fs, unsigned int *ptr_src, + unsigned int *ptr_dest, HfsCPrivateCache* cache, + HfsCPrivateExtent* ref) +{ + uint8_t node[PED_SECTOR_SIZE_DEFAULT]; + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + HfsPrivateFile* file; + HfsExtDescriptor* extent; + HfsCPrivateExtent* move; + int new_start; + + new_start = hfs_effect_move_extent (fs, ptr_src, ptr_dest, + ref->ext_length); + if (new_start == -1) return -1; + + if (ref->ext_start != (unsigned) new_start) { + /* Load, modify & save */ + switch (ref->where) { + /******** MDB *********/ + case CR_PRIM_CAT : + priv_data->catalog_file + ->first[ref->ref_index].start_block = + PED_CPU_TO_BE16(new_start); + goto CR_PRIM; + case CR_PRIM_EXT : + priv_data->extent_file + ->first[ref->ref_index].start_block = + PED_CPU_TO_BE16(new_start); + CR_PRIM : + extent = ( HfsExtDescriptor* ) + ( (uint8_t*)priv_data->mdb + ref->ref_offset ); + extent[ref->ref_index].start_block = + PED_CPU_TO_BE16(new_start); + if (!hfs_update_mdb(fs)) return -1; + break; + + /********* BTREE *******/ + case CR_BTREE_EXT_CAT : + if (priv_data->catalog_file + ->cache[ref->ref_index].start_block + == PED_CPU_TO_BE16(ref->ext_start)) + priv_data->catalog_file + ->cache[ref->ref_index].start_block = + PED_CPU_TO_BE16(new_start); + /* FALLTHROUGH */ + case CR_BTREE_EXT_0 : + file = priv_data->extent_file; + goto CR_BTREE; + case CR_BTREE_CAT : + file = priv_data->catalog_file; + CR_BTREE: + PED_ASSERT(ref->sect_by_block == 1 + && ref->ref_offset < PED_SECTOR_SIZE_DEFAULT); + if (!hfs_file_read_sector(file, node, ref->ref_block)) + return -1; + extent = ( HfsExtDescriptor* ) (node + ref->ref_offset); + extent[ref->ref_index].start_block = + PED_CPU_TO_BE16(new_start); + if (!hfs_file_write_sector(file, node, ref->ref_block) + || !ped_geometry_sync_fast (fs->geom)) + return -1; + break; + + /********** BUG ********/ + default : + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("A reference to an extent comes from a place " + "it should not. You should check the file " + "system!")); + return -1; + break; + } + + /* Update the cache */ + move = hfsc_cache_move_extent(cache, ref->ext_start, new_start); + if (!move) return -1; /* "cleanly" fail */ + PED_ASSERT(move == ref); /* generate a bug */ + } + + return new_start; +} + +/* 0 error, 1 ok */ +static int +hfs_save_allocation(PedFileSystem* fs) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + unsigned int map_sectors; + + map_sectors = ( PED_BE16_TO_CPU (priv_data->mdb->total_blocks) + + PED_SECTOR_SIZE_DEFAULT * 8 - 1 ) + / (PED_SECTOR_SIZE_DEFAULT * 8); + return ( ped_geometry_write (fs->geom, priv_data->alloc_map, + PED_BE16_TO_CPU (priv_data->mdb->volume_bitmap_block), + map_sectors) ); +} + +/* This function moves an extent starting at block fblock to block to_fblock + if there's enough room */ +/* Return 1 if everything was fine */ +/* Return -1 if an error occurred */ +/* Return 0 if no extent was found */ +/* Generic search thanks to the file system cache */ +static int +hfs_move_extent_starting_at (PedFileSystem *fs, unsigned int *ptr_fblock, + unsigned int *ptr_to_fblock, + HfsCPrivateCache* cache) +{ + HfsCPrivateExtent* ref; + unsigned int old_start, new_start; + + /* Reference search powered by the cache... */ + /* This is the optimisation secret :) */ + ref = hfsc_cache_search_extent(cache, *ptr_fblock); + if (!ref) return 0; /* not found */ + + old_start = *ptr_fblock; + new_start = hfs_do_move(fs, ptr_fblock, ptr_to_fblock, cache, ref); + if (new_start == (unsigned int) -1) return -1; + if (new_start > old_start) { /* detect 2 pass reloc */ + new_start = hfs_do_move(fs,&new_start,ptr_to_fblock,cache,ref); + if (new_start == (unsigned int) -1 || new_start > old_start) + return -1; + } + + /* allocation bitmap save is not atomic with data relocation */ + /* so we only do it a few times, and without syncing */ + /* The unmounted bit protect us anyway */ + hfs_save_allocation(fs); + return 1; +} + +static int +hfs_cache_from_mdb(HfsCPrivateCache* cache, PedFileSystem* fs, + PedTimer* timer) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + HfsExtDescriptor* extent; + unsigned int j; + + extent = priv_data->mdb->extents_file_rec; + for (j = 0; j < HFS_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE16_TO_CPU(extent[j].start_block), + PED_BE16_TO_CPU(extent[j].block_count), + 0, /* unused for mdb */ + ((uint8_t*)extent) - ((uint8_t*)priv_data->mdb), + 1, /* load/save only 1 sector */ + CR_PRIM_EXT, + j ) + ) + return 0; + } + + extent = priv_data->mdb->catalog_file_rec; + for (j = 0; j < HFS_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE16_TO_CPU(extent[j].start_block), + PED_BE16_TO_CPU(extent[j].block_count), + 0, + ((uint8_t*)extent) - ((uint8_t*)priv_data->mdb), + 1, + CR_PRIM_CAT, + j ) + ) + return 0; + } + + return 1; +} + +static int +hfs_cache_from_catalog(HfsCPrivateCache* cache, PedFileSystem* fs, + PedTimer* timer) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + uint8_t node[PED_SECTOR_SIZE_DEFAULT]; + HfsHeaderRecord* header; + HfsNodeDescriptor* desc = (HfsNodeDescriptor*) node; + HfsCatalogKey* catalog_key; + HfsCatalog* catalog_data; + HfsExtDescriptor* extent; + unsigned int leaf_node, record_number; + unsigned int i, j; + uint16_t catalog_pos; + + if (!priv_data->catalog_file->sect_nb) { + ped_exception_throw ( + PED_EXCEPTION_INFORMATION, + PED_EXCEPTION_OK, + _("This HFS volume has no catalog file. " + "This is very unusual!")); + return 1; + } + + if (!hfs_file_read_sector (priv_data->catalog_file, node, 0)) + return 0; + uint16_t offset; + memcpy(&offset, node+(PED_SECTOR_SIZE_DEFAULT-2), sizeof(uint16_t)); + header = (HfsHeaderRecord*) (node + PED_BE16_TO_CPU(offset)); + + for (leaf_node = PED_BE32_TO_CPU (header->first_leaf_node); + leaf_node; + leaf_node = PED_BE32_TO_CPU (desc->next)) { + if (!hfs_file_read_sector (priv_data->catalog_file, + node, leaf_node)) + return 0; + record_number = PED_BE16_TO_CPU (desc->rec_nb); + for (i = 1; i <= record_number; ++i) { + /* undocumented alignement */ + uint16_t value; + memcpy(&value, node+(PED_SECTOR_SIZE_DEFAULT - (2*i)), sizeof(uint16_t)); + catalog_pos = PED_BE16_TO_CPU(value); + catalog_key = (HfsCatalogKey*) (node + catalog_pos); + unsigned int skip; + skip = (1 + catalog_key->key_length + 1) & ~1; + catalog_data = (HfsCatalog*)(node+catalog_pos+skip); + /* check for obvious error in FS */ + if ((catalog_pos < HFS_FIRST_REC) + || ((uint8_t*)catalog_data - node + >= PED_SECTOR_SIZE_DEFAULT + - 2 * (signed)(record_number+1))) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The file system contains errors.")); + return 0; + } + + if (catalog_data->type != HFS_CAT_FILE) continue; + + extent = catalog_data->sel.file.extents_data; + for (j = 0; j < HFS_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE16_TO_CPU(extent[j].start_block), + PED_BE16_TO_CPU(extent[j].block_count), + leaf_node, + (uint8_t*)extent - node, + 1, /* hfs => btree block = 512 b */ + CR_BTREE_CAT, + j ) + ) + return 0; + } + + extent = catalog_data->sel.file.extents_res; + for (j = 0; j < HFS_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE16_TO_CPU(extent[j].start_block), + PED_BE16_TO_CPU(extent[j].block_count), + leaf_node, + (uint8_t*)extent - node, + 1, /* hfs => btree block = 512 b */ + CR_BTREE_CAT, + j ) + ) + return 0; + } + } + } + + return 1; +} + +static int +hfs_cache_from_extent(HfsCPrivateCache* cache, PedFileSystem* fs, + PedTimer* timer) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + uint8_t node[PED_SECTOR_SIZE_DEFAULT]; + HfsHeaderRecord* header; + HfsNodeDescriptor* desc = (HfsNodeDescriptor*) node; + HfsExtentKey* extent_key; + HfsExtDescriptor* extent; + unsigned int leaf_node, record_number; + unsigned int i, j; + uint16_t extent_pos; + + if (!priv_data->extent_file->sect_nb) { + ped_exception_throw ( + PED_EXCEPTION_INFORMATION, + PED_EXCEPTION_OK, + _("This HFS volume has no extents overflow " + "file. This is quite unusual!")); + return 1; + } + + if (!hfs_file_read_sector (priv_data->extent_file, node, 0)) + return 0; + uint16_t offset; + memcpy(&offset, node+(PED_SECTOR_SIZE_DEFAULT-2), sizeof(uint16_t)); + header = (HfsHeaderRecord*) (node + PED_BE16_TO_CPU(offset)); + + for (leaf_node = PED_BE32_TO_CPU (header->first_leaf_node); + leaf_node; + leaf_node = PED_BE32_TO_CPU (desc->next)) { + if (!hfs_file_read_sector (priv_data->extent_file, node, + leaf_node)) + return 0; + record_number = PED_BE16_TO_CPU (desc->rec_nb); + for (i = 1; i <= record_number; i++) { + uint8_t where; + uint16_t value; + memcpy(&value, node+(PED_SECTOR_SIZE_DEFAULT - (2*i)), sizeof(uint16_t)); + extent_pos = PED_BE16_TO_CPU(value); + extent_key = (HfsExtentKey*)(node + extent_pos); + /* size is cst */ + extent = (HfsExtDescriptor*)(node+extent_pos+sizeof(HfsExtentKey)); + /* check for obvious error in FS */ + if ((extent_pos < HFS_FIRST_REC) + || ((uint8_t*)extent - node + >= PED_SECTOR_SIZE_DEFAULT + - 2 * (signed)(record_number+1))) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The file system contains errors.")); + return 0; + } + + switch (extent_key->file_ID) { + case PED_CPU_TO_BE32 (HFS_XTENT_ID) : + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("The extents overflow file should not" + " contain its own extents! You " + "should check the file system.")) + != PED_EXCEPTION_IGNORE) + return 0; + where = CR_BTREE_EXT_EXT; + break; + case PED_CPU_TO_BE32 (HFS_CATALOG_ID) : + where = CR_BTREE_EXT_CAT; + break; + default : + where = CR_BTREE_EXT_0; + break; + } + + for (j = 0; j < HFS_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE16_TO_CPU(extent[j].start_block), + PED_BE16_TO_CPU(extent[j].block_count), + leaf_node, + (uint8_t*)extent - node, + 1, /* hfs => btree block = 512 b */ + where, + j ) + ) + return 0; + } + } + } + + return 1; +} + +/* This function cache every extents start and length stored in any + fs structure into the adt defined in cache.[ch] + Returns NULL on failure */ +static HfsCPrivateCache* +hfs_cache_extents(PedFileSystem *fs, PedTimer* timer) +{ + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + HfsCPrivateCache* ret; + unsigned int file_number, block_number; + + file_number = PED_BE32_TO_CPU(priv_data->mdb->file_count); + block_number = PED_BE16_TO_CPU(priv_data->mdb->total_blocks); + ret = hfsc_new_cache(block_number, file_number); + if (!ret) return NULL; + + if (!hfs_cache_from_mdb(ret, fs, timer) || + !hfs_cache_from_catalog(ret, fs, timer) || + !hfs_cache_from_extent(ret, fs, timer)) { + ped_exception_throw( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Could not cache the file system in memory.")); + hfsc_delete_cache(ret); + return NULL; + } + + return ret; +} + +/* This function moves file's data to compact used and free space, + starting at fblock block */ +/* return 0 on error */ +int +hfs_pack_free_space_from_block (PedFileSystem *fs, unsigned int fblock, + PedTimer* timer, unsigned int to_free) +{ + PedSector bytes_buff; + HfsPrivateFSData* priv_data = (HfsPrivateFSData*) + fs->type_specific; + HfsMasterDirectoryBlock* mdb = priv_data->mdb; + HfsCPrivateCache* cache; + unsigned int to_fblock = fblock; + unsigned int start = fblock; + unsigned int divisor = PED_BE16_TO_CPU (mdb->total_blocks) + + 1 - start - to_free; + int ret; + + PED_ASSERT (!hfs_block); + + cache = hfs_cache_extents (fs, timer); + if (!cache) + return 0; + + /* Calculate the size of the copy buffer : + * Takes BLOCK_MAX_BUFF HFS blocks, but if > BYTES_MAX_BUFF + * takes the maximum number of HFS blocks so that the buffer + * will remain smaller than or equal to BYTES_MAX_BUFF, with + * a minimum of 1 HFS block */ + bytes_buff = PED_BE32_TO_CPU (priv_data->mdb->block_size) + * (PedSector) BLOCK_MAX_BUFF; + if (bytes_buff > BYTES_MAX_BUFF) { + hfs_block_count = BYTES_MAX_BUFF + / PED_BE32_TO_CPU (priv_data->mdb->block_size); + if (!hfs_block_count) + hfs_block_count = 1; + bytes_buff = (PedSector) hfs_block_count + * PED_BE32_TO_CPU (priv_data->mdb->block_size); + } else + hfs_block_count = BLOCK_MAX_BUFF; + + /* If the cache code requests more space, give it to him */ + if (bytes_buff < hfsc_cache_needed_buffer (cache)) + bytes_buff = hfsc_cache_needed_buffer (cache); + + hfs_block = (uint8_t*) ped_malloc (bytes_buff); + if (!hfs_block) + goto error_cache; + + if (!hfs_read_bad_blocks (fs)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Bad blocks list could not be loaded.")); + goto error_alloc; + } + + while (fblock < PED_BE16_TO_CPU (mdb->total_blocks)) { + if (TST_BLOC_OCCUPATION(priv_data->alloc_map,fblock) + && (!hfs_is_bad_block (fs, fblock))) { + if (!(ret = hfs_move_extent_starting_at (fs, &fblock, + &to_fblock, cache))) + to_fblock = ++fblock; + else if (ret == -1) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("An error occurred during extent " + "relocation.")); + goto error_alloc; + } + } else { + fblock++; + } + + ped_timer_update(timer, (float)(to_fblock - start)/divisor); + } + + free (hfs_block); hfs_block = NULL; hfs_block_count = 0; + hfsc_delete_cache (cache); + return 1; + +error_alloc: + free (hfs_block); hfs_block = NULL; hfs_block_count = 0; +error_cache: + hfsc_delete_cache (cache); + return 0; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/hfs/reloc.h b/jni/parted/libparted/fs/r/hfs/reloc.h new file mode 100755 index 0000000..d8b1e6d --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/reloc.h @@ -0,0 +1,36 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef _RELOC_H +#define _RELOC_H + +#include +#include +#include + +#include "hfs.h" + +int +hfs_update_mdb (PedFileSystem *fs); + +int +hfs_pack_free_space_from_block (PedFileSystem *fs, unsigned int fblock, + PedTimer* timer, unsigned int to_free); + +#endif /* _RELOC_H */ diff --git a/jni/parted/libparted/fs/r/hfs/reloc_plus.c b/jni/parted/libparted/fs/r/hfs/reloc_plus.c new file mode 100755 index 0000000..904929c --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/reloc_plus.c @@ -0,0 +1,948 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef DISCOVER_ONLY + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "hfs.h" +#include "file_plus.h" +#include "advfs_plus.h" +#include "cache.h" +#include "journal.h" + +#include "reloc_plus.h" + +/* This function moves data of size blocks starting at block *ptr_fblock + to block *ptr_to_fblock */ +/* return new start or -1 on failure */ +/* -1 is ok because there can only be 2^32-1 blocks, so the max possible + last one is 2^32-2 (and anyway it contains Alternate VH), so + -1 (== 2^32-1[2^32]) never represent a valid block */ +static int +hfsplus_effect_move_extent (PedFileSystem *fs, unsigned int *ptr_fblock, + unsigned int *ptr_to_fblock, unsigned int size) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + unsigned int i, ok = 0; + unsigned int next_to_fblock; + unsigned int start, stop; + + PED_ASSERT (hfsp_block != NULL); + PED_ASSERT (*ptr_to_fblock <= *ptr_fblock); + /* quiet GCC */ + start = stop = 0; + +/* + Try to fit the extent AT or _BEFORE_ the wanted place, + or then in the gap between dest and source. + If failed try to fit the extent after source, for 2 pass relocation + The extent is always copied in a non overlapping way +*/ + + /* Backward search */ + /* 1 pass relocation AT or BEFORE *ptr_to_fblock */ + if (*ptr_to_fblock != *ptr_fblock) { + start = stop = *ptr_fblock < *ptr_to_fblock+size ? + *ptr_fblock : *ptr_to_fblock+size; + while (start && stop-start != size) { + --start; + if (TST_BLOC_OCCUPATION(priv_data->alloc_map,start)) + stop = start; + } + ok = (stop-start == size); + } + + /* Forward search */ + /* 1 pass relocation in the gap merged with 2 pass reloc after source */ + if (!ok && *ptr_to_fblock != *ptr_fblock) { + start = stop = *ptr_to_fblock+1; + while (stop < PED_BE32_TO_CPU(priv_data->vh->total_blocks) + && stop-start != size) { + if (TST_BLOC_OCCUPATION(priv_data->alloc_map,stop)) + start = stop + 1; + ++stop; + } + ok = (stop-start == size); + } + + /* new non overlapping room has been found ? */ + if (ok) { + /* enough room */ + PedSector abs_sector; + unsigned int ai, j, block; + unsigned int block_sz = (PED_BE32_TO_CPU ( + priv_data->vh->block_size) + / PED_SECTOR_SIZE_DEFAULT); + + if (stop > *ptr_to_fblock && stop <= *ptr_fblock) + /* Fit in the gap */ + next_to_fblock = stop; + else + /* Before or after the gap */ + next_to_fblock = *ptr_to_fblock; + + /* move blocks */ + for (i = 0; i < size; /*i++*/) { + j = size - i; j = (j < hfsp_block_count) ? + j : hfsp_block_count ; + + abs_sector = (PedSector) (*ptr_fblock + i) * block_sz; + if (!ped_geometry_read (priv_data->plus_geom, + hfsp_block, abs_sector, + block_sz * j)) + return -1; + + abs_sector = (PedSector) (start + i) * block_sz; + if (!ped_geometry_write (priv_data->plus_geom, + hfsp_block, abs_sector, + block_sz * j)) + return -1; + + for (ai = i+j; i < ai; i++) { + /* free source block */ + block = *ptr_fblock + i; + CLR_BLOC_OCCUPATION(priv_data->alloc_map,block); + SET_BLOC_OCCUPATION(priv_data->dirty_alloc_map, + block/(PED_SECTOR_SIZE_DEFAULT*8)); + + /* set dest block */ + block = start + i; + SET_BLOC_OCCUPATION(priv_data->alloc_map,block); + SET_BLOC_OCCUPATION(priv_data->dirty_alloc_map, + block/(PED_SECTOR_SIZE_DEFAULT*8)); + } + } + if (!ped_geometry_sync_fast (priv_data->plus_geom)) + return -1; + + *ptr_fblock += size; + *ptr_to_fblock = next_to_fblock; + } else { + if (*ptr_fblock != *ptr_to_fblock) + /* not enough room */ + ped_exception_throw (PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE, + _("An extent has not been relocated.")); + start = *ptr_fblock; + *ptr_fblock = *ptr_to_fblock = start + size; + } + + return start; +} + +/* Returns 0 on error */ +/* 1 on succes */ +int +hfsplus_update_vh (PedFileSystem *fs) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + uint8_t node[PED_SECTOR_SIZE_DEFAULT]; + + if (!ped_geometry_read (priv_data->plus_geom, node, 2, 1)) + return 0; + memcpy (node, priv_data->vh, sizeof (HfsPVolumeHeader)); + if (!ped_geometry_write (priv_data->plus_geom, node, 2, 1) + || !ped_geometry_write (priv_data->plus_geom, node, + priv_data->plus_geom->length - 2, 1) + || !ped_geometry_sync_fast (priv_data->plus_geom)) + return 0; + return 1; +} + +static int +hfsplus_do_move (PedFileSystem* fs, unsigned int *ptr_src, + unsigned int *ptr_dest, HfsCPrivateCache* cache, + HfsCPrivateExtent* ref) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsPPrivateFile* file; + HfsPExtDescriptor* extent; + HfsCPrivateExtent* move; + int new_start; + + new_start = hfsplus_effect_move_extent (fs, ptr_src, ptr_dest, + ref->ext_length); + + if (new_start == -1) return -1; + + if (ref->ext_start != (unsigned) new_start) { + switch (ref->where) { + /************ VH ************/ + case CR_PRIM_CAT : + priv_data->catalog_file + ->first[ref->ref_index].start_block = + PED_CPU_TO_BE32(new_start); + goto CR_PRIM; + case CR_PRIM_EXT : + priv_data->extents_file + ->first[ref->ref_index].start_block = + PED_CPU_TO_BE32(new_start); + goto CR_PRIM; + case CR_PRIM_ATTR : + priv_data->attributes_file + ->first[ref->ref_index].start_block = + PED_CPU_TO_BE32(new_start); + goto CR_PRIM; + case CR_PRIM_ALLOC : + priv_data->allocation_file + ->first[ref->ref_index].start_block = + PED_CPU_TO_BE32(new_start); + goto CR_PRIM; + case CR_PRIM_START : + /* No startup file opened */ + CR_PRIM : + extent = ( HfsPExtDescriptor* ) + ( (uint8_t*)priv_data->vh + ref->ref_offset ); + extent[ref->ref_index].start_block = + PED_CPU_TO_BE32(new_start); + if (!hfsplus_update_vh(fs)) + return -1; + break; + + /************** BTREE *************/ + case CR_BTREE_CAT_JIB : + if (!hfsj_update_jib(fs, new_start)) + return -1; + goto BTREE_CAT; + + case CR_BTREE_CAT_JL : + if (!hfsj_update_jl(fs, new_start)) + return -1; + goto BTREE_CAT; + + BTREE_CAT: + case CR_BTREE_CAT : + file = priv_data->catalog_file; + goto CR_BTREE; + + case CR_BTREE_ATTR : + file = priv_data->attributes_file; + goto CR_BTREE; + + case CR_BTREE_EXT_ATTR : + if (priv_data->attributes_file + ->cache[ref->ref_index].start_block + == PED_CPU_TO_BE32(ref->ext_start)) + priv_data->attributes_file + ->cache[ref->ref_index].start_block = + PED_CPU_TO_BE32(new_start); + goto CR_BTREE_EXT; + case CR_BTREE_EXT_CAT : + if (priv_data->catalog_file + ->cache[ref->ref_index].start_block + == PED_CPU_TO_BE32(ref->ext_start)) + priv_data->catalog_file + ->cache[ref->ref_index].start_block = + PED_CPU_TO_BE32(new_start); + goto CR_BTREE_EXT; + case CR_BTREE_EXT_ALLOC : + if (priv_data->allocation_file + ->cache[ref->ref_index].start_block + == PED_CPU_TO_BE32(ref->ext_start)) + priv_data->allocation_file + ->cache[ref->ref_index].start_block = + PED_CPU_TO_BE32(new_start); + goto CR_BTREE_EXT; + case CR_BTREE_EXT_START : + /* No startup file opened */ + CR_BTREE_EXT : + case CR_BTREE_EXT_0 : + file = priv_data->extents_file; + + CR_BTREE : + PED_ASSERT(PED_SECTOR_SIZE_DEFAULT * ref->sect_by_block + > ref->ref_offset); + if (!hfsplus_file_read(file, hfsp_block, + (PedSector)ref->ref_block * ref->sect_by_block, + ref->sect_by_block)) + return -1; + extent = ( HfsPExtDescriptor* ) + ( hfsp_block + ref->ref_offset ); + extent[ref->ref_index].start_block = + PED_CPU_TO_BE32(new_start); + if (!hfsplus_file_write(file, hfsp_block, + (PedSector)ref->ref_block * ref->sect_by_block, + ref->sect_by_block) + || !ped_geometry_sync_fast (priv_data->plus_geom)) + return -1; + break; + + /********** BUG *********/ + default : + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("A reference to an extent comes from a place " + "it should not. You should check the file " + "system!")); + return -1; + break; + } + + move = hfsc_cache_move_extent(cache, ref->ext_start, new_start); + if (!move) return -1; + PED_ASSERT(move == ref); + } + + return new_start; +} + +/* save any dirty sector of the allocation bitmap file */ +static int +hfsplus_save_allocation(PedFileSystem *fs) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + unsigned int map_sectors, i, j; + int ret = 1; + + map_sectors = ( PED_BE32_TO_CPU (priv_data->vh->total_blocks) + + PED_SECTOR_SIZE_DEFAULT * 8 - 1 ) / (PED_SECTOR_SIZE_DEFAULT * 8); + + for (i = 0; i < map_sectors;) { + for (j = i; + (TST_BLOC_OCCUPATION(priv_data->dirty_alloc_map,j)); + ++j) + CLR_BLOC_OCCUPATION(priv_data->dirty_alloc_map,j); + if (j-i) { + ret = hfsplus_file_write(priv_data->allocation_file, + priv_data->alloc_map + i * PED_SECTOR_SIZE_DEFAULT, + i, j-i) && ret; + i = j; + } else + ++i; + } + + return ret; +} + +/* This function moves an extent starting at block fblock + to block to_fblock if there's enough room */ +/* Return 1 if everything was fine */ +/* Return -1 if an error occurred */ +/* Return 0 if no extent was found */ +static int +hfsplus_move_extent_starting_at (PedFileSystem *fs, unsigned int *ptr_fblock, + unsigned int *ptr_to_fblock, + HfsCPrivateCache* cache) +{ + HfsCPrivateExtent* ref; + unsigned int old_start, new_start; + + ref = hfsc_cache_search_extent(cache, *ptr_fblock); + if (!ref) return 0; + + old_start = *ptr_fblock; + new_start = hfsplus_do_move(fs, ptr_fblock, ptr_to_fblock, cache, ref); + if (new_start == (unsigned)-1) return -1; + if (new_start > old_start) { + new_start = hfsplus_do_move(fs, &new_start, ptr_to_fblock, + cache, ref); + if (new_start == (unsigned)-1 || new_start > old_start) + return -1; + } + + hfsplus_save_allocation(fs); + return 1; +} + +static int +hfsplus_cache_from_vh(HfsCPrivateCache* cache, PedFileSystem* fs, + PedTimer* timer) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsPExtDescriptor* extent; + unsigned int j; + + extent = priv_data->vh->allocation_file.extents; + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU(extent[j].start_block), + PED_BE32_TO_CPU(extent[j].block_count), + 0, /* unused for vh */ + ((uint8_t*)extent) - ((uint8_t*)priv_data->vh), + 1, /* load / save 1 sector */ + CR_PRIM_ALLOC, + j ) + ) + return 0; + } + + extent = priv_data->vh->extents_file.extents; + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU(extent[j].start_block), + PED_BE32_TO_CPU(extent[j].block_count), + 0, /* unused for vh */ + ((uint8_t*)extent) - ((uint8_t*)priv_data->vh), + 1, /* load / save 1 sector */ + CR_PRIM_EXT, + j ) + ) + return 0; + } + + extent = priv_data->vh->catalog_file.extents; + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU(extent[j].start_block), + PED_BE32_TO_CPU(extent[j].block_count), + 0, /* unused for vh */ + ((uint8_t*)extent) - ((uint8_t*)priv_data->vh), + 1, /* load / save 1 sector */ + CR_PRIM_CAT, + j ) + ) + return 0; + } + + extent = priv_data->vh->attributes_file.extents; + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU(extent[j].start_block), + PED_BE32_TO_CPU(extent[j].block_count), + 0, /* unused for vh */ + ((uint8_t*)extent) - ((uint8_t*)priv_data->vh), + 1, /* load / save 1 sector */ + CR_PRIM_ATTR, + j ) + ) + return 0; + } + + extent = priv_data->vh->startup_file.extents; + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU(extent[j].start_block), + PED_BE32_TO_CPU(extent[j].block_count), + 0, /* unused for vh */ + ((uint8_t*)extent) - ((uint8_t*)priv_data->vh), + 1, /* load / save 1 sector */ + CR_PRIM_START, + j ) + ) + return 0; + } + + return 1; +} + +static int +hfsplus_cache_from_catalog(HfsCPrivateCache* cache, PedFileSystem* fs, + PedTimer* timer) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + uint8_t node_1[PED_SECTOR_SIZE_DEFAULT]; + uint8_t* node; + HfsPHeaderRecord* header; + HfsPCatalogKey* catalog_key; + HfsPCatalog* catalog_data; + HfsPExtDescriptor* extent; + unsigned int leaf_node, record_number; + unsigned int i, j, size, bsize; + uint32_t jib = priv_data->jib_start_block, + jl = priv_data->jl_start_block; + uint16_t catalog_pos; + + if (!priv_data->catalog_file->sect_nb) { + ped_exception_throw ( + PED_EXCEPTION_INFORMATION, + PED_EXCEPTION_OK, + _("This HFS+ volume has no catalog file. " + "This is very unusual!")); + return 1; + } + + /* Search the extent starting at *ptr_block in the catalog file */ + if (!hfsplus_file_read_sector (priv_data->catalog_file, node_1, 0)) + return 0; + header = (HfsPHeaderRecord*) (node_1 + HFS_FIRST_REC); + leaf_node = PED_BE32_TO_CPU (header->first_leaf_node); + bsize = PED_BE16_TO_CPU (header->node_size); + size = bsize / PED_SECTOR_SIZE_DEFAULT; + PED_ASSERT(size < 256); + + node = (uint8_t*) ped_malloc(bsize); + if (!node) return 0; + HfsPNodeDescriptor *desc = (HfsPNodeDescriptor*) node; + + for (; leaf_node; leaf_node = PED_BE32_TO_CPU (desc->next)) { + if (!hfsplus_file_read (priv_data->catalog_file, node, + (PedSector) leaf_node * size, size)) { + free (node); + return 0; + } + record_number = PED_BE16_TO_CPU (desc->rec_nb); + for (i = 1; i <= record_number; i++) { + unsigned int skip; + uint8_t where; + + uint16_t value; + memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t)); + catalog_pos = PED_BE16_TO_CPU(value); + catalog_key = (HfsPCatalogKey*)(node + catalog_pos); + skip = ( 2 + PED_BE16_TO_CPU (catalog_key->key_length) + + 1) & ~1; + catalog_data = (HfsPCatalog*) + (((uint8_t*)catalog_key) + skip); + /* check for obvious error in FS */ + if ((catalog_pos < HFS_FIRST_REC) + || ((uint8_t*)catalog_data - node + >= (signed) bsize + - 2 * (signed)(record_number+1))) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The file system contains errors.")); + free (node); + return 0; + } + + if (PED_BE16_TO_CPU(catalog_data->type)!=HFS_CAT_FILE) + continue; + + extent = catalog_data->sel.file.data_fork.extents; + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + where = CR_BTREE_CAT; + if ( PED_BE32_TO_CPU(extent[j].start_block) + == jib ) { + jib = 0; + where = CR_BTREE_CAT_JIB; + } else + if ( PED_BE32_TO_CPU(extent[j].start_block) + == jl ) { + jl = 0; + where = CR_BTREE_CAT_JL; + } + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU(extent[j].start_block), + PED_BE32_TO_CPU(extent[j].block_count), + leaf_node, + (uint8_t*)extent - node, + size, + where, + j ) + ) { + free (node); + return 0; + } + } + + extent = catalog_data->sel.file.res_fork.extents; + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU(extent[j].start_block), + PED_BE32_TO_CPU(extent[j].block_count), + leaf_node, + (uint8_t*)extent - node, + size, + CR_BTREE_CAT, + j ) + ) { + free (node); + return 0; + } + } + } + } + + free (node); + return 1; +} + +static int +hfsplus_cache_from_extent(HfsCPrivateCache* cache, PedFileSystem* fs, + PedTimer* timer) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + uint8_t node_1[PED_SECTOR_SIZE_DEFAULT]; + uint8_t* node; + HfsPHeaderRecord* header; + HfsPExtentKey* extent_key; + HfsPExtDescriptor* extent; + unsigned int leaf_node, record_number; + unsigned int i, j, size, bsize; + uint16_t extent_pos; + + if (!priv_data->extents_file->sect_nb) { + ped_exception_throw ( + PED_EXCEPTION_INFORMATION, + PED_EXCEPTION_OK, + _("This HFS+ volume has no extents overflow " + "file. This is quite unusual!")); + return 1; + } + + if (!hfsplus_file_read_sector (priv_data->extents_file, node_1, 0)) + return 0; + header = ((HfsPHeaderRecord*) (node_1 + HFS_FIRST_REC)); + leaf_node = PED_BE32_TO_CPU (header->first_leaf_node); + bsize = PED_BE16_TO_CPU (header->node_size); + size = bsize / PED_SECTOR_SIZE_DEFAULT; + PED_ASSERT(size < 256); + + node = (uint8_t*) ped_malloc (bsize); + if (!node) return -1; + HfsPNodeDescriptor *desc = (HfsPNodeDescriptor*) node; + + for (; leaf_node; leaf_node = PED_BE32_TO_CPU (desc->next)) { + if (!hfsplus_file_read (priv_data->extents_file, node, + (PedSector) leaf_node * size, size)) { + free (node); + return 0; + } + record_number = PED_BE16_TO_CPU (desc->rec_nb); + for (i = 1; i <= record_number; i++) { + uint8_t where; + uint16_t value; + memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t)); + extent_pos = PED_BE16_TO_CPU(value); + extent_key = (HfsPExtentKey*)(node + extent_pos); + extent = (HfsPExtDescriptor*) + (((uint8_t*)extent_key) + sizeof (HfsPExtentKey)); + /* check for obvious error in FS */ + if ((extent_pos < HFS_FIRST_REC) + || ((uint8_t*)extent - node + >= (signed)bsize + - 2 * (signed)(record_number+1))) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The file system contains errors.")); + free (node); + return -1; + } + + switch (extent_key->file_ID) { + case PED_CPU_TO_BE32 (HFS_XTENT_ID) : + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("The extents overflow file should not" + " contain its own extents! You should " + "check the file system.")) + != PED_EXCEPTION_IGNORE) + return 0; + where = CR_BTREE_EXT_EXT; + break; + case PED_CPU_TO_BE32 (HFS_CATALOG_ID) : + where = CR_BTREE_EXT_CAT; + break; + case PED_CPU_TO_BE32 (HFSP_ALLOC_ID) : + where = CR_BTREE_EXT_ALLOC; + break; + case PED_CPU_TO_BE32 (HFSP_STARTUP_ID) : + where = CR_BTREE_EXT_START; + break; + case PED_CPU_TO_BE32 (HFSP_ATTRIB_ID) : + where = CR_BTREE_EXT_ATTR; + break; + default : + where = CR_BTREE_EXT_0; + break; + } + + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU(extent[j].start_block), + PED_BE32_TO_CPU(extent[j].block_count), + leaf_node, + (uint8_t*)extent - node, + size, + where, + j ) + ) { + free (node); + return 0; + } + } + } + } + + free (node); + return 1; +} + +static int +hfsplus_cache_from_attributes(HfsCPrivateCache* cache, PedFileSystem* fs, + PedTimer* timer) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + uint8_t node_1[PED_SECTOR_SIZE_DEFAULT]; + uint8_t* node; + HfsPHeaderRecord* header; + HfsPPrivateGenericKey* generic_key; + HfsPForkDataAttr* fork_ext_data; + HfsPExtDescriptor* extent; + unsigned int leaf_node, record_number; + unsigned int i, j, size, bsize; + uint16_t generic_pos; + + /* attributes file is facultative */ + if (!priv_data->attributes_file->sect_nb) + return 1; + + /* Search the extent starting at *ptr_block in the catalog file */ + if (!hfsplus_file_read_sector (priv_data->attributes_file, node_1, 0)) + return 0; + header = ((HfsPHeaderRecord*) (node_1 + HFS_FIRST_REC)); + leaf_node = PED_BE32_TO_CPU (header->first_leaf_node); + bsize = PED_BE16_TO_CPU (header->node_size); + size = bsize / PED_SECTOR_SIZE_DEFAULT; + PED_ASSERT(size < 256); + + node = (uint8_t*) ped_malloc(bsize); + if (!node) return 0; + HfsPNodeDescriptor *desc = (HfsPNodeDescriptor*) node; + + for (; leaf_node; leaf_node = PED_BE32_TO_CPU (desc->next)) { + if (!hfsplus_file_read (priv_data->attributes_file, node, + (PedSector) leaf_node * size, size)) { + free (node); + return 0; + } + record_number = PED_BE16_TO_CPU (desc->rec_nb); + for (i = 1; i <= record_number; i++) { + unsigned int skip; + uint16_t value; + memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t)); + generic_pos = PED_BE16_TO_CPU(value); + generic_key = (HfsPPrivateGenericKey*)(node + generic_pos); + skip = ( 2 + PED_BE16_TO_CPU (generic_key->key_length) + + 1 ) & ~1; + fork_ext_data = (HfsPForkDataAttr*)(node+generic_pos+skip); + /* check for obvious error in FS */ + if ((generic_pos < HFS_FIRST_REC) + || ((uint8_t*)fork_ext_data - node + >= (signed) bsize + - 2 * (signed)(record_number+1))) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The file system contains errors.")); + free (node); + return 0; + } + + if (fork_ext_data->record_type + == PED_CPU_TO_BE32 ( HFSP_ATTR_FORK ) ) { + extent = fork_ext_data->fork_res.fork.extents; + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU ( + extent[j].start_block ), + PED_BE32_TO_CPU ( + extent[j].block_count ), + leaf_node, + (uint8_t*)extent-node, + size, + CR_BTREE_ATTR, + j ) + ) { + free(node); + return 0; + } + } + } else if (fork_ext_data->record_type + == PED_CPU_TO_BE32 ( HFSP_ATTR_EXTENTS ) ) { + extent = fork_ext_data->fork_res.extents; + for (j = 0; j < HFSP_EXT_NB; ++j) { + if (!extent[j].block_count) break; + if (!hfsc_cache_add_extent( + cache, + PED_BE32_TO_CPU ( + extent[j].start_block ), + PED_BE32_TO_CPU ( + extent[j].block_count ), + leaf_node, + (uint8_t*)extent-node, + size, + CR_BTREE_ATTR, + j ) + ) { + free(node); + return 0; + } + } + } else continue; + } + } + + free (node); + return 1; +} + +static HfsCPrivateCache* +hfsplus_cache_extents(PedFileSystem* fs, PedTimer* timer) +{ + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsCPrivateCache* ret; + unsigned int file_number, block_number; + + file_number = PED_BE32_TO_CPU(priv_data->vh->file_count); + block_number = PED_BE32_TO_CPU(priv_data->vh->total_blocks); + ret = hfsc_new_cache(block_number, file_number); + if (!ret) return NULL; + + if (!hfsplus_cache_from_vh(ret, fs, timer) || + !hfsplus_cache_from_catalog(ret, fs, timer) || + !hfsplus_cache_from_extent(ret, fs, timer) || + !hfsplus_cache_from_attributes(ret, fs, timer)) { + ped_exception_throw( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Could not cache the file system in memory.")); + hfsc_delete_cache(ret); + return NULL; + } + + return ret; +} + +/* This function moves file's data to compact used and free space, + starting at fblock block */ +/* return 0 on error */ +int +hfsplus_pack_free_space_from_block (PedFileSystem *fs, unsigned int fblock, + PedTimer* timer, unsigned int to_free) +{ + PedSector bytes_buff; + HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*) + fs->type_specific; + HfsPVolumeHeader* vh = priv_data->vh; + HfsCPrivateCache* cache; + unsigned int to_fblock = fblock; + unsigned int start = fblock; + unsigned int divisor = PED_BE32_TO_CPU (vh->total_blocks) + + 1 - start - to_free; + int ret; + + PED_ASSERT (!hfsp_block); + + cache = hfsplus_cache_extents (fs, timer); + if (!cache) + return 0; + + /* Calculate the size of the copy buffer : + * Takes BLOCK_MAX_BUFF HFS blocks, but if > BYTES_MAX_BUFF + * takes the maximum number of HFS blocks so that the buffer + * will remain smaller than or equal to BYTES_MAX_BUFF, with + * a minimum of 1 HFS block */ + bytes_buff = PED_BE32_TO_CPU (priv_data->vh->block_size) + * (PedSector) BLOCK_MAX_BUFF; + if (bytes_buff > BYTES_MAX_BUFF) { + hfsp_block_count = BYTES_MAX_BUFF + / PED_BE32_TO_CPU (priv_data->vh->block_size); + if (!hfsp_block_count) + hfsp_block_count = 1; + bytes_buff = (PedSector) hfsp_block_count + * PED_BE32_TO_CPU (priv_data->vh->block_size); + } else + hfsp_block_count = BLOCK_MAX_BUFF; + + /* If the cache code requests more space, give it to him */ + if (bytes_buff < hfsc_cache_needed_buffer (cache)) + bytes_buff = hfsc_cache_needed_buffer (cache); + + hfsp_block = (uint8_t*) ped_malloc (bytes_buff); + if (!hfsp_block) + goto error_cache; + + if (!hfsplus_read_bad_blocks (fs)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Bad blocks list could not be loaded.")); + goto error_alloc; + } + + while ( fblock < ( priv_data->plus_geom->length - 2 ) + / ( PED_BE32_TO_CPU (vh->block_size) + / PED_SECTOR_SIZE_DEFAULT ) ) { + if (TST_BLOC_OCCUPATION (priv_data->alloc_map, fblock) + && (!hfsplus_is_bad_block (fs, fblock))) { + if (!(ret = hfsplus_move_extent_starting_at (fs, + &fblock, &to_fblock, cache))) + to_fblock = ++fblock; + else if (ret == -1) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("An error occurred during extent " + "relocation.")); + goto error_alloc; + } + } else { + fblock++; + } + + ped_timer_update(timer, (float)(to_fblock - start) / divisor); + } + + free (hfsp_block); hfsp_block = NULL; hfsp_block_count = 0; + hfsc_delete_cache (cache); + return 1; + +error_alloc: + free (hfsp_block); hfsp_block = NULL; hfsp_block_count = 0; +error_cache: + hfsc_delete_cache (cache); + return 0; +} + +#endif /* !DISCOVER_ONLY */ diff --git a/jni/parted/libparted/fs/r/hfs/reloc_plus.h b/jni/parted/libparted/fs/r/hfs/reloc_plus.h new file mode 100755 index 0000000..8c5998a --- /dev/null +++ b/jni/parted/libparted/fs/r/hfs/reloc_plus.h @@ -0,0 +1,37 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef _RELOC_PLUS_H +#define _RELOC_PLUS_H + +#include +#include +#include + +#include "hfs.h" + +int +hfsplus_update_vh (PedFileSystem *fs); + +int +hfsplus_pack_free_space_from_block (PedFileSystem *fs, unsigned int fblock, + PedTimer* timer, unsigned int to_free); + + +#endif /* _RELOC_PLUS_H */ diff --git a/jni/parted/libparted/fs/reiserfs/reiserfs.c b/jni/parted/libparted/fs/reiserfs/reiserfs.c new file mode 100755 index 0000000..0638f3e --- /dev/null +++ b/jni/parted/libparted/fs/reiserfs/reiserfs.c @@ -0,0 +1,94 @@ +/* + reiserfs.c -- ReiserFS detection + Copyright (C) 2001-2002, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include + +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif + +#include "reiserfs.h" + +static PedSector reiserfs_super_offset[] = { 128, 16, -1 }; +static PedFileSystemType* reiserfs_type; + +static PedGeometry *reiserfs_probe(PedGeometry *geom) +{ + int i; + + PED_ASSERT(geom != NULL); + reiserfs_super_block_t *sb = alloca (geom->dev->sector_size); + + for (i = 0; reiserfs_super_offset[i] != -1; i++) { + if (reiserfs_super_offset[i] >= geom->length) + continue; + if (!ped_geometry_read (geom, sb, reiserfs_super_offset[i], 1)) + continue; + + if (strncmp(REISERFS_SIGNATURE, sb->s_magic, + strlen(REISERFS_SIGNATURE)) == 0 + || strncmp(REISER2FS_SIGNATURE, sb->s_magic, + strlen(REISER2FS_SIGNATURE)) == 0 + || strncmp(REISER3FS_SIGNATURE, sb->s_magic, + strlen(REISER3FS_SIGNATURE)) == 0) { + PedSector block_size; + PedSector block_count; + + block_size = PED_LE16_TO_CPU(sb->s_blocksize) + / geom->dev->sector_size; + block_count = PED_LE32_TO_CPU(sb->s_block_count); + return ped_geometry_new(geom->dev, geom->start, + block_size * block_count); + } + } + return NULL; +} + + +static PedFileSystemOps reiserfs_simple_ops = { + probe: reiserfs_probe, +}; + +static PedFileSystemType reiserfs_simple_type = { + next: NULL, + ops: &reiserfs_simple_ops, + name: "reiserfs", +}; + +void ped_file_system_reiserfs_init() +{ + reiserfs_type = &reiserfs_simple_type; + ped_file_system_type_register(reiserfs_type); +} + +void ped_file_system_reiserfs_done() +{ + ped_file_system_type_unregister(reiserfs_type); +} diff --git a/jni/parted/libparted/fs/reiserfs/reiserfs.h b/jni/parted/libparted/fs/reiserfs/reiserfs.h new file mode 100755 index 0000000..ee92b62 --- /dev/null +++ b/jni/parted/libparted/fs/reiserfs/reiserfs.h @@ -0,0 +1,109 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef REISERFS_H +#define REISERFS_H + +#define REISERFS_API_VERSION 0 + +#define REISERFS_SIGNATURE "ReIsErFs" +#define REISER2FS_SIGNATURE "ReIsEr2Fs" +#define REISER3FS_SIGNATURE "ReIsEr3Fs" + +#define DEFAULT_BLOCK_SIZE 4096 + +struct reiserfs_super_block { + uint32_t s_block_count; + uint32_t s_free_blocks; + uint32_t s_root_block; + uint32_t s_journal_block; + uint32_t s_journal_dev; + uint32_t s_orig_journal_size; + uint32_t s_journal_trans_max; + uint32_t s_journal_block_count; + uint32_t s_journal_max_batch; + uint32_t s_journal_max_commit_age; + uint32_t s_journal_max_trans_age; + uint16_t s_blocksize; + uint16_t s_oid_maxsize; + uint16_t s_oid_cursize; + uint16_t s_state; + char s_magic[10]; + uint16_t s_fsck_state; + uint32_t s_hash_function_code; + uint16_t s_tree_height; + uint16_t s_bmap_nr; + uint16_t s_version; + char padding[438]; +}; + +typedef struct reiserfs_super_block reiserfs_super_block_t; + +enum reiserfs_exception_type { + EXCEPTION_INFORMATION = 1, + EXCEPTION_WARNING = 2, + EXCEPTION_ERROR = 3, + EXCEPTION_FATAL = 4, + EXCEPTION_BUG = 5, + EXCEPTION_NO_FEATURE = 6 +}; + +typedef enum reiserfs_exception_type reiserfs_exception_type_t; + +enum reiserfs_exception_option { + EXCEPTION_UNHANDLED = 1 << 0, + EXCEPTION_FIX = 1 << 1, + EXCEPTION_YES = 1 << 2, + EXCEPTION_NO = 1 << 3, + EXCEPTION_OK = 1 << 4, + EXCEPTION_RETRY = 1 << 5, + EXCEPTION_IGNORE = 1 << 6, + EXCEPTION_CANCEL = 1 << 7 +}; + +typedef enum reiserfs_exception_option reiserfs_exception_option_t; + +typedef void (reiserfs_gauge_handler_t)(const char *, unsigned int, void *, int, int, int); + +typedef void * reiserfs_exception_t; +typedef void * reiserfs_gauge_t; +typedef void * reiserfs_fs_t; + +#define FS_FORMAT_3_5 0 +#define FS_FORMAT_3_6 2 + +#define SUPER_OFFSET_IN_BYTES 64*1024 + +#define DEFAULT_JOURNAL_SIZE 8192 + +#define JOURNAL_MIN_SIZE 512 +#define JOURNAL_MIN_TRANS 256 +#define JOURNAL_MAX_TRANS 1024 + +#define JOURNAL_DEF_RATIO 8 +#define JOURNAL_MIN_RATIO 2 +#define JOURNAL_MAX_BATCH 900 +#define JOURNAL_MAX_COMMIT_AGE 30 +#define JOURNAL_MAX_TRANS_AGE 30 + +#define TEA_HASH 1 +#define YURA_HASH 2 +#define R5_HASH 3 + +#endif diff --git a/jni/parted/libparted/fs/udf/udf.c b/jni/parted/libparted/fs/udf/udf.c new file mode 100755 index 0000000..a48a42e --- /dev/null +++ b/jni/parted/libparted/fs/udf/udf.c @@ -0,0 +1,175 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2018-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include + +/* Read bytes using ped_geometry_read() function */ +static int read_bytes (const PedGeometry* geom, void* buffer, PedSector offset, PedSector count) +{ + char* sector_buffer; + PedSector sector_offset, sector_count, buffer_offset; + + sector_offset = offset / geom->dev->sector_size; + sector_count = (offset + count + geom->dev->sector_size - 1) / geom->dev->sector_size - sector_offset; + buffer_offset = offset - sector_offset * geom->dev->sector_size; + + sector_buffer = alloca (sector_count * geom->dev->sector_size); + + if (!ped_geometry_read (geom, sector_buffer, sector_offset, sector_count)) + return 0; + + memcpy (buffer, sector_buffer + buffer_offset, count); + return 1; +} + +/* Scan VSR and check for UDF VSD */ +static int check_vrs (const PedGeometry* geom, unsigned int vsdsize) +{ + PedSector block; + PedSector offset; + unsigned char ident[5]; + + /* Check only first 64 blocks, but theoretically standard does not define upper limit */ + for (block = 0; block < 64; block++) { + /* VRS starts at fixed offset 32kB, it is independent of block size or vsd size */ + offset = 32768 + block * vsdsize; + + /* Read VSD identifier, it is at offset 1 */ + if (!read_bytes (geom, ident, offset + 1, 5)) + return 0; + + /* Check for UDF identifier */ + if (memcmp (ident, "NSR02", 5) == 0 || + memcmp (ident, "NSR03", 5) == 0) + return 1; + + /* Unknown VSD identifier means end of VRS */ + if (memcmp (ident, "BEA01", 5) != 0 && + memcmp (ident, "TEA01", 5) != 0 && + memcmp (ident, "BOOT2", 5) != 0 && + memcmp (ident, "CD001", 5) != 0 && + memcmp (ident, "CDW02", 5) != 0) + break; + } + + return 0; +} + +/* Check for UDF AVDP */ +static int check_anchor (const PedGeometry* geom, unsigned int blocksize, int rel_block) +{ + PedSector block; + unsigned char tag[16]; + + /* Negative block means relative to the end of device */ + if (rel_block < 0) { + block = geom->length * geom->dev->sector_size / blocksize; + if (block <= (PedSector)(-rel_block)) + return 0; + block -= (PedSector)(-rel_block); + if (block < 257) + return 0; + } else { + block = rel_block; + } + + if (!read_bytes (geom, tag, block * blocksize, 16)) + return 0; + + /* Check for AVDP type (0x0002) */ + if (((unsigned short)tag[0] | ((unsigned short)tag[1] << 8)) != 0x0002) + return 0; + + /* Check that location stored in AVDP matches */ + if (((unsigned long)tag[12] | ((unsigned long)tag[13] << 8) | ((unsigned long)tag[14] << 16) | ((unsigned long)tag[15] << 24)) != block) + return 0; + + return 1; +} + +/* Detect presence of UDF AVDP */ +static int detect_anchor(const PedGeometry* geom, unsigned int blocksize) +{ + /* All possible AVDP locations in preferred order */ + static int anchors[] = { 256, -257, -1, 512 }; + size_t i; + + for (i = 0; i < sizeof (anchors)/sizeof (*anchors); i++) { + if (check_anchor (geom, blocksize, anchors[i])) + return 1; + } + + return 0; +} + +/* Detect UDF filesystem, it must have VRS and AVDP */ +static int detect_udf (const PedGeometry* geom) +{ + unsigned int blocksize; + + /* VSD size is min(2048, UDF block size), check for block sizes <= 2048 */ + if (check_vrs (geom, 2048)) { + for (blocksize = 512; blocksize <= 2048; blocksize *= 2) { + if (detect_anchor (geom, blocksize)) + return 1; + } + } + + /* Check for block sizes larger then 2048, maximal theoretical block size is 32kB */ + for (blocksize = 4096; blocksize <= 32768; blocksize *= 2) { + if (!check_vrs (geom, blocksize)) + continue; + if (detect_anchor (geom, blocksize)) + return 1; + } + + return 0; +} + +PedGeometry* +udf_probe (PedGeometry* geom) +{ + if (!detect_udf (geom)) + return NULL; + + return ped_geometry_duplicate (geom); +} + +static PedFileSystemOps udf_ops = { + probe: udf_probe, +}; + +static PedFileSystemType udf_type = { + next: NULL, + ops: &udf_ops, + name: "udf", +}; + +void +ped_file_system_udf_init () +{ + ped_file_system_type_register (&udf_type); +} + +void +ped_file_system_udf_done () +{ + ped_file_system_type_unregister (&udf_type); +} diff --git a/jni/parted/libparted/fs/ufs/ufs.c b/jni/parted/libparted/fs/ufs/ufs.c new file mode 100755 index 0000000..d2bf421 --- /dev/null +++ b/jni/parted/libparted/fs/ufs/ufs.c @@ -0,0 +1,281 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2001, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . + + Contributor: Ben Collins +*/ + +#include + +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include +#include + +/* taken from ufs_fs.h in Linux */ +#define UFS_MAXNAMLEN 255 +#define UFS_MAXMNTLEN 512 +#define UFS_MAXCSBUFS 31 +#define UFS_LINK_MAX 32000 + +#define UFS_MAGIC 0x00011954 +#define UFS_MAGIC_LFN 0x00095014 +#define UFS_MAGIC_FEA 0x00195612 +#define UFS_MAGIC_4GB 0x05231994 + +struct __attribute__ ((packed)) ufs_csum { + uint32_t cs_ndir; /* number of directories */ + uint32_t cs_nbfree; /* number of free blocks */ + uint32_t cs_nifree; /* number of free inodes */ + uint32_t cs_nffree; /* number of free frags */ +}; + +struct __attribute__ ((packed)) ufs_super_block { + uint32_t fs_link; /* UNUSED */ + uint32_t fs_rlink; /* UNUSED */ + uint32_t fs_sblkno; /* addr of super-block in filesys */ + uint32_t fs_cblkno; /* offset of cyl-block in filesys */ + uint32_t fs_iblkno; /* offset of inode-blocks in filesys */ + uint32_t fs_dblkno; /* offset of first data after cg */ + uint32_t fs_cgoffset; /* cylinder group offset in cylinder */ + uint32_t fs_cgmask; /* used to calc mod fs_ntrak */ + uint32_t fs_time; /* last time written -- time_t */ + uint32_t fs_size; /* number of blocks in fs */ + uint32_t fs_dsize; /* number of data blocks in fs */ + uint32_t fs_ncg; /* number of cylinder groups */ + uint32_t fs_bsize; /* size of basic blocks in fs */ + uint32_t fs_fsize; /* size of frag blocks in fs */ + uint32_t fs_frag; /* number of frags in a block in fs */ +/* these are configuration parameters */ + uint32_t fs_minfree; /* minimum percentage of free blocks */ + uint32_t fs_rotdelay; /* num of ms for optimal next block */ + uint32_t fs_rps; /* disk revolutions per second */ +/* these fields can be computed from the others */ + uint32_t fs_bmask; /* ``blkoff'' calc of blk offsets */ + uint32_t fs_fmask; /* ``fragoff'' calc of frag offsets */ + uint32_t fs_bshift; /* ``lblkno'' calc of logical blkno */ + uint32_t fs_fshift; /* ``numfrags'' calc number of frags */ +/* these are configuration parameters */ + uint32_t fs_maxcontig; /* max number of contiguous blks */ + uint32_t fs_maxbpg; /* max number of blks per cyl group */ +/* these fields can be computed from the others */ + uint32_t fs_fragshift; /* block to frag shift */ + uint32_t fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */ + uint32_t fs_sbsize; /* actual size of super block */ + uint32_t fs_csmask; /* csum block offset */ + uint32_t fs_csshift; /* csum block number */ + uint32_t fs_nindir; /* value of NINDIR */ + uint32_t fs_inopb; /* value of INOPB */ + uint32_t fs_nspf; /* value of NSPF */ +/* yet another configuration parameter */ + uint32_t fs_optim; /* optimization preference, see below */ +/* these fields are derived from the hardware */ + union { + struct { + uint32_t fs_npsect; /* # sectors/track including spares */ + } fs_sun; + struct { + int32_t fs_state; /* file system state timestamp */ + } fs_sunx86; + } fs_u1; + uint32_t fs_interleave; /* hardware sector interleave */ + uint32_t fs_trackskew; /* sector 0 skew, per track */ +/* a unique id for this file system (currently unused and unmaintained) */ +/* In 4.3 Tahoe this space is used by fs_headswitch and fs_trkseek */ +/* Neither of those fields is used in the Tahoe code right now but */ +/* there could be problems if they are. */ + uint32_t fs_id[2]; /* file system id */ +/* sizes determined by number of cylinder groups and their sizes */ + uint32_t fs_csaddr; /* blk addr of cyl grp summary area */ + uint32_t fs_cssize; /* size of cyl grp summary area */ + uint32_t fs_cgsize; /* cylinder group size */ +/* these fields are derived from the hardware */ + uint32_t fs_ntrak; /* tracks per cylinder */ + uint32_t fs_nsect; /* sectors per track */ + uint32_t fs_spc; /* sectors per cylinder */ +/* this comes from the disk driver partitioning */ + uint32_t fs_ncyl; /* cylinders in file system */ +/* these fields can be computed from the others */ + uint32_t fs_cpg; /* cylinders per group */ + uint32_t fs_ipg; /* inodes per group */ + uint32_t fs_fpg; /* blocks per group * fs_frag */ +/* this data must be re-computed after crashes */ + struct ufs_csum fs_cstotal; /* cylinder summary information */ +/* these fields are cleared at mount time */ + int8_t fs_fmod; /* super block modified flag */ + int8_t fs_clean; /* file system is clean flag */ + int8_t fs_ronly; /* mounted read-only flag */ + int8_t fs_flags; /* currently unused flag */ + int8_t fs_fsmnt[UFS_MAXMNTLEN]; /* name mounted on */ +/* these fields retain the current block allocation info */ + uint32_t fs_cgrotor; /* last cg searched */ + uint32_t fs_csp[UFS_MAXCSBUFS]; /* list of fs_cs info buffers */ + uint32_t fs_maxcluster; + uint32_t fs_cpc; /* cyl per cycle in postbl */ + uint16_t fs_opostbl[16][8]; /* old rotation block list head */ + union { + struct { + int32_t fs_sparecon[53];/* reserved for future constants */ + int32_t fs_reclaim; + int32_t fs_sparecon2[1]; + int32_t fs_state; /* file system state timestamp */ + uint32_t fs_qbmask[2]; /* ~usb_bmask */ + uint32_t fs_qfmask[2]; /* ~usb_fmask */ + } fs_sun; + struct { + int32_t fs_sparecon[53];/* reserved for future constants */ + int32_t fs_reclaim; + int32_t fs_sparecon2[1]; + uint32_t fs_npsect; /* # sectors/track including spares */ + uint32_t fs_qbmask[2]; /* ~usb_bmask */ + uint32_t fs_qfmask[2]; /* ~usb_fmask */ + } fs_sunx86; + struct { + int32_t fs_sparecon[50];/* reserved for future constants */ + int32_t fs_contigsumsize;/* size of cluster summary array */ + int32_t fs_maxsymlinklen;/* max length of an internal symlink */ + int32_t fs_inodefmt; /* format of on-disk inodes */ + uint32_t fs_maxfilesize[2]; /* max representable file size */ + uint32_t fs_qbmask[2]; /* ~usb_bmask */ + uint32_t fs_qfmask[2]; /* ~usb_fmask */ + int32_t fs_state; /* file system state timestamp */ + } fs_44; + } fs_u2; + int32_t fs_postblformat; /* format of positional layout tables */ + int32_t fs_nrpos; /* number of rotational positions */ + int32_t fs_postbloff; /* (__s16) rotation block list head */ + int32_t fs_rotbloff; /* (uint8_t) blocks for each rotation */ + int32_t fs_magic; /* magic number */ + uint8_t fs_space[4]; /* list of blocks for each rotation */ +}; + +static PedGeometry* +ufs_probe_sun (PedGeometry* geom) +{ + const int sectors = ((3 * 512) + geom->dev->sector_size - 1) / + geom->dev->sector_size; + uint8_t* buf = alloca (sectors * geom->dev->sector_size); + struct ufs_super_block *sb; + + if (geom->length < 5) + return 0; + if (!ped_geometry_read (geom, buf, 16 * 512 / geom->dev->sector_size, sectors)) + return 0; + + sb = (struct ufs_super_block *)buf; + + if (PED_BE32_TO_CPU(sb->fs_magic) == UFS_MAGIC) { + PedSector block_size = PED_BE32_TO_CPU(sb->fs_bsize) / geom->dev->sector_size; + PedSector block_count = PED_BE32_TO_CPU(sb->fs_size); + return ped_geometry_new (geom->dev, geom->start, + block_size * block_count); + } + if (PED_LE32_TO_CPU(sb->fs_magic) == UFS_MAGIC) { + PedSector block_size = PED_LE32_TO_CPU(sb->fs_bsize) / geom->dev->sector_size; + PedSector block_count = PED_LE32_TO_CPU(sb->fs_size); + return ped_geometry_new (geom->dev, geom->start, + block_size * block_count); + } + return NULL; +} + +static PedGeometry* +ufs_probe_hp (PedGeometry* geom) +{ + struct ufs_super_block *sb; + PedSector block_size; + PedSector block_count; + + if (geom->length < 5) + return 0; + const int sectors = ((3 * 512) + geom->dev->sector_size - 1) / + geom->dev->sector_size; + uint8_t* buf = alloca (sectors * geom->dev->sector_size); + + if (!ped_geometry_read (geom, buf, 16 * 512 / geom->dev->sector_size, sectors)) + return 0; + + sb = (struct ufs_super_block *)buf; + + /* Try sane bytesex */ + switch (PED_BE32_TO_CPU(sb->fs_magic)) { + case UFS_MAGIC_LFN: + case UFS_MAGIC_FEA: + case UFS_MAGIC_4GB: + block_size = PED_BE32_TO_CPU(sb->fs_bsize) / geom->dev->sector_size; + block_count = PED_BE32_TO_CPU(sb->fs_size); + return ped_geometry_new (geom->dev, geom->start, + block_size * block_count); + } + + /* Try perverted bytesex */ + switch (PED_LE32_TO_CPU(sb->fs_magic)) { + case UFS_MAGIC_LFN: + case UFS_MAGIC_FEA: + case UFS_MAGIC_4GB: + block_size = PED_LE32_TO_CPU(sb->fs_bsize) / geom->dev->sector_size; + block_count = PED_LE32_TO_CPU(sb->fs_size); + return ped_geometry_new (geom->dev, geom->start, + block_size * block_count); + } + return NULL; +} + +static PedFileSystemOps ufs_ops_sun = { + probe: ufs_probe_sun, +}; + +static PedFileSystemOps ufs_ops_hp = { + probe: ufs_probe_hp, +}; + +static PedFileSystemType ufs_type_sun = { + next: NULL, + ops: &ufs_ops_sun, + name: "sun-ufs", +}; + +static PedFileSystemType ufs_type_hp = { + next: NULL, + ops: &ufs_ops_hp, + name: "hp-ufs", +}; + +void +ped_file_system_ufs_init () +{ + PED_ASSERT (sizeof (struct ufs_super_block) == 1380); + + ped_file_system_type_register (&ufs_type_sun); + ped_file_system_type_register (&ufs_type_hp); +} + +void +ped_file_system_ufs_done () +{ + ped_file_system_type_unregister (&ufs_type_hp); + ped_file_system_type_unregister (&ufs_type_sun); +} diff --git a/jni/parted/libparted/fs/xfs/platform_defs.h b/jni/parted/libparted/fs/xfs/platform_defs.h new file mode 100755 index 0000000..a6ec8fb --- /dev/null +++ b/jni/parted/libparted/fs/xfs/platform_defs.h @@ -0,0 +1,109 @@ +/* include/platform_defs.h. Generated automatically by configure. */ +/* + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 3 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, + * Mountain View, CA 94043, or: + * + * http://www.sgi.com + * + * For further information regarding this notice, see: + * + * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ + * + * @configure_input@ + */ +#ifndef __XFS_PLATFORM_DEFS_H__ +#define __XFS_PLATFORM_DEFS_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 1) +# define constpp const char * const * +#else +# define constpp char * const * +#endif + +typedef loff_t xfs_off_t; +typedef uint64_t xfs_ino_t; +typedef uint32_t xfs_dev_t; +typedef int64_t xfs_daddr_t; +typedef char* xfs_caddr_t; + +/* long and pointer must be either 32 bit or 64 bit */ +/* #undef HAVE_64BIT_LONG */ +#define HAVE_32BIT_LONG 1 +#define HAVE_32BIT_PTR 1 +/* #undef HAVE_64BIT_PTR */ + +/* Check if __psint_t is set to something meaningful */ +/* #undef HAVE___PSINT_T */ +#ifndef HAVE___PSINT_T +# ifdef HAVE_32BIT_PTR +typedef int __psint_t; +# elif defined HAVE_64BIT_PTR +# ifdef HAVE_64BIT_LONG +typedef long __psint_t; +# else +/* This is a very strange architecture, which has 64 bit pointers but + * not 64 bit longs. So, I'd just punt here and assume long long is Ok */ +typedef long long __psint_t; +# endif +# else +# error Unknown pointer size +# endif +#endif + +/* Check if __psunsigned_t is set to something meaningful */ +/* #undef HAVE___PSUNSIGNED_T */ +#ifndef HAVE___PSUNSIGNED_T +# ifdef HAVE_32BIT_PTR +typedef unsigned int __psunsigned_t; +# elif defined HAVE_64BIT_PTR +# ifdef HAVE_64BIT_LONG +typedef long __psunsigned_t; +# else +/* This is a very strange architecture, which has 64 bit pointers but + * not 64 bit longs. So, I'd just punt here and assume long long is Ok */ +typedef unsigned long long __psunsigned_t; +# endif +# else +# error Unknown pointer size +# endif +#endif + +#ifdef DEBUG +# define ASSERT assert +#else +# define ASSERT(EX) ((void) 0) +#endif + +#endif /* __XFS_PLATFORM_DEFS_H__ */ diff --git a/jni/parted/libparted/fs/xfs/xfs.c b/jni/parted/libparted/fs/xfs/xfs.c new file mode 100755 index 0000000..f5cf96a --- /dev/null +++ b/jni/parted/libparted/fs/xfs/xfs.c @@ -0,0 +1,87 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2001, 2009-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include +#include "platform_defs.h" +#include "xfs_types.h" +#include "xfs_sb.h" + +static PedGeometry* +xfs_probe (PedGeometry* geom) +{ + PedSector block_size; + PedSector block_count; + struct xfs_sb *sb = alloca (geom->dev->sector_size); + + if (geom->length < XFS_SB_DADDR + 1) + return NULL; + if (!ped_geometry_read (geom, sb, XFS_SB_DADDR, 1)) + return NULL; + + if (PED_LE32_TO_CPU (sb->sb_magicnum) == XFS_SB_MAGIC) { + block_size = PED_LE32_TO_CPU (sb->sb_blocksize) / geom->dev->sector_size; + block_count = PED_LE64_TO_CPU (sb->sb_dblocks); + + return ped_geometry_new (geom->dev, geom->start, + block_size * block_count); + } + + if (PED_BE32_TO_CPU (sb->sb_magicnum) == XFS_SB_MAGIC) { + block_size = PED_BE32_TO_CPU (sb->sb_blocksize) / geom->dev->sector_size; + block_count = PED_BE64_TO_CPU (sb->sb_dblocks); + + geom = ped_geometry_new (geom->dev, geom->start, + block_size * block_count); + return geom; + } + return NULL; +} + +static PedFileSystemOps xfs_ops = { + probe: xfs_probe, +}; + +static PedFileSystemType xfs_type = { + next: NULL, + ops: &xfs_ops, + name: "xfs", +}; + +void +ped_file_system_xfs_init () +{ + ped_file_system_type_register (&xfs_type); +} + +void +ped_file_system_xfs_done () +{ + ped_file_system_type_unregister (&xfs_type); +} diff --git a/jni/parted/libparted/fs/xfs/xfs_sb.h b/jni/parted/libparted/fs/xfs/xfs_sb.h new file mode 100755 index 0000000..3484145 --- /dev/null +++ b/jni/parted/libparted/fs/xfs/xfs_sb.h @@ -0,0 +1,489 @@ +/* + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 3 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, + * Mountain View, CA 94043, or: + * + * http://www.sgi.com + * + * For further information regarding this notice, see: + * + * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ + */ +#ifndef __XFS_SB_H__ +#define __XFS_SB_H__ + +/* + * Super block + * Fits into a 512-byte buffer at daddr_t 0 of each allocation group. + * Only the first of these is ever updated except during growfs. + */ + +struct xfs_buf; +struct xfs_mount; + +#define XFS_SB_MAGIC 0x58465342 /* 'XFSB' */ +#define XFS_SB_VERSION_1 1 /* 5.3, 6.0.1, 6.1 */ +#define XFS_SB_VERSION_2 2 /* 6.2 - attributes */ +#define XFS_SB_VERSION_3 3 /* 6.2 - new inode version */ +#define XFS_SB_VERSION_4 4 /* 6.2+ - bitmask version */ +#define XFS_SB_VERSION_NUMBITS 0x000f +#define XFS_SB_VERSION_ALLFBITS 0xfff0 +#define XFS_SB_VERSION_SASHFBITS 0xf000 +#define XFS_SB_VERSION_REALFBITS 0x0ff0 +#define XFS_SB_VERSION_ATTRBIT 0x0010 +#define XFS_SB_VERSION_NLINKBIT 0x0020 +#define XFS_SB_VERSION_QUOTABIT 0x0040 +#define XFS_SB_VERSION_ALIGNBIT 0x0080 +#define XFS_SB_VERSION_DALIGNBIT 0x0100 +#define XFS_SB_VERSION_SHAREDBIT 0x0200 +#define XFS_SB_VERSION_EXTFLGBIT 0x1000 +#define XFS_SB_VERSION_DIRV2BIT 0x2000 +#define XFS_SB_VERSION_OKSASHFBITS \ + (XFS_SB_VERSION_EXTFLGBIT | \ + XFS_SB_VERSION_DIRV2BIT) +#define XFS_SB_VERSION_OKREALFBITS \ + (XFS_SB_VERSION_ATTRBIT | \ + XFS_SB_VERSION_NLINKBIT | \ + XFS_SB_VERSION_QUOTABIT | \ + XFS_SB_VERSION_ALIGNBIT | \ + XFS_SB_VERSION_DALIGNBIT | \ + XFS_SB_VERSION_SHAREDBIT) +#define XFS_SB_VERSION_OKSASHBITS \ + (XFS_SB_VERSION_NUMBITS | \ + XFS_SB_VERSION_REALFBITS | \ + XFS_SB_VERSION_OKSASHFBITS) +#define XFS_SB_VERSION_OKREALBITS \ + (XFS_SB_VERSION_NUMBITS | \ + XFS_SB_VERSION_OKREALFBITS | \ + XFS_SB_VERSION_OKSASHFBITS) +#define XFS_SB_VERSION_MKFS(ia,dia,extflag,dirv2) \ + (((ia) || (dia) || (extflag) || (dirv2)) ? \ + (XFS_SB_VERSION_4 | \ + ((ia) ? XFS_SB_VERSION_ALIGNBIT : 0) | \ + ((dia) ? XFS_SB_VERSION_DALIGNBIT : 0) | \ + ((extflag) ? XFS_SB_VERSION_EXTFLGBIT : 0) | \ + ((dirv2) ? XFS_SB_VERSION_DIRV2BIT : 0)) : \ + XFS_SB_VERSION_1) + +typedef struct xfs_sb +{ + uint32_t sb_magicnum; /* magic number == XFS_SB_MAGIC */ + uint32_t sb_blocksize; /* logical block size, bytes */ + xfs_drfsbno_t sb_dblocks; /* number of data blocks */ + xfs_drfsbno_t sb_rblocks; /* number of realtime blocks */ + xfs_drtbno_t sb_rextents; /* number of realtime extents */ + uuid_t sb_uuid; /* file system unique id */ + xfs_dfsbno_t sb_logstart; /* starting block of log if internal */ + xfs_ino_t sb_rootino; /* root inode number */ + xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */ + xfs_ino_t sb_rsumino; /* summary inode for rt bitmap */ + xfs_agblock_t sb_rextsize; /* realtime extent size, blocks */ + xfs_agblock_t sb_agblocks; /* size of an allocation group */ + xfs_agnumber_t sb_agcount; /* number of allocation groups */ + xfs_extlen_t sb_rbmblocks; /* number of rt bitmap blocks */ + xfs_extlen_t sb_logblocks; /* number of log blocks */ + uint16_t sb_versionnum; /* header version == XFS_SB_VERSION */ + uint16_t sb_sectsize; /* volume sector size, bytes */ + uint16_t sb_inodesize; /* inode size, bytes */ + uint16_t sb_inopblock; /* inodes per block */ + char sb_fname[12]; /* file system name */ + uint8_t sb_blocklog; /* log2 of sb_blocksize */ + uint8_t sb_sectlog; /* log2 of sb_sectsize */ + uint8_t sb_inodelog; /* log2 of sb_inodesize */ + uint8_t sb_inopblog; /* log2 of sb_inopblock */ + uint8_t sb_agblklog; /* log2 of sb_agblocks (rounded up) */ + uint8_t sb_rextslog; /* log2 of sb_rextents */ + uint8_t sb_inprogress; /* mkfs is in progress, don't mount */ + uint8_t sb_imax_pct; /* max % of fs for inode space */ + /* statistics */ + /* + * These fields must remain contiguous. If you really + * want to change their layout, make sure you fix the + * code in xfs_trans_apply_sb_deltas(). + */ + uint64_t sb_icount; /* allocated inodes */ + uint64_t sb_ifree; /* free inodes */ + uint64_t sb_fdblocks; /* free data blocks */ + uint64_t sb_frextents; /* free realtime extents */ + /* + * End contiguous fields. + */ + xfs_ino_t sb_uquotino; /* user quota inode */ + xfs_ino_t sb_gquotino; /* group quota inode */ + uint16_t sb_qflags; /* quota flags */ + uint8_t sb_flags; /* misc. flags */ + uint8_t sb_shared_vn; /* shared version number */ + xfs_extlen_t sb_inoalignmt; /* inode chunk alignment, fsblocks */ + uint32_t sb_unit; /* stripe or raid unit */ + uint32_t sb_width; /* stripe or raid width */ + uint8_t sb_dirblklog; /* log2 of dir block size (fsbs) */ + uint8_t sb_dummy[7]; /* padding */ +} xfs_sb_t; + +/* + * Sequence number values for the fields. + */ +typedef enum { + XFS_SBS_MAGICNUM, XFS_SBS_BLOCKSIZE, XFS_SBS_DBLOCKS, XFS_SBS_RBLOCKS, + XFS_SBS_REXTENTS, XFS_SBS_UUID, XFS_SBS_LOGSTART, XFS_SBS_ROOTINO, + XFS_SBS_RBMINO, XFS_SBS_RSUMINO, XFS_SBS_REXTSIZE, XFS_SBS_AGBLOCKS, + XFS_SBS_AGCOUNT, XFS_SBS_RBMBLOCKS, XFS_SBS_LOGBLOCKS, + XFS_SBS_VERSIONNUM, XFS_SBS_SECTSIZE, XFS_SBS_INODESIZE, + XFS_SBS_INOPBLOCK, XFS_SBS_FNAME, XFS_SBS_BLOCKLOG, + XFS_SBS_SECTLOG, XFS_SBS_INODELOG, XFS_SBS_INOPBLOG, XFS_SBS_AGBLKLOG, + XFS_SBS_REXTSLOG, XFS_SBS_INPROGRESS, XFS_SBS_IMAX_PCT, XFS_SBS_ICOUNT, + XFS_SBS_IFREE, XFS_SBS_FDBLOCKS, XFS_SBS_FREXTENTS, XFS_SBS_UQUOTINO, + XFS_SBS_GQUOTINO, XFS_SBS_QFLAGS, XFS_SBS_FLAGS, XFS_SBS_SHARED_VN, + XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG, + XFS_SBS_DUMMY, + XFS_SBS_FIELDCOUNT +} xfs_sb_field_t; + +/* + * Mask values, defined based on the xfs_sb_field_t values. + * Only define the ones we're using. + */ +#define XFS_SB_MVAL(x) (1LL << XFS_SBS_ ## x) +#define XFS_SB_UUID XFS_SB_MVAL(UUID) +#define XFS_SB_FNAME XFS_SB_MVAL(FNAME) +#define XFS_SB_ROOTINO XFS_SB_MVAL(ROOTINO) +#define XFS_SB_RBMINO XFS_SB_MVAL(RBMINO) +#define XFS_SB_RSUMINO XFS_SB_MVAL(RSUMINO) +#define XFS_SB_VERSIONNUM XFS_SB_MVAL(VERSIONNUM) +#define XFS_SB_UQUOTINO XFS_SB_MVAL(UQUOTINO) +#define XFS_SB_GQUOTINO XFS_SB_MVAL(GQUOTINO) +#define XFS_SB_QFLAGS XFS_SB_MVAL(QFLAGS) +#define XFS_SB_SHARED_VN XFS_SB_MVAL(SHARED_VN) +#define XFS_SB_UNIT XFS_SB_MVAL(UNIT) +#define XFS_SB_WIDTH XFS_SB_MVAL(WIDTH) +#define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT) +#define XFS_SB_ALL_BITS ((1LL << XFS_SB_NUM_BITS) - 1) +#define XFS_SB_MOD_BITS \ + (XFS_SB_UUID | XFS_SB_ROOTINO | XFS_SB_RBMINO | XFS_SB_RSUMINO | \ + XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | \ + XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH) + +/* + * Misc. Flags - warning - these will be cleared by xfs_repair unless + * a feature bit is set when the flag is used. + */ +#define XFS_SBF_NOFLAGS 0x00 /* no flags set */ +#define XFS_SBF_READONLY 0x01 /* only read-only mounts allowed */ + +/* + * define max. shared version we can interoperate with + */ +#define XFS_SB_MAX_SHARED_VN 0 + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_NUM) +int xfs_sb_version_num(xfs_sb_t *sbp); +#define XFS_SB_VERSION_NUM(sbp) xfs_sb_version_num(sbp) +#else +#define XFS_SB_VERSION_NUM(sbp) ((sbp)->sb_versionnum & XFS_SB_VERSION_NUMBITS) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_GOOD_VERSION) +int xfs_sb_good_version(xfs_sb_t *sbp); +#define XFS_SB_GOOD_VERSION(sbp) xfs_sb_good_version(sbp) +#else +#define XFS_SB_GOOD_VERSION_INT(sbp) \ + ((((sbp)->sb_versionnum >= XFS_SB_VERSION_1) && \ + ((sbp)->sb_versionnum <= XFS_SB_VERSION_3)) || \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + !((sbp)->sb_versionnum & ~XFS_SB_VERSION_OKREALBITS) +#ifdef __KERNEL__ +#define XFS_SB_GOOD_VERSION(sbp) \ + (XFS_SB_GOOD_VERSION_INT(sbp) && \ + (sbp)->sb_shared_vn <= XFS_SB_MAX_SHARED_VN) )) +#else +/* + * extra 2 paren's here (( to unconfuse paren-matching editors + * like vi because XFS_SB_GOOD_VERSION_INT is a partial expression + * and the two XFS_SB_GOOD_VERSION's each 2 more close paren's to + * complete the expression. + */ +#define XFS_SB_GOOD_VERSION(sbp) \ + (XFS_SB_GOOD_VERSION_INT(sbp) && \ + (!((sbp)->sb_versionnum & XFS_SB_VERSION_SHAREDBIT) || \ + (sbp)->sb_shared_vn <= XFS_SB_MAX_SHARED_VN)) )) +#endif /* __KERNEL__ */ +#endif + +#define XFS_SB_GOOD_SASH_VERSION(sbp) \ + ((((sbp)->sb_versionnum >= XFS_SB_VERSION_1) && \ + ((sbp)->sb_versionnum <= XFS_SB_VERSION_3)) || \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + !((sbp)->sb_versionnum & ~XFS_SB_VERSION_OKSASHBITS))) + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_TONEW) +unsigned xfs_sb_version_tonew(unsigned v); +#define XFS_SB_VERSION_TONEW(v) xfs_sb_version_tonew(v) +#else +#define XFS_SB_VERSION_TONEW(v) \ + ((((v) == XFS_SB_VERSION_1) ? \ + 0 : \ + (((v) == XFS_SB_VERSION_2) ? \ + XFS_SB_VERSION_ATTRBIT : \ + (XFS_SB_VERSION_ATTRBIT | XFS_SB_VERSION_NLINKBIT))) | \ + XFS_SB_VERSION_4) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_TOOLD) +unsigned xfs_sb_version_toold(unsigned v); +#define XFS_SB_VERSION_TOOLD(v) xfs_sb_version_toold(v) +#else +#define XFS_SB_VERSION_TOOLD(v) \ + (((v) & (XFS_SB_VERSION_QUOTABIT | XFS_SB_VERSION_ALIGNBIT)) ? \ + 0 : \ + (((v) & XFS_SB_VERSION_NLINKBIT) ? \ + XFS_SB_VERSION_3 : \ + (((v) & XFS_SB_VERSION_ATTRBIT) ? \ + XFS_SB_VERSION_2 : \ + XFS_SB_VERSION_1))) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASATTR) +int xfs_sb_version_hasattr(xfs_sb_t *sbp); +#define XFS_SB_VERSION_HASATTR(sbp) xfs_sb_version_hasattr(sbp) +#else +#define XFS_SB_VERSION_HASATTR(sbp) \ + (((sbp)->sb_versionnum == XFS_SB_VERSION_2) || \ + ((sbp)->sb_versionnum == XFS_SB_VERSION_3) || \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_ATTRBIT))) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDATTR) +void xfs_sb_version_addattr(xfs_sb_t *sbp); +#define XFS_SB_VERSION_ADDATTR(sbp) xfs_sb_version_addattr(sbp) +#else +#define XFS_SB_VERSION_ADDATTR(sbp) \ + ((sbp)->sb_versionnum = \ + (((sbp)->sb_versionnum == XFS_SB_VERSION_1) ? \ + XFS_SB_VERSION_2 : \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) ? \ + ((sbp)->sb_versionnum | XFS_SB_VERSION_ATTRBIT) : \ + (XFS_SB_VERSION_4 | XFS_SB_VERSION_ATTRBIT)))) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASNLINK) +int xfs_sb_version_hasnlink(xfs_sb_t *sbp); +#define XFS_SB_VERSION_HASNLINK(sbp) xfs_sb_version_hasnlink(sbp) +#else +#define XFS_SB_VERSION_HASNLINK(sbp) \ + (((sbp)->sb_versionnum == XFS_SB_VERSION_3) || \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_NLINKBIT))) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDNLINK) +void xfs_sb_version_addnlink(xfs_sb_t *sbp); +#define XFS_SB_VERSION_ADDNLINK(sbp) xfs_sb_version_addnlink(sbp) +#else +#define XFS_SB_VERSION_ADDNLINK(sbp) \ + ((sbp)->sb_versionnum = \ + ((sbp)->sb_versionnum <= XFS_SB_VERSION_2 ? \ + XFS_SB_VERSION_3 : \ + ((sbp)->sb_versionnum | XFS_SB_VERSION_NLINKBIT))) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASQUOTA) +int xfs_sb_version_hasquota(xfs_sb_t *sbp); +#define XFS_SB_VERSION_HASQUOTA(sbp) xfs_sb_version_hasquota(sbp) +#else +#define XFS_SB_VERSION_HASQUOTA(sbp) \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_QUOTABIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDQUOTA) +void xfs_sb_version_addquota(xfs_sb_t *sbp); +#define XFS_SB_VERSION_ADDQUOTA(sbp) xfs_sb_version_addquota(sbp) +#else +#define XFS_SB_VERSION_ADDQUOTA(sbp) \ + ((sbp)->sb_versionnum = \ + (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 ? \ + ((sbp)->sb_versionnum | XFS_SB_VERSION_QUOTABIT) : \ + (XFS_SB_VERSION_TONEW((sbp)->sb_versionnum) | \ + XFS_SB_VERSION_QUOTABIT))) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASALIGN) +int xfs_sb_version_hasalign(xfs_sb_t *sbp); +#define XFS_SB_VERSION_HASALIGN(sbp) xfs_sb_version_hasalign(sbp) +#else +#define XFS_SB_VERSION_HASALIGN(sbp) \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_ALIGNBIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_SUBALIGN) +void xfs_sb_version_subalign(xfs_sb_t *sbp); +#define XFS_SB_VERSION_SUBALIGN(sbp) xfs_sb_version_subalign(sbp) +#else +#define XFS_SB_VERSION_SUBALIGN(sbp) \ + ((sbp)->sb_versionnum = \ + XFS_SB_VERSION_TOOLD((sbp)->sb_versionnum & ~XFS_SB_VERSION_ALIGNBIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASDALIGN) +int xfs_sb_version_hasdalign(xfs_sb_t *sbp); +#define XFS_SB_VERSION_HASDALIGN(sbp) xfs_sb_version_hasdalign(sbp) +#else +#define XFS_SB_VERSION_HASDALIGN(sbp) \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_DALIGNBIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDDALIGN) +int xfs_sb_version_adddalign(xfs_sb_t *sbp); +#define XFS_SB_VERSION_ADDDALIGN(sbp) xfs_sb_version_adddalign(sbp) +#else +#define XFS_SB_VERSION_ADDDALIGN(sbp) \ + ((sbp)->sb_versionnum = \ + ((sbp)->sb_versionnum | XFS_SB_VERSION_DALIGNBIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASSHARED) +int xfs_sb_version_hasshared(xfs_sb_t *sbp); +#define XFS_SB_VERSION_HASSHARED(sbp) xfs_sb_version_hasshared(sbp) +#else +#define XFS_SB_VERSION_HASSHARED(sbp) \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_SHAREDBIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDSHARED) +int xfs_sb_version_addshared(xfs_sb_t *sbp); +#define XFS_SB_VERSION_ADDSHARED(sbp) xfs_sb_version_addshared(sbp) +#else +#define XFS_SB_VERSION_ADDSHARED(sbp) \ + ((sbp)->sb_versionnum = \ + ((sbp)->sb_versionnum | XFS_SB_VERSION_SHAREDBIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_SUBSHARED) +int xfs_sb_version_subshared(xfs_sb_t *sbp); +#define XFS_SB_VERSION_SUBSHARED(sbp) xfs_sb_version_subshared(sbp) +#else +#define XFS_SB_VERSION_SUBSHARED(sbp) \ + ((sbp)->sb_versionnum = \ + ((sbp)->sb_versionnum & ~XFS_SB_VERSION_SHAREDBIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASDIRV2) +int xfs_sb_version_hasdirv2(xfs_sb_t *sbp); +#define XFS_SB_VERSION_HASDIRV2(sbp) xfs_sb_version_hasdirv2(sbp) +#else +#define XFS_SB_VERSION_HASDIRV2(sbp) \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_DIRV2BIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASEXTFLGBIT) +int xfs_sb_version_hasextflgbit(xfs_sb_t *sbp); +#define XFS_SB_VERSION_HASEXTFLGBIT(sbp) xfs_sb_version_hasextflgbit(sbp) +#else +#define XFS_SB_VERSION_HASEXTFLGBIT(sbp) \ + ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_EXTFLGBIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDEXTFLGBIT) +int xfs_sb_version_addextflgbit(xfs_sb_t *sbp); +#define XFS_SB_VERSION_ADDEXTFLGBIT(sbp) xfs_sb_version_addextflgbit(sbp) +#else +#define XFS_SB_VERSION_ADDEXTFLGBIT(sbp) \ + ((sbp)->sb_versionnum = \ + ((sbp)->sb_versionnum | XFS_SB_VERSION_EXTFLGBIT)) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_SUBEXTFLGBIT) +int xfs_sb_version_subextflgbit(xfs_sb_t *sbp); +#define XFS_SB_VERSION_SUBEXTFLGBIT(sbp) xfs_sb_version_subextflgbit(sbp) +#else +#define XFS_SB_VERSION_SUBEXTFLGBIT(sbp) \ + ((sbp)->sb_versionnum = \ + ((sbp)->sb_versionnum & ~XFS_SB_VERSION_EXTFLGBIT)) +#endif + +/* + * end of superblock version macros + */ + +#define XFS_SB_DADDR ((xfs_daddr_t)0) /* daddr in file system/ag */ +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_BLOCK) +xfs_agblock_t xfs_sb_block(struct xfs_mount *mp); +#define XFS_SB_BLOCK(mp) xfs_sb_block(mp) +#else +#define XFS_SB_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_SB_DADDR) +#endif + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_HDR_BLOCK) +xfs_agblock_t xfs_hdr_block(struct xfs_mount *mp, xfs_daddr_t d); +#define XFS_HDR_BLOCK(mp,d) xfs_hdr_block(mp,d) +#else +#define XFS_HDR_BLOCK(mp,d) ((xfs_agblock_t)(XFS_BB_TO_FSBT(mp,d))) +#endif +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DADDR_TO_FSB) +xfs_fsblock_t xfs_daddr_to_fsb(struct xfs_mount *mp, xfs_daddr_t d); +#define XFS_DADDR_TO_FSB(mp,d) xfs_daddr_to_fsb(mp,d) +#else +#define XFS_DADDR_TO_FSB(mp,d) \ + XFS_AGB_TO_FSB(mp, XFS_DADDR_TO_AGNO(mp,d), XFS_DADDR_TO_AGBNO(mp,d)) +#endif +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_FSB_TO_DADDR) +xfs_daddr_t xfs_fsb_to_daddr(struct xfs_mount *mp, xfs_fsblock_t fsbno); +#define XFS_FSB_TO_DADDR(mp,fsbno) xfs_fsb_to_daddr(mp,fsbno) +#else +#define XFS_FSB_TO_DADDR(mp,fsbno) \ + XFS_AGB_TO_DADDR(mp, XFS_FSB_TO_AGNO(mp,fsbno), \ + XFS_FSB_TO_AGBNO(mp,fsbno)) +#endif + +/* + * File system block to basic block conversions. + */ +#define XFS_FSB_TO_BB(mp,fsbno) ((fsbno) << (mp)->m_blkbb_log) +#define XFS_BB_TO_FSB(mp,bb) \ + (((bb) + (XFS_FSB_TO_BB(mp,1) - 1)) >> (mp)->m_blkbb_log) +#define XFS_BB_TO_FSBT(mp,bb) ((bb) >> (mp)->m_blkbb_log) +#define XFS_BB_FSB_OFFSET(mp,bb) ((bb) & ((mp)->m_bsize - 1)) + +/* + * File system block to byte conversions. + */ +#define XFS_FSB_TO_B(mp,fsbno) ((xfs_fsize_t)(fsbno) << \ + (mp)->m_sb.sb_blocklog) +#define XFS_B_TO_FSB(mp,b) \ + ((((uint64_t)(b)) + (mp)->m_blockmask) >> (mp)->m_sb.sb_blocklog) +#define XFS_B_TO_FSBT(mp,b) (((uint64_t)(b)) >> (mp)->m_sb.sb_blocklog) +#define XFS_B_FSB_OFFSET(mp,b) ((b) & (mp)->m_blockmask) + +#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_BUF_TO_SBP) +xfs_sb_t *xfs_buf_to_sbp(struct xfs_buf *bp); +#define XFS_BUF_TO_SBP(bp) xfs_buf_to_sbp(bp) +#else +#define XFS_BUF_TO_SBP(bp) ((xfs_sb_t *)XFS_BUF_PTR(bp)) +#endif + +#endif /* __XFS_SB_H__ */ diff --git a/jni/parted/libparted/fs/xfs/xfs_types.h b/jni/parted/libparted/fs/xfs/xfs_types.h new file mode 100755 index 0000000..89a0d61 --- /dev/null +++ b/jni/parted/libparted/fs/xfs/xfs_types.h @@ -0,0 +1,302 @@ +/* + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 3 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, + * Mountain View, CA 94043, or: + * + * http://www.sgi.com + * + * For further information regarding this notice, see: + * + * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ + */ +#ifndef __XFS_TYPES_H__ +#define __XFS_TYPES_H__ + +/* + * Some types are conditional based on the selected configuration. + * Set XFS_BIG_FILES=1 or 0 and XFS_BIG_FILESYSTEMS=1 or 0 depending + * on the desired configuration. + * XFS_BIG_FILES needs pgno_t to be 64 bits (64-bit kernels). + * XFS_BIG_FILESYSTEMS needs daddr_t to be 64 bits (N32 and 64-bit kernels). + * + * Expect these to be set from klocaldefs, or from the machine-type + * defs files for the normal case. + */ + +#define XFS_BIG_FILES 1 +#define XFS_BIG_FILESYSTEMS 1 + +typedef uint32_t xfs_agblock_t; /* blockno in alloc. group */ +typedef uint32_t xfs_extlen_t; /* extent length in blocks */ +typedef uint32_t xfs_agnumber_t; /* allocation group number */ +typedef int32_t xfs_extnum_t; /* # of extents in a file */ +typedef int16_t xfs_aextnum_t; /* # extents in an attribute fork */ +typedef int64_t xfs_fsize_t; /* bytes in a file */ +typedef uint64_t xfs_ufsize_t; /* unsigned bytes in a file */ + +typedef int32_t xfs_suminfo_t; /* type of bitmap summary info */ +typedef int32_t xfs_rtword_t; /* word type for bitmap manipulations */ + +typedef int64_t xfs_lsn_t; /* log sequence number */ +typedef int32_t xfs_tid_t; /* transaction identifier */ + +typedef uint32_t xfs_dablk_t; /* dir/attr block number (in file) */ +typedef uint32_t xfs_dahash_t; /* dir/attr hash value */ + +typedef uint16_t xfs_prid_t; /* prid_t truncated to 16bits in XFS */ + +/* + * These types are 64 bits on disk but are either 32 or 64 bits in memory. + * Disk based types: + */ +typedef uint64_t xfs_dfsbno_t; /* blockno in filesystem (agno|agbno) */ +typedef uint64_t xfs_drfsbno_t; /* blockno in filesystem (raw) */ +typedef uint64_t xfs_drtbno_t; /* extent (block) in realtime area */ +typedef uint64_t xfs_dfiloff_t; /* block number in a file */ +typedef uint64_t xfs_dfilblks_t; /* number of blocks in a file */ + +/* + * Memory based types are conditional. + */ +#if XFS_BIG_FILESYSTEMS +typedef uint64_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */ +typedef uint64_t xfs_rfsblock_t; /* blockno in filesystem (raw) */ +typedef uint64_t xfs_rtblock_t; /* extent (block) in realtime area */ +typedef int64_t xfs_srtblock_t; /* signed version of xfs_rtblock_t */ +#else +typedef uint32_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */ +typedef uint32_t xfs_rfsblock_t; /* blockno in filesystem (raw) */ +typedef uint32_t xfs_rtblock_t; /* extent (block) in realtime area */ +typedef int32_t xfs_srtblock_t; /* signed version of xfs_rtblock_t */ +#endif +#if XFS_BIG_FILES +typedef uint64_t xfs_fileoff_t; /* block number in a file */ +typedef int64_t xfs_sfiloff_t; /* signed block number in a file */ +typedef uint64_t xfs_filblks_t; /* number of blocks in a file */ +#else +typedef uint32_t xfs_fileoff_t; /* block number in a file */ +typedef int32_t xfs_sfiloff_t; /* signed block number in a file */ +typedef uint32_t xfs_filblks_t; /* number of blocks in a file */ +#endif + +typedef uint8_t xfs_arch_t; /* architecutre of an xfs fs */ + +/* + * Null values for the types. + */ +#define NULLDFSBNO ((xfs_dfsbno_t)-1) +#define NULLDRFSBNO ((xfs_drfsbno_t)-1) +#define NULLDRTBNO ((xfs_drtbno_t)-1) +#define NULLDFILOFF ((xfs_dfiloff_t)-1) + +#define NULLFSBLOCK ((xfs_fsblock_t)-1) +#define NULLRFSBLOCK ((xfs_rfsblock_t)-1) +#define NULLRTBLOCK ((xfs_rtblock_t)-1) +#define NULLFILEOFF ((xfs_fileoff_t)-1) + +#define NULLAGBLOCK ((xfs_agblock_t)-1) +#define NULLAGNUMBER ((xfs_agnumber_t)-1) +#define NULLEXTNUM ((xfs_extnum_t)-1) + +#define NULLCOMMITLSN ((xfs_lsn_t)-1) + +/* + * Max values for extlen, extnum, aextnum. + */ +#define MAXEXTLEN ((xfs_extlen_t)0x001fffff) /* 21 bits */ +#define MAXEXTNUM ((xfs_extnum_t)0x7fffffff) /* signed int */ +#define MAXAEXTNUM ((xfs_aextnum_t)0x7fff) /* signed short */ + +/* + * MAXNAMELEN is the length (including the terminating null) of + * the longest permissible file (component) name. + */ +#define MAXNAMELEN 256 + +typedef enum { + XFS_LOOKUP_EQi, XFS_LOOKUP_LEi, XFS_LOOKUP_GEi +} xfs_lookup_t; + +typedef enum { + XFS_BTNUM_BNOi, XFS_BTNUM_CNTi, XFS_BTNUM_BMAPi, XFS_BTNUM_INOi, + XFS_BTNUM_MAX +} xfs_btnum_t; + + +#ifdef CONFIG_PROC_FS +/* + * XFS global statistics + */ +struct xfsstats { +# define XFSSTAT_END_EXTENT_ALLOC 4 + uint32_t xs_allocx; + uint32_t xs_allocb; + uint32_t xs_freex; + uint32_t xs_freeb; +# define XFSSTAT_END_ALLOC_BTREE (XFSSTAT_END_EXTENT_ALLOC+4) + uint32_t xs_abt_lookup; + uint32_t xs_abt_compare; + uint32_t xs_abt_insrec; + uint32_t xs_abt_delrec; +# define XFSSTAT_END_BLOCK_MAPPING (XFSSTAT_END_ALLOC_BTREE+7) + uint32_t xs_blk_mapr; + uint32_t xs_blk_mapw; + uint32_t xs_blk_unmap; + uint32_t xs_add_exlist; + uint32_t xs_del_exlist; + uint32_t xs_look_exlist; + uint32_t xs_cmp_exlist; +# define XFSSTAT_END_BLOCK_MAP_BTREE (XFSSTAT_END_BLOCK_MAPPING+4) + uint32_t xs_bmbt_lookup; + uint32_t xs_bmbt_compare; + uint32_t xs_bmbt_insrec; + uint32_t xs_bmbt_delrec; +# define XFSSTAT_END_DIRECTORY_OPS (XFSSTAT_END_BLOCK_MAP_BTREE+4) + uint32_t xs_dir_lookup; + uint32_t xs_dir_create; + uint32_t xs_dir_remove; + uint32_t xs_dir_getdents; +# define XFSSTAT_END_TRANSACTIONS (XFSSTAT_END_DIRECTORY_OPS+3) + uint32_t xs_trans_sync; + uint32_t xs_trans_async; + uint32_t xs_trans_empty; +# define XFSSTAT_END_INODE_OPS (XFSSTAT_END_TRANSACTIONS+7) + uint32_t xs_ig_attempts; + uint32_t xs_ig_found; + uint32_t xs_ig_frecycle; + uint32_t xs_ig_missed; + uint32_t xs_ig_dup; + uint32_t xs_ig_reclaims; + uint32_t xs_ig_attrchg; +# define XFSSTAT_END_LOG_OPS (XFSSTAT_END_INODE_OPS+5) + uint32_t xs_log_writes; + uint32_t xs_log_blocks; + uint32_t xs_log_noiclogs; + uint32_t xs_log_force; + uint32_t xs_log_force_sleep; +# define XFSSTAT_END_TAIL_PUSHING (XFSSTAT_END_LOG_OPS+10) + uint32_t xs_try_logspace; + uint32_t xs_sleep_logspace; + uint32_t xs_push_ail; + uint32_t xs_push_ail_success; + uint32_t xs_push_ail_pushbuf; + uint32_t xs_push_ail_pinned; + uint32_t xs_push_ail_locked; + uint32_t xs_push_ail_flushing; + uint32_t xs_push_ail_restarts; + uint32_t xs_push_ail_flush; +# define XFSSTAT_END_WRITE_CONVERT (XFSSTAT_END_TAIL_PUSHING+2) + uint32_t xs_xstrat_quick; + uint32_t xs_xstrat_split; +# define XFSSTAT_END_READ_WRITE_OPS (XFSSTAT_END_WRITE_CONVERT+2) + uint32_t xs_write_calls; + uint32_t xs_read_calls; +# define XFSSTAT_END_ATTRIBUTE_OPS (XFSSTAT_END_READ_WRITE_OPS+4) + uint32_t xs_attr_get; + uint32_t xs_attr_set; + uint32_t xs_attr_remove; + uint32_t xs_attr_list; +# define XFSSTAT_END_QUOTA_OPS (XFSSTAT_END_ATTRIBUTE_OPS+8) + uint32_t xs_qm_dqreclaims; + uint32_t xs_qm_dqreclaim_misses; + uint32_t xs_qm_dquot_dups; + uint32_t xs_qm_dqcachemisses; + uint32_t xs_qm_dqcachehits; + uint32_t xs_qm_dqwants; + uint32_t xs_qm_dqshake_reclaims; + uint32_t xs_qm_dqinact_reclaims; +# define XFSSTAT_END_INODE_CLUSTER (XFSSTAT_END_QUOTA_OPS+3) + uint32_t xs_iflush_count; + uint32_t xs_icluster_flushcnt; + uint32_t xs_icluster_flushinode; +# define XFSSTAT_END_VNODE_OPS (XFSSTAT_END_INODE_CLUSTER+8) + uint32_t vn_active; /* # vnodes not on free lists */ + uint32_t vn_alloc; /* # times vn_alloc called */ + uint32_t vn_get; /* # times vn_get called */ + uint32_t vn_hold; /* # times vn_hold called */ + uint32_t vn_rele; /* # times vn_rele called */ + uint32_t vn_reclaim; /* # times vn_reclaim called */ + uint32_t vn_remove; /* # times vn_remove called */ + uint32_t vn_free; /* # times vn_free called */ + struct xfsstats_xpc { + uint64_t xs_xstrat_bytes; + uint64_t xs_write_bytes; + uint64_t xs_read_bytes; + } xpc; +} xfsstats; + +# define XFS_STATS_INC(count) ( xfsstats.##count ++ ) +# define XFS_STATS_DEC(count) ( xfsstats.##count -- ) +# define XFS_STATS_ADD(count, inc) ( xfsstats.##count += (inc) ) +# define XFS_STATS64_INC(count) ( xfsstats.xpc.##count ++ ) +# define XFS_STATS64_ADD(count, inc) ( xfsstats.xpc.##count += (inc) ) +#else /* !CONFIG_PROC_FS */ +# define XFS_STATS_INC(count) +# define XFS_STATS_DEC(count) +# define XFS_STATS_ADD(count, inc) +# define XFS_STATS64_INC(count) +# define XFS_STATS64_ADD(count, inc) +#endif /* !CONFIG_PROC_FS */ + + +#ifdef __KERNEL__ + +/* juggle IRIX device numbers - still used in ondisk structures */ + +#define IRIX_DEV_BITSMAJOR 14 +#define IRIX_DEV_BITSMINOR 18 +#define IRIX_DEV_MAXMAJ 0x1ff +#define IRIX_DEV_MAXMIN 0x3ffff +#define IRIX_DEV_MAJOR(dev) ((int)(((unsigned)(dev)>>IRIX_DEV_BITSMINOR) \ + & IRIX_DEV_MAXMAJ)) +#define IRIX_DEV_MINOR(dev) ((int)((dev)&IRIX_DEV_MAXMIN)) +#define IRIX_MKDEV(major,minor) ((xfs_dev_t)(((major)<. + + Contributor: Matt Wilson +*/ + +#include + +#include +#include +#include +#include +#include "pt-tools.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#define AIX_LABEL_MAGIC (0xc9c2d4c1UL) +#define MAX_TOTAL_PART 16 + +static PedDiskType aix_disk_type; + +static int +aix_probe (const PedDevice *dev) +{ + PED_ASSERT (dev != NULL); + + void *label; + if (!ptt_read_sector (dev, 0, &label)) + return 0; + bool found = PED_BE32_TO_CPU(*(uint32_t *)label) == AIX_LABEL_MAGIC; + free (label); + return found; +} + +static PedDisk* +aix_alloc (const PedDevice* dev) +{ + PedDisk* disk; + + disk = _ped_disk_alloc (dev, &aix_disk_type); + if (!disk) + return NULL; + + return disk; +} + +static PedDisk* +aix_duplicate (const PedDisk* disk) +{ + PedDisk* new_disk; + + new_disk = ped_disk_new_fresh (disk->dev, &aix_disk_type); + if (!new_disk) + return NULL; + + return new_disk; +} + +static void +aix_free (PedDisk *disk) +{ + _ped_disk_free (disk); +} + +static int +aix_read (PedDisk* disk) +{ + ped_disk_delete_all (disk); + ped_exception_throw (PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Support for reading AIX disk labels is " + "is not implemented yet.")); + return 0; +} + +#ifndef DISCOVER_ONLY +static int +aix_write (const PedDisk* disk) +{ + ped_exception_throw (PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Support for writing AIX disk labels is " + "is not implemented yet.")); + return 0; +} +#endif /* !DISCOVER_ONLY */ + +static PedPartition* +aix_partition_new (const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + ped_exception_throw (PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Support for adding partitions to AIX disk " + "labels is not implemented yet.")); + return NULL; +} + +static PedPartition* +aix_partition_duplicate (const PedPartition* part) +{ + ped_exception_throw (PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Support for duplicating partitions in AIX " + "disk labels is not implemented yet.")); + return NULL; +} + +static void +aix_partition_destroy (PedPartition* part) +{ + PED_ASSERT (part != NULL); + + _ped_partition_free (part); +} + +static int +aix_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type) +{ + ped_exception_throw (PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Support for setting system type of partitions " + "in AIX disk labels is not implemented yet.")); + return 0; +} + +static int +aix_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + ped_exception_throw (PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Support for setting flags " + "in AIX disk labels is not implemented yet.")); + return 0; +} + +static int _GL_ATTRIBUTE_CONST +aix_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + return 0; +} + + +static int +aix_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + return 0; +} + + +static int +aix_get_max_primary_partition_count (const PedDisk* disk) +{ + return 4; +} + +static bool +aix_get_max_supported_partition_count (const PedDisk* disk, int *max_n) +{ + *max_n = MAX_TOTAL_PART; + return true; +} + +static int _GL_ATTRIBUTE_PURE +aix_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + PED_ASSERT (part != NULL); + + return 1; +} + +static int _GL_ATTRIBUTE_PURE +aix_partition_enumerate (PedPartition* part) +{ + return 1; +} + +static int _GL_ATTRIBUTE_PURE +aix_alloc_metadata (PedDisk* disk) +{ + return 1; +} + +#include "pt-common.h" +PT_define_limit_functions (aix) + +static PedDiskOps aix_disk_ops = { + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (aix_write), + + partition_set_name: NULL, + partition_get_name: NULL, + + PT_op_function_initializers (aix) +}; + +static PedDiskType aix_disk_type = { + next: NULL, + name: "aix", + ops: &aix_disk_ops, + features: 0 +}; + +void +ped_disk_aix_init () +{ + ped_disk_type_register (&aix_disk_type); +} + +void +ped_disk_aix_done () +{ + ped_disk_type_unregister (&aix_disk_type); +} diff --git a/jni/parted/libparted/labels/atari.c b/jni/parted/libparted/labels/atari.c new file mode 100755 index 0000000..8ab3720 --- /dev/null +++ b/jni/parted/libparted/labels/atari.c @@ -0,0 +1,1975 @@ +/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + + libparted - a library for manipulating disk partitions + atari.c - libparted module to manipulate Atari partition tables. + Copyright (C) 2000-2001, 2004, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . + + Contributor: Guillaume Knispel + John Paul Adrian Glaubitz +*/ + +/* + Documentation : + README file of atari-fdisk + atari-fdisk source code + Linux atari partitions parser source code + ( fs/partitions/atari.[ch] ) +*/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "pt-tools.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + + +/********************** Atari data and structure stuff **********************/ + +#define BOOTABLE_CKSUM 0x1234 +#define NONBOOT_CKSUM 0x4321 + +#define GEM_MAX ((32*1024*1024)/PED_SECTOR_SIZE_DEFAULT) + +#define PART_FLAG_USED 0x01 +#define PART_FLAG_BOOT_GEM 0x80 /* GEMDOS */ +#define PART_FLAG_BOOT_ASV 0x40 /* Atari System V */ +#define PART_FLAG_BOOT_BSD 0x20 /* Net(?)BSD */ +#define PART_FLAG_BOOT_LNX 0x10 /* Linux */ +#define PART_FLAG_BOOT_UNK 0x08 /* unknown / other */ + +#define N_AHDI 4 +#define N_ICD 8 + +#define MAXIMUM_PARTS 64 + +/* what we put instead of id, start and size in empty */ +/* partition tables, to be able to detect it */ +#define SIGNATURE_EMPTY_TABLE "PARTEDATARI" +#define SIGNATURE_EMPTY_SIZE 11 + +/* to be compared to the last two bytes of 1st sector (Big Endian) */ +static const uint16_t atr_forbidden_sign[] = { + 0x55AA, + 0 +}; + +static const char *atr_known_icd_pid[] = { + "BGM", "GEM", "LNX", "SWP", "RAW", NULL +}; + +/* static const char *atr_known_pid[] = { */ +/* "BGM", "GEM", "LNX", "MAC", "MIX", "MNX", "RAW", "SWP", "UNX", */ +/* "F32", "SV4", NULL */ +/* }; */ + +struct _AtariPartID2BootFlag { + const char pid[4]; + uint8_t flag; +}; +typedef struct _AtariPartID2BootFlag AtariPartID2BootFlag; + +static AtariPartID2BootFlag atr_pid2bf[] = { + { "GEM", PART_FLAG_BOOT_GEM }, + { "BGM", PART_FLAG_BOOT_GEM }, + { "UNX", PART_FLAG_BOOT_ASV }, + { "LNX", PART_FLAG_BOOT_LNX }, + { "", PART_FLAG_BOOT_UNK }, +}; + +struct _AtariFS2PartId { + const char* fs; + const char pid[4]; + PedSector max_sectors; +}; +typedef struct _AtariFS2PartId AtariFS2PartId; + +static AtariFS2PartId atr_fs2pid[] = { +/* Other ID are available : MIX MNX <= minix + UNX <= Atari SysV Unix + SV4 <= Univ System 4 */ + { "ext2", "LNX", INT32_MAX }, + { "ext3", "LNX", INT32_MAX }, + { "fat16", "GEM", GEM_MAX }, /* small partitions */ + { "fat16", "BGM", INT32_MAX }, /* big partitions */ + { "fat32", "F32", INT32_MAX }, + { "hfs", "MAC", INT32_MAX }, + { "hfs+", "MAC", INT32_MAX }, + { "hfsx", "MAC", INT32_MAX }, + { "jfs", "LNX", INT32_MAX }, + { "linux-swap", "SWP", INT32_MAX }, + { "reiserfs", "LNX", INT32_MAX }, + { "hp-ufs", "LNX", INT32_MAX }, + { "sun-ufs", "LNX", INT32_MAX }, + { "xfs", "LNX", INT32_MAX }, + { "ntfs", "RAW", INT32_MAX }, + { "", "RAW", INT32_MAX }, /* default entry */ + { NULL, "" , 0 } /* end of list */ +}; + +struct __attribute__ ((packed)) _AtariRawPartition { + uint8_t flag; /* bit 0: active; bit 7: bootable */ + union { + uint8_t empty[11]; /* Empty table */ + struct __attribute__ ((packed)) { + uint8_t id[3]; /* "GEM", "BGM", "XGM", ... */ + uint32_t start; /* start of partition */ + uint32_t size; /* length of partition */ + }; + }; +}; +typedef struct _AtariRawPartition AtariRawPartition; + +struct __attribute__ ((packed,aligned(2))) _AtariRawTable { + uint8_t boot_code[0x156]; /* room for boot code */ + AtariRawPartition icd_part[N_ICD]; /* info for ICD-partitions 5..12 */ + uint8_t unused[0xc]; + uint32_t hd_size; /* size of disk in blocks */ + AtariRawPartition part[N_AHDI]; /* the four primary partitions */ + uint32_t bsl_start; /* start of bad sector list */ + uint32_t bsl_count; /* length of bad sector list */ + uint16_t checksum; /* checksum for bootable disks */ +}; +typedef struct _AtariRawTable AtariRawTable; + +typedef enum { + FMT_AHDI = 0, /* AHDI v1 compatible, no ICD and no XGM */ + FMT_XGM = 1, /* AHDI v3 with XGM / this disable ICD */ + FMT_ICD = 2 /* ICD detected / requested because more than 4 prim */ + /* no XGM allowed */ +} AtrFmt; + +struct _AtariDisk { + AtrFmt format; + int has_been_read; /* actually means has been read or written... */ + uint32_t bsl_start; /* first sector of the Bad Sectors List */ + uint32_t bsl_count; /* number of sectors of the BSL */ + uint8_t HDX_comp; /* if set to one, atari_write will initialize */ + /* the bsl area */ +}; +typedef struct _AtariDisk AtariDisk; + +struct _AtariPart { + char part_id[4]; /* ASCIIZ */ + char icd_id[4]; /* Linux only parse a limited set of ID */ + /* in ICD (why???), so everything else */ + /* is translated to RAW. */ + uint8_t flag; /* without bit 0 (entry used) */ +}; +typedef struct _AtariPart AtariPart; + +/* set by initialisation code to C locale */ +static locale_t atr_c_locale; + +static PedDiskType atari_disk_type; + + + +/******************************** Atari Code ********************************/ + +#define ATARI_DISK(disk) ((AtariDisk*)((disk)->disk_specific)) +#define ATARI_PART(part) ((AtariPart*)((part)->disk_specific)) + +#define atr_pid_eq(a,b) (!memcmp( (a), (b), 3 )) + +#define atr_pid_assign(a, b) (memcpy ( (a), (b), 3 )) + +#define atr_part_used(part) (((part)->flag) & PART_FLAG_USED) + +static int +atr_start_size_correct (uint32_t start, uint32_t size, uint32_t hd_size) +{ + uint32_t end = start + size; + + return end >= start + && 0 < start && start <= hd_size + && 0 < size && size <= hd_size + && 0 < end && end <= hd_size; +} + +static int +atr_part_correct (AtariRawPartition* part, uint32_t hd_size) +{ + uint32_t start, size; + + start = PED_BE32_TO_CPU (part->start); + size = PED_BE32_TO_CPU (part->size); + + return isalnum_l(part->id[0], atr_c_locale) + && isalnum_l(part->id[1], atr_c_locale) + && isalnum_l(part->id[2], atr_c_locale) + && atr_start_size_correct (start, size, hd_size); +} + +static int _GL_ATTRIBUTE_PURE +atr_pid_known (const char* pid, const char** pid_list) +{ + for (; *pid_list; pid_list++) { + if (atr_pid_eq(pid, *pid_list)) + return 1; + } + + return 0; +} + +/* Recognize Parted signature in an AHDI entry, used to + * identify empty Atari partition tables */ +static int +atr_is_signature_entry (AtariRawPartition* part) +{ + return part->flag == 0 + && !memcmp (part->empty, SIGNATURE_EMPTY_TABLE, + SIGNATURE_EMPTY_SIZE ); +} + +/* Set Parted signature in an AHDI entry */ +static void +atr_put_signature_entry (AtariRawPartition* part) +{ + part->flag = 0; + memcpy (part->empty, SIGNATURE_EMPTY_TABLE, SIGNATURE_EMPTY_SIZE); +} + +#define atr_part_known(part, pid_list) (atr_pid_known ((part)->id, pid_list)) + +#define atr_part_valid(part, sz) (atr_part_used(part)\ + && atr_part_correct((part), (sz))) +#define atr_part_trash(part, sz) (atr_part_used(part)\ + && !atr_part_correct((part), (sz))) + +/* Check if this device can be used with an Atari label */ +static int +atr_can_use_dev (const PedDevice *dev) +{ + /* i really don't know how atari behave with non 512 bytes */ + /* sectors... */ + if (dev->sector_size != PED_SECTOR_SIZE_DEFAULT) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Can't use Atari partition tables on disks with a " + "sector size not equal to %d bytes."), + (int)PED_SECTOR_SIZE_DEFAULT ); + return 0; + } + + /* the format isn't well defined enough to support > 0x7FFFFFFF */ + /* sectors */ + if (dev->length > INT32_MAX) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Can't use Atari partition tables on disks with more " + "than %d sectors."), + INT32_MAX ); + return 0; + } + + return 1; +} + +/* + * The Atari disk label doesn't have any magic id + * so we must completely parse the layout to be sure + * we are really dealing with it. + */ +static int +atari_probe (const PedDevice *dev) +{ + AtariRawTable table; + uint32_t rs_hd_size, parts, exts; + int valid_count, xgm_part, xgm_num, i; + int num_sign, total_count = 0; + + PED_ASSERT (dev != NULL); + PED_ASSERT (sizeof(table) == 512); + + /* Device Spec ok for Atari label? */ + if (!atr_can_use_dev (dev)) + return 0; + + /* read the root sector */ + if (!ped_device_read (dev, &table, 0, 1)) + return 0; + + /* number of sectors stored in the root sector > device length ? */ + /* => just reject the Atari disk label */ + rs_hd_size = PED_BE32_TO_CPU (table.hd_size); + if (rs_hd_size > dev->length + || rs_hd_size < 2) + return 0; + + /* check the BSL fields */ + if ((table.bsl_start || table.bsl_count) + && !atr_start_size_correct (PED_BE32_TO_CPU (table.bsl_start), + PED_BE32_TO_CPU (table.bsl_count), + rs_hd_size ) ) + return 0; + + /* scan the main AHDI fields */ + num_sign = 0; xgm_num = 0; + valid_count = 0; xgm_part = 0; + for (i = 0; i < N_AHDI; i++) { + if (atr_part_valid (&table.part[i], rs_hd_size)) { + valid_count++; + total_count++; + if (atr_pid_eq(table.part[i].id, "XGM")) { + xgm_part++; + xgm_num = i; + } + } else if (atr_part_trash (&table.part[i], rs_hd_size)) { + return 0; + } + if (atr_is_signature_entry (&table.part[i])) + num_sign++; + } + + /* no way to reliably detect empty Atari disk labels if + * they aren't using parted signature in 4 prim fields + * && reject multi XGM labels because Parted can't handle + * multiple extended partitions + * && reject if xgm partition in slot 0 because not allowed */ + if ((!valid_count && num_sign != N_AHDI) + || xgm_part > 1 + || (xgm_part == 1 && xgm_num == 0) ) + return 0; + + /* check coherency of each logical partitions and ARS */ + if (xgm_part) { /* ! WARNING ! reuses "table" */ + /* we must allow empty ext partition even if they're */ + /* not valid because parted write the layout to the HD */ + /* at each operation, and we can't create ext and log */ + /* at the same time */ + int empty_ars_allowed = 1; + + parts = exts = PED_BE32_TO_CPU (table.part[xgm_num].start); + while (1) { + if (!ped_device_read (dev, &table, parts, 1)) + return 0; + + for (i = 0; i < N_AHDI-1; ++i) { + if (atr_part_used (&table.part[i])) + break; + } + + /* we allow the ext part to be empty (see above) */ + if (i == N_AHDI-1 && empty_ars_allowed) + break; + + /* data partition must be in slot 0, 1 or 2 */ + if (i == N_AHDI-1 + || !atr_part_correct (&table.part[i], rs_hd_size + - parts ) + || atr_pid_eq (table.part[i].id, "XGM")) + return 0; + + /* If there is at least one logical partition */ + /* then next ARS should not be empty */ + empty_ars_allowed = 0; + + total_count++; + if (total_count > MAXIMUM_PARTS) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Too many Atari partitions detected. " + " Maybe there is a loop in the XGM " + "linked list. Aborting.") ); + return 0; + } + + /* end of logical partitions? */ + if (!atr_part_used (&table.part[i+1])) + break; + + /* is this really the descriptor of the next ARS? */ + if (!atr_part_correct (&table.part[i+1], rs_hd_size + - exts ) + || !atr_pid_eq (table.part[i+1].id, "XGM")) + return 0; + + parts = exts + PED_BE32_TO_CPU (table.part[i+1].start); + } + } /* no XGM so try ICD */ + else if (atr_part_valid (&table.icd_part[0], rs_hd_size) + && atr_part_known (&table.icd_part[0], atr_known_icd_pid)) { + for (i = 1; i < N_ICD; i++) { + if (atr_part_trash (&table.icd_part[i], rs_hd_size)) + return 0; + } + } + + return 1; +} + +static void +atr_disk_reset (AtariDisk* atr_disk) +{ + /* Empty partition table => only AHDI needed right now */ + atr_disk->format = FMT_AHDI; + /* The disk is not in sync with the actual content of the label */ + atr_disk->has_been_read = 0; + /* Create an empty BSL for HDX compatibility */ + atr_disk->bsl_start = 1; + atr_disk->bsl_count = 1; + atr_disk->HDX_comp = 1; +} + +/* + * Must set up the PedDisk and the associated AtariDisk as if + * the user is doing mklabel, since in this case atari_alloc + * is called alone whereas when reading an existing partition + * table atari_read is called after atari_alloc and can overwrite + * the settings. + */ +static PedDisk* +atari_alloc (const PedDevice* dev) +{ + PedDisk* disk; + AtariDisk* atr_disk; + + PED_ASSERT (dev != NULL); + + if (!atr_can_use_dev (dev) + || !(disk = _ped_disk_alloc (dev, &atari_disk_type))) + return NULL; + + if (!(disk->disk_specific = atr_disk = ped_malloc (sizeof (AtariDisk)))) + goto error_free_disk; + + atr_disk_reset (atr_disk); + + return disk; + +error_free_disk: + free (disk); + return NULL; +} + +static PedDisk* +atari_duplicate (const PedDisk* disk) +{ + PedDisk* new_disk; + AtariDisk* old_atr_dsk; + AtariDisk* new_atr_dsk; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + PED_ASSERT (disk->disk_specific != NULL); + + old_atr_dsk = ATARI_DISK (disk); + if (!(new_disk = ped_disk_new_fresh (disk->dev, &atari_disk_type))) + return NULL; + new_atr_dsk = ATARI_DISK (new_disk); + + memcpy (new_atr_dsk, old_atr_dsk, sizeof(*old_atr_dsk)); + + return new_disk; +} + +static void +atari_free (PedDisk* disk) +{ + AtariDisk* atr_disk; + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->disk_specific != NULL); + atr_disk = ATARI_DISK (disk); + + _ped_disk_free (disk); + free (atr_disk); +} + +/* Warning : ID not ASCIIZ but 3 chars long */ +static void +atr_part_sysraw (PedPartition* part, const char* id, uint8_t flag) +{ + AtariPart* atr_part = ATARI_PART (part); + + atr_part->flag = flag & ~PART_FLAG_USED; + + atr_pid_assign (atr_part->part_id, id); + atr_part->part_id[3] = 0; + + if (atr_pid_known (id, atr_known_icd_pid)) { + atr_pid_assign (atr_part->icd_id, id); + atr_part->icd_id[3] = 0; + } else { + atr_pid_assign (atr_part->icd_id, "RAW"); + atr_part->icd_id[3] = 0; + } +} + +static int +atr_parse_add_rawpart (PedDisk* disk, PedPartitionType type, PedSector st_off, + int num, const AtariRawPartition* rawpart ) +{ + PedSector start, end; + PedPartition* part; + PedConstraint* const_exact; + int added; + + start = st_off + PED_BE32_TO_CPU (rawpart->start); + end = start + PED_BE32_TO_CPU (rawpart->size) - 1; + + part = ped_partition_new (disk, type, NULL, start, end); + if (!part) + return 0; + + /*part->num = num;*/ /* Enumeration will take care of that */ + part->num = -1; /* Indeed we can't enumerate here + * because the enumerate function uses + * -1 do detect new partition being + * inserted and update the atrdisk->format */ + if (type != PED_PARTITION_EXTENDED) + part->fs_type = ped_file_system_probe (&part->geom); + else + part->fs_type = NULL; + atr_part_sysraw (part, rawpart->id, rawpart->flag); + + const_exact = ped_constraint_exact (&part->geom); + added = ped_disk_add_partition (disk, part, const_exact); + ped_constraint_destroy (const_exact); + if (!added) { + ped_partition_destroy (part); + return 0; + } + + PED_ASSERT (part->num == num); + return 1; +} + +/* + * Read the chained list of logical partitions. + * exts points to the first Auxiliary Root Sector, at the start + * of the extended partition. + * In each ARS one partition entry describes to the logical partition + * (start relative to the ARS position) and the next entry with ID "XGM" + * points to the next ARS (start relative to exts). + */ +static int +atr_read_logicals (PedDisk* disk, PedSector exts, int* pnum) +{ + AtariRawTable table; + PedSector parts = exts; + int i, empty_ars_allowed = 1; + + while (1) { + if (!ped_device_read (disk->dev, &table, parts, 1)) + return 0; + + for (i = 0; i < N_AHDI-1; ++i) + if (atr_part_used (&table.part[i])) + break; + + if (i == N_AHDI-1 && empty_ars_allowed) + break; + + /* data partition must be in slot 0, 1 or 2 */ + if (i == N_AHDI-1 + || atr_pid_eq (table.part[i].id, "XGM")) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("No data partition found in the ARS at " + "sector %lli."), parts ); + return 0; + } + + empty_ars_allowed = 0; + + if (!atr_parse_add_rawpart (disk, PED_PARTITION_LOGICAL, + parts, *pnum, &table.part[i] ) ) + return 0; + + (*pnum)++; + + /* end of logical partitions? */ + if (!atr_part_used (&table.part[i+1])) + break; + + if (!atr_pid_eq (table.part[i+1].id, "XGM")) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The entry of the next logical ARS is not of " + "type XGM in ARS at sector %lli."), parts ); + return 0; + } + + parts = exts + PED_BE32_TO_CPU (table.part[i+1].start); + } + + return 1; +} + +static int +atari_read (PedDisk* disk) +{ + AtariRawTable table; + AtariDisk* atr_disk; + uint32_t rs_hd_size; + int i, pnum, xgm, pcount; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + PED_ASSERT (disk->disk_specific != NULL); + atr_disk = ATARI_DISK (disk); + + ped_disk_delete_all (disk); + atr_disk_reset (atr_disk); + + if (!atari_probe (disk->dev)) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("There doesn't seem to be an Atari partition table " + "on this disk (%s), or it is corrupted."), + disk->dev->path ) + != PED_EXCEPTION_IGNORE) + return 0; + } + + if (!ped_device_read (disk->dev, (void*) &table, 0, 1)) + goto error; + + /* We are sure that the layout looks coherent so we + don't need to check too much */ + + rs_hd_size = PED_BE32_TO_CPU (table.hd_size); + atr_disk->bsl_start = PED_BE32_TO_CPU (table.bsl_start); + atr_disk->bsl_count = PED_BE32_TO_CPU (table.bsl_count); + atr_disk->HDX_comp = 0; + + /* AHDI primary partitions */ + pnum = 1; xgm = 0; pcount = 0; + for (i = 0; i < N_AHDI; i++) { + if (!atr_part_used (&table.part[i])) + continue; + + pcount++; + + if (atr_pid_eq (table.part[i].id, "XGM")) { + + atr_disk->format = FMT_XGM; + xgm = 1; + if (!atr_parse_add_rawpart(disk, PED_PARTITION_EXTENDED, + 0, 0, &table.part[i] ) + || !atr_read_logicals ( + disk, + PED_BE32_TO_CPU (table.part[i].start), + &pnum ) ) + goto error; + + } else { + + if (!atr_parse_add_rawpart (disk, PED_PARTITION_NORMAL, + 0, pnum, &table.part[i] ) ) + goto error; + pnum++; + } + } + + /* If no XGM partition has been found, the AHDI table is not empty, */ + /* the first entry is valid and its ID ok for ICD, then we parse the */ + /* ICD table. */ + if (!xgm && pcount != 0 + && atr_part_valid (&table.icd_part[0], rs_hd_size) + && atr_part_known (&table.icd_part[0], atr_known_icd_pid)) + for (i = 0; i < N_ICD; i++) { + + if (!atr_part_known (&table.icd_part[i], atr_known_icd_pid) + || !atr_part_used (&table.icd_part[i])) + continue; + atr_disk->format = FMT_ICD; + + if (!atr_parse_add_rawpart (disk, PED_PARTITION_NORMAL, + 0, pnum, &table.icd_part[i] ) ) + goto error; + pnum++; + } + + atr_disk->has_been_read = 1; + return 1; + +error: + ped_disk_delete_all (disk); + atr_disk_reset (atr_disk); + return 0; +} + +/* Returns the number of the first logical partition or -1 if not found */ +static int +atr_find_first_log (const PedDisk* disk) +{ + PedPartition* part; + int first_log, last; + + last = ped_disk_get_last_partition_num (disk); + + for (first_log = 1; first_log <= last; first_log++) { + if ((part = ped_disk_get_partition (disk, first_log)) + && (part->type & PED_PARTITION_LOGICAL)) + break; + } + + return first_log > last ? -1 : first_log; +} + +#ifndef DISCOVER_ONLY +static int +atari_clobber (PedDevice* dev) +{ + AtariRawTable table; + + PED_ASSERT (dev != NULL); + PED_ASSERT (atari_probe (dev)); + + if (!ped_device_read (dev, &table, 0, 1)) + return 0; + + /* clear anything but the boot code and the optional ICD table */ + memset (table.boot_code + offsetof (AtariRawTable, hd_size), + 0, + PED_SECTOR_SIZE_DEFAULT - offsetof (AtariRawTable, hd_size)); + + return ped_device_write (dev, &table, 0, 1); +} + +/* Computes the checksum of the root sector */ +static uint16_t +atr_calc_rs_sum (const AtariRawTable* table) +{ + const uint16_t* word = (uint16_t*)(table); + const uint16_t* end = (uint16_t*)(table + 1); + uint16_t sum; + + for (sum = 0; word < end; word++) + sum += PED_BE16_TO_CPU(*word); + + return sum; +} + +/* Returns 1 if the root sector is bootable, else returns 0 */ +static int +atr_is_boot_table (const AtariRawTable* table) +{ + return atr_calc_rs_sum (table) == BOOTABLE_CKSUM; +} + +/* + * Returns 1 if sign belongs to a set of `forbidden' signatures. + * (e.g.: 55AA which is the MSDOS siganture...) + * Only used for non bootable root sector since the signature of + * a bootable one is unique. + */ +static int _GL_ATTRIBUTE_PURE +atr_sign_is_forbidden (uint16_t sign) +{ + const uint16_t* forbidden; + + for (forbidden = atr_forbidden_sign; *forbidden; forbidden++) { + if (sign == *forbidden) + return 1; + } + + return 0; +} + +/* Updates table->checksum so the RS will be considered bootable (or not) */ +static void +atr_table_set_boot (AtariRawTable* table, int boot) +{ + uint16_t boot_cksum, noboot_cksum; + uint16_t sum; + + table->checksum = 0; + sum = atr_calc_rs_sum (table); + boot_cksum = BOOTABLE_CKSUM - sum; + + if (boot) { + table->checksum = PED_CPU_TO_BE16 (boot_cksum); + return; + } + + noboot_cksum = NONBOOT_CKSUM - sum; + + while (atr_sign_is_forbidden (noboot_cksum) + || noboot_cksum == boot_cksum) + noboot_cksum++; + + table->checksum = PED_CPU_TO_BE16 (noboot_cksum); +} + +/* Fill an used partition entry */ +static void +atr_fill_raw_entry (AtariRawPartition* rawpart, uint8_t flag, const char* id, + uint32_t start, uint32_t size ) +{ + rawpart->flag = PART_FLAG_USED | flag; + atr_pid_assign (rawpart->id, id); + rawpart->start = PED_CPU_TO_BE32 (start); + rawpart->size = PED_CPU_TO_BE32 (size); +} + +static int +atr_write_logicals (const PedDisk* disk) +{ + AtariRawTable table; + PedPartition* log_curr; + PedPartition* log_next; + PedPartition* ext; + PedPartition* part; + PedSector exts; + PedSector parts; + AtariPart* atr_part; + int first_log, pnum, i; + + PED_ASSERT (disk != NULL); + + ext = ped_disk_extended_partition (disk); + exts = parts = ext->geom.start; + + pnum = first_log = atr_find_first_log (disk); + + while (1) { + if (pnum != -1) { + log_curr = ped_disk_get_partition (disk, pnum); + log_next = ped_disk_get_partition (disk, pnum + 1); + } else { + log_curr = log_next = NULL; + } + + if (log_curr && !(log_curr->type & PED_PARTITION_LOGICAL)) + log_curr = NULL; + if (log_next && !(log_next->type & PED_PARTITION_LOGICAL)) + log_next = NULL; + + PED_ASSERT (pnum == first_log || log_curr); + + part = ped_disk_get_partition_by_sector (disk, parts); + if (part && ped_partition_is_active (part)) { + if (log_curr) + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("No room at sector %lli to store ARS " + "of logical partition %d."), + parts, pnum ); + else + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("No room at sector %lli to store ARS."), + parts ); + return 0; + } + + if (!ped_device_read (disk->dev, &table, parts, 1)) + return 0; + + if (!log_curr) { + PED_ASSERT (!log_next); + + for (i = 0; i < N_AHDI; i++) + table.part[i].flag &= ~PART_FLAG_USED; + } else { + atr_part = ATARI_PART (log_curr); + atr_fill_raw_entry (&table.part[0], atr_part->flag, + atr_part->part_id, + log_curr->geom.start - parts, + log_curr->geom.length ); + + for (i = 1; i < N_AHDI; i++) + table.part[i].flag &= ~PART_FLAG_USED; + + if (log_next) { + atr_fill_raw_entry (&table.part[1], 0, "XGM", + log_next->geom.start - 1 - exts, + log_next->geom.length + 1 ); + } + } + + /* TODO: check if we can set that bootable, and when */ + atr_table_set_boot (&table, 0); + + if (!ped_device_write (disk->dev, &table, parts, 1)) + return 0; + + if (!log_next) + break; + + parts = log_next->geom.start - 1; + pnum++; + } + + return 1; +} + +static int _GL_ATTRIBUTE_PURE +_disk_logical_partition_count (const PedDisk* disk) +{ + PedPartition* walk; + + int count = 0; + + PED_ASSERT (disk != NULL); + for (walk = disk->part_list; walk; + walk = ped_disk_next_partition (disk, walk)) { + if (ped_partition_is_active (walk) + && (walk->type & PED_PARTITION_LOGICAL)) + count++; + } + + return count; +} + +/* Load the HD size from the table and ask to fix it if != device size. */ +static int +atr_load_fix_hdsize (const PedDisk* disk, uint32_t* rs_hd_size, AtariRawTable* table) +{ + AtariDisk* atr_disk = ATARI_DISK (disk); + int result = PED_EXCEPTION_UNHANDLED; + + *rs_hd_size = PED_BE32_TO_CPU (table->hd_size); + if (*rs_hd_size != disk->dev->length) { + if (atr_disk->has_been_read) { + result = ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE_CANCEL, + _("The sector count that is stored in the " + "partition table does not correspond " + "to the size of your device. Do you " + "want to fix the partition table?") ); + if (result == PED_EXCEPTION_CANCEL) + return 0; + } + + if (result == PED_EXCEPTION_UNHANDLED) + result = PED_EXCEPTION_FIX; + + if (result == PED_EXCEPTION_FIX) { + *rs_hd_size = disk->dev->length; + table->hd_size = PED_CPU_TO_BE32(*rs_hd_size); + } + } + return 1; +} + +/* Try to init the HDX compatibility Bad Sectors List. */ +static int +atr_empty_init_bsl (const PedDisk* disk) +{ + uint8_t zeros[PED_SECTOR_SIZE_DEFAULT]; + PedSector sec; + PedPartition* part; + AtariDisk* atr_disk = ATARI_DISK (disk); + + memset (zeros, 0, PED_SECTOR_SIZE_DEFAULT); + for (sec = atr_disk->bsl_start; + sec < atr_disk->bsl_start + atr_disk->bsl_count; + sec++ ) { + if (sec == atr_disk->bsl_start) + zeros[3] = 0xA5; + else + zeros[3] = 0; + part = ped_disk_get_partition_by_sector (disk, sec); + if (part && ped_partition_is_active (part)) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("No room at sector %lli to store BSL."), + sec ); + return 0; + } + ped_device_write (disk->dev, zeros, sec, 1); + } + atr_disk->HDX_comp = 0; + return 1; +} + +static int +atari_write (const PedDisk* disk) +{ + AtariRawTable table; + AtariDisk* atr_disk; + AtariPart* atr_part; + PedPartition* log; + PedPartition* ext_part; + PedPartition* part = NULL; + uint32_t rs_hd_size; + int i, xgm_begin, pnum, append_ext; + int put_sign, boot, prim_count, last_num; + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + atr_disk = ATARI_DISK (disk); + PED_ASSERT (atr_disk != NULL); + + prim_count = ped_disk_get_primary_partition_count (disk); + last_num = ped_disk_get_last_partition_num (disk); + ext_part = ped_disk_extended_partition (disk); + + /* WARNING: similar/related code in atari_enumerate */ + xgm_begin = ((log = ped_disk_get_partition (disk, 1)) + && (log->type & PED_PARTITION_LOGICAL)); + PED_ASSERT (atr_disk->format != FMT_ICD || ext_part == NULL); + PED_ASSERT (atr_disk->format != FMT_XGM || prim_count + xgm_begin <= N_AHDI); + PED_ASSERT (atr_disk->format != FMT_AHDI || (ext_part == NULL && prim_count + xgm_begin <= N_AHDI)); + + /* Device Spec ok for Atari label? */ + if (!atr_can_use_dev (disk->dev)) + goto error; + + if (!ped_device_read (disk->dev, (void*) &table, 0, 1)) + goto error; + + boot = atr_is_boot_table (&table); + + table.bsl_start = PED_CPU_TO_BE32 (atr_disk->bsl_start); + table.bsl_count = PED_CPU_TO_BE32 (atr_disk->bsl_count); + + /* Before anything else check the sector count and */ + /* fix it if necessary */ + if (!atr_load_fix_hdsize (disk, &rs_hd_size, &table)) + goto error; + + append_ext = (ext_part != NULL) + && (_disk_logical_partition_count (disk) == 0); + + /* Fill the AHDI table */ + put_sign = (prim_count == 0); + pnum = 1; + for (i = 0; i < N_AHDI; i++) { + if (pnum > last_num) + part = NULL; + else while (pnum <= last_num + && !(part = ped_disk_get_partition (disk, pnum))) + pnum++; + + if (put_sign) { + atr_put_signature_entry (&table.part[i]); + continue; + } + + if (!part && i != 0 && append_ext) { + part = ext_part; + append_ext = 0; + } + + if (!part || (i == 0 && xgm_begin)) { + table.part[i].flag &= ~PART_FLAG_USED; + continue; + } + + if (part->type & PED_PARTITION_LOGICAL) + part = ext_part; + + PED_ASSERT (part != NULL); + + atr_part = ATARI_PART (part); + atr_fill_raw_entry (&table.part[i], atr_part->flag, + atr_part->part_id, part->geom.start, + part->geom.length ); + + if (part->type & PED_PARTITION_EXTENDED) { + while (pnum <= last_num) { + part = ped_disk_get_partition (disk, pnum); + if (part && + !(part->type & PED_PARTITION_LOGICAL)) + break; + pnum++; + } + } else + pnum++; + } + + if ((ext_part != NULL || atr_disk->format == FMT_AHDI) + && pnum <= last_num) { + ped_exception_throw (PED_EXCEPTION_BUG, PED_EXCEPTION_CANCEL, + _("There were remaining partitions after filling " + "the main AHDI table.") ); + goto error; + } + + /* Leave XGM or ICD mode if uneeded */ + if (pnum > last_num + && (atr_disk->format == FMT_ICD || ext_part == NULL)) + atr_disk->format = FMT_AHDI; + + /* If AHDI mode, check that no ICD will be detected */ + /* and propose to fix */ + if (atr_disk->format == FMT_AHDI + && atr_part_valid (&table.icd_part[0], rs_hd_size) + && atr_part_known (&table.icd_part[0], atr_known_icd_pid)) { + int result = PED_EXCEPTION_UNHANDLED; + result = ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_YES_NO_CANCEL, + _("The main AHDI table has been filled with all " + "partitions but the ICD table is not empty " + "so more partitions of unknown size and position " + "will be detected by ICD compatible software. Do " + "you want to invalidate the ICD table?") ); + if (result == PED_EXCEPTION_YES + || result == PED_EXCEPTION_UNHANDLED) + table.icd_part[0].flag &= ~PART_FLAG_USED; + else if (result == PED_EXCEPTION_CANCEL) + goto error; + } + + if (put_sign) + goto write_to_dev; + + /* Fill the ICD table */ + if (atr_disk->format == FMT_ICD) + for (i = 0; i < N_ICD; i++) { + if (pnum > last_num) + part = NULL; + else while (pnum <= last_num + && !(part = ped_disk_get_partition (disk, pnum))) + pnum++; + + if (!part) { + table.icd_part[i].flag &= ~PART_FLAG_USED; + continue; + } + + if (part->type & PED_PARTITION_EXTENDED + || part->type & PED_PARTITION_LOGICAL) { + ped_exception_throw ( + PED_EXCEPTION_BUG, + PED_EXCEPTION_CANCEL, + _("ICD entries can't contain extended or " + "logical partitions.") ); + goto error; + } + + atr_part = ATARI_PART (part); + atr_fill_raw_entry (&table.icd_part[i], atr_part->flag, + atr_part->icd_id, part->geom.start, + part->geom.length ); + + pnum++; + } + + /* Write the chained list of logical partitions */ + if (atr_disk->format == FMT_XGM) { + if (!atr_write_logicals (disk)) + goto error; + } + +write_to_dev: + if (pnum <= last_num) { + ped_exception_throw (PED_EXCEPTION_BUG, PED_EXCEPTION_CANCEL, + _("There were remaining partitions after filling " + "the tables.") ); + goto error; + } + + /* Do we need to do that in case of failure too??? */ + atr_table_set_boot (&table, boot); + + /* Commit the root sector... */ + if (!ped_device_write (disk->dev, (void*) &table, 0, 1) + || !ped_device_sync (disk->dev)) + goto error; + + /* Try to init the HDX compatibility Bad Sectors List if needed. */ + if (atr_disk->HDX_comp && !atr_empty_init_bsl (disk)) + goto error; + + atr_disk->has_been_read = 1; + return ped_device_sync (disk->dev); + +error: + atr_disk->has_been_read = 0; + return 0; +} +#endif + +/* If extended partition in ICD mode, generate an error and returns 1 */ +/* else returns 0 */ +static int +atr_xgm_in_icd (const PedDisk* disk, PedPartitionType part_type) +{ + AtariDisk* atrdisk; + + PED_ASSERT (disk != NULL); + + if (part_type & PED_PARTITION_EXTENDED) { + atrdisk = ATARI_DISK (disk); + if (atrdisk->format == FMT_ICD) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("You can't use an extended XGM partition in " + "ICD mode (more than %d primary partitions, if " + "XGM is the first one it counts for two)."), + N_AHDI ); + return 1; + } + } + + return 0; +} + +static PedPartition* +atari_partition_new (const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + PedPartition* part; + AtariPart* atrpart; + + if (atr_xgm_in_icd(disk, part_type)) + return 0; + + part = _ped_partition_alloc (disk, part_type, fs_type, start, end); + if (!part) + goto error; + if (ped_partition_is_active (part)) { + part->disk_specific = atrpart = ped_malloc (sizeof (AtariPart)); + if (!atrpart) + goto error_free_part; + memset (atrpart, 0, sizeof (AtariPart)); + } else { + part->disk_specific = NULL; + } + return part; + +error_free_part: + _ped_partition_free (part); +error: + return NULL; +} + +static PedPartition* +atari_partition_duplicate (const PedPartition* part) +{ + PedPartition* new_part; + + new_part = ped_partition_new (part->disk, part->type, + part->fs_type, part->geom.start, + part->geom.end); + if (!new_part) + return NULL; + new_part->num = part->num; + if (ped_partition_is_active (part)) + memcpy (new_part->disk_specific, part->disk_specific, + sizeof (AtariPart)); + + return new_part; +} + +static void +atari_partition_destroy (PedPartition* part) +{ + PED_ASSERT (part != NULL); + + if (ped_partition_is_active (part)) { + PED_ASSERT (part->disk_specific != NULL); + free (part->disk_specific); + } + _ped_partition_free (part); +} + +/* Note: fs_type is NULL for extended partitions */ +static int +atari_partition_set_system (PedPartition* part, + const PedFileSystemType* fs_type) +{ + AtariPart* atrpart; + AtariFS2PartId* fs2id; + PED_ASSERT (part != NULL); + atrpart = ATARI_PART (part); + PED_ASSERT (atrpart != NULL); + + part->fs_type = fs_type; + + if (atr_xgm_in_icd(part->disk, part->type)) + return 0; + + if (part->type & PED_PARTITION_EXTENDED) { + strcpy (atrpart->part_id, "XGM"); + strcpy (atrpart->icd_id, "XGM"); + return 1; + } + + if (!fs_type) { + strcpy (atrpart->part_id, "RAW"); + strcpy (atrpart->icd_id, "RAW"); + return 1; + } + + for (fs2id = atr_fs2pid; fs2id->fs; fs2id++) { + if (!*fs2id->fs /* default entry */ + || ((!strcmp (fs_type->name, fs2id->fs) + && part->geom.length < fs2id->max_sectors))) { + + strcpy (atrpart->part_id, fs2id->pid); + if (atr_pid_known (fs2id->pid, atr_known_icd_pid)) + strcpy (atrpart->icd_id, fs2id->pid); + else + strcpy (atrpart->icd_id, "RAW"); + + break; + } + } + PED_ASSERT (fs2id->fs != NULL); + + return 1; +} + +static int +atari_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + AtariPart* atr_part; + AtariPartID2BootFlag* bf; + + PED_ASSERT (part != NULL); + atr_part = ATARI_PART (part); + PED_ASSERT (atr_part != NULL); + + if (flag != PED_PARTITION_BOOT) + return 0; + + if (state == 0) { + atr_part->flag = 0; + } else { + for (bf = atr_pid2bf; *bf->pid; bf++) { + if (atr_pid_eq (bf->pid, atr_part->part_id)) + break; + } + atr_part->flag = bf->flag; + } + + return 1; +} + +static int _GL_ATTRIBUTE_PURE +atari_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + AtariPart* atr_part; + + PED_ASSERT (part != NULL); + atr_part = ATARI_PART (part); + PED_ASSERT (atr_part != NULL); + + if (flag != PED_PARTITION_BOOT) + return 0; + + return (atr_part->flag != 0); +} + +static int +atari_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + if (flag == PED_PARTITION_BOOT) + return 1; + + return 0; +} + +/* Adapted from disk_dos */ +static PedConstraint* +atr_log_constraint (const PedPartition* part) +{ + const PedGeometry* geom = &part->geom; + PedGeometry safe_space; + PedSector min_start; + PedSector max_end; + PedDisk* disk; + PedDevice* dev; + PedPartition* ext_part; + PedPartition* walk; + int first_log, not_first; + + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk->dev != NULL); + ext_part = ped_disk_extended_partition (part->disk); + PED_ASSERT (ext_part != NULL); + + dev = (disk = part->disk) -> dev; + + first_log = atr_find_first_log (disk); + if (first_log == -1) + first_log = part->num; + + not_first = (part->num != first_log); + + walk = ext_part->part_list; + + min_start = ext_part->geom.start + 1 + not_first; + max_end = ext_part->geom.end; + + while (walk != NULL + && ( walk->geom.start - (walk->num != first_log) + < geom->start - not_first + || walk->geom.start - (walk->num != first_log) + < min_start ) ) { + if (walk != part && ped_partition_is_active (walk)) + min_start = walk->geom.end + 1 + not_first; + walk = walk->next; + } + + while (walk && (walk == part || !ped_partition_is_active (walk))) + walk = walk->next; + + if (walk) + max_end = walk->geom.start - 1 - (walk->num != first_log); + + if (min_start >= max_end) + return NULL; + + ped_geometry_init (&safe_space, dev, min_start, + max_end - min_start + 1); + return ped_constraint_new_from_max (&safe_space); +} + +/* Adapted from disk_dos */ +static PedGeometry* +art_min_extended_geom (const PedPartition* ext_part) +{ + PedDisk* disk = ext_part->disk; + PedPartition* walk; + PedGeometry* min_geom; + int first_log; + + first_log = atr_find_first_log (disk); + if (first_log == -1) + return NULL; + + walk = ped_disk_get_partition (disk, first_log); + PED_ASSERT (walk->type & PED_PARTITION_LOGICAL); + min_geom = ped_geometry_duplicate (&walk->geom); + if (!min_geom) + return NULL; + ped_geometry_set_start (min_geom, walk->geom.start - 1); + + for (walk = ext_part->part_list; walk; walk = walk->next) { + if (!ped_partition_is_active (walk) || walk->num == first_log) + continue; + if (walk->geom.start < min_geom->start) + ped_geometry_set_start (min_geom, walk->geom.start - 2); + if (walk->geom.end > min_geom->end) + ped_geometry_set_end (min_geom, walk->geom.end); + } + + return min_geom; +} + +/* Adapted from disk_dos */ +static PedConstraint* +atr_ext_constraint (const PedPartition* part) +{ + PedGeometry start_range; + PedGeometry end_range; + PedConstraint* constraint; + PedDevice* dev; + PedDisk* disk; + PedGeometry* min; + + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk->dev != NULL); + + dev = (disk = part->disk) -> dev; + min = art_min_extended_geom (part); + + if (min) { + ped_geometry_init (&start_range, dev, 1, min->start); + ped_geometry_init (&end_range, dev, min->end, + dev->length - min->end); + ped_geometry_destroy (min); + } else { + ped_geometry_init (&start_range, dev, 1, dev->length - 1); + ped_geometry_init (&end_range, dev, 1, dev->length - 1); + } + + constraint = ped_constraint_new (ped_alignment_any, ped_alignment_any, + &start_range, &end_range, 1, dev->length); + return constraint; +} + +static PedConstraint* +atr_prim_constraint (const PedPartition* part) +{ + PedDevice* dev; + PedGeometry max; + + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk->dev != NULL); + + dev = part->disk->dev; + + ped_geometry_init (&max, dev, 1, dev->length - 1); + return ped_constraint_new_from_max (&max); +} + +/* inspiration from disk_dos */ +static PedGeometry* +_best_solution (PedGeometry* a, PedGeometry* b) +{ + if (!a) + return b; + if (!b) + return a; + + if (a->length < b->length) + goto choose_b; + + ped_geometry_destroy (b); + return a; + +choose_b: + ped_geometry_destroy (a); + return b; +} + +/* copied from disk_dos */ +static PedGeometry* +_try_constraint (const PedPartition* part, const PedConstraint* external, + PedConstraint* internal) +{ + PedConstraint* intersection; + PedGeometry* solution; + + intersection = ped_constraint_intersect (external, internal); + ped_constraint_destroy (internal); + if (!intersection) + return NULL; + + solution = ped_constraint_solve_nearest (intersection, &part->geom); + ped_constraint_destroy (intersection); + return solution; +} + +/* + * internal is either the primary or extented constraint. + * If there's no BSL, the is the only internal constraint considered. + * If there's a BSL, try to fit the partition before or after (and + * choose the best fit, the one which results in the greatest size...) + */ +static int +atr_prim_align (PedPartition* part, const PedConstraint* constraint, + PedConstraint* internal) +{ + PedDevice* dev; + AtariDisk* atr_disk; + PedConstraint* cut; + PedGeometry* solution = NULL; + PedGeometry max; + PedSector bsl_end; + + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk->dev != NULL); + dev = part->disk->dev; + atr_disk = ATARI_DISK (part->disk); + PED_ASSERT (atr_disk != NULL); + + /* No BSL */ + if (!atr_disk->bsl_start && !atr_disk->bsl_count) { + /* Note: _ped_partition_attempt_align will destroy internal */ + return _ped_partition_attempt_align(part, constraint, internal); + } + + /* BSL, try to fit before */ + if (atr_disk->bsl_start > 1) { + ped_geometry_init (&max, dev, 1, atr_disk->bsl_start - 1); + cut = ped_constraint_new_from_max (&max); + solution = _best_solution (solution, + _try_constraint (part, constraint, + ped_constraint_intersect (internal, cut))); + ped_constraint_destroy (cut); + } + + /* BSL, try to fit after, take the best solution */ + bsl_end = atr_disk->bsl_start + atr_disk->bsl_count; + if (bsl_end < dev->length) { + ped_geometry_init (&max, dev, bsl_end, dev->length - bsl_end); + cut = ped_constraint_new_from_max (&max); + solution = _best_solution (solution, + _try_constraint (part, constraint, + ped_constraint_intersect (internal, cut))); + ped_constraint_destroy (cut); + } + + ped_constraint_destroy (internal); + + if (solution) { + ped_geometry_set (&part->geom, solution->start, + solution->length); + ped_geometry_destroy (solution); + return 1; + } + + return 0; +} + +static int +atari_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + PED_ASSERT (part != NULL); + + switch (part->type) { + case PED_PARTITION_LOGICAL: + if (_ped_partition_attempt_align (part, constraint, + atr_log_constraint (part) ) ) + return 1; + break; + case PED_PARTITION_EXTENDED: + if (atr_prim_align (part, constraint, + atr_ext_constraint (part) ) ) + return 1; + break; + default: + if (atr_prim_align (part, constraint, + atr_prim_constraint (part) ) ) + return 1; + break; + } + +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + return 0; +} + +/* increment numbers of any non logical partition found after the last */ +/* logical one, to make room for a new logical partition */ +static int +art_room_for_logic (PedDisk* disk) +{ + PedPartition* part; + int num, last_logic, last; + + /* too many partitions ? */ + last = ped_disk_get_last_partition_num (disk); + if (last >= MAXIMUM_PARTS) + return 0; + + /* find the last logical partition */ + last_logic = 0; + for (num = 1; num <= last; num++) { + part = ped_disk_get_partition (disk, num); + if (part && ped_partition_is_active (part) + && (part->type & PED_PARTITION_LOGICAL)) + last_logic = num; + } + + if (!last_logic) + return 1; + + /* increment */ + for (num = last; num > last_logic; num--) { + part = ped_disk_get_partition (disk, num); + if (part && ped_partition_is_active (part) + && !(part->type & ( PED_PARTITION_LOGICAL + | PED_PARTITION_EXTENDED)) + && part->num > 0 ) + part->num++; + } + + return 1; +} + +static int +atari_partition_enumerate (PedPartition* part) +{ + AtariDisk* atrdisk; + PedPartition* ext_part; + PedPartition* log; + int i, want_icd, want_xgm, num_max, xgm_begin, prim_count; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + atrdisk = ATARI_DISK (part->disk); + PED_ASSERT (atrdisk != NULL); + + /* WARNING: some similar/related code in atari_write */ + /* This is quite a : this function is probably the only way */ + /* to know something has been / is going to be modified in the table.*/ + /* So we detect the current operation mode (AHDI/XGM/ICD) and report */ + /* errors (in which case we refuse to operate...) */ + + prim_count = ped_disk_get_primary_partition_count (part->disk); + ext_part = ped_disk_extended_partition (part->disk); + + /* : we can't reorder (yet) , so if we begin with */ + /* XGM the first slot must be empty */ + xgm_begin = ((log = ped_disk_get_partition (part->disk, 1)) + && (log->type & PED_PARTITION_LOGICAL)) + || ((part->num == -1) + && (part->type & PED_PARTITION_LOGICAL) + && !ped_disk_get_partition (part->disk, 1)); + /* */ + + PED_ASSERT (atrdisk->format != FMT_ICD || ext_part == NULL); + PED_ASSERT (atrdisk->format != FMT_XGM + || prim_count + xgm_begin <= N_AHDI); + PED_ASSERT (atrdisk->format != FMT_AHDI + || (ext_part == NULL && prim_count + xgm_begin <= N_AHDI)); + + want_icd = ( ( prim_count + + xgm_begin + + ( (part->num == -1) + && !(part->type & PED_PARTITION_LOGICAL) ) ) + > N_AHDI ); + want_xgm = ( (part->type & PED_PARTITION_EXTENDED) + || ext_part != NULL ); + + if (!want_xgm && !want_icd) + atrdisk->format = FMT_AHDI; + else if (want_xgm && !want_icd) + atrdisk->format = FMT_XGM; + else if (!want_xgm && want_icd) + atrdisk->format = FMT_ICD; + else { + if (atr_xgm_in_icd (part->disk, PED_PARTITION_EXTENDED)) + return 0; + else { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("You can't use more than %d primary partitions " + "(ICD mode) if you use an extended XGM " + "partition. If XGM is the first partition " + "it counts for two."), + N_AHDI ); + return 0; + } + } + /* End of */ + + + /* Ext will be numbered 0 and will stay 0... */ + if (part->num == 0) + return 1; + + if (part->num == -1) { + + /* Linux don't show the ext part itself for Atari disk labels */ + /* so we use number 0 (could use a big number too, but that */ + /* would be less cute ;) */ + if (part->type & PED_PARTITION_EXTENDED) { + part->num = 0; + return 1; + } + + switch (atrdisk->format) { + case FMT_AHDI: + case FMT_ICD: + num_max = N_ICD + N_AHDI; + break; + case FMT_XGM: + num_max = MAXIMUM_PARTS; + break; + default: + num_max = 0; + PED_ASSERT (0); + } + + /* make room for logical partitions */ + if (part->type & PED_PARTITION_LOGICAL) { + if (!art_room_for_logic (part->disk)) + goto error_alloc_failed; + } + + /* find an unused number */ + for (i = 1; i <= num_max; i++) { + if (!ped_disk_get_partition (part->disk, i)) { + part->num = i; + return 1; + } + } + + } else { + /* find an unused number before or don't re-number */ + for (i = 1; i < part->num; i++) { + if (!ped_disk_get_partition (part->disk, i)) { + part->num = i; + } + } + return 1; + } + + /* failed to allocate a number */ +error_alloc_failed: +#ifndef DISCOVER_ONLY + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Unable to allocate a partition number.")); +#endif + return 0; +} + +static int +atr_creat_add_metadata (PedDisk* disk, PedSector start, PedSector end, + PedPartitionType type ) +{ + PedPartition* new_part; + PedConstraint* const_exact; + int added; + + type |= PED_PARTITION_METADATA; + new_part = ped_partition_new (disk, type, NULL, start, end); + if (!new_part) + goto error; + + const_exact = ped_constraint_exact (&new_part->geom); + added = ped_disk_add_partition (disk, new_part, const_exact); + ped_constraint_destroy (const_exact); + if (!added) + goto error_destroy_part; + + return 1; + +error_destroy_part: + ped_partition_destroy (new_part); +error: + return 0; +} + +static int +atari_alloc_metadata (PedDisk* disk) +{ + PedPartition* ext; + PedPartition* log; + AtariDisk* atr_disk; + int i; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + atr_disk = ATARI_DISK (disk); + PED_ASSERT (atr_disk != NULL); + + /* allocate 1 sector for the disk label at the start */ + if (!atr_creat_add_metadata (disk, 0, 0, 0)) + return 0; + + /* allocate the sectors containing the BSL */ + if (atr_disk->bsl_start || atr_disk->bsl_count) { + if (!atr_creat_add_metadata (disk, atr_disk->bsl_start, + atr_disk->bsl_start + + atr_disk->bsl_count - 1, 0 ) ) + return 0; + } + + ext = ped_disk_extended_partition (disk); + if (ext) { + if (!atr_creat_add_metadata (disk, ext->geom.start, + ext->geom.start, + PED_PARTITION_LOGICAL ) ) + return 0; + + /* Find the first logical part */ + for (i = 1; i <= ped_disk_get_last_partition_num (disk); i++) + if ((log = ped_disk_get_partition (disk, i)) + && (log->type & PED_PARTITION_LOGICAL)) + break; + + for (log = ext->part_list; log; log = log->next) { + if ((log->type & ( PED_PARTITION_METADATA + | PED_PARTITION_FREESPACE)) + || log->num == i) + continue; + + if (!atr_creat_add_metadata (disk, log->geom.start-1, + log->geom.start-1, + PED_PARTITION_LOGICAL ) ) + return 0; + } + } + + return 1; +} + +static int _GL_ATTRIBUTE_PURE +atari_get_max_primary_partition_count (const PedDisk* disk) +{ + AtariDisk* atr_disk; + + PED_ASSERT (disk != NULL); + atr_disk = ATARI_DISK (disk); + PED_ASSERT (atr_disk != NULL); + + return atr_disk->format == FMT_XGM ? N_AHDI : N_AHDI + N_ICD; +} + +static bool +atari_get_max_supported_partition_count (const PedDisk* disk, int *max_n) +{ + AtariDisk* atr_disk; + + PED_ASSERT (disk != NULL); + atr_disk = ATARI_DISK (disk); + PED_ASSERT (atr_disk != NULL); + + *max_n = atr_disk->format == FMT_XGM ? N_AHDI : N_AHDI + N_ICD; + return true; +} + +#include "pt-common.h" +PT_define_limit_functions(atari) + +static PedDiskOps atari_disk_ops = { + clobber: NULL_IF_DISCOVER_ONLY (atari_clobber), + write: NULL_IF_DISCOVER_ONLY (atari_write), + + partition_set_name: NULL, + partition_get_name: NULL, + + PT_op_function_initializers (atari) +}; + +static PedDiskType atari_disk_type = { + next: NULL, + name: "atari", + ops: &atari_disk_ops, + features: PED_DISK_TYPE_EXTENDED +}; + +void +ped_disk_atari_init () +{ + PED_ASSERT (sizeof (AtariRawPartition) == 12); + PED_ASSERT (sizeof (AtariRawTable) == 512); + /* GNU Libc doesn't support NULL instead of the locale name */ + PED_ASSERT ((atr_c_locale = newlocale(LC_ALL_MASK, "C", NULL)) != NULL); + + ped_disk_type_register (&atari_disk_type); +} + +void +ped_disk_atari_done () +{ + ped_disk_type_unregister (&atari_disk_type); + freelocale(atr_c_locale); +} diff --git a/jni/parted/libparted/labels/bsd.c b/jni/parted/libparted/labels/bsd.c new file mode 100755 index 0000000..38bc64c --- /dev/null +++ b/jni/parted/libparted/labels/bsd.c @@ -0,0 +1,654 @@ +/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + + libparted - a library for manipulating disk partitions + Copyright (C) 2000-2001, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . + + Contributor: Matt Wilson +*/ + +#include + +#include +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "misc.h" +#include "pt-tools.h" + +/* struct's & #define's stolen from libfdisk, which probably came from + * Linux... + */ + +#define BSD_DISKMAGIC (0x82564557UL) /* The disk magic number */ +#define BSD_MAXPARTITIONS 8 +#define BSD_FS_UNUSED 0 /* disklabel unused partition entry ID */ + +#define BSD_DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */ +#define BSD_DTYPE_MSCP 2 /* MSCP */ +#define BSD_DTYPE_DEC 3 /* other DEC (rk, rl) */ +#define BSD_DTYPE_SCSI 4 /* SCSI */ +#define BSD_DTYPE_ESDI 5 /* ESDI interface */ +#define BSD_DTYPE_ST506 6 /* ST506 etc. */ +#define BSD_DTYPE_HPIB 7 /* CS/80 on HP-IB */ +#define BSD_DTYPE_HPFL 8 /* HP Fiber-link */ +#define BSD_DTYPE_FLOPPY 10 /* floppy */ + +#define BSD_BBSIZE 8192 /* size of boot area, with label */ +#define BSD_SBSIZE 8192 /* max size of fs superblock */ + +typedef struct _BSDRawPartition BSDRawPartition; +typedef struct _BSDRawLabel BSDRawLabel; +typedef struct _BSDDiskData BSDDiskData; + +struct _BSDRawPartition { /* the partition table */ + uint32_t p_size; /* number of sectors in partition */ + uint32_t p_offset; /* starting sector */ + uint32_t p_fsize; /* file system basic fragment size */ + uint8_t p_fstype; /* file system type, see below */ + uint8_t p_frag; /* file system fragments per block */ + uint16_t p_cpg; /* file system cylinders per group */ +} __attribute__((packed)); + +struct _BSDRawLabel { + uint32_t d_magic; /* the magic number */ + int16_t d_type; /* drive type */ + int16_t d_subtype; /* controller/d_type specific */ + int8_t d_typename[16]; /* type name, e.g. "eagle" */ + int8_t d_packname[16]; /* pack identifier */ + uint32_t d_secsize; /* # of bytes per sector */ + uint32_t d_nsectors; /* # of data sectors per track */ + uint32_t d_ntracks; /* # of tracks per cylinder */ + uint32_t d_ncylinders; /* # of data cylinders per unit */ + uint32_t d_secpercyl; /* # of data sectors per cylinder */ + uint32_t d_secperunit; /* # of data sectors per unit */ + uint16_t d_sparespertrack; /* # of spare sectors per track */ + uint16_t d_sparespercyl; /* # of spare sectors per cylinder */ + uint32_t d_acylinders; /* # of alt. cylinders per unit */ + uint16_t d_rpm; /* rotational speed */ + uint16_t d_interleave; /* hardware sector interleave */ + uint16_t d_trackskew; /* sector 0 skew, per track */ + uint16_t d_cylskew; /* sector 0 skew, per cylinder */ + uint32_t d_headswitch; /* head switch time, usec */ + uint32_t d_trkseek; /* track-to-track seek, usec */ + uint32_t d_flags; /* generic flags */ +#define NDDATA 5 + uint32_t d_drivedata[NDDATA]; /* drive-type specific information */ +#define NSPARE 5 + uint32_t d_spare[NSPARE]; /* reserved for future use */ + uint32_t d_magic2; /* the magic number (again) */ + uint16_t d_checksum; /* xor of data incl. partitions */ + + /* file system and partition information: */ + uint16_t d_npartitions; /* number of partitions in following */ + uint32_t d_bbsize; /* size of boot area at sn0, bytes */ + uint32_t d_sbsize; /* max size of fs superblock, bytes */ +#define D_PARTITIONS_WORDS 59 + BSDRawPartition d_partitions[BSD_MAXPARTITIONS]; /* actually may be more */ +} __attribute__((packed, aligned(2))); + +struct _BSDDiskData { + char boot_code[64]; + BSDRawLabel label; /* label is offset by 64 bytes */ + char unused[172]; /* May contain more partitions */ +} __attribute__((packed, aligned(2))); + +typedef struct { + uint8_t type; + int boot; + int raid; + int lvm; +} BSDPartitionData; + +static PedDiskType bsd_disk_type; + +/* XXX fixme: endian? */ +static unsigned short +xbsd_dkcksum (BSDRawLabel *lp) { + const u_short* word = (u_short*)(lp); + const u_short* end = word + D_PARTITIONS_WORDS + PED_LE16_TO_CPU(lp->d_npartitions); + u_short sum; + + lp->d_checksum = 0; + for(sum=0; word < end; word++) + sum ^= PED_LE16_TO_CPU(*word); + return sum; +} + +/* XXX fixme: endian? */ +static void +alpha_bootblock_checksum (void *boot) { + uint64_t* dp = (uint64_t *)boot; + uint64_t sum=0; + int i; + + for (i = 0; i < 63; i++) + sum += dp[i]; + dp[63] = sum; +} + +static int +bsd_probe (const PedDevice *dev) +{ + BSDRawLabel *label; + + PED_ASSERT (dev != NULL); + + if (dev->sector_size < 512) + return 0; + + void *s0; + if (!ptt_read_sector (dev, 0, &s0)) + return 0; + + label = &((BSDDiskData*) s0)->label; + + /* check magic */ + bool found = PED_LE32_TO_CPU (label->d_magic) == BSD_DISKMAGIC; + free (s0); + return found; +} + +static PedDisk* +bsd_alloc (const PedDevice* dev) +{ + PedDisk* disk; + BSDDiskData* bsd_specific; + BSDRawLabel *label; + + PED_ASSERT(dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0); + + disk = _ped_disk_alloc ((PedDevice*)dev, &bsd_disk_type); + if (!disk) + goto error; + disk->disk_specific = bsd_specific = ped_calloc (sizeof (BSDDiskData)); + if (!bsd_specific) + goto error_free_disk; + + /* Initialize the disk label's default values */ + label = &bsd_specific->label; + label->d_magic = PED_CPU_TO_LE32 (BSD_DISKMAGIC); + label->d_type = PED_CPU_TO_LE16 (BSD_DTYPE_SCSI); + label->d_flags = 0; + label->d_secsize = PED_CPU_TO_LE16 (dev->sector_size); + label->d_nsectors = PED_CPU_TO_LE32 (dev->bios_geom.sectors); + label->d_ntracks = PED_CPU_TO_LE32 (dev->bios_geom.heads); + label->d_ncylinders = PED_CPU_TO_LE32 (dev->bios_geom.cylinders); + label->d_secpercyl = PED_CPU_TO_LE32 (dev->bios_geom.sectors + * dev->bios_geom.heads); + label->d_secperunit + = PED_CPU_TO_LE32 (dev->bios_geom.sectors + * dev->bios_geom.heads + * dev->bios_geom.cylinders); + + label->d_rpm = PED_CPU_TO_LE16 (3600); + label->d_interleave = PED_CPU_TO_LE16 (1); + label->d_trackskew = 0; + label->d_cylskew = 0; + label->d_headswitch = 0; + label->d_trkseek = 0; + + label->d_magic2 = PED_CPU_TO_LE32 (BSD_DISKMAGIC); + label->d_bbsize = PED_CPU_TO_LE32 (BSD_BBSIZE); + label->d_sbsize = PED_CPU_TO_LE32 (BSD_SBSIZE); + + label->d_npartitions = 0; + label->d_checksum = xbsd_dkcksum (label); + + return disk; + +error_free_disk: + free (disk); +error: + return NULL; +} + +static PedDisk* +bsd_duplicate (const PedDisk* disk) +{ + PedDisk* new_disk; + BSDDiskData* new_bsd_data; + BSDDiskData* old_bsd_data = (BSDDiskData*) disk->disk_specific; + + new_disk = ped_disk_new_fresh (disk->dev, &bsd_disk_type); + if (!new_disk) + return NULL; + + new_bsd_data = (BSDDiskData*) new_disk->disk_specific; + memcpy (new_bsd_data, old_bsd_data, sizeof(BSDDiskData)); + return new_disk; +} + +static void +bsd_free (PedDisk* disk) +{ + free (disk->disk_specific); + _ped_disk_free (disk); +} + +static int +bsd_read (PedDisk* disk) +{ + BSDDiskData* bsd_specific = (BSDDiskData*) disk->disk_specific; + BSDRawLabel* label; + int i; + + ped_disk_delete_all (disk); + + void *s0; + if (!ptt_read_sector (disk->dev, 0, &s0)) + return 0; + + memcpy (bsd_specific, s0, sizeof (BSDDiskData)); + free (s0); + + label = &bsd_specific->label; + + for (i = 1; i <= BSD_MAXPARTITIONS; i++) { + PedPartition* part; + BSDPartitionData* bsd_part_data; + PedSector start; + PedSector end; + + if (!label->d_partitions[i - 1].p_size + || !label->d_partitions[i - 1].p_fstype) + continue; + start = PED_LE32_TO_CPU(label->d_partitions[i - 1].p_offset); + end = PED_LE32_TO_CPU(label->d_partitions[i - 1].p_offset) + + PED_LE32_TO_CPU(label->d_partitions[i - 1].p_size) - 1; + part = ped_partition_new (disk, PED_PARTITION_NORMAL, + NULL, start, end); + if (!part) + goto error; + bsd_part_data = part->disk_specific; + bsd_part_data->type = label->d_partitions[i - 1].p_fstype; + part->num = i; + part->fs_type = ped_file_system_probe (&part->geom); + + PedConstraint *constraint_exact + = ped_constraint_exact (&part->geom); + if (constraint_exact == NULL) + goto error; + bool ok = ped_disk_add_partition (disk, part, constraint_exact); + ped_constraint_destroy (constraint_exact); + if (!ok) + goto error; + } + + return 1; + +error: + return 0; +} + +static void +_probe_and_add_boot_code (const PedDisk* disk) +{ + BSDDiskData *old_data; + + void *s0; + if (!ptt_read_sector (disk->dev, 0, &s0)) + return; + old_data = (BSDDiskData*) s0; + if (old_data->boot_code [0] + && old_data->label.d_magic == PED_CPU_TO_LE32 (BSD_DISKMAGIC)) { + BSDDiskData *bsd_specific = (BSDDiskData*) disk->disk_specific; + memcpy (bsd_specific, old_data, sizeof (BSDDiskData)); + } + free (s0); +} + +#ifndef DISCOVER_ONLY +static int +bsd_write (const PedDisk* disk) +{ + BSDDiskData* bsd_specific; + BSDRawLabel* label; + BSDPartitionData* bsd_data; + PedPartition* part; + int i; + int max_part = 0; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + bsd_specific = (BSDDiskData*) disk->disk_specific; + label = &bsd_specific->label; + + if (!bsd_specific->boot_code[0]) + _probe_and_add_boot_code (disk); + + memset (label->d_partitions, 0, + sizeof (BSDRawPartition) * BSD_MAXPARTITIONS); + + for (i = 1; i <= BSD_MAXPARTITIONS; i++) { + part = ped_disk_get_partition (disk, i); + if (!part) + continue; + bsd_data = part->disk_specific; + label->d_partitions[i - 1].p_fstype = bsd_data->type; + label->d_partitions[i - 1].p_offset + = PED_CPU_TO_LE32 (part->geom.start); + label->d_partitions[i - 1].p_size + = PED_CPU_TO_LE32 (part->geom.length); + max_part = i; + } + + label->d_npartitions = PED_CPU_TO_LE16 (max_part + 1); + label->d_checksum = xbsd_dkcksum (label); + + alpha_bootblock_checksum (bsd_specific); + + if (!ptt_write_sector (disk, bsd_specific, + sizeof (BSDDiskData))) + goto error; + return ped_device_sync (disk->dev); + +error: + return 0; +} +#endif /* !DISCOVER_ONLY */ + +static PedPartition* +bsd_partition_new (const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + PedPartition* part; + BSDPartitionData* bsd_data; + + part = _ped_partition_alloc (disk, part_type, fs_type, start, end); + if (!part) + goto error; + + if (ped_partition_is_active (part)) { + part->disk_specific + = bsd_data = ped_malloc (sizeof (BSDPartitionData)); + if (!bsd_data) + goto error_free_part; + bsd_data->type = 0; + bsd_data->boot = 0; + bsd_data->raid = 0; + bsd_data->lvm = 0; + } else { + part->disk_specific = NULL; + } + return part; + +error_free_part: + free (part); +error: + return 0; +} + +static PedPartition* +bsd_partition_duplicate (const PedPartition* part) +{ + PedPartition* new_part; + BSDPartitionData* new_bsd_data; + BSDPartitionData* old_bsd_data; + + new_part = ped_partition_new (part->disk, part->type, + part->fs_type, part->geom.start, + part->geom.end); + if (!new_part) + return NULL; + new_part->num = part->num; + + old_bsd_data = (BSDPartitionData*) part->disk_specific; + new_bsd_data = (BSDPartitionData*) new_part->disk_specific; + new_bsd_data->type = old_bsd_data->type; + new_bsd_data->boot = old_bsd_data->boot; + new_bsd_data->raid = old_bsd_data->raid; + new_bsd_data->lvm = old_bsd_data->lvm; + return new_part; +} + +static void +bsd_partition_destroy (PedPartition* part) +{ + PED_ASSERT (part != NULL); + + if (ped_partition_is_active (part)) + free (part->disk_specific); + _ped_partition_free (part); +} + +static int +bsd_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type) +{ + BSDPartitionData* bsd_data = part->disk_specific; + + part->fs_type = fs_type; + + if (!fs_type) + bsd_data->type = 0x8; + else if (is_linux_swap (fs_type->name)) + bsd_data->type = 0x1; + else + bsd_data->type = 0x8; + + return 1; +} + +static int +bsd_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + BSDPartitionData* bsd_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + PED_ASSERT (part->disk != NULL); + + bsd_data = part->disk_specific; + + switch (flag) { + case PED_PARTITION_BOOT: + bsd_data->boot = state; + return 1; + case PED_PARTITION_RAID: + if (state) { + bsd_data->lvm = 0; + } + bsd_data->raid = state; + return 1; + case PED_PARTITION_LVM: + if (state) { + bsd_data->raid = 0; + } + bsd_data->lvm = state; + return 1; + default: + ; + } + return 0; +} + +static int _GL_ATTRIBUTE_PURE +bsd_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + BSDPartitionData* bsd_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + bsd_data = part->disk_specific; + switch (flag) { + case PED_PARTITION_BOOT: + return bsd_data->boot; + + case PED_PARTITION_RAID: + return bsd_data->raid; + + case PED_PARTITION_LVM: + return bsd_data->lvm; + + default: + ; + } + return 0; +} + +static int +bsd_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + switch (flag) { + case PED_PARTITION_BOOT: + case PED_PARTITION_RAID: + case PED_PARTITION_LVM: + return 1; + default: + ; + } + return 0; +} + + +static int +bsd_get_max_primary_partition_count (const PedDisk* disk) +{ + return BSD_MAXPARTITIONS; +} + +static bool +bsd_get_max_supported_partition_count(const PedDisk* disk, int *max_n) +{ + *max_n = BSD_MAXPARTITIONS; + return true; +} + +static PedConstraint* +_get_constraint (const PedDevice* dev) +{ + PedGeometry max; + + ped_geometry_init (&max, dev, 1, dev->length - 1); + return ped_constraint_new_from_max (&max); +} + +static int +bsd_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + if (_ped_partition_attempt_align (part, constraint, + _get_constraint (part->disk->dev))) + return 1; + +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + return 0; +} + +static int +bsd_partition_enumerate (PedPartition* part) +{ + int i; + PedPartition* p; + + /* never change the partition numbers */ + if (part->num != -1) + return 1; + for (i = 1; i <= BSD_MAXPARTITIONS; i++) { + p = ped_disk_get_partition (part->disk, i); + if (!p) { + part->num = i; + return 1; + } + } + + /* failed to allocate a number */ +#ifndef DISCOVER_ONLY + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Unable to allocate a bsd disklabel slot.")); +#endif + return 0; +} + +static int +bsd_alloc_metadata (PedDisk* disk) +{ + PedPartition* new_part; + PedConstraint* constraint_any = NULL; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + constraint_any = ped_constraint_any (disk->dev); + + /* allocate 1 sector for the disk label at the start */ + new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL, 0, 0); + if (!new_part) + goto error; + + if (!ped_disk_add_partition (disk, new_part, constraint_any)) { + ped_partition_destroy (new_part); + goto error; + } + + ped_constraint_destroy (constraint_any); + return 1; +error: + ped_constraint_destroy (constraint_any); + return 0; +} + +#include "pt-common.h" +PT_define_limit_functions (bsd) + +static PedDiskOps bsd_disk_ops = { + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (bsd_write), + + partition_set_name: NULL, + partition_get_name: NULL, + + PT_op_function_initializers (bsd) +}; + +static PedDiskType bsd_disk_type = { + next: NULL, + name: "bsd", + ops: &bsd_disk_ops, + features: 0 +}; + +void +ped_disk_bsd_init () +{ + PED_ASSERT (sizeof (BSDRawPartition) == 16); + PED_ASSERT (sizeof (BSDRawLabel) == 276); + + ped_disk_type_register (&bsd_disk_type); +} + +void +ped_disk_bsd_done () +{ + ped_disk_type_unregister (&bsd_disk_type); +} diff --git a/jni/parted/libparted/labels/dasd.c b/jni/parted/libparted/labels/dasd.c new file mode 100755 index 0000000..1d99458 --- /dev/null +++ b/jni/parted/libparted/labels/dasd.c @@ -0,0 +1,1032 @@ +/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + + libparted - a library for manipulating disk partitions + Copyright (C) 2000-2001, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . + + Contributor: Phil Knirsch + Harald Hoyer +*/ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#if ENABLE_NLS +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "misc.h" +#include "pt-tools.h" + +#define PARTITION_LINUX_SWAP 0x82 +#define PARTITION_LINUX 0x83 +#define PARTITION_LINUX_LVM 0x8e +#define PARTITION_LINUX_RAID 0xfd + +extern void ped_disk_dasd_init (); +extern void ped_disk_dasd_done (); + +#define DASD_NAME "dasd" + +typedef struct { + int type; + int system; +} DasdPartitionData; + +typedef struct { + unsigned int format_type; + unsigned int label_block; + volume_label_t vlabel; +} DasdDiskSpecific; + +static int dasd_probe (const PedDevice *dev); +static int dasd_read (PedDisk* disk); +static int dasd_write (const PedDisk* disk); + +static PedPartition* dasd_partition_new (const PedDisk* disk, + PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, + PedSector end); +static PedPartition* dasd_partition_duplicate (const PedPartition *part); +static void dasd_partition_destroy (PedPartition* part); +static int dasd_partition_set_flag (PedPartition* part, + PedPartitionFlag flag, + int state); +static int dasd_partition_get_flag (const PedPartition* part, + PedPartitionFlag flag); +static int dasd_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag); +static int dasd_partition_align (PedPartition* part, + const PedConstraint* constraint); +static int dasd_partition_enumerate (PedPartition* part); +static int dasd_get_max_primary_partition_count (const PedDisk* disk); +static bool dasd_get_max_supported_partition_count (const PedDisk* disk, int *max_n); +static PedAlignment *dasd_get_partition_alignment(const PedDisk *disk); + +static PedDisk* dasd_alloc (const PedDevice* dev); +static PedDisk* dasd_duplicate (const PedDisk* disk); +static void dasd_free (PedDisk* disk); +static int dasd_partition_set_system (PedPartition* part, + const PedFileSystemType* fs_type); +static int dasd_alloc_metadata (PedDisk* disk); + +#include "pt-common.h" +PT_define_limit_functions (dasd) + +static PedDiskOps dasd_disk_ops = { + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (dasd_write), + + partition_set_name: NULL, + partition_get_name: NULL, + partition_set_type_id: NULL, + partition_get_type_id: NULL, + partition_set_type_uuid: NULL, + partition_get_type_uuid: NULL, + + get_partition_alignment: dasd_get_partition_alignment, + + PT_op_function_initializers (dasd) +}; + +static PedDiskType dasd_disk_type = { + next: NULL, + name: "dasd", + ops: &dasd_disk_ops, + features: 0 +}; + +struct flag_id_mapping_t +{ + enum _PedPartitionFlag flag; + int type_id; +}; + +static const struct flag_id_mapping_t flag_id_mapping[] = +{ + { PED_PARTITION_LVM, PARTITION_LINUX_LVM }, + { PED_PARTITION_RAID, PARTITION_LINUX_RAID }, + { PED_PARTITION_SWAP, PARTITION_LINUX_SWAP }, +}; + +static const struct flag_id_mapping_t* _GL_ATTRIBUTE_CONST +dasd_find_flag_id_mapping (PedPartitionFlag flag) +{ + int n = sizeof(flag_id_mapping) / sizeof(flag_id_mapping[0]); + + for (int i = 0; i < n; ++i) + if (flag_id_mapping[i].flag == flag) + return &flag_id_mapping[i]; + + return NULL; +} + +static PedDisk* +dasd_alloc (const PedDevice* dev) +{ + PedDisk* disk; + LinuxSpecific* arch_specific; + DasdDiskSpecific *disk_specific; + char volser[7]; + + PED_ASSERT (dev != NULL); + + arch_specific = LINUX_SPECIFIC (dev); + disk = _ped_disk_alloc (dev, &dasd_disk_type); + if (!disk) + return NULL; + + disk->disk_specific = disk_specific = ped_malloc(sizeof(DasdDiskSpecific)); + if (!disk->disk_specific) { + free (disk); + return NULL; + } + + /* CDL format, newer */ + disk_specific->format_type = 2; + disk_specific->label_block = 2; + + /* Setup volume label (for fresh disks) */ + snprintf(volser, sizeof(volser), "0X%04X", arch_specific->devno); + vtoc_volume_label_init(&disk_specific->vlabel); + vtoc_volume_label_set_key(&disk_specific->vlabel, "VOL1"); + vtoc_volume_label_set_label(&disk_specific->vlabel, "VOL1"); + vtoc_volume_label_set_volser(&disk_specific->vlabel, volser); + vtoc_set_cchhb(&disk_specific->vlabel.vtoc, + VTOC_START_CC, VTOC_START_HH, 0x01); + + return disk; +} + +static PedDisk* +dasd_duplicate (const PedDisk* disk) +{ + PedDisk* new_disk; + + new_disk = ped_disk_new_fresh(disk->dev, &dasd_disk_type); + + if (!new_disk) + return NULL; + + memcpy(new_disk->disk_specific, disk->disk_specific, + sizeof(DasdDiskSpecific)); + + return new_disk; +} + +static void +dasd_free (PedDisk* disk) +{ + PED_ASSERT(disk != NULL); + /* Don't free disk->disk_specific first, in case _ped_disk_free + or one of its eventual callees ever accesses it. */ + void *p = disk->disk_specific; + _ped_disk_free(disk); + free(p); +} + + +void +ped_disk_dasd_init () +{ + ped_disk_type_register(&dasd_disk_type); +} + +void +ped_disk_dasd_done () +{ + ped_disk_type_unregister(&dasd_disk_type); +} + +static int +dasd_probe (const PedDevice *dev) +{ + LinuxSpecific* arch_specific; + struct fdasd_anchor anchor; + + PED_ASSERT(dev != NULL); + + arch_specific = LINUX_SPECIFIC(dev); + + /* add partition test here */ + fdasd_initialize_anchor(&anchor); + + if (fdasd_get_geometry(dev, &anchor, arch_specific->fd) == 0) + goto error_cleanup; + + /* Labels are required on CDL formatted DASDs. */ + if (fdasd_check_volume(&anchor, arch_specific->fd) && + anchor.FBA_layout == 0) + goto error_cleanup; + + fdasd_cleanup(&anchor); + + return 1; + + error_cleanup: + fdasd_cleanup(&anchor); + ped_exception_throw(PED_EXCEPTION_ERROR,PED_EXCEPTION_IGNORE_CANCEL, + "Error while probing device %s.", dev->path); + + return 0; +} + +static int +dasd_read (PedDisk* disk) +{ + int i; + char str[20]; + PedDevice* dev; + PedPartition* part; + PedFileSystemType *fs; + PedSector start, end; + PedConstraint* constraint_exact; + partition_info_t *p; + LinuxSpecific* arch_specific; + DasdDiskSpecific* disk_specific; + struct fdasd_anchor anchor; + + PDEBUG; + + PED_ASSERT (disk != NULL); + PDEBUG; + PED_ASSERT (disk->dev != NULL); + PDEBUG; + + dev = disk->dev; + + arch_specific = LINUX_SPECIFIC(dev); + disk_specific = disk->disk_specific; + + PDEBUG; + + fdasd_initialize_anchor(&anchor); + + if (fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd) == 0) + goto error_close_dev; + + disk_specific->label_block = anchor.label_block; + + if ((anchor.geo.cylinders * anchor.geo.heads) > BIG_DISK_SIZE) + anchor.big_disk++; + + /* check dasd for labels and vtoc */ + if (fdasd_check_volume(&anchor, arch_specific->fd)) { + DasdPartitionData* dasd_data; + + /* Kernel partitioning code will report 'implicit' partitions + * for non-CDL format DASDs even when there is no + * label/VTOC. */ + if (anchor.FBA_layout == 0) + goto error_close_dev; + + disk_specific->format_type = 1; + + /* Register implicit partition */ + ped_disk_delete_all (disk); + + start = (PedSector) arch_specific->real_sector_size / + (PedSector) disk->dev->sector_size * + (PedSector) (anchor.label_block + 1); + end = disk->dev->length - 1; + part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL, + start, end); + if (!part) + goto error_close_dev; + + part->num = 1; + part->fs_type = ped_file_system_probe (&part->geom); + dasd_data = part->disk_specific; + dasd_data->type = 0; + + if (!ped_disk_add_partition (disk, part, NULL)) + goto error_close_dev; + + fdasd_cleanup(&anchor); + + return 1; + } + + /* Save volume label (read by fdasd_check_volume) for writing */ + memcpy(&disk_specific->vlabel, anchor.vlabel, sizeof(volume_label_t)); + + ped_disk_delete_all (disk); + + bool is_ldl = strncmp(anchor.vlabel->volkey, + vtoc_ebcdic_enc("LNX1", str, 4), 4) == 0; + bool is_cms = strncmp(anchor.vlabel->volkey, + vtoc_ebcdic_enc("CMS1", str, 4), 4) == 0; + if (is_ldl || is_cms) { + DasdPartitionData* dasd_data; + + union vollabel { + volume_label_t ldl; + cms_volume_label_t cms; + }; + union vollabel *cms_ptr1 = (union vollabel *) anchor.vlabel; + cms_volume_label_t *cms_ptr = &cms_ptr1->cms; + volume_label_t *ldl_ptr = &cms_ptr1->ldl; + int partition_start_block; + + disk_specific->format_type = 1; + + if (is_cms && cms_ptr->usable_count >= cms_ptr->block_count) + partition_start_block = 2; /* FBA DASD */ + else + partition_start_block = 3; /* CKD DASD */ + + if (is_ldl) + start = (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size + * (long long) partition_start_block; + else if (cms_ptr->disk_offset == 0) + start = (long long) cms_ptr->block_size + / (long long) disk->dev->sector_size + * (long long) partition_start_block; + else + start = (long long) cms_ptr->block_size + / (long long) disk->dev->sector_size + * (long long) cms_ptr->disk_offset; + + if (is_ldl) + if (ldl_ptr->ldl_version >= 0xf2) + end = (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size + * (long long) ldl_ptr->formatted_blocks - 1; + else + end = disk->dev->length - 1; + else + if (cms_ptr->disk_offset == 0) + end = (long long) cms_ptr->block_size + / (long long) disk->dev->sector_size + * (long long) cms_ptr->block_count - 1; + else + /* + Frankly, I do not understand why the last block + of the CMS reserved file is not included in the + partition; but this is the algorithm used by the + Linux kernel. See fs/partitions/ibm.c in the + Linux kernel source code. + */ + end = (long long) cms_ptr->block_size + / (long long) disk->dev->sector_size + * (long long) (cms_ptr->block_count - 1) - 1; + + part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL, start, end); + if (!part) + goto error_close_dev; + + part->num = 1; + part->fs_type = ped_file_system_probe (&part->geom); + dasd_data = part->disk_specific; + dasd_data->type = 0; + + if (!ped_disk_add_partition (disk, part, NULL)) + goto error_close_dev; + + fdasd_cleanup(&anchor); + + return 1; + } + + /* CDL format, newer */ + disk_specific->format_type = 2; + + p = anchor.first; + PDEBUG; + + for (i = 1 ; i <= USABLE_PARTITIONS; i++) { + char *ch = p->f1->DS1DSNAM; + DasdPartitionData* dasd_data; + + + if (p->used != 0x01) + continue; + + PDEBUG; + + start = (long long)(long long) p->start_trk + * (long long) disk->dev->hw_geom.sectors + * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size; + end = (long long)((long long) p->end_trk + 1) + * (long long) disk->dev->hw_geom.sectors + * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size - 1; + part = ped_partition_new(disk, PED_PARTITION_NORMAL, NULL, + start, end); + PDEBUG; + + if (!part) + goto error_close_dev; + + PDEBUG; + + part->num = i; + part->fs_type = ped_file_system_probe(&part->geom); + + vtoc_ebcdic_dec(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44); + ch = strstr(p->f1->DS1DSNAM, "PART"); + + if (ch != NULL) { + strncpy(str, ch+9, 6); + str[6] = '\0'; + } + + dasd_data = part->disk_specific; + + if (strncmp(PART_TYPE_RAID, str, 6) == 0) + dasd_data->system = PARTITION_LINUX_RAID; + else if (strncmp(PART_TYPE_LVM, str, 6) == 0) + dasd_data->system = PARTITION_LINUX_LVM; + else if (strncmp(PART_TYPE_SWAP, str, 6) == 0) + dasd_data->system = PARTITION_LINUX_SWAP; + + vtoc_ebcdic_enc(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44); + + dasd_data->type = 0; + + constraint_exact = ped_constraint_exact (&part->geom); + if (!constraint_exact) + goto error_close_dev; + if (!ped_disk_add_partition(disk, part, constraint_exact)) { + ped_constraint_destroy(constraint_exact); + goto error_close_dev; + } + ped_constraint_destroy(constraint_exact); + + if (p->fspace_trk > 0) { + start = (long long)((long long) p->end_trk + 1) + * (long long) disk->dev->hw_geom.sectors + * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size; + end = (long long)((long long) p->end_trk + 1 + p->fspace_trk) + * (long long) disk->dev->hw_geom.sectors + * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size - 1; + part = ped_partition_new (disk, PED_PARTITION_NORMAL, + NULL, start, end); + + if (!part) + goto error_close_dev; + + part->type = PED_PARTITION_FREESPACE; + constraint_exact = ped_constraint_exact(&part->geom); + + if (!constraint_exact) + goto error_close_dev; + if (!ped_disk_add_partition(disk, part, constraint_exact)) { + ped_constraint_destroy(constraint_exact); + goto error_close_dev; + } + + ped_constraint_destroy (constraint_exact); + } + + p = p->next; + } + + PDEBUG; + fdasd_cleanup(&anchor); + return 1; + +error_close_dev: + PDEBUG; + fdasd_cleanup(&anchor); + return 0; +} + +static int +dasd_update_type (const PedDisk* disk, struct fdasd_anchor *anchor, + partition_info_t *part_info[USABLE_PARTITIONS]) +{ + PedPartition* part; + LinuxSpecific* arch_specific; + DasdDiskSpecific* disk_specific; + + arch_specific = LINUX_SPECIFIC(disk->dev); + disk_specific = disk->disk_specific; + + PDEBUG; + + unsigned int i; + for (i = 1; i <= USABLE_PARTITIONS; i++) { + partition_info_t *p; + char *ch = NULL; + DasdPartitionData* dasd_data; + + PDEBUG; + + part = ped_disk_get_partition(disk, i); + if (!part) + continue; + + PDEBUG; + + dasd_data = part->disk_specific; + p = part_info[i - 1]; + + if (!p ) { + PDEBUG; + continue; + } + + vtoc_ebcdic_dec(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44); + ch = strstr(p->f1->DS1DSNAM, "PART"); + + PDEBUG; + if (ch == NULL) { + vtoc_ebcdic_enc(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44); + PDEBUG; + continue; + } + + ch += 9; + + switch (dasd_data->system) { + case PARTITION_LINUX_LVM: + PDEBUG; + strncpy(ch, PART_TYPE_LVM, 6); + break; + case PARTITION_LINUX_RAID: + PDEBUG; + strncpy(ch, PART_TYPE_RAID, 6); + break; + case PARTITION_LINUX: + PDEBUG; + strncpy(ch, PART_TYPE_NATIVE, 6); + break; + case PARTITION_LINUX_SWAP: + PDEBUG; + strncpy(ch, PART_TYPE_SWAP, 6); + break; + default: + PDEBUG; + strncpy(ch, PART_TYPE_NATIVE, 6); + break; + } + + anchor->vtoc_changed++; + vtoc_ebcdic_enc(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44); + } + + return 1; +} + +static int +dasd_write (const PedDisk* disk) +{ + DasdPartitionData* dasd_data; + PedPartition* part; + int i; + partition_info_t *p; + LinuxSpecific* arch_specific; + DasdDiskSpecific* disk_specific; + struct fdasd_anchor anchor; + partition_info_t *part_info[USABLE_PARTITIONS]; + + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->dev != NULL); + + arch_specific = LINUX_SPECIFIC (disk->dev); + disk_specific = disk->disk_specific; + + PDEBUG; + + /* If not formated in CDL, don't write anything. */ + if (disk_specific->format_type == 1) { + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The partition table of DASD-LDL device cannot be changed.\n")); + return 1; + } + + /* initialize the anchor */ + fdasd_initialize_anchor(&anchor); + if (fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd) == 0) + goto error; + + fdasd_check_volume(&anchor, arch_specific->fd); + memcpy(anchor.vlabel, &disk_specific->vlabel, sizeof(volume_label_t)); + anchor.vlabel_changed++; + + if ((anchor.geo.cylinders * anchor.geo.heads) > BIG_DISK_SIZE) + anchor.big_disk++; + + fdasd_recreate_vtoc(&anchor); + + for (i = 1; i <= USABLE_PARTITIONS; i++) { + unsigned int start, stop; + + PDEBUG; + part = ped_disk_get_partition(disk, i); + if (!part) + continue; + + PDEBUG; + + start = part->geom.start * disk->dev->sector_size + / arch_specific->real_sector_size / disk->dev->hw_geom.sectors; + stop = (part->geom.end + 1) + * disk->dev->sector_size / arch_specific->real_sector_size + / disk->dev->hw_geom.sectors - 1; + + PDEBUG; + dasd_data = part->disk_specific; + + p = fdasd_add_partition(&anchor, start, stop); + if (!p) { + PDEBUG; + goto error; + } + part_info[i - 1] = p; + p->type = dasd_data->system; + } + + PDEBUG; + + if (!fdasd_prepare_labels(&anchor, arch_specific->fd)) + goto error; + + dasd_update_type(disk, &anchor, part_info); + PDEBUG; + + if (!fdasd_write_labels(&anchor, arch_specific->fd)) + goto error; + + fdasd_cleanup(&anchor); + return 1; + +error: + PDEBUG; + fdasd_cleanup(&anchor); + return 0; +} + +static PedPartition* +dasd_partition_new (const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + PedPartition* part; + + part = _ped_partition_alloc(disk, part_type, fs_type, start, end); + if (!part) + goto error; + + part->disk_specific = ped_calloc (sizeof (DasdPartitionData)); + return part; + +error: + return 0; +} + +static PedPartition* +dasd_partition_duplicate (const PedPartition *part) +{ + PedPartition *new_part; + + new_part = ped_partition_new (part->disk, part->type, part->fs_type, + part->geom.start, part->geom.end); + if (!new_part) + return NULL; + new_part->num = part->num; + + memcpy(new_part->disk_specific, part->disk_specific, + sizeof(DasdPartitionData)); + + return new_part; +} + +static void +dasd_partition_destroy (PedPartition* part) +{ + PED_ASSERT(part != NULL); + + if (ped_partition_is_active(part)) + free(part->disk_specific); + free(part); +} + +static int +dasd_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + DasdPartitionData* dasd_data; + + PED_ASSERT(part != NULL); + PED_ASSERT(part->disk_specific != NULL); + dasd_data = part->disk_specific; + + const struct flag_id_mapping_t* p = dasd_find_flag_id_mapping (flag); + if (p) + { + if (state) + dasd_data->system = p->type_id; + else if (dasd_data->system == p->type_id) + return dasd_partition_set_system (part, part->fs_type); + return 1; + } + + return 0; +} + +static int +dasd_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + DasdPartitionData* dasd_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + dasd_data = part->disk_specific; + + const struct flag_id_mapping_t* p = dasd_find_flag_id_mapping (flag); + if (p) + return dasd_data->system == p->type_id; + + return 0; +} + +/* + * The DASD-LDL does not support flags now. + * So just return 0. +*/ +static int +dasd_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + DasdDiskSpecific* disk_specific; + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk->disk_specific != NULL); + + disk_specific = part->disk->disk_specific; + + if (disk_specific->format_type == 1) + return 0; + + if (dasd_find_flag_id_mapping (flag)) + return 1; + + return 0; +} + + +static int +dasd_get_max_primary_partition_count (const PedDisk* disk) +{ + DasdDiskSpecific* disk_specific; + + disk_specific = disk->disk_specific; + /* If formated in LDL, maximum partition number is 1 */ + if (disk_specific->format_type == 1) + return 1; + + return USABLE_PARTITIONS; +} + +static bool +dasd_get_max_supported_partition_count (const PedDisk* disk, int *max_n) +{ + *max_n = dasd_get_max_primary_partition_count(disk); + return true; +} + +static PedAlignment* +dasd_get_partition_alignment(const PedDisk *disk) +{ + LinuxSpecific *arch_specific = LINUX_SPECIFIC(disk->dev); + PedSector sector_size = + arch_specific->real_sector_size / disk->dev->sector_size; + + return ped_alignment_new(0, disk->dev->hw_geom.sectors * sector_size); +} + +static PedConstraint* +_primary_constraint (PedDisk* disk) +{ + PedAlignment start_align; + PedAlignment end_align; + PedGeometry max_geom; + PedSector sector_size; + LinuxSpecific* arch_specific; + DasdDiskSpecific* disk_specific; + PedSector start; + + PDEBUG; + + arch_specific = LINUX_SPECIFIC (disk->dev); + disk_specific = disk->disk_specific; + sector_size = arch_specific->real_sector_size / disk->dev->sector_size; + + if (!ped_alignment_init (&start_align, 0, + disk->dev->hw_geom.sectors * sector_size)) + return NULL; + if (!ped_alignment_init (&end_align, -1, + disk->dev->hw_geom.sectors * sector_size)) + return NULL; + + start = (FIRST_USABLE_TRK * (long long) disk->dev->hw_geom.sectors + * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size); + + if (!ped_geometry_init (&max_geom, disk->dev, start, disk->dev->length)) + return NULL; + + return ped_constraint_new(&start_align, &end_align, &max_geom, + &max_geom, 1, disk->dev->length); +} + +static int +dasd_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + DasdDiskSpecific* disk_specific; + + PED_ASSERT (part != NULL); + + disk_specific = part->disk->disk_specific; + /* If formated in LDL, ignore metadata partition */ + if (disk_specific->format_type == 1) + return 1; + + if (_ped_partition_attempt_align(part, constraint, + _primary_constraint(part->disk))) + return 1; + +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + + return 0; +} + +static int +dasd_partition_enumerate (PedPartition* part) +{ + int i; + PedPartition* p; + + /* never change the partition numbers */ + if (part->num != -1) + return 1; + + for (i = 1; i <= USABLE_PARTITIONS; i++) { + p = ped_disk_get_partition (part->disk, i); + if (!p) { + part->num = i; + return 1; + } + } + + /* failed to allocate a number */ + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Unable to allocate a dasd disklabel slot")); + return 0; +} + +static int +dasd_partition_set_system (PedPartition* part, + const PedFileSystemType* fs_type) +{ + DasdPartitionData* dasd_data = part->disk_specific; + PedSector cyl_size; + + cyl_size=part->disk->dev->hw_geom.sectors * part->disk->dev->hw_geom.heads; + PDEBUG; + + part->fs_type = fs_type; + + if (!fs_type) { + dasd_data->system = PARTITION_LINUX; + PDEBUG; + } else if (is_linux_swap (fs_type->name)) { + dasd_data->system = PARTITION_LINUX_SWAP; + PDEBUG; + } else { + dasd_data->system = PARTITION_LINUX; + PDEBUG; + } + + return 1; +} + +static int +dasd_alloc_metadata (PedDisk* disk) +{ + PedPartition* new_part; + PedConstraint* constraint_any = NULL; + PedSector vtoc_end; + LinuxSpecific* arch_specific; + DasdDiskSpecific* disk_specific; + PedPartition* part = NULL; /* initialize solely to placate gcc */ + PedPartition* new_part2; + PedSector trailing_meta_start, trailing_meta_end; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + arch_specific = LINUX_SPECIFIC (disk->dev); + disk_specific = disk->disk_specific; + + constraint_any = ped_constraint_any (disk->dev); + + /* For LDL or CMS, the leading metadata ends at the sector before + the start of the first partition */ + if (disk_specific->format_type == 1) { + part = ped_disk_get_partition(disk, 1); + if (part) + vtoc_end = part->geom.start - 1; + else + vtoc_end = (PedSector) arch_specific->real_sector_size / + (PedSector) disk->dev->sector_size * + (PedSector) disk_specific->label_block; + } + else { + if (disk->dev->type == PED_DEVICE_FILE) + arch_specific->real_sector_size = disk->dev->sector_size; + /* Mark the start of the disk as metadata. */ + vtoc_end = (FIRST_USABLE_TRK * (long long) disk->dev->hw_geom.sectors + * (long long) arch_specific->real_sector_size + / (long long) disk->dev->sector_size) - 1; + } + + new_part = ped_partition_new (disk,PED_PARTITION_METADATA,NULL,0,vtoc_end); + if (!new_part) + goto error; + + if (!ped_disk_add_partition (disk, new_part, constraint_any)) { + ped_partition_destroy (new_part); + goto error; + } + + if (disk_specific->format_type == 1 && part) { + /* + For LDL or CMS there may be trailing metadata as well. + For example: the last block of a CMS reserved file, + the "recomp" area of a CMS minidisk that has been + formatted and then formatted again with the RECOMP + option specifying fewer than the maximum number of + cylinders, a disk that was formatted at one size, + backed up, then restored to a larger size disk, etc. + */ + trailing_meta_start = part->geom.end + 1; + trailing_meta_end = (long long) disk->dev->length - 1; + if (trailing_meta_end >= trailing_meta_start) { + new_part2 = ped_partition_new (disk,PED_PARTITION_METADATA, + NULL, trailing_meta_start, trailing_meta_end); + if (!new_part2) { + ped_partition_destroy (new_part); + goto error; + } + if (!ped_disk_add_partition (disk, new_part2, + constraint_any)) { + ped_partition_destroy (new_part2); + ped_partition_destroy (new_part); + goto error; + } + } + } + + ped_constraint_destroy (constraint_any); + return 1; + +error: + ped_constraint_destroy (constraint_any); + return 0; +} diff --git a/jni/parted/libparted/labels/dos.c b/jni/parted/libparted/labels/dos.c new file mode 100755 index 0000000..e6a0105 --- /dev/null +++ b/jni/parted/libparted/labels/dos.c @@ -0,0 +1,2612 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2001, 2004-2005, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "misc.h" +#include "pt-tools.h" + +/* this MBR boot code is loaded into 0000:7c00 by the BIOS. See mbr.s for + * the source, and how to build it + */ + +static const char MBR_BOOT_CODE[] = { + 0xfa, 0xb8, 0x00, 0x10, 0x8e, 0xd0, 0xbc, 0x00, + 0xb0, 0xb8, 0x00, 0x00, 0x8e, 0xd8, 0x8e, 0xc0, + 0xfb, 0xbe, 0x00, 0x7c, 0xbf, 0x00, 0x06, 0xb9, + 0x00, 0x02, 0xf3, 0xa4, 0xea, 0x21, 0x06, 0x00, + 0x00, 0xbe, 0xbe, 0x07, 0x38, 0x04, 0x75, 0x0b, + 0x83, 0xc6, 0x10, 0x81, 0xfe, 0xfe, 0x07, 0x75, + 0xf3, 0xeb, 0x16, 0xb4, 0x02, 0xb0, 0x01, 0xbb, + 0x00, 0x7c, 0xb2, 0x80, 0x8a, 0x74, 0x01, 0x8b, + 0x4c, 0x02, 0xcd, 0x13, 0xea, 0x00, 0x7c, 0x00, + 0x00, 0xeb, 0xfe +}; + +#define MSDOS_MAGIC 0xAA55 +#define PARTITION_MAGIC_MAGIC 0xf6f6 + +/* The maximum number of DOS primary partitions. */ +#define DOS_N_PRI_PARTITIONS 4 + +#define PARTITION_EMPTY 0x00 +#define PARTITION_FAT12 0x01 +#define PARTITION_FAT16_SM 0x04 +#define PARTITION_DOS_EXT 0x05 +#define PARTITION_FAT16 0x06 +#define PARTITION_NTFS 0x07 +#define PARTITION_HPFS 0x07 +#define PARTITION_UDF 0x07 +#define PARTITION_FAT32 0x0b +#define PARTITION_FAT32_LBA 0x0c +#define PARTITION_FAT16_LBA 0x0e +#define PARTITION_EXT_LBA 0x0f + +#define PART_FLAG_HIDDEN 0x10 /* Valid for FAT/NTFS only */ +#define PARTITION_FAT12_H (PARTITION_FAT12 | PART_FLAG_HIDDEN) +#define PARTITION_FAT16_SM_H (PARTITION_FAT16_SM | PART_FLAG_HIDDEN) +#define PARTITION_DOS_EXT_H (PARTITION_DOS_EXT | PART_FLAG_HIDDEN) +#define PARTITION_FAT16_H (PARTITION_FAT16 | PART_FLAG_HIDDEN) +#define PARTITION_NTFS_H (PARTITION_NTFS | PART_FLAG_HIDDEN) +#define PARTITION_FAT32_H (PARTITION_FAT32 | PART_FLAG_HIDDEN) +#define PARTITION_FAT32_LBA_H (PARTITION_FAT32_LBA | PART_FLAG_HIDDEN) +#define PARTITION_FAT16_LBA_H (PARTITION_FAT16_LBA | PART_FLAG_HIDDEN) + +#define PARTITION_COMPAQ_DIAG 0x12 +#define PARTITION_MSFT_RECOVERY 0x27 +#define PARTITION_LDM 0x42 +#define PARTITION_LINUX_SWAP 0x82 +#define PARTITION_LINUX 0x83 +#define PARTITION_IRST 0x84 +#define PARTITION_LINUX_EXT 0x85 +#define PARTITION_LINUX_LVM 0x8e +#define PARTITION_HFS 0xaf +#define PARTITION_SUN_UFS 0xbf +#define PARTITION_DELL_DIAG 0xde +#define PARTITION_BLS_BOOT 0xea +#define PARTITION_GPT 0xee +#define PARTITION_ESP 0xef +#define PARTITION_PALO 0xf0 +#define PARTITION_PREP 0x41 +#define PARTITION_LINUX_RAID 0xfd +#define PARTITION_LINUX_LVM_OLD 0xfe + +struct flag_id_mapping_t +{ + enum _PedPartitionFlag flag; + unsigned char type_id; + unsigned char alt_type_id; +}; + +static const struct flag_id_mapping_t flag_id_mapping[] = +{ + { PED_PARTITION_BLS_BOOT, PARTITION_BLS_BOOT }, + { PED_PARTITION_DIAG, PARTITION_COMPAQ_DIAG, PARTITION_DELL_DIAG }, + { PED_PARTITION_ESP, PARTITION_ESP }, + { PED_PARTITION_IRST, PARTITION_IRST }, + { PED_PARTITION_LVM, PARTITION_LINUX_LVM, PARTITION_LINUX_LVM_OLD }, + { PED_PARTITION_MSFT_RESERVED, PARTITION_MSFT_RECOVERY }, + { PED_PARTITION_PALO, PARTITION_PALO }, + { PED_PARTITION_PREP, PARTITION_PREP }, + { PED_PARTITION_RAID, PARTITION_LINUX_RAID }, + { PED_PARTITION_SWAP, PARTITION_LINUX_SWAP }, +}; + +static const unsigned char skip_set_system_types[] = +{ + PARTITION_EXT_LBA, + PARTITION_DOS_EXT, + PARTITION_COMPAQ_DIAG, + PARTITION_MSFT_RECOVERY, + PARTITION_LINUX_LVM, + PARTITION_LINUX_SWAP, + PARTITION_LINUX_RAID, + PARTITION_PALO, + PARTITION_PREP, + PARTITION_IRST, + PARTITION_ESP, + PARTITION_BLS_BOOT +}; + +static const struct flag_id_mapping_t* _GL_ATTRIBUTE_CONST +dos_find_flag_id_mapping (PedPartitionFlag flag) +{ + int n = sizeof(flag_id_mapping) / sizeof(flag_id_mapping[0]); + + for (int i = 0; i < n; ++i) + if (flag_id_mapping[i].flag == flag) + return &flag_id_mapping[i]; + + return NULL; +} + +/** + * Check whether the type_id supports the hidden flag. Returns true for both hidden and + * non-hidden id. + */ +static bool +dos_type_id_supports_hidden(unsigned char type_id) +{ + switch (type_id) + { + case PARTITION_DOS_EXT: + case PARTITION_DOS_EXT_H: + case PARTITION_FAT12: + case PARTITION_FAT12_H: + case PARTITION_FAT16: + case PARTITION_FAT16_H: + case PARTITION_FAT16_LBA: + case PARTITION_FAT16_LBA_H: + case PARTITION_FAT16_SM: + case PARTITION_FAT16_SM_H: + case PARTITION_FAT32: + case PARTITION_FAT32_H: + case PARTITION_FAT32_LBA: + case PARTITION_FAT32_LBA_H: + case PARTITION_NTFS: + case PARTITION_NTFS_H: + return true; + + default: + return false; + } +} + +/** + * Check whether the type_id has the hidden flag set. + */ +static bool +dos_type_id_is_hidden(unsigned char type_id) +{ + switch (type_id) + { + case PARTITION_DOS_EXT_H: + case PARTITION_FAT12_H: + case PARTITION_FAT16_H: + case PARTITION_FAT16_LBA_H: + case PARTITION_FAT16_SM_H: + case PARTITION_FAT32_H: + case PARTITION_FAT32_LBA_H: + case PARTITION_NTFS_H: + return true; + + default: + return false; + } +} + +/** + * Sets the hidden flag on type_id. + */ +static bool +dos_type_id_set_hidden(unsigned char* type_id, bool state) +{ + PED_ASSERT (type_id); + + if (!dos_type_id_supports_hidden(*type_id)) + return false; + + if (state) + *type_id |= PART_FLAG_HIDDEN; + else + *type_id &= ~PART_FLAG_HIDDEN; + + return 1; +} + +/** + * Check whether the type_id supports the lba flag. Returns true for both lba and non-lba + * id. + */ +static bool +dos_type_id_supports_lba(unsigned char type_id) +{ + switch (type_id) + { + case PARTITION_FAT16: + case PARTITION_FAT16_H: + case PARTITION_FAT16_LBA: + case PARTITION_FAT16_LBA_H: + case PARTITION_FAT32: + case PARTITION_FAT32_H: + case PARTITION_FAT32_LBA: + case PARTITION_FAT32_LBA_H: + case PARTITION_DOS_EXT: + case PARTITION_EXT_LBA: + return true; + + default: + return false; + } +} + +/** + * Check whether the type_id has the lba flag set. + */ +static bool +dos_type_id_is_lba(unsigned char type_id) +{ + switch (type_id) + { + case PARTITION_FAT16_LBA: + case PARTITION_FAT16_LBA_H: + case PARTITION_FAT32_LBA: + case PARTITION_FAT32_LBA_H: + case PARTITION_EXT_LBA: + return true; + + default: + return false; + } +} + +/** + * Sets the lba flag on type_id. + */ +static bool +dos_type_id_set_lba(unsigned char* type_id, bool state) +{ + PED_ASSERT (type_id); + + if (!dos_type_id_supports_lba(*type_id)) + return false; + + if (state) + { + switch (*type_id) + { + case PARTITION_FAT16: + *type_id = PARTITION_FAT16_LBA; + break; + + case PARTITION_FAT32: + *type_id = PARTITION_FAT32_LBA; + break; + + case PARTITION_DOS_EXT: + *type_id = PARTITION_EXT_LBA; + break; + } + } + else + { + switch (*type_id) + { + case PARTITION_FAT16_LBA: + *type_id = PARTITION_FAT16; + break; + + case PARTITION_FAT32_LBA: + *type_id = PARTITION_FAT32; + break; + + case PARTITION_EXT_LBA: + *type_id = PARTITION_DOS_EXT; + break; + } + } + + return true; +} + + +/* This constant contains the maximum cylinder number that can be represented + * in (C,H,S) notation. Higher cylinder numbers are reserved for + * "too big" indicators (in which case only LBA addressing can be used). + * Some partition tables in the wild indicate this number is 1021. + * (i.e. 1022 is sometimes used to indicate "use LBA"). + */ +#define MAX_CHS_CYLINDER 1021 +#define MAX_TOTAL_PART 64 + +typedef struct _DosRawPartition DosRawPartition; +typedef struct _DosRawTable DosRawTable; + +/* note: lots of bit-bashing here, thus, you shouldn't look inside it. + * Use chs_to_sector() and sector_to_chs() instead. + */ +typedef struct { + uint8_t head; + uint8_t sector; + uint8_t cylinder; +} __attribute__((packed)) RawCHS; + +/* ripped from Linux source */ +struct _DosRawPartition { + uint8_t boot_ind; /* 00: 0x80 - active */ + RawCHS chs_start; /* 01: */ + uint8_t type; /* 04: partition type */ + RawCHS chs_end; /* 05: */ + uint32_t start; /* 08: starting sector counting from 0 */ + uint32_t length; /* 0c: nr of sectors in partition */ +} __attribute__((packed)); + +struct _DosRawTable { + char boot_code [440]; + uint32_t mbr_signature; /* really a unique ID */ + uint16_t Unknown; + DosRawPartition partitions [DOS_N_PRI_PARTITIONS]; + uint16_t magic; +} __attribute__((packed)); + +/* OrigState is information we want to preserve about the partition for + * dealing with CHS issues + */ +typedef struct { + PedGeometry geom; + DosRawPartition raw_part; + PedSector lba_offset; /* needed for computing start/end for + * logical partitions */ +} OrigState; + +typedef struct { + int cylinder_alignment; +} DosDiskData; + +typedef struct { + unsigned char system; + int boot; + OrigState* orig; /* used for CHS stuff */ +} DosPartitionData; + +static PedDiskType msdos_disk_type; + +#if 0 +From http://www.win.tue.nl/~aeb/linux/fs/fat/fat-1.html + +The 2-byte numbers are stored little endian (low order byte first). + +Here the FAT12 version, that is also the common part of the FAT12, FAT16 and FAT32 boot sectors. See further below. + +Bytes Content +0-2 Jump to bootstrap (E.g. eb 3c 90; on i86: JMP 003E NOP. + One finds either eb xx 90, or e9 xx xx. + The position of the bootstrap varies.) +3-10 OEM name/version (E.g. "IBM 3.3", "IBM 20.0", "MSDOS5.0", "MSWIN4.0". + Various format utilities leave their own name, like "CH-FOR18". + Sometimes just garbage. Microsoft recommends "MSWIN4.1".) + /* BIOS Parameter Block starts here */ +11-12 Number of bytes per sector (512) + Must be one of 512, 1024, 2048, 4096. +13 Number of sectors per cluster (1) + Must be one of 1, 2, 4, 8, 16, 32, 64, 128. + A cluster should have at most 32768 bytes. In rare cases 65536 is OK. +14-15 Number of reserved sectors (1) + FAT12 and FAT16 use 1. FAT32 uses 32. +16 Number of FAT copies (2) +17-18 Number of root directory entries (224) + 0 for FAT32. 512 is recommended for FAT16. +19-20 Total number of sectors in the filesystem (2880) + (in case the partition is not FAT32 and smaller than 32 MB) +21 Media descriptor type (f0: 1.4 MB floppy, f8: hard disk; see below) +22-23 Number of sectors per FAT (9) + 0 for FAT32. +24-25 Number of sectors per track (12) +26-27 Number of heads (2, for a double-sided diskette) +28-29 Number of hidden sectors (0) + Hidden sectors are sectors preceding the partition. + /* BIOS Parameter Block ends here */ +30-509 Bootstrap +510-511 Signature 55 aa +#endif + +/* There is a significant risk of misclassifying (as msdos) + a disk that is composed solely of a single FAT partition. + Return false if sector S could not be a valid FAT boot sector. + Otherwise, return true. */ +static bool +maybe_FAT (unsigned char const *s) +{ + if (! (s[0] == 0xeb || s[0] == 0xe9)) + return false; + + uint16_t sector_size = (s[12] << 8) | s[11]; + switch (sector_size) + { + case 512: + case 1024: + case 2048: + case 4096: + break; + default: + return false; + } + + if (! (s[21] == 0xf0 || s[21] == 0xf8)) + return false; + + return true; +} + +PedGeometry* +fat_probe_fat16 (PedGeometry* geom); + +PedGeometry* +fat_probe_fat32 (PedGeometry* geom); + +PedGeometry* +ntfs_probe (PedGeometry* geom); + +static int +msdos_probe (const PedDevice *dev) +{ + PedDiskType* disk_type; + DosRawTable* part_table; + int i; + PedGeometry *geom = NULL; + PedGeometry *fsgeom = NULL; + + PED_ASSERT (dev != NULL); + + if (dev->sector_size < sizeof *part_table) + return 0; + + void *label; + if (!ptt_read_sector (dev, 0, &label)) + return 0; + + part_table = (DosRawTable *) label; + + /* check magic */ + if (PED_LE16_TO_CPU (part_table->magic) != MSDOS_MAGIC) + goto probe_fail; + + geom = ped_geometry_new (dev, 0, dev->length); + PED_ASSERT (geom); + fsgeom = fat_probe_fat16 (geom); + if (fsgeom) + goto probe_fail; /* fat fs looks like dos mbr */ + fsgeom = fat_probe_fat32 (geom); + if (fsgeom) + goto probe_fail; /* fat fs looks like dos mbr */ + fsgeom = ntfs_probe (geom); + if (fsgeom) + goto probe_fail; /* ntfs fs looks like dos mbr */ + ped_geometry_destroy (geom); + geom = NULL; + + /* If this is a FAT fs, fail here. Checking for the FAT signature + * has some false positives; instead, do what the Linux kernel does + * and ensure that each partition has a boot indicator that is + * either 0 or 0x80. + */ + unsigned int n_active = 0; + for (i = 0; i < DOS_N_PRI_PARTITIONS; i++) { + if (part_table->partitions[i].boot_ind == 0x80) + ++n_active; + if (part_table->partitions[i].boot_ind != 0 + && part_table->partitions[i].boot_ind != 0x80) + goto probe_fail; + } + + /* If there are no active partitions and this is probably + a FAT file system, do not classify it as msdos. */ + if (n_active == 0 && maybe_FAT (label)) + goto probe_fail; + + /* If this is a GPT disk, fail here */ + for (i = 0; i < DOS_N_PRI_PARTITIONS; i++) { + if (part_table->partitions[i].type == PARTITION_GPT) + goto probe_fail; + } + + /* If this is an AIX Physical Volume, fail here. IBMA in EBCDIC */ + if (part_table->boot_code[0] == (char) 0xc9 && + part_table->boot_code[1] == (char) 0xc2 && + part_table->boot_code[2] == (char) 0xd4 && + part_table->boot_code[3] == (char) 0xc1) + goto probe_fail; + +#ifdef ENABLE_PC98 + /* HACK: it's impossible to tell PC98 and msdos disk labels apart. + * Someone made the signatures the same (very clever). Since + * PC98 has some idiosyncracies with it's boot-loader, it's detection + * is more reliable */ + disk_type = ped_disk_type_get ("pc98"); + if (disk_type && disk_type->ops->probe (dev)) + goto probe_fail; +#endif /* ENABLE_PC98 */ + + free (label); + return 1; + + probe_fail: + if (geom) + ped_geometry_destroy (geom); + if (fsgeom) + ped_geometry_destroy (fsgeom); + free (label); + return 0; +} + +static PedDisk* +msdos_alloc (const PedDevice* dev) +{ + PedDisk* disk; + PED_ASSERT (dev != NULL); + + disk = _ped_disk_alloc ((PedDevice*)dev, &msdos_disk_type); + if (disk) { + DosDiskData *disk_specific = ped_malloc(sizeof *disk_specific); + if (!disk_specific) { + free (disk); + return NULL; + } + disk_specific->cylinder_alignment = 1; + disk->disk_specific = disk_specific; + } + + return disk; +} + +static PedDisk* +msdos_duplicate (const PedDisk* disk) +{ + PedDisk* new_disk; + + new_disk = ped_disk_new_fresh (disk->dev, &msdos_disk_type); + if (!new_disk) + return NULL; + + memcpy(new_disk->disk_specific, disk->disk_specific, + sizeof(DosDiskData)); + + return new_disk; +} + +static void +msdos_free (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + + DosDiskData *disk_specific = disk->disk_specific; + _ped_disk_free (disk); + free(disk_specific); +} + +static int +msdos_disk_set_flag (PedDisk *disk, PedDiskFlag flag, int state) +{ + DosDiskData *disk_specific = disk->disk_specific; + switch (flag) { + case PED_DISK_CYLINDER_ALIGNMENT: + disk_specific->cylinder_alignment = !!state; + return 1; + default: + return 0; + } +} + +static int +msdos_disk_get_flag (const PedDisk *disk, PedDiskFlag flag) +{ + DosDiskData *disk_specific = disk->disk_specific; + switch (flag) { + case PED_DISK_CYLINDER_ALIGNMENT: + return disk_specific->cylinder_alignment; + default: + return 0; + } +} + +static int +msdos_disk_is_flag_available (const PedDisk *disk, PedDiskFlag flag) +{ + switch (flag) { + case PED_DISK_CYLINDER_ALIGNMENT: + return 1; + default: + return 0; + } +} + +static int +chs_get_cylinder (const RawCHS* chs) +{ + return chs->cylinder + ((chs->sector >> 6) << 8); +} + +static int +chs_get_head (const RawCHS* chs) +{ + return chs->head; +} + +/* counts from 0 */ +static int +chs_get_sector (const RawCHS* chs) +{ + return (chs->sector & 0x3f) - 1; +} + +static PedSector _GL_ATTRIBUTE_PURE +chs_to_sector (const PedDevice* dev, const PedCHSGeometry *bios_geom, + const RawCHS* chs) +{ + PedSector c; /* not measured in sectors, but need */ + PedSector h; /* lots of bits */ + PedSector s; + + PED_ASSERT (bios_geom != NULL); + PED_ASSERT (chs != NULL); + + c = chs_get_cylinder (chs); + h = chs_get_head (chs); + s = chs_get_sector (chs); + + if (c > MAX_CHS_CYLINDER) /* MAGIC: C/H/S is irrelevant */ + return 0; + if (s < 0) + return 0; + return (c * bios_geom->heads + h) * bios_geom->sectors + s; +} + +static void +sector_to_chs (const PedDevice* dev, const PedCHSGeometry* bios_geom, + PedSector sector, RawCHS* chs) +{ + PedSector real_c, real_h, real_s; + + PED_ASSERT (dev != NULL); + PED_ASSERT (chs != NULL); + + if (!bios_geom) + bios_geom = &dev->bios_geom; + + real_c = sector / (bios_geom->heads * bios_geom->sectors); + real_h = (sector / bios_geom->sectors) % bios_geom->heads; + real_s = sector % bios_geom->sectors; + + if (real_c > MAX_CHS_CYLINDER) { + real_c = 1023; + real_h = bios_geom->heads - 1; + real_s = bios_geom->sectors - 1; + } + + chs->cylinder = real_c % 0x100; + chs->head = real_h; + chs->sector = real_s + 1 + (real_c >> 8 << 6); +} + +static PedSector _GL_ATTRIBUTE_PURE +legacy_start (const PedDisk* disk, const PedCHSGeometry* bios_geom, + const DosRawPartition* raw_part) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (raw_part != NULL); + + return chs_to_sector (disk->dev, bios_geom, &raw_part->chs_start); +} + +static PedSector _GL_ATTRIBUTE_PURE +legacy_end (const PedDisk* disk, const PedCHSGeometry* bios_geom, + const DosRawPartition* raw_part) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (raw_part != NULL); + + return chs_to_sector (disk->dev, bios_geom, &raw_part->chs_end); +} + +static PedSector _GL_ATTRIBUTE_PURE +linear_start (const PedDisk* disk, const DosRawPartition* raw_part, + PedSector offset) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (raw_part != NULL); + + return offset + PED_LE32_TO_CPU (raw_part->start); +} + +static PedSector _GL_ATTRIBUTE_PURE +linear_end (const PedDisk* disk, const DosRawPartition* raw_part, + PedSector offset) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (raw_part != NULL); + + return (linear_start (disk, raw_part, offset) + + (PED_LE32_TO_CPU (raw_part->length) - 1)); +} + +#ifndef DISCOVER_ONLY +static int _GL_ATTRIBUTE_PURE +partition_check_bios_geometry (PedPartition* part, PedCHSGeometry* bios_geom) +{ + PedSector leg_start, leg_end; + DosPartitionData* dos_data; + PedDisk* disk; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk_specific != NULL); + dos_data = part->disk_specific; + + if (!dos_data->orig) + return 1; + + disk = part->disk; + leg_start = legacy_start (disk, bios_geom, &dos_data->orig->raw_part); + leg_end = legacy_end (disk, bios_geom, &dos_data->orig->raw_part); + + if (leg_start && leg_start != dos_data->orig->geom.start) + return 0; + if (leg_end && leg_end != dos_data->orig->geom.end) + return 0; + return 1; +} + +static int _GL_ATTRIBUTE_PURE +disk_check_bios_geometry (const PedDisk* disk, PedCHSGeometry* bios_geom) +{ + PedPartition* part = NULL; + + PED_ASSERT (disk != NULL); + + while ((part = ped_disk_next_partition (disk, part))) { + if (ped_partition_is_active (part)) { + if (!partition_check_bios_geometry (part, bios_geom)) + return 0; + } + } + + return 1; +} + +static int +probe_filesystem_for_geom (const PedPartition* part, PedCHSGeometry* bios_geom) +{ + const char* ms_types[] = {"ntfs", "fat16", "fat32", NULL}; + int i; + int found; + unsigned char* buf; + int sectors; + int heads; + int res = 0; + + PED_ASSERT (bios_geom != NULL); + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (part->disk->dev != NULL); + PED_ASSERT (part->disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0); + + buf = ped_malloc (part->disk->dev->sector_size); + + if (!buf) + return 0; + + if (!part->fs_type) + goto end; + + found = 0; + for (i = 0; ms_types[i]; i++) { + if (!strcmp(ms_types[i], part->fs_type->name)) + found = 1; + } + if (!found) + goto end; + + if (!ped_geometry_read(&part->geom, buf, 0, 1)) + goto end; + + /* shared by the start of all Microsoft file systems */ + sectors = buf[0x18] + (buf[0x19] << 8); + heads = buf[0x1a] + (buf[0x1b] << 8); + + if (sectors < 1 || sectors > 63) + goto end; + if (heads > 255 || heads < 1) + goto end; + + bios_geom->sectors = sectors; + bios_geom->heads = heads; + bios_geom->cylinders = part->disk->dev->length / (sectors * heads); + res = 1; +end: + free(buf); + return res; +} + +/* This function attempts to infer the BIOS CHS geometry of the hard disk + * from the CHS + LBA information contained in the partition table from + * a single partition's entry. + * + * This involves some maths. Let (c,h,s,a) be the starting cylinder, + * starting head, starting sector and LBA start address of the partition. + * Likewise, (C,H,S,A) the end addresses. Using both of these pieces + * of information, we want to deduce cyl_sectors and head_sectors which + * are the sizes of a single cylinder and a single head, respectively. + * + * The relationships are: + * c*cyl_sectors + h * head_sectors + s = a + * C*cyl_sectors + H * head_sectors + S = A + * + * We can rewrite this in matrix form: + * + * [ c h ] [ cyl_sectors ] = [ s - a ] = [ a_ ] + * [ C H ] [ head_sectors ] [ S - A ] [ A_ ]. + * + * (s - a is abbreviated to a_to simplify the notation.) + * + * This can be abbreviated into augmented matrix form: + * + * [ c h | a_ ] + * [ C H | A_ ]. + * + * Solving these equations requires following the row reduction algorithm. We + * need to be careful about a few things though: + * - the equations might be linearly dependent, in which case there + * are many solutions. + * - the equations might be inconsistent, in which case there + * are no solutions. (Inconsistent partition table entry!) + * - there might be zeros, so we need to be careful about applying + * the algorithm. We know, however, that C > 0. + */ +static int +probe_partition_for_geom (const PedPartition* part, PedCHSGeometry* bios_geom) +{ + DosPartitionData* dos_data; + RawCHS* start_chs; + RawCHS* end_chs; + PedSector c, h, s, a, a_; /* start */ + PedSector C, H, S, A, A_; /* end */ + PedSector dont_overflow, denum; + PedSector cyl_size, head_size; + PedSector cylinders, heads, sectors; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + PED_ASSERT (bios_geom != NULL); + + dos_data = part->disk_specific; + + if (!dos_data->orig) + return 0; + + start_chs = &dos_data->orig->raw_part.chs_start; + c = chs_get_cylinder (start_chs); + h = chs_get_head (start_chs); + s = chs_get_sector (start_chs); + a = dos_data->orig->geom.start; + a_ = a - s; + + end_chs = &dos_data->orig->raw_part.chs_end; + C = chs_get_cylinder (end_chs); + H = chs_get_head (end_chs); + S = chs_get_sector (end_chs); + A = dos_data->orig->geom.end; + A_ = A - S; + + if (h < 0 || H < 0 || h > 254 || H > 254) + return 0; + if (c > C) + return 0; + + /* If no geometry is feasible, then don't even bother. + * Useful for eliminating assertions for broken partition + * tables generated by Norton Ghost et al. + */ + if (A > (C+1) * 255 * 63) + return 0; + + /* Not enough information. In theory, we can do better. Should we? */ + if (C > MAX_CHS_CYLINDER) + return 0; + if (C == 0) + return 0; + + /* Calculate the maximum number that can be multiplied by + * any head count without overflowing a PedSector + * 2^8 = 256, 8 bits + 1(sign bit) = 9 + */ + dont_overflow = 1; + dont_overflow <<= (8*sizeof(dont_overflow)) - 9; + dont_overflow--; + + if (a_ > dont_overflow || A_ > dont_overflow) + return 0; + + /* The matrix is solved by : + * + * [ c h | a_] R1 + * [ C H | A_] R2 + * + * (cH - Ch) cyl_size = a_H - A_h H R1 - h R2 + * => (if cH - Ch != 0) cyl_size = (a_H - A_h) / (cH - Ch) + * + * (Hc - hC) head_size = A_c - a_C c R2 - C R1 + * => (if cH - Ch != 0) head_size = (A_c - a_C) / (cH - Ch) + * + * But this calculation of head_size would need + * not overflowing A_c or a_C + * So substitution is use instead, to minimize dimension + * of temporary results : + * + * If h != 0 : head_size = ( a_ - c cyl_size ) / h + * If H != 0 : head_size = ( A_ - C cyl_size ) / H + * + */ + denum = c * H - C * h; + if (denum == 0) + return 0; + + cyl_size = (a_*H - A_*h) / denum; + /* Check for non integer result */ + if (cyl_size * denum != a_*H - A_*h) + return 0; + + if (!(cyl_size > 0)) + return 0; + if (!(cyl_size <= 255 * 63)) + return 0; + + if (h > 0) + head_size = ( a_ - c * cyl_size ) / h; + else if (H > 0) + head_size = ( A_ - C * cyl_size ) / H; + else { + /* should not happen because denum != 0 */ + PED_ASSERT (0); + } + + if (!(head_size > 0)) + return 0; + if (!(head_size <= 63)) + return 0; + + cylinders = part->disk->dev->length / cyl_size; + heads = cyl_size / head_size; + sectors = head_size; + + if (!(heads > 0)) + return 0; + if (!(heads < 256)) + return 0; + + if (!(sectors > 0)) + return 0; + if (!(sectors <= 63)) + return 0; + + /* Some broken OEM partitioning program(s) seem to have an out-by-one + * error on the end of partitions. We should offer to fix the + * partition table... + */ + if (((C + 1) * heads + H) * sectors + S == A) + C++; + + if (!((c * heads + h) * sectors + s == a)) + return 0; + if (!((C * heads + H) * sectors + S == A)) + return 0; + + bios_geom->cylinders = cylinders; + bios_geom->heads = heads; + bios_geom->sectors = sectors; + + return 1; +} + +static void +partition_probe_bios_geometry (const PedPartition* part, + PedCHSGeometry* bios_geom) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + PED_ASSERT (bios_geom != NULL); + + if (ped_partition_is_active (part)) { + if (probe_partition_for_geom (part, bios_geom)) + return; + if (part->type & PED_PARTITION_EXTENDED) { + if (probe_filesystem_for_geom (part, bios_geom)) + return; + } + } + if (part->type & PED_PARTITION_LOGICAL) { + PedPartition* ext_part; + ext_part = ped_disk_extended_partition (part->disk); + PED_ASSERT (ext_part != NULL); + partition_probe_bios_geometry (ext_part, bios_geom); + } else { + *bios_geom = part->disk->dev->bios_geom; + } +} + +static void +disk_probe_bios_geometry (const PedDisk* disk, PedCHSGeometry* bios_geom) +{ + PedPartition* part; + + /* first look at the boot partition */ + part = NULL; + while ((part = ped_disk_next_partition (disk, part))) { + if (!ped_partition_is_active (part)) + continue; + if (ped_partition_get_flag (part, PED_PARTITION_BOOT)) { + if (probe_filesystem_for_geom (part, bios_geom)) + return; + if (probe_partition_for_geom (part, bios_geom)) + return; + } + } + + /* that didn't work... try all partition table entries */ + part = NULL; + while ((part = ped_disk_next_partition (disk, part))) { + if (ped_partition_is_active (part)) { + if (probe_partition_for_geom (part, bios_geom)) + return; + } + } + + /* that didn't work... look at all file systems */ + part = NULL; + while ((part = ped_disk_next_partition (disk, part))) { + if (ped_partition_is_active (part)) { + if (probe_filesystem_for_geom (part, bios_geom)) + return; + } + } +} +#endif /* !DISCOVER_ONLY */ + +static int _GL_ATTRIBUTE_PURE +raw_part_is_extended (const DosRawPartition* raw_part) +{ + PED_ASSERT (raw_part != NULL); + + switch (raw_part->type) { + case PARTITION_DOS_EXT: + case PARTITION_EXT_LBA: + case PARTITION_LINUX_EXT: + return 1; + + default: + return 0; + } + + return 0; +} + +static PedPartition* +raw_part_parse (const PedDisk* disk, const DosRawPartition* raw_part, + PedSector lba_offset, PedPartitionType type) +{ + PedPartition* part; + DosPartitionData* dos_data; + + PED_ASSERT (disk != NULL); + PED_ASSERT (raw_part != NULL); + + part = ped_partition_new ( + disk, type, NULL, + linear_start (disk, raw_part, lba_offset), + linear_end (disk, raw_part, lba_offset)); + if (!part) + return NULL; + dos_data = part->disk_specific; + dos_data->system = raw_part->type; + dos_data->boot = raw_part->boot_ind != 0; + dos_data->orig = ped_malloc (sizeof (OrigState)); + if (!dos_data->orig) { + ped_partition_destroy (part); + return NULL; + } + dos_data->orig->geom = part->geom; + dos_data->orig->raw_part = *raw_part; + dos_data->orig->lba_offset = lba_offset; + return part; +} + +static int +read_table (PedDisk* disk, PedSector sector, int is_extended_table) +{ + int i; + DosRawTable* table; + DosRawPartition* raw_part; + PedPartition* part; + PedPartitionType type; + PedSector lba_offset; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + void *label = NULL; + if (!ptt_read_sector (disk->dev, sector, &label)) + goto error; + + table = (DosRawTable *) label; + + /* weird: empty extended partitions are filled with 0xf6 by PM */ + if (is_extended_table + && PED_LE16_TO_CPU (table->magic) == PARTITION_MAGIC_MAGIC) + goto read_ok; + +#ifndef DISCOVER_ONLY + if (PED_LE16_TO_CPU (table->magic) != MSDOS_MAGIC) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_IGNORE_CANCEL, + _("Invalid partition table on %s " + "-- wrong signature %x."), + disk->dev->path, + PED_LE16_TO_CPU (table->magic)) + != PED_EXCEPTION_IGNORE) + goto error; + goto read_ok; + } +#endif + + /* parse the partitions from this table */ + for (i = 0; i < DOS_N_PRI_PARTITIONS; i++) { + raw_part = &table->partitions [i]; + if (raw_part->type == PARTITION_EMPTY || !raw_part->length) + continue; + + /* process nested extended partitions after normal logical + * partitions, to make sure we get the order right. + */ + if (is_extended_table && raw_part_is_extended (raw_part)) + continue; + + lba_offset = is_extended_table ? sector : 0; + + if (linear_start (disk, raw_part, lba_offset) == sector) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Invalid partition table - recursive " + "partition on %s."), + disk->dev->path) + != PED_EXCEPTION_IGNORE) + goto error; + continue; /* avoid infinite recursion */ + } + + if (is_extended_table) + type = PED_PARTITION_LOGICAL; + else if (raw_part_is_extended (raw_part)) + type = PED_PARTITION_EXTENDED; + else + type = PED_PARTITION_NORMAL; + + part = raw_part_parse (disk, raw_part, lba_offset, type); + if (!part) + goto error; + if (!is_extended_table) + part->num = i + 1; + if (type != PED_PARTITION_EXTENDED) + part->fs_type = ped_file_system_probe (&part->geom); + + PedConstraint *constraint_exact + = ped_constraint_exact (&part->geom); + bool ok = ped_disk_add_partition (disk, part, constraint_exact); + ped_constraint_destroy (constraint_exact); + if (!ok) + goto error; + + /* non-nested extended partition */ + if (part->type == PED_PARTITION_EXTENDED) { + if (!read_table (disk, part->geom.start, 1)) + goto error; + } + } + + if (is_extended_table) { + /* process the nested extended partitions */ + for (i = 0; i < DOS_N_PRI_PARTITIONS; i++) { + PedSector part_start; + + raw_part = &table->partitions [i]; + if (!raw_part_is_extended (raw_part)) + continue; + + lba_offset = ped_disk_extended_partition + (disk)->geom.start; + part_start = linear_start (disk, raw_part, lba_offset); + if (part_start == sector) { + /* recursive table - already threw an + * exception above. + */ + continue; + } + if (!read_table (disk, part_start, 1)) + goto error; + } + } + +read_ok: + free (label); + return 1; + +error: + free (label); + ped_disk_delete_all (disk); + return 0; +} + +static int +msdos_read (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + ped_disk_delete_all (disk); + if (!read_table (disk, 0, 0)) + return 0; + +#ifndef DISCOVER_ONLY + /* try to figure out the correct BIOS CHS values */ + if (!disk_check_bios_geometry (disk, &disk->dev->bios_geom)) { + PedCHSGeometry bios_geom = disk->dev->bios_geom; + disk_probe_bios_geometry (disk, &bios_geom); + + /* if the geometry was wrong, then we should reread, to + * make sure the metadata is allocated in the right places. + */ + if (disk->dev->bios_geom.cylinders != bios_geom.cylinders + || disk->dev->bios_geom.heads != bios_geom.heads + || disk->dev->bios_geom.sectors != bios_geom.sectors) { + disk->dev->bios_geom = bios_geom; + return msdos_read (disk); + } + } +#endif + + return 1; +} + +#ifndef DISCOVER_ONLY +static int +fill_raw_part (DosRawPartition* raw_part, + const PedPartition* part, PedSector offset) +{ + DosPartitionData* dos_data; + PedCHSGeometry bios_geom; + + PED_ASSERT (raw_part != NULL); + PED_ASSERT (part != NULL); + + partition_probe_bios_geometry (part, &bios_geom); + + dos_data = part->disk_specific; + + raw_part->boot_ind = 0x80 * dos_data->boot; + raw_part->type = dos_data->system; + raw_part->start = PED_CPU_TO_LE32 (part->geom.start - offset); + raw_part->length = PED_CPU_TO_LE32 (part->geom.length); + + sector_to_chs (part->disk->dev, &bios_geom, part->geom.start, + &raw_part->chs_start); + sector_to_chs (part->disk->dev, &bios_geom, part->geom.end, + &raw_part->chs_end); + + if (dos_data->orig) { + DosRawPartition* orig_raw_part = &dos_data->orig->raw_part; + if (dos_data->orig->geom.start == part->geom.start) + raw_part->chs_start = orig_raw_part->chs_start; + if (dos_data->orig->geom.end == part->geom.end) + raw_part->chs_end = orig_raw_part->chs_end; + } + + return 1; +} + +static int +fill_ext_raw_part_geom (DosRawPartition* raw_part, + const PedCHSGeometry* bios_geom, + const PedGeometry* geom, PedSector offset) +{ + PED_ASSERT (raw_part != NULL); + PED_ASSERT (geom != NULL); + PED_ASSERT (geom->dev != NULL); + + raw_part->boot_ind = 0; + raw_part->type = PARTITION_DOS_EXT; + raw_part->start = PED_CPU_TO_LE32 (geom->start - offset); + raw_part->length = PED_CPU_TO_LE32 (geom->length); + + sector_to_chs (geom->dev, bios_geom, geom->start, &raw_part->chs_start); + sector_to_chs (geom->dev, bios_geom, geom->start + geom->length - 1, + &raw_part->chs_end); + + return 1; +} + +static int +write_ext_table (const PedDisk* disk, + PedSector sector, const PedPartition* logical) +{ + PedPartition* part; + PedSector lba_offset; + + PED_ASSERT (disk != NULL); + PED_ASSERT (ped_disk_extended_partition (disk) != NULL); + PED_ASSERT (logical != NULL); + + lba_offset = ped_disk_extended_partition (disk)->geom.start; + + void* s; + if (!ptt_read_sector (disk->dev, sector, &s)) + return 0; + + DosRawTable *table = s; + memset(&(table->partitions), 0, sizeof (table->partitions)); + table->magic = PED_CPU_TO_LE16 (MSDOS_MAGIC); + + int ok = 0; + if (!fill_raw_part (&table->partitions[0], logical, sector)) + goto cleanup; + + part = ped_disk_get_partition (disk, logical->num + 1); + if (part) { + PedGeometry* geom; + PedCHSGeometry bios_geom; + + geom = ped_geometry_new (disk->dev, part->prev->geom.start, + part->geom.end - part->prev->geom.start + 1); + if (!geom) + goto cleanup; + partition_probe_bios_geometry (part, &bios_geom); + fill_ext_raw_part_geom (&table->partitions[1], &bios_geom, + geom, lba_offset); + ped_geometry_destroy (geom); + + if (!write_ext_table (disk, part->prev->geom.start, part)) + goto cleanup; + } + + ok = ped_device_write (disk->dev, table, sector, 1); + cleanup: + free (s); + return ok; +} + +static int +write_empty_table (const PedDisk* disk, PedSector sector) +{ + DosRawTable table; + void* table_sector; + + PED_ASSERT (disk != NULL); + + if (ptt_read_sector (disk->dev, sector, &table_sector)) { + memcpy (&table, table_sector, sizeof (table)); + free(table_sector); + } + memset (&(table.partitions), 0, sizeof (table.partitions)); + table.magic = PED_CPU_TO_LE16 (MSDOS_MAGIC); + + return ped_device_write (disk->dev, (void*) &table, sector, 1); +} + +/* Find the first logical partition, and write the partition table for it. + */ +static int +write_extended_partitions (const PedDisk* disk) +{ + PedPartition* ext_part; + PedPartition* part; + PedCHSGeometry bios_geom; + + PED_ASSERT (disk != NULL); + + ext_part = ped_disk_extended_partition (disk); + partition_probe_bios_geometry (ext_part, &bios_geom); + part = ped_disk_get_partition (disk, 5); + if (part) + return write_ext_table (disk, ext_part->geom.start, part); + else + return write_empty_table (disk, ext_part->geom.start); +} + +static int +msdos_write (const PedDisk* disk) +{ + PedPartition* part; + int i; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + void *s0; + if (!ptt_read_sector (disk->dev, 0, &s0)) + return 0; + DosRawTable *table = (DosRawTable *) s0; + + if (!table->boot_code[0]) { + memset (table, 0, 512); + memcpy (table->boot_code, MBR_BOOT_CODE, sizeof (MBR_BOOT_CODE)); + } + + /* If there is no unique identifier, generate a random one */ + if (!table->mbr_signature) + table->mbr_signature = generate_random_uint32 (); + + memset (table->partitions, 0, sizeof (table->partitions)); + table->magic = PED_CPU_TO_LE16 (MSDOS_MAGIC); + + for (i=1; i<=DOS_N_PRI_PARTITIONS; i++) { + part = ped_disk_get_partition (disk, i); + if (!part) + continue; + + if (!fill_raw_part (&table->partitions [i - 1], part, 0)) + goto write_fail; + + if (part->type == PED_PARTITION_EXTENDED) { + if (!write_extended_partitions (disk)) + goto write_fail; + } + } + + int write_ok = ped_device_write (disk->dev, (void*) table, 0, 1); + free (s0); + if (!write_ok) + return 0; + return ped_device_sync (disk->dev); + + write_fail: + free (s0); + return 0; + +} +#endif /* !DISCOVER_ONLY */ + +static PedPartition* +msdos_partition_new (const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + PedPartition* part; + DosPartitionData* dos_data; + + part = _ped_partition_alloc (disk, part_type, fs_type, start, end); + if (!part) + goto error; + + if (ped_partition_is_active (part)) { + part->disk_specific + = dos_data = ped_calloc (sizeof (DosPartitionData)); + if (!dos_data) + goto error_free_part; + dos_data->system = PARTITION_LINUX; + } else { + part->disk_specific = NULL; + } + return part; + +error_free_part: + free (part); +error: + return 0; +} + +static PedPartition* +msdos_partition_duplicate (const PedPartition* part) +{ + PedPartition* new_part; + DosPartitionData* new_dos_data; + DosPartitionData* old_dos_data; + + new_part = ped_partition_new (part->disk, part->type, part->fs_type, + part->geom.start, part->geom.end); + if (!new_part) + return NULL; + new_part->num = part->num; + + old_dos_data = (DosPartitionData*) part->disk_specific; + new_dos_data = (DosPartitionData*) new_part->disk_specific; + new_dos_data->system = old_dos_data->system; + new_dos_data->boot = old_dos_data->boot; + + if (old_dos_data->orig) { + new_dos_data->orig = ped_malloc (sizeof (OrigState)); + if (!new_dos_data->orig) { + ped_partition_destroy (new_part); + return NULL; + } + new_dos_data->orig->geom = old_dos_data->orig->geom; + new_dos_data->orig->raw_part = old_dos_data->orig->raw_part; + new_dos_data->orig->lba_offset = old_dos_data->orig->lba_offset; + } + return new_part; +} + +static void +msdos_partition_destroy (PedPartition* part) +{ + PED_ASSERT (part != NULL); + + if (ped_partition_is_active (part)) { + DosPartitionData* dos_data; + dos_data = (DosPartitionData*) part->disk_specific; + free (dos_data->orig); + free (part->disk_specific); + } + free (part); +} + +/* is_skip_type checks the type against the list of types that should not be + * overridden by set_system. It returns a 1 if it is in the list. +*/ +static bool +is_skip_type(unsigned char type_id) { + int n = sizeof(skip_set_system_types) / sizeof(skip_set_system_types[0]); + for (int i = 0; i < n; ++i) { + if (type_id == skip_set_system_types[i]) { + return true; + } + } + + return false; +} + +static int +msdos_partition_set_system (PedPartition* part, + const PedFileSystemType* fs_type) +{ + DosPartitionData* dos_data = part->disk_specific; + + part->fs_type = fs_type; + + // Is this a type that should skip fs_type checking? + if (is_skip_type(dos_data->system)) { + return 1; + } + + if (part->type & PED_PARTITION_EXTENDED) { + dos_data->system = PARTITION_EXT_LBA; + return 1; + } + + if (!fs_type) + dos_data->system = PARTITION_LINUX; + else if (!strcmp (fs_type->name, "fat16")) + dos_data->system = PARTITION_FAT16; + else if (!strcmp (fs_type->name, "fat32")) + dos_data->system = PARTITION_FAT32; + else if (!strcmp (fs_type->name, "ntfs") + || !strcmp (fs_type->name, "hpfs")) + dos_data->system = PARTITION_NTFS; + else if (!strcmp (fs_type->name, "hfs") + || !strcmp (fs_type->name, "hfs+")) + dos_data->system = PARTITION_HFS; + else if (!strcmp (fs_type->name, "udf")) + dos_data->system = PARTITION_UDF; + else if (!strcmp (fs_type->name, "sun-ufs")) + dos_data->system = PARTITION_SUN_UFS; + else if (is_linux_swap (fs_type->name)) + dos_data->system = PARTITION_LINUX_SWAP; + else + dos_data->system = PARTITION_LINUX; + + return 1; +} + +static int +msdos_partition_set_flag (PedPartition* part, + PedPartitionFlag flag, int state) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + PED_ASSERT (part->disk != NULL); + + DosPartitionData* dos_data = part->disk_specific; + + const struct flag_id_mapping_t* p = dos_find_flag_id_mapping (flag); + if (p) + { + if (part->type & PED_PARTITION_EXTENDED) + return 0; + + if (state) { + dos_data->system = p->type_id; + } else if (dos_data->system == p->type_id || dos_data->system == p->alt_type_id) { + // Clear the type so that fs_type will be used to return it to the default + dos_data->system = PARTITION_LINUX; + return ped_partition_set_system (part, part->fs_type); + } + return 1; + } + + switch (flag) { + case PED_PARTITION_HIDDEN: + { + return dos_type_id_set_hidden(&dos_data->system, state); + } + + case PED_PARTITION_LBA: + { + return dos_type_id_set_lba(&dos_data->system, state); + } + + case PED_PARTITION_BOOT: + { + dos_data->boot = state; + + if (state) + { + PedDisk* disk = part->disk; + PedPartition* walk = ped_disk_next_partition (disk, NULL); + for (; walk; walk = ped_disk_next_partition (disk, walk)) { + if (walk == part || !ped_partition_is_active (walk)) + continue; + msdos_partition_set_flag (walk, PED_PARTITION_BOOT, 0); + } + } + + return 1; + } + + default: + return 0; + } +} + +static int _GL_ATTRIBUTE_PURE +msdos_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + DosPartitionData* dos_data = part->disk_specific; + + const struct flag_id_mapping_t* p = dos_find_flag_id_mapping (flag); + if (p) + return dos_data->system == p->type_id || dos_data->system == p->alt_type_id; + + switch (flag) { + case PED_PARTITION_HIDDEN: + return dos_type_id_is_hidden(dos_data->system); + + case PED_PARTITION_LBA: + return dos_type_id_is_lba(dos_data->system); + + case PED_PARTITION_BOOT: + return dos_data->boot; + + default: + return 0; + } +} + +static int +msdos_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + if (dos_find_flag_id_mapping (flag)) + return part->type != PED_PARTITION_EXTENDED; + + DosPartitionData* dos_data = part->disk_specific; + + switch (flag) { + case PED_PARTITION_HIDDEN: + return dos_type_id_supports_hidden(dos_data->system); + + case PED_PARTITION_LBA: + return dos_type_id_supports_lba(dos_data->system); + + case PED_PARTITION_BOOT: + return 1; + + default: + return 0; + } +} + + +int +msdos_partition_set_type_id (PedPartition* part, uint8_t id) +{ + DosPartitionData* dos_data = part->disk_specific; + + dos_data->system = id; + + return 1; +} + + +uint8_t _GL_ATTRIBUTE_PURE +msdos_partition_get_type_id (const PedPartition* part) +{ + const DosPartitionData* dos_data = part->disk_specific; + + return dos_data->system; +} + + +static PedGeometry* +_try_constraint (const PedPartition* part, const PedConstraint* external, + PedConstraint* internal) +{ + PedConstraint* intersection; + PedGeometry* solution; + + intersection = ped_constraint_intersect (external, internal); + ped_constraint_destroy (internal); + if (!intersection) + return NULL; + + solution = ped_constraint_solve_nearest (intersection, &part->geom); + ped_constraint_destroy (intersection); + return solution; +} + +static PedGeometry* +_best_solution (const PedPartition* part, const PedCHSGeometry* bios_geom, + PedGeometry* a, PedGeometry* b) +{ + PedSector cyl_size = bios_geom->heads * bios_geom->sectors; + int a_cylinder; + int b_cylinder; + + if (!a) + return b; + if (!b) + return a; + + a_cylinder = a->start / cyl_size; + b_cylinder = b->start / cyl_size; + + if (a_cylinder == b_cylinder) { + if ( (a->start / bios_geom->sectors) % bios_geom->heads + < (b->start / bios_geom->sectors) % bios_geom->heads) + goto choose_a; + else + goto choose_b; + } else { + PedSector a_delta; + PedSector b_delta; + + a_delta = llabs (part->geom.start - a->start); + b_delta = llabs (part->geom.start - b->start); + + if (a_delta < b_delta) + goto choose_a; + else + goto choose_b; + } + + return NULL; /* never get here! */ + +choose_a: + ped_geometry_destroy (b); + return a; + +choose_b: + ped_geometry_destroy (a); + return b; +} + +/* This constraint is for "normal" primary partitions, that start at the + * beginning of a cylinder, and end at the end of a cylinder. + * Note: you can't start a partition at the beginning of the 1st + * cylinder, because that's where the partition table is! There are different + * rules for that - see the _primary_start_constraint. + */ +static PedConstraint* +_primary_constraint (const PedDisk* disk, const PedCHSGeometry* bios_geom, + PedGeometry* min_geom) +{ + PedDevice* dev = disk->dev; + PedSector cylinder_size = bios_geom->sectors * bios_geom->heads; + PedAlignment start_align; + PedAlignment end_align; + PedGeometry start_geom; + PedGeometry end_geom; + + if (!ped_alignment_init (&start_align, 0, cylinder_size)) + return NULL; + if (!ped_alignment_init (&end_align, -1, cylinder_size)) + return NULL; + + if (min_geom) { + if (min_geom->start < cylinder_size) + return NULL; + if (!ped_geometry_init (&start_geom, dev, cylinder_size, + min_geom->start + 1 - cylinder_size)) + return NULL; + if (!ped_geometry_init (&end_geom, dev, min_geom->end, + dev->length - min_geom->end)) + return NULL; + } else { + /* Use cylinder_size as the starting sector number + when the device is large enough to accommodate that. + Otherwise, use sector 1. */ + PedSector start = (cylinder_size < dev->length + ? cylinder_size : 1); + if (!ped_geometry_init (&start_geom, dev, start, + dev->length - start)) + return NULL; + if (!ped_geometry_init (&end_geom, dev, 0, dev->length)) + return NULL; + } + + return ped_constraint_new (&start_align, &end_align, &start_geom, + &end_geom, 1, dev->length); +} + +/* This constraint is for partitions starting on the first cylinder. They + * must start on the 2nd head of the 1st cylinder. + * + * NOTE: We don't always start on the 2nd head of the 1st cylinder. Windows + * Vista aligns starting partitions at sector 2048 (0x800) by default. See: + * http://support.microsoft.com/kb/923332 + */ +static PedConstraint* +_primary_start_constraint (const PedDisk* disk, + const PedPartition *part, + const PedCHSGeometry* bios_geom, + const PedGeometry* min_geom) +{ + PedDevice* dev = disk->dev; + PedSector cylinder_size = bios_geom->sectors * bios_geom->heads; + PedAlignment start_align; + PedAlignment end_align; + PedGeometry start_geom; + PedGeometry end_geom; + PedSector start_pos; + + if (part->geom.start == 2048) + /* check for known Windows Vista (NTFS >= 3.1) alignments */ + /* sector 0x800 == 2048 */ + start_pos = 2048; + else + /* all other primary partitions on a DOS label align to */ + /* the 2nd head of the first cylinder (0x3F == 63) */ + start_pos = bios_geom->sectors; + + if (!ped_alignment_init (&start_align, start_pos, 0)) + return NULL; + if (!ped_alignment_init (&end_align, -1, cylinder_size)) + return NULL; + if (min_geom) { + if (!ped_geometry_init (&start_geom, dev, start_pos, 1)) + return NULL; + if (!ped_geometry_init (&end_geom, dev, min_geom->end, + dev->length - min_geom->end)) + return NULL; + } else { + if (!ped_geometry_init (&start_geom, dev, start_pos, + dev->length - start_pos)) + return NULL; + if (!ped_geometry_init (&end_geom, dev, 0, dev->length)) + return NULL; + } + + return ped_constraint_new (&start_align, &end_align, &start_geom, + &end_geom, 1, dev->length); +} + +/* constraints for logical partitions: + * - start_offset is the offset in the start alignment. "normally", + * this is bios_geom->sectors. exceptions: MINOR > 5 at the beginning of the + * extended partition, or MINOR == 5 in the middle of the extended partition + * - is_start_part == 1 if the constraint is for the first cylinder of + * the extended partition, or == 0 if the constraint is for the second cylinder + * onwards of the extended partition. + */ +static PedConstraint* +_logical_constraint (const PedDisk* disk, const PedCHSGeometry* bios_geom, + PedSector start_offset, int is_start_part) +{ + PedPartition* ext_part = ped_disk_extended_partition (disk); + PedDevice* dev = disk->dev; + PedSector cylinder_size = bios_geom->sectors * bios_geom->heads; + PedAlignment start_align; + PedAlignment end_align; + PedGeometry max_geom; + + PED_ASSERT (ext_part != NULL); + + if (!ped_alignment_init (&start_align, start_offset, cylinder_size)) + return NULL; + if (!ped_alignment_init (&end_align, -1, cylinder_size)) + return NULL; + if (is_start_part) { + if (!ped_geometry_init (&max_geom, dev, + ext_part->geom.start, + ext_part->geom.length)) + return NULL; + } else { + PedSector min_start; + PedSector max_length; + + min_start = ped_round_up_to (ext_part->geom.start + 1, + cylinder_size); + max_length = ext_part->geom.end - min_start + 1; + if (min_start >= ext_part->geom.end) + return NULL; + + if (!ped_geometry_init (&max_geom, dev, min_start, max_length)) + return NULL; + } + + return ped_constraint_new (&start_align, &end_align, &max_geom, + &max_geom, 1, dev->length); +} + +/* returns the minimum geometry for the extended partition, given that the + * extended partition must contain: + * * all logical partitions + * * all partition tables for all logical partitions (except the first) + * * the extended partition table + */ +static PedGeometry* +_get_min_extended_part_geom (const PedPartition* ext_part, + const PedCHSGeometry* bios_geom) +{ + PedDisk* disk = ext_part->disk; + PedSector head_size = bios_geom ? bios_geom->sectors : 1; + PedPartition* walk; + PedGeometry* min_geom; + + walk = ped_disk_get_partition (disk, 5); + if (!walk) + return NULL; + + min_geom = ped_geometry_duplicate (&walk->geom); + if (!min_geom) + return NULL; + /* We must always allow at least two sectors at the start, to leave + * room for LILO. See linux/fs/partitions/msdos.c. + */ + ped_geometry_set_start (min_geom, + walk->geom.start - PED_MAX (1 * head_size, 2)); + + for (walk = ext_part->part_list; walk; walk = walk->next) { + if (!ped_partition_is_active (walk) || walk->num == 5) + continue; + if (walk->geom.start < min_geom->start) + ped_geometry_set_start (min_geom, + walk->geom.start - 2 * head_size); + if (walk->geom.end > min_geom->end) + ped_geometry_set_end (min_geom, walk->geom.end); + } + + return min_geom; +} + +static int +_align_primary (PedPartition* part, const PedCHSGeometry* bios_geom, + const PedConstraint* constraint) +{ + PedDisk* disk = part->disk; + PedGeometry* min_geom = NULL; + PedGeometry* solution = NULL; + + if (part->type == PED_PARTITION_EXTENDED) + min_geom = _get_min_extended_part_geom (part, bios_geom); + + solution = _best_solution (part, bios_geom, solution, + _try_constraint (part, constraint, + _primary_start_constraint (disk, part, + bios_geom, min_geom))); + + solution = _best_solution (part, bios_geom, solution, + _try_constraint (part, constraint, + _primary_constraint (disk, bios_geom, + min_geom))); + + if (min_geom) + ped_geometry_destroy (min_geom); + + if (solution) { + ped_geometry_set (&part->geom, solution->start, + solution->length); + ped_geometry_destroy (solution); + return 1; + } + + return 0; +} + +static int +_logical_min_start_head (const PedPartition* part, + const PedCHSGeometry* bios_geom, + const PedPartition* ext_part, + int is_start_ext_part) +{ + PedSector cylinder_size = bios_geom->sectors * bios_geom->heads; + PedSector base_head; + + if (is_start_ext_part) + base_head = 1 + (ext_part->geom.start % cylinder_size) + / bios_geom->sectors; + else + base_head = 0; + + if (part->num == 5) + return base_head + 0; + else + return base_head + 1; +} + +/* Shamelessly copied and adapted from _partition_get_overlap_constraint + * (in disk.c) + * This should get rid of the infamous Assertion (metadata_length > 0) failed + * bug for extended msdos disklabels generated by Parted. + * 1) There always is a partition table at the start of ext_part, so we leave + * a one sector gap there. + * 2)*The partition table of part5 is always at the beginning of the ext_part + * so there is no need to leave a one sector gap before part5. + * *There always is a partition table at the beginning of each partition != 5. + * We don't need to worry to much about consistency with + * _partition_get_overlap_constraint because missing it means we are in edge + * cases anyway, and we don't lose anything by just refusing to do the job in + * those cases. + */ +static PedConstraint* +_log_meta_overlap_constraint (PedPartition* part, const PedGeometry* geom) +{ + PedGeometry safe_space; + PedSector min_start; + PedSector max_end; + PedPartition* ext_part = ped_disk_extended_partition (part->disk); + PedPartition* walk; + int not_5 = (part->num != 5); + + PED_ASSERT (ext_part != NULL); + + walk = ext_part->part_list; + + /* 1) 2) */ + min_start = ext_part->geom.start + 1 + not_5; + max_end = ext_part->geom.end; + + while (walk != NULL /* 2) 2) */ + && ( walk->geom.start - (walk->num != 5) < geom->start - not_5 + || walk->geom.start - (walk->num != 5) <= min_start )) { + if (walk != part && ped_partition_is_active (walk)) + min_start = walk->geom.end + 1 + not_5; /* 2) */ + walk = walk->next; + } + + while (walk && (walk == part || !ped_partition_is_active (walk))) + walk = walk->next; + + if (walk) + max_end = walk->geom.start - 1 - (walk->num != 5); /* 2) */ + + if (min_start >= max_end) + return NULL; + + ped_geometry_init (&safe_space, part->disk->dev, + min_start, max_end - min_start + 1); + return ped_constraint_new_from_max (&safe_space); +} + +static int +_align_logical (PedPartition* part, const PedCHSGeometry* bios_geom, + const PedConstraint* constraint) +{ + PedDisk* disk = part->disk; + PedPartition* ext_part = ped_disk_extended_partition (disk); + PedSector cyl_size = bios_geom->sectors * bios_geom->heads; + PedSector start_base; + int head; + PedGeometry* solution = NULL; + PedConstraint *intersect, *log_meta_overlap; + + PED_ASSERT (ext_part != NULL); + + log_meta_overlap = _log_meta_overlap_constraint(part, &part->geom); + intersect = ped_constraint_intersect (constraint, log_meta_overlap); + ped_constraint_destroy (log_meta_overlap); + if (!intersect) + return 0; + + start_base = ped_round_down_to (part->geom.start, cyl_size); + + for (head = _logical_min_start_head (part, bios_geom, ext_part, 0); + head < PED_MIN (5, bios_geom->heads); head++) { + PedConstraint* disk_constraint; + PedSector start = start_base + head * bios_geom->sectors; + + if (head >= _logical_min_start_head (part, bios_geom, + ext_part, 1)) + disk_constraint = + _logical_constraint (disk, bios_geom, start, 1); + else + disk_constraint = + _logical_constraint (disk, bios_geom, start, 0); + + solution = _best_solution (part, bios_geom, solution, + _try_constraint (part, intersect, + disk_constraint)); + } + + ped_constraint_destroy (intersect); + + if (solution) { + ped_geometry_set (&part->geom, solution->start, + solution->length); + ped_geometry_destroy (solution); + return 1; + } + + return 0; +} + +static int +_align (PedPartition* part, const PedCHSGeometry* bios_geom, + const PedConstraint* constraint) +{ + if (part->type == PED_PARTITION_LOGICAL) + return _align_logical (part, bios_geom, constraint); + else + return _align_primary (part, bios_geom, constraint); +} + +static PedConstraint* +_no_geom_constraint (const PedDisk* disk, PedSector start, PedSector end) +{ + PedGeometry max; + + ped_geometry_init (&max, disk->dev, start, end - start + 1); + return ped_constraint_new_from_max (&max); +} + +static PedConstraint* +_no_geom_extended_constraint (const PedPartition* part) +{ + PedDevice* dev = part->disk->dev; + PedGeometry* min = _get_min_extended_part_geom (part, NULL); + PedGeometry start_range; + PedGeometry end_range; + PedConstraint* constraint; + + if (min) { + ped_geometry_init (&start_range, dev, 1, min->start); + ped_geometry_init (&end_range, dev, min->end, + dev->length - min->end); + ped_geometry_destroy (min); + } else { + ped_geometry_init (&start_range, dev, 1, dev->length - 1); + ped_geometry_init (&end_range, dev, 1, dev->length - 1); + } + constraint = ped_constraint_new (ped_alignment_any, ped_alignment_any, + &start_range, &end_range, 1, dev->length); + return constraint; +} + +static int +_align_primary_no_geom (PedPartition* part, const PedConstraint* constraint) +{ + PedDisk* disk = part->disk; + PedGeometry* solution; + + if (part->type == PED_PARTITION_EXTENDED) { + solution = _try_constraint (part, constraint, + _no_geom_extended_constraint (part)); + } else { + solution = _try_constraint (part, constraint, + _no_geom_constraint (disk, 1, + disk->dev->length - 1)); + } + + if (solution) { + ped_geometry_set (&part->geom, solution->start, + solution->length); + ped_geometry_destroy (solution); + return 1; + } + return 0; +} + +static int +_align_logical_no_geom (PedPartition* part, const PedConstraint* constraint) +{ + PedGeometry* solution; + + solution = _try_constraint (part, constraint, + _log_meta_overlap_constraint (part, &part->geom)); + + if (solution) { + ped_geometry_set (&part->geom, solution->start, + solution->length); + ped_geometry_destroy (solution); + return 1; + } + return 0; +} + +static int +_align_no_geom (PedPartition* part, const PedConstraint* constraint) +{ + if (part->type == PED_PARTITION_LOGICAL) + return _align_logical_no_geom (part, constraint); + else + return _align_primary_no_geom (part, constraint); +} + +static int +msdos_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + PedCHSGeometry bios_geom; + DosPartitionData* dos_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + dos_data = part->disk_specific; + + if (dos_data->system == PARTITION_LDM && dos_data->orig) { + PedGeometry *orig_geom = &dos_data->orig->geom; + + if (ped_geometry_test_equal (&part->geom, orig_geom) + && ped_constraint_is_solution (constraint, &part->geom)) + return 1; + + ped_geometry_set (&part->geom, orig_geom->start, + orig_geom->length); + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Parted can't resize partitions managed by " + "Windows Dynamic Disk.")); + return 0; + } + + partition_probe_bios_geometry (part, &bios_geom); + + DosDiskData *disk_specific = part->disk->disk_specific; + if (disk_specific->cylinder_alignment + && _align(part, &bios_geom, constraint)) + return 1; + if (_align_no_geom (part, constraint)) + return 1; + +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + return 0; +} + +static int +add_metadata_part (PedDisk* disk, PedPartitionType type, PedSector start, + PedSector end) +{ + PedPartition* new_part; + + PED_ASSERT (disk != NULL); + + new_part = ped_partition_new (disk, type | PED_PARTITION_METADATA, NULL, + start, end); + if (!new_part) + goto error; + if (!ped_disk_add_partition (disk, new_part, NULL)) + goto error_destroy_new_part; + + return 1; + +error_destroy_new_part: + ped_partition_destroy (new_part); +error: + return 0; +} + +/* There are a few objectives here: + * - avoid having lots of "free space" partitions lying around, to confuse + * the front end. + * - ensure that there's enough room to put in the extended partition + * tables, etc. + */ +static int +add_logical_part_metadata (PedDisk* disk, const PedPartition* log_part) +{ + PedPartition* ext_part = ped_disk_extended_partition (disk); + PedPartition* prev = log_part->prev; + PedCHSGeometry bios_geom; + PedSector cyl_size; + PedSector metadata_start; + PedSector metadata_end; + PedSector metadata_length; + + partition_probe_bios_geometry (ext_part, &bios_geom); + cyl_size = bios_geom.sectors * bios_geom.heads; + + /* if there's metadata shortly before the partition (on the same + * cylinder), then make this new metadata partition touch the end of + * the other. No point having 63 bytes (or whatever) of free space + * partition - just confuses front-ends, etc. + * Otherwise, start the metadata at the start of the cylinder + */ + + metadata_end = log_part->geom.start - 1; + metadata_start = ped_round_down_to (metadata_end, cyl_size); + if (prev) + metadata_start = PED_MAX (metadata_start, prev->geom.end + 1); + else + metadata_start = PED_MAX (metadata_start, + ext_part->geom.start + 1); + metadata_length = metadata_end - metadata_start + 1; + + /* partition 5 doesn't need to have any metadata */ + if (log_part->num == 5 && metadata_length < bios_geom.sectors) + return 1; + + PED_ASSERT (metadata_length > 0); + + return add_metadata_part (disk, PED_PARTITION_LOGICAL, + metadata_start, metadata_end); +} + +/* + * Find the starting sector number of the first non-free partition, + * set *SECTOR to that value, and return 1. + * If there is no non-free partition, don't modify *SECTOR and return 0. + */ +static int +get_start_first_nonfree_part (const PedDisk* disk, PedSector *sector) +{ + PedPartition* walk; + + // disk->part_list is the first partition on the disk. + if (!disk->part_list) + return 0; + + for (walk = disk->part_list; walk; walk = walk->next) { + if (walk->type == PED_PARTITION_NORMAL || + walk->type == PED_PARTITION_EXTENDED) { + *sector = walk->geom.start; + return 1; + } + } + return 0; +} + +/* + * Find the ending sector number of the last non-free partition, + * set *SECTOR to that value, and return 1. + * If there is no non-free partition, don't modify *SECTOR and return 0. + */ +static int +get_end_last_nonfree_part (const PedDisk* disk, PedSector *sector) +{ + PedPartition* last_part = NULL; + PedPartition* walk; + + // disk->part_list is the first partition on the disk. + if (!disk->part_list) + return 0; + + for (walk = disk->part_list; walk; walk = walk->next) { + if (walk->type == PED_PARTITION_NORMAL || + walk->type == PED_PARTITION_EXTENDED) { + last_part = walk; + } + } + + if (!last_part) + return 0; + else { + *sector = last_part->geom.end; + return 1; + } +} + +/* Adds metadata placeholder partitions to cover the partition table (and + * "free" space after it that often has bootloader stuff), and the last + * incomplete cylinder at the end of the disk. + * Parted has to be mindful of the uncertainty of dev->bios_geom. + * It therefore makes sure this metadata doesn't overlap with partitions. + */ +static int +add_startend_metadata (PedDisk* disk) +{ + PedDevice* dev = disk->dev; + PedSector cyl_size = dev->bios_geom.sectors * dev->bios_geom.heads; + PedSector init_start, init_end, final_start, final_end; + + // Ranges for the initial and final metadata partition. + init_start = 0; + if (!get_start_first_nonfree_part(disk, &init_end)) + init_end = dev->bios_geom.sectors - 1; + else + init_end = PED_MIN (dev->bios_geom.sectors - 1, init_end - 1); + + DosDiskData *disk_specific = disk->disk_specific; + if (!disk_specific->cylinder_alignment) + final_start = dev->length - 1; + else if (!get_end_last_nonfree_part(disk, &final_start)) + final_start = ped_round_down_to (dev->length, cyl_size); + else + final_start = PED_MAX (final_start + 1, + ped_round_down_to (dev->length, cyl_size)); + final_end = dev->length - 1; + + // Create the metadata partitions. + // init_end <= dev->length for devices that are _real_ small. + if (init_start < init_end && + init_end <= dev->length && + !add_metadata_part (disk, PED_PARTITION_NORMAL, + init_start, init_end)) + return 0; + + // init_end < final_start so they dont overlap. For very small devs. + if (final_start < final_end && + init_end < final_start && + final_end <= dev->length && + !add_metadata_part (disk, PED_PARTITION_NORMAL, + final_start, final_end)) + return 0; + + return 1; +} + +static int +msdos_alloc_metadata (PedDisk* disk) +{ + PedPartition* ext_part; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + if (!add_startend_metadata (disk)) + return 0; + + ext_part = ped_disk_extended_partition (disk); + if (ext_part) { + int i; + PedSector start, end; + PedCHSGeometry bios_geom; + + for (i=5; 1; i++) { + PedPartition* log_part; + log_part = ped_disk_get_partition (disk, i); + if (!log_part) + break; + if (!add_logical_part_metadata (disk, log_part)) + return 0; + } + + partition_probe_bios_geometry (ext_part, &bios_geom); + start = ext_part->geom.start; + end = start + bios_geom.sectors - 1; + if (ext_part->part_list) + end = PED_MIN (end, + ext_part->part_list->geom.start - 1); + if (!add_metadata_part (disk, PED_PARTITION_LOGICAL, + start, end)) + return 0; + } + + return 1; +} + +static int +next_primary (const PedDisk* disk) +{ + int i; + for (i=1; i<=DOS_N_PRI_PARTITIONS; i++) { + if (!ped_disk_get_partition (disk, i)) + return i; + } + return -1; +} + +static int _GL_ATTRIBUTE_PURE +next_logical (const PedDisk* disk) +{ + int i; + for (i=5; i<=MAX_TOTAL_PART; i++) { + if (!ped_disk_get_partition (disk, i)) + return i; + } + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("cannot create any more partitions"), + disk->dev->path); + return -1; +} + +static int +msdos_partition_enumerate (PedPartition* part) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + + /* don't re-number a primary partition */ + if (part->num != -1 && part->num <= DOS_N_PRI_PARTITIONS) + return 1; + + part->num = -1; + + if (part->type & PED_PARTITION_LOGICAL) + part->num = next_logical (part->disk); + else + part->num = next_primary (part->disk); + if (part->num == -1) + return 0; + return 1; +} + +static int +msdos_get_max_primary_partition_count (const PedDisk* disk) +{ + return DOS_N_PRI_PARTITIONS; +} + +static bool +msdos_get_max_supported_partition_count(const PedDisk* disk, int *max_n) +{ + *max_n = MAX_TOTAL_PART; + return true; +} + +#include "pt-common.h" +PT_define_limit_functions (msdos) + +static PedDiskOps msdos_disk_ops = { + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (msdos_write), + + disk_set_flag: msdos_disk_set_flag, + disk_get_flag: msdos_disk_get_flag, + disk_is_flag_available: msdos_disk_is_flag_available, + + partition_set_name: NULL, + partition_get_name: NULL, + partition_set_type_id: msdos_partition_set_type_id, + partition_get_type_id: msdos_partition_get_type_id, + partition_set_type_uuid: NULL, + partition_get_type_uuid: NULL, + + PT_op_function_initializers (msdos) +}; + +static PedDiskType msdos_disk_type = { + next: NULL, + name: "msdos", + ops: &msdos_disk_ops, + features: PED_DISK_TYPE_EXTENDED | PED_DISK_TYPE_PARTITION_TYPE_ID +}; + +void +ped_disk_msdos_init () +{ + PED_ASSERT (sizeof (DosRawPartition) == 16); + PED_ASSERT (sizeof (DosRawTable) == 512); + + ped_disk_type_register (&msdos_disk_type); +} + +void +ped_disk_msdos_done () +{ + ped_disk_type_unregister (&msdos_disk_type); +} diff --git a/jni/parted/libparted/labels/dvh.c b/jni/parted/libparted/labels/dvh.c new file mode 100755 index 0000000..0f9124d --- /dev/null +++ b/jni/parted/libparted/labels/dvh.c @@ -0,0 +1,896 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2001-2002, 2005, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include +#include +#include +#include + +#include "dvh.h" +#include "pt-tools.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +/* Default size for volhdr part, same val as IRIX's fx uses */ +#define PTYPE_VOLHDR_DFLTSZ 4096 + +/* Partition numbers that seem to be strongly held convention */ +#define PNUM_VOLHDR 8 +#define PNUM_VOLUME 10 + +/* Other notes of interest: + * PED_PARTITION_EXTENDED is used for volume headers + * PED_PARTITION_LOGICAL is used for bootfiles + * PED_PARTITION_NORMAL is used for all else + */ + +typedef struct _DVHDiskData { + struct device_parameters dev_params; + int swap; /* part num of swap, 0=none */ + int root; /* part num of root, 0=none */ + int boot; /* part num of boot, 0=none */ +} DVHDiskData; + +typedef struct _DVHPartData { + int type; + char name[VDNAMESIZE + 1]; /* boot volumes only */ + int real_file_size; /* boot volumes only */ +} DVHPartData; + +static PedDiskType dvh_disk_type; + +static int +dvh_probe (const PedDevice *dev) +{ + struct volume_header *vh; + + void *label; + if (!ptt_read_sector (dev, 0, &label)) + return 0; + + vh = (struct volume_header *) label; + + bool found = PED_BE32_TO_CPU (vh->vh_magic) == VHMAGIC; + free (label); + return found; +} + +static PedDisk* +dvh_alloc (const PedDevice* dev) +{ + PedDisk* disk; + DVHDiskData* dvh_disk_data; + PedPartition* volume_part; + PedConstraint* constraint_any; + + disk = _ped_disk_alloc (dev, &dvh_disk_type); + if (!disk) + goto error; + + disk->disk_specific = dvh_disk_data + = ped_malloc (sizeof (DVHDiskData)); + if (!dvh_disk_data) + goto error_free_disk; + + memset (&dvh_disk_data->dev_params, 0, + sizeof (struct device_parameters)); + dvh_disk_data->swap = 0; + dvh_disk_data->root = 0; + dvh_disk_data->boot = 0; + + volume_part = ped_partition_new (disk, PED_PARTITION_EXTENDED, NULL, + 0, PTYPE_VOLHDR_DFLTSZ - 1); + if (!volume_part) + goto error_free_disk_specific; + volume_part->num = PNUM_VOLHDR + 1; + constraint_any = ped_constraint_any (dev); + if (!ped_disk_add_partition (disk, volume_part, constraint_any)) + goto error_destroy_constraint_any; + ped_constraint_destroy (constraint_any); + return disk; + +error_destroy_constraint_any: + ped_constraint_destroy (constraint_any); + ped_partition_destroy (volume_part); +error_free_disk_specific: + free (disk->disk_specific); +error_free_disk: + free (disk); +error: + return NULL; +} + +static PedDisk* +dvh_duplicate (const PedDisk* disk) +{ + PedDisk* new_disk; + DVHDiskData* new_dvh_disk_data; + DVHDiskData* old_dvh_disk_data = disk->disk_specific; + + PED_ASSERT (old_dvh_disk_data != NULL); + + new_disk = ped_disk_new_fresh (disk->dev, &dvh_disk_type); + if (!new_disk) + goto error; + + new_disk->disk_specific = new_dvh_disk_data + = ped_malloc (sizeof (DVHDiskData)); + if (!new_dvh_disk_data) + goto error_free_new_disk; + + new_dvh_disk_data->dev_params = old_dvh_disk_data->dev_params; + return new_disk; + +error_free_new_disk: + free (new_disk); +error: + return NULL; +} + +static void +dvh_free (PedDisk* disk) +{ + free (disk->disk_specific); + _ped_disk_free (disk); +} + +/* two's complement 32-bit checksum */ +static uint32_t _GL_ATTRIBUTE_PURE +_checksum (const uint32_t* base, size_t size) +{ + uint32_t sum = 0; + size_t i; + + for (i = 0; i < size / sizeof (uint32_t); i++) + sum = sum - PED_BE32_TO_CPU (base[i]); + + return sum; +} + +/* try to make a reasonable volume header partition... */ +static PedExceptionOption +_handle_no_volume_header (PedDisk* disk) +{ + PedExceptionOption ret; + PedPartition* part; + PedConstraint* constraint; + + switch (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_FIX + PED_EXCEPTION_CANCEL, + _("%s has no extended partition (volume header partition)."), + disk->dev->path)) { + case PED_EXCEPTION_UNHANDLED: + case PED_EXCEPTION_FIX: + default: + part = ped_partition_new ( + disk, PED_PARTITION_EXTENDED, NULL, + 0, PTYPE_VOLHDR_DFLTSZ - 1); + if (!part) + goto error; + part->num = PNUM_VOLHDR + 1; + constraint = ped_constraint_any (part->disk->dev); + if (!constraint) + goto error_destroy_part; + if (!ped_disk_add_partition (disk, part, constraint)) + goto error_destroy_constraint; + ped_constraint_destroy (constraint); + ret = PED_EXCEPTION_FIX; + break; + + case PED_EXCEPTION_CANCEL: + goto error; + } + return ret; + +error_destroy_constraint: + ped_constraint_destroy (constraint); +error_destroy_part: + ped_partition_destroy (part); +error: + return PED_EXCEPTION_CANCEL; +} + +static PedPartition* +_parse_partition (PedDisk* disk, struct partition_table* pt) +{ + PedPartition* part; + DVHPartData* dvh_part_data; + PedSector start = PED_BE32_TO_CPU (pt->pt_firstlbn); + PedSector length = PED_BE32_TO_CPU (pt->pt_nblks); + + part = ped_partition_new (disk, + pt->pt_type ? 0 : PED_PARTITION_EXTENDED, + NULL, + start, start + length - 1); + if (!part) + return NULL; + + dvh_part_data = part->disk_specific; + dvh_part_data->type = PED_BE32_TO_CPU (pt->pt_type); + strcpy (dvh_part_data->name, ""); + + return part; +} + +static PedPartition* +_parse_boot_file (PedDisk* disk, struct volume_directory* vd) +{ + PedPartition* part; + DVHPartData* dvh_part_data; + PedSector start = PED_BE32_TO_CPU (vd->vd_lbn); + int length = PED_BE32_TO_CPU (vd->vd_nbytes); + + part = ped_partition_new (disk, PED_PARTITION_LOGICAL, NULL, + start, start + length/512 - 1); + if (!part) + return NULL; + + dvh_part_data = part->disk_specific; + dvh_part_data->real_file_size = length; + + memcpy (dvh_part_data->name, vd->vd_name, VDNAMESIZE); + dvh_part_data->name[VDNAMESIZE] = 0; + return part; +} + +static int dvh_write (const PedDisk* disk); + +/* YUCK + * + * If you remove a boot/root/swap partition, the disk->disk_specific + * thing isn't updated. (Probably reflects a design bug somewhere...) + * Anyway, the workaround is: flush stale flags whenever we allocate + * new partition numbers, and before we write to disk. + */ +static void +_flush_stale_flags (const PedDisk* disk) +{ + DVHDiskData* dvh_disk_data = disk->disk_specific; + + if (dvh_disk_data->root + && !ped_disk_get_partition (disk, dvh_disk_data->root)) + dvh_disk_data->root = 0; + if (dvh_disk_data->swap + && !ped_disk_get_partition (disk, dvh_disk_data->swap)) + dvh_disk_data->swap = 0; + if (dvh_disk_data->boot + && !ped_disk_get_partition (disk, dvh_disk_data->boot)) + dvh_disk_data->boot = 0; +} + +static int +dvh_read (PedDisk* disk) +{ + DVHDiskData* dvh_disk_data = disk->disk_specific; + int i; + struct volume_header vh; + char boot_name [BFNAMESIZE + 1]; +#ifndef DISCOVER_ONLY + int write_back = 0; +#endif + + PED_ASSERT (dvh_disk_data != NULL); + + ped_disk_delete_all (disk); + + void *s0; + if (!ptt_read_sector (disk->dev, 0, &s0)) + return 0; + memcpy (&vh, s0, sizeof vh); + free (s0); + + if (_checksum ((uint32_t*) &vh, sizeof (struct volume_header))) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Checksum is wrong, indicating the partition " + "table is corrupt.")) + == PED_EXCEPTION_CANCEL) + return 0; + } + + PED_ASSERT (PED_BE32_TO_CPU (vh.vh_magic) == VHMAGIC); + + dvh_disk_data->dev_params = vh.vh_dp; + boot_name[BFNAMESIZE] = 0; + strncpy (boot_name, vh.vh_bootfile, BFNAMESIZE); + + /* normal partitions */ + for (i = 0; i < NPARTAB; i++) { + PedPartition* part; + + if (!vh.vh_pt[i].pt_nblks) + continue; + /* Skip the whole-disk partition, parted disklikes overlap */ + if (PED_BE32_TO_CPU (vh.vh_pt[i].pt_type) == PTYPE_VOLUME) + continue; + + part = _parse_partition (disk, &vh.vh_pt[i]); + if (!part) + goto error_delete_all; + + part->fs_type = ped_file_system_probe (&part->geom); + part->num = i + 1; + + if (PED_BE16_TO_CPU (vh.vh_rootpt) == i) + ped_partition_set_flag (part, PED_PARTITION_ROOT, 1); + if (PED_BE16_TO_CPU (vh.vh_swappt) == i) + ped_partition_set_flag (part, PED_PARTITION_SWAP, 1); + + PedConstraint *constraint_exact + = ped_constraint_exact (&part->geom); + bool ok = ped_disk_add_partition (disk, part, constraint_exact); + ped_constraint_destroy (constraint_exact); + if (!ok) { + ped_partition_destroy (part); + goto error_delete_all; + } + } + + if (!ped_disk_extended_partition (disk)) { +#ifdef DISCOVER_ONLY + return 1; +#else + switch (_handle_no_volume_header (disk)) { + case PED_EXCEPTION_CANCEL: + return 0; + case PED_EXCEPTION_IGNORE: + return 1; + case PED_EXCEPTION_FIX: + write_back = 1; + break; + default: + break; + } +#endif + } + + /* boot partitions */ + for (i = 0; i < NVDIR; i++) { + PedPartition* part; + + if (!vh.vh_vd[i].vd_nbytes) + continue; + + part = _parse_boot_file (disk, &vh.vh_vd[i]); + if (!part) + goto error_delete_all; + + part->fs_type = ped_file_system_probe (&part->geom); + part->num = NPARTAB + i + 1; + + if (!strcmp (boot_name, ped_partition_get_name (part))) + ped_partition_set_flag (part, PED_PARTITION_BOOT, 1); + + PedConstraint *constraint_exact + = ped_constraint_exact (&part->geom); + bool ok = ped_disk_add_partition (disk, part, constraint_exact); + ped_constraint_destroy (constraint_exact); + if (!ok) { + ped_partition_destroy (part); + goto error_delete_all; + } + } +#ifndef DISCOVER_ONLY + if (write_back) + dvh_write (disk); +#endif + return 1; + +error_delete_all: + ped_disk_delete_all (disk); + return 0; +} + +#ifndef DISCOVER_ONLY +static void +_generate_partition (PedPartition* part, struct partition_table* pt) +{ + DVHPartData* dvh_part_data = part->disk_specific; + + /* Assert not a bootfile */ + PED_ASSERT ((part->type & PED_PARTITION_LOGICAL) == 0); + + pt->pt_nblks = PED_CPU_TO_BE32 (part->geom.length); + pt->pt_firstlbn = PED_CPU_TO_BE32 (part->geom.start); + pt->pt_type = PED_CPU_TO_BE32 (dvh_part_data->type); +} + +static void +_generate_boot_file (PedPartition* part, struct volume_directory* vd) +{ + DVHPartData* dvh_part_data = part->disk_specific; + + /* Assert it's a bootfile */ + PED_ASSERT ((part->type & PED_PARTITION_LOGICAL) != 0); + + vd->vd_nbytes = PED_CPU_TO_BE32 (dvh_part_data->real_file_size); + vd->vd_lbn = PED_CPU_TO_BE32 (part->geom.start); + + memset (vd->vd_name, 0, VDNAMESIZE); + memcpy (vd->vd_name, dvh_part_data->name, VDNAMESIZE); +} + +static int +dvh_write (const PedDisk* disk) +{ + DVHDiskData* dvh_disk_data = disk->disk_specific; + struct volume_header vh; + int i; + + PED_ASSERT (dvh_disk_data != NULL); + + _flush_stale_flags (disk); + + memset (&vh, 0, sizeof (struct volume_header)); + + vh.vh_magic = PED_CPU_TO_BE32 (VHMAGIC); + vh.vh_rootpt = PED_CPU_TO_BE16 (dvh_disk_data->root - 1); + vh.vh_swappt = PED_CPU_TO_BE16 (dvh_disk_data->swap - 1); + + if (dvh_disk_data->boot) { + PedPartition* boot_part; + boot_part = ped_disk_get_partition (disk, dvh_disk_data->boot); + strcpy (vh.vh_bootfile, ped_partition_get_name (boot_part)); + } + + vh.vh_dp = dvh_disk_data->dev_params; + /* Set up rudimentary device geometry */ + vh.vh_dp.dp_cyls + = PED_CPU_TO_BE16 ((short)disk->dev->bios_geom.cylinders); + vh.vh_dp.dp_trks0 = PED_CPU_TO_BE16 ((short)disk->dev->bios_geom.heads); + vh.vh_dp.dp_secs + = PED_CPU_TO_BE16 ((short)disk->dev->bios_geom.sectors); + vh.vh_dp.dp_secbytes = PED_CPU_TO_BE16 ((short)disk->dev->sector_size); + + for (i = 0; i < NPARTAB; i++) { + PedPartition* part = ped_disk_get_partition (disk, i + 1); + if (part) + _generate_partition (part, &vh.vh_pt[i]); + } + + /* whole disk partition + * This is only ever written here, and never modified + * (or even shown) as it must contain the entire disk, + * and parted does not like overlapping partitions + */ + vh.vh_pt[PNUM_VOLUME].pt_nblks = PED_CPU_TO_BE32 (disk->dev->length); + vh.vh_pt[PNUM_VOLUME].pt_firstlbn = PED_CPU_TO_BE32 (0); + vh.vh_pt[PNUM_VOLUME].pt_type = PED_CPU_TO_BE32 (PTYPE_VOLUME); + + for (i = 0; i < NVDIR; i++) { + PedPartition* part = ped_disk_get_partition (disk, + i + 1 + NPARTAB); + if (part) + _generate_boot_file (part, &vh.vh_vd[i]); + } + + vh.vh_csum = 0; + vh.vh_csum = PED_CPU_TO_BE32 (_checksum ((uint32_t*) &vh, + sizeof (struct volume_header))); + + return (ptt_write_sector (disk, &vh, sizeof vh) + && ped_device_sync (disk->dev)); +} +#endif /* !DISCOVER_ONLY */ + +static PedPartition* +dvh_partition_new (const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + PedPartition* part; + DVHPartData* dvh_part_data; + + part = _ped_partition_alloc (disk, part_type, fs_type, start, end); + if (!part) + goto error; + + if (!ped_partition_is_active (part)) { + part->disk_specific = NULL; + return part; + } + + dvh_part_data = part->disk_specific = + ped_malloc (sizeof (DVHPartData)); + if (!dvh_part_data) + goto error_free_part; + + dvh_part_data->type = (part_type == PED_PARTITION_EXTENDED) + ? PTYPE_VOLHDR + : PTYPE_RAW; + strcpy (dvh_part_data->name, ""); + dvh_part_data->real_file_size = part->geom.length * 512; + return part; + +error_free_part: + _ped_partition_free (part); +error: + return NULL; +} + +static PedPartition* +dvh_partition_duplicate (const PedPartition* part) +{ + PedPartition* result; + DVHPartData* part_data = part->disk_specific; + DVHPartData* result_data; + + result = _ped_partition_alloc (part->disk, part->type, part->fs_type, + part->geom.start, part->geom.end); + if (!result) + goto error; + result->num = part->num; + + if (!ped_partition_is_active (part)) { + result->disk_specific = NULL; + return result; + } + + result_data = result->disk_specific = + ped_malloc (sizeof (DVHPartData)); + if (!result_data) + goto error_free_part; + + result_data->type = part_data->type; + strcpy (result_data->name, part_data->name); + result_data->real_file_size = part_data->real_file_size; + return result; + +error_free_part: + _ped_partition_free (result); +error: + return NULL; +} + +static void +dvh_partition_destroy (PedPartition* part) +{ + if (ped_partition_is_active (part)) { + PED_ASSERT (part->disk_specific != NULL); + free (part->disk_specific); + } + _ped_partition_free (part); +} + +static int +dvh_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type) +{ + DVHPartData* dvh_part_data = part->disk_specific; + + part->fs_type = fs_type; + + if (part->type == PED_PARTITION_EXTENDED) { + dvh_part_data->type = PTYPE_VOLHDR; + return 1; + } + + /* Is this a bootfile? */ + if (part->type == PED_PARTITION_LOGICAL) + return 1; + + if (fs_type && !strcmp (fs_type->name, "xfs")) + dvh_part_data->type = PTYPE_XFS; + else + dvh_part_data->type = PTYPE_RAW; + return 1; +} + +static int +dvh_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + DVHDiskData* dvh_disk_data = part->disk->disk_specific; + + switch (flag) { + case PED_PARTITION_ROOT: + if (part->type != 0 && state) { +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Only primary partitions can be root " + "partitions.")); +#endif + return 0; + } + dvh_disk_data->root = state ? part->num : 0; + break; + + case PED_PARTITION_SWAP: + if (part->type != 0 && state) { +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Only primary partitions can be swap " + "partitions.")); + return 0; +#endif + } + dvh_disk_data->swap = state ? part->num : 0; + break; + + case PED_PARTITION_BOOT: + if (part->type != PED_PARTITION_LOGICAL && state) { +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Only logical partitions can be a boot " + "file.")); +#endif + return 0; + } + dvh_disk_data->boot = state ? part->num : 0; + break; + + case PED_PARTITION_LVM: + case PED_PARTITION_LBA: + case PED_PARTITION_HIDDEN: + case PED_PARTITION_RAID: + default: + return 0; + } + return 1; +} + +static int _GL_ATTRIBUTE_PURE +dvh_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + DVHDiskData* dvh_disk_data = part->disk->disk_specific; + + switch (flag) { + case PED_PARTITION_ROOT: + return dvh_disk_data->root == part->num; + + case PED_PARTITION_SWAP: + return dvh_disk_data->swap == part->num; + + case PED_PARTITION_BOOT: + return dvh_disk_data->boot == part->num; + + case PED_PARTITION_LVM: + case PED_PARTITION_LBA: + case PED_PARTITION_HIDDEN: + case PED_PARTITION_RAID: + default: + return 0; + } + return 1; +} + +static int +dvh_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + switch (flag) { + case PED_PARTITION_ROOT: + case PED_PARTITION_SWAP: + case PED_PARTITION_BOOT: + return 1; + + case PED_PARTITION_LVM: + case PED_PARTITION_LBA: + case PED_PARTITION_HIDDEN: + case PED_PARTITION_RAID: + default: + return 0; + } + return 1; +} + +static void +dvh_partition_set_name (PedPartition* part, const char* name) +{ + DVHPartData* dvh_part_data = part->disk_specific; + + if (part->type == PED_PARTITION_LOGICAL) { + /* Bootfile */ + memcpy (dvh_part_data->name, name, VDNAMESIZE); + dvh_part_data->name[VDNAMESIZE] = 0; + } else { +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("failed to set dvh partition name to %s:\n" + "Only logical partitions (boot files) have a name."), + name); +#endif + } +} + +static const char* +dvh_partition_get_name (const PedPartition* part) +{ + DVHPartData* dvh_part_data = part->disk_specific; + return dvh_part_data->name; +} + +/* The constraint for the volume header partition is different, because it must + * contain the first sector of the disk. + */ +static PedConstraint* +_get_extended_constraint (PedDisk* disk) +{ + PedGeometry min_geom; + if (!ped_geometry_init (&min_geom, disk->dev, 0, 1)) + return NULL; + return ped_constraint_new_from_min (&min_geom); +} + +static PedConstraint* +_get_primary_constraint (PedDisk* disk) +{ + PedGeometry max_geom; + if (!ped_geometry_init (&max_geom, disk->dev, 1, disk->dev->length - 1)) + return NULL; + return ped_constraint_new_from_max (&max_geom); +} + +static int +dvh_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + PED_ASSERT (part != NULL); + + if (_ped_partition_attempt_align ( + part, constraint, + (part->type == PED_PARTITION_EXTENDED) + ? _get_extended_constraint (part->disk) + : _get_primary_constraint (part->disk))) + return 1; + +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + return 0; +} + +static int +dvh_partition_enumerate (PedPartition* part) +{ + int i; + + /* never change the partition numbers */ + if (part->num != -1) + return 1; + + _flush_stale_flags (part->disk); + + if (part->type & PED_PARTITION_LOGICAL) { + /* Bootfile */ + for (i = 1 + NPARTAB; i <= NPARTAB + NVDIR; i++) { + if (!ped_disk_get_partition (part->disk, i)) { + part->num = i; + return 1; + } + } + PED_ASSERT (0); + } else if (part->type & PED_PARTITION_EXTENDED) { + /* Volheader */ + part->num = PNUM_VOLHDR + 1; + } else { + for (i = 1; i <= NPARTAB; i++) { + /* reserved for full volume partition */ + if (i == PNUM_VOLUME + 1) + continue; + + if (!ped_disk_get_partition (part->disk, i)) { + part->num = i; + return 1; + } + } + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Too many primary partitions")); + } + + return 0; +} + +static int +dvh_get_max_primary_partition_count (const PedDisk* disk) +{ + return NPARTAB; +} + +static bool +dvh_get_max_supported_partition_count (const PedDisk* disk, int *max_n) +{ + *max_n = NPARTAB; + return true; +} + + +static int +dvh_alloc_metadata (PedDisk* disk) +{ + PedPartition* part; + PedPartition* extended_part; + PedPartitionType metadata_type; + PED_ASSERT(disk != NULL); + + /* We don't need to "protect" the start of the disk from the volume + * header. + */ + extended_part = ped_disk_extended_partition (disk); + if (extended_part && extended_part->geom.start == 0) + metadata_type = PED_PARTITION_METADATA | PED_PARTITION_LOGICAL; + else + metadata_type = PED_PARTITION_METADATA; + + part = ped_partition_new (disk, metadata_type, NULL, 0, 0); + if (!part) + goto error; + + PedConstraint *constraint_exact + = ped_constraint_exact (&part->geom); + bool ok = ped_disk_add_partition (disk, part, constraint_exact); + ped_constraint_destroy (constraint_exact); + if (ok) + return 1; + + ped_partition_destroy (part); +error: + return 0; +} + +#include "pt-common.h" +PT_define_limit_functions (dvh) + +static PedDiskOps dvh_disk_ops = { + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (dvh_write), + + partition_set_name: dvh_partition_set_name, + partition_get_name: dvh_partition_get_name, + PT_op_function_initializers (dvh) +}; + +static PedDiskType dvh_disk_type = { + next: NULL, + name: "dvh", + ops: &dvh_disk_ops, + features: PED_DISK_TYPE_PARTITION_NAME | PED_DISK_TYPE_EXTENDED +}; + +void +ped_disk_dvh_init () +{ + PED_ASSERT (sizeof (struct volume_header) == 512); + + ped_disk_type_register (&dvh_disk_type); +} + +void +ped_disk_dvh_done () +{ + ped_disk_type_unregister (&dvh_disk_type); +} diff --git a/jni/parted/libparted/labels/dvh.h b/jni/parted/libparted/labels/dvh.h new file mode 100755 index 0000000..7e7fae7 --- /dev/null +++ b/jni/parted/libparted/labels/dvh.h @@ -0,0 +1,178 @@ +/* + Copyright (C) 1985 MIPS Computer Systems, Inc. + Copyright (C) 2000 Silicon Graphics Computer Systems, Inc. + + 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 3 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, see . +*/ + +#ifndef _SYS_DVH_H +#define _SYS_DVH_H + +/* + * Format for volume header information + * + * The volume header is a block located at the beginning of all disk + * media (sector 0). It contains information pertaining to physical + * device parameters and logical partition information. + * + * The volume header is manipulated by disk formatters/verifiers, + * partition builders (e.g. fx, dvhtool, and mkfs), and disk drivers. + * + * Previous versions of IRIX wrote a copy of the volume header is + * located at sector 0 of each track of cylinder 0. These copies were + * never used, and reduced the capacity of the volume header to hold large + * files, so this practice was discontinued. + * The volume header is constrained to be less than or equal to 512 + * bytes long. A particular copy is assumed valid if no drive errors + * are detected, the magic number is correct, and the 32 bit 2's complement + * of the volume header is correct. The checksum is calculated by initially + * zeroing vh_csum, summing the entire structure and then storing the + * 2's complement of the sum. Thus a checksum to verify the volume header + * should be 0. + * + * The error summary table, bad sector replacement table, and boot blocks are + * located by searching the volume directory within the volume header. + * + * Tables are sized simply by the integral number of table records that + * will fit in the space indicated by the directory entry. + * + * The amount of space allocated to the volume header, replacement blocks, + * and other tables is user defined when the device is formatted. + */ + +/* + * device parameters are in the volume header to determine mapping + * from logical block numbers to physical device addresses + * + * Linux doesn't care ... + */ +struct device_parameters { + unsigned char dp_skew; /* spiral addressing skew */ + unsigned char dp_gap1; /* words of 0 before header */ + unsigned char dp_gap2; /* words of 0 between hdr and data */ + unsigned char dp_spares_cyl; /* This is for drives (such as SCSI + that support zone oriented sparing, where the zone is larger + than one track. It gets subracteded from the cylinder size + ( dp_trks0 * dp_sec) when doing partition size calculations */ + unsigned short dp_cyls; /* number of usable cylinders (i.e., + doesn't include cylinders reserved by the drive for badblocks, + etc.). For drives with variable geometry, this number may be + decreased so that: + dp_cyls * ((dp_heads * dp_trks0) - dp_spares_cyl) <= actualcapacity + This happens on SCSI drives such as the Wren IV and Toshiba 156 + Also see dp_cylshi below */ + unsigned short dp_shd0; /* starting head vol 0 */ + unsigned short dp_trks0; /* number of tracks / cylinder vol 0*/ + unsigned char dp_ctq_depth; /* Depth of CTQ queue */ + unsigned char dp_cylshi; /* high byte of 24 bits of cylinder count */ + unsigned short dp_unused; /* not used */ + unsigned short dp_secs; /* number of sectors/track */ + unsigned short dp_secbytes; /* length of sector in bytes */ + unsigned short dp_interleave; /* sector interleave */ + int dp_flags; /* controller characteristics */ + int dp_datarate; /* bytes/sec for kernel stats */ + int dp_nretries; /* max num retries on data error */ + int dp_mspw; /* ms per word to xfer, for iostat */ + unsigned short dp_xgap1; /* Gap 1 for xylogics controllers */ + unsigned short dp_xsync; /* sync delay for xylogics controllers */ + unsigned short dp_xrdly; /* read delay for xylogics controllers */ + unsigned short dp_xgap2; /* gap 2 for xylogics controllers */ + unsigned short dp_xrgate; /* read gate for xylogics controllers */ + unsigned short dp_xwcont; /* write continuation for xylogics */ +}; + +/* + * Device characterization flags + * (dp_flags) + */ +#define DP_SECTSLIP 0x00000001 /* sector slip to spare sector */ +#define DP_SECTFWD 0x00000002 /* forward to replacement sector */ +#define DP_TRKFWD 0x00000004 /* forward to replacement track */ +#define DP_MULTIVOL 0x00000008 /* multiple volumes per spindle */ +#define DP_IGNOREERRORS 0x00000010 /* transfer data regardless of errors */ +#define DP_RESEEK 0x00000020 /* recalibrate as last resort */ +#define DP_CTQ_EN 0x00000040 /* enable command tag queueing */ + +/* + * Boot blocks, bad sector tables, and the error summary table, are located + * via the volume_directory. + */ +#define VDNAMESIZE 8 + +struct volume_directory { + char vd_name[VDNAMESIZE]; /* name */ + unsigned int vd_lbn; /* logical block number */ + unsigned int vd_nbytes; /* file length in bytes */ +}; + +/* + * partition table describes logical device partitions + * (device drivers examine this to determine mapping from logical units + * to cylinder groups, device formatters/verifiers examine this to determine + * location of replacement tracks/sectors, etc) + * + * NOTE: pt_firstlbn SHOULD BE CYLINDER ALIGNED + */ +struct partition_table { /* one per logical partition */ + unsigned int pt_nblks; /* # of logical blks in partition */ + unsigned int pt_firstlbn; /* first lbn of partition */ + int pt_type; /* use of partition */ +}; + +#define PTYPE_VOLHDR 0 /* partition is volume header */ +#define PTYPE_TRKREPL 1 /* partition is used for repl trks */ +#define PTYPE_SECREPL 2 /* partition is used for repl secs */ +#define PTYPE_RAW 3 /* partition is used for data */ +#define PTYPE_BSD42 4 /* partition is 4.2BSD file system */ +#define PTYPE_BSD 4 /* partition is 4.2BSD file system */ +#define PTYPE_SYSV 5 /* partition is SysV file system */ +#define PTYPE_VOLUME 6 /* partition is entire volume */ +#define PTYPE_EFS 7 /* partition is sgi EFS */ +#define PTYPE_LVOL 8 /* partition is part of a logical vol */ +#define PTYPE_RLVOL 9 /* part of a "raw" logical vol */ +#define PTYPE_XFS 10 /* partition is sgi XFS */ +#define PTYPE_XFSLOG 11 /* partition is sgi XFS log */ +#define PTYPE_XLV 12 /* partition is part of an XLV vol */ +#define PTYPE_XVM 13 /* partition is sgi XVM */ +#define NPTYPES 16 + +#define VHMAGIC 0xbe5a941 /* randomly chosen value */ +#define NPARTAB 16 /* 16 unix partitions */ +#define NVDIR 15 /* max of 15 directory entries */ +#define BFNAMESIZE 16 /* max 16 chars in boot file name */ + +/* Partition types for ARCS */ +#define NOT_USED 0 /* Not used */ +#define FAT_SHORT 1 /* FAT file system, 12-bit FAT entries */ +#define FAT_LONG 4 /* FAT file system, 16-bit FAT entries */ +#define EXTENDED 5 /* extended partition */ +#define HUGE 6 /* huge partition- MS/DOS 4.0 and later */ + +/* Active flags for ARCS */ +#define BOOTABLE 0x00; +#define NOT_BOOTABLE 0x80; + +struct volume_header { + int vh_magic; /* identifies volume header */ + short vh_rootpt; /* root partition number */ + short vh_swappt; /* swap partition number */ + char vh_bootfile[BFNAMESIZE]; /* name of file to boot */ + struct device_parameters vh_dp; /* device parameters */ + struct volume_directory vh_vd[NVDIR]; /* other vol hdr contents */ + struct partition_table vh_pt[NPARTAB]; /* device partition layout */ + int vh_csum; /* volume header checksum */ + int vh_fill; /* fill out to 512 bytes */ +}; + +#endif /* _SYS_DVH_H */ diff --git a/jni/parted/libparted/labels/efi_crc32.c b/jni/parted/libparted/labels/efi_crc32.c new file mode 100755 index 0000000..c25409f --- /dev/null +++ b/jni/parted/libparted/labels/efi_crc32.c @@ -0,0 +1,126 @@ +/* + * Dec 5, 2000 Matt Domsch + * - Copied crc32.c from the linux/drivers/net/cipe directory. + * - Now pass seed as an arg + * - changed unsigned long to uint32_t, added #include + * - changed len to be an unsigned long + * - changed crc32val to be a register + * - License remains unchanged! It's still GPL-compatable! + */ + + /* ============================================================= */ + /* COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or */ + /* code or tables extracted from it, as desired without restriction. */ + /* */ + /* First, the polynomial itself and its table of feedback terms. The */ + /* polynomial is */ + /* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 */ + /* */ + /* Note that we take it "backwards" and put the highest-order term in */ + /* the lowest-order bit. The X^32 term is "implied"; the LSB is the */ + /* X^31 term, etc. The X^0 term (usually shown as "+1") results in */ + /* the MSB being 1. */ + /* */ + /* Note that the usual hardware shift register implementation, which */ + /* is what we're using (we're merely optimizing it by doing eight-bit */ + /* chunks at a time) shifts bits into the lowest-order term. In our */ + /* implementation, that means shifting towards the right. Why do we */ + /* do it this way? Because the calculated CRC must be transmitted in */ + /* order from highest-order term to lowest-order term. UARTs transmit */ + /* characters in order from LSB to MSB. By storing the CRC this way, */ + /* we hand it to the UART in the order low-byte to high-byte; the UART */ + /* sends each low-bit to hight-bit; and the result is transmission bit */ + /* by bit from highest- to lowest-order term without requiring any bit */ + /* shuffling on our part. Reception works similarly. */ + /* */ + /* The feedback terms table consists of 256, 32-bit entries. Notes: */ + /* */ + /* The table can be generated at runtime if desired; code to do so */ + /* is shown later. It might not be obvious, but the feedback */ + /* terms simply represent the results of eight shift/xor opera- */ + /* tions for all combinations of data and CRC register values. */ + /* */ + /* The values must be right-shifted by eight bits by the "updcrc" */ + /* logic; the shift must be unsigned (bring in zeroes). On some */ + /* hardware you could probably optimize the shift in assembler by */ + /* using byte-swap instructions. */ + /* polynomial $edb88320 */ + /* */ + /* -------------------------------------------------------------------- */ + +#include +#include + +static const uint32_t crc32_tab[] = { + 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, + 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, + 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, + 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, + 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, + 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, + 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, + 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, + 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, + 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, + 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, + 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, + 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, + 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, + 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, + 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, + 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, + 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, + 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, + 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, + 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, + 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, + 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, + 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, + 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, + 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, + 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, + 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, + 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, + 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, + 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, + 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, + 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, + 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, + 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, + 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, + 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, + 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, + 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, + 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, + 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, + 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, + 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, + 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, + 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, + 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, + 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, + 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, + 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, + 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, + 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, + 0x2d02ef8dL + }; + +/* Return a 32-bit CRC of the contents of the buffer. */ + +uint32_t _GL_ATTRIBUTE_PURE +__efi_crc32(const void *buf, unsigned long len, uint32_t seed) +{ + unsigned long i; + register uint32_t crc32val; + const unsigned char *s = buf; + + crc32val = seed; + for (i = 0; i < len; i ++) + { + crc32val = + crc32_tab[(crc32val ^ s[i]) & 0xff] ^ + (crc32val >> 8); + } + return crc32val; +} diff --git a/jni/parted/libparted/labels/fdasd.c b/jni/parted/libparted/labels/fdasd.c new file mode 100755 index 0000000..cee4d46 --- /dev/null +++ b/jni/parted/libparted/labels/fdasd.c @@ -0,0 +1,1442 @@ +/* + * File...........: arch/s390/tools/fdasd.c + * Author(s)......: Volker Sameske + * Bugreports.to..: + * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2001 + * + * History of changes (starts March 2001) + * 2001-04-11 possibility to change volume serial added + * possibility to change partition type added + * some changes to DS4HPCHR and DS4DSREC + * 2001-05-03 check for invalid partition numbers added + * wrong free_space calculation bug fixed + * 2001-06-26 '-a' option added, it is now possible to add a single + * partition in non-interactive mode + * 2001-06-26 long parameter support added + * + */ + +#include +#include +#include +#include +#include + +#include + +#include +#if ENABLE_NLS +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +static int +getpos (fdasd_anchor_t *anc, int dsn) +{ + PDEBUG + return anc->partno[dsn]; +} + +static int +getdsn (fdasd_anchor_t *anc, int pos) +{ + PDEBUG + int i; + + for (i=0; ipartno[i] == pos) + return i; + } + + return -1; +} + +static void +setpos (fdasd_anchor_t *anc, int dsn, int pos) +{ + PDEBUG + anc->partno[dsn] = pos; +} + +static u_int32_t +get_usable_cylinders (fdasd_anchor_t *anc) +{ + u_int32_t cyl; + + /* large volume */ + if (anc->f4->DS4DEVCT.DS4DSCYL == LV_COMPAT_CYL && + anc->f4->DS4DCYL > anc->f4->DS4DEVCT.DS4DSCYL) + return anc->f4->DS4DCYL; + /* normal volume */ + if (anc->f4->DS4DEVCT.DS4DEVFG & ALTERNATE_CYLINDERS_USED) + cyl = anc->f4->DS4DEVCT.DS4DSCYL - + (u_int16_t) anc->f4->DS4DEVAC; + else + cyl = anc->f4->DS4DEVCT.DS4DSCYL; + return cyl; +} + +static void +get_addr_of_highest_f1_f8_label (fdasd_anchor_t *anc, cchhb_t *addr) +{ + + u_int8_t record; + /* We have to count the follwing labels: + * one format 4 + * one format 5 + * format 7 only if we have moren then BIG_DISK_SIZE tracks + * one for each format 1 or format 8 label == one for each partition + * one for each format 9 label before the last format 8 + * We assume that all partitions use format 8 labels when + * anc->formatted_cylinders > LV_COMPAT_CYL + * Note: Record zero is special, so block 0 on our disk is record 1! + */ + + record = anc->used_partitions + 2; + if (anc->big_disk) + record++; + if (anc->formatted_cylinders > LV_COMPAT_CYL) + record += anc->used_partitions - 1; + vtoc_set_cchhb(addr, VTOC_START_CC, VTOC_START_HH, record); +} + +void +fdasd_cleanup (fdasd_anchor_t *anchor) +{ + PDEBUG + int i; + partition_info_t *part_info, *next; + + if (anchor == NULL) + return; + + free(anchor->f4); + free(anchor->f5); + free(anchor->f7); + free(anchor->vlabel); + + part_info = anchor->first; + for (i = 1; i <= USABLE_PARTITIONS && part_info != NULL; i++) { + next = part_info->next; + free(part_info->f1); + free(part_info); + part_info = next; + } +} + +static void +fdasd_error (fdasd_anchor_t *anc, enum fdasd_failure why, char const *str) +{ + PDEBUG + char error[2*LINE_LENGTH], *message = error; + + switch (why) { + case unable_to_open_disk: + sprintf(error, "fdasd: %s -- %s\n", _("open error"), str); + break; + case unable_to_seek_disk: + sprintf(error, "fdasd: %s -- %s\n", _("seek error"), str); + break; + case unable_to_read_disk: + sprintf(error, "fdasd: %s -- %s\n", _("read error"), str); + break; + case read_only_disk: + sprintf(error, "fdasd: %s -- %s\n", _("write error"), str); + break; + case unable_to_ioctl: + sprintf(error, "fdasd: %s -- %s\n", _("ioctl() error"), str); + break; + case api_version_mismatch: + sprintf(error, "fdasd: %s -- %s\n", + _("API version mismatch"), str); + break; + case wrong_disk_type: + sprintf(error, "fdasd: %s -- %s\n", + _("Unsupported disk type"), str); + break; + case wrong_disk_format: + sprintf(error, "fdasd: %s -- %s\n", + _("Unsupported disk format"), str); + break; + case disk_in_use: + sprintf(error, "fdasd: %s -- %s\n", + _("Disk is in use"), str); + break; + case config_syntax_error: + sprintf(error, "fdasd: %s -- %s\n", + _("Syntax error in config file"), str); + break; + case vlabel_corrupted: + sprintf(error, "fdasd: %s -- %s\n", + _("Volume label is corrupted"), str); + break; + case dsname_corrupted: + sprintf(error, "fdasd: %s -- %s\n", + _("A data set name is corrupted"), str); + break; + case malloc_failed: + sprintf(error, "fdasd: %s -- %s\n", + _("Memory allocation failed"), str); + break; + case device_verification_failed: + sprintf(error, "fdasd: %s -- %s\n", + _("Device verification failed"), + _("The specified device is not a valid DASD device")); + break; + case volser_not_found: + sprintf(error, "fdasd: %s -- %s\n", _("VOLSER not found on device"), str); + break; + default: + sprintf(error, "fdasd: %s: %s\n", _("Fatal error"), str); + } + + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, message); +} + +/* + * initializes the anchor structure and allocates some + * memory for the labels + */ +void +fdasd_initialize_anchor (fdasd_anchor_t * anc) +{ + PDEBUG + int i; + volume_label_t *v; + partition_info_t *p = NULL; + partition_info_t *q = NULL; + + bzero(anc, sizeof(fdasd_anchor_t)); + + for (i=0; iconfdata, sizeof(config_data_t)); + + anc->f4 = malloc(sizeof(format4_label_t)); + if (anc->f4 == NULL) + fdasd_error(anc, malloc_failed, "FMT4 DSCB."); + + anc->f5 = malloc(sizeof(format5_label_t)); + if (anc->f5 == NULL) + fdasd_error(anc, malloc_failed, "FMT5 DSCB."); + + anc->f7 = malloc(sizeof(format7_label_t)); + if (anc->f7 == NULL) + fdasd_error(anc, malloc_failed, "FMT7 DSCB."); + + /* template for all format 9 labels */ + anc->f9 = malloc(sizeof(format9_label_t)); + if (anc->f9 == NULL) + fdasd_error(anc, malloc_failed, "FMT9 DSCB."); + + bzero(anc->f4, sizeof(format4_label_t)); + bzero(anc->f5, sizeof(format5_label_t)); + bzero(anc->f7, sizeof(format7_label_t)); + bzero(anc->f9, sizeof(format9_label_t)); + vtoc_init_format9_label(anc->f9); + + v = malloc(sizeof(volume_label_t)); + if (v == NULL) + fdasd_error(anc, malloc_failed, + _("No room for volume label.")); + bzero(v, sizeof(volume_label_t)); + anc->vlabel = v; + + for (i=1; i<=USABLE_PARTITIONS; i++) { + p = malloc(sizeof(partition_info_t)); + if (p == NULL) + fdasd_error(anc, malloc_failed, + _("No room for partition info.")); + bzero(p, sizeof(partition_info_t)); + + /* add p to double pointered list */ + if (i == 1) { + anc->first = p; + } else if (i == USABLE_PARTITIONS) { + anc->last = p; + p->prev = q; + q->next = p; + } else { + p->prev = q; + q->next = p; + } + + p->f1 = malloc(sizeof(format1_label_t)); + if (p->f1 == NULL) + fdasd_error(anc, malloc_failed, "FMT1 DSCB."); + bzero(p->f1, sizeof(format1_label_t)); + + q = p; + } + anc->hw_cylinders = 0; + anc->formatted_cylinders = 0; + anc->is_file = 0; +} + +/* + * writes all changes to dasd + */ +static void +fdasd_write_vtoc_labels (fdasd_anchor_t * anc, int fd) +{ + PDEBUG + partition_info_t *p; + unsigned long b, maxblk; + char dsno[6], s1[VOLSER_LENGTH + 1], s2[45], *c1, *c2, *ch; + int i = 0, k = 0; + cchhb_t f9addr; + format1_label_t emptyf1; + + b = (cchhb2blk (&anc->vlabel->vtoc, &anc->geo) - 1) * anc->blksize; + if (b <= 0) + fdasd_error (anc, vlabel_corrupted, ""); + maxblk = b + anc->blksize * 9; /* f4+f5+f7+3*f8+3*f9 */ + + /* write FMT4 DSCB */ + vtoc_write_label (fd, b, NULL, anc->f4, NULL, NULL, NULL); + b += anc->blksize; + + /* write FMT5 DSCB */ + vtoc_write_label (fd, b, NULL, NULL, anc->f5, NULL, NULL); + b += anc->blksize; + + /* write FMT7 DSCB */ + if (anc->big_disk) { + vtoc_write_label (fd, b, NULL, NULL, NULL, anc->f7, NULL); + b += anc->blksize; + } + + /* loop over all partitions (format 1 or format 8 DCB) */ + for (p = anc->first; p != NULL; p = p->next) { + + if (p->used != 0x01) { + continue; + } + + i++; + strncpy (p->f1->DS1DSSN, anc->vlabel->volid, 6); + + ch = p->f1->DS1DSNAM; + vtoc_ebcdic_dec (ch, ch, 44); + c1 = ch + 7; + + if (getdsn (anc, i-1) > -1) { + /* re-use the existing data set name */ + c2 = strchr (c1, '.'); + if (c2 != NULL) + strncpy (s2, c2, 31); + else + fdasd_error (anc, dsname_corrupted, ""); + + strncpy (s1, anc->vlabel->volid, 6); + vtoc_ebcdic_dec (s1, s1, 6); + s1[6] = ' '; + strncpy (c1, s1, 7); + c1 = strchr (ch, ' '); + strncpy (c1, s2, 31); + } else { + /* create a new data set name */ + while (getpos (anc, k) > -1) + k++; + + setpos (anc, k, i-1); + + strncpy (ch, "LINUX.V " " ", 44); + + strncpy (s1, anc->vlabel->volid, 6); + vtoc_ebcdic_dec (s1, s1, 6); + strncpy (c1, s1, 6); + + c1 = strchr (ch, ' '); + strncpy (c1, ".PART", 5); + c1 += 5; + + sprintf (dsno, "%04d.", k + 1); + strncpy (c1, dsno, 5); + + c1 += 5; + switch(p->type) { + case PARTITION_LINUX_LVM: + strncpy(c1, PART_TYPE_LVM, 6); + break; + case PARTITION_LINUX_RAID: + strncpy(c1, PART_TYPE_RAID, 6); + break; + case PARTITION_LINUX: + strncpy(c1, PART_TYPE_NATIVE, 6); + break; + case PARTITION_LINUX_SWAP: + strncpy(c1, PART_TYPE_SWAP, 6); + break; + default: + strncpy(c1, PART_TYPE_NATIVE, 6); + break; + } + } + + vtoc_ebcdic_enc (ch, ch, 44); + + if (p->f1->DS1FMTID == 0xf8 ) { + /* Now as we know where which label will be written, we + * can add the address of the format 9 label to the + * format 8 label. The f9 record will be written to the + * block after the current blk. Remember: records are of + * by one, so we have to add 2 and not just one. + */ + vtoc_set_cchhb(&f9addr, VTOC_START_CC, VTOC_START_HH, + ((b / anc->blksize) % anc->geo.sectors) + 2); + vtoc_update_format8_label(&f9addr, p->f1); + vtoc_write_label(fd, b, p->f1, NULL, NULL, NULL, NULL); + b += anc->blksize; + vtoc_write_label(fd, b, NULL, NULL, NULL, NULL, + anc->f9); + b += anc->blksize; + } else { + vtoc_write_label(fd, b, p->f1, NULL, NULL, NULL, NULL); + b += anc->blksize; + } + } + + /* write empty labels to the rest of the blocks */ + bzero(&emptyf1, sizeof(emptyf1)); + while (b < maxblk) { + vtoc_write_label(fd, b, &emptyf1, NULL, NULL, NULL, NULL); + b += anc->blksize; + } +} + +/* + * writes all changes to dasd + */ +int +fdasd_write_labels (fdasd_anchor_t * anc, int fd) +{ + PDEBUG + if (anc->vlabel_changed) + vtoc_write_volume_label (fd, anc->label_pos, anc->vlabel); + + if (anc->vtoc_changed) + fdasd_write_vtoc_labels (anc, fd); + + return 1; +} + +/* + * writes all changes to dasd + */ +int +fdasd_prepare_labels (fdasd_anchor_t *anc, int fd) +{ + PDEBUG + partition_info_t *p; + char dsno[6], s1[7], s2[45], *c1, *c2, *ch; + int i = 0, k = 0; + + /* loop over all partitions (format 1 or format 8 DCB) */ + for (p = anc->first; p != NULL; p = p->next) { + + if (p->used != 0x01) { + continue; + } + + i++; + strncpy (p->f1->DS1DSSN, anc->vlabel->volid, 6); + + ch = p->f1->DS1DSNAM; + vtoc_ebcdic_dec (ch, ch, 44); + c1 = ch + 7; + + if (getdsn (anc, i-1) > -1) { + /* re-use the existing data set name */ + c2 = strchr (c1, '.'); + if (c2 != NULL) + strncpy (s2, c2, 31); + else + fdasd_error (anc, dsname_corrupted, ""); + + strncpy (s1, anc->vlabel->volid, 6); + vtoc_ebcdic_dec (s1, s1, 6); + s1[6] = ' '; + strncpy (c1, s1, 7); + c1 = strchr (ch, ' '); + strncpy (c1, s2, 31); + } else { + /* create a new data set name */ + while (getpos (anc, k) > -1) + k++; + + setpos (anc, k, i-1); + + strncpy (ch, "LINUX.V " " ", 44); + + strncpy (s1, anc->vlabel->volid, 6); + vtoc_ebcdic_dec (s1, s1, 6); + strncpy (c1, s1, 6); + + c1 = strchr (ch, ' '); + strncpy (c1, ".PART", 5); + c1 += 5; + + sprintf (dsno, "%04d.", k + 1); + strncpy (c1, dsno, 5); + + c1 += 5; + switch(p->type) { + case PARTITION_LINUX_LVM: + strncpy(c1, PART_TYPE_LVM, 6); + break; + case PARTITION_LINUX_RAID: + strncpy(c1, PART_TYPE_RAID, 6); + break; + case PARTITION_LINUX: + strncpy(c1, PART_TYPE_NATIVE, 6); + break; + case PARTITION_LINUX_SWAP: + strncpy(c1, PART_TYPE_SWAP, 6); + break; + default: + strncpy(c1, PART_TYPE_NATIVE, 6); + break; + } + } + + vtoc_ebcdic_enc (ch, ch, 44); + } + + return 1; +} + +void +fdasd_recreate_vtoc (fdasd_anchor_t *anc) +{ + PDEBUG + partition_info_t *p = anc->first; + int i; + + vtoc_init_format4_label(anc->f4, + anc->geo.cylinders, + anc->formatted_cylinders, + anc->geo.heads, + anc->geo.sectors, + anc->blksize, + anc->dev_type); + + vtoc_init_format5_label(anc->f5); + vtoc_init_format7_label(anc->f7); + vtoc_set_freespace(anc->f4, anc->f5, anc->f7, + '+', anc->verbose, + FIRST_USABLE_TRK, + anc->formatted_cylinders * anc->geo.heads - 1, + anc->formatted_cylinders, anc->geo.heads); + + for (i = 0; i < USABLE_PARTITIONS; i++) { + bzero(p->f1, sizeof(format1_label_t)); + p->used = 0x00; + p->start_trk = 0; + p->end_trk = 0; + p->len_trk = 0; + p->fspace_trk = 0; + p->type = 0; + p = p->next; + } + + anc->used_partitions = 0; + anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads - + FIRST_USABLE_TRK; + + for (i=0; ivtoc_changed++; +} + + /* + * initialize the VOL1 volume label + */ +static void +fdasd_init_volume_label(fdasd_anchor_t *anc, int fd) +{ + volume_label_t *vlabel = anc->vlabel; + + vtoc_volume_label_init(vlabel); + vtoc_volume_label_set_key(vlabel, "VOL1"); + vtoc_volume_label_set_label(vlabel, "VOL1"); + + vtoc_set_cchhb(&vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01); +} + + +/* + * sets some important partition data + * (like used, start_trk, end_trk, len_trk) + * by calculating these values with the + * information provided in the labels + */ +static void +fdasd_update_partition_info (fdasd_anchor_t *anc) +{ + PDEBUG + partition_info_t *q = NULL, *p = anc->first; + unsigned long max = anc->formatted_cylinders * anc->geo.heads - 1; + int i; + char *ch; + + anc->used_partitions = anc->geo.sectors - 2 - anc->f4->DS4DSREC; + + for (i = 1; i <= USABLE_PARTITIONS; i++) { + if (p->f1->DS1FMTID != 0xf1 && + p->f1->DS1FMTID != 0xf8) { + if (i == 1) + /* there is no partition at all */ + anc->fspace_trk = max - FIRST_USABLE_TRK + 1; + else + /* previous partition was the last one */ + q->fspace_trk = max - q->end_trk; + break; + } + + /* this is a valid format 1 label */ + p->used = 0x01; + p->start_trk = cchh2trk(&p->f1->DS1EXT1.llimit, &anc->geo); + p->end_trk = cchh2trk(&p->f1->DS1EXT1.ulimit, &anc->geo); + p->len_trk = p->end_trk - p->start_trk + 1; + + if (i == 1) { + /* first partition, there is at least one */ + anc->fspace_trk = p->start_trk - FIRST_USABLE_TRK; + } else { + if (i == USABLE_PARTITIONS) + /* last possible partition */ + p->fspace_trk = max - p->end_trk; + + /* set free space values of previous partition */ + q->fspace_trk = p->start_trk - q->end_trk - 1; + } + + ch = p->f1->DS1DSNAM; + vtoc_ebcdic_dec (ch, ch, 44); + if (strstr(ch, PART_TYPE_LVM)) + p->type = PARTITION_LINUX_LVM; + else if (strstr(ch, PART_TYPE_RAID)) + p->type = PARTITION_LINUX_RAID; + else if (strstr(ch, PART_TYPE_NATIVE)) + p->type = PARTITION_LINUX; + else if (strstr(ch, PART_TYPE_SWAP)) + p->type = PARTITION_LINUX_SWAP; + else + p->type = PARTITION_LINUX; + vtoc_ebcdic_enc (ch, ch, 44); + + q = p; + p = p->next; + } +} + +/* + * reorganizes all FMT1s, after that all used FMT1s should be right in + * front of all unused FMT1s + */ +static void +fdasd_reorganize_FMT1s (fdasd_anchor_t *anc) +{ + PDEBUG + int i, j; + format1_label_t *ltmp; + partition_info_t *ptmp; + + for (i=1; i<=USABLE_PARTITIONS - 1; i++) { + ptmp = anc->first; + + for (j=1; j<=USABLE_PARTITIONS - i; j++) { + if (ptmp->f1->DS1FMTID < ptmp->next->f1->DS1FMTID) { + ltmp = ptmp->f1; + ptmp->f1 = ptmp->next->f1; + ptmp->next->f1 = ltmp; + } + + ptmp=ptmp->next; + } + } +} + +static void +fdasd_process_valid_vtoc (fdasd_anchor_t * anc, unsigned long b, int fd) +{ + PDEBUG + int f5_counter = 0, f7_counter = 0, f1_counter = 0, oldfmt = 0; + int i, n, f1size = sizeof (format1_label_t); + partition_info_t *p = anc->first; + format1_label_t q; + char s[5], *ch; + + if (anc->f4->DS4DEVCT.DS4DSCYL == LV_COMPAT_CYL && + anc->f4->DS4DCYL > anc->f4->DS4DEVCT.DS4DSCYL) + anc->formatted_cylinders = anc->f4->DS4DCYL; + else + anc->formatted_cylinders = anc->f4->DS4DEVCT.DS4DSCYL; + anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads - + FIRST_USABLE_TRK; + b += anc->blksize; + + for (i = 1; i < anc->geo.sectors; i++) { + bzero (&q, f1size); + vtoc_read_label (fd, b, &q, NULL, NULL, NULL); + + switch (q.DS1FMTID) { + case 0xf1: + case 0xf8: + if (p == NULL) + break; + memcpy (p->f1, &q, f1size); + + n = -1; + vtoc_ebcdic_dec (p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44); + ch = strstr (p->f1->DS1DSNAM, "PART"); + if (ch != NULL) { + strncpy (s, ch + 4, 4); + s[4] = '\0'; + n = atoi (s) - 1; + } + + vtoc_ebcdic_enc (p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44); + + /* this dasd has data set names 0000-0002 + but we use now 0001-0003 */ + if (n == -1) + oldfmt++; + + if (((oldfmt == 0) && (n < 0)) || (n >= USABLE_PARTITIONS)) { + /* no op */ + } else { + if (oldfmt) { + /* correct +1 */ + setpos (anc, n + 1, f1_counter); + } else { + setpos (anc, n, f1_counter); + } + } + + p = p->next; + f1_counter++; + break; + case 0xf5: + memcpy (anc->f5, &q, f1size); + f5_counter++; + break; + case 0xf7: + if (f7_counter == 0) + memcpy (anc->f7, &q, f1size); + f7_counter++; + break; + case 0xf9: + /* each format 8 lable has an associated + * format 9 lable, but they are of no further + * use to us. + */ + break; + } + + b += anc->blksize; + } + + if (oldfmt > 0) { + /* this is the old format PART0000 - PART0002 */ + anc->vtoc_changed++; + } + + if ((f5_counter == 0) || (anc->big_disk)) + vtoc_init_format5_label (anc->f5); + + if (f7_counter == 0) + vtoc_init_format7_label (anc->f7); + + fdasd_reorganize_FMT1s (anc); + fdasd_update_partition_info (anc); +} + +static void +fdasd_invalid_vtoc_pointer(fdasd_anchor_t *anc) +{ + PDEBUG + anc->formatted_cylinders = anc->hw_cylinders; + anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads + - FIRST_USABLE_TRK; + vtoc_init_format4_label(anc->f4, + anc->geo.cylinders, anc->formatted_cylinders, + anc->geo.heads, anc->geo.sectors, + anc->blksize, anc->dev_type); + + vtoc_init_format5_label(anc->f5); + vtoc_init_format7_label(anc->f7); + + vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '+', anc->verbose, + FIRST_USABLE_TRK, + anc->formatted_cylinders * anc->geo.heads - 1, + anc->formatted_cylinders, anc->geo.heads); + + vtoc_set_cchhb(&anc->vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01); + anc->vtoc_changed++; + anc->vlabel_changed++; +} + +/* + * we have a invalid FMT4 DSCB and therefore we will re-create the VTOC + */ +static void +fdasd_process_invalid_vtoc(fdasd_anchor_t *anc) +{ + anc->formatted_cylinders = anc->hw_cylinders; + anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads + - FIRST_USABLE_TRK; + vtoc_init_format4_label(anc->f4, + anc->geo.cylinders, anc->formatted_cylinders, + anc->geo.heads, anc->geo.sectors, + anc->blksize, anc->dev_type); + + vtoc_init_format5_label(anc->f5); + vtoc_init_format7_label(anc->f7); + vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '+', anc->verbose, + FIRST_USABLE_TRK, + anc->formatted_cylinders * anc->geo.heads - 1, + anc->formatted_cylinders, anc->geo.heads); + + anc->vtoc_changed++; +} + + +static int +fdasd_valid_vtoc_pointer(fdasd_anchor_t *anc, unsigned long b, int fd) +{ + PDEBUG + char str[LINE_LENGTH]; + + /* VOL1 label contains valid VTOC pointer */ + vtoc_read_label (fd, b, NULL, anc->f4, NULL, NULL); + + if (anc->f4->DS4IDFMT == 0xf4) { + fdasd_process_valid_vtoc (anc, b, fd); + return 0; + } else { + fdasd_process_invalid_vtoc(anc); + } + if (strncmp(anc->vlabel->volkey, vtoc_ebcdic_enc("LNX1",str,4),4) == 0 || + strncmp(anc->vlabel->volkey, vtoc_ebcdic_enc("CMS1",str,4),4) == 0) + return 0; + + fdasd_error(anc, wrong_disk_format, _("Invalid VTOC.")); + return 1; +} + +/* + * check the dasd for a volume label + */ +int +fdasd_check_volume (fdasd_anchor_t *anc, int fd) +{ + PDEBUG + volume_label_t *v = anc->vlabel; + long long b = -1; + char str[LINE_LENGTH]; + + memset(v, 0, sizeof(volume_label_t)); + vtoc_read_volume_label (fd, anc->label_pos, v); + + if (strncmp(v->vollbl, vtoc_ebcdic_enc ("VOL1", str, 4), 4) == 0) { + if (anc->FBA_layout != 1 ) { + /* found VOL1 volume label */ + b = (cchhb2blk (&v->vtoc, &anc->geo) - 1) * anc->blksize; + + if (b > 0) { + int rc; + rc = fdasd_valid_vtoc_pointer (anc, b, fd); + + if (rc < 0) + return 1; + else + return 0; + } else { + fdasd_invalid_vtoc_pointer(anc); + } + } + } else if (strncmp (v->volkey, vtoc_ebcdic_enc ("LNX1", str, 4), 4) == 0 || + strncmp (v->volkey, vtoc_ebcdic_enc ("CMS1", str, 4), 4) == 0) { + return 0; + } else if (anc->FBA_layout == 1) { + /* Some times LDL formatted disks does not + contain any volume label */ + return 1; + } else if (! anc->is_file) { + /* didn't find VOL1 volume label */ + anc->formatted_cylinders = anc->hw_cylinders; + anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads + - FIRST_USABLE_TRK; + + fdasd_init_volume_label(anc, fd); + + vtoc_init_format4_label(anc->f4, + anc->geo.cylinders, anc->formatted_cylinders, + anc->geo.heads, anc->geo.sectors, + anc->blksize, anc->dev_type); + + vtoc_init_format5_label(anc->f5); + vtoc_init_format7_label(anc->f7); + + vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '+', + anc->verbose, FIRST_USABLE_TRK, + anc->formatted_cylinders * anc->geo.heads - 1, + anc->formatted_cylinders, anc->geo.heads); + return 0; + } + return 1; +} + +/* + * checks the current API version with the API version of the dasd driver + */ +void +fdasd_check_api_version (fdasd_anchor_t *anc, int f) +{ + PDEBUG + int api; + char s[2*LINE_LENGTH]; + + struct stat st; + if (fstat (f, &st) == 0 && S_ISREG (st.st_mode)) { + /* skip these tests when F is a regular file. */ + } + else { + if (ioctl(f, DASDAPIVER, &api) != 0) + fdasd_error(anc, unable_to_ioctl, + _("Could not retrieve API version.")); + + if (api != DASD_MIN_API_VERSION) { + sprintf(s, _("The current API version '%d' doesn't " \ + "match dasd driver API version " \ + "'%d'!"), api, DASD_MIN_API_VERSION); + fdasd_error(anc, api_version_mismatch, s); + } + } +} + +/* + * The following two functions match those in the DASD ECKD device driver. + * They are used to compute how many records of a given size can be stored + * in one track. + */ +static unsigned int ceil_quot(unsigned int d1, unsigned int d2) +{ + return (d1 + (d2 - 1)) / d2; +} + +/* kl: key length, dl: data length */ +static unsigned int recs_per_track(unsigned short dev_type, unsigned int kl, + unsigned int dl) +{ + unsigned int dn, kn; + + switch (dev_type) { + case DASD_3380_TYPE: + if (kl) + return 1499 / (15 + 7 + ceil_quot(kl + 12, 32) + + ceil_quot(dl + 12, 32)); + else + return 1499 / (15 + ceil_quot(dl + 12, 32)); + case DASD_3390_TYPE: + dn = ceil_quot(dl + 6, 232) + 1; + if (kl) { + kn = ceil_quot(kl + 6, 232) + 1; + return 1729 / (10 + 9 + ceil_quot(kl + 6 * kn, 34) + + 9 + ceil_quot(dl + 6 * dn, 34)); + } else + return 1729 / (10 + 9 + ceil_quot(dl + 6 * dn, 34)); + case DASD_9345_TYPE: + dn = ceil_quot(dl + 6, 232) + 1; + if (kl) { + kn = ceil_quot(kl + 6, 232) + 1; + return 1420 / (18 + 7 + ceil_quot(kl + 6 * kn, 34) + + ceil_quot(dl + 6 * dn, 34)); + } else + return 1420 / (18 + 7 + ceil_quot(dl + 6 * dn, 34)); + } + return 0; +} + +/* + * Verify that number of tracks (heads) per cylinder and number of + * sectors per track match the expected values for a given device type + * and block size. + * Returns 1 for a valid match and 0 otherwise. + */ +static int fdasd_verify_geometry(unsigned short dev_type, int blksize, + struct fdasd_hd_geometry *geometry) +{ + unsigned int expected_sectors; + if (geometry->heads != 15) + return 0; + expected_sectors = recs_per_track(dev_type, 0, blksize); + if (geometry->sectors == expected_sectors) + return 1; + return 0; +} + +/* + * reads dasd geometry data + */ +int +fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int f) +{ + PDEBUG + int blksize = 0; + dasd_information_t dasd_info; + struct dasd_eckd_characteristics *characteristics; + unsigned long long size_in_bytes; + + /* We can't get geometry from a regular file, + so simulate something usable, for the sake of testing. */ + struct stat st; + if (fstat (f, &st) == 0 && S_ISREG (st.st_mode)) { + PedSector n_sectors = st.st_size / dev->sector_size; + anc->geo.heads = 15; + anc->geo.sectors = 12; + anc->geo.cylinders + = (n_sectors / (anc->geo.heads * anc->geo.sectors + * (dev->sector_size / dev->phys_sector_size))); + anc->geo.start = 0; + blksize = 4096; + memcpy (dasd_info.type, "ECKD", 4); + dasd_info.dev_type = 13200; + dasd_info.label_block = 2; + dasd_info.devno = 513; + dasd_info.label_block = 2; + dasd_info.FBA_layout = 0; + anc->hw_cylinders = ((st.st_size / blksize) / anc->geo.sectors) / + anc->geo.heads; + anc->is_file = 1; + } else { + if (ioctl(f, BLKGETSIZE64, &size_in_bytes) != 0) { + fdasd_error(anc, unable_to_ioctl, + _("Could not retrieve disk size.")); + goto error; + } + + if (ioctl(f, HDIO_GETGEO, &anc->geo) != 0 || + anc->geo.heads == 0 || + anc->geo.sectors == 0 || + anc->geo.cylinders == 0 ) { + fdasd_error(anc, unable_to_ioctl, + _("Could not retrieve disk geometry information.")); + goto error; + } + + if (ioctl(f, BLKSSZGET, &blksize) != 0) { + fdasd_error(anc, unable_to_ioctl, + _("Could not retrieve blocksize information.")); + goto error; + } + + /* get disk type */ + if (ioctl(f, BIODASDINFO, &dasd_info) != 0) { + /* verify that the geometry matches a 3390 DASD */ + if (!fdasd_verify_geometry(DASD_3390_TYPE, blksize, + &anc->geo)) { + fdasd_error(anc, wrong_disk_type, + _("Disk geometry does not match a " \ + "DASD device of type 3390.")); + goto error; + } + anc->dev_type = DASD_3390_TYPE; + anc->hw_cylinders = + size_in_bytes / (blksize * anc->geo.heads * anc->geo.sectors); + /* The VOL1 label on a CDL formatted ECKD DASD is in block 2 + * It will be verified later, if this position actually holds a + * valid label record. + */ + anc->label_pos = 2 * blksize; + /* A devno 0 is actually a valid devno, which could exist + * in the system. Since we use this number only to create + * a default volume serial, there is no serious conflict. + */ + anc->devno = 0; + } else { + characteristics = (struct dasd_eckd_characteristics *) + &dasd_info.characteristics; + if (characteristics->no_cyl == LV_COMPAT_CYL && + characteristics->long_no_cyl) + anc->hw_cylinders = characteristics->long_no_cyl; + else + anc->hw_cylinders = characteristics->no_cyl; + anc->dev_type = dasd_info.dev_type; + anc->label_pos = dasd_info.label_block * blksize; + anc->devno = dasd_info.devno; + anc->label_block = dasd_info.label_block; + anc->FBA_layout = dasd_info.FBA_layout; + } + + anc->is_file = 0; + } + + anc->blksize = blksize; + return 1; + + error: + return 0; +} + +/* + * returns unused partition info pointer if there + * is a free partition, otherwise NULL + */ +static partition_info_t * +fdasd_get_empty_f1_label (fdasd_anchor_t * anc) +{ + PDEBUG + if (anc->used_partitions < USABLE_PARTITIONS) + return anc->last; + else + return NULL; +} + +/* + * asks for and sets some important partition data + */ +static int +fdasd_get_partition_data (fdasd_anchor_t *anc, extent_t *part_extent, + partition_info_t *p, unsigned int *start_ptr, + unsigned int *stop_ptr) +{ + PDEBUG + unsigned int limit; + u_int32_t cc, c; + u_int16_t hh, h; + cchh_t llimit, ulimit; + partition_info_t *q; + u_int8_t b1, b2; + unsigned int start = *start_ptr, stop = *stop_ptr; + int i; + char *ch; + + c = get_usable_cylinders(anc); + h = anc->f4->DS4DEVCT.DS4DSTRK; + limit = (h * c - 1); + + /* check start value from user */ + q = anc->first; + for (i = 0; i < USABLE_PARTITIONS; i++) { + if ( q->next == NULL ) + break; + + if (start >= q->start_trk && start <= q->end_trk) { + /* start is within another partition */ + start = q->end_trk + 1; + + if (start > limit) { + start = FIRST_USABLE_TRK; + q = anc->first; + } + } + + if (start < q->start_trk) { + limit = q->start_trk - 1; + break; + } + + q = q->next; + } + + if (start == limit) + stop = start; + + /* update partition info */ + p->len_trk = stop - start + 1; + p->start_trk = start; + p->end_trk = stop; + + cc = start / anc->geo.heads; + hh = start - (cc * anc->geo.heads); + vtoc_set_cchh(&llimit, cc, hh); + + /* check for cylinder boundary */ + if (hh == 0) + b1 = 0x81; + else + b1 = 0x01; + + cc = stop / anc->geo.heads; + hh = stop - cc * anc->geo.heads; + vtoc_set_cchh(&ulimit, cc, hh); + + /* it is always the 1st extent */ + b2 = 0x00; + + vtoc_set_extent(part_extent, b1, b2, &llimit, &ulimit); + + *start_ptr = start; + *stop_ptr = stop; + + ch = p->f1->DS1DSNAM; + vtoc_ebcdic_dec (ch, ch, 44); + + if (strstr(ch, PART_TYPE_LVM)) + p->type = PARTITION_LINUX_LVM; + else if (strstr(ch, PART_TYPE_RAID)) + p->type = PARTITION_LINUX_RAID; + else if (strstr(ch, PART_TYPE_NATIVE)) + p->type = PARTITION_LINUX; + else if (strstr(ch, PART_TYPE_SWAP)) + p->type = PARTITION_LINUX_SWAP; + else + p->type = PARTITION_LINUX; + + vtoc_ebcdic_enc (ch, ch, 44); + + return 0; +} + +static void +fdasd_enqueue_new_partition (fdasd_anchor_t *anc) +{ + PDEBUG + partition_info_t *q = anc->first, *p = anc->last; + int i, k=0; + + for (i=1; iend_trk == 0) || (p->start_trk < q->start_trk)) { + break; + } else { + q = q->next; + k++; + } + } + + if (anc->first == q) + anc->first = p; + + if (p != q) { + anc->last->prev->next = NULL; + anc->last = anc->last->prev; + + p->next = q; + p->prev = q->prev; + q->prev = p; + + if (p->prev != NULL) + p->prev->next = p; + } + + p->used = 0x01; + p->type = PARTITION_LINUX; + + for (i=0; i= k) + setpos(anc, i, j + 1); + } + + /* update free-space counters */ + if (anc->first == p) { + /* partition is the first used partition */ + if (p->start_trk == FIRST_USABLE_TRK) { + /* partition starts right behind VTOC */ + p->fspace_trk = anc->fspace_trk - p->len_trk; + anc->fspace_trk = 0; + } else { + /* there is some space between VTOC and partition */ + p->fspace_trk = anc->fspace_trk - p->len_trk - p->start_trk + + FIRST_USABLE_TRK; + anc->fspace_trk = p->start_trk - FIRST_USABLE_TRK; + } + } else { + /* there are partitions in front of the new one */ + if (p->start_trk == p->prev->end_trk + 1) { + /* new partition is right behind the previous one */ + p->fspace_trk = p->prev->fspace_trk - p->len_trk; + p->prev->fspace_trk = 0; + } else { + /* there is some space between new and prev. part. */ + p->fspace_trk = p->prev->fspace_trk - p->len_trk + - p->start_trk + p->prev->end_trk + 1; + p->prev->fspace_trk = p->start_trk - p->prev->end_trk - 1; + } + } +} + +/* + * adds a new partition to the 'partition table' + */ +partition_info_t * +fdasd_add_partition (fdasd_anchor_t *anc, unsigned int start, + unsigned int stop) +{ + PDEBUG + cchhb_t hf1; + partition_info_t *p; + extent_t ext; + + PDEBUG; + + if ((p = fdasd_get_empty_f1_label(anc)) == NULL) { + PDEBUG; + return 0; + } + + PDEBUG; + if (fdasd_get_partition_data(anc, &ext, p, &start, &stop) != 0) + return 0; + + if (anc->formatted_cylinders > LV_COMPAT_CYL) { + vtoc_init_format8_label(anc->blksize, &ext, p->f1); + } else { + PDEBUG; + vtoc_init_format1_label(anc->blksize, &ext, p->f1); + } + + PDEBUG; + fdasd_enqueue_new_partition(anc); + + PDEBUG; + anc->used_partitions += 1; + + get_addr_of_highest_f1_f8_label(anc, &hf1); + vtoc_update_format4_label(anc->f4, &hf1, anc->f4->DS4DSREC - 1); + + PDEBUG; + + start = cchh2trk(&ext.llimit, &anc->geo); + stop = cchh2trk(&ext.ulimit, &anc->geo); + + PDEBUG; + vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '-', anc->verbose, + start, stop, anc->formatted_cylinders, anc->geo.heads); + + anc->vtoc_changed++; + + PDEBUG; + return p; +} + +/* + * Check for valid volume serial characters (max. 6) - remove invalid. + * If volser is empty, fill with default volser. + */ +void fdasd_check_volser (char *volser, int devno) +{ + int from, to; + + for (from = 0, to = 0; volser[from] && from < VOLSER_LENGTH; from++) { + + if ((volser[from] >= 0x23 && + volser[from] <= 0x25) || + (volser[from] >= 0x30 && + volser[from] <= 0x39) || + (volser[from] >= 0x40 && + volser[from] <= 0x5a) || + (volser[from] >= 0x61 && + volser[from] <= 0x7a)) + volser[to++] = toupper(volser[from]); + } + + volser[to] = 0x00; + + if (volser[0] == 0x00) + sprintf(volser, "0X%04x", devno); +} + +/* + * get volser from vtoc + */ +int fdasd_get_volser (fdasd_anchor_t *anc, char *volser, int fd) +{ + volume_label_t vlabel; + + vtoc_read_volume_label(fd, anc->label_pos, &vlabel); + vtoc_volume_label_get_volser(&vlabel, volser); + return 0; +} + +/* Changes the volume serial (menu option) + * + */ +void fdasd_change_volser (fdasd_anchor_t *anc, char *str) +{ + fdasd_check_volser(str, anc->devno); + vtoc_volume_label_set_volser(anc->vlabel, str); + + vtoc_set_cchhb(&anc->vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01); + anc->vlabel_changed++; + anc->vtoc_changed++; +} + +/* + * re-create all VTOC labels, but use the partition information + * from existing VTOC + */ +void fdasd_reuse_vtoc (fdasd_anchor_t *anc) +{ + partition_info_t *part_info = anc->first; + struct fdasd_hd_geometry geo = anc->geo; + format1_label_t f1; + format4_label_t f4; + format5_label_t f5; + format7_label_t f7; + + vtoc_init_format4_label(&f4, geo.cylinders, anc->formatted_cylinders, + geo.heads, geo.sectors, + anc->blksize, anc->dev_type); + + /* reuse some FMT4 values */ + f4.DS4HPCHR = anc->f4->DS4HPCHR; + f4.DS4DSREC = anc->f4->DS4DSREC; + + /* re-initialize both free-space labels */ + vtoc_init_format5_label(&f5); + vtoc_init_format7_label(&f7); + + if (anc->fspace_trk > 0) + vtoc_set_freespace(&f4, &f5, &f7, '+', anc->verbose, + FIRST_USABLE_TRK, + FIRST_USABLE_TRK + anc->fspace_trk - 1, + anc->formatted_cylinders, geo.heads); + + while (part_info != NULL) { + if (part_info->used != 0x01) { + part_info = part_info->next; + continue; + } + + if (anc->formatted_cylinders > LV_COMPAT_CYL) + vtoc_init_format8_label(anc->blksize, + &part_info->f1->DS1EXT1, &f1); + else + vtoc_init_format1_label(anc->blksize, + &part_info->f1->DS1EXT1, &f1); + + + strncpy(f1.DS1DSNAM, part_info->f1->DS1DSNAM, 44); + strncpy((char *)f1.DS1DSSN, (char *)part_info->f1->DS1DSSN, 6); + f1.DS1CREDT = part_info->f1->DS1CREDT; + + memcpy(part_info->f1, &f1, sizeof(format1_label_t)); + + if (part_info->fspace_trk > 0) + vtoc_set_freespace(&f4, &f5, &f7, '+', anc->verbose, + part_info->end_trk + 1, + part_info->end_trk + + part_info->fspace_trk, + anc->formatted_cylinders, geo.heads); + + part_info = part_info->next; + } + + /* over-write old labels with new ones */ + memcpy(anc->f4, &f4, sizeof(format4_label_t)); + memcpy(anc->f5, &f5, sizeof(format5_label_t)); + memcpy(anc->f7, &f7, sizeof(format7_label_t)); + + anc->vtoc_changed++; + + return; +} + +/* vim:set tabstop=4 shiftwidth=4 softtabstop=4: */ diff --git a/jni/parted/libparted/labels/gpt.c b/jni/parted/libparted/labels/gpt.c new file mode 100755 index 0000000..780fb70 --- /dev/null +++ b/jni/parted/libparted/labels/gpt.c @@ -0,0 +1,1941 @@ +/* + libparted - a library for manipulating disk partitions + + original version by Matt Domsch + Disclaimed into the Public Domain + + Portions Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc. + + EFI GUID Partition Table handling + Per Intel EFI Specification v1.02 + http://developer.intel.com/technology/efi/efi.htm + + 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 3 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, see . +*/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "xalloc.h" +#include "xalloc-oversized.h" +#include "verify.h" + +#include "pt-tools.h" + +#if ENABLE_NLS +# include +# define _(String) gettext (String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#define EFI_PMBR_OSTYPE_EFI 0xEE +#define MSDOS_MBR_SIGNATURE 0xaa55 + +#define GPT_HEADER_SIGNATURE 0x5452415020494645LL + +/* NOTE: the document that describes revision 1.00 is labelled "version 1.02", + * so some implementors got confused... + */ +#define GPT_HEADER_REVISION_V1_02 0x00010200 +#define GPT_HEADER_REVISION_V1_00 0x00010000 +#define GPT_HEADER_REVISION_V0_99 0x00009900 + +typedef uint16_t efi_char16_t; /* UNICODE character */ +typedef struct _GuidPartitionTableHeader_t GuidPartitionTableHeader_t; +typedef struct _GuidPartitionEntryAttributes_t GuidPartitionEntryAttributes_t; +typedef struct _GuidPartitionEntry_t GuidPartitionEntry_t; +typedef struct _PartitionRecord_t PartitionRecord_t; +typedef struct _LegacyMBR_t LegacyMBR_t; +typedef struct _GPTDiskData GPTDiskData; + + +typedef struct +{ + uint32_t time_low; + uint16_t time_mid; + uint16_t time_hi_and_version; + uint8_t clock_seq_hi_and_reserved; + uint8_t clock_seq_low; + uint8_t node[6]; +} /* __attribute__ ((packed)) */ efi_guid_t; +/* commented out "__attribute__ ((packed))" to work around gcc bug (fixed + * in gcc3.1): __attribute__ ((packed)) breaks addressing on initialized + * data. It turns out we don't need it in this case, so it doesn't break + * anything :) + */ + +#define UNUSED_ENTRY_GUID \ + ((efi_guid_t) { 0x00000000, 0x0000, 0x0000, 0x00, 0x00, \ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}) +#define PARTITION_SYSTEM_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xC12A7328), PED_CPU_TO_LE16 (0xF81F), \ + PED_CPU_TO_LE16 (0x11d2), 0xBA, 0x4B, \ + { 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B }}) +#define PARTITION_BIOS_GRUB_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x21686148), PED_CPU_TO_LE16 (0x6449), \ + PED_CPU_TO_LE16 (0x6E6f), 0x74, 0x4E, \ + { 0x65, 0x65, 0x64, 0x45, 0x46, 0x49 }}) +#define LEGACY_MBR_PARTITION_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x024DEE41), PED_CPU_TO_LE16 (0x33E7), \ + PED_CPU_TO_LE16 (0x11d3, 0x9D, 0x69, \ + { 0x00, 0x08, 0xC7, 0x81, 0xF3, 0x9F }}) +#define PARTITION_MSFT_RESERVED_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xE3C9E316), PED_CPU_TO_LE16 (0x0B5C), \ + PED_CPU_TO_LE16 (0x4DB8), 0x81, 0x7D, \ + { 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE }}) +#define PARTITION_MSFT_RECOVERY \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xDE94BBA4), PED_CPU_TO_LE16 (0x06D1), \ + PED_CPU_TO_LE16 (0x4D40), 0xA1, 0x6A, \ + { 0xBF, 0xD5, 0x01, 0x79, 0xD6, 0xAC }}) +#define PARTITION_BASIC_DATA_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xEBD0A0A2), PED_CPU_TO_LE16 (0xB9E5), \ + PED_CPU_TO_LE16 (0x4433), 0x87, 0xC0, \ + { 0x68, 0xB6, 0xB7, 0x26, 0x99, 0xC7 }}) +#define PARTITION_RAID_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xa19d880f), PED_CPU_TO_LE16 (0x05fc), \ + PED_CPU_TO_LE16 (0x4d3b), 0xa0, 0x06, \ + { 0x74, 0x3f, 0x0f, 0x84, 0x91, 0x1e }}) +#define PARTITION_SWAP_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x0657fd6d), PED_CPU_TO_LE16 (0xa4ab), \ + PED_CPU_TO_LE16 (0x43c4), 0x84, 0xe5, \ + { 0x09, 0x33, 0xc8, 0x4b, 0x4f, 0x4f }}) +#define PARTITION_LINUX_DATA_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x0FC63DAF), PED_CPU_TO_LE16 (0x8483), \ + PED_CPU_TO_LE16 (0x4772), 0x8E, 0x79, \ + { 0x3D, 0x69, 0xD8, 0x47, 0x7D, 0xE4 }}) +#define PARTITION_LVM_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xe6d6d379), PED_CPU_TO_LE16 (0xf507), \ + PED_CPU_TO_LE16 (0x44c2), 0xa2, 0x3c, \ + { 0x23, 0x8f, 0x2a, 0x3d, 0xf9, 0x28 }}) +#define PARTITION_RESERVED_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x8da63339), PED_CPU_TO_LE16 (0x0007), \ + PED_CPU_TO_LE16 (0x60c0), 0xc4, 0x36, \ + { 0x08, 0x3a, 0xc8, 0x23, 0x09, 0x08 }}) +#define PARTITION_HPSERVICE_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xe2a1e728), PED_CPU_TO_LE16 (0x32e3), \ + PED_CPU_TO_LE16 (0x11d6), 0xa6, 0x82, \ + { 0x7b, 0x03, 0xa0, 0x00, 0x00, 0x00 }}) +#define PARTITION_APPLE_HFS_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x48465300), PED_CPU_TO_LE16 (0x0000), \ + PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }}) +#define PARTITION_APPLE_TV_RECOVERY_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x5265636F), PED_CPU_TO_LE16 (0x7665), \ + PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }}) +#define PARTITION_PREP_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x9e1a2d38), PED_CPU_TO_LE16 (0xc612), \ + PED_CPU_TO_LE16 (0x4316), 0xaa, 0x26, \ + { 0x8b, 0x49, 0x52, 0x1e, 0x5a, 0x8b }}) +#define PARTITION_IRST_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xD3BFE2DE), PED_CPU_TO_LE16 (0x3DAF), \ + PED_CPU_TO_LE16 (0x11DF), 0xba, 0x40, \ + { 0xE3, 0xA5, 0x56, 0xD8, 0x95, 0x93 }}) +#define PARTITION_CHROMEOS_KERNEL_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xfe3a2a5d), PED_CPU_TO_LE16 (0x4f32), \ + PED_CPU_TO_LE16 (0x41a7), 0xb7, 0x25, \ + { 0xac, 0xcc, 0x32, 0x85, 0xa3, 0x09 }}) +#define PARTITION_BLS_BOOT_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0xbc13c2ff), PED_CPU_TO_LE16 (0x59e6), \ + PED_CPU_TO_LE16 (0x4262), 0xa3, 0x52, \ + { 0xb2, 0x75, 0xfd, 0x6f, 0x71, 0x72 }}) +#define PARTITION_LINUX_HOME_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x933ac7e1), PED_CPU_TO_LE16 (0x2eb4), \ + PED_CPU_TO_LE16 (0x4f13), 0xb8, 0x44, \ + { 0x0e, 0x14, 0xe2, 0xae, 0xf9, 0x15 }}) + +struct flag_uuid_mapping_t +{ + enum _PedPartitionFlag flag; + efi_guid_t type_uuid; +}; + +static const struct flag_uuid_mapping_t flag_uuid_mapping[] = +{ + { PED_PARTITION_APPLE_TV_RECOVERY, PARTITION_APPLE_TV_RECOVERY_GUID }, + { PED_PARTITION_BIOS_GRUB, PARTITION_BIOS_GRUB_GUID }, + { PED_PARTITION_BLS_BOOT, PARTITION_BLS_BOOT_GUID }, + { PED_PARTITION_BOOT, PARTITION_SYSTEM_GUID }, + { PED_PARTITION_CHROMEOS_KERNEL, PARTITION_CHROMEOS_KERNEL_GUID }, + { PED_PARTITION_DIAG, PARTITION_MSFT_RECOVERY }, + { PED_PARTITION_ESP, PARTITION_SYSTEM_GUID }, + { PED_PARTITION_HPSERVICE, PARTITION_HPSERVICE_GUID }, + { PED_PARTITION_IRST, PARTITION_IRST_GUID }, + { PED_PARTITION_LINUX_HOME, PARTITION_LINUX_HOME_GUID }, + { PED_PARTITION_LVM, PARTITION_LVM_GUID }, + { PED_PARTITION_MSFT_DATA, PARTITION_BASIC_DATA_GUID }, + { PED_PARTITION_MSFT_RESERVED, PARTITION_MSFT_RESERVED_GUID }, + { PED_PARTITION_PREP, PARTITION_PREP_GUID }, + { PED_PARTITION_RAID, PARTITION_RAID_GUID }, + { PED_PARTITION_SWAP, PARTITION_SWAP_GUID }, +}; + +static const efi_guid_t skip_set_system_guids[] = +{ + PARTITION_LVM_GUID, + PARTITION_SWAP_GUID, + PARTITION_RAID_GUID, + PARTITION_PREP_GUID, + PARTITION_SYSTEM_GUID, + PARTITION_BIOS_GRUB_GUID, + PARTITION_HPSERVICE_GUID, + PARTITION_MSFT_RESERVED_GUID, + PARTITION_BASIC_DATA_GUID, + PARTITION_MSFT_RECOVERY, + PARTITION_APPLE_TV_RECOVERY_GUID, + PARTITION_IRST_GUID, + PARTITION_CHROMEOS_KERNEL_GUID, + PARTITION_BLS_BOOT_GUID, +}; + +static const struct flag_uuid_mapping_t* _GL_ATTRIBUTE_CONST +gpt_find_flag_uuid_mapping (PedPartitionFlag flag) +{ + int n = sizeof(flag_uuid_mapping) / sizeof(flag_uuid_mapping[0]); + + for (int i = 0; i < n; ++i) + if (flag_uuid_mapping[i].flag == flag) + return &flag_uuid_mapping[i]; + + return NULL; +} + +struct __attribute__ ((packed)) _GuidPartitionTableHeader_t +{ + uint64_t Signature; + uint32_t Revision; + uint32_t HeaderSize; + uint32_t HeaderCRC32; + uint32_t Reserved1; + uint64_t MyLBA; + uint64_t AlternateLBA; + uint64_t FirstUsableLBA; + uint64_t LastUsableLBA; + efi_guid_t DiskGUID; + uint64_t PartitionEntryLBA; + uint32_t NumberOfPartitionEntries; + uint32_t SizeOfPartitionEntry; + uint32_t PartitionEntryArrayCRC32; + uint8_t *Reserved2; +}; + +struct __attribute__ ((packed)) _GuidPartitionEntryAttributes_t +{ +#ifdef __GNUC__ /* XXX narrow this down to !TinyCC */ + uint64_t RequiredToFunction:1; + uint64_t NoBlockIOProtocol:1; + uint64_t LegacyBIOSBootable:1; + uint64_t Reserved:45; + uint64_t GuidSpecific:15; + uint64_t NoAutomount:1; +#else +# warning "Using crippled partition entry type" + uint32_t RequiredToFunction:1; + uint32_t NoBlockIOProtocol:1; + uint32_t LegacyBIOSBootable:1; + uint32_t Reserved:30; + uint32_t LOST:5; + uint32_t GuidSpecific:15; + uint32_t NoAutomount:1; +#endif +}; + +struct __attribute__ ((packed)) _GuidPartitionEntry_t +{ + efi_guid_t PartitionTypeGuid; + efi_guid_t UniquePartitionGuid; + uint64_t StartingLBA; + uint64_t EndingLBA; + GuidPartitionEntryAttributes_t Attributes; + efi_char16_t PartitionName[36]; +}; + +#define GPT_PMBR_LBA 0 +#define GPT_PMBR_SECTORS 1 +#define GPT_PRIMARY_HEADER_LBA 1 +#define GPT_HEADER_SECTORS 1 +#define GPT_PRIMARY_PART_TABLE_LBA 2 + +/* + These values are only defaults. The actual on-disk structures + may define different sizes, so use those unless creating a new GPT disk! +*/ + +#define GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE 16384 + +/* Number of actual partition entries should be calculated as: */ +#define GPT_DEFAULT_PARTITION_ENTRIES \ + (GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / \ + sizeof(GuidPartitionEntry_t)) + +struct __attribute__ ((packed)) _PartitionRecord_t +{ + /* Not used by EFI firmware. Set to 0x80 to indicate that this + is the bootable legacy partition. */ + uint8_t BootIndicator; + + /* Start of partition in CHS address, not used by EFI firmware. */ + uint8_t StartHead; + + /* Start of partition in CHS address, not used by EFI firmware. */ + uint8_t StartSector; + + /* Start of partition in CHS address, not used by EFI firmware. */ + uint8_t StartTrack; + + /* OS type. A value of 0xEF defines an EFI system partition. + Other values are reserved for legacy operating systems, and + allocated independently of the EFI specification. */ + uint8_t OSType; + + /* End of partition in CHS address, not used by EFI firmware. */ + uint8_t EndHead; + + /* End of partition in CHS address, not used by EFI firmware. */ + uint8_t EndSector; + + /* End of partition in CHS address, not used by EFI firmware. */ + uint8_t EndTrack; + + /* Starting LBA address of the partition on the disk. Used by + EFI firmware to define the start of the partition. */ + uint32_t StartingLBA; + + /* Size of partition in LBA. Used by EFI firmware to determine + the size of the partition. */ + uint32_t SizeInLBA; +}; + +/* Protected Master Boot Record & Legacy MBR share same structure */ +/* Needs to be packed because the u16s force misalignment. */ +struct __attribute__ ((packed)) _LegacyMBR_t +{ + uint8_t BootCode[440]; + uint32_t UniqueMBRSignature; + uint16_t Unknown; + PartitionRecord_t PartitionRecord[4]; + uint16_t Signature; +}; + +/* uses libparted's disk_specific field in PedDisk, to store our info */ +struct __attribute__ ((packed, aligned(8))) _GPTDiskData +{ + PedGeometry data_area; + int entry_count; + efi_guid_t uuid; + int pmbr_boot; + PedSector AlternateLBA; +}; + +/* uses libparted's disk_specific field in PedPartition, to store our info */ +typedef struct _GPTPartitionData +{ + efi_guid_t type; + efi_guid_t uuid; + efi_char16_t name[37]; + char *translated_name; + GuidPartitionEntryAttributes_t attributes; +} GPTPartitionData; + +static PedDiskType gpt_disk_type; + +static inline uint32_t +pth_get_size (const PedDevice *dev) +{ + return GPT_HEADER_SECTORS * dev->sector_size; +} + +static inline uint32_t +pth_get_size_static (const PedDevice *dev) +{ + return sizeof (GuidPartitionTableHeader_t) - sizeof (uint8_t *); +} + +static inline uint32_t +pth_get_size_rsv2 (const PedDevice *dev) +{ + return pth_get_size (dev) - pth_get_size_static (dev); +} + +static GuidPartitionTableHeader_t * +pth_new (const PedDevice *dev) +{ + GuidPartitionTableHeader_t *pth = + ped_malloc (sizeof (GuidPartitionTableHeader_t) + sizeof (uint8_t)); + + pth->Reserved2 = ped_malloc (pth_get_size_rsv2 (dev)); + + return pth; +} + +static GuidPartitionTableHeader_t * +pth_new_zeroed (const PedDevice *dev) +{ + GuidPartitionTableHeader_t *pth = pth_new (dev); + + memset (pth, 0, pth_get_size_static (dev)); + memset (pth->Reserved2, 0, pth_get_size_rsv2 (dev)); + + return (pth); +} + +static GuidPartitionTableHeader_t * +pth_new_from_raw (const PedDevice *dev, const uint8_t *pth_raw) +{ + GuidPartitionTableHeader_t *pth = pth_new (dev); + + PED_ASSERT (pth_raw != NULL); + + memcpy (pth, pth_raw, pth_get_size_static (dev)); + memcpy (pth->Reserved2, pth_raw + pth_get_size_static (dev), + pth_get_size_rsv2 (dev)); + + return pth; +} + +static void +pth_free (GuidPartitionTableHeader_t *pth) +{ + if (pth == NULL) + return; + PED_ASSERT (pth->Reserved2 != NULL); + + free (pth->Reserved2); + free (pth); +} + +static uint8_t * +pth_get_raw (const PedDevice *dev, const GuidPartitionTableHeader_t *pth) +{ + PED_ASSERT (pth != NULL); + PED_ASSERT (pth->Reserved2 != NULL); + + int size_static = pth_get_size_static (dev); + uint8_t *pth_raw = ped_malloc (pth_get_size (dev)); + if (pth_raw == NULL) + return NULL; + + memcpy (pth_raw, pth, size_static); + memcpy (pth_raw + size_static, pth->Reserved2, pth_get_size_rsv2 (dev)); + + return pth_raw; +} + +/** + * swap_uuid_and_efi_guid() - converts between uuid formats + * @uuid - uuid_t in either format (converts it to the other) + * + * There are two different representations for Globally Unique Identifiers + * (GUIDs or UUIDs). + * + * The RFC specifies a UUID as a string of 16 bytes, essentially + * a big-endian array of char. + * Intel, in their EFI Specification, references the same RFC, but + * then defines a GUID as a structure of little-endian fields. + * Coincidentally, both structures have the same format when unparsed. + * + * When read from disk, EFI GUIDs are in struct of little endian format, + * and need to be converted to be treated as uuid_t in memory. + * + * When writing to disk, uuid_ts need to be converted into EFI GUIDs. + * + * Blame Intel. + */ +static void +swap_uuid_and_efi_guid (efi_guid_t *guid) +{ + PED_ASSERT (guid != NULL); + guid->time_low = PED_SWAP32 (guid->time_low); + guid->time_mid = PED_SWAP16 (guid->time_mid); + guid->time_hi_and_version = PED_SWAP16 (guid->time_hi_and_version); +} + +/* returns the EFI-style CRC32 value for buf + * This function uses the crc32 function by Gary S. Brown, + * but seeds the function with ~0, and xor's with ~0 at the end. + */ +static inline uint32_t +efi_crc32 (const void *buf, unsigned long len) +{ + return (__efi_crc32 (buf, len, ~0L) ^ ~0L); +} + +/* Compute the crc32 checksum of the partition table header + and store it in *CRC32. Return 0 upon success. Return 1 + upon failure to allocate space. */ +static int +pth_crc32 (const PedDevice *dev, const GuidPartitionTableHeader_t *pth, + uint32_t *crc32) +{ + PED_ASSERT (dev != NULL); + PED_ASSERT (pth != NULL); + + uint8_t *pth_raw = pth_get_raw (dev, pth); + if (pth_raw == NULL) + return 1; + + *crc32 = efi_crc32 (pth_raw, PED_LE32_TO_CPU (pth->HeaderSize)); + free (pth_raw); + + return 0; +} + +static inline int +guid_cmp (efi_guid_t left, efi_guid_t right) +{ + return memcmp (&left, &right, sizeof (efi_guid_t)); +} + +/* checks if 'mbr' is a protective MBR partition table */ +static inline int _GL_ATTRIBUTE_PURE +_pmbr_is_valid (const LegacyMBR_t *mbr) +{ + int i; + + PED_ASSERT (mbr != NULL); + + if (mbr->Signature != PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE)) + return 0; + for (i = 0; i < 4; i++) + { + if (mbr->PartitionRecord[i].OSType == EFI_PMBR_OSTYPE_EFI) + return 1; + } + return 0; +} + +static int +gpt_probe (const PedDevice *dev) +{ + int gpt_sig_found = 0; + + PED_ASSERT (dev != NULL); + + if (dev->length <= 1) + return 0; + + void *label; + if (!ptt_read_sector (dev, 0, &label)) + return 0; + + if (!_pmbr_is_valid (label)) + { + free (label); + return 0; + } + free (label); + + void *pth_raw = ped_malloc (pth_get_size (dev)); + if (ped_device_read (dev, pth_raw, 1, GPT_HEADER_SECTORS) + || ped_device_read (dev, pth_raw, dev->length - 1, GPT_HEADER_SECTORS)) + { + GuidPartitionTableHeader_t *gpt = pth_new_from_raw (dev, pth_raw); + if (gpt->Signature == PED_CPU_TO_LE64 (GPT_HEADER_SIGNATURE)) + gpt_sig_found = 1; + pth_free (gpt); + } + free (pth_raw); + + return gpt_sig_found; +} + +static PedDisk * +gpt_alloc (const PedDevice *dev) +{ + PedDisk *disk; + GPTDiskData *gpt_disk_data; + PedSector data_start, data_end; + + disk = _ped_disk_alloc ((PedDevice *) dev, &gpt_disk_type); + if (!disk) + goto error; + + data_start = 2 + GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size; + data_end = dev->length - 2 + - GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size; + + /* If the device is too small to accommodate GPT headers and one data + sector, reject it. */ + if (data_end < data_start) + { + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_OK, + _("device is too small for GPT")); + goto error_free_disk; + } + + disk->disk_specific = gpt_disk_data = ped_malloc (sizeof (GPTDiskData)); + if (!disk->disk_specific) + goto error_free_disk; + + gpt_disk_data->AlternateLBA = dev->length - 1; + ped_geometry_init (&gpt_disk_data->data_area, dev, data_start, + data_end - data_start + 1); + gpt_disk_data->entry_count = GPT_DEFAULT_PARTITION_ENTRIES; + uuid_generate ((unsigned char *) &gpt_disk_data->uuid); + swap_uuid_and_efi_guid (&gpt_disk_data->uuid); + gpt_disk_data->pmbr_boot = 0; + return disk; + +error_free_disk: + free (disk); +error: + return NULL; +} + +static PedDisk * +gpt_duplicate (const PedDisk *disk) +{ + PedDisk *new_disk; + GPTDiskData *new_disk_data; + GPTDiskData *old_disk_data; + + new_disk = ped_disk_new_fresh (disk->dev, &gpt_disk_type); + if (!new_disk) + return NULL; + + old_disk_data = disk->disk_specific; + new_disk_data = new_disk->disk_specific; + + ped_geometry_init (&new_disk_data->data_area, disk->dev, + old_disk_data->data_area.start, + old_disk_data->data_area.length); + new_disk_data->entry_count = old_disk_data->entry_count; + new_disk_data->uuid = old_disk_data->uuid; + new_disk_data->pmbr_boot = old_disk_data->pmbr_boot; + return new_disk; +} + +static void +gpt_free (PedDisk *disk) +{ + ped_disk_delete_all (disk); + free (disk->disk_specific); + _ped_disk_free (disk); +} + +/* Given GUID Partition table header, GPT, read its partition array + entries from DISK into malloc'd storage. Set *PTES_BYTES to the + number of bytes required. Upon success, return a pointer to the + resulting buffer. Otherwise, set errno and return NULL. */ +static void * +gpt_read_PE_array (PedDisk const *disk, GuidPartitionTableHeader_t const *gpt, + size_t *ptes_bytes) +{ + uint32_t p_ent_size = PED_LE32_TO_CPU (gpt->SizeOfPartitionEntry); + *ptes_bytes = p_ent_size * PED_LE32_TO_CPU(gpt->NumberOfPartitionEntries); + size_t ptes_sectors = ped_div_round_up (*ptes_bytes, + disk->dev->sector_size); + + if (xalloc_oversized (ptes_sectors, disk->dev->sector_size)) + { + errno = ENOMEM; + return NULL; + } + void *ptes = ped_malloc (ptes_sectors * disk->dev->sector_size); + if (ptes == NULL) + return NULL; + + if (!ped_device_read (disk->dev, ptes, + PED_LE64_TO_CPU (gpt->PartitionEntryLBA), ptes_sectors)) + { + int saved_errno = errno; + free (ptes); + errno = saved_errno; + return NULL; + } + + return ptes; +} + +static int +check_PE_array_CRC (PedDisk const *disk, + GuidPartitionTableHeader_t const *gpt, bool *valid) +{ + size_t ptes_bytes; + void *ptes = gpt_read_PE_array (disk, gpt, &ptes_bytes); + if (ptes == NULL) + return 1; + + uint32_t ptes_crc = efi_crc32 (ptes, ptes_bytes); + *valid = (ptes_crc == PED_LE32_TO_CPU (gpt->PartitionEntryArrayCRC32)); + free (ptes); + return 0; +} + +static int +_header_is_valid (PedDisk const *disk, GuidPartitionTableHeader_t *gpt, + PedSector my_lba) +{ + uint32_t crc, origcrc; + PedDevice const *dev = disk->dev; + + if (PED_LE64_TO_CPU (gpt->Signature) != GPT_HEADER_SIGNATURE) + return 0; + /* + * "While the GUID Partition Table Header's size may increase + * in the future it cannot span more than one block on the + * device." EFI Specification, version 1.10, 11.2.2.1 + */ + if (PED_LE32_TO_CPU (gpt->HeaderSize) < pth_get_size_static (dev) + || PED_LE32_TO_CPU (gpt->HeaderSize) > dev->sector_size) + return 0; + + /* The SizeOfPartitionEntry must be a multiple of 8 and + no smaller than the size of the PartitionEntry structure. + We also require that it be no larger than 1/16th of UINT32_MAX, + as an additional sanity check. */ + uint32_t pe_size = PED_LE32_TO_CPU (gpt->SizeOfPartitionEntry); + if (pe_size % 8 != 0 + || ! (sizeof (GuidPartitionEntry_t) <= pe_size + && pe_size <= (UINT32_MAX >> 4))) + return 0; + + if (PED_LE64_TO_CPU (gpt->MyLBA) != my_lba) + return 0; + + PedSector alt_lba = PED_LE64_TO_CPU (gpt->AlternateLBA); + /* The backup table's AlternateLBA must be 1. */ + if (my_lba != 1 && alt_lba != 1) + return 0; + + /* The alt_lba must never be the same as my_lba. */ + if (alt_lba == my_lba) + return 0; + + bool crc_match; + if (check_PE_array_CRC (disk, gpt, &crc_match) != 0 || !crc_match) + return 0; + + PedSector first_usable = PED_LE64_TO_CPU (gpt->FirstUsableLBA); + if (first_usable < 3) + return 0; + + PedSector last_usable = PED_LE64_TO_CPU (gpt->LastUsableLBA); + if (last_usable < first_usable) + return 0; + + origcrc = gpt->HeaderCRC32; + gpt->HeaderCRC32 = 0; + if (pth_crc32 (dev, gpt, &crc) != 0) + return 0; + gpt->HeaderCRC32 = origcrc; + + return crc == PED_LE32_TO_CPU (origcrc); +} + +/* Return the number of sectors that should be used by the + * partition entry table. + */ +static PedSector +_ptes_sectors(PedDisk const *disk, GuidPartitionTableHeader_t const *gpt) +{ + size_t ptes_bytes = PED_LE32_TO_CPU (gpt->SizeOfPartitionEntry) * + PED_LE32_TO_CPU (gpt->NumberOfPartitionEntries); + /* Minimum amount of space reserved is 128 128 byte entries */ + if (ptes_bytes < 128*128) + ptes_bytes = 128*128; + return ped_div_round_up (ptes_bytes, disk->dev->sector_size); +} + +/* Return the header's idea of the last sector of the disk + * based on LastUsableLBA and the Partition Entry table. + */ +static PedSector +_hdr_disk_end(PedDisk const *disk, GuidPartitionTableHeader_t const *gpt) +{ + return PED_LE64_TO_CPU (gpt->LastUsableLBA) + 1 + _ptes_sectors(disk, gpt); +} + +static int +_parse_header (PedDisk *disk, const GuidPartitionTableHeader_t *gpt, + int *update_needed) +{ + GPTDiskData *gpt_disk_data = disk->disk_specific; + PedSector first_usable; + PedSector last_usable; + PedSector last_usable_if_grown; + +#ifndef DISCOVER_ONLY + if (PED_LE32_TO_CPU (gpt->Revision) > GPT_HEADER_REVISION_V1_02) + { + if (ped_exception_throw + (PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("The format of the GPT partition table is version " + "%x, which is newer than what Parted can " + "recognise. Please report this!"), + PED_LE32_TO_CPU (gpt->Revision)) != PED_EXCEPTION_IGNORE) + return 0; + } +#endif + + first_usable = PED_LE64_TO_CPU (gpt->FirstUsableLBA); + last_usable = PED_LE64_TO_CPU (gpt->LastUsableLBA); + + /* Need to check whether the volume has grown, the LastUsableLBA is + normally set to disk->dev->length - 2 - ptes_size (at least for parted + created volumes), where ptes_size is the number of entries * + size of each entry / sector size or 16k / sector size, whatever the greater. + If the volume has grown, offer the user the chance to use the new + space or continue with the current usable area. Only ask once per + parted invocation. */ + + last_usable_if_grown = disk->dev->length - 2 - _ptes_sectors(disk, gpt); + + if (last_usable <= first_usable + || disk->dev->length < last_usable) + return 0; + + if (last_usable_if_grown <= first_usable + || disk->dev->length < last_usable_if_grown) + return 0; + + if (last_usable < last_usable_if_grown) + { + PedExceptionOption q; + + q = ped_exception_throw + (PED_EXCEPTION_WARNING, + PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE, + _("Not all of the space available to %s appears " + "to be used, you can fix the GPT to use all of the " + "space (an extra %llu blocks) or continue with the " + "current setting? "), disk->dev->path, + (uint64_t) (last_usable_if_grown - last_usable)); + + if (q == PED_EXCEPTION_FIX) + { + last_usable = last_usable_if_grown; + /* clear the old backup gpt header */ + ptt_clear_sectors (disk->dev, + gpt_disk_data->AlternateLBA, 1); + gpt_disk_data->AlternateLBA = disk->dev->length - 1; + *update_needed = 1; + } + } + + ped_geometry_init (&gpt_disk_data->data_area, disk->dev, + first_usable, last_usable - first_usable + 1); + + gpt_disk_data->entry_count + = PED_LE32_TO_CPU (gpt->NumberOfPartitionEntries); + PED_ASSERT (gpt_disk_data->entry_count > 0); + PED_ASSERT (gpt_disk_data->entry_count <= 8192); + + gpt_disk_data->uuid = gpt->DiskGUID; + + return 1; +} + +static PedPartition * +_parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte) +{ + PedPartition *part; + GPTPartitionData *gpt_part_data; + unsigned int i; + + part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL, + PED_LE64_TO_CPU (pte->StartingLBA), + PED_LE64_TO_CPU (pte->EndingLBA)); + if (!part) + return NULL; + + gpt_part_data = part->disk_specific; + gpt_part_data->type = pte->PartitionTypeGuid; + gpt_part_data->uuid = pte->UniquePartitionGuid; + for (i = 0; i < 36; i++) + gpt_part_data->name[i] = (efi_char16_t) pte->PartitionName[i]; + gpt_part_data->name[i] = 0; + gpt_part_data->translated_name = 0; + gpt_part_data->attributes = pte->Attributes; + + return part; +} + +/* Read the primary GPT at sector 1 of DEV. + Verify its CRC and that of its partition entry array. + If they are valid, read the backup GPT specified by AlternateLBA. + If not, read the backup GPT in the last sector of the disk. + Return 1 if any read fails. + Upon successful verification of the primary GPT, set *PRIMARY_GPT, else NULL. + Upon successful verification of the backup GPT, set *BACKUP_GPT, else NULL. + If we've set *BACKUP_GPT to non-NULL, set *BACKUP_SECTOR_NUM_P to the sector + number in which it was found. */ +static int +gpt_read_headers (PedDisk const *disk, + GuidPartitionTableHeader_t **primary_gpt, + GuidPartitionTableHeader_t **backup_gpt, + PedSector *backup_sector_num_p) +{ + *primary_gpt = NULL; + *backup_gpt = NULL; + PedDevice const *dev = disk->dev; + GPTDiskData *gpt_disk_data = disk->disk_specific; + LegacyMBR_t *mbr; + + if (!ptt_read_sector (dev, 0, (void *)&mbr)) + return 1; + + if (mbr->PartitionRecord[0].BootIndicator == 0x80) + gpt_disk_data->pmbr_boot = 1; + free (mbr); + + void *s1; + if (!ptt_read_sector (dev, 1, &s1)) + return 1; + + GuidPartitionTableHeader_t *t = pth_new_from_raw (dev, s1); + free (s1); + if (t == NULL) + return 1; + GuidPartitionTableHeader_t *pri = t; + + bool valid_primary = _header_is_valid (disk, pri, 1); + if (valid_primary) + *primary_gpt = pri; + else + pth_free (pri); + + gpt_disk_data->AlternateLBA = + (valid_primary + ? PED_LE64_TO_CPU (pri->AlternateLBA) + : dev->length - 1); + + void *s_bak; + if (!ptt_read_sector (dev, gpt_disk_data->AlternateLBA ,&s_bak)) + return 1; + t = pth_new_from_raw (dev, s_bak); + free (s_bak); + if (t == NULL) + return 1; + + GuidPartitionTableHeader_t *bak = t; + if (_header_is_valid (disk, bak, gpt_disk_data->AlternateLBA)) + { + *backup_gpt = bak; + *backup_sector_num_p = gpt_disk_data->AlternateLBA; + } + else + pth_free (bak); + + return 0; +} + +/************************************************************ + * Intel is changing the EFI Spec. (after v1.02) to say that a + * disk is considered to have a GPT label only if the GPT + * structures are correct, and the MBR is actually a Protective + * MBR (has one 0xEE type partition). + * Problem occurs when a GPT-partitioned disk is then + * edited with a legacy (non-GPT-aware) application, such as + * fdisk (which doesn't generally erase the PGPT or AGPT). + * How should such a disk get handled? As a GPT disk (throwing + * away the fdisk changes), or as an MSDOS disk (throwing away + * the GPT information). Previously, I've taken the GPT-is-right, + * MBR is wrong, approach, to stay consistent with the EFI Spec. + * Intel disagrees, saying the disk should then be treated + * as having a msdos label, not a GPT label. If this is true, + * then what's the point of having an AGPT, since if the PGPT + * is screwed up, likely the PMBR is too, and the PMBR becomes + * a single point of failure. + * So, in the Linux kernel, I'm going to test for PMBR, and + * warn if it's not there, and treat the disk as MSDOS, with a note + * for users to use Parted to "fix up" their disk if they + * really want it to be considered GPT. + ************************************************************/ +static int +gpt_read (PedDisk *disk) +{ + GPTDiskData *gpt_disk_data = disk->disk_specific; + int i; +#ifndef DISCOVER_ONLY + int write_back = 0; +#endif + + ped_disk_delete_all (disk); + + /* motivation: let the user decide about the pmbr... during + ped_disk_probe(), they probably didn't get a choice... */ + if (!gpt_probe (disk->dev)) + goto error; + + GuidPartitionTableHeader_t *gpt = NULL; + GuidPartitionTableHeader_t *primary_gpt; + GuidPartitionTableHeader_t *backup_gpt; + PedSector backup_sector_num; + int read_failure = gpt_read_headers (disk, &primary_gpt, &backup_gpt, + &backup_sector_num); + if (read_failure) + { + /* This includes the case in which there used to be a GPT partition + table here, with an alternate LBA that extended beyond the current + end-of-device. It's treated as a non-match. */ + + /* Another possibility: + The primary header is ok, but backup is corrupt. + In the UEFI spec, this means the primary GUID table + is officially invalid. */ + pth_free (backup_gpt); + pth_free (primary_gpt); + return 0; + } + + if (primary_gpt && backup_gpt) + { + /* Both are valid. */ +#ifndef DISCOVER_ONLY + /* The backup header must be at the end of the disk, or at what the primary + * header thinks is the end of the disk. + */ + gpt_disk_data->AlternateLBA = PED_LE64_TO_CPU (primary_gpt->AlternateLBA); + PedSector pri_disk_end = _hdr_disk_end(disk, primary_gpt); + + if (gpt_disk_data->AlternateLBA != disk->dev->length -1 && + gpt_disk_data->AlternateLBA != pri_disk_end) + { + if (ped_exception_throw + (PED_EXCEPTION_ERROR, + (PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE), + _("The backup GPT table is not at the end of the disk, as it " + "should be. Fix, by moving the backup to the end " + "(and removing the old backup)?")) == PED_EXCEPTION_FIX) + { + ptt_clear_sectors (disk->dev, + PED_LE64_TO_CPU (primary_gpt->AlternateLBA), 1); + gpt_disk_data->AlternateLBA = disk->dev->length -1; + write_back = 1; + } + } +#endif /* !DISCOVER_ONLY */ + pth_free (backup_gpt); + gpt = primary_gpt; + } + else if (!primary_gpt && !backup_gpt) + { + /* Both are corrupt. */ + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Both the primary and backup GPT tables " + "are corrupt. Try making a fresh table, " + "and using Parted's rescue feature to " + "recover partitions.")); + goto error; + } + else if (primary_gpt && !backup_gpt) + { + /* The primary header is ok, but backup is corrupt. */ + if (ped_exception_throw + (PED_EXCEPTION_ERROR, PED_EXCEPTION_OK_CANCEL, + _("The backup GPT table is corrupt, but the " + "primary appears OK, so that will be used.")) + == PED_EXCEPTION_CANCEL) + goto error_free_gpt; + + gpt = primary_gpt; + } + else /* !primary_gpt && backup_gpt */ + { + /* primary GPT corrupt, backup is ok. */ + if (ped_exception_throw + (PED_EXCEPTION_ERROR, PED_EXCEPTION_OK_CANCEL, + _("The primary GPT table is corrupt, but the " + "backup appears OK, so that will be used.")) + == PED_EXCEPTION_CANCEL) + goto error_free_gpt; + + gpt = backup_gpt; + } + backup_gpt = NULL; + primary_gpt = NULL; + + if (!_parse_header (disk, gpt, &write_back)) + goto error_free_gpt; + + size_t ptes_bytes; + void *ptes = gpt_read_PE_array (disk, gpt, &ptes_bytes); + if (ptes == NULL) + goto error_free_gpt; + + uint32_t ptes_crc = efi_crc32 (ptes, ptes_bytes); + if (ptes_crc != PED_LE32_TO_CPU (gpt->PartitionEntryArrayCRC32)) + { + ped_exception_throw + (PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("primary partition table array CRC mismatch")); + goto error_free_ptes; + } + + uint32_t p_ent_size = PED_LE32_TO_CPU (gpt->SizeOfPartitionEntry); + for (i = 0; i < gpt_disk_data->entry_count; i++) + { + GuidPartitionEntry_t *pte + = (GuidPartitionEntry_t *) ((char *) ptes + i * p_ent_size); + PedPartition *part; + + if (!guid_cmp (pte->PartitionTypeGuid, UNUSED_ENTRY_GUID)) + continue; + + part = _parse_part_entry (disk, pte); + if (!part) + goto error_delete_all; + + part->fs_type = ped_file_system_probe (&part->geom); + part->num = i + 1; + + PedConstraint *constraint_exact = ped_constraint_exact (&part->geom); + if (!ped_disk_add_partition (disk, part, constraint_exact)) + { + ped_constraint_destroy (constraint_exact); + ped_partition_destroy (part); + goto error_delete_all; + } + ped_constraint_destroy (constraint_exact); + } + free (ptes); + +#ifndef DISCOVER_ONLY + if (write_back) + ped_disk_commit_to_dev (disk); +#endif + + pth_free (gpt); + return 1; + +error_delete_all: + ped_disk_delete_all (disk); +error_free_ptes: + free (ptes); +error_free_gpt: + pth_free (primary_gpt); + pth_free (backup_gpt); + pth_free (gpt); +error: + return 0; +} + +#ifndef DISCOVER_ONLY +/* Write the protective MBR (to keep DOS happy) */ +static int +_write_pmbr (PedDevice *dev, bool pmbr_boot) +{ + /* The UEFI spec is not clear about what to do with the following + elements of the Protective MBR (pmbr): BootCode (0-440B), + UniqueMBRSignature (440B-444B) and Unknown (444B-446B). + With this in mind, we try not to modify these elements. */ + void *s0; + if (!ptt_read_sector (dev, 0, &s0)) + return 0; + LegacyMBR_t *pmbr = s0; + + /* Zero out the legacy partitions. */ + memset (pmbr->PartitionRecord, 0, sizeof pmbr->PartitionRecord); + + pmbr->Signature = PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE); + pmbr->PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI; + pmbr->PartitionRecord[0].StartSector = 2; + pmbr->PartitionRecord[0].EndHead = 0xFF; + pmbr->PartitionRecord[0].EndSector = 0xFF; + pmbr->PartitionRecord[0].EndTrack = 0xFF; + pmbr->PartitionRecord[0].StartingLBA = PED_CPU_TO_LE32 (1); + if ((dev->length - 1ULL) > 0xFFFFFFFFULL) + pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (0xFFFFFFFF); + else + pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (dev->length - 1UL); + if (pmbr_boot) + pmbr->PartitionRecord[0].BootIndicator = 0x80; + + int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA, + GPT_PMBR_SECTORS); + free (s0); + return write_ok; +} + +static int +_generate_header (const PedDisk *disk, int alternate, uint32_t ptes_crc, + GuidPartitionTableHeader_t **gpt_p) +{ + GPTDiskData *gpt_disk_data = disk->disk_specific; + GuidPartitionTableHeader_t *gpt; + + *gpt_p = pth_new_zeroed (disk->dev); + + gpt = *gpt_p; + + gpt->Signature = PED_CPU_TO_LE64 (GPT_HEADER_SIGNATURE); + gpt->Revision = PED_CPU_TO_LE32 (GPT_HEADER_REVISION_V1_00); + + /* per 1.00 spec */ + gpt->HeaderSize = PED_CPU_TO_LE32 (pth_get_size_static (disk->dev)); + gpt->HeaderCRC32 = 0; + gpt->Reserved1 = 0; + + if (alternate) + { + size_t ss = disk->dev->sector_size; + PedSector ptes_bytes = (gpt_disk_data->entry_count + * sizeof (GuidPartitionEntry_t)); + PedSector ptes_sectors = (ptes_bytes + ss - 1) / ss; + + gpt->MyLBA = PED_CPU_TO_LE64 (gpt_disk_data->AlternateLBA); + gpt->AlternateLBA = PED_CPU_TO_LE64 (1); + gpt->PartitionEntryLBA + = PED_CPU_TO_LE64 (gpt_disk_data->AlternateLBA - ptes_sectors); + } + else + { + gpt->MyLBA = PED_CPU_TO_LE64 (1); + gpt->AlternateLBA = PED_CPU_TO_LE64 (gpt_disk_data->AlternateLBA); + gpt->PartitionEntryLBA = PED_CPU_TO_LE64 (2); + } + + gpt->FirstUsableLBA = PED_CPU_TO_LE64 (gpt_disk_data->data_area.start); + gpt->LastUsableLBA = PED_CPU_TO_LE64 (gpt_disk_data->data_area.end); + gpt->DiskGUID = gpt_disk_data->uuid; + gpt->NumberOfPartitionEntries + = PED_CPU_TO_LE32 (gpt_disk_data->entry_count); + gpt->SizeOfPartitionEntry = PED_CPU_TO_LE32 (sizeof (GuidPartitionEntry_t)); + gpt->PartitionEntryArrayCRC32 = PED_CPU_TO_LE32 (ptes_crc); + + uint32_t crc; + if (pth_crc32 (disk->dev, gpt, &crc) != 0) + return 1; + + gpt->HeaderCRC32 = PED_CPU_TO_LE32 (crc); + return 0; +} + +static void +_partition_generate_part_entry (PedPartition *part, GuidPartitionEntry_t *pte) +{ + GPTPartitionData *gpt_part_data = part->disk_specific; + unsigned int i; + + PED_ASSERT (gpt_part_data != NULL); + + pte->PartitionTypeGuid = gpt_part_data->type; + pte->UniquePartitionGuid = gpt_part_data->uuid; + pte->StartingLBA = PED_CPU_TO_LE64 (part->geom.start); + pte->EndingLBA = PED_CPU_TO_LE64 (part->geom.end); + pte->Attributes = gpt_part_data->attributes; + + for (i = 0; i < 36; i++) + pte->PartitionName[i] = gpt_part_data->name[i]; +} + +static int +gpt_write (const PedDisk *disk) +{ + GPTDiskData *gpt_disk_data; + uint32_t ptes_crc; + uint8_t *pth_raw; + GuidPartitionTableHeader_t *gpt; + PedPartition *part; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + PED_ASSERT (disk->disk_specific != NULL); + + gpt_disk_data = disk->disk_specific; + + size_t ptes_bytes = (gpt_disk_data->entry_count + * sizeof (GuidPartitionEntry_t)); + size_t ss = disk->dev->sector_size; + PedSector ptes_sectors = (ptes_bytes + ss - 1) / ss; + /* Note that we allocate a little more than ptes_bytes, + when that number is not a multiple of sector size. */ + GuidPartitionEntry_t *ptes = calloc (ptes_sectors, ss); + if (!ptes) + goto error; + for (part = ped_disk_next_partition (disk, NULL); part; + part = ped_disk_next_partition (disk, part)) + { + if (part->type != 0) + continue; + _partition_generate_part_entry (part, &ptes[part->num - 1]); + } + + ptes_crc = efi_crc32 (ptes, ptes_bytes); + + /* Write protective MBR */ + if (!_write_pmbr (disk->dev, gpt_disk_data->pmbr_boot)) + goto error_free_ptes; + + /* Write PTH and PTEs */ + /* FIXME: Caution: this code is nearly identical to what's just below. */ + if (_generate_header (disk, 0, ptes_crc, &gpt) != 0) { + pth_free(gpt); + goto error_free_ptes; + } + pth_raw = pth_get_raw (disk->dev, gpt); + pth_free (gpt); + if (pth_raw == NULL) + goto error_free_ptes; + int write_ok = ped_device_write (disk->dev, pth_raw, 1, 1); + free (pth_raw); + if (!write_ok) + goto error_free_ptes; + if (!ped_device_write (disk->dev, ptes, 2, ptes_sectors)) + goto error_free_ptes; + + /* Write Alternate PTH & PTEs */ + /* FIXME: Caution: this code is nearly identical to what's just above. */ + if (_generate_header (disk, 1, ptes_crc, &gpt) != 0) { + pth_free(gpt); + goto error_free_ptes; + } + pth_raw = pth_get_raw (disk->dev, gpt); + pth_free (gpt); + if (pth_raw == NULL) + goto error_free_ptes; + write_ok = ped_device_write (disk->dev, pth_raw, gpt_disk_data->AlternateLBA, 1); + free (pth_raw); + if (!write_ok) + goto error_free_ptes; + if (!ped_device_write (disk->dev, ptes, + gpt_disk_data->AlternateLBA - ptes_sectors, ptes_sectors)) + goto error_free_ptes; + + free (ptes); + return ped_device_sync (disk->dev); + +error_free_ptes: + free (ptes); +error: + return 0; +} +#endif /* !DISCOVER_ONLY */ + +static int +add_metadata_part (PedDisk *disk, PedSector start, PedSector length) +{ + PedPartition *part; + PedConstraint *constraint_exact; + PED_ASSERT (disk != NULL); + + part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL, + start, start + length - 1); + if (!part) + goto error; + + constraint_exact = ped_constraint_exact (&part->geom); + if (!ped_disk_add_partition (disk, part, constraint_exact)) + goto error_destroy_constraint; + ped_constraint_destroy (constraint_exact); + return 1; + +error_destroy_constraint: + ped_constraint_destroy (constraint_exact); + ped_partition_destroy (part); +error: + return 0; +} + +static PedPartition * +gpt_partition_new (const PedDisk *disk, + PedPartitionType part_type, + const PedFileSystemType *fs_type, PedSector start, + PedSector end) +{ + PedPartition *part; + GPTPartitionData *gpt_part_data; + + part = _ped_partition_alloc (disk, part_type, fs_type, start, end); + if (!part) + goto error; + + if (part_type != 0) + return part; + + gpt_part_data = part->disk_specific = + ped_malloc (sizeof (GPTPartitionData)); + if (!gpt_part_data) + goto error_free_part; + + gpt_part_data->type = PARTITION_LINUX_DATA_GUID; + gpt_part_data->translated_name = 0; + uuid_generate ((unsigned char *) &gpt_part_data->uuid); + swap_uuid_and_efi_guid (&gpt_part_data->uuid); + memset (gpt_part_data->name, 0, sizeof gpt_part_data->name); + memset (&gpt_part_data->attributes, 0, sizeof gpt_part_data->attributes); + return part; + +error_free_part: + _ped_partition_free (part); +error: + return NULL; +} + +static PedPartition * +gpt_partition_duplicate (const PedPartition *part) +{ + PedPartition *result; + GPTPartitionData *part_data = part->disk_specific; + GPTPartitionData *result_data; + + result = _ped_partition_alloc (part->disk, part->type, part->fs_type, + part->geom.start, part->geom.end); + if (!result) + goto error; + result->num = part->num; + + if (result->type != 0) + return result; + + result_data = result->disk_specific = + ped_malloc (sizeof (GPTPartitionData)); + if (!result_data) + goto error_free_part; + + *result_data = *part_data; + if (part_data->translated_name) { + result_data->translated_name = xstrdup (part_data->translated_name); + } else { + result_data->translated_name = 0; + } + return result; + +error_free_part: + _ped_partition_free (result); +error: + return NULL; +} + +static void +gpt_partition_destroy (PedPartition *part) +{ + if (part->type == 0) + { + PED_ASSERT (part->disk_specific != NULL); + GPTPartitionData *gpt_part_data = part->disk_specific; + free (gpt_part_data->translated_name); + free (part->disk_specific); + } + + _ped_partition_free (part); +} + +/* is_skip_guid checks the guid against the list of guids that should not be + * overridden by set_system. It returns a 1 if it is in the list. +*/ +static bool +is_skip_guid(efi_guid_t guid) { + int n = sizeof(skip_set_system_guids) / sizeof(skip_set_system_guids[0]); + for (int i = 0; i < n; ++i) { + if (guid_cmp(guid, skip_set_system_guids[i]) == 0) { + return true; + } + } + + return false; +} + +static int +gpt_partition_set_system (PedPartition *part, + const PedFileSystemType *fs_type) +{ + GPTPartitionData *gpt_part_data = part->disk_specific; + + PED_ASSERT (gpt_part_data != NULL); + + part->fs_type = fs_type; + + // Is this a GUID that should skip fs_type checking? + if (is_skip_guid(gpt_part_data->type)) { + return 1; + } + + if (fs_type) + { + if (strncmp (fs_type->name, "fat", 3) == 0 + || strcmp (fs_type->name, "udf") == 0 + || strcmp (fs_type->name, "ntfs") == 0) + { + gpt_part_data->type = PARTITION_BASIC_DATA_GUID; + return 1; + } + if (strncmp (fs_type->name, "hfs", 3) == 0) + { + gpt_part_data->type = PARTITION_APPLE_HFS_GUID; + return 1; + } + if (strstr (fs_type->name, "swap")) + { + gpt_part_data->type = PARTITION_SWAP_GUID; + return 1; + } + } + + gpt_part_data->type = PARTITION_LINUX_DATA_GUID; + return 1; +} + +/* Allocate metadata partitions for the GPTH and PTES */ +static int +gpt_alloc_metadata (PedDisk *disk) +{ + PedSector gptlength, pteslength = 0; + GPTDiskData *gpt_disk_data; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + PED_ASSERT (disk->disk_specific != NULL); + gpt_disk_data = disk->disk_specific; + + gptlength = ped_div_round_up (sizeof (GuidPartitionTableHeader_t), + disk->dev->sector_size); + pteslength = ped_div_round_up (gpt_disk_data->entry_count + * sizeof (GuidPartitionEntry_t), + disk->dev->sector_size); + + /* metadata at the start of the disk includes the MBR */ + if (!add_metadata_part (disk, GPT_PMBR_LBA, + GPT_PMBR_SECTORS + gptlength + pteslength)) + return 0; + + /* metadata at the end of the disk */ + if (!add_metadata_part (disk, disk->dev->length - gptlength - pteslength, + gptlength + pteslength)) + return 0; + + return 1; +} + +/* Does nothing, as the read/new/destroy functions maintain part->num */ +static int +gpt_partition_enumerate (PedPartition *part) +{ + GPTDiskData *gpt_disk_data = part->disk->disk_specific; + int i; + + /* never change the partition numbers */ + if (part->num != -1) + return 1; + + for (i = 1; i <= gpt_disk_data->entry_count; i++) + { + if (!ped_disk_get_partition (part->disk, i)) + { + part->num = i; + return 1; + } + } + + PED_ASSERT (0); + + return 0; /* used if debug is disabled */ +} + +static int +gpt_disk_set_flag (PedDisk *disk, PedDiskFlag flag, int state) +{ + GPTDiskData *gpt_disk_data = disk->disk_specific; + switch (flag) + { + case PED_DISK_GPT_PMBR_BOOT: + gpt_disk_data->pmbr_boot = state; + return 1; + default: + return 0; + } +} + +static int +gpt_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag) +{ + switch (flag) + { + case PED_DISK_GPT_PMBR_BOOT: + return 1; + default: + return 0; + } +} + +static uint8_t* +gpt_disk_get_uuid (const PedDisk *disk) +{ + GPTDiskData *gpt_disk_data = disk->disk_specific; + + efi_guid_t uuid = gpt_disk_data->uuid; + + /* uuid is always LE, while uint8_t is always kind of BE */ + + uuid.time_low = PED_SWAP32(uuid.time_low); + uuid.time_mid = PED_SWAP16(uuid.time_mid); + uuid.time_hi_and_version = PED_SWAP16(uuid.time_hi_and_version); + + uint8_t *buf = ped_malloc(sizeof (uuid_t)); + memcpy(buf, &uuid, sizeof (uuid_t)); + return buf; +} + +static int +gpt_disk_get_flag (const PedDisk *disk, PedDiskFlag flag) +{ + GPTDiskData *gpt_disk_data = disk->disk_specific; + switch (flag) + { + case PED_DISK_GPT_PMBR_BOOT: + return gpt_disk_data->pmbr_boot; + break; + default: + return 0; + } +} + +static int +gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) +{ + GPTPartitionData *gpt_part_data; + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + gpt_part_data = part->disk_specific; + + const struct flag_uuid_mapping_t* p = gpt_find_flag_uuid_mapping (flag); + if (p) + { + if (state) { + gpt_part_data->type = p->type_uuid; + } else if (guid_cmp (gpt_part_data->type, p->type_uuid) == 0) { + // Clear the GUID so that fs_type will be used to return it to the default + gpt_part_data->type = PARTITION_LINUX_DATA_GUID; + return gpt_partition_set_system (part, part->fs_type); + } + return 1; + } + + switch (flag) + { + case PED_PARTITION_HIDDEN: + gpt_part_data->attributes.RequiredToFunction = state; + return 1; + case PED_PARTITION_LEGACY_BOOT: + gpt_part_data->attributes.LegacyBIOSBootable = state; + return 1; + case PED_PARTITION_NO_AUTOMOUNT: + gpt_part_data->attributes.NoAutomount = state; + return 1; + case PED_PARTITION_ROOT: + case PED_PARTITION_LBA: + default: + return 0; + } + return 1; +} + +static int _GL_ATTRIBUTE_PURE +gpt_partition_get_flag (const PedPartition *part, PedPartitionFlag flag) +{ + GPTPartitionData *gpt_part_data; + PED_ASSERT (part->disk_specific != NULL); + gpt_part_data = part->disk_specific; + + const struct flag_uuid_mapping_t* p = gpt_find_flag_uuid_mapping (flag); + if (p) + return guid_cmp (gpt_part_data->type, p->type_uuid) == 0; + + switch (flag) + { + case PED_PARTITION_HIDDEN: + return gpt_part_data->attributes.RequiredToFunction; + case PED_PARTITION_LEGACY_BOOT: + return gpt_part_data->attributes.LegacyBIOSBootable; + case PED_PARTITION_NO_AUTOMOUNT: + return gpt_part_data->attributes.NoAutomount; + case PED_PARTITION_LBA: + case PED_PARTITION_ROOT: + default: + return 0; + } + return 0; +} + +static int +gpt_partition_is_flag_available (const PedPartition *part, + PedPartitionFlag flag) +{ + if (gpt_find_flag_uuid_mapping (flag)) + return 1; + + switch (flag) + { + case PED_PARTITION_HIDDEN: + case PED_PARTITION_LEGACY_BOOT: + case PED_PARTITION_NO_AUTOMOUNT: + return 1; + case PED_PARTITION_ROOT: + case PED_PARTITION_LBA: + default: + return 0; + } + return 0; +} + +static void +gpt_partition_set_name (PedPartition *part, const char *name) +{ + GPTPartitionData *gpt_part_data = part->disk_specific; + + free(gpt_part_data->translated_name); + gpt_part_data->translated_name = xstrdup(name); + iconv_t conv = iconv_open ("UCS-2LE", nl_langinfo (CODESET)); + if (conv == (iconv_t)-1) + goto err; + char *inbuff = gpt_part_data->translated_name; + char *outbuff = (char *)&gpt_part_data->name; + size_t inbuffsize = strlen (inbuff) + 1; + size_t outbuffsize = 72; + if (iconv (conv, &inbuff, &inbuffsize, &outbuff, &outbuffsize) == -1) + goto err; + iconv_close (conv); + return; + err: + ped_exception_throw (PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE, + _("failed to translate partition name")); + iconv_close (conv); +} + +static const char * +gpt_partition_get_name (const PedPartition *part) +{ + GPTPartitionData *gpt_part_data = part->disk_specific; + if (gpt_part_data->translated_name == NULL) + { + char buffer[200]; + iconv_t conv = iconv_open (nl_langinfo (CODESET), "UCS-2LE"); + if (conv == (iconv_t)-1) + goto err; + char *inbuff = (char *)&gpt_part_data->name; + char *outbuff = buffer; + size_t inbuffsize = 72; + size_t outbuffsize = sizeof(buffer); + if (iconv (conv, &inbuff, &inbuffsize, &outbuff, &outbuffsize) == -1) + goto err; + iconv_close (conv); + *outbuff = 0; + gpt_part_data->translated_name = xstrdup (buffer); + return gpt_part_data->translated_name; + err: + ped_exception_throw (PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE, + _("failed to translate partition name")); + iconv_close (conv); + return ""; + } + return gpt_part_data->translated_name; +} + + +static int +gpt_partition_set_type_uuid (PedPartition *part, const uint8_t *uuid) +{ + GPTPartitionData *gpt_part_data = part->disk_specific; + + efi_guid_t* type_uuid = &gpt_part_data->type; + memcpy(type_uuid, uuid, sizeof (efi_guid_t)); + + /* type_uuid is always LE, while uint8_t is always kind of BE */ + + type_uuid->time_low = PED_SWAP32(type_uuid->time_low); + type_uuid->time_mid = PED_SWAP16(type_uuid->time_mid); + type_uuid->time_hi_and_version = PED_SWAP16(type_uuid->time_hi_and_version); + + return 1; +} + + +static uint8_t* +gpt_partition_get_type_uuid (const PedPartition *part) +{ + const GPTPartitionData *gpt_part_data = part->disk_specific; + + efi_guid_t type_uuid = gpt_part_data->type; + + /* type_uuid is always LE, while uint8_t is always kind of BE */ + + type_uuid.time_low = PED_SWAP32(type_uuid.time_low); + type_uuid.time_mid = PED_SWAP16(type_uuid.time_mid); + type_uuid.time_hi_and_version = PED_SWAP16(type_uuid.time_hi_and_version); + + uint8_t *buf = ped_malloc(sizeof (uuid_t)); + memcpy(buf, &type_uuid, sizeof (uuid_t)); + return buf; +} + +static uint8_t* +gpt_partition_get_uuid (const PedPartition *part) +{ + const GPTPartitionData *gpt_part_data = part->disk_specific; + + efi_guid_t uuid = gpt_part_data->uuid; + + /* uuid is always LE, while uint8_t is always kind of BE */ + + uuid.time_low = PED_SWAP32(uuid.time_low); + uuid.time_mid = PED_SWAP16(uuid.time_mid); + uuid.time_hi_and_version = PED_SWAP16(uuid.time_hi_and_version); + + uint8_t *buf = ped_malloc(sizeof (uuid_t)); + memcpy(buf, &uuid, sizeof (uuid_t)); + return buf; +} + +static int +gpt_get_max_primary_partition_count (const PedDisk *disk) +{ + const GPTDiskData *gpt_disk_data = disk->disk_specific; + return gpt_disk_data->entry_count; +} + +/* + * From (http://developer.apple.com/technotes/tn2006/tn2166.html Chapter 5). + * According to the specs the first LBA (LBA0) is not relevant (it exists + * to maintain compatibility). on the second LBA(LBA1) gpt places the + * header. The header is as big as the block size. After the header we + * find the Entry array. Each element of said array, describes each + * partition. One can have as much elements as can fit between the end of + * the second LBA (where the header ends) and the FirstUsableLBA. + * FirstUsableLBA is the first logical block that is used for contents + * and is defined in header. + * + * /---------------------------------------------------\ + * | BLOCK0 | HEADER | Entry Array | First Usable LBA | + * | | BLOCK1 | | | + * \---------------------------------------------------/ + * / \ + * /----------/ \----------\ + * /-----------------------------------------\ + * | E1 | E2 | E3 |...............| EN | + * \-----------------------------------------/ + * + * The number of possible partitions or supported partitions is: + * SP = FirstUsableLBA*Blocksize - 2*Blocksize / SizeOfPartitionEntry + * SP = Blocksize(FirstusableLBA - 2) / SizeOfPartitoinEntry + */ +static bool +gpt_get_max_supported_partition_count (const PedDisk *disk, int *max_n) +{ + GuidPartitionTableHeader_t *pth = NULL; + uint8_t *pth_raw = ped_malloc (pth_get_size (disk->dev)); + + if (ped_device_read (disk->dev, pth_raw, 1, GPT_HEADER_SECTORS) + || ped_device_read (disk->dev, pth_raw, + disk->dev->length, GPT_HEADER_SECTORS)) + pth = pth_new_from_raw (disk->dev, pth_raw); + free (pth_raw); + + if (pth == NULL) + return false; + + if (!_header_is_valid (disk, pth, 1)) + { + pth->FirstUsableLBA = PED_CPU_TO_LE64 (34); + pth->SizeOfPartitionEntry + = PED_CPU_TO_LE32 (sizeof (GuidPartitionEntry_t)); + } + + *max_n = (disk->dev->sector_size * (PED_LE64_TO_CPU (pth->FirstUsableLBA) - 2) + / PED_LE32_TO_CPU (pth->SizeOfPartitionEntry)); + pth_free (pth); + return true; +} + +static PedConstraint * +_non_metadata_constraint (const PedDisk *disk) +{ + GPTDiskData *gpt_disk_data = disk->disk_specific; + + return ped_constraint_new_from_max (&gpt_disk_data->data_area); +} + +static int +gpt_partition_align (PedPartition *part, const PedConstraint *constraint) +{ + PED_ASSERT (part != NULL); + + if (_ped_partition_attempt_align (part, constraint, + _non_metadata_constraint (part->disk))) + return 1; + +#ifndef DISCOVER_ONLY + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + return 0; +} + +#include "pt-common.h" +PT_define_limit_functions (gpt) + +static PedDiskOps gpt_disk_ops = +{ + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (gpt_write), + + partition_set_name: gpt_partition_set_name, + partition_get_name: gpt_partition_get_name, + partition_set_type_id: NULL, + partition_get_type_id: NULL, + partition_set_type_uuid: gpt_partition_set_type_uuid, + partition_get_type_uuid: gpt_partition_get_type_uuid, + partition_get_uuid: gpt_partition_get_uuid, + disk_set_flag: gpt_disk_set_flag, + disk_get_flag: gpt_disk_get_flag, + disk_is_flag_available: gpt_disk_is_flag_available, + disk_get_uuid: gpt_disk_get_uuid, + + PT_op_function_initializers (gpt) +}; + +static PedDiskType gpt_disk_type = +{ + next: NULL, + name: "gpt", + ops: &gpt_disk_ops, + features: PED_DISK_TYPE_PARTITION_NAME | PED_DISK_TYPE_PARTITION_TYPE_UUID | + PED_DISK_TYPE_DISK_UUID | PED_DISK_TYPE_PARTITION_UUID +}; + +void +ped_disk_gpt_init () +{ + ped_disk_type_register (&gpt_disk_type); +} + +void +ped_disk_gpt_done () +{ + ped_disk_type_unregister (&gpt_disk_type); +} + +verify (sizeof (GuidPartitionEntryAttributes_t) == 8); +verify (sizeof (GuidPartitionEntry_t) == 128); diff --git a/jni/parted/libparted/labels/loop.c b/jni/parted/libparted/labels/loop.c new file mode 100755 index 0000000..45d169d --- /dev/null +++ b/jni/parted/libparted/labels/loop.c @@ -0,0 +1,316 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2000, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include +#include + +#include "pt-tools.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#define LOOP_SIGNATURE "GNU Parted Loopback 0" + +static PedDiskType loop_disk_type; + +static PedDisk* loop_alloc (const PedDevice* dev); +static void loop_free (PedDisk* disk); + +static int +loop_probe (const PedDevice* dev) +{ + PedDisk *disk = loop_alloc (dev); + if (!disk) + goto error; + + void *buf; + if (!ptt_read_sector (dev, 0, &buf)) + goto error_destroy_disk; + int found_sig = !strncmp (buf, LOOP_SIGNATURE, strlen (LOOP_SIGNATURE)); + free (buf); + + int result; + if (found_sig) { + result = 1; + } else { + PedGeometry* geom; + + geom = ped_geometry_new (dev, 0, disk->dev->length); + if (!geom) + goto error_destroy_disk; + result = ped_file_system_probe (geom) != NULL; + ped_geometry_destroy (geom); + } + loop_free (disk); + return result; + +error_destroy_disk: + loop_free (disk); +error: + return 0; +} + +static PedDisk* +loop_alloc (const PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + + if (dev->length < 256) + return NULL; + PedDisk *disk = _ped_disk_alloc ((PedDevice*)dev, &loop_disk_type); + PED_ASSERT (disk != NULL); + PedGeometry *geom = ped_geometry_new (dev, 0, dev->length); + PED_ASSERT (geom != NULL); + PedPartition *part = ped_partition_new (disk, PED_PARTITION_NORMAL, + NULL, geom->start, geom->end); + PED_ASSERT (part != NULL); + ped_geometry_destroy (geom); + PedConstraint *constraint_any = ped_constraint_any (dev); + if (!ped_disk_add_partition (disk, part, constraint_any)) + goto error; + ped_constraint_destroy (constraint_any); + return disk; + error: + ped_constraint_destroy (constraint_any); + ped_disk_destroy (disk); + return NULL; +} + +static PedDisk* +loop_duplicate (const PedDisk* disk) +{ + return ped_disk_new_fresh (disk->dev, &loop_disk_type); +} + +static void +loop_free (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + + _ped_disk_free (disk); +} + +static int +loop_read (PedDisk* disk) +{ + PedDevice* dev = NULL; + PedGeometry* geom; + PedFileSystemType* fs_type; + PedPartition* part; + PedConstraint* constraint_any; + + PED_ASSERT (disk != NULL); + dev = disk->dev; + constraint_any = ped_constraint_any (dev); + + ped_disk_delete_all (disk); + + void *buf; + if (!ptt_read_sector (dev, 0, &buf)) + goto error; + + int found_sig = !strncmp (buf, LOOP_SIGNATURE, strlen (LOOP_SIGNATURE)); + free (buf); + geom = ped_geometry_new (dev, 0, dev->length); + if (!geom) + goto error; + + fs_type = ped_file_system_probe (geom); + if (!fs_type && !found_sig) + goto error_free_geom; + + part = ped_partition_new (disk, PED_PARTITION_NORMAL, + fs_type, geom->start, geom->end); + ped_geometry_destroy (geom); + if (!part) + goto error; + + if (!ped_disk_add_partition (disk, part, constraint_any)) + goto error; + ped_constraint_destroy (constraint_any); + return 1; + +error_free_geom: + ped_geometry_destroy (geom); +error: + ped_constraint_destroy (constraint_any); + return 0; +} + +#ifndef DISCOVER_ONLY +static int +loop_write (const PedDisk* disk) +{ + size_t buflen = disk->dev->sector_size; + char *buf = alloca (buflen); + PedPartition *part = ped_disk_get_partition (disk, 1); + /* if there is already a filesystem on the disk, we don't need to write the signature */ + if (part && part->fs_type) + return 1; + if (!ped_device_read (disk->dev, buf, 0, 1)) + return 0; + strcpy (buf, LOOP_SIGNATURE); + + return ped_device_write (disk->dev, buf, 0, 1); +} +#endif /* !DISCOVER_ONLY */ + +static PedPartition* +loop_partition_new (const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + PedPartition* part; + + part = _ped_partition_alloc (disk, part_type, fs_type, start, end); + if (!part) + return NULL; + part->disk_specific = NULL; + return part; +} + +static PedPartition* +loop_partition_duplicate (const PedPartition* part) +{ + PedPartition* result; + + result = ped_partition_new (part->disk, part->type, part->fs_type, + part->geom.start, part->geom.end); + if (result == NULL) + return NULL; + result->num = part->num; + return result; +} + +static void +loop_partition_destroy (PedPartition* part) +{ + free (part); +} + +static int +loop_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type) +{ + part->fs_type = fs_type; + return 1; +} + +static int +loop_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + return 0; +} + +static int +loop_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + return 0; +} + +static int +loop_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + PedGeometry* new_geom; + + new_geom = ped_constraint_solve_nearest (constraint, &part->geom); + if (!new_geom) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the " + "partition.")); + return 0; + } + ped_geometry_set (&part->geom, new_geom->start, new_geom->length); + ped_geometry_destroy (new_geom); + return 1; +} + +static int +loop_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + return 0; +} + +static int +loop_partition_enumerate (PedPartition* part) +{ + part->num = 1; + return 1; +} + +static int +loop_alloc_metadata (PedDisk* disk) +{ + return 1; +} + +static int +loop_get_max_primary_partition_count (const PedDisk* disk) +{ + return 1; +} + +static bool +loop_get_max_supported_partition_count (const PedDisk* disk, int *max_n) +{ + *max_n = 1; + return true; +} + +#include "pt-common.h" +PT_define_limit_functions (loop) + +static PedDiskOps loop_disk_ops = { + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (loop_write), + + partition_set_name: NULL, + partition_get_name: NULL, + + PT_op_function_initializers (loop) +}; + +static PedDiskType loop_disk_type = { + next: NULL, + name: "loop", + ops: &loop_disk_ops, + features: 0 +}; + +void +ped_disk_loop_init () +{ + ped_disk_type_register (&loop_disk_type); +} + +void +ped_disk_loop_done () +{ + ped_disk_type_unregister (&loop_disk_type); +} diff --git a/jni/parted/libparted/labels/mac.c b/jni/parted/libparted/labels/mac.c new file mode 100755 index 0000000..6711d87 --- /dev/null +++ b/jni/parted/libparted/labels/mac.c @@ -0,0 +1,1604 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000, 2002, 2004, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "misc.h" +#include "pt-tools.h" + +/* struct's hacked from Linux source: fs/partitions/mac.h + * I believe it was originally written by Paul Mackerras (from comments in + * Quik source) + * + * See also: + * http://developer.apple.com/documentation/mac/Devices/Devices-126.html + * http://developer.apple.com/documentation/mac/Devices/Devices-121.html + * http://devworld.apple.com/technotes/tn/tn1189.html + * + * Partition types: + * Apple_Bootstrap new-world (HFS) boot partition + * Apple_partition_map partition map (table) + * Apple_Driver device driver + * Apple_Driver43 SCSI Manager 4.3 device driver + * Apple_MFS original Macintosh File System + * Apple_HFS Hierarchical File System (and +) + * Apple_HFSX HFS+ with case sensitivity and more + * Apple_UNIX_SVR2 UNIX file system (UFS?) + * Apple_PRODOS ProDOS file system + * Apple_Free unused space + * Apple_Scratch empty + * Apple_Void padding for iso9660 + * Apple_Extra an unused partition map entry + * + * Quick explanation: + * ------------------ + * Terminology: + * + * Parted Apple + * ------ ----- + * device disk/device + * disk no equivalent. + * partition volume or partition + * sector block + * + * * All space must be accounted for, except block 0 (driver block) and + * block 1-X (the partition map: i.e. lots of MacRawPartitions) + * + * * It's really hard to grow/shrink the number of MacRawPartition + * entries in the partition map, because the first partition starts + * immediately after the partition map. When we can move the start of + * HFS and ext2 partitions, this problem will disappear ;-) + */ + +#define MAC_PARTITION_MAGIC_1 0x5453 /* old */ +#define MAC_PARTITION_MAGIC_2 0x504d +#define MAC_DISK_MAGIC 0x4552 + +#define MAC_STATUS_BOOTABLE 8 /* partition is bootable */ + +typedef struct _MacRawPartition MacRawPartition; +typedef struct _MacRawDisk MacRawDisk; +typedef struct _MacDeviceDriver MacDeviceDriver; +typedef struct _MacPartitionData MacPartitionData; +typedef struct _MacDiskData MacDiskData; + +struct __attribute__ ((packed)) _MacRawPartition { + uint16_t signature; /* expected to be MAC_PARTITION_MAGIC */ + uint16_t res1; + uint32_t map_count; /* # blocks in partition map */ + uint32_t start_block; /* absolute starting block # of partition */ + uint32_t block_count; /* number of blocks in partition */ + char name[32]; /* partition name */ + char type[32]; /* string type description */ + uint32_t data_start; /* rel block # of first data block */ + uint32_t data_count; /* number of data blocks */ + uint32_t status; /* partition status bits */ + uint32_t boot_start; + uint32_t boot_count; + uint32_t boot_load; + uint32_t boot_load2; + uint32_t boot_entry; + uint32_t boot_entry2; + uint32_t boot_cksum; + char processor[16]; /* Contains 680x0, x=0,2,3,4; or empty */ + uint32_t driver_sig; + char _padding[372]; +}; + +/* Driver descriptor structure, in block 0 */ +struct __attribute__ ((packed)) _MacRawDisk { + uint16_t signature; /* expected to be MAC_DRIVER_MAGIC */ + uint16_t block_size; /* physical sector size */ + uint32_t block_count; /* size of device in blocks */ + uint16_t dev_type; /* reserved */ + uint16_t dev_id; /* reserved */ + uint32_t data; /* reserved */ + uint16_t driver_count; /* # of driver descriptor entries */ + uint8_t driverlist[488];/* info about available drivers */ + uint16_t padding[3]; /* pad to 512 bytes */ +}; + +struct __attribute__ ((packed)) _MacDeviceDriver { + uint32_t block; /* startblock in MacRawDisk->block_size units */ + uint16_t size; /* size in 512 byte units */ + uint16_t type; /* operating system type (MacOS = 1) */ +}; + +struct _MacPartitionData { + char volume_name[33]; /* eg: "Games" */ + char system_name[33]; /* eg: "Apple_Unix_SVR2" */ + char processor_name[17]; + + int is_boot; + int is_driver; + int has_driver; + int is_root; + int is_swap; + int is_lvm; + int is_raid; + + PedSector data_region_length; + PedSector boot_region_length; + + uint32_t boot_base_address; + uint32_t boot_entry_address; + uint32_t boot_checksum; + + uint32_t status; + uint32_t driver_sig; +}; + +struct _MacDiskData { + int ghost_size; /* sectors per "driver" block */ + int part_map_entry_count; /* # entries (incl. ghost) */ + int part_map_entry_num; /* partition map location */ + + int active_part_entry_count; /* # real partitions */ + int free_part_entry_count; /* # free space */ + int last_part_entry_num; /* last entry number */ + + uint16_t block_size; /* physical sector size */ + uint16_t driver_count; + MacDeviceDriver driverlist[1 + 60]; /* 488 bytes */ +}; + +static PedDiskType mac_disk_type; + +static int +_check_signature (MacRawDisk const *raw_disk) +{ + if (PED_BE16_TO_CPU (raw_disk->signature) != MAC_DISK_MAGIC) { +#ifdef DISCOVER_ONLY + return 0; +#else + return ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Invalid signature %x for Mac disk labels."), + (int) PED_BE16_TO_CPU (raw_disk->signature)) + == PED_EXCEPTION_IGNORE; +#endif + } + + return 1; +} + +static int +_rawpart_check_signature (MacRawPartition* raw_part) +{ + int sig = (int) PED_BE16_TO_CPU (raw_part->signature); + return sig == MAC_PARTITION_MAGIC_1 || sig == MAC_PARTITION_MAGIC_2; +} + +static int +mac_probe (const PedDevice * dev) +{ + PED_ASSERT (dev != NULL); + + if (dev->sector_size < sizeof (MacRawDisk)) + return 0; + + void *label; + if (!ptt_read_sector (dev, 0, &label)) + return 0; + + int valid = _check_signature (label); + + free (label); + return valid; +} + +static int +_disk_add_part_map_entry (PedDisk* disk, int warn) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + PedPartition* new_part; + MacPartitionData* mac_part_data; + PedSector part_map_size; + PedConstraint* constraint_any = ped_constraint_any (disk->dev); + +#ifndef DISCOVER_ONLY + if (warn && ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_FIX | PED_EXCEPTION_CANCEL, + _("Partition map has no partition map entry!")) + != PED_EXCEPTION_FIX) + goto error; +#endif /* !DISCOVER_ONLY */ + + part_map_size + = ped_round_up_to (mac_disk_data->last_part_entry_num, 64); + if (part_map_size == 0) + part_map_size = 64; + + new_part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL, + 1, part_map_size - 1); + if (!new_part) + goto error; + + mac_part_data = new_part->disk_specific; + strcpy (mac_part_data->volume_name, "Apple"); + strcpy (mac_part_data->system_name, "Apple_partition_map"); + + if (!ped_disk_add_partition (disk, new_part, constraint_any)) + goto error_destroy_new_part; + + mac_disk_data->part_map_entry_num = new_part->num; + mac_disk_data->part_map_entry_count + = new_part->geom.end - mac_disk_data->ghost_size; + ped_constraint_destroy (constraint_any); + return 1; + +error_destroy_new_part: + ped_partition_destroy (new_part); +error: + ped_constraint_destroy (constraint_any); + return 0; +} + +static PedDisk* +mac_alloc (const PedDevice* dev) +{ + PedDisk* disk; + MacDiskData* mac_disk_data; + + PED_ASSERT (dev != NULL); + +#ifndef DISCOVER_ONLY + if (dev->length < 256) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s is too small for a Mac disk label!"), + dev->path); + goto error; + } +#endif + + disk = _ped_disk_alloc (dev, &mac_disk_type); + if (!disk) + goto error; + + mac_disk_data = (MacDiskData*) ped_malloc (sizeof (MacDiskData)); + if (!mac_disk_data) + goto error_free_disk; + disk->disk_specific = mac_disk_data; + mac_disk_data->ghost_size = 1; + mac_disk_data->active_part_entry_count = 0; + mac_disk_data->free_part_entry_count = 1; + mac_disk_data->last_part_entry_num = 1; + mac_disk_data->block_size = 0; + mac_disk_data->driver_count = 0; + memset(&mac_disk_data->driverlist[0], 0, sizeof(mac_disk_data->driverlist)); + + if (!_disk_add_part_map_entry (disk, 0)) + goto error_free_disk; + return disk; + +error_free_disk: + _ped_disk_free (disk); +error: + return NULL; +} + +static PedDisk* +mac_duplicate (const PedDisk* disk) +{ + PedDisk* new_disk; + MacDiskData* new_mac_data; + MacDiskData* old_mac_data = (MacDiskData*) disk->disk_specific; + + new_disk = ped_disk_new_fresh (disk->dev, &mac_disk_type); + if (!new_disk) + return NULL; + + new_mac_data = (MacDiskData*) new_disk->disk_specific; + + /* remove the partition map partition - it will be duplicated + * later. + */ + PedSector first_part_map_sector = old_mac_data->ghost_size; + PedPartition *partition_map + = ped_disk_get_partition_by_sector (new_disk, first_part_map_sector); + PED_ASSERT (partition_map != NULL); + + /* ped_disk_remove_partition may be used only to delete a "normal" + partition. Trying to delete at least "freespace" or "metadata" + partitions leads to a violation of assumptions in + ped_disk_remove_partition, since it calls _disk_push_update_mode, + which destroys all "freespace" and "metadata" partitions, and + depends on that destruction not freeing its PART parameter. */ + PED_ASSERT (partition_map->type == PED_PARTITION_NORMAL); + ped_disk_remove_partition (new_disk, partition_map); + + /* ugly, but C is ugly :p */ + memcpy (new_mac_data, old_mac_data, sizeof (MacDiskData)); + return new_disk; +} + +static void +mac_free (PedDisk* disk) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + + _ped_disk_free (disk); + free (mac_disk_data); +} + +static int +_rawpart_cmp_type (const MacRawPartition* raw_part, const char* type) +{ + return strncasecmp (raw_part->type, type, 32) == 0; +} + +static int +_rawpart_cmp_name (const MacRawPartition* raw_part, const char* name) +{ + return strncasecmp (raw_part->name, name, 32) == 0; +} + +static int +_rawpart_is_partition_map (const MacRawPartition* raw_part) +{ + return _rawpart_cmp_type (raw_part, "Apple_partition_map"); +} + +static int +strncasestr (const char* haystack, const char* needle, int n) +{ + int needle_size = strlen (needle); + int i; + + for (i = 0; haystack[i] && i < n - needle_size; i++) { + if (strncasecmp (haystack + i, needle, needle_size) == 0) + return 1; + } + + return 0; +} + +static int +_rawpart_is_boot (const MacRawPartition* raw_part) +{ + if (!strcasecmp(raw_part->type, "Apple_Bootstrap")) + return 1; + + if (!strcasecmp(raw_part->type, "Apple_Boot")) + return 1; + + return 0; +} + +static int +_rawpart_is_driver (const MacRawPartition* raw_part) +{ + if (strncmp (raw_part->type, "Apple_", 6) != 0) + return 0; + if (!strncasestr (raw_part->type, "driver", 32)) + return 0; + return 1; +} + +static int _GL_ATTRIBUTE_PURE +_rawpart_has_driver (const MacRawPartition* raw_part, MacDiskData* mac_disk_data) +{ + MacDeviceDriver *driverlist; + uint16_t i; + uint32_t start_block, block_count; + + start_block = PED_BE32_TO_CPU(raw_part->start_block); + block_count = PED_BE32_TO_CPU(raw_part->block_count); + driverlist = &mac_disk_data->driverlist[0]; + for (i = 0; i < mac_disk_data->driver_count; i++) { + if (start_block == PED_BE32_TO_CPU(driverlist->block) && + block_count == PED_BE16_TO_CPU(driverlist->size)) + return 1; + driverlist++; + } + return 0; +} + +static int +_rawpart_is_root (MacRawPartition* raw_part) +{ + if (!_rawpart_cmp_type (raw_part, "Apple_UNIX_SVR2")) + return 0; + if (strcmp (raw_part->name, "root") != 0) + return 0; + return 1; +} + +static int +_rawpart_is_swap (MacRawPartition* raw_part) +{ + if (!_rawpart_cmp_type (raw_part, "Apple_UNIX_SVR2")) + return 0; + if (strcmp (raw_part->name, "swap") != 0) + return 0; + return 1; +} + +static int +_rawpart_is_lvm (MacRawPartition* raw_part) +{ + if (strcmp (raw_part->type, "Linux_LVM") != 0) + return 0; + return 1; +} + +static int +_rawpart_is_raid (MacRawPartition* raw_part) +{ + if (strcmp (raw_part->type, "Linux_RAID") != 0) + return 0; + return 1; +} + +static int +_rawpart_is_void (MacRawPartition* raw_part) +{ + return _rawpart_cmp_type (raw_part, "Apple_Void"); +} + +/* returns 1 if the raw_part represents a partition that is "unused space", or + * doesn't represent a partition at all. NOTE: some people make Apple_Free + * partitions with MacOS, because they can't select another type. So, if the + * name is anything other than "Extra" or "", it is treated as a "real" + * partition. + */ +static int +_rawpart_is_active (MacRawPartition* raw_part) +{ + if (_rawpart_cmp_type (raw_part, "Apple_Free") + && (_rawpart_cmp_name (raw_part, "Extra") + || _rawpart_cmp_name (raw_part, ""))) + return 0; + if (_rawpart_cmp_type (raw_part, "Apple_Void")) + return 0; + if (_rawpart_cmp_type (raw_part, "Apple_Scratch")) + return 0; + if (_rawpart_cmp_type (raw_part, "Apple_Extra")) + return 0; + + return 1; +} + +static PedPartition* +_rawpart_analyse (MacRawPartition* raw_part, PedDisk* disk, int num) +{ + MacDiskData* mac_disk_data; + PedPartition* part; + MacPartitionData* mac_part_data; + PedSector start, length; + + if (!_rawpart_check_signature (raw_part)) { +#ifndef DISCOVER_ONLY + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("Partition %d has an invalid signature %x."), + num, + (int) PED_BE16_TO_CPU (raw_part->signature)) + != PED_EXCEPTION_IGNORE) +#endif + goto error; + } + + mac_disk_data = (MacDiskData*) disk->disk_specific; + + start = PED_BE32_TO_CPU (raw_part->start_block); + length = PED_BE32_TO_CPU (raw_part->block_count); + if (length == 0) { +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Partition %d has an invalid length of 0 bytes!"), + num); +#endif + return NULL; + } + part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL, + start, start + length - 1); + if (!part) + goto error; + + mac_part_data = part->disk_specific; + + strncpy (mac_part_data->volume_name, raw_part->name, 32); + strncpy (mac_part_data->system_name, raw_part->type, 32); + strncpy (mac_part_data->processor_name, raw_part->processor, 16); + + mac_part_data->is_boot = _rawpart_is_boot (raw_part); + mac_part_data->is_driver = _rawpart_is_driver (raw_part); + if (mac_part_data->is_driver) + mac_part_data->has_driver = _rawpart_has_driver(raw_part, mac_disk_data); + mac_part_data->is_root = _rawpart_is_root (raw_part); + mac_part_data->is_swap = _rawpart_is_swap (raw_part); + mac_part_data->is_lvm = _rawpart_is_lvm (raw_part); + mac_part_data->is_raid = _rawpart_is_raid (raw_part); + + /* "data" region */ +#ifndef DISCOVER_ONLY + if (raw_part->data_start) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The data region doesn't start at the start " + "of the partition.")); + goto error_destroy_part; + } +#endif /* !DISCOVER_ONLY */ + mac_part_data->data_region_length + = PED_BE32_TO_CPU (raw_part->data_count); + + mac_part_data->boot_region_length + = PED_BE32_TO_CPU (raw_part->boot_count); + +#ifndef DISCOVER_ONLY + if (mac_part_data->has_driver) { + if (mac_part_data->boot_region_length < part->geom.length) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("The partition's boot region doesn't occupy " + "the entire partition.")) + != PED_EXCEPTION_IGNORE) + goto error_destroy_part; + } + } else { + if (mac_part_data->data_region_length < part->geom.length && + !mac_part_data->is_boot) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("The partition's data region doesn't occupy " + "the entire partition.")) + != PED_EXCEPTION_IGNORE) + goto error_destroy_part; + } + } +#endif /* !DISCOVER_ONLY */ + + mac_part_data->boot_base_address + = PED_BE32_TO_CPU (raw_part->boot_load); + mac_part_data->boot_entry_address + = PED_BE32_TO_CPU (raw_part->boot_entry); + mac_part_data->boot_checksum + = PED_BE32_TO_CPU (raw_part->boot_cksum); + + mac_part_data->status = PED_BE32_TO_CPU (raw_part->status); + mac_part_data->driver_sig = PED_BE32_TO_CPU (raw_part->driver_sig); + + return part; + +error_destroy_part: + ped_partition_destroy (part); +error: + return NULL; +} + +/* looks at the partition map size field in a mac raw partition, and calculates + * what the size of the partition map should be, from it + */ +static int +_rawpart_get_partmap_size (MacRawPartition* raw_part, PedDisk* disk) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + PedSector part_map_start; + PedSector part_map_end; + + part_map_start = mac_disk_data->ghost_size; + part_map_end = PED_BE32_TO_CPU (raw_part->map_count); + + return part_map_end - part_map_start + 1; +} + +static int +_disk_analyse_block_size (PedDisk* disk, MacRawDisk* raw_disk) +{ + PedSector block_size; + + if (PED_BE16_TO_CPU (raw_disk->block_size) % 512) { +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Weird block size on device descriptor: %d bytes is " + "not divisible by 512."), + (int) PED_BE16_TO_CPU (raw_disk->block_size)); +#endif + goto error; + } + + block_size = PED_BE16_TO_CPU (raw_disk->block_size) / 512; + if (block_size != disk->dev->sector_size / 512) { +#ifndef DISCOVER_ONLY + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("The driver descriptor says the physical block size " + "is %d bytes, but Linux says it is %d bytes."), + (int) block_size * 512, + (int) disk->dev->sector_size) + != PED_EXCEPTION_IGNORE) + goto error; +#endif + disk->dev->sector_size = block_size * 512; + } + + return 1; + +error: + return 0; +} + +/* Tries to figure out the block size used by the drivers, for the ghost + * partitioning scheme. Ghost partitioning works like this: the OpenFirmware + * (OF) sees 512 byte blocks, but some drivers use 2048 byte blocks (and, + * perhaps, some other number?). To remain compatible, the partition map + * only has "real" partition map entries on ghost-aligned block numbers (and + * the others are padded with Apple_Void partitions). This function tries + * to figure out what the "ghost-aligned" size is... (which, believe-it-or-not, + * doesn't always equal 2048!!!) + */ +static int +_disk_analyse_ghost_size (PedDisk* disk) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + + void *buf = ped_malloc (disk->dev->sector_size); + if (!buf) + return 0; + + int i; + int found = 0; + for (i = 1; i < 64; i *= 2) { + if (!ped_device_read (disk->dev, buf, i, 1)) + break; + if (_rawpart_check_signature (buf) + && !_rawpart_is_void (buf)) { + mac_disk_data->ghost_size = i; + found = (i <= disk->dev->sector_size / 512); + break; + } + } + free (buf); + +#ifndef DISCOVER_ONLY + if (!found) + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("No valid partition map found.")); +#endif + return found; +} + +static int +mac_read (PedDisk* disk) +{ + MacDiskData* mac_disk_data; + PedPartition* part; + int num; + PedSector ghost_size; + int last_part_entry_num = 0; + + PED_ASSERT (disk != NULL); + + mac_disk_data = disk->disk_specific; + mac_disk_data->part_map_entry_num = 0; /* 0 == none */ + + void *buf; + if (!ptt_read_sector (disk->dev, 0, &buf)) + return 0; + + MacRawDisk *raw_disk = buf; + + if (!_check_signature (raw_disk)) + goto error; + + /* Record the original sector size; this function may change it. */ + PedSector ss0 = disk->dev->sector_size; + if (!_disk_analyse_block_size (disk, raw_disk)) + goto error; + + if (!_disk_analyse_ghost_size (disk)) + goto error; + ghost_size = mac_disk_data->ghost_size; + + if (!ped_disk_delete_all (disk)) + goto error; + + if (PED_BE16_TO_CPU(raw_disk->driver_count) && + PED_BE16_TO_CPU(raw_disk->driver_count) < 62) { + memcpy(&mac_disk_data->driverlist[0], &raw_disk->driverlist[0], + sizeof(mac_disk_data->driverlist)); + mac_disk_data->driver_count = PED_BE16_TO_CPU(raw_disk->driver_count); + mac_disk_data->block_size = PED_BE16_TO_CPU(raw_disk->block_size); + } + + /* If _disk_analyse_block_size has increased the sector_size, + reallocate this buffer, so we can still read a sector into it. */ + if (ss0 < disk->dev->sector_size) { + free (buf); + buf = ped_malloc (disk->dev->sector_size); + if (buf == NULL) + goto error; + } + + for (num=1; num==1 || num <= last_part_entry_num; num++) { + void *raw_part = buf; + if (!ped_device_read (disk->dev, raw_part, + num * ghost_size, 1)) + goto error_delete_all; + + if (!_rawpart_check_signature (raw_part)) + continue; + + if (num == 1) + last_part_entry_num + = _rawpart_get_partmap_size (raw_part, disk); + if (_rawpart_get_partmap_size (raw_part, disk) + != last_part_entry_num) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Conflicting partition map entry sizes! " + "Entry 1 says it is %d, but entry %d says " + "it is %d!"), + last_part_entry_num, + _rawpart_get_partmap_size (raw_part, disk)) + != PED_EXCEPTION_IGNORE) + goto error_delete_all; + } + + if (!_rawpart_is_active (raw_part)) + continue; + + part = _rawpart_analyse (raw_part, disk, num); + if (!part) + goto error_delete_all; + part->num = num; + part->fs_type = ped_file_system_probe (&part->geom); + PedConstraint *constraint_exact + = ped_constraint_exact (&part->geom); + if (constraint_exact == NULL) + goto error_delete_all; + bool ok = ped_disk_add_partition (disk, part, constraint_exact); + ped_constraint_destroy (constraint_exact); + if (!ok) + goto error_delete_all; + + if (_rawpart_is_partition_map (raw_part)) { + if (mac_disk_data->part_map_entry_num + && ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_IGNORE_CANCEL, + _("Weird! There are 2 partitions " + "map entries!")) + != PED_EXCEPTION_IGNORE) + goto error_delete_all; + + mac_disk_data->part_map_entry_num = num; + mac_disk_data->part_map_entry_count + = part->geom.end - ghost_size + 1; + } + } + + if (!mac_disk_data->part_map_entry_num) { + if (!_disk_add_part_map_entry (disk, 1)) + goto error_delete_all; + ped_disk_commit_to_dev (disk); + } + free (buf); + return 1; + +error_delete_all: + ped_disk_delete_all (disk); +error: + free (buf); + return 0; +} + +#ifndef DISCOVER_ONLY +/* The Ghost partition: is a blank entry, used to pad out each block (where + * there physical block size > 512 bytes). This is because OpenFirmware uses + * 512 byte blocks, but device drivers Think Different TM, with a different + * lbock size, so we need to do this to avoid a clash (!) + */ +static int +_pad_raw_part (PedDisk* disk, int num, MacRawPartition* part_map) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + int i; + + size_t ss = disk->dev->sector_size; + void *buf = ped_calloc (ss); + if (!buf) + return 0; + + MacRawPartition *ghost_entry = buf; + ghost_entry->signature = PED_CPU_TO_BE16 (MAC_PARTITION_MAGIC_2); + strcpy (ghost_entry->type, "Apple_Void"); + ghost_entry->map_count + = PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num); + + for (i=0; i < mac_disk_data->ghost_size - 1; i++) { + PedSector idx = i + (num - 1) * mac_disk_data->ghost_size; + memcpy ((char*)part_map + idx * ss, ghost_entry, ss); + } + + free (buf); + return 1; +} + +static void +_update_driver_count (MacRawPartition* part_map_entry, + MacDiskData *mac_driverdata, const MacDiskData* mac_disk_data) +{ + uint16_t i; + uint32_t start_block, block_count; + + start_block = PED_BE32_TO_CPU(part_map_entry->start_block); + block_count = PED_BE32_TO_CPU(part_map_entry->block_count); + + for (i = 0; i < mac_disk_data->driver_count; i++) { + if (start_block == PED_BE32_TO_CPU(mac_disk_data->driverlist[i].block) && + block_count == PED_BE16_TO_CPU(mac_disk_data->driverlist[i].size)) { + uint16_t count_cur = mac_driverdata->driver_count; + mac_driverdata->driverlist[count_cur].block + = mac_disk_data->driverlist[i].block; + mac_driverdata->driverlist[count_cur].size + = mac_disk_data->driverlist[i].size; + mac_driverdata->driverlist[count_cur].type + = mac_disk_data->driverlist[i].type; + mac_driverdata->driver_count++; + break; + } + } +} + +static MacRawPartition * +get_pme (MacRawPartition const *part_map, PedSector i, PedDisk const *disk) +{ + MacDiskData const *mac_disk_data = disk->disk_specific; + PedSector idx = i * mac_disk_data->ghost_size - 1; + return (MacRawPartition *) ((char*)part_map + + idx * disk->dev->sector_size); +} + +/* Initialize the disk->dev->sector_size bytes of part_map[part->num]. */ +static int +_generate_raw_part (PedDisk* disk, PedPartition* part, + MacRawPartition* part_map, MacDiskData *mac_driverdata) +{ + MacDiskData* mac_disk_data; + MacPartitionData* mac_part_data; + + PED_ASSERT (part->num > 0); + + mac_disk_data = disk->disk_specific; + mac_part_data = part->disk_specific; + + MacRawPartition *part_map_entry = get_pme (part_map, part->num, disk); + memset (part_map_entry, 0, disk->dev->sector_size); + + part_map_entry->signature = PED_CPU_TO_BE16 (MAC_PARTITION_MAGIC_2); + part_map_entry->map_count + = PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num); + part_map_entry->start_block = PED_CPU_TO_BE32 (part->geom.start); + part_map_entry->block_count = PED_CPU_TO_BE32 (part->geom.length); + strncpy (part_map_entry->name, mac_part_data->volume_name, 31); + part_map_entry->name[31] = '\0'; + strncpy (part_map_entry->type, mac_part_data->system_name, 31); + part_map_entry->type[31] = '\0'; + + if (mac_part_data->is_driver) { + if (mac_part_data->has_driver) + _update_driver_count(part_map_entry, mac_driverdata, + mac_disk_data); + } else + mac_part_data->data_region_length = part->geom.length; + part_map_entry->data_count = PED_CPU_TO_BE32 ( + mac_part_data->data_region_length); + part_map_entry->boot_count = PED_CPU_TO_BE32 ( + mac_part_data->boot_region_length); + part_map_entry->status = PED_CPU_TO_BE32 (mac_part_data->status); + part_map_entry->driver_sig + = PED_CPU_TO_BE32 (mac_part_data->driver_sig); + + part_map_entry->boot_load = + PED_CPU_TO_BE32 (mac_part_data->boot_base_address); + part_map_entry->boot_entry = + PED_CPU_TO_BE32 (mac_part_data->boot_entry_address); + part_map_entry->boot_cksum = + PED_CPU_TO_BE32 (mac_part_data->boot_checksum); + + strncpy (part_map_entry->processor, mac_part_data->processor_name, 15); + part_map_entry->processor[15] = '\0'; + + if (!_pad_raw_part (disk, part->num, part_map)) + goto error; + + return 1; + +error: + return 0; +} + +static int +_generate_raw_freespace_part (PedDisk* disk, PedGeometry* geom, int num, + MacRawPartition* part_map) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + + PED_ASSERT (num > 0); + + MacRawPartition *part_map_entry = get_pme (part_map, num, disk); + + part_map_entry->signature = PED_CPU_TO_BE16 (MAC_PARTITION_MAGIC_2); + part_map_entry->map_count + = PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num); + part_map_entry->start_block = PED_CPU_TO_BE32 (geom->start); + part_map_entry->block_count = PED_CPU_TO_BE32 (geom->length); + strcpy (part_map_entry->name, "Extra"); + strcpy (part_map_entry->type, "Apple_Free"); + + part_map_entry->data_count = PED_CPU_TO_BE32 (geom->length); + part_map_entry->status = 0; + part_map_entry->driver_sig = 0; + + if (!_pad_raw_part (disk, num, part_map)) + goto error; + + return 1; + +error: + return 0; +} + +static int +_generate_empty_part (PedDisk* disk, int num, MacRawPartition* part_map) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + + PED_ASSERT (num > 0); + + MacRawPartition *part_map_entry = get_pme (part_map, num, disk); + part_map_entry->signature = PED_CPU_TO_BE16 (MAC_PARTITION_MAGIC_2); + part_map_entry->map_count + = PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num); + strcpy (part_map_entry->type, "Apple_Void"); + + return _pad_raw_part (disk, num, part_map); +} + +/* returns the first empty entry in the partition map */ +static int _GL_ATTRIBUTE_PURE +_get_first_empty_part_entry (PedDisk* disk, MacRawPartition* part_map) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + int i; + + for (i=1; i <= mac_disk_data->last_part_entry_num; i++) { + MacRawPartition *part_map_entry = get_pme (part_map, i, disk); + if (!part_map_entry->signature) + return i; + } + + return 0; +} + +static int +write_block_zero (PedDisk* disk, MacDiskData* mac_driverdata) +{ + PedDevice* dev = disk->dev; + void *s0; + if (!ptt_read_sector (dev, 0, &s0)) + return 0; + MacRawDisk *raw_disk = (MacRawDisk *) s0; + + raw_disk->signature = PED_CPU_TO_BE16 (MAC_DISK_MAGIC); + raw_disk->block_size = PED_CPU_TO_BE16 (dev->sector_size); + raw_disk->block_count = PED_CPU_TO_BE32 (dev->length); + + raw_disk->driver_count = PED_CPU_TO_BE16(mac_driverdata->driver_count); + memcpy(&raw_disk->driverlist[0], &mac_driverdata->driverlist[0], + sizeof(raw_disk->driverlist)); + + int write_ok = ped_device_write (dev, raw_disk, 0, 1); + free (s0); + return write_ok; +} + +static int +mac_write (PedDisk* disk) +{ + MacRawPartition* part_map; + MacDiskData* mac_disk_data; + MacDiskData* mac_driverdata; /* updated driver list */ + PedPartition* part; + int num; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->disk_specific != NULL); + PED_ASSERT (disk->dev != NULL); + PED_ASSERT (!disk->update_mode); + + mac_disk_data = disk->disk_specific; + + if (!ped_disk_get_partition (disk, mac_disk_data->part_map_entry_num)) { + if (!_disk_add_part_map_entry (disk, 1)) + goto error; + } + + mac_driverdata = ped_malloc(sizeof(MacDiskData)); + if (!mac_driverdata) + goto error; + memset (mac_driverdata, 0, sizeof(MacDiskData)); + + size_t pmap_bytes = (mac_disk_data->part_map_entry_count + * mac_disk_data->ghost_size + * disk->dev->sector_size); + part_map = (MacRawPartition*) ped_calloc (pmap_bytes); + if (!part_map) + goto error_free_driverdata; + +/* write (to memory) the "real" partitions */ + for (part = ped_disk_next_partition (disk, NULL); part; + part = ped_disk_next_partition (disk, part)) { + if (!ped_partition_is_active (part)) + continue; + if (!_generate_raw_part (disk, part, part_map, mac_driverdata)) + goto error_free_part_map; + } + +/* write the "free space" partitions */ + for (part = ped_disk_next_partition (disk, NULL); part; + part = ped_disk_next_partition (disk, part)) { + if (part->type != PED_PARTITION_FREESPACE) + continue; + num = _get_first_empty_part_entry (disk, part_map); + if (!_generate_raw_freespace_part (disk, &part->geom, num, + part_map)) + goto error_free_part_map; + } + +/* write the "void" (empty) partitions */ + for (num = _get_first_empty_part_entry (disk, part_map); num; + num = _get_first_empty_part_entry (disk, part_map)) + _generate_empty_part (disk, num, part_map); + +/* write to disk */ + if (!ped_device_write (disk->dev, part_map, 1, + mac_disk_data->part_map_entry_count)) + goto error_free_part_map; + free (part_map); + int write_ok = write_block_zero (disk, mac_driverdata); + free (mac_driverdata); + return write_ok; + +error_free_part_map: + free (part_map); +error_free_driverdata: + free (mac_driverdata); +error: + return 0; +} +#endif /* !DISCOVER_ONLY */ + +static PedPartition* +mac_partition_new ( + const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, PedSector start, PedSector end) +{ + PedPartition* part; + MacPartitionData* mac_data; + + part = _ped_partition_alloc (disk, part_type, fs_type, start, end); + if (!part) + goto error; + + if (ped_partition_is_active (part)) { + part->disk_specific + = mac_data = ped_malloc (sizeof (MacPartitionData)); + if (!mac_data) + goto error_free_part; + + memset (mac_data, 0, sizeof (MacPartitionData)); + strcpy (mac_data->volume_name, "untitled"); + } else { + part->disk_specific = NULL; + } + return part; + +error_free_part: + free (part); +error: + return NULL; +} + +static PedPartition* +mac_partition_duplicate (const PedPartition* part) +{ + PedPartition* new_part; + MacPartitionData* new_mac_data; + MacPartitionData* old_mac_data; + + new_part = ped_partition_new (part->disk, part->type, + part->fs_type, part->geom.start, + part->geom.end); + if (!new_part) + return NULL; + new_part->num = part->num; + + old_mac_data = (MacPartitionData*) part->disk_specific; + new_mac_data = (MacPartitionData*) new_part->disk_specific; + + /* ugly, but C is ugly :p */ + memcpy (new_mac_data, old_mac_data, sizeof (MacPartitionData)); + return new_part; +} + +static void +mac_partition_destroy (PedPartition* part) +{ + PED_ASSERT (part != NULL); + + if (ped_partition_is_active (part)) + free (part->disk_specific); + free (part); +} + +static int +mac_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type) +{ + MacPartitionData* mac_data = part->disk_specific; + + part->fs_type = fs_type; + + if (fs_type && is_linux_swap (fs_type->name)) + ped_partition_set_flag (part, PED_PARTITION_SWAP, 1); + + if (mac_data->is_boot) { + strcpy (mac_data->system_name, "Apple_Bootstrap"); + mac_data->status = 0x33; + return 1; + } + + if (fs_type && (!strcmp (fs_type->name, "hfs") + || !strcmp (fs_type->name, "hfs+"))) { + strcpy (mac_data->system_name, "Apple_HFS"); + mac_data->status |= 0x7f; + } else if (fs_type && !strcmp (fs_type->name, "hfsx")) { + strcpy (mac_data->system_name, "Apple_HFSX"); + mac_data->status |= 0x7f; + } else { + strcpy (mac_data->system_name, "Apple_UNIX_SVR2"); + mac_data->status = 0x33; + } + + return 1; +} + +static int +mac_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + MacPartitionData* mac_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + mac_data = part->disk_specific; + + switch (flag) { + case PED_PARTITION_BOOT: + mac_data->is_boot = state; + + if (part->fs_type) + return mac_partition_set_system (part, part->fs_type); + + if (state) { + strcpy (mac_data->system_name, "Apple_Bootstrap"); + mac_data->status = 0x33; + } + return 1; + + case PED_PARTITION_ROOT: + if (state) { + strcpy (mac_data->volume_name, "root"); + mac_data->is_swap = 0; + } else { + if (mac_data->is_root) + strcpy (mac_data->volume_name, "untitled"); + } + mac_data->is_root = state; + return 1; + + case PED_PARTITION_SWAP: + if (state) { + strcpy (mac_data->volume_name, "swap"); + mac_data->is_root = 0; + } else { + if (mac_data->is_swap) + strcpy (mac_data->volume_name, "untitled"); + } + mac_data->is_swap = state; + return 1; + + case PED_PARTITION_LVM: + if (state) { + strcpy (mac_data->system_name, "Linux_LVM"); + mac_data->is_lvm = state; + } else { + if (mac_data->is_lvm) + mac_partition_set_system (part, part->fs_type); + } + return 1; + + case PED_PARTITION_RAID: + if (state) { + strcpy (mac_data->system_name, "Linux_RAID"); + mac_data->is_raid = state; + } else { + if (mac_data->is_raid) + mac_partition_set_system (part, part->fs_type); + } + return 1; + + default: + return 0; + } +} + +static int _GL_ATTRIBUTE_PURE +mac_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + MacPartitionData* mac_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + mac_data = part->disk_specific; + switch (flag) { + case PED_PARTITION_BOOT: + return mac_data->is_boot; + + case PED_PARTITION_ROOT: + return mac_data->is_root; + + case PED_PARTITION_SWAP: + return mac_data->is_swap; + + case PED_PARTITION_LVM: + return mac_data->is_lvm; + + case PED_PARTITION_RAID: + return mac_data->is_raid; + + default: + return 0; + } +} + +static int +mac_partition_is_flag_available ( + const PedPartition* part, PedPartitionFlag flag) +{ + switch (flag) { + case PED_PARTITION_BOOT: + case PED_PARTITION_ROOT: + case PED_PARTITION_SWAP: + case PED_PARTITION_LVM: + case PED_PARTITION_RAID: + return 1; + + default: + return 0; + } +} + +static void +mac_partition_set_name (PedPartition* part, const char* name) +{ + MacPartitionData* mac_data; + int i; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + mac_data = part->disk_specific; + +#ifndef DISCOVER_ONLY + if (mac_data->is_root || mac_data->is_swap) { + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("Changing the name of a root or swap partition " + "will prevent Linux from recognising it as such.")) + != PED_EXCEPTION_IGNORE) + return; + mac_data->is_root = mac_data->is_swap = 0; + } +#endif + + strncpy (mac_data->volume_name, name, 32); + mac_data->volume_name [32] = 0; + for (i = strlen (mac_data->volume_name) - 1; + mac_data->volume_name[i] == ' '; i--) + mac_data->volume_name [i] = 0; +} + +static const char* _GL_ATTRIBUTE_PURE +mac_partition_get_name (const PedPartition* part) +{ + MacPartitionData* mac_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + mac_data = part->disk_specific; + + return mac_data->volume_name; +} + +static PedAlignment* +mac_get_partition_alignment(const PedDisk *disk) +{ + return ped_alignment_new(0, 1); +} + +static PedConstraint* +_primary_constraint (PedDisk* disk) +{ + PedAlignment start_align; + PedAlignment end_align; + PedGeometry max_geom; + + if (!ped_alignment_init (&start_align, 0, 1)) + return NULL; + if (!ped_alignment_init (&end_align, -1, 1)) + return NULL; + if (!ped_geometry_init (&max_geom, disk->dev, 1, disk->dev->length - 1)) + return NULL; + + return ped_constraint_new (&start_align, &end_align, &max_geom, + &max_geom, 1, disk->dev->length); +} + +static int +mac_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + PED_ASSERT (part != NULL); + + if (_ped_partition_attempt_align (part, constraint, + _primary_constraint (part->disk))) + return 1; + +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + return 0; +} + +static int +mac_partition_enumerate (PedPartition* part) +{ + PedDisk* disk; + MacDiskData* mac_disk_data; + int i; + int max_part_count; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + + disk = part->disk; + mac_disk_data = (MacDiskData*) disk->disk_specific; + + max_part_count = ped_disk_get_max_primary_partition_count (disk); + + if (part->num > 0 && part->num <= mac_disk_data->part_map_entry_count) + return 1; + + for (i = 1; i <= max_part_count; i++) { + if (!ped_disk_get_partition (disk, i)) { + part->num = i; + return 1; + } + } + +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Can't add another partition -- the partition map is too " + "small!")); +#endif + + return 0; +} + +static int +_disk_count_partitions (PedDisk* disk) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + PedPartition* part = NULL; + PedPartition* last = NULL; + + PED_ASSERT (disk->update_mode); + + mac_disk_data->active_part_entry_count = 0; + mac_disk_data->free_part_entry_count = 0; + mac_disk_data->last_part_entry_num = 0; + + /* subtle: we only care about free space after the partition map. + * the partition map is an "active" partition, BTW... */ + for (part = ped_disk_next_partition (disk, part); part; + part = ped_disk_next_partition (disk, part)) { + if (!ped_partition_is_active (part)) + continue; + + mac_disk_data->active_part_entry_count++; + if (last && last->geom.end + 1 < part->geom.start) + mac_disk_data->free_part_entry_count++; + mac_disk_data->last_part_entry_num + = PED_MAX (mac_disk_data->last_part_entry_num, + part->num); + + last = part; + } + + if (last && last->geom.end < disk->dev->length - 1) + mac_disk_data->free_part_entry_count++; + + mac_disk_data->last_part_entry_num + = PED_MAX (mac_disk_data->last_part_entry_num, + mac_disk_data->active_part_entry_count + + mac_disk_data->free_part_entry_count); + return 1; +} + +static int +add_metadata_part (PedDisk* disk, PedSector start, PedSector end) +{ + PedPartition* new_part; + PedConstraint* constraint_any = ped_constraint_any (disk->dev); + + PED_ASSERT (disk != NULL); + + new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL, + start, end); + if (!new_part) + goto error; + if (!ped_disk_add_partition (disk, new_part, constraint_any)) + goto error_destroy_new_part; + + ped_constraint_destroy (constraint_any); + return 1; + +error_destroy_new_part: + ped_partition_destroy (new_part); +error: + ped_constraint_destroy (constraint_any); + return 0; +} + +static int +mac_alloc_metadata (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->disk_specific != NULL); + PED_ASSERT (disk->dev != NULL); + + if (!add_metadata_part (disk, 0, 0)) + return 0; + + /* hack: this seems to be a good place, to update the partition map + * entry count, since mac_alloc_metadata() gets called during + * _disk_pop_update_mode() + */ + return _disk_count_partitions (disk); +} + +static int +mac_get_max_primary_partition_count (const PedDisk* disk) +{ + MacDiskData* mac_disk_data = disk->disk_specific; + PedPartition* part_map_partition; + + part_map_partition = ped_disk_get_partition (disk, + mac_disk_data->part_map_entry_num); + + /* HACK: if we haven't found the partition map partition (yet), + * we return this. + */ + if (!part_map_partition) { + mac_disk_data->part_map_entry_num = 0; + return 65536; + } + + /* HACK: since Mac labels need an entry for free-space regions, we + * must allow half plus 1 entries for free-space partitions. I hate + * this, but things get REALLY complicated, otherwise. + * (I'm prepared to complicate things later, but I want to get + * everything working, first) + */ + return mac_disk_data->part_map_entry_count / mac_disk_data->ghost_size + - mac_disk_data->free_part_entry_count + 1; +} + +static bool +mac_get_max_supported_partition_count (const PedDisk* disk, int *max_n) +{ + *max_n = 65536; + return true; +} + +#include "pt-common.h" +PT_define_limit_functions (mac) + +static PedDiskOps mac_disk_ops = { + clobber: NULL, + /* FIXME: remove this cast, once mac_write is fixed not to + modify its *DISK parameter. */ + write: NULL_IF_DISCOVER_ONLY ((int (*) (const PedDisk*)) mac_write), + + partition_set_name: mac_partition_set_name, + partition_get_name: mac_partition_get_name, + + get_partition_alignment: mac_get_partition_alignment, + + PT_op_function_initializers (mac) +}; + +static PedDiskType mac_disk_type = { + next: NULL, + name: "mac", + ops: &mac_disk_ops, + features: PED_DISK_TYPE_PARTITION_NAME +}; + +void +ped_disk_mac_init () +{ + PED_ASSERT (sizeof (MacRawPartition) == 512); + PED_ASSERT (sizeof (MacRawDisk) == 512); + + ped_disk_type_register (&mac_disk_type); +} + +void +ped_disk_mac_done () +{ + ped_disk_type_unregister (&mac_disk_type); +} diff --git a/jni/parted/libparted/labels/misc.h b/jni/parted/libparted/labels/misc.h new file mode 100755 index 0000000..7c11388 --- /dev/null +++ b/jni/parted/libparted/labels/misc.h @@ -0,0 +1,48 @@ +/* -*- Mode: c; indent-tabs-mode: nil -*- + + libparted - a library for manipulating disk partitions + Copyright (C) 2007, 2009-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#include +#include + +/* hack: use the ext2 uuid library to generate a reasonably random (hopefully + * with /dev/random) number. Unfortunately, we can only use 4 bytes of it. + * We make sure to avoid returning zero which may be interpreted as no FAT + * serial number or no MBR signature. + */ +static inline uint32_t +generate_random_uint32 (void) +{ + union { + uuid_t uuid; + uint32_t i; + } uu32; + + uuid_generate (uu32.uuid); + + return uu32.i > 0 ? uu32.i : 0xffffffff; +} + +/* Return nonzero if FS_TYPE_NAME starts with "linux-swap". + This must match the NUL-terminated "linux-swap" as well + as "linux-swap(v0)" and "linux-swap(v1)". */ +static inline int +is_linux_swap (char const *fs_type_name) +{ + char const *prefix = "linux-swap"; + return strncmp (fs_type_name, prefix, strlen (prefix)) == 0; +} diff --git a/jni/parted/libparted/labels/pc98.c b/jni/parted/libparted/labels/pc98.c new file mode 100755 index 0000000..cfa3ba4 --- /dev/null +++ b/jni/parted/libparted/labels/pc98.c @@ -0,0 +1,813 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2000-2001, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include +#include + +#include "pt-tools.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +/* hacked from Linux/98 source: fs/partitions/nec98.h + * + * See also: + * http://people.FreeBSD.org/~kato/pc98.html + * http://www.kmc.kyoto-u.ac.jp/proj/linux98/index-english.html + * + * Partition types: + * + * id0(mid): + * bit 7: 1=bootable, 0=not bootable + * # Linux uses this flag to make a distinction between ext2 and swap. + * bit 6--0: + * 00H : N88-BASIC(data)?, PC-UX(data)? + * 04H : PC-UX(data) + * 06H : N88-BASIC + * 10H : N88-BASIC + * 14H : *BSD, PC-UX + * 20H : DOS(data), Windows95/98/NT, Linux + * 21H..2FH : DOS(system#1 .. system#15) + * 40H : Minix + * + * id1(sid): + * bit 7: 1=active, 0=sleep(hidden) + * # PC-UX uses this flag to make a distinction between its file system + * # and its swap. + * bit 6--0: + * 01H: FAT12 + * 11H: FAT16, <32MB [accessible to DOS 3.3] + * 21H: FAT16, >=32MB [Large Partition] + * 31H: NTFS + * 28H: Windows NT (Volume/Stripe Set?) + * 41H: Windows NT (Volume/Stripe Set?) + * 48H: Windows NT (Volume/Stripe Set?) + * 61H: FAT32 + * 04H: PC-UX + * 06H: N88-BASIC + * 44H: *BSD + * 62H: ext2, linux-swap + */ + +#define MAX_PART_COUNT 16 +#define PC9800_EXTFMT_MAGIC 0xAA55 + +#define BIT(x) (1 << (x)) +#define GET_BIT(n,bit) (((n) & BIT(bit)) != 0) +#define SET_BIT(n,bit,val) n = (val)? (n | BIT(bit)) : (n & ~BIT(bit)) + +typedef struct _PC98RawPartition PC98RawPartition; +typedef struct _PC98RawTable PC98RawTable; + +/* ripped from Linux/98 source */ +struct _PC98RawPartition { + uint8_t mid; /* 0x80 - boot */ + uint8_t sid; /* 0x80 - active */ + uint8_t dum1; /* dummy for padding */ + uint8_t dum2; /* dummy for padding */ + uint8_t ipl_sect; /* IPL sector */ + uint8_t ipl_head; /* IPL head */ + uint16_t ipl_cyl; /* IPL cylinder */ + uint8_t sector; /* starting sector */ + uint8_t head; /* starting head */ + uint16_t cyl; /* starting cylinder */ + uint8_t end_sector; /* end sector */ + uint8_t end_head; /* end head */ + uint16_t end_cyl; /* end cylinder */ + char name[16]; +} __attribute__((packed)); + +struct _PC98RawTable { + uint8_t boot_code [510]; + uint16_t magic; + PC98RawPartition partitions [MAX_PART_COUNT]; +} __attribute__((packed)); + +typedef struct { + PedSector ipl_sector; + int system; + int boot; + int hidden; + char name [17]; +} PC98PartitionData; + +/* this MBR boot code is dummy */ +static const char MBR_BOOT_CODE[] = { + 0xcb, /* retf */ + 0x00, 0x00, 0x00, /* */ + 0x49, 0x50, 0x4c, 0x31 /* "IPL1" */ +}; + +static PedDiskType pc98_disk_type; + +static PedSector chs_to_sector (const PedDevice* dev, int c, int h, int s); +static void sector_to_chs (const PedDevice* dev, PedSector sector, + int* c, int* h, int* s); + +/* magic(?) check */ +static int +pc98_check_magic (const PC98RawTable *part_table) +{ + /* check "extended-format" (have partition table?) */ + if (PED_LE16_TO_CPU(part_table->magic) != PC9800_EXTFMT_MAGIC) + return 0; + + return 1; +} + +static int +pc98_check_ipl_signature (const PC98RawTable *part_table) +{ + if (memcmp (part_table->boot_code + 4, "IPL1", 4) == 0) + return 1; + else if (memcmp (part_table->boot_code + 4, "Linux 98", 8) == 0) + return 1; + else if (memcmp (part_table->boot_code + 4, "GRUB/98 ", 8) == 0) + return 1; + else + return 0; +} + +static int +pc98_probe (const PedDevice *dev) +{ + PC98RawTable part_table; + + PED_ASSERT (dev != NULL); + + if (dev->sector_size != 512) + return 0; + + if (!ped_device_read (dev, &part_table, 0, 2)) + return 0; + + /* check magic */ + if (!pc98_check_magic (&part_table)) + return 0; + + /* check for boot loader signatures */ + return pc98_check_ipl_signature (&part_table); +} + +static PedDisk* +pc98_alloc (const PedDevice* dev) +{ + PED_ASSERT (dev != NULL); + + return _ped_disk_alloc (dev, &pc98_disk_type); +} + +static PedDisk* +pc98_duplicate (const PedDisk* disk) +{ + return ped_disk_new_fresh (disk->dev, &pc98_disk_type); +} + +static void +pc98_free (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + + _ped_disk_free (disk); +} + +static PedSector _GL_ATTRIBUTE_PURE +chs_to_sector (const PedDevice* dev, int c, int h, int s) +{ + PED_ASSERT (dev != NULL); + return (c * dev->hw_geom.heads + h) * dev->hw_geom.sectors + s; +} + +static void +sector_to_chs (const PedDevice* dev, PedSector sector, int* c, int* h, int* s) +{ + PedSector cyl_size; + + PED_ASSERT (dev != NULL); + PED_ASSERT (c != NULL); + PED_ASSERT (h != NULL); + PED_ASSERT (s != NULL); + + cyl_size = dev->hw_geom.heads * dev->hw_geom.sectors; + + *c = sector / cyl_size; + *h = (sector) % cyl_size / dev->hw_geom.sectors; + *s = (sector) % cyl_size % dev->hw_geom.sectors; +} + +static PedSector _GL_ATTRIBUTE_PURE +legacy_start (const PedDisk* disk, const PC98RawPartition* raw_part) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (raw_part != NULL); + + return chs_to_sector (disk->dev, PED_LE16_TO_CPU(raw_part->cyl), + raw_part->head, raw_part->sector); +} + +static PedSector _GL_ATTRIBUTE_PURE +legacy_end (const PedDisk* disk, const PC98RawPartition* raw_part) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (raw_part != NULL); + + if (raw_part->end_head == 0 && raw_part->end_sector == 0) { + return chs_to_sector (disk->dev, + PED_LE16_TO_CPU(raw_part->end_cyl), + disk->dev->hw_geom.heads - 1, + disk->dev->hw_geom.sectors - 1); + } else { + return chs_to_sector (disk->dev, + PED_LE16_TO_CPU(raw_part->end_cyl), + raw_part->end_head, + raw_part->end_sector); + } +} + +static int +is_unused_partition(const PC98RawPartition* raw_part) +{ + if (raw_part->mid || raw_part->sid + || raw_part->ipl_sect + || raw_part->ipl_head + || PED_LE16_TO_CPU(raw_part->ipl_cyl) + || raw_part->sector + || raw_part->head + || PED_LE16_TO_CPU(raw_part->cyl) + || raw_part->end_sector + || raw_part->end_head + || PED_LE16_TO_CPU(raw_part->end_cyl)) + return 0; + return 1; +} + +static int +read_table (PedDisk* disk) +{ + int i; + PC98RawTable table; + PedConstraint* constraint_any; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + constraint_any = ped_constraint_any (disk->dev); + + if (!ped_device_read (disk->dev, (void*) &table, 0, 2)) + goto error; + + if (!pc98_check_magic(&table)) { + if (ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_IGNORE_CANCEL, + _("Invalid partition table on %s."), + disk->dev->path)) + goto error; + } + + for (i = 0; i < MAX_PART_COUNT; i++) { + PC98RawPartition* raw_part; + PedPartition* part; + PC98PartitionData* pc98_data; + PedSector part_start; + PedSector part_end; + + raw_part = &table.partitions [i]; + + if (is_unused_partition(raw_part)) + continue; + + part_start = legacy_start (disk, raw_part); + part_end = legacy_end (disk, raw_part); + + part = ped_partition_new (disk, PED_PARTITION_NORMAL, + NULL, part_start, part_end); + if (!part) + goto error; + pc98_data = part->disk_specific; + PED_ASSERT (pc98_data != NULL); + + pc98_data->system = (raw_part->mid << 8) | raw_part->sid; + pc98_data->boot = GET_BIT(raw_part->mid, 7); + pc98_data->hidden = !GET_BIT(raw_part->sid, 7); + + ped_partition_set_name (part, raw_part->name); + + pc98_data->ipl_sector = chs_to_sector ( + disk->dev, + PED_LE16_TO_CPU(raw_part->ipl_cyl), + raw_part->ipl_head, + raw_part->ipl_sect); + + /* hack */ + if (pc98_data->ipl_sector == part->geom.start) + pc98_data->ipl_sector = 0; + + part->num = i + 1; + + if (!ped_disk_add_partition (disk, part, constraint_any)) + goto error; + + if (part->geom.start != part_start + || part->geom.end != part_end) { + ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Partition %d isn't aligned to cylinder " + "boundaries. This is still unsupported."), + part->num); + goto error; + } + + part->fs_type = ped_file_system_probe (&part->geom); + } + + ped_constraint_destroy (constraint_any); + return 1; + +error: + ped_disk_delete_all (disk); + ped_constraint_destroy (constraint_any); + return 0; +} + +static int +pc98_read (PedDisk* disk) +{ + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + ped_disk_delete_all (disk); + return read_table (disk); +} + +#ifndef DISCOVER_ONLY +static int +fill_raw_part (PC98RawPartition* raw_part, const PedPartition* part) +{ + PC98PartitionData* pc98_data; + int c, h, s; + const char* name; + + PED_ASSERT (raw_part != NULL); + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + pc98_data = part->disk_specific; + raw_part->mid = (pc98_data->system >> 8) & 0xFF; + raw_part->sid = pc98_data->system & 0xFF; + + SET_BIT(raw_part->mid, 7, pc98_data->boot); + SET_BIT(raw_part->sid, 7, !pc98_data->hidden); + + memset (raw_part->name, ' ', sizeof(raw_part->name)); + name = ped_partition_get_name (part); + PED_ASSERT (name != NULL); + PED_ASSERT (strlen (name) <= 16); + if (!strlen (name) && part->fs_type) + name = part->fs_type->name; + memcpy (raw_part->name, name, strlen (name)); + + sector_to_chs (part->disk->dev, part->geom.start, &c, &h, &s); + raw_part->cyl = PED_CPU_TO_LE16(c); + raw_part->head = h; + raw_part->sector = s; + + if (pc98_data->ipl_sector) { + sector_to_chs (part->disk->dev, pc98_data->ipl_sector, + &c, &h, &s); + raw_part->ipl_cyl = PED_CPU_TO_LE16(c); + raw_part->ipl_head = h; + raw_part->ipl_sect = s; + } else { + raw_part->ipl_cyl = raw_part->cyl; + raw_part->ipl_head = raw_part->head; + raw_part->ipl_sect = raw_part->sector; + } + + sector_to_chs (part->disk->dev, part->geom.end, &c, &h, &s); + if (h != part->disk->dev->hw_geom.heads - 1 + || s != part->disk->dev->hw_geom.sectors - 1) { + ped_exception_throw ( + PED_EXCEPTION_NO_FEATURE, + PED_EXCEPTION_CANCEL, + _("Partition %d isn't aligned to cylinder " + "boundaries. This is still unsupported."), + part->num); + return 0; + } + raw_part->end_cyl = PED_CPU_TO_LE16(c); + raw_part->end_head = 0; + raw_part->end_sector = 0; + + return 1; +} + +static int +pc98_write (const PedDisk* disk) +{ + PedPartition* part; + int i; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + void *s0; + if (!ptt_read_sectors (disk->dev, 0, 2, &s0)) + return 0; + PC98RawTable *table = s0; + + if (!pc98_check_ipl_signature (table)) { + memset (table->boot_code, 0, sizeof(table->boot_code)); + memcpy (table->boot_code, MBR_BOOT_CODE, sizeof(MBR_BOOT_CODE)); + } + + memset (table->partitions, 0, sizeof (table->partitions)); + table->magic = PED_CPU_TO_LE16(PC9800_EXTFMT_MAGIC); + + for (i = 1; i <= MAX_PART_COUNT; i++) { + part = ped_disk_get_partition (disk, i); + if (!part) + continue; + + if (!fill_raw_part (&table->partitions [i - 1], part)) + return 0; + } + + int write_ok = ped_device_write (disk->dev, table, 0, 2); + free (s0); + if (!write_ok) + return 0; + return ped_device_sync (disk->dev); +} +#endif /* !DISCOVER_ONLY */ + +static PedPartition* +pc98_partition_new ( + const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, PedSector start, PedSector end) +{ + PedPartition* part; + PC98PartitionData* pc98_data; + + part = _ped_partition_alloc (disk, part_type, fs_type, start, end); + if (!part) + goto error; + + if (ped_partition_is_active (part)) { + part->disk_specific + = pc98_data = ped_malloc (sizeof (PC98PartitionData)); + if (!pc98_data) + goto error_free_part; + pc98_data->ipl_sector = 0; + pc98_data->hidden = 0; + pc98_data->boot = 0; + strcpy (pc98_data->name, ""); + } else { + part->disk_specific = NULL; + } + return part; + +error_free_part: + free (part); +error: + return 0; +} + +static PedPartition* +pc98_partition_duplicate (const PedPartition* part) +{ + PedPartition* new_part; + PC98PartitionData* new_pc98_data; + PC98PartitionData* old_pc98_data; + + new_part = ped_partition_new (part->disk, part->type, + part->fs_type, part->geom.start, + part->geom.end); + if (!new_part) + return NULL; + new_part->num = part->num; + + old_pc98_data = (PC98PartitionData*) part->disk_specific; + new_pc98_data = (PC98PartitionData*) new_part->disk_specific; + + /* ugly, but C is ugly :p */ + memcpy (new_pc98_data, old_pc98_data, sizeof (PC98PartitionData)); + return new_part; +} + +static void +pc98_partition_destroy (PedPartition* part) +{ + PED_ASSERT (part != NULL); + + if (ped_partition_is_active (part)) + free (part->disk_specific); + free (part); +} + +static int +pc98_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type) +{ + PC98PartitionData* pc98_data = part->disk_specific; + + part->fs_type = fs_type; + + pc98_data->system = 0x2062; + if (fs_type) { + if (!strcmp (fs_type->name, "fat16")) { + if (part->geom.length * 512 >= 32 * 1024 * 1024) + pc98_data->system = 0x2021; + else + pc98_data->system = 0x2011; + } else if (!strcmp (fs_type->name, "fat32")) { + pc98_data->system = 0x2061; + } else if (!strcmp (fs_type->name, "ntfs")) { + pc98_data->system = 0x2031; + } else if (!strncmp (fs_type->name, "ufs", 3)) { + pc98_data->system = 0x2044; + } else { /* ext2, reiser, xfs, etc. */ + /* ext2 partitions must be marked boot */ + pc98_data->boot = 1; + pc98_data->system = 0xa062; + } + } + + if (pc98_data->boot) + pc98_data->system |= 0x8000; + if (!pc98_data->hidden) + pc98_data->system |= 0x0080; + return 1; +} + +static int +pc98_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + PC98PartitionData* pc98_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + pc98_data = part->disk_specific; + + switch (flag) { + case PED_PARTITION_HIDDEN: + pc98_data->hidden = state; + return ped_partition_set_system (part, part->fs_type); + + case PED_PARTITION_BOOT: + pc98_data->boot = state; + return ped_partition_set_system (part, part->fs_type); + + default: + return 0; + } +} + +static int _GL_ATTRIBUTE_PURE +pc98_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + PC98PartitionData* pc98_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + pc98_data = part->disk_specific; + switch (flag) { + case PED_PARTITION_HIDDEN: + return pc98_data->hidden; + + case PED_PARTITION_BOOT: + return pc98_data->boot; + + default: + return 0; + } +} + +static int +pc98_partition_is_flag_available ( + const PedPartition* part, PedPartitionFlag flag) +{ + switch (flag) { + case PED_PARTITION_HIDDEN: + case PED_PARTITION_BOOT: + return 1; + + default: + return 0; + } +} + +static void +pc98_partition_set_name (PedPartition* part, const char* name) +{ + PC98PartitionData* pc98_data; + int i; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + pc98_data = part->disk_specific; + + strncpy (pc98_data->name, name, 16); + pc98_data->name [16] = 0; + for (i = strlen (pc98_data->name) - 1; pc98_data->name[i] == ' '; i--) + pc98_data->name [i] = 0; +} + +static const char* _GL_ATTRIBUTE_PURE +pc98_partition_get_name (const PedPartition* part) +{ + PC98PartitionData* pc98_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + pc98_data = part->disk_specific; + + return pc98_data->name; +} + +static PedAlignment* +pc98_get_partition_alignment(const PedDisk *disk) +{ + PedSector cylinder_size = + disk->dev->hw_geom.sectors * disk->dev->hw_geom.heads; + + return ped_alignment_new(0, cylinder_size); +} + +static PedConstraint* +_primary_constraint (PedDisk* disk) +{ + PedDevice* dev = disk->dev; + PedAlignment start_align; + PedAlignment end_align; + PedGeometry max_geom; + PedSector cylinder_size; + + cylinder_size = dev->hw_geom.sectors * dev->hw_geom.heads; + + if (!ped_alignment_init (&start_align, 0, cylinder_size)) + return NULL; + if (!ped_alignment_init (&end_align, -1, cylinder_size)) + return NULL; + if (!ped_geometry_init (&max_geom, dev, cylinder_size, + dev->length - cylinder_size)) + return NULL; + + return ped_constraint_new (&start_align, &end_align, &max_geom, + &max_geom, 1, dev->length); +} + +static int +pc98_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + PED_ASSERT (part != NULL); + + if (_ped_partition_attempt_align (part, constraint, + _primary_constraint (part->disk))) + return 1; + +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + return 0; +} + +static int +next_primary (PedDisk* disk) +{ + int i; + for (i=1; i<=MAX_PART_COUNT; i++) { + if (!ped_disk_get_partition (disk, i)) + return i; + } + return 0; +} + +static int +pc98_partition_enumerate (PedPartition* part) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + + /* don't re-number a partition */ + if (part->num != -1) + return 1; + + PED_ASSERT (ped_partition_is_active (part)); + + part->num = next_primary (part->disk); + if (!part->num) { + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Can't add another partition.")); + return 0; + } + + return 1; +} + +static int +pc98_alloc_metadata (PedDisk* disk) +{ + PedPartition* new_part; + PedConstraint* constraint_any = NULL; + PedSector cyl_size; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + constraint_any = ped_constraint_any (disk->dev); + + cyl_size = disk->dev->hw_geom.sectors * disk->dev->hw_geom.heads; + new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL, + 0, cyl_size - 1); + if (!new_part) + goto error; + + if (!ped_disk_add_partition (disk, new_part, constraint_any)) { + ped_partition_destroy (new_part); + goto error; + } + + ped_constraint_destroy (constraint_any); + return 1; + +error: + ped_constraint_destroy (constraint_any); + return 0; +} + +static int +pc98_get_max_primary_partition_count (const PedDisk* disk) +{ + return MAX_PART_COUNT; +} + +static bool +pc98_get_max_supported_partition_count (const PedDisk* disk, int *max_n) +{ + *max_n = MAX_PART_COUNT; + return true; +} + +#include "pt-common.h" +PT_define_limit_functions (pc98) + +static PedDiskOps pc98_disk_ops = { + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (pc98_write), + + partition_set_name: pc98_partition_set_name, + partition_get_name: pc98_partition_get_name, + + get_partition_alignment: pc98_get_partition_alignment, + + PT_op_function_initializers (pc98) +}; + +static PedDiskType pc98_disk_type = { + next: NULL, + name: "pc98", + ops: &pc98_disk_ops, + features: PED_DISK_TYPE_PARTITION_NAME +}; + +void +ped_disk_pc98_init () +{ + PED_ASSERT (sizeof (PC98RawTable) == 512 * 2); + ped_disk_type_register (&pc98_disk_type); +} + +void +ped_disk_pc98_done () +{ + ped_disk_type_unregister (&pc98_disk_type); +} diff --git a/jni/parted/libparted/labels/pt-common.h b/jni/parted/libparted/labels/pt-common.h new file mode 100755 index 0000000..76f06e3 --- /dev/null +++ b/jni/parted/libparted/labels/pt-common.h @@ -0,0 +1,55 @@ +/* Factor some of the duplication out of *.c. */ + +#ifdef DISCOVER_ONLY +# define NULL_IF_DISCOVER_ONLY(val) NULL +#else +# define NULL_IF_DISCOVER_ONLY(val) val +#endif + +#define PT_define_limit_functions(PT_type) \ + \ +static bool \ +PT_type##_partition_check (const PedPartition *part) \ +{ \ + return ptt_partition_max_start_len (#PT_type, part); \ +} \ + \ +static PedSector \ +PT_type##_partition_max_start_sector (void) \ +{ \ + PedSector max; \ + int err = ptt_partition_max_start_sector (#PT_type, &max); \ + PED_ASSERT (err == 0); \ + return max; \ +} \ + \ +static PedSector \ +PT_type##_partition_max_length (void) \ +{ \ + PedSector max; \ + int err = ptt_partition_max_length (#PT_type, &max); \ + PED_ASSERT (err == 0); \ + return max; \ +} + +#define PT_op_function_initializers(PT_type) \ +probe: PT_type##_probe, \ +alloc: PT_type##_alloc, \ +duplicate: PT_type##_duplicate, \ +free: PT_type##_free, \ +read: PT_type##_read, \ +partition_new: PT_type##_partition_new, \ +partition_duplicate: PT_type##_partition_duplicate, \ +partition_set_flag: PT_type##_partition_set_flag, \ +partition_get_flag: PT_type##_partition_get_flag, \ +partition_set_system: PT_type##_partition_set_system, \ +partition_is_flag_available: PT_type##_partition_is_flag_available, \ +partition_align: PT_type##_partition_align, \ +partition_destroy: PT_type##_partition_destroy, \ +partition_enumerate: PT_type##_partition_enumerate, \ +alloc_metadata: PT_type##_alloc_metadata, \ +get_max_primary_partition_count: PT_type##_get_max_primary_partition_count, \ +get_max_supported_partition_count:PT_type##_get_max_supported_partition_count,\ +partition_check: PT_type##_partition_check, \ +max_length: PT_type##_partition_max_length, \ +max_start_sector: PT_type##_partition_max_start_sector diff --git a/jni/parted/libparted/labels/pt-limit.c b/jni/parted/libparted/labels/pt-limit.c new file mode 100755 index 0000000..20cfd42 --- /dev/null +++ b/jni/parted/libparted/labels/pt-limit.c @@ -0,0 +1,163 @@ +/* ANSI-C code produced by gperf version 3.1 */ +/* Command-line: /data/data/com.termux/files/usr/bin/gperf -C -N pt_limit_lookup -n -t -s 6 -k '*' --language=ANSI-C pt-limit.gperf */ + +#include + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "pt-limit.gperf" +struct partition_limit +{ + char const *name; + uint64_t max_start_sector; + uint64_t max_length; +}; + +#define TOTAL_KEYWORDS 11 +#define MIN_WORD_LENGTH 3 +#define MAX_WORD_LENGTH 5 +#define MIN_HASH_VALUE 5 +#define MAX_HASH_VALUE 55 +/* maximum key range = 51, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +hash (register const char *str, register size_t len) +{ + static const unsigned char asso_values[] = + { + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 10, 5, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 5, 40, 40, + 5, 56, 56, 5, 20, 0, 56, 56, 15, 0, + 15, 10, 0, 56, 0, 5, 0, 10, 15, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56 + }; + register unsigned int hval = 0; + + switch (len) + { + default: + hval += asso_values[(unsigned char)str[4]]; + /*FALLTHROUGH*/ + case 4: + hval += asso_values[(unsigned char)str[3]]; + /*FALLTHROUGH*/ + case 3: + hval += asso_values[(unsigned char)str[2]]; + /*FALLTHROUGH*/ + case 2: + hval += asso_values[(unsigned char)str[1]]; + /*FALLTHROUGH*/ + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval; +} + +const struct partition_limit * +pt_limit_lookup (register const char *str, register size_t len) +{ + static const struct partition_limit wordlist[] = + { + {""}, {""}, {""}, {""}, {""}, +#line 10 "pt-limit.gperf" + {"gpt",UINT64_MAX,UINT64_MAX}, + {""}, {""}, {""}, {""}, +#line 28 "pt-limit.gperf" + {"atari",INT32_MAX,INT32_MAX}, + {""}, {""}, {""}, {""}, +#line 27 "pt-limit.gperf" + {"amiga",UINT32_MAX,UINT32_MAX}, + {""}, {""}, {""}, {""}, +#line 8 "pt-limit.gperf" + {"dasd",UINT32_MAX,UINT32_MAX}, + {""}, {""}, {""}, {""}, +#line 12 "pt-limit.gperf" + {"msdos",UINT32_MAX,UINT32_MAX}, + {""}, {""}, {""}, {""}, +#line 18 "pt-limit.gperf" + {"sun",128ULL*UINT32_MAX,UINT32_MAX}, + {""}, {""}, {""}, {""}, +#line 23 "pt-limit.gperf" + {"loop",UINT64_MAX,UINT64_MAX}, + {""}, {""}, {""}, {""}, +#line 9 "pt-limit.gperf" + {"dvh",UINT32_MAX,UINT32_MAX}, + {""}, {""}, {""}, {""}, +#line 11 "pt-limit.gperf" + {"mac",UINT32_MAX,UINT32_MAX}, + {""}, {""}, {""}, {""}, +#line 20 "pt-limit.gperf" + {"bsd",UINT32_MAX,UINT32_MAX}, + {""}, {""}, {""}, {""}, +#line 24 "pt-limit.gperf" + {"pc98",UINT32_MAX,UINT32_MAX} + }; + + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register unsigned int key = hash (str, len); + + if (key <= MAX_HASH_VALUE) + { + register const char *s = wordlist[key].name; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &wordlist[key]; + } + } + return 0; +} diff --git a/jni/parted/libparted/labels/pt-tools.c b/jni/parted/libparted/labels/pt-tools.c new file mode 100755 index 0000000..add4c45 --- /dev/null +++ b/jni/parted/libparted/labels/pt-tools.c @@ -0,0 +1,186 @@ +/* partition table tools + Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#include + +#include +#include + +#include +#include + +#include "pt-tools.h" + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +static char zero[16 * 1024]; + +/* Write a single sector to DISK, filling the first BUFLEN + bytes of that sector with data from BUF, and NUL-filling + any remaining bytes. Return nonzero to indicate success, + zero otherwise. */ +int +ptt_write_sector (PedDisk const *disk, void const *buf, size_t buflen) +{ + PED_ASSERT (buflen <= disk->dev->sector_size); + /* Allocate a big enough buffer for ped_device_write. */ + char *s0 = ped_malloc (disk->dev->sector_size); + if (s0 == NULL) + return 0; + /* Copy boot_code into the first part. */ + memcpy (s0, buf, buflen); + char *p = s0 + buflen; + /* Fill the rest with zeros. */ + memset (p, 0, disk->dev->sector_size - buflen); + int write_ok = ped_device_write (disk->dev, s0, 0, 1); + free (s0); + + return write_ok; +} + +/* Read N sectors, starting with sector SECTOR_NUM (which has length + DEV->sector_size) into malloc'd storage. If the read fails, free + the memory and return zero without modifying *BUF. Otherwise, set + *BUF to the new buffer and return 1. */ +int +ptt_read_sectors (PedDevice const *dev, PedSector start_sector, + PedSector n_sectors, void **buf) +{ + char *b = ped_malloc (n_sectors * dev->sector_size); + PED_ASSERT (b != NULL); + if (!ped_device_read (dev, b, start_sector, n_sectors)) { + free (b); + return 0; + } + *buf = b; + return 1; +} + +/* Read sector, SECTOR_NUM (which has length DEV->sector_size) into malloc'd + storage. If the read fails, free the memory and return zero without + modifying *BUF. Otherwise, set *BUF to the new buffer and return 1. */ +int +ptt_read_sector (PedDevice const *dev, PedSector sector_num, void **buf) +{ + return ptt_read_sectors (dev, sector_num, 1, buf); +} + +/* Zero N sectors of DEV, starting with START. + Return nonzero to indicate success, zero otherwise. */ +int +ptt_clear_sectors (PedDevice *dev, PedSector start, PedSector n) +{ + PED_ASSERT (dev->sector_size <= sizeof zero); + PedSector n_z_sectors = sizeof zero / dev->sector_size; + PedSector n_full = n / n_z_sectors; + PedSector i; + for (i = 0; i < n_full; i++) + { + if (!ped_device_write (dev, zero, start + n_z_sectors * i, n_z_sectors)) + return 0; + } + + PedSector rem = n - n_z_sectors * i; + return (rem == 0 + ? 1 : ped_device_write (dev, zero, start + n_z_sectors * i, rem)); +} + +/* Zero N sectors of GEOM->dev, starting with GEOM->start + START. + Return nonzero to indicate success, zero otherwise. */ +int +ptt_geom_clear_sectors (PedGeometry *geom, PedSector start, PedSector n) +{ + return ptt_clear_sectors (geom->dev, geom->start + start, n); +} + +#define pt_limit_lookup _GL_ATTRIBUTE_PURE __pt_limit_lookup +#include "pt-limit.c" + +/* Throw an exception and return 0 if PART's starting sector number or + its length is greater than the maximum allowed value for LABEL_TYPE. + Otherwise, return 1. */ +int +ptt_partition_max_start_len (char const *pt_type, const PedPartition *part) +{ + struct partition_limit const *pt_lim + = __pt_limit_lookup (pt_type, strlen (pt_type)); + + /* If we don't have info on the type, return "true". */ + if (pt_lim == NULL) + return 1; + + /* If the length in sectors exceeds the limit, you lose. */ + if (part->geom.length > pt_lim->max_length) + { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("partition length of %jd sectors exceeds" + " the %s-partition-table-imposed maximum" + " of %jd"), + part->geom.length, + pt_type, + pt_lim->max_length); + return 0; + } + + /* If the starting sector exceeds the limit, you lose. */ + if (part->geom.start > pt_lim->max_start_sector) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("starting sector number, %jd exceeds" + " the %s-partition-table-imposed maximum" + " of %jd"), + part->geom.start, + pt_type, + pt_lim->max_start_sector); + return 0; + } + + return 1; +} + +/* Set *MAX to the largest representation-imposed starting sector number + of a partition of type PT_TYPE and return 0. If PT_TYPE is not + recognized, return -1. */ +int +ptt_partition_max_start_sector (char const *pt_type, PedSector *max) +{ + struct partition_limit const *pt_lim + = __pt_limit_lookup (pt_type, strlen (pt_type)); + if (pt_lim == NULL) + return -1; + + *max = pt_lim->max_start_sector; + return 0; +} + +/* Set *MAX to the maximum representable length of a partition of type + PT_TYPE and return 0. If PT_TYPE is not recognized, return -1. */ +int +ptt_partition_max_length (char const *pt_type, PedSector *max) +{ + struct partition_limit const *pt_lim + = __pt_limit_lookup (pt_type, strlen (pt_type)); + if (pt_lim == NULL) + return -1; + + *max = pt_lim->max_length; + return 0; +} diff --git a/jni/parted/libparted/labels/pt-tools.h b/jni/parted/libparted/labels/pt-tools.h new file mode 100755 index 0000000..34562f7 --- /dev/null +++ b/jni/parted/libparted/labels/pt-tools.h @@ -0,0 +1,31 @@ +/* libparted - a library for manipulating disk partitions + Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . */ + +#include +#include + +int ptt_write_sector (PedDisk const *disk, void const *buf, size_t buflen); +int ptt_read_sector (PedDevice const *dev, PedSector sector_num, void **buf); +int ptt_read_sectors (PedDevice const *dev, PedSector start_sector, + PedSector n_sectors, void **buf); +int ptt_clear_sectors (PedDevice *dev, PedSector start, PedSector count); +int ptt_geom_clear_sectors (PedGeometry *geom, PedSector start, + PedSector count); +int ptt_partition_max_start_len (char const *label_type, + const PedPartition *part); + +int ptt_partition_max_start_sector (char const *pt_type, PedSector *max); +int ptt_partition_max_length (char const *pt_type, PedSector *max); diff --git a/jni/parted/libparted/labels/rdb.c b/jni/parted/libparted/labels/rdb.c new file mode 100755 index 0000000..499d385 --- /dev/null +++ b/jni/parted/libparted/labels/rdb.c @@ -0,0 +1,1167 @@ +/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + + libparted - a library for manipulating disk partitions + disk_amiga.c - libparted module to manipulate amiga RDB partition tables. + Copyright (C) 2000-2001, 2004, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . + + Contributor: Sven Luther +*/ + +#include + +#include +#include +#include + +#include "pt-tools.h" + +#ifndef MAX +# define MAX(a,b) ((a) < (b) ? (b) : (a)) +#endif + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "misc.h" + +/* String manipulation */ +static void _amiga_set_bstr (const char *cstr, char *bstr, int maxsize) { + int size = strlen (cstr); + int i; + + if (size >= maxsize) return; + bstr[0] = size; + for (i = 0; i"; + default : + return ""; + } +} + +struct AmigaIds { + uint32_t ID; + struct AmigaIds *next; +}; + +static struct AmigaIds * +_amiga_add_id (uint32_t id, struct AmigaIds *ids) { + struct AmigaIds *newid; + + if ((newid=ped_malloc(sizeof (struct AmigaIds)))==NULL) + return 0; + newid->ID = id; + newid->next = ids; + return newid; +} + +static void +_amiga_free_ids (struct AmigaIds *ids) { + struct AmigaIds *current, *next; + + for (current = ids; current != NULL; current = next) { + next = current->next; + free (current); + } +} +static int _GL_ATTRIBUTE_PURE +_amiga_id_in_list (uint32_t id, struct AmigaIds *ids) { + struct AmigaIds *current; + + for (current = ids; current != NULL; current = current->next) { + if (id == current->ID) + return 1; + } + return 0; +} + +struct AmigaBlock { + uint32_t amiga_ID; /* Identifier 32 bit word */ + uint32_t amiga_SummedLongss; /* Size of the structure for checksums */ + int32_t amiga_ChkSum; /* Checksum of the structure */ +}; +#define AMIGA(pos) ((struct AmigaBlock *)(pos)) + +static int +_amiga_checksum (struct AmigaBlock *blk) { + uint32_t *rdb = (uint32_t *) blk; + uint32_t sum; + int i, end; + + sum = PED_BE32_TO_CPU (rdb[0]); + end = PED_BE32_TO_CPU (rdb[1]); + + if (end > PED_SECTOR_SIZE_DEFAULT) end = PED_SECTOR_SIZE_DEFAULT; + + for (i = 1; i < end; i++) sum += PED_BE32_TO_CPU (rdb[i]); + + return sum; +} + +static void +_amiga_calculate_checksum (struct AmigaBlock *blk) { + blk->amiga_ChkSum = PED_CPU_TO_BE32( + PED_BE32_TO_CPU(blk->amiga_ChkSum) - + _amiga_checksum((struct AmigaBlock *) blk)); + return; +} + +static struct AmigaBlock * +_amiga_read_block (const PedDevice *dev, struct AmigaBlock *blk, + PedSector block, struct AmigaIds *ids) +{ + if (!ped_device_read (dev, blk, block, 1)) + return NULL; + if (ids && !_amiga_id_in_list(PED_BE32_TO_CPU(blk->amiga_ID), ids)) + return NULL; + if (_amiga_checksum (blk) != 0) { + switch (ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE | PED_EXCEPTION_CANCEL, + _("%s : Bad checksum on block %llu of type %s."), + __func__, block, _amiga_block_id(PED_BE32_TO_CPU(blk->amiga_ID)))) + { + case PED_EXCEPTION_CANCEL : + return NULL; + case PED_EXCEPTION_FIX : + _amiga_calculate_checksum(AMIGA(blk)); + if (!ped_device_write ((PedDevice*)dev, blk, block, 1)) + return NULL; + /* FALLTHROUGH */ + case PED_EXCEPTION_IGNORE : + case PED_EXCEPTION_UNHANDLED : + default : + return blk; + } + } + return blk; +} + +struct RigidDiskBlock { + uint32_t rdb_ID; /* Identifier 32 bit word : 'RDSK' */ + uint32_t rdb_SummedLongs; /* Size of the structure for checksums */ + int32_t rdb_ChkSum; /* Checksum of the structure */ + uint32_t rdb_HostID; /* SCSI Target ID of host, not really used */ + uint32_t rdb_BlockBytes; /* Size of disk blocks */ + uint32_t rdb_Flags; /* RDB Flags */ + /* block list heads */ + uint32_t rdb_BadBlockList; /* Bad block list */ + uint32_t rdb_PartitionList; /* Partition list */ + uint32_t rdb_FileSysHeaderList; /* File system header list */ + uint32_t rdb_DriveInit; /* Drive specific init code */ + uint32_t rdb_BootBlockList; /* Amiga OS 4 Boot Blocks */ + uint32_t rdb_Reserved1[5]; /* Unused word, need to be set to $ffffffff */ + /* physical drive characteristics */ + uint32_t rdb_Cylinders; /* Number of the cylinders of the drive */ + uint32_t rdb_Sectors; /* Number of sectors of the drive */ + uint32_t rdb_Heads; /* Number of heads of the drive */ + uint32_t rdb_Interleave; /* Interleave */ + uint32_t rdb_Park; /* Head parking cylinder */ + uint32_t rdb_Reserved2[3]; /* Unused word, need to be set to $ffffffff */ + uint32_t rdb_WritePreComp; /* Starting cylinder of write precompensation */ + uint32_t rdb_ReducedWrite; /* Starting cylinder of reduced write current */ + uint32_t rdb_StepRate; /* Step rate of the drive */ + uint32_t rdb_Reserved3[5]; /* Unused word, need to be set to $ffffffff */ + /* logical drive characteristics */ + uint32_t rdb_RDBBlocksLo; /* low block of range reserved for hardblocks */ + uint32_t rdb_RDBBlocksHi; /* high block of range for these hardblocks */ + uint32_t rdb_LoCylinder; /* low cylinder of partitionable disk area */ + uint32_t rdb_HiCylinder; /* high cylinder of partitionable data area */ + uint32_t rdb_CylBlocks; /* number of blocks available per cylinder */ + uint32_t rdb_AutoParkSeconds; /* zero for no auto park */ + uint32_t rdb_HighRDSKBlock; /* highest block used by RDSK */ + /* (not including replacement bad blocks) */ + uint32_t rdb_Reserved4; + /* drive identification */ + char rdb_DiskVendor[8]; + char rdb_DiskProduct[16]; + char rdb_DiskRevision[4]; + char rdb_ControllerVendor[8]; + char rdb_ControllerProduct[16]; + char rdb_ControllerRevision[4]; + uint32_t rdb_Reserved5[10]; +}; + +#define RDSK(pos) ((struct RigidDiskBlock *)(pos)) + +#define AMIGA_RDB_NOT_FOUND ((uint32_t)0xffffffff) +#define RDB_LOCATION_LIMIT 16 +#define AMIGA_MAX_PARTITIONS 128 +#define MAX_RDB_BLOCK (RDB_LOCATION_LIMIT + 2 * AMIGA_MAX_PARTITIONS + 2) + +static uint32_t +_amiga_find_rdb (const PedDevice *dev, struct RigidDiskBlock *rdb) { + int i; + struct AmigaIds *ids; + + ids = _amiga_add_id (IDNAME_RIGIDDISK, NULL); + + for (i = 0; irdb_ID) == IDNAME_RIGIDDISK) { + _amiga_free_ids (ids); + return i; + } + } + _amiga_free_ids (ids); + return AMIGA_RDB_NOT_FOUND; +} + +struct PartitionBlock { + uint32_t pb_ID; /* Identifier 32 bit word : 'PART' */ + uint32_t pb_SummedLongs; /* Size of the structure for checksums */ + int32_t pb_ChkSum; /* Checksum of the structure */ + uint32_t pb_HostID; /* SCSI Target ID of host, not really used */ + uint32_t pb_Next; /* Block number of the next PartitionBlock */ + uint32_t pb_Flags; /* Part Flags (NOMOUNT and BOOTABLE) */ + uint32_t pb_Reserved1[2]; + uint32_t pb_DevFlags; /* Preferred flags for OpenDevice */ + char pb_DriveName[32]; /* Preferred DOS device name: BSTR form */ + uint32_t pb_Reserved2[15]; + uint32_t de_TableSize; /* Size of Environment vector */ + /* Size of the blocks in 32 bit words, usually 128 */ + uint32_t de_SizeBlock; + uint32_t de_SecOrg; /* Not used; must be 0 */ + uint32_t de_Surfaces; /* Number of heads (surfaces) */ + /* Disk sectors per block, used with SizeBlock, usually 1 */ + uint32_t de_SectorPerBlock; + uint32_t de_BlocksPerTrack; /* Blocks per track. drive specific */ + uint32_t de_Reserved; /* DOS reserved blocks at start of partition. */ + uint32_t de_PreAlloc; /* DOS reserved blocks at end of partition */ + uint32_t de_Interleave; /* Not used, usually 0 */ + uint32_t de_LowCyl; /* First cylinder of the partition */ + uint32_t de_HighCyl; /* Last cylinder of the partition */ + uint32_t de_NumBuffers; /* Initial # DOS of buffers. */ + uint32_t de_BufMemType; /* Type of mem to allocate for buffers */ + uint32_t de_MaxTransfer; /* Max number of bytes to transfer at a time */ + uint32_t de_Mask; /* Address Mask to block out certain memory */ + int32_t de_BootPri; /* Boot priority for autoboot */ + uint32_t de_DosType; /* Dostype of the file system */ + uint32_t de_Baud; /* Baud rate for serial handler */ + uint32_t de_Control; /* Control word for handler/filesystem */ + uint32_t de_BootBlocks; /* Number of blocks containing boot code */ + uint32_t pb_EReserved[12]; +}; + +#define PART(pos) ((struct PartitionBlock *)(pos)) + +#define PBFB_BOOTABLE 0 /* this partition is intended to be bootable */ +#define PBFF_BOOTABLE 1L /* (expected directories and files exist) */ +#define PBFB_NOMOUNT 1 /* do not mount this partition (e.g. manually */ +#define PBFF_NOMOUNT 2L /* mounted, but space reserved here) */ +#define PBFB_RAID 2 /* this partition is intended to be part of */ +#define PBFF_RAID 4L /* a RAID array */ +#define PBFB_LVM 3 /* this partition is intended to be part of */ +#define PBFF_LVM 8L /* a LVM volume group */ + + +struct LinkedBlock { + uint32_t lk_ID; /* Identifier 32 bit word */ + uint32_t lk_SummedLongs; /* Size of the structure for checksums */ + int32_t lk_ChkSum; /* Checksum of the structure */ + uint32_t pb_HostID; /* SCSI Target ID of host, not really used */ + uint32_t lk_Next; /* Block number of the next PartitionBlock */ +}; +struct Linked2Block { + uint32_t lk2_ID; /* Identifier 32 bit word */ + uint32_t lk2_SummedLongs; /* Size of the structure for checksums */ + int32_t lk2_ChkSum; /* Checksum of the structure */ + uint32_t lk2_HostID; /* SCSI Target ID of host, not really used */ + uint32_t lk2_Next; /* Block number of the next PartitionBlock */ + uint32_t lk2_Reverved[13]; + uint32_t lk2_Linked; /* Secondary linked list */ +}; +#define LINK_END (uint32_t)0xffffffff +#define LNK(pos) ((struct LinkedBlock *)(pos)) +#define LNK2(pos) ((struct Linked2Block *)(pos)) + + +static PedDiskType amiga_disk_type; + +static int +amiga_probe (const PedDevice *dev) +{ + struct RigidDiskBlock *rdb; + uint32_t found; + PED_ASSERT(dev != NULL); + + if ((rdb=RDSK(ped_malloc(dev->sector_size)))==NULL) + return 0; + found = _amiga_find_rdb (dev, rdb); + free (rdb); + + return (found == AMIGA_RDB_NOT_FOUND ? 0 : 1); +} + +static PedDisk* +amiga_alloc (const PedDevice* dev) +{ + PedDisk *disk; + struct RigidDiskBlock *rdb; + PedSector cyl_size; + int highest_cylinder, highest_block; + + PED_ASSERT(dev != NULL); + cyl_size = dev->hw_geom.sectors * dev->hw_geom.heads; + + if (!(disk = _ped_disk_alloc (dev, &amiga_disk_type))) + return NULL; + + if (!(disk->disk_specific = ped_malloc (disk->dev->sector_size))) { + free (disk); + return NULL; + } + rdb = disk->disk_specific; + + /* Upon failed assertion this does leak. That's fine, because + if the assertion fails, you have bigger problems than this leak. */ + PED_ASSERT(sizeof(*rdb) <= disk->dev->sector_size); + + memset(rdb, 0, disk->dev->sector_size); + + rdb->rdb_ID = PED_CPU_TO_BE32 (IDNAME_RIGIDDISK); + rdb->rdb_SummedLongs = PED_CPU_TO_BE32 (64); + rdb->rdb_HostID = PED_CPU_TO_BE32 (0); + rdb->rdb_BlockBytes = PED_CPU_TO_BE32 (disk->dev->sector_size); + rdb->rdb_Flags = PED_CPU_TO_BE32 (0); + + /* Block lists */ + rdb->rdb_BadBlockList = PED_CPU_TO_BE32 (LINK_END); + rdb->rdb_PartitionList = PED_CPU_TO_BE32 (LINK_END); + rdb->rdb_FileSysHeaderList = PED_CPU_TO_BE32 (LINK_END); + rdb->rdb_DriveInit = PED_CPU_TO_BE32 (LINK_END); + rdb->rdb_BootBlockList = PED_CPU_TO_BE32 (LINK_END); + + /* Physical drive characteristics */ + rdb->rdb_Cylinders = PED_CPU_TO_BE32 (dev->hw_geom.cylinders); + rdb->rdb_Sectors = PED_CPU_TO_BE32 (dev->hw_geom.sectors); + rdb->rdb_Heads = PED_CPU_TO_BE32 (dev->hw_geom.heads); + rdb->rdb_Interleave = PED_CPU_TO_BE32 (0); + rdb->rdb_Park = PED_CPU_TO_BE32 (dev->hw_geom.cylinders); + rdb->rdb_WritePreComp = PED_CPU_TO_BE32 (dev->hw_geom.cylinders); + rdb->rdb_ReducedWrite = PED_CPU_TO_BE32 (dev->hw_geom.cylinders); + rdb->rdb_StepRate = PED_CPU_TO_BE32 (0); + + highest_cylinder = 1 + MAX_RDB_BLOCK / cyl_size; + highest_block = highest_cylinder * cyl_size - 1; + + /* Logical driver characteristics */ + rdb->rdb_RDBBlocksLo = PED_CPU_TO_BE32 (0); + rdb->rdb_RDBBlocksHi = PED_CPU_TO_BE32 (highest_block); + rdb->rdb_LoCylinder = PED_CPU_TO_BE32 (highest_cylinder); + rdb->rdb_HiCylinder = PED_CPU_TO_BE32 (dev->hw_geom.cylinders -1); + rdb->rdb_CylBlocks = PED_CPU_TO_BE32 (cyl_size); + rdb->rdb_AutoParkSeconds = PED_CPU_TO_BE32 (0); + /* rdb_HighRDSKBlock will only be set when writing */ + rdb->rdb_HighRDSKBlock = PED_CPU_TO_BE32 (0); + + /* Driver identification */ + _amiga_set_bstr("", rdb->rdb_DiskVendor, 8); + _amiga_set_bstr(dev->model, rdb->rdb_DiskProduct, 16); + _amiga_set_bstr("", rdb->rdb_DiskRevision, 4); + _amiga_set_bstr("", rdb->rdb_ControllerVendor, 8); + _amiga_set_bstr("", rdb->rdb_ControllerProduct, 16); + _amiga_set_bstr("", rdb->rdb_ControllerRevision, 4); + + /* And calculate the checksum */ + _amiga_calculate_checksum ((struct AmigaBlock *) rdb); + + return disk; +} + +static PedDisk* +amiga_duplicate (const PedDisk* disk) +{ + PedDisk* new_disk; + struct RigidDiskBlock * new_rdb; + struct RigidDiskBlock * old_rdb; + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->dev != NULL); + PED_ASSERT(disk->disk_specific != NULL); + + old_rdb = (struct RigidDiskBlock *) disk->disk_specific; + + if (!(new_disk = ped_disk_new_fresh (disk->dev, &amiga_disk_type))) + return NULL; + + new_rdb = (struct RigidDiskBlock *) new_disk->disk_specific; + memcpy (new_rdb, old_rdb, 256); + return new_disk; +} + +static void +amiga_free (PedDisk* disk) +{ + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->disk_specific != NULL); + + free (disk->disk_specific); + _ped_disk_free (disk); +} + +static int +_amiga_loop_check (uint32_t block, uint32_t * blocklist, uint32_t max) +{ + uint32_t i; + + for (i = 0; i < max; i++) + if (block == blocklist[i]) { + /* We are looping, let's stop. */ + return 1; + } + blocklist[max] = block; + return 0; +} + +/* We have already allocated a rdb, we are now reading it from the disk */ +static int +amiga_read (PedDisk* disk) +{ + struct RigidDiskBlock *rdb; + struct PartitionBlock *partition; + uint32_t partblock; + uint32_t partlist[AMIGA_MAX_PARTITIONS]; + PedSector cylblocks; + int i; + + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->dev != NULL); + PED_ASSERT(disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0); + PED_ASSERT(disk->disk_specific != NULL); + rdb = RDSK(disk->disk_specific); + + if (_amiga_find_rdb (disk->dev, rdb) == AMIGA_RDB_NOT_FOUND) { + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s : Didn't find rdb block, should never happen."), __func__); + return 0; + } + + /* Let's copy the rdb read geometry to the dev */ + /* FIXME: should this go into disk->dev->bios_geom instead? */ + disk->dev->hw_geom.cylinders = PED_BE32_TO_CPU (rdb->rdb_Cylinders); + disk->dev->hw_geom.heads = PED_BE32_TO_CPU (rdb->rdb_Heads); + disk->dev->hw_geom.sectors = PED_BE32_TO_CPU (rdb->rdb_Sectors); + cylblocks = (PedSector) PED_BE32_TO_CPU (rdb->rdb_Heads) * + (PedSector) PED_BE32_TO_CPU (rdb->rdb_Sectors); + + /* Remove all partitions in the former in memory table */ + ped_disk_delete_all (disk); + + /* Let's allocate a partition block */ + if (!(partition = ped_malloc (disk->dev->sector_size))) + return 0; + + /* We initialize the hardblock free list to detect loops */ + for (i = 0; i < AMIGA_MAX_PARTITIONS; i++) partlist[i] = LINK_END; + + for (i = 1, partblock = PED_BE32_TO_CPU(rdb->rdb_PartitionList); + i < AMIGA_MAX_PARTITIONS && partblock != LINK_END; + i++, partblock = PED_BE32_TO_CPU(partition->pb_Next)) + { + PedPartition *part; + PedSector start, end; + + /* Let's look for loops in the partition table */ + if (_amiga_loop_check(partblock, partlist, i)) { + break; + } + + /* Let's allocate and read a partition block to get its geometry*/ + if (!_amiga_read_block (disk->dev, AMIGA(partition), + (PedSector)partblock, NULL)) { + free(partition); + return 0; + } + + start = ((PedSector) PED_BE32_TO_CPU (partition->de_LowCyl)) + * cylblocks; + end = (((PedSector) PED_BE32_TO_CPU (partition->de_HighCyl)) + + 1) * cylblocks - 1; + + /* We can now construct a new partition */ + if (!(part = ped_partition_new (disk, PED_PARTITION_NORMAL, + NULL, start, end))) { + free(partition); + return 0; + } + /* And copy over the partition block */ + memcpy(part->disk_specific, partition, 256); + + part->num = i; + part->type = 0; + /* Let's probe what file system is present on the disk */ + part->fs_type = ped_file_system_probe (&part->geom); + + PedConstraint *constraint_exact + = ped_constraint_exact (&part->geom); + if (constraint_exact == NULL) + return 0; + bool ok = ped_disk_add_partition (disk, part, constraint_exact); + ped_constraint_destroy (constraint_exact); + if (!ok) { + ped_partition_destroy(part); + free(partition); + return 0; + } + } + free(partition); + return 1; +} + +static int +_amiga_find_free_blocks(const PedDisk *disk, uint32_t *table, + struct LinkedBlock *block, uint32_t first, uint32_t type) +{ + PedSector next; + + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->dev != NULL); + + for (next = first; next != LINK_END; next = PED_BE32_TO_CPU(block->lk_Next)) { + if (table[next] != IDNAME_FREE) { + switch (ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE | PED_EXCEPTION_CANCEL, + _("%s : Loop detected at block %d."), __func__, next)) + { + case PED_EXCEPTION_CANCEL : + return 0; + case PED_EXCEPTION_FIX : + /* TODO : Need to add fixing code */ + case PED_EXCEPTION_IGNORE : + case PED_EXCEPTION_UNHANDLED : + default : + return 1; + } + } + + if (!_amiga_read_block (disk->dev, AMIGA(block), next, NULL)) { + return 0; + } + if (PED_BE32_TO_CPU(block->lk_ID) != type) { + switch (ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s : The %s list seems bad at block %s."), + __func__, _amiga_block_id(PED_BE32_TO_CPU(block->lk_ID)), next)) + { + /* TODO : to more subtile things here */ + case PED_EXCEPTION_CANCEL : + case PED_EXCEPTION_UNHANDLED : + default : + return 0; + } + } + table[next] = type; + if (PED_BE32_TO_CPU(block->lk_ID) == IDNAME_FILESYSHEADER) { + if (_amiga_find_free_blocks(disk, table, block, + PED_BE32_TO_CPU(LNK2(block)->lk2_Linked), + IDNAME_LOADSEG) == 0) return 0; + } + } + return 1; +} +static uint32_t _GL_ATTRIBUTE_PURE +_amiga_next_free_block(uint32_t *table, uint32_t start, uint32_t type) { + int i; + + for (i = start; table[i] != type && table[i] != IDNAME_FREE; i++); + return i; +} +static PedPartition * _GL_ATTRIBUTE_PURE +_amiga_next_real_partition(const PedDisk *disk, PedPartition *part) { + PedPartition *next; + + for (next = ped_disk_next_partition (disk, part); + next != NULL && !ped_partition_is_active (next); + next = ped_disk_next_partition (disk, next)); + return next; +} +#ifndef DISCOVER_ONLY +static int +amiga_write (const PedDisk* disk) +{ + struct RigidDiskBlock *rdb; + struct LinkedBlock *block; + struct PartitionBlock *partition; + PedPartition *part, *next_part; + PedSector cylblocks, first_hb, last_hb; + uint32_t * table; + uint32_t i; + uint32_t rdb_num, part_num, block_num, next_num; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + PED_ASSERT (disk->disk_specific != NULL); + + if (!(rdb = ped_malloc (disk->dev->sector_size))) + return 0; + + /* Let's read the rdb */ + if ((rdb_num = _amiga_find_rdb (disk->dev, rdb)) == AMIGA_RDB_NOT_FOUND) { + rdb_num = 2; + size_t pb_size = sizeof (struct PartitionBlock); + /* Initialize only the part that won't be copied over + with a partition block in amiga_read. */ + memset ((char *)(RDSK(disk->disk_specific)) + pb_size, + 0, PED_SECTOR_SIZE_DEFAULT - pb_size); + } else { + memcpy (RDSK(disk->disk_specific), rdb, disk->dev->sector_size); + } + free (rdb); + rdb = RDSK(disk->disk_specific); + + cylblocks = (PedSector) PED_BE32_TO_CPU (rdb->rdb_Heads) * + (PedSector) PED_BE32_TO_CPU (rdb->rdb_Sectors); + first_hb = (PedSector) PED_BE32_TO_CPU (rdb->rdb_RDBBlocksLo); + last_hb = (PedSector) PED_BE32_TO_CPU (rdb->rdb_RDBBlocksHi); + + /* Allocate a free block table and initialize it. + There must be room for at least RDB_NUM + 2 entries, since + the first RDB_NUM+1 entries get IDNAME_RIGIDDISK, and the + following one must have LINK_END to serve as sentinel. */ + size_t tab_size = 2 + MAX (last_hb - first_hb, rdb_num); + if (!(table = ped_malloc (tab_size * sizeof *table))) + return 0; + + for (i = 0; i <= rdb_num; i++) + table[i] = IDNAME_RIGIDDISK; + for ( ; i < tab_size; i++) + table[i] = LINK_END; + + /* Let's allocate a partition block */ + if (!(block = ped_malloc (disk->dev->sector_size))) { + free (table); + return 0; + } + + /* And fill the free block table */ + if (_amiga_find_free_blocks(disk, table, block, + PED_BE32_TO_CPU (rdb->rdb_BadBlockList), IDNAME_BADBLOCK) == 0) + { + ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s : Failed to list bad blocks."), __func__); + goto error_free_table; + } + if (_amiga_find_free_blocks(disk, table, block, + PED_BE32_TO_CPU (rdb->rdb_PartitionList), IDNAME_PARTITION) == 0) + { + ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s : Failed to list partition blocks."), __func__); + goto error_free_table; + } + if (_amiga_find_free_blocks(disk, table, block, + PED_BE32_TO_CPU (rdb->rdb_FileSysHeaderList), IDNAME_FILESYSHEADER) == 0) + { + ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s : Failed to list file system blocks."), __func__); + goto error_free_table; + } + if (_amiga_find_free_blocks(disk, table, block, + PED_BE32_TO_CPU (rdb->rdb_BootBlockList), IDNAME_BOOT) == 0) + { + ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("%s : Failed to list boot blocks."), __func__); + goto error_free_table; + } + + block_num = part_num = _amiga_next_free_block(table, rdb_num+1, + IDNAME_PARTITION); + part = _amiga_next_real_partition(disk, NULL); + rdb->rdb_PartitionList = PED_CPU_TO_BE32(part ? part_num : LINK_END); + for (; part != NULL; part = next_part, block_num = next_num) { + PED_ASSERT(part->disk_specific != NULL); + PED_ASSERT(part->geom.start % cylblocks == 0); + PED_ASSERT((part->geom.end + 1) % cylblocks == 0); + + next_part = _amiga_next_real_partition(disk, part); + next_num = _amiga_next_free_block(table, block_num+1, IDNAME_PARTITION); + + partition = PART(part->disk_specific); + if (next_part == NULL) + partition->pb_Next = PED_CPU_TO_BE32(LINK_END); + else + partition->pb_Next = PED_CPU_TO_BE32(next_num); + partition->de_LowCyl = PED_CPU_TO_BE32(part->geom.start/cylblocks); + partition->de_HighCyl = PED_CPU_TO_BE32((part->geom.end+1)/cylblocks-1); + _amiga_calculate_checksum(AMIGA(partition)); + if (!ped_device_write (disk->dev, (void*) partition, block_num, 1)) { + ped_exception_throw(PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Failed to write partition block at %d."), + block_num); + goto error_free_table; + /* WARNING : If we fail here, we stop everything, + * and the partition table is lost. A better + * solution should be found, using the second + * half of the hardblocks to not overwrite the + * old partition table. It becomes problematic + * if we use more than half of the hardblocks. */ + } + } + + if (block_num > PED_BE32_TO_CPU (rdb->rdb_HighRDSKBlock)) + rdb->rdb_HighRDSKBlock = PED_CPU_TO_BE32(block_num); + + _amiga_calculate_checksum(AMIGA(rdb)); + if (!ped_device_write (disk->dev, (void*) disk->disk_specific, rdb_num, 1)) + goto error_free_table; + + free (table); + free (block); + return ped_device_sync (disk->dev); + +error_free_table: + free (table); + free (block); + return 0; +} +#endif /* !DISCOVER_ONLY */ + +static PedPartition* +amiga_partition_new (const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + PedPartition *part; + PedDevice *dev; + PedSector cyl; + struct PartitionBlock *partition; + struct RigidDiskBlock *rdb; + + PED_ASSERT(disk != NULL); + PED_ASSERT(disk->dev != NULL); + PED_ASSERT(disk->disk_specific != NULL); + dev = disk->dev; + cyl = (PedSector) (dev->hw_geom.sectors * dev->hw_geom.heads); + rdb = RDSK(disk->disk_specific); + + if (!(part = _ped_partition_alloc (disk, part_type, fs_type, start, end))) + return NULL; + + if (ped_partition_is_active (part)) { + if (!(part->disk_specific = ped_malloc (disk->dev->sector_size))) { + free (part); + return NULL; + } + partition = PART(part->disk_specific); + memset(partition, 0, sizeof(struct PartitionBlock)); + + partition->pb_ID = PED_CPU_TO_BE32(IDNAME_PARTITION); + partition->pb_SummedLongs = PED_CPU_TO_BE32(64); + partition->pb_HostID = rdb->rdb_HostID; + partition->pb_Flags = PED_CPU_TO_BE32(0); + /* TODO : use a scheme including the device name and the + * partition number, if it is possible */ + _amiga_set_bstr("dhx", partition->pb_DriveName, 32); + + partition->de_TableSize = PED_CPU_TO_BE32(19); + partition->de_SizeBlock = PED_CPU_TO_BE32(128); + partition->de_SecOrg = PED_CPU_TO_BE32(0); + partition->de_Surfaces = PED_CPU_TO_BE32(dev->hw_geom.heads); + partition->de_SectorPerBlock = PED_CPU_TO_BE32(1); + partition->de_BlocksPerTrack + = PED_CPU_TO_BE32(dev->hw_geom.sectors); + partition->de_Reserved = PED_CPU_TO_BE32(2); + partition->de_PreAlloc = PED_CPU_TO_BE32(0); + partition->de_Interleave = PED_CPU_TO_BE32(0); + partition->de_LowCyl = PED_CPU_TO_BE32(start/cyl); + partition->de_HighCyl = PED_CPU_TO_BE32((end+1)/cyl-1); + partition->de_NumBuffers = PED_CPU_TO_BE32(30); + partition->de_BufMemType = PED_CPU_TO_BE32(0); + partition->de_MaxTransfer = PED_CPU_TO_BE32(0x7fffffff); + partition->de_Mask = PED_CPU_TO_BE32(0xffffffff); + partition->de_BootPri = PED_CPU_TO_BE32(0); + partition->de_DosType = PED_CPU_TO_BE32(0x4c4e5800); + partition->de_Baud = PED_CPU_TO_BE32(0); + partition->de_Control = PED_CPU_TO_BE32(0); + partition->de_BootBlocks = PED_CPU_TO_BE32(0); + + } else { + part->disk_specific = NULL; + } + return part; +} + +static PedPartition* +amiga_partition_duplicate (const PedPartition* part) +{ + PedPartition *new_part; + struct PartitionBlock *new_amiga_part; + struct PartitionBlock *old_amiga_part; + + PED_ASSERT(part != NULL); + PED_ASSERT(part->disk != NULL); + PED_ASSERT(part->disk_specific != NULL); + old_amiga_part = (struct PartitionBlock *) part->disk_specific; + + new_part = ped_partition_new (part->disk, part->type, + part->fs_type, part->geom.start, + part->geom.end); + if (!new_part) + return NULL; + + new_amiga_part = (struct PartitionBlock *) new_part->disk_specific; + memcpy (new_amiga_part, old_amiga_part, 256); + + return new_part; +} + +static void +amiga_partition_destroy (PedPartition* part) +{ + PED_ASSERT (part != NULL); + + if (ped_partition_is_active (part)) { + PED_ASSERT (part->disk_specific != NULL); + free (part->disk_specific); + } + _ped_partition_free (part); +} + +static int +amiga_partition_set_system (PedPartition* part, + const PedFileSystemType* fs_type) +{ + struct PartitionBlock *partition; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + partition = PART(part->disk_specific); + + part->fs_type = fs_type; + + if (!fs_type) + partition->de_DosType = PED_CPU_TO_BE32(0x4c4e5800); /* 'LNX\0' */ + else if (!strcmp (fs_type->name, "ext2")) + partition->de_DosType = PED_CPU_TO_BE32(0x4c4e5800); /* 'LNX\0' */ + else if (!strcmp (fs_type->name, "ext3")) + partition->de_DosType = PED_CPU_TO_BE32(0x45585403); /* 'EXT\3' */ + else if (is_linux_swap (fs_type->name)) + partition->de_DosType = PED_CPU_TO_BE32(0x53575000); /* 'SWP\0' */ + else if (!strcmp (fs_type->name, "fat16")) + partition->de_DosType = PED_CPU_TO_BE32(0x46415400); /* 'FAT\0' */ + else if (!strcmp (fs_type->name, "fat32")) + partition->de_DosType = PED_CPU_TO_BE32(0x46415401); /* 'FAT\1'*/ + else if (!strcmp (fs_type->name, "hfs")) + partition->de_DosType = PED_CPU_TO_BE32(0x48465300); /* 'HFS\0' */ + else if (!strcmp (fs_type->name, "jfs")) + partition->de_DosType = PED_CPU_TO_BE32(0x4a465300); /* 'JFS\0' */ + else if (!strcmp (fs_type->name, "ntfs")) + partition->de_DosType = PED_CPU_TO_BE32(0x4e544653); /* 'NTFS' */ + else if (!strcmp (fs_type->name, "reiserfs")) + partition->de_DosType = PED_CPU_TO_BE32(0x52465300); /* 'RFS\0' */ + else if (!strcmp (fs_type->name, "sun-ufs")) + partition->de_DosType = PED_CPU_TO_BE32(0x53554653); /* 'SUFS' */ + else if (!strcmp (fs_type->name, "hp-ufs")) + partition->de_DosType = PED_CPU_TO_BE32(0x48554653); /* 'HUFS' */ + else if (!strcmp (fs_type->name, "xfs")) + partition->de_DosType = PED_CPU_TO_BE32(0x58465300); /* 'XFS\0' */ + else + partition->de_DosType = PED_CPU_TO_BE32(0x00000000); /* unknown */ + return 1; +} + +static int +amiga_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + struct PartitionBlock *partition; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + partition = PART(part->disk_specific); + + switch (flag) { + case PED_PARTITION_BOOT: + if (state) partition->pb_Flags |= PED_CPU_TO_BE32(PBFF_BOOTABLE); + else partition->pb_Flags &= ~(PED_CPU_TO_BE32(PBFF_BOOTABLE)); + return 1; + case PED_PARTITION_HIDDEN: + if (state) partition->pb_Flags |= PED_CPU_TO_BE32(PBFF_NOMOUNT); + else partition->pb_Flags &= ~(PED_CPU_TO_BE32(PBFF_NOMOUNT)); + return 1; + case PED_PARTITION_RAID: + if (state) partition->pb_Flags |= PED_CPU_TO_BE32(PBFF_RAID); + else partition->pb_Flags &= ~(PED_CPU_TO_BE32(PBFF_RAID)); + return 1; + case PED_PARTITION_LVM: + if (state) partition->pb_Flags |= PED_CPU_TO_BE32(PBFF_LVM); + else partition->pb_Flags &= ~(PED_CPU_TO_BE32(PBFF_LVM)); + return 1; + default: + return 0; + } +} + +static int _GL_ATTRIBUTE_PURE +amiga_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + struct PartitionBlock *partition; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + partition = PART(part->disk_specific); + + switch (flag) { + case PED_PARTITION_BOOT: + return (partition->pb_Flags & PED_CPU_TO_BE32(PBFF_BOOTABLE)); + case PED_PARTITION_HIDDEN: + return (partition->pb_Flags & PED_CPU_TO_BE32(PBFF_NOMOUNT)); + case PED_PARTITION_RAID: + return (partition->pb_Flags & PED_CPU_TO_BE32(PBFF_RAID)); + case PED_PARTITION_LVM: + return (partition->pb_Flags & PED_CPU_TO_BE32(PBFF_LVM)); + default: + return 0; + } +} + +static int +amiga_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + switch (flag) { + case PED_PARTITION_BOOT: + case PED_PARTITION_HIDDEN: + case PED_PARTITION_RAID: + case PED_PARTITION_LVM: + return 1; + default: + return 0; + } +} + +static void +amiga_partition_set_name (PedPartition* part, const char* name) +{ + struct PartitionBlock *partition; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + partition = PART(part->disk_specific); + _amiga_set_bstr(name, partition->pb_DriveName, 32); +} +static const char* +amiga_partition_get_name (const PedPartition* part) +{ + struct PartitionBlock *partition; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + partition = PART(part->disk_specific); + + return _amiga_get_bstr(partition->pb_DriveName); +} + +static PedAlignment* +amiga_get_partition_alignment(const PedDisk *disk) +{ + PedSector cylinder_size = + disk->dev->hw_geom.sectors * disk->dev->hw_geom.heads; + + return ped_alignment_new(0, cylinder_size); +} + +static PedConstraint* +_amiga_get_constraint (const PedDisk *disk) +{ + PedDevice *dev = disk->dev; + PedAlignment start_align, end_align; + PedGeometry max_geom; + PedSector cyl_size = dev->hw_geom.sectors * dev->hw_geom.heads; + + if (!ped_alignment_init(&start_align, 0, cyl_size)) + return NULL; + if (!ped_alignment_init(&end_align, -1, cyl_size)) + return NULL; + if (!ped_geometry_init(&max_geom, dev, MAX_RDB_BLOCK + 1, + dev->length - MAX_RDB_BLOCK - 1)) + return NULL; + + return ped_constraint_new (&start_align, &end_align, + &max_geom, &max_geom, 1, dev->length); +} + +static int +amiga_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + + if (_ped_partition_attempt_align (part, constraint, + _amiga_get_constraint (part->disk))) + return 1; + +#ifndef DISCOVER_ONLY + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + return 0; +} + +static int +amiga_partition_enumerate (PedPartition* part) +{ + int i; + PedPartition* p; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk != NULL); + + /* never change the partition numbers */ + if (part->num != -1) + return 1; + for (i = 1; i <= AMIGA_MAX_PARTITIONS; i++) { + p = ped_disk_get_partition (part->disk, i); + if (!p) { + part->num = i; + return 1; + } + } + + /* failed to allocate a number */ +#ifndef DISCOVER_ONLY + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Unable to allocate a partition number.")); +#endif + return 0; +} + +static int +amiga_alloc_metadata (PedDisk* disk) +{ + PedPartition* new_part; + PedConstraint* constraint_any = NULL; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + constraint_any = ped_constraint_any (disk->dev); + + /* Allocate space for the RDB */ + new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL, + 0, MAX_RDB_BLOCK); + if (!new_part) + goto error; + + if (!ped_disk_add_partition (disk, new_part, constraint_any)) { + ped_partition_destroy (new_part); + goto error; + } + + ped_constraint_destroy (constraint_any); + return 1; +error: + ped_constraint_destroy (constraint_any); + return 0; +} + +static int +amiga_get_max_primary_partition_count (const PedDisk* disk) +{ + return AMIGA_MAX_PARTITIONS; +} + +static bool +amiga_get_max_supported_partition_count (const PedDisk* disk, int *max_n) +{ + *max_n = AMIGA_MAX_PARTITIONS; + return true; +} + +#include "pt-common.h" +PT_define_limit_functions (amiga) + +static PedDiskOps amiga_disk_ops = { + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (amiga_write), + + partition_set_name: amiga_partition_set_name, + partition_get_name: amiga_partition_get_name, + + get_partition_alignment: amiga_get_partition_alignment, + + PT_op_function_initializers (amiga) +}; + +static PedDiskType amiga_disk_type = { + next: NULL, + name: "amiga", + ops: &amiga_disk_ops, + features: PED_DISK_TYPE_PARTITION_NAME +}; + +void +ped_disk_amiga_init () +{ + PED_ASSERT (sizeof (struct AmigaBlock) != 3); + PED_ASSERT (sizeof (struct RigidDiskBlock) != 64); + PED_ASSERT (sizeof (struct PartitionBlock) != 64); + PED_ASSERT (sizeof (struct LinkedBlock) != 5); + PED_ASSERT (sizeof (struct Linked2Block) != 18); + + ped_disk_type_register (&amiga_disk_type); +} + +void +ped_disk_amiga_done () +{ + ped_disk_type_unregister (&amiga_disk_type); +} diff --git a/jni/parted/libparted/labels/sun.c b/jni/parted/libparted/labels/sun.c new file mode 100755 index 0000000..5ed2886 --- /dev/null +++ b/jni/parted/libparted/labels/sun.c @@ -0,0 +1,910 @@ +/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + + libparted - a library for manipulating disk partitions + Copyright (C) 2000-2001, 2005, 2007-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . + + Contributor: Ben Collins +*/ + +#include + +#include +#include +#include +#include + +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include "misc.h" +#include "pt-tools.h" +#include "verify.h" + +/* Most of this came from util-linux's sun support, which was mostly done + by Jakub Jelinek. */ + +#define SUN_DISK_MAGIC 0xDABE /* Disk magic number */ +#define SUN_DISK_MAXPARTITIONS 8 + +#define SUN_VTOC_VERSION 1 +#define SUN_VTOC_SANITY 0x600DDEEE + +#define WHOLE_DISK_ID 0x05 +#define WHOLE_DISK_PART 2 /* as in 0, 1, 2 (3rd partition) */ +#define LINUX_SWAP_ID 0x82 + +typedef struct _SunRawPartition SunRawPartition; +typedef struct _SunPartitionInfo SunPartitionInfo; +typedef struct _SunRawLabel SunRawLabel; +typedef struct _SunPartitionData SunPartitionData; +typedef struct _SunDiskData SunDiskData; + +struct __attribute__ ((packed)) _SunRawPartition { + u_int32_t start_cylinder; /* where the part starts... */ + u_int32_t num_sectors; /* ...and it's length */ +}; + +struct __attribute__ ((packed)) _SunPartitionInfo { + u_int8_t spare1; + u_int8_t id; /* Partition type */ + u_int8_t spare2; + u_int8_t flags; /* Partition flags */ +}; + +struct __attribute__ ((packed, aligned(2))) _SunRawLabel { + char info[128]; /* Informative text string */ + u_int32_t version; /* Layout version */ + u_int8_t volume[8]; /* Volume name */ + u_int16_t nparts; /* Number of partitions */ + SunPartitionInfo infos[SUN_DISK_MAXPARTITIONS]; + u_int16_t padding; /* Alignment padding */ + u_int32_t bootinfo[3]; /* Info needed by mboot */ + u_int32_t sanity; /* To verify vtoc sanity */ + u_int32_t reserved[10]; /* Free space */ + u_int32_t timestamp[8]; /* Partition timestamp */ + u_int32_t write_reinstruct; /* sectors to skip, writes */ + u_int32_t read_reinstruct; /* sectors to skip, reads */ + u_int8_t spare1[148]; /* Padding */ + u_int16_t rspeed; /* Disk rotational speed */ + u_int16_t pcylcount; /* Physical cylinder count */ + u_int16_t sparecyl; /* extra sects per cylinder */ + u_int8_t spare2[4]; /* More magic... */ + u_int16_t ilfact; /* Interleave factor */ + u_int16_t ncyl; /* Data cylinder count */ + u_int16_t nacyl; /* Alt. cylinder count */ + u_int16_t ntrks; /* Tracks per cylinder */ + u_int16_t nsect; /* Sectors per track */ + u_int8_t spare3[4]; /* Even more magic... */ + SunRawPartition partitions[SUN_DISK_MAXPARTITIONS]; + u_int16_t magic; /* Magic number */ + u_int16_t csum; /* Label xor'd checksum */ +}; + +struct _SunPartitionData { + u_int8_t type; + int is_boot; + int is_root; + int is_lvm; + int is_raid; +}; + +struct _SunDiskData { + PedSector length; /* This is based on cyl - alt-cyl */ + SunRawLabel raw_label; +}; + +static PedDiskType sun_disk_type; + +/* Checksum computation */ +static void +sun_compute_checksum (SunRawLabel *label) +{ + u_int16_t *ush = (u_int16_t *)label; + u_int16_t csum = 0; + + while(ush < (u_int16_t *)(&label->csum)) + csum ^= *ush++; + label->csum = csum; +} + +/* Checksum Verification */ +static int +sun_verify_checksum (SunRawLabel const *label) +{ + u_int16_t *ush = ((u_int16_t *)(label + 1)) - 1; + u_int16_t csum = 0; + + while (ush >= (u_int16_t *)label) + csum ^= *ush--; + + return !csum; +} + +static int +sun_probe (const PedDevice *dev) +{ + PED_ASSERT (dev != NULL); + + void *s0; + if (!ptt_read_sector (dev, 0, &s0)) + return 0; + SunRawLabel const *label = (void const *) s0; + + int ok = 1; + /* check magic */ + if (PED_BE16_TO_CPU (label->magic) != SUN_DISK_MAGIC) { + ok = 0; + } else { +#ifndef DISCOVER_ONLY + if (!sun_verify_checksum(label)) { + ok = 0; + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Corrupted Sun disk label detected.")); + } + } +#endif + + free (s0); + return ok; +} + +static PedDisk* +sun_alloc (const PedDevice* dev) +{ + PedDisk* disk; + SunRawLabel* label; + SunDiskData* sun_specific; + const PedCHSGeometry* bios_geom = &dev->bios_geom; + PedSector cyl_size = bios_geom->sectors * bios_geom->heads; + PED_ASSERT (cyl_size != 0); + + disk = _ped_disk_alloc (dev, &sun_disk_type); + if (!disk) + goto error; + + disk->disk_specific = (SunDiskData*) ped_malloc (sizeof (SunDiskData)); + if (!disk->disk_specific) + goto error_free_disk; + sun_specific = (SunDiskData*) disk->disk_specific; + + PED_ASSERT (bios_geom->cylinders == (PedSector) (dev->length / cyl_size)); + sun_specific->length = ped_round_down_to (dev->length, cyl_size); + + label = &sun_specific->raw_label; + memset(label, 0, sizeof(SunRawLabel)); + + /* #gentoo-sparc people agree that nacyl = 0 is the best option */ + label->magic = PED_CPU_TO_BE16 (SUN_DISK_MAGIC); + label->nacyl = 0; + label->pcylcount = PED_CPU_TO_BE16 (bios_geom->cylinders); + label->rspeed = PED_CPU_TO_BE16 (5400); + label->ilfact = PED_CPU_TO_BE16 (1); + label->sparecyl = 0; + label->ntrks = PED_CPU_TO_BE16 (bios_geom->heads); + label->nsect = PED_CPU_TO_BE16 (bios_geom->sectors); + label->ncyl = PED_CPU_TO_BE16 (dev->length / cyl_size); + + label->sanity = PED_CPU_TO_BE32 (SUN_VTOC_SANITY); + label->version = PED_CPU_TO_BE32 (SUN_VTOC_VERSION); + label->nparts = PED_CPU_TO_BE16 (SUN_DISK_MAXPARTITIONS); + + /* Add a whole disk partition at a minimum */ + label->infos[WHOLE_DISK_PART].id = WHOLE_DISK_ID; + label->partitions[WHOLE_DISK_PART].start_cylinder = 0; + label->partitions[WHOLE_DISK_PART].num_sectors = + PED_CPU_TO_BE32(sun_specific->length); + + /* Now a neato string to describe this label */ + snprintf(label->info, sizeof(label->info) - 1, + "GNU Parted Custom cyl %d alt %d hd %d sec %d", + PED_BE16_TO_CPU(label->ncyl), + PED_BE16_TO_CPU(label->nacyl), + PED_BE16_TO_CPU(label->ntrks), + PED_BE16_TO_CPU(label->nsect)); + + sun_compute_checksum(label); + return disk; + +error_free_disk: + _ped_disk_free (disk); +error: + return NULL; +} + +static PedDisk* +sun_duplicate (const PedDisk* disk) +{ + PedDisk* new_disk; + SunDiskData* new_sun_data; + SunDiskData* old_sun_data = (SunDiskData*) disk->disk_specific; + + new_disk = ped_disk_new_fresh (disk->dev, &sun_disk_type); + if (!new_disk) + return NULL; + + new_sun_data = (SunDiskData*) new_disk->disk_specific; + memcpy (new_sun_data, old_sun_data, sizeof (SunDiskData)); + return new_disk; +} + +static void +sun_free (PedDisk *disk) +{ + free (disk->disk_specific); + _ped_disk_free (disk); +} + +static int +_check_geometry_sanity (PedDisk* disk, SunRawLabel* label) +{ + PedDevice* dev = disk->dev; + + if (PED_BE16_TO_CPU(label->nsect) == dev->hw_geom.sectors && + PED_BE16_TO_CPU(label->ntrks) == dev->hw_geom.heads) + dev->bios_geom = dev->hw_geom; + + if (!!PED_BE16_TO_CPU(label->pcylcount) + * !!PED_BE16_TO_CPU(label->ntrks) + * !!PED_BE16_TO_CPU(label->nsect) == 0) + return 0; + + if (PED_BE16_TO_CPU(label->nsect) != dev->bios_geom.sectors || + PED_BE16_TO_CPU(label->ntrks) != dev->bios_geom.heads) { +#ifndef DISCOVER_ONLY + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("The disk CHS geometry (%d,%d,%d) reported " + "by the operating system does not match " + "the geometry stored on the disk label " + "(%d,%d,%d)."), + dev->bios_geom.cylinders, + dev->bios_geom.heads, + dev->bios_geom.sectors, + PED_BE16_TO_CPU(label->pcylcount), + PED_BE16_TO_CPU(label->ntrks), + PED_BE16_TO_CPU(label->nsect)) + == PED_EXCEPTION_CANCEL) + return 0; +#endif + dev->bios_geom.sectors = PED_BE16_TO_CPU(label->nsect); + dev->bios_geom.heads = PED_BE16_TO_CPU(label->ntrks); + dev->bios_geom.cylinders = PED_BE16_TO_CPU(label->pcylcount); + + if (dev->bios_geom.sectors * dev->bios_geom.heads + * dev->bios_geom.cylinders > dev->length) { + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("The disk label describes a disk bigger than " + "%s."), + dev->path) + != PED_EXCEPTION_IGNORE) + return 0; + } + } + return 1; +} + +static int +sun_read (PedDisk* disk) +{ + SunPartitionData* sun_data; + SunDiskData* disk_data; + int i; + PedPartition* part; + PedSector end, start, block; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + PED_ASSERT (disk->disk_specific != NULL); + + disk_data = (SunDiskData*) disk->disk_specific; + + ped_disk_delete_all (disk); + + void *s0; + if (!ptt_read_sector (disk->dev, 0, &s0)) + goto error; + + SunRawLabel *label = &disk_data->raw_label; + verify (sizeof (*label) == 512); + memcpy (label, s0, sizeof (*label)); + free (s0); + + if (!_check_geometry_sanity (disk, label)) + goto error; + + block = disk->dev->bios_geom.sectors * disk->dev->bios_geom.heads; + disk_data->length = block * disk->dev->bios_geom.cylinders; + + for (i = 0; i < SUN_DISK_MAXPARTITIONS; i++) { + if (!PED_BE32_TO_CPU(label->partitions[i].num_sectors)) + continue; + if (!label->infos[i].id) + continue; + if (label->infos[i].id == WHOLE_DISK_ID) + continue; + + start = PED_BE32_TO_CPU(label->partitions[i].start_cylinder) + * block; + end = start + + PED_BE32_TO_CPU(label->partitions[i].num_sectors) - 1; + + part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL, + start, end); + if (!part) + goto error; + + sun_data = part->disk_specific; + sun_data->type = label->infos[i].id; + sun_data->is_boot = sun_data->type == 0x1; + sun_data->is_root = sun_data->type == 0x2; + sun_data->is_lvm = sun_data->type == 0x8e; + sun_data->is_raid = sun_data->type == 0xfd; + + part->num = i + 1; + part->fs_type = ped_file_system_probe (&part->geom); + + PedConstraint *constraint_exact + = ped_constraint_exact (&part->geom); + if (constraint_exact == NULL) + goto error; + bool ok = ped_disk_add_partition (disk, part, constraint_exact); + ped_constraint_destroy (constraint_exact); + if (!ok) + goto error; + } + + return 1; + + error: + return 0; +} + +#ifndef DISCOVER_ONLY +static int +_use_old_info (const PedDisk* disk, const void *sector_0) +{ + SunRawLabel const *old_label = sector_0; + + if (old_label->info[0] + && PED_BE16_TO_CPU (old_label->magic) == SUN_DISK_MAGIC) { + SunDiskData *sun_specific = disk->disk_specific; + memcpy (&sun_specific->raw_label, sector_0, + sizeof (sun_specific->raw_label)); + verify (sizeof (sun_specific->raw_label) == 512); + } + + return 1; +} + +static int +sun_write (const PedDisk* disk) +{ + SunRawLabel* label; + SunPartitionData* sun_data; + SunDiskData* disk_data; + PedPartition* part; + int i; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->dev != NULL); + + void *s0; + if (!ptt_read_sector (disk->dev, 0, &s0)) + return 0; + + /* Calling _use_old_info here in sun_write + above seems wrong, because it modifies *DISK. + FIXME: maybe later. */ + if (!_use_old_info (disk, s0)) { + free (s0); + return 0; + } + + disk_data = (SunDiskData*) disk->disk_specific; + label = &disk_data->raw_label; + + memset (label->partitions, 0, + sizeof (SunRawPartition) * SUN_DISK_MAXPARTITIONS); + memset (label->infos, 0, + sizeof (SunPartitionInfo) * SUN_DISK_MAXPARTITIONS); + + for (i = 0; i < SUN_DISK_MAXPARTITIONS; i++) { + part = ped_disk_get_partition (disk, i + 1); + + if (!part && i == WHOLE_DISK_PART) { + /* Ok, nothing explicitly in the whole disk + partition, so let's put it there for safety + sake. */ + + label->infos[i].id = WHOLE_DISK_ID; + label->partitions[i].start_cylinder = 0; + label->partitions[i].num_sectors = + PED_CPU_TO_BE32(disk_data->length); + continue; + } + if (!part) + continue; + + sun_data = part->disk_specific; + label->infos[i].id = sun_data->type; + label->partitions[i].start_cylinder + = PED_CPU_TO_BE32 (part->geom.start + / (disk->dev->bios_geom.sectors + * disk->dev->bios_geom.heads)); + label->partitions[i].num_sectors + = PED_CPU_TO_BE32 (part->geom.end + - part->geom.start + 1); + } + + /* We assume the harddrive is always right, and that the label may + be wrong. I don't think this will cause any problems, since the + cylinder count is always enforced by our alignment, and we + sanity checked the sectors/heads when we detected the device. The + worst that could happen here is that the drive seems bigger or + smaller than it really is, but we'll have that problem even if we + don't do this. */ + + if (disk->dev->bios_geom.cylinders > 65536) { + ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE, + _("The disk has %d cylinders, which is greater than " + "the maximum of 65536."), + disk->dev->bios_geom.cylinders); + } + + label->pcylcount = PED_CPU_TO_BE16 (disk->dev->bios_geom.cylinders); + label->ncyl = PED_CPU_TO_BE16 (disk->dev->bios_geom.cylinders + - PED_BE16_TO_CPU (label->nacyl)); + + sun_compute_checksum (label); + + verify (sizeof *label == 512); + memcpy (s0, label, sizeof *label); + int write_ok = ped_device_write (disk->dev, s0, 0, 1); + free (s0); + + if (write_ok) + return ped_device_sync (disk->dev); + + return 0; +} +#endif /* !DISCOVER_ONLY */ + +static PedPartition* +sun_partition_new (const PedDisk* disk, PedPartitionType part_type, + const PedFileSystemType* fs_type, + PedSector start, PedSector end) +{ + PedPartition* part; + SunPartitionData* sun_data; + + part = _ped_partition_alloc (disk, part_type, fs_type, start, end); + if (!part) + goto error; + + if (ped_partition_is_active (part)) { + part->disk_specific + = sun_data = ped_malloc (sizeof (SunPartitionData)); + if (!sun_data) + goto error_free_part; + sun_data->type = 0; + sun_data->is_boot = 0; + sun_data->is_root = 0; + sun_data->is_lvm = 0; + sun_data->is_raid = 0; + } else { + part->disk_specific = NULL; + } + + return part; + +error_free_part: + free (part); +error: + return NULL; +} + +static PedPartition* +sun_partition_duplicate (const PedPartition* part) +{ + PedPartition* new_part; + SunPartitionData* new_sun_data; + SunPartitionData* old_sun_data; + + new_part = ped_partition_new (part->disk, part->type, + part->fs_type, part->geom.start, + part->geom.end); + if (!new_part) + return NULL; + new_part->num = part->num; + + old_sun_data = (SunPartitionData*) part->disk_specific; + new_sun_data = (SunPartitionData*) new_part->disk_specific; + new_sun_data->type = old_sun_data->type; + new_sun_data->is_boot = old_sun_data->is_boot; + new_sun_data->is_root = old_sun_data->is_root; + new_sun_data->is_lvm = old_sun_data->is_lvm; + new_sun_data->is_raid = old_sun_data->is_raid; + return new_part; +} + +static void +sun_partition_destroy (PedPartition* part) +{ + PED_ASSERT (part != NULL); + + if (ped_partition_is_active (part)) + free (part->disk_specific); + free (part); +} + +static int +sun_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type) +{ + SunPartitionData* sun_data = part->disk_specific; + + part->fs_type = fs_type; + + if (sun_data->is_boot) { + sun_data->type = 0x1; + return 1; + } + if (sun_data->is_root) { + sun_data->type = 0x2; + return 1; + } + if (sun_data->is_lvm) { + sun_data->type = 0x8e; + return 1; + } + if (sun_data->is_raid) { + sun_data->type = 0xfd; + return 1; + } + + sun_data->type = 0x83; + if (fs_type) { + if (is_linux_swap (fs_type->name)) + sun_data->type = 0x82; + else if (!strcmp (fs_type->name, "ufs")) + sun_data->type = 0x6; + } + + return 1; +} + +static int +sun_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state) +{ + SunPartitionData* sun_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + PED_ASSERT (ped_partition_is_flag_available (part, flag)); + + sun_data = part->disk_specific; + + switch (flag) { + case PED_PARTITION_BOOT: + sun_data->is_boot = state; + if (state) { + sun_data->is_lvm = 0; + sun_data->is_raid = 0; + sun_data->is_root = 0; + } + return ped_partition_set_system (part, part->fs_type); + + case PED_PARTITION_ROOT: + sun_data->is_root = state; + if (state) { + sun_data->is_boot = 0; + sun_data->is_lvm = 0; + sun_data->is_raid = 0; + } + return ped_partition_set_system (part, part->fs_type); + + case PED_PARTITION_LVM: + sun_data->is_lvm = state; + if (state) { + sun_data->is_boot = 0; + sun_data->is_raid = 0; + sun_data->is_root = 0; + } + return ped_partition_set_system (part, part->fs_type); + + case PED_PARTITION_RAID: + sun_data->is_raid = state; + if (state) { + sun_data->is_boot = 0; + sun_data->is_lvm = 0; + sun_data->is_root = 0; + } + return ped_partition_set_system (part, part->fs_type); + + default: + return 0; + } +} + + +static int _GL_ATTRIBUTE_PURE +sun_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) +{ + SunPartitionData* sun_data; + + PED_ASSERT (part != NULL); + PED_ASSERT (part->disk_specific != NULL); + + sun_data = part->disk_specific; + + switch (flag) { + case PED_PARTITION_BOOT: + return sun_data->is_boot; + case PED_PARTITION_ROOT: + return sun_data->is_root; + case PED_PARTITION_LVM: + return sun_data->is_lvm; + case PED_PARTITION_RAID: + return sun_data->is_raid; + + default: + return 0; + } +} + + +static int +sun_partition_is_flag_available (const PedPartition* part, + PedPartitionFlag flag) +{ + switch (flag) { + case PED_PARTITION_BOOT: + case PED_PARTITION_ROOT: + case PED_PARTITION_LVM: + case PED_PARTITION_RAID: + return 1; + + default: + return 0; + } +} + +static bool +sun_get_max_supported_partition_count (const PedDisk* disk, int *max_n) +{ + *max_n = SUN_DISK_MAXPARTITIONS; + return true; +} + +static int +sun_get_max_primary_partition_count (const PedDisk* disk) +{ + return SUN_DISK_MAXPARTITIONS; +} + +static PedAlignment* +sun_get_partition_alignment(const PedDisk *disk) +{ + PedSector block = + disk->dev->hw_geom.sectors * disk->dev->hw_geom.heads; + + return ped_alignment_new(0, block); +} + +static PedConstraint* +_get_strict_constraint (PedDisk* disk) +{ + PedDevice* dev = disk->dev; + PedAlignment start_align; + PedAlignment end_align; + PedGeometry max_geom; + SunDiskData* disk_data = disk->disk_specific; + PedSector block = dev->bios_geom.sectors * dev->bios_geom.heads; + + if (!ped_alignment_init (&start_align, 0, block)) + return NULL; + if (!ped_alignment_init (&end_align, -1, block)) + return NULL; + if (!ped_geometry_init (&max_geom, dev, 0, disk_data->length)) + return NULL; + + return ped_constraint_new (&start_align, &end_align, &max_geom, + &max_geom, 1, dev->length); +} + +static PedConstraint* +_get_lax_constraint (PedDisk* disk) +{ + PedDevice* dev = disk->dev; + PedAlignment start_align; + PedGeometry max_geom; + SunDiskData* disk_data = disk->disk_specific; + PedSector block = dev->bios_geom.sectors * dev->bios_geom.heads; + + if (!ped_alignment_init (&start_align, 0, block)) + return NULL; + if (!ped_geometry_init (&max_geom, dev, 0, disk_data->length)) + return NULL; + + return ped_constraint_new (&start_align, ped_alignment_any, &max_geom, + &max_geom, 1, dev->length); +} + +/* _get_strict_constraint() will align the partition to the end of the cylinder. + * This isn't required, but since partitions must start at the start of the + * cylinder, space between the end of a partition and the end of a cylinder + * is unusable, so there's no point wasting space! + * However, if they really insist (via constraint)... which they will + * if they're reading a weird table of the disk... then we allow the end to + * be anywhere, with _get_lax_constraint() + */ +static int +sun_partition_align (PedPartition* part, const PedConstraint* constraint) +{ + PED_ASSERT (part != NULL); + + if (_ped_partition_attempt_align (part, constraint, + _get_strict_constraint (part->disk))) + return 1; + if (_ped_partition_attempt_align (part, constraint, + _get_lax_constraint (part->disk))) + return 1; + +#ifndef DISCOVER_ONLY + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Unable to satisfy all constraints on the partition.")); +#endif + return 0; +} + +static int +sun_partition_enumerate (PedPartition* part) +{ + int i; + PedPartition* p; + + /* never change the partition numbers */ + if (part->num != -1) + return 1; + for (i = 1; i <= SUN_DISK_MAXPARTITIONS; i++) { + /* skip the Whole Disk partition for now */ + if (i == WHOLE_DISK_PART + 1) + continue; + p = ped_disk_get_partition (part->disk, i); + if (!p) { + part->num = i; + return 1; + } + } + +#ifndef DISCOVER_ONLY + /* Ok, now allocate the Whole disk if it isn't already */ + p = ped_disk_get_partition (part->disk, WHOLE_DISK_PART + 1); + if (!p) { + int j = ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_IGNORE_CANCEL, + _("The Whole Disk partition is the only " + "available one left. Generally, it is not a " + "good idea to overwrite this partition with " + "a real one. Solaris may not be able to " + "boot without it, and SILO (the sparc boot " + "loader) appreciates it as well.")); + if (j == PED_EXCEPTION_IGNORE) { + /* bad bad bad...you will suffer your own fate */ + part->num = WHOLE_DISK_PART + 1; + return 1; + } + } + + /* failed to allocate a number, this means we are full */ + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Sun disk label is full.")); +#endif + return 0; +} + +static int +sun_alloc_metadata (PedDisk* disk) +{ + PedPartition* new_part; + SunDiskData* disk_data; + PedConstraint* constraint_any; + + PED_ASSERT (disk != NULL); + PED_ASSERT (disk->disk_specific != NULL); + PED_ASSERT (disk->dev != NULL); + + constraint_any = ped_constraint_any (disk->dev); + + /* Sun disk label does not need to allocate a sector. The disk + label is contained within the first 512 bytes, which should not + be overwritten by any boot loader or superblock. It is safe for + most partitions to start at sector 0. We do however, allocate + the space used by alt-cyl's, since we cannot use those. Put them + at the end of the disk. */ + + disk_data = disk->disk_specific; + + if (disk->dev->length <= 0 || + disk_data->length <= 0 || + disk->dev->length == disk_data->length) + goto error; + + new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL, + disk_data->length, disk->dev->length - 1); + if (!new_part) + goto error; + + if (!ped_disk_add_partition (disk, new_part, constraint_any)) { + ped_partition_destroy (new_part); + goto error; + } + + ped_constraint_destroy (constraint_any); + return 1; +error: + ped_constraint_destroy (constraint_any); + return 0; +} + +#include "pt-common.h" +PT_define_limit_functions (sun) + +static PedDiskOps sun_disk_ops = { + clobber: NULL, + write: NULL_IF_DISCOVER_ONLY (sun_write), + + get_partition_alignment: sun_get_partition_alignment, + + partition_set_name: NULL, + partition_get_name: NULL, + + PT_op_function_initializers (sun) +}; + +static PedDiskType sun_disk_type = { + next: NULL, + name: "sun", + ops: &sun_disk_ops, + features: 0 +}; + +void +ped_disk_sun_init () +{ + PED_ASSERT (sizeof (SunRawLabel) == 512); + ped_disk_type_register (&sun_disk_type); +} + +void +ped_disk_sun_done () +{ + ped_disk_type_unregister (&sun_disk_type); +} diff --git a/jni/parted/libparted/labels/vtoc.c b/jni/parted/libparted/labels/vtoc.c new file mode 100755 index 0000000..d467164 --- /dev/null +++ b/jni/parted/libparted/labels/vtoc.c @@ -0,0 +1,1329 @@ +#include +#include + +#ifdef DEBUG_DASD +#define PDEBUG fprintf(stderr, "%s:%d:%s\n", \ + __FILE__, \ + __LINE__, \ + __PRETTY_FUNCTION__); +#else +#define PDEBUG +#endif + +#include + +#include +#if ENABLE_NLS +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +static const unsigned char EBCtoASC[256] = +{ +/* 0x00 NUL SOH STX ETX *SEL HT *RNL DEL */ + 0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F, +/* 0x08 -GE -SPS -RPT VT FF CR SO SI */ + 0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, +/* 0x10 DLE DC1 DC2 DC3 -RES -NL BS -POC + -ENP ->LF */ + 0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07, +/* 0x18 CAN EM -UBS -CU1 -IFS -IGS -IRS -ITB + -IUS */ + 0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, +/* 0x20 -DS -SOS FS -WUS -BYP LF ETB ESC + -INP */ + 0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B, +/* 0x28 -SA -SFE -SM -CSP -MFA ENQ ACK BEL + -SW */ + 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07, +/* 0x30 ---- ---- SYN -IR -PP -TRN -NBS EOT */ + 0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04, +/* 0x38 -SBS -IT -RFF -CU3 DC4 NAK ---- SUB */ + 0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A, +/* 0x40 SP RSP ---- */ + 0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86, +/* 0x48 . < ( + | */ + 0x87, 0xA4, 0x9B, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, +/* 0x50 & ---- */ + 0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07, +/* 0x58 ! $ * ) ; */ + 0x8D, 0xE1, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAA, +/* 0x60 - / ---- ---- ---- ---- */ + 0x2D, 0x2F, 0x07, 0x8E, 0x07, 0x07, 0x07, 0x8F, +/* 0x68 ---- , % _ > ? */ + 0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, +/* 0x70 --- ---- ---- ---- ---- ---- ---- */ + 0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, +/* 0x78 * ` : # @ ' = " */ + 0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, +/* 0x80 * a b c d e f g */ + 0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, +/* 0x88 h i ---- ---- ---- */ + 0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1, +/* 0x90 j k l m n o p */ + 0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, +/* 0x98 q r ---- ---- */ + 0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07, +/* 0xA0 ~ s t u v w x */ + 0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, +/* 0xA8 y z ---- ---- ---- ---- */ + 0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07, +/* 0xB0 ^ ---- ---- */ + 0x5E, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC, +/* 0xB8 ---- [ ] ---- ---- ---- ---- */ + 0xAB, 0x07, 0x5B, 0x5D, 0x07, 0x07, 0x07, 0x07, +/* 0xC0 { A B C D E F G */ + 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, +/* 0xC8 H I ---- ---- */ + 0x48, 0x49, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07, +/* 0xD0 } J K L M N O P */ + 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, +/* 0xD8 Q R ---- */ + 0x51, 0x52, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98, +/* 0xE0 \ S T U V W X */ + 0x5C, 0xF6, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, +/* 0xE8 Y Z ---- ---- ---- ---- */ + 0x59, 0x5A, 0xFD, 0x07, 0x99, 0x07, 0x07, 0x07, +/* 0xF0 0 1 2 3 4 5 6 7 */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, +/* 0xF8 8 9 ---- ---- ---- ---- ---- */ + 0x38, 0x39, 0x07, 0x07, 0x9A, 0x07, 0x07, 0x07 +}; + +static const unsigned char ASCtoEBC[256] = +{ + /*00 NL SH SX EX ET NQ AK BL */ + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, + /*08 BS HT LF VT FF CR SO SI */ + 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + /*10 DL D1 D2 D3 D4 NK SN EB */ + 0x10, 0x11, 0x12, 0x13, 0x3C, 0x15, 0x32, 0x26, + /*18 CN EM SB EC FS GS RS US */ + 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, + /*20 SP ! " # $ % & ' */ + 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, + /*28 ( ) * + , - . / */ + 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, + /*30 0 1 2 3 4 5 6 7 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + /*38 8 9 : ; < = > ? */ + 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, + /*40 @ A B C D E F G */ + 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + /*48 H I J K L M N O */ + 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, + /*50 P Q R S T U V W */ + 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, + /*58 X Y Z [ \ ] ^ _ */ + 0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D, + /*60 ` a b c d e f g */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + /*68 h i j k l m n o */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, + /*70 p q r s t u v w */ + 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, + /*78 x y z { | } ~ DL */ + 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFF +}; + +enum failure { + unable_to_open, + unable_to_seek, + unable_to_write, + unable_to_read +}; + +static char buffer[93]; + +static void +vtoc_error (enum failure why, char const *s1, char const *s2) +{ + PDEBUG + char error[8192]; + + switch (why) { + case unable_to_open: + sprintf(error, "VTOC: %s -- %s\n%s\n", + _("opening of device failed"), s1, s2); + break; + case unable_to_seek: + sprintf(error, "VTOC: %s -- %s\n%s\n", + _("seeking on device failed"), s1, s2); + break; + case unable_to_write: + sprintf(error, "VTOC: %s -- %s\n%s\n", + _("writing to device failed"), s1, s2); + break; + case unable_to_read: + sprintf(error, "VTOC: %s -- %s\n%s\n", + _("reading from device failed"), s1, s2); + break; + default: + sprintf(error, "VTOC: %s\n", _("Fatal error")); + } + + ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, error); +} + +char * +vtoc_ebcdic_enc (char const *source, char *target, int l) +{ + PDEBUG + int i; + + for (i = 0; i < l; i++) + target[i]=ASCtoEBC[(unsigned char)(source[i])]; + + return target; +} + +char * +vtoc_ebcdic_dec (char const *source, char *target, int l) +{ + PDEBUG + int i; + + for (i = 0; i < l; i++) + target[i]=EBCtoASC[(unsigned char)(source[i])]; + + return target; +} + +void +vtoc_set_extent (extent_t *ext, u_int8_t typeind, u_int8_t seqno, + cchh_t *lower, cchh_t *upper) +{ + PDEBUG + ext->typeind = typeind; + ext->seqno = seqno; + memcpy(&ext->llimit,lower,sizeof(cchh_t)); + memcpy(&ext->ulimit,upper,sizeof(cchh_t)); +} + +void +vtoc_set_cchh (cchh_t *addr, u_int32_t cc, u_int16_t hh) +{ + PDEBUG + addr->cc = (u_int16_t) cc; + addr->hh = cc >> 16; + addr->hh <<= 4; + addr->hh |= hh; +} + +u_int32_t +vtoc_get_cyl_from_cchh (cchh_t *addr) +{ + u_int32_t cyl; + + /*decode cylinder for large volumes */ + cyl = addr->hh & 0xFFF0; + cyl <<= 12; + cyl |= addr->cc; + return cyl; +} + +u_int16_t +vtoc_get_head_from_cchh (cchh_t *addr) +{ + /* decode heads for large volumes */ + return addr->hh & 0x000F; +} + +static void +vtoc_set_ttr (ttr_t *addr, u_int16_t tt, u_int8_t r) +{ + PDEBUG + addr->tt = tt; + addr->r = r; +} + +void +vtoc_set_cchhb (cchhb_t *addr, u_int32_t cc, u_int16_t hh, u_int8_t b) +{ + PDEBUG + addr->cc = (u_int16_t) cc; + addr->hh = cc >> 16; + addr->hh <<= 4; + addr->hh |= hh; + addr->b = b; +} + +u_int32_t +vtoc_get_cyl_from_cchhb(cchhb_t *addr) +{ + u_int32_t cyl; + + /* decode cylinder for large volumes */ + cyl = addr->hh & 0xFFF0; + cyl <<= 12; + cyl |= addr->cc; + return cyl; +} + +u_int16_t +vtoc_get_head_from_cchhb(cchhb_t *addr) +{ + /* decode heads for large volumes */ + return addr->hh & 0x000F; +} + +/* + * some functions to convert cyl-cyl-head-head addresses to + * block or track numbers + * Note: Record zero is special, so first block on a track is + * in record 1! + */ +u_int64_t +cchhb2blk (cchhb_t *p, struct fdasd_hd_geometry *geo) +{ + return (u_int64_t) vtoc_get_cyl_from_cchhb(p) * + geo->heads * geo->sectors + + vtoc_get_head_from_cchhb(p) * geo->sectors + + p->b; +} + +u_int64_t +cchh2blk (cchh_t *p, struct fdasd_hd_geometry *geo) +{ + return (u_int64_t) vtoc_get_cyl_from_cchh(p) * + geo->heads * geo->sectors + + vtoc_get_head_from_cchh(p) * geo->sectors; +} + +u_int32_t +cchh2trk (cchh_t *p, struct fdasd_hd_geometry *geo) +{ + return vtoc_get_cyl_from_cchh(p) * geo->heads + + vtoc_get_head_from_cchh(p); +} + +void +vtoc_set_date (labeldate_t * d, u_int8_t year, u_int16_t day) +{ + PDEBUG + d->year = year; + d->day = day; +} + +/* + * initializes the volume label with EBCDIC spaces + */ +void +vtoc_volume_label_init (volume_label_t *vlabel) +{ + PDEBUG + sprintf(buffer, "%92s", " "); + vtoc_ebcdic_enc(buffer, buffer, sizeof *vlabel); + memcpy(vlabel, buffer, sizeof *vlabel); +} + +/* + * reads the volume label from dasd + */ +int +vtoc_read_volume_label (int f, unsigned long vlabel_start, + volume_label_t *vlabel) +{ + + char str[5]; + unsigned long block_zero; + typedef struct bogus_label bogus_label_t; + typedef union vollabel vollabel_t; + + union __attribute__((packed)) vollabel { + /* cdl and ldl have the same data struct */ + volume_label_t cdl; + cms_volume_label_t cms; + }; + + struct __attribute__((packed)) bogus_label { + char overhead[512]; + vollabel_t actual_label; + }; + + bogus_label_t mybogus; + bogus_label_t *bogus_ptr = &mybogus; + vollabel_t *union_ptr = &bogus_ptr->actual_label; + volume_label_t *cdl_ptr = &union_ptr->cdl; + + PDEBUG + int rc; + + if (lseek(f, vlabel_start, SEEK_SET) == -1) { + vtoc_error(unable_to_seek, "vtoc_read_volume_label", + _("Could not read volume label.")); + return 1; + } + + rc = read(f, vlabel, sizeof(volume_label_t)); + if (rc != sizeof(volume_label_t)) { + vtoc_error(unable_to_read, "vtoc_read_volume_label", + _("Could not read volume label.")); + return 1; + } + + if (strncmp(vlabel->volkey, vtoc_ebcdic_enc("VOL1", str, 4), 4) == 0 + || strncmp(vlabel->volkey, vtoc_ebcdic_enc("LNX1", str, 4), 4) == 0 + || strncmp(vlabel->volkey, vtoc_ebcdic_enc("CMS1", str, 4), 4) == 0) + return 0; + + /* + If we didn't find a valid volume label, there is a special case + we must try before we give up. For a CMS-formatted disk on FBA + DASD using the DIAG driver and a block size greater than 512, we + must read the block at offset 0, then look for a label within + that block at offset 512. + */ + + block_zero = 0; + + if (lseek(f, block_zero, SEEK_SET) == -1) { + vtoc_error(unable_to_seek, "vtoc_read_volume_label", + _("Could not read volume label.")); + return 1; + } + + rc = read(f, bogus_ptr, sizeof(bogus_label_t)); + if (rc != sizeof(bogus_label_t)) { + vtoc_error(unable_to_read, "vtoc_read_volume_label", + _("Could not read volume label.")); + return 1; + } + + memcpy(vlabel, cdl_ptr, sizeof *vlabel); + return 0; +} + +/* + * writes the volume label to dasd + */ +int +vtoc_write_volume_label (int f, unsigned long vlabel_start, + volume_label_t const *vlabel) +{ + PDEBUG + int rc; + + if (lseek(f, vlabel_start, SEEK_SET) == -1) + vtoc_error(unable_to_seek, "vtoc_write_volume_label", + _("Could not write volume label.")); + + rc = write(f, vlabel, sizeof(volume_label_t)); + if (rc != sizeof(volume_label_t)) + vtoc_error(unable_to_write, "vtoc_write_volume_label", + _("Could not write volume label.")); + + return 0; +} + +/* + * takes a string as input, converts it to uppercase, translates + * it to EBCDIC and fills it up with spaces before it copies it + * as volume serial to the volume label + */ +void +vtoc_volume_label_set_volser (volume_label_t *vlabel, char const *volser) +{ + PDEBUG + int j, i = strlen(volser); + char s[VOLSER_LENGTH + 1]; + + strcpy(s, " "); + vtoc_ebcdic_enc(s, s, VOLSER_LENGTH); + strncpy(vlabel->volid, s, VOLSER_LENGTH); + + if (i > VOLSER_LENGTH) + i = VOLSER_LENGTH; + + strncpy(s, volser, i); + for (j=0; jvolid, s, i); + + return; +} + +/* + * returns the volume serial number right after it is translated + * to ASCII + */ +char * +vtoc_volume_label_get_volser (volume_label_t *vlabel, char *volser) +{ + PDEBUG + vtoc_ebcdic_dec(vlabel->volid, volser, VOLSER_LENGTH); + + return volser; +} + +/* + * sets the volume label key right after + * it has been translated to EBCDIC + */ +void +vtoc_volume_label_set_key (volume_label_t *vlabel, char const *key) +{ + PDEBUG + char s[4]; + + vtoc_ebcdic_enc(key, s, 4); + strncpy(vlabel->volkey, s, 4); + + return; +} + +/* + * sets the volume label identifier right + * after it has been translated to EBCDIC + */ +void +vtoc_volume_label_set_label (volume_label_t *vlabel, char const *lbl) +{ + PDEBUG + char s[4]; + + vtoc_ebcdic_enc(lbl, s, 4); + strncpy(vlabel->vollbl, s, 4); + + return; +} + +/* + * returns the volume label key = the label identifier + * right after it has been translated to ASCII + */ +char * +vtoc_volume_label_get_label (volume_label_t *vlabel, char *lbl) +{ + PDEBUG + vtoc_ebcdic_dec(vlabel->vollbl, lbl, 4); + + return lbl; +} + +/* + * reads either a format4 label or a format1 label + * from the specified position + */ +void +vtoc_read_label (int f, unsigned long position, format1_label_t *f1, + format4_label_t *f4, format5_label_t *f5, format7_label_t *f7) +{ + PDEBUG + int t; + + if (lseek(f, position, SEEK_SET) == -1) + vtoc_error(unable_to_seek, "vtoc_read_label", + _("Could not read VTOC labels.")); + + if (f1 != NULL) { + t = sizeof(format1_label_t); + if (read(f, f1, t) != t) + vtoc_error(unable_to_read, "vtoc_read_label", + _("Could not read VTOC FMT1 DSCB.")); + } + + if (f4 != NULL) { + t = sizeof(format4_label_t); + if (read(f, f4, t) != t) + vtoc_error(unable_to_read, "vtoc_read_label", + _("Could not read VTOC FMT4 DSCB.")); + } + + if (f5 != NULL) { + t = sizeof(format5_label_t); + if (read(f, f5, t) != t) + vtoc_error(unable_to_read, "vtoc_read_label", + _("Could not read VTOC FMT5 DSCB.")); + } + + if (f7 != NULL) { + t = sizeof(format7_label_t); + if (read(f, f7, t) != t) + vtoc_error(unable_to_read, "vtoc_read_label", + _("Could not read VTOC FMT7 DSCB.")); + } +} + +/* + * writes either a FMT1, FMT4 or FMT5 label + * to the specified position + */ +void +vtoc_write_label (int f, unsigned long position, + format1_label_t const *f1, + format4_label_t const *f4, + format5_label_t const *f5, + format7_label_t const *f7, + format9_label_t const *f9) +{ + PDEBUG + int t; + + if (lseek(f, position, SEEK_SET) == -1) + vtoc_error(unable_to_seek, "vtoc_write_label", + _("Could not write VTOC labels.")); + + if (f1 != NULL) { + t = sizeof(format1_label_t); + if (write(f, f1, t) != t) + vtoc_error(unable_to_write, "vtoc_write_label", + _("Could not write VTOC FMT1 DSCB.")); + } + + if (f4 != NULL) { + t = sizeof(format4_label_t); + if (write(f, f4, t) != t) + vtoc_error(unable_to_write, "vtoc_write_label", + _("Could not write VTOC FMT4 DSCB.")); + } + + if (f5 != NULL) { + t = sizeof(format5_label_t); + if (write(f, f5, t) != t) + vtoc_error(unable_to_write, "vtoc_write_label", + _("Could not write VTOC FMT5 DSCB.")); + } + + if (f7 != NULL) { + t = sizeof(format7_label_t); + if (write(f, f7, t) != t) + vtoc_error(unable_to_write, "vtoc_write_label", + _("Could not write VTOC FMT7 DSCB.")); + } + + if (f9 != NULL) + { + t = sizeof(format9_label_t); + if (write(f, f9, t) != t) + { + close(f); + vtoc_error(unable_to_write, "vtoc_write_label", + _("Could not write VTOC FMT9 DSCB.")); + } + } +} + +/* + * initializes a format4 label + */ +void +vtoc_init_format4_label (format4_label_t *f4, + unsigned int compat_cylinders, + unsigned int real_cylinders, unsigned int tracks, + unsigned int blocks, unsigned int blksize, + u_int16_t dev_type) +{ + PDEBUG + int i; + + cchh_t lower = {VTOC_START_CC, VTOC_START_HH}; + cchh_t upper = {VTOC_START_CC, VTOC_START_HH}; + + for (i=0; i<44; i++) f4->DS4KEYCD[i] = 0x04; + f4->DS4IDFMT = 0xf4; + + vtoc_set_cchhb(&f4->DS4HPCHR, 0x0000, 0x0000, 0x00); + f4->DS4DSREC = blocks - 2; + /* free space starts right behind VTOC + vtoc_set_cchh(&f4->DS4HCCHH, VTOC_START_CC, VTOC_START_HH + 1);*/ + vtoc_set_cchh(&f4->DS4HCCHH, 0x0000, 0x0000); + f4->DS4NOATK = 0x0000; + f4->DS4VTOCI = 0x00; + f4->DS4NOEXT = 0x01; + f4->DS4SMSFG = 0x00; + f4->DS4DEVAC = 0x00; + + /* -- begin f4->DS4DEVCT -- */ + f4->DS4DEVCT.DS4DSCYL = compat_cylinders; + f4->DS4DEVCT.DS4DSTRK = tracks; + + switch (dev_type) { + case DASD_3380_TYPE: + f4->DS4DEVCT.DS4DEVTK = DASD_3380_VALUE; + break; + case DASD_3390_TYPE: + f4->DS4DEVCT.DS4DEVTK = DASD_3390_VALUE; + break; + case DASD_9345_TYPE: + f4->DS4DEVCT.DS4DEVTK = DASD_9345_VALUE; + break; + default: + f4->DS4DEVCT.DS4DEVTK = blocks * blksize; + } + + f4->DS4DEVCT.DS4DEVI = 0x00; + f4->DS4DEVCT.DS4DEVL = 0x00; + f4->DS4DEVCT.DS4DEVK = 0x00; + f4->DS4DEVCT.DS4DEVFG = 0x30; + f4->DS4DEVCT.DS4DEVTL = 0x0000; + f4->DS4DEVCT.DS4DEVDT = blocks; + f4->DS4DEVCT.DS4DEVDB = 0x00; + /* -- end f4->DS4DEVCT -- */ + + bzero(f4->DS4AMTIM, sizeof(f4->DS4AMTIM)); + bzero(f4->DS4AMCAT, sizeof(f4->DS4AMCAT)); + bzero(f4->DS4R2TIM, sizeof(f4->DS4R2TIM)); + bzero(f4->res1, sizeof(f4->res1)); + bzero(f4->DS4F6PTR, sizeof(f4->DS4F6PTR)); + + /* -- begin f4lbl->DS4VTOCE -- */ + vtoc_set_extent(&f4->DS4VTOCE, 0x01, 0x00, &lower, &upper); + /* -- end f4lbl->DS4VTOCE -- */ + + bzero(f4->res2, sizeof(f4->res2)); + f4->DS4EFLVL = 0x00; + bzero(&f4->DS4EFPTR, sizeof(f4->DS4EFPTR)); + bzero(&f4->res3, sizeof(f4->res3)); + f4->DS4DCYL = real_cylinders; + bzero(f4->res4, sizeof(f4->res4)); + f4->DS4DEVF2 = 0x40; /* allow format 8 and 9 labels */ + bzero(&f4->res5, sizeof(f4->res5)); +} + +/* + * initializes a format5 label + */ +void +vtoc_init_format5_label (format5_label_t *f5) +{ + PDEBUG + int i; + + bzero(f5, sizeof(format5_label_t)); + for (i=0; i<4; i++) + f5->DS5KEYID[i] = 0x05; + f5->DS5FMTID = 0xf5; +} + +/* + * initializes a format7 label + */ +void +vtoc_init_format7_label (format7_label_t *f7) +{ + PDEBUG + int i; + + bzero(f7, sizeof(format7_label_t)); + for (i=0; i<4; i++) + f7->DS7KEYID[i] = 0x07; + f7->DS7FMTID = 0xf7; +} + +/* + * helper function that initializes a most parts of a + * format1 or format 8 label, all but the field DS1FMTID + */ +void +vtoc_init_format_1_8_label (unsigned int blksize, + extent_t *part_extent, format1_label_t *f1) +{ + PDEBUG + struct tm * creatime; + time_t t; + char str[80]; + + /* get actual date */ + t = time(NULL); + creatime = gmtime(&t); + + bzero(f1->DS1DSNAM, sizeof(f1->DS1DSNAM)); + sprintf(str, "PART .NEW "); + vtoc_ebcdic_enc(str, str, 44); + strncpy(f1->DS1DSNAM, str, 44); + strncpy(f1->DS1DSSN, " ", 6); + f1->DS1VOLSQ = 0x0001; + + vtoc_set_date(&f1->DS1CREDT, (u_int8_t) creatime->tm_year, + (u_int16_t) creatime->tm_yday); + /* expires never - 99 365 */ + vtoc_set_date(&f1->DS1EXPDT, 0x63, 0x016D); + f1->DS1NOEPV = 0x01; + f1->DS1NOBDB = 0x00; + f1->DS1FLAG1 = 0x00; + vtoc_ebcdic_enc("IBM LINUX ", str, 13); + strncpy(f1->DS1SYSCD, str, 13); + vtoc_set_date(&f1->DS1REFD, (u_int8_t) creatime->tm_year, + (u_int16_t) creatime->tm_yday); + f1->DS1SMSFG = 0x00; + f1->DS1SCXTF = 0x00; + f1->DS1SCXTV = 0x0000; + f1->DS1DSRG1 = 0x00; + f1->DS1DSRG2 = 0x00; + f1->DS1RECFM = 0x88; + f1->DS1OPTCD = 0x00; + f1->DS1BLKL = blksize; + f1->DS1LRECL = blksize; + f1->DS1KEYL = 0x00; + f1->DS1RKP = 0x0000; + f1->DS1DSIND = 0x80; /* last volume for this dataset */ + f1->DS1SCAL1 = 0x80; + bzero(&f1->DS1SCAL3, sizeof(f1->DS1SCAL3)); + vtoc_set_ttr(&f1->DS1LSTAR, 0x0000, 0x00); + f1->DS1TRBAL = 0x00; + bzero(&f1->res1, sizeof(f1->res1)); + memcpy(&f1->DS1EXT1, part_extent, sizeof(extent_t)); + bzero(&f1->DS1EXT2, sizeof(extent_t)); + bzero(&f1->DS1EXT3, sizeof(extent_t)); + vtoc_set_cchhb(&f1->DS1PTRDS, 0x0000, 0x0000, 0x00); +} + +void +vtoc_init_format1_label (unsigned int blksize, + extent_t *part_extent, format1_label_t *f1) +{ + vtoc_init_format_1_8_label(blksize, part_extent, f1); + f1->DS1FMTID = 0xf1; +} + +void +vtoc_init_format8_label (unsigned int blksize, + extent_t *part_extent, format1_label_t *f8) +{ + vtoc_init_format_1_8_label(blksize, part_extent, f8); + f8->DS1FMTID = 0xf8; +} + +void +vtoc_update_format8_label (cchhb_t *associated_f9, format1_label_t *f8) +{ + memcpy(&f8->DS1PTRDS, associated_f9, sizeof(*associated_f9)); +} + +void +vtoc_init_format9_label (format9_label_t *f9) +{ + f9->DS9KEYID = 0x09; + f9->DS9SUBTY = 0x01; + f9->DS9NUMF9 = 1; + f9->DS9FMTID = 0xf9; +} + +/* + * do some updates to the VTOC format4 label + */ +void +vtoc_update_format4_label (format4_label_t *f4, cchhb_t *highest_f1, + u_int16_t unused_update) +{ + PDEBUG + /* update highest address of a format 1 label */ + memcpy(&f4->DS4HPCHR, highest_f1, sizeof(cchhb_t)); + + /* update unused DSCB count */ + f4->DS4DSREC = unused_update; +} + +/* + * reorganizes all extents within a FMT5 label + */ +static void +vtoc_reorganize_FMT5_extents (format5_label_t *f5) +{ + PDEBUG + ds5ext_t *ext, *last, tmp; + int i, j; + + for (i=0; i<26; i++) { + if (i==0) + last = &f5->DS5AVEXT; + else if ((i > 0) && (i < 8)) + last = &f5->DS5EXTAV[i-1]; + else + last = &f5->DS5MAVET[i-8]; + + for (j=i; j<26; j++) { + if (j==0) + ext = &f5->DS5AVEXT; + else if ((j > 0) && (j < 8)) + ext = &f5->DS5EXTAV[j-1]; + else + ext = &f5->DS5MAVET[j-8]; + + if (((ext->t > 0) && (last->t == 0)) || + ((ext->t > 0) && (ext->t < last->t))) + { + tmp.t = last->t; + tmp.fc = last->fc; + tmp.ft = last->ft; + last->t = ext->t; + last->fc = ext->fc; + last->ft = ext->ft; + ext->t = tmp.t; + ext->fc = tmp.fc; + ext->ft = tmp.ft; + } + } + } +} + +/* + * add a free space extent description to the VTOC FMT5 DSCB + */ +void +vtoc_update_format5_label_add (format5_label_t *f5, int verbose, + int trk, u_int16_t a, u_int16_t b, u_int8_t c) +{ + PDEBUG + ds5ext_t *ext = NULL, *tmp = NULL; + int i; + + for (i=0; i<26; i++) { + if (i==0) + ext = &f5->DS5AVEXT; + else if ((i > 0) && (i < 8)) + ext = &f5->DS5EXTAV[i-1]; + else + ext = &f5->DS5MAVET[i-8]; + + if (((a < ext->t) && (a + b*trk + c > ext->t)) || + ((a > ext->t) && (ext->t + ext->fc*trk + ext->ft > a))) + { + puts ("BUG: overlapping free space extents " + "in FMT5 DSCB!\nexiting..."); + exit(EXIT_FAILURE); + } + + if ((ext->t + ext->fc + ext->ft) == 0x0000) { + ext->t = a; + ext->fc = b; + ext->ft = c; + tmp = ext; + if (verbose) + puts ("FMT5 add extent: add new extent"); + break; + } + } + + if (tmp == NULL) { + /* BUG: no free extent found */ + puts ("BUG: no free FMT5 DSCB extent found!\nexiting..."); + exit(EXIT_FAILURE); + } + + for (i=0; i<26; i++) { + if (i==0) + ext = &f5->DS5AVEXT; + else if ((i > 0) && (i < 8)) + ext = &f5->DS5EXTAV[i-1]; + else + ext = &f5->DS5MAVET[i-8]; + + if ((ext->t + ext->fc + ext->ft) == 0x0000) + continue; + + if ((ext->t + ext->fc*trk + ext->ft) == tmp->t) { + /* this extent precedes the new one */ + ext->fc += (tmp->fc + (tmp->ft + ext->ft)/trk); + ext->ft = (tmp->ft + ext->ft) % trk; + bzero(tmp, sizeof(ds5ext_t)); + tmp = ext; + + if (verbose) + puts ("FMT5 add extent: " + "merge with predecessor"); + + i = -1; + continue; + } + + if ((tmp->t + tmp->fc*trk + tmp->ft) == ext->t) { + /* this extent succeeds the new one */ + ext->t = tmp->t; + ext->fc += (tmp->fc + (tmp->ft + ext->ft)/trk); + ext->ft = (tmp->ft + ext->ft) % trk; + bzero(tmp, sizeof(ds5ext_t)); + tmp = ext; + + if (verbose) + puts ("FMT5 add extent: " + "merge with successor"); + + i = -1; + continue; + } + } +} + +/* + * remove a free space extent description from the VTOC FMT5 DSCB + */ +void +vtoc_update_format5_label_del (format5_label_t *f5, int verbose, + int trk, u_int16_t a, u_int16_t b, u_int8_t c) +{ + PDEBUG + ds5ext_t *ext; + int i, counter=0; + + for (i=0; i<26; i++) { + if (i==0) + ext = &f5->DS5AVEXT; + else if ((i > 0) && (i < 8)) + ext = &f5->DS5EXTAV[i-1]; + else + ext = &f5->DS5MAVET[i-8]; + + if ((a == ext->t) && (b == ext->fc) && (c == ext->ft)) { + /* fills up whole free space gap */ + bzero(ext, sizeof(ds5ext_t)); + + if (verbose) + puts ("FMT5 del extent: fills whole gap"); + + counter++; + break; + } + + if ((a == ext->t) && ((b < ext->fc) || (c < ext->ft))) { + /* left-bounded in free space gap */ + ext->t = ext->t + b*trk + c; + + if (c > ext->ft) { + ext->fc -= (b + 1); + ext->ft -= (c - trk); + } else { + ext->fc -= b; + ext->ft -= c; + } + + if (verbose) + puts ("FMT5 del extent: left bounded"); + + counter++; + break; + } + + if ((ext->t < a) + && ((ext->t + ext->fc*trk + ext->ft) == (a + b*trk + c))) + { + /* right-bounded in free space gap */ + if (c > ext->ft) { + ext->fc -= (b + 1); + ext->ft -= (c - trk); + } else { + ext->fc -= b; + ext->ft -= c; + } + + if (verbose) + puts ("FMT5 del extent: right bounded"); + + counter++; + break; + } + + if ((a > ext->t) + && ((ext->t + ext->fc*trk + ext->ft) > (a + b*trk + c))) + { + /* partition devides free space into 2 pieces */ + u_int16_t x = a + b*trk + c; + u_int16_t w,y; + u_int8_t z; + + w = (ext->t + ext->fc*trk + ext->ft) - (a + b*trk + c); + y = w / trk; + z = w % trk; + + ext->fc = (a - ext->t) / trk; + ext->ft = (a - ext->t) % trk; + + vtoc_update_format5_label_add(f5, verbose, + trk, x, y, z); + + if (verbose) + puts ("FMT5 del extent: 2 pieces"); + + counter++; + break; + } + + if ((a < ext->t) && (a + b*trk + c > ext->t) + && (a + b*trk + c < ext->t + ext->fc*trk + ext->ft)) + { + puts ("BUG: corresponding free space extent " + "doesn't match free space currently shown " + "in FMT5 DSCB!\nexiting..."); + exit(EXIT_FAILURE); + } + + if ((a > ext->t) && (a < ext->t + ext->fc*trk + ext->ft) + && (a + b*trk + c > ext->t + ext->fc*trk + ext->ft)) + { + puts ("BUG: specified free space extent for " + "deleting doesn't match free space " + "currently shown in FMT5 DSCB!\n" + "exiting..."); + exit(EXIT_FAILURE); + } + } + + if (counter > 0) + return; + + puts ("BUG: specified free space extent for " + "deleting not found in FMT5 DSCB!\n" + "exiting..."); + exit(EXIT_FAILURE); +} + +/* + * reorganizes all extents within a FMT7 label + */ +static void +vtoc_reorganize_FMT7_extents (format7_label_t *f7) +{ + PDEBUG + ds7ext_t *ext, *last, tmp; + int i, j; + + for (i=0; i<16; i++) { + if (i<5) + last = &f7->DS7EXTNT[i]; + else + last = &f7->DS7ADEXT[i-5]; + + for (j=i; j<16; j++) { + if (j<5) + ext = &f7->DS7EXTNT[j]; + else + ext = &f7->DS7ADEXT[j-5]; + + if (((ext->a > 0) && (last->a == 0)) + || ((ext->a > 0) && (ext->a < last->a))) + { + tmp.a = last->a; + tmp.b = last->b; + last->a = ext->a; + last->b = ext->b; + ext->a = tmp.a; + ext->b = tmp.b; + } + } + } +} + +/* + * add a free space extent description to the VTOC FMT7 DSCB + */ +void +vtoc_update_format7_label_add (format7_label_t *f7, int verbose, + u_int32_t a, u_int32_t b) +{ + PDEBUG + ds7ext_t *ext = NULL, *tmp = NULL; + int i; + + for (i=0; i<16; i++) { + if (i<5) + ext = &f7->DS7EXTNT[i]; + else + ext = &f7->DS7ADEXT[i-5]; + + if (((a < ext->a) && (b > ext->a) && (b < ext->b)) + || ((a > ext->a) && (a < ext->b) && (b > ext->b))) + { + puts ("BUG: overlapping free space extents " + "in FMT7 DSCB!\nexiting..."); + exit(EXIT_FAILURE); + } + + if ((ext->a + ext->b) == 0x00000000) { + ext->a = a; + ext->b = b; + tmp = ext; + + if (verbose) + puts ("FMT7 add extent: add new extent"); + + break; + } + } + + if (tmp == NULL) { + /* BUG: no free extent found */ + puts ("BUG: no free FMT7 DSCB extent found!\nexiting..."); + exit(EXIT_FAILURE); + } + + for (i=0; i<16; i++) { + if (i<5) + ext = &f7->DS7EXTNT[i]; + else + ext = &f7->DS7ADEXT[i-5]; + + if ((ext->a + ext->b) == 0x00000000) + continue; + + if (ext->b == tmp->a) { + /* this extent precedes the new one */ + ext->b = tmp->b; + bzero(tmp, sizeof(ds7ext_t)); + tmp = ext; + + if (verbose) + puts ("FMT7 add extent: " + "merge with predecessor"); + + i = -1; + continue; + } + + if (ext->a == tmp->b) { + /* this extent succeeds the new one */ + ext->a = tmp->a; + bzero(tmp, sizeof(ds7ext_t)); + tmp = ext; + + if (verbose) + puts ("FMT7 add extent: merge with successor"); + + i = -1; + continue; + } + } +} + +/* + * remove a free space extent description from the VTOC FMT7 DSCB + */ +void +vtoc_update_format7_label_del (format7_label_t *f7, int verbose, + u_int32_t a, u_int32_t b) +{ + PDEBUG + ds7ext_t *ext; + int i, counter=0; + + for (i=0; i<16; i++) { + if (i<5) + ext = &f7->DS7EXTNT[i]; + else + ext = &f7->DS7ADEXT[i-5]; + + if ((a == ext->a) && (b == ext->b)) { + /* fills up whole free space gap */ + bzero(ext, sizeof(ds7ext_t)); + + if (verbose) + puts ("FMT7 del extent: fills whole gap"); + + counter++; + break; + } + + if ((a == ext->a) && (b < ext->b)) { + /* left-bounded in free space gap */ + ext->a = b; + + if (verbose) + puts ("FMT7 add extent: left-bounded"); + + counter++; + break; + } + + if ((a > ext->a) && (b == ext->b)) { + /* right-bounded in free space gap */ + ext->b = a; + + if (verbose) + puts ("FMT7 add extent: right-bounded"); + + counter++; + break; + } + + if ((a > ext->a) && (b < ext->b)) { + /* partition devides free space into 2 pieces */ + vtoc_update_format7_label_add(f7, verbose, b, ext->b); + ext->b = a; + + if (verbose) + puts ("FMT7 add extent: 2 pieces"); + + counter++; + break; + } + + if (((a < ext->a) && (b > ext->a)) || ((a < ext->b) && (b > ext->b))) { + puts ("BUG: specified free space extent for deleting " + "doesn't match free space currently shown in " + "FMT7 DSCB!\nexiting..."); + printf ("%d %d %d %d\n", a, b, ext->a, ext->b); + exit(EXIT_FAILURE); + } + } + + if (counter > 0) + return; + + puts ("BUG: specified free space extent for " + "deleting not found in FMT7 DSCB!\n" + "exiting..."); + exit(EXIT_FAILURE); +} + +void +vtoc_set_freespace(format4_label_t *f4, format5_label_t *f5, + format7_label_t *f7, char ch, int verbose, + u_int32_t start, u_int32_t stop, u_int32_t cyl, + u_int32_t trk) +{ + PDEBUG + if ((cyl * trk) > BIG_DISK_SIZE) { + if (ch == '+') + vtoc_update_format7_label_add(f7, verbose, start, + /* ds7ext RTA + 1 */ + stop + 1); + else if (ch == '-') + vtoc_update_format7_label_del(f7, verbose, start, + /* ds7ext RTA + 1 */ + stop + 1); + else + puts ("BUG: syntax error in vtoc_set_freespace call"); + + vtoc_reorganize_FMT7_extents (f7); + + f4->DS4VTOCI = 0xa0; + f4->DS4EFLVL = 0x07; + vtoc_set_cchhb(&f4->DS4EFPTR, 0x0000, 0x0001, 0x03); + } else { + u_int16_t x,y; + u_int8_t z; + + x = (u_int16_t) start; + y = (u_int16_t) ((stop - start + 1) / trk); + z = (u_int8_t) ((stop - start + 1) % trk); + + if (ch == '+') + vtoc_update_format5_label_add(f5, verbose, trk, x, y, z); + else if (ch == '-') + vtoc_update_format5_label_del(f5, verbose, trk, x, y, z); + else + puts ("BUG: syntax error in vtoc_set_freespace call"); + + vtoc_reorganize_FMT5_extents (f5); + } +} diff --git a/jni/parted/libparted/libparted.c b/jni/parted/libparted/libparted.c new file mode 100755 index 0000000..204ce00 --- /dev/null +++ b/jni/parted/libparted/libparted.c @@ -0,0 +1,262 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include +#include "configmake.h" + +#include +#include + +#include "architecture.h" + +#if ENABLE_NLS +# include +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +/* ped_malloc() debugging. Stick the address and size of memory blocks that + * weren't free()d in here, and an exception will be thrown when it is + * allocated. That way, you can find out what, exactly, the allocated thing + * is, and where it is created. + */ +typedef struct +{ + void* pointer; + size_t size; +} pointer_size_type; + +/* IMHO, none of the DEBUG-related code below is useful, and the + ped_malloc memset code is actually quite harmful: it masked at + least two nasty bugs that were fixed in June of 2007. */ +#undef DEBUG +#ifdef DEBUG +static pointer_size_type dodgy_malloc_list[] = { + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0} +}; + +static int dodgy_memory_active[100]; +#endif /* DEBUG */ + +extern void ped_disk_aix_init (); +extern void ped_disk_bsd_init (); +extern void ped_disk_dvh_init (); +extern void ped_disk_gpt_init (); +extern void ped_disk_loop_init (); +extern void ped_disk_mac_init (); +extern void ped_disk_msdos_init (); +extern void ped_disk_pc98_init (); +extern void ped_disk_sun_init (); +extern void ped_disk_amiga_init (); +extern void ped_disk_dasd_init (); +extern void ped_disk_atari_init (); + +static void +init_disk_types () +{ + /* Note that probing is done in the reverse order of init */ + ped_disk_loop_init (); /* must be last in the probe list */ + +#if defined __s390__ || defined __s390x__ + ped_disk_dasd_init(); +#endif + ped_disk_atari_init (); /* easy false positives, so probe others first */ + ped_disk_sun_init (); +#ifdef ENABLE_PC98 + ped_disk_pc98_init (); +#endif + ped_disk_msdos_init (); + ped_disk_mac_init (); + ped_disk_gpt_init (); + ped_disk_dvh_init (); + ped_disk_bsd_init (); + ped_disk_amiga_init (); + ped_disk_aix_init (); +} + +extern void ped_file_system_amiga_init (void); +extern void ped_file_system_xfs_init (void); +extern void ped_file_system_ufs_init (void); +extern void ped_file_system_reiserfs_init (void); +extern void ped_file_system_ntfs_init (void); +extern void ped_file_system_linux_swap_init (void); +extern void ped_file_system_jfs_init (void); +extern void ped_file_system_hfs_init (void); +extern void ped_file_system_fat_init (void); +extern void ped_file_system_f2fs_init (void); +extern void ped_file_system_ext2_init (void); +extern void ped_file_system_nilfs2_init (void); +extern void ped_file_system_btrfs_init (void); +extern void ped_file_system_udf_init (void); + +static void +init_file_system_types () +{ + ped_file_system_amiga_init (); + ped_file_system_xfs_init (); + ped_file_system_ufs_init (); + ped_file_system_reiserfs_init (); + ped_file_system_ntfs_init (); + ped_file_system_linux_swap_init (); + ped_file_system_jfs_init (); + ped_file_system_hfs_init (); + ped_file_system_fat_init (); + ped_file_system_f2fs_init (); + ped_file_system_ext2_init (); + ped_file_system_nilfs2_init (); + ped_file_system_btrfs_init (); + ped_file_system_udf_init (); +} + +extern void ped_disk_aix_done (); +extern void ped_disk_bsd_done (); +extern void ped_disk_dvh_done (); +extern void ped_disk_gpt_done (); +extern void ped_disk_loop_done (); +extern void ped_disk_mac_done (); +extern void ped_disk_msdos_done (); +extern void ped_disk_pc98_done (); +extern void ped_disk_sun_done (); +extern void ped_disk_amiga_done (); +extern void ped_disk_dasd_done (); +extern void ped_disk_atari_done (); + +static void +done_disk_types () +{ +#if defined __s390__ || __s390x__ + ped_disk_dasd_done (); +#endif + ped_disk_sun_done (); +#ifdef ENABLE_PC98 + ped_disk_pc98_done (); +#endif + ped_disk_msdos_done (); + ped_disk_mac_done (); + ped_disk_loop_done (); + ped_disk_gpt_done (); + ped_disk_dvh_done (); + ped_disk_bsd_done (); + ped_disk_amiga_done (); + ped_disk_aix_done (); + ped_disk_atari_done (); +} + +static void _init() __attribute__ ((constructor)); + +static void +_init() +{ +#ifdef ENABLE_NLS + bindtextdomain (PACKAGE, LOCALEDIR); +#endif + + init_disk_types (); + init_file_system_types (); + ped_set_architecture (); +#ifdef DEBUG + memset (dodgy_memory_active, 0, sizeof (dodgy_memory_active)); +#endif +} + +extern void ped_file_system_nilfs2_done (void); +extern void ped_file_system_ext2_done (void); +extern void ped_file_system_fat_done (void); +extern void ped_file_system_f2fs_done (void); +extern void ped_file_system_hfs_done (void); +extern void ped_file_system_jfs_done (void); +extern void ped_file_system_linux_swap_done (void); +extern void ped_file_system_ntfs_done (void); +extern void ped_file_system_reiserfs_done (void); +extern void ped_file_system_ufs_done (void); +extern void ped_file_system_xfs_done (void); +extern void ped_file_system_amiga_done (void); +extern void ped_file_system_btrfs_done (void); +extern void ped_file_system_udf_done (void); + +static void +done_file_system_types () +{ + ped_file_system_nilfs2_done (); + ped_file_system_ext2_done (); + ped_file_system_f2fs_done (); + ped_file_system_fat_done (); + ped_file_system_hfs_done (); + ped_file_system_jfs_done (); + ped_file_system_linux_swap_done (); + ped_file_system_ntfs_done (); + ped_file_system_reiserfs_done (); + ped_file_system_ufs_done (); + ped_file_system_xfs_done (); + ped_file_system_amiga_done (); + ped_file_system_btrfs_done (); + ped_file_system_udf_done (); +} + +static void _done() __attribute__ ((destructor)); + +static void +_done() +{ + ped_device_free_all (); + done_disk_types (); + done_file_system_types (); +} + +const char* +ped_get_version () +{ + return VERSION; +} + +void* +ped_malloc (size_t size) +{ + void* mem; + + mem = (void*) malloc (size); + if (!mem) { + ped_exception_throw (PED_EXCEPTION_FATAL, PED_EXCEPTION_CANCEL, + _("Out of memory.")); + return NULL; + } + + return mem; +} + + +void* ped_calloc (size_t size) +{ + void* buf = ped_malloc (size); + + memset (buf, 0, size); + + return buf; +} diff --git a/jni/parted/libparted/mbr.s b/jni/parted/libparted/mbr.s new file mode 100755 index 0000000..8ac2240 --- /dev/null +++ b/jni/parted/libparted/mbr.s @@ -0,0 +1,85 @@ +; libparted - a library for manipulating disk partitions +; Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software +; Foundation, Inc. +; +; 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 3 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, see . + +; NOTE: I build this with: +; $ as86 -b /dev/stdout mbr.s | hexdump -e '8/1 "0x%02x, " "\n"' +; +; The build isn't done automagically by make, because as86 may not be on many +; machines (particularly non-x86). Also, it seems rather difficult to get +; as86 to build object files that can be linked, especially as it's 16 bit +; code... + +USE16 + +; This code, plus the partition table is loaded into 0000:7C00 by the BIOS + +.text + +; set top of stack to 1000:B000 + + cli + + mov ax, #0x1000 + mov ss, ax + mov sp, #0xB000 + + mov ax, #0x0000 + mov ds, ax + mov es, ax + + sti + +; Copy what the BIOS loaded (i.e. the MBR + head of partition table) from +; 0000:7c00 to 0000:0600 + + mov si, #0x7c00 + mov di, #0x0600 + mov cx, #0x200 + rep + movsb + +; Jump to the copy of the MBR + + jmp 0x0000:find_boot_partition + 0x0600 + +find_boot_partition: + mov si, #0x07BE + +check_next_bootable: + cmp [si], al + jnz found_bootable + add si, #0x0010 + cmp si, #0x07FE + jnz check_next_bootable + jmp error + +found_bootable: + +; Load in the boot sector at 0000:7c00 + + mov ah, #2 ; BIOS command (read) + mov al, #1 ; count + mov bx, #0x7c00 ; destination pointer + mov dl, #0x80 ; drive + mov dh, byte ptr [si + 1] ; head + mov cx, word ptr [si + 2] ; sector / cylinder + int #0x13 ; BIOS read interrupt + + jmp 0x0000:0x7c00 ; hand control to boot sector + +error: + jmp error diff --git a/jni/parted/libparted/timer.c b/jni/parted/libparted/timer.c new file mode 100755 index 0000000..b913150 --- /dev/null +++ b/jni/parted/libparted/timer.c @@ -0,0 +1,244 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2001, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +/** \file timer.c */ + +/** + * \addtogroup PedTimer + * + * \brief A PedTimer keeps track of the progress of a single (possibly + * compound) operation. + * + * The user of libparted constructs a PedTimer, and passes it to libparted + * functions that are likely to be expensive operations + * (like ped_file_system_resize). Use of timers is optional... you may + * pass NULL instead. + * + * When you create a PedTimer, you must specify a timer handler function. + * This will be called when there's an update on how work is progressing. + * + * Timers may be nested. When a timer is constructed, you can choose + * to assign it a parent, along with an estimate of what proportion of + * the total (parent's) time will be used in the nested operation. In + * this case, the nested timer's handler is internal to libparted, + * and simply updates the parent's progress, and calls its handler. + * + * @{ + */ + + +#include +#include +#include + +typedef struct { + PedTimer* parent; + float nest_frac; + float start_frac; +} NestedContext; + + +/** + * \brief Creates a timer. + * + * Context will be passed in the \p context + * argument to the \p handler, when it is invoked. + * + * \return a new PedTimer + */ +PedTimer* +ped_timer_new (PedTimerHandler* handler, void* context) +{ + PedTimer* timer; + + PED_ASSERT (handler != NULL); + + timer = (PedTimer*) ped_malloc (sizeof (PedTimer)); + if (!timer) + return NULL; + + timer->handler = handler; + timer->context = context; + ped_timer_reset (timer); + return timer; +} + + +/** + * \brief Destroys a \p timer. + */ +void +ped_timer_destroy (PedTimer* timer) +{ + if (!timer) + return; + + free (timer); +} + +/* This function is used by ped_timer_new_nested() as the timer->handler + * function. + */ +static void +_nest_handler (PedTimer* timer, void* context) +{ + NestedContext* ncontext = (NestedContext*) context; + + ped_timer_update ( + ncontext->parent, + ncontext->start_frac + ncontext->nest_frac * timer->frac); +} + + +/** + * \brief Creates a new nested timer. + * + * This function creates a "nested" timer that describes the progress + * of a subtask. \p parent is the parent timer, and \p nested_frac is + * the estimated proportion (between 0 and 1) of the time that will be + * spent doing the nested timer's operation. The timer should only be + * constructed immediately prior to starting the nested operation. + * (It will be inaccurate, otherwise). + * Updates to the progress of the subtask are propagated + * back through to the parent task's timer. + * + * \return nested timer + */ +PedTimer* +ped_timer_new_nested (PedTimer* parent, float nest_frac) +{ + NestedContext* context; + + if (!parent) + return NULL; + + PED_ASSERT (nest_frac >= 0.0f); + PED_ASSERT (nest_frac <= 1.0f); + + context = (NestedContext*) ped_malloc (sizeof (NestedContext)); + if (!context) + return NULL; + context->parent = parent; + context->nest_frac = nest_frac; + context->start_frac = parent->frac; + + return ped_timer_new (_nest_handler, context); +} + +/** + * \brief Destroys a nested \p timer. + */ +void +ped_timer_destroy_nested (PedTimer* timer) +{ + if (!timer) + return; + + free (timer->context); + ped_timer_destroy (timer); +} + +/** + * \internal + * + * \brief This function calls the update handler, making sure that it has + * the latest time. + * + * First it updates \p timer->now and recomputes \p timer->predicted_end, + * and then calls the handler. + */ +void +ped_timer_touch (PedTimer* timer) +{ + if (!timer) + return; + + timer->now = time (NULL); + if (timer->now > timer->predicted_end) + timer->predicted_end = timer->now; + + timer->handler (timer, timer->context); +} + +/** + * \internal + * + * \brief This function sets the \p timer into a "start of task" position. + * + * It resets the \p timer, by setting \p timer->start and \p timer->now + * to the current time. + */ +void +ped_timer_reset (PedTimer* timer) +{ + if (!timer) + return; + + timer->start = timer->now = timer->predicted_end = time (NULL); + timer->state_name = NULL; + timer->frac = 0; + + ped_timer_touch (timer); +} + +/** + * \internal + * + * \brief This function tells a \p timer what fraction \p frac of the task + * has been completed. + * + * Sets the new \p timer->frac, and calls ped_timer_touch(). + */ +void +ped_timer_update (PedTimer* timer, float frac) +{ + if (!timer) + return; + + timer->now = time (NULL); + timer->frac = frac; + + if (frac) + timer->predicted_end + = timer->start + + (long) ((timer->now - timer->start) / frac); + + ped_timer_touch (timer); +} + +/** + * \internal + * + * \brief This function changes the description of the current task that the + * \p timer describes. + * + * Sets a new name - \p state_name - for the current "phase" of the operation, + * and calls ped_timer_touch(). + */ +void +ped_timer_set_state_name (PedTimer* timer, const char* state_name) +{ + if (!timer) + return; + + timer->state_name = state_name; + ped_timer_touch (timer); +} + +/** @} */ diff --git a/jni/parted/libparted/unit.c b/jni/parted/libparted/unit.c new file mode 100755 index 0000000..a63b98d --- /dev/null +++ b/jni/parted/libparted/unit.c @@ -0,0 +1,586 @@ +/* + libparted - a library for manipulating disk partitions + Copyright (C) 2005, 2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +/** \file unit.c */ + +/** + * \addtogroup PedUnit + * + * \brief The PedUnit module provides a standard mechanism for describing + * and parsing locations within devices in human-friendly plain text. + * + * Internally, libparted uses PedSector (which is typedef'ed to be long long + * in ) to describe device locations such as the start and + * end of partitions. However, sector numbers are often long and unintuitive. + * For example, my extended partition starts at sector 208845. PedUnit allows + * this location to be represented in more intutitive ways, including "106Mb", + * "0Gb" and "0%", as well as "208845s". PedUnit aims to provide facilities + * to provide a consistent system for describing device locations all + * throughout libparted. + * + * PedUnit provides two basic services: converting a PedSector into a text + * representation, and parsing a text representation into a PedSector. + * PedUnit currently supports these units: + * + * sectors, bytes, kilobytes, megabytes, gigabytes, terabytes, compact, + * cylinder and percent. + * + * PedUnit has a global variable that contains the default unit for all + * conversions. + * + * @{ + */ + + + + +#include +#include +#include +#include + +#include +#include +#include + +#define N_(String) String +#if ENABLE_NLS +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + + +static PedUnit default_unit = PED_UNIT_COMPACT; +static const char* unit_names[] = { + "s", + "B", + "kB", + "MB", + "GB", + "TB", + "compact", + "cyl", + "chs", + "%", + "kiB", + "MiB", + "GiB", + "TiB" +}; + + +/** + * \brief Set the default \p unit used by subsequent calls to the PedUnit API. + * + * In particular, this affects how locations inside error messages + * (exceptions) are displayed. + */ +void +ped_unit_set_default (PedUnit unit) +{ + default_unit = unit; +} + + +/** + * \brief Get the current default unit. + */ +PedUnit _GL_ATTRIBUTE_PURE +ped_unit_get_default () +{ + return default_unit; +} + +/** + * Get the byte size of a given \p unit. + */ +long long +ped_unit_get_size (const PedDevice* dev, PedUnit unit) +{ + PedSector cyl_size = dev->bios_geom.heads * dev->bios_geom.sectors; + + switch (unit) { + case PED_UNIT_SECTOR: return dev->sector_size; + case PED_UNIT_BYTE: return 1; + case PED_UNIT_KILOBYTE: return PED_KILOBYTE_SIZE; + case PED_UNIT_MEGABYTE: return PED_MEGABYTE_SIZE; + case PED_UNIT_GIGABYTE: return PED_GIGABYTE_SIZE; + case PED_UNIT_TERABYTE: return PED_TERABYTE_SIZE; + case PED_UNIT_KIBIBYTE: return PED_KIBIBYTE_SIZE; + case PED_UNIT_MEBIBYTE: return PED_MEBIBYTE_SIZE; + case PED_UNIT_GIBIBYTE: return PED_GIBIBYTE_SIZE; + case PED_UNIT_TEBIBYTE: return PED_TEBIBYTE_SIZE; + case PED_UNIT_CYLINDER: return cyl_size * dev->sector_size; + case PED_UNIT_CHS: return dev->sector_size; + + case PED_UNIT_PERCENT: + return dev->length * dev->sector_size / 100; + + case PED_UNIT_COMPACT: + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Cannot get unit size for special unit " + "'COMPACT'.")); + return 0; + } + + /* never reached */ + PED_ASSERT(0); + return 0; +} + +/** + * Get a textual (non-internationalized) representation of a \p unit. + * + * For example, the textual representation of PED_UNIT_SECTOR is "s". + */ +const char* +ped_unit_get_name (PedUnit unit) +{ + return unit_names[unit]; +} + +/** + * Get a unit based on its textual representation: \p unit_name. + * + * For example, ped_unit_get_by_name("Mb") returns PED_UNIT_MEGABYTE. + */ +PedUnit +ped_unit_get_by_name (const char* unit_name) +{ + PedUnit unit; + for (unit = PED_UNIT_FIRST; unit <= PED_UNIT_LAST; unit++) { + if (!strcasecmp (unit_names[unit], unit_name)) + return unit; + } + return -1; +} + +static char* +ped_strdup (const char *str) +{ + char *result; + result = ped_malloc (strlen (str) + 1); + if (!result) + return NULL; + strcpy (result, str); + return result; +} + +/** + * \brief Get a string that describes the location of the \p byte on + * device \p dev. + * + * The string is described with the desired \p unit. + * The returned string must be freed with free(). + */ +char* +ped_unit_format_custom_byte (const PedDevice* dev, PedSector byte, PedUnit unit) +{ + char buf[100]; + PedSector sector = byte / dev->sector_size; + double d, w; + int p; + + PED_ASSERT (dev != NULL); + + /* CHS has a special comma-separated format. */ + if (unit == PED_UNIT_CHS) { + const PedCHSGeometry *chs = &dev->bios_geom; + snprintf (buf, 100, "%lld,%lld,%lld", + sector / chs->sectors / chs->heads, + (sector / chs->sectors) % chs->heads, + sector % chs->sectors); + return ped_strdup (buf); + } + + /* Cylinders, sectors and bytes should be rounded down... */ + if (unit == PED_UNIT_CYLINDER + || unit == PED_UNIT_SECTOR + || unit == PED_UNIT_BYTE) { + snprintf (buf, 100, "%lld%s", + byte / ped_unit_get_size (dev, unit), + ped_unit_get_name (unit)); + return ped_strdup (buf); + } + + if (unit == PED_UNIT_COMPACT) { + if (byte >= 10LL * PED_TERABYTE_SIZE) + unit = PED_UNIT_TERABYTE; + else if (byte >= 10LL * PED_GIGABYTE_SIZE) + unit = PED_UNIT_GIGABYTE; + else if (byte >= 10LL * PED_MEGABYTE_SIZE) + unit = PED_UNIT_MEGABYTE; + else if (byte >= 10LL * PED_KILOBYTE_SIZE) + unit = PED_UNIT_KILOBYTE; + else + unit = PED_UNIT_BYTE; + } + + /* IEEE754 says that 100.5 has to be rounded to 100 (by printf) */ + /* but 101.5 has to be rounded to 102... so we multiply by 1+E. */ + /* This just divide by 2 the natural IEEE754 extended precision */ + /* and won't cause any trouble before 1000 TB */ + d = ((double)byte / ped_unit_get_size (dev, unit)) + * (1. + DBL_EPSILON); + w = d + ( (d < 10. ) ? 0.005 : + (d < 100.) ? 0.05 : + 0.5 ); + p = (w < 10. ) ? 2 : + (w < 100.) ? 1 : + 0 ; + +#ifdef __BEOS__ + snprintf (buf, 100, "%.*f%s", p, d, ped_unit_get_name(unit)); +#else + snprintf (buf, 100, "%1$.*2$f%3$s", d, p, ped_unit_get_name (unit)); +#endif + + return ped_strdup (buf); +} + +/** + * \brief Get a string that describes the location of the \p byte on + * device \p dev. + * + * The string is described with the default unit, which is set + * by ped_unit_set_default(). + * The returned string must be freed with free(). + */ +char* +ped_unit_format_byte (const PedDevice* dev, PedSector byte) +{ + PED_ASSERT (dev != NULL); + return ped_unit_format_custom_byte (dev, byte, default_unit); +} + +/** + * \brief Get a string that describes the location \p sector on device \p dev. + * + * The string is described with the desired \p unit. + * The returned string must be freed with free(). + */ +char* +ped_unit_format_custom (const PedDevice* dev, PedSector sector, PedUnit unit) +{ + PED_ASSERT (dev != NULL); + return ped_unit_format_custom_byte(dev, sector*dev->sector_size, unit); +} + +/** + * \brief Get a string that describes the location \p sector on device \p dev. + * + * The string is described with the default unit, which is set + * by ped_unit_set_default(). + * The returned string must be freed with free(). + */ +char* +ped_unit_format (const PedDevice* dev, PedSector sector) +{ + PED_ASSERT (dev != NULL); + return ped_unit_format_custom_byte (dev, sector * dev->sector_size, + default_unit); +} + +/** + * If \p str contains a valid description of a location on \p dev, + * then \p *sector is modified to describe the location and a geometry + * is created in \p *range describing a 2 units large area centered on + * \p *sector. If the \p range as described here would be partially outside + * the device \p dev, the geometry returned is the intersection between the + * former and the whole device geometry. If no units are specified, then the + * default unit is assumed. + * + * \return \c 1 if \p str is a valid location description, \c 0 otherwise + */ +int +ped_unit_parse (const char* str, const PedDevice* dev, PedSector *sector, + PedGeometry** range) +{ + return ped_unit_parse_custom (str, dev, default_unit, sector, range); +} + +/* Inefficiently removes all spaces from a string, in-place. */ +static void +strip_string (char* str) +{ + int i; + + for (i = 0; str[i] != 0; i++) { + if (isspace (str[i])) { + int j; + for (j = i + 1; str[j] != 0; j++) + str[j - 1] = str[j]; + } + } +} + + +/* Find non-number suffix. Eg: find_suffix("32Mb") returns a pointer to + * "Mb". */ +static char* _GL_ATTRIBUTE_PURE +find_suffix (const char* str) +{ + while (str[0] != 0 && (isdigit (str[0]) || strchr(",.-", str[0]))) + str++; + return (char *) str; +} + +static void +remove_punct (char* str) +{ + int i = 0; + + for (i = 0; str[i]; i++) { + if (ispunct (str[i])) + str[i] = ' '; + } +} + +static int _GL_ATTRIBUTE_PURE +is_chs (const char* str) +{ + int punct_count = 0; + int i = 0; + + for (i = 0; str[i]; i++) + punct_count += ispunct (str[i]) != 0; + return punct_count == 2; +} + +static int +parse_chs (const char* str, const PedDevice* dev, PedSector* sector, + PedGeometry** range) +{ + PedSector cyl_size = dev->bios_geom.heads * dev->bios_geom.sectors; + PedCHSGeometry chs; + + char* copy = ped_strdup (str); + if (!copy) + return 0; + strip_string (copy); + remove_punct (copy); + + if (sscanf (copy, "%d %d %d", + &chs.cylinders, &chs.heads, &chs.sectors) != 3) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("\"%s\" has invalid syntax for locations."), + copy); + goto error_free_copy; + } + + if (chs.heads >= dev->bios_geom.heads) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("The maximum head value is %d."), + dev->bios_geom.heads - 1); + goto error_free_copy; + } + if (chs.sectors >= dev->bios_geom.sectors) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("The maximum sector value is %d."), + dev->bios_geom.sectors - 1); + goto error_free_copy; + } + + *sector = 1LL * chs.cylinders * cyl_size + + chs.heads * dev->bios_geom.sectors + + chs.sectors; + + if (*sector >= dev->length) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("The location %s is outside of the " + "device %s."), + str, dev->path); + goto error_free_copy; + } + if (range) + *range = ped_geometry_new (dev, *sector, 1); + free (copy); + return !range || *range != NULL; + +error_free_copy: + free (copy); + *sector = 0; + if (range) + *range = NULL; + return 0; +} + +static PedSector +clip (const PedDevice* dev, PedSector sector) +{ + if (sector < 0) + return 0; + if (sector > dev->length - 1) + return dev->length - 1; + return sector; +} + +static PedGeometry* +geometry_from_centre_radius (const PedDevice* dev, + PedSector sector, PedSector radius) +{ + PedSector start = clip (dev, sector - radius); + PedSector end = clip (dev, sector + radius); + if (sector - end > radius || start - sector > radius) + return NULL; + return ped_geometry_new (dev, start, end - start + 1); +} + +static PedUnit +parse_unit_suffix (const char* suffix, PedUnit suggested_unit) +{ + if (strlen (suffix) > 1 && tolower (suffix[1]) == 'i') { + switch (tolower (suffix[0])) { + case 'k': return PED_UNIT_KIBIBYTE; + case 'm': return PED_UNIT_MEBIBYTE; + case 'g': return PED_UNIT_GIBIBYTE; + case 't': return PED_UNIT_TEBIBYTE; + } + } else if (strlen (suffix) > 0) { + switch (tolower (suffix[0])) { + case 's': return PED_UNIT_SECTOR; + case 'b': return PED_UNIT_BYTE; + case 'k': return PED_UNIT_KILOBYTE; + case 'm': return PED_UNIT_MEGABYTE; + case 'g': return PED_UNIT_GIGABYTE; + case 't': return PED_UNIT_TERABYTE; + case 'c': return PED_UNIT_CYLINDER; + case '%': return PED_UNIT_PERCENT; + } + } + + if (suggested_unit == PED_UNIT_COMPACT) { + if (default_unit == PED_UNIT_COMPACT) + return PED_UNIT_MEGABYTE; + else + return default_unit; + } + + return suggested_unit; +} + +/** + * If \p str contains a valid description of a location on \p dev, then + * \p *sector is modified to describe the location and a geometry is created + * in \p *range describing a 2 units large area centered on \p *sector. If the + * \p range as described here would be partially outside the device \p dev, the + * geometry returned is the intersection between the former and the whole + * device geometry. If no units are specified, then the default unit is + * assumed. + * + * \throws PED_EXCEPTION_ERROR if \p str contains invalid description of a + * location + * \throws PED_EXCEPTION_ERROR if location described by \p str + * is outside of the device \p dev->path + * + * \return \c 1 if \p str is a valid location description, \c 0 otherwise. + */ +int +ped_unit_parse_custom (const char* str, const PedDevice* dev, PedUnit unit, + PedSector* sector, PedGeometry** range) +{ + char* copy; + char* suffix; + double num; + long long unit_size; + PedSector radius; + + if (is_chs (str)) + return parse_chs (str, dev, sector, range); + + copy = ped_strdup (str); + if (!copy) + goto error; + strip_string (copy); + + suffix = find_suffix (copy); + unit = parse_unit_suffix (suffix, unit); + suffix[0] = 0; + + if (sscanf (copy, "%lf", &num) != 1) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Invalid number.")); + goto error_free_copy; + } + if (num > 0 && num < 1) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Use a smaller unit instead of a value < 1")); + goto error_free_copy; + } + + unit_size = ped_unit_get_size (dev, unit); + switch (unit) { + /* If the user specifies the address using IEC units e.g., 4MiB, as in + parted -s -- $dev mklabel gpt mkpart P-NAME 4MiB -34s + do not use size of the unit as the range. Rather, presume that they + are specifying precisely the starting or ending number, + and treat "4MiB" just as we would treat "4194304B". */ + case PED_UNIT_KIBIBYTE: + case PED_UNIT_MEBIBYTE: + case PED_UNIT_GIBIBYTE: + case PED_UNIT_TEBIBYTE: + radius = 0; + break; + default: + radius = (ped_div_round_up (unit_size, dev->sector_size) / 2) - 1; + if (radius < 0) + radius = 0; + } + + *sector = num * unit_size / dev->sector_size; + /* negative numbers count from the end */ + if (copy[0] == '-') + *sector += dev->length; + if (range) { + *range = geometry_from_centre_radius (dev, *sector, radius); + if (!*range) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("The location %s is outside of the " + "device %s."), + str, dev->path); + goto error_free_copy; + } + } + *sector = clip (dev, *sector); + + free (copy); + return 1; + +error_free_copy: + free (copy); +error: + *sector = 0; + if (range) + *range = NULL; + return 0; +} + + +/** @} */ diff --git a/jni/parted/parted/command.c b/jni/parted/parted/command.c new file mode 100755 index 0000000..41031ee --- /dev/null +++ b/jni/parted/parted/command.c @@ -0,0 +1,143 @@ +/* + parted - a frontend to libparted + Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include +#include "command.h" +#include "ui.h" + +#include + +#include +#include +#include "xalloc.h" + +Command* +command_create (const StrList* names, + int (*method) (PedDevice** dev, PedDisk** diskp), + const StrList* summary, + const StrList* help, + const int non_interactive) +{ + Command* cmd; + + cmd = xmalloc (sizeof (Command)); + + if (non_interactive) + cmd->non_interactive = 1; + else + cmd->non_interactive = 0; + + cmd->names = (StrList*) names; + cmd->method = method; + cmd->summary = (StrList*) summary; + cmd->help = (StrList*) help; + + return cmd; +} + +void +command_destroy (Command* cmd) +{ + str_list_destroy (cmd->names); + str_list_destroy (cmd->summary); + str_list_destroy (cmd->help); + free (cmd); +} + +void +command_register (Command** list, Command* cmd) +{ + int i; + + for (i = 0; list [i]; i++); + + list [i] = cmd; + list [i + 1] = (Command*) NULL; +} + +Command* +command_get (Command** list, char* name) +{ + int i; + int partial_match = -1; + int ambiguous = 0; + + if (!name) + return NULL; + + for (i=0; list [i]; i++) { + switch (str_list_match_any (list [i]->names, name)) { + case 2: + return list [i]; + + case 1: + if (!ambiguous) { + if (partial_match == -1) { + partial_match = i; + } else { + partial_match = -1; + ambiguous = 1; + } + } + } + } + + if (partial_match == -1) + return NULL; + else + return list [partial_match]; +} + +StrList* +command_get_names (Command** list) +{ + Command** walk; + StrList* result = NULL; + + for (walk = list; *walk; walk++) + result = str_list_join (result, + str_list_duplicate ((*walk)->names)); + return result; +} + +void +command_print_summary (Command* cmd) +{ + if (cmd->summary == NULL) + return; + fputs (" ", stdout); + str_list_print_wrap (cmd->summary, screen_width(), 2, 8, stdout); + putchar ('\n'); +} + +void +command_print_help (Command* cmd) +{ + command_print_summary (cmd); + if (cmd->help) { + fputs ("\n\t", stdout); + str_list_print_wrap (cmd->help, screen_width(), 8, 8, stdout); + } +} + +int +command_run (Command* cmd, PedDevice** dev, PedDisk** diskp) +{ + return cmd->method (dev, diskp); +} diff --git a/jni/parted/parted/command.h b/jni/parted/parted/command.h new file mode 100755 index 0000000..c307dca --- /dev/null +++ b/jni/parted/parted/command.h @@ -0,0 +1,48 @@ +/* + parted - a frontend to libparted + Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef COMMAND_H_INCLUDED +#define COMMAND_H_INCLUDED + +#include +#include "strlist.h" + +typedef struct { + StrList* names; + int (*method) (PedDevice** dev, PedDisk** diskp); + StrList* summary; + StrList* help; + int non_interactive:1; +} Command; + +extern Command* command_create (const StrList* names, + int (*method) (PedDevice** dev, PedDisk** diskp), + const StrList* summary, + const StrList* help, + int non_interactive); +extern void command_destroy (Command* cmd); +void command_register (Command** list, Command* cmd); + +extern Command* command_get (Command** list, char* name); +extern StrList* command_get_names (Command** list); +extern void command_print_summary (Command* cmd); +extern void command_print_help (Command* cmd); +extern int command_run (Command* cmd, PedDevice** dev, PedDisk** diskp); + +#endif /* COMMAND_H_INCLUDED */ diff --git a/jni/parted/parted/jsonwrt.c b/jni/parted/parted/jsonwrt.c new file mode 100755 index 0000000..d562133 --- /dev/null +++ b/jni/parted/parted/jsonwrt.c @@ -0,0 +1,225 @@ +/* + * JSON output formatting functions. + * + * No copyright is claimed. This code is in the public domain; do with + * it what you wish. + * + * Written by Karel Zak + */ + +#include +#include +#include +#include +#include +#include +#include "jsonwrt.h" + +/* + * Requirements enumerated via testing (V8, Firefox, IE11): + * + * var charsToEscape = []; + * for (var i = 0; i < 65535; i += 1) { + * try { + * JSON.parse('{"sample": "' + String.fromCodePoint(i) + '"}'); + * } catch (e) { + * charsToEscape.push(i); + * } + * } + */ +static void fputs_quoted_case_json(const char *data, FILE *out, int dir) +{ + const char *p; + + fputc('"', out); + for (p = data; p && *p; p++) { + + const unsigned int c = (unsigned int) *p; + + /* From http://www.json.org + * + * The double-quote and backslashes would break out a string or + * init an escape sequence if not escaped. + * + * Note that single-quotes and forward slashes, while they're + * in the JSON spec, don't break double-quoted strings. + */ + if (c == '"' || c == '\\') { + fputc('\\', out); + fputc(c, out); + continue; + } + + /* All non-control characters OK; do the case swap as required. */ + if (c >= 0x20) { + /* + * Don't use locale sensitive ctype.h functions for regular + * ASCII chars, because for example with Turkish locale + * (aka LANG=tr_TR.UTF-8) toupper('I') returns 'I'. + */ + if (c <= 127) + fputc(dir == 1 ? c_toupper(c) : + dir == -1 ? c_tolower(c) : *p, out); + else + fputc(dir == 1 ? toupper(c) : + dir == -1 ? tolower(c) : *p, out); + continue; + } + + /* In addition, all chars under ' ' break Node's/V8/Chrome's, and + * Firefox's JSON.parse function + */ + switch (c) { + /* Handle short-hand cases to reduce output size. C + * has most of the same stuff here, so if there's an + * "Escape for C" function somewhere in the STL, we + * should probably be using it. + */ + case '\b': + fputs("\\b", out); + break; + case '\t': + fputs("\\t", out); + break; + case '\n': + fputs("\\n", out); + break; + case '\f': + fputs("\\f", out); + break; + case '\r': + fputs("\\r", out); + break; + default: + /* Other assorted control characters */ + fprintf(out, "\\u00%02x", c); + break; + } + } + fputc('"', out); +} + +#define fputs_quoted_json(_d, _o) fputs_quoted_case_json(_d, _o, 0) +#define fputs_quoted_json_upper(_d, _o) fputs_quoted_case_json(_d, _o, 1) +#define fputs_quoted_json_lower(_d, _o) fputs_quoted_case_json(_d, _o, -1) + +void ul_jsonwrt_init(struct ul_jsonwrt *fmt, FILE *out, int indent) +{ + fmt->out = out; + fmt->indent = indent; + fmt->after_close = 0; +} + +void ul_jsonwrt_indent(struct ul_jsonwrt *fmt) +{ + int i; + + for (i = 0; i < fmt->indent; i++) + fputs(" ", fmt->out); +} + +void ul_jsonwrt_open(struct ul_jsonwrt *fmt, const char *name, int type) +{ + if (name) { + if (fmt->after_close) + fputs(",\n", fmt->out); + ul_jsonwrt_indent(fmt); + fputs_quoted_json_lower(name, fmt->out); + } else { + if (fmt->after_close) + fputs(",", fmt->out); + else + ul_jsonwrt_indent(fmt); + } + + switch (type) { + case UL_JSON_OBJECT: + fputs(name ? ": {\n" : "{\n", fmt->out); + fmt->indent++; + break; + case UL_JSON_ARRAY: + fputs(name ? ": [\n" : "[\n", fmt->out); + fmt->indent++; + break; + case UL_JSON_VALUE: + fputs(name ? ": " : " ", fmt->out); + break; + } + fmt->after_close = 0; +} + +void ul_jsonwrt_close(struct ul_jsonwrt *fmt, int type) +{ + if (fmt->indent == 1) { + fputs("\n}\n", fmt->out); + fmt->indent--; + fmt->after_close = 1; + return; + } + assert(fmt->indent > 0); + + switch (type) { + case UL_JSON_OBJECT: + fmt->indent--; + fputc('\n', fmt->out); + ul_jsonwrt_indent(fmt); + fputs("}", fmt->out); + break; + case UL_JSON_ARRAY: + fmt->indent--; + fputc('\n', fmt->out); + ul_jsonwrt_indent(fmt); + fputs("]", fmt->out); + break; + case UL_JSON_VALUE: + break; + } + + fmt->after_close = 1; +} + +void ul_jsonwrt_value_raw(struct ul_jsonwrt *fmt, + const char *name, const char *data) +{ + ul_jsonwrt_value_open(fmt, name); + if (data && *data) + fputs(data, fmt->out); + else + fputs("null", fmt->out); + ul_jsonwrt_value_close(fmt); +} + +void ul_jsonwrt_value_s(struct ul_jsonwrt *fmt, + const char *name, const char *data) +{ + ul_jsonwrt_value_open(fmt, name); + if (data) + fputs_quoted_json(data, fmt->out); + else + fputs("null", fmt->out); + ul_jsonwrt_value_close(fmt); +} + +void ul_jsonwrt_value_u64(struct ul_jsonwrt *fmt, + const char *name, uint64_t data) +{ + ul_jsonwrt_value_open(fmt, name); + fprintf(fmt->out, "%"PRIu64, data); + ul_jsonwrt_value_close(fmt); +} + +void ul_jsonwrt_value_boolean(struct ul_jsonwrt *fmt, + const char *name, int data) +{ + ul_jsonwrt_value_open(fmt, name); + fputs(data ? "true" : "false", fmt->out); + ul_jsonwrt_value_close(fmt); +} + +void ul_jsonwrt_value_null(struct ul_jsonwrt *fmt, + const char *name) +{ + ul_jsonwrt_value_open(fmt, name); + fputs("null", fmt->out); + ul_jsonwrt_value_close(fmt); +} diff --git a/jni/parted/parted/jsonwrt.h b/jni/parted/parted/jsonwrt.h new file mode 100755 index 0000000..4587b60 --- /dev/null +++ b/jni/parted/parted/jsonwrt.h @@ -0,0 +1,46 @@ +#ifndef UTIL_LINUX_JSONWRT_H +#define UTIL_LINUX_JSONWRT_H + +enum { + UL_JSON_OBJECT, + UL_JSON_ARRAY, + UL_JSON_VALUE +}; + +struct ul_jsonwrt { + FILE *out; + int indent; + + unsigned int after_close :1; +}; + +void ul_jsonwrt_init(struct ul_jsonwrt *fmt, FILE *out, int indent); +void ul_jsonwrt_indent(struct ul_jsonwrt *fmt); +void ul_jsonwrt_open(struct ul_jsonwrt *fmt, const char *name, int type); +void ul_jsonwrt_close(struct ul_jsonwrt *fmt, int type); + +#define ul_jsonwrt_root_open(_f) ul_jsonwrt_open(_f, NULL, UL_JSON_OBJECT) +#define ul_jsonwrt_root_close(_f) ul_jsonwrt_close(_f, UL_JSON_OBJECT) + +#define ul_jsonwrt_array_open(_f, _n) ul_jsonwrt_open(_f, _n, UL_JSON_ARRAY) +#define ul_jsonwrt_array_close(_f) ul_jsonwrt_close(_f, UL_JSON_ARRAY) + +#define ul_jsonwrt_object_open(_f, _n) ul_jsonwrt_open(_f, _n, UL_JSON_OBJECT) +#define ul_jsonwrt_object_close(_f) ul_jsonwrt_close(_f, UL_JSON_OBJECT) + +#define ul_jsonwrt_value_open(_f, _n) ul_jsonwrt_open(_f, _n, UL_JSON_VALUE) +#define ul_jsonwrt_value_close(_f) ul_jsonwrt_close(_f, UL_JSON_VALUE) + + +void ul_jsonwrt_value_raw(struct ul_jsonwrt *fmt, + const char *name, const char *data); +void ul_jsonwrt_value_s(struct ul_jsonwrt *fmt, + const char *name, const char *data); +void ul_jsonwrt_value_u64(struct ul_jsonwrt *fmt, + const char *name, uint64_t data); +void ul_jsonwrt_value_boolean(struct ul_jsonwrt *fmt, + const char *name, int data); +void ul_jsonwrt_value_null(struct ul_jsonwrt *fmt, + const char *name); + +#endif /* UTIL_LINUX_JSONWRT_H */ diff --git a/jni/parted/parted/parted.c b/jni/parted/parted/parted.c new file mode 100755 index 0000000..91fe192 --- /dev/null +++ b/jni/parted/parted/parted.c @@ -0,0 +1,2699 @@ +/* + parted - a frontend to libparted + Copyright (C) 1999-2003, 2005-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include +#include +#include + +#include "argmatch.h" +#include "closeout.h" +#include "configmake.h" +#include "version-etc.h" +#include "command.h" +#include "ui.h" +#include "progname.h" +#include "table.h" +#include "version.h" + +#define AUTHORS \ + "" + +/* The official name of this program (e.g., no `g' prefix). */ +#define PROGRAM_NAME "parted" + +#define N_(String) String +#if ENABLE_NLS +# include +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include "c-ctype.h" +#include "c-strcase.h" +#include "xalloc.h" +#include "jsonwrt.h" + +#ifdef ENABLE_MTRACE +#include +#endif + +#include + +/* minimum amount of free space to leave, or maximum amount to gobble up */ +#define MIN_FREESPACE (1000 * 2) /* 1000k */ + +static int MEGABYTE_SECTORS (PedDevice* dev) +{ + return PED_MEGABYTE_SIZE / dev->sector_size; +} + +/* For long options that have no equivalent short option, use a + non-character as a pseudo short option, starting with CHAR_MAX + 1. */ +enum +{ + PRETEND_INPUT_TTY = CHAR_MAX + 1, +}; + +/* Output modes */ +enum +{ + HUMAN, + MACHINE, + JSON +}; + +enum +{ + ALIGNMENT_NONE = 2, + ALIGNMENT_CYLINDER, + ALIGNMENT_MINIMAL, + ALIGNMENT_OPTIMAL +}; + +static char const *const align_args[] = +{ + "none", + "cylinder", + "minimal", + "optimal", + NULL +}; + +static int const align_types[] = +{ + ALIGNMENT_NONE, + ALIGNMENT_CYLINDER, + ALIGNMENT_MINIMAL, + ALIGNMENT_OPTIMAL +}; +ARGMATCH_VERIFY (align_args, align_types); + +typedef struct { + time_t last_update; + time_t predicted_time_left; +} TimerContext; + +static struct option const options[] = { + /* name, has-arg, string-return-val, char-return-val */ + {"help", 0, NULL, 'h'}, + {"list", 0, NULL, 'l'}, + {"machine", 0, NULL, 'm'}, + {"json", 0, NULL, 'j'}, + {"script", 0, NULL, 's'}, + {"fix", 0, NULL, 'f'}, + {"version", 0, NULL, 'v'}, + {"align", required_argument, NULL, 'a'}, + {"-pretend-input-tty", 0, NULL, PRETEND_INPUT_TTY}, + {NULL, 0, NULL, 0} +}; + +static const char *const options_help [][2] = { + {"help", N_("displays this help message")}, + {"list", N_("lists partition layout on all block devices")}, + {"machine", N_("displays machine parseable output")}, + {"json", N_("displays JSON output")}, + {"script", N_("never prompts for user intervention")}, + {"fix", N_("in script mode, fix instead of abort when asked")}, + {"version", N_("displays the version")}, + {"align=[none|cyl|min|opt]", N_("alignment for new partitions")}, + {NULL, NULL} +}; + +int opt_script_mode = 0; +int opt_fix_mode = 0; +int pretend_input_tty = 0; +int opt_output_mode = HUMAN; +int disk_is_modified = 0; +int is_toggle_mode = 0; +int alignment = ALIGNMENT_OPTIMAL; + +static const char* number_msg = N_( +"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the " +"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"); + +static const char* label_type_msg_start = N_("LABEL-TYPE is one of: "); +static const char* flag_msg_start = N_("FLAG is one of: "); +static const char* disk_flag_msg_start = N_("FLAG is one of: "); +static const char* unit_msg_start = N_("UNIT is one of: "); +static const char* min_or_opt_msg = N_("desired alignment: minimum or optimal"); +static const char* part_type_msg = N_("PART-TYPE is one of: primary, logical, " + "extended\n"); +static const char* fs_type_msg_start = N_("FS-TYPE is one of: "); +static const char* start_end_msg = N_("START and END are disk locations, such as " + "4GB or 10%. Negative values count from the end of the disk. " + "For example, -1s specifies exactly the last sector.\n"); +static const char* end_msg = N_("END is disk location, such as " + "4GB or 10%. Negative value counts from the end of the disk. " + "For example, -1s specifies exactly the last sector.\n"); +static const char* state_msg = N_("STATE is one of: on, off\n"); +static const char* device_msg = N_("DEVICE is usually /dev/hda or /dev/sda\n"); +static const char* name_msg = N_("NAME is any word you want\n"); +static const char* type_msg = N_("TYPE_ID is a value between 0x01 and 0xff, " + "TYPE_UUID is a UUID\n"); + +static const char* copyright_msg = N_( +"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n" +"This program is free software, covered by the GNU General Public License.\n" +"\n" +"This program is distributed in the hope that it will be useful,\n" +"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" +"GNU General Public License for more details.\n\n"); + +static char* label_type_msg; +static char* flag_msg; +static char* disk_flag_msg; +static char* unit_msg; + +static char* mkpart_fs_type_msg; + +static Command* commands [256] = {NULL}; +static PedTimer* g_timer; +static TimerContext timer_context; + +static struct ul_jsonwrt json; + +static int _print_list (); +static void _done (PedDevice* dev, PedDisk *diskp); +static bool partition_align_check (PedDisk const *disk, + PedPartition const *part, enum AlignmentType a_type, + char **align_err); + +static void +_timer_handler (PedTimer* timer, void* context) +{ + TimerContext* tcontext = (TimerContext*) context; + int draw_this_time; + + if (opt_script_mode || !isatty(fileno(stdout))) + return; + + if (tcontext->last_update != timer->now && timer->now > timer->start) { + tcontext->predicted_time_left + = timer->predicted_end - timer->now; + tcontext->last_update = timer->now; + draw_this_time = 1; + } else { + draw_this_time = 0; + } + + if (draw_this_time) { + wipe_line (); + + if (timer->state_name) + printf ("%s... ", timer->state_name); + printf (_("%0.f%%\t(time left %.2d:%.2d)"), + (double) (100.0f * timer->frac), + (int) (tcontext->predicted_time_left / 60), + (int) (tcontext->predicted_time_left % 60)); + + fflush (stdout); + } +} + +static int +_partition_warn_busy (PedPartition* part) +{ + char* path; + + if (ped_partition_is_busy (part)) { + path = ped_partition_get_path (part); + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_YES_NO, + _("Partition %s is being used. Are you sure you " \ + "want to continue?"), + path) != PED_EXCEPTION_YES) + { + free (path); + return 0; + } + free (path); + } + return 1; +} + +static int +_disk_warn_busy (PedDisk* disk) +{ + if (ped_device_is_busy (disk->dev)) + return ped_exception_throw ( + (opt_script_mode + ? PED_EXCEPTION_ERROR + : PED_EXCEPTION_WARNING), + PED_EXCEPTION_IGNORE_CANCEL, + _("Partition(s) on %s are being used."), + disk->dev->path) == PED_EXCEPTION_IGNORE; + + return 1; +} + +static int +_disk_warn_loss (PedDisk* disk) +{ + return ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_YES_NO, + _("The existing disk label on %s will be destroyed " + "and all data on this disk will be lost. Do you " + "want to continue?"), + disk->dev->path) == PED_EXCEPTION_YES; +} + +/* This function changes "sector" to "new_sector" if the new value lies + * within the required range. + */ +static int +snap (PedSector* sector, PedSector new_sector, PedGeometry* range) +{ + PED_ASSERT (ped_geometry_test_sector_inside (range, *sector)); + if (!ped_geometry_test_sector_inside (range, new_sector)) + return 0; + *sector = new_sector; + return 1; +} + +typedef enum { + MOVE_NO = 0, + MOVE_STILL = 1, + MOVE_UP = 2, + MOVE_DOWN = 4 +} EMoves; + +enum { /* Don't change these values */ + SECT_START = 0, + SECT_END = -1 +}; + +/* Find the preferred way to adjust the sector s inside range. + * If a move isn't allowed or is out of range it can't be selected. + * what contains SECT_START if the sector to adjust is a start sector + * or SECT_END if it's an end one. + * The preferred move is to the nearest allowed boundary of the part + * partition (if at equal distance: to start if SECT_START or to end + * if SECT_END). + * The distance is returned in dist. + */ +static EMoves +prefer_snap (PedSector s, int what, PedGeometry* range, EMoves* allow, + PedPartition* part, PedSector* dist) +{ + PedSector up_dist = -1, down_dist = -1; + PedSector new_sect; + EMoves move; + + PED_ASSERT (what == SECT_START || what == SECT_END); + + if (!(*allow & (MOVE_UP | MOVE_DOWN))) { + *dist = 0; + return MOVE_STILL; + } + + if (*allow & MOVE_UP) { + new_sect = part->geom.end + 1 + what; + if (ped_geometry_test_sector_inside (range, new_sect)) + up_dist = new_sect - s; + else + *allow &= ~MOVE_UP; + } + + if (*allow & MOVE_DOWN) { + new_sect = part->geom.start + what; + if (ped_geometry_test_sector_inside (range, new_sect)) + down_dist = s - new_sect; + else + *allow &= ~MOVE_DOWN; + } + + move = MOVE_STILL; + if ((*allow & MOVE_UP) && (*allow & MOVE_DOWN)) { + if (down_dist < up_dist || (down_dist == up_dist + && what == SECT_START) ) + move = MOVE_DOWN; + else if (up_dist < down_dist || (down_dist == up_dist + && what == SECT_END) ) + move = MOVE_UP; + else + PED_ASSERT (0); + } else if (*allow & MOVE_UP) + move = MOVE_UP; + else if (*allow & MOVE_DOWN) + move = MOVE_DOWN; + + *dist = ( move == MOVE_DOWN ? down_dist : + ( move == MOVE_UP ? up_dist : + 0 ) ); + return move; +} + +/* Snaps a partition to nearby partition boundaries. This is useful for + * gobbling up small amounts of free space, and also for reinterpreting small + * changes to a partition as non-changes (eg: perhaps the user only wanted to + * resize the end of a partition). + * Note that this isn't the end of the story... this function is + * always called before the constraint solver kicks in. So you don't need to + * worry too much about inadvertantly creating overlapping partitions, etc. + */ +static void +snap_to_boundaries (PedGeometry* new_geom, PedGeometry* old_geom, + PedDisk* disk, + PedGeometry* start_range, PedGeometry* end_range) +{ + PedPartition* start_part; + PedPartition* end_part; + PedSector start = new_geom->start; + PedSector end = new_geom->end; + PedSector start_dist = -1, end_dist = -1; + EMoves start_allow, end_allow, start_want, end_want; + int adjacent; + + start_allow = end_allow = MOVE_STILL | MOVE_UP | MOVE_DOWN; + + start_part = ped_disk_get_partition_by_sector (disk, start); + end_part = ped_disk_get_partition_by_sector (disk, end); + adjacent = (start_part->geom.end + 1 == end_part->geom.start); + + /* If we can snap to old_geom, then we will... */ + /* and this will enforce the snapped positions */ + if (old_geom) { + if (snap (&start, old_geom->start, start_range)) + start_allow = MOVE_STILL; + if (snap (&end, old_geom->end, end_range)) + end_allow = MOVE_STILL; + } + + /* If start and end are on the same partition, we */ + /* don't allow them to cross. */ + if (start_part == end_part) { + start_allow &= ~MOVE_UP; + end_allow &= ~MOVE_DOWN; + } + + /* Let's find our way */ + start_want = prefer_snap (start, SECT_START, start_range, &start_allow, + start_part, &start_dist ); + end_want = prefer_snap (end, SECT_END, end_range, &end_allow, + end_part, &end_dist ); + + PED_ASSERT (start_dist >= 0 && end_dist >= 0); + + /* If start and end are on adjacent partitions, */ + /* and if they would prefer crossing, then refrain */ + /* the farthest to do so. */ + if (adjacent && start_want == MOVE_UP && end_want == MOVE_DOWN) { + if (end_dist < start_dist) { + start_allow &= ~MOVE_UP; + start_want = prefer_snap (start, SECT_START, + start_range, &start_allow, + start_part, &start_dist ); + PED_ASSERT (start_dist >= 0); + } else { + end_allow &= ~MOVE_DOWN; + end_want = prefer_snap (end, SECT_END, + end_range, &end_allow, + end_part, &end_dist ); + PED_ASSERT (end_dist >= 0); + } + } + + /* New positions */ + start = ( start_want == MOVE_DOWN ? start_part->geom.start : + ( start_want == MOVE_UP ? start_part->geom.end + 1 : + start ) ); + end = ( end_want == MOVE_DOWN ? end_part->geom.start - 1 : + ( end_want == MOVE_UP ? end_part->geom.end : + end ) ); + PED_ASSERT (ped_geometry_test_sector_inside(start_range,start)); + PED_ASSERT (ped_geometry_test_sector_inside (end_range, end)); + PED_ASSERT (start <= end); + ped_geometry_set (new_geom, start, end - start + 1); +} + +static PedConstraint* +constraint_from_start_end (PedDevice* dev, PedGeometry* range_start, + PedGeometry* range_end) +{ + return ped_constraint_new (ped_alignment_any, ped_alignment_any, + range_start, range_end, 1, dev->length); +} + + +static PedConstraint* +constraint_from_start_end_fixed_start (PedDevice* dev, PedSector start_sector, + PedGeometry* range_end) +{ + PedGeometry range_start; + range_start.dev = dev; + range_start.start = start_sector; + range_start.end = start_sector; + range_start.length = 1; + + return ped_constraint_new (ped_alignment_any, ped_alignment_any, + &range_start, range_end, 1, dev->length); +} + +void +help_on (char* topic) +{ + Command* cmd; + + cmd = command_get (commands, topic); + if (!cmd) return; + + command_print_help (cmd); +} + +void +print_commands_help () +{ + int i; + + for (i=0; commands [i]; i++) + command_print_summary (commands [i]); +} + +void +print_options_help () +{ + int i; + + for (i=0; options_help [i][0]; i++) { + printf (" -%c, --%-25.25s %s\n", + options_help [i][0][0], + options_help [i][0], + _(options_help [i][1])); + } +} + +int +do_help (PedDevice** dev, PedDisk** diskp) +{ + if (command_line_get_word_count ()) { + char* word = command_line_pop_word (); + if (word) { + help_on (word); + free (word); + } + } else { + print_commands_help(); + } + return 1; +} + +static int +do_mklabel (PedDevice** dev, PedDisk** diskp) +{ + PedDisk* disk; + const PedDiskType* type = NULL; + + if (*diskp) + disk = *diskp; + else { + ped_exception_fetch_all (); + disk = ped_disk_new (*dev); + if (!disk) ped_exception_catch (); + ped_exception_leave_all (); + } + + if (!command_line_get_disk_type (_("New disk label type?"), &type)) + goto error; + + if (disk) { + if (!_disk_warn_busy (disk)) + goto error; + if (!opt_script_mode && !_disk_warn_loss (disk)) + goto error; + } + + disk = ped_disk_new_fresh (*dev, type); + if (!disk) + goto error; + + if (!ped_disk_commit (disk)) + goto error_destroy_disk; + + if ((*dev)->type != PED_DEVICE_FILE) + disk_is_modified = 1; + if (*diskp) + ped_disk_destroy (*diskp); + *diskp = disk; + return 1; + +error_destroy_disk: + ped_disk_destroy (disk); + *diskp = 0; +error: + return 0; +} + +/* Strip blanks from the end of string STR, in place. */ +void _strip_trailing_spaces(char *str) +{ + if (!str) + return; + size_t i = strlen(str); + while (i && c_isblank(str[--i])) + str[i]='\0'; +} + +/* Return true if the unit is one of the supported IEC unit values */ +static bool +_is_unit_IEC(const PedUnit unit) { + return (unit == PED_UNIT_KIBIBYTE) || (unit == PED_UNIT_MEBIBYTE) || + (unit == PED_UNIT_GIBIBYTE) || (unit == PED_UNIT_TEBIBYTE); +} + +/* Return true, if str ends with IEC units. */ +static bool +_string_ends_with_iec_unit(const char *str) +{ + /* 3 characters for the IEC unit and at least 1 digit */ + if (!str || strlen(str) < 4) + return false; + + char const *p = str + strlen(str) - 3; + PedUnit unit = ped_unit_get_by_name(p); + if (unit == -1) { + return false; + } + return _is_unit_IEC(unit); +} + +/* Return true if str ends with explicit unit identifier. + * Do not parse the unit, just check if the unit is specified. + * This function expects trailing spaces to be already stripped. + */ +static bool +_string_has_unit_suffix(const char *str) +{ + /* At least 1 digit and 1 character to meet the condition */ + if (!str || strlen(str) < 2) + return false; + + if (!isdigit(str[strlen(str) - 1])) + return true; + + return false; +} + +/* If the selected unit is one of KiB, MiB, GiB or TiB and the partition is not + * only 1 sector long, then adjust the end so that it is one sector before the + * given position. Also adjust range_end accordingly. Thus next partition can + * start immediately after this one. + * + * To be called after end sector is read from the user. + * + * https://lists.gnu.org/archive/html/bug-parted/2011-10/msg00009.html + */ +static void +_adjust_end_if_iec (PedSector* start, PedSector* end, + PedGeometry* range_end, char* end_input) +{ + PED_ASSERT(start); + PED_ASSERT(end); + PED_ASSERT(range_end); + + /* 1s partition - do not move the end */ + if (*start == *end) + return; + + _strip_trailing_spaces(end_input); + PedUnit unit = ped_unit_get_default(); + if (_string_ends_with_iec_unit(end_input) || + (!_string_has_unit_suffix(end_input) && _is_unit_IEC(unit))) { + *end -= 1; + range_end->start -= 1; + range_end->end -= 1; + } +} + +static int +do_mkpart (PedDevice** dev, PedDisk** diskp) +{ + PedDisk* disk; + PedPartition* part; + PedPartitionType part_type; + const PedFileSystemType* fs_type = ped_file_system_type_get ("ext2"); + PedSector start = 0, end = 0; + PedGeometry *range_start = NULL, *range_end = NULL; + PedConstraint* user_constraint; + PedConstraint* dev_constraint; + PedConstraint* final_constraint; + char* peek_word; + char* part_name = NULL; + char *start_usr = NULL, *end_usr = NULL; + char *start_sol = NULL, *end_sol = NULL; + char *end_input = NULL; + + if (*diskp) + disk = *diskp; + else { + disk = ped_disk_new (*dev); + *diskp = disk; + } + if (!disk) + goto error; + + if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT)) + if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT, + alignment == ALIGNMENT_CYLINDER)) + goto error; + + if (!ped_disk_type_check_feature (disk->type, PED_DISK_TYPE_EXTENDED)) { + part_type = PED_PARTITION_NORMAL; + } else { + if (!command_line_get_part_type (_("Partition type?"), + disk, &part_type)) + goto error; + } + + /* The undocumented feature that mkpart sometimes takes a + partition name is next to useless, at least with a dvh + partition table, since it makes the "mkpart" command + fail unconditionally for a primary partition. E.g., + mkpart primary any-name xfs 4096s 5000s + requires the name, yet always fails, saying that only + logical partitions may have names. + If you want a name, use parted's separate "name" command. */ + + if (ped_disk_type_check_feature (disk->type, + PED_DISK_TYPE_PARTITION_NAME) + && ! (strcmp (disk->type->name, "dvh") == 0 + && part_type != PED_PARTITION_LOGICAL)) + part_name = command_line_get_word (_("Partition name?"), + "", NULL, 1); + + peek_word = command_line_peek_word (); + if (part_type == PED_PARTITION_EXTENDED + || (peek_word && (isdigit (peek_word[0]) || peek_word[0] == '-'))) { + fs_type = NULL; + free (peek_word); + } else { + free (peek_word); + if (!command_line_get_fs_type (_("File system type?"), + &fs_type)) + goto error; + } + + if (!command_line_get_sector (_("Start?"), *dev, &start, &range_start, NULL)) + goto error; + if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, &end_input)) + goto error; + + _adjust_end_if_iec(&start, &end, range_end, end_input); + + /* processing starts here */ + part = ped_partition_new (disk, part_type, fs_type, start, end); + if (!part) + goto error; + + snap_to_boundaries (&part->geom, NULL, disk, range_start, range_end); + + /* create constraints */ + user_constraint = constraint_from_start_end (*dev, range_start, + range_end); + PED_ASSERT (user_constraint != NULL); + + if (alignment == ALIGNMENT_OPTIMAL) + dev_constraint = + ped_device_get_optimal_aligned_constraint(*dev); + else if (alignment == ALIGNMENT_MINIMAL) + dev_constraint = + ped_device_get_minimal_aligned_constraint(*dev); + else + dev_constraint = ped_device_get_constraint(*dev); + PED_ASSERT (dev_constraint != NULL); + + final_constraint = ped_constraint_intersect (user_constraint, + dev_constraint); + ped_constraint_destroy (user_constraint); + ped_constraint_destroy (dev_constraint); + if (!final_constraint) + goto error_destroy_simple_constraints; + + /* subject to partition constraint */ + ped_exception_fetch_all(); + bool added_ok = ped_disk_add_partition (disk, part, final_constraint); + ped_constraint_destroy (final_constraint); + if (!added_ok) { + ped_exception_leave_all(); + + PedConstraint *constraint_any = ped_constraint_any (*dev); + added_ok = ped_disk_add_partition (disk, part, + constraint_any); + ped_constraint_destroy (constraint_any); + + if (!added_ok) + goto error_destroy_simple_constraints; + + if (!ped_geometry_test_sector_inside(range_start, part->geom.start) || + !ped_geometry_test_sector_inside(range_end, part->geom.end)) { + start_usr = ped_unit_format (*dev, start); + end_usr = ped_unit_format (*dev, end); + start_sol = ped_unit_format (*dev, part->geom.start); + end_sol = ped_unit_format (*dev, part->geom.end); + + /* In script mode failure to use specified values is fatal. + * However, in interactive mode, it merely elicits a warning + * and a prompt for whether to proceed. + */ + switch (ped_exception_throw ( + (opt_script_mode + ? PED_EXCEPTION_ERROR + : PED_EXCEPTION_WARNING), + (opt_script_mode + ? PED_EXCEPTION_CANCEL + : PED_EXCEPTION_YES_NO), + _("You requested a partition from %s to %s " + "(sectors %llu..%llu).\n" + "The closest location we can manage is " + "%s to %s (sectors %llu..%llu).%s"), + start_usr, end_usr, + start, end, + start_sol, end_sol, + part->geom.start, part->geom.end, + (opt_script_mode ? "" + : _("\nIs this still acceptable to you?")))) + { + case PED_EXCEPTION_YES: + /* all is well in this state */ + break; + case PED_EXCEPTION_NO: + case PED_EXCEPTION_UNHANDLED: + default: + /* undo partition addition */ + goto error_remove_part; + } + } + + char *align_err = NULL; + if ((alignment == ALIGNMENT_OPTIMAL && + !partition_align_check(disk, part, PA_OPTIMUM, &align_err)) || + (alignment == ALIGNMENT_MINIMAL && + !partition_align_check(disk, part, PA_MINIMUM, &align_err))) { + if (ped_exception_throw( + PED_EXCEPTION_WARNING, + (opt_script_mode + ? PED_EXCEPTION_OK + : PED_EXCEPTION_IGNORE_CANCEL), + _("The resulting partition is not properly " + "aligned for best performance: %s"), + align_err ? align_err : _("unknown (malloc failed)")) == + PED_EXCEPTION_CANCEL) { + free(align_err); + /* undo partition addition */ + goto error_remove_part; + } + free(align_err); + } + } else { + ped_exception_leave_all(); + } + ped_exception_catch(); + + /* set minor attributes */ + if (part_name) + if (!ped_partition_set_name (part, part_name)) + goto error_remove_part; + free (part_name); /* avoid double-free upon failure */ + part_name = NULL; + + if (!ped_partition_set_system (part, fs_type)) + goto error_remove_part; + if (ped_partition_is_flag_available (part, PED_PARTITION_LBA)) + ped_partition_set_flag (part, PED_PARTITION_LBA, 1); + + if (!ped_disk_commit (disk)) + goto error_remove_part; + + /* clean up */ + if (range_start != NULL) + ped_geometry_destroy (range_start); + if (range_end != NULL) + ped_geometry_destroy (range_end); + + free (start_usr); + free (end_usr); + free (start_sol); + free (end_sol); + free(end_input); + + if ((*dev)->type != PED_DEVICE_FILE) + disk_is_modified = 1; + + return 1; + +error_remove_part: + ped_disk_remove_partition (disk, part); +error_destroy_simple_constraints: + ped_partition_destroy (part); +error: + free (part_name); + if (range_start != NULL) + ped_geometry_destroy (range_start); + if (range_end != NULL) + ped_geometry_destroy (range_end); + + free (start_usr); + free (end_usr); + free (start_sol); + free (end_sol); + free(end_input); + + return 0; +} + +static int +do_name (PedDevice** dev, PedDisk** diskp) +{ + PedPartition* part = NULL; + char* name; + + if (!*diskp) + *diskp = ped_disk_new (*dev); + if (!*diskp) + goto error; + + if (!ped_disk_type_check_feature((*diskp)->type, PED_DISK_TYPE_PARTITION_NAME)) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s disk labels do not support partition name."), + (*diskp)->type->name); + goto error; + } + + if (!command_line_get_partition (_("Partition number?"), *diskp, &part)) + goto error; + + name = command_line_get_word (_("Partition name?"), + ped_partition_get_name (part), NULL, 0); + if (!name) + goto error; + if (!ped_partition_set_name (part, name)) + goto error_free_name; + free (name); + + if (!ped_disk_commit (*diskp)) + goto error; + return 1; + +error_free_name: + free (name); +error: + return 0; +} + +static int +do_type (PedDevice** dev, PedDisk** diskp) +{ + if (!*diskp) + *diskp = ped_disk_new (*dev); + if (!*diskp) + goto error; + + bool has_type_id = ped_disk_type_check_feature ((*diskp)->type, + PED_DISK_TYPE_PARTITION_TYPE_ID); + bool has_type_uuid = ped_disk_type_check_feature ((*diskp)->type, + PED_DISK_TYPE_PARTITION_TYPE_UUID); + + PED_ASSERT (!(has_type_id && has_type_uuid)); + + if (!has_type_id && !has_type_uuid) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("%s disk labels do not support partition type."), + (*diskp)->type->name); + goto error; + } + + PedPartition* part = NULL; + if (!command_line_get_partition (_("Partition number?"), *diskp, &part)) + goto error; + + char* input = NULL; + + if (has_type_id) { + uint8_t type_id = ped_partition_get_type_id (part); + static char buf[8]; + snprintf(buf, 8, "0x%02x", type_id); + + input = command_line_get_word (_("Partition type-id?"), buf, NULL, 0); + if (!input) + goto error; + + unsigned int tmp = strtol (input, (char**) NULL, 16); + if (tmp < 0x01 || tmp > 0xff) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Invalid type-id.")); + goto error_free_input; + } + + if (!ped_partition_set_type_id (part, tmp)) + goto error_free_input; + } + + if (has_type_uuid) { + uint8_t* type_uuid = ped_partition_get_type_uuid (part); + static char buf[UUID_STR_LEN]; + uuid_unparse_lower (type_uuid, buf); + free (type_uuid); + + input = command_line_get_word (_("Partition type-uuid?"), buf, NULL, 0); + if (!input) + goto error; + + uuid_t tmp; + if (uuid_parse (input, tmp) != 0 || uuid_is_null (tmp)) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Invalid type-uuid.")); + goto error_free_input; + } + + if (!ped_partition_set_type_uuid (part, tmp)) + goto error_free_input; + } + + free (input); + + // Reset the fs_type based on the filesystem, if it exists + part->fs_type = ped_file_system_probe (&part->geom); + + if (!ped_disk_commit (*diskp)) + goto error; + return 1; + +error_free_input: + free (input); +error: + return 0; +} + +static char* +partition_print_flags (PedPartition const *part) +{ + char *res = xstrdup (""); + if (!part) + return res; + + PedPartitionFlag flag; + size_t res_buf_len = 1; + char const *sep = ""; + for (flag = ped_partition_flag_next (0); flag; + flag = ped_partition_flag_next (flag)) + { + if (ped_partition_get_flag (part, flag)) + { + const char *name = _(ped_partition_flag_get_name (flag)); + size_t new_len = res_buf_len + strlen (sep) + strlen (name); + res = xrealloc (res, new_len); + stpcpy (stpcpy (res + res_buf_len - 1, sep), name); + res_buf_len = new_len; + sep = ", "; + } + } + + return res; +} + +static void +partition_print_flags_json (PedPartition const *part) +{ + if (!part) + return; + + int did_open_array = 0; + + PedPartitionFlag flag; + for (flag = ped_partition_flag_next (0); flag; + flag = ped_partition_flag_next (flag)) + { + if (ped_partition_get_flag (part, flag)) + { + if (!did_open_array) + ul_jsonwrt_array_open (&json, "flags"); + did_open_array = 1; + + ul_jsonwrt_value_s (&json, NULL, ped_partition_flag_get_name (flag)); + } + } + + if (did_open_array) + ul_jsonwrt_array_close (&json); +} + +static int +partition_print (PedPartition* part) +{ + return 1; +} + +static char* +disk_print_flags (PedDisk const *disk) +{ + char *res = xstrdup (""); + if (!disk) + return res; + + PedDiskFlag flag; + size_t res_buf_len = 1; + char const *sep = ""; + for (flag = ped_disk_flag_next (0); flag; + flag = ped_disk_flag_next (flag)) + { + if (ped_disk_get_flag (disk, flag)) + { + const char *name = _(ped_disk_flag_get_name (flag)); + size_t new_len = res_buf_len + strlen (sep) + strlen (name); + res = xrealloc (res, new_len); + stpcpy (stpcpy (res + res_buf_len - 1, sep), name); + res_buf_len = new_len; + sep = ", "; + } + } + + return res; +} + +static void +disk_print_flags_json (PedDisk const *disk) +{ + if (!disk) + return; + + int did_open_array = 0; + + PedDiskFlag flag; + for (flag = ped_disk_flag_next (0); flag; + flag = ped_disk_flag_next (flag)) + { + if (ped_disk_get_flag (disk, flag)) + { + if (!did_open_array) + ul_jsonwrt_array_open (&json, "flags"); + did_open_array = 1; + + ul_jsonwrt_value_s (&json, NULL, ped_disk_flag_get_name (flag)); + } + } + + if (did_open_array) + ul_jsonwrt_array_close (&json); +} + +static void +_print_disk_geometry (const PedDevice *dev) +{ + PED_ASSERT (dev != NULL); + const PedCHSGeometry* chs = &dev->bios_geom; + char* cyl_size = ped_unit_format_custom (dev, + chs->heads * chs->sectors, + PED_UNIT_KILOBYTE); + + if (opt_output_mode == MACHINE) { + printf ("%d:%d:%d:%s;\n", + chs->cylinders, chs->heads, chs->sectors, cyl_size); + } else if (opt_output_mode == JSON) { + char* tmp = ped_malloc (128); + snprintf (tmp, 128, "%d,%d,%d %s", chs->cylinders, chs->heads, chs->sectors, cyl_size); + ul_jsonwrt_value_s (&json, "geometry", tmp); + free (tmp); + } else { + printf (_("BIOS cylinder,head,sector geometry: %d,%d,%d. " + "Each cylinder is %s.\n"), + chs->cylinders, chs->heads, chs->sectors, cyl_size); + } + + free (cyl_size); +} + +static char * +_escape_machine_string (const char *str) +{ + size_t i, j; + char *dest; + + dest = ped_malloc (2 * strlen(str) + 1); + if (!dest) + return NULL; + + for (i = 0, j = 0; str[i] != '\0'; i++, j++) { + switch (str[i]) { + case ':': + case '\\': + dest[j++] = '\\'; + /* fallthrough */ + default: + dest[j] = str[i]; + break; + } + } + dest[j] = '\0'; + + return dest; +} + +static void +_print_disk_info (const PedDevice *dev, const PedDisk *diskp) +{ + char const *const transport[] = {"unknown", "scsi", "ide", "dac960", + "cpqarray", "file", "ataraid", "i2o", + "ubd", "dasd", "viodasd", "sx8", "dm", + "xvd", "sd/mmc", "virtblk", "aoe", + "md", "loopback", "nvme", "brd", + "pmem"}; + + char* start = ped_unit_format (dev, 0); + PedUnit default_unit = ped_unit_get_default (); + char* end = ped_unit_format_byte (dev, dev->length * dev->sector_size + - (default_unit == PED_UNIT_CHS || + default_unit == PED_UNIT_CYLINDER)); + + const char* pt_name = diskp ? diskp->type->name : "unknown"; + char *disk_flags = disk_print_flags (diskp); + + if (opt_output_mode == MACHINE) { + char *escaped_path = _escape_machine_string (dev->path); + char *escaped_model = _escape_machine_string (dev->model); + + switch (default_unit) { + case PED_UNIT_CHS: puts ("CHS;"); + break; + case PED_UNIT_CYLINDER: puts ("CYL;"); + break; + default: puts ("BYT;"); + break; + + } + printf ("%s:%s:%s:%lld:%lld:%s:%s:%s;\n", + escaped_path, end, transport[dev->type], + dev->sector_size, dev->phys_sector_size, + pt_name, escaped_model, disk_flags); + free (escaped_path); + free (escaped_model); + } else if (opt_output_mode == JSON) { + ul_jsonwrt_value_s (&json, "path", dev->path); + ul_jsonwrt_value_s (&json, "size", end); + ul_jsonwrt_value_s (&json, "model", dev->model); + ul_jsonwrt_value_s (&json, "transport", transport[dev->type]); + ul_jsonwrt_value_u64 (&json, "logical-sector-size", dev->sector_size); + ul_jsonwrt_value_u64 (&json, "physical-sector-size", dev->phys_sector_size); + ul_jsonwrt_value_s (&json, "label", pt_name); + if (diskp) { + bool has_disk_uuid = ped_disk_type_check_feature (diskp->type, PED_DISK_TYPE_DISK_UUID); + if (has_disk_uuid) { + uint8_t* uuid = ped_disk_get_uuid (diskp); + static char buf[UUID_STR_LEN]; + uuid_unparse_lower (uuid, buf); + ul_jsonwrt_value_s (&json, "uuid", buf); + free (uuid); + } + ul_jsonwrt_value_u64 (&json, "max-partitions", + ped_disk_get_max_primary_partition_count(diskp)); + disk_print_flags_json (diskp); + } + } else { + printf (_("Model: %s (%s)\n"), + dev->model, transport[dev->type]); + printf (_("Disk %s: %s\n"), dev->path, end); + printf (_("Sector size (logical/physical): %lldB/%lldB\n"), + dev->sector_size, dev->phys_sector_size); + } + + free (start); + free (end); + + if (ped_unit_get_default () == PED_UNIT_CHS + || ped_unit_get_default () == PED_UNIT_CYLINDER) + _print_disk_geometry (dev); + + if (opt_output_mode == HUMAN) { + printf (_("Partition Table: %s\n"), pt_name); + printf (_("Disk Flags: %s\n"), disk_flags); + } + free (disk_flags); +} + +static int +do_print (PedDevice** dev, PedDisk** diskp) +{ + Table* table; + int has_extended; + int has_name; + int has_devices_arg = 0; + int has_free_arg = 0; + int has_list_arg = 0; + int has_num_arg = 0; + char* peek_word; + char* start; + char* end; + char* size; + const char* name; + char* tmp; + wchar_t* table_rendered; + int ok = 1; /* default to success */ + + peek_word = command_line_peek_word (); + if (peek_word) { + if (strncmp (peek_word, "devices", 7) == 0) { + char *w = command_line_pop_word(); + free (w); + has_devices_arg = 1; + } + else if (strncmp (peek_word, "free", 4) == 0) { + char *w = command_line_pop_word (); + free (w); + has_free_arg = 1; + } + else if (strncmp (peek_word, "list", 4) == 0 || + strncmp (peek_word, "all", 3) == 0) { + char *w = command_line_pop_word(); + free (w); + has_list_arg = 1; + } + else + has_num_arg = isdigit(peek_word[0]); + + free (peek_word); + } + + if (!has_devices_arg && !has_list_arg) { + if (!*diskp) + *diskp = ped_disk_new (*dev); + /* Returning NULL here is an indication of failure, when in + script mode. Otherwise (interactive mode) it may indicate + a real error, but it may also indicate that the user + declined when asked to perform some operation. FIXME: + what this really needs is an API change, but a reliable + exit code is less important in interactive mode. */ + if (*diskp == NULL && opt_script_mode) + ok = 0; + } + + if (*diskp && + ped_disk_is_flag_available(*diskp, PED_DISK_CYLINDER_ALIGNMENT)) + if (!ped_disk_set_flag(*diskp, PED_DISK_CYLINDER_ALIGNMENT, + alignment == ALIGNMENT_CYLINDER)) + return 0; + + if (has_devices_arg) { + char* dev_name; + PedDevice* current_dev = NULL; + int status = 0; + + ped_device_probe_all(); + + while ((current_dev = ped_device_get_next(current_dev))) { + end = ped_unit_format_byte (current_dev, + current_dev->length + * current_dev->sector_size); + printf ("%s (%s)\n", current_dev->path, end); + free (end); + } + + dev_name = xstrdup ((*dev)->path); + ped_device_free_all (); + + *dev = ped_device_get (dev_name); + if (*dev && ped_device_open (*dev)) + status = 1; + free (dev_name); + + return status; + } + + else if (has_list_arg) + return _print_list (); + + else if (*diskp && has_num_arg) { + PedPartition* part = NULL; + int status = 0; + if (command_line_get_partition ("", *diskp, &part)) + status = partition_print (part); + return status; + } + + if (opt_output_mode == JSON) { + ul_jsonwrt_init (&json, stdout, 0); + ul_jsonwrt_root_open (&json); + ul_jsonwrt_object_open (&json, "disk"); + } + + _print_disk_info (*dev, *diskp); + if (!*diskp) + goto nopt; + if (opt_output_mode == HUMAN) + putchar ('\n'); + + has_extended = ped_disk_type_check_feature ((*diskp)->type, + PED_DISK_TYPE_EXTENDED); + has_name = ped_disk_type_check_feature ((*diskp)->type, + PED_DISK_TYPE_PARTITION_NAME); + bool has_type_id = ped_disk_type_check_feature ((*diskp)->type, + PED_DISK_TYPE_PARTITION_TYPE_ID); + bool has_type_uuid = ped_disk_type_check_feature ((*diskp)->type, + PED_DISK_TYPE_PARTITION_TYPE_UUID); + bool has_part_uuid = ped_disk_type_check_feature ((*diskp)->type, + PED_DISK_TYPE_PARTITION_UUID); + + PedPartition* part; + if (opt_output_mode == HUMAN) { + StrList *row1; + + if (ped_unit_get_default() == PED_UNIT_CHS) { + row1 = str_list_create (_("Number"), _("Start"), + _("End"), NULL); + } else { + row1 = str_list_create (_("Number"), _("Start"), + _("End"), _("Size"), NULL); + } + + if (has_extended) + str_list_append (row1, _("Type")); + + str_list_append (row1, _("File system")); + + if (has_name) + str_list_append (row1, _("Name")); + + str_list_append (row1, _("Flags")); + + + table = table_new (str_list_length(row1)); + + table_add_row_from_strlist (table, row1); + + for (part = ped_disk_next_partition (*diskp, NULL); part; + part = ped_disk_next_partition (*diskp, part)) { + + if ((!has_free_arg && !ped_partition_is_active(part)) || + part->type & PED_PARTITION_METADATA) + continue; + + tmp = ped_malloc (4); + + if (part->num >= 0) + sprintf (tmp, "%2d ", part->num); + else + sprintf (tmp, "%2s ", ""); + + StrList *row = str_list_create (tmp, NULL); + free(tmp); + + start = ped_unit_format (*dev, part->geom.start); + end = ped_unit_format_byte ( + *dev, + (part->geom.end + 1) * (*dev)->sector_size - 1); + size = ped_unit_format (*dev, part->geom.length); + if (ped_unit_get_default() == PED_UNIT_CHS) { + str_list_append (row, start); + str_list_append (row, end); + } else { + str_list_append (row, start); + str_list_append (row, end); + str_list_append (row, size); + } + + if (!(part->type & PED_PARTITION_FREESPACE)) { + if (has_extended) { + name = ped_partition_type_get_name (part->type); + str_list_append (row, name); + } + + str_list_append (row, part->fs_type ? + part->fs_type->name : ""); + + if (has_name) { + name = ped_partition_get_name (part); + str_list_append (row, name); + } + + char *flags = partition_print_flags (part); + str_list_append (row, flags); + free (flags); + } else { + if (has_extended) + str_list_append (row, ""); + str_list_append (row, _("Free Space")); + if (has_name) + str_list_append (row, ""); + str_list_append (row, ""); + } + + //PED_ASSERT (row.cols == caption.cols) + table_add_row_from_strlist (table, row); + str_list_destroy (row); + free (start); + free (end); + free (size); + } + + table_rendered = table_render (table); +#ifdef ENABLE_NLS + printf("%ls\n", table_rendered); +#else + printf("%s\n", table_rendered); +#endif + free (table_rendered); + table_destroy (table); + str_list_destroy (row1); + + } else if (opt_output_mode == JSON) { + + ul_jsonwrt_array_open (&json, "partitions"); + + for (part = ped_disk_next_partition (*diskp, NULL); part; + part = ped_disk_next_partition (*diskp, part)) { + + if ((!has_free_arg && !ped_partition_is_active(part)) || + part->type & PED_PARTITION_METADATA) + continue; + + ul_jsonwrt_object_open (&json, NULL); + + ul_jsonwrt_value_u64 (&json, "number", part->num >= 0 ? part->num : 0); + + tmp = ped_unit_format (*dev, part->geom.start); + ul_jsonwrt_value_s (&json, "start", tmp); + free (tmp); + + tmp = ped_unit_format_byte (*dev, (part->geom.end + 1) * (*dev)->sector_size - 1); + ul_jsonwrt_value_s (&json, "end", tmp); + free (tmp); + + if (ped_unit_get_default() != PED_UNIT_CHS) { + tmp = ped_unit_format (*dev, part->geom.length); + ul_jsonwrt_value_s (&json, "size", tmp); + free (tmp); + } + + name = ped_partition_type_get_name (part->type); + ul_jsonwrt_value_s (&json, "type", name); + + if (!(part->type & PED_PARTITION_FREESPACE)) { + + if (has_type_id) { + uint8_t type_id = ped_partition_get_type_id (part); + static char buf[8]; + snprintf(buf, 8, "0x%02x", type_id); + ul_jsonwrt_value_s (&json, "type-id", buf); + } + + if (has_type_uuid) { + uint8_t* type_uuid = ped_partition_get_type_uuid (part); + static char buf[UUID_STR_LEN]; + uuid_unparse_lower (type_uuid, buf); + ul_jsonwrt_value_s (&json, "type-uuid", buf); + free (type_uuid); + } + + if (has_part_uuid) { + uint8_t* uuid = ped_partition_get_uuid (part); + static char buf[UUID_STR_LEN]; + uuid_unparse_lower (uuid, buf); + ul_jsonwrt_value_s (&json, "uuid", buf); + free (uuid); + } + + if (has_name) { + name = ped_partition_get_name (part); + if (strcmp (name, "") != 0) + ul_jsonwrt_value_s (&json, "name", name); + } + + if (part->fs_type) + ul_jsonwrt_value_s (&json, "filesystem", part->fs_type->name); + + partition_print_flags_json (part); + } + + ul_jsonwrt_object_close (&json); + } + + ul_jsonwrt_array_close (&json); + + } else { + + for (part = ped_disk_next_partition (*diskp, NULL); part; + part = ped_disk_next_partition (*diskp, part)) { + + if ((!has_free_arg && !ped_partition_is_active(part)) || + part->type & PED_PARTITION_METADATA) + continue; + + if (part->num >= 0) + printf ("%d:", part->num); + else + fputs ("1:", stdout); + + char *s = ped_unit_format (*dev, part->geom.start); + printf ("%s:", s); + free (s); + s = ped_unit_format_byte (*dev, + (part->geom.end + 1) * + (*dev)->sector_size - 1); + printf ("%s:", s); + free (s); + + if (ped_unit_get_default() != PED_UNIT_CHS) { + s = ped_unit_format (*dev, part->geom.length); + printf ("%s:", s); + free (s); + } + + if (!(part->type & PED_PARTITION_FREESPACE)) { + + if (part->fs_type) + printf ("%s:", part->fs_type->name); + else + putchar (':'); + + if (has_name) + { + char *escaped_name = _escape_machine_string (ped_partition_get_name (part)); + printf ("%s:", escaped_name); + free (escaped_name); + } else + putchar (':'); + + char *flags = partition_print_flags (part); + printf ("%s;\n", flags); + free (flags); + + } else { + puts ("free;"); + } + } + } + +nopt: + + if (opt_output_mode == JSON) { + ul_jsonwrt_object_close (&json); + ul_jsonwrt_root_close (&json); + } + + return ok; +} + +static int +_print_list () +{ + PedDevice *current_dev = NULL; + PedDisk *diskp = NULL; + + ped_device_probe_all(); + + while ((current_dev = ped_device_get_next(current_dev))) { + do_print (¤t_dev, &diskp); + if (diskp) + ped_disk_destroy (diskp); + diskp = 0; + putchar ('\n'); + } + + return 1; +} + +static int +do_quit (PedDevice** dev, PedDisk **diskp) +{ + _done (*dev, *diskp); + exit (EXIT_SUCCESS); +} + +static PedPartitionType +_disk_get_part_type_for_sector (PedDisk* disk, PedSector sector) +{ + PedPartition* extended; + + extended = ped_disk_extended_partition (disk); + if (!extended + || !ped_geometry_test_sector_inside (&extended->geom, sector)) + return 0; + + return PED_PARTITION_LOGICAL; +} + +/* This function checks if "part" contains a file system, and returs + * 0 if either no file system was found, or the user declined to add it. + * 1 if a file system was found, and the user chose to add it. + * -1 if the user chose to cancel the entire search. + */ +static int +_rescue_add_partition (PedPartition* part) +{ + const PedFileSystemType* fs_type; + PedGeometry* probed; + PedExceptionOption ex_opt; + PedConstraint* constraint; + char* found_start; + char* found_end; + + fs_type = ped_file_system_probe (&part->geom); + if (!fs_type) + return 0; + probed = ped_file_system_probe_specific (fs_type, &part->geom); + if (!probed) + return 0; + + if (!ped_geometry_test_inside (&part->geom, probed)) { + ped_geometry_destroy (probed); + return 0; + } + + constraint = ped_constraint_exact (probed); + if (!ped_disk_set_partition_geom (part->disk, part, constraint, + probed->start, probed->end)) { + ped_constraint_destroy (constraint); + return 0; + } + ped_constraint_destroy (constraint); + + found_start = ped_unit_format (probed->dev, probed->start); + found_end = ped_unit_format (probed->dev, probed->end); + ex_opt = ped_exception_throw ( + PED_EXCEPTION_INFORMATION, + PED_EXCEPTION_YES_NO_CANCEL, + _("A %s %s partition was found at %s -> %s. " + "Do you want to add it to the partition table?"), + fs_type->name, ped_partition_type_get_name (part->type), + found_start, found_end); + ped_geometry_destroy (probed); + free (found_start); + free (found_end); + + switch (ex_opt) { + case PED_EXCEPTION_CANCEL: return -1; + case PED_EXCEPTION_NO: return 0; + default: break; + } + + if (!ped_partition_set_system (part, fs_type)) + return 0; + + if (!ped_disk_commit (part->disk)) + return 0; + + return 1; +} + +/* hack: we only iterate through the start, since most (all) fs's have their + * superblocks at the start. We'll need to change this if we generalize + * for RAID, or something... + */ +static int +_rescue_pass (PedDisk* disk, PedGeometry* start_range, PedGeometry* end_range) +{ + PedSector start; + PedGeometry start_geom_exact; + PedGeometry entire_dev; + PedConstraint constraint; + PedPartition* part; + PedPartitionType part_type; + + part_type = _disk_get_part_type_for_sector ( + disk, (start_range->start + end_range->end) / 2); + + ped_geometry_init (&entire_dev, disk->dev, 0, disk->dev->length); + + ped_timer_reset (g_timer); + ped_timer_set_state_name (g_timer, _("searching for file systems")); + for (start = start_range->start; start <= start_range->end; start++) { + ped_timer_update (g_timer, 1.0 * (start - start_range->start) + / start_range->length); + + ped_geometry_init (&start_geom_exact, disk->dev, start, 1); + ped_constraint_init ( + &constraint, ped_alignment_any, ped_alignment_any, + &start_geom_exact, &entire_dev, + 1, disk->dev->length); + part = ped_partition_new (disk, part_type, NULL, start, + end_range->end); + if (!part) { + ped_constraint_done (&constraint); + continue; + } + + ped_exception_fetch_all (); + if (ped_disk_add_partition (disk, part, &constraint)) { + ped_exception_leave_all (); + switch (_rescue_add_partition (part)) { + case 1: + ped_constraint_done (&constraint); + return 1; + + case 0: + ped_disk_remove_partition (disk, part); + break; + + case -1: + goto error_remove_partition; + } + } else { + ped_exception_leave_all (); + } + ped_partition_destroy (part); + ped_constraint_done (&constraint); + } + ped_timer_update (g_timer, 1.0); + + return 1; + +error_remove_partition: + ped_disk_remove_partition (disk, part); + ped_partition_destroy (part); + ped_constraint_done (&constraint); + return 0; +} + +static int +do_rescue (PedDevice** dev, PedDisk** diskp) +{ + PedDisk* disk; + PedSector start = 0, end = 0; + PedSector fuzz; + PedGeometry probe_start_region; + PedGeometry probe_end_region; + + if (*diskp) { + ped_disk_destroy (*diskp); + *diskp = 0; + } + disk = ped_disk_new (*dev); + if (!disk) + goto error; + if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT)) + if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT, + 0)) + goto error; + + if (!command_line_get_sector (_("Start?"), *dev, &start, NULL, NULL)) + goto error_destroy_disk; + if (!command_line_get_sector (_("End?"), *dev, &end, NULL, NULL)) + goto error_destroy_disk; + + fuzz = PED_MAX (PED_MIN ((end - start) / 10, MEGABYTE_SECTORS(*dev)), + MEGABYTE_SECTORS(*dev) * 16); + + ped_geometry_init (&probe_start_region, *dev, + PED_MAX(start - fuzz, 0), + PED_MIN(2 * fuzz, (*dev)->length - (start - fuzz))); + ped_geometry_init (&probe_end_region, *dev, + PED_MAX(end - fuzz, 0), + PED_MIN(2 * fuzz, (*dev)->length - (end - fuzz))); + + if (!_rescue_pass (disk, &probe_start_region, &probe_end_region)) + goto error_destroy_disk; + + ped_disk_destroy (disk); + + if ((*dev)->type != PED_DEVICE_FILE) + disk_is_modified = 1; + + return 1; + +error_destroy_disk: + ped_disk_destroy (disk); +error: + return 0; +} + +static int +do_resize (PedDevice **dev, PedDisk** diskp) +{ + ped_exception_throw ( + PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("The resize command has been removed in parted 3.0")); + return 0; +} + +static int +do_resizepart (PedDevice** dev, PedDisk** diskp) +{ + PedDisk *disk = *diskp; + PedPartition *part = NULL; + PedSector start, end, oldend; + PedGeometry *range_end = NULL; + PedConstraint* constraint; + int rc = 0; + char* end_input = NULL; + char* end_size = NULL; + + if (!disk) { + disk = ped_disk_new (*dev); + *diskp = disk; + } + if (!disk) + goto error; + + if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT)) + if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT, + alignment == ALIGNMENT_CYLINDER)) + goto error; + + if (!command_line_get_partition (_("Partition number?"), disk, &part)) + goto error; + + /* Save the optional End value if the partition is busy. */ + if (ped_partition_is_busy(part)) { + if (command_line_get_word_count()) + end_size = command_line_pop_word(); + } + + /* If the partition is busy this may clear the command_line and prompt the user */ + if (!_partition_warn_busy (part)) + goto error; + + /* Push the End value back onto the command_line, if it exists */ + if (end_size) { + command_line_push_word(end_size); + } + + start = part->geom.start; + end = oldend = part->geom.end; + if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, &end_input)) + goto error; + _adjust_end_if_iec(&start, &end, range_end, end_input); + + /* Do not move start of the partition */ + constraint = constraint_from_start_end_fixed_start (*dev, start, range_end); + if (!ped_disk_set_partition_geom (disk, part, constraint, + start, end)) + goto error_destroy_constraint; + /* warn when shrinking partition - might lose data */ + if (part->geom.end < oldend) + if (ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_YES_NO, + _("Shrinking a partition can cause data loss, " \ + "are you sure you want to continue?")) != PED_EXCEPTION_YES) + goto error_destroy_constraint; + ped_disk_commit (disk); + + if ((*dev)->type != PED_DEVICE_FILE) + disk_is_modified = 1; + + rc = 1; + +error_destroy_constraint: + ped_constraint_destroy (constraint); +error: + if (range_end != NULL) + ped_geometry_destroy (range_end); + free(end_input); + free(end_size); + + return rc; +} + + +static int +do_rm (PedDevice** dev, PedDisk** diskp) +{ + PedPartition* part = NULL; + + if (!*diskp) + *diskp = ped_disk_new (*dev); + if (!*diskp) + goto error; + + if (!command_line_get_partition (_("Partition number?"), *diskp, &part)) + goto error; + if (!_partition_warn_busy (part)) + goto error; + + if (!ped_disk_delete_partition (*diskp, part)) + goto error; + if (!ped_disk_commit (*diskp)) + goto error; + + if ((*dev)->type != PED_DEVICE_FILE) + disk_is_modified = 1; + + return 1; + +error: + return 0; +} + +static int +do_select (PedDevice** dev, PedDisk** diskp) +{ + PedDevice* new_dev = *dev; + + if (!command_line_get_device (_("New device?"), &new_dev)) + return 0; + if (!ped_device_open (new_dev)) + return 0; + + ped_device_close (*dev); + if (*diskp) { + ped_disk_destroy (*diskp); + *diskp = 0; + } + *dev = new_dev; + print_using_dev (*dev); + return 1; +} + +/* Return true if partition PART is consistent with DISK's selected + offset and alignment requirements. Also return true if there is + insufficient kernel support to determine DISK's alignment requirements. + Otherwise, return false. A_TYPE selects whether to check for minimal + or optimal alignment requirements. + + If align_err is not NULL a string describing why the check failed + will be allocated and returned. It is up to the caller to free this. + Pass NULL if no error description is needed. + + If allocating the error string fails *align_err will be set to NULL, the + caller should always check for this. +*/ +static bool +partition_align_check (PedDisk const *disk, PedPartition const *part, + enum AlignmentType a_type, char **align_err) +{ + PED_ASSERT (part->disk == disk); + PedDevice const *dev = disk->dev; + + PedAlignment *pa = (a_type == PA_MINIMUM + ? ped_device_get_minimum_alignment (dev) + : ped_device_get_optimum_alignment (dev)); + if (pa == NULL) + return true; + + PED_ASSERT (pa->grain_size != 0); + bool ok = (part->geom.start % pa->grain_size == pa->offset); + + /* If it isn't aligned and the caller wants an explanation, + show them the math. */ + if (!ok && align_err) { + if (asprintf(align_err, + "%llds %% %llds != %llds", + part->geom.start, pa->grain_size, pa->offset) < 0) { + *align_err = NULL; + } + } + free (pa); + return ok; +} + +static int +do_align_check (PedDevice **dev, PedDisk** diskp) +{ + if (!*diskp) + *diskp = ped_disk_new (*dev); + if (!*diskp) + goto error; + + enum AlignmentType align_type = PA_OPTIMUM; + PedPartition *part = NULL; + + if (!command_line_get_align_type (_("alignment type(min/opt)"), &align_type)) + goto error; + if (!command_line_get_partition (_("Partition number?"), *diskp, &part)) + goto error; + + char *align_err = NULL; + bool aligned = partition_align_check (*diskp, part, align_type, &align_err); + + /* Don't print the error in script mode */ + if (opt_script_mode) { + free(align_err); + return aligned ? 1 : 0; + } + + if (aligned) + printf(_("%d aligned\n"), part->num); + else + printf(_("%d not aligned: %s\n"), + part->num, + align_err ? align_err : _("unknown (malloc failed)")); + + free(align_err); + + /* Always return 1 in interactive mode, to be consistent + with the other modes. */ + return 1; + +error: + return 0; +} + +static int +do_disk_set (PedDevice** dev, PedDisk** diskp) +{ + PedDiskFlag flag; + int state; + + if (!*diskp) + *diskp = ped_disk_new (*dev); + if (!*diskp) + goto error; + + if (!command_line_get_disk_flag (_("Flag to Invert?"), *diskp, &flag)) + goto error; + state = (ped_disk_get_flag (*diskp, flag) == 0 ? 1 : 0); + + if (!is_toggle_mode) { + if (!command_line_get_state (_("New state?"), &state)) + goto error; + } + + if (!ped_disk_set_flag (*diskp, flag, state)) + goto error; + if (!ped_disk_commit (*diskp)) + goto error; + + if ((*dev)->type != PED_DEVICE_FILE) + disk_is_modified = 1; + + return 1; + +error: + return 0; +} + +static int +do_set (PedDevice** dev, PedDisk **diskp) +{ + PedPartition* part = NULL; + PedPartitionFlag flag; + int state; + + if (*diskp == 0) + *diskp = ped_disk_new (*dev); + if (!*diskp) + goto error; + + if (!command_line_get_partition (_("Partition number?"), *diskp, &part)) + goto error; + if (!command_line_get_part_flag (_("Flag to Invert?"), part, &flag)) + goto error; + state = (ped_partition_get_flag (part, flag) == 0 ? 1 : 0); + + if (!is_toggle_mode) { + if (!command_line_get_state (_("New state?"), &state)) + goto error; + } + + if (!ped_partition_set_flag (part, flag, state)) + goto error; + if (!ped_disk_commit (*diskp)) + goto error; + + if ((*dev)->type != PED_DEVICE_FILE) + disk_is_modified = 1; + + return 1; + +error: + return 0; +} + +static int +do_disk_toggle (PedDevice **dev, PedDisk** diskp) +{ + int result; + + is_toggle_mode = 1; + result = do_disk_set (dev, diskp); + is_toggle_mode = 0; + + return result; +} + +static int +do_toggle (PedDevice **dev, PedDisk** diskp) +{ + int result; + + is_toggle_mode = 1; + result = do_set (dev, diskp); + is_toggle_mode = 0; + + return result; +} + +static int +do_unit (PedDevice** dev, PedDisk** diskp) +{ + PedUnit unit = ped_unit_get_default (); + if (!command_line_get_unit (_("Unit?"), &unit)) + return 0; + ped_unit_set_default (unit); + return 1; +} + +static int +do_version () +{ + printf ("\n%s\n%s", + prog_name, + _(copyright_msg)); + return 1; +} + +static void +_init_messages () +{ + StrList* list; + int first; + PedFileSystemType* fs_type; + PedFileSystemAlias* fs_alias; + PedDiskType* disk_type; + PedPartitionFlag part_flag; + PedDiskFlag disk_flag; + PedUnit unit; + +/* flags */ + first = 1; + list = str_list_create (_(flag_msg_start), NULL); + for (part_flag = ped_partition_flag_next (0); part_flag; + part_flag = ped_partition_flag_next (part_flag)) { + if (first) + first = 0; + else + str_list_append (list, ", "); + str_list_append (list, + _(ped_partition_flag_get_name (part_flag))); + } + str_list_append (list, "\n"); + + flag_msg = str_list_convert (list); + str_list_destroy (list); +/* disk flags */ + first = 1; + list = str_list_create (_(disk_flag_msg_start), NULL); + for (disk_flag = ped_disk_flag_next (0); disk_flag; + disk_flag = ped_disk_flag_next (disk_flag)) { + if (first) + first = 0; + else + str_list_append (list, ", "); + str_list_append (list, + _(ped_disk_flag_get_name (disk_flag))); + } + str_list_append (list, "\n"); + + disk_flag_msg = str_list_convert (list); + str_list_destroy (list); + +/* units */ + first = 1; + list = str_list_create (_(unit_msg_start), NULL); + for (unit = PED_UNIT_FIRST; unit <= PED_UNIT_LAST; unit++) { + if (first) + first = 0; + else + str_list_append (list, ", "); + str_list_append (list, ped_unit_get_name (unit)); + } + str_list_append (list, "\n"); + + unit_msg = str_list_convert (list); + str_list_destroy (list); + +/* disk type */ + list = str_list_create (_(label_type_msg_start), NULL); + + first = 1; + for (disk_type = ped_disk_type_get_next (NULL); + disk_type; disk_type = ped_disk_type_get_next (disk_type)) { + if (disk_type->ops->write == NULL) + continue; + + if (first) + first = 0; + else + str_list_append (list, ", "); + str_list_append (list, disk_type->name); + } + str_list_append (list, "\n"); + + label_type_msg = str_list_convert (list); + str_list_destroy (list); + +/* mkpart - file system types and aliases */ + list = str_list_create (_(fs_type_msg_start), NULL); + + first = 1; + for (fs_type = ped_file_system_type_get_next (NULL); + fs_type; fs_type = ped_file_system_type_get_next (fs_type)) { + if (first) + first = 0; + else + str_list_append (list, ", "); + str_list_append (list, fs_type->name); + } + for (fs_alias = ped_file_system_alias_get_next (NULL); + fs_alias; fs_alias = ped_file_system_alias_get_next (fs_alias)) { + if (first) + first = 0; + else + str_list_append (list, ", "); + str_list_append (list, fs_alias->alias); + } + str_list_append (list, "\n"); + + mkpart_fs_type_msg = str_list_convert (list); + str_list_destroy (list); +} + +static void +_done_messages () +{ + free (flag_msg); + free (unit_msg); + free (mkpart_fs_type_msg); + free (label_type_msg); +} + +static void +_init_commands () +{ + command_register (commands, + command_create ( str_list_create_unique ("align-check", + _("align-check"), NULL), + do_align_check, + str_list_create ( + _("align-check TYPE N" + " " + "check partition N for" + " TYPE(min|opt) alignment"), NULL), + + str_list_create (_(number_msg), _(min_or_opt_msg), + NULL), 1)); + command_register (commands, command_create ( + str_list_create_unique ("help", _("help"), NULL), + do_help, + str_list_create ( +_("help [COMMAND] print general help, or help " + "on COMMAND"), +NULL), + NULL, 1)); + + command_register (commands, command_create ( + str_list_create_unique ("mklabel", _("mklabel"), "mktable", _("mktable"), NULL), + do_mklabel, + str_list_create ( +_("mklabel,mktable LABEL-TYPE create a new disklabel " + "(partition table)"), +NULL), + str_list_create (label_type_msg, NULL), 1)); + + command_register (commands, command_create ( + str_list_create_unique ("mkpart", _("mkpart"), NULL), + do_mkpart, + str_list_create ( +_("mkpart PART-TYPE [FS-TYPE] START END make a partition"), +NULL), + str_list_create (_(part_type_msg), + _(mkpart_fs_type_msg), + _(start_end_msg), + "\n", +_("'mkpart' makes a partition without creating a new file system on the " + "partition. FS-TYPE may be specified to set an appropriate partition ID.\n"), +NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("name", _("name"), NULL), + do_name, + str_list_create ( +_("name NUMBER NAME name partition NUMBER as NAME"), +NULL), + str_list_create (_(number_msg), _(name_msg), NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("print", _("print"), NULL), + do_print, + str_list_create ( +_("print [devices|free|list,all] display the partition table, " + "or available devices, or free space, or all found partitions"), +NULL), + str_list_create ( +_("Without arguments, 'print' displays the entire partition table. However " + "with the following arguments it performs various other actions.\n"), +_(" devices : display all active block devices\n"), +_(" free : display information about free unpartitioned space on the " + "current block device\n"), +_(" list, all : display the partition tables of all active block devices\n"), +NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("quit", _("quit"), NULL), + do_quit, + str_list_create ( +_("quit exit program"), +NULL), + NULL, 1)); + +command_register (commands, command_create ( + str_list_create_unique ("rescue", _("rescue"), NULL), + do_rescue, + str_list_create ( +_("rescue START END rescue a lost partition near " +"START and END"), +NULL), + str_list_create (_(start_end_msg), NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("resize", _("resize"), NULL), + do_resize, + NULL, + str_list_create (_(N_("The resize command was removed in parted 3.0\n")), NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("resizepart", _("resizepart"), NULL), + do_resizepart, + str_list_create ( +_("resizepart NUMBER END resize partition NUMBER"), +NULL), + str_list_create (_(number_msg), _(end_msg), NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("rm", _("rm"), NULL), + do_rm, + str_list_create ( +_("rm NUMBER delete partition NUMBER"), +NULL), + str_list_create (_(number_msg), NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("select", _("select"), NULL), + do_select, + str_list_create ( +_("select DEVICE choose the device to edit"), +NULL), + str_list_create (_(device_msg), NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("disk_set", _("disk_set"), NULL), + do_disk_set, + str_list_create ( +_("disk_set FLAG STATE change the FLAG on selected device"), +NULL), + str_list_create (disk_flag_msg, _(state_msg), NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("disk_toggle", _("disk_toggle"), NULL), + do_disk_toggle, + str_list_create ( +_("disk_toggle [FLAG] toggle the state of FLAG on " +"selected device"), +NULL), + str_list_create (disk_flag_msg, NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("set", _("set"), NULL), + do_set, + str_list_create ( +_("set NUMBER FLAG STATE change the FLAG on partition " + "NUMBER"), +NULL), + str_list_create (_(number_msg), flag_msg, _(state_msg), NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("toggle", _("toggle"), NULL), + do_toggle, + str_list_create ( +_("toggle [NUMBER [FLAG]] toggle the state of FLAG on " + "partition NUMBER"), +NULL), + str_list_create (_(number_msg), flag_msg, NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("type", _("type"), NULL), + do_type, + str_list_create ( +_("type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of partition NUMBER"), +NULL), + str_list_create (_(number_msg), _(type_msg), NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("unit", _("unit"), NULL), + do_unit, + str_list_create ( +_("unit UNIT set the default unit to UNIT"), +NULL), + str_list_create (unit_msg, NULL), 1)); + +command_register (commands, command_create ( + str_list_create_unique ("version", _("version"), NULL), + do_version, + str_list_create ( +_("version display the version number " +"and copyright information of GNU Parted"), +NULL), + str_list_create ( +_("'version' displays copyright and version information corresponding to this " +"copy of GNU Parted\n"), +NULL), 1)); + +} + +static void +_done_commands () +{ +Command** walk; + +for (walk = commands; *walk; walk++) { + command_destroy (*walk); + *walk = NULL; +} +} + +static void +_init_i18n () +{ +/* intialize i18n */ +#ifdef ENABLE_NLS +setlocale(LC_ALL, ""); +bindtextdomain(PACKAGE, LOCALEDIR); +textdomain(PACKAGE); +#endif /* ENABLE_NLS */ +} + +void +_version () +{ + version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, Version, AUTHORS, + (char *) NULL); +} + +static int +_parse_options (int* argc_ptr, char*** argv_ptr) +{ +int opt, help = 0, list = 0, version = 0, wrong = 0; + +while (1) +{ + opt = getopt_long (*argc_ptr, *argv_ptr, "hlmjsfva:", + options, NULL); + if (opt == -1) + break; + + switch (opt) { + case 'h': help = 1; break; + case 'l': list = 1; break; + case 'm': opt_output_mode = MACHINE; break; + case 'j': opt_output_mode = JSON; break; + case 's': opt_script_mode = 1; break; + case 'f': opt_fix_mode = 1; break; + case 'v': version = 1; break; + case 'a': + alignment = XARGMATCH ("--align", optarg, + align_args, align_types); + break; + case PRETEND_INPUT_TTY: + pretend_input_tty = 1; + break; + default: + wrong = 1; + break; + } +} + +if (wrong == 1) { + fprintf (stderr, + _("Usage: %s [-hlmsfv] [-a] [DEVICE [COMMAND [PARAMETERS]]...]\n"), + program_name); + return 0; +} + +if (version == 1) { + _version (); + exit (EXIT_SUCCESS); +} + +if (help == 1) { + help_msg (); + exit (EXIT_SUCCESS); +} + +if (list == 1) { + _print_list (); + exit (EXIT_SUCCESS); +} + +*argc_ptr -= optind; +*argv_ptr += optind; +return 1; +} + +static PedDevice* +_choose_device (int* argc_ptr, char*** argv_ptr) +{ +PedDevice* dev; + +/* specified on command line? */ +if (*argc_ptr) { + dev = ped_device_get ((*argv_ptr) [0]); + if (!dev) + return NULL; + (*argc_ptr)--; + (*argv_ptr)++; +} else { +retry: + ped_device_probe_all (); + dev = ped_device_get_next (NULL); + if (!dev) { + if (ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_RETRY_CANCEL, + _("No device found")) + == PED_EXCEPTION_RETRY) + goto retry; + else + return NULL; + } +} + +if (!ped_device_open (dev)) + return NULL; +return dev; +} + +static PedDevice* +_init (int* argc_ptr, char*** argv_ptr) +{ +PedDevice* dev; + +#ifdef ENABLE_MTRACE +mtrace(); +#endif + +_init_i18n (); +if (!init_ui ()) + goto error; +_init_messages (); +_init_commands (); + +if (!_parse_options (argc_ptr, argv_ptr)) + goto error_done_commands; + +if (!opt_script_mode) + if (init_readline ()) + goto error_done_commands; + +#ifdef HAVE_GETUID + if (getuid() != 0 && !opt_script_mode) { + fputs (_("WARNING: You are not superuser. Watch out for " + "permissions.\n"), stderr); + } +#endif + +dev = _choose_device (argc_ptr, argv_ptr); +if (!dev) + goto error_done_commands; + +g_timer = ped_timer_new (_timer_handler, &timer_context); +if (!g_timer) + goto error_done_commands; +timer_context.last_update = 0; + +return dev; + +error_done_commands: +_done_commands (); +_done_messages (); +done_ui (); +error: +return NULL; +} + +static void +_done (PedDevice* dev, PedDisk* diskp) +{ + if (diskp) + ped_disk_destroy (diskp); + if (dev->boot_dirty && dev->type != PED_DEVICE_FILE) { + ped_exception_throw ( + PED_EXCEPTION_WARNING, + PED_EXCEPTION_OK, + _("You should reinstall your boot loader before " + "rebooting. Read section 4 of the Parted User " + "documentation for more information.")); + } + if (!opt_script_mode && opt_output_mode == HUMAN && disk_is_modified) { + ped_exception_throw ( + PED_EXCEPTION_INFORMATION, PED_EXCEPTION_OK, + _("You may need to update /etc/fstab.\n")); +} + +ped_device_close (dev); + +ped_timer_destroy (g_timer); +_done_commands (); +_done_messages (); +done_ui(); +} + +int +parted_main (int argc, char** argv) +{ + PedDevice* dev; + PedDisk* diskp = 0; + int status; + + set_program_name (argv[0]); + atexit (close_stdout); + + dev = _init (&argc, &argv); + if (!dev) + return 1; + + if (argc || opt_script_mode) + status = non_interactive_mode (&dev, &diskp, commands, argc, argv); + else + status = interactive_mode (&dev, &diskp, commands); + + _done (dev, diskp); + + return !status; +} diff --git a/jni/parted/parted/strlist.c b/jni/parted/parted/strlist.c new file mode 100755 index 0000000..c4cb351 --- /dev/null +++ b/jni/parted/parted/strlist.c @@ -0,0 +1,582 @@ +/* + parted - a frontend to libparted + Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include "xalloc.h" + +#ifdef ENABLE_NLS + +#undef __USE_GNU +#define __USE_GNU + +#include +#include + +#endif /* !ENABLE_NLS */ + +#include "strlist.h" + +#define MIN(a,b) ( (anext = NULL; + + return list; +} + +void +str_list_destroy (StrList* list) +{ + if (list) { + str_list_destroy (list->next); + str_list_destroy_node (list); + } +} + +void +str_list_destroy_node (StrList* list) +{ + void *p = (char *) (list->str); /* discard const */ + free (p); + free (list); +} + +StrList* +str_list_duplicate_node (const StrList* node) +{ + StrList* result = str_list_alloc (); + result->str = wchar_strdup (node->str); + return result; +} + +StrList* +str_list_duplicate (const StrList* list) +{ + if (list) + return str_list_join (str_list_duplicate_node (list), + str_list_duplicate (list->next)); + else + return NULL; +} + +StrList* +str_list_join (StrList* a, StrList* b) +{ + StrList* walk; + + for (walk = a; walk && walk->next; walk = walk->next); + + if (walk) { + walk->next = b; + return a; + } else { + return b; + } +} + +static StrList* +_str_list_append (StrList* list, const wchar_t* str) +{ + StrList* walk; + + if (list) { + for (walk = list; walk->next; walk = walk->next); + walk->next = str_list_alloc (); + walk = walk->next; + } else { + walk = list = str_list_alloc (); + } + walk->str = str; + + return list; +} + +StrList* +str_list_append (StrList* list, const char* str) +{ + return _str_list_append (list, gettext_to_wchar (str)); +} + +StrList* +str_list_append_unique (StrList* list, const char* str) +{ + StrList* walk; + wchar_t* new_str = gettext_to_wchar (str); + + for (walk=list; walk; walk=walk->next) { + if (walk->str) { + if (wchar_strcasecmp (new_str, walk->str) == 0) { + free (new_str); + return list; + } + } + } + + return _str_list_append (list, new_str); +} + +StrList* +str_list_insert (StrList* list, const char* str) +{ + return str_list_join (str_list_create (str, NULL), list); +} + +StrList* +str_list_create (const char* first, ...) +{ + va_list args; + char* str; + StrList* list; + + list = str_list_append (NULL, first); + + if (first) { + va_start (args, first); + while ( (str = va_arg (args, char*)) ) + str_list_append (list, str); + va_end (args); + } + + return list; +} + +StrList* +str_list_create_unique (const char* first, ...) +{ + va_list args; + char* str; + StrList* list; + + list = str_list_append (NULL, first); + + if (first) { + va_start (args, first); + while ( (str = va_arg (args, char*)) ) + str_list_append_unique (list, str); + va_end (args); + } + + return list; +} + +char* +str_list_convert_node (const StrList* list) +{ + return wchar_to_str (list->str, 0); +} + +char* +str_list_convert (const StrList* list) +{ + const StrList* walk; + int pos = 0; + int length = 1; + char* str = xstrdup (""); + + for (walk = list; walk; walk = walk->next) { + if (walk->str) { + char* tmp = wchar_to_str (walk->str, 0); + + length += strlen (tmp); + + str = realloc (str, length); + strcpy (str + pos, tmp); + + pos = length - 1; + free (tmp); + } + } + + return str; +} + +void +str_list_print (const StrList* list, FILE *fp) +{ + const StrList* walk; + + for (walk=list; walk; walk=walk->next) { + if (walk->str) + print_wchar (walk->str, 0, fp); + } +} + +static int +str_search (const wchar_t* str, int n, wchar_t c) +{ + int i; + + for (i=0; i 10); + + line_left = line_length - offset; + + for (walk=list; walk; walk=walk->next) { + if (!walk->str) + continue; + str = walk->str; + str_len = wchar_strlen (str); + + while (line_left < str_len || wchar_strchr (str, '\n')) { + line_break = 0; + + cut_left = MIN (line_left - 1, str_len - 1); + + /* we can have a space "over", but not a comma */ + if (cut_left < str_len + && is_space (str [cut_left + 1])) + cut_left++; + + while (cut_left && !is_break_point (str [cut_left])) + cut_left--; + while (cut_left && is_space (str [cut_left])) + cut_left--; + + /* str [cut_left] is either the end of a word, or a + * Japanese character, or the start of a blank line. + */ + + search_result = str_search (str, cut_left + 1, '\n'); + if (search_result != -1) { + cut_left = search_result - 1; + line_break = 1; + } + + for (cut_right = cut_left + (line_break ? 2 : 1); + cut_right < str_len && is_space (str [cut_right]); + cut_right++); + + if (cut_left > 0) + print_wchar (str, cut_left + 1, fp); + + str += cut_right; + str_len -= cut_right; + line_left = line_length - indent; + + if (walk->next || *str) + fprintf (fp, "\n%*s", indent, ""); + else if (line_break) + fputc ('\n', fp); + } + + print_wchar (str, 0, fp); + line_left -= wchar_strlen (str); + } +} + +static int +_str_list_match_node (const StrList* list, const wchar_t* str) +{ + if (wchar_strcasecmp (list->str, str) == 0) + return 2; + if (wchar_strncasecmp (list->str, str, wchar_strlen (str)) == 0) + return 1; + return 0; +} + +int +str_list_match_node (const StrList* list, const char* str) +{ + wchar_t* wc_str = gettext_to_wchar (str); /* FIXME */ + int status; + + status = _str_list_match_node (list, wc_str); + free (wc_str); + + return status; +} + +/* returns: 2 for full match + 1 for partial match + 0 for no match + */ +int +str_list_match_any (const StrList* list, const char* str) +{ + const StrList* walk; + int best_status = 0; + wchar_t* wc_str = gettext_to_wchar (str); + + for (walk = list; walk; walk = walk->next) { + int this_status = _str_list_match_node (walk, wc_str); + if (this_status > best_status) + best_status = this_status; + } + + free (wc_str); + return best_status; +} + +StrList* +str_list_match (const StrList* list, const char* str) +{ + const StrList* walk; + const StrList* partial_match = NULL; + int ambiguous = 0; + wchar_t* wc_str = gettext_to_wchar (str); + + for (walk = list; walk; walk = walk->next) { + switch (_str_list_match_node (walk, wc_str)) { + case 2: + free (wc_str); + return (StrList*) walk; + + case 1: + if (partial_match) + ambiguous = 1; + partial_match = walk; + } + } + + free (wc_str); + return ambiguous ? NULL : (StrList*) partial_match; +} + +int +str_list_length (const StrList* list) +{ + int length = 0; + const StrList* walk; + + for (walk = list; walk; walk = walk->next) + length++; + + return length; +} diff --git a/jni/parted/parted/strlist.h b/jni/parted/parted/strlist.h new file mode 100755 index 0000000..f9c4183 --- /dev/null +++ b/jni/parted/parted/strlist.h @@ -0,0 +1,66 @@ +/* + parted - a frontend to libparted + Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software + Foundation, Inc. + + 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 3 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, see . +*/ + +#ifndef STRLIST_H_INCLUDED +#define STRLIST_H_INCLUDED + +#include + +#ifndef ENABLE_NLS +# define L_(str) str +# ifdef wchar_t +# undef wchar_t +# endif +# define wchar_t char +#endif + +typedef struct _StrList StrList; +struct _StrList { + StrList* next; + const wchar_t* str; +}; + +extern char* language; +extern char* gettext_charset; +extern char* term_charset; + +extern StrList* str_list_create (const char* first, ...); +extern StrList* str_list_create_unique (const char* first, ...); +extern void str_list_destroy (StrList* list); +extern void str_list_destroy_node (StrList* list); + +extern StrList* str_list_duplicate (const StrList* list); +extern StrList* str_list_duplicate_node (const StrList* list); +extern StrList* str_list_insert (StrList* list, const char* str); +extern StrList* str_list_append (StrList* list, const char* str); +extern StrList* str_list_append_unique (StrList* list, const char* str); +extern StrList* str_list_join (StrList* a, StrList* b); +extern char* str_list_convert (const StrList* list); +extern char* str_list_convert_node (const StrList* list); + +extern void str_list_print (const StrList* list, FILE *fp); +extern void str_list_print_wrap (const StrList* list, int line_length, + int offset, int indent, FILE *fp); +extern int str_list_match_any (const StrList* list, const char* str); +extern int str_list_match_node (const StrList* list, const char* str); +extern StrList* str_list_match (const StrList* list, const char* str); + +extern int str_list_length (const StrList* list) _GL_ATTRIBUTE_PURE; + +#endif /* STRLIST_H_INCLUDED */ diff --git a/jni/parted/parted/table.c b/jni/parted/parted/table.c new file mode 100755 index 0000000..63c0e6a --- /dev/null +++ b/jni/parted/parted/table.c @@ -0,0 +1,245 @@ +/* + * TODO: - make right and centered alignment possible + */ +/* + parted - a frontend to libparted + Copyright (C) 2006-2014, 2019-2023 Free Software Foundation, Inc. + + 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 3 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, see . +*/ + + +#include + +#include +#include + +#include +#include +#include + +#include "xalloc.h" +#include "strlist.h" + +#ifdef ENABLE_NLS +# define L_(str) L##str +#else +# define L_(str) str +# define wcslen strlen +# define wcswidth strnlen +# define wcscat strcat +# define wcsdup xstrdup +#endif + + +static const unsigned int MAX_WIDTH = 512; +static const wchar_t* DELIMITER = L_(" "); +static const wchar_t* COLSUFFIX = L_("\n"); + +typedef struct +{ + unsigned int ncols; + unsigned int nrows; + wchar_t*** rows; + int* widths; +} Table; + + +Table* table_new(int ncols) +{ + assert ( ncols >= 0 ); + + Table *t = xmalloc (sizeof(*t)); + + t->ncols = ncols; + t->nrows = 0; + t->rows = (wchar_t***)NULL; + t->widths = NULL; + + return t; +} + + +void table_destroy (Table* t) +{ + unsigned int r, c; + + assert (t); + assert (t->ncols > 0); + + for (r = 0; r < t->nrows; ++r) + { + for (c = 0; c < t->ncols; ++c) + free (t->rows[r][c]); + free (t->rows[r]); + } + + free (t->rows); + free (t->widths); + free (t); +} + + +static int max (int x, int y) +{ + return x > y ? x : y; +} + + +static void table_calc_column_widths (Table* t) +{ + unsigned int r, c; + + assert(t); + assert(t->ncols > 0); + + if (!t->widths) + t->widths = xmalloc (t->ncols * sizeof(t->widths[0])); + + for (c = 0; c < t->ncols; ++c) + t->widths[c] = 0; + + for (r = 0; r < t->nrows; ++r) + for (c = 0; c < t->ncols; ++c) + { + t->widths[c] = max ( t->widths[c], + wcswidth(t->rows[r][c], + MAX_WIDTH) ); + } +} + + +/* + * add a row which is a string array of ncols elements. + * 'row' will get freed by table_destroy; you must not free it + * yourself. + */ +void table_add_row (Table* t, wchar_t** row) +{ + assert(t); + + /*unsigned int i; + fputs ("adding row: ", stdout); + for (i = 0; i < t->ncols; ++i) + printf("[%s]", row[i]); + putchar ('\n');*/ + + t->rows = xrealloc (t->rows, (t->nrows + 1) * sizeof(*(t->rows))); + + t->rows[t->nrows] = row; + + ++t->nrows; + + table_calc_column_widths (t); +} + + +void table_add_row_from_strlist (Table* t, StrList* list) +{ + wchar_t** row = xmalloc (str_list_length(list) * sizeof(*row)); + int i = 0; + + while (list) + { + row[i] = wcsdup (list->str); + if (row[i] == NULL) + xalloc_die (); + + + list = list->next; + ++i; + } + + table_add_row (t, row); +} + + +/* render a row */ +static void table_render_row (Table* t, int rownum, int ncols, wchar_t** s) +{ + wchar_t** row = t->rows[rownum]; + size_t len = 1, i; + size_t newsize; + + assert(t); + assert(s != NULL); + + for (i = 0; i < ncols; ++i) + len += t->widths[i] + wcslen(DELIMITER); + + len += wcslen(COLSUFFIX); + + newsize = (wcslen(*s) + len + 1) * sizeof(wchar_t); + *s = xrealloc (*s, newsize); + + for (i = 0; i < ncols; ++i) + { + wcscat (*s, row[i]); + if (ncols <= i + 1) + break; + + int j; + int nspaces = max(t->widths[i] - wcswidth(row[i], MAX_WIDTH), + 0); + wchar_t* pad = xmalloc ((nspaces + 1) * sizeof(*pad)); + + for (j = 0; j < nspaces; ++j) + pad[j] = L' '; + + pad[nspaces] = L_('\0'); + + wcscat (*s, pad); + if (i + 1 < ncols) + wcscat (*s, DELIMITER); + + free (pad); + } + + /* Remove any trailing blanks. */ + wchar_t *p = *s; + size_t k = wcslen (p); + while (k && p[k-1] == L_(' ')) + --k; + p[k] = L_('\0'); + + + wcscat (*s, COLSUFFIX); +} + + +/* + * Render the rows. + * \p s must be a null-terminated string. + */ +static void table_render_rows (Table* t, wchar_t** s) +{ + unsigned int i; + + assert (**s == L_('\0')); + for (i = 0; i < t->nrows; ++i) + table_render_row (t, i, t->ncols, s); +} + +/* + * Render the table to a string. + * You are responsible for freeing the returned string. + */ +wchar_t* table_render(Table* t) +{ + wchar_t* s = xmalloc (sizeof(*s)); + + *s = L_('\0'); + table_render_rows (t, &s); + return s; +} diff --git a/jni/parted/parted/table.h b/jni/parted/parted/table.h new file mode 100755 index 0000000..8c645d7 --- /dev/null +++ b/jni/parted/parted/table.h @@ -0,0 +1,52 @@ +/* + parted - a frontend to libparted + Copyright (C) 2006-2007, 2009-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include + +#include + +#include "strlist.h" + +#ifdef ENABLE_NLS +# include +#else +# ifdef wchar_t +# undef wchar_t +# endif +# define wchar_t char +#endif + + +/* opaque data type */ +typedef void Table; + +Table* table_new(int ncols); +void table_destroy (Table* t); + +/* + * you must not free neither 'row' nor 'list' + * -- this will be done by table_destroy() + */ +void table_add_row (Table* t, wchar_t** row); +void table_add_row_from_strlist (Table* t, StrList* list); + +wchar_t* table_render(Table* t); diff --git a/jni/parted/parted/ui.c b/jni/parted/parted/ui.c new file mode 100755 index 0000000..2348bb3 --- /dev/null +++ b/jni/parted/parted/ui.c @@ -0,0 +1,1715 @@ +/* + parted - a frontend to libparted + Copyright (C) 1999-2002, 2006-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "command.h" +#include "strlist.h" +#include "ui.h" +#include "error.h" + +#define N_(String) String +#if ENABLE_NLS +# include +# include +# define _(String) dgettext (PACKAGE, String) +#else +# define _(String) (String) +#endif /* ENABLE_NLS */ + +#ifdef HAVE_LIBREADLINE + +#ifdef HAVE_TERMCAP_H +#include +#else +extern int tgetnum (char* key); +#endif + +#include +#include + +#ifndef HAVE_RL_COMPLETION_MATCHES +#define rl_completion_matches completion_matches +#endif + +#ifndef rl_compentry_func_t +#define rl_compentry_func_t void +#endif + +#endif /* HAVE_LIBREADLINE */ + +#ifndef SA_SIGINFO +# ifndef HAVE_SIGACTION + +struct sigaction { +}; + +static inline int +sigaction (int signum, const struct* sigaction, struct* sigaction) +{ +} + +# endif /* HAVE_SIGACTON */ + +struct siginfo_t { + int si_code; +}; + +#endif /* SA_SIGINFO */ + +#ifndef SEGV_MAPERR +# define SEGV_MAPERR (INTMAX - 1) +#endif + +#ifndef SEGV_ACCERR +# define SEGV_ACCERR (INTMAX - 2) +#endif + +#ifndef FPE_INTDIV +# define FPE_INTDIV (INTMAX - 1) +#endif + +#ifndef FPE_INTOVF +# define FPE_INTOVF (INTMAX - 2) +#endif + +#ifndef FPE_FLTDIV +# define FPE_FLTDIV (INTMAX - 3) +#endif + +#ifndef FPE_FLTOVF +# define FPE_FLTOVF (INTMAX - 4) +#endif + +#ifndef FPE_FLTUND +# define FPE_FLTUND (INTMAX - 5) +#endif + +#ifndef FPE_FLTRES +# define FPE_FLTRES (INTMAX - 6) +#endif + +#ifndef FPE_FLTINV +# define FPE_FLTINV (INTMAX - 7) +#endif + +#ifndef FPE_FLTSUB +# define FPE_FLTSUB (INTMAX - 8) +#endif + +#ifndef ILL_ILLOPC +# define ILL_ILLOPC (INTMAX - 1) +#endif + +#ifndef ILL_ILLOPN +# define ILL_ILLOPN (INTMAX - 2) +#endif + +#ifndef ILL_ILLADR +# define ILL_ILLADR (INTMAX - 3) +#endif + +#ifndef ILL_ILLTRP +# define ILL_ILLTRP (INTMAX - 4) +#endif + +#ifndef ILL_PRVOPC +# define ILL_PRVOPC (INTMAX - 5) +#endif + +#ifndef ILL_PRVREG +# define ILL_PRVREG (INTMAX - 6) +#endif + +#ifndef ILL_COPROC +# define ILL_COPROC (INTMAX - 7) +#endif + +#ifndef ILL_BADSTK +# define ILL_BADSTK (INTMAX - 8) +#endif + +volatile int set_ret = 0; +volatile int parted_ret = 0; + +const char* prog_name = "GNU Parted " VERSION "\n"; + +static const char* banner_msg = N_( +"Welcome to GNU Parted! Type 'help' to view a list of commands.\n"); + +static const char* usage_msg = N_( +"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n" +"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, " +"run in\ninteractive mode.\n"); + +static const char* bug_msg = N_( +"\n\nYou found a bug in GNU Parted! Here's what you have to do:\n\n" +"Don't panic! The bug has most likely not affected any of your data.\n" +"Help us to fix this bug by doing the following:\n\n" +"Check whether the bug has already been fixed by checking\n" +"the last version of GNU Parted that you can find at:\n\n" +"\thttp://ftp.gnu.org/gnu/parted/\n\n" +"Please check this version prior to bug reporting.\n\n" +"If this has not been fixed yet or if you don't know how to check,\n" +"please visit the GNU Parted website:\n\n" +"\thttp://www.gnu.org/software/parted\n\n" +"for further information.\n\n" +"Your report should contain the version of this release (%s)\n" +"along with the error message below, the output of\n\n" +"\tparted DEVICE unit co print unit s print\n\n" +"and the following history of commands you entered.\n" +"Also include any additional information about your setup you\n" +"consider important.\n"); + +#define MAX_WORDS 1024 + +static StrList* command_line; +static Command** commands; +static StrList* ex_opt_str [64]; +static StrList* on_list; +static StrList* off_list; +static StrList* on_off_list; + +static StrList* align_opt_list; +static StrList* align_min_list; +static StrList* align_opt_min_list; + +static StrList* fs_type_list; +static StrList* disk_type_list; + +static struct { + const StrList* possibilities; + const StrList* cur_pos; + int in_readline; + sigjmp_buf jmp_state; +} readline_state; + +static struct sigaction sig_segv; +static struct sigaction sig_int; +static struct sigaction sig_fpe; +static struct sigaction sig_ill; + +volatile int got_ctrl_c = 0; /* used in exception_handler */ + +int +screen_width () +{ + int width = 0; + + if (opt_script_mode || pretend_input_tty) + return 32768; /* no wrapping ;) */ + +/* HACK: don't specify termcap separately - it'll annoy the users. */ +#ifdef HAVE_LIBREADLINE + width = tgetnum ((char *) "co"); +#endif + + if (width <= 0) + width = 80; + + return width; +} + +void +wipe_line () +{ + if (opt_script_mode) + return; + + /* yuck */ + fputs ("\r " + " \r", stdout); +} + +#ifdef HAVE_LIBREADLINE +/* returns matching commands for text */ +static char* +command_generator (char* text, int state) +{ + if (!state) + readline_state.cur_pos = readline_state.possibilities; + + while (readline_state.cur_pos) { + const StrList* cur = readline_state.cur_pos; + readline_state.cur_pos = cur->next; + if (str_list_match_node (cur, text)) + return str_list_convert_node (cur); + } + + return NULL; +} + +/* completion function for readline() */ +char** +complete_function (char* text, int start, int end) +{ + return rl_completion_matches (text, + (rl_compentry_func_t*) command_generator); +} + +static void +_add_history_unique (const char* line) +{ + HIST_ENTRY* last_entry = current_history (); + if (!strlen (line)) + return; + if (!last_entry || strcmp (last_entry->line, line)) + add_history ((char*) line); +} + +/* Prints command history, to be used before aborting */ +static void +_dump_history () +{ + int i = 0; + HIST_ENTRY** all_entries = history_list (); + + fputs (_("\nCommand History:\n"), stdout); + while (all_entries[i]) { + puts(all_entries[i++]->line); + } +} + +#else + +/* Print nothing because Readline is absent. */ +static inline void +_dump_history (void) +{ +} + +#endif /* HAVE_LIBREADLINE */ + +/* Resets the environment by jumping to the initial state + * saved during ui intitialisation. + * Pass 1 as the parameter if you want to quit parted, + * 0 if you just want to reset to the command prompt. + */ +static void +reset_env (int quit) +{ + int in_readline = readline_state.in_readline; + + readline_state.in_readline = 0; + + if (in_readline) { + putchar ('\n'); + if (quit) { + set_ret = 1; + parted_ret = 0; + sleep(1); + exit (EXIT_SUCCESS); + } + + siglongjmp (readline_state.jmp_state, 1); + } +} + +/* Signal handler for SIGINT using 'sigaction'. */ +static void +sa_sigint_handler (int signum, siginfo_t* info, void *ucontext) +{ + if (info) + sigaction (SIGINT, &sig_int, NULL); + + got_ctrl_c = 1; + reset_env (0); +} + +/* Signal handler for SIGSEGV using 'sigaction'. */ +static void +sa_sigsegv_handler (int signum, siginfo_t* info, void* ucontext) +{ + fprintf (stderr, bug_msg, VERSION); + _dump_history (); + + if (!info) + abort (); + + sigaction (SIGSEGV, &sig_segv, NULL); + + switch (info->si_code) { + + case SEGV_MAPERR: + fputs(_("\nError: SEGV_MAPERR (Address not mapped " + "to object)\n"), stdout); + PED_ASSERT(0); /* Force a backtrace */ + break; + + case SEGV_ACCERR: + fputs(_("\nError: SEGV_ACCERR (Invalid permissions " + "for mapped object)\n"), stdout); + break; + + default: + fputs(_("\nError: A general SIGSEGV signal was " + "encountered.\n"), stdout); + PED_ASSERT(0); /* Force a backtrace */ + break; + } + + abort (); +} + +/* Signal handler for SIGFPE using 'sigaction'. */ +static void +sa_sigfpe_handler (int signum, siginfo_t* info, void* ucontext) +{ + fprintf (stderr, bug_msg, VERSION); + _dump_history (); + + if (!info) + abort (); + + sigaction (SIGFPE, &sig_fpe, NULL); + + switch (info->si_code) { + + case FPE_INTDIV: + fputs(_("\nError: FPE_INTDIV (Integer: " + "divide by zero)"), stdout); + break; + + case FPE_INTOVF: + fputs(_("\nError: FPE_INTOVF (Integer: " + "overflow)"), stdout); + break; + + case FPE_FLTDIV: + fputs(_("\nError: FPE_FLTDIV (Float: " + "divide by zero)"), stdout); + break; + + case FPE_FLTOVF: + fputs(_("\nError: FPE_FLTOVF (Float: " + "overflow)"), stdout); + break; + + case FPE_FLTUND: + fputs(_("\nError: FPE_FLTUND (Float: " + "underflow)"), stdout); + break; + + case FPE_FLTRES: + fputs(_("\nError: FPE_FLTRES (Float: " + "inexact result)"), stdout); + break; + + case FPE_FLTINV: + fputs(_("\nError: FPE_FLTINV (Float: " + "invalid operation)"), stdout); + break; + + case FPE_FLTSUB: + fputs(_("\nError: FPE_FLTSUB (Float: " + "subscript out of range)"), stdout); + break; + + default: + fputs(_("\nError: A general SIGFPE signal " + "was encountered."), stdout); + break; + + } + + abort (); +} + +/* Signal handler for SIGILL using 'sigaction'. */ +static void +sa_sigill_handler (int signum, siginfo_t* info, void* ucontext) +{ + fprintf (stderr, bug_msg, VERSION); + _dump_history (); + + if (!info) + abort(); + + sigaction (SIGILL, &sig_ill, NULL); + + switch (info->si_code) { + + case ILL_ILLOPC: + fputs(_("\nError: ILL_ILLOPC " + "(Illegal Opcode)"), stdout); + break; + + case ILL_ILLOPN: + fputs(_("\nError: ILL_ILLOPN " + "(Illegal Operand)"), stdout); + break; + + case ILL_ILLADR: + fputs(_("\nError: ILL_ILLADR " + "(Illegal addressing mode)"), stdout); + break; + + case ILL_ILLTRP: + fputs(_("\nError: ILL_ILLTRP " + "(Illegal Trap)"), stdout); + break; + + case ILL_PRVOPC: + fputs(_("\nError: ILL_PRVOPC " + "(Privileged Opcode)"), stdout); + break; + + case ILL_PRVREG: + fputs(_("\nError: ILL_PRVREG " + "(Privileged Register)"), stdout); + break; + + case ILL_COPROC: + fputs(_("\nError: ILL_COPROC " + "(Coprocessor Error)"), stdout); + break; + + case ILL_BADSTK: + fputs(_("\nError: ILL_BADSTK " + "(Internal Stack Error)"), stdout); + break; + + default: + fputs(_("\nError: A general SIGILL " + "signal was encountered."), stdout); + break; + } + + abort (); +} + +#ifndef SA_SIGINFO + +static void +mask_signal() +{ + sigset_t curr; + sigset_t prev; + + sigfillset(&curr); + sigprocmask(SIG_SETMASK, &curr, &prev); +} + +/* Signal handler for SIGINT using 'signal'. */ +static void +s_sigint_handler (int signum) +{ + signal (SIGINT, &s_sigint_handler); + mask_signal (); + sa_sigint_handler (signum, NULL, NULL); +} + +/* Signal handler for SIGILL using 'signal'. */ +static void +s_sigill_handler (int signum) +{ + signal (SIGILL, &s_sigill_handler); + mask_signal (); + sa_sigill_handler (signum, NULL, NULL); +} + +/* Signal handler for SIGSEGV using 'signal'. */ +static void +s_sigsegv_handler (int signum) +{ + signal (SIGSEGV, &s_sigsegv_handler); + mask_signal (); + sa_sigsegv_handler (signum, NULL, NULL); +} + +/* Signal handler for SIGFPE using 'signal'. */ +static void +s_sigfpe_handler (int signum) +{ + signal (SIGFPE, &s_sigfpe_handler); + mask_signal (); + sa_sigfpe_handler (signum, NULL, NULL); +} +#endif + +static char* +_readline (const char* prompt, const StrList* possibilities) +{ + char* line; + + readline_state.possibilities = possibilities; + readline_state.cur_pos = NULL; + readline_state.in_readline = 1; + + if (sigsetjmp (readline_state.jmp_state,1)) + return NULL; + + wipe_line (); +#ifdef HAVE_LIBREADLINE + if (!opt_script_mode) { + line = readline (prompt); + if (line) + _add_history_unique (line); + } else +#endif + { + fputs (prompt, stdout); + fflush (stdout); + line = (char*) malloc (256); + if (fgets (line, 256, stdin) && strcmp (line, "") != 0) { +#ifndef HAVE_LIBREADLINE + /* Echo the input line, to be consistent with + how readline-5.2 works. */ + fputs (line, stdout); + fflush (stdout); +#endif + /* kill trailing NL */ + if (strlen (line)) + line [strlen (line) - 1] = 0; + } else { + free (line); + line = NULL; + } + } + + readline_state.in_readline = 0; + return line; +} + +static PedExceptionOption _GL_ATTRIBUTE_PURE +option_get_next (PedExceptionOption options, PedExceptionOption current) +{ + PedExceptionOption i; + + if (current == 0) + i = PED_EXCEPTION_OPTION_FIRST; + else + i = current * 2; + + for (; i <= options; i *= 2) { + if (options & i) + return i; + } + return 0; +} + +static void +_print_exception_text (PedException* ex) +{ + StrList* text; + + wipe_line (); + + if (ex->type == PED_EXCEPTION_BUG) { + fprintf (stderr, bug_msg, VERSION); + text = str_list_create ("\n", ex->message, "\n\n", NULL); + } else { + text = str_list_create ( + _(ped_exception_get_type_string (ex->type)), + ": ", ex->message, "\n", NULL); + } + + str_list_print_wrap (text, screen_width (), 0, 0, stderr); + str_list_destroy (text); +} + +static PedExceptionOption +exception_handler (PedException* ex) +{ + PedExceptionOption opt; + + _print_exception_text (ex); + + /* only one choice? Take it ;-) */ + opt = option_get_next (ex->options, 0); + if (!option_get_next (ex->options, opt)) + return opt; + + /* script-mode and fix? */ + int fix_is_an_option = (ex->options & PED_EXCEPTION_FIX); + if (opt_script_mode && opt_fix_mode && fix_is_an_option) { + printf ("Fixing, due to --fix\n"); + return PED_EXCEPTION_FIX; + } + + /* script-mode: don't handle the exception */ + if (opt_script_mode || (!isatty (0) && !pretend_input_tty)) + return PED_EXCEPTION_UNHANDLED; + + got_ctrl_c = 0; + + opt = command_line_get_ex_opt ("", ex->options); + + return opt; +} + +void +command_line_push_word (const char* word) +{ + command_line = str_list_append (command_line, word); +} + +char* +command_line_pop_word () +{ + char* result; + StrList* next; + + PED_ASSERT (command_line != NULL); + + result = str_list_convert_node (command_line); + next = command_line->next; + + str_list_destroy_node (command_line); + command_line = next; + return result; +} + +void +command_line_flush () +{ + str_list_destroy (command_line); + command_line = NULL; +} + +char* +command_line_peek_word () +{ + if (command_line) + return str_list_convert_node (command_line); + else + return NULL; +} + +int +command_line_get_word_count () +{ + return str_list_length (command_line); +} + +static int _GL_ATTRIBUTE_PURE +_str_is_spaces (const char* str) +{ + while (isspace (*str)) + str++; + + return *str == 0; +} + +/* "multi_word mode" is the "normal" mode... many words can be typed, + * delimited by spaces, etc. + * In single-word mode, only one word is parsed per line. + * Leading and trailing spaces are removed. For example: " a b c " + * is a single word "a b c". The motivation for this mode is partition + * names, etc. In single-word mode, the empty string is a word. + * (but not in multi-word mode). + */ +void +command_line_push_line (const char* line, int multi_word) +{ + int quoted = 0; + int quotes_empty = 0; + char quote_char = 0; + char this_word [256]; + int i; + + do { + while (*line == ' ') + line++; + + i = 0; + for (; *line && i < sizeof (this_word) - 1; line++) { + if (*line == ' ' && !quoted) { + if (multi_word) + break; + + /* single word: check for trailing spaces + eol */ + if (_str_is_spaces (line)) + break; + } + + if (!quoted && strchr ("'\"", *line)) { + quoted = 1; + quote_char = *line; + continue; + } + + if (quoted && *line == quote_char) { + quoted = 0; + /* allow empty partition name in script mode */ + if (!i) + quotes_empty = 1; + continue; + } + + /* hack: escape characters */ + if (quoted && line[0] == '\\' && line[1]) + line++; + + quotes_empty = 0; + this_word [i++] = *line; + } + if (i || !multi_word || quotes_empty) { + quotes_empty = 0; + this_word [i] = 0; + command_line_push_word (this_word); + } + } while (*line && multi_word); +} + +static char* +realloc_and_cat (char* str, const char* append) +{ + int length = strlen (str) + strlen (append) + 1; + char* new_str = realloc (str, length); + + PED_ASSERT(new_str != NULL); + + strcat (new_str, append); + return new_str; +} + +static char* +_construct_prompt (const char* head, const char* def, + const StrList* possibilities) +{ + PED_ASSERT(head != NULL); + char* prompt = strdup (head); + PED_ASSERT(prompt != NULL); + + if (def && possibilities) + PED_ASSERT (str_list_match_any (possibilities, def)); + + if (possibilities && str_list_length (possibilities) < 8) { + const StrList* walk; + + if (strlen (prompt)) + prompt = realloc_and_cat (prompt, " "); + + for (walk = possibilities; walk; walk = walk->next) { + if (walk != possibilities) + prompt = realloc_and_cat (prompt, "/"); + + if (def && str_list_match_node (walk, def) == 2) { + prompt = realloc_and_cat (prompt, "["); + prompt = realloc_and_cat (prompt, def); + prompt = realloc_and_cat (prompt, "]"); + } else { + char* text = str_list_convert_node (walk); + prompt = realloc_and_cat (prompt, text); + free (text); + } + } + prompt = realloc_and_cat (prompt, "? "); + } else if (def) { + if (strlen (prompt)) + prompt = realloc_and_cat (prompt, " "); + prompt = realloc_and_cat (prompt, "["); + prompt = realloc_and_cat (prompt, def); + prompt = realloc_and_cat (prompt, "]? "); + } else { + if (strlen (prompt)) + prompt = realloc_and_cat (prompt, " "); + } + + return prompt; +} + +void +command_line_prompt_words (const char* prompt, const char* def, + const StrList* possibilities, int multi_word) +{ + char* line; + char* real_prompt; + char* _def = (char*) def; + int _def_needs_free = 0; + + if (!def && str_list_length (possibilities) == 1) { + _def = str_list_convert_node (possibilities); + _def_needs_free = 1; + } + + if (opt_script_mode) { + if (_def) { + command_line_push_line (_def, 0); + if (_def_needs_free) + free (_def); + } + return; + } + + do { + real_prompt = _construct_prompt (prompt, _def, possibilities); + line = _readline (real_prompt, possibilities); + free (real_prompt); + if (!line) { + /* readline returns NULL to indicate EOF. + Treat that like an interrupt. */ + got_ctrl_c = 1; + break; + } + + if (!strlen (line)) { + if (_def) + command_line_push_line (_def, 0); + } else { + command_line_push_line (line, multi_word); + } + free (line); + } while (!command_line_get_word_count () && !_def); + + if (_def_needs_free) + free (_def); +} + +/** + * Get a word from command line. + * + * \param possibilities a StrList of valid strings, NULL if all are valid. + * \param multi_word whether multiple words are allowed. + * + * \return The word(s), or NULL if empty. + */ +char* +command_line_get_word (const char* prompt, const char* def, + const StrList* possibilities, int multi_word) +{ + do { + if (command_line_get_word_count ()) { + char* result = command_line_pop_word (); + StrList* result_node; + + if (!possibilities) + return result; + + result_node = str_list_match (possibilities, result); + if (result_node == NULL) + error (0, 0, _("invalid token: %s"), result); + free (result); + if (result_node) + return str_list_convert_node (result_node); + + command_line_flush (); + if (opt_script_mode) + return NULL; + } + + command_line_prompt_words (prompt, def, possibilities, + multi_word); + if (got_ctrl_c) { + got_ctrl_c = 0; + return NULL; + } + } while (command_line_get_word_count ()); + + return NULL; +} + +int +command_line_get_integer (const char* prompt, int* value) +{ + char def_str [20]; + char* input; + long ret; + + snprintf (def_str, 20, "%d", *value); + input = command_line_get_word (prompt, *value ? def_str : NULL, + NULL, 1); + if (!input) + return 0; + + errno = 0; + ret = strtol (input, (char**) NULL, 10); + if (errno) + goto error; + + if ((ret > INT_MAX) || (ret < INT_MIN)) + goto error; + else + *value = (int) ret; + + free (input); + return 1; + +error: + free (input); + return 0; +} + +int +command_line_get_sector (const char* prompt, PedDevice* dev, PedSector* value, + PedGeometry** range, char** raw_input) +{ + char* def_str; + char* input; + int valid; + + def_str = ped_unit_format (dev, *value); + input = command_line_get_word (prompt, *value ? def_str : NULL, + NULL, 1); + + /* def_str might have rounded *value a little bit. If the user picked + * the default, make sure the selected sector is identical to the + * default. + */ + if (input && *value && !strcmp (input, def_str)) { + if (range) { + *range = ped_geometry_new (dev, *value, 1); + free (def_str); + free (input); + return *range != NULL; + } + + free (def_str); + free (input); + return 1; + } + + free (def_str); + if (!input) { + *value = 0; + if (range) + *range = NULL; + return 0; + } + + valid = ped_unit_parse (input, dev, value, range); + + if (raw_input) + *raw_input = input; + else + free (input); + return valid; +} + +int +command_line_get_state (const char* prompt, int* value) +{ + char* def_word; + char* input; + + if (*value) + def_word = str_list_convert_node (on_list); + else + def_word = str_list_convert_node (off_list); + input = command_line_get_word (prompt, def_word, on_off_list, 1); + free (def_word); + if (!input) + return 0; + if (str_list_match_any (on_list, input)) + *value = 1; + else + *value = 0; + free (input); + return 1; +} + +int +command_line_get_device (const char* prompt, PedDevice** value) +{ + char *def_dev_name = *value ? (*value)->path : NULL; + char *dev_name = command_line_get_word (prompt, def_dev_name, NULL, 1); + if (!dev_name) + return 0; + + PedDevice *dev = ped_device_get (dev_name); + free (dev_name); + if (!dev) + return 0; + + *value = dev; + return 1; +} + +int +command_line_get_disk (const char* prompt, PedDisk** value) +{ + PedDevice* dev = *value ? (*value)->dev : NULL; + + if (!command_line_get_device (prompt, &dev)) + return 0; + + assert (*value); + if (dev != (*value)->dev) { + PedDisk* new_disk = ped_disk_new (dev); + if (!new_disk) + return 0; + *value = new_disk; + } + return 1; +} + +int +command_line_get_partition (const char* prompt, PedDisk* disk, + PedPartition** value) +{ + PedPartition* part; + int ret; + + /* Flawed logic, doesn't seem to work?! + check = ped_disk_next_partition (disk, part); + part = ped_disk_next_partition (disk, check); + + if (part == NULL) { + + *value = check; + printf (_("The (only) primary partition has " + "been automatically selected\n")); + return 1; + + } else { + */ + int num = (*value) ? (*value)->num : 0; + + ret = command_line_get_integer (prompt, &num); + if ((!ret) || (num < 0)) { + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Expecting a partition number.")); + return 0; + } + + part = ped_disk_get_partition (disk, num); + + if (!part) { + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_CANCEL, + _("Partition doesn't exist.")); + return 0; + } + + *value = part; + return 1; + //} +} + +int +command_line_get_fs_type (const char* prompt, const PedFileSystemType*(* value)) +{ + char* fs_type_name; + PedFileSystemType* fs_type; + + fs_type_name = command_line_get_word (prompt, + *value ? (*value)->name : NULL, + fs_type_list, 1); + if (!fs_type_name) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Expecting a file system type.")); + return 0; + } + + fs_type = ped_file_system_type_get (fs_type_name); + if (!fs_type) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Unknown file system type \"%s\"."), + fs_type_name); + free (fs_type_name); + return 0; + } + + free (fs_type_name); + *value = fs_type; + return 1; +} + +int +command_line_get_disk_type (const char* prompt, const PedDiskType*(* value)) +{ + char* disk_type_name; + + disk_type_name = command_line_get_word (prompt, + *value ? (*value)->name : NULL, + disk_type_list, 1); + if (!disk_type_name) { + ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Expecting a disk label type.")); + return 0; + } + + *value = ped_disk_type_get (disk_type_name); + free (disk_type_name); + PED_ASSERT (*value != NULL); + return 1; +} + +int +command_line_get_disk_flag (const char* prompt, const PedDisk* disk, + PedDiskFlag* flag) +{ + StrList* opts = NULL; + PedDiskFlag walk = 0; + char* flag_name; + + while ( (walk = ped_disk_flag_next (walk)) ) { + if (ped_disk_is_flag_available (disk, walk)) { + const char* walk_name; + + walk_name = ped_disk_flag_get_name (walk); + opts = str_list_append (opts, walk_name); + opts = str_list_append_unique (opts, _(walk_name)); + } + } + if (opts == NULL) + { + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_OK, + _("No flags supported")); + + return 0; + } + flag_name = command_line_get_word (prompt, NULL, opts, 1); + str_list_destroy (opts); + + if (flag_name) { + *flag = ped_disk_flag_get_by_name (flag_name); + free (flag_name); + return 1; + } else + return 0; +} + +int +command_line_get_part_flag (const char* prompt, const PedPartition* part, + PedPartitionFlag* flag) +{ + StrList* opts = NULL; + PedPartitionFlag walk = 0; + char* flag_name; + + while ( (walk = ped_partition_flag_next (walk)) ) { + if (ped_partition_is_flag_available (part, walk)) { + const char* walk_name; + + walk_name = ped_partition_flag_get_name (walk); + opts = str_list_append (opts, walk_name); + opts = str_list_append_unique (opts, _(walk_name)); + } + } + if (opts == NULL) + { + ped_exception_throw (PED_EXCEPTION_ERROR, + PED_EXCEPTION_OK, + _("No flags supported")); + + return 0; + } + flag_name = command_line_get_word (prompt, NULL, opts, 1); + str_list_destroy (opts); + + if (flag_name) { + *flag = ped_partition_flag_get_by_name (flag_name); + free (flag_name); + return 1; + } else + return 0; +} + +static int +_can_create_primary (const PedDisk* disk) +{ + int i; + + for (i = 1; i <= ped_disk_get_max_primary_partition_count (disk); i++) { + if (!ped_disk_get_partition (disk, i)) + return 1; + } + + return 0; +} + +static int +_can_create_extended (const PedDisk* disk) +{ + if (!_can_create_primary (disk)) + return 0; + + if (!ped_disk_type_check_feature (disk->type, PED_DISK_TYPE_EXTENDED)) + return 0; + + if (ped_disk_extended_partition (disk)) + return 0; + + return 1; +} + +static int +_can_create_logical (const PedDisk* disk) +{ + if (!ped_disk_type_check_feature (disk->type, PED_DISK_TYPE_EXTENDED)) + return 0; + + return ped_disk_extended_partition (disk) != 0; +} + +int +command_line_get_part_type (const char* prompt, const PedDisk* disk, + PedPartitionType* type) +{ + StrList* opts = NULL; + char* type_name; + + if (_can_create_primary (disk)) { + opts = str_list_append_unique (opts, "primary"); + opts = str_list_append_unique (opts, _("primary")); + } + if (_can_create_extended (disk)) { + opts = str_list_append_unique (opts, "extended"); + opts = str_list_append_unique (opts, _("extended")); + } + if (_can_create_logical (disk)) { + opts = str_list_append_unique (opts, "logical"); + opts = str_list_append_unique (opts, _("logical")); + } + if (!opts) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Can't create any more partitions.")); + return 0; + } + + type_name = command_line_get_word (prompt, NULL, opts, 1); + str_list_destroy (opts); + + if (!type_name) { + ped_exception_throw ( + PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, + _("Expecting a partition type.")); + return 0; + } + + if (!strcmp (type_name, "primary") + || !strcmp (type_name, _("primary"))) { + *type = 0; + } + if (!strcmp (type_name, "extended") + || !strcmp (type_name, _("extended"))) { + *type = PED_PARTITION_EXTENDED; + } + if (!strcmp (type_name, "logical") + || !strcmp (type_name, _("logical"))) { + *type = PED_PARTITION_LOGICAL; + } + + free (type_name); + return 1; +} + +PedExceptionOption +command_line_get_ex_opt (const char* prompt, PedExceptionOption options) +{ + StrList* options_strlist = NULL; + PedExceptionOption opt; + char* opt_name; + + command_line_flush (); + for (opt = option_get_next (options, 0); opt; + opt = option_get_next (options, opt)) { + options_strlist = str_list_append_unique (options_strlist, + _(ped_exception_get_option_string (opt))); + options_strlist = str_list_append_unique (options_strlist, + ped_exception_get_option_string (opt)); + } + + opt_name = command_line_get_word (prompt, NULL, options_strlist, 1); + if (!opt_name) + return PED_EXCEPTION_UNHANDLED; + str_list_destroy (options_strlist); + + opt = PED_EXCEPTION_OPTION_FIRST; + while (1) { + if (strcmp (opt_name, + ped_exception_get_option_string (opt)) == 0) + break; + if (strcmp (opt_name, + _(ped_exception_get_option_string (opt))) == 0) + break; + opt = option_get_next (options, opt); + } + free (opt_name); + return opt; +} + +int +command_line_get_align_type (const char *prompt, enum AlignmentType *align_type) +{ + char* def_word; + char* input; + + if (*align_type) + def_word = str_list_convert_node (align_opt_list); + else + def_word = str_list_convert_node (align_min_list); + input = command_line_get_word (prompt, def_word, align_opt_min_list, 1); + free (def_word); + if (!input) + return 0; + *align_type = (str_list_match_any (align_opt_list, input) + ? PA_OPTIMUM + : PA_MINIMUM); + free (input); + return 1; +} + +int +command_line_get_unit (const char* prompt, PedUnit* unit) +{ + StrList* opts = NULL; + PedUnit walk; + char* unit_name; + const char* default_unit_name; + + for (walk = PED_UNIT_FIRST; walk <= PED_UNIT_LAST; walk++) + opts = str_list_append (opts, ped_unit_get_name (walk)); + + default_unit_name = ped_unit_get_name (ped_unit_get_default ()); + unit_name = command_line_get_word (prompt, default_unit_name, opts, 1); + str_list_destroy (opts); + + if (unit_name) { + *unit = ped_unit_get_by_name (unit_name); + free (unit_name); + return 1; + } else + return 0; +} + +int +command_line_is_integer () +{ + char* word; + int is_integer; + int scratch; + + word = command_line_peek_word (); + if (!word) + return 0; + + is_integer = sscanf (word, "%d", &scratch); + free (word); + return is_integer; +} + +static int +init_ex_opt_str () +{ + int i; + PedExceptionOption opt; + + for (i = 0; (1 << i) <= PED_EXCEPTION_OPTION_LAST; i++) { + opt = (1 << i); + ex_opt_str [i] + = str_list_create ( + ped_exception_get_option_string (opt), + _(ped_exception_get_option_string (opt)), + NULL); + if (!ex_opt_str [i]) + return 0; + } + + ex_opt_str [i] = NULL; + return 1; +} + +static void +done_ex_opt_str () +{ + int i; + + for (i=0; ex_opt_str [i]; i++) + str_list_destroy (ex_opt_str [i]); +} + +static int +init_state_str () +{ + on_list = str_list_create_unique (_("on"), "on", NULL); + off_list = str_list_create_unique (_("off"), "off", NULL); + on_off_list = str_list_join (str_list_duplicate (on_list), + str_list_duplicate (off_list)); + return 1; +} + +static void +done_state_str () +{ + str_list_destroy (on_list); + str_list_destroy (off_list); + str_list_destroy (on_off_list); +} + +static int +init_alignment_type_str () +{ + align_opt_list = str_list_create_unique (_("optimal"), "optimal", NULL); + align_min_list = str_list_create_unique (_("minimal"), "minimal", NULL); + align_opt_min_list = str_list_join (str_list_duplicate (align_opt_list), + str_list_duplicate (align_min_list)); + return 1; +} + +static void +done_alignment_type_str () +{ + str_list_destroy (align_opt_list); + str_list_destroy (align_min_list); + str_list_destroy (align_opt_min_list); +} + +static int +init_fs_type_str () +{ + PedFileSystemType* walk; + PedFileSystemAlias* alias_walk; + + fs_type_list = NULL; + + for (walk = ped_file_system_type_get_next (NULL); walk; + walk = ped_file_system_type_get_next (walk)) + { + fs_type_list = str_list_insert (fs_type_list, walk->name); + if (!fs_type_list) + return 0; + } + for (alias_walk = ped_file_system_alias_get_next (NULL); alias_walk; + alias_walk = ped_file_system_alias_get_next (alias_walk)) + { + fs_type_list = str_list_insert (fs_type_list, + alias_walk->alias); + if (!fs_type_list) + return 0; + } + + return 1; +} + +static int +init_disk_type_str () +{ + PedDiskType* walk; + + disk_type_list = NULL; + + for (walk = ped_disk_type_get_next (NULL); walk; + walk = ped_disk_type_get_next (walk)) + { + disk_type_list = str_list_insert (disk_type_list, walk->name); + if (!disk_type_list) + return 0; + } + + return 1; +} + +int +init_readline (void) +{ +#ifdef HAVE_LIBREADLINE + if (!opt_script_mode) { + rl_initialize (); + rl_attempted_completion_function = (rl_completion_func_t *) complete_function; + readline_state.in_readline = 0; + } +#endif + return 0; +} + +int +init_ui () +{ + if (!init_ex_opt_str () + || !init_state_str () + || !init_alignment_type_str () + || !init_fs_type_str () + || !init_disk_type_str ()) + return 0; + ped_exception_set_handler (exception_handler); + +#ifdef SA_SIGINFO + sigset_t curr; + sigfillset (&curr); + + sig_segv.sa_sigaction = &sa_sigsegv_handler; + sig_int.sa_sigaction = &sa_sigint_handler; + sig_fpe.sa_sigaction = &sa_sigfpe_handler; + sig_ill.sa_sigaction = &sa_sigill_handler; + + sig_segv.sa_mask = + sig_int.sa_mask = + sig_fpe.sa_mask = + sig_ill.sa_mask = curr; + + sig_segv.sa_flags = + sig_int.sa_flags = + sig_fpe.sa_flags = + sig_ill.sa_flags = SA_SIGINFO; + + sigaction (SIGSEGV, &sig_segv, NULL); + sigaction (SIGINT, &sig_int, NULL); + sigaction (SIGFPE, &sig_fpe, NULL); + sigaction (SIGILL, &sig_ill, NULL); +#else + signal (SIGSEGV, s_sigsegv_handler); + signal (SIGINT, s_sigint_handler); + signal (SIGFPE, s_sigfpe_handler); + signal (SIGILL, s_sigill_handler); +#endif /* SA_SIGINFO */ + + return 1; +} + +void +done_ui () +{ + ped_exception_set_handler (NULL); + done_ex_opt_str (); + done_state_str (); + done_alignment_type_str (); + str_list_destroy (fs_type_list); + str_list_destroy (disk_type_list); +} + +void +help_msg () +{ + fputs (_(usage_msg), stdout); + + putchar ('\n'); + fputs (_("OPTIONs:"), stdout); + putchar ('\n'); + print_options_help (); + + putchar ('\n'); + fputs (_("COMMANDs:"), stdout); + putchar ('\n'); + print_commands_help (); + printf (_("\nReport bugs to %s\n"), PACKAGE_BUGREPORT); + set_ret = 1; + parted_ret = 0; + sleep(1); + exit (EXIT_SUCCESS); +} + +void +print_using_dev (PedDevice* dev) +{ + printf (_("Using %s\n"), dev->path); +} + +int +interactive_mode (PedDevice** dev, PedDisk** disk, Command* cmd_list[]) +{ + StrList* list; + StrList* command_names = command_get_names (cmd_list); + + commands = cmd_list; /* FIXME yucky, nasty, evil hack */ + + fputs (prog_name, stdout); + + print_using_dev (*dev); + + list = str_list_create (_(banner_msg), NULL); + str_list_print_wrap (list, screen_width (), 0, 0, stdout); + str_list_destroy (list); + + while (1) { + char* word; + Command* cmd; + + while (!command_line_get_word_count ()) { + if (got_ctrl_c) { + putchar ('\n'); + return 1; + } + command_line_prompt_words ("(parted)", NULL, + command_names, 1); + } + + word = command_line_pop_word (); + if (word) { + cmd = command_get (commands, word); + free (word); + if (cmd) { + if (!command_run (cmd, dev, disk)) { + command_line_flush (); + + if (*disk) { + ped_disk_destroy (*disk); + *disk = 0; + } + } + } else + print_commands_help (); + } + } + + return 1; +} + + +int +non_interactive_mode (PedDevice** dev, PedDisk **disk, Command* cmd_list[], + int argc, char* argv[]) +{ + int i; + Command* cmd; + + commands = cmd_list; /* FIXME yucky, nasty, evil hack */ + + for (i = 0; i < argc; i++) + command_line_push_line (argv [i], 1); + + while (command_line_get_word_count ()) { + char* word; + + word = command_line_pop_word (); + if (!word) + break; + + cmd = command_get (commands, word); + free (word); + if (!cmd) { + help_msg (); + goto error; + } + if (!(cmd->non_interactive)) { + fputs(_("This command does not make sense in " + "non-interactive mode.\n"), stdout); + set_ret = 1; + parted_ret = 1; + sleep(1); + exit(EXIT_FAILURE); + goto error; + } + + if (!command_run (cmd, dev, disk)) + goto error; + } + return 1; + +error: + return 0; +} diff --git a/jni/parted/parted/ui.h b/jni/parted/parted/ui.h new file mode 100755 index 0000000..61a71de --- /dev/null +++ b/jni/parted/parted/ui.h @@ -0,0 +1,98 @@ +/* + parted - a frontend to libparted + Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation, + Inc. + + 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 3 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, see . +*/ + +#ifndef UI_H_INCLUDED +#define UI_H_INCLUDED + +#include "strlist.h" + +enum AlignmentType + { + PA_MINIMUM = 1, + PA_OPTIMUM + }; + +extern const char *prog_name; + +extern int init_ui (); +extern int init_readline (); +extern int non_interactive_mode (PedDevice** dev, PedDisk **disk, + Command* cmd_list[], int argc, + char* argv[]); +extern int interactive_mode (PedDevice** dev, PedDisk **disk, + Command* cmd_list[]); +extern void done_ui (); + +extern int screen_width (); +extern void wipe_line (); + +extern void command_line_push_word (const char* word); +extern char* command_line_pop_word (); +extern char* command_line_peek_word (); +extern void command_line_flush (); +extern int command_line_get_word_count () _GL_ATTRIBUTE_PURE; +extern void command_line_prompt_words (const char* prompt, const char* def, + const StrList* possibilities, + int multi_word); +extern char* command_line_get_word (const char* prompt, const char* def, + const StrList* possibilities, + int multi_word); +extern int command_line_get_integer (const char* prompt, int* value); +extern int command_line_get_sector (const char* prompt, PedDevice* dev, + PedSector* value, PedGeometry** range, char** raw_input); +extern int command_line_get_state (const char* prompt, int* value); +extern int command_line_get_device (const char* prompt, PedDevice** value); +extern int command_line_get_disk (const char* prompt, PedDisk** value) + __attribute__((__nonnull__(2))); +extern int command_line_get_partition (const char* prompt, PedDisk* disk, + PedPartition** value); +extern int command_line_get_fs_type (const char* prompt, + const PedFileSystemType*(* value)); +extern int command_line_get_disk_type (const char* prompt, + const PedDiskType*(* value)); +extern int command_line_get_disk_flag (const char* prompt, + const PedDisk* disk, + PedDiskFlag* flag); +extern int command_line_get_part_flag (const char* prompt, + const PedPartition* part, + PedPartitionFlag* flag); +extern int command_line_get_part_type (const char* prompt, const PedDisk* disk, + PedPartitionType* type); +extern PedExceptionOption command_line_get_ex_opt (const char* prompt, + PedExceptionOption options); +extern int command_line_get_unit (const char* prompt, PedUnit* unit); +extern int command_line_get_align_type (const char *prompt, + enum AlignmentType *align_type); + +extern int command_line_is_integer (); +extern int command_line_is_sector (); + +extern void help_msg () __attribute__((__noreturn__)); + +extern void print_using_dev (PedDevice* dev); + +/* in parted.c */ +extern int opt_script_mode; +extern int opt_fix_mode; +extern int pretend_input_tty; + +extern void print_options_help (); +extern void print_commands_help (); + +#endif /* UI_H_INCLUDED */ diff --git a/jni/parted/parted/version.c b/jni/parted/parted/version.c new file mode 100755 index 0000000..ec0b860 --- /dev/null +++ b/jni/parted/parted/version.c @@ -0,0 +1,2 @@ +#include +char const *Version = "3.6.6-c5bd-pmt"; diff --git a/jni/parted/parted/version.h b/jni/parted/parted/version.h new file mode 100755 index 0000000..f6a1ed3 --- /dev/null +++ b/jni/parted/parted/version.h @@ -0,0 +1 @@ +extern char const *Version; diff --git a/pmt-termux.sh b/pmt-termux.sh index 354795a..822f54b 100755 --- a/pmt-termux.sh +++ b/pmt-termux.sh @@ -3,8 +3,8 @@ # By YZBruh | ShawkTeam # Variables -LOCAL_VERSION="2.9.6" -LOCAL_RELDATE="20241026" +LOCAL_VERSION="3.0.2" +LOCAL_RELDATE="20241214" LOCAL_OWNER="ShawkTeam" LOCAL_REPO="pmt" LOCAL_RELEASE_TAG="${LOCAL_VERSION}" @@ -24,19 +24,19 @@ YELLOW="\033[0;33m" function printc() { ${SILENT} || echo -e "$*" >&2; } function print() { - if echo "$*" | grep "Success" &>/dev/null; then - ${SILENT} || echo -e " - ${GREEN}${1:0:7}${RESET}." >&2 - else - ${SILENT} || echo -e " - $*" >&2 - fi + if echo "$*" | grep "Success" &>/dev/null; then + ${SILENT} || echo -e " - ${GREEN}${1:0:7}${RESET}." >&2 + else + ${SILENT} || echo -e " - $*" >&2 + fi } # Print error and exit function abort() { - print "${RED}Error:${RESET} ${@}" - cleanup - exit 1 + print "${RED}Error:${RESET} ${@}" + cleanup + exit 1 } # Print warnings @@ -48,53 +48,37 @@ function script_head() { printc " --- Partition Manager Termux Helper Script --- # For display help message function view_help() { - ${SILENT} || echo -n "Usage: " - if echo "${0}" | grep "./" >&/dev/null; then - printc "${0} [OPTIONS]..." - else - printc "(bash) ${0} [OPTIONS]" - fi + ${SILENT} || echo -n "Usage: " + if echo "${0}" | grep "./" >&/dev/null; then + printc "${0} [OPTIONS]..." + else + printc "(bash) ${0} [OPTIONS]" + fi - printc "Install, uninstall, install status checker for Partition Manager binary.\n" - printc "Options:" - printc " install, -i [OPTS] Download and install Partition Manager." - printc " uninstall, -u Uninstall Partition Manager." - printc " status, -s Display install/uninstall status." - printc " --quiet, -q Silent mode. No output." - printc " --setup, -S Setup required packages." - printc " --package If you already have a pmt package, make\n setup by specifying this way." - printc "Report bugs to " + printc "Install, uninstall, install status checker for Partition Manager binary.\n" + printc "Options:" + printc " install, -i [OPTS] Download and install Partition Manager." + printc " uninstall, -u Uninstall Partition Manager." + printc " status, -s Display install/uninstall status." + printc " --quiet, -q Silent mode. No output." + printc " --setup, -S Setup required packages." + printc " --package If you already have a pmt package, make\n setup by specifying this way." + printc "Report bugs to " } # Script really operated termux proclamation? function really_termux() { - basename -a ${LOCAL_PREFIX}/bin/* | grep "termux" &>/dev/null \ - || abort "Are you sure you're in termux?" + basename -a ${LOCAL_PREFIX}/bin/* | grep "termux" &>/dev/null \ + || abort "Are you sure you're in termux?" } # Get architecture info function get_architecture() { - local arch=$(uname -m) - local archs_64=("aarch64" "armv8" "arm64-v8a" "armv8-a") - local archs_32=("aarch32" "armv7" "armeabi-v7a" "armv7l") + LOCAL_ARCH=$(getprop ro.product.cpu.abi) - print "Device architecture: '${arch}'." - - for a in ${archs_64[@]}; do - [ "${arch}" = "${a}" ] \ - && LOCAL_ARCH="arm64-v8a" \ - && return - done - - for a in ${archs_32[@]}; do - [ "${arch}" = "${a}" ] \ - && LOCAL_ARCH="armeabi-v7a" \ - && return - done - - LOCAL_ARCH="arm64-v8a" + print "Device architecture: ${arch}." } # Generate template dir @@ -106,124 +90,125 @@ function cleanup() { rm -rf "${LOCAL_TMPDIR}"; } # Check install/uninstall status function check_status() { - local installed="${RED}false${RESET}" - [ -f "${LOCAL_PREFIX}/bin/pmt" ] \ - && installed="${GREEN}true${RESET}" + local installed="${RED}false${RESET}" + /system/bin/which pmt &>/dev/null \ + && installed="${GREEN}true${RESET}" - print "Installed: ${installed}" - exit 0 + print "Installed: ${installed}" + exit 0 } # check xz-utils install status function check_xz() { - # The outflow of the APT is not controlled in use - [ -f ${LOCAL_PREFIX}/bin/xz ] \ - || abort "xz-utils not installed! Run setup command." + # The outflow of the APT is not controlled in use + [ -f ${LOCAL_PREFIX}/bin/xz ] \ + || abort "xz-utils not installed! Run setup command." } # Check internet connection function net_control() { - curl "https://github.com" &>/dev/null \ - || abort "You need internet connection to this process." + curl "https://github.com" &>/dev/null \ + || abort "You need internet connection to this process." } # Download Partition Manager function download() { - local URL="https://github.com/${LOCAL_OWNER}/${LOCAL_REPO}/releases/tag/${LOCAL_RELEASE_TAG}/download/pmt-${LOCAL_ARCH}-${LOCAL_RELDATE}.xz" - local URL_MANDOC="https://github.com/${LOCAL_OWNER}/${LOCAL_REPO}/releases/tag/${LOCAL_RELEASE_TAG}/download/mandoc.gz" + local URL="https://github.com/${LOCAL_OWNER}/${LOCAL_REPO}/releases/tag/${LOCAL_RELEASE_TAG}/download/pmt-${LOCAL_ARCH}-${LOCAL_RELDATE}.xz" + local URL_MANDOC="https://github.com/${LOCAL_OWNER}/${LOCAL_REPO}/releases/tag/${LOCAL_RELEASE_TAG}/download/mandoc.gz" - cd "${LOCAL_TMPDIR}" - print "Downloading: 'pmt-${LOCAL_ARCH}-${LOCAL_RELDATE}.xz'..." - wget "${URL}" &>/dev/null \ - || abort "Download failed!" - cd - &>/dev/null + cd "${LOCAL_TMPDIR}" + print "Downloading: 'pmt-${LOCAL_ARCH}-${LOCAL_RELDATE}.xz'..." + wget "${URL}" &>/dev/null \ + || abort "Download failed!" + cd - &>/dev/null - HAVE_MANDOC=true - print "Downloading mandoc..." - curl -L "${URL_MANDOC}" -o "${LOCAL_TMPDIR}/pmt.8.gz" &>/dev/null \ - || warning "Download failed! (mandoc)" + HAVE_MANDOC=true + print "Downloading mandoc..." + curl -L "${URL_MANDOC}" -o "${LOCAL_TMPDIR}/pmt.8.gz" &>/dev/null \ + || warning "Download failed! (mandoc)" - chmod -R 755 "${LOCAL_TMPDIR}" &>/dev/null \ - || warning "Cannot set mode '777' on downloaded files." + chmod -R 755 "${LOCAL_TMPDIR}" &>/dev/null \ + || warning "Cannot set mode '777' on downloaded files." } # For installing required packages function setup_packages() { - net_control + net_control - print "Updating mirrors..." - pkg update &>/dev/null || abort "Updating failed!" + print "Updating mirrors..." + pkg update &>/dev/null || abort "Updating failed!" - print "Installing xz-utils, wget..." - pkg install -y xz-utils wget &>/dev/null \ - || abort "Installing failed!" + print "Installing xz-utils, wget..." + pkg install -y xz-utils wget &>/dev/null \ + || abort "Installing failed!" - print "Success." - exit 0 + print "Success." + exit 0 } # Install deb package function install_fn() { - local mydir="${PWD}" - [ "${LOCAL_PACKAGE}" = "" ] || local bname=$(basename ${LOCAL_PACKAGE}) + local mydir="${PWD}" + [ "${LOCAL_PACKAGE}" = "" ] || local bname=$(basename ${LOCAL_PACKAGE}) - ${PACKAGE} && \ - if [ ! -f "${LOCAL_PACKAGE}" ]; then - [ -d "${LOCAL_PACKAGE}" ] \ - && abort "\`${LOCAL_PACKAGE}': is directory." + ${PACKAGE} && \ + if [ ! -f "${LOCAL_PACKAGE}" ]; then + [ -d "${LOCAL_PACKAGE}" ] \ + && abort "\`${LOCAL_PACKAGE}': is directory." - abort "\`${LOCAL_PACKAGE}': no such file." - else - cp "${LOCAL_PACKAGE}" "${LOCAL_TMPDIR}/pmt-${LOCAL_ARCH}.xz" - fi + abort "\`${LOCAL_PACKAGE}': no such file." + else + cp "${LOCAL_PACKAGE}" "${LOCAL_TMPDIR}/pmt-${LOCAL_ARCH}.xz" + fi - cd "${LOCAL_TMPDIR}" + cd "${LOCAL_TMPDIR}" - print "Extracting package..." - if unxz "$(basename *.xz)" &>/dev/null; then - rm -f "pmt*.xz" - else - abort "Failed! Cannot extract pmt package." - fi + print "Extracting package..." + if unxz "$(basename *.xz)" &>/dev/null; then + rm -f "pmt*.xz" + else + abort "Failed! Cannot extract pmt package." + fi - [ -z $(basename "pmt-*") ] \ - && abort "Extracted binary file was not found!" - mv "$(basename pmt-*)" pmt + [ -z $(basename "pmt-*") ] \ + && abort "Extracted binary file was not found!" + mv "$(basename pmt-*)" pmt - print "Installing..." - cp pmt "${LOCAL_PREFIX}/bin/pmt" &>/dev/null \ - || abort "Installing failed!" + print "Installing..." + cp pmt "${LOCAL_PREFIX}/bin/pmt" &>/dev/null \ + || abort "Installing failed!" - if ${HAVE_MANDOC}; then - print "Installing mandoc (force)..." - cp -f pmt.8.gz ${LOCAL_PREFIX}/share/man/man8 &>/dev/null - chmod 755 ${LOCAL_PREFIX}/share/man/man8/pmt.8.gz &>/dev/null - fi + ${HAVE_MANDOC} && { + print "Installing mandoc (force)..." + cp -f pmt.8.gz ${LOCAL_PREFIX}/share/man/man8 &>/dev/null + chmod 755 ${LOCAL_PREFIX}/share/man/man8/pmt.8.gz &>/dev/null + } - print "Setting up permissions for binary..." - chmod 755 "${LOCAL_PREFIX}/bin/pmt" &>/dev/null \ - || abort "Failed to set permissions!" + print "Setting up permissions for binary..." + chmod 755 "${LOCAL_PREFIX}/bin/pmt" &>/dev/null \ + || abort "Failed to set permissions!" - print "Success." - cd "${mydir}" + print "Success." + cd "${mydir}" } # Uninstall deb package function uninstall_fn() { - print "Uninstalling Partition Manager..." && \ - if rm "${LOCAL_PREFIX}/bin/pmt" &>/dev/null; then - print "Success." - else - abort "Failed!" - fi + print "Uninstalling Partition Manager..." - rm -f ${LOCAL_PREFIX}/share/man/man8/pmt.8.gz + if rm "${LOCAL_PREFIX}/bin/pmt" &>/dev/null; then + print "Success." + else + abort "Failed!" + fi + + rm -f ${LOCAL_PREFIX}/share/man/man8/pmt.8.gz } trap "abort Interrupt." SIGINT @@ -234,80 +219,80 @@ HAVE_MANDOC=false # Process arguments while (($# >= 1)); do - SOME_SPEC=1 + SOME_SPEC=1 - case "${1}" in - install|-i) - PROCESS=1 - ;; - uninstall|-u) - PROCESS=2 - ;; - status|-s) - script_head - check_status y - ;; - --quiet|-q) - SILENT=true - ;; - --setup|-S) - script_head - print "Starting package setupper..." - setup_packages - ;; - --package) - PACKAGE=true - [ -z ${2} ] && \ - { printc "Option '--package' requires an argument (file)." - exit 1 - } - LOCAL_PACKAGE="${2}" - ALREADY_SHIFT=true && shift 1 - ;; - --help) - view_help - exit 0 - ;; - *) - if echo ${1} | grep "-" &>/dev/null; then - if ! echo ${1} | grep ".xz" &>/dev/null; then - printc "Unknown option: ${1}" - exit 1 - else - break; - fi - else - break - fi - ;; - esac + case "${1}" in + install|-i) + PROCESS=1 + ;; + uninstall|-u) + PROCESS=2 + ;; + status|-s) + script_head + check_status y + ;; + --quiet|-q) + SILENT=true + ;; + --setup|-S) + script_head + print "Starting package setupper..." + setup_packages + ;; + --package) + PACKAGE=true + [ -z ${2} ] && { + printc "Option '--package' requires an argument (file)." + exit 1 + } + LOCAL_PACKAGE="${2}" + ALREADY_SHIFT=true && shift 1 + ;; + --help) + view_help + exit 0 + ;; + *) + if echo ${1} | grep "-" &>/dev/null; then + if ! echo ${1} | grep ".xz" &>/dev/null; then + printc "Unknown option: ${1}" + exit 1 + else + break; + fi + else + break + fi + ;; + esac - ${ALREADY_SHIFT} || shift 1 + ${ALREADY_SHIFT} || shift 1 done ### Main ### [ -z "${1}" -a "${SOME_SPEC}" != 1 ] && { view_help; exit 1; } -if [ "${PROCESS}" = 1 -o "${PROCESS}" = 2 ]; then - script_head - really_termux - gen_tempdir -fi +[ "${PROCESS}" = 1 -o "${PROCESS}" = 2 ] && { + script_head + really_termux + gen_tempdir +} if [ "${PROCESS}" = 1 ]; then - [ -f "${LOCAL_PREFIX}/bin/pmt" ] \ - && abort "Partition Manager already installed." - ${PACKAGE} || net_control - check_xz - get_architecture - print "Starting install process..." - ${PACKAGE} || download - install_fn + /system/bin/which pmt &>/dev/null \ + && abort "Partition Manager already installed." + ${PACKAGE} || net_control + check_xz + get_architecture + print "Starting install process..." + ${PACKAGE} || download + install_fn elif [ "${PROCESS}" = 2 ]; then - [ ! -f "${LOCAL_PREFIX}/bin/pmt" ] \ - && abort "Partition Manager already uninstalled." - print "Starting uninstall process..." - uninstall_fn + /system/bin/which pmt &>/dev/null \ + && abort "Partition Manager already uninstalled." + print "Starting uninstall process..." + uninstall_fn fi cleanup